TARL
          IDENT  TARL 
          ENTRY  RERUN
          ENTRY  RGET 
          ENTRY  RPUT 
          ENTRY  RSECURE
          ENTRY  SECURE 
          ENTRY  SRERUN 
          ENTRY  TINVOKE
          SYSCOM B1 
          TITLE  TARL - AUTOMATIC RECOVERY LIBRARY. 
*COMMENT  TARL - TAF AUTOMATIC RECOVERY LIBRARY.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 TARL     SPACE  4,10 
*****     TARL - TAF AUTOMATIC RECOVERY LIBRARY.
* 
*         A. E. SCHIPPERS.   80/06/20.
* 
*         TARL IS A LIBRARY OF INTERFACE ROUTINES FOR COBOL5, 
*         FORTRAN4 AND FORTRAN5 USER AND SYSTEM TASKS, MAKING 
*         RECOVERY REQUESTS TO THE TRANSACTION FACILITY.  DECK
*         *TARL* IS PLACED ON THREE DIFFERENT LIBRARIES CALLED
*         *TRANC5*, *TRANF4*, AND *TRANF5*.  THE COBOL *ENTER*
*         VERB AND THE FORTRAN *CALL* STATEMENT INTERFACE USER AND
*         SYSTEM TASKS TO THE TRANSACTION FACILITY. 
* 
*IF DEF,TRANC5
*         NOTE   THIS IS THE COBOL5 VERSION OF TARL.
*ENDIF
*IF DEF,TRANF4
*         NOTE   THIS IS THE FORTRAN4 VERSION OF TARL.
*ENDIF
*IF DEF,TRANF5
*         NOTE   THIS IS THE FORTRAN5 VERSION OF TARL.
*ENDIF
* 
* 
***       THE REQUESTS FOR *TAF* AUTOMATIC RECOVERY ARE AS FOLLOWS -
* 
*         TO RERUN A TRANSACTION COMMIT UNIT FOR A TERMINAL - 
*         ENTER RERUN USING STATUS [,USERNAM].
*         CALL RERUN (STATUS[,USERNAM]).
* 
*         TO RETRIEVE USER DATA FROM THE *TAF* RECOVERY FILE -
*         ENTER RGET USING MESSAGE, INDEX, STATUS, MESSAGE-LENGTH 
*         [, MESSAGE-UNITS].
*         CALL RGET (MESSAGE,INDEX,STATUS,MESSAGE-LENGTH
*         [,MESSAGE-UNITS]).
* 
*         TO PUT USER DATA ON THE TAF RECOVER FILE -
*         ENTER RPUT USING MESSAGE, INDEX, STATUS [,MESSAGE-LENGTH, 
*         MESSAGE-UNITS]. 
*         CALL RPUT (MESSAGE,INDEX,STATUS,MESSAGE-LENGTH
*         [,MESSAGE-UNITS]).
* 
*         TO RETREVE THE SECURE MESSAGE FROM PERMANENT STORAGE -
*         ENTER  RSECURE USING MESSAGE, STATUS, MESSAGE-LENGTH, 
*         MESSAGE-UNITS, FORMAT-EFFECTOR, TRANSPARENT-MODE. 
*         CALL RSECURE (MESSAGE, STATUS, MESSAGE-LENGTH,
*         MESSAGE-UNITS, FORMAT-EFFECTOR, TRANSPARENT-MODE).
* 
*         TO SAVE A SECURE MESSAGE -
*         ENTER SECURE USING MESSAGE, STATUS [, MESSAGE-LENGTH, 
*         MESSAGE-UNITS, FORMAT-EFFECTOR, TRANSPARENT-MODE].
*         CALL SECURE (MESSAGE, STATUS, MESSAGE-LENGTH
*         [, MESSAGE-UNITS, FORMAT-EFFECTOR, TRANSPARENT-MODE]).
* 
*         TO ASSIGN A NEW TRANSACTION SEQUENCE NUMBER - 
*         ENTER TINVOKE USING STATUS, NEW-SYS-ID [,OLD-SYS-ID]. 
*         CALL TINVOKE (STATUS, NEW-SYS-ID [, OLD-SYS-ID]). 
* 
***       THE PARAMETERS FOR *TAF* AUTOMATIC RECOVERY 
*         REQUESTS ARE DEFINED BELOW. 
* 
*         FORMAT-EFFECTOR    PARAMETER TO INDICATE IF 
*                            FORMAT-EFFECTORS ARE USED. 
*                            COBOL - 01 LEVEL COMPUTATIONAL-1 DATA
*                            NAME.
*                            FORTRAN - INTERGER.
* 
*         INDEX              INDEX FOR RECOVERY RECORD. 
*                            COBOL - 01 LEVEL COMPUTATIONAL-1 DATA
*                            NAME.
*                            FORTRAN - INTEGER. 
*                            VALUES ARE THE SAME AS FOR *NAM*.
* 
*         MESSAGE            DATA ITEM CONTAINING THE RECOVERY MESSAGE. 
*                            COBOL - 01 LEVEL ITEM. 
*                            FORTRAN - HOLLERITH. 
* 
*         MESSAGE-LENGTH     LENGTH OF MESSAGE IN MESSAGE-UNITS.
*                            COBOL - 01 LEVEL COMPUTATIONAL-1 DATA
*                            NAME.
*                            FORTRAN - INTEGER. 
* 
*         MESSAGE-UNITS      APPLICATION CHARACTER TYPE.  THE TYPE IS 
*                            THE SAME AS FOR *NAM*. 
*                            COBOL - 01 LEVEL COMPUTATIONAL-1 DATA
*                            NAME.
*                            FORTRAN - INTEGER. 
* 
*         NEW-SYS-ID         NEW SYSTEM IDENTIFIER. 
*                            COBOL - 01 LEVEL COMPUTATIONAL-1 DATA
*                            NAME.
*                            FORTRAN - INTEGER. 
* 
*         OLD-SYS-ID         OLD SYSTEM IDENTIFIER. 
*                            COBOL - 01 LEVEL COMPUTATIONAL-1 DATA
*                            NAME.
*                            FORTRAN - INTEGER. 
* 
*         STATUS             STATUS OF REQUEST. 
*                            COBOL - 01 LEVEL COMPUTATIONAL-1 DATA
*                            NAME.
*                            FORTRAN - INTEGER. 
* 
*         TRANSPARENT-MODE   INDICATES IF TRANSPARENT MODE WAS USED.
*                            COBOL - 01 LEVEL COMPUTATIONAL-1 DATA
*                            NAME.
*                            FORTRAN - INTEGER. 
*                            THE VALUE IS THE SAME AS FOR *NAM*.
* 
*         USERNAM            1-7 CHARACTER USER NAME. 
*                            COBOL - 01 LEVEL DATA ITEM.
*                            FORTRAN - HOLLERITH. 
* 
  
*         COMMON DECKS CALLED.
  
*CALL COMKFLD 
*CALL COMKMAC 
          LIST   X
  
*         THE FOLLOWING COMMON DECKS USE *BSS* TO ASSIGN LOCATIONS
*         TO SYMBOLS.  THE LIBRARY INTERFACE ROUTINES DO NOT WANT 
*         TO ALLOCATE STORAGE FOR THESE SYMBOLS SO THE CURRENT ORIGIN 
*         COUNTER IS SAVED BY *BEGN* AND IS RESTORED AFTER THE COMMON 
*         DECKS ARE ASSEMBLED.
  
 BEGN     BSS    0           SAVE CURRENT ORIGIN ADDRESS
*CALL COMKRRD 
  
          ORG    BEGN        RESTORE ORIGIN COUNTER 
  
*         STORAGE FOR RECOVERY REQUEST PARAMETERS.
  
 PARML    MAX    TSEPL,TRGPL,TREPL,TTIPL  MAXIMUM LENGTH
 PARM     BSS    PARML
          BSSZ   1           TERMINATE REQUEST WITH ZERO WORD 
  
  
*         THE FOLOWING CODE IS CONDITIONALLY PUT ON THE 
*         COMPILE FILE AT MODIFICATION TIME.  THIS CODE 
*         ALSO SETS VALUES FOR CONDITIONAL ASSEMBLY OF SOME 
*         CODE LATER IN THIS DECK.
  
 .1       SET    0
*IF DEF,TRANC5
 .1       SET    .1+1 
 .2       SET    0           COBOL5 VERSION 
*ENDIF
*IF DEF,TRANF4
 .1       SET    .1+1 
 .2       SET    1           FORTRAN4 VERSION 
*ENDIF
*IF DEF,TRANF5
 .1       SET    .1+1 
 .2       SET    2           FORTRAN5 VERSION 
*ENDIF
 .A       IFNE   .1,1 
  
*         ONE AND ONLY ONE OF THE TLIBXX LIBRARIES MUST BE
*         DEFINED AT MODIFICATION TIME. 
  
          ERR                MODIFICATION ERRORS
  
 .A       ENDIF 
 RERUN    SPACE  4,15 
**        RERUN - RERUN TRANSACTION.
* 
*         ENTRY  ENTER RERUN USING STATUS.
* 
*                CALL RERUN(STATUS).
* 
*                (A1) = FWA OF PARAMETER LIST.
* 
*         EXIT   REQUEST IS PROCESSED.
*                (A0) = (A0) ON ENTRY.
* 
*         USES X - 1. 
* 
*         CALLS  IRR. 
  
  
          VFD    42/0LRERUN,18/RERUN
  
 RERUN    SUBR               ENTRY/EXIT 
          SX1    RFRE        RERUN REQUEST
          RJ     IRR         ISSUE RECOVERY REQUEST 
          EQ     RERUNX      RETURN 
 RGET     SPACE  4,15 
**        RGET - GET DATA FROM RECOVERY FILE. 
* 
*         ENTRY  ENTER RGET USING MESSAGE, INDEX, STATUS, 
*                MESSAGE-LENGTH [, MESSAGE-UNITS].
* 
*                CALL RGET(MESSAGE,INDEX,STATUS,MESSAGE-LENGTH
*                [,MESSAGE-UNITS]). 
* 
*                (A1) = FWA OF PARAMETER LIST.
* 
*         EXIT   REQUEST IS PROCESSED.
*                (A0) = (A0) ON ENTRY.
* 
*         USES   X - 1. 
* 
*         CALLS  IRR. 
  
  
 RGET     SUBR               ENTRY/EXIT 
          SX1    RFRG        RGET REQUEST 
          RJ     IRR         ISSUE RECOVERY REQUEST 
          EQ     RGETX       RETURN 
 RPUT     SPACE  4,20 
**        RPUT - PUT DATA ON RECOVERY FILE. 
* 
*         ENTRY  ENTER RPUT USING MESSAGE, INDEX, STATUS
*                [,MESSAGE-LENGTH, MESSAGE-UNITS].
* 
*                CALL RPUT(MESSAGE,INDEX,STATUS,MESSAGE-LENGTH
*                [,MESSAGE-UNITS]). 
* 
*                (A1) = FWA OF PARAMETER LIST.
* 
*         EXIT   REQUEST IS PROCESSED.
*                (A0) = (A0) ON ENTRY.
*                TO *PAE* IF NOT ENOUGH PARAMETERS. 
* 
*         CALLS  IRR. 
* 
*         USES   A - 1, 2, 6. 
*                X - 1, 2, 3, 4, 6. 
*                B - 1, 2, 3, 4.
* 
*         CALLS  IRR. 
  
  
 .1       SET    0
  
 RPUT     SUBR               ENTRY/EXIT 
          SB1    1
          SA2    A1          GET ADDRESS OF MESSAGE 
          ZR     X2,RPT3     IF END OF PARAMETER LIST 
 .B       IFEQ   .2,0        IF COBOL5 VERSION
  
*         PROCESS PARAMETER LIST FOR COBOL5.
  
 .1       SET    .1+1 
          MX3    -18         GET LENGTH OF MESSAGE
          BX4    X2 
          LX4    17-53
          BX6    -X3*X4 
          SA6    RPTA        SAVE LENGTH OF MESSAGE 
 .B       ENDIF 
 .C       IFEQ   .2,1        IF FORTRAN4 VERSION
  
*         PROCESS PARAMETER LIST FOR FORTRAN4.
  
 .1       SET    .1+1 
  
*         NO SPECIAL PROCESSING NEEDED. 
  
 .C       ENDIF 
 .D       IFEQ   .2,2        IF FORTRAN5 VERSION
  
*         PROCESS PARAMETER LIST FOR FORTRAN5.
  
 .1       SET    .1+1 
  
*         NO SPECIAL PROCESSING NEEDED. 
  
 .D       ENDIF 
          SX6    X2          SAVE FWA OF MESSAGE
          SA6    PARM+RGMA
  
*         FORMAT STANDARD *TAF* REQUEST CALLING SEQUENCE. 
  
          SB3    TRGPL+PARM  LWA+1 OF PARAMETER TABLE 
 RPT1     SB4    A6+B1       CURRENT FREE LOCATION IN TABLE 
          SA2    A2+B1       GET NEXT PARAMETER 
          GT     B4,B3,RPT3  IF PARAMETER LIST TOO LARGE
          SX6    X2          SAVE PARAMETER IN PARAMETER TABLE
          SA6    B4 
          ZR     X2,RPT2     IF END OF PARAMETER LIST 
          EQ     RPT1        PROCESS NEXT PARAMETER 
  
 RPT2     SB4    B4-PARM     NUMBER OF PARAMETERS FOUND 
 .E       IFEQ   .2,0        IF COBOL5 VERSION
          SB2    TRGRL-1     REQUIRED NUMBER OF COBOL5 PARAMETERS 
          SA2    A1+RGML
          NZ     X2,RPT2.1   IF NOT USER SUPPLIED LENGTH
          SX6    RPTA        SAVE COBOL SUPPLIED LENGTH 
          SA6    PARM+RGML
          SX6    B0+         ZERO WORD TERMINATOR 
          SA6    A6+1 
 .E       ENDIF 
 .F       IFEQ   .2,1        IF FORTRAN4 VERSION
          SB2    TRGRL       REQUIRED NUMBER OF FORTRAN4 PARAMETERS 
 .F       ENDIF 
 .G       IFEQ   .2,2        IF FORTRAN5 VERSION
          SB2    TRGRL       REQUIRED NUMBER OF FORTRAN5 PARAMETERS 
 .G       ENDIF 
 RPT2.1   LT     B4,B2,RPT3  IF NOT ENOUGH PARAMETERS 
          SA1    PARM        INDICATE START OF PARAMETER LIST 
          SX1    RFRP        *RPUT* REQUEST 
          RJ     IRR         ISSUE RECOVERY REQUEST 
          EQ     RPUTX       RETURN 
  
 RPT3     SA1    RPUT        READ RETURN ADDRESS
          EQ     PAE         PROCESS ARGUMENT ERROR 
  
 RPTA     BSS    1
 RSECURE  SPACE  4,15 
**        RSECURE - RETRIEVE LAST *SECURE* MESSAGE. 
* 
*         ENTRY  ENTER RSECURE USING MESSAGE, STATUS, MESSAGE-LENGTH, 
*                MESSAGE-UNITS, FORMAT-EFFECTOR, TRANSPARENT MODE.
* 
*                CALL RSECURE(MESSAGE,STATUS,MESSAGE-LENGTH,
*                MESSAGE-UNITS,FORMAT-EFFECTOR,TRANSPARENT-MODE). 
* 
*                (A1) = FWA OF PARAMETER LIST.
* 
*         EXIT   REQUEST IS PROCESSED.
*                (A0) = (A0) ON ENTRY.
* 
*         USES   X - 1. 
* 
*         CALLS  IRR. 
  
  
 RSECURE  SUBR               ENTRY/EXIT 
          SX1    RFRS        *RSECURE* REQUEST
          RJ     IRR         ISSUE RECOVERY REQUEST 
          EQ     RSECUREX    RETURN 
 SRERUN   SPACE  4,20 
**        SRERUN - RERUN A TRANSACTION WITH ALTERNATE USERNAME. 
* 
*         THIS REQUEST CAN ONLY BE USED BY SYSTEM TASKS.
* 
*         ENTRY  ENTER SRERUN USING STATUS[, USERNAM].
* 
*                CALL SRERUN (STATUS[,USERNAM]).
* 
*                (A1) = FWA OF PARAMETER LIST.
* 
*         EXIT   REQUEST PROCESSED. 
*                (A0) = SAME AS ENTRY.
* 
*         USES   X = 1. 
* 
*         CALLS  IRR. 
  
  
          VFD    42/0LSRERUN,18/SRERUN
  
 SRERUN   SUBR               ENTRY/EXIT 
          SX1    RFSR        SRERUN REQUEST 
          RJ     IRR         ISSUE RECOVERY REQUEST 
          EQ     SRERUNX     RETURN 
  
 SECURE   SPACE  4,20 
**        SECURE - TRANSACTION IS SECURE. 
* 
*         ENTRY  ENTER SECURE USING MESSAGE, STATUS[, MESSAGE-LENGTH, 
*                MESSAGE-UNITS, FORMAT-EFFECTOR, TRANSPARENT-MODE]. 
* 
*                CALL SECURE(MESSAGE,STATUS,MESSAGE-LENGTH
*                [,MESSAGE-UNITS,FORMAT-EFFECTOR,TRANSPARENT-MODE]).
* 
*                (A1) = FWA OF PARAMETER LIST.
* 
*         EXIT   REQUEST IS PROCESSED.
*                (A0) = (A0) ON ENTRY.
*                TO *PAE* IF PARAMETER ERROR. 
* 
*         USES   A - 2, 6.
*                X - 2, 6.
*                B - 1, 3, 4. 
* 
*         CALLS  IRR. 
  
  
 .1       SET    0
  
 SECURE   SUBR   ENTRY/EXIT 
          SB1    1
          SA2    A1 
          ZR     X2,SEC3     IF END OF PARAMETER LIST 
 .H       IFEQ   .2,0        IF COBOL5 VERSION
  
*         PROCESS PARAMETER LIST FOR COBOL5.
  
 .1       SET    .1+1 
          MX3    -18         GET LENGTH OF MESSAGE
          BX4    X2 
          LX4    17-53
          BX6    -X3*X4 
          SA6    SECA        SAVE LENGTH OF MESSAGE 
          SX6    SECA        SAVE ADDRESS OF LENGTH 
          SA6    PARM+SEML
 .H       ENDIF 
 .I       IFEQ   .2,1        IF FORTRAN4 VERSION
  
*         PROCESS PARAMETER LIST FOR FORTRAN4.
  
 .1       SET    .1+1 
  
*         NO SPECIAL PROCESSING NEEDED. 
  
 .I       ENDIF 
 .J       IFEQ   .2,2        IF FORTRAN5 VERSION
  
*         PROCESS PARAMETER LIST FOR FORTRAN5.
  
 .1       SET    .1+1 
  
*         NO SPECIAL PROCESSING NEEDED. 
  
 .J       ENDIF 
          SX6    X2          SAVE FWA OF MESSAGE
          SA6    PARM+SEMA
          SA2    A2+B1       GET STATUS 
          ZR     X2,SEC3     IF END OF PARAMETER LIST 
          SX6    X2          SAVE FWA OF STATUS 
          SA2    A2+B1
          SA6    PARM+SEST
          SB3    TSEPL+PARM  LWA+1 OF PARAMETER TABLE 
 .K       IFEQ   .2,0        IF COBOL5 VERSION
          SB4    A6+1 
          NZ     X2,SEC.1    IF NOT END OF PARAMETER LIST 
          SX6    SECA        SAVE COBOL SUPPLIED LENGTH 
          SA6    PARM+SEML
          BX6    X6-X6       STORE ZERO WORD TERMINATIOR
          SA6    A6+B1
          EQ     SEC2        ISSUE REQUEST
 .K       ENDIF 
 .L       IFEQ   .2,1        IF FORTRAN4 VERSION
          ZR     X2,SEC3     IF END OF PARAMETER LIST 
 .L       ENDIF 
 .M       IFEQ   .2,2        IF FORTRAN5 VERSION
          ZR     X2,SEC3     IF END OF PARAMETER LIST 
 .M       ENDIF 
 SEC.1    SX6    X2 
          SA6    PARM+SEML        SAVE FWA OF MESSAGE LENGTH
  
*         FORMAT STANDARD *TAF* REQUEST CALLING SEQUENCE. 
  
          SB4    A6+B1       ADDRESS OF REST OF PARAMETER TABLE 
 SEC1     SA2    A2+B1       GET NEXT ITEM
          SX6    X2          STORE PARAMETER IN TABLE 
          GT     B4,B3,SEC3  IF PARAMETER LIST TOO LARGE
          SA6    B4 
          ZR     X2,SEC2     IF END OF PARAMETER LIST 
          SB4    B4+B1
          EQ     SEC1        PROCESS NEXT PARAMETER 
  
 SEC2     SA1    PARM        ADDRESS OF PARMAETER TABLE 
          SX1    RFSE        *SECURE* REQUEST 
          RJ     IRR         ISSUE RECOVERY REQUEST 
          EQ     SECUREX     RETURN 
  
 SEC3     SA1    SECURE      READ RETURN ADDRESS
          EQ     PAE         PROCESS ARGUMENT ERROR 
  
  
 SECA     BSS    1
 TINVOKE  SPACE  4,20 
**        TINVOKE - ASSIGN A NEW SYSTEM IDENTIFIER. 
* 
*         ENTRY  ENTER TINVOKE USING STATUS, NEW-SYS-ID[, OLD-SYS-ID].
* 
*                CALL TINVOKE(STATUS,NEW-SYS-ID[,OLD-SYS-ID]).
* 
*                (A1) = FWA OF PARAMETER LIST.
* 
*         EXIT   REQUEST IS PROCESSED.
*                (A0) = (A0) ON ENTRY.
* 
*         USES   X - 1. 
*         CALLS  IRR. 
  
  
 TINVOKE  SUBR               ENTRY/EXIT 
          SX1    RFTI        *TINVOKE* REQUEST
          RJ     IRR         ISSUE RECOVERY REQUEST 
          EQ     TINVOKEX    RETURN 
 PAE      SPACE  4,15 
**        PAE - PROCESS ARGUMENT ERROR. 
* 
*         ENTRY  (X1) = CALLING ADDRESS.
* 
*         EXIT   PROGRAM WILL ABORT.
* 
*         USES   A - 2, 6.
*                X - 1, 2, 6. 
* 
*         MACROS ARGERR.
  
  
 PAE      MX6    -30
          LX1    29-59
          SA2    X1-1        READ TRACE BACK WORD 
          BX6    -X6*X2 
          SA6    PAEA 
          ARGERR A6          EXIT TO EXECUTIVE
  
 PAEA     BSSZ   1
 IRR      SPACE  4,15 
**        IRR - ISSUE RECOVERY REQUEST. 
* 
*         ENTRY  (A1) = FWA OF REQUEST PARAMETER LIST.
*                (X1) = FUNCTION CODE.
* 
*         EXIT   (A1) = FWA OF RETURN PARAMETER LIST. 
* 
*         USES   X - 1, 6, 7. 
*                B - 1. 
* 
*         CALLS  SYS=.
  
  
 IRR      SUBR               ENTRY/EXIT 
          SB1    1
          SX6    3RREC       PREPARE RECOVERY REQUEST 
          SX7    A1          PARAMETER LIST ADDRESS 
          LX6    59-17
          BX6    X7+X6
          LX1    35-17       REQUEST CODE 
          BX6    X6+X1
          RJ     =XSYS=      ISSUE REQUEST
          EQ     IRRX        RETURN 
          END 
