home *** CD-ROM | disk | FTP | other *** search
- UNIT Timer;
-
- { TIMER - Fine resolution timer functions }
-
- INTERFACE
- USES Crt,Dos;
- CONST
- TixSec = 18.20648193;
- TixMin = TixSec * 60.0;
- TixHour = TixMin * 60.0;
- TixDay = TixHour * 24.0;
- TYPE
- DiffType = String[16];
- VAR
- tGet : Longint ABSOLUTE $0040:$006C;
- FUNCTION tStart: Longint;
- FUNCTION tDiff(StartTime,EndTime: Longint) : Real;
- FUNCTION tFormat(T1,T2:Longint): DiffType;
- PROCEDURE GetTime(H,M,S,S100:Word);
-
- IMPLEMENTATION
-
- VAR
- TimeDiff : DiffType;
-
- { tStart - wait for a new tick, and return the
- tick number to the caller. The wait allows
- us to be sure the user gets a start at the
- beginning of the second. }
-
- FUNCTION tStart: Longint;
- VAR
- StartTime : Longint;
- BEGIN
- StartTime := tGet;
- WHILE StartTime = tGet DO;
- tStart := tGet
- END;
-
- { tDiff - compute the difference between two
- timepoints (in seconds). }
-
- FUNCTION tDiff(StartTime,EndTime: Longint) : Real;
- BEGIN
- tDiff := (EndTime-StartTime)/TixSec;
- END;
-
- PROCEDURE GetTime(H,M,S,S100:Word);
- VAR
- Regs : Registers;
- BEGIN
- Regs.AH := $2C;
- MsDos(Regs);
- H := Regs.CH;
- M := Regs.CL;
- S := Regs.DH;
- S100 := Regs.DL
- END;
-
- { tFormat - given two times, return a pointer
- to a (static) string that is the difference
- in the times, formatted HH:MM:SS }
-
- FUNCTION tFormat(T1,T2:Longint): DiffType;
-
- FUNCTION rMod(P1,P2: Real): Real;
- BEGIN
- rMod := Frac(P1/P2) * P2
- END;
-
- VAR
- Temp : Real;
- tStr : String;
- TempStr : String[2];
- TimeValue : ARRAY [1..4] OF Longint;
- I : Integer;
- BEGIN
- Temp := t2-t1; { Time diff. }
- {Adj midnight crossover}
- IF Temp < 0 THEN
- Temp := Temp + TixDay;
- TimeValue[1] := Trunc(Temp/TixHour); {hours}
- Temp := rMod(Temp,TixHour);
- TimeValue[2] := Trunc(Temp/TixMin); {minutes}
- Temp := rMod(Temp,TixMin);
- TimeValue[3] := Trunc(Temp/TixSec); {seconds}
- Temp := rMod(Temp,TixSec); {milliseconds}
- TimeValue[4] := Trunc(Temp*100.0/TixSec+0.5);
- STR(TimeValue[1]:2,tStr);
- IF tStr[1] = ' ' THEN tStr[1] := '0';
- FOR I := 2 TO 3 DO
- BEGIN
- STR(TimeValue[I]:2,TempStr);
- IF TempStr[1]=' ' THEN
- TempStr[1]:='0';
- tStr := tStr + ':'+ TempStr
- END;
- STR(TimeValue[4]:2,TempStr);
- IF TempStr[1]=' ' THEN TempStr[1]:='0';
- tStr := tStr + '.' + TempStr;
- tFormat := tStr
- END;
-
- END.