

        
                           README.TXT for YACL
                              Version 1.6
                            October 16th, 1996


See   the  files doc/news.txt and  doc/changlog.txt   for  details about the
extensions of the current version over previous versions.



About 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 yields two major benefits:

    - The  programming task becomes easier,  since the application developer
      has high-level objects available.
      
    - Portability is a natural spinoff: 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.   YACL's  base  and  I/O  classes  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' segmented architecture

       - 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. So GUI applications  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, 3-d graphics with raised   and   recessed   lines  and
         rectangles

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

       - Includes many demo programs
       

CURRENT STATUS (As of March 16th, 1996):

The YACL base classes  provide equivalent functionality under DOS, Microsoft
Windows,  Microsoft Windows   NT, OS/2 versions   2.1 and  Warp  and several
flavors of  Unix.   The GUI classes  provide  equivalent functionality under
four platforms: MS Windows, Windows NT, OS/2 PM and Unix with X/Motif.  Here
is a summary of the platforms  and compilers it has  been tested under. (The
YACL package includes makefiles  for all the  platforms and compilers listed
below.)


     Platform                Compiler
     ---------               --------
     
     MS Windows              Borland C++ 4.0 and later
                             Watcom C++ 10.0a

     MS Windows NT           Borland C++ 4.0 and later
                             Watcom C++ 10.0a
                             Microsoft Visual C++ 2.1

     OS/2 2.1                Borland C++ 1.5
     
     OS/2 Warp               EMX (GNU) C++ 2.6.3 and later
                             Borland C++ 1.5
                             Watcom C++ 10.0a
                             IBM Visual Age C++ 3.0

     Linux                   GNU C++ 2.6.3 and later
     
     SunOS 4.1               GNU C++ 2.6.3 and later
     
     Solaris 2.3             Centerline C++ version 4.0
                             GNU C++ 2.6.3 and later

     SGI Irix 5.3            SGI Delta C++
                             GNU C++ 2.6.3 and later
                             
     DEC Ultrix              GNU C++ 2.6.3
     
     NCR SysV                GNU C++ 2.6.3

     
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.1 due to bugs in
the 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.




AVAILABILITY:

YACL is available via:

     World-wide web:  http://www.cs.sc.edu/~sridhar/yacl.html
     
     Anonymous ftp:   From ftp.cs.sc.edu (129.252.130.4), in the
                      directory  /pub/yacl. Log in as anonymous, with
                      your e-mail address  as password.

There is also a YACL mailing list. To be included in  it, please send e-mail
to yacl-list@cs.sc.edu with the  message "subscribe yacl-list address" where
address is your e-mail address.

Please send your comments, suggestions and bug reports to  the author at the
address below.


HOW TO USE:

Look    in the    directory   doc   for   compiler-   and  platform-specific
documentation. Also look    in the file    shiplist.txt  for the   names  of
files that document the use of YACL with various compilers.



DOCUMENTATION:

A tutorial and  reference  manual for YACL,   titled "Building portable  C++
applications  with  YACL," is now   available from Addison-Wesley Publishing
Company (ISBN 0-201-83276-3).  This book  describes everything needed to use
YACL effectively.   All comments, criticisms and  reports  of bugs  or other
errors in both the software and the book will  be gratefully accepted by the
author at the address below.

Note that  the book describes YACL version  1.3, which  was released in July
1995. Functionality added subsequently is not described in the book; see the
files doc/changlog.txt and doc/news.txt for details.



COPYRIGHT:

This software is Copyright (C) M.  A.  Sridhar, 1996.  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 of the source
code. (If  you do not distribute  this source code or modifications thereof,
you need not include this copyright or disclaimer.)


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.


AUTHOR:                       M. A. Sridhar

    Snail mail:                       E-mail: sridhar@cs.sc.edu
    Department of Computer Science    WWW:    http://www.cs.sc.edu/~sridhar
    University of South Carolina      Phone:  (803) 777-2427
    Columbia, SC 29208                Fax:    (803) 777-3767 
    USA                                

    
CONTRIBUTORS:

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

    Ram Sampath implemented several aspects of Motif functionality.

    Holger Pfaff (holger.pfaff@class.de) provided several bug fixes and
    enhancements under MS Windows and Motif.

    Tony T. Ton (t.t.ton@massey.ac.nz) helped out with bug fixes and
    enhancements under OS/2.

    Tom Satter (tsatter@purecode.com) contributed the fixes and makefiles
    for IBM Visual Age C++ 3.0 under OS/2.

    Rajesh Chandran (chandran@cs.sc.edu) showed how to make YACL
    applications compatible with editres under X windows.

    Jody Hagins (gamecox@magicnet.net) contributed makefiles for Centerline
    C++ under Sun Solaris.
     

RELATED PROJECTS:


Bitmap viewer: (Author: Tony Ton)

    The directory  apps/bmpview includes a  bitmap viewer for displaying
    Windows bitmaps.

Dialog editor: (Author: M. A. Sridhar)

    Included  in the distribution,   in  the directory apps/dlged, is  a
    simple  dialog editor that  outputs YACL ViewDescriptor arrays. This
    array description is platform-independent.


Conversion from Windows RC files:

    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 under Windows and Windows
    NT; this is, however, a non-portable feature.


Macintosh port:

    Ken Crismon (kcrismon@sybase.com) is working on porting YACL to the
    Macintosh environment.

        
Other contributions:

    The directory contrib is the beginnings of contributed software by
    various people. At present, it contains two directories:
    
        - contrib/accel contains   derived   classes  for supporting
        accelerator      keys, contributed    by   Ludovic    Brenta
        (brenta@gprhp.insa-lyon.fr).

        -   contrib/reich contains numerous utility classes contributed by
        Jorg-Peter Reich.


Networking classes:

    Frank O'Dwyer  (fod@brd.ie) has  written  networking  classes using
    YACL. Check out http://www.iol.ie/~fod/ffc.html.


    
-------------------------- END OF README.TXT -----------------------------

