*DECK NS$NSI USETEXT COM$NS USETEXT CYB$NS USETEXT DEF$NS USETEXT DIR$NS USETEXT FERR$NS USETEXT FET$NS USETEXT HIS$NS USETEXT IOD$NS USETEXT LIN$NS USETEXT LTSB$NS USETEXT NCT$NS USETEXT NPT$NS USETEXT PRF$NS PROC NS$NSI; # TITLE NS$NSI - NS INITIALIZATION. # BEGIN # NS$NSI # # ** NS$NSI - NS INITIALIZATION. * * J.C. LEE 1981 * * THIS ROUTINE PROCESS NS INITIALIZATION. * * PROC NS$NSI * * ENTRY: * NONE. * * EXIT: * NONE. * * METHOD: * - CLEAR NS NETTED-ON FLAG. * - CLEAR NS INITIALIZATION-DONE FLAG. * - SET DEFAULT CONTROL CARD PARAMETERS. * - CRACK CONTROL CARD PARAMETERS. * - INITIATE NPU DUMP FILE INDEX. * - INITIALIZE COM$COM COMMON AREA. * - MAKE SURE NEEDED FILES ARE LOCAL. * - PERFORM NETON PROCESSING. * - SEND NS VERSION, NCF BUILD DATE/TIME AND TITLE, * NLF BUILD DATE/TIME TO DAYFILE. * - BUILD THE NCT AND NPT. * - PRESET BASED ARRAY POINTERS FOR ALL NON-MOVABLE * BUFFERS. * - SET UP HISTORY BUFFER. * - SET NS INITIALIZATION-DONE FLAG. * IN ALL CASES, IF ERROR IS DETECTED, ISSUE MESSAGE * AND ABORT. * # XREF BEGIN PROC CLOCK; # GET TIME OF DAY # PROC DATE; # GET DATE # PROC EXINCSZ; # INCREASE TSB SIZE # PROC FSTATUS; # SEE IF FILE IS A LOCAL FILE # PROC MOVEI; # MOVE BLOCK OF WORDS # PROC MOVEOK; # ALLOW TSB TO MOVE # PROC NDLOVLD; # OVERLAY LOADER # PROC NETREL; # SET UP ZZZZZDN FILE # PROC NETDBG; # TURN ON/OFF AIP TRACE # *IF DEF,STAT PROC NETSTC; # GATHER STATISTICS # *ENDIF PROC NS$MSG; # DISPATCH MESSAGE # FUNC NS$XZFN C(10); # CONVERT BLANKS TO ZEROS # PROC READ; # READ A RECORD # PROC READW; # READ WORDS TO WORKING BUFFER # PROC RECALL; # WAIT UNTIL OPERATION IS COMPLETE # PROC REQTSB; # REQUEST A TSB # PROC RETTSB; # RETURN A TSB # PROC RTIME; # GET ELAPSED TIME SINCE DEADSTART # PROC SKIPB; # SKIP BACKWARDS # PROC SKIPEI; # SKIP TO END OF INFORMATION # PROC SQUEEZE; # CONSOLIDATE FREE SPACE # PROC TSBINFO; # GET TSB ADDRESS # PROC TSBINIT; # INITIALIZE TSB MANAGER # FUNC XCDD C(10); # INTEGER TO DECIMAL DISPLAY CODE # END DEF IBUFL # O"301" #; # INITIAL OPLD BUFFER LENGTH # DEF I$NCF # 0 #; # INDEX OF NCF IN FOR LOOP # DEF I$NLF # 1 #; # INDEX OF NLF IN FOR LOOP # DEF I$NRF1 # 2 #; # INDEX OF NRF1 IN FOR LOOP # DEF I$NRF2 # 3 #; # INDEX OF NRF2 IN FOR LOOP # DEF PRF$7700L # 15 #; # PREFIX TABLE LENGTH # # NAM LEVEL # *CALL NAMLEV ITEM BUFL U; # CALCULATED BUFFER LENGTH # ITEM CIOTSBADDR; # CIO BUFFER TSB ADDRESS # ITEM CIOTSBN U; # CIO BUFFER TSB NUMBER # ITEM ERRCODE U; # ERROR CODE RETURNED BY TABLE BUILDERS # ITEM FETTSBN U; # FET TSB NUMBER # ITEM FN C(10); # FILE NAME # ITEM I U; # LOOP INDEX # ITEM RETFWA U; # FREE TSB FWA RETURNED BY SQUEEZE # ITEM STATIS; # STATUS RETURNED BY NETSTC # ITEM TSBADDR U; # TSB ADDRESS # ITEM TSBN; # TSB NUMBER # ITEM TSBSIZE U; # TSB SIZE # ITEM UP; # LOOP LIMIT # ARRAY FILES [I$NCF:I$NRF2] S(1); BEGIN ITEM FILENAME C(00,00,04) = # FILE NAMES # [LFN$NCF, LFN$NLF, LFN$NRF1, LFN$NRF2]; ITEM PROCNAME C(00,24,04) = # PROC NAMES # ["NDLP", "LFG "]; ITEM INDXTSBN U(00,48,12); # DIRECTORY TSB NO. # END ARRAY HISL2 [I$NCF:I$NLF] S(3); BEGIN # LINE 2 OF HISTORY DISPLAY # ITEM HISL21 C(00,00,30) = ["NCF XX/XX/XX. XX.XX.XX., ", "NLF XX/XX/XX. XX.XX.XX. "]; ITEM HISL2$DATE C(00,24,08); ITEM HISL2$TIME C(01,24,08); ITEM HISL2$Z U(02,18,42); END DEF FNAL # 3 #; DEF DM$FNA # DM$ABORT+DM$LOCAL #; # DIRECTIVES FOR MSG$FNA # ARRAY MSG$FNA [0:0] S(FNAL); BEGIN # FILE NOT AVAILABLE MESSAGE # ITEM FNA1 C(00,00,19) = ["XXXX NOT AVAILABLE."]; ITEM FNA$FN C(00,00,04); ITEM FNA$Z U(01,54,06) = [ 0 ]; ITEM FNA$Z1 U(02,00,60) = [0]; END DEF DM$NLL # DM$NAMLOG + DM$LOCAL #; DEF NSLEVL$ # 2 #; # LENGTH OF NS LEVEL BUFF # DEF FVERSIONL$ # 3 #; # LENGTH OF FILE VERSION BUFF # DEF NCFTITL$ # 6 #; # LENGTH OF NCF TITLE BUFF # # * NSLEV - NS VERSION AND LEVEL BUFFER. # ARRAY NSLEV[00:00] S(NSLEVL$); BEGIN ITEM NLV$MSG C(00,00,14) = ["VER VER - LVL."]; ITEM NLV$VER C(00,24,03); ITEM NLV$LVL C(01,00,03); ITEM NLV$ZRO U(01,24,36) = [0]; END # * FVERSION - NCF/NLF BUILD DATE/TIME BUFFER. # ARRAY FVERSION[00:00] S(FVERSIONL$); BEGIN ITEM FVR$MSG C(00,00,23) = ["XXX YY/MM/DD, HH.MM.SS."]; ITEM FVR$FN C(00,00,03); ITEM FVR$DATE C(00,24,08); ITEM FVR$TIME C(01,24,08); ITEM FVR$ZRO C(02,18,42) = [0]; END # * NCFTIT - NCF TITLE BUFFER. # ARRAY NCFTIT[00:00] S(NCFTITL$); BEGIN ITEM NTL$TITLE C(00,00,50); ITEM NTL$ZRO U(05,00,60) = [0]; END DEF FERRL # 3 #; # LENGTH OF MSG$FERR # DEF DM$FERR # DM$ABORT+DM$SYSLOC+DM$NAMLOG #; ARRAY MSG$FERR [0:0] S(FERRL); BEGIN # FILE ERROR CODE MESSAGE # ITEM FERR1 C(00,00,28) = ["NS/BAD XXX DIRECTORY RECORD."]; ITEM FERR$LFN C(00,42,04); # NCF OR NLF # ITEM FERR$END U(02,48,12) = [0]; # END OF TEXT # END DEF NSVERL # HIS$LN1TL #; DEF DM$NSVER # DM$NAMLOG+DM$LOCAL #; # DIRECTIVES FOR MSG$NSVER # ARRAY MSG$NSVER [0:0] S(NSVERL); BEGIN ITEM NSVER1 C(00,00,28) = ["NS VERSION N.N, LEVEL XXXXX."]; ITEM NSVER$VER C(01,06,03); ITEM NSVER$LEV C(02,12,05); ITEM NSVER$Z U(02,48,12) = [ 0 ]; END ARRAY RTSEC [0:0] S(1); BEGIN ITEM RTIMESEC U(00,00,24); END BASED ARRAY BNAMLEV [0:0] S(2); BEGIN ITEM BNL$VER C(00,54,03); ITEM BNL$LEV C(01,18,05); ITEM BNL$LVL C(01,30,03); END BASED ARRAY JOTWORD [0:0] S(1); BEGIN ITEM JOT U(00,24,12); END ARRAY CRA$OVLY [0:0] S(1); BEGIN # CONTROL CARD CRACKER OVLY NAME AND LEVEL# ITEM CO$NAM C(00,00,07) = ["CRAOVLY"]; ITEM CO$LV1 U(00,42,09) = [1]; ITEM CO$LV2 U(00,51,09) = [1]; END ARRAY NON$OVLY [0:0] S(1); BEGIN # NETON OVLERLAY NAME AND LEVEL # ITEM NON$NAM C(00,00,07) = ["NONOVLY"]; ITEM NON$LV1 U(00,42,09) = [1]; ITEM NON$LV2 U(00,51,09) = [2]; END ARRAY BNCT$OVLY [0:0] S(1); BEGIN # BUILD NCT OVERLAY NAME AND LEVEL # ITEM BCO$NAM C(00,00,07) = ["BNCTOVL"]; ITEM BCO$LV1 U(00,42,09) = [1]; ITEM BCO$LV2 U(00,51,09) = [3]; END ARRAY BNPT$OVLY [0:0] S(1); BEGIN # BUILD NPT OVERLAY NAME AND LEVEL # ITEM BPO$NAM C(00,00,07) = ["BNPTOVL"]; ITEM BPO$LV1 U(00,42,09) = [1]; ITEM BPO$LV2 U(00,51,09) = [4]; END ARRAY IDN$OVLY [0:0] S(1); BEGIN # INITIATE DUMP FILE INDEX # ITEM IO$NAM C(00,00,07) = ["IDNOVLY"]; ITEM IO$LV1 U(00,42,09) = [1]; ITEM IO$LV2 U(00,51,09) = [5]; END CONTROL EJECT; NSNETON = FALSE; # INITIALIZE TO NS NOT NETTED ON # NSINITDONE = FALSE; # INITIALIZATION NOT COMPLETE # P = JOTLOC; # SET DEFAULT CONTROL CARD PARAMETERS # NIN = 0; DN = 0; NDF$CT = 0; # INITIALIZE NPU DUMP FILE TO PRIVATE # NSM = ASC$NN; # INHIBIT NPU DUMP FOR STARTUP MODE # MC = 0; # NO PERIODIC RELEASE OF DEBUG LOG FILE # RT = ASC$NN; # NO RELEASE OF TRACE FILES # NDLOVLD(CRA$OVLY); # CRACK CONTROL CARD PARAMETERS # NDLOVLD(IDN$OVLY); # INITIATE NPU DUMP FILE INDEX # # INITIALIZE COM$COM COMMON AREA # GRADSHUT = FALSE; # IDLE SHUTDOWN NOT ON # FORCESHUT = FALSE; # FORCE SHUTDOWN NOT ON # DCW$WORD[0] = 0; # CLEAR DISPLAY CONTROL WORD # NSU$WORD[0] = 0; # CLEAR NSUP WORD # LTW$WORD[0] = 0; # CLEAR LOAD TSB WORD # ZDMBID$PID[0] = NSDMBID; # SET NS ZZZZDMB FILE ID # ZDMBID$DN[0] = 0; # CLEAR ZZZZDMB DUMP RECORD NUMBER # HISTSBN = 0; NRF1$LFN = NS$XZFN(LFN$NRF1); # ZERO-FILLED LFN NRF1 # NRF2$LFN = NS$XZFN(LFN$NRF2); # ZERO-FILLED LFN NRF2 # TSBINIT; # INITIALIZE TSB MANAGER # # MAKE SURE NEEDED FILES ARE LOCAL # REQTSB(L$LFET,TSBADDR,FETTSBN); P = TSBADDR; # FORMAT FET # FETCMPT[0] = TRUE; FETLEN[0] = L$LFET - 5; UP = I$NLF; # SET LOOP LIMIT # $BEGIN UP = I$NRF2; # SET LOOP LIMIT # $END FOR I = I$NCF STEP 1 UNTIL UP DO BEGIN # MAKE SURE NEEDED FILES ARE LOCAL # FETLFN[0] = NS$XZFN(FILENAME[I]); FSTATUS(SIOFET); # DETERMINE IF FILE IS LOCAL # IF FETSTATUS[0] EQ 0 THEN # FILE NOT FOUND # BEGIN FNA$FN[0] = FILENAME[I]; NS$MSG(MSG$FNA,FNAL,DM$FNA); END END $BEGIN IF MC NQ 0 THEN NETREL(NRF1$LFN,MAX$TMSGSZ,0); ELSE # SET MESSAGE SIZE FOR ZZZZZDN ONLY # NETREL(0,MAX$TMSGSZ,0); $END # PERFORM NETON PROCESSING # NDLOVLD(NON$OVLY); NETDBG(1,1,STATIS); # TURN AIP TRACE OFF # # GET NS VERSION # P = LOC(NAMLEV); PRNAME[0] = "NS"; # SAVE NS VERSION/LEVEL # PRVER[0] = BNL$VER[0]; PRLEV[0] = BNL$LEV[0]; NSVER$VER[0] = BNL$VER[0]; NSVER$LEV[0] = BNL$LEV[0]; # * SEND NS VERSION AND LEVEL NUMBER TO NAM DAYFILE. # NLV$VER[0] = BNL$VER[0]; NLV$LVL[0] = BNL$LVL[0]; NS$MSG(NSLEV, NSLEVL$, DM$NLL); # OPEN NCF AND NLF # FETRAN[0] = TRUE; # THEY ARE BOTH RANDOM FILES # REQTSB(IBUFL,CIOTSBADDR,CIOTSBN); # GET CIO BUFFER # FOR I = I$NCF STEP 1 UNTIL I$NLF DO # OPEN FILES # BEGIN FETLFN[0] = NS$XZFN(FILENAME[I]); FETBIN[0] = TRUE; # BINARY FILE # FETCMPT[0] = TRUE; # COMPLETE BIT # FETFST[0] = CIOTSBADDR; # FIRST # FETIN[0] = CIOTSBADDR; FETOUT[0] = CIOTSBADDR; FETLMT[0] = CIOTSBADDR + IBUFL; # LIMIT # SKIPEI(SIOFET); SKIPB(SIOFET,2); READ(SIOFET); RECALL(SIOFET); P = CIOTSBADDR; P = CIOTSBADDR + PRF$7700L; # FORMAT DIRECTORY # IF PRF$ID[0] NQ PRF$IDENT OR DIR$FID[0] NQ C<0,3>FILENAME[I] THEN BEGIN # BAD OPLD # FERR$LFN[0] = FILENAME[I]; NS$MSG(MSG$FERR,FERRL,DM$FERR); # DAYFILE AND ABORT # END HISL2$DATE[I] = PRF$DATE[0]; # FILE CREATION DATE # HISL2$TIME[I] = PRF$TIME[0]; # FILE CREATION TIME # # * SEND FILE BUILD DATE AND TIME AND TITLE TO NAM DAYFILE. # FVR$FN[0] = FILENAME[I]; FVR$DATE[0] = PRF$DATE[0]; FVR$TIME[0] = PRF$TIME[0]; NS$MSG(FVERSION, FVERSIONL$, DM$NLL); IF FILENAME[I] EQ LFN$NCF THEN BEGIN NTL$TITLE[0] = PRF$TITLE[0]; # SEND NCF TITLE # NS$MSG(NCFTIT, NCFTITL$, DM$NLL); END REQTSB(DIR$WC[0] + 1,TSBADDR,TSBN); # GET DIRECTORY BUFFER # INDXTSBN[I] = TSBN; P = TSBADDR; FETOUT[0] = FETOUT[0] + PRF$7700L; # SKIP OVER 7700 TABLE # READW(SIOFET,PRF$TABLE,DIR$WC[0] + 1,STATIS); # READ DIR. # END # END OF NCF OR NLF PROCESSING # RETTSB(CIOTSBN); NLFINDTSBN = INDXTSBN[I$NLF]; # SAVE NLF INDEX TSB # # BUILD THE NCT AND NPU TABLE # FETLFN[0] = NS$XZFN(FILENAME[I$NCF]); TSBINFO(TSBSIZE,TSBADDR,INDXTSBN[I$NCF]); P = TSBADDR; # FORMAT DIRECTORY # FERR$LFN[0] = FILENAME[I$NCF]; NDLOVLD(BNCT$OVLY,ERRCODE); # BUILD THE NCT # NDLOVLD(BNPT$OVLY,ERRCODE); # BUILD NPU TABLE # RETTSB(INDXTSBN[I$NCF]); # RETURN NCF DIRECTORY # RETTSB(FETTSBN); # RETURN FET # RTIME(RTSEC); # GET SECONDS SINCE DEADSTART # NMTIME = RTIMESEC[0] + ITIMER; # TIME TO REVERT TO NORMAL MODE # MOVEOK(NLFINDTSBN); MOVEOK(NCTTSBN); MOVEOK(NPTTSBN); SQUEEZE(0,RETFWA); # PACK FIXED-SIZE PERMANENT TSBS TOGETHER # # PRESET BASED ARRAY POINTERS FOR ALL NON-MOVABLE BUFFERS # TSBINFO(TSBSIZE,TSBADDR,NLFINDTSBN); NLFDIRFWA = TSBADDR; # FWA OF DEFAULT NLF DIRECTORY # P = TSBADDR; TSBINFO(TSBSIZE,TSBADDR,NCTTSBN); P = TSBADDR; TSBINFO(TSBSIZE,TSBADDR,NPTTSBN); P = TSBADDR; P = TSBADDR + NPT$HDRL; # SET UP HISTORY BUFFER # HISL2$Z[I$NLF] = 0; # SET LINE TERMINATOR # REQTSB(HIS$HDRL,TSBADDR,HISTSBN); P = TSBADDR; # FORMAT HISTORY BUFFER # P =TSBADDR + HIS$HDRWDL; # FORMAT HISTORY LINE 1 # LIN$HDRWD[0] = 0; LIN$ID[0] = LIN$IDENT; # LINE IDENTIFIER # LIN$LNSIZE[0] = HIS$LN1TL + LIN$HDRL; # LINE SIZE # MOVEI(HIS$LN1TL,LOC(MSG$NSVER),P+LIN$HDRL); # MOVE LI# P = P + LIN$HDRL + HIS$LN1TL; LIN$HDRWD[0] = 0; # FORMAT HISTORY LINE 2 # LIN$ID[0] = LIN$IDENT; # LINE IDENTIFIER # LIN$LNSIZE[0] = HIS$LN2TL + LIN$HDRL; # LINE SIZE # MOVEI(HIS$LN2TL,LOC(HISL2),P+LIN$HDRL); # MOVE LINE 2# HIS$ID[0] = HIS$IDENT; # SET BUFFER IDENTIFIER # HIS$WC[0] = HIS$HDRL; # HISTORY BUFFER HEADER LENGTH # HIS$LC[0] = 2; # SET LINE COUNT # NSINITDONE = TRUE; # SET INITIALIZATION COMPLETED # RETURN; END # NS$NSI # TERM