Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

S-Typ-Makroaufrufe

&pagelevel(4)&pagelevel

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

[opaddr] MACRO

{
 [MF=S] [,op1,...,opn] |
 MF={L / (L,pre)}     |
 MF={D / (D,pre)}     |
 MF={(C,pre) / C}     |
 MF=(E, {adr / (r) })
}

[,PARMOD=24 / 31]

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

[opaddr] MACRO

{[MF=S] [,op1,...,opn] |

MF=L [,op1,...,opn][,PREFIX=p] |

MF=M,op1,...,opn[,PREFIX=p][,MACID=mac] [,PARAM=addr / (r) / <var: pointer> / <reg: pointer>]  |

MF=D[,PREFIX=p] |

MF=C[,PREFIX=p][,MACID=mac] |

MF=E[,PARAM=adr / (r) / <var: pointer> / (<reg: pointer>)]
}

MF-Format 3

[opaddr] MACRO

{MF=L [,op1,...,opn][,PREFIX=p] |

MF=M,op1,...,opn[,PREFIX=p][,MACID=mac] |

MF=R,op1,...,opn[,PREFIX=p][,MACID=mac] |

MF=D[,PREFIX=p] |

MF=C[,PREFIX=p][,MACID=mac] |

MF=E[,PARAM=addr / (r) / <var: pointer> (<reg: pointer>)]
}

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.
Der Datenbereich mit den Operandenwerten beginnt ab der symbolischen Adresse GLIST: Es soll das aktuelle Datum (DATE=YES) ermittelt werden (siehe auch Punkt (7)).

(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.
Der Datenbereich mit den Operandenwerten beginnt wiederum ab der symbolischen Adresse GLIST: Nun soll der aktuelle Wochentag (DAY=YES) ermittelt werden (siehe auch Punkt (7)).

(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.
Der Datenbereich kann unter Benutzung der Feldnamen der DSECT versorgt werden. Die Feldnamen beginnen (standardmäßig) mit den Zeichen NTIG.
Die Adressrechnung beginnt bei DGLIST wieder mit X'000000'. Die nachfolgenden Distanzen werden zusammen mit dem Basisregister R5 adressiert (z. B. in MVCs).