aboutsummaryrefslogtreecommitdiff
path: root/gsoap-palm/palmFunctions.c
diff options
context:
space:
mode:
Diffstat (limited to 'gsoap-palm/palmFunctions.c')
-rw-r--r--gsoap-palm/palmFunctions.c146
1 files changed, 146 insertions, 0 deletions
diff --git a/gsoap-palm/palmFunctions.c b/gsoap-palm/palmFunctions.c
new file mode 100644
index 0000000..b51a256
--- /dev/null
+++ b/gsoap-palm/palmFunctions.c
@@ -0,0 +1,146 @@
+//===================================================================================
+//
+// (C) COPYRIGHT International Business Machines Corp., 2002 All Rights Reserved
+// Licensed Materials - Property of IBM
+// US Government Users Restricted Rights - Use, duplication or
+// disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
+//
+// IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+// ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+// PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+// CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+// USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+// OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
+// OR PERFORMANCE OF THIS SOFTWARE.
+//
+// The program may be used, executed, copied, modified, and distributed
+// without royalty for the purpose of developing, using, marketing, or distributing.
+//
+//=======================================================================================
+
+/*
+Copyright (C) 2000-2004, Robert van Engelen, Genivia, Inc., All Rights Reserved.
+*/
+
+#include "stdlib.h"
+#include <string.h>
+#include <va_list.h>
+#include <stdarg.h>
+#include <StringMgr.h>
+#include "PalmFunctions.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int AppNetOpenCount = 0;
+extern UInt16 AppNetRefnum;
+extern Int32 AppNetTimeout;
+extern Err NetUInit (void);
+
+char * PalmStrerror(int err)
+{
+ static char str[40];
+
+ SysErrString(err,str,40);
+
+ return str;
+}
+
+double strtod(const char *s, char **endptr) {
+
+ char *p = StrChr(s,'E');
+ FlpCompDouble result;
+ *endptr = ((char*)s)+StrLen(s);
+ if (p) // change E to e and remove '+'
+ {
+ *p='e';
+ if (*(p+1)=='+')
+ StrCopy(p+1,p+2);
+ }
+ FlpBufferAToF (&result.fd, s);
+
+ return result.d;
+}
+
+void palmSprintf(char *str, const char *conv, ...)
+{
+ int retValue = 1;
+ size_t n = strlen(conv);
+ va_list args;
+ va_start(args, conv);
+
+ // Catch the float
+
+ if(n < 6 && conv[0] == '%' && (conv[n-1] == 'g' || conv[n-1] == 'G' || conv[n-1] == 'f' || conv[n-1] == 'F'))
+ {
+ FlpCompDouble flp;
+ flp.d = (double) va_arg(args, double);
+ FlpFToA(flp.fd,str);
+ goto end;
+ }
+ StrVPrintF(str,(const Char *)conv,args);
+ end:
+ va_end(args);
+}
+
+Err palmNetLibOpen()
+{
+ Err error = 0;
+ UInt16 ifErrs;
+
+ if (!AppNetOpenCount)
+ {
+
+ error = NetUInit();
+ if (error) return error;
+
+ error = NetLibOpen(AppNetRefnum, &ifErrs);
+
+ if (error == netErrAlreadyOpen) {
+ error = 0;
+ }
+
+ }
+
+ if (!error) AppNetOpenCount++;
+ return error;
+
+}
+Err palmNetLibClose()
+{
+
+ Err error = 0;
+
+ if (AppNetOpenCount)
+ {
+
+ AppNetOpenCount--;
+ error = NetLibClose(AppNetRefnum, false);
+ }
+
+ return error;
+
+}
+
+int palmRand()
+{
+/* Compute x = (7^5 * x) mod (2^31 - 1)
+ * without overflowing 31 bits:
+ * (2^31 - 1) = 127773 * (7^5) + 2836
+ * From "Random number generators: good ones are hard to find",
+ * Park and Miller, Communications of the ACM, vol. 31, no. 10,
+ * October 1988, p. 1195.
+ */
+ static int seed = 0x19610910;
+ int hi = seed / 127773L;
+ int lo = seed % 127773L;
+ int x = 16807L * lo - 2836L * hi;
+ if (x <= 0)
+ x += 0x7fffffffL;
+ return ((seed = x) % 0x8FFFFFFF);
+}
+
+#ifdef __cplusplus
+}
+#endif