summaryrefslogtreecommitdiffstats
path: root/src/kvilib/system/kvi_time.cpp
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-02-24 02:13:59 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-02-24 02:13:59 +0000
commita6d58bb6052ac8cb01805a48c4ad2f129126116f (patch)
treedd867a099fcbb263a8009a9fb22695b87855dad6 /src/kvilib/system/kvi_time.cpp
downloadkvirc-a6d58bb6052ac8cb01805a48c4ad2f129126116f.tar.gz
kvirc-a6d58bb6052ac8cb01805a48c4ad2f129126116f.zip
Added KDE3 version of kvirc
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kvirc@1095341 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'src/kvilib/system/kvi_time.cpp')
-rw-r--r--src/kvilib/system/kvi_time.cpp135
1 files changed, 135 insertions, 0 deletions
diff --git a/src/kvilib/system/kvi_time.cpp b/src/kvilib/system/kvi_time.cpp
new file mode 100644
index 00000000..f500b7d4
--- /dev/null
+++ b/src/kvilib/system/kvi_time.cpp
@@ -0,0 +1,135 @@
+//=============================================================================
+//
+// File : kvi_time.cpp
+// Creation date : Tue Sep 25 17:35:13 2001 GMT by Szymon Stefanek
+//
+// This file is part of the KVirc irc client distribution
+// Copyright (C) 2001-2004 Szymon Stefanek (pragma at kvirc dot net)
+//
+// This program is FREE software. You can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your opinion) any later version.
+//
+// This program is distributed in the HOPE that it will be USEFUL,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+// See the GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, write to the Free Software Foundation,
+// Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
+//=============================================================================
+
+#define __KVILIB__
+
+
+#include "kvi_time.h"
+#include "kvi_qstring.h"
+#include "kvi_locale.h"
+
+#ifdef COMPILE_ON_WINDOWS
+ #include <windows.h> // GetSystemTime
+
+ // Call SystemTimeToFileTime to copy the system time to a FILETIME structure.
+ // Call GetSystemTime to get the current system time to pass to SystemTimeToFileTime.
+ // Copy the contents of the FILETIME structure to a ULARGE_INTEGER structure.
+ // Initialize a SYSTEMTIME structure with the date and time of the first second of January 1, 1970.
+ // Call SystemTimeToFileTime, passing the SYSTEMTIME structure initialized in Step 3 to the call.
+ // Copy the contents of the FILETIME structure returned by SystemTimeToFileTime in Step 4 to
+ // a second ULARGE_INTEGER. The copied value should be greater than or equal to the value copied
+ // in Step 2. Subtract the 64-bit value in the ULARGE_INTEGER structure initialized in Step 2
+ // from the 64-bit value of the ULARGE_INTEGER structure initialized in Step 5.
+ // This produces a value in 100-nanosecond intervals since January 1, 1970.
+ // To convert this value to seconds, divide by 10,000,000.
+
+ // buah buah buahhhh lol ghgh :DDDDDDDDD
+
+ void kvi_gettimeofday(struct timeval * tmv,struct timezone *)
+ {
+ SYSTEMTIME st;
+ GetSystemTime(&st);
+
+ // this is simply fucked up..
+ // to minimize the possibility of wrapping we use also the day field.
+ // we actually give something that is near the number of seconds from the beginning
+ // of the current month...
+ // We cannot use the wMonth field since the months have variable length :/
+ tmv->tv_sec = (st.wDay * 86400) + (st.wHour * 3600) + (st.wMinute * 60) + (st.wSecond);
+ tmv->tv_usec = st.wMilliseconds * 1000;
+ }
+#endif
+
+KviMSecTimeInterval::KviMSecTimeInterval()
+{
+ m_uReferenceSecs = 0;
+ m_uReferenceUSecs = 0;
+}
+
+
+unsigned long KviMSecTimeInterval::mark()
+{
+ struct timeval tmv;
+ kvi_gettimeofday(&tmv,0);
+ unsigned long uDiff = ((((unsigned long)(tmv.tv_sec)) - m_uReferenceSecs) * 1000);
+ if(((unsigned long)(tmv.tv_usec)) > m_uReferenceUSecs)uDiff += (((unsigned long)(tmv.tv_usec) - m_uReferenceUSecs) / 1000);
+ else uDiff -= ((m_uReferenceUSecs - (unsigned long)(tmv.tv_usec)) / 1000);
+ m_uReferenceSecs = (unsigned long)tmv.tv_sec;
+ m_uReferenceUSecs = (unsigned long)tmv.tv_usec;
+ return uDiff;
+}
+
+namespace KviTimeUtils
+{
+ void secondsToDaysHoursMinsSecs(unsigned int uSecs,
+ unsigned int * uD,unsigned int * uH,unsigned int * uM,unsigned int * uS)
+ {
+ *uD = uSecs / 86400;
+ uSecs = uSecs % 86400;
+ *uH = uSecs / 3600;
+ uSecs = uSecs % 3600;
+ *uM = uSecs / 60;
+ *uS = uSecs % 60;
+ }
+
+ QString formatTimeInterval(unsigned int uSeconds,int iFlags)
+ {
+ unsigned int d,h,m,s;
+ secondsToDaysHoursMinsSecs(uSeconds,&d,&h,&m,&s);
+ QString ret;
+ // the following tricks maybe will help translators a bit...
+ if(iFlags & FillWithHypens)
+ {
+ ret = __tr2qs("- d -- h -- m -- s");
+ } else {
+ if((iFlags & NoLeadingEmptyIntervals) && (d == 0))
+ {
+ if(h > 0)
+ {
+ if(iFlags & NoLeadingZeroes)
+ KviQString::sprintf(ret,__tr2qs("%u h %u m %u s"),h,m,s);
+ else
+ KviQString::sprintf(ret,__tr2qs("%u h %u%u m %u%u s"),h,m / 10,m % 10,s / 10,s % 10);
+ } else {
+ if(m > 0)
+ {
+ if(iFlags & NoLeadingZeroes)
+ KviQString::sprintf(ret,__tr2qs("%u m %u s"),m,s);
+ else
+ KviQString::sprintf(ret,__tr2qs("%u m %u%u s"),m,s / 10,s % 10);
+ } else {
+ KviQString::sprintf(ret,__tr2qs("%u s"),s);
+ }
+ }
+ } else {
+ if(iFlags & NoLeadingZeroes)
+ KviQString::sprintf(ret,__tr2qs("%u d %u h %u m %u s"),d,h,m,s);
+ else
+ KviQString::sprintf(ret,__tr2qs("%u d %u%u h %u%u m %u%u s"),d,h / 10,h % 10,m / 10,m % 10,s / 10,s % 10);
+ }
+ }
+ return ret;
+ }
+
+}