{{htmlmetatags>metatag-description:(ICL George 3 and George 4 source: EDITORA865)}}
====== EDITORA865 ======
(George Source)
**Macros used:** [[george:macro:ACROSS|ACROSS]], [[george:macro:ADDREC|ADDREC]], [[george:macro:ALASHUNT|ALASHUNT]], [[george:macro:ALTLEN|ALTLEN]], [[george:macro:ALTLEND|ALTLEND]], [[george:macro:APCHANGE|APCHANGE]], [[george:macro:BXE|BXE]], [[george:macro:BXGE|BXGE]], [[george:macro:BXL|BXL]], [[george:macro:BXU|BXU]], [[george:macro:CLOSE|CLOSE]], [[george:macro:CLOSEABANDON|CLOSEABANDON]], [[george:macro:COMBRKIN|COMBRKIN]], [[george:macro:DOWN|DOWN]], [[george:macro:EDCOM|EDCOM]], [[george:macro:ENDCOM|ENDCOM]], [[george:macro:FIXTRA|FIXTRA]], [[george:macro:FJOCA|FJOCA]], [[george:macro:FREECORE|FREECORE]], [[george:macro:GEOERR|GEOERR]], [[george:macro:HUNTW|HUNTW]], [[george:macro:LOSEPARS|LOSEPARS]], [[george:macro:MENDAREA|MENDAREA]], [[george:macro:MHUNTW|MHUNTW]], [[george:macro:MONOUT|MONOUT]], [[george:macro:OUTMONX|OUTMONX]], [[george:macro:OUTPACK|OUTPACK]], [[george:macro:OUTPAR|OUTPAR]], [[george:macro:OUTPARAM|OUTPARAM]], [[george:macro:OUTPARAX|OUTPARAX]], [[george:macro:PHOTO|PHOTO]], [[george:macro:READ|READ]], [[george:macro:READY|READY]], [[george:macro:SEGENTRY|SEGENTRY]], [[george:macro:TESTBRKIN|TESTBRKIN]], [[george:macro:TESTMOVE|TESTMOVE]], [[george:macro:TESTRACE|TESTRACE]], [[george:macro:UP|UP]], [[george:macro:UPDATEJT|UPDATEJT]]
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--
4RT2 # SWITCH' IS SET THEN CHARACTERS ARE READ FROM THE EDITING FILE, AND
4S#L # VISIBLE SPACE SUBSTITUTION IS DONE. 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 [ 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
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