IFMACS
(George Source)
- IFMACS.txt
24D6 [ 24XQ [ HERE FOLLOW THE USER MACROS 25CB [ =========================== 25X2 [ 26BL [ 26W= [??? IF SECT DEVT FGN 1 DOC 27*W [ 27TG #MAC IF 28*6 [ == 28SQ [ 29#B [ SETS: 29S2 [ DEPTH UP, ADVANCES THE THREE STACK IDENTIFIERS 2=?L [ CURRENT STRUCTURE = CONDITIONAL 2=R= [ 'THEN' NOT FOUND 2?=W [ 'OR' NOT EXPECTED 2?QG [ COMPILES: 2#=6 [ A JUMP OR BRANCH 2#PQ [ 2*9B #OPT NESTREASON=0 2*P2 #OPT NESTDEPTH=0 2B8L #OPT NESTFLAG=0 2BN= #OPT NESTEITHERS=0 2C7W STRUCTURE 1,ON 2CMG ALTDEPTH +1 2D76 #SKI NESTDEPTH/9 [INCLUDE IF NESTDEPTH 9-16 INCLUSIVE 2DLQ ( 2F6B GOIFALSE NIF7,NIF6,%A,%B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%- 2FL2 P,%Q,%R,%S,%T,%U,%V 2G5L #EXI 2GK= ) 2H4W [ELSE INCLUDE IF NESTDEPTH 1-8 INCLUSIVE 2HJG GOIFALSE NIF2,NIF1,%A,%B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%- 2J46 P,%Q,%R,%S,%T,%U,%V 2JHQ #NOR 2K3B [ 2KH2 [ 2L2L [??? THEN SECT DEVT FGN 1 DOC 2LG= [ 2L^W #MAC THEN 2MFG [ ==== 2M^6 [ 2NDQ [ ENSURES: 2NYB [ DEPTH NON-ZERO 2PD2 [ CURRENT STRUCTURE = CONDITIONAL 2PXL [ 'OR' NOT EXPECTED 2QC= [ 'THEN' NOT FOUND 2QWW [ COMPILES: 2RBG [ 'THEN' LABEL 2RW6 [ 2S*Q #UNS NESTDEPTH 2STB ( 2T*2 STRUCTURE 1,CHECK 2TSL FLAGTEST THEN,0,NOT,0,NOT,THEN 2W#= #ALT NESTFLAG=NESTFLAG^1 2WRW #SKI NESTDEPTH/9 2X?G ( 2XR6 #ALT 20?=NESTDEPTH-9 2Y=Q NESTLABEL NIF6,FREE 2YQB #EXI 2^=2 ) 2^PL #ALT 20?=NESTDEPTH-1 329= NESTLABEL NIF1,FREE 32NW #EXI 338G ) 33N6 !! MEANINGLESS AT NESTING DEPTH ZERO !!! 347Q #NOR 34MB [ 3572 [ 35LL [??? ELSE SECT DEVT FGN 1 DOC 366= [ 36KW #MAC ELSE 375G [ ==== 37K6 [ 384Q [ DEPTH NON-ZERO 38JB [ CURRENT STRUCTURE = CONDITIONAL 3942 [ 'OR' NOT EXPECTED 39HL [ 'THEN' FOUND 3=3= [ COMPILES: 3=GW [ BRN TO END OF CONDITIONAL 3?2G [ 'ELSE' LABEL 3?G6 [ 3?^Q #UNS NESTDEPTH 3#FB ( 3#^2 STRUCTURE 1,CHECK 3*DL FLAGTEST ELSE,0,NOT,1,,THEN 3*Y= #SKI NESTDEPTH/9 [INCLUDE IF NESTDEPTH 9-16 INCLUSIVE 3BCW ( 3BXG #ALT 20?=NESTDEPTH-9 3CC6 NESTBRANCH RN,NIF8 3CWQ #ALT 20?=NESTDEPTH-9 3DBB NESTLABEL NIF7,FRE 3DW2 #EXI 3F*L ) 3FT= #ALT 20?=NESTDEPTH-1 3G#W NESTBRANCH RN,NIF3 3GSG #ALT 20?=NESTDEPTH-1 3H#6 NESTLABEL NIF2,FRE 3HRQ #EXI 3J?B ) 3JR2 !! MEANINGLESS AT NESTING DEPTH ZERO !! 3K=L #NOR 3KQ= [ 3L9W [ 3LPG [??? FI SECT DEVT FGN 1 DOC 3M96 [ 3MNQ #MAC FI 3N8B [ == 3NN2 [ 3P7L [ ENSURES: 3PM= [ DEPTH NON-ZERO 3Q6W [ CURRENT STRUCTURE = CONDITIONAL 3QLG [ 'OR' NOT EXPECTED 3R66 [ 'THEN' FOUND 3RKQ [ COMPILES: 3S5B [ 'ELSE' LABEL 3SK2 [ LABEL FOR END OF CONDITIONAL 3T4L [ SETS: 3TJ= [ DEPTH DOWN, RETRACTS THE THREE STACK IDENTIFIERS 3W3W [ 3WHG #UNS NESTDEPTH 3X36 ( 3XGQ STRUCTURE 1,OFF 3Y2B FLAGTEST FI,0,NOT,1,,THEN 3YG2 #SKI NESTDEPTH/9 [INCLUDE IF NESTDEPTH 9-16 INCLUSIVE 3Y^L ( 3^F= #ALT 20?=NESTDEPTH-9 3^YW NESTLABEL NIF7,FREE,NIF8,FREE 42DG ALTDEPTH -1 42Y6 #EXI 43CQ ) 43XB [ELSE INCLUDE IF NESTDEPTH 1-8 INCLUSIVE 44C2 #ALT 20?=NESTDEPTH-1 44WL NESTLABEL NIF2,FREE,NIF3,FREE 45B= ALTDEPTH -1 45TW #EXI 46*G ) 46T6 !! MEANINGLESS AT NESTING DEPTH ZERO !! 47#Q #NOR 47SB [ 48#2 [ 48RL [??? ELSF SECT DEVT FGN 1 DOC 49?= [ 49QW #MAC ELSF 4==G [ ==== 4=Q6 [ 4?9Q [ ENSURES: 4?PB [ DEPTH NON-ZERO 4#92 [ CURRENT STRUCTURE = CONDITIONAL 4#NL [ 'OR' NOT EXPECTED 4*8= [ 'THEN' FOUND 4*MW [ SETS: 4B7G [ 'THEN' NOT FOUND 4BM6 [ COMPILES: 4C6Q [ BRN TO END OF CONDITIONAL 4CLB [ 'ELSE' LABEL 4D62 [ A JUMP OR BRANCH 4DKL [ 4F5= #UNS NESTDEPTH 4FJW ( 4G4G STRUCTURE 1,CHECK 4GJ6 FLAGTEST ELSF,0,NOT,1,,THEN 4H3Q #ALT NESTFLAG=NESTFLAG$1 [CLEAR 'THEN' 4HHB #SKI NESTDEPTH/9 4J32 ( 4JGL #ALT 20?=NESTDEPTH-9 4K2= NESTBRANCH RN,NIF8 4KFW #ALT 20?=NESTDEPTH-9 4K^G NESTLABEL NIF7,FREE 4LF6 #ALT 20?=NESTDEPTH-9 4LYQ GOIFALSE NIF7,NIF6,%A,%B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%- 4MDB P,%Q,%R,%S,%T,%U,%V 4MY2 #EXI 4NCL ) 4NX= #ALT 20?=NESTDEPTH-1 4PBW NESTBRANCH RN,NIF3 4PWG #ALT 20?=NESTDEPTH-1 4QB6 NESTLABEL NIF2,FREE 4QTQ #ALT 20?=NESTDEPTH-1 4R*B GOIFALSE NIF2,NIF1,%A,%B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%- 4RT2 P,%Q,%R,%S,%T,%U,%V 4S#L #EXI 4SS= ) 4T?W !! MEANINGLESS AT NESTING DEPTH ZERO !! 4TRG #NOR 4W?6 [ 4WQQ [ 4X=B [??? OR SECT DEVT FGN 1 DOC 4XQ2 [ 4Y9L #MAC OR 4YP= [ == 4^8W [ 4^NG [ ENSURES: 5286 [ DEPTH NON-ZERO 52MQ [ 'THEN' / 'DO' NOT FOUND 537B [ 'OR' EXPECTED 53M2 [ COMPILES: 546L [ A JUMP OR BRANCH 54L= [ LABEL FOR START OF NEXT CONDITION STEP 555W [ 55KG #UNS NESTDEPTH 5656 ( 56JQ FLAGTEST OR,1,,0,NOT,THEN/DO 574B #ALT NESTEITHERS=NESTEITHERS$1 [CLEAR 'EITHER' 57J2 #SKI NESTDEPTH/9 583L ( 58H= GOIFALSE NIF7,NIF6,%A,%B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%- 592W P,%Q,%R,%S,%T,%U,%V 59GG #ALT 20?=NESTDEPTH-9 5=26 #STR EITHER,%A 5=FQ ( 5=^B NESTLABEL NIF6,FREE 5?F2 #EXI 5?YL ) 5#D= NESTLABEL NIF7,FREE 5#XW #EXI 5*CG ) 5*X6 GOIFALSE NIF2,NIF1,%A,%B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%- 5BBQ P,%Q,%R,%S,%T,%U,%V 5BWB #ALT 20?=NESTDEPTH-1 5CB2 #STR EITHER,%A 5CTL ( 5D*= NESTLABEL NIF1,FREE 5DSW #EXI 5F#G ) 5FS6 NESTLABEL NIF2,FREE 5G?Q #EXI 5GRB ) 5H?2 !! MEANINGLESS AT NESTING DEPTH ZERO !! 5HQL #NOR 5J== [ 5JPW [ 5K9G [??? AND SECT DEVT FGN 1 DOC 5KP6 [ 5L8Q #MAC AND 5LNB [ === 5M82 [ 5MML [ ENSURES: 5N7= [ DEPTH NON-ZERO 5NLW [ 'THEN' / 'DO' NOT FOUND 5P6G [ 'OR' EXPECTED 5PL6 [ COMPILES: 5Q5Q [ A JUMP OR BRANCH 5QKB [ LABEL FOR START OF NEXT CONDITION STEP 5R52 [ 5RJL #UNS NESTDEPTH 5S4= ( 5SHW FLAGTEST AND,0,NOT,0,NOT,THEN/DO 5T3G #SKI NESTDEPTH/9 5TH6 ( 5W2Q GOIFALSE NIF7,NIF6,%A,%B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%- 5WGB P,%Q,%R,%S,%T,%U,%V 5X22 #ALT 20?=NESTDEPTH-9 5XFL #STR EITHER,%A 5X^= ( 5YDW NESTLABEL NIF6,FREE 5YYG #EXI 5^D6 ) 5^XQ NESTLABEL NIF7,FREE 62CB #EXI 62X2 ) 63BL GOIFALSE NIF2,NIF1,%A,%B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%- 63W= P,%Q,%R,%S,%T,%U,%V 64*W #ALT 20?=NESTDEPTH-1 64TG #STR EITHER,%A 65*6 ( 65SQ NESTLABEL NIF1,FREE 66#B #EXI 66S2 ) 67?L NESTLABEL NIF2,FREE 67R= #EXI 68=W ) 68QG !! MEANINGLESS AT NESTING DEPTH ZERO !! 69=6 #NOR 69PQ [ 6=9B [ 6=P2 # 6?8L [??? WHILE SECT DEVT FGN 1 DOC 6?N= [ 6#7W #MAC WHILE 6#MG [ ===== 6*76 [ 6*LQ [ SETS: 6B6B [ DEPTH UP, ADVANCES THE THREE STACK IDENTIFIERS 6BL2 [ CURRENT STUCTURE = ITERATION 6C5L [ 'DO' NOT FOUND 6CK= [ 'OR' NOT EXPECTED 6D4W [ COMPILES: 6DJG [ LABEL FOR START OF ITERATION 6F46 [ A JUMP OR BRANCH 6FHQ [ 6G3B #OPT NESTREASON=0 6GH2 #OPT NESTDEPTH=0 6H2L #OPT NESTFLAG=0 6HG= #OPT NESTEITHERS=0 6H^W STRUCTURE 0,ON 6JFG ALTDEPTH +1 6J^6 #SKI NESTDEPTH/9 [INCLUDE IF NESTDEPTH 9-16 INCLUSIVE 6KDQ ( 6KYB #ALT 20?=NESTDEPTH-9 6LD2 NESTLABEL NIF5 6LXL GOIFALSE NIF7,NIF6,%A,%B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%- 6MC= P,%Q,%R,%S,%T,%U,%V 6MWW #EXI 6NBG ) 6NW6 #ALT 20?=NESTDEPTH-1 6P*Q NESTLABEL NIF0 6PTB GOIFALSE NIF2,NIF1,%A,%B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%- 6Q*2 P,%Q,%R,%S,%T,%U,%V 6QSL #NOR 6R#= [ 6RRW [ 6S?G [??? DO SECT DEVT FGN 1 DOC 6SR6 [ 6T=Q #MAC DO 6TQB [ == 6W=2 [ 6WPL [ (FOLLOWING 'WHILE') 6X9= [ ENSURES: 6XNW [ 'DO' NOT FOUND 6Y8G [ 'OR' NOT EXPECTED 6YN6 [ CURRENT STUCTURE = ITERATION 6^7Q [ SETS: 6^MB [ 'DO' FOUND 7272 [ COMPILES: 72LL [ LABEL FOR START OF ITERATION BODY 736= [ 73KW [ (NOT FOLLOWING 'WHILE') 745G [ SETS: 74K6 [ DEPTH UP, ADVANCES THE THREE STACK IDENTIFIERS 754Q [ CURRENT STUCTURE = ITERATION 75JB [ 'DO' FOUND 7642 [ 'OR' NOT EXPECTED 76HL [ COMPILES: 773= [ LABEL FOR START OF ITERATION 77GW [ 782G #UNS NESTDEPTH 78G6 ( 78^Q #SKI NESTFLAG^NESTREASON&1<1$1 79FB ( [IF FOLLOWS 'WHILE' 79^2 FLAGTEST DO,0,NOT,0,,A CATASTROPHE 7=DL #ALT NESTFLAG=NESTFLAG^1 [SET 'DO' 7=Y= STRUCTURE 0,CHECK 7?CW #SKI NESTDEPTH/9 7?XG ( 7#C6 #ALT 20?=NESTDEPTH-9 7#WQ NESTLABEL NIF6,FREE 7*BB #EXI 7*W2 ) 7B*L #ALT 20?=NESTDEPTH-1 7BT= NESTLABEL NIF1,FREE 7C#W #EXI 7CSG ) 7D#6 ) [IF DOESN'T FOLLOW 'WHILE' 7DRQ #OPT NESTREASON=0 7F?B #OPT NESTFLAG=0 7FR2 #OPT NESTDEPTH=0 7G=L #OPT NESTEITHERS=0 7GQ= STRUCTURE 0,ON 7H9W ALTDEPTH +1 7HPG #ALT NESTFLAG=NESTFLAG^1 [SET 'DO' 7J96 #SKI NESTDEPTH/9 7JNQ ( 7K8B #ALT 20?=NESTDEPTH-9 7KN2 NESTLABEL NIF5 7L7L #EXI 7LM= ) 7M6W #ALT 20?=NESTDEPTH-1 7MLG NESTLABEL NIF0 7N66 #NOR 7NKQ [ 7P5B [ 7PK2 [??? REPEAT SECT DEVT FGN 1 DOC 7Q4L [ 7QJ= #MAC REPEAT 7R3W [ ====== 7RHG [ 7S36 [ ENSURES: 7SGQ [ DEPTH NON-ZERO 7T2B [ CURRENT STUCTURE = ITERATION 7TG2 [ 'DO' FOUND 7T^L [ 'OR' NOT EXPECTED 7WF= [ COMPILES: 7WYW [ A JUMP OR BRANCH 7XDG [ LABEL FOR END OF ITERATION 7XY6 [ SETS: 7YCQ [ DEPTH DOWN, RETRACTS THE THREE STACK IDENTIFIERS 7YXB [ 7^C2 #UNS NESTDEPTH 7^WL ( 82B= STRUCTURE 0,OFF 82TW FLAGTEST REPEAT,0,NOT,1,,DO 83*G #STR UNTIL,%A 83T6 ( 84#Q #SKI NESTDEPTH/9 [INCLUDE IF NESTDEPTH 9-16 INCLUSIVE 84SB ( 85#2 #ALT 20?=NESTDEPTH-9 85RL #STR %A 86?= NESTFBRANCH %A,NIF5 86QW #STR %A 87=G #SKI 87Q6 NESTFBRANCH RN,NIF5 889Q #ALT 20?=NESTDEPTH-9 88PB NESTLABEL NIF7,FREE 8992 #ALT 20?=NESTDEPTH-9 89NL ALTDEPTH -1 8=8= #EXI 8=MW ) 8?7G #ALT 20?=NESTDEPTH-1 8?M6 #STR %A 8#6Q NESTFBRANCH %A,NIF0 8#LB #STR %A 8*62 #SKI 8*KL NESTFBRANCH RN,NIF0 8B5= #ALT 20?=NESTDEPTH-1 8BJW NESTLABEL NIF2,FREE 8C4G #ALT 20?=NESTDEPTH-1 8CJ6 ALTDEPTH -1 8D3Q #EXI 8DHB ) 8F32 #SKI NESTDEPTH/9 8FGL ( 8G2= GOIFALSE NIF5,NIF5,%B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%P,%- 8GFW Q,%R,%S,%T,%U 8G^G #ALT 20?=NESTDEPTH-9 8HF6 #ALT 21?=20? 8HYQ NESTLABEL NIF7,FREE 8JDB #ALT 20?=21? 8JY2 NESTFREE NIF5 8KCL ALTDEPTH -1 8KX= #EXI 8LBW ) 8LWG GOIFALSE NIF0,NIF0,%B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%P,%- 8MB6 Q,%R,%S,%T,%U 8MTQ #ALT 20?=NESTDEPTH-1 8N*B #ALT 21?=20? 8NT2 NESTLABEL NIF2,FREE 8P#L #ALT 20?=21? 8PS= NESTFREE NIF0 8Q?W ALTDEPTH -1 8QRG #EXI 8R?6 ) 8RQQ !! MEANINGLESS AT NESTING DEPTH ZERO !! 8S=B #NOR 8SQ2 [ 8T9L [ 8T9W ...[??? IFR SECT COMM FGN 1 DOC 8T=6 ...[ 8T=B ...#MAC IFR 8T=L ...[ === 8T=W ...[ 8T?6 ...[ CONTRACTION OF 'IF EITHER' 8T?B ...[ 8T?L ... IF EITHER,%A,%B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%P, - 8T?W ... %Q,%R,%S,%T 8T#6 ...#NOR 8T#B ...[ 8T#L ...[ 8T#W ...[??? ANDR SECT COMM FGN 1 DOC 8T*6 ...[ 8T*B ...#MAC ANDR 8T*L ...[ ==== 8T*W ...[ 8TB6 ...[ CONTRACTION OF 'AND EITHER' 8TBB ...[ 8TBL ... AND EITHER,%A,%B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%P, - 8TBW ... %Q,%R,%S,%T 8TC6 ...#NOR 8TCB ...[ 8TCL ...[ 8TCW ...[??? ORR SECT COMM FGN 1 DOC 8TD6 ...[ 8TDB ...#MAC ORR 8TDL ...[ === 8TDW ...[ 8TF6 ...[ CONTRACTION OF 'OR EITHER' 8TFB ...[ 8TFL ... OR EITHER,%A,%B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%P, - 8TFW ... %Q,%R,%S,%T 8TG6 ...#NOR 8TGB ...[ 8TGL ...[ 8TGW ...[??? ELSFR SECT COMM FGN 1 DOC 8TH6 ...[ 8THB ...#MAC ELSFR 8THL ...[ ===== 8THW ...[ 8TJ6 ...[ CONTRACTION OF 'ELSF EITHER' 8TJB ...[ 8TJL ... ELSF EITHER,%A,%B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%P, - 8TJW ... %Q,%R,%S,%T 8TK6 ...#NOR 8TKB ...[ 8TKL ...[ 8TKW ...[??? WHILER SECT COMM FGN 1 DOC 8TL6 ...[ 8TLB ...#MAC WHILER 8TLL ...[ ====== 8TLW ...[ 8TM6 ...[ CONTRACTION OF 'WHILE EITHER' 8TMB ...[ 8TML ... WHILE EITHER,%A,%B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%P, - 8TMW ... %Q,%R,%S,%T 8TN6 ...#NOR 8TNB ...[ 8TNL ...[ 8TP= [ HERE FOLLOW THE UTILITY MACROS 8W8W [ ================================ 8WNG [ 8X86 [ 8XMQ [??? BRANCHIF SECT DEVT FGN 1 DOC 8Y7B [ 8YM2 #MAC BRANCHIF 8^6L [ ======== 8^L= [ 925W [ 92KG [ %A - LABEL ROOT 9356 [ %B - BRANCH DEFINER 93JQ [ %C - (OPTIONAL) ACCUMULATOR, OR STORE LOCATION TO BE LOADED INTO X0 944B [ (ONLY USED FOR VISIBLE REGISTER DEFINERS) 94J2 [ %D - (OPTIONAL) OPERAND FOR MACRO BRANCH DEFINER 953L [ 95H= [ LOADS X0 IF NECESSARY, SETS UP THE BRANCH AND CALLS 'NESTBRANCH' TO 962W [ PUT THE APPROPRIATE NUMBER (NESTDEPTH MOD 9, HELD IN 20?) OF N'S AT 96GG [ THE START OF THE LABEL ROOT 9726 [ 97FQ #STR %C 97^B ( 98F2 #ACC %C 98YL ( 99D= LDX 0 %C 99XW BRANCHIF %A,%B,0,%D 9=CG #EXI 9=X6 ) 9?BQ ) 9?WB #ALT 20?=NESTDEPTH-1 9#B2 #SKI NESTDEPTH/9 9#TL #ALT 20?=20?-8 9**= #STR %D 9*SW ( 9B#G NESTBRANCH X%B %C %D,%A 9BS6 #EXI 9C?Q ) 9CRB NESTBRANCH %B %C,%A 9D?2 #NOR 9DQL [ 9F== [ 9FPW [??? GOIFALSE SECT DEVT FGN 1 DOC 9G9G [ 9GP6 #MAC GOIFALSE 9H8Q [ ======== 9HNB [ 9J82 [ 9JML [ %A - LABEL ROOT FOR STANDARD JUMP 9K7= [ %B - LABEL ROOT FOR IF 'EITHER' GIVEN, I.E. 'OR' EXPECTED TO FOLLOW 9KLW [ %C ... PARAMETERS TO THE CALLING USER LEVEL MACRO 9L6G [ 9LL6 [ IF 'EITHER' GIVEN THEN 9M5Q ...[ SETS 'OR EXPECTED' IN 'NESTEITHERS' 9MKB [ CALLS 'GOIFTRUE' WITHOUT THE 'EITHER' AND WITH %A, %B REVERSED 9N52 [ ELSE INVERTS JUMP DIRECTION BY 'IFN<CONDITION DEFINER>' MACRO 9NJL [ 9P4= #STR BOTH,%C ['BOTH' HAS NO EFFECT 9PHW #SKI 9Q3G ( 9QH6 GOIFALSE %A,%B,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%P,%Q,%R,%S,%T- 9R2Q ,%U,%V 9RGB #EXI 9S22 ) 9SFL #STR EITHER,%C ['EITHER' CHANGES JUMP 9S^= #SKI 9TDW ( 9TYG #ALT NESTEITHERS=NESTEITHERS^1 [SET 'EITHER' 9WD6 GOIFTRUE %B,%A,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%P,%Q,%R,%S,%T- 9WXQ ,%U,%V 9XCB #EXI 9XX2 ) 9YBL #ACC %C 9YW= ( 9^*W #STR +,%C 9^TG ( =2*6 IFN%C %A,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%P,%Q,%R,%S,%T,%U- =2SQ ,%V,%W =3#B [ E.G. IFNCS NIF2 =3S2 [ OR IFNBS NIF1,2,BIT1 =4?L #EXI =4R= ) =5=W ) =5QG IFN%D %A,%C,%E =6=6 [ E.G. IFNGE NIF1,0,GSIGN =6PQ #NOR =79B [ =7P2 [ =88L [??? GOIFTRUE SECT DEVT FGN 1 DOC =8N= [ =97W #MAC GOIFTRUE =9MG [ ======== ==76 [ ==LQ [ =?6B [ %A - LABEL ROOT FOR STANDARD JUMP =?L2 [ %B - LABEL ROOT FOR IF 'EITHER' GIVEN, I.E. 'OR' EXPECTED TO FOLLOW =#5L [ %C ... PARAMETERS TO THE CALLING USER LEVEL MACRO =#K= [ =*4W [ IF 'EITHER' GIVEN THEN =*JG ...[ SETS 'OR EXPECTED' IN 'NESTEITHERS' =B46 [ CALLS 'GOIFALSE' WITHOUT THE 'EITHER' AND WITH %A, %B REVERSED =BHQ [ ELSE CALLS 'JUMPIF' OR 'BRANCHIF' TO COMPILE THE BRANCH =C3B [ =CH2 #STR BOTH,%C ['BOTH' HAS NO EFFECT =D2L #SKI =DG= ( =D^W GOIFTRUE %A,%B,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%P,%Q,%R,%S,%T- =FFG ,%U,%V =F^6 #EXI =GDQ ) =GYB #STR EITHER,%C ['EITHER' CHANGES JUMP =HD2 #SKI =HXL ( =JC= #ALT NESTEITHERS=NESTEITHERS^1 [SET 'EITHER' =JWW GOIFALSE %B,%A,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%P,%Q,%R,%S,%T- =KBG ,%U,%V =KW6 #EXI =L*Q ) =LTB #ACC %C =M*2 ( =MSL #STR +,%C =N#= ( =NRW #STR %D =P?G ( =PR6 JUMPIF %C,%A,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%P,%Q,%R,%S,%T- =Q=Q ,%U,%V,%W =QQB [ E.G. JUMPIF MBS,NIF2,2,ENPR,FSTAR =R=2 #EXI =RPL ) =S9= BRANCHIF %A,%C =SNW [ E.G. BRANCHIF NIF1,CS =T8G #EXI =TN6 ) =W7Q ) =WMB BRANCHIF %A,%D,%C,%E =X72 [ E.G. BRANCHIF NIF2,GE,0,GSIGN =XLL #NOR =Y6= [ =YKW [ =^5G [??? NESTJUMP SECT DEVT FGN 1 DOC =^K6 [ ?24Q #MAC NESTJUMP ?2JB [ ======== ?342 [ ?3HL [ ?43= [ %A - LABEL ROOT ?4GW [ %B - JUMP CONDITION DEFINER ?52G [ %C - PARAMETERS TO JUMP CONDITION DEFINER ?5G6 [ ?5^Q [ PREFIXES THE LABEL ROOT WITH 20? N'S AND SETS UP THE JUMP ?6FB [ FOR COMPILATION ?6^2 [ ?7DL #SKI 20? ?7Y= ( ?8CW #ALT 20?=20?-1 ?8XG NESTJUMP N%A,%B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%P,%Q,%R,%- ?9C6 S,%T,%U,%V ?9WQ #EXI ?=BB ) ?=W2 J%B %A,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%P,%Q,%R,%S,%T- ??*L ,%U,%V ??T= #NOR ?##W [ ?#SG [ ?*#6 [??? JUMPIF SECT DEVT FGN 1 DOC ?*RQ [ ?B?B #MAC JUMPIF ?BR2 [ ====== ?C=L [ ?CQ= [ ?D9W [ %A - JUMP CONDITION DEFINER ?DPG [ %B - LABEL ROOT ?F96 [ %C - PARAMETERS TO JUMP CONDITION DEFINER ?FNQ [ ?G8B [ CALLS 'NESTJUMP' TO PUT THE APPROPRIATE NUMBER (NESTDEPTH MOD 9, ?GN2 [ HELD IN 20?) OF N'S AT THE START OF THE LABEL ROOT AND COMPILE THE ?H7L [ JUMP MACRO ?HM= [ ?HND ...#STR BUSY,%A ?HPL ...#SKI ?HQS ...( ?HS2 ... JUMPIF INUSE,%B,%C ?HT8 ...#EXI ?HWB ...) ?HXJ ...#STR UNBUSY,%A ?HYQ ...#SKI ?H^Y ...( ?J36 ... JUMPIF NOTINUSE,%B,%C ?J4# ...#EXI ?J5G ...) ?J6W #ALT 20?=NESTDEPTH-1 ?JLG #SKI NESTDEPTH/9 ?K66 #ALT 20?=20?-8 ?KKQ NESTJUMP %B,%A,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%P,%Q,%R,%S- ?L5B ,%T,%U,%V ?LK2 #NOR ?M4L [ ?MJ= [ ?N3W [??? NESTBRANCH SECT DEVT FGN 1 DOC ?NHG [ ?P36 #MAC NESTBRANCH ?PGQ [ ========== ?Q2B [ ?QG2 [ ?Q^L [ %A - BRANCH ROOT, E.G. 'CC' OR 'ZE 7' OR 'XGE 5 BCOUNT' ?RF= [ %B - LABEL ROOT ?RYW [ ?SDG [ PREFIXES THE LABEL ROOT WITH 20? N'S AND SETS UP THE BRANCH OR ?SY6 [ BRANCH MACRO FOR COMPILATION ?TCQ [ ?TXB #SKI 20? ?WC2 ( ?WWL #ALT 20?=20?-1 ?XB= NESTBRANCH %A,N%B ?XTW #EXI ?Y*G ) ?YT6 #STR X,%A ?^#Q ( ?^SB B%A %B #2#2 #EXI #2RL ) #3?= B%A,%B #3QW #NOR #4=G [ #4Q6 [ #59Q [??? NESTFBRANCH SECT DEVT FGN 1 DOC #5PB [ #692 #MAC NESTFBRANCH #6NL [ =========== #78= [ #7MW [ #87G [ AS NESTBRANCH ABOVE, BUT FREES THE LABEL AFTER COMPILING THE BRANCH #8M6 [ (SAVES AN EXTRA CALL - TO NESTFREE) #96Q [ #9LB #SKI 20? #=62 ( #=KL #ALT 20?=20?-1 #?5= NESTFBRANCH %A,N%B #?JW #EXI ##4G ) ##J6 #STR X,%A #*3Q ( #*HB B%A %B #B32 #FRE %B #BGL #EXI #C2= ) #CFW B%A,%B #C^G #FRE %B #DF6 #NOR #DYQ [ #FDB [ #FY2 [??? NESTFREE SECT DEVT FGN 1 DOC #GCL [ #GX= #MAC NESTFREE #HBW [ ======== #HWG [ #JB6 [ #JTQ [ %A - LABEL ROOT #K*B [ #KT2 [ PREFIXES %A WITH 20? N'S AND #FRE'S THE RESULT #L#L [ #LS= #SKI 20? #M?W ( #MRG #ALT 20?=20?-1 #N?6 NESTFREE N%A #NQQ #EXI #P=B ) #PQ2 #FRE %A #Q9L #NOR #QP= [ #R8W [ #RNG [??? NESTLABEL SECT DEVT FGN 1 DOC #S86 [ #SMQ #MAC NESTLABEL #T7B [ ========= #TM2 [ #W6L [ #WL= [ %A - LABEL ROOT #X5W [ #XKG [ PREFIXES %A WITH 20? N'S AND USES THE RESULT AS A LABEL #Y56 [ IF IDENTIFIER 'NOIFLABELS' IS SET NON-ZERO THEN THIS IS DONE #YJQ [ BY #DEF LABEL=CURRENT WORD ADDRESS (TO AVOID SHOWING LABELS #^4B [ ON THE COMPILATION LISTING) #^J2 [ *23L #SKI 20? *2H= ( *32W #ALT 20?=20?-1 *3GG NESTLABEL N%A,%B,N%C,%D *426 #EXI *4FQ ) *4^B #UNS NOIFLABELS *5F2 #DEF %A=0?+37? *5YL #UNS NOIFLABELS *6D= #SKI *6XW %A *7CG #STR %B *7X6 #FRE %A *8BQ #STR %C,%A *8WB ( *9B2 #UNS NOIFLABELS *9TL #DEF %C=0?+37? *=*= #UNS NOIFLABELS *=SW #SKI *?#G %C *?S6 #STR %D *#?Q #FRE %C *#RB ) **?2 #NOR **QL [ *B== [ *BPW [??? STRUCTURE SECT DEVT FGN 1 DOC *C9G [ *CP6 #MAC STRUCTURE *D8Q [ ========= *DNB [ *F82 [ *FML [ %A - 1 OR 0 (1 => CONDITIONAL, 0 => ITERATION) *G7= [ %B - 'ON' OR 'OFF' OR 'CHECK' *GLW [ *H6G [ IF 'ON', INCREASES DEPTH OF 'NESTREASON' AND SETS B23 TO %A *HL6 [ IF 'OFF', CHECKS B23 = %A AND DECREASES DEPTH OF 'NESTREASON' ANYWAY *J5Q [ IF 'CHECK', CHECKS B23 = %A *JKB [ GENERATES A DIAGNOSTIC ERROR LINE IF A CHECK FAILS *K52 [ *KJL #STR ON,%B *L4= #SKI *LHW ( *M3G #ALT NESTREASON=NESTREASON@L1+%A *MH6 #EXI *N2Q ) *NGB #STR OFF,%B *P22 #SKI *PFL ( *P^= #SKI NESTREASON&1-%A *QDW ( *QYG !! CLOSING WRONG STRUCTURE !! *RD6 #EXI *RXQ ) *SCB #ALT NESTREASON=NESTREASON@L-1 *SX2 #EXI *TBL ) *TW= #STR CHECK,%B *W*W #SKI *WTG ( *X*6 #SKI NESTREASON&1-%A *XSQ !! IN WRONG STRUCTURE !! *Y#B #EXI *YS2 ) *^?L !! ACTION MUST BE ON, OFF OR CHECK !! *^R= #NOR B2=W [ B2QG [ B3=6 [??? ALTDEPTH SECT DEVT FGN 1 DOC B3PQ [ B49B #MAC ALTDEPTH B4P2 [ ======== B58L [ B5N= [ B67W [ %A - +1 OR -1 B6MG [ B776 [ ALTERS 'NESTDEPTH' AND SHIFTS STACK IDENTIFIERS 'NESTEITHERS' B7LQ [ AND 'NESTFLAG' APPROPRIATELY B86B [ B8L2 #ALT NESTDEPTH=NESTDEPTH%A B95L #STR +,%A B9K= ( B=4W #ALT NESTEITHERS=NESTEITHERS@L-1 B=JG #ALT NESTFLAG=NESTFLAG@L-1 B?46 #EXI B?HQ ) B#3B #ALT NESTEITHERS=NESTEITHERS@L1 B#H2 #ALT NESTFLAG=NESTFLAG@L1 B*2L #NOR B*G= [ B*^W [ BBFG [??? FLAGTEST SECT DEVT FGN 1 DOC BB^6 [ BCDQ #MAC FLAGTEST BCYB [ ======== BDD2 [ BDXL [ BFC= [ %A - NAME OF CALLING USER LEVEL MACRO BFWW [ %B - 1 => 'EITHER' SHOULD HAVE BEEN GIVEN PREVIOUSLY (ELSE 0) BGBG [ %C - 'NOT' OR NULL - USED IN ERROR MESSAGE BGW6 [ %D - 1 => 'THEN' OR 'DO' SHOULD HAVE BEEN GIVEN PREVIOUSLY (ELSE 0) BH*Q [ %E - 'NOT' OR NULL - USED IN ERROR MESSAGE BHTB [ %F - 'THEN', 'DO' OR 'THEN/DO' AS APPROP - USED IN ERROR MESSAGE BJ*2 [ BJSL [ CHECKS THAT B23'S OF 'NESTEITHERS' AND 'NESTFLAG' ARE AS EXPECTED. BK#= [ IF NOT, SETS THEM CORRECTLY AND OUTPUTS A DIAGNOSTIC ERROR MESSAGE BKRW [ BL?G #SKI NESTEITHERS&1-%B BLR6 ( BM=Q !! %A MUST %C FOLLOW 'EITHER' !! BMQB #ALT NESTEITHERS=NESTEITHERS$1 [INVERT B23 BN=2 ) BNPL #SKI NESTFLAG&1-%D BP9= ( BPNW !! %A MUST %E FOLLOW '%F' !! BQ8G #ALT NESTFLAG=NESTFLAG$1 [INVERT B23 BQN6 ) BR7Q #NOR BRMB [ BS72 [ BSLL [ HERE FOLLOW THE SUBSIDIARY MACROS BT6= [ ================================= BTKW [ BW5G [ BWK6 [ DIRECTION INVERSION MACROS, E.G. BX4Q [ IF 0,NZ BXJB [ == BY42 [ -> GOIFALSE NIF2,NIF1,0,NZ BYHL [ -> IFNNZ NIF2,0 B^3= [ -> BRANCHIF NIF2,ZE,0 B^GW [ -> NESTBRANCH ZE 0,NIF2 C22G [ -> BZE 0 NNNNIF2 C2G6 [ == C2^Q [ C3FB [ C3^2 [??? IFNFALSE SECT DEVT FGN 1 DOC C4DL [ C4Y= #MAC IFNFALSE C5CW [ ======== C5XG BRANCHIF %A,TRUE C6C6 #NOR C6WQ [??? IFNTRUE SECT DEVT FGN 1 DOC C7BB [ C7W2 #MAC IFNTRUE C8*L [ ======= C8T= [ I.E. BRN IF FALSE I.E. DO NOTHING C9#W #NOR C9SG [??? BTRUE SECT DEVT FGN 1 DOC C=#6 [ C=RQ #MAC BTRUE C??B [ ===== C?R2 BRN %A C#=L #NOR C#Q= [??? BFALSE SECT DEVT FGN 1 DOC C*9W [ C*PG #MAC BFALSE CB96 [ ====== CBNQ [ I.E. BRN IF FALSE I.E. DO NOTHING CC8B #NOR CC92 ...[??? JINUSE SECT COMM FGN 1 DOC CC9L ...[ CC== ...#MAC JINUSE CC=W ...[ ====== CC?G ... JBUSY %B,%A CC#6 ...#NOR CC#Q ...[??? JNOTINUS SECT COMM FGN 1 DOC CC*B ...[ CCB2 ...#MAC JNOTINUSE CCBL ...[ ========= CCC= ... JUNBUSY %B,%A CCCW ...#NOR CCDG ...[??? IFNBUSY SECT COMM FGN 1 DOC CCF6 ...[ CCFQ ...#MAC IFNBUSY CCGB ...[ ======= CCH2 ... JUMPIF UNBUSY,%A,%B,%C,%D CCHL ...#NOR CCJ= ...[??? IFNUNBUS SECT COMM FGN 1 DOC CCJW ...[ CCKG ...#MAC IFNUNBUSY CCL6 ...[ ========= CCLQ ... JUMPIF BUSY,%A,%B,%C,%D CCMB ...#NOR CCN2 [??? JREP2 SECT DEVT FGN 1 DOC CD7L [ CDM= #MAC JREP2 CF6W [ ===== CFLG LDX 0 ACOMMUNE9(2) CG66 #SKI ANS%B CGKQ SBN 0 ANS%B CH5B BZE 0 %A CHK2 #NOR CJ4L [??? JRPN2 SECT DEVT FGN 1 DOC CJJ= [ CK3W #MAC JRPN2 CKHG [ ===== CL36 LDX 0 ACOMMUNE9(2) CLGQ #SKI ANS%B CM2B SBN 0 ANS%B CMG2 BNZ 0 %A CM^L #NOR CNF= [??? JREP SECT DEVT FGN 1 DOC CNYW [ CPDG #MAC JREP CPY6 [ ==== CQCQ SMO FX2 CQXB LDX 0 ACOMMUNE9 CRC2 #SKI ANS%B CRWL SBN 0 ANS%B CSB= BZE 0 %A CSTW #NOR CT*G [??? JREPN SECT DEVT FGN 1 DOC CTT6 [ CW#Q #MAC JREPN CWSB [ ===== CX#2 SMO FX2 CXRL LDX 0 ACOMMUNE9 CY?= #SKI ANS%B CYQW SBN 0 ANS%B C^=G BNZ 0 %A C^Q6 #NOR D29Q [??? IFNREP2 SECT DEVT FGN 1 DOC D2PB [ D392 #MAC IFNREP2 D3NL [ ======= D48= JUMPIF RPN2,%A,%B D4MW #NOR D57G [??? IFNRPN2 SECT DEVT FGN 1 DOC D5M6 [ D66Q #MAC IFNRPN2 D6LB [ ======= D762 JUMPIF REP2,%A,%B D7KL #NOR D85= [??? IFNREP SECT DEVT FGN 1 DOC D8JW [ D94G #MAC IFNREP D9J6 [ ====== D=3Q JUMPIF REPN,%A,%B D=HB #NOR D?32 [??? IFNREPN SECT DEVT FGN 1 DOC D?GL [ D#2= #MAC IFNREPN D#FW [ ======= D#^G JUMPIF REP,%A,%B D*F6 #NOR D*YQ [??? IFNCS SECT DEVT FGN 1 DOC DBDB [ DBY2 #MAC IFNCS DCCL [ ===== DCX= BRANCHIF %A,CC DDBW #NOR DDWG [??? IFNCC SECT DEVT FGN 1 DOC DFB6 [ DFTQ #MAC IFNCC DG*B [ ===== DGT2 BRANCHIF %A,CS DH#L #NOR DHS= [??? IFNVS SECT DEVT FGN 1 DOC DJ?W [ DJRG #MAC IFNVS DK?6 [ ===== DKQQ BRANCHIF %A,VC DL=B #NOR DLQ2 [??? IFNVC SECT DEVT FGN 1 DOC DM9L [ DMP= #MAC IFNVC DN8W [ ===== DNNG BRANCHIF %A,VS DP86 #NOR DPMQ [??? IFNVSR SECT DEVT FGN 1 DOC DQ7B [ DQM2 #MAC IFNVSR DR6L [ ====== DRL= BRANCHIF %A,VCR DS5W #NOR DSKG [??? IFNVCR SECT DEVT FGN 1 DOC DT56 [ DTJQ #MAC IFNVCR DW4B [ ====== DWJ2 BRANCHIF %A,VSR DX3L #NOR DXH= [??? IFNGE SECT DEVT FGN 1 DOC DY2W [ DYGG #MAC IFNGE D^26 [ ===== D^FQ BRANCHIF %A,L,%B,%C D^^B #NOR F2F2 [??? IFNL SECT DEVT FGN 1 DOC F2YL [ F3D= #MAC IFNL F3XW [ ==== F4CG BRANCHIF %A,GE,%B,%C F4X6 #NOR F5BQ [??? IFNE SECT DEVT FGN 1 DOC F5WB [ F6B2 #MAC IFNE F6TL [ ==== F7*= BRANCHIF %A,U,%B,%C F7SW #NOR F8#G [??? IFNU SECT DEVT FGN 1 DOC F8S6 [ F9?Q #MAC IFNU F9RB [ ==== F=?2 BRANCHIF %A,E,%B,%C F=QL #NOR F?== [??? IFNZE SECT DEVT FGN 1 DOC F?PW [ F#9G #MAC IFNZE F#P6 [ ===== F*8Q BRANCHIF %A,NZ,%B F*NB #NOR FB82 [??? IFNNZ SECT DEVT FGN 1 DOC FBML [ FC7= #MAC IFNNZ FCLW [ ===== FD6G BRANCHIF %A,ZE,%B FDL6 #NOR FF5Q [??? IFNNG SECT DEVT FGN 1 DOC FFKB [ FG52 #MAC IFNNG FGJL [ ===== FH4= BRANCHIF %A,PZ,%B FHHW #NOR FJ3G [??? IFNPZ SECT DEVT FGN 1 DOC FJH6 [ FK2Q #MAC IFNPZ FKGB [ ===== FL22 BRANCHIF %A,NG,%B FLFL #NOR FL^= [??? IFNBS SECT DEVT FGN 1 DOC FMDW [ FMYG #MAC IFNBS FND6 [ ===== FNXQ JUMPIF BC,%A,%B,%C FPCB #NOR FPX2 [??? IFNBC SECT DEVT FGN 1 DOC FQBL [ FQW= #MAC IFNBC FR*W [ ===== FRTG JUMPIF BS,%A,%B,%C FS*6 #NOR FSSQ [??? IFNBSS SECT DEVT FGN 1 DOC FT#B [ FTS2 #MAC IFNBSS FW?L [ ====== FWR= JUMPIF BCS,%A,%B,%C FX=W #NOR FXQG [??? IFNBCS SECT DEVT FGN 1 DOC FY=6 [ FYPQ #MAC IFNBCS F^9B [ ====== F^P2 JUMPIF BSS,%A,%B,%C G28L #NOR G2N= [??? IFNBSC SECT DEVT FGN 1 DOC G37W [ G3MG #MAC IFNBSC G476 [ ====== G4LQ JUMPIF BCC,%A,%B,%C G56B #NOR G5L2 [??? IFNBCC SECT DEVT FGN 1 DOC G65L [ G6K= #MAC IFNBCC G74W [ ====== G7JG JUMPIF BSC,%A,%B,%C G846 #NOR G8HQ [??? IFNBWS SECT DEVT FGN 1 DOC G93B [ G9H2 #MAC IFNBWS G=2L [ ====== G=G= JUMPIF BWC,%A,%B,%C G=^W #NOR G?FG [??? IFNBWC SECT DEVT FGN 1 DOC G?^6 [ G#DQ #MAC IFNBWC G#YB [ ====== G*D2 JUMPIF BWS,%A,%B,%C G*XL #NOR GBC= [??? IFNFZ SECT DEVT FGN 1 DOC GBWW [ GCBG #MAC IFNFZ GCW6 [ ===== GD*Q JUMPIF FNZ,%A,%B,%C GDTB #NOR GF*2 [??? IFNFNZ SECT DEVT FGN 1 DOC GFSL [ GG#= #MAC IFNFNZ GGRW [ ====== GH?G JUMPIF FZ,%A,%B,%C GHR6 #NOR GJ=Q [??? IFNDECFZ SECT DEVT FGN 1 DOC GJQB [ GK=2 #MAC IFNDECFZ GKPL [ ======== GL9= JUMPIF DECFNZ,%A,%B,%C GLNW #NOR GM8G [??? IFNDECFNZ SECT DEVT FGN 1 DOC GMN6 [ GN7Q #MAC IFNDECFNZ GNMB [ ========= GP72 JUMPIF DECFZ,%A,%B,%C GPLL #NOR GQ6= [??? IFNMBS SECT DEVT FGN 1 DOC GQKW [ GR5G #MAC IFNMBS GRK6 [ ====== GS4Q JUMPIF MBAC,%A,%B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%P,%Q,- GSJB %R,%S,%T,%U GT42 #NOR GTHL [??? IFNMBAC SECT DEVT FGN 1 DOC GW3= [ GWGW #MAC IFNMBAC GX2G [ ======= GXG6 JUMPIF MBS,%A,%B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%P,%Q,%- GX^Q R,%S,%T,%U GYFB #NOR GY^2 [??? IFNMBC SECT DEVT FGN 1 DOC G^DL [ G^Y= #MAC IFNMBC H2CW [ ====== H2XG JUMPIF MBAS,%A,%B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%P,%Q,- H3C6 %R,%S,%T,%U H3WQ #NOR H4BB [??? IFNMBAS SECT DEVT FGN 1 DOC H4W2 [ H5*L #MAC IFNMBAS H5T= [ ======= H6#W JUMPIF MBC,%A,%B,%C,%D,%E,%F,%G,%H,%I,%J,%K,%L,%M,%N,%O,%P,%Q,%- H6SG R,%S,%T,%U H7#6 #NOR H7RQ ...[??? IFNENV SECT COMM FGN 1 DOC H8?B ...[ H8R2 ...#MAC IFNENV H9=L ...[ ====== H9Q= ... JUMPIF ENVNOT,%A,%B,%C,%D H=9W ...#NOR H=PG ...[??? IFNENVNO SECT COMM FGN 1 DOC H?96 ...[ H?NQ ...#MAC IFNENVNOT H#8B ...[ ========= H#N2 ... JUMPIF ENV,%A,%B,%C,%D H*7L ...#NOR H*M= ...[ HB6W ...[ HBLG ...[ HC66 ...#SKI HCKQ ...( [********* READY WHEN NEEDED HD5B ...[ HDK2 ...[ HF4L ...[ 'BLOCK' GROUP OF MACROS HFJ= ...[ ======================= HG3W ...[ HGHG ...[ HH36 ...[ HHGQ ...[ HJ2B ...[ HJG2 ...[ A BLOCK IS IN THIS CONTEXT EFFECTIVELY A SUBROUTINE HJ^L ...[ FOR WHICH ONLY ONE CALL IS ALLOWED (SINCE THERE IS HKF= ...[ NO LINK) HKYW ...[ HLDG ...[ IT IS A BLOCK OF CODE STARTED BY 'BLOCK' AND TERMINATED HLY6 ...[ BY 'ENDBLOCK'. THE EQUIVALENT OF CALL IS 'EXECUTE', HMCQ ...[ OF WHICH ONLY ONE IS ALLOWED FOR EACH BLOCK. HMXB ...[ HNC2 ...[ THE EFFECT OF AN EXECUTE IS TO BRN TO THE TOP OF THE HNWL ...[ BLOCK. AT THE END OF THE BLOCK, A BRN IS DONE TO THE HPB= ...[ INSTRUCTION FOLLOWING THE EXECUTE. THUS WE HAVE MERELY HPTW ...[ DISPLACED A BLOCK OF CODE FROM THE MAIN PATH AT THE HQ*G ...[ COST OF TWO INSTRUCTIONS. THE GAIN IN READABILITY OF HQT6 ...[ THE CODE MUST BE BALANCED AGAINST THIS OVERHEAD HR#Q ...[ HRSB ...[ HS#2 ...[ HSRL ...[??? BLOCK SECT COMM FGN 1 DOC HT?= ...[ HTQW ...#MAC BLOCK HW=G ...[ ===== HWQ6 ...[ HX9Q ...[ MERELY A LABEL. ONLY MACROISED FOR READABILITY HXPB ...[ HY92 ...#DEF %A0=0?+37? HYNL ...#NOR H^8= ...[ H^MW ...[ J27G ...[??? ENDBLOCK SECT COMM FGN 1 DOC J2M6 ...[ J36Q ...#MAC ENDBLOCK J3LB ...[ ======== J462 ...[ J4KL ...[ ENSURES THAT IT FOLLOWS A BLOCK-START LABEL FOR J55= ...[ THE BLOCK IN QUESTION. GENERATES A BRN TO THE J5JW ...[ INSTRUCTION FOLLOWING THE 'EXECUTE' FOR THIS BLOCK J64G ...[ J6J6 ...#SKI %A0&0 J73Q ...!! BLOCK %A NOT YET STARTED J7HB ... BRN %A1 J832 ...#NOR J8GL ...[ J92= ...[ J9FW ...[??? EXECUTE SECT COMM FGN 1 DOC J9^G ...[ J=F6 ...#MAC EXECUTE J=YQ ...[ ======= J?DB ...[ J?Y2 ...[ EXECUTES A BLOCK OF CODE DELIMITED BY 'BLOCK' AND J#CL ...[ 'ENDBLOCK' MACROS. GENERATES A BRN TO THE BLOCK, J#X= ...[ AND A RETURN LABEL J*BW ... BRN %A0 J*WG ...#DEF %A1=0?+37? JBB6 ...#NOR JBTQ ...) ^^^^ ...504456400005