Show pageBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. {{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]] <code - EDITAR867.txt>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 <TERMINATOR>'S AND <MULTIPLIERS>'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 <TERMINATOR> IS INDICATED BY BIT 5K9G # 0 OF THE FIRST CELL = 1, AND A <MULTIPLIER> BY =0. WERE IT NOT 5KP6 # FOR <TERMINATOR>'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 [<EDITING-INSTRUCTION> SYNTAX TABLE 5PL6 #REP #20 5Q5Q 0 5QKB T2 [<TERMINATOR> 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 <TERMINATOR> 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 <MULTIPLIER> 7F?B IETS *,0?-QT0 [* 7FR2 BRN Q05+1 [EVALUATE <MULTIPLIER> 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 <MULTIPLIER> 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 <MULTIPLIER> 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 <TERMINATOR> 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 </code> Last modified: 17/01/2024 11:55by 127.0.0.1 Log In