{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: EDITAR867)}}
====== EDITAR867 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:BXE|BXE]], [[george:macro:BXL|BXL]], [[george:macro:BXU|BXU]], [[george:macro:DOWN|DOWN]], [[george:macro:EDERR|EDERR]], [[george:macro:GEOERR|GEOERR]], [[george:macro:IET|IET]], [[george:macro:IETS|IETS]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:P|P]], [[george:macro:PHOTO|PHOTO]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:TEST|TEST]], [[george:macro:TESTMOVE|TESTMOVE]]
22FL #LIS K0EDITAR>K0ALLGEO>0
22^= #SEG EDITAR7 [DICK RUSBRIDGE
2394 ...# (C) COPYRIGHT INTERNATIONAL COMPUTERS LTD 1982.
23DW #
23YG 8HEDITAR
24D6 # THIS SEGMENT COUTAINS THE SYNTAX ANALYSIS ROUTINES WHIVH ARE USED
24XQ # BY SEGMENT EDITOR FOR COPING WITHE NESTED PARENTHESYS WHICH ARE
25CB # DESCRIBED IN THE USER SPECIFICATION.
25X2 #
26BL SEGENTRY K1EDITAR,N1EDITAR [ONLY ENTRY POINT
26W= #
27*W TRANSLATE [EXECUTE INSTRUCTION
27TG #
285# ... BVCR £ [ENSURE V IS CLEAR
28*6 ACROSS EDITOR,10
28SQ #
29#B NER [CAN WE GO ON?
29S2 #
2=?L ACROSS EDITOR,14
2=R= #
2?=W XEND [FORCE FINISH
2?QG #
2#=6 ACROSS EDITOR,11
2#PQ #
2*9B # USEFUL CONSTANTS.
2*P2 #
2B8L O20 #20 [SPACE
2BN= O30 #30 [LEFT PARENTHESIS
2C7W O31 #31 [RIGHT PARENTHESIS
2CMG O32 #32 [ASTERISK
2D76 O34 #34 [COMMA
2DLQ #
2F6B #PAG
2FL2 #
2G5L # NCH IS THE NEXT CHARACTER FROM EDITING FILE ROUTINE. THE REQUIRED
2GK= # CHARACTER IS PUT INTO X7 AND EXIT IS TO CALL+2. AN ATTEMPT TO READ
2H4W # OFF THE BLOCK CAUSES EXIT TO CALL+1. A SUBSEQUENT CALL WILL CAUSE
2HJG # A GEOERR. ADDRESS OF TEH LSAT CHARACTER IS LEFT IN X0,
2J46 #
2JHQ NCH LDX 3 IEIP(2) [ADDRESS OF NEXT CHARACTER
2K3B BZE 3 NCH3 [J IF OFF END LAST TIME
2KH2 STO 3 0 [GET CHARACTER ADDRESS OF END OF
2L2L SLC 0 2 [BLOCK AND PERFORM ARITHMETIC
2LG= SBX 0 IEIH(2) [TO DETERMINE IF WE ARE ABOUT TO RUN
2L^W BPZ 0 NCH2 [OFF THE END OF THE BLOCK
2MFG NCH1 SMO IEIA(2) [MODIFY BY ADDRESS OF BLOCK
2M^6 LDCH 7 0(3) [LOAD CHARACTER INTO X7
2NDQ LDX 0 3 [LEAVE ADDRESS IN X0
2NYB BCHX 3 £ [INCREMENT ADDRESS
2PD2 STO 3 IEIP(2) [STORE ADDRESS OF NEXT CHARACTER
2PXL EXIT 6 1 [AND RETURN TO CALL+2
2QC= NCH2 STOZ IEIP(2) [CLEAR POINTER FOR NEXT TIME
2QWW STO 3 0 [OLD CHARACTER ADDRESS
2RBG EXIT 6 0 [AND RETURN TO CALL+1
2RW6 #
2S*Q #
2STB OH
2T*2 NCH3 GEOERR 1,EDITAR
2TSL #
2W#= NCHX
2WRW #
2X?G CALL 6 NCH
2XR6 BRN SE4 [ERROR IF OFF END
2Y=Q EXIT 5 0
2YQB #
2^=2 # RLIF RELOCATES THE INSTRUCTION BLOCK.
2^PL #
329= RLIF LDX 5 IEIM(2) [GET PHOTO COUNT
32F4 LDX 3 IEIA(2)
32NW TESTMOVE 5,RL1 [J IF BLOCK IS STILL THERE
338G MHUNTW 3,FILE,FRB [OTHERWISE FIND IT
33N6 BNG 3 RL2 [J IF LOST
347Q PHOTO 5 [GET NEW PHOTO COUNT
34MB STO 3 IEIA(2) [STORE NEW POINTER
3572 STO 5 IEIM(2) [STORE NEW PHOTO COUNT
35LL RL1 EXIT 6 1 [EXIT TO CALL+2
366= RL2 STOZ IEIP(2) [FORCE A RE-READ
36KW EXIT 6 0 [EXIT TO CALL+1
375G #
37K6 # CODE FOR DEALING WITH SYNTAX ERRORS.
384Q # ENTRIES ARE -
38JB # SE1 SCAN, STARTING AT NEXT CHARACTER
3942 # SE2 SCAN, STARTING AT THIS CHARACTER
39HL # SE3 SCAN ENDED AT CURRENT CHARACTER
3=3= # SE4 SCAN ENDED AT LAST CHARACTER
3=GW #
3?2G #
3?G6 SE1 CALL 5 NCHX [GET ANOTHER CHARACTER
3?^Q SE2 BXE 7 O31(1),SE3 [J IF *31
3#FB BXU 7 O34(1),SE1 [LOOP NOT *34
3#^2 SE4 STO 0 IEIP(2)
3*DL SE3
3*Y= DOWN EDITER,3 ['SYNTAX ERROR : OH!'
3BCW BRN NER [CARRY ON (POSSIBLY)
3BXG #
3CC6 #
3CWQ # NOW FOLLOW A FEW RATHER CHAOTIC ROUTINES WHICH DO THE SYNTAX
3DBB # ANALYSIS AND TRANSLATION OF THE EDITING INSTRUCTIONS.
3DW2 # IF YOU CAN UNDERSTAND HOW THEY WORK YOU ARE A BETTER MAN
3F*L # (OR GIRL) THAN I.
3FT= #
3G#W #
3GSG RISQ LDXC 7 IESP(2) [IS THERE ROOM IN STACK?
3H#6 BZE 7 RSQ1 [J IF EMPTY
3HC= ...#UNS EDLOOP
3HGB ... SBN 7 45 [CHECK ROOM LEFT
3HKG ...#UNS EDLOOP
3HNL ...#SKI
3HRQ SBN 7 35 [CHECK ROOM LEFT
3J?B BPZ 7 SE1 [ERROR IF FULL
3JR2 RSQ1 EXIT 6 0 [ELSO OK
3K=L #
3KQ= SCS STO 7 5 [SKIP CLOSED STRING
3L9W SC1 CALL 6 NCH [GET NEXT CHARACTER
3LPG EXIT 4 0 [EXIT TO CALL+1 IF OFF END
3M96 BXU 7 5,SC1 [LOOP IF NOT SECOND QUOTE
3MNQ EXIT 4 1 [ELSE EXIT TO CALL+2
3N8B #
3NN2 TLU STO 7 3 [TABLE LOOK-UP
3P7L SRC 3 2 [CONVERT TO CHARACTER ADDRESSS
3PM= ... SMO 6
3Q6W ... OBEY 0
3QLG LDCH 3 0(3) [ACCESS TABLE
3R66 ADS 1 3 [DATUMISE RESULT
3RKQ EXIT 6 1 [AND FINISH
3S5B #
3SK2 Q0 LDN 4 0 [SKIP OPEN STRING WHICH MAY INCLUDE
3T4L Q01 CALL 6 NCH [PARENTHESES CONTAINING META CHARS
3TJ= BRN Q02 [J IF OFF END
3W3W Q011 SBN 7 #30
3WHG BZE 7 Q03 [J IF *30
3X36 SBN 7 1
3XGQ BZE 7 Q04 [J IF *31
3Y2B SBN 7 1
3YG2 BZE 7 Q05 [J IF *32
3Y^L SBN 7 2
3^F= BNZ 7 Q01 [J IF NOT *34
3^YW BNZ 4 Q01 [J IF *34 INSIDE PARENTHESES
42DG BRN PEND
42Y6 Q02 STO 0 IEIP(2)
43CQ BRN PEND
43XB Q03 ADN 4 1 [INCREMENT LP COUNT
44C2 BRN Q01 [AND TRY AGAIN
44WL Q04 BZE 4 QRP [J IF LOOSE *31
45B= SBN 4 1 [ELSE DECREMENT COUNT
45TW BRN Q01 [AND TRY AGAIN
46*G Q05 BNZ 4 Q01 [J IF *32 INSIDE PARENTHESES
46T6 LDN 6 Q06(1) [LOAD LINK
47#Q BVCR £ [CLEAR V
47SB #
483G ...#
48=L ...#
48FQ ...#
48NW ...# MULT - EUALUATE MULTIPLIERS
48Y2 ...# ==== A*B*C ETC
4976 ...#
49B= ...#
49KB ...# IEBF ACCUMULATING TOTAL AND FINAL RESULT
49SG ...# IEBF+1 ) ZERO : LAST CHAR WAS A *
4=3L ...# IEBF+1 ) NON-ZERO : LAST CHAR WAS A DIGIT
4==Q ...# X5 CURRENT MULTIPLICAND
4=FW ...#
4=P2 ...#
4=Y6 ...MULT
4?7= ... STO 6 AWORK3(2) [SAVE LINK
4?BB ... LDN 5 1
4?KG ... STO 5 IEBF(2) [SET FINAL RESULT
4?SL ...MULT1
4#3Q ... STOZ IEBF+1(2) [SET LAST CHAR WAS A *
4#=W ... LDN 5 0 [CURRENT NUMBER
4#G2 ...MULT2
4#P6 ... CALL 6 NCH [GET NEXT CHAR
4#Y= ... BRN MULT3 [J IF OFF END
4*7B ... BXE 7 O20(1),MULT2 [LOOP ON SPACES
4*BG ... LDN 4 10
4*KL ... BXL 7 4,MULT4 [J IF NUMERIC
4*SQ ... BXE 7 O32(1),MULT6 [J IF *
4B3W ...#
4B?2 ...# OFF END OR
4BG6 ...# NEXT CHAR NOT * OR DIGIT
4BHX ...
4BKN ... BXE 7 O34(1),MULT3 [COMMA OK
4BMF ... BXU 7 O31(1),SE2 [AND LP OK NOTHING ELSE ID
4BP= ...MULT3
4BYB ... STO 0 IEIP(2) [BACKSPACE ONE CHAR
4C7G ... LDX 6 IEBF+1(2)
4CBL ... BZE 6 SE2 [ERROR IF LAST CHAR WAS *
4CKQ ... MPY 5 IEBF(2) [FINAL RESULT
4CSW ... BNZ 5 MULT5 [J IF TOO BIG
4D42 ... BZE 6 SE2 [ERROR IF *0
4D?6 ... STO 6 IEBF(2) [AND SAVE RESULT
4DG= ... STOZ 4
4DPB ... LDX 6 AWORK3(2) [RESTORE LINK
4DYG ... EXIT 6 0
4F7L ...#
4FBQ ...# NEXT CHAR IS A DIGIT
4FKW ...MULT4
4FT2 ... STO 4 IEBF+1(2) [SET LAST CHAR A DIGIT
4G46 ... LDX 6 7 [GET DIGIT
4G?= ... MPA 5 4 [X5*10+X6
4GGB ... BNZ 5 MULT5 [J IF TOO BIG
4GPG ... LDX 5 6 [KEEP RESULT SO FAR
4GYL ... BRN MULT2
4H7Q ...#
4HBW ...# NEXT CHAR IS A STAR
4HL2 ...MULT6
4HT6 ... LDX 6 IEBF+1(2)
4J4= ... BZE 6 SE2 [ERROR IF **
4J?B ... MPY 5 IEBF(2) [TOT UP
4JGG ... BNZ 5 MULT5 [J IF TOO BIG
4JPL ... STO 6 IEBF(2) [REXET RESULT SO FAR
4JYQ ... BRN MULT1
4K7W ...#
4KC2 ...#
4KL6 ...MULT5
4KT= ...MM5
4L4B ... EDERR NUTL
4L?G ... BRN SE2
4LGL ...#
4LPQ ...#
4LYW ...#
4M82 ...#
4MDB #
4MY2 Q06 CALL 6 RISQ [CHECK FOR ROOM IN STACK
4NCL LDXC 5 IEBF(2)
4NX= BCS MM5 [J IF NUMBER TOO BIG
4PBW BNZ 5 Q07 [J IF NOT ZERO
4PWG LDN 5 1 [NULL MEANS 1 HERE
4QB6 Q07 SLC 0 2
4QTQ SMO IESP(2)
4R*B STO 5 IESTACK+1(2)
4RT2 BRN Q011 [END
4S#L #
4SS= SHIFT CALL 5 NCHX [GET NEXT CHARACTER
4T?W BXE 7 O31(1),PP2 [IGNORE IF TAB
4TRG SLC 0 2 [BACKSPACE POINTER
4W?6 SBN 0 1
4WQQ SRC 0 2
4X=B BXE 7 O32(1),PP3 [END IF NEWLINE
4XQ2 BRN SE2 [ELSE ERROR
4Y9L #
4YP= VI CALL 6 NCH [V INSTRUCTION
4^8W BRN NOV
4^NG BXE 7 O20(1),VI [THE OPERAND
5286 BXE 7 O34(1),NOV [COULD BE *32
52MQ BXU 7 O31(1),Q0
537B NOV STO 0 IEIP(2)
53M2 BRN Q0
546L #
54L= #
555W # TEST - SUBROUTINE WHICH CHECKS FOR ALLOWED DELIMITER
55KG #
5656 TEST LDX 5 7
56JQ SBN 5 #12
574B BNG 5 SE1 [0 - 9 NOT ALLOWED
57J2 SBN 5 #26
583L BPZ 5 SE1 [A - _ NOT ALLOWED
58H= ADN 5 #15
592W BZE 5 SE1 [# NOT ALLOWED
59GG ADN 5 #23
5=26 BXL 5 O30(1),TEST1 [:;<=>?!"£%'& OK
5=FQ ANDN 5 #3
5=^B SBN 5 3
5?F2 BNZ 5 SE1 [J NOT / +
5?YL TEST1 EXIT 6 0
5#D= #
5#XW XI CALL 5 NCHX [I SO GET NEXT CHAR
5*CG BXE 7 O20(1),XI [IGNORE IF SPACE
5*X6 CALL 6 TEST [CHECK THE DELIMITER
5B33 ...#SKI JPVNS
5B6Y ...(
5B=T ...VNS
5BBQ CALL 4 SCS [SKIP STRING
5BWB BRN PP4 [MULTI-I
5BYK ... CALL 6 NCH [LOOK AT NEXT
5C2S ... BRN NVNS [CHARACTER
5C53 ... TXU 7 5 [IN CASE IT IS
5C7= ... BCC VNS [VISIBLE NEWLINE SYMBOL
5C9F ...NVNS STO 0 IEIP(2) [STEP BACK IF IT ISN'T
5C?N ...)
5CB2 BRN Q0 [SIMPLE-I
5CTL #
5D*= #PAG
5DSW #
5F#G # PREPARSE LEAVES THE STACK AS TRANSLATE WOULD WISH TO FIND IT.
5FS6 #
5G?Q # THIS ROUTINE HAS A CRACK AT THE SYNTAX OF THE EDITING INSTRUCTIONS
5GRB # AND WILL FIND MOST OF THE SYNTAX ERRORS. HOWEVER ITS MAIN FUNCTION
5H?2 # IS TO LEAVE 'S AND 'S ENCODED IN THE
5HQL # STACK. ONLY THE FIRST (OUTSIDE) PARENTHESIS IS PUT IN, OTHER
5J== # INSIDE THINGS ARE SKIPPED (BECAUSE PREPARSE AND TRANSLATE WHEN
5JPW # TAKEN TOGETHER ARE RECURSIVE). A IS INDICATED BY BIT
5K9G # 0 OF THE FIRST CELL = 1, AND A BY =0. WERE IT NOT
5KP6 # FOR 'S THE WHOLE THING COULD BE DONE BY TRANSLATE, BUT
5L8Q # I DO NOT WISH TO DEFACE THE BRIALLIANT USER-ORENTED SPECIFICATION
5LNB # FOR THE SAKE OF SKIPPING A FEW HOURS CODING. ANYWAY, HERE WE GO -
5M82 #
5MML # (NB THOUGH THE FOLLOWING CODING IS RATHER PERVERSE YOU WILL FIND
5N7= # IT VERY NEAT ONCE YOU UNDERSTAND IT).
5NLW #
5P6G T1 [ SYNTAX TABLE
5PL6 #REP #20
5Q5Q 0
5QKB T2 [ SYNTAX TABLE
5R52 #REP #20
5RJL 0
5S4= #
5SHW PP3 STO 0 IEIP(2) [OFF END, SO IF
5T3G PP4 LDX 5 IEPC(2) [PARENTHESIS COUNT
5TH6 BZE 5 TRANSLATE [ZERO SO WE CAN FINISH ELSE FIND THE
5W2Q LDX 3 IEIP(2) [LAST CHARACTER AND REPORT A
5WGB BRN SE4 [SYNTAX ERROR
5X22 #
5XFL #
5X^= PP0 BRN SE2 [UNKNOWN INSTRUCTION
5YDW #
5YYG N1EDITAR
5^D6 PREPARSE
5^XQ #
62CB STOZ IEPC(2) [CLEAR PARENTHESIS COUNT
62X2 CALL 6 RLIF [RELOCATE INSTRUCTION BLOCK
63BL CALL 0 NCH3 [ERROR IF LOST
63W= #
64*W PP2 IETS #20,PP2-PP0,T1 [IGNORE SPACE
64TG IET ],$
655# ... BVCR £ [ENSURE V IS CLEAR
65*6 CALL 6 NCH [GET NEXT CHARACTER
65SQ BRN PP3 [J IF OFF END
66#B LDX 5 IEPC(2) [GET PARENTHESIS COUNT
66S2 BNZ 5 PP9 [J IF NESTED
67?L STO 0 IEPS(2) [STARTED PARSE THERE
67R= PP9 CALL 6 TLU [LOOK UP TABLE
68=W ADN 3 T1(1) [AT T1
68QG EXIT 3 PP0 [AND FANOUT
69=6 #
69PQ IETS ^,0?-PP0 [DELTA
6=9B BRN SHIFT [SHIFT
6=P2 #
6?8L PEND IETS #34,PEND-PP0 [COMMA OR JUST PLAIN END
6#7W LDX 4 IEPC(2) [GET PARENTHESIS COUNT
6#MG BNZ 4 PP2 [CARRY ON IF NESTED
6*76 BRN TRANSLATE
6*LQ #
6B6B Q3 IETS A,Q3-PP0 [A INSTRUCTION
6BL2 IET B,R [B AND R INSTRUCTIONS
6C5L CALL 5 NCHX [GET FIRST CHARACTER
6CK= BXE 7 O20(1),Q3 [IGNORE IF SPACE
6D4W CALL 6 TEST [CHECK THE DELIMITER
6DJG Q31 CALL 4 SCS [SKIP CLOSED STRING
6F46 BRN SE4 [J IF OFF END
6FHQ BVCI Q31 [DO IT AGAIN
6G3B BRN Q0 [LOOK OUT FOR *32
6GH2 #
6H2L Q2 IETS I,Q2-PP0 [I INSTRUCTION
6HG= BRN XI
6H^W #
6JFG IETS H,0?-PP0 [H INSTRUCTION
6J^6 IET O [O INSTRUCTION
6KDQ BRN Q0
6KYB QM IETS F,QM-PP0 [F,X,Z,L,N
6LD2 IET Q,E,L,U,N,Z,M,X,W
6LXL BRN Q0 [SINGLE-I
6MC= #
6MWW IETS V,0?-PP0 [V INSTRUCTION
6NBG IETS D,0?-PP0,T1 [D INSTRUCTION (MK6) MACRO EASIER MK6
6NW6 BRN VI
6P*Q #
6PTB QLP IETS #30,QLP-PP0 [LEFT PARENTHESIS
6Q*2 LDX 5 IEPC(2) [GET PARENTHESIS COUNT
6QSL BNZ 5 QLP1 [J IF ALREADY NESTED
6R#= CALL 6 RISQ [CHECK ON ROOM IN STACK
6RRW LDX 3 IEIP(2) ['CHARACTER ADDRESS'
6S?G SLC 3 2 ['CHARACTER NUMBER'
6SR6 SMO IESP(2) [INSERT IN STACK
6T=Q STO 3 IESTACK(2) [INCREMENT PARENTHESIS COUNT
6TQB LDX 4 IEOR(2) [STORE THE RECORD
6W=2 SMO IESP(2) [COUNT AT THIS
6WPL STO 4 IESTACK+2(2) [POINT IN THE STACK
6X9= LDX 4 IEOC(2) [AND THE CHAR COUNT
6XNW SMO IESP(2)
6Y8G STO 4 IESTACK+3(2)
6YN6 QLP1 ADN 5 1
6^7Q STO 5 IEPC(2) [AND CARRY
6^MB BRN PP2 [ON ANALYSIS
7272 #
72LL QT0 BRN SE2 [SYNTAX ERROR
736= #
73KW QT1 IETS T,QT1-PP0 [T AND P
745G IET P [INSTRUCTIONS
74K6 IETS #20,QT1-QT0,T2 [SWITCH TABLE (AT COMPILE TIME)
74Q# ...#UNS EDCHAR
74XG ... IET #23 [#
754Q IET ],$
75JB IET 0,1,2,3,4,5,6,7,8,9,- [LOOP ON THESE
7642 QT9 CALL 6 NCH [GET ANOTHER CHARACTER
76HL BRN PP4 [[J IF END
773= QT2 IETS -,QT2-PP0,T1 [SWITCH TABLE BACK (COMPILE TIME)
77GW IET #23,0,1,2,3,4,5,6,7,8,9,.[IMPLICIT T INSTRUCTION
782G CALL 6 TLU [LOOK UP FOR
78G6 ADN 3 T2(1) [IN TABLE T2 AND
78^Q EXIT 3 QT0 [FANOUT WITH RESULT
79FB IETS .,0?-QT0,T2 [. [SWITCH TABLE]
79^2 BVCI QT1 [OK FIRST TIME, ERROR SECOND
7=68 ...#UNS EDCHAR
7=?B ...#SKI
7=DL IETS #23,0?-QT0 [#
7=JH ...#UNS EDCHAR
7=ND ...(
7=S* ... IETS C,0?-QT0 [C
7=Y= ... IET G [G
7?47 ...)
7?84 ...#UNS EDCHAR
7??^ ...#SKI
7?CW IET C,S,G [C OR S OR G
7#WQ BVSR SE2 [ERROR SECOND TIME
7*BB BRN QT1 [OK FIRST TIME
7*DK ...#UNS EDCHAR
7*GS ...(
7*K3 ... IETS S,0?-QT0 [S
7*M= ... BVSR Q0 [SHOULD BE END OF LINE NOW
7*PF ... BRN QT1 [FIRST TIME OK
7*RN ...)
7*W2 IETS :,0?-QT0 [STRING QUOTES
7B*L IET ;,<,=,>,?,!,",£,%,&,',+,/[SO -
7BT= CALL 4 SCS [SKIP ENCLOSED STRING
7C#W BRN SE4 [ERROR IF OFF END
7CSG IETS E,0?-QT0 [E
7D#6 BVCI QT1 [OK FIRST TIME
7DRQ BRN Q0 [CHECK ON
7F?B IETS *,0?-QT0 [*
7FR2 BRN Q05+1 [EVALUATE
7G=L QRP IETS #31,QRP-QT0 [RETURNING TO THE MAIN PLOT,")"-
7GQ= IETS #31,QRP-PP0,T1
7H9W LDX 5 IEPC(2) [GET PARENTHESIS COUNT
7HD6 BNZ 5 QRP6 [IF UNMATCHED RP
7HLB LDX 6 IESP(2) [THEN TEST FOR STACK ENTRY
7HSL BZE 6 SE3 [IF NONE THEN ERROR
7HXQ BRN TRANSLATE
7J2W QRP6
7J96 SBN 5 1 [DECREMENT
7JNQ STO 5 IEPC(2) [AND STORE
7K8B QRP1 CALL 6 NCH [ANOTHER CHARACTER?
7KN2 BRN QRP4 [J TO FRIG IF OFF END
7L7L BXE 7 O20(1),QRP1 [LOOP ON BLANK
7LM= BXE 7 O34(1),QRP2-1 [END IF #34
7M6W BXE 7 O31(1),QRP4 [FRIG IF *31
7MLG QRP5 BXU 7 O32(1),QRP3 [J IF NOT
7N66 CALL 6 MULT [WE CAN WORK IT OUT
7NKQ LDX 5 IEBF(2) [GET RESULT
7P5B BNZ 5 QRP2 [J IF NOT ZERO
7PK2 LDN 5 1 [YOU MEANT ONE
7Q4L QRP2 LDX 4 IEPC(2) [GET PARENTHESIS COUNT
7QJ= BNZ 4 PP2 [CARRY ON IF NESTED
7R3W SMO IESP(2)
7RHG STO 5 IESTACK+1(2) [ELSES STACK VALUE OF
7RKD ...#UNS EDLOOP
7RMB ...(
7RP# ... SMO IESP(2) [ZEROISE TWO ADDITIONAL WORDS IN
7RR= ... STOZ IESTACK+7(2) [STACK ENTRY
7RT8 ... SMO IESP(2)
7RX6 ... STOZ IESTACK+8(2)
7R^4 ...)
7S36 #
7SGQ IETS #34,0?-QT0,T2 [WHERE DID YOU COME FROM?
7T2B BRN PEND [END
7TG2 QRP3 LDX 4 IEPC(2) [GET PARENTHESIS COUNT
7T^L BVSR £ [IN CASE # TERMINATOR
7WF= LDX 3 IESP(2) [WORK OUT STACK
7WYW ADS 2 3 [MODIFIER
7XDG BNZ 4 QT2 [J IF NESTED
7XY6 LDCT 6 #400 [SET CHARACTER POSITION NEGATIVE
7YCQ ORS 6 IESTACK(3) [OF THE
7YXB ORS 6 IESP(2)
7^C2 LDX 4 IESTACK+3(3)
7^WL LDX 5 IESTACK+2(3)
82B= LDN 3 IESTACK+2(3)
82TW SBX 3 2
83*G DOWN EDITET,2
83T6 BRN NER [SYNTAX ERROR
84#Q LDX 7 IEIP(2)
84SB SMO IESP(2) [STORE PTR PAST
85#2 STO 7 IESTACK+1(2) [TERMINATOR IN STACK
85*P ...#UNS EDLOOP
85CD ...(
85F7 ... LDX 6 BITS22LS [INITIALISE RECORD & CHARACTER
85GW ... SMO IESP(2) [POINTERS FOR OLD FILE POSITION
85JK ... STO 6 IESTACK+7(2) [AT LAST ")"
85L# ... SMO IESP(2)
85N3 ... STOZ IESTACK+8(2)
85PQ ...)
85RL CALL 6 RLIF [RELOCATE INSTRUCTION BLOCK
86?= CALL 0 NCH3 [ERROR IF LOST
86QW BRN PEND
87=G QRP4 STO 0 IEIP(2) [OFF END SO RESET
87Q6 BRN QRP2-1 [SET UP A SINGLE REPEAT
889Q MENDAREA 50,K100EDITAR
88PB #END
^^^^ ...57176402000100000000