*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<JOTWORD> = 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<SIOFET> = 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<BNAMLEV> = 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<PRF$TABLE> = CIOTSBADDR;
P<DIR> = 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<PRF$TABLE> = 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<DIR> = 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<DIR> = TSBADDR;
TSBINFO(TSBSIZE,TSBADDR,NCTTSBN);
P<NCT$NS> = TSBADDR;
TSBINFO(TSBSIZE,TSBADDR,NPTTSBN);
P<NPT$HEADER> = TSBADDR;
P<NPT$ENTRY> = TSBADDR + NPT$HDRL;
# SET UP HISTORY BUFFER #
HISL2$Z[I$NLF] = 0; # SET LINE TERMINATOR #
REQTSB(HIS$HDRL,TSBADDR,HISTSBN);
P<HIS$BUFFER> = TSBADDR; # FORMAT HISTORY BUFFER #
P<LIN$HEADER> =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$HEADER>+LIN$HDRL); # MOVE LI#
P<LIN$HEADER> = P<LIN$HEADER> + 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$HEADER>+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