*DECK NS$HSM USETEXT COM$NS USETEXT DEF$NS USETEXT ERR$NS USETEXT HOC$NS USETEXT LIN$NS USETEXT PCM$NS USETEXT PFC$NS USETEXT SMB$NS PROC NS$HSM(ERRCODE); # HOST SUPERVISORY MESSAGE PROCESSOR # # TITLE NS$HSM - HOST SM PROCESSOR. # BEGIN # NS$HSM # # ** NS$HSM - HOST SM PROCESSOR. * * J.C. LEE 1981 * * THIS ROUTINE PROCESS HOST SMS. * * PROC NS$HSM(ERRCODE) * * ENTRY: * NONE. * * EXIT: * ERRCODE = ILLEGAL PFC/SFC IF ONE IS DETECTED. * * METHOD: * VALIDATE ABH(ABT/ACT/ADR/TLC) * IDENTIFY HOST SM. * IF A VALID HOST SM, CALL APPROPRIATE ROUTINE TO PROCESS * THE SM. * ELSE, FLAG ERROR AND EXIT. * # ITEM ERRCODE U; # ERROR CODE # $BEGIN XREF BEGIN PROC NS$DBG; # TRACE PROC CALL # END $END XREF BEGIN PROC NDLOVLD; # OVERLAY LOADER # FUNC NS$FEC U; # FORMAT ERROR CODE # PROC NS$MSG; # MESSAGE DISPATCHER # PROC NS$SHD; # SHUTDOWN NS # PROC NS$TKD; # TRANSFER DATA TO K DISPLAY BUFFER # PROC NETOFF; # DISCONNECT FROM NETWORK # END DEF ENDHSM # 15 #; # LARGEST HSM VALUE # ITEM INDEX U; # LOOP COUNTER # ITEM REASON U; # HOP COMMAND ERROR REASON CODE # ARRAY HPFCSFC [0:ENDHSM] S(1); # TABLE OF PFC/SFC CODES FOR # BEGIN # LEGAL NETWORK SUPERVISORY MSGS# ITEM HSM$PFCSFC U(00,00,16) = [ # VALID HOST SM PFC/SFC # HOPPAGE, HOPCMD, HOPBRK, HOPSTRT, HOPENDD, HOPIG, HOPDU, HOPNOTR, HOPREL, HOPRS, HOPTRCE, HOPDB, HOPDE, ERRLGL, SHUINS, 0 ]; ITEM HSM$PCMDI U(00,42,18) = [ # PROGRAM COMMAND ORDINAL # 0, 0, 0, 0, 0, 0, PCMDI"DU", PCMDI"NOTR", PCMDI"REL", PCMDI"RS", PCMDI"TRCE", PCMDI"DB", PCMDI"DE", 0, 0, 0, ]; END DEF L$RSHDMSG # 4 #; # MESSAGE SIZE # DEF DM$RSHDMSG # DM$LOCAL #; # MESSAGE ROUTING OPTIONS # ARRAY MSG$RSHD [0:1] S(L$RSHDMSG); BEGIN # SHUTDOWN REQUESTED MESSAGE # ITEM RSHD$TEXT C(00,00,35) = [ "GRADUAL SHUTDOWN REQUESTED.", "IMMEDIATE SHUTDOWN REQUESTED.", ]; ITEM RSHD$END U(03,30,30) = [2(0)]; END DEF L$READY # 2 #; # SIZE OF READY .. LINE # ARRAY READY[0:0]S(L$READY); BEGIN # READY .. LINE # ITEM RDY$LNHDR U(00,00,60); # LINE HEADER WORD # ITEM RDY$LNID U(00,00,24) = [LIN$IDENT]; # LINE ID # ITEM RDY$F$RSP B(00,41,01) = [TRUE]; # END OF COMMAND RESPONSE# ITEM RDY$LNSIZE U(00,42,18) = [L$READY]; # LINE SIZE # ITEM RDY$TEXT C(01,00,07) = ["READY.."]; # LINE TEXT # ITEM RDY$TERM U(01,42,18) = [0]; # LINE TERMINATOR # END ARRAY BRK$OVLY [0:0] S(1); BEGIN # HOP/BRK PROCESSOR OVERLAY NAME/LEVEL # ITEM HBRK$NAM C(00,00,07) = ["BRKOVLY"]; ITEM HBRK$LV1 U(00,42,09) = [2]; ITEM HBRK$LV2 U(00,51,09) = [1]; END ARRAY END$OVLY [0:0] S(1); BEGIN # HOP/END PROCESSOR OVERLAY NAME/LEVEL # ITEM HEND$NAM C(00,00,07) = ["ENDOVLY"]; ITEM HEND$LV1 U(00,42,09) = [2]; ITEM HEND$LV2 U(00,51,09) = [2]; END ARRAY HCP$OVLY [0:0] S(1); BEGIN # HOP/CMD PREPROCESSOR OVERLAY NAME/LEVEL # ITEM HHCP$NAM C(00,00,07) = ["HCPOVLY"]; ITEM HHCP$LV1 U(00,42,09) = [2]; ITEM HHCP$LV2 U(00,51,09) = [3]; END ARRAY HFI$OVLY [0:0] S(1); BEGIN # FILE COMMAND PROCESSOR OVERLAY # ITEM HHFI$NAM C(00,00,07) = ["HFIOVLY"]; ITEM HHFI$LV1 U(00,42,09) = [2]; ITEM HHFI$LV2 U(00,51,09) = [4]; END ARRAY HHI$OVLY [0:0] S(1); BEGIN # HISTORY COMMAND PROCESSOR OVERLAY # ITEM HHHI$NAM C(00,00,07) = ["HHIOVLY"]; ITEM HHHI$LV1 U(00,42,09) = [2]; ITEM HHHI$LV2 U(00,51,09) = [5]; END ARRAY HNO$OVLY [0:0] S(1); BEGIN # NOFILE COMMAND PROCESSOR OVERLAY # ITEM HHNO$NAM C(00,00,07) = ["HNOOVLY"]; ITEM HHNO$LV1 U(00,42,09) = [2]; ITEM HHNO$LV2 U(00,51,09) = [6]; END ARRAY HST$OVLY [0:0] S(1); BEGIN # STATUS COMMAND PROCESSOR OVERLAY # ITEM HHST$NAM C(00,00,07) = ["HSTOVLY"]; ITEM HHST$LV1 U(00,42,09) = [2]; ITEM HHST$LV2 U(00,51,09) = [7]; END ARRAY KDD$OVLY [0:0] S(1); BEGIN # K DISPLAY DIAGNOSTIC OVERLAY NAME/LEVEL # ITEM HKDD$NAM C(00,00,07) = ["KDDOVLY"]; ITEM HKDD$LV1 U(00,42,09) = [2]; ITEM HKDD$LV2 U(00,51,09) = [8]; END ARRAY PAG$OVLY [0:0] S(1); BEGIN # HOP/PAGE PROCESSOR OVERLAY NAME/LEVEL # ITEM HPAG$NAM C(00,00,07) = ["PAGOVLY"]; ITEM HPAG$LV1 U(00,42,09) = [2]; ITEM HPAG$LV2 U(00,51,09) = [9]; END ARRAY PCM$OVLY [0:0] S(1); BEGIN # PROGRAM COMMAND PROCESSOR OVERLAY # ITEM HPCM$NAM C(00,00,07) = ["PCMOVLY"]; ITEM HPCM$LV1 U(00,42,09) = [2]; ITEM HPCM$LV2 U(00,51,09) = [10]; END ARRAY STR$OVLY [0:0] S(1); BEGIN # HOP/START PROCESSOR OVERLAY NAME/LEVEL # ITEM HSTR$NAM C(00,00,07) = ["STROVLY"]; ITEM HSTR$LV1 U(00,42,09) = [2]; ITEM HSTR$LV2 U(00,51,09) = [11]; END SWITCH HSMSWITCH # HOST SM PFC/SFC SWITCH # HSM$PAGE, HSM$CMD, HSM$BRK, HSM$STRT, HSM$ENDD, HSM$IG, HSM$PCMD, HSM$PCMD, HSM$PCMD, HSM$PCMD, HSM$PCMD, HSM$PCMD, HSM$PCMD, HSM$ERRLGL, HSM$SHUINS, HSM$ERR, ; SWITCH HOPCMDCASE:HCT # SWITCH FOR VALID HOP COMMANDS # LB$STATUS:CMD$STATUS, LB$HISTORY:CMD$HIST, LB$FILE:CMD$FILE, LB$NOFILE:CMD$NOFILE; CONTROL EJECT; # VALIDATE ABH # $BEGIN NS$DBG("HSM"); # TRACE CALL # $END REASON = 0; ERRCODE = 0; IF ABHABT[0] EQ APPCMD # ABT=3 # AND ABHADR[0] EQ 0 # CONNECTION 0 SM # AND ABHACT[0] EQ CT60TRANS # ACT = TRANSPARENT GO # AND ABHTLC[0] LQ MAX$SMSIZE # TLC IS WITHIN LIMIT # THEN # VALID ABH # BEGIN # IDENTIFY SUPERVISORY MESSAGE # HSM$PFCSFC[ENDHSM] = PFCSFC[0]; # GURANTEE PFC/SFC MATCH # FOR INDEX=0 WHILE HSM$PFCSFC[INDEX] NQ PFCSFC[0] DO BEGIN INDEX = INDEX + 1; END GOTO HSMSWITCH[INDEX]; # SWITCH ON PFC/SFC # HSM$STRT: NDLOVLD(STR$OVLY,ERRCODE); # PROCESS HOP/START # IF ERRCODE EQ 0 THEN # NO NAM ERROR DETECTED # BEGIN # SEND OUT DEFAULT HISTORY DISPLAY # CMD$WORD[PAR$CMD] = 0; # CLEAR COMMAND VERB # CMD$WORD[PAR$ALL] = 0; # FAKE HISTORY COMMAND # GOTO LB$HISTORY; END ELSE GOTO HSMEXIT; HSM$CMD: # PROCESS HOP/CMD/SM # P = LOC(HOPMSG[0]); # FWA OF HOP COMMAND TEXT # NDLOVLD(HCP$OVLY,SMB,HOPDTL[0],ERRCODE,REASON); # PREPROCESS HOP COMMAND TEXT # IF ERRCODE EQ 0 THEN # NO NAM ERROR ENCOUNTERED # BEGIN IF REASON EQ 0 THEN # NO HOP COMMAND ERRROR DETECTED SO FAR # GOTO HOPCMDCASE[CMD$ORD[0]]; # CASE ON HOP COMMAND VERB # ELSE # HOP COMMAND ERROR # GOTO CMDEXIT; END ELSE # NAM ERROR OCCURRED # GOTO HSMEXIT; LB$STATUS: # NPU STATUS DISPLAY COMMAND # NDLOVLD(HST$OVLY,REASON); GOTO CMDEXIT; LB$HISTORY: # HISTORY DISPLAY COMMAND # NDLOVLD(HHI$OVLY); GOTO CMDEXIT; LB$FILE: # ALTERNATE LOAD FILE COMMAND # NDLOVLD(HFI$OVLY,REASON); GOTO CMDEXIT; LB$NOFILE: # CANCEL ALTERNATE LOAD FILE COMMAND # NDLOVLD(HNO$OVLY,REASON); GOTO CMDEXIT; CMDEXIT: IF REASON NQ 0 THEN # HOP COMMAND ERROR, ISSUE GIAGNOSTIC # NDLOVLD(KDD$OVLY,REASON); SENDREADY: # SEND READY.. TO K DISPLAY # NS$TKD(READY,L$READY,1); GOTO HSMEXIT; HSM$PAGE: NDLOVLD(PAG$OVLY,ERRCODE); GOTO HSMEXIT; HSM$BRK: NDLOVLD(BRK$OVLY,ERRCODE); IF ERRCODE EQ 0 THEN # NO NAM ERROR DETECTED # GOTO SENDREADY; # SEND READY .. TO K DISPLAY # ELSE # NAM ERROR DETECTED # GOTO HSMEXIT; HSM$IG: DCW$F$IG[0] = TRUE; # DISABLE HOP ALERT MECHANISM # GOTO HSMEXIT; HSM$ENDD: NDLOVLD(END$OVLY,ERRCODE); GOTO HSMEXIT; HSM$PCMD: NDLOVLD(PCM$OVLY,HSM$PCMDI[INDEX]); # PROCESS PROGRAM COMMAND # GOTO HSMEXIT; HSM$ERRLGL: ERRCODE = NS$FEC(EC"ERR$LGL",ERRRLG[0]); # SET LOGICAL ERROR # GOTO HSMEXIT; HSM$SHUINS: IF SHUTF[0] THEN # FORCE SHUTDOWN REQUESTED # BEGIN INDEX = 1; FORCESHUT = TRUE; END ELSE # GRADUAL SHUTDOWN REQUESTED # BEGIN INDEX = 0; GRADSHUT = TRUE; END NS$MSG(MSG$RSHD[INDEX],L$RSHDMSG,DM$RSHDMSG); GOTO HSMEXIT; HSM$ERR: # PROCES ERROR # ERRCODE = NS$FEC(EC"ERR$SM",SMEC"HSM$PFCSFC"); GOTO HSMEXIT; END ELSE # NAM ERROR - ILLEGAL PFC/SFC # ERRCODE = NS$FEC(EC"ERR$SM",SMEC"HSM$ABH"); HSMEXIT: RETURN; END # NS$HSM # TERM