29 June 1999   Small bugs found in smlline.cxx & smllinevector.cxx

               Folder v0.1 is a snapshot of the directory
................................................................................
 -> 6 July 1999
             1)  Class registrar...new method added  addRegardless. This will
                add an entry even if an entry with the same name already exists

             2)  Class SMLLine...new method subobjecLine. Returns true if the
                line is subobject line

             3)  Class SMLLineVector.  Method out now takes as an argument 
                 offset which is then printed before every SML Line
................................................................................
27-28 September 1999

             smlline.cxx  and smlline.hxx   method whenLine and instructionLine
             addeed
................................................................................
 9 November 1999

             a new subroutine added to utilities.hxx & cxx called getType
................................................................................
10 November 1999

            a new subroutine added to utilities.hxx & cxx called getName 
................................................................................
15 November 1999
           new subroutines added to utilities.hxx&cxx  :  getValue  & getString
================================================================================
    Folder  v0.3 is a snapshot
================================================================================
25 November 1999

           some changes were done to utilities.cxx and smlline.cxx which were
           not documented.
================================================================================
    Folder  v0.4 is a snapshot
================================================================================
13 February 2000

         a new subroutine added to utilities.hxx & .cxx : getNextToken
---------------------------------------------------------------------------------
22 February 2000

        namevector.hxx&cxx   method out now takes an offset
----------------------------------------------------------------------------------
29 - 30 Apr 2000

     new subroutine  process_line_forTrans   this processes SML line in identical
        manner as the fortran translator does. This way one hopefully succeeds
        in having the condition comment on sobj file the same.
----------------------------------------------------------------------------------
 2 - 4 May 2000

        smlline.hxx & cxx  removed methods: objectLine, subObjectLine, 
                     onjectSetLine, parametersLine and stateLine.
                 they are all replaced by new method  objectKeyword
----------------------------------------------------------------------------------
 4 - 5 May 2000

       smlline.hxx & cxx  just deleting some irrelevant comments.
--------------------------------------------------------------------------------
16-17 May 2000
       smlline.hxx&cxx   commented out method actionLine   and   whenLine
--------------------------------------------------------------------------------
18 May 2000

       smlline.hxx&cxx   commented out methods actionLine and whenLine deleted

            method instructionLine  completelly re-hacked.
--------------------------------------------------------------------------------
 7 August 2000

      typedefs.hxx   check on WIN32 put in for definition of bool
--------------------------------------------------------------------------------
 8 August 2000

      smlline.cxx   bug fixed.  Check on 'else if' was missing

      utilities.cxx  problem with sscanf reading floating points on WIN32
                     this has to be investigated ***************
--------------------------------------------------------------------------------
11 August 2000

   Changed the name strcasecmp  to my_strcasecmp in utilities.cxx,hxx & 
   gettoken.cxx

   changed typedefs.hxx   def bool only on VMS at the moment
-------------------------------------------------------------------------------
12 August 2000

   utilities.cxx   corrected a small declaration problem in firstNonBlank func
                   caught by Gnu compiler

       had problem with readLine on HP. looks like Gnu bug and should be 
       investigated *******************
       for the moment fixed it by increasing buffer size to 133 characters which
       is more than adequate. 
---------------------------------------------------------------------------------
21 September 2000

   utilities.cxx   function firstNonBlank(SMLlineVector....   rehacked.
                   made more robust, better defined .... see the documentation
--------------------------------------------------------------------------------
26 September 2000
   utilities.cxx   function getNextToken(char str[]....)  rehacked
                  made more robust, better defined .... see the documentation
       Tested on all the available SML code
--------------------------------------------------------------------------------
 8 June 2001

   smlline.cxx  1) Keyword Object_set changed ObjectSet

		2) in addition to 'do', insert and remove are also interpreted
                   as do instruction
--------------------------------------------------------------------------------
10 June 2001
   namelist.hxx and namelist.cxx  new class NameList
---------------------------------------------------------------------------------
13 June 2001
   namelist.hxx & cxx do not need utilities.hxx...removed.  Be carefull!
   state manager has one as well.
------------------------------------------------------------------------------
 2 July 2001
  smlline.cxx   it deals with insert and remove instruction separately from
                do instruction
--------------------------------------------------------------------------------
 4 July 2001   namelist.hxx & cxx    new method removeAll() that removes all
                      the items from the list.
                      Method out improved.
------------------------------------------------------------------------------
23 July 2001  namelist.hxx & cxx   added copy constructor, assignement operator
                      and destructor
--------------------------------------------------------------------------------
29 January 2002 namevector.hxx & cxx ...new method isPresent(name) which
                checks for existence of name in the vector.

10 July 2002 (Boda Franek)

      namevector.hxx  .. includes typedefs.hxx to work on all platforms
      
31 July 2002  (Boda Franek)

     utilities.cxx   increasing buffer length from 133 to 1024...famous
           Solaris 8 bug
--------------------------------------------------------------------------------
15 October 2002 (Boda Franek)
    smlline.hxx, smlline.cxx  added another constructer to SMLline class
      SMLline(const int linnum, const char* lineBody)
--------------------------------------------------------------------------------
17 October 2002 (Boda Franek)
   name.hxx, name.cxx  new assignement operator that converts an integer
     into Name class
--------------------------------------------------------------------------------
 4 February 2003 (Boda Franek)
   smlline.cxx...  will recognise end_in_state line and classifies it as
                   terminate_action

 5 February 2003 (Boda Franek)
   smlline.cxx ... will recognise removeall instruction
   
 6 February 2003 (Boda Franek)
 
   smlline.cxx .... end_in_state  -->  endInState

 1 May 2003
 
   smlline.cxx... will also recognise 'move_to' line and classifies it as
                  terminate_action

                  it will also recognise 'remove_all' as a synonym to removeall
		  
 31-July-2003 (Boda Franek)
 
   namevector.cxx ... dynamicaly increasing allocation increment as necessary
   
 05 August 2003 (Boda Franek)
 
   name.cxx ... redundant code taken out of == method
   
 ->16 August 2003 (Boda Franek)
 
  - NmdPtnr class (nmdptnr.cxx&hxx)  ... operator == added.
   
   objects of the class consists of a name and a pointer. By definition
   two objects are equal when their names are equal regardless of the pointers 
   
  - new class NmdPtnrList  (nmdptnrlist.hxx&cxx)
  
  27 October 2003
    improved diagnostics in  firstNonBlank   and  getNextToken 
          file: utilities.cxx
=================================  v16  =======================================	  
   8 November 2003 (Boda Franek)
     
     NameVector class : new method
          NameVector& exclusiveUpdate(const NameVector& vector)
	  
	      elements in vector, that are not already present, are included
	      in the current class object
=================================  v18  =======================================
  20 November 2003 (Boda Franek)
  
     - NameList class : method add..making small mod to make it faster
                        namelist.cxx
			
     - NameVector class : method  Name operator[]   changed to Name& operator
                       this saves 1 copy
		       namevector.cxx & hxx
-----------------------------------------------------------------------------

 24 March 2004 (Boda Franek)

    - recognition of a comment line made simpler

======================  v18r2-c1  ========================================

=== 02-April-2004:12:21 ==========  v20  =================
=== 01-June-2004:17:23 ==========  v21  =================
=== 24-June-2004:12:17 ==========  v21r1  =================
=== 10-August-2004:13:11 ==========  v22  =================
=== 20-September-2004:12:06 ==========  v23  =================
=== 04-October-2004:12:45 ==========  v23r1  =================

 27-October-2004
 
 iostream migration
 
 a) two new files: iostream.inc  & fstream.inc 
 b) many files modified. This consisted in replacing 
    #include <iostream.h> by #include <iostream.inc>   or/and
    #include <fstream.h> by #include <fstream.inc>
---------------------------------------------------------------------------
 28-October-2004 (Boda Franek)
 
   iostream migration
   ------------------
   - iostream.inc & fstream.inc   removed
   -  usage of the above files replaced by smixx_common.hxx
   
    
=== 29-October-2004:19:52 ==========  v24r1  =================
=== 25-November-2004:16:15 ==========  v24r2  =================
=== 22-December-2004:14:33 ==========  v25  =================
=== 11-March-2005:15:54 ==========  v26  =================
=== 20-May-2005:15:58 ==========  v27  =================
=== 25-May-2005:12:04 ==========  v27r1  =================
=== 14-July-2005:17:07 ==========  v28  =================
=== 28-September-2005:15:35 ==========  v28r1  =================
=== 06-October-2005:15:38 ==========  v29  =================
=== 20-January-2006:14:46 ==========  v29r1  =================

 31-March-2006 (Boda Franek)
 
  Class NmdPtnr   method Name name()  changed to  const Name& name();
  Files : nmdptnr.hxx & nmdptnr.cxx
  for the test what it does see ~franek/refReturnValue.cxx
=== 31-March-2006:17:27 ==========  v30  =================
=== 19-May-2006:20:34 ==========  v31  =================
=== 21-May-2006:21:01 ==========  v31r1  =================
  7-Sep-2006  (Boda Franek)
    Class Name  : new constructor, that just reserves space.  name.cxx&hxx

  19-Oct-2006  (Boda Franek)
  
     utilities.cxx   subroutine getString which processes parameter strings
                     encountered in SML code makes sure that these are properly
		     escaped
    
  23-May-2007 (Boda Franek)
     Class Name  : new method subString    name.hxx & cxx
     
     smixx_parstring_util.c  ...suite of subroutines dealing with parameter
                                strings. This has been developed since Sep 2006
    
=== 25-July-2007:14:58 ==========  v32  =================

 3-Aug-2007 (Boda Franek)
 
  - smixx_parstring_util.c    bug fixed:  an empty string on input will now
                         generate an empty string on output, when the
			 output pointer is not NULL. This was fixed in:
			 smixx_escape_slash, smixx_unescape & smixx_escape
			 
			 Redundant function smixx_escape_toprint & 
			                    extract_parvalue_to_temp   removed
 
=== 07-August-2007:11:55 ==========  v32r1  =================
=== 25-August-2007:13:31 ==========  v32r2  =================
=== 28-September-2007:15:29 ==========  v32r3  =================
=== 07-October-2007:16:50 ==========  v32r4  =================
=== 12-November-2007:14:40 ==========  v32r5  =================

  28-Mar-2008 (Boda Franek)
  
  <class name>:: removed from some method names in namelist.hxx and
                                                   nmdptnrlist.hxx
    The new compilers do not tolerate it any more.
    
=== 31-March-2008:15:41 ==========  v32r6  =================

  26-May-2008 (Boda Franek)
  
  - nmdptnrlist.cxx (hxx)  small bug fixed in method out
  
=== 11-June-2008:15:51 ==========  v33  =================
  23-Jun-2008  (Boda Franek)
  
    - nmdptnrlist.cxx   fixed memory leak in method add
    
    
=== 02-July-2008:12:44 ==========  v33r1  =================
=== 16-July-2008:17:11 ==========  v33r2  =================
=== 06-October-2008:11:30 ==========  v33r3  =================
=== 10-October-2008:16:04 ==========  v34  =================
=== 16-October-2008:15:52 ==========  v34r1  =================
=== 11-November-2008:12:56 ==========  v34r2  =================
=== 03-December-2008:13:17 ==========  v35  =================

  16-Dec-2008  (Boda Franek)
  
  - smlline.cxx   method 'instructionLine' now recognises 'wait'
                  instruction

  13-Jan-2009  (Boda Franek)
  
  - name.hxx (cxx)  new method 'trimFront' removes blanks ans spaces at the
                    begining of the string
		    
  26-Jan-2009  (Boda Franek)
  
    - namelist.cxx   fixed memory leak in method add
    
    - namelist.cxx (hxx)  2 new methods:
    		1) int isPresent(const Name& name)    finds if the name is
						present in the list
		2) void add(const NameVector& namevec)  adds namevec to the
		         list. Names already in the list are not added

    - nmdptnrlist.cxx(hxx) 2 new methods:
    		1) int remove(const Name& name)	 only name is sufficient to
		                   remove the complete item
		2) void* pointer( Name& name )  find the pointer associated
		                    with the name.
				    
				    
=== 11-February-2009:14:48 ==========  v35r1  =================
=== 07-April-2009:14:07 ==========  v35r2  =================
=== 31-July-2009:15:49 ==========  v36  =================
=== 06-August-2009:15:54 ==========  v36r1  =================

  17-Aug-2009  (Boda Franek)
  
   Class  SMLline (smlline.hxx(cxx)):  2 new methods added used for
                                       diagnistic printing:
   
       1) void out(int jst, int jend) 
       
       2) void indicateCharacter(char* msg, int j)
       
       
=== 27-August-2009:17:17 ==========  v37  =================
=== 02-September-2009:14:44 ==========  v37r1  =================
=== 07-October-2009:12:46 ==========  v37r2  =================
=== 10-November-2009:18:53 ==========  v37r3  =================
=== 13-November-2009:14:59 ==========  v37r4  =================

  04-Dec-2009  (Boda Franek)
  
  - Class Registrar (registrar.hxx(cxx)) :
  	new method   'gimeName(void* ptn)' ... given ptn, it will find the
	             corresp. name under which it was registered. 
		     
  - Class SMLline   method  primKeyword
           the method will recognise union of object sets and will mark it as
	   type 5	     

  08-Jan-2010  (Boda Franek)
  
  -  Class   'NmdPtnrList'  (nmdptnrlist.hxx(cxx))
       method  'void* pointer( Name&) const' ... argument was made const
       
  20-Jan-2010  (Boda Franek)

  -  Class   'NmdPtnrList'  (nmdptnrlist.hxx(cxx))
       bug fixed in the new method  'void* pointer( Name&) const' 
         
  
=== 20-January-2010:16:26 ==========  v38  =================

  27-Apr-2010  (Boda Franek)
  
  - Class SMLline    method  instructionLine
            the method will recognise  create_object  instruction

  28-May-2010  (Boda Franek)
  
  
	    
  - Class Name    new method   removeLastChar
  
=== 21-June-2010:15:54 ==========  v39  =================
=== 02-September-2010:15:31 ==========  v40  =================
=== 21-November-2010:13:22 ==========  v41  =================
=== 06-January-2011:16:18 ==========  v42  =================
=== 04-February-2011:15:29 ==========  v42r1  =================

11-Feb-2011  (Boda Franek)

 - fixing compilation warnings in :
     smixx_parstring_util.c, nmdptnrlist.cxx, name.cxx, namevector.cxx and
     smlline.cxx
     
17-Feb-2011  (Boda Franek)

   File utilities.cxx :
   
   - Bug fixed in function 'process_line_forTrans'. It was uppercasing
      also inside double quotes. Since this function is called only
      from 'getHeader' of Condition class which is used to generate comments
      from condition string, it is not serious. Especially as condition
      strings do not contain any double quotes.
      
   - fixing a few compilation warnings
   
29-Jun-2011  (Boda Franek)

  
  - Class SMLline    method  instructionLine
            the method will recognise 'sleep'  instruction
=== 27-July-2011:16:13 ==========  v43r0  =================

21-Oct-2011 (Boda Franek)

   - Class NameList    new method  'add(NameList& list)' - will add the items
              from list unless already present.
	      
=== 29-November-2011:16:00 ==========  v44r0  =================
=== 15-December-2011:15:36 ==========  v45r0  =================
=== 20-January-2012:14:16 ==========  v45r1  =================

16-Feb-2012  (Boda Franek)

   
    - file 'utilities.cxx'  function  'getValue'
    
     Bug fixed for the case when string constant value has 'blank' as the
     only delimitersvn status
      
24-Feb-2012  (Boda Franek)

    - file 'utilities.cxx & hxx'
         1) new function: 'check_compname' checks for composite names
         2) function  'getValue'   uses the new function
	 
13 March 2012 (Boda F.)

    Bug fixed in 'check_compname'
    
19 July 2012  (B. Franek)

    - two new files:  paroperand.cxx & hxx
       moved here from 'translator' directory

31 July 2012 (B. Franek)

   class 'ParOperand' : 4 new public methods to retrieve the private data.
   
   	Name& valueType();  Name& value(); Name& parName(); and
	                                   Name& ownerObjName();
	Files modified: paroperand.hxx & .cxx
					   
07 August 2012 (B. Franek)

  class 'ParOperand' : new public 'void thisObjPar()'
     it will change operandType to COMPNAME  and set ownerObjName to THIS.
     
14 August 2012 (B.Franek)

  a small bug fixed in function 'getValue'   file:utilities.cxx
  
=== 31-August-2012:11:18 ==========  v46r0  =================

07 September 2012 (B.Franek)

  Bug Fixed:  paroperand.cxx  ... not enough space reserved in 'typevch' aray.
  
=== 26-September-2012:12:33 ==========  v46r1  =================

25 October 2012 (B.Franek)

    Bug fixed
    ---------
    
    class 'ParOperand'  all the private data has to be initialised in
        the class constructor.
=== 19-November-2012:14:31 ==========  v46r2  =================

15 January 2013 (B.Franek)

   Bug fixed
   ---------
   class 'ParOperand' : Parameter operand can also be delimited by "="
   
=== 28-January-2013:16:36 ==========  v46r3  =================

  -> 30 July 2013  (B.Franek)
  
  class 'ParOperand'
  
      new method 'setValueType(Name& valueType)'
      
      new method 'Name printingName()'
           prints its name in a convenient format
	   
  -> 15 August 2013  (B.Franek)
  
   class 'ParOperand'
   
      a) method 'out(...)' improved
      
      b) method 'thisObjPar()'  BUG fixed

   12 Feb 2014 (B.Franek)
   
   class 'SMLline'
   
     implemented method 'int linNum()' ... returns the line number
          and           'Name lineBody()' ... returns the line itself
	  
  -> 11 April 2014 (B.Franek)
  
   - new class 'ErrorWarning' keeping static method 'printHead' for unified
     Error/Warning messages.
     new files: errorwarning.hxx & cxx
     
   - 'ParOperand' (paroperand.cxx)
    
          method 'initFromSMLcode'
	      a) added checking error returned from 'getValue' function
	      
	      b) converted the existion error prints to the unified format
	      
   
         
=== 30-June-2014:15:16 ==========  v47  =================

  -> 15 July 2014 (B. Franek)
  
   - utilities.cxx    function 'int specialCode(...)'
   
         This function has been supplying to Translator the SML code
	 for the special object '&ALLOC'.
	 From now on it will also supply the SML code for another special
	 object '&DOMAIN'. This object is intended to be used for communicating
	 directly with State Manager. At the moment, its code is:
	 
	     Object : &DOMAIN
	     State : READY
	           action : DIAG (int LEVEL = 0 )
		          terminate_action / state = READY
			  
	 and it will be used to switch the level of diagnostic printing
	 in State Manager.

 -> 30 July 2014 (B. Franek)

  - utilities.hxx ... extnsive writeup written for the following functions:

            char* firstNonBlankPtn(char str[])
            char firstNonBlank(SMLlineVector* pSMLcode,
                      const int ist,const int jst,...)
            char* getNextToken(char str[], const char del[],Name& token)
            char getNextToken(SMLlineVector* pSMLcode,
                              const int ist,const int jst,const char del[],...)

 - utilities.cxx .. many comments included in the code of:

            char firstNonBlank(SMLlineVector* pSMLcode,
                      const int ist,const int jst,...)
             char getNextToken(SMLlineVector* pSMLcode,
                              const int ist,const int jst,const char del[],...)

 -> 11 August 2014 (B.Franek)
 
  - class 'ParOperand'
      a) new protected method 
            'void checkForCast(SMLline& line, int& jst, int& jnext)'
	    
	   Operand name is now allowed to be preceeded by a 'cast'.
	   That is one of (S), (STRING), (I), (INT), (F) or (FLOAT).
	   The function assumes that operand name starts with jstth
	   col of line and checks wheather it begins with cast, in which
	   case it sets _tobeCastedTo to STRING, INT or FLOAT. It then sets
	   jnext to the col where the proper name begins. This way
	   the rest of the parsing code can proceed as before.
	   
      b) new private data  'Name _tobeCastedTo'    
	    
      c) new public method
            'Name& tobeCastedTo()'  retrieving the above private data

-> 20-Aug-2014 (B.Franek)


    class ParOperand

        - new method 'setValue(Name& value)' ... set the '_value' to the 
                     value of referenced parameter. This is clearly only 
                     used in the State Manager when the actual values 
                     become known.

        - new method 'setCast(Name& cast)'  ... sets the value of the 
                                               '_tobeCastedTo'

        - new method 'operValueType()'  ... retrieves the final operand
                        value type after all the casting has been done.
             
        - paroperand.hxx ... oxygen type writeup added and the code 
                             re-organised a bit.

        - instead using "UNKNOWN" for the initial value private data, we
                         use "".


-> 31-Aug-2014 (B.Franek)

    - class ParOperand
         - new private data  'Name _operValueType' this is the operand
	                      value type after the possible casting was
			      considered.
			      
	 - new private data  'int _castingRequested'.
	                        0 - no casting
				1 - user casting in SML
				2 - imposed by Translator
				3 - imposed by Translator and overriding user
				    cast
				    
	 - new public method 'int calcOperValueType()' ... calculates the
	                      operand value type from the type of ref parameter
			      and possible casting.
			      return
			        1 - success
				2 - casing constant, casting ignored
				-1 - casting STRING to FLOAT not allowed.			    
          - new public method 'void outShort() const' ... prints one line info
	 
          - new public method 'int castingRequested()' ... retieves the 
                                                relevant private data
						
-> 07-Sep-2014 (B.Franek)

    - class ParOperand
		   
	  - method 'outSobj'  ... outputs '_operValueType'. This will change
	                      .sobj file
    
          - method 'initFromSobj_firstLine' &
	           'initFromSobj_nextLine'  are reading the '_operValueType'
		   
-> 11-Sep-2014  (B.Franek)

    - class ParOperand
    
           Bug found in method 'checkForCast'....have to ignore case
	   
=== 12-September-2014:11:49 ==========  v47r1  =================

-> 02-Feb-2015 (B.Franek)

    - class SMLline
    
       1) method 'instruction' will recognise WAIT_FOR and END_WAIT_FOR
    
       2) New method 'waitForKeyword()'  used to recognise keywords inside
          WAIT_FOR instruction.
=== 22-April-2015:16:31 ==========  v48r1  =================

 29-May-2015 (B.Franek)
 
    - class 'SMLlineVector'
    
       new method 'indicateCharacter'. Will do what method of the same name
                in  class 'SMLline' does, for a selected line.

 15-Jul-2015  (B.Franek)
 
   - class 'SMLline'
   
       enum stateKeywordReturn_t {...}   decribing return codes from 
                                         'stateKeyword' method
   
 ->  08-Sep-2015 (B.Franek)
 
   - Bug fixed in 'firstNonBlank' global function  (utilities.cxx &.hxx)
                  The function has also been re-writen to be more readable.
		  
   - class 'SMLlineVector'
         1) method 'out'  minor mods to do mostly with removing compiler
	    warnings
	    
	 2) new method 'validIndexes'.  Given line number and col number, it
	    checks that they are legal.
	    
=== 21-October-2015:13:41 ==========  v49r1  =================
     15-Jun-2016  (B. Franek)
     
     - utilities.cxx     Added comment about the redundancy of &DOMAIN object
     
=== 19-June-2016:12:02 ==========  v50r1  =================

-> 13-Dec-2016  (B.Franek)

   - class 'SMLline'
   
      a)  new enum SMLlineType_t
      b)  method 'objectKeyword' now returns type 'SMLlineType_t'
                              It also now denies an existence of Subobjects
			      

    14-Dec-2016  (B.Franek)
    
    - class 'SMLline'
    
       a) Removed ugly 'stateKeywordReturn_t'  enum type        
       b) method 'stateKeywordReturn' returns enum type 'SMLlineType_t'

    11-Jan-2017  (B.Franek)
    
    - class 'SMLline'
    
        removed method 'objectKeyword' and 'stateKeyword' and replaced them
	by the new method   'SMLlineType_t lineType(Name& name)' 
	
-> 08-Feb-2017  (B.Franek)

   -  class 'ParOperand'
      
      - changed the name of private data _value to _cValue to reflect its 
        true meaning, i.e constant value in the case when operand is VALUE.
	The method 'Name& value()' renamed to 'Name& cValue()'.
	The method 'setValue' removed as it is not used.
	
      - changed the name of private data _valueType to _parmValueType
        to reflect its true meaning, i.e it is the value type of the parameter
	it refers to.
	The method 'Name valueType()' renamed to 'Name& parmValueType()'
	The method 'setValueType' renamed to 'setParmValueType'.
   
  09-Feb-2017  (B.Franek)
  
      - changed the name of private data _tobeCastedTo to _userRequestedType
        to reflect its true(more precise) meaning.
	The method 'Name& tobeCastedTo()' renamed to 
	                                        'Name& userRequestedType()'.

      - private data _castingRequested removed as it is obsolete.
        consequently method 'int castingRequested()' also removed.
  
  13-Feb-2017 (B.Franek)
  
      - class 'ParOperand'
      
           - removed obsolete method 'setCast'.
	   
	   - replaced method 'calcOperValueType' by 'setOperValueType'
	   
 ->06-Mar-2017 (B.Franek)
 
     - class 'ParOperand'
     
           a) new method 'eraseUserRequestedType'.  Used to erase, in certain
	                circumstances, user's casting request.
			
	   b) method 'initFromSobj_firstLine'  ... code rationslised a bit
			
	   c) added a comprehensive description of methods and data. This
	      was added to header file for the class complying with
	      Doxygen format.
     
 ->15-Mar-2017  (B.Franek)
 
      -  new class 'ReservedNames'  encapsulates functions (static) used for
                 checking and retrieving the values of reserved names. It is                      used by both Translator and StateManager.
		 Relevant changes necessary in the make files.
		 The Translator does not use the value retriaval function.
		 This is supplied in StateManager/reservednames_sm.cxx
		 
 ->27-Jul-2017  (B.Franek)
 
      - class 'SMLline'   method 'instructionLine' recognises REPORT instruction
      
 ->25-Sep-2017  (B.Franek)
 
      - utilities.hxx & .cxx new function 'getGenValueType(...)' ...
                  given generalized value, it returns the type, i.e.
		  INT, FLOAT. STRING, NAME, COMPNAME or UNKNOWN
=== 05-October-2017:12:54 ==========  v51r1  =================
=== 01-December-2017:08:33 ==========  v51r2  =================

 -> 11-Dec-2017  (B.Franek)
 
   - small changes to remove compiler warnings
   
       files affected:  smllinevector.hxx (&.cxx), smlline.cxx
       
=== 10-January-2018:15:54 ==========  v51r3  =================


  11-Jan-2018  (B. Franek)
  
   - one more small change to remove compiler warning in smlline.cxx
          

   - errorwarning.hxx   new enum ExitStatus
   

 ->25-Jan-2018  (B.Franek)
 
   -  replaced 'exit/abort' by 'throw FATAL'. This required inclusion of 
       errorwarning.hxx in a couple of files.

  29-Jan-2018  (B.Franek)
  
   - new class 'ExaminationStage'.  Keeps information about Examination Stage.
          It is used primarily by 'ErrorWarning::printHeadTop(..)' method.
	  
   - class 'ErrorWarning'   method  'printheadTop(const char* label)'
   
          'label' argument was originally meant to be an arbitrary string
	  to give the message some sort of a heading.
	  It however, through usage, became 'message classifier', i.e.
	  'WARNING', 'SEVERE WARNING', 'ERROR' or FATAL. This is particularly
	  true during the Examination Stage in Translator (ES). 
	  Untill now, the return code from the ES was either 0 or non-zero,
	  0 meaning that .sobj file can be produced.
	  We would like additionaly to keep the info about the badest message.
          And so during ES, overall ES status is updated by calling
	         'ExaminationStage::updExamStatus(label)'.
		 
          NB: the alternative would have been to modify every single 'examine'
	      method which there are many. It would have resulted in a more
	      professional code though. 
	  	  
  ->23-Mar-2018  (B.Franek)
  
    - class 'SMLline'  method 'instructionLine' recognises FOR end END_FOR
    
    - class 'PtrVector' (files files ptrvector.hxx & cxx) copied here from
               stateManager  to be used by translator also.
	       This required the necessary change in makefile_translator.
	       NB: It should be deleted from stateManager. To be done later ****

  ->08-Apr-2018  (B.Franek)
  
     - utilities.cxx  functions  'check_compname', 'check_string',
                        'check_float', 'check_int' and 'check_name'
			
		      put in protection against rubbishy input.

  ->20-Apr-2018 (B.Franek)
  
   - class 'NameVector'   new method 'replace(const int i, const Name& o)'
                              will replace ith element of vector by 'o'
			      
  ->04-May-2018  (B.Franek)
  
   - utilities.cxx,.hxx  new function  'int argNo(const Name& name)' ... it
               checks that name is of the form $(argn) and if it is, it returns
	       'n' as integer.

  ->19-Jun-2018 (B.Franek)
  
   - utilities.cxx,.hxx   improvements.
   
=== 28-July-2018:14:35 ==========  v52r1  =================

 -> 07-Nov-2018  (B.Franek)
 
 - class 'ParOperand'
         new method 'replaceArgs(...)'  used by Translator. When appropriate,
	       it will replace parameter name by $(argi). See header file.
	       

 -> 18-Nov-2018  (B.Franek)
 
  - class 'ArgName'  moved here from src/stateManager folder. This is because
               of its use in 'ParOperand' class.
	
  - necessary changes to makefile_translator and makefile/stateManager
  
  - class 'ParOperand'
  
     1) Parameter Operand can now also be an argument and therefore have a form
      $(argn). To make it easier to process this eventuality, I introduced
      in addition to _parName additional private data 
         ArgName _parName_gen
	
     2) method 'initFromSMLcode(....)'
       	at the end the private data '_parName_gen' is initialised.
	
     3) new method    bool hasArgs() operating on _parName_gen will return TRUE
                            when Parameter Name is an argument
			    
     4) new method    setCurrentArgs(const NameVector& currArgs)
                            will replace _parName by the supplied argument.

 -> 01-Apr-2019  (B.Franek)
 
   - class 'ParOperand'
   
     Using _parName_gen was a BUG! It should be _cValue_gen.
     
   
     1) Parameter Operand can now also be an argument. 
       To make it easier to process this eventuality, I introduced
      in addition to _cValue additional private data 
         ArgName _cValue_gen
	 
     2) previous mods to 'initFromSMLcode(...)' reverted: a) it is not
       _parName_gen any more and b) _cValue_gen is only relevant to
        State Manager.
	instead,
	'initFromSobj_nextLine'  will initialise _cValue_gen
	
     3) method 'replaceArgs(...) called in Translator. When the operand is an
        argument, it will change its type to "VALUE" of type "STRING" and
	its value sets to ${argn}.
	Up to this point, Translator handled it as operand of type "NAME"
	
     4) method  hasArgs() called from State Manager now operates on
       _cValue_gen and returns TRUE when the value is an argument.
       
     5) method  setCurrentArgs(const NameVector& currArgs)  called from SM,
		will replace _cValue by the suplied argument.
		
 -> 06 April 2019  (B.Franek)
 
    - class 'NameVector'
			 new method 'reset' ... reinitialises the vector
	 
 
    - class 'ParOperand'   method 'setCurrentArgs'  ... returns immediately 
                           when there are no arguments.
   
 -> 19 April 2019  (B. Franek)
 
    - class 'ParOperand'  method  'outSobj'  ... when operator value type is
                          not assigned, it outputs STRING in its place.

-----			  Most likely FOR instruction.
 -> 17 May 2019 (B.Franek)
 
    - class 'ParOperand'  the argument replacing was extended to the 
                         operand type 'COMPNAME'. In this case also the 
			 remote (owner) object can be replaced. For this
			 purpose:
			 
	  1) there is additional private data 'ArgName _ownerObjName_gen'
	  
	  2) method 'initFromSobj_nextLine' will initialise _ownerObjName_gen
	  
	  3) methods 'replaceArgs', 'hasArgs' and 'setCurrentArgs' are modified
	     accordingly.
	     
-------
 -> 11 Nov 2019 (B.Franek)
 
    - class 'NmdPtnrVector'  new method 'void clear()' ... will return 
                       object into the state just after instantiation i.e empty
		       
     - class 'Registrar'  new method 'void addRegardless(const NmdPtnr &)'
                           ...it takes as argument directly a Named Pointer.


=== 22-November-2019:16:35 ==========  v53r1  =================
 -> 10 Jan 2020 (B. Franek)
 
    - class 'SMLline'   method 'instruction'  recognises the new DESTROY_OBJECT
                                               instruction

 -> 17 Jan 2020 (B.Franek)
 
    - class 'PtrVector'   new method  'operator-=' to remove a pointer
    
 -> 22 Mar 2020  (BF)
 
    - class  'SMLlineVector'  destructor checked
    
    - class  'SMLline'  destructor checked
    
    - class  'Name'  destructor checked
    
    - class  'Registrar'  destructor checked
    
    - class  'NmdPtnrVector'  destructor checked
    
    - class  'PtrVector'  destructor checked
    
    - class  'ParOperand'  destructor checked
    
    - class  'NmdPtnrList'  destructor checked
    
    - class  'NmdPtnr'  destructor checked
    
    - class  'NameVector'  destructor checked
    
    - class  'NameList'  destructor checked
    
    - class  'ArgName'  destructor checked
    
=== 13-May-2020:11:48 ==========  v54r1  =================
=== 28-May-2020:11:19 ==========  v54r2  =================

  -> 11 June 2020  (BF)
  
  - class 'Name'  method 'ostream& operator<<(...)'  removed printing'<...>'
                       around the string itself
		       
  - class 'ParOperand'   method 'printingName()'  stopped outputing 'THIS' for
                              COMPNAME types.
			      
=== 21-July-2020:12:51 ==========  v55r1  =================

  -> 25 August 2020
  
  - utilities.hxx&cxx  new global function 'Name parNameFromValOf(name)'
               if 'name' is of the form &VAL_OF_'parname', it will return
			   'parname', or empty string.
			   
 -> 3 September 2020

  - class 'SMLline'   method 'lineType' ... recognising 'FUNCTION' line
                      method 'out' ... removed 'const'. It was causing some
					  nuisance.

 -> 11 September 2020
 
   -class 'SMLline' method 'instructionLine'  ... recognises CALL instruction
   
=== 05-October-2020:16:03 ==========  v56r1  =================

 -> 19 October 2020  (BF)
 
   - utilities.cxx & hxx   
         1)  function 'getValue' - the name of the function changed 
               to 'getIndiValue' to reflect better what it does. Also names
			   of some of the arguments and in one case its type were changed
			   to be more descriptive and useful.
         2)  old bug fixed. When indiName is the last token, then this is
		               indicated even when it is followed by delimiter spaces.
			   
   - class 'ParOperand'   method 'initFromSMLcode'  had to take the above
                           changes into account

 -> 03 November 2020 (BF)
 
   - utilities.cxx & hxx
        new function 'check_compname(Name& val, Name& remObj, Naem& remParName)'
		    when its return is 'true', it will also return the name of the
			other object and its parameter.
			
 -> 08 November 2020 (BF)
 
    - class 'Param' moved from the files src/translator/parms.cxx&hxx and
	                created two new files param.hxx and param.cxx
		 
	- smixx/makefile_translator	 the above means that parms.cxx has to be
	                explicitly included in the compilation

 -> 21 November 2020 (BF)
 
    - class 'Param'  method 'setParamType(...)' modified. It uses its own
	                      correctness checking rather than 'checkData()' method
                          'checkData' is only used in one of the constructors 
						  and in 'init' method.
					  
                     method 'setParamCurrValue(...)'  dtto
					 
                     method 'indiValueForm(Name& value)' removed. There alredy
                           exists global function 'getGenValueType' in
                           utilities.*
					 
 -> 25 November 2020 (BF)
 
   - class 'ReservedNames' is now going to reside in commonSource and used by
              both Translator and State Manager. For this purpose the code
              of method 'getValue' which resided in 
              stateManager/reservednames_sm.cxx was copied here.
			  
              This also required small modification in
                smixx/makefile_translator  and smixx/makefile_statemanager
              to make sure that header files are picked up from the right
              places
	 
 -> 01 December 2020  (BF)
  
  -  We want to use 'ParamManager' class also in State Manager and for this
      purpose :
       a)  parammanager.hxx&cxx files were moved here from 'translator' folder
	   
	   b) the two above files were modified to use class 'ObjectRegistrar'
	      rather than 'Registrar'. See comments in translator/History.
		   
       c) smixx/makefile_translator  & smixx/makefile_statemanager have
	      to explicitly include 'parammanager.cxx' in the compilation.
		   
-> 14 December 2020  (BF)

  - class 'ParamManager'  method 'actualIndiValue(...)' is taking into account
                      possibility that in COMPNAME format the name of the
                      object can be THIS.
=== 19-December-2020:10:36 ==========  v57r1  =================

-> 16 February 2021  (BF)

  - class 'Param'  added new constant 'notfound' to namespace paramcons
  
  - class 'ParOperand'  method 'printingName()'  added bool argument (def false)
                                this has effect in case of composite name
                                THIS.name 
                                THIS. is printed only when the argument is true.

-> 22 Feb 2021 (BF)

  - class 'Param'  
           - removed redundant constant 'nodefault' from 'paramcons'. 'noval'
             is sufficient.

           - constructor 'Param' and method 'init' : 
                name 'value' changed to more correct 'indiValue'.

           - method 'getParamData' removed

           - method 'currValue'  the method's name changed to 'paramValue'

           - method 'setParamCurrValue' method's name changed to 'setParamValue'

  - class 'ParamManager' using constants defined in 'paramcons' of 'Param'.
 
-> 10 Mar 2021 (BF)

 - new class 'ParmsBase'  holds and handles parameter data. Created by
                       consolidating 'Parms' classes in stateManager and
					   translator.
					   
 - class 'Param'  'ParmsBase' class added as friend.
 
 - utilities.*	 function 'nBlanks' moved here from 'ut_sm' of stateManager.

 
-> 11 Mar 2021

 - class 'Param'  'Parms' class removed as friend.
  			  
 
=== 15-March-2021:14:53 ==========  v57r2  =================

   24 Mar 2021  (BF)
   
   - utilities.cxx  bug fixed in function 'parNameFromValOf(...)'
   
   - new class 'VarElement'  this handles variable elements in SML constructs.
                   These are object names, object set names, state names.
             They can be either simple name or $(par-name) or &VAL_OF_par-name.
             In the two last cases the simple name is taken from the value
             of action parameter par-name.

   19 Apr 2021 (BF)
   
   - class 'VarElement'  added some comments.
   
   22 Apr 2021  (BF)
   
   - class 'Name'  new method 'lastChar()'
   
   23 Apr 2021  (BF)
   
   -class 'VarElement'  method 'actualName(...)'  has to remove double quotes
   
   27 Apr 2021  (BF)
   
   - class 'VarElement' new method 'bool actualNameAccessible(...) 
                returns false when the element is of the form &VAL_OF_'parname'
                and 'parname' is not found among action parameters.

 -> 07 May 2021  (BF)

   - class 'VarElement'
               a) Constructor   ... allowing initialisation with ""

               b) new  'bool operator ==(const char[]) const'

 -> 19 May 2021 (BF)
 
   - class 'VarElement'
           Bug fixed in method 'name()' and 'parName()'
		   
 -> 27 May 2021 (BF)
 
   - class 'VarElement' new method 'bool paramAccessible(..)'  when the element
                           is of the form &VAL_OF_(param) and param is one
                           of the action parameters, then it returns TRUE.
                           In all other cases it returns FALSE.
				   
  08 June 2021  (BF)
  
   - class 'VarElement'
      A) Interface to the class has not changed, except:

         1) aded extra 'bool operator == (const VarElement& ) const;
  
         2) method 'char* stringForSobj()' changed to 'Name stringForSobj()'
       NB: varelement.hxx looks like there were many changes, but they are
           mostly in comments.
    
       B) significant change to private data: instead of one 'Name _elemId',
          we now have two... 'Name _name'   and 'Name _parName'.
          
          One of them is aleays "". 
          When _parName is "", then _name is the 'real' name of the element.
          When _name is '', then _parName is the name of the action parameter,
          whose value is the real name of the element.
	
	   C) the change in B) of course implied changes to all the methods.

 27 July 2021  (BF)

   - new class 'VarElementVector'  

   - class 'VarElement' new constructor 'VarElement(const char id[]))'

 03 Aug 2021  (BF)
 
   - class 'Name'  
                new method 'int replace(int ist, int iend, const Name repstr)'
                will replace cols 'ist' to 'iend' by 'repstr'.	
	
   - class 'SMLlineVector'
             new method 'SMLlineVector& replace(int i, const SMLline& smlline)'
             will replace ith line in the vector.

   - file 'utilities.*'
             new global function:
               'char lastNonBlank(const SMLlineVector& smlCode,
                                  int& ilast, int& jlast)'

                It will search in 'smlCode' for the last non-blank character.
                It returns its value as ret-value and its position line,col in
                ilast,jlast.

 05 Aug 2021  (BF)
 
   - class 'VarElementVector'  method 'bool isNamePresent(...)' its code was
             moved from stateManager here. Also in the arguments using pointer
             to parameters rather then pointer to parent action.

 18 Aug 2021  (BF)

   - new class 'IndiValue' this handles indivalues in SML constructs.
                These entities represent simple constants i.e strings, integer,
                or floating points. Their form is either
				
                   1) simple constant eg. "abc", 67 or 75.0 or
                   2) simple name eg VOLTAGE, in which case it the the name of
                      the action or object parameter of that name that holds
                      the actuak value.
                   3) composite name eg ONAME.PNAME, in which case it is 
				   the name of the object parameter (PNAME) of object ONAME
                   that holds the actual value.
                NB: The name of the parameters can be 'reserved names'. See more
                   detailed desctiption elsewhere.

    - new class 'IndiValueVector'  

    -  These two classes required changes to ../makefile_translator and
              ../makefile_statemanager

    - class 'Name'  finaly implemented operator '!='

 26 Aug 2021  (BF)
 
    - class 'Param'
	
          1) method 'outString' has now one argument specifying in which format
                        to print the parameter.
	
	
	- class 'ParmsBase'

          1) method 'add(name,indivalue,type)' replaced by 'addParam(param)'
             ParmsBase should not know too much about the internals of Param.

          2) Copy constructor re-written - removing internal knowledge about
             Param class

          3) Assignement operator re-written - same as above

          2) method 'out' and 'outString' renamed 
             to 'outParms' and 'outParmsString'. 
             'outParmsString' has now format argument (see param.hxx). The
              knowledge about Param internals have been removed.

          3) obsolete methods 'setParType' removed.

  31 Aug 2021  (BF)
  
    - class 'Param'

          quite substantial changes. The main one is that private data '_type'
          serves as an indicator what type of parameter it is. Either
          'Declaration type', then _type is "STRING","INT" or "FLOAT", or
          'DO/CALL type' and then _type is set to paramcons::&nodef.
          It would have been much better to simply have two different classes
          of parameters. But we are stuck with this at the moment *****.
           Also
           1) names of many methods changed to reflect better what they do
           2) class 'ParmsBase' removed as 'friend'.
           3) private data 'Name _indiValue' changed to 'IndiValue _indiValue'
           4) brand new method 'paramValueAndType(...) primarily used for
              DO/CALL type parameters.

    - class 'ParmsBase'

           1) Changes following the changes in 'Param' changes in methods names

           2) completely removed any internal knowledge about 'Param'

           3) changed names of some methods.

    - class 'IndiValue'
	
	      1) added a couple of operators.
		  
		  2) followed changes in names of methods in class 'ParmsBase'
		  
	- class 'VarElement'
          changed the name of called method responding to the change in 
          in 'ParmsBase'

  19 Sep 2021  (BF)
  
    - class 'IndiValue'
	
	      1) private data 'Name _objName' replaced by 'VarElement _objId'.
             This required minor modifications at many places.
             NB: object-name in  object-name.par-name  can now have form
                 $(xxx) where xxx is a name of action parameter.

          2) 2 private methods 'actualValue_NAME(...)' and 
                              'actualValue_COMPNAME_ObjKnown(...)
             NB: these are used by the new method, see 4)

          3) method 'actualValue(...) re-written using the new private methods.
         
          4) new method (used by Translator) 'bool actualValueAccessible(...)'
             It also returns actualType. In case when indi value has a form
             $(xx).yy  actualType is returned as "".

    - class 'Param'
	
	      new method 'bool paramValueAccessible(...)' used by Translator. We
          now need this because if the parameter value is of the type $(xx).yy,
          its type is unavailable at the translator stage. But we still want
          to know that everything else is ok.

    - class 'VarElement'
	
	      new operator != (const VarElement& velem)
		  
    - file 'utilities.cxx &hxx'

         a) function 'check_name' modified. It has to cope with $(xxx) format.

         b) function 'getIndiValue(...)' modified. It has to cope with $(xxx).
          *** this should be moved into 'IndiValue' class.

         c) new function 'getSpecialIndiValue(...)'  *** this should go to
            'IndiValue' class.
=== 22-September-2021:11:34 ==========  v58r1  =================
