{ SB> Has anyone by any chance written a Procedure For calculating the amount SB> of time a Program runs. I understand how to use getTime, etc, but I am SB> trying to figure out a way around all the possibilities...i.e. someone SB> starts a Program at 23:59:03.44, and it's finished at 00:02:05.33. SB> SB> Anyway, if someone already has this figured out, I'd sure appreciate it SB> or even some ideas... Scott, try: Var Timer : LongInt Absolute $0040:$006c; That's the Tic counter, stored at Segment 0040h, offset 006Ch. It stores the number of ticks since you turned the Computer on and so will only wrap after MorE THAN 3 YEARS, if you never close the machine ;-) it is incremented 18.2 times/sec, so divide it by 18.2 to get the number of seconds. You can figure out the rest ;-) Store its content to another LongInt at the start of the Program, again at the end. Substract the first value from the second and you have the number of ticks elapsed during the Program's execution. Oh what the heck, here is a Complete Unit, all you have to do is include it in your Uses clause nothing more unless you want to save the time in a log File or something. } {$A+,B-,D+,E-,F+,G+,I-,L+,N-,O+,P+,Q-,R-,S-,T-,V-,X+,Y+} {$M 8192,0,0} Unit TimePrg; (**) Interface (**) (**) Implementation (**) Uses Dos; Type CmdLine = String[127]; Var TimerTicks : LongInt Absolute $0040:$006C; OldCommandLine, NewCommandline : CmdLine; CommandLine : ^CmdLine; TimeIn, TimeOut, Spent : LongInt; Years, Days, Hours, Minutes, Seconds, ms : Byte; ExitBeForeTimePrg : Pointer; D : DirStr; N : NameStr; E : ExtStr; Index : Integer; Function Strfunc(Value:Byte):String; Var temp : String; begin Str(Value:0, Temp); StrFunc := #32+temp; end; Procedure TimePrgExit; Far; begin TimeOut := TimerTicks; ExitProc := ExitBeForeTimePrg; Spent := TimeOut - TimeIn; ms := (Spent - trunc(Spent / 18.2))*55; Spent := Trunc(Spent / 18.2); Years := Spent div (3600*24*365); Spent := Spent mod (3600*24*365); Days := Spent div (3600*24); Spent := Spent mod (3600*24); Hours := Spent div 3600; Spent := Spent mod 3600; Minutes := Spent div 60; Spent := Spent mod 60; Seconds := Spent; CommandLine := Ptr(PrefixSeg, $80); OldCommandLine := CommandLine^; NewCommandLine := ''; if Years>0 then NewCommandLine := NewCommandLine + Strfunc(Years) + ' Years'; if Days>0 then NewCommandLine := NewCommandLine + Strfunc(Days) + ' Days'; if Hours>0 then NewCommandLine := NewCommandLine + Strfunc(Hours) + ' Hours'; if Minutes>0 then NewCommandLine := NewCommandLine + Strfunc(Minutes) + ' Minutes'; if Seconds>0 then NewCommandLine := NewCommandLine + Strfunc(Seconds) + ' Seconds'; if ms>0 then NewCommandLine := NewCommandLine + Strfunc(ms) + ' milli-seconds'; CommandLine^ := NewCommandLine; Write('Thanks For spending '); Case Paramcount of 0: Write('so little time'); 2: Write(ParamStr(1),#32, Paramstr(2)); else For Index := 1 to ParamCount - 3 do begin Write(Paramstr(Index)); if odd(Index) then Write(' ') else Write(', '); end; Write(Paramstr(Index+1), ' and ', Paramstr(Index+2), ' ', Paramstr(Index+3)); end; CommandLine^ := OldCommandLine; Fsplit(Paramstr(0), D, N, E); Writeln(' In ', N); end; begin TimeIn := TimerTicks; ExitBeForeTimePrg := ExitProc; ExitProc := @TimePrgExit; end.