(George Source)
Macros used: ACROSS, ALTLENGD, BACKSPACE, BRKINOFF, BXE, BXGE, BXL, BXU, CATMASK, CURTAIL, HUNT2J, HUNTW, MFREEW, MHUNTW, MONOUT, MONOUTX, OUTEXES, OUTMON, OUTNUM, READY, REPEAT, SEG, SEGENTRY, SETUPCORE, STEP, TESTBRKIN, TRACE, VFREE, VFREEW
22FL SEG SCEDITOR,,KEITH H MARTIN 22^= #LIS K0SCEDITOR>K0ALLGEO>K0GREATGEO 23DW # 23YG # 24D6 # 24XQ # 25CB # IN 25X2 # ** 26BL SEGENTRY K1SCEDITOR,POINTER [OUTPUT POINTER READY 26W= SEGENTRY K2SCEDITOR,OUTPUT [OUTPUT AMXOR:ASCREEN BLOCK 27*W SEGENTRY K3SCEDITOR,REPEAT [REOUTPUT AMXOR:ASCREEN BLOCK 27TG SEGENTRY K4SCEDITOR,SBREAKIN [BREAK IN 28*6 SEGENTRY K5SCEDITOR,START 28SQ # 29#B # 29S2 # OUT 2=?L # *** 2=R= # 2?=W # K1SCEDITAR [DATA 2?QG # K2SCEDITAR [CONTROL+6,+7 2#=6 # K3SCEDITAR [T 2#PQ # K4SCEDITAR [P 2*9B # K5SCEDITAR [E 2*P2 # K6SCEDITAR [F 2B8L # K6SCEDITAR [Q 2BN= # 2C7W # 2CMG # 2D76 # 2DLQ # ================================================================= # 2F6B # 2FL2 # 2G5L # 2GK= # 2H4W SSKATC CATMASK COMMANDS 2HJG SSCOMMA 4H000, 2J46 SSSPACE 4H000 2JHQ SSHASH 4H000# 2K3B SSMINUS 4H000- 2KH2 SST 4H000T 2L2L SSP 4H000P 2LG= SSR 4H000R 2L^W SSQ 4H000Q 2MFG SSE 4H000E 2M^6 SSF 4H000F 2N8Y ...SSI 4H000I 2NDQ SSTEN +10 2NYB SSBITS22 #17777777 2PD2 SSDELIM 16H:;<=>?!"£%&'+/ 2PXL SSMAGICNO +7036875 2QC= SSKATZ CATMASK FORCETYP,BROADCAS 2QWW SSSYN 13HSYNTAX ERROR: 2RBG # 2RW6 SS6 +6 2S*Q SS7 +7 2STB SS8 +8 2T*2 # 2TSL # 2W#= # 2WRW # 2X?G # 2XR6 # ================================================================= # 2Y=Q # 2YQB # 2^=2 # 2^PL # 329= # MONITORING FILE MESSAGE ADDRESSES 32NW SE2MBAFR +ISE2MBAFR 338G SYROTBOTF +ISYROTBOTF 33N6 SYRYBSL +ISYRYBSL 347Q SROTKINA +ISROTKINA 34MB SBTNA +ISBTNA 3572 SYROTEOTF +ISYROTEOTF 35LL SFMNBUITC +ISFMNBUITC 366= SYFYNF +ISYFYNF 36KW SIT +ISIT 375G SNTL +ISNTL 37K6 SEA +ISEA 384Q SEOE +ISEOE 38JB SIFE +ISIFE 3942 # 39HL # 3=3= # 3=GW # 3?2G # ================================================================= # 3?G6 # 3?^Q # 3#FB # 3#^2 # 3*DL # 3*Y= # STEPBACKOLD,STEPBACKNEW SUBROUTINES 3BCW # STEPS BACK TO LINE (X0) IN NEW OR OLD FILE AND 3BXG # RESETS CURRENT LINE NO 3CC6 # 3CWQ # LINK X7 3DBB # 3DW2 # X3 MUST BE PTR TO AMXOR:ASCREEN 3F*L # 3FT= # 3G#W # 3GSG # 3H#6 STEPBACKNEW 3HHY ... SBX 7 FX1 3HRQ LDX 6 ISNCURRENT(3) [CURREN LINE NO 3J?B SBX 6 0 [DIFFERENCE 3JR2 TRACE 6,ISNEWBAK [<<<<<<<<<<>>>>>>>>>> 3K=L BZE 6 STEPBNEX 3KQ= STO 0 ISNCURRENT(3) [RESET 3L9W STEPBNA 3LPG BACKSPACE 0 3M96 BCT 6 STEPBNA 3MNQ LDN 0 0 3N8B CURTAIL 0 [SET APPEND=READ PTR 3NN2 STEPBNEX 3NXS ... ADX 7 FX1 3P7L EXIT 7 0 3PM= # 3Q6W # 3QLG # 3R66 # 3RKQ STEPBACKOLD 3RTJ ... SBX 7 FX1 3S5B LDX 6 ISOCURRENT(3) 3SK2 SBX 6 0 3T4L TRACE 6,ISOLDBAK [<<<<<<<<<>>>>>>>>>> 3TJ= BZE 6 STEPBOEX 3W3W STO 0 ISOCURRENT(3) 3W?N ... BNG 6 STEPBOB [J IF MOVE FORWARDS 3WHG STEPBOA 3X36 BACKSPACE 1 3XGQ BCT 6 STEPBOA 3Y2B STEPBOEX 3Y=8 ... ADX 7 FX1 3YG2 EXIT 7 0 3YHY ...STEPBOB 3YKW ... NGX 6 6 [MAKE +VE COUNT 3YMS ...STEPBOC 3YPQ ... STEP 1 3YRN ... BCT 6 STEPBOC [TO LOOP ON 3YTL ... ADX 7 FX1 3YXJ ... EXIT 7 0 3Y^L # 3^F= # 3^YW # 42DG # 42Y6 # ================================================================= # 43CQ # 43XB # 44C2 # 44WL # 45B= # 45TW # SETLOP SUBROUTINE 46*G # 46T6 # MUST BE CALLED BEFORE OVERWRITING ISMFORM 47#Q # WHEN OUTPUTTING TEXT RDY OR PTR RDY BUT 47SB # NOT FOR ERROR MESSAGES 48#2 # 48RL # CALL ON X7 49?= # 49QW # N.B THE LAST OUTPUT IS THE ONE PRIOR TO THE 4==G # --- ONE ON THE SCREEN NOW OR THE ONE JUST 4=Q6 # ABOUT TO BE OUTPUT 4?9Q # CF LAST OUTPUT - CURRENT OUTPUT 4?PB SETLOP 4#92 LDN 5 ISBITLOP 4#NL ORS 5 ISBITS(3) [SET LAST OUTPUT READY 4*8= LDCT 0 #002 [B7=TEXT READY 4*MW ANDX 0 ISMFORM(3) 4B7G BZE 0 SETLOPX [J IF PTR RDY 4BM6 ERS 5 ISBITS(3) [CLEAR LAST OUTPUT PTR READY 4C6Q SETLOPX 4CLB EXIT 7 0 4D62 # 4DKL # 4F5= # 4FJW # 4G4G # ================================================================= # 4GJ6 # 4H3Q # 4HHB # 4J32 # 4JGL # SCOMMENT SUBROUTINE 4K2= # 4KFW # 4K^G # OUTPUT FIXED MESSAGE ON NEXT FREE LINE 4LF6 # 4LYQ # CALL ON X7 4MDB # EXIT TO CALL+1 4MY2 # 4NCL # X6 PTR TO MESSAGE 4NX= # 4PBW SCOMMENT 4PLN ... SBX 7 FX1 4PWG MHUNTW 3,AMXOR,ASCREEN 4QB6 LDN 0 ISBITR 4QTQ ORS 0 ISBITS(3) 4R*B ERS 0 ISBITS(3) [CLEAR R 4RT2 LDN 0 ISBITLOP 4S#L ANDX 0 ISBITS(3) [LAT OP PTR RDY 4SS= BNZ 0 SCOM1 [J IF SO 4T?W LDX 0 ISMERR(3) 4TRG SRL 0 18 4W?6 SBN 0 3 4WQQ BNZ 0 SCOM1 [J IF ONE ON SCREEN NOW 4X=B LDCT 0 #004 4XQ2 ORS 0 ISMERR(3) [SET CLEAR SCREEN 4Y9L SCOM1 4YP= LDX 5 ISMFORM(3) [SAVE THIS 4^8W LDX 0 ISMERR(3) 4^NG STO 0 ISMFORM(3) 5286 MONOUTX 6 52MQ MHUNTW 3,AMXOR,ASCREEN 537B STO 5 ISMFORM(3) 53M2 LDCT 0 #010 546L ADS 0 ISMERR(3) [LINES+1 54L= LDCT 0 #004 555W ORS 0 ISMERR(3) 55KG ERS 0 ISMERR(3) [CLEAR CLEAR SCREEN 55T# ... ADX 7 FX1 5656 EXIT 7 0 56JQ # 574B # 57J2 # 583L # 58H= # ================================================================= # 592W # 59GG # 5=26 # 5=FQ # 5=^B # NONSPACE SUBROUTINE 5?F2 # PUT NEXT NONSPACE CHAR INTO X0 5?YL # 5#D= # X2 CCM TO INPUT 5#XW # X4 COUNT OF CHS LEFT(MAY BE XERO) 5*CG # 5*X6 # CALL ON X6 5BBQ # EXIT CALL+1 END OF LINE-NO MORE CHARS 5BWB # CALL+2 CH IN X0 5CB2 # 5CTL # 5D*= NONSPACE 5DSW BCHX 2 £ [STEP INPUT 5F#G BZE 4 NONSPACEX [J IF END OF LINE 5FS6 SBN 4 1 5G?Q LDCH 0 0(2) 5GRB BXE 0 SSSPACE(1),NONSPACE [LOOP ON SPACES 5H?2 EXIT 6 1 5HQL NONSPACEX 5J== EXIT 6 0 5JPW # 5K9G # 5KP6 # 5L8Q # 5LNB # ================================================================= # 5M82 # 5MML # 5N7= # 5NLW # 5P6G # NEXT SUBROUTINE 5PL6 # PUT NEXT CHAR INTO X0 5Q5Q # 5QKB # X2 CCM TO INPUT 5R52 # X4 COUNT OF CHS LEFT(MAY BE ZERO) 5RJL # 5S4= # CALL ON X6 5SHW # EXIT CALL+1 END OF LINE-NO MORE CHARS 5T3G # CALL+2 CH IN X0 5TH6 # 5W2Q # 5WGB NEXT 5X22 BCHX 2 £ 5XFL BZE 4 NEXTX 5X^= SBN 4 1 5YDW LDCH 0 0(2) 5YYG EXIT 6 1 5^D6 NEXTX 5^XQ EXIT 6 0 62CB # 62X2 # 63BL # 63W= # 64*W # ================================================================= # 64TG # 65*6 # 65SQ # 66#B # 66S2 # PARAMETER SUBROUTINE 67?L # ANALYSE PARAMETER FOR T OR P 67R= # 68=W # ON ENTRY X2 PTR TO FIRST NON SPACE 68QG # CHAR FOR ANALYSIS 69=6 # ON EXIT X2 PTR TO FIRST CHAR 69PQ # NOT ANALYSED 6=9B # X2=0 IF END OF LIME 6=P2 # 6?8L # X4 RUNNING COUNT OF CHARS LEFT 6?N= # X0 CHAR POINTED TO BY X2 6#7W # X3 PTR TO AMXOR/ASCREEN BLOCK 6#MG # 6*76 # CALL ON X7 6*LQ # EXIT CALL+1 PARAM IN NUMBER FORMAT 6B6B # CALL+2 PARAM IN STRING FORMAT 6BL2 # 6C5L # RESULT IN TO ISPARAMB(3) AS FOLLOWS 6CK= # NUMBERS ISPARAMB B0=1 IF E 6D4W # B1=1 IF BAKCWARDS MOVEMENT CAUSES 6DJG # RUNNING OFF START OF FILE (B) 6F46 # B2-23 LINE NUMBER-ALWAYS ABSOLUTE 6FHQ # ISPARAMB+1 6G3B # STRING ISPARAMB+2 B0=1 IF BACKWARDS 6GH2 # B1-23 COUNT OF CHARS IN STRING 6H2L # ISPARAMB+3) 6HG= # ISPARAMB+4) TEXT OF STRING 6H^W # ISPARAMB+5) 6JFG # 6J^6 # DEFAULT VALUE SHOULD BE SET UP BEFORE ENTRY 6KDQ # 6KYB PARAMETER 6LD2 TRACE 2,ISPARAM [<<<<<<<<<<>>>>>>>>>> 6LXL BXE 0 SSCOMMA(1),PAR4 [J IF NULL 6MC= BXU 0 SSE(1),PARX [J IF NOT E 6MWW LDCT 6 #400 6NBG STO 6 ISPARAMB(3) [SET E 6NW6 CALL 6 NEXT [ 6P*Q STOZ 2 [SET EOL 6PTB BRN PAR84 [MORE CHARS 6Q*2 PARX 6QSL BXU 0 SSHASH(1),PARB [J IF NOT ABSOLUTE 6R#= LDCT 6 #400 6RRW ORX 7 6 [SET # 6S?G CALL 6 NEXT 6SR6 BRN SYNERR 6T=Q PARB 6TQB BXU 0 SSMINUS(1),PART [J IF NOT BACKWARDS 6W=2 BNG 7 SYNERR [ERROR IF - AND # 6WPL LDCT 6 #200 6X9= ORX 7 6 [- NOW SET 6XNW CALL 6 NEXT 6Y8G BRN SYNERR [- WHAT? 6YN6 PART 6^7Q BXGE 0 SSTEN(1),PARQ [J IF NOT NUMBER 6^MB # 7272 # 72LL # 736= # THIS PARAM IS A NUMBER 73KW LDN 5 0 745G LDN 6 0 74K6 SMO FX2 754Q STO 7 AWORK3 [LINK 75JB PAR2 7642 CDB 5 0(2) [INTO 5 AND 6 76HL BCS PAR3 [J IF END OF NO 773= BVSR SSNTL [J IF TOO BIG 77GW STO 6 7 782G CALL 6 NEXT 78G6 BRN PAR4Y [DONE 78^Q LDX 6 7 79FB BRN PAR2 79^2 PAR3 7=DL STO 6 7 7=Y= BRN PARP 7?CW PAR4Y 7?XG STOZ 2 7#C6 # 7#WQ # MAKE ABSOLUTE IF - OR NOT # 7*BB PARP 7*W2 BNZ 5 SSNTL 7B*L LDX 6 7 7BT= SMO FX2 7C#W LDX 7 AWORK3 7CSG BNG 7 PAR8 [J IF # 7D#6 LDCT 5 #200 7DRQ ANDX 5 7 7F?B PAR81 7FR2 ORX 6 5 [SET - OR NOT 7G=L STO 6 ISPARAMB+1(3) 7GQ= TRACE 6,ISNUMREL [<<<<<<<<<<>>>>>>>>>> 7H9W STOZ ISPARAMB(3) [CLEAR 7HPG BRN PAR4 7J96 # 7JNQ # SAVE NUMBER AND FINISH 7K8B PAR8 7KN2 TRACE 6,ISNUMABS [<<<<<<<<<<>>>>>>>>>> 7L7L STO 6 ISPARAMB(3) 7LM= PAR84 7M6W LDCT 6 #400 7MLG STO 6 ISPARAMB+1(3) [SET ABSULOTE 7N66 PAR4 7NKQ ANDX 7 SSBITS22(1) [CLEAR - AND # 7P5B EXIT 7 0 [NUMBER 7PK2 # 7Q4L # 7QJ= # 7R3W # MUST BE STRING IF NOT NUMBER 7RHG PARQ 7S36 BNG 7 SYNERR [ERROR IF # 7SGQ LDN 1 SSDELIM(1) [MUST BE DELIMITOR 7T2B LDCT 6 16 [CHOICE OF 16 7TG2 PARQ6 7T^L LDCH 5 0(1) [NEXT DELIM 7WF= BXE 0 5,PARQ5 [J IF FOUND 7WYW BCHX 1 £ 7XDG BCT 6 PARQ6 [TRY NEXT 7XY6 LDX 1 FX1 7YCQ BRN SYNERR [WHERES THE DELIM? 7YXB # 7^C2 # DELIMITOR FOUND 7^WL PARQ5 82B= SMO FX2 82TW STO 7 AWORK1 [SAVE LINK 83*G LDN 1 ISPARAMB+3(3) [SAVE CHARS HERE 83T6 LDN 7 13 [BUT ONLY 12 84#Q PAR72 84SB CALL 6 NEXT 85#2 BRN SYNERR [NO TERMINATING DELIM 85RL BXE 0 5,PAR99 [J IF DELIM 86?= BCT 7 PAR83 86QW BRN SYNERR [TOO LONG 87=G PAR83 87Q6 DCH 0 0(1) [SAVE CH 889Q BCHX 1 PAR72 88PB # 8992 # NOW CALCULATE LENGTH 89NL PAR99 8=8= LDN 5 13 8=MW SBX 5 7 [=LENGTH 8?7G BZE 5 SYNERR 8?M6 SMO FX2 8#6Q LDX 7 AWORK1 8#LB LDCT 6 #200 8*62 ANDX 6 7 8*KL BZE 6 PAR20 [J IF FORWARDS 8B5= LDCT 6 #400 8BJW ORX 5 6 [SET MINUS 8C4G PAR20 8CJ6 TRACE 5,ISTEXT [<<<<<<<<<<>>>>>>>>>> 8D3Q STO 5 ISPARAMB+2(3) 8DHB # 8F32 # TIDY UP 8FGL CALL 6 NEXT 8G2= STOZ 2 [SET EOL 8GFW LDX 1 FX1 8G^G ANDX 7 SSBITS22(1) 8HF6 EXIT 7 1 [STRING 8HYQ # 8JDB # 8JY2 # 8KCL # 8KX= # ================================================================= # 8LBW # 8LWG # 8MB6 # 8MTQ # 8N*B # REFIND SUBROUTINE 8NT2 # 8P#L # USED BY ALTLEN 8PS= # 8Q?W REFIND 8QRG MHUNTW 2,AMXOR,ASCREEN 8R?6 EXIT 1 0 8RQQ # 8S=B # 8SQ2 # 8T9L # 8TP= # ================================================================= # 8W8W # 8WNG # 8X86 # 8XMQ # 8Y7B # SYNTAX ERROR 8YM2 # 8^6L # 8^L= SYNERR 925W MHUNTW 3,FILE,FRB [FIND BAD COMMAND 92KG TRACE 3,ISYNERR [<<<<<<<<<<>>>>>>>>>> 9356 LDCT 6 #600 93JQ ANDX 6 A1+1(3) 944B BNZ 6 SYNERRB 94J2 ADN 6 1 953L SYNERRB 95H= ADX 6 A1(3) 962W SLC 6 2 96GG SBN 6 12 96J9 ...# 96KY ... MHUNTW 2,AMXOR,ASCREEN 96MM ... LDN 0 80 [LENGTH OF TIP LINE 96PB ... SBX 0 ISTEXTCT(2) [ - LENGTH OF LINE NO 96R5 ... SBN 0 3 [ - "<- " 96SS ... BXL 6 0,SYNERRLEN [J IF WITHIN LIMITS 96WH ... LDX 6 0 [ELSE RESET TO MAX POSSIBLE 96Y= ...SYNERRLEN 9726 LDN 7 13 [LENGTH OF FIXED TEXT 97FQ ADX 7 6 [TOTAL LENGTH OF MESSAGE 97^B LDX 5 7 98F2 ADN 5 3 98YL SRA 5 2 [ROUNDED TO WORDS 99D= SETUPCORE 5,5,CPB,CUNI 99XW ADN 5 A1 [PUT OUTPUT HERE 9=CG LDN 4 SSSYN(1) 9=X6 MVCH 4 13 [FIXED PART 9?BQ MHUNTW 3,FILE,FRB 9?WB LDN 4 A1+2(3) [PTR TO BAD COMMAND 9#B2 SMO 6 9#TL MVCH 4 0 9**= MHUNTW 3,AMXOR,ASCREEN 9*SW LDN 0 ISBITR+ISBITT+ISBITP+ISBITQ+ISBITE+ISBITF 9B#G ORS 0 ISBITS(3) 9BS6 ERS 0 ISBITS(3) 9C?Q LDX 6 ISMFORM(3) 9CRB LDCT 4 #030 9D?2 STO 4 ISMFORM(3) 9DQL LDN 4 #40 [MESSAGE CATEGORY 9F== OUTMON 7,A1,4,CPB,CUNI 9FPW VFREE CPB,CUNI 9G9G MHUNTW 3,AMXOR,ASCREEN 9GP6 STO 6 ISMFORM(3) 9H8Q BRN POINTER 9HNB # 9J82 # 9JML # 9K7= # K5 K5 K5 K5 K5 K5 K5 K5 K5 K5 K5 K5 K5 K5 K5 K5 K5 K5 K5 K5 K5 # 9KLW # 9L6G # 9LL6 START 9M5Q MHUNTW 3,AMXOR,ASCREEN 9MKB LDCT 0 #034 [LINE 3,CLEAR SCREEN 9N52 STO 0 ISMERR(3) 9NJL LDCT 0 #400 9P4= STO 0 ISOPAGE(3) [SET C+7 .. 9PHW STO 0 ISOPREVPAGE(3) [.. NOT ALLOWED 9Q3G STEP 1 9QH6 TESTBRKIN SCOMMANDQ [Q ACTION IF BRK IN 9R2Q BNZ 3 POINTER [J IF NOT EMPTY 9RGB LDX 6 SIFE(1) 9S22 CALL 7 SCOMMENT 9SFL BRN SCOMMANDQ 9S^= # 9TDW # 9TYG # 9WD6 # 9WXQ # K1 K1 K1 K1 K1 K1 K1 K1 K1 K1 K1 K1 K1 K1 K1 K1 K1 K1 K1 K1 K1 # 9XCB # 9XX2 # 9YBL # 9YW= # 9^*W # SET POINTER READY 9^TG # =2*6 # COME HERE WHEN READY FOR NEXT COMMAND =2SQ # =3#B # ALL BITS CLEARED/SET AS APPROPRIATE =3S2 # =4?L # =4R= POINTER =5=W MHUNTW 3,AMXOR,ASCREEN =5QG ALTLENGD 3,ASCREENLEN+2,REFIND =6=6 MHUNTW 3,AMXOR,ASCREEN =6PQ TRACE 3,ISPOINT [<<<<<<<<<<>>>>>>>>>> =79B LDN 0 ISBITCE =7P2 ORS 0 ISBITS(3) [SET COMMAND EXPECTED =88L LDN 0 ISBITF =8N= ANDX 0 ISBITS(3) [F SET? =97W LDN 4 ISBITLC =9MG ORS 4 ISBITS(3) [SET F ALLOWED ==76 BZE 0 PTRX [J IF RIGHT ==LQ ERS 4 ISBITS(3) [ELSE SET FI NVALID =?6B PTRX =?L2 LDN 0 ISBITR+ISBITT+ISBITP+ISBITE+ISBITF+ISBITQ =#5L ORS 0 ISBITS(3) =#K= ERS 0 ISBITS(3) [CLEAR LAST COMMAND =*4W CALL 7 SETLOP =*JG LDCT 0 #010 [SET LINE 1,PTR READY =B46 STO 0 ISMFORM(3) =BHQ LDN 2 ISTEXT(3) [PUT LINE NO HERE =C3B LDX 5 ISOCURRENT(3) [CURRENT OLD FILE NO =CH2 MPY 5 SSMAGICNO(1) =D2L LDN 0 0 [TESTS FOR LEADING ZEROES =DG= LDN 4 7 [ONLY 7 CHS =D^W LDN 7 0 =FFG PTRA =F^6 CBD 5 7 =GDQ DCH 7 0(2) =GYB ADX 0 7 [LEADING ZERO? =HD2 BNZ 0 PTRB [J IF NO MORE =HXL BCT 4 PTRA =JC= BCHX 2 PTRC =JWW PTRB =KBG BCHX 2 £ =KW6 BCT 4 PTRA =L*Q PTRC =LTB SLC 2 2 =M*2 LDN 0 ISTEXT(3) =MSL SLC 0 2 =N#= SBX 2 0 =NRW STO 2 ISTEXTCT(3) [AND DONE =P?G # =PR6 # =Q=Q # =QQB # =R=2 # =RPL # K2 K2 K2 K2 K2 K2 K2 K2 K2 K2 K2 K2 K2 K2 K2 K2 K2 K2 K2 K2 K2 # =S9= # =SNW # =T8G # =TN6 # =W7Q # OUTPUT AMXOR/ASCREEN BLOCK =WMB # =X72 # LINE NO,COL NO,READX BIT MUST BE SET/CLEARED =XLL # BEFORE ENTRY TO THIS ROUTINE =Y6= # =YKW # LAST MESSAGE OUTPUT BIT WILL BE SET/CLEARED =^5G # AS APPROPRIATE =^K6 # ?24Q # CLEAR SCREEN WILL BE SET IF LAST OUTPUT ?2JB # WAS A TEXT READY ?342 # ?3HL # BROADCASTS WILL BE DEALT WITH BY THIS SECTION ONLY ?43= OUTPUT ?4GW VFREEW FILE,FRB ?52G MHUNTW 3,AMXOR,ASCREEN ?5G6 TRACE 3,ISOUTPUT [<<<<<<<<<<>>>>>>>>>> ?5^Q LDCT 0 #002 [B7=1,SUPPRESS READY ?6FB ANDX 0 ISMFORM(3) ?6^2 BNZ 0 OUTSB2 [J IF NOT PTR READY ?7DL # ?7Y= # OUTPUT MUST BE PTR READY ?8CW # OUTPUT FIRST BC IF ANY ?8XG HUNT2J 1,AMXOR,BBC,FX2,OUTSB [J IF NONE,ELSE FIND IT ?9C6 TRACE 1,ISOUTBBC [<<<<<<<<<<>>>>>>>>>> ?9WQ LDX 6 ISMFORM(3) [SAVE OVER OUTPUTING OF BC ?=BB LDCT 5 #002 [LINE 0,COL 0,TEXT RDY ?=W2 LDX 0 ISMERR(3) ??*L SRL 0 18 ??T= SBN 0 3 ?##W BNZ 0 OUTSD [J IF ERROR ON SCREEN ALREADY ?#SG LDX 0 ISBITS(3) ?*#6 ANDN 0 ISBITLOP [LAST 0P PTR READY ?*RQ BNZ 0 OUTSD [J IF SO ?B?B LDCT 5 #006 [LINE 0,COL 0,TEXT RDY,CLEAR SCREEN ?BR2 OUTSD ?C=L STO 5 ISMFORM(3) ?CQ= SMO FX1 ?D9W LDX 5 SSKATZ [CATEGORIES ?DPG OUTMON A1(1),A1+2,5,AMXOR,BBC [OUTPUT BC ?F96 MFREEW AMXOR,BBC ?FNQ MHUNTW 3,AMXOR,ASCREEN ?G8B STO 6 ISMFORM(3) [RESET TO ORIGINAL ?GN2 BRN REPEAT [J TO OUTPUT DATA ?H7L # ?HM= # ?J6W # NOW OUTPUT TEXT IN ASCREEN BLOCK ?JLG OUTSB ?K66 MHUNTW 3,AMXOR,ASCREEN ?KKQ OUTSB2 ?L5B TRACE 3,ISOUTMES [<<<<<<<<<<>>>>>>>>>> ?LK2 LDX 0 ISBITS(3) ?M4L ANDN 0 ISBITLOP [LAST OP PTR READY ?MJ= BNZ 0 OUTSD3 [J IF SO ?N3W LDX 0 ISMERR(3) ?NHG SRL 0 18 ?P36 SBN 0 3 ?PGQ BNZ 0 OUTSD3 [J IF ERROR ON SCREEN ALREADY ?Q2B LDCT 0 #004 [B6=CLEAR SCREEN ?QG2 ORS 0 ISMFORM(3) [AND SET ?Q^L BRN OUTSD3 ?RF= # ?RYW # ?SDG # K3 K3 K3 K3 K3 K3 K3 K3 K3 K3 K3 K3 K3 K3 K3 K3 K3 K3 K3 K3 K3 # ?SY6 # ?TCQ REPEAT ?TMJ ... VFREEW FILE,FRB ?TXB MHUNTW 3,AMXOR,ASCREEN ?WC2 TRACE 3,ISREPEAT [<<<<<<<<<<<<<<<<<<<< ?WWL OUTSD3 ?XB= LDCT 0 #030 [LINE 3,TEXT RDY ?XTW STO 0 ISMERR(3) [LINE 1 FOR ERRORS & COMMENTS ?Y8? ... TRACE ISTEXTCT(3),ISOUTLEN [<<<<<<<<<<>>>>>>>>>> ?YGN ... OUTEXES ISTEXTCT(3),ISTEXT,AMXOR,ASCREEN ?YT6 READY SBREAKIN ?^#Q # ?^SB # #2#2 # #2RL # #3?= # ================================================================= # #3QW # #4=G # #4Q6 # #59Q # #5PB # #692 # DECIDE WHAT TO DO WITH INPUT #6NL # #78= # #7MW MHUNTW 3,FILE,FRB #87G LDX 0 A1(3) #8M6 BNG 0 SDR1 [J IF CONTROL CH #96Q # INPUT IS TEXT #9LB MHUNTW 3,AMXOR,ASCREEN #=62 LDN 0 ISBITCE #=KL ANDX 0 ISBITS(3) [COMMAND EXPECTED? #?5= BNZ 0 SCOMMAND [J IF SO #?JW BRN SDATA [MUST BE DATA ##4G # ACTION KEYS ##J6 SDR1 #FY2 LDX 0 A1(3) #GCL ANDN 0 #7777 #GX= SBN 0 1 #HBW ADN 3 A1+2 #HWG SRC 0 2 #JB6 ADX 3 0 #JTQ LDCH 0 0(3) #K5J ... ANDN 0 #17 [LOOSE ANY SHIFT #K*B TRACE 0,ISACTION [<<<<<<<<<<>>>>>>>>>> #KT2 BXL 0 SS6(1),REPEAT [J IF 0-5 #L#L BXL 0 SS8(1),SCONTROL [J IF 6-7 #LS= BRN REPEAT [ 7-9 #M?W # #MRG # #N?6 # #NQQ # #P=B # #PQ2 # ================================================================= # #Q9L # #QP= # #R8W # #RNG # #S86 # COMMAND ANALYSIS #SMQ # #T7B # NOW WE HAVE A COMMAND #TM2 # OUTMON IT #W6L # SYNTAX CHECK IT (EXCEPT FOR DIRECTION #WL= # OF %A AND %B OF T OR P) #X5W # BRANCH TO SCOMMAND<COMMAND NAME> #XKG # #Y56 # #YJQ SCOMMAND #^4B MHUNTW 3,AMXOR,ASCREEN #^J2 LDN 0 ISBITCE *23L ERS 0 ISBITS(3) [CLEAR CE *2H= HUNTW 2,FILE,FRB [FIND COMMAND *32W TRACE 2,ISCOMAND [<<<<<<<<<<>>>>>>>>>> *3GG LDCT 4 #600 *426 ANDX 4 A1+1(2) *4FQ BNZ 4 SCOMMUP *4^B ADN 4 1 *5F2 SCOMMUP *5YL ADX 4 A1(2) *6D= SLC 4 2 *6XW SBN 4 12 *7CG BZE 4 SETFPTR [J IF NULL *7FP ... LDN 0 80 [LENGTH OF TOP LONE *7HY ... SBX 0 ISTEXTCT(3) [ - LENGTH OF LINE NO *7L7 ... SBN 0 3 [ - "<- " *7NB ... BXL 4 0,SCOMMLENOK [J IF WITHIN LIMITS *7QK ... LDX 4 0 [ELSE RESET TO MAX POSSIBLE *7SS ...SCOMMLENOK *7X6 STO 4 7 [SAVE COUNT *8BQ ADN 2 A1+2-1 *8WB LDCT 6 #600 *9B2 ORX 2 6 [PTR TO LAST CHAR - 1 *9TL CALL 6 NONSPACE [TEST FOR NULL INPUT *=*= BRN SETFPTR [IT WAS *=SW LDX 4 7 [RESTORE COUNT *?#G LDX 5 SSKATC(1) *?S6 OUTMON 4,A1+2,5,FILE,FRB *#?Q MHUNTW 2,FILE,FRB *#RB MHUNTW 3,AMXOR,ASCREEN **?2 ADN 2 A1+2-1 **QL LDCT 6 #600 *B== ORX 2 6 [PTR TO CHAR BEFORE FIRST *BPW CALL 6 NONSPACE *C9G NULL [CANT BE NULL *CP6 # *D8Q BXU 0 SSF(1),SCOMNOTF *DNB CALL 6 NONSPACE *F82 BRN SCOMMANDF [J IF F **** F *FML LDX 5 ISOCURRENT(3) *G7= STO 5 ISOPREVCOM(3) *GLW LDX 5 ISNCURRENT(3) *H6G STO 5 ISNPREVCOM(3) *HL6 BRN SYNERR *J5Q SCOMNOTF *JKB LDX 5 ISOCURRENT(3) *K52 STO 5 ISOPREVCOM(3) *KJL LDX 5 ISNCURRENT(3) *L4= STO 5 ISNPREVCOM(3) *LHW STOZ 5 [R MARKER *M3G BXU 0 SSR(1),SCOMA1 [J IF NOT R *MH6 LDN 5 ISBITR *N2Q ORS 5 ISBITS(3) [SET R *NGB CALL 6 NONSPACE *P22 BRN SYNERR [R WHAT? *PFL SCOMA1 *PKH ... SMO FX2 *PPD ... STO 0 AWORK4 [SAVE COMMAND LETTER *PT* ... BXE 0 SSI(1),SCOMAT [I GOES TO T *P^= BXE 0 SST(1),SCOMAT [J IF T *QDW BXE 0 SSP(1),SCOMAP [J IF P *QYG # MUST BE F E F OR T BY DEFAULT *RD6 BXE 0 SSQ(1),SCOMZ1 *RXQ BXE 0 SSE(1),SCOMZ1 *SCB BXE 0 SSF(1),SCOMZ1 *SX2 # ASSUME T *TBL ORX 0 GSIGN [AND REMEMBER *TW= BRN SCOMAT *W*W SCOMZ1 *WTG BNZ 5 SSROTKINA [ERR IF R *X*6 STO 0 7 [COMMAND LETTER *XSQ CALL 6 NONSPACE *Y#B BRN SCOMZ2 [OK NO MORE CHARS *YS2 BRN SYNERR [TOO MANY CHARS *^?L SCOMZ2 *^R= BXE 7 SSQ(1),SCOMMANDQ [ **** Q B2=W BXU 7 SSF(1),SCOMMANDE [ **** E B2QG BRN SCOMMANDF [ **** F B3=6 SCOMAT B3PQ LDN 6 ISBITT B49B BRN SCOMATP B4P2 SCOMAP B58L LDN 6 ISBITP B5N= SCOMATP B67W ORS 6 ISBITS(3) [SET T OR P B6MG LDN 6 ISBITA+ISBITB B776 ORS 6 ISBITS(3) B7LQ ERS 6 ISBITS(3) [SET %A & %B AS NUMBERS B86B STOZ ISPARAMB+1(3) [DEFAULT OF 0 FOR %A B8L2 STOZ ISPARAMB(3) B95L BNG 0 SCOMDEFT [JI F T BY DEFAULT B9K= CALL 6 NONSPACE B=4W STOZ 2 [SET EOL B=JG BZE 2 SCOMAB9 B?46 SCOMDEFT B?HQ ANDX 0 SSBITS22(1) [CLEAR DEFAULT IF ANY B#3B CALL 7 PARAMETER [ANALYSE %A B#H2 BRN SCOMAB9 [J IF NUMBER B*2L LDN 6 ISBITA B*G= ORS 6 ISBITS(3) [SET STRING B*^W SCOMAB9 BBFG LDN 5 ISPARAMB(3) BB^6 LDN 6 ISPARAMA(3) BCDQ MOVE 5 ISPARAMB-ISPARAMA [MOVE %A TO CORRECT POSN BCYB SCOMAB2 BD3G ... STOZ ISPARAMB+1(3) [SET 0 IN CASE T BD6L ... SMO FX2 BD9Q ... LDX 5 AWORK4 [I T OR P BD#W ... BXE 5 SSI(1),SCOMAB22 [J IF I BDD2 LDN 5 20 BDXL STO 5 ISPARAMB+1(3) [20 DEFAULT FOR %B BF7D ...SCOMAB22 BFC= STOZ ISPARAMB(3) BFWW BZE 2 SCOMAB4 [J IF END OF LINE BGBG BXU 0 SSSPACE(1),SCOMAB27 [J IF CHAR BGW6 CALL 6 NONSPACE BH*Q BRN SCOMAB4 [E O L BHTB SCOMAB27 BH^? ... SMO FX2 BJ58 ... LDX 6 AWORK4 [ I T OR P BJ95 ... BXE 6 SSI(1),SYNERR [EP2 NOT ALLOWED WITH I BJ*2 BXU 0 SSCOMMA(1),SYNERR [SHOULD BE COMMA BJSL CALL 6 NONSPACE BK#= BRN SCOMAB4 [NO %B BKRW CALL 7 PARAMETER [ANALYSE %B BL?G BRN SCOMAB33 [J IF NUMBER BLR6 LDN 6 ISBITB BM=Q ORS 6 ISBITS(3) [SET STRING BMQB SCOMAB33 BN=2 BZE 2 SCOMAB4 [J IF EOL BNPL BXU 0 SSSPACE(1),SYNERR [ERR IF ODD CH AT END OF LINE BP9= CALL 6 NONSPACE BPNW BRN SCOMAB4 [EOL OK BQ8G BRN SYNERR [WOTS THESE ODD CHARS BQN6 SCOMAB4 BR7Q LDN 6 ISBITT BRMB ANDX 6 ISBITS(3) BS72 BNZ 6 SCOMMANDT [ **** T BSLL BRN SCOMMANDP [ **** P BT6= SETFPTR BTKW LDX 0 ISOCURRENT(3) BW5G STO 0 ISOPREVCOM(3) BWK6 LDX 0 ISNCURRENT(3) BX4Q STO 0 ISNPREVCOM(3) BXJB BRN POINTER BY42 # BYHL # B^3= # B^GW # C22G # C2G6 # K4 K4 K4 K4 K4 K4 K4 K4 K4 K4 K4 K4 K4 K4 K4 K4 K4 K4 K4 K4 K4 # C2^Q # C3FB # C3^2 # C4DL # C4Y= # SORTOUT BREAKIN WHEN ONE DETECTED C5CW # C5XG # TAKE AUTOMATIC E ACTION IF NOT MOP BREAK IN C6C6 # C6WQ # IF PTR RDY REOUTPUT POINTER C7BB # IF TEXT RDY TERMINATE INSTRUCTION C7W2 SBREAKIN C8*L MHUNTW 3,AMXOR,ASCREEN C8T= LDN 0 ISBITR C9#W ORS 0 ISBITS(3) C9SG ERS 0 ISBITS(3) [CLEAR R C=#6 BRKINOFF SERIOUS [J IF SERIOUS C=RQ # ONLY MOP BREAK IN C??B MHUNTW 3,AMXOR,ASCREEN C?R2 TRACE 3,ISMOPBRK [<<<<<<<<<<>>>>>>>>>> C#=L LDCT 0 #002 C#Q= ANDX 0 ISMFORM(3) C*9W BZE 0 POINTER [J IF PTR READY C*PG # MUST BE DURING AN INSTRUCTION CB96 LDN 0 ISBITLOP CBNQ ORS 0 ISBITS(3) CC8B ERS 0 ISBITS(3) [FORCE CLEAR SCREEN CCN2 LDCT 0 #030 CD7L STO 0 ISMERR(3) [ ; CDM= LDX 0 ISOPAGE(3) [STEP BACK TO HERE CF6W BNG 0 SSIT [J IF NOT VALID CFLG CALL 7 STEPBACKOLD [... IN OLD FILE CG66 MHUNTW 3,AMXOR,ASCREEN CGKQ LDX 0 ISNPAGE(3) [STEP BACK TO HERE IN CH5B CALL 7 STEPBACKNEW [... NEW FILE CHK2 BRN SSIT [INTR TERM CJ4L # CJJ= SERIOUS CK3W TESTBRKIN SER2 [TO CLEAR BRK IN BIT ONLY CKHG SER2 CL36 MHUNTW 3,AMXOR,ASCREEN CLGQ TRACE 3,ISABANDN [<<<<<<<<<<>>>>>>>>>> CLLX ...# CLR4 ... LDCT 0 #002 CLX9 ... ANDX 0 ISMFORM(3) CM3B ... BZE 0 SER1 [J IF ON PTR RDY CM7H ...# FORCE CLEAR SCREEN CM?N ... LDCT 0 #034 CMCT ... STO 0 ISMERR(3) CMJ2 ...# MUST BE DURING AN INSTRUCTION CMN7 ...# POSSIBY SOME DATA DISPLAYED CMS# ...# DONT LOOSE IT! CMYF ... LDX 0 ISOPAGE(3) [GO BACK TO HERE CN4L ... BNG 0 SER1 [BUT J IF INVALID CN8R ... CALL 7 STEPBACKOLD [OK SO STEP BACK CN#Y ... MHUNTW 3,AMXOR,ASCREEN CNF= # CRWL SER1 CSB= LDX 5 ISMFORM(3) [SAVE CSTW LDX 0 ISMERR(3) [ERR MESS PLACEMENT CT*G STO 0 ISMFORM(3) CTT6 LDX 6 ISOCURRENT(3) [CURRENT OLD FILE PTR CW#Q LDX 7 ISNCURRENT(3) [CURRENT NEW FILE PTR CWSB OUTBLOCKN 6 CX#2 OUTNUM 6,0 CXRL OUTNUM 7,0 CY?= MONOUT FILEUP CYQW MHUNTW 3,AMXOR,ASCREEN C^=G STO 5 ISMFORM(3) [RESET C^Q6 LDCT 0 #020 D29Q ADS 0 ISMERR(3) [EXTRA LINE FOR BIG MESSAGE D2PB LDCT 0 #004 D392 ORS 0 ISMERR(3) D3NL ERS 0 ISMERR(3) [CLEAR CLEAR SCREEN D48= BRN SCOMMANDE [AUTOMATIC E ACTION D4MW # D57G # D5M6 # ================================================================= # D66Q # D6LB # D762 # D7KL # D85= # D8JW # OUTPUT MESSAGE THEN POINTER READY D94G SSYROTBOTF [YOUVE RUN OFF THE BEGINNING OF THE FILE D9J6 LDN 3 SYROTBOTF D=3Q BRN SSOUTCOM D=HB SSYRYBSL [YOU'VE REACHED YOUR BACKING STORE LIMIT D?32 LDN 3 SYRYBSL D?GL BRN SSOUTCOM D#2= SSE2MBAFR [ENDPOINT2 MUST BE A FORWARD REFERENCE D#FW LDN 3 SE2MBAFR D#^G BRN SSOUTCOM D*F6 SSROTKINA [REPETITION OF THIS KIND IS NOT ALLOWED D*YQ LDN 3 SROTKINA DBDB BRN SSOUTCOM DBY2 SSBTNA [BACKWARDS TRANSCRIPTION NOT ALLOWED DCCL LDN 3 SBTNA DCX= BRN SSOUTCOM DDBW SSYROTEOTF [YOU'VE RUN OFF THE END OF THE FILE DDWG LDN 3 SYROTEOTF DFB6 BRN SSOUTCOM DFTQ SSFMNBUITC [IF MAY NOT BE USED IN THIS CONTEXT DG*B LDN 3 SFMNBUITC DGT2 BRN SSOUTCOM DH#L SSYFYNF [YOU'VE FILLED YOUR NEW FILE DHS= LDN 3 SYFYNF DJ?W BRN SSOUTCOM DJRG SSIT [INSTRUCTION TERMINATED DK?6 LDN 3 SIT DKQQ BRN SSOUTCOM DL=B SSNTL [NUMBER TOO LARGE DLQ2 LDN 3 SNTL DM9L BRN SSOUTCOM DMP= SSEA [EDIT ABANDONED DN8W LDN 3 SEA DNNG BRN SSOUTCOM DP86 SSEOE [END OE EDIT DPMQ LDN 3 SEOE DQ7B SSOUTCOM DQM2 ADX 3 FX1 [ABS PTR TO EG DR6L LDX 6 0(3) [PTR TO MESSAGE DRL= CALL 7 SCOMMENT DS5W BRN POINTER DSKG # DT56 # DTJQ # DW4B # DWJ2 # ================================================================= # DX3L # DXH= # DY2W # DYGG # D^26 # D^FQ # D^^B # F2F2 # F2YL # ================================================================= # F3D= # F3XW # F4CG # F4X6 # F5BQ # F5WB # F6B2 # F6TL # SWITCH TO OTHER CHAPTERS F7*= SDATA F7SW ACROSS SCEDITAR,1 F8#G SCONTROL F8S6 ACROSS SCEDITAR,2 F9?Q SCOMMANDT F9RB ACROSS SCEDITAR,3 F=?2 SCOMMANDP F=QL ACROSS SCEDITAR,4 F?== SCOMMANDE F?PW ACROSS SCEDITAR,5 F#9G SCOMMANDF F#P6 ACROSS SCEDITAR,6 F*8Q SCOMMANDQ F*NB ACROSS SCEDITAR,7 FB82 # FBML # FC7= # FCLW #END ^^^^ ...235266220005