                                                         -*- Indented-Text -*-
This is CNCL 1.8 of $Date: 1996-08-07 17:52:41+02 $.


  |_|_|_  |_|_    |_    |_|_|_  |_		     C O M M U N I C A T I O N
|_        |_  |_  |_  |_        |_		               N E T W O R K S
|_        |_  |_  |_  |_        |_		                     C L A S S
  |_|_|_  |_    |_|_    |_|_|_  |_|_|_|_	                 L I B R A R Y


Copyright (C) 1992-1996   Communication Networks
                          Aachen University of Technology
                          D-52056 Aachen
                          Germany
                          Email: cncl-adm@comnets.rwth-aachen.de


This library is free  software; you can  redistribute it and/or modify
it  under   the terms  of the GNU   Library  General Public License as
published by the  Free Software Foundation;  either  version 2 of  the
License, or  (at  your option)  any  later  version.  This  library is
distributed  in the  hope  that  it  will  be useful,  but WITHOUT ANY
WARRANTY;  without even the   implied  warranty of MERCHANTABILITY  or
FITNESS FOR A PARTICULAR PURPOSE.   See the GNU Library General Public
License for more details.  You should have received a  copy of the GNU
Library General Public License along with  this library; if not, write
to the Free Software Foundation,  675  Mass Ave, Cambridge, MA  02139,
USA.

Software requirements:

	- C++ compiler with IOstreams library
	- perl
	- GNU bison and flex (if you want to build bin/fuzzy/CNfrc)



CNCL is a C++ library with the following features:

Universal classes:

	* Tree structured class hierarchy, similar to NIHCL

	* Classes for general purposes such as arrays, linked lists,
	  strings

	* Interface classes for UNIX system calls: pipes, select, sockets

	* Persistent objects

Simulation:

	* Event driven simulation classes

	* Statistical evaluation classes

	* Random number generator and distribution classes

Fuzzy logic:

      	* Fuzzy sets, fuzzy variables, fuzzy rules and inference
	  engine for building fuzzy controllers and expert systems

	* Fuzzy rules to C++ translator

Graphics:

	* Interface classes for DEC's ezd graphics server

	* Interface classes for Communication Networks' gist graphics
	  server


See directory doc/ for more documentation on CNCL.

------------------------------------------------------------------------------

How to get the latest revision:

    The latest revision can always be found on CNCL's home ftp-server:

	   ftp.comnets.rwth-aachen.de

    in 
	   /pub/CNCL

The URL to this directory is:

    ftp://ftp.comnets.rwth-aachen.de/pub/CNCL

    The latest files are always pointed to by

	   cncl.tar.gz
	   cncl-doc.tar.gz

------------------------------------------------------------------------------

There is a mailing list for CNCL announcements:

	cncl-announce@comnets.rwth-aachen.de

If you want to subscribe, DO NOT send request to this
address. Subscription request must be mailed to

	listproc@comnets.rwth-aachen.de

with a message body comprising the command

	subscribe cncl-announce <Your Fullname>

(Use `help' for a list of listproc commands.)


------------------------------------------------------------------------------

Compiling and installing CNCL:

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! You MUST have perl (Larry Wall's script language) installed in order   !!
!! to use the CNgenclass and CNarray scripts (which are written in perl). !!
!! Having perl is a good idea anyway, so install perl now!!! ;-)          !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

(Compiling CNCL without perl using this distribution should work
nevertheless.)

You'll also  need GNU bison and flex  to compile the CNfrc  fuzzy rule
compiler.   At least  on SUNOS  4.1.3    it's not possible to  compile
fuzzlex.c and fuzzyparse.c with GNU g++, if these are generated by lex
and  yacc. If you don't  have  bison and  flex,  it may be possible to
compile the yacc and lex generated C  code with an Standard-C compiler
like gcc. See bin/fuzzy/Makefile.  If you don't  want to  compile this
program, comment out `FUZZYDIR= fuzzy' in bin/Makefile.


Here we go:

	* Edit the file `make.conf.SYSTEM' in this directory, where
	  `SYSTEM' corresponds to your operating system. If no such
	  file for your system exists, create a new one by copying one
	  of the existing make.conf's.

	  prefix	the prefix for all directories
	  bindir	directory for installing binaries and scripts
	  libdir	directory for installing libraries
	  includedir	directory for installing header files
			(the header files are actually installed in
			$(includedir)/CNCL)
	  infodir	directory for installing info files

	  CC		C++ compiler
	  LEX           Lexical scanner generator
	  YACC		Parser generator
	  AR		Archiver
	  RANLIB	Archive ranlib, if needed

	  DEBUG		Default flags for compiling CNCL
	  EXTRA		Extra flags for compiling CNCL

	  The other definitions should be left as is.

	  Then create a symlink to make.conf

	  	rm make.conf
		ln -s make.conf.SYSTEM make.conf

	  Existing make.conf's:

	  make.conf.LINUX		LINUX 1.1.xx, gcc 2.6.x
	  make.conf.LINUX-gcc-2.5	LINUX 1.1.xx, gcc 2.5.8
	  make.conf.SOLARIS		Solaris 2.x, gcc 2.7.x
	  make.conf.SUN			SunOS 4.1.x, gcc 2.7.x
	  make.conf.HPUX		HP/UX 9.0.x


	* Edit the file  `config.h'  in this  directory,  uncommenting
	  some of the #define's or changing the auto detection code at
	  the end.


	* Edit  bin/Makefile and  lib/Makefile  if you  don't want  to
	  build all tools and classes.


	* If  you   have perl installed, compile    the whole thing by
	  entering:

		make NewWorld

	  If you  don't, install perl  first! ;-)  If you still aren't
	  convinced to do this, you may compile CNCL by typing:

		make World

	  But  in   this case the   CNxxxxx  scripts won't  be updated
	  according  to your configuration.  Well,  you can't use them
	  anyway, without perl! ;-)

	  (If your compiler  doesn't  support a `output  dependencies'
	  option like   GCC's  -M, use    "make NewWorldND" or   "make
	  WorldND" instead. Be  careful with recompiling when changing
	  the source, though.)


	* Compiling CNCL takes  a  while, so either  get  a very  fast
	  machine or a cup of coffee now. If everything worked well so
	  far, there should be a file

		libcncl.a

	  in the lib directory, size approximately 4-5MB.


	* You should now compile the CNCL test programs by entering:

		make tests

	  If this succeeded you may execute some  of the test programs
	  in lib/test  and   lib/*/test.  None  of these,    with  the
	  exception  of lib/test/tbasic,  should dump core.  Sorry, no
	  verification files to compare output to, because most of the
	  output is somewhat system dependent.


	* Finally install CNCL by entering:

		make install

	  This will  install   the libraries, header   files,  support
	  binaries, and scripts in the appropiate directories.


	* There are special targets for compiling different version of
	  the library:

		cd lib; make lib_o

	  compiles an optimized (-O6) version of the library

		cd lib; make lib_g

	  compiles a debugging (-g) version of the library

		cd lib; make lib_p

	  compiles a  profiling (-pg,  gprof) version of   the library
	  `make install' will install these libraries as well.

	  Don't   forget to run `make   clean' before  compiling a new
	  version of the library. For  real usage it is recommended to
	  install an optimized version of the library.

	* Finally, you can compile the examples by:

		make Examples

	  The  directory examples/gg1 contains an   example on how  to
	  simulate  a G/G/1-FIFO waiting  system.  Several probability
	  distribution functions can be  set for both, the arrival and
	  the server process.

	  The directory examples/fddi  contains an  example on how  to
	  simulate a Fiber Distributed Data Interface (FDDI) ring.

	  The directory   examples/gist contains  examples  on  how to
	  visualize   simulation  scenarios     using  the   Graphical
	  Interaction Simulation Result (GIST) tool.

------------------------------------------------------------------------------

CNCL is known to compile and run on the following systems:

	- SUN SPARCstation, SUNOS 4.1.3:
	  - GNU g++ 2.5.8, libg++ 2.5.3
	  - GNU g++ 2.6.0, libg++ 2.6
	  - GNU g++ 2.6.1, libg++ 2.6.1
	  - GNU g++ 2.7.0, libg++ 2.7.0
	  * GNU g++ 2.7.2, libg++ 2.7.0

	- SUN Solaris 2.4/2.5:
	  - GNU g++ 2.6.1, libg++ 2.6.1
	  - GNU g++ 2.7.0, libg++ 2.7.0
	  * GNU g++ 2.7.2, libg++ 2.7.0

	- LINUX 1.1.xx
	  - GNU g++ 2.5.8, libc 4.5.2[46] / libg++ 2.5.3l.2
	  - GNU g++ 2.6.2, libc 4.6.27    / libg++ 2.6.2
	- LINUX 1.2.13
	  * GNU g++ 2.7.0, libg++ 2.7.0
	- LINUX 1.3.xx
	  - GNU g++ 2.7.0, libg++ 2.7.0

	- HPUX 9.0.x
	  - GNU g++ 2.6.0, libg++ 2.6

* = tested with the current version

CNCL should be easily portable to any recent C++ environment.

------------------------------------------------------------------------------
	  
There is a bug in g++ 2.5.8 manifesting for the function

    void EZD::draw_text(int x, int y, int w, int h, CNStringR align,
			CNStringR text, CNStringR col, CNStringR font);

if you pass temporary CNString objects to this  function. Some of them
will be deleted twice. This is fixed in g++ 2.6.0. See also comment in
lib/ezd/EZD.h.
