*DECK STRTNDR 
USETEXT COMCBEG 
USETEXT COMRNDR 
PROC STRTNDR; 
# TITLE STRTNDR - START UP NEW NDR.  #
  
      BEGIN  # STRTNDR #
  
# 
**    STRTNDR - START UP NEW NDR. 
* 
*     START UP NEW NDR. 
* 
*     PROC STRTNDR. 
* 
*     ENTRY   - NEW NDR ALLOWED.
* 
*     EXIT    - NEW NDR REQUESTED.
* 
*     PROCESS - LOCATE UNASSIGNED NDR COMMUNICATION AREA. 
*               MAKE NDR REQUEST. 
*               INCREMENT ACTIVE NDR COUNT. 
*               RETURN. 
# 
  
# 
****  PROC STRTNDR - XREF LIST BEGIN. 
# 
      XREF
        BEGIN 
        PROC CALLSYS;                # SYSTEM REQUEST # 
        ITEM NDRCOM  I;              # NDR COMMUNICATION AREA # 
        ITEM MAXNDRS I;              # MAXIMUM NDRS # 
        END 
  
# 
****  PROC STRTNDR - XREF LIST END. 
# 
  
  
      ITEM I         I;              # LOOP CONTROL VARIABLE #
      ITEM UNASGNDR  B;              # UNASIGNED NDR FOUND #
  
      ARRAY NDRCALL[0:0] S(1);       # NDR CALL REQUEST # 
        BEGIN 
        ITEM NDRNAME    C(00,00,03) = ["NDR"];
        ITEM NDRRCL     B(00,19,01) = [FALSE];
        ITEM NDRADDR    I(00,42,18);
        END 
  
CONTROL EJECT;
  
      UNASGNDR = FALSE; 
      FASTFOR I=0 STEP NDR$LENGTH 
        WHILE I LS MAXNDRS*NDR$LENGTH AND NOT UNASGNDR
      DO
        BEGIN  # LOCATE UNASIGNED NDR COMMUNICATION AREA #
        P<NDR$COMMUN> = NDRCOM + I; 
        IF NOT NDR$ACTIVE 
        THEN
          BEGIN  # FOUND INACTIVE AREA #
          UNASGNDR = TRUE;
          END 
  
        END 
  
      NDR$ACTIVE = TRUE;
      NDR$RQCHG = FALSE;
      NDR$FUNC = NF$START;
      NDRADDR = P<NDR$COMMUN> / O"10";
      CALLSYS(NDRCALL);              # REQUEST NDR #
      ACTIVENDRS = ACTIVENDRS + 1;
      RETURN; 
      END  # STRTNDR #
  
      TERM
