*DECK MHFMSG
USETEXT COMCBEG 
USETEXT COMRAPL 
USETEXT COMRMEM 
USETEXT COMRNAM 
USETEXT COMRNDR 
USETEXT COMRNET 
USETEXT COMRQUE 
    PROC MHFMSG (ADDR); 
# TITLE MHFMSG - SEND MESSAGE TO MHF APPLICATION. # 
  
      BEGIN 
# 
**    MHFMSG - SEND MESSAGE TO MHF APPLICATION. 
* 
*     SEND A STATNDT SUPERVISORY MESSAGE TO THE MAINTENANCE HOST
*     FACILITY (MHF), TO UPDATE A WORD IN THE NETWORK DESCRIPTION TABLE.
* 
*     ENTRY   - ADDR    = ADDRESS OF NDT WORD.
* 
*     EXIT    - STATNDT MESSAGE SENT TO MHF 
* 
*     PROCESS - SAVE APL/QUEUE POINTERS 
*               IF MHF APPLICATION DEFINED
*                 IF MHF ACTIVE 
*                   SEND NAD STATE TO MHF (STATNDT SUP MSG) 
*                 ELSE
*                   IF MHF ENABLED
*                     IF NOT IDLE-DOWN OR SHUT-DOWN 
*                       CALL STRTJOB TO START MHF.
*                   ELSE
*                     SEND DAYFILE MESSAGE (MHF DISABLED) 
*               ELSE (MHF APPLICATION NOT DEFINED)
*                 SEND DAYFILE MESSAGE (MHF NOT DEFINED)
*               RESTORE APL/QUEUE POINTERS
# 
  
      ITEM ADDR       U;           # ADDRESS OF NDT WORD #
# 
****  PROC MHFMSG - XREF LIST BEGIN 
# 
      XREF
        BEGIN 
        ITEM FAPLADR I;            # FIRST APPL TABLE ADDR #
        PROC GETFREE;              # GET FREE QUEUE ENTRY # 
        ITEM LAPLADR I;            # LAST APPL TABLE ADDR # 
        ITEM NDTADDR I;              # NDT FWA #
        PROC RHFMSG;               # RHF DAYFILE MESSAGE #
        PROC STRTJOB;              # START APPL # 
        PROC SUPRPLY;              # SEND SUPERVISORY REPLY # 
        END 
# 
****  PROC MHFMSG - XREF LIST END 
# 
  
  
      ARRAY [0:1] S(4); 
        BEGIN 
        ITEM MSG$NOMHF  C(00,00,38) = 
              [" RHF, MHF APPLICATION NOT DEFINED.    ",
               " RHF, MHF APPLICATION DISABLED.       "]; 
        END 
  
      ITEM MSG$NOMHFL I = 38; 
  
      ITEM APLADR     U;
      ITEM FOUND      B;
      ITEM QUEADR     U;
CONTROL EJECT;
  
      APLADR = P<APL$HEADER>;      # SAVE POINTERS #
      QUEADR = P<QU$ADDRESS>; 
      P<APL$HEADER> = FAPLADR;
      FOUND = FALSE;
  
      ASLONGAS NOT FOUND           # SEARCH APPL TABLE #
        AND (P<APL$HEADER> LE LAPLADR)
      DO
        BEGIN 
  
        IF APL$NAME EQ "MHF"
        THEN
          BEGIN 
          FOUND = TRUE;            # MHF ENTRY FOUND #
          END 
  
        ELSE
          BEGIN 
          P<APL$HEADER> = P<APL$HEADER> + APL$LENGTH
                          + APL$NUMCON * CON$LENGTH;
          END 
        END 
  
      IF FOUND                     # IF MHF FOUND # 
      THEN
        BEGIN 
  
        IF APL$NETON               # IF MHF ACTIVE #
        THEN
          BEGIN 
          GETFREE;
          QU$WD3 = 0; 
          QU$SUPWD1 = 0;
          QU$PFCSFC = $STATNDTR;
          QU$NDENTAD = ADDR - NDTADDR;  # ADDRESS # 
          QU$NDENOFS = 0; 
          QU$SUPWD2  = NDT$WD1[QU$NDENTAD + 1];  # NDT WORD # 
          QU$HDRABT = $SUPERABT;
          QU$SUPACN = 0;
          QU$HDRIBU = FALSE;
          QU$HDRTLC = 2;
          QU$CHARGE = 0;
          SUPRPLY;                 # SEND SUP MESSAGE TO MHF #
          END 
  
        ELSE  # MHF NOT ACTIVE #
          BEGIN 
  
          IF APL$ENABLE            # IF MHF ENABLED # 
          THEN
            BEGIN 
            IF NOT APL$START       # IF NOT YET STARTED # 
              AND NOT (IDLEDWN OR SHUTDWN)
            THEN
              BEGIN 
              STRTJOB;
              END 
  
            END 
  
          ELSE
            BEGIN 
            RHFMSG(LOC(MSG$NOMHF[1]),MSG$NOMHFL);  # MHF DISABLED # 
            END 
          END 
        END 
  
      ELSE  # MHF NOT FOUND # 
        BEGIN 
        RHFMSG(LOC(MSG$NOMHF[0]),MSG$NOMHFL);  # MHF NOT DEFINED #
        END 
  
      P<APL$HEADER> = APLADR;      # RESTORE POINTERS # 
      P<QU$ADDRESS> = QUEADR; 
  
      END  # MHFMSG # 
  
    TERM
