*DECK SETLTC
USETEXT COMCBEG 
USETEXT COMRAPL 
USETEXT COMRSFC 
USETEXT COMRQUE 
PROC SETLTC((REQUEST),RETURNCODE);
# TITLE SETLTC - SET LONG TERM CONNECT. # 
  
      BEGIN  # SETLTC # 
  
# 
**    SETLTC - SET LONG TERM CONNECT. 
* 
*     THIS PROCEDURE WILL ATTEMPT TO SET EITHER THE LONG TERM CONNECT 
*     OR THE END OF JOB CONNECT.
* 
*     PROC SETLTC(REQUEST,RETURNCODE).
* 
*     PROC SETLTC(RETURNCODE).
* 
*     ENTRY  -   APL$HEADER IS BASED ARRAY CONTAINING APPLICATION TABLE 
*                NETON REQUEST HAS BEEN VALIDATED.
*                APL$JOBID CONTAINS JOB ID. 
*                REQUEST: 
*                  LTC$ -- SET LONG TERM CONNECT
*                  EOJC$ - SET END OF JOB CONNECT 
* 
*     EXIT   -   RETURNCODE - 0 - LONG TERM CONNECT SET.
*                           - 1 - UCP SWAPPED OUT.
*                           - 2 - SSF ERROR.
* 
*     PROCESS -  DEPENDING ON WHICH REQUEST CODE PRESENTED: 
*                  CODE IS LTC$:  
*                    IF END OF JOB CONNECT ALREADY SET
*                    THEN:  
*                      BUILD SFC REQUEST AS FOLLOWS:  
*                        SF.LIST
*                        SF.CLTC - CLEAR END OF JOB CONNECT 
*                        SF.SLTC - SET LONG TERM CONNECT
*                    ELSE:  
*                      BUILD SFC REQUEST AS FOLLOWS:  
*                        SF.SLTC - SET LONG TERM CONNECT
*                  CODE IS EOJC$: 
*                    BUILD SFC REQUEST AS FOLLOWS:  
*                      SF.LIST
*                      SF.CLTC - CLEAR LONG TERM CONNECT
*                      SF.SLTC - SET END OF JOB CONNECT 
*                ISSUE SSF CALL 
*                IF ONLY FIRST FUNCTION COMPLETED 
*                THEN:  
*                  RE-ISSUE SSF CALL
*                IF ANY SSF FUNCTION RECEIVED RETURN CODE OF UCP SWAPPED
*                THEN:  
*                  SET RETURN CODE TO 1.
*                ELSE:  
*                  IF SSF ERROR 
*                  THEN:  
*                    CALL SSF ERROR PROCESSOR.
*                    SET RETURN CODE TO 2.
*                  ELSE:  
*                    SET RETURN CODE TO 0.
*                RETURN 
* 
* 
# 
  
      ITEM REQUEST    I;             # REQUEST FUNCTION # 
      ITEM RETURNCODE I;             # SET LTC RETURN CODE #
  
# 
****  PROC SETLTC - XREF BEGIN. 
# 
  
      XREF
        BEGIN 
        PROC SSFERRP;                # SSF ERROR PROCESSOR #
        PROC SSFREQ;                 # MAKE SSF REQUEST # 
        END 
  
# 
****  PROC SETLTC - XREF LIST END 
# 
  
  
      SWITCH FUNCTION 
             LTC,                    # LABEL FOR LONG TERM CONNECT #
             EOJC,                   # LABEL FOR EOJ CONNECT #
             ;
  
CONTROL EJECT;
  
      SFC$WD1 = 0;
      SFC$WD2 = 0;
      SFC$WD3 = 0;
  
# 
*     USE SIMULATED CASE STATEMENT TO PROCESS REQUEST CODE. 
# 
  
      GOTO FUNCTION[REQUEST]; 
  
LTC:                                 # SET LONG TERM CONNECT #
  
      IF APL$EOJCON 
      THEN
        BEGIN  # MUST CLEAR EOJ CONNECT FIRST # 
        SFC$FC1 = SF$LIST;           # SF.LIST #
        SFC$FP1 = 2;                 # COUNT OF ENTRIES IN LIST # 
        SFC$SCPA1 = LOC(SFC$FC2); 
  
        SFC$FC2  = SF$CLTC;          # CLEAR EOJ CONNECT #
        SFC$FP2  = 1; 
  
        SFC$FC3  = SF$SLTC;          # SET LONG TERM CONNECT #
        END 
  
      ELSE
        BEGIN  # SET LONG TERM CONNECT ONLY # 
        SFC$FC1 = SF$SLTC;
        END 
  
      GOTO ENDCASE; 
  
EOJC:                                # SET END OF JOB CONNECT # 
      SFC$FC1  = SF$LIST;            # LIST FUNCTION #
      SFC$FP1 = 2;
      SFC$SCPA1 = LOC(SFC$FC2); 
  
      SFC$FC2  = SF$CLTC;            # CLEAR LONG TERM CONNECT FIRST #
  
      SFC$FC3  = SF$SLTC;            # SET END OF JOB CONNECT # 
      SFC$FP3  = 1; 
  
      GOTO ENDCASE; 
  
ENDCASE:  
  
# 
*     END OF SIMULATED CASE STATEMENT.
# 
  
      SFC$JOBID = APL$JOBID;
      SSFREQ; 
      SFC$FC1CB = FALSE;
  
      IF SFC$FC1 EQ SF$LIST 
        AND SFC$FP1 NE 0
        AND (SFC$RC1 EQ 0  OR  SFC$RC1 EQ SFRC$LERR)
      THEN
        BEGIN  # SECOND FUNCTION DID NOT COMPLETE # 
        SSFREQ; 
        SFC$FC1CB = FALSE;
        END 
  
      RETURNCODE = 0; 
  
      IF   SFC$RC1 EQ SFRC$SWAP 
        OR (SFC$RC2 EQ SFRC$SWAP
        OR SFC$RC3 EQ SFRC$SWAP) AND SFC$FC1 EQ SF$LIST 
      THEN
        BEGIN  # UCP SWAPPED OUT #
        RETURNCODE = 1; 
        END 
      ELSE
        BEGIN 
        IF SFC$RC1 NE 0 
        THEN
          BEGIN  # SSF ERROR ENCOUNTERED #
          SSFERRP(QU$UCPA); 
          RETURNCODE = 2; 
          END 
        END 
  
      RETURN; 
      END  # SETLTC # 
  
      TERM
