CSP++ ChangeLog (Jan/18/09)

		*** RELEASES from newest to oldest *** 
==========
CSP++ V4.2
==========
Main contributor: Joshua Moore-Oliva

The is the "micro" version (ucsp) of CSP++ that does away with the C++ STL and
its large footprint (particularly formatted I/O) in the OO framework.  (There is
no reason to remove STL usage from the translator.)

V4.2 is the first public source code distro and is capable of installing via
autoconf and automake on (hopefully) a wide variety of platforms.  It also has a
set of regression tests that are built/executed via "make check".  You need
cppunit and boost to run these.

translator:
 Channel & Atomic names are now file global, to avoid cluttering the program
global namespace and conflicting with library routines.  DatumIDs are still
program global, but probably don't want to be; however, their names are prefixed
by DA__ therefore unlikely to collide.  ActionProc names are mangled, so won't
collide.
 A new cspt option "-w" was added to make the .cc output in the current working
directory (normally it goes in whatever directory the .csp input is found).

Watch.h:
 Along with the existing compile-time symbols ERRWATCH, MEMWATCH, and ACTWATCH,
a new symbol, TSKWATCH, has been added.  Defining it will generate copious
printout from task.cc when objects are un/locked for debugging purposes.
Users should typically build CSP++ with "-DERRWATCH", but the other 3 symbols
are only of use if problems are suspected with the framework code itself.

threads_def.h & threads_undef.h:
 Designed to replace "#include pth's <pthread.h>", which often conflicts with OS's
pthread.h.  It redefines the pthread API to ucsp_ functions that in turn call
the native Pth API.  That is, it does the same job as pth's pthread.h, but w/o
raising all the conflicting symbols (since certain other runtime libs that we
link with #included pthread.h when they were compiled).
 Not sure what circumstances call for #including _undef.h...  It's unused now,
and may be deleted in the future.

"std::" symbols that are no longer referenced:
< #include <iostream>	use ucsp_iostream.h (istream, ostream, cin, cout, etc.)
< #include <sstream>
< #include <list>	List.h (USL SC API) reimplemented w/o STL list ***
< #include <bitset>	use ucsp_bitset.h
  *** List.h has Listiter & ConstListiter; traversal usu. reimplemented w/ those
Only exception:  std::set_new_handler() in task.cc

ucsp_iostream.h/cc:
 -Based on (uClinux's) scanf (cin), printf (cout), fprintf(stderr) (cerr)
 -Handles <<int,char*,void*,dec,endl,flush,hex; >>int
 -This may affect UCFs: they can either change to ucsp::cout, etc., just by
coding "using namespace ucsp", or else they need to explicitly #include
<iostream>.

Various csp++ classes:
 all the "friend ostream& operator<<(...)" now ucsp::ostream&

ucsp_bitset.h:
 Replaces std::bitset

config.h & config.h.in:
 File is produced by new autoconfig.  Symbols tell what features are/n't avail.
on this platform.  It's not clear if any source file is actually using config.h.
The base file is "configure.in".

Agent.h/cc:
 undoc'd workarounds for g++ problems?  Lots of con/destructors moved from .h
to .cc.  Anyway, gcc-3 & -4 on x86 Ubuntu and x86 Solaris are all happy.

task.cc:
 "STOP" semantics changed: no longer trying to cancel threads (problematic).
Just does exit_fct dump and exit(EXIT_FAILURE) so caller can get stop status.
Normal return (when SYS process does SKIP for normal completion) is EXIT_SUCCESS.

New Pth feature:
 pth uses SIGUSR1 temporarily when a new thread is spawned. It's OK to global
replace USR1->USR2 and recompile pth if you need that signal for something else.
This is a non-problem, but annoying when using ddd: do Status>Signals and
unselect Stop for that signal.


==========
CSP++ V4.1
==========
Main contributor: Stephen Doxsee

- Added Subscripted actions for Channel and Atomic Actions.
- Added the ability to properly handle closure sets--although restricted use.
	- RESTRICTION: no subscripts or data in sets (whether closure sets or not).
- Multiparty synchronization.
	- remember that in V4.0, a process that wished to synchronize further
	  up in the tree would find the sync already taken and be unable to
	  synchronize. Multiparty synchronization is now properly supported.
	- RESTRICTION: No more than one Channel output can be involved in a
	  synchronization.
	- RESTRICTION: Channel input cannot be hidden if there is no output to
	  match. (Non-deterministic)
- Data fields must have variables explicitly written out. 
	- RESTRICTION (i.e. P = a!1.2 -> SKIP, Q = a?x -> SKIP, is no longer
	  allowed)
- Datatype support for simple enumerated types (not enabled).
- External choice still only takes prefix type operands but handles precedence
like FDR2.
	- RESTRICTION: only prefix operands
- Allow any case identifiers.
- Increased subscripts and datum length to 10.
- Added the ignoring of constrained input (i.e. everything from the ':' until
the next '->').
- Added block comment support (i.e. {- ... -} ).


========== 
CSP++ V4.0 
========== 
Main contributor: Stephen Doxsee

This major release changes the input syntax from csp12 to CSPm, compatible with
FDR2, Probe, and Checker.  It is now possible to take CSP files directly from
verification with those commerical tools, and input them to cspt for software
synthesis.  File extensions of .csp and .fdr2 are recognized, and replaced
with .cc.  Other filenames will have .cc appended.

Main remaining incomptibilities with respect to CSPm:

(1) External choice must have the first event of each process explicitly exposed:

	a->P [] b->Q

This is equivalent to coding a->P | b->Q.  Plain P [] Q is not accepted.

(2) Multiparty synchronization is problematic.  That is, if P and Q synchronize
on event a, another "outer" process R that is higher in the process tree will
not be able to synchronize on that same a along with P and Q.  A message will
be printed that says that the "action" (event) is already "taken".  This will
be fixed in V4.1, but for now can be worked around by having P or Q do another
event after a (say, b), then have R synchronize on b.  This issue does not
impact any of the demonstration programs.

(3) Some CSPm operators and datatypes are not (yet) implemented:
Boolean guard: &
Replicated operators: @
Untimed timeout: [>
Linked and alphabetized parallel
Interrupt: /\
Sequences and sets

Timeout and interrupt are targeted for V5.0.

(4) Channel declarations are not needed for synthesis, and so are ignored (as
single-line comments).


========== 
CSP++ V3.1 
========== 
Author: William Gardner

The main purpose of this minor release is to upgrade the source code to be
compatible with gcc-3.  In the end, it was never "released", but incorporated
into V4.0. 

It also fixes a number of bugs: 

	[framework issues] 

- Convert SC use over to STL and remove SC lib. 
- On RedHat 9 w/ Pth 2.0.0, -lrt (needed only for clock_gettime in task.c)
pulled in libpthread.so.0, which conflicted with Pth's version of
libpthread.so.20; solution was to eliminate the call by using pth_sleep instead 
- ~Agent destructor was mistakenly calling popEnv() (a static member function)
and ripping up the *parent's* environment.  This caused very simple systems
like SYS = a->SKIP to crash before exiting.  ~Agent now cleans its own environment. 

	[cspt issues] 
	 
- a -> P | b -> Q:  if P or Q needed to spawn agents, stack variables were
defined in wrong scope (after case instead of start of block); fixed by putting
each case in own block 

DSS.cc: In function `void* DQ_s1()': 
DSS.cc:276: warning: control reaches end of non-void function 
- This is because gcc doesn't realize that the switch has only 2 cases, which
are covered by returns, so control CAN'T fall through. 
--- Generate last case N as "default" 

DSS.cc: At global scope: 
DSS.cc:526: warning: ISO C++ forbids declaration of `main' with no type 
--- Generate "int" return on main, and dummy "return 0". 

- P1||P2||P3||...Pn now generates n concurrent processes, rather than
P1||(P2||(...(Pn-1||Pn)...)).  The old way wasn't applying synchronization
properly across all the processes.  (OTOH, with V4.0's CSPm syntax, there's
currently no way to specify composition degree > 2, so this fix will be of no
effect for now.)
