

        
                           README.TXT for YACL
                              Version 1.2
                              Apr 10, 1995
                 
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
       89 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 about 89 million, even under
         MS-Windows.

       - utility classes: string splitter, tree walker

       - memory leak checker class, and  support 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

       - Leverages platform's native API. Class implementations use the
         platform's  native  API,  so  that applications  will have the
         native look and feel.
         
       - GUI objects well integrated with base  library, to enhance the
         overall power and reusability of classes
         
       - GUI   objects:  menus,  dialogs,  buttons,  listboxes,  button
         groups, and the like

       - Graphic resource  objects:  cursors, fonts,  pens,  colors and
         brushes

       - Graphic  objects: bitmaps, ellipses,  rectangles, arcs and pie
         wedges

       - Supports printing under OS/2 and MS Windows
       
       - Provides  for easy  composition  of basic objects,  as well as
         high reusability

       - Includes many demo programs
       

CURRENT STATUS (As of February 23, 1995):

The YACL classes now provide  equivalent  functionality under all  three
platforms: MS/Windows, OS/2 PM and Unix with X/Motif.  Here is a summary
of the platforms and compilers it has been tested under.

     Platform                Compiler
     ---------               --------
     
     MS/Windows              Borland C++ 3.1 and later
     
     OS/2 Warp               EMX (GNU) C++
                             Borland C++ 1.5

     Linux                   GNU C++ 2.6.0
     SunOS 4.1               GNU C++ 2.6.3
     DEC Ultrix              GNU C++ 2.6.0
     NCR SysV                GNU C++ 2.6.0
     

The implementations do not use any compiler-specific features, and so it
should be easy to build   the library using   other compilers. The  base
classes will not  compile under versions  of GNU C++  earlier than 2.6.0
due to  bugs in the  compiler.  The  base  classes do  not (yet) compile
under Watcom C++, due to a  bug in the 10.0a  compiler.  Watcom is aware
of this fact, and  the bug will  likely be fixed in  the next release of
their compiler.

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

Under Microsoft Windows, YACL's classes have  been tested for memory and
resource leaks using Bounds Checker for Windows.


DOCUMENTATION:

A tutorial and reference manual for YACL will appear as a book published
by  Addison-Wesley  in the  fall   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   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.


RESTRICTIONS AND LIMITATIONS:

Resource-based   dialogs and custom cursors    are supported only  under
MS/Windows.

Combo boxes and the  PrintJob class are  only supported under MS/Windows
and OS/2.

I  am still working  on  creating shared library  (DLL)  versions of the
library.


FUTURE WORK:

Work on removing the  above limitations and adding  new features to  the
base and GUI classes is under way.

RELATED PROJECTS:

A GUI layout designer  (with functionality similar to Borland's Resource
Workshop) and a graphic editor are 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@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 and 1995.  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), in the directory /pub/yacl. Please send your comments,
suggestions and bug reports to the author at the above address.

