Beim S-Typ werden die im Makroaufruf angegebenen Operandenwerte in Form eines Datenbereichs an den Funktionsbaustein übergeben. Der Datenbereich ist Teil der Makroauflösung. Er erhält die für die Übergabe der Operandenwerte notwendigen Daten- und Speicherdefinitionen (DC- und DS-Anweisungen).
Der S-Typ unterstützt die Angabe des Operanden MF (siehe "S-Typ-Makroaufrufe"). In Abhängigkeit von der Funktionalität der verschiedenen Makros sind mehrere Arten der Darstellung von MF möglich. Es werden drei MF-Formate unterschieden:
Tabelle 2: MF-Formate für die S-Typ-Makroaufrufe
Im Folgenden sind alle drei MF-Formate ausführlich dargestellt. An die Formatdarstellungen schließt sich die Beschreibung der Operanden und Operandenwerte an.
Es folgen Beispiele für Makroaufrufe in der S-, D-, E-, M- und L-Form.
Die verschiedenen Formen werden ab "S-Typ-Makroaufrufe" beschrieben.
MF-Format 1
|
|
Die explizite Angabe der Standardform mit MF=S ist für die meisten Makros im
MF-Format 1 nicht erlaubt. Ausnahmen werden beim jeweiligen Makro kenntlich gemacht. (Siehe auch Operandenbeschreibung zu MF=S, "S-Typ-Makroaufrufe")
Bei der 24-Bit-Schnittstelle ist i.a. die Präfix-Schreibweise (z.B. (C,pre)) bei der C-/D-/L-Form nicht erlaubt. Ausnahmen werden beim jeweiligen Makro kenntlich gemacht.
MF-Format 2
|
|
MF-Format 3
|
|
opadr
Assembler-Name; bezeichnet bei MF=L die Adresse des Datenbereichs, sonst wahlfrei. opadr kann bei MF=(E,adr) oder MF=M,PARAM= zur Adressierung des Datenbereichs verwendet werden.
op1,...,opn
stellen anzugebende Funktionsoperanden dar.
PARMOD=
steuert die Makroauflösung. Es wird entweder die 24-Bit-Schnittstelle oder die 31-Bit-Schnittstelle generiert.
24
Die 24-Bit-Schnittstelle wird generiert. Datenbereiche und Befehle benutzen 24-Bit-Adressen (Adressraum <= 16 MB).
31
Die 31-Bit-Schnittstelle wird generiert. Datenbereiche und Befehle benutzen 31-Bit-Adressen (Adressraum <= 2 GB). Datenbereiche beginnen mit dem Standardheader.
MF=
bestimmt die Art der Makrogenerierung. In Abhängigkeit von den Operandenwerten für MF unterscheidet man sieben Formen des Makroaufrufs:
S (Standardform: ist Voreinstellung bei MF-Format 1 und 2):
Die Angabe dieses Operandenwertes ist bei Format 3 nicht erlaubt.
Für die meisten Makros im MF-Format 1 darf MF=S nicht explizit angegeben werden, d.h. die Auswahl der Standardform erfolgt durch Weglassen des MF-Operanden. Im Aufrufformat des betreffenden Makros wird MF=S nicht dargestellt.
Bei Makros, die die explizite Angabe von MF=S unterstützen, wird MF=S auch im Aufrufformat dargestellt.
Es werden zuerst der Befehlsteil und anschließend der Datenbereich generiert, unter Beachtung der im Makroaufruf angegebenen Operandenwerte. Der Datenbereich enthält keine Feldnamen und keine erläuternden Equates. Der Standardheader ist initialisiert.
C (C-Form)
Es wird nur der Datenbereich generiert. Jedes Feld hat einen Feldnamen und erläuternde Equates, falls erforderlich. Der Datenbereich wird durch ein Längenequate beendet. Der Standardheader muss i.d.R. vom Anwender initialisiert werden.
(C,pre)
Diese Angabe ist nur bei Format 1 erlaubt. Die ersten Zeichen der Feldnamen und Equates können vom Anwender durch Angabe eines Präfix pre bestimmt werden.
pre = 1..4 Zeichen.
C [,PREFIX=p][,MACID=mac]
Diese Angabe ist nur bei MF-Format 2 und 3 erlaubt. Mit dem Operanden PREFIX kann der Anwender das erste Zeichen der Feldnamen und Equates bestimmen.
p = 1 Buchstabe.
Mit dem Operanden MACID kann der Anwender das zweite, dritte und vierte Zeichen der Feldnamen und Equates bestimmen.
mac = 1..3 Zeichen.
Weitere Operanden werden in der C-Form nicht ausgewertet.
D (D-Form)
Es wird eine DSECT generiert. Jedes Feld hat einen Feldnamen und erläuternde Equates, falls erforderlich. Die DSECT wird durch ein Längenequate beendet. Es wird nicht auf den anfänglichen Adresspegel umgeschaltet.
Die DSECT beschreibt die Struktur eines Speicherbereiches, ohne selbst Speicherplatz zu belegen. Der bei DSECT angegebene symbolische Name wird in einen ESD-Satz (External Symbol Dictionary-Satz) eingetragen. Der Adresspegel wird auf Null gesetzt.
(D,pre)
Diese Angabe ist nur bei MF-Format 1 erlaubt. Die ersten Zeichen der Feldnamen und Equates können vom Anwender durch Angabe eines Präfix pre bestimmt werden.
pre = 1..4 Zeichen.
D [,PREFIX=p]
Diese Angabe ist nur bei MF-Format 2 und 3 erlaubt. Mit dem Präfix p kann der Anwender das erste Zeichen der Feldnamen und Equates bestimmen. p = 1 Buchstabe.
Weitere Operanden werden in der D-Form nicht ausgewertet.
L (L-Form)
Es wird nur der Datenbereich generiert, unter Beachtung der im Makroaufruf angegebenen Operandenwerte. Der Datenbereich enthält keine Feldnamen und keine erläuternden Equates. Der Standardheader ist initialisiert. Der Makroaufruf wird im Definitionsteil des Programms abgesetzt.
Bei Shared-Code-Programmierung darf dieser Aufruf nicht im invarianten Programmteil liegen, wenn er variable Daten enthält. Der Datenbereich wird im invarianten Programmteil mit konstanten Werten initialisiert, vor dem E-Form-Aufruf in einen ablauflokalen Datenbereich kopiert und dort ggf. modifiziert. Die Modifizierung wird z.B. mit der M-Form realisiert, falls sie für die betreffende Schnittstelle angeboten wird.
E (E-Form)
Es werden nur die zum Aufruf des Funktionsbausteins notwendigen Befehle generiert. Der Befehlsteil endet i.d.R. mit einem SVC. Im Makroaufruf muss die Adresse des Datenbereichs mit den Operandenwerten angegeben sein.
(E,adr) / (E,(r))
Diese Angabe ist nur bei MF-Format 1 erlaubt.
adr = Assembler-Name (Adresse des Datenbereichs).
r = Register, das die Adresse des Datenbereichs enthält. Vor dem Makroaufruf muss das Register mit diesem Adresswert geladen werden.
E [,PARAM=adr / (r)]
E [,PARAM=<var: pointer> / (<reg: pointer>)]
Der Operand PARAM bezeichnet die Adresse des Datenbereichs. Diese Angabe ist nur bei MF-Format 2 und 3 erlaubt.
adr / <var: pointer> = Assembler-Name (Adresse des Datenbereichs).
r / (<reg: pointer>) = Register, das die Adresse des Datenbereichs enthält. Vor dem Makroaufruf muss das Register mit diesem Adresswert geladen werden.
Wenn nicht anders angegeben, ist die Voreinstellung: PARAM = (1)
Weitere Operanden werden in der E-Form nicht ausgewertet.
M (M-Form)
Die Angabe dieses Operandenwertes ist nur bei MF-Format 2 und 3 erlaubt.
Es werden Befehle (z.B. MVCs) generiert, die während des Programmlaufs in einem mit MF=L bereits initialisierten Datenbereich bzw. bei Shared-Code-Programmierung in einer ablauflokalen Kopie des mit MF=L initialisierten Datenbereichs Felder mit den Operandenwerten überschreiben, die im Makroaufruf angegeben werden. Damit bietet die M-Form eine komfortable Möglichkeit, die Operandenwerte, mit denen ein Makro aufgerufen wird, dynamisch dem Programmlauf anzupassen.
Bei MF=M werden für Funktionsoperanden keine Standardwerte angenommen, d.h. alle Operanden müssen explizit angegeben werden.
Da die bei MF=M generierten Befehle die symbolischen Adressen und Equates der C-Form oder der D-Form benutzen, ist bei der Verwendung der M-Form sicherzustellen, dass diese Namen für die Adressierung des zu modifizierenden Datenbereichs zur Verfügung stehen. Insbesondere ist darauf zu achten, dass bei einem Makroaufruf mit MF=M ggf. die Operanden PREFIX und MACID mit den gleichen Werten angegeben werden wie im zugehörigen MF=C- bzw. MF=D-Aufruf.
M [,PREFIX=p][,MACID=mac]
Mit dem Operanden PREFIX kann der Anwender das erste Zeichen der Feldnamen und Equates bestimmen. p = 1 Buchstabe.
Mit dem Operanden MACID kann der Anwender das zweite, dritte und vierte Zeichen der Feldnamen und Equates bestimmen. mac = 1..3 Zeichen.
M [,PARAM=adr / (r)]M [,PARAM=<var: pointer> / (<reg: pointer>)]
Der Operand PARAM bezeichnet die Adresse des Datenbereichs. Diese Angabe ist nur bei MF-Format 2 erlaubt.
adr / <var: pointer> = Assembler-Name (Adresse des Datenbereichs).
r / (<reg: pointer>) = Register, das die Adresse des Datenbereichs enthält. Vor dem Makroaufruf muss das Register mit diesem Adresswert geladen werden.
Voreinstellung: PARAM = (1)
R (R-Form)
Die Angabe dieses Operandenwertes ist nur bei MF-Format 3 erlaubt.
Es werden die durch Funktionsoperanden angegebenen Operandenwerte (von Ausgabeparametern) aus dem Datenbereich gelesen und in Variablen des Anwenderprogramms abgespeichert.
Da die dafür generierten Befehle die symbolischen Adressen und Equates der C-Form oder der D-Form benutzen, ist bei der Verwendung der R-Form sicherzustellen, dass diese Namen für die Adressierung des zu modifizierenden Datenbereichs zur Verfügung stehen. Insbesondere ist darauf zu achten, dass bei einem Makroaufruf mit MF=R ggf. die Operanden PREFIX und MACID mit den gleichen Werten angegeben werden wie im zugehörigen MF=C- bzw. MF=D-Aufruf.
R [,PREFIX=p][,MACID=mac]
Mit dem Operanden PREFIX kann der Anwender das erste Zeichen der Feldnamen und Equates bestimmen.
p = 1 Buchstabe.
Mit dem Operanden MACID kann der Anwender das zweite, dritte und vierte Zeichen der Feldnamen und Equates bestimmen.
mac = 1..3 Zeichen.
Beispiel 1: RDATA-Makroaufruf (MF-Format 1) mit S-Form (Standardform)
RDATA1 START LDBASE R3,0 1 *,MACRO: LDBASE, VERSION: VER021 021 1 ##BALR R3,0 020 2 BASR R3,0 012 USING *,R3 RDATA1 AMODE ANY RDATA1 RMODE ANY GPARMOD 31 1 *,MACRO: GPARMOD, VERSION: VER121 PRINT GEN RDATA INAREA,STOP --------------------------------------------(1) 1 ##SPASS S0004S,S0004D A312 2 CNOP 0,4 2 BAS 1,S0004S ADDRESS AND SKIP PARAMS 1 S0004D DS 0F A340 1 FHDR UNIT=36,FUNCT=18,VERS=2 2 DS 0A 2 DS 0XL8 GENERAL OPERAND LIST HEADER 2 DC AL2(36) FUNCTION UNIT NUMBER 2 DC AL1(18) FUNCTION NUMBER 2 DC AL1(2) FUNCTION INTERFACE VERSION NUMBER 2 DC X'FFFFFFFF' Returncode is virgin 1 * 1 DC A(STOP) ERROR ADDRESS 1 DC AL4(INAREA) READ IN AREA ADDRESS 1 DS AL1(0) PLACE FOR I.EDIT BYTE 1 1 DS AL1(0) PLACE FOR I.EDIT BYTE 2 1 DC AL1(0) SYSDTA ASSIGNMENT 1 DC AL1(0) FLAG BYTE 1 1 DC AL2(L'INAREA) LENGTH OF READ 1 DC AL1(0) FLAG TABLE BYTE 1 DC AL1(0) ASSIGNMENT CHANGE INDICATOR 1 DC H'0' KEY-POSITION 1 DC H'0' KEY-LENGTH 1 DC AL4(0) VTSUCB ADDRESS 1 DC AL2(0) INPUT TIMER VALUE 009 1 DC H'0' RES_FOR_TIAM 007 1 * 1 @DCEI DCEDIT=,MODE=,IGETFC=,ICFD=, C 1 ITRSUP=,ILINEND=,IGETBS=, C 1 IMANUAL=,ILCASE=,IHDR=, C 1 IGETIC=,RDA1=-20,RDA2=-19 2 ORG *-20 2 DC AL1(0) 2 ORG *+20-1
2 ORG *-19 2 DC AL1(0) 2 ORG *+19-1 2 *,@DCEI 999 921011 53531002 1 S0004S DS 0Y A340 1 SVC 39 SYSFILE SVC 1 * PRINT NOGEN STOP TERM * INAREA DS CL104 R3 EQU 3 END
(1) | Beim Makro RDATA ist die Standardform Voreinstellung. Die Auswahl der Standardform erfolgt durch Weglassen des MF-Operanden. Alle benötigten Operanden müssen angegeben werden. Es wird der Befehlsteil und der Datenbereich generiert. |
Beispiel 2: RDATA-Makroaufruf (MF-Format 1) mit E- und L-Form
RDATA2 START LDBASE R3,0 1 *,MACRO: LDBASE, VERSION: VER021 021 1 ##BALR R3,0 020 2 BASR R3,0 012 USING *,R3 RDATA2 AMODE ANY RDATA2 RMODE ANY GPARMOD 31 1 *,MACRO: GPARMOD, VERSION: VER121 PRINT GEN RDATA MF=(E,PARLIST) -----------------------------------------(1) 1 LA 1,PARLIST LOAD ADDR PARAM LIST INTO R1 1 SVC 39 SYSFILE SVC 1 * PRINT NOGEN STOP TERM * INAREA DS CL104 PRINT GEN PARLIST RDATA INAREA,STOP,MF=L ---------------------------------------(2) 1 S0007D DS 0F A340 1 PARLIST FHDR UNIT=36,FUNCT=18,VERS=2 2 DS 0A
2 PARLIST DS 0XL8 GENERAL OPERAND LIST HEADER 2 DC AL2(36) FUNCTION UNIT NUMBER 2 DC AL1(18) FUNCTION NUMBER 2 DC AL1(2) FUNCTION INTERFACE VERSION NUMBER 2 DC X'FFFFFFFF' Returncode is virgin 1 * 1 DC A(STOP) ERROR ADDRESS 1 DC AL4(INAREA) READ IN AREA ADDRESS 1 DS AL1(0) PLACE FOR I.EDIT BYTE 1 1 DS AL1(0) PLACE FOR I.EDIT BYTE 2 1 DC AL1(0) SYSDTA ASSIGNMENT 1 DC AL1(0) FLAG BYTE 1 1 DC AL2(L'INAREA) LENGTH OF READ 1 DC AL1(0) FLAG TABLE BYTE 1 DC AL1(0) ASSIGNMENT CHANGE INDICATOR 1 DC H'0' KEY-POSITION 1 DC H'0' KEY-LENGTH 1 DC AL4(0) VTSUCB ADDRESS 1 DC AL2(0) INPUT TIMER VALUE 009 1 DC H'0' RES_FOR_TIAM 007 1 * 1 @DCEI DCEDIT=,MODE=,IGETFC=,ICFD=, C 1 ITRSUP=,ILINEND=,IGETBS=, C 1 IMANUAL=,ILCASE=,IHDR=, C 1 IGETIC=,RDA1=-20,RDA2=-19 2 ORG *-20 2 DC AL1(0) 2 ORG *+20-1 2 ORG *-19 2 DC AL1(0) 2 ORG *+19-1 2 *,@DCEI 999 921011 53531002 1 * PRINT NOGEN R3 EQU 3 END
(1) | Durch die E-Form des Makroaufrufs wird der Befehlsteil des Makros RDATA generiert. Der Datenbereich mit den gewünschten Operanden beginnt ab der symbolischen Adresse PARLIST. |
(2) | In der L-Form des Makroaufrufs werden alle gewünschten Operanden angegeben. Der Datenbereich wird generiert. |
Beispiel 3: GTIME-Makroaufruf (MF-Format 3) mit D-, E-, M- und L-Form
GTIME START PRINT NOGEN BALR R3,0 USING *,R3 GTIME AMODE ANY GTIME RMODE ANY LA R5,GLIST -----------------------------------------------(1) USING DGLIST,R5 LA R13,SAVE * E1 GTIME MF=E,PARAM=GLIST,LINKADR=*NONE -------------------------(2) MVC TEXT,='Date: ' -----------------------------------------(3) MVC DATE,NTIGDTIC WROUT OUTPUT,STOP 2 *,@DCEO 999 921011 53531004 CLEAR MVC DATE,=CL10' ' * M GTIME MF=M,PARAM=GLIST,DAY=YES -------------------------------(4) * E2 GTIME MF=E,PARAM=GLIST,LINKADR=*NONE -------------------------(5) MVC TEXT,='Day: ' -----------------------------------------(6) MVC DAY,NTIGDYID WROUT OUTPUT,STOP 2 *,@DCEO 999 921011 53531004 STOP TERM * OUTPUT DC Y(OUTPUTE-OUTPUT) DC X'404001' TEXT DS CL6 DATE DS CL10 ORG DATE DAY DS CL2 ORG OUTPUTE EQU * SAVE DS 18F GLIST GTIME MF=L,DATE=YES-------------------------------------------(7) PRINT GEN DGLIST GTIME MF=D ---------------------------------------------------(8) 1 DGLIST MFTST MF=D,PREFIX=N,MACID=TIG,ALIGN=F, C 1 DMACID=TIG,SUPPORT=(E,D,C,M,L),DNAME=TIG_MDL 2 DGLIST DSECT , 2 *,##### PREFIX=N, MACID=TIG ##### 1 * subcodes 1 NTIGERROR_IN_CALL EQU 1 Error in Call 1 NTIGRNAP EQU 32 no Action possible 1 NTIGWARNING_SITUATION EQU 512 Warning Situation (SPL)
1 NTIGRWCS EQU 2 Warning Situation (ASS) 1 * 1 * GTIME-Parameter-Area 1 NTIGFHDR FHDR MF=(C,NTIG),EQUATES=NO Standardheader 2 NTIGFHDR DS 0A 2 NTIGFHE DS 0XL8 0 GENERAL PARAMETER AREA HEADER 2 * 2 NTIGIFID DS 0A 0 INTERFACE IDENTIFIER 2 NTIGFCTU DS AL2 0 FUNCTION UNIT NUMBER 2 * BIT 15 HEADER FLAG BIT, 2 * MUST BE RESET UNTIL FURTHER NOTICE 2 * BIT 14-12 UNUSED, MUST BE RESET 2 * BIT 11-0 REAL FUNCTION UNIT NUMBER 2 NTIGFCT DS AL1 2 FUNCTION NUMBER 2 NTIGFCTV DS AL1 3 FUNCTION INTERFACE VERSION NUMBER 2 * 2 NTIGRET DS 0A 4 GENERAL RETURN CODE 2 NTIGSRET DS 0AL2 4 SUB RETURN CODE 2 NTIGSR2 DS AL1 4 SUB RETURN CODE 2 2 NTIGSR1 DS AL1 5 SUB RETURN CODE 1 2 NTIGMRET DS 0AL2 6 MAIN RETURN CODE 2 NTIGMR2 DS AL1 6 MAIN RETURN CODE 2 2 NTIGMR1 DS AL1 7 MAIN RETURN CODE 1 2 NTIGFHL EQU 8 8 GENERAL OPERAND LIST HEADER LENGTH 2 * 1 * main return codes 1 NTIGRNIN EQU 1 GTIME function not 1 * initialized 1 NTIGRNSI EQU 2 no season information 1 NTIGRPRV EQU 16 no previous change date known 1 NTIGRPST EQU 17 no later change date in past 1 * known 1 NTIGRNCD EQU 18 no change date known 1 NTIGRXIE EQU 8 internal error concerning 1 * xcs_mode 1 * 1 NTIGIB1 DS AL1 indicator byte 1 1 NTIGIMU EQU X'80' MODE = UTC 1 NTIGIFB EQU X'40' FORMAT = BIN 1 NTIGICS EQU X'20' not used 1 NTIGIFT EQU X'10' FORMAT = TODR 1 NTIGIDW EQU X'08' date wanted 1 NTIGIWW EQU X'04' day wanted 1 NTIGITW EQU X'02' TOD wanted 1 NTIGIZW EQU X'01' zone wanted 1 NTIGIB2 DS AL1 indicator byte 2 1 NTIGIRM EQU X'80' resolution = microsec.
1 NTIGICN EQU X'40' next change date demanded 1 NTIGICP EQU X'20' previous ch.date demanded 1 NTIGIRF EQU X'10' time reference 1 NTIGIMX EQU X'08' global XCS-time on 1 NTIGICA EQU X'04' announcement of chdate 1 * demanded 1 NTIGRESERVED_2BITS EQU X'03' not yet used 1 NTIGIRES DS XL2 indicator byte 3 & 4 1 NTIGDATE_UNION DS 0XL16 date_union 1 NTIGDATE_SPL DS XL16 for SPL 1 ORG NTIGDATE_UNION 1 * 1 NTIGDTI DS 0XL16 date_iso4 1 NTIGDATE_UN DS 0XL10 date union 1 * 1 NTIGDATE_1 DS 0XL10 date struct 1 NTIGDTIY DS CL4 year 1 NTIGDTI1 DS CL1 hyphen1 1 NTIGDTIM DS CL2 month 1 NTIGDTI2 DS CL1 hyphen2 1 NTIGDTID DS CL2 day 1 * 1 ORG NTIGDATE_UN 1 NTIGDTIC DS CL10 date_char 1 ORG NTIGDATE_UN+10 1 NTIGDTIJ DS CL3 julian date 1 NTIGDTIB DS CL1 blank 1 NTIGDYID DS CL2 weekday in ISO4 1 * 1 ORG NTIGDATE_UNION 1 * 1 NTIGDTB DS 0XL16 date_bin 1 * 1 NTIGDATE_2 DS 0XL6 date 1 NTIGDTBY DS H year 1 NTIGDTBM DS H month 1 NTIGDTBD DS H day 1 * 1 NTIGDTBJ DS H Julian date 1 NTIGFILL_6 DS XL6 fill for weekday 1 NTIGDYBD DS H weekday bin.: MO=0, DI=1, ... 1 * SO=6 1 * . . .
Ablaufprotokoll
/start-assembh % BLS0500 PROGRAM 'ASSEMBH', VERSION '<ver>' OF '<date>' LOADED % ASS6010 <ver> OF BS2000 ASSEMBH READY //compile source=*library-element(macexmp.lib,gtime), - // compiler-action=module-generation(module-format=llm), - // module-library=macexmp.lib, - // listing=parameters(output=*library-element(macexmp.lib,gtime)) % ASS6011 ASSEMBLY TIME: 538 MSEC % ASS6018 0 FLAGS, 0 PRIVILEGED FLAGS, 0 MNOTES % ASS6019 HIGHEST ERROR-WEIGHT: NO ERRORS % ASS6006 LISTING GENERATOR TIME: 135 MSEC //end % ASS6012 END OF ASSEMBH /start-executable-program library=macexmp.lib,element-or-symbol=gtime % BLS0523 ELEMENT 'GTIME', VERSION '@' FROM LIBRARY ':2OSG:$QM212.MACEXMP.LIB' IN PROCESS % BLS0524 LLM 'GTIME', VERSION ' ' OF '<date <time>' LOADED Date: 2012-01-20 Day: FR
(1) | Das Register R5 wird mit der Adresse des mit MF=L erzeugten Datenbereichs geladen und zur Adressierung der Parameterleiste benutzt. |
(2) | Mit dem Aufruf GTIME MF=E wird der Befehlsteil generiert. |
(3) | Der Ausgabebereich wird mit dem Text „Date:“ und dem Inhalt des Feldes NTIGDTIC versorgt. Das Feld NTIGDTIC ist Bestandteil der DSECT und des Datenbereichs GLIST und enthält das aktuelle Datum. Mit dem Makro WROUT wird die gewünschte Information ausgegeben. |
(4) | Mit dem Aufruf GTIME MF=M wird der Datenbereich GLIST dynamisch verändert. Es soll nun zusätzlich der aktuelle Wochentag (DAY=YES) ausgegeben werden. |
(5) | Mit dem Aufruf GTIME MF=E wird der Befehlsteil generiert. |
(6) | Der Ausgabebereich wird mit dem Text „Day:“ und dem Inhalt des Feldes NTIGDYID versorgt. Das Feld NTIGDYID ist Bestandteil der DSECT und des modifizierten Datenbereichs GLIST und enthält nach dem Aufruf mit MF=E den aktuellen Wochentag. Mit dem Makro WROUT wird die gewünschte Information ausgegeben. |
(7) | Mit dem Aufruf GTIME MF=L wird der Datenbereich für die Operandenwerte generiert. Dieser Datenbereich beginnt ab der symbolischen Adresse GLIST. Beim ersten Aufruf von GTIME MF=E wird die Information DATE abgefragt (siehe Punkt (2)). Beim zweiten GTIME MF=E wurde der Datenbereich mit einem vorhergehenden GTIME MF=M dahingehend geändert, dass die gewünschte Information nun auch DAY ist (siehe Punkte (4) und (5)). |
(8) | Die DSECT für GTIME wird generiert. |