EDITAR867

(George Source)

Macros used: ACROSS, BXE, BXL, BXU, DOWN, EDERR, GEOERR, IET, IETS, MENDAREA, MHUNTW, P, PHOTO, SEGENTRY, TEST, TESTMOVE

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