*DECK NS$HFI USETEXT DEF$NS USETEXT DIR$NS USETEXT HOC$NS USETEXT LIN$NS USETEXT NPT$NS USETEXT PRF$NS PROC NS$HFI(REASON); # ALTERNATE LOAD FILE COMMAND PROCESSOR # # TITLE NS$HFI - ALTERNATE LOAD FILE COMMAND PROCESSOR. # BEGIN # NS$HFI # # ** NS$HFI - ALTERNATE LOAD FILE COMMAND PROCESSOR. * * J.C. LEE 1981 * * PROC NS$HFI(REASON) * * ENTRY: * NONE. * * EXIT: * REASON - REASON CODE, POSSIBLE REASONS ARE: * - NPU NOT SPECIFIED IN COMMAND. * - SPECIFIED NPU NOT CONFIGURED/NOT FOUND * - ALTERNATE NLF NOT SPECIFIED IN COMMAND. * - FILE ATTACH NOT SUCCESSFUL. * - BAD NLF FILE FORMAT. * - SPECIFIED NPU ACTIVE, CANNOT ACTION COMMAND. * * METHOD: * SEARCH SPECIFIED NPU IN NPU TABLE. * ATTACH SPECIFIED ALTERNATE NLF. * GET CIO BUFFER. * READ THE ALTERNATE NLF. * IF SPECIFIED NLF NOT CURRENTLY ACTIVE, SEND ALTERNATE NLF * VERSION MESSAGE TO *KDB*. * READ NLF DIRECTORY TO TSB. * SAVE DIRECTORY TSBN. * RELEASE CIO BUFFER. * # ITEM REASON U; # FILE COMMAND ERROR REASON CODE # $BEGIN XREF BEGIN PROC NS$DBG; # TRACE CALL # END $END XREF BEGIN FUNC ATTACH; # ATTACH FILE TO CONTROL POINT # PROC NS$TKD; # TRANSFER DATA TO K DISPLAY BUFFER # FUNC NS$XZFN C(10); # ZERO-FILLED WORD # PROC READ; # READ FILE # PROC READW; # TRANSFER DATA # PROC RECALL; # WAIT TILL I/O COMPLETES # PROC REQTSB; # REQUEST TSB # PROC RETERN; # RETURN FILE # PROC RETTSB; # RELEASE TSB # PROC SKIPB; # SKIP FILE BACKWARDS # PROC SKIPEI; # SKIP TILL EOI # END DEF L$ALFBUF # O"101" #; # SIZE OF CIO BUFFER # DEF PRF$7700L # 15 #; # SIZE OF 77 TABLE IN NLF # ITEM DIRTSBN U; # DIRECTORY TSB NUMBER # ITEM I U; # TEMPORARY # ITEM NPTINDEX U; # NPU TABLE ENTRY INDEX # ITEM NPTCOUNT U; # NPU TABLE ENTRY COUNT # ITEM NPUNAME C(7); # NPU NAME # ITEM PFN C(7); # PFN OF ALTERNATE LOAD FILE # ITEM PW C(7); # PASSWORD OF ALTERNATE LOAD FILE # ITEM STAT U; # RETURN STATUS # ITEM TSBFWA U; # TSB FWA # ITEM TSBN U; # TSB NUMBER # ITEM UN C(7); # USER NAME OF ALTERNATE LOAD FILE # ARRAY ALF$FET[0:0]S(5); BEGIN # ALTERNATE LOAD FILE FET # ITEM FET$LFN C(00,00,07); # LOGICAL FILE NAME # ITEM FET$FM B(00,58,01) = [TRUE]; # BINARY FILE MODE # ITEM FET$COMP B(00,59,01) = [TRUE]; # COMPLETION BIT # ITEM FET$RAN B(01,12,01) = [TRUE]; # RANDOM FILE # ITEM FET$FIRST I(01,42,18); # FIRST POINTER # ITEM FET$IN I(02,42,18); # IN PONTER # ITEM FET$OUT I(03,42,18); # OUT POINTER # ITEM FET$LIMIT I(04,42,18); # LIMIT POINTER # END DEF L$FVERSION # 5 #; # LENGTH OF FILE VERSION MESSAGE # ARRAY FILVERSION[0:0]S(L$FVERSION); BEGIN # ALTERNATE FILE VERSION MESSAGE # ITEM FVER$LNHDR U(00,00,60); # LINE HEADER WORD # ITEM FVER$LNID U(00,00,24) = [LIN$IDENT]; # LINE ID # ITEM FVER$LNSIZ U(00,42,18) = [L$FVERSION]; # SIZE # ITEM FVER$TEXT C(01,00,38) = # MESSAGE TEXT # ["FILENAM VERSION - YY/MM/DD, HH.MM.SS."]; ITEM FVER$PFN C(01,00,07); # ALTERNATE NLF PFN # ITEM FVER$DATE C(02,48,08); # CREATION DATE # ITEM FVER$TIME C(03,48,08); # CREATION TIME # ITEM FVER$TERM U(04,48,12) = [0]; # LINE TERMINATOR # END CONTROL EJECT; $BEGIN NS$DBG("HFI"); # TRACE CALL # $END REASON = 0; NPUNAME = CMD$NPUNAM[PAR$NPU]; # NPU NAME # IF NPUNAME NQ 0 THEN # NPU NAME IS SPECIFIED IN COMMAND # BEGIN NPTCOUNT = NPT$EC[0]; # NPU TABLE ENTRY COUNT # NPTINDEX = 0; # NPU TABLE ENTRY INDEX # FOR I = 1 STEP 1 WHILE I LQ NPTCOUNT AND NPTINDEX EQ 0 DO # SEARCH NPU TABLE FOR SPECIFIED NPU # BEGIN IF NPT$NPNAME[I] EQ NPUNAME THEN # NPU NAME MATCH, ENTRY FOUND # NPTINDEX = I; # SAVE NPU ENTRY INDEX # END IF NPTINDEX NQ 0 THEN # FOUND SPECIFIED NPU # BEGIN IF CMD$WORD[PAR$NLF] NQ 0 THEN # ALTERNATE NLF MUST BE SPECIFIED # BEGIN # TRY ATTACHING SPECIFIED FILE # PFN = NS$XZFN(CMD$NLFPFN[PAR$NLF]); # ZERO-FILLED PFN # UN = NS$XZFN(CMD$NLFUN[PAR$UN]); # ZERO-FILLED UN # PW = NS$XZFN(CMD$NLFPW[PAR$PW]); # ZERO-FILLED PASSWORD # IF CMD$WORD[PAR$PW] EQ 0 THEN # USE DEFAULT PASSWORD FOR ATTACH CALL # CMD$NLFPW[PAR$PW] = "DEFAULT"; STAT = ATTACH(PFN,PFN,UN,PW,1); # ATTACH SPECIFIED NLF # IF STAT EQ 0 THEN # FILE ATTACH IS SUCCESSFUL # BEGIN # VALIDATE CCP LOAD FILE # REQTSB(L$ALFBUF,TSBFWA,TSBN); # GET CIO BUFFER # FET$LFN[0] = PFN; # SET LFN OF ALTERNATE LOAD FILE # FET$FIRST[0] = TSBFWA; # SET FET TO READ ALTERNATE NLF # FET$IN[0] = TSBFWA; FET$OUT[0] = TSBFWA; FET$LIMIT[0] = TSBFWA + L$ALFBUF; SKIPEI(ALF$FET); # SKIP FILE TILL EOI # SKIPB(ALF$FET,2); # POITION AT DIRECTORY RECORD # READ(ALF$FET); # READ NLF DIRECTORY RECORD # RECALL(ALF$FET); # WAIT TILL I/O COMPLETES # P = TSBFWA; # FWA OF PREFIX TABLE # P = TSBFWA + PRF$7700L; # FWA OF NLF DIRECTORY # IF PRF$ID[0] EQ PRF$IDENT # PREFIX TABLE ID OK # AND DIR$FID[0] EQ LFN$NLF # FILE IDENTIFIER OK # THEN # VALID NLF # BEGIN IF NPT$NATTSB[NPTINDEX] EQ 0 THEN # NPU CURRENTLY NOT ACTIVE, PROCEED # BEGIN FVER$PFN[0] = CMD$NLFPFN[PAR$NLF]; # FORMAT MESSAGE # FVER$DATE[0] = PRF$DATE[0]; # SET FILE CREATION DATE # FVER$TIME[0] = PRF$TIME[0]; # SET FILE CREATION TIME # NS$TKD(FILVERSION,L$FVERSION,1); # SEND LINE TO KDB # I = DIR$WC[0] + 1; # SIZE OF DIRECTORY RECORD # REQTSB(I,TSBFWA,DIRTSBN); # GET TSB FOR DIRECTORY # FET$OUT[0] = P; # SET TO FWA OF DIRECTORY # P = TSBFWA; # FWA OF DIRECTORY RECORD # READW(ALF$FET,DIR,I,STAT); # READ DIRECTORY TO TSB # IF NPT$ALFWD[NPTINDEX] NQ 0 THEN # AN ALTERNATE NLF CURRENTLY EXISTS # BEGIN # RELEASE CURRENT NLF DIRECTORY TSB # RETTSB(NPT$DIRTSB[NPTINDEX]); FET$LFN[0] = NS$XZFN(NPT$ALFPFN[NPTINDEX]); RETERN(ALF$FET); # RETURN OLD ALTERNATE NLF # NPT$ALFWD[NPTINDEX] = 0; # CLEAR ALTERNATE NLF WORD# END NPT$ALFPFN[NPTINDEX] = CMD$NLFPFN[PAR$NLF]; NPT$DIRTSB[NPTINDEX] = DIRTSBN; # SAVE DIR TSBN # RETTSB(TSBN); # RELEASE CIO BUFFER # END ELSE # NPU ACTIVE, CANNOT ACTION COMMAND # REASON = HOPCMDERR"NPUACTIVE"; END ELSE # BAD NLF DIRECTORY RECORD # REASON = HOPCMDERR"NLFBAD"; # BAD NLF FILE FORMAT # END ELSE # FILE ATTACH IS NOT SUCCESSFUL # REASON = HOPCMDERR"NLFNAVAIL"; # NLF NOT AVAILABLE # END ELSE # ALTERNATE LOAD FILE IS NOT SPECIFIED # REASON = HOPCMDERR"NLFNSPEC"; END ELSE # NPU NOT FOUND, SPECIFIED NPU NOT CONFIGURED # REASON = HOPCMDERR"NPUNCNFG"; END ELSE # NPU MUST BE SPECIFIED IN COMMAND # REASON = HOPCMDERR"NPUNSPEC"; RETURN; END # NS$HFI # TERM