*DECK HPSHISD 
USETEXT NIPDEF
USETEXT ACB 
USETEXT AT
USETEXT AHEADER 
USETEXT APPSTAT 
USETEXT MSGIDX
USETEXT PARAMS
USETEXT PT
USETEXT SUPMSG
PRGM HPSHISD ;
STARTIMS ;
 #
*1DC  HPSHISD 
*     1. PROC NAME                  AUTHOR           DATE 
*        HPSHISD                    L.T.NGUYEN       82/03/02 
* 
*     2. FUNCTIONAL DESCRIPTION : 
*        SEND THE SHUT/INS SM TO ALL APPLICATIONS OR TO A SPECIFIED 
*        APPLICATION. 
* 
*     3. METHOD:  
*        - TO ALL APPLICATIONS ( SHISAN IS ZERO ) 
*          LOOP THROUGH THE AT AND FORM SHUT/INS SM FOR APPL. 
*          EXCEPT NVF APPLICATION.
*        - TO A SPECIFIED APPLICATION ( SHISAN IS THE APPL. NUMBER) 
*          USING SHISAN AS INDEX INTO AT. FORM AND SEND SHUT/INS SM.
* 
*     4. INPUT PARAMS : 
*        PARAMS1 - ADDRESS OF SHUTDOWN MESSAGE FROM NVF 
* 
*     5. OUTPUT PARAMS :  
*        NONE.
* 
*     6. COMDECKS CALLED
*        NIPDEF     ACB     AT
*        AHEADER     APPSTAT     MSGIDX 
*        PARAMS     PT     SUPMSG 
*        OSSIZE 
* 
*     7. ROUTINES CALLED
*        ABORT - ABORT NIP
*        MGETS - TO GET BUFFER FOR SM.
*        BLINK - LINK SM TO ACB 
*        OSCHAPP - SCHEDULE THE APPLICATION 
* 
*     8.DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION
*        "SH/ISD ON NON-EXISTENT AN      "
*        THIS IS A SECONDARY OVERLAY CALLED BY HPPUT. 
*        W A R N I N G - THIS PROGRAM CANNOT EXCEED THE SECONDARY 
*CALL OSSIZE
* 
* 
 #
STOPIMS ; 
      XREF
        BEGIN 
        PROC ABORT ;
        PROC BLINK ;                   # LINK SM TO ACB                #
        PROC MGETS ;                   # GET BUFFER FOR SM             #
        PROC OSCHAPP ;                 # SCHEDULE THE APPLICATION      #
        LABEL RJMAIN ;
        END 
  
  
      ITEM I ;
      ITEM IMSHUTD B ;                 # IMMEDIATE SHUT DOWN FLAG      #
      ITEM SMADDR ;                    # ADDRESS OF SM                 #
  
      BEGIN                            # HPSHISD                       #
        P<SUPMSG> = PARAMS1 + BLKHSIZE + ABHSIZE ; # SH/ISD SM         #
        P<SMNVF> = P<SUPMSG> ;
        IF SHISF[0] 
        THEN
          IMSHUTD = TRUE  ;            # IMMEDIATE SHUT DOWN           #
        ELSE
          IMSHUTD = FALSE ;            # GRADUATE SHUT DOWN            #
  
        IF SHISAN[0] EQ 0 
        THEN
          BEGIN                        # SEND SHUT/INSD SM TO ALL      #
          FOR I = ATHSIZE + 1 STEP 1 UNTIL ATHAN[0] 
          DO
            BEGIN                      # LOOP THROUGH AT TO ALL ACB    #
            P<ACB> = ATACBA[I] ;       # ACB ADDRESS                   #
            IF P<ACB> NQ 0 AND NOT ATNVFN[I] AND NOT ATNVFF[I]
            THEN
              BEGIN                    # NONE ZERO ACB ADDRESS         #
              MGETS(LSHUT + BLKHSIZE + ABHSIZE, SMADDR,TRUE) ;
# 
              SET UP APPLICATION BLOCK HEADER 
# 
              P<AHEADER> = SMADDR + BLKHSIZE ;
              ABHABT[0] = APPCMD ;
              ABHACT[0] = CT60TRANS ; 
              ABHTLC[0] = LSHUT ; 
# 
              SET UP THE SUPERVISORY MESSAGE
# 
              P<SUPMSG> = SMADDR + BLKHSIZE + ABHSIZE ; 
              PFCSFC[0] = SHUINS ;
              SHUTF[0] = IMSHUTD ;
  
              BLINK(SMADDR,P<ACB>) ;
              OSCHAPP(P<ACB>) ; 
  
              END                      # NONE ZERO ACB ADDRESS         #
            END                        # LOOP THROUGH AT TO ALL ACB    #
          SHUTDOWN = TRUE ;            # SHUTTING DOWN NETWORK         #
          END                          # SEND SHUT/INSD TO ALL APPLS   #
        ELSE
          BEGIN                        # SEND TO SPECIFIED APPLICATION #
  
          P<ACB> = ATACBA[SHISAN[0]] ;   # APPL. CONTROL BLOCK         #
          IF P<ACB> NQ 0
          THEN
            BEGIN 
            IF NOT ATNVFN[SHISAN[0]] AND NOT ATNVFF[SHISAN[0]]
            THEN
              BEGIN 
              IF (ACBORD0[0])          # THIS APPLICATION ALREADY SENT #
                                       # SAC/NCL TO SET ERROR CONDITION#
              THEN                     # FOR SHI/SD/SM                 #
                BEGIN 
                ACBABTSH[0] = TRUE ;   # READY TO ABORT THIS APPL      #
                                       # AND DONT QUEUE ANY SM         #
                GOTO RJMAIN ; 
                END 
              MGETS(LSHUT + BLKHSIZE + ABHSIZE,SMADDR,TRUE) ; 
              P<AHEADER> = SMADDR + BLKHSIZE ;
              ABHABT[0] = APPCMD ;
              ABHACT[0] = CT60TRANS ; 
              ABHTLC[0] = LSHUT ; 
  
              P<SUPMSG> = SMADDR + BLKHSIZE + ABHSIZE ; 
              PFCSFC[0] = SHUINS ;
              SHUTF[0] = IMSHUTD ;
  
              BLINK(SMADDR,P<ACB>) ;
              OSCHAPP(P<ACB>) ; 
              END 
            END 
          ELSE
            BEGIN                      # SHUT DOWN RECEIVED ON NON-EX  #
            D16AN = SHISAN ;           # NON-EXISTENCE AN              #
            ABORT(DFMSG16,0) ;           # ABORT WITH DAYFILE MESSGAE  #
            END                        # SHUT DOWN ON NON-EXISTENCE AN #
  
          END                          # SEND TO SPECIFIED APPLICATION #
  
        GOTO RJMAIN ; 
  
      END 
      TERM
