[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]