RTASK 
          IDENT  RTASK
          SST    BEGN,CMBL
          LCC    OVERLAY(RTASK,0,0) 
          ENTRY  RTASK
          SYSCOM B1 
 RTASK    TITLE  RTASK - RECOVER TERMINAL TASK. 
*COMMENT  RTASK - RECOVER TERMINAL TASK.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 RTASK    SPACE  4,10 
***       RTASK - RECOVER TERMINAL TASK.
* 
*         E. D. REDIG.       80/05/07.
 RTASK    SPACE  4,40 
***       THE TASK *RTASK* IS A CONTROL DATA SYSTEMS SUPPLIED 
*         RECOVERY TASK THAT SHOULD HANDLE MOST TRANSACTION 
*         APPLICATION NEEDS.  HOWEVER, SOME CUSTOMERS MAY WISH
*         TO MODIFY *RTASK* TO MEET THEIR SPECIAL REQUIREMENTS. 
* 
*         TERMINAL DISCONNECTS, *NAM* ABORTS, *TAF* ABORTS, AND 
*         SYSTEM CRASHES WILL MEAN THAT THE TERMINAL MUST GO
*         THROUGH THE LOGIN PROCEDURES WITH *TAF*.  UPON TERMINAL 
*         LOGIN *RTASK* WOULD BE CALLED.  *RTASK* THEN DOES THE 
*         FOLLOWING.
* 
*         1.  IF A RECOVERABLE TRANSACTION IS NO LONGER RERUNNABLE, 
*             *RTASK* TELLS THE TERMINAL OPERATOR THAT RECOVERY HAS 
*             OCCURRED, THAT THE RECOVERABLE TRANSACTION WILL NOT 
*             BE RERUN AUTOMATICALLY, TO ENTER THE NEXT INPUT, AND
*             CEASES.  THIS SITUATION OCCURS WHEN AN INPUT/OUTPUT 
*             ERROR OCCURRED ON THE *TAF* RECOVERY FILE.
* 
*         2.  IF THE TRANSACTION UNIT IS NOT RECOVERABLE, *RTASK* 
*             SENDS *READY* TO INDICATE THE TERMINAL OPERATOR 
*             SHOULD ENTER THE NEXT COMMAND, AND CEASES.
* 
*         3.  IF THE TRANSACTION COMMIT UNIT IS SECURE AND THE DATA 
*             BASE COMMIT UNIT IS COMMITTED, *RTASK* SENDS THE TERM-
*             INAL CONFIRMATION MESSAGE, AND CEASES.  THE TERMINAL
*             CONFIRMATION MESSAGE IS STORED ON THE *TAF* RECOVERY
*             FILE AS A RESULT OF THE SECURE REQUEST. 
* 
*         4.  *RTASK* CALLS *CTASK*.  *CTASK* REQUESTS A NEW TRANS- 
*             ACTION SEQUENCE NUMBER AND RETURNS THE BEGIN-COMMIT 
*             HISTORY TO *TAF CRM*.  *CTASK* THEN MAKES A RERUN 
*             REQUEST.  THE RERUN REQUEST TURNS OFF THE RECOVERY
*             STATUS AND RETRIEVES TERMINAL INPUT FROM THE *TAF*
*             RECOVERY FILE.  THE TRANSACTION WILL BE RUN USING THE 
*             NEW SEQUENCE NUMBER.  *ITASK* WILL LATER PROCESS THE
*             INPUT AS IF THE INPUT HAD COME FROM THE TERMINAL. 
  
  
***       COMMON DECKS. 
  
  
*CALL     COMCMAC 
*CALL     COMKTAF 
*CALL     COMKFLD 
*CALL     COMKIPR 
*CALL     COMKMAC 
 BEGN     BSS    0           SAVE ORIGIN COUNTER
*CALL     COMKCBD 
          LIST   X
*CALL     COMKTRF 
          LIST   -X 
*CALL     COMKTSC 
          ORG    BEGN        RESTORE ORIGIN COUNTER 
 RTASK    SPACE  4,15 
***       COMMUNICATION BLOCK HEADER WORDS AND MESSAGES.
* 
*T  TMSW    60/    CASE 
*T, TMSW+1  60/    RECOVERY FLAG (RF) 
*T, TMSW+2  60/    OLDID
*T, TMSW+3  60/    NEWID
*T, TMSW+5  60/    *RERUN* STATUS (RS)
* 
*           CASE   = 1, RECOVER INTERACTIVE USER. 
*           RF     BIT 59 = 1, IF *CRM* AUTOMATIC RECOVERY USED.
*                  BIT 0 = 1, IF *TAF* AUTOMATIC RECOVERY USED. 
*           OLDID  =  PREVIOUS *CRM* IDENTIFIER.
*           NEWID  =  CURRENT *CRM* IDENTIFIER. 
*           RS     = 0, IF *SRERUN* SUCCESSFUL. 
*                  = 1, IF *SRERUN* NOT SUCCESSFUL. 
*                  = -1, IF DATA BASE FILE DOWN.
  
  
          BSS    CMBL        RESERVE SPACE FOR COMMUNICATION BLOCK
 RTASK    SPACE  4,20 
**        RTASK - RECOVER TERMINAL TASK.
* 
*         ENTRY  (TMSW+1) = RECOVERY FLAG.
* 
*         EXIT   TERMINAL RECOVERY MESSAGE. 
*                (TMSW) = RECOVER INTERACTIVE USER CASE.
*                (TMSW+1) = RECOVERY FLAG.
*                (TMSW+2) = OLDID.
*                (TMSW+3) = NEWID.
* 
*         ERROR  TO *RTA3* IF ERROR AND NORMAL CEASE. 
*                TO *RTA5* IF ERROR AND ABNORMAL CEASE. 
* 
*         USES   X - 1, 2, 3, 4, 5, 6, 7. 
*                A - 1, 2, 3, 5, 6, 7.
*                B - 1. 
* 
*         MACROS BLDABH, CALLTRN, CEASE, FMSG, MOVE, SCALL, WAIT, 
*                WAITINP. 
  
  
 RTASK    SB1    1
  
*         ISSUE *TSTAT* REQUEST TO OBTAIN STATUS OF TRANSACTION.
  
          SCALL  TSTAT,(RTAA,RTAB,RTAC,RTAD,RTAE,RTAF,RTAG,RTAH,RTAI,RTA
,J,RTAK,RTAL,RTAM)           ISSUE *TSTAT* REQUEST
          SA2    RTAA        GET STATUS OF REQUEST
          SX5    RTAAC
          SX4    X2-TSRU     RECOVERY UNAVAILABLE 
          ZR     X4,RTA2     IF RECOVERY UNAVAILABLE
          SX5    RTAAA
          SX4    X2-TSNE     NO ERRORS STATUS 
          NZ     X4,RTA5     IF ERRORS IN *TSTAT* 
          SA2    RTAC        GET TRANSACTION STEP 
          SX5    RTAAC
          SA3    RTAE        GET TRANSACTION TYPE 
          SX4    X3-TYIT     TERMINAL USER TYPE 
          NZ     X4,RTA14    IF NOT TERMINAL USER 
          ZR     X2,RTA2     IF TERMINAL TRANSACTION NON-RECOVERABLE
          SX4    X2-CSTA
          ZR     X4,RTA2     IF TRANSACTION ABORT STEP
          SX5    RTAAB
          SX4    X2-CSTN     NO LONGER RERUNNABLE STEP
          ZR     X4,RTA2     IF STEP NO LONGER RERUNNABLE 
  
*         TRANSACTION WILL BE RERUN OR PUSHED THROUGH TO
*         COMPLETION BY SENDING THE *SECURE* MESSAGE. 
  
          SX6    TYIT        SET RECOVER INTERACTIVE USER CASE
          SA2    RTAK        GET *OLDID*
          SA3    RTAM        GET *NEWID*
          SA6    TMSW        STORE CASE IN COMMUNICATION BLOCK
          BX6    X2 
          BX7    X3 
          SA6    TMSW+2      STORE *OLDID* IN COMMUNICATION BLOCK 
          SA7    TMSW+3      STORE *NEWID* IN COMMUNICATION BLOCK 
          SX7    MAXWS*10    MAXIMUM MESSAGE LENGTH 
          SX6    4           SET MESSAGE UNITS TO DISPLAY 
          SA7    RTAP        STORE MAXIMUM MESSAGE LENGTH 
          SA6    RTAQ        STORE MESSAGE UNITS
  
*         ISSUE *RSECURE* REQUEST TO OBTAIN *SECURE* MESSAGE. 
*         IF NO *SECURE* MESSAGE, RERUN TRANSACTION.
  
          SCALL  RSECURE,(RTAN,RTAO,RTAP,RTAQ,RTAR,RTAS)
          SA2    RTAO        GET STATUS OF REQUEST
          SX4    X2-TSNM     NO MESSAGE STATUS
          ZR     X4,RTA4     IF NO MESSAGE FROM *RSECURE* 
          SX4    X2-TSNE     NO ERRORS STATUS 
          SX5    RTAAA
          NZ     X4,RTA5     IF ERRORS IN *RSECURE* 
          SA2    RTAI 
          NZ     X2,RTA4     IF *CDCS* USED 
          SA2    RTAG 
          ZR     X2,RTA1     IF *CRM* NOT USED
  
*         IF *CRM* CURRENT BEGIN-COMMIT ID IS SUCCESSFUL, *SEND*
*         *SECURE* MESSAGE ELSE CALL *CTASK* TO RERUN THE TRANSACTION.
  
          SA2    RTAM 
          NZ     X2,RTA4     IF *NEWID* NOT ZERO
  
*         ISSUE *BLDABH* REQUEST TO BUILD APPLICATION BLOCK HEADER. 
  
 RTA1     SCALL  BLDABH,(RTAT,RTAQ,RTAU,RTAR,RTAV,RTAS) 
  
*         ISSUE *SEND* REQUEST TO SEND THE SECURE MESSAGE AND CEASE.
  
          SCALL  SEND,(RTAN,RTAP,RTAW,RTAX) 
  
 RTA2     RJ     SND         SEND MESSAGE 
 RTA3     CEASE              EXIT TASK WITH CEASE 
  
 RTA3.1   CEASE  -1          CEASE BUT TERMINAL WILL REMAIN LOCKED
  
*         CALL *CTASK* TO RERUN THE TRANSACTION.
  
 RTA4     SX5    RTAAE
          RJ     SND         SEND MESSAGE 
          CALLRTN  RTAZ      CALL *CTASK* 
          SA2    TMSW+5      GET *RERUN* STATUS 
          ZR     X2,RTA3.1   IF TRANSACTION WAS RERUNNABLE
          NG     X2,RTA6     IF DATA BASE FILE DOWN 
          SX5    RTAAF
 RTA5     RJ     SND         SEND MESSAGE 
          CEASE  2           ABNORMAL CEASE WITH DUMP 
  
*         RECOVERY NOT POSSIBLE NOW BECAUSE DATA BASE FILE IS 
*         DOWN.  SEND MENU OF OPTIONS TO TAKE.
  
 RTA6     SX6    B0+         MESSAGE COUNT
          SA6    RTSA 
 RTA7     SA2    RTSA        GET MESSAGE COUNT
          SA5    TRTA+X2     GET MESSAGE ADDRESS
          SX6    X2-TRTAL 
          PL     X6,RTA8     IF END OF TABLE
          SX6    X2+B1       INCREMENT MESSAGE COUNT
          SA6    A2 
          RJ     SND         SEND MESSAGE 
          EQ     RTA7        GET NEXT MESSAGE 
  
*         SAVE C.B. MESSAGE AREA AND THEN REQUEST OPTION. 
  
 RTA8     MOVE   4,TMSW,RTSC SAVE C.B. MESSAGE AREA 
 RTA9     SX6    300
          SA6    RTSG 
          WAITINP  RTSG 
          SA1    TMSW 
          SX3    X1-1 
          ZR     X3,RTA11    IF TERMINAL TIMEOUT
          RJ     SFN         SPACE FILL NAME
          SA2    RTSD 
          BX3    X2-X6
          ZR     X3,RTA10    IF WAIT AND TRY AGAIN
          SA2    RTSE 
          BX3    X2-X6
          ZR     X3,RTA12    IF LOG OFF 
          SA2    A2+B1
          BX3    X2-X6
          ZR     X3,RTA13    IF ENTER NEXT TRANSACTION
          SX5    RTAAT
          RJ     SND         SEND MESSAGE 
          EQ     RTA9        REQUEST OPTION 
  
*         TAF WILL WAIT 5 MINUTES BEFORE ATTEMPTING RERUN 
*         OF TRANSACTION. 
  
 RTA10    SX5    RTAAU
          RJ     SND         SEND MESSAGE 
          WAIT   RTSB        WAIT FOR 5 MINUTES 
          MOVE   4,RTSC,TMSW RESTORE C.B. MESSAGE AREA
          EQ     RTA4        RERUN TRANSACTION
  
*         TERMINAL TIMEOUT, OPTION B ASSUMED. 
  
 RTA11    SX5    RTAAS
          RJ     SND         SEND MESSAGE 
  
*         LOG OFF WITH THE PREVIOUS RECOVERABLE INFORMATION 
*         REMAINING INTACT. 
  
 RTA12    SX5    RTAAV
          RJ     SND         SEND MESSAGE 
          LOGT   B1          LOG TERMINAL OUT 
          EQ     RTA3        CEASE
  
*         ALLOW ENTRY OF NEXT TRANSACTION.  THE PREVIOUS
*         RECOVERABLE INFORMATION WILL BE LOST. 
  
 RTA13    SX5    RTAAW
          RJ     SND         SEND MESSAGE 
          EQ     RTA3        CEASE
  
*         LOG INTERACTIVE TERMINAL USER OFF WITH THE PREVIOUS 
*         RECOVERABLE INFORMATION REMAINING INTACT. 
  
 RTA14    SX4    X2-CSNR
          ZR     X4,RTA3     IF NON-RECOVERABLE TRANSACTION 
          SX4    X2-CSCE
          ZR     X4,RTA3     IF CEASE/JOB END 
          SX5    RTAAX
          RJ     SND         SEND MESSAGE 
          LOGT   B1          LOG TERMINAL OUT 
          EQ     RTA3        CEASE
  
*         *TSTAT* REQUEST PARAMETERS. 
  
 RTAA     CON    0           STATUS OF *TSTAT* REQUEST
 RTAB     DATA   4HSTEP      KEYWORD *STEP* 
 RTAC     CON    0           TRANSACTION STEP 
 RTAD     DATA   4HTRAN      KEYWORD *TRAN* 
 RTAE     CON    0           TRANSACTION TYPE 
 RTAF     DATA   3HCRM       KEYWORD *CRM*
 RTAG     CON    0           *CRM* TRANSACTION USAGE
 RTAH     DATA   4HCDCS      KEYWORD *CDCS* 
 RTAI     CON    0           *CDCS* TRANSACTION USAGE 
 RTAJ     DATA   5HOLDID     KEYWORD *OLDID*
 RTAK     CON    0           PREVIOUS *CRM* IDENTIFIER
 RTAL     DATA   5HNEWID     KEYWORD *NEWID*
 RTAM     CON    0           CURRENT *CRM* IDENTIFIER 
  
*         *RSECURE* REQUEST PARAMETERS. 
  
 RTAN     BSS    MAXWS       MESSAGE BUFFER 
 RTAO     CON    0           STATUS OF *RSECURE* REQUEST
 RTAP     CON    0           MESSAGE LENGTH 
 RTAQ     CON    0           MESSAGE UNITS
 RTAR     CON    0           FORMAT EFFECTOR
 RTAS     CON    0           TRANSPARENT MODE 
  
*         *BLDABH* REQUEST PARAMETERS.
  
 RTAT     DATA   3LACT       APPLICATION CHARACTER TYPE 
 RTAU     DATA   3LNFE       FORMAT EFFECTORS 
 RTAV     DATA   3LXPT       TRANSPARENT MODE 
  
*         *SEND* REQUEST PARAMETERS.
  
 RTAW     CON    0           SEND TO ORIGINATING TERMINAL 
 RTAX     CON    1           CEASE FLAG 
  
 RTAZ     DATA   5LCTASK     CALL TO *CTASK*
          CON    0
 RTSA     CON    0           MESSAGE COUNT
 RTSB     CON    300         *WAIT* TIME IN SECONDS 
 RTSC     BSSZ   4           C.B. STORAGE BUFFER
 RTSD     CON    1HA
 RTSE     CON    1HB
 RTSF     CON    1HC
 RTSG     CON    0           *WAITINP* TIME IN SECONDS
  
*         SEND MESSAGES.
  
 RTAAA    FMSG   (TASK LOGICAL ERROR.)
 RTAAB    FMSG   (RECOVERY, TRANSACTION NOT RERUNNABLE, ENTER NEXT TRANS
,ACTION.) 
 RTAAC    FMSG   (READY.) 
 RTAAE    FMSG   (RECOVERY, RERUNNING TRANSACTION.) 
 RTAAF    FMSG   (TAF TRANSACTION NOT RERUNNABLE.)
 RTAAG    FMSG   (RECOVERY NOT POSSIBLE NOW BECAUSE DATA BASE FILE IS DO
,WN.) 
 RTAAH    FMSG   (SELECT DESIRED OPTION FROM FOLLOWING LIST BY ENTERING 
,LETTER.) 
 RTAAI    FMSG   ( )
 RTAAJ    FMSG   (A = WAIT 5 MINUTES AND TRY AGAIN.  TAF WILL WAIT 5 MIN
,UTES)
 RTAAK    FMSG   (    BEFORE ATTEMPTING RERUN OF TRANSACTION.)
 RTAAL    FMSG   ( )
 RTAAM    FMSG   (B = LOG OFF.  THE PREVIOUS RECOVERABLE INFORMATION WIL
,L) 
 RTAAN    FMSG   (    REMAIN INTACT, LOG IN AT A LATER TIME TO ATTEMPT R
,ERUN.) 
 RTAAO    FMSG   ( )
 RTAAP    FMSG   (C = ALLOW ENTRY OF NEXT TRANSACTION.  THE PREVIOUS REC
,OVERABLE)
 RTAAQ    FMSG   (    INFORMATION WILL BE LOST.)
 RTAAR    FMSG   (?)
 RTAAS    FMSG   (TERMINAL TIMEOUT, OPTION B ASSUMED.)
 RTAAT    FMSG   (VALID OPTIONS ARE A, B OR C.) 
 RTAAU    FMSG   (WAITING.) 
 RTAAV    FMSG   (TRANSACTION SESSION ENDED.) 
 RTAAW    FMSG   (ENTER NEXT TRANSACTION.)
 RTAAX    FMSG   (TERMINAL NOT AVAILABLE.)
  
 TRTA     CON    RTAAG
          CON    RTAAH
          CON    RTAAI
          CON    RTAAJ
          CON    RTAAK
          CON    RTAAL
          CON    RTAAM
          CON    RTAAN
          CON    RTAAO
          CON    RTAAP
          CON    RTAAQ
          CON    RTAAR
 TRTAL    EQU    *-TRTA      LENGTH OF MESSAGE TABLE
 SND      SPACE  4,10 
**        SND - SEND MESSAGE. 
* 
*         ENTRY  (X5) = ADDRESS OF MESSAGE. 
* 
*         MACROS SEND.
  
  
 SND      SUBR               ENTRY/EXIT 
          SEND   X5          SEND MESSAGE 
          EQ     SNDX        RETURN 
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMCMVE 
*CALL     COMCSFN 
  
  
          END    RTASK
