IMPLEMENTATION MODULE Timing; (* * REPERTOIRE * Release 1.6 * By Charles Bradford and Cole Brecheen * (c) Copyright 1985-1992 PMI * Green Bay, Wisconsin * All rights reserved * (414) 468-6040 * * $Header: D:/logfiles/mods/timing.mov 1.7 10 Mar 1991 15:34:00 coleb $ * *) (*EntryDiag: IMPORT Diagnostics; :EntryDiag*) IMPORT EnvironUtils; IMPORT M2Strings; IMPORT StrConv; IMPORT StrEdit; IMPORT SYSTEM; IMPORT VWindows; VAR Initialized : BOOLEAN; PROCEDURE Init(); BEGIN IF Initialized THEN RETURN; ELSE Initialized := TRUE; END; (*EntryDiag: Diagnostics.Init(); :EntryDiag*) EnvironUtils.Init(); M2Strings.Init(); StrConv.Init(); StrEdit.Init(); VWindows.Init(); (*EntryDiag: Diagnostics.diagS( 'Entering Timing', '' ); :EntryDiag*) BeginTimer(); (*EntryDiag: Diagnostics.diagS( 'Exiting Timing', '' ); :EntryDiag*) END Init; VAR hours, minutes, seconds, hunds : CARDINAL; PROCEDURE BeginTimer(); VAR dumstr : ARRAY [0..80] OF CHAR; BEGIN EnvironUtils.GetTime(hours, minutes, seconds, hunds, dumstr); END BeginTimer; PROCEDURE ReadTimer(VAR hout, mout, sout, hunout : CARDINAL); VAR dumstr : ARRAY [0..20] OF CHAR; hused, mused, sused, hunused : INTEGER; BEGIN EnvironUtils.GetTime(hout, mout, sout, hunout, dumstr); hunused := INTEGER(hunout)-INTEGER(hunds); sused := INTEGER(sout)-INTEGER(seconds); mused := INTEGER(mout)-INTEGER(minutes); hused := INTEGER(hout)-INTEGER(hours); IF hunused<0 THEN INC( hunused, 100); DEC( sused); END; IF sused<0 THEN INC( sused, 60); DEC( mused); END; IF mused<0 THEN INC( mused, 60); DEC( hused); END; IF hused<0 THEN (* accounts for use through midnight; but does not handle use for longer than 24 hours *) INC( hused, 24); END; hunout := hunused; sout := sused; hout := hused; mout := mused; END ReadTimer; PROCEDURE ShowUsage(name : ARRAY OF CHAR); VAR h, m, s, hun : CARDINAL; dumstr : ARRAY [0..255] OF CHAR; numstr : ARRAY [0..10] OF CHAR; caption : ARRAY [0..31] OF CHAR; dumc : CARDINAL; BEGIN ReadTimer(h, m, s, hun); M2Strings.Concat('You have been using ', name, dumstr); StrEdit.Append(dumstr, ' for '); StrConv.CardinalToStr(h*60+m, 1, numstr); StrEdit.Append(dumstr, numstr); StrEdit.Append(dumstr, ' minute'); IF h+h+m#1 THEN StrEdit.Append(dumstr, 's'); END; StrEdit.Append(dumstr, ' and '); StrConv.CardinalToStr(s, 1, numstr); StrEdit.Append(dumstr, numstr); StrEdit.Append(dumstr, ' second'); IF s#1 THEN StrEdit.Append(dumstr, 's'); END; StrEdit.Append(dumstr, ' in this session.'); caption := 'Elapsed Time'; dumc := VWindows.MessageBox( VWindows.CurrentWindow, SYSTEM.ADR(dumstr), SYSTEM.ADR(caption), 0 ); END ShowUsage; BEGIN Initialized := FALSE; Init(); END Timing.