home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fresh Fish 8
/
FreshFishVol8-CD2.bin
/
bbs
/
dev
/
tbsource.lha
/
TBSource
/
Logger
/
W.S
< prev
Wrap
Text File
|
1993-12-21
|
10KB
|
505 lines
*************************************************
* *
* (C)opyright 1992-93 *
* *
* by Tomi Blinnikka *
* *
* Don't try to understand the code *
* *
* Version 0.01 05/07/1992 *
* *
* BUGS: UpDays should've been long not word *
* *
* Version 1.00 10/08/1992 *
* *
* BUGS: Gave things like '0 day' *
* *
* Version 1.01 13/08/1992 *
* *
* BUGS: Version text was incorrect, length of *
* TTY_X and console reads/writes were *
* one byte too short. Pointers to lists *
* were incorrect. *
* *
* Version 1.02 22/08/1992 *
* *
* BUGS: Didn't clear whole ActionBuf. *
* *
* Version 1.03 14/02/1993 *
* *
* BUGS: Didn't add NULL after command. *
* *
* Version 1.04 28/02/1993 *
* *
* Version 1.05 04/04/1993 *
* *
* Fixed bug with command length (InfoOutText1) *
* at last... *
* *
*************************************************
INCLUDE "JMPLibs.i"
INCLUDE "exec/types.i"
INCLUDE "libraries/dos.i"
INCLUDE "libraries/dosextens.i"
INCLUDE "XREF:2.0.xref"
INCLUDE "XREF:exec.xref"
INCLUDE "XREF:dos.xref"
section W,CODE
move.l a0,a4
clr.b -1(a0,d0.l)
openlib Dos,ShutDown_Out
cmp.b #'?',(a4)
beq CmdLineHelp
cmp.w #'-?',(a4)
beq CmdLineHelp
cmp.w #'-h',(a4)
beq CmdLineHelp
cmp.b #'h',(a4)
beq CmdLineHelp
Skip1:
;Get system time
;Uptime equals (System time - NUT_timeval)
;Try to read ENV:NUT_console + ENV:NUT_TTYX
;Loop 0 - 9
;try reading ENV:UT_loadavg
Information: bsr GetSysTime
bsr GetUpTime
bsr DoTTYTest
bsr GetLoadAvg
cmp.w #1,Users
bne CheckUsrNum1
lea.l SingleString1,a0
move.l a0,UsersString
CheckUsrNum1: bsr Format
lea.l UpTimeText1,a0
bsr Printer
lea.l LoadAvgBuf,a0
bsr Printer
lea.l EndText1,a0
bsr Printer
lea.l InfoText1,a0
bsr Printer
bsr Do2TTYTest
bra ShutDown
CheckUpTime: lea.l UpTimeName,a3
move.l a3,d1
move.l #MODE_OLDFILE,d2
lib Dos,Open
tst.l d0
beq CheckUpTime2
move.l d0,d4
move.l d0,d1
lea.l UpTimeBuf,a0
move.l a0,d2
move.l #3*4,d3
lib Dos,Read
move.l d4,d1
lib Dos,Close
rts
CheckUpTime2: move.l a3,d1
move.l #MODE_NEWFILE,d2
lib Dos,Open
tst.l d0
beq CheckUpTime3
move.l d0,d4
move.l d0,d1
lea.l DateTime1,a0
move.l a0,d2
move.l #3*4,d3
lib Dos,Write
move.l d4,d1
lib Dos,Close
move.l DateTime1,UpTimeBuf
move.l DateTime1+4,UpTimeBuf+4
move.l DateTime1+4,UpTimeBuf+4
CheckUpTime3: rts
GetSysTime: lea.l DateTime1,a0
move.l a0,d1
lib Dos,DateStamp
move.l DateTime1+4,d0
divu.w #60,d0
move.w d0,Hours
swap d0
move.w d0,Minutes
rts
GetUpTime: lea.l UpTimeName,a3
move.l a3,d1
move.l #MODE_OLDFILE,d2
lib Dos,Open
tst.l d0
beq GetUpTime2
move.l d0,d4
move.l d0,d1
lea.l UpTimeBuf,a0
move.l a0,d2
move.l #3*4,d3
lib Dos,Read
move.l d4,d1
lib Dos,Close
move.l UpTimeBuf,d0
move.l DateTime1,d1
sub.l d0,d1
move.l d1,UpDays
move.l UpTimeBuf+4,d0
move.l DateTime1+4,d1
sub.l d0,d1
bmi GetUpTime3
GetUpTime1: divu.w #60,d1
move.w d1,UpHours
swap d1
move.w d1,UpMinutes
GetUpTime2: rts
GetUpTime3: move.l UpTimeBuf+4,d0
move.l DateTime1+4,d1
add.l #1440,d1
sub.l d0,d1
sub.l #1,UpDays
cmp.l #1,UpDays
bne GetUpTime1
lea.l SingleString1,a0
move.l a0,DaysString
bra GetUpTime1
DoTTYTest: lea.l UpTimeConsole,a0
move.l a0,d1
move.l #MODE_OLDFILE,d2
lib Dos,Open
tst.l d0
beq DoTTYTest1
move.l d0,d1
add.w #1,Users
lib Dos,Close
DoTTYTest1: move.b #'0',TTY
DoTTYTest2: lea.l UpTimeTTY,a0
move.l a0,d1
move.l #MODE_OLDFILE,d2
lib Dos,Open
tst.l d0
beq DoTTYTest3
move.l d0,d1
add.w #1,Users
lib Dos,Close
DoTTYTest3: cmp.b #'9',TTY
beq DoTTYTest4
add.b #1,TTY
bra DoTTYTest2
DoTTYTest4: rts
GetLoadAvg: lea.l LoadAvgName,a0
move.l a0,d1
move.l #MODE_OLDFILE,d2
lib Dos,Open
tst.l d0
bne GetLoadAvg2
GetLoadAvg1: move.l #'N/A,',LoadAvgBuf
move.l #' N/',LoadAvgBuf+4
move.l #'A, ',LoadAvgBuf+8
move.l #'N/A ',LoadAvgBuf+12
move.b #$00,LoadAvgBuf+16
rts
GetLoadAvg2: move.l d0,d4
move.l d0,d1
lea.l LoadAvgBuf,a0
move.l a0,d2
move.l #19,d3
lib Dos,Read
cmp.l #19,d0
beq GetLoadAvg3
bsr GetLoadAvg1
GetLoadAvg3: move.l d4,d1
lib Dos,Close
rts
Do2TTYTest: lea.l UpTimeConsole,a0
move.l a0,d1
move.l #MODE_OLDFILE,d2
lib Dos,Open
tst.l d0
beq Do2TTYTest1
move.l d0,d5
move.l d0,d1
lea.l DateTime1,a0
move.l a0,d2
move.l #4*4+20,d3 ;was 3*4 !!!
lib Dos,Read
move.l d5,d1
lib Dos,Close
bsr D2TTY
lea.l ConsoleText1,a0
bsr P2TTY
Do2TTYTest1: move.b #'0',TTY
Do2TTYTest2: lea.l UpTimeTTY,a0
move.l a0,d1
move.l #MODE_OLDFILE,d2
lib Dos,Open
tst.l d0
beq Do2TTYTest3
move.l d0,d5
move.l d0,d1
lea.l DateTime1,a0
move.l a0,d2
move.l #4*4+20,d3 ;was 3*4 !!!
lib Dos,Read
move.l d5,d1
lib Dos,Close
bsr D2TTY
lea.l UpTimeTTY1,a0
bsr P2TTY
Do2TTYTest3: cmp.b #'9',TTY
beq Do2TTYTest4
add.b #1,TTY
bra Do2TTYTest2
Do2TTYTest4: rts
;This puts everything in the right place and prints this TTY's info
;
;INPUTS
;
;a0 = String of tty or console
P2TTY: move.l a0,TTYText1
move.l DateTime1+4,d0
divu.w #60,d0
move.w d0,HoursText1
swap d0
move.w d0,MinutesText1
bsr Format2
lea.l InfoOutText1,a0
bsr Printer
lea.l EndText1,a0
bsr Printer
lea.l ActionBuf,a0 ;this should clear 38 chars
move.l #9,d0 ;but does (4 bytes * 10)
P2TTY1: clr.l (a0)+
dbf d0,P2TTY1
lea.l InfoOutText1,a0 ;this should clear 200 bytes
move.l #49,d0 ;but does (4 bytes * 50)
P2TTY2: clr.l (a0)+
dbf d0,P2TTY2
rts
;This goes through the lists and if it finds a cli process with same CLINum,
;it will copy the command name into ActionBuf.
D2TTY: lib Exec,Disable
move.l $4,a6 ;not really needed!
lea.l $1a4(a6),a2
move.l LH_HEAD(a2),a2
D2TTY1: bsr LT_LOOP
cmp.l #$00,a2
beq D2TTY3
D2TTY2: move.l CLINumBuf,d0
cmp.l TTYTaskNum,d0
beq Do2Console
bsr LT_LOOPer
cmp.l #$00,a2
bne D2TTY2
D2TTY3: move.l $4,a6 ;not needed ?
lea.l $196(a6),a2
move.l LH_HEAD(a2),a2
bsr LT_LOOP
cmp.l #$00,a2
beq D2TTY5
D2TTY4: move.l CLINumBuf,d0
cmp.l TTYTaskNum,d0
beq Do2Console
bsr LT_LOOPer
cmp.l #$00,a2
bne D2TTY4
D2TTY5: sub.l a1,a1
lib Exec,FindTask
move.l d0,a2
move.l $8c(a2),d0
cmp.l TTYTaskNum,d0
bne Do2Console4
Do2Console: bsr LT_GetName
lea.l ActionBuf,a3
clr.l d0
move.b (a0)+,d0
bne Do2Console1
lea.l NoCmdText1,a0
bra Do2Console2
Do2Console1: sub.w #1,d0
cmp.w #38,d0 ;Do only 38 characters?
bls Do2Console3
Do2Console2: move.l #38,d0
Do2Console3: move.b (a0)+,(a3)+
tst.b (a0)
beq DoConsole3.1
dbeq d0,Do2Console3
DoConsole3.1: clr.b (a3)+ ;was missing
Do2Console4: lib Exec,Enable
rts
LT_LOOPer: move.l LN_SUCC(a2),a2
LT_LOOP: tst.l LN_SUCC(a2)
beq LT_END
move.b LN_TYPE(a2),d0
cmp.b #NT_PROCESS,d0
bne LT_LOOPer ;Not even a process
move.l $8c(a2),CLINumBuf
beq LT_LOOPer ;Not a CLI process
rts
LT_END: move.l #$00,a2
rts
;Give it the cliprocess pointer in a2 (?)
LT_GetName: move.l $ac(a2),a0 ;change BPTR-APTR
add.l a0,a0
add.l a0,a0
move.l $10(a0),a0
add.l a0,a0
add.l a0,a0
rts
Format: lea.l fstrl1,a0 ;HEX->ASCII
lea.l Hours,a1 ;Start of information
lea.l PutChProc,a2
lea.l UpTimeText1,a3 ;Destination
lib Exec,RawDoFmt
rts
Format2: lea.l fstrl2,a0 ;HEX->ASCII
lea.l UserText1,a1 ;Start of information
lea.l PutChProc,a2
lea.l InfoOutText1,a3 ;Destination
lib Exec,RawDoFmt
rts
ShutDown: closlib Dos
ShutDown_Out: move.l #RETURN_OK,d0
rts
CmdLineHelp: lea.l UsageText1,a0
bsr Printer
bra ShutDown
Printer: printa a0
rts
PutChProc: tst.b d0
beq PutChProc_OUT
move.b d0,(a3)+
PutChProc_OUT: rts
;Structures & reservations
Hours: dc.w 0
Minutes: dc.w 0
UpDays: dc.l 0
DaysString: dc.l PluralString1
UpHours: dc.w 0
UpMinutes: dc.w 0
Users: dc.w 0
UsersString: dc.l PluralString1
PluralString1: dc.b 's,',0
SingleString1: dc.b ', ',0
UserText1: dc.l TTYUser
TTYText1: dc.l UpTimeTTY1
HoursText1: dc.w 0
MinutesText1: dc.w 0
ActionText1: dc.l ActionBuf
;Filenames
LoadAvgName: dc.b "ENV:UT_lo