summaryrefslogtreecommitdiffstats
path: root/debian/pilot-link/pilot-link-0.12.5-dfsg/src/pilot-install-datebook.c
diff options
context:
space:
mode:
Diffstat (limited to 'debian/pilot-link/pilot-link-0.12.5-dfsg/src/pilot-install-datebook.c')
-rw-r--r--debian/pilot-link/pilot-link-0.12.5-dfsg/src/pilot-install-datebook.c276
1 files changed, 276 insertions, 0 deletions
diff --git a/debian/pilot-link/pilot-link-0.12.5-dfsg/src/pilot-install-datebook.c b/debian/pilot-link/pilot-link-0.12.5-dfsg/src/pilot-install-datebook.c
new file mode 100644
index 00000000..137a07ad
--- /dev/null
+++ b/debian/pilot-link/pilot-link-0.12.5-dfsg/src/pilot-install-datebook.c
@@ -0,0 +1,276 @@
+/*
+ * $Id: pilot-install-datebook.c,v 1.37 2007/03/17 19:15:16 desrod Exp $
+ *
+ * install-datebook.c: Palm datebook installer
+ *
+ * Copyright 1997, Tero Kivinen
+ * Copyright 1996, Robert A. Kaplan (original install-todos.c)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program 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 General
+ * Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+
+#include "pi-source.h"
+#include "pi-dlp.h"
+#include "pi-datebook.h"
+#include "pi-userland.h"
+
+extern time_t parsedate(char *p);
+
+int main(int argc, const char *argv[])
+{
+ int c, /* switch */
+ db,
+ fieldno,
+ filelen,
+ sd = -1;
+
+ char
+ *cPtr = NULL,
+ *filename = NULL,
+ *file_text = NULL,
+ *fields[4];
+
+ pi_buffer_t *Appointment_buf;
+ Appointment_buf = pi_buffer_new (0xffff);
+
+ FILE *f = NULL;
+
+ struct PilotUser User;
+ struct Appointment appointment;
+
+ poptContext pc;
+
+ struct poptOption options[] = {
+ USERLAND_RESERVED_OPTIONS
+ {"read", 'r', POPT_ARG_STRING, &filename, 0, "Read entries from <file>", "file"},
+ POPT_TABLEEND
+ };
+
+ pc = poptGetContext("install-datebook", argc, argv, options, 0);
+ poptSetOtherOptionHelp(pc,"\n Installs new Datebook entries onto your Palm handheld device.\n"
+ " You must specify -r and a single filename.\n\n"
+ " Example usage: \n"
+ " -p /dev/pilot -r db.txt\n\n");
+
+ if (argc < 2) {
+ poptPrintUsage(pc,stderr,0);
+ return 1;
+ }
+
+ while ((c = poptGetNextOpt(pc)) >= 0) {
+ fprintf(stderr," ERROR: Unhandled option %d.\n",c);
+ return 1;
+ }
+
+ if (c < -1)
+ plu_badoption(pc,c);
+
+ if (filename == NULL) {
+ fprintf(stderr," ERROR: No filename given.\n");
+ return 1;
+ }
+
+ f = fopen(filename, "r");
+ if (f == NULL) {
+ perror("fopen");
+ return 1;
+ }
+
+ fseek(f, 0, SEEK_END);
+ filelen = ftell(f);
+ fseek(f, 0, SEEK_SET);
+
+ file_text = (char *) malloc(filelen + 1);
+ if (file_text == NULL) {
+ perror("malloc()");
+ fclose(f);
+ return 1;
+ }
+
+ fread(file_text, filelen, 1, f);
+ fclose(f);
+ f = NULL;
+
+ sd = plu_connect();
+ if (sd < 0)
+ goto error;
+
+ if (dlp_OpenConduit(sd) < 0)
+ goto error_close;
+
+ dlp_ReadUserInfo(sd, &User);
+ dlp_OpenConduit(sd);
+
+ /* Open the Datebook's database, store access handle in db */
+ if (dlp_OpenDB(sd, 0, 0x80 | 0x40, "DatebookDB", &db) < 0) {
+ fprintf(stderr," ERROR: Unable to open DatebookDB on Palm\n");
+ dlp_AddSyncLogEntry(sd, "Unable to open DatebookDB.\n");
+ goto error_close;
+ }
+
+
+
+ file_text[filelen] = '\0';
+ cPtr = file_text;
+ fieldno = 0;
+ fields[fieldno++] = cPtr;
+
+ while (cPtr - file_text < filelen) {
+ if (*cPtr == '\t') {
+ cPtr++;
+ if (fieldno < 4) {
+ fields[fieldno] = cPtr;
+ }
+ fieldno++;
+ } else if (*cPtr == '\n') {
+ /* replace CR with terminator */
+ *cPtr++ = '\0';
+
+ /* ensure right number of fields */
+ if (fieldno != 4) {
+ printf("Too ");
+ printf(fieldno < 4 ? "few" : "many");
+ printf(" fields on the line : %s\n", fields[0]);
+
+
+ fieldno = 0;
+ fields[fieldno++] = cPtr;
+ continue;
+ }
+
+ /* replace tabs with terminators */
+ for (fieldno = 1; fieldno < 4; fieldno++) {
+ *(fields[fieldno]-1) = '\0';
+ }
+
+ /* woo hoo! */
+ fieldno = 0;
+ if (fields[0][0] == '\0' || fields[1][0] == '\0') { /* no start time */
+ appointment.event = 1;
+ } else {
+ appointment.event = 0;
+ }
+ if (fields[0][0] != '\0') {
+ time_t t;
+
+ t = parsedate(fields[0]);
+ if (t == -1) {
+ printf("Invalid start date or time : %s\n",
+ fields[0]);
+ continue;
+ }
+ appointment.begin = *localtime(&t);
+ }
+ if (fields[1][0] != '\0') {
+ time_t t;
+
+ t = parsedate(fields[1]);
+ if (t == -1) {
+ printf("Invalid end date or time : %s\n",
+ fields[1]);
+ continue;
+ }
+ appointment.end = *localtime(&t);
+ }
+ if (fields[2][0] != '\0') {
+ appointment.alarm = 1;
+ appointment.advance =
+ atoi(fields[2]);
+ if (strchr(fields[2], 'm'))
+ appointment.advanceUnits =
+ advMinutes;
+ else if (strchr(fields[2], 'h'))
+ appointment.advanceUnits =
+ advHours;
+ else if (strchr(fields[2], 'd'))
+ appointment.advanceUnits =
+ advDays;
+ } else {
+ appointment.alarm = 0;
+ appointment.advance = 0;
+ appointment.advanceUnits = 0;
+ }
+ appointment.repeatType = repeatNone;
+ appointment.repeatForever = 0;
+ appointment.repeatEnd.tm_mday = 0;
+ appointment.repeatEnd.tm_mon = 0;
+ appointment.repeatEnd.tm_wday = 0;
+ appointment.repeatFrequency = 0;
+ appointment.repeatWeekstart = 0;
+ appointment.exceptions = 0;
+ appointment.exception = NULL;
+ appointment.description = fields[3];
+ appointment.note = NULL;
+
+ pack_Appointment(&appointment, Appointment_buf, datebook_v1);
+
+ printf("Description: %s, %s\n",
+ appointment.description, appointment.note);
+
+ printf("date: %d/%d/%d %d:%02d\n",
+ appointment.begin.tm_mon + 1,
+ appointment.begin.tm_mday,
+ appointment.begin.tm_year + 1900,
+ appointment.begin.tm_hour,
+ appointment.begin.tm_min);
+
+ dlp_WriteRecord(sd, db, 0, 0, 0,
+ Appointment_buf->data,
+ Appointment_buf->used, 0);
+ fields[fieldno++] = cPtr;
+ } else {
+ cPtr++;
+ }
+ }
+
+ /* Close the database */
+ dlp_CloseDB(sd, db);
+
+ /* Tell the user who it is, with a different PC id. */
+ User.lastSyncPC = 0x00010000;
+ User.successfulSyncDate = time(NULL);
+ User.lastSyncDate = User.successfulSyncDate;
+ dlp_WriteUserInfo(sd, &User);
+
+ if (dlp_AddSyncLogEntry(sd, "Successfully wrote Appointment to Palm.\n"
+ "Thank you for using pilot-link.\n") < 0);
+ goto error_close;
+
+ if(dlp_EndOfSync(sd, 0) < 0);
+ goto error_close;
+
+ if(pi_close(sd) < 0)
+ goto error;
+
+error_close:
+ pi_close(sd);
+
+error:
+ return -1;
+}
+
+/* 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: */