*DECK ASSIGN
USETEXT COMCBEG 
USETEXT COMRAPL 
USETEXT COMRNET 
USETEXT COMRQUE 
USETEXT COMRRTN 
USETEXT COMRMEM 
PROC ASSIGN;
# TITLE ASSIGN - ASSIGN REMOTE CONNECTION REQUEST TO APPLICATION. # 
  
      BEGIN  # ASSIGN # 
  
# 
**    ASSIGN - ASSIGN REMOTE CONNECTION REQUEST TO APPLICATION. 
* 
*     PROCESSES ALL ENTRIES ON THE AWAIT ASSIGNMENT QUEUE BY ASSIGNING
*     THE REMOTE CONNECTION REQUEST TO AN APPLICATION.
* 
*     PROC ASSIGN.
* 
*     ENTRY   -  THE AWAIT ASSIGNMENT QUEUE HAS AN ENTRY ON IT. 
* 
*     EXIT    -  ALL REMOTE CONNECTIONS AWAITING ASSIGNMENT HAVE BEEN 
*                  PROCESSED. 
* 
*     PROCESS -  FOR EACH ENTRY ON THE AWAIT ASSIGNMENT QUEUE:  
*                  DEQUEUE ENTRY
*                  RE-VALIDATE PATH TO REQUESTING HOST
*                  IF PATH IS NOT VALID 
*                    OR IDLE DOWN IN PROGRESS 
*                  THEN:  
*                    BREAK THE CONNECTION 
*                    FREE THE CONNECT REQUEST QUEUE ENTRY.
*                  ELSE:  
*                    CHECK FOR APPLICATION TO ACCEPT REQUEST
*                    IF NONE FOUND
*                    THEN:  
*                      BREAK THE CONNECTION.
*                      FREE THE CONNECT REQUEST QUEUE ENTRY.
*                    ELSE:  
*                      SET UP ACN WITH PATHID, NAD ORDINAL,ETC. 
*                      IF REQUEST ASSIGNED TO ACTIVE APPLICATION
*                      THEN:  
*                        IF APPLICATION NETTED ON 
*                        THEN:  
*                          SEND CON/REQ/R TO APPLICATION. 
*                        ELSE:  
*                          PUT REQUEST ON DELAY QUEUE 
*                          CON/REQ/R WILL BE SENT WHEN APPL NETS ON.. 
*                      ELSE:  
*                        PUT REQUEST ON DELAY QUEUE 
*                        AUTOMATICALLY START REQUESTED SERVER.
*                RETURN.
* 
* 
***   PROC ASSIGN - XREF LIST BEGIN.
# 
  
      XREF
        BEGIN 
        PROC CONREQR; 
        PROC DEQUEUE; 
        PROC FINDACN; 
        PROC FLUSH; 
        PROC FREE;
        PROC PATHVAL; 
        PROC QUEUE; 
        PROC STRTJOB; 
        END 
  
# 
****  PROC ASSIGN - XREF LIST END.
# 
  
  
      ITEM ACNRETURN  I;             # RETURNCODE FROM FINDACN #
      ITEM PATHRETURN I;             # RETURNCODE FOR PATHVAL # 
      ITEM PATHID     I;             # PATH ID -TEMP CELL # 
  
CONTROL EJECT;
  
      ASLONGAS WAITASIGNQ NE 0
      DO
        BEGIN  # ASSIGN CONNECT REQUEST TO APPLICATION #
        DEQUEUE(LOC(WAITASIGNQ)); 
        PATHID = QU$CONPTID;
        PATHVAL(PATHRETURN);
  
        IF PATHRETURN NE CONR$OK
          OR IDLEDWN
        THEN
          BEGIN  # PATH NO LONGER VALID # 
          FREE; 
          FLUSH(PATHID);
          END 
  
        ELSE
          BEGIN  # PATH STILL VALID # 
          FINDACN(ACNRETURN); 
  
          IF ACNRETURN EQ 0 
          THEN
            BEGIN  # ACN NO LONGER AVAILABLE #
            FREE; 
            FLUSH(PATHID);
            END 
  
          ELSE
            BEGIN  # ACN STILL AVAILABLE #
            CON$FLAGS = 0;
            CON$PATHID= PATHID; 
            CON$PATHAD = P<PTH$ENTRY>;
            CON$NADORD = PTH$NADORD;
            CON$ALN    = 0; 
            CON$ACT    = 0; 
            CON$LIDORD = 0; 
            CON$ACTWD  = 0; 
            CON$DELAYQ = 0; 
            NAD$CCOUNT = NAD$CCOUNT + 1;
            RMT$CCOUNT = RMT$CCOUNT + 1;
            ACTIVECONS = ACTIVECONS + 1;
  
            IF  ACNRETURN EQ 1
            THEN
              BEGIN  # APPL IS ACTIVE # 
  
              IF NOT APL$START
              THEN
                BEGIN  # ACTIVE AND NETTED ON # 
                CONREQR;
                END 
  
              ELSE
                BEGIN  # ACTIVE BUT NOT YET NETTED ON # 
                QUEUE(LOC(CON$DELAYQ)); 
                END 
  
              END 
  
            ELSE
              BEGIN  # SERVER MUST BE STARTED # 
              QUEUE(LOC(CON$DELAYQ)); 
              STRTJOB;
              END 
  
            END  # ACN STILL AVAILABLE #
  
          END  # PATH STILL VALID # 
  
        END  # ASSIGN CONNECT REQUEST TO APPLICATION #
  
      RETURN; 
      END  # ASSIGN # 
  
      TERM
