1
0
mirror of https://github.com/PDP-10/its.git synced 2026-02-04 23:54:37 +00:00

Added IDLE, which displays idle users.

This commit is contained in:
Eric Swenson
2016-12-04 19:08:11 -08:00
committed by Lars Brinkhoff
parent 857a76de76
commit b2341133ef
3 changed files with 282 additions and 1 deletions

278
src/gren/idle.2 Executable file
View File

@@ -0,0 +1,278 @@
;-*-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