; cmp ti:=dsmac.mac,[macros2]
;
; ALTERED:
; EDWIN H. MARISON 11 MAY 1976 15:39
; SERGE I. GUZEW 12 DEC 1992 20:30
; SERGE I. GUZEW 10 MAR 2019 14:02
; SERGE I. GUZEW 26 FEB 2022 20:06
;
; STRUCTURED PROGRAMMING MACROS
;
; ** SUPMAC **
;
; V80
;
;
; .SP. ; Stack pointer
;
; $O$ ; .OR operator flag - Cleared in IF
; ; Setted in .OR
; $I$ ; .IFOPR operator flag - Cleared at beginning IF and .GENBR,
; ; Setted in .IFOPR (.GENBR called .IFOPR)
;
.MACRO ......
.ENDM ......
.MACRO ..INIT
$SUPMC=80. ; SUPMAC macros version
$DIDDO=0
.EF.=0
.L.=0 ; 0-? 1-UNTIL 2-LEAVE 3-GOTO 4-CONTINUE
$T=1 ; Starting label for loop operators
..L=1 ; Starting label number for IF operator
$R=-1
..INPR=0 ; In procedure now flag
..INMD=0 ; In module now flag
.SP.=-1
.ENDM ..INIT
.MACRO ..PUSH A1, A2
.SP.=.SP.+1
.IRP TT, \.SP.
..T'TT' = 'A1' ; TYPS 0-IF,OR 1-WHILE 2-FOR 3-BEGIN 4-CASE 5-REPEAT 6-THRU 7-LOOP 8-MODULE 9-ELSIF
..L'TT' = 'A2' ; LBLS
.ENDR
.ENDM ..PUSH
.MACRO ..POP A1, A2
.IF LT .SP.
.LIST
.ERROR ; Stack exchausted
$Y$=.SP.
.NLIST
.MEXIT
.IFF
.IRP TT, \.SP.
'A1' = ..T'TT' ; TYPS 0-IF,OR 1-WHILE 2-FOR 3-BEGIN 4-CASE 5-REPEAT 6-THRU 7-LOOP 8-MODULE 9-ELSIF
'A2' = ..L'TT' ; LBLS
.ENDR
.ENDC
.SP.=.SP.-1
.ENDM ..POP
.MACRO ..GET PPP, A1, A2
.IRP TT, \'PPP'
'A1' = ..T'TT' ; TYPS 0-IF,OR 1-WHILE 2-FOR 3-BEGIN 4-CASE 5-REPEAT 6-THRU 7-LOOP 8-MODULE 9-ELSIF
'A2' = ..L'TT' ; LBLS
.ENDR
.ENDM ..GET
................................................................................
.MACRO .EMIT VAL
$E$=1
.NLIST
.LIST ME
.LIST
'VAL'
.NLIST
.NLIST ME
.LIST
.ENDM .EMIT
.MACRO .EMITL VAL, BASE
.IF NB
.NLIST
.LIST ME
.LIST
'VAL' =: .-
.NLIST
.NLIST ME
.LIST
.IFF
.NLIST
.LIST ME
.LIST
'VAL':
.NLIST
.NLIST ME
.LIST
.ENDC
.ENDM .EMITL
.MACRO .EMITR S1, S2
.EMIT <'S1'>
.IIF GT 'S2'-1 .EMITR <'S1'>, \'S2'-1
.ENDM .EMITR
.MACRO ..TAG TG, WH
.EMITL <'TG''WH'$>
.ENDM ..TAG
.MACRO ..BRAN BRA, TG, WH
.EMIT <'BRA' 'TG''WH'$>
.ENDM ..BRAN
................................................................................
.MACRO MODULE NAME, MNAME, REL, VER, LIBR, COMM, WAUDIT, TYPE=
.IF NE ..INMD
.ERROR ; Nested MODULEs not implemented
.MEXIT
.ENDC
.IF B
.ERROR ; Blank MODULE name
.MEXIT
.ENDC
;
; Module <'NAME'>
;
.IF DF R$$T11
.MCALL .MODULE
.IF B
.IF B
.IF B
.IF B
.MODULE <'NAME'>, MODNAME=<'NAME'>, AUDIT=<'WAUDIT'>, COMMENT=<'COMM'>
.IFF
.MODULE <'NAME'>, MODNAME=<'NAME'>, LIB=<'LIBR'>, AUDIT=<'WAUDIT'>, COMMENT=<'COMM'>
.ENDC
.IFF
.IF B
.MODULE <'NAME'>, MODNAME=<'NAME'>, VERSION=<'VER'>, AUDIT=<'WAUDIT'>, COMMENT=<'COMM'>
.IFF
.MODULE <'NAME'>, MODNAME=<'NAME'>, VERSION=<'VER'>, LIB=<'LIBR'>, AUDIT=<'WAUDIT'>, COMMENT=<'COMM'>
.ENDC
.ENDC
.IFF
.IF B
.IF B
.MODULE <'NAME'>, MODNAME=<'NAME'>, RELEASE=<'REL'>, AUDIT=<'WAUDIT'>, COMMENT=<'COMM'>
.IFF
.MODULE <'NAME'>, MODNAME=<'NAME'>, RELEASE=<'REL'>, LIB=<'LIBR'>, AUDIT=<'WAUDIT'>, COMMENT=<'COMM'>
.ENDC
.IFF
.IF B
.MODULE <'NAME'>, MODNAME=<'NAME'>, RELEASE=<'REL'>, VERSION=<'VER'>, AUDIT=<'WAUDIT'>, COMMENT=<'COMM'>
.IFF
.MODULE <'NAME'>, MODNAME=<'NAME'>, RELEASE=<'REL'>, VERSION=<'VER'>, LIB=<'LIBR'>, AUDIT=<'WAUDIT'>, COMMENT=<'COMM'>
.ENDC
.ENDC
.ENDC
.IFF
.IF B
.IF B
.IF B
.MODULE <'NAME'>, MODNAME=<'MNAME'>, AUDIT=<'WAUDIT'>, COMMENT=<'COMM'>
.IFF
.MODULE <'NAME'>, MODNAME=<'MNAME'>, LIB=<'LIBR'>, AUDIT=<'WAUDIT'>, COMMENT=<'COMM'>
.ENDC
.IFF
.IF B
.MODULE <'NAME'>, MODNAME=<'MNAME'>, VERSION=<'VER'>, AUDIT=<'WAUDIT'>, COMMENT=<'COMM'>
.IFF
.MODULE <'NAME'>, MODNAME=<'MNAME'>, VERSION=<'VER'>, LIB=<'LIBR'>, AUDIT=<'WAUDIT'>, COMMENT=<'COMM'>
.ENDC
.ENDC
.IFF
.IF B
.IF B
.MODULE <'NAME'>, MODNAME=<'MNAME'>, RELEASE=<'REL'>, AUDIT=<'WAUDIT'>, COMMENT=<'COMM'>
.IFF
.MODULE <'NAME'>, MODNAME=<'MNAME'>, RELEASE=<'REL'>, LIB=<'LIBR'>, AUDIT=<'WAUDIT'>, COMMENT=<'COMM'>
.ENDC
.IFF
.IF B
.MODULE <'NAME'>, MODNAME=<'MNAME'>, RELEASE=<'REL'>, VERSION=<'VER'>, AUDIT=<'WAUDIT'>, COMMENT=<'COMM'>
.IFF
.MODULE <'NAME'>, MODNAME=<'MNAME'>, RELEASE=<'REL'>, VERSION=<'VER'>, LIB=<'LIBR'>, AUDIT=<'WAUDIT'>, COMMENT=<'COMM'>
.ENDC
.ENDC
.ENDC
.ENDC
.IFF
;.IF DF R$$11M
.IF NB
.TITLE 'MNAME' - 'COMM'
.IFF
.TITLE 'NAME' - 'COMM'
.ENDC
.IDENT /'REL'.'VER'/
.MACRO .NLCSI TYP=Z, PART=ALL
.IF IDN
.ASCI'TYP' "'MODULE' 'REL'.'VERSION' "
.ENDC
.IF IDN
.ASCI'TYP' "'MODULE'"
.ENDC
.IF IDN
.ASCI'TYP' "'REL'.'VERSION' "
.ENDC
.IF IDN
.ASCI'TYP' "'MODULE'-"
.ENDC
.ENDM .NLCSI
;.ENDC
.ENDC
.MACRO .MCHCK NAM
.IIF DIF <'NAM'>,<'NAME'> .ERROR ; Different MODULE name
.ENDM .MCHCK
.ENABL LC
.DSABL GBL
.NLIST LD
.NLIST TTM
..INIT ; Stack initialization
RB = %5 ; %5 used as BASE pointer
.IF NB TYPE
'TYPE'
$ORDER
.ENDC
..PUSH 8., ..L
..PUSH 8., $T
..L=^O<100>
$T= ^O<100>
..INMD=1
.ENDM MODULE
.MACRO FROM M, I, A, B, C, D, E, F, G, H, J, K, L, N, O, P, Q, R, S, T, U, V, W, X, Y, Z
.IF DIF <'I'>,
.ERROR ; 'I' - must be IMPORT
.MEXIT
.ENDC
.EMIT <;>
.EMIT <; IMPORT from MODULE <'M'>>
.EMIT <;>
.IF IDN <'M'>,
.EMIT <.MCALL A B C D E F G H J K L N O P Q R S T U V W X Y Z>
.IFF
.IF IDN <'M'>,
.EMIT <.MCALL A B C D E F G H J K L N O P Q R S T U V W X Y Z>
.IFF
.EMIT <.GLOBL A B C D E F G H J K L N O P Q R S T U V W X Y Z>
.ENDC
.ENDC
.ENDM FROM
.MACRO EXPORT Q, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, R, S, T, U, V, W, X, Y, Z
.IF DIF <'Q'>,
.ERROR ; EXPORT only QUALIFIED - 'Q'
.MEXIT
.ENDC
.EMIT <;>
.EMIT <; MODULE EXPORT>
.EMIT <;>
.EMIT <.GLOBL A B C D E F G H I J K L M N O P R S T U V W X Y Z>
.ENDM EXPORT
................................................................................
.MACRO PROCEDURE NAME, BASE, EXT
;
; PROCEDURE 'NAME'
;
.IF NE ..INPR
.ERROR ; Nested PROCEDURE not implemented
.MEXIT
.ENDC
.IF B
.ERROR ; Blank PROCEDURE name
.MEXIT
.ENDC
.SAVE
$CODE
.EMITL <'NAME'>, <'BASE'>
.MACRO .PCHCK NAM
.IIF DIF <'NAM'>, <'NAME'> .ERROR ; Different PROCEDURE name
.ENDM .PCHCK
..INPR=1
.RESTORE
.ENDM PROCEDURE
.MACRO ENTRY NAME, BASE, EXT
.IF EQ ..INPR
.ERROR ; ENTRY only in PROCEDURE
.MEXIT
.ENDC
.IF B
.ERROR ; Blank ENTRY name
.MEXIT
.ENDC
.SAVE
$CODE
.EMITL <'NAME'>, <'BASE'>
.RESTORE
.ENDM ENTRY
.MACRO BEGIN
.IIF EQ ..INPR .ERROR ; BEGIN only for PROCEDURE at least now
$CODE
..PUSH 3, ..L
..PUSH 3, $T
..L=^O<100>
$T= ^O<100>
.ENABL LSB
.ENDM BEGIN
.MACRO RETURN STA, REG, A, BE, C, D, E, F, G, H, I, J, K, LL, M, N, O, P, Q, R, S, TE
.IF NB STA
.IF DIF ,
.IF DIF ,
.IF DIF ,
.IF IDN ,
.EMIT
.EMIT
.IFF
.EMIT
.EMIT
.ENDC
.IFF
.EMIT
.ENDC
.IFF
.EMIT
.ENDC
.ENDC
.ENDC
.IIF B .EMIT
.IIF NB .EMIT
.ENDM RETURN
.MACRO $CALL NAME, ARGS, WHERE, TYPE, A, BB, C, D, E, F, G, H, I, J, K, LL, M, N, O, P, Q, RR, S
; Note: **** WHERE and TYPE not implemented ****
.IIF B .EMIT
.IIF B .MEXIT
.IF NB WHERE
.ERROR ; WHERE .... ARGUMENTs must be blank
.MEXIT
.ENDC
.$T=0
.MACRO $GENM BBT, BBP
.IIF GT BBP-5 .ERROR ; 6 arguments max (R0-R5)
.IIF GT BBP-5 .MEXIT
.IIF DIF <%'BBP> .EMIT
.ENDM $GENM
.IRP T,
.IIF NB $GENM T, \.$T
.$T=.$T+1
.ENDR
.EMIT
.ENDM $CALL
................................................................................
.MACRO RNE LOC
.EMIT
.ENDM RNE
.MACRO REQ LOC
.EMIT
.ENDM REQ
.MACRO RLT LOC
.EMIT
.ENDM RLT
.MACRO RGE LOC
.EMIT
.ENDM RGE
.MACRO RGT LOC
.EMIT
.ENDM RGT
.MACRO RLE LOC
.EMIT
.ENDM RLE
.MACRO RPL LOC
.EMIT
.ENDM RPL
.MACRO RMI LOC
.EMIT
.ENDM RMI
.MACRO RHI LOC
.EMIT
.ENDM RHI
.MACRO RLOS LOC
.EMIT
.ENDM RLOS
.MACRO RHIS LOC
.EMIT
.ENDM RHIS
.MACRO RLO LOC
.EMIT
.ENDM RLO
.MACRO RCS LOC
.EMIT
.ENDM RCS
.MACRO RCC LOC
.EMIT
.ENDM RCC
................................................................................
.MACRO .IFOPR OPRA, RELA, TTG
.EMIT 'OPRA'
.IF GT $R
.IIF EQ .L. .EMIT ; ?
.IIF EQ .L.-1 .EMIT ; UNTIL
.IIF EQ .L.-2 .EMIT ; LEAVE
.IIF EQ .L.-3 .EMIT ; GOTO
.IIF EQ .L.-4 .EMIT ; LEAVE
.IFF
.IIF EQ .L. R'RELA 'TTG'3$ ; ?
.IIF EQ .L.-1 R'RELA 'TTG'1$ ; UNTIL
.IIF EQ .L.-2 R'RELA 'TTG'2$ ; LEAVE
.IIF EQ .L.-3 R'RELA TTG ; GOTO
.IIF EQ .L.-4 R'RELA 'TTG'1$ ; LEAVE
.ENDC
..PUSH 0, $T
$I$=1
.ENDM .IFOPR
.MACRO .IS Q1, Q2, QB, QT
.IIF DIF , .ERROR ; IF syntax error : Q1 is
.IIF IDN , .IFOPR <<.=.>>, Q2, QT
.ENDM .IS
.MACRO .GENBR A1, B1, C1, D1, E1
$I$=0
.IIF IDN .IFOPR <>, NE, E1
.IIF IDN .IFOPR <>, EQ, E1
.IIF IDN <#0> .IFOPR <>, B1, E1
.IIF IDN <#0> .IFOPR <>, B1, E1
.IIF IDN .IS A1, C1, D1, E1
.IIF EQ $I$ .IFOPR <>, B1, E1
.ENDM .GENBR
................................................................................
.MACRO .OPADD V1, V2, V3
.IIF IDN <#0> .EMIT <>
.IIF NE $E$ .MEXIT
.IIF IDN <#1> .EMIT
.IIF NE $E$ .MEXIT
.IIF IDN .EMIT
.IIF NE $E$ .MEXIT
; .EMIT
.EMIT
.ENDM .OPADD
.MACRO .OPSUB V1, V2, V3
.IIF IDN <#0> .EMIT <>
.IIF NE $E$ .MEXIT
.IIF IDN <#1> .EMIT
.IIF NE $E$ .MEXIT
.IIF IDN .EMIT
.IIF NE $E$ .MEXIT
; .EMIT
.EMIT
.ENDM .OPSUB
................................................................................
.MACRO .ARITH Y1, Y2, Y3, Y4
.IIF IDN , <-(%6)> .ARITH @%6, Y2, Y3, Y4
.IIF IDN , <-(%6)> .MEXIT
.IIF IDN <+>, .OPADD Y1, Y2, Y3
.IIF IDN <->, .OPSUB Y1, Y2, Y3
.IIF NE $E$ .MEXIT
.IIF IDN , .EMIT
.IIF IDN , .EMIT
.IIF NE $E$ .MEXIT
.IIF IDN , .EMIT
.IIF IDN , .EMIT
.IIF NE $E$ .MEXIT
.IIF IDN , .EMITR , Y2
.IIF IDN , .EMITR , Y2
.IIF IDN , .EMITR , Y2
.IIF IDN , .EMITR , Y2
.IIF NE $E$ .MEXIT
.IIF IDN <*>, .EMIT
.IIF IDN >, .EMIT
.IIF IDN
, .EMIT
.IIF IDN , .EMIT
.IIF NE $E$ .MEXIT
.IIF IDN , .EMIT
.IIF EQ $E$ .ERROR ; Invalid operation Y4
.ENDM .ARITH
.MACRO .SIMPLE X1, X2, X3, X4, X5, X6
.IF DIF , <:=>
.IF DIF , <:W=>
.IF DIF , <:==>
.IF DIF , <:B=>
.ERROR ; X2 Invalid assign operator
.MEXIT
.ENDC
.ENDC
.SIMPLE X1, <:=>, X3, X4, X5, B
.MEXIT
.ENDC
.ENDC
.IIF IDN , .SIMPLE -(%6), X2, X3, X4, X5, X6
.IIF IDN , .MEXIT
.IIF IDN , .SIMPLE @%6, X2, X3, X4, X5, X6
.IIF IDN , .MEXIT
$Y$=0
$Z$=0
.IIF IDN , $Z$=-1
.IIF IDN , $Z$=-1
.IIF IDN , $Z$=-2
.IIF IDN , $Y$=7
.IIF IDN , $Y$=7
.IIF IDN , $Y$=7
.IIF IDN <0>, $Y$=7
.IIF IDN <#0>, $Y$=7
.IIF IDN , $Y$=4
.IIF IDN , $Y$=4
.IIF IDN , $Y$=4
.IF LT $Z$
.IIF EQ $Z$+$Y$-6 .EMIT
.IIF EQ $Z$+$Y$-5 .EMIT
.IIF EQ $Z$+$Y$-3 .EMIT
.IIF EQ $Z$+$Y$-2 .EMIT
.MEXIT
.ENDC
.IIF IDN , $Y$=-1
.IIF IDN <->, $Y$=-2
.IIF IDN , $Y$=5
.IIF IDN , $Y$=6
.IIF IDN , $Y$=10
.IF DIF ,
.IIF EQ $Y$-7 .EMIT
.IF DIF <@%6>,
.IIF EQ $Y$-6 .EMIT
.ENDC
.IIF EQ $Y$-5 .EMIT
.IIF EQ $Y$-4 .EMIT
.IIF EQ $Y$ .EMIT
.ENDC
.IF DIF
.IIF LT $Y$ .EMIT
.ENDC
.IIF IDN <+1> $Y$=-5
.IIF IDN <-1> $Y$=-6
.IF LT $Y$
.IIF EQ $Y$+1 .EMIT
.IIF EQ $Y$+2 .EMIT
.IIF EQ $Y$+3 .EMIT
.IIF EQ $Y$+4 .EMIT
.IIF EQ $Y$+5 .EMIT
.IIF EQ $Y$+6 .EMIT
.MEXIT
.ENDC
.IIF B .MEXIT
.IIF IDN .MEXIT
.IIF IDN .MEXIT
$E$=0
.IIF IDN .ARITH X1, @%6, X6, X4
.IIF IDN .ARITH X1, (%6)+, X6, X4
.IIF EQ $E$ .ARITH X1, X5, X6, X4
.ENDM .SIMPLE
.MACRO LET A, BE, C, D, EE, F, G, H, I, J, K, LL, M, N, O, P, Q, R, S, TE, U, V
.SIMPLE A, BE, C, D, EE
.IIF B .MEXIT
.IIF B .MEXIT
.IIF B .MEXIT
.IIF IDN , LET EE, F, G, H, I, J, K, LL, M, N, O, P, Q, R, S, TE, U, V
.IIF IDN , .MEXIT
.IIF IDN , LET F, G, H, I, J, K, LL, M, N, O, P, Q, R, S, TE, U, V
.IIF IDN , .MEXIT
.IIF IDN , LET G, H, I, J, K, LL, M, N, O, P, Q, R, S, TE, U, V
.IIF IDN , .MEXIT
.IF LT $Y$
LET A, BE, A, EE, F, G, H, I, J, K, LL, M, N, O, P, Q, R, S, TE, U, V
.MEXIT
.ENDC
LET A, BE, A, F, G, H, I, J, K, LL, M, N, O, P, Q, R, S, TE, U, V
.ENDM LET
................................................................................
.MACRO $SET$L$ BBB
$K$L=-1
$K$=-1
.IF LT BBB
.ERROR ; Not at cycle block
.MEXIT
.ENDC
..GET BBB, $K$T, $K$L
$XXX$ = 0
.IIF EQ $K$T-1 $XXX$ = 1 ;WHILE
.IIF EQ $K$T-2 $XXX$ = 1 ;FOR
.IIF EQ $K$T-5 $XXX$ = 1 ;REPEAT
.IIF EQ $K$T-6 $XXX$ = 1 ;THRU
.IIF EQ $K$T-7 $XXX$ = 1 ;LOOP
.IIF EQ $XXX$ $SET$L$ BBB-1
$K$=$K$L
.ENDM $SET$L$
.MACRO JUMPTO AAAA, A, BB, C, D, E, F, H, G, I, J, K, L, M, N, O, P, Q, R, S, T, U
.IIF B .MEXIT
.EMIT
.ENDM JUMPTO
.MACRO GOTO BBBB, A, BB, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U
.IIF B .MEXIT
.EMIT
.ENDM GOTO
.MACRO .GOTO GA, GB, GC, GD, GEE
.L.=3 ; 0-? 1-UNTIL 2-LEAVE 3-GOTO 4-CONTINUE
$R=-$R
.GENBR GA, GB, GC, GD, GEE
..POP $$TT, $$TT
$R=-$R
.L.=0
.ENDM .GOTO
.MACRO ON.NOERROR A, BE, C, D, EE, F, G, H, I, J, K, LL, M, N, O, P, Q, R, S
IF RESULT, IS, CC, A, BE, C, D, EE, F, G, H, I, J, K, LL, M, N, O, P, Q, R, S
.ENDM ON.NOERROR
.MACRO ON.ERROR A, BE, C, D, EE, F, G, H, I, J, K, LL, M, N, O, P, Q, R, S
IF RESULT, IS, CS, A, BE, C, D, EE, F, G, H, I, J, K, LL, M, N, O, P, Q, R, S
.ENDM ON.ERROR
.MACRO IFB A, BE, C, D, EE, F, G, H, I, J, K, LL, M, N, O, P, Q, R, S, TE, U, V, W, X, Y, Z
IF A, BE, C, D, EE, F, G, H, I, J, K, LL, M, N, O, P, Q, R, S, TE, U, V, W, X, Y, Z, B
.ENDM IFB
.MACRO IF A, BE, C, D, EE, F, G, H, I, J, K, LL, M, N, O, P, Q, R, S, TE, U, V, W, X, Y, Z, BB
.IIF B .MEXIT
$O$=0 ; .OR operator flag - Cleared in IF
; Setted in .OR
$I$=0 ; .IFOPR operator flag - Cleared at beginning IF and .GENBR,
; Setted in .IFOPR (.GENBR called .IFOPR)
.IF IDN
.IIF NB .LEAVE A, BE, C, BB, EE
.ENDC
.IIF NE $I$ .MEXIT
.IF IDN
.IIF NB .CONTINUE A, BE, C, BB, EE
.ENDC
.IIF NE $I$ .MEXIT
.IF IDN
.IIF NB .GOTO A, BE, C, BB, EE
.ENDC
.IIF NE $I$ .MEXIT
.IIF IDN , .OR A, BE, C, BB
.IIF IDN , .OR A, BE, C, BB
.IF EQ $O$
.IIF EQ .L.-1 .GENBR A, BE, C, BB, \$T2 ; 1-UNTIL
.IIF NE .L.-1 .GENBR A, BE, C, BB, \$T ; not UNTIL
.ENDC
$T=$T+1
.IIF B , .MEXIT
D EE, F, G, H, I, J, K, LL, M, N, O, P, Q, R, S, TE, U, V, W, X, Y, Z
.IIF LE $DIDDO .MEXIT
..POP $$T, $$T
..TAG \$$T, 3
$DIDDO=$DIDDO-1
.ENDM IF
;
; ELSIF(B) not implemented for now
;
.MACRO ELSIFB A, BE, C, D, EE, F, G, H, I, J, K, LL, M, N, O, P, Q, R, S, TE, U, V, W, X, Y, Z
ELSIF A, BE, C, D, EE, F, G, H, I, J, K, LL, M, N, O, P, Q, R, S, TE, U, V, W, X, Y, Z, B
.ENDM ELSIFB
.MACRO ELSIF A, BE, C, D, EE, F, G, H, I, J, K, LL, M, N, O, P, Q, R, S, TE, U, V, W, X, Y, Z, BB
..POP $T1, $T2
.IF EQ $T1
..BRAN BR, \$T, 3
..TAG \$T2, 3
..PUSH 0, $T
$T=$T+1
..PUSH 9., $T
$T=$T+1
IF A, BE, C, D, EE, F, G, H, I, J, K, LL, M, N, O, P, Q, R, S, TE, U, V, W, X, Y, Z, BB
.MEXIT
.ENDC
.IF EQ $T1-9.
..POP $T3, $T4
.IF NE $T3
.ERROR ; $T3 ELSIF discovered after ELSE
.ENDC
..BRAN BR, \$T4, 3
..TAG \$T2, 3
IF A, BE, C, D, EE, F, G, H, I, J, K, LL, M, N, O, P, Q, R, S, TE, U, V, W, X, Y, Z, BB
.MEXIT
.ENDC
.ERROR ; $T1 ELSIF discovered not in IF operator
..PUSH $T1, $T2
.ENDM ELSIF
.MACRO ANDB EE, F, G, H, I, J, K, LL, M, N, O, P, Q, R, S, TE, U, V, W, X, Y, Z
AND EE, F, G, H, I, J, K, LL, M, N, O, P, Q, R, S, TE, U, V, W, X, Y, Z, B
.ENDM ANDB
.MACRO AND EE, F, G, H, I, J, K, LL, M, N, O, P, Q, R, S, TE, U, V, W, X, Y, Z, BB
.IIF B .MEXIT
$$S=0
.IIF IDN , , $$S=1
.IIF IDN ,