mirror of
https://github.com/PDP-10/its.git
synced 2026-02-21 14:57:51 +00:00
279 lines
4.3 KiB
Groff
Executable File
279 lines
4.3 KiB
Groff
Executable File
;-*-Midas-*-
|
|
|
|
Title :IDLE - List idle users
|
|
|
|
A=1 ;General porpoise
|
|
B=2
|
|
C=3
|
|
D=4
|
|
E=5
|
|
F=6
|
|
G=7
|
|
|
|
T1=10
|
|
T2=11
|
|
T3=12
|
|
|
|
I=13 ;Index
|
|
T=14 ;TTY
|
|
|
|
P=17
|
|
|
|
Call=<PUSHJ P,>
|
|
Return=<POPJ P,>
|
|
|
|
TTYo==1
|
|
|
|
MapBot==5
|
|
MapTop=177
|
|
MapLen==MapTop-MapBot+1
|
|
|
|
Pdlen==10
|
|
JCLen==10
|
|
MaxUsr==50.
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
Define SYSCAL op,args
|
|
.Call [Setz ? Sixbit /op/ ? args ((Setz))]
|
|
Termin
|
|
|
|
Define TYPE &string
|
|
Movei T1,<.Length string>
|
|
Move T2,[440700,,[Ascii string]]
|
|
Syscal SIOT,[%Climm,,TTYo ? T2 ? T1]
|
|
.Lose %LsSys
|
|
Termin
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
JCLbuf: Block JCLen
|
|
-1
|
|
|
|
Text: Block JCLen
|
|
|
|
Pdlist: -Pdlen,,Pdlist
|
|
Block Pdlen
|
|
|
|
NCT: 0 ;Number Console Terminals - Max TTY#
|
|
TTITM: 0 ;TTy Idle TiMe (?) - Idle time
|
|
UNAME: 0
|
|
TTYSTS: 0 ;STS? Has the index of the job which has that TTY
|
|
|
|
Who: Block MaxUsr
|
|
When: Block MaxUsr
|
|
Where: Block MaxUsr
|
|
|
|
Time: 30.*60.
|
|
30.*60.*60.
|
|
30.*60.*60.*24.
|
|
|
|
Alpha: 0
|
|
|
|
Now: 0
|
|
|
|
Target: 0
|
|
Limit: 30.*60.
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
Begin: Move P,PDList
|
|
Syscal OPEN,[%Clbit,,.uao\%TJDIS
|
|
%Climm,,TTYo
|
|
[Sixbit /TTY/]]
|
|
.Lose %LsFil
|
|
.Break 12,[..rJCL,,JCLbuf]
|
|
Skipn JCLbuf
|
|
Jrst SysMap
|
|
Move A,[440700,,JCLbuf]
|
|
|
|
Clean: Ildb B,A ;Remove leading spaces/tabs
|
|
Caie B,^I
|
|
Cain B,40
|
|
Jrst Clean
|
|
Setz E,
|
|
Move C,[440700,,Text]
|
|
Skipa
|
|
|
|
Read: Ildb B,A
|
|
Caie B,^C
|
|
Cain B,^M
|
|
Jrst Inter
|
|
Caie B,177
|
|
Cain B,^_
|
|
Jrst Inter
|
|
Cail B,"0
|
|
Caile B,"9
|
|
Setom Alpha
|
|
Cail B,"a
|
|
Trz B,40
|
|
Idpb B,C
|
|
Aoja E,Read
|
|
|
|
Inter: Jumpe E,SysMap
|
|
Move C,[440700,,Text]
|
|
Skipe Alpha
|
|
Jrst Name
|
|
|
|
Numify: Imuli D,10.
|
|
Ildb B,C
|
|
Subi B,"0
|
|
Add D,B
|
|
Sojn E,Numify
|
|
IMuli D,<30.*60.>
|
|
Movem D,Limit
|
|
Jrst SysMap
|
|
|
|
Name: Caile E,6
|
|
Movei E,6
|
|
Move D,[440600,,Target]
|
|
|
|
Sixify: Ildb B,C
|
|
Subi B,40
|
|
Idpb B,D
|
|
Sojn E,Sixify
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;;;
|
|
;;; JCL parsing done. LIMIT contains the time in ticks that
|
|
;;; is the bottom cut-of for people listed. If TARGET is non-
|
|
;;; zero, then only TARGET is listed, not all users
|
|
;;;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
SysMap: Move B,[Squoze 0,NCT]
|
|
.Eval B,
|
|
.Lose
|
|
Movem B,NCT
|
|
Move C,[Squoze 0,UNAME]
|
|
.Eval C,
|
|
.Lose
|
|
Add C,[(I)] ;Indexed by I
|
|
Movem C,UNAME
|
|
Move D,[Squoze 0,TTITM]
|
|
.Eval D,
|
|
.Lose
|
|
Add D,[(T)] ;Likewise for T
|
|
Movem D,TTITM
|
|
Move E,[Squoze 0,TTYSTS]
|
|
.Eval E,
|
|
.Lose
|
|
Add E,[(T)]
|
|
Movem E,TTYSTS
|
|
Syscal CORBLK,[%Climm,,%Cbndr
|
|
%Climm,,%Jself
|
|
[-MapLen,,MapBot]
|
|
%Climm,,%Jsnum]
|
|
.Lose %LsSys
|
|
Movei T,1 ;Start at T01
|
|
.RdTime T1,
|
|
Movem T1,Now
|
|
Seto E,
|
|
|
|
GetEm: Move C,@TTYSTS
|
|
Hrre I,C
|
|
Jumple I,Next
|
|
Tlne C,400000
|
|
Jrst Next
|
|
Move A,Now
|
|
Sub A,@TTITM
|
|
Skipge A
|
|
Setz A,
|
|
Move D,@UNAME
|
|
Camn D,Target
|
|
Jrst Save
|
|
Camge A,Limit
|
|
Jrst Next
|
|
Save: Aoj E,
|
|
Movem T,Where(E)
|
|
Movem A,When(E)
|
|
Movem D,Who(E)
|
|
Next: Aoj T,
|
|
Camg T,NCT
|
|
Jrst GetEm
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;;;
|
|
;;; All unames and idle times have been read in. Now is the time
|
|
;;; to sort and output, or just output for one name....
|
|
;;;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
Squeal: .Iot TTYo,[^P]
|
|
.Iot TTYo,["A]
|
|
Jumpl E,[TYPE "No users"
|
|
Jrst Die]
|
|
Skipn Target
|
|
Jrst Sort
|
|
Move T1,E
|
|
Move T2,Target
|
|
|
|
Find: Camn T2,Who(T1)
|
|
Jrst Here
|
|
Sojge T1,Find
|
|
TYPE "Who? Not idle... not even HERE!"
|
|
Jrst Die
|
|
|
|
Here: Call OutLin
|
|
Jrst Die
|
|
|
|
Sort: TYPE "TTY Uname Idle"
|
|
|
|
Loopi: Seto T2,
|
|
Move T3,E
|
|
Loop: Caml T2,When(T3)
|
|
Jrst Too
|
|
Move T1,T3
|
|
Move T2,When(T3)
|
|
Too: Sojge T3,Loop
|
|
Skipge T2
|
|
Jrst Die
|
|
Call OutLin
|
|
Setom When(T1)
|
|
Jrst Loopi
|
|
|
|
Die: .Logout 1,
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
OutLin: .Iot TTYo,[^P]
|
|
.Iot TTYo,["A]
|
|
.Iot TTYo,["T]
|
|
Move A,Where(T1)
|
|
IDivi A,10
|
|
Addi A,60
|
|
.Iot TTYo,A
|
|
Addi B,60
|
|
.Iot TTYo,B
|
|
.Iot TTYo,[" ]
|
|
Movei C,7
|
|
Move A,Who(T1)
|
|
6Type: Setz B,
|
|
Rotc A,6
|
|
Addi B,40
|
|
.Iot TTYo,B
|
|
Sojn C,6Type
|
|
|
|
TType: Setz A, ;1st set has no leading '0'
|
|
Movei D,2
|
|
Move B,When(T1)
|
|
TTloop: Idiv B,Time(D)
|
|
Skipn A
|
|
Jumpe B,TTnext
|
|
Move F,B
|
|
Idivi F,10.
|
|
Addi F,"0
|
|
Caig F,"0
|
|
Skipe A
|
|
.Iot TTYo,F
|
|
Addi G,"0
|
|
.Iot TTYo,G
|
|
Skipe D
|
|
.Iot TTYo,[":]
|
|
Seto A,
|
|
TTnext: Move B,C
|
|
Sojge D,TTloop
|
|
Return
|
|
|
|
END BEGIN
|