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