* 
*  DIAGNOSTIC OUTPUT SUBROUTINE: <DIAG> 
* 
*  PURPOSE: THIS ROUTINE WRITES ON THE
*           SYSTEM TELETYPE (LU #1) THE 
*           MESSAGE:
* 
*            "/EDIT: 'DIAGNOSTIC' " 
* 
*           THE ADDRESS OF THE 'DIAGNOSTIC' 
*           PART IS SUPPLIED TO THE ROUTINE.
*           THE FORMAT OF THE MESSAGE IS: 
* 
*            WORD 1:  # CHARS (NEGATIVE)
*            WORDS 2-N: TEXT
* 
*  CALLING SEQUENCE:
* 
*            (A) = ADDRESS OF MESSAGE 
*        (P)     JSB DIAG 
*        (P+1)   - RETURN - 
* 
* 
DIAG  NOP 
      LDB A,I      GET AND
      STB DIAGL     SET NEG. CHAR. LENGTH 
      INA          SET
      STA DIAGB     ADDRESS OF MESSAGE
* 
      JSB EXEC     WRITE
      DEF *+5 
      DEF C.02      "/EDIT:"
      DEF C.01        W/O R/LF
      DEF EDIDM       ON SYSTEM 
      DEF CM8         TELETYPE
* 
      JSB EXEC     WRITE
      DEF *+5       MESSAGE 
      DEF C.02       PART 
      DEF C.01        OF
DIAGB NOP           DIAGNOSTIC
      DEF DIAGL 
* 
      JMP DIAG,I   RETURN 
      SKP 
OVFM  DEF *+1 
      DEC -16 
      ASC 8,MEM OVERFLOW : *  
ILCM  DEF *+1 
      DEC -10 
      ASC 5,CS ERR : *  
NERM  DEF *+1 
      DEC -12 
      ASC 6,PARAM ERR: *  
SEQM  DEF *+1 
      DEC -10 
      ASC 5,SEQ ERR: *  
INEM  DEF *+1 
      DEC -10 
      ASC 5,/I ERR : *  
RPEM  DEF *+1 
      DEC -10 
      ASC 5,/R ERR : *  
CHOM  DEF *+1 
      DEC -10 
      ASC 5,/C OVF : *  
EOFEA DEF *+1 
      DEC -13 
      ASC 7,END EDIT FILE 
* 
ENDED DEF *+1 
      DEC -15 
      ASC 8,END OF EDIT RUN 
FLUND DEF *+1 
      DEC -7
      ASC 4,FILE UN 
DOVFM DEF *+1 
      DEC -8
      ASC 4,DISK OVF
NFILE DEF *+1 
      DEC -20 
      ASC 10,TRACKS IN NEW FILE : 
TRAKN DEF *+1 
      DEC -8
      ASC 4,LU, TRAC
* 
EDIDM ASC 4,/EDIT: *  
      SKP 
* 
* SUBROUTINE: <OUTS>
* 
*  PURPOSE: THIS ROUTINE OPERATES IN
*           CONJUCTION WITH 'DIAG' TO 
*           WRITE AN ILLEGAL CONTROL
*           STATEMENT AFTER 'DIAG' IS 
*           CALLED. 
* 
*  CALL:  (P)     JSB OUTS
*         (P+1)   -RETURN-
* 
* 
OUTS  NOP 
      LDA SEDA     USE PREVIOUS CS ADDRESS
      SZA,RSS       IF NON-ZERO; OTHERWISE
      LDA EDAD      USE CURRENT.
      LDB A,I      GET CHAR. LENGTH,
      CMB,INB       SET NEG.
      STB DIAGL     SET FOR WRITE.
      INA          SET ADDRESS
      STA OUTAD     OF STATEMENT. 
* 
      JSB EXEC     WRITE ILLEGAL
      DEF *+5       CONTROL 
      DEF C.02      STATEMENT 
      DEF C.01      ON
OUTAD NOP           SYSTEM
      DEF DIAGL     TELETYPE
* 
      JMP OUTS,I   -RETURN- 
      SKP 
* 
*  CONSTANT AND STORAGE SECTION 
* 
EDAD  OCT 0         EDIT FILE RECORD ADDRESS
SEDA  OCT 0         -PREVIOUS EDIT FILE ADDRESS-
N1XX  OCT 0         HOLDS N1 IN PARAMETER 
N2XX  OCT 0         HOLDS N2 IN PARAMETER 
C1XX  OCT 0         HOLDS C1 IN PARAMETER 
C2XX  OCT 0         HOLDS C2 IN PARAMETER 
FFCT  OCT 0         COUNTER WORD
SYCT  OCT 0         HOLDS COUNT OF SYM. FILE RECORD 
SYSQ  OCT 0         SYMBOLIC FILE SEQUENCE NO.
CSAF  OCT 0         FLAG FOR CONTROL STATEMENT ACTIVE 
CSFL  OCT 0         DEFINES CURRENT STATEMENT 
C.FL  OCT 0         TYPE OF CHARACTER STATEMENT 
CMV1  BSS 2         HOLDS MOVE PARAMETERS 
CMV2  BSS 2         -NO. OF CHARS. AND
CMV3  BSS 2          ORIGIN ADDRESSES 
NXRA  OCT 0         TEMPORARY CELLS FOR 
NXSG  OCT 0          NXAD SUBROUTINE
LENG  OCT 110       72 (10) CHARS. FOR INPUT
MLEN  OCT 44        36 (10) WORDS FOR INPUT 
* 
C.01  OCT 1 
C.02  OCT 2 
C.03  OCT 3 
C.04  OCT 4 
C.05  OCT 5 
C.06  OCT 6 
C.07  OCT 7 
C.72  EQU LENG
CM8   DEC -8
CM72  DEC -72 
CM73  DEC -73 
* 
C.M1  OCT 177777
CHMK  OCT 377       8-BIT CHARACTER MASK
DELX  OCT 6577      RETURN/RUB-OUT
SLSH  OCT 57         SLASH
SLEN  OCT 105        E
SLLS  OCT 114        L
SLIN  OCT 111        I
SLDL  OCT 104        D
SLRP  OCT 122        R
SLCH  OCT 103        C
SLAB  OCT 101 
EXMK  OCT 41         !
COMA  OCT 54        COMMA 
BLKX  OCT 40         SPACE(BLNK)
CHCT  OCT 0          CHARACTER COUNT WORD FOR -GETC-
M525  OCT 52525      UPPER/LOWER CHAR. INDICATOR TO SE
F525  OCT 0          FLAG - 0=UPPER, 1=LOWER
CSAD  OCT 0         HOLDS STATEMENT ADDRESS FOR -GETC 
RSLT  OCT 0         HOLDS PARTIAL RESULT FOR -CONV- 
CNBR  OCT 0         HOLDS CURRENT NUMBER -COV-
MXNO  OCT 0         HOLDS NEGATIVE FIELD LENGTH -CONV 
CM60  OCT 177720    MINUS 60(8) 
CM12  OCT 177766    MINUS 12(8) 
LSTB  DEF *+2       DEFINES ADDRESS OF -LIST- BUFFER
SBUF  DEF *+4       ADDRESS OF SYM. FILE BUFFER 
SEQN  OCT 0         WORDS FOR LIST SEQUENCE NUMBER
      OCT 0          NUMBERS
BLNK  OCT 20040     BLANK WORD
INBUF BSS 36
CBUF  DEF *+1        CHARACTER BUFFER ADDRESS 
      BSS 44B        CHARACTER BUFFER 
* 
* 
UFLNG NOP 
DIAGL NOP 
EFLUN NOP 
SFLUN NOP 
UFLUN NOP 
EFCON OCT 700 
* 
B     EQU  1
A     EQU  0
* 
* DEFINE FWA OF EDIT FILE AREA
* 
F.AM  DEF NMBR+100B      SKIP SOURCE READ/WRITE ROUT
      HED ** R/T EDITOR  - INITIALIZATION SECTION **
* 
*  THE R/T EDITOR IS SCHEDULED BY THE OPERATOR
* CONTROL STATEMENT:
* 
*     'ON,EDIT,P1,P2,P3,P4' 
* 
* THE PARAMETER LIST IS OPTIONAL AND IS PRESENT 
* ONLY IF THE INPUT UNITS DIFFER FROM THE 
* STANDARD UNITS OR IF A 'LIST' PASS IS DESIRED.
* THE DEFINITION OF THE PARAMETERS IS:
* 
*  P1 - LOGICAL UNIT # FOR INPUT OF 'EDIT FILE' 
*       (IF P1 NOT PRESENT, UNIT 5 IS ASSUMED)
* 
*  P2 - LOGICAL UNIT # FOR INPUT OF 'SYMBOLIC FILE' 
*       (IF P2 NOT PRESENT, UNIT 5 IS ASSUMED)
*       LUN=2 IF FILE FROM DISK 
* 
*  P3 - LOGICAL UNIT # FOR OUTPUT OF 'UPDATED FILE' 
*       (IF P3 NOT PRESENT, UNIT 4 IS ASSUMED FOR 
*        NORMAL EDIT OPERATION; UNIT 6 IS ASSUMED 
*        FOR 'LIST ONLY' PASS)
*       LUN=2 IF FILE TO DISK 
* 
*  P4 - =1 : A LISTING OF THE 
*       SYMBOLIC FILE IS TO BE GENERATED WITH 
*            SEQUENCE NUMBERS ON EACH RECORD
*       =2 : A DISK-FILE OF THE SYMBOLIC FILE IS
*            TO BE GENERATED
*            =0 OR NOT PRESENT : NORMAL EDIT RUN
* 
* ON ENTRY AT 'EDIT', THE B-REGISTER CONTAINS 
* THE ADDRESS OF THE PARAMETER LIST FROM THE
* 'ON' STATEMENT. 
* 
      SKP 
EDIT  LDA B,I      GET 'P1' 
      SZA,RSS      IF = 0 
      LDA C.05      USE LU # 5 FOR EDIT FILE. 
      STA EFLUN    SET AS CONTROL WORD. 
      IOR EFCON    ADD 700(8) WITH LU # 
      STA EFCON     FOR CONTROL FUNCTION. 
* 
      INB 
      LDA B,I      GET 'P2' 
      SZA,RSS      IF = 0,
      LDA C.05      USE LU # 5 FOR SYMBOLIC FILE. 
      STA SFLUN    SET AS CONTROL WORD. 
* 
      INB 
      LDA B,I      GET 'P3' 
      STA DIAGL     AND SAVE IT.
* 
      INB 
      LDA B,I      GET 'P4' 
      CPA C.01      IF =1, GO 
      JMP LISTI     TO LIST SYMBOLIC FILE.
      CPA C.02      CREATE ORIGINAL SOURCE FILE?
      JMP GFILE     YES 
* 
      LDA DIAGL    GET 'P3' AGAIN.
      CPA C.02      OUTPUT TO DISK ?
      JMP EDIT4     YES 
      SZA,RSS      IF = 0,
      LDA C.04      USE LU #4 FOR UPDATED FILE. 
      IOR LTGCW    SET 'P' BIT FOR PUNCHING 'ASCII' 
      STA LTGCW     ON ASR-35 AND SET CONTROL WORD
      STA UFLUN     FOR WRITE AND LEADER. 
EDIT1 LDA EFLUN 
      CPA C.02      EDIT FILE FROM DISK ? 
      JMP FLERR 
* 
      JSB EXEC     GET
      DEF *+4       STATUS
      DEF C.13      OF EDIT FILE
      DEF EFLUN     UNIT. 
      DEF STATS 
* 
      LDA STATS     STATUS WORD 
      ALF,ALF      EXAMINE
      AND M77       EQUIP. TYPE CODE. 
      CLB          (B) = 0 IF NOT TTY.
      SZA,RSS      IF CODE = 0, 
      LDB M400      SET (B) FOR KEYBOARD INPUT
      ADB EFLUN      IF UNIT IS TELETYPE. 
      STB EFLUN    -RESET CONTROL WORD. 
* 
      LDA SFLUN     SOURCE FILE 
      CPA C.02      FROM DISK ? 
      JMP EDIT3 
EDIT2 LDA F.AM      INITIALIZE FWA
      STA EDAD      AVAILABLE MEMORY
* 
      LDB EFLUN 
      CPB M401      EDIT FILE FROM SYSTEM TTY ? 
      RSS           YES 
      JMP ED02      BEGIN EDIT OPERATION. 
      LDA EFMES 
      JSB DIAG      PRINT MESSAGE 
      JMP ED02      BEGIN EDIT OPERATION
EFMES DEF *+1 
      DEC -16 
      ASC 8,ENTER EDIT FILE:
EDIT3 LDA 1767B 
      SZA,RSS       IS DISK SOURCE-FILE DEFINED ? 
      JMP FLERR     NO, ABORT AFTER ERROR MESSAGE 
      CLB 
      LSL 1 
      ADB C.02
      LSL 8         FORM LUN-TRACK NO.
      STB RTRK1     SET READ-TRACK NO.1 
      STB RTRKC     = CURRENT READ-TRACK
      JMP EDIT2 
EDIT4 STA UFLUN     LUN(OUTPUT)= 2
      JSB %WRIN     INITIALIZE WRITE SOURCE 
      JMP DOVF      FULL DISK,ABORT EDIT
      STA WTRK1     SET 1ST WRITE-TRACK 
      STA WTRKC     = CURRENT WRITE TRACK 
      JMP EDIT1 
RTRK1 BSS 1         LUN-READ TRACK FOR 1ST READ-TRAK
RTRKC BSS 1                        CURRENT READ-TRAK
WTRK1 BSS 1                        1ST WRITE TRACK
WTRKC BSS 1                        CURRENT WRITE TRK
STATS BSS 1 
M401  OCT 401 
      SKP 
* 
* LIST OPTION SELECTED
* 
* 
LISTI JSB DNGI     INITIALIZE SEQUENCE NUMBER.
      LDA DIAGL    GET 'P3' AGAIN.
      SZA,RSS      IF 0,
      LDA C.06      USE LU #6 FOR LIST OUTPUT 
      STA UFLUN      UNIT, SET LU # 
      IOR LSPCW      IN CONTROL WORD
      STA LSPCW      FOR LINE SPACING.
* 
LIST  JSB SYMI      GET SYMBOLIC FILE RECORD
      SZA,RSS       IF 'TERMINATION,
      JMP LISTE      GO TO FINISH.
      ADA C.06      ADD 6 TO RECORD LENGTH
      CMA,INA       SET NEGATIVE, 
      STA CSAF      SAVE CHAR. LENGTH 
      JSB DNGE      GET SEQUENCE NUMBER 
      STA SEQN        FOR RECORD AND STORE IN 
      STB SEQN+1       BUFFER 
      LDA CM72     (A) = -72
      LDB C.72     SUBTRACT RECORD
      ADB CSAF      LENGTH FROM 72. 
      SSB          IF GT 72,
      STA CSAF      USE MAX OF 72 CHARACTERS. 
* 
      ISZ LINCT    INDEX LINE COUNT 
      JMP LIST1     -NOT 0, OUTPUT RECORD.
* 
      LDA CM61     RESET
      STA LINCT     LINE COUNT
* 
      JSB EXEC     SKIP 
      DEF *+4       5 
      DEF C.03      LINES FOR 
      DEF LSPCW     PAGE FORMAT.
      DEF C.05
* 
* 
LIST1 JSB EXEC     WRITE
      DEF *+5       SYMBOLIC
      DEF C.02       FILE 
      DEF UFLUN      RECORD 
      DEF SEQN       CONCATENATED TO
      DEF CSAF       4-DIGIT SEQUENCE #.
* 
      JMP LIST     GET NEXT RECORD
* 
LISTE JSB EXEC     SKIP 
      DEF *+4       TO
      DEF C.03      BOTTOM
      DEF LSPCW      OF PAGE
      DEF LINCT 
* 
      JMP EN03     GO TO TERMINATE LIST RUN.
* 
LSPCW OCT 1100
C.13  DEC 13
LINCT DEC -1
CM61  DEC -61 
M77   OCT 77
M400  OCT 400 
      SKP 
* 
*  SUBROUTINE TO GENERATE SEQUENTIAL DECIMAL NUMBERS
*   - 1 TO 999 WITH LEADING BLANKS
*  CALLED BY: JSB DNGE  (JSB DNGI TO INITIALIZE)
*  ON RETURN A AND B CONTAIN ASCII OF NUMBER- 
*    RIGHT JUSTIFIED TO B.  NO ERROR RETURNS
* 
DNGE  NOP           ENTRY 
      LDB NMBR      DETERMINE THOUSANDS POSITION
      ADB THCT      ADDRESS FOR VALUE 
      LDA BREG,I    LOAD NUMERIC VALUE IN A 
      ALF,ALF       ROTATE CHARACTER TO HIGH A
      LDB NMBR       DETERMINE HUNDREDS POSITION
      ADB HDCT      ADDRESS FOR VALUE 
      IOR BREG,I    PACK CHARACTERS IN A
      STA DNG1      SAVE THOUS. AND HUNDREDS
      LDB NMBR      DETERMINE TENS POSITION 
      ADB TECT      ADDRESS FOR VALUE 
      LDA BREG,I    NUMERIC (ASCII) VALUE TO A
      ALF,ALF       ROTATE CHAR. TO HIGH A
      LDB NMBR      DETERMINE UNITS POSITION
      ADB UNCT      ADDRESS FOR VALUE 
      IOR BREG,I    PACK CHAR. IN A 
      STA DNG2       SAVE TENS AND UNIT 
      ISZ UNCT      INCREASE UNIT POINTER 
      JMP DNGX       EXIT 
      LDA MI10      EQUAL TO 9. RESET TO
      STA UNCT      ZERO POSITION 
      ISZ TECT      INCREASE TENS POINTER 
      JMP DNGX       EXIT 
      STA TECT      RESET TO ZERO POSITION
      ISZ HDCT      INCREASE HUNDREDS POINTER 
      JMP DNGX       EXIT 
      STA HDCT      RESET TO ZERO POSITION
      ISZ THCT      INCREASE THOUSANDS POINTER
      JMP DNGX       EXIT 
      STA THCT      RESET TO ZERO POSITION
DNGX  LDA DNG1      SET A = THOUS/HUNDRED 
      LDB DNG2      SET B = TENS/UNITS
      JMP DNGE,I     EXIT 
DNGI  NOP           INITIALIZATION SECTION
      LDA MI10       SET TENS, HUNDREDS 
      STA TECT       AND THOUSANDS TO 
      STA HDCT       ZERO POSITION. 
      STA THCT      SET UNITS TO
      INA            ONE POSITION FOR 
      STA UNCT       FIRST NUMBER 
      JMP DNGI,I     EXIT 
DNG1  OCT 0         HOLDS DECIMAL NUMBER
DNG2  OCT 0          GENERATED (IN ASCII) 
MI10  OCT 177766    MINUS 10
BREG  OCT 100001    ADDRESS OF B-REGISTER 
UNCT  OCT 0         POSITION
TECT  OCT 0          POINTERS 
HDCT  OCT 0 
THCT  OCT 0 
* 
*  FOLLOWING TABLE CONTAINS ASCII CODES CORRESPONDING 
*    TO ZERO TO NINE. 
      OCT 60        ASCII - ZERO
      OCT 61         1
      OCT 62         2
      OCT 63         3
      OCT 64         4
      OCT 65         5
      OCT 66         6
      OCT 67         7
      OCT 70         8
      OCT 71         9
NMBR  DEF * 
* 
      END EDIT
                      