Aus Kompatibilitätsgründen wird noch die hier beschriebene alte Unterprogramm-Schnittstelle unterstützt.
Die neue Unterprogramm-Schnittstelle ist in [1] beschrieben.
Wird LMS als Unterprogramm mit eigenständiger Dialogführung aufgerufen, kehrt es nach der Verarbeitung von END zum aufrufenden Programm zurück. LMS bleibt nach der Verarbeitung von END geladen. Ansonsten ist der Ablauf wie nach dem Laden mit dem Kommando /START-EXECUTABLE-PROGRAM. Bei jedem Aufruf von LMS meldet LMS eine eigene STXIT-Routine an.
Beim Rücksprung in das Hauptprogramm wird die LMS-STXIT-Routine abgemeldet; das Hauptprogramm muss seine eigene STXIT-Routine wieder anmelden.
Beim Aufruf der Unterprogramm-Schnittstelle sind folgende Registerkonventionen zu beachten:
Register 1 Register 13 | muss Null sein. enthält die Adresse eines Sicherstellungsbereichs von 18 Worten, der |
Register 14 Register 15 | enthält die Rücksprungadresse. enthält die Einsprungadresse LMSUPSDF. |
Vor dem Rücksprung in das rufende Programm hinterlegt LMS im Register 15 folgende Rücksprungcodes:
X'00' X'04' | LMS wurde normal beendet LMS wurde abnormal beendet |
Beispiel
Aus dem Programm UPROG wird LMS als Unterprogramm aufgerufen. In LMS wird ein Element aus einer Programmbibliothek in eine Datei ausgegeben. Nach Beenden des LMS-Laufs wird ins Benutzerprogramm zurückgesprungen.
/START-LMS //OPEN UEB.BIB,U ------------------------------------------------------------------ (1) //SHOW-ELEM *LIB(,LMSCALL,S) ------------------------------------------------------ (2) INPUT LIBRARY= :N:$USER.UEB.BIB,DEV=DISK INPUT ELEMENT= (S)LMSCALL/(0001)/1995-08-12 UPROG START BALR 3,0 USING *,3 MVC OUTPUT,ANMELD AUFRUF WROUT OUT,TERM LA 14,RUECK ----------------------------------------------------------- (3) LA 1,0 ---------------------------------------------------------------- (4) LA 13,SAVE ------------------------------------------------------------ (5) L 15,=V(LMSUPSDF) ---------------------------------------------------- (6) BALR 14,15 RUECK MVC OUTPUT,ABMELD WROUT OUT,TERM * * TERM TERM * * SAVE DS 18F * ANMELD DC '********** *LMS WIRD JETZT AUFGERUFEN ************' ABMELD DC '***** LMS WURDE BEENDET - WEITER IM PROGRAMM *****' OUT DC Y(ENDE-OUT) DS CL2 DC X'01' OUTPUT DS CL50 ENDE EQU * * * END UPROG NUMBER OF PROCESSED RECORDS IS 29 //END / . . . /START-EXECUTABLE-PROGRAM FROM-FILE=(LIB=UEB.BIB,ELEM=LMSCALL) % BLS0500 PROGRAM 'LMSCALL', VERSION '007' OF '95-08-12' LOADED ********** *LMS WIRD JETZT AUFGERUFEN ************
% LMS0310 LMS VERSION ́03.4B00 ́ STARTED ----------------------------------------- (7) //OPEN UEB.BIB,U //SHOW-E-ATTR INPUT LIBRARY= :N:$USER.UEB.BIB,DEV=DISK TYP NAME VER (VAR#) DATE (C) LMSCALL 007 (0001) 1995-08-12 1 (C)-ELEMENT(S) IN THIS TABLE OF CONTENTS //EXTRACT-ELEM *LIB(,LMSCALL,S),LMSCALL1 INPUT LIBRARY= :N:$USER.UEB.BIB,DUF2EV=DISK OUTPUT FILE SEL (S)LMSCALL/(0001)/1995-08-12 AS LMSCALL1 //END ---------------------------------------------------------------------------- (8) ***** LMS WURDE BEENDET - WEITER IM PROGRAMM *****
(1) | Die Programmbibliothek UEB.BIB wird als Ein- und Ausgabebibliothek zugewiesen. |
(2) | Das Quellprogramm LMSCALL wird aufgelistet. |
(3) | Die Rücksprungadresse wird nach Register 14 geladen. |
(4) | Register 1 wird auf 0 gesetzt. |
(5) | Die Adresse des Sicherstellungsbereiches wird nach Register 13 geladen. |
(6) | Die Einsprungadresse LMSUPSDF wird nach Register 15 geladen. |
(7) | Aus dem Benutzerprogramm heraus wird LMS aufgerufen. |
(8) | Nach Beenden des LMS-Laufes wird ins Benutzerprogramm zurückgesprungen. |