*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