Contributor: SWAG SUPPORT TEAM 
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ドル:006ドルC;
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 := 2ドルC;
 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.
 

AltStyle によって変換されたページ (->オリジナル) /