mirror of
https://github.com/PDP-10/its.git
synced 2026-03-01 09:40:56 +00:00
243 lines
6.7 KiB
Groff
243 lines
6.7 KiB
Groff
;-*-midas-*-
|
||
|
||
TITLE SYSLOD
|
||
|
||
;;; Written by Dennis L. Doughty, '83
|
||
|
||
.qmtch==1 ;make "<text>" handle text
|
||
|
||
a=1 ;temporary
|
||
b=2 ;temporary
|
||
c=3 ;temporary
|
||
frshr=4 ;where we keep the fair share
|
||
ofrshr=6 ;where we keep the old fair share
|
||
ttybuf=7 ;out tty input buffer
|
||
nusrs=10 ;where we keep the number of users
|
||
t1=11 ;temporary
|
||
t2=12 ;temporary
|
||
chr=13 ;character read in JCL
|
||
sp=17 ;stack pointer
|
||
|
||
tyic==13 ;can't use channel 1
|
||
tyoc==14 ;establish an output channel
|
||
pdleng==10 ;lots of PDL space
|
||
|
||
|
||
define syscal a,b,c=<calerr>
|
||
.call [setz ? sixbit/a/ ? b ? setz+<%clerr,,0>+c]
|
||
termin
|
||
|
||
|
||
define type &text
|
||
push sp,a
|
||
push sp,b
|
||
move a,[440700,,[asciz text]]
|
||
movei b,<.length text>
|
||
syscal siot,[%climm,,tyoc ;ac has channel
|
||
a
|
||
b]
|
||
.lose %lsfil
|
||
pop sp,b
|
||
pop sp,a
|
||
termin
|
||
|
||
define initeval sym
|
||
.scalar sym
|
||
move t1,[squoze 0,/sym/]
|
||
.eval t1,
|
||
.lose
|
||
movem t1,sym
|
||
termin
|
||
|
||
define getval a,b
|
||
hrl a,b
|
||
hrri a,a
|
||
.getloc a,
|
||
termin
|
||
|
||
go: move sp,[-pdleng,,pdl] ;initialize our push stack
|
||
|
||
syscal open,[%clbit,,.uii ;open tty for input
|
||
%climm,,tyic
|
||
[sixbit /TTY/]]
|
||
.lose %lsfil
|
||
syscal open,[%clbit,,<.uao+%tjdis> ;open tty for output with ^P codes
|
||
%climm,,tyoc
|
||
[sixbit /TTY/]]
|
||
.lose %lsfil
|
||
;find out our tty type
|
||
syscal cnsget,[%climm,,tyoc ? %clout,, ? %clout,, ? %clout,,tctyp]
|
||
.lose %lsfil
|
||
|
||
initeval SLOADU
|
||
initeval SUSRS
|
||
|
||
getjcl: .break 12,[5,,jclbuf] ;get our JCL
|
||
move a,[440700,,jclbuf] ;get a byte pointer to it in a
|
||
nxtchr: ildb chr,a ;get first character in chr
|
||
cain chr,40 ;is it a space?
|
||
jrst nxtchr ;yes, go back for more
|
||
cain chr,150 ;is is an "h"
|
||
setom histf ; remember it
|
||
cain chr,77 ;is is a "?", if so, document it
|
||
jrst [type /C
|
||
SYSLOD produces a graph of the System Fair Share in either a continuous
|
||
update mode or in a histogram mode. The default is continuous update
|
||
display terminals and histogram mode for printing terminals. After the
|
||
initial display, the program accepts one-character commands as follows:
|
||
|
||
h -- histogram option
|
||
r -- continuous display mode (video terms only)
|
||
u -- prints out the number of users on the system
|
||
momentarily and then returns to fair share
|
||
display
|
||
d -- redisplays screen (or on a printing terminal
|
||
redisplays header)
|
||
q -- quits the program
|
||
? -- prints abbreviated documentation
|
||
|
||
SYSLOD takes an optional character "h" in the jcl which selects
|
||
histogram mode from the start.
|
||
/
|
||
.logout 1,]
|
||
|
||
go1: movei ofrshr,0 ;initialize old fair share to 0
|
||
type /CFair Share:
|
||
|
||
/
|
||
pushj sp,graph ;and produce the scale
|
||
go2: pushj sp,ldcal ;calculate the load
|
||
pushj sp,plotit ;and plot the fair share
|
||
movei a,60. ;set up for waiting 2 seconds. (shawn).
|
||
.sleep a, ;and wait
|
||
.listen ttybuf, ;find out if he's typing anything
|
||
cain ttybuf,0 ;if not continue graphing
|
||
jrst go2
|
||
.iot tyic,ttybuf ;gobble character typed
|
||
cain ttybuf,165 ;is it a "u"
|
||
jrst usrhdr ; yes, display number of users
|
||
cain ttybuf,144 ;is it a "d"
|
||
jrst go1 ; redisplay plot
|
||
cain ttybuf,150 ;is it an "h"
|
||
setom histf ;we want a histogram
|
||
cain ttybuf,162 ;is it an "r"
|
||
jrst [setzm histf ;back to non-histogram
|
||
jrst go1] ;and redisplay
|
||
cain ttybuf,77
|
||
jrst [type /CCommands are:
|
||
h -- Select histogram mode (printing terminals automatically
|
||
select this mode)
|
||
|
||
r -- Returns to continuous plot mode
|
||
(Video terminals only)
|
||
|
||
u -- Momentarily displays number of system users
|
||
|
||
d -- On video terminals, redisplays entire screen
|
||
(in case of unwanted garbage)
|
||
On printing terminals, redisplays header
|
||
|
||
q -- Quits the program
|
||
|
||
? -- Displays this info
|
||
|
||
--Type space to resume display--/
|
||
|
||
.iot tyic,jclbuf ;accept anything
|
||
jrst go1] ;go back to display
|
||
caie ttybuf,161 ;is it a "q"
|
||
jrst go2 ; no, go back to fair share display
|
||
.logout 1, ;and kill self
|
||
|
||
ldcal: getval frshr,SLOADU ;Get inverse fair share
|
||
movei b,10000. ; fair share = 10000./sloadu.
|
||
idivm b,frshr ; calculate it
|
||
getval nusrs,SUSRS ;Get number of users
|
||
popj sp, ;and return
|
||
|
||
usrhdr: type /CUsers: / ;herald
|
||
move t1,nusrs ;get number of users
|
||
pushj sp,decprt ;print it out
|
||
movei a,60. ;sleep for 2 seconds
|
||
.sleep a,
|
||
jrst go1 ;and start over
|
||
|
||
graph: movei b,9. ;number of spaces 'till first number
|
||
movei a,10. ;first number on scale
|
||
pushj sp,cmove ;moves 9 spaces
|
||
move t1,a ;print out our number
|
||
pushj sp,decprt
|
||
movei c,6. ;number of times through scale loop
|
||
scloop: jumpe c,endslp ;moves 8 spaces
|
||
addi a,10. ;increment scale number
|
||
movei b,8. ;from now on, move 8 spaces over
|
||
pushj sp,cmove ;do it
|
||
move t1,a ;print out the number
|
||
pushj sp,decprt
|
||
subi c,1 ;one less time through loop
|
||
jrst scloop ;and go back for more
|
||
endslp: .iot tyoc,[^P] ;go to next line
|
||
.iot tyoc,["A"]
|
||
movei c,7. ;initialize out counter
|
||
sclop1: jumpe c,endlp1 ;puts a "|" below every number of
|
||
movei b,9. ;the scale
|
||
pushj sp,cmove
|
||
.iot tyoc,["|"] ;print out the "|"
|
||
subi c,1 ;decrement out loop counter
|
||
jrst sclop1 ;and go back for more
|
||
endlp1: .iot tyoc,[^P]
|
||
.iot tyoc,["A"] ;a carriage return-linefeed
|
||
popj sp,
|
||
|
||
cmove: jumpe b,endcmv ;moves over b spaces
|
||
.iot tyoc,[" "] ;print out a space
|
||
subi b,1 ;decrement out loop
|
||
jrst cmove
|
||
endcmv: popj sp,
|
||
|
||
hline: caig a,0 ;longer than we have?
|
||
jrst lesst ; no
|
||
greatr: jumpe a,cpopj ;if line-length >1
|
||
.iot tyoc,["*"] ;print an asterisk
|
||
subi a,1 ;decrement our loop counter
|
||
jrst greatr ;and print another
|
||
|
||
lesst: jumpe a,cpopj ;if line-length <1
|
||
.iot tyoc,[^P] ;delete one character backwards
|
||
.iot tyoc,["X"]
|
||
addi a,1 ;increment loop counter
|
||
jrst lesst ;and go back for more
|
||
|
||
plotit: move a,frshr ;determine line-length
|
||
sub a,ofrshr ;(line-length = frshr-ofrshr)
|
||
pushj sp,hline ;draw line of length line-length
|
||
movem frshr,ofrshr ;save old fair share
|
||
move t1,tctyp ;get terminal type
|
||
move t2,histf ;get histogram flag
|
||
cain t2,0 ;do we want a histogram
|
||
cain t1,0 ;are we on a printing terminal
|
||
jrst [movei ofrshr,0 ;do histogram if requested or if
|
||
.iot tyoc,[^P] ;on a printing terminal
|
||
.iot tyoc,["A"]
|
||
jrst cpopj]
|
||
cpopj: popj sp,
|
||
|
||
decprt: idivi t1,10. ;figure first digit
|
||
push sp,t2 ;push remainder
|
||
skipe t1 ;done?
|
||
pushj sp, decprt
|
||
pop sp,t1 ;yes, take out in opposite order
|
||
addi t1,60 ;make ascii
|
||
.iot tyoc,t1
|
||
popj sp,
|
||
|
||
|
||
jclbuf: 0 ;where to save the jcl
|
||
tctyp: 0 ;terminal type
|
||
histf: 0 ;flag -- hist or no hist
|
||
pdl: 0 ;our stack
|
||
block pdleng ;PDL area
|
||
calerr: 0
|
||
end go
|
||
|