Files
Digital-Research-Source-Code/MPM OPERATING SYSTEMS/MPM-86/MISC DRI DISKS/07/TIMELOGY.CMD
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

208 lines
7.8 KiB
Batchfile
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* TIMELOGY.CMD *
* This command file follows TIMELOGX.CMD as they are called by the submit *
* file TIMELOG.SUB. It uses the info in WTMP.DBF to create TIMELOGX.DBF, *
* which contains all the data needed to print time accounting reports later. *
* User login times are matched to their corresponding logout times and the *
* elapsed time is calculated. This info may be added to previously logged *
* data or it may replace the previous info. This command file expects to *
* return control to the submit file and call TIMELOGZ.CMD subsequently. *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * *
* Written By Michael Burch * Copyright (C) G&G Engineering 1982 *
* For Gifford Computer Systems * Reproduction or modification of this *
* Date: November 17, 1982 * program, in whole or in part, only with *
* Last Revision: 04/12/83 * written permission from G&G Engineering *
* * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
SET TALK OFF
STORE ' ' TO choice
DO WHILE choice <> '1' .AND. choice <> '2'
ERASE
STORE ' ' TO choice
@ 5,5 SAY 'Would you like to:'
@ 7,5 SAY '1 = Add current log to previous log'
@ 8,9 SAY 'or'
@ 9,5 SAY '2 = Purge the previous log and keep only the current log'
@ 11,5 SAY 'Please choose 1 or 2 (Default is 1) ' GET choice PICTURE '9'
READ
IF choice = ' '
STORE '1' TO choice
ENDIF
ENDDO
@ 13,0 SAY 'Preparing login/logout data.'
@ 14,0 SAY 'Please stand by.'
SELECT PRIMARY
USE wtmp
STORE length TO len:wtmp
DELETE ALL FOR length > len:wtmp
PACK
COPY STRUCTURE TO wtmpx
SELECT SECONDARY
STORE 'timelogx' TO filename
IF choice = '2' .OR. (.NOT. FILE(filename))
USE timelog
COPY STRUCTURE TO timelogx
ENDIF
USE timelogx
INDEX ON mpm:day:o+tty+con TO timelogx
SET INDEX TO timelogx
SELECT PRIMARY
LOCATE FOR name <> ' '
STORE 0 TO openusers
DO WHILE .NOT. EOF
DO CASE
CASE name = 'Boot' .AND. openusers > 0
*
* This is the routine to replace all open accounts with the last recorded
* up time.
*
SKIP - 1
SELECT SECONDARY
STORE t TO found
DO WHILE found
FIND ' '
IF # = 0
STORE f TO found
ELSE
STORE t TO found
REPLACE mpm:day:o WITH mpm:day, hour:o WITH hour, min:o WITH min
REPLACE sec:o WITH sec, jday:o WITH jday, week:o WITH week
REPLACE month:o WITH month, day:o WITH day, year:o WITH year
STORE VAL(mpm:day:i) TO day:in
STORE VAL(mpm:day:o) TO day:out
STORE VAL(hour:i) TO hour:in
STORE VAL(hour:o) TO hour:out
STORE VAL(min:i) TO min:in
STORE VAL(min:o) TO min:out
STORE (((hour:in*60)+min:in)*60)+VAL(sec:i) TO sec:in
STORE (((hour:out*60)+min:out)*60)+VAL(sec:o) TO sec:out
IF sec:in > sec:out
STORE day:out-1 TO day:out
STORE sec:out+86400 TO sec:out
ENDIF
REPLACE total:sec WITH sec:out-sec:in+(day:out-day:in)*86400
REPLACE time:hr WITH STR(total:sec/3600,4)
REPLACE time:min WITH STR((total:sec-(VAL(time:hr)*3600))/60,2)
REPLACE time:sec WITH STR(total:sec-VAL(time:hr)*3600-VAL(time:min)*60,2)
STORE openusers-1 TO openusers
ENDIF
ENDDO
SELECT PRIMARY
CASE name = ' '
*
* This is the routine to match a user's logout time with his
* corresponding login time
*
SELECT SECONDARY
FIND ' '+p.tty+p.con
IF # <> 0
REPLACE mpm:day:o WITH mpm:day, hour:o WITH hour, min:o WITH min
REPLACE sec:o WITH sec, jday:o WITH jday, week:o WITH week
REPLACE month:o WITH month, day:o WITH day, year:o WITH year
STORE VAL(mpm:day:i) TO day:in
STORE VAL(mpm:day:o) TO day:out
STORE VAL(hour:i) TO hour:in
STORE VAL(hour:o) TO hour:out
STORE VAL(min:i) TO min:in
STORE VAL(min:o) TO min:out
STORE (((hour:in*60)+min:in)*60)+VAL(sec:i) TO sec:in
STORE (((hour:out*60)+min:out)*60)+VAL(sec:o) TO sec:out
IF sec:in > sec:out
STORE day:out-1 TO day:out
STORE sec:out+86400 TO sec:out
ENDIF
REPLACE total:sec WITH sec:out-sec:in+(day:out-day:in)*86400
REPLACE time:hr WITH STR(total:sec/3600,4)
REPLACE time:min WITH STR((total:sec-VAL(time:hr)*3600)/60,2)
REPLACE time:sec WITH STR(total:sec-VAL(time:hr)*3600-VAL(time:min)*60,2)
STORE openusers-1 TO openusers
ENDIF
SELECT PRIMARY
OTHERWISE
*
* This is the routine to add a user's login time
*
SELECT SECONDARY
APPEND BLANK
REPLACE s.tty WITH p.tty, s.name WITH p.name, s.con WITH p.con
REPLACE mpm:day:i WITH mpm:day,hour:i WITH hour, min:i WITH min
REPLACE sec:i WITH sec, jday:i WITH jday, week:i WITH week
REPLACE month:i WITH month, day:i WITH day, year:i WITH year
STORE openusers+1 TO openusers
SELECT PRIMARY
ENDCASE
SKIP
ENDDO
SELECT SECONDARY
SET INDEX TO
DELETE FILE timelogx.ndx
REPLACE ALL hour:i WITH '0'+$(hour:i,2,1) FOR $(hour:i,1,1) = ' '
REPLACE ALL min:i WITH '0'+$(min:i,2,1) FOR $(min:i,1,1) = ' '
REPLACE ALL sec:i WITH '0'+$(sec:i,2,1) FOR $(sec:i,1,1) = ' '
REPLACE ALL month:i WITH '0'+$(month:i,2,1) FOR $(month:i,1,1) = ' '
REPLACE ALL day:i WITH '0'+$(day:i,2,1) FOR $(day:i,1,1) = ' '
REPLACE ALL hour:o WITH '0'+$(hour:o,2,1) FOR $(hour:o,1,1) = ' '
REPLACE ALL min:o WITH '0'+$(min:o,2,1) FOR $(min:o,1,1) = ' '
REPLACE ALL sec:o WITH '0'+$(sec:o,2,1) FOR $(sec:o,1,1) = ' '
REPLACE ALL month:o WITH '0'+$(month:o,2,1) FOR $(month:o,1,1) = ' '
REPLACE ALL day:o WITH '0'+$(day:o,2,1) FOR $(day:o,1,1) = ' '
REPLACE ALL time:min WITH '0'+$(time:min,2,1) FOR $(time:min,1,1) = ' '
REPLACE ALL time:sec WITH '0'+$(time:sec,2,1) FOR $(time:sec,1,1) = ' '
STORE 1 TO num
IF openusers > 0
SELECT SECONDARY
GOTO TOP
COPY TO timelog FOR mpm:day:o = ' '
DELETE ALL FOR mpm:day:o = ' '
PACK
USE wtmpx
SELECT PRIMARY
USE timelog
DO WHILE .NOT. EOF
SELECT SECONDARY
APPEND BLANK
REPLACE s.tty WITH p.tty, s.name WITH p.name, s.con WITH p.con
REPLACE mpm:day WITH mpm:day:i, hour WITH hour:i, min WITH min:i
REPLACE sec WITH sec:i, jday WITH jday:i, week WITH week:i
REPLACE month WITH month:i, day WITH day:i, year WITH year:i
REPLACE length WITH STR(num,5)
SELECT PRIMARY
STORE num+1 TO num
SKIP
ENDDO
STORE num-1 TO num
ENDIF
SELECT SECONDARY
USE
SELECT PRIMARY
USE timelogx
COPY STRUCTURE TO timelog
INDEX ON name+con TO namecon
INDEX ON con+name TO conname
USE wtmpx
IF openusers = 0
APPEND BLANK
ENDIF
COPY STRUCTURE TO wtmp
USE wtmp
APPEND FROM wtmp. SDF
GOTO TOP
STORE length TO end
USE wtmpx
APPEND FROM wtmp. SDF FOR length > len:wtmp .AND. length <= end
COPY STRUCTURE TO wtmp
GOTO num
DO WHILE .NOT. EOF
REPLACE length WITH STR(num,5)
STORE num+1 TO num
SKIP
ENDDO
STORE num-1 TO num
GOTO TOP
REPLACE length WITH STR(num,5)
COPY TO wtmp. SDF
QUIT