$CONTROL MAP,CODE,USLINIT                                               00010000
<< MORGUE -- MODULE 64 >>                                      <<01071>>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
$THIRTY                                                                 00028000
$CONTROL SEGMENT=MORGUE,MAIN=MORGUE                            <<02.EB>>00030000
$CONTROL PRIVILEGED                                                     00032000
BEGIN                                                                   00034000
EQUATE   << GENMSG MESSAGES >>                                 <<05.EB>>00036000
   SYSET       = 1,                                            <<05.EB>>00038000
   SESSLOGOFF  = 37,                                           <<05.EB>>00040000
   JOBLOGOFF   = 45,                                           <<05.EB>>00042000
   CONSLOGOFF  = 41,                                           <<05.EB>>00044000
   NEGCONTIME = 73,                                            <<04155>>00046000
   NEGCPUTIME = 74,                                            <<04155>>00048000
   LOGINFO     = %1167;                                        <<05.EB>>00050000
DEFINE                                                                  00052000
         ABS      = ABSOLUTE#,                                 <<01549>>00054000
         ASMB     = ASSEMBLE#,                                 <<01549>>00056000
         TRAPSOFF = PUSH(STATUS);                              <<01549>>00058000
                    TOS.(2:1) := 0;                            <<01549>>00060000
                    SET(STATUS)#,                              <<01549>>00062000
         A'         = ABSOLUTE           #,                             00064000
         ENABLE     = ASSEMBLE(SED 1)    #,                             00066000
         DISABLE    = ASSEMBLE(SED 0)    #,                             00068000
         ENAPROC    = ASSEMBLE(PSEB)     #,                             00070000
         DISAPROC   = ASSEMBLE(PSDB)     #,                    <<05.EB>>00072000
         LOGLOGOFF  = ABSOLUTE(LOGINFO).(12:1) #;              <<05.EB>>00074000
                                                               <<01614>>00076000
INTEGER                                                                 00078000
         X          = X       ,                                         00080000
         STATUS     = Q-1     ,                                         00082000
         S0         = S-0     ,                                         00084000
         S1         = S-1     ,                                         00086000
         XREG       = X       ;                                         00088000
INTEGER POINTER                                                         00090000
         PS0        = S-0     ;                                         00092000
BYTE POINTER                                                            00094000
         BPS0       = S-0     ;                                         00096000
DOUBLE                                                                  00098000
         DS1        = S-1     ;                                         00100000
$PAGE "***   SYSTEM TABLES/CONSTANTS/POINTERS   ***"                    00102000
EQUATE                                                                  00104000
         CCG        = 0       ,                                         00106000
         CCL        = 1       ,                                         00108000
         CCE        = 2       ,                                         00110000
   <<FIXED CELLS>>                                                      00112000
         CSTB       = 0       ,                                         00114000
         XCST       = 1       ,                                         00116000
         DSTB       = 2       ,                                         00118000
         PCBB       = 3       ,                                         00120000
         CPCB       = 4       ,                                         00122000
         QI         = 5       ,                                         00124000
         ZI         = 6       ,                                         00126000
   <<TABLES>>                                                           00128000
         PCBSIZE    = 16      ,                                         00130000
         LPDTDST    = 13      ,                                         00132000
         LPDTSIR    = 9       ,                                         00134000
         LPDTSIZE   = 2       ,                                         00136000
         LDTDST     = 14      ,                                         00138000
         LDTSIZE    = 5       ,                                         00140000
         JMATDST    = 25      ,                                         00142000
         JMATSIR    = 15      ,                                         00144000
         JMATSIZE   = 26      ,                                         00146000
         JPCNTDST   = 24      ,                                         00148000
         JPCNTSIR   = 13      ,                                         00150000
         JCUTDST    = 36      ,                                         00152000
         JCUTSIR    = 14      ,                                         00154000
         JCUTSIZE   = 3       ,                                         00156000
         RINDST     = 22      ;                                         00158000
INTEGER POINTER                                                         00160000
         SYS'PCB    = 3       ,                                         00162000
         SYS'LPDT   = 8       ;                                         00164000
$INCLUDE INCLCIS                                               <<04602>>00166000
INTEGER UDCDSTNO = CIS'UDC0;                                   <<04602>>00168000
$PAGE "***   SYSTEM TABLES/CONSTANTS/POINTERS   ***"           <<04602>>00170000
DEFINE INITLOCFLAG=(1:1)#,                                     <<01549>>00172000
       HASSIRFLAG=(3:1)#,                                      <<01549>>00174000
       PSIMFIELD=(0:3)#,                                       <<01549>>00176000
       FACFLAG=(7:1)#,                                         <<01549>>00178000
       FLUSHLOCFLAG=(2:1)#;                                    <<01549>>00180000
EQUATE SLLIXWORDNUM=1,                                         <<01549>>00182000
       PIINFONIMPPINWORDNUM=%10,                               <<01549>>00184000
       RESABORTINFOWORDNUM=0;                                  <<01549>>00186000
EQUATE PCBIX=3;                                                <<01549>>00188000
INTEGER PCBSYSBASEINX=DB+PCBIX;                                <<01549>>00190000
                                                               <<01549>>00194000
DEFINE                                                         <<04799>>00196000
   SETXPXGLOB = PUSH (DL);  X := TOS - PS0 (-1)#,              <<04799>>00198000
   DEF'MOVEFROMDSEG =                                          <<04799>>00200000
      MOVEFROMDSEG(TARGET,DSTN,OFFSET,COUNT);                  <<04799>>00202000
      VALUE TARGET,DSTN,OFFSET,COUNT;                          <<04799>>00204000
      LOGICAL TARGET,DSTN,OFFSET,COUNT;                        <<04799>>00206000
      BEGIN                                                    <<04799>>00208000
        X := TOS;    <<  SAVE RETURN ADDRESS  >>               <<04799>>00210000
        ASSEMBLE(MFDS 0);                                      <<04799>>00212000
        TOS := X;    <<  RESTORE RETURN ADDRESS  >>            <<04799>>00214000
      END#;                                                    <<04799>>00216000
$INCLUDE INCLMEAS                                              <<01739>>00218000
                                                                        00220000
$INCLUDE INCLMIFT                                              <<04108>>00222000
$INCLUDE RINSINCL;                                             <<01602>>00224000
$PAGE "***   EXTERNAL PROCEDURES   ***"                                 00226000
                                                                        00228000
                                                                        00230000
DOUBLE PROCEDURE SUBQUEUE(N,CRITERIA);                                  00232000
   VALUE N,CRITERIA;                                                    00234000
   INTEGER N,CRITERIA;                                                  00236000
   OPTION EXTERNAL;                                                     00238000
                                                                        00240000
INTEGER PROCEDURE GET'DSDEVICE(LDEV);                          <<02077>>00242000
   VALUE LDEV;                                                 <<02077>>00244000
   INTEGER LDEV;                                               <<02077>>00246000
   OPTION EXTERNAL;                                            <<02077>>00248000
                                                               <<02077>>00250000
PROCEDURE ADJUSTLOCALITY(PROCINX,SEGIDENT,REQSIZE,FLAGS);      <<01549>>00252000
VALUE PROCINX,SEGIDENT,REQSIZE,FLAGS;                          <<01549>>00254000
LOGICAL PROCINX,SEGIDENT,REQSIZE,FLAGS;                        <<01549>>00256000
OPTION EXTERNAL;                                               <<01549>>00258000
                                                               <<01549>>00260000
PROCEDURE QUEUEPROC(PROCSYSDBINX,QUEUENAME,LOCATION);          <<01549>>00262000
VALUE PROCSYSDBINX,QUEUENAME,LOCATION;                         <<01549>>00264000
INTEGER PROCSYSDBINX,QUEUENAME,LOCATION;                       <<01549>>00266000
OPTION EXTERNAL;                                               <<01549>>00268000
                                                                        00270000
LOGICAL PROCEDURE CHECKALIVE (PIN); VALUE PIN; INTEGER PIN;    <<01874>>00272000
OPTION EXTERNAL;                                               <<01874>>00274000
                                                               <<01874>>00276000
LOGICAL PROCEDURE GETSIR (N);                                           00278000
   VALUE   N;                                                           00280000
   LOGICAL N;                                                           00282000
   OPTION EXTERNAL;                                                     00284000
                                                                        00286000
PROCEDURE RELSIR (N,F);                                                 00288000
   VALUE   N,F;                                                         00290000
   LOGICAL N,F;                                                         00292000
   OPTION EXTERNAL;                                                     00294000
                                                                        00296000
PROCEDURE FREELOCRIN;                                                   00298000
   OPTION EXTERNAL;                                                     00300000
                                                                        00302000
PROCEDURE SUDDENDEATH (N);                                              00304000
   VALUE   N;                                                           00306000
   INTEGER N;                                                           00308000
   OPTION EXTERNAL;                                                     00310000
                                                                        00312000
PROCEDURE ERROREXIT (I,E,P);                                            00314000
   VALUE   I,E,P;                                                       00316000
   LOGICAL I,E,P;                                                       00318000
   OPTION EXTERNAL;                                                     00320000
                                                                        00322000
PROCEDURE ERRORON;                                                      00324000
   OPTION EXTERNAL;                                                     00326000
                                                                        00328000
PROCEDURE ABORTPROCIO (A);                                              00330000
   VALUE   A;                                                           00332000
   INTEGER A;                                                           00334000
   OPTION EXTERNAL;                                                     00336000
                                                                        00338000
PROCEDURE RUNLOCK (R);                                                  00340000
   VALUE   R;                                                           00342000
   INTEGER R;                                                           00344000
   OPTION EXTERNAL;                                                     00346000
                                                                        00348000
PROCEDURE PRINT (MES,L,CTL);                                            00350000
   VALUE   L,CTL;                                                       00352000
   INTEGER L,CTL;                                                       00354000
   ARRAY   MES;                                                         00356000
   OPTION EXTERNAL;                                                     00358000
                                                                        00360000
PROCEDURE REMRITENTRY'(PIN,FLAG);                              <<01400>>00362000
   VALUE PIN, FLAG;                                            <<01400>>00364000
   INTEGER PIN, FLAG;                                          <<01400>>00366000
   OPTION EXTERNAL;                                            <<01400>>00368000
                                                                        00370000
PROCEDURE WAIT (WF,JPC);                                                00372000
   VALUE   WF,JPC;                                                      00374000
   INTEGER WF,JPC;                                                      00376000
   OPTION EXTERNAL;                                                     00378000
                                                                        00380000
LOGICAL PROCEDURE SETSYSDB;                                             00382000
   OPTION EXTERNAL;                                                     00384000
                                                                        00386000
PROCEDURE RESETDB (A);                                                  00388000
   VALUE   A;                                                           00390000
   LOGICAL A;                                                           00392000
   OPTION EXTERNAL;                                                     00394000
                                                                        00396000
PROCEDURE RETURNENTRY (LI,IX);                                          00398000
   VALUE   LI,IX;                                                       00400000
   INTEGER LI,IX;                                                       00402000
   OPTION EXTERNAL;                                                     00404000
                                                                        00406000
PROCEDURE RELDATASEG (IX);                                              00408000
   VALUE   IX;                                                          00410000
   INTEGER IX;                                                          00412000
   OPTION EXTERNAL;                                                     00414000
                                                                        00416000
LOGICAL PROCEDURE EXCHANGEDB (A);                                       00418000
   VALUE   A;                                                           00420000
   LOGICAL A;                                                           00422000
   OPTION EXTERNAL;                                                     00424000
                                                                        00426000
PROCEDURE FPROCTERM;                                                    00428000
   OPTION EXTERNAL;                                                     00430000
                                                               <<04809>>00432000
PROCEDURE FPROCTERMJOB;  << Special entry FPROCTERM >>         <<04809>>00434000
   OPTION EXTERNAL;                                            <<04809>>00436000
                                                                        00438000
PROCEDURE REQUCOP (A,B,C);                                              00440000
   VALUE   A,B,C;                                                       00442000
   LOGICAL A,B,C;                                                       00444000
   OPTION EXTERNAL;                                                     00446000
                                                                        00448000
PROCEDURE UNLOAD (PIN);                                                 00450000
   VALUE   PIN;                                                         00452000
   INTEGER PIN;                                                         00454000
   OPTION EXTERNAL;                                                     00456000
                                                                        00458000
PROCEDURE ABORTMAIL;                                                    00460000
   OPTION EXTERNAL;                                                     00462000
                                                                        00464000
PROCEDURE ABORTDSEG (F);                                                00466000
   VALUE   F;                                                           00468000
   LOGICAL F;                                                           00470000
   OPTION EXTERNAL;                                                     00472000
                                                                        00474000
PROCEDURE AWAKE (P, W, S);                                              00476000
   VALUE P, W, S;                                                       00478000
   INTEGER P, W, S;                                                     00480000
   OPTION EXTERNAL;                                                     00482000
                                                                        00484000
INTEGER PROCEDURE FDELETE (I,J,MVTABX);                        <<RV.PV>>00486000
   VALUE   I,J,MVTABX;                                         <<RV.PV>>00488000
   INTEGER I,MVTABX;                                           <<RV.PV>>00490000
   DOUBLE  J;                                                           00492000
   OPTION EXTERNAL,VARIABLE;                                   <<RV.PV>>00494000
                                                                        00496000
INTEGER PROCEDURE GENMSG(SETNO,MSGNO,MASK,A,B,C,D,E,           <<0U.EB>>00498000
      DEST,REPLY,BUFF,DST,IOTYPE);                             <<0U.EB>>00500000
   VALUE SETNO,MSGNO,MASK,A,B,C,D,E,DEST,REPLY,BUFF,           <<0U.EB>>00502000
      DST,IOTYPE;                                              <<0U.EB>>00504000
   LOGICAL SETNO,MSGNO,MASK,A,B,C,D,E,DEST,REPLY,BUFF,         <<0U.EB>>00506000
      DST,IOTYPE;                                              <<0U.EB>>00508000
   OPTION VARIABLE,EXTERNAL;                                   <<0U.EB>>00510000
                                                                        00512000
PROCEDURE RESETBREAKBITS (LDEV,CODE);                                   00514000
   VALUE   LDEV,CODE;                                                   00516000
   INTEGER LDEV,CODE;                                                   00518000
   OPTION EXTERNAL;                                                     00520000
                                                                        00522000
INTEGER PROCEDURE DIRECLOGOFF(MASK,JMATENTRY,T1,T2,AENTRY,     <<02.EB>>00524000
      UENTRY,GENTRY);                                          <<02.EB>>00526000
   VALUE MASK, T1, T2;                                                  00528000
   INTEGER MASK;                                                        00530000
   ARRAY JMATENTRY,AENTRY,UENTRY,GENTRY;                       <<02.EB>>00532000
   DOUBLE T1, T2;                                                       00534000
   OPTION EXTERNAL;                                                     00536000
                                                                        00538000
PROCEDURE USERTABLE(FUNCT,PININFO,MVTABX,RETINFO,RETSIZE);     <<RH.PV>>00540000
   VALUE FUNCT,PININFO,MVTABX,RETSIZE;                         <<RH.PV>>00542000
   INTEGER FUNCT,PININFO,MVTABX,RETSIZE;                       <<RH.PV>>00544000
   ARRAY RETINFO;                                              <<RH.PV>>00546000
   OPTION VARIABLE,EXTERNAL;                                   <<RH.PV>>00548000
                                                               <<RH.PV>>00550000
PROCEDURE DISMOUNT (VSNAME,VSGROUP,VSACCNT,REQTYPE,            <<00244>>00552000
                    PVINFO,SOME'OTHER'PIN);                    <<00244>>00554000
   VALUE PVINFO,SOME'OTHER'PIN;                                <<00244>>00556000
   INTEGER REQTYPE,PVINFO,SOME'OTHER'PIN;                      <<00244>>00558000
   BYTE ARRAY VSNAME,VSGROUP,VSACCNT;                          <<RH.PV>>00560000
   OPTION VARIABLE,EXTERNAL;                                   <<RH.PV>>00562000
                                                               <<RH.PV>>00564000
PROCEDURE FMTDATE(CALENDAR',CLOCK',STRING);                    <<05.EB>>00566000
   VALUE CALENDAR',CLOCK';                                     <<05.EB>>00568000
   LOGICAL CALENDAR';                                          <<05.EB>>00570000
   DOUBLE CLOCK';                                              <<05.EB>>00572000
   BYTE ARRAY STRING;                                          <<05.EB>>00574000
   OPTION EXTERNAL;                                            <<05.EB>>00576000
                                                               <<05.EB>>00578000
PROCEDURE DATE'LINE (BBUF);                                             00580000
   BYTE ARRAY BBUF;                                                     00582000
   OPTION EXTERNAL;                                                     00584000
                                                                        00586000
LOGICAL PROCEDURE CALENDAR;                                             00588000
   OPTION EXTERNAL;                                                     00590000
                                                                        00592000
DOUBLE PROCEDURE CLOCK;                                                 00594000
   OPTION EXTERNAL;                                                     00596000
                                                                        00598000
DOUBLE PROCEDURE TIMER;                                        <<01739>>00600000
  OPTION EXTERNAL;                                             <<01739>>00602000
                                                               <<01739>>00604000
PROCEDURE CLEANTAPE(PINNO);                                    <<TL.02>>00606000
  VALUE PINNO;                                                 <<TL.02>>00608000
  INTEGER PINNO;                                               <<TL.02>>00610000
  OPTION EXTERNAL;                                             <<TL.02>>00612000
                                                               <<TL.02>>00614000
PROCEDURE LOG3 (MAXPRI, CREATES, CPUT, ELAPSEDT, LOGTYPE);              00616000
   VALUE MAXPRI, CREATES, CPUT, ELAPSEDT, LOGTYPE;                      00618000
   INTEGER MAXPRI, CREATES, LOGTYPE;                                    00620000
   DOUBLE CPUT, ELAPSEDT;                                               00622000
   OPTION EXTERNAL;                                                     00624000
                                                                        00626000
LOGICAL PROCEDURE IOCONTROL(DEV,FUNC);                                  00628000
   VALUE DEV,FUNC;                                                      00630000
   INTEGER DEV,FUNC;                                                    00632000
   OPTION EXTERNAL;                                                     00634000
                                                                        00636000
LOGICAL PROCEDURE MRCAPOK (SB, RIN);                           <<00560>>00638000
   VALUE SB, RIN;                                              <<00560>>00640000
   LOGICAL SB;   INTEGER RIN;                                  <<00560>>00642000
   OPTION EXTERNAL, VARIABLE;                                  <<00560>>00644000
                                                                        00646000
INTEGER PROCEDURE SETCRITICAL;                                          00648000
   OPTION EXTERNAL;                                                     00650000
                                                                        00652000
PROCEDURE RESETCRITICAL (A);                                            00654000
   VALUE   A;                                                           00656000
   INTEGER A;                                                           00658000
   OPTION EXTERNAL;                                                     00660000
                                                                        00662000
PROCEDURE SET'PSIF (PCBPT,F);                                           00664000
   VALUE   PCBPT,F;                                                     00666000
   INTEGER PCBPT,F;                                                     00668000
   OPTION EXTERNAL;                                                     00670000
                                                                        00672000
PROCEDURE CLEAR'PSIF (PCBPT,F);                                         00674000
   VALUE   PCBPT,F;                                                     00676000
   INTEGER PCBPT,F;                                                     00678000
   OPTION EXTERNAL;                                                     00680000
                                                                        00682000
LOGICAL PROCEDURE  SYSPROC(P);                                          00684000
   VALUE   P;                                                           00686000
   INTEGER P;                                                           00688000
   OPTION EXTERNAL;                                                     00690000
                                                                        00692000
PROCEDURE  MMSTAT(E,P1,P2,P3);                                          00694000
   VALUE P1,P2,P3,E;                                                    00696000
   INTEGER P1,P2,P3,E;                                                  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
                                                                        00712000
INTEGER PROCEDURE REMOVESTOP(A,B,C,D,E);                       <<01549>>00714000
  VALUE A,B,C;                                                 <<01549>>00716000
  INTEGER A,B,C,E;                                             <<01549>>00718000
  INTEGER ARRAY D;                                             <<01549>>00720000
   OPTION VARIABLE,EXTERNAL;                                   <<01071>>00722000
                                                               <<03047>>00724000
PROCEDURE LOOSESOFTINTERRUPTS;                                 <<03047>>00726000
OPTION EXTERNAL;                                               <<03047>>00728000
                                                               <<03047>>00730000
PROCEDURE LOOSETRLX;                                           <<03047>>00732000
OPTION EXTERNAL;                                               <<03047>>00734000
                                                                        00736000
PROCEDURE HELP;                                                         00738000
   OPTION EXTERNAL;                                                     00740000
                                                                        00742000
DOUBLE PROCEDURE STARTDEVICE (COM,PARR,DEV,JM,ID,JB);                   00744000
   VALUE   COM,DEV;                                                     00746000
   INTEGER COM,DEV,JB;                                                  00748000
   BYTE ARRAY PARR;                                                     00750000
   INTEGER POINTER JM,ID;                                               00752000
   OPTION VARIABLE,EXTERNAL;                                            00754000
                                                                        00756000
INTEGER PROCEDURE FORMERROR (ERR,PARM,BUF);                             00758000
   VALUE   ERR,PARM;                                                    00760000
   INTEGER ERR,PARM;                                                    00762000
   ARRAY   BUF;                                                         00764000
   OPTION EXTERNAL;                                                     00766000
                                                                        00768000
PROCEDURE DEALLOCATE (XDEV);                                            00770000
   VALUE   XDEV;                                                        00772000
   INTEGER XDEV;                                                        00774000
   OPTION EXTERNAL;                                                     00776000
                                                                        00778000
PROCEDURE FORMUSERID(IDBUFF);                                  <<04155>>00780000
   BYTE ARRAY IDBUFF;                                          <<04155>>00782000
   OPTION EXTERNAL;                                            <<04155>>00784000
PROCEDURE FREEDEVICE (LDEV,F);                                          00786000
   VALUE   LDEV,F;                                                      00788000
   INTEGER LDEV;                                                        00790000
   LOGICAL F;                                                           00792000
   OPTION EXTERNAL;                                                     00794000
                                                                        00796000
PROCEDURE DEALLOCENTRY (EP);                                            00798000
   VALUE EP;                                                            00800000
   INTEGER POINTER EP;                                                  00802000
   OPTION EXTERNAL;                                                     00804000
                                                                        00806000
PROCEDURE FUNBREAK(F);                                                  00808000
   VALUE   F;                                                           00810000
   LOGICAL F;                                                           00812000
   OPTION EXTERNAL;                                                     00814000
                                                                        00816000
PROCEDURE FJCLOSE (FNUM, DUMMY1, DUMMY2);                               00818000
   VALUE FNUM, DUMMY1, DUMMY2;                                          00820000
   INTEGER FNUM, DUMMY1, DUMMY2;                                        00822000
   OPTION EXTERNAL;                                                     00824000
                                                                        00826000
INTRINSIC DASCII;                                                       00828000
                                                                        00830000
PROCEDURE CLEANUPLOG;                                          <<00506>>00832000
OPTION EXTERNAL;                                               <<00506>>00834000
LOGICAL PROCEDURE CILOGTABLE(CODE,JMATX,CNTWORD,COMMAND);      <<02.EB>>00836000
   VALUE   CODE,JMATX;                                         <<02.EB>>00838000
   INTEGER CODE,JMATX,CNTWORD;                                 <<02.EB>>00840000
   INTEGER ARRAY COMMAND;                                      <<02.EB>>00842000
    OPTION EXTERNAL;                                           <<02.EB>>00844000
                                                               <<02.EB>>00846000
    <<FOPEN ENTRY POINT>>                                      <<RV.PV>>00848000
INTEGER PROCEDURE MUSTOPEN (FD,FO,AO,R,D,FM,U,B,N,FS,          <<RV.PV>>00850000
                          NE,I,FC);                            <<RV.PV>>00852000
    VALUE   FO,AO,R,U,B,N,FS,NE,I,FC;                          <<RV.PV>>00854000
    BYTE ARRAY FD,D,FM;                                        <<RV.PV>>00856000
    LOGICAL FO,AO;                                             <<RV.PV>>00858000
    INTEGER R,U,B,N,NE,I,FC;                                   <<RV.PV>>00860000
    DOUBLE  FS;                                                <<RV.PV>>00862000
    OPTION  EXTERNAL,VARIABLE;                                 <<RV.PV>>00864000
                                                               <<RV.PV>>00866000
                                                               <<RV.PV>>00868000
INTRINSIC                                                      <<RV.PV>>00870000
      FCLOSE,FFILEINFO,GETJCW;                                 <<01549>>00872000
                                                               <<RV.PV>>00874000
LOGICAL PROCEDURE SFINDODD(DFID,XDDEP);                        <<SP.SZ>>00876000
   VALUE DFID;                                                 <<SP.SZ>>00878000
   INTEGER DFID;                                               <<SP.SZ>>00880000
   INTEGER XDDEP;                                              <<SP.SZ>>00882000
   OPTION EXTERNAL;                                            <<SP.SZ>>00884000
                                                               <<SP.SZ>>00886000
DOUBLE PROCEDURE XDDSPOOLINFO(DVALUE,ITEM,XDDSUBP);            <<SP.SZ>>00888000
   VALUE DVALUE,ITEM,XDDSUBP;                                  <<SP.SZ>>00890000
   LOGICAL ITEM;                                               <<SP.SZ>>00892000
   DOUBLE DVALUE;                                              <<SP.SZ>>00894000
   INTEGER POINTER XDDSUBP;                                    <<SP.SZ>>00896000
   OPTION EXTERNAL;                                            <<SP.SZ>>00898000
                                                               <<SP.SZ>>00900000
INTEGER PROCEDURE DELASS(ASSINX,JITINX);                       <<00552>>00902000
VALUE ASSINX,JITINX; LOGICAL ASSINX,JITINX;                    <<00552>>00904000
OPTION EXTERNAL;                                               <<00552>>00906000
                                                               <<01549>>00908000
PROCEDURE STOPSTATISTICS(CLASSMASK);                           <<01549>>00910000
VALUE CLASSMASK;                                               <<01549>>00912000
LOGICAL CLASSMASK;                                             <<01549>>00914000
OPTION PRIVILEGED,UNCALLABLE,FORWARD;                          <<01614>>00916000
$PAGE "***   INTERNAL PROCEDURES   ***"                                 00918000
                                                                        00920000
                                                               <<01549>>00922000
 PROCEDURE UNFREEZE(EN,TEST,PINX);                             <<01549>>00924000
 VALUE EN,TEST,PINX;                                           <<01549>>00926000
 INTEGER EN,PINX;                                              <<01549>>00928000
 LOGICAL TEST;                                                 <<01549>>00930000
 OPTION EXTERNAL;                                              <<01549>>00932000
                                                               <<01549>>00934000
 PROCEDURE UNLOCKSEG(EN,TEST,PINX);                            <<01549>>00936000
 VALUE EN,TEST,PINX;                                           <<01549>>00938000
 INTEGER EN,PINX;                                              <<01549>>00940000
 LOGICAL TEST;                                                 <<01549>>00942000
 OPTION EXTERNAL;                                              <<01549>>00944000
                                                               <<01549>>00946000
 PROCEDURE DELAY(T);                                           <<01549>>00948000
 VALUE T;                                                      <<01549>>00950000
 DOUBLE T;                                                     <<01549>>00952000
 OPTION EXTERNAL;                                              <<01549>>00954000
                                                               <<01766>>00956000
procedure PROCFILE(PIN,PROG'FILE);                             <<01766>>00958000
value PIN;                                                     <<01766>>00960000
integer PIN;                                                   <<01766>>00962000
byte array PROG'FILE;                                          <<01766>>00964000
option external;                                               <<01766>>00966000
                                                               <<01766>>00968000
procedure LOG16;                                               <<01766>>00970000
option external;                                               <<01766>>00972000
                                                               <<01766>>00974000
procedure LOG'STUN'SIMULATION(PIN);                            <<01766>>00976000
value PIN;                                                     <<01766>>00978000
integer PIN;                                                   <<01766>>00980000
option privileged,uncallable,forward;                          <<01766>>00982000
                                                               <<01766>>00984000
PROCEDURE CLEANUPFILES;                                                 00986000
OPTION PRIVILEGED, UNCALLABLE;                                          00988000
                                                                        00990000
COMMENT: SEQUENTIALLY PICKS OUT ENTRIES FROM TANLE #2 OF THE JOB TABLE  00992000
         ,FINDS AN ASSOCIATED LOGICAL DEVICE NUMBER(LDEV) AND FILE      00994000
         ADDRESS(FADDR) AND PASSES THEM TO FDELETE WHICH DELETES THE FIL00996000
         AND RELEASES THE DISC SPACE. ENTRIES IN THE TABLE #2 ARE NOT   00998000
         DELETED.                                                       01000000
         ;                                                              01002000
                                                                        01004000
BEGIN                                                                   01006000
    DOUBLE                                                              01008000
         FADDR   <<DISK ADR.>>                                          01010000
   ;INTEGER                                                             01012000
         PXGJDT   <<JOB TABLE DST #>>                                   01014000
        ,I,J,K,L,FNUM,OLDDTAB3                                 <<00265>>01016000
        ,LDEV   <<LOG.DEV.#>>                                           01018000
        ,FADDR1 = FADDR                                                 01020000
        ,FADDR2 = FADDR+1                                               01022000
        ,JITDSTN                                                        01024000
   ;DOUBLE ARRAY                                                        01026000
         DMESS(0:1)=Q                                                   01028000
   ;INTEGER ARRAY                                                       01030000
         DTAB(*) = DB+0   <<JOB TABLE>>                                 01032000
   ;INTEGER POINTER                                                     01034000
         PXPNTR                                                         01036000
   ;                                                                    01038000
   ARRAY                                                       <<RV.PV>>01040000
       TEMPA (0:11) = Q;                                       <<RV.PV>>01042000
   BYTE ARRAY                                                  <<RV.PV>>01044000
       BTEMPA (*) = TEMPA,                                     <<RV.PV>>01046000
       FDESIGN (0:26) = Q;                                     <<RV.PV>>01048000
                                                                        01050000
   PUSH(DL);                                                            01052000
   @PXPNTR _ TOS-PS0(-1);                                               01054000
   PXGJDT _ PXPNTR(5).(6:10);                                           01056000
   JITDSTN _ PXPNTR(6).(6:10);                                          01058000
   EXCHANGEDB(PXGJDT);   <<JOB TABLE>>                                  01060000
   I _ DTAB(2);   <<BEGINNING OF JOB TEMP.FILE TABLE>>                  01062000
   WHILE I<DTAB(3) DO                                                   01064000
      BEGIN   <<CYCLE ON ENTRY>>                                        01066000
      OLDDTAB3 := DTAB (3);                                    <<00265>>01068000
      K := DTAB (I).(8:8);                                              01070000
      EXCHANGEDB (0);                                          <<RV.PV>>01072000
      TOS := @TEMPA;                                           <<RV.PV>>01074000
      TOS := PXGJDT;                                           <<RV.PV>>01076000
      TOS := @DTAB (I+1);                                      <<RV.PV>>01078000
      TOS := K;                                                <<RV.PV>>01080000
      ASSEMBLE (MFDS);                                         <<RV.PV>>01082000
      J := K & LSL (1); <<# OF BYTES IN NAME>>                 <<RV.PV>>01084000
      K := L := -1;                                            <<RV.PV>>01086000
      DO BEGIN                                                 <<RV.PV>>01088000
             IF (LOGICAL (BTEMPA (K:=K+1)) LAND %200) <> 0 THEN<<RV.PV>>01090000
              IF K <> 0 THEN                                   <<RV.PV>>01092000
               FDESIGN (L:=L+1) := ".";                        <<RV.PV>>01094000
             FDESIGN (L:=L+1):= LOGICAL (BTEMPA (K)) LAND %177;<<RV.PV>>01096000
         END UNTIL (J:=J-1) <= 0;                              <<RV.PV>>01098000
      FDESIGN (L:=L+1) := " ";                                 <<RV.PV>>01100000
      IF (FNUM := MUSTOPEN (FDESIGN,%2002,%500)) <> 0 THEN     <<RV.PV>>01102000
      BEGIN                                                    <<RV.PV>>01104000
          FCLOSE (FNUM,4,0);                                   <<RV.PV>>01106000
          IF <> THEN FCLOSE (FNUM,-1,0);                       <<RV.PV>>01108000
      END;                                                     <<RV.PV>>01110000
      EXCHANGEDB(PXGJDT);                                               01112000
      IF DTAB (3) = OLDDTAB3 THEN I := I + DTAB (I).(0:8);     <<00265>>01114000
      END;                                                              01116000
   EXCHANGEDB(JITDSTN);                                                 01118000
   LDEV _ DTAB(36).(0:8);                                               01120000
   FADDR1 _ DTAB(36).(8:8);                                             01122000
   FADDR2 _ DTAB(37);                                                   01124000
   EXCHANGEDB(0);                                                       01126000
   IF LDEV <> 0 AND FADDR <> 0D THEN                           <<RV.PV>>01128000
   BEGIN                                                       <<RV.PV>>01130000
       IF (FNUM := MUSTOPEN (,%2032,%500)) <> 0 THEN           <<RV.PV>>01132000
       BEGIN                                                   <<RV.PV>>01134000
           FCLOSE (FNUM,4,0);                                  <<RV.PV>>01136000
           IF <> THEN FCLOSE (FNUM,-1,0);                      <<RV.PV>>01138000
       END;                                                    <<RV.PV>>01140000
   END;                                                        <<RV.PV>>01142000
END;   <<PROCEDURE CLEANUPFILES>>                                       01144000
                                                                        01146000
PROCEDURE CLEANUPVOLUMES;                                      <<RH.PV>>01148000
OPTION PRIVILEGED,UNCALLABLE;                                  <<RH.PV>>01150000
                                                               <<RH.PV>>01152000
COMMENT: THIS PROCEDURE DISSOCIATES THE PROCESS FROM           <<RH.PV>>01154000
         ANY MOUNTED VOLUME SETS.                              <<RH.PV>>01156000
       ;                                                       <<RH.PV>>01158000
                                                               <<RH.PV>>01160000
BEGIN                                                          <<RH.PV>>01162000
      INTEGER I:=0,PIN,REQTYPE;                                <<RV.PV>>01164000
      EQUATE USERINFOSIZE = 40,  <<SIZE OF RETURN ARRAY>>      <<RV.PV>>01166000
             BYEREQ = 5;                                       <<RV.PV>>01168000
      INTEGER ARRAY USERINFO(0:USERINFOSIZE-1);                <<RH.PV>>01170000
                                                               <<RH.PV>>01172000
      PIN:=(A'(CPCB)-A'(PCBB))/PCBSIZE;                        <<RH.PV>>01174000
      USERTABLE(2,PIN,,USERINFO,USERINFOSIZE);                 <<RH.PV>>01176000
      WHILE (I:=I+1) <= USERINFO DO                            <<RH.PV>>01178000
      BEGIN                                                    <<RH.PV>>01180000
          REQTYPE := BYEREQ;                                   <<RV.PV>>01182000
          DISMOUNT (<<VSNAME>>,<<VSGROUP>>,<<VSACCNT>>,REQTYPE,<<RV.PV>>01184000
                    USERINFO(I));                              <<RV.PV>>01186000
      END;                                                     <<RH.PV>>01188000
END;   <<PROCEDURE CLEANUPVOLUMES>>                            <<RH.PV>>01190000
                                                               <<RH.PV>>01192000
PROCEDURE ABORTRIN(PIN);                                                01194000
VALUE PIN;                                                              01196000
INTEGER PIN;                                                            01198000
OPTION PRIVILEGED,UNCALLABLE;                                           01200000
                                                                        01202000
COMMENT: UNLOCKS ALL THE RINS THAT A PROCESS MIGHT HAVE LEFT            01204000
         LOCKED WHEN TERMINATING.                                       01206000
         RETURNS                                                        01208000
            CCG IF NO RIN WAS LOCKED                                    01210000
            CCL IF ONLY LOCAL RINS WERE STILL LOCKED                    01212000
            CCE IF ONLY GLOBAL RINS WERE STILL LOCKED                   01214000
            CCX IF BOTH LOCAL & GLOBAL RINS WRE LOCKED                  01216000
         HAS TO BE CALLED AFTER FPROCTERM.                              01218000
      ;                                                                 01220000
                                                                        01222000
BEGIN                                                                   01224000
      EQUATE CCX=3;                                                     01226000
      INTEGER DB,CC,RINPTR;                                    <<01602>>01228000
                                                                        01230000
      CC:=CCG;                                                          01232000
      DB:=EXCHANGEDB(RINDST);                                           01234000
      RINPTR := 2;                                             <<01602>>01236000
      WHILE RINPTR < RIN'TOTALNUM DO                           <<01602>>01238000
      BEGIN                                                    <<01602>>01240000
        IF RIN'E'HOLDER = PIN THEN                             <<01602>>01242000
         BEGIN                                                 <<01602>>01244000
          CC := LOGICAL(RIN'E'TYPE) LOR LOGICAL(CC);           <<01602>>01246000
          RUNLOCK(%100000+(RINPTR/RIN'LENGTH));                <<01602>>01248000
        END;                                                   <<01602>>01250000
        RINPTR := RINPTR+RIN'LENGTH;                           <<01602>>01252000
      END;                                                     <<01602>>01254000
      EXCHANGEDB(DB);                                                   01256000
END;  << A B O R T R I N  >>                                            01258000
                                                                        01260000
                                                                        01262000
INTEGER PROCEDURE GETPROCID(Y);                                         01264000
VALUE Y;                                                                01266000
INTEGER Y;                                                              01268000
OPTION PRIVILEGED;                                                      01270000
                                                                        01272000
COMMENT:                                                                01274000
         RETURNS THE PIN OF THE Y TH SON OF THE CALLER, OR              01276000
         0 WHEN Y EXCEEDS THE NUMBER OF SONS THAT THE CALLER HAS;       01278000
                                                                        01280000
BEGIN                                                                   01282000
      DISAPROC;                                                         01284000
      TOS:=A'(A'(CPCB)+5) LAND %377;  <<FIRST SON>>                     01286000
      WHILE (Y:=Y-1) > 0 DO                                    <<01.01>>01288000
         BEGIN                                                          01290000
         TOS := SYS'PCB(TOS*PCBSIZE+6)&LSR(8);                          01292000
         IF = THEN GOTO FIN;        <<Y EXCEEDS THE NUMBER OF SONS>>    01294000
         END;                                                           01296000
FIN:  GETPROCID:=TOS;                                                   01298000
      ENAPROC;                                                          01300000
END;  << G E T P R O C I D  >>                                          01302000
                                                                        01304000
PROCEDURE BURRYPROC(PCBPT);                                             01306000
VALUE PCBPT;                                                            01308000
INTEGER PCBPT;                                                          01310000
OPTION PRIVILEGED,UNCALLABLE;                                           01312000
                                                                        01314000
COMMENT:    DELETES A PROCESS FROM THE SYSTEM.                          01316000
            REMOVES IT FROM SCHEDULING QUEUE                            01318000
            REMOVES IT FROM PROCESS STRUCTURS                           01320000
            ACTIVATES ITS FATHER IF REQUIRED                            01322000
            RETURNS THE STACK AND PCB TO SYSTEM.                        01324000
         ;                                                              01326000
                                                                        01328000
BEGIN                                                                   01330000
      INTEGER  FAPT,V,K;                                                01332000
    EQUATE NOQUEUE=0;                                          <<01549>>01334000
   EQUATE PQPTRWORDNUM=%17;                                    <<01634>>01336000
                                                                        01338000
    DISAPROC;                                                  <<01549>>01340000
    TOS:=%1000D;                                               <<01549>>01342000
    ASSEMBLE(XCHD);                                            <<01549>>01344000
    TOS:=PCBSYSBASEINX+PCBPT;                                  <<01549>>01346000
    TOS:=NOQUEUE;                                              <<01549>>01348000
    TOS:=0;                                                    <<01549>>01350000
    QUEUEPROC(*,*,*);                                          <<01549>>01352000
    ASSEMBLE(XCHD;DDEL);                                       <<01549>>01354000
      <<BREAK PROCESS STRUCTURE>>                                       01356000
      FAPT:=SYS'PCB(PCBPT+5).(0:8)*PCBSIZE;   <<FATHER POINTER>>        01358000
      IF (V:=(SYS'PCB(FAPT+5).(8:8)*PCBSIZE))=PCBPT THEN                01360000
         SYS'PCB(FAPT+5).(8:8):=SYS'PCB(PCBPT+6).(0:8)                  01362000
      ELSE                                                              01364000
         BEGIN                                                          01366000
THERE:   IF (K:=(SYS'PCB(V+6).(0:8)*PCBSIZE))=PCBPT THEN                01368000
         SYS'PCB(V+6).(0:8):=SYS'PCB(PCBPT+6).(0:8) ELSE                01370000
            BEGIN                                                       01372000
            V:=K;                                                       01374000
            GO THERE;                                                   01376000
            END;                                                        01378000
         END;                                                           01380000
      IF LOGICAL(SYS'PCB(PCBPT+PIINFONIMPPINWORDNUM)).FACFLAG  <<01549>>01382000
         THEN  AWAKE( FAPT,2,0);                                        01384000
         << IF UCOP HAS NO SONS, DO NOTHING >>                 <<05.EB>>01386000
      IF  SYS'PCB(SYSPROC(2)+5).(8:8) = 0  THEN                         01388000
         ENAPROC << DO NOTHING >>                              <<05.EB>>01390000
         ELSE  ENAPROC;                                                 01392000
      DISAPROC;                                                <<01549>>01394000
      TOS:=%1000D;                                             <<01549>>01396000
      ASSEMBLE(XCHD);                                          <<01549>>01398000
      TOS:=PCBSYSBASEINX+PCBPT;                                <<01549>>01400000
      ASSEMBLE(ZERO,DZRO);                                     <<01549>>01402000
      TOS.FLUSHLOCFLAG:=1;                                     <<01549>>01404000
      ADJUSTLOCALITY(*,*,*,*);                                 <<01549>>01406000
      ASSEMBLE(XCHD;DDEL);                                     <<01549>>01408000
      ENAPROC;                                                 <<01549>>01410000
      RELDATASEG(SYS'PCB(PCBPT+3).(1:10));<<RELEASE STACK>>             01412000
      SYS'PCB(PCBPT+PQPTRWORDNUM):=-1; <<SIGNAL CHECKALIVE>>   <<01634>>01414000
      RETURNENTRY( PCBB, PCBPT/PCBSIZE );                               01416000
END;  <<BURRYPROC>>                                                     01418000
                                                                        01420000
PROCEDURE KILL(PIN);                                                    01422000
VALUE PIN; INTEGER PIN;                                                 01424000
OPTION PRIVILEGED;                                                      01426000
                                                                        01428000
COMMENT:                                                                01430000
         SET KILL BIT IN PIN PCB AND RUNS BURRYPROC                     01432000
         CONDITION CODE:                                                01434000
               CCE      OK                                              01436000
               CCG      PROCESS ALREADY TERMINATING                     01438000
               CCL      NOT A SON OF CALLER                             01440000
      ;                                                                 01442000
                                                                        01444000
BEGIN                                                                   01446000
      INTEGER K,CC;                                                     01448000
                                                                        01450000
      ERRORON;                                                          01452000
      K:=PIN*PCBSIZE;                                                   01454000
      IF SYS'PCB(K+5)&LSR(8) <> (A'(CPCB)-A'(PCBB))/PCBSIZE             01456000
        OR NOT CHECKALIVE (PIN)                                <<01874>>01458000
        OR NOT ( 1<=PIN<=SYS'PCB(0) )  THEN                    <<01874>>01460000
         BEGIN                                                          01462000
         CC:=CCL;                                                       01464000
         GOTO FIN;                                                      01466000
         END;                                                           01468000
      DISAPROC;                        <<PSEUDO DISABLE>>               01470000
      IF SYS'PCB(K+9)<0 THEN                                            01472000
         BEGIN                         << ALIVE >>                      01474000
         SETCRITICAL;                  <<CRITICAL MODE>>                01476000
         SYS'PCB(X).(0:1):=0;          <<LIVE BIT OFF>>                 01478000
         SET'PSIF(K,%20);              << SOFT KILL >>                  01480000
         ENAPROC;                      <<PSEUDO ENABLE>>                01482000
         ABORTPROCIO(PIN);             <<ABORT IO FOR PROC>>            01484000
         AWAKE(PIN*PCBSIZE,%400,0);    <<ABORT MAIL WAIT>>     <<00141>>01486000
         DISABLE;                      <<INTERRUPTS>>                   01488000
         IF NOT (LOGICAL(SYS'PCB(K+8).(6:1)))                           01490000
         THEN WAIT(%4000,0);           <<MOURNING WAIT>>                01492000
         ENABLE;                                                        01494000
         BURRYPROC(K);                 <<FINISH IT UP>>                 01496000
         RESETCRITICAL(0);                                              01498000
         CC:=CCE;                                                       01500000
         GOTO FIN;                                                      01502000
         END                                                            01504000
      ELSE                                                              01506000
         BEGIN                        <<ALREADY DEAD>>                  01508000
         ENAPROC;                      <<PSEUDO ENABLE>>                01510000
         CC:=CCG;                                                       01512000
FIN:     STATUS.(6:2):=CC;                                              01514000
         ERROREXIT(1,0,0);                                              01516000
         END;                                                           01518000
END;  << K I L L  >>                                                    01520000
                                                                        01522000
PROCEDURE CLEANUPJOB (EXPCODE, DISPOSE);                       <<04799>>01524000
                                                               <<04199>>01526000
VALUE EXPCODE, DISPOSE;                                        <<04799>>01528000
INTEGER EXPCODE, DISPOSE;                                      <<04799>>01530000
   OPTION PRIVILEGED, UNCALLABLE;                                       01532000
                                                                        01534000
COMMENT - CALLED TO TERMINATE A MAIN PROCESS.                  <<05.EB>>01536000
   <COMMAND> INDICATES THE ORIGINATION OF THE CLOSE JOB REQUEST.        01538000
             (Numbers below are decimal numbers.)              <<04199>>01540000
      0 - :DATA COMMAND.                                                01542000
      1 - :HELLO COMMAND,                                               01544000
      2 - :JOB COMMAND,                                                 01546000
      4 - UNSPECIFIED JOBCLOSE.  <QUITJOB> OR OPERATOR,                 01548000
      5 - :BYE COMMAND,                                                 01550000
      6 - :EOJ COMMAND.                                                 01552000
    >=7 - CI-DETECTED ERROR DURING JOB INITIATION,                      01554000
          PASSED THRU EXPCODE PARM OF COMMANDINTERP.           <<05.EB>>01556000
      8 - ACCT/USER EXIST, NO GROUP NAME EXISTS,               <<05.EB>>01558000
      9 - NO ACCT,                                             <<05.EB>>01560000
     10 - ACCT EXISTS, NO USER NAME EXISTS,                    <<05.EB>>01562000
     11 - ACCT/USER EXIST, NO HOME GROUP EXISTS,               <<05.EB>>01564000
     12 TO 16 - LOGON TIMEOUT EXPIRED (=12) PLUS THE RETURN    <<01131>>01566000
                VALUE FROM DIRECLOGON.                         <<01131>>01568000
     40 - $STDIN OPEN FAILURE.   DON'T DO FJCLOSE.             <<03784>>01570000
     41 - $STDLIST OPEN FAILURE. DON'T DO FJCLOSE.             <<03784>>01572000
          Note that if the $STDIN open fails, no attempt is    <<04199>>01574000
          made to open $STDLIST.                               <<04199>>01576000
   FOR :HELLO AND :JOB REQUESTS, IT IS ASSUMED THAT THE COMMAND         01578000
   IMAGE STARTS AT DB+0.                                                01580000
   CALLER MUST INSURE THE FOLLOWING:                                    01582000
      1. ALL SONS OF THIS MAIN PROCESS HAVE BEEN CLEANED UP.            01584000
      2. IF COMMAND, THAT COMMAND IS LEGITIMATE FOR CURRENT JOB MODE.   01586000
   THIS ROUTINE REQUIRES THAT THE PCBX OF THIS MAIN PROCESS IS CORRECT. 01588000
                                                               <<04199>>01590000
   EXPCODE contains COMMAND (close job request) in the low     <<04199>>01592000
   order eight bits and the directory failure level (for       <<04199>>01594000
   DIRECLOGOFF) in the high order eight bits.  Logon failures  <<04199>>01596000
   occur only in INITJSMP--all other paths to this code will   <<04199>>01598000
   have a zero as the directory failure level.                 <<04199>>01600000
                                                               <<04199>>01602000
   INTRINSICS USED:                                                     01604000
      STARTDEVICE                                                       01606000
      RELDATASEG                                                        01608000
      CLEANUPFILES                                                      01610000
      ABORTDSEG                                                         01612000
      DEALLOCATE                                                        01614000
      GETSIR                                                            01616000
      RELSIR                                                            01618000
      EXCHANGEDB                                                        01620000
      ATTIO                                                             01622000
      DATE'LINE                                                         01624000
      DIRECLOGOFF                                                       01626000
      CHRONOS, PROCTIME, DASCII, PRINT, PUTMSG,                         01628000
      XDDSPOOLINFO,SFINDODD,GETJCW,                            <<SP.SZ>>01630000
      AWAKE.                                                            01632000
;                                                              <<05.EB>>01634000
                                                                        01636000
BEGIN                                                                   01638000
<< SYSTEM STUFF >>                                                      01640000
   INTEGER                                                              01642000
            JPNF                 = DB+0;                                01644000
   POINTER                                                              01646000
            JCUTFREE             = DB+0;                                01648000
                                                               <<03784>>01650000
   LOGICAL POINTER LPDT          = 8;                          <<03784>>01652000
   EQUATE LPDTSIZE               = 2;                          <<03784>>01654000
   DEFINE                                                      <<03784>>01656000
      LISTREAL = ( LPDT( OUTDEV*LPDTSIZE ).(0:1) = 0 )#,       <<03784>>01658000
      INREAL   = ( LPDT(  INDEV*LPDTSIZE ).(0:1) = 0 )#;       <<03784>>01660000
                                                               <<03784>>01662000
<< PXGLOB >>                                                            01664000
   INTEGER POINTER   MAXOFTYPE         := 7;                            01666000
   EQUATE   DEVINWD              = 3,                                   01668000
            DEVOUTWD             = 4,                                   01670000
            JMATWD               = 3,                                   01672000
            JPCNTWD              = 4,                                   01674000
            JDTWD                = 5,                                   01676000
            DELETE               = 4,                          <<04799>>01678000
            JITWD                = 6,                                   01680000
            JTYPEWD              = 6;                                   01682000
   DEFINE   JMATFLD              = 0:8 #,                               01684000
            JPCNTFLD             = 0:8 #,                               01686000
            JTYPEFLD             = 2:2 #;                               01688000
   EQUATE JCUTWD = 7;  DEFINE JCUTFLD = 0:8 #;                          01690000
   EQUATE TIMEDOUT = 12;                                       <<01131>>01692000
   EQUATE  STDINFAIL   = 40,                                   <<03784>>01694000
           STDLISTFAIL = 41;                                   <<03784>>01696000
                                                               <<03784>>01698000
DEFINE  COMMAND = EXPCODE.(8:8) #,                             <<04199>>01700000
        DIRFAIL = EXPCODE.(0:8) #;                             <<04199>>01702000
                                                               <<04199>>01704000
<< LOCALS >>                                                            01706000
   POINTER                                                              01708000
            LPXGLOB;                                                    01710000
   INTEGER POINTER                                                      01712000
            PXGLOB = LPXGLOB;                                           01714000
   INTEGER  INDEV,                                                      01716000
            OUTDEV;                                                     01718000
   INTEGER JITASSPTR=DB+5; <<PTR TO USER'S ASSOCIATION CHAI>><<OP.01>>  01720000
   INTEGER DIRLOGOFFLEVEL;                                     <<03784>>01722000
   LOGICAL STDINSPOOLED;                                       <<03784>>01724000
   LOGICAL JLISTCLASS;                                         <<03784>>01726000
   INTEGER                                                     <<0U.EB>>01728000
      LOGOFFMSGNO;                                             <<0U.EB>>01730000
   INTEGER ARRAY JMATARR (0:26);                                        01732000
   INTEGER CMD := 0, DUMMY = CMD;                              <<02.EB>>01734000
   INTEGER RESULT;                                             <<04155>>01736000
   INTEGER JMATX;                                              <<02.EB>>01738000
   INTEGER COMLEN;                                                      01740000
   BYTE ARRAY                                                           01742000
            COMARR (*)           = DB+0;                                01744000
   DOUBLE                                                               01746000
      CPUTIME := 0D,    CONNECTTIME := 0D;                              01748000
   INTEGER ARRAY JITACCTING1 (@) = DB+3;                                01750000
   DOUBLE ARRAY JITACCTING (@) = DB+3;                                  01752000
   LOGICAL DATE;  DOUBLE TIME;                                          01754000
                                                               <<05.EB>>01756000
   BYTE ARRAY DATEBUFF(0:27);                                  <<05.EB>>01758000
   BYTE ARRAY LOGONID(0:34);                                   <<04155>>01760000
   INTEGER  C2 = DATE,  C1 = TIME,  C0 = C1+1;                          01762000
   DEFINE                                                               01764000
      YEAR2 = C2.(0:7) #,  YEAR1 = JMATARR(19).(0:7) #,                 01766000
      DAY2  = C2.(7:9) #,  DAY1  = JMATARR(19).(7:9) #,                 01768000
      HOUR2 = C1.(0:8) #,  HOUR1 = JMATARR(20).(0:8) #,                 01770000
      MIN2  = C1.(8:8) #,  MIN1  = JMATARR(20).(8:8) #,                 01772000
      SEC2  = C0.(0:8) #,  SEC1  = JMATARR(21).(0:8) #;                 01774000
   INTEGER MAXPRI, CREATES;                                             01776000
   DOUBLE DVALUE;                                              <<SP.SZ>>01778000
   POINTER XDDEP;                                              <<SP.SZ>>01780000
   LOGICAL ABORTFLAG;                                          <<SP.SZ>>01782000
   INTEGER DFID;                                               <<SP.SZ>>01784000
      BYTE ARRAY BDFID(*) = DFID;                              <<01549>>01786000
   INTEGER ODDEP=XDDEP;                                        <<SP.SZ>>01788000
   INTEGER DEV;                                                <<04800>>01790000
   INTEGER ASSOCIATE;   <<HEAD OF USER'S ASSOCIATION CHAIN>>   <<00552>>01792000
                                                                        01794000
<< PROCEDURE BODY >>                                                    01796000
   PUSH (DL);                                                           01798000
   @PXGLOB := TOS -PS0(-1).(4:12);                                      01800000
   IF COMMAND = 4 THEN                                         <<01131>>01802000
     COMMAND := 4 + PXGLOB(JTYPEWD).(JTYPEFLD)                 <<01131>>01804000
   ELSE IF TIMEDOUT<=COMMAND AND COMMAND<STDINFAIL THEN        <<03784>>01806000
     COMMAND := COMMAND - 5;                                   <<01131>>01808000
   ABORTFLAG := IF COMMAND = 4 OR COMMAND >= 7                 <<SP.SZ>>01810000
                OR GETJCW.(0:1) = 1 <<JOB ABORTED>>            <<SP.SZ>>01812000
      THEN TRUE ELSE FALSE;                                    <<SP.SZ>>01814000
   << GET JMAT ENTRY AND CHANGE JOB STATE TO "TERMINATING" >>           01816000
      TOS := GETSIR (JMATSIR);                                          01818000
      PUSH (DL);                                                        01820000
      TOS := -TOS +@JMATARR;                                            01822000
      TOS := PXGLOB(JMATWD).(JMATFLD);                                  01824000
      EXCHANGEDB (JMATDST);                                             01826000
      TOS := TOS * JMATSIZE;                                            01828000
      JMATX := S0;                                             <<02.EB>>01830000
      PS0.(0:6) := 3;    <<INDICATE TERMINATING>>                       01832000
      INDEV := PS0(18).(0:8);                                  <<03784>>01834000
      OUTDEV := PS0(18).(8:8);                                 <<03784>>01836000
      JLISTCLASS := PS0.(11:1);                                <<03784>>01838000
      STDINSPOOLED := PS0(24).(0:1);                           <<03784>>01840000
      DEV := PS0(25).(0:8);                                    <<04800>>01842000
      TOS := JMATSIZE;                                                  01844000
      ASSEMBLE (MVBL);                                                  01846000
      TOS := JMATSIR;                                                   01848000
      ASSEMBLE (XCH);                                                   01850000
      RELSIR (*, *);                                                    01852000
      EXCHANGEDB (0);                                                   01854000
   IF COMMAND < 7 THEN                                                  01856000
      BEGIN                                                             01858000
         << FLUSH USER DEFINED COMMAND DST >>                  <<11.EB>>01860000
      IF UDCDSTNO <> 0 THEN RELDATASEG(UDCDSTNO);              <<11.EB>>01862000
      CLEANUPFILES;                                                     01864000
      PUSH (DL); <<NEED TO RECALCULATE PXGLOB LOCATION>>       <<RV.PV>>01866000
      @PXGLOB := TOS - PS0 (-1).(4:12);                        <<RV.PV>>01868000
      CLEANUPVOLUMES;  <<DISMOUNT ANY PRIVATE VOLUMES IN USE>> <<RH.PV>>01870000
      ABORTDSEG (TRUE);                                                 01872000
   << JDT NOW CONTAINS ONLY :FILE ENTRIES.   CAN BE THROWN AWAY >>      01874000
   << MERGE MAIN PROCESS ACCT'G INFO INTO JIT >>                        01876000
   << PRINT ACCT'G INFO:  JIT, JCUT, JMAT >>                            01878000
      EXCHANGEDB (PXGLOB(JITWD).(6:10));                                01880000
      CREATES := JITACCTING1 (1);                                       01882000
      TOS := JITACCTING(1);                                             01884000
      MAXPRI := JITACCTING1 (4);                                        01886000
      ASSOCIATE:=JITASSPTR;   <<GET USER'S ASSOC. CHAIN HEAD>> <<00552>>01888000
      EXCHANGEDB (0);                                                   01890000
      WHILE ASSOCIATE<>0 DO ASSOCIATE:=DELASS(ASSOCIATE,       <<00552>>01892000
                            PXGLOB(JITWD).(6:10));             <<00552>>01894000
      TOS := TOS +999D;                                                 01896000
      IF OVERFLOW THEN                                                  01898000
OVFL:    TOS := 2147483D                                                01900000
      ELSE                                                              01902000
         BEGIN                                                          01904000
                                                               <<05.EB>>01906000
         TOS := 1000D;                                         <<05.EB>>01908000
         ASSEMBLE(DDIV; DDEL);                                 <<05.EB>>01910000
         END;                                                           01912000
      CPUTIME := TOS;                                                   01914000
      DATE := CALENDAR;                                                 01916000
      TIME := CLOCK;                                                    01918000
      IF YEAR2 < YEAR1 THEN YEAR2 := YEAR2 +100;                        01920000
      << MINUTES BETWEEN 2 TIME STAMPS =                                01922000
         (M2-M1) + 60*                                                  01924000
            ((H2-H1) + 24*                                              01926000
               ((D2-D1) + ((Y2-1)/4*4-Y1+4)/4  + 365*                   01928000
                  (Y2-Y1)  )  )                                         01930000
         + (S2<S1)                                                      01932000
         IMPLEMENTED AS:    >>                                          01934000
      TOS := ((YEAR2 -1) &ASR(2) &ASL(2) -YEAR1 +4) &ASR(2);            01936000
      TOS := 45;    ASSEMBLE (MPYL);                                    01938000
      TOS := YEAR2 -YEAR1;                                              01940000
      TOS := 16425;    ASSEMBLE (MPYL, DADD);                           01942000
      TOS := TOS &DASL(5);                                              01944000
      TOS := (DAY2 -DAY1) *24 +(HOUR2 -HOUR1);                          01946000
      TOS := 60;    ASSEMBLE (MPYL, DADD);                              01948000
      TOS := TOS +DOUBLE (MIN2 -MIN1);                                  01950000
      IF SEC2 > SEC1 THEN TOS := TOS +1D;                               01952000
      IF PXGLOB(JTYPEWD).(JTYPEFLD) = 1 THEN                            01954000
         BEGIN                                                          01956000
         CONNECTTIME := DS1;                                            01958000
         LOGOFFMSGNO := SESSLOGOFF; << SESSION >>              <<05.EB>>01960000
         END                                                   <<0U.EB>>01962000
         ELSE LOGOFFMSGNO := JOBLOGOFF; << JOB >>              <<05.EB>>01964000
      IF COMMAND < 7 THEN <<LOGGED ON, SO PRINT LOGOFF>>       <<05.EB>>01966000
         BEGIN                                                 <<05.EB>>01968000
         FMTDATE(DATE,TIME,DATEBUFF);                          <<05.EB>>01970000
         DATEBUFF(27):=0;                                      <<02336>>01972000
         GENMSG(SYSET,LOGOFFMSGNO,%22000,@CPUTIME,@DS1,        <<05.EB>>01974000
            @DATEBUFF);                                        <<05.EB>>01976000
        GENMSG(SYSET,CONSLOGOFF,%10000,DEV,,,,,0);  <<CONSOLE>><<04800>>01978000
         END;                                                  <<05.EB>>01980000
      IF LOGLOGOFF THEN LOG3(MAXPRI,CREATES,CPUTIME,DS1,3);    <<05.EB>>01982000
      END;                                                     <<02.EB>>01984000
<< Level of the directory failures (if any) is passed to >>    <<04199>>01986000
<< TERMINATE through the EXPCODE's top eight bits.       >>    <<04199>>01988000
   DIRLOGOFFLEVEL := DIRFAIL;                                  <<04199>>01990000
   RESULT := DIRECLOGOFF(DIRLOGOFFLEVEL,JMATARR,               <<04155>>01992000
             CONNECTTIME,CPUTIME,DUMMY,DUMMY,DUMMY);           <<04155>>01994000
             << ***** ACCOUNT UPDATED ********  >>             <<04155>>01996000
   IF RESULT.(11:1) = 1 OR RESULT.(10:1) = 1 THEN              <<04155>>01998000
       BEGIN                                                   <<04155>>02000000
       FORMUSERID(LOGONID);  << USERID FOR GENMSG >>           <<04155>>02002000
       GENMSG(SYSET,NEGCONTIME,0,@LOGONID,,,,,0);              <<04155>>02004000
       END;                                                    <<04155>>02006000
   IF RESULT.(9:1)=1 OR RESULT.(8:1) = 1 THEN                  <<04155>>02008000
       BEGIN                                                   <<04155>>02010000
       FORMUSERID(LOGONID); << USERID FOR GENMSG >>            <<04155>>02012000
       GENMSG(SYSET,NEGCPUTIME,0,@LOGONID,,,,,0);              <<04155>>02014000
       END;                                                    <<04155>>02016000
   IF JMATARR(24).(3:2) <> 0 THEN << SPECIAL LOGON >>          <<02.EB>>02018000
      IF NOT CILOGTABLE(2,JMATX,CMD,CMD) THEN SUDDENDEATH      <<02.EB>>02020000
         (509); <<RELEASE LOGON INFO SET BY UCOP>>             <<02.EB>>02022000
<< CLOSE JIN AND JLIST FILES >>                                         02024000
   IF ABORTFLAG THEN                                           <<SP.SZ>>02026000
      BEGIN                                                    <<SP.SZ>>02028000
      FFILEINFO(2,38,BDFID);   << get O# for JLIST >>          <<01549>>02030000
      IF = AND SFINDODD( DFID, ODDEP )                         <<03784>>02032000
         THEN XDDSPOOLINFO(DVALUE,%10001,XDDEP); <<SET ABORT>> <<SP.SZ>>02034000
                                          << FLAG   IN ODD  >> <<SP.SZ>>02036000
      END;                                                     <<SP.SZ>>02038000
                                                               <<04799>>02040000
<<   CHECK IF FILE IS TO BE CLOSED WITH THE DELETE OPTION >>   <<04799>>02042000
                                                               <<04799>>02044000
   IF COMMAND < STDINFAIL   THEN                               <<04799>>02046000
            FJCLOSE( 2, DISPOSE, 0);                           <<04799>>02048000
                                                               <<04799>>02050000
   IF COMMAND <> STDINFAIL   THEN FJCLOSE( 1, 0, 0 );          <<03784>>02052000
                                                               <<03784>>02054000
<< UCOP allocates the $STDIN and $STDLIST devices for a    >>  <<04199>>02056000
<< job/session.  Even so, the FJOPEN of the $STDfiles in   >>  <<04199>>02058000
<< INITJSMP may fail (e.g. no DSTs available).  In this    >>  <<04199>>02060000
<< case, it becomes necessary to deallocate these devices. >>  <<04199>>02062000
<< Deallocation of real devices is straightforward.        >>  <<04199>>02064000
<< Deallocation of virtual devices (when $STDIN and/or     >>  <<04199>>02066000
<< $STDLIST is spooled) is more tricky:  if FJOPEN fails   >>  <<04199>>02068000
<< on the virtual $STDIN device, the failure will trigger  >>  <<04199>>02070000
<< the necessary deallocations--this is because the $STDIN >>  <<04199>>02072000
<< FJOPEN becomes an FOPEN of an old spoolfile; if the     >>  <<04199>>02074000
<< FJOPEN on the virtual $STDLIST device fails, however,   >>  <<04199>>02076000
<< none of the allocated resources are released--this is   >>  <<04199>>02078000
<< because the FJOPEN becomes an FOPEN of a new spoolfile, >>  <<04199>>02080000
<< and FOPEN, in this case, thinks there were no allocated >>  <<04199>>02082000
<< resources to release.  Deallocation must happen here.   >>  <<04199>>02084000
<< Also, if $STDLIST fails, we assume that $STDIN didn't   >>  <<04199>>02086000
<< fail; so in this case the FJCLOSE above takes care of   >>  <<04199>>02088000
<< deallocating resources.                                 >>  <<04199>>02090000
<<    In summary:  we always need to deallocate $STDLIST   >>  <<04199>>02092000
<< if either of the $STDfile FJOPENs failed.  We only need >>  <<04199>>02094000
<< to deallocate $STDIN if and only if both the $STDIN     >>  <<04199>>02096000
<< FJOPEN failed and $STDIN was on a real device.          >>  <<04199>>02098000
<<                                                         >>  <<04199>>02100000
<< DEALLOCATE high order bits meanings:                    >>  <<04199>>02102000
<<     (2:1) -- STDfile failure.  STDLIST (new spoolfile)  >>  <<04199>>02104000
<<              has entry allocated but no disc space      >>  <<04199>>02106000
<<              allocated.  Deallocate normally but do not >>  <<04199>>02108000
<<              deallocate disc space.                     >>  <<04199>>02110000
<<     (6:1) -- Wait bit.                                  >>  <<04199>>02112000
<<     (7:1) -- Primed bit.  Do not make open spoolfile    >>  <<04199>>02114000
<<              READY; delete it from the system.          >>  <<04199>>02116000
                                                               <<04199>>02118000
   IF COMMAND >= STDINFAIL THEN                                <<04199>>02120000
   BEGIN                                                       <<04199>>02122000
      DEALLOCATE( OUTDEV + %21400 );                           <<04199>>02124000
      IF (COMMAND = STDINFAIL) AND INREAL                      <<04199>>02126000
         THEN DEALLOCATE( INDEV + %1400 );                     <<04199>>02128000
   END;                                                        <<04199>>02130000
                                                               <<04199>>02134000
                                                                        02136000
   <<RELEASE REMAINING RESOURCES>>                                      02138000
   RELDATASEG (PXGLOB (JDTWD).(6:10));    <<RELEASE JDT>>               02140000
   RELDATASEG (PXGLOB (JITWD).(6:10));    <<RELEASE JIT>>               02142000
   @MAXOFTYPE := @MAXOFTYPE                                             02144000
                 +(PXGLOB (JTYPEWD).(JTYPEFLD) &ASL(1));                02146000
   TOS := PXGLOB (JMATWD).(JMATFLD);                                    02148000
   TOS := PXGLOB (JPCNTWD).(JPCNTFLD);                                  02150000
   TOS := PXGLOB (JCUTWD).(JCUTFLD) *JCUTSIZE;                          02152000
   IF <> THEN                                                           02154000
      BEGIN    <<RELEASE JCUT ENTRY>>                                   02156000
      EXCHANGEDB (JCUTDST);                                             02158000
      XREG := GETSIR (JCUTSIR);                                         02160000
      PS0 := @JCUTFREE;                                                 02162000
      @JCUTFREE := @PS0;                                                02164000
      RELSIR (JCUTSIR, XREG);                                           02166000
      END;                                                              02168000
   DEL;                                                                 02170000
   XREG := GETSIR (JPCNTSIR);                                           02172000
   EXCHANGEDB (JPCNTDST);                                               02174000
   JPNF := JPNF+1;               <<RELEASE JPCNT>>                      02176000
   BPS0 := %376;                                                        02178000
   RELSIR (JPCNTSIR, XREG);                                             02180000
   ASSEMBLE (DEL);                                                      02182000
   XREG := GETSIR (JMATSIR);                                            02184000
   EXCHANGEDB (JMATDST);                                                02186000
   TOS := TOS * JMATSIZE;                                               02188000
   DEALLOCENTRY(*);                                                     02190000
   MAXOFTYPE := MAXOFTYPE -1;                                           02192000
   RELSIR (JMATSIR, XREG);                                              02194000
                                                                        02196000
   << RETURN TO FINISH TERMINATE >>                                     02198000
   END    <<CLEANUPJOB>>;                                               02200000
 PROCEDURE SETPXFIXBIT(FLAG);                                  <<01837>>02202000
 VALUE FLAG;                                                   <<01837>>02204000
 LOGICAL FLAG;                                                 <<01837>>02206000
 OPTION PRIVILEGED,UNCALLABLE;                                 <<01837>>02208000
 BEGIN                                                         <<01837>>02210000
                                                               <<01837>>02212000
<< THIS PROCEDURE SET OR RESET(ACCORDING TO THE LOGICAL >>     <<01837>>02214000
<< VALUE OF FLAG) BIT 2 OF PXFIXED(%26).  THIS IS DONE  >>     <<01837>>02216000
<< BEFORE THE USER WAS GRANTED THE USE OF THE SYSTEM    >>     <<01837>>02218000
<< CLOCK.  THIS BIT WILL BE CHECK BY GIVECLOCK.         >>     <<01837>>02220000
                                                               <<01837>>02222000
    ARRAY QVAR(*) = Q+0;                                       <<01837>>02224000
                                                               <<01837>>02226000
    PUSH(Q,DL);                                                <<01837>>02228000
    ASMB(XCH; SUB);               << Q - DL >>                 <<01837>>02230000
    X := S0 - 2;                                               <<01837>>02232000
    TOS := QVAR(X);               << FIND PXFIXED AREA >>      <<01837>>02234000
    ASMB(SUB);                                                 <<01837>>02236000
    X := TOS + %26;             << PXFIXED(%26) >>             <<01837>>02238000
    STATUS.(6:2) := CCE;                                       <<01837>>02240000
    IF FLAG THEN QVAR(X):=QVAR(X) LOR %20000 ELSE              <<01837>>02242000
    BEGIN                                  << CLEAR BIT >>     <<01837>>02244000
       TOS := QVAR(X);                                         <<01837>>02246000
       ASMB(TRBC 2);                         << RESET BIT >>   <<01837>>02248000
       IF  =  THEN  STATUS.(6:2) := CCL      << BIT WAS SET>>  <<01837>>02250000
              ELSE  QVAR(X) := TOS;                            <<01837>>02252000
    END;                                                       <<01837>>02254000
 END;                                                          <<01837>>02256000
 PROCEDURE GIVECLOCK(PLABEL);                                  <<01837>>02258000
 VALUE PLABEL;                                                 <<01837>>02260000
 INTEGER PLABEL;                                               <<01837>>02262000
 OPTION PRIVILEGED,UNCALLABLE;                                 <<01837>>02264000
 BEGIN                                                         <<01837>>02266000
                                                               <<01837>>02268000
<< THIS PROCEDURE RETURNS THE CLOCK TO THE SYSTEM SO >>        <<01837>>02270000
<< SOMEONE ELSE MIGHT BE USE IT.  0 OF INPUT PLABEL  >>        <<01837>>02272000
<< INDICATES THAT THE USER DOES NOT WANT TO RELEASE  >>        <<01837>>02274000
<< THE CLOCK YET, BUT MAY WANT TO CHANGE THE INTERRUPT >>      <<01837>>02276000
<< RATE LATER ON.                                    >>        <<01837>>02278000
                                                               <<01837>>02280000
    INTEGER  I, CSTN, XDSN, INDX, PINX;                        <<01837>>02282000
    POINTER P;                                                 <<01837>>02284000
                                                               <<01837>>02286000
    PUSH(DL);   << MAKE SURE THIS GUY HAS THE CLOCK >>         <<01837>>02288000
    @P := TOS;                                                 <<01837>>02290000
    @P := @P - INTEGER(P(-2)) + %26;                           <<01837>>02292000
    IF  NOT P.(2:1)  THEN  RETURN;  << NOT OWNER OF CLOCK >>   <<01837>>02294000
    IF  PLABEL = 0  THEN                                       <<01837>>02296000
    BEGIN                                                      <<01837>>02298000
       DLABEL := DLABEL.(1:15);                                <<01837>>02300000
       DELAY(200D);                                            <<01837>>02302000
       RETURN;                                                 <<01837>>02304000
    END;                                                       <<01837>>02306000
    TRAPSOFF;                                                  <<01837>>02308000
    STATUS.(6:2) := CCG;                                       <<01837>>02310000
    CSTN := PLABEL.(8:8);                                      <<01837>>02312000
    IF =  THEN  RETURN;            << INVALID PLABEL >>        <<01837>>02314000
    INDX := DLABEL.(8:8);                                      <<01837>>02316000
    IF  =  THEN  RETURN;                                       <<01837>>02318000
    DLABEL := DLABEL.(1:15);                                   <<01837>>02320000
    DELAY(200D);                                               <<01837>>02322000
    STATUS.(6:2) := CCE;                                       <<01837>>02324000
    IF CSTN > %300  THEN  RETURNENTRY(1,INDX);                 <<01837>>02326000
    PINX := ABS(4) - ABS(3);                                   <<01837>>02328000
    UNFREEZE(CSTN,0,PINX);                                     <<01837>>02330000
    IF <>  THEN  STATUS.(6:2) := CCL;                          <<01837>>02332000
    UNLOCKSEG(CSTN,0,PINX);                                    <<01837>>02334000
    IF <>  THEN  STATUS.(6:2) := CCL;                          <<01837>>02336000
    XDSN := XDS1INDEX;                                         <<01837>>02338000
    IF >  THEN                                                 <<01837>>02340000
    BEGIN                                                      <<01837>>02342000
       XDS1INDEX := 0;                                         <<01837>>02344000
       UNFREEZE(XDSN,1,0);                                     <<01837>>02346000
       IF <>  THEN  STATUS.(6:2) := CCL;                       <<01837>>02348000
       UNLOCKSEG(XDSN,1,0);                                    <<01837>>02350000
       IF <>  THEN  STATUS.(6:2) := CCL;                       <<01837>>02352000
    END;                                                       <<01837>>02354000
    XDSN := XDS2INDEX;                                         <<01837>>02356000
    IF >  THEN                                                 <<01837>>02358000
    BEGIN                                                      <<01837>>02360000
       XDS2INDEX := 0;                                         <<01837>>02362000
       UNFREEZE(XDSN,1,0);                                     <<01837>>02364000
       IF <>  THEN  STATUS.(6:2) := CCL;                       <<01837>>02366000
       UNLOCKSEG(XDSN,1,0);                                    <<01837>>02368000
       IF <>  THEN  STATUS.(6:2) := CCL;                       <<01837>>02370000
    END;                                                       <<01837>>02372000
    DLABEL := 0;                                               <<01837>>02374000
    SETPXFIXBIT(FALSE);                                        <<01837>>02376000
 END;                                                          <<01837>>02378000
PROCEDURE RELCLOCK;                                            <<01837>>02380000
OPTION PRIVILEGED,UNCALLABLE;                                  <<01837>>02382000
                                                               <<01837>>02384000
COMMENT:  THIS PROCEDURE IS USED FOR SYSTEM CLOCK INTERFACE.   <<01837>>02386000
          WHEN THE SYSTEM CLOCK IS "SHARED" BY A USER, HIS     <<01837>>02388000
          PXFIXED(%26).(2:1) WILL BE SET.  AT TERMINATION,     <<01837>>02390000
          WE CHECK THAT BIT HAS BEEN RESET TO INDICATE THAT    <<01837>>02392000
          HE HAS RELEASE THE CLOCK.  OTHERWISE, THE PROCEDURE  <<01837>>02394000
          GIVECLOCK IN MEASIO WILL BE CALLED TO RELEASE IT     <<01837>>02396000
          FOR THE USER.                                        <<01837>>02398000
          ;                                                    <<01837>>02400000
                                                               <<01837>>02402000
BEGIN                                                          <<01837>>02404000
      INTEGER INDX, CSTN;                                      <<01837>>02406000
      LOGICAL LS0 = S-0;                                       <<01837>>02408000
      DEFINE  CSTXE = (8:8)#;                                  <<01837>>02410000
      INTEGER POINTER  CSTI = 1;                               <<01837>>02412000
                                                               <<01837>>02414000
      TOS := DLABEL.(8:8);                                     <<01837>>02416000
      IF  >  THEN  << THIS GUY STILL HAS CLOCK >>              <<01837>>02418000
      BEGIN                                                    <<01837>>02420000
         INDX := TOS&LSL(2) + 2;  << GET INDEX TO CST >>       <<01837>>02422000
         TOS := CSTI(INDX);  << CSTX BANK >>                   <<01837>>02424000
         TOS := CSTI(INDX+1) - 19; << ADDRESS OF MEMORY LINK >><<01837>>02426000
         ASSEMBLE(LSEA; DEL);                                  <<01837>>02428000
         IF  >=  THEN  GOTO  EXIT;  << NOT ASSIGNED REGION >>  <<01837>>02430000
         TOS := TOS + 12;  << GET SEG IDENTIFIER >>            <<01837>>02432000
         ASSEMBLE(LSEA);                                       <<01837>>02434000
         IF  >=  THEN  GOTO  EXIT;  << NOT PROGRAM SEG >>      <<01837>>02436000
         CSTN := TOS.CSTXE + %300;  << GET CSTX # >>           <<01837>>02438000
         GIVECLOCK(CSTN);  << RELEASE ALL >>                   <<01837>>02440000
      END;                                                     <<01837>>02442000
 EXIT:                                                         <<01837>>02444000
      DLABEL := 0;                                             <<01837>>02446000
   END;                                                        <<01837>>02448000
PROCEDURE EXPIRE;                                                       02450000
OPTION PRIVILEGED,UNCALLABLE;                                           02452000
                                                                        02454000
COMMENT: CALLED FROM TERMINATE.                                         02456000
RELEASES THE RESOURCES OF THE CALLER AND PROVOKES ITS COMPLETE          02458000
         DELETION FROM THE SYSTEM.                                      02460000
            STOPS DESCENDANTS,                                          02462000
            UNLOADS PROGRAM,                                            02464000
            CLOSE LOCAL FILES,                                          02466000
            CLOSES LOCAL XTRA DATA SEGMENTS                             02468000
            DELETES DSECENDANTS,                                        02470000
            ETC......                                                   02472000
         IF MAIN PROCESS THEN CALLS CLEANUPJOB.                         02474000
         GETS BURRIED EITHER BY UCOP(IF MAIN OR NOT KILLED) OR BY FATHER02476000
         ;                                                              02478000
                                                                        02480000
BEGIN                                                                   02482000
      EQUATE JITX=6,CPUTX=24;                                           02484000
      EQUATE TERM = 16;                                                 02486000
      EQUATE MILLE=1000;                                                02488000
      EQUATE PXIMAGE = 34;  <<IMAGE PCBX CELL>>                         02490000
      EQUATE PXSTATS = %100;   <<STATISTICS PCBX CELL>>        <<01549>>02492000
      EQUATE TIMEDOUT = 12;                                    <<01131>>02494000
      EQUATE STDINFAIL = 40;                                   <<04199>>02496000
      LOGICAL TLF:=FALSE, DESF;                                         02498000
      INTEGER JIT,JOBTYPE,PROCTYPE,LDEV;                                02500000
      INTEGER DEVTYPE, CX,PIN, JCUTX, EFROLS;                           02502000
      INTEGER PINNUM;                                          <<WH.21>>02504000
      INTEGER SIRCOND;            << RETURNED FROM GETSIR >>   <<01739>>02506000
      INTEGER POINTER P;                                                02508000
      DOUBLE TIME;                                                      02510000
      DOUBLE POINTER JACCT=DB+3;                                        02512000
      INTEGER ARRAY LDTABLE(*)=DB+0;                                    02514000
      INTEGER ARRAY JCUT(*)=DB+0;                                       02516000
      BYTE ARRAY BUFF(0:7)=Q;                                  <<00202>>02518000
      INTEGER PARAM = Q - 4;                                            02520000
      INTEGER ARRAY PCBX(*)=Q+0;                                        02522000
      INTEGER JMATIND;                                         <<04799>>02524000
      INTEGER DISPOSE;                                         <<04799>>02526000
      LOGICAL JMATDATA;                                        <<04799>>02528000
      INTEGER ARRAY ARRDB3(*)=DB+3;                            <<04799>>02530000
      EQUATE DELETE = 1;                                       <<04799>>02532000
      DEFINE DELETE'FLAG = JMATDATA.(9:1)#;                    <<04799>>02534000
                                                               <<04799>>02536000
      DEFINE STUN'BIT = (8:1)#;   <<STUN simulation flag>>     <<01766>>02538000
                                                                        02540000
DEFINE                                                         <<04199>>02542000
   FAILPARM = PARAM.(8:8) #,  << EXPCODE failure number >>     <<04199>>02544000
   DIRFPARM = PARAM.(0:8) #;  << EXPCODE directory fail >>     <<04199>>02546000
      SUBROUTINE DEF'MOVEFROMDSEG;                             <<04799>>02548000
                                                               <<04199>>02550000
      RESETDB(-1);                     <<RESET DB TO LOGICAL D SEG>>    02552000
      EXCHANGEDB(0);                   <<RESET DB TO STACK>>            02554000
      DISAPROC;                                                         02556000
      DESF:=FALSE;                                                      02558000
      CX:=1;                                                            02560000
E1:   TOS:=GETPROCID(CX);              <<GETS PIN OF SONS>>             02562000
      ASSEMBLE(TEST);                                                   02564000
      IF <> THEN                       <<EXISTING SON>>                 02566000
         BEGIN                                                          02568000
         TOS := TOS*PCBSIZE;                                            02570000
         SET'PSIF( *,%10 );            << STOP PROCESS >>               02572000
         DESF:=TRUE;                   <<DESCENDANCE FLAG>>             02574000
         CX:=CX+1;                                                      02576000
         GOTO E1;                                                       02578000
         END;                                                           02580000
      DEL;                                                              02582000
      ENAPROC;                                                          02584000
                                                                        02586000
      PIN:=(A'(CPCB)-A'(PCBB))/PCBSIZE;                                 02588000
      PUSH(Q,DL);    <<check STUN'SIM flag>>                   <<01766>>02590000
      ASSEMBLE(XCH,SUB);                                       <<01766>>02592000
      X:=S0-1;                                                 <<01766>>02594000
      X:=S0-PCBX(X);                                           <<01766>>02596000
      IF PCBX(X:=X+7).STUN'BIT=1                               <<01766>>02598000
       THEN                                                    <<01766>>02600000
        BEGIN    <<log the STUN simulation>>                   <<01766>>02602000
        PCBX(X).STUN'BIT:=0;                                   <<01766>>02604000
        LOG'STUN'SIMULATION(PIN);                              <<01766>>02606000
        END;     <<log the STUN simulation>>                   <<01766>>02608000
      REMOVESTOP(-1,0,-1);                                              02610000
                                                                        02612000
      LOOSESOFTINTERRUPTS;                                     <<03047>>02614000
                                                               <<03047>>02616000
      LOOSETRLX;                                               <<03047>>02618000
                                                               <<03047>>02620000
      PUSH(DL);  <<IMAGE SPECIAL CLEANUP>>                              02622000
      @P := TOS;                                                        02624000
      @P := @P - P(-2) + PXIMAGE;                                       02626000
      IF P <> 0 THEN                                                    02628000
         BEGIN                                                          02630000
         TOS := P;                                                      02632000
         ASSEMBLE (PCAL 0);                                             02634000
         END;                                                           02636000
                                                                        02638000
      PUSH(DL);  <<STATISTICS GATHERING CLEENUP>>              <<01549>>02640000
      @P := TOS;                                               <<01549>>02642000
      @P := @P - P(-2) + PXSTATS;                              <<01549>>02644000
      IF P <> 0 THEN                                           <<01614>>02646000
         STOPSTATISTICS(P);                                    <<01549>>02648000
                                                               <<01549>>02650000
      SIRCOND := GETSIR (MEASSIR);                             <<01739>>02652000
      IF GCLASSENABLEDMASK.CLASS15 THEN                        <<01739>>02654000
        BEGIN  << PROCESS INSTRUMENTATION ENABLED >>           <<01739>>02656000
          TOS := MEASPROCXDSBANK;                              <<01739>>02658000
          TOS := MEASPROCXDSBASE;                              <<01739>>02660000
          ASSEMBLE (LSEA);          << GET ENTRY SIZE >>       <<01739>>02662000
          TOS := TOS * PIN;         << OFFSET TO ENTRY >>      <<01739>>02664000
          ASSEMBLE (LADD);          << ABSOLUTE PTR TO ENTRY >><<01739>>02666000
          TOS := TOS + LOGICAL(CP'TERMINATETIME);              <<01739>>02668000
          TOS := TIMER;       << DOUBLE WORD TIME STAMP >>     <<01739>>02670000
          ASSEMBLE (SDEA);    << PUT TERMINATE TIME IN ENTRY >><<01739>>02672000
          DDEL;               << XDS BANK & ADDRESS >>         <<01739>>02674000
        END << PROCESS INSTRUMENTATION >>;                     <<01739>>02676000
      RELSIR (MEASSIR, SIRCOND);                               <<01739>>02678000
                                                               <<01739>>02680000
      PUSH(DL);  << SHARED CLOCK INTERFACE CLEANUP >>          <<01549>>02682000
      @P := TOS;                                               <<01549>>02684000
      @P := @P - P(-2) + %26;    << PXFIXED WORD %26 >>        <<01549>>02686000
      IF  LOGICAL(P.(2:1))  THEN  RELCLOCK;                    <<01549>>02688000
          << RELEASE RESOURSES FOR CLOCK INTERFACE >>          <<01549>>02690000
                                                               <<01149>>02692000
      PROCTYPE := ABSOLUTE(ABSOLUTE(CPCB)+9).(6:3);                     02694000
      IF PROCTYPE = 2  AND  FAILPARM < STDINFAIL               <<04199>>02696000
         THEN  FUNBREAK(TRUE);                                 <<04199>>02698000
                                                                        02700000
      IF A'(A'(CPCB) +9).(6:3) <> 2 THEN                       <<05.EB>>02702000
      BEGIN << NOT MAIN >>                                     <<05.EB>>02704000
      DISAPROC;                                                         02706000
      TOS:=%1000D;                                             <<01549>>02708000
      ASSEMBLE(XCHD);                                          <<01549>>02710000
      TOS:=ABSOLUTE(CPCB)-%1000;                               <<01549>>02712000
      ASSEMBLE(DZRO,ZERO);                                     <<01549>>02714000
      TOS.INITLOCFLAG:=1;                                      <<01549>>02716000
      ADJUSTLOCALITY(*,*,*,*);                                 <<01549>>02718000
      ASSEMBLE(XCHD;DDEL);                                     <<01549>>02720000
      ENAPROC;                                                 <<01549>>02722000
      END; << OF NOT MAIN >>                                   <<05.EB>>02724000
      UNLOAD(PIN);                    <<UNLOADS THE PROGRAM>>           02726000
                                                               <<04799>>02728000
<<    CHECK IF PROCESS IS A JOB OR A SESSION     >>            <<04799>>02730000
                                                               <<04799>>02732000
      DISPOSE := 0;                                            <<04799>>02734000
      IF ABSOLUTE (ABSOLUTE (CPCB) + 9).(6:3) = 2 THEN         <<04799>>02736000
                                                               <<04799>>02738000
<<   PROCESS IS JOB/SESSION--NOW CHECK DELETE FLAG >>          <<04799>>02740000
                                                               <<04799>>02742000
        BEGIN                                                  <<04799>>02744000
          SETXPXGLOB;                                          <<04799>>02746000
          JMATIND := ARRDB3(X).(0:8);                          <<04799>>02748000
          MOVEFROMDSEG(@JMATDATA,JMATDST,JMATIND*JMATSIZE,1);  <<04799>>02750000
          IF DELETE'FLAG = DELETE THEN                         <<04799>>02752000
             DISPOSE := 4;                                     <<04799>>02754000
          FPROCTERMJOB;                                        <<04809>>02756000
        END                                                    <<04799>>02758000
     ELSE             <<  PROCESS IS NOT A JOB/SESSION  >>     <<04799>>02760000
        FPROCTERM;          << CLOSES REMAINING FILES  >>      <<04799>>02762000
      CLEANUPVOLUMES;  << Need to dismount all volumes >>      <<01422>>02764000
  CLEANTAPE(PIN);  <<RELEASE LABELED TAPES>>                   <<TL.02>>02766000
      ABORTDSEG(FALSE);                <<CLOSES LOCAL XTRA DATA SEG>>   02768000
      ABORTMAIL;                                               <<00141>>02770000
      ABORTRIN(PIN);                                                    02772000
CLEANUPLOG;   <<CLEANS UP ANY LOGGING STUFF HELD BY THE USER>> <<00506>>02774000
                                                                        02776000
      IF DESF THEN                                             <<WH.21>>02778000
        BEGIN            <<HAVE SONS>>                         <<WH.21>>02780000
          CX:=0;                                               <<WH.21>>02782000
          DISAPROC;      <<PDISABLE>>                          <<WH.21>>02784000
          WHILE (PINNUM:=GETPROCID(CX:=CX+1)) <> 0 DO          <<WH.21>>02786000
            BEGIN        <<SOFT KILL SONS THAT ARE ALIVE>>     <<WH.21>>02788000
              IF SYS'PCB(PINNUM*PCBSIZE+9) < 0 THEN            <<WH.21>>02790000
                BEGIN    <<ALIVE>>                             <<WH.21>>02792000
                  X:=X-9;                                      <<WH.21>>02794000
                  SET'PSIF(X,%20);  <<SOFT KILL>>              <<WH.21>>02796000
                END;                                           <<WH.21>>02798000
            END <<WHILE>>;                                     <<WH.21>>02800000
          ENAPROC;       <<PENABLE>>                           <<WH.21>>02802000
          CX:=0;                                               <<WH.21>>02804000
          WHILE (PINNUM:=GETPROCID(CX:=CX+1)) <> 0 DO          <<WH.21>>02806000
            BEGIN        <<ABORT SONS I/O>>                    <<WH.21>>02808000
              IF SYS'PCB(PINNUM*PCBSIZE+9) < 0 <<ALIVE?>>      <<WH.21>>02810000
                 THEN                                          <<00141>>02812000
                   BEGIN                                       <<00141>>02814000
                     ABORTPROCIO(PINNUM); <<ABORT I/O>>        <<00141>>02816000
                     AWAKE(PINNUM*PCBSIZE,%400,0);             <<00141>>02818000
                                  <<ABORT MAIL WAIT>>          <<00141>>02820000
                     << ABORT CONSOLE REPLY WAIT >>            <<00813>>02822000
                     REMRITENTRY'(PINNUM,1);                   <<01400>>02824000
                   END;                                        <<00141>>02826000
            END <<WHILE>>;                                     <<WH.21>>02828000
          DISABLE;                                             <<WH.21>>02830000
          WHILE (PINNUM:=GETPROCID(1)) <> 0 DO                 <<WH.21>>02832000
            BEGIN        <<BURRY SONS AS THEY DIE>>            <<WH.21>>02834000
              IF LOGICAL(SYS'PCB(PINNUM*PCBSIZE+8).(6:1)) THEN <<WH.21>>02836000
                BEGIN    <<DEAD >>                             <<WH.21>>02838000
                  ENABLE;                                      <<WH.21>>02840000
                  BURRYPROC(X-8);                              <<WH.21>>02842000
                END ELSE                                       <<WH.21>>02844000
                BEGIN    <<NOT DEAD>>                          <<WH.21>>02846000
                  IF SYS'PCB(X:=X+1) < 0 THEN                  <<WH.21>>02848000
                    BEGIN     <<SON STILL ALIVE>>              <<WH.21>>02850000
                      WAIT(%4000,0)  <<WAIT IN MOURNING>>      <<WH.21>>02852000
                    END ELSE                                   <<WH.21>>02854000
                    BEGIN    <<SON NOT ALIVE>>                 <<WH.21>>02856000
                      <<CLEAR BOTH STOP AND HYBERNATE BITS  >> <<01135>>02858000
                      <<TO INSURE FATHER WILL NOT BE WAITING>> <<01135>>02860000
                      <<ON A SON WHO WILL NEVER TERMINATE   >> <<01135>>02862000
                      CLEAR'PSIF(X-9,%14);<<CLEAR ST&HB BITS>> <<01135>>02864000
                      X:=X-1;                                  <<WH.21>>02866000
                      SYS'PCB(X).(7:1):=1;<<ACTIVATE FATHER>>  <<WH.21>>02868000
                      WAIT(2,0);          <<WAIT ON SON>>      <<WH.21>>02870000
                    END;                                       <<WH.21>>02872000
                END;                                           <<WH.21>>02874000
              DISABLE;                                         <<WH.21>>02876000
            END <<WHILE>>;                                     <<WH.21>>02878000
        END;                                                   <<WH.21>>02880000
                                                                        02882000
E2:                                                                     02884000
      TOS:=ABSOLUTE(ABSOLUTE(CPCB)+9)&LSR(7);                           02886000
      <<TOS CONTAINS THE PROCESS TYPE>>                                 02888000
      PROCTYPE:=TOS LAND %7;                                            02890000
                                                                        02892000
      IF PROCTYPE=1 THEN              <<SON OF MAIN>>                   02894000
      BEGIN                                                             02896000
         MRCAPOK(FALSE);               <<RESET GLOBAL RIN FLAG>>        02898000
         FREELOCRIN;                                                    02900000
         IF <  THEN SUDDENDEATH(300);                                   02902000
      END;                                                              02904000
                                                                        02906000
      <<ACCUMULATE CPU TIME AT JOB/SESSION LEVEL>>                      02908000
                                                                        02910000
      DISABLE;                         <<INTERRUPTS>>                   02912000
      ASSEMBLE( ZERO; RCLK );     << DOUBLE OF CPU CLOCK >>             02914000
      TIME := TOS;                                                      02916000
                                                                        02918000
      PUSH(Q,DL);                                                       02920000
      ASSEMBLE(XCH,SUB);  << OFFSET FROM Q TO PCBX END >>               02922000
      X := S0-1;    << OFFSET TO PCXGLOB >>                             02924000
      X := S0-PCBX(X);    << X AT BASE OF PCXGLOB >>                    02926000
                                                                        02928000
      LDEV := PCBX(X:=X+3).(8:8);                                       02930000
      JIT:= PCBX(X:=X+3).(6:10);      <<JOB INF TABLE INDEX>>           02932000
      JOBTYPE:=PCBX(X).(2:2);                                           02934000
      JCUTX:=PCBX(X:=X+1)&LSR(8);     <<JOB CUT OFF INDEX>>             02936000
                                                                        02938000
      X := S0-2;        << OFFSET TO PCXFIX >>                          02940000
      X := TOS-PCBX(X);   << X AT BASE OF PCXFIX >>                     02942000
                                                                        02944000
      TOS := PCBX(X:=X+CPUTX);    << HIGH ORDER OF TIME >>              02946000
      TOS := PCBX(X:=X+1);         <<CPU TIME LOADED>>                  02948000
                                                                        02950000
      EFROLS:=PCBX(X:=X+6);     << TIME REMAINER >>                     02952000
      PCBX(X):=0;                                                       02954000
                                                                        02956000
      ENABLE;                          <<INTERRUPTS>>                   02958000
      EXCHANGEDB(JIT);                                                  02960000
      DISABLE;                                                          02962000
                                                                        02964000
      TOS:=JACCT(1);    TOS := TIME;        <<LOAD CUMULATED TIME>>     02966000
      ASSEMBLE(DADD,DADD);          << FORM CUMULATED TIME >>           02968000
      JACCT(X) := TOS;              << SAVE CUMULATED TIME >>           02970000
      IF OVERFLOW THEN                 <<GREATER TH 23 DAYS>>           02972000
        JACCT(X) := %17777777777D;     <<INFINITE>>                     02974000
      ENABLE;                          <<INTERRUPTS>>                   02976000
                                                                        02978000
      <<UPDATE JOB CUT OFF : CPU TIME>>                                 02980000
                                                                        02982000
      IF JCUTX<>0 THEN                 <<TIME LIMITING>>                02984000
      BEGIN                                                             02986000
         EXCHANGEDB(JCUTDST);                                           02988000
         TOS := 0;   TOS := EFROLS;                                     02990000
         TOS := TIME;                                                   02992000
         DISABLE;                                                       02994000
         TOS:=JCUT(JCUTX*3+1);         <<JOB CPU TIME>>                 02996000
         TOS:=JCUT(X:=X+1);                                             02998000
         ASSEMBLE(DADD,DADD;DDUP);                                      03000000
         JCUT(X):=TOS;                 <<STORE JOB CPU TIME>>           03002000
         JCUT(X:=X-1):=TOS;                                             03004000
         ENABLE;                                                        03006000
         TOS:=JCUT(X:=X-1);            <<JOB CPU TIME LIMIT>>           03008000
         TOS:=MILLE;                   <<CPU TIME LIM IN SEC>>          03010000
         ASSEMBLE(LMPY,DCMP);                                           03012000
         IF > THEN TLF:=TRUE;          <<EXCCEDED TIME LIMIT>>          03014000
      END;                                                              03016000
                                                                        03018000
      EXCHANGEDB(LDTDST);                                               03020000
      X := LDEV*LDTSIZE+2;                                              03022000
      DEVTYPE := LDTABLE(X).(10:6);   << GET DEVICE TYPE >>             03024000
                                                                        03026000
      IF JOBTYPE=1 AND LDTABLE(X:=X-1).(8:8)=PIN THEN                   03028000
        BEGIN  << CLEAN UP CONTROL Y FOR SESSIONS >>                    03030000
          LDTABLE(X).(8:8) := 0;                                        03032000
          IF DEVTYPE=TERM THEN IOCONTROL(LDEV,12);  << DISABLE CY >>    03034000
        END;                                                            03036000
                                                                        03038000
      EXCHANGEDB(0);                   <<BACK HOME>>                    03040000
IF ABSOLUTE(ABSOLUTE(CPCB)+RESABORTINFOWORDNUM).               <<01549>>03042000
   HASSIRFLAG=1 THEN SUDDENDEATH(314);                         <<01549>>03044000
         << TERMINATING WITH SIR >>                            <<06.EB>>03046000
                                                                        03048000
TOS:=ABSOLUTE(ABSOLUTE(CPCB)+PIINFONIMPPINWORDNUM)             <<01549>>03050000
      .PSIMFIELD;                                              <<01549>>03052000
                                                                        03054000
      IF PROCTYPE=2 THEN          <<MAIN PROCESS>>                      03056000
      BEGIN                                                             03058000
         IF DEVTYPE=TERM THEN   << CLEAN UP TERMINAL STATE >>           03060000
           BEGIN                                                        03062000
             << RESET BREAK AND CONTROL Y STATE >>             <<02077>>03064000
             ATTACHIO (LDEV, 0, 0, 0, 30, 0, 0, 0, %13);                03066000
             RESETBREAKBITS(LDEV, 0);   << RESET CONTROL Y >>           03068000
             IOCONTROL(LDEV,25);   << RESET BREAK FLUSH >>              03070000
             << DISABLE BREAK EXCEPT TO DS PSUDO TERMINALS >>  <<02077>>03072000
             IF GET'DSDEVICE(LDEV)<3 THEN IOCONTROL(LDEV,10);  <<02077>>03074000
           END;                                                         03076000
                                                                        03078000
         IF (TOS <= 2) AND (FAILPARM < TIMEDOUT) THEN          <<04199>>03080000
           << THE MAIN WAS ABORTED >>                          <<01131>>03082000
           BEGIN                                                        03084000
             IF JOBTYPE =1 THEN MOVE BUFF := ("SESSION",0)     <<0U.EB>>03086000
             ELSE MOVE BUFF := ("JOB",0);                      <<0U.EB>>03088000
             GENMSG(1,IF TLF THEN 252 ELSE 251,%0,@BUFF);      <<0U.EB>>03090000
             << PRINT J/S ABORTED BY SYSTEM MANAGEMENT OR IF>> <<0U.EB>>03092000
             << TIMED OUT, J/S TIMED OUT                   >>  <<0U.EB>>03094000
           END;                                                         03096000
                                                                        03098000
         CLEANUPJOB (PARAM,DISPOSE);                           <<04799>>03100000
E4:                                                                     03102000
         REQUCOP(2, PIN, TRUE);    << REQUEST UCOP SERVICE >>           03104000
         SUDDENDEATH(301);             <<SYSTEM ERROR>>                 03106000
      END ELSE                         <<NOT A MAIN PROCESS>>           03108000
      BEGIN                                                             03110000
         IF TOS=2 THEN                 <<TEST FOR SOFT KILL>>           03112000
         BEGIN                                                          03114000
            TOS:=ABSOLUTE(ABSOLUTE(CPCB)+5);     <<FATHER>>             03116000
            TOS:=TOS&LSR(8);                                            03118000
            TOS:=TOS*PCBSIZE;                                           03120000
            DISABLE;                                                    03122000
            SYS'PCB(PIN*PCBSIZE+8).(6:1):=1;  <<DEAD>>                  03124000
            ASSEMBLE(DUP);    <<FATHER>>                       <<WH.21>>03126000
            X:=TOS+4;                                          <<WH.21>>03128000
            IF SYS'PCB(X) < 0 THEN                             <<WH.21>>03130000
              BEGIN           <<FATHER IN MOURNING>>           <<WH.21>>03132000
                AWAKE(*,%4000,2);                              <<WH.21>>03134000
              END ELSE                                         <<WH.21>>03136000
              BEGIN          <<MUST ACTIVATE FATHER>>          <<WH.21>>03138000
                AWAKE(*,2,2);                                  <<WH.21>>03140000
              END;                                             <<WH.21>>03142000
            WAIT(2,0);                 <<IF AWAKE FAILS>>               03144000
         END;                                                           03146000
         GOTO E4;                      <<GOT HERE THRU A TERMINATE>>    03148000
      END;                                                              03150000
                                                                        03152000
END;  << E X P I R E  >>                                                03154000
                                                                        03156000
PROCEDURE DISABLECLASS(CLASSNUMBER);                           <<01614>>03160000
  VALUE CLASSNUMBER;                                           <<01614>>03162000
  LOGICAL CLASSNUMBER;                                         <<01614>>03164000
  OPTION UNCALLABLE,PRIVILEGED;                                <<01614>>03166000
                                                               <<01614>>03168000
COMMENT                                                        <<01614>>03170000
                                                               <<01614>>03172000
DISABLECLASS WILL TURN OFF MASK BITS AND DECREMENT COUNTERS    <<01614>>03174000
FOR THE MPE IV MEASUREMENT INTERFACE.                          <<01614>>03176000
                                                               <<01614>>03178000
INPUT PARAMETER:                                               <<01614>>03180000
                                                               <<01614>>03182000
CLASS  IS THE CLASSNUMBER OF STATISTICS TO BE TURNED OFF.      <<01614>>03184000
                                                               <<01614>>03186000
RETURN VALUES:                                                 <<01614>>03188000
                                                               <<01614>>03190000
    CC = CCL ==> PROCESS DID NOT HAVE CLASS ENABLED            <<01614>>03192000
    CC = CCE ==> OK                                            <<01614>>03194000
    CC = CCG ==> NOT USED                                      <<01614>>03196000
                                                               <<01614>>03198000
OPERATION                                                      <<01614>>03200000
                                                               <<01614>>03202000
THIS PROCEDURE IS ON ONLY CALLED FROM STOPSTATISTICS.          <<01614>>03204000
IT WILL FIRST VERIFY THAT THE CALLING PROCESS TO STOPSTATISTICS<<01614>>03206000
DID HAVE THE CLASS ENABLED BY LOOKING AT IT'S PCLASSENBLMASK IN<<01614>>03208000
PCBXFIXED AREA. IF THE PROCESS DIDNT HAVE IT ENABLED NO ACTION <<01614>>03210000
IS TAKEN, OTHERWISE ITS CLASS MASK BIT IS RESET AND THE COR-   <<01614>>03212000
RESPONDING ENABLED COUNTER IS DECREMENTED IN MEASINFOTAB. IF   <<01614>>03214000
THE ENABLED COUNT FALLS TO ZERO WE TURN OF THE CLASSMASK BIT   <<01614>>03216000
OF GCLASSENABLEDMASK.                                          <<01614>>03218000
;                                                              <<01614>>03220000
                                                               <<01614>>03222000
BEGIN                                                          <<01614>>03224000
                                                               <<01614>>03226000
INTEGER LOCALCOUNT;                                            <<01614>>03228000
INTEGER POINTER PCLASSENBLMASK;                                <<01614>>03230000
                                                               <<01614>>03232000
DEFINE CC = STATUS.(6:2)#;                                     <<01614>>03234000
                                                               <<01614>>03236000
                                                               <<02533>>03240000
CC:=CCE; <<INITIALIZE>>                                        <<02533>>03242000
                                                               <<01614>>03244000
PUSH(DL);                                                      <<01614>>03246000
@PCLASSENBLMASK:=TOS;                                          <<01614>>03248000
@PCLASSENBLMASK:=@PCLASSENBLMASK-PCLASSENBLMASK(-2)+           <<01614>>03250000
                 PCLASSENBLMASK'IDX;                           <<01614>>03252000
TOS := PCLASSENBLMASK;                                         <<01614>>03254000
X := CLASSNUMBER;                                              <<01614>>03256000
ASMB(TRBC 0,X);                                                <<01614>>03258000
IF <> THEN              <<PROCESS DID HAVE CLASSENABLED>>      <<01614>>03260000
  BEGIN                 <<DECREMENT ENABLED COUNTER>>          <<01614>>03262000
  CASE CLASSNUMBER OF                                          <<01614>>03264000
    BEGIN                                                      <<01614>>03266000
      BEGIN                                                    <<01614>>03268000
      CLASS0COUNT  := CLASS0COUNT-1;                           <<01614>>03270000
      LOCALCOUNT:=CLASS0COUNT;                                 <<01614>>03272000
      END;                                                     <<01614>>03274000
      BEGIN                                                    <<01614>>03276000
      CLASS1COUNT  := CLASS1COUNT-1;                           <<01614>>03278000
      LOCALCOUNT:=CLASS1COUNT;                                 <<01614>>03280000
      END;                                                     <<01614>>03282000
      BEGIN                                                    <<01614>>03284000
      CLASS2COUNT  := CLASS2COUNT-1;                           <<01614>>03286000
      LOCALCOUNT:=CLASS2COUNT;                                 <<01614>>03288000
      END;                                                     <<01614>>03290000
      BEGIN                                                    <<01614>>03292000
      CLASS3COUNT  := CLASS3COUNT-1;                           <<01614>>03294000
      LOCALCOUNT:=CLASS3COUNT;                                 <<01614>>03296000
      END;                                                     <<01614>>03298000
      BEGIN                                                    <<01614>>03300000
      CLASS4COUNT  := CLASS4COUNT-1;                           <<01614>>03302000
      LOCALCOUNT:=CLASS4COUNT;                                 <<01614>>03304000
      END;                                                     <<01614>>03306000
      BEGIN                                                    <<01614>>03308000
      CLASS5COUNT  := CLASS5COUNT-1;                           <<01614>>03310000
      LOCALCOUNT:=CLASS5COUNT;                                 <<01614>>03312000
      END;                                                     <<01614>>03314000
      BEGIN                                                    <<01614>>03316000
      CLASS6COUNT  := CLASS6COUNT-1;                           <<01614>>03318000
      LOCALCOUNT:=CLASS6COUNT;                                 <<01614>>03320000
      END;                                                     <<01614>>03322000
      BEGIN                                                    <<01614>>03324000
      CLASS7COUNT  := CLASS7COUNT-1;                           <<01614>>03326000
      LOCALCOUNT:=CLASS7COUNT;                                 <<01614>>03328000
      END;                                                     <<01614>>03330000
      BEGIN                                                    <<01614>>03332000
      CLASS8COUNT  := CLASS8COUNT-1;                           <<01614>>03334000
      LOCALCOUNT:=CLASS8COUNT;                                 <<01614>>03336000
      END;                                                     <<01614>>03338000
      BEGIN                                                    <<01614>>03340000
      CLASS9COUNT  := CLASS9COUNT-1;                           <<01614>>03342000
      LOCALCOUNT:=CLASS9COUNT;                                 <<01614>>03344000
      END;                                                     <<01614>>03346000
      BEGIN                                                    <<01614>>03348000
      CLASS10COUNT := CLASS10COUNT-1;                          <<01614>>03350000
      LOCALCOUNT:=CLASS10COUNT;                                <<01614>>03352000
      END;                                                     <<01614>>03354000
      BEGIN                                                    <<01614>>03356000
      CLASS11COUNT := CLASS11COUNT-1;                          <<01614>>03358000
      LOCALCOUNT:=CLASS11COUNT;                                <<01614>>03360000
      END;                                                     <<01614>>03362000
      BEGIN                                                    <<01614>>03364000
      CLASS12COUNT := CLASS12COUNT-1;                          <<01614>>03366000
      LOCALCOUNT:=CLASS12COUNT;                                <<01614>>03368000
      END;                                                     <<01614>>03370000
      BEGIN                                                    <<01614>>03372000
      CLASS13COUNT := CLASS13COUNT-1;                          <<01614>>03374000
      LOCALCOUNT:=CLASS13COUNT;                                <<01614>>03376000
      END;                                                     <<01614>>03378000
      BEGIN                                                    <<01614>>03380000
      CLASS14COUNT := CLASS14COUNT-1;                          <<01614>>03382000
      LOCALCOUNT:=CLASS14COUNT;                                <<01614>>03384000
      END;                                                     <<01614>>03386000
      BEGIN                                                    <<01614>>03388000
      CLASS15COUNT := CLASS15COUNT-1;                          <<01614>>03390000
      LOCALCOUNT:=CLASS15COUNT;                                <<01614>>03392000
      END;                                                     <<01614>>03394000
    END;   <<OF CASE>>                                         <<01614>>03396000
                                                               <<01614>>03398000
  IF LOCALCOUNT = 0 THEN <<TURN OFF GLOBAL MASK>>              <<01614>>03400000
    BEGIN                                                      <<01614>>03402000
    TOS:=GCLASSENABLEDMASK;                                    <<01614>>03404000
    X:=CLASSNUMBER;                                            <<01614>>03406000
    ASMB(TRBC 0,X);                                            <<01614>>03408000
    GCLASSENABLEDMASK:=TOS;                                    <<01614>>03410000
    END;                                                       <<01614>>03412000
  PCLASSENBLMASK:=TOS;   <<TOS IS FROM THE FIRST TRBC>>        <<01614>>03414000
  END                                                          <<01614>>03416000
ELSE                                                           <<01614>>03418000
   CC:=CCL; <<PROCESS DID NOT HAVE CLASS ENABLED>>             <<01614>>03420000
END;                                                           <<01614>>03422000
                                                               <<01614>>03424000
                                                               <<01614>>03426000
                                                               <<01614>>03428000
PROCEDURE STOPSTATISTICS(CLASSMASK);                           <<01614>>03430000
  VALUE CLASSMASK;                                             <<01614>>03432000
  LOGICAL CLASSMASK;                                           <<01614>>03434000
  OPTION PRIVILEGED,UNCALLABLE;                                <<01614>>03436000
                                                               <<01614>>03438000
                                                               <<01614>>03440000
COMMENT                                                        <<01614>>03442000
*************************************************************  <<01614>>03444000
                                                               <<01614>>03446000
STOPSTATISTICS IS USED TO TERMINATE STATISTICS GATHERING FOR   <<01614>>03448000
A PROCESS WHICH HAD PREVIOUSLY TURNED ON STATISTICS GATHERING. <<01614>>03450000
                                                               <<01614>>03452000
INPUT PARAMETERS:                                              <<01614>>03454000
                                                               <<01614>>03456000
      CLASSMASK: A BIT MASK OF STATISTIC CLASSES TO BE DISABLED<<01614>>03458000
                                                               <<01614>>03460000
RETURN VALUES:                                                 <<01614>>03462000
                                                               <<01614>>03464000
     CC = CCG ==> DID NOT HAVE CLASS ENABLED.                  <<01614>>03466000
     CC = CCE ==> OK                                           <<01614>>03468000
     CC = CCL ==> COULD NOT CLEANPUP (DATA SEG)                <<01614>>03470000
                                                               <<01614>>03472000
OPERATION:                                                     <<01614>>03474000
                                                               <<01614>>03476000
     STOPSTATISTICS WILL FIRST GET THE MEASSIR TO AVOID        <<01614>>03478000
     PROBLEMS WITH DUAL ACCES TO SYS GLOBAL CELLS. IT WILL     <<01614>>03480000
     THEN START TO TURN OFF THE CLASS BITS IN BOTH THE         <<01614>>03482000
     GLASSENABLEDMASK AND PCLASSENABLED MASK BY CALLING        <<01614>>03484000
     THE DISABLECLASS PROCEDURE. IF ANY OF THE CLASSES RE-     <<01614>>03486000
     QUESTED TO BE TURNED OFF WERE NOT PREVIOUSLY TURNED       <<01614>>03488000
     ON BY THE CALLING PROCESS THEN CCG WILL BE RETURNED.      <<01614>>03490000
     NOTE: STOPSTATISTICS WILL CONTINUE TO TURN OFF ANY        <<01614>>03492000
     CLASSES THE USER REQUESTED REGARDLESS IF HE ATTEMPTED     <<01614>>03494000
     TO TURN OFF ONE OR MORE NOT PREVIOUSLY ENABLED. IF        <<01614>>03496000
     ALL CLASSES OF EITHER THE GLOBAL OR PROCESS LEVEL CLASS   <<01739>>03498000
     OF STATISTICS HAVE BEEN DISABLED, THEN THE APPROPIATE     <<01739>>03500000
     DATA SEGMENT IS RELEASED.                                 <<01739>>03502000
                                                               <<01739>>03504000
                                                               <<01614>>03506000
*************************************************************  <<01614>>03508000
;                                                              <<01614>>03510000
                                                               <<01614>>03512000
BEGIN                                                          <<01614>>03514000
LOGICAL BITWORD,          <<LOOP VARIABLE FOR SETTING MASKS>>  <<01614>>03516000
        MYSIR,            <<USED AS 2ND PARM FOR RELSIR>>      <<01614>>03518000
        SAVEX;                                                 <<01614>>03520000
                                                               <<01614>>03522000
INTEGER POINTER PCLASSENBLMASK;                                <<01614>>03524000
                                                               <<01614>>03526000
 INTEGER INDX := 14, XDS'NUM;                                  <<01837>>03528000
                                                               <<01837>>03530000
 DEFINE  STATXDSBANK = MEASINFOTABPTR(INDX)#,                  <<01837>>03532000
         STATXDSBASE = MEASINFOTABPTR(INDX+1)#,                <<01837>>03534000
         STATXDS'NUM = MEASINFOTABPTR(INDX+2)#,                <<01837>>03536000
         USER'DFND'CLASS = CLASSMASK.(9:7)#;                   <<01837>>03538000
                                                               <<01837>>03540000
DEFINE GLOBALMASK = (0:1)#,                                    <<01739>>03542000
       PROCMASK   = (15:1)#,                                   <<01739>>03544000
       GLOBALSTATSENBLD =  GCLASSENABLEDMASK.GLOBALMASK <> 0#, <<01739>>03546000
       GLOBALSTATREQ    = CLASSMASK.GLOBALMASK <> 0#,          <<01739>>03548000
       PROCSTATSENBLD   = GCLASSENABLEDMASK.PROCMASK <> 0#,    <<01739>>03550000
       PROCSTATREQ      = CLASSMASK.PROCMASK <> 0#,            <<01739>>03552000
       CC = STATUS.(6:2)#;                                     <<01614>>03554000
                                                               <<01614>>03556000
<<**************MAIN*****************>>                        <<01614>>03558000
                                                               <<01614>>03560000
CC:=CCE;                                                       <<01614>>03562000
MYSIR := GETSIR(MEASSIR);                                      <<01614>>03564000
                                                               <<01614>>03566000
IF GCLASSENABLEDMASK <> 0 AND CLASSMASK <> 0 THEN              <<01739>>03568000
   BEGIN                                                       <<01739>>03570000
   SAVEX:=-1;                   <<USED TO INITIALIZE X REG>>   <<01739>>03572000
   BITWORD:=CLASSMASK;          <<LOOP VARIABLE>>              <<01739>>03574000
   WHILE BITWORD <> 0 DO                                       <<01739>>03576000
     BEGIN                                                     <<01739>>03578000
     TOS:=BITWORD;                                             <<01739>>03580000
     X:=SAVEX;                                                 <<01739>>03582000
     ASMB(SCAN,X);                                             <<01739>>03584000
     SAVEX:=X;        <<FOR USE IN NEXT SCAN>>                 <<01739>>03586000
     BITWORD:=TOS;    <<SCAN BITSHIFTS LEFT UNTIL 0>>          <<01739>>03588000
     DISABLECLASS(SAVEX);<<TURN OFF GLOBAL AND PROC MASKS>>    <<01739>>03590000
     IF <> THEN CC:=CCG;                                       <<01739>>03592000
     END;                                                      <<01739>>03594000
                                                               <<01739>>03596000
   IF NOT (GLOBALSTATSENBLD) AND MEASSTATXDS'NUM <> 0 THEN     <<01739>>03598000
      BEGIN   << NO LONGER NEED DATA SEGMENT >>                <<01739>>03600000
      UNFREEZE(MEASSTATXDS'NUM,1,0);                           <<01739>>03602000
      IF <> THEN CC:=CCL ELSE                                  <<01739>>03604000
         BEGIN                                                 <<01739>>03606000
         UNLOCKSEG(MEASSTATXDS'NUM,1,0);                       <<01739>>03608000
         IF <> THEN CC:=CCL ELSE                               <<01739>>03610000
            BEGIN                                              <<01739>>03612000
            RELDATASEG(MEASSTATXDS'NUM);                       <<01739>>03614000
            MEASSTATXDSBANK:=0;                                <<01739>>03616000
            MEASSTATXDSBASE:=0;                                <<01739>>03618000
            MEASSTATXDS'NUM:=0;                                <<01739>>03620000
            END;                                               <<01739>>03622000
         END;                                                  <<01739>>03624000
      END;                                                     <<01739>>03626000
                                                               <<01739>>03628000
                                                               <<01739>>03630000
    SAVEX := USER'DFND'CLASS LAND (NOT GCLASSENABLEDMASK);     <<01837>>03632000
    WHILE  SAVEX <> 0  DO                                      <<01837>>03634000
    BEGIN                                                      <<01837>>03636000
       INDX := INDX + 3;    << INDEX TO XDS INFO >>            <<01837>>03638000
       XDS'NUM := STATXDS'NUM;                                 <<01837>>03640000
       IF  SAVEX AND XDS'NUM <> 0  THEN                        <<01837>>03642000
       BEGIN                                                   <<01837>>03644000
          UNFREEZE(XDS'NUM, 1, 0);                             <<01837>>03646000
          IF  <>  THEN  CC := CCL  ELSE                        <<01837>>03648000
          BEGIN                                                <<01837>>03650000
             UNLOCKSEG(XDS'NUM, 1, 0);                         <<01837>>03652000
             IF  <>  THEN  CC := CCL  ELSE                     <<01837>>03654000
             BEGIN                                             <<01837>>03656000
                RELDATASEG(XDS'NUM);                           <<01837>>03658000
                STATXDS'NUM := 0;                              <<01837>>03660000
                STATXDSBANK := 0;                              <<01837>>03662000
                STATXDSBASE := 0;                              <<01837>>03664000
             END;                                              <<01837>>03666000
          END;                                                 <<01837>>03668000
       END;                                                    <<01837>>03670000
       SAVEX := SAVEX&LSR(1);                                  <<01837>>03672000
    END;                                                       <<01837>>03674000
   END                                                         <<01739>>03676000
ELSE                                                           <<01739>>03678000
   CC:=CCG; <<EITHER NOT ENABLED OR USER DIDNT HAVE ENABLED>>  <<01739>>03680000
RELSIR(MEASSIR,MYSIR);                                         <<01614>>03682000
END;                                                           <<01614>>03684000
procedure LOG'STUN'SIMULATION(PIN);                            <<01766>>03686000
value PIN;                                                     <<01766>>03688000
integer PIN;                                                   <<01766>>03690000
option privileged,uncallable;                                  <<01766>>03692000
begin                                                          <<01766>>03694000
                                                               <<01766>>03696000
equate     STUN'TYPE           =  0,      <<sub type>>         <<01766>>03698000
           PROG'FILE'TYPE      =  16;     <<major type>>       <<01766>>03700000
                                                               <<01766>>03702000
byte array PROG'FILE(0:27);                                    <<01766>>03704000
                                                               <<01766>>03706000
<<This procedure is called to log a STACKUNDERFLOW simulation>><<01766>>03708000
<<for the ICF 44/55.                                         >><<01766>>03710000
                                                               <<01766>>03712000
                                                               <<01766>>03714000
PROCFILE(PIN,PROG'FILE);      <<get prog file name>>           <<01766>>03716000
<<check if valid prog file name>>                              <<01766>>03718000
if < then MOVE PROG'FILE:="CAN'T DETERMINE PROGRAM FILE";      <<01766>>03720000
tos:=STUN'TYPE;               <<log record sub type>>          <<01766>>03722000
tos:=0D;                      <<unused fields>>                <<01766>>03724000
tos:=@PROG'FILE;              <<prog file name>>               <<01766>>03726000
tos:=28;                      <<name length>>                  <<01766>>03728000
tos:=PROG'FILE'TYPE;          <<log record major type>>        <<01766>>03730000
LOG16;                        <<log event>>                    <<01766>>03732000
end;                                                           <<01766>>03734000
PROCEDURE TERMINATE;                                           <<02066>>03736000
OPTION PRIVILEGED;                                             <<02066>>03738000
                                                               <<02066>>03740000
COMMENT: This is a user callable intrinsic which will          <<02066>>03742000
         terminate a process.  It cuts the stack back          <<02066>>03744000
         to the initial Q setting and may be called with       <<02066>>03746000
         with DB logically anywhere.                           <<02066>>03748000
************************************************************** <<02066>>03750000
*  TERMINATE MUST BE THE FIRST PROCEDURE IN MORGUE'S         * <<02066>>03752000
*  CODE SEGMENT!  LOTS OF SOFTWARE RELIES ON THE DELTA P     * <<02066>>03754000
*  VALUE IN MORGUES STACK MARKER BEING ZERO IN ORDER TO      * <<02066>>03756000
*  FIND THE PARM VALUE SUPPLIED ON THE RUN COMMAND           * <<02066>>03758000
*************************************************************; <<02066>>03760000
                                                               <<02066>>03762000
BEGIN                                                          <<02066>>03764000
                                                               <<02066>>03766000
    DEFINE MAMONITORON = ABSOLUTE (%1267) #;                   <<02066>>03768000
    EQUATE QINI = 3;                                           <<02066>>03770000
    INTEGER ARRAY PCBX(*) = Q+0;                               <<02066>>03772000
    ENTRY TERMINATE';                                          <<02066>>03774000
                                                               <<02066>>03776000
TERMINATE':                                                    <<02066>>03778000
    PUSH (STATUS);                <<TRAPS OFF>>                <<02066>>03780000
    TOS.(2:1) := 0;                                            <<02066>>03782000
    SET (STATUS);                                              <<02066>>03784000
    A'(A'(CPCB)+9).(0:1) := 0;    <<LIVE BIT OFF>>             <<02066>>03786000
    PUSH (Q,DL);                                               <<02066>>03788000
    ASSEMBLE (XCH,SUB);           <<DL-Q = NEGATIVE>>          <<02066>>03790000
    ASSEMBLE (DUP,STAX);                                       <<02066>>03792000
    X := X-2;                                                  <<02066>>03794000
    TOS := -PCBX(X);              << -(DL TO PXFIXED) >>       <<02066>>03796000
    ASSEMBLE (ADD);                                            <<02066>>03798000
    X := TOS+QINI;                <<X:=DISP OF Q TO PXFIXD QI>><<02066>>03800000
    TOS := PCBX(X);               <<INITIAL VALUE OF Q-DB>>    <<02066>>03802000
    DISABLE;                                                   <<02066>>03804000
    TOS := A'(A'(QI)-4);          <<STDB>>                     <<02066>>03806000
    PUSH (DB);                    <<PUSH ACTUAL DB>>           <<02066>>03808000
    ASSEMBLE (DELB,SUB; ADD,DUP);                              <<02066>>03810000
    SET (Q,S);                    <<SET Q,S TO QI>>            <<02066>>03812000
    ENABLE;                                                    <<02066>>03814000
    X := MAMONITORON;                                          <<02066>>03816000
    IF <> THEN MMSTAT (-211,0,0,0);                            <<02066>>03818000
    EXPIRE;                                                    <<02066>>03820000
    HELP;                         <<FOR DEBUGER LINKING>>      <<02066>>03822000
END;  <<TERMINTATE>>                                           <<02066>>03824000
                                                               <<02066>>03826000
$CONTROL SEGMENT=MAIN                                          <<02066>>03828000
END.                                                           <<02066>>03830000
