ASMB,R,L,B,C  **  R/T  E D I T O R  **
      HED     ***  R/T   E D I T O R   ***
      NAM EDIT,3,99,0,0,0,0,0,0 
* 
      EXT  .OPSY
      EXT  EXEC 
* 
      SUP 
* 
*###################  VERSION:  AUG   1969   ###########################
* 
* 
* THE R/T E D I T O R IS DESIGNED TO BE INCORPORATED
* INTO THE ENVIRONMENT OF THE REAL-TIME EXECUTIVE 
* AS A GENERAL-PURPOSE "BACKGROUND DISC-RESIDENT" 
* PROGRAM.  IT IS A MODIFIED VERSION OF THE STANDARD
* ABSOLUTE VERSION OF THE "SYMBOLIC EDITOR".
* 
*  THE R/T EDITOR PROVIDES THE SOFTWARE FACILITY
* FOR EDITING AND UPDATING SYMBOLIC SOURCE FILES
* 
*   'EDIT FILE' - CONTAINS CONTROL STATEMENTS AND 
*                 UPDATE STATEMENTS DIRECTING THE 
*                 EDITING OF THE SYMBOLIC FILE. 
* 
*   'SYMBOLIC FILE' - CONTAINS ASCII RECORDS
*                 (SYMBOLIC SOURCE STATEMENTS)
*                 WHICH ARE TO BE EDITED. 
* 
*   'UPDATED FILE'  - CONTAINS THE NEW SYMBOLIC 
*                 RECORDS RESULTING FROM EDITING
*                 THE SYMBOLIC FILE.
* 
*  SELECTED STATEMENTS (RECORDS) AND/OR SELECTED
* CHARACTERS WITHIN STATEMENTS IN A SYMBOLIC FILE 
* MAY BE EDITED BY THE CONTROL STATEMENTS:
* 
*     /I,N            INSERT RECORD(S)
*     /D,N1[,N2]      DELETE RECORD(S)
*     /R,N1[,N2]      REPLACE RECORD(S) 
* 
*     /CI,N,C         INSERT CHARACTER(S) 
*     /CD,N,C1[,C2]   DELETE CHARACTER(S) 
*     /CR,N,C1[,C2]   REPLACE CHARACTER(S)
* 
*     /E              DENOTES END OF 'EDIT FILE'
* 
*     /A              ABORT EDIT OPERATION
************************ REVISION 1621 ************************** 
*                        DATE: 5/20/76
*                        W. P. BECKER 
* 
*  THIS REVISION ADDS SREAD AND %WRIS FROM THE 24151 LIBRARY
*  TO EDIT.  WITHOUT THIS MOD, EDIT WOULD NOT WORK IN THE SAME
*  SYSTEM WITH THE 24998 LIBRARY. 
* 
* 
***   EDIT FILE INPUT SECTION   *** 
* 
ED02  LDB  EDAD    (EDAD) = ADDRESS FOR EDIT FILE 
      INB           INPUT. SET FOR (EDAD + 1. 
      STB  EFBAD    SET IN INPUT REQUEST
* 
* 
      JSB  EXEC    INPUT
      DEF  *+5      1 RECORD
      DEF  C.01     FROM
      DEF  EFLUN    EDIT FILE.
EFBAD NOP           --VARIABLE BUFFER ADDRESS,
      DEF  CM72     MAX 72 CHARACTERS.
* 
      SZB          IF END-OF-TAPE, CONTINUE.
      JMP  ED04     RECORD IN, PROCESS. 
* 
      JSB  EXEC    CALL FOR 
      DEF  *+2      PROGRAM 
      DEF  C.07     SUSPENSION
* 
      JMP  ED02    ON 'GO', RE-ISSUE INPUT REQUEST. 
* 
* 
ED04  LDA  B       # CHARS. INPUT TO A. 
      STA  CSAF     SET CSAF NON-ZERO FOR INPUT.
      CMB          SET CHAR. CNT NEG AND SAVE FOR 
      STB CHCT       THE -GETC- ROUTINE.
      STA EDAD,I    STORE CHAR. CNT IN FIRST WORD 
      RAR           CONVERT CHAR. CNT TO WORDS
      SSA           IF SIGN SET, ODD NO. OF CHARS.
      INA            AND ADD 1 TO WORD CNT. 
      AND CHMK      REMOVE SIGN BIT IF SET
      INA           ADD 1 FOR FIRST WORD
      STA FFCT       AND SAVE LENGTH TEMPORARILY
      LDA EDAD       SET STARTING ADDRESS 
      INA            OF STATEMENT IN CSAD 
      STA CSAD       FOR -GETC- ROUTINE 
      LDA M525      ALSO. INITIALIZE UPPER/LOWER
      STA F525       CHAR. POSITION FLAG. 
      JSB GETC      GET FIRST NON-BLANK CHARACTER 
      SZA,RSS        IF ALL-BLANKS THEN 
      JMP ED.4       STATEMENT IS FOR UPDATE
      CPA SLSH      CHECK CHAR. FOR A SLASH 
      JMP *+2       YES 
      JMP ED.4      NO
      JSB GETC      CHECK NEXT CHAR.
      SZA,RSS      IF END-OF-STATEMENT, SKIP
      JMP ED.4       NEXT CHECK 
      CPA SLEN      CHECK FOR E  (FOR /E) 
      JMP ED05       YES
      CPA SLAB      IF "/A" INPUT, THEN 
      JMP EN08      ABORT EDIT OPERATION
* 
*  FOLLOWING SECTION CHECKS CONTROL STATEMENT AND 
*   PARAMETER LEGALITY DURING EDIT FILE INPUT.
* 
      STA CSFL      SAVE CONTROL IDENTIFIER 
      CPA SLIN
      JMP ED043     *I* 
      CPA SLDL
      JMP ED043     *D* 
      CPA SLRP
      JMP ED043     *R* 
      CPA SLCH
      RSS           *C* 
      JMP ILCS      ILLEGAL CONTROL STATEMENT 
      JSB GETC      *C*, GET NEXT CHARACTER 
      SZA,RSS       -ERROR IF REST
      JMP ILCS       OF STATEMENT BLANK.
      STA CSFL      SAVE NEXT IDENTIFIER. 
      CPA SLIN      CHECK FOR LEGALITY
      JMP ED041     *I* 
      CPA SLDL
      JMP ED041     *D* 
      CPA SLRP
      RSS           *R* 
      JMP ILCS      ILLEGAL CONTROL STATEMENT 
ED041 JSB GETC      GET NEXT CHARACTER
      SZA,RSS       ERROR IF NO NON-BLANK 
      JMP ILCS       CHARACTERS PRESENT.
      CPA COMA      ERROR IF
      RSS            CHARACTER
      JMP ILCS        NOT A COMMA.
      LDB C.04      CONVERT FIELD 
      JSB CONV       N - SEQUENCE NUMBER. 
      SZB,RSS       ERROR IF END OF 
      JMP ILCS       STATEMENT REACHED
      JSB CKSEQ     CHECK VALUE OF -N-. 
      LDB C.02      CONVERT 
      JSB CONV       FIELD C1.
      SZA,RSS       ERROR IF
      JMP NERR       C1 = 0.
      STA CBUF+1    SAVE C1.
      ADA CM73      IF C1 IS
      SSA,RSS        GT 72, 
      JMP NERR        THEN ILLEGAL VALUE. 
      SZB,RSS       IF NO C2, 
      JMP ED.4       GO TO GET NEXT STATEMENT 
      LDB C.02      CONVERT 
      JSB CONV       FIELD-C2-. 
      SZA,RSS       ERROR IF
      JMP NERR       C2 = 0.
      SZB           ERROR IF STATEMENT
      JMP ILCS       IS NOT TERMINATED BY C2. 
      STA 1         ERROR 
      ADB CM73       IF C2
      SSB,RSS         GT
      JMP NERR         72.
      CMA,INA       ERROR IF
      ADA CBUF+1     C2 LT OR 
      SSA,RSS          EQUAL TO 
      JMP ILCS      C1. 
ED042 LDA CSFL      IF STATEMENT IS AN *I* OR 
      CPA SLIN       A *CI*, THEN ERROR BECAUSE 
      JMP ILCS       N2 OR C2 IS PRESENT. 
      JMP ED.4      GO TO GET NEXT STATEMENT. 
* 
* CHECK LEGALITY OF PARAMETERS FOR RECORD EDITING 
* 
ED043 JSB GETC      GET NEXT CHARACTER. 
      SZA,RSS       -ERROR IF REST OF STATEMENT 
      JMP ILCS       IS ALL BLANK.
      CPA COMA      ERROR IF NEXT 
      RSS            CHARACTER NOT
      JMP ILCS        A COMMA.
      LDB C.04      CONVERT 
      JSB CONV       FIELD -N1-.
      JSB CKSEQ     CHECK LEGALITY
      SZB,RSS       IF N2 NOT PRESENT,
      JMP ED.4       GO GET NEXT STATEMENT. 
      LDB C.04      CONVERT 
      JSB CONV       FIELD -N2-.
      JSB CKSEQ     CHECK LEGALITY
      SZB           ERROR IF N2 DOES
      JMP ILCS       NOT TERMINATE STATEMENT. 
      JMP ED042     GO TO CHECK FOR INSERT ERROR. 
* 
ED.4  LDB EDAD     SAVE CURRENT 
      STB SEDA       EDIT FILE ADDRESS. 
      ADB FFCT     COMPUTE ADDRESS FOR NEXT INPUT 
      STB EDAD       AND SAVE IN (EDAD) 
      ADB MLEN      ADD 36 (72 CHARACTERS) TO 
      LDA  1777B   CHECK FOR MEMORY OVERFLOW, 
      CMA           SUBTRACT LAST WORD ADDRESS - 1
      ADB 0         FROM (EDAD + 40)
      SSB,RSS       POSITIVE RESULT MEANS 
      JMP OVFL       OVERFLOW CONDITION 
      CLA 
      STA SEDA
      JMP ED02      NO OVERFLOW, GET NEXT RECORD
* 
*  SUBROUTINE TO CHECK SEQUENCE NUMBER LEGALITY.
*   (A) = NUMBER,  (B) IS SAVED.
CKSEQ NOP 
      SZA,RSS       IF VALUE = 0, 
      JMP NERR       ERROR
      STB CBUF+1    SAVE (B)
      STA 1         SUBTRACT VALUE (SEQUENCE
      CMB,INB        NUMBER) FROM 
      ADB SEQN       PREVIOUS NUMBER. 
      SSB,RSS       A POSITIVE VALUE MEANS CURRENT IS 
      JMP SEQE       NOT GT PREVIOUS -ERROR 
      STA SEQN      SAVE NEW VALUE
      LDB CBUF+1    RESTORE B.
      JMP CKSEQ,I   EXIT. 
* 
      SKP 
* 
* CONTROL TO THIS SECTION AFTER END RECORD
* 
ED05  LDA F.AM      RESET EDAD TO POINT TO
      STA EDAD       FIRST RECORD INPUT 
* 
      LDA ERCT
      SZA             ERRORS IN EDIT FILE ? 
      JMP ESUSP-2     YES, SUSPEND
      LDA SFLUN 
      CPA C.02      SOURCE FILE FROM DISK?
      JMP ESUSP+3 
      LDA  EOFEA   WRITE DIAGNOSTIC "END OF EDIT
      JSB  DIAG      FILE". 
ESUSP JSB EXEC      CALL FOR
      DEF  *+2      PROGRAM 
      DEF  C.07     SUSPENSION. 
* 
      CLA          CLEAR CONTROL STATEMENT
      STA CSAF      ACTIVE FLAG 
      STA SYSQ      AND SEQUENCE NUMBER.
* 
      JSB EXEC     SET
      DEF *+3       EOT 
      DEF C.03       STATUS ON
      DEF EFCON       EDIT FILE INPUT.
* 
      JSB LT.G      GENERATE LEADER OUTPUT
      ISZ PSFLG     SET PSFLG=1 FOR PASS 2
      SKP 
*  SECTION TO EXAMINE EDIT FILE RECORD
*  CONTROL IS RETURNED TO THIS SECTION
*  AFTER EACH STATEMENT IS PROCESSED. 
ED06  CLB 
      STB SEDA
      LDB EDAD      SET (B) = ADDRESS OF FIRST
      LDA 1,I       -(SET ONE-S COMPLEMENT OF CHAR. 
      CMA             COUNT IN CHCT 
      STA CHCT        FOR  -GETC- ROUTINE 
      LDA M525       ALSO, INITIALIZE UPPER/LOWER 
      STA F525        INDICATOR TO UPPER  (SIGN = 0) -
      INB           WORD OF CONTROL STATEMENT 
      STB CSAD      SET ADDRESS FOR -GETC-
      JSB GETC      GET FIRST CHARACTER 
      SZA,RSS        IF ALL-BLANK STATEMENT, GO TO
      JMP *+3        CHECK CS ACTIVE
      CPA SLSH      IF CHAR. IS A SLASH,
      JMP ED08       GO TO CS EXAMINATION SECTION 
      LDB CSAF      CHECK CONTROL STATEMENT 
      SLB,RSS        ACTIVE  (LSB OF CSAF)
      JMP ED07      NO, BYPASS RECORD 
      CPA EXMK      YES, CHECK FOR AN !.-- ! SIGNIFIES
      JMP EXMV       A CONTROL STATEMENT IS FOR UPDAT 
      LDA EDAD,I    RECORD IS TO BE OUTPUT
      LDB EDAD       TO UPDATED FILE
      INB           B = ADDRESS, A = NO. OF 
      JSB  UFOUT    CHARS. OUTPUT RECORD. 
ED07  JSB GETA      GET ADDRESS OF NEXT RECORD
      JMP ED06       AND GO PROCESS IT
* 
*  CONTROL TO THIS SECTION FOR CONTROL STATEMENT
* 
ED08  JSB GETC      GET NEXT CHARACTER. 
      CPA SLEN      TYPE
      JMP ENDX      *END* 
      CPA SLIN
      JMP INSX      *INSERT*
      CPA SLDL
      JMP DLTX      *DELETE*
      CPA SLRP
      JMP REPX      *REPLACE* 
      CPA SLCH      CHECK FOR CHAR. EDITING 
      JMP *+2        YES
      JMP ILCS       NO, ILLEGAL STATEMENT
      JSB GETC       GET NEXT CHARACTER 
      CPA SLIN
      JMP CINX      * INSERT CHAR. *
      CPA SLDL
      JMP CDEL      * DELETE CHAR. *
      CPA SLRP
      JMP CREP      * REPLACE CHAR. * 
      JMP ILCS      ILLEGAL STATEMENT 
      SKP 
* 
*  CONTROL TO THIS SECTION FOR SPECIAL STATEMENT
*   STARTED BY THE CHARACTER  !. CHARS. FOLLOWING 
*   THE ! ARE TO BE OUTPUT AS AN UPDATE STATEMENT.
* 
EXMV  LDA EDAD,I    SET A = CHAR. LENGTH OF STATEMENT 
      ADA CHCT      ADD NEGATIVE CHAR COUNT SO FAR IN 
      INA           -GETC- AND ADD ONE MORE FOR NUMBER
      CPA EDAD,I     TO !. IF ! IN LAST CHAR. OF
      JMP ED07        STATEMENT, IGNORE STATEMENT 
      LDB EDAD      SET PARAMETERS FOR -NXAD- TO
      INB            GET ADDRESS OF FIRST CHAR. 
      JSB NXAD       FOLLOWING THE !. 
      STA EXM1      STORE THIS ADDRESS AS SOURCE ADD
      LDA CHCT      GET LENGTH OF MOVE - CHARS. 
      CMA            REMAINING IN STATEMENT.
      LDB CBUF      SET TO MOVE REST OF STATEMENT 
      JSB MOVE      TO CBUF 
EXM1  NOP           -HOLDS SOURCE ADDRESS 
      LDA CHCT      GET CHARACTER LENGTH AGAIN
      CMA            AND SET ADDRESS
      LDB CBUF       OF CBUF IN B 
      JSB  UFOUT    OUTPUT STATEMENT
      JMP ED07      GO FOR NEXT STATEMENT.
* 
      SKP 
* 
* 
*  CONTROL TO THIS SECTION FOR /E STATEMENT 
* 
EN01  JSB SYMI     GET NEXT SYMBOLIC RECORD.
      SZA,RSS       CHECK EOT 
      JMP EN02       YES
      LDB SBUF      NO, SET TO OUTPUT 
      JSB  UFOUT
      JMP EN01      GET NEXT RECORD 
GFIL2 LDA 1767B 
      SZA           SOURCE DEFINED ?
      JMP GFIL1-2   YES, OK 
      LDA FLUND     NO,ERROR
      JSB DIAG      PRINT DIAGNOSTIC
      JMP EN03
GFILE LDA C.02
      STA UFLUN     LUN(OUTPUT)= 2
      CPA SFLUN     INPUT FROM DISK ? 
      JMP GFIL2 
      LDA F.AM      INITIALIZE FWA
      STA EDAD      AVAILABLE MEMORY
GFIL1 JSB %WRIN     INITIALIXE WRITE
      JMP DOVF      FULL DISK, ABORT EDIT 
      STA WTRK1     SET 1ST WRITE-TRACK 
      STA WTRKC     =CURRENT WRITE-TRACK
      JSB SYMI      GET SOURCE RECORD 
      SZA,RSS       EOF?
      JMP EN06      YES,PRINT LIST OF TRACKS,EXIT 
      LDB SBUF
      JSB UFOUT     OUTPUT RECORD 
      JMP GFIL1+4 
EN02  JSB LT.G      FINISH OUTUT TRAILER
* 
ENDX  EQU EN01
* 
      LDA SFLUN 
      CPA C.02      INPUT FROM DISK ? 
      JMP EN05      YES, RELEASE TRACKS IN OLD FILE 
EN04  LDA UFLUN 
      CPA C.02      EDITED FILE ON DISK ? 
      JMP EN06      YES,  OUTPUT LAST SECTOR, AND 
*                        PRINT LIST OF TRACKS, ETC
* END  OF  EDITING OPERATION
* 
EN03  LDA ENDED    PRINT "END OF EDIT RUN". 
      JSB  DIAG 
      JSB  EXEC     AND 
      DEF  *+2
      DEF C.06      CALL FOR COMPLETION.
LUN   BSS 1         LUN (TEMP)
TRACK BSS 1         TRACK NO. (TEMP)
EN05  LDA RTRK1 
      JSB SPLIT     SPLIT LUN,TRACK NO
      STB LUN       LUN 
      STA TRACK     TRACK NO
      JSB EXEC      RELEASE READ-TRACK (OLD FILE) 
      DEF *+5 
      DEF C.05      CODE=5
      DEF C.01      1 TRACK 
      DEF TRACK     TRACK NO
      DEF LUN       LUN 
      LDA RTRK1 
      CPA RTRKC     LAST TRACK ?
      JMP EN04      YES, READY
      JSB GLINK     GET NEXT LINK 
      STA RTRK1 
      JMP EN05+1    CONTINUE RELEASE OF OLD FILE
EN06  JSB %WEOF     OUTPUT LAST SECTOR
      LDA NFILE 
      JSB DIAG      PRINT "TRACKS IN NEW FILE:" 
      LDA WTRK1     WRITE-TRACK 
      JSB SPLIT 
      STB LUN       SAVE LUN
      JSB CNVRT     CONVERT TRACK NO TO ASCII 
      STA TRAKN+4    AND STORE FOR PRINTOUT 
      STB TRAKN+5 
      LDA LUN 
      JSB CNVRT     CONVERT LUN TO ASCII
      STB TRAKN+2 
      LDA TRAKN 
      JSB DIAG      PRINT TRACK NO. 
      LDA WTRK1 
      CPA WTRKC     LAST TRACK ?
      JMP EN03      YES,READY 
      JSB GLINK     GET NEXT LINK 
      STA WTRK1     NEXT TRACK
      JMP EN06+4    CONTINUE
*IN CASE OF ABORT, RELEASE THE NEW FILE ON DISK 
EN08  LDA UFLUN 
      CPA C.02
      RSS           EDITED FILE TO DISK 
      JMP EN03
      LDA WTRK1 
      JSB SPLIT     SPLIT LUN-TRACK NO. 
      STB LUN       LUN 
      STA TRACK     TRACK NO. 
      JSB EXEC      RELEASE WRITE-TRACK (NEW FILE)
      DEF *+5 
      DEF C.05      CODE=5
      DEF C.01      1 TRACK 
      DEF TRACK     TRACK NO. 
      DEF LUN       LUN 
      LDA WTRK1 
      CPA WTRKC     LAST TRACK ?
      JMP EN03      YES, FINISH 
      JSB GLINK     GET NEXT LINK 
      STA WTRK1 
      JMP EN08+5    CONTINUE
*SUBROUTINE TO GET NEXT TRACK NO.FROM LINK IN LAST WORD OF
*CURRENT TRACK
*CALLING SEQUENCE:
*                        LDA LINK       LINK= LUN-TRACK NO. 
*                        JSB GLINK
*                        RETURN WITH (A)= LINK WORD NEXT TRACK
* 
GLINK NOP 
      LDB =B1757     ASSUME SYSTEMS DISK FIRST
      ALF,ALF       LUN TO LOW A
      SLA           SYSTEMS DISK ?
      INB           NO, B1760 IS LOC OF AUX DISK
      ALF, ALF      RESET A 
      LDB 1,I       NO OF SECTRS/TRACK
      ADB C.M1      -1 FOR LAST SECTOR IN TRACK 
      JSB %RDSC     READ LAST SECTOR OF TRACK 
      JMP GLINK,I   EXIT
SPLIT NOP 
      CLB 
      LSL 8         LUN TO B
      ALF,ALF       TRACK NO.TO A 
      JMP  SPLIT,I
*CNVRT CONVERTS UP TO 4-DIGIT NUMBERS.
* 
*CALLING SEQUENCE:       LDA NUMBR
*                        JSB CNVRT
*                        RETURN WITH (A)-(B)= NUMBER IN ASCII,UPPER 
*                                            DIGITS IN A
CNVRT NOP 
      CLB 
      DIV =D10
      STB UNITS     SAVE UNITS
      CLB 
      DIV =D10
      STB TENS      SAVE TENS 
      CLB 
      DIV =D10
      ALF,ALF       THOUSANDS TO UPPER A
      ADA 1         HUNDREDS
      LDB TENS
      BLF,BLF 
      ADB UNITS     TENS IN UPPER, UNITS IN LOWER 
      ADA =A00      CONVERT 
      ADB =A00             TO ASCII 
      JMP CNVRT,I 
TENS  BSS 1 
UNITS BSS 1 
      SKP 
* 
*  CONTROL TO THIS SECTION FOR INSERT (RECORD)
* 
INSX  JSB GETC      GET NEXT CHARACTER
      LDB C.04      SET B FOR MAX. OF 4 DIGITS
      JSB CONV      CONVERT NUMBER
      STA N1XX       SET SEQUENCE NUMBER
      CLA             FOR N1. SET 
      STA N2XX        N2 = ZERO 
      STA CSFL      SET INSERT FLAG 
      JSB PSFX       AND POSITION SYMBOLIC FILE 
      JSB CKSL      CHECK NEXT EDIT FILE STATEMENT
      JMP INER       ERROR, IS A CONTROL STATEMENT
      JMP ED06
* 
*  CONTROL TO THIS SECTION FOR DELETE (RECORD)
*    AND REPLACE (RECORD) 
* 
DLTX  CLA,INA,RSS   SET A = 1 AND SKIP
REPX  LDA C.02      SET A = 2 FOR REPLACE 
      STA CSFL       AND SET CONTROL FLAG 
      CLA           CLEAR N2XX
      STA N2XX
      JSB GETC      GET NEXT CHARACTER
      LDB C.04      SET B FOR MAX. OF 4 DIGITS
      JSB CONV       CONVERT N1 
      STA N1XX      SET N1
      SZB,RSS        IF B = 0,
      JMP RE01        THEN NO N2. 
      LDB C.04        B = 4 
      JSB CONV      CONVERT N2
      STA N2XX       SET N2. N2 SHOULD END WITH 
RE01  JSB PSFX      POSITION SYMBOLIC FILE
      LDA CSFL       IF LSB OF CS FLAG
      SLA            = 1, DELETE STATEMENT
      JMP ED06      PROCESS NEXT STATEMENT
      JSB CKSL      REPLACE, CHECK FOR UPDATE NEXT
      JMP RPER      NO, ERROR 
      JMP ED06
* 
*  CHARACTER EDITING SECTION
* 
* 
CINX  CLA,RSS       SET A = ZERO FOR INSERT 
CDEL  CLA,INA       SET A (LSB) = 1 FOR DELETE
      RSS           SKIP
CREP  LDA CM60       SET A(15) = 1 FOR REPLACE
      STA C.FL      SET CHAR. STATEMENT FLAG
      JSB GETC       GET NEXT CHARACTER 
      CLA           SET N2 AND
      STA N2XX       C2 EQUAL 
      STA C2XX       TO ZERO
      LDB C.04       4 DIGITS TO
      JSB CONV      CONVERT N1
      STA N1XX       SET N1 AND SET TO CONVERT C1 
      LDB C.02       MAX. OF TWO CHARS. 
      JSB CONV      CONVERT C1
      STA C1XX      SET C1
      SZB,RSS        IF B = 0 8 THEN NO C2
      JMP CH01
      LDB C.02      MAX. OF TWO CHARS.
      JSB CONV      CONVERT C2
      STA C2XX      SET C2
CH01  CLA,INA       SET CSFL (LSB) = 1 TO 
      STA CSFL      TELL PSFX NOT TO PUNCH
      JSB PSFX       N TH RECORD
      LDA C1XX      SUBTRACT C1 
      CMA,INA        FROM SYM. FILE 
      ADA SYCT      RECORD LENGTH 
      SSA           IF RESULT IS NEG. C1
      JMP C.ER     TOO LARGE, CS ERROR
      LDA C2XX      SUBTRACT C2 FROM
      CMA,INA        SYM. FILE RECORD 
      ADA SYCT       LENGTH 
      SSA            IF RESULT IS NEG., C2
      JMP C.ER     TOO LARGE, CS ERROR
* 
*  THIS SECTION DETERMINES THE ORIGIN AND 
*   DESTINATION ADDRESSES PLUS THE CHARACTER LENGTH 
*   FOR THREE MOVES TO CBUF 
      LDA C1XX      IF CONTROL STATEMENT
      LDB C.FL       IS CHAR. INSERT, C1
      SZB            IS CHAR. COUNT FOR MOVE- 
      ADA C.M1         OTHERWISE, REDUCE CHAR.
      STA CMV1         CNT. BY 1 AND SET FOR MV1
      LDB SBUF      SET ORIGIN ADDRESS
      STB MOV1       FOR FIRST MOVE 
      LDB CBUF      SET DESTINATION ADDRESS 
      STB CMV1+1     FOR FIRST MOVE 
      LDA C2XX      COMPUTE MOVE 3 ORIGIN 
      SZA,RSS        ADDRESS. IF C2 IS
      LDA C1XX       NON-ZERO, USE C2 AS
      LDB SBUF       THE REFERENCE POINT
      JSB NXAD      GET NEXT ADDRESS AND
      STA MOV3      SET AS MV3 ORIGIN ADDRESS 
      LDA CMV1      GET MOVE 2 DESTINATION
      LDB CBUF       ADDRESS (CHAR CNT FOR MV1
      JSB NXAD       + CBUF)
      STA CMV2+1    SET MOVE 2 DESTINATION
      LDA C.FL      IF DELETE, SKIP UPDATE
      SLA            STATEMENT NEXT CHECK 
      JMP CH02       --DELETE 
      SSA           SKIP IF INSERT
      JMP *+4       REPLACE 
      JSB CKSL      CHECK FOR UPDATE
      JMP INER.     NO, ERROR 
      JMP CH03      YES, UPDATE NEXT
      JSB CKSL       CHECK FOR UPDATE AFTER REPLACE 
      JMP RPER       NO, ERROR
      JMP CH03
CH02  JSB CKSL      CHECK NEXT STATEMENT FOR /. 
      JMP *+2        IF NOT A / THEN TREAT AS 
      JMP CH03      REPLACE 
      CLA           DELETE ONLY. SET MV2
      STA CMV2       CHAR. CNT = ZERO 
      JMP CH04
CH03  LDA EDAD,I    GET CHAR. CNT OF
      STA CMV2       UPDATE STATEMENT FOR MV2 
      LDB EDAD      SET MOVE 2 ORIGIN 
      INB           ADDRESS AS (EDAD+1) 
      STB MOV2      INTO CMV2+1 
CH04  LDB CMV2+1    COMPUTE MOVE 3
      JSB NXAD       DESTINATION ADDRESS
      STA CMV3+1     AND SET IT 
      LDA C2XX      COMPUTE MOVE 3 CHAR. CNT
      SZA,RSS        US C1 AS REFERENCE 
      LDA C1XX       IF C2 = ZERO 
      CMA,INA        SUBTRACT C1 (C2) FROM
      ADA SYCT       SYM. FILE RECORD LENGTH
      STA CMV3       TO GET CHAR. CNT 
* 
*  THIS SECTION DETERMINES RECORD OVERFLOW
* 
      LDA CMV1
      ADA CMV2      ADD THE CHAR. COUNTS
      ADA CMV3       FOR THE
      STA C.FL       THREE MOVES, 
      LDB C.72      SUBTRACT 73 FROM
      CMB            THE TOTAL
      ADA 1         A POSITIVE RESULT MEANS 
      SSA,RSS        EXCEEDS 72, ERROR
      JMP CHOV       CHARACTER OVERFLOW 
      LDA CMV1      PERFORM 
      LDB CMV1+1     FIRST
      JSB MOVE      MOVE
MOV1  NOP 
      LDA CMV2
      LDB CMV2+1
      JSB MOVE     SECOND 
MOV2  NOP           MOVE
      LDA CMV3
      LDB CMV3+1
      JSB MOVE     THIRD
MOV3  NOP           MOVE
      LDA C.FL      CHAR. CNT FOR NEW RECORD
      LDB CBUF      ADDRESS OF NEW RECORD 
      JSB UFOUT    PUNCH NEW RECORD 
      CLA           CLEAR CS ACTIVE 
      STA CSAF       FLAG 
      JMP ED06      GO TO CS PROCESSOR
      SKP 
                                                                                        