*DECK SETNDT
USETEXT COMCBEG 
USETEXT COMMCOM 
USETEXT COMRNET 
    PROC SETNDT (WORD,REJ); 
      BEGIN  # SETNDT # 
  
#TITLE  SETNDT - SET NEW WORD IN NETWORK DESCRIPTION TABLE #
  
# 
**    SETNDT - SET NEW WORD IN NETWORK DESCRIPTION TABLE
* 
*     ENTRY      <BUF1> = ADDR OF NDT WORD CONTAINING NAD STATE 
*                WORD = NEW WORD. 
* 
*     EXIT       REJ  = FALSE, IF NDT WORD UPDATED. 
*                     = TRUE, IF INVALID ADDR.
*                WORD = CURRENT NDT WORD. 
* 
*     PROCESS    IF <BUF1> WITHIN NDT 
*                  SET REJECT = FALSE 
*                  RESET NST STATUS 
*                  IF STATE CHANGE
*                    AND (NEW STATE DISABLED) 
*                     OR (NEW STATE = DUMP/LOAD 
*                         AND CURRENT STATE = AVAIL/DISABLED):  
*                    RESET NST STATE AND CHANGE TIME. 
*                    DLCHKNDT = TRUE. 
*                  SET WORD = UPDATED NST WORD. 
*                ELSE 
*                  SET REJECT = TRUE
# 
  
# 
****  PROC SETNDT - XREF BEGIN
# 
      XREF
        BEGIN 
        PROC DBGNAME;              # DEBUG #
        END 
  
# 
****  PROC SETNDT - XREF END
# 
  
      ITEM WORD       U;           # NEW NDT WORD # 
      ITEM REJ        B;           # REJECT FLAG #
  
      ITEM NEWSTATE   U;           # NEW STATE #
      ITEM NEWSTATUS  U;           # NEW STATUS # 
      ITEM SAVNST     U;           # SAVE <NST$ENTRY> # 
  
CONTROL EJECT;
  
      $BEGIN
      DBGNAME ("SETNDT"); 
      $END
  
      IF P<BUF1> GE NDTBUF         # IF NDT ADDR VALID #
        AND P<BUF1> LT (NDTBUF + NDT$LENGTH)
      THEN
        BEGIN 
        REJ = FALSE;
        SAVNST = P<NST$ENTRY>;     # SAVE NST ADDR #
        P<NST$ENTRY> = LOC(WORD); 
        NEWSTATUS = NST$STATUS;    # NEW NST STATUS # 
        NEWSTATE  = NST$STATE;     # NEW NST STATE #
        P<NST$ENTRY> = P<BUF1>; 
        IF    NEWSTATE NE NST$STATE  # IF STATE CHANGE REQUESTED #
          AND (   (NEWSTATE EQ NS$DISAB)  # AND DISABLING NAD # 
               OR (NST$STATE EQ NS$DISAB) # OR DUMP/LOAD REQUEST #
               OR (NST$STATE EQ NS$AVAIL) ) 
        THEN
          BEGIN 
          DLCHKNDT = TRUE;         # CHECK NDT #
          NST$TIMCHG = CURRTIM;    # RESET CHANGE TIME #
          END 
  
        ELSE
          BEGIN 
          NEWSTATE = NST$STATE;    # USE CURRENT STATE #
          END 
  
        NST$STATUS = NEWSTATUS;    # UPDATE STATUS #
        NST$STATE  = NEWSTATE;     # UPDATE STATE # 
        WORD = NST$WORD0;          # RESET WORD # 
        P<NST$ENTRY> = SAVNST;     # RESTORE NST ADDR # 
        END 
  
      ELSE
        BEGIN 
        REJ = TRUE; 
        END 
      END 
    TERM
