[Back to TIMING SWAG index] [Back to Main SWAG index] [Original]
{
> Now what I want to do is calculate the total run-time of the overall
> event, from start to finish, i.e., parse the log file taking the last and
> first time entries and calculate the time. I'm sure there is an easier way
> to do this but I'm new to Pascal, and, open to suggestions. Below is what
> appears in the event.log :
}
Unit Timer;
{ SIMPLE TIMER 1.0
=================
This is a Timer unit, it calculates time by system clock. A few limitations
are:
1) Must not modify clock.
2) Must not time more than a day
3) Must StopTimer before displaying Time
Usage:
StartTimer; Starts Timer
StopTimer; Stops Timer
CalcTimer; Calculates time
DispTime: Displays time between StartTimer and StopTimer,
you don't need to call CalcTimer if you call DispTime.
This unit may be used in freeware and shareware programs as long as:
1) The program is a DECENT program, no "Adult" or "XXX" type programs
shall lawfully contain any code found within this file (modified or
in original form) or this file after it's been compiled.
2) This copyrighting is not added to, or removed from the program by
any other person other than I, the author.
This is copyrighted but may be used or modified in programs as long as the
above conditions are followed.
I may be reached at:
1:130/709 - Fidonet
Chris.Boyd@f709.n130.z1.fidonet.org - Internet
Alpha Zeta, Ft. Worth (817) 246-3058 - Bulletin Board
If you have any comments or suggestions (not complaints). I assume no
responsibility for anything resulting from the usage of this code.
-Chris Boyd
}
Interface
Uses
Dos;
Type
TimeStruct = record
Hour,
Minute,
Second,
S100 : Word;
End;
Var
StartT,
StopT,
TimeT : TimeStruct;
Stopped : Boolean;
procedure StartTimer;
procedure StopTimer;
procedure DispTime;
procedure CalcTimer;
Implementation
procedure TimerError(Err : Byte);
Begin
Case Err of
1 :
Begin
Writeln(' Error: Must Use StartTimer before StopTimer');
Halt(1);
End;
2 :
Begin
Writeln(' Error: Timer can not handle change of day');
Halt(2);
End;
3 :
Begin
Writeln(' Error: Internal - Must StopTimer before DispTime');
Halt(3);
End;
End;
End;
procedure CalcTimer;
Begin
If (Stopped = True) Then
Begin
If (StopT.Hour < StartT.Hour) Then
TimerError(2);
TimeT.Hour := StopT.Hour - StartT.Hour;
If (StopT.Minute < StartT.Minute) Then
Begin
TimeT.Hour := TimeT.Hour - 1;
StopT.Minute := StopT.Minute + 60;
End;
TimeT.Minute := StopT.Minute - StartT.Minute;
If (StopT.Second < StartT.Second) Then
Begin
TimeT.Minute := TimeT.Minute - 1;
StopT.Second := StopT.Second + 60;
End;
TimeT.Second := StopT.Second - StartT.Second;
If (StopT.S100 < StartT.S100) Then
Begin
TimeT.Second := TimeT.Second - 1;
StopT.S100 := StopT.S100 + 100;
End;
TimeT.S100 := StopT.S100 - StartT.S100;
End
Else
TimerError(3);
End;
procedure DispTime;
Begin
CalcTimer;
Write(' Time : ');
Write(TimeT.Hour);
Write(':');
If (TimeT.Minute < 10) Then
Write('0');
Write(TimeT.Minute);
Write(':');
If (TimeT.Second < 10) Then
Write('0');
Write(TimeT.Second);
Write('.');
If (TimeT.S100 < 10) Then
Write('0');
Writeln(TimeT.S100);
End;
procedure StartTimer;
Begin
GetTime(StartT.Hour, StartT.Minute, StartT.Second, StartT.S100);
Stopped := False;
End;
procedure StopTimer;
Begin
If (Stopped = False) Then
Begin
GetTime(StopT.Hour, StopT.Minute, StopT.Second, StopT.S100);
Stopped := TRUE;
End
Else
TimerError(1);
End;
End.
{
This is a unit that I wrote. It will not change day without calling an error
in itself. This can be modified though, I just haven't went about doing it.
For example, if you started the timer at 11:29 pm and stopped it at 1:00 am, it
wouldn't work, but if you started the timer at 12:00 am and stopped it at 11:59
pm in that same day it would work. The TimeStruct type doesn't store day, just
time and the only thing you have to do to use it is:
In your main program:
}
Program MyProg;
Uses
Timer;
Begin
{ Program stuff.... }
StartTimer;
{ More Program Stuff... }
StopTimer;
{ If you don't want to display the time to the screen, then you need to
call CalcTimer, so that it modifies TimeT}
DispTime; {Whenever you want to display the time.. The calculated time is
stored in the record variable Timer.TimeT, if you wanted to access it. All
the fields of the record a word in type. To access the hours for example,
you'd go like:
Timer.TimeT.Hour or TimeT.Hour
You probably will have to try both.}
End.
[Back to TIMING SWAG index] [Back to Main SWAG index] [Original]