;
; ALTERED:
; EDWIN H. MARISON 11 MAY 1976 15:39
; Hunta 12 DEC 1992 20:30
; Hunta 10 MAR 2019 14:02
;
; STRUCTURED PROGRAMMING MACROS
;
; ** SUPMAC **
;
; V80
;
;
; .SP. ; указатель стека
;
; $O$ ; флаг .OR оператора - сбрасывается в IF,
; ; устанавливается в .OR
; $I$ ; флаг .IFOPR оператора - сбрасывается в начале IF и .GENBR,
; ; устанавливается в .IFOPR (в .GENBR есть обращения к .IFOPR)
;
.MACRO ......
.ENDM ......
.MACRO $ORDER TYPE
.ENDM
.MACRO ..INIT
$SUPMC=80. ; SUPMAC macros version
$DIDDO=0
.EF.=0
.L.=0
$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
..L'TT' = 'A2' ; LBLS
.ENDR
.ENDM ..PUSH
.MACRO ..POP A1, A2
.IF LT .SP.
.LIST
.ERROR ; Стек исчерпан
$Y$=.SP.
.NLIST
.MEXIT
.IFF
.IRP TT, \.SP.
'A1' = ..T'TT' ; TYPS
'A2' = ..L'TT' ; LBLS
.ENDR
.ENDC
.SP.=.SP.-1
.ENDM ..POP
.MACRO ..GET PPP, A1, A2
.IRP TT, \'PPP'
'A1' = ..T'TT' ; TYPS
'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 ; Вложенные модули не реализованы
.MEXIT
.ENDC
.IF B
.ERROR ; Пропущено имя модуля
.MEXIT
.ENDC
;
; Модуль <'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 ; Разные имена модулей
.ENDM .MCHCK
.ENABL LC
.DSABL GBL
.NLIST LD
.NLIST TTM
..INIT ; Начать работу со стеком
RB = %5 ; %5 используется как базовый
$ORDER <'TYPE'>
..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 ; Вместо IMPORT - 'I'
.MEXIT
.ENDC
.EMIT <;>
.EMIT <; Импорт из модуля <'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 только QUALIFIED - 'Q'
.MEXIT
.ENDC
.EMIT <;>
.EMIT <; Экспорт модуля>
.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
;
; Процедура 'NAME'
;
.IF NE ..INPR
.ERROR ; Вложенные процедуры не реализованы
.MEXIT
.ENDC
.IF B
.ERROR ; Пропущено имя процедуры
.MEXIT
.ENDC
.SAVE
$CODE
.EMITL <'NAME'>, <'BASE'>
.MACRO .PCHCK NAM
.IIF DIF <'NAM'>, <'NAME'> .ERROR ; Разные имена процедур
.ENDM .PCHCK
..INPR=1
.RESTORE
.ENDM PROCEDURE
.MACRO ENTRY NAME, BASE, EXT
.IF EQ ..INPR
.ERROR ; Entry возможно только внутри процедуры
.MEXIT
.ENDC
.IF B
.ERROR ; Пропущено имя входа
.MEXIT
.ENDC
.SAVE
$CODE
.EMITL <'NAME'>, <'BASE'>
.RESTORE
.ENDM ENTRY
.MACRO BEGIN
.IIF EQ ..INPR .ERROR ; BEGIN пока только для процедур
$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
; Замечание: **** WHERE и TYPE не реализованы ****
.IIF B .EMIT
.IIF B .MEXIT
.IF NB WHERE
.ERROR ; WHERE .... аргументы должны быть <>
.MEXIT
.ENDC
.$T=0
.MACRO $GENM BBT, BBP
.IIF GT BBP-5 .ERROR ; 6 аргументов максимально (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
.IIF EQ .L.-2 .EMIT
.IIF EQ .L.-3 .EMIT
.IFF
.IIF EQ .L. R'RELA 'TTG'3$
.IIF EQ .L.-1 R'RELA 'TTG'1$
.IIF EQ .L.-2 R'RELA 'TTG'2$
.IIF EQ .L.-3 R'RELA TTG
.ENDC
..PUSH 0, $T
$I$=1
.ENDM .IFOPR
.MACRO .IS Q1, Q2, QB, QT
.IIF DIF , .ERROR ; Синтаксическая ошибка IF : 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 <#1> .EMIT
.IIF NE $E$ .MEXIT
.IIF IDN .EMIT
.IIF NE $E$ .MEXIT
.EMIT
.ENDM .OPADD
.MACRO .OPSUB V1, V2, V3
.IIF IDN <#1> .EMIT
.IIF NE $E$ .MEXIT
.IIF IDN .EMIT
.IIF NE $E$ .MEXIT
.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 ; Y4 неверная операция
.ENDM .ARITH
.MACRO .SIMPLE X1, X2, X3, X4, X5, X6
.IF DIF , <:=>
.IF DIF , <:W=>
.IF DIF , <:==>
.IF DIF , <:B=>
.ERROR ; X2 неверный оператор присваивания
.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$K$ BBB
$K$L=-1
$K$=-1
.IF LT BBB
.ERROR ; Нет блока цикла
.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$K$ BBB-1
$K$=$K$L
.ENDM $SET$K$
.MACRO JUMPTO AAAA, A, B, C, D, E, F, H, G, I, J, K, L, M, N, O, P, Q, R, S, T, U
.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
$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 оператора - сбрасывается в IF,
; устанавливается в .OR
$I$=0 ; флаг .IFOPR оператора - сбрасывается в начале IF и .GENBR,
; устанавливается в .IFOPR (в .GENBR есть обращения к .IFOPR)
.IF IDN
.IIF NB .LEAVE 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
.IIF NE .L.-1 .GENBR A, BE, C, BB, \$T
.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) ещё не работоспособны
;
.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 обнаружен после оператора 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 обнаружен не в IF операторе
..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 , , $$S=1
.IF GT $$S
..POP $$T, $$T
IF'BB EE, F, G, H
..TAG \$$T, 3
H I, J, K, LL, M, N, O, P, Q, R, S, TE, U, V, W, X, Y, Z
.IFF
..POP $T, $T
IF'BB EE, F, G, H, I, J, K, LL, M, N, O, P, Q, R, S, TE, U, V, W, X, Y, Z
$$S=0
.IIF IDN , , $$S=1
.IIF IDN , , $$S=1
.IF NE $$S
..TAG \$T, 3
$T=$T+1
.ENDC
.ENDC
.ENDM AND
.MACRO ORB EE, F, G, H, I, J, K, LL, M, N, O, P, Q, R, S, TE, U, V, W, X, Y, Z
OR EE, F, G, H, I, J, K, LL, M, N, O, P, Q, R, S, TE, U, V, W, X, Y, Z, B
.ENDM ORB
.MACRO OR 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
.IIF IDN ..POP $T1, $T
.IIF IDN ..POP $T1, $T
IF'BB EE, F, G, H
.IF DIF