cdc:nos2.source:opl871:sxinit
Table of Contents
SXINIT
Table Of Contents
- [00001] PROC CALCTS
- [00002] CALCTS - CALCULATE TABLE SPACE.
- [00006] CALCTS - CALCULATE TABLE SPACE.
- [00129] PROC CRAST1)
- [00131] CRAST - CREATE *AST* ENTRY.
- [00135] CRAST - CREATE *AST* ENTRY.
- [00453] PROC GETRTP
- [00454] GETRTP - GETS AND PROCESSES RUN TIME PARAMETERS.
- [00459] GETRTP - GETS AND PROCESSES RUN TIME PARAMETERS.
- [00483] PROC EXTAB
- [00484] PROC MESSAGE
- [00485] PROC XARG
- [00486] PROC XDXB
- [00573] PROC GETUDT
- [00574] GETUDT - DETERMINES THE PROPERTIES OF THE CONFIGURATION.
- [00579] GETUDT - DETERMINES THE PROPERTIES OF THE CONFIGURATION.
- [00632] PROC ATTACH
- [00633] PROC BZFILL
- [00634] PROC PFD
- [00635] PROC SETPFP
- [00636] PROC MESSAGE
- [00637] PROC RDEST
- [00638] PROC READ
- [00639] PROC READW
- [00640] PROC RETERN
- [00641] PROC RTIME
- [00642] FUNC XCOD C(10)
- [00643] PROC ZSETFET
- [01101] PROC INITDAM
- [01102] INITDAM - INITIALIZE *TDAM* INTERFACE.
- [01126] PROC EESET
- [01127] PROC SYSTEM
- [01128] PROC ZFILL
- [01190] PROC INITFAM
- [01191] INITFAM - INITIALIZES SUBFAMILY PARAMETERS.
- [01196] INITFAM - INITIALIZES SUBFAMILY PARAMETERS.
- [01207] PROC ABORT
- [01208] PROC BZFILL
- [01209] PROC GETFAM
- [01210] PROC MESSAGE
- [01211] PROC PFD
- [01212] PROC RETERN
- [01213] PROC RMVBLNK
- [01214] PROC SETPFP
- [01215] FUNC XCOD I
- [01216] PROC XWOD
- [01217] PROC ZSETFET
- [01432] PROC INITFLG
- [01433] INITFLG - INITIALIZES ASSORTED FLAGS AND COUNTERS.
- [01438] INITFLG - INITIALIZES ASSORTED FLAGS AND COUNTERS.
- [01503] PROC INITLZR
- [01504] INITLZR - SEQUENCES *SSEXEC-S* INITIALIZATION STEPS.
- [01541] PROC CALLSS
- [01542] PROC GETMI
- [01543] PROC GETRTP
- [01544] PROC GETSPS
- [01545] PROC GETUDT
- [01546] PROC INITDAM
- [01547] PROC INITFAM
- [01549] PROC INITFLG
- [01550] PROC OPENCAT
- [01551] PROC INITSRP
- [01552] PROC INITTAB
- [01553] PROC KINIT
- [01554] PROC RTIME
- [01733] PROC INITSRP2)
- [01734] INITSRP - INITIALIZE SLAVE REQUEST PROCESSOR.
- [01739] INITSRP - INITIALIZE THE SLAVE REQUEST PROCESSOR.
- [01832] PROC MESSAGE
- [01833] PROC PDATE
- [01834] PROC PFD
- [01835] PROC READ
- [01836] PROC READW
- [01837] PROC REWIND
- [01838] PROC RETERN
- [01839] PROC RTIME
- [01840] PROC SETPFP
- [01841] PROC WRITER
- [01842] FUNC XCOD C(10)
- [01843] PROC ZFILL
- [01844] PROC ZSETFET
- [02189] PROC INITTAB
- [02190] INITTAB - INITIALIZES ASSORTED TABLES.
- [02194] INITTAB - INITIALIZES ASSORTED TABLES.
- [02214] PROC ABORT
- [02215] PROC CALCTS
- [02216] PROC INITTS
- [02217] PROC MEMORY
- [02218] PROC MESSAGE
- [02219] PROC MNGMEM
- [02220] PROC MSG
- [02221] PROC RECALL
- [02222] FUNC XCDD C(10)
- [02223] PROC ZFILL
- [02362] PROC INITTS
- [02363] INITTS - PRESET ASSORTED TABLES.
- [02368] INITTS - PRESET ASSORTED TABLES.
- [02382] PROC BZFILL
- [02383] PROC MESSAGE
- [02384] FUNC XCOD C(10)
- [02385] PROC ZFILL
- [02646] PROC OPENCAT
- [02648] OPENCAT - OPENS THE MAP AND CATALOG FILES.
- [02653] OPENCAT - OPENS MAP AND CATALOG FILES.
- [02696] PROC ABORT
- [02697] PROC ACQ$FCT
- [02698] PROC BZFILL
- [02699] PROC COPEN
- [02700] PROC CRAST
- [02701] PROC CRDAST
- [02702] PROC MESSAGE
- [02703] PROC MOPEN
- [02704] PROC RMVBLNK
- [02705] PROC RLS$FCT
- [02706] PROC SETPFP
- [02707] PROC UASTPRM
- [02708] FUNC XCDD C(3)
- [02709] FUNC XCOD
- [02710] PROC XWOD
- [03104] PROC SET0100
- [03105] SET0100 - PRESETS COMMON AREA(S) USED BY (1,0).
- [03110] SET0100 - PRESETS COMMON AREA USED BY (1,0).
- [03127] PROC TERMCAT
- [03128] TERMCAT - CLOSES THE CATALOGS AND SMMAPS.
- [03132] *TERMCAT* - CLOSES THE CATALOGS AND SMAMAPS.
- [03148] PROC CCLOSE
- [03149] PROC MCLOSE
- [03202] PROC TERMSCP
- [03204] TERMSCP - RELINQUISHES SCP STATUS.
- [03208] TERMSCP - RELINQUISHES SCP STATUS.
- [03223] PROC SFCALL
- [03247] PROC WRAPUP
- [03249] WRAPUP - WRAP-UP PROCESSING PRIOR TO NORMAL TERMINATION.
- [03254] WRAPUP - WRAPUP PROCESSING PRIOR TO NORMAL TERMINATION.
- [03273] PROC MESSAGE
- [03274] PROC RTIME
- [03275] PROC TERMCAT
- [03277] PROC TERMSCP
- [03278] PROC TIME
- [03279] FUNC XCDD C(6)
Source Code
- SXINIT.txt
- PROC CALCTS;
- # TITLE CALCTS - CALCULATE TABLE SPACE. #
- BEGIN # CALCTS #
- #
- ** CALCTS - CALCULATE TABLE SPACE.
- *
- * THIS PROCEDURE WILL CALCULATE THE NUMBER OF ENTRIES AND THE SPACE
- * REQUIRED FOR EACH OF THE VARIABLE TABLES, AND STORE THE RESULTS
- * IN THE ARRAY *MAT*.
- *
- * EXIT TABLE CALCULATIONS COMPLETED.
- #
- DEF LISTCON #0#; # DO NOT LIST COMDECKS #
- *CALL COMBFAS
- *CALL COMBCMD
- *CALL COMBLBL
- *CALL COMBLRQ
- *CALL COMBMAT
- *CALL COMBMCT
- *CALL COMBTDM
- *CALL COMBUDT
- *CALL COMXBST
- *CALL COMXCTF
- *CALL COMXEXP
- *CALL COMXFCQ
- *CALL COMXHLR
- *CALL,COMXIPR
- *CALL COMXINT
- *CALL COMXLTC
- *CALL COMXMFD
- *CALL COMXMSC
- ITEM TEMPCOUNT U; # TEMPORARY COUNT FIELD #
- CONTROL EJECT;
- #
- * CALCULATES THE SPACE REQUIRED AND THE NUMBER OF ENTRIES FOR EACH
- * OF THE VARIABLE TABLES, AND STORES THE RESULTS IN THE ARRAY
- * *MAT*.
- #
- TEMPCOUNT = Q+2;
- MAT$COUNT[MAT$ENTRY"HLRQ"] = TEMPCOUNT;
- MAT$SPACE[MAT$ENTRY"HLRQ"] = HLRQLEN * TEMPCOUNT;
- MAT$COUNT[MAT$ENTRY"LLRQ"] = TEMPCOUNT;
- MAT$SPACE[MAT$ENTRY"LLRQ"] = LLRQENTL * TEMPCOUNT;
- MAT$COUNT[MAT$ENTRY"RTRQ"] = Q * RTRQ$SPACE;
- MAT$SPACE[MAT$ENTRY"RTRQ"] = (TDAMLEN + 1) * (Q * RTRQ$SPACE);
- MAT$COUNT[MAT$ENTRY"FCTQ"] = Q; # SET FCTQ FIELD #
- MAT$SPACE[MAT$ENTRY"FCTQ"] = (FCTQHL+FCTENTL) * Q;
- BSTL = MAXCTN * 2;
- MAT$COUNT[MAT$ENTRY"BST"] = BSTL;
- MAT$SPACE[MAT$ENTRY"BST"] = BSTENTL * BSTL;
- LTCTCNT = FAMCNT + 3;
- MAT$COUNT[MAT$ENTRY"LTCT"] = FAMCNT + 3;
- MAT$SPACE[MAT$ENTRY"LTCT"] = LTCL * (FAMCNT + 3);
- MAT$COUNT[MAT$ENTRY"MRFT"] = FAMCNT;
- MAT$SPACE[MAT$ENTRY"MRFT"] = MRFTLEN * FAMCNT;
- MAT$COUNT[MAT$ENTRY"OMT"] = MAXSM;
- MAT$SPACE[MAT$ENTRY"OMT"] = OMTENTL * MAXSM;
- MAT$COUNT[MAT$ENTRY"OCT"] = 8 * FAMCNT;
- MAT$SPACE[MAT$ENTRY"OCT"] = OCTENTL * 8 * FAMCNT;
- MAT$COUNT[MAT$ENTRY"PREAMBLE"] = 8 * FAMCNT;
- MAT$SPACE[MAT$ENTRY"PREAMBLE"] = PRMTLEN * 8 * FAMCNT * 3;
- MAT$COUNT[MAT$ENTRY"SCR$BUF"] = BSTL;
- MAT$SPACE[MAT$ENTRY"SCR$BUF"] = SCCBL * BSTL;
- MAT$COUNT[MAT$ENTRY"UDT$CONT"] = MAXCTN;
- MAT$SPACE[MAT$ENTRY"UDT$CONT"] = UDTCUL + 1; # HEADER INCLUDED #
- MAT$COUNT[MAT$ENTRY"UDT$SM"] = MAXSMUNIT;
- MAT$SPACE[MAT$ENTRY"UDT$SM"] = UDTSML;
- MAT$COUNT[MAT$ENTRY"CAT$FET"] = 1;
- MAT$SPACE[MAT$ENTRY"CAT$FET"] = RFETL;
- MAT$COUNT[MAT$ENTRY"CAT$BUF"] = 1;
- MAT$SPACE[MAT$ENTRY"CAT$BUF"] = FCTBL;
- MAT$COUNT[MAT$ENTRY"MAP$FET"] = 1;
- MAT$SPACE[MAT$ENTRY"MAP$FET"] = RFETL;
- MAT$COUNT[MAT$ENTRY"MAP$BUF"] = 1;
- MAT$SPACE[MAT$ENTRY"MAP$BUF"] = MAPBUFL;
- MAT$COUNT[MAT$ENTRY"TEMP$FET"] = 1;
- MAT$SPACE[MAT$ENTRY"TEMP$FET"] = RFETL * 2;
- MAT$COUNT[MAT$ENTRY"TEMP$BUF"] = 1;
- MAT$SPACE[MAT$ENTRY"TEMP$BUF"] = TBUFL;
- MAT$COUNT[MAT$ENTRY"TEMP$WB"] = 1;
- MAT$SPACE[MAT$ENTRY"TEMP$WB"] = WBUFL;
- MAT$COUNT[MAT$ENTRY"AST$BUF"] = 1;
- MAT$SPACE[MAT$ENTRY"AST$BUF"] = ABUFLEN;
- MAT$COUNT[MAT$ENTRY"LABBUF"] = 1;
- MAT$SPACE[MAT$ENTRY"LABBUF"] = LABLEN;
- MAT$COUNT[MAT$ENTRY"MW$BUFS"] = MAXCTUNIT * CHANPC;
- MAT$SPACE[MAT$ENTRY"MW$BUFS"] = MAXCTUNIT * CHANPC *
- (MWBUFL + SFMWL + 1);
- # READ BUFFER ADDRESS INCLUDED #
- MAT$COUNT[MAT$ENTRY"MR$BUFS"] = MAXCTUNIT * CHANPC;
- MAT$SPACE[MAT$ENTRY"MR$BUFS"] = MAXCTUNIT*CHANPC*(MRBUFL+SFMRL);
- MAT$COUNT[MAT$ENTRY"SBT"] = MAXCTUNIT + (2 * MAXSMUNIT) + 1;
- MAT$SPACE[MAT$ENTRY"SBT"] = (MAXCTUNIT+(2*MAXSMUNIT)+1) * MSGLT;
- END # CALCTS #
- TERM
- PROC CRAST((FCTX),(QADDR),(ASTADDR));
- # TITLE CRAST - CREATE *AST* ENTRY. #
- BEGIN # CRAST #
- #
- ** CRAST - CREATE *AST* ENTRY.
- *
- * THIS PROCEDURE WILL SCAN THE *FCT* ENTRY AT ORDINAL *FCTX* TO
- * CREATE THE CORRESPONDING TRIAL *AST* ENTRY TO BE
- * CHECKED WITH THE EXISTING AST IN THE PROCEDURE OPENCAT.
- *
- * PROC CRAST((FCTX),(QADDR),(ASTADDR))
- *
- * ENTRY (FCTX) = ORDINAL OF *FCT* ENTRY.
- * (QADDR) = ADDRESS OF *FCTQ* ENTRY.
- * (ASTADDR) = ADDRESS OF *AST* BUFFER.
- *
- * EXIT *AST* ENTRY HAS BEEN CONSTRUCTED.
- #
- ITEM FCTX U; # ORDINAL OF *FCT* ENTRY #
- ITEM QADDR U; # ADDRESS OF *FCTQ* ENTRY #
- ITEM ASTADDR U; # ADDRESS OF *AST* BUFFER #
- DEF SPACES #" "#; # SPACES #
- DEF LISTCON #0#; # DO NOT LIST COMDECKS #
- *CALL COMBFAS
- *CALL COMBMCT
- *CALL COMXCTF
- *CALL COMXFCQ
- *CALL COMXINT
- *CALL COMXMSC
- ITEM ATBNDRY B; # TRUE IF AT *CDP* OR DONE #
- ITEM DONE B; # TRUE IF AFTER LAST AU #
- ITEM I U; # INDEX #
- ITEM LASTBUSY U; # LAST PROTECTED AU #
- ITEM NXTFREE U; # NEXT (EXPECTED) FREE VOLUME #
- ITEM PREVVOL U; # AU OF PREVIOUS VOLUME #
- ITEM TEMP U; # TEMPORARY #
- ITEM THISAU U; # LOOP INDEX #
- ITEM TOTAU U; # TOTAL AU AVAILABLE FOR
- ALLOCATION #
- ITEM VOLLN U; # NUMBER OF (EXPECTED)
- CONTINUATION AU #
- CONTROL EJECT;
- P<FCT> = QADDR + FCTQHL;
- P<AST> = ASTADDR;
- IF AST$STAT[FCTX] NQ ASTENSTAT"ASS$CART"
- THEN
- BEGIN
- RETURN;
- END
- #
- * DET OFF CARTRIDGE LINK AND ALLOCATION ALLOWED FLAGS IS AST.
- #
- AST$NOCLF[FCTX] = FCT$OCLF[FCTX] EQ 7;
- AST$AAF[FCTX] = NOT ( FCT$IAF[0] OR FCT$LCF[0] OR ##
- FCT$EEF[0] OR FCT$SEF[0] OR ##
- FCT$FCF[0]) OR (FCT$ORD[0] NQ FCTX);
- #
- * THE OBJECTIVES OF THE FOLLOWING ANALYSIS OF THE *FCT* ENTRY
- * ARE THREEFOLD:
- *
- * 1) COUNT THE AU AVAILABLE FOR ALLOCATION.
- *
- * 2) IDENTIFY THE FREE AU WHICH CAN SAFELY BE ALLOCATED
- * FOR STORAGE OF FILE DATA, LEAVING ALONE THOSE AU
- * WHICH ARE UNALLOCATED, BUT ARE FLAGGED, FLAWED OR
- * INCLUDED WITHIN THE COUNT OF CONTINUATION AU OF
- * AN AU OR VOLUME WHICH IS ALLOCATED.
- *
- * 3) RE-ORGANIZE THESE USABLE AU INTO VOLUMES AND REBUILD
- * THE CHAIN OF AVAILABLE VOLUMES FOR USE BY THE ALLOCATOR.
- *
- * A LOOP EXAMINES EACH AU IN THE *FCT* ENTRY. EACH AU IS
- * REJECTED AS BEING AVAILABLE IF IT IS BUSY, FLAWED, OR HAS
- * OTHER FLAGS SET. AN AU WHICH IS EXPECTED TO BE A
- * CONTINUATION AU FOR A VOLUME AVAILABLE FOR ALLOCATION IS
- * ACCEPTED IN THE VOLUME IF IT IS NOT BUSY OR FLAGGED.
- * ANY AU WHICH IS NOT BUSY, FLAGGED, OR PART OF A VOLUME IS
- * TREATED AS THE START OF A NEW VOLUME, AND PROPERLY LINKED
- * INTO THE CHAIN OF FREE VOLUMES.
- *
- * THE FOLLOWING SEQUENCE OF STEPS IS TAKEN TO ACHIEVE THE ABOVE:
- *
- * 1) DETERMINE IF THIS AU IS JUST AFTER A BOUNDARY POINT,
- * I.E., IT IS JUST AFTER THE LAST AU FOR SHORT OR LONG FILES.
- *
- * 2) IF A VOLUME OF FREE AU IS BEING ACCUMULATED, REDUCE THE
- * VOLUME LENGTH IF IT WOULD OTHERWISE INCLUDE AN AU WHICH
- * SHOULD NOT BE PART OF THE VOLUME.
- *
- * 3) IF THIS AU IS JUST AFTER A BOUNDARY POINT (SEE STEP 1),
- * - VERIFY THAT THE FREE VOLUME CHAIN IS TERMINATED WITH A
- * LINK=0.
- * - SAVE THE COUNT OF FREE AU IN THE *FCT* HEADER.
- * - IF AT START OF AU FOR LONG FILES, RESET COUNTERS.
- *
- * 4) IF THIS AU IS BUSY,
- * - SET A VARIABLE SO THAT ANY AU WHICH ARE CLAIMED TO
- * BE CONTINUATION AU ARE NOT TREATED AS AVAILABLE FOR
- * ALLOCATION REGARDLESS OF THEIR *FCT* ENTRY.
- * - LOOP TO EXAMINE THE NEXT AU.
- *
- * 5) IF THE AU IS PROTECTED (SEE STEP 4) OR FLAGGED, LOOP TO
- * EXAMINE THE NEXT AU.
- *
- * 6) PROCESS THE AU WHICH IS REALLY AVAILABLE FOR ALLOCATION.
- * - CLEAR CONTINUATION FLAG..FORCE A HEAD OF VOLUME STATUS.
- * - ADJUST IF NECESSARY THE FREE VOLUME LINKAGE TO POINT
- * TO THIS AU (VOLUME).
- * - SAVE LENGTH FIELD AS THE COUNT OF NUMBER OF EXPECTED
- * CONTINUATION AU.
- * - SAVE LINK FIELD AS THE NEXT EXPECTED FREE VOLUME.
- * - SAVE THE ID OF THIS VOLUME IN CASE ITS LENGTH HAS
- * TO BE REDUCED (SEE STEP 2), OR ITS LINK HAS TO BE
- * ADJUSTED (SEE ABOVE SUBSTEP).
- #
- FCT$FLAWS[0] = 0;
- PREVVOL = 0;
- NXTFREE = FCT$FAUSF[0];
- TOTAU = 0;
- VOLLN = 0;
- LASTBUSY = 0;
- DONE = FALSE;
- FOR THISAU = 1 STEP 1 WHILE NOT DONE
- DO
- BEGIN # THISAU LOOP #
- #
- * STEP 1 - DETERMINE IF AT A BOUNDARY POINT.
- #
- SETFCTX(THISAU);
- DONE = THISAU GR FCT$AVOT[0];
- ATBNDRY = (THISAU EQ FCT$CDP[0]) OR DONE;
- #
- * STEP 2 - IF IN A SEQUENCE OF CONTINUATION AU, VERIFY THAT
- * THIS AU CAN BE INCLUDED. IF NOT, CORRECT VOLUME LENGTH.
- #
- IF VOLLN NQ 0
- THEN
- BEGIN # STEP 2 #
- FCT$CLFG(0,0) = FCT$CLFG(FWD,FPS);
- FCT$CAUF(0,0) = 1-FCT$CAUF(0,0);
- IF (FCT$FLGS1(0,0) EQ 0) ##
- AND NOT ATBNDRY
- THEN # AU IS OK AS A CONTINUATION AU #
- BEGIN
- TOTAU = TOTAU + 1;
- FCT$CLFG(FWD,FPS) = 0;
- FCT$CAUF(FWD,FPS) = 1;
- FCT$LEN(FWD,FPS) = VOLLN - 1;
- FCT$LINK(FWD,FPS) = PREVVOL;
- VOLLN = VOLLN - 1;
- TEST THISAU;
- END
- ELSE # TERMINATE THIS VOLUME AND ADJUST
- ITS LENGTH #
- BEGIN
- SETFCTX(PREVVOL);
- FCT$LEN(FWD,FPS) = FCT$LEN(FWD,FPS) - VOLLN;
- VOLLN = 0;
- END
- END # STEP 2 #
- #
- * STEP 3 - PROCESS BOUNDARY CONDITION.
- #
- IF ATBNDRY
- THEN
- BEGIN # STEP 3 #
- SETFCTX(PREVVOL);
- IF NXTFREE NQ 0
- THEN # SET LINK TO ZERO #
- BEGIN
- FCT$LINK(FWD,FPS) = 0;
- END
- IF DONE
- THEN # FINISHED AU FOR LONG FILES #
- BEGIN
- AST$AULF[FCTX] = TOTAU;
- IF FCT$FAULF[0] EQ 0
- THEN
- BEGIN
- AST$AULF[FCTX] = 0;
- END
- TEST THISAU;
- END
- ELSE # FINISHED AU FOR SHORT FILES #
- BEGIN
- AST$AUSF[FCTX] = TOTAU;
- TOTAU = 0;
- PREVVOL = 0;
- NXTFREE = FCT$FAULF[0];
- END
- END # STEP 3 #
- #
- * STEP 4 - PROCESS AU BUSY.
- #
- SETFCTX(THISAU);
- IF FCT$FBF(FWD,FPS) EQ 1
- THEN # AU IS BUSY, PROTECT ALL AU
- COVERED BY LENGTH FIELD #
- BEGIN
- TEMP = THISAU + FCT$LEN(FWD,FPS);
- IF TEMP GR LASTBUSY
- THEN
- BEGIN
- LASTBUSY = TEMP;
- END
- TEST THISAU;
- END
- #
- * STEP 5 - SKIP ANY AU THAT ARE PROTECTED OR FLAGGED.
- #
- FCT$CAUF(FWD,FPS) = 0; # CLEAR CONTINUATION AU FLAG #
- IF FCT$FAUF(FWD,FPS) NQ 0
- THEN # COUNT FLAWED AU #
- BEGIN
- FCT$FLAWS[0] = FCT$FLAWS[0] + 1;
- END
- IF THISAU LQ LASTBUSY ##
- OR (FCT$FLGS1(FWD,FPS) NQ 0)
- THEN
- BEGIN
- TEST THISAU;
- END
- #
- * STEP 6 - ENSURE THE VOLUME HEADED BY THIS AU IS IN THE
- * FREE SPACE CHAIN.
- * - IF THE NEXT EXPECTED FREE VOLUME (*NXTFREE*)
- * IS BEYOND THIS AU, INSERT THIS AU IN THE MIDDLE
- * OF THE CHAIN.
- * - IF THE NEXT EXPECTED FREE VOLUME IS PRIOR TO THIS
- * AU, CORRECT THE LINK FIELD OF THE PREVIOUS VOLUME
- * BY LINKING TO THIS AU.
- * - USE THE VOLUME LENGTH AND LINK FIELDS AS SPECIFIED
- * BY THIS AU-S *FCT* ENTRY. IF THEY ARE NOT CORRECT,
- * STEP 2 WILL REDUCE THE LENGTH, AND STEP 3 OR THIS
- * STEP WILL CORRECT THE LINK FIELD.
- #
- IF THISAU NQ NXTFREE
- THEN # NEED TO CORRECT LINKAGE #
- BEGIN # CORRECT LINKAGE #
- IF THISAU LS NXTFREE
- THEN # ADD THIS AU (VOLUME) TO CURRENT
- CHAIN #
- BEGIN
- FCT$LINK(FWD,FPS) = NXTFREE;
- END
- #
- * ADJUST LINK FIELD OF PREVIOUS ENTRY TO POINT TO THIS VOLUME.
- #
- IF PREVVOL EQ 0
- THEN # UPDATE FREE SPACE POINTERS #
- BEGIN
- IF THISAU LS FCT$CDP[0]
- THEN # UPDATE SHORT FILE POINTER #
- BEGIN
- FCT$FAUSF[0] = THISAU;
- END
- ELSE # UPDATE LONG FILE POINTER #
- BEGIN
- FCT$FAULF[0] = THISAU;
- END
- END
- ELSE # UPDATE PREVIOUS LINK #
- BEGIN
- SETFCTX(PREVVOL);
- FCT$LINK(FWD,FPS) = THISAU;
- END
- END # CORRECT LINKAGE #
- SETFCTX(THISAU);
- TOTAU = TOTAU + 1;
- PREVVOL = THISAU;
- NXTFREE = FCT$LINK(FWD,FPS);
- VOLLN = FCT$LEN(FWD,FPS);
- TEST THISAU;
- END # THISAU LOOP #
- FCT$CLFG(0,0) = 0;
- RETURN;
- END # CRAST #
- TERM
- PROC GETRTP;
- # TITLE GETRTP - GETS AND PROCESSES RUN TIME PARAMETERS. #
- BEGIN # GETRTP #
- #
- ** GETRTP - GETS AND PROCESSES RUN TIME PARAMETERS.
- *
- * THIS ROUTINE WILL GET AND PROCESS THE TUNING PARAMETER
- * AND THE TRACE MODE PARAMETER.
- *
- * PROC GETRTP
- *
- * EXIT THE RUN TIME PARAMETERS HAVE BEEN PROCESSED.
- *
- * MESSAGE 1) EXEC ABORT - SYNTAX ERROR.
- *
- * 2) *Q* PARAMETER TOO LARGE -
- * MAXIMUM ALLOWABLE VALUE SUBSTITUTED.
- *
- * 3) *Q* PARAMETER TOO SMALL -
- * MINIMUM ALLOWABLE VALUE SUBSTITUTED.
- #
- #
- **** PROC GETRTP - XREF LIST BEGIN.
- #
- XREF
- BEGIN
- PROC EXTAB; # SETS UP PARAMETER LIST #
- PROC MESSAGE; # ISSUES MESSAGE TO DAYFILE #
- PROC XARG; # CRACK PARAMETER LIST #
- PROC XDXB; # CONVERT DECIMAL TO BINARY #
- END
- #
- **** PROC GETRTP - XREF LIST END.
- #
- DEF DEC$TYPE #1#; # DECIMAL TYPE CONVERSION #
- DEF QAVERAGE #10#; # AVERAGE TUNING PARAMETER VALUE #
- DEF QMAXIMUM #50#; # MAXIMUM TUNING PARAMETER VALUE #
- DEF QMINIMUM #6#; # MINIMUM TUNING PARAMETER VALUE #
- DEF SYNTAXOK #0#; # NO SYNTAX ERRORS #
- DEF LISTCON #0#; # DO NOT LIST COMDECKS #
- *CALL COMBFAS
- *CALL COMXCTF
- *CALL COMXEXP
- *CALL COMXINT
- *CALL,COMXJCA
- ITEM ARGLIST U; # ADDRESS OF ARGUMENT LIST #
- ITEM ARG$Q I; # INTEGER TUNING PARAMETER #
- ITEM DFLT B; # DEFAULT *Q* FLAG #
- ITEM FLAG U; # STATUS FLAG FOR ASARG #
- ITEM OPTION U; # OPTION TO SKIP PROGRAM NAME #
- #
- * MESSAGE BUFFER.
- #
- ARRAY MSGBUF[0:0] P(5);
- BEGIN # ARRAY MSGBUF #
- ITEM MSG$LINE C(00,00,40); # MESSAGE LINE #
- ITEM MSG$RZRO C(04,00,12); # ZERO BYE TERMINATOR #
- END # ARRAY MSGBUF #
- CONTROL EJECT;
- #
- * GET THE RUN TIME PARAMETERS.
- #
- EXTAB(ARGLIST); # SET UP ARGUMENT LIST #
- OPTION = 0; # SKIP OVER PROGRAM NAME #
- XARG(ARGLIST,OPTION,FLAG); # GET PARAMETERS #
- IF FLAG NQ SYNTAXOK
- THEN
- BEGIN # IF SYNTAX ERRORS DETECTED BY ASARG #
- MSG$LINE[0] = " EXEC ABORT - SYNTAX ERRORS. ";
- MESSAGE(MSGBUF[0],UDFL1); # ERROR MESSAGE TO DAYFILE #
- FATALERR = TRUE;
- RETURN;
- END # IF SYNTAX ERRORS DETECTED BY ASARG #
- #
- * CHANGE DISPLAY CODE *S* PARAMETER TO DECIMAL INTEGER. IF
- * *S* PARAMETER IS NOT FOUND ON CONTROL COMMAND, *ARG$S*
- * WILL BE SET TO -1.
- #
- XDXB(ARG$SC[0],DEC$TYPE,ARG$S);
- #
- * SET THE SMALLEST *HLRQ* COUNT.
- #
- Q = MAXSMUNIT * 2; # SET MAXIMUN AND DEFAULT *HLRQ* COUNT #
- IF MIMHLRQ LS Q
- THEN
- BEGIN # FORCE THE SMALLEST *HLRQ* COUNT #
- Q = MIMHLRQ;
- END
- #
- * SET *RA$TRACE* TO *TRUE* IF *TM* PARAMETER SPECIFIED.
- #
- RA$TRACE = (ARG$T NQ -1);
- RETURN;
- END # GETRTP #
- TERM
- PROC GETUDT;
- # TITLE GETUDT - DETERMINES THE PROPERTIES OF THE CONFIGURATION. #
- BEGIN # GETUDT #
- #
- ** GETUDT - DETERMINES THE PROPERTIES OF THE CONFIGURATION.
- *
- * THIS ROUTINE WILL INITIALIZE VARIABLES DEFINING THE
- * CONFIGURATION OF THE CONTROLLERS AND STORAGE MODULES.
- *
- * PROC GETUDT.
- *
- * ENTRY M860 HARDWARE CONFIGURATION EXISTS.
- *
- * EXIT CONFIGURATION INFORMATION HAS BEEN PROCESSED.
- *
- * MESSAGES 1) ATTACH ERROR - BUDT FILE BUSY.
- *
- * 2) ATTACH ERROR - BUDT FILE NOT FOUND.
- *
- * 3) BUDT CONTROLLER ENTRY COUNT EXCEEDED.
- *
- * 4) BUDT CONTROLLER TABLE READ ERROR.
- *
- * 5) BUDT READ ERROR.
- *
- * 6) BUDT SM ENTRY COUNT EXCEEDED.
- *
- * 7) BUDT SM TABLE READ ERROR.
- *
- * 8) EST ORDINAL XX - NO UDT ENTRY.
- *
- * 9) EST READ ERROR.
- *
- * 10) EST/UDT CHANNEL MISMATCH.
- *
- * 11) MORE CHANNELS THAN MSG FETS.
- *
- * 12) VERIFY ERROR ON EST ENTRY XX.
- *
- * NOTES *INITTAB* MUST BE CALLED BEFORE *GETUDT* SO THAT AN
- * I/O BUFFER IS AVAILABLE TO READ THE BUDT INTO
- * *SSEXEC*.
- *
- * *KINIT* MUST BE CALLED BEFORE *GETUDT* SO THAT A
- * K-DISPLAY MESSAGE CAN BE ISSUED ALLOWING THE OPERATOR
- * TO RUN *SSALTER* TO MODIFY THE UDT.
- *
- * THE *UCP* INTERFACE MUST BE INITIALIZED BEFORE
- * *GETUDT* IS CALLED SO THAT *SSALTER* MAY BE RUN.
- #
- #
- **** PROC GETUDT - XREF LIST BEGIN.
- #
- XREF
- BEGIN
- PROC ATTACH; # ATTACH FILE #
- PROC BZFILL; # BLANK OR ZERO FILLS #
- PROC PFD; # PFM ENTRY #
- PROC SETPFP; # SETS USER INDEX AND FAMILY #
- PROC MESSAGE; # CALLS *MESSAGE* MACRO #
- PROC RDEST; # READ EST ENTRIES #
- PROC READ; # READS FILE TO I/O BUFFER #
- PROC READW; # READS FILE TO WORKING BUFFER #
- PROC RETERN; # RETURNS FILE #
- PROC RTIME; # GET REAL TIME #
- FUNC XCOD C(10); # CONVERT OCTAL TO DISPLAY #
- PROC ZSETFET; # SETS UP *FET* #
- END
- #
- **** PROC GETUDT - XREF LIST END.
- #
- DEF CNTYPE #"SS"#; # CONTROLLER TYPE #
- DEF DOWNSTATUS #3#; # CONTROLLER EST *DOWN* STATUS #
- DEF ESTCHAN(CUO,UCHO) #B<13+(UCHO*6),5>EST$WORD[0]#;
- # EST CHANNEL #
- DEF ESTON(UCHO) # B<12+(UCHO*6),1>EST$WORD[0]#;
- # EST CHANNEL STATUS #
- DEF FILLSIZE #7#; # FILL SIZE FOR *BZFILL* #
- DEF FIRSTCHAN #1#; # PRIMARY EST CHANNEL INDEX #
- DEF IDLESTATUS #1#; # CONTROLLER EST *IDLE* STATUS #
- DEF OFFSTATUS #2#; # CONTROLLER EST *OFF* STATUS #
- DEF ONSTATUS #0#; # CONTROLLER EST *ON* STATUS #
- DEF READMODE #1#; # READ MODE FOR ATTACH #
- DEF UDTEX(CUO,CIFO) #B<CIFO,1>UD$CHEX[CUO]#;
- # SET IF CHANNEL EXISTS #
- DEF LISTCON #0#; # DO NOT LIST COMDECKS #
- *CALL COMBFAS
- *CALL COMBBZF
- *CALL COMBCMD
- *CALL COMBCPR
- *CALL,COMBFET
- *CALL COMBKDD
- *CALL COMBMAT
- *CALL,COMBPFP
- *CALL COMBPFS
- *CALL COMBUCR
- *CALL COMBUDT
- *CALL COMSPFM
- *CALL COMXBST
- *CALL COMXCTF
- *CALL COMXINT
- *CALL COMXJCA
- ITEM BITMAPPOS U; # BIT POSITION IN EST ORD BIT MAP #
- ITEM BITMAPWORD U; # EST ORDINAL BIT MAP WORD #
- ITEM BUFL U; # I/O BUFFER LENGTH #
- ITEM DESIREDORD I; # EST ORD TO CHECK IN BIT MAP #
- ITEM ESTNUM U; # COUNT OF EST ENTRIES READ #
- ITEM ESTORD C(10); # DISPLAY CODE EST ORDINAL #
- ITEM NUM I; # NUMBER OF EST ENTRIES #
- ITEM FETL U; # TEMP BUFFER FET LENGTH #
- ITEM FOUND B; # SET IF EST/UDT MATCH FOUND #
- ITEM I U; # INDEX #
- ITEM J U; # INDEX #
- ITEM K I; # INDEX #
- ITEM LFN C(7); # BUDT LOCAL FILENAME #
- ITEM PASSWORD C(7); # BUDT FILE PASSWORD #
- ITEM STAT U; # FUNCTION RETURN STATUS #
- ITEM TMPCCNT U; # TEMP CHANNEL COUNT #
- #
- * ARRAY TO MARK SS-TYPE EQUIPMENT.
- #
- ARRAY EQBITS [0:8] S(9);
- BEGIN
- ITEM EQUSED U(00,00,60); # BIT MAP WORD #
- END
- #
- * EST BUFFER.
- #
- ARRAY ESTB [0:0] S(2);
- BEGIN # EST #
- ITEM EST$WORD U(00,00,60); # EST WORD #
- ITEM EST$STAT U(00,10,02); # CONTROLLER STATUS #
- ITEM EST$CHBDWN B(00,12,01); # CHANNEL *B* DOWN #
- ITEM EST$CHB U(00,13,05); # CHANNEL *B* #
- ITEM EST$CHADWN B(00,18,01); # CHANNEL *A* DOWN #
- ITEM EST$CHA U(00,19,05); # CHANNEL *A* #
- ITEM EST$CHDDWN B(00,24,01); # CHANNEL *D* DOWN #
- ITEM EST$CHD U(00,25,05); # CHANNEL *D* #
- ITEM EST$CHCDWN B(00,30,01); # CHANNEL *C* DOWN #
- ITEM EST$CHC U(00,31,05); # CHANNEL *C* #
- ITEM EST$CONT U(00,37,11); # CONTROLLER TYPE #
- ITEM EST$CNCT U(00,48,03); # CONNECT CODE #
- END # EST #
- #
- * UDT CHANNEL ARRAY.
- #
- ARRAY UDTCH [0:MAX$CH] S(1);
- BEGIN
- ITEM UDTCWORD U(00,00,06); # CHANNEL WORD #
- ITEM UDTBSTAT B(00,00,01); # CHANNEL STATUS (BOOLEAN) #
- ITEM UDTSTAT U(00,00,01); # CHANNEL STATUS #
- ITEM UDTCHAN U(00,01,05); # CHANNEL NUMBER #
- END
- #
- * *MISSING UDT ENTRY* ERROR MESSAGE BUFFER.
- #
- ARRAY MISMB [0:0] S(4);
- BEGIN # MESSAGE BUFFER #
- ITEM MIS$1 C(00,00,13) = [" EST ORDINAL "];
- ITEM MIS$NUM U(01,18,24); # EST ORDINAL #
- ITEM MIS$2 C(01,42,16) = [" - NO UDT ENTRY."];
- ITEM MIS$ZRO U(03,18,42) = [0]; # ZERO-BYTE TERMINATOR #
- END # MESSAGE BUFFER #
- #
- * GENERAL ERROR MESSAGE BUFFER.
- #
- ARRAY MSGMB [0:0] S(5);
- BEGIN # MESSAGE BUFFER #
- ITEM MSG$LINE C(00,00,40); # MESSAGE LINE #
- ITEM MSG$ZRO U(04,00,12) = [0]; # ZERO-BYTE TERMINATOR #
- END # MESSAGE BUFFER #
- #
- * *VERIFY* ERROR MESSAGE BUFFER.
- #
- ARRAY VERMB [0:0] S(4);
- BEGIN # MESSAGE BUFFER #
- ITEM VER$1 C(00,00,27) = [" VERIFY ERROR ON EST ENTRY "];
- ITEM VER$NUM C(02,42,24); # EST ORDINAL #
- ITEM VER$2 C(03,06,06) = ["."];
- ITEM VER$ZRO U(03,12,48) = [0]; # ZERO-BYTE TERMINATOR #
- END # MESSAGE BUFFER #
- CONTROL EJECT;
- #
- * READ BUDT INTO TEMPORARY BUFFER.
- #
- LFN = BUDT;
- PASSWORD = BUDTPW;
- BZFILL(LFN,TYPFILL"ZFILL",FILLSIZE); # CLEAR FILENAME #
- BZFILL(PASSWORD,TYPFILL"ZFILL",FILLSIZE); # CLEAR PASSWORD #
- PFP$UI = DEF$UI; # SET *SETPFP* PARAMETERS #
- PFP$FAM = FAM$NAME[DEFAULTORD];
- PFP$FG1 = TRUE;
- PFP$FG4 = TRUE;
- SETPFP(PFP[0]); # SET USER INDEX AND FAMILY #
- #
- * TRY ATTACHING BUDT FILE 10 TIMES BEFORE TERMINATING.
- #
- SLOWFOR I = 0 STEP 1 UNTIL 10
- DO
- BEGIN
- PFD("ATTACH",LFN,0,"PW",PASSWORD,"RC",PFSTAT,"NA",0,"UP",0,0);
- IF PFSTAT EQ OK
- THEN
- BEGIN # BUDT ATTACHED #
- GOTO ENDCON;
- END
- END # ATTACH BUDT LOOP #
- ENDCON:
- IF PFSTAT NQ OK
- THEN # PROCESS ATTACH ERROR #
- BEGIN # ABORT #
- MSG$LINE[0] = " ATTACH ERROR - BUDT FILE BUSY.";
- IF PFP$STAT[0] NQ FBS
- THEN # BUDT FILE NOT FOUND #
- BEGIN # NOT FOUND #
- MSG$LINE[0] = " ATTACH ERROR - BUDT FILE NOT FOUND.";
- END # NOT FOUND #
- GOTO GETUDT1;
- END # ABORT #
- BUFL = MAT$SPACE[MAT$ENTRY"TEMP$BUF"];
- FETL = MAT$SPACE[MAT$ENTRY"TEMP$FET"];
- ZSETFET(TFETADR,LFN,TBUFADR,BUFL,FETL);
- READ(TFET,RCL); # READ BUDT WITH AUTO-RECALL #
- #
- * READ BUDT FROM TEMPORARY BUFFER INTO UDT SPACE.
- #
- P<UDT$WORD> = UDTCADR;
- READW(TFET,UDT$WORD,1,STAT);
- IF STAT NQ OK
- THEN # READ COMPLETED WITH ERRORS #
- BEGIN # ABORT #
- MSG$LINE[0] = " BUDT READ ERROR.";
- GOTO GETUDT1;
- END # ABORT #
- IF UDT$LINE$CUN[0] GR MAXCTN
- THEN # CONTROLLER TABLE TOO LARGE #
- BEGIN # ABORT #
- MSG$LINE[0] = " BUDT CONTROLLER ENTRY COUNT EXCEEDED.";
- GOTO GETUDT1;
- END # ABORT #
- IF UDT$LINE$SMN[0] GR MAXSM
- THEN # SM TABLE TOO LARGE #
- BEGIN # ABORT #
- MSG$LINE[0] = " BUDT SM ENTRY COUNT EXCEEDED.";
- GOTO GETUDT1;
- END # ABORT #
- UDT$WORDCNT[0] = MAT$SPACE[MAT$ENTRY"UDT$CONT"]
- + MAT$SPACE[MAT$ENTRY"UDT$SM"];
- READW(TFET,UDT$CN,UDTCUL,STAT); # STORE CU TABLE #
- IF STAT NQ OK
- THEN # READ COMPLETED WITH ERRORS #
- BEGIN # ABORT #
- MSG$LINE[0] = " BUDT CONTROLLER TABLE READ ERROR.";
- GOTO GETUDT1;
- END # ABORT #
- READW(TFET,UDT$SMA,UDTSML,STAT); # STORE *SM* TABLE #
- IF STAT NQ OK
- THEN # READ COMPLETED WITH ERRORS #
- BEGIN # ABORT #
- MSG$LINE[0] = " BUDT SM TABLE READ ERROR.";
- GOTO GETUDT1;
- END # ABORT #
- RETERN(TFET,RCL); # RETURN BUDT WITH AUTO-RECALL #
- RETERN(TFET,RCL);
- #
- * INITIALIZE UDT CONTROLLER AND SM ENTRIES.
- #
- SLOWFOR I = 1 STEP 1 UNTIL 9
- DO # PRESET EST ORDINAL BIT MAP #
- BEGIN # PRESET #
- EQUSED[I] = 0;
- END # PRESET #
- MAX$ACHN = 0; # PRESET ACTIVE CHANNEL COUNT #
- SLOWFOR I = 1 STEP 1 WHILE UD$EXIST[I] AND I LQ MAXCTN
- DO # PRESET CONTROLLER ENTRIES #
- BEGIN # PRESET #
- NUM = 1;
- ESTNUM = UD$ESTO[I];
- RDEST(ESTB,NUM,ESTNUM); # READ EST ENTRY #
- IF NUM NQ 1
- THEN # ABORT ON READ ERROR #
- BEGIN
- MSG$LINE[0] = "EST READ ERROR.";
- GOTO GETUDT1;
- END
- IF EST$CONT[0] NQ CNTYPE # CONTROLLER TYPE MISMATCH #
- OR EST$CNCT[0] NQ UD$CUDA[I] # CONNECT MISMATCH #
- THEN # CONTROLLER ENTRY IS INCORRECT #
- BEGIN # ABORT #
- ESTORD = XCOD(UD$ESTO[I]); # SET EST ORDINAL IN MESSAGE #
- VER$NUM[0] = C<6,4>ESTORD;
- MESSAGE(VERMB,SYSUDF1);
- FATALERR = TRUE;
- RETURN;
- END # ABORT #
- UD$CUON[I] = EST$STAT[0] EQ ONSTATUS # MOVE CU STATUS #
- OR EST$STAT[0] EQ IDLESTATUS;
- UDTCWORD[0] = UD$CHANA[I]; # COPY UDT CHANNEL INFO #
- UDTCWORD[1] = UD$CHANB[I];
- UDTCWORD[2] = UD$CHANC[I];
- UDTCWORD[3] = UD$CHAND[I];
- TMPCCNT = 0; # PRESET TEMP CHANNEL COUNT #
- SLOWFOR J = 0 STEP 1 UNTIL MAX$CH
- DO # SCAN EST ENTRY FOR CHANNELS #
- BEGIN # SCAN EST #
- IF J EQ FIRSTCHAN # IN CASE CHANNEL 0 #
- OR ESTCHAN(I,J) NQ 0
- THEN # EST CHANNEL FOUND #
- BEGIN # FOUND #
- FOUND = FALSE;
- SLOWFOR K = 0 STEP 1 UNTIL MAX$CH
- DO # SCAN ARRAY FOR CHANNEL MATCH #
- BEGIN # SCAN UDT #
- IF UDTEX(I,K) NQ 0 # UDT CHANNEL FOUND #
- AND ESTCHAN(I,J) EQ UDTCHAN[K] # CHANNELS MATCH #
- THEN # MOVE CHANNEL STATUS TO UDT #
- BEGIN # STATUS #
- FOUND = TRUE;
- MAX$ACHN = MAX$ACHN + UDTSTAT[K]; # COUNT CHANNELS #
- TMPCCNT = TMPCCNT + 1;
- IF ESTON(J) EQ 1
- THEN # CHANNEL OFF IN EST #
- BEGIN # OFF #
- UDTBSTAT[K] = FALSE; # TURN OFF CHANNEL IN UDT #
- END # OFF #
- END # STATUS #
- END # SCAN UDT #
- IF NOT FOUND
- THEN # CHANNEL MISMATCH #
- BEGIN # ABORT #
- GOTO GETUDT2;
- END # ABORT #
- END # FOUND #
- END # SCAN EST #
- IF TMPCCNT NQ (UDTEX(I,0) + UDTEX(I,1) +
- UDTEX(I,2) + UDTEX(I,3))
- THEN # CHANNEL MISMATCH #
- BEGIN # ABORT #
- GOTO GETUDT2;
- END # ABORT #
- UD$CHANA$O[I] = UDTBSTAT[0]; # COPY CHANNEL STATUSES TO UDT #
- UD$CHANB$O[I] = UDTBSTAT[1];
- UD$CHANC$O[I] = UDTBSTAT[2];
- UD$CHAND$O[I] = UDTBSTAT[3];
- P<UDT$MSG> = LOC(UD$MSG[I]);
- MS$MSQN$CN[0] = I; # STORE CONTROLLER ORDINAL #
- BITMAPWORD = UD$ESTO[I]/60;
- BITMAPPOS = UD$ESTO[I] - (BITMAPWORD * 60);
- B<BITMAPPOS,1>EQUSED[BITMAPWORD] = 1; # NOTE ORD PROCESSED #
- END # PRESET #
- SLOWFOR I= 1 STEP 1 UNTIL MAX$ACHN
- DO
- BEGIN
- BST$AUTH[I] = TRUE;
- END
- SLOWFOR BITMAPWORD = 0 STEP 1 WHILE NUM EQ 1
- DO # FIND UNUSED M860 EST ENTRIES #
- BEGIN # FIND #
- SLOWFOR BITMAPPOS = 0 STEP 1 UNTIL 59
- DO # SCAN EST ORDINAL BIT MAP WORD #
- BEGIN # WORD #
- DESIREDORD = BITMAPPOS + (BITMAPWORD * 60);
- IF DESIREDORD EQ 0
- THEN # AVOID READING ENTIRE EST #
- BEGIN # SKIP #
- TEST BITMAPPOS; # ONLY READ INDIVIDUAL ENTRIES #
- END # SKIP #
- NUM = 1;
- RDEST(ESTB,NUM,DESIREDORD);
- IF NUM NQ 1
- THEN # EST ORDINAL NON-EXISTENT #
- BEGIN # END #
- TEST BITMAPWORD; # REACHED END OF EST #
- END # END #
- IF EST$CONT[0] EQ CNTYPE
- AND B<BITMAPPOS,1>EQUSED[BITMAPWORD] EQ 0
- THEN # UNPROCESSED ENTRY FOUND #
- BEGIN # MESSAGE #
- ESTORD = XCOD(DESIREDORD); # SET EST ORDINAL IN MESSAGE #
- MIS$NUM[0] = C<6,4>ESTORD;
- MESSAGE(MISMB,SYSUDF1);
- END # MESSAGE #
- END # WORD #
- END # FIND #
- SLOWFOR I = 1 STEP 1 WHILE SM$EXIST[I] AND I LQ MAXSMUNIT
- DO # PRESET SM ENTRIES #
- BEGIN # PRESET #
- P<UDT$MSG> = LOC(D0$MSG[I]);
- MS$MSQN$CN[0] = I; # STORE SM ORDINAL #
- MS$MSQN$D0[0] = TRUE; # SET DRD 0 FLAG #
- P<UDT$MSG> = LOC(D1$MSG[I]);
- MS$MSQN$CN[0] = I; # STORE SM ORDINAL #
- MS$MSQN$D1[0] = TRUE; # SET DRD 1 FLAG #
- END # PRESET #
- #
- * INITIALIZE MESSAGE READ AND WRITE BUFFER FETS.
- #
- P<FETMWB> = MWRBADR + 1; # ALLOW FOR READ BUFFER PTR #
- P<FETMRB> = MRDBADR;
- SLOWFOR I = 1 STEP 1 WHILE UD$EXIST[I] AND (I LQ MAXCTN)
- DO # CHECK UDT CHANNELS #
- BEGIN # CHECK #
- CHT$WORD[0] = UD$CHANA[I]; # PRESET TEMPORARY CHANNEL ARRAY #
- CHT$WORD[1] = UD$CHANB[I];
- CHT$WORD[2] = UD$CHANC[I];
- CHT$WORD[3] = UD$CHAND[I];
- SLOWFOR J = 0 STEP 1 WHILE J LQ MAX$CIF
- DO # FIND ON CHANNELS #
- BEGIN # FIND #
- IF CHT$ON[J]
- AND (CHT$CHAN[J] NQ 0 OR J EQ 0)
- THEN # INITIALIZE ASSOCIATED MSG FETS #
- BEGIN # INITIALIZE #
- IF P<FETMWB> GQ (MWRBADR + MAT$SPACE[MAT$ENTRY"MW$BUFS"])
- THEN # MORE CHANNELS THAN MSG FETS #
- BEGIN # ABORT #
- MSG$LINE[0] = " MORE CHANNELS THAN MSG FETS.";
- GOTO GETUDT1;
- END # ABORT #
- P<FETMRA> = P<FETMWB> - 1;
- FRA$MRBADR[0] = P<FETMRB>; # MESSAGE READ BUFFER ADDRESS #
- FMW$FIRST[0] = P<FETMWB> + SFMWL; # PRESET WRITE BUFFER #
- FMW$IN[0] = FMW$FIRST[0];
- FMW$OUT[0] = FMW$FIRST[0];
- FMW$CHAN[0] = CHT$CHAN[J];
- FMW$CHON[0] = TRUE;
- FMW$LIMIT[0] = FMW$FIRST[0] + MWBUFL;
- FMR$CU[0] = I; # PRESET READ BUFFER #
- FMR$FIRST[0] = P<FETMRB> + SFMRL;
- FMR$IN[0] = FMR$FIRST[0];
- FMR$OUT[0] = FMR$FIRST[0];
- FMR$CHAN[0] = CHT$CHAN[J];
- FMR$CIF[0] = J;
- FMR$LIMIT[0] = FMR$FIRST[0] + MRBUFL;
- P<KWORD> = LOC(FMR$KWORDS[0]); # PRESET K-DISPLAY WORDS #
- KW$COMP[0] = TRUE;
- P<MWBTMP> = LOC(UD$CAMF[I]);
- MWB$ADDR[J] = P<FETMWB>; # SET FET ADDRESS IN CU ORDINAL #
- P<FETMWB> = P<FETMWB> + SFMWL + MWBUFL + 1; # NEXT FETS #
- P<FETMRB> = P<FETMRB> + SFMRL + MRBUFL;
- END # INITIALIZE #
- END # FIND #
- END # CHECK #
- RETURN;
- GETUDT2:
- MSG$LINE[0] = " EST/UDT CHANNEL MISMATCH.";
- GETUDT1:
- MESSAGE(MSGMB,SYSUDF1); # ABORT PROCESSING #
- FATALERR = TRUE;
- RETURN;
- END # GETUDT #
- TERM
- PROC INITDAM;
- # TITLE INITDAM - INITIALIZE *TDAM* INTERFACE. #
- BEGIN # INITDAM #
- #
- *** INITDAM - INITAILIZE *TDAM* INTERFACE.
- *
- * THIS ROUTINE WILL INITIALIZE THE *TDAM* INTERFACE
- * AND ISSUE AN EVENT TO SWAP IN THE JOBS WAITING FOR *MSAS*.
- * PROC INITDAM.
- *
- * ENTRY *SSEXEC* HAS BEEN INITIALIZED AND READY TO BE
- * CALLED BY WAITING JOBS.
- *
- * EXIT *TDAM* INTERFACE HAS BEEN INITIALIZED AND
- * EVENT TO SWAP IN WAITING JOBS HAS BEEN ISSUED.
- #
- #
- **** PROC INITDAM - XREF LIST BEGIN.
- #
- XREF
- BEGIN
- PROC EESET; # ENTERS EVENT IN EVENT TABLE #
- PROC SYSTEM; # CALLS *SYSTEM* MACRO #
- PROC ZFILL; # ZERO FILLS BUFFER #
- END
- #
- **** PROC INITDAM - XREF LIST END.
- #
- DEF NO$EQUIP #0#; # NO EQUIPMENT VALUE #
- DEF LISTCON #0#; # DO NOT LIST COMDECKS #
- *CALL COMBFAS
- *CALL,COMBCDD
- *CALL COMBTDM
- *CALL COMBUDT
- *CALL COMXCTF
- *CALL COMXINT
- *CALL,COMXJCA
- ITEM I U; # INDEX #
- #
- * INITIALIZE *TDAM* INTERFACE AND ISSUE EVENT TO SWAP IN JOBS
- * WAITING FOR *MSAS*.
- #
- P<TDAM> = LOC(RA$TDAM);
- ZFILL(TDAM,TDAMLEN);
- EESET$EQ[0] = NO$EQUIP; # USE NO EQUIPMENT VALUE #
- EESET(EVENT); # SET EVENT INTO EVENT TABLE #
- #
- * PRESET ALL PP CALL BLOCK ENTRIES.
- #
- SLOWFOR I = 1 STEP 1 UNTIL PPCBTSIZE
- DO # SET PARAMETER WORD ADDRESS #
- BEGIN # SET ADDRESS #
- PPU$1SS[I] = "1SS";
- PPU$PADDR[I] = LOC(PPU$WORD1[I]);
- PPU$DRCL[I] = LOC(DRVRRECALL);
- END # SET ADDRESS #
- PPU$FC[1] = IRTDAM;
- PPCBENCNT = PPCBENCNT+1; # INCREMENT PPCALL COUNT #
- SPC$SPC[0] = "SPC";
- SPC$ADDR[0] = LOC(PPTMP);
- PPT$WORD0[0] = PPU$WORD0[1];
- SLOWFOR I = 0 WHILE PPT$WORD0[0] NQ 0
- DO
- BEGIN
- SYSTEM(SPC,RCL);
- END
- END # INITDAM #
- TERM
- PROC INITFAM;
- # TITLE INITFAM - INITIALIZES SUBFAMILY PARAMETERS. #
- BEGIN # INITFAM #
- #
- ** INITFAM - INITIALIZES SUBFAMILY PARAMETERS.
- *
- * PROC INITFAM.
- #
- #
- **** PROC INITFAM - XREF LIST BEGIN.
- #
- XREF
- BEGIN
- PROC ABORT; # CALLS *ABORT* MACRO #
- PROC BZFILL; # BLANK OR ZERO FILLS #
- PROC GETFAM; # GETS TABLE OF FAMILIES #
- PROC MESSAGE; # CALLS *MESSAGE* MACRO #
- PROC PFD; # PERMANENT FILE REQUEST DELAYS #
- PROC RETERN; # RETURNS FILE #
- PROC RMVBLNK; # REMOVE MULTIPLE BLANKS #
- PROC SETPFP; # SETS USER INDEX AND FAMILY #
- FUNC XCOD I; # CHANGES INTEGER TO DISPLAY #
- PROC XWOD; # CHANGES INTEGER TO OCTAL #
- PROC ZSETFET; # SETS UP *FET* #
- END
- #
- **** PROC INITFAM - XREF LIST END.
- #
- DEF FILLSIZE #7#; # FILL SIZE FOR *BZFILL* #
- DEF NUM$MST #4#; # NUMBER OF *MSA-S* #
- DEF LISTCON #0#; # DO NOT LIST COMDECKS #
- *CALL COMBFAS
- *CALL COMBBZF
- *CALL COMBPFP
- *CALL COMBPFS
- *CALL COMBUDT
- *CALL COMXCTF
- *CALL COMXINT
- *CALL COMXMSC
- *CALL COMSPFM
- ITEM ATLEASTONE B; # AT LEAST ONE FOUND FLAG #
- ITEM BADNUM U; # BAD FILE INDEX #
- ITEM BLKFILL S:TYPFILL = S"BFILL"; # BLANK FILL #
- ITEM BLKFOUND B; # BLANK FOUND FLAG #
- ITEM FOUND B; # ITEM FOUND FLAG #
- ITEM I U; # INDEX #
- ITEM J U; # INDEX #
- ITEM K U; # INDEX #
- ITEM MSGTEMP C(8); # ITEM FOR *BZFILL* #
- ITEM NUM$FAM U; # NUMBER OF *GETFAM* ENTRIES #
- ITEM UI U; # USER INDEX #
- #
- * ARRAY TO DISPLAY BAD FILE INFORMATION.
- #
- ARRAY BADFILE[0:MAXSF] P(3);
- BEGIN
- ITEM BAD$PFN C(00,00,07); # FILE NAME #
- ITEM BAD$FAM C(00,42,08); # FAMILY NAME #
- ITEM BAD$INDEX C(01,30,06); # USER INDEX #
- END
- #
- * ARRAY TO USER INDEX DISPLAY CODE.
- #
- ARRAY DIS[0:0] P(2);
- BEGIN
- ITEM DIS$UI C(01,24,06); # USER INDEX IN DISPLAY CODE #
- END
- #
- * ARRAY TO HOLD *SFMCAT* FILE NAME.
- #
- ARRAY CAT[0:0];
- BEGIN # CAT #
- ITEM CAT$PFN C(00,00,07) = ["SFMCAT "]; # FILE NAME #
- ITEM CAT$UNID C(00,36,01); # UNIQUE IDENTIFIER #
- END # CAT #
- #
- * MESSAGE BUFFER.
- #
- ARRAY MSGBUF[0:0] P(5);
- BEGIN # ARRAY MSGBUF #
- ITEM MSG$LINE C(00,00,40); # MESSAGE LINE #
- ITEM MSG$RZRO C(04,00,12); # ZERO BYE TERMINATOR #
- END # ARRAY MSGBUF #
- ARRAY SC$FET [0:0] P(SFETL);
- ;
- CONTROL EJECT;
- #
- * FUNCTION 2 - ANALYZE FAMILIES.
- *
- * FIND NUMBER AND NAMES OF FAMILIES WITH ALL SUBFAMILY CATALOGS.
- #
- NFAM = 1;
- SSID = ATAS;
- GETFAM(FAMT,NUM$FAM,LINK[0],DEFAULTORD,SSID);
- DEF$FAM = FAM$NAME[DEFAULTORD];
- #
- * ATTEMPT TO ATTACH EACH *SFMCAT* FILE FOR EACH FAMILY.
- * THE FOLLOWING ACTIONS WILL BE TAKEN DEPENDING ON THE NUMBER
- * OF FILES ATTACHED
- *
- * 1) IF NONE, DO NOTHING,
- * 2) IF EIGHT, SAVE THE FAMILY NAME,
- * 3) IF SOME BUT NOT EIGHT, ISSUE ERROR MESSAGE.
- #
- SLOWFOR I = 1 STEP 1 UNTIL NUM$FAM
- DO
- BEGIN # CHECK ALL FAMILIES FOR EIGHT CATALOGS #
- ATLEASTONE = FALSE; # AT LEAST ONE FOUND FLAG #
- FOUND = TRUE; # CATALOG FOUND FLAG #
- BADNUM = 0; # BAD FILE INDEX #
- SLOWFOR J = 0 STEP 1 UNTIL MAXSF
- DO
- BEGIN # CHECK CATALOG FOR EACH SUBFAMILY #
- PFP$UI = DEF$UI + J; # SET USER INDEX FOR *SETPFP* #
- PFP$FAM = FAM$NAME[I]; # SET FAMILY NAME FOR *SETPFP* #
- PFP$FG1 = TRUE; # SET FAMILY BIT FOR *SETPFP* #
- PFP$FG4 = TRUE; # SET INDEX BIT FOR *SETPFP* #
- SETPFP(PFP); # SET USER INDEX AND FAMILY #
- #
- * IF UNABLE TO DO A *SETPFP* ON A FAMILY, IGNORE CATALOG VALIDATION
- * AND CONTINUE WITH THE NEXT FAMILY.
- #
- IF PFP$STAT NQ 0
- THEN
- BEGIN
- TEST I; # NEXT FAMILY #
- END
- CAT$UNID[0] = XCOD(J); # CHANGE INDEX TO DISPLAY CODE #
- PFD("ATTACH",CAT$PFN,0,"RC", ##
- PFSTAT,"NA",0,"UP",0,0);
- IF PFSTAT EQ 0 OR PFSTAT EQ FBS
- THEN
- BEGIN # IF ATTACH SUCCESSFUL #
- ATLEASTONE = TRUE;
- END # IF ATTACH SUCCESSFUL #
- ELSE
- BEGIN # ERROR OTHER THAN FILE BUSY OR UTILITY ACTIVE #
- UI = DEF$UI + J;
- XWOD(UI,DIS);
- BAD$PFN[BADNUM] = CAT$PFN[0]; # SAVE FILE NAME #
- MSGTEMP = FAM$NAME[I];
- BZFILL(MSGTEMP,BLKFILL,FILLSIZE);
- BAD$FAM[BADNUM] = MSGTEMP; # SAVE FAMILY NAME #
- BAD$INDEX[BADNUM] = DIS$UI; # SAVE USER INDEX #
- BADNUM = BADNUM + 1; # INCREMENT COUNT #
- FOUND = FALSE; # CATALOG NOT ATTACHED #
- END # ERROR OTHER THAN FILE BUSY OR UTILITY ACTIVE #
- ZSETFET(LOC(SC$FET[0]),CAT$PFN,0,0,SFETL);
- RETERN(SC$FET[0],RCL);
- END # CHECK CATALOG FOR EACH SUBFAMILY #
- IF FOUND
- THEN
- BEGIN # IF EIGHT CATALOGS EXIST #
- NAMEFAM[NFAM] = FAM$NAME[I]; # SAVE FAMILY NAME #
- NFAM = NFAM + 1; # INCREMENT FAMILY COUNT #
- END # IF EIGHT CATALOGS EXIST #
- ELSE
- BEGIN # CHECK FOR AT LEAST ONE SUCCESSFUL ATTACH #
- IF ATLEASTONE
- THEN
- BEGIN # OUTPUT MESSAGE FOR EACH BAD FILE #
- SLOWFOR J = 0 STEP 1 WHILE J LS BADNUM
- DO
- BEGIN # FOR EACH BAD FILE #
- MSG$LINE[0] = " ATTACH ERROR ON SFM SUBFAMILY CATALOG.";
- MESSAGE(MSGBUF,UDFL1);
- MSGPFN[0] = BAD$PFN[J];
- MSGFAM[0] = BAD$FAM[J];
- MSGUI[0] = BAD$INDEX[J];
- MSG$LINE[0] = MSG$TEXT[0];
- RMVBLNK(MSGBUF[0],40);
- MESSAGE(MSGBUF,UDFL1);
- END # FOR EACH BAD FILE #
- END # OUTPUT MESSAGE FOR EACH BAD FILE #
- END # CHECK FOR AT LEAST ONE SUCCESSFUL ATTACH #
- END # CHECK ALL FAMILIES FOR EIGHT CATALOGS #
- NFAM = NFAM - 1; # SET FAMILY COUNT #
- #
- * SET THE FATAL ERROR FLAG IF THERE ARE NO FAMILIES WITH
- * EIGHT *SFM* CATALOGS.
- #
- IF NFAM EQ 0
- THEN
- BEGIN # NO FAMILY WITH 8 CATALOGS FOUND #
- FATALERR = TRUE;
- MSG$LINE[0] = " INITIALIZATION PROBLEMS -";
- MESSAGE(MSGBUF[0],UDFL1);
- MSG$LINE[0] = " NO FAMILY WITH 8 CATALOGS FOUND.";
- MESSAGE(MSGBUF[0],UDFL1);
- END # NO FAMILY WITH 8 CATALOGS FOUND #
- END # INITFAM #
- TERM
- PROC INITFLG;
- # TITLE INITFLG - INITIALIZES ASSORTED FLAGS AND COUNTERS. #
- BEGIN # INITFLG #
- #
- ** INITFLG - INITIALIZES ASSORTED FLAGS AND COUNTERS.
- *
- * THIS PROCEDURE WILL INITIALIZE ASSORTED FLAGS AND COUNTERS.
- *
- * PROC INITFLG.
- *
- * EXIT FLAGS HAVE BEEN INITIALIZED.
- #
- DEF LISTCON #0#; # DO NOT LIST COMDECKS #
- *CALL COMBFAS
- *CALL COMBCMD
- *CALL COMBLBL
- *CALL COMBMAT
- *CALL COMBUCR
- *CALL COMBUDT
- *CALL COMXBST
- *CALL COMXCTF
- *CALL COMXINT
- CONTROL EJECT;
- #
- * INITIALIZE FLAGS.
- #
- CURESERVED = FALSE; # CONTROLLER RESERVED FLAG #
- DRVRRECALL = FALSE; # DRIVER RECALL FLAG #
- DRYUP = FALSE; # DRY-UP FLAG #
- EXEC = TRUE; # MSAS EXECUTIVE FLAG #
- GLBINTLK = FALSE; # GLOBAL CATALOG INTERLOCK FLAG #
- GLBSTFL = TRUE; # GLOBAL STAGE FLAG #
- GLBDSFL = TRUE; # GLOBAL DESTAGE FLAG #
- GLBUCPSW = FALSE; # GLOBAL *UCP* SWAPPED FLAG #
- LABELBUSY = FALSE; # LABEL BUFFER BUSY FLAG #
- TERMINATE = FALSE; # TERMINATE FLAG #
- #
- * INITIALIZE COUNTS.
- #
- SMCNT = NSM; # NUMBER OF *SM-S* #
- FAMCNT = NFAM; # NUMBER OF FAMILIES #
- PPCBENCNT = 0; # CALL BLOCK ACTIVE ENTRY COUNT #
- #
- * INITIALIZE THRESHOLDS.
- #
- #
- * INITIALIZE DELAY EXPIRATION TIMES.
- #
- ITLK$EXPIR = 0; # RECLAIM CATALOG INTERLOCKS #
- MINQ$EXPIR = 0; # MINIMUM QUEUE DELAY EXPIRATION #
- KDIS$EXPIR = 0; # K-DISPLAY REFRESH #
- #
- * INITIALIZE ASSORTED POINTERS.
- #
- SFBLKPTR = LOC(SFPARMBLK);
- END # INITFLG #
- TERM
- PROC INITLZR;
- # TITLE INITLZR - SEQUENCES *SSEXEC-S* INITIALIZATION STEPS. #
- BEGIN # INITLZR #
- #
- *** INITLZR - SEQUENCES *SSEXEC-S* INITIALIZATION STEPS.
- *
- * THIS ROUTINE WILL MAKE CALLS TO SUBROUTINES AND MACROES TO
- * PERFORM ALL NON-HARDWARE INITIALIZATION STEPS FOR *SSEXEC*.
- *
- * PROC INITLZR.
- *
- * ENTRY CALLED FROM *SSEXEC*.
- *
- * EXIT PARAMETERS HAVE BEEN PROCESSED AND ALL NON-HARDWARE
- * INITIALIZATION STEPS HAVE BEEN EXECUTED OR THE FATAL
- * ERROR FLAG HAS BEEN SET.
- *
- * NOTES THIS INITIALIZATION ROUTINE MAKES PROCEDURE CALLS TO
- * DO THE FOLLOWING:
- *
- * 1) GET THE RUN TIME PARAMETERS,
- * 2) INITIALIZE SUBFAMILY PARAMETERS,
- * 3) INITIALIZE ASSORTED FLAGS,
- * 4) INITIALIZE ASSORTED TABLES,
- * 5) INITIALIZE FOR MULTI-MAINFRAMES,
- * 6) ADVISE SYSTEM OF KEYBOARD BUFFER,
- * 7) REQUEST ACTIVE SUBSYSTEM STATUS,
- * 8) INITIALIZE UDT INTERFACE,
- * 9) INITIALIZE *TDAM* INTERFACE.
- #
- #
- **** PROC INITLZR - XREF LIST BEGIN.
- #
- XREF
- BEGIN
- PROC CALLSS; # ISSUES REQUEST TO SUBSYSTEM #
- PROC GETMI; # GETS MACHINE INFORMATION #
- PROC GETRTP; # GETS RUN TIME PARAMETERS #
- PROC GETSPS; # GET SYSTEM ORIGIN PRIVILEDGES #
- PROC GETUDT; # GETS UNIT DEVICE TABLE #
- PROC INITDAM; # INITIALIZES *TDAM* INTERFACE #
- PROC INITFAM; # INITIALIZE SUBFAMILY PARAMETERS
- #
- PROC INITFLG; # INITIALIZES FLAGS #
- PROC OPENCAT; # OPEN CATALOGS AND MAPS #
- PROC INITSRP; # INITIALIZES FOR *MMF* MODE #
- PROC INITTAB; # INITIALIZES ASSORTED TABLES #
- PROC KINIT; # INITIALIZES *K* DISPLAY #
- PROC RTIME; # INTERFACE TO *RTIME* MACRO #
- END
- #
- **** PROC INITLZR - XREF LIST END.
- #
- DEF NOPARAM #-1#; # NO PARAMETER SPECIFIED #
- DEF SECOND #1#; # SWITCH FOR SECOND BUFFER #
- DEF SS$SYS #0#; # REQUEST SUBSYSTEM STATUS CODE #
- DEF RSLEN #1#; # RETURN USER STATUS #
- DEF LISTCON #0#; # DO NOT LIST COMDECKS #
- *CALL COMBFAS
- *CALL COMBCPR
- *CALL COMBUCR
- *CALL COMXCTF
- *CALL COMXEXP
- *CALL COMXINT
- *CALL,COMXJCA
- ITEM FAMSRP C(7); # FAMILY FOR *INITSRP* #
- ITEM MFINDEX U; # MACHINE INDEX FOR *INITSRP* #
- ITEM PBLOCK U = 0; # PARAMETER BLOCK #
- ITEM SS U; # SUBSYSTEM QUEUE PRIORITY #
- ARRAY SPSSTAT [0:0] S(RSLEN);
- BEGIN
- ITEM SPS$STATUS U(00,48,12); # RETURN STATUS #
- END
- CONTROL EJECT;
- #
- * READ AND SAVE RTIME.
- #
- RTIME(RTIMESTAT);
- FIRSTRTIME = RTIMSECS[0];
- #
- * CHECK SYSTEM ORIGIN PRIVILEDGES.
- #
- GETSPS(SPSSTAT);
- IF SPS$STATUS NQ 0
- THEN
- BEGIN
- FATALERR = TRUE;
- END
- #
- * SET UP *RA* POINTER.
- #
- P<RA$AREA> = 0;
- #
- * CALL *GETRTP* TO PROCESS RUN TIME PARAMETERS.
- #
- GETRTP;
- IF FATALERR
- THEN
- BEGIN # IF FATAL ERROR #
- RETURN;
- END # IF FATAL ERROR #
- #
- * CALL *INITFAM* TO INITIALIZE SUBFAMILY PARAMETERS.
- #
- INITFAM;
- IF FATALERR
- THEN
- BEGIN # IF FATAL ERROR #
- RETURN;
- END # IF FATAL ERROR #
- #
- * CALL *INITFLG* TO INITIALIZE ASSORTED FLAGS.
- #
- INITFLG;
- #
- * CALL *INITTAB* TO INITIALIZE ASSORTED TABLES.
- #
- INITTAB;
- IF FATALERR
- THEN
- BEGIN
- RETURN;
- END
- #
- * CALL *INITSRP* TO INITIALIZE FOR MULTI-MAINFRAMES.
- #
- GETMI(CMRINFO,EVENT);
- EESET$EVT = EESET$ASXE; # MSAS SET UP #
- EESET$ASXE = 0;
- IF ARG$SC EQ NOPARAM
- THEN
- BEGIN # *S* NOT SPECIFIED #
- FAMSRP = FAM$NAME[LINK$ORD[0]];
- MFINDEX = CMR$MFID[0];
- END # *S* NOT SPECIFIED #
- ELSE
- BEGIN # *S* PARAMETER SPECIFIED #
- FAMSRP = DEF$FAM;
- MFINDEX = ARG$S;
- END # *S* PARAMTER SPECIFIED #
- INITSRP(CMR$MID[0],MFINDEX,FAMSRP);
- #
- * CALL *KINIT* TO INITIALIZE *K* DISPLAY.
- #
- KINIT;
- #
- * CALL *CALLSS* MACRO TO REQUEST ACTIVE SUBSYSTEM STATUS AND
- * INITIALIZE RA.SSC AND *UCPPARMSW* FOR INCOMING *UCP* REQUESTS.
- * *UPCPARMSW* INDICATES WHICH BUFFER THE NEXT *UCP* REQUEST
- * WILL USE.
- #
- SS = SS$SYS; # REQUEST ACTIVE STATUS CODE #
- CALLSS(SS,PBLOCK,NRCL); # REQUEST ACTIVE STATUS #
- RA$SSWWRD[0] = 0;
- RA$SSCINLK = FALSE;
- RA$SSCPP = TRUE;
- RA$SSCXP = 0;
- RA$SSCVF = TRUE;
- RA$SSCLP = CPRLEN + 2;
- RA$SSCAP = LOC(PRAMUCP); # SET *UCP* PARAMETER ADDRESS #
- RA$SSPN = "SSEXEC";
- RA$SSCODE = SSID;
- UCPPARMSW = SECOND; # SET NEXT BUFFER SWITCH #
- #
- * CALL *GETUDT* TO INITIALIZE UDT INTERFACE.
- #
- GETUDT;
- IF FATALERR
- THEN
- BEGIN # IF FATAL ERROR #
- RETURN;
- END # IF FATAL ERROR #
- #
- * CALL OPENCAT TO INITIALIZE THE OCT AND OMT TABLES AND
- * TO FIND ANY DESCREPENCIES IN THE AST.
- #
- OPENCAT;
- #
- * INITIALIZE *TDAM* INTERFACE AND ISSUE EVENT TO SWAP IN JOBS
- * WAITING FOR *MSAS*.
- #
- INITDAM;
- END # INITLZR #
- TERM
- PROC INITSRP((MID),(MIDX),(LINKFAM));
- # TITLE INITSRP - INITIALIZE SLAVE REQUEST PROCESSOR. #
- BEGIN # INITSRP #
- #
- ** INITSRP - INITIALIZE THE SLAVE REQUEST PROCESSOR.
- *
- * *INITSRP* INITIALIZES THE *SSEXEC* FOR MULTIMAINFRAME
- * PROCESSING. IT WILL INITIALIZE THE *MTOS* FILE WHICH IS USED TO
- * COMMUNICATE WITH EACH *SLVEXEC*. IT WILL ALSO ATTACH IN
- * READ-ALLOW-MODIFY MODE THE *STOM* FILES FROM ALL POSSIBLE SLAVE
- * MAINFRAMES SO STAGING REQUESTS FROM *SLVEXEC* PROGRAMS CAN BE
- * ACCEPTED AND PROCESSED.
- *
- * PROC INITSRP((MID),(MIDX),(LINKFAM))
- *
- * ENTRY (MID) = 2 CHARACTER ID OF THE MASTER MAINFRAME.
- * (MIDX) = MACHINE INDEX (1-4) OF THE MASTER MAINFRAME.
- * (LINKFAM) = NAME OF THE FAMILY ON WHICH THE
- * COMMUNICATION FILES RESIDE, OR ARE TO
- * RESIDE.
- *
- * EXIT THE VARIABLES *STOM$EXPIR* AND *MTOS$EXPIR* (IN
- * *COMXCTF*) ARE INITIALIZED TO INDICATE THE TIMES WHEN
- * THE *STOM* FILES SHOULD BE MONITORED AND THE *MTOS*
- * FILE SHOULD BE UPDATED, RESPECTIVELY. IF THE
- * *SSEXEC* IS TO RUN IN SINGLE MAINFRAME MODE, THESE
- * TIMES ARE SET TO THE LARGEST POSSIBLE VALUE.
- *
- * NOTES THE *SSEXEC* WILL RUN IN SINGLE MAINFRAME MODE IF ANY
- * OF THE FOLLOWING CONDITIONS ARE MET.
- * 1) THE MAINFRAME IS NOT IN MULTIMAINFRAME
- * MODE.
- * 2) THE *SETPFP* REQUEST FAILS.
- * 3) THE *MTOS* FILE EXISTS, BUT CANNOT BE
- * ATTACHED IN MODIFY MODE.
- * 4) THE *MTOS* FILE DOES NOT EXIST, BUT
- * CANNOT BE DEFINED.
- * 5) NO VALID SLAVE MAINFRAMES CAN BE
- * IDENTIFIED.
- *
- * ANOTHER MAINFRAME WILL NOT BE RECOGNIZED AS A VALID
- * SLAVE MAINFRAME IF ANY OF THE FOLLOWING IS TRUE.
- * 1) THE *STOM* FILE CANNOT BE ATTACHED IN
- * READ-ALLOW-MODIFY MODE.
- *
- * 2) THE LENGTH OF THE *STOM* FILE INDICATES
- * THAT THE *SLVEXEC* IS WORKING WITH A
- * DIFFERENT SET OF INSTALLATION
- * PARAMETERS.
- *
- * MESSAGES
- * * EXEC MMF INITIALIZATION OK.*
- * AN INFORMATIVE MESSAGE NOTING THAT *SSEXEC*
- * IS READY TO RUN IN MULTIMAINFRAME MODE.
- *
- * * EXEC MMF INITIALIZATION FAILED -*
- * * - ALL SLAVES OMITTED.* -OR-
- * * - ATTACH MTOS FAILED.* -OR-
- * * - DEFINE MTOS FAILED.* -OR-
- * * - MTOS FILE BUSY.* -OR-
- * * - SETPFP PROBLEM.*
- * A MESSAGE INDICATING THAT THE *SSEXEC* PROGRAM
- * WILL NOT RUN IN MULTIFRAME MODE FOR THE REASON
- * NOTED ON THE SECOND LINE.
- *
- * * EXEC IN SINGLE MAINFRAME MODE.*
- * AN INFORMATIVE MESSAGE INDICATING THAT THE
- * *SSEXEC* PROGRAM IS RUNNING IN A SINGLE
- * MAINFRAME CONFIGURATION.
- *
- * * EXEC - SLAVE N XXXX.*
- * XXXX = ACTIVE/IDLE.
- * AN INFORMATIVE MESSAGE INDICATING THAT *SSEXEC*
- * IS READY TO COMMUNICATE WITH THE *SSSLV*
- * PROGRAM WHICH IS RUNNING ON MAINFRAME *N*.
- *
- * * EXEC - SLAVE N OMITTED -*
- * * - NO STOM FILE.* -OR-
- * * - STOM FILE LENGTH PROBLEM.*
- * A MESSAGE INDICATING THAT *SSEXEC* WILL NOT
- * COMMUNICATE WITH AN *SSSLV* PROGRAM, IF ANY, ON
- * MAINFRAME *N* FOR THE REASON NOTED IN THE
- * SECOND LINE.
- *
- #
- ITEM MID C(2); # MACHINE ID OF MASTER MF #
- ITEM MIDX U; # INDEX (1-4) OF MASTER MF #
- ITEM LINKFAM C(7); # NAME OF LINK FAMILY #
- #
- **** PROC INITSRP - XREF LIST BEGIN.
- #
- XREF
- BEGIN
- PROC MESSAGE; # ISSUES MESSAGE MACRO #
- PROC PDATE; # ISSUE PDATE MACRO #
- PROC PFD; # PERMANENT FILE REQUEST DELAYS #
- PROC READ; # READ FILE #
- PROC READW; # READ LINE #
- PROC REWIND; # REWIND FILE #
- PROC RETERN; # RETURN FILE #
- PROC RTIME; # ISSUE RTIME MACRO #
- PROC SETPFP; # ISSUE SETPFP MACRO #
- PROC WRITER; # WRITE FILE #
- FUNC XCOD C(10); # INTEGER TO DISPLAY #
- PROC ZFILL; # ZERO FILL AN ARRAY #
- PROC ZSETFET; # INITIALIZE *FET* #
- END
- #
- **** PROC INITSRP - XREF LIST END.
- #
- DEF LISTCON #0#; # DO NOT LIST COMMON DECKS #
- *CALL,COMBFAS
- *CALL,COMBFET
- *CALL,COMBPFP
- *CALL COMBPFS
- *CALL,COMXCTF
- *CALL COMXINT
- *CALL,COMXIPR
- *CALL,COMXMMF
- *CALL,COMSPFM
- ARRAY MMFSTAT [0:0] S(4);
- BEGIN
- ITEM MMF$TEXT C(00,00,38) # INITIALIZATION STATUS #
- =[" EXEC MMF INITIALIZATION STATUS"];
- ITEM MMF$STAT C(02,30,09); # OK/FAILED - #
- ITEM MMF$END U(03,48,12) =[0]; # END OF LINE #
- END
- ARRAY RBBUF [0:0] S(RBSIZE);; # SCRATCH BUFFER #
- ITEM PFNAME C(7); # PERMANENT FILE NAME #
- ITEM RB U; # INDEX TO A REQUEST BLOCK #
- ITEM STAT U; # SCRATCH STATUS WORD #
- ITEM STATM S:EXECSTAT; # STATUS OF MMF INITIALIZATION #
- ITEM STATS S:EXECSTAT; # STATUS OF A SLAVE #
- ITEM THISSLV U; # SCRATCH WORD #
- CONTROL EJECT;
- #
- * INITIALIZE VARIOUS ITEMS AND POINTERS.
- #
- STATM = S"INITPROB";
- L$STOM = (NUMRB + 1) * RBSIZE;
- L$MTOSH = (MAXSLV + 1) * 3;
- L$MTOS = L$MTOSH + NUMRB * NUMSLV;
- P<MTOSHEAD> = LOC(MTOS$BUF);
- P<MTOSM> = LOC(MTOB$FET);
- P<STOMMBUF> = LOC(STOM$BUF);
- STOMBUFL = STOM$BFL;
- ZSETFET(LOC(MTOSM),MTOSMLFN,LOC(MTOSHEAD),L$MTOS + 1,SFETL);
- IF MIDX EQ 0
- THEN # SINGLE MAINFRAME MODE #
- BEGIN
- STATM = S"SMF";
- GOTO INITMASTER;
- END
- #
- * ISSUE A *SETPFP* SO THE COMMUNICATION FILES
- * CAN BE ATTACHED.
- #
- PFP$WRD0[0] = 0;
- PFP$FAM[0] = LINKFAM;
- PFP$FG1[0] = TRUE; # CHANGE FAMILY #
- PFP$FG4[0] = TRUE; # CHANGE USER INDEX #
- PFP$UI[0] = DEF$UI;
- SETPFP(PFP);
- IF PFP$STAT[0] NQ 0
- THEN
- BEGIN
- MMFD$PROB[0] = "SETPFP PROBLEM.";
- GOTO INITMASTER;
- END
- #
- * ATTACH THE *MTOS* FILE IN MODIFY MODE,
- * AND READ IT TO THE *MTOS* BUFFER.
- * USE THE *STOM* FILE BUFFER AND *FET* TO READ THE *MTOS* FILE.
- #
- ZSETFET(LOC(STOMM),MTOSMLFN,LOC(STOMMBUF),STOMBUFL,SFETL);
- PFD("ATTACH",MTOSMLFN,MTBSPFN,"PW",MTOSPW,
- "M","M", "RC",PFSTAT,"NA",0,"UP",0,0);
- IF PFSTAT EQ FBS
- THEN # FILE BUSY #
- BEGIN
- MMFD$PROB[0] = "MTOS FILE BUSY.";
- GOTO INITMASTER;
- END
- IF PFSTAT EQ OK
- THEN # READ *MTOS* #
- BEGIN
- READ(STOMM,RCL);
- READW(STOMM,MTOSHEAD,L$MTOS,STAT);
- END
- IF PFSTAT NQ OK ##
- OR MSH$NUMSLV[0] NQ NUMSLV ##
- OR MSH$NUMRB[0] NQ NUMRB
- THEN # INITIALIZE THE *MTOS* FILE #
- BEGIN
- PFSTAT = 1;
- MSH$NUMSLV[0] = NUMSLV;
- MSH$NUMRB[0] = NUMRB;
- STAT = 1;
- END
- #
- * INITIALIZE THE MASTER STATUS INFORMATION.
- #
- MSH$PFNM[0] = MTBSPFN;
- MSH$MIDM[0] = MID;
- MSH$MIDX[0] = MIDX;
- IF PFSTAT NQ OK
- THEN
- BEGIN # CREATE *MTOS* #
- #
- * CREATE A NEW *MTOS* PERMANENT FILE WHICH
- * HAS THE MASTER HEADER INFORMATION.
- * REATTACH THE *MTOS* FILE IN MODIFY MODE
- * SO THE *SSSLV* PROGRAMS CAN READ IT.
- #
- RETERN(STOMM,RCL);
- PFD("PURGE",MTBSPFN,"PW",MTOSPW,"RC",PFSTAT,"UP",0,0);
- PFD("DEFINE",MTOSMLFN,MTBSPFN,"PW",MTOSPW,"BR","N", "R",
- LINK$DT[0],"RC",PFSTAT,"UP",0,0);
- IF PFSTAT NQ OK
- THEN # CAN NOT DEFINE #
- BEGIN
- MMFD$PROB[0] = "DEFINE MTOS FAILED.";
- GOTO INITMASTER;
- END
- P<FETSET> = LOC(MTOSM);
- FET$IN[0] = FET$FRST[0] + L$MTOS;
- WRITER(MTOSM,RCL);
- PFD("ATTACH",MTOSMLFN,MTBSPFN,"PW",MTOSPW,"M","M", "RC",PFSTAT
- ,"NA",0,"UP",0,0);
- IF PFSTAT NQ OK
- THEN # ABNORMAL ERROR #
- BEGIN
- MMFD$PROB[0] = "ATTACH MTOS FAILED.";
- GOTO INITMASTER;
- END
- END # CREATE *MTOS* #
- STATM = S"ACTIVE";
- #
- * ATTACH AND READ THE *STOM* COMMUNICATION FILE
- * FROM EACH POSSIBLE SLAVE AND INITIALIZE THE
- * HEADER AND EACH REPLY BLOCK STATUS FOR EACH SLAVE.
- #
- SINDX = 1;
- P<STOMFILE> = LOC(RBBUF);
- FASTFOR DUMMY = 1 STEP 1 UNTIL MAXSLV + 1
- DO
- BEGIN # INITIALIZE EACH SLAVE #
- IF DUMMY EQ MIDX OR ##
- SINDX GR NUMSLV
- THEN # BYPASS THIS *MF* #
- BEGIN
- TEST DUMMY;
- END
- P<MTOSREPBLK> = LOC(MTOSHEAD) + L$MTOSH + (SINDX-1)*NUMRB;
- PFNAME = STOMPFN;
- CHAR10 = XCOD(DUMMY);
- CHAR1 = C<9,1>CHAR10;
- B<36,6>PFNAME = CHAR1;
- SLVN$INDX[0] = CHAR1;
- MSH$PFNS[SINDX] = PFNAME;
- #
- * ATTACH AND READ THE *STOM* FILE FOR THIS SLAVE
- #
- PFD("ATTACH",PFNAME,0,"PW",STOMPW,"M","RM","RC",PFSTAT, "NA",0
- ,"UP",0,0);
- IF PFSTAT NQ OK
- THEN # REJECT SLAVE #
- BEGIN
- STATS = S"OMIT";
- MMFD$PROB[0] = "NO *STOM* FILE.";
- GOTO INITSLAVE;
- END
- ZSETFET(LOC(STOMM),PFNAME,LOC(STOMMBUF),STOMBUFL,SFETL);
- READ(STOMM,NRCL);
- READW(STOMM,RBBUF,RBSIZE,STAT);
- MMFD$PROB[0] = "STOM FILE LENGTH PROB.";
- IF STAT NQ OK
- THEN # REJECT SLAVE #
- BEGIN
- STATS = S"OMIT";
- GOTO INITSLAVE;
- END
- PDATE(PDATESTAT[0]);
- RTIME(RTIMESTAT[0]);
- #
- * INITIALIZE THE *MTOS* FILE HEADER
- * TO INDICATE THE SLAVE EXEC STATUS.
- #
- MSH$SSW[SINDX] = SM$SSW[0];
- MSH$MIDS[SINDX] = SM$MIDS[0];
- IF SM$IDLE[0]
- THEN
- BEGIN
- STATS = S"IDLE";
- SLVN$STAT[0] = "IDLE.";
- MSH$TIMOUT[SINDX] = MAXSECS;
- END
- ELSE
- BEGIN
- STATS = S"ACTIVE";
- SLVN$STAT[0] = "ACTIVE.";
- MSH$TIMOUT[SINDX] = RTIMSECS[0] + SLAV$INTV;
- END
- #
- * CHECK THE LENGTH OF THE *STOM* FILE AND
- * INITIALIZE THE MASTER REPLY CODE FIELDS.
- #
- FASTFOR RB = 1 STEP 1 UNTIL NUMRB
- DO
- BEGIN # CHECK LENGTH OF THE *STOM* FILE #
- READW(STOMM,RBBUF,RBSIZE,STAT);
- IF STAT NQ OK
- THEN
- BEGIN
- STATS = S"OMIT";
- GOTO INITSLAVE;
- END
- IF MSR$MRC[RB] EQ S"ACCEPTED"
- THEN # INITIALIZE REPLY CODE AND STATUS
- FIELDS #
- BEGIN
- MSR$MRC[RB] = S"FINISHED";
- MSR$REPLY[RB] = S"ABANDONED";
- MSR$PDATE[RB] = PDATEV[0];
- END
- END # CHECK LENGTH OF THE *STOM* FILE #
- INITSLAVE:
- MSH$STATS[SINDX] = STATS;
- IF STATS EQ S"ACTIVE" OR STATS EQ S"IDLE"
- THEN # SLAVE IS DEFINED #
- BEGIN
- MSH$DEFD[SINDX] = TRUE;
- SLAVECTR = SLAVECTR + 1;
- MESSAGE(SLVNSTAT,SYSUDF1);
- SINDX = SINDX + 1;
- END
- ELSE # SLAVE IS NOT DEFINED #
- BEGIN
- MSH$DEFD[SINDX] = FALSE;
- SLVN$STAT[0] = "OMITTED - ";
- MESSAGE(SLVNSTAT,SYSUDF1);
- MESSAGE(MMFDETAIL,SYSUDF1);
- END
- END # INITIALIZE EACH SLAVE #
- INITMASTER:
- #
- * ESTABLISH THE NEXT TIME TO CALL THE SLAVE
- * REQUEST PROCESSOR AND TO FLUSH THE *MTOS* BUFFERS.
- * ISSUE A MESSAGE WITH THE FINAL INITIALIZATION STATUS.
- #
- MTOS$EXPIR = MAXSECS;
- STOM$EXPIR = MAXSECS;
- IF STATM EQ S"SMF"
- THEN
- BEGIN
- MMF$TEXT[0] = " EXEC IN SINGLE MAINFRAME MODE.";
- MESSAGE(MMFSTAT,SYSUDF1);
- RETURN;
- END
- IF STATM EQ S"ACTIVE"
- THEN # TEST IF ALL SLAVES OMITTED #
- BEGIN # CHECK SLAVE STATUS #
- IF SLAVECTR NQ 0
- THEN
- BEGIN
- MTOS$EXPIR = 0;
- STOM$EXPIR = 0;
- MMF$STAT[0] = "OK.";
- MESSAGE(MMFSTAT,SYSUDF1);
- RETURN;
- END
- ELSE
- BEGIN
- MMFD$PROB[0] = "ALL SLAVES OMITTED.";
- END
- END # CHECK SLAVE STATUS #
- MMF$STAT[0] = "FAILED - ";
- MESSAGE(MMFSTAT,SYSUDF1);
- MESSAGE(MMFDETAIL,SYSUDF1);
- RETERN(MTOSM,RCL);
- RETURN;
- END # INITSRP #
- TERM
- PROC INITTAB;
- # TITLE INITTAB - INITIALIZES ASSORTED TABLES. #
- BEGIN # INITTAB #
- #
- ** INITTAB - INITIALIZES ASSORTED TABLES.
- *
- * THIS ROUTINE WILL INITIALIZE TABLES USED BY *SSEXEC* AND CREATE
- * THE MEMORY ALLOCATION TABLE (*MAT*) WHICH DESCRIBES THE *FWA* OF
- * EACH TABLE, THE ENTRY COUNT AND THE SPACE ALLOCATED FOR EACH
- * TABLE.
- *
- * EXIT TABLES DEFINED IN THE *MAT* HAVE BEEN INITIALIZED.
- *
- * MESSAGES SSEXEC SEEKING FL INCREASE.
- * SSEXEC ACTIVE.
- * EXEC ABNORMAL - INITTAB.
- #
- #
- **** PROC INITTAB - XREF LIST BEGIN.
- #
- XREF
- BEGIN
- PROC ABORT; # CALLS ABORT MACRO #
- PROC CALCTS; # CALCULATES TABLE SPACE #
- PROC INITTS; # INITIALIZES TABLES #
- PROC MEMORY; # CALLS MESSAGE MACRO #
- PROC MESSAGE; # CALLS *MESSAGE* MACRO #
- PROC MNGMEM; # CHANGES FIELD LENGTH #
- PROC MSG; # CALLS *MESSAGE* MACRO #
- PROC RECALL; # CALLS RECALL MACRO #
- FUNC XCDD C(10); # INTEGER TO DECIMAL DISPLAY #
- PROC ZFILL; # ZEROES BUFFER SPACE #
- END
- #
- **** PROC INITTAB - XREF LIST END.
- #
- DEF LISTCON #0#; # DO NOT LIST COMDECKS #
- *CALL COMBFAS
- *CALL COMBMAT
- *CALL COMXACM
- *CALL COMXCTF
- *CALL COMXMSC
- *CALL COMXINT
- *CALL,COMXJCA
- ITEM DC$FL C(10); # CHARACTER FIELD FOR *XCDD* #
- ITEM FLCHNG I; # FIELD LENGTH CHANGE AMOUNT #
- ITEM I U; # INDEX #
- ITEM RCLFLAG B; # *FL* ACCESS DELAY FLAG #
- ITEM RESP U; # RESPONSE FROM *MNGMEM* #
- ITEM TLAST U; # LAST TABLE WORD #
- ITEM TLEN U; # TABLE LENGTH #
- ITEM TSTART U; # FIRST TABLE WORD #
- #
- * ARRAY FOR *ZFILL* PROCEDURE.
- #
- BASED
- ARRAY DUMAR[0:0] P(1);
- ;
- #
- * MESSAGE BUFFER.
- #
- ARRAY MSGBUF[0:0] P(5);
- BEGIN # ARRAY MSGBUF #
- ITEM MSG$LINE C(00,00,40); # MESSAGE LINE #
- ITEM MSG$RZRO C(04,00,12); # ZERO BYE TERMINATOR #
- END # ARRAY MSGBUF #
- ARRAY STATARY[0:0] P(1); # STATUS FOR MEMORY MACRO #
- BEGIN # STATARY #
- ITEM STAT U(00,00,30); # STATUS #
- ITEM ZEROFL U(00,30,30); # ZERO FILL REST OF WORD #
- END # STATARY #
- CONTROL EJECT;
- #
- * CALL *CALCTS* TO CALCULATE THE ENTRY COUNTS AND THE TABLE SPACE
- * REQUIRED.
- #
- CALCTS;
- P<RA$AREA> = 0; # POINTER TO *RA* AREA #
- #
- * CYCLE THROUGH ARRAY *MAT* CALCULATING THE *FWA* OF EACH ENTRY
- * BASED ON THE *FWA* AND SPACE REQUIRED OF THE PREVIOUS ENTRY.
- #
- NEXTADR = RA$HHA; # FOR *MNGMEM* OPERATIONS #
- MAT$FWA[0] = RA$HHA; # USE NEXT AVAILABLE FOR FIRST #
- SLOWFOR I = 1 STEP 1 ##
- WHILE I LS MAT$ENTRY"MAT$LAST"
- DO
- BEGIN
- MAT$FWA[I] = MAT$FWA[I-1] + MAT$SPACE[I-1];
- END
- #
- * GET THE MEMORY REQUIRED FOR THE VARIABLE TABLES.
- #
- STAT = 0; # REQUEST CURRENT *FL* #
- MEMORY("CM",STATARY,RCL,NA);
- IF STAT EQ 0
- THEN
- BEGIN # IF CURRENT *FL* NOT RETURNED #
- FE$RTN[0] = "INITTAB."; # SET ROUTINE INTO ERROR MESSAGE #
- MESSAGE(FEMSG[0],UDFL1);
- ABORT;
- END # IF CURRENT *FL* NOT RETURNED #
- CUR$FL = STAT; # USED BY *MNGMEM* #
- MAX$FL = CUR$FL; # SET MAXIMUM *FL* #
- UNU$FL = CUR$FL - NEXTADR;
- FLCHNG = MAT$FWA[MAT$ENTRY"MAT$LAST" - 1] + ##
- MAT$SPACE[MAT$ENTRY"MAT$LAST" - 1] - NEXTADR;
- RCLFLAG = FALSE; # DELAY FLAG #
- SLOWFOR I = 0 WHILE RESP EQ 0
- DO
- BEGIN # LOOP UNTIL *FL* INCREASE SATISFIED #
- MNGMEM(FLCHNG,RESP); # REQUEST *FL* INCREASE #
- IF RESP EQ 0
- THEN
- BEGIN # IF ATTEMPT UNSUCCESSFUL #
- MSG$LINE[0] = "$SSEXEC SEEKING FL INCREASE.";
- MESSAGE(MSGBUF[0],LINE1);
- RECALL;
- RCLFLAG = TRUE;
- END # IF ATTEMPT UNSUCCESSFUL #
- END # LOOP UNTIL *FL* INCREASE SATISFIED #
- IF RCLFLAG
- THEN
- BEGIN # IF *FL* ACCESS DELAYED #
- MSG$LINE[0] = " FL OBTAINED.";
- MESSAGE(MSG$LINE[0],LINE1);
- END # IF *FL* ACCESS DELAYED #
- MSG(" ",SYSUDF1);
- #
- * CALL *INITTS* TO PRESET INITIAL VALUES IN THE VARIABLE AND FIXED
- * TABLES.
- #
- TSTART = MAT$FWA[MAT$ENTRY"HLRQ"];
- TLAST = MAT$FWA[MAT$ENTRY"MAT$LAST" -1] + ##
- MAT$SPACE[MAT$ENTRY"MAT$LAST" -1];
- TLEN = TLAST - TSTART;
- P<DUMAR> = TSTART;
- ZFILL(DUMAR,TLEN);
- INITTS;
- END # INITTAB #
- TERM
- PROC INITTS;
- # TITLE INITTS - PRESET ASSORTED TABLES. #
- BEGIN # INITTS #
- #
- ** INITTS - PRESET ASSORTED TABLES.
- *
- * THIS PROCEDURE WILL LINK TOGETHER ENTRIES TO FORM FREE SPACE
- * CHAINS AND PRESET VALUES IN TABLES USED BY *SSEXEC*.
- *
- * EXIT TABLE VALUES HAVE BEEN PRESET.
- #
- #
- **** PROC INITTS - XREF LIST BEGIN.
- #
- XREF
- BEGIN
- PROC BZFILL; # ZERO FILLS WORD #
- PROC MESSAGE; # ISSUE MESSAGE #
- FUNC XCOD C(10); # CHANGES INTEGER TO DISPLAY #
- PROC ZFILL; # ZERO FILL BUFFER #
- END
- #
- **** PROC INITTS - XREF LIST END.
- #
- DEF FILLSIZE #7#; # FILL SIZE FOR *BZFILL* #
- DEF LISTCON #0#; # DO NOT LIST COMDECKS #
- *CALL COMBFAS
- *CALL COMBBZF
- *CALL COMBCHN
- *CALL COMBCMD
- *CALL COMBFET
- *CALL,COMBLBL
- *CALL COMBLRQ
- *CALL COMBMAT
- *CALL COMBMCT
- *CALL COMBTDM
- *CALL COMBUDT
- *CALL COMXBST
- *CALL COMXCTF
- *CALL COMXFCQ
- *CALL COMXHLR
- *CALL COMXINT
- *CALL COMXLTC
- *CALL COMXMSC
- ITEM FIRST U; # POINTER TO FIRST BUFFER WORD #
- ITEM I U; # INDEX #
- ITEM J U; # INDEX #
- ITEM MSGTEMP C(7); # TEMPORARY CHARACTER ITEM #
- ITEM ZEROFILL S:TYPFILL = S"ZFILL"; # ZERO BUFFER FILL #
- #
- * SMALL BUFFERS AND *FETS*.
- #
- ARRAY CHARARY[0:0] P(1);
- BEGIN
- ITEM CHARTEMP C(00,00,10); # CHARACTER BUFFER #
- ITEM CHARID C(00,42,03); # CHARACTER *ID* #
- END
- ARRAY NAMEFILE[0:0] P(1);
- BEGIN # NAMFILE #
- ITEM NAME$HDR C(00,00,07) = ["FILE"]; # NAME HEADER #
- ITEM NAME$UNID C(00,24,03); # UNIQUE ID #
- END # NAMFILE #
- CONTROL EJECT;
- #
- * CHAIN ALL *HLRQ* ENTRIES TOGETHER AND PLACE A UNIQUE FILE NAME
- * INTO EACH ENTRY. ALSO SET THE *CHN$BOC* AND *CHN$EOC* FIELDS
- * IN *COMBCHN* TO POINT TO THE BEGINNING AND END OF THE *HLRQ* FREE
- * SPACE CHAIN.
- *
- * THE UNIQUE FILE NAMES ARE OBTAINED BY PLACING A NUMERIC
- * IDENTIFIER AT THE END OF THE WORD "FILE". THE NUMERIC IDENTIFIER
- * IS INCREMENTED BY ONE FOR EACH NEW FILE NAME.
- #
- P<HLRQ> = MAT$FWA[MAT$ENTRY"HLRQ"]; # POINT TO FIRST ENTRY #
- CHN$BOC[LCHN"HL$FRSPC"] = P<HLRQ>; # BEGINNING OF CHAIN #
- SLOWFOR I = 1 STEP 1 ##
- WHILE I LQ MAT$COUNT[MAT$ENTRY"HLRQ"]
- DO
- BEGIN # FOR ALL *HLRQ* ENTRIES #
- CHN$EOC[LCHN"HL$FRSPC"] = P<HLRQ>; # END OF CHAIN POINTER #
- J = I + 100;
- CHARTEMP[0] = XCOD(J); # CHANGE INDEX TO DISPLAY CODE #
- NAME$UNID[0] = CHARID[0];
- HLR$FLNM[0] = NAME$HDR[0]; # PLACE FILE NAME INTO ENTRY #
- HLR$LNK1[0] = P<HLRQ> + HLRQLEN; # LINK TO NEXT ENTRY #
- P<HLRQ> = HLR$LNK1[0]; # POINT TO THE NEXT ENTRY #
- END # FOR ALL *HLRQ* ENTRIES #
- P<HLRQ> = P<HLRQ> - HLRQLEN; # POINT TO LAST ENTRY OF CHAIN #
- HLR$LNK1[0] = 0; # CLEAR LAST POINTER #
- #
- * CHAIN ALL *LLRQ* ENTRIES TOGETHER INTO A FREE SPACE CHAIN.
- #
- P<LLRQ> = MAT$FWA[MAT$ENTRY"LLRQ"]; # POINT TO FIRST ENTRY #
- CHN$BOC[LCHN"LL$FRSPC"] = P<LLRQ>; # BEGINNING OF CHAIN #
- SLOWFOR I = 1 STEP 1 ##
- WHILE I LQ MAT$COUNT[MAT$ENTRY"LLRQ"]
- DO
- BEGIN # FOR ALL *LLRQ* ENTRIES #
- CHN$EOC[LCHN"LL$FRSPC"] = P<LLRQ>; # END OF CHAIN POINTER #
- LLR$LINK1[0] = P<LLRQ> + LLRQENTL; # LINK TO NEXT ENTRY #
- P<LLRQ> = LLR$LINK1[0]; # POINT TO NEXT ENTRY #
- END # FOR ALL *LLRQ* ENTRIES #
- P<LLRQ> = P<LLRQ> - LLRQENTL; # POINT TO LAST ENTRY OF CHAIN #
- LLR$LINK1[0] = 0; # CLEAR LAST POINTER #
- #
- * CHAIN ALL *RTRQ* ENTRIES TOGETHER INTO A FREE SPACE CHAIN.
- #
- P<LINKWRD> = MAT$FWA[MAT$ENTRY"RTRQ"]; # POINT TO FIRST ENTRY #
- CHN$BOC[LCHN"RTD$FRSPC"] = P<LINKWRD>; # BEGINNING OF CHAIN #
- SLOWFOR I = 1 STEP 1 ##
- WHILE I LQ MAT$COUNT[MAT$ENTRY"RTRQ"]
- DO
- BEGIN # FOR ALL *RTRQ* ENTRIES #
- CHN$EOC[LCHN"RTD$FRSPC"] = P<LINKWRD>; # END OF CHAIN #
- LINK$ADR[0] = P<LINKWRD> + TDAMLEN + 1; # LINK TO NEXT ENTRY #
- P<LINKWRD> = LINK$ADR[0]; # POINT TO NEXT ENTRY #
- END # FOR ALL *RTRQ* ENTRIES #
- P<LINKWRD> = P<LINKWRD> - TDAMLEN - 1; # POINT TO LAST ENTRY #
- LINK$ADR[0] = 0; # CLEAR LAST POINTER #
- #
- * CHAIN ALL *FCTQ* ENTRIES TOGETHER INTO A FREE SPACE CHAIN.
- #
- P<FCTQ> = MAT$FWA[MAT$ENTRY"FCTQ"]; # POINT TO FIRST ENTRY #
- CHN$BOC[LCHN"FCT$FRSPC"] = P<FCTQ>; # BEGINNING OF CHAIN #
- SLOWFOR I = 1 STEP 1 ##
- WHILE I LQ MAT$COUNT[MAT$ENTRY"FCTQ"]
- DO
- BEGIN # FOR ALL *FCTQ* ENTRIES #
- CHN$EOC[LCHN"FCT$FRSPC"] = P<FCTQ>; # END OF CHAIN POINTER #
- FCTQLINK1[0] = P<FCTQ> + FCTQHL + FCTENTL; # LINK TO NEXT #
- P<FCTQ> = FCTQLINK1[0]; # POINT TO NEXT ENTRY #
- END # FOR ALL *FCTQ* ENTRIES #
- P<FCTQ> = P<FCTQ> - FCTQHL - FCTENTL; # POINT TO LAST ENTRY #
- FCTQLINK1[0] = 0; # CLEAR LAST POINTER #
- #
- * SET THE AUTHORIZED FLAG IN THE FIRST *BST* ENTRY.
- #
- P<BST> = MAT$FWA[MAT$ENTRY"BST"]; # POINT TO FIRST ENTRY #
- BST$AUTH[1] = TRUE; # SET AUTHORIZED FLAG #
- #
- * INITIALIZE THE CATALOG *FET*.
- #
- P<FETSET> = MAT$FWA[MAT$ENTRY"CAT$FET"]; # POINT TO *FCT* FET #
- FIRST = MAT$FWA[MAT$ENTRY"CAT$BUF"]; # FIRST LOCATION POINTER #
- FET$IN[0] = FIRST; # IN POINTER #
- FET$OUT[0] = FIRST; # OUT POINTER #
- FET$LIM[0] = FIRST + SEQBL; # LIMIT #
- FCTFADR = MAT$FWA[MAT$ENTRY"CAT$FET"];
- P<FCTFET> = FCTFADR;
- #
- * INITIALIZE THE MAP *FET*.
- #
- P<FETSET> = MAT$FWA[MAT$ENTRY"MAP$FET"]; # POINT TO *MAP* FET #
- FIRST = MAT$FWA[MAT$ENTRY"MAP$BUF"]; # FIRST LOCATION POINTER #
- FET$IN[0] = FIRST; # IN POINTER #
- FET$OUT[0] = FIRST; # OUT POINTER #
- FET$LIM[0] = FIRST + MAPBUFL; # LIMIT #
- MAPFADR = MAT$FWA[MAT$ENTRY"MAP$FET"];
- P<MAPFET> = MAPFADR;
- #
- * INITIALIZE THE TEMPORARY *FET*.
- #
- P<FETSET> = MAT$FWA[MAT$ENTRY"TEMP$FET"];
- FIRST = MAT$FWA[MAT$ENTRY"TEMP$BUF"]; # FIRST LOCATION POINTER #
- FET$IN[0] = FIRST; # IN POINTER #
- FET$OUT[0] = FIRST; # OUT POINTER #
- FET$LIM[0] = FIRST + TBUFL; # LIMIT #
- TFETADR = MAT$FWA[MAT$ENTRY"TEMP$FET"];
- P<TFET> = TFETADR;
- #
- * INITIALIZE THE POINTERS TO THE BASED ARRAYS.
- #
- ASTBADR = MAT$FWA[MAT$ENTRY"AST$BUF"];
- FCTBADR = MAT$FWA[MAT$ENTRY"CAT$BUF"];
- P<FCTBUF> = FCTBADR;
- MAPBADR = MAT$FWA[MAT$ENTRY"MAP$BUF"];
- P<MAPBUF> = MAPBADR;
- TBUFADR = MAT$FWA[MAT$ENTRY"TEMP$BUF"];
- P<TBUF> = TBUFADR;
- WBUFADR = MAT$FWA[MAT$ENTRY"TEMP$WB"];
- P<WBUF> = WBUFADR;
- OCTLEN = MAT$COUNT[MAT$ENTRY"OCT"];
- OCTADR = MAT$FWA[MAT$ENTRY"OCT"];
- P<OCT> = OCTADR;
- OMTADR = MAT$FWA[MAT$ENTRY"OMT"];
- P<OMT> = OMTADR;
- PRMBADR = MAT$FWA[MAT$ENTRY"PREAMBLE"];
- P<PRMBUF> = PRMBADR;
- LTCTPTR = MAT$FWA[MAT$ENTRY"LTCT"];
- P<LTCT> = LTCTPTR;
- UDTCADR = MAT$FWA[MAT$ENTRY"UDT$CONT"];
- P<UDT$CN> = UDTCADR + 1; # HEADER NOT INCLUDED #
- UDTSADR = MAT$FWA[MAT$ENTRY"UDT$SM"];
- P<UDT$SMA> = UDTSADR;
- P<LABEL$CART> = MAT$FWA[MAT$ENTRY"LABBUF"];
- MWRBADR = MAT$FWA[MAT$ENTRY"MW$BUFS"];
- MRDBADR = MAT$FWA[MAT$ENTRY"MR$BUFS"];
- SBTADR = MAT$FWA[MAT$ENTRY"SBT"];
- #
- * PUT THE FAMILY NAMES INTO THE *MRFT* TABLE.
- #
- P<MRFT> = MAT$FWA[MAT$ENTRY"MRFT"]; # POINT TO FIRST ENTRY #
- SLOWFOR I = 1 STEP 1 WHILE I LQ FAMCNT
- DO
- BEGIN # FOR ALL *MRFT* ENTRIES #
- MSGTEMP = NAMEFAM[I];
- BZFILL(MSGTEMP,ZEROFILL,FILLSIZE);
- MRFTFAM[(I-1)] = MSGTEMP; # MOVE FAMILY NAME #
- END # FOR ALL *MRFT* ENTRIES #
- END # INITTS #
- TERM
- PROC OPENCAT;
- # TITLE OPENCAT - OPENS THE MAP AND CATALOG FILES. #
- BEGIN # OPENCAT #
- #
- ** OPENCAT - OPENS MAP AND CATALOG FILES.
- *
- * THIS ROUTINE CALLS *MOPEN* AND *COPEN* TO OPEN THE *SM* MAPS
- * AND THE *SFM* CATALOGS. IT ALSO REBUILDS THE FREE AU
- * COUNTS IN THE *AST* TABLES AND UPDATES THE PREAMBLES.
- *
- * PROC OPENCAT.
- *
- * ENTRY USES THE LIST OF LOGICAL *SM* NUMBERS, THE LIST
- * OF FAMILIES WITH 8 *SFM* CATALOGS, AND THE CATALOGS
- * OF THE FAMILIES WITH 8 *SFM* CATALOGS.
- *
- * EXIT MAP AND CATALOG FILES HAVE BEEN OPENED AND ALL *AST*
- * TABLES HAVE BEEN UPDATED.
- *
- * MESSAGES 1) AST UPDATED.
- * PFN=PFN, FAMILY=FAMILY, UI=UI.
- * SUBCATALOG SM ID=ID.
- *
- * 2) ATTACH ERROR ON SFM SMMAP.
- * PFN=PFN, FAMILY=FAMILY, UI=UI.
- *
- * 3) ATTACH ERROR ON SFM SUBFAMILY CATALOG.
- * PFN=PFN, FAMILY=FAMILY, UI=UI.
- *
- * 4) CIO ERROR ON SFM SMMAP.
- * PFN=PFN, FAMILY=FAMILY, UI=UI.
- *
- * 5) CIO ERROR ON SFM SUBFAMILY CATALOG.
- * PFN=PFN, FAMILY=FAMILY, UI=UI.
- *
- * 6) EXEC ABNORMAL, OPENCAT.
- *
- * 7) INITIALIZATION PROBLEMS -
- * NO SMMAP FOUND.
- #
- #
- **** PROC OPENCAT - XREF LIST BEGIN.
- #
- XREF
- BEGIN
- PROC ABORT; # CALLS *ABORT* MACRO #
- PROC ACQ$FCT; # ACQUIRES AN *FCTQ* ENTRY #
- PROC BZFILL; # BLANKS OR ZERO FILLS WORD #
- PROC COPEN; # OPENS AN *MSG* CATALOG #
- PROC CRAST; # CREATES AN *AST* ENTRY #
- PROC CRDAST; # READS THE *AST* TABLE #
- PROC MESSAGE; # CALLS *MESSAGE* MACRO #
- PROC MOPEN; # OPEN A *SM* MAP #
- PROC RMVBLNK; # REMOVE MULTIPLE BLANKS #
- PROC RLS$FCT; # RELEASE AN *FCTQ* ENTRY #
- PROC SETPFP; # SETS USER INDEX AND FAMILY #
- PROC UASTPRM; # UPDATE *AST* AND PREAMBLE #
- FUNC XCDD C(3); # INTEGER TO DECIMAL DISPLAY #
- FUNC XCOD; # CHANGE OCTAL TO DISPLAY CODE #
- PROC XWOD; # CHANGE INTEGER TO OCTAL #
- END
- #
- **** PROC OPENCAT - XREF LIST END.
- #
- DEF QRADDR #0#; # ADDRESS OF *HLRQ* ENTRY #
- DEF LISTCON #0#; # DO NOT LIST COMDECKS #
- *CALL COMBFAS
- *CALL COMBBZF
- *CALL COMBCMS
- *CALL COMBCMD
- *CALL COMBMCT
- *CALL COMBPFP
- *CALL COMBUDT
- *CALL COMXCTF
- *CALL COMXINT
- *CALL COMXMSC
- *CALL COMSPFM
- ITEM ACCM B; # FILE ACCESS MODE FLAG #
- ITEM CER U; # *ACQ$FCT* RETURN CODE #
- ITEM CR U; # *CRDAST* RETURN STATUS #
- ITEM CSNOTFD B; # *SMMAP* NOT FOUND FLAG #
- ITEM FCTX U; # LOOP INDEX - FCT ORDINAL #
- ITEM FMX U; # LOOP INDEX - FAMILY #
- ITEM FOUND B; # ITEM FOUND FLAG #
- ITEM MMM U; # INDEX #
- ITEM MOPENCALL B; # *MOPEN* CALL FLAG #
- ITEM MSGTEMP C(8); # ITEM FOR *BZFILL* #
- ITEM QADDR U; # ADDRESS OF *FCTQ* ENTRY #
- ITEM RSTATUS U; # ERROR STATUS FROM *MOPEN* #
- ITEM SFX U; # LOOP INDEX - SUBFAMILY #
- ITEM SMX U; # LOOP INDEX - STORAGE MODULE #
- ITEM STAT U; # RETURN STATUS #
- ITEM UI U; # USER INDEX #
- #
- * ARRAY TO HOLD DATA FROM *XCDD*.
- #
- ARRAY ARTEMP[0:0] S(1);
- BEGIN
- ITEM TEMPCHAR C(00,00,10); # TEMPORARY CHARACTER ITEM #
- ITEM CHARSUB C(00,00,01); # SUBCATALOG *SM* *ID* #
- END
- ARRAY BADDR[0:0] P(FCTENTL); # *FCT* BUFFER ADDRESS #
- ;
- ARRAY BADSUB[0:0] P(3);
- BEGIN
- ITEM BAD$ID C(00,00,20) = [" SUBCATALOG SM ID="]; # ID #
- ITEM BAD$SUB C(02,00,01); # BAD *SM* NUMBER #
- ITEM BAD$ZRO U(02,18,12) = [0]; # ZERO TERMINATOR #
- END
- ARRAY CAT[0:0] P(1); # CATALOG FILE NAME #
- BEGIN # CAT #
- ITEM CAT$PFN C(00,00,07) = ["SFMCAT "]; # SFMCAT #
- ITEM CAT$UNID C(00,36,01); # UNIQUE IDENTIFIER #
- END # CAT #
- ARRAY DIS[0:0] P(2);
- BEGIN
- ITEM DIS$UI C(01,24,06); # USER INDEX IN DISPLAY CODE #
- END
- ARRAY MAP[0:0] P(1);
- BEGIN # MAP #
- ITEM MAP$PFN C(00,00,06) = ["SMMAP "]; # SMMAP #
- ITEM MAP$UNID C(00,30,01); # UNIQUE IDENTIFIER #
- END # MAP #
- #
- * MESSAGE BUFFER.
- #
- ARRAY MSGBUF[0:0] P(5);
- BEGIN # ARRAY MSGBUF #
- ITEM MSG$LINE C(00,00,40); # MESSAGE LINE #
- ITEM MSG$RZRO C(04,00,12); # ZERO BYE TERMINATOR #
- END # ARRAY MSGBUF #
- ARRAY REAL$AST[1:ASTENTL] S(ASTENTW);; # BUFFER FOR *AST* TABLE
- #
- SWITCH CERJMP:CMASTAT
- CNOERRJ:NOERR, # NO ERRORS #
- CINTLKJ:INTLK, # CATALOG/MAP FILE INTERLOCKED #
- CFOPENJ:FOPEN, # CATALOG/MAP FILE ALREADY OPEN #
- CCIOERRJ:CIOERR, # CIO ERROR #
- CATTERRJ:ATTERR, # CATALOG/MAP ATTACH ERROR #
- COCTFULLJ:OCTFULL; # OPEN CATALOG TABLE FULL #
- SWITCH CGERJMP:CMASTAT
- CGNOERRJ:NOERR, # NO ERRORS #
- CGINTLKJ:INTLK, # CATALOG/MAP FILE INTERLOCKED #
- CGNOTOPENJ:NOTOPEN, # CATALOG/MAP FILE NOT OPEN #
- CGNOSUBCATJ:NOSUBCAT, # NO SUCH SUBCATALOG #
- CGCIOERRJ:CIOERR, # *CIO* ERROR #
- CGORDERRJ:ORDERR; # ORDINAL OUT OF RANGE #
- SWITCH CRERJMP:CMASTAT
- CRNOERRJ:NOERR, # NO ERRORS #
- CRINTLKJ:INTLK, # CATALOG/MAP FILE INTERLOCKED #
- CRNOTOPENJ:NOTOPEN, # CATALOG/MAP FILE NOT OPEN #
- CRNOSUBCATJ:NOSUBCAT, # NO SUCH SUBCATALOG #
- CRCIOERRJ:CIOERR; # *CIO* ERROR #
- SWITCH MERJMP:CMASTAT
- MNOERRJ:NOERR, # NO ERRORS #
- MINTLKJ:INTLK, # CATALOG/MAP FILE INTERLOCKED #
- MFOPENJ:FOPEN, # CATALOG/MAP FILE ALREADY OPEN #
- MCIOERRJ:CIOERR, # *CIO* ERROR #
- MATTERRJ:ATTERR, # CATALOG/MAP ATTACH ERROR #
- MOCTFULLJ:OCTFULL; # OPEN CATALOG TABLE FULL #
- CONTROL EJECT;
- #
- * CONSTRUCT THE MAP FILE NAME AND CALL *MOPEN* TO OPEN EACH *SM*
- * MAP.
- #
- MSGTEMP = FAM$NAME[DEFAULTORD];
- BZFILL(MSGTEMP,TYPFILL"BFILL",7);
- MSGFAM[0] = MSGTEMP; # FAMILY NAME TO MESSAGE #
- #
- * ISSUE A *SETPFP* SO THE MAP FILE CAN BE ATTACHED.
- #
- PFP$UI = DEF$UI; # SET USER INDEX FOR *SETPFP* #
- PFP$FAM = FAM$NAME[DEFAULTORD]; # SET FAMILY NAME FOR *SETPFP* #
- PFP$FG1 = TRUE; # SET FAMILY BIT FOR *SETPFP* #
- PFP$FG4 = TRUE; # SET INDEX BIT FOR *SETPFP* #
- SETPFP(PFP); # SET USER INDEX AND FAMILY #
- XWOD(DEF$UI,DIS); # CHANGE OCTAL TO DISPLAY CODE #
- MSGUI[0] = DIS$UI[0]; # SET USER INDEX AND FAMILY #
- P<UDT$SMA> = UDTSADR;
- SLOWFOR SMX = 1 STEP 1 UNTIL UDT$LINE$SMN[0]
- DO
- BEGIN # PROCESS FOR EACH LOGICAL *SM* NUMBER #
- MMM = SM$ID[1];
- MAP$UNID[0] = SM$ID[1];
- MSGTEMP = MAP$PFN[0];
- BZFILL(MSGTEMP,TYPFILL"BFILL",7);
- MSGPFN[0] = MSGTEMP; # PLACE FILE NAME INTO MESSAGE #
- BZFILL(MAP,TYPFILL"ZFILL",7); # TYPFILL"ZFILL" FILE NAME #
- RSTATUS = 0;
- MOPEN(MMM,MAP$PFN[0],"M",RSTATUS);
- #
- * SIMULATED CASE STATEMENT FOR *MOPEN* PROCESSING.
- #
- GOTO MERJMP[RSTATUS];
- MCIOERRJ:
- MSG$LINE[0] = " CIO ERROR ON SFM SMMAP.";
- MESSAGE(MSGBUF,UDFL1); # MESSAGE TO DAYFILE #
- MSG$LINE[0] = MSG$TEXT[0];
- RMVBLNK(MSGBUF[0],40);
- MESSAGE(MSGBUF,UDFL1); # MESSAGE TO DAYFILE #
- CSNOTFD = TRUE;
- GOTO ENDCASE0; # COMMON EXIT #
- MATTERRJ:
- MSG$LINE[0] = " ATTACH ERROR ON SFM SMMAP.";
- MESSAGE(MSGBUF,UDFL1);
- MSG$LINE[0] = MSG$TEXT[0];
- RMVBLNK(MSGBUF[0],40);
- MESSAGE(MSGBUF,UDFL1);
- CSNOTFD = TRUE;
- GOTO ENDCASE0; # COMMON EXIT #
- MNOERRJ:
- MINTLKJ:
- ENDCASE0:
- P<UDT$SMA> = P<UDT$SMA> + SMALT;
- #
- * END OF CASE STATEMENT FOR *MOPEN* ERROR RESPONSE.
- #
- END # PROCESS FOR EACH LOGICAL *SM* NUMBER #
- P<UDT$SMA> = UDTSADR; # RESET SMA ADDRESS #
- IF CSNOTFD
- THEN
- BEGIN # NO SMMAP FOUND #
- FATALERR = TRUE;
- MSG$LINE[0] = " INITIALIZATION PROBLEMS -";
- MESSAGE(MSGBUF[0],UDFL1);
- MSG$LINE[0] = " NO SMMAP FOUND ";
- MESSAGE(MSGBUF[0],UDFL1);
- END # NO SMMAP FOUND #
- CONTROL EJECT;
- #
- * CONSTRUCT THE *SFM* CATALOG FILE NAME FROM THE FAMILY NAME LIST.
- * CALL *COPEN* TO OPEN THE *SFM* CATALOG. SCAN THE *FCT* TO
- * RECONSTRUCT THE FREE VOLUME CHAIN AND COUNT THE
- * AU AVAIABLE FOR ALLOCATION.
- #
- SLOWFOR FMX = 1 STEP 1 UNTIL FAMCNT
- DO
- BEGIN # FOR EACH FAMILY WITH EIGHT SUBFAMILY CATALOGS #
- MSGTEMP = NAMEFAM[FMX];
- BZFILL(MSGTEMP,TYPFILL"BFILL",7);
- MSGFAM[0] = MSGTEMP;
- SLOWFOR SFX = 0 STEP 1 UNTIL MAXSF
- DO
- BEGIN # FOR EACH SUBFAMILY #
- UI = DEF$UI + SFX; # CALCULATE USER INDEX #
- XWOD(UI,DIS);
- MSGUI[0] = DIS$UI[0];
- #
- * ISSUE A *SETPFP* SO THE SFMCAT FILE CAN BE ATTACHED.
- #
- PFP$UI = DEF$UI + SFX; # SET USER INDEX FOR *SETPFP* #
- PFP$FAM = NAMEFAM[FMX]; # SET FAMILY NAME FOR *SETPFP* #
- PFP$FG1 = TRUE; # SET FAMILY BIT FOR *SETPFP* #
- PFP$FG4 = TRUE; # SET INDEX BIT FOR *SETPFP* #
- SETPFP(PFP); # SET USER INDEX AND FAMILY #
- CAT$UNID[0] = XCOD(SFX); # CHANGE INDEX TO DISPLAY CODE #
- MSGPFN[0] = CAT$PFN[0]; # PLACE FILE NAME INTO MESSAGE #
- ACCM = FALSE; # RANDOM ACCESS MODE #
- STAT = 0;
- COPEN(NAMEFAM[FMX],SFX,CAT,"M",ACCM,STAT);
- #
- * SIMULATED CASE STATEMENT FOR *COPEN* ERROR RESPONSE.
- #
- GOTO CERJMP[STAT];
- CCIOERRJ:
- CINTLKJ:
- TEST SFX; # NEXT CATALOG #
- CATTERRJ:
- MSG$LINE[0] = "ATTACH ERROR ON SFM SUBFAMILY CATALOG.";
- MESSAGE(MSGBUF[0],UDFL1);
- MSG$LINE[0] = MSG$TEXT[0];
- RMVBLNK(MSGBUF[0],40);
- MESSAGE(MSGBUF[0],UDFL1);
- TEST SFX; # NEXT CATALOG #
- CNOERRJ:
- #
- * END OF CASE STATEMENT FOR *COPEN* ERROR RESPONSE.
- #
- #
- * THE FIRST WORD OF THE SUBCATALOG PREAMBLES
- * ARE SCANNED TO DETERMINE WHICH SUBCATALOGS EXIST.
- * FOR EACH EXISTING SUBCATALOG, THE NUMBER OF *FCT* ENTRIES
- * TO SCAN IS OBTAINED FROM THE FIRST WORD OF THE SUBCATALOG
- * PREAMBLE.
- #
- SLOWFOR SMX = 1 STEP 1 UNTIL MAXSM
- DO
- BEGIN # FOR EACH SUBCATALOG #
- IF PRM$SCW1[SMX] EQ 0
- THEN
- BEGIN
- TEST SMX;
- END
- #
- * READ THE CATALOG *AST* AND UPDATE IT BASED ON THE
- * ANALYSIS OF EACH *FCT* ENTRY IN THE SUBCATALOG.
- #
- CRDAST(NAMEFAM[FMX],SFX,PRM$SMID[SMX], ##
- ASTBADR,QRADDR,CR);
- #
- * SIMULATED CASE STATEMENT FOR *CRDAST* ERROR PROCESSING.
- #
- GOTO CRERJMP[CR];
- CRINTLKJ:
- CRCIOERRJ:
- TEST SFX;
- CRNOERRJ:
- #
- * END OF SIMULATED CASE STATEMENT FOR *CRDAST* ERROR PROCESSING.
- #
- SLOWFOR FCTX = MAXGRT STEP 1 ##
- WHILE FCTX LQ (PRM$ENTRC[SMX] + 15) ##
- AND PRM$ENTRC[SMX] GR 0
- DO
- BEGIN # FOR ALL *FCT* ENTRIES FOR THIS SUBCATALOG #
- ACQ$FCT(NAMEFAM[FMX],SFX,PRM$SMID[SMX],FCTX, ##
- QADDR,QRADDR,CER );
- #
- * SIMULATED CASE STATEMENT FOR *ACQ$FCT* ERROR PROCESSING.
- #
- GOTO CGERJMP[CER];
- CGCIOERRJ:
- CGINTLKJ:
- TEST SFX;
- CGNOERRJ:
- CRAST(FCTX,QADDR,ASTBADR);
- UASTPRM(NAMEFAM[FMX],SFX,SMX,QADDR,STAT);
- RLS$FCT(QADDR,0,CER);
- IF CER NQ CMASTAT"NOERR"
- THEN
- BEGIN
- GOTO RLSERR;
- END
- END # FOR ALL *FCT* ENTRIES FOR THIS SUBCATALOG #
- #
- * END OF SIMULATED CASE STATEMENT FOR *ACQ$FCT* PROCESSING.
- #
- TEMPCHAR[0] = PRM$SMID[SMX];
- BAD$SUB[0] = CHARSUB[0];
- MSG$LINE[0] = " AST UPDATED.";
- MESSAGE(MSGBUF[0],UDFL1);
- MSG$LINE[0] = MSG$TEXT[0];
- RMVBLNK(MSGBUF[0],40);
- MESSAGE(MSGBUF[0],UDFL1);
- MESSAGE(BADSUB[0],UDFL1);
- END # FOR EACH SUBCATALOG #
- END # FOR EACH SUBFAMILY #
- END # FOR EACH FAMILY WITH EIGHT SUBFAMILY CATALOGS #
- RETURN;
- MOCTFULLJ:
- MFOPENJ:
- COCTFULLJ:
- CFOPENJ:
- CRNOTOPENJ:
- CRNOSUBCATJ:
- CGNOTOPENJ:
- CGNOSUBCATJ:
- CGORDERRJ:
- RLSERR:
- FE$RTN[0] = "OPENCAT.";
- MESSAGE(FEMSG,UDFL1); # EXEC ABNORMAL, OPENCAT #
- ABORT;
- END # OPENCAT #
- TERM
- PROC SET0100;
- # TITLE SET0100 - PRESETS COMMON AREA(S) USED BY (1,0). #
- BEGIN # SET0100 #
- #
- ** SET0100 - PRESETS COMMON AREA USED BY (1,0).
- *
- * *SET0100* IS A NON-EXECUTABLE ROUTINE WHICH PRESETS
- * ANY COMMON AREA(S) USED EXCLUSIVELY BY THE (1,0) OVERLAY.
- * THIS IS DONE VIA A *CONTROL PRESET* DIRECTIVE.
- *
- #
- DEF LISTCON #0#;
- *CALL COMBFAS
- CONTROL PRESET;
- *CALL COMXINT
- END # SET0100 #
- TERM
- PROC TERMCAT;
- # TITLE TERMCAT - CLOSES THE CATALOGS AND SMMAPS. #
- BEGIN # TERMCAT #
- #
- ** *TERMCAT* - CLOSES THE CATALOGS AND SMAMAPS.
- *
- * THIS PROCEDURE CLOSES THE SFM CATALOGS AND SMAMAPS.
- *
- * PROC TERMCAT
- *
- * EXIT EACH SFM CATALOG AND SMMAP IS CLOSED.
- #
- #
- **** PROC TERMCAT - XREF LIST BEGIN.
- #
- XREF
- BEGIN
- PROC CCLOSE; # CLOSES THE CATALOGS #
- PROC MCLOSE; # CLOSES THE SMAMAPS #
- END
- #
- **** PROC TERMCAT - XREF LIST END.
- #
- DEF LISTCON #0#; # DO NOT LIST COMDECKS #
- *CALL COMBFAS
- *CALL COMBCMD
- ITEM CSTAT U; # STATUS RETURNED FROM CCLOSE #
- ITEM I U; # LOOP COUNTER #
- #
- * CLOSE THE CATALOGS FOR EACH FAMILY AND SUB-FAMILY
- #
- FASTFOR I = 1 STEP 1 UNTIL OCTLEN
- DO
- BEGIN
- IF OCT$W1[I] NQ 0
- THEN
- BEGIN
- CCLOSE(OCT$FAM[I],OCT$SUBF[I],0,CSTAT);
- END
- END
- #
- * CLOSE ALL THE SMAMAPS
- #
- FASTFOR I = 1 STEP 1 UNTIL MAXSM
- DO
- BEGIN
- IF OMT$OPEN[I]
- THEN
- BEGIN
- MCLOSE(I,CSTAT);
- END
- END
- END # TERMCAT #
- TERM # TERMCAT #
- PROC TERMSCP;
- # TITLE TERMSCP - RELINQUISHES SCP STATUS. #
- BEGIN # TERMSCP #
- #
- ** TERMSCP - RELINQUISHES SCP STATUS.
- *
- * THIS PROCEDURE ISSUES AN SF.EXIT.
- *
- * PROC TERMSCP
- *
- #
- #
- **** PROC TERMSCP - XREF LIST BEGIN.
- #
- XREF
- BEGIN
- PROC SFCALL;
- END
- #
- **** PROC TERMSCP - XREF LIST END.
- #
- DEF LISTCON #0#; # DO NOT LIST COMDECKS #
- *CALL COMBFAS
- *CALL COMBUCR
- #
- * ISSUE AN SF.EXIT.
- #
- SFFC = SFEXIT;
- SFCALL(SFBLKPTR,RCL);
- END # TERMSCP #
- TERM
- PROC WRAPUP;
- # TITLE WRAPUP - WRAP-UP PROCESSING PRIOR TO NORMAL TERMINATION. #
- BEGIN # WRAPUP #
- #
- ** WRAPUP - WRAPUP PROCESSING PRIOR TO NORMAL TERMINATION.
- *
- * THIS PROCEDURE DOES THE WRAP-UP PROCESSING PRIOR TO NORMAL
- * TERMINATION.
- *
- * PROC WRAPUP
- *
- * MESSAGES CPU SECONDS = XXX.
- * CPU PERCENT = XX.X.
- * FL CHANGES = XXX.
- * MAXIMUM FL = XXX.
- * OVERLAY LOADS = XXX.
- * FILES STAGED = XXX.
- * FILES DESTAGED = XXX.
- *
- #
- XREF
- BEGIN
- PROC MESSAGE; # INTERFACE TO *MESSAGE* MACRO #
- PROC RTIME; # INTERFACE TO *RTIME* MACRO #
- PROC TERMCAT; # CLOSES THE CATALOGS AND SMAMAPS
- #
- PROC TERMSCP; # RELINQUISHES SCP STATUS #
- PROC TIME; # INTERFACE TO *TIME* MACRO #
- FUNC XCDD C(6); # CONVERT TO DECIMAL DISPLAY #
- END
- #
- **** PROC WRAPUP - XREF LIST END.
- #
- DEF LISTCON #0#; # DO NOT LIST COMDECKS #
- *CALL COMBFAS
- *CALL COMXMSC
- *CALL COMXOVL
- ARRAY WRAPMESS [0:0] S(3);
- BEGIN
- ITEM WRAPFILL1 C(00,00,01) = [" "]; # LEADING BLANK #
- ITEM WRAPDESC C(00,06,14); # MSG HEADER #
- ITEM WRAPEQ C(01,30,02) = ["= "]; # EQUAL SIGN #
- ITEM WRAPQTY C(01,42,06); # QUANTITY #
- ITEM WRAPPRD C(02,18,01) = ["."]; # PERIOD #
- ITEM WRAPTERM U(02,24,12) = [0]; # MSG TERMINATOR #
- END
- ARRAY CTIMESTAT [0:0] S(1); # ACCUMULATED JOB TIME #
- BEGIN
- ITEM CTIMSECS U(00,24,24); # JOB SECONDS #
- ITEM CTIMMILS U(00,48,12); # JOB MILLESECONDS #
- END
- ITEM PERCENT I; # PERCENT OF MACHINE TIME #
- ITEM RESULT C(10); # DISPLAY CODE RESULT #
- TERMCAT;
- TERMSCP;
- #
- * WRITE SYSTEM DAYFILE MESSAGES.
- #
- WRAPDESC[0] = "CPU SECONDS";
- TIME(CTIMESTAT);
- RESULT = XCDD(CTIMSECS[0]);
- WRAPQTY[0] = C<4,6>RESULT;
- MESSAGE(WRAPMESS,SYSUDF1);
- WRAPDESC[0] = "CPU PERCENT";
- RTIME(RTIMESTAT);
- PERCENT = (CTIMSECS[0] * 10000) / (RTIMSECS[0] - FIRSTRTIME) + 5
- ;
- RESULT = XCDD(PERCENT);
- C<0,4>WRAPQTY[0] = C<4,4>RESULT;
- C<4,1>WRAPQTY[0] = ".";
- C<5,1>WRAPQTY[0] = C<8,1>RESULT;
- MESSAGE(WRAPMESS,SYSUDF1);
- WRAPDESC[0] = "FL CHANGES";
- RESULT = XCDD(NFLCHNG);
- WRAPQTY[0] = C<4,6>RESULT;
- MESSAGE(WRAPMESS,SYSUDF1);
- WRAPDESC[0] = "MAXIMUM FL";
- RESULT = XCDD(MAX$FL);
- WRAPQTY[0] = C<4,6>RESULT;
- MESSAGE(WRAPMESS,SYSUDF1);
- WRAPDESC[0] = "OVERLAY LOADS";
- RESULT = XCDD(OVLDCNT);
- WRAPQTY[0] = C<4,6>RESULT;
- MESSAGE(WRAPMESS,SYSUDF1);
- WRAPDESC[0] = "FILES STAGED";
- RESULT = XCDD(STGCNT);
- WRAPQTY[0] = C<4,6>RESULT;
- MESSAGE(WRAPMESS,SYSUDF1);
- WRAPDESC[0] = "FILES DESTAGED";
- RESULT = XCDD(DSTCNT);
- WRAPQTY[0] = C<4,6>RESULT;
- MESSAGE(WRAPMESS,SYSUDF1);
- END # WRAPUP #
- TERM
cdc/nos2.source/opl871/sxinit.txt ยท Last modified: 2023/08/05 17:24 by Site Administrator