*DECK UPDNWS
USETEXT COMCBEG 
USETEXT COMRNET 
PROC UPDNWS(PATHSTATUS,ORDINAL,ORDTYPE);
# TITLE  UPDNWS - UPDATE NETWORK STATUS  #
  
      BEGIN  # UPDNWS # 
  
# 
**    UPDNWS  - UPDATE NETWORK STATUS 
* 
*     UPDNWS UPDATES RHF NETWORK STATUS IN THE CENTRAL LID TABLE
*     ONLY IF ALTERNATE ENABLED PATHS DO NOT EXIST FOR THE PID. 
* 
*     PROC  UPDNWS (PATHSTATUS,ORDINAL,ORDTYPE) 
* 
*     ENTRY   - NDTADDR    - ADDRESS OF NETWORK DESCRIPTION TABLE 
*               PATHSTATUS - NEW RHF NETWORK STATUS 
*               ORDINAL    - NAD ORDINAL
*               ORDTYPE    - TRUE IF NAD ORDINAL SPECIFIED
*     EXIT    - LIDT UPDATED
* 
*     PROCESS - SAVE POINTERS.
*               IF NAD ORDINAL SPECIFIED
*               THEN
*                 FOR ALL PIDS DO:  
*                   SEARCH ALL PATHS FOR THIS PID.
*                   IF THIS PID HAS A PATH THROUGH THIS LOCAL NAD 
*                     AND (THIS IS THE ONLY ENABLED PATH
*                          OR THE NAD IS BEING PUT IN SERVICE)
*                   THEN
*                     MOVE PID AND NETWORK STATUS TO SETPIDA BUFFER.
*               ELSE
*                 FIND ALTERNATE PATH VIA ANY NAD.
*                 MOVE PID AND NETWORK STATUS TO SETPIDA BUFFER.
*                 UPDATE NETWORK STATUS IN LIDT VIA SETPIDA REQUEST.
*               RESTORE POINTERS. 
# 
      ITEM    ORDINAL    I;          # PATH OR NAD ORDINAL  # 
      ITEM    ORDTYPE    B;          # ORDINAL TYPE  #
      ITEM    PATHSTATUS I;          # NEW NETWORK STATUS  #
# 
****  PROC UPDNWS XREF LIST BEGIN.
# 
      XREF
        BEGIN 
        PROC FALTPTH;                # FIND ALTERNATE PATH  # 
        ITEM NDTADDR I;              # NETWORK DEFINITON TABLE ADDRESS #
        ITEM NADTBL  I;              # POINTER TO LOCAL NAD TABLE # 
        PROC SPIDSTAT;               # SET PID STATUS  #
        END 
# 
****  PROC UPDNWS XREF LIST END.
# 
  
  
    CONTROL  IFEQ OS$NOS; 
      ITEM    ALTPTH     B;          # ALTERNATE PATH ENABLED  #
      ITEM    CURPTH     B;          # PATH TO PID ON THIS NAD #
      ITEM    PTHINDX    U;          # PATH INDEX # 
      ITEM    NETADR     I;          # SAVE NDT POINTER  #
      ITEM    PTHADR     I;          # SAVE PATH POINTER  # 
      ITEM    NADADR     I;          # SAVE NAD POINTER  #
      ITEM    SAVORD     I;          # SAVE ORDINAL  #
      ITEM    UPDFLG     B;          # UPDATE LIDT TABLE FLAG  #
      ITEM    PIDSTAT    I;          # SAVE PATH STATUS  #
    CONTROL EJECT;
      NETADR = P<NET$HEADER>;    # SAVE POINTERS  # 
      PTHADR = P<PTH$ENTRY>;
      NADADR = P<NAD$ENTRY>;
      SAVORD = ORDINAL; 
      PIDSTAT = PATHSTATUS; 
      UPDFLG = FALSE;                # SET UP PARAMETER  #
      IF ORDTYPE                     #  NAD ORDINAL SPECIFIED  #
      THEN
        BEGIN 
        P<NET$HEADER> = NDTADDR;
        ASLONGAS P<NET$HEADER> NE 0 
        DO
          BEGIN 
          CURPTH = FALSE;          # NO PATH TO THIS PID #
          ALTPTH = FALSE;          # NO ALTERNATE PATH #
          P<PTH$ENTRY> = NET$PATHAD;
          SLOWFOR PTHINDX = 1 STEP 1 UNTIL NET$NMPATH 
          DO
            BEGIN 
            P<NAD$ENTRY> = NADTBL + (PTH$NADORD * NAD$LENGTH);
            IF (PTH$NADORD NE ORDINAL)
            THEN
              BEGIN 
              IF (NOT NAD$ESTOFF) 
                AND PTH$ENABLE
              THEN
                BEGIN 
                ALTPTH = TRUE;
                END 
  
              END 
  
            ELSE
              BEGIN 
              CURPTH = TRUE;
              END 
  
            P<PTH$ENTRY> = P<PTH$ENTRY> + PTH$LENGTH; 
            END 
  
          IF CURPTH                # IF PATH FROM THIS NAD TO PID # 
            AND ( (NOT ALTPTH)     #   AND EITHER NO OTHER PATH UP #
                  OR (PIDSTAT EQ NW$PTHSUP) )  # OR NAD NOW UP #
          THEN
            BEGIN 
            SPIDSTAT(PIDSTAT,FALSE);
            UPDFLG = TRUE;
            END 
  
          P<NET$HEADER> = NET$NXTPID; 
          END 
  
        PIDSTAT = 0;
        END 
  
      ELSE
        BEGIN 
        FALTPTH(ORDINAL,ALTPTH);
        IF NOT ALTPTH 
        THEN
          BEGIN 
          UPDFLG = TRUE;
          END 
  
        END 
  
      IF UPDFLG 
      THEN
        BEGIN 
        SPIDSTAT (PIDSTAT,UPDFLG);
        END 
  
      P<NET$HEADER> = NETADR;        # RESTORE POINTERS  #
      P<PTH$ENTRY> = PTHADR;
      P<NAD$ENTRY> = NADADR;
    CONTROL ENDIF;
  
      RETURN; 
  
      END   # UPDNWS  # 
  
      TERM
