RECOVER 
          IDENT  RECOVER,FWA,RECOVER
          ABS 
          SST 
          ENTRY  RECOVER
          ENTRY  RFL= 
          ENTRY  SSJ= 
          ENTRY  VAL= 
          SYSCOM B1 
          TITLE  RECOVER - RECOVER DETACHED JOB.
*COMMENT  RECOVER - RECOVER DETACHED JOB. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4,10 
*****     RECOVER - RECOVER DETACHED JOB. 
* 
*         R. M. DESSEL        81/10/16. 
          SPACE  4,10 
***       *RECOVER* PERMITS THE RECOVERY OF A DETACHED JOB AT 
*         LOGIN TIME OR ANY TIME DURING A TERMINAL SESSION. 
*         *RECOVER* COMMUNICATES WITH A *TXOT* USER TO
*         DETERMINE WHICH JOB, IF ANY, SHOULD BE RECOVERED. 
*         IT WILL ACCEPT PARAMETERS FROM THE COMMAND, 
*         INPUT FROM THE FILE *INPUT*, AND SEND OUTPUT TO THE 
*         USER VIA FILE *OUTPUT*. 
          SPACE  4,10 
***       COMMAND FORMAT. 
* 
*         RECOVER(JSN,T)
* 
*         RECOVER(JSN=JSN,OP=T) 
* 
*         *RECOVER* COMMAND PARAMETERS ARE DEFINED AS THE FOLLOWING.
* 
*         JSN    JOB SEQUENCE NUMBER OF THE *TXOT* JOB THE USER 
*                WISHES TO RECOVER. 
* 
*         T      FLAG TO TELL *RECOVER* TO CONDUCT TERMINAL I/O 
*                ONLY IF THE USER HAS RECOVERABLE JOB(S) IN THE 
*                SYSTEM.  THIS WILL NORMALLY BE USED BY THE SYSTEM
*                AT LOGIN TIME. 
          SPACE  4,10 
***       DAYFILE MESSAGES. 
* 
*         * USER ACCESS NOT VALID.* 
*                CALLING JOB IS NOT AN INTERACTIVE JOB. 
* 
*         * ARGUMENT ERROR.*
*                ARGUMENT ERROR WAS DETECTED ON COMMAND.
* 
*         * OP OPTION NOT VALID.* 
*                THE *OP* OPTION SPECIFIED ON THE COMMAND 
*                IS NOT A LEGAL OPTION. 
* 
*         * NO JSN-S RECOVERED.*
*                *RECOVER* RECEIVED AN EOR, EOF OR EOI STATUS WHILE 
*                ATTEMPTING TO READ THE INPUT DIRECTIVES FILE, AND
*                HAS TERMINATED.
* 
*         * INCORRECT REPLY LIMIT REACHED.* 
*                THE NUMBER OF CONSECUTIVE INCORRECT REPLIES THE
*                USER ENTERED EXCEEDED THE LIMIT.  BE SURE ANY
*                INPUT DIRECTIVES FILE IS IN 64 CHARACTER SET.
          SPACE  4,10 
***       OUTPUT MESSAGES.
* 
*         *NO RECOVERABLE JOBS.*
*                THERE ARE NO JOB CANDIDATES FOR RECOVERY.
*                MESSAGE WILL NOT APPEAR AT LOGIN TIME IF 
*                USER HAS NOT INTERACTED WITH *RECOVER*.
* 
*         *   ENTER  *GO*  TO CONTINUE CURRENT JOB, 
*                    *RELIST*  TO LIST RECOVERABLE JOBS,
*                    OR DESIRED JSN:* 
*                *RECOVER* PROMPTS THE USER WHENEVER INPUT IS 
*                REQUIRED.
* 
*         *JSNX NOT FOUND.* 
*                USER ENTERED A JSN, BUT IS IS NOT RECOVERABLE. 
* 
*         *JSNX NOT RECOVERABLE - SECURITY CONFLICT.* 
*                THE SPECIFIED JOB HAD A HIGHER UPPER ACCESS LEVEL
*                LIMIT THAN THE CURRENT JOB, AND THUS COULD NOT BE
*                RECOVERED BY THE CURRENT JOB.
* 
*         *INCORRECT ENTRY.*
*                USER ENTERED SOMETHING OTHER THAN A VALID RESPONSE.
* 
*         *MAXIMUM FL ENCOUNTERED - JOB LIST INCOMPLETE.* 
*                NUMBER OF JOBS RETURNED BY *QAC* EXCEEDED THE
*                LARGEST POSSIBLE JSN BUFFER. 
          SPACE  4,10 
***       TERMINAL INTERRUPT PROCESSING (*REPRIEVE* PROCESSING).
* 
*         IF THE DIRECTIVE INPUT FILE, *INPUT*, IS ASSIGNED 
*         TO A TIME-SHARING TERMINAL, *REPRIEVE* PROCESSING 
*         IS ENABLED.  IN ALL OTHER CASES, TERMINAL INTERRUPTS
*         WILL INTERRUPT OR TERMINATE *RECOVER*.
          SPACE  4,10 
*         COMMON DECKS. 
  
*CALL     COMCMAC 
*CALL     COMCCMD 
*CALL     COMSEJT 
*CALL     COMSQAC 
*CALL     COMSSSJ 
*CALL     COMSTCM 
          TITLE  DEFINITIONS. 
*         ASSEMBLY CONSTANTS. 
  
 IBFL     EQU    101B        INPUT BUFFER LENGTH
 MARG     EQU    2           MAXIMUM NUMBER OF ARGUMENTS
 MAXI     EQU    10          MAXIMUM CONSECUTIVE INCORRECT REPLYS 
 MEMI     EQU    1000B       MEMORY INCREMENT 
 OBFL     EQU    301B        OUTPUT BUFFER LENGTH 
 QRBL     EQU    4           *QAC* REPLY BLOCK LENGTH 
 JSNBL    EQU    QRBL*100B   LENGTH OF *QAC* REPLY BLOCK BUFFER 
 WBFL     EQU    16          WORKING BUFFER LENGTH
 WRDL     EQU    5           WORDS PER LINE IN RECOVERABLE JSN LIST 
          SPACE  4,10 
*         FETS. 
  
          ORG    110B 
 FWA      BSS    0           SET ORIGIN ADDRESS 
  
 INPUT    FILEC  INBUF,IBFL,(FET=6)  INPUT FET
  
 OUTPUT   FILEC  OUTBUF,OBFL  OUTPUT FET
 QRPB     SPACE  4,10 
**        *QAC* PARAMETER BLOCK.
  
 QRPB     VFD    50/0,9/PKFC,1/0  REQUEST PREFIX PORTION
          VFD    36/0,6/11,18/JSNB
          VFD    42/0,18/JSNB 
          VFD    42/0,18/JSNB 
          VFD    42/0,18/JSNB+JSNBL 
 BQSP     VFD    60/0        SELECTION CRITERIA PORTION 
          VFD    60/0 
          VFD    36/0,12/RJSF,12/0  ROLLOUT SELECTION FLAG
          VFD    12/2B,48/0 
          VFD    60/0 
          VFD    60/0 
          VFD    60/0 
 BQPP     VFD    12/0,12/7777B,36/0  PEEK FUNCTION PORTION
          VFD    60/0 
          VFD    24/0,12/ALPB,12/ESPB,12/UJPB+JSPB
          VFD    60/0 
 RPB      SPACE  4,10 
**        *REPRIEVE* PARAMETER BLOCK. 
  
 RPB      BSS    0
          VFD    36/0,12/RPBL,12/0
          VFD    30/0,30/PTI
          BSSZ   7
 RPBA     BSSZ   16          EXCHANGE PACKAGE 
 RPBL     EQU    *-RPB
          SPACE  4,10 
*         SPECIAL ENTRY POINTS. 
  
 SSJ=     EQU    SSJP        SPECIAL SYSTEM JOB 
 VAL=     BSS    0           VALIDATION ENTRY POINT 
          SPACE  4,10 
*         WORKING STORAGE.
  
 ASFG     CON    0           *ASCII* CHARACTER SET FLAG 
 IFLG     CON    0           INTERACTIVE FLAG 
 INFG     CON    0           TERMINAL INTERRUPT FLAG
 INRC     CON    0           INCORRECT REPLY COUNTER
 JSNX     CON    0           JSN ENTERED ON COMMAND 
 JUAL     CON    0           JOB UPPER ACCESS LEVEL LIMIT 
 LFLG     CON    0           LOGIN FLAG 
 LFTB     VFD    42/0LOUTPUT,18/OUTPUT  TERMINAL FILES
 LRSF     CON    0           LIST RESPONSE FLAG 
 MAXC     CON    0           MAXIMUM AMOUNT OF CM AVAILABLE 
 MEMC     CON    0           CURRENT AMOUNT OF CM AVAILABLE 
 QJSN     CON    0           NUMBER OF JOBS RETURNED BY *QAC* 
 RJSN     CON    0           NUMBER OF RECOVERABLE JSN-S
 STATM    VFD    30/-1,30/0  STATUS OF MEMORY WORD
 TIFG     CON    0           *TT* FILE TYPE FLAG - INPUT
 TOFG     CON    0           *TT* FILE TYPE FLAG - OUTPUT 
 TTST     CON    0           *TSTATUS* PARAMETER BLOCK
          CON    0
 UIFG     CON    1           USER INTERACTION FLAG
 UPRF     CON    0           USER PROMPT FLAG 
          SPACE  4,10 
*         DAYFILE AND INTERACTION MESSAGES AND POSSIBLE REPLYS. 
  
 MSGA     DATA   C*NO RECOVERABLE JOBS.*
 MSGB     DATA   6LRELIST 
 MSGC     DATA   1LR
 MSGD     DATA   2LR
 MSGE     DATA   C* NO JSN-S RECOVERED.*
 MSGF     DATA   2LGO 
 MSGG     DATA   1LG
 MSGG2    DATA   2LG
 MSGG3    DATA   3LGO.
 MSGG4    DATA   4LG0.
 MSGH     DATA   C*INCORRECT ENTRY.*
 MSGI     DATA   C*     NOT FOUND.* 
 MSGJ     DATA   C* INCORRECT REPLY LIMIT REACHED.* 
 MSGK     DATA   C*MAXIMUM FL ENCOUNTERED - JOB LIST INCOMPLETE.* 
 MSGL     DATA   C*     NOT RECOVERABLE - SECURITY CONFLICT.* 
          TITLE  MAIN ROUTINE.
*         MAIN ROUTINE. 
  
 RECOVER  BSS    0           ENTRY
          RJ     PRS         PRESET 
 REC1     RJ     GLJ         GET LIST OF JSN-S
          RJ     DRJ         DETERMINE RECOVERABLE JOBS 
          SA1    RJSN        NUMBER OF RECOVERABLE JOBS 
          ZR     X1,REC3     IF NO JOBS TO RECOVER
          SX1    X1-1 
          ZR     X1,REC2     IF NUMBER OF RECOVERABLE JOBS = ONE
          RJ     SRJ         SORT LIST OF RECOVERABLE JOBS
          REPRIEVE  RPB,SET,200B  SET *REPRIEVE* PROCESSING 
 REC2     RJ     QUU         QUERY USER 
          ZR     X2,REC3     IF USER ENTERED *END*
          BX6    X6-X6       FLAG USER INTERACTION
          SA6    UIFG 
          NG     X2,REC1     IF INCORRECT ENTRY OR USER ENTERED *LIS* 
          RJ     SVJ         SEARCH FOR VALID JSN 
          ZR     X2,REC1     IF JSN NOT FOUND 
          LX1    24 
          SYSTEM TLX,R,X1,11B*100B  RECOVER JOB 
          EQ     REC4        TERMINATE
  
 REC3     WRITER OUTPUT      FLUSH BUFFER 
          MESSAGE  =0,1,R    CLEAR COMMAND FROM *MS1W*
          SA1    ASFG        CHARACTER SET FLAG 
          ZR     X1,REC4     IF PREVIOUS CHARACTER SET = 64 
          CSET   ASCII       RESET PREVIOUS CHARACTER SET 
 REC4     ENDRUN
          TITLE  SUBROUTINES. 
**        ABT - ABORT ON ERROR. 
* 
*         ENTRY  (X3) = ADDRESS OF DAYFILE MESSAGE. 
* 
*         USES   X - 1. 
*                A - 1. 
* 
*         MACROS ABORT, CSET, MESSAGE, PROMPT.
  
  
 ABT      MESSAGE  X3        ISSUE DAYFILE MESSAGE
          SA1    IFLG        INTERACTIVE FLAG 
          ZR     X1,ABT1     IF CALLING JOB NOT INTERACTIVE 
          SA1    ASFG        *ASCII* CHARACTER SET FLAG 
          ZR     X1,ABT1     IF CHARACTER SET *NORMAL*
          CSET   ASCII       SET *ASCII* 128 CHARACTER SET MODE 
 ABT1     ABORT 
 DRJ      SPACE  4,15 
**        DRJ - DETERMINE RECOVERABLE JOBS. 
* 
*         *DRJ* SEARCHES THE BUFFER *JSNB* TO ENSURE THE JOBS 
*         RETURNED BY *QAC* ARE RECOVERABLE.
* 
*         ENTRY  (QJSN) = NUMBER OF JOBS RETURNED BY *QAC*
* 
*         EXIT   (RJSN) = NUMBER OF RECOVERABLE JOBS. 
* 
*         USES   X - 0, 1, 2, 3, 6. 
*                A - 1, 6.
*                B - 2, 3, 4, 5, 6. 
* 
*         MACROS MOVE, WRITEC.
  
  
 DRJ3     SX6    B5+         STORE NUMBER OF RECOVERABLE JOBS 
          SA6    RJSN 
          NZ     X6,DRJX     IF RECOVERABLE JOBS
          SA1    UIFG        CHECK USER INTERACTION FLAG
          ZR     X1,DRJ4     IF USER HAS INTERACTED 
          SA1    LFLG        CHECK *OP=T* OPTION FLAG 
          NZ     X1,DRJX     IF MESSAGE TO BE SUPPRESSED
 DRJ4     WRITEC OUTPUT,MSGA *NO RECOVERABLE JOBS.* 
  
 DRJ      SUBR               ENTRY/EXIT 
          BX6    X6-X6       CLEAR NUMBER OF RECOVERABLE JOBS 
          SA6    RJSN 
          SA1    QJSN        SET NUMBER OF JOBS TO CHECK
          SB6    X1+
          SB5    B0+         INITIALIZE NUMBER OF RECOVERABLE JOBS
          SB2    JSNB        SET *QAC* POSITION POINTER 
          SB3    JSNB        SET RECOVERABLE JSN POSITION POINTER 
          SB4    QRBL        NUMBER OF WORDS TO TRANSFER
 DRJ1     ZR     B6,DRJ3     IF NO MORE JOBS TO CHECK 
          SB6    B6-1        NUMBER OF JOBS REMAINING TO CHECK
          SA1    B2+2        STATUS ADDRESS IN BUFFER 
          MX0    12 
          BX1    X0*X1       GET STATUS 
          LX1    12 
          MX0    4
          LX0    11 
          BX1    X0*X1
          LX1    -7          CONNECTION STATUS
          SX2    X1-DTCS
          NZ     X2,DRJ2     IF NOT DETACHED
          SX1    B4          NUMBER OF WORDS TO TRANSFER
          SX2    B2          SOURCE ADDRESS 
          SX3    B3+         DESTINATION ADDRESS
          MOVE   X1,X2,X3    MOVE JSN WORD BLOCK
          SB3    B3+QRBL     INCREMENT RECOVERABLE JSN POINTER
          SB5    B5+1        INCREMENT RECOVERABLE JSN-S
 DRJ2     SB2    B2+QRBL     INCREMENT *QAC* POSITION POINTER 
          EQ     DRJ1        CHECK NEXT WORD BLOCK
 DTT      SPACE  4,15 
**        DTT - DETERMINE TIME UNTIL TIMEOUT. 
* 
*         ENTRY  (*PRJD*) = SCHEDULING FIELD ADDRESS IN *JSNB* BUFFER.
* 
*         EXIT   (X6) = MINUTES REMAINING UNTIL TIMEOUT.
* 
*         USES   X - 0, 1, 2, 4, 6. 
*                A - 1, 4.
* 
*         CALLS  CDD. 
* 
*         MACROS RTIME. 
  
  
 DTT      SUBR               ENTRY/EXIT 
          RTIME  DTTA        GET REAL TIME
          SA1    PRJD        GET SCHEDULING FIELD 
          SA1    X1 
          AX1    12 
          MX0    -24
          BX1    -X0*X1 
          SA4    DTTA        GET SECONDS
          MX0    24 
          BX4    X0*X4
          LX4    24 
          IX1    X1-X4       SECONDS REMAINING UNTIL TIMEOUT
          SX1    X1+30
          SX2    60 
          IX1    X1/X2       CONVERT SECONDS TO MINUTES 
          RJ     CDD         CONVERT TO DECIMAL DISPLAY CODE
  
*         FORMAT MINUTES REMAINING UNTIL TIMEOUT. 
  
          LX6    30 
          MX0    30 
          BX6    X0*X6
          SA1    DTTB        APPEND *MIN.*
          BX6    X6+X1
          EQ     DTTX        RETURN 
  
 DTTA     DATA   0           REAL TIME
 DTTB     DATA   5R MIN.
 GLJ      SPACE  4,15 
**        GLJ - GET LIST OF JSN-S.
* 
*         *GLJ* ISSUES A *QAC* PEEK REQUEST TO RETURN RECOVERABLE JOBS
*         FROM THE EXECUTING JOB TABLE TO BUFFER *JSNB*.
* 
*         EXIT   (QJSN) = NUMBER OF JSN-S RETURNED BY *QAC*.
* 
*         USES   X - 0, 1, 2, 6.
*                A - 1, 2, 6. 
* 
*         CALLS  IBS. 
* 
*         MACROS SYSTEM, WRITEC.
  
  
 GLJ2     SA6    QJSN        NO RECOVERABLE JOBS FOUND
  
 GLJ      SUBR               ENTRY/EXIT 
 GLJ1     SYSTEM QAC,R,QRPB  ISSUE PEEK REQUEST 
  
*         RESET *QAC* REQUEST BUFFER. 
  
          SA1    QRPB        CLEAR COMPLETE BIT 
          MX0    -1 
          BX6    X0*X1
          SA6    A1 
          AX1    10          CHECK ERROR FIELD
          SX6    X1-ER07
          ZR     X6,GLJ2     IF NO RECOVERABLE JOBS FOUND 
          SA2    QRPB+B1     RESET BUFFER POINTER 
          SX6    X2 
          SA6    A2+B1       SET IN = FIRST 
          SA6    A6+B1       SET OUT = FIRST
          MX0    -12
          SA1    BQPP        DETERMINE NUMBER OF JSN-S RETURNED 
          LX1    24 
          BX6    -X0*X1 
          SA6    QJSN 
          LX1    36          RESET NUMBER OF JSN-S TO RETURN
          LX0    36 
          BX1    X0*X1
          SA2    GLJA 
          BX6    X1+X2
          SA6    A1 
  
*         DETERMINE IF *QAC* SCAN COMPLETE. 
  
          SA1    QRPB+4 
          MX0    36 
          BX2    X0*X1
          ZR     X2,GLJX     IF SCAN COMPLETE 
          RJ     IBS         INCREASE BUFFER SIZE 
          ZR     X1,GLJ1     IF REQUEST COMPLETE
          WRITEC OUTPUT,MSGK *MAX FL ENCOUNTERED - JOB LIST INCOMPLETE.*
          EQ     GLJX        RETURN 
  
  
 GLJA     VFD    12/0,12/7777B,36/0 
 IBS      SPACE  4,15 
**        IBS - INCREASE BUFFER SIZE. 
* 
*         ENTRY  (MEMC) = CURRENT MEMORY. 
*                (MAXC) = MAXIMUM MEMORY AVAILABLE. 
* 
*         EXIT   (MEMC) = CURRENT MEMORY. 
*                (X1) = 0, MEMORY REQUEST COMPLETE. 
*                       1, NOT ENOUGH FL AVAILABLE. 
* 
*         USES   X - 0, 1, 2, 3, 6. 
*                A - 1, 2, 3, 6.
* 
*         MACROS  MEMORY. 
  
  
 IBS1     SX1    1           SET ERROR RETURN 
  
 IBS      SUBR               ENTRY/EXIT 
          SA1    MEMC        GET CURRENT MEMORY 
          SX3    MEMI 
          IX2    X1+X3
          SA3    MAXC 
          IX6    X3-X2
          NG     X6,IBS1     IF REQUEST WOULD EXCEED VALIDATION LIMITS
          BX6    X2 
          SA6    A1          UPDATE *MEMC*
          LX6    30 
          SA6    STATM
          MEMORY CM,STATM,R,,NA  REQUEST ADDITIONAL MEMORY
          SA1    STATM
          SA2    MEMC 
          AX1    30 
          BX2    X1-X2
          NZ     X2,IBS1     IF REQUEST NOT HONORED 
          SA1    QRPB+4      UPDATE LWA+1 OF *JSNB* 
          SX6    X1+MEMI
          MX0    -18
          BX6    -X0*X6 
          SA6    QRPB+4 
          BX1    X1-X1       CLEAR ERROR RETURN 
          EQ     IBSX        RETURN 
 PRJ      SPACE  4,15 
**        PRJ - PRINT LIST OF RECOVERABLE JSN-S.
* 
*         *PRJ* PRINTS THE LIST OF RECOVERABLE JSN-S, UJN-S,
*         AND STATUSES LOCATED IN BUFFER *JSNB*.  MINUTES 
*         REMAINING UNTIL TIMEOUT ARE ALSO PRINTED FOR SUSPENDED
*         JOBS. 
* 
*         USES   X - 0, 1, 2, 3, 4, 6, 7. 
*                A - 1, 2, 3, 4, 6, 7.
*                B - 2. 
* 
*         CALLS  DTT, SFN.
* 
*         MACROS WRITEC.
  
 PRJ      SUBR               ENTRY/EXIT 
          BX6    X6-X6       CLEAR TERMINAL INTERRUPT FLAG
          SA6    INFG 
          WRITEW OUTPUT,PRJA,PRJAL  WRITE TABLE HEADER
          SA1    RJSN        SAVE NUMBER OF RECOVERED JSN-S 
          BX6    X1 
          SA6    PRJE 
          SA2    LIST        PRINT TABLE ADDRESS
          SB2    WRDL-2 
          SA2    A2+B2       LAST WORD ADDRESS IN PRINT TABLE 
          BX6    X6-X6
          SA6    A2          ZERO LAST WORD IN PRINT TABLE
          SA6    A2+B1       SET END OF LINE CHARACTER
  
*         DETERMINE AND STORE JSN.
  
          SA1    JSNB        RECOVERABLE JSN TABLE ADDRESS
 PRJ1     SA2    LIST        PRINT BUFFER ADDRESS 
          MX0    24          GET JSN
          BX1    X0*X1
          RJ     SFN         SPACE-FILL JSN 
          LX6    -18
          SA6    A2          STORE JSN IN PRINT BUFFER
  
*         DETERMINE AND STORE UJN.
  
          SA1    A1+B1       GET UJN
          MX0    42 
          BX1    X0*X1
          RJ     SFN         SPACE FILL UJN 
          SA2    A2+B1       STORE UJN IN PRINT BUFFER
          SA6    A2 
  
*         DETERMINE AND STORE JOB STATUS. 
  
          SA1    A1+B1       GET STATUS FIELD 
          MX0    5
          LX0    -6 
          BX1    X0*X1
          LX1    -49
          SA2    A2+B1
          SA3    X1+PRJB     LOCATION OF MESSAGE
          BX6    X3 
          SA6    A2 
  
*         DETERMINE IF JOB SUSPENDED AND OBTAIN MINUTES UNTIL TIMEOUT.
  
          SA2    A2+B1
          SX6    A2 
          SA6    PRJC        SAVE PRINT BUFFER ADDRESS
          SX6    A1+
          SA6    PRJD        SAVE RECOVERABLE JSN BUFFER ADDRESS
          SX1    X1-SUJS
          NZ     X1,PRJ2     IF NOT SUSPENDED 
          RJ     DTT         DETERMINE TIME UNTIL TIMEOUT 
          SA1    PRJC        STORE TIME IN PRINT BUFFER 
          SA6    X1 
          SA3    INFG 
          NZ     X3,PRJX     IF INTERRUPT OCCURRED
  
*         PRINT LIST OF RECOVERABLE JSN-S.
  
 PRJ2     WRITEC OUTPUT,LIST LIST OF RECOVERABLE JOBS 
          SA2    PRJC 
          SA2    X2+         RESTORE PRINT BUFFER ADDRESS 
          SA1    PRJD 
          SA1    X1+1        ADVANCE TO NEXT JSN IN BUFFER
          SA4    PRJE        DECREMENT NUMBER OF JSN-S TO PRINT 
          SX6    X4-1 
          SA6    PRJE 
          NZ     X6,PRJ3     IF MORE TO PRINT 
          WRITEC OUTPUT,PRJA BLANK LINE 
          EQ     PRJX        RETURN 
  
 PRJ3     BX6    X6-X6
          SA6    A2+         ZERO MINUTES FIELD 
          SA1    A1+B1       INCREMENT JSN BUFFER ADDRESS 
          EQ     PRJ1        RETURN 
  
  
*         RECOVERABLE JSN PRINT BUFFER. 
  
 PRJA     DATA   C*     * 
          DATA   C*   RECOVERABLE JOB(S)* 
          DATA   C*     * 
          DATA   C*   JSN    UJN       STATUS       TIMEOUT*
          DATA   C*     * 
 PRJAL    EQU    *-PRJA 
 PRJB     BSS    0           STATUSES FOR RECOVERY
          DATA   10HINITIAL 
          DATA   10HEXECUTING 
          DATA   10HSCH ROLLED
          DATA   10HSCP ROLLIN
          DATA   10HSCP ROLLED
          DATA   10HT/E ROLLED
          DATA   10HI/O ROLLED
          DATA   10HIDLE
          DATA   10HSUSPENDED 
          DATA   10HPCP ROLLED
          ERRNZ  *-PRJB-1-RCJS    TABLE LENGTH ERROR
 PRJC     DATA   0           PRINT BUFFER POSITION POINTER
 PRJD     DATA   0           RECOVERABLE JSN BUFFER POSITION POINTER
 PRJE     DATA   0           NUMBER OF JSN-S REMAINING TO PRINT 
          SPACE  4,10 
*         THE FOLLOWING TESTS ENSURE PROPER INTERFACE BETWEEN 
*         THE RECOVERABLE JOB STATUSES PRINTED BY *RECOVER* AND 
*         THE SYMBOLS DEFINED IN *COMSEJT*.  IF AN ERROR OCCURRS, 
*         THE PROPER STATUS SHOULD BE CHANGED IN THE TABLE OF 
*         JOB STATUSES. 
  
  
          ERRNZ  PRJS-0      PRE-INITIAL JOB STEP 
          ERRNZ  EXJS-1      EXECUTING
          ERRNZ  ROJS-2      SCHEDULER ROLLOUT
          ERRNZ  SIJS-3      SCP ROLLIN 
          ERRNZ  SOJS-4      SCP ROLLOUT
          ERRNZ  TOJS-5      TIMED/EVENT ROLLOUT
          ERRNZ  IOJS-6      INTERACTIVE ROLLOUT
          ERRNZ  DOJS-7      DISABLED ROLLOUT 
          ERRNZ  SUJS-10B    SUSPENDED ROLLOUT
          ERRNZ  PCJS-11B    PSEUDO-ROLLOUT 
 PTI      SPACE  4,15 
**        PTI - PROCESS TERMINAL INTERRUPT. 
* 
*         *PTI* PROCESSES TERMINAL INTERRUPTS.  IF A USER 
*         BREAK 1 OR USER BREAK 2 IS DETECTED WHILE THE LIST
*         OF RECOVERABLE JOBS IS BEING PRINTED, THE LIST WILL 
*         BE TERMINATED.
* 
*         USES   X - 0, 1, 2, 6, 7. 
*                A - 1, 6, 7. 
* 
*         MACROS REPRIEVE.
  
  
 PTI      BSS    0           ENTRY
          BX6    X6-X6
          SA6    RPB+5       CLEAR PENDING SYSTEM REQUEST 
          SA6    RPB+6       RESET TERMINAL INTERRUPT 
          SA1    RPBA        RESET *P* ADDRESS
          MX0    18 
          LX0    -6 
          BX2    -X0*X1 
          SX1    QUU3 
          LX1    36 
          BX6    X1+X2
          SA6    RPBA        SET *RESUME* ADDRESS 
          SA1    INPUT       SET COMPLETE BIT IN INPUT FET
          SX2    B1 
          BX7    X1+X2
          SA7    A1+
          SA1    OUTPUT      SET COMPLETE BIT IN OUTPUT FET 
          BX7    X1+X2
          SA7    A1 
          SA1    INPUT+1
          SX6    X1 
          SA6    A1+B1       SET IN = FIRST 
          SA6    A6+1        SET OUT = FIRST
          SA1    TOFG 
          ZR     X1,PTI1     IF FILE NOT ASSIGNED TO TERMINAL 
          SA1    OUTPUT+1 
          SX6    X1+
          SA6    A1+B1       SET IN = FIRST 
          SA6    A6+B1       SET OUT = FIRST
 PTI1     SX6    1
          SA6    INFG        SET TERMINAL INTERRUPT FLAG
          SA6    UPRF        SET USER PROMPT FLAG 
          REPRIEVE  RPB,RESUME,200B  RESUME PRIOR EXECUTION 
 QUU      SPACE  4,15 
**        QUU - QUERY USER. 
* 
*         EXIT   (X2) = 1 IF USER ENTERED A VALID JSN.
*                (X2) = 0 IF USER ENTERED *END*.
*                (X2) = .LT. 0 IF USER ENTERED AN INCORRECT ENTRY OR
*                       *RELIST*. 
*                (X1) = USER RESPONSE, LEFT JUSTIFIED, ZERO FILLED. 
* 
*         USES   X - 0, 1, 2, 3, 4, 6.
*                A - 1, 2, 3, 6.
* 
*         CALLS  ABT, PRJ.
* 
*         MACROS READC, RECALL, WRITEC, WRITER. 
  
  
 QUU      SUBR               ENTRY/EXIT 
          BX6    X6-X6       CLEAR USER PROMPT FLAG 
          SA6    UPRF 
          SA1    LRSF 
          PL     X1,QUU1     IF PREVIOUS RESPONSE NOT *RELIST*
          BX6    X6-X6       CLEAR FLAG 
          SA6    A1 
          EQ     QUU2        PRINT RECOVERABLE JOBS 
  
 QUU1     SA1    UIFG        GET USER INTERACTION FLAG
          ZR     X1,QUU3     IF INTERACTION HAS BEEN DONE 
          SA1    JSNX 
          NZ     X1,QUU8     IF JSN ENTERED ON COMMAND
 QUU2     RJ     PRJ         PRINT LIST OF JSN-S
 QUU3     WRITEW OUTPUT,QUUA,QUUAL  PRINT MENU AND QUERY USER 
          SA1    TIFG 
          ZR     X1,QUU4     IF FILE NOT ASSIGNED TO TERMINAL 
          READ   INPUT,R
 QUU4     READC  INPUT,WBUF,WBFL
          NZ     X1,QUU10    IF EOR, EOF OR EOI 
  
*         DETERMINE IF REPLY = *RELIST*.
  
          SA2    MSGB 
          SA1    WBUF 
          BX2    X2-X1
          ZR     X2,QUU5     IF RESPONSE = *RELIST* 
          SA2    MSGC 
          BX2    X2-X1
          ZR     X2,QUU5     IF RESPONSE = *RELIST* 
          SA2    MSGD 
          BX2    X2-X1
          NZ     X2,QUU7     IF .NE. *RELIST* 
 QUU5     BX6    X6-X6       CLEAR INCORRECT REPLY COUNTER
          SA6    INRC 
          SA1    UPRF 
          NZ     X1,QUU6     IF NOT FIRST TIME THROUGH LOOP 
          SX6    B1+         SET LOOP FLAG
          SA6    UPRF 
          EQ     QUU2        PRINT LIST OF JOBS 
  
 QUU6     SX2    -B1         SET LIST EXIT FLAG 
          BX6    X2          SET LIST RESPONSE FLAG 
          SA6    LRSF 
          EQ     QUUX        RETURN 
  
*         DETERMINE IF REPLY = *GO*.
  
 QUU7     SA2    MSGF 
          SA1    WBUF 
          BX2    X2-X1
          ZR     X2,QUUX     IF REPLY = *GO*
          SA2    MSGG 
          BX2    X2-X1
          ZR     X2,QUUX     IF REPLY = *GO*
          SA2    MSGG2
          BX2    X2-X1
          ZR     X2,QUUX     IF REPLY = *GO*
          SA2    MSGG3
          BX2    X2-X1
          ZR     X2,QUUX     IF REPLY = *GO*
          SA2    MSGG4
          BX2    X2-X1
          ZR     X2,QUUX     IF REPLY = *GO*
  
*         VALIDATE JSN. 
  
 QUU8     MX0    6
          LX0    -24         GET FIFTH CHARACTER IN REPLY 
          BX2    X0*X1
          NZ     X2,QUU12    IF REPLY .GE. 5 CHARACTERS 
          LX0    6
          BX2    X0*X1
          NZ     X2,QUU9     IF REPLY = 4 CHARACTERS
          LX0    6
          BX2    X0*X1
          ZR     X2,QUU12    IF REPLY .LE. 2 CHARACTERS 
          SX2    1R_         SPACE-FILL FOURTH CHARACTER
          LX2    36          POSITION BLANK 
          BX1    X1+X2
 QUU9     BX6    X6-X6       CLEAR INCORRECT REPLY COUNTER
          SA6    INRC 
          SX2    B1+         FLAG VALID REPLY 
          EQ     QUUX        RETURN 
  
*         CLEAR TERMINATION STATUS IN FET IF FILE ASSIGNED
*         TO A TERMINAL.
  
 QUU10    SA3    TIFG        GET TERMINAL FLAG
          NZ     X3,QUU11    IF FILE ASSIGNED TO TERMINAL 
          WRITER OUTPUT      FLUSH BUFFER 
          SX3    MSGE        * NO JSN-S RECOVERED.* 
          EQ     ABT         ABORT
  
 QUU11    RECALL INPUT
          SA1    INPUT       INPUT FET
          MX0    16 
          LX0    -42
          BX6    -X0*X1      CLEAR TERMINATION STATUS 
          SA6    A1 
          EQ     QUU5        ASSUME *RELIST*
  
 QUU12    WRITEC OUTPUT,MSGH *INCORRECT ENTRY.* 
          SA1    INRC        GET INCORRECT REPLY COUNTER
          SX4    X1-MAXI     COMPARE VALUES 
          SX3    MSGJ        * INCORRECT REPLY LIMIT REACHED.*
          ZR     X4,ABT      IF MAXIMUM EXCEEDED
          SX6    X1+B1       INCREMENT INCORRECT REPLY COUNTER
          SA6    INRC 
          SX2    -B1         FLAG INCORRECT ENTRY 
          EQ     QUUX        RETURN 
  
  
*         USER PROMPT PRINT BUFFER. 
  
 QUUA     DATA   C*ENTER  GO  TO CONTINUE CURRENT JOB,* 
          DATA   C*       RELIST  TO LIST RECOVERABLE JOBS,*
          DATA   C*       OR DESIRED JSN:  "ES"*
 QUUAL    EQU    *-QUUA 
  
 SRJ      SPACE  4,10 
**        SRJ - SORT LIST OF RECOVERABLE JOBS.
* 
*         *SRJ* SORTS THE LIST OF RECOVERABLE JOBS INTO 
*         BUFFER *JSNB*.
* 
*         USES   X - 0, 1, 2, 3, 5. 
*                A - 1, 3, 5. 
*                B - 2, 3, 4, 5, 6. 
* 
*         MACROS MOVE.
  
  
 SRJ      SUBR               ENTRY/EXIT 
          SA5    RJSN        NUMBER OF JOBS RECOVERABLE 
          SX5    X5-1 
          SX0    QRBL 
          IX5    X0*X5
          MX0    24 
          SB3    JSNB+X5     LAST JSN ADDRESS 
          SB4    B1+
 SRJ1     ZR     B4,SRJX     IF SORT COMPLETE 
          SB4    B0+         SORT FLAG
          SB2    JSNB 
          SB5    B2-QRBL
 SRJ2     SB5    B5+QRBL
          LE     B3,B5,SRJ1  IF END OF BUFFER 
          SA1    B5          JSN ENTRY ADDRESS
          SA3    A1+QRBL     NEXT JSN ADDRESS 
          BX1    X0*X1       EXTRACT JSN
          LX1    24          CLEAR SIGN BIT 
          BX3    X0*X3       EXTRACT JSN
          LX3    24          CLEAR SIGN BIT 
          IX1    X3-X1
          PL     X1,SRJ2     IF SWITCH UNNECESSARY
          SB4    B1 
  
*         SAVE ADDRESS LOCATIONS. 
  
          SB2    A1          FIRST JSN ADDRESS
          SB4    A3+         SECOND JSN ADDRESS 
          SB6    JSNT        TEMPORARY ADDRESS FOR SWITCH 
  
*         INTERCHANGE WORD BLOCKS.
  
          SX1    QRBL        MOVE FIRST JSN BLOCK TO TEMPORARY
          SX2    B2 
          SX3    B6 
          MOVE   X1,X2,X3 
          SX1    QRBL        MOVE SECOND JSN BLOCK TO PREVIOUS BLOCK
          SX2    B4 
          SX3    B2 
          MOVE   X1,X2,X3 
          SX1    QRBL        MOVE TEMPORARY BLOCK TO NEXT BLOCK 
          SX2    B6 
          SX3    B4 
          MOVE   X1,X2,X3 
          EQ     SRJ2        CONTINUE SORT
 SVJ      SPACE  4,10 
**        SVJ - SEARCH FOR JSN USER ENTERED.
* 
*         ENTRY  (X1) = JSN LEFT-JUSTIFIED, ZERO-FILLED.
* 
*         EXIT   (X2) = 0 IF JSN NOT FOUND OR JOB CANNOT BE RECOVERED.
* 
*         USES   X - 0, 1, 2, 3, 4, 5, 6. 
*                A - 2, 3, 6. 
* 
*         MACROS WRITEC.
  
  
 SVJ4     SX5    MSGI        *JSNX NOT FOUND.*
 SVJ5     SA2    X5          SET JSN IN MESSAGE 
          MX0    -36
          BX2    -X0*X2 
          BX6    X1+X2
          SA6    A2 
          WRITEC OUTPUT,X5   ISSUE MESSAGE
          BX6    X6-X6       CLEAR *INCORRECT REPLY* COUNTER
          SA6    INRC 
          BX2    X2-X2       FLAG JSN NOT FOUND 
  
 SVJ      SUBR               ENTRY/EXIT 
          SA2    RJSN        NUMBER OF RECOVERABLE JSN-S
          SA3    JSNB        TABLE ADDRESS OF RECOVERABLE JSN-S 
          MX0    24 
          BX4    X1 
          LX4    24 
 SVJ1     BX3    X0*X3       EXTRACT JSN FROM BUFFER
          LX3    24 
          IX3    X4-X3
          ZR     X3,SVJ2     IF JSN FOUND 
          NG     X3,SVJ4     IF JSN NOT IN LIST 
          SX2    X2-1 
          ZR     X2,SVJ4     IF END OF TABLE
          SA3    A3+QRBL
          EQ     SVJ1        COMPARE NEXT JSN 
  
 SVJ2     SA2    A3+3        CHECK JOB ACCESS LEVEL LIMITS
          MX6    -3 
          LX2    -15
          BX6    -X6*X2      UPPER ACCESS LEVEL LIMIT FOR SPECIFIED JOB 
          SA2    JUAL 
          IX6    X2-X6
          PL     X6,SVJ3     IF .LE. LIMIT FOR CURRENT JOB
          SX5    MSGL        *JSNX NOT RECOVERABLE-SECURITY CONFLICT.*
          EQ     SVJ5        ISSUE ERROR MESSAGE
  
 SVJ3     SX2    B1          FLAG JSN FOUND AND JOB RECOVERABLE 
          EQ     SVJX        RETURN 
          SPACE  4,10 
*         COMMON DECKS. 
  
*CALL     COMCCDD 
*CALL     COMCCIO 
*CALL     COMCCPM 
*CALL     COMCMVE 
*CALL     COMCRDC 
*CALL     COMCRDW 
*CALL     COMCSFN 
*CALL     COMCSYS 
*CALL     COMCWTC 
*CALL     COMCWTW 
          SPACE  4,10 
*         BUFFERS.
  
          USE    LITERALS 
 INBUF    EQU    *           INPUT BUFFER 
 JSNT     EQU    INBUF+IBFL  TEMPORARY FOR SORT SWITCH
 LIST     EQU    JSNT+QRBL   LIST OF RECOVERABLE JSN-S
 OUTBUF   EQU    LIST+WRDL   OUTPUT BUFFER
 WBUF     EQU    OUTBUF+OBFL WORKING BUFFER 
 JSNB     EQU    WBUF+WBFL   TABLE OF JSN-S, UJN-S, AND STATUSES
 RFL=     EQU    JSNB+JSNBL+200B  SET *RECOVER* FL
          ERRNG  AFFL*100B-RFL=  FL EXCEEDS MAXIMUM LOGIN FL
          TITLE  PRESET.
**        PRS - PRESET. 
  
  
 PRS      SUBR               ENTRY/EXIT 
          SB1    1
  
*         DETERMINE JOB ORIGIN. 
  
          SX3    PRSA        * USER ACCESS NOT VALID.*
          SA1    JOPR        GET JOB ORIGIN TYPE
          LX1    -24
          MX0    -12
          BX1    -X0*X1 
          SX1    X1-TXOT
          NZ     X1,ABT      IF NOT *TXOT*
          SX6    B1+         SET INTERACTIVE FLAG 
          SA6    IFLG 
  
*         GET UPPER ACCESS LEVEL LIMIT FOR CURRENT JOB. 
  
          GETJAL JUAL        GET JOB ACCESS LEVEL LIMITS
          SA1    JUAL        ISOLATE UPPER ACESS LEVEL LIMIT
          MX6    -3 
          LX1    -6 
          BX6    -X6*X1 
          SA6    A1 
  
*         PROCESS ARGUMENT LIST.
  
          SA1    ACTR 
          MX0    -18
          BX1    -X0*X1      ARGUMENT COUNT 
          ZR     X1,PRS5     IF NO ARGUMENTS
          SB4    X1          SET NUMBER OF ARGUMENTS
          SA1    ARGR        DETERMINE COMMAND FORMAT 
          MX0    -6 
          BX1    -X0*X1 
          SX2    X1-1R= 
          ZR     X2,PRS1     IF ORDER INDEPENDENT 
          NZ     X1,PRS2     IF ARGUMENT ERROR
          SX1    1           SET ERROR FLAG 
          SB4    B4-MARG-1
          PL     B4,PRS2     IF ARGUMENT ERROR
          SA1    ARGR        STORE JSN
          BX6    X1 
          SA6    JSNX 
          SA1    ARGR+1 
          EQ     PRS3        CHECK FOR VALID OPTIONS
  
 PRS1     R=     A4,ARGR
          SB5    TARG        ADDRESS OF ARGUMENT TABLE
          RJ     ARG         PROCESS ARGUMENTS
 PRS2     SX3    PRSB        * ARGUMENT ERROR.* 
          NZ     X1,ABT      IF ARGUMENT ERROR
  
*         CHECK IF *OP* OPTION VALID. 
  
          SA1    T           GET *OP* OPTIONS 
 PRS3     MX0    -6 
 PRS4     LX1    6
          BX2    -X0*X1      GET NEXT OPTION
          ZR     X2,PRS5     IF NO MORE OPTIONS 
  
*         SEARCH FOR *OP* OPTION SPECIFIED IN TABLE OF LEGAL OPTIONS. 
  
          SX4    TOPOL       NUMBER OF VALID OPTIONS
          RJ     SVO         SEARCH FOR MATCH 
          SX3    PRSC        * OP OPTION NOT VALID.*
          ZR     X4,ABT      IF NO MATCH
  
*         DETERMINE IF *T* WAS THE OPTION SPECIFIED.
  
          SX4    1RT
          BX4    X4-X2
          NZ     X4,PRS4     IF NOT *OP=T*
          SX6    1           SET LOGIN FLAG 
          SA6    LFLG 
          EQ     PRS4        PROCESS NEXT OPTION
  
*         DETERMINE CM AVAILABLE. 
  
 PRS5     MEMORY CM,STATM,R  DETERMINE MAXIMUM CM AVAILABLE 
          SA2    STATM
          BX6    X2 
          AX6    30 
          SA6    MAXC 
          SX7    B0+         DETERMINE CURRENT CM AVAILABLE 
          SA7    STATM
          MEMORY CM,A7,R
          SA1    STATM
          AX1    30 
          BX6    X1 
          SA6    MEMC 
  
*         DETERMINE AND SET TERMINAL CHARACTERISTICS. 
  
          TSTATUS  TTST      GET TERMINAL STATUS
          SA1    B1+TTST     GET CURRENT CHARACTER SET
          MX0    1
          LX0    3
          BX1    X0*X1
          ZR     X1,PRS6     IF NOT 64 CHARACTER SET
          BX6    X1          SET ASCII FLAG 
          SA6    ASFG 
          CSET   NORMAL      SET TERMINAL CHARACTER MODE
 PRS6     PROMPT OFF         SUPPRESS *IAF* PROMPTS 
          SA1    LFTB        SET LIST OF FILES
          BX6    X1 
          BX7    X7-X7
          SA6    B1+B1       STORE TERMINAL FILES 
          SA7    A6+B1
          SX2    INPUT
          RJ     STF         DETERMINE IF FILE TYPE *TT*
          NZ     X6,PRS7     IF FILE TYPE NOT *TT*
          SX6    B1+         STORE TERMINAL FLAG
          SA6    TIFG 
 PRS7     SX2    OUTPUT 
          RJ     STF         DETERMINE IF FILE TYPE *TT*
          NZ     X6,PRSX     IF FILE TYPE NOT *TT*
          SX6    B1+         STORE TERMINAL FLAG
          SA6    TOFG 
          EQ     PRSX        RETURN 
  
  
 PRSA     DATA   C* USER ACCESS NOT VALID.* 
 PRSB     DATA   C* ARGUMENT ERROR.*
 PRSC     DATA   C* OP OPTION NOT VALID.* 
 TARG     SPACE  4,10 
*         TARG - ARGUMENT TABLE.
  
 TARG     BSS    0
 JSN      ARG    JSNX,JSNX   JOB SEQUENCE NUMBER
 OP       ARG    T,T         LOGIN
          ARG 
  
 T        DATA   0           *OP* OPTION
  
  
*         TOPO -TABLE OF VALID *OP* OPTIONS.
  
 TOPO     BSS    0
          DATA   1RT         LOGIN
 TOPOL    EQU    *-TOPO 
 SVO      SPACE  4,10 
**        SVO - SEARCH FOR VALID *OP* OPTIONS.
* 
*         ENTRY  (X4) = NUMBER OF OPTIONS IN TABLE. 
*                (X2) = VALUE SEARCHING FOR IN TABLE. 
* 
*         EXIT   (X4) = 0 IF *OP* NOT VALID.
*                (X2) = VALUE SEARCHED FOR IN TABLE.
* 
*         USES   X - 2, 3, 4, 6.
*                A - 3, 6.
  
  
 SVO2     BX6    X6-X6       CLEAR AS VALID ENTRY 
          SA6    A3 
  
 SVO      SUBR               ENTRY/EXIT 
          SA3    TOPO        TABLE OF LEGAL OPTIONS 
 SVO1     BX3    X3-X2
          ZR     X3,SVO2     IF MATCH FOUND 
          SX4    X4-1 
          ZR     X4,SVOX     IF OPTION NOT RECOGNIZED 
          SA3    A3+1 
          EQ     SVO1        COMPARE WITH NEXT VALUE
          SPACE  4,10 
*         COMMON DECKS. 
  
*CALL     COMCARG 
*CALL     COMCSTF 
          SPACE  4,10 
          END 
