S-Variablenersetzung bei der Eingabe geschieht immer automatisch durch die Dienste der Dialogschnittstelle SDF (siehe [3]), die von LMS für alle Eingaben genutzt wird.
LMS unterstützt die Ausgabe ausgewählter Daten in S-Variable. Es werden stets Listen von Strukturen erzeugt (siehe [12]). Die Ausgabe in S-Variable ist bei den unterstützten Anweisungen lokal durch den Operanden STRUCTURE-OUTPUT= zusätzlich zum (unabhängig vom) Ausgabestrom schaltbar.
Mit folgenden Anweisungen können Informationen in S-Variable ausgegeben werden:
COMPARE-ELEMENT
FIND-ELEMENT
SHOW-ELEMENT-ATTRIBUTES
SHOW-LIBRARY-ATTRIBUTES
SHOW-STATISTICS
SHOW-TYPE-ATTRIBUTES
Die Variable muss wie folgt deklariert werden:
/DECL-VAR varname(TYPE=*STRUC),MULT-ELEM=*LIST
"varname" ist ein frei wählbarer Name. Die Variablenausgabe kann auch über den Strom SYSINF erfolgen. Dazu muss vor der Anweisung, die die Variable erzeugen soll, das Kommando /ASSIGN-STREAM STREAM=SYSINF,TO=*VAR(varname) ausgeführt werden.
Mit dem Kommando /ASSIGN-STREAM STREAM=SYSINF,TO=*DUMMY wird die Erzeugung von Variablen wieder gestoppt. LMS prüft intern die SYSINF-Zuordnung, falls STRUCTURE-OUTPUT=*SYSINF, und erzeugt aus Performancegründen nur dann Ausgaben in den SYSINF-Strom, wenn die SYSINF-Zuordnung (direkt oder über SYSVAR) ungleich *DUMMY ist.
Unterstützung von MIP-Variablen
Ausgewählte LMS-Meldungen können in MIP-Variable (MIP = Message Improvement Program) abgelegt werden. MIP-Variable sind S-Variable, in die das Produkt MIP Meldungen ablegt. Die MIP-Variablen können in S-Prozeduren zur Steuerung des weiteren Ablaufs ausgewertet werden. Für MIP-Variable sind folgende Meldungen vorgesehen:
LMS0302 ELEMENT (&00) NICHT GEFUNDEN
(&00): Elementbezeichnung der Form
*LIB-ELEM(library,element(version),type)
LMS0303 ELEMENT (&00) NICHT IM BEREICH DER REFERENZ-BEDINGUNG
(&00): Elementbezeichnung (Format siehe LMS0302)
LMS0310 LMS VERSION '(&00)' GESTARTET
(&00): LMS Version der Form zz.zbzz z=Ziffer, b=Buchstabe
LMS0311 LMS VERSION '(&00)' NORMAL BEENDET
(&00): LMS Version (Format siehe LMS0310)
LMS0312 LMS VERSION '(&00)' ABNORMAL BEENDET
(&00): LMS Version (Format siehe LMS0310)
Diese Meldungen sind in der Meldungsdatei mit dem Attribut WARRANTY=*YES gekennzeichnet. Die Garantie bezieht sich nur auf den Meldungsschlüssel und die Inserts, jedoch nicht auf den Meldungstext.
Der Anwender muss folgende Aktivitäten ausführen, um die MIP-Variable in LMS nutzen zu können :
Die MIP-Variable muss wie folgt deklariert werden:
/DECL-VAR varname(TYPE=*STRUC),MULT-ELEM=*LIST"varname" ist ein frei wählbarer Name. Mit der obigen Deklaration wird eine Liste von Strukturen vereinbart. Jedes Listenelement stellt den Behälter für genau eine Meldung dar und hat die Form (z.B. i-tes Listenelement):
varname#i.MSG-TEXTvollständiger
Meldungstext
varname#i.MSG-IDMeldungschlüssel
varname#i.I0Insert0
:
varname#i.InInsertnDie Anzahl der Inserts hängt von der Meldung ab.
Mit dem Kommando
/ASSIGN-STREAM STREAM=SYSMSG,TO=*VAR(VAR-NAME=varname)wird das Speichern der Meldungen in die MIP-Variable gestartet und mit dem Kommando
/ASSIGN-STREAM STREAM=SYSMSG,TO=*DUMMYwieder gestoppt. Alle dazwischen ausgeführten Kommandos und Anweisungen (nicht nur die von LMS) speichern ihre garantierten Meldungen in die MIP-Variable.
Beispiele
Es soll festgestellt werden, ob die Bibliothek LIB leer ist. In dem Fall gibt LMS die Meldung LMS0302 aus. Die Variable soll LMSMIP heißen.
/DECL-VAR LMSMIP(TYPE=*STRUC),MULT-ELEM=*LIST /START-LMS //HOLD-PROGRAM /ASSIGN-STREAM SYSMSG,TO=*VAR(LMSMIP) /RESUME-PROGRAM //SHOW-ELEM-ATTR *LIB(LIB),TEXT-OUTPUT=*NONE //HOLD-PROGRAM /ASSIGN-STREAM SYSMSG,TO=*DUMMY /IF (IS-DECLARED('LMSMIP#1.MSG-ID')) / IF (LMSMIP#1.MSG-ID='LMS0302') / WRITE-TEXT 'Bibliothek leer' / END-IF /END-IF /RESUME-PROGRAM : :Nicht garantierte LMS-Meldungen können mit Hilfe der SDF-P Built-in Funktion STMT-SPINOFF [12] abgefangen werden.
/ASSIGN-SYSDTA TO=*SYSCMD /BEGIN-BLOCK DATA-INSERTION=YES /START-LMS //OPEN-LIB XXX /A=STMT-SPINOFF() //STEP /IF (A EQ 'YES') // WRITE-COM 'OPEN FEHLER' /ELSE // SHOW-ELEM-ATTR /END-IF //END /END-BLOCK