{{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