TITLE OPR TWOSEG SEARCH JOBDAT,UUOSYM .REQUEST REL:HELPER.REL ; ; FEATURES ; IFNDEF DEBUG, ;DEBUGGING FEATURE SWITCH IFNDEF PLEN, ;PUSH DOWN LIST LENGTH IFNDEF OPRLOG, ;OPR LOGGING FEATURE IFNDEF SPTWHO, ;SPIRIT WHO FEATURE IFNDEF SPTWHT, ;SPIRIT WHAT FEATURE IFNDEF SPTTIM, ;SPIRIT TIMES FEATURE IFNDEF SPTTLG, ;SPIRIT TIMES LOGGING FEATURE IFNDEF SPTKJO, ;SPIRIT KJOB FEATURE IFNDEF SPTKJD, ;SPIRIT KJOB FEATURE FOR DETACHED JOBS IFNDEF SPTDSK, ;SPIRIT DSK WATCH FEATURE IFNDEF SPTWRN, ;SPIRIT DEFAULT WARNING TIME IFNDEF SPTSIZ, ;SPIRIT DEFAULT MAXIMUM TIMES ; LOG FILE BLOCK SIZE IFNDEF SCLSES, ;MAX SCHEDULER CLASS TABLE SIZE IFNDEF TUFSER, ;TUFTS CPU SERIEL NUMBER ; ; ACC'S ; SW==0 PDP==1 CHAR==2 DEC==3 SIX==4 OCT==3 STS==5 CHAN==6 ADR==7 RNG==10 INS==7 LINE==3 DAT==3 TIM==3 ; ; SWITCHES ; RRD==400000 PRV==200000 DB==100000 JLG==040000 LCK==020000 CF==010000 ; ; TEMPORARY SWITCHES ; FST==000400 ;LEFT HALF SLW==000200 PRF==000100 CPRV==400000 ;RIGHT HALF DEP==200000 CCB==040000 ERI==020000 SPT==010000 FND==004000 TOPN==002000 FCM==001000 POUT==000400 PTL==000200 TLGN==000100 AGN==000020 PLG==000010 NFL==000004 WHY==000002 CLG==000001 ; ; CHANNELS ; TTY==1 PTY==2 LOG==3 DWHO==4 DWHT==5 TMS==6 TMSL==7 TMSR==10 LPT==11 CMD==12 CMF==13 ; ; OPDEF'S ; OPDEF CALL [PUSHJ PDP,] OPDEF RETURN [POPJ PDP,] OPDEF NOP [JUMP] OPDEF NOTDEF [CALL ER090] ; ; MISC ; JRUN==400000 ;JBTSTS BITS CMWB==200000 JNA==040000 NSWP==010000 SWP==002000 JLOG==000004 CLKR==400000 JDCON==020000 SPYSEG==400000 ;JBTSGN BITS SHRSEG==200000 JQ.PQ1==31 ;JOB QUEUES JQ.PQ2==32 JQ.HPQ==34 DDBLDB==21 ;DDB WORDS LDBBYT==17 ;LDB WORDS AT.MON==400000 ;ATTACH UUO BITS AT.USR==200000 AT.DET==100000 W.BAT==400000 ;WHO STATUS BITS W.USR==200000 W.LCL==100000 W.DSL==040000 W.LNE==020000 W.ACT==010000 W.VM==004000 W.SYJ==002000 W.ADJ==001000 W.ACJ==000400 T.NLG==400000 ;TIMES STATUS BITS IF2,> ;DUMMY CTEST COMMAND PRO== ;PROCEED AFTER ^C COMMAND CRSHWD==30 ;INTERNAL BITS VERSION==6 MOD==36 SUBTTL LOW DATA ; LOC .JBVER <2>B2+B11+B35 ; RELOC 0 INTEGER MYPPN,MYJOB,PTYDSP,CTYLNE,PPN,JOB,ADDR,VALUE INTEGER PRVPPN,LERR,QUEPPN,TOPJOB,HBCNT,LST,LSTJOB INTEGER JIFFY,PAGE,TABPOS INTEGER WRNOUT,CCADR,OLDLNE,SYSSER,HLPPPN,CCLENT INTEGER MYLINE,CRETIM,NXTTIM,NOW,CMDCNT,BREAK INTEGER WHOPPN,WHOLNE,WHOPRG,WHORUN,WHOHPQ,WHODSK,WHOLOK INTEGER WHODRD,WHODWT,WHORAT,WHOSTS,WHOLIM INTEGER REECNT,CMDADR,LCLSW,LCLSW2,LOGDEV,CNTJOB,CNTDET INTEGER CNTSWP,CNTUSR,CNTTIW,CNTSLP,CNTTOW,CNTBAT INTEGER KOP,TSTJOB,TSTSTS,TSTLNE,TSTCOR,SRCLNE,TOPLNE INTEGER TIMSTS,CNTLOG ARRAY ARNG[6],SRNG[6],STRS[20],FCFS[20],LOW[20] ARRAY TRNG[6],PRNG[6],LRNG[6],ORNG[6],PLIST[PLEN] ARRAY CRNG[6],DRNG[6],SYSFEA[2],WHOCON[2] ARRAY COMAND[21],WHOUSR[4],WHOCOR[4],WHOSTA[2],MRNG[6],RRNG[6] ARRAY CNTRUN[2],CNTCOR[2],FRNG[6],REPLY[21],DCHRS[20] ARRAY GOBS[5],TSTUSR[2],TSTPRG[2],TSTPPN[2],CNTDSK[2] ARRAY UTIME[2],NTIME[2],LTIME[2],RTIME[2],RCOUNT[2] ARRAY OTIME[2],SCLASS[2*SCLSES],SCOUNT[2] VAR ; ; LOW DATA ALLOCATION ; LOWDAT=. RELOC 400000 HIDAT=. OPENT=LOWDAT+<.-HIDAT> 0 SIXBIT /TTY/ XWD TRNG,TRNG+3 OPENP=LOWDAT+<.-HIDAT> 0 SIXBIT /PTY/ XWD PRNG,PRNG+3 OPENL=LOWDAT+<.-HIDAT> 0 SIXBIT /DSK/ XWD LRNG,LRNG+3 LOOKL=LOWDAT+<.-HIDAT> SIXBIT /OPR/ SIXBIT /LOG/ 0 XWD 3,3 OPENO=LOWDAT+<.-HIDAT> 0 SIXBIT /DSK/ XWD ORNG,ORNG+3 LOOKO=LOWDAT+<.-HIDAT> SIXBIT /SPIRIT/ SIXBIT /WHO/ 0 XWD 3,3 OPENA=LOWDAT+<.-HIDAT> 0 SIXBIT /DSK/ XWD ARNG,ARNG+3 LOOKA=LOWDAT+<.-HIDAT> SIXBIT /SPIRIT/ SIXBIT /WHT/ 0 XWD 3,3 OPENS=LOWDAT+<.-HIDAT> 0 SIXBIT /SYS/ XWD SRNG,SRNG+3 LOOKS=LOWDAT+<.-HIDAT> SIXBIT /TIMES/ SIXBIT /SYS/ 0 0 OPENM=LOWDAT+<.-HIDAT> 0 SIXBIT /DSK/ XWD MRNG,MRNG+3 LOOKM=LOWDAT+<.-HIDAT> SIXBIT /TIMES/ SIXBIT /LOG/ 0 0 OPENR=LOWDAT+<.-HIDAT> 0 SIXBIT /DSK/ XWD RRNG,RRNG+3 LOOKR=LOWDAT+<.-HIDAT> SIXBIT /TIMES/ SIXBIT /LOG/ 0 0 OPENF=LOWDAT+<.-HIDAT> 0 SIXBIT /LST/ XWD FRNG,FRNG+3 LOOKF=LOWDAT+<.-HIDAT> SIXBIT /OPR/ SIXBIT /LST/ 0 0 OPEND=LOWDAT+<.-HIDAT> 0 SIXBIT /DSK/ XWD DRNG,DRNG+3 LOOKD=LOWDAT+<.-HIDAT> SIXBIT /OPR/ SIXBIT /DAT/ 0 0 CCSPEC=LOWDAT+<.-HIDAT> XWD 4,CINT XWD 400000,ER.ICC 0 0 DATLEN==.-HIDAT RELOC BLOCK DATLEN ; ; SPIRIT DATA ALLOCATION ; SPTDAT=. RUNTIM=SPTDAT TIME=RUNTIM+200 WARN=TIME+200 PPNS=WARN+200 HUNG=PPNS+200 SPTTOP=HUNG+200 ; RELOC SUBTTL HIGH DATA ; RNGTAB: -1 TRNG PRNG LRNG ORNG ARNG SRNG MRNG RRNG FRNG CRNG DRNG ; STAB0: SIXBIT /W/ SIXBIT /E/ SIXBIT /LOCATE/ SIXBIT /DETACH/ SIXBIT /STOP/ SIXBIT /TALK/ SIXBIT /CONTIN/ SIXBIT /KILL/ SIXBIT /FREE/ SIXBIT /PURGE/ SIXBIT /WHO/ SIXBIT /WHAT/ SIXBIT /PEEK/ SIXBIT /HELP/ SIXBIT /WATCH/ SIXBIT /ATTACH/ SIXBIT /DEBUG/ SIXBIT /KSYS/ SIXBIT /BOMB/ SIXBIT /PRIVIL/ SIXBIT /VM/ SIXBIT /LIMIT/ SIXBIT /FORCE/ SIXBIT /ECHO/ SIXBIT /REPEAT/ SIXBIT /AT/ SIXBIT /EXIT/ SIXBIT /LOGIN/ SIXBIT /CTEST/ 0 DTAB0: XWD 0,WHO XWD 0,EX XWD 0,LOCT XWD CPRV,DET XWD CPRV+WHY,STOP XWD CPRV,TALK XWD CPRV,CONT XWD CPRV+WHY,KILL XWD CPRV,FREE XWD CPRV,PURG XWD 0,WHO XWD 0,WHAT XWD CPRV,PEK XWD 0,HELP XWD CPRV,WAT XWD CPRV,ATT XWD CLG,DBUG XWD CPRV+WHY,KSYS XWD CPRV+WHY,BOMB XWD CPRV+WHY,PRIV XWD CPRV+WHY,VM XWD CPRV+WHY,LIM XWD CPRV+WHY,FOR XWD CPRV,ECHO XWD CLG,REPEAT XWD CLG,AT XWD 0,EX XWD 0,LOGIN XWD 0,CTEST ; ; MISC ; KJOB1: ASCIZ "KJOB /B" KJOB2: ASCIZ "KJOB /F" KJOB3: ASCIZ "KJOB /N" SUBTTL INITL ; ; STARTING POINT OF PROGRAM (ONCE ONLY CODE) ; INITL: PORTAL .+2 PORTAL .+2 SKIPA ;SKIP OVER CCL ENTRY SETOM CCLENT MOVE 17,[XWD HIDAT,LOWDAT] ;BUILD LOW SEG BLT 17,LOWDAT+DATLEN-1 RESET ;SETUP SETZ SW, MOVE PDP,[IOWD PLEN,PLIST] SETZM LSTJOB GETPPN 17, ;CHECK FAILSA PPN NOP MOVEM 17,MYPPN MOVE 16,[%LDFFA] GETTAB 16, MOVE 16,[XWD 1,2] MOVEM 16,PRVPPN IFE DEBUG, TLO SW,PRV PJOB 17, ;GET JOB NUMBER MOVEM 17,MYJOB MOVE 17,[XWD -1,.GTSTS] ;CHECK IF LOGGED IN GETTAB 17, SKIPA TLNE 17,JLOG TLO SW,JLG MOVE 17,[%CNPTY] ;GET CTY LINE GETTAB 17, MOVSI 17,177 HLRZ 16,17 MOVEM 16,PTYDSP SUBI 16,1 MOVEM 16,CTYLNE ADDI 16,(17) MOVEM 16,TOPLNE MOVE 17,[%CNSJN] ;GET TOP JOB NUMBER GETTAB 17, MOVEI 17,^D128 SUBI 17,1 ANDI 17,177 MOVEM 17,TOPJOB MOVE 17,[%LDQUE] ;GET LOG PPN + STR GETTAB 17, MOVE 17,[XWD 3,3] MOVEM 17,QUEPPN MOVE 17,[%LDQUS] GETTAB 17, MOVE 17,[SIXBIT /DSK/] MOVEM 17,OPENL+1 MOVEM 17,OPENO+1 MOVEM 17,OPENA+1 MOVEM 17,OPENM+1 MOVEM 17,OPENR+1 MOVE 17,[%LDHLP] ;GET LOGIN PPN GETTAB 17, MOVE 17,[XWD 2,5] MOVEM 17,HLPPPN MOVE 17,[%CNTIC] ;GET JIFFY SIZE GETTAB 17, MOVEI 17,^D60 MOVEM 17,JIFFY MOVEI 17,^D512 ;GET PAGE SIZE MOVEI 16,"P" HRLOI 15,-2 AOBJN 15,IZ010 MOVEI 17,^D1024 MOVEI 16,"K" IZ010: MOVEM 17,PAGE MOVEM 16,KOP MOVE 17,[%CNSTS] ;GET SYSTEM FEATURES WORDS GETTAB 17, SETZ 17, MOVEM 17,SYSFEA MOVE 17,[%CNST2] GETTAB 17, SETZ 17, MOVEM 17,SYSFEA+1 MOVE 17,[%CNSER] ;GET SYSTEM SERIAL NUMBER GETTAB 17, SETZ 17, MOVEM 17,SYSSER SETZM UTIME ;SETUP SETZM NTIME SETZM LTIME SETZM OTIME SETZM RTIME SETZM RCOUNT SETZM SCLASS MOVE 17,[XWD SCLASS,SCLASS+1] BLT 17,SCLASS+SCLSES-1 MOVEI 17,ERROR ;SET UP JOB DATA AREA HRRM 17,.JBREN MOVEI 17,CCSPEC HRRM 17,.JBINT MOVSI 17,'TTY' ;INIT TTY DEVCHR 17, TLNN 17,(DV.TTY) JRST ER020 OPEN TTY,OPENT JRST ER020 OUTPUT TTY, JRST MAIN SUBTTL CINT ; ; ^C INTERCEPT SERVICE ROUTINE ; CINT: PORTAL .+1 PUSH PDP,CCSPEC+2 SETZM CCSPEC+2 TRNE SW,CCB JRST @CCADR TLNE SW,DB JRST CT010 TRNE SW,SPT JRST CT020 CT010: CALL SAVACS TLNE SW,LCK PUSH PDP,[EXP LOCKS] PUSH PDP,[EXIT1] TLNE SW,LCK PUSH PDP,[LOCKE] CT020: RETURN SUBTTL MAIN ; ; MAINLINE (COMMAND PROCESSOR) ; MAIN: RESET CALL PRIO OPEN TTY,OPENT JRST ER020 OUTPUT TTY, MOVEI CHAN,TTY SETZM LOGDEV SKIPN CCLENT JRST MN010 RESCAN ;CCL ENTRY JRST MN020 MN010: MOVEI CHAR,"/" ;NORMAL ENTRY CALL OTCHAR OUTPUT TTY, MN020: TLZ SW,RRD INPUT TTY, MOVEI 17,^D80 ;BUILD COMMAND MOVE 16,[POINT 7,COMAND] MOVEM 16,CRNG+4 MN030: CALL NXCHAR JUMPE CHAR,MN040 IDPB CHAR,16 SOJG 17,MN030 MN040: SETZ CHAR, IDPB CHAR,16 SOS 17 MOVEI 16,^D80 SUB 16,17 MOVEM 16,CMDCNT MOVEM 16,CRNG+5 PUSH PDP,[CMDRET] ;INTERPRET COMMAND COMINP: MOVEI CHAN,CMD CALL INCR SKIPA JRST NULCOM CALL NXCHAR CAIE CHAR,"@" JRST MN050 MOVSI SIX,(SIXBIT /AT/) JRST MN060 MN050: CAIE CHAR,"/" TLO SW,RRD CALL INSIX JUMPE SIX,ER030 MN060: CALL INSP MOVEI ADR,STAB0 CALL DSPTCH JUMPL 17,ER040 MOVE 16,DTAB0(17) MOVEM 16,CMDADR TLZ SW,777 HLR SW,CMDADR HRRZ ADR,CMDADR TLNN SW,PRV+DB TRNN SW,CPRV SKIPA JRST ER100 TLNN SW,JLG TRNN SW,CLG SKIPA JRST ER160 JRST (ADR) DCTEST: CALL INCR ;DEFAULT CTEST JRST ER030 NULCOM: RETURN ;NULL COMMAND CMDRET: TRZN SW,AGN ;COMMAND RETURN JRST MN090 PUSH PDP,[CMDRET] ;DO COMMAND AGAIN MOVEI CHAN,CMD TLZ SW,777 HLR SW,CMDADR HRRZ ADR,CMDADR JRST (ADR) MN090: CALL LOCKE ;MAKE SURE JOB IS UNLOCKED SKIPE CCLENT ;FINISH CALL EXIT2 JRST MAIN SUBTTL ERROR ; ; ERROR PROCESSOR (FATAL ERRORS ONLY) ; ERROR: PORTAL .+1 TDZ SW,[XWD RRD+CF,AGN+PLG] MOVE PDP,[IOWD PLEN,PLIST] JRST CMDRET CSET: OPEN TTY,OPENT JRST ER020 OUTPUT TTY, MOVEI CHAN,TTY RETURN ER010: CALL CSET MOVEI ADR,[ASCIZ /FAILED/] CALL OUTASC SKIPN DEC,JOB JRST ER900 MOVEI ADR,[ASCIZ / ON JOB /] CALL OUTASC CALL OUTDEC JRST ER900 ER020: OUTSTR [ASCIZ /? LOGICAL TTY IS NOT PHYSICAL TTY/] OUTSTR [BYTE (7) 15,12] JRST EXIT0 ER030: CALL CSET MOVEI CHAR,"?" CALL OTCHAR MOVE 17,CMDCNT SUB 17,CRNG+5 SUBI 17,1 JUMPLE 17,ER032 MOVEI CHAR,"-" CALL OTCHAR SOJG 17,.-1 ER032: MOVEI ADR,[ASCIZ /^ COMMAND ERROR/] CALL OUTASC JRST ER900 ER040: CALL CSET MOVEI ADR,[ASCIZ /? INDETERMINATE COMMAND: /] CALL OUTASC CALL OUTSIX JRST ER900 ER050: CALL CSET MOVEI ADR,[ASCIZ /? NON-EXISTENT DEVICE: /] CALL OUTASC CALL OUTSIX JRST ER900 ER060: CALL CSET MOVEI ADR,[ASCIZ /? ILLEGAL JOB NUMBER: /] CALL OUTASC MOVE DEC,JOB CALL OUTDEC JRST ER900 ER070: CALL CSET MOVEI ADR,[ASCIZ /? NO PTY'S AVAILABLE/] CALL OUTASC JRST ER900 ER080: CALL CSET MOVEI ADR,[ASCIZ /? DEVICE IS ALREADY FREE/] CALL OUTASC JRST ER900 ER090: TRNE SW,SPT TLNE SW,DB SKIPA JRST SPTREE CALL CSET MOVEI ADR,[ASCIZ /? ILLEGAL MONITOR CALL AT USER PC /] CALL OUTASC HRRZ OCT,(PDP) SUBI OCT,2 CALL OUTOCT JRST ER900 ER100: MOVE SIX,STAB0(17) CALL CSET MOVEI ADR,[ASCIZ /? OPERATOR PRIVILEGED COMMAND: /] CALL OUTASC CALL OUTSIX JRST ER900 ER110: CALL CSET MOVEI ADR,[ASCIZ /? JOB IS ALREADY DETACHED: /] CALL OUTASC MOVE DEC,JOB CALL OUTDEC JRST ER900 ER120: CALL CSET MOVEI ADR,[ASCIZ /? MUST BE LOGGED IN FOR LIST SPECIFICATION/] CALL OUTASC JRST ER900 ER130: CALL CSET MOVEI ADR,[ASCIZ /? NOT ENOUGH CORE AVAILABLE FOR SPIRIT/] CALL OUTASC JRST ER900 ER140: CALL CSET MOVEI ADR,[ASCIZ /? MUST BE LOGGED IN FOR COMMAND FILES/] CALL OUTASC JRST ER900 ER150: CALL CSET MOVEI ADR,[ASCIZ /? MULTI-LEVEL COMMAND FILES ILLEGAL/] CALL OUTASC JRST ER900 ER160: MOVE SIX,STAB0(17) CALL CSET MOVEI ADR,[ASCIZ /? MUST BE LOGGED IN FOR COMMAND: /] CALL OUTASC CALL OUTSIX JRST ER900 ER170: CALL CSET MOVEI ADR,[ASCIZ /? NO PREVIOUS JOB SPECIFIED/] CALL OUTASC JRST ER900 ER900: CALL OUTCR OUTPUT TTY, JRST ERROR SUBTTL AT ; ; AT COMMAND ; CALLING SEQUENCE: *AT FOO OR ; *@FOO ; AT: TLNN SW,JLG ;CHECK IF LOGGED IN JRST ER140 TLNE SW,CF ;SEE IF MULTI-LEVEL COMMAND FILES JRST ER150 CALL INFOO ;GET FILE SPECS JRST ER030 SKIPN 13 ;CHECK FOO SKIPE 14 SKIPA JRST ER030 SKIPN 13 ;MAKE DEFAULTS MOVSI 13,'DSK' MOVEM 13,OPEND+1 MOVEM 14,LOOKD MOVEM 15,LOOKD+1 MOVEM 16,LOOKD+2 MOVEM 17,LOOKD+3 SKIPE LOOKD JRST AF010 MOVE 17,[SIXBIT /000OPR/] MOVEM 17,LOOKD LDB 17,[POINT 3,MYJOB,29] DPB 17,[POINT 3,LOOKD,5] LDB 17,[POINT 3,MYJOB,32] DPB 17,[POINT 3,LOOKD,11] LDB 17,[POINT 3,MYJOB,35] DPB 17,[POINT 3,LOOKD,17] MOVSI 17,'CMD' SKIPN LOOKD+1 MOVEM 17,LOOKD+1 AF010: CALL INCR JRST ER030 MOVEI CHAN,CMF ;LOOKUP FILE OPEN CMF,OPEND CALL OPCHK LOOKUP CMF,LOOKD CALL LKCHK AF020: MOVEI 17,^D80 ;GET COMMAND MOVE 16,[POINT 7,COMAND] MOVEM 16,CRNG+4 AF030: SKIPLE DRNG+5 ;GET NEXT CHAR JRST AF040 INPUT CMF, GETSTS CMF,STS CALL STSCHK TRNE STS,IO.EOF JRST AF060 AF040: ILDB CHAR,DRNG+4 SOS DRNG+5 CAIN CHAR,00 ;TEST FOR EOR JRST AF030 CAIN CHAR,15 JRST AF030 CAIN CHAR,33 JRST AF050 CAIN CHAR,12 JRST AF050 IDPB CHAR,16 ;STORE CHAR SOJG 17,AF030 AF050: SETZ CHAR, ;EOR IDPB CHAR,16 SOS 17 MOVEI 16,^D80 SUB 16,17 MOVEM 16,CMDCNT MOVEM 16,CRNG+5 TLO SW,CF ;DO THE COMMAND CALL COMINP TLZ SW,CF JRST AF020 AF060: RELEAS CMF, ;NO MORE COMMANDS RETURN SUBTTL REPEAT ; ; REPEAT COMMAND ; CALLING SEQUENCE: *REPEAT N COMMAND ; REPEAT: CALL INDEC ;GET REPEAT COUNT JUMPE DEC,ER030 PUSH PDP,DEC CALL INSP ;SETUP FOR COMMAND CALL NXCHAR JUMPE CHAR,ER030 RP010: LDB CHAR,CRNG+4 ;DO COMMAND TLO SW,RRD PUSH PDP,CRNG+4 PUSH PDP,CRNG+5 CALL COMINP POP PDP,CRNG+5 POP PDP,CRNG+4 MOVE 17,(PDP) ;HIBER FOR N IMULI 17,^D1000 HRLI 17,(HB.RTL) HIBER 17, NOTDEF SKPINL ;SOMETHING TYPED JRST RP010 ;NO, DO COMMAND AGAIN CLRBFI ;YES, DONE POP PDP,17 RETURN SUBTTL LOCT ; ; LOCATE COMMAND ; CALLING SEQUENCE: *LOCATE DEVICE: ; LOCT: CALL INSIX ;GET DEVICE NAME JUMPE SIX,ER030 CALL NXCHAR CAIE CHAR,":" TLO SW,RRD CALL INCR JRST ER030 MOVEI CHAN,TTY MOVE 17,SIX ;WHAT IS IT? DEVCHR 17, JUMPE 17,ER050 TLNE 17,(DV.DSK) ;A DSK DEVICE? JRST LC030 ;YES TRNN 17,DV.ASC+DV.ASP ;A NORMAL DEVICE, IS IT FREE? JRST LC140 MOVE 16,SIX ;NOT FREE, REPORT DEVTYP 16, NOTDEF LDB 15,[POINT 9,16,26] MOVEM 15,JOB MOVEM 15,LSTJOB PUSH PDP,17 TRNN 17,DV.ASC JRST LC010 MOVEI ADR,[ASCIZ /AS/] CALL OUTASC LC010: POP PDP,17 TRNN 17,DV.ASP JRST LC020 MOVEI CHAR,"+" TRNE 17,DV.ASC CALL OTCHAR MOVEI ADR,[ASCIZ /INIT/] CALL OUTASC LC020: MOVEI ADR,[ASCIZ / TO JOB /] CALL OUTASC MOVE DEC,JOB CALL OUTDEC CALL OUTCR JRST LC150 LC030: MOVEM SIX,DCHRS ;A DSK DEVICE MOVE 17,[XWD 20,DCHRS] DSKCHR 17, NOTDEF MOVEI ADR,[ASCIZ /MOUNT COUNT: /] ;REPORT CALL OUTASC MOVE DEC,DCHRS+.DCSMT CALL OUTDEC CALL OUTCR MOVEI 17,1 ;SEARCH JOBS MOVEM 17,GOBS TRZ SW,FND LC040: HRL 17,GOBS HRRI 17,.GTSTS GETTAB 17, JRST LC090 TLNN 17,JNA JRST LC090 HRL 17,GOBS HRRI 17,.GTPPN GETTAB 17, JRST LC090 MOVEM 17,GOBS+1 SETOM GOBS+2 LC050: MOVE 17,[XWD 5,GOBS] GOBSTR 17, JRST LC090 MOVE 17,GOBS+2 CAMN 17,[-1] JRST LC090 JUMPE 17,LC080 CAME 17,DCHRS+.DCSNM JRST LC080 MOVE 17,GOBS MOVEM 17,JOB MOVEM 17,LSTJOB TROE SW,FND JRST LC060 MOVEI ADR,[ASCIZ /BY JOB(S) /] CALL OUTASC JRST LC070 LC060: MOVEI CHAR,"," CALL OTCHAR LC070: MOVE DEC,JOB CALL OUTDEC LC080: JRST LC050 LC090: AOS 17,GOBS CAMG 17,TOPJOB JRST LC040 TRZE SW,FND CALL OUTCR JRST LC150 LC140: MOVE 17,SIX ;DEVICE IS FREE, REPORT DEVTYP 17, SETZ 17, MOVEI ADR,[ASCIZ /SPOOLED /] TLNE 17,(TY.SPL) CALL OUTASC MOVEI ADR,[ASCIZ /DEVICE IS FREE/] CALL OUTASC CALL OUTCR LC150: OUTPUT TTY, RETURN SUBTTL DET ; ; DETACH COMMAND ; CALLING SEQUENCE: *DETACH JOB ; DET: CALL INJOB JRST ER030 CALL INCR JRST ER030 CALL CHKBAT CALL CHKJOB MOVEM 17,OLDLNE TLOE 17,AT.DET JRST ER110 CALL PUTJOB CALL DOLOG MOVEI CHAN,TTY HLR LINE,OLDLNE MOVEI ADR,[ASCIZ /DETACHED FROM /] CALL OUTASC CALL OUTLNE CALL OUTCR OUTPUT TTY, RETURN SUBTTL STOP ; ; STOP COMMAND ; CALLING SEQUENCE: *STOP JOB ; STOP: CALL INJOB JRST ER030 CALL INCR JRST ER030 CALL CHKBAT CALL DOLOG HRLI 17,AT.MON CALL GETJOB MOVEI ADR,[ASCIZ /HALT/] CALL OUTASC CALL OUTCR OUTPUT PTY, CALL PTYMON CALL RETJOB CALL CHKJOB TLNN 17,AT.MON JRST ER010 RETURN SUBTTL TALK ; ; TALK COMMAND ; CALLING SEQUENCE: *TALK JOB/SWITCH ; SWITCHES: USER FOR USER MODE IF POSSIBLE ; MONITOR FOR MONITOR MODE ; EXIT SEQUENCE: ^Z ; TALK: CALL INJOB JRST ER030 SETZM LCLSW CALL INCR SKIPA JRST TK010 CALL NXCHAR CAIE CHAR,"/" JRST ER030 CALL INSIX JUMPE SIX,ER030 CALL INCR JRST ER030 MOVEI ADR,STAB3 CALL DSPTCH JUMPL 17,ER040 MOVE 16,DTAB3(17) MOVEM 16,LCLSW TK010: CALL CHKBAT CALL DOLOG HRLZ 17,LCLSW CALL GETJOB MOVEI 17,TK060 MOVEM 17,CCADR MOVEI 17,TTY MOVEM 17,LOGDEV TRO SW,CCB+PLG TK030: CALL PTYALL MOVE 17,[HB.RTL+^D1000] HIBER 17, NOTDEF SKPINL JRST TK030 INPUT TTY, TK040: SOSGE TRNG+5 JRST TK070 ILDB CHAR,TRNG+4 CAIN CHAR,32 JRST TK080 TK050: IDPB CHAR,PRNG+1 SOSG PRNG+2 OUTPUT PTY, JRST TK040 TK060: POP PDP,17 SETZM TRNG+5 MOVEI CHAR,3 JRST TK050 TK070: OUTPUT PTY, JRST TK030 TK080: OUTPUT PTY, CALL PTYALL SETZM LOGDEV TRZ SW,CCB+PLG CALL RETJOB RETURN ; STAB3: SIXBIT /USER/ SIXBIT /MONITO/ 0 ; DTAB3: 0 AT.MON SUBTTL CONT ; ; CONTINUE COMMAND ; CALLING SEQUENCE: *CONTINUE JOB ; CONT: CALL INJOB JRST ER030 CALL INCR JRST ER030 CALL CHKBAT CALL DOLOG HRLI 17,AT.MON CALL GETJOB MOVEI ADR,[ASCIZ /HALT/] CALL OUTASC CALL OUTCR OUTPUT PTY, CALL PTYMON MOVEI ADR,[ASCIZ /CONTINUE/] CALL OUTASC CALL OUTCR OUTPUT PTY, CALL PTYMON CALL RETJOB CALL CHKJOB TLNN 17,AT.USR+AT.DET JRST ER010 RETURN SUBTTL KILL ; ; KILL COMMAND ; CALLING SEQUENCE: *KILL JOB ; KILL: CALL INJOB JRST ER030 CALL INCR JRST ER030 CALL CHKBAT CALL DOLOG CALL KJOB JRST ER010 RETURN SUBTTL FREE ; ; FREE COMMAND ; CALLING SEQUENCE: *FREE DEVICE:/SWITCH ; SWITCHES: DEASSIGN TO DEASSIGN ONLY ; FINISH TO FINISH IF NECESSARY ; FREE: CALL INSIX JUMPE SIX,ER030 PUSH PDP,SIX CALL NXCHAR CAIE CHAR,":" TLO SW,RRD SETZM LCLSW CALL INCR SKIPA JRST FR010 CALL NXCHAR CAIE CHAR,"/" JRST ER030 CALL INSIX JUMPE SIX,ER030 CALL INCR JRST ER030 MOVEI ADR,STAB2 CALL DSPTCH JUMPL 17,ER040 MOVE 16,DTAB2(17) MOVEM 16,LCLSW FR010: MOVE 17,(PDP) DEVTYP 17, NOTDEF JUMPE 17,ER050 LDB 16,[POINT 9,17,26] JUMPE 16,ER080 MOVEM 16,JOB MOVEM 16,LSTJOB MOVE 17,(PDP) DEVCHR 17, TRNN 17,DV.ASP SETZM LCLSW HRL 17,JOB HRRI 17,.GTSTS GETTAB 17, NOTDEF SETZM LCLSW2 TLNE 17,JRUN SETOM LCLSW2 CALL CHKBAT CALL DOLOG HRLI 17,AT.MON CALL GETJOB SKIPN LCLSW2 JRST FR020 MOVEI ADR,[ASCIZ /HALT/] CALL OUTASC CALL OUTCR OUTPUT PTY, CALL PTYMON FR020: MOVEI ADR,[ASCIZ /DEASSIGN /] SKIPE LCLSW MOVEI ADR,[ASCIZ /FINISH /] CALL OUTASC MOVE SIX,(PDP) CALL OUTSIX CALL OUTCR OUTPUT PTY, CALL PTYMON SKIPE LCLSW2 SKIPE LCLSW JRST FR030 MOVEI ADR,[ASCIZ /CONTINUE/] CALL OUTASC CALL OUTCR OUTPUT PTY, CALL PTYMON FR030: CALL RETJOB POP PDP,17 DEVCHR 17, MOVEI 16,DV.ASC SKIPE LCLSW MOVEI 16,DV.ASC+DV.ASP TDNE 17,16 JRST ER010 RETURN ; STAB2: SIXBIT /DEASSI/ SIXBIT /FINISH/ 0 ; DTAB2: 0 -1 SUBTTL PURG ; ; PURGE COMMAND ; CALLING SEQUENCE: *PURGE ; PURG: CALL INCR JRST ER030 MOVE 17,TOPJOB MOVEM 17,JOB PG010: HRL 17,JOB ;TEST JOB NUMBER HRRI 17,.GTSTS GETTAB 17, JRST PG040 TLNN 17,JNA JRST PG040 MOVE 17,JOB ;TEST IF DETACHED TRMNO. 17, SKIPE 17 JRST PG040 HRL 17,JOB ;TEST IF DAEMON HRRI 17,.GTPPN GETTAB 17, NOTDEF CAME 17,PRVPPN JRST PG020 HRL 17,JOB HRRI 17,.GTPRG GETTAB 17, NOTDEF CAMN 17,[SIXBIT /DAEMON/] JRST PG040 CAMN 17,[SIXBIT /SPIRIT/] JRST PG040 PG020: MOVE 17,JOB ;A GOOD ONE MOVEM 17,LSTJOB CALL DOLOG HRL 17,JOB ;GET JOB INFO HRRI 17,.GTPPN GETTAB 17, NOTDEF MOVEM 17,PPN HRL 17,JOB HRRI 17,.GTNM2 GETTAB 17, SETZ 17, PUSH PDP,17 HRL 17,JOB HRRI 17,.GTNM1 GETTAB 17, SETZ 17, PUSH PDP,17 CALL KJOB JRST PG030 MOVEI ADR,[ASCIZ /LOGGED OFF JOB /] JRST PG035 PG030: MOVEI ADR,[ASCIZ /FAILED ON JOB /] PG035: MOVEI CHAN,TTY CALL OUTASC MOVE DEC,JOB CALL OUTDEC MOVEI ADR,[ASCIZ / USER /] CALL OUTASC POP PDP,SIX CALL OUTSIX POP PDP,SIX CALL OUTSIX MOVEI ADR,[ASCIZ / [/] CALL OUTASC HLRZ OCT,PPN CALL OUTOCT MOVEI CHAR,"," CALL OTCHAR HRRZ OCT,PPN CALL OUTOCT MOVEI CHAR,"]" CALL OTCHAR CALL OUTCR OUTPUT TTY, PG040: SOSLE JOB JRST PG010 RETURN SUBTTL WHO ; ; WHO COMMAND ; CALLING SEQUENCE: *WHO SWITCHES ; WHO: TDZ SW,[XWD FST+SLW+PRF,FND] SETZM TSTUSR SETZM TSTUSR+1 SETZM TSTPRG SETZM TSTPRG+1 SETZM TSTPPN SETZM TSTPPN+1 SETZM TSTJOB SETZM TSTCOR SETZM TSTSTS SETZM TSTLNE TRNE SW,SPT JRST WH550 MOVEI 17,TTY MOVEM 17,LST WH010: CALL INCR SKIPA JRST WH660 CALL NXCHAR CAIN CHAR,"#" JRST WH040 CAIN CHAR,"%" JRST WH460 CAIN CHAR,"." JRST WH030 CAIN CHAR,"-" JRST WH560 CAIN CHAR,"!" JRST WH570 CAIN CHAR,">" JRST WH260 CAIN CHAR,"_" JRST WH340 CAIN CHAR,"$" JRST WH350 CAIN CHAR,"[" JRST WH180 CAIN CHAR,"/" JRST WH290 CAIN CHAR,"@" JRST WH580 TLO SW,RRD CAIL CHAR,"0" CAILE CHAR,"9" JRST WH490 WH020: CALL INJOB ;WHO /JOB: JRST ER030 MOVE 17,JOB MOVEM 17,TSTJOB JRST WH010 WH030: MOVE 17,MYJOB ;WHO /ME MOVEM 17,LSTJOB MOVEM 17,TSTJOB JRST WH010 WH040: CALL INSIX ;WHO /TTY: JUMPE SIX,ER030 HLRZ 17,SIX CAIN 17,'TTY' JRST WH050 CAIN 17,'CTY' JRST WH100 CAIN 17,'DET' JRST WH130 CAIN 17,'PTY' JRST WH060 CAIN 17,'BAT' JRST WH140 CAIN 17,'LOC' JRST WH150 CAIN 17,'DIA' JRST WH160 TRNE SIX,-1 JRST ER030 HLRZ SIX,SIX ;WHO /TTY: WH050: SETZM TSTLNE ;WHO /TTY:TTY JRST WH070 WH060: MOVE 17,PTYDSP ;WHO /TTY:PTY MOVEM 17,TSTLNE WH070: TRNN SIX,-1 JRST ER030 SETZ 17, MOVE 16,[POINT 6,SIX,17] MOVEI 15,3 WH080: ILDB 14,16 JUMPE 14,WH090 CAIL 14,'0' CAILE 14,'7' JRST ER030 SUBI 14,'0' LSH 17,3 ADD 17,14 SOJG 15,WH080 WH090: ADD 17,TSTLNE TRO 17,200000 MOVEM 17,TSTLNE JRST WH010 WH100: MOVE 17,CTYLNE ;WHO /TTY:CTY TRO 17,200000 MOVEM 17,TSTLNE JRST WH010 WH130: SETOM TSTLNE ;WHO /DETACH JRST WH010 WH140: MOVEI 17,W.BAT ;WHO /BATCH IORM 17,TSTSTS JRST WH010 WH150: MOVEI 17,W.LCL ;WHO /LOCAL IORM 17,TSTSTS JRST WH010 WH160: MOVEI 17,W.DSL ;WHO /DIALUP IORM 17,TSTSTS JRST WH010 WH170: CALL NXCHAR ;WHO /PPN:[P,PN] CAIE CHAR,"[" TLO SW,RRD WH180: SETZM TSTPPN ;WHO [P,PN] SETOM TSTPPN+1 CALL NXCHAR CAIE CHAR,"*" JRST WH190 SETZ 17, HRLM 17,TSTPPN+1 JRST WH200 WH190: TLO SW,RRD CALL INOCT JUMPE OCT,ER030 HRLM OCT,TSTPPN WH200: CALL NXCHAR CAIE CHAR,"," JRST ER030 CALL NXCHAR CAIE CHAR,"*" JRST WH230 SETZ 17, HRRM 17,TSTPPN+1 JRST WH240 WH230: TLO SW,RRD CALL INOCT JUMPE OCT,ER030 HRRM OCT,TSTPPN WH240: CALL NXCHAR CAIE CHAR,"]" TLO SW,RRD JRST WH010 WH250: CALL NXCHAR ;WHO /CORE: CAIN CHAR,":" WH260: CALL NXCHAR ;WHO >CORE TLO SW,RRD CAIL CHAR,"0" CAILE CHAR,"9" JRST WH270 CALL INDEC JUMPE DEC,ER030 JRST WH280 WH270: MOVE 16,[%NSCMX] GETTAB 16, MOVEI 16,^D<30*1024> ADD 16,PAGE SUBI 16,1 IDIV 16,PAGE MOVE DEC,16 WH280: MOVEM DEC,TSTCOR JRST WH010 WH290: CALL INSIX ;WHO /VERB:MODIFIER JUMPE SIX,ER030 MOVEI ADR,STAB4 CALL DSPTCH JUMPL 17,ER040 HLRZ 16,DTAB4(17) JUMPE 16,WH330 CALL NXCHAR CAIE CHAR,":" JRST ER030 WH330: HRRZ 16,DTAB4(17) JRST (16) WH340: CALL COMINP ;WHO /FROM:COMMAND MOVEI CHAN,TTY MOVEM CHAN,LST SKIPN 17,LSTJOB JRST WH670 MOVEM 17,TSTJOB JRST WH660 WH350: CALL INCR ;WHO /STATISTICS JRST ER030 MOVE CHAN,LST SETZM CNTJOB SETZM CNTLOG SETZM CNTDET SETZM CNTBAT SETZM CNTSWP SETZM CNTTIW SETZM CNTTOW SETZM CNTSLP SETZM CNTUSR SETZM CNTCOR SETZM CNTCOR+1 SETZM CNTRUN SETZM CNTRUN+1 SETZM CNTDSK SETZM CNTDSK+1 MOVEI 17,1 MOVEM 17,JOB WH360: CALL WHO3 JRST WH370 AOS CNTJOB MOVE 17,WHOSTS TLNE 17,JLOG AOS CNTLOG SKIPGE WHOLNE AOS CNTDET HRL 17,JOB HRRI 17,.GTLIM GETTAB 17, SETZ 17, TLNE 17,(JB.LBT) AOS CNTBAT SKIPN WHOSTA+1 AOS CNTSWP MOVE 17,WHOSTA CAME 17,[SIXBIT /^C/] CAMN 17,[SIXBIT /TI/] AOS CNTTIW CAMN 17,[SIXBIT /TO/] AOS CNTTOW CAME 17,[SIXBIT /SL/] CAMN 17,[SIXBIT /HB/] AOS CNTSLP MOVE 17,WHOPPN CAMN 17,PRVPPN JRST WH370 AOS CNTUSR SKIPGE 17,WHOCOR SETZ 17, SKIPL WHOCOR+1 ADD 17,WHOCOR+1 ADDM 17,CNTCOR IMUL 17,17 ADDM 17,CNTCOR+1 SKIPGE 16,WHORUN SETZ 16, ADDM 16,CNTRUN IDIV 16,JIFFY IMUL 16,16 ADDM 16,CNTRUN+1 SKIPGE 16,WHODRD SETZ 16, SKIPL WHODWT ADD 16,WHODWT ADDM 16,CNTDSK ADDI 16,^D100-1 IDIVI 16,^D100 IMUL 16,16 ADDM 16,CNTDSK+1 WH370: AOS 17,JOB CAMG 17,TOPJOB JRST WH360 MOVE DEC,TOPJOB CALL OUTDEC MOVEI ADR,[ASCIZ / JOBS: /] CALL OUTASC MOVE DEC,CNTJOB CALL OUTDEC MOVEI ADR,[ASCIZ / ASSIGNED, /] CALL OUTASC MOVE DEC,CNTLOG CALL OUTDEC MOVEI ADR,[ASCIZ / LOGGED IN, /] CALL OUTASC MOVE DEC,CNTDET CALL OUTDEC MOVEI ADR,[ASCIZ / DETACHED, /] CALL OUTASC MOVE DEC,CNTBAT CALL OUTDEC MOVEI ADR,[ASCIZ / BATCHED,/] CALL OUTASC CALL OUTCR MOVEI ADR,[ASCIZ / /] CALL OUTASC MOVE DEC,CNTTIW CALL OUTDEC MOVEI ADR,[ASCIZ / TYPING IN, /] CALL OUTASC MOVE DEC,CNTTOW CALL OUTDEC MOVEI ADR,[ASCIZ / TYPING OUT, /] CALL OUTASC MOVE DEC,CNTSLP CALL OUTDEC MOVEI ADR,[ASCIZ / SLEEPING, /] CALL OUTASC MOVE DEC,CNTJOB SUB DEC,CNTTIW SUB DEC,CNTTOW SUB DEC,CNTSLP CALL OUTDEC MOVEI ADR,[ASCIZ / RUNNING, /] CALL OUTASC MOVE DEC,CNTSWP CALL OUTDEC MOVEI ADR,[ASCIZ / IN CORE/] CALL OUTASC CALL OUTCR MOVE DEC,CNTUSR CALL OUTDEC MOVEI ADR,[ASCIZ / USERS: MEAN /] CALL OUTASC MOVE 16,CNTCOR IDIV 16,CNTUSR MOVEM 16,CNTCOR MOVE DEC,16 CALL OUTDEC MOVE CHAR,KOP CALL OTCHAR MOVEI CHAR," " CALL OTCHAR MOVE 16,CNTRUN IDIV 16,CNTUSR IDIV 16,JIFFY MOVEM 16,CNTRUN MOVE TIM,16 CALL OUTTIM MOVEI CHAR," " CALL OTCHAR MOVE 16,CNTDSK IDIV 16,CNTUSR MOVEM 16,CNTDSK MOVE DEC,16 CALL OUTDEC MOVEI ADR,[ASCIZ /; SD /] CALL OUTASC MOVE 16,CNTCOR+1 IDIV 16,CNTUSR MOVE 17,16 MOVE 16,CNTCOR CALL WH800 MOVEM 17,CNTCOR+1 MOVE DEC,17 CALL OUTDEC MOVE CHAR,KOP CALL OTCHAR MOVEI CHAR," " CALL OTCHAR MOVE 16,CNTRUN+1 IDIV 16,CNTUSR MOVE 17,16 MOVE 16,CNTRUN CALL WH800 MOVEM 17,CNTRUN+1 MOVE TIM,17 CALL OUTTIM MOVEI CHAR," " CALL OTCHAR MOVE 16,CNTDSK+1 IDIV 16,CNTUSR MOVE 17,16 MOVE 15,CNTDSK IDIVI 15,^D100 MOVE 16,15 CALL WH800 IMULI 17,^D100 MOVEM 17,CNTDSK+1 MOVE DEC,17 CALL OUTDEC CALL OUTCR MOVEI 17,1 MOVEM 17,JOB WH380: CALL WHO3 JRST WH400 MOVE 17,WHOPPN CAMN 17,PRVPPN JRST WH400 SETZ 17, SKIPGE 16,WHOCOR SETZ 16, SKIPL WHOCOR+1 ADD 16,WHOCOR+1 MOVE 15,CNTCOR+1 LSH 15,1 ADD 15,CNTCOR CAMLE 16,15 SETO 17, SKIPGE 15,WHORUN SETZ 15, IDIV 15,JIFFY MOVE 14,CNTRUN+1 LSH 14,1 ADD 14,CNTRUN CAMLE 15,14 SETO 17, SKIPGE 16,WHODRD SETZ 16, SKIPL WHODWT ADD 16,WHODWT MOVE 15,CNTDSK+1 LSH 15,1 ADD 15,CNTDSK CAMLE 16,15 SETO 17, JUMPE 17,WH400 TRNE SW,FND JRST WH390 CALL OUTCR MOVEI ADR,[ASCIZ /PIGS (>MEAN+2*SD):/] CALL OUTASC CALL OUTCR WH390: CALL WHO4 WH400: AOS 17,JOB CAMG 17,TOPJOB JRST WH380 JRST WH670 WH430: CALL WHO3 JRST WH440 HLRZ 17,WHOPPN CAME 17,(PDP) JRST WH440 CALL WHO4 WH440: AOS 17,JOB CAMG 17,TOPJOB JRST WH430 POP PDP,17 JRST WH670 WH450: CALL INCR ;WHO /HELP JRST ER030 MOVE CHAN,LST MOVEI ADR,WH910 CALL OUTASC JRST WH670 WH460: CALL INFSX ;WHO /PROGRAM:NAME JUMPE SIX,ER030 MOVEM SIX,TSTPRG MOVEI 17,6 SETO 16, WH470: TRNE SIX,77 JRST WH480 LSH SIX,-6 LSH 16,6 SOJG 17,WH470 WH480: MOVEM 16,TSTPRG+1 JRST WH010 WH490: SKIPE TSTUSR ;WHO NAME JRST ER030 WH500: CALL INFSX ;WHO /USER:NAME JUMPE SIX,ER030 MOVEM SIX,TSTUSR MOVEI 17,6 SETO 16, WH530: TRNE SIX,77 JRST WH540 LSH SIX,-6 LSH 16,6 SOJG 17,WH530 WH540: MOVEM 16,TSTUSR+1 JRST WH010 WH550: OPEN DWHO,OPENO ;WHO FOR SPIRIT CALL OPCHK MOVE 17,QUEPPN MOVEM 17,LOOKO+3 ENTER DWHO,LOOKO CALL LKCHK OUTPUT DWHO, MOVEI CHAN,DWHO MOVEM CHAN,LST JRST WH660 WH560: MOVEI 17,W.USR ;WHO /NOOPR IORM 17,TSTSTS JRST WH010 WH570: TLO SW,FST ;WHO /FAST JRST WH010 WH580: CALL LIST ;WHO /ON:FILE JRST ER030 JRST WH010 WH585: MOVEI 17,W.LNE ;WHO /BYLINE IORM 17,TSTSTS JRST WH010 WH590: MOVEI 17,W.ACT ;WHO /ACTIVE IORM 17,TSTSTS JRST WH010 WH600: MOVEI 17,W.VM ;WHO /VM IORM 17,TSTSTS JRST WH010 WH610: TLO SW,SLW ;WHO /SLOW JRST WH010 WH620: TLO SW,PRF ;WHO /PERFORMANCE JRST WH010 WH630: MOVEI 17,W.SYJ ;WHO /SYSTEM IORM 17,TSTSTS JRST WH010 WH640: MOVEI 17,W.ADJ ;WHO /ADMINISTRATIVE IORM 17,TSTSTS JRST WH010 WH650: MOVEI 17,W.ACJ ;WHO /ACADEMIC IORM 17,TSTSTS JRST WH010 WH660: MOVE CHAN,LST ;TYPE THE WHO CALL WHO1 WH670: TRNN SW,SPT JRST WH680 OUTPUT DWHO, GETSTS DWHO,STS CALL STSCHK RELEAS DWHO, JRST WH690 WH680: CALL LISTE WH690: RETURN ; WH800: IMUL 16,16 ;CALCIULTATE SD, 17=MEAN(X**2), 16=MEAN(X) SUB 17,16 WH810: MOVE 16,17 ;CALCULATE SQRT(17) LSH 16,-1 SETZ 15, MOVEI 14,^D16 WH820: MOVE 13,15 ADD 13,16 LSH 13,-1 MOVE 12,13 IMUL 12,13 CAML 12,17 MOVEM 13,16 CAMG 12,17 MOVEM 13,15 SOJG 14,WH820 MOVE 17,13 RETURN ; WHO1: MOVEI 17,1 ;LOOP FOR ALL JOBS OR LINES MOVEM 17,JOB SETZM SRCLNE WS010: MOVE 17,TSTSTS TRNN 17,W.LNE JRST WS015 MOVE 17,SRCLNE TRO 17,200000 DEVTYP 17, JRST WS040 LDB 16,[POINT 9,17,26] JUMPE 16,WS040 MOVEM 16,JOB WS015: CALL WHO3 JRST WS040 MOVE 17,WHOUSR AND 17,TSTUSR+1 CAME 17,TSTUSR JRST WS040 MOVE 17,WHOPRG AND 17,TSTPRG+1 CAME 17,TSTPRG JRST WS040 MOVE 17,WHOPPN AND 17,TSTPPN+1 CAME 17,TSTPPN JRST WS040 SKIPE 17,TSTJOB CAMN 17,JOB SKIPA JRST WS040 SKIPN TSTCOR JRST WS020 SKIPGE 17,WHOCOR JRST WS040 SKIPLE WHOCOR+1 ADD 17,WHOCOR+1 CAMG 17,TSTCOR JRST WS040 WS020: MOVE 17,WHOLNE SKIPE TSTLNE CAMN 17,TSTLNE SKIPA JRST WS040 MOVE 17,TSTSTS MOVE 16,WHOPPN TRNE 17,W.USR CAME 16,PRVPPN SKIPA JRST WS040 HRL 16,JOB HRRI 16,.GTLIM GETTAB 16, SETZ 16, TRNE 17,W.BAT TLNE 16,(JB.LBT) SKIPA JRST WS040 TRNN 17,W.LCL+W.DSL JRST WS030 SKIPG 16,WHOLNE JRST WS040 GETLCH 16 TRNE 17,W.LCL TLNN 16,(GL.ITY+GL.DSL) SKIPA JRST WS040 TRNE 17,W.DSL TLNE 16,(GL.DSL) SKIPA JRST WS040 WS030: MOVE 17,TSTSTS TRNN 17,W.ACT JRST WS032 MOVE 17,WHOSTA CAMN 17,[SIXBIT /^C/] JRST WS040 CAMN 17,[SIXBIT /TI/] JRST WS040 CAMN 17,[SIXBIT /SL/] JRST WS040 CAMN 17,[SIXBIT /HB/] JRST WS040 WS032: MOVE 17,TSTSTS TRNN 17,W.VM JRST WS034 SKIPN WHORAT JRST WS040 WS034: MOVE 17,TSTSTS LDB 16,[POINT 3,WHOPPN,11] MOVE 16,[OCT -1,1,1,1,1,0,1,1](16) TRNE 17,W.SYJ JUMPGE 16,WS040 TRNE 17,W.ADJ JUMPN 16,WS040 TRNE 17,W.ACJ JUMPLE 16,WS040 MOVE 17,JOB ;A GOOD ONE, TYPE IT MOVEM 17,LSTJOB CALL WHO4 WS040: MOVE 17,TSTSTS TRNE 17,W.LNE JRST WS042 AOS 17,JOB CAMG 17,TOPJOB JRST WS010 JRST WS044 WS042: AOS 17,SRCLNE CAMG 17,TOPLNE JRST WS010 WS044: TRNE SW,FND JRST WS050 MOVEI ADR,[ASCIZ /NO ONE/] CALL OUTASC CALL OUTCR WS050: RETURN ; WHO2: CALL WHO3 ;DO A JOB SKIPA CALL WHO4 RETURN ; WHO3: MOVE 17,JOB ;TEST JOB NUMBER CAMLE 17,TOPJOB JRST WS200 HRL 17,JOB HRRI 17,.GTSTS GETTAB 17, JRST WS200 TLNN 17,JNA JRST WS200 MOVEM 17,WHOSTS ;AN ACTIVE JOB HRL 16,JOB ;GET PPN HRRI 16,.GTPPN GETTAB 16, SETZ 16, MOVEM 16,WHOPPN AOS (PDP) ;VALID JOB HRL 16,JOB ;GET USER NAME HRRI 16,.GTNM1 GETTAB 16, SETZ 16, SKIPN 16 TLNE 17,JLOG SKIPA MOVE 16,[SIXBIT /HELP/] MOVEM 16,WHOUSR+2 HRL 16,JOB HRRI 16,.GTNM2 GETTAB 16, SETZ 16, MOVEM 16,WHOUSR+3 MOVE 16,[POINT 6,WHOUSR+2] SETZM WHOUSR SETZM WHOUSR+1 MOVE 15,[POINT 6,WHOUSR] MOVEI 14,^D12 MOVEI 13,1 WS103: ILDB 12,16 CAIN 12,' ' MOVEI 12,'-' CAIN 12,'-' JRST [JUMPGE 13,WS107 SETZ 13, JRST WS107] CAIN 12,',' JRST [JUMPG 13,WS107 MOVEI 13,1 JRST WS105] JUMPE 13,[MOVEI 13,'-' IDPB 13,15 SETO 13, JRST WS105] SETO 13, WS105: IDPB 12,15 WS107: SOJG 14,WS103 MOVE 16,JOB ;GET LINE NAME TRMNO. 16, SETO 16, MOVEM 16,WHOLNE HRL 16,JOB ;GET PROGRAM NAME HRRI 16,.GTPRG GETTAB 16, SETZ 16, MOVEM 16,WHOPRG LDB 15,[POINT 5,17,14] ;GET PROGRAM STATUS IDIVI 15,3 HRL 15,15 HRRI 15,.GTWSN GETTAB 15, SETZ 15, LDB 16,WH900(16) CAIE 16,'TI' JRST WS110 MOVN 15,JOB JOBSTS 15, SETZ 15, TLNE 15,(JB.UOA) MOVEI 16,'TO' WS110: TLNN 17,JRUN MOVEI 16,'^C' TLNE 17,CMWB MOVEI 16,'^W' TRNE 17,JDCON MOVEI 16,'OW' CAIE 16,'SL' JRST WS120 TRNN 17,CLKR MOVEI 16,'HB' WS120: CAIE 16,'RN' JRST WS140 HRL 15,JOB WS130: HRRI 15,.GTQJB GETTAB 15, JRST WS140 JUMPG 15,WS130 HLRE 15,15 MOVNS 15 CAIN 15,JQ.PQ1 MOVEI 16,'R1' CAIN 15,JQ.PQ2 MOVEI 16,'R2' CAIN 15,JQ.HPQ MOVEI 16,'RH' WS140: LSH 16,^D24 MOVEM 16,WHOSTA SETZM WHOSTA+1 TLNE 17,SWP SETOM WHOSTA+1 SETOM WHOCOR ;GET PROGRAM CORE AND PAGING RATE SETZM WHOCOR+1 SETOM WHOCOR+2 SETOM WHOCOR+3 SETZM WHORAT MOVE 15,SYSFEA+1 TRNE 15,ST%VMS JRST WS155 TLNE 17,SWP JRST WS150 HRL 15,JOB HRRI 15,.GTADR GETTAB 15, JRST WS190 HLRZS 15 JUMPE 15,WS150 ADD 15,PAGE SUBI 15,1 IDIV 15,PAGE ANDI 15,777 JRST WS160 WS150: HRL 15,JOB HRRI 15,.GTSWP GETTAB 15, JRST WS190 ANDI 15,777 JUMPE 15,WS190 JRST WS160 WS155: HRL 15,JOB HRRI 15,.GTSWP GETTAB 15, JRST WS190 ANDI 15,777 JUMPE 15,WS190 HRL 14,JOB HRRI 14,.GTVRT GETTAB 14, JRST WS160 MOVE 13,14 ANDI 13,777 SUBI 13,1 MOVEM 13,WHOCOR+2 HLRZS 14 JUMPE 14,WS160 MOVE 13,[DEC 100000*100] IDIV 13,14 MOVEM 13,WHORAT WS160: MOVEM 15,WHOCOR HRL 16,JOB HRRI 16,.GTSGN GETTAB 16, JRST WS190 TLNE 16,SPYSEG JRST WS185 TRNN 16,777777 JRST WS190 TLNE 16,SHRSEG JRST WS165 MOVE 15,SYSFEA+1 TRNE 15,ST%VMS JRST WS175 WS165: HRL 15,16 HRRI 15,.GTADR GETTAB 15, JRST WS190 HLRZS 15 JUMPE 15,WS170 ADD 15,PAGE SUBI 15,1 IDIV 15,PAGE ANDI 15,777 JRST WS180 WS170: HRL 15,16 HRRI 15,.GTSWP GETTAB 15, JRST WS190 ANDI 15,777 JUMPE 15,WS190 JRST WS180 WS175: HRL 15,16 HRRI 15,.GTSWP GETTAB 15, JRST WS190 HLRZS 15 ANDI 15,777 JUMPE 15,WS190 MOVE 14,WHOCOR SUB 14,15 MOVEM 14,WHOCOR HRL 14,JOB HRRI 14,.GTVRT GETTAB 14, JRST WS180 LDB 14,[POINT 9,14,26] MOVEM 14,WHOCOR+3 WS180: MOVEM 15,WHOCOR+1 JRST WS190 WS185: SETOM WHOCOR+1 WS190: SETOM WHOCON ;GET CONNECT TIME SETOM WHOCON+1 HRL 16,JOB HRRI 16,.GTJLT GETTAB 16, JRST WS195 MOVEM 16,WHOCON MOVE 16,[%CNDTM] GETTAB 16, JRST WS195 SUB 16,WHOCON MULI 16,^D<24*60*60> DIV 16,[XWD 1,0] MOVEM 16,WHOCON+1 WS195: HRL 16,JOB ;GET RUN TIME HRRI 16,.GTTIM GETTAB 16, SETO 16, MOVEM 16,WHORUN HRL 16,JOB ;GET DISK READS HRRI 16,.GTRCT GETTAB 16, SKIPA 15,[-1] LDB 15,[POINT 24,16,35] MOVEM 15,WHODRD HRL 16,JOB ;GET DISK WRITES HRRI 16,.GTWCT GETTAB 16, SKIPA 15,[-1] LDB 15,[POINT 24,16,35] MOVEM 15,WHODWT HRL 16,JOB ;GET HPQ NUMBER HRRI 16,.GTRTD GETTAB 16, SETZ 16, LDB 15,[POINT 4,16,9] MOVEM 15,WHOHPQ HRL 16,JOB ;GET DSKPRI NUMBER HRRI 16,.GTSPL GETTAB 16, SETZ 16, LDB 15,[POINT 3,16,26] MOVEM 15,WHODSK SETZM WHOLOK ;GET LOCKED TLNE 17,NSWP SETOM WHOLOK HRL 16,JOB ;GET TIME LIMIT HRRI 16,.GTLIM GETTAB 16, SKIPA 15,[-1] LDB 15,[POINT 24,16,35] MOVEM 15,WHOLIM WS200: RETURN ; WHO4: TRO SW,FND ;TYPE THE STUFF SETZM TABPOS MOVE DEC,JOB ;TYPE JOB NUMBER CALL OUTDEC TLNN SW,SLW JRST WS310 TRNN SW,SPT JRST WS305 MOVE 17,JOB ;TYPE HUNG SKIPN HUNG(17) JRST WS305 CALL TABW MOVEI CHAR,"*" CALL OTCHAR WS305: SKIPGE TIM,WHOCON+1 ;TYPE CONNECT TIME JRST WS310 CALL TABW CALL OUTTIM WS310: SKIPN SIX,WHOUSR ;TYPE USER NAME JRST WS320 CALL TABW CALL OUTSIX SKIPE SIX,WHOUSR+1 CALL OUTSIX WS320: TLNE SW,FST JRST WS330 HLRZ OCT,WHOPPN ;TYPE USER PPN JUMPE OCT,WS330 CALL TABW CALL OUTOCT MOVEI CHAR,"," CALL OTCHAR HRRZ OCT,WHOPPN CALL OUTOCT WS330: CALL TABW ;TYPE LINE NAME MOVE LINE,WHOLNE CALL OUTLNE MOVE SIX,WHOPRG ;TYPE PROGRAM NAME JUMPE SIX,WS340 CALL TABW CALL OUTSIX WS340: MOVE SIX,WHOSTA ;TYPE PROGRAM STATUS JUMPE SIX,WS350 CALL TABW CALL OUTSIX WS350: TLNE SW,FST JRST WS490 SKIPN WHOSTA+1 JRST WS360 CALL TABW MOVEI ADR,[ASCIZ /SW/] CALL OUTASC WS360: MOVE DEC,WHOCOR ;TYPE PROGRAM CORE JUMPL DEC,WS400 CALL TABW CALL OUTDEC SKIPL DEC,WHOCOR+2 CAMN DEC,WHOCOR JRST WS365 MOVEI CHAR,"(" CALL OTCHAR CALL OUTDEC MOVEI CHAR,")" CALL OTCHAR WS365: SKIPN DEC,WHOCOR+1 JRST WS370 JUMPL DEC,WS380 MOVEI CHAR,"+" CALL OTCHAR CALL OUTDEC SKIPL DEC,WHOCOR+3 CAMN DEC,WHOCOR+1 JRST WS370 MOVEI CHAR,"(" CALL OTCHAR CALL OUTDEC MOVEI CHAR,")" CALL OTCHAR WS370: MOVE CHAR,KOP CALL OTCHAR JRST WS400 WS380: MOVE CHAR,KOP CALL OTCHAR MOVEI ADR,[ASCIZ /+SPY/] CALL OUTASC WS400: MOVE 16,WHORUN ;TYPE RUN TIME JUMPL 16,WS410 IDIV 16,JIFFY MOVE TIM,16 CALL TABW CALL OUTTIM WS410: TLNN SW,SLW JRST WS490 SKIPL WHODRD ;TYPE DISK I/O SKIPGE WHODWT JRST WS440 CALL TABW MOVEI ADR,[ASCIZ /DSK:/] CALL OUTASC MOVE DEC,WHODRD CALL OUTDEC MOVEI CHAR,"," CALL OTCHAR MOVE DEC,WHODWT CALL OUTDEC WS440: MOVE DEC,WHOHPQ ;TYPE HPQ NUMBER JUMPE DEC,WS450 CALL TABW MOVEI ADR,[ASCIZ /HPQ/] CALL OUTASC CALL OUTDEC WS450: MOVE DEC,WHODSK ;TYPE DSKPRI NUMBER JUMPE DEC,WS460 CALL TABW MOVEI ADR,[ASCIZ /DSKPRI/] CALL OUTASC MOVEI CHAR,"-" TRZE DEC,4 CALL OTCHAR CALL OUTDEC WS460: SKIPN WHOLOK ;TYPE LOCKED JRST WS470 CALL TABW MOVEI ADR,[ASCIZ /LOCKED/] CALL OUTASC WS470: SKIPN DEC,WHORAT ;TYPE PAGE RATE JRST WS480 CALL TABW MOVEI ADR,[ASCIZ /PGR:/] CALL OUTASC CALL OUTPDC WS480: SKIPG 16,WHOLIM ;TYPE JOB TIME LIMIT JRST WS490 IDIV 16,JIFFY MOVE TIM,16 CALL TABW MOVEI ADR,[ASCIZ /LIMIT:/] CALL OUTASC CALL OUTTIM WS490: TLNN SW,PRF JRST WS500 SKIPL WHOCON+1 ;TYPE RUN/CONNECT RATIO SKIPGE WHORUN JRST WS492 CALL TABW MOVE 16,WHORUN IDIV 16,JIFFY IMULI 16,^D<100*100> IDIV 16,WHOCON+1 MOVE DEC,16 MOVEI ADR,[ASCIZ .R/C:.] CALL OUTASC CALL OUTPDC MOVEI ADR,[ASCIZ /%/] CALL OUTASC WS492: SKIPL WHODRD ;TYPE DISK/CONNECT RATIO SKIPGE WHODWT JRST WS500 CALL TABW MOVE 16,WHODRD ADD 16,WHODWT IMULI 16,^D100 IDIV 16,WHOCON+1 MOVE DEC,16 MOVEI ADR,[ASCIZ .D/C:.] CALL OUTASC CALL OUTPDC WS500: CALL OUTCR RETURN ; STAB4: SIXBIT /TTY/ SIXBIT /PROGRA/ SIXBIT /ME/ SIXBIT /NOOPR/ SIXBIT /FAST/ SIXBIT /CORE/ SIXBIT /FROM/ SIXBIT /STATIS/ SIXBIT /PPN/ SIXBIT /ON/ SIXBIT /JOB/ SIXBIT /HELP/ SIXBIT /USER/ SIXBIT /DETACH/ SIXBIT /BATCH/ SIXBIT /LOCAL/ SIXBIT /DIALUP/ SIXBIT /BYLINE/ SIXBIT /ACTIVE/ SIXBIT /VM/ SIXBIT /SLOW/ SIXBIT /PERFOR/ SIXBIT /SYSTEM/ SIXBIT /ADMINI/ SIXBIT /ACADEM/ 0 ; DTAB4: XWD -1,WH040 XWD -1,WH460 XWD 0,WH030 XWD 0,WH560 XWD 0,WH570 XWD 0,WH250 XWD -1,WH340 XWD 0,WH350 XWD -1,WH170 XWD -1,WH580 XWD -1,WH020 XWD 0,WH450 XWD -1,WH500 XWD 0,WH130 XWD 0,WH140 XWD 0,WH150 XWD 0,WH160 XWD 0,WH585 XWD 0,WH590 XWD 0,WH600 XWD 0,WH610 XWD 0,WH620 XWD 0,WH630 XWD 0,WH640 XWD 0,WH650 ; WH900: POINT 12,15,11 POINT 12,15,23 POINT 12,15,35 ; WH910: ASCIZ "WHO SWITCHES: /ME FOR YOUR JOB /NOOPR FOR ALL EXCEPT OPR JOBS /FAST FOR A FAST WHO /SLOW FOR A SLOW WHO /PERFORMANCE FOR A WHO WITH PERFORMANCE STATISTICS /JOB: FOR A JOB, = JOB NUMBER /TTY: FOR A LINE, = NN, TTYNN, PTYNN, OR CTY /DETACH FOR ALL DETACHED JOBS /BATCH FOR ALL BATCH JOBS /LOCAL FOR ALL REMOTE AND LOCAL JOBS /DIALUP FOR ALL DIALUP JOBS /USER: FOR A USER, = FIRST LETTERS OF USERS NAME /PROG: FOR A PROGRAM, = FIRST LETTERS OF PROGRAM NAME /CORE FOR USERS RUNNING WITH MORE CORE THAN CORMAX /CORE: FOR JOBS WITH LARGE CORE, = AN AMOUNT OF CORE /FROM: FOR JOB REFERENCED BY A COMMAND, = ANY COMMAND /STATISTICS FOR STATISTICS AND LARGE JOBS /PPN:[P,PN] FOR USER OF A PPN, P,PN = PROJECT PROGRAMMER NUMBER /HELP FOR HELP ON WHO /ON: FOR A WHO OUTPUT TO A FILE, = A FILE SPEC /BYLINE FOR A WHO SORTED BY TTY LINE /ACTIVE FOR ALL ACTIVE JOBS /VM FOR ALL VIRTUAL MEMORY JOBS /SYSTEM FOR SYSTEM JOBS /ADMINISTRATIVE FOR ADMINISTRATIVE JOBS /ACADEMIC FOR ACADEMIC JOBS " SUBTTL ECHO ; ; ECHO COMMAND ; CALLING SEQUENCE: *ECHO JOB/SWITCH ; SWITCHES: NOWRITE TO NOT ALLOW WRITING ON JOB'S TERMINAL ; WRITE TO ALLOW WRITING ON JOBS TERMINAL ; EXIT SEQUENCE: ^Z ; ECHO: CALL INJOB JRST ER030 SETZM LCLSW CALL INCR SKIPA JRST EC010 CALL NXCHAR CAIE CHAR,"/" JRST ER030 CALL INSIX JUMPE SIX,ER030 CALL INCR JRST ER030 MOVEI ADR,STAB5 CALL DSPTCH JUMPL 17,ER040 MOVE 16,DTAB5(17) MOVEM 16,LCLSW EC010: HRL 17,JOB HRRI 17,.GTSTS GETTAB 17, NOTDEF TLNN 17,JNA JRST ER060 MOVE 17,JOB TRMNO. 17, JRST ER060 HRL 16,JOB HRRI 16,.GTTTY GETTAB 16, NOTDEF ADDI 16,DDBLDB PEEK 16, ADDI 16,LDBBYT HRL 17,16 MSTIME 16, SETZ 15, TRZ SW,RRD EC020: INCHRS CHAR JRST EC050 EC040: CAIN CHAR,32 JRST EC100 SKIPN LCLSW JRST EC020 CAIN CHAR,"^" JRST [TLCN 15,(1B3) JRST EC020 JRST EC045] TLZE 15,(1B3) ANDI CHAR,77 EC045: CAIN CHAR,12 TLZN 15,(1B2) SKIPA JRST EC020 TLZ 15,(1B2) CAIN CHAR,15 TLO 15,(1B2) LSH CHAR,^D<36-7> MOVE 14,[XWD 3,11] MOVEI 11,.TOTYP HRRZ 12,17 MOVEI 13,CHAR TRMOP. 14, JFCL TLO 15,(1B0) JRST EC020 EC050: HLRZ 14,17 PEEK 14, LDB 13,[POINT 16,14,35] TLZE 15,(1B0) HRR 15,13 CAIN 13,(15) JRST EC070 MSTIME 16, MOVE 12,[XWD 7,7] TLON SW,LCK LOCK 12, JFCL HRR 15,13 HRRZ CHAR,15 ANDI CHAR,177 CAIN CHAR,15 JRST EC060 CAIN CHAR,12 JRST EC060 TLZ 15,(1B1) CAIE CHAR,177 OUTCHR CHAR JRST EC080 EC060: TLOE 15,(1B1) JRST EC080 OUTCHR [15] OUTCHR [12] JRST EC080 EC070: MSTIME 14, SUB 14,16 CAIG 14,^D15000 JRST EC080 MOVE 14,[XWD 1,1] TLZE SW,LCK UNLOK. 14, JFCL MOVEI 14,^D500 JRST EC090 EC080: MOVEI 14,^D20 EC090: HIBER 14, NOTDEF JRST EC020 EC100: MOVE 17,[XWD 1,1] TLZE SW,LCK UNLOK. 17, JFCL RETURN ; STAB5: SIXBIT /NOWRIT/ SIXBIT /WRITE/ 0 ; DTAB5: 0 -1 SUBTTL LOGIN ; ; LOGIN COMMAND ; CALLING SEQUENCE: *LOGIN PASSWORD DD ; LOGIN: CALL INSIX JUMPE SIX,ER030 CAME SIX,[SIXBIT /LOGPAS/] JRST ER030 CALL INCR JRST LG010 MOVEI DEC,^D1 ;WITHOUT NUMBER JRST LG020 LG010: CALL INDEC ;WITH NUMBER CALL INCR JRST ER030 LG020: MOVE 17,[%CNLNM] ;SUBTRACT FROM LOGNUM GETTAB 17, NOTDEF SUB 17,DEC MOVE 16,[%CNSTS] ;GET SCHED GETTAB 16, NOTDEF ANDI 16,-1 LG030: MOVEI 15,1 ;SLEEP A BIT SLEEP 15, MOVE 15,[%CNLNM] ;IS LOGNUM SMALL ENOUGH NOW? GETTAB 15, NOTDEF CAMG 15,17 JRST LG040 ;YES, DONE MOVE 15,[%CNSTS] ;SCHED CHANGED? GETTAB 15, NOTDEF ANDI 15,-1 CAME 15,16 JRST LG040 ;YES, DONE JRST LG030 ;LOOP AGAIN LG040: JRST EXIT2 ;DO AN EXIT SUBTTL WHAT ; ; WHAT COMMAND ; CALLING SEQUENCE: *WHAT DEV:FILE.EXT[P,PN] ; WHAT: TRO SW,NFL TRNE SW,SPT JRST WA010 CALL LIST JRST ER030 CALL INCR JRST ER030 MOVE CHAN,LST JRST WA020 WA010: OPEN DWHT,OPENA CALL OPCHK MOVE 17,QUEPPN MOVEM 17,LOOKA+3 TRO SW,ERI LOOKUP DWHT,LOOKA CALL LKCHK TRZ SW,NFL+ERI MOVE 17,QUEPPN MOVEM 17,LOOKA+3 ENTER DWHT,LOOKA CALL LKCHK OUTPUT DWHT, TRNN SW,NFL USETI DWHT,-1 MOVEI CHAN,DWHT WA020: MOVE 17,[%CVUPT] ;GENERATE INCRIMENTAL STATISTICS GETTAB 17, NOTDEF MOVE 16,17 SUB 16,UTIME MOVEM 17,UTIME MOVEM 16,UTIME+1 MOVE 17,[%CVNUL] GETTAB 17, NOTDEF MOVE 16,17 SUB 16,NTIME MOVEM 17,NTIME MOVEM 16,NTIME+1 MOVE 17,[%CVLST] GETTAB 17, NOTDEF MOVE 16,17 SUB 16,LTIME MOVEM 17,LTIME MOVEM 16,LTIME+1 MOVE 17,[%CVOHT] GETTAB 17, NOTDEF MOVE 16,17 SUB 16,OTIME MOVEM 17,OTIME MOVEM 16,OTIME+1 MOVE 17,[%CCRSP] GETTAB 17, NOTDEF JUMPE 17,WA023 HRLZS 17 MOVE 16,[XWD %CVRSX,.GTC0V] ADD 16,17 GETTAB 16, NOTDEF MOVE 15,16 SUB 15,RTIME MOVEM 16,RTIME MOVEM 15,RTIME+1 ADD 17,[XWD %CVRNX,.GTC0V] GETTAB 17, NOTDEF MOVE 16,17 SUB 16,RCOUNT MOVEM 17,RCOUNT MOVEM 16,RCOUNT+1 WA023: SETZM SCOUNT SETOM SCOUNT+1 HRLZI 17,-SCLSES WA025: HRL 16,17 HRRI 16,.GTCRT GETTAB 16, SETZ 16, MOVE 15,16 SUB 15,SCLASS(17) MOVEM 16,SCLASS(17) MOVEM 15,SCLASS+SCLSES(17) ADDM 15,SCOUNT SKIPE 15 HRRZM 17,SCOUNT+1 AOBJN 17,WA025 TRZN SW,NFL JRST WA030 MOVEI ADR,[ASCIZ /TIME PERIOD NULL IDLE LOST OVRHD OTHER RESPONSE SCHED-CLASSES/] CALL OUTASC CALL OUTCR TRNE SW,SPT CALL OUTCR WA030: SETZM TABPOS MSTIME 16, IDIVI 16,^D1000 MOVE TIM,16 CALL OUTTIM CALL TAB ^D11 MOVE 16,UTIME+1 IDIV 16,JIFFY MOVE TIM,16 CALL OUTTIM CALL TAB ^D21 MOVE 16,NTIME+1 IMULI 16,^D100 MOVE 17,UTIME+1 LSH 17,-1 ADD 16,17 IDIV 16,UTIME+1 MOVE DEC,16 CALL OUTDEC MOVEI CHAR,"%" CALL OTCHAR CALL TAB ^D26 MOVE 16,NTIME+1 SUB 16,LTIME+1 SKIPG 16 SETZ 16, IMULI 16,^D100 MOVE 17,UTIME+1 LSH 17,-1 ADD 16,17 IDIV 16,UTIME+1 MOVE DEC,16 CALL OUTDEC MOVEI CHAR,"%" CALL OTCHAR CALL TAB ^D31 MOVE 16,LTIME+1 IMULI 16,^D100 MOVE 17,UTIME+1 LSH 17,-1 ADD 16,17 IDIV 16,UTIME+1 MOVE DEC,16 CALL OUTDEC MOVEI CHAR,"%" CALL OTCHAR CALL TAB ^D36 MOVE 16,OTIME+1 IMULI 16,^D100 MOVE 17,UTIME+1 LSH 17,-1 ADD 16,17 IDIV 16,UTIME+1 MOVE DEC,16 CALL OUTDEC MOVEI CHAR,"%" CALL OTCHAR CALL TAB ^D42 MOVE 16,UTIME+1 SUB 16,NTIME+1 SUB 16,OTIME+1 SUB 16,SCOUNT SKIPG 16 SETZ 16, IMULI 16,^D100 MOVE 17,UTIME+1 LSH 17,-1 ADD 16,17 IDIV 16,UTIME+1 MOVE DEC,16 CALL OUTDEC MOVEI CHAR,"%" CALL OTCHAR CALL TAB ^D48 MOVE 16,RTIME+1 IMULI 16,^D100 IDIV 16,JIFFY IDIV 16,RCOUNT+1 MOVE DEC,16 CALL OUTPDC CALL TAB ^D57 SKIPGE SCOUNT+1 JRST WA050 PUSH PDP,[0] WA040: MOVE 17,(PDP) MOVE 16,SCLASS+SCLSES(17) MULI 16,^D100 DIV 16,UTIME+1 MOVE DEC,16 CALL OUTDEC MOVEI CHAR,"%" CALL OTCHAR MOVEI CHAR," " CALL OTCHAR AOS 17,(PDP) CAMG 17,SCOUNT+1 JRST WA040 POP PDP,17 WA050: CALL OUTCR TRNN SW,SPT JRST WA060 OUTPUT DWHT, GETSTS DWHT,STS CALL STSCHK RELEAS DWHT, JRST WA070 WA060: CALL LISTE WA070: RETURN SUBTTL PEK ; ; PEEK COMMAND ; CALLING SEQUENCE: *PEEK JOB ; COMMAND SEQUENCE: **E NNNNNN OR ; **D NNNNNN NNNNNN OR ; **E ; EXIT SEQUENCE: ** ; PEK: CALL INJOB JRST ER030 CALL INCR JRST ER030 CALL DOLOG SETZM ADDR TRZ SW,DEP MOVEI CHAN,TTY PK010: MOVEI CHAR,"*" CALL OTCHAR CALL OTCHAR OUTPUT TTY, INPUT TTY, ;INPUT COMMAND CALL INSIX CALL NXCHAR JUMPN SIX,PK020 JUMPN CHAR,PK070 RETURN PK020: CAMN SIX,[SIXBIT /D/] JRST PK060 CAME SIX,[SIXBIT /E/] JRST PK070 PK030: JUMPN CHAR,PK040 ;E COMMAND TRZN SW,DEP AOS ADDR JRST PK050 PK040: CAIE CHAR," " JRST PK070 CALL INOCT CALL NXCHAR JUMPN CHAR,PK070 MOVEM OCT,ADDR PK050: HRL 16,JOB HRRI 16,1 HRL 17,ADDR HRRI 17,VALUE CALL PK500 HRRZ OCT,ADDR CALL PK600 MOVEI ADR,[ASCIZ ./ .] CALL OUTASC HLRZ OCT,VALUE CALL PK600 MOVEI CHAR," " CALL OTCHAR HRRZ OCT,VALUE CALL PK600 CALL OUTCR OUTPUT TTY, JRST PK010 PK060: CAIE CHAR," " ;D COMMAND JRST PK070 CALL INOCT HRLM OCT,VALUE CALL NXCHAR CAIE CHAR," " JRST PK070 CALL INOCT HRRM OCT,VALUE CALL NXCHAR JUMPN CHAR,PK070 TRO SW,DEP HRL 16,JOB HRRI 16,1 TLO 16,400000 HRLI 17,VALUE HRR 17,ADDR CALL PK500 JRST PK010 PK070: MOVEI ADR,[ASCIZ /EH?/] ;INVALID COMMAND JRST PK100 PK080: MOVEI ADR,[ASCIZ /FAILED/] ;JOBPEK FAILED POP PDP,17 JRST PK100 PK090: MOVEI ADR,[ASCIZ /JOB NOT IN CORE/] ;JOB NOT IN CORE POP PDP,17 JRST PK100 PK100: TLZ SW,RRD ;ERROR RETURN CALL OUTASC CALL OUTCR OUTPUT TTY, JRST PK010 ; PK500: MOVEI 15,^D20 ;JOBPEK ROUTINE PK510: HRL 14,JOB HRRI 14,.GTSTS GETTAB 14, JRST PK520 TLNN 14,SWP JRST PK520 MOVEI 14,^D100 HIBER 14, NOP SOJG 15,PK510 JRST PK090 PK520: MOVEI 15,16 JOBPEK 15, JRST PK080 RETURN ; PK600: MOVEI 17,6 ;OUTPUT ROUTINE HRLZ 16,OCT PK610: SETZ 15, LSHC 15,3 ADDI 15,"0" MOVE CHAR,15 CALL OTCHAR SOJG 17,PK610 RETURN SUBTTL HELP ; ; HELP HOMMAND ; CALLING SEQUENCE: *HELP ; HELP: MOVE 17,PDP PUSH 17,1 MOVE 1,[SIXBIT /OPR/] PUSHJ 17,.HELPR## POP 17,1 RETURN SUBTTL WAT ; ; WATCH COMMAND ; CALLING SEQUENCE: *WATCH ; WAT: CALL INCR JRST ER030 RESET ;SETUP SPIRIT DATA AREA MOVEI 17,SPTTOP CORE 17, JRST ER130 MOVEI 17,SPTTOP HRLM 17,.JBSA MOVEM 17,.JBFF TRO SW,SPT MOVE 17,[SIXBIT /SPIRIT/] SETNAM 17, TLNE SW,DB JRST WT005 OPEN TTY,OPENT JRST ER020 OUTPUT TTY, MOVEI CHAN,TTY MOVEI ADR,[ASCIZ /DETACHING FROM TERMINAL/] CALL OUTASC CALL OUTCR OUTPUT TTY, MOVE 17,MYJOB TLO 17,AT.DET CALL PUTJOB WT005: MOVE 17,MYJOB MOVEM 17,JOB CALL CHKJOB MOVEM 17,MYLINE WT010: IFN SPTKJO,< ;SPIRIT KJOB CONDITIONAL MOVE 17,[SIXBIT /PTY/] SETO 16, REASSI 16, JUMPN 17,WT020 MOVEI 17,^D60 SLEEP 17, JRST WT010 > WT020: MOVEI 17,200 MSTIME 16, WT030: SETZM PPNS-1(17) SETZM RUNTIM-1(17) SETZM WARN-1(17) SETZM HUNG-1(17) MOVEM 16,TIME-1(17) SOJG 17,WT030 MOVEI 17,20 WT040: SETZM STRS-1(17) SETZM FCFS-1(17) SETZM LOW-1(17) SOJG 17,WT040 MOVEI 17,SPTWRN MOVEM 17,WRNOUT SETZM REECNT SPTREE: AOS REECNT RESET CALL PRIO TLNN SW,DB JRST WT045 OPEN TTY,OPENT JRST ER020 OUTPUT TTY, WT045: PUSH PDP,COMAND PUSH PDP,COMAND+1 PUSH PDP,COMAND+2 MOVE 17,[ASCII /SPIRI/] MOVEM 17,COMAND MOVE 17,[ASCII /T 000/] MOVEM 17,COMAND+1 SETZM COMAND+2 MOVE 15,REECNT IDIVI 15,^D100 IDIVI 16,^D10 DPB 15,[POINT 3,COMAND+1,20] DPB 16,[POINT 3,COMAND+1,27] DPB 17,[POINT 3,COMAND+1,34] SETZM JOB CALL DOLOG POP PDP,COMAND+2 POP PDP,COMAND+1 POP PDP,COMAND WT050: MOVE 17,TOPJOB MOVEM 17,JOB WT060: MOVE 17,JOB MSTIME 16, HRL 15,JOB ;TEST JOB HRRI 15,.GTSTS GETTAB 15, JRST WT080 TLNN 15,JNA JRST WT080 HRL 15,JOB HRRI 15,.GTPPN GETTAB 15, NOTDEF MOVEM 15,PPN CAME 15,PPNS(17) JRST WT090 SKIPE HUNG(17) JRST WT110 MOVE 15,PPN ;TEST PPN CAMN 15,HLPPPN JRST WT070 HLRZ 15,PPN CAIG 15,10 JRST WT110 MOVE 14,SYSSER CAIE 14,TUFSER JRST WT070 HLRZ 15,PPN CAIN 15,101 JRST WT110 LDB 15,[POINT 9,PPN,8] JUMPN 15,WT070 LDB 15,[POINT 3,PPN,11] CAIN 15,0 JRST WT110 CAIN 15,5 JRST WT110 WT070: HRL 15,JOB HRRI 15,.GTKCT GETTAB 15, NOTDEF CAME 15,RUNTIM(17) JRST WT075 IFE SPTKJD,< ;SPIRIT KJOB CONDITIONAL FOR DETACHED JOBS MOVE 14,JOB TRMNO. 14, JRST WT075 > HRL 14,JOB HRRI 14,.GTLIM GETTAB 14, NOTDEF TLNN 14,(JB.LBT) JRST WT100 WT075: MOVEM 16,TIME(17) MOVEM 15,RUNTIM(17) SETZM WARN(17) JRST WT110 WT080: SETZM PPN WT090: MOVE 15,PPN MOVEM 15,PPNS(17) SETZM RUNTIM(17) SETZM WARN(17) SETZM HUNG(17) MOVEM 16,TIME(17) JRST WT110 WT100: IFN SPTKJO,< ;SPIRIT KJOB CONDITIONAL MOVE 14,16 SUB 14,TIME(17) IDIVI 14,^D<60*1000> CAMG 14,WRNOUT JRST WT110 SKIPN WARN(17) JRST WT180 MOVE 14,16 SUB 14,WARN(17) IDIVI 14,^D<60*1000> CAMLE 14,^D15 JRST WT200 > WT110: SOSLE JOB JRST WT060 SETZ 16, WT120: SYSSTR 16, NOTDEF JUMPE 16,WT170 SETZ 17, WT130: SKIPN STRS(17) JRST WT140 CAMN 16,STRS(17) JRST WT150 AOJA 17,WT130 WT140: MOVEM 16,STRS(17) WT150: MOVE 12,[XWD 3,13] MOVE 13,16 DSKCHR 12, NOTDEF MOVEM 15,FCFS(17) IFN SPTDSK,< ;SPIRIT DSK CONDITIONAL CAIG 15,^D3000 JRST WT160 SETZM LOW(17) JRST WT120 WT160: SKIPGE 14,LOW(17) JRST WT120 JUMPE 14,WT250 CAIG 15,^D1000 JRST WT260 > JRST WT120 WT170: IFN SPTWHT,< ;SPIRIT WHAT CONDITIONAL MOVE 16,[%CVUPT] GETTAB 16, HRLOI 16,377777 SUB 16,UTIME IDIV 16,JIFFY CAIL 16,^D<15*60> CALL WHAT > IFN SPTWHO, ;SPIRIT WHO CONDITIONAL IFN SPTTIM, ;SPIRIT TIMES CONDITIONAL RESET CALL PRIO TLNN SW,DB JRST WT175 OPEN TTY,OPENT JRST ER020 OUTPUT TTY, WT175: MOVEI 17,^D60 SLEEP 17, JRST WT050 IFN SPTKJO,< ;SPIRIT KJOB CONDITIONAL WT180: MOVEM 16,WARN(17) CALL CHKJOB MOVEM 17,OLDLNE TLNE 17,AT.DET JRST WT190 TLZ 17,AT.MON TLO 17,AT.USR HRR 17,MYJOB CALL PUTJOB TLNE SW,DB JRST WT183 OPEN TTY,OPENT JRST WT185 OUTPUT TTY, WT183: MOVEI 15,1000+.TOSTP HLRZ 16,OLDLNE TRZ 16,AT.MON+AT.USR+AT.DET TRO 16,.UXTRM SETZ 17, MOVE 14,[XWD 3,15] TRMOP. 14, NOP CLRBFO MOVEI CHAN,TTY CALL OUTCR MOVEI ADR,[ASCIZ /;;SPIRIT: - RUN SOMETHING OR YOU'LL BE LOGGED OFF/] CALL OUTASC CALL OUTCR MOVEI CHAR,"." MOVE 17,OLDLNE TLNE 17,AT.MON CALL OTCHAR OUTPUT TTY, TLNN SW,DB RELEAS TTY, WT185: CALL RTMJOB MOVE 17,OLDLNE CALL PUTJOB WT190: JRST WT060 WT200: CALL DOLOG CALL CHKJOB MOVEM 17,OLDLNE TLNE 17,AT.DET JRST WT230 TLZ 17,AT.MON TLO 17,AT.USR HRR 17,MYJOB CALL PUTJOB TLNE SW,DB JRST WT203 OPEN TTY,OPENT JRST WT205 OUTPUT TTY, WT203: MOVEI 15,1000+.TOSTP HLRZ 16,OLDLNE TRZ 16,AT.MON+AT.USR+AT.DET TRO 16,.UXTRM SETZ 17, MOVE 14,[XWD 3,15] TRMOP. 14, NOP CLRBFO MOVEI CHAN,TTY CALL OUTCR CALL OUTCR MOVEI ADR,[ASCIZ /;;SPIRIT: - BYE BYE/] CALL OUTASC CALL OUTCR CALL OUTCR MOVEI CHAR,"." CALL OTCHAR MOVEI ADR,KJOB1 CALL OUTASC CALL OUTCR MOVE 17,SYSSER CAIN 17,TUFSER JRST WT204 CALL OUTCR MOVEI CHAR,"." CALL OTCHAR WT204: OUTPUT TTY, TLNN SW,DB RELEAS TTY, WT205: CALL RTMJOB MOVE 17,OLDLNE CALL PUTJOB WT230: CALL KJOB SKIPA JRST WT240 MOVE 17,JOB SETOM HUNG(17) WT240: JRST WT060 > IFN SPTDSK,< ;SPIRIT DSK CONDITIONAL WT250: AOS LOW(17) MOVE SIX,16 OPEN PTY,OPENP JRST ER070 MOVEI CHAN,PTY CALL OUTCR OUTPUT PTY, CALL PTYMON MOVEI ADR,[ASCIZ /SEND OPR WARNING: SYSTEM IS RUNNING OUT OF ROOM ON /] CALL OUTASC CALL OUTSIX CALL OUTCR OUTPUT PTY, CALL PTYMON RELEAS PTY, JRST WT170 WT260: SETOM LOW(17) MOVE SIX,16 OPEN PTY,OPENP JRST ER070 OUTPUT PTY, MOVEI CHAN,PTY CALL OUTCR OUTPUT PTY, CALL PTYMON MOVEI ADR,[ASCIZ .LOGIN 1,2.] CALL OUTASC CALL OUTCR OUTPUT PTY, CALL PTYUSR MOVEI ADR,[ASCIZ /SEND ALL WARNING: SYSTEM IS RUNNING OUT OF ROOM ON /] CALL OUTASC CALL OUTSIX MOVEI ADR,[ASCIZ / - OPR NOTIFIED/] CALL OUTASC CALL OUTCR OUTPUT PTY, CALL PTYMON MOVEI ADR,KJOB2 CALL OUTASC CALL OUTCR OUTPUT PTY, CALL PTYUSR RELEAS PTY, JRST WT170 > SUBTTL TIMES ; ; TIMES SPIRIT SUBFUNCTION ; CALLING SEQUENCE: CALL TIMES ; TIMES: MOVE 17,[%CNDTM] ;GET DAY TIME GETTAB 17, NOTDEF MOVEM 17,NOW OPEN TMS,OPENS ;TEST TIMES.SYS CALL OPCHK TS010: TRO SW,ERI SETZM LOOKS+3 LOOKUP TMS,LOOKS CALL LKCHK TRZA SW,ERI JRST TS080 LDB 17,[POINT 11,LOOKS+2,23] LDB 16,[POINT 12,LOOKS+2,35] DPB 16,[POINT 12,17,24] LDB 16,[POINT 3,LOOKS+1,20] DPB 16,[POINT 3,17,12] CAMN 17,CRETIM JRST TS090 MOVEM 17,CRETIM TLZ SW,RRD ;READ NEW TIMES.SYS TRO SW,FCM MOVEI CHAN,TMS TS020: CALL INSP CALL NXCHAR JUMPE CHAR,TS060 TLO SW,RRD CAIL CHAR,"0" CAILE CHAR,"9" JRST TS030 CALL INTIM HRLZ 16,TIM IDIVI 16,^D<24*60> HLL 16,NOW MOVEM 16,NXTTIM CAML 16,NOW JRST TS070 TS030: CALL NXCHAR JUMPE CHAR,TS060 CAIE CHAR,012 JRST TS030 JRST TS020 TS060: HLLZ 17,NOW ADD 17,[XWD 1,0] MOVEM 17,NXTTIM TS070: TRZ SW,FCM TS080: RELEAS TMS, RETURN TS090: MOVE 17,NOW ;TEST FOR NEXT TIME CAMGE 17,NXTTIM JRST TS280 TLZ SW,RRD ;FETCH NEXT TIME TRO SW,FCM HRRZ 17,NXTTIM JUMPE 17,TS150 MOVEI CHAN,TMS TS100: CALL INSP CALL NXCHAR JUMPE CHAR,TS290 TLO SW,RRD CAIL CHAR,"0" CAILE CHAR,"9" JRST TS110 CALL INTIM HRLZ 16,TIM IDIVI 16,^D<24*60> HLL 16,NOW CAMN 16,NXTTIM JRST TS150 TS110: CALL NXCHAR JUMPE CHAR,TS290 CAIE CHAR,012 JRST TS110 JRST TS100 TS150: TLZ SW,RRD ;DO NEXT TIME TRZ SW,TOPN+TLGN TS155: SETZM TIMSTS TS160: MOVEI CHAN,TMS ;PROCESS NEXT FIELD CALL INSP CALL NXCHAR JUMPE CHAR,TS260 CAIN CHAR,"*" JRST TS180 CAIN CHAR,"@" JRST TS180 CAIN CHAR,";" JRST TS250 TLO SW,RRD CAIL CHAR,"0" CAILE CHAR,"9" JRST TS170 CALL INTIM HRLZ 16,TIM IDIVI 16,^D<24*60> HLL 16,NOW CAMN 16,NXTTIM JRST TS160 MOVEM 16,NXTTIM JRST TS270 TS170: CALL INSIX JUMPE SIX,TS250 MOVEI ADR,STAB1 CALL DSPTCH JUMPL 17,TS250 JRST @DTAB1(17) TS180: MOVEM CHAR,BREAK ;SETUP SUBJOB TROE SW,TOPN JRST TS200 IFN SPTTLG,< ;TIMES LOG CONDITIONAL OPEN TMSL,OPENM ;OPEN UP LOG CALL OPCHK TS182: TRO SW,NFL MOVE 17,QUEPPN MOVEM 17,LOOKM+3 TRO SW,ERI LOOKUP TMSL,LOOKM CALL LKCHK TRZA SW,ERI JRST TS192 TRZ SW,NFL MOVN 17,LOOKM+3 HLRZ 16,17 IDIVI 16,200 CAIGE 16,SPTSIZ JRST TS192 OPEN TMSR,OPENR CALL OPCHK MOVE 17,QUEPPN MOVEM 17,LOOKR+3 ENTER TMSR,LOOKR CALL LKCHK OUTPUT TMSR, USETI TMSL,SPTSIZ/2 TS184: SKIPLE MRNG+5 JRST TS186 INPUT TMSL, GETSTS TMSL,STS CALL STSCHK TRNE STS,IO.EOF JRST TS190 TS186: ILDB CHAR,MRNG+4 SOS MRNG+5 JUMPE CHAR,TS184 IDPB CHAR,RRNG+1 SOSLE RRNG+2 JRST TS188 OUTPUT TMSR, GETSTS TMSR,STS CALL STSCHK TS188: JRST TS184 TS190: OUTPUT TMSR, GETSTS TMSR,STS CALL STSCHK CLOSE TMSL, RELEAS TMSR, JRST TS182 TS192: MOVE 17,QUEPPN MOVEM 17,LOOKM+3 ENTER TMSL,LOOKM CALL LKCHK OUTPUT TMSL, TRNN SW,NFL USETI TMSL,-1 MOVEI CHAN,TMSL ;WRITE HEADER INTO LOG CALL OUTCR MOVEI ADR,[ASCIZ /************************* /] CALL OUTASC DATE DAT, CALL OUTDAT MOVEI ADR,[ASCIZ / /] CALL OUTASC HRRZ 17,NXTTIM IMULI 17,^D<24*60> ADDI 17,^D<24*60>-1 HLRZ TIM,17 CALL OUTTIM MOVEI ADR,[ASCIZ / ************************/] CALL OUTASC CALL OUTCR CALL OUTCR > OPEN PTY,OPENP ;OPEN UP PTY JRST ER070 OUTPUT PTY, MOVEI CHAN,PTY CALL OUTCR OUTPUT PTY, CALL PTYMON IFN SPTTLG,< ;TIMES LOG CONDITIONAL MOVEI 17,TMSL ;START UP LOGGING MOVEM 17,LOGDEV TRO SW,PLG > TS200: MOVE 17,TIMSTS ;LOGIN SUBJOB TRNN 17,T.NLG TROE SW,TLGN JRST TS210 IFN SPTTLG,< ;TIMES LOG CONDITIONAL SETZM LOGDEV ;TURN OFF LOGGING TRZ SW,PLG > MOVEI CHAN,PTY MOVEI ADR,[ASCIZ /LOGIN 1,2/] CALL OUTASC CALL OUTCR OUTPUT PTY, CALL PTYUSR MOVEI 17,PTY JOBSTS 17, NOTDEF TLNN 17,(JB.ULI) JRST TS265 MOVEI ADR,[ASCIZ /SET HPQ 1/] CALL OUTASC CALL OUTCR OUTPUT PTY, CALL PTYMON MOVEI ADR,[ASCIZ /SET DSKPRI 3/] CALL OUTASC CALL OUTCR OUTPUT PTY, CALL PTYMON MOVEI ADR,[ASCIZ /SET WATCH DAY/] CALL OUTASC CALL OUTCR OUTPUT PTY, CALL PTYMON IFN SPTTLG,< ;TIMES LOG CONDITIONAL MOVEI 17,TMSL ;TURN ON LOGGING MOVEM 17,LOGDEV TRO SW,PLG > TS210: MOVE 17,BREAK ;SEND THE REST OF THE LINE CAIE 17,"*" JRST TS220 MOVEI CHAN,TMS CALL NXCHAR JUMPE CHAR,TS260 MOVEI CHAN,PTY CALL OTCHAR CAIE CHAR,012 JRST TS210 OUTPUT PTY, CALL PTYUSR JRST TS155 TS220: MOVEI CHAN,TMS ;SEND BRACKETED MESSAGE CALL NXCHAR JUMPE CHAR,TS260 CAIG CHAR,040 JRST TS220 MOVEM CHAR,BREAK TS230: MOVEI CHAN,TMS CALL NXCHAR JUMPE CHAR,TS260 CAMN CHAR,BREAK JRST TS240 MOVEI CHAN,PTY CALL OTCHAR JRST TS230 TS240: OUTPUT PTY, CALL PTYUSR MOVEI CHAN,TMS JRST TS250 TS250: CALL NXCHAR ;EAT THE REST OF THE LINE JUMPE CHAR,TS260 CAIE CHAR,012 JRST TS250 JRST TS155 TS260: HLLZ 17,NOW ;EOF, START AT TOP OF FILE ADD 17,[XWD 1,0] MOVEM 17,NXTTIM JRST TS270 TS265: TRZ SW,TLGN ;CAN'T LOG IN TS270: TRZN SW,TLGN ;FINISH UP SUBJOB JRST TS275 IFN SPTTLG,< ;TIMES LOG CONDITIONAL SETZM LOGDEV ;TURN OFF LOGGING TRZ SW,PLG > MOVEI CHAN,PTY ;LOGOUT SUBJOB MOVEI CHAR,003 CALL OTCHAR OUTPUT PTY, CALL PTYMON MOVEI ADR,KJOB2 CALL OUTASC CALL OUTCR OUTPUT PTY, CALL PTYUSR TS275: TRZN SW,TOPN JRST TS280 IFN SPTTLG,< ;TIMES LOG CONDITIONAL SETZM LOGDEV ;CLOSE DOWN LOG TRZ SW,PLG OUTPUT TMSL, GETSTS TMSL,STS CALL STSCHK RELEAS TMSL, > RELEAS PTY, TS280: TRZ SW,FCM RELEAS TMS, RETURN TS290: TRZ SW,FCM ;NEXT TIME NOT FOUND SETZM CRETIM RELEAS TMS, RETURN ; TS400: CALL TS800 ;ONLY ON WEEKDAY CAIN 17,0 JRST TS250 CAIN 17,6 JRST TS250 JRST TS160 TS410: CALL TS800 ;NOT ON SUNDAY CAIN 17,0 JRST TS250 JRST TS160 TS420: MOVE 17,SYSFEA ;ONLY IF OPR ON DUTY TRNE 17,400 JRST TS250 JRST TS160 TS430: CALL TS800 ;ONLY ON SATURDAY CAIE 17,6 JRST TS250 JRST TS160 TS440: CALL TS800 ;ONLY ON SUNDAY CAIE 17,0 JRST TS250 JRST TS160 TS450: CALL TS800 ;ONLY ON WEEKEND CAIN 17,0 JRST TS160 CAIN 17,6 JRST TS160 JRST TS250 TS460: CALL TS800 ;ONLY ON THURSDAY CAIE 17,4 JRST TS250 JRST TS160 TS470: CALL NXCHAR ;ONLY ON A PARTICULAR DATE OR DATES JUMPE CHAR,TS260 CAIE CHAR,":" JRST TS250 TRZ SW,FND TS480: CALL INDAT JUMPE DAT,TS250 CALL NXCHAR JUMPE CHAR,TS260 CAIN CHAR,":" JRST TS490 TLO SW,RRD MOVE 17,DAT ;DATE:DD-MMM-YY JRST TS500 TS490: PUSH PDP,DAT ;DATE:DD-MMM-YY:DD-MMM-YY CALL INDAT POP PDP,17 JUMPE DAT,TS250 TS500: DATE 16, CAML 16,17 CAMLE 16,DAT SKIPA TRO SW,FND CALL NXCHAR JUMPE CHAR,TS260 CAIN CHAR,"," JRST TS480 TLO SW,RRD TRNN SW,FND JRST TS250 JRST TS160 TS510: MOVEI 17,T.NLG ;NO LOGIN NECESSARY IORM 17,TIMSTS JRST TS160 TS520: CALL TS800 ;ONLY ON MONDAY CAIE 17,1 JRST TS250 JRST TS160 ; TS800: DATE 15, ;CALCULATE DAY OF THE WEEK IDIVI 15,^D<12*31> IDIVI 16,^D31 ADDI 17,3 ADD 17,[EXP 0,3,3,6,1,4,6,2,5,0,3,5](16) TRNN 15,3 CAIG 16,1 SKIPA ADDI 17,1 ADD 17,15 ADDI 15,3 IDIVI 15,4 ADD 17,15 MOVE 16,17 IDIVI 16,7 RETURN ; STAB1: SIXBIT /WEEKDA/ SIXBIT /NOTSUN/ SIXBIT /OPR/ SIXBIT /SATURD/ SIXBIT /SUNDAY/ SIXBIT /WEEKEN/ SIXBIT /THURSD/ SIXBIT /NEVER/ SIXBIT /ALWAYS/ SIXBIT /SPECIA/ SIXBIT /DATE/ SIXBIT /NOLOGI/ SIXBIT /MONDAY/ 0 ; DTAB1: TS400 TS410 TS420 TS430 TS440 TS450 TS460 TS250 TS160 TS160 TS470 TS510 TS520 SUBTTL ATT ; ; ATTACH COMMAND ; CALLING SEQUENCE: *ATTACH JOB DEVICE: ; ATT: CALL INJOB JRST ER030 CALL INSP JUMPE 17,ER030 CALL NXCHAR SETO OCT, CAIN CHAR,"T" SETZ OCT, CAIN CHAR,"C" MOVE OCT,CTYLNE JUMPL OCT,ER030 CALL NXCHAR CAIE CHAR,"T" JRST ER030 CALL NXCHAR CAIE CHAR,"Y" JRST ER030 SKIPG OCT CALL INOCT PUSH PDP,OCT CALL NXCHAR CAIE CHAR,":" TLO SW,RRD CALL INCR JRST ER030 CALL CHKBAT CALL DOLOG CALL CHKJOB POP PDP,16 DPB 16,[POINT 7,17,17] TLZ 17,AT.DET CALL PUTJOB RETURN SUBTTL DBUG ; ; DEBUG COMMAND ; CALLING SEQUENCE: *DEBUG ; DBUG: CALL INCR JRST ER030 TLC SW,DB RETURN SUBTTL KSYS ; ; KSYS COMMAND ; CALLING SEQUENCE: *KSYS HHMM OR ; *KSYS +HHMM OR ; *KSYS ; KSYS: CALL INCR JRST KS010 SETZ 17, ;WITHOUT TIME PUSH PDP,17 JRST KS020 KS010: CALL INAFT ;WITH TIME CAIG 17,5 MOVEI 17,5 PUSH PDP,17 CALL INCR JRST ER030 KS020: SETZM JOB ;LOG IT CALL DOLOG POP PDP,17 HRLI 17,.STKSY ;SET KSYS SETUUO 17, NOTDEF RETURN SUBTTL BOMB ; ; BOMB COMMAND ; CALLING SEQUENCE: *BOMB NNNNNNNNNNNN ; COMMAND SEQUENCE: ARE YOU SURE? YES OR ; ARE YOU SURE? NO ; BOMB: CALL INCR JRST BM010 MOVEI 17,2 ;WITHOUT NUMBER PUSH PDP,17 JRST BM020 BM010: CALL INOCT ;WITH NUMBER PUSH PDP,OCT CALL INCR JRST ER030 BM020: MOVE 17,[%NSKTM] ;TEST KSYS GETTAB 17, NOTDEF JUMPE 17,BM030 JUMPL 17,BM040 MOVEI 17,1 SLEEP 17, JRST BM020 BM030: CALL SURE ;CONFIRM BM040: SETZM JOB ;LOG IT CALL DOLOG MOVEI 17,^D10 ;COUNT DOWN BM050: LIGHTS 17, MOVEI 16,1 SLEEP 16, SOJGE 17,BM050 MOVEI 16,CRSHWD ;DO IT POP PDP,17 CALL POKE RETURN SUBTTL PRIV ; ; PRIVILEGE COMMAND ; CALLING SEQUENCE: *PRIVILEGE JOB NNNNNNNNNNNN OR ; *PRIVILEGE JOB +NNNNNNNNNNNN OR ; *PRIVILEGE JOB -NNNNNNNNNNNN ; PRIV: CALL INJOB JRST ER030 CALL INSP JUMPE 17,ER030 CALL NXCHAR SETZ 17, CAIN CHAR,"+" MOVE 17,[IOR 17,15] CAIN CHAR,"-" MOVE 17,[ANDCM 17,15] JUMPN 17,PV010 TLO SW,RRD MOVE 17,[MOVE 17,15] PV010: PUSH PDP,17 CALL INOCT PUSH PDP,OCT CALL INCR JRST ER030 CALL DOLOG MOVE 17,[XWD .GTPRV,.GTSLF] GETTAB 17, NOTDEF HRRZ 16,17 ADD 16,JOB HRL 17,JOB HRRI 17,.GTPRV GETTAB 17, NOTDEF POP PDP,15 POP PDP,14 XCT 14 CALL POKE MOVEI CHAN,TTY MOVE OCT,17 MOVEI ADR,[ASCIZ /OLD VALUE: /] CALL OUTASC CALL OUTOCT CALL OUTCR OUTPUT TTY, RETURN SUBTTL VM ; ; VM COMMAND ; CALLING SEQUENCE: *VM JOB VIRTUAL,PHYSICAL ; VM: CALL INJOB ;GET JOB NUMBER JRST ER030 CALL INSP ;GET VIRTUAL LIMIT JUMPE 17,ER030 CALL NXCHAR JUMPE CHAR,ER030 TLO SW,RRD CALL INDEC CAILE DEC,^D512 MOVEI DEC,^D512 HRLS DEC PUSH PDP,DEC CALL NXCHAR ;GET PHYSICAL LIMIT CAIE CHAR,"," JRST ER030 CALL NXCHAR JUMPE CHAR,ER030 TLO SW,RRD CALL INDEC CAILE DEC,^D512 MOVEI DEC,^D512 HRRM DEC,(PDP) CALL INCR JRST ER030 CALL DOLOG ;LOG IT HRL 17,JOB ;GET OLD LIMIT HRRI 17,.GTMVL GETTAB 17, NOTDEF EXCH 17,(PDP) ;SET IT HRRZ 15,JOB MOVE 16,[XWD .STUVM,17] MOVE 14,[XWD 2,15] JBSET. 14, NOTDEF MOVEI CHAN,TTY ;REPORT MOVEI ADR,[ASCIZ /OLD VALUE: /] CALL OUTASC HLRZ DEC,(PDP) CALL OUTDEC MOVEI CHAR,"," CALL OTCHAR POP PDP,17 HRRZ DEC,17 CALL OUTDEC CALL OUTCR OUTPUT TTY, RETURN SUBTTL LIM ; ; LIMIT COMMAND ; CALLING SEQUENCE: *LIMIT JOB TIME ; LIM: CALL INJOB JRST ER030 CALL INSP JUMPE 17,ER030 CALL INTIM PUSH PDP,TIM CALL INCR JRST ER030 CALL DOLOG HRL 17,JOB HRRI 17,.GTLIM GETTAB 17, NOTDEF LDB 16,[POINT 24,17,35] IDIV 16,JIFFY EXCH 16,(PDP) HRRZ 15,JOB HRLI 16,.STTLM MOVE 17,[XWD 2,15] JBSET. 17, NOTDEF MOVEI CHAN,TTY MOVEI ADR,[ASCIZ /OLD LIMIT: /] CALL OUTASC POP PDP,TIM MOVEI ADR,[ASCIZ /NONE/] SKIPN TIM CALL OUTASC SKIPE TIM CALL OUTTIM CALL OUTCR OUTPUT TTY, RETURN SUBTTL FOR ; ; FORCE COMMAND ; CALLING SEQUENCE: *FORCE JOB NAME ; FOR: CALL INJOB JRST ER030 CALL INSP JUMPE 17,ER030 CALL INFSX JUMPE SIX,ER030 PUSH PDP,SIX CALL INCR JRST ER030 CALL CHKBAT CALL DOLOG MOVE 15,[XWD 2,16] POP PDP,16 MOVE 17,JOB FRCUUO 15, NOTDEF RETURN SUBTTL EX ; ; EXIT COMMAND ; CALLING SEQUENCE: *EXIT ; EXIT SEQUENCE: .CONTINUE ; EX: CALL INCR JRST ER030 EXIT1: SKPINC ;FAST EXIT WITH MESSAGE NOP OUTSTR EX900 EXIT2: TLNN SW,JLG ;FAST EXIT JRST EXIT3 EXIT 1, RETURN ; EXIT0: TLNN SW,JLG ;FULL EXIT JRST EXIT3 EXIT ; EXIT3: SKPINC ;LOGOUT NOP OUTSTR EX910 LOGOUT ; EX900: BYTE (7) 7,1,1,7,1,1,7,0 EX910: ASCIZ / .KJOB ./ SUBTTL PRIO AND LOCKS ; ; ROUTINE TO SET JOB IN HPQ ; CALLING SEQUENCE: CALL PRIO ; PRIO: TLNN SW,PRV+DB RETURN MOVEI 17,1 HPQ 17, NOP MOVE 17,[XWD .DUPRI,[XWD -1,1]] DISK. 17, NOP RETURN ; ; ROUTINE TO LOCK JOB IN CORE ; CALLING SEQUENCE: CALL LOCKS ; LOCKS: TLNE SW,PRV+DB TLNE SW,LCK RETURN MOVE 17,[XWD 7,7] ;LOCK IT LOCK 17, JRST LR010 TLO SW,LCK PUSH PDP,CHAN ;TYPE MESSAGE MOVEI CHAN,TTY MOVEI ADR,[ASCIZ /[LOCKED]/] CALL OUTASC CALL OUTCR OUTPUT TTY, POP PDP,CHAN LR010: RETURN ; ; ROUTINE TO UNLOCK JOB FROM CORE ; CALLING SEQUENCE: CALL LOCKE ; LOCKE: TLNN SW,LCK RETURN MOVE 17,[XWD 1,1] ;UNLOCK IT UNLOK. 17, JRST LR020 TLZ SW,LCK PUSH PDP,CHAN ;TYPE MESSAGE MOVEI CHAN,TTY MOVEI ADR,[ASCIZ /[UNLOCKED]/] CALL OUTASC CALL OUTCR OUTPUT TTY, POP PDP,CHAN LR020: RETURN SUBTTL DOLOG ; ; ROUTINE TO LOG OPR ACTION IN QUE:OPR.LOG ; CALLING SEQUENCE: CALL DOLOG ; INPUT PARAMETERS: JOB ; AC'S USED: ALL ; DOLOG: SKIPN JOB JRST DL010 HRL 17,JOB HRRI 17,.GTSTS GETTAB 17, NOTDEF TLNN 17,JNA JRST ER060 DL010: IFN OPRLOG,< ;OPR LOG CONDITIONAL TLNN SW,PRV RETURN PUSH PDP,CHAN SETZM REPLY ;ASK WHY? TRNE SW,WHY TRNE SW,SPT JRST DL050 TRZ SW,WHY MOVSI 17,WHY ANDCAM 17,CMDADR MOVEI CHAN,TTY MOVEI ADR,[ASCIZ /WHY: /] CALL OUTASC OUTPUT TTY, TLZ SW,RRD INPUT TTY, MOVEI 17,^D80 MOVE 16,[POINT 7,REPLY] DL030: CALL NXCHAR JUMPE CHAR,DL040 IDPB CHAR,16 SOJG 17,DL030 DL040: SETZ 17, IDPB 17,16 DL050: MOVEI CHAN,LOG OPEN LOG,OPENL CALL OPCHK TRO SW,NFL MOVE 17,QUEPPN MOVEM 17,LOOKL+3 TRO SW,ERI LOOKUP LOG,LOOKL CALL LKCHK TRZ SW,ERI+NFL MOVE 17,QUEPPN MOVEM 17,LOOKL+3 ENTER LOG,LOOKL CALL LKCHK OUTPUT LOG, TRNN SW,NFL USETI LOG,-1 DATE DAT, CALL OUTDAT MOVEI CHAR," " CALL OTCHAR MSTIME 16, IDIVI 16,^D1000 MOVE TIM,16 CALL OUTTIM MOVEI CHAR," " CALL OTCHAR TLNN SW,DB JRST DL060 MOVEI ADR,[ASCIZ /DEBUG /] CALL OUTASC DL060: MOVEI ADR,COMAND CALL OUTASC SKIPN REPLY JRST DL070 MOVEI ADR,[ASCIZ / ;/] CALL OUTASC MOVEI ADR,REPLY CALL OUTASC DL070: SKIPN JOB JRST DL080 MOVEI ADR,[ASCIZ / - /] CALL OUTASC TDZ SW,[XWD FST+PRF,FND] TLO SW,SLW CALL WHO2 TRNE SW,FND JRST DL090 MOVEI ADR,[ASCIZ /NO ONE/] CALL OUTASC DL080: CALL OUTCR DL090: OUTPUT LOG, GETSTS LOG,STS CALL STSCHK RELEAS LOG, POP PDP,CHAN > RETURN SUBTTL CHKBAT ; ; ROUTINE TO CHECK FOR MEDDLING WITH BATCH OR CONTROLLED JOBS ; CALLING SEQUENCE: CALL CHKBAT ; INPUT PARAMETERS: JOB ; AC'S USED: ALL ; CHKBAT: SKIPN 17,JOB ;IS JOB CONTROLLED? JRST CB020 CTLJOB 17, JRST CB020 JUMPLE 17,CB020 EXCH 17,JOB ;YES, SAVE JOB PUSH PDP,17 PUSH PDP,CHAN ;TELL USER MOVEI CHAN,TTY CALL OUTCR MOVEI ADR,[ASCIZ /% WARNING: THIS JOB IS CONTROLLED BY:/] CALL OUTASC CALL OUTCR CALL OUTCR TDZ SW,[FST+SLW+PRF,FND] ;DO A WHO CALL WHO2 TRNE SW,FND JRST CB010 MOVEI ADR,[ASCIZ /NO ONE/] CALL OUTASC CALL OUTCR CB010: CALL OUTCR CALL SURE ;ASK FOR CONFIRMATION POP PDP,CHAN POP PDP,JOB CB020: RETURN SUBTTL KJOB ; ; ROUTINE TO KILL A JOB ; CALLING SEQUENCE: CALL KJOB ; ERROR RETURN ; INPUT PARAMETERS: JOB ; AC'S USED: ALL ; KJOB: MOVE 17,SYSSER ;TUFTS? CAIE 17,TUFSER JRST KJ050 ;NO MOVE 17,JOB ;DETACHED JOB? TRMNO. 17, JRST KJ050 ;NO KJ010: HRLI 17,AT.MON ;YES, USE FORCED COMMAND CALL GETJOB MOVEI ADR,[ASCIZ /HALT/] CALL OUTASC CALL OUTCR OUTPUT PTY, CALL PTYMON CALL RETJOB KJ030: MOVE 15,[XWD 2,16] MOVE 16,[SIXBIT /KJOB/] MOVE 17,JOB FRCUUO 15, JRST KJ070 MOVEI 17,^D60 KJ040: HRL 16,JOB HRRI 16,.GTSTS GETTAB 16, JRST KJ070 TLNN 16,JRUN+JLOG JRST KJ060 MOVEI 16,1 SLEEP 16, SOJG 17,KJ040 JRST KJ070 KJ050: HRLI 17,AT.MON ;USE PTY CALL GETJOB MOVEI ADR,[ASCIZ /HALT/] CALL OUTASC CALL OUTCR OUTPUT PTY, CALL PTYMON MOVEI ADR,KJOB1 CALL OUTASC CALL OUTCR OUTPUT PTY, CALL PTYUSR RELEAS PTY, HRL 17,JOB HRRI 17,.GTSTS GETTAB 17, JRST KJ070 TLNE 17,JNA JRST KJ070 KJ060: AOS (PDP) ;SUCCESS KJ070: RETURN ;RETURN SUBTTL JOB ; ; ROUTINE TO CHECK A JOBS LINE STATUS ; CALLING SEQUENCE: CALL CHKJOB ; INPUT PARAMETERS: JOB ; OUTPUT PARAMETERS: AC 17 HOLDS ATTACH UUO DATA ; CHKJOB: MOVE 17,JOB TLO 17,AT.USR MOVN 16,JOB JOBSTS 16, NOTDEF TLNE 16,(JB.UML) TLC 17,AT.MON+AT.USR MOVE 16,JOB TRMNO. 16, JRST CJ010 DPB 16,[POINT 7,17,17] JRST CJ020 CJ010: SKIPE 16 NOTDEF TLC 17,AT.MON+AT.USR TLO 17,AT.DET CJ020: RETURN ; ; ROUTINE TO ATTACH A JOB TO A PTY ; CALLING SEQUENCE: CALL GETJOB ; INPUT PARAMETERS: JOB ; AC 17 HOLDS ATTACH UUO DATA OR ZERO ; OUTPUT PARAMETRS: OLDLNE ; GETJOB: PUSH PDP,17 OPEN PTY,OPENP JRST ER070 OUTPUT PTY, MOVEI CHAN,PTY CALL OUTCR OUTPUT PTY, CALL PTYMON CALL CHKJOB MOVEM 17,OLDLNE MOVEI 17,PTY DEVNAM 17, NOTDEF LDB 16,[POINT 3,17,23] LDB 15,[POINT 6,17,29] JUMPE 15,GJ010 ANDI 15,7 LSH 16,3 ADD 16,15 LDB 15,[POINT 6,17,35] JUMPE 15,GJ010 ANDI 15,7 LSH 16,3 ADD 16,15 GJ010: ADD 16,PTYDSP MOVE 17,JOB HRL 17,16 POP PDP,16 TLNN 16,AT.MON+AT.USR MOVE 16,OLDLNE TLO 17,AT.MON TLNE 16,AT.USR TLC 17,AT.MON+AT.USR ATTACH 17, NOTDEF RETURN ; ; ROUTINE TO ATTACH A JOB TO A LINE ; CALLING SEQUENCE: CALL PUTJOB ; INPUT PARAMETERS: AC 17 HOLDS ATTACH UUO DATA ; PUTJOB: TLNN 17,AT.DET JRST PJ010 HRRZ 16,17 TRMNO. 16, JRST PJ020 HRLZ 17,16 PJ010: ATTACH 17, NOTDEF RETURN PJ020: SKIPE 16 NOTDEF RETURN ; ; ROUTINE TO RETURN A JOB FROM A PTY ; CALLING SEQUENCE: CALL RETJOB ; INPUT PARAMETERS: JOB ; OLDLNE ; RETJOB: CALL CHKJOB MOVE 16,OLDLNE TLZ 16,AT.USR TLO 16,AT.MON TLNE 17,AT.USR TLC 16,AT.MON+AT.USR MOVE 17,16 CALL PUTJOB RELEAS PTY, RETURN ; ; ROUTINE TO RETURN SPIRIT TO IT'S TTY ; CALLING SEQUENCE: CALL RTMJOB ; INPUT PARAMETERS: MYLINE ; RTMJOB: MOVE 17,MYLINE CALL PUTJOB RETURN SUBTTL PTY ; ; ROUTINE TO WAIT FOR PTY JOB TO READ INPUT ; CALL SEQUENCE: CALL PTYWAT ; ERROR RETURN ; PTYWAT: WAIT PTY, SETZM HBCNT PW010: MOVE 14,[XWD 3,15] MOVEI 15,.TOSIP MOVE 16,JOB TRMNO. 16, JRST PW030 TRMOP. 14, JRST PW020 CALL PTYHIB JRST PW030 JRST PW010 PW020: AOS (PDP) PW030: RETURN ; ; ROUTINE TO READ OUTPUT FROM A PTY IN USER MODE ; CALLING SEQUENCE: CALL PTYUSR ; PTYUSR: SETZM HBCNT PU010: CALL PTYOUT TLNE 17,(JB.UDI) JRST PU020 CALL PTYHIB JRST PU020 JRST PU010 PU020: RETURN ; ; ROUTINE TO READ FROM A PTY IN MONITOR MODE ; CALLING SEQUENCE: CALL PTYMON ; PTYMON: SETZM HBCNT TRO SW,POUT+PTL CALL PTYOUT TRZ SW,POUT+PTL RETURN ; ; ROUTINE TO READ FROM A PTY IN ANY MODE (NOT AS FAILSAFE) ; CALLING SEQUENCE: CALL PTYALL ; PTYALL: SETZM HBCNT CALL PTYOUT RETURN ; ; ROUTINE TO READ FROM A PTY ; CALLING SEQUENCE: CALL PTYOUT ; INPUT PARAMETERS: HBCNT ; LOGDEV (IF LOGGING) ; POUT (SW BIT) ; PTL (SW BIT) ; AC'S USED: CHAN ; PTYOUT: MOVEI 17,PTY JOBSTS 17, NOTDEF TLNN 17,(JB.UOA) JRST PT020 INPUT PTY, TRZ SW,POUT TDNN SW,[XWD DB,PLG] JRST PTYOUT PUSH PDP,CHAN SKIPN CHAN,LOGDEV MOVEI CHAN,TTY PT010: ILDB CHAR,PRNG+4 CALL OTCHAR SOSLE PRNG+5 JRST PT010 CAIN CHAN,TTY OUTPUT TTY, POP PDP,CHAN JRST PTYOUT PT020: TRNN SW,POUT JRST PT030 CALL PTYHIB JRST PT030 JRST PTYOUT PT030: RETURN ; ; ROUTINE TO HIBERNATE FOR PTY ACTIVITY ; CALLING SEQUENCE: CALL PTYHIB ; ERROR RETURN ; INPUT PARAMETERS: HBCNT ; PTL (SW BIT) ; PTYHIB: MOVE 16,[HB.RPT+^D1000] HIBER 16, NOTDEF PH010: AOS 16,HBCNT TRNE SW,PTL CAIG 16,^D60 AOS (PDP) RETURN SUBTTL POKE ; ; ROUTINE TO CHANGE A WORD IN THE MONITOR ; CALLING SEQUENCE: CALL POKE ; INPUT PARAMETERS: AC 16 HOLDS THE EXECUTIVE ADDRESS ; AC 17 HOLDS THE NEW VALUE ; OUTPUT PARAMETERS: AC 17 HOLDS THE OLD VALUE ; POKE: MOVE 14,[XWD 3,15] MOVE 15,16 PEEK 16, PUSH PDP,16 POKE. 14, NOTDEF POP PDP,17 RETURN SUBTTL DSPTCH ; ; ROUTINE TO LOCATE SIXBIT ENTRY IN DISPATCH TABLE ; CALLING SEQUENCE: CALL DSPTCH ; INPUT PARAMETERS: SIX ; ADR ; OUTPUT PARAMETERS: 17 (-1 INDICATES ERROR) ; DSPTCH: SETZ 17, MOVE 16,ADR DP010: SKIPN (16) JRST DP050 CAMN SIX,(16) JRST DP040 MOVEI 15,6 MOVE 14,[POINT 6,SIX] MOVE 13,[POINT 6,(16)] DP020: ILDB 12,14 JUMPE 12,DP030 ILDB 11,13 CAME 11,12 AOJA 16,DP010 SOJG 15,DP020 DP030: JUMPG 17,DP060 MOVE 17,16 AOJA 16,DP010 DP040: MOVE 17,16 DP050: JUMPE 17,DP060 SUB 17,ADR RETURN DP060: SETO 17, ;ERROR RETURN SUBTTL SURE ; ; ROUTINE TO ASK FOR CONFIRMATION ; CALLING SEQUENCE: CALL SURE ; COMMAND SEQUENCE: ARE YOU SURE? YES OR ; ARE YOU SURE? NO ; AC'S USED: ALL ; SURE: MOVEI CHAN,TTY MOVEI ADR,[ASCIZ /ARE YOU SURE? /] CALL OUTASC OUTPUT TTY, TLZ SW,RRD INPUT TTY, CALL INSIX JUMPE SIX,SURE CALL NXCHAR JUMPN CHAR,SURE LDB 17,[POINT 6,SIX,5] CAIE 17,'Y' JRST ERROR RETURN SUBTTL LIST ; ; ROUTINE TO READ A FOO AND OPEN FOR LISTING ; CALLING SEQUENCE: CALL LIST ; ERROR RETURN ; OUTPUT PARAMETERS: LST ; LIST: CALL INFOO ;READ A FOO JRST LT090 MOVEM 17,LOOKF+3 ;SET DEFAULTS MOVEM 16,LOOKF+2 MOVEM 15,LOOKF+1 MOVSI 17,'TTY' SKIPE 14 MOVSI 17,'DSK' SKIPN 13 MOVE 13,17 MOVEM 13,OPENF+1 SKIPN 14 MOVSI 14,'OPR' MOVEM 14,LOOKF MOVE 17,OPENF+1 ;TEST FOR TTY CAME 17,[SIXBIT /TTY/] JRST LT070 MOVEI 17,TTY ;TTY JRST LT080 LT070: TLNN SW,JLG ;NOT TTY JRST ER120 OPEN LPT,OPENF CALL OPCHK ENTER LPT,LOOKF CALL LKCHK OUTPUT LPT, MOVEI 17,LPT LT080: MOVEM 17,LST ;REMEMBER CHANNEL AOS (PDP) ;SKIP RETURN LT090: RETURN ;FINISHED ; ; ROUTINE TO CLOSE FOO ; CALLING SEQUENCE: CALL LISTE ; INPUT PARAMETERS: LST ; LISTE: MOVE 17,LST ;TEST FOR TTY CAIE 17,TTY JRST LT100 OUTPUT TTY, ;TTY JRST LT110 LT100: OUTPUT LPT, ;NOT TTY GETSTS LPT,STS CALL STSCHK RELEAS LPT, LT110: RETURN SUBTTL SAVACS ; ; ROUTINE TO SAVE/RESTORE ALL AC'S (EXCEPT PDP) ; CALLING SEQUENCE: CALL SAVACS ; AC'S USED: NONE ; SAVACS: ADD PDP,[XWD 21,21] SKIPL PDP HALT ERROR EXCH 0,-21(PDP) MOVEM 0,(PDP) HRLI 0,1 HRRI 0,-20(PDP) BLT 0,-2(PDP) MOVEI 0,SV010 MOVEM 0,-1(PDP) MOVE 0,-21(PDP) RETURN SV010: HRLI 0,-16(PDP) HRRI 0,1 BLT 0,17 MOVE 0,-21(PDP) SUB PDP,[XWD 22,22] RETURN SUBTTL NXCHAR ; ; ROUTINE TO FETCH A CHARACTOR FROM AN INPUT CHANNEL ; CALLING SEQUENCE: CALL NXCHAR ; INPUT PARAMETERS: CHAN ; OUTPUT PARAMETERS: CHAR (ZERO INDICATES EOR OR EOF) ; AC'S USED: RNG ONLY ; NXCHAR: TLZE SW,RRD RETURN TRNE SW,FCM JRST NX010 MOVE RNG,RNGTAB(CHAN) ;LINE MODE SKIPG 5(RNG) JRST NX030 ILDB CHAR,4(RNG) SOS 5(RNG) CAIL CHAR,"a" CAILE CHAR,"z" SKIPA SUBI CHAR,"a"-"A" CAIN CHAR,33 JRST NX030 CAIN CHAR,15 JRST NXCHAR CAIN CHAR,12 JRST NX030 CAIN CHAR,14 JRST NX030 CAIE CHAR,03 JRST NX040 CALL EXIT1 JRST ERROR NX010: MOVE RNG,RNGTAB(CHAN) ;FULL CHARACTER MODE SKIPLE 5(RNG) JRST NX020 CALL SCHAN INPUT 0, XCT INS CALL SCHAN GETSTS 0,STS XCT INS CALL STSCHK TRNE STS,IO.EOF JRST NX030 NX020: ILDB CHAR,4(RNG) SOS 5(RNG) JUMPE CHAR,NX010 JRST NX040 NX030: SETZ CHAR, ;EOR OR EOF NX040: RETURN SUBTTL OTCHAR ; ; ROUTINE TO OUTPUT A CHARACTOR TO AN OUTPUT CHANNEL ; CALLING SEQUENCE: CALL OTCHAR ; INPUT PARAMETERS: CHAN ; CHAR ; LOGDEV (IF PTY LOGGING) ; AC'S USED: RNG ; STS ; INS ; OTCHAR: CAIE CHAN,PTY ;TEST FOR PTY JRST OT010 TDNN SW,[XWD DB,PLG] JRST OT030 PUSH PDP,CHAN SKIPN CHAN,LOGDEV MOVEI CHAN,TTY CALL OT010 POP PDP,CHAN JRST OT030 OT010: TRNE CHAR,140 ;TEST FOR CTRL CHAR JRST OT030 JUMPE CHAR,OT030 ; CAIGE CHAR,007 ; JRST OT020 CAIG CHAR,015 ; JRST OT030 OT020: PUSH PDP,CHAR ;ARROW MODE MOVEI CHAR,"^" CALL OT030 MOVE CHAR,(PDP) TRO CHAR,100 CALL OT030 POP PDP,CHAR RETURN OT030: MOVE RNG,RNGTAB(CHAN) ;OUTPUT CHAR IDPB CHAR,1(RNG) AOS TABPOS SOSLE 2(RNG) RETURN CALL SCHAN OUTPUT 0, XCT INS CALL SCHAN GETSTS 0,STS XCT INS CALL STSCHK RETURN SUBTTL SCHAN ; ; ROUTINE TO SET UP AN INSTRUCTION FOR A CHANNEL ; CALLING SEQUENCE: CALL SCHAN ; INSTRUCTION ; INPUT PARAMETERS: CHAN ; OUTPUT PARAMETERS: INS ; AC'S USED: NONE ; SCHAN: MOVE INS,@(PDP) DPB CHAN,SH900 AOS (PDP) RETURN ; SH900: POINT 4,INS,12 SUBTTL TAB ; ; ROUTINE TO TAB ON AN OUTPUT CHANNEL ; CALLING SEQUENCE: CALL TAB ; ^DNN ; INPUT PARAMETERS: CHAN ; TABPOS (ZEROED AT BEGINNING OF LINE) ; TAB: MOVE 17,@(PDP) ;SETUP SUB 17,TABPOS SUBI 17,1 MOVEI CHAR," " CALL OTCHAR SOJG 17,.-1 AOS (PDP) RETURN ; ; ROUTINE TO SPACE OR GO TO THE NEXT LINE ON AN OUTPUT CHANNEL ; CALLING SEQUENCE: CALL TABW ; INPUT PARAMETERS: CHAN ; TABPOS (ZEROED AT BEGINNING OF LINE) ; TABW: MOVE 17,TABPOS ;DISPATCH CAIL 17,^D<80-20> JRST TB010 MOVEI CHAR," " CALL OTCHAR JRST TB020 TB010: CALL OUTCR SETZM TABPOS MOVEI ADR,[ASCIZ / /] CALL OUTASC TB020: RETURN SUBTTL INSP ; ; ROUTINE TO SKIP TO THE NEXT NON-BLANK CHARACTOR ; CALLING SEQUENCE: CALL INSP ; INPUT PARAMETERS: CHAN ; OUTPUT PARAMETERS: AC 17 HOLDS LAST BLANK OR ZERO ; INSP: SETZ 17, SKIPA IB010: MOVE 17,CHAR CALL NXCHAR CAIN CHAR," " JRST IB010 CAIN CHAR," " JRST IB010 TLO SW,RRD RETURN SUBTTL INOCT ; ; ROUTINE TO INPUT AN OCTAL NUMBER ; CALLING SEQUENCE: CALL INOCT ; INPUT PARAMETERS: CHAN ; OUTPUT PARAMETERS: OCT ; INOCT: SETZ 16, ;SETUP IN010: CALL NXCHAR ;TEST CHAR CAIGE CHAR,"0" JRST IN020 CAILE CHAR,"7" JRST IN020 SUBI CHAR,"0" MOVE 17,CHAR LSH 17,^D33 LSHC 16,3 JRST IN010 IN020: MOVE OCT,16 ;EOF TLO SW,RRD RETURN SUBTTL INSIX ; ; ROUTINE TO INPUT A SIXBIT WORD (ALPHANUMERIC CHARACTER SET ONLY) ; CALLING SEQUENCE: CALL INSIX ; INPUT PARAMETERS: CHAN ; OUTPUT PARAMETERS: SIX ; INSIX: SETZ SIX, ;SETUP MOVEI 17,6 MOVE 16,[POINT 6,SIX] IS010: CALL NXCHAR ;TEST CHAR CAIGE CHAR,"A" JRST IS020 CAIG CHAR,"Z" JRST IS030 IS020: CAIGE CHAR,"0" JRST IS040 CAILE CHAR,"9" JRST IS040 IS030: JUMPE 17,IS010 ;GOOD CHAR SUBI CHAR,40 IDPB CHAR,16 SOJA 17,IS010 IS040: TLO SW,RRD ;EOF RETURN SUBTTL INFSX ; ; ROUTINE TO INPUT A SIXBIT WORD (FULL SIXBIT CHARACTER SET) ; CALLING SEQUENCE: CALL INFSX ; INPUT PARAMETERS: CHAN ; OUTPUT PARAMETERS: SIX ; INFSX: SETZ SIX, ;SETUP MOVEI 17,6 MOVE 16,[POINT 6,SIX] IF010: CALL NXCHAR ;TEST CHAR CAIL CHAR,40 CAILE CHAR,137 JRST IF030 CAIN CHAR,"," JRST IF030 CAIN CHAR," " JRST IF030 CAIN CHAR,"/" JRST IF030 IF020: JUMPE 17,IF010 ;GOOD CHAR SUBI CHAR,40 IDPB CHAR,16 SOJA 17,IF010 IF030: TLO SW,RRD ;EOF RETURN SUBTTL INDEC ; ; ROUTINE TO INPUT A DECIMAL NUMBER ; CALLING SEQUENCE: CALL INDEC ; INPUT PARAMETERS: CHAN ; OUTPUT PARAMETERS: DEC ; INDEC: MOVEI 17,^D11 ;SETUP SETZ DEC, ID010: CALL NXCHAR ;TEST CHAR CAIGE CHAR,"0" JRST ID020 CAILE CHAR,"9" JRST ID020 SUBI CHAR,"0" IMULI DEC,^D10 ADD DEC,CHAR SOJG 17,ID010 ID020: TLO SW,RRD ;EOF RETURN SUBTTL INJOB ; ; ROUTINE TO INPUT A JOB NUMBER ; CALLING SEQUENCE: CALL INJOB ; ERROR RETURN ; INPUT PARAMETERS: CHAN ; OUTPUT PARAMETERS: JOB ; LSTJOB ; INJOB: CALL NXCHAR CAIN CHAR,"." JRST IJ010 TLO SW,RRD CALL INDEC JUMPE DEC,IJ030 MOVEM DEC,JOB MOVEM DEC,LSTJOB JRST IJ020 IJ010: SKIPN 17,LSTJOB JRST ER170 MOVEM 17,JOB IJ020: AOS (PDP) ;SKIP RETURN IJ030: RETURN SUBTTL INDAT ; ; ROUTINE TO INPUT A DATE (DD-MMM-YY) ; CALLING SEQUENCE: CALL INDAT ; INPUT PARAMETERS: CHAN ; OUTPUT PARAMETERS: DAT (ZERO INDICATES ERROR) ; AC'S USED: DEC ; INDAT: CALL INDEC JUMPE DEC,IY070 CAILE DEC,^D31 JRST IY070 SUBI DEC,1 PUSH PDP,DEC CALL NXCHAR CAIN CHAR,"-" JRST IY010 CAIE CHAR," " JRST IY060 IY010: CALL INSIX MOVEI 17,^D12 IY020: MOVE 16,IY900-1(17) CAMN SIX,16 JRST IY030 SOJG 17,IY020 JRST IY060 IY030: SUBI 17,1 PUSH PDP,17 CALL NXCHAR CAIN CHAR,"-" JRST IY040 CAIE CHAR," " JRST IY050 IY040: CALL INDEC JUMPE DEC,IY050 CAILE DEC,^D99 JRST IY050 SUBI DEC,^D64 MOVE 17,DEC IMULI 17,^D12 POP PDP,16 ADD 17,16 IMULI 17,^D31 POP PDP,16 ADD 17,16 MOVE DAT,17 RETURN IY050: POP PDP,17 IY060: POP PDP,17 IY070: SETZ DAT, RETURN ; IY900: SIXBIT /JAN/ SIXBIT /FEB/ SIXBIT /MAR/ SIXBIT /APR/ SIXBIT /MAY/ SIXBIT /JUN/ SIXBIT /JUL/ SIXBIT /AUG/ SIXBIT /SEP/ SIXBIT /OCT/ SIXBIT /NOV/ SIXBIT /DEC/ SUBTTL INTIM ; ; ROUTINE TO INPUT A TIME (HHMMSS OR HH:MM:SS) ; CALLING SEQUENCE: CALL INTIM ; INPUT PARAMETERS: CHAN ; OUTPUT PARAMETERS: TIM (SECONDS) ; AC'S USED: DEC ; INTIM: CALL INDEC CALL NXCHAR CAIE CHAR,":" JRST IT020 PUSH PDP,DEC ;WITH COLONS CALL INDEC CALL NXCHAR CAIN CHAR,":" JRST IT010 TLO SW,RRD ;MM:SS SETZ 15, POP PDP,16 MOVE 17,DEC JRST IT030 IT010: PUSH PDP,DEC ;HH:MM:SS CALL INDEC MOVE 17,DEC POP PDP,16 POP PDP,15 JRST IT030 IT020: TLO SW,RRD ;WITHOUT COLONS MOVE 15,DEC IDIVI 15,^D<100*100> IDIVI 16,^D100 IT030: IMULI 15,^D<60*60> IMULI 16,^D60 ADD 17,15 ADD 17,16 MOVE TIM,17 RETURN SUBTTL INAFT ; ; ROUTINE TO INPUT AFTER TIME (+HHMM OR HHMM) ; CALLING SEQUENCE: CALL INAFT ; INPUT PARAMETERS: CHAN ; OUTPUT PARAMETERS: 17 (PLUS MINUTES) ; AC'S USED: DEC ; INAFT: CALL NXCHAR PUSH PDP,CHAR CAIE CHAR,"+" TLO SW,RRD CALL INDEC CALL NXCHAR CAIN CHAR,":" JRST IA010 TLO SW,RRD ;WITHOUT COLON MOVE 16,DEC IDIVI 16,^D100 IMULI 16,^D60 ADD 17,16 JRST IA020 IA010: PUSH PDP,DEC ;WITH COLON CALL INDEC POP PDP,17 IMULI 17,^D60 ADD 17,DEC IA020: POP PDP,16 CAIN 16,"+" JRST IA030 MSTIME 15, ;WITHOUT PLUS IDIVI 15,^D<60*1000> SUB 17,15 SKIPG 17 ADDI 17,^D<24*60> IA030: RETURN SUBTTL INFOO ; ; ROUTINE TO INPUT A FOO (DEV:FILE.EXT[P,PN]) ; CALLING SEQUENCE: CALL INFOO ; ERROR RETURN (NOT A FOO) ; INPUT PARAMETERS: CHAN ; OUTPUT PARAMETERS: 13 (DEVICE) ; 14 (FILE) ; 15 (EXT) ; 16 (PROT) ; 17 (PPN) ; AC'S USED: OCT ; SIX ; INFOO: SETZ 17, ;SETUP PUSH PDP,17 PUSH PDP,17 PUSH PDP,17 PUSH PDP,17 PUSH PDP,17 IO010: CALL INSP ;SEARCH FOR FILES CALL NXCHAR CAIN CHAR,":" JRST IO020 CAIN CHAR,"." JRST IO030 CAIN CHAR,"<" JRST IO040 CAIN CHAR,"[" JRST IO050 TLO SW,RRD ;FILE CALL INSIX JUMPE SIX,IO060 SKIPE -1(PDP) JRST IO070 MOVEM SIX,-1(PDP) JRST IO010 IO020: SKIPE SIX,-1(PDP) ;DEVICE SKIPE 0(PDP) JRST IO070 MOVEM SIX,0(PDP) SETZM -1(PDP) JRST IO010 IO030: SKIPE -2(PDP) ;EXTENSION JRST IO070 CALL INSIX JUMPE SIX,IO070 HLLZM SIX,-2(PDP) JRST IO010 IO040: SKIPE -3(PDP) ;PROTECTION JRST IO070 CALL INOCT CALL NXCHAR CAIE CHAR,">" JRST IO070 DPB OCT,[POINT 9,-3(PDP),8] JRST IO010 IO050: SKIPE -4(PDP) ;PPN JRST IO070 CALL INOCT JUMPE OCT,IO070 HRLM OCT,-4(PDP) CALL NXCHAR CAIE CHAR,"," JRST IO070 CALL INOCT JUMPE OCT,IO070 HRRM OCT,-4(PDP) CALL NXCHAR CAIE CHAR,"]" JRST IO070 JRST IO010 IO060: TLO SW,RRD ;EOF AOS -5(PDP) ;SKIP RETURN IO070: POP PDP,13 ;RETURN FOO POP PDP,14 POP PDP,15 POP PDP,16 POP PDP,17 RETURN SUBTTL INCR ; ; ROUTINE TO INPUT AN END OF LINE SEQUENCE ; CALLING SEQUENCE: CALL INCR ; ERROR RETURN (NOT EOL) ; INPUT PARAMETERS: CHAN ; AC'S USED: CHAR ; INCR: CALL INSP CALL NXCHAR JUMPE CHAR,IC040 CAIN CHAR,";" JRST IC020 CAIN CHAR,"," JRST IC030 IC010: TLO SW,RRD ;NOT AN EOL RETURN IC020: CALL NXCHAR ;A COMMENT JUMPN CHAR,IC020 TRZ SW,WHY JRST IC040 IC030: TRO SW,AGN ;A COMMA IC040: AOS (PDP) ;AN EOL RETURN SUBTTL OUTASC ; ; ROUTINE TO OUTPUT AN ASCIZ STRING ; CALLING SEQUENCE: CALL OUTASC ; INPUT PARAMETERS: CHAN ; ADR ; OUTASC: MOVE 17,ADR HLL 17,OA900 OA010: ILDB CHAR,17 JUMPE CHAR,OA020 CALL OTCHAR JRST OA010 OA020: RETURN ; OA900: POINT 7,0 SUBTTL OUTOCT ; ; ROUTINE TO OUTPUT AN OCTAL NUMBER ; CALLING SEQUENCE: CALL OUTOCT ; INPUT PARAMETERS: CHAN ; OCT ; OUTOCT: JUMPE OCT,ON040 SETZ 17, ;SETUP MOVEI 16,^D12 MOVE 15,OCT ON010: SETZ 14, ;OUTPUT CHAR LSHC 14,3 JUMPN 14,ON020 JUMPE 17,ON030 ON020: SETO 17, ADDI 14,"0" MOVE CHAR,14 CALL OTCHAR ON030: SOJG 16,ON010 RETURN ON040: MOVEI CHAR,"0" CALL OTCHAR RETURN SUBTTL OUTSIX ; ; ROUTINE TO OUTPUT A SIXBIT WORD ; CALLING SEQUENCE: CALL OUTSIX ; INPUT PARAMETERS: CHAN ; SIX ; OUTSIX: MOVEI 17,6 ;SETUP MOVE 16,[POINT 6,SIX] SETZ 15, OS010: ILDB CHAR,16 ;OUTPUT CHAR CAIN CHAR,' ' AOJA 15,OS040 JUMPLE 15,OS030 PUSH PDP,CHAR OS020: MOVEI CHAR," " CALL OTCHAR SOJG 15,OS020 POP PDP,CHAR OS030: ADDI CHAR,40 CALL OTCHAR OS040: SOJG 17,OS010 RETURN SUBTTL OUTPUT DECIMAL ROUTINES ; ; ROUTINE TO OUTPUT A DECIMAL NUMBER ; CALLING SEQUENCE: CALL OUTDEC ; INPUT PARAMETERS: CHAN ; DEC ; OUTDEC: JUMPE DEC,OD050 ;SETUP SETZ 17, MOVE 15,DEC OD010: IDIVI 15,^D10 ;PUSH DOWN CHARS PUSH PDP,16 JUMPE 15,OD020 AOJA 17,OD010 OD020: SETZ 16, OD030: POP PDP,CHAR ;POP AND OUTPUT CHARS SKIPN 16 JUMPE CHAR,OD040 SETO 16, ADDI CHAR,"0" CALL OTCHAR OD040: SOJGE 17,OD030 RETURN OD050: MOVEI CHAR,"0" CALL OTCHAR RETURN ; ; ROUTINE TO OUTPUT A TWO DIGIT DECIMAL NUMBER ; CALLING SEQUENCE: CALL OUTTDC ; INPUT PARAMETERS: CHAN ; DEC ; OUTTDC: MOVE 16,DEC IDIVI 16,^D10 ADDI 16,"0" MOVE CHAR,16 CALL OTCHAR ADDI 17,"0" MOVE CHAR,17 CALL OTCHAR RETURN ; ; ROUTINE TO OUTPUT A DECIMAL NUMBER SCALED BY ONE HUNDRED ; WITH TWO DECIMAL PLACES ; CALLING SEQUENCE: CALL OUTPDC ; INPUT PARAMETERS: CHAN ; DEC ; OUTPDC: MOVE 16,DEC IDIVI 16,^D100 PUSH PDP,17 MOVE DEC,16 CALL OUTDEC MOVEI CHAR,"." CALL OTCHAR POP PDP,DEC CALL OUTTDC RETURN SUBTTL OUTDAT ; ; ROUTINE TO OUTPUT A DATE ; CALLING SEQUENCE: CALL OUTDAT ; INPUT PARAMETERS: CHAN ; DAT ; AC'S USED: DEC ; ADR ; OUTDAT: MOVE 16,DAT IDIVI 16,^D31 ADDI 17,1 MOVEM 17,DEC IDIVI 16,^D12 ADDI 16,^D64 PUSH PDP,16 PUSH PDP,17 CALL OUTDEC MOVEI CHAR,"-" CALL OTCHAR POP PDP,17 MOVEI ADR,OY900(17) CALL OUTASC MOVEI CHAR,"-" CALL OTCHAR POP PDP,DEC CALL OUTDEC RETURN ; OY900: ASCII /JAN/ ASCII /FEB/ ASCII /MAR/ ASCII /APR/ ASCII /MAY/ ASCII /JUN/ ASCII /JUL/ ASCII /AUG/ ASCII /SEP/ ASCII /OCT/ ASCII /NOV/ ASCII /DEC/ SUBTTL OUTTIM ; ; ROUTINE TO OUTPUT A TIME ; CALLING SEQUENCE: CALL OUTTIM ; INPUT PARAMETERS: CHAN ; TIM (IN SECONDS) ; AC'S USED: DEC ; OUTTIM: MOVE 16,TIM IDIVI 16,^D60 PUSH PDP,17 IDIVI 16,^D60 PUSH PDP,17 MOVE DEC,16 CALL OUTDEC MOVEI CHAR,":" CALL OTCHAR POP PDP,DEC CALL OUTTDC MOVEI CHAR,":" CALL OTCHAR POP PDP,DEC CALL OUTTDC RETURN SUBTTL OUTLNE ; ; ROUTINE TO OUTPUT A LINE NAME ; CALLING SEQUENCE: CALL OUTLNE ; INPUT PARAMETERS: CHAN ; LINE ; AC'S USED: ADR ; OCT ; OUTLNE: MOVE 17,LINE JUMPL 17,OL020 TRZ 17,600000 CAMN 17,CTYLNE JRST OL010 CAML 17,PTYDSP JRST OL030 MOVEM 17,OCT MOVEI ADR,[ASCIZ /TTY/] CALL OUTASC CALL OUTOCT RETURN OL010: MOVEI ADR,[ASCIZ /CTY/] CALL OUTASC RETURN OL020: MOVEI ADR,[ASCIZ /DET/] CALL OUTASC RETURN OL030: SUB 17,PTYDSP MOVEM 17,OCT MOVEI ADR,[ASCIZ /PTY/] CALL OUTASC CALL OUTOCT RETURN SUBTTL OUTCR ; ; ROUTINE TO OUTPUT A ; CALLING SEQUENCE: CALL OUTCR ; INPUT PARAMETERS: CHAN ; AC'S USED: ADR ; OUTCR: MOVEI ADR,OR900 CALL OUTASC RETURN ; OR900: BYTE (7) 15,12 SUBTTL OPCHK ; ; ROUTINE TO PROCESS OPEN FAILURE ; CALLING SEQUENCE: OPEN CHAN,SPEC ; CALL OPCHK ; OPCHK: CALL CSET ;DEV NOT AVAIL MOVEI ADR,OP900 CALL OUTASC MOVE 17,(PDP) MOVE 16,-2(17) MOVE SIX,1(16) CALL OUTSIX MOVEI ADR,OP910 CALL OUTASC CALL OUTCR OUTPUT TTY, JRST ERROR ; OP900: ASCIZ /? / OP910: ASCIZ /: NOT AVAILABLE/ SUBTTL LKCHK ; ; ROUTINE TO PROCESS LOOKUP OR ENTER FAILURE ; CALLING SEQUENCE: LOOKUP CHAN,SPEC ; CALL LKCHK OR ; ENTER CHAN,SPEC ; CALL LKCHK ; OUTPUT PARAMETERS: LERR ; AC'S USED: RNG ; LKCHK: MOVE RNG,(PDP) MOVE RNG,-2(RNG) HRRZ 17,1(RNG) MOVEM 17,LERR CAIN 17,3 JRST LK040 CAIN 17,16 JRST LK040 TRZE SW,ERI JUMPE 17,LK050 LK010: TRNE SW,SPT TLNE SW,DB SKIPA JRST SPTREE CALL CSET MOVEI ADR,LK900 CALL OUTASC MOVE OCT,LERR CALL OUTOCT MOVEI ADR,LK910 CALL OUTASC MOVE 17,(PDP) LDB SIX,LK990 DEVNAM SIX, MOVE SIX,LK920 CALL OUTSIX MOVE 17,LERR CAIN 17,6 JRST LK060 CAIN 17,14 JRST LK070 LK020: MOVEI CHAR,":" CALL OTCHAR MOVE 17,(PDP) MOVE 16,-2(17) MOVE SIX,0(16) CALL OUTSIX MOVE 17,(PDP) MOVE 16,-2(17) HLLZ SIX,1(16) JUMPE SIX,LK030 MOVEI CHAR,"." CALL OTCHAR CALL OUTSIX LK030: SETZ 17, MOVE 16,LERR CAIN 16,0 MOVEI 17,1 CAIN 16,1 MOVEI 17,1 CAIN 16,24 MOVEI 17,1 CAIN 16,26 MOVEI 17,1 CAIN 16,2 MOVEI 17,2 CAIN 16,15 MOVEI 17,2 MOVE ADR,LK930(17) CALL OUTASC CALL OUTCR OUTPUT TTY, JRST ERROR LK040: MOVEI RNG,1 ;RETRY SLEEP RNG, SOS (PDP) SOS (PDP) RETURN LK050: AOS (PDP) ;SKIP RETURN RETURN LK060: MOVEI ADR,LK970 ;DATA ERROR ON RIB OR UFD CALL OUTASC CALL OUTCR OUTPUT TTY, JRST ERROR LK070: MOVEI ADR,LK980 ;QUOTA EXCEEDED CALL OUTASC CALL OUTCR OUTPUT TTY, JRST ERROR ; LK900: ASCIZ /? (/ LK910: ASCIZ /) / LK920: SIXBIT /DSK/ LK930: LK940 LK950 LK960 LK940: ASCIZ / LOOKUP FAILURE/ LK950: ASCIZ / NOT FOUND/ LK960: ASCIZ / PROTECTION FAILURE/ LK970: ASCIZ /: DATA ERROR ON RIB OR UFD/ LK980: ASCIZ /: QUOTA EXCEEDED/ LK990: POINT 4,-2(17),12 SUBTTL STSCHK ; ; ROUTINE TO TEST STATUS BITS ; CALLING SEQUENCE: GETSTS CHAN,STS ; CALL STSCHK ; STSCHK: TRNN STS,740000 ;IN/OUT CHECK RETURN ST010: TRNE SW,SPT TLNE SW,DB SKIPA JRST SPTREE CALL CSET MOVEI ADR,ST900 CALL OUTASC MOVE OCT,STS CALL OUTOCT MOVEI ADR,ST910 CALL OUTASC MOVE 17,(PDP) LDB SIX,ST950 DEVNAM SIX, MOVE SIX,ST920 CALL OUTSIX TRNE STS,040000 JRST ST030 ST020: MOVEI ADR,ST930 ;IN-OUT ERROR SKIPA ST030: MOVEI ADR,ST940 ;QUOTA EXCEEDED CALL OUTASC CALL OUTCR OUTPUT TTY, JRST EXIT0 ; ST900: ASCIZ /? (/ ST910: ASCIZ /) / ST920: SIXBIT /DSK/ ST930: ASCIZ /: IN-OUT ERROR/ ST940: ASCIZ /: QUOTA EXCEEDED/ ST950: POINT 4,-2(17),12 SUBTTL END ; END INITL