*DECK BRAKACN 
USETEXT COMCBEG 
USETEXT COMRAPL 
USETEXT COMREVN 
USETEXT COMRQUE 
USETEXT COMRRTN 
PROC BRAKACN; 
# TITLE BRAKACN - PROCESS CONNECTION BREAK FOR THIS ACN. #
  
      BEGIN  # BRAKACN #
  
# 
**    BRAKACN - PROCESS CONNECTION BREAK FOR THIS ACN.
* 
*     PROCESSES CONNECTION BREAK. THIS OCCURS FOR INSTANCE WHEN A 
*     DISCONNECT STATUS IS RECEIVED FOR A GIVEN NAD PATH OR WHEN THE
*     NAD IS NO LONGER RESPONDING.
* 
*     PROC BRAKACN. 
* 
*     ENTRY   -  APL$HEADER IS BASED ARRAY FOR APPLICATION. 
*                CONNECTION IS BASED ARRAY FOR ACN THAT IS BROKEN.
* 
*     EXIT    -  EITHER:  
* 
*                CONNECTION BROKEN PROCESSED. 
*                OR- IF IT CAN NOT BE PROCESSED:  
*                CONNECTION BROKEN STATUS EVENT QUED. 
* 
*     PROCESS -  IF ACN ASSIGNED
*                THEN:  
*                  IF CONNECTION ESTABLISHED WITH APPLICATION 
*                  THEN:  
*                    ISSUE CON/CB/R.
*                    IF FTFS AND EOJ CONNECT SET
*                    THEN 
*                      ABORT JOB. 
*                  ELSE:  
*                    IF APPLICATION HAS NOT RECEIVED CON/REQ/R YET
*                    THEN:  
*                      IF INITIATOR OF CON/ACRQ/R REQUEST 
*                      THEN:  
*                      SEND CON/ACRQ/A RESPONSE.
* 
* 
****  PROC BRAKACN - XREF LIST BEGIN. 
# 
  
      XREF
        BEGIN 
        PROC ACRQA;                  # INITIATE CON/ACRQ/A SUPR REPLY # 
        PROC CALLSYS;                # MAKE RA + 1 REQUEST #
        PROC CONCBR;                 # INITIATE CON/CB/R SUPR REPLY # 
        PROC DEQUEUE;                # REMOVE ENTRY FROM QUEUE #
        PROC FREE;                   # RELEASE QUEUE ENTRY #
        PROC FREEACN;                # MAKE ACN AVAILABLE AGAIN # 
        PROC GETFREE;                # GET FREE QUEUE ENTRY # 
        PROC QUEUE;                  # ADD ENTRY TO QUEUE # 
        END 
  
# 
****  PROC BRAKACN - XREF LIST END. 
# 
  
  
    CONTROL IFEQ OS$NOSBE;
      ARRAY QAFCALL [0:0] S(1); 
        BEGIN 
        ITEM QC$WD1     I(00,00,60) = [0];
        ITEM QC$NAME    C(00,00,03) = ["QAF"];
        ITEM QC$RCL     B(00,19,01) = [TRUE]; 
        ITEM QC$CALLBLK I(00,42,18); # QAF CALL BLOCK # 
        END 
  
      ARRAY QAFCALLBLK [0:0] S(6);
        BEGIN 
        ITEM QCB$WD1    I(00,00,60) = [0];
        ITEM QCB$JNAME  C(00,00,07); # JOB NAME # 
        ITEM QCB$ERRCOD U(00,42,06); # QAF ERROR CODE # 
        ITEM QCB$QTYPE  U(00,48,08) = [O"20"];
        ITEM QCB$FUNCOD U(00,56,03) = [0];
        ITEM QCB$COMBIT B(00,59,01); # COMPLETE BIT # 
        ITEM QCB$WD2    I(01,00,60) = [0];
        ITEM QCB$ABORT  B(01,06,01) = [TRUE]; 
        ITEM QCB$WD3    I(02,00,60) = [0];
        ITEM QCB$JDT    U(02,36,12); # JDT ORDINAL #
        ITEM QCB$WD4    I(03,00,60) = [0];
        ITEM QCB$WD5    I(04,00,60) = [0];
        ITEM QCB$WD6    I(05,00,60) = [0];
        END 
    CONTROL ENDIF;
  
CONTROL EJECT;
  
      IF CON$PATHID NE 0
      THEN
        BEGIN  # ACN ASSIGNED # 
        CON$BROKEN = TRUE;           # SET CONNECTION BROKEN BIT #
  
        IF CON$REQ$N
        THEN
          BEGIN  # CONNECTION ESTABLISHED WITH APPLICATION #
          CONCBR;                    # SEND CON/CB/R #
  
        CONTROL IFEQ OS$NOSBE;
          IF APL$NAME EQ "FTFS" 
            AND APL$EOJCON
          THEN
            BEGIN 
            QCB$JNAME = APL$JOBNAM; 
            QCB$JDT = APL$JOBORD; 
            QCB$COMBIT = FALSE; 
            QC$CALLBLK = LOC(QAFCALLBLK); 
            CALLSYS(QAFCALL); 
            END 
        CONTROL ENDIF;
  
          END 
  
        ELSE
          BEGIN  # CONNECTION NOT YET ESTABLISHED WITH APPLICATION #
  
          IF NOT CON$REQ$R
          THEN
            BEGIN  # CON/REQ/R NOT YET SENT # 
            DEQUEUE(LOC(CON$DELAYQ)); 
            IF QU$TYPE EQ QT$UCPMSGI
            THEN
              BEGIN 
              ACRQA(ACRQ$NORES);
              END 
            ELSE
              BEGIN 
              FREE; 
              END 
  
            FREEACN(QT$FLUSH);
            END 
  
          END 
  
        END 
  
      RETURN; 
      END  # BRAKACN #
  
      TERM
