$CONTROL MAP,SOURCE,CODE                                                00010000
<< PROGEN -- MODULE 9 >>                                                00012000
<<HP32002C MPE SOURCE C.00.00>>                                         00014000
$COPYRIGHT     "(C) COPYRIGHT HEWLETT-PACKARD CO. 1980. ",            & 00016000
$     "THIS PROGRAM MAY BE USED WITH ONE COMPUTER SYSTEM AT A ",      & 00018000
$     "TIME AND SHALL NOT OTHERWISE BE RECORDED, TRANSMITTED OR ",    & 00020000
$     "STORED IN A RETRIEVAL SYSTEM.  COPYING OR OTHER REPRODUCTION ",& 00022000
$     "OF THIS PROGRAM EXCEPT FOR ARCHIVAL PURPOSES IS PROHIBITED ",  & 00024000
$     "WITHOUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY."   00026000
$CONTROL MAIN=PROGEN                                                    00028000
$THIRTY                                                                 00030000
$CONTROL PRIVILEGED                                                     00032000
$CONTROL UNCALLABLE                                                     00034000
            << >>                                                       00036000
            << PROGENITOR PROCESS >>                                    00038000
            << >>                                                       00040000
<< Move init. of TLT before start User Logging recovery.     >><<03771>>00042000
BEGIN                                                                   00044000
$INCLUDE INCLRIT                                               <<04824>>00046000
DEFINE                                                                  00048000
      A'              = ABSOLUTE        #,                              00050000
      DISABLE         = ASSEMBLE(SED 0) #,                              00052000
      ENABLE          = ASSEMBLE(SED 1) #,                              00054000
      PSEUDODISABLE   = ASSEMBLE(PSDB)  #,                              00056000
      PSEUDOENABLE    = ASSEMBLE(PSEB)  #,                              00058000
      THRU            = STEP 1 UNTIL    #,                              00060000
      OPTIONS   = OPTION PRIVILEGED,UNCALLABLE,INTERNAL #;              00062000
INTEGER                                                                 00064000
      X     = X    ,                                                    00066000
      DB0   = DB+0 ,                                                    00068000
      DB1   = DB+1 ,                                                    00070000
      S0    = S-0  ,                                                    00072000
      S1    = S-1  ,                                                    00074000
      S2    = S-2  ,                                                    00076000
      S3    = S-3  ,                                           <<00.02>>00078000
      XREG  = X    ;                                                    00080000
INTEGER POINTER                                                         00082000
      PS0   = S-0  ,                                                    00084000
      PS1   = S-1  ;                                                    00086000
LOGICAL POINTER                                                         00088000
      LPS0  = S-0  ;                                                    00090000
BYTE POINTER                                                            00092000
      BPS0  = S-0  ;                                                    00094000
$PAGE "***   GLOBAL CONSTANTS   ***"                                    00096000
EQUATE                                                                  00098000
   <<FIXED CELLS>>                                                      00100000
      CSTB        = 0        ,                                          00102000
      XCST        = 1        ,                                          00104000
      DSTB        = 2        ,                                          00106000
      PCBB        = 3        ,                                          00108000
      CPCB        = 4        ,                                          00110000
      QI          = 5        ,                                          00112000
      ZI          = 6        ,                                          00114000
   <<PROCESS NOS>>                                                      00116000
      UCOPPCBN    = 2        ,                                          00118000
      DRECPCBN    = 4        ,                                          00120000
      LOGPCBN     = 7        ,                                          00122000
      MEMLPCBN    = 11       ,                                          00124000
   <<TABLES/DST/SIR/SIZE>>                                              00126000
      DSTSIZE     = 4        ,                                          00128000
      PCBSIZE     = 16       ,                                          00130000
      LDTDST      = 14       ,                                          00132000
      LDTSIR      = 10       ,                                          00134000
      LDTSIZE     = 5        ,                                          00136000
      LDTSIZE1    = LDTSIZE-1,                                          00138000
      LPDTDST     = 13       ,                                          00140000
      LPDTSIR     = 9        ,                                          00142000
      LPDTSIZE    = 2        ,                                          00144000
      LPDTSIZE1   = LPDTSIZE-1,                                         00146000
      JMATDST     = 25       ,                                          00148000
      JMATSIR     = 15       ,                                          00150000
      JMATSIZE    = 26       ,                                          00152000
      IDDDST      = 45       ,                                          00154000
      IDDSIR      = 3        ,                                          00156000
      ODDDST      = 46       ,                                          00158000
      ODDSIR      = 4        ,                                          00160000
      JPCNTDST    = 24       ,                                          00162000
      RINSDST     = 22       ,                                          00164000
      LOGONDST1   = 47       ,                                          00166000
      LOGONDST2   = 48       ;                                 <<04824>>00168000
$PAGE "***   SYSGLOB / LDT / LPDT   ***"                                00172000
   <<SYSTEM GLOBAL>>                                                    00174000
EQUATE                                                                  00176000
      SYSDB          = 512   ,  <<SYSTEM DB OFFSET>>                    00178000
      PCBTBASE       = 3     ,                                          00180000
      LPDTBASE       = 8     ,                                          00182000
      JOBSYNC        = %121  ,                                          00184000
      SYSUP          = %73   ,                                          00186000
      CONSOL         = %74   ,                                          00188000
      UPDATEL        = SYSDB+%114,  <<UPDATE LEVEL>>                    00190000
      FIXL           = SYSDB+%115,  <<FIX LEVEL>>                       00192000
      WELCOME        = %277  ,                                          00194000
      DSLINE'PLAB    = %341  ,                                 <<DS>>   00196000
      MPLINE'PLAB    = %374  ,                               <<MP.00>>  00198000
      SESSION1 = %214,        <<JOB # OF 1ST CONSOLE SESSION>> <<00552>>00200000
      MRJE'PLAB      = %375  ,                                <<MRJE>>  00202000
      EXTLAB'3270    = %73   ,  << CONS3270 PLABEL, SYSEXT >>  <<01165>>00204000
      SYSEXTPTR      = %377  ,  << SYSDB PTR TO SYSGLOBEXT >>  <<01165>>00206000
      LOGINFO        = %167  ,                                 <<00.PV>>00208000
      PVPROC         = %363  ,  <<PV RECOGN. PROCESS>>         <<00.PV>>00210000
      VMOUNTLOC      = %365  ;  <<PV ENABLED INFO>>            <<RH.PV>>00212000
DEFINE                                                                  00214000
      ABSYS          = %1000 #,                                         00216000
      ABSYS'SYSUP    = A'(ABSYS+SYSUP)     #,                           00218000
      ABSYS'CONSOL   = A'(ABSYS+CONSOL)    #,                           00220000
CONSOLELDEV=ABSYS'CONSOL.(8:8)#,   <<SYSTEM CONSOLE DEVICE #>> <<00552>>00222000
DIT'TERM=DIT+7).(5:5#,      <<DIT TERM TYPE>>                           00224000
DIT'HSTATE=DIT+13).(4:3#,     <<DIT HANGUP STATE>>             <<00632>>00226000
DIT'UPBIT=DIT).(1:1#,    <<DIT UP BIT>>                                 00228000
      ABSYS'DSLINE   = A'(ABSYS+DSLINE'PLAB)#,                 <<DS>>   00230000
      ABSYS'MPLINE   = A'(ABSYS+MPLINE'PLAB)#,               <<MP.00>>  00232000
      ABSYS'MRJE     = A'(ABSYS+MRJE'PLAB)#,                  <<MRJE>>  00234000
      PLABEL3270     = SYSGLOBEXT(EXTLAB'3270)#,               <<01165>>00236000
      ABSYS'JOBSYNC  = A'(ABSYS+JOBSYNC)   #,                           00238000
        JOBREADY'F   = 13:1                #,                           00240000
        DEVFREED'F   = 14:1                #,                           00242000
        JOBWAITING'F = 15:1                #,                           00244000
      ABSYS'WELCOME  = A'(ABSYS+WELCOME)   #,                           00246000
      ABSYS'LOGINFO  = A'(ABSYS+LOGINFO)   #,                  <<00.PV>>00248000
      ABSYS'PVPROC   = A'(ABSYS+PVPROC )   #,                  <<00.PV>>00250000
      ABSYS'VMOUNT   = A'(ABSYS+VMOUNTLOC) #;                  <<RH.PV>>00252000
DEFINE  LGNAME   =    BTABINDEX#;                              <<00651>>00254000
POINTER                                                                 00256000
      SYSGLOBEXT     = SYSEXTPTR   ,                           <<01165>>00258000
      SYS'PCBTP      = PCBTBASE    ,                                    00260000
      SYS'LPDTP      = LPDTBASE    ;                                    00262000
                                                               <<02856>>00264000
<< LPDT Definitions >>                                         <<02856>>00266000
                                                               <<02856>>00268000
DEFINE                                                         <<02856>>00270000
   LOGON =      (11:1)#, << LPDT entry word 1, terminal >>     <<04691>>00272000
                            << is in a logon sequence. >>      <<02856>>00274000
$PAGE "***   PROGEN VARIABLES   ***"                                    00276000
  LPDT'VIRTUAL=0).(0:1#,                                       <<04691>>00278000
  LPDT'MAXDEV=0).(0:8#;                                        <<04691>>00280000
   LOGICAL ARRAY LOGTAB(*) = DB;                               <<00651>>00282000
   BYTE ARRAY BLOGTAB(*) = DB;                                 <<00651>>00284000
ARRAY   MSGX(0:4) := "*INVALID* " ;                                     00286000
ARRAY   MSGY(0:4) := "*WELCOME* " ;                                     00288000
BYTE ARRAY MSGZ(0:4) := "SHUT",0; <<GENMSG NEEDS 0 TERMINATOR>><<02315>>00290000
   BYTE ARRAY MSGEQ(0:1):="=",0;<<GENMSG NEEDS 0 TERMINATOR>>  <<KS.01>>00292000
                                                                        00294000
LOGICAL                                                                 00296000
        SAVE'LOG'INFO,                                         <<04845>>00298000
        PIN     ,                                                       00300000
        UP,                                                    <<00552>>00302000
        CHAR    ,                                                       00304000
        CNT     ,                                                       00306000
        OK      ;                                                       00308000
LOGICAL MESSAGE'STATUS;                                        <<03518>>00310000
INTEGER                                                                 00312000
        TERM,DIT,                                              <<00552>>00314000
        COMLGTH ,                                                       00316000
        COMNO   ,                                                       00318000
        OLDSLIMIT ,      <<LIMITS B4 "=LOGOFF">>                        00320000
        OLDJLIMIT := -1 ;<<-1 => NOT IN LOGOFF MODE>>                   00322000
                                                                        00324000
ARRAY BUF(0:36);                                                        00326000
BYTE ARRAY BBUF(*) = BUF;                                               00328000
BYTE POINTER BP1;                                                       00330000
BYTE ARRAY                                                              00332000
      DICT (0:389) :=                                          <<01165>>00334000
                       4, 2,"UP",                                       00336000
                       6, 4,"DOWN",                                     00338000
                       7, 5,"REPLY",                                    00340000
                       6, 4,"TELL",                                     00342000
                       6, 4,"WARN",                                     00344000
                       7, 5,"SHOWQ",                                    00346000
                      10, 8,"ABORTJOB",                                 00348000
                       6, 4,"GIVE",                                     00350000
                       6, 4,"TAKE",                                     00352000
                       9, 7, "ABORTIO",                                 00354000
                      10, 8,"SHUTDOWN",                                 00356000
                       9, 7,"SESSION",                                  00358000
                       8, 6,"ACCEPT",                                   00360000
                       8, 6,"REFUSE",                                   00362000
                       9, 7,"SHOWJOB",                                  00364000
                       8, 6,"LOGOFF",                                   00366000
                       7, 5, "LOGON",                                   00368000
                       9,7,"WELCOME",                          <<C0.00>>00370000
                       7,5,"LIMIT",                            <<C0.00>>00372000
                       9,7,"STREAMS",                          <<C0.00>>00374000
                       10,8,"JOBFENCE",                        <<C0.00>>00376000
                       10,8,"OUTFENCE",                        <<C0.00>>00378000
                       9, 7, "SHOWDEV",                        <<C0.00>>00380000
                       7, 5, "SPOOL",                          <<C0.00>>00382000
                       8, 6, "ALTJOB",                         <<C0.00>>00384000
                       8, 6, "SHOWIN",                         <<C0.00>>00386000
                       9, 7, "SHOWOUT",                        <<C0.00>>00388000
                       8, 6, "DELETE",                         <<C0.00>>00390000
                       9, 7, "ALTFILE",                        <<C0.00>>00392000
                      10, 8, "BREAKJOB",                                00394000
                      11, 9, "RESUMEJOB",                               00396000
                      10, 8, "SHOWTIME",                                00398000
                       8, 6, "HEADON",                                  00400000
                       9, 7, "HEADOFF",                                 00402000
                       8, 6, "RECALL",                                  00404000
                       8, 6, "DSLINE",                         <<DS>>   00406000
                       8, 6, "MPLINE",                       <<MP.00>>  00408000
                       6, 4, "MRJE",                          <<MRJE>>  00410000
                       6, 4, "3270",                           <<00182>>00412000
                       9, 7, "SHOWCOM",                        <<01165>>00414000
                       5, 3, "MON",                                     00416000
                       6, 4, "MOFF",                                    00418000
                       8, 6, "VMOUNT",                         <<RH.PV>>00420000
                       7, 5, "MOUNT",                          <<RH.PV>>00422000
                      10, 8, "DISMOUNT",                       <<RH.PV>>00424000
                       7, 5, "DSTAT",                          <<RH.PV>>00426000
                       8, 6, "VSUSER",                         <<RH.PV>>00428000
                       10, 8, "DOWNLOAD",                      <<00176>>00430000
     5,3,"LOG",                                                <<00506>>00432000
      0;                                                       <<00506>>00434000
                                                                        00436000
DOUBLE                                                                  00438000
         DESCRIP1  ,                                                    00440000
         DESCRIP2  ,                                                    00442000
         DESCRIP3  ,                                                    00444000
         DESCRIP4  ,                                                    00446000
         DESCRIP5  ,                                                    00448000
         DESCRIP6  ;                                                    00450000
BYTE POINTER                                                            00452000
         PARAM1 = DESCRIP1    ,                                         00454000
         PARAM2 = DESCRIP2    ,                                         00456000
         PARAM3 = DESCRIP3    ,                                         00458000
         PARAM4 = DESCRIP4    ,                                         00460000
         PARAM5 = DESCRIP5    ,                                         00462000
         PARAM6 = DESCRIP6    ;                                         00464000
BYTE                                                                    00466000
         LEN1   = DESCRIP1 + 1   ,                                      00468000
         LEN2   = DESCRIP2 + 1   ,                                      00470000
         LEN3   = DESCRIP3 + 1   ,                                      00472000
         LEN4   = DESCRIP4 + 1   ,                                      00474000
         LEN5   = DESCRIP5 + 1   ,                                      00476000
         LEN6   = DESCRIP6 + 1   ;                                      00478000
DOUBLE ARRAY                                                            00480000
         PARMS(*) = DESCRIP1     ;                                      00482000
INTEGER ARRAY                                                           00484000
         IPARMS(*) = DESCRIP1    ;                                      00486000
                                                               <<00552>>00488000
BYTE ARRAY HELLOSTRING(0:29); <<CONSOLE SESSION HELLO PARMS>>  <<00594>>00490000
INTEGER JOBNUM;                <<JOB # FOR CONSOLE SESSION>>   <<00552>>00492000
ARRAY SYS(0:3); <<NAME OF SYSTEM ACCOUNT>>                     <<00416>>00494000
INTEGER DUMMY;  <<DUMMY ARRAY FOR DIRECSCAN>>                  <<00416>>00496000
                                                               <<03100>>00498000
EQUATE               << Messages EQUATEs. >>                   <<03100>>00500000
   SYSSET              = 1,   << System message set. >>        <<03100>>00502000
   NO'LOG'PROC         = 298; << INITIAL didn't create log >>  <<03100>>00504000
                              <<    process.               >>  <<03100>>00506000
<< The following code was added to support privileged mode >>  <<04650>>00508000
<< bounds checking. The low core limit found in SYSDB 20,21>>  <<04650>>00510000
<< is transfered to extended CPU registers along with the  >>  <<04650>>00512000
<< address of the ICS base found at ABSOLUTE (5).          >>  <<04650>>00514000
                                                               <<04650>>00516000
DEFINE   CPUNUM   = ASSEMBLE(PCN)#;      << Get CPU number >>  <<04650>>00518000
                                                               <<04650>>00520000
DEFINE   SBL      = CON %20104, %12#;                          <<04650>>00522000
                                                               <<04650>>00524000
DEFINE   INIT'PMBCREGS=                                        <<04650>>00526000
                                                               <<04650>>00528000
  BEGIN                                                        <<04650>>00530000
  TOS:= 0;                                                     <<04650>>00532000
  ASSEMBLE (SBL);                                              <<04650>>00534000
  END#;                                                        <<04650>>00536000
                                                               <<04650>>00538000
EQUATE   SERIES64 = 4;                                         <<04650>>00540000
PROCEDURE HELP;                                                         00542000
   OPTION EXTERNAL;                                                     00544000
                                                                        00546000
LOGICAL PROCEDURE SETSYSDB;                                             00548000
   OPTION EXTERNAL;                                                     00550000
                                                                        00552000
PROCEDURE RESETDB(D);                                                   00554000
   VALUE   D;                                                           00556000
   LOGICAL D;                                                           00558000
   OPTION EXTERNAL;                                                     00560000
                                                                        00562000
LOGICAL PROCEDURE EXCHANGEDB(DSTX);                                     00564000
   VALUE   DSTX;                                                        00566000
   LOGICAL DSTX;                                                        00568000
   OPTION EXTERNAL;                                                     00570000
                                                                        00572000
PROCEDURE LOG;                                                          00574000
   OPTION EXTERNAL;                                                     00576000
                                                                        00578000
PROCEDURE LOG6 (NJ, NS, NT, SIX);                                       00580000
   VALUE NJ, NS, NT, SIX;                                               00582000
   INTEGER NJ, NS, NT, SIX;                                             00584000
   OPTION EXTERNAL;                                                     00586000
                                                                        00588000
PROCEDURE DELAY (MSEC);                                                 00590000
   VALUE MSEC;                                                          00592000
   DOUBLE MSEC;                                                         00594000
   OPTION EXTERNAL;                                                     00596000
                                                                        00598000
INTEGER PROCEDURE GENMSG(SETNO,MSGNO,MASK,A,B,C,D,E,           <<0U.EB>>00600000
      DEST,REPLY,BUFF,DST,IOTYPE);                             <<0U.EB>>00602000
   VALUE SETNO,MSGNO,MASK,A,B,C,D,E,DEST,REPLY,BUFF,           <<0U.EB>>00604000
      DST,IOTYPE;                                              <<0U.EB>>00606000
   LOGICAL SETNO,MSGNO,MASK,A,B,C,D,E,DEST,REPLY,BUFF,         <<0U.EB>>00608000
      DST,IOTYPE;                                              <<0U.EB>>00610000
   OPTION VARIABLE,EXTERNAL;                                   <<0U.EB>>00612000
                                                               <<0U.EB>>00614000
PROCEDURE INITMSG; OPTION EXTERNAL;                            <<0U.EB>>00616000
                                                               <<0U.EB>>00618000
LOGICAL PROCEDURE SYSPROC(LPIN);                                        00620000
   VALUE   LPIN;                                                        00622000
   LOGICAL LPIN;                                                        00624000
   OPTION EXTERNAL;                                                     00626000
                                                                        00628000
PROCEDURE WAIT(WF,DC);                                                  00630000
   VALUE   WF,DC;                                                       00632000
   LOGICAL WF,DC;                                                       00634000
   OPTION EXTERNAL;                                                     00636000
                                                                        00638000
PROCEDURE UNIMPEDE(PCBPT);                                     <<00.02>>00640000
   VALUE   PCBPT;                                              <<00.02>>00642000
   INTEGER PCBPT;                                              <<00.02>>00644000
   OPTION EXTERNAL;                                            <<00.02>>00646000
                                                               <<00.02>>00648000
PROCEDURE AWAKE(PIN,AF,WF);                                             00650000
   VALUE   PIN,AF,WF;                                                   00652000
   INTEGER PIN,AF,WF;                                                   00654000
   OPTION EXTERNAL;                                                     00656000
                                                                        00658000
LOGICAL PROCEDURE GETSIR(N);                                            00660000
   VALUE   N;                                                           00662000
   LOGICAL N;                                                           00664000
   OPTION EXTERNAL;                                                     00666000
                                                                        00668000
PROCEDURE RELSIR(N,B);                                                  00670000
   VALUE   N,B;                                                         00672000
   LOGICAL N,B;                                                         00674000
   OPTION EXTERNAL;                                                     00676000
                                                                        00678000
INTEGER PROCEDURE READ(MES,XL);                                         00680000
   VALUE   XL;                                                          00682000
   INTEGER XL;                                                          00684000
   ARRAY   MES;                                                         00686000
   OPTION EXTERNAL;                                                     00688000
                                                                        00690000
PROCEDURE PRINT(MES,L,T);                                               00692000
   VALUE   L,T;                                                         00694000
   INTEGER L,T;                                                         00696000
   ARRAY   MES;                                                         00698000
   OPTION EXTERNAL;                                                     00700000
                                                                        00702000
DOUBLE PROCEDURE ATTACHIO(P1,P2,P3,P4,P5,P6,P7,P8,P9);                  00704000
   VALUE      P1,P2,P3,P4,P5,P6,P7,P8,P9;                               00706000
   INTEGER    P1,P2,P3,P4,P5,P6,P7,P8,P9;                               00708000
   OPTION EXTERNAL;                                                     00710000
                                                               <<00.05>>00712000
PROCEDURE INITIO (FLAG);                                       <<00.05>>00714000
   VALUE   FLAG;                                               <<00.05>>00716000
   LOGICAL FLAG;                                               <<00.05>>00718000
   OPTION EXTERNAL;                                            <<00.05>>00720000
                                                                        00722000
PROCEDURE SETUP'TAPES;                                         <<02565>>00724000
   OPTION EXTERNAL;                                            <<02565>>00726000
                                                                        00728000
LOGICAL PROCEDURE CONSRECALL(BP1);                             <<04526>>00730000
BYTE ARRAY BP1;                                                <<04526>>00732000
OPTION EXTERNAL;                                               <<04526>>00734000
                                                               <<02565>>00736000
PROCEDURE ABORTIO(LDEV);                                                00738000
   VALUE LDEV;                                                          00740000
   INTEGER LDEV;                                                        00742000
   OPTION EXTERNAL;                                                     00744000
                                                                        00746000
PROCEDURE STARTCLOCK(YEARDAY,TIMEDAY);                         <<00.05>>00748000
   VALUE   YEARDAY,TIMEDAY;                                    <<00.05>>00750000
   INTEGER YEARDAY;                                            <<00.05>>00752000
   DOUBLE  TIMEDAY;                                            <<00.05>>00754000
   OPTION EXTERNAL;                                            <<00.05>>00756000
                                                               <<00.01>>00758000
PROCEDURE QUEUEPROC(PROCSYSDBINX,QUEUENAME,LOCATION);          <<MPEIV>>00760000
VALUE PROCSYSDBINX,QUEUENAME,LOCATION;                         <<MPEIV>>00762000
INTEGER PROCSYSDBINX,QUEUENAME,LOCATION;                       <<MPEIV>>00764000
OPTION EXTERNAL;                                               <<MPEIV>>00766000
DOUBLE PROCEDURE TIMER;                                        <<MPEIV>>00768000
OPTION EXTERNAL;                                               <<MPEIV>>00770000
                                                                        00772000
LOGICAL PROCEDURE CONVERTDATE(DATE);VALUE DATE;                <<00.EB>>00774000
   BYTE POINTER DATE; OPTION EXTERNAL;                         <<00.EB>>00776000
                                                               <<00.EB>>00778000
DOUBLE PROCEDURE CONVERTTIME(PTR);VALUE PTR;                   <<00.EB>>00780000
   BYTE POINTER PTR; OPTION EXTERNAL;                          <<00.EB>>00782000
                                                               <<00.EB>>00784000
PROCEDURE DATE'LINE(BBUF);                                              00786000
   BYTE ARRAY BBUF;                                                     00788000
   OPTION EXTERNAL;                                                     00790000
                                                                        00792000
PROCEDURE DCU'REQUEST(PARM);                                   <<04183>>00794000
   VALUE PARM;                                                 <<04183>>00796000
   INTEGER PARM;                                               <<04183>>00798000
   OPTION EXTERNAL;                                            <<04183>>00800000
                                                               <<04183>>00802000
PROCEDURE REMRITENTRY(ADR);                                             00804000
   VALUE   ADR;                                                         00806000
   INTEGER ADR;                                                         00808000
   OPTION EXTERNAL;                                                     00810000
                                                                        00812000
DOUBLE PROCEDURE DIRECSCAN(A,B,C,D,E,F,G,H);                   <<00416>>00814000
VALUE A,B,H;                                                   <<00416>>00816000
INTEGER A,H;                                                   <<00416>>00818000
DOUBLE B;                                                      <<00416>>00820000
ARRAY C,D,E,G;                                                 <<00416>>00822000
INTEGER PROCEDURE F;                                           <<00416>>00824000
OPTION EXTERNAL,VARIABLE;                                      <<00416>>00826000
                                                               <<00416>>00828000
INTEGER PROCEDURE FAMILY(P,LP);                                         00830000
   VALUE   P,LP;                                                        00832000
   INTEGER P,LP;                                                        00834000
   OPTION EXTERNAL;                                                     00836000
                                                                        00838000
PROCEDURE SUDDENDEATH(N);                                               00840000
   VALUE   N;                                                           00842000
   INTEGER N;                                                           00844000
   OPTION EXTERNAL;                                                     00846000
                                                                        00848000
LOGICAL PROCEDURE CONSABORTJOB(BARRAY);                                 00850000
   BYTE ARRAY BARRAY;                                                   00852000
   OPTION EXTERNAL;                                                     00854000
                                                                        00856000
PROCEDURE WRITEDSEG (DSTX);                                             00858000
   VALUE DSTX;                                                          00860000
   INTEGER DSTX;                                                        00862000
   OPTION EXTERNAL;                                                     00864000
                                                                        00866000
LOGICAL PROCEDURE CONSSPOOL (PARMS);                                    00868000
   BYTE ARRAY PARMS;                                                    00870000
   OPTION EXTERNAL;                                                     00872000
                                                                        00874000
PROCEDURE INITSPOOLING;                                                 00876000
   OPTION EXTERNAL;                                                     00878000
                                                                        00880000
PROCEDURE SROOSTER (DEVICE);                                            00882000
   VALUE DEVICE;                                                        00884000
   INTEGER DEVICE;                                                      00886000
   OPTION EXTERNAL;                                                     00888000
                                                               <<00506>>00890000
PROCEDURE INITRECLOG;                                          <<00506>>00892000
OPTION EXTERNAL;                                               <<00506>>00894000
                                                               <<00506>>00896000
                                                                        00898000
LOGICAL PROCEDURE DELETEJOB (JMATP);                                    00900000
   VALUE JMATP;                                                         00902000
   INTEGER POINTER JMATP;                                               00904000
   OPTION EXTERNAL;                                                     00906000
                                                                        00908000
INTEGER PROCEDURE STARTDEVICE(A,B,C,D,E,F,G,H,I);              <<00552>>00910000
VALUE A,C,D;                                                   <<00552>>00912000
INTEGER A,C,G,H,I;                                             <<00552>>00914000
LOGICAL D;                                                     <<00552>>00916000
BYTE ARRAY B;                                                  <<00552>>00918000
INTEGER POINTER E,F;                                           <<00552>>00920000
OPTION EXTERNAL,VARIABLE;                                      <<00552>>00922000
                                                               <<00552>>00924000
   PROCEDURE LOG15(I,J,K,L);                                   <<KS.01>>00926000
   VALUE I,J,K,L;                                              <<KS.01>>00928000
   LOGICAL I,J,K,L;                                            <<KS.01>>00930000
   OPTION EXTERNAL;                                            <<KS.01>>00932000
                                                               <<03518>>00934000
PROCEDURE PROCESS'SYS'DISC'FREE'SPACE'MAPS (INIT);             <<03518>>00936000
   VALUE INIT;                                                 <<03518>>00938000
   LOGICAL INIT;                                               <<03518>>00940000
   OPTION EXTERNAL;                                            <<03518>>00942000
                                                               <<03518>>00944000
PROCEDURE PROCESS'DFS'ERROR (LDEV, ERROR'STATUS,               <<03518>>00946000
                             TYPE'OF'ERROR);                   <<03518>>00948000
   VALUE LDEV, ERROR'STATUS, TYPE'OF'ERROR;                    <<03518>>00950000
   INTEGER LDEV;                                               <<03518>>00952000
   LOGICAL ERROR'STATUS;                                       <<03518>>00954000
   INTEGER TYPE'OF'ERROR;                                      <<03518>>00956000
   OPTION EXTERNAL;                                            <<03518>>00958000
                                                               <<03518>>00960000
LOGICAL PROCEDURE PORTSTATUS (PORTNUMBER);                     <<03518>>00962000
   VALUE PORTNUMBER;                                           <<03518>>00964000
   INTEGER PORTNUMBER;                                         <<03518>>00966000
   OPTION EXTERNAL;                                            <<03518>>00968000
                                                               <<03518>>00970000
PROCEDURE RECEIVEMSG (PORTNUM, MSGLENGTH, FLAGS);              <<03518>>00972000
   VALUE PORTNUM, MSGLENGTH, FLAGS;                            <<03518>>00974000
   INTEGER PORTNUM, MSGLENGTH;                                 <<03518>>00976000
   LOGICAL FLAGS;                                              <<03518>>00978000
   OPTION EXTERNAL;                                            <<03518>>00980000
                                                               <<03518>>00982000
PROCEDURE PROCESS'PAGE'IO'ERROR (LDEV, PAGE, ERROR'STATUS);    <<03529>>00984000
   VALUE LDEV, PAGE, ERROR'STATUS;                             <<03518>>00986000
   INTEGER LDEV, PAGE;                                         <<03518>>00988000
   LOGICAL ERROR'STATUS;                                       <<03518>>00990000
   OPTION EXTERNAL;                                            <<03518>>00992000
                                                               <<03518>>00994000
                                                               <<KS.01>>00996000
INTRINSIC BINARY,ASCII,MYCOMMAND,SEARCH;                       <<RH.PV>>00998000
                                                               <<00594>>01000000
                                                               <<00205>>01002000
PROCEDURE SDFINIT(MODE);                                       <<00205>>01004000
VALUE MODE; INTEGER MODE;                                      <<00205>>01006000
OPTION EXTERNAL;                                               <<00205>>01008000
                                                               <<04165>>01010000
PROCEDURE STOP'ALL'USERLOGS;                                   <<04165>>01012000
   OPTION EXTERNAL;                                            <<04165>>01014000
                                                               <<04165>>01016000
                                                               <<00651>>01018000
$PAGE "CHECK'FOR'MESSAGE"                                      <<03518>>01020000
LOGICAL PROCEDURE CHECK'FOR'MESSAGE;                           <<03518>>01022000
                                                                        01024000
<<==============================================================        01026000
                                                                        01028000
      This procedure checks to see if any messages have been            01030000
   sent to PROGEN via the low level message system, port 0.             01032000
   If a message was recieved, the approriate procedure is               01034000
   called to process the message, then it checks to see if              01036000
   any other messages are waiting.                                      01038000
                                                                        01040000
      Currently only two types of messages are sent to                  01042000
   PROGEN, both by the Disc Free Space management code.  A              01044000
   message i.d. is the last word of the message, telling                01046000
   PROGEN which procedure to call.                                      01048000
                                                                        01050000
      Message i.d. 0 is a request to call Process'Dfs'Error             01052000
   to handle a fatal Disc Free Space error.  The four word              01054000
   message looks like this:                                             01056000
                                                                        01058000
      word 0 - ldev - ldev number of device that got the                01060000
               error.                                                   01062000
      word 1 - error status - Disc Free Space error status.             01064000
      word 2 - type of error - A code that indicates what was           01066000
               going on when the error occured.                         01068000
      word 3 - 0 - message i.d.                                         01070000
                                                                        01072000
      Message  i.d. 1 is a request to call                              01074000
   Process'Page'Io'Error to handle a I/O or checksum error that         01076000
   occured on the Disc Free Space bitmap.  The four word                01078000
   message looks like this:                                             01080000
                                                                        01082000
      word 0 - ldev - ldev number of the device that got the            01084000
                      error.                                            01086000
      word 1 - page - page number of the bit map page that              01088000
                      got the error.                                    01090000
      word 2 - error status - Disc Free Space error status.             01092000
      word 3 - 1 - message i.d.                                         01094000
                                                                        01096000
                                                                        01098000
   Parameters:                                                          01100000
      None.                                                             01102000
                                                                        01104000
   Returns:                                                             01106000
      TRUE - if any message where processed.                            01108000
      FALSE - if no messages where processed.                           01110000
                                                                        01112000
   Assumptions on entry:                                                01114000
      DB is at the stack.                                               01116000
                                                                        01118000
   Exit conditions:                                                     01120000
      DB is unchanged.                                                  01122000
                                                                        01124000
   Globals:                                                             01126000
      None.                                                             01128000
                                                                        01130000
   Externals:                                                           01132000
      Portstatus                                                        01134000
      Receivemsg                                                        01136000
      Suddendeath                                                       01138000
      Process'Dfs'Error                                                 01140000
      Print'Page'Io'Error                                               01142000
                                                                        01144000
   Intrinsics:                                                          01146000
      None.                                                             01148000
                                                                        01150000
   Callers:                                                             01152000
      PROGEN outer block.                                               01154000
                                                                        01156000
                                                                        01158000
   Fix ID:                                                              01160000
         This procedure was added as part of the new disc               01162000
      free space map changes.  The fix number on the                    01164000
      procedure header applies to the whole procedure.                  01166000
                                                                        01168000
   Changes:                                                             01170000
                                                                        01172000
                                                                        01174000
==============================================================>>        01176000
                                                                        01178000
BEGIN                                                                   01180000
                                                                        01182000
   LOGICAL MESSAGE'IN'PORT;                                             01184000
                                                                        01186000
   LOGICAL RETURN'VALUE = CHECK'FOR'MESSAGE;                            01188000
                                                                        01190000
   << - - - - - - - - - - >>                                            01192000
                                                                        01194000
   RETURN'VALUE := FALSE;                                               01196000
                                                                        01198000
   << Check for any messages in PORT 0, continue until                  01200000
      no messages are available.                        >>              01202000
                                                                        01204000
   DO                                                                   01206000
      BEGIN  << Check for waiting message >>                            01208000
                                                                        01210000
         MESSAGE'IN'PORT := PORTSTATUS (0);                             01212000
                                                                        01214000
         IF MESSAGE'IN'PORT THEN                                        01216000
            BEGIN   << Got a message >>                                 01218000
                                                                        01220000
               RETURN'VALUE := TRUE;                                    01222000
                                                                        01224000
               << Allocate buffer on TOS for message >>                 01226000
                                                                        01228000
               ASSEMBLE (ADDS 4);                                       01230000
                                                                        01232000
               << Read message >>                                       01234000
                                                                        01236000
               RECEIVEMSG (0, 4, 0);                                    01238000
               IF <> THEN                                               01240000
                  SUDDENDEATH (373);                                    01242000
                                                                        01244000
               << The type (I.D.) of the message will be on TOS >>      01246000
                                                                        01248000
               CASE TOS OF                                              01250000
                  BEGIN  << Process message >>                          01252000
                                                                        01254000
                     << 0 - call Process'Dfs'Error >>                   01256000
                                                                        01258000
                     PROCESS'DFS'ERROR (*, *, *);                       01260000
                                                                        01262000
                                                                        01264000
                     << 1 - Generate message for Page'Io'Error >>       01266000
                                                                        01268000
                     PROCESS'PAGE'IO'ERROR (*, *, *);          <<03529>>01270000
                                                                        01272000
                  END;   << Process message >>                          01274000
                                                                        01276000
            END;    << Got a message >>                                 01278000
                                                                        01280000
      END    << Check for waiting message >>                            01282000
   UNTIL NOT MESSAGE'IN'PORT;                                           01284000
                                                                        01286000
END;   << Check'For'Message >>                                          01288000
$PAGE "=SHUTDOWN & LOGOFF COMMANDS EXECUTOR"                   <<00594>>01290000
LOGICAL PROCEDURE CONSSHUTDOWN (PARMS);                                 01292000
   BYTE ARRAY PARMS;                                                    01294000
   OPTIONS;                                                             01296000
BEGIN                                                                   01298000
   ENTRY CONSLOGOFF;                                                    01300000
   INTEGER           RESULT            = CONSSHUTDOWN;                  01302000
   EQUATE            JOBSGONEMSG       = 206;                           01304000
   DEFINE            IODELAY           = 200D #;                        01306000
   DEFINE            HIGHESTDEVICE     = DB0.(0:8) #;                   01308000
   INTEGER POINTER   JMATP,            <<SCANNING JMAT PNTR>>  <<C0.00>>01310000
                     LIMITP;           <<JMAT TABLE END>>      <<C0.00>>01312000
   INTEGER           SAVESIR;                                  <<C0.00>>01314000
   INTEGER           LJLIM,            <<(LOCAL) JOB LIM>>     <<C0.00>>01316000
                     LSLIM;            <<(LOCAL) SESSION LIM>> <<C0.00>>01318000
   DEFINE            JMAT'CURSIZE  = DB0.(8:8)  #,             <<C0.00>>01320000
                     TBLQUANTUM  = 128  #,                     <<C0.00>>01322000
                     JM'JSTATE  = 0).(0:6  #;                  <<C0.00>>01324000
   EQUATE            JOBEXEC  = 2,                             <<C0.00>>01326000
                     JOBSUSP  = 4,                                      01328000
                     JOBINIT  = %60;                           <<C0.00>>01330000
   EQUATE            MEMLSTOP =   4;                           <<00.02>>01332000
   DEFINE            JMATSIZE  = DB1.(8:8) #;                  <<00731>>01334000
   INTEGER           JMATTOTAL         = DB+3,                 <<00731>>01336000
                     NUMJOBS           = DB+11,                <<00559>>01338000
                     NUMSESSIONS       = DB+9,                 <<00559>>01340000
                     JMAT'LOGOFF       = DB+7,                          01342000
                     JMAT'JLIMIT  = DB+10,                     <<C0.00>>01344000
                     JMAT'SLIMIT  = DB+8;                      <<C0.00>>01346000
   INTEGER POINTER   JMAT'ENTRYP  = DB+2;                      <<C0.00>>01350000
   INTEGER ARRAY     JMATNUMTYPE (*)   = DB+9;                 <<B0.06>>01352000
   DOUBLE            STOPBITS          = DB+%300;                       01354000
   INTEGER           NUMSTOPS          = DB+%302;                       01356000
   DOUBLE ARRAY      STOPS (*)         = DB+%304;                       01358000
   DOUBLE            CURRENTSTOP;                                       01360000
   INTEGER           X1                = CURRENTSTOP,                   01362000
                     WAITFIELD         = X1 +1;                         01364000
   DEFINE            PIN               = X1.(0:8) #,                    01366000
                     STOPBIT           = X1.(8:8) #;                    01368000
   BYTE              LDT'HIENTRY       = DB+0;                 <<C0.00>>01370000
   DEFINE            LD'USECOUNT       = 0  #,                 <<C0.00>>01372000
                     LD'SS             = 3).(0:2  #;           <<C0.00>>01374000
   EQUATE            INPUTSPOOLER      = 1,                    <<C0.00>>01376000
                     OUTPUTSPOOLER     = 2;                    <<C0.00>>01378000
   INTEGER POINTER   LDTP;             <<SCANNING LDT PNTR>>   <<C0.00>>01380000
   INTEGER           DEVX;             <<LOG DEV INDEX>>                01382000
   BYTE ARRAY        STOPBUF (0:15);   <<PARMARRAY FOR =SPOOL>><<C0.00>>01384000
   INTEGER ARRAY     LDTBASE(*)        = DB+0;  <<LDT TABLE>>  <<00.05>>01386000
   EQUATE            TERMTYPE          = 16;    <<TERMINAL>>   <<00.05>>01388000
SUBROUTINE STOPSPOOLERS (SPOOLERTYPE);                         <<C0.00>>01392000
   VALUE SPOOLERTYPE;                                          <<C0.00>>01394000
   INTEGER SPOOLERTYPE;                                        <<C0.00>>01396000
BEGIN                                                          <<C0.00>>01398000
   EXCHANGEDB (LDTDST);                                        <<C0.00>>01400000
   DEVX := LDT'HIENTRY;                                                 01402000
   DO BEGIN                                                             01404000
      TOS := SYS'LPDTP(DEVX*LPDTSIZE);                                  01406000
      IF < THEN                                                         01408000
         BEGIN                                                          01410000
         TOS := TOS LAND %77777;                                        01412000
         IF <> THEN                                                     01414000
            BEGIN                                                       01416000
            @LDTP := DEVX*LDTSIZE;                                      01418000
            IF LDTP(LD'SS) = SPOOLERTYPE THEN                           01420000
               BEGIN                                                    01422000
               EXCHANGEDB(0);                                           01424000
               MOVE STOPBUF := "   ";                                   01426000
               ASCII(DEVX,10,STOPBUF);                                  01428000
               IF NOT (CONSSPOOL(STOPBUF)) THEN                         01430000
                     SUDDENDEATH(372);                                  01432000
               EXCHANGEDB(LDTDST);                                      01434000
               WHILE LDTP(LD'USECOUNT) <> 0 DO                          01436000
                     DELAY(1000D);                                      01438000
               END;                                                     01440000
            END;                                                        01442000
         END;                                                           01444000
      DEL;                                                              01446000
      END                                                               01448000
   UNTIL (DEVX := DEVX - 1) = 0;                                        01450000
   EXCHANGEDB (0);                                             <<C0.00>>01452000
   END;    << STOPSPOOLERS >>                                  <<C0.00>>01454000
                                                               <<C0.00>>01456000
<< CONSSHUTDOWN >>                                                      01458000
   GOTO START;                                                          01462000
                                                                        01464000
CONSLOGOFF:                                                             01466000
   RESULT := RESULT -1;                                                 01468000
                                                                        01470000
START:                                                                  01472000
   SCAN PARMS WHILE %6440;                                     <<B0.01>>01474000
   IF NOCARRY THEN                                                      01476000
      BEGIN                            <<SYNTAX: SHOULD HAVE NO PARMS>> 01478000
      CONSSHUTDOWN := FALSE;                                            01480000
      RETURN;                                                           01482000
      END;                                                              01484000
   IF  (OLDJLIMIT <> -1)  AND  (RESULT = -1)  THEN             <<C0.00>>01486000
      << IGNORE THIS =LOGOFF, 'CAUSE ALREADY IN =LOGOFF MODE >><<C0.00>>01488000
      BEGIN                                                    <<02315>>01490000
      CONSSHUTDOWN := FALSE;                                   <<02315>>01492000
      RETURN;                                                  <<C0.00>>01494000
      END;                                                     <<02315>>01496000
                                                               <<C0.00>>01498000
<< TURN OFF SYSUP BIT IF =SHUTDOWN COMMAND >>                  <<02315>>01500000
   IF RESULT=0 THEN ABSYS'SYSUP := 0;                          <<02315>>01502000
                                                               <<02315>>01504000
<< PERFORM =LOGOFF: SAVE LIMITS AND RESET THEM TO ZERO >>      <<C0.00>>01506000
   ATTACHIO(CONSOLELDEV,0,0,0,31,0,0,0,%11);<<RESET CONS MODE>><<01303>>01508000
   EXCHANGEDB(JMATDST);                                                 01510000
   SAVESIR := GETSIR (JMATSIR);                                <<C0.00>>01512000
   IF LOGICAL(RESULT) THEN JMAT'LOGOFF.(0:1) := 1;                      01514000
   LJLIM := JMAT'JLIMIT;                                       <<C0.00>>01516000
   JMAT'JLIMIT := 0;                                           <<C0.00>>01518000
   LSLIM := JMAT'SLIMIT;                                       <<C0.00>>01520000
   JMAT'SLIMIT := 0;                                           <<C0.00>>01522000
   TOS:=NUMJOBS;   <<SAVE FOR SHUTDOWN LOG RECORD>>            <<00559>>01524000
   TOS:=NUMSESSIONS;                                           <<00559>>01526000
   TOS:=0;                                                     <<00559>>01528000
                                                               <<C0.00>>01530000
<< NO JOBS CAN START EXECUTION: ABORT ALL EXECUTING AND INITIALIZING >> 01532000
   DO BEGIN   <<WAIT FOR SON OF UCOP TO DISAPPEAR >>           <<SB.01>>01534000
   @JMATP := @JMAT'ENTRYP;                                     <<C0.00>>01536000
   @LIMITP := JMAT'CURSIZE *TBLQUANTUM -JMATSIZE;              <<C0.00>>01538000
   DO IF (JMATP <> 0)                                          <<C0.00>>01540000
            AND  ((JMATP (JM'JSTATE) = JOBEXEC)                <<C0.00>>01542000
                  OR (JMATP (JM'JSTATE) = JOBSUSP)                      01544000
                  OR (JMATP (JM'JSTATE) = JOBINIT)) THEN       <<C0.00>>01546000
         IF NOT (DELETEJOB (JMATP)) THEN                                01548000
               ASSEMBLE(HALT 8;BR *-1)                                  01550000
   UNTIL (@JMATP := @JMATP +JMATSIZE) > @LIMITP;               <<C0.00>>01552000
   RELSIR (JMATSIR, SAVESIR);                                  <<C0.00>>01554000
                                                                        01556000
<< WAIT FOR ALL JOB S TO BE PURGED >>                                   01558000
   DELAY(5000D); <<DELAY 5 SEC >>                              <<SB.01>>01560000
   END        <<WAIT FOR SON OF UCOP TO DISAPPEAR >>           <<SB.01>>01562000
   UNTIL SYS'PCBTP(SYSPROC(UCOPPCBN)+5).(8:8) = 0;             <<SB.01>>01564000
                                                                        01566000
   JMAT'LOGOFF.(0:1) := 0;                                              01568000
   EXCHANGEDB (0);                                                      01570000
                                                               <<00624>>01572000
<< GENMESSAGE NOW TAKES CARE OF ALLOCATING THE CONSOLE >>      <<01302>>01574000
                                                               <<00624>>01576000
   GENMSG(1,206,,,,,,,0);<<TELL OP EVERYBODY OFF>>             <<0U.EB>>01578000
                                                               <<04165>>01580000
   STOP'ALL'USERLOGS;    << Stops user logging processes >>    <<04165>>01582000
                                                               <<04165>>01584000
   IF LOGICAL (RESULT) THEN                                    <<C0.00>>01586000
      BEGIN    <<LOGOFF: SAVE OLD VALUES AND LEAVE>>           <<C0.00>>01588000
      OLDJLIMIT := LJLIM;                                      <<C0.00>>01592000
      OLDSLIMIT := LSLIM;                                      <<C0.00>>01594000
      RETURN;                                                  <<C0.00>>01596000
      END;                                                     <<C0.00>>01598000
                                                                        01600000
                                                                        01602000
<< *** SHUTDOWN CONTINUES AFTER LOGOFF *** >>                           01604000
   LOG6 (*, *, *, 6);                  <<SHUTDOWN LOG REC'D>>           01606000
                                                               <<C0.00>>01608000
<< STOP SPOOLERS >>                                            <<C0.00>>01610000
   MOVE STOPBUF := ("   ,STOP, DEFER", %15);                   <<C0.00>>01612000
   STOPSPOOLERS (OUTPUTSPOOLER);                               <<C0.00>>01614000
   MOVE STOPBUF (9) := "DELETE";                               <<C0.00>>01616000
   STOPSPOOLERS (INPUTSPOOLER);                                <<C0.00>>01618000
                                                               <<C0.00>>01620000
   SETSYSDB;                                                            01624000
<< STOP APPROPRIATE SYSTEM PROCESSES >>                                 01626000
   TOS := 0;                                                            01628000
   WHILE S0 < NUMSTOPS DO                                               01630000
      BEGIN                                                             01632000
      CURRENTSTOP := STOPS(S0);                                         01634000
      IF <> THEN                       <<STOP-PROCESS ENTRY>>           01636000
         BEGIN                                                          01638000
         TOS := PIN *PCBSIZE;          <<SETUP FOR AWAKE>>              01640000
         TOS := WAITFIELD;                                              01642000
         TOS := 2;                                                      01644000
         TOS := (XREG := STOPBIT) &LSR(4);                              01646000
         TOS := TOS +@STOPBITS;                                         01648000
         TOS := PS0;                                                    01650000
         ASSEMBLE (TSBC 0, X);                                          01652000
         DISABLE;                                                       01654000
         PS1 := TOS;                   <<REQUEST STOP VIA SYSGLOB BIT>> 01656000
         DEL;                                                           01658000
         IF S3 = MEMLSTOP THEN UNIMPEDE(S2);                   <<00.02>>01660000
         AWAKE (*, *, *);              <<AWAKE (IF NOT ALREADY, AND>>   01662000
                                       <<WAIT>>                         01664000
         <<STOPPED PROCESS SIGNALLED COMPLETION >>                      01666000
         END;                                                           01668000
      TOS := TOS +1;                                                    01670000
      END;                                                              01672000
                                                                        01674000
<< WRITE OUT RECOVERABLE SYSTEM TABLES >>                      <<C0.00>>01676000
   WRITEDSEG (RINSDST);                                                 01678000
   WRITEDSEG (JMATDST);                                        <<C0.00>>01680000
   WRITEDSEG (ODDDST);                                         <<C0.00>>01682000
   WRITEDSEG (IDDDST);                                         <<C0.00>>01684000
                                                               <<B0.01>>01686000
<< DELAY UNTIL ALL I/O COMPLETE >>                                      01688000
   RESETDB(-1);                                                <<00.05>>01690000
   EXCHANGEDB(LDTDST);                                         <<00.05>>01692000
   DEVX := SYS'LPDTP(0).(0:8);                                 <<00.05>>01694000
   DO                                                          <<00.05>>01696000
      IF LDTBASE(DEVX*LDTSIZE+2).(10:6)=TERMTYPE THEN          <<00.05>>01698000
            ATTACHIO(DEVX,0,0,0,4,0,0,0,1)                     <<00.05>>01700000
   UNTIL (DEVX:=DEVX-1) = 0;                                   <<00.05>>01702000
   EXCHANGEDB(0);                                              <<00.05>>01704000
                                                                        01706000
<< TELL OPERATOR THAT SYSTEM IS NOW DOWN >>                             01708000
                                                               <<00624>>01710000
<< LOG PROCESS IS NOW STOPPED.  DISABLE LOGGING >>             <<02315>>01714000
<< TO PREVENT LOG OF OPERATOR MESSAGE.  GENMSG  >>             <<02315>>01716000
<< TAKES CARE OF ALLOCATING THE CONSOLE.        >>             <<02315>>01718000
                                                               <<02315>>01720000
   DUMMY := ABSYS'LOGINFO;  << SAVE OLD STATE.  >>             <<02315>>01722000
   ABSYS'LOGINFO := 0;      << DISABLE LOGGING. >>             <<02315>>01724000
                                                               <<03518>>01726000
   << Deallocate free space data segments for >>               <<03518>>01728000
   << all system discs.                       >>               <<03518>>01730000
                                                               <<03518>>01732000
   PROCESS'SYS'DISC'FREE'SPACE'MAPS (FALSE);                   <<03518>>01734000
                                                               <<03518>>01736000
   GENMSG(-1,@MSGZ);                                           <<02315>>01738000
   ABSYS'LOGINFO := DUMMY;  << RESTORE STATE.   >>             <<02315>>01740000
                                                               <<02315>>01742000
   DISABLE;                                                    <<00.05>>01744000
   ASSEMBLE (HALT %17; BR *-1);        <<THAT'S IT FOLKS>>              01746000
                                                                        01748000
   END    <<CONSSHUTDOWN / CONSLOGOFF>>;                                01750000
                                                                        01752000
$PAGE "=LOGON COMMAND EXECUTOR"                                <<00594>>01754000
LOGICAL PROCEDURE CONSLOGON (PARMSP);                          <<C0.00>>01756000
   BYTE ARRAY PARMSP;                                          <<C0.00>>01758000
   OPTIONS;                                                    <<C0.00>>01760000
BEGIN                                                          <<C0.00>>01762000
   INTEGER           SAVESIR,                                  <<C0.00>>01764000
                     JMAT'JLIMIT  = DB+10,                     <<C0.00>>01766000
                     JMAT'SLIMIT  = DB+8;                      <<C0.00>>01768000
<< >>                                                          <<C0.00>>01770000
   SCAN PARMSP WHILE %6440;                                    <<C0.00>>01772000
   IF  CARRY  AND  OLDJLIMIT <> -1  THEN                       <<C0.00>>01774000
      BEGIN    <<IN =LOGOFF MODE>>                             <<C0.00>>01776000
      TOS := OLDJLIMIT;                                        <<C0.00>>01778000
      TOS := OLDSLIMIT;                                        <<C0.00>>01780000
      EXCHANGEDB (JMATDST);                                             01782000
      SAVESIR := GETSIR (JMATSIR);                             <<C0.00>>01784000
      JMAT'SLIMIT := TOS;                                      <<C0.00>>01786000
      JMAT'JLIMIT := TOS;                                      <<C0.00>>01788000
      RELSIR (JMATSIR, SAVESIR);                               <<C0.00>>01790000
      EXCHANGEDB (0);                                          <<C0.00>>01792000
      OLDJLIMIT := -1;    <<SIGNAL THAT IN =LOGON MODE>>       <<C0.00>>01794000
      AWAKE(SYSPROC(UCOPPCBN),%20,0);                                   01796000
      IF SYS'LPDTP(CONSOLELDEV*2+1).(0:2)=0 THEN BEGIN         <<00639>>01798000
      GENMSG(-1,@HELLOSTRING);                                          01800000
                                                               <<02856>>01802000
      << Need to set LOGON bit for disconnect processing >>    <<02856>>01804000
      DISABLE;                                                 <<02856>>01806000
      SYS'LPDTP(CONSOLELDEV*LPDTSIZE + 1).LOGON := 1;          <<02856>>01808000
      ENABLE;                                                  <<02856>>01810000
                                                               <<02856>>01812000
      DUMMY := 0;   << ERROR NUMBER >>                         <<01318>>01814000
      STARTDEVICE(1,HELLOSTRING(6),ABSYS'CONSOL.(8:8),,,,      <<00715>>01816000
                  JOBNUM,DUMMY); << START SESSION AT CONSOLE >><<01318>>01818000
      IF DUMMY > 0 THEN                                        <<02856>>01820000
         BEGIN         << Logon failed >>                      <<02856>>01822000
         GENMSG(1,300);                                        <<02856>>01824000
         DISABLE;                                              <<02856>>01826000
         SYS'LPDTP(CONSOLELDEV*LPDTSIZE + 1).LOGON := 0;       <<02856>>01828000
         ENABLE;                                               <<02856>>01830000
         END                                                   <<02856>>01832000
      ELSE                                                     <<02856>>01834000
         BEGIN         << Logged on successfully >>            <<02856>>01836000
         ABSOLUTE(ABSYS+SESSION1):=JOBNUM.(4:12);              <<02856>>01838000
         UP := TRUE;   << Don't do DCLOSE on console >>        <<02856>>01840000
         END;                                                  <<02856>>01842000
      END;                                                     <<00639>>01844000
      CONSLOGON := TRUE;                                       <<C0.00>>01846000
      END;                                                     <<C0.00>>01848000
   END;    <<CONSLOGON>>                                       <<C0.00>>01850000
$PAGE "JOB CONTROL PROCEDURES"                                 <<00594>>01852000
PROCEDURE SUSPENDJOB(MAINPIN);                                          01854000
    VALUE MAINPIN;                                                      01856000
    INTEGER MAINPIN;                                                    01858000
   OPTIONS;                                                             01860000
   BEGIN                                                                01862000
   INTEGER TEMPDB,V,NEXT,STATUS=Q-1;                                    01864000
   LOGICAL HYBERNATE := FALSE;                                          01866000
   ENTRY RESUMEJOB;                                                     01868000
   EQUATE      CCG    =  0,                                             01870000
               CCL    =  1,                                             01872000
               CCE    =  2;                                             01874000
EQUATE PCBIX=3;                                                <<MPEIV>>01876000
EQUATE DISPQ=1,                                                <<MPEIV>>01878000
       ENDOFCLASS=0;                                           <<MPEIV>>01880000
INTEGER PCBSYSBASEINX=DB+PCBIX;                                <<MPEIV>>01882000
   << >>                                                                01884000
   HYBERNATE := TRUE;                                                   01886000
 RESUMEJOB:                                                             01888000
   NEXT := MAINPIN;                                                     01890000
   TOS := 0;                                                            01892000
   TOS := ABSOLUTE(PCBB);                                               01894000
   ASSEMBLE(DUP);                                                       01896000
   V := TOS;                                                            01898000
   PSEUDODISABLE;                                                       01900000
   IF (ABSOLUTE(V+MAINPIN*PCBSIZE+9)) > 0 THEN                          01902000
     BEGIN                                                              01904000
       PSEUDOENABLE;                                                    01906000
       STATUS.(6:2) := CCL;                                             01908000
       RETURN;                                                          01910000
     END;                                                               01912000
   IF ABSOLUTE (V+MAINPIN*PCBSIZE+5).(8:8) <> 0  THEN                   01914000
     BEGIN                                                              01916000
       TEMPDB := SETSYSDB;                                              01918000
       WHILE (NEXT := FAMILY(NEXT,MAINPIN)) <> MAINPIN DO               01920000
           IF (ABSOLUTE(V+NEXT*PCBSIZE+9)>0) AND HYBERNATE THEN         01922000
             GOTO OUT                                                   01924000
          ELSE                                                          01926000
             BEGIN                                                      01928000
              ABSOLUTE(V+NEXT*PCBSIZE+9).(13:1) := HYBERNATE;           01930000
             DISABLE;                                                   01932000
    IF NOT HYBERNATE THEN QUEUEPROC(NEXT*PCBSIZE+PCBSYSBASEINX,<<MPEIV>>01934000
      DISPQ,ENDOFCLASS);                                       <<MPEIV>>01936000
             ENABLE;                                                    01938000
             END;                                                       01940000
       OUT:                                                             01942000
       RESETDB (TEMPDB);                                                01944000
     END;                                                               01946000
   ABSOLUTE (V+MAINPIN*PCBSIZE+9).(13:1) := HYBERNATE;                  01948000
   DISABLE;                                                             01950000
 IF NOT HYBERNATE THEN QUEUEPROC(MAINPIN*PCBSIZE+PCBSYSBASEINX,<<MPEIV>>01952000
      DISPQ,ENDOFCLASS);                                       <<MPEIV>>01954000
   ENABLE;                                                              01956000
   PSEUDOENABLE;                                                        01958000
   STATUS.(6:2) := CCE;                                                 01960000
   END;   <<SUSPENDJOB, RESUMEJOB>>                                     01962000
                                                                        01964000
                                                                        01966000
LOGICAL PROCEDURE JOBCONTROL(JMATP,STOPJOB);                            01968000
   VALUE JMATP,STOPJOB;                                                 01970000
   INTEGER POINTER JMATP;                                               01972000
   LOGICAL STOPJOB;                                                     01974000
   OPTIONS;                                                             01976000
   BEGIN                                                                01978000
   INTEGER STATE;                                                       01980000
   DEFINE  JM'JSTATE    =  0).(0:6     #,                               01982000
           JM'MAINPIN   = 22).(0:8     #;                               01984000
   EQUATE  JOBSUSP      =  4,                                           01986000
           JOBEXEC      =  2;                                           01988000
   << >>                                                                01990000
   IF JMATP <> 0 THEN                                                   01992000
      BEGIN                                                             01994000
        IF ((STATE := JMATP(JM'JSTATE))=JOBSUSP)                        01996000
           AND (NOT STOPJOB) THEN                                       01998000
           BEGIN                                                        02000000
             RESUMEJOB(JMATP(JM'MAINPIN));                              02002000
             IF = THEN JOBCONTROL := TRUE ELSE RETURN;                  02004000
             JMATP(JM'JSTATE) := JOBEXEC;                               02006000
           END ELSE                                                     02008000
        IF (STOPJOB) AND (STATE = JOBEXEC) THEN                         02010000
           BEGIN                                                        02012000
             SUSPENDJOB(JMATP(JM'MAINPIN));                             02014000
             IF = THEN JOBCONTROL := TRUE ELSE RETURN;                  02016000
             JMATP(JM'JSTATE) := JOBSUSP;                               02018000
           END;                                                         02020000
      END;                                                              02022000
   END;   <<JOBCONTROL>>                                                02024000
$PAGE "LDT & RIT MANIPULATION PROCEDURES"                      <<00594>>02026000
PROCEDURE PUTENTRY(LDEV,OFFSET);                                        02028000
    VALUE LDEV,OFFSET;                                                  02030000
    INTEGER LDEV,OFFSET;                                                02032000
         <<UPDATES LOGICAL DEVICE ENTRY IN LDTAB                      >>02034000
         <<OFFSET MUST CONTAIN OLD Q-REL.ADDRESS OF ARRAY"TENTRY"     >>02036000
         <<LDEV MUST CONTAIN THE LOGICAL DEVICE NUMBER                >>02038000
         <<TABLE ENTRY MUST BE IN TENTRY(*)                           >>02040000
   OPTIONS;                                                             02042000
   BEGIN                                                                02044000
    LOGICAL DSTX;                                                       02046000
    INTEGER M,DELTA;                                                    02048000
    INTEGER DELTAQ = Q-0;                                               02050000
    INTEGER ARRAY TENTRY(*) = Q-0;                                      02052000
    INTEGER POINTER DTAB;                                               02054000
   DELTA _ DELTAQ - OFFSET;                                             02056000
   DSTX _ EXCHANGEDB(LDTDST);                                           02058000
   @DTAB _ LDEV*LDTSIZE;   <<BEGINNING OF PROPER ENTRY>>                02060000
   M _ 0;                                                               02062000
   DO DTAB(M) _ TENTRY(M-DELTA) UNTIL (M_M+1)=LDTSIZE;                  02064000
   EXCHANGEDB(DSTX);                                                    02066000
   END; <<PUTENTRY>>                                                    02068000
                                                                        02070000
                                                                        02072000
LOGICAL PROCEDURE GETENTRY(LDEV,DSTNO,OFFSET);                          02074000
    VALUE LDEV,DSTNO,OFFSET;                                            02076000
    INTEGER LDEV,DSTNO,OFFSET;                                          02078000
         <<RETRIEVES ENTRY FROM DST#13 OR DST#14                      >>02080000
         <<OFFSET MUST CONTAIN OLD Q-REL.ADDRESS OF ARRAY"TENTRY"     >>02082000
         <<LDEV MUST CONTAIN THE LOGICAL DEVICE NUMBER                >>02084000
         <<DSTNO MUST CONTAIN THE DST NUMBER OF THE PROPER TABLE      >>02086000
         <<GETENTRY_FALSE IF LDEV IS INVALID                          >>02088000
   OPTIONS;                                                             02090000
   BEGIN                                                                02092000
    LOGICAL DSTX;                                                       02094000
    INTEGER M,N,DELTA;                                                  02096000
    INTEGER DELTAQ = Q-0;                                               02098000
    INTEGER POINTER DTAB;                                               02100000
    INTEGER ARRAY TENTRY(*) = Q-0;                                      02102000
   DELTA _ DELTAQ - OFFSET;                                             02104000
   DSTX _ EXCHANGEDB(DSTNO);                                            02106000
   @DTAB _ 0;                                                           02108000
   TOS := LDEV;                                                         02110000
   IF <=  OR  TOS > DTAB.(0:8) THEN                                     02112000
      BEGIN   <<LDEV INVALID>>                                          02114000
BADLD:                                                                  02116000
      GO EXIT;                                                          02118000
      END;                                                     <<C0.00>>02120000
    <<MOVE TABLE ENTRY INTO TENTRY(*)>>                                 02122000
   IF DSTNO = LPDTDST THEN                                              02124000
      BEGIN                                                             02126000
      N _ LPDTSIZE;  <<ENTRY SIZE>>                                     02128000
      @DTAB _ LDEV*N;                                                   02130000
      IF DTAB(0)<=0 THEN GOTO EXIT;  <<NON EXIST / VDEV>>               02132000
      END                                                               02134000
   ELSE                                                                 02136000
      BEGIN                                                             02138000
      N _ LDTSIZE;   <<ENTRY SIZE>>                                     02140000
      @DTAB _ LDEV*N;                                                   02142000
      IF DTAB(2)=0 THEN GOTO EXIT;  <<NON EXIST>>                       02144000
      END;                                                              02146000
   M _ 0;                                                               02148000
   DO TENTRY(M-DELTA) _ DTAB(M) UNTIL (M_M+1)=N;                        02150000
   GETENTRY := TRUE;                                           <<C0.00>>02152000
EXIT:                                                                   02154000
   EXCHANGEDB(DSTX);                                                    02156000
   END; <<GETENTRY>>                                                    02158000
                                                                        02160000
                                                                        02162000
LOGICAL PROCEDURE GETRITENTRY(PIN,RITENTRY,ADR);                        02164000
         VALUE PIN;                                                     02166000
    INTEGER PIN,ADR;                                                    02168000
    INTEGER ARRAY RITENTRY;                                             02170000
         <<GET ENTRY FROM REPLY INFORMATION TABLE.                    >>02172000
         <<INPUT:                                                     >>02174000
         <<PIN       - PROCESS IDENTIFICATION NUMBER                  >>02176000
         <<OUTPUT:                                                    >>02178000
         <<RETENTRY  - ENTRY                                          >>02180000
         <<ADR       - SEG.REL.ADR.OF ENTRY                           >>02182000
         <<GETRITENTRY - TRUE IF FOUND, FALSE OTHERWISE.              >>02184000
   OPTIONS;                                                             02186000
   BEGIN                                                                02188000
   INTEGER                                                     <<04824>>02192000
         SAVEDL                                                         02194000
        ,I                                                              02196000
        ,MAXINX                                                         02198000
   ;INTEGER ARRAY                                                       02200000
         DTAB(*) = DB+0                                                 02202000
   ;                                                                    02204000
   PUSH(DL);                                                            02206000
   SAVEDL _ TOS;                                                        02208000
   EXCHANGEDB(RIT'DST);                                        <<04824>>02210000
   MAXINX := (DTAB(1))*RIT'SIZE+RIT'HEADSIZE;                  <<04824>>02212000
   I := RIT'HEADSIZE-RIT'SIZE;                                 <<04824>>02214000
   WHILE(I:=I+RIT'SIZE)<MAXINX DO IF PIN=DTAB(I) THEN GO FOUND;<<04824>>02216000
GIT:                                                                    02218000
   EXCHANGEDB(0);                                                       02220000
   ADR _ I;                                                             02222000
   RETURN;                                                              02224000
FOUND:                                                                  02226000
   TOS _ @RITENTRY-SAVEDL;   <<DL-REL.TARGET>>                          02228000
   TOS _ I;   <<DB-REL.SOURCE>>                                         02230000
   TOS _ 6;   <<WORD COUNT>>                                            02232000
   ASSEMBLE(MVBL 3);                                                    02234000
   GETRITENTRY _ TRUE;                                                  02236000
   GO GIT;                                                              02238000
   END;   <<GETRITENTRY>>                                               02240000
$PAGE "=DSLINE, =MRJE, =MPLINE, AND =3270 COMMAND EXECUTORS"   <<00594>>02242000
                                                                        02244000
                                                                        02246000
LOGICAL PROCEDURE CONSMRJE (BP);                              <<MRJE>>  02248000
  BYTE ARRAY BP;                                              <<MRJE>>  02250000
  OPTIONS;                                                    <<MRJE>>  02252000
BEGIN                                                         <<MRJE>>  02254000
  TOS := 0;                                                   <<MRJE>>  02256000
  TOS := @BP;                                                 <<MRJE>>  02258000
  TOS := ABSYS'MRJE;                                          <<MRJE>>  02260000
  IF < THEN ASSEMBLE(PCAL 0) ELSE DDEL;                       <<MRJE>>  02262000
  CONSMRJE := TOS;                                            <<MRJE>>  02264000
END;                                                          <<MRJE>>  02266000
LOGICAL PROCEDURE CONS3270(BP);                                <<00182>>02268000
  BYTE ARRAY BP;                                               <<00182>>02270000
  OPTIONS;                                                     <<00182>>02272000
BEGIN                                                          <<00182>>02274000
  TOS := 0;                                                    <<00182>>02276000
  TOS := 0;  << CONS3270, NOT CLOSE3270 >>                     <<00182>>02278000
  TOS := @BP;                                                  <<00182>>02280000
  TOS := PLABEL3270;                                           <<01165>>02282000
  IF < THEN ASSEMBLE( PCAL 0 )                                 <<00182>>02284000
       ELSE ASSEMBLE( DDEL,DEL );                              <<00182>>02286000
  CONS3270 := TOS;                                             <<00182>>02288000
END;                                                           <<00182>>02290000
$PAGE "=ABORTIO COMMAND EXECUTOR"                              <<00594>>02292000
LOGICAL PROCEDURE CONSDELIO(BARRAY);                                    02294000
BYTE ARRAY BARRAY;                                                      02296000
   OPTIONS;                                                             02298000
  BEGIN                                                                 02300000
  INTEGER LDEV,NP;                                                      02302000
  INTEGER ENUM:=0,NOPARM:=1,THEPARM,CARET;                     <<04691>>02304000
  EQUATE BLK =" ";                                             <<04691>>02306000
  BYTE POINTER FIRSTPARM=PARMS;                                <<04691>>02308000
  BYTE ARRAY DELIMITERS(0:1);                                           02310000
  LOGICAL ARRAY CLINE(0:29);                                   <<04691>>02312000
  BYTE ARRAY CLINEB(*)=CLINE;                                  <<04691>>02314000
  MOVE CLINEB(0):=" ";                                         <<04691>>02316000
  MOVE CLINEB(1):=CLINEB(0),(29);                              <<04691>>02318000
                                                                        02320000
<<   Begin checking for correct LDEV >>                        <<04691>>02322000
DELIMITERS:=%15;                                               <<04691>>02324000
MYCOMMAND(BARRAY,,1,NP,PARMS); << Use default delimiters >>    <<04691>>02326000
IF > THEN ENUM:=3019                                           <<04691>>02328000
   ELSE IF NP = 0 THEN ENUM:=3019                              <<04691>>02330000
   ELSE  << Have single parameter; process it >>               <<04691>>02332000
   BEGIN                                                       <<04691>>02334000
   LDEV:=BINARY(PARAM1,INTEGER(LEN1));                                  02338000
   IF <> THEN ENUM:=3001                                       <<04691>>02340000
         ELSE IF LDEV < 1                                      <<04691>>02342000
             THEN ENUM:=3001                                   <<04691>>02344000
             ELSE                                              <<04691>>02346000
             IF LDEV > (INTEGER(SYS'LPDTP(LPDT'MAXDEV)))       <<04691>>02348000
                THEN BEGIN                                     <<04691>>02350000
                     NOPARM:=0;                                <<04691>>02352000
                     ENUM:=3002;                               <<04691>>02354000
                     THEPARM:=INTEGER(SYS'LPDTP(LPDT'MAXDEV)); <<04691>>02356000
                     END                                       <<04691>>02358000
                ELSE IF SYS'LPDTP(LDEV*LPDTSIZE+LPDT'VIRTUAL)=1<<04691>>02360000
                        THEN BEGIN                             <<04691>>02362000
                             ENUM:=3007;                       <<04691>>02364000
                             THEPARM:=LDEV;                    <<04691>>02366000
                             NOPARM:=0;                        <<04691>>02368000
                             END                               <<04691>>02370000
                        ELSE                                   <<04691>>02372000
                        BEGIN                                  <<04691>>02374000
                        ABORTIO(LDEV);                         <<04691>>02376000
                        IF < THEN BEGIN                        <<04691>>02378000
                                  NOPARM:=1;                   <<04691>>02380000
                                  ENUM:=3160;                  <<04691>>02382000
                                  END                          <<04691>>02384000
                             ELSE IF > THEN BEGIN              <<04691>>02386000
                                            ENUM:=3028;        <<04691>>02388000
                                            NOPARM:=0;         <<04691>>02390000
                                            THEPARM:=LDEV;     <<04691>>02392000
                                            END                <<04691>>02394000
                        END;                                   <<04691>>02396000
     END;                                                      <<04691>>02398000
   IF ENUM <> 0                                                <<04691>>02400000
           THEN BEGIN                                          <<04691>>02402000
           CARET:=8+(@FIRSTPARM-@BP1);                         <<04691>>02404000
           MOVE CLINEB(CARET):="^";                            <<04691>>02406000
           PRINT(CLINE,-30,0);                                 <<04691>>02408000
           IF NOPARM = 1 THEN GENMSG(2,ENUM)                   <<04691>>02410000
              ELSE GENMSG(2,ENUM,%010000,THEPARM)              <<04691>>02412000
           END                                                 <<04691>>02414000
      ELSE;                                                    <<04691>>02416000
    CONSDELIO:=1;                                              <<04691>>02418000
END  <<CONSDELIO>>  ;                                                   02420000
$PAGE "=REPLY COMMAND EXECUTOR"                                <<00594>>02422000
LOGICAL PROCEDURE CONSREPLY(BARRAY);                                    02424000
    BYTE ARRAY BARRAY;                                                  02426000
   OPTIONS;                                                             02428000
   BEGIN                                                                02430000
    INTEGER ARRAY                                                       02432000
         RITENTRY(0:5) = Q                                              02434000
        ,IREPSTR(0:14)                                                  02436000
   ;BYTE ARRAY                                                          02438000
         DELIMITERS(0:1)                                                02440000
   ;BYTE ARRAY                                                          02442000
         BYES (0:3) = PB := "YES", 0                           <<C0.00>>02444000
   ;BYTE ARRAY                                                          02446000
         BNO (0:2) = PB := "NO", 0                             <<C0.00>>02448000
   ;BYTE ARRAY                                                          02450000
         BREPSTR(*) = IREPSTR                                           02452000
   ;INTEGER                                                             02454000
         NUMPARMS                                                       02456000
        ,I,J                                                            02458000
        ,PIN                                                            02460000
        ,ENTRYADR   <<RIT>>                                             02462000
        ,SAVEDL                                                         02464000
        ,COUNT   <<#WORDS TO MOVE TO REPLY BUFFER>>                     02466000
        ,ADREPSTR   <<DB-REL.ADR.OF IREPSTR(*)>>                        02468000
   ;LOGICAL                                                             02470000
         A                                                              02472000
        ,LYES _ FALSE                                                   02474000
        ,LNO _ FALSE                                                    02476000
        ,LNUM _ FALSE                                                   02478000
   ;DEFINE                                                              02480000
         DSTNO       = RITENTRY(1)#                                     02482000
        ,BUFAD       = RITENTRY(2)#                                     02484000
        ,MAXSTRLNGTH = RITENTRY(3).(0:8)#                               02486000
        ,REPLYTYPE   = RITENTRY(3).(8:8)#                               02488000
   ;                                                                    02490000
   MOVE DELIMITERS _ (",",%15);   <<COMMA,CR>>                          02492000
   MYCOMMAND(BARRAY,DELIMITERS,2,NUMPARMS,PARMS);                       02494000
   IF NUMPARMS <> 2 THEN GO BADINPUT;                                   02496000
   IF LEN1=0 OR LEN2=0 THEN GO BADINPUT;                       <<C0.00>>02498000
   PIN _ BINARY(PARAM1,INTEGER(LEN1));                                  02500000
   IF <> THEN GO BADINPUT;                                              02502000
   IF PIN = 0 THEN GO BADINPUT;                                         02504000
   A := GETSIR(RIT'SIR);                                       <<04824>>02506000
   IF NOT GETRITENTRY(PIN,RITENTRY,ENTRYADR) THEN                       02508000
      BEGIN                                                             02510000
B1:   RELSIR(RIT'SIR,A);                                       <<04824>>02512000
BADINPUT:                                                      <<04.EB>>02514000
      RETURN;                                                  <<04.EB>>02516000
      END;                                                              02518000
   J := REPLYTYPE;                                             <<00667>>02520000
   IF (REPLYTYPE=2) OR (REPLYTYPE=4) THEN                      <<00667>>02522000
      BEGIN  J := 2; GO STR;  END;                             <<00667>>02524000
   TOS _ @PARAM2;   <<TARGET>>                                          02526000
   TOS _ @BYES;   <<SOURCE>>                                            02528000
   IF * = * PB, (LEN2), 2 THEN LYES := TRUE;                   <<C0.00>>02530000
   TOS _ @BNO;                                                          02532000
   IF * = * PB, (LEN2), 3 THEN LNO := TRUE;                    <<C0.00>>02534000
   IF LYES OR LNO THEN                                                  02536000
      BEGIN   <<""YES" OR "NO" INPUT>>                                  02538000
      IF J=1 OR J=3 THEN GO GOODREPLY;                                  02540000
      GO B1;                                                            02542000
      END;                                                              02544000
   I _ BINARY(PARAM2,INTEGER(LEN2));                                    02546000
   IF = THEN                                                            02548000
      BEGIN   <<NUMBER INPUT>>                                          02550000
      LNUM _ TRUE;                                                      02552000
      IF J=0 OR J=3 THEN GO GOODREPLY;                                  02554000
      GO B1;                                                            02556000
      END;                                                              02558000
   GO B1;                                                               02560000
STR:                                                                    02562000
   SCAN PARAM2 UNTIL %6415,1;                                  <<04.EB>>02564000
   COUNT := TOS -@PARAM2;                                      <<04.EB>>02566000
   IF COUNT > MAXSTRLNGTH THEN GO B1;                          <<04.EB>>02568000
GOODREPLY:                                                              02570000
   RELSIR(RIT'SIR,A);                                          <<04824>>02572000
   CASE J OF                                                            02574000
      BEGIN                                                             02576000
         BEGIN   <<0-(NUM)>>                                            02578000
         IREPSTR _ I;                                                   02580000
         COUNT _ 1;                                                     02582000
         END;                                                           02584000
         BEGIN   <<1-(Y/N)>>                                            02586000
         IREPSTR _ 1;                                                   02588000
         IF LNO THEN IREPSTR _ 0;                                       02590000
         COUNT _ 1;                                                     02592000
         END;                                                           02594000
         BEGIN   <<2-(SXX)>>                                            02596000
         IREPSTR _ COUNT;                                               02598000
         MOVE BREPSTR(2) _ PARAM2,(COUNT);                              02600000
         COUNT _ (COUNT+1) &LSR(1) + 1;   <<WORD COUNT>>                02602000
         END;                                                           02604000
      END;                                                              02606000
   PUSH(DL);                                                            02608000
   SAVEDL _ TOS;                                                        02610000
   ADREPSTR _ @IREPSTR;                                                 02612000
   EXCHANGEDB(DSTNO);                                                   02614000
   TOS _ BUFAD;   <<DB-REL.TARGET>>                                     02616000
   TOS _ ADREPSTR - SAVEDL;   <<DL-REL.SOURCE>>                         02618000
   TOS _ COUNT;   <<WORD COUNT>>                                        02620000
   ASSEMBLE(MVLB 3);                                                    02622000
   EXCHANGEDB(0);                                                       02624000
   REMRITENTRY(PIN); << REMOVE ENTRY & AWAKEN >>               <<00.EB>>02626000
   CONSREPLY _ TRUE;                                                    02628000
   END;   <<CONSREPLY>>                                                 02630000
$PAGE "GET INITIAL SYSTEM DATE & TIME PROCEDURE"               <<00594>>02632000
PROCEDURE INITDATETIME;                                        <<00.EB>>02634000
BEGIN                                                          <<00.EB>>02636000
                                                               <<00.EB>>02638000
EQUATE                                                         <<00.EB>>02640000
   DATEQUES = 255,                                             <<00.EB>>02644000
   TIMEQUES = 256,                                             <<00.EB>>02646000
   INVDDATE = 257,                                             <<00.EB>>02648000
   INVDTIME = 258,                                             <<08.EB>>02650000
   TIMEVERIF= 259;                                             <<08.EB>>02652000
                                                               <<00.EB>>02654000
LOGICAL                                                        <<00.EB>>02656000
   LDATE,                                                      <<00.EB>>02658000
   DEFAULT'TIME,                                               <<01312>>02660000
   DEFAULT'DATE;                                               <<01312>>02662000
INTEGER                                                        <<00.EB>>02664000
   ERRNO;                                                      <<00.EB>>02666000
DOUBLE DTIME;                                                  <<00.EB>>02668000
BYTE POINTER                                                   <<08.EB>>02670000
   PTR;                                                        <<08.EB>>02672000
ARRAY BUFF'(0:13); BYTE ARRAY BUFF(*) = BUFF';                 <<08.EB>>02674000
                                                               <<00.EB>>02676000
DO BEGIN                                                       <<00.EB>>02678000
   DEFAULT'DATE := DEFAULT'TIME := FALSE;                      <<01312>>02680000
   ERRNO := 0;                                                 <<00.EB>>02682000
   GENMSG(SYSSET,DATEQUES,,,,,,,,,,,%100000);                  <<00.EB>>02684000
   BUFF(READ(BUFF',-20)) := 0;<<STOPPER>>                      <<00.EB>>02686000
   IF BUFF = 0 THEN                                            <<00.EB>>02688000
   BEGIN                                                       <<00.EB>>02690000
      DEFAULT'DATE := TRUE;                                    <<01312>>02692000
      MOVE BUFF := ("11/1/72",0);                              <<00.EB>>02694000
   END;                                                        <<00.EB>>02696000
   LDATE := CONVERTDATE(BUFF);                                 <<00.EB>>02698000
   IF <> THEN ERRNO := INVDDATE                                <<00.EB>>02700000
   ELSE                                                        <<00.EB>>02702000
   BEGIN                                                       <<00.EB>>02704000
      IF NOT DEFAULT'DATE THEN                                 <<01312>>02706000
      BEGIN                                                    <<00.EB>>02708000
         GENMSG(SYSSET,TIMEQUES,,,,,,,,,,,%100000);            <<00.EB>>02710000
         BUFF(READ(BUFF',-20)) := 0;                           <<00.EB>>02712000
         IF BUFF = 0 THEN DEFAULT'TIME := TRUE;                <<01312>>02714000
      END;                                                     <<00.EB>>02716000
      IF DEFAULT'TIME OR DEFAULT'DATE THEN                     <<01312>>02718000
         MOVE BUFF := ("0:00",0);                              <<01312>>02720000
      DTIME := CONVERTTIME(BUFF);                              <<00.EB>>02722000
      IF <> THEN ERRNO := INVDTIME;                            <<00.EB>>02724000
   END;                                                        <<00.EB>>02726000
   IF ERRNO = 0 THEN                                           <<08.EB>>02728000
   BEGIN                                                       <<08.EB>>02730000
      STARTCLOCK(LDATE,DTIME);                                 <<08.EB>>02732000
      DATE'LINE(BUFF);                                         <<08.EB>>02734000
      IF DEFAULT'DATE THEN PRINT(BUFF',-27,0)                  <<01312>>02736000
      ELSE                                                     <<08.EB>>02738000
      BEGIN                                                    <<08.EB>>02740000
         GENMSG(SYSSET,TIMEVERIF,%0,@BUFF,,,,,,,,,%100000);    <<08.EB>>02742000
         BUFF(READ(BUFF',-28)) := 0;                           <<08.EB>>02744000
         IF BUFF <> 0 THEN                                     <<08.EB>>02746000
         BEGIN                                                 <<08.EB>>02748000
            SCAN BUFF WHILE " ",1;                             <<08.EB>>02750000
            @PTR := TOS;                                       <<08.EB>>02752000
            MOVE PTR := PTR WHILE ANS;                         <<08.EB>>02754000
            IF PTR = "YES" OR PTR = "Y" AND PTR(1) = 0 THEN    <<08.EB>>02756000
            ELSE ERRNO := TIMEVERIF;<<OPERATOR SAYS BAD DATE>> <<08.EB>>02758000
         END;                                                  <<08.EB>>02760000
      END;                                                     <<08.EB>>02762000
   END                                                         <<08.EB>>02764000
   ELSE GENMSG(SYSSET,ERRNO);                                  <<08.EB>>02766000
END UNTIL ERRNO = 0;                                           <<00.EB>>02768000
                                                               <<00.EB>>02770000
END; << INITDATETIME >>                                        <<00.EB>>02772000
PROCEDURE SETTUNINGPARAMETERS;                                 <<MPEIV>>02774000
BEGIN                                                          <<MPEIV>>02776000
$INCLUDE INCLICS                                               <<MPEIV>>02778000
EQUATE ICSIX=7;                                                <<MPEIV>>02780000
INTEGER POINTER ICS=ICSIX;                                     <<MPEIV>>02782000
EQUATE SYSGLOBEXTIX=%377;                                      <<MPEIV>>02784000
INTEGER POINTER SYSGLOBEXT=SYSGLOBEXTIX;                       <<MPEIV>>02786000
DEFINE GARBCOLLENABLED=SYSGLOBEXT(3)#,                         <<MPEIV>>02788000
       MOVETHRESHOLD=SYSGLOBEXT(4)#;                           <<MPEIV>>02790000
INTEGER STATICMPLFENCE=DB+%27;                                 <<01912>>02792000
EQUATE NBANKS=%1047;                                           <<01912>>02794000
DOUBLE SAVEDB;                                                 <<MPEIV>>02796000
EQUATE FIRSTMEMIX=%20,                                         <<MPEIV>>02798000
       TIMELASTCYCIX=%22,                                      <<MPEIV>>02800000
       SCANPOINTIX=%265,                                       <<MPEIV>>02802000
       LASTCYCDURIX=%351,                                      <<MPEIV>>02804000
       CYCLETHRESHIX=%353,                                     <<MPEIV>>02806000
       BUGCATCHIX=%355;                                        <<MPEIV>>02808000
DOUBLE SCANPOINT=DB+SCANPOINTIX,                               <<MPEIV>>02810000
       FIRSTMEMADDR=DB+FIRSTMEMIX,                             <<MPEIV>>02812000
       TIMEOFLASTCYCLE=DB+TIMELASTCYCIX,                       <<MPEIV>>02814000
       CYCLETHRESHOLD=db+CYCLETHRESHIX,                        <<MPEIV>>02816000
       LASTCYCLEDURATION=DB+LASTCYCDURIX;                      <<MPEIV>>02818000
LOGICAL BUGCATCH=DB+BUGCATCHIX;                                <<MPEIV>>02820000
DEFINE MEMPRESSDUR=SYSGLOBEXT(9)#,                             <<MPEIV>>02822000
       HOTIMELASTMAKEROOM=SYSGLOBEXT(7)#,                      <<MPEIV>>02824000
       LOTIMELASTMAKEROOM=SYSGLOBEXT(8)#;                      <<MPEIV>>02826000
ICS(-ICS'WORSTEPRICELL):=253;                                  <<MPEIV>>02828000
ICS(-ICS'WORSTDPRICELL):=238;                                  <<01912>>02830000
ICS(-ICS'WORSTCPRICELL):=200;                                  <<MPEIV>>02832000
ICS(-ICS'ESCHEDBASECELL):=240;                                 <<01912>>02834000
ICS(-ICS'DSCHEDBASECELL):=202;                                 <<MPEIV>>02836000
ICS(-ICS'CSCHEDBASECELL):=152;                                 <<MPEIV>>02838000
ICS(-ICS'CURDFILTERCELL):=1000;                                <<01912>>02840000
ICS(-ICS'CUREFILTERCELL):=1000;                                <<01912>>02842000
ICS(-ICS'CWTOLDFILTWTCELL):=99;                                <<01841>>02844000
ICS(-ICS'CWTDENOMCELL):=100;                                   <<01841>>02846000
ICS(-ICS'CWTLASTTRANSWTCELL):=1;                               <<01841>>02848000
ICS(-ICS'CURCFILTERCELL):=250;                                 <<MPEIV>>02850000
ICS(-ICS'MAXCFILTERCELL):=300;                                 <<MPEIV>>02852000
DISABLE;                                                       <<MPEIV>>02854000
TOS:=%1000D;ASSEMBLE(XCHD);SAVEDB:=TOS;                        <<MPEIV>>02856000
TOS:=SYSGLOBEXT(1);TOS:=SYSGLOBEXT(2);FIRSTMEMADDR:=TOS;       <<MPEIV>>02858000
TOS:=TIMER; TIMEOFLASTCYCLE:=TOS;                              <<MPEIV>>02860000
SCANPOINT:=FIRSTMEMADDR;                                       <<01912>>02862000
STATICMPLFENCE:=ABSOLUTE(NBANKS)+1;                            <<01912>>02864000
MEMPRESSDUR:=500;                                              <<MPEIV>>02866000
HOTIMELASTMAKEROOM:=LOTIMELASTMAKEROOM:=0;                     <<MPEIV>>02868000
BUGCATCH:=1;                                                   <<MPEIV>>02870000
GARBCOLLENABLED:=1;                                            <<MPEIV>>02872000
MOVETHRESHOLD:=24;                                             <<MPEIV>>02874000
CYCLETHRESHOLD:=1000D;LASTCYCLEDURATION:=1000D;                <<MPEIV>>02876000
TOS:=SAVEDB;ASSEMBLE(XCHD);                                    <<MPEIV>>02878000
END <<SETTUNINGPARAMETERS>>;                                   <<MPEIV>>02880000
$PAGE "WRITE INITIAL LOG RECORD PROCEDURE"                     <<00594>>02882000
PROCEDURE LOGHEAD;                                                      02884000
   COMMENT: OUTPUTS LOG RECORD NUMBER 1 IF LOGGING REQUIRED;            02886000
   BEGIN                                                                02888000
                                                                        02890000
   EQUATE C0 = 6*DSTSIZE;  <<CORE DST DESCRIPTOR>>                      02892000
                                                                        02894000
   INTEGER POINTER CST = %1;                                            02896000
   INTEGER POINTER DST = %2;                                            02898000
   INTEGER POINTER PCB = %3;                                            02900000
   INTEGER POINTER IOQ = %5;                                            02902000
   INTEGER POINTER TRL = %12;                                           02904000
   INTEGER POINTER JPCNT = %15;                                         02906000
                                                                        02908000
   TOS := ABSOLUTE(UPDATEL);  <<UPDATE LEVEL>>                          02910000
   TOS := ABSOLUTE(FIXL);  <<FIX LEVEL>>                                02912000
   TOS := DST(C0).(3:13);  <<CORE SIZE IN K>>                           02914000
   TOS := CST(2);  <<NR. CST ENTRIES AVAIL.>>                           02916000
   TOS := DST(2);  <<NR. DST ENTRIES AVAIL.>>                           02918000
   TOS := PCB(2);  <<NR. PCB ENTRIES AVAIL.>>                           02920000
   TOS := IOQ(0).(0:8);  <<NR. IOQ ENTRIES AVAIL.>>                     02922000
   TOS := TRL(1).(0:8);  <<NR. TRL ENTRIES AVAIL.>>                     02924000
   TOS := ABSOLUTE(ZI)-ABSOLUTE(QI);  <<ICS SIZE>>                      02926000
   TOS := 0;  <<RESERVED>>                                  <<C0.00>>   02928000
   TOS := JPCNT(0).(8:8);  <<MAX. NR. RUNNING JOBS>>                    02930000
   TOS := 1;  <<LOG RECORD TYPE>>                                       02932000
                                                                        02934000
   LOG;  <<EMIT LOG RECORD>>                                            02936000
                                                                        02938000
   END;  <<LOGHEAD>>                                                    02940000
PROCEDURE INITLOG;                                             <<03100>>02942000
BEGIN                                                          <<03100>>02944000
                                                               <<03100>>02946000
<<*********************************************************>>  <<03100>>02948000
<<                                                         >>  <<03100>>02950000
<< This procedure initializes the logging process.         >>  <<03100>>02952000
<< Logging is always enabled, and particular events are    >>  <<03100>>02954000
<< always logged.  This procedure is the only procedure in >>  <<03100>>02956000
<< the system that knows which events are always logged.   >>  <<03100>>02958000
<< This information is stored in the variables of the form,>>  <<03100>>02960000
<< LOG'REQUIRED'n (where "n" in a word number).  This      >>  <<03100>>02962000
<< procedure will disable logging for all events if the    >>  <<03100>>02964000
<< logging enabled bit is off, will ensure that logging is >>  <<03100>>02966000
<< always enabled, and will ensure that the required log   >>  <<03100>>02968000
<< events are logged.  When this is all done, the Log      >>  <<03100>>02970000
<< Process is then initialized.                            >>  <<03100>>02972000
<<                                                         >>  <<03100>>02974000
<< This algorithm assumes that INITIAL always creates the  >>  <<03100>>02976000
<< logging process.  It checks, however, that the log      >>  <<03100>>02978000
<< process was, in fact, created.  If the log process is   >>  <<03100>>02980000
<< missing, it generates a warning message on the console. >>  <<03100>>02982000
<<                                                         >>  <<03100>>02984000
<<*********************************************************>>  <<03100>>02986000
                                                               <<03100>>02988000
LOGICAL                                                        <<03100>>02990000
   LOG'REQUIRED'0 := 0, << Holds information on which log  >>  <<03100>>02992000
   LOG'REQUIRED'1 := 0, <<    events are always enabled.   >>  <<03100>>02994000
   LOG'REQUIRED'2 := 0;                                        <<03100>>02996000
                                                               <<03100>>02998000
DEFINE                                                         <<03100>>03000000
                                                               <<03100>>03002000
<< The following DEFINE determines whether the log process >>  <<03100>>03004000
<<     was actually created by INITIAL.                    >>  <<03100>>03006000
   LOG'PROC'NOT'THERE = ( SYSPROC(LOGPCBN) = 0 ) #,            <<03100>>03008000
                                                               <<03100>>03010000
<< The Log-Enabled bit is in Word Zero of the LOGINFO mask >>  <<03100>>03012000
<<     in the SYSGLOB area.                                >>  <<03100>>03014000
   LOG'ENABLED'BITS = (15:1) #,                                <<03100>>03016000
   LOG'ENABLED = L'INFO'0.LOG'ENABLED'BITS #,                  <<03100>>03018000
                                                               <<03100>>03020000
<< The following are the bit positions of the required     >>  <<03100>>03022000
<<    logging events.                                      >>  <<03100>>03024000
   LOG'HEAD'BITS = (14:1) #,    << Log Head logging bits.  >>  <<03100>>03026000
   IOERR'BITS = (4:1) #,        << Type 11: IO error.      >>  <<03100>>03028000
   MAINT'BITS = (1:1) #,        << Type 46: MAINT event.   >>  <<03100>>03030000
   DCU'BITS = (0:1) #,          << Type 47: DCU events.    >>  <<03100>>03032000
                                                               <<03100>>03034000
   L'INFO'0   = A'(ABSYS + LOGINFO)     #,                     <<03100>>03036000
   L'INFO'1   = A'(ABSYS + LOGINFO + 1 )#,                     <<03100>>03038000
   L'INFO'2   = A'(ABSYS + LOGINFO + 2 )#;                     <<03100>>03040000
                                                               <<03100>>03042000
<< Start of Code.                                          >>  <<03100>>03044000
                                                               <<03100>>03046000
                                                               <<03100>>03048000
<< If INITIAL did not create the Log Process, issue a      >>  <<03100>>03050000
<< warning to the console and return to do other things.   >>  <<03100>>03052000
   IF LOG'PROC'NOT'THERE THEN                                  <<03100>>03054000
   BEGIN                                                       <<03100>>03056000
      GENMSG( SYSSET, NO'LOG'PROC );                           <<03100>>03058000
      LOG'ENABLED := 0;       << Disable logging.          >>  <<03100>>03060000
      RETURN;                                                  <<03100>>03062000
   END;                                                        <<03100>>03064000
                                                               <<03100>>03066000
                                                               <<03100>>03068000
<< If logging comes in disabled, zero out all logging      >>  <<03100>>03070000
<<    events and enable logging.                           >>  <<03100>>03072000
   IF NOT LOG'ENABLED THEN                                     <<03100>>03074000
   BEGIN                                                       <<03100>>03076000
      L'INFO'0 := 0;                                           <<03100>>03078000
      LOG'ENABLED := 1;       << Enable logging.           >>  <<03100>>03080000
      L'INFO'1 := 0;                                           <<03100>>03082000
      L'INFO'2 := 0;                                           <<03100>>03084000
   END;                                                        <<03100>>03086000
                                                               <<03100>>03088000
<< Set up the masks of the required events.                >>  <<03100>>03090000
<< ***NOTE***:  This is the only area that "knows" which   >>  <<03100>>03092000
<<              events are required to be active.          >>  <<03100>>03094000
   LOG'REQUIRED'0.LOG'HEAD'BITS := 1;   << Type 1.         >>  <<03100>>03096000
   LOG'REQUIRED'0.IOERR'BITS := 1;      << Type 11.        >>  <<03100>>03098000
   LOG'REQUIRED'2.MAINT'BITS := 1;      << Type 46.        >>  <<03100>>03100000
   LOG'REQUIRED'2.DCU'BITS := 1;        << Type 47.        >>  <<03100>>03102000
                                                               <<03100>>03104000
<< Ensure all required logging events are enabled.         >>  <<03100>>03106000
   L'INFO'0 := L'INFO'0 LOR LOG'REQUIRED'0;                    <<03100>>03108000
   L'INFO'1 := L'INFO'1 LOR LOG'REQUIRED'1;                    <<03100>>03110000
   L'INFO'2 := L'INFO'2 LOR LOG'REQUIRED'2;                    <<03100>>03112000
                                                               <<03100>>03114000
<< Initialize the Logging Process.                         >>  <<03100>>03116000
   AWAKE( SYSPROC(LOGPCBN), 1, 2 );                            <<03100>>03118000
   LOGHEAD;                                                    <<03100>>03120000
                                                               <<03100>>03122000
END;  << INITLOG >>                                            <<03100>>03124000
                                                               <<03100>>03126000
$PAGE "GETSYSUDCFLAG"                                          <<00416>>03128000
INTEGER PROCEDURE GETSYSUDCFLAG(NTRY,LEVEL,INX,SIRS);          <<00416>>03130000
VALUE LEVEL,INX,SIRS;                                          <<00416>>03132000
INTEGER LEVEL,INX;                                             <<00416>>03134000
DOUBLE SIRS;                                                   <<00416>>03136000
ARRAY NTRY;                                                    <<00416>>03138000
OPTION UNCALLABLE;                                             <<00416>>03140000
BEGIN                                                          <<00416>>03142000
   DEFINE UDCFLAG=27).(0:1#;   <<SYS ACCT BIT 4 SYSTEM UDC'S>> <<00885>>03144000
   EQUATE SYSUDCFLAG=%1376;                                    <<00416>>03146000
                                                               <<00416>>03148000
   ABSOLUTE(SYSUDCFLAG):=NTRY(UDCFLAG);                        <<00416>>03150000
   GETSYSUDCFLAG:=5;  <<STOP SCAN, SIRS NOT RELEASED>>         <<00416>>03152000
END;                                                           <<00416>>03154000
$PAGE "PROCEDURE TO HANDLE OLD = COMMANDS"                     <<00594>>03156000
LOGICAL PROCEDURE USECI;                                       <<00594>>03158000
OPTION PRIVILEGED,INTERNAL;                                    <<00594>>03160000
BEGIN                                                          <<00594>>03162000
Entry Nosuchcommand,Usenewspool,Usealtdel,Usenewcomm;          <<01176>>03164000
   INTEGER I;                                                  <<00594>>03166000
   BYTE ARRAY MSG(0:71);                                       <<00594>>03168000
                                                               <<00594>>03170000
<< USECI ENTRY POINT>>                                         <<00594>>03172000
   I:=0;                                                       <<00594>>03174000
   GO TO COMMON;                                               <<00594>>03176000
                                                               <<00594>>03178000
<< NOSUCHCOMMAND ENTRY POINT>>                                 <<00594>>03180000
                                                               <<00594>>03182000
NOSUCHCOMMAND:                                                 <<00594>>03184000
   I:=1;                                                       <<00594>>03186000
   GO TO COMMON;                                               <<00594>>03188000
                                                               <<00594>>03190000
<< USENEWSPOOL ENTRY POINT>>                                   <<00594>>03192000
                                                               <<00594>>03194000
USENEWSPOOL:                                                   <<00594>>03196000
   I:=2;                                                       <<00594>>03198000
   GO TO COMMON;                                               <<00594>>03200000
                                                               <<00594>>03202000
<< USEALTDEL ENTRY POINT >>                                    <<00594>>03204000
                                                               <<00594>>03206000
USEALTDEL:                                                     <<00594>>03208000
   I:=3;                                                       <<00594>>03210000
   Go to COMMON;                                               <<01176>>03212000
                                                               <<01176>>03214000
<< Usenewcomm entry point >>                                   <<01176>>03216000
Usenewcomm:                                                    <<01176>>03218000
   I:=4;                                                       <<01176>>03220000
                                                               <<00594>>03222000
COMMON:                                                        <<00594>>03224000
   USECI:=TRUE;                                                <<00594>>03226000
   CASE I OF BEGIN                                             <<00594>>03228000
      MOVE MSG:=("USE THE COMMAND INTERPRETER COMMAND",0);     <<00594>>03230000
      MOVE MSG:=("THIS COMMAND NO LONGER EXISTS",0);           <<00594>>03232000
      MOVE MSG:=("USE STARTSPOOL, STOPSPOOL, SUSPENDSPOOL",    <<00594>>03234000
                 " RESUMESPOOL C.I. COMMANDS",0);              <<00594>>03236000
      MOVE MSG:=("USE ALTSPOOLFILE OR DELETESPOOLFILE",        <<00594>>03238000
                 " C.I. COMMAND",0);                           <<00594>>03240000
      Move Msg:=("USE :DSCONTROL, :MRJECONTROL, OR",           <<01176>>03242000
          " :MPLINE FOR COMMUNICATIONS OPERATIONS.",0);        <<01176>>03244000
   END;                                                        <<00594>>03246000
   GENMSG(-1,@MSG); <<SEND MESSAGE TO OPERATOR>>               <<00594>>03248000
END;                                                           <<00594>>03250000
$PAGE "***   OUTER BLOCK   ***"                                         03252000
SAVE'LOG'INFO := ABSYS'LOGINFO; << SAVE LOGGING STATUS INFO >> <<04845>>03254000
ABSYS'LOGINFO := 0; << TURN LOGGING OFF UNTIL DATE/TIME >>     <<04845>>03256000
<< Set absolute %1430 to other than zero for HELP >>           <<03518>>03258000
                                                               <<03518>>03260000
IF ABSOLUTE (%1430) <> 0 THEN HELP;                            <<03518>>03262000
                                                               <<03518>>03264000
SETTUNINGPARAMETERS;                                           <<MPEIV>>03266000
                                                               <<03652>>03268000
<< Init the disc free space map data segments for system     >><<03652>>03270000
<< discs.  This is done before the call to INITIO beacuse    >><<03652>>03272000
<< LYNX may be initialized during the INITIO for the console >><<03652>>03274000
<< and LYNX calls LOADPROC which calls the file system which >><<03652>>03276000
<< may call disc space management. (Not to cool)  The system >><<03652>>03278000
<< discs have really been initialized by the KERNEL before   >><<03652>>03280000
<< PROGEN is launched.  The only problem is if a error       >><<03652>>03282000
<< occurres during the init of the DFS data segs, which gens >><<03652>>03284000
<< console messages...  This is solved by having the DFS     >><<03652>>03286000
<< error routines called on PROGEN's stack send a message to >><<03652>>03288000
<< PROGEN (yes, send a message to our self) and we will      >><<03652>>03290000
<< generate the error message later on.                      >><<03652>>03292000
                                                               <<03652>>03294000
PROCESS'SYS'DISC'FREE'SPACE'MAPS (TRUE);                       <<03652>>03296000
                                                               <<03652>>03298000
INITIO(1); <<SYSTEM CONSOLE AND SYSTEM VOLUMES>>               <<MPEIV>>03300000
INITMSG;         <<SET UP MESSAGE SYSTEM>>                     <<00.EB>>03304000
                                                               <<03518>>03308000
TOS := 0;        <<ZERO CPU CLOCK>>                            <<00.EB>>03310000
ASSEMBLE( SCLK );                                              <<00.EB>>03312000
INITDATETIME;    <<GET DATE&TIME FROM OP. & START CLOCK>>      <<00.EB>>03314000
CPUNUM;                                                        <<04650>>03316000
IF TOS = SERIES64 THEN INIT'PMBCREGS;                          <<04650>>03318000
ABSYS'LOGINFO := SAVE'LOG'INFO; << RESTORE LOGGING STATUS >>   <<04845>>03320000
INITIO(FALSE);   <<INIT ALL OTHER DEVICES>>                    <<08.EB>>03322000
          INITLOG;  << Initialize Log Process >>               <<03100>>03326000
          AWAKE(SYSPROC(MEMLPCBN),1,2);                                 03330000
          AWAKE(ABSYS'PVPROC,1,2);                             <<00.PV>>03332000
          AWAKE(SYSPROC(UCOPPCBN),1,2);                                 03334000
          << >>                                                <<03771>>03336000
        SETUP'TAPES;  << Set up data structures for tapes >>   <<03771>>03338000
INITRECLOG;                                                    <<00506>>03340000
         SDFINIT(0);                                           <<00205>>03342000
          << >>                                                         03344000
        INITSPOOLING;                                                   03346000
          << >>                                                <<02565>>03350000
          ABSYS'SYSUP := 1;                                             03352000
          MOVE BUF(1)_MSGY(0),(5);                                      03354000
          PRINT(BUF(1),5,0);                                            03356000
         AWAKE(SYSPROC(UCOPPCBN),%20,0);                       <<01.01>>03358000
                                                               <<04183>>03360000
         << Initialize DCU logging via IOMESSPROC >>           <<04183>>03362000
         DCU'REQUEST(-1);                                      <<04183>>03364000
                                                               <<04183>>03366000
         <<START ANY HIPRI JOBS IN SYSTEM>>                    <<01.01>>03368000
   MOVE SYS := "SYS     ";                                     <<00529>>03370000
   DIRECSCAN(%420,0D,SYS,,,GETSYSUDCFLAG,DUMMY);               <<01313>>03372000
   <<SET SYSTEM LEVEL UDC EXISTS FLAG IN SYS DB>>              <<00416>>03374000
                                                               <<00416>>03376000
   MOVE HELLOSTRING:=(":HELLO OPERATOR.SYS;HIPRI",0);          <<00552>>03378000
   GENMSG(-1,@HELLOSTRING);                                             03380000
                                                               <<02856>>03382000
   << Need to set LOGON bit for disconnect processing >>       <<02856>>03384000
   SYS'LPDTP(CONSOLELDEV*LPDTSIZE + 1).LOGON := 1;             <<02856>>03386000
                                                               <<02856>>03388000
   DUMMY := 0;  << ERROR NUMBER >>                             <<01318>>03390000
   STARTDEVICE(1,HELLOSTRING(6),ABSYS'CONSOL.(8:8),,,,         <<00715>>03392000
               JOBNUM,DUMMY); << START SESSION AT CONSOLE >>   <<01318>>03394000
                                                               <<00594>>03396000
   IF DUMMY > 0 THEN      << LOGON FAILED...CLEANUP >>         <<01318>>03398000
   BEGIN                                                       <<00632>>03400000
      GENMSG(1,300); <<TELL OPERATOR IT DIDNT WORK>>           <<00632>>03402000
   << The console must be DCLOSE'd to free the device. >>      <<03099>>03406000
      ATTACHIO(CONSOLELDEV,0,0,0,4,0,0,0,1);                   <<03099>>03408000
   END                                                         <<00632>>03410000
   ELSE ABSOLUTE(ABSYS+SESSION1):=JOBNUM.(4:12);<<SAVE JOB#>>  <<00552>>03412000
   ENABLE;  <<INITIAL CREATES THE PROGENITOR DISABLE'D>>       <<00594>>03414000
   GO TO AFTERINIT;                                            <<00552>>03416000
NEXT:                                                                   03418000
<<                                                      >>     <<KS.01>>03420000
<<  PRINT PROMPT WITH NO CR, NO LF, AND HARD PRE-EMPTION>>     <<KS.01>>03422000
<<                                                      >>     <<KS.01>>03424000
          DIT:=A'(ABSYS+A'(LPDTBASE+ABSYS)+LPDTSIZE*CONSOLELDEV)+ABSYS; 03426000
          UP:=A'(DIT'UPBIT); <<CONSOLE DEVICE UP??>>           <<00552>>03428000
       << TERM:=A'(DIT'TERM); >>  <<USE THE DEFAULT TERM TYPE>><<02315>>03430000
          IF NOT UP                                            <<00552>>03432000
             THEN ATTACHIO(CONSOLELDEV,0,0,0,24,0,0,0,1);      <<02315>>03434000
            GENMSG(-1,@MSGEQ,,,,,,,,,,,[1/1,13/0,2/2]);        <<KS.01>>03436000
         TOS:=ATTACHIO(CONSOLELDEV,0,0,@BUF,0,-70,5,0,%401);   <<00552>>03438000
         DELB;                                                          03440000
         CNT := -TOS;                                                   03442000
            LOG15(-CNT,@BBUF,CNT,15);<<LOG OP INPUT>>          <<KS.01>>03444000
          BBUF(CNT) _ %15;   <<CR>>                                     03446000
          CHAR _ BUF(0);                                                03448000
      << SETSERVICE(0);                 >>                              03450000
          TOS _ @BBUF;                                                  03452000
          ASSEMBLE(DUP; DUP);                                           03454000
          IF BPS0 = ALPHA                                      <<00182>>03456000
            THEN MOVE * := * WHILE AS,1                        <<00182>>03458000
            ELSE MOVE * := * WHILE ANS,1;                      <<00182>>03460000
          ASSEMBLE(XCH; LSUB; STOR COMLGTH);                            03462000
          COMNO _ SEARCH(BBUF,COMLGTH,DICT);                            03464000
          @BP1 _ @BBUF(COMLGTH);                                        03466000
             IF NOT (4<= COMNO <=5) THEN                      <<01.01>> 03468000
             BEGIN                                            <<01.01>> 03470000
             TOS:=@BP1-1;              <<START OF PARAMETER>> <<01.01>> 03472000
             DO BEGIN                                         <<01.01>> 03474000
                TOS:=TOS+1;            <<BUMP ADDRESS>>       <<01.01>> 03476000
                TOS:=S0;               <<DUPLICATE ADDRESS>>  <<01.01>> 03478000
                MOVE * := * WHILE ANS, 1; <<UPSHIFT>>         <<01.01>> 03480000
             END UNTIL BPS0 = %15;     <<CR>>                 <<01.01>> 03482000
             DEL;                      <<DELETE STACKED ADR>> <<01.01>> 03484000
             END;                                             <<01.01>> 03486000
          OK _ TRUE;                                                    03488000
          CASE COMNO OF                                                 03490000
            BEGIN                                                       03492000
               OK := FALSE;                                             03494000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03496000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03498000
            OK _ CONSREPLY(BP1);                                        03500000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03502000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03504000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03506000
            OK _ CONSABORTJOB(BP1);                                     03508000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03510000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03512000
            OK _ CONSDELIO(BP1);                                        03514000
            OK _ CONSSHUTDOWN(BP1);                                     03516000
            OK:=NOSUCHCOMMAND; <<COMMAND NO LONG EXISTS>>      <<00594>>03518000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03520000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03522000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03524000
            OK := CONSLOGOFF (BP1);                                     03526000
            OK := CONSLOGON (BP1);                                      03528000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03530000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03532000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03534000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03536000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03538000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03540000
            OK:=USENEWSPOOL; <<SPOOL REPLACED BY NEW SPOOLER CO<<00594>>03542000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03544000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03546000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03548000
            OK:=USEALTDEL; <<USE NEW SPOOLER COMMANDS>>        <<00594>>03550000
            OK:=USEALTDEL; <<USE NEW SPOOLER COMMANDS>>        <<00594>>03552000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03554000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03556000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03558000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03560000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03562000
            OK := CONSRECALL(BP1);                             <<04526>>03564000
            OK := Usenewcomm;                                  <<01176>>03566000
            OK := USENEWCOMM;                                  <<01434>>03568000
            OK := USENEWCOMM;                                  <<01434>>03570000
            OK := CONS3270 (BP1);                              <<00182>>03572000
            OK := USECI; <<COMMAND IS IN CI NOW>>                       03574000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03576000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03578000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03580000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03582000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03584000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03586000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03588000
            OK:=USECI; <<COMMAND IS IN CI NOW>>                <<00594>>03590000
            OK:=USECI; <<COMMAND IS NOW IN CI>>                <<00624>>03592000
            END;                                                        03594000
          IF NOT OK THEN PRINT(MSGX,5,0);                               03596000
         ATTACHIO(CONSOLELDEV,0,0,0,31,0,0,0,%11);             <<00552>>03598000
GOL:                                                           <<00552>>03600000
          IF NOT UP THEN ATTACHIO(CONSOLELDEV,0,0,0,4,0,0,0,1);<<00552>>03602000
AFTERINIT:                                                     <<00552>>03604000
                                                               <<03518>>03606000
         CHECK'FOR'MESSAGE;                                    <<03518>>03608000
                                                               <<03518>>03610000
          WAIT (%20,0);                                        <<00552>>03612000
                                                               <<03518>>03614000
         MESSAGE'STATUS := CHECK'FOR'MESSAGE;                  <<03518>>03616000
                                                               <<03518>>03618000
         << If we got a message, don't issue read to console >><<03518>>03620000
                                                               <<03518>>03622000
         IF MESSAGE'STATUS THEN GOTO AFTERINIT;                <<03518>>03624000
                                                               <<03518>>03626000
         ATTACHIO(CONSOLELDEV,0,0,0,31,0,1,0,%411);            <<00552>>03628000
         GOTO NEXT;                                                     03630000
            << >>                                                       03632000
            << >>                                                       03634000
END.  << Progen >>                                             <<03518>>03636000
