

        
                           README.TXT for YACL

                 
This  is  YACL  (Yet Another Class   Library).  It  is a general-purpose
programming   library designed   with  the   idea  of  identifying   and
implementing  useful  object  abstractions  that  frequently   occur  in
application  development, so  that  development effort can   be cut down
significantly.      The   abstractions       are   designed   to      be
application-domain-specific rather   than platform-specific.  This makes
it possible  for  YACL to be ported  to  multiple platforms  with little
effort, and any application that is coded to use  YACL's classes will be
runnable on any of the  supported platforms with merely a recompilation.
YACL is part  of  an ongoing project   to create a   completely portable
program development environment.


YACL consists  of three  kinds of classes:  base classes  (consisting of
primitive data   types  and container classes),  i/o   classes (for data
storage  and  retrieval)  and  GUI   classes  using a   variation of the
Model-View-Controller paradigm.  The base  and i/o classes of  YACL have
been designed to support the most efficient  algorithms possible, and to
impose  as few storage  constraints as possible.  All classes (base, i/o
and GUI) have been tested for memory and resource leaks.

CONCEPTUAL FEATURES:

    -  Template-based containers for code sharing
    
    -  Easy     inter-object    communication via   notification   (used
       extensively in the GUI framework -- see below)

    -  Support for storage and retrieval of objects in binary form

    -  Support for very large sequences, sets and maps (with up to about
       64 million  entries),  even under  MS-Windows, thus circumventing
       the 64K segment size limitation
       

FUNCTIONAL FEATURES:

    Base library:
    
       - primitive data  types: string, date, time-of-day,  byte array,
         byte string

       - container   classes  (template-based):  sequence   (in lieu of
         lists), set, bitset, map, tree; as  noted above, the sequence,
         set and map can have size up to 2^26  (about 64 million), even
         under MS-Windows.

       - utility classes: string splitter, tree walker

       - memory leak checker     class and support  functionality   for
         checking for leaks and memory corruption errors
       
    File i/o library:
    
       - SlottedFile for managing files with fixed-length records (well
         suited  for tables in relational  databases); manages upto 800
         million records with at most five i/o operations per record
         
       - ByteStringStore for    managing  files  with   variable-length
         records (whose lengths can  even grow and  shrink dynamically)
         --  suited, for example, for  maintaining secondary indices or
         other "binary large object" data
         

    B-trees:
    
       - In-memory  and disk-based B-trees  supported, both sharing the
         same B-tree algorithm code
         
       - Can be used in conjunction with the above file i/o library for
         B-trees with variable-length keys

    GUI library:
    
       - Portable  abstractions for  building graphic user  interfaces,
         based on the model-view-controller paradigm

       - GUI objects well integrated with base  library, to enhance the
         overall power and reusability of classes
         
       - Supports menus,  dialogs,  buttons, listboxes,  button groups,
         cursors, fonts, pens, colors and elementary drawing

       - Provides  for easy  composition  of basic objects,  as well as
         high reusability


SUPPORTED PLATFORMS:

Here is a summary of current status in tabular form:

                MS/Windows          OS/2             Unix (Linux and Ultrix)
              Borland C++ 3.1   Borland C++ 1.0        GNU C++ 2.6.0

Base classes       X                 X                      X
I/O classes        X                 X                      X
GUI classes        X                                        X (partial)


All of YACL's  classes  have been  tested under  Microsoft Windows using
Borland C++ 3.1.

The  base classes have also  been tested with Borland   C++ for OS/2 and
with GNU C++ 2.6.0 under Linux. (The base classes will not compile under
earlier versions of GNU C++ due to bugs in the compiler.)

The base classes do not (yet) compile under Watcom C++; a workaround for
a compiler bug is  being investigated.

The  implementations  of  the GUI  classes   under X/Motif  is   not yet
complete; it lacks support for graphics, fonts and  bitmaps. But it does
include all the basic GUI widget functionality,  and sample programs are
included to demonstrate this  fact. If you want  to try out  the X/Motif
version,  build  the  programs in  the    uidemo directory that  include
makefile.gcc. (Those  programs   that are  as  yet  unimplemented  under
X/Motif do not include this makefile.)

YACL cannot   be  compiled  with  any  compiler  that  does not  support
templates.


DOCUMENTATION:

A tutorial and reference manual for YACL will appear as a book published
by Addison-Wesley   in the summer of  1995.   If  you  are interested in
looking at sample chapters from a  preliminary draft of the book, please
obtain sample chapters  by anonymous ftp from the   host aw.com, in  the
directory pub/aw.computer.science/YACL.   All   comments, criticisms and
reports  of  bugs or  other errors  will be  gratefully  accepted by the
author at the address below.


FUTURE WORK:

The GUI objects  are being ported to  the X/Motif environment; this port
is almost complete, and a version will be available within a month. At a
later date,  YACL will be available under  OS/2 PM and  (maybe possibly)
the Apple Mac.


RELATED PROJECTS:

A GUI layout designer  (with functionality similar to Borland's Resource
Workshop) is currently under development.

An awk  script  is available  for translating MS-Windows  resource files
into  a form usable   by YACL. Direct  support for  dialogs  loaded from
Windows  resource  files  is   also  available;  this is,  however,    a
non-portable feature.


AUTHOR:
         M. A. Sridhar
         Department of Computer Science
         University of South Carolina
         Columbia, SC 29208
         USA
         e-mail: sridhar@usceast.cs.scarolina.edu
         Phone:  (803) 777-2427
         Fax:    (803) 777-3767

         N. Bhowmik, currently  with Object Design Inc., coded
         the initial version of the GUI classes of YACL.



COPYRIGHT:

This software is Copyright  (C) M.  A. Sridhar, 1994.   You are  free to
copy, modify and distribute this software as you see  fit, and to use it
for   any  purpose, provided this  copyright   notice  and the following
disclaimer     are  included without     modification in  all copies and
modifications.


DISCLAIMER:

The author  makes no  warranties,   either expressed or   implied,  with
respect to this software,  its quality, performance, merchantability, or
fitness for any particular purpose.  This software is distributed AS IS.
The  user of this  software  assumes all  risks   as to its quality  and
performance. In no  event shall  the author be   liable for any  direct,
indirect or consequential  damages, even if  the author has been advised
as to the possibility of such damages.



AVAILABILITY:

YACL  is   available   for  anonymous   ftp   from  ftp.cs.scarolina.edu
(129.252.131.11), as  the  file /pub/sridhar/yacl.zip. Please send  your
comments,   suggestions and  bug  reports  to the   author  at the above
address.

