*DECK RECOVRY 
USETEXT TEXPRES 
USETEXT TXSTD 
  
      PROC RECOVRY; 
#----------------------------------------------------------------------#
#                                                                      #
#     R E C O V R Y                                                    #
#                                                                      #
#     *RECOVRY* CONTAINS THE NECESSARY PROCEDURES TO PROCESS THE       #
#     -RECOVERY POINT- DIRECTIVE. IT RESIDES IN OVERLAY (1,14).        #
#                                                                      #
#     PROCS XDEF-ED IN *RECOVRY* :                                     #
#                                                                      #
#         RCVRYPT                                                      #
#         SAVRP1                                                       #
#                                                                      #
#----------------------------------------------------------------------#
  
      BEGIN 
      XREF ITEM CDCSCAT B;         # TRUE IF CDCS VERSION/INVOKE       #
      XREF ITEM CDCSDBM B;         # TRUE IF CDCS USE/CREATE           #
      XREF PROC CMOVE;             # CHARACTER MOVE PROCEDURE          #
      XREF PROC DB$RPT;            # DEFINES A RECOVERY POINT          #
      XREF PROC DIAG;              # DIAGNOSTIC ROUTINE                #
      XREF PROC RECYES;            # *STDYES* IF RECORDING             #
      BASED ARRAY RPARAM1;;        # USED TO STORE 1ST PARAMETER FOR   #
                                   # CALL TO DB$RPT                    #
      BASED ARRAY RPMSGADDR;;      # USED TO STORE ACTUAL MESSAGE ADDR #
      ARRAY RPARAM2[0:2];          # ARRAY TO HOLD 30-CHAR MESSAGE FOR #
                                   # CALL TO DB$RPT                    #
        BEGIN 
        ITEM RPWORD;
        END 
      CONTROL EJECT;
      XDEF PROC SAVRP1; 
      PROC SAVRP1;
#----------------------------------------------------------------------#
#                                                                      #
#     S A V R P 1                                                      #
#                                                                      #
#     *SAVRP1* CHECKS THE FIRST PARAMETER FOUND IN THE RECOVERY POINT  #
#     DIRECTIVE. SINCE THIS PARAMETER WILL CONTAIN THE UNIQUE RECOVERY #
#     POINT NUMBER ASSIGNED BY CDCS, IT MUST BE DEFINED AS INTEGER.    #
#     IF SO, ITS ADDRESS WILL BE STORED IN RPARAM1 IN ORDER TO BE      #
#     PASSED TO CDCS WHEN DB$RPT IS CALLED FROM *RCVRYPT*.             #
#                                                                      #
#----------------------------------------------------------------------#
  
      BEGIN 
      RECYES;                      # GO TO *STDYES* IF RECORDING       #
      IF NOT (CDCSCAT              # IF CDCS HAS NOT BEEN INVOKED      #
        OR CDCSDBM) 
      THEN
        BEGIN 
        DIAG (395);                # CDCS MUST BE INVOKED FOR THIS DIR.#
        STDNO;
        END 
  
      IF DATATYPE NQ DT$INTEGER       # IF 1ST PARAMETER NOT INTEGER   #
        OR FIGLITDATA NQ S"TEMPNAME"  # OR DATANAME NOT ON DEFINE LIST #
      THEN
        BEGIN 
        DIAG (387);                # 1ST PARAMETER MUST BE DEFINED INT #
        STDNO;
        END 
      ELSE
        BEGIN 
        P<RPARAM1> = DATAWORDADDR;  # SAVE FIRST PARAM FOR DB$RPT CALL #
        STDYES; 
        END 
      END 
      CONTROL EJECT;
      XDEF PROC RCVRYPT;
      PROC RCVRYPT; 
#----------------------------------------------------------------------#
#                                                                      #
#     R C V R Y P T                                                    #
#                                                                      #
#     *RCVRYPT* CHECKS THE 2ND PARAMETER GIVEN FOR THE RECOVERY POINT  #
#     DIRECTIVE TO MAKE SURE IT IS AN ALPHANUMERIC ITEM OF 1 - 30 CHARS#
#     WHICH CONTAINS A USER-SUPPLIED EXPLANATORY MESSAGE. IF NOT, DIAG #
#     388 IS ISSUED AND THE DIRECTIVE IS IGNORED. OTHERWISE, DB$RPT    #
#     IS CALLED PASSING BOTH THE ADDRESS WHERE THE UNIQUE RECOVERY     #
#     POINT NUMBER ASSIGNED BY CDCS WILL BE STORED AND THE ADDRESS OF  #
#     THE EXPLANATORY MESSAGE.                                         #
#                                                                      #
#----------------------------------------------------------------------#
  
      BEGIN 
      RECYES;                      # GO TO *STDYES* IF RECORDING       #
      RPWORD[0] = O"55555555555555555555";
      RPWORD[1] = O"55555555555555555555";
      RPWORD[2] = O"55555555555555555555";
  
      IF DATATYPE NQ DT$CHAR       # IF NOT A CHARACTER ITEM           #
        OR DATALENG LS 1           # OR ITEM IS LESS THAN 1 CHAR LONG  #
        OR DATALENG GR 30          # OR ITEM IS MORE THAN 30 CHARS LONG#
      THEN
        BEGIN 
        DIAG(388);                 # 2ND PARAM MUST BE 1 - 30 CHARACTRS#
        STDNO;
        END 
      ELSE
        BEGIN 
        P<RPMSGADDR> = DATAWORDADDR;
        CMOVE (RPMSGADDR, 0, DATALENG, RPARAM2, 0);  # BLANK FILL MSG  #
                                                     # FOR DB$RPT CALL #
        DB$RPT (RPARAM1, RPARAM2);  # DEFINE A RECOVERY POINT          #
        STDYES; 
        END 
      END 
      END 
      TERM
