unixtoole changed to take input as float
[lcore.git] / btime.pas
old mode 100755 (executable)
new mode 100644 (file)
index 4636a9b..62b957d
--- a/btime.pas
+++ b/btime.pas
@@ -12,6 +12,11 @@ unit btime;
 \r
 interface\r
 \r
+{$ifdef win32}\r
+uses\r
+  ltimevalstuff;\r
+{$endif}  \r
+\r
 type\r
   float=extended;\r
 \r
@@ -48,13 +53,18 @@ function unixtimefloat_systemtime:float;
 \r
 function oletounixfloat(t:float):float;\r
 function oletounix(t:tdatetime):integer;\r
-function unixtoole(i:integer):tdatetime;\r
+function unixtoole(i:float):tdatetime;\r
 \r
 {$ifdef win32}\r
 function mmtimefloat:float;\r
 function qpctimefloat:float;\r
 {$endif}\r
 \r
+{$ifdef win32}\r
+procedure gettimeofday(var tv:ttimeval);\r
+{$endif}\r
+\r
+\r
 const\r
   mmtime_driftavgsize=32;\r
   mmtime_warmupnum=4;\r
@@ -96,7 +106,7 @@ uses
     {$ifdef VER1_0}\r
       linux,\r
     {$else}\r
-      baseunix,unix,unixutil, {needed for 2.0.2}\r
+      baseunix,unix,unixutil,sockets, {unixutil and sockets needed by unixstuff.inc on some compiler versions}\r
     {$endif}\r
   {$else}\r
     windows,unitsettc,mmsystem,\r
@@ -120,7 +130,7 @@ begin
   result := trunc(oletounixfloat(t));\r
 end;\r
 \r
-function unixtoole(i:integer):tdatetime;\r
+function unixtoole(i:float):tdatetime;\r
 begin\r
   result := ((i)/86400)+daysdifference;\r
 end;\r
@@ -169,6 +179,22 @@ end;
 {$else} {delphi 3}\r
 {------------------------------ windows/delphi code to read time}\r
 \r
+\r
+{simulate gettimeofday on windows so one can always use gettimeofday if preferred}\r
+\r
+procedure gettimeofday(var tv:ttimeval);\r
+var\r
+  e:extended;\r
+begin\r
+  e := unixtimefloat;\r
+  tv.tv_sec := round(int(e));\r
+  tv.tv_usec := trunc(frac(e)*1000000);\r
+  {just in case}\r
+  if (tv.tv_usec < 0) then tv.tv_usec := 0;\r
+  if (tv.tv_usec > 999999) then tv.tv_usec := 999999;\r
+end;\r
+\r
+\r
 {\r
 time float: gettickcount\r
 resolution: 9x: ~55 ms NT: 1/64th of a second\r