mirror of
https://github.com/PDP-10/its.git
synced 2026-03-07 03:35:53 +00:00
Trivial Gunner used on MC.
This is a one-shot program. It can be linked from DRAGON, with the first file name e.g. HOURLY or DAILY for the desired frequency. For this to work, the file CSTACY; GUNNER LOG must exist.
This commit is contained in:
@@ -749,6 +749,10 @@ respond "*" ":link device;jobdev hf,device;jobdev hsname\r"
|
||||
respond "*" ":midas device; jobdev shoe_rwk; gunner\r"
|
||||
expect ":KILL"
|
||||
|
||||
# Trivial Gunner
|
||||
respond "*" ":midas cstacy;_gunner >\r"
|
||||
expect ":KILL"
|
||||
|
||||
# pr
|
||||
respond "*" ":midas sys1;ts pr_sysen1;pr\r"
|
||||
expect ":KILL"
|
||||
|
||||
@@ -250,6 +250,7 @@ cprog/search.c 197704190853.24
|
||||
cprog/shell.c 197710221249.25
|
||||
c/phase.args 197608191750.12
|
||||
c/recipe.text 197608280859.25
|
||||
cstacy/gunner.6 198502200143.45
|
||||
c/stdio.h 198007161739.28
|
||||
c/testc.c 197704170753.25
|
||||
c/testc.stinkr 197705210818.40
|
||||
|
||||
476
src/cstacy/gunner.6
Normal file
476
src/cstacy/gunner.6
Normal file
@@ -0,0 +1,476 @@
|
||||
;-*- Mode: Midas -*-
|
||||
|
||||
TITLE GUNNER - Trivial Gunner Demon
|
||||
|
||||
;;; ACs.
|
||||
|
||||
Z=0 ;Super temp.
|
||||
A=1 ;A-E general purpose,
|
||||
B=2 ; always preserved.
|
||||
C=3
|
||||
D=4
|
||||
E=5
|
||||
TY=6 ;TTY number.
|
||||
T=15 ;Temps.
|
||||
TT=T+1
|
||||
P=17 ;Stack pointer.
|
||||
|
||||
;;; I/O Channels.
|
||||
|
||||
CLIC==1 ;CLI output.
|
||||
ERRI==2 ;ERR device input.
|
||||
TTYO==3 ;TTY typeout.
|
||||
|
||||
;;; Other crap.
|
||||
|
||||
MEMSIZ=1000000 ;The size of memory.
|
||||
PG$BTS==10. ;# Bits in page addr.
|
||||
PG$SIZ=1_PG$BTS ;ITS page size in words.
|
||||
PG$DEC=PG$SIZ/2 ;DEC page size in words.
|
||||
PG$MSK==PG$SIZ-1 ;Mask for page address bits.
|
||||
|
||||
|
||||
|
||||
SUBTTL Basic Definitions
|
||||
|
||||
DEFINE INFORM A,B,C,D,E,F,G
|
||||
PRINTX \A!B!C!D!E!F!G
|
||||
\
|
||||
TERMIN
|
||||
|
||||
DEFINE IFCE A,B
|
||||
IFE SIXBIT/A/-SIXBIT/B/,TERMIN
|
||||
|
||||
DEFINE SYSCAL A,B
|
||||
.CALL [SETZ ? SIXBIT/A/ ? B ((SETZ))]
|
||||
TERMIN
|
||||
|
||||
CALL==:<PUSHJ P,> ;Procedure call.
|
||||
RET==:<POPJ P,> ;Return.
|
||||
CALRET==:JRST ;Tail-recursive call.
|
||||
NOP==:<JFCL> ;(On KL's TRN is faster but who cares.)
|
||||
IF2, LOSE=:JSR AUTPSY
|
||||
DDTBRK=:.BREAK 16,
|
||||
|
||||
DEFINE EVAL SYM,PLACE
|
||||
MOVE T,[SQUOZE 0,SYM]
|
||||
.EVAL T,
|
||||
.VALUE [ASCIZ ":System symbol missing"]
|
||||
MOVEM T,PLACE
|
||||
TERMIN
|
||||
|
||||
DEFINE DELAY SCALE,TIM
|
||||
IFCE SCALE,MS, MOVEI Z,2000.*TIM
|
||||
IFCE SCALE,US, MOVEI Z,TIM
|
||||
IFCE SCALE,SEC,MOVEI Z,20000.*TIM
|
||||
SOJG Z,.
|
||||
TERMIN
|
||||
|
||||
DEFINE ROUND AC
|
||||
SKIPE AC+1
|
||||
AOS AC
|
||||
TERMIN
|
||||
|
||||
DEFINE PUSHER AC,LIST
|
||||
SF==0
|
||||
IRP LOC,,[LIST]
|
||||
PUSH AC,LOC
|
||||
SF==SF+1
|
||||
TERMIN
|
||||
TERMIN
|
||||
|
||||
DEFINE POPPER AC,LIST
|
||||
IRP LOC,,[LIST]
|
||||
POP AC,LOC
|
||||
TERMIN
|
||||
TERMIN
|
||||
|
||||
DEFINE TMPLOC VAL,ARG
|
||||
%%%TLC==.
|
||||
LOC VAL
|
||||
ARG
|
||||
LOC %%%TLC
|
||||
TERMIN
|
||||
|
||||
|
||||
;;; Compatability definitions:
|
||||
|
||||
DEFINE NOTHING
|
||||
TERMIN
|
||||
|
||||
CRET==%CLOUT,,
|
||||
EQUALS PUSHAE,PUSHER
|
||||
EQUALS POPAE,POPPER
|
||||
EQUALS LVAR,NOTHING
|
||||
|
||||
|
||||
SUBTTL Formatted Output
|
||||
|
||||
FMTIN: PUSHER P,[A,B,C]
|
||||
PUSH P,[FMTOUT]
|
||||
JRST @-4(P)
|
||||
FMTOUT: POPPER P,[C,B,A]
|
||||
POP P,(P)
|
||||
RET
|
||||
|
||||
|
||||
DEFINE FORMAT STRM,&STRING&,ARGS
|
||||
CALL [ IFSE STRM,T, MOVEI Z,TTYO
|
||||
.ELSE MOVEI Z,STRM
|
||||
MOVEM Z,OCHAN
|
||||
CALL FMTIN
|
||||
ZZZ==-1
|
||||
IRP ARG,,[ARGS]
|
||||
PUSH P,ARG
|
||||
ZZZ==.IRPCNT
|
||||
TERMIN
|
||||
HRROI A,[ASCII STRING]
|
||||
MOVEI B,.LENGTH STRING
|
||||
MOVNI C,ZZZ+1
|
||||
CALRET FORMAT"FORMAT ]
|
||||
TERMIN
|
||||
|
||||
|
||||
DEFINE TYO STRM,CHAR
|
||||
CALL [ IFSE STRM,T, MOVEI Z,TTYO
|
||||
.ELSE MOVEI Z,STRM
|
||||
MOVEM Z,OCHAN
|
||||
MOVEI T,CHAR
|
||||
SYSCAL IOT,[ OCHAN ? T ]
|
||||
LOSE
|
||||
RET ]
|
||||
TERMIN
|
||||
|
||||
DEFINE CRLF STRM
|
||||
FORMAT STRM,"~%"
|
||||
TERMIN
|
||||
|
||||
|
||||
;;; Provide a layer of protective sugar for random output routnes.
|
||||
;;; Routines take channel in OCHAN and never skip.
|
||||
|
||||
DEFINE OUTPUT STRM,RTN
|
||||
CALL [ IFSE STRM,T, MOVEI Z,TTYO
|
||||
.ELSE MOVEI Z,STRM
|
||||
MOVEM Z,OCHAN
|
||||
CALL RTN
|
||||
RET ]
|
||||
TERMIN
|
||||
|
||||
;;; REPORT something on the TTY or in the log file.
|
||||
|
||||
DEFINE REPORT &STRING&,ARGS
|
||||
CALL [ SKIPE LOG
|
||||
FORMAT T,STRING,[ARGS]
|
||||
RET ]
|
||||
TERMIN
|
||||
|
||||
DEFINE REPOUT RTN
|
||||
CALL [ SKIPE LOG
|
||||
OUTPUT T,RTN
|
||||
RET ]
|
||||
TERMIN
|
||||
|
||||
$$ITAB==1 ;GETPOS provided
|
||||
$$IERR==0 ;Use default error macro.
|
||||
$$PCODE==0 ;CLI device doesn't support it
|
||||
$$ENGL==0 ;English numbers not needed
|
||||
$$PFN==0 ;File names not needed
|
||||
$$ERRS==0 ;Errors not needed
|
||||
.INSRT DSK:SYSENG;FORMAT
|
||||
|
||||
|
||||
;;; DATPT - Print the current date and time.
|
||||
;;; Uses KLH's time hacking package.
|
||||
;;; Looks like 7 August 1976 08:31 EDT
|
||||
|
||||
.INSRT DSK:KSC;TIMRTS
|
||||
|
||||
DATPT: PUSHER P,[A,B]
|
||||
CALL LTMENG ;Get ptr to date and time string.
|
||||
HLRZ B,A ;Extract length.
|
||||
HRLI A,440700 ;ASCII string..
|
||||
SYSCAL SIOT,[ OCHAN ? A ? B ]
|
||||
LOSE
|
||||
POPPER P,[B,A]
|
||||
RET
|
||||
|
||||
;;; TIMPT - Print the time in D (stolen from DDT).
|
||||
;;; Arg to print is in D.
|
||||
;;; Looks like HH:MM:SS
|
||||
|
||||
TIMPT: PUSHER P,[C,D,E]
|
||||
MOVEI C,0.
|
||||
JUMPE D,CPOPJ
|
||||
CAMGE D,TMT1(C)
|
||||
AOJA C,.-1
|
||||
TMP3: IDIV D,TMT1(C)
|
||||
MOVEI T,60(D)
|
||||
SYSCAL IOT,[ OCHAN ? T ]
|
||||
LOSE
|
||||
MOVE D,E
|
||||
TRNN C,1
|
||||
JRST TIMPT8
|
||||
CAIL C,5
|
||||
JRST TIMPT9
|
||||
MOVEI T,":
|
||||
SYSCAL IOT,[ OCHAN ? T ]
|
||||
LOSE
|
||||
TIMPT8: AOJA C,TMP3
|
||||
TIMPT9: POPPER P,[E,D,C]
|
||||
RET
|
||||
|
||||
|
||||
TMT1: 36000.
|
||||
3600.
|
||||
600.
|
||||
60.
|
||||
10.
|
||||
1
|
||||
|
||||
|
||||
|
||||
|
||||
SUBTTL I/O routines
|
||||
|
||||
|
||||
;;; OUTSTR - String output (simple cover function).
|
||||
;;; A/ Bp to string
|
||||
;;; B/ Length
|
||||
|
||||
OUTSTR: MOVE T,OCHAN ;Get channel number
|
||||
SYSCAL SIOT,[T ? A ? B]
|
||||
LOSE ; Shouldn't lose.
|
||||
RET ;Never skip.
|
||||
|
||||
|
||||
;;; GETPOS - Get Horiztonal Cursor Position
|
||||
;;; Channel in OCHAN
|
||||
;;; Returns value in A, -1 if unknown
|
||||
|
||||
GETPOS: SYSCAL RCPOS,[ OCHAN ? %CLOUT,,A ]
|
||||
SKIPA A,[-1]
|
||||
HRRZ A,A
|
||||
RET
|
||||
|
||||
|
||||
;;; DSKEOF - Move to end of file open in channel in A.
|
||||
|
||||
DSKEOF: SYSCAL FILLEN,[ A ? %CLOUT,,T ]
|
||||
LOSE
|
||||
SYSCAL ACCESS,[ A ? T ]
|
||||
LOSE
|
||||
RET
|
||||
|
||||
|
||||
|
||||
|
||||
SUBTTL Interrupt Handler, Misc, Etc.
|
||||
|
||||
;;; EVSYMS - Place here any symbols you want evaluated.
|
||||
;;; (This should be a table...)
|
||||
|
||||
EVSYMS: EVAL LUBLK,LUBLK ;Length of luser block.
|
||||
EVAL NCT,NCT ;Number of TTYs.
|
||||
EVAL SLOADU,SLOADU
|
||||
RET
|
||||
|
||||
;;; Many Happy Returns
|
||||
|
||||
POPJ1: AOS (P) ;Skip
|
||||
CPOPJ: RET ;Return
|
||||
|
||||
INTRET: SYSCAL DISMIS,[%CLBIT,,INTACS ? P] ;Interrupt return.
|
||||
JSR SYSLOS
|
||||
|
||||
SYSLOS::
|
||||
AUTPSY: 0 ;Here for fatal errors.
|
||||
DONE: SKIPN DEBUG ;If not debugging
|
||||
DEATH: .LOGOUT 1, ; just die.
|
||||
.VALUE @ERRVAL ;Else val-out
|
||||
JRST DEATH ;and die if proceeded.
|
||||
|
||||
ERRVAL: 0 ;Error string.
|
||||
|
||||
|
||||
;;; Interrupt Handler
|
||||
|
||||
TMPLOC 42,{-LTSINT,,TSINT} ;New style interrupt handler.
|
||||
INTACS==SETZ+2+T_6 ;Push T and TT; then JPC, SUUOH, and LSPCL.
|
||||
|
||||
TSINT: INTACS,,P
|
||||
LTSINT==:.-TSINT
|
||||
|
||||
|
||||
SUBTTL Main Program
|
||||
|
||||
GO::
|
||||
GUNNER: MOVE P,[-PDLLEN,,PDL-1]
|
||||
CALL TIMINI ;Init time variables
|
||||
LOSE ; fail if time unknown
|
||||
CALL EVSYMS ;Find ITS symbols.
|
||||
MOVE A,[-10.,,[ .ROPTION ? TLO 0,%OPINT\%OPOPC ;(BUMRTL?)
|
||||
.ROPTION ? MOVEM B
|
||||
.RMASK ? IOR 0,[%PIPDL\%PIIOC]
|
||||
SIXBIT /XUNAME/ ? MOVEM MYUNM
|
||||
SIXBIT /XJNAME/ ? MOVEM MYJNM ]]
|
||||
SYSCAL USRVAR,[ %CLIMM,,%JSELF ? A ]
|
||||
LOSE
|
||||
SKIPLE LOG ;Where do reports go?
|
||||
CAIA ;If user demanding log file
|
||||
TLNN B,%OPDDT ;Or if not under DDT
|
||||
JRST [ SYSCAL OPEN,[ %CLBIT,,<%DOWOV+.UAO> ? %CLIMM,,TTYO
|
||||
[SIXBIT /DSK/]
|
||||
[SIXBIT /GUNNER/]
|
||||
[SIXBIT /LOG/]
|
||||
[SIXBIT /SPACY/]]
|
||||
LOSE
|
||||
MOVEI A,TTYO
|
||||
CALL DSKEOF
|
||||
JRST GUNN09 ]
|
||||
SYSCAL OPEN,[%CLBIT,,<.UAO+%TJDIS> ? %CLIMM,,TTYO ? [SIXBIT /TTY/]]
|
||||
LOSE
|
||||
GUNN09: SYSCAL SSTATU,[ %CLOUT,,D ? %CLOUT,,SYSDBG
|
||||
%CLOUT,,E ? REPEAT 2,%CLOUT,,JUNK
|
||||
%CLOUT,,B ? %CLOUT,,C ]
|
||||
LOSE
|
||||
REPORT "~%----~%"
|
||||
OUTPUT T,DATPT
|
||||
REPORT " ~S ~S (v~S). ~S ITS.~S",[MYUNM,MYJNM,VERSHN,B,C]
|
||||
SKIPE SYSDBG
|
||||
REPORT " being debugged"
|
||||
HRLZ A,SLOADU ? HRRI A,A ? .GETLOC A,
|
||||
MOVEI B,10000.
|
||||
IDIVM B,A
|
||||
ROUND A
|
||||
REPORT "~&~D lusers, Fairshare= ~D%",[E,A]
|
||||
SKIPLE D
|
||||
JRST [ REPORT "~&System going down in "
|
||||
IDIVI D,30.
|
||||
ROUND D
|
||||
REPOUT TIMPT
|
||||
REPORT " -- logging out."
|
||||
JRST GUNN99]
|
||||
REPORT "~&"
|
||||
|
||||
GUNN10: CALL FRETYS ;Free up idle TTYs.
|
||||
GUNN90: REPORT "~&~S ~S logging out at ",[MYUNM,MYJNM]
|
||||
OUTPUT T,DATPT
|
||||
GUNN99: .CLOSE TTYO,
|
||||
JRST DONE ;See yah.
|
||||
|
||||
|
||||
SUBTTL Free idle TTYs
|
||||
|
||||
;Losers connect to MC from safe sites or hardwired lines and leave their
|
||||
;consoles sitting around idle forever and never log in. This also
|
||||
;happens when broken terminals spuriously type ^Zs on MINITS HUBs.
|
||||
;
|
||||
; FRETYS flushes idle unlogged TTY users in a simple-minded fashion.
|
||||
; Never skips.
|
||||
|
||||
FRETYS: PUSHER P,[A,B,D]
|
||||
MOVE TY,NCT ;Number of TTYs.
|
||||
SUBI TY,1 ;Start with highest TTY number.
|
||||
FRET10: SYSCAL TTYGET,[ %CLIMM,,%JSNUM(TY)
|
||||
REPEAT 2, %CLOUT,,JUNK
|
||||
%CLOUT,,B ] ;Job index.
|
||||
LOSE ; Bogus NCT?
|
||||
JUMPL B,FRET80 ;Ignore free consoles.
|
||||
HRRM B,INDEX ;Remember index of loser.
|
||||
SYSCAL TTYVAR,[ %CLIMM,,%JSNUM(TY) ? [SIXBIT /IDLTIM/]
|
||||
%CLOUT,,A ] ;A gets idle time.
|
||||
LOSE
|
||||
MOVE T,[-4,,[SIXBIT /XUNAME/ ? MOVEM UNAME
|
||||
SIXBIT /XJNAME/ ? MOVEM JNAME ]]
|
||||
SYSCAL USRVAR,[ %CLIMM,,%JSNUM(B) ? T ]
|
||||
LOSE
|
||||
IDIVI A,30. ;Convert idle time to seconds.
|
||||
ROUND A
|
||||
MOVE D,A
|
||||
CAMGE D,[60.*20.] ;Ignore if not yet idle for 20 minutes
|
||||
JRST FRET80
|
||||
MOVE B,JNAME
|
||||
CAMN B,[SIXBIT /HACTRN/]
|
||||
JRST [ HLRO A,UNAME
|
||||
CAMN A,[-1]
|
||||
JRST FRET40
|
||||
JRST .+1 ]
|
||||
FRET30: CAMG D,[60.*60.] ;Tattle on anyone idle over an hour.
|
||||
JRST FRET80
|
||||
REPORT "~&Leaving alone T~2<~;0~O~> ~S ~S, idle ",[TY,UNAME,JNAME]
|
||||
REPOUT TIMPT
|
||||
JRST FRET80
|
||||
|
||||
FRET40: REPORT "~&Gunning job ~O T~2<~;0~O~> ~S, idle ",[INDEX,TY,UNAME]
|
||||
REPOUT TIMPT
|
||||
SYSCAL OPEN,[ %CLBIT,,.UAO ? %CLIMM,,CLIC
|
||||
[SIXBIT /CLI/]
|
||||
UNAME
|
||||
[SIXBIT /HACTRN/]]
|
||||
JRST FRET60
|
||||
FORMAT CLIC,"ï~2&[GUNNER: This console not in use for "
|
||||
OUTPUT CLIC,TIMPT
|
||||
FORMAT CLIC,"]~%"
|
||||
.CLOSE CLIC,
|
||||
FRET60: HRRZ A,INDEX
|
||||
SKIPN DEBUG ;Don't gun if debugging.
|
||||
.GUN A, ; Else give him the big see-yah.
|
||||
NOP
|
||||
FRET80: SOJGE TY,FRET10 ;System console is last.
|
||||
FRET90: POPPER P,[D,B,A] ;Here when done.
|
||||
RET ;Never skips.
|
||||
|
||||
|
||||
|
||||
SUBTTL Map In Users
|
||||
;;; LUSER takes a user index in A and maps a loser block into USRPAG.
|
||||
|
||||
IFN 0,[
|
||||
|
||||
LUSER: PUSHER P,[A]
|
||||
IMUL A,LUSER ;Compute addr of luser's block.
|
||||
LSH A,-10. ;Page # in SYS job.
|
||||
SYSCAL CORBLK,[ %CLIMM,,%CBNDR ? %CLIMM,,%JSELF
|
||||
%CLIMM,,USRPAG ? [400000] ? A]
|
||||
LOSE
|
||||
];IFN0
|
||||
|
||||
|
||||
|
||||
SUBTTL Storage
|
||||
|
||||
LUBLK: 0 ;Length of ITS user block.
|
||||
NCT: 0 ;# of TTYs on machine.
|
||||
SLOADU: 0
|
||||
SYSDBG: 0
|
||||
|
||||
PDLLEN==64.
|
||||
PDL: BLOCK PDLLEN ;The Stack.
|
||||
JUNK: 0 ;The kitchen sink.
|
||||
|
||||
MYUNM: 0 ;Our user name.
|
||||
MYJNM: 0 ;Our job name.
|
||||
|
||||
VERSHN: .FNAM2
|
||||
DEBUG: 0 ;-1 iff debugging
|
||||
LOG: -1 ;Controls logging:
|
||||
;-1 => log on TTY if have it, else file
|
||||
; 0 => no messages at all
|
||||
; 1 => use log file even if have TTY
|
||||
|
||||
OCHAN: 0 ;Typeout channel.
|
||||
|
||||
INDEX: 0 ;Job index of luser.
|
||||
UNAME: 0 ;UNAME of luser.
|
||||
JNAME: 0 ;JNAME of luser.
|
||||
|
||||
USRPAG==<<.+PG$SIZ-1>/PG$SIZ>*PG$SIZ
|
||||
|
||||
END GUNNER
|
||||
|
||||
|
||||
;;; Local Modes:
|
||||
;;; Mode:MIDAS
|
||||
;;; Comment column: 32
|
||||
;;; End:
|
||||
Reference in New Issue
Block a user