*DECK PFSRPV
USETEXT COMCBEG 
    PROC PFSRPV (RPB,ABT,JFL);
# TITLE PFSRPV - PTFS/FTFS REPRIEVE PROCESSOR. #
  
      BEGIN  # PFSRPV # 
  
# 
**    PFSRPV - PTFS/FTFS REPRIEVE PROCESSOR.
* 
*     PFSRPV PERFORMS RECOVERY PROCESSING FOLLOWING A SYSTEM ERROR. 
* 
*     ENTRY      RPB = ARRAY CONTAINING RECOVR PARAMETER BLOCK. 
*                      (WORDS  1-16 = EXCHANGE PACKAGE, 
*                       WORDS 17-26 = RECOVR PARAMETERS.) 
*                ABT = ABORT FLAG (RETURNED). 
*                JFL = ARRAY CONTAINING JOB CM FIELD LENGTH.
* 
*     EXIT       SEE PROCESS. 
* 
*     PROCESS    IF RECOVERABLE SYSTEM ERROR: 
*                  SET PFSRPVT = *SYSTEM ERROR...DETAIL..REPRIEVING*. 
*                  INCREMENT REPRIEVE COUNT [ERROR].
*                  IF REPRIEVE COUNT GE MAXIMUM:  
*                    CHANGE *REPRIEVING* TO *REPRIEVES EXHAUSTED*.
*                    CALL RECOVR (DEACTIVATE PFSRPV). 
*                  ELSE:  
*                    SET RECOVR PARAMETER TO RESUME FIP EXECUTION.
*                    RETURN (RESUME PTFS/FTFS EXECUTION). 
*                RETURN (RESTORE SYSTEM ERROR AND ABORT). 
# 
      ARRAY RPB [1:26] S(1);       # RECOVR PARAMETER BLOCK # 
        BEGIN 
        ITEM RPB$WORD   U(00,00,60);  # PARAMETER BLOCK WORD #
        ITEM RPB$SYSERR U(00,48,12);  # RECOVR ERROR CODE [18] #
        END 
  
      ITEM ABT        U;           # TERMINATION FLAG # 
  
      BASED ARRAY JFL [1:1] S(1);  # JOB FIELD LENGTH # 
        BEGIN 
        ITEM JFL$WORD   U(00,00,60);  # CM WORD # 
        END 
  
# 
****  PROC PFSRPV - XREF LIST BEGIN.
# 
      XREF
        BEGIN 
        PROC RECOVR;               # SYSTEM REPRIEVE ROUTINE #
        END 
# 
****  PROC PFSRPV - XREF LIST END.
# 
  
# 
*                 * * * * * * * * * *     WHEN MODIFYING COMMON BLOCK 
*                 *                 *     COMPRPV, CHANGE THE CORRES- 
*                 *  C A U T I O N  *     PONDING DEFINITIONS IN
*                 *                 *     COMMON DECK *COMPRPV*.
*                 * * * * * * * * * * 
# 
  
      COMMON COMPRPV; 
        BEGIN  # COMMON BLOCK /COMPRPV/ # 
  
        ITEM PFSRPVA    U;         #  PFSRPV-ACTIVATED FLAG # 
        ARRAY [0:0] S(8); 
          BEGIN 
          ITEM PFSRPVM    C(00,00,70);  # SYSTEM ERROR MESSAGE #
          ITEM PFSRPVT    C(01,00,30);  # ERROR TEXT #
          ITEM PFSRPVTX1  C(01,00,15);  # PART 1 #
          ITEM PFSRPVTX2  C(02,30,15);  # PART 2 #
          ITEM PFSRPVTX3  C(04,00,30);  # REPRIEVING TEXT # 
          ITEM PFSRPVTX4  C(05,00,20);  # REPRIEVING TEXT # 
          END 
  
        END  # COMMON BLOCK /COMPRPV/ # 
  
      DEF NUMRPVERR  #  4 #;       # NUMBER OF RECOVERABLE ERRORS # 
# 
*     RECOVR ERROR CODE VALUES (FROM RPB[21]).
# 
  
      DEF SYSERR$CPL #O"01"#;      # CPU TIME LIMIT # 
      DEF SYSERR$OPD #O"06"#;      # OPERATOR DROP #
      DEF SYSERR$MSL #O"17"#;      # MASS STORAGE LIMIT # 
      DEF SYSERR$IOL #O"21"#;      # I/O LIMIT #
  
      ARRAY [1:NUMRPVERR] S(3); 
        BEGIN 
        ITEM RPV$ERRCNT I(00,36,12) = 
             [5,2,5,5];            # REPRIEVE COUNTS #
        ITEM RPV$ERRCOD U(00,48,12) = 
             [SYSERR$CPL,          # RECOVR ERROR CODES # 
              SYSERR$OPD, 
              SYSERR$MSL, 
              SYSERR$IOL];
        ITEM RPV$MSGTXT C(01,00,15) = 
             ["CPU TIME LIMIT.",   # MESSAGE TEXT # 
              "OPERATOR DROP. ",
              "M/S LIMIT.     ",
              "I/O LIMIT.     "]; 
        END 
  
      ITEM ERRCOD     I;           # RECOVR ERROR CODE #
      ITEM I          I;           # SCRATCH #
  
                                               CONTROL EJECT; 
      ERRCOD = RPB$SYSERR[21];     # FETCH RECOVR ERROR CODE #
  
      SLOWFOR I = 1 STEP 1 UNTIL NUMRPVERR
      DO
        BEGIN 
        IF ERRCOD EQ RPV$ERRCOD[I]  # IF REPRIEVABLE ERROR #
        THEN
          BEGIN 
          RPV$ERRCNT[I] = RPV$ERRCNT[I] - 1;  # DECREMENT RPV COUNT # 
          PFSRPVTX1 = "SYSTEM ERROR,  ";
          PFSRPVTX2 = RPV$MSGTXT[I];  # ADD TEXT TO MESSAGE # 
          PFSRPVTX3 = "        - REPRIEVING"; 
          IF RPV$ERRCNT[I] LE 0    # IF REPRIEVES EXHAUSTED # 
          THEN
            BEGIN 
            PFSRPVTX4 = "REPRIEVES EXHAUSTED."; 
            RECOVR (PFSRPV,0,0);   # DEACTIVATE PFSRPV #
            END 
  
          ELSE
            BEGIN 
            RPB$WORD[18] = 4;      # SET RESUME EXECUTION # 
            END 
  
          EXIT DONE;               # RETURN # 
          END 
  
        END 
  
      DONE: 
      END  # PFSRPV # 
  
    TERM
