X-Git-Url: http://www.lcore.org/git/lcore.git/blobdiff_plain/2f03297fba2a10dbc860018fac7ad07c83b08ce8..0ac6b47e810e6efaebcdbf3075b633e9b4109341:/ltimevalstuff.pas diff --git a/ltimevalstuff.pas b/ltimevalstuff.pas new file mode 100755 index 0000000..bf9767e --- /dev/null +++ b/ltimevalstuff.pas @@ -0,0 +1,74 @@ +{ Copyright (C) 2005 Bas Steendijk and Peter Green + For conditions of distribution and use, see copyright notice in zlib_license.txt + which is included in the package + ----------------------------------------------------------------------------- } + +unit ltimevalstuff; +interface + +{$ifdef win32} + type + ttimeval = record + tv_sec : longint; + tv_usec : longint; + end; +{$else} + {$ifdef ver1_0} + uses linux; + {$else} + uses baseunix,unix; + {$endif} +{$endif} + + +procedure tv_add(var tv:ttimeval;msec:integer); +function tv_compare(const tv1,tv2:ttimeval):boolean; +procedure tv_substract(var tv:ttimeval;const tv2:ttimeval); +procedure msectotimeval(var tv:ttimeval;msec:integer); + +//tv_invalidtimebig will always compare as greater than any valid timeval +//unfortunately unixstuff.inc hasn't worked it's magic yet so we +//have to ifdef this manually. +const + {$ifdef ver1_0} + tv_invalidtimebig : ttimeval = (sec:maxlongint;usec:maxlongint); + {$else} + tv_invalidtimebig : ttimeval = (tv_sec:maxlongint;tv_usec:maxlongint); + {$endif} +implementation + +{$i unixstuff.inc} + +{add nn msec to tv} +procedure tv_add(var tv:ttimeval;msec:integer); +begin + inc(tv.tv_usec,msec*1000); + inc(tv.tv_sec,tv.tv_usec div 1000000); + tv.tv_usec := tv.tv_usec mod 1000000; +end; + +{tv1 >= tv2} +function tv_compare(const tv1,tv2:ttimeval):boolean; +begin + if tv1.tv_sec = tv2.tv_sec then begin + result := tv1.tv_usec >= tv2.tv_usec; + end else result := tv1.tv_sec > tv2.tv_sec; +end; + +procedure tv_substract(var tv:ttimeval;const tv2:ttimeval); +begin + dec(tv.tv_usec,tv2.tv_usec); + if tv.tv_usec < 0 then begin + inc(tv.tv_usec,1000000); + dec(tv.tv_sec) + end; + dec(tv.tv_sec,tv2.tv_sec); +end; + +procedure msectotimeval(var tv:ttimeval;msec:integer); +begin + tv.tv_sec := msec div 1000; + tv.tv_usec := (msec mod 1000)*1000; +end; + +end. \ No newline at end of file