ETHZ_Logo RAMSES_Logo_Right   RAMSES   RAMSES_Logo_Left Systems Ecology  
Start    search button      Modules:   A-Z   Function   Layer        QuickRefs:   DM   AuxLib   AuxLibE   SciLib   EasyMW   MW   ISIS   RMSLib

DEFINITION MODULE SysMsgLingua;

  (*******************************************************************

    Module  SysMsgLingua     (ISIS_Version_1.2)

      Copyright (c) 1998-2006 by Andreas Fischlin and ETH Zurich.

    Purpose   Message Language for exchanging messages between
              a master system and its subsystems.

    Remarks   The System Message Language (SML) has the following EBNF:

              message     ::= [valueDef] { ";" valueDef }.
              valueDef    ::= identifier "=" value.
              value       ::= integer | real | boolean | identifier | string.
              integer     ::= digit {digit}.
              digit       ::= "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9".
              real        ::= digit {digit} ["." {digit}] [scalefactor].
              scalefactor ::= ("E"|"e") ["+"|"-"] digit {digit}.
              boolean     ::= "TRUE"|"FALSE".
              identifier  ::= letter {letter|digit}.
              string      ::= '"' {character} '"' | "'" {character} "'".

              Example:

              Declare variables by

                 DeclareValDefName('anInt',integnum);
                 DeclareValDefName('anIdentifier',identstring);
                 DeclareValDefName('areal',realnum);
                 DeclareValDefName('str',charstring);

              Then after receiving a message like

                 msg := "anInt = 2; anIdentifier = siteName; areal = 1.2E-2; str = 'just a string'"

              extract from it 'areal' by

                 x := RealFrom(msg,'areal');

              and a string by

                 GetStrFrom(msg,'str',theString);

              This module belongs to ISIS
              Integrative Systems Implementation Software.


    Programming

      o Design
        Andreas Fischlin         07/05/1998

      o Implementation
        Andreas Fischlin         07/05/1998


    ETH Zurich
    Systems Ecology
    CHN E 35.1
    Universitaetstrasse 16
    8092 Zurich
    SWITZERLAND

    URLs:
        <mailto:RAMSES@env.ethz.ch>
        <http://www.sysecol.ethz.ch>
        <http://www.sysecol.ethz.ch/SimSoftware/RAMSES>


    Last revision of definition:  02/07/1998  AF

  *******************************************************************)


  (* Error constants: SysMsgLinguaOffSet = DMLanguage.userBase + 401 .. 420-1 *)

  VAR
    bulletinBoard: ARRAY [0..2048] OF CHAR;

  (*
    The following easy to use routines declare implicitely a
    value definition with name 'name' (if not already declared
    previously, calls IsValDefNameDeclared plus
    DeclareValDefName if necessary) and add the value definition
    to the message 'msg' (calls a SetXYZIn procedure).  In case
    the value definition is already present in 'msg', its old
    associated value is first deleted and the new value
    definition appended at the end of the message.  Any other
    value definitions possibly present in 'msg' are left
    untouched.
  *)
  PROCEDURE PublishInt  ( VAR msg: ARRAY OF CHAR; name: ARRAY OF CHAR; int: INTEGER);
  PROCEDURE PublishLInt ( VAR msg: ARRAY OF CHAR; name: ARRAY OF CHAR; lint: LONGINT);
  PROCEDURE PublishReal ( VAR msg: ARRAY OF CHAR; name: ARRAY OF CHAR; real: REAL);
  PROCEDURE PublishLReal( VAR msg: ARRAY OF CHAR; name: ARRAY OF CHAR; lreal: LONGREAL);
  PROCEDURE PublishBool ( VAR msg: ARRAY OF CHAR; name: ARRAY OF CHAR; b: BOOLEAN);
  PROCEDURE PublishId   ( VAR msg: ARRAY OF CHAR; name, ident: ARRAY OF CHAR);
  PROCEDURE PublishStr  ( VAR msg: ARRAY OF CHAR; name, string: ARRAY OF CHAR);

  TYPE
    ValueDefType = (integnum, realnum, boolvar, identstring, charstring);

  PROCEDURE DeclareValDefName(name: ARRAY OF CHAR; type: ValueDefType);
  PROCEDURE IsValDefNameDeclared(name: ARRAY OF CHAR): BOOLEAN;
  PROCEDURE DiscardValDefName(name: ARRAY OF CHAR);

  (*
    The following routines allow to retrieve a specific value
    definition and its associated actual value from the message
    'msg'.  They assume that the value definition with name
    'name' has been previously declared, otherwise the routines
    fail.
  *)
  PROCEDURE IntFrom   (VAR(*speed-up*) msg: ARRAY OF CHAR; name: ARRAY OF CHAR): INTEGER;
  PROCEDURE LIntFrom  (VAR(*speed-up*) msg: ARRAY OF CHAR; name: ARRAY OF CHAR): LONGINT;
  PROCEDURE RealFrom  (VAR(*speed-up*) msg: ARRAY OF CHAR; name: ARRAY OF CHAR): REAL;
  PROCEDURE LRealFrom (VAR(*speed-up*) msg: ARRAY OF CHAR; name: ARRAY OF CHAR): LONGREAL;
  PROCEDURE BoolFrom  (VAR(*speed-up*) msg: ARRAY OF CHAR; name: ARRAY OF CHAR): BOOLEAN;
  PROCEDURE GetIdFrom (VAR(*speed-up*) msg: ARRAY OF CHAR; name: ARRAY OF CHAR;
                       VAR ident: ARRAY OF CHAR);
  PROCEDURE GetStrFrom(VAR(*speed-up*) msg: ARRAY OF CHAR; name: ARRAY OF CHAR;
                       VAR string: ARRAY OF CHAR);
  PROCEDURE IsValDefInMessage(VAR (*speed-up*) msg: ARRAY OF CHAR; name: ARRAY OF CHAR): BOOLEAN;

  (*
    The following routines replace a previously declared value
    definition if it's already contained in msg or else append
    it to the existing message.  They assume that the value
    definition with name 'name' has been previously declared,
    otherwise the routines fail.
  *)
  PROCEDURE SetIntIn  ( VAR msg: ARRAY OF CHAR; name: ARRAY OF CHAR; int: INTEGER);
  PROCEDURE SetLIntIn ( VAR msg: ARRAY OF CHAR; name: ARRAY OF CHAR; lint: LONGINT);
  PROCEDURE SetRealIn ( VAR msg: ARRAY OF CHAR; name: ARRAY OF CHAR; real: REAL);
  PROCEDURE SetLRealIn( VAR msg: ARRAY OF CHAR; name: ARRAY OF CHAR; lreal: LONGREAL);
  PROCEDURE SetBoolIn ( VAR msg: ARRAY OF CHAR; name: ARRAY OF CHAR; b: BOOLEAN);
  PROCEDURE SetIdIn   ( VAR msg: ARRAY OF CHAR; name, ident: ARRAY OF CHAR);
  PROCEDURE SetStrIn  ( VAR msg: ARRAY OF CHAR; name, string: ARRAY OF CHAR);


END SysMsgLingua.

  Contact RAMSES@env.ethz.ch Last updated: 25-Jul-2011 [Top of page]