1
0
mirror of https://github.com/PDP-10/its.git synced 2026-04-25 03:45:11 +00:00
Files
PDP-10.its/src/mprog1/demcls.ujhm02

158 lines
3.8 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<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>