New features in version 0.11
============================

GRP parser
----------

New program item types have been introduced:

- GRAPHIC for graphical blocks
- DUMMYB it is the first block in a process
- DUMMYE it is the last block in a process

TprsCin and TprsCout classes have been removed, becouse there is very
little difference between input and output connections. New data field
called `Type' has been introduced in TprsConn class. It determines the
type of the connection and it can be `ctIn' or `ctOut' and its value is
set up by the parser.

IsEnd() and IsStart() methods have been removed from TprsConn class
becouse connections no longer determine first and last program blocks
within the process. First block MUST BE a DUMMYB block with exactly
one output connection and last block MUST BE a DUMMYE block with
exactly one input connection.

Jan 14, 1996.


New features in version 0.12
============================

GRP parser
----------

Reserved word LIBRARY has been changed. New reserved word is HEADS. It
is used in processes' header group.

Syntax of program items have been changed. New syntax is:

ProgItem::= ProgItemType ":" IntNumber StringParam 
            "{" ParamsOfPrgItem "}" PrgItemSource.

where StringParam represents the name of the program item. This string
is stored in TprsItem object's Name field, see README.data.

Jan 18, 1996.


New features in version 0.14
============================

Confgurator utility has been added to the package. Use configure
script to set up machine dependencies and generate makefiles. After
configuration the whole project can be built.

Char type variables have been replaced with integer type variables where
the variable is used to read characters from a file. 

GRP code generator
------------------

Bugs in template.cc have been fixed.

Feb 3, 1996.


New features in version 0.15
============================

Subprojects have been separated. Three projects have been made: 

- GRP parser. Source of this project has been put in parser.src
subdirectory.

- GRP code generator. Source of this project has been put in grp2c.src
subdirectory. 

- Grapnel Library. Source of this project has been put in grapnel.src
subdirectory. This subproject has been split into several parts. First
one contains a very small software package which is required by
softwares generated by the code generator. Second part of this project
is a package collection. This collection contains Grapnel Libraries
ported to specific systems. Every kind of Grapnel Library has been
placed in a separated subdirectory. At that moment pvm is supported as
target platform only. Grapnel Library for pvm platform is placed in
grpanel.src/pvm.src subdirectory. New ports of Grapnel Library should
be put in a subdirectory grapnel.src/platform.src where `platform' is
the name of the supported target platform. In the future the Grapnel
Library can be ported to support other systems than pvm, such as mpi,
qnx, or any other kind of message passing system.

Configurator utility has been updated to support these
subprojects. After configuration you can build and install whole
package or any subproject using the following commands:

$ make
$ make install

to build and install whole package, or

$ make parser
$ make installparser

or

$ make grp2c
$ make installgrp2c

or

$ make grapnel
$ make installgrapnel

to build and install GRP parser, GRP code generator and Grapnel
Library respectively. Note that pvm3 system must have been installed
correctly on your system if you would like to compile and install pvm
version of the Grapnel Library. The ability of configurator utility,
which takes it possible to check what kind of Grapnel Compiler should
be installed on your system, has been being developed.

GRP code generator
------------------

Generation of cross reference file has been introduced. The code
generator will generate cross reference files for every applications
defined in processed GRP file if -c option was used. Name of generated
files is appname.crf where `appname' is the name of the application
defined in processed GRP file.

Feb 19, 1996.


New features in version 0.16
============================

Counting of versions has been changed. Different version numbers have
been assigned to the whole package and its subprojects. A new utility
(called `ver') has been introduced. It checks actual version numbers
and prints them out. Every time when version of any subrpoject chages,
the version number of the package will be increased.

GRP parser
----------

Name of options have been rationalized.

Name of parser utility software (`parsing') has been chaged, new name is
`grppars'. Run it with -h option to see new names of the options.

GRP code generator
------------------

Name of options have been rationalized. Run `grp2c' with -h option to
see new names of the options.

Makefile genaration has been redesigned. Using -M option the code
generator generates a Makefile that can be used to compile generated C
source files into executable form. Make file generator uses a template
`grp2c.mk' which is installed in DATADIR (default is PREFIX/share, but
it can be modified whit configurator). Generated Makefile includes an
other file (`grp2c.mk.TARGET', where `TARGET' is the name of the
target system which the project will be compiled for, eg: `pvm') which
defines target dependent rules, libraries, etc. This file is installed
in DATADIR too and it is provided by grapnel subproject. This include
file must be provided for every supported platform.

HTML form of documentation has been added to the package. It has been
put into www subdirectory. Documentation has been unchanged for a long
time, so it has been being updated...

Tests
-----

New test file has been added into the package. `buffer.grp' was made
by Gabor Dozsa using GRED.

Feb 26, 1996.


New features in version 0.17
============================

`README.new' (this) file has been renamed to `HISTORY'.

GRP parser
----------

New PortDef rule has been inserted into the parser. Alternate version
of this rule is:

PortDef:= .

This means that we can define ports in header section of the program
part using type of the port (`INPORT', `OUTPORT', `INOUTPORT') only
without definition of the port. If we use port definition, it can be
simplier because the rule of TypeList has been changed. New rule is:

TypeList:= .
TypeList:= TypeList PortDef.

(It is in header section of the program part.) This rule allows us to
define any port without type definition because the list of data types
of the port can be empty.

Remember that you can omit these informations from the GRP file
without any syntactical problem, but they are required for grp2c code
generator.

Support of graphical blocks is intruduced. `ProgParam' rule has been
removed and some of the rules has been changed. Changed rules are:

ProgItemType:= "SEQ".
ProgItemType:= "CAI".
ProgItemType:= "CAO".
ProgItemType:= "CAIALT".
ProgItemType:= "IFB".
ProgItemType:= "IFE".
ProgItemType:= "SWITCHB".
ProgItemType:= "SWITCHE".
ProgItemType:= "LOOPB".
ProgItemType:= "LOOPE".
ProgItemType:= "GRAPHIC".
ProgItemType:= "DUMMYB".
ProgItemType:= "DUMMYE".

ParamsOfProgItem:= ConnList PortParamList ItemsListOfGraph.

As you see, a new type of program item has been introduced:
GRAPHIC. This block is a collection of other program items. It has an
item collection (see README.data) which must be a complete program
item chain with DUMMYB and DUMMYE items. Other change is that order of
parameters of the block has been fixed. New rules have been used to
describe these parameters:

ConnList:= Connection.
ConnList:= ConnList Connection.

PortParamList:= .
PortParamList:= PortParamList PortParam.

ItemListOfGraph:= ProcPgroupList.

Connection list must not be empty but list of ports can be. Last kind
of the parameters are new. This parameter can be a complete (or empty,
of course) list of program items. It means that items can be
nested. Nesting levels are not restricted and items can be inserted
into any kind of the items, but parser stops with error an message if
it finds nested items in other type than GRAPHIC.

Mar 4, 1996.


New features in version 0.18
============================

GRP parser
----------

Syntax of parameters (in groups of Header Part) has been change. More
than one value can be assigned to every parameters. Type of values can
be mixed. Rule `Param' has been changed:

Param: Identifier "=" ParamValueList ";".

`ParamValueList' is intruduced to support list of values:

ParamValueList:= ParamValue.
ParamValueList:= ParamValueList "," ParamValue.

`Paramvalue' rule has been renamed to `ParamValue'.

Bugs of data structure printing methods of header section groups have
been fixed.

Some bugs around option handling in `grppars.cc' has been fixed.

GRP code generator
------------------

C-code generation of program item type GRAPHIC has been completed.


Mar 11, 1996.


New features in version 0.19
============================

Configurator utility has been extended with facility of detection PVM
system. It defines `PVM_OK' symbol in the generated `config.h' file if
you have PVM othervice this symbol still undefined. Additionally it
places `pvm_ok' symbol in makefiles with value `yes'. If the PVM
system is not installed correctly this symbol get value `no'.

Some GNU specific features have been removed from makefiles to make it
easier to compile the package on systems without GNU stuffs such as
GNU make or GNU ar.

GRP parser
----------

`phdgrpcl.h' and `phdgrp.cc' have been renamed to `pgroupcl.h' and
`pgroup.cc'. Names of object types defined in these files have been
renamed: `TprsHeaderGroup' to `TprsGroup' and `TprsHeaderGroups' to
`TprsGroupColl'.

Some method's name hase been changed:

`TprsHeaderGroups::MakeHeaderGroup()' to `TprsGroupColl::MakeGroup()'

and in `TprsAppColl' object:

`ActivateHeaderSectionGroup()' to `ActivateGroup()'
`AddHeaderParam()' to `AddParam()'

New objects have been introduced to store informations picked up from
Scree Part of the application. These objects' classes are defined in
`pwindcl.h' and their methods are declared in `pwind.cc' file. The new
object classes are `TprsWindowColl' and `TprsWindow'.

Window's objects have got a field called `Groups' which is a
`PprsGroupColl' and it points to a collection of groups defined in
this window.

New field has been added to `TprsApplication' class called `Windows'
which is a `PprsWindowColl' and it holds data read from Screen Part of
the GRP file. `ShowData' methods have been updated to print out
informations in this collection when `-d' option is used.

A new option `-G' has been introduced. Using this option with
`grppars' utility, you can write back parsed GRP file to the standard
output. This generated GRP file is pritty formatted and must be free
from synatcycal errors. This option invokes `WriteGRP' method of the
parser object.

Some bugs around temporary file handling have been fixed.

GRP code generator
------------------

A new option `-G' has been introduced. Using this option with the
`grp2c' program, you can write back parsed GRP file to the standard
output. This generated GRP file is pritty formatted and must be free
from synatcycal errors.


Mar 18, 1996.


New features in version 0.20.0
==============================

GRP parser
----------

`PortDef' rule has been changed to:

PortDef:= ":" IntNumber PortDefToPort.

and empty variant of this rule has been removed. New rules have been
created:

PortDefToPort:= .
PortDefToPort:= "{"
		    PROC ":" PortDefToProcID ";"
		    PORTID ":" PortDefToPortID ";"
                    TypeList
		"}".

PortDefToProcID:= .
PortDefToProcID:= ID.

PortDefToPortID:= .
PortDefToPortID:= IntNumber.

`PortDataType' rule has been chaged to:

PortDataType:= TYPE DataTypeDef ";".

New rule has been introduced:

DataTypeDef:= .
DataTypeDef:= DataType "[" IntNumber "]".

`PortSourceList' rule has been changed to:

PortSourceList:= .
PortSourceList:= PortSourceList PortSource ";".

GRP code generator
------------------

Mar 25, 1996.


New features in version 0.20.1
==============================

`www' subproject has been removed from the package. Size of the 
documentation is growing fast so it is not so good idea to keep it in 
the package. Documentation can be found at:

http://mazsola.iit.uni-miskolc.hu/~dani/grp2c

or it can be downloaded:

ftp://mazsola.iit.uni-miskolc.hu/pub/parallel/sepp/doc-html.tar.gz

`libgrpdebug.a' has been renamed to `libslib.a'.

GRP code generator
------------------

Quality of the generated Makefile has been improved.

Apr 5, 1996.


New features in version 0.21.0
==============================

`grpdebug' and `grppvm' subrojects have been removed from the package
(from grapnel subproject). From this point of time the grp2c package
is clean from code developed by other people.

Quality of Makefiles has been improved. Configurator utility has been
extended with some checking methods, such as detecting if preprocessor
can be used with -MM option or not. Other test which has been added to
the utility is detection of -ggdb option of the compiler. Some stupid
make programs use wrong implicit rules to compile C and C++ programs
so old-fashioned implicit rules have been added to Makefiles to
compile files in correct way.

GRP parser
----------

Some bugs in lexical analyzer have been fixed.

GRP code generator
------------------

Bug in cross file generation has been fixed.

Generated makefile has been changed to follow changes of location of
debugger library. Template of makefile has been extended -ggdb
compiler option if GNU C compiler is available on the system. Note
that the built in template still use -g option because of safety
reason!

Apr 17, 1996.


New features in version 0.22.0
==============================

Grapnel library has been included into the package again.

A new option (-P) has been introduced for `grppars' and `grp2c'
programs. This option has one parameter which determines what the
parser should do when it find a parameter redefinition. Valid options
are: 

-P a  Append. New values of the parameter will be appended into
existing list of values.

-P o  Overwrite. Old values of the parameter will be deleted and
replaced by new values.

-P e  Error (default). Parser stops with an error message.

GRP parser
----------

TprsGroupColl::getValueColl() function in pgroup.cc has been
completed.

TprsGroupColl::GetValue() functions in pgroup.cc have been completed.

Bug in TprsStringParam::PrintValue() method has been fixed to print
out parameter value into HTML form more correctly.

GRP code generator
------------------

Bug in code generation of IFB-IFE items has been fixed.

Bug in code generation of channel creation has been fixed.

Bug in code generation of LOOPB-LOOPE has been fixed.

Bug in code generation of SWITCHB-SWITCHE has been fixed.

GRP library
-----------

A new function `grp_start_server' has been introduced and every pvm
calls have been moved from generated server programs into it.

May 22, 1996.


New features in version 0.23.0
==============================

Counting versions has been changed. Different version numbers will not
be used any more. Version number for the whole package is stored in
`ddconfig.h' file.

Some bugs in configurator utility have been fixed.

`pcrosscl.h' and `pcross.cc' has been moved from parser.src
subdirectory into grp2c.src as `crosscl.h' and `cross.cc'.

New option `-t' has been added to `grppars' utility and `grp2c'
program. Using this option these programs generate task graph to
standard output. Format of the task graph is:

application name
process name1 otherprocess1 otherprocess2 ...
process name2 otherprocess1 otherprocess2 ...

GRP parser
----------

Task graph genberator has been introduced. New variable:
`TParser::ShowTask'. New methods: `TParser::ShowTasks',
`TprsAppColl::ShowTasks', `TprsApplication::ShowTasks'.

GRP code generator
------------------

A new option for `grp2c' has been intoduced. Using `-R dir' default
prefix directory can be overwritten. This directory is included into
the generated `Makefile' as the value of `prefix' variable.

Error handling has been improved. Return value of `GenCrossRef()'
function in `TProcess', `TItem', 'TItems', `TGraphItem' classes has
been changed to `bool'. Exit codes of `grp2c' program are:

  0 - success.
  1 - wrong option.
  2 - no execution required.
  3 - parser error.
  4 - code generation error.
  5 - Makefile generation error.
  6 - cross-file generation error.

Cross file generation has been redesigned. Some methods have been
deleted: `TItem::GenCrossRef', `TItems::GenCrossRef',
`TProcess::GenCrossRef', `TProcColl::GenCrossRef',
`TGraphItem::GenCrossRef'. Some new methods have been introduced:
`TComp::ItemCrossInfo'.

grp2c generates cross reference information in every case when a user
written code is inserted into the generated source. Every lines in
cross reference file has the following structure:

filename first last processname type

Where `filename' is name of the generated C-source file where the user
written code was inserted. `first' and `last' are line numbers of
begin and end of the inserted code. `processname' is the name of the
process which the generated code belongs to. `type' determines the
type of the cross reference information. If it is a positive number
then it identifies the program item number. -10 means that inserted
code was collected from heads section (probably include definitions),
-20 means global section, and -30 means local section.


Jun 6, 1996.


New features in version 0.24.0
==============================

Configurator utility has been extended to check whether tape-pvm
system is installed correctly.

Makefiles have been changed to skip compilation of Grapnel Library if
required packages (pvm and Tape-pvm) are not installed correctly. New
Makefiles requires GNU make utility to compile the grp2c package!

GRP parser
----------

Bug in string parameter writing to GRP file output has been fixed.

Bug in handling special characters in string parameters has been
fixed. 

Bug in option handling in `grppars' utility has been fixed.

GRP code generator
------------------

Makefile generation has been improved to support new version of
grapnel library (see GRP library below). New Makefile has a new target
called `all_t' which produces instrumented version of executable
files. These files use tape_pvm library to produce trace information.

Generated C-source files has been modified to support slib and gred
library. Code generator has been modified to produce function calls to
make trace information to support visualization tool and other
function calls to make connection with GRED system.

Bug around generating channel structures has been fixed.

Bug in cross-reference generation of IFB items has been fixed.

Bug around generating port sources in GRP output has been fixed.

Some bugs in cross-file generation have been fixed. Cross file
generation has been redesigned. Format of cross reference file has
been changed, every line (record) has been extended with a one
character wide type field. This type field is the first field and it
can be:

U in "user code" records
D in "debug" records.

Debug records identify points of the generated sources where a program
item block can be stopped.

GRP library
-----------

New version of GRP library has been made to support `prove'. This new
library is the "instrumented" version of the original one. The
"instrumentation" means that pvm_XXX() function calls has been
replaced with their Tpvm_XXX() equivalent. Source of new library is
`grapnel_t.c' (in pvm.src) subdirectory and this file is generated
automatically during compilation of the package.

`grp_BeginBlock()' grapnel API function has been introduced which
should be called at the beginning of the program blocks in the
instrumented grapnel programs. This function produces a special tarce
event which required by the monitoring tool.

`tapepppost' utility has been introduced. It is used to process output
of `tapepp' utility when generated C-files are compiled to use
tape_pvm system. This is required because output of the `tapepp'
contains a syntactical error:-(

Definition of `grp_printf()' and `grp_fatal()' functions have been
changed to

void grp_printf(char *format, ...)
void grp_fatal(char *format, ...)

to support variable argmants. Same syntax as `printf()' function's can
be used. Note that the formatted string can not be longer than
`STR_LEN' (defined in `grpdef.h').

Jul 12, 1996.


New features in version 0.25.0
==============================

Binaries (`grppars' and `grp2c') has been extended with a new command
line option `-e' which turns format of error messages to old format
which is suitable for Emacs. New format has been introduced for error
messages:

grpfile:line:app-name:proc-name:item-ID:port-ID:error-code: error string

GRP parser
----------

Lexical analyser's rule of identifications has been
modified. Identifications can contain "-" characters.

Format of error messages has been changed to new format (see
above). Old format can be used with `-e' command line option.

Bug in calculating exit code of `grppars' utility has been fixed. Exit
codes of `grppars' program are follows:

  0 - success.
  1 - wrong option.
  2 - no execution required.
  3 - parser error.

GRP code generator
------------------

Format of error messages has been changed to new format (see
above). Old format is not available any more (`-e' command line option
changes format of the parser's messages but not of code generator's).

New targets have been introduced in generated Makefile. They are
`clean', `realclean', `install', and `install_t'.

New option have been introduced for `grp2c'. Using `-I dir' the
directory where the generated Makefile installs binaries can be
spacified. Default directory is `$HOME/pvm3/bin/$PVM_ARCH'.

Generated server program has been extended with version number
checking. After checking command line options, server program checks
version numbers of different part of the Grapnel System. Version
number of Grapnel Library, DDstuff Library, and installed header files
must be same as version number of grp2c program which was used to
produce the source code of the server program. If unmatched version
number is found, the server stops with exit code 2.Version number
cheking can be skipped using `-f' command line option.

Generating cross reference records has been changed according to
reqironments of GRED program. DUMMYB item produces a debug record
which contains line number of generated `grp_start' function. DUMMYE
item produces a debug record which contains line number of generated
`grp_exit' function.

GRP library
-----------

Support of bidirectional channels have been implemented. Definition of
the `struct channel' type has been changed. `src' and `dest' fields
has been removed and `remote' field has been introduced.

Parameter of the `grp_start()' function has been removed, this
function must be called without parameters.

Obsolete definitions have been removed from `grpdef.h'.

Detection of pvm system is fixed. `grp_start_server' function returns
TRUE if pvm is running.

DDstuff Library has been changed. New function `DDstuffVersion' has
been added to the library. It returns the version of the library.

`Init' function has been extended with two `char *' parameters. First
of the new parameters is printed as version number of grp2c program
when the server application is invoked with `-v' option. Second of the
new parameters is printed as version number of header files. The
`Init' function recognizes new options `-v' and `-f'. Invoking server
program with `-v' option, the `Init' function prints out version
number information about grp2c program which was used to produce
source files, DDstuff Library, Grapnel Library, and installed header
files. After printing out version numbers, the `Init' function stops
the program with exit code 0. Using `-f' option turns `Force' global
variables to TRUE, if it is TRUE, the server program skips version
number cheking.

Aug 18, 1996.


New features in version 0.26.0
==============================

GRP parser
----------

Bug in `grppars' utility has been fixed. `grppars' crashed if it was
started without parameters because it did not stop to work in this
case. 

GRP code generator
------------------

Generation of C-source files has been changed to support the new
`grptyps.h' header file.

Generated server process has been changed to support new version on
`grp_create_proc' function.

Generated server process has been modified to use new `ReadMapFile'
function to read mapping information into `ProcessInfo' array. This
step is ignored if -m option is used to start the server program of
the application.

Bug in generated process code has been fixed. If there are more than
one channels are defined between two processes and the directions of
the channels are same, grp2c produces different name to identify
them. 

GRP library
-----------

New function `grp_stop_process' has been introduced. It is for server
process only.

New header file called `grptyps.h' has been created in `grapnel.src'
subdirectory. It will be used to store type definitions of the grapnel
library (target --eg. pvm-- independent types only).

Definition of `TProcessInfo' type has been moved from `grpdef.h' into
`grptyps.h'. It has been extended with a new element `cpu' which is
pointer to a string which contains name of the host or cpu resource
where the process should be started on.

Parameters of the `grp_cretae_proc' have been changed: `start_clock',
`task', `lista', and `no' parameters have been removed and a new
parameter `pinf' has been introduced. Type of `pinf' is
`TProcessInfo'. It is a structure which contains every information
about processes, such as name, parameters, etc.

`Init' function of the DDstuff library has been changed to support -m
option. Using option server process skips reading of the mapping file
and starts every processes on the default (chosen by the target
system) host. Meaning of the -f option has been extented. If server
process is unable to start any processes it stops others that are
started successfully and then exits. Using -f option, server process
continues to work.

DDstuff library has been extended with a new function `ReadMapFile'
which used by the server process to read mapping file and modify
`ProcessInfo' array with host names where the processes should be
started on. Mapping file is $OBJDIR/appname.map or ./appname.map if
OBJDIR variable is undefined.

Sep 22, 1996.


New features in version 0.27.0
==============================

Configurator utility has been changed to check existing of the PG-PVM
monitoring tool.

Configurator utility has been changed to include -pipe option into
Makefiles (if it is supported by the compiler) to make compilation
faster. 

Configurator utility has been extended to check compiler and linker
options that are required to produce shared libraries.

GRP parser
----------

Parser sub-package has been extended to produce shared version of
Grapnel Library. Shared library is produced with full version number
including major, minor, and patch level number. Library name stored in
library contains major and minor version numbers only. It means that
every time when library is upgraded and new version has different
major and minor version numbers, programs that are using Parser
Library should be relinked.

Rule of `DataTypeDef' has been changed from

DataTypeDef::= | DataType "[" IntNumber "]". 

to

DataTypeDef::= | DataType | DataType "[" IntNumber "]". 

It means, that in port data type definition it is not required to
specify the number of the data. If it is not specified 1 is assumed.

Rule of `IntNumber' has been changed  from

IntNumber::= Sign DigitList. 

to

Hex:= | "0x" | "0X". 

IntNumber::= Sign Hex DigitList. 

It means that integer constants in the GRP files are handled in same
way as C compilers does in C programs. Normally, constants are decimal
numbers. If the number begins with zero (0), it is in octal. If the
constant begins with "0x" or "0X", it is in hexadecimal.

GRP code generator
------------------

Bug in code generation when any case of an IF structure is empty, has
been fixed.

Generated Makefile has been extended to support PG-PVM.

Generated Makefile will not produce unnecessary object files during
compilation to save disk space.

GRP library
-----------

New version of grapnel libarary has been introduced. New version
supports PG-PVM monitoring tool.

TAPE-EVENT version of the grapnel library has been extended with more
event generation. Process creation procedure (`grp_create_proc'
function) creates an event which supports process ID, process name,
and host name for the visualization tool. ID of this event is
`event_PROCNAME' which has been defined in `grpdef.h'.

An other event which has been introduced is `event_CHANNEL' which
reports information about channel for the visualization tool. This
event reports message tag (identifier of the channel), name of the
processes that are connected together by the channel, and ID and type
of the ports which are at the ends of the channel. New grapnel
function has been introduced to report these informations, its name is
`grp_report_channel' and it is defined in `grapnel.h'.

Definition of the function `grp_create_channel' has been changed from

void grp_create_channel(int src, 
			int dest, 
			int msgtag,
			int src_idx,
			int dest_idx);

to

void grp_create_channel(TProcessInfo src, 
			TProcessInfo dest, 
			int msgtag,
			int src_idx,
			int dest_idx);

New structure type has been introduced in `grptyps.h'. `TChanDefP'
structure is used in processes to define array of channels.

Generated programs recognizes a new option. It has been introduced
into `Init' function of the ddstuff library in `ddstuff.c'. Using this
-n option, the generated program will not call `gred_xxx' functions,
so it must be used if the application is started by "hand" instead of
the GRED, or more precisely if GRED is not running.

Some definitions have been moved from `grpdef.h' file into
`grptyps.h'. These definitions are target independent.

`grp_send' function has been removed.

`grp_send_array' function has been removed.

`grp_recv' function has been removed.

`grp_recv_array' function has been removed.

Parameters of `grp_pre_send' have been changed from

int grp_pre_send(struct channel ch, char type);

to

int grp_pre_send(struct channel ch, int magic);

Parameters of `grp_post_send' have been changed from

int grp_post_send(struct channel ch, char type);

to

int grp_post_send(struct channel ch, int magic);

Parameters of `grp_pre_recv' have been changed from

int grp_pre_recv(struct channel ch, char type, int *block_send);

to

int grp_pre_recv(struct channel ch, int *magic);

New definitions for magic number have been introduced (MagicXXXX
constants in `grptyps.h'). These constants can be used to build up
magic information which is sent in every messages but administrative
ones.

Jan 8, 1997.


New features in version 0.28.0
==============================

Bug in configurator utility around PG-PVM detection has been fixed.

Configurator utility has been extended with detection of the BFD
library which is required to produce the new `pickstab' utility of
grapnel library.

GRP parser
----------

Rule of `DataType' has been changed from

DataType::= "CHAR" | "INT" | "FLOAT" | "DOUBLE". 

to:

DataType::= "CHAR" | "INT" | "FLOAT" | "DOUBLE" | ID. 

where ID interpreted as unknown data type. It causes parser to produce
a warning during the parse but it does not refuse the GRP
file. Generated programs can be compiled and executed because new data
type `UNKNOWN' has been introduced in the grapnel library, but it
causes to exit the application with a fatal error message.

New methods have been added to the `TprsParam', `TprsIntParam',
`TprsFloatParam', `TprsStringParam' classes. These methods (different
kinf of `GetValue') help to read back the value of the parameter.

GRP code generator
------------------

New utility program has been introduced. `samefile' program is used by
the generated Makefile to determine if installation directory differs
from the actual one. I wrote this program because I do not know if
every version of UNIX test utility knows the -ef option.

Installation part of the generated Makefile has been reorganized and
some bugs have been fixed.

GRP library
-----------

New utility program has been introduced. `pickstab' program can be
used to pick up debugging information from a binary file and place it
in a text file. It is possible if the processed file has been compiled
with `-g' compiler directive.

New data type has been introduced `UNKNOWN', but it can not be sent
through the channels because `pack' and `unpack' functions refuse this
type of data and exit the application with fatal error.

Mar 1, 1997.


New features in version 0.29.0
==============================

GRP parser
----------

Parser has been speeded up storing temporary data in the mamory
instead of temporary files. Lot of changes have been made according
this modification. Lot of fields and methods of parser's class
hierarchy have been changed.

Mar 10, 1997.


New features in version 0.30.0
==============================

Target dependent part of the grapnel library has been introduced for
new targets: MPI and QNX. These parts of the library is introduced
only, they are not implemented yet.

GRP parser
----------

Definition of the `fClose' method of the `TprsSource' class has been
changed from:

void fClose(void)

to:

void fClose(FILE *fds)

Some bugs caused by NULL pointers have been fixed.

`TprsSource' class has been expanded with a new method `SpaceOnly'
which returns TRUE if the source code handled by the object contains
space characters only or it is empty.

`TprsSource' class has been extended with a new method `fPrintf' which
can be used to print out text handled by the object to a file.

Rule of `DataTypeDef' has been changed from

DataTypeDef::= | DataType | DataType "[" IntNumber "]";

to

DataTypeDef::= | DataType | DataType "[" DataTypeNum "]";

DataTypeNum::= IntNumber | CSource;

According to changes above, the `TprsPortData' class has been extended
with a new field `Src'. If IntNumber is found in the rule
`DataTypeNum', the result is stored in the `Num' field of the object,
but if a C source id found then it is stored in the `Src' field. `Num'
field will be -1 if it is unused and `Src' will be NULL if it is not
used.

Definitions of program item rules in the parser have been changed:

`ParamsOfPrgItem' rule has been chaged from:

ParamsOfPrgItem::= ConnList PortParamList ItemListOfGraph.

to

ParamsOfPrgItem::= ItemOptionList ConnList PortParamList ItemListOfGraph.

`ItemOptionList', `ItemOption' rules have been introduced:

ItemOptionList::= | ItemOptionList ItemOption.

ItemOption::= "BLOCKED" | "UNBLOCKED" | ItemGuard.

ItemGuard::= "GUARD" "=" CSource.

`TprsAppColl' class has been extended with a new method:
`SetItemOption'.

`TprsItem' class has been extended with a new member: `Options' which
is a structure to hold options of the program item, and a new method:
`SetOption' which can be used to set up an option.

Rule of `ProgramSection' has been changed from

ProgramSection::= "PROCESS" ":" ID "HEADERSECTION" "{" ProcHgroupList
"}" "PORTSECTION" "{" ProcSgroupList "}" "PROGRAMSECTION" "{"
ProcPgroupList "}".

to

ProgramSection::= "PROCESS" ProcessNumID ":" ID "HEADERSECTION" "{"
ProcHgroupList "}" "PORTSECTION" "{" ProcSgroupList "}"
"PROGRAMSECTION" "{" ProcPgroupList "}".

where the `ProcessNumID' rule is:

ProcessNumID::= | IntNumber.

According to this change, a new field (`NumID') has been added to
`TprsProcess' class which is set up by `TprsProcColl::ActivateProc'
method when it needs to create a new process object.

Rule of `PortParam' has been changed from

PortParam::= "PORT" IntNumber ":" PortSourceList.

to

PortParam::= "PORT" Int ":" PortGuard PortSourceList.

PortGuard::= | "GUARD" "=" CSource.

To hold new `guard' parameter of the port references, the class that
represents the reference (`TPortRefAndSrc') has been extended with
a new data field `Guard'. `TprsCollApp' has been extended with a new
method `AddGuardToLastPort'.

GRP code generator
------------------

Bug in generated Makefile to compile user defined code has been fixed.

Error detection capability of code generator has been improved.

Code generator produces unblocking send operations by default.

Code generator generates code which supports guarded communication.

Code generator dosn't generate application header file any more. Every
definitions and declarations have been placed in application server
program's code directly.

GRP library
-----------

Type definition of struct channel has been removed and `TChanDefP' has
been renamed to `Tchannel'.

Definition of `TProcessInfo' has been changed.

Some of Grapnel API functions have been chaged: `ReadMapFile',
`grp_create_process', `grp_create_channel', `grp_init_channel',
`grp_pre_mrecv', `grp_pre_send', `grp_post_send', `grp_pre_recv',
`grp_post_recv'.

`grp_nrecv', `grp_mcast_array', `grp_mrecv', `grp_mrecv_array'
functions have been removed.

Jun 20, 1997.


New features in version 0.31.0
==============================

GRP Parser
----------

Parser has been revised. `IntParam', `StringParam', `Identifier',
`PHeaderType', `ProgType', `ParserInst', `ParserStrs', `ParserPtrs',
`NameMod' and `FloatParam' fields and `ModifyName' method have been
removed from `TParser' class.

`ProgramSection' rule has been renamed to `Process', and original
`ProgramSection' has been changed to

ProgramSection::= Process | ProcessGroup.

New rule has been introduced for process group:

ProcessGroup::= "PROCGROUP" ProcessNumID ":" ID "{" ProgramSList "}".

`TprsProcess' class has been extended with a new field, called
`Rank'. This field is used to hold rank number associated to the
process.

New port types have been introduced: multicast, scatter, reduce and
gather. These are for ports of the process groups.

`TprsPort' class hes been extended with a new field (Computation) to
store type of the computation which must be done by the port if it is
a reduce port. Another field, `Name' has been added to store name of
the port and `ProcID' to store numerical ID of connected process if it
is defined by its ID instead of its name. Constructor of the
`TprsPort' class has been changed to accept initial values of the new
fields. 

`ProcSgroup' rule has been changed from

ProcSgroup::= PortType ":" IntNumber PortDefToPort.

to

ProcSgroup::= PortType "(" Calculation ")" ":" IntNumber PortDefToPort.

`PortDefToProcID' rule has been changed from:

PortDefToProcID::= | IntNumber.

to:

PortDefToProcID::= | ID	| IntNumber.

New methods in `TprsProcColl' class: `FoundProcByID', `FoundProc'.

C or C++ style comments can be used in GRP files. Nested C comments
are not allowed.

Jul 11, 1997.


New features in version 0.32.0
==============================

GRP Parser
----------

New method has been introduced in `TParser' class: `make_ProcGroup'

New method `IsGroup' in TprsProcess.

New class `TprsProcGroup' to represent process groups.

New class has been introduced `TprsFarm'. It's anchestor of
`TprsProcGroup'.

`ProcessGroup' rule has been changed from

ProcessGroup::= "PROCGROUP" ProcessNumID ":" ID "{" ProgramSList "}".

to

ProcessGroup::= ProcGroupType ProcessNumID ":" ID "{"
		"PORTSECTION" "{" ProcSgroupList "}"
		ProgramSList "}".

and a new rule has been introduced:

ProcGroupType::= tokPROCGROUP | tokFARM.

New method `index_of' in `TCollection' class.

New method `show_name_title' in `TprsProcess' class. 

New method `show_name' in `TprsProcess' class. 

New method `show_name_title' in `TprsProcGroup' class. 

New method `ShowTasks' in `TprsProcGroup' class. 

New method `grouptype_name' in `TprsProcGroup' class. 

New item `parent' in `TprsProcess' class.

Class `TprsFarm' has been removed.

New method `mk_proccoll' in the class `TprsProcGroup' to make process
collection.

GRP library
-----------

Libraries for grapnel programs have been reorganized. Three kind of
libraries are produced. One is linked to both server and
client. Second library is especially for server process. Third one is
for clients. To support this library structure some files have peen
split:

`ddstuff.c' has been split to `ddstuff.c', `ddstuff_srv.c' and
`ddstuff_cl.c', as well as `ddstuff.h' has been split to `ddstuff.h',
ddstuff_srv.h' and `ddstuff_cl.h'.

`grapnel.h' has been split to `grapnel.h', `grapnel_srv.h' and
`grapnel_cl.h'.

And finaly the grapnel API:

`grapnel.c' has been split to `grapnel.c', `grapnel_srv.c' and
`grapnel_cl.h'.

New parameters (argc, argv) has been appended to parameter list of
`grp_create_proc' function. 

New option (-p) recognized by `Init' function.

New option (-T) recognized by `Init' function. This sets up the value
of a new variable `TapeLevel'.

`DDstuffVersion' function has been removed.

First parameter of the `ReadMapFile' function has been removed.

New service in `grp_server' to handle exiting of tasks. Message tag is
`GRP_NOTIFY'.

`grpi_pinfbyname' has been renamed to `grp_pinfbyname' and moved into
`ddstuff_srv'. New function `grp_pinfbytid' has been introduced.

New functions in `grapnel_cl.h': `grp_fopen', `grp_fclose',
`grp_fprintf'.

Feb 27, 1998.


New features in version 0.32.1
==============================

Feb. 27, 1998.
