{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: EDITPT867)}} ====== EDITPT867 ====== (George Source) **Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:ACROSSVAR|ACROSSVAR]], [[george:macro:ALTLEN|ALTLEN]], [[george:macro:BACKSPACE|BACKSPACE]], [[george:macro:BXE|BXE]], [[george:macro:BXGE|BXGE]], [[george:macro:BXL|BXL]], [[george:macro:BXU|BXU]], [[george:macro:DOWN|DOWN]], [[george:macro:EDCOM|EDCOM]], [[george:macro:EDERR|EDERR]], [[george:macro:FI|FI]], [[george:macro:FIXTRA|FIXTRA]], [[george:macro:FREECORE|FREECORE]], [[george:macro:FREELINK|FREELINK]], [[george:macro:GEOERR|GEOERR]], [[george:macro:HUNTW|HUNTW]], [[george:macro:IF|IF]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:NAME|NAME]], [[george:macro:PAIR|PAIR]], [[george:macro:PHOTO|PHOTO]], [[george:macro:READ|READ]], [[george:macro:READAGAIN|READAGAIN]], [[george:macro:READBACK|READBACK]], [[george:macro:REWIND|REWIND]], [[george:macro:SEG|SEG]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:SKIP|SKIP]], [[george:macro:STEP|STEP]], [[george:macro:STEPAGAIN|STEPAGAIN]], [[george:macro:TESTBRKIN|TESTBRKIN]], [[george:macro:TESTMOVE|TESTMOVE]], [[george:macro:TESTREP2|TESTREP2]], [[george:macro:TESTRPN2|TESTRPN2]], [[george:macro:THEN|THEN]], [[george:macro:TRACE|TRACE]], [[george:macro:UP|UP]], [[george:macro:UPPLUS|UPPLUS]], [[george:macro:VSKIP|VSKIP]] 22FL #LIS K0EDITPT>K0ALLGEO>0 22LS ... SEG EDITPT,867,COMM,,G571 22S2 ...[ 22^8 ...[ (C) COPYRIGHT INTERNATIONAL COMPUTERS LTD 1982 236B ...[ THIS EXCLUDES CODE UNDER #SKI G571 23?J ...[ 23DQ ...#OPT G571 = 0 23KY ...#SKI G571&1 23R6 ...# WITH UGUG EDIT M571 (IMPROVED EDIT AMORPHOUS FILE) 23YG # 24D6 # THIS SEGMENT EXECUTES THE P AND T INSTRUCTIONS 24XQ # 25CB # ENTRY POINTS - FOR GEORGE MODULARITY 25X2 # 26BL SEGENTRY K1EDITPT,OH 26W= SEGENTRY K2EDITPT,N2EDITPT [E INSTRUCTION 27*W SEGENTRY K3EDITPT,N3EDITPT [A INSTRUCTION 27TG SEGENTRY K4EDITPT,N4EDITPT [B INSTRUCTION 28*6 SEGENTRY K5EDITPT,N5EDITPT [R INSTRUCTION 28SQ SEGENTRY K7EDITPT,N7EDITPT [T INSTRUCTION 29#B SEGENTRY K8EDITPT,N8EDITPT [P INSTRUCTION 29S2 SEGENTRY K9EDITPT,OH 2=?L SEGENTRY K10EDITPT,N10EDITPT [READ 1ST RECORD OF OLDFILE 2=R= SEGENTRY K11EDITPT,N11EDITPT [PART OF X INSTRUCTION 2?34 SEGENTRY K12EDITPT,N12EDITPT [ARE WE ON A TERMINATOR? 2?=W # 2?QG # THIS SEGMENT READS THE OLDFILE 2#=6 # 2#PQ # 2*9B # RLOF RELOCATES THE OLD FILE BLOCK 2*P2 # 2B8L RLOF LDX 5 IEOM(2) [GET BLOCK PHOTO 2BN= LDX 3 IEOA(2) 2C7W TESTMOVE 5,RO1 [J IF STILL THERE 2CMG MHUNTW 3,EDIT,FRB [ELSE FIND IT 2D76 PHOTO 5 [GET NEW PHOTO 2DLQ STO 5 IEOM(2) [AND STORE 2F6B STO 3 IEOA(2) [STORE ADDRESS 2FL2 RO1 EXIT 6 0 [AND EXIT 2G5L # 2GK= # RLNF RELOCATES THE NEW FILE BLOCK 2H4W # 2HJG RLNF LDX 5 IENM(2) [GET BLOCK PHOTO 2J46 LDX 3 IENA(2) 2JHQ TESTMOVE 5,RN1 [J IF STILL THERE 2K3B MHUNTW 3,FILE,FAPB [ELSE FIND IT 2KH2 PHOTO 5 [GET NEW PHOTO 2L2L STO 5 IENM(2) [AND STORE 2LG= STO 3 IENA(2) [STORE ADDRESS 2L^W RN1 EXIT 6 0 [AND EXIT 2MFG # 2M^6 # NER IS ENTERED FOLLOWING A CATASTROPHE 2NDQ # 2NYB NER ACROSS EDITOR,12 2PD2 # 2PXL # RDBI IS IF BREAK-IN DURING READ 2QC= # 2QWW RDBI LDCT 7 #2 [TEST IF BREAK-IN OCCURRED 2RBG ANDX 7 IESW(2) [WHILST READING RECORD FOR 2RW6 BZE 7 RDB0 [SEGMENT EDIT,J IF NOT 2S3# LDCT 7 #002 2S8G ERS 7 IESW(2) 2S*Q UP [ELSE ABANDON EDIT 2STB RDB0 ACROSS EDITOR,8 2T*2 # 2TSL # WRITE IS THE ROUTINE WHICH WRITES TO THE NEW FILE 2W#= # 2WRW WRITE SBX 6 1 2X?G STO 6 AWORK2(2) 2XR6 #SKI JDIAG1 2Y=Q ( 2YQB LDN 6 #4 2^=2 ANDX 6 IESW(2) 2^PL BZE 6 NEGG [J IF NOT GEDIT 329= CALL 6 RLOF 32NW CALL 6 RLNF 338G SMO IEOA(2) 33N6 LDX 6 A1+3 347Q STO 6 A1+3(3) [PASS ACROSS SECOND KEY WORD 34MB NEGG 3572 ) 35LL DOWN EDWRITE,1 [WRITE RECORD TO NEW FILE 366= BRN WRQ [J IF FILE FULL 36KW BRN RDB0 [J IF BREAK-IN 375G LDX 6 AWORK2(2) 37K6 ADS 1 6 384Q EXIT 6 0 38JB WRQ ACROSS EDITOR,9 [ABANDON EDIT 3942 # 39HL # READ IS THE ROUTINE WHICH GETS THE NEXT RECORD FROM 3=3= # THE OLD FILE. WRITTEN SO THAT IF V IS SET ON ENTRY 3=GW # THEN READING WILL BE DONE BACKWARDS. THE ROUTINE ALSO 3?2G # UPDATES THE RECORD COUNTER(IEOR). AWORK4 AND X3 WILL 3?G6 # BE SET AS FOLLOWS: 3?^Q # 3#FB # 0 READ WAS OK 3#^2 # 1 READING OFF END OF FILE 3*DL # 2 READING OFF BEGINNING OF FILE 3*Y= # 3BCW READ SBS 1 6 [RELATIVISE LINK 3BXG STO 6 AWORK1(2) [AND STORE 3CC6 STOZ IEOC(2) 3CWQ LDCT 3 #20 [CLEAR THE 'W LISTED' 3DBB ORS 3 IESW(2) [SWITCH 3DW2 ERS 3 IESW(2) 3F*L STOZ AWORK4(2) [TENTATIVELY MARK AS OK 3FT= LDX 3 IEOA(2) 3G#W BZE 3 RD41 [J FOR VIRGIN READ 3GSG LDCT 7 #4 3H#6 ANDX 7 IESW(2) 3HRQ LDX 6 IEWT(2) 3J?B BZE 7 RD10 [J IF NOT END OF FILE 3JR2 BPZ 6 RD70 [J IF EOF AND FORWARDS 3K=L RD10 BNG 6 RD80 [J IF BACKWARDS 3KQ= LDN 7 1 3L9W ADS 7 IEOR(2) [UPDATE RECORD COUNT 3LC4 FIXTRA ESP2 [****EDITOR SPECIAL FOR PLESSEY**** 3LJ= NULL 3LPG HUNTW 3,EDIT,FRB [SEE IF THERE IS AN FRB 3M96 BNG 3 RD40 [J TO READ IF NOT 3MNQ PHOTO 4 [SNAP 3N8B STO 4 IEOM(2) [STORE WHEN AND WHERE 3NN2 STO 3 IEOA(2) 3P7L LDX 7 ALOGLEN(3) [GET LENGTH OF FRB 3PM= STEP 1 3Q6W STO 3 AWORK3(2) [SAVE PTR TO RECORD 3QLG BZE 3 RD60 [J IF END OF FILE 3R66 LDEX 4 0(3) [GET LENGTH OF RECORD 3R?# ...#SKI G571&1 3RDG ... ADN 4 1 [ + 1 IN CASE AMORPHOUS 3RKQ BXGE 7 4,RD20 [J IF FRB BIG ENOUGH 3S5B RD15 CALL 6 RLOF [GET FRB POINTER 3SK2 LDX 3 IEOA(2) 3SQ8 ...#SKI G571&1 3SXB ...RD16 3T4L ALTLEN 3,4 [ALTER SIZE OF FRB 3TJ= MHUNTW 3,EDIT,FRB 3W3W STO 3 IEOA(2) [SET NEW ADDRESS 3WHG PHOTO 0 3X36 STO 0 IEOM(2) [SET NEW PHOTO 3XGQ STEPAGAIN 1 [GET FURB POINTER BACK 3Y2B STO 3 AWORK3(2) [AND SAVE 3YG2 BRN RD30 3Y^L RD20 LDX 0 4 3^F= SLL 0 1 [2XREQUIRED LENGTH 3^YW BXGE 0 7,RD30 [J IF FRB NOT MASSIVE 42DG SBN 7 33 42Y6 BNG 7 RD30 [NOT WORTH ALTERING 43CQ LDX 0 4 43XB SBN 0 32 [ELSE ADJUST LENGTH 44C2 BPZ 0 RD15 [TO THE GREATER OF 32 44WL LDN 4 32 [AND THE REQUIRED LENGTH 45B= BRN RD15 45TW RD30 CALL 6 RLOF [GET FRB POINTER BACK 46*G RD31 LDX 6 IEOA(2) 46T6 ADN 6 A1 47#Q LDX 5 AWORK3(2) 47*J ...#SKI G571&1 47BB ...( 47C8 ... SBN 4 1 [ RESET LENGTH - NON-AMORPHOUS 47D2 ... LDXC 0 IEOT(2) 47DS ... IF CC 47FL ... THEN [ AMORPHOUS 47GD ... SMO 5 47H= ... LDX 4 0 [ OLD X4 SOMETIMES TOO BIG 47J4 ... LDN 0 #41 47JW ... ADN 4 1 47KN ... STO 4 A1(3) [ 1 WORD LONGER 47LG ... STO 0 A1+1(3) [ SUPPLY A '2ND RED TAPE WORD' 47M# ... ADN 6 2 47N6 ... SBN 4 2 [ SIZE OF RECORD BODY 47NY ... ADN 5 1 47PQ ... BZE 4 RD32 47QJ ... FI 47RB ...) 47SB SMO 4 48#2 MOVE 5 0 [MOVE DATA INTO FRB 48RL LDX 3 IEOA(2) 48YS ...#SKI G571&1 4962 ...RD32 49?= LDEX 6 A1(3) 49QW BRN RD50 4==G RD40 LDN 7 1 4=Q6 ADS 7 IEOR(2) [UPDATE RECORD COUNT 4?9Q RD41 READ 1 [READ A RECORD 4?PB RD42 MHUNTW 3,FILE,FRB [FIND FILE/FRB 4#92 NAME 3,EDIT,FRB [AND RENAME EDIT/FRB 4#NL PHOTO 5 [SNAP 4*8= STO 5 IEOM(2) [STORE WHEN AND WHERE 4*MW STO 3 IEOA(2) 4B7G LDEX 6 A1(3) 4BM6 BZE 6 RD60 [J IF END OF FILE 4BNT ...#SKI G571&1 4BQJ ...( 4BS? ... LDXC 0 IEOT(2) 4BW2 ... BCS RD50 [ EDIT/FRB IS O.K. UNLESS AMORPHOUS 4BXP ... LDN 4 1 [ IN WHICH CASE IT NEEDS TO BE 4B^D ... ADX 4 6 [ LENGTHENED AND REFORMATTED 4C37 ... BRN RD16 4C4W ...) 4C6Q RD50 LDX 7 A1+1(3) [GET SECOND WORD OF HEADER 4CLB ANDX 7 CACT [CLEAR BITS 2-23 4D62 SBN 6 3 [ADJUST FOR RECORD HEADER 4DKL BNZ 7 RD51 [J IF NOT WORD BOUNDARY 4F5= ADN 6 1 [ADJUST FOR WORD BOUNDARY 4FJW RD51 SLL 67 2 [CONVERT TO CHARS 4G4G #SKI JDIAG1 4GJ6 ( 4H3Q LDN 4 #4 4HHB ANDX 4 IESW(2) 4J32 BZE 4 NOTG [J IF NOT GEDIT 4JGL SBN 6 8 [DON'T COUNT SPECIAL WORDS 4K2= BPZ 6 NOTG 4KFW ADN 6 4 [MAYBE A BLANK RECORD 4K^G LDX 5 ACES 4LF6 STO 5 A1+3(3) [REINSTATE SECOND KEY WORD 4LYQ LDN 5 1 4MDB ADS 5 A1(3) [INCREMENT RECORD HEADER COUNT 4MY2 NOTG 4NCL ) 4NX= STO 6 IEOH(2) 4PBW BNG 6 RD83 [J IF RUBBISH 4PWG RD52 LDCT 0 #4 4QB6 ORS 0 IESW(2) [CLEAR END OF FILE BIT 4QTQ ERS 0 IESW(2) 4R*B TESTBRKIN RDBI [TEST B-I FOR OK READ ONLY 4RT2 #SKI JDIAG1 4S#L ( 4SS= BZE 4 NAYG [J IF NOT GEDIT 4T?W LDX 4 A1+2(3) 4TRG STOZ A1+2(3) [NULL SEQUENCE WORD AS DEFAULT 4W?6 STO 4 IESD(2) [SAVE SEQUENCE WORD 4WQQ NAYG 4X=B ) 4XQ2 LDX 3 AWORK4(2) [LOAD OUTPUT INDICATOR 4Y9L RDX 4YP= LDX 6 AWORK1(2) [GET LINK 4^8W ADX 6 1 4^NG EXIT 6 0 [EXIT 5286 RD60 LDCT 4 #4 52MQ ORS 4 IESW(2) [SET EOF BIT 537B STOZ IEOH(2) 53M2 BRN RDX 546L RD70 LDN 3 1 54L= STO 3 AWORK4(2) [SET EOF ANSWER 555W BRN RDX 55KG RD80 LDX 7 IEOR(2) 5656 BNZ 7 RD81 [J IF NOT ON RECORD 0 56JQ LDN 3 2 574B STO 3 AWORK4(2) [SET BOF ANSWER 57J2 BRN RDX 583L RD81 HUNTW 3,EDIT,FRB 58H= BNG 3 RD82 592W FREECORE 3 [FREE ANY FRB 59GG RD82 READBACK 1 [BSP+BSP+READ 5=26 LDN 7 1 5=FQ SBS 7 IEOR(2) [UPDATE RECORD COUNT 5=LY FIXTRA ESP3 [****EDITOR SPECIAL FOR PLESSEY**** 5=S6 NULL 5=^B BRN RD42 5?F2 RD83 STOZ IEOH(2) 5?YL BRN RD52 5#D= # 5#XW # SIZE IS THE ROUTINE WHICH CHECKS IF THE FILE/FAPB 5*CG # IS BIG ENOUGH. IT SHOULD BE CALLED WITH X4 = REQUIRED 5*X6 # VALUE OF IENC. THE ROUTINE WILL ADJUST THE FAPB 5BBQ # SIZE IF REQUIRED 5BWB # 5CB2 SIZE SBS 1 0 5CTL STO 0 AWORK1(2) [STORE RELATIVISED LINK 5D*= CALL 6 RLNF [RELOCATE BLOCK 5DSW LDX 3 IENA(2) [GET ADDRESS 5F#G LDX 5 ALOGLEN(3) [LENGTH OF BLOCK 5FS6 LDX 6 4 5G?Q ADN 6 20 5GRB SRL 6 2 [LENGTH REQUIRED 5H?2 BXGE 5 6,SIZE1 [J IF BLOCK BIG ENOUGH 5HQL SIZE0 ALTLEN 3,6 [STRETCH BLOCK 5J== MHUNTW 3,FILE,FAPB [FIND BLOCK 5JPW STO 3 IENA(2) [STORE ADDRESS 5K9G PHOTO 5 [GET NEW PHOTO 5KP6 STO 5 IENM(2) [AND STORE 5L8Q SIZEX LDX 0 AWORK1(2) [GET LINK 5LNB ADX 0 1 5M82 EXIT 0 0 [AND EXIT 5MML SIZE1 SLL 6 1 5N7= BXGE 6 5,SIZEX [J IF FAPB NOT MASSIVE 5NLW SRL 6 1 5P6G SBN 5 33 5PL6 BNG 5 SIZEX [NOT WORTH ALTERING 5Q5Q LDX 0 6 5QKB SBN 0 32 [ELSE ADJUST LENGTH TO 5R52 BPZ 0 SIZE0 [THE GREATER OF 32 AND 5RJL LDN 6 32 [THE REQUIRED LENGTH 5S4= BRN SIZE0 5SHW # 5T3G # CHARACTER MOVE ROUTINE 5TH6 # 5W2Q MVCH BZE 3 MVC1 5WGB MVCH 6 0(3) 5X22 SBN 3 1 5XFL SRL 3 9 5X^= SLL 3 9 5YDW BRN MVCH 5YYG MVC1 EXIT 0 0 5^D6 # 5^XQ # MOVE COPIES THE FRB TO THE FAPB 62CB # 62X2 MOVE SBS 1 0 63BL STO 0 AWORK4(2) [SAVE LINK 63W= LDX 4 IEOH(2) 64*W STO 4 IENC(2) [SET N/F CHARACTER POINTER 64TG CALL 0 SIZE [CHECK SIZE OF FAPB 65*6 CALL 6 RLOF [RELOCATE BLOCKS 65SQ CALL 6 RLNF 66#B LDX 3 IEOA(2) 66S2 #SKI JDIAG1 67?L ( 67R= LDN 0 #4 68=W ANDX 0 IESW(2) 68QG BZE 0 NONG [J IF NOT GEDIT 69=6 LDX 0 IEON(2) 69PQ SBN 0 1 69WY BZE 0 NOM [J IF NOT MERGEFILE 6=46 LDN 0 #20 6=9# ANDX 0 IESW(2) 6=BG BZE 0 NONG [NOT 'D' MODE GEDIT 6=HN LDCT 0 #400 6=NW ORS 0 A1+3(3) [SET SECOND KEY WORD 6=W4 BRN NONG 6?3= NOM LDX 0 IESD(2) 6?8L STO 0 A1+2(3) [RESTORE SEQUENCE WORD 6?N= NONG 6#7W ) 6#MG LDX 7 IENA(2) [SET UP ROINTERS 6*76 LDN 6 A1(3) 6*LQ ADN 7 A1 6B6B LDEX 3 A1(3) [LENGTH OF BLOCK (WORKS) 6BL2 MOVE 6 0(3) [MOVE DATA 6C5L LDX 0 AWORK4(2) [GET LINK 6CK= ADS 1 0 6D4W EXIT 0 0 [EXIT 6DJG # 6F46 # RROR COPIES THE REMAINDER OF A RECORD TO THE FAPB 6FHQ # 6G3B RROR LDCT 7 #200 6GH2 ANDX 7 IEWT(2) 6H2L BZE 7 RREX [EXIT IF P INSTRUCTION 6HG= SBS 1 6 6H^W STO 6 AWORK4(2) 6JFG LDX 4 IEOH(2) 6J^6 SBX 4 IEOC(2) 6K6# BPZ 4 RR15 [J IF NOT OFF END OF LINE 6K?G LDX 4 IEOH(2) [RESET TO END OF LINE 6KDN STO 4 IEOC(2) 6KKW LDN 4 0 6KR4 RR15 6KYB ADX 4 IENC(2) 6LD2 STO 4 AWORK3(2) [SAVE DESTINATION POINT 6LXL BXL 4 IENH(2),RR10 [J IF LENGTH OK 6MC= LDX 4 IENH(2) [ELSE ADJUST 6MWW RR10 CALL 0 SIZE [CHECK SIZE OF FAPB 6NBG SBX 4 IENC(2) 6NW6 CALL 6 RLOF 6P*Q CALL 6 RLNF [RELOCATE BLOCKS 6PTB LDX 3 4 [NO OF CHARS TO TRANSCRIBE 6Q*2 LDX 6 IEOC(2) 6QSL LDX 7 IENC(2) 6R#= ADS 3 IEOC(2) [UPDATE CHARACTER POINTERS 6RRW ADS 3 IENC(2) 6S?G SRC 6 2 6SR6 SRC 7 2 6T=Q 6TQB BNZ 7 RR20 [J IF RED TAPE NOT REQUIRED 6W=2 #SKI JDIAG1<1$1 6WPL ( 6X9= ADN 3 8 6XNW NGN 6 2 6Y8G NGN 7 2 6YN6 RR20 ADN 6 A1+2 6^7Q ADN 7 A1+2 6^MB ) 7272 #SKI JDIAG1 72LL ( 736= LDX 0 IEOG(2) 73KW SBN 0 A1 745G SLL 0 2 754Q LDN 4 #4 75JB ANDX 4 IESW(2) 7642 BZE 4 NOG [J IF NOT GEDIT 76HL LDX 4 IEON(2) 773= SBN 4 1 777Y BZE 4 NAYM [J IF NOT MERGEFILE 77#L LDN 4 #20 77F# ANDX 4 IESW(2) 77L2 BZE 4 NOG [J IF NOT 'D' MODE GEDIT 77QN LDCT 4 #400 77XB SMO IEOA(2) 7844 ORS 4 A1+3 [SET SECOND KEY WORD 788Q BRN NOG 78*D NAYM LDX 4 IESD(2) 78G6 SMO IEOA(2) 78^Q STO 4 A1+2 [RESTORE SEQUENCE WORD 79?G NOG 79K= LDX 4 IEOA(2) [OLD FILE BLOCK ADDR 79X2 LDX 5 IENA(2) [NEW FILE BLOCK ADDR 7=8Q ADN 4 A1 [AND INCREMENT TO 7=GG ADN 5 A1 [RED TAPE 7=S= SMO 0 [LENGTH OF RED TAPE 7?62 MVCH 4 0 [COPY OVER FROM OLD TO NEW 7?CW RR20 ADX 6 IEOG(2) 7?XG ADX 7 IENG(2) 7#C6 ) 7#WQ ADX 6 IEOA(2) [GET ABSOLUTE ADDRESSES 7*BB ADX 7 IENA(2) 7*W2 CALL 0 MVCH 7B*L LDX 7 IENC(2) 7BT= BXE 7 AWORK3(2),RR30 [J IF RECORD NOT TRUNCATED 7C#W EDCOM YRTL 7CSG RR30 CALL 6 WRITE [WRITE BLOCK AWAY 7D#6 LDX 6 AWORK4(2) [GET LINK 7DRQ ADS 1 6 7F?B RREX EXIT 6 0 [EXIT 7FR2 # 7G=L # 7GQ= # TARGREC CHECKS IF WE ARE ON THE CORRECT 7H9W # EXIT CALL+1 = YES 7HPG # CALL+2 = NO 7J96 # 7JNQ TARGREC 7K8B SBS 1 6 7KN2 STO 6 AWORK1(2) [SAVE LINK 7L7L LDX 3 IEWT(2) 7LM= SLL 3 2 7M6W SRL 3 2 [CLEAR B0,B1 7MLG BZE 3 TREC3 [J IF END OF FILE 7N66 SBN 3 1 7NKQ BZE 3 TREC4 [J IF CONTEXT 7P5B LDX 7 IEOR(2) [ELSE RECORD NO 7PK2 SBX 7 IEWT+1(2) [CHECK IF THERE 7Q4L BNZ 7 TREC2 [J IF NOT 7QJ= TREC1 LDX 6 AWORK1(2) [FOUND EXIT 7R3W ADS 1 6 7RHG EXIT 6 0 7S36 TREC2 LDX 6 AWORK1(2) [NOT FOUND EXIT 7SGQ ADS 1 6 7T2B EXIT 6 1 7TG2 TREC3 LDX 7 AWORK4(2) [GET READ OUTPUT 7T^L SBN 7 1 [INDICATOR 7WF= BZE 7 TREC1 [J IF AT END OF FILE 7WYW BRN TREC2 [ELSE NOT FOUND 7XDG TREC4 LDN 6 IEWT [SET DATA POINTER 7XY6 DOWN EDITEX,1 [DO CONTEXT SEARCH 7YCQ BRN TREC2 [NOT FOUND 7YXB BRN TREC1 [FOUND 7^C2 # 7^WL # 82B= # TERMS CHECKS FOR TERMINATORS, SETTING IESY AND IECC IF 82TW # ONE IS FOUND 83*G # 83T6 TERMS STOZ IESY(2) [INITIALISE INDICATOR 84#Q LDXC 3 IESP(2) 84SB BCC TERMX [J IF NO TERMINATORS 85#2 SBS 1 6 85RL STO 6 AWORK1(2) [SAVE LINK 86?= STOZ ACOM1(2) [FUTURE VALUE OF IECC 86QW LDX 6 IEWT(2) 87=G BNG 6 TM1 [J IF BACKWARDS 87Q6 LDX 7 IEOH(2) 889Q STO 7 ACOM1(2) [ELSE RESET FOR FORWARDS 88PB TM1 STOZ ACOM2(2) [FUTURE VALUE OF IESY 8992 BRN TM3 89NL TM2 LDX 3 ACOM3(2) [GET STACK POINTER 89RQ #UNS EDLOOP 89WW TM3 SBN 3 9 [PTR TO NEXT ENTRY 8=22 #UNS EDLOOP 8=56 #SKI 8=8= TM3 SBN 3 7 [PTR TO NEXT ENTRY 8=MW BNG 3 TM20 [J IF END 8?7G STO 3 ACOM3(2) [ELSE SAVE 8?M6 ADX 3 2 8#6Q LDXC 7 IESTACK(3) [IS THIS A CONDITION 8#LB BCC TM2 [J IF NOT 8#N^ LDXC 7 IESTACK+2(3) [**TYPE FOR FAN OUT AT TM5 8#RJ BCS £ [**CLEAR C IF SET 8#W7 LDX 6 IEWT(2) [**AND NOW SEE 8#YQ SBN 6 #7777 [*****COMMENTS 8*3* BZE 6 TM5 [*************AT K12 8*62 LDX 6 IEWT(2) 8*KL BNG 6 TM4 [J IF BACKWARDS 8B5= LDXC 7 IESTACK+2(3) [SEE IF TERMINATOR IS FORWARDS 8BJW BCS TM2 [J IF NOT 8C4G BRN TM5 8CJ6 TM4 LDXC 7 IESTACK+2(3) [SEE IF TERMINATOR IS BACKWARDS 8D3Q BCC TM2 [J IF NOT 8DHB TM5 ADX 7 1 [FANOUT ON TYPE 8F32 EXIT 7 £ [OF TERMINATOR 8FGL BRN TMEND [J FOR END 8G2= BRN TMTXT [J FOR CONTEXT 8GFW LDX 7 IESTACK+3(3) [ELSE RECORD NO 8G^G SBX 7 IEOR(2) [CHECK IF REQUIRED RECORD 8HF6 BNZ 7 TM2 [J IF NOT 8HYQ BRN TM10 8JDB TMEND LDCT 7 #4 [END OF FILE 8JY2 ANDX 7 IESW(2) 8KCL BZE 7 TM2 [J IF NOT THERE 8KX= BRN TM10 8LBW TMTXT LDN 6 IESTACK+2(3) [SET DATA POINTER 8LWG SBX 6 2 8MB6 DOWN EDITEX,1 [CONTEXT - DO CHECK 8MTQ BRN TM2 8N*B TM10 LDX 3 ACOM3(2) 8NT2 ADX 3 2 8P#L LDX 0 IESTACK+6(3) 8PS= BZE 0 TM11 [J IF SEARCH BY NUMBER 8Q?W LDN 6 IESTACK+2(3) 8QRG SBX 6 2 8R?6 DOWN EDITEX,2 [DO CONTEXT SEARCH 8RQQ TM11 LDX 3 ACOM3(2) 8S=B ADX 3 2 8SQ2 LDX 0 IESTACK+5(3) [GET CHAR NO 8T9L BPZ 0 TM12 [J IF REASONABLE 8TP= LDN 0 0 [ELSE ADJUST 8W8W TM12 BXL 0 IEOH(2),TM13 8WNG LDX 0 IEOH(2) 8X86 TM13 LDX 6 IEWT(2) 8XMQ BNG 6 TM14 [J IF BACKWARDS 8Y7B BXL 0 ACOM1(2),TM15 [J IF THIS TERMINATOR 8YM2 BXE 0 ACOM1(2),TM15 [OVERRIDES PREVIOUS ONES 8^6L BRN TM2 8^L= TM14 BXL 0 ACOM1(2),TM2 [DISREGARD 925W TM15 STO 0 ACOM1(2) [THIS TERMINATOR OVERRIDES 92KG LDCT 7 #400 [ANY PREVIOUS ONES SO 9356 ORX 7 ACOM3(2) [ADJUST THE DETAILS 93JQ STO 7 ACOM2(2) 944B BRN TM2 94J2 TM20 LDX 7 ACOM2(2) [FINISHED SO SET 953L STO 7 IESY(2) [IESY,IECC 95H= LDX 7 ACOM1(2) 962W STO 7 IECC(2) 963G #UNS EDLOOP 9646 ( 964Q LDXC 3 IESY(2) [J IF TERMINATOR DOES NOT STOP 965B BCC TM22 [ON THIS RECORD 9662 LDX 7 IECC(2) [J IF CURRENT CHARACTER NOT STOPPING 966L BXU 7 IEOC(2),TM22 [CHARACTER 967= LDXC 7 IESP(2) [POINTER TO NEXT FREE STACK ENTRY 967W ANDX 7 BITS22LS 968G ANDX 3 BITS22LS 9696 STO 3 ACOM3(2) 969Q BXE 7 ACOM3(2),TM22 [SHOULD NOT BE POSSIBLE 96=B LDX 6 BITS22LS 96?2 TM21 LDX 3 ACOM3(2) 96?L ADS 2 3 96#= STO 6 IESTACK+7(3) [RE-INITIALISE TWO EXTRA WORDS IN 96#W STOZ IESTACK+8(3) [STACK ENTRY FOR THIS TERMINATOR 96*G LDN 3 9 [& ANY NESTED TERMINATORS UP TO IESP 96B6 ADS 3 ACOM3(2) 96BQ BXU 7 ACOM3(2),TM21 96CB TM22 LDX 6 AWORK1(2) [GET LINK 96D2 ) 96DL #UNS EDLOOP 96F= #SKI 96GG LDX 6 AWORK1(2) [GET LINK 9726 ADS 1 6 97FQ TERMX EXIT 6 0 [EXIT 97^B #PAG 98F2 # 98YL # THE FOLLOWING ROUTINES ACTUALLY DO THE EDITING 99D= # 99XW # FIRST THE TRANSCRIBE ROUTINE 9=CG # 9=X6 N7EDITPT 9?BQ # 9?WB LDCT 0 #200 [SET A BIT TO SAY WE 9#B2 ORS 0 IEWT(2) [ARE TRANSCRIBING 9#TL LDX 7 IEWT(2) 9**= BPZ 7 N8EDITPT [CONTINUE IF FORWARDS 9*SW EDERR BTNA [CANT TRANSCRIBE BACKWARDS 9B#G BRN NER 9BS6 # 9C?Q # NOW THE POSITION/TRANSCRIBE 9CRB # 9D?2 N8EDITPT 9DQL # 9F2D BVCR £ [ENSURE V IS CLEAR 9F== LDXC 7 IESP(2) [SEE IF ANY TERMINATORS 9FPW BCS PTSLOW [J TO SLOW METHOD IF SO 9G9G LDCT 0 #200 9GP6 ADN 0 1 [USE THE FAST METHOD 9H8Q ANDX 0 IEWT(2) [IF PE OR PN 9HNB BZE 0 PFAST 9J82 PTSLOW 9JML STOZ AWORK4(2) [DON'T TRIGGER EOF YET 9K7= CALL 6 TERMS [CHECK IF TERMINATOR STOPS 9KLW LDXC 7 IESY(2) [US ON THIS RECORD 9L6G BCC PTS10 [J IF NOT 9LL6 CALL 6 TARGREC [SEE IF ON TARGET RECORD 9M5Q BRN PTS80 [J IF SO 9MKB LDX 3 IECC(2) [ELSE SET TARGET CHAR TO WHERE 9N52 BRN PTS81 [TERMINATOR STOPS US 9NJL PTS10 STOZ AWORK4(2) [DONT TRIGGER EOF YET 9P4= CALL 6 TARGREC [SEE IF ON TARGET RECORD 9PHW BRN PTS80 [J IF SO 9Q3G LDCT 7 #4 9QH6 ANDX 7 IESW(2) 9R2Q BZE 7 PTS20 [J IF NOT AT EOF 9RGB LDXC 7 IEWT(2) 9S22 BCC PTS30 [J IF FORWARDS 9SFL PTS20 CALL 6 RROR [WRITE RESIDUE OF RECORD 9S^= PTS30 9TDW CALL 6 READ [READ NEXT RECORD 9TYG CALL 6 TERMS [CHECK TERMINATORS 9WD6 LDXC 7 IESY(2) 9WXQ BCC PTS40 [J IF NOT FOUND ONE 9XCB CALL 6 TARGREC [SEE IF ON TARGET RECORD 9XX2 BRN PTS80 [J IF SO 9YBL LDX 3 IECC(2) [ADJUST TARGET RECORD 9YW= BRN PTS81 9^*W PTS40 CALL 6 TARGREC [SEE IF ON TARGET RECORD 9^TG BRN PTS80 [J IF SO =2*6 LDX 7 AWORK4(2) =2SQ BZE 7 PTS60 [J IF READ WAS OK =3#B SBN 7 1 =3S2 BNZ 7 PTS50 [J IF NOT OFF END =4?L PTS45 EDERR YROE [YOUVE RUN OFF THE END =4R= BRN NER =5=W PTS55 LDN 7 1 =5QG STO 7 AWORK4(2) [MARK AS END OF FILE =6=6 CALL 6 TERMS [CHECK FOR E TERMINATOR =6PQ LDXC 7 IESY(2) =79B BCC PTS45 [J IF NOT ONE =7P2 LDX 3 IECC(2) [OTHERWISE PICK UP STOPPING CHAR =88L BRN PTS8A [J RECORD FOUND =8N= PTS50 EDERR YROB [YOUVE RUN OFF THE BEGINNING =97W BRN NER =9MG PTS60 LDCT 7 #4 ==76 ANDX 7 IESW(2) ==LQ BZE 7 PTS70 [J IF NOT AT EOF =?6B LDXC 7 IEWT(2) =?L2 BCC PTS30 [J IF FORWARDS =#5L PTS70 LDCT 6 #200 =#K= ANDX 6 IEWT(2) =*4W BZE 6 PTS30 [J IF P =*JG CALL 0 MOVE [MOVE DATA TO FAPB =B46 CALL 6 WRITE =BHQ BRN PTS30 =C3B PFAST LDXC 0 IEWT(2) =C5^ FIXTRA ESP4 [****EDITOR SPECIAL FOR PLESSEY**** =C8J BRN SP4 =C?7 BCS £ [CLEAR 'C' IF SET =C*Q LDX 5 IEOR(2) =CD* SP4 =CH2 BNZ 0 PFS10 [J IF NUMBER =D2L LDCT 7 #4 =DG= ANDX 7 IESW(2) =D^W BNZ 7 PTS94 [J IF AT EOF =FFG LDN 3 4095 [A BIG NO =F^6 PFS0 VSKIP 1,0(3) [SKIP =GDQ TESTREP2 ENDFILE,PFS1 [J IF HIT EOF =GYB LDN 3 4095 =HD2 ADS 3 IEOR(2) [ELSE UPDATE IEOR =HXL BRN PFS0 =JC= PFS1 LDN 4 4095 =JWW SBX 4 3 =KBG ADS 4 IEOR(2) [UPDATE IEOR =KF5 FIXTRA ESP5 [****EDITOR SPECIAL FOR PLESSEY**** =KHN BRN SP5 =KL? SBX 5 IEOR(2) =KNW SBS 5 IEOS(2) =KRF SP5 =KW6 STOZ IEOC(2) =L*Q STOZ IEOH(2) [CLEAR CURRENT CHAR. COUNT (OF) =LTB LDCT 7 #4 =M*2 ORS 7 IESW(2) [SET EOF BIT =MSL BRN PTS94 =N#= PFS10 LDXC 0 IEWT(2) =NRW BCS PFS20 [J IF BACKWARDS =P?G LDCT 7 #4 =PR6 ANDX 7 IESW(2) =Q=Q BZE 7 PFS11 [J IF NOT AT EOF =QQB LDX 6 IEWT+1(2) =R=2 SBX 6 IEOR(2) [SEE IF ON TARGET RECORD =RPL BNZ 6 PTS45 [YROF IF NOT =S9= BRN PTS80 [ELSE CARRY ON =SNW PFS11 LDX 4 IEWT+1(2) =T8G SBX 4 IEOR(2) =TN6 BZE 4 PTS80 [J IF ALREADY THERE =W7Q SBN 4 1 =WMB BZE 4 PFS12 =X72 LDX 6 4 [X6=NO. RECORDS STILL LEFT =XLL PFSL LDN 3 4095 =Y6= SBX 6 3 =YKW BPZ 6 PFSV [J IF > 4095 =^5G ADX 3 6 =^K6 LDN 6 0 [NONE LEFT AFTER NEXT SKIP ?24Q PFSV VSKIP 1,0(3) [SKIP GIVEN NO. ?2JB TESTRPN2 ENDFILE,PSF12 [J IF NOT HIT EOF ?342 SBX 4 3 [E0F SO - WHAT VSKIP LEFT ?3HL PSF11 SBX 4 6 [- NO. LEFT UNDONE ?43= ADS 4 IEOR(2) ?48D FIXTRA ESP6 [****EDITOR SPECIAL FOR PLESSEY**** ?4*L NULL ?4GW STOZ IEOC(2) ?52G STOZ IEOH(2) [CLEAR CURRENT CHAR. COUNT (OF) ?5G6 LDCT 7 #4 [SET EOF BIT ?5^Q ORS 7 IESW(2) ?6FB BRN PTS45 [YROF ?6^2 PSF12 BZE 3 PSF11 ?7DL BNZ 6 PFSL [J IF MORE TO SKIP ?7Y= PFS12 ADS 4 IEOR(2) ?85D FIXTRA ESP7 [****EDITOR SPECIAL FOR PLESSEY**** ?8=L NULL ?8CW CALL 6 READ [READ REQUIRED RECORD ?8XG LDX 7 IEOR(2) ?9C6 SBX 7 IEWT+1(2) ?9WQ BZE 7 PTS80 ?=BB OH GEOERR 1,EDITPT ?=W2 PFS20 LDX 7 IEOR(2) ??*L SBX 7 IEWT+1(2) [NO OF RECORDS TO GO BACK ??T= BZE 7 PTS80 [J IF ALREADY THERE ?##W LDCT 6 #4 ?#SG ORS 6 IESW(2) [CLEAR EOF BIT ?*#6 ERS 6 IESW(2) ?*RQ LDN 6 20 [USE DMB'S ALGORITHM TO ?B?B MPY 7 6 [DETERMINE MOST ECONOMICAL ?BR2 BNZ 7 PREW [METHOD - REWIND IF ?C=L NGX 0 0 [Y<20(X-Y) ?CQ= ADX 0 IEWT+1(2) [X = CURRENT ?D9W BNG 0 PREW [Y = DESTINATION ?DPG PBSP NGX 6 IEWT+1(2) [ALSO REWIND IF ?F96 BPZ 6 PREW [Y<0 OR Y=0 ?FNQ LDX 7 IEOR(2) ?G8B ADX 7 6 [X-Y ?GN2 SBN 7 1 [NO OF BACKSPACES TO DO ?H7L BZE 7 PBSP2 [J IF NONE ?HM= SBS 7 IEOR(2) [UPDATE RECORD NO ?HSD FIXTRA ESP8 [****EDITOR SPECIAL FOR PLESSEY**** ?H^L NULL ?J6W PBSP1 BACKSPACE 1 [DO LOOP OF BSP ?JLG BCT 7 PBSP1 ?K66 PBSP2 CALL 6 READ [READ BACKWARDS ?KKQ BRN PTS80 ?L5B PREW NGN 7 1 [SET REC NO = -1 ?LK2 STO 7 IEOR(2) ?M4L REWIND 1 [REWIND FILE ?MJ= LDCT 4 #400 ?N3W ERS 4 IEWT(2) [FORCE FORWARDS ?NHG LDX 4 IEWT+1(2) ?P36 BZE 4 PREW2 [NO NEED TO SKIP ?PGQ BPZ 4 PREW1 [J IF NORMAL TO SKIP ?Q2B CALL 6 READ [ELSE ERROR OCCURRED SO READ ?QG2 BRN PTS50 [FIRST RECORD AND COMMENT ?Q^L PREW1 LDN 3 4095 ?RF= SBX 4 3 ?RYW BPZ 4 PREW0 [J IF > 4095 ?SDG ADX 3 4 ?SY6 LDN 4 0 [NONE LEFT AFTER NEXT SKIP ?TCQ PREW0 SKIP 1,0(3) ?TXB BNZ 4 PREW1 [LOOP IF MORE TO SKIP ?WC2 LDX 7 IEWT+1(2) ?WWL ADS 7 IEOR(2) [UPDATE RECORD NO ?X3S FIXTRA ESP9 [****EDITOR SPECIAL FOR PLESSEY**** ?X92 NULL ?XB= PREW2 CALL 6 READ [READ REQUIRED RECORD ?XTW PTS80 LDX 0 IEWT+4(2) ?Y*G BZE 0 PTS82 [J IF SEARCH BY NUMBER ?YT6 LDCT 7 #4 ?^#Q ANDX 7 IESW(2) [CHECK IF EOF ?^SB BZE 7 PST80 [OK IF NOT #2#2 LDXC 7 IEWT(2) #2RL BCS PST84 [CHNF IF BACKWARDS #3?= BRN PTS55 [POSSIBLY YROE FORWARDS #3QW PST80 LDN 6 IEWT [SET DATA POINTER #4=G DOWN EDITEX,2 [DO CONTEXT SEARCH #4Q6 PTS82 LDX 3 IEWT+3(2) [GET CHAR NUMBER #59Q PTS81 LDCT 7 #4 #5PB ANDX 7 IESW(2) #692 BZE 7 PTS8A [J IF NOT EOF #6NL BNG 3 PTS8A [J IF TARGET CHAR -VE #78= BNZ 3 PTS55 [TARGET CHAR NOT ZERO #7MW PTS8A LDCT 7 #60 #87G ANDX 7 IESW(2) [CHECK FOR W FACILITY #8M6 SLL 7 3 #96Q BPZ 7 PTS8B [W NOT BEING USED #9LB SLL 7 1 #=62 BNG 7 PTS8B [RECORD ALREADY LISTED #=KL DOWN EDWRITE,10 [LIST THE RECORD #?5= PTS8B LDXC 7 IESY(2) [J IF NO REPETITION STOPS #?JW BCC PTS84 [ON THIS RECORD ##4G LDX 7 IECC(2) ##J6 LDXC 0 IEWT(2) #*3Q BCS PTS83 [J IF BACKWARDS #*HB BXL 3 7,PTS84 #B32 LDX 3 7 [ADJUST STOPPING POINT #BGL BRN PTS84 [TO TAKE ACCOUNT #C2= PTS83 BXGE 3 7,PTS84 [OF TERMINATOR #CFW LDX 3 7 #C^G PTS84 BPZ 3 PTS85 [J IF CHAR NO REASONABLE #DF6 PST84 EDCOM CHNF ["CHARACTER NOT FOUND" #DYQ LDN 3 0 [SET TO REASONABLE VALUE #FDB PTS85 LDCT 7 #200 #FY2 ANDX 7 IEWT(2) #GCL BZE 7 PTS91 [J IF P INSTRUCTION #GX= STO 3 AWORK3(2) [SAVE DESTINATION POINT #HBW LDX 4 3 #HWG SBX 4 IEOC(2) [NO OF CHARS TO TRANSCRIBE #J8X BNG 4 PTS92 [J IF NEGATIVE #JH# BZE 4 PTS92 [J IF NOE (DONT WANT RED TAPE) #JTQ ADX 4 IENC(2) [WHAT IENC WOULD BECOME #K*B BXL 4 IENH(2),PTS86 [J IF LENGTH OK #KT2 LDX 4 IENH(2) [ELSE ADJUST #L#L PTS86 CALL 0 SIZE [CHECK SIZE OF FAPB #LS= SBX 4 IENC(2) [NO OF CHARS TO TRANSCRIBE #M?W STOZ AWORK4(2) [NO OF SPACES REQUIRED #MRG LDX 3 IEOH(2) #N?6 SBX 3 IEOC(2) [NO OF CHARS LEFT IN RECORD #NQQ BPZ 3 PTS87 #P=B LDN 3 0 [NEGATIVE MEANS NONE #PQ2 PTS87 BXGE 3 4,PTS88 [SPACES NOT REQUIRED #Q9L SBX 4 3 #QP= STO 4 AWORK4(2) [NO OF SPACES #R8W BRN PTS89 #RNG PTS88 LDX 3 4 [NO OF CHARS TO TRANSCRIBE #S86 PTS89 STO 3 AWORK1(2) #SMQ CALL 6 RLOF [RELOCATE BLOCKS #T7B CALL 6 RLNF #TM2 LDX 3 AWORK1(2) #W6L LDX 6 IEOC(2) #WL= LDX 7 IENC(2) #X5W ADS 3 IEOC(2) [UPDATE CHAR POINTERS #XKG ADS 3 IENC(2) #Y56 SRC 6 2 #YJQ SRC 7 2 #^4B #^J2 BNZ 7 PTS90 [J IF RED TAPE NOT REQUIRED *23L #SKI JDIAG1<1$1 *2H= ( *32W ADN 3 8 [ELSE ADJUST *3GG NGN 6 2 *426 NGN 7 2 *4FQ PTS90 ADN 6 A1+2 *4^B ADN 7 A1+2 *5F2 ) *5YL #SKI JDIAG1 *6D= ( *6T3 LDX 0 IEOG(2) *79S SBN 0 A1 *7LK SLL 0 2 *83B *8D7 LDX 4 IEOA(2) [OLD FILE BLOCK ADDR *8SY LDX 5 IENA(2) [NEW FILE BLOCK ADDR *99P ADN 4 A1 [AND INCREMENT TO *9LG ADN 5 A1 [RED TAPE *=3? SMO 0 [LENGTH OF RED TAPE *=D4 MVCH 4 0 [COPY OVER FROM OLD TO NEW *=SW PTS90 ADX 6 IEOG(2) *?#G ADX 7 IENG(2) *?S6 ) *#?Q ADX 6 IEOA(2) [GET ABSOLUTE ADDRESSES *#RB ADX 7 IENA(2) **?2 CALL 0 MVCH [AT LAST **QL LDX 3 AWORK4(2) [NO OF SPACES REQUIRED *B== BZE 3 PST90 *BPW ADS 3 IEOC(2) *C9G ADS 3 IENC(2) [UPDATE POINTERS *CP6 LDN 5 #20 *D8Q LDX 6 7 *DNB LDX 3 7 *F82 DCH 5 0(3) [DUMP A SPACE *FML BCHX 7 £ *G7= LDX 3 AWORK4(2) *GLW SBN 3 1 *H6G CALL 0 MVCH [MOVE THE SPACES *HL6 PST90 LDX 7 IEOC(2) [SEE IF WE TRUNCATED *J5Q BXE 7 AWORK3(2),PTS92 [J IF NOT *JKB EDCOM YRTL [CHOP CHOP CHOP *K52 BRN NER *KJL PTS91 STO 3 IEOC(2) [SET IEOC *P^= PTS92 LDXC 7 IESY(2) [HAS A TERMINATOR STOPPED US *QDW BCC PTS94 [J IF NOT *QYG LDX 6 IEOC(2) [HAVE WE REACHED STOPPING POINT *RD6 BXU 6 IECC(2),PTS94 [J IF NOT *RMY PTS92A *RXQ BZE 7 PTS93 [J IF STACK NOW CLEAR *SCB LDCT 6 #400 *SX2 ORX 7 6 [KEEP B0 OF IESP SET *TBL PTS93 STO 7 IESP(2) [RESET STACK TO PULLED *TW= SMO 7 [UP VALUE *W*W LDX 6 IESTACK+1(2) *WTG STO 6 IEIP(2) [SKIP PAST TERMINATOR *X*6 STOZ IESY(2) [ZEROISE STORAGE WORD *XSQ PTS94 ACROSS EDITOR,3 [WIND TO NEXT INSTRUCTION *Y#B # *YS2 # *^?L # THIS ROUTINE COPIES THE REST OF THE OLD FILE STACK *^R= # B2=W N2EDITPT B2QG LDCT 5 #4 B3=6 ANDX 5 IESW(2) [CHECK IF AT EOF B3PQ BZE 5 ZE1 [J IF NOT B49B LDX 5 IENC(2) [TEST IF ANYTHING TO WRITE B4P2 BZE 5 ZE3 [J IF NOT B58L ZE1 STOZ IESP(2) [DONT ALLOW REPETITION B5N= LDCT 4 #400 B67W LDCT 0 #600 [SET BIT SAYING WE ARE B6MG ORS 0 IEWT(2) [TRANSCRIBING B776 ERS 4 IEWT(2) [FORCE READ FROWARDS B7LQ CALL 6 RROR B86B ZE2 B8L2 CALL 6 READ [READ NEXT RECORD B95L LDCT 7 #4 B9K= ANDX 7 IESW(2) B=4W BNZ 7 ZE3 [J IF EOF B=JG CALL 0 MOVE B?46 CALL 6 WRITE B?HQ BRN ZE2 B#3B ZE3 LDX 5 IEON(2) B#H2 SBN 5 2 B*2L BNG 5 ZE4 [J IF LAST OLDFILE COPIED B*G= DOWN EDITOR,5 B*^W DOWN EDITPT,11 [SIMULATE X INSTRUCTION BBFG BRN N2EDITPT [DO NEXT FILE BB^6 ZE4 ACROSS EDITOR,9 [FINISHED BCDQ # BCYB # BDD2 # CODE FOR A,B AND R INSTRUCTIONS BDXL # BFC= TABR SBS 1 6 BFWW STO 6 AWORK2(2) [STORE LINK BGBG CALL 6 TERMS [CHECK TERMINATORS BGW6 LDX 1 AWORK2(2) [GET PAIR ADDRESS BH*Q ADX 1 FX1 [DATUMISE BHTB ACROSSVAR 0(1) [J TO INSTRUCTION BJ*2 # BJSL N3EDITPT [A INSTRUCTION BK#= # BKRW CALL 6 TABR BL?G PAIR EDITEX,4 BLR6 # BM=Q N4EDITPT [B INSTRUCTION BMQB # BN=2 CALL 6 TABR BNPL PAIR EDITEX,5 BP9= # BPNW N5EDITPT [R INSTRUCTION BQ8G # BQN6 CALL 6 TABR BR7Q PAIR EDITEX,7 BRMB # BS72 # BSLL N10EDITPT [READ FIRST RECORD OF OLD FILE BT6= LDCT 0 #2 [SET B7 IN BTKW ORS 0 IESW(2) [CASE OF BREAK-IN BW5G STOZ IEWT(2) [FORCE FORWARDS BWK6 CALL 6 READ [READ RECORD BX4Q LDCT 0 #2 [CLEAR MARKER BXJB ORS 0 IESW(2) [FROM SWITCH WORD BY42 ERS 0 IESW(2) BYHL LDCT 7 #4 B^3= ANDX 7 IESW(2) B^GW LDN 3 0 C22G BZE 7 UP [J IF EOF NOT SET C2G6 LDN 3 1 C2^Q UP STO 3 ACOM3(2) [SET ACOM3 C3FB UPPLUS 1 C3^2 # C4DL # C4Y= N11EDITPT [PART OF X INSTRUCTION C5CW # C5XG HUNTW 3,EDIT,FRB [FIND FRB OF FILE JUST CLOSED C6C6 BNG 3 U1 [J IF NOT THERE C6WQ FREECORE 3 [FREE IT C7BB U1 READAGAIN 1 [REREAD REQUIRED RECORD C7W2 LDN 6 U2 C8*L STO 6 AWORK1(2) [SET EXIT C8T= BRN RD42 [INITIALISE C9#W U2 UP [RETURN C9SG # C9T6 # C9TQ # C9WB # C9X2 # THIS ROUTINE IS CALLED TO TEST IF ANY TERMINATOR C9XL # HAS BEEN REACHED BEFORE EXECUTING ANY INSTRUCTION C9Y= # IF WE ARE NOT ON ANY TERMINATOR GO BACK C9YW # OTHERWISE PULL UP STACK AND WIND TO NEXT INSTRUCTION C9^G # C=26 # IEWT IS SET TO #7777 TO SIGNIFY THAT WE MAY STOP C=2Q # ON A FORWARDS OR BACKWARDS TERMINATOR C=3B # C=42 # C=4L N12EDITPT C=5= LDN 7 #7777 C=5W STO 7 IEWT(2) [AS ABOVE C=6G CALL 6 TERMS [TEST IF THIS TERMINATOR STOPS US .. C=76 LDXC 7 IESY(2) [ON THIS RECORD .. C=7Q BCC U2 [J TO 'UP' IF NOT THIS RECORD C=8B LDX 6 IECC(2) [IF STOPPING CHAR IS NOT CURRENT .. C=92 BXU 6 IEOC(2),U2 [CHAR THEN J TO 'UP' C=9L TRACE 6,IESTOPCH C=== FREELINK [NOT GOING UP NOW C==W BRN PTS92A [J TO PULL UP STACK ETC C=#6 MENDAREA 1023-0?<150,K100EDITPT C=RQ #END ^^^^ ...67643253000200000000