tdnsstatearr declaration is needed outside syncdns code
[lcore.git] / ltimevalstuff.pas
1 { Copyright (C) 2005 Bas Steendijk and Peter Green\r
2   For conditions of distribution and use, see copyright notice in zlib_license.txt\r
3   which is included in the package\r
4   ----------------------------------------------------------------------------- }\r
5 \r
6 {$ifdef fpc}\r
7   {$mode delphi}\r
8 {$endif}\r
9 \r
10 unit ltimevalstuff;\r
11 interface\r
12 \r
13 {$ifdef win32}\r
14   type\r
15     ttimeval = record\r
16       tv_sec : longint; \r
17       tv_usec : longint; \r
18     end;\r
19 {$else}\r
20   {$ifdef ver1_0}\r
21     uses linux;\r
22   {$else}\r
23     uses baseunix,unix,unixutil,sockets;\r
24   {$endif}\r
25 {$endif}\r
26                                 \r
27 \r
28 procedure tv_add(var tv:ttimeval;msec:integer);\r
29 function tv_compare(const tv1,tv2:ttimeval):boolean;\r
30 procedure tv_substract(var tv:ttimeval;const tv2:ttimeval);\r
31 procedure msectotimeval(var tv:ttimeval;msec:integer);\r
32 \r
33 //tv_invalidtimebig will always compare as greater than any valid timeval\r
34 //unfortunately unixstuff.inc hasn't worked it's magic yet so we\r
35 //have to ifdef this manually.\r
36 const\r
37   {$ifdef ver1_0}\r
38     tv_invalidtimebig : ttimeval = (sec:maxlongint;usec:maxlongint);\r
39   {$else}\r
40     tv_invalidtimebig : ttimeval = (tv_sec:maxlongint;tv_usec:maxlongint);\r
41   {$endif}\r
42 implementation\r
43 \r
44 {$i unixstuff.inc}\r
45 \r
46 {add nn msec to tv}\r
47 procedure tv_add(var tv:ttimeval;msec:integer);\r
48 begin\r
49   inc(tv.tv_usec,msec*1000);\r
50   inc(tv.tv_sec,tv.tv_usec div 1000000);\r
51   tv.tv_usec := tv.tv_usec mod 1000000;\r
52 end;\r
53 \r
54 {tv1 >= tv2}\r
55 function tv_compare(const tv1,tv2:ttimeval):boolean;\r
56 begin\r
57   if tv1.tv_sec = tv2.tv_sec then begin\r
58     result := tv1.tv_usec >= tv2.tv_usec;\r
59   end else result := tv1.tv_sec > tv2.tv_sec;\r
60 end;\r
61 \r
62 procedure tv_substract(var tv:ttimeval;const tv2:ttimeval);\r
63 begin\r
64   dec(tv.tv_usec,tv2.tv_usec);\r
65   if tv.tv_usec < 0 then begin\r
66     inc(tv.tv_usec,1000000);\r
67     dec(tv.tv_sec)\r
68   end;\r
69   dec(tv.tv_sec,tv2.tv_sec);\r
70 end;\r
71 \r
72 procedure msectotimeval(var tv:ttimeval;msec:integer);\r
73 begin\r
74   tv.tv_sec := msec div 1000;\r
75   tv.tv_usec := (msec mod 1000)*1000;\r
76 end;\r
77 \r
78 end.