22FL #LIS K0EDITOR>K0ALLGEO>0 22^= ...#SEG EDITOR865 [DICK RUSBRIDGE 2394 ...# (C) COPYRIGHT INTERNATIONAL COMPUTERS LTD 1982. 23DW # 23YG # GEORGE 3 AND 4 INTEGRAL EDITOR. 24D6 # ------------------------------- 24XQ # 254Y ...#UNS G400 25=6 ...# THIS CHAPTER IS MODIFIED FOR G3PLUS-IH MK2 25CB 8HEDITOR 25X2 # THIS IS THE FAMED INTEGRAL EDITOR; BEGAT SO ELOQUENTLY BY THE 26BL # REDOUBTABLE GEOFF NEWELL WITH A LITTLE HELP FROM HIS FRIENDS IN 26W= # UKSO; TEMPERED SO SWEETLY BY THE SEXY SALLY REES; SUBJECTED TO 27*W # AN INORDINATE DESIGN GESTATION AND FINALLY CODED SO FEARFULLY 27TG # BY YOURS TRULY IN THE FLEETING MOMENTS OF QUIET AMIDST THE TURMOIL 28*6 # OF COSMOPOLITAN GEORGE THREE DEVELOPMENT BRANCH OF B.P.D. 28SQ # 29#B # 29S2 # THE EDITOR'S CODE STARTS HERE. 2=?L # ------------------------------ 2=R= # 2?=W # ENTRY POINT BRANCH TABLE 2?QG # 2#=6 SEGENTRY K1EDITOR,N1EDITOR [DEALT WITH BY EDITAR 2#PQ SEGENTRY K2EDITOR,N2EDITOR [SHUTDOWN WITH CLOSEABANDON 2*9B SEGENTRY K3EDITOR,N3EDITOR [END OF INSTRUCTION 2*P2 SEGENTRY K4EDITOR,OH 2B8L SEGENTRY K5EDITOR,N5EDITOR [PULLUP OF O/F STACK 2BN= SEGENTRY K7EDITOR,N7EDITOR [ABANDON EDIT 2C7W SEGENTRY K8EDITOR,N8EDITOR [DEALS WITH BREAK-IN 2CMG SEGENTRY K9EDITOR,N9EDITOR [CLOSES FILES AND ENDS EDIT 2D76 SEGENTRY K10EDITOR,N10EDITOR [EXECUTES INSTRUCTION 2DLQ SEGENTRY K11EDITOR,N11EDITOR [E INSTRUCTION 2F6B SEGENTRY K12EDITOR,N12EDITOR ['EXECUTION ERROR..... ' 2FL2 SEGENTRY K13EDITOR,OH 2G5L SEGENTRY K14EDITOR,N14EDITOR [CHECK IF MOP AFTER ERROR 2GK= # 2H4W # 2HJG # USEFUL CONSTANTS. 2J46 # 2JHQ O20 #20 [SPACE 2K3B O30 #30 [LEFT PARENTHESIS 2KH2 O31 #31 [RIGHT PARENTHESIS 2L2L O32 #32 [ASTERISK 2LG= O34 #34 [COMMA 2L^W O23 #23 [OCTAL 2MFG O8 #10 [EIGHT 2M^6 MNUM #32657713 [A MAGIC NUMBER 2NDQ THOU +1000 2NYB # 2PD2 # 2PXL N8EDITOR [ENTRY POINT FOR BREAK-IN DURING 2PYS ...#UNS G400 2Q22 ...( 2Q38 ... TESTHKN XDSK1 [J IF NOT IN HOOK 2Q4B ... CALL 6 MOPTEXT 2Q5J ... BRN XDSK2 [FILE 2Q6Q ... BRN XDSK1 [JOB SOURCE 2Q7Y ... BRN XDSK1 [MOP 2Q96 ...XDSK2 LDCT 0 #2 2Q=# ... ORS 0 IESW(2) [NOTE BKIN 2Q?G ... BRN N2EDITOR [CLOSEABANDON 2Q#N ...XDSK1 2Q*W ...) 2QC= # [AN EDITING INSTRUCTION 2QWW ... ACROSS EDITORA,8 2^=2 # 2^PL # XBKOF CLEARS BREAK-IN. IF IT WASN'T BREAK-IN BUT SOMETHING 329= # MORE SERIOUS IT CAUSES AN AUTOMATIC 'E' WITH APPROPRIATE MESSAGES. 32NW # 338G XBKOF SBX 6 1 33N6 DOWN EDITET,4 [SAVES EDITOR'S SPACE 347Q BRN XITER [J NOT BREAK-IN 34?M ... 34CJ ...#UNS EDPOINTER 34HF ... MONOUT ISEDBRK 34MB ADS 1 6 3572 EXIT 6 0 35LL # 366= # THE ACTION FOR JT EXCEEDED OR JOB ABANDONNED 36KW # 375G XITER ACROSS EDWRITE,11 [SAVES EDITOR'S SPACE 37K6 # 384Q # ABANDON ENTRY POINT 38JB # 3942 N7EDITOR 39HL ...XBK1 EDCOMERR EDAB ['EDIT ABANDONED' 3=3= N2EDITOR 3=GW ... ACROSS EDITORA,2 3?^Q # 3#FB # SHUTDOWN CLOSES ALL FILES AND RETURNS TO THE COMMAND PROCESSOR. 3#^2 # 3*DL N9EDITOR 3*Y= ... ACROSS EDITORA,9 3L?4 ...# 3L#= ...# XJOBTIME UPDATES JOB TIME IN JOB BLOCK,AND LEAVES 3L*D ...# X3 : POINTER TO JOB BLOCK 3LBL ...# X6 & X7 : JOB TIME 3LCS ...# 3LF2 ...XJOBTIME 3LG8 ... FJOCA 3,2 3LHB ... UPDATEJT ,3 3LJJ ... LDX 6 HTIMEJ(3) 3LKQ ... LDX 7 HTIMEJ+1(3) 3LLY ... EXIT 4 0 3LN6 ...# 3LPG # 3M96 # POPUP PULLS UP THE EDITING FILE STACK. IF THIS EXHAUSTS 3MNQ # THE STACK AN ERROR IS REPORTED, OTHERWISE THE ROUTINE 3N8B # EXITS IN GOOD ORDER. 3NN2 # 3P7L POPUP SBS 1 6 [RELATIVE LINK 3PM= DOWN EDITET,5 [SAVES EDITOR'S SPACE 3Q6W BRN XEND [EXHAUSTED J/S OR FILE 3QLG BRN NER [NO FILE TO CLOSE 3R66 ADS 1 6 [ELSE EXIT IN 3RKQ EXIT 6 0 [GOOD ORDER 3S5B # 3SK2 # 3T4L # PULLUP PULLS UP THE FILE STACK FOR END OF OLD FILE. ERROR IF 3TJ= # THERE IS NO FILE TO CLOSE. 3W3W # 3WHG PULLUP 3X36 # 3XGQ SBX 6 1 [RELATIVE LINK 3Y2B DOWN EDITET,6 [SAVES EDITOR'S SPACE 3YG2 BRN NER [NO FILE TO CLOSE 3Y^L ADX 6 1 [OK SO 3^F= EXIT 6 0 [CARRY ON 3^YW # 42DG # UMOP PUSHES DOWN THE FILE STACK TO ENTER THE MOP CONSOLE ON THE 42Y6 # TOP OF THE STACK. IF THE STACK IS ALREADY FULL AN ERROR OCCURS. 43CQ # 43XB UMOP SBX 6 1 44C2 DOWN EDITET,7 [SAVES EDITOR'S SPACE 44WL BRN XEND [STACK FULL 45B= ADX 6 1 [OK SO 45TW EXIT 6 0 [CARRY ON 46*G #PAG 46T6 # 47#Q # SREBMUN CONVERTS BINARY TO UP TO SEVEN DECIMAL DIGITS. THE NUMBER 47SB # TO BE CONVERTED IS IN X6 AND X1 CONTAINS THE ADDRESS OF THE FIRST 48#2 # CHARACTER OF THE OUTPUT STRING. ON EXIT X1 CONTAINS THE ADDRESS OF 48RL # THE NEXT CHARACTER. 49?= # 49QW SREBMUN 4==G # 4=Q6 LDN 4 0 [CLEAR RESULT 4?9Q LDN 7 7 [MAX COUNT IS 7 4?PB LDX 5 6 4#92 SMO FX1 [MULTIPLY BY 4#NL MPY 5 MNUM [THE MAGIC MUNBER 4*8= MODE 0 [99.9% REDUNDANT 4*MW SRE1 SBN 7 1 [DECREMENT COUNT 4B7G CBD 5 4 [CONVERT TO CHARACTER 4BM6 BNZ 4 SRE4 [J TO IGNORE IF LEADING ZERO 4C6Q BNZ 7 SRE1 [J TO START OUTPUT 4CLB BRN SRE4 [DEPOSIT ONE ZERO ANYWAY 4D62 SRE3 SBN 7 1 [DECREMENT COUNT 4DKL CBD 5 4 [CONVERT TO CHARACTER 4F5= SRE4 DCH 4 0(1) [STORE CHARACTER 4FJW BCHX 1 £ [INCREMENT POINTER 4G4G BNZ 7 SRE3 [LOOP UNTIL FINISHED 4GJ6 EXIT 0 0 4H3Q # 4HHB # MOPTEXT DETERMINES THE SOURCE OF THE EDITING INSTRUCTIONS. EXITS 4J32 # TO CALL+1 FOR OFFLINE FILE; CALL+2 FOR ONLINE JOB SOURCE AND 4JGL # CALL+3 FOR ONLINE MOP TERMINAL.(WILL EVENTUALLY NEED TO BE ALTER- 4K2= # ED TO DIFFERENTIATE MOP TELETYPE FROM MOP AVDU). 4KFW # 4K^G MOPTEXT 4LF6 # 4LYQ LDXC 0 IEFT(2) [SET FILE STACK 4MDB BCC MTX [J IF REAL FILE ON TOP 4MY2 LDX 0 CONTEXT(2) [GET CONTEXT WORD 4NCL SRC 0 4 [SHIFT TO BIT 20 4NX= LDXC 0 0 [SEE IF IT IS SET 4PBW ADNC 6 1 [CLEAR CARRY AND OVERFLOW 4PWG MTX EXIT 6 0 [EXIT AS APPROPRIATE 66S2 # 67?L #PAG 67R= # 68=W # NCH IS THE NEXT CHARACTER FROM EDITING FILE ROUTINE. THE REQUIRED 68QG # CHARACTER IS PUT INTO X7 AND EXIT IS TO CALL+2. AN ATTEMPT TO READ 69=6 # OFF THE BLOCK CAUSES EXIT TO CALL+1. A SUBSEQUENT CALL WILL CAUSE 69PQ # THE NEXT BLOCK TO BE READ. ADDRESS OF LAST CHARACTER IS LEFT IN X0 6=9B # 6=P2 NCH LDX 3 IEIP(2) [ADDRESS OF NEXT CHARACTER 6?8L BZE 3 NCH3 [J IF OFF END LAST TIME 6?N= STO 3 0 [GET CHARACTER ADDRESS OF END OF 6#7W SLC 0 2 [BLOCK AND PERFORM ARITHMETIC 6#MG SBX 0 IEIH(2) [TO DETERMINE IF WE ARE ABOUT TO RUN 6*76 BPZ 0 NCH2 [OFF THE END OF THE BLOCK 6*LQ NCH1 SMO IEIA(2) [MODIFY BY ADDRESS OF BLOCK 6B6B LDCH 7 0(3) [LOAD CHARACTER INTO X7 6BL2 LDX 0 3 [LEAVE ADDRESS IN X0 6C5L BCHX 3 £ [INCREMENT ADDRESS 6CK= STO 3 IEIP(2) [STORE ADDRESS OF NEXT CHARACTER 6D4W EXIT 6 1 [AND RETURN TO CALL+2 6DJG NCH2 STOZ IEIP(2) [CLEAR POINTER FOR NEXT TIME 6F46 STO 3 0 [OLD CHARACTER ADDRESS 6FHQ EXIT 6 0 [AND RETURN TO CALL+1 6G3B NCH3 SBX 6 1 [RELATIVISE LINK 6GH2 STO 6 IEL1(2) [AND STORE 6H2L STOZ IESP(2) [CLEAR STACK AND 6HG= STOZ IEPC(2) [PARENTHESIS COUNT 6H^W HUNTW 3,FILE,FRB 6JFG BNG 3 NCH4 [FREE ANY OLD BLOCK 6J^6 FREECORE 3 6K3* ... 6K5J ...#UNS EDPOINTER 6K7R ...NCH4 6K=2 ...#UNS EDPOINTER 6K#9 ...#SKI 6KBD ...( 6KDQ NCH4 CALL 6 MOPTEXT [FANOUT ON CONTEXT 6KYB BRN NCH24 [OFFLINE FILE 6LD2 BRN NCH26 [JOB SOURCE 6LK8 ... 6LQB ...) 6LXL LDX 1 IESW(2) [ELSE MOP CONSOLE 6MC= SLL 1 2 6MWW BNG 1 NCH7 [J IF IN INSERT MODE 6NBG LDN 1 IEBF(2) [BUFFER ADDRESS IN CPAT 6NW6 LDX 6 IEOR(2) [GET RECORD NUMBER 6P*Q SBX 6 IENO(2) [ADJUST FOR NEW ORIGIN 6PTB BPZ 6 NCH5 [J IF RESULT IS POSITIVE 6Q*2 LDN 7 #35 [LOAD - 6QSL NGX 6 6 [NEGATE 6R#= DCH 7 0(1) [DUMP - IN BUFFER 6RRW BCHX 1 £ [AND UPDATE POINTER 6S?G NCH5 CALL 0 SREBMUN [CONVERT RECORD NUMBER 6SR6 LDN 7 #36 [FULL STOP 6T=Q LDX 6 IEOC(2) [CHARACTER POINTER 6TQB DCH 7 0(1) [INSERT FULL STOP 6W=2 BCHX 1 £ [IN BUFFER 6WPL CALL 0 SREBMUN [CONVERT CHARACTER NUMBER 6X9= SBN 1 IEBF(2) [WORK OUT NUMBER OF CHARACTERS 6XNW SLC 1 2 [THAT HAVE BEEN CONVERTED 6XPT ... 6XQS ...#UNS EDPOINTER 6XRR ...( 6XSQ ...NCH5A 6XTP ... STO 1 AWORK3(2) [MESSAGE LENGTH 6XWN ...NCH6 6XXM ... OUTPARAM AWORK3(2),IEBF [ OR 6XYL ...NCH6A 6X^K ... CALL 6 MOPTEXT [FAN OUT ON CONTEXT 6Y2J ... BRN NCH24 [OFFLINE FILE 6Y3H ... BRN NCH26 [JOB SOURCE 6Y4G ... [ELSE MOP CONSOLE 6Y5F ...) 6Y6D ...#UNS EDPOINTER 6Y7C ...#SKI 6Y8G NCH6 OUTPARAM 1,IEBF [OUTPUT OR 6YN6 BRN NCH8 6^7Q NCH7 LDX 1 IEL3(2) [GET I CHARACTER 6^MB DCH 1 IEBF(2) [INSERT IN BUFFER 7272 LDN 1 1 [COUNT OF 1 727G ... 7282 ... STOZ IESP(2) [STOPS USER ATTEMPTING TO 728G ... STOZ IESTACK(2) [DO 'I/ONE LINE 7292 ... STOZ IESTACK+1(2) [ANOTHER LINE/*THING' ,ET AL 729K ... 72#8 ...#UNS EDPOINTER 72BR ... BRN NCH5A 72FB ...#UNS EDPOINTER 72H^ ...#SKI 72LL BRN NCH6 [J TO SET IT UP 736= NCH8 READY NCH28 [WAIT FOR INPUT / J IF BROKEN IN 73KW TESTBRKIN NCH28 [TESTS FOR ABANDON ACTUALLY 73PR ... 73TN ...#UNS EDPOINTER 73^K ... OUTPARAM AWORK3(2),IEBF 745G MHUNTW 3,FILE,FRB [FIND NEW INSTRUCTION RECORD 74K6 LDEX 4 A1(3) [LENGTH 754Q # 75JB NCH10 LDX 5 A1+1(3) [2ND RED TAPE WORD 7642 ANDX 5 CACT [&LEAR BITS 2-23 76HL SBN 4 2 [ADJUST LENGTH FOR HEADER 773= BZE 5 NCH12 [J IF INTEGRAL NO. OF WORDS 77GW SBN 4 1 [ELSE ADJUST FOR LAST WORD 782G NCH12 ORS 5 4 [CONJUGATE INTO CHARACTER ADDRESS 78G6 SLC 4 2 [CONVERT TO CHARACTER COUNT 78^Q #SKI JDIAG1 79FB LDX 6 IEIG(2) [START ADDRESS 79^2 #SKI JDIAG1<1$1 7=DL LDN 6 A1+2 [START ADDRESS 7=Y= STO 6 IEIP(2) [STORE IN INSTRUCTION POINTER 7?CW STO 3 IEIA(2) [STORE BLOCK ADDRESS 7?XG BNZ 4 NCH14 [J IF NOT ZERO LENGTH TRANSFER 7#C6 SLC 6 2 [CONVERT TO COUNT 7#WQ STOZ IEIP(2) [RE-READ NEXT TIME 7*BB STO 6 IEIH(2) [END AND START ADDRESSES THE SAME 7*W2 BRN NCH20 7B*L NCH14 ADX 3 6 [ADD IN START ADDRESS 7BT= LDX 1 3 [AT THIS POINT WE HAVE TO 7C#W LDX 0 1 [LOP OFF ALL THE TRAILING 7CSG NCH16 LDCH 7 0(1) [SPACES SO GET EACH CHARACTER 7D#6 SBN 7 #20 [AND IF NOT A SPACE REMEMBER 7DRQ BCHX 1 £ [THE ADDRESS. NOTE WE HAVE 7F?B BZE 7 NCH18 [PRESET X0 SO THAT AN ENTIRE 7FR2 STO 1 0 [RECORD OF SPACES TURNS OUT TO 7G=L NCH18 BCT 4 NCH16 [BE NULL. AT END OF RECORD WE 7GQ= SBX 0 IEIA(2) [HAVE A CHARACTER MODIFIER FOR THE 7H9W LDX 1 FX1 [NEXT CHARACTER AFTER THE END. 7H*2 ... 7HD6 ... BXU 0 IEIG(2),NCH19 [J IF NOT ALL SPACES 7HH= ... STOZ IEIP(2) [SET ZERO CHAR COUNT 7HLB ...NCH19 7HPG SLC 0 2 [CONVERT TO COUNT 7J96 STO 0 IEIH(2) [STORE THE END ADDRESS 7JNQ # 7K8B NCH20 PHOTO 5 [GET PHOTO OF 7KN2 LDN 0 IENZ(2) [BLOCK AND STORE 7L7L STO 5 IEIM(2) [AT THIS POINT WE 7LM= LDX 6 IESW(2) [CHECK SWITCH WORD 7M6W SLL 6 2 [TO SEE IF IN I INSTRUCTION 7MLG BNG 6 NCH22 [J IF SO 7N66 LDN 7 IENY(2) [OTHERWISE WE UPDATE 7NKQ LDN 6 IENR(2) [THE FINGERS IN FILES: 7P5B MOVE 7 4 [THE MEMORIES NECESSARY 7PK2 MOVE 6 4 [FOR THE FORGET INSTRUCTION 7Q4L LDN 6 3 [FOR THE SAME REASON 7QJ= ANDX 6 IESW(2) [WE HAVE TO 7R3W ERS 6 IESW(2) [SHIFT LEFT 7RHG ANDN 6 1 [THE F BITS, 7S36 SLL 6 1 [BITS 22 AND 23, 7SGQ ORS 6 IESW(2) [IN THE SWITCH WORD 7T2B # 7TG2 NCH22 LDX 3 IEIP(2) 7TJK ... 7TM8 ...#UNS EDPOINTER 7TPR ... BZE 3 NCH23 7TSB ...#UNS EDPOINTER 7TW^ ...#SKI 7T^L BZE 3 NCHEX [J IF NULL BLOCK 7WF= LDN 5 #1000 [COMMANDS CATEGORY 7WYW LDX 4 IEIP(2) [SET UP 7XDG SLC 4 2 [CURRENT 7XY6 NGX 4 4 [EDITING 7YCQ ADX 4 IEIH(2) [RECORD 7YF7 ... 7YGJ ...#UNS EDPOINTER 7YH^ ...( 7YKB ... OUTPARAX 4,IEIP(2),FILE,FRB 7YLR ...NCH23 7YN8 ... MONOUT ISEDRDY [N.M_ COMMAND ETC 7YPK ... BZE 3 NCHEX [J IF NULL BLOCK 7YR2 ...) 7YSC ...#UNS EDPOINTER 7YTS ...#SKI 7YXB OUTMONX 4,IEIP(2),5,FILE,FRB 7^C2 CALL 6 RLIF [GET INSTRUCTION BLOCK 7^WL CALL 0 OH 82B= LDX 3 IEIP(2) [RESET X3 82TW LDX 6 IEL1(2) [GET LINK 83*G ADX 6 1 83T6 BRN NCH1 [J TO LOAD CHAR 84#Q # 84SB NCHEX LDX 6 IEL1(2) [GET LINK 85#2 ADX 6 1 [AND DATUMISE 85RL LDN 0 0 [SET CHAR POSITION NEGATIVE 86?= EXIT 6 0 [EXIT END OF RECORD 86QW # 87=G NCH24 LDX 3 IEON(2) [IEON GIVES APPROPRIATE OLD FILE 87Q6 NCH25 READ 1(3) [READ A RECORD 889Q MHUNTW 3,FILE,FRB [GET THE BLOCK 88PB LDEX 4 A1(3) 8992 BNZ 4 NCH10 [J NOT END OF FILE 89NL FREECORE 3 [FREE NULL BLOCK 8=8= CALL 6 POPUP [POP UP STACK 8==T ... 8=*D ...#UNS EDPOINTER 8=D3 ... BRN NCH6A [DO IT ALL AGAIN 8=GL ...#UNS EDPOINTER 8=K9 ...#SKI 8=MW BRN NCH4 [DO IT ALL AGAIN 8?7G # 8?M6 NCH26 ALASHUNT 3,6 8#6Q ADDREC 3,6 [KEEP COMMAND PROCESSOR HAPPY 8#LB NGN 3 3 [ONLINE FILE IS -2 8*62 BRN NCH25 8*KL # 8*M3 ... 8*ND ...#UNS EDPOINTER 8*PT ...( 8*R= ...NCH28 8*SM ... OUTPARAM AWORK3(2),IEBF 8*W4 ... MONOUT ISEDRDY [N.M_ COMMAND ETC 8*XF ... CALL 6 XBKOF 8*YW ...) 8B2? ...#UNS EDPOINTER 8B3N ...#SKI 8B5= NCH28 CALL 6 XBKOF [CLEAR THE BREAK-IN 8BJW CALL 6 UMOP [PUSH DOWN STACK 8BMF ... 8BQ4 ...#UNS EDPOINTER 8BSM ... BRN NCH6 [DO IT ALL AGAIN 8BX= ...#UNS EDPOINTER 8B^T ...#SKI 8C4G BRN NCH4 [DO IT ALL AGAIN 8CJ6 # 8D3Q # 8DHB # 8F32 NCHX [NEXT CHARACTER WITH A SYNTAX 8FGL # 8G2= CALL 6 NCH 8GFW BRN SE4 [ERROR IF OFF END 8G^G EXIT 5 0 8HF6 # 8HYQ # RLIF RELOCATES THE INSTRUCTION BLOCK. 8JDB # 8JY2 RLIF LDX 5 IEIM(2) [GET PHOTO COUNT 8K7S LDX 3 IEIA(2) 8KCL TESTMOVE 5,RL1 [J IF BLOCK IS STILL THERE 8KX= HUNTW 3,FILE,FRB [OTHERWISE FIND IT 8LBW BNG 3 RL2 [J IF LOST 8LWG PHOTO 5 [GET NEW PHOTO COUNT 8MB6 STO 3 IEIA(2) [STORE NEW POINTER 8MTQ STO 5 IEIM(2) [STORE NEW PHOTO COUNT 8N*B RL1 EXIT 6 1 [EXIT TO CALL+2 8NT2 RL2 STOZ IEIP(2) [FORCE A RE-READ 8P#L EXIT 6 0 [EXIT TO CALL+1 8WNG # 8X86 # 8XMQ # NEXT CHECKS THE NEXT NON-SPACE CHARACTER 8Y7B # IF NOT COMMA OR RT PARENTHESIS --->SE1 8YM2 # 8^6L NEXT LDX 5 IEIP(2) 8^L= NX1 CALL 6 NCH [GET NEXT CHAR 925W BRN NX2 [J IF OFF END 92KG BXE 7 O20(1),NX1 [J IF SPACE 9356 BXE 7 O34(1),NX2 93JQ BXE 7 O31(1),NX2 944B BRN SE1 94J2 NX2 STO 5 IEIP(2) [BACKSPACE 953L EXIT 4 0 95H= # 962W # 96GG # CODE FOR DEALING WITH SYNTAX ERRORS. 9726 # ENTRIES ARE - 97FQ # SE1 SCAN, STARTING AT NEXT CHARACTER 97^B # SE2 SCAN, STARTING AT THIS CHARACTER 98F2 # SE3 SCAN ENDED AT CURRENT CHARACTER 98YL # SE4 SCAN ENDED AT LAST CHARACTER 99D= # 99XW # 9=CG SE1 CALL 5 NCHX [GET ANOTHER CHARACTER 9=X6 SE2 BXE 7 O31(1),SE3 [J IF *34 9?BQ BXU 7 O34(1),SE1 [LOOP NOT *31 9?WB SE4 STO 0 IEIP(2) 9#B2 SE3 9#TL DOWN EDITER,3 ['SYNTAX ERROR : OH!' 9**= # 9*SW # 9B#G N14EDITOR 9BS6 NER CALL 6 MOPTEXT [CHECK CONTEXT 9C?Q BRN XEND [ABORT IF EITHER OFFLINE 9CRB BRN XEND [OR NOT MOP ONLINE 9D?2 STOZ IEIP(2) [IF MOP FORCE A RE-READ 9DQL BRN PREPARSE 9F== XERR DOWN EDITER,4 ['EXECUTION ERROR: OH' 9FPW BRN XEND 9G9G N12EDITOR 9GP6 CALL 6 MOPTEXT 9H8Q BRN XERR 9HNB BRN XERR 9J82 STOZ IEIP(2) 9JML BRN PREPARSE 9K7= # 9KLW TLU STO 7 3 [TABLE LOOK-UP 9L6G SRC 3 2 [CONVERT TO CHARACTER ADDRESSS 9LL6 ... SMO 6 9M5Q ... OBEY 0 9MKB LDCH 3 0(3) [ACCESS TABLE 9N52 ADS 1 3 [DATUMISE RESULT 9NJL EXIT 6 1 [AND FINISH 9P4= # 9PHW VDXEQ SBX 6 1 [DOES V,D INSTRNS 9Q3G STO 6 AWRK1(2) [STORE LINK 9QH6 VD0 CALL 6 NCH 9R2Q BRN NOV [NO PARAMETER 9RGB BXE 7 O20(1),VD0 9S22 BXE 7 O34(1),NOV 9SFL BXE 7 O31(1),NOV 9S^= VDX LDX 6 AWRK1(2) 9TDW ADX 6 1 [RECLAIM LINK AND DATUMISE 9TYG EXIT 6 0 9WD6 NOV LDCT 7 #777 [SET TOP BITS OF DS OR VS 9WXQ STO 0 IEIP(2) 9XCB BRN VDX [J TO EXIT 9XX2 # 9YBL VI CALL 6 VDXEQ [DO V 9YW= STO 7 IEVS(2) [SET V.S 9^*W BRN WINDT 9^TG # =2*6 XDI CALL 6 VDXEQ [DO D =2SQ STO 7 IEDS(2) [SET D.S =3#B BRN WINDT =3S2 # =4?L PARL LDX 4 IESP(2) [LEFT PARENTHESIS =4#M ...#UNS ICT =4*N ...( =4BP ... LDXC 6 IESP(2) [J IF NOT CONDIT. REPETITION =4CQ ... BCC PARL1 =4DR ... LDCT 6 1 [J IF ACTIVITY PRIORITY REDUCED =4FS ... ANDX 6 IESW(2) [ALREADY =4GT ... BNZ 6 PARL1 =4HW ... LDCT 6 1 [CHANGE PRIORITY TO LOWEST VALUE =4JX ... ORS 6 IESW(2) [& SET SWITCH =4KY ... APCHANGE DOWN =4L^ ... CALL 6 RLIF [FIND INSTRUCTION BLOCK =4N2 ... CALL 0 OH [ERROR IF LOST =4P3 ...PARL1 =4Q4 ...) =4R= SLC 4 1 [RECURESE BY PUSHING =4WB ...#UNS EDLOOP =4^G ... ADN 4 18 [ADD 9 TO STACK POINTER BUT LEAVE B0 =54L ...#UNS EDLOOP =57Q ...#SKI =5=W ADN 4 14 =5QG SRC 4 1 [B0 OF POINTER =6=6 STO 4 IESP(2) [THEN CARRY ON =6PQ BRN PREPARSE =79B #SKI JDIAG1 =7P2 ( =88L # =8N= # ROUTINE TO DO THE FINAL SYNTAX ANALYSIS ON =97W # THE 'TG' AND 'PG' INSTRUCTIONS =9MG # EXITS CALL+1 SYNTAX ERROR ==76 # CALL+2 SYNTAX OK ==LQ # =?6B PGTG =?=? ... LDX 4 IEWT(2) =?B8 ... ANDN 4 #1 =?G5 ... BZE 4 TATA [J IF NOT CONTEXT =?L2 LDCT 4 #100 =#5L ANDX 4 IEWT+1(2) =#K= BZE 4 TATA [NOT 'TG OR 'PG' =*4W LDN 4 #4 =*JG ANDX 4 IESW(2) =B46 BZE 4 (6) [NOT 'GEDIT' =BHQ LDX 4 IESP(2) =C3B BNZ 4 (6) [J IF NESTED =CH2 LDX 4 IEWT+1(2) =D2L ANDX 4 BSB18 [#00777777 =DG= SBN 4 4 =D^W BNZ 4 (6) [NOT FOUR CHAR STRING =FFG TATA EXIT 6 1 [OK =F^6 ) =GDQ # =GYB # THIS ROUTINE CHECKS ON THE JOBTIME. IF EXCEEDED AND NOT =HD2 # MOP THEN EDIT IS ABANDONED. FOR MOP MORE TIME IS GIVEN. =JC= # =JWW ...TIME =KBG ... CALL 4 XJOBTIME =MSL TXL 7 ATIMEJ+1(3) [TEST FOR TIME UP =N#= TXL 6 ATIMEJ(3) =NRW BCS TIMEX [J IF NOT TIME UP =P?G LDX 6 CONTEXT(2) =PR6 SRC 6 4 =Q=Q BPZ 6 XITER [FINISH IF NOT MOP JOB =QQB SBX 5 1 =R=2 STO 5 AWORK1(2) [SAVE LINK =RPL LDX 6 JOBTIME =S9= MPY 6 THOU(1) [MILLISECS =SNW ADSC 7 ATIMEJ+1(3) [INCREASE USERS JOBTIME =T8G ADS 6 ATIMEJ(3) =TN6 MONOUT JOBTEX [COMMENT ON FACT =W7Q LDX 5 AWORK1(2) [RESTORE LINK =WMB ADX 5 1 =X72 TIMEX EXIT 5 0 =XLL #PAG =Y6= # =YKW # TRANSLATE IS THE ROUTINE WHICH ACTUALLY CAUSES THE INSTRUCTIONS TO =^K6 # COMPLICATED BY THE FACT THAT BRACKETS ARE ALLOWED. THIS ROUTINE ?24Q # ONLY TAKES VALUES OUT OF THE STACK WHICH ARE LEFT THERE BY THE ?2JB # ROUTINE PREPARSE. THE THREE INSTRUCTIONS FOR LEFT PARENTHESIS ARE ?342 # THE ONES WHICH DO THE RECURSION. ?3HL # ?43= T3 [INSTRUCTION EXECUTION FANOUT ?4GW #REP #20 ?52G 0 ?5G6 N10EDITOR ?5^Q TRANSLATE [THIS IS IT ! ?6FB # ?6P8 ... TESTBRKIN N8EDITOR ?78S ...TRANS ?7DL CALL 5 TIME [CHECK ON JOB TIME ?7Y= CALL 6 RLIF [GET INSTRUCTION BLOCK ?8CW CALL 0 OH [ERROR IF LOST ?8XG LDX 6 IEPS(2) [RESET THE CURRENT POINTER ?9C6 STO 6 IEIP(2) [TO WHERE PERPARSE STARTED ?9WQ LDCT 6 #100 [CLEAR ?=BB ORS 6 IESW(2) [I ?=W2 ERS 6 IESW(2) [SWITCH ??*L # ??T= TR1 CALL 6 NCH [GET CHARACTER ?##W BRN PREPARSE [IF END START AGAIN ?#D2 ...# BEFORE EXECUTING ANY INSTRUCTION TEST IF ?#H6 ...# WE ARE ON A TERMINATOR. THE ROUTINE ?#L= ...# WILL ONLY RETURN IF WE ARE NOT ?#PB ... DOWN EDITPT,12 ?#Q7 ...# REHUNT EDIT FILE ?#QY ... CALL 6 RLIF ?#RP ... CALL 0 OH ?#SG TRACE 7,IENSTRUK ?*#6 CALL 6 TLU [LOOK UP THE ?*RQ ADN 3 T3(1) [TABLE AT T3 ?B?B EXIT 3 TR0 [AND FANOUT ?BR2 # ?C=L UINS PAIR EDITMFO,1 ?CQ= MINS PAIR EDITMFO,2 ?D9W UMIN ACROSSVAR 0(1) ?DPG # ?F96 MMMM CALL 4 STNP [LOCATE FIRST CHARACTER ?FNQ STO 0 IEIP(2) [ADDRESS OF 1ST CHARACTER ?G8B LDN 1 MINS(1) [J TO OPEN FILE ?GN2 BRN UMIN ?H7L # ?HM= ...OOOO ACROSS EDITORA,3 [O INSTRUCTION ?J6W ...XHHH ACROSS EDITORA,4 [H INSTRUCTION ?JLG ...NLSW ACROSS EDITORA,5 [N,L & W INSTRUCTIONS ?K66 ...XI ACROSS EDITORA,6 [I INSTRUCTION #8M6 OH GEOERR 1,EDIT #96Q # #9LB XECUTE [THIS EOES X INSTRN #=62 CALL 6 PULLUP [PULLUP INPUT STACK #=KL DOWN EDITPT,11 #?5= STOZ IENO(2) [X SIMULATES O# #?8B ... LDX 7 IESW(2) [CHECK FOR W FACILITY #??G ... SLL 7 3 #?BL ... BPZ 7 WINDT [J IF W NOT BEING USED #?FQ ... DOWN EDWRITE,10 [LIST THE RECORD #?JW BRN WINDT [CARRY ON ##4G TR0 CALL 0 OH ##J6 # #*3Q SHIFT CALL 5 NCHX [DELTA SHIFT #*HB BXE 7 O31(1),TR1 [IGNORE IF #B32 BXU 7 O32(1),OH [J NOT #BGL STOZ IEIP(2) [IMPLEMENT IT #C2= # #CFW IETS #34,0?-TR0,T3 [COMMA: TO BE IGNORED #C^G # #DF6 BRN PREPARSE #DYQ # #FDB IETS #20,0?-TR0,T3 #FY2 IET ],$ #GCL BRN TR1 #GX= # #HBW IETS ^,0?-TR0 [DELTA SHIFT #HWG BRN SHIFT [LOOK AT IT #JB6 # #JTQ IETS V,0?-TR0 [V INSTRUCTION #K*B BRN VI [EXECUTE #KT2 # #L#L IETS D,0?-TR0 [D INSTRUCTION #LS= BRN XDI [EXECUTE #M?W # #MRG IETS L,0?-TR0 [L INSTRUCTION #N?6 ... LDCT 4 #400 [L-SWITCH BIT #NQQ BRN NLSW #P=B # #PQ2 IETS N,0?-TR0 [N INSTRUCTION #Q9L ... LDCT 4 #200 [N-SWITCH BIT #QP= BRN NLSW #R8W # #RNG IETS W,0?-TR0 [W INSTRUCTION #S86 ... LDCT 4 #40 [W SWITCH BIT #SMQ BRN NLSW #T7B # #TM2 IETS Z,0?-TR0 [Z INSTRUCTION #W6L CALL 6 POPUP [POPUP INSTRUCTION STACK #WL= BRN WINDT [CARRY ON #X5W # #XKG IETS X,0?-TR0 [X INSTRUCTION #Y56 BRN XECUTE [J TO DO X #YJQ # #^4B # #^J2 IETS F,0?-TR0 [F INSTRUCTION *23L DOWN EDWRITE,9 [EXECUTE IT *2H= BRN WINDT *32W # *3GG IETS A,0?-TR0 [A INSTRUCTION *426 CALL 6 SPDS [EVALUATE OPERAND *4FQ ACROSS EDITPT,3 [EXECUTE INSTRUCTION *4^B # *5F2 IETS B,0?-TR0 [B INSTRUCTION *5YL CALL 6 SPDS [EVALUTE OPERAND *6D= ACROSS EDITPT,4 [EXECUTE INSTRUCTION *6XW # *7CG IETS R,0?-TR0 [R INSTRUCTION *7X6 CALL 6 SPDS [EVALUATE OPERAND *8BQ ACROSS EDITPT,5 [EXECUTE INSTRUCTION *8WB # *9B2 IETS T,0?-TR0 [T INSTRUCTION *9TL CALL 6 SPTR [SET PARAMETERS *=*= CALL 6 TERM [EVALUATE *=SW #SKI JDIAG1 *?#G ( *?S6 CALL 6 PGTG [CHECK 'TG' *#?Q BRN SE3 *#RB ) **?2 TR4 ACROSS EDITPT,7 [EXECUTE INSTRUCTION **QL # *B== IETS P,0?-TR0 [P INSTRUCTION *BPW CALL 6 SPTR [SET PARAMETERS *C9G CALL 6 TERM [EVALUATE *CP6 #SKI JDIAG1 *D8Q ( *DNB CALL 6 PGTG [CHECK 'PG' *F82 BRN SE3 *FML ) *G7= ACROSS EDITPT,8 [EXECUTE INSTRUCTION *GLW # *H6G IETS #23,0?-TR0 [IMPLICIT T INSTRUCTION *HL6 IET -,0,1,2,3,4,5,6,7,8,9,. *J5Q CALL 6 SPTR [SET PARAMETERS *JKB LDN 6 TR4(1) [EXECUTES INSTRUCTION *K52 BRN TERI [EVALUATES *KJL # *L4= IETS M,0?-TR0 [M INSTRUCTION *LHW BRN MMMM *M3G # *MH6 IETS O,0?-TR0 [O INSTRUCTION *N2Q BRN OOOO *NGB # *P22 IETS H,0?-TR0 [H INSTRUCTION *PFL BRN XHHH *P^= # *QDW IETS E,0?-TR0 [E INSTRUCTION *QYG N11EDITOR *RD6 XEND ACROSS EDITPT,2 [COPY FILE AND FINISH *RXQ # *SCB IETS Q,0?-TR0 [Q INSTRUCTION *SX2 BRN XBK1 [ABANDON *TBL # *TW= IETS #30,0?-TR0 [LEFT PARENTHESIS *W*W BRN PARL [RECURSE *WTG # *X*6 IETS #31,0?-TR0 [RIGHT PARENTHESIS *XSQ BRN WIN1 *Y#B # *YS2 IETS I,0?-TR0 [I INSTRUCTION *^?L CALL 4 STNP [FIND *^R= BRN XI [AND INSERT STRING B2=W # B2QG TR2 IETS U,0?-TR0 [U INSTRUCTION B3=6 CALL 6 NCH [NEXT CHARACTER B3PQ BRN TR3 [J NO OPERAND B49B BXE 7 O20(1),TR2 [IGNORE SPACE B4P2 BXE 7 O34(1),TR3 [J NO OPERAND B58L BXE 7 O31(1),TR3 [J NO OPERAND B5N= STO 0 IEIP(2) [RESET CHARACTER B67W LDN 1 UINS(1) [POSITION AND B6MG BRN UMIN [J TO OPEN FILE B776 TR3 STO 0 IEIP(2) [RESET CHARACTER POSITION B7LQ CALL 6 UMOP [PUSH DOWN INSTRUCTION STACK B86B # B8L2 # INSTRUCTION EXECUTED B95L # B9K= N3EDITOR B=4W ...WINDT B=JG CALL 6 RLIF [FIND BLOCK B?46 CALL 0 OH [ERROR IF LOST B?HQ WIN0 CALL 6 NCH [ANOTHER CHARACTER B#3B BRN WIN5 [END, CHECK STACK B#H2 BXE 7 O20(1),WIN0 [LOOP IF SPACE B*2L BXE 7 O34(1),PREPARSE [*34 ENDS B*G= BXE 7 O31(1),WIN1 [*31, CHECK STACK B*^W BXE 7 O32(1),WIN00 [J IF #32,ELSE ERROR BBFG STO 0 IEPS(2) BB^6 BRN SE3 BCDQ WIN00 SMO IESP(2) [GET THE CURRENT BCYB LDX 4 IESTACK+1(2) [REPEAT ENTRY BDD2 BZE 4 SE3 [(ERROR IF ALREADY ZERO) BDXL SBN 4 1 [AND DECREMENT BFC= BZE 4 WIN4 [J IF FINISHED BFWW SMO IESP(2) [ELSE LEAVE NEW BGBG STO 4 IESTACK+1(2) [VALUE BGW6 COOR2 [WAIT BJ*2 ... BRN TRANS [REPEAT BJSL WIN1 BK#= LDX 3 IESP(2) BKRW ANDX 3 BITS22LS BL?G BZE 3 SE4 [SYNTAX ERROR SINCE STACK UNDERFLOWS BLR6 ADS 2 3 [ELSE GET CURRENT STACK MODIFIER BLW= ...#UNS EDLOOP BL^B ... LDXC 5 IESTACK-9(3) [GET STACK ENTRY BM4G ...#UNS EDLOOP BM7L ...#SKI BM=Q LDXC 5 IESTACK-7(3) [GET STACK ENTRY BM?K ...#UNS ICT BM#D ...( BM*? ... BCC WIN1A [J IF NOT CONDIT. REPETITION BMB6 ... LDCT 4 1 [J IF ACTIVITY PRIORITY REDUCED BMB^ ... ANDX 4 IESW(2) [ALREADY BMCS ... BNZ 4 WIN2 BMDM ... LDCT 4 1 [CHANGE PRIORITY TO LOWEST VALUE & BMFG ... ORS 4 IESW(2) [SET SWITCH BMG* ... APCHANGE DOWN BMH8 ... CALL 6 RLIF [FIND INSTRUCTION BLOCK BMJ3 ... CALL 0 OH [ERROR IF LOST BMJ9 ... LDX 3 IESP(2) [RELOAD X3 OVERWRITTEN BY RLIF BMJC ... ANDX 3 BITS22LS BMJK ... ADS 2 3 BMKP ... BRN WIN2 BMLJ ...WIN1A BMMC ...) BMN= ...#UNS ICT BMP5 ...#SKI BMQB BCS WIN2 [J IF BMTG ...#UNS EDLOOP BMYL ... LDX 4 IESTACK-8(3) [GET COUNTER BN3Q ...#UNS EDLOOP BN6W ...#SKI BN=2 LDX 4 IESTACK-6(3) [GET COUNTER BNPL SBN 4 1 BP9= BZE 4 WIN3 [J IF ENOUGH BP#B ...#UNS EDLOOP BPCG ... STO 4 IESTACK-8(3) [AND RESET BPGL ...#UNS EDLOOP BPKQ ...#SKI BPNW STO 4 IESTACK-6(3) [AND RESET BPPS ...#UNS EDLOOP BPQQ ...( BPRN ... BRN WIN2B [J IF NOT CONDITIONAL REPETITION BPSL ...WIN2 LDX 5 IEOR(2) [LOAD CURRENT OLDFILE RECORD NO BPTJ ... LDX 6 IEOC(2) [LOAD CURRENT OLDFILE CHARACTER NO BPWG ... TXU 5 IESTACK-2(3) [J IF DIFFERENT POSITION IN OLDFILE BPXD ... TXU 6 IESTACK-1(3) [FROM LAST PASS THRU REPEATED INSTNS BPYB ... BCS WIN2A BP^# ... LDX 6 IESTACK-9(3) [SET IEPS TO POINT TO ( BQ2= ... ANDX 6 BITS22LS BQ38 ... SBN 6 1 BQ46 ... SRC 6 2 BQ54 ... STO 6 IEPS(2) BQ62 ... LDX 6 IESTACK-8(3) [SET IEIP TO POINT AFTER TERMINATOR BQ6Y ... STO 6 IEIP(2) [TO OUTPUT IN FULL INCORRECT REPETITI BQ7W ... [INSTRUCTIONS BQ8S ... EDERR INCL [REPORT ERROR-INSTRUCTION NOT BQ9Q ... DOWN EDITER,4 [COMPLETED,WOULD CAUSE EDITOR TO LOOP BQ=N ... STOZ IESP(2) [CLEAR STACK BQ?L ... BRN NER [ABORT UNLESS MOP ONLINE EDIT BQ#J ...WIN2A STO 5 IESTACK-2(3) BQ*G ... STO 6 IESTACK-1(3) BQBD ... LDXC 5 IESTACK-9(3) [RELOAD X5 BQCB ...WIN2B SRC 5 2 BQD# ...) BQF= ...#UNS EDLOOP BQG8 ...#SKI BQH6 ...( BQJ4 ... BRN WIN2B BQK2 ...WIN2 LDXC 5 IESTACK-7(3) [RELOAD X5,MAYBE OVERWRITTEN BY RLIF BQKY ...WIN2B SRC 5 2 BQLW ...) BQN6 STO 5 IEIP(2) [ADDRESS AND BQPH ... SEGENTRY K60EDITOR BQQY ... BRN RP10 BQS* ...# [TO USE MILL. BQTQ ... LDX 6 ACTCHCH(2) [CALL LETOPRUN IF NO. OF CHAPTER BQX7 ... SBX 6 IERP(2) [CHANGES SINCE PREVIOUS LETOPRUN BQYJ ... BXL 6 EDRPCHCH,RP10 [NOT LESS THAN N(NIS EDITRP PARAM.). BQ^^ ... LETOPRUN [LET ANOTHER ACTIVITY OR PROGRAM BR3B ... LDX 6 ACTCHCH(2) [USE MILL BR4R ... STO 6 IERP(2) [STORE NO. OF CHAPTER CHANGES BR5= ... BRN PREP [FIND INSTRUCTION BLOCK & CARRY ON BR68 ...RP10 BR6^ ... SEGENTRY K61EDITOR BR7Q BRN PREPARSE [CARRY ON BRMB WIN3 LDX 4 IESP(2) [PULL UP STACK BS72 SLC 4 1 [IF THIS LEAVES BS=6 ...#UNS EDLOOP BS*= ... SBN 4 18 [THE POINTER NEGATIVE BSDB ...#UNS EDLOOP BSHG ...#SKI BSLL SBN 4 14 [THE POINTER NEGATIVE BT6= BPZ 4 WIN30 [WE HAVE REACHED THE END BT7D ...#UNS ICT BT8L ...( BT9S ... LDCT 6 1 [J IF ACTIVITY PRIORITY HAS NOT BEEN BT?2 ... ANDX 6 IESW(2) [CHANGED TO LOWEST VALUE BT#8 ... BZE 6 WIN3A BT*B ... LDCT 6 1 [RESET ACTIVITY PRIORITY OF CPAT BTBJ ... ERS 6 IESW(2) [& UNSET SWITCH BTCQ ... APCHANGE UP BTDY ... CALL 6 RLIF [FIND INSTRUCTION BLOCK BTG6 ... CALL 0 OH [ERROR IF LOST BTH# ...WIN3A BTJG ...) BTKW STOZ IESP(2) [SO WE SHOULD BW5G BRN WIN4 [CLEAR POINTER BWK6 WIN30 SRC 4 1 [ELSE STORE BX4Q STO 4 IESP(2) [NEW VALUE BXJB WIN4 CALL 6 NCH [END OF THE INSTRUCTION BY42 BRN PREPARSE [J FOR END BYHL BXE 7 O34(1),PREPARSE [*34 IS END B^3= BXU 7 O31(1),WIN4 [LOOP IF NOT *31 EITHER B^GW BRN WIN1 [*31 SO REPEAT C22G WIN5 LDXC 7 IESP(2) [CHECK STACK C2G6 BZE 7 PREPARSE [J IF OK C2^Q CALL 0 OH [ELSE ERROR C3FB # C3^2 STNP CALL 6 NCH [SKIP TO FORST NON-SPACE CHARATCER C4DL BRN SE4 [ERROR IF OFF END C4Y= BXE 7 O20(1),STNP [LOOP IF NOT *20 C5CW EXIT 4 0 [ELSE EXIT CW#Q # CWSB # THIS ROUTINE SETS THE PARAMETERS FOR TRANSLATE TO CALL TERM CX#2 # CXRL SPTR LDN 3 IEWT [ADDRESS OF O/P CY?= LDX 4 IEOC(2) [CURRENT CHARACTER NUMBER CYQW LDX 5 IEOR(2) [CURRENT RECORDNUMBER C^=G EXIT 6 0 C^Q6 # D29Q # THE ROUTINES TERM AND TERI ARE IN SEGMENT EDITET. D2PB # D392 TERM SBX 6 1 [RELATIVISE LINK D3NL DOWN EDITET,1 [EVALUATE FROM NEXT CHARACTER D48= BRN NER [J IF SYNTAX ERROR D4MW ADS 1 6 [DATUMISE LINK D57G EXIT 6 0 [AND RETURN D5M6 # D66Q TERI SBX 6 1 [RELATIVISE LINK D6LB DOWN EDITET,2 [EVALUATE FROM THIS CHARACTER D762 BRN NER [J IF SYNTAX ERROR D7KL ADS 1 6 [DATUMISE LINK D85= EXIT 6 0 [AND RETURN D8JW # D94G # THIS ROUTINE EVALUATES THE OPERAND FOR THE A,B AND R INSTRUCTIONS D9J6 # OUTPUT IS IN IEWT AS FOLLOWS: D=3Q # D=HB # IEWT+1 ADDRESS OF FIRST CHARACTER IN FIRST STRING D?32 # IEWT+2 LENGTH OF FIRST STRING D?GL # IEWT+3 ADDRESS OF FIRST CHARACTER IN SECOND STRING D#2= # IEWT+4 LENGTH OF SECOND STRING D#FW # D#^G # NOTE THAT NULL STRINGS ARE ALLOWED HERE. D*F6 # D*YQ SPDS STO 6 IEL1(2) [STORE LINK DBDB CALL 4 STNP [FIND FIRST NON-SPACE CHARACTER DBY2 STO 7 5 [REMEMBER IT DC7S STOZ IEWT(2) [IN CASE LAST INST. WAS'P-' DCCL LDN 1 IEWT+1(2) [ADDRESS OF O/P DCX= SPD1 STO 3 0(1) [STORE STRING ADDRESS DDBW NGN 4 1 [CUNNING COUNT SET DDWG SPD2 CALL 6 NCH [GET NEXT CHARACTER DFB6 CALL 0 OH [ERROR IF END OF BLOCK DFTQ ADN 4 1 [COUNT CHARACTER DG*B BXE 7 5,SPD3 [J IF TERMINAL QUOTE DGT2 BXU 7 IEVS(2),SPD2 [LOOP IF NOT V.S. DH#L LDX 3 0 [ELSE REPLACE THE DHS= LDN 7 #20 [V.S. CHARACTER IN DJ?W SMO IEIA(2) [THE BUFFER BY A DJRG DCH 7 0(3) [SPACE THEN LOOP DK?6 BRN SPD2 [AS BEFORE DKQQ SPD3 STO 4 1(1) [STORE LENGTH DL=B ADN 1 2 [INCREMENT ADDRESS DLQ2 BVCI SPD1 [FLOP DM9L LDX 6 IEL1(2) [