.
.         STATUS EDITING SUBROUTINES
.
.
.         (C)  Copyright 1972-1978  John Walker
.
.         This software is in the public domain
.
          AXR$
          DEFUNCT$
          FANG
          PURE      CODE
.
.         EDIT I/O STATUS
.
.         LA,U      A0,<PACKET>
.         LMJ       X11,IOSEDT
.         <RETURN>
.
IOSEDT*   SX        X11,R4              SAVE RETURN POINT
          SA        A0,R3               SAVE PACKET ADDRESS
          R$DIT     .                   ENTER EDIT MODE
          LA        A0,R3               RELOAD PACKET ADDRESS
          LA        A0,IOSTATUS,A0      LOAD ACTUAL STATUS
          LA,H2     A0,IOST,A0          LOAD POINTER TO ASSOCIATED MESSAGE
          JNZ       A0,HAVMSG           EDIT MESSAGE IF ONE EXISTS
          E$MSG     IOSEM               EDIT FIRST PART OF MESSAGE
          LA        A0,R3               LOAD PACKET ADDRESS
          E$OCTV    IOSTATUS,A0         EDIT STATUS
          E$MSGR    .                   COPY SOME MORE MESSAGE
FILLIN    LMJ       X6,FDTEDT           EDIT FILE NAME
FILLIX    E$MSGR    .                   COPY SOME MORE MESSAGE
FILLIY    LX        X5,CDIMG,X8         GET IMAGE ADDRESS
          LMJ       X6,ESNV             EDIT STATEMENT NUMBER
          R$PRTX    1                   PRINT THE MESSAGE
          LX        X11,R4              RELOAD RETURN POINT
          LA        A0,R3               RESTORE PACKET ADDRESS
          J         0,X11               RETURN
.
HAVMSG    E$MSG     .                   EDIT THE DESCRIPTION
          E$MSG     OFFILE              START EDITING CANNED PORTION
          J         FILLIN              FILL IN FILE NAME AND STATEMENT NUMBER
.
.         BSP ERROR MESSAGE EDITOR
.
.         ENTER WITH A0, A1 EQUAL TO VALUES RETURNED BY BSP
.         WHEN BSP TAKES THE ERROR EXIT.
.
.         la,u      a2,<BSP FCT address>
.         LMJ       X11,BSPERP
.         <RETURN>
.
bsperp*   sa        a2,a1               save the FCT address
          DS        A0,R2               SAVE INPUT ERROR CODES
          DL        A2,,A1              LOAD FILE NAME FROM FTI PACKET
          LA,H2     A0,FDCHAIN          GET HEAD OF FDT LIST
BSRNF     DTE       A2,FDIN,A0          IS THIS THE FDT FOR THIS FILE ?
          J         BSRNT               NO.  KEEP ON LOOKING
          SA        A0,IOFDT,A1         CLOBBER FTI (NO GOOD ANYWAY)
          TP        R2                  WAS THE BSP ERROR AN I/O ERROR ?
          J         BSPIOR              YES.  EDIT I/O STATUS INSTEAD
          SX        X11,R4              SAVE THE RETURN POINT
          R$DIT     .                   NO.  SET UP EDITOR
          LA        A0,R2               LOAD THE STATUS RETURNED
          LA,H1     A0,IOST,A0          LOAD THE BSP ERROR MESSAGE
          JNZ       A0,HAVMSG           EDIT MESSAGE IF WE HAVE ONE
          E$MSG     UNKBSM              OTHERWISE, COPY NUMERIC MESSAGE
          E$OCTV    R2                  EDIT IN THE STATUS...
          E$MSGR    .                   COPY THE REST...
          J         FILLIN              ...FILL IN REST OF MESSAGE
.
BSRNT     LA        A0,FDLINK,A0        LINK TO NEXT FDT
          ON        DEBUG
          TNZ       A0                  END OF FDT CHAIN ?
          IERR      .                   YES.  COULDN'T FIND FILE NAME IN A2, A3
          OFF       DEBUG
          J         BSRNF               CHECK THE NEW FDT
.
BSPIOR    SA        A0,IOFDT,A1         CLOBBER FTI (DONE WITH IT ANYWAY)
          SR        R2,IOSTATUS,A1      PUT STATUS IN PACKET
          LA,U      A0,,A1              LOAD THE PACKET ADDRESS
          J         IOSEDT              EDIT AS I/O ERROR
.
.         EDIT FDT NAME
.
FDTEDT    LA        A0,R3               LOAD ADDRESS OF I/O PACKET
          LX        X5,IOFDT,A0         LOAD ADDRESS OF FDT
EFILE*    .
FDTED1    DL        A0,FDIN,X5          LOAD INTERNAL NAME
          DTE       A0,FDFN,X5          PLAYING GAMES ?
          J         EDFUL               NO.  EDIT FULL NAME
          E$FD2     FDIN,X5             EDIT JUST INTERNAL NAME
          J         0,X6                RETURN
EDFUL     E$FD2     FDQUAL,X5           EDIT QUALIFIER
          E$CHAR    '*'                 EDIT A STAR
          E$FD2     FDFN,X5             EDIT FILE NAME
          TNZ       FDFC,X5             ANY F-CYCLE ?
          J         0,X6                NO.  RETURN
          E$CHAR    '('                 EDIT LEFT PARENTHESIS
          LA,U      A0,'+'              LOAD UP A PLUS SIGN
          TN        FDFC,X5             NEGATIVE RELATIVE F-CYCLE ?
          E$CHAR    .                   NO.  EDIT A PLUS SIGN
          E$DECV    FDFC,X5             EDIT THE NUMBER
          E$CHAR    ')'                 EDIT RIGHT PARENTHESIS
          J         0,X6                RETURN
.
.         APPEND 'FILE X*Y(Z) IN STATEMENT A.B' TO MESSAGE & PRINT
.
.         LA,U      A0,<FDT>
.         LMJ       X11,FIST
.         <RETURN>
.
FIST*     SA        A0,R3               SAVE FDT ADDRESS
          SX        X11,R4              SAVE RETURN POINT
          LX,U      X5,,A0              COPY FDT ADDRESS TO X5
          E$MSG     OFFILE              START EDITING THE MESSAGE
          LMJ       X6,FDTED1           EDIT THE FDT FROM X5 POINTER
          J         FILLIX              PROCESS REST AS IOSEDT
.
.         APPEND STATEMENT NUMBER TO MESSAGE AND PRINT
.
IST*      SA        A0,R3               SAVE A0
          SX        X11,R4              SAVE RETURN POINT
          E$MSG     INSTN               COPY THE 'IN STATEMENT '
          J         FILLIY              ENTER EDITOR
.
.         EDIT STATEMENT NUMBER  4.7(2,4,3)
.
.         LX,U      X5,<IMAGE BUFFER>
.         LMJ       X6,ESN
.         <RETURN>
.
ESN*      JDEM      DESM                DEMAND MODE ?
          E$DECF    6,IMLN,X5           NO.  ALLOW 6 CHARACTERS FOR NUMBER
ESN0      E$CHAR    '.'                 EDIT A DECIMAL POINT
          TNZ       IMRN,X5             IS THERE A SUBSTATEMENT NUMBER ?
          J         ESN1                NO.  DON'T EDIT ONE
          E$DECV    IMRN,X5             EDIT THE SUBSTATEMENT NUMBER
ESN1      TNZ       IMNS,X5             ANY SUBSCRIPTS TO EDIT ?
          J         ESN2                NO.  SKIP THIS CODE
          E$CHAR    '('                 EDIT LEFT PARENTHESIS
          LA,U      A5                  CLEAR SUBSCRIPT NUMBER
ESN3      LA        A0,A5               LOAD SUBSCRIPT NUMBER
          AA,U      A0,X5               POINT TO BUFFER
          E$DECV    IMSS,A0,H2          LOAD SUBSCRIPT INDEX
          AA,U      A5,1                BUMP SUBSCRIPT BEING EDITED
          TNE       A5,IMNS,X5          EDIT ALL OF THEM YET ?
          J         ESN4                YES.  EDIT FINAL PARENTHESIS
          E$CHAR    ','                 EDIT SEPARATOR
          J         ESN3                CONTINUE EDITING
ESN4      E$CHAR    ')'                 EDIT CLOSING PARENTHESIS
ESN2      J         0,X6                RETURN
.
DESM      E$DECF    3,IMLN,X5           EDIT DEMAND NUMBER
          TNZ       IMRN,X5             ANY SUBSTATEMENT ?
          J         ESN1                NO.  SKIP DECIMAL EDITING
          J         ESN0                YES.  EDIT IT
.
.         LEFT JUSTIFIED STATEMENT NUMBER EDIT ENTRY
.
ESNV*     E$DECV    IMLN,X5             EDIT LINE NUMBER
          J         ESN0                EDIT REST OF IT
.
.         EDIT COMMAND EXECUTION STATUS
.
CMDST*    P         CMDLOCK             SET THE COMMAND LOCK
          R$DIT     .                   SET UP THE EDITOR
          LA,U      A14,120             LOAD BATCH LINE LENGTH
          TZ        DEMAND              DEMAND MODE ?
          LA,U      A14,60              YES.  LOAD DEMAND LINE LENGTH
          LA,U      A13                 CLEAR ANY STATEMENTS FOUND
          LA        A3,INPROCQ+QFL      LOAD POINTER TO FIRST PACKET
          TNE,U     A3,INPROCQ          ANY IN PROGRESS COMMANDS ?
          J         NOINP               NO.  LOOK FOR QUEUED STATEMENTS
          LA        A12,A3              SAVE COMMAND POINTER
          E$FD4     ('IN PROGRESS:')    EDIT HEADER
          E$SKIP    1                   SKIP A SPACE
          LA,U      A13,1               SET STATEMENTS FOUND
ENSND     LA        A3,A12              GET PACKET ADDRESS
          LX        X5,CDIMG,A3         LOAD IMAGE BUFFER ADDRESS
          LMJ       X6,ESNV             EDIT STATEMENT NUMBER
          E$SKIP    -1                  BACK UP A CHARACTER
          U$CHAR    .                   GET LAST CHARACTER
          TNE,U     A0,'.'              WAS IT A PERIOD ?
          LMJ       X6,OBLITER8         YES.  MAKE IT GO AWAY
          LA        A3,A12              RESTORE COMMAND POINTER
          LA        A3,QFL,A3           LINK TO NEXT IN PROGRESS COMMAND
          SA        A3,A12              SAVE COMMAND POINTER
          TNE,U     A3,INPROCQ          LAST COMMAND ?
          J         INPEND              YES.  PRINT ACCUMULATED STUFF
          E$CHAR    ','                 EDIT A COMMA
          E$SKIP    1                   SKIP A SPACE
          E$COLN    .                   GET COLUMN POSITION
          TLE       A0,A14              OFF END OF PAGE ?
          J         ENSND               NO.  KEEP ON EDITING
          R$PRT     1                   YES.  PRINT THIS LINE
          E$SKIP    13                  TAB TO STARTING COLUMN
          J         ENSND               START EDITING ON NEW LINE
INPEND    R$PRT     1                   THEN PRINT LAST LINE
NOINP     LA        A3,CMDQUE+QFL       GET FIRST WAITING COMMAND
          TNE,U     A3,CMDQUE           ANY WAITING ?
          J         NOQC                NO.  WIND UP
          LA        A12,A3              SAVE COMMAND ADDRESS
          E$FD4     ('WAITING: ')
          LA,U      A13,1               SET SOMETHING FOUND
ENQC      LA        A3,A12              LOAD COMMAND BUFFER ADDRESS
          LX        X5,CDIMG,A3         LOAD IMAGE BUFFER ADDRESS
          LMJ       X6,ESNV             EDIT STATEMENT NUMBER
          E$SKIP    -1                  BACK UP ONE CHARACTER
          U$CHAR    .                   LOAD THE LAST CHARACTER EDITED
          TNE,U     A0,'.'              WAS IT A PERIOD ?
          LMJ       X6,OBLITER8         YES.  REMOVE IT
          LA        A3,A12              RESTORE PACKET POINTER
          LA        A3,QFL,A3           LINK TO NEXT COMMAND
          SA        A3,A12              SAVE IN NON-VOLATILE REGISTER
          TNE,U     A3,CMDQUE           END OF WAITING QUEUE ?
          J         WCEND               YES.  FINISH UP
          E$CHAR    ','                 EDIT A COMMA
          E$SKIP    1                   SKIP A SPACE
          E$COLN    .                   GET COLUMN NUMBER
          TLE       A0,A14              END OF LINE ?
          J         ENQC                NO.  EDIT NEXT NUMBER
          R$PRT     1                   PRINT THE LINE
          E$SKIP    9                   TAB TO START COLUMN
          J         ENQC                KEEP ON EDITING
.
WCEND     R$PRTX    1                   PRINT AND TERMINATE
WCEN1     V         CMDLOCK             UNLOCK COMMAND QUEUES
          J         ICOUT               FINISH COMMAND
.
NOQC      JZ        A13,NOATL           ANY COMMANDS FOUND ?
          R$DITX    .                   YES.  TERMINATE EDITOR
          J         WCEN1               TERMINATE AND RETURN
.
NOATL     E$MSG     NOMEM               EDIT NO COMMANDS ACTIVE MESSAGE
          J         WCEND               RETURN
.
OBLITER8  E$SKIP    -1                  BACK UP TO PERIOD
          E$CHAR    ' '                 BLANK IT OUT
          E$SKIP    -1                  BACK UP TO THE SPACE
          J         0,X6                RETURN
.
          PURE      DATA
NOMEM     'NO COMMANDS IN PROGRESS OR WAITING.!'
          CHAR      '%',072
IOSEM     'I/O STATUS ! ENCOUNTERED ON FILE ! IN STATEMENT !'
IOS(0)    'END OF FILE NOT FOUND WHEN EXPECTED IN !'
IOS(1)    'END OF FILE ENCOUNTERED IN READ OR SEARCH OF !'
IOS(2)    'PHYSICAL END OF TAPE ENCOUNTERED ON !'
IOS(3)    'NO FIND ON SEARCH OF !'
IOS(4)    'ABNORMAL FRAME COUNT IN !'
IOS(5)    'ATTEMPT TO READ AN UNASSIGNED AREA OF !'
IOS(7)    'ABSR$/ABSW$ HARDWARE TIMEOUT ON !'
IOS(010)  'TIMEOUT TRYING TO REFERENCE LOCKED AREA OF !'
IOS(011)  '%G% RESPONSE TO ERROR IN !'
IOS(012)  'LOSS OF POSITION ON !'
IOS(013)  'DEVICE DECLARED DOWN WHICH CONTAINS !'
IOS(020)  'READING/WRITING INHIBITED FOR OPERATION ON !'
IOS(021)  'UNASSIGNED !'
IOS(022)  'ATTEMPT TO READ OR WRITE BEYOND END OF !'
IOS(023)  'I/O PACKET OUT OF RANGE: !'
IOS(024)  'FUNCTION CANNOT BE PERFORMED ON !'
IOS(025)  'BUFFER OUT OF RANGE FOR !'
IOS(026)  'INTERRUPT ROUTINE START OUT OF RANGE FOR !'
IOS(027)  'I/O ALREADY ACTIVE ON PACKET USED FOR !'
IOS(030)  'BAD INTERRUPT ID FOR !'
.
BSX(2)    'THIS FILE MAY NOT BE USED AS A PROGRAM FILE:  !'
BSX(012)  'FILE TABLE INDEX NOT IN CORE FOR !'
BSX(022)  'REQUIRED TABLE NOT IN CORE FOR !'
BSX(024)  'BSP BUFFER TOO SMALL FOR !'
BSX(042)  'ALL PROGRAM FILE TABLES NOT REWRITTEN TO !'
BSX(044)  'TABLE OF CONTENTS OVERFLOWED IN !'
.
OFFILE    'FILE ! IN STATEMENT !'
UNKBSM    'BSP ERROR STATUS ! ON FILE ! IN STATEMENT !'
INSTN     'IN STATEMENT !'
IOST      .
I         DO        045 , * BSX(I-1),IOS(I-1)  STATUS MESSAGE TABLE
          END