summaryrefslogtreecommitdiffstats
path: root/debian/pilot-link/pilot-link-0.12.5-dfsg/libpisock/money.c
diff options
context:
space:
mode:
Diffstat (limited to 'debian/pilot-link/pilot-link-0.12.5-dfsg/libpisock/money.c')
-rw-r--r--debian/pilot-link/pilot-link-0.12.5-dfsg/libpisock/money.c268
1 files changed, 268 insertions, 0 deletions
diff --git a/debian/pilot-link/pilot-link-0.12.5-dfsg/libpisock/money.c b/debian/pilot-link/pilot-link-0.12.5-dfsg/libpisock/money.c
new file mode 100644
index 00000000..3173cae9
--- /dev/null
+++ b/debian/pilot-link/pilot-link-0.12.5-dfsg/libpisock/money.c
@@ -0,0 +1,268 @@
+/*
+ * $Id: money.c,v 1.16 2006/10/12 14:21:22 desrod Exp $
+ *
+ * money.c: Translate Pilot MoneyManager data formats
+ *
+ * Copyright (c) 1998, Rui Oliveira
+ *
+ * This library is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Library General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * This library 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 Library
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "pi-macros.h"
+#include "pi-money.h"
+
+/***********************************************************************
+ *
+ * Function: unpack_Transaction
+ *
+ * Summary: unpacks Transaction_t data
+ *
+ * Parameters: Transaction_t*, char* to buffer, length of buffer
+ *
+ * Returns: effective buffer length
+ *
+ ***********************************************************************/
+int
+unpack_Transaction(Transaction_t *trans, unsigned char *buffer, size_t len)
+{
+
+ unsigned char *p;
+
+ if (len < 46)
+ return 0;
+
+ p = buffer;
+ trans->flags = get_byte(p);
+ p += 2; /* gap */
+ trans->checknum = get_short(p);
+ p += 2;
+ trans->amount = get_slong(p);
+ p += 4;
+ trans->total = get_slong(p);
+ p += 4;
+ trans->amountc = get_sshort(p);
+ p += 2;
+ trans->totalc = get_sshort(p);
+ p += 2;
+
+ trans->second = get_sshort(p);
+ p += 2;
+ trans->minute = get_sshort(p);
+ p += 2;
+ trans->hour = get_sshort(p);
+ p += 2;
+ trans->day = get_sshort(p);
+ p += 2;
+ trans->month = get_sshort(p);
+ p += 2;
+ trans->year = get_sshort(p);
+ p += 2;
+ trans->wday = get_sshort(p);
+ p += 2;
+
+ trans->repeat = get_byte(p);
+ p += 1;
+ trans->flags2 = get_byte(p);
+ p += 1;
+ trans->type = get_byte(p);
+ p += 1;
+
+ memcpy(trans->reserved, p, 2);
+ p += 2;
+
+ trans->xfer = get_byte(p);
+ p += 1;
+
+ strcpy(trans->description, (char *)p);
+ p += 19;
+ strcpy(trans->note, (char *)p);
+ p += strlen((char *)p) + 1;
+
+ return (p - buffer);
+}
+
+
+/***********************************************************************
+ *
+ * Function: pack_Transaction
+ *
+ * Summary: unpacks Transaction_t data
+ *
+ * Parameters: Transaction_t*, char* to buffer, length of buffer
+ *
+ * Returns: effective buffer length
+ *
+ ***********************************************************************/
+int pack_Transaction(struct Transaction *trans, unsigned char *buffer,
+ size_t len)
+{
+ size_t destlen = 46 + strlen(trans->note) + 1;
+ unsigned char *p;
+
+ if (!buffer)
+ return destlen;
+ if (len < destlen)
+ return 0;
+
+ p = buffer;
+ set_byte(p, trans->flags);
+ p += 1;
+ set_byte(p, 0);
+ p += 1; /* gap fill */
+ set_short(p, trans->checknum);
+ p += 2;
+ set_slong(p, trans->amount);
+ p += 4;
+ set_slong(p, trans->total);
+ p += 4;
+ set_sshort(p, trans->amountc);
+ p += 2;
+ set_sshort(p, trans->totalc);
+ p += 2;
+
+ set_sshort(p, trans->second);
+ p += 2;
+ set_sshort(p, trans->minute);
+ p += 2;
+ set_sshort(p, trans->hour);
+ p += 2;
+ set_sshort(p, trans->day);
+ p += 2;
+ set_sshort(p, trans->month);
+ p += 2;
+ set_sshort(p, trans->year);
+ p += 2;
+ set_sshort(p, trans->wday);
+ p += 2;
+
+ set_byte(p, trans->repeat);
+ p += 1;
+ set_byte(p, trans->flags2);
+ p += 1;
+ set_byte(p, trans->type);
+ p += 1;
+
+ /* gap fill */
+ set_short(p, 0);
+ p += 2;
+
+ set_byte(p, trans->xfer);
+ p += 1;
+
+ strcpy((char *)p, trans->description);
+ p += 19;
+ strcpy((char *)p, trans->note);
+ p += strlen((char *)p) + 1;
+
+ return (p - buffer);
+}
+
+
+/***********************************************************************
+ *
+ * Function: unpack_MoneyAppInfo
+ *
+ * Summary: unpacks MoneyAppInfo_t data
+ *
+ * Parameters: MoneyAppInfo_t*, char* to buffer, length of buffer
+ *
+ * Returns: effective buffer length
+ *
+ ***********************************************************************/
+int
+unpack_MoneyAppInfo(MoneyAppInfo_t *appinfo, unsigned char *buffer, size_t len)
+{
+ int i,
+ j;
+
+ unsigned char *p;
+
+ i = unpack_CategoryAppInfo(&appinfo->category, buffer, len);
+ if (!i)
+ return 0;
+
+ p = (unsigned char *) (buffer + i);
+
+ len -= i;
+ if (len < 603)
+ return 0;
+
+ for (j = 0; j < 20; j++) {
+ memcpy(appinfo->typeLabels[j], p, 10);
+ p += 10;
+ }
+
+ for (j = 0; j < 20; j++) {
+ memcpy(appinfo->tranLabels[j], p, 20);
+ p += 20;
+ }
+
+ return i + 603;
+}
+
+
+/***********************************************************************
+ *
+ * Function: pack_MoneyAppInfo
+ *
+ * Summary: packs MoneyAppInfo_t data
+ *
+ * Parameters: MoneyAppInfo_t*, char* to buffer, length of buffer
+ *
+ * Returns: effective buffer length
+ *
+ ***********************************************************************/
+int
+pack_MoneyAppInfo(MoneyAppInfo_t *appinfo, unsigned char *buffer, size_t len)
+{
+ int i,
+ j;
+ unsigned char *p;
+
+ i = pack_CategoryAppInfo(&appinfo->category, buffer, len);
+
+ if (!buffer)
+ return i + 603;
+ if (!i)
+ return i;
+
+ p = (unsigned char *) (buffer + i);
+ len -= i;
+ if (i < 603)
+ return 0;
+
+ for (j = 0; j < 20; j++) {
+ memcpy(p, appinfo->typeLabels[j], 10);
+ p += 10;
+ }
+
+ for (j = 0; j < 20; j++) {
+ memcpy(p, appinfo->tranLabels[j], 20);
+ p += 20;
+ }
+
+ return (i + 603);
+}
+
+/* vi: set ts=8 sw=4 sts=4 noexpandtab: cin */
+/* ex: set tabstop=4 expandtab: */
+/* Local Variables: */
+/* indent-tabs-mode: t */
+/* c-basic-offset: 8 */
+/* End: */