1
0
mirror of https://github.com/PDP-10/its.git synced 2026-03-03 10:22:59 +00:00

DEMST - demon status.

This commit is contained in:
Lars Brinkhoff
2020-09-18 22:54:46 +02:00
parent 0938ee3131
commit bf7345f12c
3 changed files with 420 additions and 0 deletions

View File

@@ -6,3 +6,7 @@ log_progress "ENTERING BUILD SCRIPT: DM"
# Demon starter.
respond "*" ":midas sys; atsign demstr_sysen2; demstr\r"
expect ":KILL"
# Demon status. Self purifying.
respond "*" ":midas sysen2; ts demst_sysen2; demst\r"
expect ":KILL"

View File

@@ -86,6 +86,7 @@
- DCROCK, digital watch.
- DDTDOC, interactive DDT documentation.
- DECUUO, TOPS-10 and WAITS emulator.
- DEMST, demon status.
- DEMSTR, demon starter.
- DFTP, Datacomputer file transfer.
- DIGEST, digestify a mailing list.

415
src/sysen2/demst.19 Executable file
View File

@@ -0,0 +1,415 @@
TITLE RDDMST TAA 11/16/77
O=0
A=1
B=2
C=3
D=4
E=5 ; MUNGED BY SOUT
F=6
G=7
H=8
P=17
TTYO==1
USRI==2
; CONSTANT STRING OUTPUT
DEFINE SOUT CHAN,TXT
MOVE E,[440700,,[ASCII /TXT/]]
MOVEI F,.LENGTH /TXT/
.CALL [SETZ
SIXBIT /SIOT/
MOVSI %TJDIS
MOVEI CHAN
E
SETZ F]
.LOSE 1000
TERMIN
DEFINE OHPOS NUM
.IOT TTYO,[^P]
.IOT TTYO,["H]
.IOT TTYO,[NUM+8.]
TERMIN
SYSVER: 0 ; SYSTEM VERSION
JCLBUF: BLOCK 3
EVTBL:
SQUOZE 0,L
L: 0
SQUOZE 0,DMNFLG ; DEMONS ALLOWED?
DMNFLG: 0
SQUOZE 0,DMTTBL
DMTTBL: 0
SQUOZE 0,DMLNG
DMLNG: 0
SQUOZE 0,DMTLL
DMTLL: 0 ; DMTLL,,DMTLL AFTER INIT
SQUOZE 0,FLSINS
FLSINS: 0
SQUOZE 0,LSUUO
LSUUO: 0
SQUOZE 0,USTP
USTP: 0
SQUOZE 0,APRC
APRC: 0
SQUOZE 0,UPC
UPC: 0
SQUOZE 0,SUUOH
SUUOH: 0
EVPTR: EVTBL-.,,EVTBL
DEMTAB: 0 ; AOBJN POINTER TO DMTTBL
TIME: 0 ; CURRENT TIME, DISK FORMAT
DAYPTR: 220500,,TIME ; POINTER TO DATE FIELD
MONPTR: 270400,,TIME ; POINTER TO MONTH FIELD
PDLLEN==20
PDL: BLOCK PDLLEN
START: MOVE P,[-PDLLEN,,PDL]
.RSYSI A,
CAME A,SYSVER
JRST INIT
.CALL [SETZ
SIXBIT /OPEN/
[.UAO+%TJDIS,,TTYO]
[SIXBIT /TTY/]
[SIXBIT /TTY/]
SETZ [SIXBIT /TTY/]]
.LOSE 1000
SOUT TTYO,[It is now ]
.CALL [SETZ
SIXBIT /RQDATE/
SETZM TIME]
.LOSE 1000
HRRZ B,TIME
IDIVI B,120. ; MINUTES SINCE MIDNIGHT
IDIVI B,60. ; HOURS IN B, MINUTES IN C.
CAIGE B,10.
.IOT TTYO,["0]
MOVE A,B
PUSHJ P,DECPRT
.IOT TTYO,[":]
CAIGE C,10.
.IOT TTYO,["0]
MOVE A,C
PUSHJ P,DECPRT
SOUT TTYO,[, ]
LDB A,MONPTR
PUSHJ P,DECPRT
.IOT TTYO,["/]
LDB A,DAYPTR
PUSHJ P,DECPRT
.IOT TTYO,[".]
SKIPG @DMNFLG ; SKIP IF DEMONS ARE LEGAL
JRST [SOUT TTYO,[ Loading of demons is disabled.]
JRST .+1]
.SUSET [.ROPTIO,,A]
TLNN A,OPTCMD ; JCL?
JRST RDALL
.BREAK 12,[..RJCL,,JCLBUF] ; YES
MOVE B,[440700,,JCLBUF]
MOVE C,[440600,,A]
MOVEI A,0
JCLLOP: TLNN C,770000
JRST JCLDON
ILDB D,B
CAIE D,^M
CAIN D,^C
JRST JCLDON
JUMPE D,JCLDON
SUBI D,40
CAIL D,100
SUBI D,40
IDPB D,C
JRST JCLLOP
JCLDON: MOVE B,DEMTAB
SCLOOP: CAMN A,(B)
JRST DOPRT
ADD B,DMTLL
JUMPL B,SCLOOP
SOUT TTYO,[
No such demon?]
.BREAK 16,160000
DOPRT: PUSHJ P,DMPRT ; WANTS DEMON NAME IN A, ENTRY IN B
.BREAK 16,160000
RDALL: SOUT TTYO,[
Name Index Next signal Interval]
MOVE B,DEMTAB
RDALOP: SKIPE A,(B)
PUSHJ P,DMPTAB
ADD B,DMTLL
JUMPL B,RDALOP
.BREAK 16,160000
; COME HERE TO PRINT STATUS FOR TABLE. NAME IS IN A, TABLE IN B.
DMPTAB: SOUT TTYO,[
]
PUSHJ P,SIXPRT ; NAME
OHPOS 8. ; NEXT COLUMN
SKIPE C,1(B)
JRST DMPST1
SOUT TTYO,[ Down]
JRST DMPNXT
DMPST1: JUMPL C,[SOUT TTYO,[ Load]
JRST DMPNXT]
SOUT TTYO,[ ]
IDIV C,L
CAIGE C,10
.IOT TTYO,[" ]
MOVE A,C
PUSHJ P,OCTPRT
MOVE C,1(B)
MOVE A,@USTP ; JOB STOPPED?
TLNN A,100000
JRST RUNNIN
SKIPL @APRC ; DISOWNED?
JRST MANSTP
SOUT TTYO,[==] ; DEAD, NEEDS CLEANING UP
POPJ P,
MANSTP: .IOT TTYO,["=] ; MANUALLY STOPPED
POPJ P,
RUNNIN: SKIPN @FLSINS
POPJ P,
MOVE A,@LSUUO
TLZ A,777
CAME A,[.SLEEP] ; SLEEPING?
JRST [CAME A,[.HANG]
POPJ P, ; NO
MOVEI E,"+
JRST NRMSLP]
MOVEI E,"*
MOVE A,@UPC
TLNE A,%PCUSR ; IN EXEC MODE?
JRST NRMSLP ; THINGS SURE HAPPEN FAST HERE
HRRZ A,@SUUOH
SUBI A,1
IDIV C,L ; USER INDEX
TRO C,400000
.CALL [SETZ
SIXBIT /OPEN/
[<10\.UII>,,USRI]
[SIXBIT /USR/]
C
SETZI 0]
POPJ P, ; OH, WELL
.ACCESS USRI,A ; LOOK AT CURRENT INSTRUCTION
.IOT USRI,A
.CLOSE USRI,
CAME A,[XCT 35(2)] ; IF .SLEEP IS THIS, THEN IT'S A DEAD MUDDLE
JRST NRMSLP
SOUT TTYO,[**]
POPJ P,
NRMSLP: .IOT TTYO,E
POPJ P,
DMPNXT: OHPOS 18.
HLRZ A,2(B)
JUMPE A,[SOUT TTYO,[Never]
POPJ P,]
MOVE A,3(B)
JUMPE A,[SOUT TTYO,[Never]
POPJ P,]
PUSHJ P,NXTPRT ; TIME OF NEXT SIGNAL
OHPOS 36.
HLRZ A,2(B)
ASH A,1
CAIL A,10000.
JRST DOPR
.IOT A,[" ]
CAIL A,1000.
JRST DOPR
.IOT A,[" ]
CAIL A,100.
JRST DOPR
.IOT A,[" ]
CAIL A,10.
JRST DOPR
.IOT A,[" ]
DOPR: PUSHJ P,DECPRT
POPJ P,
; COME HERE TO PRINT A DEMON'S STATUS, NOT FOR TABLE.
; NAME OF DEMON IS IN A, ENTRY IN TABLE IS IN B.
DMPRT: SOUT TTYO,[
Demon ]
PUSHJ P,SIXPRT ; SIXBIT NAME OF DEMON
SKIPE C,1(B) ; IDX, 0, OR -1
JRST ST1
HLRZ A,2(B)
JUMPE A,[SOUT TTYO,[ is never automatically signalled.
]
JRST DPNDRQ]
MOVE A,3(B)
JUMPE A,[SOUT TTYO,[ will never be automatically signalled.
]
JRST DPNDRQ]
SOUT TTYO,[ will be signalled at ]
PUSHJ P,NXTPRT
.IOT TTYO,[".]
JRST STRAND
ST1: JUMPL C,[SOUT TTYO,[ is coming up.]
JRST STRAND]
SOUT TTYO,[ is up; job index is ]
IDIV C,L
MOVE A,C
PUSHJ P,OCTPRT
.IOT TTYO,[".]
POPJ P,
STRAND: HLRZ A,2(B)
JUMPE A,DONTSG
ASH A,1
SOUT TTYO,[
After next signal, will be signalled every ]
PUSHJ P,DECPRT
SOUT TTYO,[ minutes; ]
JRST DPNDRQ
DONTSG: SOUT TTYO,[
Demon is not periodic; ]
DPNDRQ: HRRZ A,2(B)
PUSHJ P,DECPRT
SOUT TTYO,[ pending requests.]
POPJ P,
; OUTPUT OCTAL # ON TTYO. # IS IN A.
OCTPRT: PUSH P,B
PUSH P,C
MOVE C,OCTLEN
JRST DECOTL
; OUTPUT DECIMAL # ON TTYO. # IS IN A.
DECPRT: PUSH P,B
PUSH P,C
MOVE C,DECLEN
DECOTL: IDIV A,(C)
JUMPN A,DECOT1
MOVE A,B
AOBJN C,DECOTL
.IOT TTYO,["0]
JRST DECDON
DECOT0: IDIV A,(C)
DECOT1: ADDI A,"0
.IOT TTYO,A
MOVE A,B
AOBJN C,DECOT0
DECDON: POP P,C
POP P,B
POPJ P,
DECTAB: 1000000. ? 100000. ? 10000. ? 1000. ? 100. ? 10. ? 1.
DECLEN: DECTAB-.,,DECTAB
OCTTAB: 1000000 ? 100000? 10000 ? 1000? 100 ? 10 ? 1
OCTLEN: OCTTAB-.,,OCTTAB
; OUTPUT SIXBIT. WORD IS IN A.
SIXPRT: PUSH P,B
PUSH P,C
MOVE B,[440600,,A]
SIXLOP: ILDB C,B
JUMPE C,SIXDON
ADDI C,40
.IOT TTYO,C
TLNE B,770000
JRST SIXLOP
SIXDON: POP P,C
POP P,B
POPJ P,
; PRINT TIME OF NEXT SIGNAL. TIME TO NEXT SIGNAL IS IN A.
NXTPRT: PUSH P,C
PUSH P,D
PUSH P,E
PUSH P,F
PUSH P,G
HRRZ D,TIME
IDIVI D,120. ; MINUTES SINCE MIDNIGHT
ASH A,1
ADD D,A ; MINUTES BETWEEN MIDNIGHT AND SIGNAL
IDIVI D,60.*24. ; DAYS IN D, MINUTES IN E
IDIVI E,60. ; HOURS IN E, MINUTES IN F
MOVE A,E
CAIGE A,10.
.IOT TTYO,["0]
PUSHJ P,DECPRT
.IOT TTYO,[":]
MOVE A,F
CAIGE A,10.
.IOT TTYO,["0]
PUSHJ P,DECPRT
JUMPE D,NXTOUT
SOUT TTYO,[, ]
LDB E,MONPTR ; GET MONTH
LDB F,DAYPTR ; GET DAY
ADD F,D
IDIV F,MONLEN(E) ; TURN INTO MONTHS PLUS DAYS
JUMPE G,[MOVE G,MONLEN(E)
JRST NXTPR1]
ADD E,F
NXTPR1: MOVEI A,(E)
PUSHJ P,DECPRT
.IOT TTYO,["/]
MOVEI A,(G)
PUSHJ P,DECPRT
NXTOUT: POP P,G
POP P,F
POP P,E
POP P,D
POP P,C
POPJ P,
; INITIALIZE: EVAL SYMBOLS, MAP IN SYSTEM, DO PDUMP.
; SYSTEM VERSION IS IN A.
INIT: MOVEM A,SYSVER
MOVE A,EVPTR
EVLOP: MOVE B,(A)
.EVAL B,
.VALUE
MOVEM B,1(A)
ADD A,[2,,2]
JUMPL A,EVLOP
MOVE A,DMTLL
HRLI A,(A)
MOVEM A,DMTLL ; DMTLL,,DMTLL FOR SEARCH LOOP
MOVN A,DMLNG
HRLI A,(A)
HRR A,DMTTBL
MOVEM A,DEMTAB ; AOBJN POINTER TO DEMON TABLE
MOVE A,FLSINS ; TO DECIDE IF CROCK IS SLEEPING
HRLI A,C
MOVEM A,FLSINS
MOVE A,LSUUO
HRLI A,C
MOVEM A,LSUUO
MOVE A,APRC
HRLI A,C
MOVEM A,APRC
MOVE A,USTP
HRLI A,C
MOVEM A,USTP
MOVE A,UPC
HRLI A,C
MOVEM A,UPC
MOVE A,SUUOH
HRLI A,C
MOVEM A,SUUOH
MOVE B,[-377,,1]
MOVEI A,1
.CALL [SETZ
SIXBIT /CORBLK/
MOVEI %CBRED
MOVEI %JSELF
B
MOVEI %JSABS
SETZ A]
.LOSE 1000
.VALUE [ASCIZ /
:PDUMP SYS2;TS DEMST
:CONTIN
/]
JRST START
MONLEN: 0 ? 31. ? 28. ? 31. ? 30. ? 31. ? 30. ? 31. ? 31. ? 30. ? 31. ? 30. ? 31.
END START