symport/symuser/exec.cpp
changeset 1 0a7b44b10206
child 2 806186ab5e14
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symport/symuser/exec.cpp	Thu Jun 25 15:59:54 2009 +0100
@@ -0,0 +1,151 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Symbian Foundation License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <string.h>
+
+#ifndef _WIN32
+#include <unistd.h>
+#else
+#include <windows.h>
+#endif
+
+#include "e32base.h"
+
+extern int gArgc;
+extern char **gArgv;
+
+// The exec class implements low level functionality needed by the TOOLS2 port
+// These are normally kernel executive calls
+class Exec
+	{
+	static TInt TimeNow(TInt64&, TInt&);
+	static TInt TimeNowSecure(TInt64&, TInt&);
+	static void DebugPrint(TAny* aPtr, TInt);
+	static TUint32 MathRandom();
+	static void ProcessCommandLine(TInt, TDes8&);
+	static TInt ProcessCommandLineLength(TInt);
+	static TUint TickCount();
+	static TUint32 NTickCount();
+	static void After(TInt, TRequestStatus&);
+	static void AfterHighRes(TInt, TRequestStatus&);
+	};
+
+// ***
+// after
+//
+
+void Exec::After(TInt aInterval, TRequestStatus&)
+	{
+#ifdef _WIN32
+	Sleep(aInterval/1000);
+#else
+	sleep(aInterval/1000000);
+#endif
+	}
+
+void Exec::AfterHighRes(TInt aInterval, TRequestStatus&)
+	{
+#ifdef _WIN32
+	Sleep(aInterval/1000);
+#else
+	sleep(aInterval/1000000);
+#endif
+	}
+
+// ***
+// tick
+//
+TUint Exec::TickCount()
+	{
+	return (TUint)clock();
+	}
+
+TUint32 Exec::NTickCount()
+	{
+	return (TUint32)clock();
+	}
+
+// ***
+// command line
+//
+void Exec::ProcessCommandLine(TInt, TDes8& aCmd)
+	{
+	TPtr16 aCommand16((TUint16*)aCmd.Ptr(),aCmd.MaxLength()>>1);
+	for(TInt i = 1; i < gArgc; i++)
+		{
+		if (i > 0)
+			aCommand16.Append(' ');
+
+		for(TUint s = 0; s < strlen(gArgv[i]); s++)
+			{
+			aCommand16.Append(gArgv[i][s]);
+			}
+		}
+	aCmd.SetLength(aCommand16.Length()<<1);
+	}
+
+TInt Exec::ProcessCommandLineLength(TInt)
+	{
+	TInt len = 0;
+	for(TInt i = 1; i < gArgc; i++)
+		{
+		if (i > 0)
+			len++;
+		len += strlen(gArgv[i]);
+		}
+	return len;
+	}
+
+// ***
+// debug
+//
+void Exec::DebugPrint(TAny* aPtr, TInt)
+	{
+	TPtr8* p = (TPtr8*)aPtr;
+	for(TInt i = 0; i < p->Length(); i++)
+		putchar((*p)[i]);
+
+	}
+
+// ***
+// rand
+//
+TUint32 Exec::MathRandom()
+	{
+	return rand();
+	}
+
+// ***
+// time
+//
+TInt Exec::TimeNow(TInt64& aUniversalTime, TInt& aUniversalTimeOffset)
+	{
+	aUniversalTimeOffset = 0;
+
+	time_t t = time(NULL);
+    struct tm *tm = gmtime(&t);
+    TTime tt = TDateTime(1900 + tm->tm_year, TMonth(tm->tm_mon), tm->tm_mday - 1, tm->tm_hour, tm->tm_min, tm->tm_sec, 0);
+    aUniversalTime = tt.Int64();
+
+    return KErrNone;
+	}
+
+TInt Exec::TimeNowSecure(TInt64& aUniversalTime, TInt& aUniversalTimeOffset)
+	{
+	return Exec::TimeNow(aUniversalTime, aUniversalTimeOffset);
+	}