*DECK REMCONR 
USETEXT COMCBEG 
USETEXT COMRNDR 
USETEXT COMRQUE 
USETEXT COMRRTN 
USETEXT COMRSTA 
PROC REMCONR; 
# TITLE REMCONR - PROCESS REMOTE CONNECTION REQUEST. #
  
      BEGIN  # REMCONR #
  
# 
**    REMCONR - PROCESS REMOTE CONNECTION REQUEST.
* 
*     OBTAIN AND RESPOND TO REMOTE CONNECTION REQUESTS. 
* 
*     PROC REMCONR. 
* 
*     ENTRY   -  CONNECT REQUEST AVAILABLE QUEUE HAS AN ENTRY ON IT.
* 
*     EXIT    -  A RESPONSE HAS BEEN GIVEN TO THE REMOTE CONNECTION 
*                REQUEST.  IF THE REQUEST WAS VALID, IT WAS PLACED ON 
*                THE AWAIT ASSIGNMENT QUEUE.
* 
*     PROCESS -  FOR EACH ENTRY ON THE CONNECT REQUEST AVAILABLE QUEUE: 
*                  SAVE THE APPLICABLE NAD ORDINAL
*                  GET A FREE QUEUE ENTRY FOR CONNECT REQUEST MESSAGE 
*                  GET A FREE QUEUE ENTRY FOR THE OBTAIN CONNECT REQUEST
*                    NDR FUNCTION 
*                  SET UP OBTAIN CONNECT QUEUE ENTRY
*                  SET UP COMPLETION STATUS WORD
*                  MAKE NAD REQUEST 
*                  WAIT FOR COMPLETION
*                  DEPENDING ON NDR REPLY CODE: 
*                    CONNECT MESSAGE RETURNED:  
*                      VALIDATE CONNECT REQUEST 
*                      GIVE CONNECT REQUEST REPLY TO NDR
*                      IF CONNECTION IS BEING ACCEPTED
*                      THEN:  
*                        PUT CONNECT REQUEST MESSAGE ON AWAIT ASSIGNMENT
*                          QUEUE. 
*                      ELSE:  
*                        FREE QUEUE ENTRY WITH CONNECT REQUEST MESSAGE. 
*                    NADOFF:  
*                      FREE CONNECT REQUEST MESSAGE QUEUE ENTRY 
*                      INITIATE QUEUING OF A NAD OFF REQUEST. 
*                    NO MESSAGE:   "NAD ERROR"
*                      FREE CONNECT MESSAGE QUEUE ENTRY.
*                    INVALID LID: 
*                      GIVE CONNECT REQUEST REPLY TO NDR. 
*                      FREE CONNECT REQUEST QUEUE ENTRY.
*                RETURN.
* 
* 
****  PROC REMCONR - XREF LIST BEGIN. 
# 
  
      XREF
        BEGIN 
        PROC CONVAL;                 # CONNECT REQUEST VALIDATION # 
        PROC DEQUEUE;                # REMOVE ENTRY FROM QUEUE #
        PROC FREE;                   # RELEASE QUEUE ENTRY #
        PROC GETFREE;                # OBTAIN FREE QUEUE ENTRY #
        PROC NADREQ;                 # MAKE NAD REQUEST # 
        PROC NDRRSTR;                # NDR RESTART #
        PROC QUEUE;                  # ADD ENTRY TO QUEUE # 
        PROC REMDAYF;                # ISSUE REMOTE CONNECT DAYFILE MSG#
        PROC TRANSQ;                 # TRANSLATE REMOTE CONNECT Q ENTRY#
        PROC WAIT;                   # WAIT FOR COMPLETION #
        END 
  
# 
****  PROC REMCONR - XREF LIST END. 
# 
  
  
      ITEM CONREPLY I;               # CONNECT VALIDATION REPLY CODE #
      ITEM CONQUENTRY I;             # CONNECT MSG QUEUE ENTRY TEMP ADR#
      ITEM COMPSTAT  I;              # COMPLETION STATUS WORD # 
      ITEM NADORD    I;              # NAD ORDINAL #
  
      SWITCH NDRRTN 
             CONRETURND,             # LABEL FOR CONNECTION REQ RETURND#
             NADOFF,                 # LABEL FOR NAD OFF #
             ESTUNUSABL,             # EST DOES NOT ALLOW OPERATION # 
             NOMSG,                  # LABEL FOR NO CONNECT MSG FOUND # 
             NOMATCH,                # LABEL FOR NO LID MATCH # 
             ;
  
CONTROL EJECT;
  
      IF CONAVAILQ NE 0 
      THEN
        BEGIN  # PROCESS CONNECTION REQUEST AVAILABLE QUEUE # 
        DEQUEUE(LOC(CONAVAILQ));
        NADORD = QU$NADORD; 
        FREE; 
        GETFREE;
        QU$TYPE = QT$REMCONR; 
        CONQUENTRY = P<QU$ADDRESS>; 
        GETFREE;
        QU$TYPE = QT$OBTCONR;        # OBTAIN CONNECT REQUEST QUE TYPE# 
        COMPSTAT = 0; 
        QU$CMPST    = LOC(COMPSTAT);
        QU$MSGADR   = CONQUENTRY + 1; 
        NADREQ(NADORD);              # MAKE REQUEST TO OBTAIN CONNECT # 
        WAIT(LOC(COMPSTAT));
        P<CST$ADDR> = LOC(COMPSTAT);
        P<QU$ADDRESS> = CONQUENTRY; 
  
# 
*     PROCESS NDR RETURN CODE THRU SIMULATED CASE STMT. 
# 
  
        GOTO NDRRTN[CST$RTNCOD];
  
CONRETURND: 
        TRANSQ;                      # TRANSLATE REMOTE CONNECT REQUEST#
        QU$LOCNAD = NADORD;                 # SAVE LOCAL NAD ORD #
        CONVAL(CONREPLY);            # VALIDATE CONNECTION REQUEST #
        P<NDR$COMMUN> = CST$NDRCOM; 
        NDR$PATHID = QU$CONPTID;
        NDR$REPLY  = CONREPLY;
        NDR$FUNC   = NF$CONRRPY;
        NDRRSTR;
        REMDAYF(CONREPLY,NADORD);    # ISSUE ACCEPT/REJECT DAYFILE MSG #
  
        IF CONREPLY EQ CONR$OK
        THEN
          BEGIN  # CONNECT REQUEST ACCEPTED # 
          QU$TYPE  =  QT$CONWAIT; 
          QUEUE(LOC(WAITASIGNQ)); 
          END 
  
        ELSE
          BEGIN  # CONNECT REQUEST NOT ACCEPTED # 
          FREE; 
          END 
  
        GOTO ENDCASE; 
  
NADOFF: FREE; 
        GOTO ENDCASE; 
  
ESTUNUSABL:                          # EST DOES NOT ALLOW OPERATION # 
        FREE; 
        GOTO ENDCASE; 
  
NOMSG:  FREE; 
        GOTO ENDCASE; 
  
NOMATCH:  
        P<NDR$COMMUN> = CST$NDRCOM; 
        NDR$PATHID = QU$CONPTID;
        NDR$REPLY = CONR$BDID;
        NDR$FUNC = NF$CONRRPY;
        NDRRSTR;
        TRANSQ;                      # TRANSLATE REMOTE CONNECT REQUEST#
        REMDAYF(CONR$BDID,NADORD);   # ISSUE LID REJECT MESSAGE # 
        FREE; 
        GOTO ENDCASE; 
  
ENDCASE:  
  
# 
*     END OF SIMULATED CASE STATEMENT.
# 
  
        END 
  
      RETURN; 
      END  # REMCONR #
  
      TERM
