]> git.saurik.com Git - wxWidgets.git/blobdiff - src/palmos/utils.cpp
fixing osx_carbon
[wxWidgets.git] / src / palmos / utils.cpp
index 67fb7c304b4b579ea9262656efffe3e669f996f2..d52e90fb352bf56d224999f7845b2de5024b8c8f 100644 (file)
@@ -1,11 +1,11 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        palmos/utils.cpp
+// Name:        src/palmos/utils.cpp
 // Purpose:     Various utilities
-// Author:      William Osborne
-// Modified by:
+// Author:      William Osborne - minimal working wxPalmOS port
+// Modified by: Wlodzimierz ABX Skiba - real functionality
 // Created:     10/13/04
-// RCS-ID:      $Id
-// Copyright:   (c) William Osborne
+// RCS-ID:      $Id$
+// Copyright:   (c) William Osborne, Wlodzimierz Skiba
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
     #include "wx/app.h"
     #include "wx/intl.h"
     #include "wx/log.h"
+    #include "wx/timer.h"
 #endif  //WX_PRECOMP
 
 #include "wx/apptrait.h"
 #include "wx/dynload.h"
-
-#include "wx/confbase.h"        // for wxExpandEnvVars()
-
-#include "wx/timer.h"
-
-// VZ: there is some code using NetXXX() functions to get the full user name:
-//     I don't think it's a good idea because they don't work under Win95 and
-//     seem to return the same as wxGetUserId() under NT. If you really want
-//     to use them, just #define USE_NET_API
-#undef USE_NET_API
-
-#ifdef USE_NET_API
-    #include <lm.h>
-#endif // USE_NET_API
-
-// ----------------------------------------------------------------------------
-// constants
-// ----------------------------------------------------------------------------
-
-// In the WIN.INI file
-static const wxChar WX_SECTION[] = wxT("wxWindows");
-static const wxChar eUSERNAME[]  = wxT("UserName");
+#include "wx/confbase.h"
+#include "wx/power.h"
+
+#include <PalmTypes.h>
+#include <MemoryMgr.h>
+#include <DLServer.h>
+#include <SoundMgr.h>
+#include <SystemMgr.h> // SysDoze()...
+#include <SysUtils.h>
+
+#ifdef __WXPALMOS6__
+extern void SysReset (void);
+extern UInt32 SysTaskID (void);
+#endif
 
 // ============================================================================
 // implementation
@@ -79,31 +72,53 @@ bool wxGetFullHostName(wxChar *buf, int maxSize)
 // Get user ID e.g. jacs
 bool wxGetUserId(wxChar *buf, int maxSize)
 {
-    return false;
+    return wxGetUserName(buf, maxSize);
 }
 
 // Get user name e.g. Julian Smart
 bool wxGetUserName(wxChar *buf, int maxSize)
 {
-    return false;
-}
+    *buf = wxT('\0');
 
-const wxChar* wxGetHomeDir(wxString *pstr)
-{
-    return NULL;
+    // buffer allocation
+    MemHandle handle = MemHandleNew(maxSize-1);
+    if( handle == NULL )
+        return false;
+
+    // lock the buffer
+    char *id = (char *)MemHandleLock(handle);
+    if( id == NULL )
+        return false;
+
+    // get user's name
+    if( DlkGetSyncInfo(NULL, NULL, NULL, id, NULL, NULL) != errNone )
+    {
+        MemPtrUnlock(id);
+        return false;
+    }
+
+    wxStrlcpy(buf, wxSafeConvertMB2WX(id), maxSize);
+
+    // free the buffer
+    MemPtrUnlock(id);
+
+    return true;
 }
 
-wxChar *wxGetUserHome(const wxString& WXUNUSED(user))
+const wxChar* wxGetHomeDir(wxString *pstr)
 {
-    return NULL;
+    if (NULL != pstr) {
+        *pstr = "/palmos";
+    }
+    return wxT("/palmos");
 }
 
-bool wxDirExists(const wxString& dir)
+wxString wxGetUserHome(const wxString& WXUNUSED(user))
 {
-    return false;
+    return wxString("/palmos");
 }
 
-bool wxGetDiskSpace(const wxString& path, wxLongLong *pTotal, wxLongLong *pFree)
+bool wxGetDiskSpace(const wxString& path, wxDiskspaceSize_t *pTotal, wxDiskspaceSize_t *pFree)
 {
     return false;
 }
@@ -117,17 +132,23 @@ bool wxGetEnv(const wxString& var, wxString *value)
     return false;
 }
 
+#if ! WXWIN_COMPATIBILITY_2_8
 bool wxSetEnv(const wxString& var, const wxChar *value)
 {
     return false;
 }
+#endif // ! WXWIN_COMPATIBILITY_2_8
+
+bool wxUnsetEnv(const wxString& var)
+{
+    return false;
+}
 
 // ----------------------------------------------------------------------------
 // process management
 // ----------------------------------------------------------------------------
 
-// structure used to pass parameters from wxKill() to wxEnumFindByPidProc()
-int wxKill(long pid, wxSignal sig, wxKillError *krc)
+int wxKill(long pid, wxSignal sig, wxKillError *krc, int flags)
 {
     return 0;
 }
@@ -141,41 +162,117 @@ bool wxShell(const wxString& command)
 // Shutdown or reboot the PC
 bool wxShutdown(wxShutdownFlags wFlags)
 {
+    switch (wFlags) {
+    case wxSHUTDOWN_POWEROFF:
+        // TODO: turn off lamps
+#ifdef __WXPALMOS6__
+        //extern void SysReset (void);
+        //extern UInt32 SysTaskID (void);
+        #define SysReset()
+        #define SysTaskID() (0)
+        SysSleep ();
+#else
+        //SysSleep (false, false);// undocument API
+        SysDoze (true);
+#endif
+        break;
+    case wxSHUTDOWN_REBOOT:
+        SysReset ();
+        break;
+    }
     return false;
 }
 
+// ----------------------------------------------------------------------------
+// power management
+// ----------------------------------------------------------------------------
+
+wxPowerType wxGetPowerType()
+{
+    //SysBatteryKind kind;
+    //POS_SysBatteryInfo (false, NULL, NULL, NULL, NULL, NULL, &kind, NULL);
+     //return wxPOWER_SOCKET;
+    return wxPOWER_BATTERY;
+}
+
+wxBatteryState wxGetBatteryState()
+{
+    //#include "SystemMgr.h"
+    UInt8 percent;
+    POS_SysBatteryInfo (false, NULL, NULL, NULL, NULL, NULL, NULL, &percent);
+    if (percent < 3)
+        return wxBATTERY_SHUTDOWN_STATE;
+    else if (percent < 5)
+        return wxBATTERY_CRITICAL_STATE;
+    else if (percent < 15)
+        return wxBATTERY_LOW_STATE;
+    //return wxBATTERY_UNKNOWN_STATE;
+    return wxBATTERY_NORMAL_STATE;
+}
+
 // ----------------------------------------------------------------------------
 // misc
 // ----------------------------------------------------------------------------
 
 // Get free memory in bytes, or -1 if cannot determine amount (e.g. on UNIX)
-long wxGetFreeMemory()
+wxMemorySize wxGetFreeMemory()
 {
-    return 0;
+    uint32_t freeTotal = 0;
+    uint32_t freeHeap;
+    uint32_t freeChunk;
+
+    // executed twice: for the dynamic heap, and for the non-secure RAM storage heap
+    for ( uint16_t i = 0; i < POS_MemNumRAMHeaps(); i ++)
+    {
+        status_t err = MemHeapFreeBytes(i, &freeHeap, &freeChunk);
+        if( err != errNone )
+            return -1;
+        freeTotal+=freeHeap;
+    }
+
+    return (wxMemorySize)freeTotal;
 }
 
 unsigned long wxGetProcessId()
 {
-    return 0;
+    return SysTaskID ();
 }
 
 // Emit a beeeeeep
 void wxBell()
 {
+    SndPlaySystemSound(sndWarning);
 }
 
-wxString wxGetOsDescription()
+bool wxIsPlatform64Bit()
 {
-    wxString str;
+    return false;
+}
 
-    return str;
+wxString wxGetOsDescription()
+{
+    wxString strOS = wxT("PalmOS");
+
+    //err = FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion);
+    //if (romVersion >= 0x02000000) v20 = true;
+    char *version = SysGetOSVersionString();
+    if(version)
+    {
+        wxString str = wxString::FromAscii(version);
+        MemPtrFree(version);
+        if(!str.empty())
+        {
+            strOS << _(" ") << str;
+        }
+    }
+
+    return strOS;
 }
 
-wxToolkitInfo& wxAppTraits::GetToolkitInfo()
+wxOperatingSystemId wxGetOsVersion(int *verMaj, int *verMin)
 {
-    static wxToolkitInfo info;
-    info.name = _T("wxBase");
-    return info;
+    // TODO
+    return wxOS_PALM_OS;
 }
 
 // ----------------------------------------------------------------------------
@@ -184,14 +281,35 @@ wxToolkitInfo& wxAppTraits::GetToolkitInfo()
 
 void wxMilliSleep(unsigned long milliseconds)
 {
+    UInt16 ticks_sec;
+    Int32 delay;
+    ticks_sec = SysTicksPerSecond ();
+    delay = milliseconds * ticks_sec / 1000;
+    if (delay > 0) {
+        SysTaskDelay (delay);
+    }
 }
 
 void wxMicroSleep(unsigned long microseconds)
 {
+    UInt16 ticks_sec;
+    Int32 delay;
+    ticks_sec = SysTicksPerSecond ();
+    delay = microseconds * ticks_sec / 1000000;
+    if (delay > 0) {
+        SysTaskDelay (delay);
+    }
 }
 
 void wxSleep(int nSecs)
 {
+    UInt16 ticks_sec;
+    Int32 delay;
+    ticks_sec = SysTicksPerSecond ();
+    delay = nSecs * ticks_sec;
+    if (delay > 0) {
+        SysTaskDelay (delay);
+    }
 }
 
 // ----------------------------------------------------------------------------
@@ -223,8 +341,6 @@ extern long wxCharsetToCodepage(const wxChar *name)
 
 #else // !wxUSE_FONTMAP
 
-#include "wx/palmos/registry.h"
-
 // this should work if Internet Exploiter is installed
 extern long wxCharsetToCodepage(const wxChar *name)
 {
@@ -232,4 +348,3 @@ extern long wxCharsetToCodepage(const wxChar *name)
 }
 
 #endif // wxUSE_FONTMAP/!wxUSE_FONTMAP
-