IDENT EDIT,FETS ABS ENTRY EDIT ENTRY RFL= ENTRY SSM= SST SYSCOM B1 TITLE EDIT - TIME SHARING TEXT EDITOR. SPACE 4 *COMMENT EDIT - TIME SHARING TEXT EDITOR. COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992. SPACE 4 *** EDIT - TIME SHARING TEXT EDITOR. * P. D. HAAS 72/07/10. * S. L. KSANDER. 75/09/10. SPACE 4 *** EDIT IS A TIME SHARING PACKAGE PROVIDING THE TERMINAL USER * WITH A SET OF COMMANDS BY WHICH TO CREATE, MODIFY, * OR OTHERWISE MANIPULATE A DATA FILE. * * THE BASIC STRUCTURE OF A COMMAND IS- * * COMMAND:/PHRASE/;N * * A /PHRASE/ IS THE COMMAND COMPONENT WHICH SPECIFIES A * CHARACTER STRING OF INTEREST. IT MAY BE OF A SIMPLE FORM * /P1/, OR COMPLEX /P1/,/P2/. THE PARAMETER N IS A SPECIFIC- * ATOR WHICH INDICATES THE NUMBER OF LINES THE COMMAND WILL * AFFECT OR THE NUMBER OF TIMES THE COMMAND WILL ACT ON THE * PRESENCE OF /PHRASE/. SPACE 4 *** THE COMMAND FORMAT. * * EDIT(FN=LFN,M=M,I=IFN,L=OFN) * OR * EDIT(LFN,M,IFN,OFN) * * LFN FILENAME TO BE EDITED. * * M MODE OF PROCESSING FOR CURRENT EDIT SESSION. * IF EITHER THE DIRECTIVE INPUT FILE (I) OR THE * OUTPUT FILE (L) IS ASSIGNED TO A * TIME-SHARING TERMINAL, A *TELEX* CALL IS * MADE TO SET THE TERMINAL CONTROL FOR THE EDIT SESSION. * * ASCII - FULL ASCII MODE. * AS * NORMAL - NORMAL CHARACTER MODE. * N * (DEFAULT=NORMAL) * * IFN FILENAME FROM WHICH TO READ INPUT DIRECTIVES. * (DEFAULT=INPUT) * * OFN FILENAME ON WHICH EDITOR OUTPUT IS WRITTEN. * (DEFAULT=OUTPUT) SPACE 4 *** TERMINAL INTERRUPT PROCESSING. (*DISTC* CONTROL) * * IF THE USER,S DIRECTIVE INPUT FILE (I) IS ASSIGNED TO * A TIME-SHARING TERMINAL, *DISTC* PROCESSING IS ENABLED. * IN ALL OTHER CASES, TERMINAL INPTERRUPTS WILL INTERRUPT * OR TERMINATE THE EDIT SESSION. SPACE 4 *** DAYFILE MESSAGES. * * * COMMAND ERROR.* - AN INCORRECT OR INVALID PARAMETER * HAS BEEN DETECTED ON THE *EDIT* COMMAND. * * * RESERVED FILE NAME.* - FILE NAME SPECIFIED ON *EDIT* * COMMAND IS RESERVED FOR USE BY THE EDITOR (SCR, SCR1, * SCR2, SCR3, SCR4), OR IS A DUPLICATE OF THE INPUT, OUTPUT, * OR TEXT FILE NAME. SPACE 4,10 *** OUTPUT MESSAGES. * * * BEGIN TEXT EDITING.* - INFORMATIVE MESSAGE INDICATING * EDITOR IS READY TO BEGIN ACCEPTING COMMANDS. * * * COMMAND CONTINUE?* - INQUIRY AS TO WHETHER OR NOT AN * INTERRUPTED COMMAND SHOULD CONTINUE TO BE PROCESSED. * * * DISREGARD PREVIOUS TEXT?* - AN INTERRUPT AS BEEN SENSED * WHILE INPUTTING TEXT. *YES* OR *Y* RESPONSE WILL DISCARD * ALL ENTERED TEXT. *NO* OR *N* WILL PROCESS ALL TEXT ENTERED * TO THIS POINT. MESSAGE WILL BE RE-ISSUED IF AN INCORRECT * RESPONSE IS GIVEN. AN INTERRUPT AS A RESPONSE WILL SIMULATE * AN *END* COMMAND. * * * EDIT FILE NOT IN WRITE MODE.* * * DO YOU WISH TO CONTINUE?* - WARNING TO TERMINAL USER * THAT THE EDIT FILE IS NOT ASSIGNED IN WRITE MODE, AND * INQUIRY AS TO WHETHER THE USER WISHES TO CONTINUE EDITING. * IF *NO* OR *N* RESPONSE IS ENTERED, *EDIT* WILL TERMINATE. * IF *YES* OR *Y* RESPONSE IS ENTERED, EDITING IS ALLOWED, * BUT *EDIT* WILL EVENTUALLY ABORT WITH AN ERROR DIAGNOSTIC * SUCH AS *WRITE ON READ ONLY FILE*. * * * -END OF FILE- * - INFORMATIVE MESSAGE INDICATING THAT * THE TEXT FILE IS POSITIONED AFTER THE LAST LINE OF TEXT, * OR THAT THE END OF TEXT WAS ENCOUNTERED DURING *LIST* OR * *FIND* COMMAND PROCESSING. * * * END TEXT EDITING.* - INFORMATIVE MESSAGE INDICATING * TERMINATION OF EDIT SESSION. * * * ENTER TEXT.* - REQUESTS ENTRY OF NEW OR REPLACEMENT * TEXT FOR *ADD(S)* OR *CHANGE(S)* COMMAND. * * * ENTER TEXT FILE NAME.* - REQUESTS ENTRY OF EDIT FILE * NAME, SINCE IT WAS NOT SPECIFIED ON THE *EDIT* COMMAND. * * * ENTER *YES* OR *NO*.* - PROMPTS THE USER TO ENTER A * RESPONSE FOR A PREVIOUS ENQUIRY. * * * FILE AT LINE NUMBER N.* - INFORMATIVE MESSAGE INDICATING * THAT THE TEXT FILE IS CURRENTLY POSITIONED AT LINE NUMBER N. * * * INCORRECT COMMAND.* - ERROR MESSAGE INDICATING THE COMMAND * NAME ENTERED IS NOT A VALID COMMAND. * * * INCORRECT DELIMITER.* - ERROR MESSAGE INDICATING AN * INCORRECT DELIMITER WAS USED IN RESPONSE TO THE *ENTER TEXT* * REQUEST FROM A NON-INTERACTIVE JOB. THE *ADD(S)* OR * *CHANGES(S)* COMMAND IS TERMINATED. * * * INCORRECT DELIMITER - REENTER TEXT.* - ERROR MESSAGE * INDICATING AN INCORRECT DELIMITER WAS USED IN RESPONSE TO * THE *ENTER TEXT* REQUEST FROM AN INTERACTIVE JOB. * REQUESTS REENTRY OF TEXT WITH A VALID DELIMITER. * * * INCORRECT FILE NAME.* - ERROR MESSAGE INDICATING FILE NAME * PASSED WITH *MERGE* COMMAND IS INCORRECT. * * * IMPROPER TRUNCATION.* - ERROR MESSAGE INDICATING THE * LENGTH SPECIFIED ON THE *LENGTH;N* COMMAND IS GREATER * THAN OR EQUAL TO THE PREVIOUS LENGTH SPECIFIED. * * * INTERRUPT AT LINE N.* - INFORMATIVE MESSAGE INDICATING * THE CURRENT POSITION IN THE TEXT FILE OF AN INTERRUPTED * COMMAND. * * * MERGE ERROR, SECONDARY FILE EMPTY.* - ERROR MESSAGE * INDICATING THAT THE FILE TO BE MERGED WITH THE EDIT FILE * IS EMPTY, DOES NOT EXIST, OR IS NOT LOCAL TO THE JOB * (PERMANENT FILE MUST BE ATTACHED PRIOR TO EDIT SESSION). * * * PHRASE NOT FOUND.* - INFORMATIVE MESSAGE INDICATING THE * SPECIFIED SEARCH STRING WAS NOT FOUND. * * * READY.* - INFORMATIVE MESSAGE INDICATING THE NEXT COMMAND * CAN BE ENTERED. * * * RESERVED FILE NAME.* - ERROR MESSAGE INDICATING THAT THE * FILE NAME SPECIFIED ON THE *MERGE* COMMAND IS RESERVED FOR * USE BY THE EDITOR (SCR, SCR1, SCR2, SCR3, SCR4), OR IS A * DUPLICATE OF THE INPUT, OUTPUT, OR TEXT FILE NAME. * * * TAB STOPS NONE.* - INFORMATIVE MESSAGE INDICATING NO TAB * STOPS ARE CURRENTLY ESTABLISHED. * * * TAB STOPS T1 T2 ... TN* - INFORMATIVE MESSAGE ISSUED * IN RESPONSE TO *LISTAB* COMMAND INDICATING THE TEXT EDITOR * TAB STOPS THAT ARE IN EFFECT. * * * XXXXXXX SYNTAX ERROR.* - ERROR MESSAGE INDICATING IMPROPER * SYNTAX WAS USED WITH TEXT EDITOR COMMAND XXXXXXX. * * * N LINES TO EOF.* - INFORMATIVE MESSAGE INDICATING THE * LINE COUNT FROM THE CURRENT SEARCH POINTER TO THE LAST * LINE IN THE TEXT FILE. * * * N LINES TO INTERRUPT.* - INFORMATIVE MESSAGE INDICATING * NUMBER OF LINES OR OCCURRENCES OF PHRASE FOUND IN TEXT * FILE BEFORE THE INTERRUPT WAS DETECTED. * * * N OCCURRENCES OF PHRASE FOUND.* - INFORMATIVE MESSAGE * INDICATING THAT THE END OF TEXT WAS ENCOUNTERED BEFORE THE * NUMBER OF ITERATIONS SPECIFIED IN THE COMMAND WERE COMPLETED. TITLE ASSEMBLY CONSTANTS. * ASSEMBLY CONSTANTS. SPACE 4 TABCL EQU 150 MAXIMUM TAB VALUE TTBLL EQU 7 MAXIMUM NUMBER OF TABS NLR EQU 8 NUMBER OF LENGTH RECORDS MINWD EQU 6 MINIMUM SIZE FOR WIDTH MAXWD EQU 150 MAXIMUM SIZE FOR WIDTH CMDBL EQU MAXWD*2 LENGTH OF COMMAND BUFFER STRBL EQU MAXWD*2 LENGTH OF CHARACTER BUFFER USBL$ EQU 1 VARIABLE LENGTH OPTION FOR UNPACK BUFFER USBBL EQU MAXWD*2 UNPACK STRING BUFFER LENGTH CCBL EQU 80 COMMAND BUFFER LENGTH LBUFL EQU 30 LENGTH OF LINE BUFFER FETL EQU 7 FET LENGTH OBUFL EQU 201B LENGTH OF O-BUFFER (OUTPUT) IBUFL EQU 101B LENGTH OF I-BUFFER (INPUT) MBUFL EQU 201B LENGTH OF M-BUFFER (SCR) BBUFL EQU 201B LENGTH OF B-BUFFER (SCR2) FBUFL EQU 1001B LENGTH OF F-BUFFER (SCR5) CBUFL EQU FBUFL/2 * SPECIAL ENTRY POINT. SSM= EQU 0 SUPPRESS DUMPS OF FIELD LENGTH TITLE MACRO DEFINITIONS. SPACE 4 ** COMMAND - GENERATE ENTRY IN COMMAND AND PROCESSOR TABLES. * * COMMAND CNAM,CPROC,STR1,STR2,NUM * * CNAM COMMAND NAME. * CPROC COMMAND PROCESSOR ADDRESS. * STR1 FIRST STRING SPECIFICATION IS ALLOWED. * STR2 SECOND STRING SPECIFICATION IS ALLOWED. * NUM NUMERIC FIELD SPECIFICATION IS ALLOWED. COMMAND MACRO CNAM,CPROC,P1,P2,P3 LOCAL A,B,C A SET 0 B SET 0 C SET 0 ECHO ,P=(P1,P2,P3) IFC EQ,$P$STR1$,1 A SET 1 IFC EQ,$P$STR2$,1 B SET 1 IFC EQ,$P$NUM$,1 C SET 1 ENDD VFD 42/0L_CNAM,1/A,1/B,1/C,15/CPROC ENDM SPACE 4 ** CEPF - CHECK EOI ON PRIMARY EDIT FILE. * * LOC TRANSFER IF NOT PRIMARY FILE. * R REGISTER USED. CEPF MACRO LOC,R SA_R PFADR BX7 X_R-X5 SX5 X_R NZ X7,LOC ENDM INTRPT SPACE 4 ** INTRPT - PROCESS TERMINAL INTERRUPT * * ALL OUTPUT DATA IN THE BUFFER WILL BE ISSUED PRIOR * TO PROMPT MESSAGE. * * NO - ADDRESS IF COMMAND TO NOT CONTINUE AFTER INTERRUPT. INTRPT MACRO NO + RJ PCC - EQ NO ENDM SPACE 4 *CALL COMCMAC *CALL COMSTCM TITLE FETS. ORG 105B FETS BSS 0 F BSS 0 TEXT FILE SCR5 FILEC FBUF,FBUFL,FET=7,EPR SPACE 3 S BSS 0 SCRATCH FILE SCR4 FILEC SBUF,FBUFL,FET=7 SPACE 3 SC BSS 0 SECONDARY SCRATCH FILE SCR1 FILEC SCBUF,FBUFL,FET=7 SPACE 3 B BSS 0 STRING BUFFER FILE SCR2 FILEC BBUF,BBUFL,FET=7 SPACE 3 M BSS 0 MERGE FILE SCR FILEC MBUF,MBUFL,FET=7,EPR SPACE 3 I BSS 0 INPUT FILE INPUT FILEC IBUF,IBUFL,FET=7 SPACE 3 O BSS 0 OUTPUT FILE OUTPUT FILEC OBUF,OBUFL,FET=7 SPACE 3 T BSS 0 LENGTH FILE SCR3 RFILEC CMDB,FBUFL TITLE COMMAND TABLE. TCMD BSS 0 TABLE OF COMMAND KEYWORDS COMMAND A,ADD,STR1,NUM COMMAND ADD,ADD,STR1,NUM COMMAND ADDS,ADDS,STR1,NUM COMMAND AL,ALIGN,STR1,STR2,NUM COMMAND ALIGN,ALIGN,STR1,STR2,NUM COMMAND AS,ADDS,STR1,NUM COMMAND B,BLANK,STR1,STR2,NUM COMMAND BLANK,BLANK,STR1,STR2,NUM COMMAND BLANKS,BLANKS,STR1,STR2,NUM COMMAND BS,BLANKS,STR1,STR2,NUM COMMAND C,CHANGE,STR1,STR2,NUM COMMAND CHANGE,CHANGE,STR1,STR2,NUM COMMAND CHANGES,CHANGES,STR1,STR2,NUM COMMAND CL,CLEAR COMMAND CLEAR,CLEAR COMMAND CS,CHANGES,STR1,STR2,NUM COMMAND D,DELETE,STR1,STR2,NUM COMMAND DEFTAB,DEFTAB,STR1 COMMAND DELETE,DELETE,STR1,STR2,NUM COMMAND DELETES,DLETES,STR1,STR2,NUM COMMAND DS,DLETES,STR1,STR2,NUM COMMAND DT,DEFTAB,STR1 COMMAND E,XTRACT,STR1,STR2,NUM COMMAND END,END COMMAND ES,XTRACTS,STR1,STR2,NUM COMMAND EXTRACT,XTRACT,STR1,STR2,NUM COMMAND F,FIND,STR1,STR2,NUM COMMAND FIND,FIND,STR1,STR2,NUM COMMAND FINDS,FINDS,STR1,STR2,NUM COMMAND FS,FINDS,STR1,STR2,NUM COMMAND INSERTS,INSERTS,STR1,STR2,NUM COMMAND IS,INSERTS,STR1,STR2,NUM COMMAND L,LIST,STR1,STR2,NUM COMMAND LENGTH,LENGTH,NUM COMMAND LINE,LINE COMMAND LIST,LIST,STR1,STR2,NUM COMMAND LISTAB,LISTAB COMMAND LISTS,LISTS,STR1,STR2,NUM COMMAND LN,LINE COMMAND LS,LISTS,STR1,STR2,NUM COMMAND LT,LISTAB COMMAND M,MERGE,STR1,STR2,NUM COMMAND MERGE,MERGE,STR1,STR2,NUM COMMAND N,NUMBER,STR1,STR2 COMMAND NS,NUMBERS,STR1,STR2 COMMAND NUMBER,NUMBER,STR1,STR2 COMMAND NUMBERS,NUMBERS,STR1,STR2 COMMAND R,RESET COMMAND RESET,RESET COMMAND RS,RPLACES,STR1,STR2,NUM COMMAND S,SET,STR1,NUM COMMAND SET,SET,STR1,NUM COMMAND STOP,END6 COMMAND T,TABS,STR1 COMMAND TAB,TABS,STR1 COMMAND W,WIDTH,NUM COMMAND WIDTH,WIDTH,NUM TCMDL EQU *-TCMD TITLE DATA STORAGE. ** DATA STORAGE. MODE BSS 4 MODE FLAG STPHR1 EQU MODE+1 POINTER TO /P1/ STPHR2 EQU STPHR1+1 POINTER TO /P2/ WDTH CON 72 DEFAULT WITDH SVLC CON 0 SEARCH POINTER PFADR CON F FET ADDRESS OF PRIMARY TEXT FILE JOTY CON 0 JOB ORIGIN TYPE TFILE CON 1 EDIT FILE NAME INTP CON 0 INTERRUPT PENDING TINT CON 0 TERMINAL INTERRUPT INDICATOR TFLEN CON 377776B LENGTH OF EDIT FILE DAFF CON 0 DIRECT ACCESS FILE FLAG EOFIF CON 1 EOF ON INPUT FLAG EOFTF CON 0 EOF ON TEXT FILE FLAG FBB CON 340B FILE BIAS BITS TABCH CON 1S59 TAB CHARACTER ASC CON 0 ESCAPE CODE INDICATOR (-76B IF SET) AFLI CON 0 ALIGN FIELD LENGTH INDICATOR TTBL CON 11 START OF PRESET TAB COLUMNS CON 18 CON 30 CON 40 CON 50 BSSZ TTBLL-*+TTBL+1 BLKS CON 1H BLANK WORD BLKL VFD 12/2H ,48/0 ** POINTER WORD - FBW, LBW, SLP. * *T 1/S,35/POSITION,24/ADDRESS * *S* = STATUS OF POINTER, NEGATIVE INDICATES * POINTER IS AT END OF LINE. * *POSITION* = CHARACTER POSITION WITHIN WORD (0 - 9) * *ADDRESS* = ADDRESS OF WORD CONTAINING *POSITION*. * * THE ORDER OF THE FOLLOWING MUST BE MAINTAINED. FBW CON 0 FIRST CHARACTER BUFFER POINTER WORD LBW CON 0 LAST CHARACTER BUFFER POINTER WORD SLP CON 0 SOURCE LINE POINTER LBA CON LBUF LINE BUFFER ADDRESS NUM CON 0 COMMAND NUMERIC FIELD SEC CON 0 SEARCH COUNT ICT CON 0 INTERRUPT PROCESSING SEARCH COUNT LCT CON 0 LINE COUNT LBL CON 0 LINE BUFFER LWA TBL CON 0 TEMPORARY BUFFER LWA RTFP CON 0 TEXT FILE BUFFER POINTER TBST CON 0 TEXT FILE BUFFER STATUS MAIN TITLE COMMAND CRACKER. ** MAIN - CRACKS COMMAND AND LOCATES PROCESSOR. * * ENTRY (JOTY) - JOB ORIGIN TYPE. * (EOFIF) - INPUT FILE STATUS. * (ASC) - ASCII INDICATOR. * (TFILE) - EDIT FILE NAME. * (DAFF) - DIRECT ACCESS TEXT FILE FLAG. * (EOFTF) - TEXT FILE STATUS. * (LBL) - LINE BUFFER LAST WORD ADDRESS. * * EXIT (NUM) - ABSOLUTE VALUE OF NUMERIC FIELD, DEFAULT OF 1. * (SEC) - NEGATE OF (NUM). * (A3) = STPHR1. *T STPHR1 36/NUMBER OF CHARACTERS IN STRING P1,24/P1 BEGINNING ADDRESS * (A4) = STPHR2. *T STPHR2 36/NUMBER OF CHARACTERS IN STRING P2,24/P2 BEGINNING ADDRESS * (A5) - FET ADDRESS OF WRITE FILE. * (X0) = (X2) = (NUM). * (X1) = (X7) = 0. * (X3) = (STPHR1). * (X4) = (STPHR2). * (X5) - FET ADDRESS OF READ FILE. * (B7) = 1, IF NUMERIC FIELD NEGATIVE, 0 OTHERWISE. * * USES ALL. * * CALLS ANC, CFC, SFN, COMMAND PROCESSORS. MAIN22 SB4 X2-1R NZ B4,MAIN23 IF NOT BLANK CHARACTER SB2 B2+B1 SA2 B2 NE B2,B6,MAIN22 IF NOT END OF INPUT EQ MAIN17 MAIN23 SB4 X2-1R$ ZR B4,MAIN17 IF COMMENTS FIELD * PROCESS SYNTAX ERROR. MAINX SA1 SEM RJ SFN BLANK FILL COMMAND WORD SA6 A1 WRITEC O,A6 MAIN RJ CTI CLEAR TERMINAL INTERRUPTS SA3 JOTY ZR X6,MAIN2 IF NOT INTERRUPT PENDING NZ X3,MAIN1 IF NOT INTERACTIVE INPUT RECALL I SA1 I+1 RESET INPUT FET SX6 X1 SA6 A1+B1 SA6 A6+B1 BX7 X7-X7 SA7 EOFIF MAIN1 RECALL O SA1 X2+B1 RESET OUTPUT FET SX6 X1 SA6 A1+B1 SA6 A6+B1 BX7 X7-X7 CLEAR INTERRUPT PENDING SA7 INTP MAIN2 SA2 EOFIF CHECK INPUT STATUS NZ X2,MAIN3 IF NO EOF ON INPUT FILE SB5 END PRESET END COMMAND SB7 B0+ CLEAR NEGATIVE NUMERIC INDICATOR NZ X3,MAIN19 IF NOT INTERACTIVE JOB SX6 B1 SA6 A2 CLEAR EOI STATUS READ I REINIATE READ MAIN3 READS I,CMDB,-CMDBL NZ X1,MAIN20 IF USER HIT (CR) ONLY SB2 CMDB-1 START OF COMMAND BUFFER SB3 7 SB5 60 SX7 B0+ * ASSEMBLE COMMAND WORD. MAIN4 RJ ANC ASSEMBLE NEXT CHARACTER EQ B2,B6,MAIN5 IF END OF INPUT SX1 X2-1R ZR X1,MAIN4 IF BLANK CHARACTER ZR X4,MAIN5 IF NOT ALPHA CHARACTER SX1 X4-1R0 PL X1,MAIN5 IF NOT ALPHA CHARACTER SX1 X3-74B ZR X1,MAIN5 IF 74B ESCAPE CHARACTER SB3 B3-1 NG B3,MAIN21 IF COMMAND TOO LONG SB5 B5-6 LX7 6 BX7 X4+X7 EQ MAIN4 * SEARCH FOR COMMAND. MAIN5 ZR X7,MAIN21 IF NO COMMAND MX1 -6 MASK FOR MODE CHARACTER BX6 -X1*X7 SX6 X6-1RS SA6 MODE SET MODE LX7 X7,B5 LEFT JUSTIFY COMMAND WORD SA1 =0LSTOP CHECK FOR STOP COMMAND BX5 X1-X7 ZR X5,END6 IF STOP COMMAND RJ CTI CHECK TERMINAL INTERRUPT NZ X3,MAIN IF INTERRUPTED SX4 B1 MX6 42 SB3 TCMD-1 SET COMMAND TABLE ADDRESS SX3 TCMDL*2 SET TABLE LENGTH MAIN6 AX3 1 PL X4,MAIN7 IF ENTRY TOO HIGH SB3 A1+B1 RAISE LOWER LIMIT MAIN7 SA1 X3+B3 GET NEXT ENTRY BX5 -X6*X1 CHECK FOR MATCH BX1 X6*X1 IX4 X1-X7 ZR X4,MAIN8 IF COMMAND FOUND NZ X3,MAIN6 IF NOT END OF SEARCH JP MAIN21 PROCESS INCORRECT COMMAND MAIN8 SA7 SEM MX1 -15 SX7 B1 BX4 -X1*X5 GET PROCESSOR ADDRESS SX6 B0 LX5 59-17 SB5 X4 SA6 STPHR1 CLEAR STRING FIELD POINTERS SB7 B0+ SB3 -B1 SA6 A6+B1 EQ B2,B6,MAIN18 IF NO OPTIONAL FIELDS SX1 X2-1R; ZR X1,MAIN13 IF SPECIFICATOR FIELD NEXT RJ CFC CHECK FOR COLON NZ X3,MAIN23 IF INCORRECT SEPARATOR * PROCESS CHARACTER STRING. MAIN9 RJ ANC ASSEMBLE NEXT CHARACTER EQ B2,B6,MAINX IF PREMATURE END OF INPUT SX1 X2-1R ZR X1,MAINX IF INCORRECT DELIMITER SX1 X2-1R$ ZR X1,MAINX IF INCORRECT DELIMITER BX0 X2 SAVE DELIMITER SX6 B2+B1 SB3 B3+B1 INCREMENT STRING COUNT SB4 X6+ MAIN10 RJ ANC ASSEMBLE NEXT CHARACTER EQ B2,B6,MAINX IF PREMATURE END OF INPUT BX1 X0-X2 NZ X1,MAIN10 IF NOT DELIMITER ZR X3,MAIN11 IF NOT ASCII DELIMITER SX3 -1 MAIN11 SA0 B2+X3 SX1 A0-B4 NUMBER OF CHARACTERS IN STRING LX1 24 BX6 X1+X6 SA6 B3+STPHR1 ZR X1,MAINX IF NULL STRING GT B3,B1,MAINX IF TOO MANY STRINGS BX1 X5 LX1 X1,B3 PL X1,MAINX IF STRING FIELD NOT ALLOWED MAIN12 RJ ANC ASSEMBLE NEXT CHARACTER EQ B2,B6,MAIN18 IF END OF INPUT SX1 X2-1R ZR X1,MAIN12 IF BLANK CHARACTER SX1 X2-1R, ZR X1,MAIN9 IF ANOTHER STRING FIELD SX1 X2-1R; NZ X1,MAIN23 IF INCORRECT SEPARATOR * PROCESS NUMERIC FIELD. MAIN13 LX5 59-15-59+17 PL X5,MAINX IF NUMERIC FIELD NOT ALLOWED RJ ANC ASSEMBLE NEXT CHARACTER EQ B2,B6,MAINX IF PREMATURE END OF INPUT SX7 B0+ SX1 X2-1R* NZ X1,MAIN14 IF NOT ASTERISK SX7 377776B SET INFINITE NUMERIC FIELD EQ MAIN18 MAIN14 SB4 X2-1R+ ZR B4,MAIN15 IF PLUS SIGN SB4 B4-B1 NZ B4,MAIN16 IF NOT MINUS SIGN SB7 B1 MAIN15 SB2 B2+B1 EQ B2,B6,MAINX IF PREMATURE END OF INPUT SA2 B2 MAIN16 SX4 X2-1R+ PL X4,MAIN22 IF NOT DIGIT SX4 X2-1R0 NG X4,MAIN22 IF NOT DIGIT LX6 X7,B1 LX7 3 IX7 X6+X7 N(I-1)*10 IX7 X7+X4 N(I-1)*10+N(I) SB2 B2+B1 SA2 B2 NE B2,B6,MAIN16 IF NOT END OF INPUT MAIN17 ZR X7,MAINX IF NUMERIC FIELD ZERO MX1 -17 BX1 -X1*X7 BX1 X7-X1 NZ X1,MAINX IF NUMERIC FIELD TOO LARGE MAIN18 SA7 NUM BX6 -X7 SA6 A7+B1 BX0 X7 BX2 X7 SX6 B5-SET ZR X6,MAIN19 IF *SET* COMMAND NZ B7,MAINX IF NUMERIC FIELD NEGATIVE MAIN19 MX7 -4 SA1 FBB BX3 -X7*X1 AX1 4 BX6 -X7*X1 SA4 STPHR2 SA5 X6+F WRITE FILE SX5 X3+F READ FILE SA3 STPHR1 POINTER TO STRING FIELD /P1/ BX7 X7-X7 BX1 X1-X1 JP B5 EXECUTE COMMAND * PROCESS INCORRECT COMMAND. MAIN20 SX7 0 SET EOI STATUS SA7 EOFIF MAIN21 RJ CTI CHECK TERMINAL INTERRUPTS NZ X6,MAIN IF INTERRUPTED WRITEC O,(=C* INCORRECT COMMAND.*) EQ MAIN SEM DATA C* SYNTAX ERROR.* ADD TITLE LINE COMMAND PROCESSORS. *** ADD (A) - ADD LINES. * * ONE OR MORE LINES ARE ADDED TO THE FILE BEING EDITED. * NEW DATA IS OBTAINED BY POSTING A REQUEST TO * * ENTER TEXT.* NEW TEXT IS ADDED AFTER THE NTH LINE OR * AFTER EACH OF THE FIRST N LINES CONTAINING /P1/. ADD BSS 0 NZ X3,CHL1 IF STRING FIELD PRESENT ADL1 SA2 X1+ADLA BX6 X2 SA6 ADL2 SET RJ FOR ADD/CHANGE RJ ETX PROCESS TEXT ENTRY ZR X0,MAIN IF NO TEXT ENTERED SA4 EOFTF BX7 X2 SAVE FET ADDRESS SA7 A6-B1 ZR X4,ADL3 IF POSITIONED AT END OF INFORMATION ADL2 SA2 NUM RJ * ADL3 INTRPT SET2 PROCESS TERMINAL INTERRUPT SA2 RTFP RETRIEVE FET POINTER READW X2,TBUF,100B SB7 B6-TBUF NUMBER WORDS READ BX0 X1 SX2 A5 WRITEW X2,TBUF,B7 ZR X0,ADL3 IF COPY NOT COMPLETE JP SET2 ADLA SA2 NUM POSITION TEXT FILE FOR ADD COMMAND RJ AFW + SA2 SEC POSITION TEXT FILE FOR CHANGE COMMAND RJ ATF BLANK EJECT *** BLANK (B) - BLANK LINES. * * ONE OR MORE LINES OF DATA IN THE TEXT FILE ARE REPLACED * WITH BLANK LINES. LINES BLANKED ARE THE FIRST N LINES OR * THE FIRST N LINES CONTAINING /PHRASE/. BLANK BSS 0 SA2 EOFTF ZR X2,LTL11 IF POSITIONED AT EOI ZR X3,BLL6 IF NO STRING FIELDS RJ PSO SEARCH FOR STRING BLL1 SA2 STPHR2 NZ X2,BLL3 IF ELLIPSIS OPERATION BLL2 SA3 SEC BX6 X6-X6 SX7 X3+B1 DECREMENT SEARCH COUNT SA6 LBUF SA7 A3 SX0 B1 ZR X7,SET2 IF ALL DONE INTRPT SET2 PROCESS TEMINAL INTERRUPT RJ SFS SEARCH FOR STRING NZ X7,BLL1 IF ANOTHER /P1/ FOUND JP CHL6 BLL3 SX1 B1 CHECK CURRENT LINE FOR /P2/ RJ SLS ZR B7,BLL2 IF ONE LINE ELLIPSIS WRITEC A5,TCHM SX6 STPHR2 POSITION FILE AT /P2/ RJ SRO SA4 X5+5 SX7 X4+B4 ADVANCE READ FILE LINE POSITION SA7 A4 BLL4 EQ B2,B1,BLL2 IF END OF ELLIPSIS IN NEXT LINE SX2 A5 SX0 B1-B2 BLL5 WRITEC X2,TCHM WRITE BLANK LINES SX0 X0+1 NZ X0,BLL5 IF BLANKETY-BLANKS NOT ALL WRITTEN EQ BLL2 BLL6 BX2 -X0 SA7 LBUF SET BLANK LINE SX2 X2+B1 ZR X2,SET2 IF ONLY ONE BLANK LINE RJ ATF BX6 X6-X6 MX4 8 SA6 LBUF + LX4 1 SET EIGHT BLANK LINES SA6 A6+B1 NG X4,* SA2 NUM SX0 X2-1 BLL7 SB4 -8 SX0 X0+B4 SX2 A5 SB7 B0-B4 PL X0,BLL8 IF LINES ALL WRITTEN SB7 X0+B7 BLL8 WRITEW X2,LBUF,B7 INTRPT SET2 PROCESS TERMINAL INTERRUPT PL X0,BLL7 IF LINES NOT ALL BLANKED JP SET2 CHANGE EJECT *** CHANGE (C) - CHANGE LINES. * * ONE OR MORE LINES OF TEXT ARE DELETED AND REPLACED WITH * DATA ENTERED IN RESPONSE TO THE EDIT REQUEST * ENTER TEXT.* CHANGE BSS 0 SX1 1 ZR X3,ADL1 IF NO STRING FIELDS CHL1 SA2 X1+CHLA BX6 X2 SET RJ FOR CHANGE/ADD SX1 B0 SA2 EOFTF SA6 CHL3 ZR X2,LTL11 IF POSITIONED AT EOF RJ PSO RJ ETX ZR X0,SET2 IF NO TEXT ENTERED BX7 X2 SA7 A6-B1 SAVE FET ADDRESS CHL2 SA1 STPHR2 ZR X1,CHL3 IF NOT ELLIPSIS OPERATION BX0 X0-X0 SX6 A1 SEARCH/READ FOR PHRASE ENDING ELLIPSIS RJ SRO SA3 X5+5 SX6 X3+B4 ADVANCE READ FILE LINE POSITION SA6 A3 CHL3 SX2 -1 GET NEXT LINE RJ ATF * SX2 1 ADVANCE LINE FOR ADD COMMAND * RJ AFW SA2 RTFP TEXT FILE FET ADDRESS SA3 X2+5 SX0 X3+ SET LINE COUNT OF REPLACEMENT DATA SA0 X2+ CHL4 READC A0,TBUF,LBUFL SX0 X0-1 DECREMENT LINE COUNT WRITEC A5,TBUF NZ X0,CHL4 LOOP TO END OF TEXT SA3 SEC SX7 X3+B1 DECREMENT OPERATION COUNT SA7 A3 ZR X7,CHL5 IF COUNTDOWN COMPLETE INTRPT CHL6 PROCESS TERMINAL INTERRUPT SA2 EOFTF SA4 STPHR2 BX3 X2+X4 SX1 B0 ZR X3,CHL6 IF STRING OPERATION COMPLETE SX6 A4-B1 BX0 X0-X0 LOCATE NEXT OCCURANCE OF /P1/ RJ SFS ZR X7,CHL6 IF END OF INFORMATION SA2 RTFP SA3 X2+B1 SX6 X3 SET OUT = FIRST SA4 TBST SA6 X2+3 ZR X4,CHL2 IF TEXT ALL IN BUFFER REWIND X2 READ X2 REINITIATE INPUT EQ CHL2 CHL5 SA3 STPHR2 ZR X3,SET2 IF LINE REPLACEMENT COMPLETE CHL6 SA2 NUM SA4 A2+B1 NUMBER LINES PROCESSED IX1 X2+X4 ZR X1,SET2 IF NONE CHANGED RJ GSM JP SET2 CHLA SX2 1 ADVANCE LINE FOR ADD COMMAND RJ AFW + SX2 -1 ADVANCE LINE FOR CHANGE COMMAND RJ ATF DELETE EJECT *** DELETE (D) - DELETE LINES. * * ONE OR MORE LINES ARE DELETED FROM THE FILE BEING EDITED. * ALL LINES OF A MULTI-LINE /PHRASE/ ARE DELETED. DELETE BSS 0 SA2 EOFTF ZR X2,LTL11 IF POSITIONED AT EOI ZR X3,DLL3 IF STRING FIELDS EMPTY RJ PSO DLL1 SA1 STPHR2 ZR X1,DLL2 IF NOT ELLIPSIS OPERATION BX0 X0-X0 SX6 A1 RJ SRO FIND PHRASE ENDING ELLIPSIS SA4 X5+5 SX7 X4+B4 ADVANCE READ FILE LINE POSITION SA7 A4 DLL2 READC X5,LBUF,LBUFL NZ X1,DLL4 IF EOF ENCOUNTERED SA4 X5+5 SX6 X4+B1 BUMP LINE ADVANCE SA6 A4 SA3 SEC SX7 X3+B1 DECREMENT NUMERIC COUNT SA7 A3 ZR X7,SET2 IF OPERATION COMPLETE INTRPT CHL6 PROCESS TERMINAL INTERRPUT BX0 X0-X0 SX6 B0 RJ SFS NZ X7,DLL1 IF NEXT OCCURANCE OF /P1/ FOUND JP CHL6 DLL3 BX2 -X0 RJ ATF ADVANCE FILE OVER LINES BEING DELETED JP SET2 DLL4 CEPF DLL2,4 SA7 EOFTF SA3 SEC SX6 X3+B1 DECREMENT COUNT SA6 A3 ZR X6,CHL5 IF OPERATION COMPLETE JP CHL6 TERMINATE PROCESSING EXTRACT EJECT *** EXTRACT (E) - EXTRACT LINES. * * ONE OR MORE LINES OF THE TEXT FILE ARE COPIED TO * THE STRING BUFFER (SCRATCH FILE SCR2) FOLLOWING THE LAST * ENTRY TO THE BUFFER. XTL5 SX0 0 RJ CST COUNT PHRASES SA2 LCTB RJ ATF ADVANCE TO LINE CONTAINING PHRASE SA1 NUM ZR X1,XTL5.1 IF SPECIFIED NUMBER FOUND RJ GSM SEND MESSAGE WITH PHRASE COUNT XTL5.1 SA4 STPHR2 CHECK FOR ELLIPSIS ZR X4,XTL6 IF NOT ELLIPSIS OPERATION SA1 LCTB COUNT TO NTH LINE CONTAINING /P1/ SA2 A1+B1 IX4 X2-X1 NUMBER LINES ACROSS ELLIPSIS XTL6 SX0 1 BX3 X3-X3 IX0 X0+X4 XTRACT BSS 0 SA2 EOFTF ZR X2,LTL11 IF POSITIONED AT EOI SX6 B0+ SA6 XTSB CLEAR BACKSPACE INDICATOR NZ X3,XTL5 IF STRING FIELDS PRESENT RJ PSB WRITEC B,LBUF COPY CURRENT LINE TO STRING BUFFER SA4 B+5 IX6 X4+X0 BUMP STRING BUFFER LINE COUNT SA6 A4 SX0 X0-1 ZR X0,XTL2 IF TRANSFER COMPLETE XTL1 READC X5,LBUF,LBUFL NZ X1,XTL4 IF EOF SB7 B6-LBUF SX0 X0-1 DECREMENT LINE COUNT WRITEW B,LBUF,B7 INTRPT XTL3 PROCESS TERMINAL INTERRUPT XTL2 NZ X0,XTL1 IF TRANSFER INCOMPLETE XTL3 WRITER B FLUSH BUFFER SX7 -1 SA7 XTSP JP LTL5 XTL4 CEPF XTL1,4 SA3 B+5 IX6 X3-X0 READJUST STRING BUFFER LINE COUNT SA6 A3 SX0 0 CLEAR LINE COUNT EQ XTL2 FIND EJECT *** FIND (F) - FIND LINES. * * LISTS THE NTH LINE OR THE NTH LINE(S) CONTAINING /PHRASE/. * THE SEARCH POINTER IS SET TO THE NTH LINE OR TO THE NTH * LINE CONTAINING /P1/. FIND BSS 0 SA1 EOFTF ZR X1,LTL11 IF POSITIONED AT EOI NZ X3,FDL2 IF STRING FIELDS PRESENT SX6 X0+ SA6 LCTB SET LINE ADVANCE RJ AFW ZR X7,FDL1 IF POSITIONED AT EOI WRITEC O,LBUF JP SET8 FDL1 WRITEC O,EFM ISSUE EOF MESSAGE JP SET7 FDL2 SX0 B0 BX1 X1-X1 RJ CST ASSURE SPECIFIED PHRASE EXISTS SA2 LCTB RJ AFW ADVANCE W/O SEARCH TO PROPER LINE SA0 STPHR2 WRITEC O,LBUF COPY LINE TO OUTPUT RJ CTI CHECK TERMINAL INTERRUPTS NZ X3,FDL6 IF INTERRUPTED SA4 A0 ZR X4,FDL6 IF NOT ELLIPSIS OPERATION BX1 X1-X1 SA2 STPHR1 SET POINTERS ABOUT /P1/ RJ SLS SA2 A0 CHECK LINE FOR PHRASE ENDING ELLIPSIS RJ SLS NZ B7,FDL4 IF NOT ONE LINE ELLIPSIS EQ FDL6 FDL3 SA4 PFADR SWITCH TO PRIMARY TEXT FILE SX5 X4+ FDL4 READC X5,LBUF,LBUFL NZ X1,FDL3 IF EOR RJ CTI CHECK TERMINAL INTERRUPTS NZ X3,FDL5 IF INTERRUPTED WRITEC O,LBUF BX1 X1-X1 SEARCH LINE FOR PHRASE ENDING ELLIPSIS SA2 A0 RJ SLS NZ B7,FDL4 IF PHRASE NOT FOUND FDL5 RJ RTF REPOSITION TEXT FILE FDL6 SA1 NUM RJ GSM JP SET8 LIST EJECT *** LIST (L) - LIST LINES. * * LISTS N LINES OR N GROUPS OF LINES CONTAINING /PHRASE/. LIST BSS 0 SA2 EOFTF ZR X2,LTL11 IF FILE AT EOI NZ X3,LTL6 IF STRING FIELDS PRESENT NZ X4,MAINX IF SYNTAX ERROR LTL1 SX0 X0-1 DECREMENT COUNTER WRITEC O,LBUF RJ CTI CHECK TERMINAL INTERRUPTS NZ X3,MAIN IF INTERRUPTED NZ X0,LTL3 IF MORE THAN ONE LINE TO BE LISTED EQ MAIN LTL2 SB7 B6-LBUF WRITEW O,LBUF,B7 RJ CTI CLEAR TERMINAL INTERRUPTS NZ X3,LTL5 IF INTERRUPTED SX0 X0-1 ZR X0,LTL5 IF LISTING COMPLETE LTL3 READC X5,LBUF,LBUFL ZR X1,LTL2 IF NOT END OF DATA CEPF LTL3,4 LTL4 WRITEC O,EFM LTL5 RJ RTF REPOSITION TEXT FILES JP MAIN LTL6 SX0 0 ZR X4,LTL7 IF NOT LOOKING FOR ELLIPSIS RJ CST COUNT ELLIPSI SA2 LCT RJ ATF ADVANCE WITHOUT SEARCH TO /P1/ LTL7 SX6 STPHR1 LOCATE /P1/ RJ SRO ZR X7,LTL4 IF STRING NOT FOUND SA4 STPHR2 SX0 1 ZR X4,LTL10 IF NOT LISTING ELLIPSIS LTL8 SA2 STPHR2 SEARCH FOR /P2/ RJ SLS ZR B7,LTL10 IF END OF ELLIPSIS FOUND WRITEC O,LBUF RJ CTI CHECK TERMINAL INTERRUPTS NZ X3,LTL5 IF INTERRUPTED LTL9 READC X5,LBUF,LBUFL ZR X1,LTL8 IF COPY COMPLETED SA4 PFADR BX5 X4 SWITCH TO PRIMARY TEXT FILE EQ LTL9 LTL10 WRITEC O,LBUF COPY LINE TO OUTPUT RJ CTI CHECK TERMINAL INTERRUPTS NZ X3,LTL5 IF INTERRUPTED SA3 SEC SX7 X3+B1 DECREMENT OPERATION COUNT SA7 A3 NZ X7,LTL7 IF NOT DONE EQ LTL5 LTL11 WRITEC O,EFM ISSUE EOF MESSAGE JP MAIN NUMBER EJECT *** NUMBER (N) - COUNT LINES. * * COUNTS LINES OR THE NUMBER OF LINES CONTAINING * /PHRASE/ FROM THE SEARCH POINTER TO END OF FILE. NUMBER BSS 0 SA2 EOFTF NZ X3,NRS1 IF STRING FIELDS SPECIFIED NRL1 ZR X2,LTL11 IF FILE AT EOI SX0 B0 BX2 X5 NRL2 INTRPT NRL3 PROCESS TERMINAL INTERRUPT SX0 X0-1 COUNT LINES READ READC X2,LBUF,LBUFL ZR X1,NRL2 IF NOT EOR SA2 PFADR BX1 -X0 SET COUNT FOR CONVERSION IX7 X2-X5 SX0 X0+B1 BX5 X2 NZ X7,NRL2 IF NOT PRIMARY EDIT FILE RJ CDD CONVERT LINE COUNT TO DISPLAY CODE SA6 NRLA RJ RTF REPOSITION FILES WRITEC O,NRLA JP MAIN NRL3 BX1 -X0 SET COUNT FOR CONVERSION RJ CDD SA6 NRLB RJ RTF REPOSITION FILES WRITEC O,NRLB JP MAIN NRLA DATA C* LINES TO EOF.* NRLB DATA C* LINES TO INTERRUPT.* ADDS TITLE STRING COMMAND PROCESSORS. *** ADDS (AS) - ADD STRINGS. * * A CHARACTER STRING IS ADDED TO THE TEXT FILE IMMEDIATELY * FOLLOWING EACH OF N OCCURENCES OF /P1/. ADDS BSS 0 ZR X3,ADD IF NO STRING FIELD SA2 ADSA EQ CHS1 PROCESS NEW TEXT ADSA SA1 LBW SAVE POINTER TO END OF STRING SA2 STPHR2 BLANKS EJECT *** BLANKS (BS) - BLANK STRINGS. * * EACH OF N OCCURRENCES OF /PHRASE/ ARE REPLACED WITH BLANKS. BLANKS BSS 0 SA2 EOFTF ZR X2,LTL11 IF EDIT FILE AT EOI ZR X3,BLL6 IF STRING FIELDS EMPTY RJ PSO BLS1 SA2 STPHR2 ELLIPSIS FIELD POINTER SA1 FBW ZR X2,BLS2 IF NOT ELLIPSIS OPERATION BX6 X1 SA6 A7+B1 NG X7,BLS4 IF /P1/ AT END OF LINE RJ SLS NZ B7,BLS4 IF NOT SINGLE LINE ELLIPSIS SA1 SLP BLS2 SA4 LBW RJ IBC REPLACE STRING WITH BLANKS SA3 SEC SX7 X3+B1 DECREMENT SPECIFICATOR COUNT SA7 A3 ZR X7,DLS7 IF PROCESSING COMPLETE INTRPT DLS7 PROCESS TERMINAL INTERRUPT SA1 LBW SX0 B1 NG X1,BLS3 IF PHRASE AT END OF LINE BX0 X0-X0 BLS3 SX6 STPHR1 SEARCH FILE FOR /P1/ RJ SFS NZ X7,BLS1 IF NOT EOF JP CHS14 BLS4 SA1 SLP RJ SLT SET LINE TERMINATOR SX2 A5 SX0 B1 DUMP LINE BUFFER WRITEC X2,LBUF SX6 STPHR2 READ/SEARCH FOR /P2/ RJ SRO SA4 X5+5 SX7 X4+B4 ADVANCE READ FILE LINE POSITION SA7 A4 EQ B2,B1,BLS6 IF END OF ELLIPSIS IN NEXT LINE SX0 B1-B2 SX2 A5 BLS5 WRITEC X2,TCHM WRITE BLANK LINES SX0 X0+1 NZ X0,BLS5 IF LINES NOT ALL WRITTEN BLS6 SX1 LBUF EQ BLS2 PROCESS LINE TERMINATING ELLIPSIS CHANGES EJECT *** CHANGES (CS) - CHANGE STRINGS. * * EACH OF N OCCURRENCES OF /PHRASE/ ARE DELETED FROM THE TEXT * FILE AND REPLACED WITH THE CHARACTER STRING ENTERED IN * RESPONSE TO THE REQUEST * ENTER TEXT.* CHANGES BSS 0 ZR X3,CHANGE IF NO STRING FIELDS SA2 CHSA CHS1 BX6 X2 STORE INSTRUCTIONS FOR CHANGES/ADDS SA6 CHS2 SA2 EOFTF CHECK FILE STATUS ZR X2,LTL11 IF POSITIONED AT EOI RJ PSO RJ ETX ZR X0,SET2 IF NO TEXT ENTERED SX7 B0+ SA7 STRB LX7 X2 BX6 -X0 SA7 RTFP SA6 LCT SAVE COUNT OF LINES ENTERED CHS2 SA1 FBW SA2 STPHR2 * SA1 LBW IF ADDS COMMAND * SA2 STPHR2 BX6 X1 SAVE POINTER TO START OF STRING NO SA6 SLP ZR X2,CHS3 IF NOT ELLIPSIS OPERATION RJ SLS ZR B7,CHS3 IF ELLIPSIS IN SINGLE LINE SX7 STRB+1 SX0 1 SA7 LBA CHANGE LINE BUFFER POINTER SX6 STPHR2 RJ SRO READ/SEARCH FOR PHRASE ENDING ELLIPSIS SA7 STRB SA3 X5+5 SA6 A6+B1 SX7 X3+B4 ADVANCE READ FILE LINE POSITION SA2 RTFP SA7 A3 SA0 X2 RESTORE REPLACEMENT FILE POINTER EQ CHS5 CHS3 SA3 LBW NG X3,CHS5 IF PHRASE AT END OF LINE SA4 LBL SX1 STRB+1 FIX POINTER TO START OF TEMPORARY BUFFER SX2 X3 SB3 X4+ END OF LINE ADDRESS BX7 X3-X2 SB2 X3 ADDRESS OF TEXT FOLLOWING STRING BX6 X7+X1 SA6 STRB SET POINTER TO TEXT IN TEMPORARY BUFFER CHS4 SA1 B2 BX6 X1 MOVE TEXT FOLLOWING STRING SB2 B2+B1 SA6 A6+B1 NE B2,B3,CHS4 IF MOVE INCOMPLETE SX7 A6+B1 SA7 A4+B1 SET END OF LINE FOR DATA MOVED CHS5 SB7 LBUFL SA3 SLP READC A0,X3+B1,B7 SA1 SLP SX7 B6 END OF FIRST REPLACEMENT LINE SX2 X1+B1 SA7 LBL SB6 LBUF+LBUFL-1 LWA DESTINATION BUFFER RJ CTL COMPRESS TEXT SA3 LCT SX0 X3+1 NZ X0,CHS6 IF MORE THAN ONE LINE REPLACEMENT FILE SA1 SLP PL X1,CHS10 IF NO TRUNCATION OF NEW TEXT OCCURRED EQ CHS11 ELIMINATE REMAINDER OF OLD LINE CHS6 SA1 SLP RJ SLT SET LINE TERMINATOR CHS7 WRITEC A5+,LBUF READC A0,LBUF,LBUFL SX0 X0+B1 NZ X0,CHS7 IF COPY INCOMPLETE SA2 B6-B1 MX1 -6 NZ X2,CHS8 IF EOL NOT ON WORD BOUNDARY SA3 A2-B1 SX4 A2-LBUF ZR X4,CHS9 IF BLANK LINE BX4 -X1*X3 NZ X4,CHS9 IF FULL WORD SA2 A3 CHS8 SX0 -10 CHS8.1 LX2 54 BX4 -X1*X2 ISOLATE CHARACTER SX0 X0+B1 ZR X4,CHS8.1 IF *00* CHARACTER LX0 24 POSITION CHARACTER POINTER CHS9 SX4 A2 IX7 X4-X0 FORM POINTER TO END OF TEXT SA7 SLP CHS10 SA2 STRB ZR X2,CHS11 IF NO DATA AFTER STRING/ELLIPSIS SA4 BAC SA1 SLP RJ BSP BACKSPACE POINTER SA3 TBL BX7 X3 ADDRESS ENDING DATA IN TEMPORARY BUFFER LX6 X1 SA7 LBL SA6 LBW SB6 LBUF+LBUFL-1 LWA DESTINATION BUFFER RJ CTL APPEND TEXT TO NEW LINE CHS11 SA3 SEC SX6 LBUF RESET BUFFER ADDRESS SX7 X3+B1 SA7 A3 OPERATION COUNT DECREMENTED SA6 LBA ZR X7,DLS6 IF PROCESSING COMPLETE INTRPT DLS6 PROCESS TEMINAL INTERRUPT SA3 A0+B1 SX6 X3 SET OUT = FIRST SA4 TBST SA6 A0+3 ZR X4,CHS12 IF ALL TEXT IN BUFFER REWIND A0+ READ X2 CHS12 BX7 X7-X7 SA3 STRB SX1 B1 ZR X3,CHS13 IF REPLACEMENT DATA ENDED LINE SA7 STRB CHS13 SX6 STPHR1 LOOK FOR NEXT OCCURANCE OF /P1/ RJ SML SA4 RTFP SA0 X4+ CHS14 NZ X7,CHS2 IF STRING FOUND SA2 SEC SA7 EOFTF SA3 A2-B1 GET NUMBER OPERATIONS COMPLETED IX1 X3+X2 RJ GSM ISSUE DIAGNOSTIC JP SET2 CHSA SA1 FBW SAVE POINTER TO START OF STRING SA2 STPHR2 DELETES EJECT *** DELETES (DS) - DELETE STRINGS. * * N OCCURRENCES OF /PHRASE/ ARE DELETED FROM THE TEXT FILE. * DATA FOLLOWING /PHRASE/ WITHIN A LINE IS SHIFTED LEFT. DLETES BSS 0 SA2 EOFTF ZR X2,LTL11 IF FILE AT EOI ZR X3,DLL3 IF NOT STRING OPERATION RJ PSO DLS1 SA1 FBW SA2 STPHR2 ZR X2,DLS2 IF ELLIPSIS NOT SPECIFIED BX6 X1 SA6 SLP RJ SLS SEARCH CURRENT LINE FOR /P2/ SA1 SLP NZ B7,DLS4 IF NOT SINGLE LINE ELLIPSIS DLS2 SA2 LBW MX6 1 BX6 X6*X2 BX6 X1+X6 SA6 A2 SB6 B0+ RJ CTL COMPRESS TEXT LEFT SA1 LBUF NZ X1,DLS3 IF NOT EMPTY LINE SX2 -1 RJ ATF ADVANCE TEXT FILE SX1 B0+ SET FLAG FOR EMPTY LINE DLS3 SA3 SEC SX7 X3+B1 DECREMENT SPECIFICATOR COUNT SA7 A3 ZR X7,DLS6 IF PROCESSING COMPLETE INTRPT DLS6 PROCESS TERMINAL INTERRUPT SX6 STPHR1 SEARCH FILE FOR /P1/ RJ SML NZ X7,DLS1 IF PHRASE FOUND JP CHS14 DLS4 SX4 LBUF BX7 X1-X4 SX0 B1 ZR X7,DLS5 IF ELLIPSIS STARTED LINE RJ SLT WRITEC A5,LBUF DUMP LINE BUFFER DLS5 SX6 STPHR2 RJ SRO READ/SEARCH FOR /P2/ SA4 X5+5 SX1 LBUF SX7 X4+B4 ADVANCE READ FILE LINE POSITION SA7 A4 EQ DLS2 PROCESS END OF MULTI-LINE ELLIPSIS DLS6 SA1 SLP RJ SLT SET LINE TERMINATOR DLS7 SA4 STPHR2 ZR X4,SET2 IF STRING OPERATION COMPLETE SA1 NUM RJ GSM ISSUE MESSAGE JP SET2 EXTRACTS EJECT *** EXTRACTS (ES) - EXTRACT STRINGS. * * THE NTH OCCURRENCE OF /PHRASE/ IS COPIED TO THE * STRING BUFFER FILE (SCR2) FOLLOWING THE LAST ENTRY. XTRACTS BSS 0 ZR X3,XTRACT IF NO STRING FIELDS SA2 EOFTF NZ X4,XTS8 IF ELLIPSIS SPECIFIED BX0 X0-X0 SX6 A3 ZR X2,LTL11 IF POSITIONED AT EOF RJ SRO ZR X7,CST1 IF EOI SX6 LBUF-1 XTS1 SA6 SLP RJ PSB SA3 STPHR2 SA1 LBW NZ X3,XTS2 IF ELLIPSIS OPERATION RJ SBT SET BLANK TERMINATOR SX6 B6+ SA6 XTSB XTS2 SA2 A1-B1 SA1 A1+B1 SB6 B0+ RJ CTL SA1 SLP RJ SLT SET LINE TERMINATOR SA1 XTSB SX6 B6+X1 SA6 A1 SAVE NUMBER OF BLANKS ADDED WRITEC B,LBUF-1 COPY PHRASE TO STRING BUFFER SX6 1R RESTORE NON-ZERO WORD PAD BEFORE LBUF SA6 LBUF-1 SA4 STPHR2 NZ X4,XTS4 IF ELLIPSIS SPECIFIED SX0 1 SA1 LBW NG X1,XTS3 IF STRING AT END OF LINE SA1 SLP SX4 B1 RJ BSP BACKSPACE POINTER XTS3 AX1 24 BX6 X1 SA6 XTSP SAVE POSITION+1 OF LAST CHARACTER SA4 B+5 IX7 X0+X4 ADVANCE STRING FILE LINE COUNT SA7 A4 WRITER X2 FLUSH STRING BUFFER RJ RTF JP MAIN XTS4 SX2 1 RJ ATF NEXT LINE TO WORKING STORAGE SA3 LCTB SA2 A3+B1 IX0 X2-X3 NUMBER LINES TO END OF ELLIPSIS XTS5 SX0 X0-1 ZR X0,XTS7 IF LAST LINE READ SB7 B6-LBUF WRITEW B,LBUF,B7 COPY LINE TO STRING BUFFER XTS6 READC X5,LBUF,LBUFL ZR X1,XTS5 IF NOT EOR SA4 PFADR BX5 X4 SWITCH TO PRIMARY TEXT FILE EQ XTS6 XTS7 SA2 STPHR2 RJ SLS LOCATE /P2/ SA3 LCTB SA2 A3+B1 LINE COUNT TO END OF ELLIPSIS IX0 X2-X3 SX0 X0+B1 NUMBER LINES ACROSS ELLIPSIS BX1 X7 RJ SBT SET BLANK TERMINATOR SX6 B6+ SA6 XTSB RJ SLT SET END OF LINE SA1 XTSB SX6 B6+X1 SA6 A1 SAVE NUMBER OF BLANKS ADDED WRITEC B,LBUF SA1 LBW EQ XTS3 COMPLETE PROCESSING XTS8 SX0 0 RJ CST ASSURE ELLIPSIS EXISTS SA3 NUM ZR X3,XTS10 IF SPECIFIED ELLIPSIS EXISTS JP NRS2 XTS9 SX6 STPHR2 FIND PHRASE ENDING ELLIPSIS RJ SRO XTS10 SX6 STPHR1 LOCATE START OF ELLIPSIS RJ SRO SA3 SEC SX6 X3+B1 DECREMENT COUNT SA6 A3 NZ X6,XTS9 IF SPECIFIED ELLIPSIS NOT REACHED SA2 STPHR2 SA4 A7-B1 BX0 X4 CHECK - ONE LINE ELLIPSIS RJ SLS NZ B7,XTS11 IF MULTI-LINE ELLIPSIS BX6 X0 SX7 B0 SA6 FBW RESTORE POINTER TO START OF ELLIPSIS SA7 STPHR2 XTS11 SX6 LBUF-1 EQ XTS1 XTSB CON 0 NUMBER OF POSITIONS TO BACKSPACE XTSP BSS 1 FINDS EJECT *** FINDS (FS) - FIND STRING. * * LISTS THE NTH OCCURRENCE OF /PHRASE/ AND SETS THE SEARCH * POINTER TO THAT LINE. IF /PHRASE/ IS MULTI-LINE, THE SEARCH * POINTER IS SET TO THE LINE CONTAINING /P1/. FINDS BSS 0 ZR X3,FIND IF STRING FIELDS EMPTY SA2 EOFTF SX0 0 ZR X2,LTL11 IF EDIT FILE AT EOI RJ CST ASSURE SPECIFICATION EXISTS SA2 LCT RJ AFW FAST ADVANCE TO LINE CONTAINING /P1/ EQ FDS2 FDS1 SA4 STPHR2 CHECK ELLIPSIS SPECIFIED BX0 X0-X0 SX6 A4 ZR X4,FDS2 IF NOT ELLIPSIS OPERATION RJ SFS LOCATE PHRASE ENDING ELLIPSIS FDS2 SX6 STPHR1 RJ SFS ADVANCE FILE TO LINE CONTAINING /P1/ SA3 SEC SX7 X3+B1 ADVANCE OPERATION COUNT SA7 A3 INTRPT FDS3 PROCESS TEMINAL INTERRUPT SA3 SEC CHECK OPERATION COUNT NZ X3,FDS1 IF LAST OCCURANCE NOT REACHED FDS3 SB2 LBUF SA4 LBL GET END OF LINE ADDRESS SB3 TBUF-LBUF SA1 FBW RESET DESTROYED REGISTER SX2 B3 SB5 X4 IX6 X1+X2 SX7 B2+B3 POINT WORKING STORAGE AT TEMPORARY BUFFER SA6 A1+B1 SA7 LBA SET WORKING STORAGE FOR SEARCH ROUTINES FDS4 SA3 B2 SB2 B2+B1 BX6 X3 MOVE LINE TO TEMPORARY BUFFER SA6 A3+B3 NE B2,B5,FDS4 IF MOVE NOT COMPLETE SX7 A6+B1 SET TBUF END-OF-LINE POINTER BX6 X4 SAVE LBUF END-OF-LINE POINTER SA7 A4 SA6 A7+B1 SA2 STPHR1 RJ SLS SX1 TBUF BX4 X6 INSERT LEADING BLANKS FOR OUTPUT RJ IBC SA1 TBL RESTORE LBUF END-OF-LINE POINTER BX6 X1 SA6 A1-B1 SA2 STPHR2 POINTER TO /P2/ ZR X2,FDS9 IF NOT ELLIPSIS OPERATION RJ SLS FDS5 ZR B7,FDS9 IF ONE LINE ELLIPSIS RJ CTI CHECK TERMINAL INTERRUPTS NZ X3,FDS8 IF INTERRUPTED WRITEC O,TBUF FDS6 READC X5,TBUF,LBUFL ZR X1,FDS7 IF NOT EOR SA4 PFADR BX5 X4 SWITCH TO PRIMARY TEXT FILE EQ FDS6 FDS7 SA2 STPHR2 LOCATE PHRASE ENDING ELLIPSIS RJ SLS NZ B7,FDS5 IF PHRASE NOT FOUND FDS8 RJ RTF REPOSITION TEXT FILE FDS9 SA1 LBW SET END OF LINE SA2 LBL RJ SLT BX6 X2 SA6 A2 WRITEC O,TBUF COPY LINE TO OUTPUT SX7 LBUF SA7 LBA RESTORE NORMAL WORKING STORAGE AREA JP FDL6 INSERTS EJECT *** INSERTS (IS) - INSERT STRING. * * SAME AS ADDS EXCEPT THAT NEW DATA IS FOUND IN /P2/. INSERTS BSS 0 ZR X4,MAINX IF REPLACEMENT STRING EMPTY SA2 INSA JP RPS1 INSA BX2 X7 SB6 10 SA4 X2 FIRST WORD OF PHRASE LISTS EJECT *** LISTS (LS) - LIST STRINGS. * * ONE OR MORE OCCURRENCES OF /PHRASE/ IS LISTED. LISTS BSS 0 SA2 EOFTF ZR X2,LTL11 IF POSITIONED AT EOI ZR X3,LTL1 IF NOT STRING OPERATION SX0 0 ZR X4,LTS1 IF ELLIPSIS SEARCH NOT REQUIRED RJ CST SA2 LCT FAST ADVANCE TO START OF ELLIPSIS RJ ATF LTS1 SX6 STPHR1 SEARCH FOR /P1/ RJ SRO ZR X7,LTL4 IF EOI SX1 LBUF SA4 FBW INSERT LEADING BLANKS RJ IBC LTS2 SA1 STPHR2 NZ X1,LTS7 IF LOOKING FOR ELLIPSIS LTS3 SA1 SEC SX6 X1+B1 DECREMENT SPECIFICATOR COUNT SA6 A1 ZR X6,LTS4 IF OPERATION COMPLETE RJ CTI CHECK TERMINAL INTERRUPTS NZ X3,LTS9 IF INTERRUPTED SA3 LBW NG X3,LTS6 IF PHRASE AT EOL BX7 X3 SAVE -END OF STRING- POINTER SA7 A3+B1 SA2 STPHR1 SCAN LINE FOR ANOTHER OCCURRENCE RJ SLS NZ B7,LTS5 IF STRING NOT IN LINE SA1 SLP SA4 FBW RJ IBC BLANK BETWEEN STRINGS EQ LTS2 LTS4 SA1 LBW RJ SLT SET LINE TERMINATOR WRITEC O,LBUF EQ LTS9 COMPLETE PROCESSING LTS5 SA1 SLP SET END OF LINE RJ SLT LTS6 RJ CTI CHECK TERMINAL INTERRUPTS NZ X3,LTS9 IF INTERRUPTED WRITEC O,LBUF COPY LINE TO OUTPUT SX0 1 EQ LTS1 CONTINUE PROCESSING LTS7 SA2 STPHR2 SEARCH FOR PHRASE ENDING ELLIPSIS RJ SLS ZR B7,LTS3 IF ELLIPSIS FOUND RJ CTI CHECK TERMINAL INTERRUPTS NZ X3,LTS9 IF INTERRUPTED WRITEC O,LBUF LTS8 READC X5,LBUF,LBUFL SX7 B6 SAVE END OF LINE POINTER SA7 LBL ZR X1,LTS7 IF NOT EOR SA4 PFADR BX5 X4 SWITCH TO PRIMARY FILE EQ LTS8 LTS9 RJ RTF REPOSITION TEXT FILE JP MAIN NUMBERS EJECT *** NUMBERS (NS) - COUNT STRINGS. * * COUNTS THE OCCURRENCES OF /PHRASE/ FROM THE SEARCH POINTER * TO END OF FILE. NUMBERS BSS 0 SA2 EOFTF ZR X3,NRL1 IF NO STRING FIELDS NRS1 ZR X2,LTL11 IF POSITIONED AT EOF SX6 -377776B BX7 -X6 SA6 SEC FORCE SEARCH LIMIT HIGH BX0 X0-X0 SA7 NUM RJ CST COUNT STRINGS NRS2 SA1 NUM RJ GSM SEND MESSAGE WITH PHRASE COUNT JP MAIN REPLACES EJECT *** REPLACES (RS) - REPLACE STRINGS. * * SAME AS CHANGES EXCEPT THAT REPLACEMENT DATA IS TAKEN * FROM /P2/. RPLACES BSS 0 SA2 RPSA RPS1 ZR X3,MAINX IF STRING TO BE REPLACED NOT SPECIFIED ZR X4,DLETES IF REPLACEMENT STRING EMPTY BX7 X2 SX0 0 SELECT SEARCH BEFORE WRITE/READ SA2 EOFTF SA7 RPS4 ZR X2,LTL11 IF POSITIONED AT EOI SX6 STPHR1 SEARCH FILE FOR STRING RJ SFS RPS2 ZR X7,RPS11 IF EOI NG X7,RPS4 IF PHRASE AT END OF LINE SX3 TBUF-LBUF SA4 LBL GET END OF LINE POINTER SB2 X7 IX6 X7+X3 FORM END OF PHRASE POINTER SB3 X4 SA6 A7+B1 RPS3 SA1 B2 MOVE TEXT FOLLOWING PHRASE BX6 X1 SA6 X3+B2 TO TEMPORARY LOCATION SB2 B2+B1 NE B2,B3,RPS3 IF MOVE NOT DONE SX6 A6+B1 SA6 A4 RESET END OF LINE ADDRESS RPS4 SA2 A7-B1 SA4 X2 FIRST WORD OF PHRASE SB6 10 * BX2 X7 * SB6 10 IF ENTRY FROM INSERTS * SA4 X2 AX2 24 POSITION CHARACTER POINTER SB3 A4 SA3 X2+TCHM MASK FOR DATA PRECEDING PHRASE CX1 X3 SB5 X2 BX6 X3*X4 ISOLATE LEADER SB4 X1 SA3 STPHR2 POINTER TO REPLACEMENT PHRASE SA2 X3-1 AX3 24 POSITION CHARACTER COUNT SX4 B1 SB7 X3 LX6 B4,X6 RPS5 SX3 B3-LBUF-LBUFL+1 NZ X3,RPS6 IF NOT AT LWA BUFFER SB6 7 SX4 B0+ GE B5,B6,RPS7 IF BUFFER COMPLETELY FULL SX4 B1+ RPS6 ZR B7,RPS7 IF REPLACEMENT COMPLETE LX6 6 SA2 A2+B1 GET NEXT ELEMENT SB5 B5+1 BX6 X6+X2 ASSEMBLE WORD SB7 B7-B1 LT B5,B6,RPS6 IF WORD NOT COMPLETE SX4 B6-7 ZR X4,RPS7 IF AT BUFFER LIMIT SA6 B3 SB5 B0 BX6 X6-X6 CLEAR ASSEMBLY REGISTER SB3 B3+B1 NZ B7,RPS5 IF REPLACEMENT NOT COMPLETE RPS7 SX1 B5+ CHARACTER POINTER TO END OF NEW STRING SB6 10 LX1 24 ZR B5,RPS8 IF NEW STRING FILLED WORD + LX6 6 SB5 B5+B1 LEFT JUSTIFY WORD ENDING PHRASE NE B5,B6,* RPS8 SA6 B3 SX3 A6 BX0 X0-X0 BX7 X1+X3 SA2 SLP POINTER TO TEXT IN TEMPORARY BUFFER SA3 LBW POINTER TO END OF OLD PHRASE BX1 X7 MX6 1 NG X3,RPS9 IF NO DATA FOLLOWING ORIGINAL PHRASE NZ X4,RPS10 IF NOT AT BUFFER LIMIT RPS9 SX0 B1 BX2 X6*X3 BX7 X2+X7 BX2 X3 RPS10 SA7 A3 SET POINTER TO END OF NEW STRING SB6 LBUF+LBUFL-1 RJ CTL APPEND TEXT FOLLOWING PHRASE TO LINE SA1 SEC SX7 X1+B1 DECREMENT COUNTER SA7 A1 ZR X7,RPS12 IF OPERATION COMPLETE INTRPT RPS11 PROCESS TERMINAL INTERRUPTS SX6 STPHR1 RJ SML SEARCH MODIFIED LINE EQ RPS2 RPS11 SA3 SEC SA4 A3-B1 GET NUMBER SUCCESSFUL OPERATIONS IX1 X4+X3 ZR X1,PSO2 IF NONE COMPLETED RJ GSM JP SET2 REPOSITION FILES RPS12 SA1 SLP SET LINE TERMINATOR RJ SLT JP SET2 REPOSITION FILES RPSA SA2 A7-B1 SA4 X2 FIRST WORD OF PHRASE SB6 10 ALIGN TITLE AUXILIARY COMMAND PROCESSORS. *** ALIGN (AL) - ALIGN DATA. * * ELIMINATES UNWANTED BLANKS ON THE TEXT FILE. DATA IS LINED * UP BY WORD, SENTENCE, AND PARAGRAPH. ALIGN BSS 0 SA2 EOFTF ZR X2,LTL11 IF POSITIONED AT EOI SA2 AFLI NZ X2,ALN1 IF ALIGN FIELD LENGTH ALREADY SET MEMORY CM,AFLI,R,ALFL SA3 STPHR1 SA4 STPHR2 ALN1 ZR X3,ALN2 IF NO STRING FIELDS RJ PSO ALN2 SA3 SEC BX6 -X3 SA6 A3+B1 INITIAL COUNT FOR INTERRUPT PROCESSING ALN3 SA2 STPHR2 SX7 B0 SX1 B1 ZR X2,ALN4 IF NOT ELLIPSIS OPERATION RJ SLS SEARCH FOR /P2/ IN SAME LINE AS /P1/ SX7 B1 NZ B7,ALN4 IF NOT ONE LINE ELLIPSIS BX7 X7-X7 ALN4 SA7 SLP MULTI-LINE ELLIPSIS INDICATOR ALN5 SA3 WDTH NEW LINE WIDTH SX1 STRA FWA NEW LINE BUFFER IX3 X1+X3 MAXIMUM LWA NEW LINE LX1 18 BX0 X1+X3 ALN6 SA3 LBUF SX7 1R SB2 A3+ SB6 USBBL RJ USB UNPACK OLD LINE TO STRING BUFFER SB4 X0 MAXIMUM LWA NEW LINE AX0 18 SB5 X0+ CURRENT ADDRESS IN NEW LINE SA0 B6+ FWA NEXT WORD IN OLD LINE SA1 B6 FIRST CHARACTER IN OLD LINE AX0 18 LWA+1 OF LAST COMPLETE WORD IN NEW LINE NZ X3,ALN7 IF NOT ZERO WORD PL X3,ALN14 IF BLANK LINE ALN7 SA2 ASC ASCII INDICATOR IX3 X1-X7 NZ X3,ALN9 IF NOT BLANK CHARACTER SB6 B6+B1 MX4 4 SB5 B5+5 SA7 B5-B1 INITIALIZE INDENTATION + LX4 1 SA7 A7-B1 INDENT NEW LINE NG X4,* ALN8 GT B6,B7,ALN14 IF END OF OLD LINE SA1 B6 IX3 X1-X7 SB6 B6+B1 ZR X3,ALN8 IF BLANK CHARACTER SB6 B6-B1 ALN9 GT B6,B7,ALN15 IF END OF OLD LINE SA1 B6+ IX3 X1-X7 SB6 B6+B1 BX6 X1 TRANSFER CURRENT CHARACTER TO NEW LINE SA6 B5 SB5 B5+B1 ZR X2,ALN11 IF NO ESCAPE CODE SET IX4 X2+X6 ZR X4,ALN10 IF ESCAPE CODE 76 SX4 X4-74B+76B ALN10 NZ X4,ALN11 IF NO ESCAPE CODE SB4 B4+1 ALN11 GE B5,B4,ALN13 IF NEW LINE WIDTH REACHED NZ X3,ALN9 IF NOT BLANK CHARACTER SA4 A6-B1 LAST NON-BLANK CHARACTER SX0 B5 LWA+1 OF LAST COMPLETE WORD IN NEW LINE SX6 X4-1R. SX3 B1 SA0 B6 FWA NEXT WORD IN OLD LINE ZR X6,ALN12 IF PERIOD ENDING SENTENCE SX6 X4-1R? NZ X6,ALN8 IF NOT QUESTION MARK ALN12 SA7 B5 SB5 B5+B1 LT B5,B4,ALN8 IF NEW LINE WIDTH NOT REACHED * NEW LINE WIDTH REACHED. ALN13 RJ WNL WRITE NEW LINE SX7 1R SA2 ASC ASCII INDICATOR SA1 USBC BX0 X0-X0 SB7 X1 LWA OLD LINE EQ ALN8 * END OF OLD LINE REACHED. ALN14 NZ X0,ALN15 IF NOT BLANK LINE SB2 A0-USBB NZ B2,ALN15 IF NOT BLANK LINE SA7 STRA WRITEC A5,BLKL WRITE BLANK LINE SB4 STRA SB5 B4+1 ALN15 SA4 SLP NZ X4,ALN18 IF WORKING WITH MULTI-LINE ELLIPSIS SA3 SEC SX7 X3+B1 DECREMENT SEARCH COUNT SA7 A3 ZR X7,ALN27 IF ALIGNMENT COMPLETE INTRPT ALN27 PROCESS TERMINAL INTERRUPT SA1 STPHR1 ZR X1,ALN18 IF SEARCH FOR PHRASE NOT REQUIRED SX3 B0+ RJ WNL WRITE ENTIRE NEW LINE ALN16 READC X5,LBUF,LBUFL ZR X1,ALN17 IF NOT EOR CEPF ALN16,4 SA7 EOFTF SET FILE STATUS EQ ALN28 ALN17 SA4 X5+5 SX6 B6 LWA+1 PACKED LINE SX7 X4+B1 ADVANCE READ FILE LINE POSITION BX0 X0-X0 SA6 LBL SA7 A4 SX6 STPHR1 SEARCH FILE FOR /P1/ SX1 B0+ RJ SFS ZR X7,ALN28 IF PHRASE NOT FOUND EQ ALN3 ALN18 SX4 B5 SX1 B4 LX4 18 BX0 X4+X1 ALN19 READC X5,LBUF,LBUFL ZR X1,ALN20 IF NOT EOR CEPF ALN19,4 SA7 EOFTF AX0 18 SB5 X0 CURRENT CHARACTER ADDRESS IN NEW LINE BX3 X3-X3 RJ WNL WRITE ENTIRE NEW LINE EQ ALN28 ALN20 SA4 X5+5 SX6 B6 LWA+1 PACKED LINE SX7 X4+B1 ADVANCE READ FILE LINE POSITION SA6 LBL SA2 STPHR2 SA7 A4 ZR X2,ALN21 IF NOT ELLIPSIS OPERATION SX1 B0 RJ SLS NZ B7,ALN21 IF NOT ONE LINE ELLIPSIS SX6 B0+ SA6 SLP CLEAR MULTI-LINE ELLIPSIS FLAG ALN21 SB4 X0 LWA+1 NEW LINE SX7 1R AX0 18 SA1 LBUF FIRST PACKED WORD OF NEXT OLD LINE SB5 X0+ CURRENT CHARACTER ADDRESS IN NEW LINE MX2 -6 LX1 6 BX2 -X2*X1 FIRST CHARACTER OF NEXT OLD LINE IX3 X2-X7 ZR X3,ALN26 IF NEW PARAGRAPH NZ X1,ALN22 IF NOT ZERO WORD PL X1,ALN26 IF BLANK LINE ALN22 SA1 B5-B1 LAST CHARACTER IN NEW LINE IX3 X1-X7 ZR X3,ALN24 IF LAST CHARACTER IN NEW LINE BLANK SA7 B5 INSERT BLANK SB5 B5+B1 GT B5,B4,ALN26 IF END OF NEW LINE REACHED SX3 X1-1R. ZR X3,ALN23 IF LAST CHARACTER IN NEW LINE IS PERIOD SX3 X1-1R? NZ X3,ALN24 IF LAST CHARACTER NOT QUESTION MARK ALN23 SA7 B5 INSERT BLANK SB5 B5+B1 GT B5,B4,ALN26 IF END OF NEW LINE REACHED ALN24 SA1 STRA FIRST CHARACTER IN NEW LINE IX4 X1-X7 SB2 A1 NZ X4,ALN25 IF FIRST CHARACTER IN NEW LINE NOT BLANK SB2 B2+5 ALN25 LE B5,B2,ALN5 IF NEW LINE ALREADY FLUSHED SX4 B5 SX3 B4 LX4 18 BX0 X3+X4 LX4 18 BX0 X0+X4 EQ ALN6 ALN26 BX3 X3-X3 RJ WNL WRITE NEW LINE EQ ALN5 * ALIGNMENT COMPLETION PROCESSING. ALN27 BX3 X3-X3 RJ WNL WRITE ENTIRE NEW LINE SX2 -B1 GET NEXT LINE RJ ATF ADVANCE TEXT FILES ALN28 SA1 STPHR1 ZR X1,SET2 IF NO STRING FIELDS SA1 ICT SA2 SEC SA3 NUM SA4 STPHR2 IX1 X1+X2 ZR X4,ALN29 IF NOT ELLIPSIS IX2 X2+X3 ALN29 ZR X2,SET2 IF ALL OCCURANCES FOUND AND PROCESSED RJ GSM GENERATE OCCURANCES MESSAGE JP SET2 REPOSITION TEXT FILES CLEAR EJECT *** CLEAR (CL) - CLEARS THE STRING BUFFER. * * RETURNS THE STRING BUFFER FILE (SCR2). CLEAR BSS 0 EVICT B,R RETURN STRING FILE SPACE SA3 X2+B1 SX7 X3+ SET IN = OUT = FIRST BX6 X6-X6 SA7 A3+B1 SA6 B+5 CLEAR LINE COUNT SA7 A7+B1 JP MAIN DEFTAB EJECT *** DEFTAB (DT) - DEFINE TAB CHARACTER. * * IDENTIFIES A TAB CHARACTER TO BE USED WHEN STRUCTURING * LINES FROM DATA PASSED IN RESPONSE TO * ENTER TEXT.* DEFTAB BSS 0 MX7 1 ZR X3,DFT1 IF TAB CHARACTER DEFINITION TO BE CLEARED SA1 X3 AX3 24 POSITION CHARACTER COUNT SB2 X3 NE B2,B1,MAINX IF MORE THAN ONE CHARACTER BX7 X1 DFT1 SA7 TABCH JP MAIN LENGTH EJECT *** LENGTH - TRUNCATE TEXT FILE. * * LIMITS THE NUMBER OF LINES TO BE PROCESSED ON THE TEXT FILE. * LINE LIMIT IS SPECIFIED BY N. ORIGINAL PROCESSING BOUNDARIES * ARE RESTORED IF N = *. LENGTH BSS 0 SB5 X0-377776B ZR B5,LEN5 IF NUMERIC FIELD * SA4 X5+5 SA3 EOFTF CHECK FILE STATUS IX2 X0-X4 NG X2,LEN1 IF EDIT FILE BEYOND LINE OF INTEREST SA1 TFLEN CHECK CURRENT FILE LENGTH IX4 X0-X1 CHECK FOR PROPER TRUNCATION PL X4,LEN8 IF IMPROPER TRUNCATION BX6 X0 SAVE NEW LENGTH SA6 A1 ZR X3,MAIN IF POSITIONED AT EOI LEN1 SA1 CTO ZR X1,MAIN IF TABLE FULL SB4 X1+ SX6 B4-B1 RESET INDEX SX7 A1+B4 SA6 CTO SA7 T+6 LEN2 NG X2,LEN4 IF FILE BEYOND LINE OF INTEREST RJ AFW ZR X7,RESET IF ADVANCE WENT TO EOI SA0 T WRITEC A5+,LBUF COPY LAST LINE OF ABBREVIATED TEXT FILE LEN3 READW X5,LBUF,CBUFL SX2 A0 SCRATCH FILE FET ADDRESS BX0 X1 SB7 B6-LBUF SET NUMBER WORDS TO WRITE WRITEW X2,LBUF,B7 ZR X0,LEN3 IF NOT EOR CEPF LEN3,4 SA7 EOFTF SET FILE STATUS SA7 SVLC WRITER X2 FLUSH BUFFER JP SET2 LEN4 SA0 X0 SAVE LINE ADVANCE RJ CPY REWIND FILES SX2 A0-B1 RESTORE CORRECT LINE ADVANCE SX7 B1 INSURE ADVANCE TO EOI NOT DEFAULT EQ LEN2 LEN5 SA1 CTO SX6 NLR IX4 X1-X6 ZR X4,MAIN IF NO DATA ON FILE SB4 X1+B1 SX7 A1+B4 SA6 A1 SA3 EOFTF CHECK FILE STATUS SA7 T+5 ZR X3,LEN6 IF POSITIONED AT EOI SX2 377776B RJ AFW ADVANCE TO EOI LEN6 READLS T RECALL A5 LEN7 READW T,LBUF,CBUFL SB7 B6-LBUF NUMBER OF WORDS TO WRITE BX0 X1 SX2 A5 WRITE FILE FET ADDRESS WRITEW X2,LBUF,B7 ZR X0,LEN7 IF NOT END OF RECORD EVICT T RETURN LENGTH FILE SPACE SX7 0 SA7 SVLC RESET SEARCH POINTER JP SET2 LEN8 WRITEC O,(=C* IMPROPER TRUNCATION.*) JP MAIN CTO CON NLR BSS NLR CON 0 LINE EJECT *** LINE (LN) - LIST LINE NUMBER. * * INDICATE LINE NUMBER ASSOCIATED WITH SEARCH POINTER. LINE BSS 0 SA2 SVLC SX0 1L.&3L SA5 EOFTF SX1 X2+B1 RJ CDD CONVERT LINE NUMBER LX6 18 ZR X5,LIN1 IF LAST LINE ON FILE BX6 X6-X0 LIN1 SA6 LNMA SET NUMBER IN MESSAGE WRITEC O,LNM JP MAIN LNM DATA 20H FILE AT LINE NUMBER LNMA BSS 1 EFM DATA C* -END OF FILE-* LISTAB EJECT *** LISTAB (LT) - LIST TAB STOPS. LISTAB BSS 0 SA1 TTBL FIRST TAB COLUMN SA0 TSM+1 LTB1 ZR X1,LTB3 IF NO TAB STOPS RJ CDD MX0 30 BX5 -X0*X6 SA1 A1+B1 READ NEXT TAB COLUMN LX5 30 ZR X1,LTB2 IF END OF TABLE RJ CDD BX6 -X0*X6 BX7 X5+X6 SA1 A1+B1 SA7 A0 STORE CONVERTED VALUES IN MESSAGE BX5 X5-X5 SA0 A0+B1 NZ X1,LTB1 IF NOT END OF TABLE LTB2 BX7 X5 SA7 A0 WRITEC O,TSM LIST TAB STOPS JP MAIN LTB3 SA5 LTBA EQ LTB2 LTBA DATA L* NONE.* TSM DATA 10H TAB STOPS BSS TTBLL/2+1 MERGE EJECT *** MERGE (M) - MERGE FILES. * * MERGES A SECONDARY FILE INTO THE FILE BEING EDITED. THE * SECONDARY FILE NAME IS PASSED IN /P1/. IF MERGING IS * RELATIVE TO A SPECIFIC CHARACTER STRING, THE STRING OF * INTEREST IS GIVEN IN /P2/. MERGING OCCURS AFTER THE NTH * LINE OR AFTER THE NTH LINE CONTAINING /P2/. MERGE BSS 0 ZR X3,MAINX IF MERGE FILE NAME NOT GIVEN SB2 X3-1 AX3 24 POSITION CHARACTER COUNT SB5 60 BX6 X6-X6 CLEAR ACCUMULATOR SB6 X3+B2 MRG1 RJ ANC ASSEMBLE NEXT CHARACTER ZR X4,MRG10 IF NOT ALPHANUMERIC CHARACTER SX1 X4-1R+ PL X1,MRG10 IF NOT ALPHANUMERIC CHARACTER SX1 X3-74B ZR X1,MRG10 IF 74B ESCAPE CODE LX6 6 BX6 X6+X4 ADD CHARACTER TO ACCUMULATOR SB5 B5-6 LT B2,B6,MRG1 IF DELIMITER NOT REACHED LX4 B5,X6 MX7 -18 SA3 B0 CLEAR FET ADDRESS BX3 -X7*X4 NZ X3,MRG10 IF NAME > 7 CHARACTERS RJ CRN ZR X7,MRG10.1 IF FILE NAME RESERVED RETURN M,R SX1 B1 BUSY FLAG OFF BX6 X4+X1 MX3 5 SA6 X2 SET FILE NAME IN FET STATUS X2 LX3 5+1 SA1 X2 BX7 X3*X1 EXTRACT STATUS FIELD LX3 9 NZ X7,MRG3 IF FILE LOCAL GET X2 SA4 X2 BX7 X3*X4 ZR X7,MRG4 IF PERMANENT FILE MRG2 WRITEC O,(=C* MERGE ERROR, SECONDARY FILE EMPTY.*) SB4 MAIN SET TRANSFER EQ MRG9 MRG3 REWIND X2 MRG4 READ X2 INITIATE READ ON MERGE FILE READC X2,TBUF,LBUFL NZ X1,MRG2 IF MERGE FILE EMPTY SA4 STPHR2 ZR X4,MRG6 IF NO STRING FIELD SA2 EOFTF SX0 0 ZR X2,LTL11 IF EDIT FILE AT EOI SA1 NUM SX6 X1-377776B NZ X6,MRG5 IF NOT ASTERISK SA1 STPHR2 SET UP STRING POINTERS BX6 X1 SA6 STPHR1 BX7 X7-X7 SA6 MRGA SA7 STPHR2 RJ CST COUNT STINGS SA1 MRGA RESTORE STRING POINTER BX0 X0-X0 LX6 X1 SA6 STPHR2 MRG5 SX6 STPHR2 SX1 B0+ BEGIN SEARCH AT START OF CURRENT LINE RJ SFS ZR X7,MRG11 IF END OF INFORMATION SA3 SEC SX7 X3+1 ADVANCE OPERATION COUNT SX0 B1+ SA7 A3+ INTRPT MRG6 PROCESS TERMINAL INTERRUPT NZ X7,MRG5 IF STRING NOT FOUND MRG6 SA3 EOFTF ZR X3,MRG7 IF POSITIONED AT EOI BX2 X0 RJ AFW POSITION TEXT FILES FOR MERGE MRG7 WRITEC A5+,TBUF MRG8 READW M,TBUF,100B SB7 B6-TBUF SET WORD COUNT BX0 X1 SX2 A5 WRITE FILE FET ADDRESS WRITEW X2,TBUF,B7 ZR X0,MRG8 IF NOT END OF DATA SB4 SET2 MRG9 SX2 3RSCR BX7 X7-X7 CLEAR LINE COUNT SX1 B1 LX2 60-18 RESTORE NAME IN FET TO *SCR* SA7 M+5 BX6 X2+X1 SA6 M JP B4 MRG10 SB6 =C* INCORRECT FILE NAME.* MRG10.1 WRITEC O,B6 EQ MAIN PROCESS NEXT COMMAND MRG11 SB4 RPS11 SET RETURN EQ MRG9 MRGA CON 0 RESET EJECT *** RESET (R) - RESET SEARCH POINTER. * * THE SEARCH POINTER IS SET TO THE FIRST LINE OF THE FILE. RESET BSS 0 BX3 X3-X3 SX6 B0 CLEAR SEARCH POINTER EQ SET1 SET EJECT *** SET (S) - REDEFINE SEARCH POINTER. * * MOVES THE SEARCH POINTER AHEAD OR BACK DEPENDING ON * POSITIVE OR NEGATIVE N. IT MAY ALSO BE SET TO THE NTH LINE * CONTAINING /P1/, HOWEVER, N MUST BE POSITIVE. SET BSS 0 ZR B7,SET5 IF LINE ADVANCE POSITIVE SA4 SVLC IX6 X4-X0 PL X6,SET1 IF SET COUNT IN RANGE BX6 X6-X6 SET1 NZ X3,MAINX IF INCORRECT STRING FIELD SA6 SVLC SET2 RJ CPY SA2 SVLC GET SEARCH POINTER SX6 B1 BX7 X2 SA6 X5+5 INITIALIZE READ FILE LINE POSITION SA7 A5+5 NZ X1,SET4 IF EOR SA6 EOFTF CLEAR EOI FLAG RJ AFW SET3 SA1 FBB MX2 56 BX3 X2*X1 ASSURE NEXT READ FROM SAME FILE SX4 X5-F IX6 X4+X3 RESET READ FILE BIAS SA6 A1 SET4 SA4 EOFTF ZR X4,LTL11 IF FILE POSITIONED AT EOF JP MAIN SET5 SA4 EOFTF ZR X4,LTL11 IF FILE POSITIONED AT EOF LX7 X2 BX0 X0-X0 SA7 LCTB ZR X3,SET6 IF NO STRING FIELD SX6 B1 SA6 A3-B1 SET LINE MODE RJ CST SA1 NUM RJ GSM SET6 SA2 LCTB RJ AFW ADVANCE FILES SET7 SA2 LCTB IX6 X2-X0 SA6 A2 SET8 SA2 LCTB SA3 SVLC IX6 X2+X3 REDEFINE SEARCH POINTER SA6 A5+5 SA6 A3 EQ SET3 TABS EJECT *** TABS (T) - SET TAB COLUMNS. * * SET TAB STOPS AS SPECIFIED IN /P1/. SEE DEFTAB. TABS BSS 0 SB4 X3 SB7 B0 ZR B4,TBS4 IF TAB STOPS TO BE CLEARED AX3 24 SB6 X3+B4 SET END OF STRING TBS1 SA1 B4 SB4 B4+B1 ADVANCE STRING BUFFER ADDRESS SX2 X1-1R, ZR X2,TBS2 IF END OF TAB SX3 X1-1R0 NG X3,TBS5 IF CHARACTER ALPHABETIC SX2 X1-1R9-1 PL X2,TBS5 IF CHARACTER NOT NUMERIC LX6 X7,B1 LX7 3 IX7 X6+X7 ASSEMBLE TAB VALUE IX7 X7+X3 NE B4,B6,TBS1 IF NOT END OF STRING TBS2 SX4 X7-TABCL PL X4,TBS5 IF TAB VALUE TOO LARGE TBS3 SA7 B7+TTBL SB7 B7+B1 BX7 X7-X7 CLEAR ASSEMBLY SX0 B7-TTBLL EQ B4,B6,TBS4 IF END OF INPUT NG X0,TBS1 IF NOT MAX TAB COUNT TBS4 SA7 B7+TTBL SET TERMINATOR IN TAB TABLE JP MAIN TBS5 SX6 0 SA6 B7+TTBL TERMINATE TAB TABLE JP MAINX WIDTH EJECT *** WIDTH (W) - SET LINE WIDTH. * * DEFINES A COLUMN AT WHICH LINE ASSEMBLY WILL TERMINATE. * USED IN CONNECTION WITH ALIGN. WIDTH BSS 0 SX2 X0-MAXWD-1 PL X2,MAINX IF WIDTH TOO LARGE SX3 X0-MINWD NG X3,MAINX IF WIDTH TOO SMALL SX7 X0+ SA7 WDTH SET NEW WIDTH JP MAIN TITLE UTILITY ROUTINES. ANC SPACE ** ANC - ASSEMBLE NEXT CHARACTER. * * PRESET REPLACES ANCA CODE WITH ANCB CODE IF ASCII MODE * SPECIFIED. * * ENTRY (B2) = PREVIOUS CHARACTER ADDRESS. * (B6) = LWA+1 OF CHARACTER BUFFER. * * EXIT (B2) = CURRENT CHARACTER ADDRESS. * (B6) = LWA+1 OF CHARACTER BUFFER. * (X2) = TOTAL CHARACTER (6 OR 12 BITS), * RIGHT-JUSTIFIED. * (X3) = UPPER 6 BITS OF 12 BIT ASCII CHARACTER, * RIGHT-JUSTIFIED, ZERO OTHERWISE. * (X4) = LOWER 6 BITS OF CHARACTER, RIGHT-JUSTIFIED. * * USES A - 2, 4. * B - 2. * X - 1, 2, 3, 4. ANC SUBR ENTRY/EXIT SB2 B2+B1 ADVANCE CHARACTER ADDRESS SA2 B2 BX4 X2 BX3 X3-X3 ANCA EQ ANCX RETURN - NOT ASCII MODE * EQ B2,B6,ANCX (ASCII MODE) * SX1 X4-76B (ASCII MODE) ZR X1,ANC1 IF 76B ESCAPE CODE SX1 X4-74B NZ X1,ANCX IF NOT 74B ESCAPE CODE ANC1 BX3 X4 SB2 B2+B1 ADVANCE CHARACTER ADDRESS SA4 B2 LX2 6 BX2 X4+X2 EQ ANCX RETURN - ASCII MODE ANCB EQ B2,B6,ANCX IF END OF LINE SX1 X4-76B AFW SPACE 4,9 ** AFW - ADVANCE FILES AND WRITE. * * ENTRY (X2) = NUMBER LINES TO ADVANCE. * * USES A - 1, 3, 4, 6, 7. * B - 6. * X - ALL. * * CALLS RDC=, WTC=. AFW3 SX6 B6 SA3 TBL SA6 A3-B1 SET END OF LINE ADDRESS SA4 X5+5 IX7 X4+X3 ADVANCE READ FILE LINE POINTER SA7 A4 AFW SUBR ENTRY/EXIT ZR X2,AFWX IF LINE ADVANCE ZERO SA4 LBL BX7 X2 SB6 X4 SET EOL ADDRESS FOR CURRENT LINE LX0 X2 SA7 A4+B1 SAVE LINE ADVANCE AFW1 ZR X0,AFW3 IF FILE POSITIONING COMPLETE WRITEC A5,LBUF AFW2 READC X5,LBUF,LBUFL SX0 X0-1 ZR X1,AFW1 IF NOT END OF DATA SX0 X0+B1 SX7 X0 SA3 TBL IX2 X3-X0 NUMBER LINES ADVANCED SA1 X5+5 SA7 A3 IX6 X1+X2 BUMP READ FILE LINE POINTER SA4 PFADR SA6 A1 BX7 X4-X5 BX5 X4 SA1 FBB TEXT FILE BECOMES NEW READ FILE MX2 56 BX1 X2*X1 SX2 X5-F READ FILE BIAS BX6 X1+X2 SA6 A1 UPDATE WRITE/READ FILE BIAS NZ X7,AFW2 IF NOT READING PRIMARY TEXT FILE SX0 X0-1 SA7 EOFTF EQ AFWX RETURN ATF SPACE 4,9 ** ATF - ADVANCE TEXT FILE. * * ENTRY (X2) = NUMBER OF LINES TO ADVANCE. * * USES A - 0, 4, 6, 7. * B - 2, 6, 7. * X - 0, 2, 4, 5, 6, 7. * * CALLS RDC=. ATF4 SX6 B6+ SAVE END OF LINE ADDRESS SA6 LBL ATF SUBR ENTRY/EXIT BX0 X2 ZR X2,ATFX IF LINE ADVANCE ZERO SA0 X0 ATF1 BX2 X5 PL X0,ATF2 IF NO LINE POINTER MANIPULATION BX0 -X0 SA4 X5+5 IX7 X4+X0 BUMP TEXT FILE LINE COUNT SA7 A4 ATF2 ZR X0,ATF4 IF ADVANCE COMPLETE READC X2,LBUF,LBUFL SX0 X0-1 DECREMENT COUNT ZR X1,ATF2 IF NOT EOR SA4 PFADR SX0 X0+B1 BX7 X4-X5 CHECK EOR ON PRIMARY FILE SB2 A0 PL B2,ATF3 IF NO LINE POINTER MANIPULATION BX0 -X0 ATF3 SX5 X4 NZ X7,ATF1 IF NOT PRIMARY TEXT FILE SX0 B0 SA7 EOFTF EQ ATFX RETURN ATL SPACE 4,11 ** ATL - ASSEMBLE TABBED LINE. * * ENTRY (B2) = LINE BUFFER ADDRESS. * (B4) = CHARACTER BUFFER ADDRESS. * (B6) = END OF DATA IN CHARACTER BUFFER. * * USES A - 1, 2, 3, 6, 7. * B - 2, 3, 4, 5, 7. * X - 1, 2, 3, 6, 7. * * CALLS SLT. ATL8 SX7 B2 SB5 B2+B2 FORM SHIFT COUNT LX7 2 SB5 X7+B5 SA3 MODE LX7 B5,X6 LEFT JUSTIFY ASSEMBLY SA7 A6+B1 BX6 X6-X6 INSURE END OF LINE SA2 STRB SA6 A7+B1 SX1 B2-10 BX1 -X1 PL X2,ATL9 IF NOT FINAL DELIMITER ZR X3,ATLX IF STRING MODE AND FINAL DELIMITER ATL9 SA2 LBL ZR X1,ATLX IF EOL ON WORD BOUNDARY SX6 A7 LX1 24 FORM EOL POINTER BX1 X1+X6 RJ SLT SET LINE TERMINATOR SX6 X2+ SA6 LBL RESTORE EOL ADDRESS ATL SUBR ENTRY/EXIT SA1 B2-B1 SA3 TTBL FIRST TAB COLUMN BX6 X1 SB5 B1 SA6 A1+ INITIALIZE STORAGE REGISTER SA1 TABCH SB7 X3 BX6 X6-X6 CLEAR ASSEMBLY SB2 10 SA4 ASC ASCII FLAG ATL1 SA2 B4 GET NEXT CHARACTER SB4 B4+B1 GT B4,B6,ATL8 IF ASSEMBLY COMPLETE BX7 X2-X1 ZR X7,ATL4 IF TAB CHARACTER FOUND ZR X4,ATL2 IF ASCII FLAG NOT SET SX7 X2-76B CHECK ESCAPE 76 ZR X7,ATL3 IF ESCAPE 76 SX7 X2-74B CHECK ESCAPE 74 ATL2 ZR X7,ATL3 IF ESCAPE 74 SB5 B5+1 ATL3 LX6 6 POSITION ASSEMBLY REGISTER SB2 B2-1 DECREMENT CHARACTER COUNT BX6 X6+X2 NZ B2,ATL1 IF WORD NOT COMPLETE SA6 A6+B1 BX6 X6-X6 CLEAR ASSEMBLY SB2 10 EQ ATL1 ATL4 ZR B7,ATL1 IF ALL TABS PROCESSED SX2 1R ATL5 LE B5,B7,ATL6 IF NOT PAST TAB COLUMN SA3 A3+B1 SB7 X3 ZR X3,ATL1 IF ALL TABS PROCESSED GT B5,B7,ATL5 ATL6 EQ B5,B7,ATL7 IF TAB COLUMN REACHED SB5 B5+B1 LX6 6 BLANK FILL TO TAB COLUMN SB2 B2-B1 BX6 X6+X2 NZ B2,ATL6 IF WORD NOT COMPLETE SA6 A6+B1 SB2 10 BX6 X6-X6 ATL7 NE B5,B7,ATL6 SA3 A3+B1 SB7 X3 GET NEXT TAB VALUE EQ ATL1 BLK SPACE 4,13 ** BLK - INSERTS BLANK AFTER COLON AT END OF LINE. * * ENTRY (X1) = END OF LINE POINTER WORD. *T 36/ N1,24/ A1. * N1 = POSITION +1 (MOD 10) OF LAST CHARACTER IN LINE. * A1 = ADDRESS OF WORD CONTAINING *N1*. * * EXIT (X1) = END OF LINE POINTER WORD, UPDATED IF NECESSARY. * (B6) = NUMBER OF BLANKS ADDED. * * USES A - 3, 4, 7. * B - 2, 3, 4, 5, 6. * X - 1, 3, 4, 7. BLK1 SA4 A3-1 GET PREVIOUS WORD BLK2 MX7 -6 BX7 -X7*X4 NZ X7,BLKX IF LAST CHARACTER NOT *00* MX7 -54 BX4 -X7*X3 INSERT BLANK AFTER *00* CHARACTER SX7 1R LX7 54 BX7 X7+X4 SB2 B4-B2 SHIFT COUNT LX7 B2,X7 REPOSITION WORD SB5 10 SA7 A3 SB3 B3+B1 INCREMENT CHARACTER POSITION NE B3,B5,BLK3 IF NOT FULL WORD SB3 B0 SA3 A3+B1 BLK3 SX1 B3 LX1 24 SX4 A3 ADDRESS OF NEW END OF LINE WORD BX1 X1+X4 FORM NEW END OF LINE POINTER WORD SB6 1 BLK SUBR ENTRY/EXIT SB6 B0 MX4 -59 BX4 -X4*X1 SA3 X4 ADDRESS OF END OF LINE WORD AX4 24 POSITION +1 (MOD 10) OF LAST CHARACTER SB2 B0 SB4 60 SB3 X4 ZR B3,BLK1 IF LAST CHARACTER IS IN PREVIOUS WORD SB2 B3+B3 FORM SHIFT COUNT LX4 2 SB2 X4+B2 CHARACTER POSITION * 6 LX3 B2,X3 RIGHT JUSTIFY LAST CHARACTER BX4 X3 EQ BLK2 BSP SPACE 4,10 ** BSP - BACKSPACE POINTER. * * ENTRY (X1) = POINTER WORD TO BE BACKSPACED. * (X4) = NUMBER OF POSITIONS TO BACKSPACE. * * EXIT (X1) = UPDATED POINTER WORD. * * USES A - NONE. * B - 2. * X - 1, 3. BSP SUBR ENTRY/EXIT SB2 X4+ LE B2,BSPX IF NO BACKSPACE MX3 1 BX1 -X3*X1 SX3 X1 AX1 24 BSP1 SX1 X1-1 PL X1,BSP2 IF NOT ON WORD BOUNDARY SX1 9 SX3 X3-1 BSP2 SB2 B2-B1 GT B2,BSP1 IF MORE POSITIONS TO BACKSPACE LX1 24 BX1 X1+X3 FORM NEW POINTER WORD EQ BSPX RETURN - POINTER UPDATED CAC SPACE 4,10 ** CAC - COUNT ASCII CHARACTERS. * * ENTRY (X1) = FIRST CHARACTER POINTER WORD. * (X4) = LAST CHARACTER POINTER WORD. * * EXIT (B4) = NUMBER OF ASCII CHARACTERS FOUND. * * USES A - 2, 3. * B - 3, 4, 5, 6, 7. * X - 2, 3, 6, 7. CAC SUBR ENTRY/EXIT SB3 TCHM SB4 B0 INITIALIZE ASCII CHARACTER COUNTER SB6 X1 FWA OF ASCII STRING SB7 X4 LWA OF ASCII STRING SB5 24 AX2 X4,B5 LAST CHARACTER POSITION + 1 SA3 B3+X2 MASK FOR LAST WORD SA2 B7 GET LAST WORD BX7 X3*X2 CLEAR UNWANTED DATA AX2 X1,B5 FIRST CHARACTER POSITION SA3 B3+X2 MASK FOR FIRST WORD SA2 B6+ GET FIRST WORD BX2 -X3*X2 CLEAR UNWANTED DATA NE B6,B7,CAC1 IF STRING NOT WITHIN ONE WORD BX2 X2*X7 BX7 X7-X7 CAC1 CX6 X3 SB5 X6 LX2 B5 LEFT-JUSTIFY REMAINING CHARACTERS MX6 -6 CAC2 LX2 6 BX3 -X6*X2 ISOLATE CHARACTER BX2 X2-X3 CLEAR CHARACTER FROM WORD SX3 X3-76B ZR X3,CAC3 IF 76B ESCAPE CODE SX3 X3+76B-74B NZ X3,CAC5 IF NOT 74B ESCAPE CODE CAC3 SB4 B4+B1 NZ X2,CAC4 IF LOWER 6 BITS OF CHARACTER IN SAME WORD SB6 B6+B1 SA2 B6 LT B6,B7,CAC4 IF NOT LAST WORD BX2 X7 CAC4 LX2 6 BX2 X6*X2 CLEAR LOWER 6 BITS OF CHARACTER FROM WORD CAC5 NZ X2,CAC2 IF WORD NOT UNPACKED SB6 B6+1 SA2 B6 LT B6,B7,CAC2 IF NOT LAST WORD BX2 X7 EQ B6,B7,CAC2 IF LAST WORD EQ CACX RETURN CFC SPACE 4,12 ** CFC - CHECK FOR COLON. * * ENTRY (X2) = CURRENT CHARACTER. * * EXIT (X3) - FINAL COMPARISON. * * USES X - 1, 3. * A - 1. CFC1 BX3 X3-X2 COMPARE CFC SUBR ENTRY/EXIT SA1 CSMR SYSTEM CHARACTER SET MODE SX3 63B COLON FOR 63 CHARACTER SET SYSTEM PL X1,CFC1 IF 63 CHARACTER SET SYSTEM SA1 ASC CHECK ASCII FLAG SX3 B0 64 CHARACTER SET COLON ZR X1,CFC1 IF NOT ASCII MODE SX3 7404B 64 CHARACTER SET ASCII COLON EQ CFC1 COMPARE ON 64 CHARACTER SET COLON CPY SPACE 4,7 ** CPY - REPOSITION TEXT FILES. * * USES A - 1, 5, 6, 7. * B - 6, 7. * X - ALL. * * CALLS CIO=, RDC=, RDW=, WTC=, WTW=. CPY3 WRITEC A5+,LBUF DUMP LINE BUFFER SX1 A5-F SX2 X5-F UNUSED FILE BECOMES NEXT WRITE FILE IX3 X1+X2 SX4 X3-21 BX2 -X4 RELATIVE FET OF UNUSED FILE SA5 X2+F SX5 X1+F OLD WRITE FILE IS NEXT READ FILE CPY4 SX2 A5-F SX1 X5-F READ FILE BIAS LX2 4 IX7 X2+X1 MERGE FILE BIAS BITS SA7 FBB REWIND A5+ WRITER X5+ FLUSH BUFFER REWIND X2 READ X2 READC X2,LBUF,LBUFL SX6 B6+ SA6 LBL CPY SUBR ENTRY/EXIT SA1 PFADR BX3 X1-X5 CHECK - READ FILE IS PRIMARY FILE SX7 A5 NZ X3,CPY1 IF SECONDARY TEXT FILE SA1 EOFTF NZ X1,CPY3 IF NOT AT END OF PRIMARY FILE SA7 PFADR SA5 X5 SET NEW WRITE FILE SX5 X7 EQ CPY4 CPY1 WRITEC A5+,LBUF WRITE LINE BUFFER CPY2 READW X5,LBUF,CBUFL SB7 B6-LBUF NUMBER WORDS TO WRITE BX0 X1 SX2 A5 WRITE FILE FET ADDRESS WRITEW X2,LBUF,B7 ZR X0,CPY2 IF NOT END OF RECORD SX2 A5 SA5 X5 SWAP READ/WRITE FILES SX5 X2+ EQ CPY4 CRN SPACE 4,11 ** CRN - CHECK RESERVED FILE NAME. * * ENTRY (X4) = LEFT JUSTIFIED FILE NAME. * (A3) = FET ADDRESS OF FILE BEING CHECKED. * * EXIT (X7) = 0 IF FILE NAME RESERVED. * (B6) = ERROR MESSAGE ADDRESS, IF FILE NAME RESERVED. * * USES A - 1. * B - 2, 3, 4, 5, 6. * X - 1, 2, 3, 7. CRN SUBR ENTRY/EXIT SB4 FETL SB2 F-FETL SET FWA OF RESERVE FILE FETS SB5 A3 SET CURRENT FET ADDRESS SB3 T SET LWA FOR SEARCH MX3 42 CRN1 SB2 B2+B4 SET NEXT FET ADDRESS EQ B2,B5,CRN1 IF CURRENT FET GT B2,B3,CRNX IF SEARCH COMPLETE SA1 B2 SET FILE NAME BX2 X3*X1 BX7 X2-X4 NZ X7,CRN1 IF NO MATCH SB6 CRNA * RESERVED FILE NAME.* EQ CRNX RETURN CRNA DATA C* RESERVED FILE NAME.* CST SPACE 4,7 ** CST - COUNT STRINGS. * * USES A - 2, 3, 4, 6, 7. * B - 6. * X - 0, 2, 3, 4, 6, 7. * * CALLS RTF, SRO, WTC=. * COUNT SIMPLE STRINGS /P1/. CST6 SA2 LCTB SET LINE COUNT TO STRING SA3 SEC SX6 X2+B2 SX7 X3+B1 DECREMENT SEARCH COUNT SA6 A2 SA7 A3 CST7 ZR X7,CST8 IF ALL STRINGS FOUND SX0 * SX6 STPHR1 SEARCH FOR NEXT OCCURRENCE OF STRING RJ SRO CST8 NZ X7,CST6 IF STRING FOUND SA2 SEC SA3 A2-B1 DETERMINE NUMBER PHRASES FOUND IX7 X3+X2 ZR X7,CST1 IF NO ELLIPSI FOUND BX6 -X7 NZ X2,CST9 IF ALL NOT FOUND SX7 B0 CST9 SA6 A2 SA7 A3 RJ RTF REPOSITION FILES CST SUBR ENTRY/EXIT SX6 STPHR1 RJ SRO CST1 NZ X7,CST2 IF /P1/ FOUND RJ RTF WRITEC O,NPM JP MAIN CST2 SX6 B2 BX7 X7-X7 SA6 LCT LINE COUNT TO FIRST OCCURRENCE OF /P1/ SA7 LCTT SA6 A7+B1 SA7 A7-B1 SA3 MODE SA4 STPHR2 ZR X3,CST3 IF STRING MODE SX3 1 CST3 SA2 A7-B1 BX6 X2+X3 SET CALL TO *SRO* SA6 CST7 ZR X4,CST6 IF COUNTING SIMPLE STRINGS SA6 CST5 * COUNT ELLIPSI /P1/,/P2/. CST4 SA2 LCTT SX7 X2+B2 LINE COUNT TO PHRASE STARTING ELLIPSIS SA7 A2+B1 SX6 STPHR2 SEARCH FOR PHRASE ENDING ELLIPSIS RJ SRO ZR X7,CST8 IF PHRASE NOT FOUND SA2 LCTX SX6 X2+B2 LINE COUNT TO PHRASE ENDING ELLIPSIS BX7 X2 SA6 A2-B1 SA7 A6-B1 SA3 SEC SX7 X3+B1 DECREMENT SEARCH COUNT SA7 A3 CST5 ZR X7,CST8 IF ALL ELLIPSI FOUND SX0 * SX6 STPHR1 SEARCH FOR PHRASE STARTING ELLIPSIS RJ SRO NZ X7,CST4 IF PHRASE FOUND EQ CST8 CSTA ZR X7,CST8 SX0 0 LCTB BSS 3 LCTT EQU LCTB+1 LCTX EQU LCTT+1 CTI SPACE 4 ** CTI - CHECK TERMINAL INTERRUPTS. * * ENTRY (TINT) = TERMINAL INTERRUPT INDICATOR. * * EXIT (X3) .NE. 0 IF TERMINAL INTERRUPT. * (X6) .NE. 0 IF INTERRUPT PENDING. * * USES A - 3, 6. * X - 3, 6. * EOR/EOF/EOI STATUS IS X1 PRESERVED. CTI SUBR ENTRY/EXIT BX6 X1 SAVE X1 SA3 TINT RESET INTERRUPT INDICATOR SA1 INTP SET INTERRUPT PENDING BX3 X1+X3 LX1 X6 RESTORE X1 BX6 X6-X6 SA6 A3 BX6 X3 SA6 A1 EQ CTIX CTL SPACE 4,8 ** CTL - COMPRESS TEXT LEFT. * * ENTRY (X1) = DESTINATION POINTER WORD. * (X2) = SOURCE POINTER WORD. * (B6) = LWA DESTINATION BUFFER. * (B6) = 0, IF NO DESTINATION BUFFER LIMIT. * * USES A - 3, 4, 6, 7. * B - 2, 3, 4, 5, 6, 7. * X - 1, 2, 3, 4, 6, 7. CTL3 EQ B3,B7,CTL9 IF PACKING COMPLETE SB4 B4-10 SA3 B3 SB3 B3+B1 ADVANCE SOURCE ADDRESS NZ X3,CTL4 IF NOT ZERO WORD PL X3,CTL9 IF END OF LINE CTL4 ZR B4,CTL7 IF LAST CHARACTER IS *00* SB4 B0+ CTL5 LX3 6 POSITION NEXT CHARACTER BX4 -X7*X3 SB4 B4+1 INCREMENT SOURCE CHARACTER COUNT NZ X3,CTL6 IF NOT ZERO WORD PL X3,CTL3 IF WORD UNPACKED CTL6 BX3 X3-X4 CTL7 LX6 6 SB5 B5+1 INCREMENT CHARACTER COUNT BX6 X6+X4 LT B5,B6,CTL5 IF NOT FULL WORD SX2 B6-7 ZR X2,CTL9 IF AT DESTINATION BUFFER LIMIT SA6 B2+ SB5 B0+ BX6 X6-X6 CLEAR ASSEMBLY SB2 B2+B1 CTL8 ZR X1,CTL5 IF NO DESTINATION BUFFER LIMIT SX2 B2 IX2 X1-X2 NZ X2,CTL5 IF NOT AT LWA DESTINATION BUFFER SB6 7 SX2 B1 LT B5,B6,CTL5 IF BUFFER NOT COMPLETELY FULL SX2 B0 CTL9 SX1 B5+ SB6 10 LX1 24 ZR B5,CTL10 IF LAST WORD FULL + LX6 6 SB5 B5+B1 NE B5,B6,* LEFT JUSTIFY ASSEMBLY CTL10 SA6 B2+ SX4 A6 BX7 X1+X4 MERGE CHARACTER POSITION AND ADDRESS MX3 -12 SA7 SLP STORE EOL POINTER BX4 -X3*X6 ZR X4,CTL11 IF EOL BYTE BX6 X6-X6 SA6 A6+B1 SET END OF LINE CTL11 SX7 A6+1 SA1 SLP SA7 LBL STORE EOL ADDRESS ZR X2,CTL1 IF SOURCE LINE TRUNCATED CTL SUBR ENTRY/EXIT PL X2,CTL2 IF NOT END OF LINE CTL1 RJ SLT SET LINE TERMINATOR SX4 A6+ MX3 1 FORM EOL POINTER BX6 X3+X4 SA6 SLP EQ CTLX RETURN CTL2 SB2 X1 SET DESTINATION ADDRESS AX1 24 SA4 X1+TCHM READ LEFT MASK SA3 B2 SB5 X1 BX6 X4*X3 REMOVE UNWANTED CHARACTER DATA CX1 X4 SB4 X1 SET SHIFT COUNT LX6 B4,X6 SB3 X2+B1 SET SOURCE ADDRESS AX2 24 SA3 B3-B1 SA4 X2+TCHM READ RIGHT MASK BX3 -X4*X3 CX1 X4 SB4 X1 SET SHIFT COUNT SX1 B6 DESTINATION BUFFER LIMIT LX3 B4,X3 POSITION SOURCE DATA SB6 10 SA4 LBL MX7 -6 SB7 X4 SET EOL ADDRESS SB4 X2 SOURCE CHARACTER COUNT SX2 B1 EQ CTL8 ETX SPACE 4,10 ** ETX - PROCESS TEXT ENTRY. * * EXIT (X2) = TEXT DATA FET ADDRESS. * (A6) = ADDRESS OF BUFFER STATUS WORD. * * USES A - 0, 1, 2, 3, 4, 6, 7. * B - 2, 4, 5, 6, 7. * X - 0, 1, 2, 3, 4, 6, 7. * * CALLS ATL, CIO=, RDS=, WTC=. ETX13 READS I,STRA,-STRBL RJ CTI CHECK TERMINAL INTERRUPT NZ X3,ETX9 IF INTERRUPTED NZ X1,ETX8 IF NULL INPUT SB4 STRA ETX14 SA3 A0+ GET DELIMITER SA4 B6-B1 GET LAST CHARACTER SB5 A4-B1 ETX15 SX6 X4-1R NZ X6,ETX16 IF NOT BLANK SB6 B6-B1 LE B6,B4,ETX2 IF BLANK LINE SA4 B6-B1 GET LAST CHARACTER EQ B5,B6,ETX16 IF TWO BLANKS SKIPPED ZR X3,ETX15 IF DELIMITER *00* ETX16 SB2 B6-1 SA1 ASC ZR X1,ETX18 IF NOT ASCII CHARACTER SET LE B2,B4,ETX18 IF AT BEGINING OF LINE SA2 B2-B1 IX6 X1+X2 ZR X6,ETX17 IF ESCAPE CODE 76B SX6 X2-74B NZ X6,ETX18 IF NOT ESCAPE CODE 74B ETX17 SB2 B2-1 LX2 6 BX4 X4+X2 ETX18 BX6 X3-X4 NZ X6,ETX19 IF NOT FINAL DELIMITER MX6 1 SB6 B2+ BACKSPACE OVER FINAL DELIMITER SA6 A0 SA4 B6-B1 GET LAST TEXT CHARACTER GE B4,B6,ETX2 IF FINAL DELIMITER ONLY NZ X4,ETX20 IF LAST CHARACTER NOT *00* SX6 1 SA6 BAC BLANK ADDED AFTER COLON PRECEDING DELIMITER ETX19 NZ X4,ETX20 IF LAST CHARACTER NOT *00* SX6 1R SA6 B6+ PRESERVE COLON WITH BLANK SB6 B6+1 ETX20 SB2 TBUF RJ ATL ASSEMBLE TEXT INTO LINE ETX21 SX0 X0+1 ADVANCE LINE COUNT WRITEC M,TBUF SA3 A0 PL X3,ETX13 IF NOT END OF INPUT BX6 X0 SA6 M+5 STORE LINE COUNT WRITER X2 FLUSH BUFFER REWIND X2 ETX22 SB6 =C* READY.* SA0 M ETX23 WRITEC O,B6 ZR X0,ETXX IF NO INPUT READ A0+,R SA3 A0+5 GET LINE COUNT SA4 X2 BX0 X3 SX6 X4-21B SET BUFFER STATUS SA6 TBST ETX SUBR ENTRY/EXIT SX0 1 REWIND M,R REWIND TEXT FILE SA0 STRB WRITEC O,(=C* ENTER TEXT.*) ETX1 READS I,STRA,-STRBL RJ CTI CHECK TERMINAL INTERRUPTS NZ X3,ETX9 IF INTERRUPTED BX7 X7-X7 NZ X1,ETX5 IF EOF (CR) ON INPUT SB2 A0 SA7 BAC CLEAR BACKSPACE INDICATOR RJ ANC ASSEMBLE NEXT CHARACTER BX6 X2 SB4 B2+B1 SET FWA OF CHARACTER BUFFER SX1 X2-1R$ ZR X1,ETX6 IF TEXT IN STRING BUFFER SX1 X2-1R ZR X1,ETX3 IF INCORRECT DELIMITER SX0 B0 SA7 B4-B1 SA7 A7-B1 SA6 A0 NE B4,B6,ETX14 IF NOT DELIMITER ONLY ETX2 SX7 B0+ WRITE BLANK LINE SA7 TBUF EQ ETX21 ETX3 SA3 JOTY NZ X3,ETX4 IF NOT INTERACTIVE JOB WRITEC O,(=C* INCORRECT DELIMITER - REENTER TEXT.*) EQ ETX1 ETX4 WRITEC O,(=C* INCORRECT DELIMITER.*) EQ MAIN * USER SELECTED TEXT ENTERED PREVIOUSLY. ETX5 SA7 EOFIF SET EOF ON INPUT EQ ETX22 * USER SELECTED TEXT IN STRING BUFFER. ETX6 GE B4,B6,ETX7 IF STRING BUFFER SYMBOL ONLY SA4 B4 SB4 B4+B1 SX2 X4-1R NZ X2,ETX3 IF INCORRECT DELIMITER LT B4,B6,ETX3 IF INCORRECT DELIMITER ETX7 SA0 B REWIND B,R SB6 =C* READY.* SA1 XTSB GET NUMBER OF POSITIONS TO BACKSPACE BX6 X1 SA6 BAC EQ ETX23 * INPUT TERMINATED WITH EOF. ETX8 MX7 1 CLEAR DELIMITER BX6 X6-X6 SA7 A0+ SA6 EOFIF EQ ETX2 ETX9 SX6 B6 SAVE INPUT STRING LWA+1 SA6 ETXA ETX10 WRITEC O,(=C* DISREGARD PREVIOUS TEXT "CB"*) SB6 CMDB FWA WORKING BUFFER RJ PUR PROCESS USER RESPONSE RJ CTI CHECK TERMINAL INTERRUPTS NZ X3,END IF INTERRUPT, SIMULATE END NG X4,ETX12 IF INCORRECT REPONSE NZ X4,ETX11 PROCESS *YES* RESPONSE * TERMINATE TEXT AND PROCESS. * (ENTER ASSUMED TERMINATION DELIMETER AT POINT OF INTERRUPT) SA1 ETXA RESTORE INPUT STRING LWA+1 SB6 X1 SB4 STRA EQ ETX8 TERMINATE INPUT ETX11 BX0 X0-X0 EQ ETX22 ETX12 WRITEC O,PCCD REQUEST *YES* OR *NO* RESPONSE EQ ETX10 ETXA CON 0 INTERRUPTED INPUT STRING LWA+1 BAC CON 0 NUMBER OF POSITIONS TO BACKSPACE GSM SPACE 4,9 ** GSM - GENERATE STRINGS PROCESSED MESSAGE. * * ENTRY (X1) = NUMBER OF STRINGS PROCESSED. * * USES A - 6. * B - 6. * X - 2, 6. * * CALLS CDD, WTC=. GSM1 RJ CDD CONVERT NUMBER TO DISPLAY CODE LX6 12 SA6 OPM INSERT VALUE IN MESSAGE WRITEC O,A6 GSM SUBR ENTRY/EXIT NZ X1,GSM1 IF VALID COUNT EQ GSMX RETURN OPM DATA C* OCCURRENCES OF PHRASE FOUND.* IBC SPACE 4,10 ** IBC - INSERT BLANK CHARACTERS. * * ENTRY (X1) = POINTER TO START OF BLANK STRING. * (X4) = POINTER TO END OF BLANK STRING. * * USES A - 1, 2, 3, 4, 6, 7. * B - 2, 3, 4, 6, 7. * X - 1, 2, 3, 4, 6, 7. * * CALLS BSP, CAC, CTL, SLT. IBC1 BX7 X4-X1 SA2 ASC SB2 X2 ZR X7,IBCX IF NO STRING ZR B2,IBC2 IF NOT ASCII MODE RJ CAC COUNT ASCII CHARACTERS IBC2 SB6 X1+ FWA OF BLANK STRING SB3 TCHM AX1 24 BX2 X4 SAVE END OF STRING POINTER SB7 X4+ LWA OF BLANK STRING SA3 BLKS AX4 24 NUMBER OF BLANKS FOR LAST WORD SA1 X1+B3 SA4 X4+B3 NE B6,B7,IBC3 IF FWA " LWA BX4 X4-X1 IBC3 LX7 X3 SA3 B6 EQ B6,B7,IBC5 IF STRING WITHIN ONE WORD BX6 X1*X3 SB6 B6+B1 BX3 -X1*X7 BX6 X6+X3 ADD BLANKS TO FIRST WORD SA3 B7 SA6 B6-B1 EQ B6,B7,IBC5 IF STRING SPANS TWO WORDS IBC4 SA7 B6 SB6 B6+B1 BLANK BETWEEN FWA AND LWA NE B6,B7,IBC4 IF NOT DONE IBC5 BX6 X4*X7 BX1 -X4*X3 ADD BLANKS TO LAST WORD BX6 X6+X1 SA6 B7 STORE LAST WORD ZR B2,IBCX IF NOT ASCII MODE ZR B4,IBCX IF NO ASCII CHARACTERS SX4 B4+ SA1 LBW NG X1,IBC6 IF LBW AT END OF LINE RJ BSP BACKSPACE LBW POINTER BX6 X1 SA6 LBW IBC6 BX1 X2 RJ BSP BACKSPACE END OF STRING POINTER SB6 B0 RJ CTL ELIMINATE EXCESS BLANKS SA1 SLP RJ SLT SET LINE TERMINATOR IBC SUBR ENTRY/EXIT PL X4,IBC1 IF BLANK STRING NOT AT EOL RJ SLT SET LINE TERMINATOR EQ IBCX RETURN PCC SPACE 4,12 ** PCC - PROMPT FOR COMMAND CONTINUANCE. * * ENTRY ((PCCX)-1) = NEGATIVE RETURN ADDRESS. * ALL OUTPUT DATA IN THE BUFFER WILL BE ISSUED * PRIOR TO PROMPT MESSAGE. * * EXIT TO NEGATIVE RETURN IF NEGATIVE REPONSE. * * USES A - 1, 2, 3, 4, 6, 7. * X - 2, 3, 4, 7. * B - ALL. * (REGISTERS X0, X1, X6 ARE SAVED/RESTORED) * * CALLS CTI, PUR, RSR, SVR, WTC=. PCC3 RJ RSR RESTORE WORKING REGISTERS PCC SUBR SA3 TINT CHEC TEMINAL INTERRUPTS ZR X3,PCCX IF NO INTERRUPT RJ SVR SAVE WORKING REGISTERS RJ CTI CLEAR TERMINAL INTERRUPT SA3 NUM CALCULATE CURRENT POSITION SA2 A3+B1 IX1 X3+X2 SA2 SVLC SET LINE NUMBER SX0 1L.&3L SX3 X2+B1 IX1 X3+X1 RJ CDD LX6 18 BX6 X6-X0 SA6 PCCB WRITEC O,PCCA PCC1 WRITEC O,(=C* COMMAND CONTINUE "CB"*) SB6 CMDB FWA WORKING BUFFER RJ PUR PROCESS USER RESPONCE RJ CTI CHECK TERMINAL INTERRUPTS NG X4,PCC2 IF INCORRECT REPONSE NZ X4,PCC3 IF COMMAND TO CONTINUE SA4 PCCX SET NEGATIVE RETURN ADDRESS AX4 30 MX0 42 SA1 PCCC SA4 X4-1 READ RETURN JUMP WORD BX6 X0*X1 BX4 -X0*X4 IX7 X6+X4 LX7 30 SA7 A1 RJ RSR RESTORE ALL REGISTERS PCCC EQ * RETURN - EQ * PCC2 WRITEC O,PCCD REQUEST *YES* OR *NO* RESPONSE EQ PCC1 PCCA DATA 20H INTERRUPT AT LINE PCCB BSS 1 PCCD DATA C/ ENTER *YES* OR *NO*./ PUR SPACE 4,15 ** PUR - PROCESS USER RESPONSE. * * ENTRY PROMPT MESSAGE ISSUED TO USER. * (B6) = FWA WORKING BUFFER FOR READING RESPONSE * (MUST BE AT LEAST *LBUFL* WORDS LONG). * * EXIT (X4) .LT. 0, IF INCORRECT RESPONSE. * (X4) = 0, IF NEGATIVE RESPONSE. * (X4) .GT. 0, IF POSITIVE RESPONSE. * * USES A - 1, 7. * B - 2, 3, 5. * X - 0, 1, 2, 4, 6, 7. * * CALLS ANC. * * MACROS READ, READS. PUR1 SX4 -1 SET INCORRECT REPONSE PUR SUBR SX0 B6-B1 SAVE FWA-1 WORKING BUFFER BX7 X7-X7 CLEAR INTERRUPT PENDING SA7 INTP READ I READS X2,B6,-LBUFL READ RESPONSE NZ X1,PUR1 IF ONLY (CR) ENTERED SB2 X0 BX6 X6-X6 CLEAR ACCUMULATOR SB5 60 SB3 3 SET RESPONSE SIZE PUR2 RJ ANC ASSEMBLE NEXT CHARACTER EQ B2,B6,PUR3 IF INPUT COMPLETE SX1 X2-1R CHECK FOR BLANK ZR X1,PUR2 IF BLANK SB3 B3-1 INCREMENT LENGTH NG B3,PUR1 IF RESPONSE TOO LONG SB5 B5-6 LX6 6 BX6 X4+X6 EQ PUR2 PUR3 LX4 B5,X6 SET RESPONSE MX0 42 SA1 PURA-1 INITIALIZE TABLE SEARCH PUR4 SA1 A1+B1 SET NEXT TABLE ITEM BX6 X0*X1 COMPARE RESPONSE TO TABLE ZR X1,PUR1 IF AT END OF TABLE BX2 X6-X4 NZ X2,PUR4 IF NOT A MATCH SX4 X1 SET REPONSE INDICATOR EQ PURX RETURN SPACE 4 ** PURA - TABLE OF LEGAL RESPONSES. * *T 42/RESPONSE,18/TYPE * * TYPE 0 = NEGATIVE RESPONSE. * 1 = POSITIVE RESPONSE. PURA BSS 0 VFD 42/0LNO,18/0 VFD 42/0LN,18/0 VFD 42/0LYES,18/1 VFD 42/0LY,18/1 CON 0 PSB SPACE 4,7 ** PSB - POSITION STRING BUFFER. * * USES A - 0, 1, 3, 4, 6, 7. * B - NONE. * X - 1, 2, 3, 4, 6, 7. * * CALLS CIO=. PSB4 BX7 X4 SX6 A0 SA7 A4 RESTORE BUFFER POINTERS SA6 A7-B1 PSB SUBR ENTRY/EXIT SA3 B+5 ZR X3,PSBX IF STRING BUFFER EMPTY SA1 B LX1 59-4 CHECK FILE POSITION SX2 A1 NG X1,PSB1 IF POSITIONED AT EOR SKIPEI X2 PSB1 BKSPRU X2 RPHR X2,R READ LAST SECTOR SA3 X2+2 SA4 A3+B1 SAVE BUFFER POINTERS SA0 X3 BKSPRU X2,,R POSITION FILE FOR REWRITE SA1 MODE NZ X1,PSB4 IF LINE MODE SA1 XTSP NG X1,PSB4 IF PREVIOUS PHRASE AT EOL IX6 X4-X3 SX6 X6+B1 NZ X6,PSB2 IF MORE THAN ONE WORD IN BUFFER SX7 X1-9 ZR X7,PSB1 IF BUFFER CONTAINS EOL ONLY PSB2 SA3 B+5 SX7 X3-1 ADJUST LINE COUNT SA0 A0-B1 SA7 A3 ZR X1,PSB4 IF NEXT PHRASE ON WORD BOUNDARY SA3 A0+ NZ X3,PSB3 IF LAST WORD NOT ZERO SA0 A0-B1 SA3 A0 PSB3 SX2 LBUF-1 BX6 X3 LX1 24 SA6 X2 LAST WORD CURRENTLY IN BUFFER BX7 X1+X2 SA7 SLP FIX POINTER TO LAST WORD EQ PSB4 PSO SPACE 4,10 ** PSO - PRELIMINARY STRING SEARCH. * * ENTRY (X3) = POINTER WORD FOR FIRST STRING. * (X4) = POINTER WORD FOR SECOND STRING. * * USES A - 2, 7. * B - NONE. * X - 0, 2, 6, 7. * * CALLS CST, AFW, SFS, WTC=. PSO SUBR ENTRY/EXIT SX0 0 ZR X4,PSO1 IF ELLIPSIS SEARCH NOT REQUIRED RJ CST COUNT ELLIPSI SA2 LCT RJ AFW ADVANCE TO FIRST OCCURRENCE OF /P1/ PSO1 SX6 STPHR1 LOCATE FIRST STRING RJ SFS NZ X7,PSOX IF PHRASE FOUND SA7 EOFTF PSO2 WRITEC O,NPM JP SET2 NPM DATA C* PHRASE NOT FOUND.* RSR SPACE 4 ** RSR - RESTORE WORKING REGISTERS. * * ENTRY (SVRA - SVRA+3) = PREVIOUS REGISTER CONTENTS. RSR SUBR ENTRY/EXIT SA2 SVRA X6 BX6 X2 SA1 A2+B1 X1 SA2 A1+B1 X0 BX0 X2 SA2 A2+B1 X2 EQ RSRX RTF SPACE 4,7 ** RTF - REPOSITION TEXT FILES (READ ONLY OPERATIONS). * * USES A - 1, 3, 7. * B - 6, 7. * X - 0, 1, 2, 3, 4, 5, 7. * * CALLS CIO=, RDC=. RTF2 SA1 X5+5 BX0 X1 TEXT FILE LINE ADVANCE REWIND X5 READ X2 RTF3 READC X2,LBUF,LBUFL SX0 X0-1 NZ X0,RTF3 IF ADVANCE INCOMPLETE SX7 B6 BX1 X1-X1 SA7 LBL RTF SUBR ENTRY/EXIT MX2 -4 SA1 FBB BX4 -X2*X1 ISOLATE ORIGINAL READ FILE BIAS SA3 PFADR SX2 X4+F INITIAL READ FILE FET BX2 X3-X2 ZR X2,RTF2 IF READ FILE IS PRIMARY FILE BX2 X5-X3 NZ X2,RTF2 IF SCRATCH FILE SA3 X5+5 BX0 X3 SET LINE ADVANCE REWIND X5 READ X2 REPOSITION PRIMARY FILE RTF1 READC X2,LBUF,LBUFL SX0 X0-1 NZ X0,RTF1 IF NOT REPOSITIONED MX2 -4 SA1 FBB BX3 -X2*X1 BIAS FOR ORIGINAL READ FILE SX5 X3+F EQ RTF2 REPOSITION SECONDARY FILE SBT SPACE 4,12 ** SBT - SET BLANK TERMINATOR. * * ENTRY (X1) = END OF LINE POINTER WORD. * * EXIT (X1) = UPDATED END OF LINE POINTER WORD. * (X6) = LAST WORD IN LINE. * (B6) = NUMBER OF BLANKS ADDED. * (LBL) = END OF LINE ADDRESS. * * USES A - 3, 4, 6, 7. * B - 3. * X - 1, 3, 4, 6, 7. SBT1 SX7 A6+B1 SX1 X1+B1 INCREMENT CHARACTER POSITION SX3 X1-10 NZ X3,SBT2 IF NOT FULL WORD SX1 B0 SX4 X4+B1 SBT2 LX1 24 BX1 X1+X4 FORM NEW END OF LINE POINTER WORD SA7 LBL SET END OF LINE ADDRESS SBT SUBR ENTRY/EXIT SB6 B0 NG X1,SBTX IF END OF LINE SET SB6 B1 SA4 X1 GET LAST WORD AX1 24 SA3 X1+TCHM GET MASK BX6 X3*X4 CX7 X3 SB3 X7-54 SX3 1R AX3 B3,X3 POSITION BLANK CHARACTER BX6 X6+X3 SX3 X1-8 SA6 A4 SX4 A4 NG X3,SBT1 IF END OF LINE ALREADY SET BX6 X6-X6 SA6 A6+B1 SET END OF LINE EQ SBT1 SFS SPACE 4,14 ** SFS - SEARCH FILE FOR STRING. * * ENTRY (X0) = 0 SEARCH BEFORE WRITE/READ. * " 0 WRITE/READ BEFORE SEARCH. * (X6) = STRING POINTER ADDRESS. * * EXIT (X7) " 0 IF STRING FOUND. * = 0 IF EOF. * * USES A - 0, 2, 4, 6, 7. * B - 2, 6, 7. * X - 0, 2, 4, 5, 6, 7. * * CALLS RDC=, SLS, WTC=. SFS SUBR ENTRY/EXIT ZR X6,SFS1 IF STRING ADDRESS SET PREVIOUSLY SA6 SFSA SAVE STRING POINTER ADDRESS SFS1 SB2 X0 BX0 X0-X0 ZR B2,SFS4 IF SEARCH BEFORE WRITE/READ SFS2 WRITEC A5+,LBUF SFS3 READC X5,LBUF,LBUFL NZ X1,SFS5 IF END OF DATA ENCOUNTERED SX0 X0+B1 SA0 B6 SFS4 SA2 SFSA GET STRING POINTER SA2 X2 RJ SLS NZ B7,SFS2 IF STRING NOT FOUND ZR X0,SFSX IF STRING IN ORIGINAL LINE SA2 X5+5 IX6 X2+X0 ADVANCE READ FILE LINE COUNT SA6 A2 BX0 X0-X0 SX6 A0 SAVE END OF LINE ADDRESS SA6 LBL EQ SFSX RETURN SFS5 SX0 0 SA4 PFADR BX7 X4-X5 BX5 X4 SA1 FBB TEXT FILE BECOMES NEW READ FILE MX2 56 BX1 X2*X1 SX2 X5-F READ FILE BIAS BX6 X1+X2 SA6 A1 UPDATE WRITE/READ FILE BIAS NZ X7,SFS3 IF NOT READING PRIMARY TEXT FILE SA7 EOFTF EQ SFSX RETURN SFSA CON 0 STRING POINTER ADDRESS SLS SPACE 4,18 ** SLS - SEARCH LINE FOR STRING. * * ENTRY (X1) = 0 BEGIN SEARCH AT ADDRESS IN *LBA*. * (X1) .NE. 0 BEGIN SEARCH AT POINTER IN *LBW*. * (X2) = STRING LENGTH AND ADDRESS. * * EXIT (B7) = 0 IF STRING FOUND. * (X7) - LBW. * (X6) - FBW. * (A6) - ADDRESS OF FBW. * (A7) - ADDRESS OF LBW. *T, FBW 36/ N1,24/ A1 *T, LBW 36/ N2,24/ A2 * * N1 = POSITION OF LEADING CHARACTER IN STRING, .LE. 9. * A1 = ADDRESS OF WORD CONTAINING *N1*. * N2 = POSITION + 1 OF LAST CHARACTER IN STRING, .LE. 9. * A2 = ADDRESS OF WORD CONTAINING *N2*. * * USES A - 1, 2, 3, 4, 6, 7. * B - 2, 3, 4, 5, 6, 7. * X - 1, 2, 3, 4, 6, 7. SLS10 SX6 B5-B1 LX6 24 SX1 A1 LINE ADDRESS OF BEGINNING OF STRING SX7 B2 BX6 X1+X6 SX4 A3 FORM POINTER TO END OF STRING SA6 FBW LX7 24 SB4 B6-B2 SA2 TCHM+B4 SET MASK IX7 X7+X4 BX3 X2*X3 NZ X3,SLS12 IF NOT END OF LINE NG X3,SLS12 IF WORD OF SEMI-COLONS NE B4,B1,SLS11 IF END OF LINE SA3 A3+1 NEXT WORD IN LINE NZ X3,SLS12 IF NOT ZERO WORD NG X3,SLS12 IF NOT END OF LINE SLS11 MX1 1 BX7 X1+X7 SLS12 SB7 B0+ SA7 LBW SLS SUBR ENTRY/EXIT ZR X1,SLS1 IF SEARCH BEGINS AT START OF LINE SX1 LBW-LBA SLS1 SA4 X2 FIRST STRING CHARACTER AX2 24 SA3 X1+LBA BEGINNING SEARCH ADDRESS SB7 X2 NG X3,SLSX IF POINTER MARKED END OF LINE BX6 X1 ZERO INDICATES NO PREVIOUS WORD SA1 X3 SB6 10 AX3 24 SB5 X3 POSITION OF ELEMENT IN WORD (0-9) LX2 B1,X3 LX3 2 FORM SHIFT COUNT IX2 X3+X2 CHARACTER POSITION * 6 SB4 X2 SHIFT COUNT FOR FIRST WORD LX1 B4,X1 POSITION FIRST CHARACTER BX7 -X4 COMPLEMENT OF FIRST STRING CHARACTER MX4 -6 EQ SLS3 SLS2 MX3 -12 BX2 -X3*X1 CHECK END OF LINE BYTE SB5 B0+ ZR X2,SLSX IF END OF LINE BX6 X1 SAVE PREVIOUS WORD (FOR ASCII) SA1 A1+B1 * LOOP TO LOCATE FIRST STRING CHARACTER IN LINE. SLS3 EQ B5,B6,SLS2 IF LAST CHARACTER IN WORD LX1 6 SB5 B5+B1 BX2 -X4*X1 ISOLATE CHARACTER IX3 X2+X7 NZ X3,SLS3 IF NO MATCH NZ X2,SLS5 IF SEARCH CHARACTER NOT A *00* NE B5,B6,SLS4 IF COLON NOT AT END OF WORD SA2 A1+1 GET NEXT SEARCH WORD NZ X2,SLS5 IF NOT ZERO WORD PL X2,SLSX IF END OF LINE EQ SLS5 SLS4 SX2 B6-B5 SA2 X2+TCHM GET MASK BX2 X2*X1 INITIALIZE REMAINING CHARACTERS ZR X2,SLSX IF END OF LINE * CODE TO CHECK PREVIOUS CHARACTER FOR ASCII ESCAPE * CHARACTER EXECUTED ONLY IF IN ASCII MODE. SLSA BSS 0 SLS5 EQ SLS7 * EQ B5,B1,SLS6 (ASCII MODE) * BX6 X1 (ASCII MODE) * LX6 54 (ASCII MODE) SLS6 ZR X6,SLS7 IF NO PREVIOUS WORD BX2 -X4*X6 ISOLATE PREVIOUS CHARACTER SX3 X2-76B ZR X3,SLS3 IF 76B ESCAPE CODE SX3 X2-74B ZR X3,SLS3 IF 74B ESCAPE CODE SLS7 SB3 B0 SA2 A4 SA3 A1 SB2 B5 BX3 X1 EQ B2,B6,SLS9 IF CHARACTER LAST IN WORD * LOOP CHECKING REMAINDER OF PHRASE. SLS8 SB3 B3+B1 COUNT CHARACTERS FOUND EQ B3,B7,SLS10 IF SEACH COMPLETE LX3 6 SA2 A2+B1 NEXT STRING ELEMENT BX6 -X4*X3 SB2 B2+B1 ADVANCE CHARACTER POINTER BX6 X6-X2 NZ X6,SLS3 IF NO MATCH EQ B2,B6,SLS9 IF AT END OF WORD NZ X2,SLS8 IF SEARCH CHARACTER NOT A *00* SB4 A2 SX2 B6-B2 SA2 X2+TCHM GET MASK BX2 X2*X3 INITIALIZE REMAINING CHARACTERS ZR X2,SLSX IF END OF LINE SA2 B4+ EQ SLS8 SLS9 SB2 B0 SA3 A3+B1 NZ X2,SLS8 IF SEARCH CHARACTER NOT A *00* NZ X3,SLS8 IF NOT ZERO WORD PL X3,SLSX IF END OF LINE EQ SLS8 * ASCII MODE CODE REPLACES SLSA. SLSB EQ B5,B1,SLS6 IF FIRST CHARACTER IN WORD BX6 X1 LX6 54 POSITION CURRENT CHARACTER TCHM SPACE 4 ** TCHM - TABLE OF CHARACTER MASKS. TCHM BSS 0 DATA 0 DATA 77000000000000000000B DATA 77770000000000000000B DATA 77777700000000000000B DATA 77777777000000000000B DATA 77777777770000000000B DATA 77777777777700000000B DATA 77777777777777000000B DATA 77777777777777770000B DATA 77777777777777777700B DATA 77777777777777777777B SLT SPACE 4,9 ** SLT - SET LINE TERMINATOR. * * ENTRY (X1) = END OF LINE POINTER WORD. * * EXIT (X6) = LAST WORD IN LINE. * (B6) = NUMBER OF BLANKS ADDED OR REMOVED (NEGATIVE). * * USES A - 3, 4, 6, 7. * B - 2, 3. * X - 1, 3, 4, 6, 7. SLT3 SX7 B2+B1 SET END OF LINE ADDRESS SA6 B2 SA7 LBL SLT SUBR ENTRY/EXIT NG X1,SLTX IF END OF LINE SET RJ BLK CHECK FOR COLON AT END OF LINE SA4 X1 AX1 24 SB2 A4 SET LWA SA3 X1+TCHM LX1 59-0 BX6 X3*X4 PL X1,SLT3 IF EOL ON BYTE BOUNDARY CX7 X3 SX1 1R *100B SB3 X7-54 AX4 B3,X1 POSITION BLANK CHARACTER BX7 X6-X4 SA3 A3-B1 CHECK FOR ODD CHARACTER BLANK BX1 -X3*X7 NZ X1,SLT2 IF NOT BLANK NZ X3,SLT1 IF PRECEDING CHARACTER IN SAME WORD SA1 B2-B1 BX7 X1 SA3 TCHM+10 SLT1 SA3 A3-B1 CHECK PRECEDING CHARACTER FOR *00* BX1 -X3*X7 ZR X1,SLT2 IF *00* LX4 6 SB3 B1 SB6 B6-2 SLT2 LX4 54 POSITION BLANK CHARACTER BX6 X6-X4 SB6 B6+1 NZ B3,SLT3 IF NOT ON WORD BOUNDARY SB2 B2+1 SA6 A4 BX6 X6-X6 CLEAR END OF LINE EQ SLT3 SML SPACE 4,11 ** SML - SEARCH MODIFIED LINE. * * ENTRY (X6) = STRING POINTER ADDRESS. * (X1) - SEE *SLS*. * * EXIT (X7) " 0 IF STRING FOUND. * * USES A - 1, 2. * B - NONE. * X - 0, 1, 2, 6. * * CALLS SLS, SLT, SFS. SML1 SA1 SLP SET LINE TERMINATOR RJ SLT BX6 X0 SEARCH FILE FOR STRING RJ SFS SML SUBR ENTRY/EXIT BX0 X6 SA2 X6 SEARCH LINE FOR STRING RJ SLS NZ B7,SML1 IF NOT IN CURRENT LINE EQ SMLX SRO SPACE 4,15 ** SRO - SEARCH READ ONLY. * * ENTRY (X0) = 0 SEARCH BEFORE READ. * " 0 READ BEFORE SEARCH. * (X6) = STRING POINTER ADDRESS. * * EXIT (X7) " 0 IF STRING FOUND. * = 0 IF EOF. * (B2) = NUMBER OF LINES READ. * (B4) = NUMBER OF LINES ADVANCED IN CURRENT READ FILE. * * USES A - 2, 3, 4, 6. * B - 2, 6, 7. * X - 0, 2, 3, 4, 5, 6, 7. * * CALLS RDC=, SLS. SRO4 SX6 X0+ SA6 SROC SAVE PREVIOUS LINE ADVANCE CEPF SRO2,4 SX0 0 SRO SUBR ENTRY/EXIT ZR X6,SRO1 IF STRING POINTER SET PREVIOUSLY SA6 SROA SAVE STRING POINTER SRO1 SB2 X0 BX0 X0-X0 SX6 B0+ SA6 SROC CLEAR PREVIOUS LINE ADVANCE ZR B2,SRO3 IF SEARCH BEFORE READ SRO2 SB7 LBUFL SET LINE LENGTH SA3 LBA READC X5,X3,B7 NZ X1,SRO4 IF NO DATA TRANSFERED SA0 B6 SX0 X0+B1 ADVANCE LINE COUNT SRO3 SA2 SROA GET STRING POINTER SA2 X2+ RJ SLS SEARCH LINE FOR STRING NZ B7,SRO2 IF STRING NOT FOUND SA2 SROC GET PREVIOUS LINE ADVANCE IX2 X0-X2 SB4 X2 LINE ADVANCE ON CURRENT READ FILE SB2 X0 BX0 X0-X0 ZR B2,SROX IF FILE NOT ADVANCED SX6 A0+ SA6 LBL EQ SROX RETURN SROA CON 0 STRING POINTER SROC CON 0 PREVIOUS LINE ADVANCE SVR SPACE 4 ** SVR - SAVE WORKING REGISTERS. * * EXIT FOLLOWING REGISTERS SAVED. * X - 0, 1, 2, 6. SVR SUBR ENTRY/EXIT SA6 SVRA X6 BX7 X1 X1 SA7 A6+B1 BX6 X0 X0 SA6 A7+B1 BX7 X2 X2 SA7 A6+B1 EQ SVRX SVRA BSS 4 REGISTER SAVE AREA WNL SPACE 4,19 ** WNL - WRITE NEW ALIGNED LINE. * * NEW ALIGNED LINE WRITTEN FROM CHARACTER BUFFER, * IF NON-BLANK. * * ENTRY (B5) = CURRENT CHARACTER ADDRESS IN NEW LINE. * (B6) = CURRENT CHARACTER ADDRESS IN OLD LINE. * (X0) = LWA+1 LAST COMPLETE WORD IN NEW LINE. * (X0) = 0, IF NEW LINE WIDTH .LT. WORD SIZE. * (X3) = 0, IF ENTIRE NEW LINE TO BE FLUSHED. * * EXIT (B4) = MAXIMUM LWA+1 NEW LINE. * (B5) = FWA NEW LINE BUFFER. * (B6) = CURRENT CHARACTER ADDRESS IN OLD LINE. * * USES A - 0, 1, 3, 7. * X - 0, 1, 3, 4, 7. * B - 2, 4, 5, 6. * * CALLS WTS=. WNL SUBR ENTRY/EXIT SA1 STRA SX7 1R IX4 X1-X7 SB2 A1 NZ X4,WNL1 IF FIRST CHARACTER NOT BLANK SB2 B2+5 WNL1 LE B5,B2,WNLX IF NEW LINE ALREADY FLUSHED ZR X3,WNL2 IF ENTIRE LINE TO BE FLUSHED SA1 B6 GET NEXT CHARACTER IN OLD LINE IX1 X1-X7 ZR X1,WNL2 IF NEXT CHARACTER BLANK NZ X0,WNL3 IF AT LEAST ONE COMPLETE WORD IN NEW LINE WNL2 SX0 B5+ SA0 B6+ WNL3 SA1 X0-1 NZ X1,WNL4 IF LAST CHARACTER NOT COLON SA7 X0+ SX0 X0+1 WNL4 WRITES A5,STRA,X0-STRA SB5 STRA SA3 WDTH SB4 X3+B5 SB6 A0 EQ WNLX END TITLE END COMMAND PROCESSOR. *** END - PROCESS *END* COMMAND. END BSS 0 SA1 EOFTF SX2 A5+ ZR X1,END2 IF POSITIONED AT EOF WRITEC X2,LBUF END1 READW X5,LBUF,CBUFL SB7 B6-LBUF SET NUMBER WORDS TO WRITE BX0 X1 SX2 A5 WRITE FILE FET ADDRESS WRITEW X2,LBUF,B7 ZR X0,END1 IF COPY INCOMPLETE CEPF END1,4 END2 WRITER X2,R FLUSH BUFFER SA3 DAFF ZR X3,END7 IF DIRECT ACCESS FILE RENAME X2,TFILE RENAME FINAL COPY END3 REWIND X2 SB3 S SB4 M LAST FILE TO BE RETURNED END4 SX3 A5-B3 ZR X3,END5 IF FILE CONTAINING FINAL COPY RETURN B3 END5 SB3 B3+FETL LE B3,B4,END4 IF NOT ALL FILES RETURNED END6 WRITEC O,(=C* END TEXT EDITING.*) WRITER X2 END TEXT EDITING ENDRUN END7 SX4 X2-F ZR X4,END3 IF FINAL COPY PERMANENT REWIND F SA0 X2 REWIND A5 READ X2 MAKE FINAL COPY PERMANENT END8 READW A5,LBUF,CBUFL SB7 B6-LBUF BX0 X1 SX2 A0 WRITEW X2,LBUF,B7 ZR X0,END8 IF COPY NOT COMPLETE WRITER X2,R SA5 X2 EQ END3 RETURN SCRATCH FILES TITLE COMMON DECKS. *CALL COMCUSB *CALL COMCSYS *CALL COMCCIO *CALL COMCRDS *CALL COMCLFM *CALL COMCRDW *CALL COMCRDC *CALL COMCSFN *CALL COMCWTW *CALL COMCWTS *CALL COMCWTC *CALL COMCCDD *CALL COMCPFM IDENT SPACE 4 IDENT FORCE LITERALS PRS TITLE PRESET. EDIT BSS 0 PRS SB1 1 PRS1 SB2 CCDR UNPACK COMMAND SB6 CCBL RJ USB SX2 1R9+1 SET DELIMITER CHECK PRS2 SA1 B6 ADVANCE CHARACTER SB6 B6+B1 IX3 X1-X2 CHECK FOR END OF PROGRAM NAME\ ZR X1,ERR IF TERMINATION NG X3,PRS2 IF NOT END OF PROGRAM NAME SB3 X1-1R. SB4 X1-1R) SX1 X1-1R ZR B3,PRS3 IF NO ARGUMENTS ZR B4,PRS3 IF NO ARGUMENTS ZR X1,PRS2 IF SPACE (IGNORE) SB3 TARG SET ARGUMENT TABLE ADDRESS SB2 TARGL SET ARGUMENT TABLE LENGTH SB4 PRSD SET STRING BUFFER ADDRESS RJ CPA CONVERT POSITIONAL ARGUMENTS NG B5,ERR IF ERROR IN CONVERSION PL X1,PRS3 IF NO ARGUMENTS PROCESSED SX6 B5 SET UP PARAMETER CRACKING SB6 PRSD SA6 USBC RJ ARM CRACK PARAMETERS NZ X1,ERR IF ERROR IN PARAMETERS MX0 42 CHECK FOR RESERVED FILE NAMES SA3 TFILE BX7 X3 SA7 F BX4 X3*X0 SA3 A7 RJ CRN ZR X7,ERR1 IF FILE NAME RESERVED SA3 I BX4 X3*X0 RJ CRN ZR X7,ERR1 IF FILE NAME RESERVED SA3 O BX4 X3*X0 RJ CRN ZR X7,ERR1 IF FILE NAME RESERVED PRS3 SX2 I SET TERMINAL FILE RJ STF SA6 EOFIF SET FILE STATUS SA6 JOTY BX5 X6 ZR X6,PRS4 IF INTERACTIVE JOB READ X2 INITIAL DIRECTIVE READ EQ PRS5 EVICT SCRATCH FILES PRS4 DISTC ON,TINT SET TERMINAL CONTROLS PRS5 EVICT S EVICT SC EVICT B EVICT M EVICT T SA3 O SET OUTPUT FET POINTER MX0 42 SX2 A3 BX3 X0*X3 BX6 X3+X2 SX7 1R SET NON-ZERO WORD PAD BEFORE LINE BUFFERS SA6 ARGR SA7 LBUF-1 SA7 TBUF-1 SA4 ASC CHECK EDIT MODE ZR X4,PRS8 IF NO MODE PARAMETER PRESENT SA1 MARG-1 CHECK MODE PARAMETER MX0 42 BX4 X4*X0 PRS6 SA1 A1+B1 CHECK NEXT TABLE ITEM SB2 X1 ZR X1,ERR IF ITEM NOT IN TABLE BX6 X1*X0 IX7 X6-X4 COMPARE TABLE ITEM TO MODE NZ X7,PRS6 IF NO MATCH BX0 X5 SET INTERACTIVE I/O EQ B2,B0,PRS7 IF *NORMAL* OPTION * PROCESS *ASCII* OPTION. SX6 -76B SET ASCII INDICATOR TO ASCII SA6 ASC SA1 SLSB PRESET ASCII CODE SA2 ANCB BX6 X1 LX7 X2 SA6 SLSA SA7 ANCA NZ X0,PRS8 IF NOT INTERACTIVE I/O CSET ASCII EQ PRS8 * PROCESS *NORMAL* OPTION. PRS7 SX6 B0+ SET ASCII INDICATOR TO NORMAL SA6 ASC NZ X0,PRS8 IF NOT INTERACTIVE I/O CSET NORMAL PRS8 SX3 B1 CHECK EDIT FILE SA4 TFILE IX4 X4-X3 NZ X4,PRS11 IF EDIT FILE SPECIFIED NZ X5,ERR IF NOT INTERACTIVE JOB WRITEC O,PRSA * ENTER TEXT FILE NAME.* READ I GET EDIT FILE NAME SA0 LBUF READS X2,A0,-30 NZ X1,ERR IF EOF (CR) ON INPUT SB2 A0-B1 BX6 X6-X6 CLEAR ACCUMULATOR SB5 60 SB3 7 * ASSEMBLE FILE NAME. PRS9 RJ ANC ASSEMBLE NEXT CHARACTER EQ B2,B6,PRS10 IF END OF INPUT SX1 X2-1R ZR X1,PRS9 IF BLANK CHARACTER ZR X4,ERR IF NOT ALPHANUMERIC CHARACTER SX1 X4-1R+ PL X1,ERR IF NOT ALPHANUMERIC CHARACTER SX1 X3-74B ZR X1,ERR IF 74B ESCAPE CODE SB3 B3-1 NG B3,ERR IF FILE NAME TOO LONG SB5 B5-6 LX1 B5,X4 BX6 X6+X1 ADD CHARACTER TO ACCUMULATOR EQ PRS9 PRS10 BX4 X6 CHECK FILE NAME ZR X4,PRS9 IF NO FILE NAME SA3 B0 RJ CRN CHECK FOR RESERVED FILE NAME ZR X7,ERR1 IF FILE NAME RESERVED SX5 B1 BX7 X4+X5 SA7 TFILE SA7 F SET FILE NAME IN FET PRS11 SA1 F SET FILE NAME IN *FILINFO* BLOCK MX0 42 BX1 X0*X1 SA2 FINB BX6 X1+X2 MX0 -6 SA6 A2 FILINFO A2 GET FILE INFORMATION SA1 FINB+1 CHECK FILE TYPE BX6 -X0*X1 LX1 59-7 CHECK FILE MODE SX6 X6-4 INITIALIZE DIRECT ACCESS FILE FLAG SA6 DAFF ZR X1,PRS11.2 IF FILE NOT FOUND SA3 JOTY CHECK FOR INTERACTIVE JOB NZ X3,PRS11.2 IF NOT TERMINAL INPUT NG X1,PRS11.2 IF EDIT FILE IN WRITE MODE WRITEC O,PRSE *EDIT FILE NOT IN WRITE MODE.* WRITEC O,PRSF *DO YOU WISH TO CONTINUE* PRS11.1 SB6 LBUF FWA WORKING BUFFER RJ PUR PROCESS USER RESPONSE RJ CTI CHECK TERMINAL INTERRUPTS NZ X3,END6 IF TERMINAL INTERRUPT ZR X4,END6 IF *NO* RESPONSE PL X4,PRS11.2 IF *YES* RESPONSE WRITEC O,PCCD REQUEST *YES* OR *NO* RESPONSE EQ PRS11.1 PROCESS USER RESPONSE PRS11.2 REWIND F READ X2 READC X2,LBUF,LBUFL SX7 B1 SX6 B6 NZ X1,PRS12 IF EDIT FILE EMPTY SA7 EOFTF SA6 LBL PRS12 SA5 SC SA7 F+5 SX5 F RJ CTI CHECK TERMINAL INTERRUPT NZ X3,END6 IF INTERRUPTED WRITEC O,PRSB * BEGIN TEXT EDITING.* JP MAIN BEGIN TEXT EDITING ERR SPACE 4 ** ERR - ISSUE COMMAND ERROR MESSAGE. * * ENTRY (B6) = ERROR MESSAGE ADDRESS, IF ENTRY AT *ERR1*. ERR SB6 PRSC * COMMAND ERROR.* ERR1 MESSAGE B6,3 ISSUE ERROR MESSAGE ABORT TARG SPACE 4 ** TARG - TABLE OF ARGUMENTS. TARG BSS 0 FN ARG ST,TFILE,400B,0 M ARG ST,ASC,0,1 I ARG ST,I,,0 L ARG ST,O,,0 ARG TARGL EQU *-TARG-1 ARGUMENT TABLE LENGTH ST CON 1 DEFAULT FET STATUS MARG SPACE 4 ** MARG - TABLE OF MODE ARGUMENTS. MARG BSS 0 VFD 42/0LASCII,18/1 VFD 42/0LAS,18/1 VFD 42/0LNORMAL,18/0 VFD 42/0LN,18/0 CON 0 SPACE 4,10 FINB BSS 0 *FILINFO* PARAMETER BLOCK VFD 42/0,6/5,12/1 BSSZ 4 SPACE 4 ** COMMON DECKS. *CALL COMCARM *CALL COMCCPA *CALL COMCPOP *CALL COMCSTF PRSA SPACE 4 ** PRESET MESSAGES. PRSA DATA C* ENTER TEXT FILE NAME."CB"* PRSB DATA C* BEGIN TEXT EDITING.* PRSC DATA C* COMMAND ERROR.* PRSE DATA C* EDIT FILE NOT IN WRITE MODE.* PRSF DATA C* DO YOU WISH TO CONTINUE"CB"* * COMMAND STRING BUFFER. PRSD EQU * * BSS 200 BUFFERS TITLE BUFFERS. CMDB EQU PRS STRB EQU CMDB+CMDBL STRA EQU STRB+1 IFLT CMDBL+STRBL+2,FBUFL LBUF EQU CMDB+FBUFL ELSE 1 LBUF EQU STRA+STRBL+1 TBUF EQU LBUF+LBUFL+1 IFLT LBUFL*3,CBUFL OBUF EQU LBUF+CBUFL ELSE 1 OBUF EQU TBUF+2*LBUFL IBUF EQU OBUF+OBUFL MBUF EQU IBUF+IBUFL BBUF EQU MBUF+MBUFL FBUF EQU BBUF+BBUFL SBUF EQU FBUF+FBUFL SCBUF EQU SBUF+FBUFL USBB EQU SCBUF+FBUFL RFL= EQU USBB+CCBL+4 ALFL EQU USBB+USBBL+4 END