mirror of
https://github.com/PDP-10/its.git
synced 2026-04-25 03:45:11 +00:00
158 lines
3.8 KiB
Plaintext
158 lines
3.8 KiB
Plaintext
<PACKAGE "DEMCLS">
|
||
|
||
<ENTRY SIGNAL-DEMON
|
||
SET-DEMON-STATUS
|
||
CLEAR-DEMON-STATUS
|
||
READ-DEMON-STATUS>
|
||
|
||
<USE "STR">
|
||
|
||
<TITLE SIGNAL-DEMON>
|
||
<DECLARE ("VALUE" <OR ATOM FALSE> STRING "OPTIONAL" FIX)>
|
||
<DPUSH TP* <ARG 1>> ;"save the string for error msg"
|
||
<HLRZ A* AB> ;"save the request integer ..."
|
||
<CAIN A* -2> ;"is there a second arg?"
|
||
<PUSH P* [0]> ;"no, use 0 then"
|
||
<CAIE A* -2>
|
||
<PUSH P* 1 <ARG 2>> ;"yes, use it"
|
||
<DPUSH TP* <ARG 1>> ;"convert the name to sixbit"
|
||
<MCALL 1 STRTOX>
|
||
<POP P* A> ;"get the request integer back"
|
||
<ASH A* -1> ;"convert to 2 minute units"
|
||
<*CALL [<SETZ> ;"do it"
|
||
<SIXBIT "DEMSIG">
|
||
<B>
|
||
<SETZ A>]>
|
||
<JRST NO-SUCH-FILE>
|
||
<POP TP* 0> ;"flush demon name string"
|
||
<POP TP* 0>
|
||
<DMOVE A* <PQUOTE T>> ;"and return 'T"
|
||
<JRST FINIS>
|
||
NO-SUCH-FILE ;"or return a FALSE"
|
||
<POP TP* B> ;"get back name"
|
||
<POP TP* A>
|
||
<DPUSH TP* <PQUOTE "The file SYS;ATSIGN ">>
|
||
<DPUSH TP* A>
|
||
<DPUSH TP* <PQUOTE " does not exist">>
|
||
<MOVEI A* 3>
|
||
<PUSHJ P* CISTNG>
|
||
<DPUSH TP* A>
|
||
<MOVEI A* 1>
|
||
<PUSHJ P* IILIST>
|
||
<MOVE A* $TFALSE>
|
||
<JRST FINIS>
|
||
|
||
|
||
|
||
<TITLE READ-DEMON-STATUS>
|
||
<DECLARE ("VALUE" <OR <VECTOR [4 FIX]> FALSE>
|
||
<OR STRING FIX>)>
|
||
<HLRZ A* <ARG 1>>
|
||
<MOVE B* 1 <ARG 1>> ;"get jobspec into B"
|
||
<CAIN A* <TYPE-CODE FIX>> ;"see if type FIX arg"
|
||
<TROA B* *400000*> ;"yes, turn on 2.9 bit and skip"
|
||
<SKIPA>
|
||
<JRST READ-DEM>
|
||
<DPUSH TP* <ARG 1>> ;"no, convert name to sixbit"
|
||
<MCALL 1 STRTOX>
|
||
READ-DEM
|
||
<*CALL [<SETZ>
|
||
<SIXBIT "RDDMST">
|
||
<B>
|
||
<(*2000*) A>
|
||
<(*2000*) C>
|
||
<SETZM D>]>
|
||
<JRST DEMON-NOT-IN-TABLE>
|
||
<PUSH TP* $TFIX> ;"returned vector contains:"
|
||
<PUSH TP* A> ;"1: job number of demon"
|
||
<HLRZ O* C>
|
||
<ASH O* 1> ;"multiply by 2 for the user"
|
||
<PUSH TP* $TFIX>
|
||
<PUSH TP* O> ;"2: number of minutes between startups"
|
||
<HRRZ O* C>
|
||
<PUSH TP* $TFIX>
|
||
<PUSH TP* O> ;"3: number of startup calls for this demon"
|
||
<PUSH TP* $TFIX>
|
||
<ASH D* 1> ;"multiply by 2 for the user"
|
||
<PUSH TP* D> ;"4: minutes till next startup"
|
||
<MOVEI A* 4>
|
||
<PUSHJ P* CIVEC>
|
||
<JRST FINIS>
|
||
DEMON-NOT-IN-TABLE
|
||
<DMOVE A* <PQUOTE #FALSE ("Demon not in the system table")>>
|
||
<JRST FINIS>
|
||
|
||
|
||
|
||
<TITLE CLEAR-DEMON-STATUS>
|
||
<DECLARE ("VALUE" <OR ATOM FALSE> <OR STRING FIX>)>
|
||
<HLRZ A* <ARG 1>>
|
||
<MOVE B* 1 <ARG 1>>
|
||
<CAIN A* <TYPE-CODE FIX>> ;"type FIX arg (demon name)?"
|
||
<TROA B* *400000*> ;"yes, set 2.9 bit and skip"
|
||
<SKIPA>
|
||
<JRST DEM-CLEAR>
|
||
<DPUSH TP* <ARG 1>> ;"no, convert to sixbit"
|
||
<MCALL 1 STRTOX>
|
||
DEM-CLEAR
|
||
<*CALL [<SETZ>
|
||
<SIXBIT "STDMST">
|
||
<B>
|
||
[-1]
|
||
<SETZ [0]>]>
|
||
<JRST DEM-CLEAR-ERROR>
|
||
<DMOVE A* <PQUOTE T>>
|
||
<JRST FINIS>
|
||
DEM-CLEAR-ERROR
|
||
<MOVE A* $TFALSE>
|
||
<SETZM B>
|
||
<JRST FINIS>
|
||
|
||
|
||
<TITLE SET-DEMON-STATUS>
|
||
<DECLARE ("VALUE" <OR ATOM FALSE> <OR STRING FIX> FIX FIX FIX)>
|
||
;"args are: 1) demon name or job number
|
||
2) number of mins. between signals
|
||
3) number of signals
|
||
4) number or mins. till next signal"
|
||
|
||
<MOVE E* <ARG 2> 1> ;"save args 2, 3, 4 on P-stk"
|
||
<ASH E* -1> ;"convert arg 2 to 2 min. units"
|
||
<PUSH P* E>
|
||
<PUSH P* <ARG 3> 1>
|
||
<MOVE E* <ARG 4> 1> ;"arg 4 ==> 2 min. units"
|
||
<JUMPE E* NO-DIV> ;"if 0, leave it"
|
||
<TRNN E* 1> ;"if even, subtract 1 (fudge factor)"
|
||
<SOS E>
|
||
<ASH E* -1> ;"divide by 2"
|
||
NO-DIV <PUSH P* E>
|
||
<HLRZ A* <ARG 1>>
|
||
<MOVE B* <ARG 1> 1> ;"get jobspec into B"
|
||
<CAIN A* <TYPE-CODE FIX>> ;"type FIX first arg (demon name)?"
|
||
<TROA B* *400000*> ;"yes, set 2.9 bit and skip"
|
||
<SKIPA>
|
||
<JRST STDMST1>
|
||
<DPUSH TP* <ARG 1>> ;"and convert the name to sixbit"
|
||
<MCALL 1 STRTOX>
|
||
STDMST1
|
||
<POP P* E> ;"get back args: arg 4"
|
||
<POP P* D> ;"arg 3"
|
||
<POP P* C> ;"arg 2"
|
||
<HRL D* C> ;"combine args 2 & 3 for .CALL"
|
||
<*CALL [<SETZ>
|
||
<SIXBIT "STDMST">
|
||
<B>
|
||
<D>
|
||
<SETZ E>]>
|
||
<JRST SET-DEM-ERROR>
|
||
<DMOVE A* <PQUOTE T>> ;"return a 'T"
|
||
<JRST FINIS>
|
||
SET-DEM-ERROR
|
||
<MOVE A* $TFALSE> ;"return a FALSE"
|
||
<SETZM B>
|
||
<JRST FINIS>
|
||
|
||
<END>
|
||
|
||
<ENDPACKAGE>
|