{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: SCEDITOR84)}}
====== SCEDITOR84 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:ALTLENGD|ALTLENGD]], [[george:macro:BACKSPACE|BACKSPACE]], [[george:macro:BRKINOFF|BRKINOFF]], [[george:macro:BXE|BXE]], [[george:macro:BXGE|BXGE]], [[george:macro:BXL|BXL]], [[george:macro:BXU|BXU]], [[george:macro:CATMASK|CATMASK]], [[george:macro:CURTAIL|CURTAIL]], [[george:macro:HUNT2J|HUNT2J]], [[george:macro:HUNTW|HUNTW]], [[george:macro:MFREEW|MFREEW]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:MONOUT|MONOUT]], [[george:macro:MONOUTX|MONOUTX]], [[george:macro:OUTEXES|OUTEXES]], [[george:macro:OUTMON|OUTMON]], [[george:macro:OUTNUM|OUTNUM]], [[george:macro:READY|READY]], [[george:macro:REPEAT|REPEAT]], [[george:macro:SEG|SEG]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SETUPCORE|SETUPCORE]], [[george:macro:STEP|STEP]], [[george:macro:TESTBRKIN|TESTBRKIN]], [[george:macro:TRACE|TRACE]], [[george:macro:VFREE|VFREE]], [[george:macro:VFREEW|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
#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