------------------------------------------------------------------------------ 3-Jul-1997 Moved all files from development to default. Before I did that I backed the development to week. ------------------------------------------------------------------------------ 7-Jul-1997 1) Allowed for action not finnishing with terminate_action instruction ... small modification in state.cc 2) Putting some rudimentary prints in Smiobject.cc so that the logic can be followed from the log files. ------------------------------------------------------------------------------- 10-Jul-1997 1) parameters.hh Max no of object lines increased to 20000 Max no of states increased to 200 2) smpcond.hh Max no of states in simple condition increased to 50 3) name.cc A few trivial bugs fixed having to do with strings containing just \0 ------------------------------------------------------------------------------- 11-Jul-1997 condition.cc debuging test of simple conditions taken out.. not necessary any more ------------------------------------------------------------------------------- 14-Jul-1997 action.cc one line test on pointer to instruction block not beiing zero. This is allowing for a situation when the action belonging to a logical object does not have any instructions (not even terminate_action) ------------------------------------------------------------------------------- Alpha Release; Version 2.3.6 ------------------------------------------------------------------------------- 24-Jul-1997 All files from Development area moved to Default Version 3.0 (= Version 2.3.6) This is DELPHI production vesrion, i.e. it can handle all DELPHI SML code The directory was backed up to HEPVS3 on 14-Oct-1997 to File: BACKUP_DIR:SM_SOURCE_V3-0.BCK ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- 24-Oct-1997 Objectregistrar.cc & .hh The number of objects is now completely dynamical. It holds only pointers to SMI objects and is basically an array class. All the member functions should behave as before. It could now be used for other lists of objects (not just all of them). It would be more tidy to change its name to say SMIObjectList and also the names of some of the member functions. ------------------------------------------------------------------------------- 28-Dec-1997 Name.cc & .hh This was developed further during coding Preprocessor : a) it was made 'const-correct' b) 3 new functions added : exists(const Name&), replace and squeeze c) Bug fixed: delete _ptn; replaced by delete [] _ptn; everywhere were appropriate....memory leak! d) Bug fixed: in append appending empty string would overwrite unknown memory ------------------------------------------------------------------------------- 29-Dec-1997 1) Block_Name.cc & .hh This was developed further during coding Preprocessor : Functions out, numOfEntries and operator[] were made const New function append was added...this appends another block to the existing one. N.B. should create a utility directory for C++ classes and put Block_Name and Name (see below) in it so that both State Manager and Preprocessor can use it ------------------------------------------------------------------------------- 3-Mar-1998 COMMHANDLER.cc & DIS.HH trivial mods made to achieve ANSI compatibility and to get rid off compilation warnings. These changes were done by Clara directly in the default area. ------------------------------------------------------------------------------- 5-Mar-1998 1) OBJECTREGISTRAR.HH & CC... Removing the _name argument from registerObject call 2) SMIOBJECT.hh & .cc a) New function name(Name& ) returning the object name b) Removing the _name argument from registerObject call ------------------------------------------------------------------------------- 6-Mar-1998 1) OBJECTREGISTRAR.HH & CC ... New function: SMIObject *ObjectRegistrar::gimePointer(const int inx) giving the pointer for a given index 2) SCHEDULER.CC when looping over all objects uses now the the new gimePointer(const int inx) instead of going through the object name 3) SMIOBJECT.CC During the instantiation, the object name is printed ------------------------------------------------------------------------------- 7-Mar-1998 1) UTILITIES.HH & CC New function: print_obj(Name& objname) in addition to print_obj(char* objname) 2) SMIOBJECT.HH a) the function void name(&Name) changed to Name name() b) private data Name _objectName added in addition to char _name[..] 3) SMIOBJECT.CC a) the function name changed (see above) b) all print_obj(_name) changed to print_obj(_objectName) 4) OBJECTREGISTRAR.CC ... usage of name of SMIOBJECT corrected ------------------------------------------------------------------------------- 8-Mar-1998 1) SMIOBJECT.hh ... _name abolished 2) SMIOBJECT.CC ... usage of _name is abolished and only _objectName is used 3) OBJECTREGISTRAR.CC various error conditions such as 'object of a given name does not exists' are trapped and State Manager aborted 4) STATE_MANAGER.CC a) SMI domain name from the command line is forced to be uppercase b) prints version no 3.0.1 with date 8-March-1998 ------------------------------------------------------------------------------- Version 3.0.1 ------------------------------------------------------------------------------- 9-Mar-1998 Before any copying from dev to default, default was backuped to SM_SOURCE_V3-0-0-1.BCK and this was then copied to HEPVS3 backup_dir. This is because since v3.0 there were some minor changes done by Clara to COMMHANDLER.CC, DIS.HH, SMIOBJECT.CC and UTILITIES.HH ------------------------------------------------------------------------------- 17-Mar-1998 All files from dev moved to default. Default was then backuped to SM_SOURCE_V3-0-1.BCK and this was then copied to HEPVS3 backup_dir. ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- 23-Mar-1998 1) action.hh & action.cc action name used to be a character string. It is now changed to type Name. Same with the parent object name 2) state_manager.cc a) smiDomain has been made global variable of Type Name b) prints version no 3.0.2 with date 23-March-1998 3) logic_engine.cc a) picks up the domain name from the global variable rather than from the input argument b) before calling the CommHandler it has to convert it to a string (***this is a temporary bodge) 4) doins.cc If value of parameter is equal to &SMIDOMAIN string it will replace it by the Smi Domain name picked from the global variable ------------------------------------------------------------------------------- Version 3.0.2 ------------------------------------------------------------------------------- All the files in dev moved to default ------------------------------------------------------------------------------- 17-May-1998 1) state_manager.cc a) input filename length allowed to be 256 b) prints version number 3.0.3 with date 17-May-1998 ------------------------------------------------------------------------------- Version 3.0.3 ------------------------------------------------------------------------------- 01-08-Jun-1998 This is all to do with allowing different types for action parms 1) ACTION_PARAMETERS.HH & .CC a) made const correct b) types private data added c) various checks on compatibility of types and values added 2) BLOCK_NAME.HH & .CC improved const correctness 3) DO_PARAMETERS.HH & .CC made const correct...no other changes 4) INCOMMING_PARAMETERS.HH & .CC a) const correctness b) types private data added c) various checks on compatibility of types and values added 5) OUTGOING_PARAMETERS.HH & .CC ... similar to 4) 6) UTILITIES.HH & .CC 4 subroutines added: bool check_name( const Name&); bool check_int(const Name&); bool check_float(const Name&); bool check_string(const Name&); for checking the types of parameter values N.B. Notes on Action parameters: - Parameters declared in the action: Format : ACTION : action-name (pd[,pd]....) where: pd is parameter declarator of the form: [tp] nm[=v] where : tp is type definition and is equal to STRING INT FLOAT when not present, it is assumed STRING nm is parameter name v when present, it is the default value. When parameter is of type STRING, the value has to be enclosed in double quotes. - Parameters declared in DO instruction: Format : DO action-name (p[,p]....) object-name where: p has form: nm=v where nm is parameter name (declared for action-name of object-name) v is either a) default value, in which case it has to be the correct type (not checked at the moment). In particular, if a string, it has to be surrounded by doublequotes b) name of an action parameter (of the action to which DO belongs - Parameters incomming/outgoing to/from the object with action : Format of the in/out string: action-name[/p]..... where: p has a form: nm[(t)]=v where: nm is parameter name t is type indicator. It has to be present for integer and floating types, in which case it is either I or F. For string types it is not at the moment present. v is parameter value. For string types: the incomming value can or does not have to be enclosed in doublequotes. the ougoing value will not have doublequotes unless containing = or /. This is to ensure backward compatibility with DELPHI ------------------------------------------------------------------------------ Object Parameters ----------------- 11-12-Jun-1998 1) New class PARMS.CC & PARMS.hh ... this is intended to replace the all other parameter classes (in, out, action and do) 2) SMIObject.hh and .cc - Object Parameters added (class PARMS) - constructor modified, - new method parmString that will return parameter string to be used by CommHandler - setState method modified (associated objects are now delivering parm string together with state) -------------------------------------------------------------------------------- 13-Jun-1998 1) ACTION.* holds a pointer to parent object, new method that returns pointer to incomming parameters, it also passes the pointer to parent object down to instruction block class 2) DOINS.* holds the pointer to the parent object 3) INCOMMING_PARAMETERS.* new method get, returning a param name and a value 4) INSLIST.* holds the pointer to the parent object and also passes it down to DOINS class 5) PARMS.* several utility methods added 6) SMIOBJECT.CC passes its address down to STATE class 7) STATE.* holds the pointer to the parent object and also passes it down to ACTION and WHEN class 8) WHEN.* holds the pointer to the parent object and also passes it down to its DO instruction ------------------------------------------------------------------------------ 14-June-1998 1) ACTION.cc trivial bug fixed in the new code 2) BLOCK_NAME.cc dtto 3) INCOMMING_PARAMETERS.cc dtto 4) DOINS.hh DOparameters class abolished and replaced by Parms DOINS.cc Parameter updating from action parameters during execution changed (Do instruction now fetches the parameters rather then askin the action for updating) Also object parameters are now used for updating. 5) DO_PARAMETERS.* new method 'get' added 6) INSLIST.* this now takes into account the new 'Set' instruction 7) PARMS.cc small bug fixed 8) SETINS.cc new instruction class 9) SMIObject.* new method 'pObjectParameters' returning the pointer to object parameters ------------------------------------------------------------------------------- 15-Jun-1998 1) ACTION.* new method 'pActionParameters' returning pointer to action parameters 2) ACTION_PARAMETERS.* new method 'get' 3) two new functions COPY_ACPARS_TO_PARMS and COPY_INPARS_TO_PARMS these are purely temporary 4) PARMS.* a few improvements 5) SETINS.* developed to do what it was intended for -------------------------------------------------------------------------------- 16-Jun-1998 1) ACTION.* any references to do and out parameters removed. also that disgusting method match parameters was removed (do instruction does it itself). A few utility methods added 2) In view of the changes to ACTIONS, DOINS.cc was improved somewhat 3) INCOMMING_PARAMETERS.hh anything to do with do and out parameters removed 4) SETINS.* the usage of COPY functions is supressed in view of all the other developments 5) STATE.CC inpars variable is now class Parms rather than IncommingParameters 6) STATE_MANAGER.CC prints version 4.0 dated 16-Jun-1998 ------------------------------------------------------------------------------ 17-Jun-1998 1) COPY_INPARS_TO_PARMS small bug fixed 2) PARMS.* method 'clear' added and a small bug fixed 3) STATE_MANAGER.cc prints date 17-Jun-1998 ------------------------------------------------------------------------------- Version 4.0 This was taken to SLAC as a part of smixx v2.0 ............................. During the visit to SLAC the following files were modified (at SLAC): PARMS.CC - adding some debug prints i.e. the mods not carried over SMIOBJECT.CC - adding some debug prints and small one line mod which was supposed to fix a bug but it was not a bug afterall i.e. the mods not carried over UTILITIES.CC - this is a genuine bug fix in function 'check_name' ------------------------------------------------------------------------------- 10-Jul-1998 1) UTILITIES.CC taken over the corrected version from SLAC and some debug prints taken out 2) SMIOBJECT.CC activated information print when an associated object rejects an action in a current state. Absence of this print made me believe at SLAC that there was a bug in the logic At this point d$onl_dev:[smixx.state_manager.source] dircetory was backed up to hepvs3::DATA_DISK1:[FRANEK]SM_SOURCE_10-JUL-1998_DEV.BCK and d$onl_default:[smixx.state_manager.source] directory was backed up to hepvs3::DATA_DISK1:[FRANEK]SM_SOURCE_10-JUL-1998_DEfault.BCK ------------------------------------------------------------------------------- 14-Jul-1998 1) development and default area were independently purged 2) Files begining with _old_ deleted 3) All files moved from dev to default 4) Moved commhandler.cc, commhandler.hh and dis.hh from Clara's development to default area. Clara's comments: Changes in commhandler since 16 Jun 98: - Every time SMI connects to an associated object it sends a command installing an exit handler, so that if the SMI process dies the proxy dies (if it was setup to do so). - An SMI process will at startup set itself an exit handler to execute a callback routine when some specific clients (like GUIs) die. The clients themselfs will enable the exit handler (via a DIM command) when they allocate the domain (and disable it when they deallocate it). When the client (GUI) dies while the domain is allocated the callback will be executed and it will release the domain. 5) STATE_MANAGER.CC marked as version 4.1 14th July 1998 (in default) -------------------------------------------------------------------------------- 15-Jul-1998 1) COPY_INPARS_TO_PARMS.CC Some guis can still send me a string parameter without the double quotes. In that case I insert them. I managed to put in a bug (else missing) but it works and as this subroutine is going to dissapear, I leave it like that. 2) State_manager.cc is now version 4.1.1 3) PARMS.cc will remove double quotes in outgoing strings to make delphi proxies work. 4) STATE_MANAGER.cc is now marked 4.1.2 This version of state manager (exe and olb) immediately installed in default and put into production ------------------------------------------------------------------------------- 20-Jul-1998 COPY_INPARS_TO_PARMS.CC, PARMS.cc and STATE_MANAGER.cc moved into default ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ 23-Jul-1998 1) INITIATOR.cc After initiating an object a check is made if it is an external object and if yes a new subroutine 'createAlloc' (part of INITIATOR.cc file) is called that creates the &ALLOC associated object for the external domain 2) NAME.cc & hh New method added which allows to compare a name with a character string. 3) OBJECTREGISTRAR.CC method gimePointer :when object is not found, pointer 0 is returned (untill now it aborted) 4) SMICLASSREGISTRAR.cc &hh some half harted const correctness introduced 5) SMIOBJECT.cc & hh New method externDomain added: It returns Domain name for external objects and 'null' name for 'local' objects ------------------------------------------------------------------------------- 24-27-Jul-1998 1) PARMS.hh a) a couple of methods added for use by action b) when initialising from a string, if "STRING" value is not surounded by doublequotes, these are added. c) when building a string, then if "STRING" value does not contain = or / then doublequotes are removed. b) and c) are for compatibility with DELPHI d) method setFromParmString modified. It should now work for object parms and action parms. It drives the replacement from the local data. If parameter is found in the string, the local value is replaced. The method does not care if there are more parms in the string. However if any of local parms is not found in the string, it returns 'false'. 2) ACTION.HH Bye bye ActionParameters and IncommingParameters classes. All parameters are now class Parms. ACTION.CC this of course requires apropriate changes here as well 3) SETINS.CC small change in conection to changes in action.cc ------------------------------------------------------------------------------- 28-Jul-1998 1) I started to impose CONST correctness on ACTION class and it 'cascaded' down and finished to having to impose some CONST correctness on : TWONAMES, PARMS, COMMANDHANDLER(Clara informed), CONDITION, DOINS, IFINS, INSLIST, SETINS, SMPCOND, TERMINS and WHEN. 2) TWONAMES.CC & HH new method 'set', taking two names rather than just two strings ------------------------------------------------------------------------------- 29-Jul-1998 1) ACTION.CC & HH keeps as new private data pointer to the parent state. It also passes it to the constructor of InsList class. 2) INSLIST.CC &HH keeps as new private data pointer to the parent state. It also passes pointer to parent state and parent action to terminate instruction. 3) SCHEDULER.CC state string used to be char[] type. It is now class Name 4) SMIOBJECT.CC a) two new private methods int SMIObject::stateInx( const Name& stname) const int SMIObject::stateInx( const char stname[]) const returning state index (-1 if not found) b) private array char _state[][] holding state names abolished and these are picked up from the state instantiations using the new stateName method. c) usage of object name in char form limited and replaced by Name d) setState method now takes Name rather than char[] and so does split method. Usage of statename as a char[] strongly limited. 3) STATE.CC & HH a) _name (char[]) replaced by _stateName (Name) b) some more const corectness imposed c) new method Name State::stateName() const returning the state name d) passes its addresse to Action class e) new method void State::changeName( const Name& name ) it will replace the state name by name 4) TERMINS.CC & HH a) private date prefixed with underscore. b) The constructor accepts pointer to parent object and action c) execute method behave differently when it belongs to &ALLOC object 4) There is a bug in C++ compiler and the declarations of typ const char lines[][MAXRECL] give trouble. For this reason I had to remove it from the following classes : CONDITION, DOINS, IFINS, INSLIST, SETINS, SMPCOND, TERMINS and WHEN. -------------------------------------------------------------------------------- 30-Jul-1998 1) SCHEDULER.CC Usage of object name as char[] limited 2) STATE.CC & HH a) new private data item introduced: Name _stateNametag; at the instantiation it is set to be equal to the state name. The difference is, that it never changes while the state name can change. b) new method: Name State::tagName() const 3) SMIOBJECT.CC & HH new method State* SMIObject::pTaggedState (const Name& tagname) const returns a pointer to what I call 'tagged' state which is a crapy name and should be changed. 4) TERMINS.CC & HH small tuning and bug fixing -------------------------------------------------------------------------------- 31-Jul-1998 STATE.CC & HH 1) new method bool actionExists( const Name& actname) const b) parent object name is now type Name c) method execute_assoc changed... made more elegant and also for remote &ALLOC objects, domain name is sent ------------------------------------------------------------------------------- 1-Aug-1998 1) SMIOBJECT.CC & HH a) new public method: Name currentState() const; b) new private methods: int stateInxDeadState() const; int stateInxTaggedState() const; void setStateAlloc( const Name& statestr) this is a special setState method for remote::&ALLOC objects 2) STATE.CC & HH Method execute_assoc will now protect remote objects from commands if the remote dom is allocated to somebody else. It is actually protecting itself from hanging. 3) TERMINS.CC some more tuning. ------------------------------------------------------------------------------- 2-Aug-1998 1) PARMS.CC & HH new method: int remove( const Name& name) supposed to remove parameter name 2) SCHEDULER before an external action is queued, new private method: int Scheduler::guardianOK(const Name& objectName, Name& actionstring) is called to check if the action is sent from a proper 'allocator' 3) TERMINS.CC more changes in connection with allocation 4) STATE_MANAGER.CC declares global Name allocator("\0"); ------------------------------------------------------------------------------- 3-Aug-1998 1) PARMS the way method remove was design got me into trouble .... something to do with instantiation of temp Parms, so I had to rewrite it as: void Parms::remove( const Name& name, Parms& parms) 2) SCHEDULER.CC a) had to take into account the redefinition of remove b) some debug prints put in c) when action is rejected, _pCommHandler->invalidAction(pSMIObj); has to be called, to stop the object to be 'busy' on the display 2) ACTION.CC In case of &ALLOC object, all incomming parameters are accepted without any regard to declared parameters...this is a temp bodge. ------------------------------------------------------------------------------- 4-Aug-1998 1) TERMINS.CC a small bug fixed 2) STATE_MANAGER.CC is now marked Version 5.0 delphi$online made to point to franek gaspar default new library made new *.exe made d$onl_dev:[smixx.state_manager.source]*.*.* and d$onl_default:[smixx.state_manager.source]*.*.* backuped to HEPVS3 ------------------------------------------------------------------------------- 17-19-Aug-1998 1) TERMINS.CC In order so that the domain gets released(by COMMHANDLER injecting RELEASE action to &ALLOC object on the external action queue) the following has to be done: a) when the allocator manages to allocate, method domainAllocated(connection-id) is called in commhandler. b) when the allocator releases, method domainDeallocated (connection-id) is called in commhandler. 2) COMMHANDLER.CC & HH appropriate changes for above 3) LOGIC_ENGINE.CC the pointer to COMMHANDLER is stored into a Global variable. This is used by TERMINS. All these global variables should be put into a SINGLETON 4) SCHEDULER.CC all changes in the guardian method: a) a few cosmetics changes to variable names. b) the current version of COMMHANDLER always suplies two parameters with every external action i.e. &ID ... process id that sent the action e.g. FRANEK_3@axdecp.cern.ch and &CONN_ID ... this is dim's connection identifier the guardian removes those two parameters from all actions except for acctions going to &ALLOC object where it insists that they are present otherwise the action is rejected (it should actually kill the state manager as this is obviously an internal error). ............................. 5) SMPCOND.CC If a state name in condition instruction is &SMIDOMAIN, this is translated to the actual domain name. e.g. if ( &ALLOC in_state &SMIDOMAIN ) then ... ................................ 6) SMIOBJECT.CC when high priority action (consequence of when instr.) is queued, a message is printed 7) DOINS.CC a debug print commented out 8) STATE_MANAGER.CC marked Version 5.1 and dated 19 August 1998 ............................................................................... 25-Aug-1998 ftp ed to unix as part of the smixx Version 3.0 26-Aug-1998 Clara made minor mods to Commhandler.*, dic.hh and dis.hh these mods were done both on UNIX and in Clara develop. area .............................................................................. 22-SEP-1998 During the visit to SLAC(7/9-11/9) a bug was found in PARMS.CC which caused the method buildParmString to blow up when one of the parameters was "". It was fixed at SLAC and taken over to this directory ................................................................................ 23-SEP-1998 disk$user:[franek.smixx.state_manager.source] dircetory was backed up to hepvs3::DATA_DISK1:[FRANEK]SM_SOURCE_23-SEP-1998_DEV.BCK d$onl_default:[smixx.state_manager.source] directory was backed up to hepvs3::DATA_DISK1:[FRANEK]SM_SOURCE_23-SEP-1998_DEFAULT.BCK and disk$user:[gaspar.smixx.state_manager.source] dircetory was backed up to hepvs3::DATA_DISK1:[FRANEK]SM_SOURCE_23-SEP-1998_GASPAR.BCK ............................................................................... 8-OCT-1998 1) initiator.cc ... method createAlloc : a check is made whether class &ALLOCATION_OBJECT exists and if not, the generation of the remote &ALLOC objects is not done to prevent the program blowing up. This is to allow usage of 'old' .sobj files which do not contain this class. 2) state.cc ... the action is allowed to be sent to remote domain also when &ALLOC object in the remote domain does not exists. 3) smiobject.cc a) When associated object changes state and was locked , it now remains locked. b) Various debug prints all to do with locking and unlocking of objects. ............................................................................... 9-Oct-1998 1) state.cc & .hh constructor: it is not called with parent object name and this is picked up using the object pointer. Also the state name is not returned back because if anybody wants it it can obtain it using the state pointer. 2) smiobject.cc constructor: a) changes to comply with changes in 1) b) If a subobject does not have dead_state declared, this is created and given name DEAD. ............................................................................... 10-Oct-1998 1) smiobject.cc ... switching on printing in which state an associated object starts. 2) state_manager.cc ... given version number 5.2 and today's date ............................................................................... 13-Oct-1998 1) state.cc&hh a) _atribute is now a Name and not char b) an additional constructor for constructing either dead or initial state for associated objects. The way it works is as follows: For each subobject of an associate object, there are two special states 1) Initial state...the state in which the object starts when State Manager begins execution (this state will never trigger an execution of a when clause). It is declared by specifying state atribute /initial_state. If such a state is not declared, it is created and given name &INITIAL 2) Dead state...the state into which the object is put when the remote process dies. It is declared by specifying state atribute /dead_state. If such a state is not declared, it is created and given name DEAD. (The absence of & is for backward compatibility) 2) smiobject.cc a) Implementing the above handling of Initial and dead states (untill now associated objects started in a dead state and also when this was not declared, it caused a crash) b) Method currentState was improved. It used to work only when object had only one subobject. It now works also when there are more then one in which case it returns the usual string subobj1.st1, ... ,subobjn.stn ............................................................................... 14-Oct-1998 smiobject.hh & cc a) new methods: int stateInx( const int isub, const Name& state ) const ; given subobject index and state name it returns state index. int stateInxDeadState(const int isub) const ; returns state index of the dead state for isub subobject int stateInxInitialState(const int isub) const ; returns state index of the initial state for isub subobject void setCurrStateInxes( const Name& stateNm ) ; from the string subobj1.st1, ... ,subobjn.stn it sets the subobject state indexes b) Object atributes and subobject names are now of type Name and not char c) the above methods utilised in setState and startup, thus simplyfying significantly the code ............................................................................... 15-Oct-1998 smiobject.cc & .hh a) as a result of above changes, method getNextSubState goes out which makes me very happy. b) a few minor bugs fixed in the new methods c) state_manager...version 5.2.3 and dated today ............................................................................... Version 5.3 20-Oct-1998 The State Manager has been running successfully for a few days ----> 1) state_manager.cc marked Version 5.3 (=5.2.3) dated 20 Oct-1998 2)d$onl_dev:[smixx.state_manager.source] directory was backed up to hepvs3::DATA_DISK1:[FRANEK]SM_SOURCE_20-oct-1998_DEV.BCK 3)d$onl_default:[smixx.state_manager.source] directory was backed up to hepvs3::DATA_DISK1:[FRANEK]SM_SOURCE_20-oct-1998_DEfault.BCK disk$user:[gaspar.smixx.state_manager.source] directory was not backed up as it has not changed since 23 Sep 1998 when it was backed up to hepvs3::DATA_DISK1:[FRANEK]SM_SOURCE_23-SEP-1998_GASPAR.BCK 4) d$onl_dev:[smixx.state_manager.source] purged and files beginning with _old_ deleted 5) d$onl_default:[smixx.state_manager.source] purged and files beginning with _old deleted Also several files (to do with old parameter handling) were renamed to _old_* 6) all *.cc and *.hh files moved from dev to default (with a few exeptions of irrelevant test files) 7) commhandler.*, dic.hh and dis.hh copied from disk$user:[gaspar.smixx.state_manager.source] to default 8) delphi$online set just to default and state_manager.olb and state_manager.exe were remade ... this note should really be in the directory above ................................................................................ 21-Oct-1998 smiobject.cc more debug prints added in : a) when an action is queued b) when a lock is queued c) when action is suspended and d) when action is resumed state_manager.cc version left to be 5.3, but the date changed All these changes were done directly in d$onl_default ............................................................................... 3-5 Feb-1999 Small changes in NAME.*, SMIOBJECT.*, and STATE.* default areas backed up and then the above 6 files were moved to default. at the same time Clara moved some communication related files there as well with some substantial changes. These are: COMMHANDLER.*, DIC.CC, DIC.HH, DIS.CC, DIS.HH, PTRVECTOR.CC and PTRVECTOR.HH ............................................................................... 19-Feb-1999 some changes to commhandler.cc ............................................................................... 20-Feb-1999 state_manager.cc marked as version 6.0 this was done directly in the default area - have to do something to state_manager_olb.make ... it did not take the extra 3 files (dic.cc,dis.cc,ptrvector.cc). had to add them separately. - what are these compilation warnings in dic.cc ??? smiobject.cc fixed two small declaration omissions causing compilation warnings on hpplus. done directly in default area ................................................................................ 1-Mar-1999 The no of object lines had to be increased in parameters.hh state_manager.cc marked as version 6.0.1 ............................................................................... 23-Mar-1999 It is necessary that the State Manager is compiled by Solaris native compiler CC. The following problems turned up a) CC has to have bool defined same as VMS while g++ does not b) Those classes which use str* such as strcpy has to include c) Those classes using abort or exit has to include This was achieved by putting the necessary mods into typedefs.hh as this is directly or indirectly used by everybody (except smiclass.cc). smiclass.cc had to have put #include in explicitly smiobject.cc produced 2 warnings about variables not beiing initialised and it was put right. It was not actually bug because they were properly initialised, but the compiler could not have known ................................................................................ 28-29 Mar-1999 All new and delete in name.cc are protected by disabling signals before and enabling them after. Also a new include file asts.h which has all the necessary stuf. New processcommandline.cc function which does exactly what it says. Not used yet. ............................................................................... 7 April 1999 parameters.hh modified...no of instructions increased to 300 state_manager.cc marked as version 6.1 and todays date ............................................................................... 8 April 1999 SMIOBJECT.CC & typedefs.hh small mods to get it through both GNU and native solaris compiler. ............................................................................. 19 May 1999 1) asts.h moved to default as it is a new file 2) processcommandline.cc file moved to default for the same reason 3) also the remaining files moved to default i.e. name.*, parameters.hh, smiclass.cc, smiobject.cc, state_manager.cc and typedefs.hh ............................................................................... 20 May 1999 $BFROOT/package/smixx/v4.1.4/state_manager/source from SLAC copied to work directory and compared with d$onl_default:[smixx.state_manager.source] Only 2 files were found different : parameters.hh .... increased numb of parameters sent in do instr smiobject.cc .... abstract objects now publish Busy when they execute an instruction They were copied from work to d$onl_default:[smixx.state_manager.source] - Some debugging prints were taken out. This affected doins.cc, smiobject.cc and state_manager.cc (version num) ................................................................................ 28 May 1999 doins.cc, smiobject.cc and state_manager.cc were moved to default where everything is at this point ................................................................................ 9 June 1999 1) a bug fixed in state_manager.cc initiator was incorrectly declared as ObjectRegistrar* instead of void. 2) termins.hh char pstate[] replaced by char* pstate to make it compatible with termins.cc 3) utilities.cc return 0 added before closing (end of function) braket to pacify PC compiler 4) utilities.hh a) removed definition of DISABLE_AST and ENABLE_AST b) put in #include dis.hh which now defines the above all these changes done directly in default ............................................................................... 14 June 1999 smiobject.cc ---- because of the problem with compilation on windows NT, the following declaration: char clines[MAXCLASSLINES][MAXRECL]; was replaced by typedef char OBJLINE[MAXRECL]; OBJLINE *clines; clines = new char[MAXCLASSLINES][MAXRECL]; ............................................................................... 15 June 1999 initiator.cc similar change as in smiobject.cc above concerning object lines ............................................................................... 22 September 1999 initiator.cc and smiobject.cc moved to default. At this point everything is there ............................................................................... 23 September 1999 1) name.cc and name.hh copied to develop. from v5.0.3 at SLAC. The changes are to do with removing protecting new and delete (see 28-29-mar-1999). This was never necessary on VMS and is not necessary on solaris any more because DIM is now multithreaded. 2) smiobject.cc a few more diagnostic prints suppresed (as was done at SLAC) 3) name.cc, name.hh and smiobject.cc moved to default...everything is now there ............................................................................... 24 September 1999 changed state_manager.cc version 6.3 recompiled and relinked created new directory under source called old_source which serves as dust bin ............................................................................... 1 December 2000 This file has been moved to cern.ch (Afs) from VMS which from today stops being the Master ............................................................................... 4 January 2000 Geting rid of MAXOBJECTLINES which was set to 28000 --------------------------------------------------- - initiator.cc object (or class) lines are collected into an object of NameVector class instead of 2dim vector of fixed dimensions. Once collected it is then copied into a two dimensional array [][MAXRECL] ( dynamicaly created on the heap). This is because SMIObject and SMIClass instantiators expect an array of this type and this is the quickiest way to make it work. Once the the object (or class) is instantiated, the array is deleted. - name.cc & name.hh & namevector.cc & namevector.hh are picked up from utilitiesxx directory - parameters.hh MAXOBJECTLINES parameter removed ................................................................................. 5 January 2000 Changes for Solaris 7 --------------------- These were done at SLAC originaly and they are minor changes to typedefs.hh & smpcond.cc Both files were copied from SLAC to CERN-Unix Getting rid of MAXCLASSLINES ---------------------------- First step is to store class lines in NameVector rather then in two dim array: small change to smiclass.hh & .cc....only private data changes and methods do same as before. Second step is to dynamicaly create space for class lines in instantiator of SMIObject in file smiclass.cc and MAXCLASSLINES removed from parameters.hh ................................................................................. 8 January 2001 - new file state_managerversion.hh defining the version - processcommandline.cc (which has not been used yet) was re-written ala the one used by CXXTranslator - state_manager.cc uses the above two files - smiobject.cc some of the debug prints were removed ............................................................................ 9 January 2001 - typedef.hh Bool is defined only when defBool is there - rather then using soft links, name.cxx, name.hxx, namevector.cxx and namevector.hxx were copied here to .cc and .hh files. ........................................................................... 10 January 2001 - block_name.cc and set_name.cc now needs #include ........................................................................... Sometimes between 10 January and 23rd April 2001 - logic_engine.cc pause() was replaced by dim_wait() this is because in one of the dim include files there was a define statement replacing pause() (which is the correct call for state manager) this define statement was taken out because some people may need the genuine pause for something else. ............................................................................ 23-27 April 2001 - .cc files renamed to .cxx and .hh to .hxx - Necessary changes had to be done almost in all of the files to include .hxx rather than .hh - Copyright notices added - files name.cxx, name.hxx, namevector.cxx and namevector.hxx deleted (actually renamed to _old_...) They are going to be picked up from common_source directory as they are identical with exception of namevector.cxx which has a bug fixed in common_source directory .............................................................................. 16 May 2001 - bug fixed in commhandler.cc (not enough space reserved for domain name) .............................................................................. 17 May 2001 - parms.cxx ommited int declaration put in - state_managerversion.hxx Version 6.5 ................................................................................ 11-13 June 2001 Object Sets ----------- - new files smiobjectset.cxx & hxx describing SMIObject class - initiator.cxx is now also looking for Object Sets. - state_manager.cxx debugging prints ................................................................................ 14 June 2001 Windows NT does not have (nor needs) include file unistd.h ...#ifndef employed in logic_engine.cxx .......................................................................... 16 June 2001 Object Sets implemented in do instruction: - smiobjectset.cxx&hxx new method reset() and nextObject(Name&) - doins.cxx when object name begins with &ALL_IN_, all objects in the set are sent the same action. ........................................................................... 17 June 2001 remove/insert instruction implemented: - smiobject,cxx added code to recognise and perform - smiobjectset.cxx&hxx new method add(Name&) and remove(Name&) ** realised it would be better to inherit all this stuff from NameList class. ........................................................................... 18 June 2001 Added a new method to Queue_TwoNames class (queue_twonames.hxx&cxx) smiobject.cxx - after remove/insert, change of the state of object is signaled same way like if it was any other action ending in the same state smpcond.cxx - method evaluate and isPresent now handles object sets ........................................................................... 19 June 2001 - smpcond.hxx added two new private data : _objectSet and _all_in flag - smpcond.cxx using the above simplifiing the code - smpcond.hxx&cxx two new methods added : 1) smiObjectSet() returns the SMI Object set it operates on 2) objectList(NameList&) returns the list of objects in the set - condition.cxx modifications to method objectSet and addto_objectSet they take into account the existence of simple conditions that operate on SMI Object Sets. nb the name of the methods is rather unfortunate because the set in this context is not ObjectSet !!! ............................................................................... 20-21 June 2001 Various debug prints removed and some diagnostic prints changed: initiator.cxx, smiclass.cxx, smiobject.cxx, smiobjectset.cxx, smpcond.cxx state_manager.cxx do instruction can handle name of the object passed as value of action parameter : doins.cxx ............................................................................... 3 July 2001 - New class InsertIns representing insert/remove instruction new files insertins.hxx & insertins.cxx - inslist.cxx processes insert/remove instruction as any other instruction - logic_engine.cxx new global variable pSchedulerGl holding the pointer to Scheduler. .................................................................................. 4 July 2001 - scheduler.hxx & cxx Execution of whens refering to object sets that changed composition ------------------------------------------------------------------- 1) new private date NameList _reqObjectSetList; This keeps a list of Object Sets requesting execution of whens 2) new public method void reqWhenExecution(const Name& objSet); ads Object Set to the above list. It is used by insert instruction 3) new private function void handleObjectSetWhens(); which, driven by the above list, executes the relevant whens. After execution of a action, even when action is only suspended, scheduler uses handleObjectSetWhens() to execute the whens - smpcond.cxx method isPresent(objName) if objName begins with &SET_ then the following string is interpreted as Object Set name and when the condition refers to this set, 1 is returned - smiobject.cxx processing of &INSERT and &REMOVE actions removed as they do not exists any more. ............................................................................... 5 July 2001 Improvement in diagnostic prints -------------------------------- smiobjectset.cxx, state.cxx, utilities.cxx&hxx The first when that is activated, will break the execution of whens ------------------------------------------------------------------- for the object -------------- state.cxx, when.cxx&hxx .............................................................................. 12 July 2001 Proper handling of 'Ghosts' in conditions ----------------------------------------- At the moment Ghost is an empty Object set - new private function of Condition class: int evalBool(operation[],operand1,operand2) operation is one of the "and", "or", "not operand1,operand2 = 1,0,-2 where 1 is true 0 is false -2 is 'ghost' the function evaluates the expression taking ghosts properly into account. The result is: 0 or 1 or -2 when both operands are ghosts. the function is then used in evaluate() method of Condition class changes in condition.cxx & hxx -when object set is empty, evaluate() method of SMPCond class returns -2 smpcond.hxx &cxx ............................................................................... 13 July 2001 - in addition ifins.cxx had to change. There was an implicit assumption (for the old version quite correct) that the objects participating in the If instruction are the same from execution to execution. the set of objects to be locked is calculated every time the istruction is initiated ............................................................................... 20 July 2001 -trivial bug (missing space) fixed in condition.cxx. The consequences were that conditions containing or did not work...quite serious ................................................................................ 23 July 2001 - smiobject.cxx & hxx arg1 in method currentState declared const - smiobjectset.cxx & hxx copy constructor and assignement operator added - smpcond.hxx&cxx a) new private data for SMPCond class: int _frozen; int _frozenResult; and SMIObjectSet _frozenSet; b) two private methods: 1) evaluate_obj() 2) evaluate_set() c) two public methods 1) freeze 2) unfreeze ............................................................................... 24 July 2001 - smpcond.cxx method evaluate() rewritten using the new methods evaluate_set and evaluate_obj and also taking into account _frozen flag - condition.cxx &hxx new methods freeze() & unfreeze()....they simply execute the method(s) of the same name on the simple conditions. - ifins.cxx & hxx a) new private methods freezeConditions() & unfreezeConditions()...these will freeze/unfreeze all the If's conditions b) method execute()....when if has to be suspended because some of the objects in the conditions are transiting, all the conditions are 'frozen'. When the execution is resumed, they are 'unfrozen' again At this point Object Sets are properly treated in If conditions ................................................................................ 23 August 2001 Bug found! This is actually more a design fault. Frozen results in Simple conditions will have to be calculated more judiciously then first thought. Quick fix is to define that frozen result can not be calculated. smpcond.cxx also some tydiing up in condition.cxx and ifins.cxx ............................................................................ 24 August 2001 Will be using utilities file from the commonSource -------------------------------------------------- - typedefs.hxx removed - functions specific to state manager moved from utilities files into ut_sm files and utilities.hxx & .cxx files removed - all files in the directory reviewed vis-a-vi the usage of utilities -------------------------------------------------------------------------------- 29 January 2002 Two new lists defined and calculated in the State class during -------------------------------------------------------------- instantiation : ------------- 1) _srvOList list of server objects, i.e. objects mentioned in the state's when conditions 2) _srvOSList list of server object sets, i.e. object sets mentioned in the state's when conditions Files affected : - smpcond.hxx & cxx ... new method objectName() - condition.hxx & cxx ... srvOList and srvOSList defined and calculated specificaly for the condition - state.hxx & cxx ... same as above, but for the state. -------------------------------------------------------------------------------- 31 January 2002 - Bug fixed in ptrvector.cxx in the method append. This is the same as was already fixed in all the other *vector classes a few month ago - InsList class allows unlimited number of instructions using the PtrVector class. Files changed: parameters.hxx, inslist.hxx & cxx -------------------------------------------------------------------------------- 7 February 2002 (Boda Franek) - removed(commented out) normaly unnecessary prints associated with Sets from insertins.cxx, scheduler.cxx & state.cxx This resulted in factor 12 reduction in ALICE runControl State Manager log file -------------------------------------------------------------------------------- 4 February 2003 (Boda Franek) remove &ALL from 'set-name' instruction will remove all objects from the set 1) Class SMIObjectSet (smiobjectset.hxx, smiobjectset.cxx)...new method void removeAll() 2) insertins.cxx modified accordingly -------------------------------------------------------------------------------- 18 March 2003 ( Boda Franek & Clara Gaspar) Publishing contents of Object Sets ---------------------------------- commhandler.cxx & hxx ...a couple of new methods smiobjectset.hxx & cxx ... new method to get set name scheduler.cxx & hxx ... declares sets at the begining and then publishes them whenever contents changes ========================== v13 =============================================== 17 July 2003 (Boda Franek) Class SmpCond (File smpcond.hxx & cxx) ------------- method whatAreYou substantially improved and updated. Instead of returning character string protected by max char constant it now returns Name. It uses whatAreYou1 (for TYP1) and whatAreYou2 (for Typ2). This is in anticipation of using inheritance. This method is used in Condition class for debuging so this had to be modified slightly State manager only tagged with ===== Jul17-2003 ===== 18 July 2003 (Boda Franek) Continuing cleaning Class SmpCond --------------------------------- - Because of the existence of subobjects in the past, there 3 private variables describing an object : 1) _objectStr[] eg. OBJECT.SUB 2) _objectName[] OBJECT and 3) _subobjectName[] SUB As we do not have subobjects anymore, _objectStr and _subobjectName are removed. smpcond.hxx (Ver 1.10 smpcond.cxx ver 1.15) - private data char _objectName changed to type 'Name' smpcond.hxx ver 1.11 smpcond.cxx ver 1.16 - private char _states[_maxStates][MAXNAMESIZE] changed to NameVector _states smpcond.hxx 1.12 smpcond.cxx 1.17 -> State manager tag Jul18-2003 21 July 2003 (Boda Franek) Continuing cleaning Class SmpCond --------------------------------- - method void objName(char* objnm,int maxsize) removed smpcond.hxx ver 1.13 smpcond.cxx ver 1.18 This has impact on Condition class that is using it : condition.cxx ver 1.9 - method isPresent(const char* objname) replaced by isPresent(const Name& objname) with consequences for condition class smpcond.hxx ver 1.14 smpcond.cxx ver 1.19 condition.cxx 1.10 22 July 2003 (Boda Franek) SmpCond class Frozen result has not been ever used as there was some doubt if it can be done (see smpcond writeup) This was achieved by setting _frozenResult variable to -1 in freeze method. As a result the cond was always evaluated again even when frozen. In order to improve the clarity of the code, I am taking usage of _frozenResult out. (method evaluate and freeze) smpcond.hxx ver 1.15 smpcond.cxx ver 1.20 23 July 2003 (Boda Franek) SmpCond class Two new private methods: isPresent1(...) this handles type1 simple condition and isPresent2(...) this handles type2 simple condition. isPresent(...) simply calls one or the other. This is similar to evaluate and whatAreYou. I am basically getting redy to use inheritance. smpcond.hxx ver 1.16 smpcond.cxx ver 1.21 25 July 2003 Speeding things up ------------------ - initiator.cxx increasing allocation chunk in NameVector class instantiation for object code from 20 to 200 - smiclass.cxx initialising class code object in initialisation list with 200 allocation chunk - smiobject.hxx&cxx changing function Name name() to Name& name() SmpCond class -Two new private methods freeze1() handles type1 simple condition and freeze2() handles type2 simple condition freeze() simply calls one or the other. This is similar to evaluate and whatAreYou etc. smpcond.hxx ver 1.17 smpcond.cxx ver 1.22 - new private variable _type holding the simple condition type. Untill now whenever needed the type was recognised by testing _objectSet (when ==\0 type 1, otherwise type 2). This is pretty ugly. If this was just internal then maybe, but it is like that used by Condition class ***** - new function int type() returns the type (this should be used by Condition class instead) smpcond.hxx ver 1.18 smpcond.cxx ver 1.23 ================================= v14 ====================================== 31 July 2003 (Boda Franek) SmpCond constructor will use the new version of the translator output, in particular it uses the type information. smpcond.cxx ver 1.24 1 August 2003 (Boda Franek) No need to choose allocation increment for NameVector class (see commonSource) this is done dynamicaly for every object. smiclass.cxx, initiator.cxx ================================ v15 ======================================== 05 August 2003 (Boda Franek) - objectregistrar.cxx instantiating temp Name object taken out of the loop ================================ v15r2 ======================================= -16 August 2003 (Boda Franek) - ObjectRegistrar class (objectregistrar.cxx&hxx) new method out - SMIObjectSet class a) uses NmpPtnrList class rather NameList for _objectList saving also the pointer to objects to speed things up b) new methods firstObject and nextObject using the new and safer methods in the NmpPtnr class. They have an additional argument void*& pNext which is kept on the caller's stack and therefore safe. ***** review all the other lists - SmpCond class uses the new safe nextObject method of class SMIObjectSet which also suplies SMI object pointer ================================ v15r3 ======================================= 27 October 2003 (Boda Franek) - new global funclion : makeStateString ut_sm.hxx&cxx - SmpCond class : a) private method 'stateString' removed (smpcond.hxx&cxx) b) global function makeStateString is used instead ================================ v16 ========================================== 31 October 2003 (Boda Franek) - SmpCond class : a) method objectList removed and replaced by objectsToLock method , To start its name expresses better its purpose. b) objectsToLock calls either objectsToLock1 or objectsToLock2 depending on the type. Obviously in preparation for inheritance - Condition class : method objectSet & addto_objectSet use objectsToLock method of SmpCond instead of objectList ================================ v16-sm1 ====================================== 8 November 2003 (Boda Franek) - SmpCond class : a) new private methods 1) constructor1 (for type1) and constructor2 the main constructor just reads the first line and having determined the type, it calls the corresponding constructor. b) methods objectName() and smiObjectSet() removed c) new private data 1) NameVector _refObjects list of normal SMI objects the condition referrs 2) NameVector _refOcjectSets list of Object Sets the condition referrs to. d) new methods 1) NameVector& refObjects()....accessing _refObjects 2) NameVector& refObjectSets...accessing _refObjectSets - condition.cxx uses the new methods (d) above) to build _srvOList and _srvOSList - state_managerversion.hxx renamed to version.hxx the relevant change made in processcommandline.cxx & state_manager.cxx ================================== v17 ====================================== 14 November 2003 (Boda Franek) - class SmpCond (smpcond.cxx & hxx) was significantly simplified by making it a base class and most of its methods made purely virtual. - new classes SmpCondTyp1 and SmpCondTyp2 (new files smpcondtyp*.cxx&hxx) They inherit from SmpCond. They also have all the code for the purely virtual methods - class Condition (condition.cxx) ... as simple conditions are constructed during the execution of the constructor, calling now different constructors depending on the typ. - ifins.cxx ...for some reason now needs #include "smiobject.hxx" - smiobject.cxx added #include =================================== v18 =================================== 17 November 2003 (Boda Franek) - added #include to inslist,cxx and smiobjectset.cxx 20 November 2003 (Boda Franek) - Set_Name class: method isPresent ... small mod to speed it up - State class : method Name State::stateName() const changed to Name& State::stateName() saves one copy ( state.cxx & hxx) - smiobjectset.cxx & inslist.cxx need stdio.h to compile on ALICE =================================== v18r1 =================================== 26 March 2004 (Boda Franek) - ut_sm.cxx thread safe version of ctime (ctime_r) - new format for version.hxx. this required mods in state_manager.cxx & processcommandline.cxx - some debug prints switched off in condition.cxx 26 March 2004 (Clara Gaspar) - increased permitted size of a name to 65 ... parameters.hxx - commhandler.cxx .. ctime -> ctime_r === 02-April-2004:12:21 ========== v20 ================= 24 May 2004 (Boda Franek) Removing limitation on the length of SMI Domain ----------------------------------------------- Files affected: state_manager.cxx & logic_engine.cxx ================================== v20-sm1 ============================= - Class ObjectRegistrar method gimeName changed Files: objectregistrar.hxx & objectregistrar.cxx - the above method is used only in state_manager.cxx so the necessary chnage was applied. ================================== v20-sm2 =============================== 26 May 2004 (Boda Franek) - state.cxx ... 1)passing the name of the parrent object in the action constructor is redundant since pointer to the parent object is passed as well and so this is removed. 2) method execute_assoc intermediate char string for object name removed. 3) pointer to the parent state is alos passed to When constructor - action.cxx 1) parent object name removed from the constructor call and _objName initialised using pointer to the parent object. 2) passing the name of the parrent object in the InsList constructor is redundant since pointer to the parent object is passed as well and so this is removed. - inslist 1) parent object name removed from the constructor call 2) instead of passing the name of parrent object to IfIns constructor, pointer to the parent object and pointer to the parent state is sent to be consistent with the rest of the stuff. 3) since _objName is not now used, it is removed 4) all instructions are now passed pointer to parent object, parent state and parent action. - ifins 1) parent object name removed from the constructor call and replaced with pointer to parent object and pointer to parent state. 2) _objName changed from char string to Name class - when 1) pointer to the parent state added to the constructor. 2) _objName changed from char string to Name class - doins, insertins and setins were additionaly affected by point 4) inslist ================================== v20-sm3 ================================== === 01-June-2004:17:23 ========== v21 ================= === 24-June-2004:12:17 ========== v21r1 ================= === 10-August-2004:13:11 ========== v22 ================= 20 Sep 2004 (Boda Franek) ptrvector.cxx casting of a pointer to int removed...could cause problems with 64 bit architectures. === 20-September-2004:12:06 ========== v23 ================= 04-October-2004 (Boda Franek) - Bug in handling whens: Scheduler::handleWhens (scheduler.cxx) before whens are evaluated, check has to be made whether object is busy and also whether there are already when actions pending. - two new methods in SMIObject: isBusy & hpActionsPending === 04-October-2004:12:45 ========== v23r1 ================= 27-October-2004 (Boda Franek) iostream migration: Many files modified. This consisted basicaly in replacing #include by #include or/and #include by #include iostream.inc & fstream.inc are new files in commonSource folder. ------------------------------------------------------------------------- 28-October-2004 (Boda Franek) iostream migration ------------------ usage of iostream.inc & fstream.inc replaced by smixx_common.hxx === 29-October-2004:19:52 ========== v24r1 ================= 11-November-2004 (Clara Gaspar) commhandler.cxx & hxx - when object is executing move_to action from when condition, it is not marked 'busy' - new static method CommHandler::setDnsNode("name of the node") 11-November-2004 (Boda Franek) Allowing input of dns on smiSM command line as -dns option Files affected: processcommandline.cxx & state_manager.cxx ================================= v24r1-sm1 =========================== 24-November-2004 (Boda Franek) Several levels of diagnostic printing introduced ------------------------------------------------ - the level is controlled by global variable 'dbg'. The higher level, the more printing. This is read from command line as the -d option. When not specified, it is set to 3 to be backward compatible with BaBar. see processcommandline.cxx modifications. - the diagnostics prints that are at the moment bothering LHCb most, were put under dbg control. Assuming LHCb will be running with level 1. This affects the following files: scheduler.cxx, setins.cxx, smiobject.cxx, state.cxx & state_manager.cxx ================================ v24r1-sm2 ================================== 25-November-2004 (Boda Franek) more work on diagnostic prints. Files affected: smiclass.cxx smiobject.cxx & smiobjectset.cxx ================================ v24r1-sm3 =================================== === 25-November-2004:16:15 ========== v24r2 ================= 29-November-2004 (Boda Franek) - initiator.cxx ... small adjustments to diag prints - state_manager.cxx ... -dtto- - smiobject.cxx ... adjustments to diag. prints NB since now I know whether action exists or not when I print, I could use this knowledge and not go through the attempted action execution === 22-December-2004:14:33 ========== v25 ================= 31-January-2005 (Boda Franek) Limitation on num of whens removed ---------------------------------- - class State (state.hxx & .cxx) When *_pWhen[MAXWHENS] replaced by PtrVector - parameters.hxx definition of MAXWHENS removed =============================== v25-sm1 ======================================= 1-February-2005 (Boda Franek) Limitation on num of actions removed ------------------------------------ - class State (state.hxx & .cxx) Name _action[MAXACTION] and Action* _pAction[MAXACTIONS] replaced by Registrar _actions; - parameters.hxx definition of MAXACTIONS removed ================================ v25-sm2 ===================================== 24-February-2005 (Boda Franek) Limitation on num of statess removed ------------------------------------ - class SMIObject (smiobject.hxx & cxx) State* _pState[MAXSTATES] replaced by Registrar _states - parameters.hxx a) definition of MAXSTATES removed b) MAXSUBOBJECTS is set to 1 Only associated objects have subobjects and at the moment only one dummy one. This is for some obscure historical reason I can not remember. NB. At various places in the code of smiobject.cxx, the fact, that there is at most one subobject was used. ================================= v25-sm3 ===================================== 11-March-2005 (Boda Franek) - smiobject.cxx to satisfy some compilers, return 0 inserted even thought the respective method is never called. === 11-March-2005:15:54 ========== v26 ================= 20-May-2005 (Boda Franek) New feature: stay_in_state -------------------------- It is possible to say: when (....) stay_in_state Successfull evaluation of the when will have an effect of aborting evaluation of the following whens without taking any action and so the behaviour will be the same like if none of the whens was successfull. The way it is implemented is that in the translator the string stay_in_state is treated like if it was 'do &NULL' and here in State Manager in DoIns::executeHp() method (file doins.cxx) whenever action name is &NULL, no action is queued. === 20-May-2005:15:58 ========== v27 ================= === 25-May-2005:12:04 ========== v27r1 ================= 23-Jun-2005 (Boda Franek) MAXPARA from parameters.hxx is non-functional (it is only used in assert instruction..must be a left over) and therefore removed changes in parameters.hxx, doins.cxx === 23-Jun-2005:11:08 ========= v27r1-sm1 ======================== 27-Jun-2005 (Boda Franek) Class State : private data Name _atribute[MAXATRIBUTES] replaced by NameVector _attributes; thus making the number of state attributes unlimited. Files: state.hxx * state.cxx === 27-Jun-2005:11:08 ========= v27r1-sm2 ========================== Class SMIObject : private date Name _attribute[MAXATRIBUTES] teplaced by NameVector _attributes; --> number of SMIObject attributes unlimited Files: smiobject.hxx & cxx, parameters.hxx (MAXATRIBUTES removed) === 27-Jun-2005:12:00 ========= v27r1-sm3 =========================== definition of MAXSTATESTRING removed from parameters.hxx...it is not used 28-Jun-2005 (Boda Franek) - ifhandler.cxx ... unnecessary usage of a local character array dimensioned to MAXOBJECTNAME removed. ObjectRegistrar class method gimePointer takes also Name as an argument. - scheduler.cxx ...unnecessary usage of a local character array dimensioned to MAXOBJECTNAME removed. ObjectRegistrar class method gimePointer takes also Name as an argument. Also Queue_Name class method remove takes Name as an argument. - smiobject.cxx ...unnecessary usage of a local character array dimensioned to MAXOBJECTNAME+6 removed.Method add of Queue_Name class takes also Name as an argument. === 28-Jun-2005:12:00 ========= v27r1-sm4 ==================================== - set_name.hxx & cxx ... new method elment(inx) that returns inxth element as Name - ifins.cxx ...unnacessary usage of a local character array 'obj' dimensioned to MAXOBJECTNAME removed. 'obj' is declared as Name and the new method of Set_Name class used - parameters.hxx MAXOBJECTNAME is now not referenced and therefore removed === 28-Jun-2005:16:00 ========= v27r1-sm5 ==================================== 01-Jul-2005 - ut_sm.cxx&hxx ... function subobjectState & strElement removed. They are not used any more - smiobject.hxx & cxx 1) ... method int SMIObject::currentState(int, State**) removed because nobody is using it 2) ... method int SMIObject::currentState( const char*, char* ) replaced by int SMIObject::currentState(Name&) this is because the 1st argument was subobject name and we do not have subobjects any more. Also the second argument (the state name) I want to be a Name type. - smpcondtyp1.cxx and smpcondtyp2.cxx ... using the new currentState method === 01-Jul-2005:15:00 ========= v27r1-sm6 ==================================== 04-Jul-2005 (Boda Franek) - smiclass.cxx & hxx privata char _name[MAXNAMESIZE] replaced by Name _name; 05-Jul-2005 (Boda Franek) - state_manager.cxx ... declaring new global variable SMIClassRegistrar allSMIClasses - initiator.cxx ... instead of creating SMIClassRegistrar on the heap, will use the one already created in state_manager.cxx 08-Jul-2005 (Boda Franek) -initiator.cxx ... function createAlloc...will use the global allSMIclasses object instead of the argument pointer === 08-Jul-2005:16:00 ========= v27r1-sm7 ==================================== -smiclass.hxx & cxx, initiator.cxx ...SMIClass is using the global allSMIClasses object - smiobject.hxx & cxx, initiator.cxx ... SMIObject class is using the global allSMIClasses object - smiobjectset.hxx & cxx, initiator.cxx ... SMIObjectSet class is using the global allSMIClasses object === 08-Jul-2005:17:00 ========= v27r1-sm8 ==================================== 11-Jul-2005 (Boda Franek) - Using Registrar class instead of SMIClassRegistrar -------------------------------------------------- The following files were affected: initiator.cxx smiclass.cxx state_manager.cxx & smiobject.cxx - smiobject.hxx _className changed from char string to Name === 11-Jul-2005:15:00 ========= v27r1-sm9 ==================================== === 14-July-2005:17:07 ========== v28 ================= 15-Aug-2005 (Clara Gaspar) commhandler.* ... bug fix 28-Sep-2005 (Boda Franek) scheduler.cxx, doins.cxx insertins.cxx ... some prints suspended for dbg < 3 === 28-September-2005:15:35 ========== v28r1 ================= 28-Sep-2005 (Boda Franek) - termins.* class TermIns ... private _endState changed from char string type to Name - End State of an instruction will be returned as type Name rather then char string --------------------------------------------------------------------------------- The reason is that if it is returned as a string a fixed space has to be reserved for it. The class Instruction (instruction.hxx) has the declaration of execute method changed. Because all the instructions inherit from it they all have to change this declaration even if they do not set the endstate. These are: DoIns (doins.*), InsertIns (insertins.*) and SetIns (setins.*). TermIns (termins.*) and IfIns (ifins.*) are the only instructions that can end in a new state and require some mods. At this stage I decided to return string from InsList (inslist.*) as before. However the class now has to take into account that the instructions are returning Name. === 28-September-2005:17:40 ========== v28r1-sm1 ================= 29-Sep-2005 (Boda Franek) - End State of an instruction list will be returned as type Name rather then char string --------------------------------------------------------------------------------------- Instruction list (class InsList) is used by IfIns class and Action class. Therefore changes to inslist.*, ifins.cxx and action.cxx === 29-September-2005:15:25 ========== v28r1-sm2 ================= 30-Sep-2005 (Boda Franek) - End State of an action will be returned as type Name rather then char string ----------------------------------------------------------------------------- Action class is used by State class. Therefore changes to action.* & state.cxx === 30-September-2005:13:55 ========== v28r1-sm3 ================= - End State of a state will be returned as type Name rather then char string ----------------------------------------------------------------------------- This is the end of End State saga State class is used by SMIObject class. Therefore changes to state.* & smiobject.cxx === 30-September-2005:14:25 ========== v28r1-sm4 ================= - removing the remaining usage of MAXNAMESIZE parameter ----------------------------------------------------- action.* ... the method name which uses MAXNAMESIZE is not used by anybody and therefore deleted commhandler.cxx ... MAXNAMESIZE used in commented-out section of the code this section was therefore deleted. smiclassregistrar.* removed. The class was made obsolete. See 11-Jul-2005 smiobject.cxx ...the main change is removal of an obsolete method subobjectName(int, char*) action.* constructor returns action name as Name type rather than char string. state.cxx ... takes the above into account obsolete method action(int, char*) removed parameters.hxx MAXNAMESIZE removed === 30-September-2005:16:10 ========== v28r1-sm5 ================= 4-Oct-2005 (Boda Franek) Removing remaing 'fixed' declarations ------------------------------------- I have ran the following command: grep '\[.*\] *[\[,;]' * > badDeclarationx.txt and visualy inspected the result. The following files were identified as containing bad declarations: action.cxx, condition.cxx, condition.hxx, doins.cxx, ifhandler.hxx, initiator.cxx, ifins.hxx, setins.cxx, smiclass.cxx, smiobject.cxx & state.cxx The offending lines in badDeclarations.txt are marked by *- at the begining NB I have ignored declarations with well defined fixed size such as char type[7] 5-Oct-2005 (Boda Franek) ifins.* private data InsList *_pblocks[100]; Condition *_pCondition[100] replaced by PtrVector _insLists; PtrVector _conditions; === 05-October-2005:12:10 ========== v28r1-sm6 ================= === 06-October-2005:15:38 ========== v29 ================= 11-Jan-2006 (Boda Franek) Removed the limitations on the number of Instruction Blocks of an action ------------------------------------------------------------------------ ifIns.hxx, ifIns.cxx ... 1) Argument InsList** pAllBlocks replaced by PtrVector& allBlocks 2) argument int *no_lines replaced by int& no_lines 3) whatAreYou method improved inslist.hxx & cxx ... 1) Argument InsList** pblocks replaced by PtrVector& allBlocks 2) argument int *no_lines replaced by int& no_lines action.cxx ... InsList *pblocks[maxInsBlocks] replaced by PtrVector allBlocks === 11-January-2006:14:10 =========== v29-sm1=============================== 12-Jan-2006 (Boda Franek) condition.hxx & cxx ... SmpCond* _pSmpCond[_maxSmpCond] replaced by PtrVector _smpConditions; === 20-January-2006:11:40 =========== v29-sm2=============================== 20-Jan-2006 (Boda Franek) condition.hxx & cxx Internal int smpflags[_maxSmpCond] replaced by vector smpflags; === 20-January-2006:14:46 ========== v29r1 ================= 31-Mar-2006 (Boda Franek) smiobject.hxx & cxx new method : bool hasAssociatedAttribute() const smiobject.cxx ... ASSOCIATED attribute for is_of_class is taken only from the class state_manager.cxx ... some debug prints added and are commented out === 31-March-2006:17:27 ========== v30 ================= 19-May-2006 (Boda Franek) - Changes to IfHandler class -------------------------- a) private data Name int _numOfObjects; _objNames[100]; SetName* _pTobeLocked[100]; replaced by NmdPtnrList _suspendedObjects; holding the same info b) 2 new private methods int findRequester and int findFreeToResumeObject c) method bool isEmpty() removed as it is not used by anyone d) arguments of public method addSet and objectLocked rationalised Files affected: ifhandler.hxx, ifhandler.cxx, ifins.cxx and smiobject.cxx - state.cxx eliminated the usage of temporary string char actionstr_out[256] This concludes the dynamisation campaign that started some time ago. There are two outstanding things that should get attention some time in future: 1) the finate dimension of the input record and the associated MAXRECL parameter 2) initiator should be probably redesigned. === 19-May-2006:20:34 ========== v31 ================= 21-May-2006 (Boda Franek) ifhandler.cxx .. various diagnostic prints conditioned on dbg> 5 === 21-May-2006:21:01 ========== v31r1 ================= 16-May-2007 (Boda Franek) Making State Manager to accept spaces in string parameter values ---------------------------------------------------------------- - action.cxx when reading the default parameters, 'strpcy' used instead of 'sscanf' sscanf treats the space as delimiter - doins.cxx when reading the values of parameters, same as above 23-May-2007 (Boda Franek) Making State Manager to accept = in string parameter values ----------------------------------------------------------- (even when not enclosed in doublequotes) - parms.cxx uses new method in Name class subString 24-Jul-2007 (Clara Gaspar) - commandhandler.cxx method setDnsNode now also accept port number === 25-July-2007:14:58 ========== v32 ================= === 07-August-2007:11:55 ========== v32r1 ================= === 25-August-2007:13:31 ========== v32r2 ================= 28-Sep-2007 (Boda Franek) - commandhandler.cxx obsolete definition of MAX_BUFFER removed === 28-September-2007:15:29 ========== v32r3 ================= === 07-October-2007:16:50 ========== v32r4 =================