EDITORA865
(George Source)
Macros used: ACROSS, ADDREC, ALASHUNT, ALTLEN, ALTLEND, APCHANGE, BXE, BXGE, BXL, BXU, CLOSE, CLOSEABANDON, COMBRKIN, DOWN, EDCOM, ENDCOM, FIXTRA, FJOCA, FREECORE, GEOERR, HUNTW, LOSEPARS, MENDAREA, MHUNTW, MONOUT, OUTMONX, OUTPACK, OUTPAR, OUTPARAM, OUTPARAX, PHOTO, READ, READY, SEGENTRY, TESTBRKIN, TESTMOVE, TESTRACE, UP, UPDATEJT
- EDITORA865.txt
22FL ...#LIS K0EDITORA>K0ALLGEO>0 22^= ...#SEG EDITORA865 [DICK RUSBRIDGE 23DW # 23YG # GEORGE 3 AND 4 INTEGRAL EDITOR. 24D6 # ------------------------------- 24XQ # 25CB ... 8HEDITORA 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. 28F3 ...# 28JY ...# EDITORA IS A NEW SEGMENT RESULTING FROM THE SPLITTING OF SEGMENT 28NT ...# EDITOR FOR 8.65. 28SQ # 29#B # 2?=W # ENTRY POINT BRANCH TABLE 2?QG # 2#=6 ... SEGENTRY K1EDITORA,OH 2#PQ ... SEGENTRY K2EDITORA,N2EDITORA [SHUTDOWN WITH CLOSEABANDON 2*9B ... SEGENTRY K3EDITORA,N3EDITORA [O INSTRUCTION 2*P2 ... SEGENTRY K4EDITORA,N4EDITORA [H INSTRUCTION 2B8L ... SEGENTRY K5EDITORA,N5EDITORA [L & N INSTRUCTIONS-OPTIONAL PARAMETE 2BN= ... SEGENTRY K6EDITORA,N6EDITORA [I INSTRUCTION 2C7W ... SEGENTRY K8EDITORA,N8EDITORA [DEALS WITH BREAKIN 2CMG ... SEGENTRY K9EDITORA,N9EDITORA [CLOSES FILES AND ENDS EDIT 2D76 ... SEGENTRY K14EDITORA,N14EDITORA [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 ...N8EDITORA [ENTRY POINT FOR BREAK-IN DURING 2QC= # [AN EDITING INSTRUCTION 2QWW CALL 6 XBKOF [CLEAR BREAKIN 2RBG EDCOM ITER ['IMSTRUCTION TERMINATED' 2RW6 CALL 6 UMOP [PUSH DOWN STACK 2S*Q STOZ IEIP(2) [FORCE RE READ 2STB STOZ IESY(2) 2T*2 ... ACROSS EDITOR,1 [CARRY ON 2TSL # 2W#= # XCLSE CLOSES THE FILE ON THE TOP OF THIS ACTIVITIES FILE STACK. 2WRW # 2X?G XCLSE SBX 6 1 2XR6 CLOSE 2Y=Q ADS 1 6 2YQB EXIT 6 0 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 ...N2EDITORA 3=GW CLOSEABANDON [AS YOU WERE FOR N/F 3?2G LDX 7 IEON(2) [NO. OF OLD FILES 3?G6 BRN SHTD0 [CLOSE THEM 3?^Q # 3#FB # SHUTDOWN CLOSES ALL FILES AND RETURNS TO THE COMMAND PROCESSOR. 3#^2 # 3*DL ...N9EDITORA 3*Y= SHUTDOWN 3BCW LDX 7 IEON(2) [NUMBER OF OLD FILES 3BXG ADN 7 1 [ADD 1 FOR N/F 3CC6 SHTD0 CALL 6 XCLSE 3CWQ BCT 7 SHTD0 3DBB LDX 5 IEFT(2) [PICK UP FILE TYPES 3DW2 LDX 7 IEFS(2) [NUMBER OF EDITING FILES 3F*L SHTD1 BNG 5 SHTD2 [J IF MOP OR J/S ELSE 3FT= CALL 6 XCLSE [CLOSE THE FILE 3G#W SHTD2 SBN 7 1 [COUNT DOWN ON FILES 3GSG SLL 5 1 [SHIFT FOR NEXT FILE 3H#6 BNZ 7 SHTD1 [LOOP UNTIL END 3H*3 ... FIXTRA ESP10 [****EDITOR SPECIAL FOR PLESSEY**** 3H*Y ... BRN SP10 3HBB ... LOSEPARS 3HBT ... OUTPAR TIMENOW 3HGF ... CALL 4 XJOBTIME 3HL5 ... OUTPACK 6,2,JOBMILL 3HM2 ... LDX 7 IEOS(2) 3HMX ... ADX 7 IENS(2) 3HNS ... OUTPACK 7,1,NUMA 3HPP ... MONOUT EDEND 3HQL ...SP10 3HQS ... LDCT 0 1 3HR2 ... ANDX 0 IESW(2) 3HR8 ... BZE 0 SHTD2A 3HRB ... APCHANGE UP 3HRJ ...SHTD2A 3HRQ ALTLEND 2,CPATLEN [SHRINK ACTIVITY BLOCK BACK 3J?B LDCT 0 #2 [WAS THIS BREAK-IN 3JR2 ANDX 0 IESW(2) [DURING READ FROM EDIT? 3K=L BNZ 0 SHTD3 [J IF SO. 3KQ= ENDCOM [GOODBYE 3L9W SHTD3 COMBRKIN ['BREAK-IN BEFORE ED' 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 4QB6 #PAG 4QTQ # 4R*B # THIS CODE EXECUTES THE I INSTRUCTION. THE 'DONT-OUTPUT-<POINTER>- 4RT2 # SWITCH' IS SET THEN CHARACTERS ARE READ FROM THE EDITING FILE, AND 4S#L # VISIBLE SPACE SUBSTITUTION IS DONE. <NEWLINE>S IN THE EDITING FILE 4SS= # CAUSE THE BLOCK TO BE WRITTEN AWAY. ROUTINE ENDS WHEN IT FINDS THE 4T?W # CHARACTER WHICH WAS IN X7 ON ENTRY. READ ON. 4TRG # 4W3# ...N6EDITORA 4W97 ...XI CALL 6 RLIF [FIND INSTRUCTION BLOCK 4WC2 ... CALL 0 OH [ERROR IF LOST 4WJT ... LDCT 5 #100 4WQQ ORS 5 IESW(2) [SET NO POINTER SWITCH 4X=B STO 7 IEL3(2) [STORE DELIMITER 4XQ2 CALL 6 RLNF [FIND THE OUTPUT BLOCK 4Y9L #SKI JDIAG1 4YP= ( 4^8W LDX 4 IENC(2) 4^NG STO 4 AWORK4(2) 5286 ) 52MQ XI1 CALL 6 NCH [READ A CHAR 537B BRN XI6 [J IF END TO WRITE BLOCK AWAY 53M2 XI2 BXE 7 IEL3(2),XI7 [J IF FINISH OF INSTRUCTION 546L LDX 5 IENC(2) 54L= BXL 5 IENH(2),XI3 [J IF LENGTH OK 555W EDCOM YRTL [CHOPPTY CHOPPTY CHOP 55KG LDCT 5 #100 5656 ORS 5 IESW(2) [CLEAR I MODE SWITCH 56JQ ERS 5 IESW(2) 574B ... ACROSS EDITOR,12 57J2 XI3 ADN 5 20 [GET NO OF WORDS REQUIRED 583L SRL 5 2 [IN FAPB 58H= LDX 3 IENA(2) 592W LDX 0 ALOGLEN(3) [GET LENGTH OF FAPB 59GG BXGE 0 5,XI4 [J IF LENGTH OK 5=26 ADN 5 9 5=FQ ALTLEN 3,5 [ELSE ADJUST LENGTH 5=^B MHUNTW 3,FILE,FAPB 5?F2 STO 3 IENA(2) 5?YL PHOTO 5 5#D= STO 5 IENM(2) 5#XW CALL 6 RLIF 5*CG CALL 0 OH 5*X6 XI4 BXU 7 IEVS(2),XI5 [J IF NOT VISIBLE SPACE 5BBQ LDN 7 #20 [ELSE LOAD A SPACE 5BWB XI5 LDX 3 IENC(2) 5CB2 SRC 3 2 5CTL #SKI JDIAG1 5D*= ADX 3 IENG(2) 5DSW SMO IENA(2) 5F#G #SKI JDIAG1 5FS6 DCH 7 0(3) [UNSERT CHAR 5G?Q #SKI JDIAG1<1$1 5GRB DCH 7 A1+2(3) [INSERT CHAR 5H?2 LDN 0 1 5HQL ADS 0 IENC(2) [UPDATE IENC 5J== BRN XI1 5JPW XI6 5K9G #SKI JDIAG1 5KP6 ( 5L8Q LDX 5 AWORK4(2) 5LNB BNZ 5 XI8 [J IF NOT WHOLE RECORD 5M82 LDN 5 #4 5MML ANDX 5 IESW(2) 5N7= BZE 5 XI8 [J IF NOT GEDIT 5NLW LDX 5 ACES 5P6G LDN 4 #20 5PL6 ANDX 4 IESW(2) 5Q5Q BZE 4 XI9 [J IF NOT 'D' 5QKB LDCT 6 #400 5R52 ADX 5 6 5RJL XI9 SMO IENA(2) 5S4= STO 5 A1+3 [STORE SECOND KEY WORD 5SHW XI8 5T3G ) 5TH6 DOWN EDWRITE,1 [WRITE BLOCK AWAY 5W2Q BRN SHUTDOWN [J IF FILE FULL 5WGB ... BRN N8EDITORA [J IF BREAK-IN 5X22 #SKI JDIAG1 5XFL ( 5X^= LDX 4 IENC(2) 5YDW STO 4 AWORK4(2) 5YYG ) 5^5N ... CALL 6 RLIF [IN CASE NEWLINE CAUSED BY VNS 5^=W ... CALL 0 OH 5^D6 CALL 6 NCH [GET NEXT CHAR 5^XQ BRN XI6 [WRITE AWAY IF NULL RECORD 62CB CALL 6 RLNF [ELSE FIND N/F BLOCK 62H? ...#UNS JPVNS 62M8 ...#SKI 62R5 ...( 62X2 STOZ IESP(2) [JUST IN CASE 63BL STOZ IESTACK(2) [USER DIDNT FOLLOW 63W= STOZ IESTACK+1(2) [THE RULES 6464 ...) 64*W BRN XI2 64C7 ...#UNS JPVNS 64DD ...( 64FP ...XI7 CALL 6 NCH [LOOK AT NEXT 64H2 ... BRN NVNS [CHARACTER 64J? ... TXU 7 IEL3(2) [IN CASE IT IS 64KJ ... BCC XI6 [VISIBLE NEWLINE SYMBOL 64LT ...NVNS STO 0 IEIP(2) [STEP BACK IF IT ISN'T 64N6 ... LDCT 5 #100 [CLEAR NO-POINTER 64PC ...) 64QN ...#UNS JPVNS 64R^ ...#SKI 64TG XI7 LDCT 5 #100 [CLEAR NO-POINTER 65*6 ORS 5 IESW(2) [SWITCH 65SQ ERS 5 IESW(2) 65W# ... 65XW ... LDX 5 IENC(2) 65^D ... BZE 5 XI10 [J IF NOTHING INSERTED ON THIS LINE 6632 ... LDX 5 AWORK4(2) 664J ... BNZ 5 XI10 [J IF I NOT STARTED AT BEGIN OF LINE 664Y ... LDCT 6 #4 665# ... ANDX 6 IESW(2) 665N ... BNZ 6 XI10 [J IF END OF OLD FILE 6666 ... CALL 6 RLOF 667N ... LDX 7 A1+1(3) [OLD FILE PFCC 669= ... CALL 6 RLNF 66=S ... STO 7 A1+1(3) [TO NEW FILE 66DH ...XI10 66L= ... ACROSS EDITOR,3 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 [ <POINTER> OR <DELIMITOR> 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 <POINTER> OR <DELIMITER> 6YN6 BRN NCH8 6^7Q NCH7 LDX 1 IEL3(2) [GET I<DELIMITER> 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 8PS= # 8Q?W # RLNF RELOCATES THE NEW FILE BLOCK 8QRG # 8R?6 RLNF LDX 5 IENM(2) [GET BLOCK PHOTO 8RGY LDX 3 IENA(2) 8RQQ TESTMOVE 5,RN1 [J IF STILL THERE 8S=B MHUNTW 3,FILE,FAPB [ELSE FIND IT 8SQ2 STO 3 IENA(2) [STORE ADDRESS 8T9L PHOTO 5 [GET NEW PHOTO 8TP= STO 5 IENM(2) [AND STORE 8W8W RN1 EXIT 6 0 8W9X ... 8W=Y ...# 8W?^ ...# RLOF RELOCATES OLD FILE BLOCK 8W*2 ...# 8WB3 ...RLOF 8WC4 ... LDX 5 IEOM(2) [BLOCK PHOTO 8WD5 ... LDX 3 IEOA(2) 8WF6 ... TESTMOVE 5,RO1 [J IF STILL THERE 8WG7 ... MHUNTW 3,EDIT,FRB [ELSE FIND IT 8WH8 ... PHOTO 5 [GET NEW PHOTO 8WJ9 ... STO 5 IEOM(2) [AND STORE 8WK= ... STO 3 IEOA(2) [STORE BLOCK ADDRESS 8WL? ...RO1 8WM# ... EXIT 6 0 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 ...N14EDITORA 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 ... ACROSS EDITOR,1 9F== XERR DOWN EDITER,4 ['EXECUTION ERROR: OH' 9FPW ... BRN XEND 9G9G ...N3EDITORA 9GP6 ...OOOO CALL 6 RLIF [FIND INSTRUCTION BLOCK 9H8Q ... CALL 0 OH [ERROR IF LOST 9HNB ... CALL 6 NCH [GET NEXT CHAR ?J6W BRN O1 [J IF OFF END ?JLG BXE 7 O20(1),OOOO [IHNORE SPACE ?K66 BXE 7 O34(1),O1 [END IF COMMA ?KKQ BXE 7 O31(1),O1 [OR IF RP ?L5B BXE 7 O23(1),O2 [J IF # ?LK2 STO 0 IEIP(2) [BACKSPACE ?M4L DOWN EDITET,3 [WORK OUT DECIMAL NO ?MJ= BRN NER [J IF SYNTAX ERROR ?N3W CALL 4 NEXT [CHECK FOLLOWING STRING ?NHG LDX 7 ACOM1(2) [OK SO SET ?P36 STO 7 IENO(2) [NEW ORIGIN ?PGQ ... ACROSS EDITOR,3 ?Q2B O1 LDX 7 IEOR(2) ?QG2 STO 7 IENO(2) [SET IENO ?Q^L STO 0 IEIP(2) [BACKSPACE ?RF= ... ACROSS EDITOR,3 ?RYW O2 STOZ IENO(2) [CLEAR IENO ?SDG ... ACROSS EDITOR,3 ?SY6 # ?T7Y ...N4EDITORA ?T*R ...XHHH CALL 6 RLIF [FIND INSTRUCTION BLOCK ?THL ... CALL 0 OH [ERROR IF LOST ?TPF ... LDCT 7 #400 ?TXB STO 7 IEL3(2) [INITIALISE STORAGE WORD ?WC2 XH1 CALL 6 NCH [GET NEXT CHAR ?WWL BRN XH3 [J IF OFF END ?XB= BXE 7 O20(1),XH1 [IGNORE SPACE ?XTW BXE 7 O23(1),XH4 [J IF OCTAL ?Y*G XH2 BXE 7 O34(1),XH3 [FINISH IF COMMA ?YT6 BXU 7 O31(1),SE1 [ERROR IF NOT RP ?^#Q XH3 STO 0 IEIP(2) [BACKSPACE ?^SB XH3A CALL 4 NEXT [CHECK FOLLOWING STRING #2#2 LDX 6 IEL3(2) [OK SO SET #2RL STO 6 IEPF(2) [NEW PFCC #3?= BVCR £ [CLEAR V #3QW ... ACROSS EDITOR,3 #4=G ...XH4 #4Q6 XH5 CALL 6 NCH [GET NEXT CHAR #54H ... BRN XH6 [J IF OFF END #5BY ... BXGE 7 O8(1),XH6 [J IF NOT OCTAL DIGIT #5PB LDX 6 IEL3(2) #692 SLL 6 3 [UPDATE STORAGE WORD #6NL ORX 6 7 #78= STO 6 IEL3(2) #7MW BVCI XH5 [AND AGAIN #87G BRN XH3A #8M6 OH GEOERR 1,EDIT #8PP ...XH6 #8S# ... LDX 6 IEL3(2) #8WX ... BPZ 6 XH3 [J IF VALUE AFTER H# #8^G ... STO 0 IEIP(2) [OTHERWISE SYNTAX ERROR #945 ... BRN SE2 #96Q # C5XG # C6C6 # AT HENRY'S INSISTENCE THIS CODE EVELUATES THE OPTIONAL C6WQ # PARAMETER FOR THE L AND N INSTRUCTIONS. C7BB # C7L8 ...N5EDITORA C7S3 ...NLSW CALL 6 RLIF [FIND INSTRUCTION BLOCK C7^W ... CALL 0 OH [ERROR IF LOST C87P ... CALL 6 NCH [GET ANOTHER CHAR C8*L BRN NLS2 [J IF NO MORE C8T= BXE 7 O20(1),NLSW [IGNORE SPACE C9#W BXE 7 O31(1),NLS2 [) IS END C9SG BXE 7 O34(1),NLS2 [, FINISHES C=#6 BXE 7 O32(1),NLS2 [* FINISHES C=RQ SBN 7 #57 [ELSE THE FIRST CHARACTER MUST BE O C??B BNZ 7 SE2 [ERROR IF NOT O C?R2 CALL 6 NCH [GET ANOTHER CHARACTER C#=L BRN SE3 [ERROR IF NO MORE LEFT C#Q= SBN 7 #46 C*9W ... LDN 5 0 C*PG BZE 7 NLS1 [J IF SECOND CHARACTER F CB96 SBN 7 #10 CBNQ BNZ 7 SE2 [J IF SECOND CHARACTER NOT N CC8B ... ORS 4 IESW(2) [SET SWITCH CCN2 LDCT 7 #440 [TEST IF WE HAVE JUST SET CD7L ... ANDX 4 7 [L OR W ON CDM= ... BZE 4 NLS3 [J IF NOT CF6W ...NLS4 LDN 4 #4 [TEST IF TRACING WILL CFLG ... TESTRACE 4,NLS5 [INHIBIT OUTPUT CG66 BRN NLS3 [OK SO CARRY ON CGKQ ...NLS1 ORS 4 IESW(2) [UNSET SWITCH CH5B ... ERS 4 IESW(2) CHK2 CALL 6 NCH [GET ANOTHER CHARACTER CJ4L BRN SE3 [ERROR IF END CJJ= SBN 7 #46 [CHECK FOR ANOTHER F CK3W BZE 7 NLS3 [YES CKHG STO 0 IEIP(2) [ELSE BACKSPACE CL36 BRN NLS3 CLGQ ...NLS2 ERS 4 IESW(2) [NO PARAMETE SO INVERT SWITCH, CM2B STO 0 IEIP(2) [BACKSPACE AND CMG2 ... LDX 6 4 [TEST IF WE HAVE JUST CM^L ... ERX 4 IESW(2) [SET L OR W ON CNF= ... ANDX 4 6 CNYW ... BZE 4 NLS4 [J IF SO CPDG NLS3 LDCT 5 #40 CPY6 ANDX 5 IESW(2) [CHECK IF WINDOW CQCQ ... BZE 5 NLS6 [NO SO FINISH CQXB LDCT 5 #20 [CHECK IF ALREADY LISTED CRC2 ANDX 5 IESW(2) CRWL ... BNZ 5 NLS6 [YES CSB= DOWN EDWRITE,10 [ELSE LIST CSTW ... ACROSS EDITOR,3 [AND FINISH CT*G NLS5 EDCOM LWIN [SORRY CANT LIST CTT6 ...NLS6 CW#Q ... ACROSS EDITOR,3 CWJJ ...XEND ACROSS EDITOR,11 [FINISH CWSB ... MENDAREA 1023-0?<100,K100EDITORA F3XW #END ^^^^ ...640601330007