From b2341133ef1b9c8857e0858a2749cd0fc4c0aa3e Mon Sep 17 00:00:00 2001 From: Eric Swenson Date: Sun, 4 Dec 2016 19:08:11 -0800 Subject: [PATCH] Added IDLE, which displays idle users. --- README.md | 1 + build/build.tcl | 4 +- src/gren/idle.2 | 278 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 282 insertions(+), 1 deletion(-) create mode 100755 src/gren/idle.2 diff --git a/README.md b/README.md index 1feb6a1a..b45db43d 100644 --- a/README.md +++ b/README.md @@ -116,6 +116,7 @@ from scratch. - HSNAME, displays user's HSNAME - ARCSAL, archive salvager - RMTDEV, MLDEV for non-ITS hosts + - IDLE, list idle users 6. A brand new host table is built from the host table source and installed into SYSBIN; HOSTS3 > using H3MAKE. diff --git a/build/build.tcl b/build/build.tcl index 9343b523..c9e6aeda 100644 --- a/build/build.tcl +++ b/build/build.tcl @@ -662,10 +662,12 @@ expect ":KILL" # rmtdev respond "*" ":midas device;atsign rmtdev_gz;rmtdev\r" + +# idle +respond "*" ":midas sys1;ts idle_gren;idle\r" expect ":KILL" # ndskdmp tape - respond "*" ":link kshack;good ram,.;ram ram\r" respond "*" ":link kshack;ddt bin,.;@ ddt\r" respond "*" $emulator_escape diff --git a/src/gren/idle.2 b/src/gren/idle.2 new file mode 100755 index 00000000..05ceb598 --- /dev/null +++ b/src/gren/idle.2 @@ -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= +Return= + +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