$CONTROL USLINIT,MAP,SOURCE,CODE                                        00010000
<< NURSERY -- MODULE 76 >>                                              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
<<COPYRIGHT     "(C) COPYRIGHT HEWLETT-PACKARD CO. 1976. ",           >>00028000
<<     "THIS PROGRAM MAY BE USED WITH ONE COMPUTER SYSTEM AT A ",     >>00030000
<<     "TIME AND SHALL NOT OTHERWISE BE RECORDED, TRANSMITTED OR ",   >>00032000
<<     "STORED IN A RETRIEVAL SYSTEM.  COPYING OR OTHER REPRODUCTION ">>00034000
<<     "OF THIS PROGRAM EXCEPT FOR ARCHIVAL PURPOSES IS PROHIBITED ", >>00036000
<<     "WITHOUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.">>00038000
$THIRTY                                                                 00040000
$CONTROL SEGMENT=NURSERY,MAIN=NURSERY                          <<02.EB>>00042000
<<FRI, FEB 17, 1978,  8:42 AM>>                                         00044000
$CONTROL PRIVILEGED                                                     00046000
BEGIN                                                                   00048000
DEFINE                                                                  00050000
           A                 = ABSOLUTE          #,                     00052000
           ENAPROC           = ASSEMBLE(PSEB)    #,                     00054000
           DISAPROC          = ASSEMBLE(PSDB)    #,                     00056000
           DISABLE           = ASSEMBLE(SED 0)   #,                     00058000
           ENABLE            = ASSEMBLE(SED 1)   #;                     00060000
INTEGER                                                                 00062000
           DB0               = DB+0  ,                                  00064000
           DB1               = DB+1  ,                                  00066000
           DB2               = DB+2  ,                                  00068000
           DB3               = DB+3  ,                                  00070000
           DB4               = DB+4  ,                                  00072000
           DB5               = DB+5  ,                                  00074000
           DB6               = DB+6  ,                                  00076000
           DB7               = DB+7  ,                                  00078000
           DB8               = DB+8  ,                                  00080000
           DB9               = DB+9  ,                                  00082000
           DB10              = DB+10 ,                                  00084000
           DB11              = DB+11 ,                                  00086000
           S0                = S-0   ,                                  00088000
           S1                = S-1   ,                                  00090000
           S2                = S-2   ,                                  00092000
           S3                = S-3   ,                                  00094000
           S4                = S-4   ,                                  00096000
           S5                = S-5   ,                                  00098000
           X                 = X     ,                                  00100000
           XREG              = X     ;                                  00102000
LOGICAL                                                                 00104000
           LDB3              = DB+3  ,                                  00106000
           LS0               = S-0   ,                                  00108000
           LXREG             = X     ;                                  00110000
DOUBLE                                                                  00112000
           DS1               = S-1   ;                                  00114000
INTEGER POINTER                                                         00116000
           PDB0              = DB+0  ,                                  00118000
           PDB1              = DB+1  ,                                  00120000
           PDB2              = DB+2  ,                                  00122000
           PDB3              = DB+3  ,                                  00124000
           PDB4              = DB+4  ,                                  00126000
           PS0               = S-0   ,                                  00128000
           PS2               = S-2   ,                                  00130000
           PS3               = S-3   ;                                  00132000
LOGICAL POINTER                                                         00134000
           LPS0              = S-0   ;                                  00136000
BYTE POINTER                                                            00138000
           BPS0              = S-0   ,                         <<05.EB>>00140000
           BPS1              = S-1   ;                                  00142000
INTEGER ARRAY                                                           00144000
           ARRDB(*)          = DB+0  ,                                  00146000
           ARRDB5(*)         = DB+5  ,                                  00148000
           ARRDB8(*)         = DB+8  ,                                  00150000
           ARRDB9(*)         = DB+9  ,                                  00152000
           ARRDB12(*)        = DB+12 ;                                  00154000
EQUATE                                                                  00156000
<< SPOOLING SIRS >>                                                     00158000
           LDTSIR            = 10    ,                                  00160000
           LPDTSIR           = 9     ,                                  00162000
           IDDSIR            = 3     ,                                  00164000
           ODDSIR            = 4     ,                                  00166000
           CILOGSIR          = 36    ,                         <<00.04>>00168000
           JMATSIR           = 15    ,                                  00170000
<< DATA SEGMENT NUMBERS >>                                              00172000
           IDDDST            = 45    ,                                  00174000
           ODDDST            = 46    ,                                  00176000
           LDTDST            = 14    ,                                  00178000
           LPDTDST           = 13    ,                                  00180000
           CILOGDST          = 52    ,                         <<00.04>>00182000
           JMATDST           = 25    ,                                  00184000
<< TABLE SIZE CONSTANTS >>                                              00186000
           LPDTSIZE          = 2     ,                                  00188000
           LDTSIZE           = 5     ,                                  00190000
           PCBSIZE           = 16    ,                                  00192000
           XDDSIZE           = 30    ,                                  00194000
           IDDSIZE           = XDDSIZE ,                                00196000
           ODDSIZE           = XDDSIZE ,                                00198000
           JMATSIZE          = 26    ,                                  00200000
           JMATERRSIZE       = JMATSIZE -3 ,                            00202000
<< LOW MAIN MEMORY >>                                                   00204000
           CSTB              = 0     ,                                  00206000
           XCSTB             = 1     ,                                  00208000
           DSTB              = 2     ,                                  00210000
           PCBB              = 3     ,                                  00212000
           CPCB              = 4     ;                                  00214000
<< SYSTEM GLOBAL TABLE - SYSDB >>                                       00216000
EQUATE                                                                  00218000
           LPDTBASE          = %10   ,                                  00220000
           JOBSYNC           = %121  ,                                  00222000
           PCBT              = %141  ,                                  00224000
           UCOPPCBT          = 2     ,                                  00226000
           CPUTIMELIMIT      = %1117 ,    <<(SYSGLOB)>>                 00228000
           JOBPRI            = %334 ,                                   00230000
           JPRILIM           = %333 ,                                   00232000
           SPOOLLOGM         = %167,                           <<05.EB>>00234000
           LOGINFO           = %1167;                          <<05.EB>>00236000
DEFINE                                                                  00238000
           ABSYS             = %1000              #,                    00240000
           ABSYS'LPDTBASE    = A(ABSYS+LPDTBASE)  #,                    00242000
           ABSYS'JOBSYNC     = A(ABSYS+JOBSYNC)   #,                    00244000
             JOBREADY'F         = 13:1            #,                    00246000
             DEVFDREED'F        = 14:1            #,                    00248000
             JOBWAITING'F       = 15:1            #,                    00250000
           ABSYS'UCOPPCBT    = A(ABSYS+PCBT+UCOPPCBT)#,                 00252000
           ABSYS'JOBPRI      = A(ABSYS+JOBPRI)    #,                    00254000
           ABSYS'JPRILIM     = A(ABSYS+JPRILIM)   #,                    00256000
           ABSYS'SPOOLLOGM   = A(ABSYS+SPOOLLOGM) #,           <<05.EB>>00258000
           LOGLOGON          = A(LOGINFO).(13:1)#;             <<05.EB>>00260000
POINTER                                                                 00262000
           SYS'LPDTP         = LPDTBASE  ;                              00264000
                                                               <<02858>>00268000
<< SYSTEM TABLE (SYSGLOB) POINTERS >>                          <<02858>>00270000
INTEGER POINTER                                                <<02858>>00272000
   SYSGLOB = 0,                                                <<02858>>00274000
   LPDT = 8;                                                   <<02858>>00276000
                                                               <<02858>>00278000
<< PROCESS CONTROL BLOCK - PCB >>                                       00280000
DEFINE                                                                  00282000
           PCB'PTYPE         = A(A(CPCB)+9).(6:3) #,           <<00534>>00284000
           ABPCB             = A(PCBB)  #,                              00286000
           ABCPCB            = A(CPCB)  #;                              00288000
EQUATE                                                                  00290000
           JUNKWAIT          = %20   ;                                  00292000
EQUATE                                                                  00294000
           UCOPLPIN          = 2     ;                                  00296000
<< LOGICAL - PHYSICAL DEVICE TABLE - LPDT >>                            00298000
DEFINE                                                                  00300000
   << PREFIX >>                                                         00302000
           LPDT'HIENTRY      = DB0.(0:8)         #,                     00304000
           LPDT'ENTRYSIZE    = DB0.(8:8)         #,                     00306000
           LPDT'SERVREQS     = DB1               #,                     00308000
   << ENTRY >>                                                          00310000
           LP'DITP           = 0                 #,                     00312000
           LP'VIRTUALF       = 0:1               #,                     00314000
           LP'IDD'ODDF       = 1:1               #,                     00316000
           LP'XDDPF          = 2:14              #,                     00318000
           LP'VIRTDEV        = 1                 #,                     00320000
           LP'SS             = 1).(0:2           #,                     00322000
              DEVAVAIL       = 0                 #,                     00324000
              DEVOWNED       = 1                 #,                     00326000
              DEVSERVICE     = 2                 #,                     00328000
              DEVRESERVED    = 3                 #,                     00330000
           LP'J              = 1).(2:1           #,                     00332000
           LP'A              = 1).(3:1           #,                     00334000
           LP'CTLY           = 1).(4:1           #,                     00336000
           LP'D              = 1).(5:1           #,                     00338000
           LP'I              = 1).(6:1           #,                     00340000
           LP'DI             = 1).(5:2           #,                     00342000
           LP'EOFBITS        = 7:3               #,            <<02858>>00344000
           LP'EOFFIELD       = 1).(LP'EOFBITS    #,                     00346000
           LP'LOGON          = 1).(11:1          #,            <<02858>>00348000
           LP'B              = 1).(10:1          #,                     00350000
           LP'SUBTYPE        = 1).(12:4          #;                     00352000
<< LOGICAL DEVICE TABLE - LDT / DCT >>                                  00354000
DEFINE                                                                  00356000
   << PREFIX >>                                                         00358000
           LDT'HIENTRY       = DB0.(0:8)         #,                     00360000
           LDT'ENTRYSIZE     = DB0.(8:8)         #,                     00362000
           LDT'DCTP          = PDB1              #,                     00364000
           LDT'NUMCLASS      = DB2               #,                     00366000
           LDT'DCTSIZE       = DB3               #,                     00368000
           LDT'STREAMDEV     = DB4.(8:8)         #,                     00370000
   << ENTRY >>                                                          00372000
           LD'USECOUNT       = 0                 #,                     00374000
           LD'MAINPIN        = 1).(0:8           #,                     00376000
           LD'VTABX          = 1).(0:8           #,                     00378000
           LD'CTLYPIN        = 1).(8:8           #,                     00380000
           LD'RWIDTH         = 2).(0:8           #,                     00382000
           LD'FO             = 2).(9:1           #,                     00384000
           LD'DEVTYPE        = 2).(10:6          #,                     00386000
              PRINTER        = 32                #,                     00388000
              CARDPUNCH      = 33                #,                     00390000
              PLOTTER        = 35                #,                     00392000
              READERPUNCH    = 20                #,                     00394000
              CARDREADER     = 8                 #,                     00396000
              MAGTAPE        = 24                #,                     00398000
              TERMINAL       = 16                #,                     00400000
           LD'BASICTYPE      = 2).(10:3          #,                     00402000
              DEVDISC        = 0                 #,                     00404000
              DEVIN          = 1                 #,                     00406000
              DEVCONIO       = 2                 #,                     00408000
              DEVSERIO       = 3                 #,                     00410000
              DEVOUT         = 4                 #,                     00412000
           LD'SP             = 3).(0:2           #,                     00414000
             NOSPOOLER       = 0                 #,                     00416000
             INPUTSPOOLER    = 1                 #,                     00418000
             INPUTSPOOFLE    = 1                 #,                     00420000
             OUTPUTSPOOLER   = 2                 #,                     00422000
             OUTPUTSPOOFLE   = 2                 #,                     00424000
           LD'F              = 3).(2:1           #,                     00426000
           LD'M              = 3).(3:1           #,                     00428000
           LD'R              = 3).(4:1           #,                     00430000
           LD'HTOFF          = 3).(5:2           #,                     00432000
           LD'C              = 3).(7:1           #,                     00434000
           LD'OUTDEV         = 3).(8:8           #,                     00436000
           LD'SQ             = 4).(7:1           #,                     00438000
           LD'XDDHEADX       = 4).(8:8           #,                     00440000
<< DEVICE CLASS TABLE - DCT >>                                          00442000
   << ENTRY >>                                                          00444000
           DC'CLASSNAME      = 0                 #,                     00446000
           DC'CLASSNAME'B    = 0                 #,                     00448000
           DC'CYCLICALP      = 4).(1:7           #,                     00450000
           DC'CLASSTYPE      = 4).(10:6          #,                     00452000
           DC'BASICTYPE      = 4).(10:3          #,                     00454000
           DC'NUMDEVS        = 5).(0:8           #,                     00456000
           DC'FIRSTDEV       = 5).(8:8           #,                     00458000
           DC'FIRSTDEV'B     = 11                #;                     00460000
DEFINE                                                                  00462000
   << PREFIX >>                                                         00464000
           TBL'MAXSIZE       = DB0.(0:8)         #,                     00466000
           TBL'CURSIZE       = DB0.(8:8)         #,                     00468000
              TBLQUANTUM     = 128               #,                     00470000
           TBL'ENTRYSIZE     = DB1.(8:8)         #,                     00472000
           TBL'ENTRYAREAP    = PDB2              #,                     00474000
           << CHAINS DEFINED BY "HEAD" POINTER,                         00476000
              IMMEDIATELY FOLLOWED BY "TAIL" POINTER.                   00478000
              EACH POINTS TO WD 0 OF ENTRY.                             00480000
              NULL CHAIN:  HEAD = 0;  TAIL = @HEAD.                     00482000
              CHAIN TERMINATED BY 0 LINK.                               00484000
           >>                                                           00486000
           TTCHAINEND        = 0                 #,                     00488000
           TT'INUSEWORD      = 0                 #,                     00490000
              FREEENTRY      = 0                 #,                     00492000
           TT'JTYPE          = 1).(0:2           #,                     00494000
              SESSIONTYPE    = 1                 #,                     00496000
              BATCHTYPE      = 2                 #,                     00498000
           TT'JNUM           = 1).(2:14          #,                     00500000
           TT'JOBNUM         = 1                 #,                     00502000
           TT'UNAME          = 2                 #,                     00504000
           TT'ANAME          = 6                 #,                     00506000
           TT'JNAME          = 10                #,                     00508000
           TT'LINKP'W        = 25                #,                     00510000
           TT'LINKP          = TT'LINKP'W        #;                     00512000
<< DEVICE DIRECTORIES: GENERAL - XDD >>                                 00514000
DEFINE                                                                  00516000
   << PREFIX >>                                                         00518000
           XDD'MAXSIZE       = TBL'MAXSIZE       #,                     00520000
           XDD'CURSIZE       = TBL'CURSIZE       #,                     00522000
           XDD'HEADSIZE      = DB1.(0:8)         #,                     00524000
           XDD'SUBSIZE       = TBL'ENTRYSIZE     #,                     00526000
           XDD'SUBAREAP      = TBL'ENTRYAREAP    #,                     00528000
           XDD'ODD           = LDB3.(0:1)        #,                     00530000
           XDD'NEXTDFID      = DB3               #,                     00532000
           XDD'OUTFENCE      = DB4.(12:4)        #,                     00534000
   << HEAD ENTRY >>                                                     00536000
           XD'HLDEV          = 0).(8:8           #,                     00538000
           XD'HHEADP         = 1                 #,                     00540000
              DEVCHAINEND    = TTCHAINEND        #,                     00542000
           XD'HTAILP         = 2                 #,                     00544000
           XD'HREALP         = 3                 #,                     00546000
   << SUBENTRY >>                                                       00548000
           XD'STATE          = 0).(1:2           #,                     00550000
              DFACTIVE       = 0                 #,                     00552000
              DFREADY        = 1                 #,                     00554000
              DFOPENED       = 2                 #,                     00556000
           XD'OUTPRI         = 0).(3:4           #,                     00558000
           XD'C              = 0).(7:1           #,                     00560000
           XD'DEVICE         = 0).(8:8           #,                     00562000
           XD'JTYPE          = TT'JTYPE          #,                     00564000
           XD'JNUM           = TT'JNUM           #,                     00566000
           XD'JOBNUM         = TT'JOBNUM         #,                     00568000
           XD'UNAME          = TT'UNAME          #,                     00570000
           XD'ANAME          = TT'ANAME          #,                     00572000
           XD'JNAME          = TT'JNAME          #,                     00574000
           XD'FNAME          = 14                #,                     00576000
           XD'DEVFILEID      = 18                #,                     00578000
           XD'TEF            = 19).(0:1          #,                     00580000
           XD'DATA           = 19).(1:1          #,                     00582000
           XD'XDDHEADX       = 19).(8:8          #,                     00584000
   << SPOOFLE EXTENSION >>                                              00586000
           XD'SPOOLFILE      = 20                #,                     00588000
           XD'LOGDEV         = 20).(0:8          #,                     00590000
           XD'HIGHADDR       = 20).(8:8          #,                     00592000
           XD'LOWADDR        = 21                #,                     00594000
           XD'VDEV           = 22).(8:8          #,                     00596000
           XD'RECOVERY       = 24                #,                     00598000
           XD'RESTART        = 24).(2:1          #,                     00600000
           XD'FOD            = 24).(3:1          #,                     00602000
           XD'NOSPACE        = 24).(4:1          #,                     00604000
           XD'ABORT          = 24).(5:1          #,            <<SP.SZ>>00606000
           XD'NUMCOPIES      = 24).(8:8          #,                     00608000
           XD'LINKP'W        = TT'LINKP'W        #,                     00610000
           XD'LINKP          = TT'LINKP          #,                     00612000
           XD'NUMLINES0      = 26                #,                     00614000
           XD'NUMLINES1      = 27                #,                     00616000
           XD'TIMEREADY0     = 28                #,                     00618000
           XD'TIMEREADY1     = 29                #;                     00620000
<<INPUT DEVICE DIRECTORY - IDD >>                                       00622000
DEFINE                                                                  00624000
   << PREFIX >>                                                         00626000
           IDD'MAXSIZE       = XDD'MAXSIZE       #,                     00628000
           IDD'CURSIZE       = XDD'CURSIZE       #,                     00630000
           IDD'HEADSIZE      = XDD'HEADSIZE      #,                     00632000
           IDD'SUBSIZE       = XDD'SUBSIZE       #,                     00634000
           IDD'SUBAREAP      = XDD'SUBAREAP      #,                     00636000
           IDD'NEXTDFID      = XDD'NEXTDFID      #,                     00638000
   << HEAD ENTRY >>                                                     00640000
           ID'HLDEV          = XD'HLDEV          #,                     00642000
           ID'HHEADP         = XD'HHEADP         #,                     00644000
           ID'HTAILP         = XD'HTAILP         #,                     00646000
           ID'HREALP         = XD'HREALP         #,                     00648000
   << SUBENTRY >>                                                       00650000
           ID'STATE          = XD'STATE          #,                     00652000
           ID'DEVICE         = XD'DEVICE         #,                     00654000
           ID'JTYPE          = XD'JTYPE          #,                     00656000
           ID'JNUM           = XD'JNUM           #,                     00658000
           ID'JOBNUM         = XD'JOBNUM         #,                     00660000
           ID'UNAME          = XD'UNAME          #,                     00662000
           ID'ANAME          = XD'ANAME          #,                     00664000
           ID'JNAME          = XD'JNAME          #,                     00666000
           ID'FNAME          = XD'FNAME          #,                     00668000
           ID'FNAMEB         = ID'FNAME*2        #,            <<05.EB>>00670000
           ID'DEVFILEID      = XD'DEVFILEID      #,                     00672000
           ID'DATA           = XD'DATA           #,                     00674000
           ID'XDDHEADX       = XD'XDDHEADX       #,                     00676000
   << SPOOFLE EXTENSION >>                                              00678000
           ID'SPOOLFILE      = XD'SPOOLFILE      #,                     00680000
           ID'LOGDEV         = XD'LOGDEV         #,                     00682000
           ID'HIGHADDR       = XD'HIGHADDR       #,                     00684000
           ID'LOWADDR        = XD'LOWADDR        #,                     00686000
           ID'VDEV           = XD'VDEV           #,                     00688000
           ID'RESTART        = XD'RESTART        #,                     00690000
           ID'LINKP          = XD'LINKP          #,                     00692000
           ID'NUMLINES0      = XD'NUMLINES0      #,                     00694000
           ID'NUMLINES1      = XD'NUMLINES1      #,                     00696000
           ID'TIMEREADY0     = XD'TIMEREADY0     #,                     00698000
           ID'TIMEREADY1     = XD'TIMEREADY1     #;                     00700000
<< OUTPUT DEVICE DIRECTORY - ODD >>                                     00702000
DEFINE                                                                  00704000
   << PREFIX >>                                                         00706000
           ODD'MAXSIZE       = XDD'MAXSIZE       #,                     00708000
           ODD'CURSIZE       = XDD'CURSIZE       #,                     00710000
           ODD'HEADSIZE      = XDD'HEADSIZE      #,                     00712000
           ODD'SUBSIZE       = XDD'SUBSIZE       #,                     00714000
           ODD'SUBAREAP      = XDD'SUBAREAP      #,                     00716000
           ODD'ODD           = XDD'ODD           #,                     00718000
           ODD'NEXTDFID      = XDD'NEXTDFID      #,                     00720000
           ODD'OUTFENCE      = XDD'OUTFENCE      #,                     00722000
   << HEAD ENTRY >>                                                     00724000
              ODDCLASSHEADX  = 2                 #,                     00726000
           OD'HLDEV          = XD'HLDEV          #,                     00728000
              DEVCLASSCHAIN  = 0                 #,                     00730000
           OD'HHEADP         = XD'HHEADP         #,                     00732000
           OD'HTAILP         = XD'HTAILP         #,                     00734000
           OD'HREALP         = XD'HREALP         #,                     00736000
   << SUBENTRY >>                                                       00738000
           OD'STATE          = XD'STATE          #,                     00740000
           OD'OUTPRI         = XD'OUTPRI         #,                     00742000
           OD'C              = XD'C              #,                     00744000
           OD'DEVICE         = XD'DEVICE         #,                     00746000
           OD'JTYPE          = XD'JTYPE          #,                     00748000
           OD'JNUM           = XD'JNUM           #,                     00750000
           OD'JOBNUM         = XD'JOBNUM         #,                     00752000
           OD'UNAME          = XD'UNAME          #,                     00754000
           OD'ANAME          = XD'ANAME          #,                     00756000
           OD'JNAME          = XD'JNAME          #,                     00758000
           OD'FNAME          = XD'FNAME          #,                     00760000
           OD'DEVFILEID      = XD'DEVFILEID      #,                     00762000
           OD'TEF            = XD'TEF            #,                     00764000
           OD'XDDHEADX       = XD'XDDHEADX       #,                     00766000
   << SPOOFLE EXTENSION >>                                              00768000
           OD'SPOOLFILE      = XD'SPOOLFILE      #,                     00770000
           OD'LOGDEV         = XD'LOGDEV         #,                     00772000
           OD'HIGHADDR       = XD'HIGHADDR       #,                     00774000
           OD'LOWADDR        = XD'LOWADDR        #,                     00776000
           OD'VDEV           = XD'VDEV           #,                     00778000
           OD'RECOVERY       = XD'RECOVERY       #,                     00780000
           OD'FOD            = XD'FOD            #,                     00782000
           OD'NOSPACE        = XD'NOSPACE        #,                     00784000
           OD'NUMCOPIES      = XD'NUMCOPIES      #,                     00786000
           OD'LINKP          = XD'LINKP          #,                     00788000
           OD'NUMLINES0      = XD'NUMLINES0      #,                     00790000
           OD'NUMLINES1      = XD'NUMLINES1      #,                     00792000
           OD'TIMEREADY0     = XD'TIMEREADY0     #,                     00794000
           OD'TIMEREADY1     = XD'TIMEREADY1     #;                     00796000
<< JOB MASTER TABLE - JMAT >>                                           00798000
DEFINE                                                                  00800000
   << PREFIX >>                                                         00802000
           JMAT'MAXSIZE      = TBL'MAXSIZE       #,                     00804000
           JMAT'CURSIZE      = TBL'CURSIZE       #,                     00806000
           JMAT'ENTRYSIZE    = TBL'ENTRYSIZE     #,                     00808000
           JMAT'ENTRYP       = TBL'ENTRYAREAP    #,                     00810000
           JMAT'SCHEDHEADP   = PDB3              #,                     00812000
              JOBCHAINEND    = 0                 #,                     00814000
           JMAT'SCHEDTAILP   = PDB4              #,                     00816000
           JMAT'NEXTNUMS     = ARRDB5            #,                     00818000
           JMAT'NEXTJOBNUM   = DB5               #,                     00820000
           JMAT'NEXTSNUM     = DB5.(2:14)        #,                     00822000
           JMAT'NEXTSESNUM   = DB6               #,                     00824000
           JMAT'NEXTJNUM     = DB6.(2:14)        #,                     00826000
           JMAT'JOBFENCE     = DB7.(12:4)        #,                     00828000
           JMAT'JLIMITS      = ARRDB8            #,                     00830000
           JMAT'SLIMIT       = DB8               #,                     00832000
           JMAT'JCOUNTS      = ARRDB9            #,                     00834000
           JMAT'SCOUNT       = DB9               #,                     00836000
           JMAT'JLIMIT       = DB10              #,                     00838000
           JMAT'JCOUNT       = DB11              #,                     00840000
           JMAT'WORKAREA     = ARRDB12           #,                     00842000
   << ENTRY >>                                                          00844000
           JM'ENTRYSIZEM1    = 25                #,            <<05.EB>>00846000
           JM'JSTATE         = 0).(0:6           #,                     00848000
              JOBINTRO       = 1                 #,                     00850000
              JOBWAIT        = %40               #,                     00852000
              JOBINIT        = %60               #,                     00854000
              JOBEXEC        = 2                 #,                     00856000
              JOBDONE        = 3                 #,                     00858000
              JOBSUSP        = 4                 #,                     00860000
              JOBERR         = %50               #,                     00862000
           JM'DI             = 0).(6:2           #,            <<05.EB>>00864000
           JM'D              = 0).(6:1           #,                     00866000
           JM'ERRH           = 0).(6:1           #,                     00868000
           JM'I              = 0).(7:1           #,                     00870000
           JM'ERRC           = 0).(7:1           #,                     00872000
           JM'PASSWORDS      = 0).(8:3           #,            <<10.EB>>00874000
           JM'G              = 0).(8:1           #,                     00876000
           JM'QUIET          = 0).(8:1           #,                     00878000
           JM'A              = 0).(9:1           #,                     00880000
           JM'U              = 0).(10:1          #,                     00882000
           JM'C              = 0).(11:1          #,                     00884000
           JM'INPRI          = 0).(12:4          #,                     00886000
              JOBHIPRI       = 15                #,                     00888000
           JM'ERRLIST        = 0).(8:8           #,                     00890000
           JM'JTYPE          = TT'JTYPE          #,                     00892000
           JM'JNUM           = TT'JNUM           #,                     00894000
           JM'JOBNUM         = TT'JOBNUM         #,                     00896000
           JM'ERRPARM        = 1).(0:6           #,                     00898000
           JM'ERRNUM         = 1).(6:10          #,                     00900000
           JM'UNAME          = TT'UNAME          #,                     00902000
           JM'ANAME          = TT'ANAME          #,                     00904000
           JM'JNAME          = TT'JNAME          #,                     00906000
           JM'LGNAME         = 14                #,                     00908000
           JM'UNAMEB         = JM'UNAME*2        #,            <<05.EB>>00910000
           JM'ANAMEB         = JM'ANAME*2        #,            <<05.EB>>00912000
           JM'JNAMEB         = JM'JNAME*2        #,            <<05.EB>>00914000
           JM'LGNAMEB        = JM'LGNAME*2       #,            <<05.EB>>00916000
           JM'JIN            = 18).(0:8          #,                     00918000
           JM'JLIST          = 18).(8:8          #,                     00920000
           JM'CALENDAR       = 19                #,            <<05.EB>>00922000
           JM'CLOCK          = 10                #,            <<05.EB>>00924000
           JM'MAINPIN        = 22).(0:8          #,                     00926000
           JM'XPRI           = 22).(8:8          #,                     00928000
           JM'TIMELIMIT      = 23                #,                     00930000
           JM'COPIESW        = 24                #,            <<05.EB>>00932000
           JM'SPOOLED        = 24).(0:1          #,                     00934000
           JM'RESTART        = 24).(1:1          #,                     00936000
           JM'SEQUENCED      = 24).(2:1          #,            <<1.RAO>>00938000
           JM'CILOG          = 24).(3:2          #,            <<00.04>>00940000
           JM'OUTPRI         = 24).(5:4          #,                     00942000
           JM'NUMCOPIES      = 24).(9:7          #,                     00944000
           JM'ORIGJIN        = 25).(0:8          #,                     00946000
           JM'ORIGJLIST      = 25).(8:8          #,                     00948000
           JM'SCHEDLINKP'W   = TT'LINKP'W        #,                     00950000
           JM'SCHEDLINKP     = TT'LINKP          #;                     00952000
INTEGER                                                                 00954000
           STAT      = Q-1    ;                                         00956000
DEFINE                                                                  00958000
           CC        = STAT.(6:2)    #,                                 00960000
           CCE       = 2             #,                                 00962000
           CCG       = 0             #,                                 00964000
           CCL       = 1             #;                                 00966000
                                                               <<05.EB>>00968000
DEFINE                                                         <<05.EB>>00970000
   DEF'MOVEFROMDSEG   =                                        <<05.EB>>00972000
      MOVEFROMDSEG(TARGET,DSTN,OFFSET,COUNT);                  <<05.EB>>00974000
         VALUE TARGET,DSTN,OFFSET,COUNT;                       <<05.EB>>00976000
         LOGICAL TARGET,DSTN,OFFSET,COUNT;                     <<05.EB>>00978000
      BEGIN                                                    <<05.EB>>00980000
         X :          = TOS; << SAVE RETURN ADDRESS >>         <<05.EB>>00982000
         ASSEMBLE(MFDS 0);                                     <<05.EB>>00984000
         TOS :        = X; << RESTORE RETURN ADDRESS >>        <<05.EB>>00986000
      END #;                                                   <<05.EB>>00988000
<< DIRECTORY >>                                                <<02.EB>>00990000
EQUATE                                                         <<05.EB>>00992000
                                                               <<02.EB>>00994000
   NAMESIZE        = 4,                                        <<02.EB>>00996000
                                                               <<02.EB>>00998000
<< ACCOUNT ENTRY >>                                            <<02.EB>>01000000
   ANAME           = 0,                  <<NAME>>              <<02.EB>>01002000
   AGIPNTR         = ANAME+NAMESIZE,     <<GROUP INDEX PNTR>>  <<02.EB>>01004000
   AUIPNTR         = AGIPNTR+1,          <<USER INDEX PNTR>>   <<02.EB>>01006000
   ACAP            = AUIPNTR+1,          <<CAPABILITY>>        <<02.EB>>01008000
   ACAPD           = ACAP/2,                                   <<05.EB>>01010000
   ALATTR          = ACAP+2,                                   <<02.EB>>01012000
   APASS           = ALATTR+2,                                 <<02.EB>>01014000
   APASSB          = APASS*2,                                  <<05.EB>>01016000
   ADFSCOUNT       = APASS+NAMESIZE,     <<DISC FILE SPACE>>   <<02.EB>>01018000
   ADFSCOUNTD      = ADFSCOUNT /2,                             <<02.EB>>01020000
   ADFSLIMIT       = ADFSCOUNT+2,                              <<02.EB>>01022000
   ADFSLIMITD      = ADFSLIMIT /2,                             <<02.EB>>01024000
   ACPUCOUNT       = ADFSLIMIT+2,        <<CPU TIME>>          <<02.EB>>01026000
   ACPUCOUNTD      = ACPUCOUNT /2,                             <<02.EB>>01028000
   ACPULIMIT       = ACPUCOUNT+2,                              <<02.EB>>01030000
   ACPULIMITD      = ACPULIMIT /2,                             <<02.EB>>01032000
   ACONTIMECOUNT   = ACPULIMIT+2,        <<CONNECT TIME>>      <<02.EB>>01034000
   ACONTIMECOUNTD  = ACONTIMECOUNT /2,                         <<02.EB>>01036000
   ACONTIMELIMIT   = ACONTIMECOUNT+2,                          <<02.EB>>01038000
   ACONTIMELIMITD  = ACONTIMELIMIT /2,                         <<02.EB>>01040000
   ASECW           = ACONTIMELIMIT+2,                          <<02.EB>>01042000
   APURGEFLAGW     = ASECW,                                    <<02.EB>>01044000
   AMAXJOBW        = ASECW+1,            <<MAX. JOB PRIORITY >><<02.EB>>01046000
   AVSLIPNTR       = AMAXJOBW+1,         <<VS LIST INDEX>>     <<02.EB>>01048000
   ASPARE          = AVSLIPNTR+1,                              <<02.EB>>01050000
   ASIZE           = ASPARE +1,                                <<02.EB>>01052000
                                                               <<02.EB>>01054000
<<GROUP ENTRY>>                                                <<02.EB>>01056000
   GNAME           = 0,                  <<NAME>>              <<02.EB>>01058000
   GFIPNTR         = GNAME+NAMESIZE,     <<FILE INDEX >>       <<02.EB>>01060000
   GPASS           = GFIPNTR+1,          <<PASSWORD>>          <<02.EB>>01062000
   GPASSB          = GPASS*2,                                  <<05.EB>>01064000
   GDFSCOUNT       = GPASS+NAMESIZE,     <<DISC FILE SPACE>>   <<02.EB>>01066000
   GDFSLIMIT       = GDFSCOUNT+2,                              <<02.EB>>01068000
   GCPUCOUNT       = GDFSLIMIT+2,        <<CPU TIME>>          <<02.EB>>01070000
   GCPUCOUNTD      = GCPUCOUNT/2,                              <<02.EB>>01072000
   GCPULIMIT       = GCPUCOUNT+2,                              <<02.EB>>01074000
   GCPULIMITD      = GCPULIMIT/2,                              <<02.EB>>01076000
   GCONTIMECOUNT   = GCPULIMIT+2,                              <<02.EB>>01078000
   GCONTIMECOUNTD  = GCONTIMECOUNT/2,                          <<02.EB>>01080000
   GCONTIMELIMIT   = GCONTIMECOUNT+2,                          <<02.EB>>01082000
   GCONTIMELIMITD  = GCONTIMELIMIT/2,                          <<02.EB>>01084000
   GSEC            = GCONTIMELIMIT+2,                          <<02.EB>>01086000
   GPURGEFLAGW     = GSEC,                                     <<02.EB>>01088000
   GCAP            = GSEC +2,                                  <<02.EB>>01090000
   GLINKAGE        = GCAP+1,                                   <<02.EB>>01092000
   GVSDIPNTR       = GLINKAGE+1,         <<VS DEF INDEX PNTR>> <<02.EB>>01094000
   GHVSNAME        = GVSDIPNTR+1,        <<HOME VS NAME>>      <<02.EB>>01096000
   GHVSANAME       = GHVSNAME,           << "   "  ACCT NAME>> <<02.EB>>01098000
   GHVSGNAME       = GHVSANAME+NAMESIZE, << "   "  GRP  NAME>> <<02.EB>>01100000
   GHVSVSNAME      = GHVSGNAME+NAMESIZE, << "   "  VS   NAME>> <<02.EB>>01102000
   GSAVEFIPNTR     = GHVSVSNAME+NAMESIZE,<<SAVES GFIPNTR>>     <<02.EB>>01104000
   GMOUNTREFCNTR   = GSAVEFIPNTR+1,      <<MOUNT USE COUNTER>> <<02.EB>>01106000
   GSPARE          = GMOUNTREFCNTR+1,                          <<02.EB>>01108000
   GSIZE           = GSPARE+1,                                 <<02.EB>>01110000
                                                               <<02.EB>>01112000
<<USER ENTRY>>                                                 <<02.EB>>01114000
   UNAME           = 0,                  <<NAME>>              <<02.EB>>01116000
   UCAP            = UNAME+NAMESIZE,     <<CAPABILITY>>        <<02.EB>>01118000
   ULATTR          = UCAP+2,                                   <<02.EB>>01120000
   UPASS           = ULATTR+2,                                 <<02.EB>>01122000
   UPASSB          = UPASS*2,                                  <<05.EB>>01124000
   UHGROUP         = UPASS+NAMESIZE,     <<HOME GROUP>>        <<02.EB>>01126000
   UHGROUPB        = UHGROUP*2,                                <<00802>>01128000
   ULOGCOUNT       = UHGROUP+NAMESIZE,   <<# USERS LOGGED ON>> <<02.EB>>01130000
   UMAXJOB         = ULOGCOUNT+1,                              <<02.EB>>01132000
   UPURGEFLAGW     = UMAXJOB,                                  <<02.EB>>01134000
   USPARE          = UMAXJOB +1,                               <<02.EB>>01136000
   USIZE           = USPARE +1;                                <<02.EB>>01138000
INTEGER PROCEDURE NEXTPARM(STRING,PTR,DELIMPTR);               <<05.EB>>01140000
   BYTE ARRAY STRING;                                          <<05.EB>>01142000
   BYTE POINTER PTR,DELIMPTR;                                  <<05.EB>>01144000
   OPTION VARIABLE,EXTERNAL;                                   <<05.EB>>01146000
                                                               <<05.EB>>01148000
INTEGER PROCEDURE NEXTPARMD(DELIMS,STRING,PTR,DELIMPTR);       <<05.EB>>01150000
   BYTE ARRAY DELIMS,STRING;                                   <<05.EB>>01152000
   BYTE POINTER PTR,DELIMPTR;                                  <<05.EB>>01154000
   OPTION VARIABLE,EXTERNAL;                                   <<05.EB>>01156000
                                                               <<05.EB>>01158000
PROCEDURE FMTDATE(CALENDAR',CLOCK',STRING);                    <<05.EB>>01160000
   VALUE CALENDAR',CLOCK';                                     <<05.EB>>01162000
   LOGICAL CALENDAR';                                          <<05.EB>>01164000
   DOUBLE CLOCK';                                              <<05.EB>>01166000
   BYTE ARRAY STRING;                                          <<05.EB>>01168000
   OPTION EXTERNAL;                                            <<05.EB>>01170000
                                                               <<05.EB>>01172000
PROCEDURE AWAKE(PCBPT,N,WAITF);                                         01174000
   VALUE PCBPT,N,WAITF;                                                 01176000
   INTEGER PCBPT,N,WAITF;                                               01178000
   OPTION EXTERNAL;                                                     01180000
                                                                        01182000
DOUBLE PROCEDURE DIRECFIND (TYPE, LINKAGE'INDEXP, AN,          <<38.PV>>01184000
                            GN, FN, RET);                      <<38.PV>>01186000
   VALUE TYPE, LINKAGE'INDEXP;                                 <<38.PV>>01188000
   INTEGER TYPE;                                               <<38.PV>>01190000
   DOUBLE  LINKAGE'INDEXP;                                     <<38.PV>>01192000
   ARRAY AN, GN, FN, RET;                                               01194000
   OPTION EXTERNAL;                                                     01196000
                                                                        01198000
LOGICAL PROCEDURE EXCHANGEDB(DSTX);                                     01200000
   VALUE DSTX;                                                          01202000
   LOGICAL DSTX;                                                        01204000
   OPTION EXTERNAL;                                                     01206000
                                                                        01208000
INTEGER PROCEDURE GETDEVINFO(DEVICE,DEVINFO);                           01210000
   BYTE ARRAY DEVICE;                                                   01212000
   INTEGER ARRAY DEVINFO;                                               01214000
   OPTION EXTERNAL;                                                     01216000
                                                               <<02858>>01218000
INTEGER PROCEDURE GET'DSDEVICE(LDEV);                          <<02858>>01220000
   VALUE LDEV; INTEGER LDEV;                                   <<02858>>01222000
   OPTION EXTERNAL;                                            <<02858>>01224000
                                                                        01226000
PROCEDURE WRITEDSEG(D);                                                 01228000
   VALUE   D;                                                           01230000
   INTEGER D;                                                           01232000
   OPTION EXTERNAL;                                                     01234000
                                                                        01236000
INTEGER PROCEDURE ALTDSEGSIZE (D,S);                           <<00.04>>01238000
   VALUE   D,S;                                                <<00.04>>01240000
   INTEGER D,S;                                                <<00.04>>01242000
   OPTION  EXTERNAL;                                           <<00.04>>01244000
                                                               <<00.04>>01246000
LOGICAL PROCEDURE GETSIR(SIRNUM);                                       01248000
   VALUE SIRNUM;                                                        01250000
   INTEGER SIRNUM;                                                      01252000
   OPTION EXTERNAL;                                                     01254000
                                                                        01256000
PROCEDURE APLTRANSLATEIN (M,L,T);                              <<00.04>>01258000
   VALUE   L,T;                                                <<00.04>>01260000
   INTEGER L,T;                                                <<00.04>>01262000
   BYTE ARRAY M;                                               <<00.04>>01264000
   OPTION EXTERNAL;                                            <<00.04>>01266000
                                                               <<00.04>>01268000
INTEGER PROCEDURE GENMSG(SETNO,MSGNO,MASK,B,C,D,E,F,           <<0U.EB>>01270000
      DEST,REPLY,BUFF,DST,IOTYPE);                             <<0U.EB>>01272000
   VALUE SETNO,MSGNO,MASK,B,C,D,E,F,DEST,REPLY,BUFF,           <<0U.EB>>01274000
      DST,IOTYPE;                                              <<0U.EB>>01276000
   LOGICAL SETNO,MSGNO,MASK,B,C,D,E,F,DEST,REPLY,BUFF,         <<0U.EB>>01278000
      DST,IOTYPE;                                              <<0U.EB>>01280000
   OPTION VARIABLE,EXTERNAL;                                   <<0U.EB>>01282000
                                                                        01284000
PROCEDURE RELSIR(SIRNUM,ALREADY);                                       01286000
   VALUE SIRNUM,ALREADY;                                                01288000
   INTEGER SIRNUM;                                                      01290000
   LOGICAL ALREADY;                                                     01292000
   OPTION EXTERNAL;                                                     01294000
                                                                        01296000
LOGICAL PROCEDURE SYSPROC (LPIN);                                       01298000
   VALUE   LPIN;                                                        01300000
   LOGICAL LPIN;                                                        01302000
   OPTION EXTERNAL;                                                     01304000
                                                                        01306000
DOUBLE PROCEDURE SUBQUEUE (T, P);                                       01308000
   VALUE T, P;                                                          01310000
   INTEGER T, P;                                                        01312000
   OPTION EXTERNAL;                                                     01314000
                                                                        01316000
DOUBLE PROCEDURE ATTACHIO (P1,P2,P3,P4,P5,P6,P7,P8,P9);                 01318000
   VALUE   P1,P2,P3,P4,P5,P6,P7,P8,P9;                                  01320000
   INTEGER P1,P2,P3,P4,P5,P6,P7,P8,P9;                                  01322000
   OPTION EXTERNAL;                                                     01324000
                                                                        01326000
LOGICAL PROCEDURE ALLOCENTRY;                                           01328000
   OPTION EXTERNAL;                                                     01330000
                                                                        01332000
INTEGER PROCEDURE SPUTXDD (ODD, DEV, VDDENTRY, XDDSUBP);                01334000
   VALUE ODD, DEV;                                                      01336000
   LOGICAL ODD;                                                         01338000
   INTEGER DEV;                                                         01340000
   INTEGER ARRAY VDDENTRY;                                              01342000
   INTEGER POINTER XDDSUBP;                                             01344000
   OPTION EXTERNAL;                                                     01346000
                                                                        01348000
PROCEDURE DELINKENTRY (CHAINP, JMATP);                                  01350000
   VALUE JMATP;                                                         01352000
   INTEGER POINTER CHAINP, JMATP;                                       01354000
   OPTION EXTERNAL;                                                     01356000
                                                                        01358000
PROCEDURE DEALLOCENTRY (JMATP);                                         01360000
   VALUE JMATP;                                                         01362000
   INTEGER POINTER JMATP;                                               01364000
   OPTION EXTERNAL;                                                     01366000
                                                                        01368000
LOGICAL PROCEDURE CALENDAR;                                             01370000
   OPTION EXTERNAL;                                                     01372000
                                                                        01374000
DOUBLE PROCEDURE CLOCK;                                                 01376000
   OPTION EXTERNAL;                                                     01378000
                                                                        01380000
INTRINSIC DBINARY,BINARY,SEARCH,MYCOMMAND,TERMINATE,FCONTROL,  <<08.EB>>01382000
   CLOCK,CALENDAR,PRINT,READ,DEBUG,GETPRIORITY;                <<05.EB>>01384000
                                                               <<02.EB>>01386000
INTRINSIC SETJCW;                                              <<00243>>01388000
                                                               <<00243>>01390000
                                                               <<02.EB>>01392000
PROCEDURE DATE'LINE(STRING);                                   <<02.EB>>01394000
   BYTE ARRAY STRING; OPTION EXTERNAL;                         <<02.EB>>01396000
                                                               <<02.EB>>01398000
INTEGER PROCEDURE DIRECLOGON(MASK,JMAT,T1,T2,AENTRY,UENTRY,    <<02.EB>>01400000
      GENTRY);                                                 <<02.EB>>01402000
   VALUE MASK,T1,T2; INTEGER MASK; DOUBLE T1,T2;               <<02.EB>>01404000
   ARRAY JMAT,AENTRY,UENTRY,GENTRY;                            <<02.EB>>01406000
   OPTION EXTERNAL;                                            <<02.EB>>01408000
                                                               <<02.EB>>01410000
PROCEDURE ERRORON; OPTION EXTERNAL;                            <<02.EB>>01412000
                                                               <<02.EB>>01414000
PROCEDURE HELP;  OPTION EXTERNAL;                              <<01130>>01416000
                                                               <<01130>>01418000
INTEGER PROCEDURE FJOPEN(FILEDESIGNATOR,FOPTIONS,AOPTIONS,     <<02.EB>>01420000
      RECSIZE,DEVICE, FORMMSG, RECMODE, BLOCKFACTOR,           <<02.EB>>01422000
      NUMBUFFERS,FILESIZE,NUMEXTENTS, INITALLOC, FILECODE);    <<02.EB>>01424000
   VALUE FOPTIONS, AOPTIONS, RECSIZE, RECMODE, BLOCKFACTOR,    <<02.EB>>01426000
      NUMBUFFERS,FILESIZE, NUMEXTENTS, INITALLOC, FILECODE;    <<02.EB>>01428000
   BYTE ARRAY FILEDESIGNATOR,  DEVICE, FORMMSG;                <<02.EB>>01430000
   LOGICAL FOPTIONS, AOPTIONS;                                 <<02.EB>>01432000
   INTEGER RECSIZE, RECMODE, BLOCKFACTOR, NUMBUFFERS,          <<02.EB>>01434000
      NUMEXTENTS,INITALLOC, FILECODE;                          <<02.EB>>01436000
   DOUBLE FILESIZE;                                            <<02.EB>>01438000
   OPTION VARIABLE, EXTERNAL;                                  <<02.EB>>01440000
                                                               <<02.EB>>01442000
INTEGER PROCEDURE FORMNAME(TYPE,TARGET,BA1,BA2,BA3,BA4);       <<02.EB>>01444000
   VALUE TYPE; INTEGER TYPE;                                   <<02.EB>>01446000
   BYTE ARRAY TARGET,BA1,BA2,BA3,BA4;                          <<02.EB>>01448000
   OPTION EXTERNAL;                                            <<02.EB>>01450000
                                                               <<02.EB>>01452000
PROCEDURE LOG; OPTION EXTERNAL;                                <<02.EB>>01454000
                                                               <<02.EB>>01456000
PROCEDURE SETCRITICAL;                                         <<04555>>01458000
OPTION EXTERNAL;                                               <<04555>>01460000
                                                               <<04555>>01462000
PROCEDURE RESETCRITICAL(PARM);                                 <<02.EB>>01464000
   VALUE PARM; LOGICAL PARM;                                   <<02.EB>>01466000
   OPTION EXTERNAL;                                            <<02.EB>>01468000
                                                               <<02.EB>>01470000
PROCEDURE SUDDENDEATH(ERRORNUMBER);                            <<02.EB>>01472000
   VALUE ERRORNUMBER;                                          <<02.EB>>01474000
   INTEGER ERRORNUMBER;                                        <<02.EB>>01476000
   OPTION EXTERNAL;                                            <<02.EB>>01478000
                                                               <<02.EB>>01480000
                                                                        01482000
LOGICAL PROCEDURE VALIDSPOOLEE(DEVTYPE,OUT);                   <<SP1SZ>>01484000
   VALUE DEVTYPE,OUT;                                          <<SP1SZ>>01486000
   INTEGER DEVTYPE;                                            <<SP1SZ>>01488000
   LOGICAL OUT;                                                <<SP1SZ>>01490000
   OPTION EXTERNAL;                                            <<SP1SZ>>01492000
                                                               <<SP1SZ>>01494000
PROCEDURE CIERR(ERRNUM,ERRADR,PARMASK,PARM);                   <<00534>>01496000
   VALUE ERRNUM,PARMASK,PARM;                                  <<00534>>01498000
   INTEGER ERRNUM,PARMASK,PARM;                                <<00534>>01500000
   BYTE ARRAY ERRADR;                                          <<00534>>01502000
   OPTION PRIVILEGED,UNCALLABLE,VARIABLE,EXTERNAL;             <<00534>>01504000
                                                               <<00534>>01506000
PROCEDURE UPSHIFT(STRING); BYTE ARRAY STRING;                  <<09.EB>>01508000
   OPTION FORWARD;                                             <<09.EB>>01510000
                                                               <<09.EB>>01512000
                                                                        01514000
PROCEDURE SCHEDULEJOB (JMATP);                                          01516000
   VALUE JMATP;                                                         01518000
   INTEGER POINTER JMATP;                                               01520000
   OPTION UNCALLABLE, PRIVILEGED;                                       01522000
<< LINKS INTRO <JMATP> INTO SCHEDULING QUEUE;                           01524000
   CHANGES INTRO STATE TO WAITING; AND AWAKES UCOP.  >>                 01526000
BEGIN                                                                   01528000
   ENTRY SCHEDULEJOB';                                                  01530000
                                                                        01532000
   INTEGER           INCOMINGDST,                                       01534000
                     SAVESIR;                                           01536000
   INTEGER POINTER   PREP,             <<PNTR 2 PRECEDING ENTRY>>       01538000
                     NEXTP,            <<PNTR 2 NEXT ENTRY>>            01540000
                     SUBRP;            <<FOR SUBROUTINE>>               01542000
   INTEGER           TARGETVALUE;      <<SCHED. VALUE OF <JMATP>.>>     01544000
   LOGICAL           FLAG   := FALSE;  <<TRUE => MAIN ENTRY>>           01546000
   INTEGER           << KLUGE TO GET  @(@JMAT'SCHEDHEADP)  >>           01548000
                     HEADCELL    = JMAT'SCHEDHEADP;                     01550000
<< >>                                                                   01552000
                                                                        01554000
                                                                        01556000
INTEGER SUBROUTINE JOBVALUE (TESTP);                                    01558000
   VALUE TESTP;                                                         01560000
   INTEGER POINTER TESTP;                                               01562000
<< FORMS "SCHEDULING VALUE" FOR JOB <TESTP>:                            01564000
      [2/ENTRYTYPE, 4/INPRI].                                           01566000
   WHERE ENTRYTYPE IS 0/2 FOR BATCH/SESSION.  >>                        01568000
BEGIN                                                                   01570000
   @SUBRP := @TESTP;                                                    01572000
   TOS := 0;    <<FORM # ON TOS>>                                       01574000
   IF SUBRP (JM'JTYPE) = SESSIONTYPE THEN TOS := TOS +2;                01576000
   TOS := TOS &LSL(4);                                                  01578000
   TOS := TOS LOR LOGICAL (SUBRP (JM'INPRI));                           01580000
   S3 := TOS;                                                           01582000
   END;    <<JOBVALUE>>                                                 01584000
                                                                        01586000
                                                                        01588000
   INCOMINGDST := EXCHANGEDB (JMATDST);                                 01590000
   SAVESIR := GETSIR (JMATSIR);                                         01592000
   FLAG := TRUE;                                                        01594000
                                                                        01596000
SCHEDULEJOB':                                                           01598000
   TARGETVALUE := JOBVALUE (JMATP);                                     01600000
   << POSITION <PREP> TO PRECEDING ENTRY, BY SCANNING DOWN QUEUE UNTIL A01602000
      JOB OF LOWER SCHEDULING VALUE IS DETECTED. >>                     01604000
   @PREP := @HEADCELL;                                                  01606000
   @NEXTP := PREP;                                                      01608000
   WHILE (@NEXTP <> JOBCHAINEND)                                        01610000
      AND (JOBVALUE (NEXTP) >= TARGETVALUE) DO                          01612000
         BEGIN                                                          01614000
         @PREP := @NEXTP +JM'SCHEDLINKP'W;                              01616000
         @NEXTP := PREP;                                                01618000
         END;                                                           01620000
   << <PREP> NOW POSITIONED TO LINK WD WHICH IS TO                      01622000
      PRECEDE THIIIS ENTRY >>                                           01624000
   IF (JMATP (JM'SCHEDLINKP) := PREP) = JOBCHAINEND THEN                01626000
      @JMAT'SCHEDTAILP := @JMATP;                                       01628000
   PREP := @JMATP;                                                      01630000
                                                                        01632000
   << CHANGE INTRO STATE TO WAIT >>                                     01634000
   JMATP (JM'JSTATE) := JOBWAIT;                                        01636000
   IF JMATP (JM'INPRI) <= JMAT'JOBFENCE                                 01638000
         AND JMATP (JM'JTYPE) = BATCHTYPE THEN                          01640000
      <<TELL OP THAT DEFERRED JOB JUST INRODUCED >>                     01642000
      BEGIN                                                             01644000
      TOS := JMATP (JM'JIN);                                            01646000
      EXCHANGEDB (0);                                                   01648000
      GENMSG(1,242,%10000,S0,,,,,0);                           <<0U.EB>>01650000
      EXCHANGEDB (JMATDST);                                             01652000
      DEL;                                                              01654000
      END;                                                              01656000
   IF JMATP(JM'JTYPE) = 2 THEN << IF JOB, WRITE OUT >>         <<05.EB>>01658000
      WRITEDSEG(JMATDST);      << JMAT              >>         <<05.EB>>01660000
   << SYNCH AND AWAKE UCOP >>                                           01662000
   DISABLE;                                                             01664000
   ABSYS'JOBSYNC.(JOBREADY'F) := TRUE;                                  01666000
   ENABLE;                                                              01668000
   AWAKE (SYSPROC(UCOPLPIN),JUNKWAIT,0);                                01670000
                                                                        01672000
   IF FLAG THEN                                                         01674000
      BEGIN                                                             01676000
      RELSIR (JMATSIR, SAVESIR);                                        01678000
      EXCHANGEDB (INCOMINGDST);                                         01680000
      END;                                                              01682000
                                                                        01684000
   END;    <<SCHEDULEJOB>>                                              01686000
                                                                        01688000
                                                               <<00.04>>01690000
                                                               <<00.04>>01692000
LOGICAL PROCEDURE CILOGTABLE(CODE,JMATX,CNTWORD,COMMAND);      <<00.04>>01694000
   VALUE   CODE,JMATX;                                         <<00.04>>01696000
   INTEGER CODE,JMATX,CNTWORD;                                 <<00.04>>01698000
   INTEGER ARRAY COMMAND;                                      <<00.04>>01700000
    OPTION  PRIVILEGED,UNCALLABLE;                             <<00.04>>01702000
   <<  ACCESS THE CILOG DATA SEGMENT WITH ACTION           >>  <<00.04>>01704000
   <<    CODE = 0 GET ENTRY AND PUT                        >>  <<00.04>>01706000
   <<         = 1 GET ENTRY DATA                           >>  <<00.04>>01708000
   <<         = 2 DELETE ENTRY                             >>  <<00.04>>01710000
   <<  RETURNS                                             >>  <<00.04>>01712000
   <<    TRUE IF OK                                        >>  <<00.04>>01714000
   <<    FALSE IF ERROR                                    >>  <<00.04>>01716000
   <<  NOTE : DB MUST BE AT STACK - NO BOUNDS CHECKS -     >>  <<00.04>>01718000
   <<         - ENTRY SIZE MUSTY BE 128 BY INITIAL.        >>  <<00.04>>01720000
   BEGIN                                                       <<00.04>>01722000
   LOGICAL OK :=  FALSE;                                       <<00.04>>01724000
   INTEGER CNTWRD,                                             <<00.04>>01726000
           OLDSIR,                                             <<00.04>>01728000
           OLDDST,                                             <<00.04>>01730000
           KEY,                                                <<00.04>>01732000
           INDEX,                                              <<00.04>>01734000
           SIZE;                                               <<00.04>>01736000
   INTEGER POINTER DLCOM,                                      <<00.04>>01738000
                   P;                                          <<00.04>>01740000
   DEFINE MAX   = DB0.(0:8)#,                                  <<00.04>>01742000
          CUR   = DB0.(8:8)#,                                  <<00.04>>01744000
          ESIZE = DB1      #; <<=128>>                         <<00.04>>01746000
   << >>                                                       <<00.04>>01748000
   PUSH(DL);                                                   <<00.04>>01750000
   @DLCOM := -TOS+@COMMAND;                                    <<00.04>>01752000
   IF CODE = 0 THEN CNTWRD := CNTWORD;                         <<00.04>>01754000
   IF (OLDDST := EXCHANGEDB(CILOGDST)) <> 0 THEN GOTO ERR;     <<00.04>>01756000
   OLDSIR := GETSIR(CILOGSIR);                                 <<00.04>>01758000
   INDEX := 1;                                                 <<00.04>>01760000
   @P := ESIZE;                                                <<00.04>>01762000
   KEY :=  IF CODE=0 THEN 0 ELSE JMATX;                        <<00.04>>01764000
   WHILE P <> KEY DO                                           <<00.04>>01766000
      BEGIN                                                    <<00.04>>01768000
      INDEX := INDEX+1;                                        <<00.04>>01770000
      @P := @P+ESIZE;                                          <<00.04>>01772000
      IF INDEX >= CUR THEN                                     <<00.04>>01774000
         IF CODE <> 0 THEN GOTO ERROR                          <<00.04>>01776000
         ELSE                                                  <<00.04>>01778000
            IF INDEX >= MAX THEN GOTO ERROR                    <<00.04>>01780000
            ELSE                                               <<00.04>>01782000
               BEGIN                                           <<00.04>>01784000
               IF (SIZE:=MAX-CUR) > 4 THEN SIZE := 4;          <<00.04>>01786000
               CUR := CUR+SIZE;                                <<00.04>>01788000
               SIZE := SIZE*ESIZE;                             <<00.04>>01790000
               ALTDSEGSIZE(CILOGDST,SIZE);                     <<00.04>>01792000
               IF <> THEN GOTO ERROR;                          <<00.04>>01794000
               P := 0;                                         <<00.04>>01796000
               MOVE P(1) := P(0),(SIZE);                       <<00.04>>01798000
               END;                                            <<00.04>>01800000
      END;                                                     <<00.04>>01802000
   CASE CODE OF                                                <<00.04>>01804000
      BEGIN                                                    <<00.04>>01806000
      BEGIN                                                    <<00.04>>01808000
         P := JMATX;                                           <<00.04>>01810000
         P(1) := CNTWRD;                                       <<00.04>>01812000
         TOS := @P(2);                                         <<00.04>>01814000
         TOS :=  @DLCOM;                                       <<00.04>>01816000
         TOS := (CNTWRD+1)&LSL(2)&LSR(3);                      <<00.04>>01818000
         ASSEMBLE(MVLB);                                       <<00.04>>01820000
      END;                                                     <<00.04>>01822000
      BEGIN                                                    <<00.04>>01824000
         CNTWRD := P(1);                                       <<00.04>>01826000
         TOS := @DLCOM;                                        <<00.04>>01828000
         TOS := @P(2);                                         <<00.04>>01830000
         TOS := (CNTWRD+1)&LSL(2)&LSR(3);                      <<00.04>>01832000
         ASSEMBLE(MVBL);                                       <<00.04>>01834000
      END;                                                     <<00.04>>01836000
      P := 0;                                                  <<00.04>>01838000
      END;                                                     <<00.04>>01840000
   OK := TRUE;                                                 <<00.04>>01842000
ERROR:                                                         <<00.04>>01844000
    RELSIR(CILOGSIR,OLDSIR);                                   <<00.04>>01846000
ERR:                                                           <<00.04>>01848000
   EXCHANGEDB(OLDDST);                                         <<00.04>>01850000
   IF OK AND CODE=1 THEN CNTWORD := CNTWRD;                    <<00.04>>01852000
   CILOGTABLE := OK;                                           <<00.04>>01854000
   END;                                                        <<00.04>>01856000
                                                               <<00.04>>01858000
LOGICAL PROCEDURE SPECIAL'TERMINAL(LDEV);                      <<02858>>01860000
   VALUE LDEV;  INTEGER LDEV;                                  <<02858>>01862000
OPTION PRIVILEGED, UNCALLABLE;                                 <<04555>>01864000
                                                               <<02858>>01866000
COMMENT                                                        <<02858>>01868000
   In order to detect a terminal disconnect during the logon   <<02858>>01870000
sequence, the LOGON bit was defined in the LPDT.  DEVREC/PROGEN<<02858>>01872000
set this bit when the logon sequence starts.  If the bit is off<<02858>>01874000
when INITJSMP polls it, the terminal has disconnected.         <<02858>>01876000
   This procedure determines whether a terminal (device type   <<02858>>01878000
16) supports the use of this bit.  For now, IOTERM0/HIOTERM0   <<02858>>01880000
do.  MULTIPOINT and DS pseudo-terminals do not.                <<02858>>01882000
                                                               <<02858>>01884000
INPUT:                                                         <<02858>>01886000
   LDEV - the device in question.  The caller should already   <<02858>>01888000
          have determined that it is a terminal (type 16).     <<02858>>01890000
OUTPUT:                                                        <<02858>>01892000
   Procedure return - TRUE, if this device supports the use of <<02858>>01894000
                      the LOGON bit.                           <<02858>>01896000
                                                               <<02858>>01898000
;   << end of comment >>                                       <<02858>>01900000
                                                               <<02858>>01902000
BEGIN                                                          <<02858>>01904000
INTEGER                                                        <<02858>>01906000
   DITPTR,                 << From LPDT entry >>               <<02858>>01908000
   DS'RESULT;              << Return from GET'DSDEVICE >>      <<02858>>01910000
LOGICAL                                                        <<02858>>01912000
   RESULT = SPECIAL'TERMINAL;   << Procedure return >>         <<02858>>01914000
                                                               <<02858>>01916000
                                                               <<02858>>01918000
RESULT := FALSE;           << Initialize return >>             <<02858>>01920000
                                                               <<02858>>01922000
DS'RESULT := GET'DSDEVICE(LDEV);                               <<02858>>01924000
                                                               <<02858>>01926000
<< GET'DSDEVICE returns -2 if there are no DS devices >>       <<02858>>01928000
<< configured.  It returns 0 if the specified device  >>       <<02858>>01930000
<< is not a DS-related device. >>                              <<02858>>01932000
                                                               <<02858>>01934000
IF (DS'RESULT = -2) OR (DS'RESULT = 0) THEN                    <<02858>>01936000
   BEGIN                                                       <<02858>>01938000
                                                               <<02858>>01940000
<< At this point, device is either a MULTIPOINT terminal    >> <<02858>>01942000
<< or an IOTERM0-type terminal.  The two types of terminals >> <<02858>>01944000
<< can be distinguished by examining the terminal bit in    >> <<02858>>01946000
<< DIT.  If it's on, the device is an IOTERM0-type device.  >> <<02858>>01948000
                                                               <<02858>>01950000
   DITPTR := LPDT(LDEV*LPDTSIZE);                              <<02858>>01952000
   IF DITPTR < 0 THEN RETURN;   << Virtual device >>           <<02858>>01954000
                                                               <<02858>>01956000
   RESULT := SYSGLOB(DITPTR) < 0;                              <<02858>>01958000
   END;                                                        <<02858>>01960000
END;      << of SPECIAL'TERMINAL >>                            <<02858>>01962000
                                                               <<02858>>01964000
                                                                        01966000
                                                                        01968000
LOGICAL PROCEDURE PUTJMAT (ENTRYP, JMATP);                              01970000
   ARRAY ENTRYP;                                                        01972000
   INTEGER POINTER JMATP;                                               01974000
   OPTION PRIVILEGED, UNCALLABLE;                                       01976000
<< PUTS THE FULLY-FORMATTED INTRO JMAT ENTRY <ENTRYP>                   01978000
   INTO THE JMAT.  >>                                                   01980000
BEGIN                                                                   01982000
   INTEGER POINTER   ENTRYPDL,         <<DL-REL ADDR OF ENTRYP>>        01984000
                     JP;               <<ALLOC'D JMAT ENTRY PNTR>>      01986000
   INTEGER           SAVESIR;                                           01988000
<< >>                                                                   01990000
   PUSH (DL);                                                           01992000
   @ENTRYPDL := -TOS +@ENTRYP;                                          01994000
   EXCHANGEDB (JMATDST);                                                01996000
   SAVESIR := GETSIR (JMATSIR);                                         01998000
   @JP := ALLOCENTRY;    <<GET SPACE>>                                  02000000
   IF = THEN                                                            02002000
      BEGIN    <<GOT SPACE>>                                            02004000
      TOS := @JP;    <<MOVE ENTRY INTO JMAT>>                           02006000
      TOS := @ENTRYPDL;                                                 02008000
      TOS := JMAT'ENTRYSIZE;                                            02010000
      ASSEMBLE (MVLB);                                                  02012000
         << JOB/SESSION: GET AND SET JOBNUM>>                           02014000
      XREG := 1 -JP (JM'I);                                             02016000
      TOS := JMAT'NEXTNUMS (XREG);                                      02018000
      TOS := S0 &CSL(2) +4;    <<NEXT NUM>>                             02020000
      IF 0 <= S0 <= 3 THEN TOS := TOS +4;    <<WRAP AROUND TO 1>>       02022000
      XREG := 1 -JP (JM'I);                                             02024000
      JMAT'NEXTNUMS (XREG) := TOS &CSR(2);                              02026000
      JP (JM'JOBNUM) := TOS;                                            02028000
      TOS := TRUE;    <<SIGNAL OK>>                                     02030000
      END                                                               02032000
   ELSE                                                                 02034000
      TOS := FALSE;                                                     02036000
   PUTJMAT := TOS;                                                      02038000
   TOS := JP (JM'JOBNUM);                                               02040000
   RELSIR (JMATSIR, SAVESIR);                                           02042000
   EXCHANGEDB (0);                                                      02044000
   ENTRYP (JM'JOBNUM) := TOS;                                           02046000
   @JMATP := @JP;                                                       02048000
   END;    <<PUTJMAT>>                                                  02050000
$TITLE " INITJSMP  - JOB INITIATION "                          <<05.EB>>02052000
PROCEDURE INITJSMP(EXPCODE);                                   <<02.EB>>02054000
   INTEGER EXPCODE;                                            <<11.EB>>02056000
   OPTION UNCALLABLE;                                          <<11.EB>>02058000
COMMENT                                                        <<02.EB>>02060000
SETS UP EVERYTHING AFTER FOR JOB/SESSION MAIN PROCESS AFTER    <<02.EB>>02062000
UCOP FINISHES.                                                 <<02.EB>>02064000
ON ENTRY:                                                      <<02.EB>>02066000
   - JMAT ENTRY IS SET UP.                                     <<02.EB>>02068000
   - JIT IS UNITIALIZED, BUT CONTAINS COMMUNICATION INFO.      <<02.EB>>02070000
   - JDT IS UNITIALIZED.                                       <<02.EB>>02072000
THEN:                                                          <<02.EB>>02074000
   - JMAT ENTRY SET TO RUNNING.                                <<02.EB>>02076000
   - JOB TYPE & JOB NUMBER PLACED IN PCBX.                     <<02.EB>>02078000
   - JOB CUTOFF TABLE SET, INDEX PLACED IN PCBX.               <<02.EB>>02080000
   - DIRECLOGON CALLED TO UPDATE USE COUNT & GET ENTRIES.      <<02.EB>>02082000
   - CAPABILITIES PLACED IN PCBX.                              <<02.EB>>02084000
   - JIT INITIALIZED.                                          <<02.EB>>02086000
   - JDT INITIALIZED.                                          <<02.EB>>02088000
   - SESSION TIMEOUT TURNED OFF.                               <<02.EB>>02090000
   - OPEN $STDIN & $STDLIST.                                   <<02.EB>>02092000
   - PASSWORDS CHECKED.                                        <<02.EB>>02094000
   - ACCOUNT & GRUP TIME LIMITS CHECKED.                       <<02.EB>>02096000
   - LOGON MSG SENT TO CONSOLE.                                <<02.EB>>02098000
   - STANDAND FORMS ARE REQUESTED IF NEEDED.                   <<02.EB>>02100000
   - LOG CALLED.                                               <<02.EB>>02102000
   - LOGON MSG PRINTED FOR USER.                               <<02.EB>>02104000
;                                                              <<02.EB>>02106000
BEGIN                                                          <<02.EB>>02108000
                                                               <<02.EB>>02110000
EQUATE                                                         <<02.EB>>02112000
                                                               <<02.EB>>02114000
<< TABLE INFO >>                                               <<02.EB>>02116000
                                                               <<02.EB>>02118000
   JITSIZE    = 61,                                            <<02.EB>>02120000
   JMATSIZE   = 26,                                            <<02.EB>>02122000
   JDTSIZE    = 17*128-4,  << 17 SECTORS LESS LINKS >>         <<00285>>02124000
   JMATSIR    = 15,                                            <<02.EB>>02126000
   JCUTSIR    = 14,                                            <<02.EB>>02128000
   JCUTSIZE   = 3,                                             <<02.EB>>02130000
   JMATDST    = 25,                                            <<02.EB>>02132000
   NUMJDTPTRS = 6,                                             <<U.RAO>>02134000
   JDTPTR     = NUMJDTPTRS+18,                                 <<U.RAO>>02136000
                                                               <<02.EB>>02138000
<< JMAT ENTRIES >>                                             <<02.EB>>02140000
                                                               <<02.EB>>02142000
   TYPJOBNUM   =  1,                                           <<02.EB>>02144000
   JUNAME      =  2,                                           <<02.EB>>02146000
   JANAME      =  6,                                           <<02.EB>>02148000
   JNAME       = 10,                                           <<02.EB>>02150000
   JGNAME      = 14,                                           <<02.EB>>02152000
   JINLIST     = 18,                                           <<02.EB>>02154000
   XPRI        = 22,                                           <<02.EB>>02156000
   TLIMIT      = 23,                                           <<02.EB>>02158000
   JMISC       = 24,                                           <<02.EB>>02160000
   ORIGJINLIST = 25,                                           <<02.EB>>02162000
                                                               <<02.EB>>02164000
   UNAMEB      =  4,                                           <<02.EB>>02166000
   ANAMEB      = 12,                                           <<02.EB>>02168000
   JNAMEB      = 20,                                           <<02.EB>>02170000
   GNAMEB      = 28,                                           <<02.EB>>02172000
                                                               <<02.EB>>02174000
                                                               <<02.EB>>02176000
<< GENMSG MESSAGES >>                                          <<02.EB>>02178000
                                                               <<02.EB>>02180000
   SYSET          = 1,                                         <<02.EB>>02182000
   CISET          = 2,                                         <<05.EB>>02184000
   CPASSFAIL      = 5,                                         <<05.EB>>02186000
   CACPUFAIL      = 6,                                         <<01112>>02188000
   CACONNFAIL     = 7,                                         <<01112>>02190000
   CBAFAIL        = 9,                                         <<00603>>02192000
   CIAFAIL        = 10,                                        <<00603>>02194000
   CGCPUFAIL      = 11,                                        <<01112>>02196000
   CGCONNFAIL     = 12,                                        <<01112>>02198000
   CSTDINFAIL      = 40,                                       <<03785>>02200000
   CSTDLISTFAIL    = 41,                                       <<03785>>02202000
   FORMREQD       = 243,                                       <<02.EB>>02204000
   LOGONHEADJ     = 42,                                        <<05.EB>>02206000
   LOGONSNO       = 34,                                        <<05.EB>>02208000
   LOGONJNO       = 43,                                        <<05.EB>>02210000
   LOGONTPRI      = 50,                                        <<05.EB>>02212000
   LOGONTHIPRI    = 51,                                        <<05.EB>>02214000
   LOGONPRI       = 44,                                        <<05.EB>>02216000
   LOGONHIPRI     = 52,                                        <<05.EB>>02218000
   LOGONDATELEVEL = 35,                                        <<05.EB>>02220000
   PASSMSG        = 52, << 53=GROUP,54=ACCT,55=USER>>          <<05.EB>>02222000
   PASSWDFAIL     = 1441,                                      <<05.EB>>02224000
   ACCOUTCPU      = 1442,                                      <<01112>>02226000
   W'ACCOUTCPU    = 1443,                                      <<01112>>02228000
   GRPOUTCPU      = 1445,                                      <<01112>>02230000
   W'GRPOUTCPU    = 1446,                                      <<01112>>02232000
   ACCOUTCONN     = 1491,                                      <<01112>>02234000
   W'ACCOUTCONN   = 1492,                                      <<01112>>02236000
   GRPOUTCONN     = 1493,                                      <<01112>>02238000
   W'GRPOUTCONN   = 1494,                                      <<01112>>02240000
   CLOGONMSG      = 33,                                        <<05.EB>>02242000
   NOIA           = 1431,                                      <<05.EB>>02244000
   NOBA           = 1432,                                      <<05.EB>>02246000
   NOIA'ACCT      = 1447,                                      <<01053>>02248000
   NOBA'ACCT      = 1448,                                      <<01053>>02250000
   NOACCT         = 1435, << 1436 - 1439 >>                    <<05.EB>>02252000
   <<NOGROUP      = 1436, >>                                   <<05.EB>>02254000
   <<NOACCT'      = 1437, >>                                   <<05.EB>>02256000
   <<NOUSER       = 1438, >>                                   <<05.EB>>02258000
   <<NOHOMEG      = 1439, >>                                   <<05.EB>>02260000
   CONSLOGONFAIL  = 60,   << 61 - 72 >>                        <<01112>>02262000
   <<CPASSFAIL    = 65,   >>                                   <<05.EB>>02264000
   <<CACPUFAIL    = 66,   >>                                   <<01112>>02266000
   <<CACONNFAIL   = 67,   >>                                   <<01112>>02268000
   <<CBAFAIL      = 69,   >>                                   <<01053>>02270000
   <<CIAFAIL      = 70,   >>                                   <<01053>>02272000
   <<CGCPUFAIL    = 71,   >>                                   <<01112>>02274000
   <<CGCONNFAIL   = 72,   >>                                   <<01112>>02276000
                                                               <<02.EB>>02278000
<< PCBX STUFF >>                                               <<02.EB>>02280000
                                                               <<02.EB>>02282000
   PXGATTRIBUTE   = 2,                                         <<02.EB>>02284000
   PXGJMAT        = 3,                                         <<02.EB>>02286000
   PXGJDT         = 5,                                         <<02.EB>>02288000
   PXGJIT         = 6,                                         <<02.EB>>02290000
   PXGJCUT        = 7,                                         <<02.EB>>02292000
                                                               <<02.EB>>02294000
   PXFRESOURCE    = 5,                                         <<02.EB>>02296000
   PXFJNUM        = 19,                                        <<02.EB>>02298000
   PXFUDC         = 22,                                        <<04.EB>>02300000
                                                               <<02.EB>>02302000
<< MISC >>                                                     <<02.EB>>02304000
                                                               <<02.EB>>02306000
   CPCB      = 4,                                              <<02.EB>>02308000
   LOGONFAIL = 7,                                              <<02.EB>>02310000
   TIMEDOUT  = 12,                                             <<01130>>02312000
   ECHOON    = 8,                                              <<01130>>02314000
   ECHOOFF   = 9,                                              <<01130>>02316000
   UCOPCOMMSIZE = 5,                                           <<02.EB>>02318000
   VERSION      = %1116,                                       <<02.EB>>02320000
   UPDATELEVEL  = %1114,                                       <<02.EB>>02322000
   FIXLEVEL     = %1115;                                       <<02.EB>>02324000
                                                               <<02.EB>>02326000
DEFINE                                                         <<02.EB>>02328000
   PXGSTDIN    = 3).(8:8 #,                                    <<01130>>02330000
   PXGSTDLIST  = 4).(8:8 #,                                    <<01130>>02332000
   OUTPRIBITS = 5:4#,                                          <<02332>>02334000
   JPRI         = 12:4 #,                                      <<02.EB>>02336000
   DUPLICITIVE  =  6:1 #,                                      <<02.EB>>02338000
   SETXPXFIXED   = PUSH(DL);                                   <<02.EB>>02340000
   X := TOS -PS0(-2)#,                                         <<02.EB>>02342000
   SETXPXGLOB   = PUSH(DL);                                    <<02.EB>>02344000
   X := TOS -PS0(-1)#,                                         <<02.EB>>02346000
   UDCEXIST       = (1:1) #; <<IN DIR. UENTRY>>                <<04.EB>>02348000
                                                               <<02.EB>>02350000
INTEGER POINTER                                                <<02.EB>>02352000
   PS0  = S-0,                                                 <<02.EB>>02354000
   PXGLOB,                                                     <<02.EB>>02356000
   PXFIX,                                                      <<02.EB>>02358000
   JCUT =  11,                                                 <<02.EB>>02360000
   PCB  =   3;                                                 <<02.EB>>02362000
                                                               <<02.EB>>02364000
INTEGER                                                        <<02.EB>>02366000
   JMATINDEX,                                                  <<02.EB>>02368000
   TEMP,                                                       <<02.EB>>02370000
   TEMP1,                                                      <<00220>>02372000
   ECHOSTATE = TEMP1,                                          <<00220>>02374000
   TIME = TEMP,                                                <<02.EB>>02376000
   SIRFLAG,                                                    <<02.EB>>02378000
   DUMMY = TEMP,                                               <<02.EB>>02380000
   DIRFAIL,                                                    <<05.EB>>02382000
   INDEV,   << Input device from JMAT entry >>                 <<02858>>02384000
   PASSFAILCNT,                                                <<04213>>02386000
   JOBNUM,                                                     <<02.EB>>02388000
   S0 = S-0,                                                   <<02.EB>>02390000
   S1 = S-1,                                                   <<02.EB>>02392000
   S2 = S-2,                                                   <<02.EB>>02394000
   X = X;                                                      <<02.EB>>02396000
                                                               <<02.EB>>02398000
DEFINE                                                         <<38.PV>>02400000
    PVF = 0:1  #,                                              <<38.PV>>02402000
    MVTABXF = 8:8 #,                                           <<38.PV>>02404000
    PV'AND'MOUNTED = GENTRY (GLINKAGE).(PVF) = 1 AND           <<38.PV>>02406000
                     GENTRY (X).(MVTABXF) <> 0 #;              <<38.PV>>02408000
                                                               <<38.PV>>02410000
DEFINE                                                         <<0313>> 02412000
   SYSMGR  = UENTRY(UCAP).(0:1) #,                             <<0313>> 02414000
   ACCTMGR = UENTRY(UCAP).(1:1) #;                             <<0313>> 02416000
LOGICAL                                                        <<02.EB>>02418000
   LOST'TERMINAL,  << For special disconnect processing. >>    <<02858>>02420000
   PASSFAIL,                                                   <<01130>>02422000
   PASSWORDOK,                                                 <<04213>>02424000
   JOB;                                                        <<02.EB>>02426000
                                                               <<02.EB>>02428000
ARRAY JMATENTRY(0:JMATSIZE-1);                                 <<02.EB>>02430000
BYTE ARRAY JMATENTRYB(*) = JMATENTRY;                          <<02.EB>>02432000
DOUBLE ARRAY JMATENTRYD(*) = JMATENTRY;                        <<05.EB>>02434000
                                                               <<02.EB>>02436000
ARRAY AENTRY(0:ASIZE-1); DOUBLE ARRAY AENTRYD(*) = AENTRY;     <<02.EB>>02438000
ARRAY UENTRY(0:USIZE-1); DOUBLE ARRAY UENTRYD(*) = UENTRY;     <<02.EB>>02440000
ARRAY GENTRY(0:GSIZE-1); DOUBLE ARRAY GENTRYD(*) = GENTRY(1);  <<02.EB>>02442000
                                                               <<02.EB>>02444000
   << UCOP COMMUNICATION AREA - INITIALLY IN JIT >>            <<02.EB>>02446000
ARRAY UCOPCOMM(0:UCOPCOMMSIZE-1) = Q;                          <<02.EB>>02448000
INTEGER POINTER JINXDDEP   = UCOPCOMM;                         <<02.EB>>02450000
INTEGER         JINDEVTYPE = UCOPCOMM +1;                      <<02.EB>>02452000
INTEGER POINTER JLISTXDDEP = UCOPCOMM +2;                      <<02.EB>>02454000
LOGICAL         STDFORMS   = UCOPCOMM +3;                      <<02.EB>>02456000
                                                               <<02.EB>>02458000
ARRAY JIT(0:JITSIZE-1);                                        <<02.EB>>02460000
ARRAY JDT(0:JDTPTR+7);                                         <<05.RO>>02462000
                                                               <<U.RAO>>02464000
BYTE ARRAY LOGONQ(0:1);                                        <<02.EB>>02466000
BYTE ARRAY JOBID(0:35);                                        <<02.EB>>02468000
BYTE ARRAY DATEBUF(0:27);                                      <<02.EB>>02470000
                                                               <<12.KM>>02472000
ARRAY PARTNO(0:4);                                             <<12.KM>>02474000
BYTE ARRAY BPARTNO(*)= PARTNO;                                 <<12.KM>>02476000
DEFINE VERPART=  PARTNO #,                                     <<12.KM>>02478000
       UPDPART=  PARTNO(1) #,                                  <<12.KM>>02480000
       FIXPART=  PARTNO(3) #,                                  <<12.KM>>02482000
       BVERPART= BPARTNO #,                                    <<12.KM>>02484000
       BUPDPART= BPARTNO(2) #,                                 <<12.KM>>02486000
       BFIXPART= BPARTNO(6) #;                                 <<12.KM>>02488000
                                                               <<12.KM>>02490000
ARRAY BUFF'(0:8); BYTE ARRAY BUFF(*) = BUFF';                  <<02.EB>>02492000
                                                               <<02.EB>>02494000
SUBROUTINE MOVEFROMDSEG(TARGET,DSTN,OFFSET,COUNT);             <<02.EB>>02496000
   VALUE TARGET,DSTN,OFFSET,COUNT;                             <<02.EB>>02498000
   LOGICAL TARGET,DSTN,OFFSET,COUNT;                           <<02.EB>>02500000
BEGIN                                                          <<02.EB>>02502000
   X := TOS; << SAVE RETURN ADDRESS >>                         <<02.EB>>02504000
   ASSEMBLE(MFDS 0);                                           <<02.EB>>02506000
   TOS := X; << RESTORE RETURN ADDRESS >>                      <<02.EB>>02508000
END;                                                           <<02.EB>>02510000
                                                               <<02.EB>>02512000
SUBROUTINE MOVETODSEG(DSTN,OFFSET,SOURCE,COUNT);               <<02.EB>>02514000
   VALUE DSTN,OFFSET,SOURCE,COUNT;                             <<02.EB>>02516000
   LOGICAL DSTN,OFFSET,SOURCE,COUNT;                           <<02.EB>>02518000
BEGIN                                                          <<02.EB>>02520000
   X := TOS;                                                   <<02.EB>>02522000
   ASSEMBLE(MTDS 0);                                           <<02.EB>>02524000
   TOS := X;                                                   <<02.EB>>02526000
END;                                                           <<02.EB>>02528000
                                                               <<02.EB>>02530000
                                                               <<02.EB>>02532000
SUBROUTINE SETJCUT;                                            <<02.EB>>02534000
BEGIN                                                          <<02.EB>>02536000
                                                               <<02.EB>>02538000
TOS := JMATENTRY(TLIMIT);                                      <<02.EB>>02540000
IF > THEN                                                      <<02.EB>>02542000
BEGIN << CPU LIMITED, SET JOB CUTOFF TABLE >>                  <<02.EB>>02544000
   SIRFLAG := GETSIR(JCUTSIR);                                 <<02.EB>>02546000
   TOS := JCUT(0);                                             <<02.EB>>02548000
   TOS := S0/JCUTSIZE; << JCUT INDEX, FOR PCBX >>              <<02.EB>>02550000
   JCUT(0) := JCUT(S1); << UPDATE FREE POINTER >>              <<02.EB>>02552000
   ASSEMBLE(CAB); << GET LIMIT >>                              <<02.EB>>02554000
   JCUT(S2) := TOS; << SAVE LIMIT >>                           <<02.EB>>02556000
   JCUT(X:=X+1) := 0;                                          <<02.EB>>02558000
   JCUT(X:=X+1) := 0; << SET TIME COUNT TO 0 >>                <<02.EB>>02560000
   ASSEMBLE(XCH,DEL); << CLEAR STACK >>                        <<02.EB>>02562000
   PXGLOB(PXGJCUT) := TOS &LSL(8);                             <<02.EB>>02564000
   RELSIR(JCUTSIR,SIRFLAG);                                    <<02.EB>>02566000
END                                                            <<02.EB>>02568000
ELSE DEL; << REMOVE LIMIT FROM TOS >>                          <<02.EB>>02570000
                                                               <<02.EB>>02572000
END; << SETJCUT >>                                             <<02.EB>>02574000
                                                               <<05.EB>>02576000
                                                               <<05.EB>>02578000
                   << ******************** >>                  <<05.EB>>02580000
                   << *  TELLOP          * >>                  <<05.EB>>02582000
                   << ******************** >>                  <<05.EB>>02584000
                                                               <<05.EB>>02586000
                                                               <<05.EB>>02588000
SUBROUTINE TELLOP(MSGNO);                                      <<02.EB>>02590000
   VALUE MSGNO; INTEGER MSGNO;                                 <<02.EB>>02592000
BEGIN                                                          <<02.EB>>02594000
   FORMNAME(3,JOBID,JMATENTRYB(JNAMEB),JMATENTRYB(UNAMEB),     <<02.EB>>02596000
      JMATENTRYB(ANAMEB),JMATENTRYB(GNAMEB));                  <<02.EB>>02598000
   GENMSG(SYSET,MSGNO,%01000,@JOBID,JMATENTRY(ORIGJINLIST)     <<02.EB>>02600000
      .(0:8),,,,0); << TELL OP. LOGON >>                       <<02.EB>>02602000
END; << TELLOP >>                                              <<02.EB>>02604000
                                                               <<05.EB>>02606000
                                                               <<05.EB>>02608000
                   << ******************** >>                  <<05.EB>>02610000
                   << *    TIMINATE      * >>                  <<05.EB>>02612000
                   << ******************** >>                  <<05.EB>>02614000
                                                               <<05.EB>>02616000
                                                               <<05.EB>>02618000
SUBROUTINE TIMINATE(MESSNO,FAILNO);                            <<05.EB>>02620000
   VALUE MESSNO,FAILNO; INTEGER MESSNO,FAILNO;                 <<05.EB>>02622000
COMMENT - CALLED TO PREVENT LOGON MSG ON $STDLIST              <<05.EB>>02624000
          & ALSO PRINTS REASON AT CONSOLE. CALLS:              <<05.EB>>02626000
   1 - 4  DIRECTORY FAILS,                                     <<01112>>02628000
       5  PASSWORD FAIL,                                       <<05.EB>>02630000
       6  ACCOUNT OUT OF CPU TIME,                             <<01112>>02632000
       7  ACCOUNT OUT OF CONNECT TIME,                         <<01112>>02634000
       9  NO BA,                                               <<00603>>02636000
       10 NO IA.                                               <<00603>>02638000
       11 GROUP OUT OF CPU TIME,                               <<01112>>02640000
       12 GROUP OUT OF CONNECT TIME.                           <<01112>>02642000
                                                               <<01130>>02644000
   IF THE LOGON TIMEOUT EXPIRES, EXPCODE IS SET TO             <<01130>>02646000
   12 + DIRFAIL BY THE MAIN BODY OF INITJSMP.                  <<01130>>02648000
;                                                              <<05.EB>>02650000
BEGIN                                                          <<05.EB>>02652000
   IF FAILNO < CSTDINFAIL THEN GENMSG( CISET, MESSNO );        <<03785>>02654000
   TELLOP(CONSLOGONFAIL +FAILNO);                              <<05.EB>>02656000
   IF FAILNO > 4 THEN   << Tell EXPIRE reason >>               <<03785>>02658000
   BEGIN                <<    for logoff.     >>               <<03785>>02660000
      IF FAILNO >= CSTDINFAIL                                  <<03785>>02662000
         THEN EXPCODE := FAILNO                                <<03785>>02664000
         ELSE EXPCODE := LOGONFAIL;                            <<03785>>02666000
   END                                                         <<03785>>02668000
   ELSE       EXPCODE := LOGONFAIL + FAILNO;                   <<03785>>02670000
   SETJCW(LOGICAL(EXPCODE) LOR %100000); <<ABORT BIT>>         <<00243>>02672000
   EXPCODE.(0:8) := DIRFAIL;  << For job clean up. >>          <<04200>>02674000
   TERMINATE; << SHALL NEVER RETURN >>                         <<05.EB>>02676000
   HELP       << FOR LINKING PURPOSES >>                       <<01130>>02678000
END; << TIMINATE >>                                            <<05.EB>>02680000
                                                               <<02.EB>>02682000
                                                               <<05.EB>>02684000
                                                               <<05.EB>>02686000
                   << ******************** >>                  <<05.EB>>02688000
                   << *  GETCHECKDIR     * >>                  <<05.EB>>02690000
                   << ******************** >>                  <<05.EB>>02692000
                                                               <<05.EB>>02694000
                                                               <<05.EB>>02696000
SUBROUTINE GETCHECKDIR;                                        <<02.EB>>02698000
BEGIN <<GET A,U,G DIR. ENTRIES, CHECK CAP & MAXPRI, SET PCBX >><<02.EB>>02700000
                                                               <<02.EB>>02702000
UENTRY(UMAXJOB) := 0; << IF DIRECLOGON FAILS, THEN        >>   <<06.EB>>02704000
                      << GETPRIORITY WON'T BE CALLED      >>   <<06.EB>>02706000
DIRFAIL := DIRECLOGON(0,JMATENTRY,0D,0D,AENTRY,UENTRY,GENTRY); <<05.EB>>02708000
IF DIRFAIL <> 0 THEN RETURN;                                   <<05.EB>>02710000
                                                               <<05.EB>>02712000
   << FOUND ACCT, USER, GROUP DIRECTORY ENTRYIES>>             <<02.EB>>02714000
                                                               <<05.EB>>02716000
IF JMATENTRY(JGNAME) = "  " THEN                               <<05.EB>>02718000
BEGIN << GET HOME GROUP >>                                     <<05.EB>>02720000
   MOVE JMATENTRY(JGNAME) := UENTRY(UHGROUP),(4);              <<05.EB>>02722000
END;                                                           <<05.EB>>02724000
IF UENTRY(UCAP) LOR AENTRY(ACAP) <> AENTRY(ACAP) OR            <<02.EB>>02726000
   UENTRY(UCAP +1) LOR AENTRY(ACAP +1) <> AENTRY(ACAP +1) THEN <<02.EB>>02728000
BEGIN << UCAP IS LESS THAN ACAP >>                             <<02.EB>>02730000
   UENTRY(UCAP) := UENTRY(UCAP) LAND AENTRY(ACAP);             <<02.EB>>02732000
   UENTRY(UCAP +1) := UENTRY(UCAP +1) LAND AENTRY(ACAP +1);    <<02.EB>>02734000
END;                                                           <<02.EB>>02736000
PXGLOB(PXGATTRIBUTE) := UENTRY(UCAP);                          <<02.EB>>02738000
PXFIX(PXFRESOURCE) := UENTRY(UCAP +1);                         <<02.EB>>02740000
PXFIX(PXFUDC).(0:1) := UENTRY(UMAXJOB).UDCEXIST;               <<04.EB>>02742000
PXFIX(PXFUDC).(7:1):=AENTRY(AMAXJOBW).UDCEXIST;                <<00416>>02744000
IF INTEGER(UENTRY(UMAXJOB).(8:8)) < INTEGER(AENTRY             <<05.EB>>02746000
   (AMAXJOBW).(8:8)) THEN << USER MAXJOBPRI > ACCT >>          <<02.EB>>02748000
   UENTRY(UMAXJOB).(8:8) := AENTRY(AMAXJOBW).(8:8);            <<02.EB>>02750000
                                                               <<02.EB>>02752000
END; << GETCHECKDIR >>                                         <<02.EB>>02754000
COMMENT     - JMATENTRY(0)                                     <<02.EB>>02756000
    0          5  6  7  8  9 10 11 12      15                  <<02.EB>>02758000
   *******************************************                 <<02.EB>>02760000
   !  JOB STATE ! D! I! G! A! U! C!  INPRI   !                 <<02.EB>>02762000
   *******************************************                 <<02.EB>>02764000
                                                               <<02.EB>>02766000
   D - DUPLICATIVE                                             <<02.EB>>02768000
   I - INTERACTIVE                                             <<02.EB>>02770000
   G - = 1 GROUP PASS NOT CHECKED                              <<02.EB>>02772000
   A - = 1 ACCT  PASS NOT CHECKED                              <<02.EB>>02774000
   U - = 1 USER  PASS NOT CHECKED                              <<02.EB>>02776000
   C - DEVICE CLASS SPECIFIED                                  <<02.EB>>02778000
;                                                              <<02.EB>>02780000
                                                               <<02.EB>>02782000
LOGICAL SUBROUTINE CHECKPASS(PASSWD,LEVEL);                    <<02.EB>>02784000
   VALUE LEVEL; INTEGER LEVEL;                                 <<02.EB>>02786000
   ARRAY PASSWD;                                               <<02.EB>>02788000
BEGIN <<1=G,2=A,3=U >>                                         <<02.EB>>02790000
                                                               <<02.EB>>02792000
PASSFAILCNT := 0;                                              <<04213>>02794000
PASSWORDOK := TRUE;                                            <<04213>>02796000
X := LEVEL;                                                    <<02.EB>>02798000
TOS := JMATENTRY;                                              <<02.EB>>02800000
ASSEMBLE(TBC 7,X; DEL); << CHECK IF OMITTED ON :HELLO >>       <<02.EB>>02802000
IF <> AND PASSWD <> "  " THEN                                  <<02.EB>>02804000
BEGIN << PASSWORD OMITTED BUT REQUIRED >>                      <<02.EB>>02806000
             <<************************************************<<04213>>02808000
PASSPROMPT:  << IF BAD PASSWORD THEN PROMPT MAXIMUM THREE TIMES<<04213>>02810000
             <<************************************************<<04213>>02812000
   IF JOB THEN PASSWORDOK := FALSE                             <<04213>>02814000
   ELSE                                                        <<08.EB>>02816000
   BEGIN                                                       <<08.EB>>02818000
      << TURN OFF ECHO AND SAVE OLD STATE >>                   <<01130>>02820000
      TOS := ATTACHIO(PXGLOB(PXGSTDLIST),0,0,0,ECHOOFF,        <<01130>>02822000
                      0,0,0,1);                                <<01130>>02824000
      ECHOSTATE := TOS;                                        <<01130>>02826000
      DEL;                                                     <<01130>>02828000
      << PROMPT FOR APPROPRIATE PASSWORD >>                    <<01130>>02830000
      GENMSG(SYSET,PASSMSG +LEVEL,,,,,,,PXGLOB(PXGSTDLIST),,,, <<01130>>02832000
             %100000);                                         <<01130>>02834000
      BUFF' := "  ";                                           <<08.EB>>02836000
      MOVE BUFF'(1) := BUFF',(7);                              <<08.EB>>02838000
      BUFF(16) := 0;                                           <<08.EB>>02840000
      << READ PASSWORD FROM TERMINAL >>                        <<01130>>02842000
      TOS := ATTACHIO(PXGLOB(PXGSTDIN),0,0,@BUFF',             <<01130>>02844000
                      0,-16,0,0,1);                            <<02858>>02846000
      DEL;                                                     <<01130>>02848000
      << CHECK FOR SUCCESSFUL COMPLETION >>                    <<01130>>02850000
      IF TOS.(13:3) <> 1 THEN                                  <<01130>>02852000
        PASSWORDOK := FALSE                                    <<04213>>02854000
      ELSE                                                     <<04213>>02856000
      BEGIN                    << READ SUCCESSFUL >>           <<01130>>02858000
      ATTACHIO(PXGLOB(PXGSTDLIST),0,0,0,1,                     <<01130>>02860000
               0,0,0,1);       << GIVE CR/LF >>                <<02858>>02862000
      SCAN BUFF WHILE " ",1;                                   <<08.EB>>02864000
      ASSEMBLE(DUP,DUP);                                       <<08.EB>>02866000
      MOVE * := * WHILE ANS; << UPSHIFT >>                     <<08.EB>>02868000
      TEMP := TOS; << CLEAN STACK SO PARM REF. WORKS>>         <<08.EB>>02870000
      TOS := @PASSWD &LSL(1);                                  <<08.EB>>02872000
      TOS := TEMP;                                             <<08.EB>>02874000
      IF * <> *,(8) THEN                                       <<04213>>02876000
         BEGIN                                                 <<04213>>02878000
         PASSWORDOK := FALSE;                                  <<04213>>02880000
         PASSFAILCNT := PASSFAILCNT + 1;                       <<04213>>02882000
         END                                                   <<04213>>02884000
      ELSE                                                     <<04213>>02886000
         PASSWORDOK := TRUE;                                   <<04213>>02888000
<< CHECK TO SEE IF THERE IS A NEED TO LOOP BACK TO >>          <<04213>>02890000
<< PROMPT FOR  THE PASSWORD AGAIN.                 >>          <<04213>>02892000
                                                               <<04213>>02894000
      IF  (PASSFAILCNT >0) AND (PASSFAILCNT < 3) AND           <<04213>>02896000
         (NOT PASSWORDOK) THEN                                 <<04213>>02898000
         BEGIN                                                 <<04213>>02900000
         TELLOP(CONSLOGONFAIL + CPASSFAIL);                    <<04213>>02902000
         IF ECHOSTATE = 0 THEN                                 <<04213>>02904000
            ATTACHIO(PXGLOB(PXGSTDLIST),0,0,0,ECHOON,0,0,0,1); <<04213>>02906000
         GOTO PASSPROMPT;                                      <<04213>>02908000
         END                                                   <<04213>>02910000
      ELSE                                                     <<04213>>02912000
         IF ECHOSTATE = 0 THEN                                 <<04213>>02914000
         ATTACHIO(PXGLOB(PXGSTDLIST),0,0,0,ECHOON,0,0,0,1);    <<04213>>02916000
      IF ECHOSTATE = 0 THEN                                    <<01130>>02918000
        ATTACHIO(PXGLOB(PXGSTDLIST),0,0,0,ECHOON,0,0,0,1)      <<01130>>02920000
      END                                                      <<01130>>02922000
   END;                                                        <<08.EB>>02924000
END;                                                           <<02.EB>>02926000
                                                               <<02.EB>>02928000
CHECKPASS := PASSWORDOK; << SET RETURN VALUE TO TRUE OR FALSE ><<04213>>02930000
END; << CHECKPASS >>                                           <<02.EB>>02932000
                                                               <<02.EB>>02934000
SUBROUTINE INITJIT;                                            <<02.EB>>02936000
COMMENT                                                        <<02.EB>>02938000
   USES LOCAL COPY OF JMAT. ALSO USES DIRECLOGON ARRAYS        <<02.EB>>02940000
   UENTRY, AENTRY & GENTRY.                                    <<02.EB>>02942000
;                                                              <<02.EB>>02944000
BEGIN                                                          <<02.EB>>02946000
                                                               <<02.EB>>02948000
JIT := 0;                            << ZERO OUT >>            <<02.EB>>02950000
MOVE JIT(1) := JIT,(JITSIZE -1);                               <<02.EB>>02952000
JIT(1) := LOGICAL(PXGLOB(PXGJIT).(6:10)) LOR %14000;           <<02.EB>>02954000
                                     << 1: JIT DST >>          <<02.EB>>02956000
JIT(2) := 8;                         << 2: JOB INFO PTR>>      <<02.EB>>02958000
JIT(3) := 48;                        << 3:ACCTING INFO PTR>>   <<02.EB>>02960000
JIT(4) := 59;                        << 4:RESERVED AREAD PTR>> <<02.EB>>02962000
                                     <<5-7:NOT USED>>          <<02.EB>>02964000
JIT(8) := 7;                         << 8:?>>                  <<02.EB>>02966000
JIT(9) := JMATENTRY(TYPJOBNUM);      <<9:JOB TYPE & NO.>>      <<02.EB>>02968000
JIT(10) := UENTRY(UMAXJOB) &LSL(8) LOR                         <<02.EB>>02970000
   JMATENTRY(XPRI).(0:8);            <<10:MAXPRI & PCB>>       <<02.EB>>02972000
                                     <<11:EOF -SKIPPED>>       <<02.EB>>02974000
                                     <<12:NOT USED    >>       <<U.RAO>>02976000
JIT(13) := AENTRY(ASECW);            <<13:ACCT SECURITY>>      <<02.EB>>02978000
JIT(14) := GENTRY(GSEC);             <<14-15:GROUP SEC>>       <<02.EB>>02980000
JIT(15) := GENTRY(GSEC+1);                                     <<02.EB>>02982000
MOVE JIT(16) := JMATENTRY(JANAME),(4);<<16-19:ACCT NAME>>      <<02.EB>>02984000
MOVE JIT(20) := UENTRY(UHGROUP),(4);<<20-23:HOME GRP NAME>>    <<02.EB>>02986000
MOVE JIT(24) := JMATENTRY(JGNAME),(4);<<24-27:GROUP NAME>>     <<02.EB>>02988000
MOVE JIT(28) := JMATENTRY(JUNAME),(4);<<28-31:USER NAME>>      <<02.EB>>02990000
JIT(32) := 53;                       <<32:PNTR TO AGIPNTR>>    <<38.PV>>02992000
JIT(33) := 55;                       <<33:PNTR TO GFIPNTR>>    <<38.PV>>02994000
JIT (33).(PVF) := GENTRY (GLINKAGE).(PVF);                     <<38.PV>>02996000
<<SET UP AGIPNTR AND GFIPNTR DOUBLE WORD ENTRIES>>             <<38.PV>>02998000
JIT (53) := 0;                                                 <<38.PV>>03000000
JIT (54) := AENTRY (AGIPNTR);                                  <<38.PV>>03002000
JIT (55) := 0;                                                 <<38.PV>>03004000
JIT (56) := IF PV'AND'MOUNTED THEN GENTRY (GSAVEFIPNTR)        <<38.PV>>03006000
                              ELSE GENTRY (GFIPNTR);           <<38.PV>>03008000
JIT(34) := UENTRY(ULATTR);           <<34-35:LOCAL ATTRIBUTES>><<02.EB>>03010000
JIT(35) := UENTRY(ULATTR +1);                                  <<02.EB>>03012000
                                     <<36-37:PASED FILE PTR>>  <<02.EB>>03014000
JIT(38) := UENTRY(UCAP);             <<38-39 USER CAP>>        <<02.EB>>03016000
JIT(39) := UENTRY(UCAP +1);                                    <<02.EB>>03018000
                                     <<40-42:NOT USED>>        <<02.EB>>03020000
                                     <<43:LOCAL RIN PTR -SKIP>><<02.EB>>03022000
MOVE JIT(44) := JMATENTRY(JNAME),(4);<<44-47:JOB NAME>>        <<02.EB>>03024000
JIT(48) := 3;                        <<48:ACCTING INFO>>       <<02.EB>>03026000
                                     <<49:CREC -SKIP>>         <<02.EB>>03028000
                                     <<50-51:CPU TIME -SKIP>>  <<02.EB>>03030000
JIT(52) := ABSOLUTE(ABSOLUTE(CPCB)+13).(8:8); << 52 PRI >>     <<04582>>03032000
                                     <<53-58:SKIP>>            <<02.EB>>03034000
JIT(59) := 1;                        <<59:RESERVED AREA>>      <<02.EB>>03036000
   JIT(40):=A(%1215);<<GET GLOBAL ALLOW MASK>>                 <<00552>>03038000
   JIT(41):=A(%1216);                                          <<00552>>03040000
   JIT(42):=A(%1217);                                          <<00552>>03042000
MOVETODSEG(PXGLOB(PXGJIT).(6:10),0,@JIT,JITSIZE);              <<02.EB>>03044000
                                                               <<02.EB>>03046000
END;                                 << INITJIT >>             <<02.EB>>03048000
                                                               <<02.EB>>03050000
SUBROUTINE INITJDT; << USES JMAT >>                            <<02.EB>>03052000
BEGIN                                                          <<02.EB>>03054000
                                                               <<02.EB>>03056000
JDT := JDTSIZE;                                                <<02.EB>>03058000
JDT(1) := JDTPTR;<<INITIAL POINTER TO TABLES>>                 <<02.EB>>03060000
MOVE JDT(2) := JDT(1),(NUMJDTPTRS-1);                          <<U.RAO>>03062000
JDT(NUMJDTPTRS) := JDT(NUMJDTPTRS)+8;  <<FOR "JCW">>           <<05.RO>>03064000
JDT(JDTPTR-2) := JMATENTRY(TYPJOBNUM);                         <<U.RAO>>03066000
JDT(JDTPTR-1) := JMATENTRY(XPRI) &LSR(8);                      <<U.RAO>>03068000
MOVE JDT(JDTPTR) := ([8/3,8/"J"],"CW",0,                       <<05.RO>>03070000
                     [8/7,8/"C"],"IE","RR","OR",0);            <<05.RO>>03072000
MOVETODSEG(PXGLOB(PXGJDT).(6:10),0,@JDT,JDTPTR+8);             <<05.RO>>03074000
                                                               <<02.EB>>03076000
END; << INITJDT >>                                             <<02.EB>>03078000
                                                               <<05.EB>>03080000
                                                               <<05.EB>>03082000
                   << ******************** >>                  <<05.EB>>03084000
                   << *  PRINTLOGON      * >>                  <<05.EB>>03086000
                   << ******************** >>                  <<05.EB>>03088000
                                                               <<05.EB>>03090000
                                                               <<05.EB>>03092000
                                                               <<02.EB>>03094000
SUBROUTINE PRINTLOGON;                                         <<05.EB>>03096000
BEGIN                                                          <<05.EB>>03098000
                                                               <<05.EB>>03100000
TIME := IF JMATENTRY(TLIMIT) <= 0 THEN 0 ELSE JMATENTRY        <<05.EB>>03102000
   (TLIMIT);                                                   <<05.EB>>03104000
FMTDATE(JMATENTRY(JM'CALENDAR),JMATENTRYD(JM'CLOCK),DATEBUF);  <<05.EB>>03106000
DATEBUF(27):=0;                                                <<02337>>03108000
MOVE PARTNO:=(0,0,0,0,0);              <<STR DELIMITERS>>      <<12.KM>>03110000
BVERPART:=ABSOLUTE(VERSION);                                   <<12.KM>>03112000
UPDPART:=ABSOLUTE(UPDATELEVEL);                                <<12.KM>>03114000
FIXPART:=ABSOLUTE(FIXLEVEL);                                   <<12.KM>>03116000
                                                               <<05.EB>>03118000
IF JOB THEN                                                    <<05.EB>>03120000
BEGIN                                                          <<05.EB>>03122000
      << PRINT JOB NAME IF NOT DUPLICITAVE >>                  <<05.EB>>03124000
      << :JOB/HELLO JNAME,UNAME.ANAME.GNAME >>                 <<05.EB>>03126000
      << PRIORITY = CS/DS; INPRI = N/HIPRI; (TIME = T) >>      <<05.EB>>03128000
   IF NOT JMATENTRY.(DUPLICITIVE) THEN                         <<05.EB>>03130000
   BEGIN                                                       <<05.EB>>03132000
      PRINT(DUMMY,0,%61); << PAGE EJECT >>                     <<05.EB>>03134000
      GENMSG(SYSET,LOGONHEADJ,%0,@JOBID);                      <<05.EB>>03136000
      IF TIME > 0 THEN                                         <<05.EB>>03138000
         IF JMATENTRY.(JPRI) = 15 THEN GENMSG(SYSET,           <<05.EB>>03140000
            LOGONTHIPRI,%01000,@LOGONQ,TIME)                   <<05.EB>>03142000
         ELSE GENMSG(SYSET,LOGONTPRI,%01100,@LOGONQ,           <<05.EB>>03144000
            JMATENTRY.(JPRI),TIME)                             <<05.EB>>03146000
      ELSE                                                     <<05.EB>>03148000
         BEGIN                                                 <<0314>> 03150000
         MOVE BUFF:=("UNLIMITED",0);                           <<0314>> 03152000
         IF JMATENTRY.(JPRI) = 15 THEN GENMSG(SYSET,           <<05.EB>>03154000
            LOGONTHIPRI,%0,@LOGONQ,@BUFF)                      <<0314>> 03156000
         ELSE GENMSG(SYSET,LOGONTPRI,%01000,@LOGONQ,JMATENTRY. <<0314>> 03158000
            (JPRI),@BUFF);                                     <<0314>> 03160000
         END;                                                  <<0314>> 03162000
   END;                                                        <<05.EB>>03164000
      << SESSION/JOB NUMBER = #S/J NUM >>                      <<05.EB>>03166000
   GENMSG(SYSET,LOGONJNO,%10000,JOBNUM);                       <<05.EB>>03168000
      <<SUN, MAY 29, 1977,  6:13 PM>>                          <<05.EB>>03170000
      <<HP32002U.VV.FF>>                                       <<12.KM>>03172000
   GENMSG(SYSET,LOGONDATELEVEL,%0,@DATEBUF,@BVERPART,          <<12.KM>>03174000
          @BUPDPART,@BFIXPART);                                <<12.KM>>03176000
END                                                            <<05.EB>>03178000
ELSE << SESSION >>                                             <<05.EB>>03180000
   GENMSG(SYSET,LOGONSNO,%0,@BVERPART,@BUPDPART,@BFIXPART,     <<12.KM>>03182000
          @DATEBUF);                                           <<12.KM>>03184000
                                                               <<05.EB>>03186000
END; << PRINTLOGON >>                                          <<05.EB>>03188000
                                                               <<02.EB>>03190000
SUBROUTINE SETLOGONQ;                                          <<05.EB>>03192000
BEGIN                                                          <<05.EB>>03194000
                                                               <<05.EB>>03196000
X := JMATENTRY(JM'XPRI);                                       <<05.EB>>03198000
IF X = 100 THEN LOGONQ := "B" ELSE                             <<05.EB>>03200000
IF X = 150 THEN LOGONQ := "C" ELSE                             <<05.EB>>03202000
IF X = 200 THEN LOGONQ := "D" ELSE                             <<05.EB>>03204000
   LOGONQ := "E";                                              <<05.EB>>03206000
                                                               <<05.EB>>03208000
END; << SETLOGONQ >>                                           <<05.EB>>03210000
                                                               <<02.EB>>03212000
                                                               <<02.EB>>03214000
SUBROUTINE LOGIT;                                              <<05.EB>>03216000
BEGIN                                                          <<02.EB>>03218000
                                                               <<02.EB>>03220000
TOS := @JMATENTRY(JUNAME);                                     <<02.EB>>03222000
TOS := @JMATENTRY(JANAME);                                     <<02.EB>>03224000
TOS := @JMATENTRY(JNAME);                                      <<02.EB>>03226000
TOS := @JMATENTRY(JGNAME);                                     <<02.EB>>03228000
TOS := JMATENTRY(ORIGJINLIST);                                 <<02.EB>>03230000
TOS := 0;                                                      <<02.EB>>03232000
TOS := TOS &DLSR(8);                                           <<02.EB>>03234000
TOS := TOS &LSR(8);                                            <<02.EB>>03236000
TOS := 0;                                                      <<02.EB>>03238000
TOS := LOGONQ;                                                 <<02.EB>>03240000
TOS := DOUBLE(INTEGER(JMATENTRY(TLIMIT)));                     <<02.EB>>03242000
TOS := LOGICAL(JMATENTRY.(JPRI) &LSL(8)) <<INPRI>>             <<02.EB>>03244000
   LOR LOGICAL(JMATENTRY(JMISC).(OUTPRIBITS)); <<OUTPRI>>      <<02332>>03246000
TOS := 0; << RESERVED >>                                       <<00861>>03248000
TOS := 2; << LOG TYPE >>                                       <<02.EB>>03250000
LOG;                                                           <<02.EB>>03252000
                                                               <<02.EB>>03254000
END; << SUBROUTINE LOGIT >>                                    <<05.EB>>03256000
                                                               <<02.EB>>03258000
                                                               <<02.EB>>03260000
                   << ********************** >>                <<05.EB>>03262000
                   << * INITJSMP MAIN BODY * >>                <<05.EB>>03264000
                   << ********************** >>                <<05.EB>>03266000
                                                               <<05.EB>>03268000
                                                               <<02.EB>>03270000
                                                               <<06.EB>>03272000
<< SET LOCALS >>                                               <<02.EB>>03274000
                                                               <<02.EB>>03276000
SETXPXFIXED;                                                   <<02.EB>>03278000
@PXFIX := X;                                                   <<02.EB>>03280000
SETXPXGLOB;                                                    <<02.EB>>03282000
@PXGLOB := X;                                                  <<02.EB>>03284000
JMATINDEX := PXGLOB(PXGJMAT).(0:8);                            <<02.EB>>03286000
                                                               <<02.EB>>03288000
   << GET UCOP COMMUNICATION STUFF >>                          <<02.EB>>03290000
MOVEFROMDSEG(@UCOPCOMM,PXGLOB(PXGJIT).(6:10),0,UCOPCOMMSIZE);  <<02.EB>>03292000
                                                               <<02.EB>>03294000
   << GET LOCAL JMAT COPY >>                                   <<02.EB>>03296000
MOVEFROMDSEG(@JMATENTRY,JMATDST,JMATINDEX *JMATSIZE,           <<02.EB>>03298000
   JMATSIZE);                                                  <<02.EB>>03300000
                                                               <<02.EB>>03302000
PXFIX(PXFJNUM) := JMATENTRY(TYPJOBNUM);                        <<02.EB>>03304000
JOB := IF JMATENTRY(TYPJOBNUM).(0:2) = 2 THEN TRUE ELSE FALSE; <<02.EB>>03306000
JOBNUM := JMATENTRY(TYPJOBNUM).(2:14);                         <<02.EB>>03308000
                                                               <<02.EB>>03310000
SETJCUT; << SET JOB CUT-OFF FOR CPU LIMITED JOBS,SET IN PCB>>  <<02.EB>>03312000
                                                               <<02.EB>>03314000
GETCHECKDIR; <<GET DIR ENTRIES, CHECK & SET CAP>>              <<02.EB>>03316000
                                                               <<02.EB>>03318000
INITJIT;                                                       <<00125>>03320000
   << RESCHEDULE IF DEFAULT QUEUE HIGHER THAN CAP. >>          <<05.EB>>03322000
IF UENTRY(UMAXJOB).(8:8) > JMATENTRY(JM'XPRI) THEN             <<05.EB>>03324000
BEGIN                                                          <<05.EB>>03326000
   JMATENTRY(JM'XPRI) := UENTRY(UMAXJOB).(8:8);                <<05.EB>>03328000
   SETLOGONQ; << LOGONQ := "B/C/D/E"  >>                       <<05.EB>>03330000
   GETPRIORITY(0,LOGICAL(LOGONQ&LSL(8)) LOR "S");              <<05.EB>>03332000
END;                                                           <<05.EB>>03334000
                                                               <<05.EB>>03336000
   << SET JMAT STAT TO RUNNING, TURN OFF PASSWD FLAGS, MOVE >> <<05.EB>>03338000
                                                               <<05.EB>>03340000
   << COPY OF JMAT, MAY HAVE ADDED GROUP NAME               >> <<05.EB>>03342000
   << RE-TIME STAMP JMAT IF JOB.                            >> <<05.EB>>03344000
   << XPRI WILL BE LOWERED (BIGGER NUMBERS) IF DEFAULT      >> <<05.EB>>03346000
   << IF HIGHER THAN ACCTS.                                 >> <<05.EB>>03348000
IF JOB THEN                                                    <<05.EB>>03350000
BEGIN                                                          <<05.EB>>03352000
   JMATENTRY(JM'CALENDAR) := CALENDAR;                         <<05.EB>>03354000
   JMATENTRYD(JM'CLOCK)    := CLOCK;                           <<05.EB>>03356000
END;                                                           <<05.EB>>03358000
TEMP := JMATENTRY; << SAVE FOR CHECKPASS >>                    <<05.EB>>03360000
                                                               <<04636>>03362000
                                                               <<04636>>03364000
                                                               <<04636>>03366000
                                                               <<05.EB>>03368000
INITJDT;                                                       <<02.EB>>03370000
                                                               <<02.EB>>03372000
PASSFAIL := FALSE;                                             <<01130>>03374000
                                                               <<01130>>03376000
<< DON'T CHECK FOR PASSWORDS IF DIRECLOGON FAILED. >>          <<01130>>03378000
IF DIRFAIL = 0 THEN                                            <<01130>>03380000
  IF NOT CHECKPASS(AENTRY(APASS),2) OR                         <<01130>>03382000
     NOT CHECKPASS(UENTRY(UPASS),3) OR                         <<01130>>03384000
     NOT CHECKPASS(GENTRY(GPASS),1) THEN                       <<01130>>03386000
     PASSFAIL := TRUE;                                         <<01130>>03388000
                                                               <<01130>>03390000
   << TURN OFF TIMEOUTS ON SESSIONS >>                         <<02.EB>>03392000
                                                               <<02858>>03396000
JMATENTRY:=TEMP;                                               <<04636>>03398000
JMATENTRY:=JMATENTRY LAND %1437 LOR %4000; << State EXEC >>    <<04636>>03400000
MOVETODSEG(JMATDST,JMATINDEX *JMATSIZE,@JMATENTRY,JMATSIZE);   <<04636>>03402000
INDEV := JMATENTRY(JINLIST).(0:8);                             <<02858>>03404000
LOST'TERMINAL := FALSE;   << Initialize >>                     <<02858>>03406000
                                                               <<02858>>03408000
IF JINDEVTYPE=TERMINAL THEN                                    <<02858>>03410000
   BEGIN                                                       <<02858>>03412000
   IF NOT JOB THEN                                             <<02858>>03414000
      ATTACHIO(INDEV,0,0,0,21,0,1,0,1); << Block for timing. >><<02858>>03416000
                                                               <<02858>>03418000
   IF SPECIAL'TERMINAL(INDEV) THEN                             <<02858>>03420000
      BEGIN                                                    <<02858>>03422000
                                                               <<02858>>03424000
      << If the LOGON bit is no longer on, then the >>         <<02858>>03426000
      << terminal disconnected for some reason. >>             <<02858>>03428000
                                                               <<02858>>03430000
      IF LPDT(INDEV*LPDTSIZE + LP'LOGON) = 0 THEN              <<02858>>03432000
         BEGIN                                                 <<02858>>03434000
         LOST'TERMINAL := TRUE;                                <<02858>>03436000
      << Set flags correctly for CLEANUPJOB >>                 <<02858>>03438000
         EXPCODE := DIRFAIL + LOGONFAIL;                       <<02858>>03440000
         SETJCW( LOGICAL(EXPCODE) LOR %100000 );  << Abort >>  <<02858>>03442000
         END                                                   <<02858>>03444000
      ELSE                                                     <<02858>>03446000
         BEGIN   << No problems.  Reset LOGON bit. >>          <<02858>>03448000
         DISABLE;                                              <<02858>>03450000
         LPDT(INDEV*LPDTSIZE + LP'LOGON) := FALSE;             <<02858>>03452000
         ENABLE;                                               <<02858>>03454000
         END;                                                  <<02858>>03456000
      END;   << of disconnect check. >>                        <<02858>>03458000
   END;   << of terminal >>                                    <<02858>>03460000
                                                               <<02858>>03462000
<< Even if a prior error has occurred, we attempt to do the >> <<04200>>03464000
<< job's FJOPENs on the $STDfiles.  If these opens succeed, >> <<04200>>03466000
<< we can safely tell the job why it fails, and cleanup of  >> <<04200>>03468000
<< the job in MORGUE is easier.                             >> <<04200>>03470000
<< Note, however, that these FJOPENs may fail, it which     >> <<04200>>03472000
<< case, MORGUE cleans up as best it can, but the user will >> <<04200>>03474000
<< not be informed of the reason his job fails.  Jobs will  >> <<04200>>03476000
<< flush from the system and sessions will appear to ignore >> <<04200>>03478000
<< the logon attempt (but the terminal won't hang).  In all >> <<04200>>03480000
<< cases a message will be printed to the console, however. >> <<04200>>03482000
<< Future development may investigate using ATTACHIOs to    >> <<04200>>03484000
<< the session $STDLIST device, since UCOP has allocated    >> <<04200>>03486000
<< the device before the CI is awoken (and this procedure   >> <<04200>>03488000
<< is called.                                               >> <<04200>>03490000
FJOPEN(,%2044,%1300,@JINXDDEP);                                <<01130>>03492000
IF <> THEN                                                     <<03785>>03494000
BEGIN                                                          <<03785>>03496000
   RESETCRITICAL(0);  << UCOP creates CIs critical. >>         <<03785>>03498000
   TIMINATE( 0, CSTDINFAIL );                                  <<03785>>03500000
END;                                                           <<03785>>03502000
FJOPEN(,%2414,%1301,@JLISTXDDEP);                              <<01130>>03504000
IF <> THEN                                                     <<03785>>03506000
BEGIN                                                          <<03785>>03508000
   RESETCRITICAL(0);  << UCOP creates CIs critical. >>         <<03785>>03510000
   TIMINATE( 0, CSTDLISTFAIL );                                <<03785>>03512000
END;                                                           <<03785>>03514000
                                                               <<01130>>03516000
RESETCRITICAL(0);  << JSMP CAN NOW DIE.  >>                    <<01130>>03518000
ERRORON;           << ENABLE ERROR MECHANISM >>                <<01130>>03520000
                                                               <<02858>>03522000
IF LOST'TERMINAL THEN TERMINATE;   << Bye-bye >>               <<02858>>03524000
                                                               <<02.EB>>03526000
   << IF GETCHECKDIR FAILED THEN BAIL OUT >>                   <<05.EB>>03528000
IF DIRFAIL <> 0 THEN TIMINATE(NOACCT +DIRFAIL,DIRFAIL);        <<05.EB>>03530000
                                                               <<01130>>03532000
<< IF CHECKPASS FAILED, TELL USER & CONSOLE AND TERMINATE >>   <<01130>>03534000
IF PASSFAIL THEN TIMINATE(PASSWDFAIL,CPASSFAIL);               <<01130>>03536000
                                                               <<05.EB>>03538000
   << OUT OF TIME ? -- ALLOW SYS MGR. TO LOG ON ANY TIME, >>   <<0313>> 03540000
   << ALLOW ACT MGR TO LOG ON IF ACCT HAS TIME LEFT.      >>   <<0313>> 03542000
IF AENTRYD(ACPUCOUNTD) >= AENTRYD(ACPULIMITD) THEN             <<01112>>03544000
  IF SYSMGR THEN                                               <<01112>>03546000
    GENMSG(CISET,W'ACCOUTCPU)                                  <<01112>>03548000
  ELSE                                                         <<01112>>03550000
    TIMINATE(ACCOUTCPU,CACPUFAIL);                             <<01112>>03552000
IF AENTRYD(ACONTIMECOUNTD) >= AENTRYD(ACONTIMELIMITD) THEN     <<01112>>03554000
  IF SYSMGR THEN                                               <<01112>>03556000
    GENMSG(CISET,W'ACCOUTCONN)                                 <<01112>>03558000
  ELSE                                                         <<01112>>03560000
    TIMINATE(ACCOUTCONN,CACONNFAIL);                           <<01112>>03562000
                                                               <<05.EB>>03564000
   << IA/BA CHECK >>                                           <<05.EB>>03566000
IF JOB THEN                                                    <<05.EB>>03568000
BEGIN << BATCH ACCESS ? >>                                     <<05.EB>>03570000
   IF NOT AENTRY(ACAP +1).(7:1) THEN TIMINATE(NOBA'ACCT,       <<01053>>03572000
      CBAFAIL);                                                <<01053>>03574000
   IF NOT UENTRY(UCAP +1).(7:1) THEN TIMINATE(NOBA,            <<00248>>03576000
      CBAFAIL);                                                <<00603>>03578000
END                                                            <<05.EB>>03580000
ELSE                                                           <<05.EB>>03582000
BEGIN                                                          <<05.EB>>03584000
   IF NOT AENTRY(ACAP +1).(8:1) THEN TIMINATE(NOIA'ACCT,       <<01053>>03586000
      CIAFAIL);                                                <<01053>>03588000
   IF NOT UENTRY(UCAP +1).(8:1) THEN TIMINATE(NOIA,            <<00248>>03590000
      CIAFAIL);                                                <<00603>>03592000
END;                                                           <<05.EB>>03594000
                                                               <<02.EB>>03596000
IF GENTRYD(GCPUCOUNTD) >= GENTRYD(GCPULIMITD) THEN             <<01112>>03598000
  IF SYSMGR OR ACCTMGR THEN                                    <<01112>>03600000
    GENMSG(CISET,W'GRPOUTCPU)                                  <<01112>>03602000
  ELSE                                                         <<01112>>03604000
    TIMINATE(GRPOUTCPU,CGCPUFAIL);                             <<01112>>03606000
IF GENTRYD(GCONTIMECOUNTD) >= GENTRYD(GCONTIMELIMITD) THEN     <<01112>>03608000
  IF SYSMGR OR ACCTMGR THEN                                    <<01112>>03610000
    GENMSG(CISET,W'GRPOUTCONN)                                 <<01112>>03612000
  ELSE                                                         <<01112>>03614000
    TIMINATE(GRPOUTCONN,CGCONNFAIL);                           <<01112>>03616000
                                                               <<05.EB>>03618000
   << SET LOGONQ & STOPPER FOR LOGON JOBS >>                   <<05.EB>>03620000
LOGONQ(1) := 0; << STOPPER >>                                  <<00283>>03622000
SETLOGONQ;                                                     <<00283>>03624000
                                                               <<05.EB>>03626000
                                                               <<02.EB>>03628000
TELLOP(CLOGONMSG);                                             <<02.EB>>03630000
                                                               <<02.EB>>03632000
   << ASK OP FOR STD FORMS, GO ON REGARDLESS >>                <<02.EB>>03634000
IF STDFORMS THEN GENMSG(SYSET,FORMREQD,%10000,JMATENTRY        <<02.EB>>03636000
   (JINLIST).(8:8),,,,,0,1,@STDFORMS);                         <<02.EB>>03638000
                                                               <<04555>>03640000
<< Congratulations!  Having made it this far, you are >>       <<04555>>03642000
<< now a full-fledged Job/Session Main Process.  Set  >>       <<04555>>03644000
<< the EXPCODE to 4 (normal log on) so when your job  >>       <<04555>>03646000
<< terminates, you will be logged appropriately.      >>       <<04555>>03648000
   SETCRITICAL;                                                <<04555>>03650000
   EXPCODE := 4;                                               <<04555>>03652000
IF LOGLOGON THEN LOGIT; << CALL LOG >>                         <<05.EB>>03654000
   RESETCRITICAL(0);                                           <<04555>>03656000
                                                               <<02.EB>>03658000
PRINTLOGON; << SEND OUT LOGON HEAD >>                          <<02.EB>>03660000
                                                               <<02.EB>>03662000
END; << INITJSMP >>                                            <<02.EB>>03664000
$TITLE "PRINTCARET"                                            <<05.EB>>03666000
PROCEDURE PRINTCARET(GLISTDEV,COMMAND,OFFSET);                 <<05.EB>>03668000
   VALUE GLISTDEV,COMMAND,OFFSET;                              <<05.EB>>03670000
   INTEGER GLISTDEV,COMMAND,OFFSET;                            <<05.EB>>03672000
   OPTION INTERNAL;                                            <<05.EB>>03674000
BEGIN                                                          <<05.EB>>03676000
                                                               <<05.EB>>03678000
EQUATE                                                         <<05.EB>>03680000
   CDATA = 0,                                                  <<05.EB>>03682000
   CHELLO= 1,                                                  <<05.EB>>03684000
   CJOB  = 2;                                                  <<05.EB>>03686000
                                                               <<05.EB>>03688000
INTEGER LEN;                                                   <<05.EB>>03690000
                                                               <<05.EB>>03692000
BYTE ARRAY BUFF(0:255);                                        <<05.EB>>03694000
                                                               <<05.EB>>03696000
BUFF := " ";                                                   <<05.EB>>03698000
MOVE BUFF(1) := BUFF,(255);                                    <<05.EB>>03700000
CASE COMMAND OF                                                <<06.EB>>03702000
BEGIN                                                          <<06.EB>>03704000
   LEN := 5; << DATA >>                                        <<06.EB>>03706000
   LEN := 6; << HELLO >>                                       <<06.EB>>03708000
   LEN := 4; << JOB >>                                         <<06.EB>>03710000
   LEN := 0; << SPECIAL LOGON >>                               <<06.EB>>03712000
   LEN := 0; << SPECIAL LOGON, APL1 >>                         <<06.EB>>03714000
   LEN := 0; << SPECIAL LOGON, APL2 >>                         <<06.EB>>03716000
END;                                                           <<06.EB>>03718000
MOVE BUFF(LEN +OFFSET) := ("^",0);                             <<05.EB>>03720000
GENMSG(-1,@BUFF,,,,,,,GLISTDEV);                               <<05.EB>>03722000
                                                               <<05.EB>>03724000
END; << PROCEDURE PRINTCARET >>                                <<05.EB>>03726000
$TITLE "JOBKEYS"                                               <<05.EB>>03728000
INTEGER PROCEDURE JOBKEYS(PARM,PLEN);                          <<05.EB>>03730000
   VALUE PLEN;                                                 <<05.EB>>03732000
   BYTE POINTER PARM;                                          <<05.EB>>03734000
   INTEGER PLEN;                                               <<05.EB>>03736000
   OPTION INTERNAL;                                            <<11.EB>>03738000
COMMENT RETURNS INDEX INTO JOB KEY ARRAY. CALLS SEARCH.        <<05.EB>>03740000
;                                                              <<05.EB>>03742000
BEGIN                                                          <<05.EB>>03744000
                                                               <<05.EB>>03746000
BYTE ARRAY KEYS(0:50);                                         <<05.EB>>03748000
                                                               <<05.EB>>03750000
MOVE KEYS := (6,4,"TERM",                                      <<05.EB>>03752000
              5,3,"PRI",                                       <<05.EB>>03754000
              6,4,"TIME",                                      <<05.EB>>03756000
              7,5,"INPRI",                                     <<05.EB>>03758000
              7,5,"HIPRI",                                     <<05.EB>>03760000
             10,8,"OUTCLASS",                                  <<05.EB>>03762000
              9,7,"RESTART",                                   <<05.EB>>03764000
              0);                                              <<05.EB>>03766000
                                                               <<05.EB>>03768000
JOBKEYS := SEARCH(PARM,PLEN,KEYS);                             <<05.EB>>03770000
                                                               <<05.EB>>03772000
END; << PROCEDURE JOBKEYS >>                                   <<05.EB>>03774000
$TITLE "STARTDEVICE - JOB INITIATION"                          <<05.EB>>03776000
PROCEDURE STARTDEVICE(COMMAND,PARMARR,DEVICE,SEQUENCED,JMATP,  <<00534>>03778000
                      IDDSUBP,JOBNUM,ERRNUM,PARMNUM);          <<00534>>03780000
   VALUE COMMAND,DEVICE,SEQUENCED;                             <<1.RAO>>03782000
   INTEGER DEVICE,COMMAND,JOBNUM,ERRNUM,PARMNUM;               <<00534>>03784000
   LOGICAL SEQUENCED;                                          <<1.RAO>>03786000
   BYTE ARRAY PARMARR;                                         <<05.EB>>03788000
   INTEGER POINTER JMATP,IDDSUBP;                              <<05.EB>>03790000
   OPTION VARIABLE,PRIVILEGED,UNCALLABLE;                      <<05.EB>>03792000
COMMENT                                                        <<05.EB>>03794000
   COMMAND EXECUTOR FOR :JOB, :HELLO, :DATA, :( )              <<05.EB>>03796000
   OPERATES IN THREE ENVIRONMENTS. MAY BE CALLED FROM DEVREC   <<06.EB>>03798000
   (TERMINAL OR CARD READER), STREAM COMMAND FROM SESSION/JOB, <<06.EB>>03800000
   OR FROM THE INPUT SPOOLER.                                  <<06.EB>>03802000
                                                               <<05.EB>>03804000
   HANDLES ALL ERRORS & PRINTS THEM ON $STDLIST, UNLESS ITS A  <<05.EB>>03806000
   SPOOLER CALL, WHICH PRINTS ON THE CONSOLE.                  <<05.EB>>03808000
   IF CALLED FROM STREAM THEN CIERR HANDLES ERRORS.            <<00569>>03810000
   SUCCESSFUL EXECUTION IS INDICATED BY ERRNUM = 0.            <<00569>>03812000
                                                               <<05.EB>>03814000
   WORK STARTDEVICE PERFORMS:                                  <<05.EB>>03816000
   - SOLVE FUNNY TERMINAL PROBLEM.                             <<05.EB>>03818000
   - PARSE LOGON ID.                                           <<05.EB>>03820000
   - CHECK LOGON ID FOR VALIDITY, GET DIRECTORY ENTRIES.       <<05.EB>>03822000
   - CHECK VALIDITY OF KEYWORDS.                               <<05.EB>>03824000
   - SET UP JMAT ENTRY.                                        <<05.EB>>03826000
   - SET UP IDD FOR :DATA                                      <<05.EB>>03828000
   - TURN OFF TIME-OUT FOR :STREAM FROM TERMINAL.              <<05.EB>>03830000
                                                               <<05.EB>>03832000
   PARAMETERS:                                                 <<06.EB>>03834000
      COMMAND = 0  - :DATA                                     <<06.EB>>03836000
                1  - :HELLO                                    <<06.EB>>03838000
                2  - :JOB                                      <<06.EB>>03840000
                3  - (CMD) LOGON                               <<06.EB>>03842000
                4  - (APL1) LOGON                              <<06.EB>>03844000
                5  - (APL2) LOGON                              <<06.EB>>03846000
      PARMARR - 1ST BYTE PAST :JOB/DATA/HELLO (EXCEPT FOR      <<06.EB>>03848000
                '(CMD)' WHICH IS 1ST BYTE. THIS MUST BE ON     <<06.EB>>03850000
                WORD BOUNDARY.).                               <<06.EB>>03852000
      SEQUENCED -  VALUE TRUE IF JOB CARD IS BELIEVED NUMBERED.<<1.RAO>>03854000
         JMAT(JM'SEQUENCED) SET WITH THIS VALUE.               <<1.RAO>>03856000
      DEVICE  - INPUT DEVICE LDEV.  THIS IS PHONEY FOR STREAM. <<06.EB>>03858000
      JMATP   - WORD POINTEJMAT INDEX IS RETURNED.             <<06.EB>>03860000
      IDDSUBP - IDD SUBENTRY POINTER IS RETURNED.              <<06.EB>>03862000
      JOBNUM  - JOB NUMBER IS RETURNED.                        <<06.EB>>03864000
      ERRNUM - CI ERROR NUMBER IF ERROR OCCURRED.              <<00569>>03866000
               NEGATIVE FOR CI WARNINGS.                       <<00569>>03868000
      PARMNUM - PARAMETER IN WHICH ERROR OCCURRED.             <<00569>>03870000
;                                                              <<06.EB>>03872000
BEGIN                                                          <<05.EB>>03874000
                                                               <<05.EB>>03876000
<< INSTALL DEFINES & EQUATES HERE >>                           <<05.EB>>03878000
                                                               <<05.EB>>03880000
EQUATE                                                         <<05.EB>>03882000
   CDATA                = 0,                                   <<05.EB>>03884000
   CHELLO               = 1,                                   <<05.EB>>03886000
   CJOB                 = 2,                                   <<05.EB>>03888000
   DEFINPRI             = 8,                                   <<05.EB>>03890000
   DEFXPRI              = 150, << CS QUEUE >>                  <<05.EB>>03892000
   DIRENTRYSIZE         = 41,                                  <<05.EB>>03894000
   GLEVEL               = 1,                                   <<05.EB>>03896000
   ALEVEL               = 2,                                   <<05.EB>>03898000
   ULEVEL               = 3,                                   <<05.EB>>03900000
   KTERM                = 1,                                   <<05.EB>>03902000
   KPRI                 = 2,                                   <<05.EB>>03904000
   KTIME                = 3,                                   <<05.EB>>03906000
   KINPRI               = 4,                                   <<05.EB>>03908000
   KHIPRI               = 5,                                   <<05.EB>>03910000
   KOUTCLASS            = 6,                                   <<05.EB>>03912000
   KRESTART             = 7,                                   <<05.EB>>03914000
   CILOGPUTENTRY        = 0,                                   <<05.EB>>03916000
   CILOGREMENTRY        = 2,                                   <<05.EB>>03918000
   HIPRIVALUE           = 15,                                  <<05.EB>>03920000
   MAXINPRI             = 13,                                  <<00569>>03922000
   CISET                = 2,                                   <<05.EB>>03924000
   SYSET                = 1, << SYSTEM MESSAGE SET >>          <<12.EB>>03926000
                                                               <<05.EB>>03928000
   << WARNINGS >>                                              <<05.EB>>03930000
                                                               <<05.EB>>03932000
   IGNOREDDELIM         = 1451,                                <<05.EB>>03934000
   UNKNOWNPARM          = 1452,                                <<05.EB>>03936000
   NOEQUALKEY           = 1453,                                <<05.EB>>03938000
   EXPKEYVALUE          = 1454,                                <<05.EB>>03940000
   DUPKEY               = 1455,                                <<05.EB>>03942000
   NOTNUMERIC           = 1456,                                <<05.EB>>03944000
   JOBTERMINAL          = 1457,                                <<05.EB>>03946000
   BADTERMTYPE          = 1458,                                <<05.EB>>03948000
   INVPRI               = 1459,                                <<05.EB>>03950000
   NOHIPRICAP           = 1460,                                <<05.EB>>03952000
   INPRIHIPRI           = 1461,                                <<05.EB>>03954000
   TOOLOWINPRI          = 1462,                                <<05.EB>>03956000
   TOOHIINPRI           = 1463,                                <<05.EB>>03958000
   HIPRIINPRI           = 1464,                                <<05.EB>>03960000
   SESSIONOUTCLASS      = 1465,                                <<05.EB>>03962000
   INVOUTCLASS          = 1466,                                <<05.EB>>03964000
   NOND                 = 1467,                                <<05.EB>>03966000
   TOOLOWOUTPRI         = 1468,                                <<05.EB>>03968000
   TOOHIOUTPRI          = 1469,                                <<05.EB>>03970000
   EXPNUMCOPIES         = 1470,                                <<05.EB>>03972000
   MAXCOPIES127         = 1471,                                <<05.EB>>03974000
   EXTRAOUTCLASSPARM    = 1472,                                <<05.EB>>03976000
   SESSIONRESTART       = 1473,                                <<05.EB>>03978000
   EXCEEDXPRI           = 1474,                                <<05.EB>>03980000
   NOPASSREQD           = 1474,                                <<08.EB>>03982000
   << GROUP PASS NOT REQD=1475 >>                                       03984000
   << ACCNT PASS NOT REQD=1476 >>                                       03986000
   << USER  PASS NOT REQD=1477 >>                                       03988000
   INVOUTTYPE           = 1478,                                <<SP1SZ>>03990000
   INVALIDTIME          = 1479,                                <<0314>> 03992000
   MINCOPIES1           = 1480,                                <<04817>>03994000
   NOTNUMINOUTPRI       = 1481,                                         03996000
   NOTNUMCOPIES         = 1482,                                         03998000
   NOTNUMTERM           = 1483,                                         04000000
                                                               <<05.EB>>04002000
   << ERRORS >>                                                <<05.EB>>04004000
                                                               <<05.EB>>04006000
   << INTERNAL ERRORS >>                                       <<05.EB>>04008000
                                                               <<05.EB>>04010000
   IDDFULL              = 1411,                                <<05.EB>>04012000
   JMATFULL             = 1412,                                <<05.EB>>04014000
   CILOGFULL            = 1413,                                <<05.EB>>04016000
                                                               <<05.EB>>04018000
   << SYNTAX OR SEMANTIC ERRORS >>                             <<05.EB>>04020000
                                                               <<05.EB>>04022000
   MISSINGRIGHTPAREN    = 1421,                                <<05.EB>>04024000
   MISSINGLEFTPAREN     = 1422,                                <<05.EB>>04026000
   EXPJNAME             = 1423,                                <<05.EB>>04028000
   EXPUNAME             = 1424,                                <<05.EB>>04030000
   EXPUPASS             = 1425,                                <<05.EB>>04032000
   EXPANAME             = 1426,                                <<05.EB>>04034000
   EXPAPASS             = 1427,                                <<05.EB>>04036000
   EXPFNAME             = 1428,                                <<05.EB>>04038000
   EXPGNAME             = 1429,                                <<05.EB>>04040000
   EXPGPASS             = 1430,                                <<05.EB>>04042000
   NOIA                 = 1431,                                <<05.EB>>04044000
   NOBA                 = 1432,                                <<05.EB>>04046000
   EXTRAPARMS           = 1433,                                <<05.EB>>04048000
   NAMENOTALPHA         = 1434,                                <<05.EB>>04050000
   NAMETOOLONG          = 1435,                                <<05.EB>>04052000
   NOACCT               = 1435, << ACTUALLY 1436 >>            <<05.EB>>04054000
   NOGROUP              = 1436,                                <<05.EB>>04056000
   NOACCT'              = 1437,                                <<05.EB>>04058000
   NOUSER               = 1438,                                <<05.EB>>04060000
   NOHOMEG              = 1439,                                <<05.EB>>04062000
   INVPASS              = 1441,                                <<05.EB>>04064000
   MISPASS              = 1444,                                <<0312>> 04066000
                                                               <<12.EB>>04068000
      << CONSOLE MESSAGES FOR ILLEGITIMATE ACCESS >>           <<12.EB>>04070000
                                                               <<12.EB>>04072000
   CONSLOGONFAIL        = 60, << 61 - 67 >>                    <<12.EB>>04074000
   <<CNOGROUP           = 61, >>                               <<12.EB>>04076000
   <<CNOACCT            = 62, >>                               <<12.EB>>04078000
   <<CNOUSER            = 63, >>                               <<12.EB>>04080000
   CNOHOMEG             = 64,                                  <<12.EB>>04082000
   CINVPASS             = 65,                                  <<02320>>04084000
   CMISPASS             = 68,                                  <<0312>> 04086000
                                                               <<05.EB>>04088000
   ZENDOFEQUATES        = 0;                                   <<05.EB>>04090000
                                                               <<05.EB>>04092000
INTEGER                                                        <<05.EB>>04094000
   PLEN,                                                       <<05.EB>>04096000
   BYTE'INDX,                                                  <<00068>>04098000
    TEMP'BYTE'INDX,                                            <<02322>>04100000
    LEN'STRING'LEFT,                                           <<02322>>04102000
    TEMP'BYTE'CNT,                                             <<02322>>04104000
   BYTE'CNT,                                                   <<00068>>04106000
   DUMMY,                                                      <<05.EB>>04108000
   CMDLEN    = DUMMY,                                          <<05.EB>>04110000
   SAVESIR   = DUMMY,                                          <<05.EB>>04112000
   TERMTYPE  = DUMMY,                                          <<05.EB>>04114000
   QUEUE     = DUMMY,                                          <<05.EB>>04116000
   PRI       = DUMMY,                                          <<05.EB>>04118000
   INPRI     = DUMMY,                                          <<05.EB>>04120000
   OUTPRI    = DUMMY,                                          <<05.EB>>04122000
   NUMCOPIES = DUMMY,                                          <<05.EB>>04124000
   DIRINDEX  = DUMMY,                                          <<05.EB>>04126000
   OUTDEV    = DUMMY,                                          <<05.EB>>04128000
   OUTDEVTYPE= DUMMY,                                          <<05.EB>>04130000
   COMMAND',                                                   <<06.EB>>04132000
   GLISTDEV,                                                   <<05.EB>>04134000
   FUNNYTERM,                                                  <<05.EB>>04136000
   CICOMLEN,                                                   <<05.EB>>04138000
   AMAXPRI,                                                    <<05.EB>>04140000
   UMAXPRI,                                                    <<05.EB>>04142000
   INDEVTYPE,                                                  <<05.EB>>04144000
   KEYNO,                                                      <<05.EB>>04146000
   SPLEN;                                                      <<05.EB>>04148000
                                                               <<05.EB>>04150000
DOUBLE CAPD;                                                   <<05.EB>>04152000
LOGICAL CAP0 = CAPD, CAP1 = CAPD +1;                           <<05.EB>>04154000
                                                               <<05.EB>>04156000
LOGICAL                                                        <<05.EB>>04158000
   Z'SLASH:=%000057,                                           <<00068>>04160000
   Z'RO:=%0,                                                   <<00068>>04162000
   FTERM,                                                      <<05.EB>>04164000
   FPRI,                                                       <<05.EB>>04166000
   FTIME,                                                      <<05.EB>>04168000
   FINPRI,                                                     <<05.EB>>04170000
   FHIPRI,                                                     <<05.EB>>04172000
   FOUTCLASS,                                                  <<05.EB>>04174000
   FRESTART,                                                   <<05.EB>>04176000
   GROUPSPEC,                                                  <<05.EB>>04178000
   HOMEGROUP,                                                  <<00802>>04180000
   PARMASK = Q-4;                                              <<05.EB>>04182000
                                                               <<05.EB>>04184000
DEFINE                                                         <<05.EB>>04186000
   SEQNUMPASSED = PARMASK.(10:1) #,                            <<00534>>04188000
   SPOOLERCALL = PARMASK.(12:1) #;                             <<00534>>04190000
                                                               <<05.EB>>04192000
BYTE POINTER                                                   <<05.EB>>04194000
   B'POINTER,                                                  <<00068>>04196000
   B'CHAR:=@PARMARR,                                           <<00068>>04198000
   PARM,                                                       <<05.EB>>04200000
   PTR,                                                        <<05.EB>>04202000
   SPARM,                                                      <<05.EB>>04204000
   SAVEPTR,                                                    <<05.EB>>04206000
   OLDPARMPTR,                                                 <<05.EB>>04208000
   IDDSP = OLDPARMPTR;                                         <<05.EB>>04210000
                                                               <<05.EB>>04212000
POINTER                                                        <<05.EB>>04214000
   JMATXPTR,                                                   <<05.EB>>04216000
   CICOMPTRW;                                                  <<05.EB>>04218000
                                                               <<05.EB>>04220000
ARRAY JMAT(0:JM'ENTRYSIZEM1);                                  <<05.EB>>04222000
DOUBLE ARRAY JMATD(*) = JMAT;                                  <<05.EB>>04224000
BYTE ARRAY JMATB(*) = JMAT;                                    <<05.EB>>04226000
                                                               <<05.EB>>04228000
ARRAY DIRENTRY(0:DIRENTRYSIZE);                                <<05.EB>>04230000
BYTE ARRAY DIRENTRYB(*) = DIRENTRY;                            <<05.EB>>04232000
DOUBLE ARRAY DIRENTRYD(*) = DIRENTRY;                          <<05.EB>>04234000
                                                               <<05.EB>>04236000
ARRAY IDD(0:IDDSIZE);                                          <<05.EB>>04238000
BYTE ARRAY IDDB(*) = IDD;                                      <<05.EB>>04240000
ARRAY DEVINFO(0:8);                                            <<05.EB>>04242000
                                                               <<05.EB>>04244000
BYTE ARRAY                                                     <<05.EB>>04246000
   TPARM'ARR(0:257),                                           <<04637>>04248000
   DELIMS(0:4),                                                <<05.EB>>04250000
   UPASSWB(0:31);                                              <<05.EB>>04252000
                                                               <<05.EB>>04254000
DEFINE                                                         <<05.EB>>04256000
   APASSWB  = UPASSWB(8) #,                                    <<05.EB>>04258000
   GPASSWB  = UPASSWB(16) #,                                   <<05.EB>>04260000
   FNAMEWB  = UPASSWB(24) #;                                   <<05.EB>>04262000
                                                               <<05.EB>>04264000
BYTE ARRAY BUFF(*) = DIRENTRY;                                 <<05.EB>>04266000
                                                               <<08.EB>>04268000
BYTE NOCARET := 0; << DON'T TRY TO PRINT CARET >>              <<08.EB>>04270000
                                                               <<05.EB>>04272000
                                                               <<05.EB>>04274000
SUBROUTINE DEF'MOVEFROMDSEG;                                   <<05.EB>>04276000
                                                               <<12.EB>>04278000
                                                               <<12.EB>>04280000
                   << ******************** >>                  <<12.EB>>04282000
                   << *  TELLOP          * >>                  <<12.EB>>04284000
                   << ******************** >>                  <<12.EB>>04286000
                                                               <<12.EB>>04288000
                                                               <<12.EB>>04290000
SUBROUTINE TELLOP(MSGNO);                                      <<12.EB>>04292000
   VALUE MSGNO; INTEGER MSGNO;                                 <<12.EB>>04294000
BEGIN                                                          <<12.EB>>04296000
   FORMNAME(3,BUFF,JMATB(JM'JNAMEB),JMATB(JM'UNAMEB),          <<12.EB>>04298000
      JMATB(JM'ANAMEB),JMATB(JM'LGNAMEB));                     <<12.EB>>04300000
   GENMSG(SYSET,MSGNO,%01000,@BUFF,DEVICE,,,,0);               <<12.EB>>04302000
      << TELL OPERATOR ILLEG. ACCESS >>                        <<12.EB>>04304000
END; << TELLOP >>                                              <<12.EB>>04306000
                                                               <<12.EB>>04308000
                                                               <<12.EB>>04310000
                   << ******************** >>                  <<12.EB>>04312000
                   << *  ERROR ROUTINES  * >>                  <<12.EB>>04314000
                   << ******************** >>                  <<12.EB>>04316000
                                                               <<12.EB>>04318000
                                                               <<05.EB>>04320000
SUBROUTINE ERRPRINT(ERRN,PNTR);                                <<05.EB>>04322000
   VALUE ERRN,PNTR;                                            <<05.EB>>04324000
   INTEGER ERRN;                                               <<05.EB>>04326000
   BYTE POINTER PNTR;                                          <<05.EB>>04328000
BEGIN                                                          <<05.EB>>04330000
   << DON'T PRINT IF PROGRAMMATIC STREAM >>                    <<00534>>04332000
   IF PCB'PTYPE < 2 THEN RETURN;                               <<00534>>04334000
   CASE COMMAND OF                                             <<05.EB>>04336000
   BEGIN                                                       <<05.EB>>04338000
      MOVE BUFF := (" DATA",0);                                <<05.EB>>04340000
      MOVE BUFF := (" HELLO",0);                               <<05.EB>>04342000
      MOVE BUFF := (" JOB",0);                                 <<05.EB>>04344000
      GO ERRLEFTPAREN; << SPECIAL LOGON >>                     <<06.EB>>04346000
      GO ERRLEFTPAREN; << SPECIAL LOGON APL1 >>                <<06.EB>>04348000
      BEGIN << SPECIAL LOGON APL2 >>                           <<06.EB>>04350000
                                                               <<06.EB>>04352000
ERRLEFTPAREN:                                                  <<06.EB>>04354000
         BUFF := 0;                                            <<06.EB>>04356000
         PARMARR := "(";                                       <<06.EB>>04358000
      END;                                                     <<06.EB>>04360000
   END;                                                        <<05.EB>>04362000
       TOS:=@PARMARR;                                          <<00068>>04368000
S'CAN:                                                         <<00068>>04370000
       SCAN * UNTIL Z'RO,1;                                    <<00068>>04372000
       IF CARRY THEN                                           <<00068>>04374000
        BEGIN                                                  <<00068>>04376000
         BYTE'CNT:=BYTE'INDX:=TOS - @PARMARR + 1;              <<00068>>04378000
       temp'byte'cnt:= byte'cnt;                               <<02322>>04380000
         MOVE TPARM'ARR:=" ";                                  <<00068>>04382000
         MOVE TPARM'ARR(1):=TPARM'ARR,(BYTE'INDX+1);           <<00068>>04384000
         MOVE TPARM'ARR:=PARMARR,(BYTE'INDX);                  <<00068>>04386000
        END                                                    <<00068>>04388000
         ELSE GO S'CAN;                                        <<00068>>04390000
     TOS:=@PARMARR;                                            <<00068>>04392000
REPEAT'SCAN:                                                   <<00068>>04394000
     SCAN * UNTIL Z'SLASH,1;                                   <<00068>>04396000
     IF CARRY THEN                                             <<00068>>04398000
      BEGIN                                                    <<00068>>04400000
       DEL;                                                    <<00068>>04402000
       GO EXIT;                                                <<00068>>04404000
      END ELSE                                                 <<00068>>04406000
          BEGIN                                                <<02322>>04408000
              @B'POINTER := TOS;                               <<02322>>04410000
              BYTE'INDX := @B'POINTER - @PARMARR +1;           <<02322>>04412000
              TEMP'BYTE'INDX := BYTE'INDX; <<SAVE BYTE INDEX>> <<02322>>04414000
              WHILE B'CHAR(BYTE'INDX) <> SPECIAL               <<02322>>04416000
              DO BEGIN                                         <<02322>>04418000
                 MOVE B'CHAR(BYTE'INDX) := " "; << BLANK PASS>><<02322>>04420000
                 BYTE'INDX := BYTE'INDX + 1;                   <<02322>>04422000
                 END;                                          <<02322>>04424000
              IF B'CHAR(BYTE'INDX) = 0 THEN GO EXIT ELSE       <<02322>>04426000
                 BEGIN                                         <<02322>>04428000
                 LEN'STRING'LEFT := TEMP'BYTE'CNT-BYTE'INDX;   <<02322>>04430000
                 MOVE B'CHAR(TEMP'BYTE'INDX) :=                <<02322>>04432000
                       B'CHAR(BYTE'INDX),(LEN'STRING'LEFT);    <<02322>>04434000
                 TEMP'BYTE'CNT := TEMP'BYTE'CNT -              <<02322>>04436000
                       (BYTE'INDX - TEMP'BYTE'INDX);           <<02322>>04438000
                 << NEW STRING LENGTH COMPUTED >>              <<02322>>04440000
          TOS:=@B'POINTER + 1;                                 <<00068>>04442000
          GO REPEAT'SCAN;                                      <<00068>>04444000
         END;                                                  <<00068>>04446000
       END;                                                    <<00068>>04448000
EXIT:                                                          <<00068>>04450000
   GENMSG(-1,@BUFF,,,,,,,GLISTDEV,,,,%100000);                 <<05.EB>>04454000
   GENMSG(-1,@PARMARR,,,,,,,GLISTDEV);                         <<05.EB>>04456000
   IF BUFF=" JOB" THEN                                         <<00068>>04458000
    MOVE PARMARR:=TPARM'ARR,(BYTE'CNT);                        <<00068>>04460000
   IF PNTR <> 0 THEN PRINTCARET(GLISTDEV,COMMAND,@PNTR         <<08.EB>>04462000
      -@PARMARR);                                              <<05.EB>>04464000
   IF PCB'PTYPE = 2 << CI >> THEN                              <<00534>>04466000
      << CIERR PRINTS MSG AND SETS JCW 'CIERROR' >>            <<00534>>04468000
      CIERR (ERRNUM := -ERRN) <<NEGATIVE SO JOB NOT KILLED>>   <<04754>>04470000
   ELSE                                                        <<00534>>04472000
      GENMSG(CISET,ERRN,,,,,,,GLISTDEV);                       <<00534>>04474000
   IF COMMAND > 2 THEN PARMARR := " ";                         <<04638>>04476000
END; << SUBROUTINE ERRPRINT >>                                 <<05.EB>>04478000
                                                               <<05.EB>>04480000
SUBROUTINE WARN(ERRN,PNTR);                                    <<05.EB>>04482000
   VALUE ERRN,PNTR;                                            <<05.EB>>04484000
   INTEGER ERRN;                                               <<05.EB>>04486000
   BYTE POINTER PNTR;                                          <<05.EB>>04488000
BEGIN                                                          <<05.EB>>04490000
   ERRPRINT(ERRN,PNTR);                                        <<05.EB>>04492000
   IF PARMASK.(14:1) THEN ERRNUM := -ERRN;                     <<00534>>04494000
END; << SUBROUTINE WARN >>                                     <<05.EB>>04496000
                                                               <<05.EB>>04498000
SUBROUTINE ERR(ERRN,PNTR);                                     <<05.EB>>04500000
   VALUE ERRN,PNTR;                                            <<05.EB>>04502000
   INTEGER ERRN;                                               <<05.EB>>04504000
   BYTE POINTER PNTR;                                          <<05.EB>>04506000
BEGIN                                                          <<05.EB>>04508000
   ERRPRINT(ERRN,PNTR);                                        <<05.EB>>04510000
   IF PARMASK.(14:1) THEN ERRNUM := ERRN;                      <<00534>>04512000
   GO OUTL;                                                    <<05.EB>>04514000
END; << SUBROUTINE ERR >>                                      <<05.EB>>04516000
                                                               <<05.EB>>04518000
SUBROUTINE ERRI(ERRN);                                         <<05.EB>>04520000
   VALUE ERRN; INTEGER ERRN;                                   <<05.EB>>04522000
BEGIN                                                          <<05.EB>>04524000
   ERRPRINT(ERRN,NOCARET);                                              04526000
   IF PARMASK.(14:1) THEN ERRNUM := ERRN;                      <<00534>>04528000
   GO OUTL;                                                    <<05.EB>>04530000
END; << SUBROUTINE ERRI >>                                     <<05.EB>>04532000
   << USED TO BAIL OUT WHEN PUTJMAT OR SPUTXDD FAIL >>         <<05.EB>>04534000
SUBROUTINE REMOVEJMAT;                                         <<05.EB>>04536000
BEGIN                                                          <<05.EB>>04538000
                                                               <<05.EB>>04540000
EXCHANGEDB(JMATDST);                                           <<05.EB>>04542000
SAVESIR := GETSIR(JMATSIR);                                    <<05.EB>>04544000
DELINKENTRY(JMAT'SCHEDHEADP,JMATXPTR);                         <<05.EB>>04546000
DEALLOCENTRY(JMATXPTR);                                        <<05.EB>>04548000
RELSIR(JMATSIR,SAVESIR);                                       <<05.EB>>04550000
EXCHANGEDB(0);                                                 <<05.EB>>04552000
                                                               <<05.EB>>04554000
END; << SUBROUTINE REMOVEJMAT >>                               <<05.EB>>04556000
                                                               <<05.EB>>04558000
                                                               <<05.EB>>04560000
                   << ******************** >>                  <<05.EB>>04562000
                   << * GETCHECKNAME     * >>                  <<05.EB>>04564000
                   << ******************** >>                  <<05.EB>>04566000
                                                               <<05.EB>>04568000
                                                               <<05.EB>>04570000
   << USED TO PARSE LOGONID >>                                 <<05.EB>>04572000
LOGICAL SUBROUTINE GETCHECKNAME(NAME,REQUIRED,PRECHAR,         <<05.EB>>04574000
      POSTCHAR,ERRNO);                                         <<05.EB>>04576000
   VALUE REQUIRED,PRECHAR,POSTCHAR,ERRNO;                      <<05.EB>>04578000
   BYTE ARRAY NAME;                                            <<05.EB>>04580000
   LOGICAL REQUIRED;                                           <<05.EB>>04582000
   BYTE PRECHAR,POSTCHAR;                                      <<05.EB>>04584000
   INTEGER ERRNO;                                              <<05.EB>>04586000
COMMENT  - NOTE, DOES NOT BLANK OUT 8-BYTE NAME ARRAY.         <<05.EB>>04588000
   USES EXTERNALS:                                             <<05.EB>>04590000
    - PLEN                                                     <<05.EB>>04592000
    - PTR                                                      <<05.EB>>04594000
    - PARM                                                     <<05.EB>>04596000
   RETURNS TRUE IF OPTIONAL PARM IS FOUND.                     <<05.EB>>04598000
;                                                              <<05.EB>>04600000
BEGIN                                                          <<05.EB>>04602000
                                                               <<05.EB>>04604000
IF REQUIRED THEN                                               <<05.EB>>04606000
BEGIN                                                          <<05.EB>>04608000
   IF PRECHAR <> 0 AND PRECHAR <> PTR THEN ERR(ERRNO,PTR);     <<05.EB>>04610000
   PLEN := NEXTPARMD(DELIMS,PTR,PARM,PTR); << FETCH PARM >>    <<05.EB>>04612000
   IF = THEN ERR(ERRNO,PARM);                                  <<05.EB>>04614000
   IF POSTCHAR <> 0 AND POSTCHAR <> PTR THEN ERR(ERRNO,PARM);  <<05.EB>>04616000
   IF PARM <> ALPHA THEN ERR(NAMENOTALPHA,PARM);               <<05.EB>>04618000
   IF PLEN > 8 THEN ERR(NAMETOOLONG,PARM);                     <<05.EB>>04620000
   MOVE NAME := PARM,(PLEN);                                   <<05.EB>>04622000
END                                                            <<05.EB>>04624000
ELSE                                                           <<05.EB>>04626000
BEGIN << NOT REQUIRED, DON'T FETCH PARM IF MISSING >>          <<05.EB>>04628000
   IF PRECHAR = 0 OR PRECHAR = PTR THEN                        <<05.EB>>04630000
   BEGIN << MAY HAVE IT >>                                     <<05.EB>>04632000
      SPLEN := PLEN;                                           <<05.EB>>04634000
      @SAVEPTR := @PTR;                                        <<05.EB>>04636000
      @SPARM := @PARM;                                         <<05.EB>>04638000
         << SAVE OLD STATE >>                                  <<05.EB>>04640000
      PLEN := NEXTPARMD(DELIMS,PTR,PARM,PTR);                  <<05.EB>>04642000
      IF > THEN                                                <<05.EB>>04644000
      BEGIN                                                    <<05.EB>>04646000
         IF POSTCHAR = 0 OR POSTCHAR = PTR THEN                <<05.EB>>04648000
         BEGIN << DO INDEED HAVE IT >>                         <<05.EB>>04650000
            GETCHECKNAME := TRUE;                              <<05.EB>>04652000
            IF PARM <> ALPHA THEN ERR(NAMENOTALPHA,PARM);      <<05.EB>>04654000
            IF PLEN > 8 THEN ERR(NAMETOOLONG,PARM);            <<05.EB>>04656000
            MOVE NAME := PARM,(PLEN);                          <<05.EB>>04658000
         END                                                   <<05.EB>>04660000
         ELSE                                                  <<05.EB>>04662000
         BEGIN << DON'T HAVE IT, BACK UP >>                    <<05.EB>>04664000
            PLEN := SPLEN;                                     <<05.EB>>04666000
            @PTR := @SAVEPTR;                                  <<05.EB>>04668000
            @PARM := @SPARM;                                   <<05.EB>>04670000
         END;                                                  <<05.EB>>04672000
      END                                                      <<05.EB>>04674000
      ELSE                                                     <<05.EB>>04676000
      BEGIN << DON'T HAVE IT, BACK UP >>                       <<05.EB>>04678000
         PLEN := SPLEN;                                        <<05.EB>>04680000
         @PTR := @SAVEPTR;                                     <<05.EB>>04682000
         @PARM := @SPARM;                                      <<05.EB>>04684000
      END;                                                     <<05.EB>>04686000
   END;                                                        <<05.EB>>04688000
END;                                                           <<05.EB>>04690000
                                                               <<05.EB>>04692000
END; << GETCHECKNAME >>                                        <<05.EB>>04694000
                                                               <<05.EB>>04696000
                                                               <<05.EB>>04698000
   << USED TO PARSE KEYS >>                                    <<05.EB>>04700000
SUBROUTINE CHECKDUPKEY(KEYNAME);                               <<05.EB>>04702000
   LOGICAL KEYNAME;                                            <<05.EB>>04704000
BEGIN                                                          <<05.EB>>04706000
   IF KEYNAME THEN WARN(DUPKEY,PARM);                          <<05.EB>>04708000
   KEYNAME := TRUE;                                            <<05.EB>>04710000
END; << SUBROUTINE CHECKDUPKEY >>                              <<05.EB>>04712000
                                                               <<05.EB>>04714000
SUBROUTINE GETNEXTPARM;                                        <<05.EB>>04716000
BEGIN                                                          <<05.EB>>04718000
   PLEN := NEXTPARM(PTR,PARM,PTR);                             <<05.EB>>04720000
END; << SUBROUTINE GETNEXTPARM >>                              <<05.EB>>04722000
                                                               <<05.EB>>04724000
LOGICAL SUBROUTINE CONVERTNUM(ERRNUM);                                  04726000
VALUE ERRNUM; INTEGER ERRNUM;                                           04728000
BEGIN                                                          <<05.EB>>04730000
   CONVERTNUM := BINARY(PARM,PLEN);                            <<05.EB>>04732000
   IF <> THEN ERR(ERRNUM,PARM);                                <<04817>>04734000
END; << SUBROUTINE CONVERTNUM >>                               <<05.EB>>04736000
                                                               <<05.EB>>04738000
                                                               <<05.EB>>04740000
<< ***************************** >>                            <<05.EB>>04742000
<<                               >>                            <<05.EB>>04744000
<< KEYWORD PARSERS & EXECUTORS   >>                            <<05.EB>>04746000
<<                               >>                            <<05.EB>>04748000
<< ***************************** >>                            <<05.EB>>04750000
                                                               <<05.EB>>04752000
                                                               <<05.EB>>04754000
                   << ******************** >>                  <<05.EB>>04756000
                   << *     TERM         * >>                  <<05.EB>>04758000
                   << ******************** >>                  <<05.EB>>04760000
                                                               <<05.EB>>04762000
SUBROUTINE DOTERM;                                             <<05.EB>>04764000
BEGIN                                                          <<05.EB>>04766000
                                                               <<05.EB>>04768000
CHECKDUPKEY(FTERM);                                            <<05.EB>>04770000
TERMTYPE := CONVERTNUM(NOTNUMTERM);                                     04772000
                                                               <<05.EB>>04774000
   << FINISHED PARSING, NOW EXECUTE >>                         <<05.EB>>04776000
IF INDEVTYPE <> TERMINAL OR SPOOLERCALL THEN WARN(             <<05.EB>>04778000
   JOBTERMINAL,PARM)                                           <<05.EB>>04780000
ELSE                                                           <<05.EB>>04782000
BEGIN                                                          <<05.EB>>04784000
   TOS := ATTACHIO(DEVICE,0,0,0,23,0,TERMTYPE,0,1);            <<05.EB>>04786000
   DEL;                                                        <<05.EB>>04788000
   IF TOS.(13:3) <> 1 THEN ERR(BADTERMTYPE,PARM);              <<04817>>04790000
END;                                                           <<05.EB>>04792000
                                                               <<05.EB>>04794000
END; << SUBROUTINE DOTERM >>                                   <<05.EB>>04796000
                                                               <<05.EB>>04798000
                                                               <<05.EB>>04800000
                   << ******************** >>                  <<05.EB>>04802000
                   << *    PRI           * >>                  <<05.EB>>04804000
                   << ******************** >>                  <<05.EB>>04806000
                                                               <<05.EB>>04808000
                                                               <<05.EB>>04810000
SUBROUTINE DOPRI;                                              <<05.EB>>04812000
BEGIN                                                          <<05.EB>>04814000
                                                               <<05.EB>>04816000
CHECKDUPKEY(FPRI);                                             <<05.EB>>04818000
IF PLEN <> 2 THEN ERR(INVPRI,PARM)                             <<04817>>04820000
ELSE                                                           <<05.EB>>04822000
BEGIN                                                          <<05.EB>>04824000
   IF PARM <> "BS" AND                                         <<05.EB>>04826000
      PARM <> "CS" AND                                         <<05.EB>>04828000
      PARM <> "DS" AND                                         <<05.EB>>04830000
      PARM <> "ES" THEN ERR(INVPRI,PARM)                       <<04817>>04832000
   ELSE                                                        <<05.EB>>04834000
   BEGIN                                                       <<05.EB>>04836000
      QUEUE := PARM;                                           <<05.EB>>04838000
      TOS := SUBQUEUE(4,QUEUE);                                <<05.EB>>04840000
      IF < THEN                                                <<05.EB>>04842000
      BEGIN                                                    <<05.EB>>04844000
         DDEL;                                                 <<05.EB>>04846000
         ERR(INVPRI,PARM);                                     <<04817>>04848000
      END                                                      <<05.EB>>04850000
      ELSE                                                     <<05.EB>>04852000
      BEGIN                                                    <<05.EB>>04854000
         PRI := TOS.(8:8);                                     <<12.EB>>04856000
         DEL;                                                  <<05.EB>>04858000
                                                               <<05.EB>>04860000
            << FINISHED PARSE, NOW EXECUTE >>                  <<05.EB>>04862000
            << USER HIGHER CAP. THAN ACCT? >>                  <<05.EB>>04864000
         IF UMAXPRI < AMAXPRI THEN UMAXPRI := AMAXPRI;         <<05.EB>>04866000
         IF PRI < UMAXPRI THEN                                 <<05.EB>>04868000
         BEGIN                                                 <<05.EB>>04870000
            PRI := UMAXPRI;                                    <<05.EB>>04872000
         END;                                                  <<05.EB>>04874000
         IF COMMAND' = CJOB AND PRI < ABSYS'JPRILIM THEN       <<12.EB>>04876000
            JMAT(JM'XPRI) := ABSYS'JPRILIM                     <<00528>>04878000
         ELSE JMAT(JM'XPRI) := PRI;                            <<12.EB>>04880000
            << DON'T OVERRIDE JOBPRI ON JOBS >>                <<12.EB>>04882000
      END;                                                     <<05.EB>>04884000
   END;                                                        <<05.EB>>04886000
END;                                                           <<05.EB>>04888000
                                                               <<05.EB>>04890000
END; << SUBROUTINE DOPRI >>                                    <<05.EB>>04892000
                                                               <<05.EB>>04894000
                                                               <<05.EB>>04896000
                   << ******************** >>                  <<05.EB>>04898000
                   << *    TIME          * >>                  <<05.EB>>04900000
                   << ******************** >>                  <<05.EB>>04902000
                                                               <<05.EB>>04904000
                                                               <<05.EB>>04906000
SUBROUTINE DOTIME;                                             <<05.EB>>04908000
BEGIN                                                          <<05.EB>>04910000
                                                               <<05.EB>>04912000
CHECKDUPKEY(FTIME);                                            <<05.EB>>04914000
IF PLEN=1 AND PARM="?" OR PLEN=5 AND PARM="UNLIM"              <<0314>> 04916000
   THEN JMAT(JM'TIMELIMIT):=-1                                 <<0314>> 04918000
ELSE                                                           <<0314>> 04920000
   BEGIN                                                       <<0314>> 04922000
   JMAT(JM'TIMELIMIT) := BINARY(PARM,PLEN);                    <<0314>> 04924000
   IF <> OR INTEGER(JMAT(JM'TIMELIMIT))<=0                     <<0314>> 04926000
      THEN ERR(INVALIDTIME,PARM);                              <<04817>>04932000
   END;                                                        <<0314>> 04936000
                                                               <<05.EB>>04938000
                                                               <<0314>> 04940000
END; << SUBROUTINE DOTIME >>                                   <<05.EB>>04942000
                                                               <<05.EB>>04944000
                                                               <<05.EB>>04946000
SUBROUTINE CHECKSETINPRI;                                      <<05.EB>>04948000
BEGIN                                                          <<05.EB>>04950000
      << MUST HAVE SM OR OP CAP. FOR HIPRI >>                  <<05.EB>>04952000
   IF INPRI = HIPRIVALUE THEN                                  <<05.EB>>04954000
      IF (CAP0 LAND %102000) = 0 THEN                          <<05.EB>>04956000
      BEGIN                                                    <<05.EB>>04958000
         INPRI := MAXINPRI;                                    <<00569>>04960000
         ERR(NOHIPRICAP,PARM);                                 <<04817>>04962000
      END;                                                     <<05.EB>>04964000
   JMAT(JM'INPRI) := INPRI;                                    <<05.EB>>04966000
END; << SUBROUTINE CHECKINPRI >>                               <<05.EB>>04968000
                                                               <<05.EB>>04970000
                                                               <<05.EB>>04972000
                   << ******************** >>                  <<05.EB>>04974000
                   << *    INPRI         * >>                  <<05.EB>>04976000
                   << ******************** >>                  <<05.EB>>04978000
                                                               <<05.EB>>04980000
                                                               <<05.EB>>04982000
SUBROUTINE DOINPRI;                                            <<05.EB>>04984000
BEGIN                                                          <<05.EB>>04986000
                                                               <<05.EB>>04988000
CHECKDUPKEY(FINPRI);                                           <<05.EB>>04990000
IF FHIPRI THEN WARN(INPRIHIPRI,PARM);                          <<01305>>04992000
   INPRI := CONVERTNUM(NOTNUMINOUTPRI);                                 04994000
      << FINISHED PARSE, NOW EXECUTE >>                        <<05.EB>>04996000
   IF INPRI < 1 THEN                                           <<05.EB>>04998000
      ERR(TOOLOWINPRI,PARM);                                   <<04817>>05002000
   IF INPRI > MAXINPRI   THEN                                  <<00569>>05006000
      ERR(TOOHIINPRI,PARM);                                    <<04817>>05010000
   CHECKSETINPRI;                                              <<05.EB>>05014000
                                                               <<05.EB>>05016000
END; << SUBROUTINE DOINPRI >>                                  <<05.EB>>05018000
                                                               <<05.EB>>05020000
                                                               <<05.EB>>05022000
                   << ******************** >>                  <<05.EB>>05024000
                   << *     HIPRI        * >>                  <<05.EB>>05026000
                   << ******************** >>                  <<05.EB>>05028000
                                                               <<05.EB>>05030000
                                                               <<05.EB>>05032000
SUBROUTINE DOHIPRI;                                            <<05.EB>>05034000
BEGIN                                                          <<05.EB>>05036000
                                                               <<05.EB>>05038000
CHECKDUPKEY(FHIPRI);                                           <<05.EB>>05040000
IF FINPRI THEN WARN(HIPRIINPRI,PARM);                          <<05.EB>>05042000
                                                               <<05.EB>>05044000
   << FINISHED PARSE, NOW EXECUTE >>                           <<05.EB>>05046000
INPRI := HIPRIVALUE;                                           <<05.EB>>05048000
CHECKSETINPRI;                                                 <<05.EB>>05050000
                                                               <<05.EB>>05052000
END; << SUBROUTINE HIPRI >>                                    <<05.EB>>05054000
                                                               <<05.EB>>05056000
                                                               <<05.EB>>05058000
                   << ******************** >>                  <<05.EB>>05060000
                   << *    OUTCLASS      * >>                  <<05.EB>>05062000
                   << ******************** >>                  <<05.EB>>05064000
                                                               <<05.EB>>05066000
                                                               <<05.EB>>05068000
SUBROUTINE DOOUTCLASS;                                         <<05.EB>>05070000
BEGIN                                                          <<05.EB>>05072000
                                                               <<05.EB>>05074000
IF COMMAND' = CHELLO THEN WARN(SESSIONOUTCLASS,PARM)           <<06.EB>>05076000
ELSE                                                           <<05.EB>>05078000
BEGIN                                                          <<05.EB>>05080000
   CHECKDUPKEY(FOUTCLASS);                                     <<05.EB>>05082000
   IF PLEN > 0 THEN                                            <<05.EB>>05084000
   BEGIN << CHECK & EXECUTE OUTCLASS DEVICE >>                 <<05.EB>>05086000
      IF GETDEVINFO(PARM,DEVINFO) <> 0 THEN ERR(INVOUTCLASS,   <<04817>>05088000
         PARM)                                                 <<05.EB>>05090000
      ELSE                                                     <<05.EB>>05092000
         IF NOT VALIDSPOOLEE(DEVINFO(1),TRUE) THEN ERR(        <<04817>>05094000
            INVOUTTYPE,PARM)                                   <<SP1SZ>>05096000
         ELSE                                                  <<SP1SZ>>05098000
      BEGIN                                                    <<05.EB>>05100000
         IF NOT CAP0.(14:1) THEN ERR(NOND,PARM)                <<04817>>05102000
            << CAN'T SPECIFY OUTCLASS DEVICE WITHOUT >>        <<05.EB>>05104000
            << NON-SHARABLE DEVICE CAPABILITY        >>        <<05.EB>>05106000
         ELSE                                                  <<05.EB>>05108000
         BEGIN                                                 <<05.EB>>05110000
               << SOLVE CLASS VS. LDEV PROBLEM >>              <<05.EB>>05112000
            TOS := DEVINFO;                                    <<05.EB>>05114000
            IF < THEN                                          <<05.EB>>05116000
            BEGIN << DEV CLASS >>                              <<05.EB>>05118000
               TOS := -TOS;                                    <<05.EB>>05120000
               TOS := TRUE;                                    <<05.EB>>05122000
            END                                                <<05.EB>>05124000
            ELSE TOS := FALSE; << LDEV >>                      <<05.EB>>05126000
            JMAT(JM'C) := TOS; << SET CLASS >>                 <<05.EB>>05128000
            JMAT(JM'JLIST) := TOS;                             <<05.EB>>05130000
         END;                                                  <<05.EB>>05132000
      END;                                                     <<05.EB>>05134000
   END;                                                        <<05.EB>>05136000
      << FINISHED EXECUTING OUTCLASS >>                        <<05.EB>>05138000
   IF PTR = "," THEN                                           <<05.EB>>05140000
   BEGIN << MAY HAVE OUTPRI,NUMCOPIES >>                       <<05.EB>>05142000
      GETNEXTPARM;                                             <<05.EB>>05144000
      IF > THEN                                                <<05.EB>>05146000
      BEGIN                                                    <<05.EB>>05148000
         OUTPRI := CONVERTNUM(NOTNUMINOUTPRI);                          05150000
            << FINISHED PARSING, NOW EXECUT OUTPRI >>          <<05.EB>>05152000
         IF OUTPRI < 1 THEN                                    <<05.EB>>05154000
             ERR(TOOLOWOUTPRI,PARM);                           <<04817>>05158000
         IF OUTPRI > 13 THEN                                   <<05.EB>>05162000
             ERR(TOOHIOUTPRI,PARM);                            <<04817>>05166000
         JMAT(JM'OUTPRI) := OUTPRI;                            <<05.EB>>05170000
            << FINISHED EXECUTING OUTPRI >>                    <<05.EB>>05172000
      END;                                                     <<05.EB>>05174000
         << NOW LOOK FOR NUMCOPIES >>                          <<05.EB>>05176000
      IF PTR = "," THEN                                        <<05.EB>>05178000
      BEGIN                                                    <<05.EB>>05180000
         GETNEXTPARM;                                          <<05.EB>>05182000
          IF = THEN ERR(EXPNUMCOPIES,PARM)                     <<04817>>05184000
         ELSE                                                  <<05.EB>>05186000
         BEGIN                                                 <<05.EB>>05188000
           NUMCOPIES := CONVERTNUM(NOTNUMCOPIES);                       05190000
               << FINISHED NUMCOPIES PARSE, NOW EXECUTE >>     <<05.EB>>05192000
            IF NUMCOPIES > 127 THEN                            <<05.EB>>05194000
              ERR(MAXCOPIES127,PARM);                          <<04817>>05198000
            IF NUMCOPIES < 1 THEN                              <<04817>>05202000
               BEGIN                                           <<04817>>05204000
                 WARN(MINCOPIES1,PARM);                        <<04817>>05206000
                 NUMCOPIES := 1;                               <<04817>>05208000
               END;                                            <<04817>>05210000
            JMAT(JM'NUMCOPIES) := NUMCOPIES;                   <<05.EB>>05212000
               << NOW PARSE FOR NEXT PARAMETER >>              <<05.EB>>05214000
            IF PTR = "," THEN                                  <<05.EB>>05216000
            BEGIN << EXTRA PARAMETER HERE >>                   <<05.EB>>05218000
               WARN(EXTRAOUTCLASSPARM,PTR);                    <<05.EB>>05220000
               GETNEXTPARM;                                    <<05.EB>>05222000
            END;                                               <<05.EB>>05224000
         END;                                                  <<05.EB>>05226000
      END;                                                     <<05.EB>>05228000
   END;                                                        <<05.EB>>05230000
END;                                                           <<05.EB>>05232000
                                                               <<05.EB>>05234000
END; << SUBROUTINE OUTCLASS >>                                 <<05.EB>>05236000
                                                               <<05.EB>>05238000
                                                               <<05.EB>>05240000
                   << ******************** >>                  <<05.EB>>05242000
                   << *      RESTART     * >>                  <<05.EB>>05244000
                   << ******************** >>                  <<05.EB>>05246000
                                                               <<05.EB>>05248000
                                                               <<05.EB>>05250000
SUBROUTINE DORESTART;                                          <<05.EB>>05252000
BEGIN                                                          <<05.EB>>05254000
                                                               <<05.EB>>05256000
CHECKDUPKEY(FRESTART);                                         <<05.EB>>05258000
                                                               <<05.EB>>05260000
   << FINSIHED PARSING, NOW EXECUTE >>                         <<05.EB>>05262000
IF COMMAND' = CJOB THEN JMAT(JM'RESTART) := TRUE               <<06.EB>>05264000
ELSE WARN(SESSIONRESTART,PARM);                                <<05.EB>>05266000
                                                               <<05.EB>>05268000
END; << SUBROUTINE DORESTART >>                                <<05.EB>>05270000
                                                               <<05.EB>>05272000
                                                               <<05.EB>>05274000
                   << ******************** >>                  <<05.EB>>05276000
                   << *    CHECKPASS     * >>                  <<05.EB>>05278000
                   << ******************** >>                  <<05.EB>>05280000
                                                               <<05.EB>>05282000
   << USED TO VERIFY LOGON >>                                  <<05.EB>>05284000
   << G/A/U = 1/2/3        >>                                  <<05.EB>>05286000
                                                               <<05.EB>>05288000
LOGICAL SUBROUTINE CHECKPASS(LEVEL,USERN,PASS);                <<05.EB>>05290000
   VALUE LEVEL;                                                <<05.EB>>05292000
   INTEGER LEVEL;                                              <<05.EB>>05294000
   ARRAY USERN;                                                <<05.EB>>05296000
   BYTE ARRAY PASS;                                            <<05.EB>>05298000
COMMENT - FETCHES EACH DIRECTORY ENTRY & CHECKS PASSWORD.      <<05.EB>>05300000
   RETURNS TRUE IF PASSWORD MUST BE CHECKED BY CI. ERROR       <<05.EB>>05302000
   CALLS ERR & NEVER RETURNS                                   <<05.EB>>05304000
;                                                              <<05.EB>>05306000
BEGIN                                                          <<05.EB>>05308000
                                                               <<05.EB>>05310000
   DIRECFIND(LEVEL&LSL(3),0D,JMAT(JM'ANAME),USERN,DUMMY,       <<05.EB>>05312000
      DIRENTRY);                                               <<05.EB>>05314000
   IF <> THEN                                                  <<12.EB>>05316000
   BEGIN                                                       <<12.EB>>05318000
      TELLOP(CONSLOGONFAIL +LEVEL);                            <<12.EB>>05320000
      ERRI(NOACCT +LEVEL); << WILL NEVER RETURN >>             <<12.EB>>05322000
   END;                                                        <<12.EB>>05324000
   IF LEVEL = ULEVEL AND NOT GROUPSPEC THEN                    <<05.EB>>05326000
   BEGIN                                                       <<05.EB>>05328000
         << GROUP REQUIRED FOR JOB/SESSION.  USE HOME GROUP>>  <<10.EB>>05330000
         << FROM USER ENTRY IF NONE SPECIFIED.             >>  <<10.EB>>05332000
      IF DIRENTRY(UHGROUP) = "  " AND COMMAND' <> CDATA        <<10.EB>>05334000
         THEN                                                  <<12.EB>>05336000
      BEGIN                                                    <<12.EB>>05338000
         TELLOP(CNOHOMEG);                                     <<12.EB>>05340000
         ERRI(NOHOMEG); << WILL NEVER RETURN >>                <<12.EB>>05342000
      END;                                                     <<12.EB>>05344000
      MOVE JMAT(JM'LGNAME) := DIRENTRY(UHGROUP),(4);           <<05.EB>>05346000
   END;                                                        <<05.EB>>05348000
   << CHECK TO SEE IF PASSWORD IS NEEDED.  IF IT    >>         <<00802>>05350000
   << IS NEEDED & IT IS SUPPLIED CHECK ITS VALIDITY >>         <<00802>>05352000
   IF LEVEL = GLEVEL AND HOMEGROUP THEN                        <<00802>>05354000
   BEGIN                                                       <<00802>>05356000
      << PASSWORD NOT REQUIRED FOR HOME GROUP >>               <<00802>>05358000
      CHECKPASS := FALSE;                                      <<00802>>05360000
      IF PASS <> " " THEN WARN(NOPASSREQD+LEVEL,NOCARET);      <<00802>>05362000
   END                                                         <<00802>>05364000
   ELSE                                                        <<00802>>05366000
   BEGIN                                                       <<00802>>05368000
      DIRINDEX := IF LEVEL = ALEVEL THEN APASSB ELSE           <<00802>>05370000
         IF LEVEL = ULEVEL THEN UPASSB ELSE GPASSB;            <<00802>>05372000
      IF DIRENTRYB(DIRINDEX) <> " " THEN                       <<00802>>05374000
      BEGIN << PASSWORD IN DIRECTORY >>                        <<00802>>05376000
         IF PASS = " " THEN CHECKPASS := TRUE                  <<00802>>05378000
         ELSE                                                  <<00802>>05380000
            IF DIRENTRYB(DIRINDEX) <> PASS,(8) THEN            <<02320>>05382000
            BEGIN                                              <<02320>>05384000
               TELLOP(CINVPASS);                               <<02320>>05386000
               ERRI(INVPASS);                                  <<02320>>05388000
            END;                                               <<02320>>05390000
      END                                                      <<00802>>05392000
      ELSE IF PASS <> " " THEN WARN(NOPASSREQD+LEVEL,NOCARET); <<00802>>05394000
         << PASS WORD PROVIDED BUT NOT NEEDED >>               <<00802>>05396000
   END;                                                        <<00802>>05398000
                                                               <<05.EB>>05400000
END; << SUBROUTINE CHECKPASS >>                                <<05.EB>>05402000
                                                               <<05.EB>>05404000
                                                               <<05.EB>>05406000
<< ***************************** >>                            <<05.EB>>05408000
<<                               >>                            <<05.EB>>05410000
<<  MAIN PROC. BODY              >>                            <<05.EB>>05412000
<<                               >>                            <<05.EB>>05414000
<< ***************************** >>                            <<05.EB>>05416000
                                                               <<05.EB>>05418000
<< INTIIALIZE ERROR RETURN PARAMETERS >>                       <<00723>>05420000
IF PARMASK.(14:1) THEN ERRNUM := 0;                            <<00723>>05422000
IF PARMASK.(15:1) THEN PARMNUM := 0;                           <<00723>>05424000
                                                               <<05.EB>>05426000
<< SET UP LOCALS >>                                            <<05.EB>>05428000
UPASSWB := " ";                                                <<05.EB>>05430000
MOVE UPASSWB(1) := UPASSWB,(31);                               <<05.EB>>05432000
FTERM := FPRI := FTIME := FINPRI :=                            <<1.RAO>>05434000
FHIPRI := FOUTCLASS := FRESTART := FALSE;                      <<05.EB>>05436000
COMMAND' := COMMAND;                                           <<06.EB>>05438000
                                                               <<05.EB>>05440000
                                                               <<05.EB>>05442000
SCAN PARMARR UNTIL %15,1;                                      <<05.EB>>05444000
BPS0 := 0; DEL;  << CHANGE CR TO 0 >>                          <<05.EB>>05446000
GROUPSPEC := FALSE; << NO GROUP SPECIFIED IN LOGON >>          <<10.EB>>05448000
                                                               <<05.EB>>05450000
                                                               <<05.EB>>05452000
<< ***************************** >>                            <<05.EB>>05454000
<<                               >>                            <<05.EB>>05456000
<< INITIALIZE JMAT ENTRY         >>                            <<05.EB>>05458000
<<                               >>                            <<05.EB>>05460000
<< ***************************** >>                            <<05.EB>>05462000
                                                               <<05.EB>>05464000
JMAT := 0;                                                     <<05.EB>>05466000
JMAT(JM'JSTATE) := JOBINTRO;                                   <<05.EB>>05468000
JMAT(JM'INPRI) := DEFINPRI;                                    <<05.EB>>05470000
   <<JOB TYPE & NUM. SET BY PUTJMAT >>                         <<05.EB>>05472000
JMAT(JM'UNAME) := "  ";                                        <<05.EB>>05474000
MOVE JMAT(JM'UNAME +1) := JMAT(JM'UNAME),(15);                 <<05.EB>>05476000
   << BLANK OUT U,A,J,G NAMES >>                               <<05.EB>>05478000
JMAT(JM'JIN) := DEVICE.(8:8);                                  <<05.EB>>05480000
JMAT(JM'CALENDAR) := CALENDAR;                                 <<05.EB>>05482000
JMATD(JM'CLOCK) := CLOCK;                                      <<05.EB>>05484000
   << MAIN PIN SET BY INITJSMP >>                              <<05.EB>>05486000
JMAT(JM'XPRI) := IF COMMAND' = CJOB THEN ABSYS'JOBPRI          <<06.EB>>05488000
   ELSE DEFXPRI;                                               <<05.EB>>05490000
JMAT(JM'TIMELIMIT) := IF COMMAND' = CJOB THEN                  <<00191>>05492000
   ABSOLUTE(CPUTIMELIMIT)                                      <<00191>>05494000
   ELSE  -1;                                                   <<00191>>05496000
JMAT(JM'COPIESW) := 0;                                         <<05.EB>>05498000
IF SEQNUMPASSED THEN   <<USE SPOOLER PROVIDED VALUE>>          <<1.RAO>>05500000
   JMAT(JM'SEQUENCED) := SEQUENCED                             <<1.RAO>>05502000
ELSE   <<USE DEVREC PROVIDED VALUE>>                           <<1.RAO>>05504000
   JMAT(JM'SEQUENCED) := FALSE;  <<DEFAULT, NO CHECK RIGHT NOW><<1.RAO>>05506000
IF SPOOLERCALL THEN JMAT(JM'SPOOLED) := TRUE;                  <<05.EB>>05508000
   <<SCHEDULE LINK/ORIGJIN-ORIGJLIST SET BY PUTJMAT, >>        <<05.EB>>05510000
   << THEN BY INITJSMP                               >>        <<05.EB>>05512000
                                                               <<05.EB>>05514000
                                                               <<05.EB>>05516000
<< ***************************** >>                            <<05.EB>>05518000
<<                               >>                            <<05.EB>>05520000
<<  FETCH DEVICE INFO            >>                            <<05.EB>>05522000
<<                               >>                            <<05.EB>>05524000
<< ***************************** >>                            <<05.EB>>05526000
                                                               <<05.EB>>05528000
MOVEFROMDSEG(@INDEVTYPE,LDTDST,DEVICE*LDTSIZE +2,1);           <<05.EB>>05530000
MOVEFROMDSEG(@OUTDEV   ,LDTDST,DEVICE*LDTSIZE +3,1);           <<05.EB>>05532000
INDEVTYPE := LOGICAL(INDEVTYPE) LAND %77;                      <<05.EB>>05534000
JMAT(JM'C) := OUTDEV.(7:1);                                    <<05.EB>>05536000
OUTDEV := OUTDEV.(8:8);                                        <<05.EB>>05538000
JMAT(JM'JLIST) := OUTDEV;                                      <<05.EB>>05540000
                                                               <<05.EB>>05542000
   << SET GENMSG LIST DEVICE. $STDLIST = -2                    <<05.EB>>05544000
   << $STDLIST IS LDEV IF CALLER IS DEVREC OR                  <<05.EB>>05546000
   << SPOOLING RUNNING ON JSMP                                 <<05.EB>>05548000
   <<>>                                                        <<05.EB>>05550000
GLISTDEV := -2; << $STDLIST >>                                 <<05.EB>>05552000
IF NOT SPOOLERCALL AND NOT JMAT(JM'C) THEN                     <<05.EB>>05554000
BEGIN                                                          <<05.EB>>05556000
   MOVEFROMDSEG(@OUTDEVTYPE,LDTDST,JMAT(JM'JLIST)*             <<05.EB>>05558000
      LDTSIZE +2,1);                                           <<05.EB>>05560000
   IF OUTDEVTYPE.(10:6) = TERMINAL THEN GLISTDEV :=            <<05.EB>>05562000
      JMAT(JM'JLIST);                                          <<05.EB>>05564000
END;                                                           <<05.EB>>05566000
                                                               <<05.EB>>05568000
                                                               <<05.EB>>05570000
<< ***************************** >>                            <<05.EB>>05572000
<<                               >>                            <<05.EB>>05574000
<<  LIST DEV SET UP, CAN NOW     >>                            <<05.EB>>05576000
<< HAVE ERRORS & REPORT THEM.    >>                            <<05.EB>>05578000
<< ***************************** >>                            <<05.EB>>05580000
                                                               <<05.EB>>05582000
                                                               <<05.EB>>05584000
<< ***************************** >>                            <<05.EB>>05586000
<<                               >>                            <<05.EB>>05588000
<<  SOLVE FUNNYTERM PROBLEM      >>                            <<05.EB>>05590000
<<                               >>                            <<05.EB>>05592000
<< ***************************** >>                            <<05.EB>>05594000
                                                               <<05.EB>>05596000
IF COMMAND' > CJOB THEN                                        <<06.EB>>05598000
BEGIN << SPECIAL LOGON,                             >>         <<05.EB>>05600000
      << TRANSLATE FROM APL, FIND RIGHT END OF CMD, >>         <<05.EB>>05602000
      << SET FUNNYTERM, FIND LOGON ID               >>         <<05.EB>>05604000
   @CICOMPTRW := @PARMARR&LSR(1);                              <<06.EB>>05606000
      << ASSUMES '(' IN 1ST BYTE, ON WORD BOUNDARY >>          <<06.EB>>05608000
   FUNNYTERM := COMMAND -CJOB;                                 <<05.EB>>05610000
   COMMAND' := CHELLO; << CHANGE CMD BACK TO HELLO >>          <<06.EB>>05612000
   SCAN PARMARR UNTIL 0,1;                                     <<05.EB>>05614000
   CMDLEN := TOS -@PARMARR;                                    <<05.EB>>05616000
   APLTRANSLATEIN(PARMARR,CMDLEN,FUNNYTERM);                   <<05.EB>>05618000
   MOVE DELIMS := ("()",0);                                    <<05.EB>>05620000
   @PARM := @PARMARR;                                          <<05.EB>>05622000
   X := 1;                                                     <<05.EB>>05624000
                                                               <<05.EB>>05626000
      << FIND LAST ")" & CHECK FOR MATCHING LEFT & RIGHT>>     <<05.EB>>05628000
   DO BEGIN                                                    <<05.EB>>05630000
      << ONLY UPDATE SAVEPTR IF TERMINATING DELIM IS ")" >>    <<02320>>05632000
      IF PARM = ")" THEN @SAVEPTR := @PARM;                    <<02320>>05634000
                                                               <<02320>>05636000
      X := X + (IF PARM = "(" THEN 1 ELSE                      <<05.EB>>05638000
         IF PARM = ")" THEN -1 ELSE 0);                        <<05.EB>>05640000
      NEXTPARMD(DELIMS,PARM,PTR,PARM);                         <<05.EB>>05642000
   END UNTIL CARRY; << HIT END OF STRING >>                    <<05.EB>>05644000
                                                               <<05.EB>>05646000
   X := X-1;                                                   <<05.EB>>05648000
   IF > THEN ERR(MISSINGRIGHTPAREN,PTR);                       <<05.EB>>05650000
   IF < THEN ERR(MISSINGLEFTPAREN,PTR);                        <<05.EB>>05652000
   @PTR := @SAVEPTR(1);  << SET PTR FOR REMAINDER OF PARSING >><<02320>>05654000
   CICOMLEN := @SAVEPTR -@PARMARR;                             <<05.EB>>05656000
   PARMARR := " "; <<CI NEEDS IMAGE ON WORD BOUNDARY >>        <<06.EB>>05658000
                   << BLANK OUT '('                  >>        <<06.EB>>05660000
                   << CICOMLEN IS 1 GREATER THAN LENGTH>>      <<06.EB>>05662000
                                                               <<05.EB>>05664000
      << (CMD)  MIKE.MPEM;...                        >>        <<02320>>05666000
      <<  \  \ \              \--PARM                >>        <<02320>>05668000
      <<   \  \ \----------------PTR                 >>        <<02320>>05670000
      <<    \  \                                     >>        <<02320>>05672000
      <<     \  \----------------SAVEPTR }           >>        <<02320>>05674000
      <<      \------------------CICOMPTR} CICOMLEN  >>        <<02320>>05676000
                                                               <<05.EB>>05678000
   JMAT(JM'CILOG) := FUNNYTERM;                                <<05.EB>>05680000
END                                                            <<05.EB>>05682000
ELSE                                                           <<05.EB>>05684000
BEGIN << NORMAL LOGON >>                                       <<05.EB>>05686000
   @PTR := @PARMARR; << SETUP FOR GETCHECKNAME >>              <<05.EB>>05688000
   FUNNYTERM := 0;                                             <<05.EB>>05690000
END;                                                           <<05.EB>>05692000
                                                               <<11.EB>>05694000
                                                               <<11.EB>>05696000
<< ***************************** >>                            <<11.EB>>05698000
<<                               >>                            <<11.EB>>05700000
<<  UPSHIFT TO END OF STRING     >>                            <<11.EB>>05702000
<<                               >>                            <<11.EB>>05704000
<< ***************************** >>                            <<11.EB>>05706000
                                                               <<11.EB>>05708000
UPSHIFT(PARMARR);                                              <<11.EB>>05710000
                                                               <<05.EB>>05712000
                                                               <<05.EB>>05714000
<< ***************************** >>                            <<05.EB>>05716000
<<                               >>                            <<05.EB>>05718000
<<  PARSE LOGON ID               >>                            <<05.EB>>05720000
<<                               >>                            <<05.EB>>05722000
<< ***************************** >>                            <<05.EB>>05724000
                                                               <<05.EB>>05726000
COMMENT                                                        <<05.EB>>05728000
   SYNTAX FOR PARMS IN :HELLO/JOB/DATA/()                      <<05.EB>>05730000
                                                               <<05.EB>>05732000
   USED                                                        <<05.EB>>05734000
   S|J|D|                                                      <<05.EB>>05736000
   X X X  [JNAME,] UNAME [/UPASS] .ACCT [/APASS]               <<05.EB>>05738000
   X X    [,GROUP] [/GPASS]                                    <<05.EB>>05740000
       X  [<SEMI-COLON> FILENAME]                              <<05.EB>>05742000
1  X X    TERM=<TERMTYPE>                                      <<05.EB>>05744000
2  X X    PRI= {BS}                                            <<05.EB>>05746000
               {CS}                                            <<05.EB>>05748000
               {DS}                                            <<05.EB>>05750000
               {ES}                                            <<05.EB>>05752000
3  X X    TIME=<CPUSECS>                                       <<05.EB>>05754000
4  X X    INPRI=<INPRIORITY>                                   <<05.EB>>05756000
5  X X    HIPRI                                                <<05.EB>>05758000
6    X    OUTCLASS=[DEV] [,[OUTPRI] [,NUMCOPIES]               <<05.EB>>05760000
7    X    RESTART                                              <<05.EB>>05762000
   ;                                                           <<05.EB>>05764000
                                                               <<05.EB>>05766000
<< PARMS ARE PARSED 1 AT A TIME FROM LEFT TO RIGHT. PTR        <<05.EB>>05768000
<< AT START POINTS TO DELIM IN FRONT OF PARM. AFTER CALL       <<05.EB>>05770000
<< TO GET GETCHECKNAME (OR ANYTHING THAT CALLS NEXTPARM)       <<05.EB>>05772000
<< PARM POINTS TO PARM & PTR POINTS TO TRAILING DELIM.         <<05.EB>>05774000
<<>>                                                           <<05.EB>>05776000
                                                               <<05.EB>>05778000
MOVE DELIMS := (",/.;",0); << SPECIAL ONES FOR LOGON >>        <<05.EB>>05780000
   GETCHECKNAME(JMATB(JM'JNAMEB) ,FALSE,  0,",",EXPJNAME);     <<10.EB>>05782000
   GETCHECKNAME(JMATB(JM'UNAMEB)  ,TRUE,  0,  0,EXPUNAME);     <<10.EB>>05784000
   GETCHECKNAME(UPASSWB          ,FALSE,"/",  0,EXPUPASS);     <<10.EB>>05786000
   GETCHECKNAME(JMATB(JM'ANAMEB)  ,TRUE,".",  0,EXPANAME);     <<01304>>05788000
   GETCHECKNAME(APASSWB          ,FALSE,"/",  0,EXPAPASS);     <<10.EB>>05790000
IF COMMAND' = CDATA THEN     << :DATA >>                       <<10.EB>>05792000
   GETCHECKNAME(FNAMEWB          ,FALSE,";",  0,EXPFNAME)      <<10.EB>>05794000
ELSE                                                           <<10.EB>>05796000
BEGIN                                                          <<10.EB>>05798000
   GROUPSPEC := << SET IF GROUP NAME FOUND >>                  <<10.EB>>05800000
   GETCHECKNAME(JMATB(JM'LGNAMEB),FALSE,",",  0,EXPGNAME);     <<10.EB>>05802000
   GETCHECKNAME(GPASSWB         , FALSE,"/",  0,EXPGPASS);     <<10.EB>>05804000
END;                                                           <<10.EB>>05806000
                                                               <<05.EB>>05808000
                                                               <<05.EB>>05810000
<< ***************************** >>                            <<05.EB>>05812000
<<                               >>                            <<05.EB>>05814000
<<     VERIFY LOGON ID, IA/BA    >>                            <<05.EB>>05816000
<<                               >>                            <<05.EB>>05818000
<< ***************************** >>                            <<05.EB>>05820000
                                                               <<05.EB>>05822000
                                                               <<05.EB>>05824000
                                                               <<05.EB>>05826000
                                                               <<05.EB>>05828000
JMAT(JM'A) := CHECKPASS(ALEVEL,DUMMY,APASSWB);                 <<05.EB>>05830000
CAPD := DIRENTRYD(ACAPD);                                      <<05.EB>>05832000
AMAXPRI := DIRENTRY(AMAXJOBW).(8:8);                           <<05.EB>>05834000
JMAT(JM'U) := CHECKPASS(ULEVEL,JMAT(JM'UNAME),UPASSWB);        <<05.EB>>05836000
CAP0 := CAP0 LAND DIRENTRY(UCAP);                              <<05.EB>>05838000
CAP1 := CAP1 LAND DIRENTRY(UCAP +1);                           <<05.EB>>05840000
UMAXPRI := DIRENTRY(UMAXJOB).(8:8);                            <<05.EB>>05842000
HOMEGROUP := IF JMATB(JM'LGNAMEB) = DIRENTRYB(UHGROUPB),(8)    <<00802>>05844000
             THEN TRUE ELSE FALSE;                             <<00802>>05846000
   << CI WILL CHECK PASSWORDS FOR SESSION     >>               <<0312>> 05848000
   << DON'T CHECK GROUP PASS FOR :DATA        >>                        05850000
IF COMMAND' = CDATA THEN                                                05852000
   IF JMAT(JM'PASSWORDS) <> 0 THEN                             <<04207>>05854000
      BEGIN                                                    <<04207>>05856000
      TELLOP(CMISPASS);                                        <<04207>>05858000
      ERRI(MISPASS);                                           <<04207>>05860000
      END                                                      <<04207>>05862000
   ELSE                                                        <<04207>>05864000
ELSE                                                           <<14.EB>>05866000
BEGIN                                                          <<14.EB>>05868000
   JMAT(JM'G) := CHECKPASS(GLEVEL,JMAT(JM'LGNAME),GPASSWB);    <<14.EB>>05870000
   IF COMMAND'=CJOB AND JMAT(JM'PASSWORDS)<>0 THEN             <<0312>> 05872000
      BEGIN                                                    <<0312>> 05874000
      TELLOP(CMISPASS);                                        <<0312>> 05876000
      ERRI(MISPASS);                                           <<0312>> 05878000
      END;                                                     <<0312>> 05880000
END;                                                           <<14.EB>>05882000
                                                               <<05.EB>>05884000
                                                               <<05.EB>>05886000
                                                               <<05.EB>>05888000
<< ***************************** >>                            <<05.EB>>05890000
<<                               >>                            <<05.EB>>05892000
<<   PARSE & VERIFY KEY WORDS    >>                            <<05.EB>>05894000
<<                               >>                            <<05.EB>>05896000
<< ***************************** >>                            <<05.EB>>05898000
                                                               <<05.EB>>05900000
                                                               <<05.EB>>05902000
                                                               <<05.EB>>05904000
IF COMMAND' = CDATA AND PTR <> 0 THEN ERR(EXTRAPARMS,PTR);     <<06.EB>>05906000
   << NO KEYWORDS FOR :DATA  >>                                <<05.EB>>05908000
                                                               <<05.EB>>05910000
   << BIG LOOP FOR KEY WORDS >>                                <<05.EB>>05912000
WHILE PTR <> 0 DO                                              <<05.EB>>05914000
BEGIN                                                          <<05.EB>>05916000
   @OLDPARMPTR := @PTR;                                        <<05.EB>>05918000
   GETNEXTPARM;                                                <<05.EB>>05920000
   IF = THEN                                                   <<05.EB>>05922000
   BEGIN << HIT DELIM >>                                       <<05.EB>>05924000
      WARN(IGNOREDDELIM,OLDPARMPTR);                           <<05.EB>>05926000
   END                                                         <<05.EB>>05928000
   ELSE                                                        <<05.EB>>05930000
   BEGIN << SOME CHARS IN PARM >>                              <<05.EB>>05932000
      KEYNO := JOBKEYS(PARM,PLEN);                             <<05.EB>>05934000
      IF KEYNO = 0 THEN                                        <<05.EB>>05936000
      BEGIN                                                    <<05.EB>>05938000
         IF PTR = 0 AND PLEN = 8 AND NOT SEQNUMPASSED THEN     <<1.RAO>>05940000
         BEGIN << CHECK FOR LINE NUMBERS >>                    <<08.EB>>05942000
            DBINARY(PARM,8);                                   <<08.EB>>05944000
            IF = THEN JMAT(JM'SEQUENCED) := TRUE               <<1.RAO>>05946000
          ELSE ERR(UNKNOWNPARM,PARM);                          <<04817>>05948000
         END                                                   <<08.EB>>05950000
         ELSE                                                  <<08.EB>>05952000
         BEGIN                                                 <<08.EB>>05954000
          ERR(UNKNOWNPARM,PARM);                               <<04817>>05956000
            IF PTR = "=" THEN NEXTPARM(PTR,PARM,PTR);          <<08.EB>>05958000
            << SKIP OVER 2ND HALF >>                           <<05.EB>>05960000
         END;                                                  <<08.EB>>05962000
      END                                                      <<05.EB>>05964000
      ELSE                                                     <<05.EB>>05966000
      BEGIN  << NOW GET KEY VALUE. KEY=VALUE >>                <<05.EB>>05968000
             << 1ST LOOK FOR KEYS THAT DON'T HAVE VALUE >>     <<05.EB>>05970000
         IF KEYNO = KHIPRI OR KEYNO = KRESTART THEN            <<05.EB>>05972000
         BEGIN                                                 <<05.EB>>05974000
          IF PTR ="=" THEN ERR(NOEQUALKEY,PTR);                <<04817>>05976000
            IF KEYNO = KHIPRI THEN DOHIPRI                     <<05.EB>>05978000
            ELSE DORESTART;                                    <<05.EB>>05980000
         END                                                   <<05.EB>>05982000
         ELSE                                                  <<05.EB>>05984000
         BEGIN << WORK ON OTHER KEYS >>                        <<05.EB>>05986000
          IF PTR <> "=" THEN ERR(EXPKEYVALUE,PTR)              <<04817>>05988000
            ELSE                                               <<05.EB>>05990000
            BEGIN << THERE IS "=" >>                           <<05.EB>>05992000
               GETNEXTPARM;                                    <<05.EB>>05994000
               IF = AND KEYNO <> KOUTCLASS THEN                <<05.EB>>05996000
                ERR(EXPKEYVALUE,PTR)                           <<04817>>05998000
               ELSE                                            <<05.EB>>06000000
               BEGIN << FINALLY HAVE KEY VALUE >>              <<05.EB>>06002000
                  CASE KEYNO OF                                <<05.EB>>06004000
                  BEGIN                                        <<05.EB>>06006000
                                                               <<05.EB>>06008000
<< **************************************************** >>     <<05.EB>>06010000
<<                                                      >>     <<05.EB>>06012000
<<            PARSE KEYWORD VALUES                      >>     <<05.EB>>06014000
<<                                                      >>     <<05.EB>>06016000
<< **************************************************** >>     <<05.EB>>06018000
                                                               <<05.EB>>06020000
                     ; << 0 NOT USED >>                        <<05.EB>>06022000
                     DOTERM;                                   <<05.EB>>06024000
                     DOPRI;                                    <<05.EB>>06026000
                     DOTIME;                                   <<05.EB>>06028000
                     DOINPRI;                                  <<05.EB>>06030000
                     ; << HIPRI ALREADY DONE >>                <<05.EB>>06032000
                     DOOUTCLASS;                               <<05.EB>>06034000
                     ; << RESTART ALREADY DONE >>              <<05.EB>>06036000
                                                               <<05.EB>>06038000
                  END; << CASE ON KEYNO >>                     <<05.EB>>06040000
                                                               <<05.EB>>06042000
               END; << OF KEY VALUE >>                         <<05.EB>>06044000
            END; << OF =            >>                         <<05.EB>>06046000
         END; << OF OTHER TYPES OF KEYS >>                     <<05.EB>>06048000
      END; << OF EVERYTHING TO DO WITH KEYS >>                 <<05.EB>>06050000
   END; << END OF PARM PAIR                 >>                 <<05.EB>>06052000
END; << OF BIG KEY PARM LOOP                   >>              <<05.EB>>06054000
                                                               <<05.EB>>06056000
                                                               <<05.EB>>06058000
<< ***************************** >>                            <<05.EB>>06060000
<<                               >>                            <<05.EB>>06062000
<< FINISH JMAT ENTRY             >>                            <<05.EB>>06064000
<<                               >>                            <<05.EB>>06066000
<< ***************************** >>                            <<05.EB>>06068000
                                                               <<05.EB>>06070000
IF NOT FOUTCLASS THEN                                          <<05.EB>>06072000
BEGIN                                                          <<05.EB>>06074000
   JMAT(JM'DI) := SYS'LPDTP(DEVICE*LPDTSIZE +LP'DI);           <<05.EB>>06076000
   IF COMMAND' <> CHELLO THEN JMAT(JM'I) := FALSE;             <<06.EB>>06078000
END;                                                           <<05.EB>>06080000
                                                               <<05.EB>>06082000
                                                               <<05.EB>>06084000
                                                               <<05.EB>>06086000
<< ***************************** >>                            <<05.EB>>06088000
<<                               >>                            <<05.EB>>06090000
<< SET UP IDD, PUTJMAT, SCHEDULE >>                            <<05.EB>>06092000
<<                               >>                            <<05.EB>>06094000
<< ***************************** >>                            <<05.EB>>06096000
                                                               <<05.EB>>06098000
IDD := 0;                                                      <<05.EB>>06100000
IDD(1) := 0;                                                   <<05.EB>>06102000
MOVE IDD(ID'UNAME) := JMAT(JM'UNAME),(12);                     <<05.EB>>06104000
   << U,A,J NAME >>                                            <<05.EB>>06106000
IDD(ID'DEVFILEID) := 0;                                        <<05.EB>>06108000
MOVE IDD(ID'DEVFILEID +1) := IDD(ID'DEVFILEID),(IDDSIZE        <<05.EB>>06110000
   -ID'DEVFILEID -1);                                          <<05.EB>>06112000
IDD(ID'STATE) := IF SPOOLERCALL THEN DFACTIVE ELSE DFREADY;    <<05.EB>>06114000
IDD(ID'RESTART) := JMAT(JM'RESTART);                           <<05.EB>>06116000
IF COMMAND' = CDATA THEN                                       <<06.EB>>06118000
BEGIN << FINISH EVERYTHING UP FOR :DATA >>                     <<05.EB>>06120000
   IDD(ID'DATA) := TRUE;                                       <<05.EB>>06122000
   MOVE IDDB(ID'FNAMEB) := FNAMEWB,(8);                        <<05.EB>>06124000
   IF SPUTXDD(FALSE,DEVICE,IDD,IDDSP) <> 0 THEN ERRI(IDDFULL)  <<05.EB>>06126000
   ELSE                                                        <<05.EB>>06128000
   BEGIN                                                       <<05.EB>>06130000
      IF SPOOLERCALL THEN @IDDSUBP := @IDDSP                   <<05.EB>>06132000
      ELSE                                                     <<05.EB>>06134000
      BEGIN                                                    <<05.EB>>06136000
         IF INDEVTYPE = TERMINAL THEN                          <<05.EB>>06138000
         BEGIN << DISABLE BREAK & TURN OFF TIMEOUT >>          <<05.EB>>06140000
            ATTACHIO(DEVICE,0,0,0,21,0,0,0,%13);               <<05.EB>>06142000
                                                               <<02858>>06144000
            << If the LPDT logging on bit is used with this >> <<02858>>06146000
            << terminal, turn it off since logon sequence   >> <<02858>>06148000
            << for DATA commands is done.  For now, ignore  >> <<02858>>06150000
            << disconnect of terminal. >>                      <<02858>>06152000
                                                               <<02858>>06154000
            IF SPECIAL'TERMINAL(DEVICE) THEN                   <<02858>>06156000
               BEGIN                                           <<02858>>06158000
               DISABLE;                                        <<02858>>06160000
               LPDT(DEVICE*LPDTSIZE + LP'LOGON) := FALSE;      <<02858>>06162000
               ENABLE;                                         <<02858>>06164000
               END;                                            <<02858>>06166000
         END;                                                  <<05.EB>>06168000
      END;                                                     <<05.EB>>06170000
      IF PARMASK.(11:1) THEN @JMATP := 0;                      <<00534>>06172000
   END;                                                        <<05.EB>>06174000
   RETURN;                                                     <<05.EB>>06176000
                                                               <<05.EB>>06178000
      << EXIT POINT FOR :DATA >>                               <<05.EB>>06180000
                                                               <<05.EB>>06182000
END;                                                           <<05.EB>>06184000
                                                               <<05.EB>>06186000
   << SCHEDULE JOB >>                                          <<05.EB>>06188000
IF NOT PUTJMAT(JMAT,JMATXPTR) THEN ERRI(JMATFULL);             <<05.EB>>06190000
                                                               <<05.EB>>06192000
   << PUT CICOMIMAGE INTO TABLE >>                             <<05.EB>>06194000
IF FUNNYTERM <> 0 AND NOT CILOGTABLE(CILOGPUTENTRY,@JMATXPTR,  <<05.EB>>06196000
   CICOMLEN,CICOMPTRW) THEN                                    <<05.EB>>06198000
BEGIN                                                          <<05.EB>>06200000
   REMOVEJMAT;                                                 <<05.EB>>06202000
   ERRI(CILOGFULL);                                            <<05.EB>>06204000
END;                                                           <<05.EB>>06206000
                                                               <<05.EB>>06208000
   << FINISH IDD FOR JOB/SESSION >>                            <<05.EB>>06210000
MOVE IDD(ID'FNAME) := "$STDIN  ";                              <<05.EB>>06212000
IDD(ID'JOBNUM) := JMAT(JM'JOBNUM);                             <<05.EB>>06214000
IF SPUTXDD(FALSE,DEVICE,IDD,IDDSP) <> 0 THEN                   <<05.EB>>06216000
BEGIN                                                          <<05.EB>>06218000
   IF FUNNYTERM <> 0 THEN CILOGTABLE(CILOGREMENTRY,@JMATXPTR,  <<05.EB>>06220000
      CICOMLEN,CICOMPTRW);                                     <<05.EB>>06222000
   REMOVEJMAT;                                                 <<05.EB>>06224000
   ERRI(IDDFULL);                                              <<05.EB>>06226000
END;                                                           <<05.EB>>06228000
IF NOT SPOOLERCALL THEN                                        <<05.EB>>06230000
BEGIN                                                          <<05.EB>>06232000
   IF COMMAND' = CJOB AND INDEVTYPE = TERMINAL THEN            <<06.EB>>06234000
         << TURN OFF TIMEOUT >>                                <<05.EB>>06236000
      ATTACHIO(DEVICE,0,0,0,21,0,2,0,%13);                     <<05.EB>>06238000
   SCHEDULEJOB(JMATXPTR);<< WAKE UCOP - REQ. QUEUE NOT USED>>  <<05.EB>>06240000
END                                                            <<05.EB>>06242000
ELSE @IDDSUBP := @IDDSP;                                       <<05.EB>>06244000
IF PARMASK.(11:1) THEN @JMATP := @JMATXPTR;                    <<00534>>06246000
IF PARMASK.(13:1) THEN JOBNUM := JMAT(JM'JOBNUM);              <<00534>>06248000
                                                               <<05.EB>>06250000
OUTL:                                                          <<05.EB>>06252000
END; << PROCEDURE STARTDEVICE >>                               <<05.EB>>06254000
$TITLE "UPSHIFT"                                               <<09.EB>>06256000
PROCEDURE UPSHIFT(STRING);                                     <<09.EB>>06258000
   BYTE ARRAY STRING;                                          <<09.EB>>06260000
   OPTION INTERNAL;                                            <<09.EB>>06262000
BEGIN                                                          <<09.EB>>06264000
                                                               <<09.EB>>06266000
TOS := @STRING;                                                <<09.EB>>06268000
DO BEGIN                                                       <<09.EB>>06270000
   ASSEMBLE(DUP);                                              <<09.EB>>06272000
   MOVE * := * WHILE ANS,1;                                    <<09.EB>>06274000
   TOS := TOS +1;                                              <<09.EB>>06276000
END UNTIL BPS0(-1) = 0;                                        <<09.EB>>06278000
                                                               <<09.EB>>06280000
END; << PROCEDURE UPSHIFT >>                                   <<09.EB>>06282000
$CONTROL SEGMENT=MAIN                                          <<09.EB>>06284000
END.   << of NURSERY -- module 76 >>                           <<02858>>06286000
