]> git.saurik.com Git - wxWidgets.git/blobdiff - src/palmos/stdall.c
PalmOS 6 compilation fixes (patch 1849757)
[wxWidgets.git] / src / palmos / stdall.c
diff --git a/src/palmos/stdall.c b/src/palmos/stdall.c
new file mode 100644 (file)
index 0000000..c4a0d05
--- /dev/null
@@ -0,0 +1,360 @@
+
+#include <Preferences.h> // Core/System/
+#include <DateTime.h> //Core/System/, DateToAscii() etc.
+#include <TimeMgr.h> //Core/System/, TimGetTicks()
+
+#include "wx/defs.h"
+
+#if __WXPALMOS6__
+void
+exit (int exitno)
+{
+}
+
+#else
+
+#define SEC_1904_1970 2082844800LU//0x7C25B080 // 0x7C25B080 == 2082844800LU
+
+time_t
+time (time_t *T)
+{
+    UInt32 sec;
+    // UInt32 TimGetSeconds(void); // seconds since 1/1/1904
+    // void TimSetSeconds (UInt32 seconds); // seconds since 1/1/1904
+    // UInt32 TimGetTicks(void); // ticks since power on
+    sec = TimGetSeconds ();
+    if (T) {
+        *T = sec - SEC_1904_1970;
+    }
+    return (sec - SEC_1904_1970);
+}
+
+static struct tm *
+palmtimet2unixtm (const time_t t, struct tm *ptm)
+{
+    DateTimeType dt;
+    memset (&dt, 0, sizeof (dt));
+    memset (ptm, 0, sizeof (*ptm));
+    TimSecondsToDateTime (t, &dt);
+    ptm->tm_sec  = dt.second;
+    ptm->tm_min  = dt.minute;
+    ptm->tm_hour = dt.hour;
+    ptm->tm_mday = dt.day;
+    ptm->tm_mon  = dt.month;
+    ptm->tm_year = dt.year;
+    ptm->tm_wday = dt.weekDay;
+
+    //ptm->tm_wday = DayOfWeek (dt.month, dt.day, dt.year);
+    //ptm->tm_mday = DayOfMonth (dt.month, dt.day, dt.year);
+    return ptm;
+}
+
+struct tm *
+gmtime_r (const time_t *pt, struct tm *ptm)
+{
+    UInt32 utcTime;
+    Int16 timeZone = PrefGetPreference(prefTimeZone);
+    Int16 daylightSavingAdjustment = PrefGetPreference(prefDaylightSavingAdjustment);
+
+    if ((NULL == pt) || (NULL == ptm)) {
+        return NULL;
+    }
+    utcTime = TimTimeZoneToUTC (*pt + SEC_1904_1970, timeZone, daylightSavingAdjustment);
+    palmtimet2unixtm (utcTime, ptm);
+    return ptm;
+}
+
+struct tm *
+localtime_r (const time_t *pt, struct tm *ptm)
+{
+    UInt32 utcTime;
+    Int16 timeZone = PrefGetPreference(prefTimeZone);
+    Int16 daylightSavingAdjustment = PrefGetPreference(prefDaylightSavingAdjustment);
+    if ((NULL == pt) || (NULL == ptm)) {
+        return NULL;
+    }
+    utcTime = TimUTCToTimeZone (*pt + SEC_1904_1970, timeZone, daylightSavingAdjustment);
+    palmtimet2unixtm (utcTime, ptm);
+    return ptm;
+}
+/*
+static struct tm g_gmtime_info;
+
+struct tm *
+gmtime (const time_t *CLOCK)
+{
+    if (NULL == CLOCK) {
+        return NULL;
+    }
+    if (NULL == gmtime_r (CLOCK, &g_gmtime_info)) {
+        return NULL;
+    }
+    return &g_gmtime_info;
+}
+*/
+static struct tm g_localtime_info;
+
+struct tm *
+localtime (const time_t *CLOCK)
+{
+    if (NULL == CLOCK) {
+        return NULL;
+    }
+    if (NULL == localtime_r (CLOCK, &g_localtime_info)) {
+        return NULL;
+    }
+    return &g_localtime_info;
+}
+
+static char * g_strftime_wdayconv[][2] = {
+    {"Sun", "Sunday"},
+    {"Mon", "Monday"},
+    {"Tue", "Tuesday"},
+    {"Wed", "Wednesday"},
+    {"Thu", "Thursday"},
+    {"Fri", "Friday"},
+    {"Sat", "Saturday"},
+};
+
+static char * g_strftime_monconv[][2] = {
+    {"Jan", "January"},
+    {"Feb", "Febuary"},
+    {"Mar", "March"},
+    {"Apr", "April"},
+    {"May", "May"},
+    {"Jun", "June"},
+    {"Jul", "July"},
+    {"Aug", "August"},
+    {"Sep", "September"},
+    {"Oct", "October"},
+    {"Nov", "November"},
+    {"Dec", "December"},
+};
+#define SFCONV_ABBR 0
+#define SFCONV_FULL 1
+
+size_t
+strftime (char *buf, size_t sz_buf, const char *fmt, const struct tm *ptm)
+{
+    char *p;
+    char *pret;
+    if ((timeStringLength > sz_buf) || (strlen (fmt) < 1)) {
+        return 0;
+    }
+    memset (buf, 0, sz_buf);
+    p = fmt;
+    pret = buf;
+    for (; *p != '\0';) {
+        if ('%' == *p) {
+            p ++;
+            if (*p == '\0') {
+                break;
+            }
+            // FIXME: Åжϻº³åÊÇ·ñÒç³ö
+            switch (*p) {
+            case 'a':
+                strcpy (pret, g_strftime_wdayconv[ptm->tm_wday % 7][SFCONV_ABBR]);
+                pret += 3;
+                break;
+            case 'A':
+                strcpy (pret, g_strftime_wdayconv[ptm->tm_wday % 7][SFCONV_FULL]);
+                pret += strlen (g_strftime_wdayconv[ptm->tm_wday % 7][SFCONV_FULL]);
+                break;
+            case 'b':
+                strcpy (pret, g_strftime_monconv[ptm->tm_mon % 12][SFCONV_ABBR]);
+                pret += 3;
+                break;
+            case 'B':
+                strcpy (pret, g_strftime_monconv[ptm->tm_mon % 12][SFCONV_FULL]);
+                pret += strlen (g_strftime_monconv[ptm->tm_mon % 12][SFCONV_FULL]);
+                break;
+            case 'c':
+                strcpy (pret, g_strftime_wdayconv[ptm->tm_wday % 7][SFCONV_ABBR]);
+                pret += 3;
+                *pret = ' ';
+                pret ++;
+                strcpy (pret, g_strftime_monconv[ptm->tm_mon % 12][SFCONV_ABBR]);
+                pret += 3;
+                *pret = ' ';
+                pret ++;
+                sprintf (pret, "%d %02d:%02d:%02d %d", ptm->tm_mday,
+                    ptm->tm_hour, ptm->tm_min, ptm->tm_sec, ptm->tm_year);
+                pret += strlen (pret);
+                break;
+            case 'd':
+                sprintf (pret, "%02d", ptm->tm_mday % 31);
+                pret += 2;
+                break;
+            case 'H':
+                sprintf (pret, "%02d", ptm->tm_hour % 24);
+                pret += 2;
+                break;
+            case 'I':
+                sprintf (pret, "%02d", (ptm->tm_hour % 12) + 1);
+                pret += 2;
+                break;
+            case 'j':
+                sprintf (pret, "%03d", ptm->tm_year % 400);
+                pret += 3;
+                break;
+            case 'm':
+                sprintf (pret, "%02d", (ptm->tm_mon % 12) + 1);
+                pret += 2;
+                break;
+            case 'M':
+                sprintf (pret, "%02d", ptm->tm_min % 60);
+                pret += 2;
+                break;
+            case 'p':
+                if (ptm->tm_hour > 12) {
+                    strcpy (pret, "PM");
+                    break;
+                }
+                strcpy (pret, "AM");
+                pret += 2;
+                break;
+            case 'S':
+                sprintf (pret, "%02d", ptm->tm_sec % 61);
+                pret += 2;
+                break;
+            case 'U':
+                // FIXME: Week number with the first Sunday as the first day of week one (00-53)
+                sprintf (pret, "%02d", ptm->tm_yday / 7);
+                pret += 2;
+                break;
+            case 'w':
+                sprintf (pret, "%d", ptm->tm_wday % 7);
+                pret += 1;
+                break;
+            case 'W':
+                // FIXME: Week number with the first Sunday as the first day of week one (00-53)
+                sprintf (pret, "%02d", ptm->tm_yday / 7);
+                pret += 2;
+                break;
+            case 'x':
+                sprintf (pret, "%02d/%02d/%02d",
+                    ptm->tm_mon, ptm->tm_mday, ptm->tm_year - 1900);
+                pret += strlen (pret);
+                break;
+            case 'X':
+                sprintf (pret, "%02d:%02d:%02d",
+                    ptm->tm_hour, ptm->tm_min, ptm->tm_sec);
+                pret += strlen (pret);
+                break;
+            case 'y':
+                sprintf (pret, "%02d", ptm->tm_year - 1900);
+                pret += 2;
+                break;
+            case 'Y':
+                sprintf (pret, "%02d", ptm->tm_year);
+                pret += strlen (pret);
+                break;
+            case 'Z':
+            {
+                LmLocaleType ll;
+                ll.language = lmAnyLanguage;
+                ll.country = 0;
+                TimeZoneToAscii (ptm->tm_gmtoff, &ll, pret);
+            }
+                pret += strlen (pret);
+                break;
+            case '%':
+                *pret = *p;
+                pret ++;
+                break;
+            }
+        } else {
+            *pret = *p;
+            pret ++;
+        }
+        p ++;
+    }
+    return 0;
+}
+
+time_t
+mktime (struct tm *ptm)
+{
+    DateTimeType dt;
+    if (NULL == ptm) {
+        return 0;
+    }
+    memset (&dt, 0, sizeof (dt));
+    dt.second  = ptm->tm_sec;
+    dt.minute  = ptm->tm_min;
+    dt.hour    = ptm->tm_hour;
+    dt.day     = ptm->tm_mday;
+    dt.month   = ptm->tm_mon;
+    dt.year    = ptm->tm_year;
+    dt.weekDay = ptm->tm_wday;
+    return TimDateTimeToSeconds (&dt);
+}
+
+int
+vsscanf (const char *s, const char *format, va_list param)
+{
+    return -1;
+}
+
+FILE * fopen (const char *_name, const char *_type) {return NULL;}
+int fclose (FILE *fp) {return 0;}
+size_t fread (void *buf, size_t _size, size_t _n, FILE *fp) {return 0;}
+size_t fwrite (const void *buf , size_t _size, size_t _n, FILE *fp) {return 0;}
+int fseek (FILE *fp, long offset, int whence) {return -1;}
+long ftell (FILE *fp) {return -1;}
+int feof (FILE *fp) {return -1;}
+int ferror (FILE *fp) {return -1;}
+void clearerr (FILE *fp) {}
+
+#endif // __WXPALMOS6__
+
+#define _BIT_ALPHA  0X0001
+#define _BIT_BLANK  0X0002
+#define _BIT_CNTRL  0X0004
+#define _BIT_DIGIT  0X0008
+#define _BIT_GRAPH  0X0010
+#define _BIT_LOWER  0X0020
+#define _BIT_PRINT  0X0040
+#define _BIT_PUNCT  0X0080
+#define _BIT_SPACE  0X0100
+#define _BIT_UPPER  0X0200
+#define _BIT_XDIGIT 0X0400
+
+int iswalnum(wint_t C) {return 0;}
+int iswalpha(wint_t C) {return 0;}
+int iswcntrl(wint_t C) {return 0;}
+int iswdigit(wint_t C) {return 0;}
+int iswgraph(wint_t C) {return 0;}
+int iswlower(wint_t C) {return 0;}
+int iswprint(wint_t C) {return 0;}
+int iswpunct(wint_t C) {return 0;}
+int iswspace(wint_t C) {return 0;}
+int iswupper(wint_t C) {return 0;}
+int iswxdigit(wint_t C) {return 0;}
+
+wint_t towlower(wint_t C) {return 0;}
+wint_t towupper(wint_t C) {return 0;}
+size_t wcsftime(wchar_t *strDest, size_t maxsize, const wchar_t *format, const struct tm *timeptr) {return 0;}
+
+size_t wcslen (const wchar_t * str) {return 0;}
+wchar_t * wcscpy (wchar_t * dst, const wchar_t * src) {return NULL;}
+wchar_t * wcsncpy (wchar_t * dst, const wchar_t * src, size_t n) {return NULL;}
+wchar_t * wcscat (wchar_t * dst, const wchar_t * src) {return NULL;}
+wchar_t * wcsncat (wchar_t * dst, const wchar_t * src, size_t n) {return NULL;}
+int wcscmp (const wchar_t * str1, const wchar_t * str2) {return 0;}
+int wcsncmp (const wchar_t * str1, const wchar_t * str2, size_t n) {return 0;}
+wchar_t * wcschr (const wchar_t * str, const wchar_t chr) {return NULL;}
+int wcscoll (const wchar_t *str1, const wchar_t * str2) {return 0;}
+size_t wcsxfrm (wchar_t * str1, const wchar_t * str2, size_t n) {return 0;}
+wchar_t * wcsrchr (const wchar_t * str, wchar_t chr) {return NULL;}
+wchar_t * wcspbrk (const wchar_t * str, const wchar_t * set) {return NULL;}
+size_t wcsspn (const wchar_t * str, const wchar_t * set) {return 0;}
+size_t wcscspn (const wchar_t * str, const wchar_t * set) {return 0;}
+wchar_t * wcsstr (const wchar_t * str, const wchar_t * pat) {return NULL;}
+wchar_t * wcstok (wchar_t * str, const wchar_t * set, wchar_t ** a) {return NULL;}
+
+unsigned long wcstoul (const wchar_t * a, wchar_t ** b, int c) {return 0;}
+double wcstod (const wchar_t * a, wchar_t ** b) {return 0.0;}
+
+long wcstol (const wchar_t * str, wchar_t ** end, int base) {return 0;}
+char * setlocale (int category, const char *locale) {return NULL;}