From a52e2e97e055506dab8753f7d14311971c9a04e3 Mon Sep 17 00:00:00 2001 From: Chuan Ji Date: Sun, 3 Apr 2016 22:28:20 -0700 Subject: [PATCH] Import pilot-link 0.12.5. --- AUTHORS | 0 COPYING | 339 + COPYING.LIB | 462 + ChangeLog | 16057 +++++++++++++ INSTALL | 182 + Makefile.am | 26 + Makefile.in | 900 + NEWS | 451 + README | 414 + aclocal.m4 | 1172 + autogen.sh | 223 + bindings/Java/.cvsignore | 2 + bindings/Java/Makefile | 531 + bindings/Java/Makefile.am | 106 + bindings/Java/Makefile.in | 531 + bindings/Java/MidiMgr.class | Bin 0 -> 6568 bytes bindings/Java/MidiMgr.java | 263 + bindings/Java/README | 27 + bindings/Java/README.de | 30 + bindings/Java/TODO | 10 + bindings/Java/TestTodos.class | Bin 0 -> 2900 bytes bindings/Java/TestTodos.java | 104 + bindings/Java/adrtest.class | Bin 0 -> 3975 bytes bindings/Java/adrtest.java | 161 + bindings/Java/build.xml | 46 + bindings/Java/datebooktst.class | Bin 0 -> 5810 bytes bindings/Java/datebooktst.java | 161 + bindings/Java/libjpisock.c | 1347 ++ bindings/Java/libjpisock.h | 197 + bindings/Java/libjpisock.so | Bin 0 -> 47671 bytes .../org/gnu/pilotlink/AddressAppInfo.class | Bin 0 -> 2399 bytes .../org/gnu/pilotlink/AddressAppInfo.java | 169 + .../org/gnu/pilotlink/AddressRecord.class | Bin 0 -> 2269 bytes .../Java/org/gnu/pilotlink/AddressRecord.java | 118 + bindings/Java/org/gnu/pilotlink/AppInfo.class | Bin 0 -> 2570 bytes bindings/Java/org/gnu/pilotlink/AppInfo.java | 118 + bindings/Java/org/gnu/pilotlink/DBInfo.class | Bin 0 -> 1269 bytes bindings/Java/org/gnu/pilotlink/DBInfo.java | 70 + .../pilotlink/DatabaseExistsException.class | Bin 0 -> 344 bytes .../pilotlink/DatabaseExistsException.java | 15 + .../pilotlink/DatabaseNotFoundException.class | Bin 0 -> 348 bytes .../pilotlink/DatabaseNotFoundException.java | 14 + .../org/gnu/pilotlink/DatebookAppInfo.class | Bin 0 -> 803 bytes .../org/gnu/pilotlink/DatebookAppInfo.java | 59 + .../org/gnu/pilotlink/DatebookRecord.class | Bin 0 -> 6778 bytes .../org/gnu/pilotlink/DatebookRecord.java | 422 + .../org/gnu/pilotlink/FTB3CostCatRecord.class | Bin 0 -> 1234 bytes .../org/gnu/pilotlink/FTB3CostCatRecord.java | 85 + .../org/gnu/pilotlink/FTB3TripRecord.class | Bin 0 -> 4888 bytes .../org/gnu/pilotlink/FTB3TripRecord.java | 380 + .../org/gnu/pilotlink/FTB3VehicleRecord.class | Bin 0 -> 1670 bytes .../org/gnu/pilotlink/FTB3VehicleRecord.java | 119 + .../Java/org/gnu/pilotlink/MemoRecord.class | Bin 0 -> 1015 bytes .../Java/org/gnu/pilotlink/MemoRecord.java | 42 + .../Java/org/gnu/pilotlink/MidiRecord.class | Bin 0 -> 1387 bytes .../Java/org/gnu/pilotlink/MidiRecord.java | 81 + .../Java/org/gnu/pilotlink/PilotLink.class | Bin 0 -> 4721 bytes .../Java/org/gnu/pilotlink/PilotLink.java | 210 + .../gnu/pilotlink/PilotLinkException.class | Bin 0 -> 317 bytes .../org/gnu/pilotlink/PilotLinkException.java | 15 + .../Java/org/gnu/pilotlink/RawAppInfo.class | Bin 0 -> 1349 bytes .../Java/org/gnu/pilotlink/RawAppInfo.java | 50 + .../Java/org/gnu/pilotlink/RawRecord.class | Bin 0 -> 617 bytes .../Java/org/gnu/pilotlink/RawRecord.java | 23 + bindings/Java/org/gnu/pilotlink/Record.class | Bin 0 -> 5735 bytes bindings/Java/org/gnu/pilotlink/Record.java | 627 + bindings/Java/org/gnu/pilotlink/SysInfo.class | Bin 0 -> 1131 bytes bindings/Java/org/gnu/pilotlink/SysInfo.java | 47 + .../Java/org/gnu/pilotlink/ToDoRecord.class | Bin 0 -> 2971 bytes .../Java/org/gnu/pilotlink/ToDoRecord.java | 144 + bindings/Java/org/gnu/pilotlink/User.class | Bin 0 -> 1477 bytes bindings/Java/org/gnu/pilotlink/User.java | 61 + bindings/Java/org/gnu/pilotlink/Version.class | Bin 0 -> 371 bytes bindings/Java/org/gnu/pilotlink/Version.java | 8 + bindings/Java/pilot-link.jar | Bin 0 -> 42963 bytes bindings/Java/test.class | Bin 0 -> 7901 bytes bindings/Java/test.java | 256 + bindings/Makefile.am | 84 + bindings/Makefile.in | 700 + bindings/Perl/.cvsignore | 6 + bindings/Perl/MANIFEST | 8 + bindings/Perl/Makefile | 948 + bindings/Perl/Makefile.PL | 48 + bindings/Perl/Makefile.PL.in | 48 + bindings/Perl/Pilot.bs | 0 bindings/Perl/Pilot.c | 7069 ++++++ bindings/Perl/Pilot.o | Bin 0 -> 1092616 bytes bindings/Perl/Pilot.pm | 1060 + bindings/Perl/Pilot.xs | 3779 +++ bindings/Perl/Pilot.xs.orig | 3770 +++ bindings/Perl/README | 16 + bindings/Perl/blib/arch/.exists | 0 .../Perl/blib/arch/auto/PDA/Pilot/.exists | 0 .../Perl/blib/arch/auto/PDA/Pilot/Pilot.bs | 0 .../Perl/blib/arch/auto/PDA/Pilot/Pilot.so | Bin 0 -> 574577 bytes bindings/Perl/blib/bin/.exists | 0 bindings/Perl/blib/lib/PDA/.exists | 0 bindings/Perl/blib/lib/PDA/Pilot.pm | 1060 + bindings/Perl/blib/lib/PDA/dump.pl | 18 + bindings/Perl/blib/lib/auto/PDA/Pilot/.exists | 0 .../Perl/blib/lib/auto/PDA/Pilot/autosplit.ix | 3 + bindings/Perl/blib/man1/.exists | 0 bindings/Perl/blib/man3/.exists | 0 bindings/Perl/blib/man3/PDA::Pilot.3pm | 439 + bindings/Perl/blib/script/.exists | 0 bindings/Perl/const-c.inc | 3608 +++ bindings/Perl/const-xs.inc | 90 + bindings/Perl/dump.pl | 18 + bindings/Perl/h2xs-pilot-link | 2220 ++ bindings/Perl/pm_to_blib | 0 bindings/Perl/test.pl | 191 + bindings/Perl/typemap | 58 + bindings/Python/.cvsignore | 3 + bindings/Python/README | 71 + bindings/Python/TODO | 14 + bindings/Python/setup-standalone.py | 45 + bindings/Python/setup-standalone.py.in | 45 + bindings/Python/setup.py | 38 + bindings/Python/setup.py.in | 38 + bindings/Python/src/general-maps.i | 103 + bindings/Python/src/helperfuncs.i | 292 + bindings/Python/src/pi-dlp-maps.i | 265 + bindings/Python/src/pi-error.i | 71 + bindings/Python/src/pi-file-maps.i | 146 + bindings/Python/src/pi-socket-maps.i | 62 + bindings/Python/src/pisock.i | 104 + bindings/Python/src/pisock.py | 989 + bindings/Python/src/pisock_wrap.c | 13491 +++++++++++ bindings/Python/src/pisockextras.py | 24 + bindings/Python/test/pisocktests.py | 192 + bindings/Python/test/run.sh | 5 + bindings/README | 18 + bindings/Tcl/Makefile.am | 40 + bindings/Tcl/Makefile.in | 721 + bindings/Tcl/README | 7 + bindings/Tcl/pitcl.c | 1278 + bindings/Tcl/tclAppInit.c | 121 + config.guess | 1533 ++ config.h.in | 243 + config.sub | 1693 ++ configure | 19745 ++++++++++++++++ configure.ac | 846 + darwin/Makefile.am | 3 + darwin/Makefile.in | 428 + darwin/build_framework.sh | 49 + depcomp | 630 + doc/60-libpisock.rules | 47 + doc/CodingGuidelines | 622 + doc/Makefile.am | 25 + doc/Makefile.in | 695 + doc/README | 25 + doc/README.debugging | 113 + doc/README.libusb | 391 + doc/README.usb | 519 + doc/TODO | 116 + doc/doxygen.cfg.in | 205 + doc/man/Makefile.am | 40 + doc/man/Makefile.in | 587 + doc/man/README | 6 + doc/man/ietf2datebook.1 | 76 + doc/man/pilot-addresses.1 | 211 + doc/man/pilot-clip.1 | 112 + doc/man/pilot-csd.1 | 106 + doc/man/pilot-debugsh.1 | 98 + doc/man/pilot-dedupe.1 | 103 + doc/man/pilot-dlpsh.1 | 155 + doc/man/pilot-file.1 | 149 + doc/man/pilot-foto-treo600.1 | 117 + doc/man/pilot-foto-treo650.1 | 117 + doc/man/pilot-foto.1 | 183 + doc/man/pilot-getram.1 | 138 + doc/man/pilot-getrom.1 | 150 + doc/man/pilot-getromtoken.1 | 162 + doc/man/pilot-hinotes.1 | 135 + doc/man/pilot-install-datebook.1 | 141 + doc/man/pilot-install-expenses.1 | 173 + doc/man/pilot-install-hinote.1 | 116 + doc/man/pilot-install-memo.1 | 137 + doc/man/pilot-install-netsync.1 | 144 + doc/man/pilot-install-todo.1 | 149 + doc/man/pilot-install-todos.1 | 120 + doc/man/pilot-install-user.1 | 123 + doc/man/pilot-link.7 | 330 + doc/man/pilot-memos.1 | 141 + doc/man/pilot-nredir.1 | 118 + doc/man/pilot-read-expenses.1 | 123 + doc/man/pilot-read-ical.1 | 131 + doc/man/pilot-read-notepad.1 | 119 + doc/man/pilot-read-palmpix.1 | 160 + doc/man/pilot-read-screenshot.1 | 113 + doc/man/pilot-read-todos.1 | 150 + doc/man/pilot-read-veo.1 | 126 + doc/man/pilot-reminders.1 | 110 + doc/man/pilot-schlep.1 | 126 + doc/man/pilot-wav.1 | 134 + doc/man/pilot-xfer.1 | 411 + doc/xml/Makefile.am | 25 + doc/xml/Makefile.in | 658 + doc/xml/README | 42 + doc/xml/catalog.xml.in | 18 + doc/xml/docbook.xsl | 556 + doc/xml/docbook.xsl.in | 556 + doc/xml/pilot-link.docbook | 84 + include/Makefile.am | 59 + include/Makefile.in | 551 + include/pi-address.h | 91 + include/pi-appinfo.h | 51 + include/pi-args.h | 36 + include/pi-blob.h | 75 + include/pi-bluetooth.h | 77 + include/pi-buffer.h | 143 + include/pi-calendar.h | 137 + include/pi-cmp.h | 104 + include/pi-contact.h | 191 + include/pi-datebook.h | 114 + include/pi-debug.h | 97 + include/pi-dlp.h | 1856 ++ include/pi-error.h | 95 + include/pi-expense.h | 124 + include/pi-file.h | 435 + include/pi-foto.h | 46 + include/pi-header.h | 34 + include/pi-hinote.h | 56 + include/pi-inet.h | 50 + include/pi-location.h | 128 + include/pi-macros.h | 290 + include/pi-mail.h | 140 + include/pi-md5.h | 47 + include/pi-md5.h.in | 46 + include/pi-memo.h | 65 + include/pi-money.h | 73 + include/pi-net.h | 73 + include/pi-notepad.h | 118 + include/pi-padp.h | 89 + include/pi-palmpix.h | 103 + include/pi-serial.h | 87 + include/pi-slp.h | 100 + include/pi-sockaddr.h | 29 + include/pi-socket.h | 579 + include/pi-source.h | 157 + include/pi-sync.h | 107 + include/pi-sys.h | 56 + include/pi-syspkt.h | 153 + include/pi-threadsafe.h | 59 + include/pi-todo.h | 67 + include/pi-usb.h | 151 + include/pi-userland.h | 186 + include/pi-util.h | 112 + include/pi-veo.h | 74 + include/pi-versamail.h | 81 + include/pi-version.h | 27 + include/pi-version.h.in | 27 + install-sh | 520 + libpisock/Makefile.am | 91 + libpisock/Makefile.in | 1037 + libpisock/address.c | 313 + libpisock/appinfo.c | 119 + libpisock/blob.c | 173 + libpisock/bluetooth.c | 830 + libpisock/calendar.c | 737 + libpisock/cmp.c | 655 + libpisock/connect.c | 126 + libpisock/contact.c | 586 + libpisock/darwinusb.c | 1968 ++ libpisock/datebook.c | 485 + libpisock/debug.c | 242 + libpisock/dlp.c | 4911 ++++ libpisock/expense.c | 481 + libpisock/freebsdusb.c | 460 + libpisock/hinote.c | 180 + libpisock/inet.c | 595 + libpisock/libusb.c | 605 + libpisock/linuxusb.c | 400 + libpisock/location.c | 805 + libpisock/mail.c | 683 + libpisock/md5.c | 240 + libpisock/memo.c | 186 + libpisock/money.c | 268 + libpisock/net.c | 715 + libpisock/notepad.c | 265 + libpisock/padp.c | 971 + libpisock/palmpix.c | 1815 ++ libpisock/pi-buffer.c | 117 + libpisock/pi-file.c | 1531 ++ libpisock/pi-header.c | 63 + libpisock/serial.c | 717 + libpisock/slp.c | 657 + libpisock/socket.c | 1694 ++ libpisock/sys.c | 372 + libpisock/syspkt.c | 1031 + libpisock/threadsafe.c | 70 + libpisock/todo.c | 293 + libpisock/unixserial.c | 745 + libpisock/usb.c | 1099 + libpisock/utils.c | 413 + libpisock/veo.c | 165 + libpisock/versamail.c | 394 + libpisync/Makefile.am | 17 + libpisync/Makefile.in | 610 + libpisync/sync.c | 1048 + libpisync/util.c | 229 + ltmain.sh | 8413 +++++++ m4/bluez.m4 | 36 + m4/libtool.m4 | 7377 ++++++ m4/ltoptions.m4 | 368 + m4/ltsugar.m4 | 123 + m4/ltversion.m4 | 23 + m4/lt~obsolete.m4 | 92 + m4/python.m4 | 54 + m4/socklen.m4 | 69 + m4/tcl.m4 | 710 + m4/threads.m4 | 214 + m4/vl_lib_readline.m4 | 112 + missing | 376 + pilot-link-pp.pc.in | 11 + pilot-link.m4 | 43 + pilot-link.m4.in | 43 + pilot-link.pc.in | 11 + popt/COPYING | 22 + popt/Makefile.am | 24 + popt/Makefile.in | 567 + popt/README | 18 + popt/findme.c | 50 + popt/findme.h | 20 + popt/popt.c | 1247 + popt/popt.h | 541 + popt/poptconfig.c | 190 + popt/popthelp.c | 742 + popt/poptint.h | 116 + popt/poptparse.c | 227 + popt/system.h | 76 + src/Makefile.am | 394 + src/Makefile.in | 1657 ++ src/ccexample.cc | 483 + src/kittykiller.c | 61 + src/parsedate.c | 2144 ++ src/parsedate.y | 813 + src/pd-tty.c | 490 + src/pilot-addresses.c | 872 + src/pilot-clip.c | 212 + src/pilot-csd.c | 432 + src/pilot-debug.c | 1866 ++ src/pilot-debugsh.c | 212 + src/pilot-dedupe.c | 275 + src/pilot-dlpsh.c | 846 + src/pilot-file.c | 469 + src/pilot-foto-treo600.c | 258 + src/pilot-foto-treo650.c | 357 + src/pilot-foto.c | 1118 + src/pilot-getram.c | 25 + src/pilot-getrom.c | 562 + src/pilot-getromtoken.c | 26 + src/pilot-hinotes.c | 295 + src/pilot-ietf2datebook.pl | 48 + src/pilot-install-datebook.c | 276 + src/pilot-install-expenses | 148 + src/pilot-install-expenses.c | 247 + src/pilot-install-hinote.c | 212 + src/pilot-install-memo.c | 304 + src/pilot-install-netsync.c | 150 + src/pilot-install-todo.c | 239 + src/pilot-install-todos.c | 193 + src/pilot-install-user.c | 140 + src/pilot-memos.c | 422 + src/pilot-nredir.c | 170 + src/pilot-port.c | 291 + src/pilot-read-expenses.c | 233 + src/pilot-read-ical.c | 407 + src/pilot-read-notepad.c | 553 + src/pilot-read-palmpix.c | 606 + src/pilot-read-screenshot.c | 483 + src/pilot-read-todos.c | 274 + src/pilot-read-veo.c | 1161 + src/pilot-reminders.c | 330 + src/pilot-schlep.c | 251 + src/pilot-sync-plan.pl | 1747 ++ src/pilot-undelete.pl | 59 + src/pilot-wav.c | 434 + src/pilot-xfer.c | 2592 ++ src/pix/Makefile.am | 18 + src/pix/Makefile.in | 488 + src/pix/b1.gif | Bin 0 -> 1188 bytes src/pix/b2.gif | Bin 0 -> 2255 bytes src/pix/b3.gif | Bin 0 -> 2184 bytes src/pix/b4.gif | Bin 0 -> 1494 bytes src/pix/b5.gif | Bin 0 -> 1513 bytes src/pix/b6.gif | Bin 0 -> 2139 bytes src/pix/b7.gif | Bin 0 -> 2112 bytes src/pix/case.gif | Bin 0 -> 37459 bytes src/pix/case.xbm | 52 + src/pix/casemask.xbm | 52 + src/plu_args.c | 112 + src/prc/Makefile.am | 8 + src/prc/Makefile.in | 477 + src/prc/getrom.prc | Bin 0 -> 793 bytes src/prc/getrom2.prc | Bin 0 -> 793 bytes src/userland.c | 231 + src/validate.cc | 260 + tests/Makefile.am | 52 + tests/Makefile.in | 746 + tests/calendardb-test.c | 320 + tests/contactsdb-test.c | 378 + tests/dlp-test.c | 724 + tests/locationdb-test.c | 192 + tests/packers.c | 1775 ++ tests/versamail-test.c | 222 + tests/vfs-test.c | 461 + ylwrap | 222 + 408 files changed, 201121 insertions(+) create mode 100644 AUTHORS create mode 100644 COPYING create mode 100644 COPYING.LIB create mode 100644 ChangeLog create mode 100644 INSTALL create mode 100644 Makefile.am create mode 100644 Makefile.in create mode 100644 NEWS create mode 100644 README create mode 100644 aclocal.m4 create mode 100755 autogen.sh create mode 100644 bindings/Java/.cvsignore create mode 100644 bindings/Java/Makefile create mode 100644 bindings/Java/Makefile.am create mode 100644 bindings/Java/Makefile.in create mode 100644 bindings/Java/MidiMgr.class create mode 100644 bindings/Java/MidiMgr.java create mode 100644 bindings/Java/README create mode 100644 bindings/Java/README.de create mode 100644 bindings/Java/TODO create mode 100644 bindings/Java/TestTodos.class create mode 100644 bindings/Java/TestTodos.java create mode 100644 bindings/Java/adrtest.class create mode 100644 bindings/Java/adrtest.java create mode 100644 bindings/Java/build.xml create mode 100644 bindings/Java/datebooktst.class create mode 100644 bindings/Java/datebooktst.java create mode 100644 bindings/Java/libjpisock.c create mode 100644 bindings/Java/libjpisock.h create mode 100755 bindings/Java/libjpisock.so create mode 100644 bindings/Java/org/gnu/pilotlink/AddressAppInfo.class create mode 100644 bindings/Java/org/gnu/pilotlink/AddressAppInfo.java create mode 100644 bindings/Java/org/gnu/pilotlink/AddressRecord.class create mode 100644 bindings/Java/org/gnu/pilotlink/AddressRecord.java create mode 100644 bindings/Java/org/gnu/pilotlink/AppInfo.class create mode 100644 bindings/Java/org/gnu/pilotlink/AppInfo.java create mode 100644 bindings/Java/org/gnu/pilotlink/DBInfo.class create mode 100644 bindings/Java/org/gnu/pilotlink/DBInfo.java create mode 100644 bindings/Java/org/gnu/pilotlink/DatabaseExistsException.class create mode 100644 bindings/Java/org/gnu/pilotlink/DatabaseExistsException.java create mode 100644 bindings/Java/org/gnu/pilotlink/DatabaseNotFoundException.class create mode 100644 bindings/Java/org/gnu/pilotlink/DatabaseNotFoundException.java create mode 100644 bindings/Java/org/gnu/pilotlink/DatebookAppInfo.class create mode 100644 bindings/Java/org/gnu/pilotlink/DatebookAppInfo.java create mode 100644 bindings/Java/org/gnu/pilotlink/DatebookRecord.class create mode 100644 bindings/Java/org/gnu/pilotlink/DatebookRecord.java create mode 100644 bindings/Java/org/gnu/pilotlink/FTB3CostCatRecord.class create mode 100644 bindings/Java/org/gnu/pilotlink/FTB3CostCatRecord.java create mode 100644 bindings/Java/org/gnu/pilotlink/FTB3TripRecord.class create mode 100644 bindings/Java/org/gnu/pilotlink/FTB3TripRecord.java create mode 100644 bindings/Java/org/gnu/pilotlink/FTB3VehicleRecord.class create mode 100644 bindings/Java/org/gnu/pilotlink/FTB3VehicleRecord.java create mode 100644 bindings/Java/org/gnu/pilotlink/MemoRecord.class create mode 100644 bindings/Java/org/gnu/pilotlink/MemoRecord.java create mode 100644 bindings/Java/org/gnu/pilotlink/MidiRecord.class create mode 100644 bindings/Java/org/gnu/pilotlink/MidiRecord.java create mode 100644 bindings/Java/org/gnu/pilotlink/PilotLink.class create mode 100644 bindings/Java/org/gnu/pilotlink/PilotLink.java create mode 100644 bindings/Java/org/gnu/pilotlink/PilotLinkException.class create mode 100644 bindings/Java/org/gnu/pilotlink/PilotLinkException.java create mode 100644 bindings/Java/org/gnu/pilotlink/RawAppInfo.class create mode 100644 bindings/Java/org/gnu/pilotlink/RawAppInfo.java create mode 100644 bindings/Java/org/gnu/pilotlink/RawRecord.class create mode 100644 bindings/Java/org/gnu/pilotlink/RawRecord.java create mode 100644 bindings/Java/org/gnu/pilotlink/Record.class create mode 100644 bindings/Java/org/gnu/pilotlink/Record.java create mode 100644 bindings/Java/org/gnu/pilotlink/SysInfo.class create mode 100644 bindings/Java/org/gnu/pilotlink/SysInfo.java create mode 100644 bindings/Java/org/gnu/pilotlink/ToDoRecord.class create mode 100644 bindings/Java/org/gnu/pilotlink/ToDoRecord.java create mode 100644 bindings/Java/org/gnu/pilotlink/User.class create mode 100644 bindings/Java/org/gnu/pilotlink/User.java create mode 100644 bindings/Java/org/gnu/pilotlink/Version.class create mode 100644 bindings/Java/org/gnu/pilotlink/Version.java create mode 100644 bindings/Java/pilot-link.jar create mode 100644 bindings/Java/test.class create mode 100644 bindings/Java/test.java create mode 100644 bindings/Makefile.am create mode 100644 bindings/Makefile.in create mode 100644 bindings/Perl/.cvsignore create mode 100644 bindings/Perl/MANIFEST create mode 100644 bindings/Perl/Makefile create mode 100644 bindings/Perl/Makefile.PL create mode 100644 bindings/Perl/Makefile.PL.in create mode 100644 bindings/Perl/Pilot.bs create mode 100644 bindings/Perl/Pilot.c create mode 100644 bindings/Perl/Pilot.o create mode 100644 bindings/Perl/Pilot.pm create mode 100644 bindings/Perl/Pilot.xs create mode 100644 bindings/Perl/Pilot.xs.orig create mode 100644 bindings/Perl/README create mode 100644 bindings/Perl/blib/arch/.exists create mode 100644 bindings/Perl/blib/arch/auto/PDA/Pilot/.exists create mode 100644 bindings/Perl/blib/arch/auto/PDA/Pilot/Pilot.bs create mode 100755 bindings/Perl/blib/arch/auto/PDA/Pilot/Pilot.so create mode 100644 bindings/Perl/blib/bin/.exists create mode 100644 bindings/Perl/blib/lib/PDA/.exists create mode 100644 bindings/Perl/blib/lib/PDA/Pilot.pm create mode 100644 bindings/Perl/blib/lib/PDA/dump.pl create mode 100644 bindings/Perl/blib/lib/auto/PDA/Pilot/.exists create mode 100644 bindings/Perl/blib/lib/auto/PDA/Pilot/autosplit.ix create mode 100644 bindings/Perl/blib/man1/.exists create mode 100644 bindings/Perl/blib/man3/.exists create mode 100644 bindings/Perl/blib/man3/PDA::Pilot.3pm create mode 100644 bindings/Perl/blib/script/.exists create mode 100644 bindings/Perl/const-c.inc create mode 100644 bindings/Perl/const-xs.inc create mode 100644 bindings/Perl/dump.pl create mode 100755 bindings/Perl/h2xs-pilot-link create mode 100644 bindings/Perl/pm_to_blib create mode 100644 bindings/Perl/test.pl create mode 100644 bindings/Perl/typemap create mode 100644 bindings/Python/.cvsignore create mode 100644 bindings/Python/README create mode 100644 bindings/Python/TODO create mode 100644 bindings/Python/setup-standalone.py create mode 100644 bindings/Python/setup-standalone.py.in create mode 100644 bindings/Python/setup.py create mode 100644 bindings/Python/setup.py.in create mode 100644 bindings/Python/src/general-maps.i create mode 100644 bindings/Python/src/helperfuncs.i create mode 100644 bindings/Python/src/pi-dlp-maps.i create mode 100644 bindings/Python/src/pi-error.i create mode 100644 bindings/Python/src/pi-file-maps.i create mode 100644 bindings/Python/src/pi-socket-maps.i create mode 100644 bindings/Python/src/pisock.i create mode 100644 bindings/Python/src/pisock.py create mode 100644 bindings/Python/src/pisock_wrap.c create mode 100644 bindings/Python/src/pisockextras.py create mode 100644 bindings/Python/test/pisocktests.py create mode 100755 bindings/Python/test/run.sh create mode 100644 bindings/README create mode 100644 bindings/Tcl/Makefile.am create mode 100644 bindings/Tcl/Makefile.in create mode 100644 bindings/Tcl/README create mode 100644 bindings/Tcl/pitcl.c create mode 100644 bindings/Tcl/tclAppInit.c create mode 100755 config.guess create mode 100644 config.h.in create mode 100755 config.sub create mode 100755 configure create mode 100644 configure.ac create mode 100644 darwin/Makefile.am create mode 100644 darwin/Makefile.in create mode 100755 darwin/build_framework.sh create mode 100755 depcomp create mode 100644 doc/60-libpisock.rules create mode 100644 doc/CodingGuidelines create mode 100644 doc/Makefile.am create mode 100644 doc/Makefile.in create mode 100644 doc/README create mode 100644 doc/README.debugging create mode 100644 doc/README.libusb create mode 100644 doc/README.usb create mode 100644 doc/TODO create mode 100644 doc/doxygen.cfg.in create mode 100644 doc/man/Makefile.am create mode 100644 doc/man/Makefile.in create mode 100644 doc/man/README create mode 100644 doc/man/ietf2datebook.1 create mode 100644 doc/man/pilot-addresses.1 create mode 100644 doc/man/pilot-clip.1 create mode 100644 doc/man/pilot-csd.1 create mode 100644 doc/man/pilot-debugsh.1 create mode 100644 doc/man/pilot-dedupe.1 create mode 100644 doc/man/pilot-dlpsh.1 create mode 100644 doc/man/pilot-file.1 create mode 100644 doc/man/pilot-foto-treo600.1 create mode 100644 doc/man/pilot-foto-treo650.1 create mode 100644 doc/man/pilot-foto.1 create mode 100644 doc/man/pilot-getram.1 create mode 100644 doc/man/pilot-getrom.1 create mode 100644 doc/man/pilot-getromtoken.1 create mode 100644 doc/man/pilot-hinotes.1 create mode 100644 doc/man/pilot-install-datebook.1 create mode 100644 doc/man/pilot-install-expenses.1 create mode 100644 doc/man/pilot-install-hinote.1 create mode 100644 doc/man/pilot-install-memo.1 create mode 100644 doc/man/pilot-install-netsync.1 create mode 100644 doc/man/pilot-install-todo.1 create mode 100644 doc/man/pilot-install-todos.1 create mode 100644 doc/man/pilot-install-user.1 create mode 100644 doc/man/pilot-link.7 create mode 100644 doc/man/pilot-memos.1 create mode 100644 doc/man/pilot-nredir.1 create mode 100644 doc/man/pilot-read-expenses.1 create mode 100644 doc/man/pilot-read-ical.1 create mode 100644 doc/man/pilot-read-notepad.1 create mode 100644 doc/man/pilot-read-palmpix.1 create mode 100644 doc/man/pilot-read-screenshot.1 create mode 100644 doc/man/pilot-read-todos.1 create mode 100644 doc/man/pilot-read-veo.1 create mode 100644 doc/man/pilot-reminders.1 create mode 100644 doc/man/pilot-schlep.1 create mode 100644 doc/man/pilot-wav.1 create mode 100644 doc/man/pilot-xfer.1 create mode 100644 doc/xml/Makefile.am create mode 100644 doc/xml/Makefile.in create mode 100644 doc/xml/README create mode 100644 doc/xml/catalog.xml.in create mode 100644 doc/xml/docbook.xsl create mode 100644 doc/xml/docbook.xsl.in create mode 100644 doc/xml/pilot-link.docbook create mode 100644 include/Makefile.am create mode 100644 include/Makefile.in create mode 100644 include/pi-address.h create mode 100644 include/pi-appinfo.h create mode 100644 include/pi-args.h create mode 100644 include/pi-blob.h create mode 100644 include/pi-bluetooth.h create mode 100644 include/pi-buffer.h create mode 100644 include/pi-calendar.h create mode 100644 include/pi-cmp.h create mode 100644 include/pi-contact.h create mode 100644 include/pi-datebook.h create mode 100644 include/pi-debug.h create mode 100644 include/pi-dlp.h create mode 100644 include/pi-error.h create mode 100644 include/pi-expense.h create mode 100644 include/pi-file.h create mode 100644 include/pi-foto.h create mode 100644 include/pi-header.h create mode 100644 include/pi-hinote.h create mode 100644 include/pi-inet.h create mode 100644 include/pi-location.h create mode 100644 include/pi-macros.h create mode 100644 include/pi-mail.h create mode 100644 include/pi-md5.h create mode 100644 include/pi-md5.h.in create mode 100644 include/pi-memo.h create mode 100644 include/pi-money.h create mode 100644 include/pi-net.h create mode 100644 include/pi-notepad.h create mode 100644 include/pi-padp.h create mode 100644 include/pi-palmpix.h create mode 100644 include/pi-serial.h create mode 100644 include/pi-slp.h create mode 100644 include/pi-sockaddr.h create mode 100644 include/pi-socket.h create mode 100644 include/pi-source.h create mode 100644 include/pi-sync.h create mode 100644 include/pi-sys.h create mode 100644 include/pi-syspkt.h create mode 100644 include/pi-threadsafe.h create mode 100644 include/pi-todo.h create mode 100644 include/pi-usb.h create mode 100644 include/pi-userland.h create mode 100644 include/pi-util.h create mode 100644 include/pi-veo.h create mode 100644 include/pi-versamail.h create mode 100644 include/pi-version.h create mode 100644 include/pi-version.h.in create mode 100755 install-sh create mode 100644 libpisock/Makefile.am create mode 100644 libpisock/Makefile.in create mode 100644 libpisock/address.c create mode 100644 libpisock/appinfo.c create mode 100644 libpisock/blob.c create mode 100644 libpisock/bluetooth.c create mode 100644 libpisock/calendar.c create mode 100644 libpisock/cmp.c create mode 100644 libpisock/connect.c create mode 100644 libpisock/contact.c create mode 100644 libpisock/darwinusb.c create mode 100644 libpisock/datebook.c create mode 100644 libpisock/debug.c create mode 100644 libpisock/dlp.c create mode 100644 libpisock/expense.c create mode 100644 libpisock/freebsdusb.c create mode 100644 libpisock/hinote.c create mode 100644 libpisock/inet.c create mode 100644 libpisock/libusb.c create mode 100644 libpisock/linuxusb.c create mode 100644 libpisock/location.c create mode 100644 libpisock/mail.c create mode 100644 libpisock/md5.c create mode 100644 libpisock/memo.c create mode 100644 libpisock/money.c create mode 100644 libpisock/net.c create mode 100644 libpisock/notepad.c create mode 100644 libpisock/padp.c create mode 100644 libpisock/palmpix.c create mode 100644 libpisock/pi-buffer.c create mode 100644 libpisock/pi-file.c create mode 100644 libpisock/pi-header.c create mode 100644 libpisock/serial.c create mode 100644 libpisock/slp.c create mode 100644 libpisock/socket.c create mode 100644 libpisock/sys.c create mode 100644 libpisock/syspkt.c create mode 100644 libpisock/threadsafe.c create mode 100644 libpisock/todo.c create mode 100644 libpisock/unixserial.c create mode 100644 libpisock/usb.c create mode 100644 libpisock/utils.c create mode 100644 libpisock/veo.c create mode 100644 libpisock/versamail.c create mode 100644 libpisync/Makefile.am create mode 100644 libpisync/Makefile.in create mode 100644 libpisync/sync.c create mode 100644 libpisync/util.c create mode 100755 ltmain.sh create mode 100644 m4/bluez.m4 create mode 100644 m4/libtool.m4 create mode 100644 m4/ltoptions.m4 create mode 100644 m4/ltsugar.m4 create mode 100644 m4/ltversion.m4 create mode 100644 m4/lt~obsolete.m4 create mode 100644 m4/python.m4 create mode 100644 m4/socklen.m4 create mode 100644 m4/tcl.m4 create mode 100644 m4/threads.m4 create mode 100644 m4/vl_lib_readline.m4 create mode 100755 missing create mode 100644 pilot-link-pp.pc.in create mode 100644 pilot-link.m4 create mode 100644 pilot-link.m4.in create mode 100644 pilot-link.pc.in create mode 100644 popt/COPYING create mode 100644 popt/Makefile.am create mode 100644 popt/Makefile.in create mode 100644 popt/README create mode 100644 popt/findme.c create mode 100644 popt/findme.h create mode 100644 popt/popt.c create mode 100644 popt/popt.h create mode 100644 popt/poptconfig.c create mode 100644 popt/popthelp.c create mode 100644 popt/poptint.h create mode 100644 popt/poptparse.c create mode 100644 popt/system.h create mode 100644 src/Makefile.am create mode 100644 src/Makefile.in create mode 100644 src/ccexample.cc create mode 100644 src/kittykiller.c create mode 100644 src/parsedate.c create mode 100644 src/parsedate.y create mode 100644 src/pd-tty.c create mode 100644 src/pilot-addresses.c create mode 100644 src/pilot-clip.c create mode 100644 src/pilot-csd.c create mode 100644 src/pilot-debug.c create mode 100644 src/pilot-debugsh.c create mode 100644 src/pilot-dedupe.c create mode 100644 src/pilot-dlpsh.c create mode 100644 src/pilot-file.c create mode 100644 src/pilot-foto-treo600.c create mode 100644 src/pilot-foto-treo650.c create mode 100644 src/pilot-foto.c create mode 100644 src/pilot-getram.c create mode 100644 src/pilot-getrom.c create mode 100644 src/pilot-getromtoken.c create mode 100644 src/pilot-hinotes.c create mode 100644 src/pilot-ietf2datebook.pl create mode 100644 src/pilot-install-datebook.c create mode 100755 src/pilot-install-expenses create mode 100644 src/pilot-install-expenses.c create mode 100644 src/pilot-install-hinote.c create mode 100644 src/pilot-install-memo.c create mode 100644 src/pilot-install-netsync.c create mode 100644 src/pilot-install-todo.c create mode 100644 src/pilot-install-todos.c create mode 100644 src/pilot-install-user.c create mode 100644 src/pilot-memos.c create mode 100644 src/pilot-nredir.c create mode 100644 src/pilot-port.c create mode 100644 src/pilot-read-expenses.c create mode 100644 src/pilot-read-ical.c create mode 100644 src/pilot-read-notepad.c create mode 100644 src/pilot-read-palmpix.c create mode 100644 src/pilot-read-screenshot.c create mode 100644 src/pilot-read-todos.c create mode 100644 src/pilot-read-veo.c create mode 100644 src/pilot-reminders.c create mode 100644 src/pilot-schlep.c create mode 100644 src/pilot-sync-plan.pl create mode 100644 src/pilot-undelete.pl create mode 100644 src/pilot-wav.c create mode 100644 src/pilot-xfer.c create mode 100644 src/pix/Makefile.am create mode 100644 src/pix/Makefile.in create mode 100644 src/pix/b1.gif create mode 100644 src/pix/b2.gif create mode 100644 src/pix/b3.gif create mode 100644 src/pix/b4.gif create mode 100644 src/pix/b5.gif create mode 100644 src/pix/b6.gif create mode 100644 src/pix/b7.gif create mode 100644 src/pix/case.gif create mode 100644 src/pix/case.xbm create mode 100644 src/pix/casemask.xbm create mode 100644 src/plu_args.c create mode 100644 src/prc/Makefile.am create mode 100644 src/prc/Makefile.in create mode 100644 src/prc/getrom.prc create mode 100644 src/prc/getrom2.prc create mode 100644 src/userland.c create mode 100644 src/validate.cc create mode 100644 tests/Makefile.am create mode 100644 tests/Makefile.in create mode 100644 tests/calendardb-test.c create mode 100644 tests/contactsdb-test.c create mode 100644 tests/dlp-test.c create mode 100644 tests/locationdb-test.c create mode 100644 tests/packers.c create mode 100644 tests/versamail-test.c create mode 100644 tests/vfs-test.c create mode 100755 ylwrap diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..e69de29 diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..a43ea21 --- /dev/null +++ b/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + 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., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/COPYING.LIB b/COPYING.LIB new file mode 100644 index 0000000..bc2f46c --- /dev/null +++ b/COPYING.LIB @@ -0,0 +1,462 @@ + GNU LIBRARY GENERAL PUBLIC LICENSE + + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + + Everyone is permitted to copy and distribute verbatim copies of this + license document, but changing it is not allowed. [This is the first + released version of the library GPL. It is numbered 2 because it goes with + version 2 of the ordinary GPL.] + + Preamble + + The licenses for most software are designed to take away your freedom to + share and change it. By contrast, the GNU General Public Licenses are + intended to guarantee your freedom to share and change free software -- to + make sure the software is free for all its users. + + This license, the Library General Public License, applies to some specially + designated Free Software Foundation software, and to any other libraries + whose authors decide to use it. You can use it for your libraries, too. + + When we speak of free software, we are referring to freedom, not price. Our + General Public Licenses are designed to make sure that you have the freedom + to distribute copies of free software (and charge for this service if you + wish), that you receive source code or can get it if you want it, that you + can change the software or use pieces of it in new free programs; and that + you know you can do these things. + + To protect your rights, we need to make restrictions that forbid anyone to + deny you these rights or to ask you to surrender the rights. These + restrictions translate to certain responsibilities for you if you + distribute copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis or for + a fee, you must give the recipients all the rights that we gave you. You + must make sure that they, too, receive or can get the source code. If you + link a program with the library, you must provide complete object files to + the recipients so that they can relink them with the library, after making + changes to the library and recompiling it. And you must show them these + terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright the + library, and (2) offer you this license which gives you legal permission to + copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain that + everyone understands that there is no warranty for this free library. If + the library is modified by someone else and passed on, we want its + recipients to know that what they have is not the original version, so that + any problems introduced by others will not reflect on the original authors' + reputations. + + Finally, any free program is threatened constantly by software patents. We + wish to avoid the danger that companies distributing free software will + individually obtain patent licenses, thus in effect transforming the + program into proprietary software. To prevent this, we have made it clear + that any patent must be licensed for everyone's free use or not licensed at + all. + + Most GNU software, including some libraries, is covered by the ordinary GNU + General Public License, which was designed for utility programs. This + license, the GNU Library General Public License, applies to certain + designated libraries. This license is quite different from the ordinary + one; be sure to read it in full, and don't assume that anything in it is + the same as in the ordinary license. + + The reason we have a separate public license for some libraries is that + they blur the distinction we usually make between modifying or adding to a + program and simply using it. Linking a program with a library, without + changing the library, is in some sense simply using the library, and is + analogous to running a utility program or application program. However, in + a textual and legal sense, the linked executable is a combined work, a + derivative of the original library, and the ordinary General Public License + treats it as such. + + Because of this blurred distinction, using the ordinary General Public + License for libraries did not effectively promote software sharing, because + most developers did not use the libraries. We concluded that weaker + conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the users + of those programs of all benefit from the free status of the libraries + themselves. This Library General Public License is intended to permit + developers of non-free programs to use free libraries, while preserving + your freedom as a user of such programs to change the free libraries that + are incorporated in them. (We have not seen how to achieve this as regards + changes in header files, but we have achieved it as regards changes in the + actual functions of the Library.) The hope is that this will lead to faster + development of free libraries. + + The precise terms and conditions for copying, distribution and modification + follow. Pay close attention to the difference between a "work based on the + library" and a "work that uses the library". The former contains code + derived from the library, while the latter only works together with the + library. Note that it is possible for a library to be covered by the + ordinary General Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, + DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which contains a + notice placed by the copyright holder or other authorized party saying + it may be distributed under the terms of this Library General Public + License (also called "this License"). Each licensee is addressed as + "you". + + A "library" means a collection of software functions and/or data prepared + so as to be conveniently linked with application programs (which use some + of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work which has + been distributed under these terms. A "work based on the Library" means + either the Library or any derivative work under copyright law: that is to + say, a work containing the Library or a portion of it, either verbatim or + with modifications and/or translated straightforwardly into another + language. (Hereinafter, translation is included without limitation in the + term "modification".) + + "Source code" for a work means the preferred form of the work for making + modifications to it. For a library, complete source code means all the + source code for all modules it contains, plus any associated interface + definition files, plus the scripts used to control compilation and + installation of the library. + + Activities other than copying, distribution and modification are not + covered by this License; they are outside its scope. The act of running a + program using the Library is not restricted, and output from such a program + is covered only if its contents constitute a work based on the Library + (independent of the use of the Library in a tool for writing it). Whether + that is true depends on what the Library does and what the program that + uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's complete + source code as you receive it, in any medium, provided that you + conspicuously and appropriately publish on each copy an appropriate + copyright notice and disclaimer of warranty; keep intact all the + notices that refer to this License and to the absence of any warranty; + and distribute a copy of this License along with the Library. + + You may charge a fee for the physical act of transferring a copy, and you + may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Library or any portion of it, + thus forming a work based on the Library, and copy and distribute such + modifications or work under the terms of Section 1 above, provided that + you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices stating + that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no charge to + all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a table + of data to be supplied by an application program that uses the + facility, other than as an argument passed when the facility is + invoked, then you must make a good faith effort to ensure that, in the + event an application does not supply such function or table, the + facility still operates, and performs whatever part of its purpose + remains meaningful. + + (For example, a function in a library to compute square roots has a purpose + that is entirely well-defined independent of the application. Therefore, + Subsection 2d requires that any application-supplied function or table used + by this function must be optional: if the application does not supply it, + the square root function must still compute square roots.) + + These requirements apply to the modified work as a whole. If identifiable + sections of that work are not derived from the Library, and can be + reasonably considered independent and separate works in themselves, then + this License, and its terms, do not apply to those sections when you + distribute them as separate works. But when you distribute the same + sections as part of a whole which is a work based on the Library, the + distribution of the whole must be on the terms of this License, whose + permissions for other licensees extend to the entire whole, and thus to + each and every part regardless of who wrote it. + + Thus, it is not the intent of this section to claim rights or contest your + rights to work written entirely by you; rather, the intent is to exercise + the right to control the distribution of derivative or collective works + based on the Library. + + In addition, mere aggregation of another work not based on the Library with + the Library (or with a work based on the Library) on a volume of a storage + or distribution medium does not bring the other work under the scope of + this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public + License instead of this License to a given copy of the Library. To do + this, you must alter all the notices that refer to this License, so + that they refer to the ordinary GNU General Public License, version 2, + instead of to this License. (If a newer version than version 2 of the + ordinary GNU General Public License has appeared, then you can specify + that version instead if you wish.) Do not make any other change in + these notices. + + Once this change is made in a given copy, it is irreversible for that copy, + so the ordinary GNU General Public License applies to all subsequent copies + and derivative works made from that copy. This option is useful when you + wish to copy part of the code of the Library into a program that is not a + library. + + 4. You may copy and distribute the Library (or a portion or derivative of + it, under Section 2) in object code or executable form under the terms + of Sections 1 and 2 above provided that you accompany it with the + complete corresponding machine-readable source code, which must be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange. + + If distribution of object code is made by offering access to copy from a + designated place, then offering equivalent access to copy the source code + from the same place satisfies the requirement to distribute the source + code, even though third parties are not compelled to copy the source along + with the object code. + + 5. A program that contains no derivative of any portion of the Library, + but is designed to work with the Library by being compiled or linked + with it, is called a "work that uses the Library". Such a work, in + isolation, is not a derivative work of the Library, and therefore falls + outside the scope of this License. + + However, linking a "work that uses the Library" with the Library creates an + executable that is a derivative of the Library (because it contains + portions of the Library), rather than a "work that uses the library". The + executable is therefore covered by this License. Section 6 states terms + for distribution of such executables. + + When a "work that uses the Library" uses material from a header file that + is part of the Library, the object code for the work may be a derivative + work of the Library even though the source code is not. Whether this is + true is especially significant if the work can be linked without the + Library, or if the work is itself a library. The threshold for this to be + true is not precisely defined by law. + + If such an object file uses only numerical parameters, data structure + layouts and accessors, and small macros and small inline functions (ten + lines or less in length), then the use of the object file is unrestricted, + regardless of whether it is legally a derivative work. (Executables + containing this object code plus portions of the Library will still fall + under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may distribute + the object code for the work under the terms of Section 6. Any executables + containing that work also fall under Section 6, whether or not they are + linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also compile or link a + "work that uses the Library" with the Library to produce a work + containing portions of the Library, and distribute that work under + terms of your choice, provided that the terms permit modification of + the work for the customer's own use and reverse engineering for + debugging such modifications. + + You must give prominent notice with each copy of the work that the Library + is used in it and that the Library and its use are covered by this License. + You must supply a copy of this License. If the work during execution + displays copyright notices, you must include the copyright notice for the + Library among them, as well as a reference directing the user to the copy + of this License. Also, you must do one of these things: + + a) Accompany the work with the complete corresponding machine-readable + source code for the Library including whatever changes were used in the + work (which must be distributed under Sections 1 and 2 above); and, if + the work is an executable linked with the Library, with the complete + machine-readable "work that uses the Library", as object code and/or + source code, so that the user can modify the Library and then relink to + produce a modified executable containing the modified Library. (It is + understood that the user who changes the contents of definitions files + in the Library will not necessarily be able to recompile the + application to use the modified definitions.) b) Accompany the work + with a written offer, valid for at least three years, to give the same + user the materials specified in Subsection 6a, above, for a charge no + more than the cost of performing this distribution. + + c) If distribution of the work is made by offering access to copy from a + designated place, offer equivalent access to copy the above specified + materials from the same place. + + d) Verify that the user has already received a copy of these materials or + that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the Library" + must include any data and utility programs needed for reproducing the + executable from it. However, as a special exception, the source code + distributed need not include anything that is normally distributed (in + either source or binary form) with the major components (compiler, kernel, + and so on) of the operating system on which the executable runs, unless + that component itself accompanies the executable. + + It may happen that this requirement contradicts the license restrictions of + other proprietary libraries that do not normally accompany the operating + system. Such a contradiction means you cannot use both them and the Library + together in an executable that you distribute. + + 7. You may place library facilities that are a work based on the Library + side-by-side in a single library together with other library facilities + not covered by this License, and distribute such a combined library, + provided that the separate distribution of the work based on the + Library and of the other library facilities is otherwise permitted, and + provided that you do these two things: + + a) Accompany the combined library with a copy of the same work based on + the Library, uncombined with any other library facilities. This must be + distributed under the terms of the Sections above. + + b) Give prominent notice with the combined library of the fact that part + of it is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute the + Library except as expressly provided under this License. Any attempt + otherwise to copy, modify, sublicense, link with, or distribute the + Library is void, and will automatically terminate your rights under + this License. However, parties who have received copies, or rights, + from you under this License will not have their licenses terminated so + long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not signed + it. However, nothing else grants you permission to modify or distribute + the Library or its derivative works. These actions are prohibited by + law if you do not accept this License. Therefore, by modifying or + distributing the Library (or any work based on the Library), you + indicate your acceptance of this License to do so, and all its terms + and conditions for copying, distributing or modifying the Library or + works based on it. + + 10. Each time you redistribute the Library (or any work based on the + Library), the recipient automatically receives a license from the + original licensor to copy, distribute, link with or modify the Library + subject to these terms and conditions. You may not impose any further + restrictions on the recipients' exercise of the rights granted herein. + You are not responsible for enforcing compliance by third parties to + this License. + + 11. If, as a consequence of a court judgment or allegation of patent + infringement or for any other reason (not limited to patent issues), + conditions are imposed on you (whether by court order, agreement or + otherwise) that contradict the conditions of this License, they do not + excuse you from the conditions of this License. If you cannot + distribute so as to satisfy simultaneously your obligations under this + License and any other pertinent obligations, then as a consequence you + may not distribute the Library at all. For example, if a patent license + would not permit royalty-free redistribution of the Library by all + those who receive copies directly or indirectly through you, then the + only way you could satisfy both it and this License would be to refrain + entirely from distribution of the Library. + + If any portion of this section is held invalid or unenforceable under any + particular circumstance, the balance of the section is intended to apply, + and the section as a whole is intended to apply in other circumstances + + It is not the purpose of this section to induce you to infringe any patents + or other property right claims or to contest validity of any such claims; + this section has the sole purpose of protecting the integrity of the free + software distribution system which is implemented by public license + practices. Many people have made generous contributions to the wide range + of software distributed through that system in reliance on consistent + application of that system; it is up to the author/donor to decide if he or + she is willing to distribute software through any other system and a + licensee cannot impose that choice. + + This section is intended to make thoroughly clear what is believed to be a + consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in certain + countries either by patents or by copyrighted interfaces, the original + copyright holder who places the Library under this License may add an + explicit geographical distribution limitation excluding those + countries, so that distribution is permitted only in or among countries + not thus excluded. In such case, this License incorporates the + limitation as if written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new versions of + the Library General Public License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the Library + specifies a version number of this License which applies to it and "any + later version", you have the option of following the terms and conditions + either of that version or of any later version published by the Free + Software Foundation. If the Library does not specify a license version + number, you may choose any version ever published by the Free Software + Foundation. + + 14. If you wish to incorporate parts of the Library into other free + programs whose distribution conditions are incompatible with these, + write to the author to ask for permission. For software which is + copyrighted by the Free Software Foundation, write to the Free Software + Foundation; we sometimes make exceptions for this. Our decision will be + guided by the two goals of preserving the free status of all + derivatives of our free software and of promoting the sharing and reuse + of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY + FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT + WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER + PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, + EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE + ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH + YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL + NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING + WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR + REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR + DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL + DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY + (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED + INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF + THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR + OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Libraries If you develop a + new library, and you want it to be of the greatest possible use to the + public, we recommend making it free software that everyone can redistribute + and change. You can do so by permitting redistribution under these terms + (or, alternatively, under the terms of the ordinary General Public + License). + + To apply these terms, attach the following notices to the library. It is + safest to attach them to the start of each source file to most effectively + convey the exclusion of warranty; and each file should have at least the + "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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., 675 Mass Ave, Cambridge, MA 02139, USA. + + Also add information on how to contact you by electronic and paper mail. + You should also get your employer (if you work as a programmer) or your + school, if any, to sign a "copyright disclaimer" for the library, if + necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the library + rob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + + Ty Coon, President of Vice + + That's all there is to it! diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..e6dee8f --- /dev/null +++ b/ChangeLog @@ -0,0 +1,16057 @@ +2010-01-16 19:38 judd + + * libpisock/calendar.c: Made code actually work with pi_buffer_t + parameters. + +2010-01-16 19:37 judd + + * tests/calendardb-test.c: Added code to test pack_CalendarAppInfo + +2010-01-16 17:54 judd + + * tests/calendardb-test.c: Changed to pass a pi_buffer_t into + unpack_CalendarAppInfo + +2010-01-16 17:29 judd + + * include/pi-calendar.h, libpisock/calendar.c: Changed + pack_CalendarAppInfo, and unpack_CalendarAppInfo to use + pi_buffer_t to match the APIs of the other applications. + +2009-12-10 20:48 judd + + * src/pilot-xfer.c: If a file is installed to VFS with the same + filename as an existing file the tail of the previous file is + still intact and at the end of the file. I added a + dlp_VFSFileResize call to truncate the file size to zero before + writing the new file. + +2009-12-01 23:20 judd + + * src/pilot-xfer.c: fixed minor signed/unsigned compiler warnings + +2009-12-01 23:15 judd + + * src/pilot-xfer.c: Fixed signed/unsigned comparisons that failed + with cards larger than 4G or so. The code would incorrectly + decide there wasn't enough free space to install. + +2009-09-20 17:07 judd + + * libpisock/calendar.c: location flag was not being used. Added + location flag and proper use of it. + +2009-06-04 09:38 desrod + + * src/pilot-schlep.c: Oops, stupid mistake. creat(2) is always the + last param. :) + + (Coding-on-the-train)-- + +2009-06-04 09:32 desrod + + * libpisock/os2serial.c, src/pilot-xfer.c, src/pilot-addresses.c, + src/pilot-foto-treo600.c, src/pilot-foto-treo650.c, + src/pilot-schlep.c, src/pilot-csd.c, src/pilot-getrom.c, + src/pilot-install-memo.c, src/pilot-read-todos.c: Cleaner O_CREAT + modes (done right!) Writing explicit numbers for file permissions + is bad practice. Not only is it not portable, it also requires + that everyone who reads your source to remember what the bits + mean. + +2009-05-25 00:43 desrod + + * ChangeLog: Pushing ChangeLog back upstream + +2009-05-25 00:40 desrod + + * include/Makefile.am, tests/Makefile.am: Last-minute fixes before + releasing 0.12.4 + +2009-05-25 00:19 desrod + + * libpisock/usb.c: Fix for Sony SJ-22 device sync (fixes bug #1957 + filed at bugs.pilot-link.org) + +2009-05-25 00:16 desrod + + * doc/xml/pilot-xfer.xml: Updated documentation to reflect a + cleaner layout and output (closes bug #1913 in the bugtracker at + bugs.pilot-link.org + +2009-02-23 06:59 nicholas + + * ChangeLog, include/pi-contact.h, libpisock/contact.c, + tests/contactsdb-test.c: Integrate jpilot's contacts support. See + http://lists.pilot-link.org/pipermail/pilot-link-devel/2009-February/001762.html + . + + This is based on: + + =================================================================== + File: jp-contact.c Status: Up-to-date + + Working revision: 1.10 + Repository revision: 1.10 + /cvs/jpilot/jpilot_src/jp-contact.c,v + Sticky Tag: (none) + Sticky Date: (none) + Sticky Options: (none) + + =================================================================== + File: jp-pi-contact.h Status: Up-to-date + + Working revision: 1.5 + Repository revision: 1.5 + /cvs/jpilot/jpilot_src/jp-pi-contact.h,v + Sticky Tag: (none) + Sticky Date: (none) + Sticky Options: (none) + +2009-02-22 17:54 nicholas + + * bindings/Python/.cvsignore: Add generated file to .cvsignore + +2009-02-22 03:08 nicholas + + * include/Makefile.am, include/pi-blob.h, include/pi-calendar.h, + include/pi-location.h, libpisock/Makefile.am, libpisock/blob.c, + libpisock/calendar.c, libpisock/location.c, tests/.cvsignore, + tests/Makefile.am, tests/calendardb-test.c, + tests/locationdb-test.c: Adding CalendarDB support to pilot-link + +2009-02-21 18:44 desrod + + * configure.ac: Adding minor tweak for m4 macro optimizations + +2009-02-21 17:22 desrod + + * libpisock/contact.c: Minor fix for a buffer size miscalculation + (from Nicholas Piper) + +2009-02-07 11:09 desrod + + * include/Makefile.am: Adding missing newline at the end of the + file. + +2009-02-07 11:05 desrod + + * include/Makefile.am: Just testing a commit, debugging failure in + CVS locks. Debian-- + +2008-11-06 05:45 desrod + + * include/: pi-debug.h, pi-threadsafe.h: Cleaning up unnecessary + references to config.h here. + +2008-11-05 20:14 judd + + * configure.ac: Added pi-md5.h.in + +2008-11-05 20:14 judd + + * include/pi-md5.h.in: generates pi-md5.h + +2008-11-05 20:13 judd + + * include/pi-md5.h: Now autogenerated from pi-md5.h.in + +2008-05-03 16:23 desrod + + * libpisock/bluetooth.c: Add minor fix for reported segfault when + closing down bluetooth connection. + + This closes bug #1872 + +2007-12-17 22:03 judd + + * include/pi-md5.h: UINT32 was broken on 64-bit systems. This + should fix it on most systems. + +2007-12-17 20:56 desrod + + * ChangeLog: Increment ChangeLog to test/validate an LDAP + permission issue with LockDir + +2007-11-22 17:19 desrod + + * libpisock/usb.c: Implementing a Zire 22 fix from Tom Billiet + +2007-11-12 13:42 desrod + + * configure.ac: Bump for 0.12.4 + +2007-11-12 13:01 desrod + + * configure.ac: [no log message] + +2007-11-12 12:56 desrod + + * bindings/Perl/Pilot.xs: Added Aaron's fixes (oof! This has been + in the queue for awhile. Sorry Aaron). This closes bug #1448. + +2007-11-12 12:30 desrod + + * NEWS: Bump for 0.12.3 release + +2007-11-12 11:58 desrod + + * ChangeLog: Bump ChangeLog to current + +2007-11-12 11:28 desrod + + * doc/xml/: pilot-foto-treo600.xml, pilot-foto-treo650.xml: Adding + manpages for renamed conduits + +2007-11-12 11:25 desrod + + * doc/xml/pilot-link.docbook, doc/xml/pilot-link.xml, + src/Makefile.am: Updated for new conduit renames and new manpages + to follow them + +2007-11-12 09:38 desrod + + * doc/: man/Makefile.am, xml/pilot-650foto.xml, + xml/pilot-treofoto.xml: Removing legacy manpages for renamed + conduits + +2007-11-12 09:26 desrod + + * src/: pilot-650foto.c, pilot-read-todos.c, pilot-treofoto.c: + Replaced pilot-650foto.c with pilot-foto-treo650.c and + pilot-treofoto.c with pilot-foto-treo600.c. + + Fixed pilot-read-todos.c to allow reading files from outside its + own directory + +2007-11-09 11:01 desrod + + * src/pilot-addresses.c: Fix for devices > OS5. Instead of bailing + out, we'll just report a warning for now until I can rewrite + this. + +2007-11-09 10:48 desrod + + * src/pilot-install-memo.c: Fix for installing files to Memo Pad + when they aren't in the current working directory + +2007-11-09 09:52 desrod + + * doc/xml/pilot-read-todos.xml: More clarity about what is and is + not supported by this conduit. This closes bug #1837 + +2007-11-09 09:43 desrod + + * bindings/Java/Makefile.am: Update to allow parallel builds of + pilot-link's Java bindings. This closes bug #1802. + +2007-11-09 09:40 desrod + + * bindings/Java/Makefile.am: Updated Java bindings to fix unescaped + vars. This prevents accidental installation of the Java bindings. + +2007-11-09 09:35 desrod + + * configure.ac, m4/bluez.m4: Update to fix the BlueZ detection, + also add a --without-bluez option to explicitly disable BlueZ for + builds on systems where BlueZ is detected. + + This also closes bug #17795 and Debian bug 413051 in the Debian + BTS + +2007-11-09 09:07 desrod + + * src/pilot-csd.c: Minor fix for -H issue by Philipp Matthias Hahn. + This closes #1824 in the pilot-link bugtracker and #430808 in the + Debian BTS. + +2007-11-09 08:59 desrod + + * libpisock/usb.c: Fix for Sony NR70 devices by Serguei Miridonov. + This closes issue #1830 + +2007-10-11 12:02 desrod + + * configure.ac: Fixed a small cosmetic error with PNG detection + (resolves bug #1804) + +2007-07-30 00:56 desrod + + * src/pilot-addresses.c: Minor update to attempt to fix the > OS5 + detection + +2007-07-29 22:09 desrod + + * configure.ac, doc/Makefile.am: Updated the xsltproc check to only + build when xsltproc is found, else skip + + This resolves bug #1805. + +2007-07-29 22:05 desrod + + * configure.ac: Increment CURRENT and REVISION for libpisync as + required by autoconf guidelines: + + http://sources.redhat.com/autobook/autobook/autobook_91.html + +2007-05-31 21:13 desrod + + * doc/xml/pilot-install-netsync.xml, src/pilot-install-netsync.c: + Clarified the network parameters which are allowed for this + conduit. + +2007-04-16 12:47 desrod + + * m4/bluez.m4: Trying to clean up the autoconf by moving to .m4 + files. BlueZ is a mess :) + +2007-03-17 15:15 desrod + + * src/pilot-install-datebook.c: Missed application of + pi_buffer_new(). This closes bug #1789. + +2007-03-17 15:04 desrod + + * bindings/Perl/Makefile.PL.in: Closing bug #1705 from 7-15, + patched with Aaron's Perl fix + +2007-03-08 12:54 desrod + + * configure.ac: Oops, that wasn't right, this one is. + +2007-03-08 12:37 desrod + + * configure.ac: Bump pisock to the next level + +2007-02-21 12:27 desrod + + * pilot-link.m4.in: This was here to test and debug a BlueZ + problem, which has now been fixed by completely rewriting the + autoconf test for it. This also closes pilot-link bug #1793 and + Debian bug #411382 + +2007-02-19 08:59 desrod + + * libpisock/usb.c: Oops, forgot to commit Matt Davey's fix. This + closes bug #1782. + +2007-02-18 21:16 desrod + + * doc/xml/pilot-memos.xml: Closing Debian bug #391984 + +2007-02-16 23:26 desrod + + * doc/xml/: docbook.xsl.in, pilot-install-todo.xml, + pilot-install-todos.xml: Updated documents: docbook.xsl.in: Can't + have comments above the opening declaration + pilot-install-todo[s].xml: Reference each other until we merge + together + +2007-02-16 21:40 desrod + + * bindings/Tcl/: Makefile.am, pitcl.c: Fixing Tcl bindings so they + build clean. I don't know if they'll work, but this should at + least fix them so they do not error out and crash a build when + enabled. This also closes bug #1488 + +2007-02-16 13:42 desrod + + * doc/xml/pilot-link.docbook: Oops, can't have anything above the + XML declaration. My bad. + +2007-02-16 13:26 desrod + + * doc/: 60-libpisock.rules, CodingGuidelines, README, + README.debugging, README.libusb, README.usb, TODO, + xml/Makefile.am, xml/README, xml/catalog.xml.in, + xml/docbook.xsl.in, xml/pilot-link.docbook: Updating some docs to + add the CVS Id header, added README file at the top level to + clarify where things are + +2007-02-16 12:28 desrod + + * configure.ac: Fixes for xsltproc detection. Prior behavior was + reporting a nonsensical error and continuing past it. This should + report a useful error. + +2007-02-16 11:16 desrod + + * pilot-link.m4.in: Fix unbalanced parens and brackets + +2007-02-14 21:18 desrod + + * configure.ac: Fix for bluetooth argument not being properly + passed at configure time. Closes bug #1791 + +2007-02-14 20:01 desrod + + * configure.ac, doc/xml/pilot-xfer.xml: Fixing another XML issue, + how this got back in there post-release, I don't know, but its + fixed and verified now. Also bumped for 0.12.3. + +2007-02-11 15:17 desrod + + * NEWS: Oops! How did I forget to commit this? Bump for 0.12.2 NEWS + items. + +2007-02-09 17:00 desrod + + * configure.ac: Minor BlueZ retrofit + +2007-02-09 15:52 desrod + + * doc/TODO, doc/xml/pilot-ietf2datebook.xml, + doc/xml/pilot-link.xml, src/Makefile.am, src/ietf2datebook.PL, + src/pilot-undelete.PL, src/sync-plan.PL: Updated more userland + namespace issues + +2007-02-09 15:43 desrod + + * bindings/Makefile.am: Hans Meine's fix for building Python in a + sandbox environment ($DESTDIR) + +2007-02-09 15:35 desrod + + * configure.ac: Minor fix for BlueZ output and config.h sanity + +2007-02-09 13:49 desrod + + * ChangeLog: ChangeLog for 0.12.2 + +2007-02-09 12:58 desrod + + * bindings/: README, README.de: More extraneous Java cruft in the + wrong dir, reformatted a README + +2007-02-09 12:28 desrod + + * bindings/: libjpisock.h, test.java: More extraneous Java junk in + the wrong directory + +2007-02-09 12:27 desrod + + * bindings/: Makefile.am, libjpisock.c: I'm not sure why this was + in the bindings directory, it belongs in the Java directory.. + removed. + +2007-02-09 11:16 desrod + + * bindings/Perl/Pilot.xs: Fix for using newSVpvn(buf,size) instead + of newSVpv(buf,size) where necessary. This closes bug 1736 from + Aaron. + +2007-02-09 11:11 desrod + + * include/pi-usb.h: Solaris doesn't directly support uint8_t, + uint16_t and uint32_t.. fixed. + + This closes bug 1759, reported by Jyu. + +2007-02-09 11:06 desrod + + * libpisock/libusb.c: Fix for a missing define for __FUNCTION__ on + Solaris; closes bug 1760 submitted by Jyu. + +2007-02-09 11:01 desrod + + * doc/xml/: pilot-link.xml, pilot-schlep.xml: Small fixes here and + there, just a dab of salt, a pinch of pepper.. + +2007-02-09 10:51 desrod + + * doc/xml/docbook.xsl.in: We're already importing docbook.xsl which + includes xref.xsl and lists.xsl from /html/, there's no reason to + do it twice (closes pilot-link bug 1773). + +2007-02-09 09:24 desrod + + * doc/60-libpisock.rules: Fix for a struct change in upstream udev + from SYSFS to ATTRS. This also closes Debian bug #410152 for the + same issue. + +2007-02-08 12:08 desrod + + * doc/Makefile.am, doc/README.debugging, doc/xml/docbook.xsl.in, + doc/xml/ietf2datebook.xml, doc/xml/pilot-650foto.xml, + doc/xml/pilot-addresses.xml, doc/xml/pilot-clip.xml, + doc/xml/pilot-csd.xml, doc/xml/pilot-debugsh.xml, + doc/xml/pilot-dedupe.xml, doc/xml/pilot-dlpsh.xml, + doc/xml/pilot-file.xml, doc/xml/pilot-foto.xml, + doc/xml/pilot-getram.xml, doc/xml/pilot-getrom.xml, + doc/xml/pilot-ietf2datebook.xml, doc/xml/pilot-getromtoken.xml, + doc/xml/pilot-hinotes.xml, doc/xml/pilot-install-datebook.xml, + doc/xml/pilot-install-expenses.xml, + doc/xml/pilot-install-hinote.xml, doc/xml/pilot-install-memo.xml, + doc/xml/pilot-install-netsync.xml, + doc/xml/pilot-install-todo.xml, doc/xml/pilot-install-todos.xml, + doc/xml/pilot-install-user.xml, doc/xml/pilot-link.xml, + doc/xml/pilot-memos.xml, doc/xml/pilot-nredir.xml, + doc/xml/pilot-read-expenses.xml, doc/xml/pilot-read-ical.xml, + doc/xml/pilot-read-notepad.xml, doc/xml/pilot-read-palmpix.xml, + doc/xml/pilot-read-screenshot.xml, doc/xml/pilot-read-todos.xml, + doc/xml/pilot-read-veo.xml, doc/xml/pilot-reminders.xml, + doc/xml/pilot-schlep.xml, doc/xml/pilot-treofoto.xml, + doc/xml/pilot-wav.xml, doc/xml/pilot-xfer.xml, + include/pi-bluetooth.h, libpisock/bluetooth.c, src/Makefile.am: + Documentation bump for 0.12.2 + +2007-02-08 10:02 desrod + + * doc/CodingGuidelines: Update to add a few minor clarifications + +2007-02-08 09:26 desrod + + * doc/syncabs.sgml: Removing deprecated syncabs information, needs + to be rewritten based on the new changes in the 0.12.x codebase. + +2007-02-06 10:17 desrod + + * libpisock/: libusb.c, usb.c: Fix for a Tungsten X issue. This + will detect that the usb control message send has failed and skip + the interface until the correct one appears, and the usb control + message is successfully send/recieved. + +2007-02-05 12:53 desrod + + * libpisock/Makefile.am: Last-minute fixes for BlueZ support from + Daniel Gollub.. fixes an oopsie in userland conduits + +2007-02-05 12:21 desrod + + * configure.ac, libpisock/Makefile.am: Incorporating Daniel + Gollub's BlueZ patches and fixes + +2007-02-04 20:57 desrod + + * configure.ac: Fix a small issue with libtool not creating + ltmain.sh on a clean checkout + +2007-02-04 20:47 desrod + + * doc/: man/Makefile.am, xml/pilot-read-todos.xml, + xml/pilot-read-veo.xml: Fixing up some doc building issues + +2007-02-04 18:05 desrod + + * doc/man/Makefile.am, doc/xml/ietf2datebook.xml, + doc/xml/install-datebook.xml, doc/xml/install-hinote.xml, + doc/xml/pilot-ietf2datebook.xml, doc/xml/install-memo.xml, + doc/xml/install-netsync.xml, doc/xml/install-todo.xml, + doc/xml/install-todos.xml, doc/xml/install-user.xml, + doc/xml/pilot-650foto.xml, doc/xml/pilot-addresses.xml, + doc/xml/pilot-clip.xml, doc/xml/pilot-csd.xml, + doc/xml/pilot-debugsh.xml, doc/xml/pilot-dedupe.xml, + doc/xml/pilot-dlpsh.xml, doc/xml/pilot-file.xml, + doc/xml/pilot-getram.xml, doc/xml/pilot-getrom.xml, + doc/xml/pilot-getromtoken.xml, doc/xml/pilot-hinotes.xml, + doc/xml/pilot-install-datebook.xml, + doc/xml/pilot-install-expenses.xml, + doc/xml/pilot-install-hinote.xml, doc/xml/pilot-install-memo.xml, + doc/xml/pilot-install-netsync.xml, + doc/xml/pilot-install-todo.xml, doc/xml/pilot-install-todos.xml, + doc/xml/pilot-install-user.xml, doc/xml/pilot-link.docbook, + doc/xml/pilot-link.xml, doc/xml/pilot-memos.xml, + doc/xml/pilot-nredir.xml, doc/xml/pilot-read-expenses.xml, + doc/xml/pilot-read-ical.xml, doc/xml/pilot-read-notepad.xml, + doc/xml/pilot-read-palmpix.xml, + doc/xml/pilot-read-screenshot.xml, doc/xml/pilot-reminders.xml, + doc/xml/pilot-schlep.xml, doc/xml/pilot-treofoto.xml, + doc/xml/pilot-wav.xml, doc/xml/pilot-xfer.xml, + doc/xml/read-expenses.xml, doc/xml/read-ical.xml, + doc/xml/read-notepad.xml, doc/xml/read-palmpix.xml, + doc/xml/read-todos.xml, doc/xml/read-veo.xml, src/Makefile.am, + src/install-datebook.c, src/install-hinote.c, src/install-memo.c, + src/install-netsync.c, src/install-todo.c, src/install-todos.c, + src/install-user.c, src/pilot-install-netsync.c, + src/pilot-read-expenses.c, src/pilot-read-ical.c, + src/pilot-read-notepad.c, src/pilot-read-palmpix.c, + src/pilot-read-todos.c, src/pilot-read-veo.c, + src/read-expenses.c, src/read-ical.c, src/read-notepad.c, + src/read-palmpix.c, src/read-todos.c, src/read-veo.c: More + renaming of userland conduits to avoid namespace pollution, + cleaned the XML manpage sources to align with these changes. + Whew! + +2007-02-04 16:25 desrod + + * doc/: README.libusb, README.usb: Documentation cleanup with + respect to usb and libusb connections. Needed to update and + clarify some minor details reported by users. + +2007-02-04 15:28 desrod + + * configure.ac, bindings/Java/Makefile.am, + doc/xml/ietf2datebook.xml, doc/xml/install-datebook.xml, + doc/xml/install-hinote.xml, doc/xml/install-memo.xml, + doc/xml/install-netsync.xml, doc/xml/install-todo.xml, + doc/xml/install-todos.xml, doc/xml/install-user.xml, + doc/xml/pilot-addresses.xml, doc/xml/pilot-clip.xml, + doc/xml/pilot-debugsh.xml, doc/xml/pilot-dedupe.xml, + doc/xml/pilot-dlpsh.xml, doc/xml/pilot-file.xml, + doc/xml/pilot-foto.xml, doc/xml/pilot-getram.xml, + doc/xml/pilot-getrom.xml, doc/xml/pilot-getromtoken.xml, + doc/xml/pilot-hinotes.xml, doc/xml/pilot-ietf2datebook.xml, + doc/xml/pilot-install-datebook.xml, + doc/xml/pilot-install-expenses.xml, + doc/xml/pilot-install-hinote.xml, doc/xml/pilot-install-memo.xml, + doc/xml/pilot-install-netsync.xml, + doc/xml/pilot-install-todo.xml, doc/xml/pilot-install-todos.xml, + doc/xml/pilot-install-user.xml, doc/xml/pilot-link.xml, + doc/xml/pilot-memos.xml, doc/xml/pilot-read-expenses.xml, + doc/xml/pilot-read-ical.xml, doc/xml/pilot-read-notepad.xml, + doc/xml/pilot-read-palmpix.xml, + doc/xml/pilot-read-screenshot.xml, doc/xml/pilot-read-todos.xml, + doc/xml/pilot-schlep.xml, doc/xml/pilot-treofoto.xml, + doc/xml/pilot-wav.xml, doc/xml/pilot-xfer.xml, + doc/xml/read-expenses.xml, doc/xml/read-ical.xml, + doc/xml/read-notepad.xml, doc/xml/read-palmpix.xml, + doc/xml/read-todos.xml, doc/xml/pilot-read-veo.xml, + doc/xml/read-veo.xml, include/pi-contact.h, libpisock/contact.c: + 1. Updated some of the manpages (more to come) 2. Fixed a DESTDIR + problem in bindings/Java/Makefile.am (thanks Hans Meine!) 3. + Fixed up a problem with Python detection (thanks Nicholas Piper + and Hans Meine) 4. Other miscellaneous cleanup as necessary + +2007-02-02 06:55 desrod + + * libpisock/Makefile.am: Minor fix for building with bluetooth + support, was missing a source file declaration. + +2007-02-02 06:35 desrod + + * configure.ac, pilot-link.m4.in, src/pilot-dlpsh.c: Minor tweaks + and fixes here and there.. trying to figure out a bluetooth + autoconf issue, still unresolved. + +2007-01-19 14:30 fpillet + + * libpisock/Makefile.am: missing WITH_BLUEZ test + +2007-01-15 01:11 desrod + + * src/pilot-addresses.c: Fixed a minor typo, closes bug #1745 + (thanks Ludovic!) + +2007-01-10 09:07 fpillet + + * configure.ac, include/pi-bluetooth.h, libpisock/bluetooth.c: + Applied dgollub's fix for BlueZ support. Fixes building + pilot-link on Mac OS X + +2006-12-13 11:06 desrod + + * doc/README.usb: oops, minor typo when copying the header from + README.libusb back in + +2006-11-22 17:52 adridg + + * include/pi-address.h, include/pi-appinfo.h, + include/pi-datebook.h, include/pi-memo.h, include/pi-todo.h, + libpisock/address.c, libpisock/appinfo.c, libpisock/datebook.c, + libpisock/memo.c, libpisock/todo.c: Big batch of constness + +2006-11-18 17:43 adridg + + * libpisock/Makefile.am: WITH_BLUEZ is not defined as a + conditional, so automake 1.9.6 barfs on it. Remove it for now, + since there's no way to get BLUEZ defined. + +2006-11-09 05:26 fpillet + + * libpisock/darwinusb.c: forgot to undefine DEBUG_USB -- otherwise + you get LOTS of traces + +2006-11-09 04:42 fpillet + + * libpisock/darwinusb.c: Added support for high-speed USB devices + (large packet sizes, 512 bytes). Somehow, with some versions of + OS X on Intel Macs and depending on the machine the bulk packet + maxsize may be bigger than 64. In this case the previous code was + getting data overruns when reading. + +2006-11-07 16:13 adridg + + * libpisock/: cmp.c, expense.c, socket.c: Warning suppression: use + (void) foo for unused parameters foo [which demonstrates that + expense packing and unpacking has interesting possible buffer + overflows]; initialize the uninitialized; #if 0 unused debugging + functions. (KPilot r. 502) + +2006-11-07 15:42 adridg + + * include/pi-address.h, libpisock/address.c, libpisock/dlp.c, + libpisock/socket.c: Typedef the Address fields enum so it has a + name; add constness to some pack/unpack functions; remove C++ + style comments from C code. (KPilot r.500) + +2006-11-07 04:05 fpillet + + * libpisock/socket.c: Fix for RAW mode: protocol_queue_build was + trying to build the protocol stack even though RAW mode is not + supposed to have one + +2006-11-07 04:03 fpillet + + * libpisock/darwinusb.c: Fix to support PPP connections over USB: + recognize ppp_ function for USB endpoints + +2006-11-02 09:54 desrod + + * src/: Makefile.am, pilot-read-screenshot.c: Removed conflicting + option (-t == timeout, not type). Will clean up further. + +2006-11-02 09:40 desrod + + * configure.ac, doc/man/Makefile.am, doc/xml/pilot-link.docbook, + doc/xml/pilot-link.xml, doc/xml/pilot-read-screenshot.xml, + doc/xml/read-screenshot.xml, src/Makefile.am: Screenshot renaming + to avoid namespace pollution + +2006-11-02 09:34 desrod + + * src/: pilot-read-screenshot.c, read-screenshot.c: Renamed + read-screenshot to avoid some namespace pollution + +2006-10-17 09:24 desrod + + * ChangeLog, doc/README.debugging, doc/README.libusb, + doc/README.usb, doc/man/Makefile.am, doc/xml/ietf2datebook.xml, + doc/xml/install-datebook.xml, doc/xml/install-hinote.xml, + doc/xml/install-memo.xml, doc/xml/install-netsync.xml, + doc/xml/install-todo.xml, doc/xml/install-todos.xml, + doc/xml/install-user.xml, doc/xml/pilot-650foto.xml, + doc/xml/pilot-addresses.xml, doc/xml/pilot-clip.xml, + doc/xml/pilot-csd.xml, doc/xml/pilot-debugsh.xml, + doc/xml/pilot-dedupe.xml, doc/xml/pilot-dlpsh.xml, + doc/xml/pilot-file.xml, doc/xml/pilot-foto.xml, + doc/xml/pilot-getram.xml, doc/xml/pilot-getrom.xml, + doc/xml/pilot-getromtoken.xml, doc/xml/pilot-hinotes.xml, + doc/xml/pilot-ietf2datebook.xml, + doc/xml/pilot-install-datebook.xml, + doc/xml/pilot-install-expenses.xml, + doc/xml/pilot-install-hinote.xml, doc/xml/pilot-install-memo.xml, + doc/xml/pilot-install-netsync.xml, + doc/xml/pilot-install-todo.xml, doc/xml/pilot-install-todos.xml, + doc/xml/pilot-install-user.xml, doc/xml/pilot-link.xml, + doc/xml/pilot-memos.xml, doc/xml/pilot-nredir.xml, + doc/xml/pilot-read-expenses.xml, doc/xml/pilot-read-ical.xml, + doc/xml/pilot-read-notepad.xml, doc/xml/pilot-read-palmpix.xml, + doc/xml/pilot-read-screenshot.xml, doc/xml/pilot-read-todos.xml, + doc/xml/pilot-read-veo.xml, doc/xml/pilot-reminders.xml, + doc/xml/pilot-schlep.xml, doc/xml/pilot-treofoto.xml, + doc/xml/pilot-wav.xml, doc/xml/pilot-xfer.xml, + doc/xml/read-expenses.xml, doc/xml/read-ical.xml, + doc/xml/read-notepad.xml, doc/xml/read-palmpix.xml, + doc/xml/read-screenshot.xml, doc/xml/read-todos.xml, + doc/xml/read-veo.xml, include/pi-address.h, include/pi-appinfo.h, + include/pi-args.h, include/pi-buffer.h, include/pi-cmp.h, + include/pi-contact.h, include/pi-datebook.h, include/pi-debug.h, + include/pi-dlp.h, include/pi-error.h, include/pi-expense.h, + include/pi-file.h, include/pi-foto.h, include/pi-header.h, + include/pi-hinote.h, include/pi-inet.h, include/pi-macros.h, + include/pi-mail.h, include/pi-md5.h, include/pi-memo.h, + include/pi-money.h, include/pi-net.h, include/pi-notepad.h, + include/pi-padp.h, include/pi-palmpix.h, include/pi-serial.h, + include/pi-slp.h, include/pi-sockaddr.h, include/pi-socket.h, + include/pi-source.h, include/pi-sync.h, include/pi-sys.h, + include/pi-syspkt.h, include/pi-threadsafe.h, include/pi-todo.h, + include/pi-usb.h, include/pi-userland.h, include/pi-util.h, + include/pi-veo.h, include/pi-versamail.h, src/install-hinote.c, + src/install-memo.c, src/pilot-install-hinote.c, + src/pilot-install-memo.c: This is what you do when your flight + gets delayed several hours... just some general cleanup and + maintenance housecleaning. + +2006-10-16 13:57 fpillet + + * libpisock/socket.c: Following Matt Davey's advice on bluetooth: + support: only allow the keyword to be used when bluetooth support + is being linked in + +2006-10-16 13:46 fpillet + + * libpisock/socket.c: Fixed port string matching for bt:/bluetooth: + (thanks Matt) + +2006-10-13 13:36 fpillet + + * include/pi-bluetooth.h, libpisock/bluetooth.c, + include/Makefile.am, libpisock/Makefile.am, libpisock/socket.c: + Linux bluetooth support (Bluez) contributed by Bastien Nocera + +2006-10-13 05:56 fpillet + + * libpisock/socket.c: commented out the pi_dumpdata() call in + protocol detection as I only use it for debugging this part + +2006-10-13 05:52 fpillet + + * libpisock/: dlp.c, socket.c: dlp_ReadSysInfo() now updates the + socket's dlpVersion and maxrecsize. We don't issue a separate + dlp_ReadSysInfo() from pi_version() anymore as it can cause big + trouble if called from within a DLP call. Tweaked pi_version(), + and also tweaked protocol detection again for more accurate + serial / bluetooth protocol detection + +2006-10-13 05:52 fpillet + + * libpisock/: padp.c, slp.c: better logging for debug in padp/slp + +2006-10-12 10:21 desrod + + * src/install-datebook.c, src/install-hinote.c, src/install-memo.c, + src/install-netsync.c, src/install-todo.c, src/install-todos.c, + src/pilot-install-datebook.c, src/pilot-install-hinote.c, + src/pilot-install-memo.c, src/pilot-install-netsync.c, + src/pilot-install-todo.c, src/pilot-install-todos.c, + src/install-user.c, src/kittykiller.c, src/pd-tty.c, + src/pilot-650foto.c, src/pilot-addresses.c, src/pilot-clip.c, + src/pilot-csd.c, src/pilot-debug.c, src/pilot-debugsh.c, + src/pilot-dedupe.c, src/pilot-dlpsh.c, src/pilot-file.c, + src/pilot-foto-treo600.c, src/pilot-foto-treo650.c, + src/pilot-foto.c, src/pilot-getram.c, src/pilot-getrom.c, + src/pilot-getromtoken.c, src/pilot-hinotes.c, + src/pilot-install-expenses.c, src/pilot-install-user.c, + src/pilot-memos.c, src/pilot-nredir.c, src/pilot-port.c, + src/pilot-read-expenses.c, src/pilot-read-ical.c, + src/pilot-read-notepad.c, src/pilot-reminders.c, + src/pilot-schlep.c, src/pilot-treofoto.c, src/pilot-wav.c, + src/pilot-xfer.c, src/plu_args.c, src/read-expenses.c, + src/read-ical.c, src/read-notepad.c, libpisock/address.c, + libpisock/appinfo.c, libpisock/cmp.c, libpisock/connect.c, + libpisock/contact.c, libpisock/darwinusb.c, libpisock/datebook.c, + libpisock/debug.c, libpisock/dlp.c, libpisock/expense.c, + libpisock/freebsdusb.c, libpisock/hinote.c, libpisock/inet.c, + libpisock/libusb.c, libpisock/linuxusb.c, libpisock/mail.c, + libpisock/md5.c, libpisock/memo.c, libpisock/money.c, + libpisock/net.c, libpisock/notepad.c, libpisock/os2serial.c, + libpisock/padp.c, libpisock/palmpix.c, libpisock/pi-buffer.c, + libpisock/pi-file.c, libpisock/pi-header.c, libpisock/serial.c, + libpisock/slp.c, libpisock/socket.c, libpisock/sys.c, + src/pilot-read-palmpix.c, src/pilot-read-screenshot.c, + src/pilot-read-todos.c, src/pilot-read-veo.c, src/read-palmpix.c, + src/read-screenshot.c, src/read-todos.c, src/read-veo.c, + src/userland.c, libpisock/syspkt.c, libpisock/threadsafe.c, + libpisock/todo.c, libpisock/unixserial.c, libpisock/usb.c, + libpisock/utils.c, libpisock/veo.c, libpisock/versamail.c: Just + some long-needed CVS house-cleaning.. + +2006-10-12 09:02 fpillet + + * libpisock/: address.c, appinfo.c, cmp.c, connect.c, contact.c, + datebook.c, debug.c, dlp.c, expense.c, freebsdusb.c, hinote.c, + inet.c, libusb.c, linuxusb.c, mail.c, md5.c, memo.c, money.c, + net.c, notepad.c, os2serial.c, padp.c, palmpix.c, pi-buffer.c, + pi-file.c, pi-header.c, serial.c, slp.c, socket.c, sys.c, + syspkt.c, threadsafe.c, todo.c, unixserial.c, usb.c, utils.c, + veo.c, versamail.c: Add CVS Id to all source files, I hate it + when I get an updated file and I don't know which release it + originates from + +2006-10-12 09:01 fpillet + + * libpisock/darwinusb.c: updated comment in USB entry 0830/0061 for + Treo 650 + +2006-10-12 08:32 fpillet + + * libpisock/dlp.c: Integrated Scott Gruby's big record fix: reading + records that have the maximum allowed size could lock up some + devices. We now read maxRecordSize-100 and perform a second read + if the record is large. Also some casts to make compilers happy, + and a safeguard when reading username / password to properly + terminate the strings. + +2006-10-09 12:43 desrod + + * libpisock/usb.c: More sanity to catch both Sony models, including + the NRxx series handhelds + +2006-10-09 12:30 desrod + + * libpisock/usb.c: Minor fix for Sony Clie detection + +2006-09-28 14:43 angusa + + * doc/xml/pilot-650foto.xml: Manual page for pilot-650foto + +2006-09-28 14:38 angusa + + * ChangeLog: [no log message] + +2006-09-28 01:41 angusa + + * src/Makefile.am: Added pilot-650foto + +2006-09-28 01:35 angusa + + * src/: pilot-650foto.c, pilot-foto-treo650.c: Extract treo 650 + photos + +2006-09-21 16:23 warp + + * libpisock/usb.c: Fix a bug where we were looking at + override_device instead of known_device[i]. + + Removed override_device, given that nothing sets it, anywhere. + +2006-09-19 16:11 desrod + + * NEWS, doc/xml/install-expenses.xml, + doc/xml/pilot-install-expenses.xml, doc/xml/pilot-link.docbook, + doc/xml/pilot-link.xml, src/Makefile.am, src/install-expenses.c, + src/pilot-install-expenses.c: More userland renaming to avoid + clobbering any potential future binaries that might use or reuse + the same naming conventions. Still quite a few left to go in + here. + +2006-09-04 15:16 desrod + + * ChangeLog, doc/xml/Makefile.am: Updates for 0.12.1 release + +2006-08-28 20:57 desrod + + * ChangeLog, configure.ac, libpisock/cmp.c, libpisock/padp.c, + src/ccexample.cc, src/install-datebook.c, src/install-expenses.c, + src/install-hinote.c, src/install-memo.c, src/install-netsync.c, + src/install-user.c, src/pilot-install-datebook.c, + src/pilot-install-expenses.c, src/pilot-install-hinote.c, + src/pilot-install-memo.c, src/pilot-install-netsync.c, + src/pilot-install-user.c: More cleanup for 0.12.1 + +2006-08-27 14:51 desrod + + * ChangeLog, include/pi-cmp.h, include/pi-foto.h, + libpisock/darwinusb.c, libpisock/dlp.c, libpisock/freebsdusb.c, + libpisock/inet.c, libpisock/libusb.c, libpisock/linuxusb.c, + tests/dlp-test.c: Minor code cleanup, removing redundant calls to + headers, some minor code docs going into place here. + +2006-08-27 09:47 desrod + + * ChangeLog, configure.ac, doc/Makefile.am, doc/xml/Makefile.am: + Fix for building as a non-root user with udev rules. They now go + into $datadir/pilot-link/udev by default. + +2006-08-26 18:53 desrod + + * NEWS, README, configure.ac, doc/60-libpisock.rules, + doc/README.libusb, doc/xml/Makefile.am: A few more last-minute + tweaks to get 0.12.0 out the door! + +2006-08-25 13:57 desrod + + * configure.ac: Rolling to a .1 in CVS, preparing for a 0.12.0 + release + +2006-08-25 13:52 desrod + + * ChangeLog, configure.ac, doc/Makefile.am, doc/xml/Makefile.am, + m4/xslt.m4, src/prc/Makefile.am: Updated a few things to get + distcheck to function properly. Sigh. + +2006-08-25 11:56 desrod + + * doc/Makefile.am: Remove extra terminating slash + +2006-08-25 11:52 desrod + + * doc/: Makefile.am, libpisock.rules: CVS surgery to rename the + libpisock.rules file to its proper 60-libpisock name per the udev + documentation + +2006-08-25 11:11 desrod + + * src/pilot-xfer.c: Oops, that wasn't supposed to go through, just + a quick test of something new + +2006-08-25 11:09 desrod + + * doc/60-libpisock.rules, doc/Makefile.am, doc/libpisock.rules, + src/pilot-xfer.c: Adding libpisock.rules for the udev/libusb + users who wish to try that + +2006-08-25 10:54 desrod + + * ChangeLog, doc/xml/pilot-dlpsh.xml, include/pi-util.h, + libpisync/util.c, src/pilot-dlpsh.c, src/pilot-xfer.c, + tests/contactsdb-test.c: Some last minute tweaks, and the changes + to facilitate the PILOT_CHARSET to be changed with an environment + variable from the shell at runtime. + +2006-08-25 10:29 desrod + + * doc/xml/: ietf2datebook.xml, install-datebook.xml, + install-expenses.xml, install-hinote.xml, pilot-addresses.xml, + pilot-csd.xml, pilot-dlpsh.xml, pilot-ietf2datebook.xml, + pilot-install-datebook.xml, pilot-install-expenses.xml, + pilot-install-hinote.xml, pilot-getromtoken.xml, + pilot-read-notepad.xml, pilot-read-screenshot.xml, + pilot-read-veo.xml, read-notepad.xml, read-screenshot.xml, + read-veo.xml: More tweaks and pokes for the 0.12.0 release... its + coming soon! + +2006-08-25 10:06 desrod + + * doc/: man/Makefile.am, xml/pilot-debugsh.xml, + xml/pilot-dlpsh.xml, xml/pilot-hinotes.xml, xml/pilot-memos.xml, + xml/pilot-reminders.xml: Some last-minute fixes for the renaming + of the userland binaries + +2006-08-25 09:44 desrod + + * src/: install-user.c, pilot-install-user.c: Quick fix to properly + parse the args as passed in. We were previously ignoring + PILOTPORT in the process. This is a temporary quick-hack fix, and + will be removed and replaced with a more elegant solution later. + +2006-08-25 09:27 desrod + + * doc/xml/: debugsh.xml, dlpsh.xml, hinotes.xml, memos.xml, + pi-csd.xml, pi-getram.xml, pi-getrom.xml, pi-getromtoken.xml, + pi-nredir.xml, pilot-csd.xml, pilot-getram.xml, pilot-getrom.xml, + pilot-getromtoken.xml, pilot-link.docbook, pilot-link.xml, + pilot-nredir.xml, reminders.xml: Cleaned up the documentation to + conform to the userland renaming pass + +2006-08-25 09:26 desrod + + * src/: Makefile.am, debugsh.c, dlpsh.c, hinotes.c, memos.c, + pi-csd.c, pi-getram.c, pi-getrom.c, pi-getromtoken.c, + pi-nredir.c, pi-port.c, pilot-csd.c, pilot-debugsh.c, + pilot-dlpsh.c, pilot-getram.c, pilot-getrom.c, + pilot-getromtoken.c, pilot-hinotes.c, pilot-memos.c, + pilot-nredir.c, pilot-port.c, pilot-reminders.c, reminders.c: + Renamed several userland binaries to avoid clobbering of other + application binaries when installed + +2006-05-31 13:59 desrod + + * ChangeLog, configure.ac, bindings/Perl/Pilot.pm, + bindings/Perl/Pilot.xs, bindings/Python/README, + bindings/Python/setup-standalone.py.in, + bindings/Python/setup.py.in, bindings/Python/src/general-maps.i, + bindings/Python/src/helperfuncs.i, + bindings/Python/src/pi-dlp-maps.i, + bindings/Python/src/pi-error.i, + bindings/Python/src/pi-file-maps.i, + bindings/Python/src/pi-socket-maps.i, doc/man/README, + doc/xml/debugsh.xml, doc/xml/dlpsh.xml, doc/xml/hinotes.xml, + doc/xml/ietf2datebook.xml, doc/xml/install-datebook.xml, + doc/xml/install-expenses.xml, doc/xml/install-hinote.xml, + doc/xml/install-memo.xml, doc/xml/install-netsync.xml, + doc/xml/install-todo.xml, doc/xml/install-todos.xml, + doc/xml/install-user.xml, doc/xml/memos.xml, doc/xml/pi-csd.xml, + doc/xml/pi-getram.xml, doc/xml/pi-getrom.xml, + doc/xml/pi-getromtoken.xml, doc/xml/pi-nredir.xml, + doc/xml/pilot-addresses.xml, doc/xml/pilot-clip.xml, + doc/xml/pilot-csd.xml, doc/xml/pilot-debugsh.xml, + doc/xml/pilot-dedupe.xml, doc/xml/pilot-dlpsh.xml, + doc/xml/pilot-file.xml, doc/xml/pilot-foto.xml, + doc/xml/pilot-getram.xml, doc/xml/pilot-getrom.xml, + doc/xml/pilot-getromtoken.xml, doc/xml/pilot-hinotes.xml, + doc/xml/pilot-ietf2datebook.xml, + doc/xml/pilot-install-datebook.xml, + doc/xml/pilot-install-expenses.xml, + doc/xml/pilot-install-hinote.xml, doc/xml/pilot-install-memo.xml, + doc/xml/pilot-install-netsync.xml, + doc/xml/pilot-install-todo.xml, doc/xml/pilot-install-todos.xml, + doc/xml/pilot-install-user.xml, doc/xml/pilot-memos.xml, + doc/xml/pilot-nredir.xml, doc/xml/pilot-read-expenses.xml, + doc/xml/pilot-read-ical.xml, doc/xml/pilot-read-notepad.xml, + doc/xml/pilot-read-palmpix.xml, + doc/xml/pilot-read-screenshot.xml, doc/xml/pilot-read-todos.xml, + doc/xml/pilot-read-veo.xml, doc/xml/pilot-reminders.xml, + doc/xml/pilot-schlep.xml, doc/xml/pilot-treofoto.xml, + doc/xml/pilot-wav.xml, doc/xml/pilot-xfer.xml, + doc/xml/read-expenses.xml, doc/xml/read-ical.xml, + doc/xml/read-notepad.xml, doc/xml/read-palmpix.xml, + doc/xml/read-screenshot.xml, doc/xml/read-todos.xml, + doc/xml/read-veo.xml, doc/xml/reminders.xml, + libpisock/darwinusb.c, libpisync/sync.c, libpisync/util.c, + m4/socklen.m4, src/debugsh.c, src/dlpsh.c, src/pilot-debugsh.c, + src/pilot-dlpsh.c, src/hinotes.c, src/ietf2datebook.PL, + src/install-datebook.c, src/install-expenses.c, + src/install-hinote.c, src/install-memo.c, src/install-netsync.c, + src/install-todo.c, src/install-todos.c, src/install-user.c, + src/kittykiller.c, src/memos.c, src/pd-tty.c, src/pi-csd.c, + src/pi-getram.c, src/pi-getrom.c, src/pi-getromtoken.c, + src/pi-nredir.c, src/pi-port.c, src/pilot-addresses.c, + src/pilot-clip.c, src/pilot-csd.c, src/pilot-debug.c, + src/pilot-dedupe.c, src/pilot-file.c, src/pilot-foto-treo600.c, + src/pilot-foto.c, src/pilot-getram.c, src/pilot-getrom.c, + src/pilot-getromtoken.c, src/pilot-hinotes.c, + src/pilot-ietf2datebook.pl, src/pilot-install-datebook.c, + src/pilot-install-expenses.c, src/pilot-install-hinote.c, + src/pilot-install-memo.c, src/pilot-install-netsync.c, + src/pilot-install-todo.c, src/pilot-install-todos.c, + src/pilot-install-user.c, src/pilot-memos.c, src/pilot-nredir.c, + src/pilot-port.c, src/pilot-read-expenses.c, + src/pilot-read-ical.c, src/pilot-read-notepad.c, + src/pilot-read-palmpix.c, src/pilot-read-screenshot.c, + src/pilot-read-todos.c, src/pilot-read-veo.c, + src/pilot-reminders.c, src/pilot-schlep.c, src/pilot-treofoto.c, + src/pilot-wav.c, src/pilot-xfer.c, src/plu_args.c, + src/read-expenses.c, src/read-ical.c, src/read-notepad.c, + src/read-palmpix.c, src/read-screenshot.c, src/read-todos.c, + src/read-veo.c, src/reminders.c, src/userland.c, + tests/dlp-test.c, tests/vfs-test.c: Correcting FSF permanent + address in all source files to bring to current. + + This is also reflected in the following GNOME bug entry: + + http://mail.gnome.org/archives/gtk-devel-list/2006-March/msg00087.html + +2006-05-31 13:49 desrod + + * include/: pi-dlp.h, pi-file.h, pi-syspkt.h, pi-threadsafe.h, + pi-versamail.h: Oops, forgot to commit these with the last batch. + Good catch, Nicholas! + +2006-05-24 14:49 desrod + + * libpisock/: dlp.c, expense.c, hinote.c, palmpix.c, pi-file.c, + socket.c, syspkt.c, utils.c, versamail.c: Bunchafixes here, code + cleanup, var renames, some oddball code taken out, fixing up some + globals and other obvious faux pas. + +2006-05-09 16:19 desrod + + * libpisock/serial.c: Minor fix where s_poll returns 0 on success, + and the previous behavior would assume the packet was dropped. + +2006-04-22 11:47 desrod + + * src/pilot-xfer.c: Just adding some notes, so I don't forget what + needs to be added in the next point release. + +2006-04-14 14:52 desrod + + * libpisock/libusb.c: Applied patch from Jijun Yu, fixes issue + #1578 + +2006-04-14 14:50 desrod + + * libpisock/socket.c: Clean up empty else clause + +2006-04-14 14:47 desrod + + * src/pilot-clip.c: Reformatting and some type renaming to avoid + shadowing globals + +2006-04-14 14:46 desrod + + * src/: pi-getrom.c, pilot-getrom.c: Just some minor (very minor) + reformatting of the output. + +2006-04-14 14:43 desrod + + * src/pilot-addresses.c: Added code to exit (for now) when an OS5 + device is found. + +2006-04-14 14:42 desrod + + * src/: pilot-sync-plan.pl, sync-plan.PL: Aaron's patch for bug + 1535. Thanks Aaron! + +2006-04-14 13:16 desrod + + * include/pi-userland.h, libpisock/socket.c, src/memos.c, + src/pilot-memos.c, src/pilot-schlep.c, src/pi-nredir.c, + src/pilot-nredir.c, src/pilot-xfer.c: Minor cleanup to fix some + small buglets and warnings. No Breakage++ + +2006-04-05 14:18 desrod + + * configure.ac: Minor fix when checking xslt in a CVS checked-out + tree + +2006-03-30 14:38 desrod + + * include/pi-socket.h: Minor typo fixed up + +2006-03-30 14:26 desrod + + * include/pi-dlp.h: Minor doc cleanup, fixes doxygen output buglet + +2006-03-24 15:11 desrod + + * bindings/Python/: NEWS, README, src/pisock.py, src/pisock_wrap.c: + Some cleanup in the Python tree + +2006-03-24 15:02 desrod + + * configure.ac, m4/python.m4: A better, cleaner, smaller Python + check. This time we check if the user passes --with-python, THEN + check for Python.h, so we can build the extension. If Python.h is + NOT found, we disable python, even if the user passes the option + to flag it on. + +2006-03-24 14:45 neilw + + * ChangeLog, doc/xml/pilot-schlep.xml: Fix bug 1545, pilot-schlep + summary + +2006-03-24 14:24 neilw + + * ChangeLog, src/memos.c, src/pilot-memos.c: fix typo + +2006-03-24 13:11 desrod + + * ChangeLog: Updated ChangeLog + +2006-03-24 12:58 desrod + + * configure.ac, m4/python.m4: Minor fix for python to check for + Python.h when python is flagged on + +2006-03-17 00:10 desrod + + * src/pilot-sync-plan.pl, src/sync-plan.PL, bindings/Makefile.am: + These slipped through the cracks.. (thanks Aaron for catching me + asleep at the wheel again =) + +2006-03-15 07:44 desrod + + * bindings/Perl/: Makefile.PL.in, Pilot.pm, Pilot.xs: Forgot that + these needed to go with the others. DOH! + +2006-03-14 12:43 desrod + + * ChangeLog, configure.ac: Rolling up ChangeLog and configure.ac in + prep for a 0.12.0 final release + +2006-03-14 12:19 desrod + + * bindings/Java/: MidiMgr.java, test.java, + org/gnu/pilotlink/Record.java: Some minor Java fixes. This needs + a revisit, there are quite a few places in here where some OOP + constructs could keep things much cleaner. + +2006-03-14 11:34 neilw + + * ChangeLog, configure.ac: Use CVS check instead of file check for + manpage build + +2006-03-14 10:58 desrod + + * configure.ac, bindings/Perl/h2xs-pilot-link, m4/xslt.m4: Fixes + for userland conduits, xsltproc checks, and a big Perl commit + (thanks Aaron!) + +2006-02-27 18:22 neilw + + * ChangeLog: ChangeLog + +2006-02-27 18:13 neilw + + * doc/xml/: README, debugsh.xml, dlpsh.xml, hinotes.xml, + install-datebook.xml, install-expenses.xml, install-hinote.xml, + install-memo.xml, install-netsync.xml, install-todo.xml, + install-todos.xml, install-user.xml, memos.xml, pi-csd.xml, + pi-getram.xml, pi-getrom.xml, pi-getromtoken.xml, pi-nredir.xml, + pilot-addresses.xml, pilot-archive.xml, pilot-clip.xml, + pilot-csd.xml, pilot-debugsh.xml, pilot-dedupe.xml, + pilot-dlpsh.xml, pilot-file.xml, pilot-foto.xml, + pilot-getram.xml, pilot-getrom.xml, pilot-getromtoken.xml, + pilot-hinotes.xml, pilot-install-datebook.xml, + pilot-install-expenses.xml, pilot-install-hinote.xml, + pilot-install-memo.xml, pilot-install-netsync.xml, + pilot-install-todo.xml, pilot-install-todos.xml, + pilot-install-user.xml, pilot-memos.xml, pilot-nredir.xml, + pilot-read-expenses.xml, pilot-read-ical.xml, + pilot-read-notepad.xml, pilot-read-palmpix.xml, + pilot-read-screenshot.xml, pilot-read-todos.xml, + pilot-read-veo.xml, pilot-reminders.xml, pilot-schlep.xml, + pilot-treofoto.xml, pilot-wav.xml, pilot-xfer.xml, + read-expenses.xml, read-ical.xml, read-notepad.xml, + read-palmpix.xml, read-screenshot.xml, read-todos.xml, + read-veo.xml, reminders.xml: Update options list handling in each + manpage to a more consistent formatting. + +2006-02-27 18:10 neilw + + * doc/xml/docbook.xsl.in: Fix error reported by doclifter by Eric + Raymond. %r/%p %s + +2006-02-27 18:09 neilw + + * doc/xml/Makefile.am: Remove recursive loop. + +2006-02-27 18:08 neilw + + * configure.ac: Fix test to look for a file, not directory. + Fix the xsltproc check to find Mac OSX stylesheets. + +2006-02-25 10:44 fpillet + + * libpisock/darwinusb.c: removed debug extended USB debug flag for + release + +2006-02-25 10:34 fpillet + + * include/pi-dlp.h: doc typo fixed + +2006-02-23 04:05 fpillet + + * libpisock/pi-file.c: Flags was modified before being initialized, + rendering the code useless + +2006-02-13 09:52 fpillet + + * libpisock/darwinusb.c: tweaks for universal binary (intel / + powerpc) compilation + +2006-02-13 09:51 fpillet + + * libpisock/pi-header.c: updated copyright date range (who knows, + we may release 0.12 before 2007) + +2006-02-13 09:50 fpillet + + * libpisock/cmp.c: removed unused variable cmp_version + +2006-01-26 07:34 fpillet + + * include/pi-userland.h, src/plu_args.c, src/userland.c: Patch + coming from bug #1585: add new timeout option to userland tools + so serial connection timeout issues can be investigated (matt + Davey) + +2006-01-26 06:06 fpillet + + * libpisock/serial.c: Patch for bug #1591 provided by Matt davey + +2006-01-21 16:20 adridg + + * libpisock/: debug.c, memo.c: Reduce warnings: don't assign NULL + to the bytes in a pi_buffer_t, and use the non-deprecated + dumpline() function. + +2006-01-13 09:20 warp + + * libpisock/libusb.c: Work around a change in behavior in the + /proc/bus/usb to /dev/bus/usb change. + +2006-01-02 05:18 fpillet + + * libpisock/darwinusb.c: big scary update: added support for TX and + LifeDrive, initial support for KLSI (not complete yet but + infrastructure is there), reworked the way a connection is + declared live to better cope with clunky PalmOne devices like the + LD + +2005-12-28 03:39 warp + + * libpisock/libusb.c: Fix the index/control_index goof. Deals with + #1577. + +2005-10-19 20:43 warp + + * libpisock/libusb.c: Do this a little more portably. + +2005-10-19 17:37 adridg + + * libpisock/datebook.c: Make documentation match reality. Some time + back, we argued about whether these documentation bits should be + in the header files -- which users of the p-l API can see -- or + hidden in the C files. Was there ever a resolution of that? + +2005-10-17 20:40 warp + + * libpisock/libusb.c: Fix a rare buffer leak in the libusb code. + + Put in an evil kluge for the case where we have a close, but the + read call is wedged. + +2005-10-17 17:53 warp + + * libpisock/usb.c: Er, try this. + +2005-10-17 17:47 warp + + * libpisock/usb.c: Try to make the connect interface actually + function with the usb backend. No promises that it actually + _does_ though. + +2005-10-17 16:14 adridg + + * include/pi-args.h, include/pi-buffer.h, include/pi-cmp.h, + include/pi-contact.h, include/pi-debug.h, include/pi-dlp.h, + include/pi-error.h, include/pi-file.h, include/pi-header.h, + include/pi-inet.h, include/pi-macros.h, include/pi-net.h, + include/pi-padp.h, include/pi-serial.h, include/pi-slp.h, + include/pi-sockaddr.h, include/pi-socket.h, include/pi-source.h, + include/pi-sync.h, include/pi-sys.h, include/pi-syspkt.h, + include/pi-threadsafe.h, include/pi-usb.h, include/pi-userland.h, + include/pi-util.h, libpisock/address.c, libpisock/appinfo.c, + libpisock/cmp.c, libpisock/connect.c, libpisock/contact.c, + libpisock/darwinusb.c, libpisock/datebook.c, libpisock/debug.c, + libpisock/dlp.c, libpisock/expense.c, libpisock/freebsdusb.c, + libpisock/hinote.c, libpisock/inet.c, libpisock/libusb.c, + libpisock/linuxusb.c, libpisock/mail.c, libpisock/md5.c, + libpisock/memo.c, libpisock/money.c, libpisock/net.c, + libpisock/notepad.c, libpisock/os2serial.c, libpisock/padp.c, + libpisock/palmpix.c, libpisock/pi-buffer.c, libpisock/pi-file.c, + libpisock/pi-header.c, libpisock/serial.c, libpisock/slp.c, + libpisock/socket.c, libpisock/sys.c, libpisock/syspkt.c, + libpisock/threadsafe.c, libpisock/todo.c, libpisock/unixserial.c, + libpisock/usb.c, libpisock/utils.c, libpisock/veo.c, + libpisock/versamail.c: Fix the address of the FSF in lots (but + surely not all) places. + +2005-10-10 17:06 adridg + + * libpisock/dlp.c: Also #define TraceX to empty when no debug + +2005-10-10 16:58 adridg + + * libpisock/dlp.c: Typo - what's a ; doing there? + +2005-10-10 16:57 adridg + + * libpisock/freebsdusb.c: CONBK is deprecated and gone + +2005-10-10 16:52 adridg + + * include/pi-sys.h: Fix include guard for cases where you want + syspkt and sys.h + +2005-08-27 05:17 fpillet + + * libpisock/padp.c: Integrated fix provided by Marcelo Jimenez: + padp's freeze_txid was not initialized + +2005-08-17 11:12 desrod + + * ChangeLog, configure.ac, bindings/Java/Makefile.am, + bindings/Java/libjpisock.c, libpisock/usb.c: Fixing up some java + compilation problems on gcj (Bernhard Rosenkraenzer) + +2005-08-16 12:57 desrod + + * src/pilot-xfer.c: Clean out an extra double-free that crashes on + merge() (resolves #1529 from 'than') + +2005-07-20 18:13 fpillet + + * libpisock/darwinusb.c: Reset the data toggle on error, it helps + with some lockups on T5 and probably other devices + +2005-07-20 08:17 fpillet + + * libpisock/serial.c: Missing local variable definition + +2005-07-20 06:15 fpillet + + * libpisock/serial.c: shield against losing the first packet in + serial + +2005-07-20 06:13 fpillet + + * libpisock/socket.c: log invalid protocol in socket.c + +2005-07-20 06:13 fpillet + + * libpisock/unixserial.c: minor fix to unixserial + +2005-07-20 06:08 fpillet + + * libpisock/dlp.c: tweaked dlp_CallApplication logs + +2005-07-13 17:42 desrod + + * ChangeLog, libpisock/linuxusb.c: Oops, missed two last CONBK + calls. Fixed. + +2005-07-06 12:26 fpillet + + * bindings/Python/src/pi-file-maps.i: oops.. left a minor error + there + +2005-07-06 12:26 fpillet + + * bindings/Python/src/pi-file-maps.i: allow other threads to run + while dlp_FindDB performs its duty + +2005-07-06 12:25 fpillet + + * include/pi-file.h, libpisock/pi-file.c: Don't use a temporary + file for pi_file creation anymore. Instead, we use a pi_buffer_t* + which both is faster and makes more sense (and also because I + discovered that Python doesn't like tmpfile() being used, for + some reason) + +2005-07-06 06:03 fpillet + + * libpisock/darwinusb.c: updated to new defines from pi-source.h + +2005-07-05 17:11 desrod + + * ChangeLog, include/pi-dlp.h, include/pi-source.h, + include/pi-versamail.h, libpisock/dlp.c, libpisock/inet.c, + libpisock/libusb.c, libpisock/net.c, libpisock/padp.c, + libpisock/serial.c, libpisock/socket.c, libpisock/unixserial.c, + libpisock/usb.c, libpisock/versamail.c, src/pi-nredir.c, + src/pilot-nredir.c, src/plu_args.c, src/userland.c: Bright + lights! Bright lights! Just closing some shadowed globals.. + + The other bit might break things temporarily, but it keeps the + names clean and informative when being read. Other smallish fixes + here. Builds clean. + +2005-07-05 15:49 desrod + + * libpisock/socket.c: Removing extraneous pi_dumpdata() call + +2005-07-05 15:43 desrod + + * ChangeLog, bindings/Perl/Makefile.PL.in: Fixing up a divide by + zero error (and updating ChangeLog) + +2005-07-04 09:12 fpillet + + * libpisock/darwinusb.c: Fixed a bug that could keep disconnected + entry stay in the list forever if deconnection occured during + u_poll(Ã) + +2005-07-04 05:03 fpillet + + * libpisock/socket.c: Fixed protocol detection for cases where + unixserial (with USB handhelds) is losing the first 6 bytes sent + by the device + +2005-07-03 17:40 neilw + + * doc/Makefile.am: removing README.freebsd from make dist now that + it has been removed from CVS + +2005-07-03 14:41 neilw + + * ChangeLog, configure.ac, doc/Makefile.am: improving conditional + xsltproc manpage builds + +2005-06-28 14:13 desrod + + * bindings/Perl/Makefile.PL.in: + Attempt to fix and close issue #900. Still need to poke at this a + bit more to get the other macros supported (MANDIR, DATADIR, + BINDIR, and so on). + +2005-06-28 13:40 desrod + + * ChangeLog, include/pi-address.h, include/pi-appinfo.h, + include/pi-datebook.h, include/pi-memo.h, include/pi-todo.h, + libpisync/sync.c: Update tree to handle more consistant C++ and + preprocessor behavior for authors that are using C++ to talk to + our API. + +2005-06-28 13:31 fpillet + + * libpisock/: address.c, contact.c, datebook.c, todo.c: Loosened + checks on pi_buffer_t, fixes bug #1508 + +2005-06-26 14:41 desrod + + * libpisock/address.c: Fixup for writing garbage memory to Palm, + resolves #1509 from Mark G. Adams + +2005-06-26 14:23 desrod + + * bindings/Perl/Pilot.xs: Added warning fixes from Aaron Kaplan + (closes issue #1499) + +2005-06-23 10:13 desrod + + * ChangeLog: Updated ChangeLog + +2005-06-23 09:57 desrod + + * src/: pilot-read-palmpix.c, read-palmpix.c: Minor patch from + Goffredo to write out the file with + the same date and time as the photo itself. + +2005-06-22 08:28 fpillet + + * libpisock/linuxusb.c: linuxusb doesn't implement + wait_for_device() + +2005-06-22 07:40 fpillet + + * include/pi-usb.h, libpisock/libusb.c, libpisock/usb.c: renamed + poll_device() to wait_for_device() + +2005-06-22 07:39 fpillet + + * libpisock/darwinusb.c: Fixed an issue I introduced recently with + the matching notification not being properly armed. Added support + for the new wait_for_device() semantics. + +2005-06-21 14:06 desrod + + * doc/xml/: dlpsh.xml, hinotes.xml, ietf2datebook.xml, + install-datebook.xml, install-expenses.xml, install-hinote.xml, + install-memo.xml, install-netsync.xml, install-todo.xml, + install-user.xml, memos.xml, pi-getram.xml, pi-getrom.xml, + pilot-dlpsh.xml, pilot-foto.xml, pilot-getram.xml, + pilot-getrom.xml, pilot-hinotes.xml, pilot-ietf2datebook.xml, + pilot-install-datebook.xml, pilot-install-expenses.xml, + pilot-install-hinote.xml, pilot-install-memo.xml, + pilot-install-netsync.xml, pilot-install-todo.xml, + pilot-install-user.xml, pilot-memos.xml, pilot-read-expenses.xml, + pilot-read-ical.xml, pilot-read-notepad.xml, + pilot-read-palmpix.xml, read-expenses.xml, read-ical.xml, + read-notepad.xml, read-palmpix.xml: Minor adjustments to correct + attribution on manpages + +2005-06-21 13:54 desrod + + * doc/xml/: debugsh.xml, dlpsh.xml, hinotes.xml, ietf2datebook.xml, + install-datebook.xml, install-expenses.xml, install-hinote.xml, + install-memo.xml, install-netsync.xml, install-todo.xml, + install-todos.xml, install-user.xml, memos.xml, pi-csd.xml, + pi-getram.xml, pi-getrom.xml, pi-getromtoken.xml, pi-nredir.xml, + pilot-addresses.xml, pilot-archive.xml, pilot-clip.xml, + pilot-csd.xml, pilot-debugsh.xml, pilot-dedupe.xml, + pilot-dlpsh.xml, pilot-file.xml, pilot-foto.xml, + pilot-getram.xml, pilot-getrom.xml, pilot-getromtoken.xml, + pilot-hinotes.xml, pilot-ietf2datebook.xml, + pilot-install-datebook.xml, pilot-install-expenses.xml, + pilot-install-hinote.xml, pilot-install-memo.xml, + pilot-install-netsync.xml, pilot-install-todo.xml, + pilot-install-todos.xml, pilot-install-user.xml, pilot-link.xml, + pilot-memos.xml, pilot-nredir.xml, pilot-read-expenses.xml, + pilot-read-ical.xml, pilot-read-notepad.xml, + pilot-read-palmpix.xml, pilot-read-screenshot.xml, + pilot-read-todos.xml, pilot-read-veo.xml, pilot-reminders.xml, + pilot-schlep.xml, pilot-treofoto.xml, pilot-wav.xml, + pilot-xfer.xml, read-expenses.xml, read-ical.xml, + read-notepad.xml, read-palmpix.xml, read-screenshot.xml, + read-todos.xml, read-veo.xml, reminders.xml: More cleanup, + reformatted the manpages to try to unify the structure a bit, so + they can be further templated out at a later time. + +2005-06-21 10:37 desrod + + * configure.ac: Oops... was testing something and it slipped + through. + +2005-06-21 10:35 desrod + + * doc/README.debugging, doc/README.freebsd, doc/README.usb, + doc/TODO, doc/doxygen.cfg.in, doc/doxygen_main_page.c, + doc/dox/doxygen.css, doc/dox/footer.html, doc/dox/header.html, + libpisock/socket.c: Documentation fixes, doxygen fixes, minor + peeks and pokes here and there. + +2005-06-21 09:28 neilw + + * Makefile.am, doc/Makefile.am: Ooops! copied the Makefile into the + parent folder + +2005-06-21 09:07 desrod + + * Makefile.am, configure.ac, doc/Makefile.am, doc/README.debugging, + doc/doxygen.cfg.in: Fixing up some build breakage for building + manpages from XML targets + +2005-06-21 05:58 neilw + + * ChangeLog, Makefile.am, configure.ac: skip xml build when not + from CVS + +2005-06-21 03:41 neilw + + * ChangeLog, configure.ac, doc/.cvsignore, doc/Makefile.am, + doc/doxygen.cfg.in, doc/doxygen_main_page.c, doc/man/Makefile.am, + doc/man/README, doc/man/addresses.1.in, doc/man/debugsh.1.in, + doc/man/dlpsh.1.in, doc/man/hinotes.1.in, + doc/man/ietf2datebook.1.in, doc/man/install-datebook.1.in, + doc/man/install-expenses.1.in, doc/man/install-hinote.1.in, + doc/man/install-memo.1.in, doc/man/install-netsync.1.in, + doc/man/install-todo.1.in, doc/man/install-todos.1.in, + doc/man/install-user.1.in, doc/man/memos.1.in, + doc/man/pi-csd.1.in, doc/man/pi-getram.1.in, + doc/man/pi-getrom.1.in, doc/man/pi-getromtoken.1.in, + doc/man/pi-nredir.1.in, doc/man/pilot-addresses.1.in, + doc/man/pilot-archive.1.in, doc/man/pilot-clip.1.in, + doc/man/pilot-dedupe.1.in, doc/man/pilot-file.1.in, + doc/man/pilot-foto.1.in, doc/man/pilot-link.7.in, + doc/man/pilot-schlep.1.in, doc/man/pilot-treofoto.1.in, + doc/man/pilot-wav.1.in, doc/man/pilot-xfer.1.in, + doc/man/read-expenses.1.in, doc/man/read-ical.1.in, + doc/man/read-notepad.1.in, doc/man/read-palmpix.1.in, + doc/man/read-screenshot.1.in, doc/man/read-todos.1.in, + doc/man/read-veo.1.in, doc/man/reminders.1.in, + doc/xml/.cvsignore, doc/xml/Makefile.am, doc/xml/README, + doc/xml/catalog.xml.in, doc/xml/docbook.xsl.in, + doc/xml/install-todos.xml, doc/xml/pilot-foto.xml, + doc/xml/pilot-install-todos.xml, doc/xml/pilot-link.docbook, + doc/xml/pilot-read-screenshot.xml, doc/xml/pilot-read-veo.xml, + doc/xml/pilot-schlep.xml, doc/xml/pilot-treofoto.xml, + doc/xml/pilot-wav.xml, doc/xml/read-screenshot.xml, + doc/xml/read-veo.xml: Auto-generation of manpages using xsltproc, + only in CVS builds + +2005-06-17 09:49 desrod + + * src/: install-netsync.c, pilot-install-netsync.c: Fixed fubar'd + example + +2005-06-17 06:38 warp + + * include/pi-usb.h, libpisock/libusb.c, libpisock/usb.c: Add + poll_device to the USB implementation structure, along with code + to call it if it's set in usb.c. + + Move some code around in libusb.c (and add a bit of new code) to + support poll_device, we will now loop trying to find a device + instead of dying if none exists. + + Fix a minor bug in libusb's read loop dealing with timeout + amounts. + +2005-06-17 06:34 fpillet + + * libpisock/libusb.c: changed some protos, return + PI_ERR_SOCK_DISCONNECTED when needed + +2005-06-17 06:22 fpillet + + * libpisock/utils.c, include/pi-util.h: Added + pi_timeout_to_timespec(), pi_timespec_to_timeout() and + pi_timeout_expired() functions + +2005-06-17 05:40 fpillet + + * include/pi-cmp.h: added type for extended CMP packets (not + supported yet) + +2005-06-16 17:53 fpillet + + * libpisock/socket.c: Left a bad bug: buffer wasn't clear before + re-peeking to the message + +2005-06-16 17:21 fpillet + + * libpisock/socket.c: Loosened rules for recognizing NET packets so + that it works on Linux even if we missed the initial packet + +2005-06-16 11:42 desrod + + * src/: debugsh.c, pilot-debugsh.c: Fixed minor typo... oops! + +2005-06-16 06:05 fpillet + + * libpisock/: darwinusb.c, inet.c, serial.c: propagate PADP long + packet format support + +2005-06-16 05:24 fpillet + + * libpisock/cmp.c, libpisock/darwinusb.c, libpisock/usb.c, + include/pi-cmp.h, include/pi-socket.h: more work on the long + packet thing + +2005-06-16 05:23 fpillet + + * libpisock/padp.c, include/pi-padp.h: moving towards full support + for long packet format both ways, fixed a long packet fmt issue + +2005-06-15 10:09 fpillet + + * darwin/build_framework.sh, include/pi-header.h, + include/pi-padp.h, libpisock/contact.c, libpisock/dlp.c, + libpisock/libusb.c, libpisock/net.c, libpisock/sys.c, + src/debugsh.c, src/install-memo.c, src/install-todos.c, + src/pi-csd.c, src/pi-getrom.c, src/pi-port.c, src/pilot-csd.c, + src/pilot-debug.c, src/pilot-debugsh.c, src/pilot-getrom.c, + src/pilot-install-memo.c, src/pilot-install-todos.c, + src/pilot-port.c, src/pilot-read-expenses.c, src/read-expenses.c, + tests/packers.c, tests/vfs-test.c: use pi_dumpdata() instead of + dumpdata(). Some cleanup for compilation warnings. + +2005-06-15 10:08 fpillet + + * libpisock/darwinusb.c: ongoing KLSI work + +2005-06-15 10:07 fpillet + + * libpisock/cmp.c, libpisock/serial.c, libpisock/slp.c, + libpisock/usb.c, include/pi-cmp.h, include/pi-serial.h, + libpisock/padp.c, libpisock/unixserial.c: Factored out the code + to read PILOTRATE. Changed some protos so as to take an int for + the speed (use speed_t only when converting to a speed_t value + for Linux). More general cleanup + +2005-06-15 10:06 fpillet + + * include/pi-debug.h, include/pi-source.h, include/pi-util.h, + libpisock/debug.c, libpisock/utils.c: dumpdata() and dumpline() + become pi_dumpdata() and pi_dumpline(). Provide wrappers with the + old names for compatibility + +2005-06-15 03:21 fpillet + + * include/pi-util.h, libpisock/utils.c: Factored out get_pilot_rate + function; slight code reorg + +2005-06-14 13:39 fpillet + + * doc/README.usb: updated README.usb with Mac OS X instructions + +2005-06-14 12:28 fpillet + + * libpisock/cmp.c: advertise same version of CMP than the device + uses + +2005-06-14 12:20 fpillet + + * libpisock/usb.c: change the baudrate if it's not 9600 after CMP + negotiation + +2005-06-14 12:19 fpillet + + * libpisock/slp.c: missing parenthesis + +2005-06-14 12:00 fpillet + + * libpisock/slp.c: SLP code overhaul + +2005-06-14 11:51 fpillet + + * include/pi-slp.h: oops removed dubious define I had added for + testing + +2005-06-14 11:49 fpillet + + * include/: pi-cmp.h, pi-slp.h: Added definition for CMP 1.3 + +2005-06-14 11:48 fpillet + + * libpisock/padp.c: tweaks to PADP + +2005-06-14 10:29 fpillet + + * libpisock/socket.c: tweaked protocol detection again, much + cleaner now + +2005-06-14 10:26 fpillet + + * libpisock/cmp.c: tweaked log messages + +2005-06-14 10:17 fpillet + + * libpisock/darwinusb.c: working klsi support + +2005-06-13 10:15 desrod + + * configure.ac: Tagged tree as -pre4, rolled to -pre5 (which may + become 0.12.0 final!) + +2005-06-13 10:09 fpillet + + * libpisock/linuxusb.c: rx_byte doesn't exist in linuxusb (sorry, + copy/paste syndrome) + +2005-06-13 09:55 desrod + + * libpisock/connect.c: Oops, now they both match.. (are we even + using connect.c anymore, now that we have the same structures in + userland.c? Why the duplication? Will investigate later) + +2005-06-13 09:51 desrod + + * libpisock/connect.c, src/userland.c: Reword a little bit to + more-accurately match the current state of connect action + +2005-06-13 09:31 desrod + + * ChangeLog, configure.ac, doc/man/Makefile.am, doc/man/README, + doc/man/addresses.1.in, doc/man/debugsh.1.in, doc/man/dlpsh.1.in, + doc/man/hinotes.1.in, doc/man/ietf2datebook.1.in, + doc/man/install-datebook.1.in, doc/man/install-expenses.1.in, + doc/man/install-hinote.1.in, doc/man/install-memo.1.in, + doc/man/install-netsync.1.in, doc/man/install-todo.1.in, + doc/man/install-todos.1.in, doc/man/install-user.1.in, + doc/man/memos.1.in, doc/man/money2qif.1.in, doc/man/pi-csd.1.in, + doc/man/pi-getram.1.in, doc/man/pi-getrom.1.in, + doc/man/pi-getromtoken.1.in, doc/man/pi-nredir.1.in, + doc/man/pilot-addresses.1.in, doc/man/pilot-archive.1.in, + doc/man/pilot-clip.1.in, doc/man/pilot-dedupe.1.in, + doc/man/pilot-file.1.in, doc/man/pilot-foto.1.in, + doc/man/pilot-link.7.in, doc/man/pilot-schlep.1.in, + doc/man/pilot-treofoto.1.in, doc/man/pilot-wav.1.in, + doc/man/pilot-xfer.1.in, doc/man/read-expenses.1.in, + doc/man/read-ical.1.in, doc/man/read-notepad.1.in, + doc/man/read-palmpix.1.in, doc/man/read-screenshot.1.in, + doc/man/read-todos.1.in, doc/man/read-veo.1.in, + doc/man/reminders.1.in, doc/xml/addresses.xml, + doc/xml/debugsh.xml, doc/xml/dlpsh.xml, doc/xml/hinotes.xml, + doc/xml/ietf2datebook.xml, doc/xml/install-datebook.xml, + doc/xml/install-expenses.xml, doc/xml/install-hinote.xml, + doc/xml/install-memo.xml, doc/xml/install-netsync.xml, + doc/xml/install-todo.xml, doc/xml/install-todos.xml, + doc/xml/install-user.xml, doc/xml/memos.xml, + doc/xml/money2qif.xml, doc/xml/pi-csd.xml, doc/xml/pi-getram.xml, + doc/xml/pi-getrom.xml, doc/xml/pi-getromtoken.xml, + doc/xml/pi-nredir.xml, doc/xml/pilot-addresses.xml, + doc/xml/pilot-archive.xml, doc/xml/pilot-clip.xml, + doc/xml/pilot-csd.xml, doc/xml/pilot-debugsh.xml, + doc/xml/pilot-dedupe.xml, doc/xml/pilot-dlpsh.xml, + doc/xml/pilot-file.xml, doc/xml/pilot-foto.xml, + doc/xml/pilot-getram.xml, doc/xml/pilot-getrom.xml, + doc/xml/pilot-getromtoken.xml, doc/xml/pilot-hinotes.xml, + doc/xml/pilot-ietf2datebook.xml, + doc/xml/pilot-install-datebook.xml, + doc/xml/pilot-install-expenses.xml, + doc/xml/pilot-install-hinote.xml, doc/xml/pilot-install-memo.xml, + doc/xml/pilot-install-netsync.xml, + doc/xml/pilot-install-todo.xml, doc/xml/pilot-install-todos.xml, + doc/xml/pilot-install-user.xml, doc/xml/pilot-link.xml, + doc/xml/pilot-memos.xml, doc/xml/pilot-nredir.xml, + doc/xml/pilot-read-expenses.xml, doc/xml/pilot-read-ical.xml, + doc/xml/pilot-read-notepad.xml, doc/xml/pilot-read-palmpix.xml, + doc/xml/pilot-read-screenshot.xml, doc/xml/pilot-read-todos.xml, + doc/xml/pilot-read-veo.xml, doc/xml/pilot-reminders.xml, + doc/xml/pilot-schlep.xml, doc/xml/pilot-treofoto.xml, + doc/xml/pilot-wav.xml, doc/xml/pilot-xfer.xml, + doc/xml/read-expenses.xml, doc/xml/read-ical.xml, + doc/xml/read-notepad.xml, doc/xml/read-palmpix.xml, + doc/xml/read-screenshot.xml, doc/xml/read-todos.xml, + doc/xml/read-veo.xml, doc/xml/reminders.xml, libpisock/libusb.c, + src/Makefile.am, src/money2qif.c, src/pilot-reminders.c, + src/reminders.c: Mostly a documentation update, minor fix for + Florent's libusb typo, some deprecated conduits removed from the + tree... more to come. + +2005-06-13 05:34 fpillet + + * libpisock/darwinusb.c: preliminary KLSI adapter support. Not + fully working yet (needs more testing) + +2005-06-13 05:33 fpillet + + * libpisock/libusb.c: init changebaud to NULL for now + +2005-06-13 05:32 fpillet + + * libpisock/usb.c: support for port speed ioctls if the platform + driver supports it + +2005-06-13 05:31 fpillet + + * include/pi-usb.h: added changebaud handler for usb dev, required + to support serial adaptors on platforms where it's not going + through a kernel-emulated tty + +2005-06-13 05:30 fpillet + + * libpisock/slp.c: more readable code, removed unused variable + +2005-06-13 05:29 fpillet + + * libpisock/linuxusb.c: proper implementation for PI_MSG_PEEK, + modeled after unixserial. Log messages harmonization + +2005-06-13 05:28 fpillet + + * libpisock/unixserial.c: harmonized log messages so it's easier to + see what's going on + +2005-06-12 15:35 fpillet + + * libpisock/socket.c: handle case where PILOT_LOG=0 + +2005-06-12 15:24 fpillet + + * libpisock/: socket.c, unixserial.c: two tiny ones + +2005-06-12 15:05 fpillet + + * libpisock/unixserial.c: more log tweaks + +2005-06-12 15:02 fpillet + + * libpisock/: socket.c, unixserial.c: tweaks & more logging + +2005-06-12 14:25 fpillet + + * libpisock/unixserial.c: an endless stream of bug fixes might lead + to eternal happiness + +2005-06-12 14:14 fpillet + + * libpisock/unixserial.c: one more step towards a working + implementation + +2005-06-12 13:59 fpillet + + * libpisock/unixserial.c: Another fix for the PI_MSG_PEEK tricky + issue + +2005-06-12 13:55 fpillet + + * libpisock/socket.c: One more tiny fix for setuid + +2005-06-12 13:38 fpillet + + * libpisock/socket.c: account for incomplete headers (on slow + connection this makes a difference) + +2005-06-12 13:18 fpillet + + * include/pi-dlp.h: removed unused sysFileTSlotDriver define (which + has nothing to do here) and excluded more definitions from SWIG + interfaces as they are for internal use only + +2005-06-12 13:06 fpillet + + * libpisock/unixserial.c: oops forgot prototype + +2005-06-12 13:05 fpillet + + * libpisock/unixserial.c: unixserial didn't properly honor + PI_MSG_PEEK when reading from the readahead buffer + +2005-06-12 13:03 fpillet + + * libpisock/linuxusb.c: Linuxusb didn't properly honor PI_MSG_PEEK + when reading from the readahead buffer + +2005-06-12 13:03 fpillet + + * libpisock/socket.c: Check the txid byte after all + +2005-06-12 12:43 fpillet + + * libpisock/socket.c: More error checking and better readability + for get/setsockopt. Less aggressive protocol detection (do not + check the txid) + +2005-06-12 09:29 desrod + + * bindings/Python/src/pisock_wrap.c: Small cleanup to eliminate a + couple of warnings. + +2005-06-11 05:48 fpillet + + * libpisock/socket.c: shiny new protocol detection code that checks + more than one byte to make sure we don't fallback on the wrong + protocol because of garbage. This also simplifies the protocol + detection loop + +2005-06-09 13:08 fpillet + + * libpisock/syspkt.c: removed unused static RPC_MemCardInfo + +2005-06-09 12:59 desrod + + * src/: pilot-sync-plan.pl, sync-plan.PL: Update sync-plan.PL to + merge with Aaron's changes in bug #1455 and align the API with + the changes in 0.12.x + +2005-06-09 12:59 fpillet + + * libpisock/padp.c: commented out a test that could never work + +2005-06-09 12:44 desrod + + * src/Makefile.am: Oops, forgot one... + +2005-06-09 12:39 fpillet + + * libpisock/socket.c: Tweaked the logs displayed while trying to + identify the connection + +2005-06-09 12:38 fpillet + + * libpisock/net.c: Patch to counter buffer overflows when the + connection is sending garbage (i.e. serial) + +2005-06-09 12:37 desrod + + * src/: pilot-sync-plan.pl, sync-plan.PL: Minor typo fixed + +2005-06-09 10:33 desrod + + * src/pilot-foto.c: This is going to be a big diff, I re-indented + the whole source file a bit, and added a small buffer overflow + patch from Than Ngo at Red Hat. This closes bug #1497 + +2005-06-09 09:42 desrod + + * include/: Makefile.am, pi-address.h, pi-address.hxx, + pi-appinfo.h, pi-appinfo.hxx, pi-datebook.h, pi-datebook.hxx, + pi-dlp.hxx, pi-memo.h, pi-memo.hxx, pi-todo.h, pi-todo.hxx: + Purged the final bits of libpisock++ from the tree + +2005-06-09 05:57 fpillet + + * darwin/build_framework.sh: Build for PPC only for now, until I + figure out all the issues with building a FAT framework + +2005-06-07 08:34 adridg + + * doc/man/install-memo.1.in, src/install-memo.c, + src/pilot-install-memo.c: Deal with recent report by making + install-memo able to install more than one memo; this hasn't been + tested yet. + +2005-06-07 08:32 adridg + + * include/pi-todo.hxx: Remove use of memset so we don't need an + extra header + +2005-06-06 12:10 desrod + + * Makefile.am, configure.ac, include/Makefile.am, src/Makefile.am: + Updated to cleanly purge CXX* and libpisock++ from the tree + +2005-06-05 09:14 fpillet + + * configure.ac: Include CoreFoundation framework when compiling on + Darwin. Fixes link issues on some layouts of the development + system + +2005-06-05 09:13 fpillet + + * libpisock/dlp.c: removed unused Expect macro + +2005-06-03 14:42 desrod + + * configure.ac, m4/tcl.m4, m4/vl_lib_readline.m4: Disable C++ by + default, auto-detect if enalbed with --with-cxx. Also clean up + some formatting of the --help output, need more consistency in + the macros as these get moved into separate .m4 files under ./m4/ + +2005-06-03 10:14 desrod + + * ChangeLog: Updated ChangeLog to current.. + +2005-06-03 06:57 fpillet + + * libpisock/libusb.c: Fix for bug #1483: the mutex wasn't being + released on premature function return + +2005-06-03 06:46 fpillet + + * bindings/Python/src/: pi-dlp-maps.i, pi-file-maps.i, pisock.i, + pisock_wrap.c: Added mapping for dlp_ExpSlotEnumerate. Fixed + pi-file-maps.i so that the C code is inserted with the rest of + the wrapper code, fixing compilation issues with GCC 4 (and some + GCC 3 warnings). + +2005-06-03 04:15 fpillet + + * bindings/Makefile.am: Fix for bug #1478: the --root option passed + to setup.py was confusing the installer. Removing it fixes the + problem. + +2005-06-02 12:23 fpillet + + * bindings/Python/src/pisock_wrap.c: updated pisock_wrap + +2005-06-02 12:21 fpillet + + * bindings/Python/src/: pi-error.i, pi-file-maps.i, pisock.py, + pisock_wrap.c: Fixed incorrect code that would crash the Python + interpreter on error + +2005-06-01 20:17 desrod + + * doc/TODO: Minor updates to bring TODO to "mostly current", still + more to go.. + +2005-06-01 05:09 fpillet + + * src/pilot-xfer.c: Added PACE cache files to the list of files to + exclude from backup (creator=='a68k')à + +2005-05-31 09:20 fpillet + + * libpisock/pi-buffer.c: If trying to create a 0 byte buffer, + allocate a small amount (16 bytes) as you are not supposed to + malloc(0) + +2005-05-28 12:46 warp + + * libpisock/pi-file.c: Unlink instead of overwriting. For the case + of something along the lines of: cp -lav backup_2005_05_27 + backup_2005_05_28 Then updating the new copy. + +2005-05-24 08:49 fpillet + + * libpisock/darwinusb.c: Added a comment to make clear why we're + setting opened to 0 in u_close + +2005-05-24 08:47 fpillet + + * libpisock/usb.c: Don't decrement timeout by one second after + sending a wakeup packet to the device. Incidentally, this fixes a + bug where a timeout of 1 second would put the thread in forever + wait mode if the wakeup packet was without effect + +2005-05-24 08:44 fpillet + + * libpisock/darwinusb.c: Fixed a lockup bug in darwinusb where a + new client thread could acquire a closing connection, therefore + locking it into waiting forever on a deleted pthread_cond. Use + relative timeouts in waiting threads (more explicit code), + defined a new macros to avoid all the #ifdef DEBUG_USB in the + code. + +2005-05-18 18:17 warp + + * libpisock/usb.c: Oops. Minor fix I forgot to commit. + +2005-05-16 05:35 fpillet + + * libpisock/: inet.c, serial.c, socket.c, usb.c: Devices don't do + the pi_close() anymore on failure, it's socket.c's responsibility + to do it (doesn't change the APIs behavior, just a transfer of + responsibility) + +2005-05-16 05:10 fpillet + + * libpisock/socket.c: removed comments obsoleted by the doxygen + documentation in pi-socket.h + +2005-05-16 05:06 fpillet + + * include/pi-socket.h: completed doxygen docs for pi-socket.h + +2005-05-16 03:25 fpillet + + * libpisock/darwinusb.c: Fixed indentation + +2005-05-16 02:48 fpillet + + * configure.ac: added setup-standalone.py to the templatized files + +2005-05-15 13:53 fpillet + + * bindings/Python/src/: pi-dlp-maps.i, pisock.i, pisock.py: cleanup + +2005-05-14 17:07 adridg + + * configure.ac: Apply patch from #1480; assume Florent will + complain when this turns out to no-worky with MacOSX auto* + +2005-05-13 18:25 fpillet + + * libpisock/socket.c: close the sd if the actual implementation + didn't do it + +2005-05-13 18:23 fpillet + + * libpisock/darwinusb.c: Make darwinusb properly close the socket + descriptor + +2005-05-13 18:23 fpillet + + * bindings/Python/src/: pi-dlp-maps.i, pisock_wrap.c: Fixed a + problem with passing types/creators that was improperly returning + an exception + +2005-05-13 14:37 fpillet + + * bindings/Python/src/: pi-error.i, pisock.py, pisock_wrap.c, + pisockextras.py: Fixed error management (there were memory leaks + because of the early return). dlpErrNotFound now raises an + exception + +2005-05-13 11:29 fpillet + + * libpisock/dlp.c: Coherent trace names, more info displayed + +2005-05-13 11:25 fpillet + + * libpisock/darwinusb.c: compute read times (microsecond + resolution) + +2005-05-13 10:08 fpillet + + * libpisock/net.c: bump timeout to 30s. Experience showed installs + that can stall the device up to 16s (with a T5), so we need a + longer timeout value to cope with that and legitimate long wait + cases + +2005-05-13 05:09 fpillet + + * libpisock/dlp.c: more extensive logging + +2005-05-13 05:02 fpillet + + * libpisock/darwinusb.c: tweaks to fix a race condition issue. More + logging. + +2005-05-12 16:07 fpillet + + * bindings/Python/: README, setup-standalone.py.in, setup.py.in, + src/Makefile, src/general-maps.i, src/helperfuncs.i, + src/nonblocking_multithread.pl, src/pi-dlp-maps.i, + src/pi-error.i, src/pi-file-maps.i, src/pi-socket-maps.i, + src/pisock.py, src/pisock_wrap.c, src/pisockextras.py: Marked all + files with LGPL license. Cleanup in some files. Removed the + useless custom pi_bind() implementation + +2005-05-11 16:27 fpillet + + * configure.ac: use AC_HELP_STRING instead of AS_HELP_STRING, which + doesn't work with the version of autoconf shipping with Mac OS X + +2005-05-11 10:20 fpillet + + * bindings/Python/src/pi-dlp-maps.i: one more TODO in the list + +2005-05-11 10:19 fpillet + + * libpisock/darwinusb.c: refinements in u_close, removed + superfluous LOG + +2005-05-11 06:21 fpillet + + * bindings/Python/: README, setup-standalone.py.in, + src/helperfuncs.i, src/pi-dlp-maps.i, src/pisock_wrap.c: Proper + encoding conversion when reading/writing user info and reading + database info + +2005-05-10 10:29 warp + + * libpisock/: freebsdusb.c, libusb.c, linuxusb.c: u_poll returns > + 0 on success, or <= 0 on timeout or error for the usb drivers. + Fix comments to reflect this. + + Remove the usb_reset call in the libusb code, doesn't help + anything. + +2005-05-10 10:23 warp + + * libpisock/usb.c: Move stuff around to be a little cleaner. + + Fix failure in the linux case. + + Handle timeouts better. + +2005-05-10 10:19 fpillet + + * libpisock/darwinusb.c: u_poll didn't return PI_ERR_SOCK_TIMEOUT + if the connection was acquired but no data showed up (thanks, + Mercury) + +2005-05-10 09:37 fpillet + + * libpisock/socket.c: removed fprintfs + +2005-05-10 05:18 fpillet + + * bindings/Python/: README, setup-standalone.py.in, setup.py.in: + Added new standalone build script, updated readme + +2005-05-10 05:07 fpillet + + * libpisock/darwinusb.c: oops, most people don't need #define + DEBUG_USB 1 ;-) + +2005-05-10 04:54 fpillet + + * libpisock/socket.c: added warning for bluetooth: case + +2005-05-10 04:51 fpillet + + * libpisock/socket.c: Made pi_socket_setsd() code even more clear. + +2005-05-10 04:51 adridg + + * libpisock/usb.c: Accidental whitespace and some additional + logging + +2005-05-10 04:48 adridg + + * libpisock/socket.c: Better check for error returns from dup2(), + fcntl() and dup() as well + +2005-05-10 04:34 fpillet + + * libpisock/socket.c: Fixed a major bug in pi_socket_setsd: the + ps->sd was never updated with the duplicated pi_sd's value. If + the duplicate didn't take the same value than the previous + ps->sd, the connection was lost forever. Also fixed a strncmp and + reindented some code + +2005-05-10 04:11 fpillet + + * libpisock/debug.c: minor type. Flushing out the local mods I have + +2005-05-10 04:10 fpillet + + * libpisock/usb.c: Mercury's evil kludge not needed on OSX. Rewrote + it for clarity as well + +2005-05-10 04:08 fpillet + + * libpisock/darwinusb.c: fixed bugs in refcount management. When + closing the connection, set the socket state to PI_SOCK_CLOSE. + This avoid subsequent calls to pi_close (i.e. from the onexit() + handler) trying to access a closed connection. + +2005-05-09 16:51 adridg + + * libpisock/freebsdusb.c: recv() -> back to read(), since recv() + doesn't work on ugen devices + +2005-05-09 13:09 fpillet + + * libpisock/darwinusb.c: another big change: added refcounting to + the usb_connection_t struct. stop_listening() is called only when + refcount reaches 0. This avoids issues where concurrent threads + could clash on what to do, like the connection being closed while + another thread was trying to write + +2005-05-09 10:50 fpillet + + * include/pi-syspkt.h, libpisock/syspkt.c: Got rid of the + sys_RPCerror variable. Now use pi_error(sd) in ALL cases to get + the latest error. + +2005-05-08 16:53 adridg + + * configure.ac: Use AS_HELP for help, and handle --disable-libusb + as well + +2005-05-08 16:30 adridg + + * README: Add extra notes for enabling libusb + +2005-05-08 16:27 warp + + * configure.ac: Look for usb_open instead of main in libusb. + +2005-05-08 10:53 warp + + * libpisock/usb.c: Send something that is hopefully even less + likely to do evil things to the device. + +2005-05-06 21:59 warp + + * libpisock/usb.c: Evil kluge. If we don't get any data the device + may still be there. We try to wake it up by sending a 'garbage' + packet or 5. (USB only.) + +2005-05-06 18:13 warp + + * libpisock/: libusb.c, usb.c: Quietly fix (or at least alter) the + vi settings for libusb.c and usb.c. + +2005-05-05 14:36 fpillet + + * bindings/Python/src/: pi-dlp-maps.i, pisock_wrap.c: Added missing + mappins for proper dlp_CallApplication() binding + +2005-05-04 08:06 fpillet + + * bindings/Python/: pisockextras.py, src/pisockextras.py, + test/pisocktests.py: Moved pisockextras.py to the src/ directory. + Tweaked setup.py to go find Python files to include in the src + directory. + +2005-05-02 19:08 warp + + * libpisock/: inet.c, serial.c, usb.c: Make sure that we actually + close the sd on errors in pi_foo_accept. + +2005-05-02 17:45 adridg + + * src/: dlpsh.c, pilot-dlpsh.c: Fix for 1456: don't let popt mess + with fixed-size buffers in structs; simplify code a little; put + braces around python-style wishful indentation; remove AUTOHELP + since it exits dlpsh; simplify help calls. + +2005-05-02 16:32 adridg + + * src/: ietf2datebook.PL, pilot-ietf2datebook.pl: For #770 + +2005-05-02 16:19 adridg + + * src/: pilot-read-ical.c, read-ical.c: Patch from BR 1475, though + I don't really see how it can help + +2005-04-27 13:38 desrod + + * ChangeLog, configure.ac: Tagged -pre3, rolling to -pre4 for + development, updated ChangeLog + +2005-04-26 13:50 warp + + * configure.ac: Better handle libusb and thread safe stuff in + configure. (Still needs work in the no-threads but libusb case.) + +2005-04-26 13:44 warp + + * libpisock/Makefile.am: Fix --enable-threads without + --enable-libusb. (Note, libusb should really depend on + --enable-threads or something.) + +2005-04-22 15:14 adridg + + * include/pi-expense.h, include/pi-hinote.h, + include/pi-versamail.h, libpisock/expense.c, libpisock/hinote.c, + libpisock/versamail.c: int -> size_t consistency + +2005-04-22 15:01 adridg + + * libpisock/syspkt.c: Don't mix static and non-static (it's + declared in pi-syspkt.h) + +2005-04-22 09:25 adridg + + * include/pi-datebook.h, libpisock/datebook.c: Basic consistency -- + still missing in lots of other cases, and ContactDB does it + differently yet + +2005-04-21 12:03 fpillet + + * configure.ac: propagate PNG_FLAGS to CPPFLAGS + +2005-04-21 11:37 fpillet + + * include/pi-socket.h: Mo' doxygen documentation for socket calls + +2005-04-21 11:21 desrod + + * tests/versamail-test.c: Oops, forgot this one too: pi_uid_t -> + recordid_t + +2005-04-21 11:19 desrod + + * src/: pilot-foto-treo600.c, pilot-foto.c, pilot-treofoto.c, + pilot-wav.c: Minor fixes for pi_uid_t to recordid_t from + Florent's changes in the lib + +2005-04-21 08:21 fpillet + + * include/pi-file.h: completed doxygen documentation + +2005-04-19 08:52 fpillet + + * libpisock/pi-file.c: fixed a bug I introduced in + pi_file_append_resource() + +2005-04-19 04:41 fpillet + + * libpisock/utils.c: properly escape % chars before handing the + string to pi_log + +2005-04-18 13:41 fpillet + + * bindings/Python/TODO: updated TODO + +2005-04-18 13:40 fpillet + + * bindings/Python/src/: general-maps.i, pi-dlp-maps.i, + pi-file-maps.i, pisock.i, pisock.py, pisock_wrap.c: add + pi_file_install() and pi_file_retrieve() but use custom + implementations instead of raw mappings to allow simply passing a + file path for read/write + +2005-04-18 13:37 fpillet + + * include/pi-dlp.h, libpisock/dlp.c: constified parameter to + dlp_WriteUserInfo for better bindings generation with swig + +2005-04-18 13:36 fpillet + + * include/pi-header.h: don't interface deprecated functions with + swig + +2005-04-18 13:34 fpillet + + * libpisock/darwinusb.c: avoid init race condition + +2005-04-18 13:33 fpillet + + * libpisock/debug.c: prefix log entries with thread ID when + compiled with --enable-threads + +2005-04-18 13:32 fpillet + + * libpisock/pi-file.c: remove useless init + +2005-04-18 13:30 fpillet + + * libpisock/utils.c: do atomic writes in dumpline() -- faster + logging, and pi_log() won't interfer when it adds the thread ID + when compiled with --enable-threads + +2005-04-18 13:28 fpillet + + * include/pi-threadsafe.h, libpisock/threadsafe.c: added + pi_thread_id() call + +2005-04-15 08:00 fpillet + + * include/pi-file.h, libpisock/pi-file.c: Reorganized prototypes, + documented functions for doxygen, improving things for bindings + generation + +2005-04-15 06:04 fpillet + + * include/pi-error.h: Added new error code + +2005-04-14 03:12 fpillet + + * include/: pi-dlp.h, pi-file.h: more tweaks for swig generation + +2005-04-13 05:31 fpillet + + * bindings/Python/: pisockextras.py, src/helperfuncs.i, + src/pi-dlp-maps.i, src/pi-error.i, src/pi-socket-maps.i, + src/pisock.i, src/pisock.py, src/pisock_wrap.c, + test/pisocktests.py: mucho improvements in bindings + +2005-04-12 11:47 fpillet + + * libpisock/dlp.c: clarify log message + +2005-04-12 11:42 fpillet + + * configure.ac: define MACOSX when compiling on darwin. Do NOT + define DARWIN as this would conflict with system headers + +2005-04-12 11:42 fpillet + + * libpisock/serial.c: turn fragmentation off on serial for MACOSX + only for now + +2005-04-12 09:53 fpillet + + * include/pi-dlp.h: some exclusions for thing we don't need to + interface in bindings + +2005-04-12 06:36 nicholas + + * bindings/Python/src/: Makefile, nonblocking_multithread.pl, + pisock.i, pisock.py, pisock_wrap.c: Put in use of %feature to see + if it solves the interpreter lock when calling pisock functions + in a cleaner way than a post-processor for the C code. Florent, + can you see if you like this method? + +2005-04-11 11:34 fpillet + + * libpisock/darwinusb.c: auto-enable multiple simultaneous + connection support when compiling with --enable-threads. Lock the + queue mutex in stop_listening to make sure we don't have an + access conflict with u__read() + +2005-04-11 05:22 fpillet + + * libpisock/debug.c: reduce code bloat by properly using + pi-threadsafe.h macros + +2005-04-11 05:20 fpillet + + * libpisock/debug.c: added mutex when compiling with HAVE__THREADS + so that logfile writes are atomic. Open logfile in append mode so + that multiple connections don't clear the logfile when the + connection drops + +2005-04-10 18:17 fpillet + + * libpisock/darwinusb.c: Ãmake sure another thread can't close same + connection, better disconnection reporting, better logging + +2005-04-10 16:46 fpillet + + * libpisock/dlp.c: freeze PADP txid during dlp_VFSFileRead + +2005-04-10 16:45 fpillet + + * include/pi-padp.h, libpisock/padp.c, include/pi-socket.h: Added + new sockopt to allow freezing the txid during large transfers + (mainly for dlp_VFSFileRead) + +2005-04-08 13:29 fpillet + + * libpisock/dlp.c: changed proto to match header + +2005-04-08 13:29 fpillet + + * libpisock/usb.c: simplified code + +2005-04-08 13:28 fpillet + + * libpisock/darwinusb.c: Added support for multiple simultaneous + USB connections + +2005-04-08 13:26 fpillet + + * include/: pi-dlp.h, pi-socket.h: swig and prototype tweaks + +2005-04-08 13:26 fpillet + + * include/pi-usb.h: tweaks + +2005-04-08 13:25 fpillet + + * bindings/Python/src/: Makefile, nonblocking_multithread.pl: some + additions to postprocess pisock_wrap.c and make sure a + multi-threaded python interpreter won't be completly blocked + during C calls + +2005-04-08 13:17 fpillet + + * bindings/Python/: pisockextras.py, src/general-maps.i, + src/pi-dlp-maps.i, src/pi-dlp.i, src/pisock.i: Updating the + interfaces to work with 0.12, lots of ongoing fixes + +2005-04-05 12:35 fpillet + + * libpisock/darwinusb.c: more work to prepare for multiple + simultaneous connection support + +2005-04-04 18:06 fpillet + + * libpisock/darwinusb.c: Fixed the T5 connection issue that was + bugging me + +2005-04-02 16:16 neilw + + * src/: pilot-read-todos.c, read-todos.c: Fixing + dlp_ReadRecordByIndex loop error + +2005-03-23 11:28 fpillet + + * libpisock/darwinusb.c: reliability fixes, shielding against + potential crashes if device disconnects before a read_completion + is received + +2005-03-22 11:50 fpillet + + * libpisock/darwinusb.c: even more tweaks + +2005-03-22 11:17 fpillet + + * libpisock/darwinusb.c: tweak tweak tweakatitweak + +2005-03-22 10:40 fpillet + + * libpisock/darwinusb.c: added dumpdata to try figuring out the + info that the Treo 90 returns + +2005-03-22 10:19 fpillet + + * libpisock/darwinusb.c: small fixes, trying to get the Treo 90 + working + +2005-03-16 17:34 fpillet + + * src/: dlpsh.c, pilot-dlpsh.c: fix minor alignment problem in df + command, add 'dtp' command that's showed in help but not + implemented, add 'bye' alias to quit/exit + +2005-03-16 11:10 fpillet + + * libpisock/syspkt.c: this variable can't be global (it isn't + anyway) -- causes ld to fail when building the framework on OS X + +2005-03-16 04:15 fpillet + + * libpisock/darwinusb.c: Fixed an issue with finding the pipes on + some handhelds + +2005-03-14 20:21 desrod + + * libpisock/syspkt.c: Oops, this is a better fix for gcc4 + +2005-03-14 20:14 desrod + + * libpisock/syspkt.c: Smallish fix for gcc4 + +2005-03-09 05:39 fpillet + + * libpisock/darwinusb.c: tweaked comments and changed some code for + better T5 compatibility (probably more to come) + +2005-03-08 07:40 fpillet + + * libpisock/darwinusb.c: moved trying to get pipe info by reading + from pipes in the find_interfaces() function, as + configure_device() doesn't have the interface open yet + +2005-03-08 06:52 fpillet + + * libpisock/darwinusb.c: Revised (once more) device configuration & + pipe search. After some extensive USB tracing, I found out why my + Sony wasn't connecting -- looks like the device didn't like to be + re-configured while it had already been configured by the OS. + This seems to work well with others as well. Also improved + configuration reading using VISOR format, which is what Sony OS + 3/4 devices use. T615C now works. TapWave connects faster and + doesn't need USBReset() anymore. + +2005-03-08 04:49 fpillet + + * libpisock/pi-file.c: Fixed issue with appInfo not being read on + some files like AddressDB on T3: this was because the size + returned by HotSync (this also happens straight on Palm OS, check + it with Filez) is wrong -- it says there is no appInfo block + whereas there is one. See comments in the code. + +2005-03-06 12:36 fpillet + + * libpisock/dlp.c: deprecated -129 as a legitimate return code -- + functions now properly return PI_ERR_DLP_UNSUPPORTED + +2005-03-06 12:26 fpillet + + * libpisock/pi-file.c: fixed bug recently introduced in + pi_file_retrieve() that prevented it from working properly on + devices prior Palm OS 3.0 + +2005-03-06 07:46 nicholas + + * bindings/Tcl/pitcl.c, include/pi-address.h, + include/pi-datebook.h, include/pi-memo.h, include/pi-todo.h, + libpisock/address.c, libpisock/contact.c, libpisock/datebook.c, + libpisock/memo.c, libpisock/pi-buffer.c, libpisock/todo.c, + src/install-datebook.c, src/install-todo.c, src/install-todos.c, + src/memos.c, src/pilot-addresses.c, src/pilot-install-datebook.c, + src/pilot-install-todo.c, src/pilot-install-todos.c, + src/pilot-memos.c, src/pilot-read-ical.c, src/pilot-read-todos.c, + src/pilot-reminders.c, src/read-ical.c, src/read-todos.c, + src/reminders.c, src/validate.cc, tests/contactsdb-test.c, + tests/packers.c: Switch the packer/unpacker functions over to use + pi-buffer-t instead of static buffers. Makes the arguments for + them all match each other. + +2005-03-06 06:23 fpillet + + * libpisock/darwinusb.c: removed the USBReset()à call which was + causing problems with m515, m500 and possibly other devices. + Conditionalized it to presence of a Zodiac, which seems to be the + onlyà device still requiring it (hopefully I'll find a workaround + soon)à + +2005-03-04 13:11 fpillet + + * libpisock/dlp.c: integrated fix provided by Scott Gruby: Tapwave + Zodiac may return wrong command index during + dlpFuncReadRecord/dlpFuncReadRecordEx calls + +2005-03-04 09:06 fpillet + + * libpisock/darwinusb.c: prepared darwinusb for multiple + simultaneous connection support + +2005-03-04 06:09 fpillet + + * include/pi-cmp.h, include/pi-net.h, include/pi-padp.h, + include/pi-serial.h, include/pi-slp.h, include/pi-source.h, + include/pi-sys.h, include/pi-usb.h, libpisock/cmp.c, + libpisock/darwinusb.c, libpisock/freebsdusb.c, libpisock/inet.c, + libpisock/libusb.c, libpisock/padp.c, libpisock/slp.c, + libpisock/sys.c, libpisock/unixserial.c: revised constness + accross the board + +2005-03-04 05:52 fpillet + + * libpisock/net.c: change declaration of fixed handshake blocks, + make message parameter to net_tx const + +2005-03-03 13:35 fpillet + + * configure.ac: update, small bugfix on 'enable-debug' + +2005-03-03 13:34 fpillet + + * include/Makefile.am, include/pi-threadsafe.h, + libpisock/Makefile.am, libpisock/socket.c, + libpisock/threadsafe.c: Added thread-safe code so that access to + socket linked lists is thread safe + +2005-03-03 13:09 fpillet + + * libpisock/darwinusb.c: revised pipe-detection code + +2005-03-03 10:11 nicholas + + * include/pi-userland.h, libpisock/darwinusb.c, + libpisock/datebook.c, libpisock/debug.c, libpisock/dlp.c, + libpisock/expense.c, libpisock/freebsdusb.c, libpisock/hinote.c, + libpisock/inet.c, libpisock/libusb.c, libpisock/linuxusb.c, + libpisock/mail.c, libpisock/md5.c, libpisock/memo.c, + libpisock/money.c, libpisock/net.c, libpisock/notepad.c, + libpisock/os2serial.c, libpisock/padp.c, libpisock/palmpix.c, + libpisock/pi-buffer.c, libpisock/pi-file.c, + libpisock/pi-header.c, libpisock/serial.c, libpisock/slp.c, + libpisock/socket.c, libpisock/sys.c, libpisock/syspkt.c, + libpisock/todo.c, libpisock/unixserial.c, libpisock/usb.c, + libpisock/utils.c, libpisock/veo.c, libpisock/versamail.c, + libpisync/util.c, src/debugsh.c, src/hinotes.c, + src/install-datebook.c, src/install-hinote.c, src/install-memo.c, + src/install-netsync.c, src/install-todo.c, src/kittykiller.c, + src/pd-tty.c, src/pi-port.c, src/pilot-debug.c, + src/pilot-debugsh.c, src/pilot-dedupe.c, + src/pilot-foto-treo600.c, src/pilot-hinotes.c, + src/pilot-install-datebook.c, src/pilot-install-hinote.c, + src/pilot-install-memo.c, src/pilot-install-netsync.c, + src/pilot-install-todo.c, src/pilot-port.c, + src/pilot-read-ical.c, src/pilot-read-palmpix.c, + src/pilot-reminders.c, src/pilot-schlep.c, src/pilot-treofoto.c, + src/plu_args.c, src/read-ical.c, src/read-palmpix.c, + src/reminders.c: Add emacs local variables to every place that + has vi ones. This is to stop emacs trying to indent stuff a + different way. + +2005-03-02 17:36 fpillet + + * configure.ac, m4/threads.m4: added --enable-threads flag for + thread-safe support + +2005-03-02 11:25 fpillet + + * libpisock/dlp.c: disable RX timeouts during dlp_CallApplication() + +2005-03-02 11:24 fpillet + + * libpisock/: net.c, padp.c: honor the PI_SOCK_HONOR_RX_TIMEOUT + sockopt when waiting for packets so that we don't timeout on + lengthy operations which don't tickle the connection + +2005-03-02 10:51 fpillet + + * include/pi-dlp.h: complete documenting the known HotSync bug in + VFSDirEntryEnumerate() + +2005-03-02 10:50 fpillet + + * include/pi-socket.h, libpisock/socket.c: added + PI_SOCK_HONOR_RX_TIMEOUT socket level option, so that we can + disable RX timeouts when the device is going to perform a lengthy + operation (mainly for dlp_CallApplication() use) + +2005-03-01 14:54 desrod + + * include/pi-usb.h, libpisock/usb.c: Fix typos with SONY_CILE + device.. closes bug-and-a-half #1452 + +2005-03-01 14:33 warp + + * libpisock/libusb.c: Take into consideration race conditions for + reading, which nicely kills a hanging bug. Kill a few other + bugs. + +2005-02-22 10:40 fpillet + + * include/pi-buffer.h, libpisock/pi-buffer.c: constified parameters + where possible + +2005-02-21 17:53 nicholas + + * bindings/Python/pisockextras.py, + bindings/Python/src/pi-dlp-maps.i, + bindings/Python/src/pi-socket-maps.i, + bindings/Python/src/pisock.i, bindings/Python/src/pisock.py, + bindings/Python/src/pisock_wrap.c, + bindings/Python/test/pisocktests.py, include/pi-socket.h: Pass + tests for dlp_ReadSysInfo, dlp_ReadStorageInfo, dlp_ReadUserInfo, + dlp_ReadFeature. Rework a few bits of python code. + +2005-02-21 14:18 fpillet + + * libpisock/darwinusb.c: added a third pass to find the USB pipes + -- turns out the Tungsten W has one 64-bytes channel and one + 32-byte. Couldn't get it working yet, but at least it finds the + pipes + +2005-02-21 10:19 fpillet + + * bindings/Python/test/pisocktests.py: more tests. Need help with + these funcs that take a ptr as argument + +2005-02-21 08:40 fpillet + + * bindings/Python/test/pisocktests.py: new tests, show what's + happening, took off offlinesuite from online tests because it + fails when online + +2005-02-21 08:39 fpillet + + * bindings/Python/pisockextras.py: tweaks + +2005-02-21 08:20 fpillet + + * bindings/Python/pisockextras.py: fixed loop as dlp_ReadDBList_ + can return None + +2005-02-21 05:57 fpillet + + * bindings/Python/src/pisock.i: restored proper indentation for + Python codeà + +2005-02-20 18:59 fpillet + + * bindings/Python/src/pi-dlp-maps.i: tweaks, fixed a few bugs: + dlp_ReadAppPreference's parameter had changed, removed a typemap + that was causing a parameter to not be taken as input + +2005-02-20 18:34 fpillet + + * bindings/Python/src/pi-dlp-maps.i: reindent, tweak + +2005-02-20 18:32 fpillet + + * bindings/Python/src/pisock.i: picky picky: make sure static + object ptrs are set to NULL; reindented code + +2005-02-20 18:31 fpillet + + * bindings/Python/src/pi-error.i: better error mgmt: defer error + processing to a func, this reduces the wrapper codesize + +2005-02-20 18:30 fpillet + + * bindings/Python/src/general-maps.i: improved pi_buffer_t* + handling so as not to leak in case of early termination + +2005-02-20 10:07 fpillet + + * bindings/Python/src/pi-dlp-maps.i: More structured file + +2005-02-20 06:53 fpillet + + * libpisock/socket.c: cast parameter as the protocol func isn't + constified yet + +2005-02-20 06:52 fpillet + + * include/pi-dlp.h: DLP functions now return PI_ERR, this eases + swig integration. Try to harmonize prototypes as well, using + meaningful and identical names where parameters are the same kind + +2005-02-20 06:25 fpillet + + * bindings/Python/src/: general-maps-errorhandling.i, + pi-dlp-maps-errorhandling.i: removed obsolete errorhandling files + +2005-02-20 06:25 fpillet + + * bindings/Python/src/pisock.i: now use pi-error.i + +2005-02-20 06:15 nicholas + + * bindings/Python/src/pi-error.i: Provide (weak) error strings to + the caller + +2005-02-20 06:10 fpillet + + * include/pi-error.h: new type PI_ERR + +2005-02-20 05:54 fpillet + + * bindings/Python/src/pi-error.i: preparing interfaces for proper + error handling + +2005-02-19 11:03 nicholas + + * bindings/Python/: pisockextras.py, setup.py.in, test.py, test.sh, + src/general-maps-errorhandling.i, + src/pi-dlp-maps-errorhandling.i, src/pi-dlp-maps.i, src/pisock.i, + src/pisock.py, src/pisock_wrap.c, test/pisocktests.py, + test/run.sh: Better error handling, create pisockextras.py to + provide nicer interfaces (see dlp_ReadDBList for example), start + of unit ttest suite. + +2005-02-18 13:57 fpillet + + * include/pi-dlp.h, libpisock/dlp.c: preparing prototypes for swig + +2005-02-18 13:56 fpillet + + * include/pi-socket.h, libpisock/socket.c: updated data constness + on pi_send() and pi_write() + +2005-02-18 13:17 fpillet + + * darwin/build_framework.sh: framework build doesn't require + libicon anymore + +2005-02-17 19:05 nicholas + + * bindings/Python/: README, setup.py.in: Rebrand as Rob hasn't + touched the code for a few years. + +2005-02-17 19:04 nicholas + + * bindings/Python/src/pi-file.i: This file is not needed anymore + +2005-02-17 17:58 nicholas + + * bindings/Python/src/: general-maps-errorhandling.i, + general-maps.i, pi-dlp-maps-errorhandling.i, pi-dlp-maps.i, + pisock.i, pisock_wrap.c: Make typemaps that are not specific to + python be used for all languages, so maybe we can start to use + this same files for perl. Put back exception checking for the + dlp_ calls, in a new way. + +2005-02-17 17:19 nicholas + + * bindings/Python/src/general-maps.i, + bindings/Python/src/pi-dlp-maps.i, bindings/Python/src/pi-dlp.i, + bindings/Python/src/pi-socket-maps.i, + bindings/Python/src/pisock.i, include/pi-dlp.h: Python swig + bindings no longer have their own copies of the prototypes. They + are also a bit broken, but let's fix them as we write tests or + code that uses them. This needed a little rename in pi-dlp.h. + Error handling is even worse now, but see DLPERROR in + pi-dlp-maps.i for the form of the start of a fix. + +2005-02-17 17:14 nicholas + + * bindings/Python/src/: pisock_wrap.c, pisock.py: Doing this commit + seperately, see my real commit in a few seconds time. This is to + make the actual diff readable, as this is just a large + autogenerated file. + +2005-02-17 14:04 fpillet + + * libpisock/: Makefile.am, util.c: Removed util.c as + convert_FromPilotChar and convert_ToPilotChar don't belong to + libpisock + +2005-02-17 14:01 fpillet + + * libpisync/: Makefile.am, util.c: moved util.c from libpisock as + it really belongs to here + +2005-02-16 19:58 nicholas + + * bindings/Python/test.py, bindings/Python/test.sh, + bindings/Python/src/pi-dlp.i, bindings/Python/src/pi-header.i, + bindings/Python/src/pi-socket-maps.i, + bindings/Python/src/pi-socket.i, bindings/Python/src/pi-source.i, + bindings/Python/src/pisock.i, bindings/Python/src/pisock.py, + bindings/Python/src/pisock_wrap.c, include/pi-socket.h: Clean up + some inconsistant names in pi-socket.h ; Have swig read + pi-socket.h directly ; update python test.py to not use + pilot_connect() + +2005-02-12 19:50 desrod + + * ChangeLog: Re-gen ChangeLog + +2005-02-12 01:53 warp + + * libpisock/libusb.c: Some warning cleanup. + +2005-02-11 19:12 fpillet + + * include/pi-dlp.h: document a bug in HotSync for + dlp_VFSDirEntryEnumerate() + +2005-02-11 18:33 fpillet + + * libpisock/debug.c, libpisock/dlp.c, include/pi-debug.h, + include/pi-source.h: more constness where possible + +2005-02-11 15:27 fpillet + + * libpisock/dlp.c: removed comments, updated dlp_WriteRecord proto + +2005-02-11 04:12 fpillet + + * include/pi-dlp.h: minor tweaks, constified data passed to + dlp_WriteRecord + +2005-02-10 13:55 fpillet + + * bindings/Python/src/: pi-socket.i, pisock.py, pisock_wrap.c: + mapped additional socket functions + +2005-02-10 13:49 fpillet + + * bindings/Python/src/: pi-dlp-maps.i, pi-dlp.i, pisock.py, + pisock_wrap.c: updated Python bindings, need to get rid of + pilot_connect() and map the new plu_() stuff instead + +2005-02-10 12:09 nicholas + + * bindings/Python/src/: pi-dlp.i, pisock_wrap.c: Add missing file, + and regenerate pisock_wrap.c + +2005-02-10 05:04 fpillet + + * include/: pi-args.h, pi-cmp.h, pi-dlp.hxx, pi-error.h, pi-file.h, + pi-header.h, pi-inet.h, pi-macros.h, pi-net.h, pi-padp.h, + pi-serial.h, pi-slp.h, pi-sockaddr.h, pi-socket.h, pi-source.h, + pi-sync.h, pi-sys.h, pi-syspkt.h, pi-usb.h: more doxyfication, + all-around pass to add missing license information + +2005-02-10 03:22 fpillet + + * libpisock/pi-buffer.c: removed docs here as the documentation is + in pi-buffer.h. pi_buffer_clear() now shrinks buffer to a + reasonable size if it's too big + +2005-02-10 03:21 fpillet + + * include/pi-buffer.h: more docs + +2005-02-10 03:14 fpillet + + * include/pi-buffer.h: doxyfied pi-buffer.h + +2005-02-09 13:29 fpillet + + * bindings/Python/src/pi-dlp-maps.i: updated maps to include new + flags + +2005-02-09 13:14 fpillet + + * include/pi-error.h: updated tab size + +2005-02-09 13:14 fpillet + + * include/pi-socket.h: started doxyfication of pi-socket.h + +2005-02-09 13:13 fpillet + + * src/pilot-xfer.c: updated pilot-xfer to use the new transfer + callback format + +2005-02-09 13:12 fpillet + + * include/pi-file.h, libpisock/pi-file.c: modified transfer + progress callback to pass a pi_progress_t instead of a bunch of + arguments + +2005-02-09 11:25 fpillet + + * src/: install-hinote.c, pilot-install-hinote.c: removed unused + variable buf + +2005-02-09 06:51 fpillet + + * include/pi-error.h: proper doxyfication of pi-error.h + +2005-02-09 06:40 fpillet + + * include/pi-dlp.h: reorganized and created groups so as to make + doxy documentation clear and straightforward + +2005-02-09 06:19 fpillet + + * include/pi-dlp.h, libpisock/dlp.c: completed pi-dlp.h + doxyfication + +2005-02-08 12:06 fpillet + + * libpisock/pi-file.c: Set dlpDBMiscFlagRamBased in pi_file_open() + since we can't install a database to ROM, so if the database is + going to be installed it will be in RAM + +2005-02-08 10:12 fpillet + + * include/pi-dlp.h, libpisock/dlp.c: even more doxygen + +2005-02-08 06:29 fpillet + + * libpisock/dlp.c: renamed some parameters, added a check to + dlp_htopdate for zero dates + +2005-02-08 06:28 fpillet + + * include/pi-dlp.h: more [d]oxygen for us + +2005-02-07 18:43 fpillet + + * include/pi-dlp.h: Properly documenting for Doxygenation + +2005-02-07 18:38 fpillet + + * include/pi-dlp.h, libpisock/dlp.c: Properly documenting for + Doxygenation + +2005-02-07 06:12 fpillet + + * bindings/Python/src/pisock_wrap.c: prevent python bindings from + creating a DB with the Open flag + +2005-02-07 06:02 fpillet + + * bindings/Python/src/pisock_wrap.c: added missing db flags from + dlp_ReadDBList + +2005-02-05 04:11 fpillet + + * libpisock/darwinusb.c: try several device configurations if one + fails + +2005-02-04 10:18 desrod + + * doc/: man/pilot-link.7.in, xml/pilot-link.xml: Fixing minor + typos, closes Debian bug 289234 + +2005-02-04 10:10 desrod + + * doc/: man/pilot-xfer.1.in, xml/pilot-xfer.xml: Closing Debian bug + 293474 + +2005-02-04 10:00 desrod + + * doc/man/pilot-xfer.1.in: Fixed mistake with @VERSION@ macro being + prematurely expanded + +2005-02-04 10:00 desrod + + * doc/: man/pilot-link.7.in, xml/pilot-link.xml: Fixed small + omission, closes Debian bug 293225. Also cleaned up conduit + formatting. + +2005-02-04 09:21 desrod + + * doc/: man/pilot-xfer.1.in, xml/pilot-xfer.xml: Fix small typo, + closes upstream Debian bug 283593 + +2005-02-02 12:21 desrod + + * libpisock/contact.c: Slightly cleaner version of the FreeBSD 4.x + fix + +2005-02-02 10:25 desrod + + * bindings/Python/src/pisock_wrap.c: Updated to reflect change of + dlpDBFlagClipping to dlpDBFlagLaunchable, for properly detecting + PQA resources. + +2005-02-02 07:20 adridg + + * configure.ac: Do it right + +2005-02-01 02:06 adridg + + * configure.ac, libpisock/contact.c: For 4-stable (Fernan's mail) + +2005-01-31 01:20 desrod + + * configure.ac: Bumping to -pre3 for new changes + +2005-01-31 00:57 desrod + + * ChangeLog: Updating ChangeLog + +2005-01-31 00:55 desrod + + * configure.ac: Updated for latest manpage additions + +2005-01-31 00:39 desrod + + * doc/man/: Makefile.am, debugsh.1.in, install-todos.1.in, + money2qif.1.in, pi-csd.1.in, pi-nredir.1.in, pilot-clip.1.in, + pilot-dedupe.1.in, pilot-file.1.in, pilot-schlep.1.in, + pilot-treofoto.1.in, pilot-wav.1.in, read-screenshot.1.in, + reminders.1.in: Adding missing manpages for -pre2 + +2005-01-31 00:30 desrod + + * doc/man/: addresses.1.in, dlpsh.1.in, hinotes.1.in, + ietf2datebook.1.in, install-datebook.1.in, install-expenses.1.in, + install-hinote.1.in, install-memo.1.in, install-netsync.1.in, + install-todo.1.in, install-user.1.in, memos.1.in, pi-getram.1.in, + pi-getrom.1.in, pi-getromtoken.1.in, pilot-addresses.1.in, + pilot-archive.1.in, pilot-foto.1.in, pilot-link.7.in, + pilot-xfer.1.in, read-expenses.1.in, read-ical.1.in, + read-notepad.1.in, read-palmpix.1.in, read-todos.1.in, + read-veo.1.in: Updated manpages from converted XML files in + ../xml + +2005-01-31 00:25 desrod + + * doc/xml/: addresses.xml, debugsh.xml, dlpsh.xml, hinotes.xml, + ietf2datebook.xml, install-datebook.xml, install-expenses.xml, + install-hinote.xml, install-memo.xml, install-netsync.xml, + install-todo.xml, install-todos.xml, install-user.xml, memos.xml, + money2qif.xml, pi-csd.xml, pi-getram.xml, pi-getrom.xml, + pi-getromtoken.xml, pi-nredir.xml, pilot-addresses.xml, + pilot-archive.xml, pilot-clip.xml, pilot-csd.xml, + pilot-debugsh.xml, pilot-dedupe.xml, pilot-dlpsh.xml, + pilot-file.xml, pilot-foto.xml, pilot-getram.xml, + pilot-getrom.xml, pilot-getromtoken.xml, pilot-hinotes.xml, + pilot-ietf2datebook.xml, pilot-install-datebook.xml, + pilot-install-expenses.xml, pilot-install-hinote.xml, + pilot-install-memo.xml, pilot-install-netsync.xml, + pilot-install-todo.xml, pilot-install-todos.xml, + pilot-install-user.xml, pilot-link.xml, pilot-memos.xml, + pilot-nredir.xml, pilot-read-expenses.xml, pilot-read-ical.xml, + pilot-read-notepad.xml, pilot-read-palmpix.xml, + pilot-read-screenshot.xml, pilot-read-todos.xml, + pilot-read-veo.xml, pilot-reminders.xml, pilot-schlep.xml, + pilot-treofoto.xml, pilot-wav.xml, pilot-xfer.xml, + read-expenses.xml, read-ical.xml, read-notepad.xml, + read-palmpix.xml, read-screenshot.xml, read-todos.xml, + read-veo.xml, reminders.xml: Adding XML versions of the manpages + to the tree. These will not be disted but will remain in CVS for + continuous editing and updating. Thanks to Neil Williams for the + first big push, with major modifications of his work on my part + to unify them and clean them up a bit. + +2005-01-28 13:52 desrod + + * bindings/Java/Makefile.am: Oops, commented line here causes + java_files to go undefined, breaking the build. Fixed. + +2005-01-26 16:49 nicholas + + * bindings/Python/: TODO, test.py, src/pi-socket.i, src/pisock.i, + src/pisock.py, src/pisock_wrap.c: Expose pisock.error exception + +2005-01-25 10:48 fpillet + + * libpisock/pi-file.c: check error in dlp_ReadAppBlock in + pi_file_retrieve + +2005-01-25 10:39 fpillet + + * libpisock/pi-file.c: Get info about the database first in all + cases, and try to get the appBlock only if its size is > 0. This + fixes a Treo 600 crash on some ROM files where you can't get + their appBlock without crashing HotSync + +2005-01-25 09:01 fpillet + + * src/pilot-xfer.c: updated to properly detect PQA files. Previous + method using the Launchable flag was improper, as other files may + also be launchable without being web clippings + +2005-01-25 08:42 fpillet + + * include/pi-dlp.h: added new DB flag definitions up to (and + including) OS 6 database flags. Renamed dlpDBFlagClipping to + dlpDBFlagLaunchable as it is the official function of this bit + +2005-01-24 12:28 fpillet + + * libpisock/linuxusb.c: Fixed typo + +2005-01-23 13:48 nicholas + + * bindings/Python/: TODO, test.py, src/general-maps.i, + src/pi-dlp-maps.i, src/pi-file.i, src/pi-header.i, + src/pi-socket-maps.i, src/pi-socket.i, src/pi-source.i, + src/pisock.i, src/pisock.py, src/pisock_wrap.c: * Moved entries + out of pisock.i into several different files, to start to + improve maintainability + + * Have dlp_ReadDBList() return a list of dicts + + * Catch up with changes that broke compiling against 0.12 pre1 + (may still be lots of other issues around here) + + * Removed most of the by-hand wrapping and improved swig typemaps + to replace it + + * Put a little hack in test.py so that it can run against an + uninstalled version of the pisock module + +2005-01-20 17:02 adridg + + * src/pilot-xfer.c: Don't use asprintf since it isn't available + everywhere (or we could have gone the route of providing a + portability library). Fix a corner case where lack of memory + could cause you to free a const string. + +2005-01-20 16:30 adridg + + * configure.ac: Fix for 1416, 1418, I hope + +2005-01-20 16:07 adridg + + * libpisock/inet.c, m4/socklen.m4: Typenames not for the squeamish + +2005-01-20 16:03 adridg + + * libpisock/: connect.c, contact.c: More header-file madness + +2005-01-20 15:51 adridg + + * libpisock/contact.c: stdint not everywhere + +2005-01-20 15:03 adridg + + * libpisock/freebsdusb.c: Build + +2005-01-20 14:58 adridg + + * include/pi-serial.h, libpisock/inet.c, libpisock/serial.c, + libpisock/unixserial.c: Remove socklen_t from the API, and map to + kde_socklen_t (the 'right' type for the third argument for + accept(2)) where needed (only in inet.c). + +2005-01-20 14:50 adridg + + * README: Remind for folks building from source on BSD + +2005-01-20 13:19 fpillet + + * libpisock/: freebsdusb.c, inet.c, linuxusb.c: more flush() fixes + +2005-01-20 13:03 fpillet + + * libpisock/libusb.c: added flush() support to libusb + +2005-01-20 11:59 fpillet + + * libpisock/freebsdusb.c: added missing parameter to recv() in + freebsdusb + +2005-01-20 11:55 fpillet + + * libpisock/unixserial.c: fixed bug in my unixserial changes + (doesn't seem to like using recv(Ã) instead of read()) + +2005-01-20 11:13 fpillet + + * libpisock/serial.c: forgot to duplicate the flush() ptr in + pi_protocol_dup + +2005-01-20 10:20 fpillet + + * libpisock/: darwinusb.c, linuxusb.c, unixserial.c, usb.c, + freebsdusb.c, inet.c: flush() implementation at interface level, + bug fixes + +2005-01-20 10:20 fpillet + + * libpisock/: cmp.c, net.c, padp.c, slp.c, sys.c, serial.c: + flush()à implementation in the protocol stack + +2005-01-20 10:18 fpillet + + * include/: pi-serial.h, pi-source.h, pi-usb.h: added flush() call + to protocol + +2005-01-20 10:18 fpillet + + * include/pi-dlp.h: added constness to dlp_CallApplication() + parameter, numbered DLP error codes to easy debugging + +2005-01-20 10:17 fpillet + + * libpisock/dlp.c: flush input buffer before issuing a new DLP call + to make sure we don't get an answer to a previous request + +2005-01-20 10:16 fpillet + + * include/pi-socket.h, libpisock/socket.c: added pi_flush() call + +2005-01-19 16:02 adridg + + * configure.ac: Check for ifaddrs.h (not present on Solaris) -- + adding a new AC_CHECK_HEADERS call instead of editing old, + because this causes a smaller diff :) + +2005-01-19 15:58 adridg + + * configure.ac, m4/socklen.m4: Configure check for socklen_t, which + doesn't exist everywhere. + +2005-01-19 15:25 adridg + + * src/pilot-read-screenshot.c, src/pilot-read-veo.c, + src/read-screenshot.c, src/read-veo.c, tests/contactsdb-test.c: + No stdint needed (or exists) on 4-stable + +2005-01-19 15:18 adridg + + * src/: install-todo.c, pi-csd.c, pilot-csd.c, + pilot-install-todo.c, pilot-read-palmpix.c, pilot-xfer.c, + read-palmpix.c: More gcc 2.95 / 4-stable stuff + +2005-01-19 15:11 adridg + + * src/: install-netsync.c, pilot-install-netsync.c: Another + 4-stable fix: need sys/types for sys/socket; previous commit used + HAVE_, but I see it's included unconditionally in other files, so + do same here. + +2005-01-19 15:08 adridg + + * src/: dlpsh.c, pilot-dlpsh.c: gcc 2.95: no statements between + declarations + +2005-01-19 14:26 adridg + + * src/: dlpsh.c, pilot-dlpsh.c: For Fernan: #include dependent + system header for 4-stable + +2005-01-19 14:21 adridg + + * src/pilot-addresses.c: Constness, which I stumbled over when + #including this file in a C++ program (KPilot, which needs + compatible CSV output) + +2005-01-14 20:39 adridg + + * doc/man/install-datebook.1.in, src/install-datebook.c, + src/pilot-install-datebook.c: For bug 1411: bail on file error + _before_ connecting to the Pilot; improve manpage to state that + exactly one file is read. + +2005-01-14 12:50 desrod + + * configure.ac: Cut over to -pre2, so there is no confusion between + HEAD and the current -pre1 release version. + +2005-01-10 17:34 adridg + + * src/: pilot-read-notepad.c, read-notepad.c: Default to a value + that does not cause a warning when the value is left default + +2005-01-10 08:06 knghtbrd + + * src/: pilot-read-notepad.c, read-notepad.c: Default to png. If + you don't have libpng and don't specify that you want ppm, you'll + get a warning about getting ppm instead of png. I figure that is + reasonable, pending a rewrite of this program which supports + installing new notepad pages. + +2005-01-10 07:57 fpillet + + * libpisock/net.c: dump invalid header as hex bytes when NET header + not recognized + +2005-01-10 07:55 fpillet + + * libpisock/socket.c: my bad -- need to wake up. Properly applied + Aaron's patch this time + +2005-01-10 07:50 fpillet + + * libpisock/: socket.c: Aaron's fix: reset pi_buffer_t in + protocol_queue_build() after reading a first byte when protocol + wasn't immediately recognized + +2005-01-10 06:03 fpillet + + * libpisock/dlp.c: log error and dump invalid data in + dlp_response_read if # bytes invalid + +2005-01-09 06:42 knghtbrd + + * include/pi-contact.h, libpisock/contact.c, + tests/contactsdb-test.c: Turned ContactsAppInfo_t labels field + into an opaque pi_buffer_t. Fixed a typeo in the name of + free_ContactsAppInfo, and modified contactsdb_test accordingly. + +2005-01-09 06:06 knghtbrd + + * include/pi-contact.h, libpisock/contact.c, + tests/contactsdb-test.c: structs ContactsAppInfo and Contact have + _t typedefs now. Added numCustoms field to ContactsAppInfo and + removed the addr/im/phone labels (how they're done will change + soon). Packing a ContactsAppInfo now copies the customLabels + field back in to the labels array before writing (you should + treat labels and internal as opaque!) Added freeContactsAppInfo + for disposing of allocated data in the structure. Added more + error checking where it was needed. Fixed up Copyright headers + and included proper attributions. Moved function documentation + from contact.c to pi-contact.h, where it will do more good. + +2005-01-06 02:12 knghtbrd + + * src/pilot-foto.c: Check your pointers before you dereference + them! + +2005-01-05 15:09 adridg + + * src/: install-todo.c, pilot-install-todo.c: Avoid printing + possible uninitialized buffer. + +2005-01-02 19:44 adridg + + * src/pilot-addresses.c: Make --delete-all work + +2005-01-02 06:15 knghtbrd + + * include/pi-contact.h, libpisock/contact.c, + tests/contactsdb-test.c: Tweaked the handling of the picture + field of a Contact. We have enough information now to process + and recreate the header, so we now do so in the pack/unpack + functions. The picture field will contain only the JPEG data + now, and the pictype field has been added to help future-proof + the structure. Currently accepted values for pictype are + cpic_none and cpic_jpeg. I also cleaned up some function + headers. + +2004-12-31 01:58 knghtbrd + + * include/pi-contact.h, libpisock/contact.c, + tests/contactsdb-test.c: The next stage of my libpisock Contacts + code rewrite. All functions now take pi_buffer_t's instead of + seperate buffers/lens and return 0 or -1 on error. The only + function not completely rewritten from the ContactsDB code + contributed by ... who contributed it? ... is pack_Contact, which + is going to remain as-is until I add AddressDB handling to this + code. + + Please note, while I was able to promise byte-for-byte AppInfo, + there are a couple of unused nybbles whose (unused) contents are + not reproduced. + +2004-12-23 12:28 knghtbrd + + * tests/contactsdb-test.c: contactsdb-test now uses the libpisock + code because I needed to be sure that the libpisock code actually + worked on all devices I could test. + +2004-12-23 12:24 knghtbrd + + * include/pi-contact.h, libpisock/contact.c: Support for all + versions of ContactsDB, plus some minor bugfixes for the existing + support for Tungsten E/T3. I can't myself use this format, so + expect it to change between now and 0.12's final release to be + more similar to the format I cooked up for my own use. + +2004-12-22 19:30 desrod + + * src/Makefile.am: More cruft-removal + +2004-12-22 19:27 desrod + + * autogen.sh: Remove some unused cruft (actually, this is a + stealthy attempt to test the commit log emails, shh!) + +2004-12-22 19:22 desrod + + * autogen.sh: This should really be refactored a bit, it isn't + self-healing or scalable, but for the short term, this will do. + +2004-12-22 17:57 adridg + + * src/: Makefile.am, addresses.c, pilot-archive.c: Remove + addresses(1) and pilot-archive(1) + +2004-12-22 15:00 adridg + + * src/: pilot-read-todos.c, read-todos.c: Fix for #1230 + +2004-12-21 19:03 adridg + + * src/: pilot-archive.c, pilot-read-todos.c, read-todos.c: + Deprecate silly -archive and merge into read-todos. + +2004-12-21 18:14 adridg + + * src/pilot-addresses.c: Fix dangerously misleading help text + +2004-12-21 18:12 adridg + + * configure.ac: Give NULL_DEVICE a good default value + +2004-12-21 17:32 adridg + + * src/: pilot-foto-treo600.c, pilot-read-expenses.c, + pilot-reminders.c, pilot-treofoto.c, read-expenses.c, + reminders.c: Add -w (mandatory) to all + +2004-12-21 17:10 adridg + + * src/pilot-addresses.c: Allow --write - to go to stdout, to mimic + old addresses(1) behavior + +2004-12-21 17:01 adridg + + * src/: pilot-addresses.c, pilot-archive.c, pilot-foto-treo600.c, + pilot-read-expenses.c, pilot-reminders.c, pilot-treofoto.c, + read-expenses.c, reminders.c, userland.c: Remove remainder of + wonky no-args handling + +2004-12-21 16:58 adridg + + * include/pi-userland.h, src/addresses.c, src/dlpsh.c, + src/pilot-dlpsh.c: dlpsh needs <-i|-c> now. + +2004-12-21 16:28 adridg + + * src/: pi-nredir.c, pilot-nredir.c: Back out previous 'fix': you + _must_ specify -n now to get pi-nredir to function. Calling it + with no args will print usage. + +2004-12-21 15:03 adridg + + * src/pilot-xfer.c: pilot-xfer needs an argument to indicate + action, so let it bail with no args just like everyone else + +2004-12-21 14:51 adridg + + * include/pi-userland.h, src/addresses.c, src/pi-nredir.c, + src/pilot-archive.c, src/pilot-foto-treo600.c, + src/pilot-nredir.c, src/pilot-read-expenses.c, + src/pilot-reminders.c, src/pilot-treofoto.c, src/read-expenses.c, + src/reminders.c, src/userland.c: Another thing slapped into + userland. + + For the conduits that don't _need_ any arguments, if there is a + port set somewhere else (for the time being: in PILOTPORT), don't + bail out but do your stuff. + +2004-12-20 18:50 fpillet + + * src/: memos.c, pilot-memos.c: fixed incorrect casts + +2004-12-20 18:43 desrod + + * include/pi-userland.h: Arg! There's always one last file missing + at commit/release time. DOH! + +2004-12-20 17:54 desrod + + * ChangeLog: Update ChangeLog to current with all commit changes to + date + +2004-12-20 17:37 desrod + + * pilot-link.m4.in: More strict auto* checking on the macros we're + carrying inbound + +2004-12-20 17:36 desrod + + * src/: addresses.c, dlpsh.c, hinotes.c, install-datebook.c, + install-expenses.c, install-hinote.c, install-memo.c, + install-netsync.c, install-todo.c, install-todos.c, + pilot-dlpsh.c, pilot-hinotes.c, pilot-install-datebook.c, + pilot-install-expenses.c, pilot-install-hinote.c, + pilot-install-memo.c, pilot-install-netsync.c, + pilot-install-todo.c, pilot-install-todos.c, install-user.c, + memos.c, money2qif.c, pi-csd.c, pi-getrom.c, pi-nredir.c, + pi-port.c, pilot-addresses.c, pilot-archive.c, pilot-clip.c, + pilot-csd.c, pilot-dedupe.c, pilot-file.c, pilot-foto-treo600.c, + pilot-foto.c, pilot-getrom.c, pilot-install-user.c, + pilot-memos.c, pilot-nredir.c, pilot-port.c, + pilot-read-expenses.c, pilot-read-ical.c, pilot-read-notepad.c, + pilot-read-palmpix.c, pilot-read-screenshot.c, + pilot-read-todos.c, pilot-read-veo.c, pilot-reminders.c, + pilot-schlep.c, pilot-treofoto.c, pilot-wav.c, pilot-xfer.c, + plu_args.c, read-expenses.c, read-ical.c, read-notepad.c, + read-palmpix.c, read-screenshot.c, read-todos.c, read-veo.c, + reminders.c, userland.c: Update userland to handle the relocation + of userland.h to include/pi-userland.h + +2004-12-20 17:34 desrod + + * autogen.sh: Some useful fixes for systems with multiple versions + of auto* and friends installed (from Neil Williams) + +2004-12-20 17:27 adridg + + * configure.ac, libpisock/Makefile.am: Fix for following: + /usr/bin/ld: .libs/unixserial.o: relocation R_X86_64_32 can not + be used when making a shared object; recompile with -fPIC + +2004-12-20 17:15 desrod + + * include/: pi-datebook.hxx, pi-serial.h, pi-source.h: Remove the + last bits of WIN32 from the tree, these might return later in + another shape and form. + +2004-12-20 17:06 desrod + + * src/userland.h: Removing userland.h, its up in ../include now, as + pi-userland.h + +2004-12-20 17:05 desrod + + * configure.ac, include/Makefile.am: Moving libpiuserland headers + into the includes dir, non-installable + +2004-12-20 16:20 desrod + + * bindings/Perl/Pilot.xs: Adding changes from Aaron Kaplan to keep + the Perl bindings in lockstep with the API changes in 0.12 + +2004-12-20 15:54 adridg + + * libpisock/: connect.c, pi-header.c: Marked as deprecated, warn + the user about is as well. + +2004-12-20 15:52 adridg + + * include/pi-header.h: Remove prototypes for functions never + created, and mark the remainder deprecated. These prototypes + cover functions in connect.c and pi-header.c + +2004-12-20 15:50 adridg + + * include/pi-util.h: Add a means to mark functions as deprecated + +2004-12-20 15:49 adridg + + * include/pi-version.h.in: Add a PILOT_LINK_IS macro for doing + conditional compilation based on version number (used extensively + in KPilot, for one thing, which keeps compatibility with 0.11 and + 0.12) + +2004-12-20 14:36 desrod + + * libpisock/: Makefile.am, winserial.c: Removed references to + winserial.c, these might return later, or maybe not. + +2004-12-20 14:35 desrod + + * libpisock/: inet.c, serial.c, slp.c, socket.c, syspkt.c, utils.c: + Remove any references to legacy WIN32 serial support and NeXT + support. When or if someone helps us port this back to Windows, + with serial and USB support, these can return, but will need to + be rewritten from the ground-up anyway. + +2004-12-20 14:22 fpillet + + * libpisock/serial.c: commented out the frag. off code, until we + figure out how to determine whether the connection is bluetooth + or usb/linux + +2004-12-20 13:17 fpillet + + * libpisock/serial.c: turn fragmentation off when NET protocol + detected + +2004-12-20 13:17 fpillet + + * libpisock/unixserial.c: use memmove() rather than memcpy() where + there are potential buffer overlaps + +2004-12-20 13:13 fpillet + + * libpisock/: freebsdusb.c, linuxusb.c: use memmove() rather than + memcpy() where there are potential buffer overlaps + +2004-12-20 11:55 fpillet + + * libpisock/inet.c: properly set sockopt on both command and + non-command instances of the net protocol + +2004-12-20 11:40 desrod + + * bindings/Java/: Makefile.am, MidiMgr.java: One missing file, one + modified file, and a TODO in a pear tree. + +2004-12-20 11:16 fpillet + + * libpisock/inet.c: use the right socket number when setting + options + +2004-12-20 11:09 desrod + + * bindings/Java/: Makefile.am, README, README.de, TestTodos.java, + adrtest.java, build.xml, datebooktst.java, libjpisock.c, + libjpisock.h, test.java, org/gnu/pilotlink/AddressAppInfo.java, + org/gnu/pilotlink/AddressRecord.java, + org/gnu/pilotlink/AppInfo.java, org/gnu/pilotlink/DBInfo.java, + org/gnu/pilotlink/DatabaseExistsException.java, + org/gnu/pilotlink/DatabaseNotFoundException.java, + org/gnu/pilotlink/DatebookAppInfo.java, + org/gnu/pilotlink/DatebookRecord.java, + org/gnu/pilotlink/FTB3CostCatRecord.java, + org/gnu/pilotlink/FTB3TripRecord.java, + org/gnu/pilotlink/FTB3VehicleRecord.java, + org/gnu/pilotlink/MemoRecord.java, + org/gnu/pilotlink/MidiRecord.java, + org/gnu/pilotlink/PilotLink.java, + org/gnu/pilotlink/PilotLinkException.java, + org/gnu/pilotlink/RawRecord.java, org/gnu/pilotlink/Record.java, + org/gnu/pilotlink/ToDoRecord.java, org/gnu/pilotlink/User.java, + org/gnu/pilotlink/Version.java: Updating Java bindings to match + in lockstep with Stephan Bösebeck's changes + +2004-12-20 05:34 fpillet + + * libpisock/net.c: added useful comment so we don't lose track of + why these values are here + +2004-12-19 06:51 knghtbrd + + * tests/contactsdb-test.c: Satisfy any legal weenies who might + protest my "license", and make it damned clear that you don't get + stuff I didn't write under it. + +2004-12-18 20:04 adridg + + * src/pilot-archive.c: Nothing to CSV here, folks. Move along. + +2004-12-18 19:58 adridg + + * src/pilot-clip.c: Fix up option descriptions. + +2004-12-17 16:40 adridg + + * src/: install-expenses.c, pilot-install-expenses.c: Useful names + for STRING parameters + +2004-12-17 15:05 desrod + + * Makefile.am: Bump automake version check down by one + +2004-12-17 12:18 fpillet + + * libpisock/pi-file.c: fixed dlp_ReadAppBlock call + +2004-12-17 09:10 fpillet + + * include/pi-serial.h, libpisock/serial.c, libpisock/unixserial.c: + Converted the printfs to LOG messages. Fixed issues in + initalizing the protocol structs. Removed buggy ref ptr which was + being improperly read in unixserial and would cause some code to + be sporadically executed + +2004-12-17 09:04 knghtbrd + + * libpisock/: inet.c, net.c: Okay, new palmOne devices use a USB + chip that is broken. Florent already applied a workaround to the + code, but it had to be enabled. However, there is no good way to + know when to do this. So we will always enable it, except when + we know we don't need it. Performance cost? A few (less than + ten) miliseconds per megabyte. You won't notice. Really, you + won't. + +2004-12-17 08:59 knghtbrd + + * tests/contactsdb-test.c: Erm, how did this get not inited + properly? + +2004-12-17 06:36 adridg + + * libpisock/pi-header.c: Use right option explanation; why the heck + is this in the library _anyway_ + +2004-12-16 01:04 warp + + * include/pi-dlp.hxx: Let the c++ headers compile again, someone + missed something. + +2004-12-15 11:24 fpillet + + * src/: pilot-addresses.c, pilot-archive.c, pilot-read-expenses.c, + pilot-read-ical.c, pilot-read-notepad.c, pilot-read-screenshot.c, + pilot-read-todos.c, pilot-read-veo.c, read-expenses.c, + read-ical.c, read-notepad.c, read-screenshot.c, read-todos.c, + read-veo.c: completed updating code for new dlp_ReadAppBlock + prototype + +2004-12-15 11:14 fpillet + + * src/: addresses.c, hinotes.c, install-expenses.c, + install-hinote.c, install-memo.c, memos.c, money2qif.c, + pilot-hinotes.c, pilot-install-expenses.c, + pilot-install-hinote.c, pilot-install-memo.c, pilot-memos.c: + updating code for new prototype of dlp_ReadAppBlock + +2004-12-15 11:03 fpillet + + * tests/: contactsdb-test.c, dlp-test.c: Ãupdated use of + dlp_ReadAppBlock and dlp_ReadSortBlock + +2004-12-15 10:55 fpillet + + * include/pi-dlp.h, libpisock/dlp.c: moved dlp_ReadAppBlock and + dlp_ReadSortBlock to return data in pi_buffer_t*. Added some more + logging to dlp_ReadDBList. Reordered code managing date + conversion + +2004-12-14 03:53 knghtbrd + + * libpisock/socket.c: I recall there being more use of NUL and + /dev/null in here. Oh well. + +2004-12-14 03:44 knghtbrd + + * configure.ac, src/Makefile.am, src/getopt.c, src/getopt.h, + src/getopt1.c, src/pilot-mail.c: Added (currently unused) + NULL_DEVICE define to pilot-link, should be set to a string + containing whatever your system calls /dev/null. Currently + always /dev/null because I don't know the host strings for win32 + and OS/2 off the top of my head--but this is okay because support + for those platforms needs a rewrite anyway. + + Also consigned getopt and the long-deprecated pilot-mail to the + attic. + +2004-12-13 02:40 knghtbrd + + * tests/contactsdb-test.c: Okay, now contactsdb-test is done. + Prints out the data in a useful format that's easy enough to + read, and includes actually names the fields properly. + +2004-12-13 01:15 knghtbrd + + * tests/contactsdb-test.c: Now fully dumps ContactsDB-PAdd data for + all versions of the file. For the sake of sanity, doesn't + hexprint photos, just their size. + +2004-12-12 18:14 adridg + + * doc/man/pilot-addresses.1.in: Match current code + +2004-12-12 18:02 adridg + + * src/pilot-addresses.c: Avoid handing category -1 to + dlp_DeleteCategory + +2004-12-12 17:48 adridg + + * src/pilot-addresses.c: Do progress reporting, and suppress + totally empty entries (which crop up if you read in a DOS-style + CRLF file) + +2004-12-12 17:30 adridg + + * src/pilot-addresses.c: pilot-addresses is now compatible with + itself again. yay. read _and_ write 21-field entries now, handle + showphone referencing properly. if you use un-augmented entries, + all you lose is the showphone property. this is _not_ compatible + with PD-output, i think, since PD puts the phoneLabel in brackets + after the entry. + +2004-12-12 16:03 adridg + + * src/pilot-addresses.c: Remove -T; #-comment lines are standard, + so just generate them unequivocally. + +2004-12-12 15:55 adridg + + * src/pilot-addresses.c: Make encodechars default and mandatory, + since we generate _really_ broken CSV otherwise. + +2004-12-12 10:50 desrod + + * autogen.sh, configure.in: Deprecate configure.in in favor of the + preferred (and recommended) configure.ac file format + +2004-12-12 10:47 desrod + + * configure.ac: Stay in lockstep with configure.in's most-recent + change, oops! + +2004-12-12 10:45 desrod + + * configure.ac: Will deprecate configure.in when this has been + tested fully + +2004-12-12 10:41 desrod + + * Makefile.am: Bump minimum required version of automake, because + of the added autoconf strict checking + +2004-12-11 14:14 adridg + + * src/pilot-addresses.c: Some code docs; numbers -> enum constants; + improve an error message. + +2004-12-11 09:27 adridg + + * src/pilot-addresses.c: Buffer overflow protection, from one of + the bugreports closed last night + +2004-12-11 05:47 fpillet + + * include/pi-dlp.h, libpisock/dlp.c: turn id_ into recuid, makes + things more explicit (I already had this mod in my local tree) + +2004-12-10 19:25 adridg + + * src/pilot-addresses.c: Fix for 1085; --delete-all wasn't working. + +2004-12-10 19:14 adridg + + * src/pilot-addresses.c: Simplify, simplify, and fix #28, #1073, + #717, and lots of others in one go. + +2004-12-10 18:18 adridg + + * src/pilot-addresses.c: Skip comments properly (#830, #1093). Set + the fields in the address structure so that you can actually + install an address entry from CSV. Remove spurious while() that + was probably left over from when this was a do-loop. + +2004-12-10 15:46 adridg + + * src/pilot-addresses.c: Deal with bug #830: every other line is + skipped. This looks like a half-finished bugfix on CSV reading -- + the fgets() reads a line and it is neatly split into fields, but + the _rest_ of the code is still using getc() to read characters + directly from the file. Dumped the fgets stuff, so that it at + least reads all the lines in the file (doesn't do anything useful + with them, though, see all the other address bugs). + +2004-12-10 15:35 adridg + + * src/pilot-addresses.c: Provide more useful --help and --usage + +2004-12-10 08:34 adridg + + * src/pilot-xfer.c: Don't use OpenConduit during a transfer + +2004-12-10 04:34 knghtbrd + + * tests/contactsdb-test.c: One of my random trees had an + uncommitted contactsdb-test with the AppInfo decoding finished. + Keep in mind, this is brute force and does not use the functions + in libpisock to decode ContactsDB, but it also works on every + "modern" palmOne device I have, including the Tungsten T5. + That'd be more impressive if it actually did something + useful--anyone know how we can tell what country numbers are? 23 + (0x17) is apparently the United States. + +2004-12-09 19:31 knghtbrd + + * bindings/libjpisock.c, bindings/Java/libjpisock.c, + bindings/Tcl/pitcl.c, include/pi-address.hxx, include/pi-dlp.h, + include/pi-file.h, include/pi-foto.h, include/pi-header.h, + include/pi-slp.h, include/pi-usb.h, libpisock/dlp.c, + libpisock/net.c, libpisock/padp.c, libpisock/pi-file.c, + libpisock/serial.c, libpisock/slp.c, libpisock/usb.c, + libpisync/sync.c, src/debugsh.c, src/memos.c, src/pi-port.c, + src/pilot-debug.c, src/pilot-debugsh.c, src/pilot-dedupe.c, + src/pilot-file.c, src/pilot-foto.c, src/pilot-mail.c, + src/pilot-memos.c, src/pilot-port.c, src/pilot-read-ical.c, + src/pilot-wav.c, src/pilot-xfer.c, src/read-ical.c, + tests/dlp-test.c: Changes from MarkSpace that are useful. Need + to talk to Scott Gruby or someone from MarkSpace about the rest. + People using 0.12 will find compile errors with this in their own + code (*pilot) around the id -> id_ changes, but they're minor + (and important for Objective-C). + +2004-12-09 18:47 adridg + + * src/pilot-xfer.c: * Rename pilot_cardinfo palm_cardinfo, matching + all the other functions in pilot-xfer. * Send some error + messages to stderr. * -f does VFS, too so mention it in the help + string. + +2004-12-09 14:36 knghtbrd + + * include/pi-contact.h: At least provide a warning to people + reading the header that they can't trust the functions contained + therein to work on later devices. No sense in failing to + document what we know. + +2004-12-05 12:33 knghtbrd + + * configure.in: Given that people keep asking where the binaries + are and we're done breaking them while we implement VFS, it's + safe to reenable them by default. + +2004-12-03 19:27 adridg + + * doc/man/: pi-getram.1.in, pi-getrom.1.in, pi-getromtoken.1.in, + pilot-link.7.in: 1) Mention common options in pilot-link (7) 2) + Refer to them in a few manpages 3) Add a manpage for getromtoken + (1) 4) Mention the new --sysinfo flavor of getrom (1) + + TODO) Merge all the pi-get* manpages, since it's one executable + as well. + +2004-12-03 16:38 adridg + + * doc/man/pi-getram.1.in: Use the correct appname. + + Two issues come to mind with the manpages: 1) Since all of + userland takes --help, --usage, --port, --quiet, perhaps those + command-line args should be in pilot-link (7) to save space in + the rest. 2) Do we really want the manpages to be (C) FSF? + +2004-12-03 16:19 desrod + + * configure.in, src/hinotes.c, src/install-datebook.c, + src/install-expenses.c, src/install-hinote.c, + src/install-netsync.c, src/install-todo.c, src/install-todos.c, + src/money2qif.c, src/pi-getrom.c, src/pilot-dedupe.c, + src/pilot-foto.c, src/pilot-getrom.c, src/pilot-hinotes.c, + src/pilot-install-datebook.c, src/pilot-install-expenses.c, + src/pilot-install-hinote.c, src/pilot-install-netsync.c, + src/pilot-install-todo.c, src/pilot-install-todos.c, + src/pilot-schlep.c, src/pilot-wav.c, src/pi-nredir.c, + src/pilot-nredir.c, src/pilot-read-notepad.c, + src/pilot-read-todos.c, src/read-notepad.c, src/read-todos.c: + Bump version from -rc16 to -pre0 for now, to lessen the confusion + with bug reporting. + + Also fixed the serial:/dev/ttyUSB0 issue in userland conduits + +2004-12-03 13:54 knghtbrd + + * src/pilot-xfer.c: A bit inefficient (but pretty output routines + usually are), and I need to do something with the little static + functions, but all the same the output here is pretty cool.. + +2004-12-02 17:28 adridg + + * src/: pi-getrom.c, pilot-getrom.c: Minuscule feature: printing + SysInfo. The ram/rom/token conduit seemed like the most sensible + place to fit this in, since they're printing or retrieving pretty + non-volatile stuff from the device already. + +2004-12-01 10:37 adridg + + * include/pi-dlp.hxx: Make dlp.hxx compile again + +2004-12-01 10:26 fpillet + + * include/pi-net.h, include/pi-socket.h, libpisock/net.c: added two + new sockopt options for NET sockets to allow spliting writes (NET + header + data) and also split data in chunks when appropriate + (i.e. for USB writes on some devices) + +2004-12-01 10:23 fpillet + + * include/pi-args.h: added shielding against multiple inclusions + +2004-12-01 05:30 fpillet + + * libpisock/net.c: tentative fix for USB issues: as seen on the + Windows USB log, write NET header first (6 bytes) then DLP packet + split into 4k chunks. This will hopefully fix the Zire 72 and T5 + issues. If this work, we can afford using this technique on USB + and when connected through other means (inet, bluetooth) then + perform single-writes to speedup data transfers. + +2004-11-28 15:03 knghtbrd + + * src/pilot-xfer.c: pilot-xfer -D / -l will now list the root of + the default VFS volume, if there is a default. (Adriaan's logic + is that there is a default when there is exactly one VFS + volume--I intend to change that, but haven't yet.) This means + that -l can no longer provide VFS card info. Which is fine, + because you can now use pilot-xfer -C for that purpose. + +2004-11-28 13:21 knghtbrd + + * src/pilot-xfer.c: Remove the -d short option for --delete. + Things that delete should not have short options. + +2004-11-27 14:33 fpillet + + * libpisock/dlp.c: no C++-style comments + +2004-11-27 13:29 fpillet + + * libpisock/dlp.c: properly set second parameter to WriteRecord to + 0x80, indicating that the record data is included in the packet + +2004-11-27 08:51 knghtbrd + + * libpisock/dlp.c: A bit more error logging to try and track down + Zire 72 and Tungsten T5 errors. + +2004-11-26 09:44 fpillet + + * include/pi-dlp.h, libpisock/dlp.c: Changed prototype of + dlp_CallApplication to use pi_buffer_t to return data + +2004-11-25 19:28 desrod + + * libpisock/: contact.c, usb.c: C++ style comments, tsk tsk. + +2004-11-24 05:47 fpillet + + * libpisock/dlp.c: Take two on previous patch. I think that in the + long run, we may need to drop this request != result command + check since DLP is processing only one request at a time, and + palm software engineers seem to often fail to return proper codes + (probably a code cut-and-paste side effect) + +2004-11-24 05:40 fpillet + + * libpisock/dlp.c: Tungsten T5 returns wrong command + (dlpFuncEndOfSync) for dlpFuncWriteResource + +2004-11-23 06:00 fpillet + + * libpisock/dlp.c: Added LOG in dlp_exec to track down cases where + the result command code is not the same than the request's (may + give us a lead to T5 issues). Fixed error code returned by + dlp_WriteAppPreference + +2004-11-21 16:55 adridg + + * src/pilot-xfer.c: Make fetch progress reporting obey --quiet; + note that without progress reporting, cancels are not detected -- + this is something to fix in the library functions. + + Split the VFS fetch into a function suitable for a library and a + userland part (just like with install). Do progress reporting + with it as well. + +2004-11-21 15:44 adridg + + * src/pilot-xfer.c: Possible progress reporting for --fetch; I + don't think pi_file_retrieve calls the progress function, though. + +2004-11-21 15:35 adridg + + * src/: install-user.c, pilot-install-user.c: Cleanup usage + message; basically, the first bit of the string set in + OtherOptionHelp immediately follows the usage output that + summarizes the options -- it should not contain any of the flags + or options, but at most contain a name for the 'remaining + arguments' like "FILES ...". Nearly all conduits use \n\n here, + since there's no sensible remaining arguments. + + Make the conduit obey --quiet. + + Add a --list to avoid the usage-if-no-args scenario for folks + with PILOT_PORT set. + + Follow coding conventions, I think. Fix vi modeline. + + Add obsequious message to sync log on Palm also when just listing + user. + +2004-11-21 13:09 desrod + + * src/: install-user.c, pilot-install-user.c: Rolled back to the + previous example output of this conduit. There be bugs here with + the --help and --usage output doubling up, and reporting out of + order. The output looks horrible. Must fix soon. + +2004-11-20 20:10 adridg + + * src/pilot-xfer.c: Obey --quiet to suppress progress reporting + (maybe also want to suppress more); handle cancels by stopping + install (tested with internal memory only). + +2004-11-20 19:35 adridg + + * src/pilot-xfer.c: Progress reporting when installing to internal + or VFS memory, uses pi_file_install's progress function with a + bit of a hack around pi_file_open (which doesn't set the + filename). Code shuffled about so that there is a + pi_file_install_VFS which might be ripe for inclusion in + libpisock. + +2004-11-17 17:48 adridg + + * src/: install-expenses.c, install-hinote.c, install-memo.c, + memos.c, pilot-install-expenses.c, pilot-install-hinote.c, + pilot-install-memo.c, pilot-memos.c: Factor out category-finding + code and use userland. + +2004-11-17 11:30 warp + + * src/: install-memo.c, pilot-install-memo.c: Fix it to work again + instead of writing empty memos. + + When using -t only have the filename as the title, not the full + path given. + +2004-11-17 11:07 warp + + * src/: memos.c, pilot-memos.c: Minor indentation fix. + + Make the save memos to directories thing work. + +2004-11-17 10:59 warp + + * libpisock/socket.c, src/memos.c, src/pilot-memos.c: Zero init a + byte buffer. + + Fix an annoying infinite loop bug in memos.c. + +2004-11-16 19:09 adridg + + * src/pilot-xfer.c: Progress reporting while installing or fetching + with VFS (since this is where you'd be putting really big files). + I think I've tested fetch enough now, let someone else try next. + +2004-11-16 18:49 adridg + + * include/pi-versamail.h, libpisock/dlp.c, tests/vfs-test.c: + Warnings------ + +2004-11-15 18:15 adridg + + * src/: memos.c, money2qif.c, pilot-addresses.c, pilot-memos.c, + userland.c, userland.h: Move out some more category searching + code. Try to make the code in userland more generic (if only to + reflect the variations in the userland conduits themselves before + factoring out). I think in the long run the category matching + should be standardized on one set of flags. + +2004-11-15 18:13 adridg + + * src/plu_args.c: Warnings--, thanks Matt + +2004-11-14 18:34 adridg + + * src/pilot-xfer.c: VFS fetching appears to work now. Make backups + before testing. + + Shouldn't the size argument to VFSGetSize be a size_t, to be + consistent with the rest of the API? + +2004-11-14 18:02 adridg + + * src/: dlpsh.c, pilot-dlpsh.c: -Wall -Werror should be the default + +2004-11-14 18:01 adridg + + * src/: dlpsh.c, pilot-dlpsh.c: Userlandify + +2004-11-14 17:57 adridg + + * src/: pi-port.c, pilot-port.c: Userlandify (even though it's not + compiled) + +2004-11-14 17:49 adridg + + * src/pilot-wav.c: Userlandify + +2004-11-14 17:38 adridg + + * src/: Makefile.am, pilot-prc.c: Remove broken and deprecated + pilot-prc + +2004-11-14 17:19 adridg + + * src/pilot-dedupe.c: Userland + +2004-11-14 17:15 adridg + + * src/pilot-clip.c: Userlandify + +2004-11-14 17:07 adridg + + * src/: dlpsh.c, install-datebook.c, pilot-dlpsh.c, pilot-file.c, + pilot-foto-treo600.c, pilot-install-datebook.c, pilot-treofoto.c: + -Wall -Werror based fixes + +2004-11-14 16:53 adridg + + * src/: dlpsh.c, pilot-dlpsh.c: Whitespace + +2004-11-14 16:51 adridg + + * src/: pilot-clip.c, pilot-dedupe.c: Whitespace before the storm + +2004-11-14 16:33 adridg + + * src/pilot-schlep.c: Userland patch from Matt, with some minor + tweaks from me. + +2004-11-14 16:06 adridg + + * src/pilot-archive.c: Userlandify. Remove totally bogus if() that + implies that it once was possible to read a local .pdb file. + +2004-11-14 16:02 adridg + + * src/pilot-file.c: Userlandify. Make options orthogonal, introduce + aliases. Handle more than one filename argument. + +2004-11-14 16:01 adridg + + * src/pilot-archive.c: Whitespace crud + +2004-11-14 12:06 adridg + + * src/pilot-xfer.c: Initial VFS-fetch code. For God's sake, don't + try this at home. + +2004-11-14 11:41 adridg + + * src/: install-netsync.c, money2qif.c, pi-csd.c, pi-nredir.c, + pilot-csd.c, pilot-install-netsync.c, pilot-nredir.c: Userlandify + +2004-11-14 05:36 knghtbrd + + * libpisock/connect.c, src/userland.c: I thought that I wasn't + seeing the press hotsync message because Florent's USB code was + doing things in pi_bind that should be done in pi_listen. It is + true that he is, but then he's not the only one. All it takes to + make the message get printed, though, is to fflush stdout. While + I was at it, I made plu_connect a little more intelligent. + Didn't bother to mirror the change to pilot_connect since we're + not going to be using it for long. + +2004-11-14 05:33 knghtbrd + + * libpisock/socket.c: Rename a static function to be clearer as to + its purpose since the symbol is not exported. Part of trying to + chart the socket code. + +2004-11-14 05:31 knghtbrd + + * doc/TODO: A couple of TODO notes. There's some stuff in here + that's perhaps a bit dated now, but I don't want to make + additions or changes to the file without discussing them. + +2004-11-13 18:46 adridg + + * src/: install-expenses.c, pilot-install-expenses.c, + pilot-read-expenses.c, read-expenses.c: Use the global string + tables from pi-expense.c in libpisock. Do some more argument + checking -- hopefully this is correct, to avoid NULL amount + strings, for instance. I don't have a copy of Expenses to test + with. + +2004-11-13 18:28 adridg + + * src/: install-expenses.c, pilot-install-expenses.c: Userlandify. + Removed short option for replace, since it does delete data. + install-expenses now installs _an_ expense record even if you + give it --replace or --category, which it didn't do recently. + + Still needs some better argument checking and indent. + +2004-11-13 18:21 adridg + + * src/: pilot-read-expenses.c, read-expenses.c: Straightforward + userlandification + +2004-11-13 10:12 knghtbrd + + * src/: hinotes.c, install-datebook.c, install-expenses.c, + install-hinote.c, install-netsync.c, install-todo.c, + install-todos.c, install-user.c, money2qif.c, pi-getrom.c, + pi-nredir.c, pi-port.c, pilot-clip.c, pilot-dedupe.c, + pilot-foto.c, pilot-getrom.c, pilot-hinotes.c, + pilot-install-datebook.c, pilot-install-expenses.c, + pilot-install-hinote.c, pilot-install-netsync.c, + pilot-install-todo.c, pilot-install-todos.c, + pilot-install-user.c, pilot-nredir.c, pilot-port.c, + pilot-read-expenses.c, pilot-read-todos.c, pilot-schlep.c, + pilot-wav.c, read-expenses.c, read-todos.c: Removed all mention + to /dev/pilot in src! serial:/dev/ttyUSB0 is used instead, just + because it's probably a little more obvious that you shouldn't be + making random symlinks as newbies keep trying to do for + /dev/pilot. + + Of course, it means that as soon as the device specs are finished + being hashed out as part of my planned attack on socket code, + someone will have to write some docs to explain it so people + don't ask silly questions like why you would use serial: to talk + to a Palm with a USB cradle with Linux and visor.ko. I'll worry + about that when I'm ready. + +2004-11-13 10:03 knghtbrd + + * libpisock/connect.c, src/plu_args.c: Just a couple of comment + cleanups. Note pilot_connect() is deprecated, since it really + doesn't belong in libpisock. We should not remove it now because + the underlying API may change (that would annoy people) and + because we have no good incentive for getting rid of it yet. + Multiple transport listens, config files, etc may change that. + +2004-11-13 09:20 knghtbrd + + * include/pi-net.h, libpisock/net.c: Add the sd to net logs. + Trying to unbreak pi-nredir. + +2004-11-13 08:48 adridg + + * src/: pi-getram.c, pi-getrom.c, pi-getromtoken.c, pilot-getram.c, + pilot-getrom.c, pilot-getromtoken.c: Merge these conduits - still + produce 3 executables, but all relevant code is in pi-getrom.c, + and you can do pi-getromtoken --ram filename to get the RAM dump + if you like. + +2004-11-13 07:36 adridg + + * src/: pi-getram.c, pilot-getram.c: Typo (shortly to be mooted by + merging get{ram,rom,romtoken}) + +2004-11-13 07:22 knghtbrd + + * libpisock/connect.c, libpisock/socket.c, src/userland.c: And for + /dev/pilot, I see DEATH. + + Regarding the error message, checking for a null port on a bad + result is a bandaid. Since I realised pilot_connect would + eventually go away, I kinda painted myself into a corner with my + changes to pi_bind. plu_connect is basically a copy of + pilot_connect with the same flaw, so it gets the same bandaid. I + need to revisit this problem later, but there's some socket level + stuff that needs to happen first so that we can actually report + useful error messages. + +2004-11-13 07:00 adridg + + * src/: pi-getram.c, pi-getrom.c, pilot-getram.c, pilot-getrom.c, + userland.c, userland.h: Factor the rom-version-getting code out + of pi-get* into userland. Userlandify pi-getram. Use the new + functions in getram and getrom. The version check was for any + ROM version >= 5 and with minor version 0. That doesn't make + sense to me, unless RPC is reinstated in 5.1 and removed in 6.0 + again. + +2004-11-12 18:34 adridg + + * src/: pi-getrom.c, pilot-getrom.c: Userlandify. Move the + retrieving-of-majorVersion above the testing-of-majorVersion so + it makes sense. Still no OS5 support. + +2004-11-12 18:15 adridg + + * src/: pi-getromtoken.c, pilot-getromtoken.c: Don't commit while + discussing the impossibility of the code actually working + +2004-11-12 18:13 adridg + + * src/: pi-getromtoken.c, pilot-getromtoken.c: Userlandify + +2004-11-12 17:44 adridg + + * src/pilot-foto.c: Message sense must make, no? + +2004-11-12 17:44 adridg + + * src/pilot-foto.c: Have a break. Have a kit-kat (tm). + +2004-11-12 17:39 adridg + + * src/pilot-foto.c: Userlandify + +2004-11-12 17:38 adridg + + * include/pi-file.h, libpisock/pi-file.c: Move these two into the + public API, conduits have been using them for ages + +2004-11-12 16:56 adridg + + * src/: Makefile.am, pilot-foto-treo600.c, pilot-treofoto.c: Wild + stab at userlandification; this conduit just dumps everything to + ./, could use a -w or -f. + +2004-11-11 17:47 adridg + + * src/: pilot-read-palmpix.c, read-palmpix.c: Userlandify. The + usual stuff, except for the exciting function pointer "action", + while everyone else uses an enum and then calls based on that. + +2004-11-11 17:29 adridg + + * src/: pilot-read-notepad.c, pilot-read-palmpix.c, + pilot-read-screenshot.c, pilot-read-veo.c, read-notepad.c, + read-palmpix.c, read-screenshot.c, read-veo.c: Finish being + sidetracked: remove broken protect_files, use userland one, + actually check return values, indent bits touched properly and + with braces. + +2004-11-11 17:15 adridg + + * src/: pilot-foto-treo600.c, pilot-foto.c, pilot-read-palmpix.c, + pilot-treofoto.c, read-palmpix.c: Whitespace crud before actual + fix + +2004-11-11 17:12 adridg + + * src/: userland.c, userland.h: Factor out protect_files into + userland; make it not leak memory. Make it produce sensible error + messages. Make it not buffer-overflow (or perhaps: less often). + Remove special-casing from when it produced files a-z and A-Z + instead of just numbered 01..99. + +2004-11-10 23:59 knghtbrd + + * src/.cvsignore: Ignore all .lo files + +2004-11-10 20:40 knghtbrd + + * include/pi-dlp.h: filesystem and media types + +2004-11-10 18:43 adridg + + * src/: pilot-read-screenshot.c, pilot-read-veo.c, + read-screenshot.c, read-veo.c: Userlandify. Could use a reindent, + too. The functon protect_files is common to lots of conduits, + should be factored out into userland (and made to be sensible, + like using mkstemp(3)). + +2004-11-10 17:44 adridg + + * src/: pilot-read-notepad.c, read-notepad.c: A fair chunk of + accidental whitespace changes, also userlandification. This file + needs a total reindent anyway. + +2004-11-10 17:36 adridg + + * src/: install-todo.c, pilot-install-todo.c, pilot-read-todos.c, + read-todos.c: no cookie. wish that the initial poptification had + been consistent in naming the poptContext & the variable used to + scan the args + +2004-11-10 17:33 adridg + + * src/: install-todo.c, install-todos.c, pilot-install-todo.c, + pilot-install-todos.c, pilot-read-todos.c, read-todos.c: Remember + to complain about unhandled options (indicates programming error + -- popt table says to return value and it's not handled. + +2004-11-10 16:21 adridg + + * src/: install-todo.c, install-todos.c, pilot-install-todo.c, + pilot-install-todos.c, pilot-read-todos.c, read-todos.c: + Userlandify. Normalize error messages. This stuff needs + refactoring, especially since install-todo -f and install-todos + -f overlaps so much. + +2004-11-09 17:56 adridg + + * src/: hinotes.c, install-hinote.c, pilot-hinotes.c, + pilot-install-hinote.c: Userlandification of both; standardize + error messages. Bail if < 2 args. Could make use of findcategory + in plu_, though also uses "feature" of numbered categories. + Hinotes deserves an outdent. + +2004-11-09 01:02 knghtbrd + + * src/pilot-xfer.c: Add MMC support to pilot-xfer's VFS listing. + The other part of the diff is a suggested Berkeley-style + indentation format for David to look over. Then wound up in the + same commit just because I hadn't committed the latter change + yet. + +2004-11-08 18:43 adridg + + * src/: memos.c, pilot-memos.c: Simplify option processing with + popt magic; move processing outside of args loop. Normalize error + messages. Do better cleanup. + +2004-11-08 18:37 adridg + + * src/: install-memo.c, pilot-install-memo.c: usage string; bail if + no args + +2004-11-08 18:03 adridg + + * src/: pilot-read-ical.c, read-ical.c: Userlandification. Make + error messages consistent. Bail if no args. Would like to bail + if no ical, but can't detect it reliably. + +2004-11-08 17:05 adridg + + * src/: install-datebook.c, pilot-install-datebook.c: Complain if + no-args + +2004-11-08 17:00 adridg + + * src/: pilot-reminders.c, reminders.c: userlandification, error + messages now consistent. + +2004-11-08 16:49 adridg + + * src/: pilot-read-ical.c, pilot-read-palmpix.c, pilot-read-veo.c, + pilot-wav.c, read-ical.c, read-palmpix.c, read-veo.c: + poptification from Matt & Larry + +2004-11-07 16:58 adridg + + * src/addresses.c: Bail with --usage if no arguments; make + otheroption help work in --usage. + +2004-11-07 16:48 adridg + + * src/pilot-addresses.c: pilot-addresses.c + +2004-11-07 05:02 knghtbrd + + * src/pilot-xfer.c: Mostly mechanical implementation of my + understanding of what David wants for indenting. Only applied to + pilot-xfer because pilot-xfer is both long enough to showcase + about every situation that we've got in the code but short enough + (one file) to be reverted if it's totally wrong. + + While I'm not sure this is totally wrong, I am sure it's not + exactly right. Will wait for input before doing anything + further. + +2004-11-07 00:56 knghtbrd + + * src/: Makefile.am, addresses.c, install-datebook.c, + install-memo.c, install-netsync.c, install-todo.c, + install-todos.c, install-user.c, memos.c, pilot-addresses.c, + pilot-install-datebook.c, pilot-install-memo.c, + pilot-install-netsync.c, pilot-install-todo.c, + pilot-install-todos.c, pilot-install-user.c, pilot-memos.c, + pilot-xfer.c, plu_args.c, userland.c, userland.h: Split arg + parsing out of userland.c into its own file. Still need to clean + up userland.h a little, but have decided that seperate headers + probably should be avoided if possible. David doesn't like the + plu_ namespace, but didn't have a better suggestion. plu_args.c + may get renamed if he comes up with one, along with a sed. Tried + not to make significant other changes this run, but I did remove + a couple of highly-unwise exit() calls without bothering to close + the link to the PDA..oops! + +2004-11-06 21:23 desrod + + * src/: memos.c, pilot-memos.c, userland.c: Still needs a bit of + cleanup here, but we have to make sure we're spitting out USEFUL + messages when the user presents the conduit with some sort of + error condition, such as a bad option. This does that... + + The other problem here (not fixed in this commit) is that we're + trying to connect to a bogus, non-existant port, when no options + are specified. This has to be fixed! Any conduit run without + options, should report --help or --usage. + +2004-11-06 18:34 desrod + + * libpisock/utils.c, tests/versamail-test.c: Minor fix for buggy + compiler warnings with certain locales. We probably need this + anyway, going forward, as more and more non-English Palm devices + come out. This prevents the compiler from yield a 2 or 4 digit + year depending on the locale currently active. + +2004-11-06 17:00 adridg + + * src/: install-datebook.c, pilot-install-datebook.c: + Userlandification, accidental whitespace + +2004-11-06 16:44 adridg + + * src/pilot-addresses.c: Userlandification, rename some options and + add deprecated warnings; remove short -D option because earing + all data shouldn't _have_ a short option. + +2004-11-06 16:41 adridg + + * src/pilot-xfer.c: Move --booger to userland under a better name + +2004-11-06 16:39 adridg + + * src/: userland.c, userland.h: Add support for aliasing and + deprecated option handling + +2004-11-06 13:39 adridg + + * src/Makefile.am: Add userland lib everywhere where it will + eventually be needed. + +2004-11-06 13:35 adridg + + * src/: Makefile.am, addresses.c: Port to userland + +2004-11-06 04:47 adridg + + * src/pilot-xfer.c: Test after committing. + +2004-11-06 03:28 knghtbrd + + * src/pilot-xfer.c: Good idea to test before you commit, people. + pilot-xfer was broken because sd was never assigned. The error + is still not caught in a meaningful way, but at least after + connecting we now actually use the sd.. + +2004-11-06 02:56 knghtbrd + + * src/: Makefile.am, pilot-xfer.c: Memos uses the new userland + convenience lib. Removed unused variable progname from + pilot-xfer. + +2004-11-05 19:27 adridg + + * src/: memos.c, pilot-memos.c: Use userland. See conduit status + for what's totally wrong here. + +2004-11-05 19:23 adridg + + * src/: userland.c, userland.h: Add a findcategory function, since + this is common in conduits -- however, no two seem to do it the + same, there's a weird mishm,ash of strcasecmp, strcmp, and I + wonder if the n (=15) is really needed here. Nothing uses this + yet. + +2004-11-05 17:45 adridg + + * src/: Makefile.am, install-memo.c, pilot-install-memo.c: Port to + popt / userland. This was a bit of a mess, seems earlier it + handled multiple files, which has been mercilessly ripped out + (and made buggy in the process). + + TODO: Check if the WriteUserInfo is needed. + +2004-11-05 16:56 adridg + + * src/: install-netsync.c, pilot-install-netsync.c: Port to + userland, modify arg setting a little (needs test) + +2004-11-05 16:55 adridg + + * src/Makefile.am: Remove getopt stuff; add magic for updating + makefile when Makefile.am is changed (works with gmake, mostly) + +2004-11-05 16:24 adridg + + * src/pilot-xfer.c: Port to userland lib, remove --verbose which + didn't actually do anything of note. + +2004-11-05 16:18 adridg + + * src/: install-todo.c, pilot-install-todo.c: - port to userland + lib - fix breakages from popt porting - fix example strings + + TODO: figure out if the WriteUserInfo call is needed (or indeed, + doesn't totally break the Pilot by not having a username set). + +2004-11-05 16:04 adridg + + * src/: userland.c, userland.h: Rename quiet to userland_quiet, + make accessible from outside (so conduits can obey it). + +2004-11-05 04:14 knghtbrd + + * src/.cvsignore: Update .cvsignore for new piuserland library + droppings + +2004-11-05 04:12 knghtbrd + + * src/Makefile.am: Er, oops--make before cvs ci! + +2004-11-05 04:08 knghtbrd + + * src/Makefile.am: Make libpiuserland a proper (static only) + libtool library. Much easier this way. + +2004-11-05 03:39 adridg + + * src/Makefile.am: Rename lib to libpiuserland to avoid name clash; + don't link this static lib to anything else for now. + +2004-11-04 19:26 adridg + + * src/: Makefile.am, install-todos.c, pilot-install-todos.c: Port + install-todos to userland. TODO: fix indent, change reader + function to user fgets() instead of reading entire file into + memory. + +2004-11-04 19:06 adridg + + * src/: Makefile.am, install-user.c, pilot-install-user.c: Port + install-user to new factored-out userland lib. + +2004-11-04 19:01 adridg + + * src/: Makefile.am, userland.c, userland.h: Initial teensy + userland library. This will spur the factoring-out of common + option handling code. + +2004-11-04 16:58 adridg + + * src/pilot-xfer.c: First of many (next one will be bundled, + though): consolidate common options, deprecate -v for --version, + use -v for verbose where applicable. Let popt do the help stuff. + Minor string tweaks. + +2004-11-04 00:56 knghtbrd + + * src/pilot-xfer.c: Use /cardX rather than /slotX, it's more in + keeping with Palm's way of doing things. + +2004-11-04 00:50 knghtbrd + + * src/pilot-xfer.c: pilot-xfer -D / -l (list VFS volumes) now gives + you some useful information about unknown filesystems and media + types. Used this new feature to add support for the internal VFS + memory devices of the Tapwave Zodiac and Tungsten T5. Adding + information for Sony devices should be trivial if someone's + willing to run this on them. + +2004-11-03 19:55 adridg + + * src/pilot-xfer.c: * Introduce cleverness to allow aliasing. * + Introduce aliases for -FOI and --List(all). * Complain about all + the deprecated names with secret hidden argument --booger. Was + unable to be mature enough to invent a different name. * Reduce + cleverness by exploiting more popt features, complaining + earlier about mixed media; distinguish -bus until the time comes + to actually call palm_backup(). * Correct various messages. + +2004-11-03 19:10 knghtbrd + + * src/.cvsignore: Update .cvsignore to inclue pilot-treofoto + +2004-11-03 18:56 knghtbrd + + * src/: pilot-read-notepad.c, read-notepad.c: Fix minor compile + niggle (no progname in that function). Raises interesting + question for error messages, but not one worth answering right + now. + +2004-11-02 19:56 desrod + + * src/: dlpsh.c, hinotes.c, install-datebook.c, install-expenses.c, + install-hinote.c, install-netsync.c, install-todo.c, + install-todos.c, install-user.c, memos.c, money2qif.c, pi-csd.c, + pi-getram.c, pi-getrom.c, pi-getromtoken.c, pi-nredir.c, + pi-port.c, pilot-addresses.c, pilot-archive.c, pilot-clip.c, + pilot-csd.c, pilot-dedupe.c, pilot-dlpsh.c, pilot-file.c, + pilot-foto-treo600.c, pilot-foto.c, pilot-getram.c, + pilot-getrom.c, pilot-getromtoken.c, pilot-hinotes.c, + pilot-install-datebook.c, pilot-install-expenses.c, + pilot-install-hinote.c, pilot-install-netsync.c, + pilot-install-todo.c, pilot-install-todos.c, + pilot-install-user.c, pilot-memos.c, pilot-nredir.c, + pilot-port.c, pilot-prc.c, pilot-read-expenses.c, + pilot-read-notepad.c, pilot-read-screenshot.c, + pilot-read-todos.c, pilot-read-veo.c, pilot-reminders.c, + pilot-schlep.c, pilot-treofoto.c, pilot-wav.c, pilot-xfer.c, + read-expenses.c, read-notepad.c, read-screenshot.c, read-todos.c, + read-veo.c, reminders.c: Fixing some of the const'ness issues, + cleaned up some whitespace and indenting in other areas. More to + come... + +2004-11-02 17:56 adridg + + * src/pilot-xfer.c: Use symbolic constants instead; fix breakage of + --update and --sync; setting flags for restore makes no sense. + +2004-11-02 17:22 desrod + + * configure.in, src/Makefile.am, src/pix/Makefile.am, + src/prc/Makefile.am: Change the action to build the userland + conduits to default to OFF. + +2004-11-02 16:29 adridg + + * src/pilot-xfer.c: Produce consistent error messages + +2004-11-02 16:19 adridg + + * src/pilot-xfer.c: Cleverness reduction by relying on popt feature + to set bits in a bitfield + +2004-11-02 16:04 adridg + + * src/pilot-xfer.c: Fix up file listings to rememble ls, correct + help string. + +2004-11-02 15:33 adridg + + * src/pilot-xfer.c: Restore -lL honoring -D by removing cleverness + from mediatype handling; except for -L -D, which mixes ROM with + VFS, everything is disallowed. Also cleans up things like -b dir + -O -F (whut?). + +2004-11-01 21:58 knghtbrd + + * src/pilot-xfer.c: Make -l and -L sortof work. Still won't honour + -D with -l and -L, but it's at least not dereferencing NULL + anymore. + +2004-11-01 21:52 desrod + + * src/pilot-xfer.c: Minor updates: - Renamed all CamelCap functions + to align them with the rest of userland - Updated the popt clause + indenting - Fixed the const'ness of argv and other values + (cleaned a warning out) - Fixed erroneous flag breakage with + BACKUP and UPDATE and SYNC. Sync is still broken, but I'll get + to that next + +2004-11-01 19:32 adridg + + * src/pilot-xfer.c: After much discussion, back and forth, modify + pilot-xfer's argument handling _again_; it now does: + + * Sanity checking before connecting. * Accepts exactly _one_ of + the -bursimfdlL flags and complains otherwise. * -burs still + take a . * -imfd don't take a particular argument, but + apply to all the leftovers. This covers cases like + + --install foo.prc --port /dev/pilot + --install *.prc --port /dev/pilot + --install --port /dev/pilot --vfsdir /slot1/ *.prc + + You can't mix them, though -- this was deemed too compilcated + and + unused anyway, so no --install *.prc --delete *.mp3. + * -lL don't take any extra arguments, and will complain if they + are found. * --Purge, if present, is done after -bursimfdlL. + + I do not claim to have tested all combinations of arguments that + are possible, and there are many that do not even make sense + (like --backup with --vfsdir) that are not complained about. + + The --exec option is now left in a strange position. When + pilot-xfer acted upon each argument in turn from left (argv[1]) + to right (argv[argc-1]), doing a system() between two other + actions might have made sense. Now, since we collect arguments + and act on them _after_ initial processing where the position of + the options is lost, --exec doesn't have a specific spot where it + should be executed, eg. + + --port /dev/pilot *.prc --exec /bin/halt *.pdb --install + + is also a valid command-line, and there's no way to tell that + that exec was "supposed" to happen between the prcs and the pdbs. + +2004-10-31 18:54 adridg + + * src/: Makefile.am, dlpsh.c, install-expenses.c, install-todos.c, + memos.c, money2qif.c, pi-csd.c, pi-getram.c, pi-getrom.c, + pi-nredir.c, pilot-addresses.c, pilot-archive.c, pilot-clip.c, + pilot-csd.c, pilot-dlpsh.c, pilot-file.c, pilot-foto.c, + pilot-getram.c, pilot-getrom.c, pilot-install-expenses.c, + pilot-install-todos.c, pilot-mail.c, pilot-memos.c, + pilot-nredir.c, pilot-prc.c, pilot-read-expenses.c, + pilot-read-screenshot.c, pilot-read-todos.c, pilot-read-veo.c, + pilot-wav.c, read-expenses.c, read-screenshot.c, read-todos.c, + read-veo.c: Merge remaining popt fixes from Larry, so we can get + down to serious bickering about what the options to pilot-xfer + mean. + +2004-10-29 16:19 adridg + + * src/pilot-xfer.c: Distinguish backup/restore/sync/update behavior + from Swiss-army-knife behavior with messages; all SAK actions can + be specified multiple times, so you can do -D /slot1/ -i foo.c -i + bar.c -d blurfl.c -P to install two files to SD card, delete one, + then purge databases. + +2004-10-29 15:27 adridg + + * src/pilot-xfer.c: You can now -i(nstall) more than one file, just + like merge and delete. Removed totalsize calculation bug. + Introduced silly message at end if all you do is install files. + + Next up: discombobulate functionality into _either_ -burs, all of + which run only once after option processing, _or_ -ifmd which may + perform many actions on the device. + +2004-10-29 03:48 adridg + + * src/Makefile.am, src/hinotes.c, src/install-datebook.c, + src/pilot-hinotes.c, src/pilot-install-datebook.c, + src/install-hinote.c, src/pi-getromtoken.c, src/pi-port.c, + src/pilot-dedupe.c, src/pilot-getromtoken.c, + src/pilot-install-hinote.c, src/pilot-port.c, + src/pilot-read-notepad.c, src/pilot-reminders.c, + src/pilot-schlep.c, src/pilot-xfer.c, src/read-notepad.c, + src/reminders.c, tests/Makefile.am: All around the mulberry bush + .. popt goes the weasel. + + Merge patches from Matt for popt support in most places. Tested + on pilot-xfer, not on the rest. + +2004-10-28 16:07 adridg + + * src/pilot-xfer.c: All your whitespace are belong to us + +2004-10-27 17:52 adridg + + * src/pilot-xfer.c: Apply coelecanth-B-gone (tm), don't duplicate + filenames, check target for dir-ness. + +2004-10-27 17:26 adridg + + * src/pilot-xfer.c: This VFS code works (leave coelecanth in for + the time being, though); don't make -l or -L reset the media type + if -D already given. + +2004-10-27 04:57 adridg + + * src/pilot-xfer.c: Speak the truth about VFS file install until I + can figure out what goes on (or copy code from vfs-test to do the + install) + +2004-10-26 19:04 adridg + + * libpisock/dlp.c: 64-bit safeness - use defined stop value + +2004-10-26 19:02 adridg + + * include/: pi-dlp.h, pi-macros.h: 64-bit safeness - this feels + like LISP, with all the (). Basically, get_long would return + sign-extended values otherwise. + +2004-10-26 19:00 adridg + + * tests/vfs-test.c: Bail if device can't be opened. + +2004-10-26 17:54 adridg + + * src/pilot-xfer.c: fix off-by-one that ate setuid's SD card + +2004-10-25 13:35 fpillet + + * include/pi-dlp.h: re-added vfsModeReadWrite to the enum + +2004-10-24 18:09 adridg + + * src/pilot-xfer.c: Install to VFS with -D /vfs/dir -i file -- + however, it doesn't work and every attempt returns error code + -301 from the dlp_exec() call in dlp_VFSFileWrite(). + +2004-10-24 16:25 adridg + + * src/pilot-xfer.c: Lose --time; use centralized pi_mktag and + friend. Try to get a reasonable date result in listing files. + +2004-10-24 14:18 adridg + + * include/pi-util.h: #defube is a BSD extension, for sure + +2004-10-24 14:13 desrod + + * src/: pilot-foto-treo600.c, pilot-treofoto.c: Remove unnecessary + headers + +2004-10-24 09:24 adridg + + * src/pilot-xfer.c: Refactor a little to a VFSRootPath finder that + is reusable; start on VFS install support. Once this is done, I'd + like to factor the install and list parts out into something more + library-like (ie. no dependence on global varialbes like sd and + vfsdir) so that it's immediately reusable in the GUI bits. + +2004-10-24 08:14 adridg + + * include/pi-util.h: One I'm not entirely sure about: define + pi_mktag and an inverse in one central place, so we could lose + the defines in (almost) every userland conduit, as well as bits + of code here and there (like piloe-xfer.c:451). + +2004-10-24 08:11 adridg + + * src/pilot-xfer.c: Lose the remaining non-symbol constants for + pathname lengths + +2004-10-24 08:08 adridg + + * src/pilot-xfer.c: Add docs all over, remove dead code. + +2004-10-24 01:33 desrod + + * src/: Makefile.am, pilot-foto-treo600.c, pilot-treofoto.c: Added + new conduit to pull photos from the Treo. Need to popt this a bit + to take port and image arguments. + +2004-10-24 01:26 desrod + + * src/: addresses.c, debugsh.c, dlpsh.c, hinotes.c, + install-datebook.c, install-expenses.c, install-hinote.c, + install-memo.c, install-netsync.c, install-todo.c, + install-todos.c, install-user.c, kittykiller.c, memos.c, + money2qif.c, pd-tty.c, pi-csd.c, pi-getram.c, pi-getrom.c, + pi-getromtoken.c, pi-nredir.c, pi-port.c, pilot-addresses.c, + pilot-archive.c, pilot-clip.c, pilot-csd.c, pilot-debug.c, + pilot-debugsh.c, pilot-dedupe.c, pilot-dlpsh.c, pilot-file.c, + pilot-foto.c, pilot-getram.c, pilot-getrom.c, + pilot-getromtoken.c, pilot-hinotes.c, pilot-install-datebook.c, + pilot-install-expenses.c, pilot-install-hinote.c, + pilot-install-memo.c, pilot-install-netsync.c, + pilot-install-todo.c, pilot-install-todos.c, + pilot-install-user.c, pilot-mail.c, pilot-memos.c, + pilot-nredir.c, pilot-port.c, pilot-prc.c, pilot-read-expenses.c, + pilot-read-ical.c, pilot-read-notepad.c, pilot-read-palmpix.c, + pilot-read-screenshot.c, pilot-read-todos.c, pilot-read-veo.c, + pilot-reminders.c, pilot-schlep.c, pilot-wav.c, pilot-xfer.c, + read-expenses.c, read-ical.c, read-notepad.c, read-palmpix.c, + read-screenshot.c, read-todos.c, read-veo.c, reminders.c: Updated + mode lines to ensure proper indenting going forward (for those + that use a real editor) + +2004-10-24 01:21 desrod + + * libpisock/: darwinusb.c, datebook.c, debug.c, dlp.c, expense.c, + freebsdusb.c, hinote.c, inet.c, libusb.c, linuxusb.c, mail.c, + md5.c, memo.c, money.c, net.c, notepad.c, os2serial.c, padp.c, + palmpix.c, pi-buffer.c, pi-file.c, pi-header.c, serial.c, slp.c, + socket.c, sys.c, syspkt.c, todo.c, unixserial.c, usb.c, util.c, + utils.c, veo.c, versamail.c, winserial.c: Just adding editor + modelines, to keep the indenting proper going forward + +2004-10-23 23:57 desrod + + * include/pi-dlp.h: More indenting/formatting fixes for readibility + +2004-10-23 23:47 desrod + + * libpisock/dlp.c: Cleaned up function doc header info, reindenting + fixes here and there + +2004-10-23 21:59 desrod + + * src/pilot-xfer.c: Some indenting cleanup, remove useless novsf + calls, added missing option in --help output, other minor bits. + +2004-10-23 20:01 adridg + + * src/pilot-xfer.c: Initial VFS support. Add a -D /vfs/dir option, + in order to indicate that whatever operation is selected for + pilot-xfer should apply to VFS instead of the usual (databases, I + guess). Implemented for listing (-L) only, so far. + + Usage: + + pilot-xfer -L -D / Lists the "fake root" of VFS dirs on the + Pilot. This will show the SD slots and whatnot returned by + VFSVolumeEnumerate. For each slot, the slot number is used + as a directory name _and_ the volume label, if any. In + addition, slot information is printed. pilot-xfer -L -D /slot1/ + Lists the root directory of the card in slot 1. + Alternatively, if the FS in that slot has a volume label, + you can use the name of the volume. pilot-xfer -L -D + /slot1/DCIM/100MLT08/ Lists the files in that directory. + + As a special case, if there is exactly one slot (test case: T5? + Tapwave?) and the first path component matches none of the slots + / volumes present, it is assumed to be a path in /slot1 (ie. if + all else fails, use /slot1 as root), so the following works as + well: + + pilot-xfer -L -D /DCIM/100MLT08 + + Not visible in pilot-xfer help yet. + +2004-10-23 19:52 adridg + + * include/pi-dlp.h: Whoops, missed the existing #defines; moved + into the enum to make style more consistent. + +2004-10-23 18:54 adridg + + * include/pi-dlp.h: Add the constants from the Palm SDK for + VFSFileOpen to pi-dlp. + +2004-10-21 03:14 knghtbrd + + * tests/contactsdb-test.c: The good news is that Contacts 1.2 + (Tungsten T5) uses the same data format as Contacts 1.1 (Zire + 72/31). + +2004-10-19 12:48 knghtbrd + + * libpisock/freebsdusb.c, src/Makefile.am: Adriaan's + make_it_compile patch for FreeBSD, also fixes a SNAFU for popt. + +2004-10-19 12:45 knghtbrd + + * tests/contactsdb-test.c: Change the guess about unknown data in + contactsdb (not a big deal).. + +2004-09-28 01:57 knghtbrd + + * libpisock/serial.c: Matt Davey reports that the timeout value + passed to impl.poll should be in miliseconds, not seconds. + Patched. + +2004-09-27 00:59 angusa + + * src/: pilot-read-screenshot.c, read-screenshot.c: fixed width and + height being reversed + + CV: + ---------------------------------------------------------------------- + +2004-09-23 08:03 fpillet + + * include/pi-dlp.h: added vfs volume attribute definitions + +2004-09-22 10:57 knghtbrd + + * tests/: .cvsignore, Makefile.am, contactsdb-test.c: Elementary + test for ContactsDB AppInfo structure. It's very brute force, + still incomplete, and doesn't even try to use Nicholas' parser + functions. The good news is that they parse the appinfo for both + PalmOS 5.2.1 and 5.2.8 PalmOne PDAs, which happen to use + completely different formats for the file, naturally. ;p + + Nicholas' parser functions will probably need significant + tweaking to work with both formats, and there are other + considerations as well. + +2004-09-15 08:44 knghtbrd + + * libpisock/pi-file.c, src/pilot-xfer.c: I have a great idea! + Let's have a filename which can be at most 256 chars long. Let's + also do an unsafe sprintf into a buffer which is only 70 bytes + long and includes the filename! I made the buffer a lot longer + than it needed to be, but *shrug* a little futureproofing can't + hurt. + +2004-09-12 10:56 desrod + + * doc/TODO: Updates for documentation changes + +2004-09-11 06:40 knghtbrd + + * src/pilot-addresses.c: Removed some dead code. This doesn't + improve pilot-addresses much, but it at least guarantees that + there is one track for the code to follow. Yet unresolved issues + are: - table headings may be broken still (didn't check) - The + augment option produces completely useless output still - The + option not to escape data produces broken CSV, so it probably + should be disabled. - CSV is braintead and useless as an + interchange format since it's so completely mind-numbingly + useless that everyone seems to have their own idea of how to + "support" things it was never designed to. - Given the above, + no amount of work on this codebase will ever make it useful + and bug-free, ever. The optimal solution is to cease using CSV + data, with prejudice. + +2004-09-10 13:52 desrod + + * configure.in: Removing pilot-datebook entries + +2004-09-10 09:02 fpillet + + * libpisock/dlp.c: it's better if we actually USE the variables we + just defined... + +2004-09-10 08:51 fpillet + + * include/pi-dlp.h, libpisock/dlp.c: added + dlp_set_protocol_version() func so that client apps can chose + their own compatibility level (i.e. setting to 2.1 allows + connecting to Palm OS 6) + +2004-09-10 08:50 fpillet + + * libpisock/darwinusb.c: minor tweaks to device table + +2004-09-09 01:17 desrod + + * src/pilot-xfer.c: Minor output tweak, no double \n for failed + files. + +2004-09-08 23:57 desrod + + * Makefile.am, src/Makefile.am: Archive pilot-datebook for now.. + will rewrite later + +2004-09-04 14:09 desrod + + * configure.in: Minor fixes + +2004-09-04 13:35 knghtbrd + + * configure.in, m4/vl_lib_readline.m4: AC_CHECK_LIB adds the + checked thing to LIBS. Stupid autoconf. Also, I apparently got + too clever with vl_lib_readline.m4, reverted. David wanted + --disable-userland to still have output for the unused (and + therefore unchecked) libs, output provided. + +2004-09-04 12:58 knghtbrd + + * configure.in, m4/vl_lib_readline.m4, src/Makefile.am, + src/pix/Makefile.am, src/prc/Makefile.am: New configure argument + --disable-userland, makes make in src make only make output. =) + +2004-09-03 12:13 desrod + + * configure.in: Minor indenting removal + +2004-09-03 12:05 knghtbrd + + * configure.in: This should make --with-included-popt actually + include popt. =) + +2004-09-03 10:54 desrod + + * configure.in: Fix flags so they don't bark about 'implicit + declaration' when I'm including the right header. gnu99 give us + c99 + POSIX + GNU + +2004-09-02 16:50 knghtbrd + + * configure.in: popt check should no work properly and fail + gracefully if your popt installation isn't useful. + +2004-09-02 13:55 desrod + + * configure.in: Added saner pedantic flags, fixed a 1-char typo + which SHOULD have caused this to fail completely. + +2004-09-02 12:20 fpillet + + * libpisock/net.c: updated copyright in net.c (a little fame + doesn't hurt ;-)) + +2004-09-02 12:11 fpillet + + * libpisock/dlp.c: some casts and a couple additional tests + inspired by Mark/Space's incredible work on 0.11.8 ;-) + +2004-08-31 18:27 fpillet + + * libpisock/darwinusb.c: added Sony NR70V/U to known devices matrix + +2004-08-31 18:26 fpillet + + * libpisock/dlp.c: fixed argid mask + +2004-08-29 11:41 knghtbrd + + * include/pi-socket.h, libpisock/connect.c, libpisock/freebsdusb.c, + libpisock/inet.c, libpisock/linuxusb.c, libpisock/socket.c, + src/debugsh.c, src/pi-nredir.c, src/pilot-debugsh.c, + src/pilot-nredir.c: Here's the prefix patch from -future. Small + API change to pi_bind and pi_connect, but it's minor. + pilot-link's userland has been updated to work with the changes. + +2004-08-27 12:27 knghtbrd + + * popt/: COPYING, README, popt.c: values.h is obsolete, float.h is + the standard nowadays. + +2004-08-27 08:47 fpillet + + * libpisock/dlp.c: make dlp_VFSFileRead return the total number of + bytes read on success + +2004-08-27 03:32 fpillet + + * libpisock/net.c: log tickle packets + +2004-08-27 01:06 desrod + + * src/: Makefile.am, install-todo.c, pilot-install-todo.c: + Converted install-todo over to popt, added Makefile.am poke for + POPT_LIBS and fixed a few smaller logic flow issues in the + conduit. + +2004-08-26 22:46 desrod + + * src/: install-memo.c, pilot-install-memo.c: Silly non-portable + basename() hack + +2004-08-26 22:20 desrod + + * src/: Makefile.am, install-memo.c, pilot-install-memo.c: + Converted install-memo over to popt, incremented changes in + Makefile, fixed some common logic flow problems in the conduit + itself, added a parameter for passing in a filename. + +2004-08-26 14:51 desrod + + * src/: install-netsync.c, pilot-install-netsync.c: Moved globals + out + +2004-08-26 12:01 fpillet + + * libpisock/dlp.c: fixed a Sony protocol bug: their + dlp_VFSDirEntryEnumerate() returns a short flags value per file, + whereas a long is expected. We detect this and properly modify + the flag so it's transparent for the caller application + +2004-08-26 10:30 fpillet + + * tests/vfs-test.c: don't fail dirList test if directory is empty + +2004-08-26 09:18 fpillet + + * tests/vfs-test.c: fixed error testing + +2004-08-26 01:14 desrod + + * src/: Makefile.am, addresses.c, install-netsync.c, + install-user.c, pilot-install-netsync.c, pilot-install-user.c: + More popt conversions... still more to go. + +2004-08-26 00:33 desrod + + * src/: install-netsync.c, pilot-install-netsync.c: Completed the + first phase of the popt migration from getopt_long. Only a few + more tweaks to go in here for robustness. + +2004-08-25 12:36 desrod + + * src/: install-netsync.c, pilot-install-netsync.c: Converted the + option/arg parsing over to popt from getopt_long + +2004-08-25 11:15 desrod + + * popt/popt.c: Fix an upstream popt problem, missing include for + values.h + +2004-08-25 11:06 desrod + + * popt/: findme.c, findme.h, popt.c, popt.h, poptconfig.c, + popthelp.c, poptint.h, poptparse.c, system.h: Updating popt to + current, which hopefully didn't just break everything =) + +2004-08-25 10:32 desrod + + * configure.in: Moving to -rc14 + +2004-08-25 10:03 knghtbrd + + * libpisock/net.c: Proofread carefully to see if you anything out. + (Typo fix) + +2004-08-24 04:13 fpillet + + * include/pi-socket.h, libpisock/socket.c: moved version and + maxrecsize out of pi_socket_list_t and back into pi_socket_t + where they belong. version is renamed dlpversion (clients use + pi_version() to access it) + +2004-08-24 04:11 fpillet + + * include/pi-dlp.h, include/pi-usb.h, libpisock/dlp.c: fixed + prototypes to not use 'index' as a parameter name, as it shadows + the global index() function + +2004-08-24 03:58 fpillet + + * libpisock/usb.c: properly enclose LOG macro in a block (more) + +2004-08-24 03:57 fpillet + + * libpisock/usb.c: properly enclose LOG macro in a block + +2004-08-23 20:01 fpillet + + * libpisock/pi-file.c: more fixes, one place where result code was + not properly set, minor tweaks for compiler warnings + +2004-08-23 19:46 fpillet + + * libpisock/inet.c: one cast can make a compiler happy + +2004-08-23 19:45 fpillet + + * libpisock/darwinusb.c: minor tweaks + +2004-08-23 17:04 fpillet + + * libpisock/dlp.c: fixed several compile warnings + +2004-08-23 16:38 fpillet + + * libpisock/pi-file.c: fixed pi_buffer leak in pi_file_retrieve() + +2004-08-23 16:14 desrod + + * libpisock/usb.c: Static variables are initialized to zero at + compile-time, this cleans up two remaining warnings there. + +2004-08-23 16:10 desrod + + * libpisock/usb.c: Minor fixes, indentation to improve readibility + +2004-08-23 12:00 fpillet + + * libpisock/socket.c: fixed a bug I just introduced in + ps_list_append + +2004-08-23 11:59 fpillet + + * src/pilot-foto.c: open dest files in 'wb' mode, reformated + do_fetch() + +2004-08-23 11:58 fpillet + + * libpisock/dlp.c: when reading records & resources, always request + the max possible size (don't require callers to pre-allocate + buffer size) + +2004-08-23 11:42 fpillet + + * libpisock/: serial.c, usb.c: properly clear ps->sd when closing + the device. this change is propagated from inet.c. This + eliminates risks of double-closing + +2004-08-23 11:36 fpillet + + * libpisock/socket.c: fixed a subtle bug in pi_close: the list elem + must be removed from the queuest before we call the device's + close() function, because when the close() function clears the + device's sd, ps_list_remove() wouldn't find it in the list + anymore and we end up with a double close() when the onexit() + handler is called + +2004-08-23 09:15 fpillet + + * libpisock/freebsdusb.c: return proper error code when u_read + fails + +2004-08-22 03:32 knghtbrd + + * libpisock/: connect.c, serial.c: The tests performed on serial + devices by pilot_connect actually belong down in the serial code. + Moved them there. (Actually, I suspect that they need to move + further down into the UNIX serial code, but I'll wait for some + clue how to handle OS/2 and Win32 first..) + +2004-08-21 10:22 knghtbrd + + * libpisock/serial.c: I think Florent may have missed an error + check. This error basically is never -1 anymore. I get ... + -501. Simple enough fix. + +2004-08-21 10:17 knghtbrd + + * libpisock/connect.c: Remove some cruft from pilot_connect. + Changes what you'll see if you try to pilot_connect without -p or + PILOTPORT, but should not have any ill effects. + +2004-08-21 05:14 knghtbrd + + * src/.cvsignore: added read-screenshot to .cvsignore + +2004-08-17 11:37 fpillet + + * libpisock/dlp.c: make dlp_VFSFileWrite return the actual number + of bytes written in case of success + +2004-08-11 09:07 fpillet + + * libpisock/socket.c: changes static installedexit variable to + public pi_sock_installedexit so that library clients can choose + not to have an exit function installed (it causes lots of trouble + for threaded clients, as exit function would be called from the + main thread while other threads would be working with the socket + being closed) + +2004-08-11 09:05 fpillet + + * libpisock/inet.c: minor tweaks + +2004-08-09 05:36 nicholas + + * include/pi-contact.h: I presume we should really include a time.h + as tm is used + +2004-08-06 10:00 fpillet + + * libpisock/padp.c, include/pi-padp.h: Added patch to fix bug #1032 + (plus a couple cleanups). PLEASE RETEST as I can't test padp + communications here (yet) + +2004-08-06 06:26 fpillet + + * libpisock/socket.c: Integrated Aaron's fix for bug 1173: on PADP + protocols, tickling the socket would send the wrong command + +2004-08-06 05:36 fpillet + + * src/pilot-xfer.c: use malloc() instead of fixed-size stack buffer + for file paths in Backup(). unlink() file if pi_file_retrieve() + failed. Exit if socket is disconnected before end of backup. + +2004-08-05 14:51 fpillet + + * libpisock/slp.c: Fixed bug #244: allocate slp_buf using malloc() + instead of the stack to guarantee proper alignment (was + segfaulting on sparc) + +2004-08-05 14:30 fpillet + + * libpisock/net.c: Integrated patch for bug #1174 (receiving a + PI_TICKLE would disrupt reception of the answer to the last + query) + +2004-08-05 11:32 fpillet + + * bindings/Perl/Pilot.xs, bindings/Python/src/pisock.i, + bindings/Python/src/pisock_wrap.c, src/memos.c, src/pilot-file.c, + src/pilot-memos.c, src/pilot-prc.c, src/pilot-read-palmpix.c, + src/pilot-read-todos.c, src/read-palmpix.c, src/read-todos.c, + tests/versamail-test.c: updated code to take modifications in + pi-file into account + +2004-08-05 11:30 fpillet + + * include/pi-file.h, libpisock/pi-file.c: updated pi-file to return + explicit error codes + +2004-08-05 11:30 fpillet + + * include/pi-dlp.h: updated dlp errors + +2004-08-05 09:38 fpillet + + * include/pi-error.h: new error codes + +2004-08-05 08:56 nicholas + + * bindings/Python/src/: pisock.i, pisock_wrap.c: Compiles again, + but _untested_. I thought compiling was at least better than not + compiling. Need to look into dealing with callback functions too, + should be straight forward, but I've zero copious free time. + +2004-08-04 10:14 fpillet + + * include/pi-socket.h, libpisock/socket.c: added + pi_socket_connected() entry point + +2004-08-04 10:00 fpillet + + * include/pi-error.h, libpisock/dlp.c: cleaned up error codes + coming from a prototype version of my error reporting stuff + +2004-08-03 11:12 fpillet + + * libpisock/dlp.c: record_dump was buggy when used from + dlp_WriteRecord and didn't support large records. Fixed this. + +2004-08-03 03:58 fpillet + + * src/: dlpsh.c, pilot-dlpsh.c: properly check for end of + dlp_ReadDBList after change in error reporting + +2004-08-03 03:57 fpillet + + * tests/vfs-test.c: updated code to properly take improved err + reporting into account + +2004-08-03 03:56 fpillet + + * libpisock/: cmp.c, connect.c, darwinusb.c, dlp.c, freebsdusb.c, + inet.c, linuxusb.c, net.c, padp.c, serial.c, slp.c, socket.c, + sys.c, syspkt.c, unixserial.c, usb.c: big commit with improved + error reporting + +2004-08-02 18:13 fpillet + + * include/pi-error.h: updated error list + +2004-08-02 18:13 fpillet + + * src/pilot-xfer.c: fixed the display bugs when backing up files + (files where stat()ed before being created) + +2004-08-02 04:25 fpillet + + * libpisock/socket.c, include/pi-socket.h: added pi_error() stuff + to socket.c, fixed a problem with the PEEK init sequence which + was counting too much on an obscure feature of PI_MSG_PEEK on + most platforms, fixed another issue with pi_close(). + +2004-08-02 04:03 fpillet + + * include/Makefile.am: added pi-error.h to make rules + +2004-08-02 04:03 fpillet + + * include/pi-error.h: New pi-error.h file, holding the error code + definitions as returned by pi_error() (see pi-socket.h for + pi_error()) + +2004-08-02 04:02 fpillet + + * include/pi-usb.h: removed the 'pos' member of the pi_usb_data + structure, nobody uses it + +2004-08-02 04:01 fpillet + + * libpisock/freebsdusb.c: rewrote freebsdusb's u_read() function. + Note: there was NO timeout handling in either u_read() or + u_write() in the original freebsdusb code. I didn't put it back + in from the linuxusb source, but someone who can test on freebsd + should definitely do it. + +2004-08-01 18:52 adridg + + * libpisock/freebsdusb.c: Update function prototypes to support + Florent's pi_buffer_t (and so it compiles); u_read is horribly + broken though, since it doesn't actually _do_ any of the + pi_buffer_t management. + +2004-08-01 18:50 fpillet + + * libpisock/unixserial.c: fixed a wrong memcpy I left when I + converted unixserial to use pi_buffer_t + +2004-07-29 11:39 fpillet + + * libpisock/inet.c: minor cleanup + +2004-07-29 11:33 fpillet + + * libpisock/net.c: minor fix to net_protocol_dup, and streamlined + some code + +2004-07-29 07:39 fpillet + + * libpisock/dlp.c: Several fixes in this commit: fixed issues in + dlp_request_new/free, dlp_response_new/free; turned a few + fprintf()s into LOG; fixed a segfault when receiving >64k records + from Palm OS 5 devices under certain conditions + +2004-07-27 12:24 desrod + + * bindings/Perl/Pilot.xs: Fix the last two remaining errors and + clean up the invalid pointer, using the new pi_buffer_t and the + ugliest cast I've ever seen ;) + +2004-07-27 04:56 fpillet + + * include/pi-file.h, libpisock/pi-file.c: modified progress + callback prototype to return a int. Callbacks can return either + PI_TRANSFER_CONTINUE or PI_TRANSFER_STOP, effectively allowing + the callback to interrupt a transfer (at least between individual + record downloads / uploads) + +2004-07-27 02:49 desrod + + * bindings/Perl/Pilot.xs: Crikey, who indented this mess. I'll fix + it! + +2004-07-27 01:16 desrod + + * bindings/Perl/Pilot.xs: Updating Perl bindings to handle the + pi_buffer_* API, only 2 errors left to go + +2004-07-26 20:53 desrod + + * include/pi-cmp.h, include/pi-net.h, include/pi-padp.h, + include/pi-slp.h, include/pi-sys.h, libpisock/cmp.c, + libpisock/freebsdusb.c, libpisock/inet.c, libpisock/net.c, + libpisock/padp.c, libpisock/palmpix.c, libpisock/slp.c, + libpisock/sys.c: ssize_t/size_t vs. int fixes for warning-free + compilation on 64-bit arch, from Adriaan de Groot + +2004-07-26 20:47 desrod + + * bindings/Perl/Makefile.PL.in: Fix for installing Pilot.so against + system libs, instead of local build-tree libs. Closes #1122 + +2004-07-26 17:45 desrod + + * src/pilot-xfer.c: Minor fixes to make sure we're not off-by-one, + and reporting the right file sizes + +2004-07-26 17:44 desrod + + * include/pi-socket.h: Minor cleanup fix from Adriaan de Groot + +2004-07-26 16:33 fpillet + + * libpisock/pi-file.c: hardened checks against invalid files in + pi_file_open() + +2004-07-26 14:26 fpillet + + * src/: pi-nredir.c, pilot-nredir.c: fixed issue in pi-nredir: was + not rewriting the right piece of data to the distant socket (my + bad: was writing buffer instead of buffer->data) + +2004-07-23 17:27 knghtbrd + + * src/Makefile.am: use $(POPT_LIBS), not + $(top_builddir)/popt/libpopt.la - it might not get built! + +2004-07-23 12:49 fpillet + + * bindings/Python/src/pisock_wrap.c, include/pi-file.h, + libpisock/pi-file.c, src/pilot-foto.c, src/pilot-xfer.c: + Implemented progress callbacks support for pi_file_install(), + pi_file_merge() and pi_file_retrieve() + +2004-07-23 10:51 fpillet + + * libpisock/dlp.c: ENH: added support for dlpDBListMultiple in + dlp_FindDBInfo to speed up operations + +2004-07-23 06:15 fpillet + + * libpisock/dlp.c, include/pi-dlp.h: Added support for download and + upload of large records. Works/tested with TapWave Zodiac and + Palm OS 6 simulator. + +2004-07-19 16:35 angusa + + * src/: pilot-read-screenshot.c, read-screenshot.c, + pilot-read-veo.c, read-veo.c: Fixed HAVE_PNG defines + +2004-07-19 13:46 angusa + + * src/: pilot-read-screenshot.c, read-screenshot.c: Changed some + unsigned char buffers to pi_buffer_t Added support for version 1 + screenshots and grayscale + +2004-07-19 11:04 desrod + + * configure.in, src/Makefile.am, src/pilot-read-screenshot.c, + src/read-screenshot.c: Bump to rc12, add read-screenshot + +2004-07-18 21:08 desrod + + * src/: install-netsync.c, pilot-install-netsync.c: Negate popt for + now, lets keep it building instead. + +2004-07-15 05:43 fpillet + + * include/pi-file.h, libpisock/pi-file.c: revised constness on some + function prototypes + +2004-07-02 17:24 fpillet + + * libpisock/dlp.c: fixed DLP version check in dlp_VFSFileSize and + dlp_VFSFileResize + +2004-07-02 09:50 fpillet + + * libpisock/dlp.c: make sure numVols is set to 0 if nothing else in + dlp_VFSVolumeEnumerate + +2004-06-28 14:08 fpillet + + * libpisock/dlp.c: Fixed improper conversion from DLP date to + time_t in dlp_ptohdate(). Due to improper conversion, most dates + returned were -1. Dates are not correctly returned as a time_t + expressed in the machine's current timezone. + +2004-06-28 14:07 fpillet + + * ChangeLog: Updated ChangeLog + +2004-06-16 18:34 warp + + * libpisock/libusb.c: Update to use the new buffer stuff, whoops, + forgot to commit this before. + +2004-06-07 18:45 fpillet + + * libpisock/socket.c: added missing byte_buf reinit + +2004-06-07 15:16 fpillet + + * include/pi-dlp.h: added comment about the maxRecSize member of + DBSizeInfo + +2004-06-07 15:15 fpillet + + * libpisock/dlp.c: factored out response decoding in the three + dlp_FindDB variants, fixed several bugs that crashed both the + desktop side and the palm side + +2004-06-07 10:52 fpillet + + * include/pi-cmp.h, include/pi-dlp.h, include/pi-dlp.hxx, + include/pi-net.h, include/pi-padp.h, include/pi-serial.h, + include/pi-slp.h, include/pi-socket.h, include/pi-source.h, + include/pi-sys.h, include/pi-usb.h, libpisock/Makefile.am, + libpisock/cmp.c, libpisock/darwinusb.c, libpisock/dlp.c, + libpisock/inet.c, libpisock/linuxusb.c, libpisock/net.c, + libpisock/padp.c, libpisock/pi-file.c, libpisock/slp.c, + libpisock/socket.c, libpisock/sys.c, libpisock/syspkt.c, + libpisock/unixserial.c, libpisock/versamail.c, libpisync/sync.c, + src/addresses.c, src/debugsh.c, src/dlpsh.c, src/hinotes.c, + src/install-netsync.c, src/memos.c, src/money2qif.c, + src/pi-nredir.c, src/pilot-addresses.c, src/pilot-archive.c, + src/pilot-debugsh.c, src/pilot-dedupe.c, src/pilot-dlpsh.c, + src/pilot-foto.c, src/pilot-hinotes.c, + src/pilot-install-netsync.c, src/pilot-mail.c, src/pilot-memos.c, + src/pilot-nredir.c, src/pilot-read-expenses.c, + src/pilot-read-ical.c, src/pilot-read-notepad.c, + src/pilot-read-palmpix.c, src/pilot-read-todos.c, + src/pilot-read-veo.c, src/pilot-reminders.c, src/pilot-schlep.c, + src/pilot-wav.c, src/pilot-xfer.c, src/read-expenses.c, + src/read-ical.c, src/read-notepad.c, src/read-palmpix.c, + src/read-todos.c, src/read-veo.c, src/reminders.c, + tests/dlp-test.c, tests/versamail-test.c, tests/vfs-test.c: BIG + COMMIT: changed several prototypes to take and return a + pi_buffer_t*, so as to be able to download and upload records and + resources bigger than 64k. Several other tweaks as well. + +2004-06-02 10:22 fpillet + + * darwin/build_framework.sh: added prebinding support when building + framework (see usage notes at top of script) + +2004-06-01 06:13 nicholas + + * bindings/Python/: README, pisock.py, setup.py.in, src/pisock.i, + src/pisock.py, src/pisock_wrap.c: Updated Python bindings to work + with Florent's patch (v3), and Swig 1.3.21 + +2004-05-31 07:49 fpillet + + * darwin/build_framework.sh: fixed linking and internal symlinks + +2004-05-30 17:59 warp + + * libpisock/pi-file.c: Er, oops. Now /this/ is a stupid mistake. + +2004-05-30 09:02 fpillet + + * include/Makefile.am: added pi-buffer.h to c_headers + +2004-05-29 12:50 warp + + * include/pi-dlp.h, libpisock/dlp.c: Make the dbname argument to + dlp_FindDBInfo const, possibly the first of many such changes. + +2004-05-28 18:20 fpillet + + * include/pi-buffer.h: new pi_buffer_t type + +2004-05-28 18:20 fpillet + + * libpisock/: pi-buffer.lo, pi-buffer.o: stupid .* commit, sorry + +2004-05-28 18:19 fpillet + + * libpisock/: pi-buffer.c, pi-buffer.lo, pi-buffer.o: new + pi_buffer_t type and accessor functions + +2004-05-27 21:41 knghtbrd + + * Makefile.am, configure.in: Renamed --with-cpp to --with-cxx to + avoid confusion with the preprocessor and made it actually use + the compiler argument. Removed LIBCXX and the check for + libstdc++ since the latter isn't portable anyway. In theory, + this should work for everyone. In practice, the C++ check will + probably need to be altered to check a whole bunch of things like + the readline check does once people start reporting what breaks. + *sigh* + +2004-05-27 18:46 knghtbrd + + * Makefile.am, configure.in, tcl.m4, darwin/.cvsignore, + darwin/Makefile.am, m4/tcl.m4, popt/Makefile.am: More + autoconf/automake fixes: make dist works properly again, modern + versions of automake no longer complain about unquoted function + names in macro declarations, tcl.m4 is no longer installed to the + system, and both included and system popt now work. + +2004-05-26 15:38 knghtbrd + + * Makefile.am, configure.in, src/Makefile.am: Rewrote the popt + configure.in stuff a bit so that it actually works the way it + should. (There may be a residual bug or two, working on them!) + +2004-05-26 03:28 knghtbrd + + * configure.in, m4/vl_lib_readline.m4: Made the readline check + better.. + +2004-05-26 01:32 knghtbrd + + * libpisock/: darwinusb.c, usb.c: The Zire 72 shares 0061 with the + 31. + +2004-05-25 03:29 knghtbrd + + * configure.in, src/dlpsh.c, src/pilot-dlpsh.c: Fix potential NULL + dereference (readline returns NULL at EOF) + +2004-05-25 03:09 knghtbrd + + * Makefile.am, acinclude.m4, autogen.sh, m4/tcl.m4, + m4/vl_lib_readline.m4, src/dlpsh.c, src/pilot-dlpsh.c: Made some + changes to auto* build system: - Created m4/ and moved tcl.m4 + into it (gets rid of acinclude.m4) - Added m4/vl_lib_readline.m4 + - better readline finding - made existing stuff work with new + readline detection - configure --without-cpp no longer forces + you to have libstdc++ anyway + +2004-05-25 01:50 knghtbrd + + * libpisock/connect.c: Add missing " + +2004-05-24 09:15 desrod + + * libpisock/connect.c: Minor formatting changes (actually, just + forcing a commit to track a cvs history bug also) + +2004-05-21 10:02 warp + + * include/pi-socket.h, include/pi-source.h, libpisock/connect.c, + libpisock/inet.c, libpisock/libusb.c, libpisock/serial.c, + libpisock/socket.c, libpisock/usb.c, src/dlpsh.c, + src/pilot-dlpsh.c: Fixed the fd leak problem with a chainsaw, + removing all device duplication code. + + Reverted connect.c to the pre-mace version, with some changes. + + NOTE! This changes the pi_accept API, it now returns the sd + passed to it, instead of making a duplicate of it and returning + that, this will have an impact on all programs which try to treat + the 'parent' sd and the 'client' sd differently. + + Fixed a libusb reopening bug. + + Added the (very hacky) reopen command to dlpsh, to test reopening + the link to the PDA. + + 9 files changed, 108 insertions(+), 395 deletions(-) + +2004-05-21 03:30 warp + + * libpisock/libusb.c: Whoops, fix a little bug. + +2004-05-20 01:20 angusa + + * libpisock/palmpix.c: Added histogram and colour correction. Also + fixed interpolation + +2004-05-20 01:19 angusa + + * include/pi-palmpix.h: Added colour correction and histogram flags + +2004-05-20 01:18 angusa + + * src/: pilot-read-palmpix.c, read-palmpix.c: Added histogram, bias + and colour correction options + +2004-05-20 01:15 angusa + + * doc/man/read-veo.1.in: Fixed portable network graphic references + +2004-05-20 01:14 angusa + + * doc/man/read-palmpix.1.in: Added histogram, colour correct and + bias + +2004-05-20 01:00 desrod + + * Makefile.am: Add popt to SUBDIRS target + +2004-05-20 00:40 desrod + + * src/: addresses.c, dlpsh.c, hinotes.c, install-datebook.c, + install-expenses.c, install-hinote.c, install-memo.c, + install-netsync.c, install-todo.c, install-todos.c, + install-user.c, memos.c, money2qif.c, pilot-dlpsh.c, + pilot-hinotes.c, pilot-install-datebook.c, + pilot-install-expenses.c, pilot-install-hinote.c, + pilot-install-memo.c, pilot-install-netsync.c, + pilot-install-todo.c, pilot-install-todos.c, + pilot-install-user.c, pilot-memos.c, pi-csd.c, pi-getram.c, + pi-getrom.c, pi-getromtoken.c, pi-nredir.c, pi-port.c, + pilot-addresses.c, pilot-archive.c, pilot-clip.c, pilot-csd.c, + pilot-dedupe.c, pilot-file.c, pilot-foto.c, pilot-getram.c, + pilot-getrom.c, pilot-getromtoken.c, pilot-mail.c, + pilot-nredir.c, pilot-port.c, pilot-prc.c, pilot-read-expenses.c, + pilot-read-ical.c, pilot-read-notepad.c, pilot-read-palmpix.c, + pilot-read-todos.c, pilot-read-veo.c, pilot-reminders.c, + pilot-schlep.c, pilot-wav.c, pilot-xfer.c, read-expenses.c, + read-ical.c, read-notepad.c, read-palmpix.c, read-todos.c, + read-veo.c, reminders.c: Remove unnecessary prototype references, + fix up existing calls to match the new const declarations in + pi-header.h + +2004-05-20 00:25 warp + + * libpisock/: libusb.c, usb.c: Some minor cleanups in usb.c. + + Make the libusb open much more verbose, and make the reset logic + more robust for the case of the device not immediately + reappearing on reset. (2.4) + +2004-05-19 11:38 desrod + + * include/pi-header.h, libpisock/connect.c: Possible fixes for + pilot_connect from Miah Gregory + +2004-05-19 09:26 desrod + + * libpisock/connect.c: Fix leaking parent_sd fd.. (Miah Gregory) + +2004-05-19 09:06 desrod + + * README: Fix minor typo (caught by mace) + +2004-05-18 17:49 desrod + + * src/Makefile.am: More getopt deprecation, popt additions + +2004-05-18 16:31 desrod + + * popt/.cvsignore: Ignore these critters + +2004-05-18 16:25 desrod + + * popt/Makefile.am: Forgot to add Makefile.am + +2004-05-18 16:06 desrod + + * configure.in: Oops, we don't need -rc9-popt there + +2004-05-18 16:01 desrod + + * popt/CHANGES: We don't need this file in our tree + +2004-05-18 16:00 desrod + + * configure.in, popt/CHANGES, popt/COPYING, popt/README, + popt/findme.c, popt/findme.h, popt/popt.c, popt/popt.h, + popt/poptconfig.c, popt/popthelp.c, popt/poptint.h, + popt/poptparse.c, popt/system.h: Moving to a possible popt + conversion + +2004-05-18 12:59 angusa + + * src/: pilot-read-veo.c, read-veo.c: Added better colour + correction algorithm and bias to adjust the brightness. + +2004-05-18 12:56 angusa + + * doc/man/read-veo.1.in: Added colour correction and name output + flags. Alphabetized the options + +2004-05-18 12:42 fpillet + + * libpisock/dlp.c: normalized // comments to /* */ + +2004-05-18 08:47 warp + + * libpisock/libusb.c: Use the new common code. + + Clean up the debugging messages for the case of no debugging + being enabled. + + Clean up the double close error. + + Handle some error cases better. + + Change the peek to only read one byte at a time. + + Reset the device before use. + + Probably other stuff that I'm forgetting. + +2004-05-18 08:44 warp + + * include/pi-usb.h, libpisock/usb.c: The new common USB code for + init and identification, not completely done, but functional. + + Should not break anything. + +2004-05-18 08:00 desrod + + * configure.in: Starting the popt conversion + +2004-05-18 07:56 desrod + + * src/pilot-xfer.c: More minor indenting cleanups, prior to the + popt injection + +2004-05-18 06:23 warp + + * src/pilot-xfer.c: Fix restore. + + Clean up some space vs tab indentation issues. + +2004-05-17 19:30 desrod + + * libpisock/pi-file.c: Remove erroneous \n that was screwing up + userland + +2004-05-17 15:13 desrod + + * tests/vfs-test.c: Added unistd.h to bring in size_t on non-GNU + systems. + +2004-05-17 15:03 desrod + + * src/: pi-getram.c, pi-getrom.c, pilot-getram.c, pilot-getrom.c: + Add quick checks to quit if OS5 or later is found, so we don't + crash the user's device with a nice RPC error + reset. + +2004-05-16 18:38 knghtbrd + + * configure.in: Removed a couple stray lines that were harmless, + but also needless. + +2004-05-15 15:24 knghtbrd + + * configure.in: Er, CFLAGS goes with CFLAGS, CXXFLAGS goes with + CXXFLAGS, doh. + +2004-05-15 05:22 knghtbrd + + * configure.in: Changes related to CFLAGS and friends: + Moved/rewrote the MacOS X fink test, added compiler defaults for + GCC, removed AC_SUBST of compiler flags because it's not + necessary, added CPPFLAGS to configure summary. + +2004-05-14 22:29 desrod + + * configure.in: Bump to rc8, soname bump + +2004-05-14 22:00 desrod + + * include/pi-dlp.h, libpisock/dlp.c: Florent Pillet's DLP fixes and + updates. + +2004-05-14 21:08 knghtbrd + + * src/pilot-addresses.c: Hans Meine's fix for pilot-addresses (or + half of it, anyway.) + +2004-05-13 10:55 angusa + + * include/pi-veo.h: Added command for single file output + +2004-05-12 15:28 knghtbrd + + * .cvsignore, bindings/Python/.cvsignore, src/.cvsignore, + tests/.cvsignore: Updated .cvsignore files + +2004-05-12 14:53 desrod + + * include/pi-net.h, libpisock/net.c: (Patch from Florent Pillet) + + - adds bounds checking to net_rx (see comments I added to the + net_rx function) + + - fixes issue where receive buffer needed to add 6 bytes for + temporary header (the packet header is now read into a separate + buffer). You'd get a crash if you call pi_read() with a buffer + of the exact expected size, for example. + +2004-05-12 04:25 fpillet + + * include/pi-dlp.h: added opcode values next to dlp func defines to + ease reading packet traces + +2004-05-10 20:07 knghtbrd + + * configure.in: Fix my half-edited --help test for configure + +2004-05-10 19:56 fpillet + + * include/pi-dlp.h, libpisock/dlp.c, tests/vfs-test.c: VFS + functions tested & fixed + +2004-05-10 17:27 angusa + + * src/: pilot-read-veo.c, read-veo.c: Added png output. Single + picture output Histogram adjustment Comments + +2004-05-10 04:35 fpillet + + * libpisock/darwinusb.c: comments & define tweaks + +2004-05-09 20:30 knghtbrd + + * libpisock/darwinusb.c: Some comments got lost in moving things + around. I don't have Florent's more verbose comments in front of + me, but this will help make some sense of the variables. + +2004-05-09 20:28 knghtbrd + + * configure.in: Better handling of -Werror set in the environment + +2004-05-09 06:26 knghtbrd + + * include/pi-palmpix.h, include/pi-sync.h, libpisock/palmpix.c, + src/install-memo.c, src/memos.c, src/pi-getromtoken.c, + src/pi-nredir.c, src/pilot-addresses.c, src/pilot-archive.c, + src/pilot-file.c, src/pilot-foto.c, src/pilot-getromtoken.c, + src/pilot-install-memo.c, src/pilot-memos.c, src/pilot-nredir.c, + src/pilot-prc.c, src/pilot-wav.c, src/pilot-read-notepad.c, + src/pilot-read-palmpix.c, src/pilot-read-todos.c, + src/pilot-xfer.c, src/read-notepad.c, src/read-palmpix.c, + src/read-todos.c, tests/versamail-test.c: Most compiler warnings + issued with -Wall are fixed. test-versamail and pilot-datebook + still have a few, but perhaps someone else can squash them? + +2004-05-08 19:01 knghtbrd + + * configure.in, darwin/build_framework.sh, include/Makefile.am, + include/darwinusbcore.h, libpisock/Makefile.am, + libpisock/darwinusb.c, libpisock/darwinusbcore.cpp: Need to + commit this so I can move on. It seems to break nothing, + although it undoes one small change Florent made to Darwin's USB + code which broke it for me. + +2004-05-08 05:52 knghtbrd + + * libpisock/: connect.c, inet.c, net.c, socket.c: Excepting + darwinusb (which is waiting on Florent and David to test my + patch), this will make libpisock -Wall -Werror clean on a Mac. + +2004-05-08 04:57 knghtbrd + + * include/pi-serial.h, include/pi-socket.h, include/pi-usb.h, + libpisock/address.c, libpisock/cmp.c, libpisock/connect.c, + libpisock/serial.c, libpisock/usb.c, libpisock/util.c, + src/addresses.c, src/dlpsh.c, src/pilot-addresses.c, + src/pilot-dlpsh.c, src/pilot-xfer.c: Some compiler warning fixes + from Florent that got lost in the shuffle.. + +2004-05-08 04:40 knghtbrd + + * configure.in: AC_TYPE_SIGNAL produces a compiler warning. If + -Werror is set, this warning can cause RETSIGTYPE to be set to + int on systems where it should be void. This causes the code to + issue a warning, which produces a compile error. Vicious cycle + go splat! (The workaround is a bit hackish, but it's + autoconf--what can you do?) + +2004-05-07 21:59 warp + + * configure.in, libpisock/Makefile.am, libpisock/libusb.c: libusb + support, use --enable-libusb. + +2004-05-07 02:51 fpillet + + * libpisock/darwinusbcore.cpp: use the regular InterfaceInterface + (don't need v182), fixed a leak in start_listening, added check + for PalmConnect USB, fixed a return request buffer size for close + notification + +2004-05-07 02:49 fpillet + + * libpisock/darwinusb.c: fixed prototypes in darwinusb (patch not + applied by David) + +2004-05-06 16:23 knghtbrd + + * configure.in, libpisock/Makefile.am, src/install-netsync.c, + src/pilot-install-netsync.c: pilot-link now compiles on MacOS X, + though with many warnings yet. This code walks over one of + Florent's unapplied patches a bit, but is the more correct fix + anyway. Darwin users *must* make distclean; ./autogen.sh all + over again to ensure that libtool works. + +2004-05-06 15:40 warp + + * autogen.sh: Fix it some more. + +2004-05-06 15:16 warp + + * autogen.sh, src/pilot-xfer.c: Fix autogen on my box. + + Actually increment totalsize. + +2004-05-06 15:10 desrod + + * include/pi-foto.h: Oops, missing. + +2004-05-06 14:10 desrod + + * darwin/build_framework.sh: Added Florent's build_framework.sh + +2004-05-06 14:06 desrod + + * src/pilot-xfer.c: Kill strndup + +2004-05-06 13:34 desrod + + * Makefile.am, acinclude.m4, autogen.sh, configure.in, + pilot-link.m4.in, bindings/Java/Makefile.am, + bindings/Java/README, bindings/Java/README.de, + bindings/Java/libjpisock.c, bindings/Java/libjpisock.h, + bindings/Java/test.java, bindings/Perl/dump.pl, + bindings/Perl/test.pl, bindings/Python/src/pisock_wrap.c, + doc/man/addresses.1.in, doc/man/dlpsh.1.in, doc/man/hinotes.1.in, + doc/man/ietf2datebook.1.in, doc/man/install-datebook.1.in, + doc/man/install-expenses.1.in, doc/man/install-hinote.1.in, + doc/man/install-memo.1.in, doc/man/install-netsync.1.in, + doc/man/install-todo.1.in, doc/man/install-user.1.in, + doc/man/memos.1.in, doc/man/pi-getram.1.in, + doc/man/pi-getrom.1.in, doc/man/pilot-addresses.1.in, + doc/man/pilot-foto.1.in, doc/man/pilot-link.7.in, + doc/man/pilot-xfer.1.in, doc/man/read-expenses.1.in, + doc/man/read-ical.1.in, doc/man/read-notepad.1.in, + doc/man/read-palmpix.1.in, doc/man/read-todos.1.in, + doc/man/read-veo.1.in, include/Makefile.am, + include/darwinusbcore.h, include/pi-address.h, + include/pi-appinfo.h, include/pi-cmp.h, include/pi-datebook.h, + include/pi-debug.h, include/pi-dlp.h, include/pi-dlp.hxx, + include/pi-expense.h, include/pi-file.h, include/pi-hinote.h, + include/pi-inet.h, include/pi-mail.h, include/pi-memo.h, + include/pi-money.h, include/pi-net.h, include/pi-notepad.h, + include/pi-padp.h, include/pi-serial.h, include/pi-slp.h, + include/pi-socket.h, include/pi-source.h, include/pi-sys.h, + include/pi-syspkt.h, include/pi-todo.h, include/pi-usb.h, + include/pi-veo.h, libpisock/Makefile.am, libpisock/address.c, + libpisock/appinfo.c, libpisock/cmp.c, libpisock/connect.c, + libpisock/darwinusb.c, libpisock/darwinusbcore.cpp, + libpisock/datebook.c, libpisock/debug.c, libpisock/dlp.c, + libpisock/expense.c, libpisock/freebsdusb.c, libpisock/hinote.c, + libpisock/inet.c, libpisock/linuxusb.c, libpisock/mail.c, + libpisock/md5.c, libpisock/memo.c, libpisock/money.c, + libpisock/net.c, libpisock/notepad.c, libpisock/os2serial.c, + libpisock/padp.c, libpisock/palmpix.c, libpisock/pi-file.c, + libpisock/pi-header.c, libpisock/serial.c, libpisock/slp.c, + libpisock/socket.c, libpisock/sys.c, libpisock/syspkt.c, + libpisock/todo.c, libpisock/unixserial.c, libpisock/usb.c, + libpisock/util.c, libpisock/utils.c, libpisock/veo.c, + libpisock/winserial.c, src/Makefile.am, src/addresses.c, + src/ccexample.cc, src/debugsh.c, src/dlpsh.c, src/hinotes.c, + src/pilot-debugsh.c, src/pilot-dlpsh.c, src/pilot-hinotes.c, + src/install-datebook.c, src/install-expenses.c, + src/install-hinote.c, src/install-netsync.c, src/install-todo.c, + src/install-todos.c, src/install-user.c, src/kittykiller.c, + src/memos.c, src/money2qif.c, src/pd-tty.c, src/pi-csd.c, + src/pi-nredir.c, src/pilot-addresses.c, src/pilot-archive.c, + src/pilot-clip.c, src/pilot-csd.c, src/pilot-dedupe.c, + src/pilot-file.c, src/pilot-foto.c, src/pilot-install-datebook.c, + src/pilot-install-expenses.c, src/pilot-install-hinote.c, + src/pilot-install-netsync.c, src/pilot-install-todo.c, + src/pilot-install-todos.c, src/pilot-install-user.c, + src/pilot-mail.c, src/pilot-memos.c, src/pilot-nredir.c, + src/pilot-read-expenses.c, src/pilot-read-ical.c, + src/pilot-read-notepad.c, src/pilot-read-todos.c, + src/pilot-read-veo.c, src/pilot-reminders.c, src/pilot-schlep.c, + src/pilot-wav.c, src/pilot-xfer.c, src/read-expenses.c, + src/read-ical.c, src/read-notepad.c, src/read-todos.c, + src/read-veo.c, src/reminders.c, src/validate.cc, + tests/dlp-test.c, tests/vfs-test.c: Enormous commit, bring it up + to hopefully current + +2004-04-29 10:03 desrod + + * README: Updated README to bring it to current. Still a few pokes + left to go. + +2004-04-18 15:48 desrod + + * ChangeLog, src/pilot-xfer.c: Some ugly changes to pilot-xfer.c, + will throw most of this away soon. + +2004-04-16 12:27 nicholas + + * ChangeLog, include/pi-versamail.h, libpisock/versamail.c, + tests/versamail-test.c: Cope a bit better with versamail mail + with attachments + +2004-04-16 08:29 desrod + + * tests/Makefile.am, include/Makefile.am, libpisock/Makefile.am: + Added Nicholas Piper's versamail to Makefile.am to bootstrap + +2004-04-15 13:03 nicholas + + * ChangeLog, include/pi-contact.h, libpisock/contact.c: First cut + of Contacts support + +2004-04-15 12:58 nicholas + + * ChangeLog, include/pi-versamail.h, libpisock/versamail.c, + tests/versamail-test.c: First cut of versamail support + +2004-02-24 21:29 desrod + + * ChangeLog, libpisock/dlp.c: Fix comments + +2004-02-20 12:22 desrod + + * src/parsedate.c: Removing autogenerated file + +2004-02-20 10:19 desrod + + * src/: install-memo.c, pilot-install-memo.c: Oops, one more minor + verbage fix + +2004-02-20 10:18 desrod + + * src/: install-memo.c, pilot-install-memo.c: Logic fixes, fix for + minor getopt bug where 't' required an empty arg, small verbage + and usability fixes, etc. + +2004-02-20 09:42 desrod + + * libpisock/connect.c: Minor visual fix. + +2004-02-09 22:04 desrod + + * tcl.m4, m4/tcl.m4, src/Makefile.am: Fixed up pilot-debug, tcl.h + path detection, error check output + +2004-02-09 18:45 desrod + + * src/pilot-debug.c: What a mess. This should be turned inside out, + with straight TCL, and inline C inside that. One thing at a time. + +2004-02-09 14:13 desrod + + * src/pilot-prc.c: Remove unnecessary globals, fix broken invalid + function defs. + +2004-01-22 17:20 desrod + + * doc/README.usb: Corrected some missing paragraph content, added + info about the new method to load visor.o wth vendor/product + dynamically. + +2004-01-22 17:11 desrod + + * doc/README.usb: Updated verbage for newer devices, fixed links to + the wiki, added more current information about compiling modules + directly without kernel compile, more. + +2004-01-18 11:26 desrod + + * src/: pilot-read-palmpix.c, read-palmpix.c: Deallocate the arg + instead of losing it + +2004-01-18 10:48 desrod + + * ChangeLog, src/pilot-read-veo.c, src/read-veo.c: Code formatting + changes, added function doc headers, misc. cleanups + +2004-01-18 10:00 desrod + + * src/: install-netsync.c, pilot-install-netsync.c: Revert + priv_strdup() back out. + +2004-01-18 09:58 desrod + + * src/: install-netsync.c, pilot-install-netsync.c: Revert + priv_strdup back out. + +2004-01-18 09:57 desrod + + * libpisock/: address.c, datebook.c, dlp.c, expense.c, hinote.c, + inet.c, mail.c, memo.c, net.c, notepad.c, palmpix.c, pi-file.c, + slp.c, socket.c, todo.c, utils.c: Revert the priv_strdup back + out. + +2004-01-18 09:25 desrod + + * src/: pi-csd.c, pilot-csd.c: inet_pton() in case we need to go + IPv6, fixed some minor pedantic problems + +2004-01-17 20:08 desrod + + * ChangeLog: Updated changelog for 01-17-2004 + +2004-01-17 18:42 desrod + + * src/: install-netsync.c, install-user.c, pilot-install-netsync.c, + pilot-install-user.c: Code refactoring, cleanup. + +2004-01-17 18:14 desrod + + * libpisock/: address.c, datebook.c, expense.c, hinote.c, mail.c, + memo.c, notepad.c, pi-file.c, socket.c, todo.c: Update source to + use our private strdup() function, and ignore any global copy. + +2004-01-17 18:13 desrod + + * libpisock/utils.c: Use priv_strdup() instead of making it a + global. Refactor the strdup function a bit. + +2004-01-17 18:12 desrod + + * src/pilot-wav.c: Added missing function documentation headers, + missing prototypes. + +2004-01-05 14:49 desrod + + * doc/man/pilot-archive.1.in: Updated wording on the pilot-archive + manpage + +2004-01-05 14:41 desrod + + * configure.in: Added new manpage for pilot-archive + +2004-01-05 14:40 desrod + + * doc/man/Makefile.am: Added manpage for pilot-archive + +2004-01-05 14:39 desrod + + * ChangeLog, doc/man/pilot-archive.1.in, src/pilot-archive.c: + Cleaned up code, removed unused headers, unused vars. Added new + manpage for pilot-archive. + +2004-01-03 14:52 desrod + + * tests/vfs-test.c: Minor cleanup, removed unused headers, + reformatted initializers. + +2004-01-03 14:44 desrod + + * tests/vfs-test.c: Remove unused code that was copied from + dlp-test.c + +2004-01-02 11:07 desrod + + * ChangeLog: [no log message] + +2004-01-02 11:07 desrod + + * src/pilot-xfer.c: More code cleanup, more on the way. + +2004-01-02 11:06 desrod + + * libpisock/connect.c: Add appropriate flushing to try to work + around the printf() problem in userland. Might be temporary. + +2004-01-01 09:56 desrod + + * src/pilot-xfer.c: sd should be 0, not -1, oops. + +2003-12-30 18:32 desrod + + * src/: Makefile.am, debugsh.c, pilot-debugsh.c, kittykiller.c, + money2qif.c, pi-getromtoken.c, pilot-addresses.c, pilot-debug.c, + pilot-file.c, pilot-getromtoken.c, pilot-read-expenses.c, + pilot-reminders.c, read-expenses.c, reminders.c: Minor + formatting, removal of unused headers, misc. + +2003-12-30 18:19 desrod + + * src/: pilot-read-palmpix.c, read-palmpix.c: Added function doc + headers + +2003-12-30 18:19 desrod + + * src/: pi-nredir.c, pilot-nredir.c: Removed unnecessary header, + display_help cleanup. + +2003-12-30 18:17 desrod + + * src/: pilot-read-todos.c, read-todos.c, pilot-wav.c: Minor + formatting cleanup + +2003-12-30 18:13 desrod + + * src/: memos.c, pilot-memos.c: Minor formatting + +2003-12-30 18:10 desrod + + * src/: pilot-read-notepad.c, read-notepad.c: Support for + "compressed" Notepad records + +2003-12-30 18:09 desrod + + * src/: pilot-read-veo.c, read-veo.c: C99 comments, minor type + fixes, remove unused vars + +2003-12-30 18:09 desrod + + * src/: install-todo.c, pilot-install-todo.c: Fix closing cleanup, + missing WriteUserInfo call, cleaned up sd call, remove cruft. + +2003-12-30 18:09 desrod + + * src/: dlpsh.c, pilot-dlpsh.c: Minor reformatting/cleanup + +2003-12-30 18:08 desrod + + * src/pilot-xfer.c: Flags instead of running functions in the + switch, remove crufty code, not completed yet (rewrites-aplenty) + +2003-12-30 18:08 desrod + + * src/: install-user.c, pilot-install-user.c: Minor type cleanups + +2003-12-30 18:08 desrod + + * src/addresses.c: More descriptive structure members: s/a/addr/, + removed incorrect argument in the example, minor SyncLog output + fixes. + +2003-12-30 18:07 desrod + + * ChangeLog, libpisock/connect.c: Make sure we are a valid tty + before printing the connect messages, so redirection to files + works properly. + +2003-12-21 15:10 desrod + + * ChangeLog: Fix a check for >255 id, closes bug 829 + +2003-12-21 15:05 desrod + + * ChangeLog, configure.in: Remove check for UID == 0/root check. + +2003-12-21 14:44 desrod + + * ChangeLog, src/install-user.c, src/pilot-install-user.c: Enforce + a positive UserID, even if a negative was passed in. + +2003-12-21 13:23 desrod + + * include/pi-notepad.h, src/pilot-read-notepad.c, + src/read-notepad.c: + Support for "compressed" Notepad records, closes issue #913 + +2003-12-11 12:00 desrod + + * ChangeLog, include/pi-dlp.h: Revert DLP_BUF_SIZE for now + +2003-12-10 13:04 desrod + + * ChangeLog, configure.in: Small fix to check for uid=0 + +2003-11-26 17:47 desrod + + * ChangeLog, doc/man/read-ical.1.in: Updated read-ical manpage + +2003-11-26 17:41 desrod + + * ChangeLog, libpisock/connect.c: Minor error in connect.c, rolling + up into cvs snapshots with this commit. + +2003-11-11 22:36 desrod + + * ChangeLog: Updated ChangeLog + +2003-11-11 22:01 desrod + + * ChangeLog, configure.in: Updated version, added poke to fix a + Gentoo bug + +2003-10-17 08:29 desrod + + * ChangeLog, tests/vfs-test.c: Test conduit for VFS devices + +2003-10-06 12:38 desrod + + * src/pilot-xfer.c: Oops, a68k doesn't belong in there. + +2003-10-06 12:37 desrod + + * ChangeLog, src/pilot-xfer.c: Ignore ARMlet files which can't be + restored back to the Palm anyway + +2003-10-06 10:20 desrod + + * libpisock/dlp.c: DLP_BUF_SIZE cleanup + +2003-10-06 10:12 desrod + + * include/pi-dlp.h: Oops, typo + +2003-10-06 10:04 desrod + + * include/pi-dlp.h: Increment DLP_BUF_SIZE + +2003-10-06 08:15 desrod + + * ChangeLog, doc/man/dlpsh.1.in, doc/man/memos.1.in, + doc/man/pi-getram.1.in, doc/man/pilot-addresses.1.in, + doc/man/pilot-link.7.in: Fixing up some typos in the manpages + +2003-10-06 07:54 desrod + + * ChangeLog, bindings/Python/src/pisock_wrap.c, include/pi-file.h, + libpisock/pi-file.c, src/ccexample.cc, src/pilot-read-ical.c, + src/read-ical.c: Closing some outstanding Debian bugs + +2003-10-06 07:17 desrod + + * ChangeLog, src/pilot-wav.c: New conduit to sync Voice Memo files + from Tungsten devices (David Turner) + +2003-10-05 19:02 desrod + + * src/: pilot-sync-plan.pl, sync-plan.PL: Starting a cleanup, in + preparation for a rewrite to bring to current + +2003-10-05 18:40 desrod + + * src/: pilot-sync-plan.pl, sync-plan.PL: Fix to work around + disconnect/IO errors (Aaron, closes #415) + +2003-10-05 17:58 desrod + + * ChangeLog, include/pi-dlp.h, libpisock/dlp.c, src/pilot-xfer.c, + tests/Makefile.am: First pass at VFS functions + +2003-10-04 07:41 desrod + + * ChangeLog: Test commit, ignore. + +2003-09-23 18:00 desrod + + * ChangeLog, doc/man/memos.1.in, src/memos.c, src/pilot-memos.c: + Fixes to turn the output file into a "real" mbox file, so other + MUAs can load it as one. This closes Debian bug #212229 + +2003-08-18 18:43 desrod + + * ChangeLog, libpisync/Makefile.am: Missing libpisock in libpisync, + closes bug #767. + +2003-08-18 17:48 desrod + + * ChangeLog: Fix for incorrect types, closes #773 + +2003-08-18 17:42 desrod + + * ChangeLog, configure.in: Fixes for libstdc++, closes bug #768 + (needs testing and validation) + +2003-08-18 15:59 desrod + + * ChangeLog, doc/man/pilot-addresses.1.in: Fixed erroneous blank + line, closes bug #765 + +2003-08-18 15:55 desrod + + * ChangeLog, configure.in: Added AM_MAINTAINER_MODE, closes bug + #760 + +2003-07-21 15:15 angusa + + * ChangeLog, doc/man/read-palmpix.1.in, doc/man/read-veo.1.in, + include/Makefile.am, include/pi-veo.h, libpisock/Makefile.am, + libpisock/veo.c, src/Makefile.am, src/pilot-read-veo.c, + src/read-veo.c: New conduit read-veo and support files added + Makefiles changed to compile new conduit read-palmix + documentation updated + +2003-07-18 12:15 jpr + + * ChangeLog, include/pi-dlp.h, libpisock/dlp.c, tests/dlp-test.c: + 2003-07-18 JP Rosevear + + * tests/dlp-test.c (main): update FindDBBy calls + + * libpisock/dlp.c (dlp_FindDBByName): return the localid + and + dbhandle if requested, check dlp version + (dlp_FindDBByOpenHandle): return localid if requested + (dlp_FindDBByTypeCreator): return card, localid and + dbhandle if + requested, check dlp version + + * include/pi-dlp.h: update prototypes + +2003-07-14 11:50 jpr + + * ChangeLog, include/pi-dlp.h, libpisock/dlp.c, src/pilot-xfer.c, + tests/dlp-test.c: 2003-07-14 JP Rosevear + + * src/pilot-xfer.c (main): remove unused var + + * libpisock/dlp.c (dlp_FindDBByName): implement + (dlp_FindDBByOpenHandle): ditto + (dlp_FindDBByTypeCreator): ditto + + * include/pi-dlp.h: add find db option and search flags, + add + protos + + * tests/dlp-test.c (main): add testing of dlp 1.2 FindDB + functions + +2003-07-07 19:57 desrod + + * pilot-link.pc.in: Updated description in pkgconfig file + +2003-07-07 19:08 desrod + + * ChangeLog, src/pilot-xfer.c: More refactoring cleanups + +2003-07-07 15:21 desrod + + * src/pilot-xfer.c: A refactoring we will go! Minor cleanup, + removed redundant code, move to using flags instead of ints, so + we can extend it for ROM, RAM, VFS, etc. + +2003-07-05 13:16 desrod + + * configure.in: Wrong order for exports, fixed. + +2003-07-05 12:19 desrod + + * configure.in: More minor OSX fixes, starting IOKit migration + +2003-07-05 09:59 desrod + + * ChangeLog, autogen.sh, configure.in: Fixed READLINE check, + glibtool vs. libtool on OSX + +2003-07-04 12:03 desrod + + * NEWS: Updated NEWS for 0.11.9 release + +2003-07-04 11:52 desrod + + * configure.in: Bump versions up by one for the 0.11.9 release + +2003-07-04 11:51 desrod + + * src/pilot-xfer.c: Small fix + +2003-07-04 11:40 desrod + + * ChangeLog: Oops + +2003-07-04 11:40 desrod + + * src/pilot-xfer.c: Corrected a screen output buglet + +2003-07-04 11:31 desrod + + * NEWS, bindings/Java/README: Updated NEWS and README to reflect + proper attribution. + +2003-07-02 10:51 jpr + + * .cvsignore, ChangeLog, include/pi-dlp.h, libpisock/dlp.c, + libpisock/socket.c, tests/dlp-test.c: 2003-07-02 JP Rosevear + + + * tests/dlp-test.c (main): test SetDBInfo + + * include/pi-dlp.h: add proto + + * libpisock/socket.c (ps_list_find_elem): return the list + element + rather than the socket + (pi_version): improve implementation so we differentiate + between + dlp 1.1 and higher, cache result + (ps_list_append): set the version to 0 by default + + * libpisock/dlp.c (dlp_SetDBInfo): implement + +2003-07-01 16:04 jpr + + * bindings/Tcl/Makefile.in: Remove generated file. + +2003-07-01 16:03 jpr + + * bindings/: Java/.cvsignore, Tcl/.cvsignore, Tcl/Makefile.in: + shush + +2003-07-01 15:59 desrod + + * doc/man/read-todos.1.in: Added missing read-todos manpage + +2003-07-01 15:55 desrod + + * doc/man/memos.1.in: Added memos manpage + +2003-07-01 15:55 jpr + + * ChangeLog, Makefile.am: 2003-07-01 JP Rosevear + + * Makefile.am: only install the -pp pkgconfig file if c++ + is + enabled + +2003-07-01 15:43 jpr + + * ChangeLog, Makefile.am, configure.in, pilot-link-pp.pc.in, + pilot-link.pc.in: 2003-07-01 JP Rosevear + + * configure.in: output the pkgconfig files + + * Makefile.am: dist the pkgconfig files and install them + +2003-07-01 15:08 desrod + + * configure.in: Added missing manpages to AC_OUTPUT + +2003-07-01 14:55 desrod + + * ChangeLog, NEWS, pilot-link.m4.in, bindings/Makefile.am, + bindings/Tcl/Makefile.in, doc/man/Makefile.am, + libpisock/socket.c, src/dlpsh.c, src/pilot-dlpsh.c: Final commits + for 0.11.8 release + +2003-07-01 14:46 desrod + + * configure.in: Added missing Java and Tcl version reports + +2003-07-01 14:30 desrod + + * src/: pilot-read-todos.c, read-todos.c: Fixed a non-exit issue + when no arguments were passed + +2003-07-01 13:07 jpr + + * ChangeLog, bindings/Tcl/Makefile.am, bindings/Tcl/Makefile.in: + 2003-07-01 JP Rosevear + + * bindings/Tcl/Makefile.am: define package version + +2003-07-01 12:54 jpr + + * ChangeLog, tcl.m4, m4/tcl.m4: 2003-07-01 JP Rosevear + + + * tcl.m4: remove the private header stuff and cygpath + related + stuff for public headers + +2003-07-01 12:34 jpr + + * ChangeLog, configure.in, bindings/Tcl/Makefile.am: 2003-07-01 JP + Rosevear + + * configure.in: subst TCL_INCLUDES + + * bindings/Tcl/Makefile.am: include TCL_INCLUDES + +2003-07-01 12:18 desrod + + * src/: install-user.c, pilot-install-user.c, pilot-xfer.c: Small + output changes, corrected syntax example + +2003-07-01 11:19 jpr + + * configure.in, tcl.m4, bindings/Makefile.am, m4/tcl.m4: 2003-07-01 + JP Rosevear + + * configure.in: only call subsequent tcl macros if we + could find + the tcl config, show enable/disable message properly + + * tcl.m4: allow passing of "no" to --with-tcl to disable + tcl build + + * bindings/Makefile.am: conditionally compile the tcl dir + +2003-06-30 17:03 jpr + + * ChangeLog, acinclude.m4, configure.in, bindings/Tcl/Makefile.am, + bindings/Tcl/Makefile.in, bindings/Tcl/pitcl.c: 2003-06-30 JP + Rosevear + + * configure.in: update tcl check + + * bindings/Tcl/pitcl.c: update for current libpisock + + * bindings/Tcl/Makefile.am: automakize + +2003-06-30 15:51 desrod + + * src/: dlpsh.c, pilot-dlpsh.c: Fixed non-exiting exit bug + +2003-06-30 15:16 desrod + + * libpisock/pi-file.c: display_rate() off for now + +2003-06-30 14:56 desrod + + * configure.in, tcl.m4, m4/tcl.m4: Tcl m4 macros + +2003-06-30 14:56 jpr + + * ChangeLog, include/pi-util.h: 2003-06-30 JP Rosevear + + + * include/pi-util.h: fix comment + +2003-06-30 14:50 desrod + + * libpisock/: datebook.c, expense.c, mail.c, notepad.c, pi-file.c, + todo.c: Revert / vs. pi-tconfig.h code. + +2003-06-30 14:46 desrod + + * src/pilot-xfer.c: Revert / vs. pi-tconfig.h + code. + +2003-06-30 14:44 desrod + + * include/: pi-datebook.h, pi-expense.h, pi-mail.h, pi-tconfig.h, + pi-todo.h: Reverted vs. pi-tconfig.h code + +2003-06-17 19:05 desrod + + * src/: dlpsh.c, install-todo.c, kittykiller.c, pilot-dlpsh.c, + pilot-install-todo.c, pilot-xfer.c: Minor code cleanup + +2003-06-17 18:26 desrod + + * NEWS: Updated for 0.11.8 release + +2003-06-17 17:55 desrod + + * ChangeLog: Removed caller to tcl.m4 for now + +2003-06-17 17:43 desrod + + * ChangeLog, libpisock/serial.c, libpisock/socket.c: Fixed a leak + in the socket structures (Robert L Krawitz) + +2003-06-17 17:37 desrod + + * bindings/Java/TODO: Added TODO for Java bindings + +2003-06-17 17:22 desrod + + * doc/man/install-datebook.1.in: Fixed a small typo + +2003-06-17 17:14 desrod + + * configure.in: Added pilot-foto manpage to dist + +2003-06-17 17:09 desrod + + * bindings/Java/Makefile.am: Updated Makefile.am for new files + +2003-06-17 16:59 desrod + + * configure.in: Removed TCL checks for now, pending implementation + of proper m4 macros + +2003-06-17 16:53 desrod + + * bindings/Java/: README.de, libjpisock.c, libjpisock.h, test.java, + org/gnu/pilotlink/AddressRecord.java, + org/gnu/pilotlink/AppInfo.java, + org/gnu/pilotlink/DatebookRecord.java, + org/gnu/pilotlink/MemoRecord.java, + org/gnu/pilotlink/PilotLink.java, + org/gnu/pilotlink/RawAppInfo.java, + org/gnu/pilotlink/RawRecord.java, org/gnu/pilotlink/Record.java, + org/gnu/pilotlink/SysInfo.java, org/gnu/pilotlink/User.java: New + Java bindings + +2003-06-17 16:48 desrod + + * bindings/: README.de, libjpisock.c, libjpisock.h, test.java: + Adding new Java buildout + +2003-06-17 16:43 desrod + + * bindings/Java/: .cvsignore, Jni.c, doConstants.c, test.java: Java + replacement by John Mitchell + +2003-06-17 16:35 desrod + + * libpisock/: datebook.c, expense.c, mail.c, notepad.c, todo.c: + Cleaning up redundant HAVE_SYS_TIME_H cruft. + +2003-06-17 16:34 desrod + + * include/: pi-datebook.h, pi-expense.h, pi-mail.h, pi-notepad.h, + pi-tconfig.h, pi-todo.h, pi-util.h: Cleaned redundant cruft with + HAVE_SYS_TIME_H, probably should go in a more permanent place + soon.. consider this temporary. + +2003-06-17 15:42 desrod + + * src/pilot-foto.c: Refactoring, getopt_long'ified. + +2003-06-17 13:20 desrod + + * doc/man/: Makefile.am, pilot-foto.1.in: New manpage for + pilot-foto, to convert images from Palm's 'Foto' application + +2003-06-17 13:01 desrod + + * src/: Makefile.am, pilot-foto.c: New conduit to fetch images from + Palm handhelds with the CreatorID of 'Foto' such as those + produced by the Zire handheld. + +2003-06-17 09:58 desrod + + * bindings/Tcl/: README, test.tcl: Minor edits to bring to current: + s/cua3/ttyS0/ + +2003-05-14 13:23 desrod + + * src/pilot-xfer.c: Minor code fixes, removed DEBUG in Restore() + (not used) + +2003-05-14 10:32 desrod + + * src/: addresses.c, dlpsh.c, getopt.c, getopt1.c, hinotes.c, + install-datebook.c, install-expenses.c, install-hinote.c, + install-memo.c, pilot-dlpsh.c, pilot-hinotes.c, + pilot-install-datebook.c, pilot-install-expenses.c, + pilot-install-hinote.c, pilot-install-memo.c, install-netsync.c, + install-todo.c, install-todos.c, install-user.c, memos.c, + money2qif.c, parsedate.c, pi-csd.c, pi-getram.c, pi-getrom.c, + pi-getromtoken.c, pi-nredir.c, pi-port.c, pilot-addresses.c, + pilot-archive.c, pilot-clip.c, pilot-csd.c, pilot-dedupe.c, + pilot-file.c, pilot-getram.c, pilot-getrom.c, + pilot-getromtoken.c, pilot-install-netsync.c, + pilot-install-todo.c, pilot-install-todos.c, + pilot-install-user.c, pilot-mail.c, pilot-memos.c, + pilot-nredir.c, pilot-port.c, pilot-prc.c, pilot-read-expenses.c, + pilot-read-ical.c, pilot-read-notepad.c, pilot-read-palmpix.c, + pilot-read-todos.c, pilot-reminders.c, pilot-schlep.c, + pilot-xfer.c, read-expenses.c, read-ical.c, read-notepad.c, + read-palmpix.c, read-todos.c, reminders.c: Lots of code cleanups, + added missing 'default' in switch, fixed pilot-xfer exclude + buglet + +2003-05-14 10:31 desrod + + * ChangeLog: Update changelog + +2003-05-14 07:36 desrod + + * bindings/Perl/README: Documentation update + +2003-05-14 07:27 desrod + + * bindings/Perl/Pilot.pm: Cleanup, refactoring, will reduce later. + +2003-05-10 14:59 desrod + + * doc/man/: pi-getram.1.in, pi-getrom.1.in: Updated manpages to + deprecate the CoPilot switches. Use Palm OS Emulator instead + +2003-05-10 14:58 desrod + + * src/: pi-getrom.c, pilot-getrom.c: Deprecate CoPilot switch (not + used here anyway), Palm OS Emulator exceeds it in functionality + +2003-05-10 14:57 desrod + + * src/: pi-getram.c, pilot-getram.c: Deprecate CoPilot switches, no + longer used, Palm OS Emulator/POSE exceeds it. + +2003-05-10 14:51 desrod + + * doc/man/: addresses.1.in, dlpsh.1.in, hinotes.1.in, + install-datebook.1.in, install-expenses.1.in, + install-hinote.1.in, install-memo.1.in, install-netsync.1.in, + install-todo.1.in, install-user.1.in, pi-getram.1.in, + pi-getrom.1.in, pilot-addresses.1.in, pilot-link.7.in, + pilot-xfer.1.in, read-expenses.1.in, read-ical.1.in, + read-notepad.1.in, read-palmpix.1.in: Updated manpages + +2003-04-07 16:05 desrod + + * ChangeLog, configure.in: Remove -Werror for now, which breaks + Python builds due to upstream swig inconsistancies. The whole + -Werror logic flow needs a rethink. + +2003-04-03 11:22 desrod + + * configure.in: Bump these voodoo current, revision, age values + + Ref: http://sources.redhat.com/autobook/autobook/autobook_91.html + +2003-04-03 08:44 jpr + + * doc/man/.cvsignore: Shush + +2003-04-01 11:34 jpr + + * ChangeLog, libpisync/sync.c: 2003-04-01 JP Rosevear + + + * libpisync/sync.c (store_record_on_pilot): preserve the + secret + flag for the record + +2003-03-27 07:14 desrod + + * ChangeLog, bindings/Perl/Pilot.xs: Fix to remove 'not a hash + reference' errors on Perl 5.x built with debug (bug #440 and + #219) (Jonathan Mark) + +2003-03-27 06:59 desrod + + * ChangeLog, configure.in: Fix to find libpng on Solaris systems + (Simon Burr) + +2003-03-14 16:48 desrod + + * configure.in, src/Makefile.am: Major rework over the last commit. + Proper tcl/tk detection, removed itcl (we weren't using it + anyway), fixed the Python version detection stringio mess. + +2003-03-14 14:54 desrod + + * configure.in, src/Makefile.am: Maintenance cleanups, deprecate + tcl/itcl/tk support (for now?), fix up the Perl, Python, and Java + tests, readline tests, readibility cleanups + +2003-03-02 14:38 desrod + + * libpisock/: connect.c, notepad.c: Small -Wall cleanups + +2003-02-23 18:54 desrod + + * src/getrom.c: Purge, no for real this time (damn you cvs!) + +2003-02-23 18:52 desrod + + * src/getrom.c: Purged getrom, deprecated by pi-getrom + +2003-02-23 14:38 desrod + + * src/: dlpsh.c, pilot-dlpsh.c: Minor output format change + +2003-02-22 12:04 desrod + + * libpisock/connect.c: Use real macro calls, not numeric resolvers + +2003-02-22 11:30 desrod + + * libpisock/connect.c: Oops, unused int() removed + +2003-02-22 11:21 desrod + + * libpisock/connect.c: Small formatting nit. + +2003-02-22 11:07 desrod + + * libpisock/connect.c: Small bit of code to sleep(2)*5 until + portname is found + +2003-02-20 18:51 desrod + + * libpisock/connect.c: More sensible error messages to report the + permissions on symlinked nodes + +2003-02-20 15:06 desrod + + * bindings/Makefile.am: Minor error that prevented the Perl + bindings from building correctly + +2003-02-20 14:50 desrod + + * ChangeLog, configure.in: More verbose errors when things aren't + found during configure + +2003-02-20 14:07 desrod + + * src/: dlpsh.c, hinotes.c, install-todo.c, pilot-addresses.c, + pilot-dlpsh.c, pilot-hinotes.c, pilot-install-todo.c, + pilot-read-notepad.c, pilot-read-todos.c, pilot-xfer.c, + read-notepad.c, read-todos.c: Fixed a minor segfault problem in + pilot-addresses, other minor cleanups + +2003-01-15 00:12 desrod + + * ChangeLog, configure.in: Fixed a bug where $LIBS was getting + clobbered on BSD systems when gnugetopt was called + +2003-01-15 00:05 desrod + + * ChangeLog, include/pi-datebook.h, include/pi-expense.h, + include/pi-mail.h, include/pi-todo.h: Cleaned up some missing + include directives + +2003-01-08 04:26 desrod + + * ChangeLog, doc/README.usb: Change Zire to ttyUSB1 not ttyUSB0 + (close #442) + +2003-01-06 19:04 desrod + + * ChangeLog, bindings/Makefile.am: Yet another fix for Perl's + $DESTDIR, this one from a Gentoo patch + +2003-01-06 13:03 desrod + + * src/pilot-mail.c: Small patch to change the default location of + sendmail. Ideally, this should search for $SENDMAIL and set it, + but pilot-mail is deprecated. + +2003-01-06 10:06 desrod + + * doc/man/: addresses.1.in, dlpsh.1.in, hinotes.1.in, + ietf2datebook.1.in, install-datebook.1.in, install-expenses.1.in, + install-hinote.1.in, install-memo.1.in, install-netsync.1.in, + install-todo.1.in, install-user.1.in, pi-getram.1.in, + pi-getrom.1.in, pilot-addresses.1.in, pilot-link.7.in, + pilot-xfer.1.in, read-ical.1.in, read-notepad.1.in, + read-palmpix.1.in: manpage updates + +2003-01-06 06:47 desrod + + * ChangeLog, configure.in, doc/man/Makefile.am: New install-todo + manpage + +2003-01-06 06:41 desrod + + * doc/man/: addresses.1.in, dlpsh.1.in, hinotes.1.in, + ietf2datebook.1.in, install-datebook.1.in, install-expenses.1.in, + install-hinote.1.in, install-memo.1.in, install-netsync.1.in, + install-todo.1.in, install-user.1.in, pi-getram.1.in, + pi-getrom.1.in, pilot-addresses.1.in, pilot-link.7.in, + pilot-xfer.1.in, read-ical.1.in, read-notepad.1.in, + read-palmpix.1.in: Updated the strings in the "Author" field, + added new manpage for install-todo + +2003-01-05 18:44 desrod + + * NEWS, configure.in: Updated for 0.11.7 release, pending. + +2003-01-05 18:39 desrod + + * ChangeLog, configure.in: Added doc/man/*.in files for automagic + generation + +2003-01-05 18:38 desrod + + * doc/man/: addresses.1, dlpsh.1, ietf2datebook.1, + install-datebook.1, install-expenses.1, install-hinote.1, + install-memo.1, install-netsync.1, install-user.1, pi-getram.1, + pi-getrom.1, pilot-addresses.1, pilot-link.7, pilot-xfer.1, + read-ical.1, read-notepad.1, read-palmpix.1: Remove static + manpages, preference to auto-generated versions + +2003-01-05 18:36 desrod + + * doc/man/: Makefile.am, addresses.1.in, dlpsh.1.in, hinotes.1.in, + ietf2datebook.1.in, install-datebook.1.in, install-expenses.1.in, + install-hinote.1.in, install-memo.1.in, install-netsync.1.in, + install-user.1.in, pi-getram.1.in, pi-getrom.1.in, + pilot-addresses.1.in, pilot-link.7.in, pilot-xfer.1.in, + read-ical.1.in, read-notepad.1.in, read-palmpix.1.in: Converted + all the manpages to cleaner format, added @VERSION@ to each one + +2003-01-04 10:54 desrod + + * configure.in: Changed $PREFIX to default to /usr/local if not + specified + +2003-01-04 10:49 desrod + + * configure.in: Bump to 0.11.7 + +2003-01-04 10:48 desrod + + * ChangeLog, doc/man/Makefile.am, doc/man/addresses.1, + doc/man/ietf2datebook.1, doc/man/read-palmpix.1: Added manpage + for addresses (more to come), s/stdout/STDOUT/ on two others + +2003-01-04 10:32 desrod + + * ChangeLog, configure.in, libpisock/dlp.c: $UID doesn't work on + Solaris, geteuid() does, we'll use that in 0.11.8 $instead, minor + patch to add \n in PI_LOG events + +2003-01-02 22:51 desrod + + * ChangeLog, configure.in: Fixed a mixup with exit() vs exit; + +2002-12-29 12:35 desrod + + * configure.in: Still not right, more readline fixes + +2002-12-29 12:24 desrod + + * configure.in: Minor readline fixup + +2002-12-29 12:11 desrod + + * configure.scan: Remove deprecated file, not needed + +2002-12-29 09:49 desrod + + * configure.in: Throw warning, not a fatal error. + +2002-12-29 09:12 desrod + + * configure.in: Fix incorrect error condition + +2002-12-29 09:08 desrod + + * ChangeLog, configure.in: Fix C++ conftest problem when readline + isn't found + +2002-12-24 21:24 desrod + + * NEWS: Updated for 0.11.6 release + +2002-12-24 21:23 desrod + + * ChangeLog, src/dlpsh.c, src/pilot-dlpsh.c: Changed 'df' layout + for 16mb and greater devices + +2002-12-24 21:04 desrod + + * ChangeLog: Updated for padp.c change + +2002-12-24 21:02 desrod + + * libpisock/padp.c: Added error message regarding port speed issues + when PILOTRATE is set too high + +2002-12-24 20:42 desrod + + * doc/TODO: Removed closed/deprecated TODO items + +2002-12-24 20:39 desrod + + * doc/README.usb: Updated for new devices, ports, kernel versions + +2002-12-24 19:12 desrod + + * src/: dlpsh.c, hinotes.c, install-expenses.c, install-hinote.c, + install-memo.c, install-netsync.c, install-todo.c, + install-todos.c, pi-getromtoken.c, pilot-archive.c, + pilot-dlpsh.c, pilot-getromtoken.c, pilot-hinotes.c, + pilot-install-expenses.c, pilot-install-hinote.c, + pilot-install-memo.c, pilot-install-netsync.c, + pilot-install-todo.c, pilot-install-todos.c, + pilot-read-notepad.c, pilot-read-palmpix.c, pilot-read-todos.c, + pilot-reminders.c, pilot-xfer.c, read-notepad.c, read-palmpix.c, + read-todos.c, reminders.c: Minor reformatting (sorry Angus =) and + cleanup for 0.11.6 release + +2002-12-24 17:29 desrod + + * ChangeLog, src/install-memo.c, src/pilot-install-memo.c: Many + fixes to remove malloc() and cast bugs, check file sizes before + syncronization, fixed missing 't' argument specifier. + +2002-12-24 11:42 desrod + + * configure.in: Remove unnecessary log comment + +2002-12-24 11:39 desrod + + * configure.in: Check for UID0, exit clean + +2002-12-22 21:47 desrod + + * configure.in: Fixed --enable-debug/--disable-debug clause + +2002-12-22 19:43 desrod + + * configure.in: Fixed $withval on --with-efence + +2002-12-22 17:16 desrod + + * ChangeLog, configure.in: Cleaning up deprecated headers + +2002-12-22 16:17 desrod + + * configure.in: Small syntax error change, die if --with-efence + used, but efence not found + +2002-12-20 16:07 desrod + + * configure.in: Small efence fix, disabled by default, propagate + into $LIBS + +2002-12-20 13:16 desrod + + * ChangeLog, configure.in: Added ElectricFence check + +2002-12-18 07:49 desrod + + * bindings/Python/test.py: Fixed port, added shebang + +2002-12-18 07:48 desrod + + * ChangeLog, bindings/Python/test.py: Added test.py for real this + time, whoops. + +2002-12-18 07:43 desrod + + * ChangeLog, bindings/Python/README, bindings/Python/README.txt, + bindings/Python/src/pisock.i, bindings/Python/src/pisock_wrap.c: + Code cleanups from Nicholas Piper, new test script, deprecate + README.txt + +2002-12-17 13:09 desrod + + * ChangeLog, src/pilot-xfer.c: Minor Connect() misplacement + +2002-12-16 10:35 desrod + + * src/pilot-xfer.c: Added a leaner output for Backup()/Install() + for now, until better arrives + +2002-12-16 10:26 desrod + + * src/pilot-xfer.c: Remove -q [quiet] and -c [count] options, + unused and will be replaced by verbose options later + +2002-12-14 08:37 desrod + + * ChangeLog, libpisock/inet.c: Small fix for BSD + +2002-12-12 13:47 desrod + + * ChangeLog: Fixed small typo + +2002-12-11 12:50 desrod + + * configure.in: Added minor check for CVS directory, spit warning + if found + +2002-12-11 11:13 desrod + + * ChangeLog, src/pilot-archive.c: Added new conduit skeleton for + archiving Palm records to desktop (not finished yet) + +2002-12-11 10:45 desrod + + * ChangeLog, src/Makefile.am: Deprecate pilot-mail build. The + conduit will stay around as a skeleton to help others learn how + to write conduits, but pilot-mailsync should be used instead. + +2002-12-10 12:37 desrod + + * ChangeLog, autogen.sh: UnixWare fixes for testing glibtool vs. + libtool + +2002-12-08 11:54 desrod + + * ChangeLog, autogen.sh: More fixes for OSX libtool problems + (glibtool vs. libtool) + +2002-12-05 13:20 desrod + + * ChangeLog, src/install-todo.c, src/pilot-install-todo.c: Change + the author name on install-todo.c, oops, sorry Martin! =) + +2002-12-04 08:49 desrod + + * src/pilot-addresses.c: s/MemoDB.pdb/AddressDB.pdb/ silly + copy/paste typo somewhere in the past + +2002-12-03 16:19 desrod + + * autogen.sh: Updated package locations, versions required in + autogen.sh builds + +2002-12-03 09:52 desrod + + * configure.in: Minor verbage change to configure.in to report + CURRENT.AGE.REVISION instead of CURRENT.REVISION.AGE + +2002-12-03 09:27 desrod + + * src/pilot-xfer.c: Updated fix to properly detect (and avoid) + OS3.3 versions when setting the date/time on the device. + +2002-12-03 06:49 desrod + + * ChangeLog, src/pilot-xfer.c: Added feature to sync time with the + desktop, properly excluding OS3.3 devices which are known to + hard-reset when SetSysDate is called (known PalmOS bug) + +2002-12-02 10:27 jpr + + * ChangeLog: Remove conflict marker. + +2002-12-02 10:25 jpr + + * ChangeLog, configure.in, include/pi-version.h.in: 2002-12-02 JP + Rosevear + + * include/pi-version.h.in: remove HOST_OS substitution, + its in + config.h now + + * configure.in: define HOST_OS here + +2002-12-02 10:17 desrod + + * bindings/Python/src/pisock_wrap.c, libpisock/pi-header.c: + s/display_splash/print_splash/ + +2002-12-02 09:46 angusa + + * ChangeLog: OS 5 changes for notepad + +2002-12-02 09:46 angusa + + * libpisock/notepad.c: fixed odd length buffer read added OS5 + version 2 notepad support + +2002-12-02 09:45 angusa + + * include/pi-notepad.h: added OS5 version 2 notepad support + +2002-12-02 09:43 angusa + + * src/: pilot-read-notepad.c, read-notepad.c: added support for OS5 + version 2 notepad + +2002-12-02 09:41 desrod + + * include/pi-header.h: s/display_splash/print_splash/ + +2002-12-02 09:39 desrod + + * configure.in: Bump libpisock by one + +2002-12-02 09:38 desrod + + * src/: addresses.c, dlpsh.c, getrom.c, hinotes.c, + install-datebook.c, install-expenses.c, install-hinote.c, + install-memo.c, install-netsync.c, install-todo.c, + install-todos.c, install-user.c, memos.c, money2qif.c, pi-csd.c, + pi-getram.c, pi-getrom.c, pi-getromtoken.c, pi-nredir.c, + pi-port.c, pilot-addresses.c, pilot-clip.c, pilot-csd.c, + pilot-dedupe.c, pilot-dlpsh.c, pilot-file.c, pilot-getram.c, + pilot-getrom.c, pilot-getromtoken.c, pilot-hinotes.c, + pilot-install-datebook.c, pilot-install-expenses.c, + pilot-install-hinote.c, pilot-install-memo.c, + pilot-install-netsync.c, pilot-install-todo.c, + pilot-install-todos.c, pilot-install-user.c, pilot-mail.c, + pilot-memos.c, pilot-nredir.c, pilot-port.c, pilot-prc.c, + pilot-read-expenses.c, pilot-read-ical.c, pilot-read-notepad.c, + pilot-read-palmpix.c, pilot-read-todos.c, pilot-reminders.c, + pilot-schlep.c, pilot-xfer.c, read-expenses.c, read-ical.c, + read-notepad.c, read-palmpix.c, read-todos.c, reminders.c: + s/display_splash/print_splash/ for now, restores binary + compatibility NOTE: this *WILL* change in a future release, to + display_splash again + +2002-12-01 21:36 desrod + + * ChangeLog, NEWS, bindings/Makefile.am, + bindings/Python/src/pisock_wrap.c, doc/man/Makefile.am, + include/pi-header.h, libpisock/pi-file.c, libpisock/pi-header.c, + src/addresses.c, src/getrom.c, src/install-datebook.c, + src/install-expenses.c, src/install-hinote.c, src/install-memo.c, + src/install-netsync.c, src/install-user.c, src/kittykiller.c, + src/money2qif.c, src/pi-csd.c, src/pi-getram.c, src/pi-getrom.c, + src/pi-getromtoken.c, src/pi-nredir.c, src/pi-port.c, + src/pilot-clip.c, src/pilot-csd.c, src/pilot-dedupe.c, + src/pilot-file.c, src/pilot-getram.c, src/pilot-getrom.c, + src/pilot-getromtoken.c, src/pilot-install-datebook.c, + src/pilot-install-expenses.c, src/pilot-install-hinote.c, + src/pilot-install-memo.c, src/pilot-install-netsync.c, + src/pilot-install-user.c, src/pilot-mail.c, src/pilot-nredir.c, + src/pilot-port.c, src/pilot-prc.c, src/pilot-read-expenses.c, + src/pilot-read-ical.c, src/pilot-read-notepad.c, + src/pilot-read-palmpix.c, src/pilot-read-todos.c, + src/pilot-reminders.c, src/pilot-schlep.c, src/read-expenses.c, + src/read-ical.c, src/read-notepad.c, src/read-palmpix.c, + src/read-todos.c, src/reminders.c: Pedantic cleanups, cleaned up + location of getopt_long() structures, added all missing --long + options, etc. and a bunch of things I probably forgot I added. + +2002-12-01 21:35 desrod + + * src/pilot-xfer.c: Added feature to close bug #265. pilot-xfer + will now check available space on the Palm before each file is + installed. If the target file is larger than available space, it + will be skipped. Need to clean up symantics between Install and + Restore functions here. + +2002-12-01 21:34 desrod + + * README: Cleaned up verbage to be more concise per-platform + +2002-12-01 21:33 desrod + + * doc/man/install-expenses.1: Added new manpage for + install-expenses + +2002-12-01 21:32 desrod + + * src/pilot-addresses.c: Cleaned up location of tabledelim values + (silly bug!) + +2002-12-01 21:31 desrod + + * src/: dlpsh.c, pilot-dlpsh.c: Fixed CreatorID printf() confusion + +2002-12-01 21:31 desrod + + * libpisock/connect.c: Better error reporting, minor formatting + changes + +2002-12-01 21:31 desrod + + * src/: hinotes.c, pilot-hinotes.c: Pedantic cleanups + +2002-12-01 21:30 desrod + + * doc/README.freebsd: Minor changes to handle non-Handspring + handhelds + +2002-12-01 21:30 desrod + + * include/pi-version.h.in: Export HOST_OS to assist debugging + +2002-12-01 21:30 desrod + + * src/: install-todos.c, pilot-install-todos.c: Expanded + display_help() slightly + +2002-12-01 21:29 desrod + + * src/: memos.c, pilot-memos.c: Pedantic cleanups, chasing deleted + memo bug (#359) + +2002-12-01 21:29 desrod + + * src/pilot-debug.c: Fix for TCL version detection (again?) I need + testers or TCL gurus to test/validate this for me. Anyone? + +2002-12-01 21:28 desrod + + * src/Makefile.am: Added install-todo + +2002-12-01 21:28 desrod + + * configure.in: Added CFLAGS, CXXFLAGS, exported HOST_OS + +2002-12-01 21:28 desrod + + * src/: install-todo.c, pilot-install-todo.c: Added new ToDo + conduit from Robert A. Kaplan, code cleanup + +2002-11-26 16:40 desrod + + * configure.in: Fixing another minor oopsie. + +2002-11-24 10:13 desrod + + * ChangeLog, configure.in: Fixed AC_INIT in configure.in to allow + compatibility with autoconf 2.13 and 2.53 + +2002-11-23 04:50 desrod + + * configure.in: Removed AC_PREREQ and -devel tag + +2002-11-20 17:37 desrod + + * configure.in: Small typo change for clarity: s/linux/Linux/, + s/freebsd/FreeBSD/ + +2002-11-20 17:33 desrod + + * ChangeLog, configure.in, libpisock/connect.c, src/pilot-xfer.c: + Fixes to stop autoconf warnings, fixes to eliminiate lockups on + BSD, changes to totalsize() output on Install and Backup targets + in pilot-xfer + +2002-11-20 17:12 desrod + + * acconfig.h: Removed deprecated need for acconfig.h + +2002-11-20 10:43 desrod + + * ChangeLog, src/pilot-xfer.c: Fix for calculating totalsize() + +2002-11-20 10:33 desrod + + * ChangeLog, libpisock/connect.c: Minor fixes to connect, so we + don't lose the client (or parent) sockets + +2002-11-17 13:38 desrod + + * ChangeLog, libpisock/pi-header.c: Minor verbage changes + +2002-11-15 22:03 davidh + + * ChangeLog: Oops. Forgot to update this when I checked in my + earlier changes. + +2002-11-15 21:23 davidh + + * libpisock/dlp.c: Generic organizational comments. Header for + dlp_ReadNextModifiedRecInCategory(). + +2002-11-15 19:19 davidh + + * libpisock/dlp.c: Header for dlp_ReadRecordByIndex(). + +2002-11-01 13:28 desrod + + * ChangeLog, configure.in: Fix --no-verify error on BSD systems + +2002-10-28 08:14 desrod + + * ChangeLog, src/pilot-mail.c: Fixed an error when characters + between 128 and 255 are received. + +2002-10-28 08:03 desrod + + * ChangeLog, configure.in: Added a small fix for testing for + unistd.h for getopt on Mac OSX systems (Bill Janssen) + +2002-10-28 07:57 desrod + + * ChangeLog, configure.in: Added a better test for readline support + through termlib, ncurses, etc. More portable solution. + +2002-10-28 07:08 desrod + + * ChangeLog, bindings/Makefile.am: Fixed the DESTDIR target in the + perl-install prefix (Ben Darnell), added DESTDIR for the + python-instal target (Mike Frysinger). + +2002-10-11 14:32 jpr + + * ChangeLog, libpisock/dlp.c: 2002-10-11 JP Rosevear + + + * libpisock/dlp.c (dlp_response_read): don't depend on + the return + arguments starting at a certain number + +2002-10-11 14:28 jpr + + * ChangeLog, libpisock/dlp.c: 2002-10-11 JP Rosevear + + + * libpisock/dlp.c (dlp_GetROMToken): add trace to + getromtoken call + (dlp_WriteRecord): use record_dump call + +2002-10-11 14:25 jpr + + * ChangeLog, configure.in: 2002-10-11 JP Rosevear + + + * configure.in: put a space in between putenv and + sigaction so + they functions are correctly checked for; update png + check to look + for png setjmp support + +2002-10-03 11:06 jpr + + * ChangeLog, src/pilot-xfer.c: 2002-10-03 JP Rosevear + + + * src/pilot-xfer.c: initialize totalsize to 0 + +2002-10-02 11:01 jpr + + * ChangeLog, src/Makefile.am: + 2002-10-02 JP Rosevear + + * src/Makefile.am: dist getopt sources + + * src/pilot-datebook/Makefile.am: ditto + +2002-09-28 15:14 desrod + + * ChangeLog, configure.in: Small typo + +2002-09-28 15:02 desrod + + * NEWS, doc/README.usb: Updated documentation or 0.11.5 release + +2002-09-28 14:07 desrod + + * ChangeLog, include/pi-datebook.hxx: Remove use of antiquated + header for libpisock++ builds on {c|g}++ 3.x systems + +2002-09-27 09:08 desrod + + * ChangeLog, bindings/Python/src/pisock.i: Added pilot_connect() + +2002-09-26 09:39 jpr + + * ChangeLog, libpisock/dlp.c: 2002-09-26 JP Rosevear + + + * libpisock/dlp.c (dlp_CallApplication): check result + before using + response (Owen Stenseth ) + +2002-09-25 11:31 desrod + + * ChangeLog, bindings/Python/src/pisock.i: Fix for 'name' and + 'nameLength' member errors (Nicholas Piper) + +2002-09-23 17:27 jpr + + * ChangeLog, bindings/Java/Makefile.am: 2002-09-23 JP Rosevear + + + * bindings/Java/Makefile.am: revert includes change + +2002-09-23 15:44 jpr + + * configure.in: Actually commit file. + +2002-09-23 15:40 jpr + + * ChangeLog, src/Makefile.am: 2002-09-23 JP Rosevear + + + * src/Makefile.am: add in getopt sources to binaries if + needed + + * configure.in: change check for getopt_long to not + involve + libobjs at all + + * src/pilot-datebook/Makefile.am: ditto + +2002-09-20 10:57 desrod + + * ChangeLog, bindings/Java/Makefile.am: We should be testing for + JAVA_HOME, not JAVABASE + +2002-09-17 17:18 desrod + + * ChangeLog, configure.in: Check for snprintf() + +2002-09-17 17:17 desrod + + * ChangeLog, src/pilot-schlep.c: Fixed an incorrect help string + +2002-09-17 15:51 desrod + + * ChangeLog, src/Makefile.am: Fixed a typo on bin_SCRIPTS, missing + end \ + +2002-09-17 12:01 desrod + + * ChangeLog, configure.in: Updated to fix some Irix issues, expose + HOST_OS for later inclusion + +2002-09-17 08:25 desrod + + * doc/Makefile.am: Missing README.freebsd file + +2002-09-17 01:29 jpr + + * ChangeLog, src/Makefile.am: 002-09-17 JP Rosevear + + + * src/pilot-datebook/Makefile.am: dist getopt*.c files + because + LIBOBJS works differently now (broken for non-gnu + platforms) + + * src/Makefile.am: ditto + +2002-09-16 11:53 desrod + + * NEWS: Updated to add one known bug + +2002-09-16 11:43 desrod + + * ChangeLog, NEWS: Updated NEWS file to sync up with current + release + +2002-09-16 11:13 desrod + + * ChangeLog, doc/README.freebsd: Added Anish Mistry's + README.freebsd for FreeBSD sync'ing + +2002-09-16 10:51 desrod + + * bindings/Perl/Pilot.xs: Quick hack to allow the Perl bindings to + compile on perl 5.8 with gcc 3.x + +2002-09-16 09:52 jpr + + * ChangeLog, configure.in, include/pi-version.h.in: 2002-09-13 JP + Rosevear + + * include/pi-version.h.in: remove the nano version stuff + + * configure.in: remove nano version stuff, bump to 0.11.4 + +2002-09-13 15:19 jpr + + * ChangeLog, doc/Makefile.am: 2002-09-13 JP Rosevear + + + * doc/Makefile.am: stop disting dead file + +2002-09-13 15:11 jpr + + * ChangeLog, configure.in, src/Makefile.am, + src/pilot-read-notepad.c, src/pilot-read-palmpix.c, + src/read-notepad.c, src/read-palmpix.c: 2002-09-13 JP Rosevear + + + * src/pilot-datebook/Makefile.am: remove LIBOBJS from + LDADD + + * src/Makefile.am: include PNG_CFLAGS + + * src/read-palmpix.c: conditionally include config.h and + don't + force undef of HAVE_PNG + + * src/read-notepad.c: same + + * configure.in: Update libpng check to also check for + header file + and take arg for libpng location + +2002-09-11 07:25 desrod + + * ChangeLog, configure.in, src/Makefile.am: Updated to only link + -lpng to the binaries which require it, read-notepad and + read-palmpix (Ben Darnell, bug 0000289) + +2002-08-31 08:49 desrod + + * ChangeLog, configure.in: autoconf fixes for LIBOBJS and getopt + +2002-08-30 17:29 desrod + + * ChangeLog, src/pilot-read-notepad.c, src/pilot-read-palmpix.c, + src/read-notepad.c, src/read-palmpix.c: Added missing unistd.h + include for F_OK + +2002-08-30 17:16 desrod + + * ChangeLog, src/Makefile.am, src/pilot-read-notepad.c, + src/pilot-read-palmpix.c, src/read-notepad.c, src/read-palmpix.c: + AC_LIBOBJ fix for autoconf 2.5x builds, various fixes for AIX + 4.3.3 users + +2002-08-30 15:44 desrod + + * ChangeLog, libpisock/net.c: Fix for Network Sync failures + +2002-08-30 15:43 desrod + + * ChangeLog, src/pd-tty.c: Fixed ifdef for tcl/tk in pd-tty.c + (akkana@shallowsky.com) + +2002-08-30 15:40 jpr + + * ChangeLog, configure.in: 2002-08-30 JP Rosevear + + + * configure.in: define conditionals for usb support + properly + +2002-08-21 12:14 jpr + + * ChangeLog, pilot-link.m4.in: 2002-08-21 JP Rosevear + + + * pilot-link.m4.in: fix typo + +2002-08-21 11:11 desrod + + * ChangeLog, configure.in: Updated output + +2002-08-20 09:14 desrod + + * doc/: README-Win32.txt, TODO: Removed dead README-Win32.txt file, + url is dead, all links to Win32 version of pilot-xfer are dead, + and Tilo Christ's email addresses are no longer valid. + +2002-08-16 12:11 davidh + + * ChangeLog, libpisock/connect.c: Zapped redundant pilot_connect() + prototype. Wrote function header for pilot_connect(). + +2002-08-16 12:01 desrod + + * include/pi-header.h, libpisock/connect.c: Removed const + definition to flatten proto and remove conflicting type + +2002-08-16 11:54 desrod + + * include/pi-header.h: Oops, why didn't this get committed. Fixed + proto. + +2002-08-16 11:31 desrod + + * libpisock/connect.c: Removed unnecessary header + +2002-08-16 11:30 desrod + + * libpisock/connect.c: Removed last conflicting proto + +2002-08-16 10:18 desrod + + * ChangeLog, src/addresses.c, src/dlpsh.c, src/hinotes.c, + src/install-datebook.c, src/install-expenses.c, + src/install-hinote.c, src/install-memo.c, src/install-netsync.c, + src/install-todos.c, src/install-user.c, src/memos.c, + src/money2qif.c, src/pd-tty.c, src/pi-csd.c, src/pi-getram.c, + src/pi-getrom.c, src/pi-getromtoken.c, src/pi-nredir.c, + src/pi-port.c, src/pilot-addresses.c, src/pilot-clip.c, + src/pilot-csd.c, src/pilot-debug.c, src/pilot-dedupe.c, + src/pilot-dlpsh.c, src/pilot-file.c, src/pilot-getram.c, + src/pilot-getrom.c, src/pilot-getromtoken.c, src/pilot-hinotes.c, + src/pilot-install-datebook.c, src/pilot-install-expenses.c, + src/pilot-install-hinote.c, src/pilot-install-memo.c, + src/pilot-install-netsync.c, src/pilot-install-todos.c, + src/pilot-install-user.c, src/pilot-mail.c, src/pilot-memos.c, + src/pilot-nredir.c, src/pilot-port.c, src/pilot-read-expenses.c, + src/pilot-read-ical.c, src/pilot-read-notepad.c, + src/pilot-read-palmpix.c, src/pilot-read-todos.c, + src/pilot-reminders.c, src/pilot-schlep.c, src/pilot-xfer.c, + src/read-expenses.c, src/read-ical.c, src/read-notepad.c, + src/read-palmpix.c, src/read-todos.c, src/reminders.c: Relocated + static proto for pilot_connect(); + +2002-08-15 14:01 jpr + + * ChangeLog, libpisock/usb.c: 002-08-15 JP Rosevear + + + * libpisock/usb.c (pi_usb_device_dup): make the ref null, + since we + don't currently use it + (pi_usb_device): set the ref to null + (pi_usb_close): don't dec the ref count + +2002-08-15 13:59 jpr + + * ChangeLog: Tidy. + +2002-08-15 13:57 jpr + + * ChangeLog, src/dlpsh.c, src/pilot-dlpsh.c: 2002-08-15 JP + Rosevear + + * src/dlpsh.c (ls_fn): make sure tag is initialiazed and + is based + on type properly + +2002-08-10 16:55 angusa + + * ChangeLog: read-notepad changes + +2002-08-10 16:52 angusa + + * src/: pilot-read-notepad.c, read-notepad.c: Fixed bug 240 + +2002-08-10 14:03 angusa + + * ChangeLog: read-notepad and read-palmpix updates + +2002-08-10 13:09 angusa + + * src/: pilot-read-notepad.c, read-notepad.c, pilot-read-palmpix.c, + read-palmpix.c: Added protect_files so that already exsisting + files don't get overwritten. + +2002-08-09 09:43 jpr + + * ChangeLog, libpisock/serial.c: 2002-08-09 JP Rosevear + + + * libpisock/serial.c (pi_serial_device_free): only free + the ref + memory if its 0 + (pi_serial_device): init the ref count to 1 + +2002-08-07 10:23 desrod + + * configure.in: Updated to 0.11.3 + +2002-08-06 19:38 desrod + + * ChangeLog, configure.in, src/pilot-xfer.c: More terminal fixes, + bumped libpisock version + +2002-08-06 18:10 jpr + + * ChangeLog, include/pi-dlp.h: 2002-08-06 JP Rosevear + + + * include/pi-dlp.h: add missing error code + +2002-08-06 12:38 desrod + + * bindings/README: Updated legacy README + +2002-08-06 12:21 desrod + + * ChangeLog, configure.in: BSD/OS 4.3 and TCL fixes provided by + Jeffrey C Honig + +2002-08-06 10:29 desrod + + * ChangeLog, src/pilot-xfer.c: Fixed the -q (quiet) option. This + still needs more work. + +2002-08-06 04:51 desrod + + * bindings/Perl/test.pl, libpisock/freebsdusb.c, + src/install-todos.c, src/pilot-install-todos.c, + src/pilot-sync-plan.pl, src/pilot-xfer.c, src/sync-plan.PL: Last + minute fixes before 0.11.2 release + +2002-08-02 07:17 desrod + + * ChangeLog, src/pilot-addresses.c: Fixed field length ordering to + exactly match the Windows Palm Desktop output csv file format + (minus categories) + +2002-07-31 15:19 desrod + + * ChangeLog, bindings/Perl/test.pl: Mail doesn't have categories + +2002-07-31 13:33 desrod + + * ChangeLog, src/pilot-xfer.c: Terminal corruption fixes + +2002-07-30 19:10 desrod + + * ChangeLog, src/pilot-sync-plan.pl, src/sync-plan.PL: Fix for + incorrect time being restored (localtime vs. gmtime) + +2002-07-30 18:34 desrod + + * doc/TODO: Updated TODO + +2002-07-30 18:33 desrod + + * configure.in, include/pi-address.h, include/pi-address.hxx, + src/pilot-addresses.c: pilot-addresses field ordering fix + +2002-07-30 11:52 desrod + + * ChangeLog, doc/CodingGuidelines, doc/man/pilot-xfer.1, + include/pi-usb.h, libpisock/address.c, libpisock/appinfo.c, + libpisock/cmp.c, libpisock/datebook.c, libpisock/dlp.c, + libpisock/expense.c, libpisock/freebsdusb.c, libpisock/hinote.c, + libpisock/inet.c, libpisock/linuxusb.c, libpisock/mail.c, + libpisock/memo.c, libpisock/money.c, libpisock/os2serial.c, + libpisock/padp.c, libpisock/pi-file.c, libpisock/serial.c, + libpisock/slp.c, libpisock/socket.c, libpisock/sys.c, + libpisock/syspkt.c, libpisock/todo.c, libpisock/unixserial.c, + libpisock/usb.c, libpisock/util.c, libpisock/utils.c, + libpisock/winserial.c, libpisync/sync.c, src/dlpsh.c, + src/install-expenses.c, src/memos.c, src/pd-tty.c, src/pi-csd.c, + src/pi-port.c, src/pilot-csd.c, src/pilot-debug.c, + src/pilot-dedupe.c, src/pilot-dlpsh.c, src/pilot-file.c, + src/pilot-install-expenses.c, src/pilot-memos.c, + src/pilot-port.c, src/pilot-prc.c, src/pilot-read-expenses.c, + src/pilot-xfer.c, src/read-expenses.c: Cleanup, typos fixed, Perl + $prefix fix, FreeBSD updates + +2002-07-30 10:57 desrod + + * ChangeLog, bindings/Makefile.am: Fixed incorrect 'install' target + inside the perl-build rule + +2002-07-30 07:26 desrod + + * ChangeLog, bindings/Makefile.am: Temporary workaround for Perl + and Python bindings + +2002-07-29 22:42 desrod + + * ChangeLog, src/pilot-xfer.c: Minor usability additions to + pilot-xfer + +2002-07-29 10:27 jpr + + * ChangeLog, libpisock/dlp.c: 2002-07-29 JP Rosevear + + + * libpisock/dlp.c (dlp_request_write): ensure that + exec_buf is + always freed + (dlp_ReadSysInfo): check that response, not request, has + atleast + one arg + (dlp_ReadNetSyncInfo): free response + (dlp_ReadNextModifiedRec): free request + (dlp_ReadRecordByIndex): free response + +2002-07-28 21:47 desrod + + * ChangeLog, libpisock/dlp.c: Temporary fix for J-Pilot issues, + need to investigate better solutions + +2002-07-23 15:09 desrod + + * ChangeLog, doc/man/pilot-link.7: Fixed typos that broke man2html + +2002-07-23 12:20 desrod + + * ChangeLog: Fixed indenting, function comments, GPL banner, + copyright + +2002-07-23 11:02 desrod + + * ChangeLog, libpisock/dlp.c, src/install-datebook.c, + src/pilot-install-datebook.c: Fixes for wrong number of fields + encountered, updated to getopt_long, cleansed + +2002-07-22 21:40 desrod + + * src/: dlpsh.c, install-netsync.c, install-user.c, pilot-dlpsh.c, + pilot-install-netsync.c, pilot-install-user.c: More C89 fixes + +2002-07-21 20:39 desrod + + * src/pilot-mail.c: signedness fixes 'unsigned char *)buffer' + +2002-07-21 12:49 desrod + + * src/: addresses.c, dlpsh.c, getrom.c, hinotes.c, + install-expenses.c, install-hinote.c, install-memo.c, + install-netsync.c, install-todos.c, install-user.c, memos.c, + money2qif.c, pi-csd.c, pi-getram.c, pi-getrom.c, + pi-getromtoken.c, pi-nredir.c, pi-port.c, pilot-addresses.c, + pilot-clip.c, pilot-csd.c, pilot-debug.c, pilot-dedupe.c, + pilot-dlpsh.c, pilot-file.c, pilot-getram.c, pilot-getrom.c, + pilot-getromtoken.c, pilot-hinotes.c, pilot-install-expenses.c, + pilot-install-hinote.c, pilot-install-memo.c, + pilot-install-netsync.c, pilot-install-todos.c, + pilot-install-user.c, pilot-mail.c, pilot-memos.c, + pilot-nredir.c, pilot-port.c, pilot-prc.c, pilot-read-expenses.c, + pilot-read-ical.c, pilot-read-notepad.c, pilot-read-palmpix.c, + pilot-read-todos.c, pilot-reminders.c, pilot-schlep.c, + pilot-xfer.c, read-expenses.c, read-ical.c, read-notepad.c, + read-palmpix.c, read-todos.c, reminders.c: More C89 fixes, + s/print_help/display_help, also s/return/exit(0)/ to return error + to caller + +2002-07-21 11:09 desrod + + * src/: pilot-read-palmpix.c, read-palmpix.c: Missing in + pilot-datebook-update, fixed C89 warnings, missing proto for + write_png in read-palmpix + +2002-07-20 15:50 angusa + + * src/: pilot-read-notepad.c, read-notepad.c: fixed typo + +2002-07-19 16:10 jpr + + * ChangeLog, configure.in: 2002-07-19 JP Rosevear + + + * configure.in: correct libpisock library versioning + +2002-07-19 16:09 angusa + + * ChangeLog: [no log message] + +2002-07-19 14:49 angusa + + * src/: pilot-read-palmpix.c, read-palmpix.c: Cleaned out some old + junk + +2002-07-19 14:48 angusa + + * libpisock/palmpix.c: Added [u]int*_t defines + +2002-07-19 11:48 jpr + + * ChangeLog, include/pi-debug.h, libpisock/cmp.c, libpisock/dlp.c, + libpisock/freebsdusb.c, libpisock/inet.c, libpisock/linuxusb.c, + libpisock/net.c, libpisock/padp.c, libpisock/palmpix.c, + libpisock/pi-file.c, libpisock/slp.c, libpisock/socket.c, + libpisock/sys.c, libpisock/unixserial.c, tests/dlp-test.c: + 2002-07-19 JP Rosevear + + * libpisock/unixserial.c: Update for LOG changes + + * libpisock/sys.c: ditto + + * libpisock/socket.c: ditto + + * libpisock/slp.c: ditto + + * libpisock/pi-file.c: ditto + + * libpisock/padp.c: ditto + + * libpisock/net.c: ditto + + * libpisock/linuxusb.c: ditto + + * libpisock/inet.c: ditto + + * libpisock/freebsdusb.c: ditto + + * libpisock/dlp.c: ditto + + * libpisock/cmp.c: ditto + + * tests/dlp-test.c: change CHECK to CHECK_RESULT so we + don't + conflict with the debug macro, reflect LOG define changes + + * include/pi-debug.h: redefine LOG so it is not a + variadic macro + +2002-07-19 11:22 jpr + + * ChangeLog, include/pi-hinote.h: 2002-07-19 JP Rosevear + + + * include/pi-hinote.h: remove include of non-existant + file and // + style comment + +2002-07-19 11:20 jpr + + * ChangeLog, configure.in: 2002-07-19 JP Rosevear + + + * configure.in: turn c++ support back on by default + +2002-07-19 09:50 jpr + + * include/Makefile.am: 2002-07-18 JP Rosevear + + * include/Makefile.am: handle the case where c++ is not + built + correctly + +2002-07-19 09:46 jpr + + * ChangeLog, src/pilot-xfer.c: 2002-07-19 JP Rosevear + + + * src/pilot-xfer.c: use instead of + + +2002-07-18 16:17 desrod + + * ChangeLog, libpisock/dlp.c: Fix for missing ENOMSG on BSD and + Darwin systems (Ian Darwin) + +2002-07-18 16:07 desrod + + * ChangeLog, libpisock/connect.c: Fix for QNX/Solaris builds, + should be , fixes a mistake on 2-25 commit + +2002-07-18 14:52 jpr + + * ChangeLog, bindings/Makefile.am: 2002-07-18 JP Rosevear + + + * bindings/Makefile.am: add dist hook to remove the CVS + dirs from + the tarball + +2002-07-18 13:14 desrod + + * include/pi-notepad.h: // comment fixes + +2002-07-18 13:05 desrod + + * NEWS: Increment release name + +2002-07-18 13:04 desrod + + * ChangeLog, NEWS, doc/TODO: Updating remaining documentation for + 0.11.1 release + +2002-07-18 13:04 desrod + + * libpisock/dlp.c, libpisock/notepad.c, libpisock/palmpix.c, + src/pilot-addresses.c, src/pilot-debug.c, src/pilot-mail.c, + src/pilot-read-palmpix.c, src/pilot-xfer.c, src/read-palmpix.c: + Fixed erroneous use of // in C comments + +2002-07-18 11:45 desrod + + * ChangeLog, autogen.sh, configure.in, bindings/Makefile.am, + libpisock/inet.c: Last minute fixes, disable all bindings by + default to 'off', fixed some missing strings in autogen.sh, + corrected an uninitialized 'port' in inet.c, s/PERL5/PERL/ in + Makefile.am, since we're testing vesion anyway. + +2002-07-17 19:46 desrod + + * configure.in, src/pilot-addresses.c: More -pedantic fixes, + contributed patch from Akkana Peck. + +2002-07-17 18:54 desrod + + * ChangeLog, src/pilot-xfer.c: 1/2 fix for non-writable local + files with 'pilot-xfer -f' + +2002-07-17 18:02 desrod + + * ChangeLog, bindings/Python/src/pisock_wrap.c: Clean up remaining + swig warnings + +2002-07-17 12:57 desrod + + * bindings/Python/setup.py: Removed stale setup.py file + +2002-07-17 12:55 desrod + + * ChangeLog, configure.in, bindings/Python/setup.py.in: Added fixes + for Python autoconf version propagation + +2002-07-17 07:54 desrod + + * ChangeLog, libpisock/Makefile.am: Removed trailing space in + pilot-datebook's Makefile.am, added $(usb_FILES) for BSD users in + ./libpisock/Makefile.am + +2002-07-16 19:03 desrod + + * ChangeLog, bindings/Perl/Makefile.PL.in: Fixed Perl binding to + handle autoconf version propagation + +2002-07-16 18:08 desrod + + * ChangeLog, src/memos.c, src/pilot-memos.c: Removed redundant call + to print_splash(), fixed print_help() options string + (akkana@shallowsky.com) + +2002-07-16 17:58 angusa + + * doc/man/read-palmpix.1: Added png output type + +2002-07-16 17:56 angusa + + * doc/man/read-notepad.1: changed output type definition + +2002-07-16 17:54 angusa + + * src/pilot-read-palmpix.c, src/read-palmpix.c, + include/pi-palmpix.h: Added png output + +2002-07-16 17:18 jpr + + * ChangeLog, autogen.sh, configure.in: 2002-07-16 JP Rosevear + + + * configure.in (set_compile_warnings): use the more + standard + --enable-compiler-warnings + + * autogen.sh: don't enable compiler warnings by default + +2002-07-16 16:58 jpr + + * ChangeLog, configure.in, include/pi-socket.h, libpisock/net.c: + 2002-07-16 JP Rosevear + + * configure.in: don't enable extra warnings by default + and add + pedantic when we do + + * libpisock/net.c (net_tx_handshake): use unsigned char + type for + the buffer + + * include/pi-socket.h: removing unneccessary comma + +2002-07-16 16:52 angusa + + * src/: pilot-read-notepad.c, read-notepad.c: Fixed bad ifdef + +2002-07-16 16:48 angusa + + * src/: pilot-read-notepad.c, read-notepad.c: Added notepad + qualifier to filename. + +2002-07-16 15:45 angusa + + * doc/man/read-notepad.1: Added output type + +2002-07-16 15:44 angusa + + * src/: pilot-read-notepad.c, read-notepad.c: Added -t for output + type + +2002-07-14 10:09 jpr + + * ChangeLog, libpisock/dlp.c: 2002-07-14 JP Rosevear + + + * libpisock/dlp.c (dlp_FindDBInfo): don't bail out unless + the + return value is less than 0 from dlp_ReadDBList + +2002-07-13 14:39 desrod + + * NEWS, src/pilot-xfer.c: Updated version and data info in NEWS + file, fixed misplaced string in pilot-xfer.c + +2002-07-12 14:18 desrod + + * ChangeLog, include/pi-notepad.h: Changed dataLen to unsigned int + +2002-07-12 14:07 desrod + + * ChangeLog: Fixed missing headers + +2002-07-12 13:50 desrod + + * configure.in, pilot-link.m4.in: Reverting PILOT_LINK_NANO changes + for 0.11 release + +2002-07-12 13:33 angusa + + * doc/man/read-notepad.1: Merged ppm usage notes + +2002-07-12 13:16 desrod + + * ChangeLog, libpisock/sys.c: Fixed error reporting in sys.c + +2002-07-12 13:06 desrod + + * doc/man/Makefile.am: Added new manpages to install target + +2002-07-12 13:03 desrod + + * doc/man/: dlpsh.1, ietf2datebook.1, install-datebook.1, + install-hinote.1, install-memo.1, install-netsync.1, + install-user.1, pi-getram.1, pi-getrom.1, pilot-addresses.1, + pilot-xfer.1, read-ical.1, read-notepad.1, read-palmpix.1: + lc($header) and s/FSF/Free Software Foundation/ in doc/man + +2002-07-12 12:33 desrod + + * doc/man/: pi-getram.1, pi-getrom.1: New manpages + +2002-07-12 12:22 desrod + + * doc/man/install-datebook.1: Updated install-datebook manpage + +2002-07-12 12:19 desrod + + * doc/man/: pilot-addresses.1, pilot-link.7, read-ical.1: Updates, + fixed some typos + +2002-07-12 11:57 desrod + + * doc/man/: install-memo.1, install-netsync.1, install-user.1: + Fixing up AUTHORS section + +2002-07-12 11:53 desrod + + * doc/man/: ietf2datebook.1, install-hinote.1, install-memo.1, + pilot-addresses.1, read-notepad.1, read-palmpix.1: Fixed minor + typos + +2002-07-12 11:46 desrod + + * ChangeLog, src/ietf2datebook.PL, src/pilot-ietf2datebook.pl: + Updated perl, removed CVS dreck headers + +2002-07-12 11:37 desrod + + * doc/man/dlpsh.1: Typo + +2002-07-12 11:36 desrod + + * ChangeLog, doc/man/dlpsh.1: Updated manpage to current + +2002-07-12 11:22 desrod + + * ChangeLog, src/install-hinote.c, src/pilot-install-hinote.c, + src/pilot-read-notepad.c, src/pilot-read-palmpix.c, + src/read-notepad.c, src/read-palmpix.c: getopt_long fixes, minor + formatting fixes + +2002-07-12 11:12 desrod + + * bindings/: Perl/Makefile.PL.in, Python/setup.py: Incremented + version number to 0.11.0. FIXME: Need to propagate this through + autoconf in the future + +2002-07-12 11:10 desrod + + * doc/man/: install-hinote.1, install-user.1, pilot-addresses.1, + pilot-xfer.1: Updated manpages + +2002-07-12 11:07 desrod + + * src/: install-netsync.c, pilot-install-netsync.c: Oops, fixed + argument propagation + +2002-07-12 11:04 desrod + + * src/: install-hinote.c, install-netsync.c, install-user.c, + pilot-install-hinote.c, pilot-install-netsync.c, + pilot-install-user.c: Changed minor options to be a bit more + intuitive + +2002-07-12 11:03 desrod + + * ChangeLog, doc/man/install-netsync.1, doc/man/read-notepad.1, + doc/man/read-palmpix.1: New manpages for read-notepad, + read-palmpix, install-netsync + +2002-07-12 08:49 desrod + + * configure.in: Small change to report library version, fix + pilot-link $VERSION output for 0.11 release (FIXME) + +2002-07-12 08:40 desrod + + * bindings/Perl/Pilot.xs, include/pi-dlp.h, libpisock/dlp.c, + src/pi-getromtoken.c, src/pilot-getromtoken.c, src/Makefile.am: + Added dlp_GetROMToken patch (Owen Stenseth) + +2002-07-12 07:29 desrod + + * ChangeLog, libpisock/todo.c: Added maximum length #defines for + Description and Note length, will add check code later + +2002-07-11 20:36 desrod + + * bindings/Perl/test.pl: Redundant exit() call + +2002-07-11 17:59 desrod + + * ChangeLog, src/memos.c, src/pilot-memos.c: Use current date/time + in output of "mail" headers, fixed placement of '\0' at the end + of -c processing, added code to allow -c to be used when reading + from a file (Michael Hartwig) + +2002-07-11 16:18 desrod + + * ChangeLog, bindings/Perl/test.pl: Rewrite of perl binding test, + do not dump records to STDOUT. Need to test return of $dlp + +2002-07-11 15:29 angusa + + * src/: pilot-read-notepad.c, read-notepad.c: Fixed for PNG libs >= + 1.0.12 + +2002-07-11 14:34 desrod + + * ChangeLog, bindings/Perl/Pilot.xs, bindings/Perl/dump.pl: Added + strict fixes to dump.pl, fixed an incorrect ref test in Pilot.xs + +2002-07-11 14:06 desrod + + * ChangeLog, configure.in, libpisock/dlp.c: Beginning of fixes for + OSX/NeXT ENOMSG issue with errno.h (EINVAL instead) + +2002-07-11 13:35 desrod + + * ChangeLog, src/pilot-read-palmpix.c, src/read-palmpix.c: Changed + 'struct U' to 'struct User' and s/&U/&User/ to match the other + conduits + +2002-07-11 13:24 desrod + + * ChangeLog, src/pilot-addresses.c: WriteUserInfo fix to prevent + clobbering the username on the device + +2002-07-09 16:42 angusa + + * src/: pilot-read-notepad.c, read-notepad.c: Fixed output to PPM + +2002-07-09 13:10 angusa + + * src/: pilot-read-notepad.c, read-notepad.c: Added PNG conversion + +2002-07-09 13:08 angusa + + * configure.in: Added PNG lib checking + +2002-07-09 13:05 angusa + + * acconfig.h: Added HAVE_PNG define - AA + +2002-07-03 14:59 jpr + + * ChangeLog, configure.in, libpisock/palmpix.c: 2002-07-03 JP + Rosevear + + * configure.in: check for stdint.h and inttypes.h + + * libpisock/palmpix.c: include stdint.h or inttypes.h as + necessary + +2002-07-03 14:26 jpr + + * ChangeLog, libpisock/usb.c: 2002-07-03 JP Rosevear + + + * libpisock/usb.c (pi_usb_accept): don't actually set the + baudrate, just use dummy values + +2002-07-03 14:24 jpr + + * ChangeLog, libpisock/usb.c: 2002-07-03 JP Rosevear + + + * libpisock/usb.c (pi_usb_accept): handle a cmp + connection + +2002-07-02 13:38 jpr + + * src/.cvsignore: Shush + +2002-07-02 13:35 jpr + + * ChangeLog, libpisock/syspkt.c: 2002-07-02 JP Rosevear + + + * libpisock/syspkt.c (sys_RPC): parse the return buffer + correctly + +2002-07-02 13:18 jpr + + * ChangeLog, include/pi-socket.h, libpisock/dlp.c, + libpisock/serial.c, libpisock/socket.c, libpisock/sys.c, + libpisock/syspkt.c, src/debugsh.c, src/pilot-debugsh.c: + 2002-07-02 JP Rosevear + + * libpisock/serial.c (pi_serial_connect): set the data + rate to + 57600 for a sys socket + (pi_serial_connect): set the baud rate for the device for + all + command queue types + + * libpisock/dlp.c (dlp_request_new): don't malloc a 0 + size array + (dlp_request_new_with_argid): ditto + (dlp_response_new): ditto + (dlp_request_free): don't free a 0 size array + (dlp_response_free): ditto + (dlp_exec): set the result to NULL in case we never read + a result + + * libpisock/syspkt.c (sys_QueryState): only write 2 bytes + (sys_RemoteEvent): don't write the slp info, just the + event info + (sys_RPC): ditto + + * libpisock/sys.c (sys_tx): transmit on the console + socket type + + * src/debugsh.c (main): create the SYS socket and connect + +2002-06-30 09:14 desrod + + * ChangeLog, libpisock/connect.c: Fixed the dlp_OpenConduit call, + was put in the wrong place. Passwords should now work again. + +2002-06-28 14:41 desrod + + * ChangeLog: [no log message] + +2002-06-28 14:41 desrod + + * libpisock/palmpix.c: Fixed a missing prototype for DecodeRow + +2002-06-28 14:31 desrod + + * ChangeLog, configure.in, bindings/Java/Jni.c, + include/Makefile.am, include/pi-address.h, include/pi-notepad.h, + include/pi-palmpix.h, libpisock/Makefile.am, libpisock/connect.c, + libpisock/inet.c, libpisock/notepad.c, libpisock/palmpix.c, + libpisock/serial.c, libpisock/socket.c, libpisock/usb.c, + src/Makefile.am, src/pilot-addresses.c, src/pilot-read-notepad.c, + src/pilot-read-palmpix.c, src/read-notepad.c, src/read-palmpix.c, + tests/dlp-test.c: NEW CONDUITS: read-palmpix, read-notepad (Angus + Ainslie) + + src/pilot-datebook: New datebook replacement (Matthias Hessler) + + configure.in: pilot-datebook pokes added + + src/Makefile.in: pilot-datebook pokes added + + src/pilot-addresses.c: Fixed a field-order error between 0.9.5 + and 0.10.99 CSV export files. Fixed the -i/-c + discrepancy again. + + bindings/Java/Jni.c: s/s.name/s.prodID/ + + libpisock/usb.c: Fixed missing prototype for pi_socket_init() + + libpisock/socket.c: ditto + + libpisock/serial.c: ditto + + libpisock/inet.c: ditto + +2002-06-28 11:56 jpr + + * ChangeLog, libpisock/dlp.c: 2002-06-28 JP Rosevear + + + * libpisock/dlp.c: oops, remove old dlp_exec function + +2002-06-28 11:54 jpr + + * ChangeLog, include/pi-dlp.h, libpisock/dlp.c: 2002-06-28 JP + Rosevear + + * include/pi-dlp.h: tidy protos + + * libpisock/dlp.c: rename dlp_exec_new to dlp_exec + +2002-06-28 10:45 jpr + + * ChangeLog, NEWS, configure.in, pilot-link.m4.in, + include/pi-version.h.in: 2002-06-28 JP Rosevear + + + * NEWS: update + + * pilot-link.m4.in: handle nano version when doing + configuration + check + + * configure.in: bump version + + * include/pi-version.h.in: handle a nano version as well + +2002-06-28 10:23 jpr + + * ChangeLog, bindings/Perl/Pilot.xs, + bindings/Python/src/pisock_wrap.c: 2002-06-28 JP Rosevear + + + * bindings/Perl/Pilot.xs: reflect name->prodID renaming + in SysInfo + + * bindings/Python/src/pisock_wrap.c: ditto + +2002-06-28 10:21 jpr + + * ChangeLog, src/Makefile.am, src/iambicexample.cc, + tests/Makefile.os2: 2002-06-28 JP Rosevear + + * src/Makefile.am: don't build iambicexample.cc + + * src/iambicexample.cc: remove because lib support is + gone + + * tests/Makefile.os2: remove unused file + +2002-06-28 10:19 jpr + + * ChangeLog, include/Makefile.am, include/pi-address.h, + include/pi-appinfo.h, include/pi-datebook.h, + include/pi-expense.h, include/pi-file.h, include/pi-hinote.h, + include/pi-iambicExpense.h, include/pi-iambicExpense.hxx, + include/pi-inetserial.h, include/pi-mail.h, include/pi-md5.h, + include/pi-memo.h, include/pi-money.h, include/pi-sync.h, + include/pi-syspkt.h, include/pi-todo.h: 2002-06-28 JP Rosevear + + + * libpisock++/Makefile.am: don't build iambicExpense.cc + + * libpisock++/iambicExpense.cc: kill at request of author + + * Revert format only changes to the headers, remove dead + headers + +2002-06-25 10:28 jpr + + * ChangeLog, include/pi-dlp.h, libpisock/dlp.c, libpisock/socket.c, + tests/.cvsignore, tests/Makefile.am, tests/dlp-test.c: Merging + dlp-arg-rewrite-branch to the main line. + +2002-06-24 14:09 jpr + + * ChangeLog, libpisock/dlp.c, tests/dlp-test.c: 2002-06-24 JP + Rosevear + + * tests/dlp-test.c (main): add tests for the remaining + 1.1 DLP + calls + + * libpisock/dlp.c (dlp_WriteAppPreference): set the + reserved byte + to 0 not 11 and copy the buffer to the request, not the + response + +2002-06-24 12:26 jpr + + * ChangeLog, tests/dlp-test.c: 2002-06-24 JP Rosevear + + + * tests/dlp-test.c: Make logging more consistent + +2002-06-24 12:02 jpr + + * ChangeLog, libpisock/dlp.c, tests/dlp-test.c: 2002-06-24 JP + Rosevear + + * tests/dlp-test.c: add copyright, improve docs, write a + more + complete test of records, finishes all the 1.0 DLP calls + i'm + going to do + + * libpisock/dlp.c (dlp_ReadOpenDBInfo): this has 1 arg, + not 0 + (dlp_ReadRecordIDList): the arg is 6 bytes long, also set + the max + value + (dlp_WriteRecord): get the new record id properly + (dlp_DeleteRecord): create the request with the right + command + (dlp_DeleteCategory): bitwise and instead of boolean and + (dlp_WriteAppPreference): this has 1 arg, not 0 + (dlp_ReadNextModifiedRecInCategory): ditto + +2002-06-22 18:35 desrod + + * ChangeLog, doc/README.usb: Updated to include the USB->kernel + device mapping for the visor driver + +2002-06-21 16:42 jpr + + * ChangeLog, include/pi-dlp.h, libpisock/dlp.c, tests/.cvsignore, + tests/Makefile.am, tests/dlp-test.c: 2002-06-21 JP Rosevear + + + * libpisock/dlp.c (dlp_request_new_with_argid): to create + a + request starting at something other than the first argid + (dlp_response_read): simplify + (dlp_request_write): make sure to write the correct argid + (dlp_exec_new): don't return 0 if there was a dlp error + (dlp_ReadStorageInfo): the manufacturer and name lengths + are only + 1 byte long + (dlp_ReadSysInfo): read from the response data + (dlp_ReadDBList): ditto + (dlp_OpenDB): card number and mode are only 1 byte + (dlp_DeleteDB): ditto + (dlp_CreateDB): allow space for the null string char + (dlp_CloseDB_All): start at argid 0x21 + (dlp_CallApplication): ditto and remove old undeleted + code + (dlp_AddSyncLogEntry): copy in the entry to the request + data + (dlp_EndOfSync): use correct function enum + (dlp_RPC): make dlp_buf local to here + (dlp_DeleteCategory): use the 0 arg offset rather than 1 + (dlp_ReadResourceByType): ditto + (dlp_ReadResourceByIndex): ditto + (dlp_ReadAppBlock): ditto + (dlp_ReadSortBlock): ditto + (dlp_DeleteResource): use correct function enum + (dlp_ReadNextRecInCategory): get data from response + (dlp_WriteAppPreference): make dlp_buf local to here + (dlp_ReadRecordByIndex): use request data and start argid + at 0x21 + + * include/pi-dlp.h: new proto + + * tests/dlp-test.c: regression test for dlp + + * tests/Makefile.am: add dlp-test to the build + +2002-06-06 13:27 jpr + + * ChangeLog, include/pi-dlp.h, libpisock/dlp.c: 2002-06-06 JP + Rosevear + + * libpisock/dlp.c: convert all functions over to new arg + system + +2002-05-29 08:39 desrod + + * ChangeLog, libpisock/socket.c, src/pilot-xfer.c: Adjust size of + realloc protocol_queue_add in socket.c (jhmark) + + Added -x/--exec option to allow intermediate scripts to be + executed "during" the sync. Fixed typo in 'Usage' in pilot-xfer.c + (Greg Alexander) + +2002-05-10 18:18 desrod + + * ChangeLog, libpisync/Makefile.am: Fixed multiple definitions of + libpisync_la_LIBADD (Björn Torkelsson) + +2002-05-07 15:59 desrod + + * ChangeLog, doc/Makefile.am: Fixed minor typo that broke dist. + s/Guideline/Guidelines/ + +2002-05-07 15:23 desrod + + * ChangeLog, doc/Makefile.am: Added new docs to EXTRA_DIST + +2002-05-06 08:46 desrod + + * ChangeLog, src/pilot-mail.c, src/pilot-xfer.c: Fixed remaining + PilotUser structs + +2002-05-05 23:31 desrod + + * ChangeLog, doc/CodingGuidelines: Fixed bad URL + +2002-05-05 23:29 desrod + + * ChangeLog, doc/CodingGuidelines: Small changes to + doc/CodingGuidelines (user-submitted suggestions) + +2002-05-05 23:23 desrod + + * ChangeLog, doc/README.usb: Minor readability adjustments to + doc/README.usb + +2002-05-05 23:20 desrod + + * ChangeLog, doc/README.usb, include/pi-datebook.hxx, + src/ccexample.cc, src/iambicexample.cc: Fixed a namespace typing + problem with gcc 3.x.x builds (Sergei Pachkov), began a draft for + the pilot-link USB howto + +2002-04-29 14:17 jpr + + * include/pi-dlp.h, libpisock/dlp.c, libpisock/socket.c: Committing + some rewrite stuff before it gets out of hand. + +2002-04-28 15:46 desrod + + * ChangeLog, doc/man/install-datebook.1: Fixed some typos, changed + around some formatting a bit. (#180, bgdarnell) + +2002-04-25 11:15 jpr + + * libpisock/dlp.c, libpisock/net.c, src/install-user.c, + src/pilot-install-user.c: 2002-04-25 JP Rosevear + + + * libpisock/connect.c (pilot_connect): read the system + info + + * libpisock/dlp.c (dlp_ReadSysInfo): write a dlp version + of 1.3 + out when reading system info + + * libpisock/net.c (net_rx_handshake): make buffers + unsigned chars + (net_tx_handshake): ditto + (net_tx): print correct debugging info + + * bindings/Python/setup.py: fix compilation (but only + when build + dir == src dir) + + * src/install-user.c (main): exit nicely when we are just + printing + out the user info + +2002-04-25 03:01 jpr + + * ChangeLog, bindings/Python/setup.py, libpisock/connect.c: + 2002-04-25 JP Rosevear + + * libpisock/connect.c (pilot_connect): read the system + info + + * libpisock/dlp.c (dlp_ReadSysInfo): write a dlp version + of 1.3 + out when reading system info + + * libpisock/net.c (net_rx_handshake): make buffers + unsigned chars + (net_tx_handshake): ditto + (net_tx): print correct debugging info + + * bindings/Python/setup.py: fix compilation (but only + when build + dir == src dir) + + * src/install-user.c (main): exit nicely when we are just + printing + out the user info + +2002-04-20 11:52 desrod + + * ChangeLog, configure.in: Removed "development version" warning + +2002-04-18 21:16 jpr + + * ChangeLog, bindings/Makefile.am: 2002-04-18 JP Rosevear + + + * bindings/Makefile.am: better dependency rule + +2002-04-18 16:30 jpr + + * libpisync/.cvsignore: Shush. + +2002-04-18 16:29 jpr + + * ChangeLog, Makefile.am, configure.in: 2002-04-18 JP Rosevear + + + * Makefile.am: add libpisync as a subdir + + * configure.in: AC_SUBST the version info + +2002-04-18 16:09 jpr + + * ChangeLog, configure.in, libpisock/Makefile.am, libpisock/sync.c, + libpisync/Makefile.am, src/pi-getram.c, src/pi-getrom.c, + src/pilot-getram.c, src/pilot-getrom.c: 2002-04-18 JP Rosevear + + + * src/pi-getram.c (main): fix compilation + + * src/pi-getrom.c (main): fix compilation + + * libpisync/sync.c: move + + * libpisync/Makefile.am: Compile libpisync library + + * libpisock/Makefile.am: remove sync.c from sources + + * configure.in: add sync library version + +2002-04-18 10:28 jpr + + * ChangeLog, acconfig.h, configure.in, + bindings/Python/src/pisock.i, bindings/Python/src/pisock_wrap.c, + doc/Makefile.am, include/Makefile.am, include/pi-usb.h, + libpisock/Makefile.am, libpisock/freebsdusb.c, + libpisock/linuxusb.c, libpisock/serial.c, libpisock/socket.c, + libpisock/usb.c, src/pilot-xfer.c: 2002-04-18 JP Rosevear + + + * doc/Makefile.am: dist extra doc stuff + + * libpisock/socket.c (pi_connect): add usb device + (pi_bind): ditto + + * libpisock/freebsdusb.c: freebsd usb device + implementation + + * libpisock/linuxusb.c: linux usb device implementation + + * libpisock/usb.c: generic usb device + + * libpisock/Makefile.am: compile usb sources if needed + + * include/Makefile.am: install new pi-usb.h header + + * acconfig.h: add HAVE_USB + + * configure.in: clean up configure checks slightly, check + for usb + platforms + +2002-04-18 00:15 desrod + + * ChangeLog, src/addresses.c, src/dlpsh.c, src/install-datebook.c, + src/install-expenses.c, src/install-hinote.c, src/install-memo.c, + src/install-netsync.c, src/install-user.c, src/memos.c, + src/money2qif.c, src/pi-getram.c, src/pi-getrom.c, + src/pi-nredir.c, src/pi-port.c, src/pilot-addresses.c, + src/pilot-clip.c, src/pilot-dedupe.c, src/pilot-dlpsh.c, + src/pilot-getram.c, src/pilot-getrom.c, + src/pilot-install-datebook.c, src/pilot-install-expenses.c, + src/pilot-install-hinote.c, src/pilot-install-memo.c, + src/pilot-install-netsync.c, src/pilot-install-user.c, + src/pilot-memos.c, src/pilot-nredir.c, src/pilot-port.c, + src/pilot-read-expenses.c, src/pilot-read-ical.c, + src/pilot-read-todos.c, src/pilot-reminders.c, + src/pilot-schlep.c, src/pilot-xfer.c, src/read-expenses.c, + src/read-ical.c, src/read-todos.c, src/reminders.c: Removed + extraneous error strings in 'error:', since they are duplicated + in libpisock/connect.c + +2002-04-17 23:48 desrod + + * ChangeLog, bindings/Makefile.am: Typo in bindings/Makefile.am, + s/buildir/builddir/, remove LD_LIBRARY_PATH which is ignored by + distutils anyway (David Gibson) + +2002-04-17 23:47 desrod + + * ChangeLog, src/pi-getram.c, src/pi-getrom.c, src/pilot-getram.c, + src/pilot-getrom.c: More granular error control, reporting in + pi-getr?m.c + +2002-04-16 22:50 jpr + + * ChangeLog, libpisock/socket.c: 2002-04-16 JP Rosevear + + + * libpisock/socket.c (onalarm): use RETSIGTYPE + +2002-04-12 17:11 desrod + + * bindings/Python/src/pisock_wrap.c: Updated swig build + +2002-04-12 17:10 desrod + + * bindings/Python/src/pisock.i: Removed references to PalmHeader() + and pi_setmaxspeed so the module will properly import. + +2002-04-12 17:10 desrod + + * bindings/Python/setup.py: Fixed libdir + +2002-04-12 17:01 desrod + + * src/pilot-xfer.c: Fixed a bug in Restore() when the directory is + missing, fixed a permission problem when the target directory is + not writable. + +2002-04-12 17:01 desrod + + * ChangeLog, libpisock/connect.c: Small error/perror() cleanups + +2002-04-10 15:25 desrod + + * src/pilot-xfer.c: No need for F_OK test twice in Backup() + +2002-04-10 15:23 desrod + + * src/pilot-xfer.c: One small fix to change the directory creation + if it doesn't already exist. + +2002-04-10 15:11 desrod + + * ChangeLog, src/pilot-xfer.c: Backup().. directory must be + writable before we Connect() and write data. + +2002-04-10 13:48 desrod + + * ChangeLog, libpisock/connect.c, src/pilot-xfer.c: + Fixed a bug in pilot-xfer in Restore() when the directory + did not + exist. Added minor cleanups to connect.c, perror(), misc. + +2002-04-10 12:44 desrod + + * bindings/Python/src/pisock_wrap.c: + Oops, forgot to run swig on that last update. + +2002-04-10 12:42 desrod + + * ChangeLog, bindings/Python/setup.py, + bindings/Python/src/pisock.i, bindings/Python/src/pisock_wrap.c: + Updated the Python bindings to fix an import problem with + unresolved + symbols. Removed the deprecated reference to PalmHeader() + and + pi_setmaxspeed. + +2002-04-03 16:01 jpr + + * include/pi-usb.h: oops. + +2002-04-03 14:48 jpr + + * ChangeLog, acconfig.h, configure.in, doc/Makefile.am, + include/Makefile.am, libpisock/Makefile.am, + libpisock/freebsdusb.c, libpisock/linuxusb.c, libpisock/serial.c, + libpisock/socket.c, libpisock/usb.c: 2002-04-03 JP Rosevear + + + * libpisock/socket.c (pi_connect): add usb device + (pi_bind): ditto + + * libpisock/freebsdusb.c: freebsd usb device + implementation + + * libpisock/linuxusb.c: linux usb device implementation + + * libpisock/usb.c: generic usb device + + * libpisock/Makefile.am: compile usb sources if needed + + * include/Makefile.am: install new pi-usb.h header + + * acconfig.h: add HAVE_USB + + * configure.in: clean up configure checks slightly, check + for usb + platforms + +2002-04-02 13:58 desrod + + * ChangeLog, src/pilot-addresses.c: Fixed field names to align with + labels in write_file() + +2002-04-02 10:11 desrod + + * ChangeLog, src/memos.c, src/pilot-memos.c: Forgot some braces in + memos.c, exit(0) would never be parsed + +2002-03-30 09:15 jpr + + * ChangeLog, libpisock/unixserial.c: 2002-03-30 JP Rosevear + + + * libpisock/unixserial.c (s_read): Check to make sure the + read was + successful before writing to the buffer + +2002-03-30 09:14 jpr + + * ChangeLog, bindings/Perl/Makefile.PL.in: 2002-03-30 JP Rosevear + + + * bindings/Perl/Makefile.PL.in: Use the right libdir + +2002-03-20 17:22 desrod + + * NEWS: Minor cleanups to NEWS + +2002-03-20 17:15 jpr + + * ChangeLog, NEWS: 2002-03-20 JP Rosevear + + * NEWS: update + +2002-03-20 16:27 jpr + + * ChangeLog, NEWS: 2002-03-20 JP Rosevear + + * NEWS: update + +2002-03-20 16:21 jpr + + * ChangeLog, NEWS, configure.in, bindings/Perl/Makefile.PL.in, + bindings/Python/setup.py: 2002-03-20 JP Rosevear + + + * NEWS: update + + * configure.in: bump version to 0.10.99 + + * bindings/Perl/Makefile.PL.in: Bump version + + * bindings/Java/org/gnu/pdapilot/Constants.java: ditto + + * bindings/Python/setup.py: ditto + +2002-03-20 15:37 desrod + + * ChangeLog, src/pilot-xfer.c: Another small tweak to pilot-xfer to + handle "double extensions" such as those created by Adobe Palm + Reader. + +2002-03-20 15:30 desrod + + * ChangeLog: Forgot to update ChangeLog + +2002-03-20 15:28 desrod + + * ChangeLog, README: Minor change to README to remove bug-reporting + redundancy + +2002-03-20 15:22 desrod + + * README: Moved a section down + +2002-03-20 15:17 desrod + + * README, doc/README.debugging: Minor documentation updates for + README and doc/README.debugging + +2002-03-20 15:00 jpr + + * ChangeLog, include/pi-padp.h, include/pi-slp.h, libpisock/padp.c, + libpisock/slp.c, libpisock/socket.c: 2002-03-20 JP Rosevear + + + * libpisock/slp.c (slp_tx): make the buffer the size of + the + header/footer and mtu + (slp_rx): ditto + + * libpisock/padp.c (padp_tx): ditto + (padp_rx): ditto + + * include/pi-slp.h: ditto + + * include/pi-padp.h: don't include the header in the MTU + value + + * libpisock/socket.c (pi_close): even if closing the + device fails, + free the queue and device + +2002-03-20 14:26 desrod + + * ChangeLog, src/pilot-xfer.c: When using -f, also allow 'File.ext' + as well as 'File' to be specified. (Robert Cortopassi) + +2002-03-20 12:53 jpr + + * ChangeLog, libpisock/padp.c, libpisock/slp.c: 2002-03-20 JP + Rosevear + + * libpisock/padp.c (padp_tx): only check for a memory + error after + we ensure the packet it the correct ack, return the + proper length + count when the data response arrives instead of the ack, + add + logging, use PADP_MTU for buffer size + (padp_rx): remove excessive read calls, add logging, use + PADP_MTU + for buffer size + + * libpisock/slp.c (slp_rx): correctly check for when + packet length + exceeds buffer length, add some logging + +2002-03-19 23:15 jpr + + * ChangeLog, libpisock/padp.c, libpisock/slp.c: 2002-03-19 JP + Rosevear + + * libpisock/padp.c (padp_rx): ensure that all bytes are + read in + + * libpisock/slp.c (slp_rx): return 0 on bad checksum + (header or packet) + +2002-03-19 18:14 jpr + + * ChangeLog, libpisock/dlp.c, libpisock/slp.c: 2002-03-19 JP + Rosevear + + * libpisock/slp.c (slp_dump_header): print out checksum + correctly + + * libpisock/dlp.c (dlp_exec): check for an error from the + read + call + +2002-03-19 16:33 jpr + + * ChangeLog, libpisock/socket.c: 2002-03-19 JP Rosevear + + + * libpisock/socket.c: include pi-sys.h + +2002-03-19 15:34 jpr + + * ChangeLog, include/Makefile.am: 2002-03-19 JP Rosevear + + + *include/Makefile.am: only install c++ headers if we + built the c++ + lib + +2002-03-19 15:31 jpr + + * ChangeLog, include/Makefile.am: 2002-03-19 JP Rosevear + + + * include/Makefile.am (c_headers): add pi_sys.h + +2002-03-19 15:05 jpr + + * ChangeLog, include/pi-socket.h, include/pi-source.h, + include/pi-sys.h, include/pi-syspkt.h, libpisock/Makefile.am, + libpisock/padp.c, libpisock/socket.c, libpisock/sys.c, + libpisock/syspkt.c: 002-03-19 JP Rosevear + + * include/pi-sys.h: for new sys protocol + + * include/pi-syspkt.h: remove protos + + * include/pi-source.h: remove dead struct + + * include/pi-socket.h: add PI_PF_SYS and PI_LEVEL_SYS + + * libpisock/sys.c: implement the sys protocol + + * libpisock/socket.c (protocol_queue_build): handle + PI_PF_SYS + + * libpisock/syspkt.c: remove syspkt_tx and syspkt_rx + + * libpisock/Makefile.am: build sys.c + + * libpisock/padp.c (padp_tx): remove useless unsigned + char casts + +2002-03-19 14:04 jpr + + * ChangeLog, include/pi-slp.h, include/pi-socket.h, + libpisock/padp.c, libpisock/slp.c, libpisock/socket.c: 2002-03-19 + JP Rosevear + + * libpisock/slp.c (slp_protocol): use new defines + + * libpisock/padp.c (padp_rx): ditto + (padp_tx): ditto + + * include/pi-slp.h: create slp socket defines + + * include/pi-socket.h: remove obsolete defines + + * libpisock/socket.c (pi_getsockopt): use correct field + name + +2002-03-19 13:52 jpr + + * ChangeLog, include/pi-socket.h, libpisock/socket.c, + src/pi-nredir.c, src/pilot-nredir.c: 2002-03-19 JP Rosevear + + + * include/pi-socket.h: add a SOCK level and options + + * src/pi-nredir.c (main): set both sockets to + PI_SOCK_CONEN + because the disconnect will have already gone through + + * libpisock/socket.c (pi_getsockopt): handle the sock + level and + sock state option + (pi_setsockopt): ditto + +2002-03-19 13:18 desrod + + * ChangeLog, src/pilot-xfer.c: Cleaned up print_help() and some + other minor formatting changes. + +2002-03-19 13:16 desrod + + * ChangeLog, libpisock/connect.c: Updated connect() with a slightly + better error handling of /dev/pilot fallbacks. Also removed the + putenv() call, since we don't need it inside connect.c (unless + children need access to it, but they don't). + +2002-03-18 21:50 desrod + + * ChangeLog, src/pilot-xfer.c: Added a top limit for numexclude. We + don't want to oob this array. This prevents that. + +2002-03-18 21:39 desrod + + * ChangeLog, src/install-user.c, src/pilot-install-user.c: Exit + cleanly when no arguments are passed to install-user. Previously + would remove UserInfo. Bad, and fixed now. + +2002-03-18 19:20 jpr + + * ChangeLog, src/dlpsh.c, src/pilot-dlpsh.c: 2002-03-18 JP + Rosevear + + * src/dlpsh.c (strtoke): don't run past the end of the + string on + the last token + +2002-03-18 17:29 jpr + + * ChangeLog, src/dlpsh.c, src/pilot-dlpsh.c: 2002-03-18 JP + Rosevear + + * src/dlpsh.c (strtoke): end the string in the right spot + if it + was delimited + +2002-03-18 15:24 jpr + + * ChangeLog, libpisock/slp.c: 2002-03-18 JP Rosevear + + + * libpisock/slp.c (slp_rx): correct bit mask again, d'oh + +2002-03-18 15:15 jpr + + * ChangeLog, libpisock/slp.c: 2002-03-18 JP Rosevear + + + * libpisock/slp.c (slp_rx): correct bit mask + +2002-03-18 15:08 jpr + + * ChangeLog, libpisock/padp.c, libpisock/slp.c: 2002-03-18 JP + Rosevear + + * libpisock/slp.c (slp_rx): adjust the check sum for loop + back + packets if it doesn't match in case its the tenth one + + * libpisock/padp.c (padp_rx): no need to kill the offset + +2002-03-18 15:01 desrod + + * include/pi-source.h, libpisock/utils.c: Revert. + +2002-03-18 14:54 desrod + + * ChangeLog, include/pi-source.h, libpisock/utils.c: [no log + message] + +2002-03-18 09:32 desrod + + * ChangeLog, src/pilot-addresses.c: Fixed missing options, + getopt_long(), changed -c argument to -i. + +2002-03-15 16:40 jpr + + * ChangeLog, pilot-link.m4.in: 2002-03-15 JP Rosevear + m + + * pilot-link.m4.in: remove unneccessary checks, error on + failure + +2002-03-15 15:58 jpr + + * ChangeLog, src/pix/Makefile.am: 2002-03-15 JP Rosevear + + + * src/pix/Makefile.am: install pix + +2002-03-15 15:52 jpr + + * .cvsignore, ChangeLog, Makefile.am, configure.in, + bindings/Makefile.am, bindings/Java/Jni.c, + bindings/Java/Makefile.am, doc/.cvsignore, doc/Makefile.am, + libpisock/Makefile.am, src/.cvsignore, src/Makefile.am, + src/pix/.cvsignore, src/pix/Makefile.am, src/prc/.cvsignore, + src/prc/Makefile.am, tests/Makefile.am: 2002-03-15 JP Rosevear + + + * tests/Makefile.am (INCLUDES): fix dir for linking + + * src/prc/Makefile.am: dist and install the prc data + + * src/pix/Makefile.am: dist the pix + + * src/Makefile.am: compile apps + + * libpisock++/Makefile.am: rename to libpisock++, make + shared lib + and version + + * libpisock/Makefile.am: tidy + + * doc/Makefile.am: compile subdir + + * bindings/Makefile.am: use correct libdir + + * bindings/Java/Jni.c: s/defaultCategory/defaultCurrency/ + + * bindings/Makefile.am: reflect change of subdir from + Perl5 to + Perl + + * configure.in: fix AC_OUTPUT files, add version stuff + for + libpisock++ + + * Makefile.am: remove stuff to build apps + +2002-03-15 14:29 desrod + + * getopt.h, parsedate.y: The last of the code-based files (text + files are left) + +2002-03-15 12:15 desrod + + * TODO: ./doc straggler + +2002-03-15 12:14 desrod + + * README-Win32.txt, ietf2datebook.PL, pilot-undelete.PL, + sync-plan.PL: Moving some docs into ./docs and some source into + ./src + +2002-03-15 12:06 desrod + + * addresses.c, ccexample.cc, debugsh.c, dlpsh.c, getopt.c, + getopt1.c, getrom.c, getrom.prc, getrom2.prc, hinotes.c, + iambicexample.cc, install-datebook.c, install-expenses.c, + install-hinote.c, install-memo.c, install-netsync.c, + install-todos.c, install-user.c, kittykiller.c, memos.c, + money2qif.c, parsedate.c, pd-tty.c, pi-csd.c, pi-getram.c, + pi-getrom.c, pi-nredir.c, pi-port.c, pilot-addresses.c, + pilot-clip.c, pilot-debug.c, pilot-dedupe.c, pilot-file.c, + pilot-mail.c, pilot-prc.c, pilot-schlep.c, pilot-xfer.c, + read-expenses.c, read-ical.c, read-todos.c, reminders.c, + validate.cc: Major directory and file restructuring. O V E R H A + U L! + +2002-03-07 16:09 jpr + + * ChangeLog, libpisock/inet.c, libpisock/unixserial.c: 2002-03-07 + JP Rosevear + + * libsock/unixserial.c (s_write): obey the timeout for + writes as + well + + * libsock/inet.c (pi_inet_write): ditto + +2002-03-07 15:27 jpr + + * ChangeLog, libpisock/connect.c: 2002-03-07 JP Rosevear + + + * libsock/connect.c (pilot_connect): if the port is null + and the + PILOTPORT env var is null, try using /dev/pilot + +2002-03-07 14:30 jpr + + * ChangeLog, read-expenses.c, bindings/Perl/Pilot.xs, + include/pi-expense.h, libpisock/expense.c, + src/pilot-read-expenses.c, src/read-expenses.c: 2002-03-07 JP + Rosevear + + * tools/Perl5/Pilot.xs: adjust expense wrappers + + * read-expenses.c (main): print both font fields, the + correct + number of categories and the correct number of new pref + bytes + + * include/pi-expense.h: adjust pref fields + + * libsock/expense.c (unpack_ExpensePref): its the default + currency, not category, read the correct number of + currencies and + both font values, get the two unknown values + (pack_ExpensePref): write the correct number of + categories, + showAllCategories is only one byte long, write 0xff for + the two + unknown values, write both font values + +2002-03-01 09:13 desrod + + * ChangeLog, dlpsh.c, getrom.c, hinotes.c, install-expenses.c, + install-hinote.c, install-memo.c, install-netsync.c, + install-todos.c, install-user.c, memos.c, money2qif.c, pi-csd.c, + pi-getram.c, pi-getrom.c, pi-nredir.c, pi-port.c, + pilot-addresses.c, pilot-clip.c, pilot-debug.c, pilot-dedupe.c, + pilot-file.c, pilot-mail.c, pilot-prc.c, pilot-schlep.c, + pilot-xfer.c, read-expenses.c, read-ical.c, read-todos.c, + reminders.c, include/pi-header.h, libpisock/pi-header.c, + src/dlpsh.c, src/getrom.c, src/hinotes.c, src/install-expenses.c, + src/install-hinote.c, src/install-memo.c, src/install-netsync.c, + src/install-todos.c, src/install-user.c, src/memos.c, + src/money2qif.c, src/pi-csd.c, src/pi-getram.c, src/pi-getrom.c, + src/pi-nredir.c, src/pi-port.c, src/pilot-addresses.c, + src/pilot-clip.c, src/pilot-csd.c, src/pilot-debug.c, + src/pilot-dedupe.c, src/pilot-dlpsh.c, src/pilot-file.c, + src/pilot-getram.c, src/pilot-getrom.c, src/pilot-hinotes.c, + src/pilot-install-expenses.c, src/pilot-install-hinote.c, + src/pilot-install-memo.c, src/pilot-install-netsync.c, + src/pilot-install-todos.c, src/pilot-install-user.c, + src/pilot-mail.c, src/pilot-memos.c, src/pilot-nredir.c, + src/pilot-port.c, src/pilot-prc.c, src/pilot-read-expenses.c, + src/pilot-read-ical.c, src/pilot-read-todos.c, + src/pilot-reminders.c, src/pilot-schlep.c, src/pilot-xfer.c, + src/read-expenses.c, src/read-ical.c, src/read-todos.c, + src/reminders.c: s/PalmHeader/print_splash/ && s/Help/print_help/ + +2002-03-01 09:10 desrod + + * addresses.c, src/addresses.c: s/PalmHeader/print_splash/ && + s/Help/print_help/ + +2002-02-27 08:57 desrod + + * ChangeLog, Makefile.am, bindings/Makefile.am, + bindings/Java/Makefile.am, libpisock/Makefile.am, + tests/Makefile.am: Minor pokes to allow pilot-link to build + outside $SRCDIR (John Marshall) + +2002-02-27 00:19 desrod + + * ChangeLog, dlpsh.c, install-user.c, pi-nredir.c, pi-port.c, + pilot-schlep.c, read-expenses.c, read-ical.c, read-todos.c, + reminders.c, src/dlpsh.c, src/install-user.c, src/pi-nredir.c, + src/pi-port.c, src/pilot-dlpsh.c, src/pilot-install-user.c, + src/pilot-nredir.c, src/pilot-port.c, src/pilot-read-expenses.c, + src/pilot-read-ical.c, src/pilot-read-todos.c, + src/pilot-reminders.c, src/pilot-schlep.c, src/read-expenses.c, + src/read-ical.c, src/read-todos.c, src/reminders.c: + pilot_connect() cleanup, getopt_long() conversion/cleanup, + general cleaning. pi-port does not work at the moment, will fix + later. + +2002-02-25 09:01 desrod + + * ChangeLog, libpisock/connect.c: BSD errno.h fixes from Peter da + Silva + +2002-02-24 13:19 desrod + + * ChangeLog, configure.in, bindings/Perl/Makefile.PL.in: + Incremented and fixed the versions in preparation for a release. + libpisock, Perl and Python bindings fixed. Java was already + corrected. Added a warning at the bottom of configure.in for + those who install without reading docs. + +2002-02-21 10:59 desrod + + * ChangeLog, libpisock/pi-header.c: Added build date and time to + the header splash, helps track bugs more granularly + +2002-02-21 10:18 desrod + + * pilot-xfer.c, src/pilot-xfer.c: Moved a type definition to where + it belongs. + +2002-02-21 09:23 desrod + + * ChangeLog, libpisock/pi-file.c: Removed "pretty-print" for now. + +2002-02-21 00:15 desrod + + * ChangeLog, install-user.c, memos.c, money2qif.c, pilot-prc.c, + pilot-xfer.c, src/install-user.c, src/memos.c, src/money2qif.c, + src/pilot-install-user.c, src/pilot-memos.c, src/pilot-prc.c, + src/pilot-xfer.c: Lots of cleanup here. Fixed the fallthrough + cases, added --novsf hack to pilot-xfer to fix a JPilot issue, + more stuff. + +2002-02-20 20:40 desrod + + * ChangeLog, dlpsh.c, pilot-file.c, src/dlpsh.c, src/pilot-dlpsh.c, + src/pilot-file.c: Fixing up the last of them, release time! + (getopt conversions, aligning the --help and output options, + cleanup) + +2002-02-09 21:22 desrod + + * ChangeLog, memos.c, src/memos.c, src/pilot-memos.c: Removed -Q, + -q, -D options.. changed -v from 'verbose' to 'version', + flattened + +2002-02-09 20:48 desrod + + * ChangeLog, memos.c, src/memos.c, src/pilot-memos.c: Flattened + memos, updated PILOTPORT handling, flattened + +2002-02-09 20:38 desrod + + * ChangeLog, install-hinote.c, src/install-hinote.c, + src/pilot-install-hinote.c: PILOTPORT conversion of + install-hinote, flattened + +2002-02-09 20:18 desrod + + * ChangeLog, addresses.c, src/addresses.c: Cleaned up addresses a + bit to handle the new PILOTPORT parsing, flattened it up a bit + +2002-02-09 19:37 desrod + + * ChangeLog, bindings/Python/setup.py: Incremented version of + Python binding to match core pilot-link version + +2002-02-09 15:40 desrod + + * ChangeLog, addresses.c, src/addresses.c: Removed 'fancy' output + from addresses (fstyle) + +2002-02-09 09:55 desrod + + * ChangeLog, pilot-xfer.c, src/pilot-xfer.c: Reverted an optstring + bug I introduced over the top of Judd's fix + +2002-02-08 14:23 desrod + + * ChangeLog, dlpsh.c, src/dlpsh.c, src/pilot-dlpsh.c: Removed + garbage string in 'ls' output + +2002-02-08 14:14 desrod + + * ChangeLog, dlpsh.c, src/dlpsh.c, src/pilot-dlpsh.c: Missing + string.h include + +2002-02-08 14:09 jpr + + * ChangeLog, libpisock/inet.c, libpisock/socket.c: 2002-02-08 JP + Rosevear + + * libsock/socket.c (ps_list_remove): update the prev_elem + each + iteration + + * libsock/inet.c (pi_inet_accept): set correct sd when we + know it + and don't recognize the socket twice + +2002-02-08 12:50 desrod + + * ChangeLog, doc/README.debugging, doc/logging.txt: Renamed + doc/logging.txt to doc/README.debugging + +2002-02-08 12:49 judd + + * ChangeLog: Fixed bug of pilot-xfer -i not accepting multiple + files as arguments. + +2002-02-08 09:54 desrod + + * ChangeLog, pilot-xfer.c, src/pilot-xfer.c: Minor cleanups to + pilot-xfer + +2002-02-08 03:26 judd + + * pilot-xfer.c, src/pilot-xfer.c: pilot-xfer now accepts multiple + files as arguments to -i + +2002-02-05 11:13 jpr + + * ChangeLog, libpisock/dlp.c, libpisock/pi-file.c, libpisock/slp.c, + libpisock/syspkt.c, libpisock/utils.c: 2002-02-05 JP Rosevear + + + * libsock/dlp.c: include before + for + freebsd 4.4 + + * libsock/utils.c: ditto + + * libsock/syspkt.c: ditto + + * libsock/slp.c: ditto + +2002-02-03 03:35 judd + + * libpisock/pi-file.c: fixed divide by zero error + +2002-01-31 13:45 jpr + + * ChangeLog, include/pi-socket.h, libpisock/inet.c, + libpisock/net.c, libpisock/padp.c, libpisock/serial.c: 2002-01-31 + JP Rosevear + + * libsock/serial.c (pi_serial_setsockopt): these are + device rather + than socket level options, add timeout + (pi_serial_getsockopt): ditto + + * libsock/padp.c (padp_tx): set device timeout for + reading + (padp_rx): ditto + + * libsock/net.c (net_rx): set device timeout + + * libsock/inet.c (pi_inet_getsockopt): implement timeout + option + (pi_inet_setsockopt): ditto + + * include/pi-socket.h: remove socket level and add device + level + +2002-01-31 12:35 jpr + + * ChangeLog, libpisock/connect.c: 2002-01-31 JP Rosevear + + + * libsock/connect.c (pilot_connect): improve pi_bind + error message + +2002-01-31 12:05 jpr + + * ChangeLog, libpisock/serial.c: 2002-01-31 JP Rosevear + + + * libsock/serial.c (pi_serial_device_dup): increment ref + count + properly + (pi_serial_close): decrement ref count properly + (pi_serial_accept): the timeout must be set before + pi_socket_init + because it might peek at the data for autodetection + +2002-01-31 07:59 desrod + + * ChangeLog, dlpsh.c, src/dlpsh.c, src/pilot-dlpsh.c: dlpsh is + segfaulting all over the place now, major problems in strtoke() + are appearing now for no apparent reason + +2002-01-30 17:15 jpr + + * ChangeLog, include/pi-cmp.h, libpisock/cmp.c, + libpisock/pi-file.c: 2002-01-30 JP Rosevear + + * libsock/cmp.c (cmp_wakeup): use new version define + + * include/pi-cmp.h: tidy version defines + + * libsock/pi-file.c (pi_file_read_record): using logging + functions + +2002-01-30 00:35 desrod + + * libpisock/pi-file.c: Removed one final declaration of 'size' that + was commented in 1.26 + +2002-01-30 00:26 desrod + + * ChangeLog, libpisock/pi-file.c: Fixed a problem in pi-file.c when + 'size' was uninitialized + +2002-01-29 23:16 desrod + + * ChangeLog, install-memo.c, src/install-memo.c, + src/pilot-install-memo.c: Fixed an error with install-memo + reporting erroneous argv[0] on filename + +2002-01-29 16:29 desrod + + * ChangeLog, CodingGuidelines, Makefile.am, doc/CodingGuidelines: + Moved CodingGuidelines to ./doc + +2002-01-29 16:15 jpr + + * ChangeLog, doc/logging.txt: 2002-01-29 JP Rosevear + + + * doc/logging.txt: Basic loggin how-to + +2002-01-28 16:17 jpr + + * ChangeLog, libpisock/dlp.c: 2002-01-28 JP Rosevear + + + * libsock/dlp.c: convert Trace and Expect to logging + functions + +2002-01-28 16:03 jpr + + * ChangeLog, libpisock/padp.c: 2002-01-28 JP Rosevear + + + * libsock/padp.c: Use logging function + +2002-01-28 12:05 jpr + + * ChangeLog, configure.in, libpisock/cmp.c, libpisock/padp.c, + libpisock/serial.c, libpisock/slp.c, libpisock/unixserial.c: + 2002-01-28 JP Rosevear + + * libsock/serial.c (pi_serial_accept): use the accept + socket data + when appropriate, set timeout value for initialization + based on + accept_to value + + * libsock/unixserial.c (s_read): set the errno for a + timeout + (s_poll): ditto + + * libsock/slp.c (slp_rx): check for read errors + + * libsock/padp.c (padp_rx): check for read errors + (padp_tx): use LOG + + * libsock/cmp.c (cmp_init): set flags to 0x80 if rate is + not 9600, + rather than if rates don't match + +2002-01-26 18:53 desrod + + * ChangeLog, libpisock/inet.c, libpisock/serial.c, + libpisock/unixserial.c: Fixed a missing include problem + ()for Redhat 6.x systems + +2002-01-26 10:07 desrod + + * ChangeLog, pilot-debug.c, src/pilot-debug.c: We should be using + , and not local 'extern int matherr();' in here + +2002-01-26 09:43 desrod + + * ChangeLog, pilot-addresses.c, pilot-dedupe.c, pilot-mail.c, + pilot-xfer.c, src/pilot-addresses.c, src/pilot-dedupe.c, + src/pilot-mail.c, src/pilot-xfer.c: Fixed some lingering typos + from the last update (thanks for spotting them Andreas) + +2002-01-26 06:32 desrod + + * ChangeLog, addresses.c, dlpsh.c, hinotes.c, install-datebook.c, + install-expenses.c, install-hinote.c, install-memo.c, + install-netsync.c, install-todos.c, install-user.c, memos.c, + money2qif.c, parsedate.c, pd-tty.c, pi-csd.c, pi-getram.c, + pi-getrom.c, pi-nredir.c, pi-port.c, pilot-addresses.c, + pilot-clip.c, pilot-debug.c, pilot-dedupe.c, pilot-file.c, + pilot-mail.c, pilot-prc.c, pilot-schlep.c, pilot-xfer.c, + read-expenses.c, read-ical.c, read-todos.c, reminders.c, + libpisock/cmp.c, libpisock/datebook.c, libpisock/inet.c, + libpisock/net.c, libpisock/os2serial.c, libpisock/padp.c, + libpisock/pi-file.c, libpisock/slp.c, libpisock/sync.c, + libpisock/syspkt.c, libpisock/unixserial.c, libpisock/utils.c, + libpisock/winserial.c, libpisync/sync.c, src/addresses.c, + src/dlpsh.c, src/hinotes.c, src/install-datebook.c, + src/install-expenses.c, src/install-hinote.c, src/install-memo.c, + src/install-netsync.c, src/install-todos.c, src/install-user.c, + src/memos.c, src/money2qif.c, src/parsedate.c, src/pd-tty.c, + src/pi-csd.c, src/pi-getram.c, src/pi-getrom.c, src/pi-nredir.c, + src/pi-port.c, src/pilot-addresses.c, src/pilot-clip.c, + src/pilot-csd.c, src/pilot-debug.c, src/pilot-dedupe.c, + src/pilot-dlpsh.c, src/pilot-file.c, src/pilot-getram.c, + src/pilot-getrom.c, src/pilot-hinotes.c, + src/pilot-install-datebook.c, src/pilot-install-expenses.c, + src/pilot-install-hinote.c, src/pilot-install-memo.c, + src/pilot-install-netsync.c, src/pilot-install-todos.c, + src/pilot-install-user.c, src/pilot-mail.c, src/pilot-memos.c, + src/pilot-nredir.c, src/pilot-port.c, src/pilot-prc.c, + src/pilot-read-expenses.c, src/pilot-read-ical.c, + src/pilot-read-todos.c, src/pilot-reminders.c, + src/pilot-schlep.c, src/pilot-xfer.c, src/read-expenses.c, + src/read-ical.c, src/read-todos.c, src/reminders.c: More annoying + whitespace cleaning, fixing types, should match Coding Guidelines + now + +2002-01-26 04:53 desrod + + * ChangeLog, CodingGuidelines: First (ugly) draft of Coding + Guidelines for pilot-link. burnout-- + +2002-01-25 15:13 jpr + + * ChangeLog, configure.in: 002-01-25 JP Rosevear + + * configure.in: set use_python to false when appropriate, + same for + perl + +2002-01-25 15:08 jpr + + * ChangeLog, configure.in: 2002-01-25 JP Rosevear + + + * configure.in: set use_python to false when appropriate + +2002-01-25 14:51 jpr + + * ChangeLog, configure.in: 2002-01-25 JP Rosevear + + + * configure.in: dump python check to /dev/null + +2002-01-25 14:35 jpr + + * ChangeLog, include/pi-iambicExpense.hxx: 2002-01-25 JP Rosevear + + + * include/pi-iambicExpense.hxx: use "class" with friend + declaration + +2002-01-25 14:24 jpr + + * ChangeLog, include/Makefile.am: 2002-01-25 JP Rosevear + + + * include/Makefile.am: make valid variables + +2002-01-25 12:25 jpr + + * ChangeLog, include/Makefile.am, include/pi-debug.h, + include/pi-serial.h, libpisock/pi-header.c, libpisock/serial.c, + libpisock/socket.c, libpisock/unixserial.c, libpisock/utils.c: + 2002-01-25 JP Rosevear + + * libsock/utils.c: include config.h + + * libsock/unixserial.c (s_close): only reset the port + when all + users are gone + + * libsock/socket.c (ps_list_append): add assertion + (ps_list_prepend): ditto + (ps_list_copy): copy a list + (ps_list_free): free a list (but not its data members) + (onexit): copy list before iterating over it + + * libsock/serial.c: remove unused proto + (pi_serial_device_dup): copy tco struct, copy ref and + increment it + (pi_serial_close): decrement ref + + * libsock/pi-header.c: include config.h + + * include/pi-serial.h: add ref counter + + * include/pi-debug.h: always spew assert failures + + * include/Makefile.am (c_header_DATA): don't install + pi-version.h.in + +2002-01-25 08:42 desrod + + * libpisock/datebook.c: Fixed minor typo + +2002-01-25 08:40 desrod + + * ChangeLog, libpisock/address.c, libpisock/appinfo.c, + libpisock/datebook.c, libpisock/dlp.c, libpisock/expense.c, + libpisock/hinote.c, libpisock/mail.c, libpisock/memo.c, + libpisock/money.c, libpisock/os2serial.c, libpisock/pi-file.c, + libpisock/socket.c, libpisock/sync.c, libpisock/todo.c, + libpisock/unixserial.c, libpisock/utils.c, libpisync/sync.c: More + type naming reversals, follows pilot-link CodingGUidelines guide + being drafted + +2002-01-25 08:20 desrod + + * ChangeLog, install-expenses.c, install-todos.c, pi-getram.c, + pi-getrom.c, pilot-addresses.c, pilot-file.c, pilot-mail.c, + pilot-prc.c, pilot-schlep.c, pilot-xfer.c, read-expenses.c, + read-ical.c, read-todos.c, reminders.c, src/install-expenses.c, + src/install-todos.c, src/pi-getram.c, src/pi-getrom.c, + src/pilot-addresses.c, src/pilot-file.c, src/pilot-getram.c, + src/pilot-getrom.c, src/pilot-install-expenses.c, + src/pilot-install-todos.c, src/pilot-mail.c, src/pilot-prc.c, + src/pilot-read-expenses.c, src/pilot-read-ical.c, + src/pilot-read-todos.c, src/pilot-reminders.c, + src/pilot-schlep.c, src/pilot-xfer.c, src/read-expenses.c, + src/read-ical.c, src/read-todos.c, src/reminders.c: Type + cleanups. s/idx/i/ # that was stupid of me + +2002-01-24 16:30 jpr + + * ChangeLog, libpisock/debug.c, libpisock/utils.c: 2002-01-24 JP + Rosevear + + * libsock/utils.c (dumpline): use type ALL for logging + + * libsock/debug.c (pi_log): don't bail if the type is all + +2002-01-24 15:23 jpr + + * ChangeLog: Oops. + +2002-01-24 15:17 jpr + + * ChangeLog, pilot-link.m4.in, libpisock/serial.c: 2002-01-24 JP + Rosevear + + * pilot-link.m4.in: fix version configure check + +2002-01-24 14:25 jpr + + * ChangeLog, libpisock/inet.c, libpisock/serial.c, + libpisock/socket.c: 2002-01-24 JP Rosevear + + * libsock/socket.c (protocol_queue_destroy): increment + the index + rather than decrement + (pi_close): check if the device close was strictly less + than 0 + + * libsock/serial.c (pi_serial_protocol_dup): copy the + free member + (pi_serial_protocol_free): free the protocol + (pi_serial_protocol): set the free member + + * libsock/inet.c (pi_inet_protocol_dup): copy the free + member + (pi_inet_protocol_free): free the protocol + (pi_inet_protocol): set the free member + +2002-01-24 04:51 desrod + + * ChangeLog, libpisock/connect.c: Report usable error on any + incorrect port(s) specified, let getenv() fill out the rest + +2002-01-24 04:43 desrod + + * ChangeLog, install-datebook.c, install-expenses.c, + install-hinote.c, install-memo.c, install-netsync.c, money2qif.c, + pi-getram.c, pi-getrom.c, pi-nredir.c, pilot-clip.c, + pilot-dedupe.c, reminders.c, src/install-datebook.c, + src/install-expenses.c, src/install-hinote.c, src/install-memo.c, + src/install-netsync.c, src/money2qif.c, src/pi-getram.c, + src/pi-getrom.c, src/pi-nredir.c, src/pilot-clip.c, + src/pilot-dedupe.c, src/pilot-getram.c, src/pilot-getrom.c, + src/pilot-install-datebook.c, src/pilot-install-expenses.c, + src/pilot-install-hinote.c, src/pilot-install-memo.c, + src/pilot-install-netsync.c, src/pilot-nredir.c, + src/pilot-reminders.c, src/reminders.c: Cleaned up the perror() + printfs, no double-colon, no tabs, libsock/connect.c is still not + quite right + +2002-01-24 04:18 desrod + + * ChangeLog, dlpsh.c, src/dlpsh.c, src/pilot-dlpsh.c: dlpsh.c: More + bugs squashed, getopt_long'ified, added more useful -h options to + each option, fixed a very ugly 'user -u' bug + +2002-01-23 09:19 desrod + + * ChangeLog, libpisock/connect.c: Removed tabs, changed to spaces, + breaks on weird termcaps + +2002-01-23 09:16 desrod + + * ChangeLog, install-netsync.c, src/install-netsync.c, + src/pilot-install-netsync.c: Added the ability to run + install-netsync without host/ip/netmask arguments + +2002-01-23 09:07 desrod + + * ChangeLog, install-user.c, src/install-user.c, + src/pilot-install-user.c: install-user now runs without passing + User and UserID, as before + +2002-01-23 07:35 desrod + + * ChangeLog, TODO, dlpsh.c, install-datebook.c, doc/TODO, + src/dlpsh.c, src/install-datebook.c, src/pilot-dlpsh.c, + src/pilot-install-datebook.c: Fixed install-datebook, added + pilot_connect() code, cleaned up dlpsh printf garbage text. + +2002-01-22 20:13 desrod + + * configure.in: Just explanator text in configure.in, minor. + +2002-01-22 20:09 desrod + + * ChangeLog, configure.in: Squashed a warning about cross-compiling + in AC_TRY_RUN. Needed a third argument to satisfy all conditions. + +2002-01-22 19:23 desrod + + * ChangeLog, bindings/Java/doConstants.c: Missing prototype in + doConstants.c, minor. + +2002-01-22 18:56 desrod + + * ChangeLog, bindings/Java/Jni.c: Fixed two missing includes in + Jni.c + +2002-01-22 17:51 jpr + + * ChangeLog, include/Makefile.am: 2002-01-22 JP Rosevear + + + * include/Makefile.am (c_header_DATA): remove + pi-sockaddr-win32.h + +2002-01-22 14:48 jpr + + * ChangeLog, configure.in, include/pi-config-win32.h, + include/pi-config.h, include/pi-sockaddr-win32.h: 2002-01-22 JP + Rosevear + + * pilot-link.m4: remove header checks + + * configure.in: remove sa length check + +2002-01-22 14:44 jpr + + * ChangeLog, acconfig.h, configure.in, debugsh.c, dlpsh.c, + getrom.c, iambicexample.cc, install-datebook.c, + install-expenses.c, install-hinote.c, install-memo.c, + install-netsync.c, install-user.c, pi-csd.c, pi-getram.c, + pi-getrom.c, pi-nredir.c, pilot-addresses.c, pilot-clip.c, + pilot-debug.c, pilot-dedupe.c, pilot-mail.c, pilot-schlep.c, + pilot-xfer.c, read-ical.c, include/Makefile.am, + include/pi-address.hxx, include/pi-iambicExpense.hxx, + include/pi-sockaddr.h, include/pi-source.h, libpisock/cmp.c, + libpisock/dlp.c, libpisock/inet.c, libpisock/net.c, + libpisock/padp.c, libpisock/serial.c, libpisock/slp.c, + libpisock/socket.c, libpisock/syspkt.c, libpisock/unixserial.c, + libpisock/util.c, libpisock/utils.c, src/debugsh.c, src/dlpsh.c, + src/getrom.c, src/iambicexample.cc, src/install-datebook.c, + src/install-expenses.c, src/install-hinote.c, src/install-memo.c, + src/install-netsync.c, src/install-user.c, src/pi-csd.c, + src/pi-getram.c, src/pi-getrom.c, src/pi-nredir.c, + src/pilot-addresses.c, src/pilot-clip.c, src/pilot-csd.c, + src/pilot-debug.c, src/pilot-debugsh.c, src/pilot-dedupe.c, + src/pilot-dlpsh.c, src/pilot-getram.c, src/pilot-getrom.c, + src/pilot-install-datebook.c, src/pilot-install-expenses.c, + src/pilot-install-hinote.c, src/pilot-install-memo.c, + src/pilot-install-netsync.c, src/pilot-install-user.c, + src/pilot-mail.c, src/pilot-nredir.c, src/pilot-read-ical.c, + src/pilot-schlep.c, src/pilot-xfer.c, src/read-ical.c: 2002-01-22 + JP Rosevear + + * include/pi-config.h: remove unused file + + * include/pi-source.h: no longer include pi-config.h + + * libsock/*.c: fix includes + +2002-01-22 14:04 jpr + + * ChangeLog, libpisock/inet.c: 2002-01-22 JP Rosevear + + + * libsock/inet.c (pi_inet_bind): INADDR_NONE is not + defined on + some platforms + (pi_inet_connect): ditto + +2002-01-22 14:02 jpr + + * ChangeLog, addresses.c, dlpsh.c, hinotes.c, install-hinote.c, + install-netsync.c, install-todos.c, install-user.c, money2qif.c, + pi-csd.c, pi-getram.c, pi-getrom.c, pi-nredir.c, pi-port.c, + pilot-addresses.c, pilot-clip.c, pilot-dedupe.c, pilot-file.c, + pilot-mail.c, pilot-prc.c, pilot-schlep.c, pilot-xfer.c, + read-expenses.c, read-ical.c, read-todos.c, reminders.c, + src/addresses.c, src/dlpsh.c, src/hinotes.c, + src/install-hinote.c, src/install-netsync.c, src/install-todos.c, + src/install-user.c, src/money2qif.c, src/pi-csd.c, + src/pi-getram.c, src/pi-getrom.c, src/pi-nredir.c, src/pi-port.c, + src/pilot-addresses.c, src/pilot-clip.c, src/pilot-csd.c, + src/pilot-dedupe.c, src/pilot-dlpsh.c, src/pilot-file.c, + src/pilot-getram.c, src/pilot-getrom.c, src/pilot-hinotes.c, + src/pilot-install-hinote.c, src/pilot-install-netsync.c, + src/pilot-install-todos.c, src/pilot-install-user.c, + src/pilot-mail.c, src/pilot-nredir.c, src/pilot-port.c, + src/pilot-prc.c, src/pilot-read-expenses.c, + src/pilot-read-ical.c, src/pilot-read-todos.c, + src/pilot-reminders.c, src/pilot-schlep.c, src/pilot-xfer.c, + src/read-expenses.c, src/read-ical.c, src/read-todos.c, + src/reminders.c: 2002-01-22 JP Rosevear + + * addresses.c (main): convert to getopt_long + + * *.c: remove blank default: clauses which screws up some + non-gcc + compilers + +2002-01-18 17:54 desrod + + * Makefile.am: Fixed '.' being out of place + +2002-01-18 17:51 desrod + + * Makefile.am: Put . in Makefile.am + +2002-01-18 17:50 desrod + + * libpisock/inet.c: s/28/8 in editor macro assignment (emacs only) + +2002-01-18 17:49 desrod + + * ChangeLog, debugsh.c, install-netsync.c, pi-getram.c, + libpisock/cmp.c, libpisock/dlp.c, libpisock/inet.c, + libpisock/pi-header.c, libpisock/serial.c, libpisock/slp.c, + libpisock/socket.c, libpisock/syspkt.c, src/debugsh.c, + src/install-netsync.c, src/pi-getram.c, src/pilot-debugsh.c, + src/pilot-getram.c, src/pilot-install-netsync.c: General warning + cleanup in libsock/* and . Makefile.in: Make sure . is built + first, then tools, editor macro placement + +2002-01-18 17:28 jpr + + * ChangeLog, pilot-link.m4.in: 2002-01-18 JP Rosevear + + + * pilot-link.m4.in: committ accidentally erased bit + +2002-01-18 16:56 jpr + + * ChangeLog, configure.in: 2002-01-18 JP Rosevear + + + * configure.in: fix java check + +2002-01-18 16:50 jpr + + * ChangeLog, INSTALL, configure.in, pilot-link.m4, + pilot-link.m4.in: 2002-01-18 JP Rosevear + + * pilot-link.m4.in: add version check + + * configure.in: output pilot-link.m4 + +2002-01-18 16:30 jpr + + * ChangeLog, configure.in, pilot-link.m4: 2002-01-18 JP Rosevear + + + * pilot-link.m4: reduce number of checks + + * configure.in: reorg checks + +2002-01-18 15:11 jpr + + * ChangeLog: [no log message] + +2002-01-18 15:11 jpr + + * pi-nredir.c, src/pi-nredir.c, src/pilot-nredir.c: 2002-01-18 JP + Rosevear + + * pi-nredir.c (main): don't write log info since the + other end + closed the connection + +2002-01-18 12:28 jpr + + * money2qif.c, reminders.c, src/money2qif.c, src/pilot-reminders.c, + src/reminders.c: 002-01-18 JP Rosevear + + * reminders.c (main): convert to getopt_long and tidy + + * money2qif.c (main): ditto + +2002-01-18 11:48 jpr + + * install-netsync.c, pi-csd.c, libpisock/inet.c, + src/install-netsync.c, src/pi-csd.c, src/pilot-csd.c, + src/pilot-install-netsync.c: 2002-01-18 JP Rosevear + + + * install-netsync.c (Help): tidy help message + + * libsock/inet.c (pi_inet_bind): accept net:any as an + address and + allow for port to be specified, ie net:any: 13333 + + * pi-csd.c (main): add getopt_long handling + + * dlpsh.c (main): add getopt_long handling + +2002-01-18 11:05 jpr + + * .cvsignore, ChangeLog, dlpsh.c, src/dlpsh.c, src/pilot-dlpsh.c: + 2002-01-18 JP Rosevear + + * dlpsh.c (main): add getopt_long handling + +2002-01-18 10:56 jpr + + * ChangeLog, pilot-xfer.c, libpisock/inet.c, libpisock/net.c, + src/pilot-xfer.c: 2002-01-18 JP Rosevear + + * pilot-xfer.c: remove dlp_OpenConduit calls because + pilot_connect + does that + + * libsock/net.c (net_tx_handshake): limit receive length + to size + of net packets + + * libsock/inet.c (pi_inet_accept): copy socket before + accepting, + init after + +2002-01-16 21:49 desrod + + * ChangeLog, pi-csd.c, pi-port.c, pilot-addresses.c, pilot-mail.c, + pilot-prc.c, read-expenses.c, read-ical.c, read-todos.c, + reminders.c, src/pi-csd.c, src/pi-port.c, src/pilot-addresses.c, + src/pilot-csd.c, src/pilot-mail.c, src/pilot-port.c, + src/pilot-prc.c, src/pilot-read-expenses.c, + src/pilot-read-ical.c, src/pilot-read-todos.c, + src/pilot-reminders.c, src/read-expenses.c, src/read-ical.c, + src/read-todos.c, src/reminders.c: More function relocation, + nothing to see here, move along... + +2002-01-16 21:40 desrod + + * ChangeLog, addresses.c, debugsh.c, dlpsh.c, hinotes.c, + install-expenses.c, install-hinote.c, install-todos.c, memos.c, + money2qif.c, src/addresses.c, src/debugsh.c, src/dlpsh.c, + src/hinotes.c, src/install-expenses.c, src/install-hinote.c, + src/install-todos.c, src/memos.c, src/money2qif.c, + src/pilot-debugsh.c, src/pilot-dlpsh.c, src/pilot-hinotes.c, + src/pilot-install-expenses.c, src/pilot-install-hinote.c, + src/pilot-install-todos.c, src/pilot-memos.c: Just relocating + some functions, main() to bottom, Help() up one + +2002-01-16 21:27 jpr + + * ChangeLog, install-netsync.c, pi-nredir.c, pilot-xfer.c, + src/install-netsync.c, src/pi-nredir.c, + src/pilot-install-netsync.c, src/pilot-nredir.c, + src/pilot-xfer.c: 2002-01-16 JP Rosevear + + * install-netsync.c: use -H to specify host + + * pi-nredir.c: ditto + + * pilot-xfer.c: switch to getopt_long and tidy + +2002-01-16 21:19 desrod + + * ChangeLog, install-memo.c, install-user.c, memos.c, + src/install-memo.c, src/install-user.c, src/memos.c, + src/pilot-install-memo.c, src/pilot-install-user.c, + src/pilot-memos.c: Minor cleanups, small type typo changed, + preparing for merge + +2002-01-16 21:14 desrod + + * ChangeLog, install-todos.c, src/install-todos.c, + src/pilot-install-todos.c: General formatting changes in + preparation for merging the two into one + +2002-01-16 20:50 desrod + + * ChangeLog, libpisock/pi-file.c: More accidental deletions in vim. + Gar. + +2002-01-16 20:36 desrod + + * ChangeLog, libpisock/pi-file.c: Overzealous deletion buffers, put + the LGPL banner splash back + +2002-01-16 20:32 desrod + + * ChangeLog: Forgot one entry re: libsock/*.c + +2002-01-16 20:29 desrod + + * ChangeLog, TODO, pilot-xfer.c, doc/TODO, libpisock/address.c, + libpisock/appinfo.c, libpisock/cmp.c, libpisock/connect.c, + libpisock/datebook.c, libpisock/dlp.c, libpisock/expense.c, + libpisock/hinote.c, libpisock/inet.c, libpisock/mail.c, + libpisock/md5.c, libpisock/memo.c, libpisock/money.c, + libpisock/net.c, libpisock/os2serial.c, libpisock/padp.c, + libpisock/pi-file.c, libpisock/pi-header.c, libpisock/serial.c, + libpisock/slp.c, libpisock/socket.c, libpisock/sync.c, + libpisock/syspkt.c, libpisock/todo.c, libpisock/unixserial.c, + libpisock/util.c, libpisock/utils.c, libpisock/winserial.c, + libpisync/sync.c, src/pilot-xfer.c: Added a progress option to + pi-file.c, cleaned up libsock/*.c layout, structures, types. + +2002-01-16 13:47 jpr + + * ChangeLog, install-netsync.c, install-user.c, pilot-dedupe.c, + pilot-file.c, src/install-netsync.c, src/install-user.c, + src/pilot-dedupe.c, src/pilot-file.c, + src/pilot-install-netsync.c, src/pilot-install-user.c: 2002-01-16 + JP Rosevear + + * install-user.c (Help): remove bogus info + (main): don't call dlp_OpenConduit + + * install-netsync.c: use -H insted of -o + + * pilot-dedupe.c: convert to getopt_long, tidy + + * pilot-file.c: convert to getopt_long + +2002-01-16 07:24 jpr + + * ChangeLog, bindings/Makefile.am: 2002-01-16 JP Rosevear + + + * tools/Makefile.am: fix cleaning rules + +2002-01-16 07:14 jpr + + * ChangeLog, configure.in, bindings/Java/.cvsignore: 2002-01-16 JP + Rosevear + + * configure.in: check for java stuff in the given path + first + +2002-01-16 07:06 desrod + + * ChangeLog: Misspelling. + +2002-01-16 07:05 desrod + + * configure.in: Just a minor typo. + +2002-01-16 07:04 jpr + + * bindings/Java/: .cvsignore, Makefile.am: Shush + +2002-01-16 06:59 jpr + + * ChangeLog, bindings/Java/.cvsignore, bindings/Java/README, + bindings/Java/doConstants.c, bindings/Java/test.java: 2002-01-16 + JP Rosevear + + * tools/Java/test.java: forgotten files + + * tools/Java/doConstants.c: ditto + + * tools/Java/README: ditto + +2002-01-16 06:56 jpr + + * ChangeLog, Makefile.am, configure.in, install-netsync.c, + install-user.c, pi-getram.c, pi-getrom.c, pilot-clip.c, + pilot-schlep.c, bindings/Makefile.am, bindings/Java/Jni.c, + bindings/Java/Makefile.am, bindings/Java/README, + bindings/Java/doConstants.c, bindings/Java/test.java, + libpisock/connect.c, libpisock/socket.c, libpisock/unixserial.c, + src/install-netsync.c, src/install-user.c, src/pi-getram.c, + src/pi-getrom.c, src/pilot-clip.c, src/pilot-getram.c, + src/pilot-getrom.c, src/pilot-install-netsync.c, + src/pilot-install-user.c, src/pilot-schlep.c, + bindings/Python/setup.py: 2002-01-16 JP Rosevear + + + * tools/Java: Doug G.'s Java stuff + + * tools/Makefile.am: python hack for compilation when + builddir != + srcdir, java enabling + + * configure.in: fix java checks + + * install-netsync.c: install netsync info + + * pilot-schlep.c: do getopt_long and tidy + + * pi-getrom.c: ditto + + * pi-getram.c: ditto + + * pilot-clip.c: ditto + + * install-user.c: ditto, and remove netsync stuff + +2002-01-16 06:14 desrod + + * ChangeLog, addresses.c, configure.in, dlpsh.c, hinotes.c, + install-expenses.c, install-hinote.c, install-todos.c, + install-user.c, memos.c, money2qif.c, pi-csd.c, pi-nredir.c, + pi-port.c, pilot-addresses.c, pilot-clip.c, pilot-schlep.c, + read-expenses.c, read-ical.c, read-todos.c, reminders.c, + src/addresses.c, src/dlpsh.c, src/hinotes.c, + src/install-expenses.c, src/install-hinote.c, + src/install-todos.c, src/install-user.c, src/memos.c, + src/money2qif.c, src/pi-csd.c, src/pi-nredir.c, src/pi-port.c, + src/pilot-addresses.c, src/pilot-clip.c, src/pilot-csd.c, + src/pilot-dlpsh.c, src/pilot-hinotes.c, + src/pilot-install-expenses.c, src/pilot-install-hinote.c, + src/pilot-install-todos.c, src/pilot-install-user.c, + src/pilot-memos.c, src/pilot-nredir.c, src/pilot-port.c, + src/pilot-read-expenses.c, src/pilot-read-ical.c, + src/pilot-read-todos.c, src/pilot-reminders.c, + src/pilot-schlep.c, src/read-expenses.c, src/read-ical.c, + src/read-todos.c, src/reminders.c: Removed the global + dependancy. We should only be using a local getopt.h/getopt.c + pair here for portability reasons. More to come... + +2002-01-14 19:31 jpr + + * ChangeLog, Makefile.os2.in, os2configure.cmd: 2002-01-14 JP + Rosevear + + * Remove no longer needed OS/2 stuff + +2002-01-14 18:53 jpr + + * ChangeLog, debugsh.c, pi-csd.c, pilot-clip.c, + include/Makefile.am, include/pi-source.h, libpisock/dlp.c, + libpisock/net.c, libpisock/padp.c, libpisock/slp.c, + libpisock/utils.c, src/debugsh.c, src/pi-csd.c, src/pilot-clip.c, + src/pilot-csd.c, src/pilot-debugsh.c: 2002-01-14 JP Rosevear + + + * libsock/dlp.c: reflect dumpdata changes + + * libsock/net.c (net_dump): ditto + + * libsock/padp.c (padp_dump): ditto + + * libsock/slp.c (slp_dump): ditto + + * pilot-clip.c (main): ditto + + * pi-csd.c (main): ditto + + * debugsh.c (read_pilot): ditto + + * include/pi-source.h: remove type param from dumpline + and + dumpdata + + * include/Makefile.am: dist new headers + +2002-01-14 18:24 jpr + + * ChangeLog, pi-nredir.c, include/pi-source.h, libpisock/cmp.c, + libpisock/inet.c, libpisock/net.c, libpisock/padp.c, + libpisock/serial.c, libpisock/slp.c, libpisock/socket.c, + src/pi-nredir.c, src/pilot-nredir.c: 2002-01-14 JP Rosevear + + + * pi-nredir.c (main): connect properly with a net: + address now + + * libsock/cmp.c: implement free method + + * libsock/net.c: ditto + + * libsock/padp.c: ditto + + * libsock/serial.c: ditto + + * libsock/inet.c: ditto + + * libsock/slp.c: ditto + + * libsock/socket.c (pi_close): properly free things + (protocol_queue_destroy): free each protocol + + * include/pi-source.h: add free methods to the device and + protocol + +2002-01-13 20:05 desrod + + * ChangeLog: Oops! Forgot to commit the ChangeLog itself. + +2002-01-12 16:33 desrod + + * include/: pi-address.hxx, pi-datebook.hxx, pi-memo.hxx, + pi-todo.hxx: Include/*hxx: Fix a missing 'class' declaration + which causes libcc to fail on gcc 3.x + +2002-01-11 13:54 jpr + + * bindings/Perl/.cvsignore, bindings/Python/.cvsignore, + tests/.cvsignore: Shush + +2002-01-11 13:49 jpr + + * ChangeLog, Makefile.am, acconfig.h, configure.in, debugsh.c, + install-expenses.c, install-memo.c, pi-csd.c, pi-getram.c, + pi-getrom.c, pi-nredir.c, pilot-clip.c, pilot-debug.c, + pilot-dedupe.c, pilot-xfer.c, bindings/Makefile.am, + bindings/Perl/Pilot.xs, include/.cvsignore, include/Makefile.am, + include/pi-cmp.h, include/pi-debug.h, include/pi-inet.h, + include/pi-net.h, include/pi-padp.h, include/pi-serial.h, + include/pi-slp.h, include/pi-socket.h, include/pi-source.h, + libpisock/Makefile.am, libpisock/cmp.c, libpisock/connect.c, + libpisock/debug.c, libpisock/dlp.c, libpisock/inet.c, + libpisock/net.c, libpisock/padp.c, libpisock/pi-file.c, + libpisock/serial.c, libpisock/slp.c, libpisock/socket.c, + libpisock/syspkt.c, libpisock/unixserial.c, libpisock/utils.c, + src/debugsh.c, src/install-expenses.c, src/install-memo.c, + src/pi-csd.c, src/pi-getram.c, src/pi-getrom.c, src/pi-nredir.c, + src/pilot-clip.c, src/pilot-csd.c, src/pilot-debug.c, + src/pilot-debugsh.c, src/pilot-dedupe.c, src/pilot-getram.c, + src/pilot-getrom.c, src/pilot-install-expenses.c, + src/pilot-install-memo.c, src/pilot-nredir.c, src/pilot-xfer.c: + Merging from protocol-rewrite-branch + +2002-01-11 13:26 jpr + + * ChangeLog, configure.in: 2002-01-11 JP Rosevear + + + * configure.in: fix itcl typo + +2002-01-11 11:34 jpr + + * ChangeLog, include/pi-cmp.h, include/pi-debug.h, + include/pi-net.h, include/pi-padp.h, include/pi-serial.h, + include/pi-slp.h, include/pi-socket.h, include/pi-source.h, + libpisock/cmp.c, libpisock/inet.c, libpisock/net.c, + libpisock/padp.c, libpisock/serial.c, libpisock/slp.c, + libpisock/socket.c, libpisock/unixserial.c: 2002-01-11 JP + Rosevear + + * libsock/serial.c: handle buffer + + * libsock/inet.c: match new tx/rx protos and obey peek + flag + + * libsock/unixserial.c: ditto + + * libsock/cmp.c: match new tx/rx protos and pass flags + down the + chain + + * libsock/slp.c: ditto + + * libsock/padp.c: ditto + + * libsock/net.c: ditto + + * include/pi-source.h: update protos, remove padp trace + stuff + + * include/pi-socket.h: add PI_PF_DLP and PI_MSG_PEEK for + autodetection + + * include/pi-cmp.h: update protos + + * include/pi-slp.h: ditto + + * include/pi-serial.h: ditto + + * include/pi-net.h: ditto + + * include/pi-debug.h: include config.h instead of + pi-config.h + +2002-01-10 13:05 jpr + + * include/pi-source.h, libpisock/dlp.c, libpisock/inet.c, + libpisock/net.c, libpisock/padp.c, libpisock/serial.c, + libpisock/socket.c: 2002-01-10 JP Rosevear + + * include/pi-source.h: add state defines + + * libsock/*.c: use them everywhere + +2002-01-10 10:43 jpr + + * ChangeLog, debugsh.c, include/pi-inet.h, include/pi-serial.h, + include/pi-socket.h, libpisock/inet.c, libpisock/serial.c, + libpisock/socket.c, libpisock/unixserial.c, src/debugsh.c, + src/pilot-debugsh.c: 2002-01-10 JP Rosevear + + * libsock/unixserial.c (s_open): use pi_socket_setsd and + don't + keep our own fd around + + * libsock/inet.c (pi_inet_connect): use pi_socket_setsd + and don't + keep our own fd around + (pi_inet_bind): ditto + + * libsock/socket.c (pi_socket_setsd): makes the socket + descriptor + refer to the new descriptor passed in + + * include/pi-socket.h: add proto + + * include/pi-serial.h: remove fd member + + * include/pi-inet.h: remove fd member + +2002-01-10 09:52 jpr + + * ChangeLog, include/Makefile.am, include/pi-source.h, + libpisock/socket.c: 2002-01-10 JP Rosevear + + * libsock/socket.c (protocol_queue_build): add device + protocol + (pi_connect): call above after device is determined + (pi_bind): ditto + + * include/Makefile.am (c_header_DATA): remove + pi-inetserial.h + + * include/pi-source.h: remove unused tickle member + +2002-01-10 05:15 desrod + + * configure.in: Fixed some of the checks, cleaned up the ouput, + something broken in Itcl. + +2002-01-09 16:17 jpr + + * ChangeLog, libpisock/inet.c: 2002-01-09 JP Rosevear + + + * libsock/inet.c (pi_inet_accept): accept to the socket + descriptor + (pi_inet_write): write to the sd + (pi_inet_read): read from the sd + +2002-01-09 12:54 jpr + + * .cvsignore, ChangeLog, pi-getram.c, pi-nredir.c, + include/.cvsignore, include/pi-inet.h, include/pi-inetserial.h, + include/pi-net.h, include/pi-serial.h, include/pi-socket.h, + libpisock/Makefile.am, libpisock/cmp.c, libpisock/inet.c, + libpisock/net.c, libpisock/serial.c, libpisock/slp.c, + libpisock/socket.c, libpisock/unixserial.c, src/pi-getram.c, + src/pi-nredir.c, src/pilot-getram.c, src/pilot-nredir.c: + 2002-01-09 JP Rosevear + + * pi-getram.c: merge from head + + * pi-nredir.c: update for new net code + + * libsock/unixserial.c: improve logging messages + + * libsock/socket.c: build the proctocol queue during + binding or + connecting so we can first determine the device type + + * libsock/slp.c (slp_rx): kill warning + + * libsock/serial.c (pi_serial_device): choose impl based + on type + passed in + (pi_serial_connect): switch over to cmp handshaking + + * libsock/net.c (net_rx): return the correct packet + length + (net_tx_handshake): implement server-client handshake + + * libsock/inet.c: convert to a generic device + + * libsock/cmp.c (cmp_tx_handshake): implement + (cmp_wakeup): properly wakeup + + * libsock/Makefile.am: build inet.c again + + * include/pi-socket.h: rename PI_LEVEL_SOCKET to + PI_LEVEL_DEV + + * include/pi-serial.h: update proto + + * include/pi-net.h: new proto + + * include/pi-inet.h: update to be a device + +2002-01-08 14:39 jpr + + * ChangeLog, include/pi-cmp.h, include/pi-net.h, include/pi-padp.h, + include/pi-serial.h, include/pi-slp.h, include/pi-socket.h, + include/pi-source.h, libpisock/cmp.c, libpisock/net.c, + libpisock/padp.c, libpisock/serial.c, libpisock/slp.c, + libpisock/socket.c: 2002-01-08 JP Rosevear + + * libsock/socket.c: re-org code + (pi_version): get version from cmp or fake it for net + + * libsock/slp.c (slp_rx): make states match palm + documentation and + correct problem with maximal (1024 bytes) padp packets + + * libsock/serial.c (pi_serial_accept): do the handshaking + via the + cmp protocol and the command protocol queue + + * libsock/padp.c (padp_tx): use PI_PADP_MTU + (padp_rx): ditto + + * libsock/net.c (net_rx): fix comment + + * include/pi-socket.h: add cmp options + + * include/pi-slp.h: define PI_SLP_MTU + + * include/pi-serial.h: make the rate a long + + * include/pi-padp.h: define PI_PADP_MTU + + * include/pi-cmp.h: remove old cmp struct and add cmp + data, add + protos and defines + +2002-01-06 20:19 desrod + + * pilot-addresses.c, src/pilot-addresses.c: Temporary fix to allow + this to build without errors. + +2002-01-06 02:55 desrod + + * pilot-addresses.c, src/pilot-addresses.c: Minor fixes to + pilot-addresses, major rework coming, new bugs found. + +2002-01-06 02:05 jpr + + * ChangeLog, dlpsh.c, include/pi-net.h, include/pi-socket.h, + include/pi-source.h, libpisock/debug.c, libpisock/net.c, + libpisock/serial.c, libpisock/socket.c, src/dlpsh.c, + src/pilot-dlpsh.c: 2002-01-06 JP Rosevear + + * libsock/net.c (net_getsockopt): allow type to be set + (net_setsockopt): ditto + (net_tx): use data type for packet + + * libsock/socket.c (pi_serial_onalarm): use log functions + (pi_tickle): send proper tickle commands based on command + type + + * libsock/serial.c: remove tickle stuff + (pi_serial_connect): set socket command field + (pi_serial_accept): ditto + + * libsock/debug.c (pi_log): flush the stream immediately + + * include/pi-source.h: rename init stuff to cmd, chuck + accepted + field + + * include/pi-socket.h: s/PI_INIT/PI_CMD/ and add net + options enum + + * include/pi-net.h: add packet type defines and type + field to data + + * dlpsh.c: merge from main line + +2002-01-05 16:14 jpr + + * ChangeLog, acconfig.h, configure.in, pilot-xfer.c, + include/pi-debug.h, libpisock/net.c, libpisock/pi-file.c, + libpisock/socket.c, src/pilot-xfer.c: 2002-01-05 JP Rosevear + + + * libsock/socket.c: look for API type + + * libsock/pi-file.c (pi_file_append_record): use LOG + + * libsock/net.c (net_rx): make reading a little more sane + + * include/pi-debug.h: add API type + + * configure.in: define DEBUG here when appropriate + + * acconfig.h: add DEBUG + +2002-01-05 13:54 jpr + + * ChangeLog, libpisock/connect.c: 2002-01-05 JP Rosevear + + + * libsock/connect.c (pilot_connect): switch back to _NET + for + testing + +2002-01-05 13:50 jpr + + * ChangeLog, Makefile.am, acconfig.h, autogen.sh, configure.in, + install-expenses.c, pilot-link.m4, bindings/Makefile.am, + bindings/Perl/Makefile.PL.in, bindings/Perl/Pilot.pm, + bindings/Perl/test.pl, bindings/Python/.cvsignore, + bindings/Python/NEWS, bindings/Python/README.txt, + bindings/Python/TODO, bindings/Python/pisock.py, + bindings/Python/setup.py, include/pi-config.h, + include/pi-config.h.in, include/pi-version.h, + include/pi-version.h.in, libpisock/Makefile.am, + src/install-expenses.c, src/pilot-install-expenses.c, + bindings/Python/src/pisock.i, bindings/Python/src/pisock_wrap.c: + 2002-01-05 JP Rosevear + + * Merge from the main line + +2002-01-05 13:31 jpr + + * ChangeLog, configure.in: 2002-01-05 JP Rosevear + + + * configure.in: use AC_PATH_PROGS rather than + AC_PATH_PROG in the + python check + +2002-01-05 13:31 jpr + + * ChangeLog, include/pi-debug.h, libpisock/cmp.c, + libpisock/connect.c, libpisock/serial.c, libpisock/slp.c, + libpisock/unixserial.c: 2002-01-05 JP Rosevear + + * include/pi-debug.h: add CMP type + + * libsock/*.c: use new debugging commands + +2002-01-05 13:07 desrod + + * include/: pi-address.h, pi-appinfo.h, pi-args.h, pi-config.h, + pi-datebook.h, pi-dlp.h, pi-mail.h, pi-md5.h, pi-money.h, + pi-slp.h, pi-sockaddr.h, pi-socket.h, pi-sync.h, pi-syspkt.h, + pi-todo.h, pi-util.h: Fixed a whitespace problem in the headers + that broke connections. Hrmph! + +2002-01-05 12:29 desrod + + * pilot-xfer.c, src/pilot-xfer.c: Found a bug. Squish. 01-02-2002 + version of pilot-xfer.c was bad. Rolled out those changes back to + the 01-01-2002 version, added jpr's 'compare' fix. + +2002-01-05 12:00 jpr + + * ChangeLog, configure.in, bindings/Makefile.am, + bindings/Perl/Makefile.PL.in: 2002-01-05 JP Rosevear + + + * tools/Perl5/Makefile.PL.in: look for library where its + built + + * tools/Makefile.am: roll rules to build perl and python + from here + + * configure.in: simplify python test + +2002-01-04 01:17 jpr + + * .cvsignore, ChangeLog, Makefile.am, addresses.c, configure.in, + dlpsh.c, hinotes.c, install-expenses.c, install-hinote.c, + install-todos.c, install-user.c, memos.c, money2qif.c, pi-csd.c, + pi-nredir.c, pi-port.c, pilot-addresses.c, pilot-clip.c, + pilot-schlep.c, read-expenses.c, read-ical.c, read-todos.c, + reminders.c, src/addresses.c, src/dlpsh.c, src/hinotes.c, + src/install-expenses.c, src/install-hinote.c, + src/install-todos.c, src/install-user.c, src/memos.c, + src/money2qif.c, src/pi-csd.c, src/pi-nredir.c, src/pi-port.c, + src/pilot-addresses.c, src/pilot-clip.c, src/pilot-csd.c, + src/pilot-dlpsh.c, src/pilot-hinotes.c, + src/pilot-install-expenses.c, src/pilot-install-hinote.c, + src/pilot-install-todos.c, src/pilot-install-user.c, + src/pilot-memos.c, src/pilot-nredir.c, src/pilot-port.c, + src/pilot-read-expenses.c, src/pilot-read-ical.c, + src/pilot-read-todos.c, src/pilot-reminders.c, + src/pilot-schlep.c, src/read-expenses.c, src/read-ical.c, + src/read-todos.c, src/reminders.c: 2002-01-04 JP Rosevear + + + * *.c: fix getopt.h includes + + * Makefile.am: add LIBOBJS to LDADD lines + + * configure.in: check for getopt_long availability and + compile in + ours if not available + +2002-01-03 21:22 jpr + + * ChangeLog, configure.in, memos.c, pi-csd.c, pilot-debug.c, + pilot-link.m4, pilot-mail.c, pilot-xfer.c, read-todos.c, + reminders.c, include/pi-config.h, include/pi-syspkt.h, + libpisock/pi-file.c, src/memos.c, src/pi-csd.c, src/pilot-csd.c, + src/pilot-debug.c, src/pilot-mail.c, src/pilot-memos.c, + src/pilot-read-todos.c, src/pilot-reminders.c, src/pilot-xfer.c, + src/read-todos.c, src/reminders.c: 2002-01-03 JP Rosevear + + + * configure.in: put termios cspeed check in a private + section + + * pilot-link.m4: remove termios cspeed check + + * pilot-debug.c: mark many functions static + + * pilot-xfer.c (compare): make static + + * reminders.c: end file with new line + + * memos.c: ditto + + * pi-csd.c: ditto + + * pilot-mail.c: ditto + + * read-todos.c: ditto + + * libsock/pi-file.c: include time.h headers properly + + * include/pi-config.h: remove time.h related includes + + * include/pi-syspkt.h: add prototypes for publicly + exposed symbols + +2002-01-03 02:49 desrod + + * ChangeLog, include/pi-address.h, include/pi-appinfo.h, + include/pi-args.h, include/pi-datebook.h, include/pi-dlp.h, + include/pi-mail.h, include/pi-md5.h, include/pi-money.h, + include/pi-slp.h, include/pi-sockaddr-win32.h, + include/pi-sockaddr.h, include/pi-socket.h, include/pi-sync.h, + include/pi-syspkt.h, include/pi-todo.h, include/pi-util.h: More + whitespace/formatting changes. Fixed inconsistant commenting in + libcc/* and added the new Python libpisock bindings to + tools/Python (thanks Rob!) + +2002-01-02 18:51 desrod + + * bindings/Python/: .cvsignore, NEWS, README.txt, TODO, pisock.py, + setup.py, src/pisock.i, src/pisock_wrap.c: Updated the Python + bindings to build against current libpisock and current versions + of Python. Thanks to Rob Tillotson for the help. + +2002-01-02 00:55 desrod + + * ChangeLog, configure.in: Fixed the version in configure.in to + match 0.10.1-cvs, not 0.10.1cvs + +2002-01-02 00:53 desrod + + * ChangeLog, install-expenses.c, pi-getram.c, pi-getrom.c, + pi-port.c, pilot-addresses.c, pilot-clip.c, pilot-debug.c, + pilot-dedupe.c, pilot-file.c, pilot-mail.c, pilot-prc.c, + pilot-schlep.c, pilot-xfer.c, read-expenses.c, read-ical.c, + read-todos.c, reminders.c, src/install-expenses.c, + src/pi-getram.c, src/pi-getrom.c, src/pi-port.c, + src/pilot-addresses.c, src/pilot-clip.c, src/pilot-debug.c, + src/pilot-dedupe.c, src/pilot-file.c, src/pilot-getram.c, + src/pilot-getrom.c, src/pilot-install-expenses.c, + src/pilot-mail.c, src/pilot-port.c, src/pilot-prc.c, + src/pilot-read-expenses.c, src/pilot-read-ical.c, + src/pilot-read-todos.c, src/pilot-reminders.c, + src/pilot-schlep.c, src/pilot-xfer.c, src/read-expenses.c, + src/read-ical.c, src/read-todos.c, src/reminders.c: More code + cleanups, function relocation, pilot_connect(). + +2001-12-31 11:20 desrod + + * ChangeLog, Makefile.am, addresses.c, debugsh.c, hinotes.c, + install-datebook.c, install-hinote.c, install-memo.c, + install-todos.c, memos.c, money2qif.c, pi-csd.c, pi-getram.c, + pi-getrom.c, pi-nredir.c, pi-port.c, pilot-addresses.c, + pilot-clip.c, pilot-debug.c, pilot-dedupe.c, pilot-mail.c, + pilot-schlep.c, read-expenses.c, read-ical.c, read-todos.c, + reminders.c, src/addresses.c, src/debugsh.c, src/hinotes.c, + src/install-datebook.c, src/install-hinote.c, src/install-memo.c, + src/install-todos.c, src/memos.c, src/money2qif.c, src/pi-csd.c, + src/pi-getram.c, src/pi-getrom.c, src/pi-nredir.c, src/pi-port.c, + src/pilot-addresses.c, src/pilot-clip.c, src/pilot-csd.c, + src/pilot-debug.c, src/pilot-debugsh.c, src/pilot-dedupe.c, + src/pilot-getram.c, src/pilot-getrom.c, src/pilot-hinotes.c, + src/pilot-install-datebook.c, src/pilot-install-hinote.c, + src/pilot-install-memo.c, src/pilot-install-todos.c, + src/pilot-mail.c, src/pilot-memos.c, src/pilot-nredir.c, + src/pilot-port.c, src/pilot-read-expenses.c, + src/pilot-read-ical.c, src/pilot-read-todos.c, + src/pilot-reminders.c, src/pilot-schlep.c, src/read-expenses.c, + src/read-ical.c, src/read-todos.c, src/reminders.c: Updated the + conduits so they will at least build. Most of this is getting + tossed anyway when we merge with HEAD. Commented out dumpdata() + calls for now, they aren't working. + +2001-12-30 15:25 desrod + + * ChangeLog, Makefile.am, TODO, addresses.c, debugsh.c, dlpsh.c, + getopt.c, getopt1.c, getrom.c, hinotes.c, install-datebook.c, + install-expenses.c, install-hinote.c, install-memo.c, memos.c, + money2qif.c, parsedate.c, pd-tty.c, pi-csd.c, pi-nredir.c, + pi-port.c, pilot-addresses.c, pilot-mail.c, pilot-prc.c, + pilot-schlep.c, pilot-xfer.c, read-expenses.c, read-ical.c, + read-todos.c, reminders.c, doc/TODO, include/pi-address.h, + include/pi-appinfo.h, include/pi-cmp.h, include/pi-config.h, + include/pi-datebook.h, include/pi-dlp.h, include/pi-expense.h, + include/pi-file.h, src/addresses.c, src/debugsh.c, src/dlpsh.c, + src/getopt.c, src/getopt1.c, src/getrom.c, src/hinotes.c, + src/install-datebook.c, src/install-expenses.c, + src/install-hinote.c, src/install-memo.c, src/memos.c, + src/money2qif.c, src/parsedate.c, src/pd-tty.c, src/pi-csd.c, + src/pi-nredir.c, src/pi-port.c, src/pilot-addresses.c, + src/pilot-csd.c, src/pilot-debugsh.c, src/pilot-dlpsh.c, + src/pilot-hinotes.c, src/pilot-install-datebook.c, + src/pilot-install-expenses.c, src/pilot-install-hinote.c, + src/pilot-install-memo.c, src/pilot-mail.c, src/pilot-memos.c, + src/pilot-nredir.c, src/pilot-port.c, src/pilot-prc.c, + src/pilot-read-expenses.c, src/pilot-read-ical.c, + src/pilot-read-todos.c, src/pilot-reminders.c, + src/pilot-schlep.c, src/pilot-xfer.c, src/read-expenses.c, + src/read-ical.c, src/read-todos.c, src/reminders.c, + bindings/Perl/Makefile.PL.in, bindings/Perl/Pilot.pm, + bindings/Perl/test.pl, include/pi-hinote.h, + include/pi-iambicExpense.h, include/pi-inet.h, + include/pi-inetserial.h, include/pi-mail.h, include/pi-md5.h, + include/pi-memo.h, include/pi-money.h, include/pi-padp.h, + include/pi-serial.h, include/pi-slp.h, + include/pi-sockaddr-win32.h, include/pi-sockaddr.h, + include/pi-socket.h, include/pi-source.h, include/pi-sync.h, + include/pi-syspkt.h, include/pi-todo.h, libpisock/address.c, + libpisock/appinfo.c, libpisock/cmp.c, libpisock/pi-header.c, + libpisock/serial.c, libpisock/util.c, libpisock/utils.c, + libpisock/winserial.c: Lots of changes, winding up for the 0.10.1 + release. Code relocation, reformatting changes from GNU to + Berkeley, added install-expenses.c, etc. HUGE commit. + +2001-12-29 18:44 jpr + + * ChangeLog, libpisock/Makefile.am: 2001-12-29 JP Rosevear + + + * libsock/Makefile.am: Include iconv cflags and libs + where + appropriate + +2001-12-29 17:54 jpr + + * ChangeLog, libpisock/dlp.c, libpisock/pi-header.c, + libpisock/socket.c, libpisock/winserial.c: 2001-12-29 JP + Rosevear + + * libsock/pi-header.c (PalmHeader): remove unused var + + * libsock/winserial.c (win_changebaud): remove non ansii + comments + + * libsock/dlp.c (dlp_strerror): ditto + + * libsock/socket.c (alarm): ditto + +2001-12-29 17:27 jpr + + * ChangeLog, include/.cvsignore, include/pi-version.h.in: + 2001-12-29 JP Rosevear + + * include/pi-version.h.in: add new line to end of file + +2001-12-29 14:39 jpr + + * ChangeLog, configure.in, include/Makefile.am, + include/pi-version.h, include/pi-version.h.in, + libpisock/Makefile.am: 2001-12-29 JP Rosevear + + * configure.in: vars for the module and library versions, + subst + the version stuff into the version header + + * libsock/Makefile.am: use vars for the library + versioning + + * include/pi-version.h.in: subst in the version info + + * include/Makefile.am (c_header_DATA): include + pi-version.h.in + +2001-12-24 09:22 desrod + + * libpisock/padp.c: Testing fix as found in the Debian archives + http://bugs.debian.org/120459 + +2001-12-23 18:20 desrod + + * include/pi-version.h: Just changed the version to match HEAD, + with tag. 0.10.1-prb + +2001-12-23 09:00 desrod + + * ChangeLog, dlpsh.c, install-user.c, libpisock/connect.c, + src/dlpsh.c, src/install-user.c, src/pilot-dlpsh.c, + src/pilot-install-user.c: Sometimes we go too far in one + direction, and realize... DOH! Reverted. + +2001-12-23 06:04 desrod + + * dlpsh.c, install-user.c, src/dlpsh.c, src/install-user.c, + src/pilot-dlpsh.c, src/pilot-install-user.c, ChangeLog, getopt.h, + include/pi-dlp.h, libpisock/connect.c, src/getopt.h: Filling + &User, &Sys, &Net pointers in libsock/connect.c now, cleaner. + Updated getopt.h to the latest portable version. + +2001-12-19 09:16 desrod + + * ChangeLog, money2qif.c, pi-nredir.c, read-ical.c, + src/money2qif.c, src/pi-nredir.c, src/pilot-nredir.c, + src/pilot-read-ical.c, src/read-ical.c: A few bugs from the last + commit fixed. Bleh. + +2001-12-19 07:45 desrod + + * ChangeLog, dlpsh.c, src/dlpsh.c, src/pilot-dlpsh.c: Fixed a minor + segfault problem in user_fn related to strncpy() with *optarg. + +2001-12-19 06:45 desrod + + * ChangeLog, money2qif.c, pi-nredir.c, pi-port.c, pilot-schlep.c, + read-ical.c, read-todos.c, reminders.c, src/money2qif.c, + src/pi-nredir.c, src/pi-port.c, src/pilot-nredir.c, + src/pilot-port.c, src/pilot-read-ical.c, src/pilot-read-todos.c, + src/pilot-reminders.c, src/pilot-schlep.c, src/read-ical.c, + src/read-todos.c, src/reminders.c: Lots of movement in the code. + 'Berkeley' style indenting implemented, changed the names of some + types to be more 'human', as this codebase grows some more + "hair", it should be easier, not harder to maintain!! + +2001-12-18 19:02 desrod + + * read-ical.c, src/pilot-read-ical.c, src/read-ical.c: Removed some + debug prints to identify an 'ical' problem. + +2001-12-18 19:01 desrod + + * ChangeLog, read-ical.c, src/pilot-read-ical.c, src/read-ical.c: + Reversed some changes from a 12/12 commit, need to clean up + main() and pare it down a bit.. too large. + +2001-12-15 07:50 desrod + + * libpisock/connect.c: Just fixing a mistake from November 19th re: + testing the return of sd. + +2001-12-12 04:07 desrod + + * ChangeLog, addresses.c, dlpsh.c, hinotes.c, install-todos.c, + install-user.c, pi-port.c, pilot-schlep.c, read-ical.c, + read-todos.c, reminders.c, src/addresses.c, src/dlpsh.c, + src/hinotes.c, src/install-todos.c, src/install-user.c, + src/pi-port.c, src/pilot-dlpsh.c, src/pilot-hinotes.c, + src/pilot-install-todos.c, src/pilot-install-user.c, + src/pilot-port.c, src/pilot-read-ical.c, src/pilot-read-todos.c, + src/pilot-reminders.c, src/pilot-schlep.c, src/read-ical.c, + src/read-todos.c, src/reminders.c: Winding down to the final + 0.10.1 release, more cleanups, relocation of code. + +2001-12-11 06:10 desrod + + * pilot-schlep.c, src/pilot-schlep.c: Oh yeah, comments, I forgot + to add those silly things. + +2001-12-11 06:05 desrod + + * ChangeLog, install-todos.c, pilot-schlep.c, src/install-todos.c, + src/pilot-install-todos.c, src/pilot-schlep.c: Updates for + getopt(), main() fixes, pilot_connect(), and general vacuuming. + Still needs some more "polish" in areas, read-todos/install-todos + are not yet siblings, pilot-schlep needs to stop using + redirection. + +2001-12-10 23:24 desrod + + * libpisock/connect.c: Stupid move on my part, s/printf/fprintf/, + can't have the strings dumping into redirected files, now can we? + Let's us do ./foo > bar.txt without much breakage + +2001-12-08 21:00 desrod + + * ChangeLog, install-user.c, src/install-user.c, + src/pilot-install-user.c: install-user: More of the same. Cleaned + up the $PILOTPORT parsing goop, moved things around, and made the + -h and lack of any options make logical sense. Changed some of + the options around a bit too, -n for netmask, -o for hostname + (can't recycle -h on that one) + +2001-12-08 18:51 jpr + + * ChangeLog, autogen.sh, configure.in: 2001-12-08 JP Rosevear + + + * autogen.sh: remove some useless aclocal checks + + * configure.in: put the pilot link checks in directly + +2001-12-08 01:34 desrod + + * ChangeLog, addresses.c, src/addresses.c: Updated addresses.c for + new pilot_connect() style, added Help(), cleaned up arguments, + and added an additional output "style" for the records with a -f. + +2001-12-06 15:30 desrod + + * configure.in: Rolled back to 1.38, the later changes that were + made to parse out the perl 5.x version would have only worked on + 5.6.x and later, not previous 5.x versions. Need to clean this up + later on, not important now, but will be.. + +2001-12-06 15:11 desrod + + * ChangeLog, configure.in: Silly me, typing too fast when I save + the file. + +2001-12-06 15:10 desrod + + * ChangeLog, configure.in: Updated configure.in to report the + canonical version number instead of the internal working version + number for perl 5.x versions (5.006001 vs. 5.6.1) + +2001-12-06 14:27 jpr + + * ChangeLog, configure.in: 2001-12-06 JP Rosevear + + + * configure.in (msg_perl): fix perl check to allow for + all 5.x + versions + +2001-12-06 14:19 desrod + + * include/pi-version.h, libpisock/connect.c, libpisock/padp.c: + Clarified the verbage for the 'Weird packet' errors, changed + connect.c to return the right sd, and incremented the version in + pi-version.h + +2001-12-06 12:44 desrod + + * ChangeLog, dlpsh.c, src/dlpsh.c, src/pilot-dlpsh.c: Fixed a cvs + merge problem, hand-merged changes in. Major dlpsh reworking, + moved things around, cleaned up some minor things s/U./User./ and + fixed a small error in the config.h include statement. + +2001-12-06 02:59 jpr + + * ChangeLog, dlpsh.c, getrom.c, pilot-xfer.c, include/pi-debug.h, + include/pi-net.h, include/pi-padp.h, include/pi-slp.h, + include/pi-source.h, libpisock/Makefile.am, libpisock/debug.c, + libpisock/dlp.c, libpisock/net.c, libpisock/padp.c, + libpisock/slp.c, libpisock/socket.c, libpisock/utils.c, + src/dlpsh.c, src/getrom.c, src/pilot-dlpsh.c, src/pilot-xfer.c: + 2001-12-06 JP Rosevear + + * libsock/utils.c (dumpline): take debug type + (dumpdata): ditto + + * libsock/net.c: convert to new logging functions + + * libsock/padp.c: ditto + + * libsock/slp.c: ditto + + * libsock/dlp.c: start converting over to new logging + functions + + * libsock/Makefile.am (INCLUDES): compile new files + + * include/pi-source.h: no longer need the serial trace + info, + modify protos + + * include/pi-slp.h: new protos + + * include/pi-padp.h: new protos, tidy + + * include/pi-net.h: new protos + + * libsock/socket.c: let env vars set the debugging types, + level + and log files + + * libsock/debug.c (pi_debug_get_types): get the debugging + type + flags + (pi_debug_set_types): set same + (pi_debug_get_level): get debug level + (pi_debug_set_level): set same + (pi_debug_set_file): set the file to write debug output + to + (pi_log): log debugging info + + * include/pi-debug.h: debugging functionality + +2001-12-05 04:25 jpr + + * ChangeLog, configure.in: 2001-12-05 JP Rosevear + + + * configure.in: check for a few more readline functions + +2001-12-05 04:21 jpr + + * ChangeLog, Makefile.am, acconfig.h, configure.in, dlpsh.c, + pd-tty.c, src/dlpsh.c, src/pd-tty.c, src/pilot-dlpsh.c: + 2001-12-05 JP Rosevear + + * pd-tty.c: use new defines for compiling read line + support + + * dlpsh.c: ditto + + * configure.in: improved readline checking, no just + checks for + appropriate functions, basic ones and extra ones + + * acconfig.h: new defines + + * Makefile.am: conditionally compile tcl/tk dependant + apps, + include readline cflags and libs + +2001-12-02 10:57 desrod + + * libpisock/: serial.c, socket.c: + Better comments on serial.c's pi_socket_tickle() struct, and + monkeyed around with the ps.mac stuff in socket.c, we need that + working. + +2001-12-01 14:10 desrod + + * libpisock/: connect.c, net.c, serial.c: + Updated test.c a bit to handle the new connect() stuff, fixed + SysInfo. + +2001-12-01 12:06 jpr + + * ChangeLog, include/pi-cmp.h, include/pi-net.h, + include/pi-socket.h, include/pi-source.h, libpisock/Makefile.am, + libpisock/cmp.c, libpisock/net.c, libpisock/serial.c, + libpisock/socket.c: 2001-12-01 JP Rosevear + + * libsock/test.c (main): default to using PI_PF_NET + protocol + + * libsock/socket.c (pi_socket): set up a separate + initialization + protocol + + * libsock/serial.c (pi_serial_accept): use various types + of + handshaking depending on the init value is set to + + * libsock/cmp.c (cmp_dump): additional info + + * libsock/Makefile.am: compile new file + + * libsock/net.c: Move the net sync type protocol in to + its own + file and make it a pi protocol + +2001-11-29 13:38 jpr + + * ChangeLog, include/pi-padp.h, include/pi-serial.h, + include/pi-slp.h, include/pi-socket.h, include/pi-source.h, + libpisock/Makefile.am, libpisock/cmp.c, libpisock/connect.c, + libpisock/dlp.c, libpisock/padp.c, libpisock/serial.c, + libpisock/slp.c, libpisock/socket.c, libpisock/syspkt.c, + libpisock/unixserial.c: 2001-11-29 JP Rosevear + + * First cut of the new protocol queue rewrite + +2001-11-23 11:39 jpr + + * .cvsignore, ChangeLog, autogen.sh, include/.cvsignore: 2001-11-23 + JP Rosevear + + * autogen.sh: handle ACLOCAL_FLAGS properly + +2001-11-23 11:28 jpr + + * ChangeLog, Makefile.am, autogen.sh, configure.in, pilot-link.m4, + include/pi-config.h, include/pi-config.h.in, + include/pi-sockaddr-win32.h, include/pi-sockaddr.h, + include/pi-sockaddr.h.in: 2001-11-23 JP Rosevear + + + * include/pi-sockaddr-win32.h: ditto + + * include/pi-sockaddr.h: ditto + + * include/pi-config.h: conditionally include config.h + + * autogen.sh: include the local dir in the aclocal flags + + * Makefile.am: install the pilot-link.m4 file + + * pilot-link.m4: give an AC_PILOT_LINK function to do all + the + checks for the pi-config and pi-sockaddr headers + + * configure.in: use AC_PILOT_LINK macro instead of all + the + individual checks + +2001-11-19 12:58 jpr + + * ChangeLog, aclocal.m4, configure.in, include/pi-sockaddr.h.in, + include/pi-util.h, libpisock/address.c, libpisock/appinfo.c, + libpisock/datebook.c, libpisock/expense.c, libpisock/hinote.c, + libpisock/mail.c, libpisock/memo.c, libpisock/money.c, + libpisock/todo.c, tests/Makefile.in: 2001-11-19 JP Rosevear + + + * aclocal.m4: remove autogenerated file + + * tests/Makefile.in: ditto + + * libsock/*.c: clean up includes, remove uneccessary + pi-source.h + includes + + * include/pi-util.h: remove pi-config.h include + + * include/pi-sockaddr.h.in: sub in SA_LEN_FIELD + + * configure.in: remove next hack because libtool should + handle it, + add back maximum compiler warnings when possible, + ac_output + pi-sockaddr.h + +2001-11-19 07:13 desrod + + * ChangeLog, pilot-xfer.c, libpisock/connect.c, src/pilot-xfer.c: + Minor fixes before I hit the airport. Hit it with the virtual + Kirby this time! + +2001-11-19 06:51 desrod + + * ChangeLog, aclocal.m4, dlpsh.c, install-user.c, parsedate.c, + pilot-xfer.c, src/dlpsh.c, src/install-user.c, src/parsedate.c, + src/pilot-dlpsh.c, src/pilot-install-user.c, src/pilot-xfer.c, + include/pi-version.h, libpisock/connect.c, libpisock/pi-header.c, + tests/Makefile.in: + A bunch of updates on this one, mostly in the userspace stuff, + getopt, decremented pi-version, added a timer, moved around some + things, gutted a bunch of things out. Fun fun fun! + +2001-11-17 13:18 jpr + + * ChangeLog, bindings/Makefile.am: 2001-11-17 JP Rosevear + + + * tools/Makefile.am (EXTRA_DIST): add the language + binding dirs + +2001-11-17 02:01 jpr + + * ChangeLog, include/i18n.h, include/pi-source.h: 2001-11-17 JP + Rosevear + + * include/pi-source.h: remove i18n.h inclusion + + * include/i18n.h: kill + +2001-11-17 01:43 jpr + + * .cvsignore, ChangeLog, acconfig.h: 2001-11-17 JP Rosevear + + + * acconfig.h: re-add file + +2001-11-17 01:34 jpr + + * ChangeLog, configure.in: 2001-11-17 JP Rosevear + + + * configure.in: Make version same as before + +2001-11-17 01:28 jpr + + * ChangeLog, Makefile.am, Makefile.in, configure, + bindings/Makefile.am, libpisock/Makefile.am: 2001-11-17 JP + Rosevear + + * Remove dead files + + * Makefile.am: build install-user again + + * tools/Makefile.am (SUBDIRS): don't build any subdirs + right now + + * libsock/Makefile.am: make sure connect.c is a source + +2001-11-17 01:02 jpr + + * .cvsignore, AUTHORS, ChangeLog, Makefile.am, Makefile.in, NEWS, + aclocal.m4, autogen.sh, configure, configure.in, + bindings/.cvsignore, bindings/Makefile.am, doc/man/.cvsignore, + doc/man/Makefile.am, include/.cvsignore, include/Makefile.am, + libpisock/.cvsignore, libpisock/Makefile.am, libpisock/sync.c, + libpisync/sync.c, tests/.cvsignore, tests/Makefile.am, + tests/Makefile.in: 2001-11-17 JP Rosevear + + * Convert to automake + +2001-11-06 01:53 desrod + + * ChangeLog, Makefile.in, dlpsh.c, install-user.c, memos.c, + pilot-file.c, src/dlpsh.c, src/install-user.c, src/memos.c, + src/pilot-dlpsh.c, src/pilot-file.c, src/pilot-install-user.c, + src/pilot-memos.c: Lots of changes here, mainly to install-user.c + as a testing platform for the new argument stuff going in, added + NetLanSync writes, still playing around with program flow. Not + satisfied yet with it. + +2001-11-05 19:13 desrod + + * ChangeLog, Makefile.in, install-user.c, pilot-xfer.c, + libpisock/connect.c, libpisock/dlp.c, libpisock/padp.c, + libpisock/pi-file.c, src/install-user.c, + src/pilot-install-user.c, src/pilot-xfer.c: Beginning the public + migration to getopt_long() in all of the binaries which are + passed arguments. Also cleaning out the redundant code, moving + into external objects. + +2001-11-03 20:12 desrod + + * ChangeLog, Makefile.os2, pi-getrom.c, pilot-xfer.c, + src/pi-getrom.c, src/pilot-getrom.c, src/pilot-xfer.c: + Makefile.os2 should not be in the cvs as a real file. It is + created dynamically. Blecch. + +2001-10-31 13:12 desrod + + * ChangeLog, Makefile.os2, pi-getram.c, pi-getrom.c, + src/pi-getram.c, src/pi-getrom.c, src/pilot-getram.c, + src/pilot-getrom.c: + Updated pi-getr?m.c to handle newer ROM images (Kyocera, etc.) + and added a percentage counter of completion for each output + file. Also changed the file names output and added bugfixVersion + to pi-getram.c. Lots of small fixes here. + +2001-10-26 10:52 jpr + + * ChangeLog, libpisock/sync.c, libpisock/util.c, libpisync/sync.c: + 2001-10-26 JP Rosevear + + * libsock/util.c (convert_ToPilotChar): plug leak + (convert_FromPilotChar): ditto + + * libsock/sync.c (sync_MergeToPilot_fast): free all of + the pilot + record + (sync_MergeToPilot_slow): ditto + +2001-10-17 18:33 jpr + + * ChangeLog, Makefile.os2, libpisock/sync.c, libpisync/sync.c: + 2001-10-17 JP Rosevear + + * libsock/sync.c (sync_record): If the record was created + and + deleted between syncs (without being archived) ignore it + +2001-10-03 03:07 desrod + + * ChangeLog: Updated missed ChangeLog entry from 09-24 + +2001-09-24 16:50 desrod + + * pilot-addresses.c, src/pilot-addresses.c: + Several people have reported this, it's fixed now. The + original + offending line was still in the code, commented out, but made + it's way into production. Small fixes coming in the coming weeks. + +2001-07-21 17:38 desrod + + * ChangeLog, Makefile.os2.in, TODO, addresses.c, debugsh.c, + dlpsh.c, hinotes.c, install-datebook.c, install-memo.c, + install-todos.c, install-user.c, memos.c, money2qif.c, pi-csd.c, + pi-nredir.c, pilot-addresses.c, pilot-dedupe.c, pilot-file.c, + doc/TODO, src/addresses.c, src/debugsh.c, src/dlpsh.c, + src/hinotes.c, src/install-datebook.c, src/install-memo.c, + src/install-todos.c, src/install-user.c, src/memos.c, + src/money2qif.c, src/pi-csd.c, src/pi-nredir.c, + src/pilot-addresses.c, src/pilot-csd.c, src/pilot-debugsh.c, + src/pilot-dedupe.c, src/pilot-dlpsh.c, src/pilot-file.c, + src/pilot-hinotes.c, src/pilot-install-datebook.c, + src/pilot-install-memo.c, src/pilot-install-todos.c, + src/pilot-install-user.c, src/pilot-memos.c, src/pilot-nredir.c, + pilot-prc.c, pilot-schlep.c, pilot-xfer.c, read-expenses.c, + read-todos.c, reminders.c, libpisock/dlp.c, + libpisock/winserial.c, src/pilot-prc.c, + src/pilot-read-expenses.c, src/pilot-read-todos.c, + src/pilot-reminders.c, src/pilot-schlep.c, src/pilot-xfer.c, + src/read-expenses.c, src/read-todos.c, src/reminders.c: Two + new patches from Bill Janssen and Oliver Schmidt added. Also + cleaned up the declarations, vacuumed up some of the other dust. + Added a missing Makefile.os2.in, incremented patch version. + +2001-07-21 13:08 desrod + + * include/pi-version.h: + Changed the patch tag to denote that this is a CVS + version. + There are people running around with 0.9.6 calling it + released. + +2001-07-12 18:25 desrod + + * ChangeLog, include/i18n.h: + Oops, forgot include/i18n.h. Fixed. + +2001-07-12 16:02 desrod + + * .cvsignore, ChangeLog, Makefile.in, TODO, doc/TODO, aclocal.m4, + autogen.sh, configure, configure.in, dlpsh.c, memos.c, + parsedate.c, parsedate.y, src/dlpsh.c, src/memos.c, + src/parsedate.c, src/parsedate.y, src/pilot-dlpsh.c, + src/pilot-memos.c, pilot-debug.c, pilot-xfer.c, + src/pilot-debug.c, src/pilot-xfer.c, include/.cvsignore, + include/pi-config.h.in, include/pi-sockaddr.h.in, + include/pi-source.h, include/pi-version.h, libpisock/.cvsignore, + bindings/Perl/Pilot.xs: + Lots of post 0.9.5 fixes, moving towards 0.9.6 + cleanliness. Added + readline() support, removed unreachable pilot-xfer + options, changed + the format of TODO, fixed some Perl5 layout bugs, lots + more. Check + the ChangeLog for the latest changes. + +2001-06-19 01:50 desrod + + * ChangeLog, Makefile.in, libpisock/padp.c, libpisock/syspkt.c: + Two fixes from Carl Jacobsen, and a few from me. RELEASE + TIME!!! + +2001-06-13 15:58 jpr + + * .cvsignore, bindings/.cvsignore: Shush + +2001-06-06 16:00 jpr + + * ChangeLog, libpisock/unixserial.c: 2001-06-06 Peter Williams + + + * libsock/unixserial.c (s_write): Only free() skb after + we access + skb->len, not before it. + +2001-06-06 04:19 desrod + + * ChangeLog: Updated ChangeLog to reflect recent GPL vs. LGPL + reverts + +2001-06-06 04:16 desrod + + * COPYING.LIB, parsedate.c, src/parsedate.c, include/pi-dlp.h, + include/pi-sync.h, include/pi-util.h, libpisock/address.c, + libpisock/appinfo.c, libpisock/cmp.c, libpisock/datebook.c, + libpisock/dlp.c, libpisock/expense.c, libpisock/hinote.c, + libpisock/inet.c, libpisock/mail.c, libpisock/memo.c, + libpisock/money.c, libpisock/os2serial.c, libpisock/padp.c, + libpisock/pi-file.c, libpisock/pi-header.c, libpisock/serial.c, + libpisock/slp.c, bindings/Java/doConstants.c, libpisock/socket.c, + libpisock/sync.c, libpisock/syspkt.c, libpisock/todo.c, + libpisock/unixserial.c, libpisock/util.c, libpisock/utils.c, + libpisock/winserial.c, libpisync/sync.c, + bindings/Perl/Makefile.PL.in, bindings/Perl/Pilot.pm, + bindings/Perl/Pilot.xs: "Move along, nothing to see + here..." + + Seriously, I made a late-night error back in October of + 2000 + when I was adding the GPL/LGPL headers to a bunch of files in the + source, and ended up adding the wrong headers to several. I + reverted them back and put the proper LGPL headers in where the + libpisock bindings were used and required (in ./libsock and + Java/Perl5 directories). Sorry about that, it's all better now. + + Note: The license for the pisock library, the C++ libary, + and + the Perl, Python, Tcl, and Java bindings have been + covered under the LGPL since August 23, 1998. + +2001-05-28 18:02 desrod + + * ChangeLog, bindings/Perl/Pilot.xs: Fixed the problems in + line-continuation in Pilot.xs, tabbing oddness + +2001-05-28 07:12 desrod + + * TODO, doc/TODO: Uhm, I forgot what I changed. Updated the + TODO. + +2001-05-25 21:49 desrod + + * ChangeLog, Makefile.in, dlpsh.c, parsedate.c, src/dlpsh.c, + src/parsedate.c, src/pilot-dlpsh.c, parsedate.y, reminders.c, + src/parsedate.y, src/pilot-reminders.c, src/reminders.c, + libpisock/appinfo.c: reminders.c ANSI C cleanup, dlpsh + fixes and additions. Minor. + +2001-05-25 05:22 desrod + + * ChangeLog, include/md5.h, include/pi-md5.h, bindings/README, + bindings/Perl/README, bindings/Perl/dump.pl, libpisock/md5.c: + * include/md5.h: Renamed md5.h to pi-md5.h to be more in line + with + the current include/* naming scheme. + + * tools/Perl5/README: cleaned up the README to make it + more current + and less threatening + + * tools/Perl5/test.pl, tools/Perl5/dump.pl: chmod 0755 + + * tools/Perl5/dump.pl: Fixed shebang to be a bit more + portable + (recommended by the perl newsgroups and the Camel book) + +2001-05-25 05:04 desrod + + * ChangeLog, iambicexample.cc, install-hinote.c, pilot-addresses.c, + include/pi-iambicExpense.h, include/pi-version.h, + libpisock/address.c, libpisock/cmp.c, libpisock/datebook.c, + libpisock/dlp.c, src/iambicexample.cc, src/install-hinote.c, + src/pilot-addresses.c, src/pilot-install-hinote.c, + bindings/Perl/Pilot.xs, libpisock/memo.c, libpisock/os2serial.c, + libpisock/serial.c, libpisock/slp.c, libpisock/socket.c, + libpisock/sync.c, libpisock/syspkt.c, libpisock/todo.c, + libpisock/unixserial.c, libpisock/util.c, libpisock/utils.c, + libpisock/winserial.c, libpisync/sync.c: * + tools/Perl5/Pilot.xs: Fixed a typo in 'creatDate' (Hadmut + Danisch) + + * install-hinote.c: Fixed to include detection of notes > + 28k (David + A. Desrosiers) + + * iambicexample.cc: Poked around and added the banner, + removed + static file declaration path (still static for now, + need to + install AllTime and test it out) + + * More documentation fixes, rolled back out of gtk-doc + for now, + until we can agree on a portable format to represent + these docs in + (kudos to jpr for the work and the idea) (David A. + Desrosiers) + + * Closed 5 bugs listed at Sourceforge (David A. + Desrosiers) + +2001-05-24 02:08 desrod + + * pilot-addresses.c, src/pilot-addresses.c: What the heck was that + burp in pilot-addresses.c? Major breakage on file imports to + AddressDB. Fixed and removed. + +2001-05-23 17:12 jpr + + * ChangeLog, libpisock/address.c, libpisock/cmp.c, + libpisock/datebook.c, libpisock/socket.c, libpisock/util.c: * + libsock/datebook.c: ditto + + * libsock/address.c: ditto + + * libsock/util.c: ditto + + * libsock/inetserial.c: ditto + +2001-05-23 16:29 jpr + + * ChangeLog, libpisock/os2serial.c, libpisock/serial.c, + libpisock/slp.c, libpisock/unixserial.c, libpisock/winserial.c: + 2001-05-23 JP Rosevear + + * libsock/sync.c: Document all public and private + functions (the + public ones in much more detail + + * libsock/dlp.c: Ditto + + * libsock/unixserial.c: ditto + + * libsock/winserial.c: ditto + (so_changebaud): make static + + * libsock/os2serial.c: ditto + + * libsock/serial.c: ditto + + * libsock/slp.c: ditto + +2001-05-23 15:52 jpr + + * ChangeLog, libpisock/dlp.c, libpisock/sync.c, libpisync/sync.c: + 2001-05-23 JP Rosevear + + * libsock/sync.c: Document all public functions + + * libsock/dlp.c: Ditto + +2001-05-22 11:38 desrod + + * Makefile.in: Oops, forgot there were two Makefile.in's... one + for OS/2, and one + for Unix. Fixed the Unix one now. + +2001-05-22 08:20 desrod + + * ChangeLog, Makefile.in, Makefile.os2, pilot-xfer.c, + src/pilot-xfer.c, include/md5.h, libpisock/md5.c, + libpisock/padp.c, libpisock/serial.c, libpisock/slp.c, + libpisock/winserial.c: * Makefile.in/Makefile.os2: Fixed + the "double-header" install + problem with the Makefile in the install stanza. Fixed + the + install-strip option, removed it, and pulled it into + the install + stanza, put in the proper order. It was backwards + before. Added + pilot-prc back in. Not sure how it got dropped out. + (David A. + Desrosiers) + + * libsock/md5.c: Implemented md5.c and md5.h for the new + password + authentication scheme. (David A. Desrosiers) + + * include/md5.h: Same as above, legacy-free algorithm + used here. + (David A. Desrosiers) + + * dlpsh.c: Fixed the visual layout of 'df' (David A. + Desrosiers) + + * pilot-prc: Minor fixes to get it to compile cleanly + (missing + protos, etc.) (David A. Desrosiers) + + * libsock/winserial.c,libsock/serial.c: Error handling + fixes on + Win32 (Oliver Schmidt) + + * pilot-xfer.c: Possible fix for 'time' on Next Openstep, + commented + out, need to test. (Juergen Sell) + +2001-05-21 02:58 desrod + + * Makefile.in: Oops, how'd foo.c and foo2.c get in that Makefile. + Fixed. + +2001-05-21 02:55 desrod + + * ChangeLog, Makefile.in, Makefile.os2, addresses.c, debugsh.c, + dlpsh.c, getrom.c, install-memo.c, install-user.c, memos.c, + pd-tty.c, pi-csd.c, pi-getram.c, pi-getrom.c, pi-port.c, + pilot-addresses.c, pilot-clip.c, pilot-debug.c, pilot-dedupe.c, + pilot-file.c, pilot-mail.c, pilot-prc.c, pilot-schlep.c, + pilot-xfer.c, read-ical.c, reminders.c, libpisock/address.c, + libpisock/appinfo.c, libpisock/cmp.c, libpisock/datebook.c, + libpisock/dlp.c, libpisock/expense.c, libpisock/hinote.c, + libpisock/inet.c, libpisock/mail.c, libpisock/memo.c, + libpisock/money.c, libpisock/os2serial.c, libpisock/padp.c, + libpisock/pi-file.c, libpisock/serial.c, libpisock/slp.c, + libpisock/socket.c, libpisock/sync.c, libpisock/syspkt.c, + libpisock/todo.c, libpisock/unixserial.c, libpisock/util.c, + libpisock/utils.c, libpisock/winserial.c, libpisync/sync.c, + src/addresses.c, src/debugsh.c, src/dlpsh.c, src/getrom.c, + src/install-memo.c, src/install-user.c, src/memos.c, + src/pd-tty.c, src/pi-csd.c, src/pi-getram.c, src/pi-getrom.c, + src/pi-port.c, src/pilot-addresses.c, src/pilot-clip.c, + src/pilot-csd.c, src/pilot-debug.c, src/pilot-debugsh.c, + src/pilot-dedupe.c, src/pilot-dlpsh.c, src/pilot-file.c, + src/pilot-getram.c, src/pilot-getrom.c, src/pilot-install-memo.c, + src/pilot-install-user.c, src/pilot-mail.c, src/pilot-memos.c, + src/pilot-port.c, src/pilot-prc.c, src/pilot-read-ical.c, + src/pilot-reminders.c, src/pilot-schlep.c, src/pilot-xfer.c, + src/read-ical.c, src/reminders.c: Beginning to document + every function in the whole codebase, more + small cleanups. + +2001-05-15 17:55 desrod + + * ChangeLog, pilot-addresses.c, src/pilot-addresses.c: [no log + message] + +2001-05-14 02:48 desrod + + * ChangeLog, Makefile.in, addresses.c, debugsh.c, dlpsh.c, + getopt.c, getopt1.c, getrom.c, hinotes.c, install-datebook.c, + install-hinote.c, install-memo.c, install-todos.c, + install-user.c, kittykiller.c, memos.c, money2qif.c, parsedate.c, + pd-tty.c, pi-csd.c, pi-getram.c, pi-getrom.c, pi-nredir.c, + pi-port.c, pilot-addresses.c, pilot-clip.c, pilot-debug.c, + src/addresses.c, src/debugsh.c, src/dlpsh.c, src/getopt.c, + src/getopt1.c, src/getrom.c, src/hinotes.c, + src/install-datebook.c, src/install-hinote.c, src/install-memo.c, + src/install-todos.c, src/install-user.c, src/kittykiller.c, + src/memos.c, src/money2qif.c, src/parsedate.c, src/pd-tty.c, + src/pi-csd.c, src/pi-getram.c, src/pi-getrom.c, src/pi-nredir.c, + src/pi-port.c, src/pilot-addresses.c, src/pilot-clip.c, + src/pilot-csd.c, src/pilot-debug.c, src/pilot-debugsh.c, + src/pilot-dlpsh.c, src/pilot-getram.c, src/pilot-getrom.c, + src/pilot-hinotes.c, src/pilot-install-datebook.c, + src/pilot-install-hinote.c, src/pilot-install-memo.c, + src/pilot-install-todos.c, src/pilot-install-user.c, + src/pilot-memos.c, src/pilot-nredir.c, src/pilot-port.c, + pilot-dedupe.c, pilot-file.c, pilot-mail.c, pilot-prc.c, + pilot-schlep.c, pilot-xfer.c, read-expenses.c, read-ical.c, + read-todos.c, reminders.c, include/pi-address.h, + include/pi-appinfo.h, include/pi-cmp.h, include/pi-config.h.in, + include/pi-datebook.h, include/pi-dlp.h, include/pi-dlp.hxx, + include/pi-expense.h, include/pi-file.h, include/pi-hinote.h, + include/pi-iambicExpense.h, include/pi-inet.h, + include/pi-inetserial.h, include/pi-macros.h, include/pi-mail.h, + include/pi-memo.h, include/pi-money.h, include/pi-padp.h, + include/pi-serial.h, include/pi-slp.h, + include/pi-sockaddr-win32.h, include/pi-socket.h, + include/pi-source.h, include/pi-sync.h, include/pi-syspkt.h, + include/pi-todo.h, include/pi-util.h, include/pi-version.h, + libpisock/address.c, libpisock/appinfo.c, libpisock/cmp.c, + libpisock/datebook.c, libpisock/dlp.c, libpisock/expense.c, + libpisock/hinote.c, libpisock/inet.c, libpisock/mail.c, + libpisock/memo.c, libpisock/money.c, libpisock/os2serial.c, + libpisock/padp.c, libpisock/pi-file.c, libpisock/pi-header.c, + libpisock/serial.c, libpisock/slp.c, libpisock/socket.c, + libpisock/sync.c, libpisock/syspkt.c, libpisock/todo.c, + libpisync/sync.c, src/pilot-dedupe.c, src/pilot-file.c, + src/pilot-mail.c, src/pilot-prc.c, src/pilot-read-expenses.c, + src/pilot-read-ical.c, src/pilot-read-todos.c, + src/pilot-reminders.c, src/pilot-schlep.c, src/pilot-xfer.c, + src/read-expenses.c, src/read-ical.c, src/read-todos.c, + src/reminders.c, libpisock/unixserial.c, libpisock/util.c, + libpisock/utils.c, libpisock/winserial.c: memos.c fix + (Tamito KAJIYAMA), huge reformatting changes (hint: + do not diff the codebase =), Makefile.in (John Marshall) + +2001-05-09 04:18 desrod + + * ChangeLog, Makefile.os2, ccexample.cc, src/ccexample.cc, dlpsh.c, + pi-getrom.c, pilot-schlep.c, src/dlpsh.c, src/pi-getrom.c, + src/pilot-dlpsh.c, src/pilot-getrom.c, src/pilot-schlep.c, + doc/man/pilot-addresses.1, doc/man/pilot-link.7: Various fixes + and minor tweaks in 0.9.5-final readiness + +2001-04-30 03:15 desrod + + * ChangeLog, Makefile.in, addresses.c, debugsh.c, dlpsh.c, + getopt.c, getopt1.c, getrom.c, hinotes.c, install-datebook.c, + install-hinote.c, install-memo.c, install-todos.c, + install-user.c, kittykiller.c, memos.c, money2qif.c, parsedate.c, + pd-tty.c, pi-csd.c, pi-getram.c, pi-getrom.c, pi-nredir.c, + pi-port.c, pilot-addresses.c, pilot-clip.c, pilot-dedupe.c, + pilot-file.c, pilot-mail.c, pilot-prc.c, pilot-schlep.c, + pilot-xfer.c, read-expenses.c, read-ical.c, read-todos.c, + reminders.c, src/addresses.c, src/debugsh.c, src/dlpsh.c, + src/getopt.c, src/getopt1.c, src/getrom.c, src/hinotes.c, + src/install-datebook.c, src/install-hinote.c, src/install-memo.c, + src/install-todos.c, src/install-user.c, src/kittykiller.c, + src/memos.c, src/money2qif.c, src/parsedate.c, src/pd-tty.c, + src/pi-csd.c, src/pi-getram.c, src/pi-getrom.c, src/pi-nredir.c, + src/pi-port.c, src/pilot-addresses.c, src/pilot-clip.c, + src/pilot-csd.c, src/pilot-debugsh.c, src/pilot-dedupe.c, + src/pilot-dlpsh.c, src/pilot-file.c, src/pilot-getram.c, + src/pilot-getrom.c, src/pilot-hinotes.c, + src/pilot-install-datebook.c, src/pilot-install-hinote.c, + src/pilot-install-memo.c, src/pilot-install-todos.c, + src/pilot-install-user.c, src/pilot-mail.c, src/pilot-memos.c, + src/pilot-nredir.c, src/pilot-port.c, src/pilot-prc.c, + src/pilot-read-expenses.c, src/pilot-read-ical.c, + src/pilot-read-todos.c, src/pilot-reminders.c, + src/pilot-schlep.c, src/pilot-xfer.c, src/read-expenses.c, + src/read-ical.c, src/read-todos.c, src/reminders.c, + include/pi-version.h, libpisock/address.c, libpisock/appinfo.c, + libpisock/cmp.c, libpisock/datebook.c, libpisock/dlp.c, + libpisock/expense.c, libpisock/hinote.c, libpisock/inet.c, + libpisock/mail.c, libpisock/memo.c, libpisock/money.c, + libpisock/os2serial.c, libpisock/padp.c, libpisock/pi-file.c, + libpisock/pi-header.c, libpisock/serial.c, libpisock/slp.c, + libpisock/socket.c, libpisock/sync.c, libpisock/syspkt.c, + libpisock/todo.c, libpisock/unixserial.c, libpisock/util.c, + libpisock/utils.c, libpisock/winserial.c, libpisync/sync.c: + Preparing for a 0.9.5 final release, check the ChangeLog for + details + +2001-03-30 19:34 jpr + + * ChangeLog: 2001-03-30 JP Rosevear + + * libsock/Makefile.in: version should be 4.0.0 because + the old + sync interface was removed and the new one added + +2001-03-30 19:26 jpr + + * ChangeLog, libpisock/sync.c, libpisync/sync.c: 2001-03-30 JP + Rosevear + + * libsock/sync.c (sync_MergeFromPilot_fast): Free the + record if it + wasn't added to the queue not vice versa + (sync_MergeFromPilot_slow): ditto + +2001-03-14 15:34 jpr + + * ChangeLog: 2001-03-14 JP Rosevear + + * libsock/Makefile.in: set the .so version to 4:0:1 as + per libtool + rules + +2001-03-12 23:06 jpr + + * ChangeLog, configure: 2001-03-12 JP Rosevear + + * scripts/tarball.c (main): fixes to make it work again, + what a + horrible hack + +2001-03-12 22:41 jpr + + * ChangeLog, Makefile.in, include/pi-sync.h, libpisock/sync.c, + libpisync/sync.c: 2001-03-12 JP Rosevear + + * libsock/sync.c (open_db): handle the secret flag + (sync_CopyToPilot): use open_db + (sync_CopyFromPilot): ditto + (sync_MergeFromPilot): ditto + (sync_MergeToPilot): ditto + (sync_Synchronize): ditto + + * scripts/tarball.c: name the tarball properly + + * Makefile.in: make make dist a little better + + * include/pi-sync.h: add secret field + + * Makefile.in: remove old dist tarball and reflect new + name + +2001-03-04 20:16 desrod + + * ChangeLog, Makefile.in, configure.in, install-user.c, + doc/man/pilot-addresses.1, src/install-user.c, + src/pilot-install-user.c: + Added man/pilot-addresses.1, tools/empty.in, applied John + Marshall's fix + for broken directory/Makefile creation. Must fix this when we + autoconfiscate the whole tree properly. Rolling some more + getopt() fixes into all binaries slowly. + +2001-03-01 08:11 desrod + + * ChangeLog, pilot-file.c, pilot-prc.c, pilot-xfer.c, + include/pi-dlp.h, include/pi-file.h, libpisock/dlp.c, + libpisock/pi-file.c, src/pilot-file.c, src/pilot-prc.c, + src/pilot-xfer.c, bindings/Java/doConstants.c, + bindings/Perl/Pilot.pm, bindings/Perl/Pilot.xs: Added John + Marshalls patch. It was a patch against 0.9.0, so I had to + hand-stitch the patch in, but it was successful. Some of the + fixes were already in the 0.9.5 codebase. + + Addition of CopyProtect and Stream interfaces, general + housecleaning of the code, and some realignment. + +2001-02-28 06:19 desrod + + * ChangeLog: + Updated ChangeLog. + +2001-02-28 06:15 desrod + + * pilot-debug.c, pilot-xfer.c, doc/man/dlpsh.1, + doc/man/ietf2datebook.1, doc/man/install-datebook.1, + doc/man/install-hinote.1, doc/man/install-memo.1, + doc/man/install-user.1, src/pilot-debug.c, src/pilot-xfer.c, + doc/man/pilot-link.7, doc/man/pilot-xfer.1, doc/man/read-ical.1: + Minor edits to layout and formatting on the manpages, + some udpates to + the verbage on the manpages, added some addition explanation to + memos and other binary descriptions in man/pilot-link.7. Added + Tamito's fixes to pilot-xfer.c and tools/Python/pdapilot.py. Also + added some small fixes from Carl Jacobsen. Nothing functional in + this commit, only cosmetic. + +2001-02-25 19:56 desrod + + * ChangeLog, install-user.c, memos.c, pilot-addresses.c, + pilot-xfer.c, sync-plan.PL, libpisock/dlp.c, src/install-user.c, + src/memos.c, src/pilot-addresses.c, src/pilot-install-user.c, + src/pilot-memos.c, src/pilot-sync-plan.pl, src/pilot-xfer.c, + src/sync-plan.PL, doc/man/install-memo.1, doc/man/pilot-xfer.1: + Various fixes for the PILOTPORT detection, port naming + conventions, + sync-plan authentication, a few manpage updates, and some small + buglets here and there. Credits to go Bob Wittig, Mark Peletier. + +2001-02-19 17:41 desrod + + * ChangeLog, aclocal.m4, configure, dlpsh.c, pilot-debug.c, + sync-plan.PL, include/pi-version.h, src/dlpsh.c, + src/pilot-debug.c, src/pilot-dlpsh.c, src/pilot-sync-plan.pl, + src/sync-plan.PL: + 2001-02-17 David A. Desrosiers * aclocal.m4: Fixed the + BSD nm test (again). How many times do we have to keep + fixing this?! + + sync-plan.PL: s/Pilot/Palm where required. No breakage. + + dlpsh.c: Fixed the double "EXITING" error. Prettied up + the 'mem' function and added kbytes. Removed the 'exit' + option. Changed the layout of 'help'. Fixed some of the + formatting. Lots more to do to this binary. + +2001-01-28 23:54 desrod + + * ChangeLog, configure: Updated ChangeLog + +2001-01-28 23:46 desrod + + * Makefile.in, configure, configure.in, include/pi-version.h: How + did -FOO get back in there. Be gone. + +2001-01-23 17:03 jpr + + * ChangeLog, Makefile.in, autogen.sh: 2001-01-23 JP Rosevear + + + * Makefile.in: Add a dist target + + * autogen.sh: add for packaging systems + +2001-01-23 01:12 jpr + + * ChangeLog, Makefile.in: 2001-01-23 JP Rosevear + + * libsock/Makefile.in: update depends + + * Makefile.in: Don't specifically include the header + object file, its + already in the library and breaks --disable-static flag, + update depends + +2001-01-16 19:07 jpr + + * ChangeLog, include/pi-sync.h, libpisock/sync.c, libpisync/sync.c: + 2001-01-16 JP Rosevear + + * libsock/sync.c (sync_CopyPilotRecord): copies a pilot + record + (sync_CopyDesktopRecord): copies a desktop record + (add_record_queue): add a pilot side operation to the + queue + (free_record_queue): free a queu of operations + (delete_both): fix incorrect error check + (sync_record): Instead of actually doing pilot mods, add + an op + to the queue + (sync_MergeFromPilot_process): Process the items in the + queue + (sync_MergeFromPilot_fast): go back to processing the + records as they + come in and processing the queue at the end + (sync_MergeFromPilot_slow): ditto + (sync_MergeToPilot_fast): process queue at the end + (sync_MergeToPilot_slow): ditto + + * include/pi-sync.h: Add pilot and desktop record copy + protos + +2001-01-12 11:55 jpr + + * ChangeLog, include/pi-sockaddr.h.in: oops + +2001-01-12 11:52 jpr + + * ChangeLog: 2001-01-12 JP Rosevear + + * include/pi-sockaddr.h: Up the device name limit to 255 + +2001-01-12 10:40 jpr + + * ChangeLog, libpisock/dlp.c: 2001-01-12 JP Rosevear + + + * libsock/dlp.c (dlp_ReadSortBlock): Expect 2 bytes, + fixes bug pointed + out by Matthias Hessler + +2001-01-11 01:16 jpr + + * ChangeLog, read-ical.c, src/pilot-read-ical.c, src/read-ical.c: + 2001-01-11 JP Rosevear + + * read-ical.c (main): use ii instead of i to index repeat + days in + datebook struct, fixes bug pointed out by Matthias + Hessler + + +2001-01-05 19:17 jpr + + * ChangeLog, libpisock/datebook.c, libpisock/sync.c, + libpisync/sync.c: 2001-01-05 JP Rosevear + + * libsock/datebook.c (pack_AppointmentAppInfo): Fix bug + pointed out + by Matthias Hessler where + i rather than + len was being checked + + * libsock/sync.c (sync_MergeFromPilot_slow): Build a list + of pilot + records before iterating because its not valid to edit in + place + during the index loop + +2000-12-21 16:52 jpr + + * ChangeLog, include/pi-sync.h, libpisock/sync.c, libpisync/sync.c: + 2000-12-21 JP Rosevear + + * include/pi-sync.h: new prototypes + + * libsock/sync.c (sync_FreePilotRecord): util function + for pilot + records + (sync_FreeDesktopRecord): ditto for desktop records + (free_pilot_record_list): free the linked list + (sync_record): Correct sync logic errors + (sync_MergeFromPilot_fast): Build a list of the pilot + records before + iterating because its not valid to edit in place during + the get + mod record loop + +2000-12-19 16:22 jpr + + * ChangeLog, libpisock/util.c: 2000-12-19 JP Rosevear + + + * libsock/util.c (convert_FromPilotChar): Fix + implementation + (convert_ToPilotChar): ditto + +2000-12-19 12:51 jpr + + * ChangeLog, configure, configure.in, include/pi-config.h.in, + include/pi-util.h, libpisock/util.c: 2000-12-19 JP Rosevear + + + * include/pi-config.h.in: List HAVE_ICONV + + * configure.in: Check for an iconv implementation to do + charset + conversion + + * libsock/util.c (convert_ToPilotChar): Convert to pilot + character + set (only does CP1252 devices right now) + (convert_FromPilotChar): Code to convert from pilot + character set + + * include/pi-util.h: New routines to convert to pilot + character set + +2000-12-08 17:36 jpr + + * ChangeLog, libpisock/sync.c, libpisync/sync.c: 2000-12-08 JP + Rosevear + + * libsock/sync.c (sync_record): When pilot record is + archived and + changed and the desktop record is changed and the changes + are not + identical, make sure the pilot record to be archived gets + a new + pilot id so it is not overwritten by + store_record_on_pilot + + 2000-12-07 JP Rosevear + + * libsock/sync.c (sync_record): When the pilot record is + archived + the desktop record is deleted, make sure to archive the + record. + +2000-12-07 14:09 jpr + + * ChangeLog, libpisock/sync.c, libpisync/sync.c: 2000-12-07 JP + Rosevear + + * libsock/sync.c (sync_record): When the pilot record is + changed and + archived and the desktop record is changed and the + changes are not + identical, keep the pilot record - don't delete it. + +2000-11-29 15:27 jpr + + * ChangeLog: oops + +2000-11-29 15:22 jpr + + * libpisock/sync.c, libpisync/sync.c: 2000-11-29 JP Rosevear + + + * libsock/sync.c: Add error checking for all callbacks + and dlp calls. + Add writable checks so the merge to pilot and merge from + pilot only + affect the pilot and desktop records respectively. + +2000-11-28 15:41 jpr + + * ChangeLog, doc/syncabs.sgml: 2000-11-28 JP Rosevear + + + * doc/syncabs.sgml: Update design docs + +2000-11-28 14:55 jpr + + * ChangeLog, include/pi-sync.h, libpisock/sync.c, libpisync/sync.c: + 2000-11-28 JP Rosevear + + * libsock/sync.c (store_record_on_pilot): the prepare + callback now + provides the pilot record structure to be filled out, + free prepare + is no longer used - this is because the pilot record + struct can + never be extended properly and this reduces the work + done. + Rename from store_record_on_palm. + + * include/pi-sync.h: Remove free prepare callback and + update + prepare callback + +2000-11-09 21:41 desrod + + * ChangeLog, Makefile.in: + pixdir fix. My bad. + +2000-10-31 14:22 jpr + + * ChangeLog, include/pi-sync.h, libpisock/sync.c, libpisync/sync.c: + 2000-10-31 JP Rosevear + + * libsock/sync.c (sync_record): use ArchiveRecord to + set/unset + records "archiveness" and use SetStatusCleared to avoid + double + syncing records. + + * include/pi-sync.h: Remove AddArchive and DeleteArchive, + add SetStatusCleared and ArchiveRecord. + +2000-10-30 18:09 desrod + + * ChangeLog: + Just a ChangeLog conflict merge and update. + +2000-10-30 12:34 jpr + + * ChangeLog, include/pi-sync.h, libpisock/sync.c, libpisync/sync.c: + 2000-10-30 JP Rosevear + + * include/pi-sync.h: Replace AddArchiveRecord and + DeleteArchivedRecord + callbacks with the set archive status callback. + + * libsock/sync.c (store_record_on_palm): Do some proper + result checking for errors. + (sync_record): Use new set archive status callback which + makes the + semantics such that the implementor can choose several + implementations + and preserve continuity. Replaces AddArchiveRecord and + DeleteArchiveRecord. + +2000-10-29 19:09 desrod + + * Makefile.in, dlpsh.c, install-datebook.c, + bindings/Perl/Makefile.PL.in, bindings/Perl/Pilot.xs, + src/dlpsh.c, src/install-datebook.c, src/pilot-dlpsh.c, + src/pilot-install-datebook.c: + Perl5 error output fix (wrong text displayed) + + Makefile.in updates for new paths (../../include, tools + relo) + +2000-10-28 17:27 jpr + + * ChangeLog, Makefile.in: 2000-10-28 + + * Makefile.in: install pix dir properly + +2000-10-28 16:34 jpr + + * tests/.cvsignore: oops + +2000-10-28 16:33 jpr + + * .cvsignore, ChangeLog: 2000-10-28 + + * tests/.cvsignore: shush + + * libcc/.cvsignore: ditto + +2000-10-28 16:30 jpr + + * ChangeLog, Makefile.in, include/.cvsignore, + bindings/Java/.cvsignore, bindings/Perl/.cvsignore, + bindings/Python/.cvsignore, bindings/Tcl/.cvsignore: 2000-10-28 + + + * Makefile.in: Re-run make depend to generate correct + dependencies + + * include/.cvsignore: shush + + * tools/Java/.cvsignore: ditto + + * tools/Tcl/.cvsignore: ditto + + * tools/Python/.cvsignore: ditto + + * tools/Perl5/.cvsignore: ditto + +2000-10-28 15:47 jpr + + * ChangeLog, libpisock/sync.c, libpisync/sync.c: 2000-10-28 + + + * libsock/sync.c (sync_MergeToPilot_slow): Manually set + the id of the record + (sync_MergeToPilot_fast): ditto + +2000-10-27 20:23 jpr + + * ChangeLog, Makefile.in, configure, configure.in, configure.scan, + ietf2datebook.PL, pd-tty.c, pilot-debug.c, pilot-xfer.c, + src/ietf2datebook.PL, src/pd-tty.c, src/pilot-debug.c, + src/pilot-ietf2datebook.pl, src/pilot-xfer.c, doc/syncabs.sgml, + include/pi-version.h, libpisock/pi-header.c, bindings/README, + bindings/Java/README, bindings/Java/doConstants.c, + bindings/Java/test.java, bindings/Perl/MANIFEST, + bindings/Perl/Makefile.PL.in, bindings/Perl/Pilot.pm, + bindings/Perl/Pilot.xs, bindings/Perl/README, + bindings/Perl/dump.pl, bindings/Perl/test.pl, + bindings/Perl/typemap, bindings/Tcl/Makefile.in, + bindings/Tcl/README, bindings/Tcl/license.terms, + bindings/Tcl/pitcl.c, bindings/Tcl/tclAppInit.c, + bindings/Tcl/test.tcl, bindings/Tcl/tkAppInit.c, src/pix/b1.gif, + src/pix/b2.gif, src/pix/b3.gif, src/pix/b4.gif, src/pix/b5.gif, + src/pix/b6.gif, src/pix/b7.gif, src/pix/case.gif, + src/pix/case.xbm, src/pix/casemask.xbm: Resurrect 0.9.5pre4 + +2000-10-27 19:13 jpr + + * .cvsignore, include/pi-header.h, libpisock/.cvsignore, + libpisock/pi-header.c: Add new files from update + +2000-10-27 19:09 jpr + + * ChangeLog, Makefile.in, Makefile.os2, README, TODO, addresses.c, + ccexample.cc, configure, debugsh.c, dlpsh.c, getopt.c, getopt1.c, + getrom.c, hinotes.c, iambicexample.cc, doc/TODO, src/addresses.c, + src/ccexample.cc, src/debugsh.c, src/dlpsh.c, src/getopt.c, + src/getopt1.c, src/getrom.c, src/hinotes.c, src/iambicexample.cc, + src/pilot-debugsh.c, src/pilot-dlpsh.c, src/pilot-hinotes.c, + ietf2datebook.PL, install-datebook.c, install-hinote.c, + install-memo.c, install-todos.c, install-user.c, kittykiller.c, + memos.c, money2qif.c, parsedate.c, parsedate.y, pd-tty.c, + pi-csd.c, pi-getram.c, pi-getrom.c, pi-nredir.c, pi-port.c, + pilot-addresses.c, pilot-clip.c, pilot-debug.c, pilot-dedupe.c, + pilot-file.c, pilot-mail.c, pilot-prc.c, pilot-schlep.c, + pilot-xfer.c, read-expenses.c, read-ical.c, read-todos.c, + reminders.c, validate.cc, src/ietf2datebook.PL, + src/install-datebook.c, src/install-hinote.c, src/install-memo.c, + src/install-todos.c, src/install-user.c, src/kittykiller.c, + src/memos.c, src/money2qif.c, src/parsedate.c, src/parsedate.y, + src/pd-tty.c, src/pi-csd.c, src/pi-getram.c, src/pi-getrom.c, + src/pi-nredir.c, src/pi-port.c, src/pilot-addresses.c, + src/pilot-clip.c, src/pilot-csd.c, src/pilot-debug.c, + src/pilot-dedupe.c, src/pilot-file.c, src/pilot-getram.c, + src/pilot-getrom.c, src/pilot-ietf2datebook.pl, + src/pilot-install-datebook.c, src/pilot-install-hinote.c, + src/pilot-install-memo.c, src/pilot-install-todos.c, + src/pilot-install-user.c, src/pilot-mail.c, src/pilot-memos.c, + src/pilot-nredir.c, src/pilot-port.c, src/pilot-prc.c, + src/pilot-read-expenses.c, src/pilot-read-ical.c, + src/pilot-read-todos.c, src/pilot-reminders.c, + src/pilot-schlep.c, src/pilot-xfer.c, src/read-expenses.c, + src/read-ical.c, src/read-todos.c, src/reminders.c, + src/validate.cc, include/pi-address.h, include/pi-appinfo.h, + include/pi-cmp.h, include/pi-datebook.h, include/pi-dlp.h, + include/pi-expense.h, include/pi-file.h, include/pi-hinote.h, + include/pi-iambicExpense.h, include/pi-inet.h, + include/pi-inetserial.h, include/pi-macros.h, include/pi-mail.h, + include/pi-memo.h, include/pi-money.h, include/pi-padp.h, + include/pi-serial.h, include/pi-slp.h, + include/pi-sockaddr-win32.h, include/pi-socket.h, + include/pi-source.h, include/pi-sync.h, include/pi-syspkt.h, + include/pi-todo.h, include/pi-version.h, libpisock/address.c, + libpisock/appinfo.c, libpisock/cmp.c, libpisock/datebook.c, + libpisock/dlp.c, libpisock/expense.c, libpisock/hinote.c, + libpisock/inet.c, libpisock/mail.c, libpisock/memo.c, + libpisock/money.c, libpisock/os2serial.c, libpisock/padp.c, + libpisock/pi-file.c, libpisock/serial.c, libpisock/slp.c, + libpisock/socket.c, libpisock/sync.c, libpisock/syspkt.c, + libpisock/todo.c, libpisock/unixserial.c, libpisock/utils.c, + libpisock/winserial.c, libpisync/sync.c, doc/man/pilot-link.7, + doc/man/pilot-xfer.1, doc/man/read-ical.1, tests/packers.c: Bring + pre3 back from the dead + +2000-10-11 23:39 jpr + + * ChangeLog, libpisock/sync.c, libpisync/sync.c: 2000-10-11 JP + Rosevear + + * libsock/sync.c (sync_record): Use ReplaceRecord + callback. + There can be a subtle difference between add/delete and + replace. + (sync_MergeToPilot_slow): Calculate flags for records + during + a slow sync + (sync_MergeFromPilot_slow): ditto + + * include/pi-sync.h: Add ReplaceRecord callback + +2000-10-11 15:54 jpr + + * ChangeLog, include/pi-sync.h, libpisock/sync.c, libpisync/sync.c: + 2000-10-11 JP Rosevear + + * libsock/sync.c (sync_record): Use ReplaceRecord + callback. + There can be a subtle difference between add/delete and + replace. + +2000-10-11 03:28 jpr + + * ChangeLog, include/pi-sync.h, libpisock/sync.c, libpisync/sync.c: + 2000-10-11 JP Rosevear + + * libsock/sync.c: Unconditionally close the database + after use. + The slow/fast flag is now passed back via the Pre + callback + (sync_record): Reflect the fact that the dirty and + deleted pilot + record flags are not mutually exclusive. + (store_record_on_palm): When storing, 0 the flags. + + 2000-10-10 JP Rosevear + + * libsock/sync.c (sync_MergeToPilot_slow): Only try and + obtain a pilot + record if there record id set. + +2000-10-09 23:46 jpr + + * ChangeLog, libpisock/sync.c, libpisync/sync.c: 2000-10-08 JP + Rosevear + + * libsock/sync.c (sync_MergeToPilot_fast): Only try and + obtain a pilot + record if there record id set. + +2000-10-08 17:56 desrod + + * addresses.c, configure, src/addresses.c, debugsh.c, dlpsh.c, + getrom.c, hinotes.c, install-datebook.c, install-hinote.c, + install-memo.c, install-todos.c, install-user.c, kittykiller.c, + memos.c, money2qif.c, parsedate.c, pd-tty.c, pi-csd.c, + pi-getram.c, pi-getrom.c, src/debugsh.c, src/dlpsh.c, + src/getrom.c, src/hinotes.c, src/install-datebook.c, + src/install-hinote.c, src/install-memo.c, src/install-todos.c, + src/install-user.c, src/kittykiller.c, src/memos.c, + src/money2qif.c, src/parsedate.c, src/pd-tty.c, src/pi-csd.c, + src/pi-getram.c, src/pi-getrom.c, src/pilot-csd.c, + src/pilot-debugsh.c, src/pilot-dlpsh.c, src/pilot-getram.c, + src/pilot-getrom.c, src/pilot-hinotes.c, + src/pilot-install-datebook.c, src/pilot-install-hinote.c, + src/pilot-install-memo.c, src/pilot-install-todos.c, + src/pilot-install-user.c, src/pilot-memos.c, pi-nredir.c, + pi-port.c, pilot-addresses.c, pilot-clip.c, pilot-debug.c, + pilot-dedupe.c, pilot-file.c, pilot-mail.c, pilot-prc.c, + pilot-schlep.c, pilot-xfer.c, read-expenses.c, read-ical.c, + read-todos.c, reminders.c, sync-plan.PL, src/pi-nredir.c, + src/pi-port.c, src/pilot-addresses.c, src/pilot-clip.c, + src/pilot-debug.c, src/pilot-dedupe.c, src/pilot-file.c, + src/pilot-mail.c, src/pilot-nredir.c, src/pilot-port.c, + src/pilot-prc.c, src/pilot-read-expenses.c, + src/pilot-read-ical.c, src/pilot-read-todos.c, + src/pilot-reminders.c, src/pilot-schlep.c, + src/pilot-sync-plan.pl, src/pilot-xfer.c, src/read-expenses.c, + src/read-ical.c, src/read-todos.c, src/reminders.c, + src/sync-plan.PL: + 1. Added a 'mem' option to dlpsh. I will eventually add a + 'password' function, version (OS version), and some + other + tweaks. I've put up some detailed information on how + to extract + this password from the Palm on the pilot-link site on + gnu-designs.com when I get a free moment. + + 2. I nuked the Palm regex I did in pre1. Basically pre1 + was a + s/PilotRecord/PalmRecord/g (and others), and this + release I + reversed that action. Too many things would have been + adversely + affected for this to be practical at the onset. If we + feel that + having 'Pilot' in the name doesn't violate what Palm + has + legally stated about using the name Pilot, then it + should stay. + If we feel that there could be some legal issues, we + would need + to rename most of the code and package name itself, + i.e. BAD! + + 3. Since there was a possible issue about the copyright + status of + the code in sync.c, jpr and myself have completely + gutted it + and did a ground-up rewrite of the code. In + libsock/sync.c + we've implemented the following interfaces: + + (sync_Synchronize): Do a full blown sync + (sync_MergeToRemote): Sync desktop records to pilot. + (sync_MergeToRemote_slow): Implement slow sync of + above + (sync_MergeToRemote_fast): Implement fast sync of + above + (sync_MergeFromRemote): Sync pilot records to desktop + (sync_MergeFromRemote_slow): Implement slow sync of + above + (sync_MergeFromRemote_fast): Implement fast sync of + above + (sync_CopyFromRemote): Copy pilot records to desktop + (sync_CopyToRemote): Copy desktop records to pilot + (sync_record): Sync a desktop and pilot record + (store_record_on_palm): Utility routine + + Also, include/pi-sync.h was rewritten to implement a + generic + sync algorithm + + include/pi-macros.h now has included for + struct tm + + include/pi-dlp.h has now exposed the DLP_BUF_SIZE + macro + + 4. All appropriate FSF headers have been plopped into the + files + where appropriate. All originating authorship and + copyrights + were retained in the files, and where there was no + definitive + author, I've replaced it with 'Copyright (c) + 1997-2000, The + pilot-link team'. This should make it very clear which + files + are not proprietary (as was the previous sync.c + implementation) + + 5. include/pi-header.h has been nuked, and replaced with + a cleaner + pi-header.c function, which exposes PalmHeader(). + + 6. The beginnings of the longopt() conversion is in the + code as + well, so we can mash out the "ASCII art" that John + mentioned. + The "Palm Splash" will only show up on a --version + call, not + when using --help. + + 7. A bad BSD nm test in ./configure was nuked and + replaced with a + much cleaner working version of the test. + + 8. Two quick tweaks to Perl5/Makefile.PL and + Makefile.PL.in to + allow it to cleanly build on perl-5.005 and later + versions + w.r.t. prototypes and namespace. + + 9. include/pi-sync.h: Some renaming, add pre and post + sync + callback struct members. + + 10. libsock/sync.c: (close_db): Don't just close the db, + clean it + up and reset the sync flags. + +2000-10-08 17:45 desrod + + * include/pi-dlp.h, include/pi-header.h, include/pi-sync.h, + libpisock/address.c, libpisock/appinfo.c, libpisock/cmp.c, + libpisock/datebook.c, libpisock/dlp.c, libpisock/expense.c, + libpisock/hinote.c, libpisock/inet.c, libpisock/mail.c, + libpisock/memo.c, libpisock/money.c, libpisock/os2serial.c, + libpisock/padp.c, libpisock/pi-file.c, libpisock/serial.c, + libpisock/slp.c, libpisock/socket.c, libpisock/sync.c, + libpisock/syspkt.c, libpisock/todo.c, libpisock/unixserial.c, + libpisock/utils.c, libpisock/winserial.c, libpisync/sync.c: + 1. Added a 'mem' option to dlpsh. I will eventually add a + 'password' function, version (OS version), and some + other + tweaks. I've put up some detailed information on how + to extract + this password from the Palm on the pilot-link site on + gnu-designs.com when I get a free moment. + + 2. I nuked the Palm regex I did in pre1. Basically pre1 + was a + s/PilotRecord/PalmRecord/g (and others), and this + release I + reversed that action. Too many things would have been + adversely + affected for this to be practical at the onset. If we + feel that + having 'Pilot' in the name doesn't violate what Palm + has + legally stated about using the name Pilot, then it + should stay. + If we feel that there could be some legal issues, we + would need + to rename most of the code and package name itself, + i.e. BAD! + + 3. Since there was a possible issue about the copyright + status of + the code in sync.c, jpr and myself have completely + gutted it + and did a ground-up rewrite of the code. In + libsock/sync.c + we've implemented the following interfaces: + + (sync_Synchronize): Do a full blown sync + (sync_MergeToRemote): Sync desktop records to pilot. + (sync_MergeToRemote_slow): Implement slow sync of + above + (sync_MergeToRemote_fast): Implement fast sync of + above + (sync_MergeFromRemote): Sync pilot records to desktop + (sync_MergeFromRemote_slow): Implement slow sync of + above + (sync_MergeFromRemote_fast): Implement fast sync of + above + (sync_CopyFromRemote): Copy pilot records to desktop + (sync_CopyToRemote): Copy desktop records to pilot + (sync_record): Sync a desktop and pilot record + (store_record_on_palm): Utility routine + + Also, include/pi-sync.h was rewritten to implement a + generic + sync algorithm + + include/pi-macros.h now has included for + struct tm + + include/pi-dlp.h has now exposed the DLP_BUF_SIZE + macro + + 4. All appropriate FSF headers have been plopped into the + files + where appropriate. All originating authorship and + copyrights + were retained in the files, and where there was no + definitive + author, I've replaced it with 'Copyright (c) + 1997-2000, The + pilot-link team'. This should make it very clear which + files + are not proprietary (as was the previous sync.c + implementation) + + 5. include/pi-header.h has been nuked, and replaced with + a cleaner + pi-header.c function, which exposes PalmHeader(). + + 6. The beginnings of the longopt() conversion is in the + code as + well, so we can mash out the "ASCII art" that John + mentioned. + The "Palm Splash" will only show up on a --version + call, not + when using --help. + + 7. A bad BSD nm test in ./configure was nuked and + replaced with a + much cleaner working version of the test. + + 8. Two quick tweaks to Perl5/Makefile.PL and + Makefile.PL.in to + allow it to cleanly build on perl-5.005 and later + versions + w.r.t. prototypes and namespace. + + 9. include/pi-sync.h: Some renaming, add pre and post + sync + callback struct members. + + 10. libsock/sync.c: (close_db): Don't just close the db, + clean it + up and reset the sync flags. + +2000-10-08 05:58 jpr + + * .cvsignore, ChangeLog, libpisock/.cvsignore: 2000-10-08 JP + Rosevear + + * .cvsignore, libsock/.cvsignore: Shush + +2000-10-08 05:48 jpr + + * ChangeLog, include/pi-sync.h, libpisock/sync.c, libpisync/sync.c: + 2000-10-08 JP Rosevear + + * include/pi-sync.h: Reorder SetPilotID args + + * libsock/sync.c (sync_CopyFromPilot): Break out of loop + if returned record is null (we're done) + (sync_CopyToPilot): ditto + (store_record_on_palm): Reorder SetPilotID args + +2000-10-08 01:59 jpr + + * ChangeLog, libpisock/sync.c, libpisync/sync.c: 2000-10-08 JP + Rosevear + + * libsock/sync.c (sync_CopyToPilot): Pass the sync + handler to close_db like we're supposed to + (sync_CopyFromPilot): ditto + (sync_MergeFromPilot): ditto + (sync_MergeToPilot): ditto + (sync_CopyFromPilot): Make sure the pre call occurs + before the for + each call + +2000-10-08 01:24 jpr + + * ChangeLog, libpisock/sync.c, libpisync/sync.c: 2000-10-08 JP + Rosevear + + * libsock/sync.c (sync_MergeFromPilot_slow): Only free + the match if one was actually found + (sync_MergeFromPilot_fast): ditto + (sync_MergeToPilot_fast): Break out of the loop if + the returned record is null (we're done) + (sync_MergeToPilot_slow): ditto + +2000-10-06 23:22 jpr + + * ChangeLog, include/pi-sync.h, libpisock/sync.c, libpisync/sync.c: + 2000-10-06 JP Rosevear + + * include/pi-sync.h: Some renaming, add pre and post + sync callback struct members. + + * libsock/sync.c: Some renaming. Add pre and post sync + callbacks. + (close_db): Don't just close the db, clean it up and + reset the sync flags. + +2000-10-04 21:56 jpr + + * ChangeLog, addresses.c, dlpsh.c, hinotes.c, install-datebook.c, + install-hinote.c, install-memo.c, install-todos.c, + install-user.c, memos.c, money2qif.c, pilot-addresses.c, + pilot-dedupe.c, pilot-mail.c, pilot-xfer.c, read-expenses.c, + read-ical.c, read-todos.c, reminders.c, src/addresses.c, + src/dlpsh.c, src/hinotes.c, src/install-datebook.c, + src/install-hinote.c, src/install-memo.c, src/install-todos.c, + src/install-user.c, src/memos.c, src/money2qif.c, + src/pilot-addresses.c, src/pilot-dedupe.c, src/pilot-dlpsh.c, + src/pilot-hinotes.c, src/pilot-install-datebook.c, + src/pilot-install-hinote.c, src/pilot-install-memo.c, + src/pilot-install-todos.c, src/pilot-install-user.c, + src/pilot-mail.c, src/pilot-memos.c, src/pilot-read-expenses.c, + src/pilot-read-ical.c, src/pilot-read-todos.c, + src/pilot-reminders.c, src/pilot-xfer.c, src/read-expenses.c, + src/read-ical.c, src/read-todos.c, src/reminders.c, + include/pi-dlp.h, include/pi-dlp.hxx, include/pi-sync.h, + libpisock/dlp.c, libpisock/sync.c, libpisync/sync.c: 2000-10-04 + JP Rosevear + + * s/PalmRecord/PilotRecord/ + + * s/PalmUser/PilotUser/ + +2000-10-04 21:35 jpr + + * .cvsignore, AUTHORS, ChangeLog, Makefile.am, Makefile.in, NEWS, + acconfig.h, aclocal.m4, addresses.c, autogen.sh, ccexample.cc, + configure, configure.in, debugsh.c, dlpsh.c, getopt.c, + src/addresses.c, src/ccexample.cc, src/debugsh.c, src/dlpsh.c, + src/getopt.c, src/pilot-debugsh.c, src/pilot-dlpsh.c, getopt.h, + getopt1.c, getrom.c, getrom.prc, getrom2.prc, hinotes.c, + iambicexample.cc, ietf2datebook.PL, install-datebook.c, + install-hinote.c, install-memo.c, install-todos.c, + install-user.c, kittykiller.c, memos.c, money2qif.c, parsedate.c, + parsedate.y, pd-tty.c, pi-csd.c, pi-getram.c, pi-getrom.c, + pi-nredir.c, pi-port.c, pilot-addresses.c, pilot-clip.c, + pilot-debug.c, src/getopt.h, src/getopt1.c, src/getrom.c, + src/hinotes.c, src/iambicexample.cc, src/ietf2datebook.PL, + src/install-datebook.c, src/install-hinote.c, src/install-memo.c, + src/install-todos.c, src/install-user.c, src/kittykiller.c, + src/memos.c, src/money2qif.c, src/parsedate.c, src/parsedate.y, + src/pd-tty.c, src/pi-csd.c, src/pi-getram.c, src/pi-getrom.c, + src/pi-nredir.c, src/pi-port.c, src/pilot-addresses.c, + src/pilot-clip.c, src/pilot-csd.c, src/pilot-debug.c, + src/pilot-getram.c, src/pilot-getrom.c, src/pilot-hinotes.c, + src/pilot-ietf2datebook.pl, src/pilot-install-datebook.c, + src/pilot-install-hinote.c, src/pilot-install-memo.c, + src/pilot-install-todos.c, src/pilot-install-user.c, + src/pilot-memos.c, src/pilot-nredir.c, src/pilot-port.c, + src/prc/getrom.prc, src/prc/getrom2.prc, pilot-dedupe.c, + pilot-file.c, pilot-mail.c, pilot-prc.c, pilot-schlep.c, + pilot-undelete.PL, pilot-xfer.c, read-expenses.c, read-ical.c, + read-todos.c, reminders.c, validate.cc, src/pilot-dedupe.c, + src/pilot-file.c, src/pilot-mail.c, src/pilot-prc.c, + src/pilot-read-expenses.c, src/pilot-read-ical.c, + src/pilot-read-todos.c, src/pilot-reminders.c, + src/pilot-schlep.c, src/pilot-undelete.PL, src/pilot-undelete.pl, + src/pilot-xfer.c, src/read-expenses.c, src/read-ical.c, + src/read-todos.c, src/reminders.c, src/validate.cc, + include/pi-address.h, include/pi-address.hxx, + include/pi-appinfo.h, include/pi-appinfo.hxx, include/pi-args.h, + include/pi-cmp.h, include/pi-config-win32.h, + include/pi-config.h.in, include/pi-datebook.h, + include/pi-datebook.hxx, include/pi-dlp.h, include/pi-dlp.hxx, + include/pi-expense.h, include/pi-file.h, include/pi-header.h, + include/pi-hinote.h, include/pi-iambicExpense.h, + include/pi-iambicExpense.hxx, include/pi-inet.h, + include/pi-inetserial.h, include/pi-macros.h, include/pi-mail.h, + include/pi-memo.h, include/pi-memo.hxx, include/pi-money.h, + include/pi-padp.h, include/pi-serial.h, include/pi-slp.h, + include/pi-sockaddr-win32.h, include/pi-sockaddr.h.in, + include/pi-socket.h, include/pi-source.h, include/pi-sync.h, + include/pi-syspkt.h, include/pi-todo.h, include/pi-todo.hxx, + include/pi-version.h, libpisock/.cvsignore, + libpisock/Makefile.am, libpisock/dlp.c, libpisock/sync.c, + libpisync/sync.c, doc/man/.cvsignore, doc/man/Makefile.am, + bindings/.cvsignore, bindings/Makefile.am, tests/.cvsignore, + tests/Makefile.am, tests/Makefile.in: Revert previous auto* foo. + The way headers are done in pilot-link seems broken and I can't + fix it with out breaking the API, which is not a good thing atm. + +2000-10-04 00:01 jpr + + * ChangeLog, libpisock/dlp.c, libpisock/sync.c, libpisync/sync.c: + 2000-10-04 JP Rosevear + + * libsock/sync.c: s/PalmRecord/PilotRecord + + * libsock/pi-sync.h: ditto + +2000-10-03 20:27 jpr + + * ChangeLog, bindings/.cvsignore, bindings/Makefile.am: 2000-10-03 + JP Rosevear + + * tools/Makefile.am: Build c++ programs if possible + + * tools/parsedate.c: Remove generated file + + * tools/.cvsignore: shush + +2000-10-03 14:49 jpr + + * ChangeLog, acconfig.h, doc/man/.cvsignore, bindings/.cvsignore, + bindings/Makefile.am, tests/.cvsignore, tests/Makefile.am: + 2000-10-03 JP Rosevear + + * Add missing files + +2000-10-03 14:38 jpr + + * .cvsignore, AUTHORS, ChangeLog, Makefile.am, Makefile.in, NEWS, + aclocal.m4, addresses.c, autogen.sh, ccexample.cc, configure, + configure.in, debugsh.c, dlpsh.c, getopt.c, src/addresses.c, + src/ccexample.cc, src/debugsh.c, src/dlpsh.c, src/getopt.c, + src/pilot-debugsh.c, src/pilot-dlpsh.c, getopt.h, getopt1.c, + getrom.c, getrom.prc, getrom2.prc, hinotes.c, iambicexample.cc, + ietf2datebook.PL, install-datebook.c, install-hinote.c, + install-memo.c, install-todos.c, install-user.c, kittykiller.c, + memos.c, money2qif.c, parsedate.c, parsedate.y, pd-tty.c, + pi-csd.c, pi-getram.c, pi-getrom.c, pi-nredir.c, pi-port.c, + pilot-addresses.c, pilot-clip.c, pilot-debug.c, pilot-dedupe.c, + src/getopt.h, src/getopt1.c, src/getrom.c, src/hinotes.c, + src/iambicexample.cc, src/ietf2datebook.PL, + src/install-datebook.c, src/install-hinote.c, src/install-memo.c, + src/install-todos.c, src/install-user.c, src/kittykiller.c, + src/memos.c, src/money2qif.c, src/parsedate.c, src/parsedate.y, + src/pd-tty.c, src/pi-csd.c, src/pi-getram.c, src/pi-getrom.c, + src/pi-nredir.c, src/pi-port.c, src/pilot-addresses.c, + src/pilot-clip.c, src/pilot-csd.c, src/pilot-debug.c, + src/pilot-dedupe.c, src/pilot-getram.c, src/pilot-getrom.c, + src/pilot-hinotes.c, src/pilot-ietf2datebook.pl, + src/pilot-install-datebook.c, src/pilot-install-hinote.c, + src/pilot-install-memo.c, src/pilot-install-todos.c, + src/pilot-install-user.c, src/pilot-memos.c, src/pilot-nredir.c, + src/pilot-port.c, src/prc/getrom.prc, src/prc/getrom2.prc, + pilot-file.c, pilot-mail.c, pilot-prc.c, pilot-schlep.c, + pilot-undelete.PL, pilot-xfer.c, read-expenses.c, read-ical.c, + read-todos.c, reminders.c, validate.cc, src/pilot-file.c, + src/pilot-mail.c, src/pilot-prc.c, src/pilot-read-expenses.c, + src/pilot-read-ical.c, src/pilot-read-todos.c, + src/pilot-reminders.c, src/pilot-schlep.c, src/pilot-undelete.PL, + src/pilot-undelete.pl, src/pilot-xfer.c, src/read-expenses.c, + src/read-ical.c, src/read-todos.c, src/reminders.c, + src/validate.cc, include/pi-address.h, include/pi-address.hxx, + include/pi-appinfo.h, include/pi-appinfo.hxx, include/pi-args.h, + include/pi-cmp.h, include/pi-config-win32.h, + include/pi-config.h.in, include/pi-datebook.h, + include/pi-datebook.hxx, include/pi-dlp.h, include/pi-dlp.hxx, + include/pi-expense.h, include/pi-file.h, include/pi-header.h, + include/pi-hinote.h, include/pi-iambicExpense.h, + include/pi-iambicExpense.hxx, include/pi-inet.h, + include/pi-inetserial.h, include/pi-macros.h, include/pi-mail.h, + include/pi-memo.h, include/pi-memo.hxx, include/pi-money.h, + include/pi-padp.h, include/pi-serial.h, include/pi-slp.h, + include/pi-sockaddr-win32.h, include/pi-sockaddr.h.in, + include/pi-socket.h, include/pi-source.h, include/pi-sync.h, + include/pi-syspkt.h, include/pi-todo.h, include/pi-todo.hxx, + include/pi-version.h, libpisock/.cvsignore, + libpisock/Makefile.am, doc/man/Makefile.am, bindings/.cvsignore, + tests/Makefile.in: 2000-10-03 JP Rosevear + + * Reorganize files and do the automake thing. + include/*.h goes to libsock/ + include/*.hxx goes to libcc/ + top level source files go to tools + Still need to auto* foo the 4 language binding dirs + +2000-10-02 12:38 jpr + + * ChangeLog, include/pi-dlp.h, include/pi-macros.h, + include/pi-sync.h, libpisock/sync.c, libpisync/sync.c: 2000-09-28 + JP Rosevear + + * libsock/sync.c (sync_Synchronize): Do a full blown sync + (sync_MergeToRemote): Sync desktop records to pilot. + (sync_MergeToRemote_slow): Implement slow sync of above + (sync_MergeToRemote_fast): Implement fast sync of above + (sync_MergeFromRemote): Sync pilot records to desktop + (sync_MergeFromRemote_slow): Implement slow sync of above + (sync_MergeFromRemote_fast): Implement fast sync of above + (sync_CopyFromRemote): Copy pilot records to desktop + (sync_CopyToRemote): Copy desktop records to pilot + (sync_record): Sync a desktop and pilot record + (store_record_on_palm): Utility routine + (archive_and_delete): ditto + (delete_both): ditto + (sync_NewDesktopRecord): Allocate new desktop record + (sync_NewPalmRecord): Allocation new palm record + + * include/pi-sync.h: Rewrite of header for generic sync + algorithm + + * include/pi-macros.h: Include for struct tm + + * include/pi-dlp.h: Make the DLP_BUF_SIZE macro available + +2000-09-05 00:12 desrod + + * libpisock/unixserial.c: A '0' is legal to return on Linux from + the tty layer write. This affects the USB Visor (for old + versions of the Linux USB driver) and some of the usb-serial + converters on Linux. + +2000-09-04 21:25 desrod + + * Makefile.in, Makefile.os2, README, addresses.c, debugsh.c, + dlpsh.c, getrom.c, hinotes.c, iambicexample.cc, + install-datebook.c, install-hinote.c, install-memo.c, + install-todos.c, install-user.c, memos.c, money2qif.c, pi-csd.c, + pi-getram.c, pi-getrom.c, pi-nredir.c, pi-port.c, + pilot-addresses.c, pilot-clip.c, pilot-debug.c, pilot-dedupe.c, + pilot-file.c, pilot-mail.c, pilot-schlep.c, pilot-xfer.c, + read-expenses.c, read-ical.c, read-todos.c, reminders.c, + sync-plan.PL, validate.cc, src/addresses.c, src/debugsh.c, + src/dlpsh.c, src/getrom.c, src/hinotes.c, src/iambicexample.cc, + src/install-datebook.c, src/install-hinote.c, src/install-memo.c, + src/install-todos.c, src/install-user.c, src/memos.c, + src/money2qif.c, src/pi-csd.c, src/pi-getram.c, src/pi-getrom.c, + src/pi-nredir.c, src/pi-port.c, src/pilot-addresses.c, + src/pilot-clip.c, src/pilot-csd.c, src/pilot-debug.c, + src/pilot-debugsh.c, src/pilot-dedupe.c, src/pilot-dlpsh.c, + src/pilot-file.c, src/pilot-getram.c, src/pilot-getrom.c, + src/pilot-hinotes.c, src/pilot-install-datebook.c, + src/pilot-install-hinote.c, src/pilot-install-memo.c, + src/pilot-install-todos.c, src/pilot-install-user.c, + src/pilot-mail.c, src/pilot-memos.c, src/pilot-nredir.c, + src/pilot-port.c, src/pilot-read-expenses.c, + src/pilot-read-ical.c, src/pilot-read-todos.c, + src/pilot-reminders.c, src/pilot-schlep.c, + src/pilot-sync-plan.pl, src/pilot-xfer.c, src/read-expenses.c, + src/read-ical.c, src/read-todos.c, src/reminders.c, + src/sync-plan.PL, src/validate.cc, include/pi-appinfo.h, + include/pi-dlp.h, include/pi-dlp.hxx, include/pi-header.h, + tests/packers.c: More source tweaks, tried to clean up places + where argv[1] was, instead of char *port; Added some more + cleanliness to pi_bind in the programs which didn't have it. + Still much more to go, at least without breaking much of the code + anyway + +2000-09-03 23:06 desrod + + * Makefile.in, Makefile.os2, addresses.c, ccexample.cc, debugsh.c, + dlpsh.c, getopt.c, getopt1.c, getrom.c, hinotes.c, + ietf2datebook.PL, install-datebook.c, install-hinote.c, + install-memo.c, install-todos.c, install-user.c, kittykiller.c, + memos.c, money2qif.c, parsedate.c, parsedate.y, pd-tty.c, + pi-csd.c, src/addresses.c, src/ccexample.cc, src/debugsh.c, + src/dlpsh.c, src/getopt.c, src/getopt1.c, src/getrom.c, + src/hinotes.c, src/ietf2datebook.PL, src/install-datebook.c, + src/install-hinote.c, src/install-memo.c, src/install-todos.c, + src/install-user.c, src/kittykiller.c, src/memos.c, + src/money2qif.c, src/parsedate.c, src/parsedate.y, src/pd-tty.c, + src/pi-csd.c, src/pilot-csd.c, src/pilot-debugsh.c, + src/pilot-dlpsh.c, src/pilot-hinotes.c, + src/pilot-ietf2datebook.pl, src/pilot-install-datebook.c, + src/pilot-install-hinote.c, src/pilot-install-memo.c, + src/pilot-install-todos.c, src/pilot-install-user.c, + src/pilot-memos.c, pi-getram.c, pi-getrom.c, pi-nredir.c, + pi-port.c, pilot-addresses.c, pilot-clip.c, pilot-debug.c, + pilot-dedupe.c, pilot-file.c, pilot-mail.c, pilot-prc.c, + pilot-schlep.c, pilot-xfer.c, read-expenses.c, read-ical.c, + read-todos.c, reminders.c, include/pi-dlp.h, include/pi-dlp.hxx, + include/pi-header.h, include/pi-memo.hxx, + include/pi-sockaddr.h.in, include/pi-version.h, + libpisock/address.c, libpisock/appinfo.c, libpisock/cmp.c, + libpisock/datebook.c, libpisock/dlp.c, libpisock/expense.c, + libpisock/hinote.c, libpisock/inet.c, libpisock/mail.c, + libpisock/memo.c, libpisock/money.c, libpisock/os2serial.c, + libpisock/padp.c, libpisock/pi-file.c, libpisock/serial.c, + libpisock/slp.c, libpisock/sync.c, libpisock/syspkt.c, + libpisock/todo.c, libpisock/unixserial.c, libpisock/utils.c, + libpisock/winserial.c, libpisync/sync.c, src/pi-getram.c, + src/pi-getrom.c, src/pi-nredir.c, src/pi-port.c, + src/pilot-addresses.c, src/pilot-clip.c, src/pilot-debug.c, + src/pilot-dedupe.c, src/pilot-file.c, src/pilot-getram.c, + src/pilot-getrom.c, src/pilot-mail.c, src/pilot-nredir.c, + src/pilot-port.c, src/pilot-prc.c, src/pilot-read-expenses.c, + src/pilot-read-ical.c, src/pilot-read-todos.c, + src/pilot-reminders.c, src/pilot-schlep.c, src/pilot-xfer.c, + src/read-expenses.c, src/read-ical.c, src/read-todos.c, + src/reminders.c, doc/man/pilot-link.7, doc/man/pilot-xfer.1, + doc/man/read-ical.1: + A ton of changes in this release. Below is a small list: + + Here's a short list of what I've done (by no means + complete) + + 1. I changed PilotUser to PalmUser in all relevant + places. This + had no direct affect on the code, but I'm doing this + so that + future plugins will function in a more "generic" way, + not bound + to "Pilot" devices specifically. Though this does not + affect + pilot-link, the authors of code which uses that must + now put an + #ifndef in their code when testing for versions of + pilot-link + (0.9.3 will use PilotUser, versions > 0.9.3 will now + use + PalmUser. + + 2. Added proper error trapping in pi_bind for all + programs which + used it, so incorrect port settings can be trapped, + and the + user notified. In some cases, you would just get + "Error: + pi_bind", which is not that descriptive. Fixed. + + 3. Added the ability to sync PQA files from PalmVII and + PalmVIIx + units. There were other things in the patch Tom sent + me which I + tried to integrate, but a -U option was conflicting + with + another option, so I had to rename (the other) option + to -I. I + do not have a PalmVIIx, only a PalmVII, so if someone + has a + VIIx, please test this and get back to me. + + 4. Added a "-a " option to archive (move) deleted + files + (during a "-s" sync command) to the specified + directory, rather + than just deleting them. + + 5. Added the Graffiti Shortcuts fix to pi-file.c and + pilot-xfer.c + + 6. Added a -F option to toggle the Backup code between + backing up + the RAM databases, and the ones in ROM. With the + advent of + FlashbuilderIII and now FlashPro, user apps may be + hiding in + the Flash ROM of a Palm III/IIIx/V. When the "rom" + databases + are being backed up, the code skips over any which + have a + creator that is composed entirely of lowercase letters + and/or + "_". This should keep the standard built-in apps from + needlessly getting backed up (since Palm has claimed + this + entire class of creator ids for themselves). + + 7. Also added a corresponding -O option which is sort of + the + opposite of -F -- it backs up ONLY the Flash (or ROM) + databases + which have creator ids composed entirely of lowercase + letters + and/or "_". (My use for this was to be able to run + prc2pilrc on + various of the PalmOS databases to see exactly how + their forms + were laid out. + + 8. Added a -q option which avoids printing out all the + "Skipping..." messages. This way, if you only have a + few + databases that need to be synced, the output won't + scroll off + the screen, and it will be easier to see what has + actually been + done. + + 9. Added a -c option which falls partway between -q and + the + previous behavior: for each database examined, "[ ## + ]" (where + ## is a monotonically increasing index number) is + printed at + the beginning of the line, with a "\r" but no "\n". + The effect + of this is to make evident that the backup code is + skipping + past lots of databases that don't need backing up. + + 10. Changed the default behavior to no longer back up the + database + named "Unsaved Preferences". Apparently, Palm asked + the + creator of BackupBuddy to make this change in his + code, as + restoring this database can cause trouble version 3.1 + of + PalmOS. + + 11. Added a -I option to revert to the original behavior + of + considering the "Unsaved Preferences" database for + backup. This + was originally a -U option, but the -U(pdate) option + made more + sense there. I named this one -I for -I(llegal) + databases. + *shrug* I couldn't think of a better one at the time. + =) + + 12. Changed the "Backup done." message to say either "RAM + backup + done.", "Flash backup done.", or "OS backup done", as + appropriate. + + 13. Modified dlp_ptohdate() to return a date outside of + the Pilot's + valid range of dates when fed a date with a zero year + field. + This zero year field seems to mean "never", or "no + date". + + 14. Added BSD/NetBSD to the list of systems for which the + sleeping_beauty define gets set. + + 15. Added a "-f file" option, to read memos from a + MemoDB.pdb file + that is already on-disk, rather than syncing them from + the + Palm. Stole the idea, and most of the code, from + read-todos. + + 16. Added a -Q option, which prevents + write_memo_in_directory from + printing its "Opening file ..." messages. + + 17. Fixed (admittedly with a hack) the pi_accept timeout + errors by + ignoring the 10th packet. Once we start to gut this + code, this + will be fixed in a proper fashion. For this release, + it would + have affected too much other reliant code, so I + implemented the + hack instead. + + 18. Increased the PATH_MAX for the device name in + libsock/libsockaddr.h.in to [255]. This needs to be + more + portable, but for the meantime, this will get everyone + by. + + 19. Added a -D, -T, and -t option to pilot-addresses. You + can now + output the file with headers intact. There's a small + buglet + here I'm tracking down, but it works in very basic + manner, and + I didn't break the previous working code, so consider + this + transitory. + + 20. Added pi-header.h to the files which could use it. + This adds a + bit of similarity (visually) to the application, as + well as + outputs the proper binary being used, and it's version + number. + Now all the binaries when run look the same. + + 21. Cleaned up the "Help()" and "Usage()" functions to + output + visually similar results. Some of the binaries had + options + which were not in the output of --help. I am going to + continue + adding longopt[] to the remaining code in place of + getopt, for + those which require it. There's also a lingering issue + with the + name of the port being 'device' in some places, + 'argv[0]' in + others, 'addr.pi_device' in some places, and 'port' + still in + others. Should clean that up and make a call to + pi-device or + some such. + + 22. Removed all of the relvant entries to "Pilot" in the + code and + replaced them with "Palm" where appropriate, as well + as nuked + the references to "US Robotics" from the man pages, + source + code, and other ancillary files. + + 23. Added the 'null date' fix to install-datebook to allow + proper + dating of units which exceed Palm threshholds or those + which + have no date. + + 24. Added a fix for databases > 255, so you can sync 256 + or more + databases to your Palm, without crashing. + +2000-09-03 22:12 desrod + + * build.logfile: Removed an errant build.logfile I left there by + accident, whoops + +2000-08-30 21:59 desrod + + * libpisock/address.c, libpisock/appinfo.c, libpisock/cmp.c, + libpisock/datebook.c, libpisock/dlp.c, libpisock/expense.c, + libpisock/hinote.c, libpisock/inet.c, libpisock/mail.c, + libpisock/memo.c, libpisock/money.c, libpisock/os2serial.c, + libpisock/padp.c, libpisock/pi-file.c, libpisock/slp.c, + libpisock/sync.c, libpisock/syspkt.c, libpisock/todo.c, + libpisock/utils.c, libpisock/winserial.c, libpisync/sync.c: Added + missing money.c, whoops, sorry guys! =) + +2000-07-30 20:51 desrod + + * build.logfile, ietf2datebook.PL, install-user.c, parsedate.c, + parsedate.y, pi-csd.c, pilot-debug.c, src/ietf2datebook.PL, + src/install-user.c, src/parsedate.c, src/parsedate.y, + src/pi-csd.c, src/pilot-csd.c, src/pilot-debug.c, + src/pilot-ietf2datebook.pl, src/pilot-install-user.c, + include/pi-config.h.in, libpisock/dlp.c, libpisock/slp.c: This is + the debug output patched version and also includes the rolled in + slp patch which will stop those pi_accept timeout errors. + +2000-07-30 20:18 desrod + + * ChangeLog, Makefile.in, Makefile.os2, README-Win32.txt, + configure, configure.in, ietf2datebook.PL, install-hinote.c, + kittykiller.c, pilot-xfer.c, doc/README-Win32.txt, + src/ietf2datebook.PL, src/install-hinote.c, src/kittykiller.c, + src/pilot-ietf2datebook.pl, src/pilot-install-hinote.c, + src/pilot-xfer.c, include/pi-appinfo.hxx, + include/pi-config-win32.h, include/pi-datebook.hxx, + include/pi-dlp.hxx, include/pi-macros.h, + include/pi-sockaddr-win32.h, include/pi-socket.h, + include/pi-source.h, include/pi-version.h, libpisock/cmp.c, + libpisock/dlp.c, libpisock/inet.c, libpisock/os2serial.c, + libpisock/padp.c, libpisock/serial.c, libpisock/slp.c, + libpisock/socket.c, libpisock/syspkt.c, libpisock/unixserial.c, + libpisock/utils.c, libpisock/winserial.c: May 10, 1999 Tilo + Christ 0.9.3 + + Fixed Win32 support. + + Applied patch by John Franks to inet.c + + Apr 26, 1999 Kenneth Albanowski 0.9.3 + + Upgrade configure to use autoconf 2.13. + + Installed the rest of Tilo's patches. + +2000-07-30 20:17 desrod + + * ChangeLog, configure, configure.in, ietf2datebook.PL, + src/ietf2datebook.PL, src/pilot-ietf2datebook.pl, pilot-dedupe.c, + src/pilot-dedupe.c, include/pi-socket.h, include/pi-source.h, + include/pi-version.h, libpisock/hinote.c, libpisock/serial.c, + libpisock/socket.c, doc/man/pilot-link.7: Apr 4, 1999 Kenneth + Albanowski 0.9.2 + + Please note a significant (but minor) change: the license + for the hinote + code in the pisock library has been changed to LGPL. In + the previous + release (0.9.1), it was GPL, which would prevent the + library from being + used in an LGPL manner. If you wish to use the pisock + library with the + LGPL license, please base your work on 0.9.2. + + Rewrote pilot-dedupe in a more sensible manner. (New + version could have + some bugs.) + + Added Tilo's changes to support "high" baud rates with + PILOTRATE + environment variable. Say "PILOTRATE=H115200" to specify + a high rate. + PILOTHIGHRATE variable is now ignored. + + Added Tilo's pi_setmaxspeed() function, and added initial + pi_getsockopt() support to retrieve current speed. + + Changed Python detection to support 1.5.1 installation. + +2000-07-30 20:16 desrod + + * ChangeLog, Makefile.in, Makefile.os2, getopt.c, hinotes.c, + ietf2datebook.PL, install-datebook.c, install-hinote.c, + install-memo.c, pi-csd.c, pi-getrom.c, read-ical.c, read-todos.c, + sync-plan.PL, src/getopt.c, src/hinotes.c, src/ietf2datebook.PL, + src/install-datebook.c, src/install-hinote.c, src/install-memo.c, + src/pi-csd.c, src/pi-getrom.c, src/pilot-csd.c, + src/pilot-getrom.c, src/pilot-hinotes.c, + src/pilot-ietf2datebook.pl, src/pilot-install-datebook.c, + src/pilot-install-hinote.c, src/pilot-install-memo.c, + src/pilot-read-ical.c, src/pilot-read-todos.c, + src/pilot-sync-plan.pl, src/read-ical.c, src/read-todos.c, + src/sync-plan.PL, include/pi-address.hxx, include/pi-hinote.h, + include/pi-source.h, include/pi-version.h, libpisock/dlp.c, + libpisock/hinote.c, libpisock/inet.c, libpisock/pi-file.c, + libpisock/serial.c, doc/man/install-hinote.1: Jan 14, 1999 + Kenneth Albanowski 0.9.1 + + Hi-Notes support (in 'hinotes' and 'install-hinote', + courtesy of Bill + Goodman, and Michael Bravo.) + + Install-memo improvements. + + read-ical improvements (?) regarding secret records and + alarms. + + Fixed pi-getrom's decoding of ROM version. (3.0 units + should now + download complete ROM image.) + + Installation of databases fixed to allow uploading of + databases with + zero-length resources. + + Direct support for "high" (nominally unsupported) baud + rates via + PILOTHIGHRATE environment variable. + +2000-07-30 20:15 desrod + + * COPYING.LIB, ChangeLog, Makefile.in, Makefile.os2, README, + ietf2datebook.PL, pi-getram.c, pi-getrom.c, read-todos.c, + src/ietf2datebook.PL, src/pi-getram.c, src/pi-getrom.c, + src/pilot-getram.c, src/pilot-getrom.c, + src/pilot-ietf2datebook.pl, src/pilot-read-todos.c, + src/read-todos.c, include/pi-version.h, libpisock/address.c, + libpisock/appinfo.c, libpisock/cmp.c, libpisock/datebook.c, + libpisock/dlp.c, libpisock/expense.c, libpisock/inet.c, + libpisock/mail.c, libpisock/memo.c, libpisock/os2serial.c, + libpisock/padp.c, libpisock/pi-file.c, libpisock/serial.c, + libpisock/slp.c, libpisock/socket.c, libpisock/syspkt.c, + libpisock/todo.c, libpisock/unixserial.c, libpisock/utils.c: Aug + 23, 1998 Kenneth Albanowski 0.9.0 + + Please note a significant change: the license for the + pisock library, + the C++ libary, and the Perl, Python, Tcl, and Java + bindings has been + changed from the GPL (GNU Public License) to the LGPL + (Library GNU + Public License). For more information, please see the + files COPYING.LIB, + and COPYING. + + If you have any reason to disagree with this change, + please contact me + as soon as possible. I have attempted to verify with all + affected + parties that this change is acceptable. + + This license change applies starting with release 0.9.0 + of pilot-link. + This change is not retroactive, and previous releases + (0.8.13, and + before) are still available, with all parts under the + GPL. + + In other news: + + pi-getrom fixed to get 2 Meg of ROM on a 3.0 device (by + working around a + bug in PalmOS 3.0.) + + read-todos modified to work with both a ToDoDB.pdb file + (as downloaded + from the device), as well as the database on the device. + + Tcl binding changed to remove "Pilot" from name. (I'm + only changing Tcl + at the moment, because nothing could possibly be relying + on it.) + +2000-07-30 20:13 desrod + + * ChangeLog, Makefile, Makefile.in, Makefile.os2, README, + config.cache, config.log, config.status, ietf2datebook.PL, + libtool, memos.c, money2qif.c, pi-port.c, pilot-addresses.c, + pilot-debug.c, pilot-mail.c, pilot-xfer.c, reminders.c, + sync-plan.PL, src/ietf2datebook.PL, src/memos.c, src/money2qif.c, + src/pi-port.c, src/pilot-addresses.c, src/pilot-debug.c, + src/pilot-ietf2datebook.pl, src/pilot-mail.c, src/pilot-memos.c, + src/pilot-port.c, src/pilot-reminders.c, src/pilot-sync-plan.pl, + src/pilot-xfer.c, src/reminders.c, src/sync-plan.PL, + include/pi-address.hxx, include/pi-appinfo.hxx, + include/pi-config.h, include/pi-datebook.hxx, include/pi-dlp.hxx, + include/pi-iambicExpense.hxx, include/pi-memo.hxx, + include/pi-money.h, include/pi-sockaddr.h, include/pi-todo.hxx, + include/pi-version.h, libpisock/pi-file.c, libpisock/socket.c, + doc/man/README, doc/man/pilot-link.7, doc/man/pilot-xfer.1, + tests/Makefile: May 11, 1998 Kenneth Albanowski 0.8.13 + + This version is an unchanged re-release of 0.8.12, which + was not + released properly. (0.8.12 archives actually contain + 0.8.11, mea culpa.) + +2000-07-30 20:10 desrod + + * Makefile, config.cache, config.log, config.status, + ietf2datebook.PL, libtool, src/ietf2datebook.PL, + src/pilot-ietf2datebook.pl, include/pi-config.h, + include/pi-sockaddr.h, tests/Makefile: May 7, 1998 Kenneth + Albanowski 0.8.12 + + Not much work has gone into pilot-link since the previous + release, the + main changes being several patches that have been + applied: + + David Warren's fix + for reminds.c. + + Dag Nygren's tickles for sync-plan. + + Russell Nelson's patches for + pilot-mail. + + Bodo Bellut's patch for pi-file + to better catch + errors. + + Jay Sekora's improved memos and + pilot-addresses. + + Rik Harris's patch to get + pi-port working. + + Fixed libsock/socket.c to not crash on + unbound/unconnected socket. + + Added Rui Oliveira's MoneyManager + code. + + Removed Java bin build directory stuff, it was broken. + + Also, I've decided that getopt() was a complete loss + where pilot-xfer is + concerned, so it now has manual argument processing. I + rather expect the + new code is buggy, too, but at least it will be the same + bugs for + everyone. + + Lastly, I've added the latest release of libtool, 1.2. + This should fix + some problems, but might well cause others. Let me know, + of course. + +2000-07-30 20:08 desrod + + * ChangeLog, README, ietf2datebook.PL, install-memo.c, + os2configure.cmd, pi-nredir.c, pilot-xfer.c, + src/ietf2datebook.PL, src/install-memo.c, src/pi-nredir.c, + src/pilot-ietf2datebook.pl, src/pilot-install-memo.c, + src/pilot-nredir.c, src/pilot-xfer.c, include/pi-version.h, + libpisock/os2serial.c, libpisock/utils.c: Feb 27, 1998 Kenneth + Albanowski 0.8.11 + + Sorry, no time for detail: + + - Java build changed, to store executables in separate + directory + - Minor patch to Perl binding + - Major patch to Python binding + - A few OS/2 improvements + + Note: I've seen an apparent problem with glibc2's + getopt, but this + is not confirmed. + +2000-07-30 20:07 desrod + + * ChangeLog, ietf2datebook.PL, pilot-xfer.c, src/ietf2datebook.PL, + src/pilot-ietf2datebook.pl, src/pilot-xfer.c, + include/pi-version.h, libpisock/address.c: Dec 20, 1997 + Kenneth Albanowski 0.8.10 Library changes: - + Bug affecting address book sorting corrected Utility + changes: - pilot-xfer mistake corrected (-b acted like + -u). + +2000-07-30 20:06 desrod + + * ChangeLog, Makefile.in, Makefile.os2, configure, configure.in, + getopt.c, getopt.h, getopt1.c, ietf2datebook.PL, install-memo.c, + memos.c, pilot-xfer.c, src/getopt.c, src/getopt.h, src/getopt1.c, + src/ietf2datebook.PL, src/install-memo.c, src/memos.c, + src/pilot-ietf2datebook.pl, src/pilot-install-memo.c, + src/pilot-memos.c, src/pilot-xfer.c, include/pi-version.h, + libpisock/dlp.c: Dec 14, 1997 Kenenth Albanowski 0.8.9 + Configuration changed: - added Python configuration + patches by Bill Janssen . + Library changes: - Modified emulation of DLP + NextRecInCat function. Utility changes: - + added GNU (glibc2) getopt, changed pilot-xfer to use long + options. - install-memos getopt tweak - + added patches by Jay Sekora to improve memos + - added Ian Goldberg's sensible name escape patches for + pilot-xfer (so that a database with a slash or + equals in the name is translated to something safe.) + - added slightly modified patches by Simon Burge + so that pilot-xfer does not have + to back up the entire Pilot each time. (added sync + and update modes). + +2000-07-30 20:05 desrod + + * ChangeLog, Makefile.in, Makefile.os2, configure, configure.in, + ietf2datebook.PL, install-memo.c, pi-nredir.c, pilot-debug.c, + src/ietf2datebook.PL, src/install-memo.c, src/pi-nredir.c, + src/pilot-debug.c, src/pilot-ietf2datebook.pl, + src/pilot-install-memo.c, src/pilot-nredir.c, + include/pi-config.h.in, include/pi-sockaddr.h.in, + include/pi-socket.h, include/pi-version.h, libpisock/padp.c, + libpisock/utils.c: Dec 7, 1997 Kenneth Albanowski 0.8.8 + Configuration changes: - add sa_len member to + pi_sockaddr, to match OS - include compatability code + for putenv Library changes: - Modified PADP + code to better cope with the timeout response of + PalmOS 2.0. (The result is _not_ faster response, but less + confusion.) Utility changes: - pilot-debug + has minimal feature support - install-memo has several + new options, provided by Paul Traina + . + +2000-07-30 20:04 desrod + + * ChangeLog, Makefile.in, Makefile.os2, aclocal.m4, configure, + configure.in, ietf2datebook.PL, pi-nredir.c, + src/ietf2datebook.PL, src/pi-nredir.c, + src/pilot-ietf2datebook.pl, src/pilot-nredir.c, + include/pi-config.h.in, include/pi-socket.h, tests/Makefile.in, + tests/Makefile.os2: Oct 7, 1997 Kenneth Albanowski 0.8.7 + Configuration changes: - install .hxx headers + - use $(MAKE) instead of make - added latest + libtool-1.0c Utility changes: - pi-nredir deals + with missing putenv or setenv Perl 5 binding changes: + - quote "index". - change usages of errno as a + member to errnop - fix some leaking newRV()'s. + +2000-07-30 20:03 desrod + + * ChangeLog, Makefile.in, Makefile.os2, README, addresses.c, + debugsh.c, dlpsh.c, getrom.c, ietf2datebook.PL, install-memo.c, + install-todos.c, memos.c, pi-getram.c, pi-getrom.c, pi-nredir.c, + pi-port.c, pilot-addresses.c, pilot-clip.c, pilot-dedupe.c, + pilot-mail.c, pilot-schlep.c, pilot-xfer.c, read-expenses.c, + read-ical.c, read-todos.c, reminders.c, src/addresses.c, + src/debugsh.c, src/dlpsh.c, src/getrom.c, src/ietf2datebook.PL, + src/install-memo.c, src/install-todos.c, src/memos.c, + src/pi-getram.c, src/pi-getrom.c, src/pi-nredir.c, src/pi-port.c, + src/pilot-addresses.c, src/pilot-clip.c, src/pilot-debugsh.c, + src/pilot-dedupe.c, src/pilot-dlpsh.c, src/pilot-getram.c, + src/pilot-getrom.c, src/pilot-ietf2datebook.pl, + src/pilot-install-memo.c, src/pilot-install-todos.c, + src/pilot-mail.c, src/pilot-memos.c, src/pilot-nredir.c, + src/pilot-port.c, src/pilot-read-expenses.c, + src/pilot-read-ical.c, src/pilot-read-todos.c, + src/pilot-reminders.c, src/pilot-schlep.c, src/pilot-xfer.c, + src/read-expenses.c, src/read-ical.c, src/read-todos.c, + src/reminders.c, include/pi-config.h.in, include/pi-socket.h, + libpisock/datebook.c, libpisock/expense.c, libpisock/pi-file.c, + libpisock/socket.c: Sep 14, 1997 Kenneth Albanowski 0.8.6 + Configuration changes: - skip sys/select.h if it is + not available Utility changes: - added + pi-getram utility to fetch RAM image. (Use -c switch if fetching + for Copilot). - added holey files to pi-getrom + All: - corrected miscellaneous C warnings + Documentation changes: - added program list to README + +2000-07-30 20:02 desrod + + * ChangeLog, Makefile.in, Makefile.os2, ietf2datebook.PL, + pilot-debug.c, sync-plan.PL, src/ietf2datebook.PL, + src/pilot-debug.c, src/pilot-ietf2datebook.pl, + src/pilot-sync-plan.pl, src/sync-plan.PL, include/pi-socket.h: + Sep 6, 1997 Kenneth Albanowski 0.8.5 Configuration + changes: - added patch for libtool 1.0b to prevent + extraneous 'n's. Utility changes: - + pilot-debug adjusted for release version of Tcl 8.0. - + sync-plan massively updated to support syncing multiple plan + database against a single Pilot, support for more then + one Pilot, working repetitions, general bug fixes, + etc. Perl 5 binding changes: - Several bug + fixes by Bharat. + +2000-07-30 20:01 desrod + + * ChangeLog, Makefile.in, Makefile.os2, README, TODO, aclocal.m4, + configure, configure.in, ietf2datebook.PL, sync-memodir.c, + sync-plan.PL, test-acceptor.c, test-connector.c, doc/TODO, + src/ietf2datebook.PL, src/pilot-ietf2datebook.pl, + src/pilot-sync-plan.pl, src/sync-plan.PL, include/pi-socket.h: + Aug 31, 1997 Kenneth Albanowski 0.8.4 Configuration + changes: - libtool 1.0b included (which means you can + say './libtool gdb pilot-mail') - 'dubious' directory + added Utility changes: - Added sync-plan module + to do complete Pilot<->Plan synchronization. Perl 5 + binding changes: - Several bug fixes by Bharat. + +2000-07-30 20:00 desrod + + * ChangeLog, ietf2datebook.PL, src/ietf2datebook.PL, + src/pilot-ietf2datebook.pl, include/pi-socket.h: Aug 24, 1997 + Kenneth Albanowski 0.8.3 Perl 5 binding changes: + - Default attributes of new records. - Generic + typedef for all pilot-link char* casts. - Added SvOK + and SvTYPE checks to all (?) SvRV extactions. - + Rewrote unpacking technique to deal with failed unpackings (due + to deleted records.) - Rewrote packing + technique to deal with deleted records (produce + empty result). - alarm->units returns text, not + numbes. - Fixed shadowing variable in + getNextModRecord. + +2000-07-30 19:59 desrod + + * ChangeLog, ietf2datebook.PL, pi-csd.c, read-ical.c, + src/ietf2datebook.PL, src/pi-csd.c, src/pilot-csd.c, + src/pilot-ietf2datebook.pl, src/pilot-read-ical.c, + src/read-ical.c, include/pi-socket.h, libpisock/dlp.c: Aug 17, + 1997 Kenneth Albanowski 0.8.2 Utility changes: + - read-ical: still more oops. - pi-csd: scrap + ifr_netmask. + +2000-07-30 19:57 desrod + + * ChangeLog, Makefile.in, Makefile.os2, configure, configure.in, + ietf2datebook.PL, install-datebook.c, pi-csd.c, pi-nredir.c, + pilot-mail.c, pilot-undelete.PL, pilot-undelete.pl, pilot-xfer.c, + read-expenses.c, read-ical.c, reminders.c, src/ietf2datebook.PL, + src/install-datebook.c, src/pi-csd.c, src/pi-nredir.c, + src/pilot-csd.c, src/pilot-ietf2datebook.pl, + src/pilot-install-datebook.c, src/pilot-mail.c, + src/pilot-nredir.c, src/pilot-read-expenses.c, + src/pilot-read-ical.c, src/pilot-reminders.c, + src/pilot-undelete.PL, src/pilot-undelete.pl, src/pilot-xfer.c, + src/read-expenses.c, src/read-ical.c, src/reminders.c, + include/pi-datebook.h, include/pi-dlp.h, include/pi-expense.h, + include/pi-mail.h, include/pi-socket.h, libpisock/datebook.c, + libpisock/expense.c, libpisock/inet.c, libpisock/mail.c, + libpisock/memo.c, libpisock/pi-file.c, libpisock/utils.c, + doc/man/ietf2datebook.1, doc/man/install-datebook.1, + tests/packers.c: Aug 9, 1997 Kenneth Albanowski 0.8.1 + Configuration changes: - A few tweaks for Java + and OS/2. Pisocket library changes: - For + datebook packer code: repeatOn split into repeatDay and + repeatDays. - Fixed pi-file crash on records larger + then 64K. (Note that the Pilot itself cannot deal + with records larger then 64K!) - pi-csd now tries to + cope better with missing ifr_netmask. - pi-nredir: + setenv scrapped. - pilot-mail: Added x-mailer header, + and avoid preprending dashes to signature if it + already has them. - pilot-xfer: tried to fix optind. + Again. - read-ical: oops. Utility changes: + - Added installdatebook and ietf2datebook, both provided + by Tero Kivinen Java + binding changes: - Now compiles with JDK 1.1. + - All standard Pilot databases support with complete + packer/unpacker support. - File access + added. - All enumeration record values changed over to + enumeration objects. - All bit-fields replaced with + individual items. Perl 5 binding changes: - + All enumeration record values changed over to text values. + - Support for mail preferences added. - Expense + database supported. - All bit-fields replaced with + individual items. - Open command accepts text mode + ("rxws") as well as numeric. Python binding changes: + - All enumeration record values changed over to text + values. + +2000-07-30 19:54 desrod + + * ChangeLog, Makefile.in, Makefile.os2, TODO, addresses.c, + configure, configure.in, dlpsh.c, install-memo.c, + install-todos.c, install-user.c, memos.c, pd-tty.c, pi-csd.c, + pi-getrom.c, pi-nredir.c, pilot-addresses.c, pilot-debug.c, + pilot-file.c, pilot-mail.c, pilot-xfer.c, read-expenses.c, + read-ical.c, read-todos.c, reminders.c, validate.cc, doc/TODO, + src/addresses.c, src/dlpsh.c, src/install-memo.c, + src/install-todos.c, src/install-user.c, src/memos.c, + src/pd-tty.c, src/pi-csd.c, src/pi-getrom.c, src/pi-nredir.c, + src/pilot-addresses.c, src/pilot-csd.c, src/pilot-debug.c, + src/pilot-dlpsh.c, src/pilot-file.c, src/pilot-getrom.c, + src/pilot-install-memo.c, src/pilot-install-todos.c, + src/pilot-install-user.c, src/pilot-mail.c, src/pilot-memos.c, + src/pilot-nredir.c, src/pilot-read-expenses.c, + src/pilot-read-ical.c, src/pilot-read-todos.c, + src/pilot-reminders.c, src/pilot-xfer.c, src/read-expenses.c, + src/read-ical.c, src/read-todos.c, src/reminders.c, + src/validate.cc, include/pi-address.h, include/pi-appinfo.h, + include/pi-appinfo.hxx, include/pi-config.h.in, + include/pi-datebook.h, include/pi-dlp.h, include/pi-expense.h, + include/pi-iambicExpense.h, include/pi-mail.h, include/pi-memo.h, + include/pi-socket.h, include/pi-source.h, include/pi-todo.h, + libpisock/address.c, libpisock/appinfo.c, libpisock/datebook.c, + libpisock/dlp.c, libpisock/expense.c, libpisock/mail.c, + libpisock/memo.c, libpisock/pi-file.c, libpisock/todo.c, + libpisock/utils.c, tests/Makefile.in, tests/Makefile.os2, + tests/packers.c: Aug 4, 1997 Kenneth Albanowski 0.8.0 + + Configuration changes: + - Added dependancy checking to utilties. + - Touched up OS/2 configuration slightly. + - Added detection of uname and other SunOS (or was it + Solaris?) foibles. + Pisocket library changes: + - Changes to nearly all structure definitions, though + these are mostly + just changes to the names of members. The names have + been changed to + follow a common naming scheme ("thisIsAMethod", + "ramSize", etc.), + to remove chopped words, and to let the interpreter + bindings use the + same member names as the C code. The new names are + frozen (I hope) + and will not change again. + - Category information has been broken out of the + appInfo structures + into a separate structure, since it was producing + needless + duplicated code. + - All of the database record packing code had been + tuned and tested, + and now pay attention to their arguments. In + particular, both the + packers and unpackers return how many bytes were used + (or zero if + the buffer wasn't long enough), and the packer will + return the + desired buffer length if it is passed a buffer + address of zero. + These changes allow programs to let the packer + calculate how much + buffer space should be allocated. + - Version number of shared library bumped up to + indicate incompatible changes. + Test code changes: + - Added test code to check all packers and unpackers + for proper operation. + Utility changes: + - Added pi-getrom program to fetch a Pilot's ROM + through RPC calls. + Be careful, this program _could_ cause your Pilot to + lock up, so + back up first. But I'd love to hear about any + problems. + - pi-csd tries to get the host name via uname if + gethostname isn't available. + - Added backlight support to remote UI in pilot-debug. + - Added Ian G.'s pilot-debug patches to support pasting + text into the remote UI. + - All utilities modified to match changes to pisocket + library. + Java binding changes: + - Dlp exceptions now contain (through hard effort) the + Dlp error value + - Use slightly less deprecated Date interface (bleagh!) + - Structures modified to match new definitions. + - Added resetNext & callApplication methods. + - Adapted packers to new structures -- broke off + categories into + a subclass of AppBlock. + - Added support for all standard databases except + Expense. + - Changed toString mechanism to allow superclasses to + build up description. + - Added newRecord, newResource, newAppBlock, + newSortBlock and newPref methods. + - Java structures and methods are freezing if not + frozen. + Perl 5 binding changes: + - Structures modified to match new definitions. + - Perl structures and methods are freezing if not + frozen. + - Renamed methods to match Java binding ("likeThis", + "ramSize", "getRecord", etc.) + Python binding changes: + - Structures modified to match new definitions. + - Python structures and methods are freezing if not + frozen. + - Renamed methods to match Java binding. + +2000-07-30 19:51 desrod + + * ChangeLog, Makefile.in, Makefile.os2, configure, configure.in, + pi-csd.c, pi-nredir.c, read-ical.c, src/pi-csd.c, + src/pi-nredir.c, src/pilot-csd.c, src/pilot-nredir.c, + src/pilot-read-ical.c, src/read-ical.c, include/pi-config.h.in, + include/pi-socket.h, libpisock/inet.c, libpisock/serial.c, + libpisock/socket.c: Jul 26, 1997 Kenneth Albanowski 0.7.6 + + Configuration changes: + - No more complaints if the Java Development Kit isn't + installed. + - sockaddr.sa_len member is detected (for pi-csd) + Pisocket library changes: + - Support for Palm's TCP/IP NetSync(tm) has been added. + To use this, + give a program like pilot-xfer a port of '.' (a + single period). You + will also need to run (perhaps in the background) + pi-csd, with its + settings configured to match the PC NetSync(tm) + settings on your + PalmPilot(tm). + - Leak of laddr/raddr members fixed. + Utility changes: + - Added pi-csd program to allow network + synchronization. This program + must be running for your computer to accept + NetSync(tm) connections + from a PalmPilot(tm). You must of course also run + whatever utility + or synchronization program you want the PalmPilot(tm) + to connect to. + - Added pi-nredir to allow a normal (or network, for + that matter) + connection to be redirected over the network to + pilot-link or the + PalmPilot(tm) Desktop. + - Read-ical patches by Ian G. applied, allowing use of + a default port, + and a method of hiding the text of datebook entries. + Java binding changes: + - Todo application supported. + - You can now open a database using an instance of + Pdapilot.Database + instead of a database name. + +2000-07-30 19:49 desrod + + * ChangeLog, Makefile.in, Makefile.os2, configure, configure.in, + pilot-mail.c, pilot-undelete.pl, pilot-xfer.c, read-ical.c, + src/pilot-mail.c, src/pilot-read-ical.c, src/pilot-xfer.c, + src/read-ical.c, include/pi-config.h.in, include/pi-mail.h, + include/pi-socket.h, libpisock/dlp.c, libpisock/mail.c: Jul 22, + 1997 Kenneth Albanowski 0.7.5 + + Configuration changes: + - Uninstalled binaries should better cope with symlinks + or moving + their directory. + - The Java Development Kit is automatically detected. + Build changes: + - Man pages probably can be installed now + - Added Mike Jarabek's latest OS/2 patches, which + should allow a + shared libpisock dll to be built and used. + Pisoket library changes: + - Mail preferences renamed from "MailPrefs" to + "MailPref1". + - Corrected bug in retrieving NetSync info if fields + were empty. + Utility changes: + - Modified pilot-undelete slightly to match new Perl5 + module. + - Added pilot-xfer patches (slightly modified) by + Christopher Chan-Nui + . These allow default port + via PILOTPORT, + and multiple files/db's with a command. + Java binding changes: + - New! All of the libpisock functionality is accessible + from the Java + interpreter. The only missing parts are RPC, + CallApplication, and + the packers other then Memo. + Perl 5 binding changes: + - Completely revised record storage mechanism uses + objects to describe + records, resources, appblocks, sortblocks, and prefs. + All current code using the Perl5 module will need to + be rewritten, + though the changes will probably be minimal. + The upshot of this change is that record + packing/unpacking is now + automated. + Python binding changes: + - Preferences may be retrieved from an open DB. + +2000-07-30 19:47 desrod + + * ChangeLog, Makefile.in, Makefile.os2, TODO, aclocal.m4, + configure, configure.in, pd-tty.c, pilot-mail.c, doc/TODO, + src/pd-tty.c, src/pilot-mail.c, include/pi-inet.h, + include/pi-inetserial.h, include/pi-macros.h, include/pi-mail.h, + include/pi-serial.h, include/pi-socket.h, include/pi-source.h, + libpisock/os2serial.c, libpisock/serial.c, libpisock/socket.c, + libpisock/utils.c: Jul 13, 1997 Kenneth Albanowski 0.7.4 + + Configuration changes: + - Integrated libtool 1.0 (thanks, Gord!) + - Automatic detection of GNU readline 2.0 and 2.1 (or + later). + - libtool removed entirely from C++ section + - Itcl automatically detected, and tcl/tk from an itcl + installation + will be detected. Itcl is not currently used, + however. + - Adjusted to (re)support OS/2 compilation. + - Revised OS/2 makefiles by Mike Jarabek. + Pisocket library changes: + - Fixed up a few headers to use PI_ARGS. + - Added compareTm function to compare tm's. + Utilities: + - pilot-debug can now automatically utilise GNU + readline 2.0 or 2.1 + for decent line-editing support, and in theory + anything past 2.1 + should work as well. + - pilot-mail includes patches by Diego Zamboni + + to support reading of MH mail folders. (Note: this + code does not + support file or folder locking, or non-contiguous + message numbers.) + Perl 5 binding changes: + - various dlp constants are now exported by PDA::Pilot. + - CompareTm function exportable which takes two tm + style listrefs + and returns <0, 0, or >0. + - Fixed nasty bugs on packing appointments with alarms + (alarm wouldn't + trigger properly), and on appointments without + descriptions + (Datebook would crash). + - Modified typemap so module will not fail on earlier + versions of Perl. + Python binding changes: + - SetRecord now takes an optional second argument. If a + non-zero integer, + the record will not be packed, and only the "raw" + attribute will + be used. + Tcl binding changes: + - Large chunks rewritten to increase functionality. + - Small, subtle, incomprehensible, and potentially + bug-ridden chunks rewritten + to make channel code compatible with versions of Tcl + prior to 8.0. + - "make test" should work. + - GetRecord and SetRecord commands supported, with + packer support. + - Only memo records currently have packer support. + Databases without defined + packers cannot be read. + +2000-07-30 19:45 desrod + + * ChangeLog, Makefile.in, Makefile.os2, README, configure, + configure.in, pilot-debug.c, pilot-undelete, pilot-undelete.pl, + src/pilot-debug.c, include/pi-socket.h, include/pi-source.h, + libpisock/dlp.c, libpisock/syspkt.c: Jul 6, 1997 Kenneth + Albanowski 0.7.3 + + Heavily modifed Python binding to use OO approach to + record manipulation + and packing. Read the README and test.py files in + the Python + directory for more information. + Added 'struct sockaddr;' reference to pi-socket.h to + allow use by code + that has not pulled in the full set of socket + headers. + Added to configure the --with-cpp and --with-perl5 + options to allow + choice (or avoidance, via '--without') of the C++ + compiler and Perl + 5 interpreter, respectively. ('onfigure --help' + for list.) + Once library is built, interpreter bindings may be built + via 'make Perl5', + 'make Tcl', or 'make Python'. + Changed configure interpreter selection to try to choose + newer interpreter + versions over older ones. + Removed shared library generation from C++ library (it + has too much of a + chance of breaking.) + Reversed -I directives in Makefiles so that current + headers come before + installed headers. + +2000-07-30 19:39 desrod + + * ChangeLog, Makefile.in, Makefile.os2, aclocal.m4, configure, + configure.in, parsedate.c, parsedate.y, src/parsedate.c, + src/parsedate.y, pilot-mail.c, sync-memodir.c, src/pilot-mail.c, + include/pi-socket.h, libpisock/serial.c, libpisock/unixserial.c: + Jun 29, 1997 Kenneth Albanowski 0.7.2 + + Complete reimplemenation of library production, using + version 0.9h of + Gordon Matzigkeit's libtool package. + Added Tcl, Tk, & Python auto-detection to configure + script (use + 'configure --help' to see what options can be + modified.) + Rewrote Python compilation to use standard dynamic + compilation technique. + Rewrote Tcl compilation to use libtool and to generate + binaries. + Added David Warren's patch to add serial delays for SGI. + +2000-07-30 19:24 desrod + + * ChangeLog, Makefile.in, Makefile.os2, install-user.c, + parsedate.c, parsedate.y, pilot-file.c, pilot-xfer.c, + read-ical.c, sync-memodir.c, src/install-user.c, src/parsedate.c, + src/parsedate.y, src/pilot-file.c, src/pilot-install-user.c, + src/pilot-read-ical.c, src/pilot-xfer.c, src/read-ical.c, + include/pi-dlp.h, include/pi-file.h, include/pi-socket.h, + libpisock/dlp.c, libpisock/padp.c, libpisock/pi-file.c, + libpisock/serial.c, libpisock/slp.c, libpisock/socket.c, + libpisock/unixserial.c: Jun 22, 1997 Kenneth Albanowski 0.7.1 + + Added Ian's patches to install man-pages, and dump + records in + pilot-file. + Added Andreas Wrede's patch to sync-ical. + Added Tero Kivinen's patch to add RecordID to read-ical. + Modified PI_AF_* constants to reduce likelyhood of + conflicting with + AF_INET constant. + Added a new UNIX serial pause after baud rate negotation + even if the + rate didn't change. This prevents a dropped + packet. + Tuned serial pauses before and after baud rate change. I + am now losing + no packets at all. OS/2 code may need to be + adjusted in a similar + manner. + Added pi_file_merge routine and -m switch to pilot-xfer. + This merges + record from a file into an existing database, + which is especially + useful for Dinkypad. Note that this could + potentially damage some + third-party application databases. + +2000-07-30 19:23 hacker + + * .gdb_history: Jun 14, 1997 Kenneth Albanowski 0.7.0 + + Substantial modification to socket implementation. The + serial and socket + layers now have significantly more separation and + modularity, with + the goal of allowing clean serial + implementations, across both + architectures (os2, amiga, unix, etc.) and + interfaces (direct + serial, networked serial redirector, etc.). A + higher layer will + allow for connections that do not use the serial + interface and + protocols at all, though this is not utilized in + this version. + All pi_ functions that deal with addresses now use + sockaddr struct * + params instead of pi_sockaddr. Any C programs + using pilot-link + directly will need to be modified. The parameter + is still a + pi_sockaddr, but it must be cast to (struct + sockaddr*), as with the + genuine socket functions. + The pi_port element has been removed from the pi_sockaddr + structure. Any + C code constructing these structures will have to + be modified. + All included programs and language bindings have been + modified as + described above. + SLP, PADP, and syspackets recoded slightly to better deal + with xid + generation. + The OS/2 and UNIX serial code was stripped out of + serial.c, and placed + into os2serial.c and unixserial.c. If you wish to + port the serial + layer, please do so in a new file (amigaserial.c, + etc.) + Added '-2' switch to getrom, which should retrieve the + entire ROM if + a PalmPilot and getrom2.prc are used. + Getrom2.prc included from the latest version of CoPilot + (I hope Greg + doesn't mind.) + +2000-07-30 19:23 desrod + + * ChangeLog, Makefile.in, Makefile.os2, addresses.c, debugsh.c, + dlpsh.c, getrom.c, getrom2.prc, install-memo.c, install-todos.c, + install-user.c, memos.c, parsedate.c, parsedate.y, pi-port.c, + pilot-addresses.c, pilot-clip.c, pilot-debug.c, pilot-dedupe.c, + pilot-mail.c, pilot-schlep.c, pilot-xfer.c, read-expenses.c, + read-ical.c, read-todos.c, reminders.c, sync-memodir.c, + test-acceptor.c, test-connector.c, src/addresses.c, + src/debugsh.c, src/dlpsh.c, src/getrom.c, src/install-memo.c, + src/install-todos.c, src/install-user.c, src/memos.c, + src/parsedate.c, src/parsedate.y, src/pi-port.c, + src/pilot-addresses.c, src/pilot-clip.c, src/pilot-debug.c, + src/pilot-debugsh.c, src/pilot-dedupe.c, src/pilot-dlpsh.c, + src/pilot-install-memo.c, src/pilot-install-todos.c, + src/pilot-install-user.c, src/pilot-mail.c, src/pilot-memos.c, + src/pilot-port.c, src/pilot-read-expenses.c, + src/pilot-read-ical.c, src/pilot-read-todos.c, + src/pilot-reminders.c, src/pilot-schlep.c, src/pilot-xfer.c, + src/read-expenses.c, src/read-ical.c, src/read-todos.c, + src/reminders.c, src/prc/getrom2.prc, include/pi-config.h.in, + include/pi-inet.h, include/pi-inetserial.h, include/pi-net.h, + include/pi-serial.h, include/pi-socket.h, include/pi-source.h, + include/pi-syspkt.h, libpisock/cmp.c, libpisock/net.c, + libpisock/os2serial.c, libpisock/padp.c, libpisock/serial.c, + libpisock/slp.c, libpisock/socket.c, libpisock/syspkt.c, + libpisock/unixserial.c: Jun 14, 1997 Kenneth Albanowski 0.7.0 + + Substantial modification to socket implementation. The + serial and socket + layers now have significantly more separation and + modularity, with + the goal of allowing clean serial + implementations, across both + architectures (os2, amiga, unix, etc.) and + interfaces (direct + serial, networked serial redirector, etc.). A + higher layer will + allow for connections that do not use the serial + interface and + protocols at all, though this is not utilized in + this version. + All pi_ functions that deal with addresses now use + sockaddr struct * + params instead of pi_sockaddr. Any C programs + using pilot-link + directly will need to be modified. The parameter + is still a + pi_sockaddr, but it must be cast to (struct + sockaddr*), as with the + genuine socket functions. + The pi_port element has been removed from the pi_sockaddr + structure. Any + C code constructing these structures will have to + be modified. + All included programs and language bindings have been + modified as + described above. + SLP, PADP, and syspackets recoded slightly to better deal + with xid + generation. + The OS/2 and UNIX serial code was stripped out of + serial.c, and placed + into os2serial.c and unixserial.c. If you wish to + port the serial + layer, please do so in a new file (amigaserial.c, + etc.) + Added '-2' switch to getrom, which should retrieve the + entire ROM if + a PalmPilot and getrom2.prc are used. + Getrom2.prc included from the latest version of CoPilot + (I hope Greg + doesn't mind.) + +2000-07-30 19:21 hacker + + * .gdb_history: Jun 8, 1997 Kenneth Albanowski 0.6.6 + + Added highly experimental networked connections. The + concept is to run + pi-port on a machine with a serial port, and have + the real pilot + utilities connect to this server via TCP/IP. The + current code is + supposed to work, but unfortunately is broken at + the moment. + Added experimental Tcl 8.0b1 binding. + Modified Perl5 binding slightly, towards eventual goal of + automatic + app-specific record packing and unpacking. + Modified Python test code slightly to demonstrate + changing the Pilot's display + during HotSync. + Added CreateDB to Perl5 binding. + pilot-debug patched to compile under Tcl8.0b1. + pilot-xfer now properly fails if it cannot find a + database to fetch. + Fixed odd-data length problem in RPC code so pilot-clip + can now + successfully set the clipboard. + +2000-07-30 19:21 desrod + + * ChangeLog, Makefile.in, Makefile.os2, getrom.c, parsedate.c, + parsedate.y, pi-port.c, pilot-clip.c, pilot-debug.c, + pilot-xfer.c, src/getrom.c, src/parsedate.c, src/parsedate.y, + src/pi-port.c, src/pilot-clip.c, src/pilot-debug.c, + src/pilot-port.c, src/pilot-xfer.c, include/pi-net.h, + include/pi-serial.h, include/pi-source.h, libpisock/cmp.c, + libpisock/dlp.c, libpisock/net.c, libpisock/padp.c, + libpisock/pi-file.c, libpisock/serial.c, libpisock/socket.c, + libpisock/syspkt.c: Jun 8, 1997 Kenneth Albanowski 0.6.6 + + Added highly experimental networked connections. The + concept is to run + pi-port on a machine with a serial port, and have + the real pilot + utilities connect to this server via TCP/IP. The + current code is + supposed to work, but unfortunately is broken at + the moment. + Added experimental Tcl 8.0b1 binding. + Modified Perl5 binding slightly, towards eventual goal of + automatic + app-specific record packing and unpacking. + Modified Python test code slightly to demonstrate + changing the Pilot's display + during HotSync. + Added CreateDB to Perl5 binding. + pilot-debug patched to compile under Tcl8.0b1. + pilot-xfer now properly fails if it cannot find a + database to fetch. + Fixed odd-data length problem in RPC code so pilot-clip + can now + successfully set the clipboard. + +2000-07-30 19:20 desrod + + * ChangeLog, Makefile.os2, parsedate.c, parsedate.y, + src/parsedate.c, src/parsedate.y, include/pi-macros.h, + include/pi-serial.h, include/pi-socket.h: Jun 1, 1997 Kenneth + Albanowski 0.6.5 Patches for OS/2 supplied by Mike + Jarabek . + +2000-07-30 19:20 desrod + + * ChangeLog, Makefile.in, Makefile.os2, dlpsh.c, parsedate.c, + parsedate.y, pilot-mail.c, src/dlpsh.c, src/parsedate.c, + src/parsedate.y, src/pilot-dlpsh.c, src/pilot-mail.c, + include/pi-macros.h, include/pi-socket.h, include/pi-source.h, + libpisock/dlp.c, libpisock/serial.c, libpisock/slp.c, + libpisock/socket.c, libpisock/utils.c: May 25, 1997 Kenneth + Albanowski 0.6.4 + + Added pi_watchdog function to automatically tickle + sockets. + Modified dlpsh to use watchdog. + Added get_s/set_s macros to manipulate signed Pilot + values. The old routines + are now officially unsigned. + Modified get/set float routines to use signed macros. + Added scripts/struct.pl, a first attempt at a portable + structure preprocessor. + Modified libsock/dlp.c to use struct.pl for + ReadStorageInfo. + +2000-07-30 19:18 desrod + + * ChangeLog, parsedate.c, parsedate.y, validate.cc, + src/parsedate.c, src/parsedate.y, src/validate.cc, + include/pi-datebook.hxx, include/pi-iambicExpense.hxx, + libpisock/dlp.c, libpisock/serial.c: May 18, 1997 Kenneth + Albanowski 0.6.3 + + Serial code uses PILOTPORT environment variable if a port + isn't specified (but + note that the included utilities do not yet make use of + this.) + Perl 5 module now supports GetAppPref and SetAppPref + functions (only the + former is tested.) + Removed 'bool' from Perl 5 code. + Python SetAppPref function modified to match Perl calling + sequence. + Added RPC calls to Python interface (check out test.py). + Revised various DLP functions to check for overlarge + input buffers. + New C++ code revision. + +2000-07-30 19:18 desrod + + * ChangeLog, Makefile.in, Makefile.os2, ccexample.cc, configure, + configure.in, getrom.c, iambicexample.cc, parsedate.c, + parsedate.y, pd-tty.c, pilot-clip.c, pilot-debug.c, pilot-mail.c, + pilot-undelete, validate.cc, src/ccexample.cc, src/getrom.c, + src/iambicexample.cc, src/parsedate.c, src/parsedate.y, + src/pd-tty.c, src/pilot-clip.c, src/pilot-debug.c, + src/pilot-mail.c, src/validate.cc, include/pi-address.h, + include/pi-address.hxx, include/pi-appinfo.h, + include/pi-appinfo.hxx, include/pi-args.h, include/pi-cmp.h, + include/pi-datebook.h, include/pi-datebook.hxx, include/pi-dlp.h, + include/pi-expense.h, include/pi-file.h, + include/pi-iambicExpense.h, include/pi-iambicExpense.hxx, + include/pi-macros.h, include/pi-mail.h, include/pi-memo.h, + include/pi-memo.hxx, include/pi-padp.h, include/pi-serial.h, + include/pi-slp.h, include/pi-socket.h, include/pi-source.h, + include/pi-syspkt.h, include/pi-todo.h, include/pi-todo.hxx, + libpisock/socket.c, libpisock/utils.c: May 11, 1997 Kenneth + Albanowski 0.6.2 + + Added pilot-undelete utility to un-archive records. Needs + Perl 5. + Added pilot-clip to retrieve (can not yet set) the + pilot's clipboard. + Repaired Python SetRecord and SetResource, which were + broken. + Added Unpack, Pack, PackAppBlock & UnpackAppBlock methods + to Python DLP + object. (These automatically route to MemoUnpack, + TodoUnpack, etc.) + Removed all bool, true, & false from C++ code. + If Perl 5 is around, use the flags it calculated for + dynamically loadable code + to render the libraries position independant. + (Experimental/hack.) + Perl and Python examples now prompt for serial port. + +2000-07-30 19:16 desrod + + * ChangeLog, Makefile.in, Makefile.os2, addresses.c, ccexample.cc, + config.uue, configure, src/addresses.c, src/ccexample.cc, + configure.in, debugsh.c, dlpsh.c, getrom.c, install-memo.c, + install-todos.c, install-user.c, memos.c, parsedate.c, + parsedate.y, pilot-addresses.c, pilot-debug.c, pilot-dedupe.c, + pilot-mail.c, pilot-prc.c, pilot-schlep.c, pilot-xfer.c, + read-expenses.c, read-ical.c, read-todos.c, reminders.c, + sync-memodir.c, test-acceptor.c, test-connector.c, src/debugsh.c, + src/dlpsh.c, src/getrom.c, src/install-memo.c, + src/install-todos.c, src/install-user.c, src/memos.c, + src/parsedate.c, src/parsedate.y, src/pilot-addresses.c, + src/pilot-debug.c, src/pilot-debugsh.c, src/pilot-dedupe.c, + src/pilot-dlpsh.c, src/pilot-install-memo.c, + src/pilot-install-todos.c, src/pilot-install-user.c, + src/pilot-mail.c, src/pilot-memos.c, src/pilot-prc.c, + src/pilot-read-expenses.c, src/pilot-read-ical.c, + src/pilot-read-todos.c, src/pilot-reminders.c, + src/pilot-schlep.c, src/pilot-xfer.c, src/read-expenses.c, + src/read-ical.c, src/read-todos.c, src/reminders.c, + include/pi-address.h, include/pi-appinfo.h, + include/pi-config.h.in, include/pi-datebook.h, include/pi-dlp.h, + include/pi-file.h, include/pi-macros.h, include/pi-memo.h, + include/pi-socket.h, include/pi-source.h, include/pi-todo.h, + libpisock/address.c, libpisock/datebook.c, libpisock/dlp.c, + libpisock/memo.c, libpisock/pi-file.c, libpisock/serial.c, + libpisock/slp.c, libpisock/socket.c, libpisock/syspkt.c, + libpisock/utils.c: Mar 4, 1997 Kenneth Albanowski 0.6.1 + + Perl5 support nearly complete. Documentation less so. + Python support nearly complete. Documentation less so. + Scott's C++ and uchar_t cleanup. + DLP ResetDBIndex now resets emulated category iterator. + Fixed lib/serial variable definition. Really. + Fixed long-standing bug in terminating card + manufacturer's name. + Fixed socket code leaking file descriptors and double + closing. + Modified socket code to return separate fd from + pi_accept(). + Added suffixes and .cc definition to makefiles. + Applied Mark Eichin's configure and + makefile + portability patches. + Applied David Warren's + makefile and + socket portability patches. + +2000-07-30 19:13 desrod + + * ChangeLog, Makefile.in, Makefile.os2, README, ccexample.cc, + configure, configure.in, parsedate.c, parsedate.y, pd-tty.c, + pilot-debug.c, pilot-mail.c, pilot-xfer.c, read-expenses.c, + validate.cc, src/ccexample.cc, src/parsedate.c, src/parsedate.y, + src/pd-tty.c, src/pilot-debug.c, src/pilot-mail.c, + src/pilot-read-expenses.c, src/pilot-xfer.c, src/read-expenses.c, + src/validate.cc, include/pi-address.h, include/pi-appinfo.h, + include/pi-config.h.in, include/pi-datebook.h, + include/pi-expense.h, include/pi-macros.h, include/pi-memo.h, + include/pi-todo.h, libpisock/address.c, libpisock/cmp.c, + libpisock/datebook.c, libpisock/dlp.c, libpisock/expense.c, + libpisock/mail.c, libpisock/memo.c, libpisock/padp.c, + libpisock/pi-file.c, libpisock/serial.c, libpisock/slp.c, + libpisock/socket.c, libpisock/sync.c, libpisock/syspkt.c, + libpisock/todo.c, libpisock/utils.c, libpisync/sync.c: Apr 28, + 1997 Kenneth Albanowski 0.6.0 + + Primary feature: optional C++ support. If you have a C++ + compiler, you'll + get new code, and a new library. + Added Scott Grosch's C++ code, and + completely + mucked up autoconf getting it to understand optional C++ + code. + Paul Traina's patches for + pilot-mail's use of getopt. + Fixed simple variable definition problem affecting SGTYY in + serial.c + Fixed lib/Makefile trailing slash and object duplication. + Added pd-tty.c to break out tty/async display code from + pilot-debug. + Added GNU readline 2.0 support to pilot-debug (see Makefile). + Added complete Pilot Expense application DB support. + Added read-expenses program to document expenses reading. + Modified lib/pi-file so it will not even attempt to install + deleted records + (even if the DB contains them) on an old Pilot, but will + retrieve + them if possible. + +2000-07-30 19:02 desrod + + * ChangeLog, Makefile.in, Makefile.os2, README, config.uue, + configure, configure.in, parsedate.c, parsedate.y, pilot-mail.c, + src/parsedate.c, src/parsedate.y, src/pilot-mail.c, + include/pi-address.h, include/pi-cmp.h, include/pi-config.h.in, + include/pi-datebook.h, include/pi-dlp.h, include/pi-expense.h, + include/pi-file.h, include/pi-macros.h, include/pi-mail.h, + include/pi-memo.h, include/pi-padp.h, include/pi-serial.h, + include/pi-slp.h, include/pi-socket.h, include/pi-source.h, + include/pi-sync.h, include/pi-syspkt.h, include/pi-todo.h: Apr + 20, 1997 Kenneth Albanowski 0.5.7 + + Adaption for NeXTStep and Solaris configuration problems. + - Always use three arguments to fcntl. + - Use bmove for memmove even if memcopy is present. + +2000-07-30 19:02 desrod + + * ChangeLog, Makefile.in, Makefile.os2, README, configure, + configure.in, install-user.c, parsedate.c, parsedate.y, + pilot-addresses.c, pilot-debug.c, pilot-dedupe.c, pilot-mail.c, + src/install-user.c, src/parsedate.c, src/parsedate.y, + src/pilot-addresses.c, src/pilot-debug.c, src/pilot-dedupe.c, + src/pilot-install-user.c, src/pilot-mail.c, include/pi-dlp.h, + include/pi-mail.h, include/pi-padp.h, include/pi-source.h, + include/pi-syspkt.h: Apr 13, 1997 Kenneth Albanowski 0.5.6 + + New pilot-mail excutable to directly support transmission and + reception + of internet mail through the Pilot Mail application + present on newer + Pilots. (Requires POP3 for reception and/or sendmail for + transmission.) + Fixed nasty bug in "long" DLP argument recognition. Please do + not use 0.5.5. + PalmOS 2.0 DLP functions DeleteCategory, + ReadNextModifiedInCategory, + ReadNextRecInCategory, ReadFeature, ReadAppPreference and + WriteAppPreference are now emulated for 1.0 Pilots, and + may be freely + used where you like, regardless of OS version. (Untested) + PalmOS 2.0 DLP functions repaired. (None would have worked in + 0.5.5) + Removed extraneous category parameter from + dlp_ReadNext*Category functions. + Added DLP function dlp_RPC, which allows invoking arbitrary + system traps + during HotSync. + Fixed pilot-debug mirroring to display entire updated + rectangle. + Fixed uncaught decoding problem in unpack_ToDoAppInfo. + DLP trace is now compiled in by default, but only activated + if the + PILOTDLP environment variable exists. + +2000-07-30 19:00 desrod + + * ChangeLog, Makefile.in, Makefile.os2, README, configure, + configure.in, debugsh.c, dlpsh.c, getrom.c, install-user.c, + pilot-debug.c, pilot-dedupe.c, pilot-schlep.c, pilot-xfer.c, + sync-memodir.c, src/debugsh.c, src/dlpsh.c, src/getrom.c, + src/install-user.c, src/pilot-debug.c, src/pilot-debugsh.c, + src/pilot-dedupe.c, src/pilot-dlpsh.c, src/pilot-install-user.c, + src/pilot-schlep.c, src/pilot-xfer.c, include/pi-cmp.h, + include/pi-config.h.in, include/pi-dlp.h, include/pi-expense.h, + include/pi-mail.h, include/pi-socket.h, include/pi-source.h: Apr + 4, 1997 Kenneth Albanowski 0.5.5 + + Added Ron Nicholson's patch for + user-id setting + in install-user. + Added Jason S Kohles's patch for + excluding databases + in pilot-xfer. + Added pilot-schlep utility that allows you to carry a single + UNIX file + on your Pilot. + Pilot-debug now can receive, display, enable, and disable + screen updates. + (Type "mirror", then show the Remote UI window, and play + with the Pilot.) + Modified socket code to provide real descriptors from + pi_socket that + last through the bind, so they are directly selectable. + Serial trace is now compiled in by default, but only + activated + if the PILOTLOG environment variable exists. + (PILOTLOGFILE sets name.) + Fixed baud-rate over 9600 "problem". (Mea culpa, I had + commented out a + call for testing purposes. My apologies.) + Fixed rbuf leak in lib/pi-file.c. (Thanks to Scott Grosch for + noticing.) + With the gracious help of Palm, the following PalmOS 2.0 + features are + supported (though not yet tested): + Updated CMP logic to match 2.0 versioning (extended CMP still + to-do). + Updated DLP decoding to decode long args (buffering and + encoding rewrite to-do). + Added v2.0 ReadFeature, DeleteCategory, + ReadNextRecInCategory, + ReadNextModifiedRecInCategory, ReadAppPreference and + WriteAppPreference + DLP functions. (emulation for 1.0 Pilots to-do). + Added v2.0 ReadNetSyncInfo and WriteNetSyncInfo functions (no + 1.0 emulation + possible.) + Added v2.0 extension for CallApplication DLP function. (still + works on 1.0) + +2000-07-30 18:59 desrod + + * ChangeLog, Makefile.in, Makefile.os2, README, config.guess, + config.sub, configure, configure.in, install-sh, + pilot-addresses.c, pilot-debug.c, src/pilot-addresses.c, + src/pilot-debug.c, include/pi-cmp.h, include/pi-socket.h, + include/pi-source.h, include/pi-syspkt.h: Mar 22, 1997 Kenneth + Albanowski 0.5.4 + + Added installation (and uninstallation) support to + Makefile. + Extensively reorganized pilot-debug startup, added Tcl + event loop from + plus-patch, and removed Tk dependancy -- pilot-debug + is now usable + with or without Tk! That means debugsh is officially + deprecated, + unless there is a significant outcry for a Tcl-less + debugger. + Modified syspkt RPC code to properly support byte values + and pointers. + Added initial support for Personal PalmPilot -- but + beware the + possibility of uncaught incompatibilities. + Updated debugging routines in syspkt to more closely + match Palm + documentation -- note that this breaks my original + gdb patch. + +2000-07-30 18:58 desrod + + * ChangeLog, pilot-debug.c, src/pilot-debug.c, include/pi-syspkt.h: + Mar 9, 1997 Kenneth Albanowski 0.5.3 + + To help gdb, expanded syspkt support. + Started reorganization of pilot-debug. + +2000-07-30 18:57 desrod + + * ChangeLog, Makefile.in, Makefile.os2, README, debugsh.c, + pilot-addresses.c, pilot-debug.c, pilot-xfer.c, sync-memodir.c, + src/debugsh.c, src/pilot-addresses.c, src/pilot-debug.c, + src/pilot-debugsh.c, src/pilot-xfer.c, include/pi-macros.h, + include/pi-serial.h, include/pi-source.h, include/pi-syspkt.h: + Mar 2, 1997 Kenneth Albanowski 0.5.2 + + Added Pilot-debug executable -- you'll need to modify + Makefile to + compile it, read README for further instructions. + Removed Linux DTR & RTS code, as per Ted Ts'o's request. + Added Matthew Schnee's latest OS/2 patches. + Changed default connection rate to 9600 from 19200. (For + some reason + 19200 now doesn't seem to be working on my machine. I + have no + idea where the problem lies, hardware or software.) + Modified lib/serial code (both UNIX and OS/2 sections) to + use timeouts + specified in tenth seconds, allowing finer grained + timeouts. This is + specifically used in the syspkt code to respond + faster to RPC + failures. + Modified lib/syspkt.c and include/pi-syspkt.h extensively + to support + pilot-debug. This includes new packet transmission + routines and + more modular RPC code. + Added hack fix for deletion problem in pilot-addresses. + +2000-07-30 18:55 desrod + + * ChangeLog, Makefile.in, Makefile.os2, configure, configure.in, + debugsh.c, getrom.c, getrom.prc, install-memo.c, memos.c, + pilot-addresses.c, pilot-dedupe.c, pilot-xfer.c, read-ical.c, + sync-memodir.c, src/debugsh.c, src/getrom.c, src/install-memo.c, + src/memos.c, src/pilot-addresses.c, src/pilot-debugsh.c, + src/pilot-dedupe.c, src/pilot-install-memo.c, src/pilot-memos.c, + src/pilot-read-ical.c, src/pilot-xfer.c, src/read-ical.c, + src/prc/getrom.prc, include/pi-dlp.h, include/pi-macros.h, + include/pi-source.h, include/pi-sync.h: Feb 23, 1997 Kenneth + Albanowski 0.5.1 + + Added getrom executable, and included getrom.prc from + CoPilot + distribution with Greg Hewgill's permission. + Completed data pack & unpack support for all Pilot + applications. + Modified headers and code (particularly dlp) to use new + recordid_t + typedef for record IDs. This should prevent one + source of + sign problems. + Modified dlp headers and code to pass all buffers as + void*'s instead + of unsigned char *'s. + Added experimental Perl5 linkage. To use, change to + Perl5/PDAPilot + directory, run erl Makefile.PL ; make test, and + stand back. + Most bits are currently missing and some bits don't + work. + +2000-07-30 18:54 desrod + + * ChangeLog, Makefile.in, Makefile.os2, README, addresses.c, + configure, configure.in, debugsh.c, dlpsh.c, install-memo.c, + install-todos.c, install-user.c, memos.c, pilot-addresses.c, + pilot-dedupe.c, pilot-file.c, pilot-xfer.c, read-ical.c, + read-todos.c, reminders.c, sync-memodir.c, test-acceptor.c, + test-connector.c, src/addresses.c, src/debugsh.c, src/dlpsh.c, + src/install-memo.c, src/install-todos.c, src/install-user.c, + src/memos.c, src/pilot-addresses.c, src/pilot-debugsh.c, + src/pilot-dedupe.c, src/pilot-dlpsh.c, src/pilot-file.c, + src/pilot-install-memo.c, src/pilot-install-todos.c, + src/pilot-install-user.c, src/pilot-memos.c, + src/pilot-read-ical.c, src/pilot-read-todos.c, + src/pilot-reminders.c, src/pilot-xfer.c, src/read-ical.c, + src/read-todos.c, src/reminders.c, include/address.h, + include/cmp.h, include/datebook.h, include/dlp.h, include/memo.h, + include/padp.h, include/pi-address.h, include/pi-cmp.h, + include/pi-datebook.h, include/pi-dlp.h, include/pi-file.h, + include/pi-macros.h, include/pi-memo.h, include/pi-padp.h, + include/pi-serial.h, include/pi-slp.h, include/pi-socket.h, + include/pi-source.h, include/pi-sync.h, include/pi-syspkt.h, + include/pi-todo.h, include/slp.h, include/sync.h, + include/syspkt.h, include/todo.h, doc/man/pilot-xfer.1: Feb 5, + 1997 Kenneth Albanowski 0.5.0 + + Rearranged header files so they should be cleaner to + externally use. + Added pilot-dedupe program, which will automatically + remove duplicate + records from any Pilot database. (Use with + caution on databases + for third-party applications. It is safe to use + on all of the + standard databases.) + Added useful serial trace. If SERIAL_TRACE is defined + during + compilation, then a complete trace of all serial + activity (in and + out) will be appended to PiDebug.log in the + current directory. If + you are getting low level failures of the + software, please try + generating one of these logs and mailing it to me + (kjahds@kjahds.com) so I can attempt to find the + problem. + Made a few slight changes in various programs and headers + to + reduce miscasts. + Removed -Wall flag for CC compiler. + +2000-07-30 18:51 desrod + + * ChangeLog, Makefile.in, Makefile.os2, README, addresses.c, + config.guess, config.sub, configure, configure.in, dlpsh.c, + install-memo.c, install-sh, pilot-addresses.c, pilot-xfer.c, + src/addresses.c, src/dlpsh.c, src/install-memo.c, + src/pilot-addresses.c, src/pilot-dlpsh.c, + src/pilot-install-memo.c, src/pilot-xfer.c, include/address.h, + include/pi-config.h.in, include/pi-socket.h: Jan 18, 1997 + Kenneth Albanowski 0.4.3 + + Modified configure support for NeXT and OS/2. + Added pilot-addresses program, a program designed to + translate + between a comma-separated-value format and the + Pilot address book. + In theory the format is compatible with the Palm + Desktop + import/export format. An "a" switch + (Advanced/Augment) is available + to output more data in a Desktop incompatible + format. + This software may be buggy! Always back up the + DatebookDB database + before installing records! + Modified pilot-xfer to sort databases during Restore to put + applications + after their data, and larger records after smaller ones. + Modified pilot-xfer to clear lastsyncpc value so that a fast + sync will + not be done with possibly missing sync flags on newly + installed DBs. + Added lib/address.c & addresses.c patches to simplify + phone label storage. + Added -c switch to install-memo.c + Added stub README. + +2000-07-30 18:49 desrod + + * ChangeLog, dlpsh.c, pilot-file.c, src/dlpsh.c, src/pilot-dlpsh.c, + src/pilot-file.c, include/datebook.h, include/pi-file.h, + include/pi-serial.h, include/sync.h: Jan 9, 1997 + Kenneth Albanowski 0.4.2 + + Applied Pace's rm_fn patch, and pi-file patch for freads + and attrs. + My patch to return correct DLP errors. + Probably some other stuff that I've forgotton. + +2000-07-30 18:48 desrod + + * ChangeLog, Makefile.in, Makefile.os2, configure, configure.in, + install-user.c, pilot-xfer.c, read-ical.c, src/install-user.c, + src/pilot-install-user.c, src/pilot-read-ical.c, + src/pilot-xfer.c, src/read-ical.c, include/dlp.h, + include/pi-socket.h, include/syspkt.h: Dec 30, 1996 Kenneth + Albanowski 0.4.1 + + Got sync-ical functional. It's very messy, but parts of + it do actually + work. + Added new trace code to lib/dlp. Enable with -DDLP_TRACE + in makefile. + Added remaining DLP functions. All but RPC are now + implemented (and I + have not been able to deduce how to invoke RPC under + DLP, so it + will stay unimplemented until somebody comes up with + more information.) + Pace's patch for dlp_ReadRecordIDList. + Added patch to pi-file to successfully store zero-length + records. + _Also_ added patch to stop ignore records on database + retrieval that + are archived or deleted. The reason is that without + going to the + RPC layer, there is no way to store records with those + attributes. + Mucked about with getopt in pilot-xfer, hopefully for the + better. + Added uname detection to configure so that IRIX gets + proper warning flag. + + -- sync code still in limbo, undoubtedly not helped by + holiday season. + Patience is a virtue. + +2000-07-30 18:46 hacker + + * .lclintrc: Dec 22, 1996 Kenneth Albanowski 0.4.0 + + Removed {install,retrieve}-{pdb,prc} packages, replaced with + pilot-xfer, which also includes general backup and listing + functions. + Integrated Pace Willisson's pi-file code, replacing prc.c & + pdb.c. (This + new code, along with pilot-xfer, is intended to be + production + quality, and should be used as the basis for all attempts + to + manipulate Pilot files, as well as the stock mechanism for + backing + up a Pilot via Unix.) + Added Pace's pdump, modified and renamed to pilot-file, which + is used for + dumping and exploring .pdb and .prc files. + Wrote and tested sync.c abstract synchronization layer. All + but category + synchronization and the detail of when to use which sync + type is implemented. + Fleshed out sync-memodir program which can now successfully + synchronize a + Pilot with a "memo directory", a directory containing text + files. + (sync-ical is still useless stub) + Integrated Bill Sommerfeld's patches for read-ical, padp, and + syspkt. + + -- Removed sync code based on Palm algorithms, pending + approval from + Palm/USR. What remains is sufficient to overwrite one side + with + another, and to serve as a framework if people who have + not seen Palm + code want to implement their own algorithms. + + Quoting from lib/sync.c: + + * Revised revision: all sections of code directly derived + (albeit in a + * paraphased manner) from code in the Palm Conduit SDK, + _which are not + * blatently obvious and irreducible_ have been temporarily + removed until + * word is obtained from Palm that the code may be + publically released. + * + * The issue that needs to be resolved is whether Palm + Computing Inc. will + * allow the public distribution of source code derived + from source code in + * their Pilot PC Conduit SDK. The licensing information + that I recieved + * with the PC and Mac SDKs is not sufficient to resolve + this question. + * + * In keeping with the sprit of the EU practice for reverse + engineering, the + * interface that I have designed to plug into the Palm + algorithms has been + * retained. + +2000-07-30 18:46 desrod + + * ChangeLog, Makefile.in, Makefile.os2, configure, configure.in, + dlpsh.c, install-pdb.c, install-prc.c, pilot-file.c, + pilot-xfer.c, read-ical.c, retrieve-pdb.c, retrieve-prc.c, + sync-memodir.c, src/dlpsh.c, src/pilot-dlpsh.c, src/pilot-file.c, + src/pilot-read-ical.c, src/pilot-xfer.c, src/read-ical.c, + include/dlp.h, include/pdb.h, include/pi-config.h.in, + include/pi-file.h, include/pi-socket.h, include/prc.h, + include/sync.h, doc/man/pilot-xfer.1: Dec 22, 1996 Kenneth + Albanowski 0.4.0 + + Removed {install,retrieve}-{pdb,prc} packages, replaced with + pilot-xfer, which also includes general backup and listing + functions. + Integrated Pace Willisson's pi-file code, replacing prc.c & + pdb.c. (This + new code, along with pilot-xfer, is intended to be + production + quality, and should be used as the basis for all attempts + to + manipulate Pilot files, as well as the stock mechanism for + backing + up a Pilot via Unix.) + Added Pace's pdump, modified and renamed to pilot-file, which + is used for + dumping and exploring .pdb and .prc files. + Wrote and tested sync.c abstract synchronization layer. All + but category + synchronization and the detail of when to use which sync + type is implemented. + Fleshed out sync-memodir program which can now successfully + synchronize a + Pilot with a "memo directory", a directory containing text + files. + (sync-ical is still useless stub) + Integrated Bill Sommerfeld's patches for read-ical, padp, and + syspkt. + + -- Removed sync code based on Palm algorithms, pending + approval from + Palm/USR. What remains is sufficient to overwrite one side + with + another, and to serve as a framework if people who have + not seen Palm + code want to implement their own algorithms. + + Quoting from lib/sync.c: + + * Revised revision: all sections of code directly derived + (albeit in a + * paraphased manner) from code in the Palm Conduit SDK, + _which are not + * blatently obvious and irreducible_ have been temporarily + removed until + * word is obtained from Palm that the code may be + publically released. + * + * The issue that needs to be resolved is whether Palm + Computing Inc. will + * allow the public distribution of source code derived + from source code in + * their Pilot PC Conduit SDK. The licensing information + that I recieved + * with the PC and Mac SDKs is not sufficient to resolve + this question. + * + * In keeping with the sprit of the EU practice for reverse + engineering, the + * interface that I have designed to plug into the Palm + algorithms has been + * retained. + +2000-07-30 18:43 desrod + + * ChangeLog, Makefile, Makefile.in, Makefile.os2, addresses.c, + configure, configure.in, debugsh.c, dlpsh.c, install-memo.c, + install-pdb.c, install-prc.c, install-todos.c, install-user.c, + memos.c, read-ical.c, read-todos.c, reminders.c, retrieve-pdb.c, + retrieve-prc.c, test-acceptor.c, test-connector.c, + src/addresses.c, src/debugsh.c, src/dlpsh.c, src/install-memo.c, + src/install-todos.c, src/install-user.c, src/memos.c, + src/pilot-debugsh.c, src/pilot-dlpsh.c, src/pilot-install-memo.c, + src/pilot-install-todos.c, src/pilot-install-user.c, + src/pilot-memos.c, src/pilot-read-ical.c, src/pilot-read-todos.c, + src/pilot-reminders.c, src/read-ical.c, src/read-todos.c, + src/reminders.c, include/cmp.h, include/padp.h, + include/pi-config.h.in, include/pi-serial.h, include/pi-socket.h, + include/slp.h, include/sync.h, include/syspkt.h: Dec 1, 1996 + Kenneth Albanowski 0.3.2 + + Converted package to use autoconf for configuration. + Cleaned up package so -Wall is clean. + Added sync-ical stub. It does not do anything useful yet. + +2000-07-30 18:42 desrod + + * ChangeLog, Makefile, dlpsh.c, install-pdb.c, install-prc.c, + install-todos.c, read-ical.c, read-todos.c, reminders.c, + retrieve-pdb.c, retrieve-prc.c, todos.c, src/dlpsh.c, + src/install-todos.c, src/pilot-dlpsh.c, + src/pilot-install-todos.c, src/pilot-read-ical.c, + src/pilot-read-todos.c, src/pilot-reminders.c, src/read-ical.c, + src/read-todos.c, src/reminders.c, include/cmp.h, include/dlp.h, + include/padp.h, include/pdb.h, include/pi-serial.h, + include/pi-socket.h, include/prc.h, doc/man/read-ical.1: Nov 25, + 1996 Kenneth Albanowski 0.3.1 + + Integrated Ulrich Hertlein's SunOS patches (in slightly + changed form). + Integrated Matthew Schnee's final OS/2 patches (in slightly + changed form). + Added install-pdb, retrieve-prc, and retrieve-pdb. + Added read-ical, which converts the Pilot's datebook and todo + list + into an Ical 2.x calendar. + Renamed todos to read-todos to avoid conflict with common + utility. + Added Robert A. Kaplan's install-todos (slightly modified and + renamed.) + Got rid of CBAUD and memmove, defined ENOMSG if not present. + Fixed PADP bug where unexpected packet in padp_rx would cause + infinite loop. + +2000-07-30 18:41 desrod + + * ChangeLog, Makefile, addresses.c, memos.c, todos.c, + src/addresses.c, src/memos.c, src/pilot-memos.c, + include/address.h, include/datebook.h, include/dlp.h, + include/memo.h, include/padp.h, include/pi-serial.h, + include/pi-socket.h, include/sync.h, include/todo.h: Nov 12, 1996 + Kenneth Albanowski 0.3.0 + + Integrated David Morgan's mktime and indefinite todo patch + Integrated my patches + - AppInfo block support for all Pilot applications + - new "addresses" end user program + - new "todos" end user program + Rewrote PADP to match USR specs + Rewrote xid generation as part of PADP rewrite, and made it + always an unsigned character + Added stub lib/sync.c + Added dependencies in lib/Makefile + +2000-07-30 18:39 desrod + + * ChangeLog, Makefile, debugsh.c, install-prc.c, memos.c, + reminders.c, test-debug.c, src/debugsh.c, src/memos.c, + src/pilot-debugsh.c, src/pilot-memos.c, src/pilot-reminders.c, + src/reminders.c, include/address.h, include/datebook.h, + include/dlp.h, include/memo.h, include/pi-socket.h, + include/syspkt.h, include/todo.h: Nov 1, 1996 D. Jeff Dionne + 0.2.4 + + Integrated 5 patches from Kenneth Albanowski + - RPC + - new "debugsh" program that talks to Pilot over RPC + - cleanup of "system packets" + - new "memo" end user program + - new "remind" end user program + Limit the generated value of xid in padp_tx to 0x7f, + hopfully + will fix the problems with long running syncs. DJD. + accept() now blocks insted of listen(). DJD. + padp will now re-assemble fragments. DJD. + install-prc now updates the Pilot display as it goes + along. DJD. + +2000-07-30 18:38 desrod + + * ChangeLog, Makefile, dlpsh.c, install-memo.c, install-prc.c, + install-user.c, test-acceptor.c, test-connector.c, test-debug.c, + src/dlpsh.c, src/install-memo.c, src/install-user.c, + src/pilot-dlpsh.c, src/pilot-install-memo.c, + src/pilot-install-user.c, include/dlp.h, include/padp.h, + include/pi-serial.h, include/pi-socket.h, include/syspkt.h, + doc/man/dlpsh.1, doc/man/install-memo.1: Oct 24, 1996 D. Jeff + Dionne 0.2.3 + + Integrated patches for "system packets" from Kenneth + Albanowski + - new program, test-debug + Integrated patches for OS2 support (mostly serial.c) f/ + Matthew Schnee + Integrated patches for SGI from David S. Warren + Integrated patches from Damien P. Neil + - new program, dlpsh + - fixed bug in padp.c for Pilot re-transmit + - install-memo now writes userid for compatibilty with + Windows. + - check return values from socket calls. + - Swapped the slp_rx and pi_socket_flush in + pi_socket_read() + - Wrote a man page for install-memo and dlpsh + +2000-07-30 18:37 desrod + + * ChangeLog, Makefile, install-memo.c, install-prc.c, + install-user.c, test-acceptor.c, test-connector.c, + src/install-memo.c, src/install-user.c, src/pilot-install-memo.c, + src/pilot-install-user.c, include/cmp.h, include/dlp.h, + include/prc.h: Oct 19, 1996 D. Jeff Dionne 0.2.2 + + Integrated a patch from Kenneth Albanowski + - More DLP code. + - Socket fixes. + - prcread complete re-write using DLP. + - test server and client using ptys + +2000-07-30 18:36 desrod + + * ChangeLog, DB-sync.c, Makefile, all-sync.c, cmp.c, cmp.h, dlp.c, + dlp.h, install-memo.c, install-prc.c, install-user.c, padp.c, + padp.h, pi-socket.h, prc.h, prcread.c, serial.c, slp.c, slp.h, + socket.c, test_c.c, test_s.c, utils.c, src/install-memo.c, + src/install-user.c, src/pilot-install-memo.c, + src/pilot-install-user.c, include/cmp.h, include/dlp.h, + include/padp.h, include/pi-socket.h, include/prc.h, + include/slp.h, doc/man/install-memo.1, doc/man/install-user.1: + Oct 16, 1996 D. Jeff Dionne 0.2.1 + + moved the parts of libpisock.a to a seperate directory + moved the include files to a seperate directory + creates a few simple man pages, in a seperate directory + install-memo installs all files on the command line. + install-user new program, reads or sets Pilot user name + Attempted to reconstruct history for this ChangeLog. All + previous ChangeLog entries are approximate, and short. + +2000-07-30 18:33 desrod + + * COPYING, Makefile, cmp.c, cmp.h, dlp.c, dlp.h, install-memo.c, + install-prc.c, pi-socket.h, serial.c, socket.c, test_c.c, + test_s.c, src/install-memo.c, src/pilot-install-memo.c: Oct 15, + 1996 D. Jeff Dionne 0.2.0 + + Integrated 2 patches for DLP from Kenneth Albanowski + Integrated 1 patch for CMP from Kenneth Albanowski + Integrated 1 patch for install-memo from Brian + Added install-memo from Damien Neil + Included COPYING license file from FSF + +2000-07-30 18:32 desrod + + * DB-sync.c, Makefile, all-sync.c, install-prc.c, main.c, padp.c, + pi-socket.h, prc.h, prcread.c, serial.c, slp.c, socket.c, + test_s.c: Oct 8, 1996 D. Jeff Dionne 0.1.0 + + First functional release. + +2000-07-30 18:31 desrod + + * DB-sync.c, Makefile, address-db.c, all-sync.c, datebook-db.c, + foo.log, memo-db.c, test_s.c: Updated the sources to 0.0.2, + incuded tagged branch. + +2000-07-30 18:28 desrod + + * Makefile, address-db.c, datebook-db.c, foo.log, main.c, + memo-db.c, padp.c, padp.h, pi-socket.h, serial.c, slp.c, slp.h, + socket.c, test_c.c, test_s.c, utils.c: Initial import of 0.0.1 + sources into tagged branches + +2000-07-30 18:28 desrod + + * Makefile, address-db.c, datebook-db.c, foo.log, main.c, + memo-db.c, padp.c, padp.h, pi-socket.h, serial.c, slp.c, slp.h, + socket.c, test_c.c, test_s.c, utils.c: Initial revision + diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..b42a17a --- /dev/null +++ b/INSTALL @@ -0,0 +1,182 @@ +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, a file +`config.cache' that saves the results of its tests to speed up +reconfiguring, and a file `config.log' containing compiler output +(useful mainly for debugging `configure'). + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If at some point `config.cache' +contains results you don't want to keep, you may remove or edit it. + + The file `configure.in' is used to create `configure' by a program +called `autoconf'. You only need `configure.in' if you want to change +it or regenerate `configure' using a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. You can give `configure' +initial values for variables by setting them in the environment. Using +a Bourne-compatible shell, you can do that on the command line like +this: + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure + +Or on systems that have the `env' program, you can do it like this: + env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not supports the `VPATH' +variable, you have to compile the package for one architecture at a time +in the source code directory. After you have installed the package for +one architecture, use `make distclean' before reconfiguring for another +architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' can not figure out +automatically, but needs to determine by the type of host the package +will run on. Usually `configure' can figure that out, but if it prints +a message saying it can not guess the host type, give it the +`--host=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name with three fields: + CPU-COMPANY-SYSTEM + +See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the host type. + + If you are building compiler tools for cross-compiling, you can also +use the `--target=TYPE' option to select the type of system they will +produce code for and the `--build=TYPE' option to select the type of +system on which you are compiling the package. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Operation Controls +================== + + `configure' recognizes the following options to control how it +operates. + +`--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. + +`--help' + Print a summary of the options to `configure', and exit. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--version' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`configure' also accepts some other, not widely useful, options. diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..b730d68 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,26 @@ +AUTOMAKE_OPTIONS = 1.6 + +SUBDIRS=popt \ + libpisock \ + libpisync \ + include \ + src \ + bindings \ + doc \ + tests \ + darwin + +m4dir = $(datadir)/aclocal +m4_DATA = pilot-link.m4 + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = pilot-link.pc + +ACLOCAL_AMFLAGS = -I m4 + +EXTRA_DIST = \ + autogen.sh \ + $(m4_DATA) \ + pilot-link.pc.in \ + pilot-link-pp.pc.in + diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..6e77357 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,900 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = . +DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + $(srcdir)/pilot-link-pp.pc.in $(srcdir)/pilot-link.m4.in \ + $(srcdir)/pilot-link.pc.in \ + $(top_srcdir)/bindings/Perl/Makefile.PL.in \ + $(top_srcdir)/bindings/Python/setup-standalone.py.in \ + $(top_srcdir)/bindings/Python/setup.py.in \ + $(top_srcdir)/configure AUTHORS COPYING COPYING.LIB ChangeLog \ + INSTALL NEWS config.guess config.sub depcomp install-sh \ + ltmain.sh missing ylwrap +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/bluez.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/python.m4 \ + $(top_srcdir)/m4/socklen.m4 $(top_srcdir)/m4/tcl.m4 \ + $(top_srcdir)/m4/threads.m4 \ + $(top_srcdir)/m4/vl_lib_readline.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h $(top_builddir)/include/pi-md5.h +CONFIG_CLEAN_FILES = pilot-link.m4 pilot-link.pc pilot-link-pp.pc \ + bindings/Perl/Makefile.PL bindings/Python/setup.py \ + bindings/Python/setup-standalone.py +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(m4dir)" "$(DESTDIR)$(pkgconfigdir)" +DATA = $(m4_DATA) $(pkgconfig_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLUEZ_CFLAGS = @BLUEZ_CFLAGS@ +BLUEZ_LIBS = @BLUEZ_LIBS@ +CAT_ENTRY_END = @CAT_ENTRY_END@ +CAT_ENTRY_START = @CAT_ENTRY_START@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOK_ROOT = @DOCBOOK_ROOT@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +GREP = @GREP@ +ICONV_CFLAGS = @ICONV_CFLAGS@ +ICONV_LIBS = @ICONV_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JAR = @JAR@ +JAVA = @JAVA@ +JAVABASE = @JAVABASE@ +JAVAC = @JAVAC@ +JAVA_VERSION = @JAVA_VERSION@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +PIC_LIBS = @PIC_LIBS@ +PILOT_LINK_MAJOR = @PILOT_LINK_MAJOR@ +PILOT_LINK_MINOR = @PILOT_LINK_MINOR@ +PILOT_LINK_PATCH = @PILOT_LINK_PATCH@ +PILOT_LINK_VERS = @PILOT_LINK_VERS@ +PISOCK_AGE = @PISOCK_AGE@ +PISOCK_CURRENT = @PISOCK_CURRENT@ +PISOCK_REVISION = @PISOCK_REVISION@ +PISYNC_AGE = @PISYNC_AGE@ +PISYNC_CURRENT = @PISYNC_CURRENT@ +PISYNC_REVISION = @PISYNC_REVISION@ +PKG_CONFIG = @PKG_CONFIG@ +PNG_CFLAGS = @PNG_CFLAGS@ +PNG_LIBS = @PNG_LIBS@ +POPT_INCLUDES = @POPT_INCLUDES@ +POPT_LIBS = @POPT_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHON_CFLAGS = @PYTHON_CFLAGS@ +PYTHON_H = @PYTHON_H@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RL_LIBS = @RL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TCLSH_PROG = @TCLSH_PROG@ +TCL_BIN_DIR = @TCL_BIN_DIR@ +TCL_DEFS = @TCL_DEFS@ +TCL_EXTRA_CFLAGS = @TCL_EXTRA_CFLAGS@ +TCL_INCLUDES = @TCL_INCLUDES@ +TCL_LD_FLAGS = @TCL_LD_FLAGS@ +TCL_LIBS = @TCL_LIBS@ +TCL_LIB_FILE = @TCL_LIB_FILE@ +TCL_LIB_FLAG = @TCL_LIB_FLAG@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_SHLIB_LD_LIBS = @TCL_SHLIB_LD_LIBS@ +TCL_SRC_DIR = @TCL_SRC_DIR@ +TCL_STUB_LIB_FILE = @TCL_STUB_LIB_FILE@ +TCL_STUB_LIB_FLAG = @TCL_STUB_LIB_FLAG@ +TCL_STUB_LIB_SPEC = @TCL_STUB_LIB_SPEC@ +TCL_VERSION = @TCL_VERSION@ +VERSION = @VERSION@ +WISH_PROG = @WISH_PROG@ +XML_CATALOG = @XML_CATALOG@ +XSLTPROC = @XSLTPROC@ +XSLTPROC_FLAGS = @XSLTPROC_FLAGS@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usb_libs = @usb_libs@ +AUTOMAKE_OPTIONS = 1.6 +SUBDIRS = popt \ + libpisock \ + libpisync \ + include \ + src \ + bindings \ + doc \ + tests \ + darwin + +m4dir = $(datadir)/aclocal +m4_DATA = pilot-link.m4 +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = pilot-link.pc +ACLOCAL_AMFLAGS = -I m4 +EXTRA_DIST = \ + autogen.sh \ + $(m4_DATA) \ + pilot-link.pc.in \ + pilot-link-pp.pc.in + +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +am--refresh: + @: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +pilot-link.m4: $(top_builddir)/config.status $(srcdir)/pilot-link.m4.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +pilot-link.pc: $(top_builddir)/config.status $(srcdir)/pilot-link.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +pilot-link-pp.pc: $(top_builddir)/config.status $(srcdir)/pilot-link-pp.pc.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +bindings/Perl/Makefile.PL: $(top_builddir)/config.status $(top_srcdir)/bindings/Perl/Makefile.PL.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +bindings/Python/setup.py: $(top_builddir)/config.status $(top_srcdir)/bindings/Python/setup.py.in + cd $(top_builddir) && $(SHELL) ./config.status $@ +bindings/Python/setup-standalone.py: $(top_builddir)/config.status $(top_srcdir)/bindings/Python/setup-standalone.py.in + cd $(top_builddir) && $(SHELL) ./config.status $@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt +install-m4DATA: $(m4_DATA) + @$(NORMAL_INSTALL) + test -z "$(m4dir)" || $(MKDIR_P) "$(DESTDIR)$(m4dir)" + @list='$(m4_DATA)'; test -n "$(m4dir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(m4dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(m4dir)" || exit $$?; \ + done + +uninstall-m4DATA: + @$(NORMAL_UNINSTALL) + @list='$(m4_DATA)'; test -n "$(m4dir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(m4dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(m4dir)" && rm -f $$files +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @$(am__cd) '$(distuninstallcheck_dir)' \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(DATA) config.h +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(m4dir)" "$(DESTDIR)$(pkgconfigdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-hdr \ + distclean-libtool distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-m4DATA install-pkgconfigDATA + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-m4DATA uninstall-pkgconfigDATA + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ + ctags-recursive install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ + dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \ + distcheck distclean distclean-generic distclean-hdr \ + distclean-libtool distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-m4DATA \ + install-man install-pdf install-pdf-am install-pkgconfigDATA \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-m4DATA \ + uninstall-pkgconfigDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..18f24b3 --- /dev/null +++ b/NEWS @@ -0,0 +1,451 @@ +-------------------------------------------------------------------------- +pilot-link 0.12.3, "Can-of-Raid" (aka "Bug-Squash" release), 11-12-2007 +-------------------------------------------------------------------------- +Here you go, another pilot-link release. This one fixes quite a few issues: + +Bug Fixes: + * Fix for Sony NR70 devices not being detected properly + * BlueZ detection fix + * XSLT manpage autogeneration fixes + * Perl bindings build error, remove autoconfiscated files from + releases + * Java bindings build errors, remove autoconfiscated Makefile + * Renamed pilot-treofoto and pilot-650foto to pilot-foto-treo600 and + pilot-foto-treo650 + * Added missing manpages for pilot-foto-treo6xx + * Fixed OS5 failures with pilot-addresses.c + * Updated pilot-install-memo.c to allow installation of files + outside the current working directory + * Fix for pi_usb_accept, adding PI_ERR_SOCK_LISTENER from Matt + Davey's patch (closing #1782) + +Check the ChangeLog for the details on all fixes for this release + + +-------------------------------------------------------------------------- +pilot-link 0.12.2, "Dance With the Devil" aka "Distraction", 02-09-2007 +-------------------------------------------------------------------------- +5 months since the last release (0.12.1) and we have another release! This +one is mostly a maintenance release, but there are some new things in here. + +Major Features: + * More cleanup in libpisock and documentation, addition of some new + (working :) BlueZ support, new udev rules, expanded OS5 Contacts + support, expanded OS X support and a lot more! + +Other Features: + * No major features in this release, mostly bug fixes and minor + tweaks here and there. The website has also been refreshed with + new content and a completely new layout. All source files are now + version-tracked in the header. + +Bug Fixes: + * Python support was broken, fixed now, doh! Palm T|X over libusb + has been fixed (we hope) with this release. Of course we need + testers to validate that. All of userland is renamed now to avoid + some namespace pollution. Documentation is all current with + respect to this release, all manpages are in XML source format + (requires xsltproc to process), and much more. + +Check the ChangeLog for the full details if you're interested. + + +-------------------------------------------------------------------------- +pilot-link 0.12.1, "Fresh Air", 09-04-2006 +-------------------------------------------------------------------------- +3 years since the last release, then 1 week from that release until this +one. + +WHEW! + +There isn't much "new" in this release, just some rapid-fire bug fixes +reported from users and a lot of code has been cleaned up in the tree to +remove unnecessary includes (check doxygen for the results). + +I'm working on cleaning up more, documenting more and making it easier to +use and work with. + +Major Features: + * Code cleanup in libpisock, libpisync, src and include + +Other Features: + * Nothing major in this release + +Bug Fixes: + * Fixed the installation faux pas with udev rules, oops! + + +-------------------------------------------------------------------------- +pilot-link 0.12.0, "Trois ans", 08-25-2006 +-------------------------------------------------------------------------- +Yes, 3 whole years since the last official release. There have been +quite a few pre-releases in that time, but this is the first major +point release in over 4 years. + +Major Features: + * Support for DLP v1.4, more devices supported out of the box + * Native support for OS X, no more Darwin ports needed + * Native libusb support (using a new port designation of usb: to + use that port. See doc/README.libusb for details + * Most of the documentation and manpages migrated to DocBook XML + * Userland "conduits" have been renamed in places where namespace + collision could be a factor + * Migration to popt() from getopt() which provides the groundwork + for a global option changeover in an upcoming release. + +Other Features: + * Too many to mention, its been over 3 years ;) + +Bug Fixes: + * Much of the code in the DLP subsystem has been reworked and many + bugs have been squashed. Check the ChangeLog for details on + those items. + +-------------------------------------------------------------------------- +pilot-link 0.11.9, "Anoxia", 07-04-2003 - NEVER RELEASED +-------------------------------------------------------------------------- +Continuing with the theme of removing the unnecessary code and adding +features, along comes "Anoxia" (no oxygen), the next release of pilot-link. + +Major Features: + * New DLP 1.2 function, SetDBInfo, which allows you to update or + change the fields in the AppInfo block. + +Other Features: + * No additional features at this time + +Bug Fixes: + * Minor bug in pilot-xfer that caused screen output to get corrupted + in certain conditions + + +-------------------------------------------------------------------------- +pilot-link 0.11.8, "Asphyxia", 06-17-2003 +-------------------------------------------------------------------------- +More code cleanups in this release, minor typos fixed here and there, and +more reduction of the codebase in general. Things are going to get smaller, +faster, and more functional with each of these releases. + +Major Features: + * New timing loop so you don't have to hit HotSync on the Palm + first, before launching your desktop conduits. This also work with + gnome-pilot and J-Pilot as well. + * pilot-foto conduit to fetch/convert photos taken with a Palm + Zire71 camera device + * Completely new Java bindings, rewritten from the ground-up by John + Mitchell and Stephan Bösebeck. + +Other Features: + * A few new manpages + +Bug Fixes: + * Fixed a small leak in the socket code (serial.c/socket.c) (Robert + L Krawitz) + * Removed CoPilot ROM support from pi-getrom/pi-getram. POSE + supercedes it, and should be used instead. + * Solaris libpng fix (Simon Burr) + * Fixed the pilot-addresses segfault problem on some platforms + * BSD gnugetopt cleanup to counter unsetting $LIBS accidentally (Joe + Marcus Clarke) + * Perl5 errors when building under a debug build of Perl (Johathan + Mark) + +Known Problems: + * install-datebook needs proper parsing for spurious arguments + * Resources which exceed the Palm recommendation of 64k will cause + odd behavior in pilot-link. This can be easily fixed by increasing + DLP_BUF_SIZE, but this isn't really good to do. + * sync-plan has some issues with events, need testers to verify. + * Syncronizing on FreeBSD with USB Palm devices is still flaky, but + we believe the issue to be inside the BSD USB stack, and not + within pilot-link itself. Can anyone concur/refute this assertion + and help us test it further? + * If you are doing a Network HotSync backup, and communication is + interrupted, your local copy of the last database accessed will be + truncated. One proposal to working around this has been floated, + but not implemented or tested yet. + +What's Coming Soon: + * VFS support was implemented with 29 of the VFS functions needed to + read, write, and query external storage cards on Palm handhelds, + but it was not deployed in this release. It should arrive in 0.12 + of pilot-link, only a few releases away. + * Conduit compression/rewrites. Many of the conduits will be + collapsed into singular conduits, and others will be rolled into + static versions using Perl for code reduction and portability + reasons. + * iCal and LDIF support for Calendar and AddressBook input and + output + +The goal of the next few releases of pilot-link is to reduce the number of +lines of actual code used, and compress the redundancy into singular +entities. This means that similar or like code will be repurposed as much as +possible across all of the libraries and conduits, reducing the cruft and +maintenance required to update it for new features. + + +-------------------------------------------------------------------------- +pilot-link 0.11.7, "What's up Doc?", 1-05-2003 +-------------------------------------------------------------------------- +The last release had a few small errors in it, namely the changing of the +exit(1) vs. exit 1; autoconf vs. C'isms. + +Major Features: + * None at this time + +Other Features: + * New manpages and manpage formatting + +Bug Fixes: + * Fix for failures on libiconv w/Evolution + * Fix for PI_LOG output + * Fix for exit; vs. exit(); + * Fix for readline support breaking C++ detection + +Known Problems: + * Same as previous release + + +-------------------------------------------------------------------------- +pilot-link 0.11.6, "Torrent of Lucidity", 12-24-2002 +-------------------------------------------------------------------------- +A few bugs squashed in this one, improved stability, two new conduits, +manpages, docs, more.. + +Major Features: + * None at this time + * New pilot-archive sample conduit to send archived ToDo records to + STDOUT as CSV-formatted entries. + * Deprecated pilot-mail, in favor of pilot-mailsync. pilot-mail + remains, as an example to other conduit authors. + * pilot-link 0.11.6 will now cleanly build on OSX 10.x.x systems + * pilot-xfer --time feature added to sync Palm time to desktop time + +Other Features: + * New install-todo conduit (Robert A. Kaplan) + * New install-expenses conduit + * Cleaned up pilot_connect() to report better error conditions, and + propose possible solutions to solving them for general users + * Added HOST_OS detection and linked into each conduit, to assist + debugging + * Added Python test script (Nicholas Piper) + * Added support for ElectricFence malloc() debugging library + +Bug Fixes: + * Fix for failures on usb:// notation use + * Fix for missing pi_close() elements + * Fix for installing files larger than available space on device + * Fix for autoconf 2.1x and 2.5x compatibility + * Fix for TCL version detection in pilot-debug + * Fix for CreatorID output in dlpsh + * Fix to allow gcc 3.2 builds + * Fix for pilot_connect() that was losing the client socket + * Fix for install-memos malloc() bug, -t missing argument bug, title + truncation bug. + +Known Problems: + * FreeBSD hangs on USB synchronization (this may not be a pilot-link + bug, as serial, IR works using the same code structures) + * Java bindings missing manifest + * snprintf() calls fail on Irix 6.4 systems + * Improper getopt_long propagation on Irix 6.4 + * autoconf/automake 2.5x problems on AIX + * install-memo doesn't strip ^M from files before syncronization, + doesn't detect duplicate files being sync'd to the same device. + + +-------------------------------------------------------------------------- +pilot-link 0.11.5, "Insomnia", 09-28-2002 +-------------------------------------------------------------------------- +Just minor bugs, closing up a few BSD and zoning in on some BSD and Irix +issues for this (and the next) release. + +Major Features: + * None at this time + +Other Features: + * None at this time + +Bug Fixes: + * Fix for dlp_callApplication crash (Owen Stenseth) + * Fix for standard includes when using gcc/g++/c++ 3.x or later + * Fix for 'name' and 'nameLength' member errors (Nicholas Piper) + +Known Problems: + * Java bindings missing manifest + * snprintf() calls fail on Irix 6.4 systems + * Improper getopt_long propagation on Irix 6.4 + * autoconf/automake 2.5x problems on AIX + +-------------------------------------------------------------------------- +pilot-link 0.11.4, "Alzheimer Release", 09-16-2002 +------------------------------------------------------------------------- +Some major bugs have been fixed in this release, which now supercedes all +previous releases in the 0.11.x series. + +Major Features: + * Updated configuration to work with newer autoconf/automake + versions + +Other Features: + * None at this time + +Bug Fixes: + * Fixed the "double-free" bug that would sometimes cause the visor + driver to crash or hang on Linux systems + * Network Hotsync from Linux to Windows now works + * Perl bindings will build cleanly on perl 5.6 and 5.8 with gcc 2.x + and 3.x + * Fixed an issue with libpng being linked into every binary by + default + +Known Problems: + * Java bindings may or may not work, need to investigate + + +-------------------------------------------------------------------------- +pilot-link 0.11.3, "Stable Release", 08-6-2002 +-------------------------------------------------------------------------- +This is a rollup stable release of previous 0.11.x bugfixes and feature +additions. + +Major Features: + * None at this time + +Other Features: + * None at this time + +Bug Fixes: + * Reverted a previous pilot-xfer option that overwrote the existing + line during a backup. Curses will be dropped into here soon to + more finitely control this. + * Fixed a missing dlpErrIllegalReq in pi-dlp.h that caused problems + with J-Pilot + +Known Problems: + None identified for this release + +-------------------------------------------------------------------------- +pilot-link 0.11.2, "I Want One Two", 08-6-2002 +-------------------------------------------------------------------------- +This is an updated version to the 0.11.1 "Ocean's Eleventy-First" release +from July 18th, and fixes quite a few bugs that people have reported with +gnome-pilot and J-Pilot. + +Major Features: + * pilot-xfer now has a more "usable" backup style, and the -q option + now does something useful (this will be changing in the near + future, enabling curses to control the backup "windowing") + * First pass at native FreeBSD support from Anish Mistry (we need + testers!) + +Other Features: + * None at this time + +Bug Fixes: + * install-todos -f didn't work at all in 0.11, fixed. + * pilot-addresses didn't import the right csv format, fixed. + * Updated the manpages and fixed some typos in the source + documentation + * ReadDBList was returning an incorrect value, confusing J-Pilot, + fixed. + * TCL version test was incorrect in ./confiure.in, fixed. + * pi-addresses.h had an incorrect field ordering which caused the + ouput csv to be incompatible with the record format, fixed. + * Updates to allow pilot-link to build under BSD/OS 4.3 (Jeffrey C + Honig) + +Known Problems: + * Network Hotsync from Linux to Windows does not work + +-------------------------------------------------------------------------- +pilot-link 0.11.1, "Ocean's Eleventy-first", 07-18-2002 +-------------------------------------------------------------------------- +This is a bugfix release to address some issues found in the 0.11 release +from 7-12-2002. + +Major Features: + * read-palmpix now takes arguments for output file type, "-t png" or + "-t ppm" + * read-notepad also updated to accept the same argument types + +Other Features: + * Fixed some of the gcc-related warnings (more to come) + * All of the language bindings (Perl, Python, Java, Tcl, Tk, iTcl) + all default to off, unless specified. If you want to enable them, + you must use --with-foo, where 'foo' is the binding of your + choice, such as --with-perl + +Bug Fixes: + * pilot-xfer -f didn't work at all in 0.11, fixed. + * pilot-xfer -f bugfix for non-writable local files + * Minor Python build fix + +Known Problems: + * pilot-addresses -T header fix (don't import header into record) + * pilot-xfer -f fix (support '-f FooDB' as 'FooDB.p{db|rc|qa} + +-------------------------------------------------------------------------- +pilot-link 0.11, "Ocean's Eleven", 07-12-2002 +-------------------------------------------------------------------------- +This is a development release, primarily to test the new usb device support. +Most of the USB devices are on /dev/ttyUSB1 (or usb/tts/1), except for the +Sony PEG-S300 and 760C which are on /dev/ttyUSB0 (or usb/tts/0). Note that +you must hit the sync button prior to running the app right now for USB +devices. It is recommended that a kernel > 2.4.16 be used due to problems +that existed in earlier drivers (may get a kernel oops). + +Major Features: + * DLP argument parsing re-write + * Better usb device support e.g. usb:/dev/ttyUSB1 + +Other Features: + * Allow sync to proceed even if OS 4.x device has password set + * Split out generic conduit library to libpisync + * DLP regression test + +Bug Fixes: + * Compile perl, python modules with correct lib dir + * Lots of minor bug fixes, reorganization + +Known Problems (Please see doc/TODO for more details): + * os2serial.c and winserial.c files are not yet ported to the new + USB, serial, and Net protocol "recipes" + * The "sys" protocol is not well tested + * TCL/TK bindings are out of commission + * PDB files with space filler records are not yet handled properly + +-------------------------------------------------------------------------- +pilot-link 0.10.99, "Woodstock", 03-20-2002 +-------------------------------------------------------------------------- +This is a development release, primarily to test the new usb device support. +Most of the USB devices are on /dev/ttyUSB1 (or usb/tts/1), except for the +Sony PEG-S300 and 760C which are on /dev/ttyUSB0 (or usb/tts/0). Note that +you must hit the sync button prior to running the app right now for USB +devices. It is recommended that a kernel > 2.4.16 be used due to problems +that existed in earlier drivers (may get a kernel oops). + +Major Features: + * Support for new USB devices (like the Palm m500 and Sony + PEG-N710C) + * Updated Java bindings (David Goodenough) + * Updated Python bindings (Rob Tillotson) + * Application cleanup for consistency + +Other Features: + * Generic device and protocol implementations + * Complete Autoconf/Automake setup + * C++ library is now shared (.so) and installed + * Complete source tree re-organization + * Runtime debug logging down to the packet level + +Bug Fixes: + * Expense Preferences now pack/unpack correctly + * Dozens of minor bug fixes, code reformatting, reordanization + +Known Problems (Please see doc/TODO for more details): + * os2serial.c and winserial.c files are not yet ported to the new + USB, serial, and Net protocol "recipes" + * The "sys" protocol is not well tested + * TCL/TK bindings are out of commission + * PDB files with space filler records are not yet handled properly diff --git a/README b/README new file mode 100644 index 0000000..380b3e6 --- /dev/null +++ b/README @@ -0,0 +1,414 @@ +pilot-link -- Palm Handheld Glue - http://www.pilot-link.org + +The code and other related files in this distribution are licensed under the +GNU General Public License or "GPL", and the GNU Lesser Public License, or +"LGPL". See http://www.fsf.org/copyleft/lesser.html for a copy of the LGPL. + +We will only accept changes into pilot-link if they comply with the proper +licensing. There are many companies using pilot-link in their core products +and are complying with the license. There are also others companies who don't +believe that adhering to the licensing is that important, and violate the +license instead. Please do not be one of these companies. + +This code is under active development. If you would like to contribute to the +project, you can contact me, David A. Desrosiers, via email by sending an +email to desrod@gnu-designs.com. + +We can also be reached on Internet Relay Chat, "irc", at irc.pilot-link.org +in the channel #pilot-link. I go by the name "setuid" there, and there are a +dozen or more helpful users and other developers that hang out there on a +regular basis. + +From the main pilot-link website, you will find many links to helpful +documents, HOWTOs, complementary projects that use pilot-link, and other +resources to help you get the best use out of your Palm device on your +platform of choice; Linux, BSD or Mac OS X. + + Main website........: http://www.pilot-link.org/ + HOWTO Documents.....: http://howto.pilot-link.org/ + Code documentation..: http://doxygen.pilot-link.org/ + Reporting bugs......: http://bugs.pilot-link.org/ + Mailing lists.......: http://lists.pilot-link.org/ + +We also have several mailing list that you can join. There are mailing lists +for development-specific talk, general talk, announcements and commits. On +the mailing list webpage, you will have the ability to subscribe and read the +past lists archives and posts from thousands of other users. + +The architecture of pilot-link +------------------------------ +There are several core parts of pilot-link: + + the libraries + ------------- + pilot-link communicates with Palm handhelds using several methods and + functions specific to these devices. In order to facilitate these + communications, the functions are stored in a library, which other + applications can link to and gain access to those functions. J-Pilot + is one example of an application that does exactly this. + + The core pilot-link libraries are in the 'libpisock' and 'libpisync' + subdirectories of the project tree. + + The standard library for pilot-link is written in the C language, and + is very easy to understand and extend if you need to do so. + + + the conduits + ------------ + In pilot-link, there is also the notion of "conduits", that can be + used to communicate directly with your Palm handheld. These + "conduits" are the actual applications that you run directly. These + are the "userspace" programs. + + These "conduits" are found in the 'src' subdirectory of the project + tree. + + + the language bindings + --------------------- + + Along with the powerful libraries and conduits, pilot-link also + provides the ability to communicate with your Palm handheld using + your favorite language of choice. Currently, pilot-link includes + language "bindings" in Perl, Python, Java, and Tcl. This means you + can use those languages, instead of C directly, to talk to your Palm + handheld device and communicate with it. + + Want to write a Java application that uses pilot-link's libraries? + Simple! Just use the Java bindings. + + Want to talk to your Palm device using Perl code? Simply use the Perl + bindings. + + Our hope is that more bindings will be added in the future, such as + Ruby or Objective C. + + + the tests + --------- + In order to make sure the code in pilot-link does what it should, we + also include quite a bit of regression tests to check to make sure + each function we use is operating properly. These tests will check + each of these functions and report any errors or success as they are + run. + + +Building the project +-------------------- + pilot-link is developed primarily on Debian GNU/Linux and FreeBSD. It + is expected to build cleanly on any POSIX-compliant platform. Some + users have reported success building it under Cygwin on Windows. It + will also build cleanly under Apple OSX, if you have the proper + development environment installed and configured on your machine. + Each of these will be explained in detail below. + + +Building pilot-link on Linux/Unix systems +----------------------------------------- + PLEASE READ THIS CAREFULLY! The worst thing you can do is the + overly-common misuse of "configure, make, make install" to build and + install pilot-link. There are so many customizations you can make to + pilot-link, that you should almost never build pilot-link without + options. Please make sure you use the --help option to "./configure" + to make sure you're enabling all of the options you wish to use. + + If you have downloaded this code from the website, or as a tarball, + simply unpack the tarball and run "./configure" in the top-level + directory with your specific arguments. "./configure --help" will + describe all of them. + + If you want to install in some place other than the default location of + /usr/local, pass configure an argument such as: + + $ ./configure --prefix=/home/fred/pilot + + If configure ran successfully, you should run 'make' to build the + software. + + $ make + + After the source builds, feel free to play around in the 'src' + subdirectory, CAREFULLY. 'dlpsh' and 'pilot-xfer' are probably the + most useful programs for you, and also the safest to use + non-destructively. + + Once you have determined that pilot-link works and suits your needs + by testing with these programs, switch to the super user, typically + "root", to install the conduits, libraries, docs, and headers + required for proper operation and development of pilot-link. + + $ su - root + + If you wish to include root's environment when you install (STRONGLY + recommended), be sure to pass the '-' option when you su to root, as + above. + + AFTER you test that the code works properly, run 'make install' to + install the code into your specified prefix, or the default of + /usr/local will be used. + + # make install + + If you are using a CVS version of pilot-link, you will have to run + 'sh ./autogen.sh' instead, from the top-level directory, which will + create and bootstrap the "./configure" script for you. + + You will also need to have your development environment set up, which + will require such tools as automake, autoconf, libtool, some system + headers, and others to be properly installed and configured on your + machine first. If you are running a current Linux or Unix system, + these common tools are probably packaged for you. + + +Building pilot-link on OS/2 +--------------------------- + pilot-link on OS/2 only supports serial devices. USB is unsupported + at this time. We would like volunteers to help us out porting + pilot-link to work with USB on that platform. If you are skilled and + interested in helping, please contact me directly. I can't seem to + get the OS to run correctly on any hardware I have, so I need some + help there. + + The steps are fairly straightforward. + + Run the os2configure.cmd script in the top-level directory. + + Run make -f Makefile.os2 + + Play around, CAREFULLY. pilot-xfer is probably the most useful + program for you, and also the safest of all to use non-destructively. + Also dlpsh is a good app to use to poke around in your Palm device. + + Run 'make install' if you you have tested thoroughly and are sure + pilot-link works well for you. + + Note on pilot-debug: This program is a work-in-progress, and requires + Tcl 7.5 (or greater) and optionally Tk 4.1 (or greater) and/or + Readline 2.0. You'll need to modify Makefile to to use Readline 2.0, + and if your Tcl or Tk aren't in standard places, you'll need to + wiggle configure or the Makefile. You must have installed pilot-link + or else run pilot-debug in the pilot-link source directory if you + want the fancy images for the Remote UI window. + + +Building pilot-link on Apple OSX/Darwin +--------------------------------------- + To build pilot-link on Apple OSX ("Darwin") systems, you will need to + make sure you have some development tools installed first. These can + all be found in the "Fink" package repository hosted on SourceForge. + + http://fink.sourceforge.net/ + + Download and install the latest Fink from there onto your OSX system. + These will install into the $PREFIX of /sw on your machine. To gain + access to the binaries it places in /sw/bin, export the proper + /sw/bin path to the BEGINNING of your $PATH environment variable. Do + NOT put it at the end: + + Correct method (for bash) + ------------------------- + export PATH=/sw/bin:$PATH + + Incorrect method (for bash) + --------------------------- + export PATH=$PATH:/sw/bin + + The reason we need it at the beginning, is so that we can make sure + the GNU tools that Fink uses, are chosen first, and not the OSX tools + which may carry the same name (libtool is one example). + + Now that you have Fink installed, and the $PATH exported properly, + execute the following command (as root): + + # fink selfupdate + + This will update your newly-installed Fink to the latest version + available for download. In many cases, the latest version for + download may not be the latest version available. 'selfupdate' + ensures that it is. + + From there, you will need to install some GNU tools. Please install + the following packages, using the 'fink install ' + syntax: + + automake + autoconf + libtool + libtool-shlibs + m4 + readline + readline-shlibs + make + + When these are installed, you can then unpack pilot-link, and run the + ./configure found inside with your custom arguments and parameters. + + REMEMBER: It is almost always incorrect to run ./configure without + passing it any parameters. Please use './configure --help' first to + see descriptions of the parameters you will need to use to customize + pilot-link for your needs. + + After running ./configure, you should then be able to build it with + the 'make' command. If it builds clean, PLEASE remember to test it + first. The syntax to test pilot-link on OSX for USB devices is as + follows: + + -p usb: [arguments..] + + One example of this is as follows: + + pilot-xfer --port usb: --list + + This should list the record and resource databases found on your Palm + handheld device. + + +Building pilot-link on Cygwin under Windows +------------------------------------------- + FIXME: Unsupported at this time, but may run under Cygwin talking to + COM1 through the Cygwin virtual serial port bridging. + + +Some usage notes about pilot-link +--------------------------------- + read-ical and sync-ical will only run if you have ical-2.x installed + and in the path. + + sync-plan is a full syncronization program, though it has some + interesting quirks and requirements. You must running netplan from + plan-1.6.1 (probably available at + ). Future or later versions may + work, but I cannot gaurantee this. Sync-plan does _not_ check the + Palm's user name, so be very careful not to sync two Palms to the + same Plan database. This will not work in a useful manner, at the + moment. Sync-plan leaves a file, that has a name starting with + "pilothash", in the current directory. This file must be present for + all future syncs between that plan database and that Palm. + + As sync-plan is a work in progress, please contact me with any + problems. + + The default connection rate is 9600 baud. You are welcome to try + higher baud rates (19200, 38400, or 57600) by setting the PILOTRATE + environment variable, but various machines have various limitations. + (Be careful about 38400 on a Linux box if you've been using setserial + to change the multiplier.) + + pilot-mail (which requires a Palm with the new Mail application, as + well as sendmail and/or a POP3 server) is still in the experimental + stage. Run with an argument of '-H' for help. While I don't expect + it to lose data, (and by default mail is kept on both sides, not + deleted) I can not and will not guarantee that you won't. Please back + up your UNIX mailbox and Palm mailbox (via pilot-xfer) before + experimenting. + + If you wish, you may easily change the default settings (pop host, + password, etc.) for pilot-mail by editing the top of pilot-mail.c, as + well as by setting the environment variables indicated in its help. + + Scott Grosch's "validate" program is included, and can be made via + 'make validate', but it may not be of use to anyone but Scott. + + +Debugging notes +--------------- + Please see doc/README.debugging for more detailed information + describing how to debug pilot-link's core protocols and interfaces. + Debugging pilot-link will allow us to make pilot-link work better on + new devices and with new applications. + + +USB Notes +--------- + Please see doc/README.usb for more detailed information on + configuring your system to use USB-enabled Palm handheld devices + using the standard Linux "visor" kernel module. + + If you would like to try the new libusb code, please see + doc/README.libusb for details on how to get that working properly. + + +FreeBSD Notes +------------- + Please see doc/README.freebsd for more detailed information on + setting up pilot-link to work with FreeBSD systems. In FreeBSD, you + may have to set your ACLOCAL_FLAGS="-I /usr/local/share/aclocal/" + before running autogen.sh. + + To use libusb, install the libusb port first and run configure. You + will need to set LDFLAGS, CFLAGS and CPPFLAGS to let configure find + the library, though. Something like this: + + $ ACLOCAL_FLAGS="-I /usr/local/share/aclocal/" + $ LDFLAGS="-L/usr/local/lib" + $ CFLAGS="-I/usr/local/include" + $ CPPFLAGS="-I/usr/local/include" + $ export ACLOCAL_FLAGS LDFLAGS CFLAGS CPPFLAGS + + +Embedding information +--------------------- + As of 0.5.0, the headers in pilot-link have been rearranged slightly + so that it should be easier and more reliable to use the libpisock.a + library in external applications. + + If you want to use the pilot-link portability layer (configured via + autoconf), then include pi-source.h. Otherwise, do not touch this + file, as it sets up a mildly complex environment. + + For all normal operations, simply include the obvious files (pi-file + for pdb and .prc file access, pi-dlp for DLP sync functions, etc.). + pi-macros contains the portable byte-access routines. + + +Reporting Bugs +-------------- + Any bugs you find with pilot-link can be easily reported in the + online bug-tracking system found at http://bugs.pilot-link.org. From + there, any issues reported can be updated, audited, commented on, and + resolved. You can also attach files and patches any other relevant + items to each bug report, to help our team solve the issues or add + the features you report. + + PLEASE NOTE + ----------- + Please check the existing bugs in the system FIRST + before reporting your bug. There may be an identical + report from another user that matches your bug. If + you find one that is similar, please add your notes + and details to that existing report. Please try to be + as specific as possible. + + If your bug is unique, and does not appear in the system, please fill + out a new bug report and remember to be as detailed as possible when + filling it out. Make sure to include your operating system, version + of pilot-link, Palm handheld type and the PalmOS version running on + the device, and any steps required to reproduce the bug. + + With this information, the developers can be well-informed with the + information they'll need to help try to track down and fix your bug. + + +License notes +------------- + The utility programs, otherwise known collectively as "conduits" + (pilot-xfer, dlpsh, sync-plan, etc.) are licensed for use under the + GPL. For more information, please see the file COPYING included in + this source tree. + + The libraries (libpisock, libpisync, libpisock++, and libcc) and the + language bindings (Perl, Python, Java, and Tcl) are licensed for use + under the LGPL. For more information, please see COPYING.LIB included + in this source tree. + + All contained source is the copyright of its author(s). Please see + the copyright notices in the individual files for more information on + their individual copyrights. + +--------------------- +Happy Hacking, +The pilot-link Team +--------------------- +pilot-link was originally written by Kenneth Albanowski +and others. diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..016eee9 --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,1172 @@ +# generated automatically by aclocal 1.11.1 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],, +[m4_warning([this file was generated for autoconf 2.65. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# +# Copyright © 2004 Scott James Remnant . +# +# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi + +fi[]dnl +])# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# +# Similar to PKG_CHECK_MODULES, make sure that the first instance of +# this or PKG_CHECK_MODULES is called, or make sure to call +# PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_ifval([$2], [$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], +[if test -n "$PKG_CONFIG"; then + if test -n "$$1"; then + pkg_cv_[]$1="$$1" + else + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], + [pkg_failed=yes]) + fi +else + pkg_failed=untried +fi[]dnl +])# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + ifelse([$4], , [AC_MSG_ERROR(dnl +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT +])], + [AC_MSG_RESULT([no]) + $4]) +elif test $pkg_failed = untried; then + ifelse([$4], , [AC_MSG_FAILURE(dnl +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .])], + [$4]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + ifelse([$3], , :, [$3]) +fi[]dnl +])# PKG_CHECK_MODULES + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.11.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 9 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 10 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 5 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 8 + +# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. +AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 16 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*- +# From Jim Meyering + +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_MAINTAINER_MODE([DEFAULT-MODE]) +# ---------------------------------- +# Control maintainer-specific portions of Makefiles. +# Default is to disable them, unless `enable' is passed literally. +# For symmetry, `disable' may be passed as well. Anyway, the user +# can override the default with the --enable/--disable switch. +AC_DEFUN([AM_MAINTAINER_MODE], +[m4_case(m4_default([$1], [disable]), + [enable], [m4_define([am_maintainer_other], [disable])], + [disable], [m4_define([am_maintainer_other], [enable])], + [m4_define([am_maintainer_other], [enable]) + m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) +AC_MSG_CHECKING([whether to am_maintainer_other maintainer-specific portions of Makefiles]) + dnl maintainer-mode's default is 'disable' unless 'enable' is passed + AC_ARG_ENABLE([maintainer-mode], +[ --][am_maintainer_other][-maintainer-mode am_maintainer_other make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + [USE_MAINTAINER_MODE=$enableval], + [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) + AC_MSG_RESULT([$USE_MAINTAINER_MODE]) + AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST([MAINT])dnl +] +) + +AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 5 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([m4/bluez.m4]) +m4_include([m4/libtool.m4]) +m4_include([m4/ltoptions.m4]) +m4_include([m4/ltsugar.m4]) +m4_include([m4/ltversion.m4]) +m4_include([m4/lt~obsolete.m4]) +m4_include([m4/python.m4]) +m4_include([m4/socklen.m4]) +m4_include([m4/tcl.m4]) +m4_include([m4/threads.m4]) +m4_include([m4/vl_lib_readline.m4]) diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 0000000..1e806de --- /dev/null +++ b/autogen.sh @@ -0,0 +1,223 @@ +#!/bin/sh +# Run this to generate all the initial makefiles, etc. + +PKG_NAME=pilot-link +srcdir=`dirname $0` +test -z "$srcdir" && srcdir=. + +DIE=0 + +(autoconf --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have \`autoconf' installed to compile $PKG_NAME." + echo "Download the appropriate package for your distribution or get the source." + echo "Get ftp://ftp.gnu.org/pub/gnu/autoconf/autoconf-2.50.tar.gz" + echo "(or a newer version if it is available)" + DIE=1 +} + +(grep "^AM_PROG_LIBTOOL" $srcdir/configure.ac >/dev/null) && { + (glibtool --version) < /dev/null > /dev/null 2>&1 || + (libtool --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have \`libtool' installed to compile $PKG_NAME." + echo "Get ftp://ftp.gnu.org/pub/gnu/libtool/libtool-1.5.tar.gz" + echo "(or a newer version if it is available)" + DIE=1 + } +} + +# usage: test_version program version +# returns 0 if program >= version; returns 1 if not. +test_version() +{ + this_prog="$1" + want_vers="$2" + + testv=`"$this_prog" --version 2>/dev/null | head -1 | awk '{print $NF}'` + if test -z "$testv" ; then return 1 ; fi + + testv_major=`echo "$testv" | sed 's/\([0-9]*\).\([0-9]*\).*$/\1/'` + testv_minor=`echo "$testv" | sed 's/\([0-9]*\).\([0-9]*\).*$/\2/'` + + vers_major=`echo "$want_vers" | sed 's/\([0-9]*\).\([0-9]*\).*$/\1/'` + vers_minor=`echo "$want_vers" | sed 's/\([0-9]*\).\([0-9]*\).*$/\2/'` + + # if wanted_major > found_major, this isn't good enough + if test $vers_major -gt $testv_major ; then + return 1 + # if wanted_major < found_major, then this is fine + elif test $vers_major -lt $testv_major ; then + return 0 + # if we get here, then the majors are equal, so test the minor version + # we want found_minor >= want_minor. + # So, if want_minor > found_minor, this is bad. + elif test $vers_minor -gt $testv_minor ; then + return 1 + # this is it. + else + return 0 + fi +} + +# usage: find_program preset program version "" +# sets "program" to the name of the program to use. +# if preset is set, then use that regardless, +# otherwise check if "program" is of a good enough version and use that, +# otherwise check if "program-version" is of a good enough version and use that. +# otherwise return an error. +find_program() +{ + find="$1" + prog="$2" + vers="$3" + extravers="$4" + + if test -n "$find" ; then + test_version "$find" "$vers" + status="$?" + if test "$status" = 0 ; then + program="$find" + return 0 + fi + echo "**Error**: cannot use $find" + else + + test_version "$prog" "$vers" + status=$? + if test "$status" = 0 ; then + program="$prog" + return 0 + fi + + for test_vers in $vers $extravers ; do + test_version "$prog-$test_vers" "$vers" + status=$? + if test "$status" = 0 ; then + program="$prog-$test_vers" + return 0 + fi + done + fi + + echo + echo "**Warning**: Could not find a $prog that identifies itself >= $vers." + echo + program="$prog" +} + +# These statics should really be defined at the top +find_program "$AUTOCONF" autoconf "2.53" +AUTOCONF="$program" +find_program "$AUTOHEADER" autoheader "2.53" +AUTOHEADER="$program" +find_program "$AUTOMAKE" automake "1.5 1.6 1.7 1.8" +AUTOMAKE="$program" +find_program "$ACLOCAL" aclocal "1.5 1.6 1.7 1.8" +ACLOCAL="$program" + +($AUTOMAKE --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: You must have \`automake' installed to compile $PKG_NAME." + echo "Get ftp://ftp.gnu.org/pub/gnu/automake/automake-1.7.tar.gz" + echo "(or a newer version if it is available)" + DIE=1 + NO_AUTOMAKE=yes +} + +# if no automake, don't bother testing for aclocal +test -n "$NO_AUTOMAKE" || (aclocal --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "**Error**: Missing \`aclocal'. The version of \`automake'" + echo "installed doesn't appear recent enough." + echo "Get ftp://ftp.gnu.org/pub/gnu/automake/automake-1.7.tar.gz" + echo "(or a newer version if it is available)" + DIE=1 +} + +if test "$DIE" -eq 1; then + exit 1 +fi + +if test -z "$*"; then + echo "**Warning**: I am going to run \`configure' with no arguments." + echo "If you wish to pass any to it, please specify them on the" + echo \`$0\'" command line." + echo +fi + +case $CC in +xlc ) + am_opt=--include-deps;; +esac + +for coin in `find $srcdir -name configure.ac -print` +do + dr=`dirname $coin` + if test -f $dr/NO-AUTO-GEN; then + echo skipping $dr -- flagged as no auto-gen + else + echo processing $dr + ( cd $dr + aclocalinclude="$ACLOCAL_FLAGS -I m4" + + if grep "^AM_GNU_GETTEXT" configure.ac >/dev/null; then + if grep "sed.*POTFILES" configure.ac >/dev/null; then + : do nothing -- we still have an old unmodified configure.ac + else + echo "Creating $dr/aclocal.m4 ..." + test -r $dr/aclocal.m4 || touch $dr/aclocal.m4 + echo "Running gettextize... Ignore non-fatal messages." + echo "no" | gettextize --force --copy + echo "Making $dr/aclocal.m4 writable ..." + test -r $dr/aclocal.m4 && chmod u+w $dr/aclocal.m4 + fi + fi + if grep "^AM_PROG_LIBTOOL" configure.ac >/dev/null; then + if test -z "$NO_LIBTOOLIZE" ; then + case "$OSTYPE" in + *darwin*) + echo "Running glibtoolize... ($MACHTYPE)" + glibtoolize --force --copy + ;; + *) + echo "Running libtoolize..." + libtoolize --force --copy + ;; + esac + fi + fi + + echo "Running aclocal $aclocalinclude ..." + $ACLOCAL $aclocalinclude || { + echo + echo "**Error**: aclocal failed. This may mean that you have not" + echo "installed all of the packages you need, or you may need to" + echo "set ACLOCAL_FLAGS to include \"-I \$prefix/share/aclocal\"" + echo "for the prefix where you installed the packages whose" + echo "macros were not found" + exit 1 + } + + if grep "^AM_CONFIG_HEADER" configure.ac >/dev/null; then + echo "Running autoheader..." + $AUTOHEADER || { echo "**Error**: autoheader failed."; exit 1; } + fi + echo "Running automake --gnu $am_opt ..." + $AUTOMAKE --add-missing --gnu $am_opt || + { echo "**Error**: automake failed."; exit 1; } + echo "Running autoconf ..." + $AUTOCONF || { echo "**Error**: autoconf failed."; exit 1; } + ) || exit 1 + fi +done + +conf_flags="--enable-maintainer-mode " #--enable-compile-warnings --enable-iso-c + +if test x$NOCONFIGURE = x; then + echo Running $srcdir/configure $conf_flags "$@" ... + $srcdir/configure $conf_flags "$@" \ + && echo Now type \`make\' to compile $PKG_NAME || exit 1 +else + echo Skipping configure process. +fi diff --git a/bindings/Java/.cvsignore b/bindings/Java/.cvsignore new file mode 100644 index 0000000..c038ed7 --- /dev/null +++ b/bindings/Java/.cvsignore @@ -0,0 +1,2 @@ +Makefile +Makefile.in \ No newline at end of file diff --git a/bindings/Java/Makefile b/bindings/Java/Makefile new file mode 100644 index 0000000..cf93cd9 --- /dev/null +++ b/bindings/Java/Makefile @@ -0,0 +1,531 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# bindings/Java/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +pkgdatadir = $(datadir)/pilot-link +pkgincludedir = $(includedir)/pilot-link +pkglibdir = $(libdir)/pilot-link +pkglibexecdir = $(libexecdir)/pilot-link +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = x86_64-unknown-linux-gnu +host_triplet = x86_64-unknown-linux-gnu +target_triplet = x86_64-unknown-linux-gnu +subdir = bindings/Java +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in TODO +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/bluez.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/python.m4 \ + $(top_srcdir)/m4/socklen.m4 $(top_srcdir)/m4/tcl.m4 \ + $(top_srcdir)/m4/threads.m4 \ + $(top_srcdir)/m4/vl_lib_readline.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h \ + $(top_builddir)/include/pi-md5.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /Source/cvs/palm/pilot-link/HEAD/missing --run aclocal-1.11 +AMTAR = ${SHELL} /Source/cvs/palm/pilot-link/HEAD/missing --run tar +AR = ar +AUTOCONF = ${SHELL} /Source/cvs/palm/pilot-link/HEAD/missing --run autoconf +AUTOHEADER = ${SHELL} /Source/cvs/palm/pilot-link/HEAD/missing --run autoheader +AUTOMAKE = ${SHELL} /Source/cvs/palm/pilot-link/HEAD/missing --run automake-1.11 +AWK = gawk +BLUEZ_CFLAGS = +BLUEZ_LIBS = -lbluetooth +CAT_ENTRY_END = +CAT_ENTRY_START = +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -ansi -Wshadow -Wall -W -Waggregate-return -Wcast-align -Wcast-qual -Wnested-externs -Wpointer-arith -Wundef -Wbad-function-cast -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -Wconversion -Winline -pedantic -O0 -std=gnu99 -g -Wshadow -Wall -W -Waggregate-return -Wcast-align -Wcast-qual -Wnested-externs -Wpointer-arith -Wundef -Winline -Wbad-function-cast -pedantic -O0 +CPP = gcc -E +CPPFLAGS = +CYGPATH_W = echo +DEFS = -DHAVE_CONFIG_H +DEPDIR = .deps +DOCBOOK_ROOT = +DSYMUTIL = +DUMPBIN = +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = /bin/grep -E +EXEEXT = +F77 = +FFLAGS = +FGREP = /bin/grep -F +GREP = /bin/grep +ICONV_CFLAGS = +ICONV_LIBS = +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = $(install_sh) -c -s +JAR = /usr/local/jdk1.6.0_13/bin/jar +JAVA = /usr/local/jdk1.6.0_13/bin/java +JAVABASE = /usr/local/jdk1.6.0_13 +JAVAC = /usr/local/jdk1.6.0_13/bin/javac +JAVA_VERSION = 1.6.0_13 +LD = /usr/bin/ld -m elf_x86_64 +LDFLAGS = +LIBOBJS = +LIBS = +LIBTOOL = $(SHELL) $(top_builddir)/libtool +LIPO = +LN_S = ln -s +LTLIBOBJS = +MAINT = +MAKEINFO = ${SHELL} /Source/cvs/palm/pilot-link/HEAD/missing --run makeinfo +MKDIR_P = /bin/mkdir -p +NM = /usr/bin/nm -B +NMEDIT = +OBJDUMP = objdump +OBJEXT = o +OTOOL = +OTOOL64 = +PACKAGE = pilot-link +PACKAGE_BUGREPORT = +PACKAGE_NAME = +PACKAGE_STRING = +PACKAGE_TARNAME = +PACKAGE_URL = +PACKAGE_VERSION = +PATH_SEPARATOR = : +PERL = perl +PIC_LIBS = +PILOT_LINK_MAJOR = 12 +PILOT_LINK_MINOR = 5 +PILOT_LINK_PATCH = +PILOT_LINK_VERS = 0 +PISOCK_AGE = 0 +PISOCK_CURRENT = 9 +PISOCK_REVISION = 2 +PISYNC_AGE = 0 +PISYNC_CURRENT = 1 +PISYNC_REVISION = 3 +PKG_CONFIG = /usr/bin/pkg-config +PNG_CFLAGS = +PNG_LIBS = -lpng +POPT_INCLUDES = -I$(top_srcdir)/popt +POPT_LIBS = $(top_builddir)/popt/libpopt.la +PTHREAD_CC = gcc +PTHREAD_CFLAGS = -pthread +PTHREAD_LIBS = +PYTHON = +PYTHON_CFLAGS = +PYTHON_H = +PYTHON_LIBS = +PYTHON_VERSION = +RANLIB = ranlib +RL_LIBS = -lreadline +SED = /bin/sed +SET_MAKE = +SHELL = /bin/bash +STRIP = strip +TCLSH_PROG = +TCL_BIN_DIR = +TCL_DEFS = +TCL_EXTRA_CFLAGS = +TCL_INCLUDES = +TCL_LD_FLAGS = +TCL_LIBS = +TCL_LIB_FILE = +TCL_LIB_FLAG = +TCL_LIB_SPEC = +TCL_SHLIB_LD_LIBS = +TCL_SRC_DIR = +TCL_STUB_LIB_FILE = +TCL_STUB_LIB_FLAG = +TCL_STUB_LIB_SPEC = +TCL_VERSION = +VERSION = 0.12.5 +WISH_PROG = +XML_CATALOG = +XSLTPROC = /usr/bin/xsltproc +XSLTPROC_FLAGS = --nonet +YACC = yacc +YFLAGS = +abs_builddir = /Source/cvs/palm/pilot-link/HEAD/bindings/Java +abs_srcdir = /Source/cvs/palm/pilot-link/HEAD/bindings/Java +abs_top_builddir = /Source/cvs/palm/pilot-link/HEAD +abs_top_srcdir = /Source/cvs/palm/pilot-link/HEAD +ac_ct_CC = gcc +ac_ct_DUMPBIN = +ac_ct_F77 = +acx_pthread_config = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +bindir = ${exec_prefix}/bin +build = x86_64-unknown-linux-gnu +build_alias = +build_cpu = x86_64 +build_os = linux-gnu +build_vendor = unknown +builddir = . +datadir = ${datarootdir} +datarootdir = ${prefix}/share +docdir = ${datarootdir}/doc/${PACKAGE} +dvidir = ${docdir} +exec_prefix = ${prefix} +host = x86_64-unknown-linux-gnu +host_alias = +host_cpu = x86_64 +host_os = linux-gnu +host_vendor = unknown +htmldir = ${docdir} +includedir = ${prefix}/include +infodir = ${datarootdir}/info +install_sh = ${SHELL} /Source/cvs/palm/pilot-link/HEAD/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localedir = ${datarootdir}/locale +localstatedir = ${prefix}/var +lt_ECHO = echo +mandir = ${datarootdir}/man +mkdir_p = /bin/mkdir -p +oldincludedir = /usr/include +pdfdir = ${docdir} +prefix = /usr/local +program_transform_name = s,x,x, +psdir = ${docdir} +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +srcdir = . +sysconfdir = ${prefix}/etc +target = x86_64-unknown-linux-gnu +target_alias = +target_cpu = x86_64 +target_os = linux-gnu +target_vendor = unknown +top_build_prefix = ../../ +top_builddir = ../.. +top_srcdir = ../.. +usb_libs = -lusb +PORT = /dev/pilot +INCLUDES = \ + -I../../include \ + -I $(top_srcdir)/include \ + -I $(top_builddir)/include \ + -I $(JAVABASE)/include \ + -I $(JAVABASE)/include/linux + +java_files = \ + $(srcdir)/MidiMgr.java \ + $(srcdir)/TestTodos.java \ + $(srcdir)/org/gnu/pilotlink/AddressAppInfo.java \ + $(srcdir)/org/gnu/pilotlink/AppInfo.java \ + $(srcdir)/org/gnu/pilotlink/DBInfo.java \ + $(srcdir)/org/gnu/pilotlink/DatabaseExistsException.java \ + $(srcdir)/org/gnu/pilotlink/DatabaseNotFoundException.java \ + $(srcdir)/org/gnu/pilotlink/DatebookAppInfo.java \ + $(srcdir)/org/gnu/pilotlink/FTB3CostCatRecord.java \ + $(srcdir)/org/gnu/pilotlink/MemoRecord.java \ + $(srcdir)/org/gnu/pilotlink/PilotLink.java \ + $(srcdir)/org/gnu/pilotlink/PilotLinkException.java \ + $(srcdir)/org/gnu/pilotlink/RawAppInfo.java \ + $(srcdir)/org/gnu/pilotlink/RawRecord.java \ + $(srcdir)/org/gnu/pilotlink/SysInfo.java \ + $(srcdir)/org/gnu/pilotlink/User.java \ + $(srcdir)/org/gnu/pilotlink/Version.java \ + $(srcdir)/org/gnu/pilotlink/AddressRecord.java \ + $(srcdir)/org/gnu/pilotlink/FTB3TripRecord.java \ + $(srcdir)/org/gnu/pilotlink/FTB3VehicleRecord.java \ + $(srcdir)/org/gnu/pilotlink/DatebookRecord.java \ + $(srcdir)/org/gnu/pilotlink/MidiRecord.java \ + $(srcdir)/org/gnu/pilotlink/ToDoRecord.java \ + $(srcdir)/org/gnu/pilotlink/Record.java \ + $(srcdir)/test.java \ + $(srcdir)/datebooktst.java \ + $(srcdir)/adrtest.java + +java_classes = \ + MidiMgr.class \ + TestTodos.class \ + org/gnu/pilotlink/AddressAppInfo.class \ + org/gnu/pilotlink/AppInfo.class \ + org/gnu/pilotlink/DBInfo.class \ + org/gnu/pilotlink/DatabaseExistsException.class \ + org/gnu/pilotlink/DatabaseNotFoundException.class \ + org/gnu/pilotlink/DatebookAppInfo.class \ + org/gnu/pilotlink/FTB3CostCatRecord.class \ + org/gnu/pilotlink/MemoRecord.class \ + org/gnu/pilotlink/PilotLink.class \ + org/gnu/pilotlink/PilotLinkException.class \ + org/gnu/pilotlink/RawAppInfo.class \ + org/gnu/pilotlink/RawRecord.class \ + org/gnu/pilotlink/SysInfo.class \ + org/gnu/pilotlink/User.class \ + org/gnu/pilotlink/Version.class \ + org/gnu/pilotlink/AddressRecord.class \ + org/gnu/pilotlink/FTB3TripRecord.class \ + org/gnu/pilotlink/FTB3VehicleRecord.class \ + org/gnu/pilotlink/DatebookRecord.class \ + org/gnu/pilotlink/MidiRecord.class \ + org/gnu/pilotlink/ToDoRecord.class \ + org/gnu/pilotlink/Record.class \ + test.class \ + datebooktst.class \ + adrtest.class + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bindings/Java/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu bindings/Java/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-local mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + clean-local distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +all: java_pisock + +$(java_classes): java_compile + +java_compile: $(java_files) + $(JAVAC) -d . $(java_files) + +java_lib: libjpisock.c + $(CXX) $(INCLUDES) -fPIC $(DEFS) -L $(top_builddir)/libpisock/.libs -lpisock -shared -o libjpisock.so $(srcdir)/libjpisock.c + +java_jar: $(java_classes) + $(JAR) cvf pilot-link.jar $(java_classes) + +java_pisock: java_compile java_lib java_jar + +install: all + ARCH=""; \ + for a in i386 amd64 ppc; do \ + if [ -e ${JAVABASE}/jre/lib/$${a} ]; then \ + ARCH="$${a}"; \ + break; \ + fi; \ + done; \ + if [ -n "$${ARCH}" ]; then \ + echo "Unknown architecture. Copy lipijsock.so to ${JAVABASE}/jre/lib/ARCH/"; \ + else \ + mkdir -p "$(DESTDIR)${JAVABASE}/jre/lib/$${ARCH}" && \ + cp libjpisock.so "$(DESTDIR)${JAVABASE}/jre/lib/$${ARCH}"; \ + echo "done."; \ + fi + +test: install + ${JAVABASE}/bin/java test ${PORT} + +clean-local: + rm -f libjpisock.so + rm -f test.class + rm -f $(java_classes) + rm -f pilot-link.jar + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/bindings/Java/Makefile.am b/bindings/Java/Makefile.am new file mode 100644 index 0000000..cdeb59d --- /dev/null +++ b/bindings/Java/Makefile.am @@ -0,0 +1,106 @@ +PORT=/dev/pilot + +all: java_pisock + +INCLUDES= \ + -I../../include \ + -I $(top_srcdir)/include \ + -I $(top_builddir)/include \ + -I $(JAVABASE)/include \ + -I $(JAVABASE)/include/linux + +java_files= \ + $(srcdir)/MidiMgr.java \ + $(srcdir)/TestTodos.java \ + $(srcdir)/org/gnu/pilotlink/AddressAppInfo.java \ + $(srcdir)/org/gnu/pilotlink/AppInfo.java \ + $(srcdir)/org/gnu/pilotlink/DBInfo.java \ + $(srcdir)/org/gnu/pilotlink/DatabaseExistsException.java \ + $(srcdir)/org/gnu/pilotlink/DatabaseNotFoundException.java \ + $(srcdir)/org/gnu/pilotlink/DatebookAppInfo.java \ + $(srcdir)/org/gnu/pilotlink/FTB3CostCatRecord.java \ + $(srcdir)/org/gnu/pilotlink/MemoRecord.java \ + $(srcdir)/org/gnu/pilotlink/PilotLink.java \ + $(srcdir)/org/gnu/pilotlink/PilotLinkException.java \ + $(srcdir)/org/gnu/pilotlink/RawAppInfo.java \ + $(srcdir)/org/gnu/pilotlink/RawRecord.java \ + $(srcdir)/org/gnu/pilotlink/SysInfo.java \ + $(srcdir)/org/gnu/pilotlink/User.java \ + $(srcdir)/org/gnu/pilotlink/Version.java \ + $(srcdir)/org/gnu/pilotlink/AddressRecord.java \ + $(srcdir)/org/gnu/pilotlink/FTB3TripRecord.java \ + $(srcdir)/org/gnu/pilotlink/FTB3VehicleRecord.java \ + $(srcdir)/org/gnu/pilotlink/DatebookRecord.java \ + $(srcdir)/org/gnu/pilotlink/MidiRecord.java \ + $(srcdir)/org/gnu/pilotlink/ToDoRecord.java \ + $(srcdir)/org/gnu/pilotlink/Record.java \ + $(srcdir)/test.java \ + $(srcdir)/datebooktst.java \ + $(srcdir)/adrtest.java + +java_classes= \ + MidiMgr.class \ + TestTodos.class \ + org/gnu/pilotlink/AddressAppInfo.class \ + org/gnu/pilotlink/AppInfo.class \ + org/gnu/pilotlink/DBInfo.class \ + org/gnu/pilotlink/DatabaseExistsException.class \ + org/gnu/pilotlink/DatabaseNotFoundException.class \ + org/gnu/pilotlink/DatebookAppInfo.class \ + org/gnu/pilotlink/FTB3CostCatRecord.class \ + org/gnu/pilotlink/MemoRecord.class \ + org/gnu/pilotlink/PilotLink.class \ + org/gnu/pilotlink/PilotLinkException.class \ + org/gnu/pilotlink/RawAppInfo.class \ + org/gnu/pilotlink/RawRecord.class \ + org/gnu/pilotlink/SysInfo.class \ + org/gnu/pilotlink/User.class \ + org/gnu/pilotlink/Version.class \ + org/gnu/pilotlink/AddressRecord.class \ + org/gnu/pilotlink/FTB3TripRecord.class \ + org/gnu/pilotlink/FTB3VehicleRecord.class \ + org/gnu/pilotlink/DatebookRecord.class \ + org/gnu/pilotlink/MidiRecord.class \ + org/gnu/pilotlink/ToDoRecord.class \ + org/gnu/pilotlink/Record.class \ + test.class \ + datebooktst.class \ + adrtest.class + +$(java_classes): java_compile + +java_compile: $(java_files) + $(JAVAC) -d . $(java_files) + +java_lib: libjpisock.c + $(CXX) $(INCLUDES) -fPIC $(DEFS) -L $(top_builddir)/libpisock/.libs -lpisock -shared -o libjpisock.so $(srcdir)/libjpisock.c + +java_jar: $(java_classes) + $(JAR) cvf pilot-link.jar $(java_classes) + +java_pisock: java_compile java_lib java_jar + +install: all + ARCH=""; \ + for a in i386 amd64 ppc; do \ + if [ -e ${JAVABASE}/jre/lib/$${a} ]; then \ + ARCH="$${a}"; \ + break; \ + fi; \ + done; \ + if [ -n "$${ARCH}" ]; then \ + echo "Unknown architecture. Copy lipijsock.so to ${JAVABASE}/jre/lib/ARCH/"; \ + else \ + mkdir -p "$(DESTDIR)${JAVABASE}/jre/lib/$${ARCH}" && \ + cp libjpisock.so "$(DESTDIR)${JAVABASE}/jre/lib/$${ARCH}"; \ + echo "done."; \ + fi + +test: install + ${JAVABASE}/bin/java test ${PORT} + +clean-local: + rm -f libjpisock.so + rm -f test.class + rm -f $(java_classes) + rm -f pilot-link.jar diff --git a/bindings/Java/Makefile.in b/bindings/Java/Makefile.in new file mode 100644 index 0000000..75557f7 --- /dev/null +++ b/bindings/Java/Makefile.in @@ -0,0 +1,531 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = bindings/Java +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in TODO +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/bluez.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/python.m4 \ + $(top_srcdir)/m4/socklen.m4 $(top_srcdir)/m4/tcl.m4 \ + $(top_srcdir)/m4/threads.m4 \ + $(top_srcdir)/m4/vl_lib_readline.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h \ + $(top_builddir)/include/pi-md5.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLUEZ_CFLAGS = @BLUEZ_CFLAGS@ +BLUEZ_LIBS = @BLUEZ_LIBS@ +CAT_ENTRY_END = @CAT_ENTRY_END@ +CAT_ENTRY_START = @CAT_ENTRY_START@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOK_ROOT = @DOCBOOK_ROOT@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +GREP = @GREP@ +ICONV_CFLAGS = @ICONV_CFLAGS@ +ICONV_LIBS = @ICONV_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JAR = @JAR@ +JAVA = @JAVA@ +JAVABASE = @JAVABASE@ +JAVAC = @JAVAC@ +JAVA_VERSION = @JAVA_VERSION@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +PIC_LIBS = @PIC_LIBS@ +PILOT_LINK_MAJOR = @PILOT_LINK_MAJOR@ +PILOT_LINK_MINOR = @PILOT_LINK_MINOR@ +PILOT_LINK_PATCH = @PILOT_LINK_PATCH@ +PILOT_LINK_VERS = @PILOT_LINK_VERS@ +PISOCK_AGE = @PISOCK_AGE@ +PISOCK_CURRENT = @PISOCK_CURRENT@ +PISOCK_REVISION = @PISOCK_REVISION@ +PISYNC_AGE = @PISYNC_AGE@ +PISYNC_CURRENT = @PISYNC_CURRENT@ +PISYNC_REVISION = @PISYNC_REVISION@ +PKG_CONFIG = @PKG_CONFIG@ +PNG_CFLAGS = @PNG_CFLAGS@ +PNG_LIBS = @PNG_LIBS@ +POPT_INCLUDES = @POPT_INCLUDES@ +POPT_LIBS = @POPT_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHON_CFLAGS = @PYTHON_CFLAGS@ +PYTHON_H = @PYTHON_H@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RL_LIBS = @RL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TCLSH_PROG = @TCLSH_PROG@ +TCL_BIN_DIR = @TCL_BIN_DIR@ +TCL_DEFS = @TCL_DEFS@ +TCL_EXTRA_CFLAGS = @TCL_EXTRA_CFLAGS@ +TCL_INCLUDES = @TCL_INCLUDES@ +TCL_LD_FLAGS = @TCL_LD_FLAGS@ +TCL_LIBS = @TCL_LIBS@ +TCL_LIB_FILE = @TCL_LIB_FILE@ +TCL_LIB_FLAG = @TCL_LIB_FLAG@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_SHLIB_LD_LIBS = @TCL_SHLIB_LD_LIBS@ +TCL_SRC_DIR = @TCL_SRC_DIR@ +TCL_STUB_LIB_FILE = @TCL_STUB_LIB_FILE@ +TCL_STUB_LIB_FLAG = @TCL_STUB_LIB_FLAG@ +TCL_STUB_LIB_SPEC = @TCL_STUB_LIB_SPEC@ +TCL_VERSION = @TCL_VERSION@ +VERSION = @VERSION@ +WISH_PROG = @WISH_PROG@ +XML_CATALOG = @XML_CATALOG@ +XSLTPROC = @XSLTPROC@ +XSLTPROC_FLAGS = @XSLTPROC_FLAGS@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usb_libs = @usb_libs@ +PORT = /dev/pilot +INCLUDES = \ + -I../../include \ + -I $(top_srcdir)/include \ + -I $(top_builddir)/include \ + -I $(JAVABASE)/include \ + -I $(JAVABASE)/include/linux + +java_files = \ + $(srcdir)/MidiMgr.java \ + $(srcdir)/TestTodos.java \ + $(srcdir)/org/gnu/pilotlink/AddressAppInfo.java \ + $(srcdir)/org/gnu/pilotlink/AppInfo.java \ + $(srcdir)/org/gnu/pilotlink/DBInfo.java \ + $(srcdir)/org/gnu/pilotlink/DatabaseExistsException.java \ + $(srcdir)/org/gnu/pilotlink/DatabaseNotFoundException.java \ + $(srcdir)/org/gnu/pilotlink/DatebookAppInfo.java \ + $(srcdir)/org/gnu/pilotlink/FTB3CostCatRecord.java \ + $(srcdir)/org/gnu/pilotlink/MemoRecord.java \ + $(srcdir)/org/gnu/pilotlink/PilotLink.java \ + $(srcdir)/org/gnu/pilotlink/PilotLinkException.java \ + $(srcdir)/org/gnu/pilotlink/RawAppInfo.java \ + $(srcdir)/org/gnu/pilotlink/RawRecord.java \ + $(srcdir)/org/gnu/pilotlink/SysInfo.java \ + $(srcdir)/org/gnu/pilotlink/User.java \ + $(srcdir)/org/gnu/pilotlink/Version.java \ + $(srcdir)/org/gnu/pilotlink/AddressRecord.java \ + $(srcdir)/org/gnu/pilotlink/FTB3TripRecord.java \ + $(srcdir)/org/gnu/pilotlink/FTB3VehicleRecord.java \ + $(srcdir)/org/gnu/pilotlink/DatebookRecord.java \ + $(srcdir)/org/gnu/pilotlink/MidiRecord.java \ + $(srcdir)/org/gnu/pilotlink/ToDoRecord.java \ + $(srcdir)/org/gnu/pilotlink/Record.java \ + $(srcdir)/test.java \ + $(srcdir)/datebooktst.java \ + $(srcdir)/adrtest.java + +java_classes = \ + MidiMgr.class \ + TestTodos.class \ + org/gnu/pilotlink/AddressAppInfo.class \ + org/gnu/pilotlink/AppInfo.class \ + org/gnu/pilotlink/DBInfo.class \ + org/gnu/pilotlink/DatabaseExistsException.class \ + org/gnu/pilotlink/DatabaseNotFoundException.class \ + org/gnu/pilotlink/DatebookAppInfo.class \ + org/gnu/pilotlink/FTB3CostCatRecord.class \ + org/gnu/pilotlink/MemoRecord.class \ + org/gnu/pilotlink/PilotLink.class \ + org/gnu/pilotlink/PilotLinkException.class \ + org/gnu/pilotlink/RawAppInfo.class \ + org/gnu/pilotlink/RawRecord.class \ + org/gnu/pilotlink/SysInfo.class \ + org/gnu/pilotlink/User.class \ + org/gnu/pilotlink/Version.class \ + org/gnu/pilotlink/AddressRecord.class \ + org/gnu/pilotlink/FTB3TripRecord.class \ + org/gnu/pilotlink/FTB3VehicleRecord.class \ + org/gnu/pilotlink/DatebookRecord.class \ + org/gnu/pilotlink/MidiRecord.class \ + org/gnu/pilotlink/ToDoRecord.class \ + org/gnu/pilotlink/Record.class \ + test.class \ + datebooktst.class \ + adrtest.class + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bindings/Java/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu bindings/Java/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool clean-local mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + clean-local distclean distclean-generic distclean-libtool \ + distdir dvi dvi-am html html-am info info-am install \ + install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am + + +all: java_pisock + +$(java_classes): java_compile + +java_compile: $(java_files) + $(JAVAC) -d . $(java_files) + +java_lib: libjpisock.c + $(CXX) $(INCLUDES) -fPIC $(DEFS) -L $(top_builddir)/libpisock/.libs -lpisock -shared -o libjpisock.so $(srcdir)/libjpisock.c + +java_jar: $(java_classes) + $(JAR) cvf pilot-link.jar $(java_classes) + +java_pisock: java_compile java_lib java_jar + +install: all + ARCH=""; \ + for a in i386 amd64 ppc; do \ + if [ -e ${JAVABASE}/jre/lib/$${a} ]; then \ + ARCH="$${a}"; \ + break; \ + fi; \ + done; \ + if [ -n "$${ARCH}" ]; then \ + echo "Unknown architecture. Copy lipijsock.so to ${JAVABASE}/jre/lib/ARCH/"; \ + else \ + mkdir -p "$(DESTDIR)${JAVABASE}/jre/lib/$${ARCH}" && \ + cp libjpisock.so "$(DESTDIR)${JAVABASE}/jre/lib/$${ARCH}"; \ + echo "done."; \ + fi + +test: install + ${JAVABASE}/bin/java test ${PORT} + +clean-local: + rm -f libjpisock.so + rm -f test.class + rm -f $(java_classes) + rm -f pilot-link.jar + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/bindings/Java/MidiMgr.class b/bindings/Java/MidiMgr.class new file mode 100644 index 0000000000000000000000000000000000000000..131e9bb23bee65ecb67826a1921f3eea24669fd2 GIT binary patch literal 6568 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 '0' && arr[i] <= 'z') || (arr[i] == ' ')) { + chars += (char) arr[i]; + } else if (arr[i] == 252) { + chars += "\ufffd"; + } else if (arr[i] ==246) { + chars += "\ufffd"; + } else if (arr[i] == (byte) '\ufffd') { + chars += "\ufffd"; + } else { + chars += "."; + } + + } + System.out.println(" " + chars); + } + } + +} diff --git a/bindings/Java/README b/bindings/Java/README new file mode 100644 index 0000000..5ffa4bc --- /dev/null +++ b/bindings/Java/README @@ -0,0 +1,27 @@ +Stephan Bösebeck & John Mitchell + +We have coded this bindings for the PilotLink library, as the original version by David Goodenough did not run with jdk 1.4. +Some remarks about the source: +- We wanted to keep the C-part as small es possible. So porting to other platforms should be easier +- All communication with the lib is done via org.gnu.PilotLink, which uses RawRecords. These RawRecords can be used to build other data records (lik DatebookRecord, Memo, etc). Disgn like in jdk's streams: + DatebookRecord dbr= new DatebookRecord(PilotLink.getRecord...) + +At the moment, this functions are supported: +- Reading and writing of RawRecords by index +- Reading of user and sysinfo +- reading and writing of DatebookRecords + +I hope i can add more features soon. + +BUG: +There is a problem opening more than one db at a time. The lib gives back Errorcode -1, even if the DB was being closed before. + +INSTALLATION: +Normally just do a "configure --with-java" in the Pilot-Link dir. Then you will get a pilotlink.jar and a lib, which will be installed in JAVA_HOME. +For testing an as an example, there is a test.java which can be used to demonstrate the funktionality of the bindings. Take a look at the test.java, before you try it... +By default, the port the test.java connects ist /dev/usb/tts/1 (Devfs), you can either change it in source or start the testclass with the port as param. + +Stephan Bösebeck (stephan_boesebeck@web.de) +John Mitchell (jfm@minioak.com) + +Thanks to Alex Villacís Lasso (a_villacis@palosanto.com) diff --git a/bindings/Java/README.de b/bindings/Java/README.de new file mode 100644 index 0000000..a1cbcf3 --- /dev/null +++ b/bindings/Java/README.de @@ -0,0 +1,30 @@ +Feb 2003, Stephan Bösebeck & John Mitchell + +Ich hab diese Pilotlink unterstützung für Java geschrieben, weil ich die ursprüngliche Version von David Goodenough nicht mit Java 1.4 ans laufen bekommen hab und alle anderen Java Unterstüztungen für Palm auf Windows aufsetzen bzw. JComm benötigen. +Ich bin die Sache auch etwas anders angegangen: +- Ich will den C-Part so klein wie möglich halten, damit ist es einfacher, platformunabhängig zu bleiben und die Erweiterung auf neue Datentypen (Fahrtenbücher, Bilder, Telefon etc.) ist in Java möglich. (ausserdem hab ich schon ne ganze Weile kein c mehr programmiert ;-) +- Jede Kommunikation mit der Bibliothek wird über die Klasse org.gnu.PilotLink erledigt. Dort werden RawRecords verwendet (Eigentlich nur eine Classe um ein byte Array). Diese können wiederum umgebaut werden in andere Datenstrukturen (DatebookRecord, Memo, etc). Das ganze läuft ähnlich ab wie bei Streams: + DatebookRecord dbr=new DatebookRecord(PilotLink.getRecord...) + +Im Moment wird folgende Funktionalität unterstützt: +- Lesen und schreiben von RawRecords (by index) +- Lesen von User und Systeminfo +- Lesen DatebookRecords +- schreiben von DatebookRecords +die Funktionalität wird bald erweitert werden... + +Im Moment gibt es ein Problem, mehr als eine DB pro Session zu öffnen. +Es wird eine Fehlernummer -1 ausgegeben, auch wenn die DB vorher geschlossen wird. + +INSTALL +normalerweise sind folgende Schritte nötig: +- Installation über configure --with-java normalerweise +- bei make install werden die Lib und pilot-link.jar entsprchend installeirt +- test.java zum ausprobieren der Schnittstelle. (Bitte code vorher lesen!) + +Bei Fragen, Wünschen oder Anregungen, Mail an mich. + +Stephan Bösebeck (stephan_boesebeck@web.de) +John Mitchell (jfm@minioak.com) + +Danke an Alex Villacís Lasso (a_villacis@palosanto.com) diff --git a/bindings/Java/TODO b/bindings/Java/TODO new file mode 100644 index 0000000..904a004 --- /dev/null +++ b/bindings/Java/TODO @@ -0,0 +1,10 @@ +- SD Card info details + +- Mail, Todo and Expense conduits not implemented + +- File manipulation (install, retrieve files) + +- Category and Sort app blocks can't be read (although app blocks in general + can be) + +- Preferences cannot be read. diff --git a/bindings/Java/TestTodos.class b/bindings/Java/TestTodos.class new file mode 100644 index 0000000000000000000000000000000000000000..54be788ded35ae9612c3d7985b2a694b3849d829 GIT binary patch literal 2900 zcmaJ@>vJ3R6+J&&(ylj~I4E&~Aqg8uh-?yz1TaD7k;rn0f?_+C6XS$5$kN(YEbXe& zDzVcyO)0NZ+J-_yOM$ky^hszdyEqN)7e17kPQPS^p)=(h)0zGOOlP3!xsv0=m4j!z zzsJ4z+;d;6{p)|#9lNNE_+kT$ReNqJ;+*aq=N4YXiPZpL+F4IIaWj-0G{ zL3T8_25zot6m)#vKoKP!o{q9?Pl(b<9g~7ErQ?*2FUa-u()Vp|(Q`zHT>TD>Nsvj@?_% zkJ!b*)JTpuzI-a{D69z`NgPj|NQHALXDpobidko@OAMDMy;OQ)f2vT`XI?ctqv2c3 zYAq)WQNc*M8AZ$4T*fXcT$gj*2~xC1-J&&0OUuM}@jVk~@Vtian|J}w zns^aEQ0Nq3E92TF%W*x+p3IiKj*brNU^4oEHI&MFmthKS(X%|)N)-xriau0_iL*lI zB@;iyj}%s2q0=*&whLa?W#(>li(}z2ryMS1bFP=mIuqf3*)h`-CSDc_wwC|)*-uCq8st>Yy3t${Fc-P-IyDTns^iESp3Y0?$C~R8_vCheSW7AOg+{0%tR{Pey%Nw$$x94l`y`=pzgR^o8OgYp$YH z-vxukRGMSHY|QqgMdQvW-vBp|Ykh@9PR47NmXI_tdQ*9#HFGEZE$uBWtq{B%ec8+A z!g5EXMcJ%Xx2rx$SF&jkmIbSET)!m8c`?CT>uE07HW5f>B_88oaL?J8AB}3B_p!m5 z#JX}_VG@uLiAAr`VsXA11+_X2)e)*?p7-lmfX~2PxnLHZiaQy5Qei_VPLujzYUm7f zedyX!DfXf%xSVC)UwHBN*Sm^bO1 zTe7hc_wm8Y?3HR(}OI z%1JcVMf_K}UQf3o-mu{QD&bA@LaTy}HEz=|YH+s*)TTvHo9DG}_w6kcdvqpgDW zdb}W0u(eaj1(|~7SMlf&J6{WFhAX(eX4%*oXbH?;zJ>#`YY9}aJ;JQ+7;e>Oa7RQJ ztUGI1t$GD_Z5?XWD(IZW-6GjZ32!L4r*>08OJ*0-ZxYm=AXEmZL@)2Q#WBbEUcnrEjDqt z8Ta5;_S+WhMH~9iP7hn@V;gL2rRlXD?_q?IJ*xhWl)8wt`hZM(7+oKNpE58F zdoH07jT#=*u$L#`6Wp#LKBQrv?-TGt;-M(F#>eQ^kO+J%N{PUy*rC*aFicS*K+A;8 K*nYw`p!a{;4&9Uh literal 0 HcmV?d00001 diff --git a/bindings/Java/TestTodos.java b/bindings/Java/TestTodos.java new file mode 100644 index 0000000..ed89607 --- /dev/null +++ b/bindings/Java/TestTodos.java @@ -0,0 +1,104 @@ +import java.io.File; + +import org.gnu.pilotlink.PilotLink; +import org.gnu.pilotlink.PilotLinkException; +import org.gnu.pilotlink.Record; +import org.gnu.pilotlink.SysInfo; +import org.gnu.pilotlink.ToDoRecord; +import org.gnu.pilotlink.User; + +/* + * Created on 15.10.2004 + * + * TODO To change the template for this generated file go to + * Window - Preferences - Java - Code Style - Code Templates + */ +/** + *@author stephan TODO To change the template for this generated type + * comment go to Window - Preferences - Java - Code Style - Code Templates + *@created 5. Dezember 2004 + */ +public class TestTodos { + + /** + * The main program for the TestTodos class + * + *@param args The command line arguments + */ + public static void main(String[] args) { + String port; + test tst = new test(); + if (args.length == 0) { + port = "/dev/usb/tts/1"; + } else { + port = args[0]; + } + File p = new File(port); + System.out.println("looking for file " + port); + if (!p.exists()) { + System.out.println("File does not exist... USB? Waiting for port to appear"); + + while (!p.exists()) { + System.out.print("."); + try { + Thread.sleep(1000); + } catch (Exception e) {} + } + } + //System.out.println("Systemzeit: "+Long.toHexString(System.currentTimeMillis()/1000)); + PilotLink pl = null; + try { + pl = new PilotLink(port); + if (!pl.isConnected()) { + System.out.println("Something went wrong. Check output!"); + System.exit(1); + } + } catch (Exception e) { + e.printStackTrace(); + System.exit(1); + } + try { + User u = pl.getUserInfo(); + System.out.println("User: " + u.getName()); + System.out.println("Last Synchronization Date: " + u.getLastSyncDate()); + } catch (PilotLinkException e) { + e.printStackTrace(); + } + try { + SysInfo si = pl.getSysInfo(); + System.out.println("Product ID: '" + si.getProdID() + "'"); + System.out.println("Rom Version: " + si.getRomVersion()); + } catch (PilotLinkException e) { + e.printStackTrace(); + } + + try { + int dbh = pl.openDB("ToDoDB"); + System.out.println("db opened!"); + System.out.println("Count: " + pl.getRecordCount(dbh)); + for (int i = 0; i < pl.getRecordCount(dbh); i++) { + Record r = pl.getRecordByIndex(dbh, i); + ToDoRecord tdr = new ToDoRecord(r); + System.out.println("READ IN:"); + System.out.println(tdr); + tst.hexdump(r.getBuffer()); + + System.out.println("\nRE-PACKED:"); + tst.hexdump(tdr.getBuffer()); + System.out.println(); + } + } catch (PilotLinkException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + try { + pl.endSync(); + } catch (PilotLinkException e) { + e.printStackTrace(); + } + pl.close(); + + } + +} + diff --git a/bindings/Java/adrtest.class b/bindings/Java/adrtest.class new file mode 100644 index 0000000000000000000000000000000000000000..a3bf30b2d0b525b57213f1f2d1f4d65d22b8e409 GIT binary patch literal 3975 zcmaJ^349!N75@H{-OOY%wCT2KS)efG>bA65T1vq!&^AZgE$Ly?76OV+veRUm&CIep zOH&S&f})58EN4+b6eC^;%BB)Q6r~E@2p*^$f+AXP1Qm(j+uf9ehUWLn{IBI*JA^Fj0@3fo-xipkup< z23%<1B9XsX9+wz+kB;}6n2uZ>-iJ$d>@X2W*1%;lUM`RKoA>~(5Sb4e_>h4sW&PnO zA@Q%~MH5%yBRY2KxZ1>Q0W%xd7`WD?zK@zX9=l}cIs@06xB)jBxJkyFMe}YQx0pBy zy9|8Hz{f@IR(afJ;C2(Az#RrYY2Z^by;I~rZD3H&KV#r789ytJ&xu!`m&X?je9^?+ z_>zHpWV~07zpUdcCeFlt21+sx8Q3G^R}I`R=fm>&nvn5;jt6yoU7_|g&-cPJ6lxN4 zHY-G0f{d#$x!v>KwZ;A}H^0&8%5o>t?|8n#^u)RCTb&D>WY+O}k{w~*^Lv)a#X~wm zr@L>BlPk;Xc!;56)EFDaLdQ4Ae1$jCpyQhas$g~m#eBEB!V?3QlgWo}A#4)$7S6)i zG%6bkG1(eO7Piq?a`lS5(@%M0eLm>PyM=ARqQx_%0q*ICPxhQG?A+UTi)_@>*O!bh-K- z9<%U${6Jw+GUHy5EEc+wVOU5mpkHN3UXTwv)@b4sEC=3%|s}I-audEBsnv>Kky{2D;r`=mjL>@F3rl?D31qoRP*DSH1q{9Y({QQ_Ew02+gP z(#p25?ECUuj(jN8Eze{mS6Z7b`~fdn_#^(roMl8a#qQ8fx2EjbI`&!kv!GG4dA1?w zw>P`_0)YsIzu>Qe;cv{Lbvf4;e+6C_V(DQ%dWefkpD;8cA z4*rd282c4&Z`RG*U9Q(}yPltQ3$9O`tP2bO!GFoeiSrBIg>J^qyWLFWrFN^Eb;Tn} zS$Ivb{12}y9CaWcRZlmRFG`+{kngoD8G1q26#qHVBzE=b4!gCjy=`M#>nuyvFgz+E zkEqn1Uad!khBtC!UDsB(n-w{Af-W#lu+kY=K?ee?AY-j2ChjDYdfc!jU|sp)ddFv_ zPfyILNJ?GH2|JOSUsA2+8BsHQkFik%%6yoF;FV3RyzeR8euR>^t4fu#5ukrc(21e@mcn7_lCh7jjO-(BoJtwS15N)$xof-CD}p)-Pxc(SbD}Q>4PILs1%XTE^AGs^tfKaoZXl# zvU7PivIi#&Vp7V88zsz>l}OA_8Dq>hiFqC;_ahi{cw+T%K?!tA;0?m8s9PjPP8NWA zY;g&voF%GH9jE$j)!QkKu_Y7fKdmZpdI@Jtq<`st{mT{$=-Be|Mx#+vLUXDv9*OIX z#NJXuYt7>N#`@~=4%{iT#`>z1Oxoggdof9LtSGy2S)9RL`3S7?$WYCYvsG37vY9Sn z^)SxtjMojJJ!SHEG-PW8wn+?Y#j|zg6(c@o#dyl98d9@_^*5tl47{BNF0WUEBb)X! zIZv3|uz$HomL1HhjWrC|Jxt!aaUb^ZJLMt1l0C<9pK4MIaFSZ3cB*SR-lPp^7vXqq zhjxW_CBIfQNqTiW(oFrS{NkF17#d;o`)Dp^U=a?*GJdO^iNmlFhqD-F;yfG)ml9iX zG>SL|SL0aRh~sb@KRpJKAcDEXZ~`7c6H%Oq$FKm8V6dKP`^MP$`J^sATQt5=cJ>Ttd`1$k{IF4hvbRO`YHZ7VL<^6<0) zTth~7YM0<@Z3lK~SKtORbDee-uGg-`jT%4iwB6XP-HKcAPO@}ArjL+-sE+e=yi3Qs zbvQb@z_+%Dj_%j6NJr*u9d6_`%+j%?nN#x>wCL!meFZ$|sU0CD)|>A0D(_KV>FAXn jG{0f$2uVMvoKByC5kz6Ul{!EG)UFh}RJ)ZPXz2St*RmG6 literal 0 HcmV?d00001 diff --git a/bindings/Java/adrtest.java b/bindings/Java/adrtest.java new file mode 100644 index 0000000..6d71a3a --- /dev/null +++ b/bindings/Java/adrtest.java @@ -0,0 +1,161 @@ +import org.gnu.pilotlink.*; +import java.io.*; +import java.util.*; +import javax.swing.*; +import java.awt.*; +/** + * Description of the Class + * + * @author stephan + * @created 4. Dezember 2004 + */ +public class adrtest { + /** + * Description of the Method + * + * @param args Description of the Parameter + */ + public static void main(String args[]) { + test tst=new test(); + JFrame frame = new JFrame("Progress"); + frame.getContentPane().setLayout(new BorderLayout()); + JLabel txt = new JLabel("Reading in"); + frame.getContentPane().add(txt, BorderLayout.NORTH); + JProgressBar progress = new JProgressBar(0, 100); + frame.getContentPane().add(progress, BorderLayout.CENTER); + frame.setSize(300, 50); + frame.setVisible(true); + String port; + if (args.length==0) { + port="/dev/usb/tts/1"; + } else { + port=args[0]; + } + File p=new File(port); + System.out.println("looking for file "+port); + if (!p.exists()) { + System.out.println("File does not exist... USB? Waiting for port to appear"); + + while (!p.exists()) { + System.out.print("."); + try { + Thread.sleep(1000); + } catch (Exception e) {} + } + } + PilotLink pl = null; + try { + pl = new PilotLink(port); + if (!pl.isConnected()) { + System.out.println("Something went wrong. Check output!"); + System.exit(1); + } + } catch (Exception e) { + e.printStackTrace(); + System.exit(1); + } + try { + User u = pl.getUserInfo(); + System.out.println("User: " + u.getName()); + System.out.println("Last Synchronization Date: " + u.getLastSyncDate()); + } catch (PilotLinkException e) { + e.printStackTrace(); + } + + System.out.println("GEtting App..."); + pl.getAppInfoBlock("AddressDB"); + + try { + SysInfo si = pl.getSysInfo(); + System.out.println("Product ID: '" + si.getProdID() + "'"); + System.out.println("Rom Version: " + si.getRomVersion()); + } catch (PilotLinkException e) { + e.printStackTrace(); + } + try { + System.out.println("Opening DatebookDB"); + int dbhAdr=pl.openDB("AddressDB"); + System.out.println("addresses opened!"); + Record r=pl.getRecordByIndex(dbhAdr,0); + //tst.hexdump(r.getBuffer()); + //System.out.println("Now adrrecord"); + AddressRecord adrRecord; + /*tst.hexdump(adrRecord.getBuffer()); + System.out.println("Adding new Record..."); + AddressRecord adrRecord2=new AddressRecord(); + for (int i=0;i<19;i++) { + if (adrRecord.getField(i)!=null) { + adrRecord2.setField("TST:"+adrRecord.getField(i),i); + } + } + + for (int i=0;i<5;i++) { + adrRecord2.setLabelId(adrRecord.getLabelId(i),i); + } + System.out.println("new Record:"); + tst.hexdump(adrRecord2.getBuffer()); + pl.writeRecord(dbhAdr,adrRecord2); + if (true) { + pl.endSync(); + pl.close(); + System.exit(0); + } + */ + progress.setMaximum(pl.getRecordCount(dbhAdr)); + for (int i=0; i + simple example build file + + + + + + + + + Actual build ${build.number} of Version ${build.version} + + + package org.gnu.pilotlink; + public class Version { + public static String VERSION="${build.version}"; + public static long BUILD=${build.number}; + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bindings/Java/datebooktst.class b/bindings/Java/datebooktst.class new file mode 100644 index 0000000000000000000000000000000000000000..967235a0ec05c569958a1f15d29342e1ca2c3c52 GIT binary patch literal 5810 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include "libjpisock.h" + +#define MAX_RESOURCE_SIZE 65536 + +int pilot_connect(JNIEnv * env, const char *port); +static void postPilotLinkException(JNIEnv *, const char *, int, int); +static void postJavaException(JNIEnv *, const char *, const char *); +static int getBasicTypeField(JNIEnv * env, jclass pClass, jobject pObject, + const char * sFieldType, const char * sFieldName, void * pLocation); +static int assignBasicTypeField(JNIEnv * env, jclass pClass, jobject pObject, + const char * sFieldType, const char * sFieldName, ...); +/* + PilotLink.connect +*/ + +JNIEXPORT jint JNICALL Java_org_gnu_pilotlink_PilotLink_connect + (JNIEnv *env, jobject obj, jstring jprt) { + + jint iResult = 0; + const char * port = NULL; + char * prt = NULL; + + /* Get working copy of port name */ + port = env->GetStringUTFChars(jprt, NULL); + prt = (char *)malloc(strlen(port) + 1); + if (prt != NULL) strcpy(prt, port); + env->ReleaseStringUTFChars(jprt, port); + + iResult = pilot_connect(env, prt); + if (prt != NULL) free(prt); + return iResult; +} + +/* +ReadAppInfo +*/ +JNIEXPORT jobject JNICALL Java_org_gnu_pilotlink_PilotLink_readAppInfo + (JNIEnv *env, jobject obj, jint handle, jint db) +{ +/* + unsigned char buffer[MAX_RESOURCE_SIZE]; + + int size=dlp_ReadAppBlock(handle,db, 0,buffer,MAX_RESOURCE_SIZE); + + //printf("STill alive...\n"); + //fflush(stdout); + jclass appinfo_cls=env->FindClass("org/gnu/pilotlink/RawAppInfo"); + if (appinfo_cls==NULL) { + printf("Class not found! Sysinfo!\n"); + return NULL; + } + //printf("STill alive...\n"); + fflush(stdout); + jmethodID appinfo_mid=env->GetMethodID(appinfo_cls, "","([B)V"); + if (appinfo_mid==NULL) { + printf("Problem mid!\n"); + fflush(stdout); + return NULL; + } + //printf("STill alive...\n"); + //fflush(stdout); + jbyteArray array=env->NewByteArray(size); + env->SetByteArrayRegion(array,0,(jint)size,(jbyte*)buffer); + jobject appinfo=env->NewObject(appinfo_cls, appinfo_mid, array); + + return appinfo; +*/ + + jclass jClass_appInfo = NULL; + jobject jObject_appInfo = NULL; + jmethodID jMethod_appInfo = NULL; + jbyte * pBuffer = NULL; + int bProceed = 1; + int iNumBytesRead = 0; + + if (bProceed) { + /* Allocate memory for maximum data size */ + pBuffer = (jbyte *)malloc(MAX_RESOURCE_SIZE); + if (pBuffer == NULL) { + postJavaException(env, + "org/gnu/pilotlink/PilotLinkException", + "Unable to allocate buffer for app-info block"); + bProceed = 0; + } + } + if (bProceed) { + /* Read app-info block && verify successful read */ + iNumBytesRead = dlp_ReadAppBlock(handle, db, 0, MAX_RESOURCE_SIZE, (pi_buffer_t*)pBuffer); + if (iNumBytesRead < 0) { + /* Throw Java exception, iNumBytesRead is actually an error code */ + postPilotLinkException(env, "Unable to read app-block", iNumBytesRead, errno); + bProceed = 0; + } + } + if (bProceed) { + /* Look up RawAppInfo class */ + jClass_appInfo = env->FindClass("org/gnu/pilotlink/RawAppInfo"); + if (jClass_appInfo == NULL) { + /* pending ClassNotFoundException in env */ + bProceed = 0; + } + } + if (bProceed) { + /* Look up constructor method with byte array argument */ + jMethod_appInfo = env->GetMethodID(jClass_appInfo, "","([B)V"); + if (jMethod_appInfo == NULL) { + /* pending NoSuchMethodException in env */ + bProceed = 0; + } + } + if (bProceed) { + jbyteArray jArray_buffer = env->NewByteArray(iNumBytesRead); + env->SetByteArrayRegion(jArray_buffer, 0, (jint)iNumBytesRead, pBuffer); + jObject_appInfo = env->NewObject(jClass_appInfo, jMethod_appInfo, jArray_buffer); + } + + if (pBuffer != NULL) free(pBuffer); + return jObject_appInfo; +} +/* + readSysInfo +*/ +JNIEXPORT jobject JNICALL Java_org_gnu_pilotlink_PilotLink_readSysInfo + (JNIEnv *env, jobject obj, jint handle) { +/* + struct SysInfo s; + s.prodID[s.prodIDLength]=0; + int r=dlp_ReadSysInfo(handle,&s); + + jstring prod=env->NewStringUTF(s.prodID); + + //printf("STill alive...\n"); + fflush(stdout); + jclass sysinfo_cls=env->FindClass("org/gnu/pilotlink/SysInfo"); + if (sysinfo_cls==NULL) { + printf("Class not found! Sysinfo!\n"); + return NULL; + } + //printf("STill alive...\n"); + fflush(stdout); + jmethodID sysinfo_mid=env->GetMethodID(sysinfo_cls, "","(Ljava/lang/String;JJSSSSJ)V"); + if (sysinfo_mid==NULL) { + printf("Problem mid!\n"); + fflush(stdout); + return NULL; + } + //printf("STill alive...\n"); + fflush(stdout); + jobject sysinfo=env->NewObject(sysinfo_cls, sysinfo_mid, prod, s.romVersion, s.locale, s.dlpMajorVersion, s.dlpMinorVersion,s.compatMajorVersion,s.compatMinorVersion,s.maxRecSize); + printf("Returning from getsysinfo...\n"); + fflush(stdout); + return sysinfo; +*/ + jclass jClass_sysInfo = NULL; + jobject jObject_sysInfo = NULL; + jmethodID jMethod_sysInfo = NULL; + struct SysInfo rSysInfo; + int bProceed = 1; + + if (bProceed) { + int iResult; + + /* Check that dlp_ReadSysInfo call actually succeeded */ + memset(&rSysInfo, 0, sizeof(struct SysInfo)); + iResult = dlp_ReadSysInfo(handle, &rSysInfo); + if (iResult < 0) { + /* Throw Java exception in case of failure */ + postPilotLinkException(env, "Unable to read SysInfo", iResult, errno); + bProceed = 0; + } + } + if (bProceed) { + /* Look up SysInfo class */ + jClass_sysInfo = env->FindClass("org/gnu/pilotlink/SysInfo"); + if (jClass_sysInfo == NULL) { + /* pending ClassNotFoundException in env */ + bProceed = 0; + } + } + if (bProceed) { + /* Look up constructor method with complete-specification argument */ + jMethod_sysInfo = env->GetMethodID(jClass_sysInfo, "", + "(Ljava/lang/String;JJSSSSJ)V"); + if (jMethod_sysInfo == NULL) { + /* pending NoSuchMethodException in env */ + bProceed = 0; + } + } + if (bProceed) { + /* Explicit casts to jlong are required because env->NewObject() works + very similar to (and probably identical) to printf() and related + procedures which use stdarg.h routines for variable arguments. + The constructor requires a jlong (64 bits) for some fields, but the + corresponding fields in the C struct are of a system-dependent size + (32 bits for an unsigned long in i386). Failure to cast to an appropriate + size results in a stack misalignment which, at the very least, causes + incorrect values to be received at the Java side. For the sake of + completeness, jshort values are explicitly casted too. + */ + jstring jString_prodID = env->NewStringUTF(rSysInfo.prodID); + jObject_sysInfo = env->NewObject(jClass_sysInfo, jMethod_sysInfo, + jString_prodID, (jlong)rSysInfo.romVersion, (jlong)rSysInfo.locale, + (jshort)rSysInfo.dlpMajorVersion, (jshort)rSysInfo.dlpMinorVersion, + (jshort)rSysInfo.compatMajorVersion, + (jshort)rSysInfo.compatMinorVersion, (jlong)rSysInfo.maxRecSize); + } + + return jObject_sysInfo; +} + +/* + readUserInfo + */ +JNIEXPORT jobject JNICALL Java_org_gnu_pilotlink_PilotLink_readUserInfo + (JNIEnv *env, jobject obj, jint handler) { +/* + struct PilotUser U; + dlp_ReadUserInfo(handler, &U); + U.username[127]=0; + U.password[U.passwordLength]=0; + + printf("Last sync-->%ld\n",U.lastSyncDate); + printf("Last ssync->%ld\n",U.successfulSyncDate); + jstring str_name=env->NewStringUTF(U.username); + if (str_name==NULL) { + return NULL; + } + jstring str_pw=env->NewStringUTF(U.password); + if (str_pw==NULL) { + return NULL; + } + jlong vid=U.viewerID; + jlong uid=U.userID; + jlong lspc=U.lastSyncPC; + + jclass calclass=env->FindClass("java/util/Date"); + if (calclass==NULL) { + return NULL; + } + + jmethodID cal_mid=env->GetMethodID(calclass,"","(J)V"); + if (cal_mid==NULL){ + return NULL; + } + + jobject lsd_date=env->NewObject(calclass,cal_mid,U.lastSyncDate*1000); + jobject sucd_date=env->NewObject(calclass,cal_mid,U.successfulSyncDate*1000); + + jclass usercls=env->FindClass("org/gnu/pilotlink/User"); + if (usercls==NULL) { + printf("USERCLASS not found!\n"); + return NULL; + } else { + printf("ok...\n"); + } + jmethodID umid=env->GetMethodID(usercls,"","(Ljava/lang/String;Ljava/lang/String;JJJLjava/util/Date;Ljava/util/Date;)V"); + if (umid==NULL) { + printf("MethodID not found!\n"); + return NULL; + } else { + printf("ok...\n"); + } + //printf("Returning from getuserinfo...\n"); + jobject u=env->NewObject(usercls,umid,str_name,str_pw,uid,vid,lspc,lsd_date, sucd_date); + return u; +*/ + + jclass jClass_user = NULL; + jobject jObject_user = NULL; + jmethodID jMethod_user = NULL; + struct PilotUser rUserInfo; + int bProceed = 1; + + if (bProceed) { + int iResult; + + /* Check that dlp_ReadUserInfo call actually succeeded */ + memset(&rUserInfo, 0, sizeof(struct PilotUser)); + iResult = dlp_ReadUserInfo(handler, &rUserInfo); + if (iResult < 0) { + /* Throw Java exception in case of failure */ + postPilotLinkException(env, "Unable to read UserInfo", iResult, errno); + bProceed = 0; + } else { + /* This was taken from previous code... */ + rUserInfo.username[sizeof(rUserInfo.username) - 1] = '\0'; + rUserInfo.password[rUserInfo.passwordLength] = '\0'; + } + } + if (bProceed) { + /* Look up User class */ + jClass_user = env->FindClass("org/gnu/pilotlink/User"); + if (jClass_user == NULL) { + /* pending ClassNotFoundException in env */ + bProceed = 0; + } + } + if (bProceed) { + /* Look up constructor method with complete-specification argument. + NOTE: a new constructor was provided in User.java in order to + avoid having to create Date objects in C code, AND to fix a subtle + bug in which the multiplication of time_t * int (miliseconds since + Epoch) silently overflows because both time_t and int are 32-bit, + and the result is NOT promoted to at least 64 bits, required for + the constructor Date(long). + */ + jMethod_user = env->GetMethodID(jClass_user, "", + "(Ljava/lang/String;Ljava/lang/String;JJJJJ)V"); + if (jMethod_user == NULL) { + /* pending NoSuchMethodException in env */ + bProceed = 0; + } + } + if (bProceed) { + /* Explicit casts added - see object creation at + Java_org_gnu_pilotlink_PilotLink_readSysInfo() for explanation. */ + jstring jString_username = env->NewStringUTF(rUserInfo.username); + jstring jString_password = env->NewStringUTF(rUserInfo.password); + jObject_user = env->NewObject(jClass_user, jMethod_user, jString_username, + jString_password, (jlong)rUserInfo.userID, (jlong)rUserInfo.viewerID, + (jlong)rUserInfo.lastSyncPC, (jlong)rUserInfo.lastSyncDate, + (jlong)rUserInfo.successfulSyncDate); + } + return jObject_user; +} + + +/* + writeUserInfo + */ +JNIEXPORT void JNICALL Java_org_gnu_pilotlink_PilotLink_writeUserInfo + (JNIEnv *env, jobject obj, jint so, jobject user) { +/* + printf("Not implemented yet...sorry\n"); +*/ + /* Now it IS implemented... ;-) */ + jclass jClass_user = NULL; + jmethodID jMethod_user = NULL; + struct PilotUser rUserInfo; + jlong jTempValue; + jstring jTempString; + int bProceed = 1; + + /* Set everything not explicitly assigned to blanks */ + memset(&rUserInfo, 0, sizeof(struct PilotUser)); + + /* Get object class for user... this should not fail */ + jClass_user = env->GetObjectClass(user); + + /* Assign all of the basic fields */ + if (bProceed) { + bProceed = getBasicTypeField(env, jClass_user, user, + "J", "userid", &jTempValue); + rUserInfo.userID = jTempValue; + } + if (bProceed) { + bProceed = getBasicTypeField(env, jClass_user, user, + "J", "viewerid", &jTempValue); + rUserInfo.viewerID = jTempValue; + } + if (bProceed) { + bProceed = getBasicTypeField(env, jClass_user, user, + "J", "lastSyncPC", &jTempValue); + rUserInfo.lastSyncPC = jTempValue; + } + if (bProceed) { + jTempString = NULL; + bProceed = getBasicTypeField(env, jClass_user, user, + "Ljava/lang/String;", "name", &jTempString); + if (bProceed && jTempString != NULL) { + const char * sTempString = env->GetStringUTFChars(jTempString, 0); + strncpy(rUserInfo.username, sTempString, sizeof(rUserInfo.username) - 1); + rUserInfo.username[sizeof(rUserInfo.username) - 1] = '\0'; + env->ReleaseStringUTFChars(jTempString, sTempString); + } + } + if (bProceed) { + jTempString = NULL; + bProceed = getBasicTypeField(env, jClass_user, user, + "Ljava/lang/String;", "password", &jTempString); + if (bProceed && jTempString != NULL) { + const char * sTempString = env->GetStringUTFChars(jTempString, 0); + strncpy(rUserInfo.password, sTempString, sizeof(rUserInfo.password) - 1); + rUserInfo.password[sizeof(rUserInfo.password) - 1] = '\0'; + rUserInfo.passwordLength = strlen(rUserInfo.password); + env->ReleaseStringUTFChars(jTempString, sTempString); + } + } + + /* In order to get the correct time_t, a function call is needed. The methods + User.getLastSyncDate_time_t() and User.getLastSuccessfulSyncDate_time_t() + were created for this purpose. + */ + if (bProceed) { + jMethod_user = env->GetMethodID(jClass_user, "getLastSyncDate_time_t", + "()J"); + if (jMethod_user == NULL) { + /* pending NoSuchMethodException in env */ + bProceed = 0; + } else { + /* Use Date.getTime() in Java side and divide by 1000 */ + rUserInfo.lastSyncDate = env->CallLongMethod(user, jMethod_user); + } + } + if (bProceed) { + jMethod_user = env->GetMethodID(jClass_user, "getLastSuccessfulSyncDate_time_t", + "()J"); + if (jMethod_user == NULL) { + /* pending NoSuchMethodException in env */ + bProceed = 0; + } else { + /* Use Date.getTime() in Java side and divide by 1000 */ + rUserInfo.successfulSyncDate = env->CallLongMethod(user, jMethod_user); + } + } + + /* Write user info if all assignments were successful */ + if (bProceed) { + int iResult = dlp_WriteUserInfo(so, &rUserInfo); + if (iResult < 0) { + postPilotLinkException(env, "Unable to write UserInfo", iResult, errno); + } + } +} + +/* + * writeAppBlock + */ +JNIEXPORT int JNICALL Java_org_gnu_pilotlink_PilotLink_writeAppBlock + (JNIEnv *env, jobject obj, jint handle, jint dbhandle, jbyteArray data, jint length) { +/* + char buffer[MAX_RESOURCE_SIZE]; + env->GetByteArrayRegion(data,0,length,(jbyte*)buffer); + return dlp_WriteAppBlock(handle,dbhandle,buffer,length); +*/ + jbyte * buffer; + int iResult = 0; + + /* Allocate memory for copy of app block */ + if ((buffer = (jbyte *)malloc(length * sizeof(jbyte))) != NULL) { + env->GetByteArrayRegion(data, 0, length, buffer); + iResult = dlp_WriteAppBlock(handle, dbhandle, buffer, length); + if (iResult < 0) { + /* Throw Java exception to signal error */ + postPilotLinkException(env, "Unable to write app-block", iResult, errno); + } + free(buffer); + } else { + postJavaException(env, + "org/gnu/pilotlink/PilotLinkException", + "Unable to allocate memory for app block"); + } + return iResult; +} + +/* + openConduit +*/ +JNIEXPORT void JNICALL Java_org_gnu_pilotlink_PilotLink_openConduit + (JNIEnv *env, jobject obj, jint handle) { + int iResult = dlp_OpenConduit(handle); + if (iResult < 0) postPilotLinkException(env, "Unable to open conduit", iResult, errno); +} + +/* + * createDB + */ + +JNIEXPORT jint JNICALL Java_org_gnu_pilotlink_PilotLink_createDB + (JNIEnv *env, jobject obj, jint handle, jlong creator, jstring jdbname, jlong type, jint flags, jint version) +{ + jint db = -1; + + /* Get working copy of database name */ + const char * dbname = env->GetStringUTFChars(jdbname, NULL); + char * dbn = (char *)malloc(strlen(dbname) + 1); + if (dbn != NULL) strcpy(dbn, dbname); + env->ReleaseStringUTFChars(jdbname, dbname); + + if (dbn != NULL) { + int ret = dlp_CreateDB(handle,creator,type,0,flags,version,dbn, &db); + + if (ret < 0) { + /* debug message replaced by Java exception */ +/* + printf("Error creating db %s: %d\n",dbn, ret); +*/ + postPilotLinkException(env, "Could not create database", + ret, errno); + } + free(dbn); + } else { + /* Unable to create copy - memory heap may be corrupted */ + postJavaException(env, + "org/gnu/pilotlink/PilotLinkException", + "Unable to create working copy of database name"); + } + return db; +} + +/* + * deleteDB + */ + +JNIEXPORT jint JNICALL Java_org_gnu_pilotlink_PilotLink_deleteDB + (JNIEnv *env, jobject obj, jint handle, jstring jdbname) { + + int ret = 0; + + /* Get working copy of database name */ + const char * dbname = env->GetStringUTFChars(jdbname,NULL); + char * dbn = (char*)malloc(strlen(dbname)+1); + if (dbn != NULL) strcpy(dbn,dbname); + env->ReleaseStringUTFChars(jdbname, dbname); + + if (dbn != NULL) { + ret = dlp_DeleteDB(handle,0,dbn); + if (ret < 0) { + /* debug message replaced by Java exception */ +/* + printf("Error deleting db %s %d:\n",dbn,ret); +*/ + postPilotLinkException(env, "Could not delete database", + ret, errno); + } + free(dbn); + } else { + /* Unable to create copy - memory heap may be corrupted */ + postJavaException(env, + "org/gnu/pilotlink/PilotLinkException", + "Unable to create working copy of database name"); + } + return ret; +} + + +JNIEXPORT jobject JNICALL Java_org_gnu_pilotlink_PilotLink_getAppInfoBlock(JNIEnv *env,jobject obj, jint handle,jstring jdbname) { + int db; + const char * dbname = env->GetStringUTFChars(jdbname, NULL); + char * dbn = (char *)malloc(strlen(dbname) + 1); + if (dbn != NULL) strcpy(dbn, dbname); + env->ReleaseStringUTFChars(jdbname, dbname); + if (dlp_OpenDB(handle,0,0x80|0x40,dbn,&db)<0) { + + printf("Fehler!"); + return NULL; + } + jbyte buff[0xffff]; + int l=dlp_ReadAppBlock(handle,db,0,0xffff,(pi_buffer_t*)&buff); + printf("read app-Block of size %d\n",l); + fflush(stdout); + + jclass jClass_appInfo = NULL; + jobject jObject_appInfo = NULL; + jmethodID jMethod_appInfo = NULL; + int bProceed = 1; + int iNumBytesRead = 0; + + if (bProceed) { + /* Look up RawAppInfo class */ + jClass_appInfo = env->FindClass("org/gnu/pilotlink/RawAppInfo"); + if (jClass_appInfo == NULL) { + /* pending ClassNotFoundException in env */ + bProceed = 0; + } + } + if (bProceed) { + /* Look up constructor method with byte array argument */ + jMethod_appInfo = env->GetMethodID(jClass_appInfo, "","([B)V"); + if (jMethod_appInfo == NULL) { + /* pending NoSuchMethodException in env */ + bProceed = 0; + } + } + if (bProceed) { + jbyteArray jArray_buffer = env->NewByteArray(l); + env->SetByteArrayRegion(jArray_buffer, 0, (jint)l, buff); + jObject_appInfo = env->NewObject(jClass_appInfo, jMethod_appInfo, jArray_buffer); + } + + dlp_CloseDB(handle,db); + return jObject_appInfo; + + + +} + +/* + openDB +*/ +JNIEXPORT jint JNICALL Java_org_gnu_pilotlink_PilotLink_openDB + (JNIEnv *env, jobject obj, jint handle, jstring jdbname) { + + jint db = 0; + + /* Get working copy of database name */ + const char* dbname = env->GetStringUTFChars(jdbname,NULL); + char* dbn = (char*)malloc(strlen(dbname)+1); + if (dbn != NULL) strcpy(dbn,dbname); + env->ReleaseStringUTFChars(jdbname, dbname); + + if (dbn != NULL) { + int ret=dlp_OpenDB(handle,0,dlpOpenReadWrite,dbn,&db); + if (ret < 0) { +/* + printf("Error opening db %s: %d\n",dbn, ret); +*/ + postPilotLinkException(env, "Could not open database", + ret, errno); + return (jint)ret; + } + } else { + /* Unable to create copy - memory heap may be corrupted */ + postJavaException(env, + "org/gnu/pilotlink/PilotLinkException", + "Unable to create working copy of database name"); + } + return db; +} + +/* + getRecordCount +*/ +JNIEXPORT jint JNICALL Java_org_gnu_pilotlink_PilotLink_getRecordCount + (JNIEnv *env, jobject obj, jint handle, jint dbh) { + jint num; + int iResult; + iResult = dlp_ReadOpenDBInfo(handle,dbh,&num); + if (iResult < 0) { + postPilotLinkException(env, "Could not get record count for database", + iResult, errno); + } + return num; +} + +/* + getRecordByIndex +*/ +JNIEXPORT jobject JNICALL Java_org_gnu_pilotlink_PilotLink_getRecordByIndex + (JNIEnv *env, jobject obj, jint handle , jint db , jint idx) { + + jbyte buffer[MAX_RESOURCE_SIZE]; + recordid_t id; + jint size, attr, category; + //printf("Getting record..\n"); + int ret = dlp_ReadRecordByIndex(handle, db, idx, (pi_buffer_t*)buffer, + &id, &attr, &category); + if (ret<0) { + postPilotLinkException(env,"Error reading database by index",ret,errno); + return NULL; + } + //printf("getting class!\n"); + jclass rcls=env->FindClass("org/gnu/pilotlink/RawRecord"); + if (rcls==NULL) { + return NULL; + } + jmethodID rid=env->GetMethodID(rcls,"","([BJIII)V"); + if (rid==NULL) { + printf("jmethodID is null!\n"); + return NULL; + } + jbyteArray array=env->NewByteArray(size); + env->SetByteArrayRegion(array,0,size,buffer); + jobject record=env->NewObject(rcls, rid, array, (jlong)id,size,attr,category ); + return record; + + + /*jbyte * buffer; + jobject jObject_RawRecord = NULL; + + if ((buffer = (jbyte *)malloc(MAX_RESOURCE_SIZE)) != NULL) { + + recordid_t id; + jint iRecSize, iRecAttr, iRecCategory; + jclass jClass_RawRecord; + jmethodID jMethod_RawRecord; + + int iResult = dlp_ReadRecordByIndex(handle, db, idx, buffer, + &id, &iRecSize, &iRecAttr, &iRecCategory); + if (iResult < 0) { + postPilotLinkException(env, "Could not read database record by index", + iResult, errno); + } else if ((jClass_RawRecord = env->FindClass( + "org/gnu/pilotlink/RawRecord")) == NULL) { + + } else if ((jMethod_RawRecord = env->GetMethodID(jClass_RawRecord, + "", "([BJIII)V")) == NULL) { + + } else { + jbyteArray jArray_buffer = env->NewByteArray(iRecSize); + env->SetByteArrayRegion(jArray_buffer, 0, iRecSize, buffer); + jObject_RawRecord = env->NewObject(jClass_RawRecord, jMethod_RawRecord, + jArray_buffer, (jlong)id, (jint)iRecSize, (jint)iRecAttr, (jint)iRecCategory); + } + free(buffer); + } else { + postJavaException(env, + "org/gnu/pilotlink/PilotLinkException", + "Unable to allocate buffer for record data"); + } + return jObject_RawRecord;*/ +} + +/* + deleteRecordById +*/ +JNIEXPORT jint JNICALL Java_org_gnu_pilotlink_PilotLink_deleteRecordById + (JNIEnv *env, jobject obj, jint handle, jint db, jlong id) { + int ret=dlp_DeleteRecord(handle,db,0,id); + if (ret<0) { + postPilotLinkException(env,"Deletition not possible!",ret,errno); + } + return ret; +} + +/* Write Record +*/ +JNIEXPORT jint JNICALL Java_org_gnu_pilotlink_PilotLink_writeRecord + (JNIEnv *env, jobject obj, jint handle, jint db, jobject record) { + + jlong id=0; + jclass cls=env->GetObjectClass(record); + jmethodID mid=env->GetMethodID(cls,"getCategory","()I"); + + if (mid==NULL) { printf("Error getting mid!"); return -1; } + jint cat=env->CallIntMethod(record,mid); + + jmethodID mid2=env->GetMethodID(cls,"getId","()J"); + + id=env->CallLongMethod(record,mid2, NULL); + if (id==0) { + printf("Creating new entry!\n"); + } + + mid=env->GetMethodID(cls,"getAttribs","()I"); + jint attr=env->CallIntMethod(record,mid); + + mid=env->GetMethodID(cls,"getSize","()I"); + jint size=env->CallIntMethod(record,mid); + printf("Got size: %d\n",size); + char buffer[MAX_RESOURCE_SIZE]; + mid=env->GetMethodID(cls,"getBuffer","()[B"); + jbyteArray arr=(jbyteArray)env->CallObjectMethod(record,mid); + env->GetByteArrayRegion(arr,0,size,(jbyte*)buffer); + recordid_t i=0; + int ret=dlp_WriteRecord(handle,db,attr, id, cat, buffer,size,&i); + if (id==0 && ret>0) { + mid=env->GetMethodID(cls,"setId","(J)V"); + env->CallVoidMethod(record,mid,(jlong)i); + } + return ret; + + + +} + +/*CloseDB*/ +JNIEXPORT void JNICALL Java_org_gnu_pilotlink_PilotLink_closeDB + (JNIEnv *env, jobject obj, jint han, jint db) { + int bException = 0; + int ret=dlp_CleanUpDatabase(han, db); + if (ret<0) { +// printf("Error cleaning up! %d\n",ret); + postPilotLinkException(env, "Unable to clean up before database close", + ret, errno); + bException = 1; + } + ret=dlp_CloseDB(han, db); + if (ret < 0 && !bException) { +// printf("Error closing DB: %d\n",ret); + postPilotLinkException(env, "Unable to close database", + ret, errno); + } +} +/*ENDSync*/ +JNIEXPORT void JNICALL Java_org_gnu_pilotlink_PilotLink_endSync + (JNIEnv *env, jobject obj, jint sd) { + int iResult = dlp_EndOfSync(sd, dlpEndCodeNormal); + if (iResult < 0) postPilotLinkException(env, "Unable to signal endSync", + iResult, errno); +} +/*Close*/ +JNIEXPORT void JNICALL Java_org_gnu_pilotlink_PilotLink_close + (JNIEnv *env, jobject obj, jint sd) { + pi_close(sd); +} + +/*pilot-connect*/ +int pilot_connect(JNIEnv * env, const char *port) +{ + int parent_sd = -1, /* Client socket, formerly sd */ + client_sd = -1, /* Parent socket, formerly sd2 */ + result; + struct pi_sockaddr addr; + struct stat attr; + struct SysInfo sys_info; + const char *defport = "/dev/pilot"; + int bProceed = 1; + + if (port == NULL && (port = getenv("PILOTPORT")) == NULL) { + + /* err seems to be used for stat() only */ + int err = 0; + + /* Commented out debug code */ +/* + fprintf(stderr, " No $PILOTPORT specified and no -p " + " given.\n" + " Defaulting to '%s'\n", defport); +*/ + port = defport; + err = stat(port, &attr); + + /* Moved err check inside if() block - err only meaningful here */ + if (err) { + /* *BAD* practice - cannot recover from within Java if exit() here. + Should create && throw exception instead. + */ +/* + fprintf(stderr, " ERROR: %s (%d)\n\n", strerror(errno), errno); + fprintf(stderr, " Error accessing: '%s'. Does '%s' exist?\n", + port, port); + //fprintf(stderr, " Please use --help for more information\n\n"); + exit(1); +*/ + + /* Throw an exception - FileNotFoundException seems appropriate here */ + postJavaException(env, "java/io/FileNotFoundException", strerror(errno)); + bProceed = 0; + } + } + +/* At this point, either bProceed is 0, or port != NULL, further checks are unnecesary */ + + /* Check bProceed to account for previous exceptions */ + if (bProceed && !(parent_sd = pi_socket(PI_AF_PILOT, PI_SOCK_STREAM, PI_PF_DLP))) { +/* + fprintf(stderr, "\n Unable to create socket '%s'\n", + port ? port : getenv("PILOTPORT")); + return -1; +*/ + /* Throw exception here to inform nature of connection failure. */ + const char * sTemplate = "Unable to create socket '%s'"; + char * sMessage = (char *)malloc(strlen(sTemplate) + strlen(port) + 1); + if (sMessage != NULL) sprintf(sMessage, sTemplate, port); + postJavaException(env, "org/gnu/pilotlink/PilotLinkException", + (sMessage != NULL) ? sMessage : port); + if (sMessage != NULL) free(sMessage); + + bProceed = 0; + } + + /* Check bProceed to account for previous exceptions */ + if (bProceed) { +/* Removed check for port != NULL, since port was validated before */ +/* + if (port != NULL) { +*/ + result = + pi_bind(parent_sd, port); +/* + } else { + result = pi_bind(parent_sd, NULL, 0); + } +*/ + } + + if (bProceed && result < 0) { + int save_errno = errno; +/* + const char *portname; + + portname = (port != NULL) ? port : getenv("PILOTPORT"); + if (portname) { + fprintf(stderr, "\n"); + errno = save_errno; + fprintf(stderr, " ERROR: %s (%d)\n\n", strerror(errno), + errno); + + if (errno == 2) { + fprintf(stderr, " The device %s does not exist..\n", + portname); + fprintf(stderr, " Possible solution:\n\n\tmknod %s c " + " \n\n", portname ); + + } else if (errno == 13) { + fprintf(stderr, " Please check the " + "permissions on %s..\n", portname ); + fprintf(stderr, " Possible solution:\n\n\tchmod 0666 " + "%s\n\n", portname ); + + } else if (errno == 19) { + fprintf(stderr, " Press the HotSync button first and " + "relaunch this conduit..\n\n"); + } else if (errno == 21) { + fprintf(stderr, " The port specified must contain a " + "device name, and %s was a directory.\n" + " Please change that to reference a real " + "device, and try again\n\n", portname ); + } + + fprintf(stderr, " Unable to bind to port: %s\n", + portname) ; + fprintf(stderr, " Please use --help for more " + "information\n\n"); + } else + fprintf(stderr, "\n No port specified\n"); +*/ + const char * sTemplate = "Unable to bind to port %s - (%d) %s%s"; + const char * sFailureReason; + char * sMessage; + + switch (save_errno) { + case 2: + sFailureReason = "; Device does not exist (use mknod to fix)"; + break; + case 13: + sFailureReason = "; Access denied on device (use chmod to fix)"; + break; + case 19: + sFailureReason = "; HotSync button must be pressed first"; + break; + case 21: + sFailureReason = "; Device name appears to be a directory"; + break; + default: + sFailureReason = ""; + break; + } + sMessage = (char *)malloc(strlen(sTemplate) + strlen(port) + 16 + + strlen(strerror(save_errno)) + strlen(sFailureReason)); + if (sMessage != NULL) { + sprintf(sMessage, sTemplate, port, save_errno, strerror(save_errno), sFailureReason); + postJavaException(env, "org/gnu/pilotlink/PilotLinkException", sMessage); + free(sMessage); + } else { + /* Unable to malloc(), inform of errno string */ + postJavaException(env, "org/gnu/pilotlink/PilotLinkException", strerror(save_errno)); + } + + pi_close(parent_sd); + pi_close(client_sd); +// return -1; + bProceed = 0; + } + +/* Removed debug message, maybe add notification framework to invoke here + fprintf(stderr, + "\n Listening to port: %s\n\n Please press the HotSync " + "button now... ", + port ? port : getenv("PILOTPORT")); +*/ + /* Check bProceed to account for previous exceptions */ + if (bProceed && pi_listen(parent_sd, 1) == -1) { + /* debug message replaced with Java exception */ + /* fprintf(stderr, "\n Error listening on %s\n", port); */ + postJavaException(env, + "org/gnu/pilotlink/PilotLinkException", + "Unable to listen on port"); + pi_close(parent_sd); + pi_close(client_sd); +/* return -1; */ + bProceed = 0; + } + + /* Check bProceed to account for previous exceptions */ + if (bProceed) { + client_sd = pi_accept_to(parent_sd, 0, 0, 5); + if (client_sd == -1) { + /* debug message replaced with Java exception */ + /* fprintf(stderr, "\n Error accepting data on %s\n", port); */ + postJavaException(env, + "org/gnu/pilotlink/PilotLinkException", + "Unable to accept data on port"); + pi_close(parent_sd); + pi_close(client_sd); +/* return -1;*/ + bProceed = 0; + } else { + int so_timeout = 16; + size_t sizeof_so_timeout = sizeof(so_timeout); + + pi_setsockopt(client_sd, PI_LEVEL_DEV, PI_DEV_TIMEOUT, + &so_timeout, &sizeof_so_timeout); + } + } + +/* Removed debug message, maybe add notification framework to invoke here */ +/* fprintf(stderr, "Connected\n\n"); */ + + /* Check bProceed to account for previous exceptions */ + if (bProceed) { + + int iResult; + int iNumRetries = 5; + + while (iNumRetries > 0 && (iResult = dlp_ReadSysInfo(client_sd, &sys_info)) < 0) + iNumRetries--; + if (iResult < 0) { + /* debug message replaced with Java exception */ + /* fprintf(stderr, "\n Error read system info on %s\n", port); */ + postJavaException(env, + "org/gnu/pilotlink/PilotLinkException", + "Unable to read system info on port"); + pi_close(parent_sd); + pi_close(client_sd); +/* return -1; */ + bProceed = 0; + } + } +/* Removed debug message, maybe add notification framework to invoke here */ +/* printf("Opening counduit...\n"); */ + dlp_OpenConduit(client_sd); +/* Why should parent_sd remain open after connect? Nobody receives it. */ + pi_close(parent_sd); + return client_sd; +} + +/* + * getResourceByIndex() + */ +JNIEXPORT jobject JNICALL Java_org_gnu_pilotlink_PilotLink_getResourceByIndex + (JNIEnv * env, jobject obj, jint iSockHandle, jint iDBHandle, jint iRsrcIndex) { + + unsigned long iRsrcType; /* Resource type */ + int iRsrcID; /* Resource ID */ + int iRsrcSize; /* Actual resource size */ + jbyte * pRsrcData; /* Buffer for resource data */ + int iResult; /* Result of library call */ + jobject pRecordObject = NULL; + + /* Get "enough" memory for incoming resource data */ + if ((pRsrcData = (jbyte *)malloc(MAX_RESOURCE_SIZE * sizeof(jbyte))) != NULL) { + + /* Invoke C library function */ + iResult = dlp_ReadResourceByIndex(iSockHandle, iDBHandle, iRsrcIndex, + (pi_buffer_t*)pRsrcData, &iRsrcType, &iRsrcID); + if (iResult >= 0) { + jclass pRecordClass; + jmethodID pRecordConstructor; + + /* Look up class and constructor method */ + if ((pRecordClass = env->FindClass("org/gnu/pilotlink/RawRecord")) != NULL && + (pRecordConstructor = env->GetMethodID(pRecordClass, "", + "([BJIII)V")) != NULL ) { + + /* Fill a Java array with resource data && invoke constructor */ + jbyteArray pJavaArray = env->NewByteArray(iRsrcSize); + env->SetByteArrayRegion(pJavaArray, 0, iRsrcSize, pRsrcData); + pRecordObject = env->NewObject(pRecordClass, pRecordConstructor, + pJavaArray, (jlong)iRsrcID, (jint)iRsrcSize, (jint)0, (jint)iRsrcType); + } + } else { + postPilotLinkException(env, "Unable to read resource by index", iResult, errno); + } + free(pRsrcData); + } else { + postJavaException(env, + "org/gnu/pilotlink/PilotLinkException", + "Unable to allocate buffer for copy of resource"); + } + + return pRecordObject; +} + +/* + * writeResource() + */ +JNIEXPORT void JNICALL Java_org_gnu_pilotlink_PilotLink_writeResource + (JNIEnv * env, jobject obj, jint iSockHandle, jint iDBHandle, jobject pRecord) +{ + jlong iRsrcID; /* Resource ID for record */ + jint iRsrcType; /* Resource type for record */ + jint iRsrcSize; /* Actual resource size */ + jbyte * pRsrcData = NULL; /* Buffer for resource data */ + + jclass pRecordClass; /* Java class for record */ + jmethodID pRecordMethod; /* Java instance method for record */ + jbyteArray pDataArray; /* Java array for resource data */ + jint iResult = -1; /* Result of library call */ + int bProceed = 1; + + /* Get reference to record class */ + pRecordClass = env->GetObjectClass(pRecord); + + /* Find out required attributes for resource write */ + if (bProceed) { + /* Find out category (resource type) */ + if ((pRecordMethod = env->GetMethodID(pRecordClass, "getCategory", "()I")) != NULL) { + iRsrcType = env->CallIntMethod(pRecord, pRecordMethod); + } else { + /* Method lookup failed */ + bProceed = 0; + } + } + if (bProceed) { + /* Find out resource ID */ + if ((pRecordMethod = env->GetMethodID(pRecordClass, "getId", "()J")) != NULL) { + iRsrcID = env->CallLongMethod(pRecord, pRecordMethod); + } else { + /* Method lookup failed */ + bProceed = 0; + } + } + if (bProceed) { + /* Find out resource size && allocate memory */ + if ((pRecordMethod = env->GetMethodID(pRecordClass, "getSize", "()I")) != NULL) { + iRsrcSize = env->CallIntMethod(pRecord, pRecordMethod); + if (iRsrcSize > 0) pRsrcData = (jbyte *)malloc(iRsrcSize * sizeof(char)); + if (pRsrcData == NULL) { + postJavaException(env, + "org/gnu/pilotlink/PilotLinkException", + "Unable to allocate buffer for copy of resource"); + bProceed = 0; + } + } else { + /* Method lookup failed */ + bProceed = 0; + } + } + if (bProceed) { + /* Get copy of resource data in allocated memory */ + if ((pRecordMethod = env->GetMethodID(pRecordClass, "getBuffer", "()[B")) != NULL) { + pDataArray = (jbyteArray)env->CallObjectMethod(pRecord, pRecordMethod); + env->GetByteArrayRegion(pDataArray, 0, iRsrcSize, pRsrcData); + iResult = dlp_WriteResource(iSockHandle, iDBHandle, iRsrcType, iRsrcID, + pRsrcData, iRsrcSize); + if (iResult < 0) { + postPilotLinkException(env, "Unable to write resource", iResult, errno); + } + } else { + /* Method lookup failed */ + bProceed = 0; + } + } + + if (pRsrcData != NULL) free(pRsrcData); +} + +JNIEXPORT void JNICALL Java_org_gnu_pilotlink_PilotLink_resetSystem + (JNIEnv * env, jobject, jint iSockHandle) +{ + int iResult = dlp_ResetSystem(iSockHandle); + if (iResult < 0) { + postPilotLinkException(env, "Unable to reset system", iResult, errno); + } +} + +/* + * readDBList + */ +JNIEXPORT jobject JNICALL Java_org_gnu_pilotlink_PilotLink_readDBList + (JNIEnv * env, jobject, jint iSockHandle, jint cardno, jint flags, jint start) +{ + int iResult = 0; + struct DBInfo rInfoDB; + jobject pDBInfoObject = NULL; + + /* Execute low-level library call... */ + iResult = dlp_ReadDBList(iSockHandle, cardno, flags, start, (pi_buffer_t*)&rInfoDB); + if (iResult >= 0) { + jclass pDBInfoClass = NULL; + jmethodID pDBInfoMethod = NULL; + int bProceed = 1; + + /* Find class for DBInfo - throws ClassNotFoundException if not found */ + if (bProceed) { + pDBInfoClass = env->FindClass("org/gnu/pilotlink/DBInfo"); + if (pDBInfoClass == NULL) bProceed = 0; + } + + /* Find constructor method for class DBInfo */ + if (bProceed) { + pDBInfoMethod = env->GetMethodID(pDBInfoClass, "", + "(Ljava/lang/String;IIIIIISSSBB)V"); + if (pDBInfoMethod != NULL && env->ExceptionOccurred() == NULL) { + /* Build new object, propagate any exception into Java caller */ + jstring jString_nombre = env->NewStringUTF(rInfoDB.name); + pDBInfoObject = env->NewObject(pDBInfoClass, pDBInfoMethod, + jString_nombre, (jint)rInfoDB.createDate, (jint)rInfoDB.modifyDate, + (jint)rInfoDB.backupDate, (jint)rInfoDB.type, (jint)rInfoDB.creator, + (jint)rInfoDB.modnum, (jshort)rInfoDB.flags, (jshort)rInfoDB.version, + (jshort)rInfoDB.index, (jbyte)rInfoDB.miscFlags, (jbyte)rInfoDB.more); + if (env->ExceptionOccurred() != NULL) bProceed = 0; + } else { + /* pending NoSuchMethodException in env */ + bProceed = 0; + } + } + + /* "Not Found" error returns null, else throw Java exception to inform problem with listing */ + } else if (iResult != -5) { + postPilotLinkException(env, "Unable to read DB list entry", iResult, errno); + } + return pDBInfoObject; +} + +static void postPilotLinkException(JNIEnv * env, const char * sTexto, int iResult, int save_errno) +{ + const char * sTemplate = "%s: %s - %s"; + const char * sGenericException = "org/gnu/pilotlink/PilotLinkException"; + const char * sDBExistsException = "org/gnu/pilotlink/DatabaseExistsException"; + const char * sDBNotFoundException = "org/gnu/pilotlink/DatabaseNotFoundException"; + const char * sExceptionClass; + char * sMessage = NULL; + + // Make save_errno positive in all cases + if (save_errno < 0) save_errno = -save_errno; + + // Choose which exception to report + switch (abs(iResult)) { + case 5: + sExceptionClass = sDBNotFoundException; + break; + case 9: + sExceptionClass = sDBExistsException; + break; + default: + sExceptionClass = sGenericException; + break; + } + + // Attempt to describe underlying errno for exception + sMessage = (char *)malloc(strlen(sTemplate) + strlen(sTexto) + + strlen(dlp_strerror(iResult)) + strlen(strerror(save_errno)) + 1); + if (sMessage != NULL) { + sprintf(sMessage, sTemplate, sTexto, dlp_strerror(iResult), strerror(save_errno)); + postJavaException(env, sExceptionClass, sMessage); + free(sMessage); + } else { + postJavaException(env, sExceptionClass, dlp_strerror(iResult)); + } +} + +/* Post a named exception in the Java environment */ +static void postJavaException(JNIEnv * env, const char * sExceptionClass, const char * sMessage) +{ + jclass pExceptionClass = env->FindClass(sExceptionClass); + if (pExceptionClass != NULL) env->ThrowNew(pExceptionClass, sMessage); +} + +/* Get a value from a named Java field of basic type or String */ +static int getBasicTypeField(JNIEnv * env, jclass pClass, jobject pObject, + const char * sFieldType, const char * sFieldName, void * pLocation) +{ + int bProceed = 1; + jfieldID pFieldID = NULL; + jthrowable pException = NULL; + + pFieldID = env->GetFieldID(pClass, sFieldName, sFieldType); + if (pFieldID != NULL && (pException = env->ExceptionOccurred()) == NULL) { + if (strcmp(sFieldType, "I") == 0) { + *((jint *)pLocation) = env->GetIntField(pObject, pFieldID); + } else if (strcmp(sFieldType, "S") == 0) { + *((jshort *)pLocation) = env->GetShortField(pObject, pFieldID); + } else if (strcmp(sFieldType, "B") == 0) { + *((jbyte *)pLocation) = env->GetByteField(pObject, pFieldID); + } else if (strcmp(sFieldType, "Z") == 0) { + *((jboolean *)pLocation) = env->GetBooleanField(pObject, pFieldID); + } else if (strcmp(sFieldType, "C") == 0) { + *((jchar *)pLocation) = env->GetCharField(pObject, pFieldID); + } else if (strcmp(sFieldType, "J") == 0) { + *((jlong *)pLocation) = env->GetLongField(pObject, pFieldID); + } else if (strcmp(sFieldType, "F") == 0) { + *((jfloat *)pLocation) = env->GetFloatField(pObject, pFieldID); + } else if (strcmp(sFieldType, "D") == 0) { + *((jdouble *)pLocation) = env->GetDoubleField(pObject, pFieldID); + } else if (sFieldType[0] == 'L') { + *((jobject *)pLocation) = env->GetObjectField(pObject, pFieldID); + } + } else { + bProceed = 0; + } + return bProceed; +} + +/* Assign a value to a named Java field of basic type or String */ +static int assignBasicTypeField(JNIEnv * env, jclass pClass, jobject pObject, + const char * sFieldType, const char * sFieldName, ...) +{ + int bProceed = 1; + jfieldID pFieldID = NULL; + jthrowable pException = NULL; + + pFieldID = env->GetFieldID(pClass, sFieldName, sFieldType); + if (pFieldID != NULL && (pException = env->ExceptionOccurred()) == NULL) { + + va_list ap; + + va_start(ap, sFieldName); + if (strcmp(sFieldType, "I") == 0) { + jint iValue = va_arg(ap, jint); + env->SetIntField(pObject, pFieldID, iValue); + } else if (strcmp(sFieldType, "S") == 0) { + jshort iValue = va_arg(ap, int); + env->SetShortField(pObject, pFieldID, iValue); + } else if (strcmp(sFieldType, "B") == 0) { + jbyte iValue = va_arg(ap, int); + env->SetByteField(pObject, pFieldID, iValue); + } else if (strcmp(sFieldType, "Z") == 0) { + jboolean iValue = va_arg(ap, int); + env->SetBooleanField(pObject, pFieldID, iValue); + } else if (strcmp(sFieldType, "C") == 0) { + jchar iValue = va_arg(ap, int); + env->SetCharField(pObject, pFieldID, iValue); + } else if (strcmp(sFieldType, "J") == 0) { + jlong iValue = va_arg(ap, jlong); + env->SetLongField(pObject, pFieldID, iValue); + } else if (strcmp(sFieldType, "F") == 0) { + jfloat iValue = va_arg(ap, double); + env->SetFloatField(pObject, pFieldID, iValue); + } else if (strcmp(sFieldType, "D") == 0) { + jdouble iValue = va_arg(ap, jdouble); + env->SetDoubleField(pObject, pFieldID, iValue); + } else if (strcmp(sFieldType, "Ljava/lang/String;") == 0) { + const char * s = va_arg(ap, const char *); + jstring jNameString = env->NewStringUTF(s); + env->SetObjectField(pObject, pFieldID, jNameString); + } else if (sFieldType[0] == 'L') { + jobject pAssignedObject = va_arg(ap, jobject); + env->SetObjectField(pObject, pFieldID, pAssignedObject); + } + va_end(ap); + } else { + bProceed = 0; + } + return bProceed; +} diff --git a/bindings/Java/libjpisock.h b/bindings/Java/libjpisock.h new file mode 100644 index 0000000..7a18fff --- /dev/null +++ b/bindings/Java/libjpisock.h @@ -0,0 +1,197 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class org_gnu_pilotlink_PilotLink */ + +#ifndef _Included_org_gnu_pilotlink_PilotLink +#define _Included_org_gnu_pilotlink_PilotLink +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_gnu_pilotlink_PilotLink + * Method: connect + * Signature: (Ljava/lang/String;)I + */ +JNIEXPORT jint JNICALL Java_org_gnu_pilotlink_PilotLink_connect + (JNIEnv *, jobject, jstring); + +/* + * Class: org_gnu_pilotlink_PilotLink + * Method: readSysInfo + * Signature: (I)Lorg/gnu/pilotlink/SysInfo; + */ +JNIEXPORT jobject JNICALL Java_org_gnu_pilotlink_PilotLink_readSysInfo + (JNIEnv *, jobject, jint); + +/* + * Class: org_gnu_pilotlink_PilotLink + * Method: readUserInfo + * Signature: (I)Lorg/gnu/pilotlink/User; + */ +JNIEXPORT jobject JNICALL Java_org_gnu_pilotlink_PilotLink_readUserInfo + (JNIEnv *, jobject, jint); + +/* + * Class: org_gnu_pilotlink_PilotLink + * Method: readAppInfo + * Signature: (II)Lorg/gnu/pilotlink/RawAppInfo; + */ +JNIEXPORT jobject JNICALL Java_org_gnu_pilotlink_PilotLink_readAppInfo + (JNIEnv *, jobject, jint, jint); + +/* + * Class: org_gnu_pilotlink_PilotLink + * Method: getAppInfoBlock + * Signature: (ILjava/lang/String;)I + */ +JNIEXPORT jobject JNICALL Java_org_gnu_pilotlink_PilotLink_getAppInfoBlock + (JNIEnv *, jobject, jint, jstring); + +/* + * Class: org_gnu_pilotlink_PilotLink + * Method: writeUserInfo + * Signature: (ILorg/gnu/pilotlink/User;)V + */ +JNIEXPORT void JNICALL Java_org_gnu_pilotlink_PilotLink_writeUserInfo + (JNIEnv *, jobject, jint, jobject); + +/* + * Class: org_gnu_pilotlink_PilotLink + * Method: createDB + * Signature: (IJLjava/lang/String;J)I + */ +JNIEXPORT jint JNICALL Java_org_gnu_pilotlink_PilotLink_createDB__IJLjava_lang_String_2J + (JNIEnv *, jobject, jint, jlong, jstring, jlong); + +/* + * Class: org_gnu_pilotlink_PilotLink + * Method: createDB + * Signature: (IJLjava/lang/String;JII)I + */ +JNIEXPORT jint JNICALL Java_org_gnu_pilotlink_PilotLink_createDB__IJLjava_lang_String_2JII + (JNIEnv *, jobject, jint, jlong, jstring, jlong, jint, jint); + +/* + * Class: org_gnu_pilotlink_PilotLink + * Method: deleteDB + * Signature: (ILjava/lang/String;)I + */ +JNIEXPORT jint JNICALL Java_org_gnu_pilotlink_PilotLink_deleteDB + (JNIEnv *, jobject, jint, jstring); + +/* + * Class: org_gnu_pilotlink_PilotLink + * Method: openDB + * Signature: (ILjava/lang/String;)I + */ +JNIEXPORT jint JNICALL Java_org_gnu_pilotlink_PilotLink_openDB + (JNIEnv *, jobject, jint, jstring); + +/* + * Class: org_gnu_pilotlink_PilotLink + * Method: writeAppBlock + * Signature: (II[BI)I + */ +JNIEXPORT jint JNICALL Java_org_gnu_pilotlink_PilotLink_writeAppBlock + (JNIEnv *, jobject, jint, jint, jbyteArray, jint); + +/* + * Class: org_gnu_pilotlink_PilotLink + * Method: getRecordCount + * Signature: (II)I + */ +JNIEXPORT jint JNICALL Java_org_gnu_pilotlink_PilotLink_getRecordCount + (JNIEnv *, jobject, jint, jint); + +/* + * Class: org_gnu_pilotlink_PilotLink + * Method: getRecordByIndex + * Signature: (III)Lorg/gnu/pilotlink/RawRecord; + */ +JNIEXPORT jobject JNICALL Java_org_gnu_pilotlink_PilotLink_getRecordByIndex + (JNIEnv *, jobject, jint, jint, jint); + +/* + * Class: org_gnu_pilotlink_PilotLink + * Method: deleteRecordByIndex + * Signature: (III)I + */ +JNIEXPORT jint JNICALL Java_org_gnu_pilotlink_PilotLink_deleteRecordById + (JNIEnv *, jobject, jint, jint, jlong); + +/* + * Class: org_gnu_pilotlink_PilotLink + * Method: writeRecord + * Signature: (IILorg/gnu/pilotlink/Record;)I + */ +JNIEXPORT jint JNICALL Java_org_gnu_pilotlink_PilotLink_writeRecord + (JNIEnv *, jobject, jint, jint, jobject); + +/* + * Class: org_gnu_pilotlink_PilotLink + * Method: closeDB + * Signature: (II)V + */ +JNIEXPORT void JNICALL Java_org_gnu_pilotlink_PilotLink_closeDB + (JNIEnv *, jobject, jint, jint); + +/* + * Class: org_gnu_pilotlink_PilotLink + * Method: endSync + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_org_gnu_pilotlink_PilotLink_endSync + (JNIEnv *, jobject, jint); + +/* + * Class: org_gnu_pilotlink_PilotLink + * Method: close + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_org_gnu_pilotlink_PilotLink_close + (JNIEnv *, jobject, jint); + +/* + * Class: org_gnu_pilotlink_PilotLink + * Method: openConduit + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_org_gnu_pilotlink_PilotLink_openConduit + (JNIEnv *, jobject, jint); + +/* + * Class: org_gnu_pilotlink_PilotLink + * Method: getResourceByIndex + * Signature: (III)Lorg/gnu/pilotlink/RawRecord; + */ +JNIEXPORT jobject JNICALL Java_org_gnu_pilotlink_PilotLink_getResourceByIndex + (JNIEnv *, jobject, jint, jint, jint); + +/* + * Class: org_gnu_pilotlink_PilotLink + * Method: writeResource + * Signature: (IILorg/gnu/pilotlink/RawRecord;)V + */ +JNIEXPORT void JNICALL Java_org_gnu_pilotlink_PilotLink_writeResource + (JNIEnv *, jobject, jint, jint, jobject); + +/* + * Class: org_gnu_pilotlink_PilotLink + * Method: resetSystem + * Signature: (I)V + */ +JNIEXPORT void JNICALL Java_org_gnu_pilotlink_PilotLink_resetSystem + (JNIEnv *, jobject, jint); + +/* + * Class: org_gnu_pilotlink_PilotLink + * Method: readDBList + * Signature: (IIII)Lorg/gnu/pilotlink/DBInfo; + */ +JNIEXPORT jobject JNICALL Java_org_gnu_pilotlink_PilotLink_readDBList + (JNIEnv *, jobject, jint, jint, jint, jint); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/bindings/Java/libjpisock.so b/bindings/Java/libjpisock.so new file mode 100755 index 0000000000000000000000000000000000000000..bd9be3ad5cb563e100ea2fedf7bd52584e5cdf16 GIT binary patch literal 47671 zcmeHw3wTu3wf_kO2?``4D5B_Sg9aZV2_O*_^BR~y0uhKJR)-`rAp^-wOeT=vD>O;V zIF3eJEVpW0_u+PJO8Fml$Q?SQwd6G~G_zmpj*M-;}*ym!Gp=xB}xE#9+`c`#kVlT-oV@$z`SgzEv9%VQl_C9)Qf;)ME}{7JFAnbJ&hUaK)~R8nBfd}Gvj z!?I`m=6lnBWSl&Dnx)m6WZRx>2^jZ$>w;ZHmX4~GX+~L+<<$wDQ`1JnsY#@Z+D&7J zVw+-$`jpy1V?=G#NBP((MraIEyJ>7voRLqcZcbB?~m{P=C2bMedl0G z!+-qrg->2R`?TgeesyZo{zr=!zxMc>Ck1-1&w1*Dw;uJKbyd#V%MYIX!g1SM?_PJx zgRlKG=juOY`1j;KxBJ08x%a$%<)?KGXTN-M%H{h{dGGko2I~JkZT+q8$v3@s>b?JA zcs~AM!;xch;9xliAGesWp!Q>7nW>l^n#PDjQKzgT+Nt^2#T-;w|O1Mju{ z-utVUfB8Gtf$LYD{?t+51y4TtjmMsP=dK%npEh&jMJtQFFaB&_-3!-Ges$fuZ#?q& zWxrffVEygD+8a*ZUz}9=yJ^Pd(=U8Gf2sYu=lo{i2lxN|iNFUFmlW-zA)as>jfg4B zh%WvX2Hd1*5@Xp2j(GGN5vcL#HzOG1(c2R6f0BSd3AJ0|*mHgY`l1ASb|z@oLr5I) z?0n_8`1JY&{7)yS_iqXG^d_KBLGp`d&kry_f|f&~1pCZK;e0lhbY{jVqRe@+5>o=Tu+QUX8RlR(ck3HS#RjIWIe z^t_V5o-Y#U-;zN8+64MN3Ha|!z@MGKo=wn0b8_sqIf4FM^vl`Ccw?PhXsG#d8Tapa zqbEyfx=1ceN;sa!8{eXd1Y5NL#y&~!SR@E{OL`&OIo{}BE(mHayny{S-Z)WCo(ClV z(`@H>;{uwju&FueWE@YzN@W#IGTOF7+WGe!LA+Mlc^HcR%`q2_dQf_fk)TY?tb_?181($6;8k2XF6o}{-s1*7uML(-ndq&>2G48OELC&vEu za$M|=85akop5vsSRlTjU-)G3h@9(5P$4Wmhzf{=sv9$jjS?^=Ay~;m7lm5?;{x6pN z&q_aZ$HenXvc0WxAigL0{{Z_b4%?-}P6AHbkEEVXsYecPUe8f~JzXLAWVjgV6X;y$ zgK+0v7EvJo-yr=^BmJrJ#$zXldcQ9TKY@L;Wl25TWAvOZ{d}qP^M!)l$dh`U(tbKW zqiv0B@2w7je=dNrNc!z=*)J+i?w5Wj$rOxxB>y{Og`KNu(TweJ$kR4GL3>xp{`xqk zzi?rL{XCIQa$p z^_*OV18k~)4ZD49oyTo&^j0)@?RLZNa=W~Sy&3>TRm~N2SW)ZRfT_#c%jSfU^Z*nk}AC<6`@| zYM~*@U2~ziz~iZPR=AHh2tp8NTl-h6s$% zc}Pjx_?wLyM(VxBD2Z%H4Bvf7cUle9h7tO&HcEg@8mR-Tqa>(5M(jaHlt>QJ-U@Gn z%e}UI<-*vsnmrF8VV06V8#%5US)eSck8-k?J24y^or(FQb9OdWO`V$G&`{B0jdoTp zDmKe#hVZzpW!c&Gb(KoM+#mQ-0SUS zbW}n|RUWq+(}00i);irr9kQjTimgR{bsUteGB zuJ#y?+Iq}@j2EDq^_U@@4GnIO9Y_VuR>!7pMN1>At8>;hI=!Y=MYhvqT!p69thZNJ zxN470X?dfwA<9UTFrp7PHn_Y_lO4Wulk=#tS4EW^n<6+%ILB0AQbttZsdu^yJ#I%6 z)*vLlOvCM~=VXtlpbFjPbruywI@+9=U9~hxqjeZQwJsOyFO=*fyV!y8LW)_eNFgKI zv)1XA!4vTbH42Ivy$(;4*QlDRw)Y&1@)*0ijq?>zlldBik*UXi7RXXA0uTDmYdpvl(E=DqJNUOoD~9 z94W6as_<4+A`y;Uv(xQZ(c-RRo2_ogvTDXgbRgGh)Vu8B0RD8kHxN#%W{m#EdIY4m znkbc6F%zt%CAOQ6DynE1Z1;Lt!09C!PrY|!W4YTJJxvW&PSr)!Xwh-e^buPiT`r`! z`J5J(J0)dA1r1K5Ib=7lvrdLj1V0Ah3P({v30xv&qfiWIWMEGNXZ*T)I-6;3w%0ow z8a;H@;%%{S$fA=J47RHC&!>}=iwLbVkJeUI*&7MVCVG{i+wILr!B}%R9S9F7t!!)* zXGkESj|x|<$}cFkXJ^hf7L^ni6xwq#=a@%1nc~!uPV{M4n>begM{!vM6I_Bi8fB_P zNz2nviBfse|M$N`xVAy(n-=W9`T2UBktQ2+ah^q{69so8w&5e!@?B0Orgq%(5KO%$lMNS^vNdGF#0vRdG3qyEwWxZJ)f!Z z8=V%$a2n6|yi`$&MyLB=YD?4TOBE4tszw)mDhe$cy-4HF(CAAvdX`4Vr2=!y)#!SR zZTtI=ufsI5<oxu~jXp)APu1vjtzK;wjjpaKQdx#Z*Pr3Y(&*PHC4jjao$gPoEl;CQRYX9W zMz7Q8Wg0zSqp#BFr)u;y8hx5ZuhHlQ8ogelpQh29H9FlxR9mY?r+e*c+oI8@DhQ^I`jXd^O>y(+G7kzMSym z2ybP4G2s*zp?by(2&bhON!!fA>Kbu<1h;U^Kk zi}61ZPANXLo$)sbrxYIQWc*daDRqZh8Go5@O3k5q#`h3TDK@l*@h1tVR2eE`{1L(_ zMTYVie}HgGfuStMe@r-~zL16S9}rHdEtJOiU4&Cg3mJ^xN;svm(2>7W`@coFh46mH zHxW*$DAdPz1L2f{Lfwq7Bb-uCXcyy^gi{I$ZD)Kn;WG&DWPCZ{=Mdh?_+rA(CA^;T z0>Wtsht@DYpKw}AhRPVvA)JP0D39^;2&W+#%3}O%!f7amER0VhoQ7H`jqyo@(+~?8 zj2}-p4Xx0TFS-8-&mz2^@h_afX()yI82^xPN@^^ET!JeTk_j6X^E#e|nJ{s`f8S2vW$_ydH~lpo4s{KtgT zR1>l={sY1>yBfOvSO@z}F9_nMff$##tyBS|c zcp>4t7_TI}i16)dvTrx8w5Q7Db^NrW#Y++h58!f9z2I`Tz049FYhOPhbpWtA4g z*3s=974GA7*{Qbj*2{tp3zDes&-p7?G*#N#F0+8w@Q%0nFMAdx!AIa-TVVQWYb-`d zV8(a==<7mB$;@|b&;4z*t?h7eJr*?eQ}LwSC9@?Nmsg+r7#{Q1Q( zH{&qrn*49R^n7*dneA*}IV$Y23j@5&*m%d?XiAIdTc$`BN7G~`b&Fle(QlJ8S(A6`FesEBTd+R)+3-FA-n}{ z6Xx~={{WYvENE-HDQI|4viZx2Eok$-PMl|AfC-Y&Y7+_%kOF^skSda#e+J2C{Zgob z3rR&!FbwT}>z6M*Pc2x1CagjecB2WqeB}@MN_WEgerf#y3Hv1MCD>yfNMgWkYrAQ{ z@Lu#Rol6I22)lbxVXx727Ao9r3rzVdhJ`IKcPd5$RUbT;Rgfl@Errp&{%d#otq&FZ z`ko*~>?hwrF#m*G5F|geqz7LB=1&oAgyy;Ll4fw7g~SJ|OqDZ4&2!(8NlFk>a4SE{%iXM`-ES!p;P);>L4keEE!SZg%Z0(I6lN*@ zt%TeB9c*G??k40+Qshoom6B>zX?BE>k}EM@K~49u`L?z$Zbj4a!dzXlz~;Y?3QYwQ z@<~Bp$|%;u&R;mls;JFS#Z8Z+Dz*I~YOH9zEl_r%QYm^m|5H{nmFu$h7yI_4K5jiw zl=^Hh;Ol_hfUl)KI|%S<>a!TQ9X9Y5`;dLup~b%EZT^6e-^#W`Szh8>nQkfam84HC z@)f10`EE>4@y$su^}Su{!?2D-O0j4R^(7PwP#$#HW>4mR_l^lZP8^%}QiyPt6T^M; zz-|#U&D?vB((=f+wKi_dYzLK`jF{OLIqZ~&Jsl6>NW=^s8L91*Md7(!z@DUf&A3_r z32X^$r2>BkRVLyl87BHVb^>qfqW?zAtYAN4iQ2MjQh?ibs~JP#4Cs=On|~B5l;xFwhp=2PE13AsNvzoSQb}OUR;&VTfe8#m zzutM4VfZ*Apr56E*48YGL=<)~5Ch*9 zSe)|YEo2#@)%Qy9KR(8QRl`>qD8)ptvOWXdZ8nUSRmeui-mn3j1E68A5)ggy%QKbd zOszj4t!Cp=+izuDnlz+=x4>=;d(JB=J8)*R1#YE*tGDra82_U6ahSmQ$u@>ZHuBi5 zAFz^L~JL+!B+&?2~HdN2eZq9x@6qy%f*@8aZ^si3nu<+r{Cw&hTPQ-ZdezNAXM zveGZ1GYDl4S!v%i1LrvE{GbL}dZDG;hi3XpcfmV5OMIo<;T=r2h+mvDU@p>=z%}G$ zT5>zK%CtW8x}X5#PcbZ;3%b4p51)G3P`}^Z<-2*?Qr-m z@@t@Uz=jzO(`qSnj8D(^eNg1Lragg?2*=P##QRW*WiX#aOb@og1LWu+*^D-S2Uiuy z#J5fbWIJ#S6WP&Vn8FN!xvOw>g7`AfA;Qr$5l81~@dFois}n(9>PMgWXah*49NdgIB)fXY}76a2byJZ!9(4$2#Fe zR!z%Q=7$a?Nh@C}lpTf1^9fRbgwJ|-<@+TWj9g4?Sh-V;aa5(YZ-!p~)&mi3qLWI6 zCEJM}2(bGk(|t@6Au=SBR+E@NAXv6?<cmON&`ke zXKEv{&3h@b|DnNM#Vw0m)%i&X`eYD~rQ?KyyO?SoI=DxXr#TyxBGX~$@&Jz$t;ML> zXB}+2Y0zj{5WELsG}Z^@Sf7<8V&F4eLibw-4_gF%%7fgsb8p0zTndqrlW|U!)M<|L zm?^}E3>zr_5{Z^3ll>4Vgw?9n>A@LVtu&qdRz}`tuGPHaw0U4lg3RFyY(a+=`8wJG zV)KWHl#&3CBU_-Wm;07D{r8cW7<{(CqZHBNtme65-yjdb2ZJ;KX^^ya@le49ijC+G z_-HHPX0XpKmNx(QNpif0&Zki>LK1CKD-MZch7qX|PG+scS z=0WuM|6vV0*3@`B8F^s>ID@zTMI{-!8X-bh8X?BeIF2R}#A*zQtacv-z2qG-hR&u& zbB^#oD#s=HvDnvLBLO!`Ph?irIPuxa^|Yt}MSoR#=GT48r= zob~V&MD=4LAqLg?!tvZ5ITyut^37yTV9E__6nFBgus$~F(sbegi|}CDA@nq@qe3r? z;wpvTht6Gs{VZ}vhwSO-5F3a4HK_gcNbM^{?Xp7!xKC@6S|nlY3+*2v>|id11QI&| zoIk+a{RrFOr|+OJw#j}9=)jccB60mkG)OhsFQX_?YgT|)OpHSm=Lp5xfcf@UQ2YgK z_3_;1=l?w8&VowO&U^k8rzvNM8c&ZjW%5_3aTTeQbD|oMoQeGR$7&nx*tv^+IxER0roxApQoDKz`(F8{tp_nCbiJt`h0uzbv6B3hS(g^$JdG%UWZV&?dw@N`Eq^4Ajw8Y$ z1Pm{36m8}9`U6rQ7xQ_QNECOGmbNazJ`U>X=K2x z5whUhuwbYwrb`?A+qv(mq{C9%UqIKjbrH!(^^t3WkAn%m@0bc2{F0SH z)prD8pPy-MgA=?N_;<_Lw!u-}iHA$t22b*y+cr4Gn{zl10_O^WernJH;EOao6Zl#U zKLhwJ8jky+W4<53(MYP78u^QZ1oe)%pD0Ps3!}i{;g0ADen-$DOD2$P6H!E$;o5Xh z@V9>;ddC4OZtEgocsH1O&SgEg@ZCl7xTSIwY^p!+V|)B8TkQM1*mp!vRZmkzNT#IN zjM$C1wLrBlIss5f6596%_~#t6R?$8!(DS5N8pK2&Lg*gq8y>YlZU-{7-_H=tbPh=a z=-w~wG=`awW zLt9`g6$)8-LNgl0%A#$**P{Pk6!dhA2R~VUcx>B$(s5E-7Xjnu3!yA8tdxl{G!^o` zjx?0Fb3bvX8 zu`}Xn2rA5oGzXZ=)wY3VOc^^dWo-AA-|H*gR^+pO4>#j`(PGMyxWT^nO^Erd;(jz= ze@tz^3;~2|Uw!`a@7V%34cG!r2mIG=^IPu~Vb2SKd&w8pLv1%5GE%o3ggTu5?L?2> zC}Vd3<O9#1WYC^qJ%jUeOwYcQ<%<8{Qb7rncV??U?>aTud8l z-eTRmgpDY;7KhfILl#0?h!0n$d@s^EzG@H`@xWXP=JMUjAfGoqr6(DA)-bF-I=Rya z^*mu%?_o=j+DnUtL!uRPOE@+61P2j4IKKrIH@kX*pS&TjcEJ}@%7`a0_xdxar9Hv? zv4C`iux)R%))IvZ%+3`5i%F?WZ9Pv#B0*Ctue5LK;U;Ab77vdwPXw z6PD1R3QV!_*kT9Y539`15Eq&8C`CDXq*Q8*T&+I|yf`^JjAt79$p%)xT2ucCH7777 zC89oWsQR-LsXrv*?Ld_N)b@M0eP$E3Sh$Xt2#6SY>%fpEtVvWy8F+D3gsySid?NMv zHgf-)zhe#Z$%_kwv!*=6(Kz?N>AF6c?n8IVh95p&9VB&<6H?n>k2W%27K#@E>-1S1VL3S=C{3FOP+G-^i`UwrXB$Kl*(^EdSk8JE8Ts~ndt8Nt86 zAU$f|<4)@d79cI^?Ze3H<42-I6we}8we8ieMi0I0e-CVrtY2@E6{+>>eX^oAMyZu> z{#E%`=9i0SOmdUR+g(!;+cw{$X#l>h=Z;~ZF{G5r@nFRql?BRzj zP>eN_jc9xUlugEED2oV}<2a^R9LtGZVxy~;%pZ|VZT}HfFb4`H6MjZY0#klD zjdbxi{R{?TbwVaU9b1Ac#Zmy#c@X*3Nt%QiXMkuLu8k`{==d zT|V)w4x%-m$N|z$OC<(+LyM4M^NM`6>A6KdM|xI~@0;lvMRA`ZhB}kP(~rQrzOfm;7t^WYQCS9@QMS2!)TcDOd^fV~C0y3nrZX>@71NInqz6@r>jF)X)!g zXg%OisK zOTkBn7yJ|!LGaXwAU*L;jl59^CbIP=)JV4eQA7&0av|;{kYvH|lCxi--X9(M_lV@D zbi*5xDMAuUpSX@42V*}_wlDh&men@h2NiOv<9L!^*4+#Oy8udjfg0qo)W^DQfyo`D z2Ki(rfth`_K>1(sMDff`AEeG~csq6Gx?iWxtb8tY=IURh&RqVZ)R~L#Or2S<8P}wenF5V z@nqT)oQ`S{&>L~}5Cv_6vo@xq75z9C6ijG=pW~gBs`=0L0#H2of07@~<(d+Q(1Vral{> zM{9>OsfbMaEl!dnCcVw`5w4@52qrcEYfReGaXCy$eI`I)IE!-r8x|EtS#*W8Xzjn) zq6K8pV*vugS=7A`7X1QC;)su)J4JNcZ(;1ewA<#BNsk8z3}@2x|AI+pM47Y@?>2G% z6DDo?S9BXc8_gTzWCortcY08w>RIob4G$C%3U_!>a560WFu#!5$C@&Jjzs3tU>S?qLum`aK z>=%nkEE7p&RlQs}_CpNC6kg%qV5-hQMe1E0QIo2rtXb616Mj`KFE=ttB7WT%Fu87|gzS2GjQg6Vh6dpW8q2)ZkVS`SgX_pMqdWBX{ z|MPr4m74cY`}}`q+dGf7?PAsA=e18vwEfR)IltTRzqHqn9BZ!+>FKtC=!_keCywv} z<(TqBtR9hTZ2oP7tb;Eb#7qA1vy~~0ul*p?{iD(;|CBU-1mmBmd+I+WZTY99GmcF< zH||`$Eh~XEmX6ka^mx2=A6AdneV8aBPjj^mB+!_x|BxmUQcDH;%7yr-3v5Vliks@7*Ds4gtE3SmK(fi)fac^eAvXP~gt-hv@ zQL9+2Z)t^`znlrftk&@c3LYQE{Zi$k691Mwx{^fq#qdCJ`CDq8Xg;fvAO5vmDh_FP zJZ-JVs!e@uptIBF`_Se)`Yh%)BQ*8ta9GuoV)KvLex?N%vIoO>(I7DWyFgOU1b#RL z>sLP>D#D{0AHcd4T0nQgFDb#xpT(-0zW##W<#Jcxo5vQf$HHHF#m7D^l}**v&IU`h zr@>NDUw@$sUuv~f^5x)23ytoovO>dMQRg&<${O|fPWwiD zOVr4ix!Az>B}=3TzM$!}dtG(-2Rl?j6TV#8*jU|EOImf7NYnVck`}XVu?5tZW;bdc zG5Z~#&-FC4sD77S9??P{Nwwhf!2B^;d;qo9VR3uB7V(8x3w_v;zxzqf!xoW~3~1_l zd?^+h>RT+HYE!_%{)y-l-!wIgjfKvdT4%#qh8aox;aAeoh>z%7W;l*FBEoEAlqr!i zc+%3qUvGsC_vkd;Wt&2Wp%GI54=&E%t^>`Pe2ORMdhKv^RF;~mEGaB(E8Ep|W=&P=juj=u&dCQDO%Y~MV z8IGAan$ZZpODsjs4X!HK>2ab9;1g#vzIAHJz!npPmbTFah~Q_2IQk-r9uSVgW@3b=g{zcC+-!!CDsjy?k#*t}fP@hz42v^-iVFCH$#L>5h7vYp?gE+*Vj56XU?D$= zabV17M6^=~aNko?hK|!BnVGB<2aS=K6Ae$yKQu~&kw-F_{kd))B}9zKqvx z9e|TQggjsw;10ms0rvv#13UzH{6~m2#fZqlz0^AEoKm0oBW5@$m0`35O0B|qh zhk%Cw=YIluEce<0(*gGb76DGimlqs>-vn$2+yS@)Z~$;G;OU=19&j~aGWu;BU^?K7 zfJK0l2O$qw3z&?jOL5zox1>#F%Z;SwwBzpCKh0vCHhydhU40Ve>44ARZKex}kUuf4 z@Y|y%Km~6kUxa-h$}b^`D*t91yddNqfI*a>O$1d=$Jj`|9s9c|{~Hlh`KVV|0hRB- z{vuv@qkEoaIUQr8^1aw!NBJTmD0xq${zD)iMR_9q$!O`Dh?CECd98l>Ev#Q5UJ}U{ zp}Z4u^IigZ2g#v`TSwZ9VlOga{6eQ**{wQ+EM;(l$Rwa-+}VSP@c$tdr^K6~BYTAIhWbb428K zpnPzc^1UdxATK2vABRw$h4MuGmz<2>b{(cX9p$wsPdNTjz6s?~{o5F^-+}U-!<4t9 z{Pah{;XS(l=olN1f0RFia{kRMHNHnJ;tF{Dqx`C0g~R;YgJyX}Tk>tAS^f~p>mCb- z`8WT}@+wn48Ts-7%zymbUS@fD{}ko?+k2{f)DqLay(oWnPdNN{5>VxIjE&?E zq5R(G!{L=gh*M7UL?6oew*yuAsH;u=G=DsTdA?egzb;}w%`1Z_=imA><*zd3X})QC zDIBKzrSa--NBLotFHTUt1Lae&p1_lVapm`-obGS)Z`YaiUt`vP2<2n@!eRc6IaRKW zujH{<$NV}R{weZ=Y2OWz_NAjd?X~#*n+}m8l+Q&u|CXQ9KdPy1>}|&d#@wEK2ZkT_ zLoN6Yy&evG^*9){%#739P@aqR&JysOcF-|4>c@vrUWM{IbvsApneE(%^4G9VDgZR) zNBx+~CzBFvNt<|@Pf{~H(Mk6j+L7N1|Zu$ijY`7G_n}yDivEdRpZ&ymi__PFXQzfKxciMt? zSQyf&H*Kv_UY%D<)WG`@y!BZGRP;QFrwFpqDIsoA@TTg+Bj0TQ5x&@A81OUWs$N_M zWPGA5|6JnA&r;q0GcXvi#I5UQ*kC!t%yn~Tw}dxKc)Nr@l<;8*pOJ9Cga;*jU&5mjPUMTuxPB^O zri2S5Tq@yp61pX9y~`pDm;V z7@3VNb$Cz&(AywjjXJ`;dS@mcEy}EHa@9I6#Pc+a)l}fud@~&_Zb%B~Z4f0J@T;Ws z8_~=r5j)BnoV67sAdl*6y+$TIRAgj&oz3`P4FqK#ddS1bbk^9b8*q=_UgLnQ!i-G1 zJ>Q551z1;wLg=ihb5)^257gjaChHb@@ROzx^3>Jg35_Vv{bR^!5To3u@>Z`*Pzus@ zQ+-o;T+#5wR?gi@UgdWM=_yUxlw68HO*|7gZi#x7yqXUbA9ukyWuf0A;l{fbY)a+K3t zqHr~zD9HEPz!Ph~RBJeJK)RK@n!glO^OveWw*53c>+)(oR8Y;I#6y0Lm2U=(e4^%S zHUBH9{0tV}lpPAEXK8eK{zWd(6iibK11X^7)iv;&W8_;^UXk!Xo)nZo$th|(4)prf zdPTvBicvyUzarl%<(2}@MqbT_trQs8l$`>Lj6a3Hi38H5?C+HGY3DJ@{}Hlee-?IqQ}PRSB94id zHU&?_v8tO3Dw=iuHhQy zkJzuq=Q>H>Ci96Jcg<3dg%)nwmdJiFzn*9uka=B++=+uEWVh~H6h*-MnLgD12SF$M zEpmQUQqSQap5OLM{`#u~=MpLKv7~=V3omSZk00<1G@SH5CHeW@J?K|UddX_yHVnRJ z4|q4|Nuy3Ne}`WA=MkoV5LWX53*jH-kx`?@8)?#hmDgWMKz~i@SM!0=^ET5b8NnET zzR&az!m)Aw8R%!DU9HtZ!+TQE1xUJ+h@LM9{7eZBuLGU zk3=-^yyU;VN)Y*(JRE)@>F2owou75W;dw~nlLRU1|GWhBB?;)?OhB(?`gmhjo>0%v z;Nb9kpi_HyuNU-10vInO(DMf97RjT7U;_G=3G__FLXP}DahA}+&rIR)5~k~##c?s{ zWanejZ)K9@h6Mb#O8$d1kg*jDU_8bAL-Y1?OdoIjJx4I|GgvtMYXbeFG0(;8ualTQ z-sq8m!_Rs_56z2YzY!BZ4U(QyBkEQ0@MEdRDFf|HQEa@#bctx-4XLL-M$b4b4$05` z%LTJl%3K6G*>kHy5cru=9Ilh}gc#~a@&6h>7`+xAF$yG;=I88RI9gHHN0q@Pus zPZ}runR$ue=V$tGSjluj)BiV1{_igpRDK2xhxCj(>A$@~(AD($qU4{kLeTk{G8}#= z`KMJ1y2^W&jmkK>JU(z=91flRK&N^ii>ddwtY_$X;_nmaH>&VH zmwj!W$8B%)R^YX=ss?YP7cT{7RvC7C;mT#p?Ip!4R@&{rilVT^g<6rrV_#eAsjR5A z^96BxMN_kZi{16LPOsCEIdAs7c?K2OU5;kLE;ht9bw^WOU5l#6y0nO^S-3pE)M{54 zRiln0weZzt4p%y;T1~nV!Z2XzRFcLZ}HM%t9ygJY)RFM9JFM0 zNlp%N4Sh9PXLY%RK6*>CqR~~gvZda+(B-UkM40B;*Hz(F-o~jz*8Yro!#0b*gTYE-bowX?|&OA*@@foRU4K5Fv1-$K@z> zdTTrmtJaw8EW7#2>L!DnYR3z4cHD)rn=g3VO)uKvDe=l{K}#{e6{}a1v(&j!ym(!{ za-kJ|iZ)_}(_7?e!ke$`V%>;~?dz(^?Zrh7qrSoA_EzWREh;H4D75Ef=48%|Qgact zWf}LxNUe#oZ4utD_PEy$Q@7!$t+(^by3V2k1MfoP?Zs$2A`J4qUm`5W8^h`q^b!3> zuO~x!lx6VC2$t2dX@&HfZh5_Wn-TpU8Pqha7H@zpYw?Psv!Ree*4b#(H+dVQn=qn< z^pdE0AHUvZhYx7vdFs7UM$dseN9;_tn%q-VPy(}}6y%`Qg*6oo!}JFP_(t6^nQXrF zUdL~*MmJh?6Pkj4@;d8A4s&vX>QlY1X2a@*wVn#^FlJXrw-b&kXz>mg^CO!h-ovI= zT-D(6I%V+bhUK7|5!^X)HT=G=bdj!nHVwIAxA&`zw>j{X7^TCwYDKmk(}dF*-CMXF zTB{DkGLMH6#xQQGF$d^!`BJ#b z>ME}#%=J0h%bn2P=rr>^MPDN)b@U&;UqI=u0u{}y#To)fPWpI6bX1I3!&;h4 z#mo50?^+*TybxbG;5^PV>4@4WWev@<7h_5m!%z#x=sDj^D`pBs+NVz}j661IHdC=Y zqJe0xoLA&f(iSMQF=|HYH#1nx!3d2`_lB?NbrD_Bb8zm;ng-8CxJq*pMV1}i>h{?2 z>g4u;X(hd(j*YW|--&&qAPbZi$oKbv{}jiE$@~u$eqYwnu$MMc0=NeZ$Xr z=J22iMt)jD*N_VhX3!++gbIU}d|2-}qgQM5AiRRpI#%{WGJOrYf**m>>!Tq((o%_* zutQFN^70B-t;#Pbwr6L~9@$yEG{R`6ZsX77(Au4mT70Vp$0Oz?8B`Sf)OxYj(pxf@ yJU8NG%9RS=lN#|U7beOzo5=JCScj)+m<2>6a)z113_Cy0R$X1&)L0We@c%D^oiaE8 literal 0 HcmV?d00001 diff --git a/bindings/Java/org/gnu/pilotlink/AddressAppInfo.class b/bindings/Java/org/gnu/pilotlink/AddressAppInfo.class new file mode 100644 index 0000000000000000000000000000000000000000..fcad1c2bdfe60ece96d948926a663865f8f89372 GIT binary patch literal 2399 zcmZ`*U2jxX6kTWToqK1dm(IX2rKKI(0_t=MR9Y-zq4op8!J!mdK&T(RZEwrKFf-1F zp-;r5=mYV=1QQ8w80`xWn9$G|H9i<0eDev^%nPZl+_TT+HNVdK4^o`HYjZuR2o-zOjo6HHAz0 zoRhBZGbi(vT)8-_pi&B(O8H`WV0JKnwP5EMGY)5RnR2g!mS{VtpbzG!9EET?lXHeD zS0|j}s6CNoWJe;MFV1w#goOF(5gyCra)Kt+am8zuf6R|BcA#R}o+buMTX+jGD*VciBt%zBu z!!`@`GCG6P7Di<2D7Kq8YvCNuTX-86EL_Bxg?D7_UA$-EeT*x#Y@qF`(K5CUk`M~nameiy;2tGd~T+nX$EU3 z)pml_%%E5965i&9*DK`7oXV9~_OgPalSPN;IOmF#kP)`%c(14(i{5!d6TqyVKX zs*t99mlcRswr-SN?}txV=g23-yPn*;o_e{SlF`>fiHx*6IO}4*q7Nq@LM62Y_{3=6 zFr?5-y9GLJ18o#RexjDj3qVU1-~a)9%!nl0A430sgjOCgiVzXP*u}lA*y$mtdocI| z{z*pazK4GS1_$5i3ow(BfEx%T+ZPbz2}8*T^bb(82&-S~)?<34?k-vxF=KiQr`K*= z58k>BQ=f;fjn3(6{@EkRH^;kmt=k{-OMWvWM$AtejOh$TE{!kpahUTn`?sIwpsVqu zx44K}GBT(8s`D;VW4JJZyJ%oeAm%rwJh)B|;Lk{O={rqcLL@pB7+;n1yU^=%>78JQ z0Bxi;iOp!ILVFqCM~XW5+mAz3=rsL#bh9@OB7;|Po&E-Ta1)2|1&-hjdhs>-a3B5n zk^W~4;#VBSAM}6Y7_ork2t7rouAWgk-NbGaFX-$P6E8A^=R%r<)MFS=5fZ=i33kyn zJ%L8oOwC?GqN@EPYU=0i3Z)4L`?TJ;&|A;Dn(?mN2sVe}vmf=%Y2@`U2B|{tvS=cL zNNL3M&Ny{+MTnetB@+=eir{7V;)~ckr}<?tLS{#C0B3Q6ewa+2aZ_Zn`akJMb z(lF8}QZ~MO9C+P=p3x5qJW|_O6e+1UU8;za9+w*6?&RG}v@sgj1HyZbh ztcCxW@SiaEl?~wo>)}6Ta`%Stfeqkq5&m=TILI>h4kY&$-Z$~S+EQl=MV|H^|94ys z`3BbXN%kSUMk`YERjJ+5cpEiIzA4%~nOl0{JP7ZFyUX(V5*EH<8_v6MI((K+oF4aM GhyMepOuP30 literal 0 HcmV?d00001 diff --git a/bindings/Java/org/gnu/pilotlink/AddressAppInfo.java b/bindings/Java/org/gnu/pilotlink/AddressAppInfo.java new file mode 100644 index 0000000..d43853f --- /dev/null +++ b/bindings/Java/org/gnu/pilotlink/AddressAppInfo.java @@ -0,0 +1,169 @@ +/* + * Created on 15.02.2004 + * + * To change the template for this generated file go to + * Window>Preferences>Java>Code Generation>Code and Comments + */ +package org.gnu.pilotlink; + +/** + * @author stephan + * + * To change the template for this generated type comment go to + * Window>Preferences>Java>Code Generation>Code and Comments + */ +public class AddressAppInfo extends AppInfo { + private String labels[]; //19+3 + private boolean labelRenamed[]; + private String phoneLabels[]; //whatever + private int country=0; + private int sortByCompany=0; + /** + * + */ + public AddressAppInfo() { + super(); + + } + + /** + * @param ai + */ + public AddressAppInfo(AppInfo ai) { + super(ai); + + } + + /* (non-Javadoc) + * @see org.gnu.pilotlink.AppInfo#setBuffer(byte[]) + */ + public void setBuffer(byte[] b) { + labels=new String[22]; + labelRenamed=new boolean[22]; + phoneLabels=new String[8]; + + buffer=b; + super.parseCategories(); + long r=Record.getLongAt(buffer,dataOffset); + + for (int i=0; i<22;i++) { + + labelRenamed[i]=((r&(1<DtlCCY!)E*nmM{V}s%Vm*~3nU03MZ*>;K~ zq9zbOFEJ*5AjXA+82R9g`w;_;@q;G%9~l1#J{l9j=e}>5`+;eC?>*<9bKY~F=bZc7 zvmYw}I`Os#J{*xtw;PS<(eb9-kGgRT$6e_4pbz~XYEDS?NqHKO%b*7ePRY}0xtx&^ zhUDq2j&nK^0@_U0%%w{LzKP)*srOUyTq>W5C(FfbK66~al}k;Txr8)uOwin2nk{@V zHe1M>0z$g?X7kx{zd%cPxKPZ*Gx>%1d^T4o=d$^m@yq6Pp_o42J}#h~Dx~RCKb*~* z7Z>KH%;J^QRE`>FSYEqJW_fU7X2vWEsNso0sjE$vQ`0v`QuCIjmGF51J!6)W+1s|K z%!u*}PbJ(wG0043v;1Iqu$|YAT!B^4W=Pg4;14I-UskAxCc}2E(l;S}T}-O#))e09 zl#oe!XtUv`h7-0jSy(7en?qSyVBze%EBo$Qz(W~cIa3vrsJZ4QH&V~quoF=_85rB(K~TM<{T+4ER>0~jaar2A7e9> z*-~a|jxFW0YTc?Pt@F|-mzNCfgjyn9BZ;^Aa)8lyvq@ggq?R-Dner?{k{Y{HB%d;Z zRBS|OW`vzzvWS=6I84Chhjf~qr#sp>Hamw0D?)Y{ai4*8eoNgRB3f}R!T26pqrM8)awHN}y4K)cfhY0zq$@1=~ryAa}~A9B;Eb$X2oQ;`Vcj?MkMcQ z;^FgeBGJk!>LhFq3-uX`p+-XEgO{K+k-@!OTRAEbvd}}`PLsDww0?&-Hwow$_2c9C1zj*%)T|&VTdVtZi*5|kjO~*bR`xPO`>z>2< z-=s#+_JB>5#XN7=A*-mbJmSgj5RE&Sk&x4B+lo>8x~Toh>+W^-1!b|7CG3}bu=7`F z577{?1q-9e-n$OM@JHaWYotS>=ULQmadYai#ZMNmbV&T1TFlm|woa2erK)pUIMK$jEq|| z)W>=1XB(g3B%LI3gM7dG5hE9!7{VEx#dVy+91@tvd6aMgAMr{23?o>?MSR64?-9nZ zO#K>Pxe6aS$v_+Qf1nDntCpBQXAnt+AQwU*w8tb74*5{p;37mxj;brrfTwr#+uNzQ z##=t7RqK|jwHol&-`Q?DL8B=9!hQorm50eBtw{z97yMxTlnoeghF#5ky=NbDwMlSJ@Ds##fUPP6x-DOqu F#=i>Yp+f)w literal 0 HcmV?d00001 diff --git a/bindings/Java/org/gnu/pilotlink/AddressRecord.java b/bindings/Java/org/gnu/pilotlink/AddressRecord.java new file mode 100644 index 0000000..1c2099c --- /dev/null +++ b/bindings/Java/org/gnu/pilotlink/AddressRecord.java @@ -0,0 +1,118 @@ +package org.gnu.pilotlink; + +public class AddressRecord extends Record { + String fields[]; + int[] labelIds; + int showPhone; + + public AddressRecord(Record r) { + super(r); + } + + public AddressRecord() { + labelIds=new int[5]; + fields=new String[20]; + } + + public void setBuffer(byte buf[]) { + labelIds=new int[5]; + fields=new String[20]; + if (buf.length<5) { + System.out.println("Wrong sized buffer for address..."); + return; + } + showPhone=hi(buf[1]); + + labelIds[4]=lo(buf[1]); + labelIds[3]=hi(buf[2]); + labelIds[2]=lo(buf[2]); + labelIds[1]=hi(buf[3]); + labelIds[0]=lo(buf[3]); + + long contents=buf[4]*256*256*256+buf[5]*256*256+buf[6]*256+buf[7]; + int len=buf.length-9; + int offset=9; + + for (int i=0; i<19; i++) { + if ((contents & (1<>4; + } + private int lo(byte b) { + return (b&0x0f); + } + + public String getField(int idx) { + return fields[idx]; + } + public int getLabelId(int idx) { + if (idx>5) { + return 0; + } + return labelIds[idx]; + } + + public void setField(String cont,int idx) { + if (idx>19) { + return; + } + fields[idx]=cont; + setSize(getBuffer().length); + } + public void setLabelId(int id, int idx) { + if (idx>5) { + return; + } + labelIds[idx]=id; + setSize(getBuffer().length); + } +} diff --git a/bindings/Java/org/gnu/pilotlink/AppInfo.class b/bindings/Java/org/gnu/pilotlink/AppInfo.class new file mode 100644 index 0000000000000000000000000000000000000000..b3b0df9b95658fd3560c1d11dd41d8e85b1479a2 GIT binary patch literal 2570 zcma)7-EUK682`OJrypz2T-SZD(XxpH?aE-dDWC&n9bbiRz&1X%A?&m}?GALOrE3l0 zf^b3Nl^VPw(U>emVq&5uY!IDXV&awY-ao;AfK2iCzNfIc&BQc$-jC;bpO4?~c}{=* z`^TpM`cMj@11J4R)nOY>NpV_=v=qY{@ZyEsjRYyqNO4vk&q*;Vk7GfM6)RsX z+t$25(^UGJ`H|UMFr9qwSfy+``2hjLo*yzRqn2aNS$yxAniL4|*-)|SR0KqdUS`aS zc_x>ew|Jpv>S3pB?! zPh+fDEoZIcw#3z_VYo+fZJ-Cc1;XojH?SRV80f+d13U4ifw!dS#Ont3VZVX5(Ptno z@4AsN@BxnaVHwCFZ(x_ap2d&>8`lh6M?nCrYkiDl)h^6fWdn0?q$nCViep6f^cwmE zBX;3{fHz*YoNj^k|7?nXm2oC>&B_wZwvFbaR<>AXb4t$BMJF#o_bJfXtiFQf zWM|E?RLMRVlHFF#%&VCYAd{Oh#7AbSWI6P`JH83k8?I^yaL8iup^ePFRO{P0!yWvL z1fWX}xYH#+Y9&Q#B}-~0QEDYQY9&8vB`aL(Ndy_E+{4o)en7|#;)%x)iE#L5cov~? zv#c*dPiTwqO5saH{L6tw1b(2cKrdwn{FL>~!%OKy3(s4bUngE;t2C%6d)Gwq{GTYh zmQc5Z;QARAF7=CU)Cg!F&i1}mqg+b0$P8gz^vTq{nLvGCH%{wMHs3y z?O-$rQO~U&)yG|( z9@WP03i0s8*NH|!G<}TXU%(C;8Okj;z9)F?taR%0)2UCH|Dn>A%Kk+(tSTiK9tHU* zzv)05p>9WvU~fm1!xzJTHpeNRE^0qsysg1$HA-YkI!7xTW@5*iOnzb+ZE>23GM?|KO3ZwjFY zQl(LZNa?M6S%FV%T|tohK4Qea<42G&g#0wsy1bJ#$-eV5CD#9~ zQp-{C(Eu2se2<~s!P^0iKMu4qj;Z9`!IJ;!z&Vc7C~XIrmiuC@dm{Ngjob&W`|~^< zVr{PR@tXVg9^xAgKR~EQ3x}5w8D=~!+B3EaRzxv-33Zr2Bc=$}WmUWe(a1}F*lRxL zYCiWxnuenZw!j|O`2uz(B;B1qp?TslT6o*ai_e#^WeIJ=in`x>WWH`2xAKbtT&1^Z z2Fs9<83xR$pmp%9K=Wfzemat*#w}+XSBasQ*?ZRmYg5I)jhg9awJg(-_H?b)lC{M6 zb!m-kmDv%4SRXgcFP&i5Mek$FS|eU5ooc?PyH;~|zj_i0huu}=kd-)0HyGdH2v$@L U_0ax;mot<8 literal 0 HcmV?d00001 diff --git a/bindings/Java/org/gnu/pilotlink/AppInfo.java b/bindings/Java/org/gnu/pilotlink/AppInfo.java new file mode 100644 index 0000000..a5c05f1 --- /dev/null +++ b/bindings/Java/org/gnu/pilotlink/AppInfo.java @@ -0,0 +1,118 @@ +package org.gnu.pilotlink; + +public abstract class AppInfo { + protected byte buffer[]; + protected String categories[]=new String[16]; + protected boolean isCatRenamed[]=new boolean[16]; + protected int catCount=0; + protected int dataOffset=0; + protected int bits; + protected long id[]; + protected int lastUniqueID; + + public AppInfo() { + buffer=new byte[65535]; + } + + public AppInfo(AppInfo ai) { + setBuffer(ai.getBuffer()); + } + + public abstract void setBuffer(byte[] b); + + public void parseCategories(){ + bits=buffer[0]*256+buffer[1]; + id=new long[4]; + catCount=0; + for (int i=0; i<16; i++) { + if (buffer[2+i*16]!=0) { + categories[i]=getStringAt(buffer,2+i*16); + //=new String(buffer,2+i*16,16); + + //System.out.println("Got Category: \""+categories[i]+"\""); + catCount++; + } else { + categories[i]=null; + } + if ( (bits&(1<>256); + buffer[1]=(byte) (bits&256); + } + + + public abstract byte[] getBuffer() ; + public boolean isCatRenamed(int idx) { + return isCatRenamed[idx]; + } + public void setCatRenamed(int idx,boolean b) { + isCatRenamed[idx]=b; + } + + public String getCatName(int idx) { + return categories[idx]; + } + public void setCatName(int idx,String n){ + if (n.length()>16) { + n=n.substring(0,16); + } + categories[idx]=n; + } + + public static String getStringAt(byte buffer[], int idx) { + String str=""; + while (idx+E%oPcu|Lu%d~_}piP)GW#j>T1>e92 z@B*0886UtW@hKetl`?|p4C(Y=J8SQ?_qW#C?T=qyzXN!L4GqJXQ!%fh19Nc<;faa` z4YBsiqIi}>mPMY5tca|NJQH~?k{2n66gA2Vku{N*F&@Jw@>BMFrJ|%_T|v~f8n%MI zjXmqoGV7LGGs}VRxV0q(TGh9$z%KHupr^f}6*zTMJTl+#cAVX#_PkcHs{5^j_DeK4 zI$(@aQlN&Lc)o&8E_YiE1+m?_Rcms(%;`hhZ#te!ujB669~8tJPP4jpwjxi$hUasy z&Sl4Sf)xdkbY_d*g119&YQu5u%~qpg`|qquou0|`zp0eMr(7=Q^AekC+Cf255@!zbK=c~oa8-!AuX-!wfw5R=Ey;bV!q_=dO0baj%nOujV>2a#|TChBt!q7(&-q( zxQ^>06C#tC(s4uNrpPVa)^SJVu1Fdg9a)hFc&PKLP#%j+>@IgD}Gc?|V@*mXXPXSqrfNr>no z-6Bbmlt_8Kh5S4OQ@rF5xrc0%&MLXe0#D z(Er1jCSwM1b~wp%`&q1E7Ha}I@|yIp>HN&I?@!tG0%piNOFHql%bJ5qN{~wGIQnq_ xhI5KRR`a|b@~;9cpqH5|a)+*p?YbPh!q`~Gft(Ln$J literal 0 HcmV?d00001 diff --git a/bindings/Java/org/gnu/pilotlink/DBInfo.java b/bindings/Java/org/gnu/pilotlink/DBInfo.java new file mode 100644 index 0000000..8144812 --- /dev/null +++ b/bindings/Java/org/gnu/pilotlink/DBInfo.java @@ -0,0 +1,70 @@ +package org.gnu.pilotlink; +import java.util.Date; + +public class DBInfo +{ + public String name; + public Date createDate; + public Date modifyDate; + public Date backupDate; + public int type; + public int creator; + public int modnum; + public short flags; + public short version; + public short index; + public byte miscFlags; + public byte more; + + // No-argument constructor + public DBInfo() + { + name = new String(); + createDate = new Date(); + modifyDate = new Date(); + backupDate = new Date(); + type = 0; + creator = 0; + modnum = 0; + flags = 0; + version = 0; + index = 0; + miscFlags = 0; + more = 0; + } + + // Complete-specification constructor (used in native code) + public DBInfo(String n_name, int n_create_sec_epoch, int n_modify_sec_epoch, + int n_backup_sec_epoch, int n_type, int n_creator, int n_modnum, + short n_flags, short n_version, short n_index, byte n_miscFlags, byte n_more) + { + name = n_name; + setCreationDate(n_create_sec_epoch); + setModifyDate(n_modify_sec_epoch); + setBackupDate(n_backup_sec_epoch); + type = n_type; + creator = n_creator; + modnum = n_modnum; + flags = n_flags; + version = n_version; + index = n_index; + miscFlags = n_miscFlags; + more = n_more; + } + + public void setCreationDate(int sec_epoch) + { + createDate = new Date(sec_epoch * 1000L); + } + + public void setModifyDate(int sec_epoch) + { + modifyDate = new Date(sec_epoch * 1000L); + } + + public void setBackupDate(int sec_epoch) + { + backupDate = new Date(sec_epoch * 1000L); + } +} + diff --git a/bindings/Java/org/gnu/pilotlink/DatabaseExistsException.class b/bindings/Java/org/gnu/pilotlink/DatabaseExistsException.class new file mode 100644 index 0000000000000000000000000000000000000000..abd0422fd0de62a30e14d92ad7bf6de34808117f GIT binary patch literal 344 zcmZ{fK~DlP5QX0?xT`A&7jIrL9sm=Yc-3%GI1xeu@!rK|Q(0TG+co?xPb3`t0sbiC zj4>WGHtFkh^1aUM`^Wwbz%{xlnrMl%6PzUI5aL_wY#0$5{lNpFdFLMup)9E-sF^{+WOt8vHF;5pSLZLc&##Pm<1X2YTg# jaLAf|VF_F0#+knHbMDIn@$hno=r=Fv+f1fRL^%EgT+2um literal 0 HcmV?d00001 diff --git a/bindings/Java/org/gnu/pilotlink/DatabaseExistsException.java b/bindings/Java/org/gnu/pilotlink/DatabaseExistsException.java new file mode 100644 index 0000000..2ff4451 --- /dev/null +++ b/bindings/Java/org/gnu/pilotlink/DatabaseExistsException.java @@ -0,0 +1,15 @@ +package org.gnu.pilotlink; + +public class DatabaseExistsException extends PilotLinkException +{ + DatabaseExistsException() + { + super(); + } + + DatabaseExistsException(String s) + { + super(s); + } +} + diff --git a/bindings/Java/org/gnu/pilotlink/DatabaseNotFoundException.class b/bindings/Java/org/gnu/pilotlink/DatabaseNotFoundException.class new file mode 100644 index 0000000000000000000000000000000000000000..87dc71eb60414ae35d54c158ba94674e767c477b GIT binary patch literal 348 zcmZ{fK~DlP5QX0?xGO7&7q2D|4+x1(ylS|hoCqO-c<(~9sjMwoyT-reiG+hcfFEU? zF~)<2CVibwzSnu(f9^g2+~6!l9Ziu|g3|u-A{l*fu$cKBN3nyMFJs_R!EU5x@ZN9tekcnnFKp>Z2p7) zU;z@e5(_?nk3yWWO`+}P&bfEyJg)ug_m7_dp1?6-;HH5~=qPl{BwADLxH5B zik?7inRs!s=f9J3CLl%v`ime8l9vKyd*r<3u^k;rfyQnS$~WnUiHr}t$()mQdpC-w zgK3x!7QsA9=0P|cyjmp+>W?0AWsMA57;eE8n`=vlC^VZlUAp{9kqs=cS$`wBgPEzrFf z`ka+Ci;*LXJE69~8T9h%!=`I=E0tXEMkYLh}Ol2$T-W+Bio z1Zr;o1f@*jAGwYa$!%27qyD-_I~2fWLjk5P8}?l)96&p7AgF8zCS-5{-%d8^oK z>;%sWY1(H3ek)eB8{n{BJKeBX1k}$hW@he>nC&s&U&kt|lHOu2rLyWCL#KRIB~vz^ Z4pjGrSGif9?Preferences>Java>Code Generation>Code and Comments + */ +package org.gnu.pilotlink; + +/** + * @author stephan + * + * To change the template for this generated type comment go to + * Window>Preferences>Java>Code Generation>Code and Comments + */ +public class DatebookAppInfo extends AppInfo { + private int startOfWeek=0; + + public DatebookAppInfo(int startofweek) { + startOfWeek=startofweek; + } + /** + * @param ai + */ + public DatebookAppInfo(AppInfo ai) { + super(ai); + // TODO Auto-generated constructor stub + } + + /* (non-Javadoc) + * @see org.gnu.pilotlink.AppInfo#setBuffer(byte[]) + */ + public void setBuffer(byte[] b) { + parseCategories(); + startOfWeek=b[dataOffset]; + } + + /** + * @return Returns the startOfWeek. + */ + public int getStartOfWeek() { + return startOfWeek; + } + + /** + * @param startOfWeek The startOfWeek to set. + */ + public void setStartOfWeek(int startOfWeek) { + this.startOfWeek= startOfWeek; + } + /* (non-Javadoc) + * @see org.gnu.pilotlink.AppInfo#getBuffer() + */ + public byte[] getBuffer() { + createDefaultBuffer(); + buffer[dataOffset]=(byte)startOfWeek; + return buffer; + } + +} diff --git a/bindings/Java/org/gnu/pilotlink/DatebookRecord.class b/bindings/Java/org/gnu/pilotlink/DatebookRecord.class new file mode 100644 index 0000000000000000000000000000000000000000..e54d5465596a82a372ef6e14a566b4625ee94725 GIT binary patch literal 6778 zcma)A3v`sl75-+Q$!3#m5&{XE7g$2r2%&&TLC^pJBO%x%fFUYbk|ivJ-MHBx_&~Jy zC|VW8N7N#MHohN70t#Y%lq%Z#s9LS9ty(>{+INqwHa7k4{JY7|W^+!@VeibH`R<)N zcfR}2gya8x`Y3>D_;o5K<1P_D6tP>x-6HmgxJSfZ7p7pJ6&M&0^-54(_seIgza@u=V*6Y;n>dcukQF63cf3Z4|J10s4w^ockq;*f}^L_96x zu-F|D@rsO<)E|nj@V9pbxJ6hLQU$fJvazO729!d!3@lw%+i+%0=jIRas}au`8qqxOQ2sMmQK-?XuMz5($!0=YnL}v)hnbK z`kBj?*HLpB8dn}t#1*4u{E_HFe>9-rsafyew%&7MCT)np`)ha(HqltzZ`FqyCl+OZ^>s z2~F4iPQ1kGQ79~{2}jy0+Cp6w9l`c+v^^NwP*E3X2}fGzh%KX~Qs^uY)ikaoq37H)g zcVON!4~977#AHF^WHj?UhH5^H90oT$h)e@$;t#jYl1(+nHNhlM`Zj2nZYYC<6bG6n zgCl~_BXRy37IeiFN{Ywcm@XtIVPS>iO8UO zLMC%#OPLcXuABrKsZ3!nM*PfpcW`sIvT8x6$0uTY6rHOM!X)&;lnHI9=v<0N_D%VY z?ZJFhqsoSzR6HMsA10Fg(7pd2C7ns9i7LE|a%opNI(&T(Uvh(-}j zBF+_Yo`~~BtigIWDlpZJ4brQ^A~zO`sK!}tEWueU8aH0XB?{i5kKf`*pe-B;`a=u+ z?SW9MKjOx5T)jWZ>tdNjE4CVt_@TX@@zckoL$-o<-v{0i^8@qJvQP%^x-PfU$M-f)PK zHPTAQYGMe#P26Bxbe+Ky<6CGYuZ4-#QZGWE`rt)81F0NYtCEws{76(MDSass!H6Tl zjTT%oU>bqOT_LbBCU>Ujc#R0f;){y2#6lk=t$9^(Hw>teQUcYXsI2KULL=wXWQ+RV zlJUGjV{;_T1;+7ZFol=xIQ~c}%6xpAZy<%~>{~E{`Y9%TCiPQI`Yh_-G3m3Z&oSwz zQJ-tl=TSf1q@O{(GC`kj(q+8`CSBrLXwqjfMizjMl{KJS@=mub2i>wFbV~;7mL%3K zd8}JfS+``fZb@j}lGC~+g>_4M>y{;|TNbEpS*^Ndt?HKLs#{j9ZdtT!%bC-aSWVeX zt&pu^Yxf<1dYByrKczztolPxF=c!tFb`7wNvq zy~yz8+j^0iZ#xE0zO4_QZlXD&CLcrQdPK0=O8lEXYGa8=jcU&^a_0*c8jE2ETY61 zWN)0$<2+((v|1Y)ZT#8!bMWWnFNHr3m0pY&xDsI%VG&^yVHe>L;T(#)7CDS2#OT93 zr3lZg6Qj|^*f;S@cOm27%zC_t-@A+Xb-RS;b18Ybm8WtUcess~m($`3qQ1wO?c7^C zHX3`ia9zoYx=FHDZk=w~gOkc_(&&9!eC5tVI7za~(sq-YJ)9s5Wx{$0-;$Yfr(O5b z%RP?ia|=9YY>iRXTHq;(_iY89lz87!;PJ%!s=yiV+C3@rxQex#j3_Uh&U|mTDx+5* zy#ugyW3w?(wB2g)WhoH1j=yGGv!wn2#$~7O;qfyJgIAt zjUD9ewJ5=LJoD>$<~LwAZsaYpiw~w-Se>`>;c`1`vzxVfC(G_Gp7m}-aW}T$9x`Gt z8E_xH_0al$T0B7XgPeVcGmlVv6p!OEJW2T?_VX3>B;H0ZKEOeIh(q`cPvLVsjlbeB z{*5C_;i$^O^J)}cP+q*Kitv(}fR|MTj;m>SMV*dU)e^Q1cwIH&4b_S_RR`Wu7vgQT z4ezMy@UGg4_w*NJ60*zl`r%P&X=$#06sl<{{TQ$M`6v6=aPwb3MzdGs^^&}N;~5m@ zheAGIP;XjKV-78MU9@a52S|yn$#gug6^CatBs^nq{ z3B67FBp>@Fx=%8&pQ8IbM)p0r&*OF$ICai2}Z4HwZi+9qf)H+WS zRv12(gX42;)4Sm+B!@R|n@7s_418jWt0W!*cREAX6Gx>-^{928q)liqjwF)O!fA}8 zj3vWhdImn`5HsP4&1P_}T++Zy#m6%BnDG7%AtJ9sb+9=4*QkLtrn_uwM=EGI-(j?mI|nBwNB-zPBlth&US~&Q#)0@ z+O53mK2@Oh(^H=+R?pJgakj6klXMwOMQ%T4sQiAU>q?k1CB5_;{)dwq^A+r#evDxa z6zAl81BVkG?2l$0T)=B#_*2X+2{b*$)I@5XNulY9P#>Yuq|gb8(8+{$@h%!3Kt>{T zDnS<}g=Qu~XArvi{|n$$Lbvb&93DVvqSx63UCcXjIJ6|;)u!eWbZJs(aU%2#LboP` z79~O#5PDfsXkj9B5uw|XLcNL5YCJw5fX7)pBI06*RkQ(6~Bg%*&9Ei1K5`TQ=F7bhQ4MpF=N=NL8!o>0DC& zJY5=m_+`-T)w~Fe@W;p8I(%NfWQLwhE{Rk%(}|x*{#~97Z+c=G_*UWrMD9o)_5>Za zwGSsJc}g2$ucL<`!(Pv@+ZpyobJ*AN&Njkc5evISvXMcz`o&`JVOIF`vnO${->xc5 z_Z@V90kRa|fT|0{YLi~V21}NW-hYsMjm-EODz=6iagEJfV++@~h-+NJHMVk%%T8G1 z`sC@fCZ_)idJ>-9!1sxM{b#<$V!<2z`4Cyno- t@vXe%60=Q~m5ykrN9<7@X~Gds(C)rO5pvu-yvfDrymHNeCnrjU^hxuZ1pkrEHtB^@)4{Otdv> z{A=Pf8RLB0CM0d!WcHjr^UXJB&e=czzW)NSfm{@WSQJL=z|g>O{-h(DoB>4j>&oGCkvOwF!T-HPp8W?oz8)p{u_>yfhM z<{K9mR-JNs>NKxlpy-StDEQJav^d)GxG z>{i=bQxGjy8})PRz!v+X2PgT>{pz*5Z@O)-s}hEWVcZoM6-a7`V@SoehKJbE@Cc7J zJV92&E}kk#cE^`**p-rO6B_pLOv5~86fE?n)6-nRSTC#XOMy=!i+4BUQB^Fb?7sJo z>PQl7oLzgz$nEiT`X&}*V(mblyKKs!dviNVQ7y*oZ;43~`wNE5TFr7w3Re1^K#zDQ zqAcckO9y$UxjhM)qcF!zpE$zV9G?slL8Arbvqwx2qoe}~1d#OTqaFGZg8Xycn3$YO z1X}QQ*Ua(@nD=U=Qd-PYOVmO}x&?nXU#Ffy<{0jE_%6E&e>;BoGh8sfAn+T(^oh^{#|}1m$HuuD zf$uNwsF;x6lbGr_Scczo5Hr#u8)lDg+c`#*Cw&?-ogyi2CrLMAL-A~cyqAZ>SugCa tMEXd-q~%xS^HvjupP?I(PX0jTT?^6SSQA=153PxT?q)@j7fAQv{(k~-=eGa= literal 0 HcmV?d00001 diff --git a/bindings/Java/org/gnu/pilotlink/FTB3CostCatRecord.java b/bindings/Java/org/gnu/pilotlink/FTB3CostCatRecord.java new file mode 100644 index 0000000..424d236 --- /dev/null +++ b/bindings/Java/org/gnu/pilotlink/FTB3CostCatRecord.java @@ -0,0 +1,85 @@ +/* + * Created on 15.02.2004 + * + * To change the template for this generated file go to + * Window>Preferences>Java>Code Generation>Code and Comments + */ +package org.gnu.pilotlink; + +/** + * @author stephan + * + * To change the template for this generated type comment go to + * Window>Preferences>Java>Code Generation>Code and Comments + */ +public class FTB3CostCatRecord extends Record { + private String name; + /** + * + */ + public FTB3CostCatRecord() { + super(); + // TODO Auto-generated constructor stub + } + + /** + * @param i + * @param att + * @param cat + * @param sz + */ + public FTB3CostCatRecord(int i, int att, int cat, int sz) { + super(i, att, cat, sz); + // TODO Auto-generated constructor stub + } + + /** + * @param r + */ + public FTB3CostCatRecord(Record r) { + super(r); + // TODO Auto-generated constructor stub + } + + /* (non-Javadoc) + * @see org.gnu.pilotlink.Record#getBuffer() + */ + public byte[] getBuffer() { + byte buf[]=new byte[0x48]; + if (name==null) { + return buf; + } + if (name.length()>0x40) { + name=name.substring(0,0x40); + } + setStringAt(buf,name,0x08); + return buf; + } + + /* (non-Javadoc) + * @see org.gnu.pilotlink.Record#setBuffer(byte[]) + */ + public void setBuffer(byte[] buf) { + + name=getStringAt(buf,0x08); + + } + + /** + * @return Returns the name. + */ + public String getName() { + return name; + } + + /** + * @param name The name to set. + */ + public void setName(String name) { + this.name= name; + } + + public String toString(){ + return ""+name; + } +} diff --git a/bindings/Java/org/gnu/pilotlink/FTB3TripRecord.class b/bindings/Java/org/gnu/pilotlink/FTB3TripRecord.class new file mode 100644 index 0000000000000000000000000000000000000000..74ebb726a583de846e35ad846e60825e78ba01e4 GIT binary patch literal 4888 zcmaJ^Yjjjs75>g-GIx?($juP)Xc7#N!emAWP1;(4mXd^MV!)I{pin78G6_SHnRFh| z2ijKA`hxmsZ9%9NYiTW5YMVd-QR}nR7gm>#Up{_V|JZ-l)7I4IY>bUXBO{!u9);3qd}w;1 zcrcRe?xbBT)saZ06^c@sapJh-9nM6@6#OzcdwhX{X9o}Q4r;V#huE%-#bfE)Xd7(a z!mW`zAqM>j?$^kD|RM^tJCRUF*W-n>P7{DQ)K+ON;` zP$1Ym*NO9KKMS=W=myDU{5-6~_7We+xBF@5EO>)G0`X}GeIu78!lx0O^I95U2ta#G z5cHWL2)#f^r<_qvNaw5^sLWn^cBYimbT)9IbMIW79666iZpaDtJX+??>N}M=0Q;t8G?(q{L%M{6mP|WuaJx+8z)d>u3A+#tTw;OrCo;*w zXcvn{VL{hGd)q)VHesjdN-13voA6-~n?>}Scpq*t@qPTj#QQ~CjWs5Ih}TT4743Fe zTaR`VKf;eqbc%K>ZZok?#0C*v_<)I@;HM@&C|b9O9(>3|FE*O!5R0GT=O$jqWfO1U z7bbp*Uzzwdeq&+)A5nlpwY#gdXJTVRQbNUp%(O-mSMXaCk02%5n4*>QmB~=v3)2lgcWVM@5{EP zqa+=1J&UJ?H9fagb~krROJxnP6-t~1T0IS&>5_J;ny=dUOL4qRvEyZAq+U zz0+RT`INnYoZ9U)j@;U^D=U}3N|0IT%oXfTmZkUUXA9GM<%--neTdJw(F4zuSe#*9+~zWmockZX_S4OE#}BXM{(#Z z)Js$p?w~B?^?>E@qM0kKNlJk)LoxqzKU7!Wu+V!J9=A;^N^qmL>33|F@GLpa7Yd(6 zksH67=dC4@1!v>c2z=m|4E`SQUi9~dL$9FN3Z8>+tEh&xC#(9cfK_!4C9+&_Z?SH#H}>puxN7Tfu=?sPzbssL(4$UX`@>082(nJ! zNf^Rs_)L#>_;yrLZ>KXlnIjue$L_V9@oQu6TF2J4kuluL#x+Fk9!Bq8hT}noSKLhv2*7t0Lk6~*SJA5ei?C-N-MtNWI!-_8IQ{LA zaj|R?H5`md)P}h&7h_o-!KV3b?tcSrJ=BPJRxOVrq37gq2rS1@6*#O0dZH!V@ENdgF#c?<~@_Bq{c{4tD?q8 zP^)%=p<@xw#$r()=e70W=~y&wwu2E0Uz);V$woT>J5f!27zRc#A2HNmFP2~wE7_-4 zW1Jz0)71$?*sezzf&)m>@o7APeK>~wc$OhKgZpqE_w!fk0rvU>_#5@N@DTpR_Af!W z3BGr5uYv8?gx0_g#zV&KsxRN-RjiUoF+z9YqjsFoz|pQ(CcUJOU9Ud9_z2}r2HdXI zoVsIl+;w-DsrD$5yZ9m--#|}fkG4*`j((h5yD{iMTUek{qU9kv-U@}Luq5kE`#$sa z_AzoCr#GLX*$|?Raqbgp+)sFhpkaoYIV1qxd7Je3-8cnmv#=5z1VNprqX%$e##h1$ipTvyePhH2zrL_f)vvqv{F$ zc>ecP6y#Y-o+k2KPh)D!<`p9z!dF1oxQ+eYPaK~pG zp`XqlpFlyLyUDYQJmN9_sX=MSXU1=pt^(p$l)`877iwieo;Z0Dbxzmd8ek@HPd#kK*JLXk?NRAtbl_G3uhr+-RI;JJz>1D{*ROMafo>cJQO2bOG_ A&j0`b literal 0 HcmV?d00001 diff --git a/bindings/Java/org/gnu/pilotlink/FTB3TripRecord.java b/bindings/Java/org/gnu/pilotlink/FTB3TripRecord.java new file mode 100644 index 0000000..e3e6892 --- /dev/null +++ b/bindings/Java/org/gnu/pilotlink/FTB3TripRecord.java @@ -0,0 +1,380 @@ +/* + * Created on 15.02.2004 + * + * To change the template for this generated file go to + * Window>Preferences>Java>Code Generation>Code and Comments + */ +package org.gnu.pilotlink; + +import java.util.Date; + +/** + * @author stephan + * + * To change the template for this generated type comment go to + * Window>Preferences>Java>Code Generation>Code and Comments + */ +public class FTB3TripRecord extends Record { + private String startLocation; + private String destLocation; + private Date startTime; + private Date arrivalTime; + private boolean priv; + private boolean storno; + private String note; + private long startMileage; + private long endMileage; + private long carID; + + private boolean isCost; + private double sum; + private double fuel; + private double fuelCost; + private long[] cat; + private double[] cost; + /** + * + */ + public FTB3TripRecord() { + super(); + + } + + /** + * @param i + * @param att + * @param cat + * @param sz + */ + public FTB3TripRecord(int i, int att, int cat, int sz) { + super(i, att, cat, sz); + + } + + /** + * @param r + */ + public FTB3TripRecord(Record r) { + super(r); + + } + + /* (non-Javadoc) + * @see org.gnu.pilotlink.Record#getBuffer() + */ + public byte[] getBuffer() { + byte buffer[]=new byte[65535]; + + Record.setStringAt(buffer,startLocation,0x28); + Record.setStringAt(buffer,destLocation,0x68); + Record.setDateTimeAt(buffer,startTime,0x12,0x16); + Record.setDateTimeAt(buffer,arrivalTime,0x14,0x18); + Record.setStringAt(buffer,note,0xa8); + Record.setLongAt(buffer,startMileage*10,0x1a); + + Record.setLongAt(buffer,carID,0x0a); + if (!priv) buffer[0x101]=1; + if (storno) buffer[0x102]=1; + + if (isCost) { + Record.setLongAt(buffer,0,0x1e); + //Cost + isCost=true; + Record.setDoubleAt(buffer,sum,0x28); + Record.setDoubleAt(buffer,fuel,0x30); + Record.setDoubleAt(buffer,fuelCost,0x38); + for (int i=0; i<4; i++) { + Record.setLongAt(buffer,cat[i],0x40+i*4); + setDoubleAt(buffer,cost[i],0x50+i*8); + } + + } else { + Record.setLongAt(buffer,endMileage*10,0x1e); + } + + return buffer; + } + + /* (non-Javadoc) + * @see org.gnu.pilotlink.Record#setBuffer(byte[]) + */ + public void setBuffer(byte[] buf) { + this.cat=new long[4]; + cost=new double[4]; + + startLocation=Record.getStringAt(buf,0x28); + destLocation=Record.getStringAt(buf,0x68); + startTime=Record.getDateTimeAt(buf,0x12,0x16); + arrivalTime=Record.getDateTimeAt(buf,0x14,0x18); + note=Record.getStringAt(buf,0xa8); + startMileage=Record.getLongAt(buf,0x1a)/10; + endMileage=Record.getLongAt(buf,0x1e)/10; + carID=Record.getLongAt(buf,0x0a); + priv=(buf[0x101]==0); + storno=(buf[0x102]==1); + + if (endMileage==0) { + //Cost + isCost=true; + sum=Record.getDoubleAt(buf,0x28); + fuel=Record.getDoubleAt(buf,0x30); + fuelCost=Record.getDoubleAt(buf,0x38); + for (int i=0; i<4; i++) { + cat[i]=Record.getLongAt(buf,0x40+i*4); + cost[i]=getDoubleAt(buf,0x50+i*8); + } + + } + setSize(buf.length); + } + + /** + * @return Returns the arrivalTime. + */ + public Date getArrivalTime() { + return arrivalTime; + } + + /** + * @param arrivalTime The arrivalTime to set. + */ + public void setArrivalTime(Date arrivalTime) { + this.arrivalTime= arrivalTime; + } + + /** + * @return Returns the carID. + */ + public long getCarID() { + return carID; + } + + /** + * @param carID The carID to set. + */ + public void setCarID(long carID) { + this.carID= carID; + setSize(getBuffer().length); + } + + /** + * @return Returns the cat. + */ + public long[] getCat() { + return cat; + } + + /** + * @param cat The cat to set. + */ + public void setCat(long[] cat) { + this.cat= cat; + setSize(getBuffer().length); + } + + /** + * @return Returns the cost. + */ + public double[] getCost() { + return cost; + } + + /** + * @param cost The cost to set. + */ + public void setCost(double[] cost) { + this.cost= cost; + setSize(getBuffer().length); + } + + /** + * @return Returns the destLocation. + */ + public String getDestLocation() { + return destLocation; + } + + /** + * @param destLocation The destLocation to set. + */ + public void setDestLocation(String destLocation) { + this.destLocation= destLocation; + setSize(getBuffer().length); + } + + /** + * @return Returns the endMileage. + */ + public long getEndMileage() { + return endMileage; + } + + /** + * @param endMileage The endMileage to set. + */ + public void setEndMileage(long endMileage) { + this.endMileage= endMileage; + setSize(getBuffer().length); + } + + /** + * @return Returns the fuel. + */ + public double getFuel() { + return fuel; + } + + /** + * @param fuel The fuel to set. + */ + public void setFuel(double fuel) { + this.fuel= fuel; + setSize(getBuffer().length); + } + + /** + * @return Returns the fuelCost. + */ + public double getFuelCost() { + return fuelCost; + } + + /** + * @param fuelCost The fuelCost to set. + */ + public void setFuelCost(float fuelCost) { + this.fuelCost= fuelCost; + setSize(getBuffer().length); + } + + /** + * @return Returns the isCost. + */ + public boolean isCost() { + return isCost; + } + + /** + * @param isCost The isCost to set. + */ + public void setCost(boolean isCost) { + this.isCost= isCost; + setSize(getBuffer().length); + } + + /** + * @return Returns the note. + */ + public String getNote() { + return note; + } + + /** + * @param note The note to set. + */ + public void setNote(String note) { + this.note= note; + setSize(getBuffer().length); + } + + /** + * @return Returns the priv. + */ + public boolean isPriv() { + return priv; + } + + /** + * @param priv The priv to set. + */ + public void setPriv(boolean priv) { + this.priv= priv; + setSize(getBuffer().length); + } + + /** + * @return Returns the startLocation. + */ + public String getStartLocation() { + return startLocation; + } + + /** + * @param startLocation The startLocation to set. + */ + public void setStartLocation(String startLocation) { + this.startLocation= startLocation; + setSize(getBuffer().length); + } + + /** + * @return Returns the startMileage. + */ + public long getStartMileage() { + return startMileage; + } + + /** + * @param startMileage The startMileage to set. + */ + public void setStartMileage(long startMileage) { + this.startMileage= startMileage; + setSize(getBuffer().length); + } + + /** + * @return Returns the startTime. + */ + public Date getStartTime() { + return startTime; + } + + /** + * @param startTime The startTime to set. + */ + public void setStartTime(Date startTime) { + this.startTime= startTime; + setSize(getBuffer().length); + } + + /** + * @return Returns the storno. + */ + public boolean isStorno() { + return storno; + } + + /** + * @param storno The storno to set. + */ + public void setStorno(boolean storno) { + this.storno= storno; + setSize(getBuffer().length); + } + + /** + * @return Returns the sum. + */ + public double getSum() { + return sum; + } + + /** + * @param sum The sum to set. + */ + public void setSum(double sum) { + this.sum= sum; + setSize(getBuffer().length); + } + + public String toString() { + String out=""; + if (isCost) { + out="cost "+getSum(); + } else { + out="trip "+getStartLocation()+" ("+getStartMileage()+"km) ->"+getDestLocation()+"("+getEndMileage()+")"; + } + return out; + } + +} diff --git a/bindings/Java/org/gnu/pilotlink/FTB3VehicleRecord.class b/bindings/Java/org/gnu/pilotlink/FTB3VehicleRecord.class new file mode 100644 index 0000000000000000000000000000000000000000..846a7692cb34e815d93bcd9c62877628e3270154 GIT binary patch literal 1670 zcmZ`&Yg5xe6g??zlGX?nd8wcge59#R72haIsc5w#Qbxz&iv?ndmZa9y8U0l{qs39j zAK;I2JU1yawzZwP_h$F(Irp*q>-V>x04`!Jg;C6kxg_Rt5+k^hqPZ&3H8I!a^M;r? z`MfF7Eiv;NZl`b%vpVjGU(k`)v8baUUw6eUX}G81zJj<{*>MyMmR?ofRdTh8SIw1! zhU-=5WX}({m#Eh&;t%ZjUa(zzzv#aW6etA+>P^>kgLwsgR^}=3i~bgI10~mUmYX{p zPGhaIQR9kc75Nj$gjMnz)m+tU=IU5Hl%e%D@p+$ z9%IG8DV$a?+Bt`O)2(euJCbdw8>WFLSXB@+Ee zh1W!_)a#D7rC_?(^tzI0_lQ?^+$wYn?``8GAIB)4R~#{!3Zs~eBlMh2=s6F11B#51 z*5ubodWAk=??U;+K;aUQ;&G5DP7;An(wba3g9QKFw~via499m7>pU}sBuJEU*+x@oNcqOx7l-cR#^2fh%+K7BW9Skz9RXB^<{;fYnq+?*}{SS zw2wli;5=J&8$(!NbMmmTh#3?pVIk8NnxKz5%L4XuRKvvwv^KJ|CdqQ`4h`5@Nyl!% z_*b)^NrO)#fmQUQ%wy+z>S&!h&k3FGt)u-{=LK~t)Y;(SnVvdor_MH^x!yYJe|3E7 z)T#4^hxw{$r5R<`Dt(*#j)Tv4(LXrQLRu~X-Qb}pRwW*cVol=1QJiXFsD;e*A JAY}{}{{XQ^C&B;# literal 0 HcmV?d00001 diff --git a/bindings/Java/org/gnu/pilotlink/FTB3VehicleRecord.java b/bindings/Java/org/gnu/pilotlink/FTB3VehicleRecord.java new file mode 100644 index 0000000..274010f --- /dev/null +++ b/bindings/Java/org/gnu/pilotlink/FTB3VehicleRecord.java @@ -0,0 +1,119 @@ +/* + * Created on 15.02.2004 + * + * To change the template for this generated file go to + * Window>Preferences>Java>Code Generation>Code and Comments + */ +package org.gnu.pilotlink; + +/** + * @author stephan + * + * To change the template for this generated type comment go to + * Window>Preferences>Java>Code Generation>Code and Comments + */ +public class FTB3VehicleRecord extends Record { + private String name; + private String note; + private String plate; + private double monthlyCost; + /** + * + */ + public FTB3VehicleRecord() { + super(); + + } + + /** + * @param i + * @param att + * @param cat + * @param sz + */ + public FTB3VehicleRecord(int i, int att, int cat, int sz) { + super(i, att, cat, sz); + + } + + /** + * @param r + */ + public FTB3VehicleRecord(Record r) { + super(r); + + } + + /* (non-Javadoc) + * @see org.gnu.pilotlink.Record#getBuffer() + */ + public byte[] getBuffer() { + byte buf[]=new byte[0x70]; + setStringAt(buf,name,0x08); + setStringAt(buf,plate,0x18); + setStringAt(buf,note,0x30); + return buf; + } + + /* (non-Javadoc) + * @see org.gnu.pilotlink.Record#setBuffer(byte[]) + */ + public void setBuffer(byte[] buf) { + name=getStringAt(buf,0x08); + plate=getStringAt(buf,0x18); + //TODO: parse monthly cost as float at 0x28 + monthlyCost=getDoubleAt(buf,0x28); + note=getStringAt(buf,0x30); + setSize(buf.length); + } + + /** + * @return Returns the name. + */ + public String getName() { + return name; + } + + /** + * @param name The name to set. + */ + public void setName(String name) { + this.name= name; + setSize(getBuffer().length); + } + + /** + * @return Returns the note. + */ + public String getNote() { + return note; + } + + /** + * @param note The note to set. + */ + public void setNote(String note) { + this.note= note; + setSize(getBuffer().length); + } + + /** + * @return Returns the plate. + */ + public String getPlate() { + return plate; + } + + /** + * @param plate The plate to set. + */ + public void setPlate(String plate) { + this.plate= plate; + setSize(getBuffer().length); + } + + public String toString() { + return "Vehicle: "+name+" ("+plate+") - "+note+ " Cost: "+monthlyCost; + } + +} diff --git a/bindings/Java/org/gnu/pilotlink/MemoRecord.class b/bindings/Java/org/gnu/pilotlink/MemoRecord.class new file mode 100644 index 0000000000000000000000000000000000000000..20e45d4406c97681ad2be61a85544af4fc732513 GIT binary patch literal 1015 zcmZuvZEw<07(EvXh0+1yRCKV7>1HWzo$n?yeqf2o6#XEJ$+9o9aaXIQC0#M86L{dp}?|H zkEc+=`7|L*QFCy1CIf+#aoptcER|396r+CJ6wuoKAUKuJ9UfbFMWP~pJFH7b36~jm z1g^~sZ4Ml_D+3)Cb{X#KWNukU5tnq_#{(S?@kpRJU&sAcbUa2?pc1!dMnRw)KaSW5 zBn=jn?)3Z8>k4cyGAw4$gfd-G#n_MgH#^RResr5O!j+yKz8_CKhzxE!U&$=RIA97H z_Vi0A&rzetQlKX$=uajPrYR-|372WLfdu_%*KCX+zEeaOO{k4`b4WoS=U<)Vzo56s z`CH})3G)KUqY;$G5UJ!4=^@mg$e892WQNENq0Rc0pitEkVIDV#(I&B>`$Kusw@P2; znBwAZ6ht(bEQqeabxbMjPAC-322Z2mS>@e-!}62?l98gC0u2!~a)pouzocCj(3q0H qK<kBn3Y`lsp)?i|tT2?5I8uNTcktq%gYOu7h2t@&<3pWW#6I((;#l(dhH~xU1 zpc}W&SQf-JzTug4(s#du; zPk>cW;9aoFR&7avOOM?nez{U0zH`+on``yGZL_+S+b(g(Uo>m!`p%A7B}k76cl%~7 zm*36g_HBrUP6gUyv$kd{_UNsWBA}7SL3Hb}R)|B9u^aH{57Nh1oE<;ukBf-ttCeao zSuEF+`&Ow^D_P~;HH*j!Mh zd#+UJo^wDN=j?|f=5XxczZB1D5yHj+6vKV!`v}ztyFSAGmb(giQVO4mr1;X*Yz3N{e(8~Vk_ZuZ6yR5^2(lT zDPjX(p*t}U$;vu1v-RAiy#Dnq@rJCbU4y~;fg$#Gfy%=iqZq>oVi?6NSJyF)yPVgd zvpNu`{zOXAa8CJdmpg#LM!9L*93X1M*`{Hud$O#NrHj6_kacH2!Pm5)gLi-gJeZ*P zB$*;O-{6aI77IOcS1NW~^V*wJ9EVt~iH%pM0pRKpG@jVOGiy1`6t@|C4o&oZ;P zMPrtk#%+FBckC1bP=7FiMg;uG8a_mss!9g05kEknX*2QM&9KxpDvX}IQn6Zo-f-J{ Qc$;{~V|mMCJXJCN8~dR1-T(jq literal 0 HcmV?d00001 diff --git a/bindings/Java/org/gnu/pilotlink/MidiRecord.java b/bindings/Java/org/gnu/pilotlink/MidiRecord.java new file mode 100644 index 0000000..17d34bd --- /dev/null +++ b/bindings/Java/org/gnu/pilotlink/MidiRecord.java @@ -0,0 +1,81 @@ +/* + * Created on 16.03.2004 + * + * To change the template for this generated file go to + * Window>Preferences>Java>Code Generation>Code and Comments + */ +package org.gnu.pilotlink; + + +/** + * @author stephan + * + * To change the template for this generated type comment go to + * Window>Preferences>Java>Code Generation>Code and Comments + */ +public class MidiRecord extends Record { + private byte midi[]; + private String name; + + private static String id="PMrc"; + + public MidiRecord() { + midi=new byte[1]; //avoid nullpointer exception + name=""; + } + /* (non-Javadoc) + * @see org.gnu.pilotlink.Record#getBuffer() + */ + public byte[] getBuffer() { + // TODO Auto-generated method stub + int offset=name.length()+1+6; + byte buf[]=new byte[offset+midi.length]; + setStringAt(buf,id,0); + buf[4]=(byte)offset; + buf[5]=0; + setStringAt(buf,name,6); + for (int i=0; ic z`<`>|{rkrs-2iX^AGIQh^#oFQq!nMq*JAj30%1H7$2Vkrv=xux@i@LILlHj`@naFsi};C%pNjaIh!;e>DB>j% zFN^rOh+l|!MZ_;fyc)-A3Htha48Mxu*9xMSG&5h&6)0H+ZAN+AGEF^K(enyglBow3 zgvYHsm$yzCrhaB^bx|*!(-y^G%WOrJV+GAz8k?<@ z40GvdYF6O{_a@M?PDcF@vO9;q zfne1c?TV{H^u&Z-Ea^GTrri#rW&9in1jh|z{%ap zYRi?9QPCT@39zu4ktFEj9?eHsTaH$&Da%|^5J@hKrzRD|b7a1vPh=Dv35coL-{zSV z)9C2`X-o2Hy)&7eY{s3GrJmp=$1a}N3%cWccObU}h+0M6l<*uLdGPKLMw1H}d-pg~ z!2N9JLC@$ptCSzN*31g4li5X(h-3-Jj@o)=J!|Ims|r{J!3ku;F!?0If;F@&&R$gN za3XPj6PxXUdrr!UMrm(T(Pk%tqhjwHaL_KGG?qJQcM}ap({2Nv(Ooxgg-MH8u3(kz zWD#QMoJ|bJm~OH$m^r(v$-J$|jv?%`=jGQ7ve{|VSGLwlIlV@pb1pNwGwtvdxKP&B(J%44t^l}x$NUOLD%Q0M2@dkdU;5L7g&#W1Ryk1hUFH1y2 zD;QyD2{oEA%sl7I{qrh*k3Yolri!=lHcP#KQ4sovRJ?~ z-dFJf4yZVcyH$J!M^)U1`&Eo%Ld8jZR>kKq8N-H(Dn3;4c}%G|jW4K}!K{jNBIa;j z#RWX5VgX-L@esbELPJi)MO;#0U`fS_h=Pb!Q88huD9X>vU`(;)qETjRRq-brP|(}l z!)lDNTI$qHFD~;sRj}QjGOV%ebnO~cu=^%34QdT|yxr`SYO&Uc+U0a5!k*0r0SKEUHR zffk#mL5|{K!uGJYifwfV9g0WlSjbQlbdk00Lp+I7oRM?$B9hWhKjJ|muu%vUdqvg_ zZLh}@+HJ3&gG1FljO<9=8=|n&c>D-SyK(&}GcBUrV}JU_y{(y+!;!8?UpW6dx(Cu- zkwZ^Do*C$fuV+bOIsQVSQ>Fy4vyQ3}PD!L`Fos?_m zhF}m0BJIF*JzN`m+QmLa>;(1p*07^B?6`v+O?St;!d;O7^mDYGBl`I|I>|hZv)n^c z`IAg!+islU_YBkBDX^wvzO5dElQ@eWEOvh%*165GcKWdl4;C*GAJ!b^UBCA5u!KRD zGfS>7oxV}U?S8n+9yne{KDY~bATUhUM~@%tst1d=nh$FMUv#mCNUXT#bc5c$Dti5; z@u&xkx1$g2A$*xLQf5iUDa}cB3b((CzVrTqd5X#TG*6ZnEHxG0v5T%Nhh0~;JJusr z?0RLB7W>>MEq2>+Z+7s;_Ia0w9vrIR`+0l59x7ojV#zffAxF}Y+`y{1qvcpVFsD3T zVEVtv;9ja@FigH4d=42{c2W0ml-s1$4!DXt>yS=!d6l*Lng@>W5FgwM;T-n&yKwC; zT>o&3=i+eOyhhA7u!ZllkUVJYGbn88(tzKkw`u;4$0a_98eJkRUq`+fK9zhkd^h=K z_=swp;rA-aE>q1}I_S^Rzto+gsfmhfy3d>7JoO=eOn+tT`J2bQxG5pK{l@= 0; + } + + public PilotLink(String port) throws IOException, PilotLinkException { + System.out.println("Initialising Pilot-Link-Java-Bindings V"+Version.VERSION+" build #"+Version.BUILD); + handle = connect(port); + } + + private int handle; + + private native/* synchronized */int connect(String port) + throws IOException, PilotLinkException; + + public SysInfo getSysInfo() throws PilotLinkException { + // System.out.println("Getting Sysinfo..."); + SysInfo si = readSysInfo(handle); + return si; + } + + private native/* synchronized */SysInfo readSysInfo(int handle) + throws PilotLinkException; + + public User getUserInfo() throws PilotLinkException { + User u = readUserInfo(handle); + return u; + } + + private native/* synchronized */User readUserInfo(int handle) + throws PilotLinkException; + /** + * @deprecated + */ + public RawAppInfo getAppInfo(int db) throws PilotLinkException { + return readAppInfo(handle, db); + } + + private native/* synchronized */RawAppInfo readAppInfo(int h, int db) + throws PilotLinkException; + + public RawAppInfo getAppInfoBlock(String dbname) { + return getAppInfoBlock(handle,dbname); + } + private native RawAppInfo getAppInfoBlock(int h, String dbnmae); + + public void writeUserInfo(User u) throws PilotLinkException { + writeUserInfo(handle, u); + } + + private native/* synchronized */void writeUserInfo(int h, User u) + throws PilotLinkException; + + private long toLong(char[] charArray) { + int length = charArray.length; + long result = 0; + for (int i = 0; i < length - 1; i++) { + result |= charArray[i]; + result <<= 8; + } + result |= charArray[length - 1]; + return result; + } + + public int createDB(String dbn, String creator, String type) + throws PilotLinkException { + // System.out.println("Creating new database..."); + long longCreator = toLong(creator.toCharArray()); + long longType = toLong(type.toCharArray()); + + return createDB(handle, longCreator, dbn, longType, 0, 1); + } + + public int createDB(String dbn, String creator, String type, int flags, + int version) throws PilotLinkException { + long longCreator = toLong(creator.toCharArray()); + long longType = toLong(type.toCharArray()); + + return createDB(handle, longCreator, dbn, longType, flags, version); + } + + private native/* synchronized */int createDB(int handle, long creator, + String dbname, long type) throws PilotLinkException; + + private native int createDB(int handle, long creator, String dbname, + long type, int flags, int version) throws PilotLinkException; + + public int deleteDB(String dbn) throws PilotLinkException { + // System.out.println("Deleting database " + dbn); + return deleteDB(handle, dbn); + } + + private native/* synchronized */int deleteDB(int handle, String dbname) + throws PilotLinkException; + + public int openDB(String dbn) throws PilotLinkException { + return openDB(handle, dbn); + } + + private native/* synchronized */int openDB(int handle, String dbname) + throws PilotLinkException; + + public int writeAppBlock(byte[] data, int dbhandle) + throws PilotLinkException { + return writeAppBlock(handle, dbhandle, data, data.length); + } + + private native/* synchronized */int writeAppBlock(int handle, + int dbhandle, byte[] data, int length) throws PilotLinkException; + + public int getRecordCount(int dbhandle) throws PilotLinkException { + return getRecordCount(handle, dbhandle); + } + + private native/* synchronized */int getRecordCount(int handle, int dbhandle) + throws PilotLinkException; + + public Record getRecordByIndex(int dbh, int idx) throws PilotLinkException { + return getRecordByIndex(handle, dbh, idx); + } + + private native/* synchronized */RawRecord getRecordByIndex(int handle, + int dbhandle, int idx) throws PilotLinkException; + + public void deleteRecordById(int dbhandle, long id) { + deleteRecordById(handle, dbhandle, id); + } + + private native/* synchronized */int deleteRecordById(int handle, + int dbhandle, long id); + + public boolean writeRecord(int dbh, Record r) throws PilotLinkException { + return writeRecord(handle, dbh, r) > 0; + } + + private native/* synchronized */int writeRecord(int handle, int dbhandle, + Record r) throws PilotLinkException; + + public int writeNewRecord(int dbhandle, Record r) throws PilotLinkException { + return writeRecord(handle, dbhandle, r); + } + + public void closeDB(int dbh) throws PilotLinkException { + closeDB(handle, dbh); + dbh = 0; + } + + private native/* synchronized */void closeDB(int handle, int dbhandle) + throws PilotLinkException; + + public void endSync() throws PilotLinkException { + endSync(handle); + } + + private native/* synchronized */void endSync(int handle) + throws PilotLinkException; + + public void close() { + close(handle); + handle = 0; + } + + private native/* synchronized */void close(int handle); + + public void openConduit() throws PilotLinkException { + openConduit(handle); + } + + private native/* synchronized */void openConduit(int handle) + throws PilotLinkException; + + private native/* synchronized */RawRecord getResourceByIndex(int handle, + int dbhandle, int idx) throws PilotLinkException; + + private native/* synchronized */void writeResource(int handle, + int dbhandle, RawRecord r) throws PilotLinkException; + + private native/* synchronized */void resetSystem(int handle) + throws PilotLinkException; + + private native/* synchronized */DBInfo readDBList(int handle, int cardno, + int flags, int start) throws PilotLinkException; + + public RawRecord getResourceByIndex(int dbhandle, int idx) + throws PilotLinkException { + return getResourceByIndex(handle, dbhandle, idx); + } + + public void writeResource(int dbhandle, RawRecord r) + throws PilotLinkException { + writeResource(handle, dbhandle, r); + } + + public void resetSystem() throws PilotLinkException { + resetSystem(handle); + } + + public DBInfo readDBList(int cardno, int flags, int start) + throws PilotLinkException { + return readDBList(handle, cardno, flags, start); + } +} diff --git a/bindings/Java/org/gnu/pilotlink/PilotLinkException.class b/bindings/Java/org/gnu/pilotlink/PilotLinkException.class new file mode 100644 index 0000000000000000000000000000000000000000..49ef3d8be77fb14bd1246caa5265137a9a58de7b GIT binary patch literal 317 zcmZXOPfNo<5XIl5HL>YGL8Rx1hctow%;qYsN@Mep7{b)mSR$}`B{2~Nmd7oporRCt6@#i-)Z{B?V_WR>k00X$9qXT&j`x8i^Uz!8b z6m*({GCHIqf`J5zIIQ7_4juV8j!J(lj^omw&@qUU8cu0AEfAY-&du3%fym^rfIegS zcEzhZc0-_Za`d)!*D6#kw^Atkb;qro6i7IY8@6lB+p{v~ra+uIBVN<>1w@GjPdTpR zpAm>=CWo`*0_uo2YYQYt9oN3roS(MqW7c$)Cy9#f4~N~=Ojh`W-YPFI( z=N*tU8|Vf{FxSp+pbMJ}Y{nJ?Td~c+4)hr4#73Dgq~WZAbKo4C*Cq}(o$9QVIeE$R z`$$--{9v$er-2cir*aG~;G%|01}=m2dc1n2P;r}unp5@ss^i`%tZ)?Ay8d&>Ux4#b zc8&6vN-|nK#e;@#&lBP`xvs93R*qM=&gJ@Cv2D$B#WAZ^vt91DKeJxV^#X^pF){9Y zt$QM{F|!^>L}wt(za7c7Ci_=ixxxQ*9H-1F-g`jhL$zrkHxYO)Bk4ZSdk z=tW;xIZZE!jOIQ-d%K)2+XG2j-V9nv;yX)7;xBUf1!#Gtm=d^^SBq1p0|LsKv}wM= z!+ezf)>QE&O021*KOr&^o|)zn;^p^9e1bl)gtiW25$yqJfI-IwnnffRVdf@2AgWGr ztk=*3fGGE<>HCjf26#2Cj;HV!yCOh@TjbrD8u=M_?Crhbr`jtI$YG?JmAy qLQCF#3EPKE2wuI4=-Rpm3Cac|=Kcaeb_Y`c literal 0 HcmV?d00001 diff --git a/bindings/Java/org/gnu/pilotlink/RawAppInfo.java b/bindings/Java/org/gnu/pilotlink/RawAppInfo.java new file mode 100644 index 0000000..0b23440 --- /dev/null +++ b/bindings/Java/org/gnu/pilotlink/RawAppInfo.java @@ -0,0 +1,50 @@ +package org.gnu.pilotlink; + + +public class RawAppInfo extends AppInfo { + byte buffer[]; + String categories[]=new String[16]; + boolean isRenamed[]=new boolean[16]; + int catCount=0; + + public RawAppInfo(byte b[]) { + setBuffer(b); + } + + public byte[] getBuffer() { + return buffer; + } + + public void setBuffer(byte b[]) { + buffer=b; + int bits=b[0]*256+b[1]; + + catCount=0; + for (int i=0; i<16; i++) { + if (b[2+i*16]!=0) { + categories[i]=new String(b,2+i*16,16); + System.out.println("Got Category: \""+categories[i]+"\""); + catCount++; + } else { + categories[i]=null; + } + if ( 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 9; + year += 1904; + int month = binary & 0x01e0; + month = month >> 5; + month--; + int day = binary & 0x001f; + //System.out.println("Y: "+year+" M:"+month+" D: "+day); + GregorianCalendar cal = new GregorianCalendar(year, month, day); + return cal.getTime(); + } + + + /** + * Sets the dateAt attribute of the Record class + * + *@param buffer The new dateAt value + *@param d The new dateAt value + *@param idx The new dateAt value + */ + public static void setDateAt(byte buffer[], Date d, int idx) { + GregorianCalendar cal = new GregorianCalendar(); + //System.out.println("Setting date "+d+" at: "+idx); + cal.setTime(d); + int binary = 0; + int year = cal.get(GregorianCalendar.YEAR); + int month = cal.get(GregorianCalendar.MONTH); + int day = cal.get(GregorianCalendar.DAY_OF_MONTH); + year -= 1904; + year = year << 9; + month++; + month = month << 5; + + binary = year | month | day; + + buffer[idx + 1] = (byte) (binary & 0x00ff); + buffer[idx] = (byte) ((binary & 0xff00) >> 8); + } + + + /** + * Sets the dateTimeAt attribute of the Record class + * + *@param buffer The new dateTimeAt value + *@param d The new dateTimeAt value + *@param idx The new dateTimeAt value + *@param tidx The new dateTimeAt value + */ + public static void setDateTimeAt(byte buffer[], Date d, int idx, int tidx) { + setDateAt(buffer, d, idx); + GregorianCalendar cal = new GregorianCalendar(); + cal.setTime(d); + int h = cal.get(GregorianCalendar.HOUR_OF_DAY); + int m = cal.get(GregorianCalendar.MINUTE); + buffer[tidx] = (byte) h; + buffer[tidx + 1] = (byte) m; + } + + + /** + * Gets the dateTimeAt attribute of the Record object + * + *@param idx Description of the Parameter + *@param tidx Description of the Parameter + *@return The dateTimeAt value + */ + public Date getDateTimeAt(int idx, int tidx) { + return getDateTimeAt(getBuffer(), idx, tidx); + } + + + /** + * Gets the dateTimeAt attribute of the Record class + * + *@param buffer Description of the Parameter + *@param idx Description of the Parameter + *@param tidx Description of the Parameter + *@return The dateTimeAt value + */ + public static Date getDateTimeAt(byte buffer[], int idx, int tidx) { + int binary = (buffer[idx] & 0xff) * 256 + (buffer[idx + 1] & 0xff); + int year = binary & 0xfe00; + year = year >> 9; + year += 1904; + int month = binary & 0x01e0; + month = month >> 5; + month--; + int day = binary & 0x001f; + //System.out.println("Y: "+year+" M:"+month+" D: "+day); + int hour = buffer[tidx] & 0xff; + int min = buffer[tidx + 1] & 0xff; + GregorianCalendar cal = new GregorianCalendar(year, month, day, hour, min, 0); + return cal.getTime(); + } + + + /** + * Sets the stringAt attribute of the Record class + * + *@param buffer The new stringAt value + *@param s The new stringAt value + *@param idx The new stringAt value + *@return Description of the Return Value + */ + public static int setStringAt(byte buffer[], String s, int idx) { + if (s == null) { + return idx; + } + + byte str[]; + + str = s.getBytes(); + + for (int i = 0; i < str.length; i++) { + if (s.charAt(i) == '\ufffd') { + buffer[idx + i] = (byte) 252; + } else if (s.charAt(i) == '\ufffd') { + buffer[idx + i] = (byte) 246; + } else if (s.charAt(i) == '\ufffd') { + buffer[idx + i] = (byte) 228; + } else if (s.charAt(i) == '\ufffd') { + buffer[idx + i] = (byte) 223; + } else if (s.charAt(i) == '\ufffd') { + buffer[idx + i] = (byte) 196; + } else if (s.charAt(i) == '\ufffd') { + buffer[idx + i] = (byte) 220; + } else if (s.charAt(i) == '\ufffd') { + buffer[idx + i] = (byte) 214; + } else { + buffer[idx + i] = str[i]; + } + } + //System.out.println(); + buffer[idx + str.length] = 0; + return (idx + str.length + 1); + } + + + /** + * Gets the stringAt attribute of the Record object + * + *@param idx Description of the Parameter + *@return The stringAt value + */ + public String getStringAt(int idx) { + return getStringAt(getBuffer(), idx); + } + + + /** + * Gets the stringAt attribute of the Record class + * + *@param buffer Description of the Parameter + *@param idx Description of the Parameter + *@return The stringAt value + */ + public static String getStringAt(byte buffer[], int idx) { + String str = ""; + while (idx < buffer.length && buffer[idx] != 0) { + if (buffer[idx] + 256 == 252) { + str += "\ufffd"; + } else if (buffer[idx] + 256 == 246) { + str += "\ufffd"; + } else if (buffer[idx] + 256 == 228) { + str += "\ufffd"; + } else if (buffer[idx] + 256 == 223) { + str += "\ufffd"; + } else if (buffer[idx] + 256 == 196) { + str += "\ufffd"; + } else if (buffer[idx] + 256 == 220) { + str += "\ufffd"; + } else if (buffer[idx] + 256 == 214) { + str += "\ufffd"; + } else { + str += (char) buffer[idx]; + } + idx++; + } + + return str; + } + + + /** + * Sets the intAt attribute of the Record class + * + *@param buffer The new intAt value + *@param i The new intAt value + *@param idx The new intAt value + */ + public static void setIntAt(byte buffer[], int i, int idx) { + buffer[idx + 1] = (byte) (i & 0x00ff); + buffer[idx] = (byte) ((i & 0xff00) >> 8); + } + + + /** + * Gets the intAt attribute of the Record object + * + *@param idx Description of the Parameter + *@return The intAt value + */ + public int getIntAt(int idx) { + return getIntAt(getBuffer(), idx); + } + + + /** + * Gets the intAt attribute of the Record class + * + *@param buffer Description of the Parameter + *@param idx Description of the Parameter + *@return The intAt value + */ + public static int getIntAt(byte buffer[], int idx) { + + return ((buffer[idx] & 0xff) << 8) + (buffer[idx + 1] & 0xff); + } + + + /** + * Gets the doubleAt attribute of the Record class + * + *@param buffer Description of the Parameter + *@param idx Description of the Parameter + *@return The doubleAt value + */ + public static double getDoubleAt(byte buffer[], int idx) { + long l = getDoubleLongAt(buffer, idx); + return Double.longBitsToDouble(l); + } + + + /** + * Sets the doubleAt attribute of the Record class + * + *@param buffer The new doubleAt value + *@param v The new doubleAt value + *@param idx The new doubleAt value + */ + public static void setDoubleAt(byte buffer[], double v, int idx) { + long l = Double.doubleToLongBits(v); + setDoubleLongAt(buffer, l, idx); + } + + + /** + * Gets the doubleLongAt attribute of the Record class + * + *@param buffer Description of the Parameter + *@param idx Description of the Parameter + *@return The doubleLongAt value + */ + public static long getDoubleLongAt(byte buffer[], int idx) { + long value = 0; + //A clumsy hack, but quick + //could not think of a better version + //java makes is impossible to convert large bytes to chars wihtout + //losing information + + for (int octet = 0; octet < 8; octet++) { + for (int bit = 0; bit < 8; bit++) { + if ((buffer[octet + idx] & (1 << bit)) != 0) { + value |= (1L << (56 - octet * 8 + bit)); + + } + } + } + + return value; + } + + + /** + * Sets the doubleLongAt attribute of the Record class + * + *@param buffer The new doubleLongAt value + *@param v The new doubleLongAt value + *@param idx The new doubleLongAt value + */ + public static void setDoubleLongAt(byte buffer[], long v, int idx) { + buffer[idx + 0] = (byte) ((v & 0xff00000000000000L) >> 56); + buffer[idx + 1] = (byte) ((v & 0x00ff000000000000L) >> 48); + buffer[idx + 2] = (byte) ((v & 0x0000ff0000000000L) >> 40); + buffer[idx + 3] = (byte) ((v & 0x000000ff00000000L) >> 32); + buffer[idx + 4] = (byte) ((v & 0x00000000ff000000L) >> 24); + buffer[idx + 5] = (byte) ((v & 0x0000000000ff0000L) >> 16); + buffer[idx + 6] = (byte) ((v & 0x000000000000ff00L) >> 8); + buffer[idx + 7] = (byte) ((v & 0x00000000000000ffL)); + + } + + + /** + * Sets the longAt attribute of the Record class + * + *@param buffer The new longAt value + *@param v The new longAt value + *@param idx The new longAt value + */ + public static void setLongAt(byte buffer[], long v, int idx) { + buffer[idx + 0] = (byte) ((v & 0x00000000ff000000L) >> 24); + buffer[idx + 1] = (byte) ((v & 0x0000000000ff0000L) >> 16); + buffer[idx + 2] = (byte) ((v & 0x000000000000ff00L) >> 8); + buffer[idx + 3] = (byte) ((v & 0x00000000000000ffL)); + } + + + /** + * Gets the longAt attribute of the Record class + * + *@param buffer Description of the Parameter + *@param idx Description of the Parameter + *@return The longAt value + */ + public static long getLongAt(byte buffer[], int idx) { + long value = 0; + //A clumsy hack, but quick + //could not think of a better version + //java makes is impossible to convert large bytes to chars wihtout + //losing information + + for (int octet = 0; octet < 4; octet++) { + for (int bit = 0; bit < 8; bit++) { + if ((buffer[octet + idx] & (1 << bit)) != 0) { + value |= (1L << (24 - octet * 8 + bit)); + + } + } + } + + return value; + } +} + diff --git a/bindings/Java/org/gnu/pilotlink/SysInfo.class b/bindings/Java/org/gnu/pilotlink/SysInfo.class new file mode 100644 index 0000000000000000000000000000000000000000..8fc014e78561fabc735c96834e99c9e57294512b GIT binary patch literal 1131 zcmZvaU2oE06vzJ$FNJnRCQ@`SOwhT(vzIEn)Oa&vGQyl$4fh2qDV9E@1Eb#iaZEI^ zG4a9=;D<7vr|CAJ^x}Wo)8BLc=bZNMzu$iVv~Z$f4f`rIG^8}8a482;4y7DPIhJDP z@HB^K3|b(@T_?D5h0nm+42mcEw&&2zBoKqMR}7`j$o^=Xp6w4!YZ|!z@HsC)+2?iXqP!u8$hONQ-6(!Jfb=xR5+44G3g zAiUUdedo<=+;f6=c29P%4xQ=Scz|-FnJmIkAmn_`Gu>#?{03!DSM)rWUue51t0XfE ztC7ug;K3Y0-6m;B?QpCEByC~_nC#5XK zkWxW`VM7E%bLh{^iR+1}=lUPaxEjOy?H9c0jhz0Jfu`-EPQSt${XKc4qz~Ptq*WBj zEsA6qMe>Xy*+!9^qe$iyRWNGz0qF)k38bkWaKe9q@mh!!uVg}``9X*bHaYGG}=M^o4`h$)!Y?5+n4pcltEvYoTY^Y50Z<2A1R@9V6#q@u$#kG?N@=ka!)lt821EtfDVx!Z?ugG1jW$#_C@k5#HimNf z^g40HWJyDG*jYGn!pIZeXj^}05SJ)rCS|EV+TSUfs-1Jsgjw|D3i%;phbdsz_U5+b zT)!Q1+&Y${L&y90K*xvJq$7b9I^t+ou*hi#=XjIZtdU7&x8yU0VZ*YwpC2+xO;DG# z&Ze?vI#TWw9XqjF$4c?qhM0W5CnOofWgSLRV-HpZaZ|@F@%}MB(eWv6>-Y?J6f|pEw~RjM2{#l1`H1IBwO|v+S&4W$csB?_C(RjbS!Gu3#%@bUWY7CD^l;P1uaoFvl*C z8W}OHw1VX`&BhDkQUaQW^V#sP*luu=d_EkD;9*;KmUn=(p4=5%nA=>op6ja8;m$P4 zh`9$WYRyw>({GNX%%bWZlV}B~<;bMv%MltKVRekEqW27*GKTDRuc}J!fl5M6)4Wbk zNx{W`l14<};U8%*Fzmt--q`UL%*B{a9x zx>;oyC!k7F(OCg7J~9tVIheB|2@B&PL5w27E*ro;=Sp3b(+j7sRGs3e&7 z3Zk--#+@^wAF4)Qj%X{kl~R8WeeI=jRx{2T#u41NV@Jt&I{I359KoIUV@b7we*8Xa zs?py>_nRI4WJ!M^SGR%gL$6lvB#K+P&70j-SGp(>WG4gb*>RyK2)D>u#4O*y!1{3n z#uPx>cmKCeSoHo6_Txkm92Jx z(Cw3B>1-r3`Z^cUN&8T^bX2sL!d5T03UBRZOXjB3XGCaE&%Nb9ljkwDE zJ&v>b=J329&^ryQ*N9cz%etRkAz}hsIPRPJobT+?O!it!9}9|jy#%eeTrdGG7Wc2> zm=GF25xnv}nqr5^*Im6L(-ZS?UdN%vyjE-~l4MF(?t3d7=ZdLwWhr z*$>6yVI%Y&a=^}VS1n}uQlLPw$mN-HIK0^9eMKw@ cFLim12!)rqJX<(Sw5o^eE}ieCdk^;g4^ug45&!@I literal 0 HcmV?d00001 diff --git a/bindings/Java/org/gnu/pilotlink/ToDoRecord.java b/bindings/Java/org/gnu/pilotlink/ToDoRecord.java new file mode 100644 index 0000000..57b53dd --- /dev/null +++ b/bindings/Java/org/gnu/pilotlink/ToDoRecord.java @@ -0,0 +1,144 @@ +/* + * Created on 15.10.2004 + * + * TODO To change the template for this generated file go to + * Window - Preferences - Java - Code Style - Code Templates + */ +package org.gnu.pilotlink; + +import java.util.Date; + +/** + * @author stephan + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ +public class ToDoRecord extends Record { + private Date dueDate; + private byte priority; + private String description; + private boolean done; + private String note; + + public String getDescription() { + return description; + } + public void setDescription(String d) { + description=d; + setSize(getBuffer().length); + } + public boolean getDone() { + return done; + } + public void setDone(boolean d) { + done=d; + } + public int getPriority() { + return priority; + } + public void setPriority(int i) { + if (i>255) + throw new IllegalArgumentException("Invalid priority"); + priority=(byte)i; + } + + public void setNote(String n) { + note=n; + setSize(getBuffer().length); + } + public String getNote() { + return note; + } + + public void setDueDate(Date dd) { + dueDate=dd; + setSize(getBuffer().length); + } + public Date getDueDate() { + return dueDate; + } + + public ToDoRecord(Record r) { + super(r); + } + + public ToDoRecord() { + } + /* (non-Javadoc) + * @see org.gnu.pilotlink.Record#getBuffer() + */ + public byte[] getBuffer() { + int size=3; + if (note!=null) { + size+=note.length()+1; + } else { + size++; + } + if (description!=null) { + size+=description.length()+1; + } else { + size++; + } + byte buf[]=new byte[size]; + System.out.println("Size: "+size); + if (dueDate!=null) { + Record.setDateAt(buf,dueDate,0); + } else { + buf[0]=(byte)0xff; buf[1]=(byte)0xff; + } + buf[2]=priority; + if(done) { + buf[2]|=0x80; + } + int offset=3; + if (description!=null) { + offset=Record.setStringAt(buf,description,offset); + } else { + buf[offset++]=0; + } + if (note!=null) { + Record.setStringAt(buf,note,offset); + } else { + buf[offset++]=0; + } + return buf; + } + + /* (non-Javadoc) + * @see org.gnu.pilotlink.Record#setBuffer(byte[]) + */ + public void setBuffer(byte[] buf) { + + if (Record.getIntAt(buf,0) != 0xffff) { + //due-date set + System.out.println("\n\nReading in due-date..."+(buf[0]&0xff)+" "+(buf[1]&0xff)+" getInt "+Record.getIntAt(buf,0)+" "+Record.getDateAt(buf,0)); + + dueDate=Record.getDateAt(buf,0); + } + priority=buf[2]; + if ((priority & 0x80) > 0) { + //Completed + priority&=0x7f; + done=true; + } else { + done=false; + } + if (buf.length <= 3) { + return; + } + int pos=3; + description=Record.getStringAt(buf,3); + if (buf.length<=3+description.length()) { + return; + } + note=Record.getStringAt(buf,3+description.length()); + + setSize(buf.length); + } + + public String toString() { + return "P"+priority+": "+description+" Done: "+done+" due to: "+dueDate+" note: "+note; + } + +} diff --git a/bindings/Java/org/gnu/pilotlink/User.class b/bindings/Java/org/gnu/pilotlink/User.class new file mode 100644 index 0000000000000000000000000000000000000000..08530ab20383f6065704a330888b494a11f94728 GIT binary patch literal 1477 zcma)*{Z1265XH~!*S2L#vDQL?DizRnsVt%>3YsX!#HK+Kki@^pQr2d%-I8_-(RVV@ z#7d%x58#vd6vlIR+p60dZL)K}&dmJo%xqwk%FWSs-3F+RpA9ySlSQ(Wzygd1tA1r&=}J?N^<;Jbhv~j6C5*?l@LmmphEB z_WeCYWYe-O=b=EkFibJLQ!bbNA^q#(J}D|}kO%;m%gaX;VY(xn%{j*+C4jijt9ykKQLXqX1>mLuf4uoTr>=say7IT_)g@`1RJF zA0C@kuM)Cn1-Il9eUBwVp6@rwhpX@-i+sZp!X1g_jwEwOa=9a^+>wYJ#~?^FLp#gW z5rW(SO4>Puw$w#H%XbmfGD;UAt<*(W%Y?g#XxUg7ik6Lc5&b~DK#ukr|2Ke&5E7h? zyKHH4Wl3~}T#GE#5-DWH%e{PwP_Z!5Bl;JQ5Kk7QA+DK{0FWsPYiF5&!egcy<1(yH- literal 0 HcmV?d00001 diff --git a/bindings/Java/org/gnu/pilotlink/User.java b/bindings/Java/org/gnu/pilotlink/User.java new file mode 100644 index 0000000..3dfd5c1 --- /dev/null +++ b/bindings/Java/org/gnu/pilotlink/User.java @@ -0,0 +1,61 @@ +package org.gnu.pilotlink; +import java.util.Date; +public class User { + String name; + String password; + long userid; + long lastSyncPC; + long viewerid; + Date successfulSyncDate; + Date lastSyncDate; + public User(String username, String pw,long uid, long vid, + long lsp,Date lsd, Date ssd) { + name=username; + userid=uid; + lastSyncPC=lsp; + password=pw; + viewerid=vid; + lastSyncDate=lsd; + successfulSyncDate=ssd; + } + public User(String username, String pw, long uid, long vid, + long lsp, long sec_epoch_lsd, long sec_epoch_ssd) + { + name=username; + userid=uid; + lastSyncPC=lsp; + password=pw; + viewerid=vid; + lastSyncDate=new Date(sec_epoch_lsd * 1000L); + successfulSyncDate=new Date(sec_epoch_ssd * 1000L); + } + public Date getLastSyncDate() { + return lastSyncDate; + } + public Date getLastSuccessfulSyncDate() { + return successfulSyncDate; + } + public long getLastSyncDate_time_t() + { + return lastSyncDate.getTime() / 1000; + } + public long getLastSuccessfulSyncDate_time_t() + { + return successfulSyncDate.getTime() / 1000; + } + public String getPassword() { + return password; + } + public long getViewerId() { + return viewerid; + } + public String getName() { + return name; + } + public long getUserId() { + return userid; + } + public long getLastSyncPC() { + return lastSyncPC; + } +} diff --git a/bindings/Java/org/gnu/pilotlink/Version.class b/bindings/Java/org/gnu/pilotlink/Version.class new file mode 100644 index 0000000000000000000000000000000000000000..749df08e53efc6097461a731243d1561ea51d6a0 GIT binary patch literal 371 zcmYL_OH0E*5Xb+McVc|i`l#T+TlJ8%o&<{rUr-4x7|lJ2A#58HiHYA!dJsJL0sK(n zBosRfyEFft{msn&{C<4{IK!a@16>2VCUoqntg$JBCfe6=prc37gWCsxJe?3a-Yk3% z-7L&g*RM*ErxyhE>S^rV5a^zujYKZ0OM=`#2?)w{@thDgJ&`Aq`Xx%r$1uuRF-CE= z%(VQXF5~1*G`bxm<(nvSr>SFO9UIIXIK!cHZo`CSV+}T;SCpxn=C%7OvZ7+r++98- zY^_?HMzbWYaLmIPJeI@+X0T^Am{y^t2Dn9zj`$=#)zeSV2RjVoU28>|5!?T%eTFq= Zccca6E|dkd)eEb=RiN_XPvblZJAZhnJXHVy literal 0 HcmV?d00001 diff --git a/bindings/Java/org/gnu/pilotlink/Version.java b/bindings/Java/org/gnu/pilotlink/Version.java new file mode 100644 index 0000000..c1d2106 --- /dev/null +++ b/bindings/Java/org/gnu/pilotlink/Version.java @@ -0,0 +1,8 @@ + + package org.gnu.pilotlink; + public class Version { + public static String VERSION="0.11.8"; + public static long BUILD=1072; + + } + \ No newline at end of file diff --git a/bindings/Java/pilot-link.jar b/bindings/Java/pilot-link.jar new file mode 100644 index 0000000000000000000000000000000000000000..5b749cc7c0c1fa150ce66c01d49b69848c78e311 GIT binary patch literal 42963 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 AK>z>% literal 0 HcmV?d00001 diff --git a/bindings/Java/test.java b/bindings/Java/test.java new file mode 100644 index 0000000..728988c --- /dev/null +++ b/bindings/Java/test.java @@ -0,0 +1,256 @@ +import org.gnu.pilotlink.*; +import java.io.*; +import java.util.*; +import javax.swing.*; +import java.awt.*; +/** + * Description of the Class + * + *@author stephan + *@created 5. Dezember 2004 + */ +public class test { + /** + * Description of the Method + * + *@param args Description of the Parameter + */ + public static void main(String args[]) { + JFrame frame = new JFrame("Progress"); + frame.getContentPane().setLayout(new BorderLayout()); + JLabel txt = new JLabel("Reading in"); + frame.getContentPane().add(txt, BorderLayout.NORTH); + JProgressBar progress = new JProgressBar(0, 100); + frame.getContentPane().add(progress, BorderLayout.CENTER); + frame.setSize(300, 50); + frame.setVisible(true); + + Date yesterday = new Date(System.currentTimeMillis() - 3600000 * 24); + System.out.println("Date 2 check: " + yesterday); + String port; + if (args.length == 0) { + port = "/dev/usb/tts/1"; + } else { + port = args[0]; + } + File p = new File(port); + System.out.println("looking for file " + port); + if (!p.exists()) { + System.out.println("File does not exist... USB? Waiting for port to appear"); + + while (!p.exists()) { + System.out.print("."); + try { + Thread.sleep(1000); + } catch (Exception e) {} + } + } + //System.out.println("Systemzeit: "+Long.toHexString(System.currentTimeMillis()/1000)); + PilotLink pl = null; + try { + pl = new PilotLink(port); + if (!pl.isConnected()) { + System.out.println("Something went wrong. Check output!"); + System.exit(1); + } + } catch (Exception e) { + e.printStackTrace(); + System.exit(1); + } + try { + User u = pl.getUserInfo(); + System.out.println("User: " + u.getName()); + System.out.println("Last Synchronization Date: " + u.getLastSyncDate()); + } catch (PilotLinkException e) { + e.printStackTrace(); + } + + System.out.println("GEtting App..."); + pl.getAppInfoBlock("AddressDB"); + if (true) { + try { + pl.endSync(); + pl.close(); + System.exit(1); + } catch (Exception e) {} + } + try { + SysInfo si = pl.getSysInfo(); + System.out.println("Product ID: '" + si.getProdID() + "'"); + System.out.println("Rom Version: " + si.getRomVersion()); + } catch (PilotLinkException e) { + e.printStackTrace(); + } + try { + System.out.println("Opening catdb!"); + int dbh = pl.openDB("DatebookDB"); + System.out.println("db opened!"); + System.out.println("Count: " + pl.getRecordCount(dbh)); + progress.setMaximum(pl.getRecordCount(dbh)); + Vector ids = new Vector(); + + for (int i = 0; i < pl.getRecordCount(dbh); i++) { + Record r = pl.getRecordByIndex(dbh, i); + progress.setValue(i); + txt.setText("Reading in " + i); + if (r == null) { + break; + } + if (r.getBuffer() == null || r.getBuffer().length == 0) { + System.out.println("0-sized record? Deleting..."); + pl.deleteRecordById(dbh, r.getId()); + continue; + } + if (!r.isDirty()) { + //only new entries + continue; + } + DatebookRecord dbr = new DatebookRecord(r); + //System.out.println("comparing "+dbr.getStartDate()+ "to yesterday "+yesterday); + //if (dbr.getStartDate().before(yesterday) || dbr.getStartDate().after(new Date())) { + // continue; + //} + ids.add(new Integer(i)); + System.out.println("Read index " + i); + System.out.println(" id: " + dbr.getId()); + System.out.println("attr: " + Integer.toHexString(dbr.getAttribs())); + System.out.println(" dirty:" + dbr.isDirty()); + System.out.println(" arch :" + dbr.isArchived()); + System.out.println(" del :" + dbr.isDeleted()); + System.out.println("size: " + dbr.getSize()); + System.out.println("cat : " + dbr.getCategory()); + hexdump(dbr.getBuffer()); + hexdump(r.getBuffer()); + System.out.println("Has alarm : " + dbr.hasAlarm()); + System.out.println("Description: " + dbr.hasDescription()); + System.out.println("Note : " + dbr.hasNote()); + System.out.println("Reapeated : " + dbr.isRepeated()); + System.out.println("hasTime : " + dbr.hasTime()); + if (dbr.hasDescription()) { + System.out.println("Descr: " + dbr.getDescription()); + } + if (dbr.hasNote()) { + System.out.println("Note: " + dbr.getNote()); + } + System.out.println("Start: " + dbr.getStartDate()); + System.out.println("End: " + dbr.getEndDate()); + + } + //Doing this not to interfere with the reading of records + for (int i = 0; i < ids.size(); i++) { + System.out.println("updating..." + ids.get(i)); + Record r = pl.getRecordByIndex(dbh, ((Integer) ids.get(i)).intValue()); + r.setDirty(false); + hexdump(r.getBuffer()); + if (r.isDirty()) { + System.out.println("H\ufffd\ufffd\ufffd\ufffd?!"); + } + //pl.writeRecord(dbh,r); + } + + System.out.println("\n\n\nNew Datebookentry:\n"); + GregorianCalendar start = new GregorianCalendar(); + start.setTime(new Date()); + start.set(GregorianCalendar.SECOND, 0); + GregorianCalendar end = new GregorianCalendar(); + end.setTime(new Date(System.currentTimeMillis() + 15 * 60000)); + end.set(GregorianCalendar.SECOND, 0); + DatebookRecord dbr = new DatebookRecord(start.getTime(), end.getTime(), "Test of pilot-links new java bindings", ""); + //hexdump(dbr.getBuffer()); + //System.out.println("Size: "+dbr.getSize()); + + //pl.writeRecord(dbh,dbr); + pl.closeDB(dbh); + + } catch (PilotLinkException e) { + e.printStackTrace(); + } + + try { + System.out.println("\n\n------------------------------------\nNOW reading in Memos..."); + //Now reading MEMOS + int db2 = pl.openDB("MemoDB"); + if (db2 < 0) { + System.out.println("ERROR! " + db2); + System.exit(1); + } + for (int i = 0; i < pl.getRecordCount(db2); i++) { + Record r = pl.getRecordByIndex(db2, i); + MemoRecord mr = new MemoRecord(r); + System.out.println("Memo " + i + ": " + mr.getText()); + } + + MemoRecord newMemo = new MemoRecord("The new Java-Bindings work fine"); + pl.writeRecord(db2, newMemo); + + pl.closeDB(db2); + } catch (PilotLinkException e) { + e.printStackTrace(); + } + try { + System.out.println("Creating new database 'testDB2'..."); + int db3 = pl.createDB("testDB2", "RMSd", "Me"); + MemoRecord memo = new MemoRecord("new database"); + pl.writeRecord(db3, memo); + pl.closeDB(db3); + } catch (DatabaseExistsException e) { + try { + System.out.println("Database exists, deleting database 'testDB2'..."); + pl.deleteDB("testDB2"); + } catch (Exception f) { + f.printStackTrace(); + } + } catch (PilotLinkException e) { + e.printStackTrace(); + } + try { + pl.endSync(); + } catch (PilotLinkException e) { + e.printStackTrace(); + } + pl.close(); + //done + frame.dispose(); + System.exit(0); + } + + + /** + * Description of the Method + * + *@param arr Description of the Parameter + */ + public static void hexdump(byte[] arr) { + + for (int i = 0; i < arr.length; ) { + String chars = ""; + String l = "" + Integer.toHexString(i); + while (l.length() < 4) { + l = "0" + l; + } + System.out.print(l + ": "); + for (int j = 0; j < 16 && i < arr.length; j++, i++) { + + l = Integer.toHexString(arr[i]); + if (arr[i] < 0) { + l = l.substring(l.length() - 2); + } + while (l.length() < 2) { + l = "0" + l; + } + System.out.print(l + " "); + if ((arr[i] >= '0' && arr[i] <= 'z') || (arr[i] == ' ')) { + chars += (char) arr[i]; + } else if (arr[i] == (byte) '\ufffd') { + chars += "\ufffd"; + } else { + chars += "."; + } + + } + System.out.println(" " + chars); + } + } + +} + diff --git a/bindings/Makefile.am b/bindings/Makefile.am new file mode 100644 index 0000000..7e0422c --- /dev/null +++ b/bindings/Makefile.am @@ -0,0 +1,84 @@ +if WITH_JAVA +JAVA_DIR=Java +else +JAVA_DIR= +endif + +if WITH_TCL +TCL_DIR=Tcl +else +TCL_DIR= +endif + +SUBDIRS = $(JAVA_DIR) $(TCL_DIR) + +# +# Python Building +# +python-build: Python/setup.py + cd $(srcdir)/Python && $(PYTHON) setup.py build + +python-install: python-build + cd $(srcdir)/Python && $(PYTHON) setup.py install --root=$(DESTDIR) --prefix=$(prefix) + +python-clean: Python/setup.py + -cd $(srcdir)/Python && $(PYTHON) setup.py clean + -cd $(srcdir)/Python && rm -rf build + +if WITH_PYTHON +PYTHON_ALL = python-build +PYTHON_INSTALL = python-install +PYTHON_CLEAN = python-clean +else +PYTHON_ALL = +PYTHON_INSTALL = +PYTHON_MCLEAN = +PYTHON_CLEAN = +endif + +# +# Perl Building +# + +Perl/Makefile: Perl/Makefile.PL + cd Perl && $(PERL) Makefile.PL + +perl-build: Perl/Makefile + cd Perl && $(MAKE) PREFIX=$(DESTDIR)$(prefix) + +perl-install: + cd Perl && $(MAKE) install + +perl-uninstall: Perl/Makefile + cd Perl && $(MAKE) uninstall + +perl-clean: Perl/Makefile + cd Perl && $(MAKE) realclean && rm Makefile.PL + +if WITH_PERL +PERL_ALL = perl-build +PERL_INSTALL = perl-install +PERL_CLEAN = perl-clean +else +PERL_ALL = +PERL_INSTALL = +PERL_MCLEAN = +PERL_CLEAN = +endif + +all-local: $(PERL_ALL) $(PYTHON_ALL) + +install-exec-local: $(PYTHON_INSTALL) $(PERL_INSTALL) + +uninstall-local: $(PYTHON_INSTALL) $(PERL_UNINSTALL) + +clean-local: $(PERL_CLEAN) $(PYTHON_CLEAN) + +distclean-local: $(PERL_CLEAN) $(PYTHON_CLEAN) + +maintainer-clean-local: $(PERL_CLEAN) $(PYTHON_CLEAN) + +dist-hook: + rm -rf `find $(distdir) -name CVS` + +EXTRA_DIST = Python Java Perl diff --git a/bindings/Makefile.in b/bindings/Makefile.in new file mode 100644 index 0000000..9c90602 --- /dev/null +++ b/bindings/Makefile.in @@ -0,0 +1,700 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = bindings +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/bluez.m4 \ + $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \ + $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ + $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/python.m4 \ + $(top_srcdir)/m4/socklen.m4 $(top_srcdir)/m4/tcl.m4 \ + $(top_srcdir)/m4/threads.m4 \ + $(top_srcdir)/m4/vl_lib_readline.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h \ + $(top_builddir)/include/pi-md5.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = Java Tcl +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLUEZ_CFLAGS = @BLUEZ_CFLAGS@ +BLUEZ_LIBS = @BLUEZ_LIBS@ +CAT_ENTRY_END = @CAT_ENTRY_END@ +CAT_ENTRY_START = @CAT_ENTRY_START@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DOCBOOK_ROOT = @DOCBOOK_ROOT@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +F77 = @F77@ +FFLAGS = @FFLAGS@ +FGREP = @FGREP@ +GREP = @GREP@ +ICONV_CFLAGS = @ICONV_CFLAGS@ +ICONV_LIBS = @ICONV_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +JAR = @JAR@ +JAVA = @JAVA@ +JAVABASE = @JAVABASE@ +JAVAC = @JAVAC@ +JAVA_VERSION = @JAVA_VERSION@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PERL = @PERL@ +PIC_LIBS = @PIC_LIBS@ +PILOT_LINK_MAJOR = @PILOT_LINK_MAJOR@ +PILOT_LINK_MINOR = @PILOT_LINK_MINOR@ +PILOT_LINK_PATCH = @PILOT_LINK_PATCH@ +PILOT_LINK_VERS = @PILOT_LINK_VERS@ +PISOCK_AGE = @PISOCK_AGE@ +PISOCK_CURRENT = @PISOCK_CURRENT@ +PISOCK_REVISION = @PISOCK_REVISION@ +PISYNC_AGE = @PISYNC_AGE@ +PISYNC_CURRENT = @PISYNC_CURRENT@ +PISYNC_REVISION = @PISYNC_REVISION@ +PKG_CONFIG = @PKG_CONFIG@ +PNG_CFLAGS = @PNG_CFLAGS@ +PNG_LIBS = @PNG_LIBS@ +POPT_INCLUDES = @POPT_INCLUDES@ +POPT_LIBS = @POPT_LIBS@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +PYTHON = @PYTHON@ +PYTHON_CFLAGS = @PYTHON_CFLAGS@ +PYTHON_H = @PYTHON_H@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RL_LIBS = @RL_LIBS@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +TCLSH_PROG = @TCLSH_PROG@ +TCL_BIN_DIR = @TCL_BIN_DIR@ +TCL_DEFS = @TCL_DEFS@ +TCL_EXTRA_CFLAGS = @TCL_EXTRA_CFLAGS@ +TCL_INCLUDES = @TCL_INCLUDES@ +TCL_LD_FLAGS = @TCL_LD_FLAGS@ +TCL_LIBS = @TCL_LIBS@ +TCL_LIB_FILE = @TCL_LIB_FILE@ +TCL_LIB_FLAG = @TCL_LIB_FLAG@ +TCL_LIB_SPEC = @TCL_LIB_SPEC@ +TCL_SHLIB_LD_LIBS = @TCL_SHLIB_LD_LIBS@ +TCL_SRC_DIR = @TCL_SRC_DIR@ +TCL_STUB_LIB_FILE = @TCL_STUB_LIB_FILE@ +TCL_STUB_LIB_FLAG = @TCL_STUB_LIB_FLAG@ +TCL_STUB_LIB_SPEC = @TCL_STUB_LIB_SPEC@ +TCL_VERSION = @TCL_VERSION@ +VERSION = @VERSION@ +WISH_PROG = @WISH_PROG@ +XML_CATALOG = @XML_CATALOG@ +XSLTPROC = @XSLTPROC@ +XSLTPROC_FLAGS = @XSLTPROC_FLAGS@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +ac_ct_F77 = @ac_ct_F77@ +acx_pthread_config = @acx_pthread_config@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +usb_libs = @usb_libs@ +@WITH_JAVA_FALSE@JAVA_DIR = +@WITH_JAVA_TRUE@JAVA_DIR = Java +@WITH_TCL_FALSE@TCL_DIR = +@WITH_TCL_TRUE@TCL_DIR = Tcl +SUBDIRS = $(JAVA_DIR) $(TCL_DIR) +@WITH_PYTHON_FALSE@PYTHON_ALL = +@WITH_PYTHON_TRUE@PYTHON_ALL = python-build +@WITH_PYTHON_FALSE@PYTHON_INSTALL = +@WITH_PYTHON_TRUE@PYTHON_INSTALL = python-install +@WITH_PYTHON_FALSE@PYTHON_CLEAN = +@WITH_PYTHON_TRUE@PYTHON_CLEAN = python-clean +@WITH_PYTHON_FALSE@PYTHON_MCLEAN = +@WITH_PERL_FALSE@PERL_ALL = +@WITH_PERL_TRUE@PERL_ALL = perl-build +@WITH_PERL_FALSE@PERL_INSTALL = +@WITH_PERL_TRUE@PERL_INSTALL = perl-install +@WITH_PERL_FALSE@PERL_CLEAN = +@WITH_PERL_TRUE@PERL_CLEAN = perl-clean +@WITH_PERL_FALSE@PERL_MCLEAN = +EXTRA_DIST = Python Java Perl +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bindings/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu bindings/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$(top_distdir)" distdir="$(distdir)" \ + dist-hook +check-am: all-am +check: check-recursive +all-am: Makefile all-local +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-libtool clean-local mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-local \ + distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-exec-local + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic \ + maintainer-clean-local + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-local + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am all-local check check-am clean clean-generic \ + clean-libtool clean-local ctags ctags-recursive dist-hook \ + distclean distclean-generic distclean-libtool distclean-local \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-exec-local \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic maintainer-clean-local mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am uninstall-local + + +# +# Python Building +# +python-build: Python/setup.py + cd $(srcdir)/Python && $(PYTHON) setup.py build + +python-install: python-build + cd $(srcdir)/Python && $(PYTHON) setup.py install --root=$(DESTDIR) --prefix=$(prefix) + +python-clean: Python/setup.py + -cd $(srcdir)/Python && $(PYTHON) setup.py clean + -cd $(srcdir)/Python && rm -rf build + +# +# Perl Building +# + +Perl/Makefile: Perl/Makefile.PL + cd Perl && $(PERL) Makefile.PL + +perl-build: Perl/Makefile + cd Perl && $(MAKE) PREFIX=$(DESTDIR)$(prefix) + +perl-install: + cd Perl && $(MAKE) install + +perl-uninstall: Perl/Makefile + cd Perl && $(MAKE) uninstall + +perl-clean: Perl/Makefile + cd Perl && $(MAKE) realclean && rm Makefile.PL + +all-local: $(PERL_ALL) $(PYTHON_ALL) + +install-exec-local: $(PYTHON_INSTALL) $(PERL_INSTALL) + +uninstall-local: $(PYTHON_INSTALL) $(PERL_UNINSTALL) + +clean-local: $(PERL_CLEAN) $(PYTHON_CLEAN) + +distclean-local: $(PERL_CLEAN) $(PYTHON_CLEAN) + +maintainer-clean-local: $(PERL_CLEAN) $(PYTHON_CLEAN) + +dist-hook: + rm -rf `find $(distdir) -name CVS` + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/bindings/Perl/.cvsignore b/bindings/Perl/.cvsignore new file mode 100644 index 0000000..9f22574 --- /dev/null +++ b/bindings/Perl/.cvsignore @@ -0,0 +1,6 @@ +Makefile +Makefile.PL +blib +pm_to_blib +Pilot.c +Pilot.bs diff --git a/bindings/Perl/MANIFEST b/bindings/Perl/MANIFEST new file mode 100644 index 0000000..48aa854 --- /dev/null +++ b/bindings/Perl/MANIFEST @@ -0,0 +1,8 @@ +MANIFEST +Makefile.PL +Pilot.pm +Pilot.xs +README +dump.pl +test.pl +typemap diff --git a/bindings/Perl/Makefile b/bindings/Perl/Makefile new file mode 100644 index 0000000..7eac612 --- /dev/null +++ b/bindings/Perl/Makefile @@ -0,0 +1,948 @@ +# This Makefile is for the PDA::Pilot extension to perl. +# +# It was generated automatically by MakeMaker version +# 6.55_02 (Revision: 65502) from the contents of +# Makefile.PL. Don't edit this file, edit Makefile.PL instead. +# +# ANY CHANGES MADE HERE WILL BE LOST! +# +# MakeMaker ARGV: () +# + +# MakeMaker Parameters: + +# BUILD_REQUIRES => { } +# DEFINE => q[-DPERL_POLLUTE] +# INC => q[-I../../include] +# INSTALLDIRS => q[vendor] +# NAME => q[PDA::Pilot] +# PREFIX => q[/usr/local] +# PREREQ_PM => { } +# VERSION => q[0.12.5] +# XSPROTOARG => q[-noprototypes] +# clean => { FILES=>q[const-c.inc const-xs.inc] } +# depend => { Pilot.c=>q[const-c.inc const-xs.inc] } +# dynamic_lib => { OTHERLDFLAGS=>q[-L../../libpisock/.libs -lpisock] } + +# --- MakeMaker post_initialize section: + + +# --- MakeMaker const_config section: + +# These definitions are from config.sh (via /usr/lib/perl/5.10/Config.pm). +# They may have been overridden via Makefile.PL or on the command line. +AR = ar +CC = cc +CCCDLFLAGS = -fPIC +CCDLFLAGS = -Wl,-E +DLEXT = so +DLSRC = dl_dlopen.xs +EXE_EXT = +FULL_AR = /usr/bin/ar +LD = cc +LDDLFLAGS = -shared -O2 -g -L/usr/local/lib -fstack-protector +LDFLAGS = -fstack-protector -L/usr/local/lib +LIBC = /lib/libc-2.11.1.so +LIB_EXT = .a +OBJ_EXT = .o +OSNAME = linux +OSVERS = 2.6.24-23-server +RANLIB = : +SITELIBEXP = /usr/local/share/perl/5.10.1 +SITEARCHEXP = /usr/local/lib/perl/5.10.1 +SO = so +VENDORARCHEXP = /usr/lib/perl5 +VENDORLIBEXP = /usr/share/perl5 + + +# --- MakeMaker constants section: +AR_STATIC_ARGS = cr +DIRFILESEP = / +DFSEP = $(DIRFILESEP) +NAME = PDA::Pilot +NAME_SYM = PDA_Pilot +VERSION = 0.12.5 +VERSION_MACRO = VERSION +VERSION_SYM = 0_12_5 +DEFINE_VERSION = -D$(VERSION_MACRO)=\"$(VERSION)\" +XS_VERSION = 0.12.5 +XS_VERSION_MACRO = XS_VERSION +XS_DEFINE_VERSION = -D$(XS_VERSION_MACRO)=\"$(XS_VERSION)\" +INST_ARCHLIB = blib/arch +INST_SCRIPT = blib/script +INST_BIN = blib/bin +INST_LIB = blib/lib +INST_MAN1DIR = blib/man1 +INST_MAN3DIR = blib/man3 +MAN1EXT = 1p +MAN3EXT = 3pm +INSTALLDIRS = vendor +DESTDIR = +PREFIX = /usr/local +PERLPREFIX = $(PREFIX) +SITEPREFIX = $(PREFIX) +VENDORPREFIX = $(PREFIX) +INSTALLPRIVLIB = $(PERLPREFIX)/share/perl/5.10 +DESTINSTALLPRIVLIB = $(DESTDIR)$(INSTALLPRIVLIB) +INSTALLSITELIB = $(SITEPREFIX)/share/perl/5.10.1 +DESTINSTALLSITELIB = $(DESTDIR)$(INSTALLSITELIB) +INSTALLVENDORLIB = $(VENDORPREFIX)/share/perl5 +DESTINSTALLVENDORLIB = $(DESTDIR)$(INSTALLVENDORLIB) +INSTALLARCHLIB = $(PERLPREFIX)/lib/perl/5.10 +DESTINSTALLARCHLIB = $(DESTDIR)$(INSTALLARCHLIB) +INSTALLSITEARCH = $(SITEPREFIX)/lib/perl/5.10.1 +DESTINSTALLSITEARCH = $(DESTDIR)$(INSTALLSITEARCH) +INSTALLVENDORARCH = $(VENDORPREFIX)/lib/perl5 +DESTINSTALLVENDORARCH = $(DESTDIR)$(INSTALLVENDORARCH) +INSTALLBIN = $(PERLPREFIX)/bin +DESTINSTALLBIN = $(DESTDIR)$(INSTALLBIN) +INSTALLSITEBIN = $(SITEPREFIX)/bin +DESTINSTALLSITEBIN = $(DESTDIR)$(INSTALLSITEBIN) +INSTALLVENDORBIN = $(VENDORPREFIX)/bin +DESTINSTALLVENDORBIN = $(DESTDIR)$(INSTALLVENDORBIN) +INSTALLSCRIPT = $(PERLPREFIX)/bin +DESTINSTALLSCRIPT = $(DESTDIR)$(INSTALLSCRIPT) +INSTALLSITESCRIPT = $(SITEPREFIX)/bin +DESTINSTALLSITESCRIPT = $(DESTDIR)$(INSTALLSITESCRIPT) +INSTALLVENDORSCRIPT = $(VENDORPREFIX)/bin +DESTINSTALLVENDORSCRIPT = $(DESTDIR)$(INSTALLVENDORSCRIPT) +INSTALLMAN1DIR = $(PERLPREFIX)/share/man/man1 +DESTINSTALLMAN1DIR = $(DESTDIR)$(INSTALLMAN1DIR) +INSTALLSITEMAN1DIR = $(SITEPREFIX)/man/man1 +DESTINSTALLSITEMAN1DIR = $(DESTDIR)$(INSTALLSITEMAN1DIR) +INSTALLVENDORMAN1DIR = $(VENDORPREFIX)/share/man/man1 +DESTINSTALLVENDORMAN1DIR = $(DESTDIR)$(INSTALLVENDORMAN1DIR) +INSTALLMAN3DIR = $(PERLPREFIX)/share/man/man3 +DESTINSTALLMAN3DIR = $(DESTDIR)$(INSTALLMAN3DIR) +INSTALLSITEMAN3DIR = $(SITEPREFIX)/man/man3 +DESTINSTALLSITEMAN3DIR = $(DESTDIR)$(INSTALLSITEMAN3DIR) +INSTALLVENDORMAN3DIR = $(VENDORPREFIX)/share/man/man3 +DESTINSTALLVENDORMAN3DIR = $(DESTDIR)$(INSTALLVENDORMAN3DIR) +PERL_LIB = /usr/share/perl/5.10 +PERL_ARCHLIB = /usr/lib/perl/5.10 +LIBPERL_A = libperl.a +FIRST_MAKEFILE = Makefile +MAKEFILE_OLD = Makefile.old +MAKE_APERL_FILE = Makefile.aperl +PERLMAINCC = $(CC) +PERL_INC = /usr/lib/perl/5.10/CORE +PERL = /usr/bin/perl +FULLPERL = /usr/bin/perl +ABSPERL = $(PERL) +PERLRUN = $(PERL) +FULLPERLRUN = $(FULLPERL) +ABSPERLRUN = $(ABSPERL) +PERLRUNINST = $(PERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" +FULLPERLRUNINST = $(FULLPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" +ABSPERLRUNINST = $(ABSPERLRUN) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" +PERL_CORE = 0 +PERM_DIR = 755 +PERM_RW = 644 +PERM_RWX = 755 + +MAKEMAKER = /usr/share/perl/5.10/ExtUtils/MakeMaker.pm +MM_VERSION = 6.55_02 +MM_REVISION = 65502 + +# FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle). +# BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle) +# PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar) +# DLBASE = Basename part of dynamic library. May be just equal BASEEXT. +MAKE = make +FULLEXT = PDA/Pilot +BASEEXT = Pilot +PARENT_NAME = PDA +DLBASE = $(BASEEXT) +VERSION_FROM = +INC = -I../../include +DEFINE = -DPERL_POLLUTE +OBJECT = $(BASEEXT)$(OBJ_EXT) +LDFROM = $(OBJECT) +LINKTYPE = dynamic +BOOTDEP = + +# Handy lists of source code files: +XS_FILES = Pilot.xs +C_FILES = Pilot.c +O_FILES = Pilot.o +H_FILES = +MAN1PODS = +MAN3PODS = Pilot.pm + +# Where is the Config information that we are using/depend on +CONFIGDEP = $(PERL_ARCHLIB)$(DFSEP)Config.pm $(PERL_INC)$(DFSEP)config.h + +# Where to build things +INST_LIBDIR = $(INST_LIB)/PDA +INST_ARCHLIBDIR = $(INST_ARCHLIB)/PDA + +INST_AUTODIR = $(INST_LIB)/auto/$(FULLEXT) +INST_ARCHAUTODIR = $(INST_ARCHLIB)/auto/$(FULLEXT) + +INST_STATIC = $(INST_ARCHAUTODIR)/$(BASEEXT)$(LIB_EXT) +INST_DYNAMIC = $(INST_ARCHAUTODIR)/$(DLBASE).$(DLEXT) +INST_BOOT = $(INST_ARCHAUTODIR)/$(BASEEXT).bs + +# Extra linker info +EXPORT_LIST = +PERL_ARCHIVE = +PERL_ARCHIVE_AFTER = + + +TO_INST_PM = Pilot.pm \ + dump.pl + +PM_TO_BLIB = dump.pl \ + $(INST_LIB)/PDA/dump.pl \ + Pilot.pm \ + $(INST_LIB)/PDA/Pilot.pm + + +# --- MakeMaker platform_constants section: +MM_Unix_VERSION = 6.55_02 +PERL_MALLOC_DEF = -DPERL_EXTMALLOC_DEF -Dmalloc=Perl_malloc -Dfree=Perl_mfree -Drealloc=Perl_realloc -Dcalloc=Perl_calloc + + +# --- MakeMaker tool_autosplit section: +# Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto +AUTOSPLITFILE = $(ABSPERLRUN) -e 'use AutoSplit; autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1)' -- + + + +# --- MakeMaker tool_xsubpp section: + +XSUBPPDIR = /usr/share/perl/5.10/ExtUtils +XSUBPP = $(XSUBPPDIR)$(DFSEP)xsubpp +XSUBPPRUN = $(PERLRUN) $(XSUBPP) +XSPROTOARG = -noprototypes +XSUBPPDEPS = /usr/share/perl/5.10/ExtUtils/typemap typemap $(XSUBPP) +XSUBPPARGS = -typemap /usr/share/perl/5.10/ExtUtils/typemap -typemap typemap +XSUBPP_EXTRA_ARGS = + + +# --- MakeMaker tools_other section: +SHELL = /bin/sh +CHMOD = chmod +CP = cp +MV = mv +NOOP = $(TRUE) +NOECHO = @ +RM_F = rm -f +RM_RF = rm -rf +TEST_F = test -f +TOUCH = touch +UMASK_NULL = umask 0 +DEV_NULL = > /dev/null 2>&1 +MKPATH = $(ABSPERLRUN) -MExtUtils::Command -e 'mkpath' -- +EQUALIZE_TIMESTAMP = $(ABSPERLRUN) -MExtUtils::Command -e 'eqtime' -- +FALSE = false +TRUE = true +ECHO = echo +ECHO_N = echo -n +UNINST = 0 +VERBINST = 0 +MOD_INSTALL = $(ABSPERLRUN) -MExtUtils::Install -e 'install([ from_to => {@ARGV}, verbose => '\''$(VERBINST)'\'', uninstall_shadows => '\''$(UNINST)'\'', dir_mode => '\''$(PERM_DIR)'\'' ]);' -- +DOC_INSTALL = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'perllocal_install' -- +UNINSTALL = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'uninstall' -- +WARN_IF_OLD_PACKLIST = $(ABSPERLRUN) -MExtUtils::Command::MM -e 'warn_if_old_packlist' -- +MACROSTART = +MACROEND = +USEMAKEFILE = -f +FIXIN = $(ABSPERLRUN) -MExtUtils::MY -e 'MY->fixin(shift)' -- + + +# --- MakeMaker makemakerdflt section: +makemakerdflt : all + $(NOECHO) $(NOOP) + + +# --- MakeMaker dist section: +TAR = tar +TARFLAGS = cvf +ZIP = zip +ZIPFLAGS = -r +COMPRESS = gzip --best +SUFFIX = .gz +SHAR = shar +PREOP = $(NOECHO) $(NOOP) +POSTOP = $(NOECHO) $(NOOP) +TO_UNIX = $(NOECHO) $(NOOP) +CI = ci -u +RCS_LABEL = rcs -Nv$(VERSION_SYM): -q +DIST_CP = best +DIST_DEFAULT = tardist +DISTNAME = PDA-Pilot +DISTVNAME = PDA-Pilot-0.12.5 + + +# --- MakeMaker macro section: + + +# --- MakeMaker depend section: +Pilot.c : const-c.inc const-xs.inc + + +# --- MakeMaker cflags section: + +CCFLAGS = -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 +OPTIMIZE = -O2 -g +PERLTYPE = +MPOLLUTE = + + +# --- MakeMaker const_loadlibs section: + +# PDA::Pilot might depend on some other libraries: +# See ExtUtils::Liblist for details +# + + +# --- MakeMaker const_cccmd section: +CCCMD = $(CC) -c $(PASTHRU_INC) $(INC) \ + $(CCFLAGS) $(OPTIMIZE) \ + $(PERLTYPE) $(MPOLLUTE) $(DEFINE_VERSION) \ + $(XS_DEFINE_VERSION) + +# --- MakeMaker post_constants section: + + +# --- MakeMaker pasthru section: + +PASTHRU = LIBPERL_A="$(LIBPERL_A)"\ + LINKTYPE="$(LINKTYPE)"\ + OPTIMIZE="$(OPTIMIZE)"\ + PREFIX="$(PREFIX)"\ + PASTHRU_DEFINE="$(PASTHRU_DEFINE)"\ + PASTHRU_INC="$(PASTHRU_INC)" + + +# --- MakeMaker special_targets section: +.SUFFIXES : .xs .c .C .cpp .i .s .cxx .cc $(OBJ_EXT) + +.PHONY: all config static dynamic test linkext manifest blibdirs clean realclean disttest distdir + + + +# --- MakeMaker c_o section: + +.c.i: + cc -E -c $(PASTHRU_INC) $(INC) \ + $(CCFLAGS) $(OPTIMIZE) \ + $(PERLTYPE) $(MPOLLUTE) $(DEFINE_VERSION) \ + $(XS_DEFINE_VERSION) $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) $*.c > $*.i + +.c.s: + $(CCCMD) -S $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) $*.c + +.c$(OBJ_EXT): + $(CCCMD) $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) $*.c + +.cpp$(OBJ_EXT): + $(CCCMD) $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) $*.cpp + +.cxx$(OBJ_EXT): + $(CCCMD) $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) $*.cxx + +.cc$(OBJ_EXT): + $(CCCMD) $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) $*.cc + +.C$(OBJ_EXT): + $(CCCMD) $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) $*.C + + +# --- MakeMaker xs_c section: + +.xs.c: + $(XSUBPPRUN) $(XSPROTOARG) $(XSUBPPARGS) $(XSUBPP_EXTRA_ARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.c + + +# --- MakeMaker xs_o section: + +.xs$(OBJ_EXT): + $(XSUBPPRUN) $(XSPROTOARG) $(XSUBPPARGS) $*.xs > $*.xsc && $(MV) $*.xsc $*.c + $(CCCMD) $(CCCDLFLAGS) "-I$(PERL_INC)" $(PASTHRU_DEFINE) $(DEFINE) $*.c + + +# --- MakeMaker top_targets section: +all :: pure_all manifypods + $(NOECHO) $(NOOP) + + +pure_all :: config pm_to_blib subdirs linkext + $(NOECHO) $(NOOP) + +subdirs :: $(MYEXTLIB) + $(NOECHO) $(NOOP) + +config :: $(FIRST_MAKEFILE) blibdirs + $(NOECHO) $(NOOP) + +help : + perldoc ExtUtils::MakeMaker + + +# --- MakeMaker blibdirs section: +blibdirs : $(INST_LIBDIR)$(DFSEP).exists $(INST_ARCHLIB)$(DFSEP).exists $(INST_AUTODIR)$(DFSEP).exists $(INST_ARCHAUTODIR)$(DFSEP).exists $(INST_BIN)$(DFSEP).exists $(INST_SCRIPT)$(DFSEP).exists $(INST_MAN1DIR)$(DFSEP).exists $(INST_MAN3DIR)$(DFSEP).exists + $(NOECHO) $(NOOP) + +# Backwards compat with 6.18 through 6.25 +blibdirs.ts : blibdirs + $(NOECHO) $(NOOP) + +$(INST_LIBDIR)$(DFSEP).exists :: Makefile.PL + $(NOECHO) $(MKPATH) $(INST_LIBDIR) + $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_LIBDIR) + $(NOECHO) $(TOUCH) $(INST_LIBDIR)$(DFSEP).exists + +$(INST_ARCHLIB)$(DFSEP).exists :: Makefile.PL + $(NOECHO) $(MKPATH) $(INST_ARCHLIB) + $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_ARCHLIB) + $(NOECHO) $(TOUCH) $(INST_ARCHLIB)$(DFSEP).exists + +$(INST_AUTODIR)$(DFSEP).exists :: Makefile.PL + $(NOECHO) $(MKPATH) $(INST_AUTODIR) + $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_AUTODIR) + $(NOECHO) $(TOUCH) $(INST_AUTODIR)$(DFSEP).exists + +$(INST_ARCHAUTODIR)$(DFSEP).exists :: Makefile.PL + $(NOECHO) $(MKPATH) $(INST_ARCHAUTODIR) + $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_ARCHAUTODIR) + $(NOECHO) $(TOUCH) $(INST_ARCHAUTODIR)$(DFSEP).exists + +$(INST_BIN)$(DFSEP).exists :: Makefile.PL + $(NOECHO) $(MKPATH) $(INST_BIN) + $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_BIN) + $(NOECHO) $(TOUCH) $(INST_BIN)$(DFSEP).exists + +$(INST_SCRIPT)$(DFSEP).exists :: Makefile.PL + $(NOECHO) $(MKPATH) $(INST_SCRIPT) + $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_SCRIPT) + $(NOECHO) $(TOUCH) $(INST_SCRIPT)$(DFSEP).exists + +$(INST_MAN1DIR)$(DFSEP).exists :: Makefile.PL + $(NOECHO) $(MKPATH) $(INST_MAN1DIR) + $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_MAN1DIR) + $(NOECHO) $(TOUCH) $(INST_MAN1DIR)$(DFSEP).exists + +$(INST_MAN3DIR)$(DFSEP).exists :: Makefile.PL + $(NOECHO) $(MKPATH) $(INST_MAN3DIR) + $(NOECHO) $(CHMOD) $(PERM_DIR) $(INST_MAN3DIR) + $(NOECHO) $(TOUCH) $(INST_MAN3DIR)$(DFSEP).exists + + + +# --- MakeMaker linkext section: + +linkext :: $(LINKTYPE) + $(NOECHO) $(NOOP) + + +# --- MakeMaker dlsyms section: + + +# --- MakeMaker dynamic section: + +dynamic :: $(FIRST_MAKEFILE) $(INST_DYNAMIC) $(INST_BOOT) + $(NOECHO) $(NOOP) + + +# --- MakeMaker dynamic_bs section: +BOOTSTRAP = $(BASEEXT).bs + +# As Mkbootstrap might not write a file (if none is required) +# we use touch to prevent make continually trying to remake it. +# The DynaLoader only reads a non-empty file. +$(BOOTSTRAP) : $(FIRST_MAKEFILE) $(BOOTDEP) $(INST_ARCHAUTODIR)$(DFSEP).exists + $(NOECHO) $(ECHO) "Running Mkbootstrap for $(NAME) ($(BSLOADLIBS))" + $(NOECHO) $(PERLRUN) \ + "-MExtUtils::Mkbootstrap" \ + -e "Mkbootstrap('$(BASEEXT)','$(BSLOADLIBS)');" + $(NOECHO) $(TOUCH) $@ + $(CHMOD) $(PERM_RW) $@ + +$(INST_BOOT) : $(BOOTSTRAP) $(INST_ARCHAUTODIR)$(DFSEP).exists + $(NOECHO) $(RM_RF) $@ + - $(CP) $(BOOTSTRAP) $@ + $(CHMOD) $(PERM_RW) $@ + + +# --- MakeMaker dynamic_lib section: + +# This section creates the dynamically loadable $(INST_DYNAMIC) +# from $(OBJECT) and possibly $(MYEXTLIB). +ARMAYBE = : +OTHERLDFLAGS = -L../../libpisock/.libs -lpisock +INST_DYNAMIC_DEP = +INST_DYNAMIC_FIX = + +$(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)$(DFSEP).exists $(EXPORT_LIST) $(PERL_ARCHIVE) $(PERL_ARCHIVE_AFTER) $(INST_DYNAMIC_DEP) + $(RM_F) $@ + $(LD) $(LDDLFLAGS) $(LDFROM) $(OTHERLDFLAGS) -o $@ $(MYEXTLIB) \ + $(PERL_ARCHIVE) $(LDLOADLIBS) $(PERL_ARCHIVE_AFTER) $(EXPORT_LIST) \ + $(INST_DYNAMIC_FIX) + $(CHMOD) $(PERM_RWX) $@ + + +# --- MakeMaker static section: + +## $(INST_PM) has been moved to the all: target. +## It remains here for awhile to allow for old usage: "make static" +static :: $(FIRST_MAKEFILE) $(INST_STATIC) + $(NOECHO) $(NOOP) + + +# --- MakeMaker static_lib section: + +$(INST_STATIC) : $(OBJECT) $(MYEXTLIB) $(INST_ARCHAUTODIR)$(DFSEP).exists + $(RM_RF) $@ + $(FULL_AR) $(AR_STATIC_ARGS) $@ $(OBJECT) && $(RANLIB) $@ + $(CHMOD) $(PERM_RWX) $@ + $(NOECHO) $(ECHO) "$(EXTRALIBS)" > $(INST_ARCHAUTODIR)/extralibs.ld + + +# --- MakeMaker manifypods section: + +POD2MAN_EXE = $(PERLRUN) "-MExtUtils::Command::MM" -e pod2man "--" +POD2MAN = $(POD2MAN_EXE) + + +manifypods : pure_all \ + Pilot.pm + $(NOECHO) $(POD2MAN) --section=$(MAN3EXT) --perm_rw=$(PERM_RW) \ + Pilot.pm $(INST_MAN3DIR)/PDA::Pilot.$(MAN3EXT) + + + + +# --- MakeMaker processPL section: + + +# --- MakeMaker installbin section: + + +# --- MakeMaker subdirs section: + +# none + +# --- MakeMaker clean_subdirs section: +clean_subdirs : + $(NOECHO) $(NOOP) + + +# --- MakeMaker clean section: + +# Delete temporary files but do not touch installed files. We don't delete +# the Makefile here so a later make realclean still has a makefile to use. + +clean :: clean_subdirs + - $(RM_F) \ + *$(LIB_EXT) core \ + core.[0-9] $(INST_ARCHAUTODIR)/extralibs.all \ + core.[0-9][0-9] $(BASEEXT).bso \ + pm_to_blib.ts Pilot.c \ + core.[0-9][0-9][0-9][0-9] $(BASEEXT).x \ + $(BOOTSTRAP) perl$(EXE_EXT) \ + tmon.out *$(OBJ_EXT) \ + pm_to_blib $(INST_ARCHAUTODIR)/extralibs.ld \ + blibdirs.ts core.[0-9][0-9][0-9][0-9][0-9] \ + *perl.core core.*perl.*.? \ + $(MAKE_APERL_FILE) perl \ + $(BASEEXT).def core.[0-9][0-9][0-9] \ + mon.out lib$(BASEEXT).def \ + perlmain.c perl.exe \ + so_locations $(BASEEXT).exp + - $(RM_RF) \ + const-c.inc const-xs.inc \ + blib + - $(MV) $(FIRST_MAKEFILE) $(MAKEFILE_OLD) $(DEV_NULL) + + +# --- MakeMaker realclean_subdirs section: +realclean_subdirs : + $(NOECHO) $(NOOP) + + +# --- MakeMaker realclean section: +# Delete temporary files (via clean) and also delete dist files +realclean purge :: clean realclean_subdirs + - $(RM_F) \ + $(OBJECT) $(MAKEFILE_OLD) \ + $(FIRST_MAKEFILE) + - $(RM_RF) \ + $(DISTVNAME) + + +# --- MakeMaker metafile section: +metafile : create_distdir + $(NOECHO) $(ECHO) Generating META.yml + $(NOECHO) $(ECHO) '--- #YAML:1.0' > META_new.yml + $(NOECHO) $(ECHO) 'name: PDA-Pilot' >> META_new.yml + $(NOECHO) $(ECHO) 'version: 0.12.5' >> META_new.yml + $(NOECHO) $(ECHO) 'abstract: ~' >> META_new.yml + $(NOECHO) $(ECHO) 'author: []' >> META_new.yml + $(NOECHO) $(ECHO) 'license: unknown' >> META_new.yml + $(NOECHO) $(ECHO) 'distribution_type: module' >> META_new.yml + $(NOECHO) $(ECHO) 'configure_requires:' >> META_new.yml + $(NOECHO) $(ECHO) ' ExtUtils::MakeMaker: 0' >> META_new.yml + $(NOECHO) $(ECHO) 'build_requires:' >> META_new.yml + $(NOECHO) $(ECHO) ' ExtUtils::MakeMaker: 0' >> META_new.yml + $(NOECHO) $(ECHO) 'requires: {}' >> META_new.yml + $(NOECHO) $(ECHO) 'no_index:' >> META_new.yml + $(NOECHO) $(ECHO) ' directory:' >> META_new.yml + $(NOECHO) $(ECHO) ' - t' >> META_new.yml + $(NOECHO) $(ECHO) ' - inc' >> META_new.yml + $(NOECHO) $(ECHO) 'generated_by: ExtUtils::MakeMaker version 6.55_02' >> META_new.yml + $(NOECHO) $(ECHO) 'meta-spec:' >> META_new.yml + $(NOECHO) $(ECHO) ' url: http://module-build.sourceforge.net/META-spec-v1.4.html' >> META_new.yml + $(NOECHO) $(ECHO) ' version: 1.4' >> META_new.yml + -$(NOECHO) $(MV) META_new.yml $(DISTVNAME)/META.yml + + +# --- MakeMaker signature section: +signature : + cpansign -s + + +# --- MakeMaker dist_basics section: +distclean :: realclean distcheck + $(NOECHO) $(NOOP) + +distcheck : + $(PERLRUN) "-MExtUtils::Manifest=fullcheck" -e fullcheck + +skipcheck : + $(PERLRUN) "-MExtUtils::Manifest=skipcheck" -e skipcheck + +manifest : + $(PERLRUN) "-MExtUtils::Manifest=mkmanifest" -e mkmanifest + +veryclean : realclean + $(RM_F) *~ */*~ *.orig */*.orig *.bak */*.bak *.old */*.old + + + +# --- MakeMaker dist_core section: + +dist : $(DIST_DEFAULT) $(FIRST_MAKEFILE) + $(NOECHO) $(ABSPERLRUN) -l -e 'print '\''Warning: Makefile possibly out of date with $(VERSION_FROM)'\''' \ + -e ' if -e '\''$(VERSION_FROM)'\'' and -M '\''$(VERSION_FROM)'\'' < -M '\''$(FIRST_MAKEFILE)'\'';' -- + +tardist : $(DISTVNAME).tar$(SUFFIX) + $(NOECHO) $(NOOP) + +uutardist : $(DISTVNAME).tar$(SUFFIX) + uuencode $(DISTVNAME).tar$(SUFFIX) $(DISTVNAME).tar$(SUFFIX) > $(DISTVNAME).tar$(SUFFIX)_uu + +$(DISTVNAME).tar$(SUFFIX) : distdir + $(PREOP) + $(TO_UNIX) + $(TAR) $(TARFLAGS) $(DISTVNAME).tar $(DISTVNAME) + $(RM_RF) $(DISTVNAME) + $(COMPRESS) $(DISTVNAME).tar + $(POSTOP) + +zipdist : $(DISTVNAME).zip + $(NOECHO) $(NOOP) + +$(DISTVNAME).zip : distdir + $(PREOP) + $(ZIP) $(ZIPFLAGS) $(DISTVNAME).zip $(DISTVNAME) + $(RM_RF) $(DISTVNAME) + $(POSTOP) + +shdist : distdir + $(PREOP) + $(SHAR) $(DISTVNAME) > $(DISTVNAME).shar + $(RM_RF) $(DISTVNAME) + $(POSTOP) + + +# --- MakeMaker distdir section: +create_distdir : + $(RM_RF) $(DISTVNAME) + $(PERLRUN) "-MExtUtils::Manifest=manicopy,maniread" \ + -e "manicopy(maniread(),'$(DISTVNAME)', '$(DIST_CP)');" + +distdir : create_distdir distmeta + $(NOECHO) $(NOOP) + + + +# --- MakeMaker dist_test section: +disttest : distdir + cd $(DISTVNAME) && $(ABSPERLRUN) Makefile.PL + cd $(DISTVNAME) && $(MAKE) $(PASTHRU) + cd $(DISTVNAME) && $(MAKE) test $(PASTHRU) + + + +# --- MakeMaker dist_ci section: + +ci : + $(PERLRUN) "-MExtUtils::Manifest=maniread" \ + -e "@all = keys %{ maniread() };" \ + -e "print(qq{Executing $(CI) @all\n}); system(qq{$(CI) @all});" \ + -e "print(qq{Executing $(RCS_LABEL) ...\n}); system(qq{$(RCS_LABEL) @all});" + + +# --- MakeMaker distmeta section: +distmeta : create_distdir metafile + $(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{META.yml} => q{Module meta-data (added by MakeMaker)}}) } ' \ + -e ' or print "Could not add META.yml to MANIFEST: $${'\''@'\''}\n"' -- + + + +# --- MakeMaker distsignature section: +distsignature : create_distdir + $(NOECHO) cd $(DISTVNAME) && $(ABSPERLRUN) -MExtUtils::Manifest=maniadd -e 'eval { maniadd({q{SIGNATURE} => q{Public-key signature (added by MakeMaker)}}) } ' \ + -e ' or print "Could not add SIGNATURE to MANIFEST: $${'\''@'\''}\n"' -- + $(NOECHO) cd $(DISTVNAME) && $(TOUCH) SIGNATURE + cd $(DISTVNAME) && cpansign -s + + + +# --- MakeMaker install section: + +install :: pure_install doc_install + $(NOECHO) $(NOOP) + +install_perl :: pure_perl_install doc_perl_install + $(NOECHO) $(NOOP) + +install_site :: pure_site_install doc_site_install + $(NOECHO) $(NOOP) + +install_vendor :: pure_vendor_install doc_vendor_install + $(NOECHO) $(NOOP) + +pure_install :: pure_$(INSTALLDIRS)_install + $(NOECHO) $(NOOP) + +doc_install :: doc_$(INSTALLDIRS)_install + $(NOECHO) $(NOOP) + +pure__install : pure_site_install + $(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site + +doc__install : doc_site_install + $(NOECHO) $(ECHO) INSTALLDIRS not defined, defaulting to INSTALLDIRS=site + +pure_perl_install :: all + $(NOECHO) umask 022; $(MOD_INSTALL) \ + $(INST_LIB) $(DESTINSTALLPRIVLIB) \ + $(INST_ARCHLIB) $(DESTINSTALLARCHLIB) \ + $(INST_BIN) $(DESTINSTALLBIN) \ + $(INST_SCRIPT) $(DESTINSTALLSCRIPT) \ + $(INST_MAN1DIR) $(DESTINSTALLMAN1DIR) \ + $(INST_MAN3DIR) $(DESTINSTALLMAN3DIR) + $(NOECHO) $(WARN_IF_OLD_PACKLIST) \ + $(SITEARCHEXP)/auto/$(FULLEXT) + + +pure_site_install :: all + $(NOECHO) umask 02; $(MOD_INSTALL) \ + read $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist \ + write $(DESTINSTALLSITEARCH)/auto/$(FULLEXT)/.packlist \ + $(INST_LIB) $(DESTINSTALLSITELIB) \ + $(INST_ARCHLIB) $(DESTINSTALLSITEARCH) \ + $(INST_BIN) $(DESTINSTALLSITEBIN) \ + $(INST_SCRIPT) $(DESTINSTALLSITESCRIPT) \ + $(INST_MAN1DIR) $(DESTINSTALLSITEMAN1DIR) \ + $(INST_MAN3DIR) $(DESTINSTALLSITEMAN3DIR) + $(NOECHO) $(WARN_IF_OLD_PACKLIST) \ + $(PERL_ARCHLIB)/auto/$(FULLEXT) + +pure_vendor_install :: all + $(NOECHO) umask 022; $(MOD_INSTALL) \ + $(INST_LIB) $(DESTINSTALLVENDORLIB) \ + $(INST_ARCHLIB) $(DESTINSTALLVENDORARCH) \ + $(INST_BIN) $(DESTINSTALLVENDORBIN) \ + $(INST_SCRIPT) $(DESTINSTALLVENDORSCRIPT) \ + $(INST_MAN1DIR) $(DESTINSTALLVENDORMAN1DIR) \ + $(INST_MAN3DIR) $(DESTINSTALLVENDORMAN3DIR) + +doc_perl_install :: all + +doc_site_install :: all + $(NOECHO) $(ECHO) Appending installation info to $(DESTINSTALLSITEARCH)/perllocal.pod + -$(NOECHO) umask 02; $(MKPATH) $(DESTINSTALLSITEARCH) + -$(NOECHO) umask 02; $(DOC_INSTALL) \ + "Module" "$(NAME)" \ + "installed into" "$(INSTALLSITELIB)" \ + LINKTYPE "$(LINKTYPE)" \ + VERSION "$(VERSION)" \ + EXE_FILES "$(EXE_FILES)" \ + >> $(DESTINSTALLSITEARCH)/perllocal.pod + +doc_vendor_install :: all + + +uninstall :: uninstall_from_$(INSTALLDIRS)dirs + $(NOECHO) $(NOOP) + +uninstall_from_perldirs :: + +uninstall_from_sitedirs :: + $(NOECHO) $(UNINSTALL) $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist + +uninstall_from_vendordirs :: + + + +# --- MakeMaker force section: +# Phony target to force checking subdirectories. +FORCE : + $(NOECHO) $(NOOP) + + +# --- MakeMaker perldepend section: + +PERL_HDRS = \ + $(PERL_INC)/EXTERN.h \ + $(PERL_INC)/INTERN.h \ + $(PERL_INC)/XSUB.h \ + $(PERL_INC)/av.h \ + $(PERL_INC)/cc_runtime.h \ + $(PERL_INC)/config.h \ + $(PERL_INC)/cop.h \ + $(PERL_INC)/cv.h \ + $(PERL_INC)/dosish.h \ + $(PERL_INC)/embed.h \ + $(PERL_INC)/embedvar.h \ + $(PERL_INC)/fakethr.h \ + $(PERL_INC)/form.h \ + $(PERL_INC)/gv.h \ + $(PERL_INC)/handy.h \ + $(PERL_INC)/hv.h \ + $(PERL_INC)/intrpvar.h \ + $(PERL_INC)/iperlsys.h \ + $(PERL_INC)/keywords.h \ + $(PERL_INC)/mg.h \ + $(PERL_INC)/nostdio.h \ + $(PERL_INC)/op.h \ + $(PERL_INC)/opcode.h \ + $(PERL_INC)/patchlevel.h \ + $(PERL_INC)/perl.h \ + $(PERL_INC)/perlio.h \ + $(PERL_INC)/perlsdio.h \ + $(PERL_INC)/perlsfio.h \ + $(PERL_INC)/perlvars.h \ + $(PERL_INC)/perly.h \ + $(PERL_INC)/pp.h \ + $(PERL_INC)/pp_proto.h \ + $(PERL_INC)/proto.h \ + $(PERL_INC)/regcomp.h \ + $(PERL_INC)/regexp.h \ + $(PERL_INC)/regnodes.h \ + $(PERL_INC)/scope.h \ + $(PERL_INC)/sv.h \ + $(PERL_INC)/thread.h \ + $(PERL_INC)/unixish.h \ + $(PERL_INC)/util.h + +$(OBJECT) : $(PERL_HDRS) + +Pilot.c : $(XSUBPPDEPS) + + +# --- MakeMaker makefile section: + +$(OBJECT) : $(FIRST_MAKEFILE) + +# We take a very conservative approach here, but it's worth it. +# We move Makefile to Makefile.old here to avoid gnu make looping. +$(FIRST_MAKEFILE) : Makefile.PL $(CONFIGDEP) + $(NOECHO) $(ECHO) "Makefile out-of-date with respect to $?" + $(NOECHO) $(ECHO) "Cleaning current config before rebuilding Makefile..." + -$(NOECHO) $(RM_F) $(MAKEFILE_OLD) + -$(NOECHO) $(MV) $(FIRST_MAKEFILE) $(MAKEFILE_OLD) + - $(MAKE) $(USEMAKEFILE) $(MAKEFILE_OLD) clean $(DEV_NULL) + $(PERLRUN) Makefile.PL + $(NOECHO) $(ECHO) "==> Your Makefile has been rebuilt. <==" + $(NOECHO) $(ECHO) "==> Please rerun the $(MAKE) command. <==" + $(FALSE) + + + +# --- MakeMaker staticmake section: + +# --- MakeMaker makeaperl section --- +MAP_TARGET = perl +FULLPERL = /usr/bin/perl + +$(MAP_TARGET) :: static $(MAKE_APERL_FILE) + $(MAKE) $(USEMAKEFILE) $(MAKE_APERL_FILE) $@ + +$(MAKE_APERL_FILE) : $(FIRST_MAKEFILE) pm_to_blib + $(NOECHO) $(ECHO) Writing \"$(MAKE_APERL_FILE)\" for this $(MAP_TARGET) + $(NOECHO) $(PERLRUNINST) \ + Makefile.PL DIR= \ + MAKEFILE=$(MAKE_APERL_FILE) LINKTYPE=static \ + MAKEAPERL=1 NORECURS=1 CCCDLFLAGS= + + +# --- MakeMaker test section: + +TEST_VERBOSE=0 +TEST_TYPE=test_$(LINKTYPE) +TEST_FILE = test.pl +TEST_FILES = +TESTDB_SW = -d + +testdb :: testdb_$(LINKTYPE) + +test :: $(TEST_TYPE) subdirs-test + +subdirs-test :: + $(NOECHO) $(NOOP) + + +test_dynamic :: pure_all + PERL_DL_NONLAZY=1 $(FULLPERLRUN) "-I$(INST_LIB)" "-I$(INST_ARCHLIB)" $(TEST_FILE) + +testdb_dynamic :: pure_all + PERL_DL_NONLAZY=1 $(FULLPERLRUN) $(TESTDB_SW) "-I$(INST_LIB)" "-I$(INST_ARCHLIB)" $(TEST_FILE) + +test_ : test_dynamic + +test_static :: pure_all $(MAP_TARGET) + PERL_DL_NONLAZY=1 ./$(MAP_TARGET) "-I$(INST_LIB)" "-I$(INST_ARCHLIB)" $(TEST_FILE) + +testdb_static :: pure_all $(MAP_TARGET) + PERL_DL_NONLAZY=1 ./$(MAP_TARGET) $(TESTDB_SW) "-I$(INST_LIB)" "-I$(INST_ARCHLIB)" $(TEST_FILE) + + + +# --- MakeMaker ppd section: +# Creates a PPD (Perl Package Description) for a binary distribution. +ppd : + $(NOECHO) $(ECHO) '' > $(DISTNAME).ppd + $(NOECHO) $(ECHO) ' ' >> $(DISTNAME).ppd + $(NOECHO) $(ECHO) ' ' >> $(DISTNAME).ppd + $(NOECHO) $(ECHO) ' ' >> $(DISTNAME).ppd + $(NOECHO) $(ECHO) ' ' >> $(DISTNAME).ppd + $(NOECHO) $(ECHO) ' ' >> $(DISTNAME).ppd + $(NOECHO) $(ECHO) ' ' >> $(DISTNAME).ppd + $(NOECHO) $(ECHO) '' >> $(DISTNAME).ppd + + +# --- MakeMaker pm_to_blib section: + +pm_to_blib : $(FIRST_MAKEFILE) $(TO_INST_PM) + $(NOECHO) $(ABSPERLRUN) -MExtUtils::Install -e 'pm_to_blib({@ARGV}, '\''$(INST_LIB)/auto'\'', q[$(PM_FILTER)], '\''$(PERM_DIR)'\'')' -- \ + dump.pl $(INST_LIB)/PDA/dump.pl \ + Pilot.pm $(INST_LIB)/PDA/Pilot.pm + $(NOECHO) $(TOUCH) pm_to_blib + + +# --- MakeMaker selfdocument section: + + +# --- MakeMaker postamble section: +%.inc: + perl ./h2xs-pilot-link -n PDA::Pilot ../../include/pi-macros.h ../../include/pi-buffer.h ../../include/pi-file.h ../../include/pi-datebook.h ../../include/pi-memo.h ../../include/pi-expense.h ../../include/pi-address.h ../../include/pi-todo.h ../../include/pi-mail.h ../../include/pi-socket.h ../../include/pi-dlp.h ../../include/pi-syspkt.h ../../include/pi-error.h ../../include/pi-version.h + cp PDA-Pilot/fallback/*.inc . + rm -rf PDA-Pilot + + +# End. diff --git a/bindings/Perl/Makefile.PL b/bindings/Perl/Makefile.PL new file mode 100644 index 0000000..9e506ee --- /dev/null +++ b/bindings/Perl/Makefile.PL @@ -0,0 +1,48 @@ +use ExtUtils::MakeMaker; +# See lib/ExtUtils/MakeMaker.pm for details of how to influence +# the contents of the Makefile that is written. + +$prefix = "/usr/local"; +$exec_prefix = "${prefix}"; +$libdir = "../../libpisock/.libs"; + +$lib = "-L$libdir -lpisock"; + +$plincdir = "../../include"; +$h2xsheaders = join(' ', map { "$plincdir/$_" } qw( + pi-macros.h + pi-buffer.h + pi-file.h + pi-datebook.h + pi-memo.h + pi-expense.h + pi-address.h + pi-todo.h + pi-mail.h + pi-socket.h + pi-dlp.h + pi-syspkt.h + pi-error.h + pi-version.h + )); + +sub MY::postamble { + "%.inc: + perl ./h2xs-pilot-link -n PDA::Pilot $h2xsheaders + cp PDA-Pilot/fallback/*.inc . + rm -rf PDA-Pilot +"; +} + +WriteMakefile( + 'NAME' => 'PDA::Pilot', + 'VERSION' => '0.12.5', + 'XSPROTOARG' => '-noprototypes', + 'INC' => "-I$plincdir", + 'DEFINE' => '-DPERL_POLLUTE', + 'PREFIX' => "$prefix", + 'INSTALLDIRS'=> 'vendor', + 'dynamic_lib'=> {'OTHERLDFLAGS' => $lib}, + 'depend' => {'Pilot.c' => 'const-c.inc const-xs.inc'}, + 'clean' => {'FILES' => 'const-c.inc const-xs.inc'}, +); diff --git a/bindings/Perl/Makefile.PL.in b/bindings/Perl/Makefile.PL.in new file mode 100644 index 0000000..853e6eb --- /dev/null +++ b/bindings/Perl/Makefile.PL.in @@ -0,0 +1,48 @@ +use ExtUtils::MakeMaker; +# See lib/ExtUtils/MakeMaker.pm for details of how to influence +# the contents of the Makefile that is written. + +$prefix = "@prefix@"; +$exec_prefix = "@exec_prefix@"; +$libdir = "../../libpisock/.libs"; + +$lib = "-L$libdir -lpisock"; + +$plincdir = "../../include"; +$h2xsheaders = join(' ', map { "$plincdir/$_" } qw( + pi-macros.h + pi-buffer.h + pi-file.h + pi-datebook.h + pi-memo.h + pi-expense.h + pi-address.h + pi-todo.h + pi-mail.h + pi-socket.h + pi-dlp.h + pi-syspkt.h + pi-error.h + pi-version.h + )); + +sub MY::postamble { + "%.inc: + @PERL@ ./h2xs-pilot-link -n PDA::Pilot $h2xsheaders + cp PDA-Pilot/fallback/*.inc . + rm -rf PDA-Pilot +"; +} + +WriteMakefile( + 'NAME' => 'PDA::Pilot', + 'VERSION' => '@PILOT_LINK_VERS@.@PILOT_LINK_MAJOR@.@PILOT_LINK_MINOR@@PILOT_LINK_PATCH@', + 'XSPROTOARG' => '-noprototypes', + 'INC' => "-I$plincdir", + 'DEFINE' => '-DPERL_POLLUTE', + 'PREFIX' => "$prefix", + 'INSTALLDIRS'=> 'vendor', + 'dynamic_lib'=> {'OTHERLDFLAGS' => $lib}, + 'depend' => {'Pilot.c' => 'const-c.inc const-xs.inc'}, + 'clean' => {'FILES' => 'const-c.inc const-xs.inc'}, +); diff --git a/bindings/Perl/Pilot.bs b/bindings/Perl/Pilot.bs new file mode 100644 index 0000000..e69de29 diff --git a/bindings/Perl/Pilot.c b/bindings/Perl/Pilot.c new file mode 100644 index 0000000..0f8937c --- /dev/null +++ b/bindings/Perl/Pilot.c @@ -0,0 +1,7069 @@ +/* + * This file was generated automatically by ExtUtils::ParseXS version 2.2002 from the + * contents of Pilot.xs. Do not edit this file, edit Pilot.xs instead. + * + * ANY CHANGES MADE HERE WILL BE LOST! + * + */ + +#line 1 "Pilot.xs" +/* + * Pilot.xs - Interface pilot-link library with Perl. + * + * Copyright (C) 1997, 1998, Kenneth Albanowski + * + * 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 St, Fifth Floor, Boston, MA 02110-1301, USA. * + */ + +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" +#include "patchlevel.h" + +/* FIXME Hack to get around a perl macro problem with calling the type 'int + dirty;' in pi-mail.h and pi-todo.h. This originally showed up with perl + 5.6 and gcc-3.x, and was fixed in gcc, but now appears in perl 5.8 with + gcc-3.x. It smells like another internal macro being exposed into + userland. */ +#undef dirty + +#include "pi-macros.h" +#include "pi-buffer.h" +#include "pi-file.h" +#include "pi-datebook.h" +#include "pi-memo.h" +#include "pi-expense.h" +#include "pi-address.h" +#include "pi-todo.h" +#include "pi-mail.h" +#include "pi-socket.h" +#include "pi-dlp.h" +#include "pi-syspkt.h" +#include "pi-error.h" +#include "pi-version.h" + +#include "const-c.inc" + + +typedef unsigned char * CPTR; + +static unsigned char mybuf[0xffff]; +static pi_buffer_t pibuf = {NULL, 0, 0}; + +static AV * tmtoav (struct tm * t) { + AV * ret = newAV(); + + av_push(ret, newSViv(t->tm_sec)); + av_push(ret, newSViv(t->tm_min)); + av_push(ret, newSViv(t->tm_hour)); + av_push(ret, newSViv(t->tm_mday)); + av_push(ret, newSViv(t->tm_mon)); + av_push(ret, newSViv(t->tm_year)); + av_push(ret, newSViv(t->tm_wday)); + av_push(ret, newSViv(t->tm_yday)); + av_push(ret, newSViv(t->tm_isdst)); + + return ret; +} + +struct tm * avtotm (AV * av, struct tm * t) { + SV ** s; + t->tm_sec = (s = av_fetch(av, 0, 0)) ? SvIV(*s) : 0; + t->tm_min = (s = av_fetch(av, 1, 0)) ? SvIV(*s) : 0; + t->tm_hour = (s = av_fetch(av, 2, 0)) ? SvIV(*s) : 0; + t->tm_mday = (s = av_fetch(av, 3, 0)) ? SvIV(*s) : 0; + t->tm_mon = (s = av_fetch(av, 4, 0)) ? SvIV(*s) : 0; + t->tm_year = (s = av_fetch(av, 5, 0)) ? SvIV(*s) : 0; + t->tm_wday = (s = av_fetch(av, 6, 0)) ? SvIV(*s) : 0; + t->tm_yday = (s = av_fetch(av, 7, 0)) ? SvIV(*s) : 0; + t->tm_isdst = (s = av_fetch(av, 8, 0)) ? SvIV(*s) : 0; + + return t; +} + +#ifndef newRV_noinc +static SV * rv; +#define newRV_noinc(s) ((rv=newRV(s)), SvREFCNT_dec(s), rv) +#endif + +#if (PATCHLEVEL < 3) || ((PATCHLEVEL == 3) && (SUBVERSION < 16)) +#define sv_derived_from(x, y) sv_isobject((x)) +#endif + +extern char * printlong _((unsigned long val)); +extern unsigned long makelong _((char * c)); +SV * newSVChar4 _((unsigned long arg)); +unsigned long SvChar4 _((SV *arg)); + +typedef struct { + int errnop; + struct pi_file * pf; + SV * Class; +} PDA__Pilot__File; + +typedef struct DLP { + int errnop; + int socket; +} PDA__Pilot__DLP; + +typedef struct DLPDB { + SV * connection; + int socket; + int handle; + int errnop; + SV * dbname; + int dbmode; + int dbcard; + SV * Class; +} PDA__Pilot__DLP__DB; + +/* typedef PDA__Pilot__DLP__DB PDA__Pilot__DLP__ResourceDB; + typedef PDA__Pilot__DLP__DB PDA__Pilot__DLP__RecordDB; +*/ +typedef struct DBInfo DBInfo; +typedef struct PilotUser UserInfo; +typedef unsigned long Char4; +typedef int Result; + +SV * +newSVChar4(arg) + unsigned long arg; +{ + char * c = printlong(arg); + if((isalpha(c[0]) || (c[0] == ' ') || (c[0] == '_')) && + (isalpha(c[1]) || (c[1] == ' ') || (c[0] == '_')) && + (isalpha(c[2]) || (c[2] == ' ') || (c[0] == '_')) && + (isalpha(c[3]) || (c[3] == ' ') || (c[0] == '_'))) { + return newSVpv(c,4); + } else { + return newSViv(arg); + } +} + +unsigned long +SvChar4(arg) + SV * arg; +{ + if (SvIOKp(arg)) { + return SvIV(arg); + } else { + STRLEN len; + char * c = SvPV(arg, len); + if (len != 4) + croak("Char4 argument a string that isn't four bytes long"); + return makelong(c); + } +} + +#define pack_dbinfo(arg, var, failure) { \ + if (failure < 0) { \ + arg = &sv_undef; \ + self->errnop = failure; \ + } else { \ + HV * i = newHV(); \ + hv_store(i, "more", 4, newSViv(var.more), 0); \ + hv_store(i, "flagReadOnly", 12, newSViv((var.flags & dlpDBFlagReadOnly) !=0), 0); \ + hv_store(i, "flagResource", 12, newSViv((var.flags & dlpDBFlagResource) !=0), 0); \ + hv_store(i, "flagBackup", 10, newSViv((var.flags & dlpDBFlagBackup) !=0), 0); \ + hv_store(i, "flagOpen", 8, newSViv((var.flags & dlpDBFlagOpen) !=0), 0); \ + hv_store(i, "flagAppInfoDirty", 16, newSViv((var.flags & dlpDBFlagAppInfoDirty) !=0), 0); \ + hv_store(i, "flagNewer", 9, newSViv((var.flags & dlpDBFlagNewer) !=0), 0); \ + hv_store(i, "flagReset", 9, newSViv((var.flags & dlpDBFlagReset) !=0), 0); \ + hv_store(i, "flagCopyPrevention", 18, newSViv((var.flags & dlpDBFlagCopyPrevention) !=0), 0); \ + hv_store(i, "flagStream", 10, newSViv((var.flags & dlpDBFlagStream) !=0), 0); \ + hv_store(i, "flagExcludeFromSync", 19, newSViv((var.miscFlags & dlpDBMiscFlagExcludeFromSync)!=0), 0); \ + hv_store(i, "type", 4, newSVChar4(var.type), 0); \ + hv_store(i, "creator", 7, newSVChar4(var.creator), 0); \ + hv_store(i, "version", 7, newSViv(var.version), 0); \ + hv_store(i, "modnum", 6, newSViv(var.modnum), 0); \ + hv_store(i, "index", 5, newSViv(var.index), 0); \ + hv_store(i, "createDate", 10, newSViv(var.createDate), 0); \ + hv_store(i, "modifyDate", 10, newSViv(var.modifyDate), 0); \ + hv_store(i, "backupDate", 10, newSViv(var.backupDate), 0); \ + hv_store(i, "name", 4, newSVpv(var.name, 0), 0); \ + arg = newRV_noinc((SV*)i);\ + }\ + } + +#define unpack_dbinfo(arg, var)\ + if (SvROK(arg) && (SvTYPE(SvRV(arg))==SVt_PVHV)) {\ + HV * i = (HV*)SvRV(arg);\ + SV ** s;\ + var.more = (s = hv_fetch(i, "more", 4, 0)) ? SvIV(*s) : 0;\ + var.flags =\ + (((s = hv_fetch(i, "flagReadOnly", 12, 0)) && SvTRUE(*s)) ? dlpDBFlagReadOnly : 0) | \ + (((s = hv_fetch(i, "flagResource", 12, 0)) && SvTRUE(*s)) ? dlpDBFlagResource : 0) | \ + (((s = hv_fetch(i, "flagBackup", 10, 0)) && SvTRUE(*s)) ? dlpDBFlagBackup : 0) | \ + (((s = hv_fetch(i, "flagOpen", 8, 0)) && SvTRUE(*s)) ? dlpDBFlagOpen : 0) | \ + (((s = hv_fetch(i, "flagAppInfoDirty", 16, 0)) && SvTRUE(*s)) ? dlpDBFlagAppInfoDirty : 0)| \ + (((s = hv_fetch(i, "flagNewer", 9, 0)) && SvTRUE(*s)) ? dlpDBFlagNewer : 0) | \ + (((s = hv_fetch(i, "flagReset", 9, 0)) && SvTRUE(*s)) ? dlpDBFlagReset : 0) | \ + (((s = hv_fetch(i, "flagCopyPrevention", 18, 0)) && SvTRUE(*s)) ? dlpDBFlagCopyPrevention : 0) |\ + (((s = hv_fetch(i, "flagStream", 10, 0)) && SvTRUE(*s)) ? dlpDBFlagStream : 0) | \ + 0;\ + var.miscFlags =\ + (((s = hv_fetch(i, "flagExcludeFromSync", 19, 0)) && SvTRUE(*s)) ? dlpDBMiscFlagExcludeFromSync : 0);\ + var.type = (s = hv_fetch(i, "type", 4, 0)) ? SvChar4(*s) : 0;\ + var.creator = (s = hv_fetch(i, "creator", 7, 0)) ? SvChar4(*s) : 0;\ + var.version = (s = hv_fetch(i, "version", 7, 0)) ? SvIV(*s) : 0;\ + var.modnum = (s = hv_fetch(i, "modnum", 6, 0)) ? SvIV(*s) : 0;\ + var.index = (s = hv_fetch(i, "index", 5, 0)) ? SvIV(*s) : 0;\ + var.createDate = (s = hv_fetch(i, "createDate", 10, 0)) ? SvIV(*s) : 0;\ + var.modifyDate = (s = hv_fetch(i, "modifyDate", 10, 0)) ? SvIV(*s) : 0;\ + var.backupDate = (s = hv_fetch(i, "backupDate", 10, 0)) ? SvIV(*s) : 0;\ + if ((s = hv_fetch(i, "name", 4, 0)) ? SvPV(*s,na) : 0) \ + strncpy(var.name, SvPV(*s, na), sizeof(var.name)); \ + } else {\ + croak("argument is not a hash reference"); \ + } + +#define pack_userinfo(arg, var, failure) { \ + if (failure < 0) { \ + arg = &sv_undef; \ + self->errnop = failure; \ + } else { \ + HV * i = newHV(); \ + hv_store(i, "userID", 6, newSViv(var.userID), 0); \ + hv_store(i, "viewerID", 8, newSViv(var.viewerID), 0); \ + hv_store(i, "lastSyncPC", 10, newSViv(var.lastSyncPC), 0); \ + hv_store(i, "successfulSyncDate", 18, newSViv(var.successfulSyncDate), 0); \ + hv_store(i, "lastSyncDate", 12, newSViv(var.lastSyncDate), 0); \ + hv_store(i, "name", 4, newSVpv(var.username,0), 0); \ + hv_store(i, "password", 8, newSVpvn(var.password,var.passwordLength), 0); \ + arg = newRV_noinc((SV*)i); \ + }\ +} + +#define unpack_userinfo(arg, var)\ + if (SvROK(arg) && (SvTYPE(SvRV(arg))==SVt_PVHV)) {\ + HV * i = (HV*)SvRV(arg);\ + SV ** s;\ + var.userID = (s = hv_fetch(i, "userID", 6, 0)) ? SvIV(*s) : 0;\ + var.viewerID = (s = hv_fetch(i, "viewerID", 8, 0)) ? SvIV(*s) : 0;\ + var.lastSyncPC = (s = hv_fetch(i, "lastSyncPC", 10, 0)) ? SvIV(*s) : 0;\ + var.lastSyncDate = (s = hv_fetch(i, "lastSyncDate", 12, 0)) ? SvIV(*s) : 0;\ + var.successfulSyncDate = (s = hv_fetch(i, "successfulSyncDate", 18, 0)) ? SvIV(*s) : 0;\ + if ((s = hv_fetch(i, "name", 4, 0)) ? SvPV(*s,na) : 0)\ + strncpy(var.username, SvPV(*s, na), sizeof(var.username));\ + } else {\ + croak("argument is not a hash reference");\ + } + +#define PackAI {\ + HV * h;\ + if (SvRV(data) && (SvTYPE(h=(HV*)SvRV(data))==SVt_PVHV)) {\ + int count; \ + PUSHMARK(sp); \ + XPUSHs(data); \ + PUTBACK; \ + count = perl_call_method("Pack", G_SCALAR);\ + SPAGAIN; \ + if (count != 1) \ + croak("Unable to pack app block");\ + data = POPs; \ + PUTBACK; \ + } else { \ + croak("Unable to pack app block");\ + } \ +} + +#define ReturnReadAI(buf,size)\ + if (result >=0) {\ + if (self->Class) {\ + int count;\ + PUSHMARK(sp);\ + XPUSHs(self->Class);\ + XPUSHs(newSVpvn((char *) buf, size)); \ + PUTBACK;\ + count = perl_call_method("appblock", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to create appblock");\ + } else {\ + croak("Class not defined");\ + }\ + } else {\ + self->errnop = result;\ + PUSHs(&sv_undef);\ + } + +#define PackSI\ + {\ + HV * h;\ + if (SvRV(data) &&\ + (SvTYPE(h=(HV*)SvRV(data))==SVt_PVHV)) {\ + int count;\ + PUSHMARK(sp);\ + XPUSHs(data);\ + PUTBACK;\ + count = perl_call_method("Pack", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to pack sort block");\ + data = POPs;\ + PUTBACK;\ + }\ + else {\ + croak("Unable to pack sort block");\ + }\ + } + +#define ReturnReadSI(buf,size)\ + if (result >=0) {\ + if (self->Class) {\ + int count;\ + PUSHMARK(sp);\ + XPUSHs(self->Class);\ + XPUSHs(newSVpvn((char *) buf, size)); \ + PUTBACK;\ + count = perl_call_method("sortblock", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to create sortblock");\ + }\ + else {\ + croak("Class not defined");\ + }\ + } else {\ + self->errnop = result;\ + PUSHs(&sv_undef);\ + } + +#define PackRecord {\ + HV * h;\ + if (SvRV(data) &&\ + (SvTYPE(h=(HV*)SvRV(data))==SVt_PVHV)) {\ + int count;\ + SV ** s;\ + if (!(s = hv_fetch(h, "id", 2, 0)) || !SvOK(*s))\ + croak("record must contain id");\ + id = SvIV(*s);\ + attr = 0;\ + if (!(s = hv_fetch(h, "secret", 6, 0)) || !SvOK(*s))\ + croak("record must contain secret");\ + attr |= SvTRUE(*s) ? dlpRecAttrSecret : 0;\ + if (!(s = hv_fetch(h, "deleted", 7, 0)) || !SvOK(*s))\ + croak("record must contain deleted");\ + attr |= SvTRUE(*s) ? dlpRecAttrDeleted : 0;\ + if (!(s = hv_fetch(h, "modified", 8, 0)) || !SvOK(*s))\ + croak("record must contain modified");\ + attr |= SvTRUE(*s) ? dlpRecAttrDirty : 0;\ + if (!(s = hv_fetch(h, "busy", 4, 0)) || !SvOK(*s))\ + croak("record must contain busy");\ + attr |= SvTRUE(*s) ? dlpRecAttrBusy : 0;\ + if (!(s = hv_fetch(h, "archived", 8, 0)) || !SvOK(*s))\ + croak("record must contain archived");\ + attr |= SvTRUE(*s) ? dlpRecAttrArchived : 0;\ + if (!(s = hv_fetch(h, "category", 8, 0)) || !SvOK(*s))\ + croak("record must contain category");\ + category = SvIV(*s);\ + PUSHMARK(sp);\ + XPUSHs(data);\ + PUTBACK;\ + count = perl_call_method("Pack", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to pack record");\ + data = POPs;\ + PUTBACK;\ + } else {\ + croak("Unable to pack record");\ + }\ +} + +#define PackRaw {\ + HV * h;\ + if (SvRV(data) &&\ + (SvTYPE(h=(HV*)SvRV(data))==SVt_PVHV)) {\ + int count;\ + PUSHMARK(sp);\ + XPUSHs(data);\ + PUTBACK;\ + count = perl_call_method("Raw", G_SCALAR);\ + SPAGAIN;\ + if (count != 1) {\ + SV ** s = hv_fetch(h, "raw", 3, 0);\ + if (s)\ + data = *s;\ + } else {\ + data = POPs;\ + PUTBACK;\ + }\ + }\ +} + +#define ReturnReadRecord(buf,size)\ + if (result >=0) {\ + if (self->Class) {\ + int count;\ + SV * ret;\ + PUSHMARK(sp);\ + XPUSHs(self->Class);\ + XPUSHs(newSVpvn((char *) buf, size)); \ + XPUSHs(sv_2mortal(newSViv(id)));\ + XPUSHs(sv_2mortal(newSViv(attr)));\ + XPUSHs(sv_2mortal(newSViv(category)));\ + XPUSHs(sv_2mortal(newSViv(index)));\ + PUTBACK;\ + count = perl_call_method("record", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to create record");\ + ret = POPs;\ + PUTBACK;\ + PUSHs(ret);\ + }\ + else {\ + croak("Class not defined");\ + }\ + } else {\ + self->errnop = result;\ + PUSHs(&sv_undef);\ + } + +#define PackResource\ + {\ + HV * h;\ + if (SvRV(data) &&\ + (SvTYPE(h=(HV*)SvRV(data))==SVt_PVHV)) {\ + int count;\ + SV ** s;\ + if (!(s = hv_fetch(h, "id", 2, 0)) || !SvOK(*s))\ + croak("record must contain id");\ + id = SvIV(*s);\ + if (!(s = hv_fetch(h, "type", 4, 0)) || !SvOK(*s))\ + croak("record must contain type");\ + type = SvChar4(*s);\ + PUSHMARK(sp);\ + XPUSHs(data);\ + PUTBACK;\ + count = perl_call_method("Pack", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to pack resource");\ + data = POPs;\ + PUTBACK;\ + }\ + else {\ + croak("Unable to pack resource");\ + }\ + } + +#define ReturnReadResource(buf,size)\ + if (result >=0) {\ + if (self->Class) {\ + int count;\ + PUSHMARK(sp);\ + XPUSHs(self->Class);\ + XPUSHs(newSVpvn((char *) buf, size)); \ + XPUSHs(sv_2mortal(newSVChar4(type)));\ + XPUSHs(sv_2mortal(newSViv(id)));\ + XPUSHs(sv_2mortal(newSViv(index)));\ + PUTBACK;\ + count = perl_call_method("resource", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to create resource");\ + }\ + else {\ + croak("Class not defined");\ + }\ + } else {\ + self->errnop = result;\ + PUSHs(&sv_undef);\ + } + +#define PackPref\ + {\ + HV * h;\ + if (SvRV(data) &&\ + (SvTYPE(h=(HV*)SvRV(data))==SVt_PVHV)) {\ + int count;\ + SV ** s;\ + if (!(s = hv_fetch(h, "id", 2, 0)) || !SvOK(*s))\ + croak("record must contain id");\ + id = SvIV(*s);\ + if (!(s = hv_fetch(h, "creator", 7, 0)) || !SvOK(*s))\ + croak("record must contain type");\ + creator = SvChar4(*s);\ + if (!(s = hv_fetch(h, "version", 7, 0)) || !SvOK(*s))\ + croak("record must contain type");\ + version = SvIV(*s);\ + if (!(s = hv_fetch(h, "backup", 6, 0)) || !SvOK(*s))\ + croak("record must contain type");\ + backup = SvIV(*s);\ + PUSHMARK(sp);\ + XPUSHs(data);\ + PUTBACK;\ + count = perl_call_method("Pack", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to pack resource");\ + data = POPs;\ + PUTBACK;\ + }\ + else {\ + croak("Unable to pack resource");\ + }\ + } + +#define ReturnReadPref(buf,size)\ + if (result >=0) {\ + HV * h = perl_get_hv("PDA::Pilot::PrefClasses", 0);\ + SV ** s;\ + int count;\ + if (!h)\ + croak("PrefClasses doesn't exist");\ + s = hv_fetch(h, printlong(creator), 4, 0);\ + if (!s)\ + s = hv_fetch(h, "", 0, 0);\ + if (!s)\ + croak("Default PrefClass not defined");\ + PUSHMARK(sp);\ + XPUSHs(newSVsv(*s));\ + XPUSHs(newSVpvn((char *) buf, size)); \ + XPUSHs(sv_2mortal(newSVChar4(creator)));\ + XPUSHs(sv_2mortal(newSViv(id)));\ + XPUSHs(sv_2mortal(newSViv(version)));\ + XPUSHs(sv_2mortal(newSViv(backup)));\ + PUTBACK;\ + count = perl_call_method("pref", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to create resource");\ + } else {\ + self->errnop = result;\ + PUSHs(&sv_undef);\ + } + +void doUnpackCategory(HV * self, struct CategoryAppInfo * c) +{ + AV * e = newAV(); + int i; + + hv_store(self, "categoryRenamed", 15, newRV_noinc((SV*)e), 0); + + for (i=0;i<16;i++) { + av_push(e, newSViv(c->renamed[i])); + } + + e = newAV(); + hv_store(self, "categoryName", 12, newRV_noinc((SV*)e), 0); + + for (i=0;i<16;i++) { + av_push(e, newSVpv(c->name[i], 0)); + } + + e = newAV(); + hv_store(self, "categoryID", 10, newRV_noinc((SV*)e), 0); + + for (i=0;i<16;i++) { + av_push(e, newSViv(c->ID[i])); + } + + hv_store(self, "categoryLastUniqueID", 20, newSViv(c->lastUniqueID), 0); +} + + +void doPackCategory(HV * self, struct CategoryAppInfo * c) +{ + SV ** s; + AV * av; + int i; + + if ((s = hv_fetch(self, "categoryName", 12, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) + for (i=0;i<16;i++) + strncpy(c->name[i], (s=av_fetch(av, i, 0)) ? SvPV(*s,na) : "", 16); + else + for (i=0;i<16;i++) + strcpy(c->name[i], ""); + + for (i=0;i<16;i++) + c->name[i][15] = '\0'; + + if ((s = hv_fetch(self, "categoryID", 10, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) + for (i=0;i<16;i++) + c->ID[i] = (s=av_fetch(av, i, 0)) ? SvIV(*s) : 0; + else + for (i=0;i<16;i++) + c->ID[i] = 0; + + if ((s = hv_fetch(self, "categoryRenamed", 10, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) + for (i=0;i<16;i++) + c->renamed[i] = (s=av_fetch(av, i, 0)) ? SvIV(*s) : 0; + else + for (i=0;i<16;i++) + c->renamed[i] = 0; +} + +int SvList(SV * arg, char **list) +{ + int i; + char * str = SvPV(arg, na); + for (i=0;list[i];i++) + if (strcasecmp(list[i], str)==0) + return i; + if (SvPOKp(arg)) { + croak("Invalid value"); + } + return SvIV(arg); +} + +SV * newSVlist(int value, char **list) +{ + int i; + for (i=0;list[i];i++) + ; + if (value < i) + return newSVpv(list[value], 0); + else + return newSViv(value); +} + +#line 636 "Pilot.c" +#ifndef PERL_UNUSED_VAR +# define PERL_UNUSED_VAR(var) if (0) var = var +#endif + +#ifndef PERL_ARGS_ASSERT_CROAK_XS_USAGE +#define PERL_ARGS_ASSERT_CROAK_XS_USAGE assert(cv); assert(params) + +/* prototype to pass -Wmissing-prototypes */ +STATIC void +S_croak_xs_usage(pTHX_ const CV *const cv, const char *const params); + +STATIC void +S_croak_xs_usage(pTHX_ const CV *const cv, const char *const params) +{ + const GV *const gv = CvGV(cv); + + PERL_ARGS_ASSERT_CROAK_XS_USAGE; + + if (gv) { + const char *const gvname = GvNAME(gv); + const HV *const stash = GvSTASH(gv); + const char *const hvname = stash ? HvNAME(stash) : NULL; + + if (hvname) + Perl_croak(aTHX_ "Usage: %s::%s(%s)", hvname, gvname, params); + else + Perl_croak(aTHX_ "Usage: %s(%s)", gvname, params); + } else { + /* Pants. I don't think that it should be possible to get here. */ + Perl_croak(aTHX_ "Usage: CODE(0x%"UVxf")(%s)", PTR2UV(cv), params); + } +} +#undef PERL_ARGS_ASSERT_CROAK_XS_USAGE + +#ifdef PERL_IMPLICIT_CONTEXT +#define croak_xs_usage(a,b) S_croak_xs_usage(aTHX_ a,b) +#else +#define croak_xs_usage S_croak_xs_usage +#endif + +#endif + +#line 679 "Pilot.c" + +/* INCLUDE: Including 'const-xs.inc' from 'Pilot.xs' */ + + +XS(XS_PDA__Pilot_constant); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot_constant) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "sv"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { +#line 4 "const-xs.inc" +#ifdef dXSTARG + dXSTARG; /* Faster if we have it. */ +#else + dTARGET; +#endif + STRLEN len; + int type; + IV iv; + /* NV nv; Uncomment this if you need to return NVs */ + /* const char *pv; Uncomment this if you need to return PVs */ +#line 708 "Pilot.c" + SV * sv = ST(0); + const char * s = SvPV(sv, len); +#line 18 "const-xs.inc" + /* Change this to constant(aTHX_ s, len, &iv, &nv); + if you need to return both NVs and IVs */ + type = constant(aTHX_ s, len, &iv); + /* Return 1 or 2 items. First is error message, or undef if no error. + Second, if present, is found value */ + switch (type) { + case PERL_constant_NOTFOUND: + sv = + sv_2mortal(newSVpvf("%s is not a valid PDA::Pilot macro", s)); + PUSHs(sv); + break; + case PERL_constant_NOTDEF: + sv = sv_2mortal(newSVpvf( + "Your vendor has not defined PDA::Pilot macro %s, used", + s)); + PUSHs(sv); + break; + case PERL_constant_ISIV: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHi(iv); + break; + /* Uncomment this if you need to return NOs + case PERL_constant_ISNO: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHs(&PL_sv_no); + break; */ + /* Uncomment this if you need to return NVs + case PERL_constant_ISNV: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHn(nv); + break; */ + /* Uncomment this if you need to return PVs + case PERL_constant_ISPV: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHp(pv, strlen(pv)); + break; */ + /* Uncomment this if you need to return PVNs + case PERL_constant_ISPVN: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHp(pv, iv); + break; */ + /* Uncomment this if you need to return SVs + case PERL_constant_ISSV: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHs(sv); + break; */ + /* Uncomment this if you need to return UNDEFs + case PERL_constant_ISUNDEF: + break; */ + /* Uncomment this if you need to return UVs + case PERL_constant_ISUV: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHu((UV)iv); + break; */ + /* Uncomment this if you need to return YESs + case PERL_constant_ISYES: + EXTEND(SP, 1); + PUSHs(&PL_sv_undef); + PUSHs(&PL_sv_yes); + break; */ + default: + sv = sv_2mortal(newSVpvf( + "Unexpected return type %d while processing PDA::Pilot macro %s, used", + type, s)); + PUSHs(sv); + } +#line 785 "Pilot.c" + PUTBACK; + return; + } +} + + +/* INCLUDE: Returning to 'Pilot.xs' from 'const-xs.inc' */ + + +XS(XS_PDA__Pilot__Appointment_Unpack); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__Appointment_Unpack) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "record"); + { + SV * record = ST(0); + SV * RETVAL; +#line 637 "Pilot.xs" + { + STRLEN len; + int i; + AV * e; + HV * ret, *h; + struct Appointment a; + char *str; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + if (!SvPOK(record)) { + croak("Not a string!?"); + } + str = SvPV(record,len); + if (len > 0) { /* len == 0 when the record has the deleted flag set */ + pi_buffer_clear(&pibuf); + if (!pi_buffer_append(&pibuf, str, len)) { + croak("Unable to reallocate buffer"); + } + if (unpack_Appointment(&a, &pibuf, datebook_v1) < 0) { + croak("unpack_Appointment failed"); + } + + hv_store(ret, "event", 5, newSViv(a.event), 0); + hv_store(ret, "begin", 5, newRV_noinc((SV*)tmtoav(&a.begin)), 0); + + if (!a.event) { + hv_store(ret, "end", 3, newRV_noinc((SV*)tmtoav(&a.end)), 0); + } + + if (a.alarm) { + HV * alarm = newHV(); + hv_store(ret, "alarm", 5, newRV_noinc((SV*)alarm), 0); + + hv_store(alarm, "advance", 7, newSViv(a.advance), 0); + hv_store(alarm, "units", 5, newSVpv(( + (a.advanceUnits == 0) ? "minutes" : /* Minutes */ + (a.advanceUnits == 1) ? "hours" : /* Hours */ + (a.advanceUnits == 2) ? "days" : /* Days */ + 0), 0), 0); + if (a.advanceUnits > 2) { + warn("Invalid advance unit %d encountered", a.advanceUnits); + } + } + if (a.repeatType) { + HV * repeat = newHV(); + hv_store(ret, "repeat", 6, newRV_noinc((SV*)repeat), 0); + + hv_store(repeat, "type", 4, newSVpv(DatebookRepeatTypeNames[a.repeatType],0), 0); + hv_store(repeat, "frequency", 9, newSViv(a.repeatFrequency), 0); + if (a.repeatType == repeatMonthlyByDay) + hv_store(repeat, "day", 3, newSViv(a.repeatDay), 0); + else if (a.repeatType == repeatWeekly) { + e = newAV(); + hv_store(repeat, "days", 4, newRV_noinc((SV*)e), 0); + for (i=0;i<7;i++) + av_push(e,newSViv(a.repeatDays[i])); + } + hv_store(repeat, "weekstart", 9, newSViv(a.repeatWeekstart), 0); + if (!a.repeatForever) + hv_store(repeat, "end", 3, newRV_noinc((SV*)tmtoav(&a.repeatEnd)),0); + } + + if (a.exceptions) { + e = newAV(); + hv_store(ret, "exceptions", 10, newRV_noinc((SV*)e), 0); + for (i=0;i 254) + warn("Alarm advance value %d out of range", a.advance); + a.alarm = 1; + } else { + a.alarm = 0; + a.advance = 0; + a.advanceUnits = 0; + } + + + if ((s = hv_fetch(h, "repeat", 6, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(SvRV(*s))==SVt_PVHV)) { + HV * h2 = (HV*)SvRV(*s); + int i; + a.repeatType = (s = hv_fetch(h2, "type", 4, 0)) ? SvList(*s, DatebookRepeatTypeNames) : 0; + a.repeatFrequency = (s = hv_fetch(h2, "frequency", 9, 0)) ? SvIV(*s) : 0; + a.repeatDay = 0; + for(i=0;i<7;i++) + a.repeatDays[i] = 0; + if (a.repeatType == repeatMonthlyByDay ) { + a.repeatDay = (s = hv_fetch(h2, "day", 3, 0)) ? SvIV(*s) : 0; + } else if (a.repeatType == repeatWeekly) { + if ((s = hv_fetch(h2, "days", 4, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(SvRV(*s))==SVt_PVAV)) { + int i; + AV * a2 = (AV*)SvRV(*s); + for (i=0;i<7;i++) + if ((s = av_fetch(a2, i, 0))) + a.repeatDays[i] = SvIV(*s); + } + } + a.repeatWeekstart = (s = hv_fetch(h2, "weekstart", 9, 0)) ? SvIV(*s) : 0; + if ((s = hv_fetch(h2, "end", 3, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(SvRV(*s))==SVt_PVAV)) { + avtotm((AV*)SvRV(*s), &a.repeatEnd); + a.repeatForever = 0; + } else { + a.repeatForever = 1; + } + } else { + a.repeatType = 0; + a.repeatForever = 0; + a.repeatFrequency = 0; + a.repeatDay = 0; + a.repeatWeekstart = 0; + memset(&a.repeatEnd,'\0', sizeof(struct tm)); + } + + a.exceptions = 0; + a.exception = 0; + if ((s = hv_fetch(h, "exceptions", 10, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(SvRV(*s))==SVt_PVAV)) { + int i; + AV * a2 = (AV*)SvRV(*s); + if (av_len(a2)>-1) { + a.exceptions = av_len(a2)+1; + a.exception = malloc(sizeof(struct tm)*a.exceptions); + for (i=0;i0) { + + doUnpackCategory(ret, &a.category); + + hv_store(ret, "startOfWeek", 11, newSViv(a.startOfWeek), 0); + } + + } +#line 1109 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__Appointment_PackAppBlock); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__Appointment_PackAppBlock) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "record"); + { + SV * record = ST(0); + SV * RETVAL; +#line 915 "Pilot.xs" + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct AppointmentAppInfo a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + doPackCategory(h, &a.category); + + if ((s = hv_fetch(h, "startOfWeek", 11, 0))) + a.startOfWeek = SvIV(*s); + else + a.startOfWeek = 0; + + len = pack_AppointmentAppInfo(&a, (unsigned char *) mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } +#line 1157 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__ToDo_Unpack); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__ToDo_Unpack) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "record"); + { + SV * record = ST(0); + SV * RETVAL; +#line 950 "Pilot.xs" + { + STRLEN len; + int i; + AV * e; + HV * ret; + struct ToDo a; + char *str; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + str = SvPV(record,len); + if (len > 0) { /* len == 0 if deleted flag is set */ + pi_buffer_clear(&pibuf); + if (!pi_buffer_append(&pibuf, str, len)) { + croak("Unable to reallocate buffer"); + } + if (unpack_ToDo(&a, &pibuf, todo_v1) < 0) { + croak("unpack_ToDo failed"); + } + + if (!a.indefinite) + hv_store(ret, "due", 3, newRV_noinc((SV*)tmtoav(&a.due)), 0); + hv_store(ret, "priority", 8, newSViv(a.priority), 0); + hv_store(ret, "complete", 8, newSViv(a.complete), 0); + if (a.description) + hv_store(ret, "description", 11, newSVpv((char*)a.description,0), 0); + if (a.note) + hv_store(ret, "note", 4, newSVpv((char*)a.note,0), 0); + + free_ToDo(&a); + } + } +#line 1223 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__ToDo_Pack); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__ToDo_Pack) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "record"); + { + SV * record = ST(0); + SV * RETVAL; +#line 1001 "Pilot.xs" + { + SV ** s; + HV * h; + struct ToDo a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else if ((s=hv_fetch(h, "deleted", 7, 0)) && SvOK(*s) && SvTRUE(*s) && + (s=hv_fetch(h, "archived", 8, 0)) && SvOK(*s) && !SvTRUE(*s)) { + RETVAL = newSVpv("",0); + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + else { + + a.priority = (s = hv_fetch(h, "priority", 8, 0)) ? SvIV(*s) : 0; + a.complete = (s = hv_fetch(h, "complete", 8, 0)) ? SvIV(*s) : 0; + if ((s = hv_fetch(h, "due", 3, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(SvRV(*s))==SVt_PVAV)) { + avtotm((AV*)SvRV(*s), &a.due); + a.indefinite = 0; + } + else { + memset(&a.due,'\0', sizeof(struct tm)); + a.indefinite = 1; + } + + a.description = (s = hv_fetch(h, "description", 11, 0)) ? SvPV(*s,na) : 0; + a.note = (s = hv_fetch(h, "note", 4, 0)) ? SvPV(*s,na) : 0; + + if (pack_ToDo(&a, &pibuf, todo_v1) < 0) { + croak("pack_ToDo failed"); + } + + RETVAL = newSVpvn((char *) pibuf.data, pibuf.used); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } +#line 1282 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__ToDo_UnpackAppBlock); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__ToDo_UnpackAppBlock) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "record"); + { + SV * record = ST(0); + SV * RETVAL; +#line 1046 "Pilot.xs" + { + STRLEN len; + AV * e; + HV * ret; + int i; + struct ToDoAppInfo a; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (unpack_ToDoAppInfo(&a, (CPTR)SvPV(record, na), len)>0) { + + doUnpackCategory(ret, &a.category); + + hv_store(ret, "dirty", 5, newSViv(a.dirty), 0); + + hv_store(ret, "sortByPriority", 14, newSViv(a.sortByPriority), 0); + } + } +#line 1335 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__ToDo_PackAppBlock); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__ToDo_PackAppBlock) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "record"); + { + SV * record = ST(0); + SV * RETVAL; +#line 1084 "Pilot.xs" + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct ToDoAppInfo a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + doUnpackCategory(h, &a.category); + + + doPackCategory(h, &a.category); + + a.dirty = (s = hv_fetch(h, "dirty", 5, 0)) ? SvIV(*s) : 0; + a.sortByPriority = (s = hv_fetch(h, "sortByPriority", 14, 0)) ? SvIV(*s) : 0; + + len = pack_ToDoAppInfo(&a, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } +#line 1384 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__Address_Unpack); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__Address_Unpack) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "record"); + { + SV * record = ST(0); + SV * RETVAL; +#line 1120 "Pilot.xs" + { + STRLEN len; + int i; + AV * e; + HV * ret; + struct Address a; + char *str; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + str = SvPV(record,len); + if (len > 0) { /* len == 0 when deleted flag is set */ + pi_buffer_clear(&pibuf); + if (!pi_buffer_append(&pibuf, str, len)) { + croak("Unable to reallocate buffer"); + } + if (unpack_Address(&a, &pibuf, address_v1) < 0) { + croak("unpack_Address failed"); + } + + e = newAV(); + hv_store(ret, "phoneLabel", 10, newRV_noinc((SV*)e), 0); + + for (i=0;i<5;i++) { + av_push(e, newSViv(a.phoneLabel[i])); + } + + e = newAV(); + hv_store(ret, "entry", 5, newRV_noinc((SV*)e), 0); + + for (i=0;i<19;i++) { + av_push(e, a.entry[i] ? newSVpv(a.entry[i],0) : &sv_undef); + } + + hv_store(ret, "showPhone", 9, newSViv(a.showPhone), 0); + + free_Address(&a); + } + } +#line 1457 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__Address_Pack); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__Address_Pack) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "record"); + { + SV * record = ST(0); + SV * RETVAL; +#line 1178 "Pilot.xs" + { + SV ** s; + HV * h; + AV * av; + int i; + struct Address a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else if ((s=hv_fetch(h, "deleted", 7, 0)) && SvOK(*s) && SvTRUE(*s) && + (s=hv_fetch(h, "archived", 8, 0)) && SvOK(*s) && !SvTRUE(*s)) { + RETVAL = newSVpv("",0); + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + else { + + if ((s = hv_fetch(h, "phoneLabel", 10, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) + for (i=0;i<5;i++) + a.phoneLabel[i] = ((s=av_fetch(av, i, 0)) && SvOK(*s)) ? SvIV(*s) : 0; + else + for (i=0;i<5;i++) + a.phoneLabel[i] = 0; + + if ((s = hv_fetch(h, "entry", 5, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) + for (i=0;i<19;i++) + a.entry[i] = ((s=av_fetch(av, i, 0)) && SvOK(*s)) ? SvPV(*s,na) : 0; + else + for (i=0;i<19;i++) + a.entry[i] = 0; + + if ((s = hv_fetch(h, "showPhone", 9, 0))) + a.showPhone = SvIV(*s); + else + a.showPhone = 0; + + if (pack_Address(&a, &pibuf, address_v1) < 0) { + croak("pack_Address failed"); + } + + RETVAL = newSVpvn((char *) pibuf.data, pibuf.used); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } +#line 1523 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__Address_UnpackAppBlock); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__Address_UnpackAppBlock) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "record"); + { + SV * record = ST(0); + SV * RETVAL; +#line 1230 "Pilot.xs" + { + STRLEN len; + AV * e; + HV * ret; + int i; + struct AddressAppInfo a; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (unpack_AddressAppInfo(&a, (CPTR)SvPV(record, na), len)>0) { + + doUnpackCategory(ret, &a.category); + + e = newAV(); + hv_store(ret, "labelRenamed", 12, newRV_noinc((SV*)e), 0); + + for (i=0;i<22;i++) { + av_push(e, newSViv(a.labelRenamed[i])); + } + + hv_store(ret, "country", 7, newSViv(a.country), 0); + hv_store(ret, "sortByCompany", 13, newSViv(a.sortByCompany), 0); + + e = newAV(); + hv_store(ret, "label", 5, newRV_noinc((SV*)e), 0); + + for (i=0;i<22;i++) { + av_push(e, newSVpv(a.labels[i],0)); + } + + e = newAV(); + hv_store(ret, "phoneLabel", 10, newRV_noinc((SV*)e), 0); + + for (i=0;i<8;i++) { + av_push(e, newSVpv(a.phoneLabels[i],0)); + } + + } + } +#line 1597 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__Address_PackAppBlock); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__Address_PackAppBlock) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "record"); + { + SV * record = ST(0); + SV * RETVAL; +#line 1289 "Pilot.xs" + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct AddressAppInfo a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + doPackCategory(h, &a.category); + + if ((s = hv_fetch(h, "labelRenamed", 12, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) + for (i=0;i<22;i++) a.labelRenamed[i] = (s=av_fetch(av, i, 0)) ? SvIV(*s) : 0; + else + for (i=0;i<22;i++) a.labelRenamed[i] = 0; + + a.country = (s = hv_fetch(h, "country", 7, 0)) ? SvIV(*s) : 0; + a.sortByCompany = (s = hv_fetch(h, "sortByCompany", 13, 0)) ? SvIV(*s) : 0; + + if ((s = hv_fetch(h, "label", 5, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) + for (i=0;i<22;i++) strncpy(a.labels[i], (s=av_fetch(av, i, 0)) ? SvPV(*s,na) : "", 16); + else + for (i=0;i<22;i++) a.labels[i][0] = 0; + for (i=0;i<22;i++) a.labels[i][15] = 0; + + if ((s = hv_fetch(h, "phoneLabel", 10, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) + for (i=0;i<8;i++) strncpy(a.phoneLabels[i], (s=av_fetch(av, i, 0)) ? SvPV(*s,na) : "", 16); + else + for (i=0;i<8;i++) a.phoneLabels[i][0] = 0; + for (i=0;i<8;i++) a.phoneLabels[i][15] = 0; + + len = pack_AddressAppInfo(&a, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } +#line 1660 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__Memo_Unpack); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__Memo_Unpack) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "record"); + { + SV * record = ST(0); + SV * RETVAL; +#line 1339 "Pilot.xs" + { + STRLEN len; + int i; + AV * e; + HV * ret; + struct Memo a; + char *str; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + str = SvPV(record,len); + if (len > 0) { /* len == 0 if deleted flag is set */ + pi_buffer_clear(&pibuf); + if (!pi_buffer_append(&pibuf, str, len)) { + croak("Unable to reallocate buffer"); + } + if (unpack_Memo(&a, &pibuf, memo_v1) < 0) { + croak("unpack_Memo failed"); + } + + + hv_store(ret, "text", 4, newSVpv(a.text,0), 0); + + free_Memo(&a); + } + } +#line 1720 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__Memo_Pack); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__Memo_Pack) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "record"); + { + SV * record = ST(0); + SV * RETVAL; +#line 1384 "Pilot.xs" + { + SV ** s; + HV * h; + struct Memo a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else if ((s=hv_fetch(h, "deleted", 7, 0)) && SvOK(*s) && SvTRUE(*s) && + (s=hv_fetch(h, "archived", 8, 0)) && SvOK(*s) && !SvTRUE(*s)) { + RETVAL = newSVpv("",0); + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + else { + + if ((s = hv_fetch(h, "text", 4, 0))) + a.text = SvPV(*s,na); + else + a.text = 0; + + if (pack_Memo(&a, &pibuf, memo_v1) < 0) { + croak("pack_Memo failed"); + } + + RETVAL = newSVpvn((char *) pibuf.data, pibuf.used); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } +#line 1770 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__Memo_UnpackAppBlock); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__Memo_UnpackAppBlock) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "record"); + { + SV * record = ST(0); + SV * RETVAL; +#line 1419 "Pilot.xs" + { + STRLEN len; + AV * e; + HV * ret; + int i; + struct MemoAppInfo a; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (unpack_MemoAppInfo(&a, (CPTR)SvPV(record, na), len)>0) { + + doUnpackCategory(ret, &a.category); + + hv_store(ret, "sortByAlpha", 11, newSViv(a.sortByAlpha), 0); + } + } +#line 1821 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__Memo_PackAppBlock); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__Memo_PackAppBlock) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "record"); + { + SV * record = ST(0); + SV * RETVAL; +#line 1455 "Pilot.xs" + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct MemoAppInfo a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + doPackCategory(h, &a.category); + + + if ((s = hv_fetch(h, "sortByAlpha", 11, 0))) + a.sortByAlpha = SvIV(*s); + else + a.sortByAlpha = 0; + + len = pack_MemoAppInfo(&a, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } +#line 1870 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__Expense_Unpack); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__Expense_Unpack) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "record"); + { + SV * record = ST(0); + SV * RETVAL; +#line 1491 "Pilot.xs" + { + STRLEN len; + int i; + HV * ret; + struct Expense e; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (len > 0) { /* len == 0 if deleted flag is set */ + if (unpack_Expense(&e, (CPTR)SvPV(record, na), len)>0) { + + hv_store(ret, "date", 4, newRV_noinc((SV*)tmtoav(&e.date)), 0); + hv_store(ret, "type", 4, newSVlist(e.type,ExpenseTypeNames),0); + hv_store(ret, "payment", 7, newSVlist(e.payment,ExpensePaymentNames),0); + hv_store(ret, "currency", 8, newSViv(e.currency),0); + if (e.amount) + hv_store(ret, "amount", 6, newSVpv(e.amount,0), 0); + if (e.vendor) + hv_store(ret, "vendor", 6, newSVpv(e.vendor,0), 0); + if (e.city) + hv_store(ret, "city", 4, newSVpv(e.city,0), 0); + if (e.note) + hv_store(ret, "note", 4, newSVpv(e.note,0), 0); + if (e.attendees) + hv_store(ret, "attendees", 9, newSVpv(e.attendees,0), 0); + + free_Expense(&e); + } + } + } +#line 1935 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__Expense_Pack); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__Expense_Pack) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "record"); + { + SV * record = ST(0); + SV * RETVAL; +#line 1541 "Pilot.xs" + { + STRLEN len; + SV ** s; + HV * h; + struct Expense e; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else if ((s=hv_fetch(h, "deleted", 7, 0)) && SvOK(*s) && SvTRUE(*s) && + (s=hv_fetch(h, "archived", 8, 0)) && SvOK(*s) && !SvTRUE(*s)) { + RETVAL = newSVpv("",0); + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + else { + + if ((s = hv_fetch(h, "type", 4, 0))) + e.type = SvList(*s,ExpenseTypeNames); + else + croak("must have type"); + if ((s = hv_fetch(h, "payment", 7, 0))) + e.payment = SvList(*s,ExpensePaymentNames); + else + croak("must have payment"); + if ((s = hv_fetch(h, "currency", 8, 0))) + e.currency = SvIV(*s); + else + croak("must have currency"); + + if ((s = hv_fetch(h, "date", 4, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(SvRV(*s))==SVt_PVAV)) + avtotm((AV*)SvRV(*s), &e.date); + else + croak("expense record must contain date"); + if ((s = hv_fetch(h, "amount", 6, 0))) e.amount = SvPV(*s,na); + else e.amount = 0; + if ((s = hv_fetch(h, "vendor", 6, 0))) e.vendor = SvPV(*s,na); + else e.vendor = 0; + if ((s = hv_fetch(h, "city", 4, 0))) e.city = SvPV(*s,na); + else e.city = 0; + if ((s = hv_fetch(h, "attendess", 9, 0))) e.attendees = SvPV(*s,na); + else e.attendees = 0; + if ((s = hv_fetch(h, "note", 4, 0))) e.note = SvPV(*s,na); + else e.note = 0; + + len = pack_Expense(&e, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + + + } + } +#line 2009 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__Expense_UnpackAppBlock); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__Expense_UnpackAppBlock) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "record"); + { + SV * record = ST(0); + SV * RETVAL; +#line 1600 "Pilot.xs" + { + STRLEN len; + HV * ret; + AV * a; + int i; + struct ExpenseAppInfo e; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (unpack_ExpenseAppInfo(&e, (CPTR)SvPV(record, na), len)>0) { + + hv_store(ret, "sortOrder", 9, newSVlist(e.sortOrder,ExpenseSortNames),0); + a = newAV(); + hv_store(ret, "currencies", 10, newRV_noinc((SV*)a), 0); + for (i=0;i<4;i++) { + HV * h = newHV(); + hv_store(h, "name", 4, newSVpv(e.currencies[i].name, 0), 0); + hv_store(h, "symbol", 6, newSVpv(e.currencies[i].symbol, 0), 0); + hv_store(h, "rate", 4, newSVpv(e.currencies[i].rate, 0), 0); + av_store(a, i, (SV*)newRV_noinc((SV*)h)); + } + + doUnpackCategory(ret, &e.category); + } + } +#line 2069 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__Expense_PackAppBlock); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__Expense_PackAppBlock) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "record"); + { + SV * record = ST(0); + SV * RETVAL; +#line 1645 "Pilot.xs" + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct ExpenseAppInfo e; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + doPackCategory(h, &e.category); + + e.sortOrder = (s = hv_fetch(h, "sortOrder", 9, 0)) ? SvList(*s, ExpenseSortNames) : 0; + if ((s=hv_fetch(h, "currencies", 10, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) { + for(i=0;i<4;i++) { + HV * hv; + if ((s=av_fetch(av, i, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(hv=(HV*)SvRV(*s))==SVt_PVHV)) { + if (s = hv_fetch(hv, "name", 4, 0)) { + strncpy(e.currencies[i].name, SvPV(*s, na), 16); + e.currencies[i].name[15] = 0; + } + if (s = hv_fetch(hv, "symbol", 6, 0)) { + strncpy(e.currencies[i].symbol, SvPV(*s, na), 4); + e.currencies[i].symbol[3] = 0; + } + if (s = hv_fetch(hv, "rate", 4, 0)) { + strncpy(e.currencies[i].rate, SvPV(*s, na), 8); + e.currencies[i].rate[7] = 0; + } + } + } + } else + for(i=0;i<4;i++) { + e.currencies[i].symbol[0] = 0; + e.currencies[i].name[0] = 0; + e.currencies[i].rate[0] = 0; + } + + len = pack_ExpenseAppInfo(&e, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } +#line 2138 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__Expense_UnpackPref); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__Expense_UnpackPref) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "record"); + { + SV * record = ST(0); + SV * RETVAL; +#line 1699 "Pilot.xs" + { + STRLEN len; + AV * e; + HV * ret; + int i; + struct ExpensePref a; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (unpack_ExpensePref(&a, (CPTR)SvPV(record, na), len)>0) { + + hv_store(ret, "unitOfDistance", 14, newSVlist(a.unitOfDistance, ExpenseDistanceNames), 0); + hv_store(ret, "currentCategory", 15, newSViv(a.currentCategory), 0); + hv_store(ret, "defaultCurrency", 15, newSViv(a.defaultCurrency), 0); + hv_store(ret, "attendeeFont", 8, newSViv(a.attendeeFont), 0); + hv_store(ret, "showAllCategories", 17, newSViv(a.showAllCategories), 0); + hv_store(ret, "showCurrency", 12, newSViv(a.showCurrency), 0); + hv_store(ret, "saveBackup", 10, newSViv(a.saveBackup), 0); + hv_store(ret, "allowQuickFill", 14, newSViv(a.allowQuickFill), 0); + e = newAV(); + for (i=0;i<5;i++) + av_store(e, i, newSViv(a.currencies[i])); + hv_store(ret, "currencies", 10, (SV*)newRV_noinc((SV*)e), 0); + hv_store(ret, "noteFont", 8, newSViv(a.noteFont), 0); + } + } +#line 2199 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__Expense_PackPref); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__Expense_PackPref) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "record, id"); + { + SV * record = ST(0); + int id = (int)SvIV(ST(1)); + SV * RETVAL; +#line 1746 "Pilot.xs" + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct ExpensePref a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + a.unitOfDistance = (s = hv_fetch(h, "unitOfDistance", 14, 0)) ? SvList(*s, ExpenseDistanceNames) : 0; + a.currentCategory = (s=hv_fetch(h,"currentCategory",15,0)) ? SvIV(*s) : 0; + a.defaultCurrency = (s=hv_fetch(h,"defaultCurrency",15,0)) ? SvIV(*s) : 0; + a.attendeeFont = (s=hv_fetch(h,"attendeeFont",8,0)) ? SvIV(*s) : 0; + a.showAllCategories = (s=hv_fetch(h,"showAllCategories",17,0)) ? SvIV(*s) : 0; + a.showCurrency = (s=hv_fetch(h,"showCurrency",12,0)) ? SvIV(*s) : 0; + a.saveBackup = (s=hv_fetch(h,"saveBackup",10,0)) ? SvIV(*s) : 0; + a.allowQuickFill = (s=hv_fetch(h,"allowQuickFill",14,0)) ? SvIV(*s) : 0; + + if ((s=hv_fetch(h, "currencies", 10, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) { + for(i=0;i<5;i++) + a.currencies[i] = (s=av_fetch(av, i, 0)) ? SvIV(*s) : 0; + } else + for(i=0;i<5;i++) + a.currencies[i] = 0; + a.noteFont = (s=hv_fetch(h,"noteFont",8,0)) ? SvIV(*s) : 0; + + len = pack_ExpensePref(&a, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } +#line 2258 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__Mail_Unpack); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__Mail_Unpack) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "record"); + { + SV * record = ST(0); + SV * RETVAL; +#line 1791 "Pilot.xs" + { + STRLEN len; + int i; + AV * e; + HV * ret; + struct Mail a; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (len > 0) { /* len == 0 if deleted flag is set */ + if (unpack_Mail(&a, (CPTR)SvPV(record, na), len)>0) { + + if (a.subject) hv_store(ret, "subject", 7, newSVpv(a.subject,0), 0); + if (a.from) hv_store(ret, "from", 4, newSVpv(a.from,0), 0); + if (a.to) hv_store(ret, "to", 2, newSVpv(a.to,0), 0); + if (a.cc) hv_store(ret, "cc", 2, newSVpv(a.cc,0), 0); + if (a.bcc) hv_store(ret, "bcc", 3, newSVpv(a.bcc,0), 0); + if (a.replyTo) hv_store(ret, "replyTo", 7, newSVpv(a.replyTo,0), 0); + if (a.sentTo) hv_store(ret, "sentTo", 6, newSVpv(a.sentTo,0), 0); + if (a.body) hv_store(ret, "body", 4, newSVpv(a.body,0), 0); + + hv_store(ret, "read", 4, newSViv(a.read), 0); + hv_store(ret, "signature", 9, newSViv(a.signature), 0); + hv_store(ret, "confirmRead", 11, newSViv(a.confirmRead), 0); + hv_store(ret, "confirmDelivery", 15, newSViv(a.confirmDelivery), 0); + hv_store(ret, "priority", 8, newSViv(a.priority), 0); + hv_store(ret, "addressing", 10, newSViv(a.addressing), 0); + + if (a.dated) + hv_store(ret, "date", 4, newRV_noinc((SV*)tmtoav(&a.date)), 0); + + free_Mail(&a); + } + } + } +#line 2328 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__Mail_Pack); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__Mail_Pack) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "record"); + { + SV * record = ST(0); + SV * RETVAL; +#line 1846 "Pilot.xs" + { + STRLEN len; + SV ** s; + HV * h; + struct Mail a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else if ((s=hv_fetch(h, "deleted", 7, 0)) && SvOK(*s) && SvTRUE(*s) && + (s=hv_fetch(h, "archived", 8, 0)) && SvOK(*s) && !SvTRUE(*s)) { + RETVAL = newSVpv("",0); + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + else { + + a.subject = (s = hv_fetch(h, "subject", 7, 0)) ? SvPV(*s,na) : 0; + a.from = (s = hv_fetch(h, "from", 4, 0)) ? SvPV(*s,na) : 0; + a.to = (s = hv_fetch(h, "to", 2, 0)) ? SvPV(*s,na) : 0; + a.cc = (s = hv_fetch(h, "cc", 2, 0)) ? SvPV(*s,na) : 0; + a.bcc = (s = hv_fetch(h, "bcc", 3, 0)) ? SvPV(*s,na) : 0; + a.replyTo = (s = hv_fetch(h, "replyTo", 7, 0)) ? SvPV(*s,na) : 0; + a.sentTo = (s = hv_fetch(h, "sentTo", 6, 0)) ? SvPV(*s,na) : 0; + a.body = (s = hv_fetch(h, "body", 4, 0)) ? SvPV(*s,na) : 0; + + a.read = (s = hv_fetch(h, "read", 4, 0)) ? SvIV(*s) : 0; + a.signature = (s = hv_fetch(h, "signature", 9, 0)) ? SvIV(*s) : 0; + a.confirmRead = (s = hv_fetch(h, "confirmRead", 11, 0)) ? SvIV(*s) : 0; + a.confirmDelivery = (s = hv_fetch(h, "confirmDelivery", 15, 0)) ? SvIV(*s) : 0; + a.priority = (s = hv_fetch(h, "priority", 8, 0)) ? SvIV(*s) : 0; + a.addressing = (s = hv_fetch(h, "addressing", 10, 0)) ? SvIV(*s) : 0; + + a.dated = (s = hv_fetch(h, "date", 4, 0)) ? 1 : 0; + if (s && SvOK(*s) && SvRV(*s) && (SvTYPE(SvRV(*s))==SVt_PVAV)) avtotm((AV*)SvRV(*s), &a.date); + + len = pack_Mail(&a, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } +#line 2391 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__Mail_UnpackAppBlock); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__Mail_UnpackAppBlock) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "record"); + { + SV * record = ST(0); + SV * RETVAL; +#line 1894 "Pilot.xs" + { + STRLEN len; + AV * e; + HV * ret; + int i; + struct MailAppInfo a; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (unpack_MailAppInfo(&a, (CPTR)SvPV(record, na), len)>0) { + + doUnpackCategory(ret, &a.category); + + hv_store(ret, "sortOrder", 9, newSVlist(a.sortOrder, MailSortTypeNames), 0); + + hv_store(ret, "dirty", 5, newSViv(a.dirty), 0); + hv_store(ret, "unsentMessage", 13, newSViv(a.unsentMessage), 0); + } + } +#line 2445 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__Mail_PackAppBlock); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__Mail_PackAppBlock) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "record"); + { + SV * record = ST(0); + SV * RETVAL; +#line 1933 "Pilot.xs" + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct MailAppInfo a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + + doPackCategory(h, &a.category); + + if ((s = hv_fetch(h, "sortOrder", 9, 0))) + a.sortOrder = SvList(*s, MailSortTypeNames); + else + a.sortOrder = 0; + + a.dirty = (s=hv_fetch(h,"dirty",5,0)) ? SvIV(*s) : 0; + a.unsentMessage = (s=hv_fetch(h,"unsentMessage",13,0)) ? SvIV(*s) : 0; + + len = pack_MailAppInfo(&a, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } +#line 2497 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__Mail_UnpackSyncPref); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__Mail_UnpackSyncPref) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "record"); + { + SV * record = ST(0); + SV * RETVAL; +#line 1970 "Pilot.xs" + { + STRLEN len; + AV * e; + HV * ret; + int i; + struct MailSyncPref a; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (unpack_MailSyncPref(&a, (CPTR)SvPV(record, na), len)>0) { + + hv_store(ret, "syncType", 8, newSVlist(a.syncType, MailSyncTypeNames), 0); + hv_store(ret, "getHigh", 7, newSViv(a.getHigh), 0); + hv_store(ret, "getContaining", 13, newSViv(a.getContaining), 0); + hv_store(ret, "truncate", 8, newSViv(a.truncate), 0); + + if (a.filterTo) + hv_store(ret, "filterTo", 8, newSVpv(a.filterTo, 0), 0); + if (a.filterFrom) + hv_store(ret, "filterFrom", 10, newSVpv(a.filterFrom, 0), 0); + if (a.filterSubject) + hv_store(ret, "filterSubject", 13, newSVpv(a.filterSubject, 0), 0); + } + } +#line 2556 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__Mail_PackSyncPref); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__Mail_PackSyncPref) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "record, id"); + { + SV * record = ST(0); + int id = (int)SvIV(ST(1)); + SV * RETVAL; +#line 2015 "Pilot.xs" + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct MailSyncPref a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + if ((s = hv_fetch(h, "syncType", 8, 0))) + a.syncType = SvList(*s, MailSyncTypeNames); + else + a.syncType = 0; + + a.getHigh = (s=hv_fetch(h,"getHigh",7,0)) ? SvIV(*s) : 0; + a.getContaining = (s=hv_fetch(h,"getContaining",13,0)) ? SvIV(*s) : 0; + a.truncate = (s=hv_fetch(h,"truncate",8,0)) ? SvIV(*s) : 0; + + a.filterTo = (s=hv_fetch(h,"filterTo",8,0)) ? SvPV(*s,na) : 0; + a.filterFrom = (s=hv_fetch(h,"filterFrom",10,0)) ? SvPV(*s,na) : 0; + a.filterSubject = (s=hv_fetch(h,"filterSubject",13,0)) ? SvPV(*s,na) : 0; + + len = pack_MailSyncPref(&a, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } +#line 2611 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__Mail_UnpackSignaturePref); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__Mail_UnpackSignaturePref) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "record"); + { + SV * record = ST(0); + SV * RETVAL; +#line 2054 "Pilot.xs" + { + STRLEN len; + AV * e; + HV * ret; + int i; + struct MailSignaturePref a; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (unpack_MailSignaturePref(&a, (CPTR)SvPV(record, na), len)>0) { + + if (a.signature) + hv_store(ret, "signature", 9, newSVpv(a.signature, 0), 0); + } + } +#line 2661 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__Mail_PackSignaturePref); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__Mail_PackSignaturePref) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "record, id"); + { + SV * record = ST(0); + int id = (int)SvIV(ST(1)); + SV * RETVAL; +#line 2090 "Pilot.xs" + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct MailSignaturePref a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + a.signature = (s=hv_fetch(h,"signature",9,0)) ? SvPV(*s,na) : 0; + + len = pack_MailSignaturePref(&a, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } +#line 2705 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot_close); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot_close) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "socket"); + { + int socket = (int)SvIV(ST(0)); + int RETVAL; + dXSTARG; +#line 2120 "Pilot.xs" + RETVAL = pi_close(socket); +#line 2729 "Pilot.c" + XSprePUSH; PUSHi((IV)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot_write); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot_write) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "socket, msg"); + { + int socket = (int)SvIV(ST(0)); + SV * msg = ST(1); + int RETVAL; + dXSTARG; +#line 2129 "Pilot.xs" + { + STRLEN len; + SvPV(msg, len); + RETVAL = pi_write(socket,SvPV(msg,na),len); + } +#line 2757 "Pilot.c" + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot_read); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot_read) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "socket, len"); + { + int socket = (int)SvIV(ST(0)); + int len = (int)SvIV(ST(1)); + SV * RETVAL; +#line 2142 "Pilot.xs" + { + int result; + + result = pi_read(socket, &pibuf, len); + if (result >=0) + RETVAL = newSVpvn((char *) pibuf.data, result); + else + RETVAL = &sv_undef; + } +#line 2787 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot_socket); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot_socket) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 3) + croak_xs_usage(cv, "domain, type, protocol"); + { + int domain = (int)SvIV(ST(0)); + int type = (int)SvIV(ST(1)); + int protocol = (int)SvIV(ST(2)); + int RETVAL; + dXSTARG; +#line 2160 "Pilot.xs" + RETVAL = pi_socket(domain, type, protocol); +#line 2813 "Pilot.c" + XSprePUSH; PUSHi((IV)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot_listen); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot_listen) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "socket, backlog"); + { + int socket = (int)SvIV(ST(0)); + int backlog = (int)SvIV(ST(1)); + int RETVAL; + dXSTARG; +#line 2169 "Pilot.xs" + RETVAL = pi_listen(socket, backlog); +#line 2837 "Pilot.c" + XSprePUSH; PUSHi((IV)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot_errorText); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot_errorText) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "error"); + { + int error = (int)SvIV(ST(0)); + char * RETVAL; + dXSTARG; +#line 2177 "Pilot.xs" + RETVAL = dlp_strerror(error); +#line 2860 "Pilot.c" + sv_setpv(TARG, RETVAL); XSprePUSH; PUSHTARG; + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot_bind); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot_bind) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "socket, port"); + { + int socket = (int)SvIV(ST(0)); + char * port = (char *)SvPV_nolen(ST(1)); + int RETVAL; + dXSTARG; +#line 2186 "Pilot.xs" + RETVAL = pi_bind(socket, port); +#line 2884 "Pilot.c" + XSprePUSH; PUSHi((IV)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot_openPort); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot_openPort) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "port"); + { + char * port = (char *)SvPV_nolen(ST(0)); + int RETVAL; + dXSTARG; +#line 2194 "Pilot.xs" + { + int socket = pi_socket(PI_AF_PILOT, PI_SOCK_STREAM, PI_PF_DLP); + pi_bind(socket, port); + pi_listen(socket, 1); + RETVAL = socket; + } +#line 2912 "Pilot.c" + XSprePUSH; PUSHi((IV)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot_accept); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot_accept) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "socket"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + int socket = (int)SvIV(ST(0)); +#line 2207 "Pilot.xs" + { + struct pi_sockaddr a; + size_t len = sizeof(struct pi_sockaddr); + int result; + result = pi_accept(socket, (struct sockaddr*)&a, &len); + EXTEND(SP, 1); + if (result < 0) { + PUSHs(sv_newmortal()); + } else { + PDA__Pilot__DLP * x = malloc(sizeof(PDA__Pilot__DLP)); + SV * sv = newSViv((IV)(void*)x); + x->errnop = 0; + x->socket = result; + SV * rv = newRV_noinc(sv); + sv_bless(rv, gv_stashpv("PDA::Pilot::DLPPtr",0)); + PUSHs(sv_2mortal(rv)); + } + /* In list context, return error code as a second value */ + if (GIMME_V == G_ARRAY) { + EXTEND(SP, 1); + if (result < 0) { + PUSHs(sv_2mortal(newSViv(result))); + } else { + PUSHs(sv_newmortal()); + } + } + + } +#line 2962 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_DESTROY); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_DESTROY) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "db"); + { + PDA__Pilot__DLP__DB * db; + + if (SvROK(ST(0))) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + db = INT2PTR(PDA__Pilot__DLP__DB *,tmp); + } + else + Perl_croak(aTHX_ "%s: %s is not a reference", + "PDA::Pilot::DLP::DBPtr::DESTROY", + "db"); +#line 2242 "Pilot.xs" + if (db->Class) + SvREFCNT_dec(db->Class); + if (db->handle) + dlp_CloseDB(db->socket, db->handle); + if (db->dbname) + SvREFCNT_dec(db->dbname); + SvREFCNT_dec(db->connection); + free(db); +#line 2999 "Pilot.c" + } + XSRETURN_EMPTY; +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_errno); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_errno) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + { + PDA__Pilot__DLP__DB * self; + int RETVAL; + dXSTARG; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); +#line 2255 "Pilot.xs" + RETVAL = self->errnop; + self->errnop = 0; +#line 3029 "Pilot.c" + XSprePUSH; PUSHi((IV)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_palmos_errno); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_palmos_errno) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + { + PDA__Pilot__DLP__DB * self; + int RETVAL; + dXSTARG; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); +#line 2264 "Pilot.xs" + RETVAL = pi_palmos_error(self->socket); +#line 3059 "Pilot.c" + XSprePUSH; PUSHi((IV)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_class); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_class) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items < 1 || items > 2) + croak_xs_usage(cv, "self, name=0"); + { + PDA__Pilot__DLP__DB * self; + SV * name; + SV * RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); + + if (items < 2) + name = 0; + else { + name = ST(1); + } +#line 2275 "Pilot.xs" + { + SV ** s = 0; + HV * h; + if (name) { + STRLEN len; + h = perl_get_hv("PDA::Pilot::DBClasses", 0); + if (!h) + croak("DBClasses doesn't exist"); + if (SvOK(name)) { + (void)SvPV(name,len); + s = hv_fetch(h, SvPV(name,na), len, 0); + } + if (!s) + s = hv_fetch(h, "", 0, 0); + if (!s) + croak("Default DBClass not defined"); + SvREFCNT_inc(*s); + if (self->Class) + SvREFCNT_dec(self->Class); + self->Class = *s; + } + RETVAL = newSVsv(self->Class); + } +#line 3117 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_close); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_close) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + { + PDA__Pilot__DLP__DB * self; + Result RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); +#line 2305 "Pilot.xs" + RETVAL = dlp_CloseDB(self->socket, self->handle); + self->handle=0; +#line 3148 "Pilot.c" + ST(0) = sv_newmortal(); + if (RETVAL < 0) { + sv_setsv(ST(0), &sv_no); + self->errnop = RETVAL; + } else + sv_setsv(ST(0), &sv_yes); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_setSortBlock); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_setSortBlock) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "self, data"); + { + PDA__Pilot__DLP__DB * self; + SV * data = ST(1); + Result RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); +#line 2315 "Pilot.xs" + { + STRLEN len; + void * c; + PackSI; + c = SvPV(data, len); + RETVAL = dlp_WriteSortBlock(self->socket, self->handle, c, len); + } +#line 3189 "Pilot.c" + ST(0) = sv_newmortal(); + if (RETVAL < 0) { + sv_setsv(ST(0), &sv_no); + self->errnop = RETVAL; + } else + sv_setsv(ST(0), &sv_yes); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_getAppBlock); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_getAppBlock) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__DLP__DB * self; + SV * RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); +#line 2329 "Pilot.xs" + { + int result = dlp_ReadAppBlock(self->socket, self->handle, 0, -1, &pibuf); + ReturnReadAI(pibuf.data, result); + } +#line 3228 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_getSortBlock); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_getSortBlock) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__DLP__DB * self; + SV * RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); +#line 2338 "Pilot.xs" + { + int result = dlp_ReadSortBlock(self->socket,self->handle, 0, -1, &pibuf); + ReturnReadSI(pibuf.data, result); + } +#line 3262 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_setAppBlock); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_setAppBlock) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "self, data"); + { + PDA__Pilot__DLP__DB * self; + SV * data = ST(1); + Result RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); +#line 2348 "Pilot.xs" + { + STRLEN len; + void * c; + PackAI; + c = SvPV(data, len); + RETVAL = dlp_WriteAppBlock(self->socket, self->handle, c, len); + } +#line 3298 "Pilot.c" + ST(0) = sv_newmortal(); + if (RETVAL < 0) { + sv_setsv(ST(0), &sv_no); + self->errnop = RETVAL; + } else + sv_setsv(ST(0), &sv_yes); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_purge); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_purge) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + { + PDA__Pilot__DLP__DB * self; + Result RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); +#line 2362 "Pilot.xs" + RETVAL = dlp_CleanUpDatabase(self->socket, self->handle); +#line 3332 "Pilot.c" + ST(0) = sv_newmortal(); + if (RETVAL < 0) { + sv_setsv(ST(0), &sv_no); + self->errnop = RETVAL; + } else + sv_setsv(ST(0), &sv_yes); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_resetFlags); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_resetFlags) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + { + PDA__Pilot__DLP__DB * self; + Result RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); +#line 2370 "Pilot.xs" + RETVAL = dlp_ResetSyncFlags(self->socket, self->handle); +#line 3366 "Pilot.c" + ST(0) = sv_newmortal(); + if (RETVAL < 0) { + sv_setsv(ST(0), &sv_no); + self->errnop = RETVAL; + } else + sv_setsv(ST(0), &sv_yes); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_deleteCategory); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_deleteCategory) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "self, category"); + { + PDA__Pilot__DLP__DB * self; + int category = (int)SvIV(ST(1)); + Result RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); +#line 2379 "Pilot.xs" + RETVAL = dlp_DeleteCategory(self->socket, self->handle, category); +#line 3401 "Pilot.c" + ST(0) = sv_newmortal(); + if (RETVAL < 0) { + sv_setsv(ST(0), &sv_no); + self->errnop = RETVAL; + } else + sv_setsv(ST(0), &sv_yes); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_newRecord); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_newRecord) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items < 1 || items > 4) + croak_xs_usage(cv, "self, id=0, attr=0, cat=0"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__DLP__DB * self; + SV * id; + SV * attr; + SV * cat; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); + + if (items < 2) + id = 0; + else { + id = ST(1); + } + + if (items < 3) + attr = 0; + else { + attr = ST(2); + } + + if (items < 4) + cat = 0; + else { + cat = ST(3); + } +#line 2390 "Pilot.xs" + { + if (self->Class) { + int count; + PUSHMARK(sp); + XPUSHs(self->Class); + if (id) + XPUSHs(id); + if (attr) + XPUSHs(attr); + if (cat) + XPUSHs(cat); + PUTBACK; + count = perl_call_method("record", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to create record"); + } + else { + croak("Class not defined"); + } + } +#line 3477 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_newResource); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_newResource) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items < 1 || items > 3) + croak_xs_usage(cv, "self, type=0, id=0"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__DLP__DB * self; + SV * type; + SV * id; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); + + if (items < 2) + type = 0; + else { + type = ST(1); + } + + if (items < 3) + id = 0; + else { + id = ST(2); + } +#line 2418 "Pilot.xs" + { + if (self->Class) { + int count; + PUSHMARK(sp); + XPUSHs(self->Class); + if (type) + XPUSHs(type); + if (id) + XPUSHs(id); + PUTBACK; + count = perl_call_method("resource", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to create record"); + } + else { + croak("Class not defined"); + } + } +#line 3539 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_newAppBlock); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_newAppBlock) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__DLP__DB * self; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); +#line 2442 "Pilot.xs" + { + if (self->Class) { + int count; + PUSHMARK(sp); + XPUSHs(self->Class); + PUTBACK; + count = perl_call_method("appblock", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to create record"); + } + else { + croak("Class not defined"); + } + } +#line 3583 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_newSortBlock); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_newSortBlock) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__DLP__DB * self; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); +#line 2462 "Pilot.xs" + { + if (self->Class) { + int count; + PUSHMARK(sp); + XPUSHs(self->Class); + PUTBACK; + count = perl_call_method("sortblock", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to create record"); + } + else { + croak("Class not defined"); + } + } +#line 3627 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_newPref); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_newPref) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items < 1 || items > 5) + croak_xs_usage(cv, "self, id=0, version=0, backup=0, creator=0"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__DLP__DB * self; + SV * id; + SV * version; + SV * backup; + SV * creator; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); + + if (items < 2) + id = 0; + else { + id = ST(1); + } + + if (items < 3) + version = 0; + else { + version = ST(2); + } + + if (items < 4) + backup = 0; + else { + backup = ST(3); + } + + if (items < 5) + creator = 0; + else { + creator = ST(4); + } +#line 2486 "Pilot.xs" + { + if (!creator) { + int count; + PUSHMARK(sp); + XPUSHs(self->Class); + PUTBACK; + count = perl_call_method("creator", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to get creator"); + creator = POPs; + PUTBACK; + } + if (self->Class) { + int count; + PUSHMARK(sp); + XPUSHs(self->Class); + if (creator) + XPUSHs(creator); + if (id) + XPUSHs(id); + if (version) + XPUSHs(version); + if (backup) + XPUSHs(backup); + PUTBACK; + count = perl_call_method("pref", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to create record"); + } + else { + croak("Class not defined"); + } + } +#line 3719 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_getRecord); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_getRecord) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "self, index"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__DLP__DB * self; + int index = (int)SvIV(ST(1)); + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); +#line 2527 "Pilot.xs" + { + int attr, category; + unsigned long id; + int result; + + result = dlp_ReadRecordByIndex(self->socket, self->handle, index, &pibuf, &id, &attr, &category); + ReturnReadRecord(pibuf.data, pibuf.used); + } +#line 3757 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_moveCategory); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_moveCategory) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 3) + croak_xs_usage(cv, "self, fromcat, tocat"); + { + PDA__Pilot__DLP__DB * self; + int fromcat = (int)SvIV(ST(1)); + int tocat = (int)SvIV(ST(2)); + Result RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); +#line 2542 "Pilot.xs" + RETVAL = dlp_MoveCategory(self->socket, self->handle, fromcat, tocat); +#line 3788 "Pilot.c" + ST(0) = sv_newmortal(); + if (RETVAL < 0) { + sv_setsv(ST(0), &sv_no); + self->errnop = RETVAL; + } else + sv_setsv(ST(0), &sv_yes); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_deleteRecord); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_deleteRecord) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "self, id"); + { + PDA__Pilot__DLP__DB * self; + unsigned long id = (unsigned long)SvUV(ST(1)); + Result RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); +#line 2552 "Pilot.xs" + RETVAL = dlp_DeleteRecord(self->socket, self->handle, 0, id); +#line 3823 "Pilot.c" + ST(0) = sv_newmortal(); + if (RETVAL < 0) { + sv_setsv(ST(0), &sv_no); + self->errnop = RETVAL; + } else + sv_setsv(ST(0), &sv_yes); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_deleteRecords); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_deleteRecords) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + { + PDA__Pilot__DLP__DB * self; + Result RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); +#line 2561 "Pilot.xs" + RETVAL = dlp_DeleteRecord(self->socket, self->handle, 1, 0); +#line 3857 "Pilot.c" + ST(0) = sv_newmortal(); + if (RETVAL < 0) { + sv_setsv(ST(0), &sv_no); + self->errnop = RETVAL; + } else + sv_setsv(ST(0), &sv_yes); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_resetNext); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_resetNext) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + { + PDA__Pilot__DLP__DB * self; + Result RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); +#line 2569 "Pilot.xs" + RETVAL = dlp_ResetDBIndex(self->socket, self->handle); +#line 3891 "Pilot.c" + ST(0) = sv_newmortal(); + if (RETVAL < 0) { + sv_setsv(ST(0), &sv_no); + self->errnop = RETVAL; + } else + sv_setsv(ST(0), &sv_yes); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_getRecords); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_getRecords) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + { + PDA__Pilot__DLP__DB * self; + int RETVAL; + dXSTARG; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); +#line 2577 "Pilot.xs" + { + int result = dlp_ReadOpenDBInfo(self->socket, self->handle, &RETVAL); + if (result < 0) { + RETVAL = newSVsv(&sv_undef); + self->errnop = result; + } + } +#line 3932 "Pilot.c" + XSprePUSH; PUSHi((IV)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_getRecordIDs); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_getRecordIDs) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items < 1 || items > 2) + croak_xs_usage(cv, "self, sort=0"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__DLP__DB * self; + int sort; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); + + if (items < 2) + sort = 0; + else { + sort = (int)SvIV(ST(1)); + } +#line 2592 "Pilot.xs" + { + recordid_t * id = (recordid_t*)mybuf; + int result; + int start; + int count; + int i; + AV * list = newAV(); + + start = 0; + for(;;) { + result = dlp_ReadRecordIDList(self->socket, self->handle, sort, start, + 0xFFFF/sizeof(recordid_t), id, &count); + if (result < 0) { + self->errnop = result; + break; + } else { + for(i=0;isocket, self->handle, id, &pibuf, &index, &attr, &category); + ReturnReadRecord(pibuf.data, pibuf.used); + } +#line 4031 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_getNextModRecord); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_getNextModRecord) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items < 1 || items > 2) + croak_xs_usage(cv, "self, category=-1"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__DLP__DB * self; + int category; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); + + if (items < 2) + category = -1; + else { + category = (int)SvIV(ST(1)); + } +#line 2637 "Pilot.xs" + { + int result, attr, index; + unsigned long id; + + if (category == -1) + result = dlp_ReadNextModifiedRec(self->socket, self->handle, &pibuf, &id, &index, &attr, &category); + else + result = dlp_ReadNextModifiedRecInCategory(self->socket, self->handle, category, &pibuf, &id, &index, &attr); + ReturnReadRecord(pibuf.data, pibuf.used); + } +#line 4077 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_getNextRecord); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_getNextRecord) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "self, category"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__DLP__DB * self; + int category = (int)SvIV(ST(1)); + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); +#line 2653 "Pilot.xs" + { + int result, attr, index; + unsigned long id; + + result = dlp_ReadNextRecInCategory(self->socket, self->handle, category, &pibuf, &id, &index, &attr); + ReturnReadRecord(pibuf.data, pibuf.used); + } +#line 4114 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_setRecord); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_setRecord) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "self, data"); + { + PDA__Pilot__DLP__DB * self; + SV * data = ST(1); + unsigned long RETVAL; + dXSTARG; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); +#line 2666 "Pilot.xs" + { + STRLEN len; + unsigned long id; + int attr, category; + int result; + void * c; + PackRecord; + c = SvPV(data, len); + result = dlp_WriteRecord(self->socket, self->handle, attr, id, category, c, len, &RETVAL); + if (result<0) { + RETVAL = 0; + self->errnop = result; + } + } +#line 4158 "Pilot.c" + XSprePUSH; PUSHu((UV)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_setRecordRaw); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_setRecordRaw) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 5) + croak_xs_usage(cv, "self, data, id, attr, category"); + { + PDA__Pilot__DLP__DB * self; + unsigned long id = (unsigned long)SvUV(ST(2)); + int attr = (int)SvIV(ST(3)); + int category = (int)SvIV(ST(4)); + SV * data = ST(1); + unsigned long RETVAL; + dXSTARG; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); +#line 2691 "Pilot.xs" + { + STRLEN len; + int result; + void * c; + PackRaw; + c = SvPV(data, len); + result = dlp_WriteRecord(self->socket, self->handle, attr, id, category, c, len, &RETVAL); + if (result<0) { + RETVAL = 0; + self->errnop = result; + } + } +#line 4203 "Pilot.c" + XSprePUSH; PUSHu((UV)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_setResourceByID); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_setResourceByID) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 3) + croak_xs_usage(cv, "self, type, id"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__DLP__DB * self; + Char4 type; + int id = (int)SvIV(ST(2)); + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); + + { + if (SvIOKp(ST(1)) || SvNOKp(ST(1))) + type = SvIV(ST(1)); + else { + STRLEN len; + char * c = SvPV(ST(1), len); + type = makelong(c); + } + }; +#line 2712 "Pilot.xs" + { + int result, index; + + result = dlp_ReadResourceByType(self->socket, self->handle, type, id, &pibuf, &index); + ReturnReadResource(pibuf.data, pibuf.used); + } +#line 4250 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_getResource); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_getResource) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "self, index"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__DLP__DB * self; + int index = (int)SvIV(ST(1)); + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); +#line 2724 "Pilot.xs" + { + int result, id; + Char4 type; + + result = dlp_ReadResourceByIndex(self->socket, self->handle, index, &pibuf, &type, &id); + ReturnReadResource(pibuf.data, pibuf.used); + } +#line 4287 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_setResource); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_setResource) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "self, data"); + { + PDA__Pilot__DLP__DB * self; + SV * data = ST(1); + SV * RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); +#line 2737 "Pilot.xs" + { + STRLEN len; + int result; + Char4 type; + int id; + void * c; + PackResource; + c = SvPV(data, len); + result = dlp_WriteResource(self->socket, self->handle, type, id, c, len); + if (result < 0) { + self->errnop = result; + RETVAL = newSVsv(&sv_undef); + } else + RETVAL = newSViv(result); + } +#line 4331 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_deleteResource); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_deleteResource) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 3) + croak_xs_usage(cv, "self, type, id"); + { + PDA__Pilot__DLP__DB * self; + Char4 type; + int id = (int)SvIV(ST(2)); + Result RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); + + { + if (SvIOKp(ST(1)) || SvNOKp(ST(1))) + type = SvIV(ST(1)); + else { + STRLEN len; + char * c = SvPV(ST(1), len); + type = makelong(c); + } + }; +#line 2761 "Pilot.xs" + RETVAL = dlp_DeleteResource(self->socket, self->handle, 0, type, id); +#line 4373 "Pilot.c" + ST(0) = sv_newmortal(); + if (RETVAL < 0) { + sv_setsv(ST(0), &sv_no); + self->errnop = RETVAL; + } else + sv_setsv(ST(0), &sv_yes); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_deleteResources); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_deleteResources) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + { + PDA__Pilot__DLP__DB * self; + Result RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); +#line 2769 "Pilot.xs" + RETVAL = dlp_DeleteResource(self->socket, self->handle, 1, 0, 0); +#line 4407 "Pilot.c" + ST(0) = sv_newmortal(); + if (RETVAL < 0) { + sv_setsv(ST(0), &sv_no); + self->errnop = RETVAL; + } else + sv_setsv(ST(0), &sv_yes); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_getPref); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_getPref) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items < 1 || items > 3) + croak_xs_usage(cv, "self, id=0, backup=1"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__DLP__DB * self; + int id; + int backup; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); + + if (items < 2) + id = 0; + else { + id = (int)SvIV(ST(1)); + } + + if (items < 3) + backup = 1; + else { + backup = (int)SvIV(ST(2)); + } +#line 2779 "Pilot.xs" + { + Char4 creator; + int version, result; + size_t len; + SV * c, n, v; + int r; + if (self->Class) { + int count; + PUSHMARK(sp); + XPUSHs(self->Class); + PUTBACK; + count = perl_call_method("creator", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to get creator"); + creator = SvChar4(POPs); + PUTBACK; + } + if (pi_version(self->socket)< 0x101) + r = dlp_CloseDB(self->socket, self->handle); + result = dlp_ReadAppPreference(self->socket, creator, id, backup, 0xFFFF, mybuf, &len, &version); + if (pi_version(self->socket)< 0x101) + r = dlp_OpenDB(self->socket, self->dbcard, self->dbmode, SvPV(self->dbname,na), &self->handle); + ReturnReadPref(mybuf, len); + } +#line 4480 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_setPref); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_setPref) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "self, data"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__DLP__DB * self; + SV * data = ST(1); + SV * RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); +#line 2810 "Pilot.xs" + { + Char4 creator; + int id; + int version; + int backup; + STRLEN len; + int result; + void * buf; + int r; + PackPref; + buf = SvPV(data, len); + if (pi_version(self->socket)< 0x101) + r = dlp_CloseDB(self->socket, self->handle); + result = dlp_WriteAppPreference(self->socket, creator, id, backup, version, buf, len); + if (pi_version(self->socket)< 0x101) + r = dlp_OpenDB(self->socket, self->dbcard, self->dbmode, SvPV(self->dbname,na), &self->handle); + if (result < 0) { + self->errnop = result; + RETVAL = newSVsv(&sv_undef); + } else { + RETVAL = newSViv(result); + } + } +#line 4534 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__DLP__DBPtr_setPrefRaw); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLP__DBPtr_setPrefRaw) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items < 4 || items > 5) + croak_xs_usage(cv, "self, data, number, version, backup=1"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__DLP__DB * self; + SV * data = ST(1); + int number = (int)SvIV(ST(2)); + int version = (int)SvIV(ST(3)); + int backup; + SV * RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLP::DBPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP__DB *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLP::DBPtr"); + + if (items < 5) + backup = 1; + else { + backup = (int)SvIV(ST(4)); + } +#line 2842 "Pilot.xs" + { + STRLEN len; + Char4 creator; + int version, result; + void * buf; + PackRaw; + buf = SvPV(data, len); + if (self->Class) { + int count; + PUSHMARK(sp); + XPUSHs(self->Class); + PUTBACK; + count = perl_call_method("creator", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to get creator"); + creator = SvChar4(POPs); + PUTBACK; + } + result = dlp_WriteAppPreference(self->socket, creator, number, backup, version, buf, len); + if (result < 0) { + self->errnop = result; + RETVAL = newSVsv(&sv_undef); + } else { + RETVAL = newSViv(result); + } + } +#line 4601 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__DLPPtr_DESTROY); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_DESTROY) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + { + PDA__Pilot__DLP * self; + + if (SvROK(ST(0))) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = INT2PTR(PDA__Pilot__DLP *,tmp); + } + else + Perl_croak(aTHX_ "%s: %s is not a reference", + "PDA::Pilot::DLPPtr::DESTROY", + "self"); +#line 2877 "Pilot.xs" + if (self->socket) + pi_close(self->socket); + free(self); +#line 4633 "Pilot.c" + } + XSRETURN_EMPTY; +} + + +XS(XS_PDA__Pilot__DLPPtr_errno); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_errno) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + { + PDA__Pilot__DLP * self; + int RETVAL; + dXSTARG; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); +#line 2885 "Pilot.xs" + RETVAL = self->errnop; + self->errnop = 0; +#line 4663 "Pilot.c" + XSprePUSH; PUSHi((IV)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLPPtr_palmos_errno); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_palmos_errno) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + { + PDA__Pilot__DLP * self; + int RETVAL; + dXSTARG; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); +#line 2894 "Pilot.xs" + RETVAL = pi_palmos_error(self->socket); +#line 4693 "Pilot.c" + XSprePUSH; PUSHi((IV)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLPPtr_getTime); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_getTime) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + { + PDA__Pilot__DLP * self; + SV * RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); +#line 2902 "Pilot.xs" + { + time_t t; + int result = dlp_GetSysDateTime(self->socket, &t); + if (result < 0) { + self->errnop = result; + RETVAL = newSVsv(&sv_undef); + } else + RETVAL = newSViv(t); + } +#line 4730 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLPPtr_setTime); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_setTime) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "self, time"); + { + PDA__Pilot__DLP * self; + long time = (long)SvIV(ST(1)); + Result RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); +#line 2919 "Pilot.xs" + RETVAL = dlp_SetSysDateTime(self->socket, time); +#line 4761 "Pilot.c" + ST(0) = sv_newmortal(); + if (RETVAL < 0) { + sv_setsv(ST(0), &sv_no); + self->errnop = RETVAL; + } else + sv_setsv(ST(0), &sv_yes); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLPPtr_getSysInfo); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_getSysInfo) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + { + PDA__Pilot__DLP * self; + SV * RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); +#line 2927 "Pilot.xs" + { + struct SysInfo si; + int result = dlp_ReadSysInfo(self->socket, &si); + if (result < 0) { + self->errnop = result; + RETVAL = newSVsv(&sv_undef); + } else { + HV * i = newHV(); + hv_store(i, "romVersion", 10, newSViv(si.romVersion), 0);\ + hv_store(i, "locale", 6, newSViv(si.locale), 0);\ + hv_store(i, "product", 4, newSVpvn(si.prodID, si.prodIDLength), 0);\ + RETVAL = newRV((SV*)i); + } + } +#line 4808 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLPPtr_getCardInfo); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_getCardInfo) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items < 1 || items > 2) + croak_xs_usage(cv, "self, cardno=0"); + { + PDA__Pilot__DLP * self; + int cardno; + SV * RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); + + if (items < 2) + cardno = 0; + else { + cardno = (int)SvIV(ST(1)); + } +#line 2949 "Pilot.xs" + { + struct CardInfo c; + int result = dlp_ReadStorageInfo(self->socket, cardno, &c); + if (result < 0) { + self->errnop = result; + RETVAL = newSVsv(&sv_undef); + } else { + HV * i = newHV(); + hv_store(i, "card", 6, newSViv(c.card), 0);\ + hv_store(i, "version", 7, newSViv(c.version), 0);\ + hv_store(i, "created", 8, newSViv(c.creation), 0);\ + hv_store(i, "romSize", 7, newSViv(c.romSize), 0);\ + hv_store(i, "ramSize", 7, newSViv(c.ramSize), 0);\ + hv_store(i, "ramFree", 7, newSViv(c.ramFree), 0);\ + hv_store(i, "name", 4, newSVpv(c.name,0), 0);\ + hv_store(i, "manufacturer", 12, newSVpv(c.manufacturer,0), 0);\ + RETVAL = newRV((SV*)i); + } + } +#line 4863 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLPPtr_setUserInfo); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_setUserInfo) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "self, info"); + { + PDA__Pilot__DLP * self; + UserInfo info; + int RETVAL; + dXSTARG; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); + + unpack_userinfo(ST(1), info); +#line 2976 "Pilot.xs" + RETVAL = dlp_WriteUserInfo(self->socket, &info); +#line 4897 "Pilot.c" + XSprePUSH; PUSHi((IV)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLPPtr_getBattery); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_getBattery) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__DLP * self; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); +#line 2984 "Pilot.xs" + { + int warn, critical, ticks, kind, AC; + unsigned long voltage; + int result; + struct RPC_params p; + + PackRPC(&p,0xA0B6, RPC_IntReply, + RPC_Byte(0), RPC_ShortPtr(&warn), RPC_ShortPtr(&critical), + RPC_ShortPtr(&ticks), RPC_BytePtr(&kind), RPC_BytePtr(&AC), RPC_End); + + result = dlp_RPC(self->socket, &p, &voltage); + + if (result==0) { + EXTEND(sp,5); + PUSHs(sv_2mortal(newSVnv((float)voltage/100))); + PUSHs(sv_2mortal(newSVnv((float)warn/100))); + PUSHs(sv_2mortal(newSVnv((float)critical/100))); + PUSHs(sv_2mortal(newSViv(kind))); + PUSHs(sv_2mortal(newSViv(AC))); + } + } +#line 4947 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__DLPPtr_getUserInfo); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_getUserInfo) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + { + PDA__Pilot__DLP * self; + SV * RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); +#line 3010 "Pilot.xs" + { + UserInfo info; + int result; + result = dlp_ReadUserInfo(self->socket, &info); + pack_userinfo(RETVAL, info, result); + } +#line 4981 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLPPtr_newPref); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_newPref) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items < 2 || items > 5) + croak_xs_usage(cv, "self, creator, id=0, version=0, backup=0"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__DLP * self; + Char4 creator; + SV * id; + SV * version; + SV * backup; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); + + { + if (SvIOKp(ST(1)) || SvNOKp(ST(1))) + creator = SvIV(ST(1)); + else { + STRLEN len; + char * c = SvPV(ST(1), len); + creator = makelong(c); + } + }; + + if (items < 3) + id = 0; + else { + id = ST(2); + } + + if (items < 4) + version = 0; + else { + version = ST(3); + } + + if (items < 5) + backup = 0; + else { + backup = ST(4); + } +#line 3027 "Pilot.xs" + { + HV * h = perl_get_hv("PDA::Pilot::PrefClasses", 0); + SV ** s; + int count; + if (!h) + croak("PrefClasses doesn't exist"); + s = hv_fetch(h, printlong(creator), 4, 0); + if (!s) + s = hv_fetch(h, "", 0, 0); + if (!s) + croak("Default PrefClass not defined"); + PUSHMARK(sp); + XPUSHs(newSVsv(*s)); + XPUSHs(&sv_undef); + XPUSHs(sv_2mortal(newSVChar4(creator))); + if (id) + XPUSHs(id); + if (version) + XPUSHs(version); + if (backup) + XPUSHs(backup); + PUTBACK; + count = perl_call_method("pref", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to create resource"); + } +#line 5070 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__DLPPtr_delete); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_delete) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items < 2 || items > 3) + croak_xs_usage(cv, "self, name, cardno=0"); + { + PDA__Pilot__DLP * self; + char * name = (char *)SvPV_nolen(ST(1)); + int cardno; + Result RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); + + if (items < 3) + cardno = 0; + else { + cardno = (int)SvIV(ST(2)); + } +#line 3061 "Pilot.xs" + { + UserInfo info; + int result; + RETVAL = dlp_DeleteDB(self->socket, cardno, name); + } +#line 5111 "Pilot.c" + ST(0) = sv_newmortal(); + if (RETVAL < 0) { + sv_setsv(ST(0), &sv_no); + self->errnop = RETVAL; + } else + sv_setsv(ST(0), &sv_yes); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLPPtr_open); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_open) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items < 2 || items > 4) + croak_xs_usage(cv, "self, name, mode=0, cardno=0"); + { + PDA__Pilot__DLP * self; + char * name = (char *)SvPV_nolen(ST(1)); + SV * mode; + int cardno; + SV * RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); + + if (items < 3) + mode = 0; + else { + mode = ST(2); + } + + if (items < 4) + cardno = 0; + else { + cardno = (int)SvIV(ST(3)); + } +#line 3076 "Pilot.xs" + { + int handle; + int nummode; + int result; + if (!mode) + nummode = dlpOpenRead|dlpOpenWrite|dlpOpenSecret; + else { + char *c; + STRLEN len; + nummode = SvIV(mode); + if (SvPOKp(mode)) { + c = SvPV(mode, len); + while (*c) { + switch (*c) { + case 'r': + nummode |= dlpOpenRead; + break; + case 'w': + nummode |= dlpOpenWrite; + break; + case 'x': + nummode |= dlpOpenExclusive; + break; + case 's': + nummode |= dlpOpenSecret; + break; + } + c++; + } + } + } + result = dlp_OpenDB(self->socket, cardno, nummode, name, &handle); + if (result<0) { + self->errnop = result; + RETVAL = &sv_undef; + } else { + int type; + PDA__Pilot__DLP__DB * x = malloc(sizeof(PDA__Pilot__DLP__DB)); + SV * sv = newSViv((IV)(void*)x); + SvREFCNT_inc(ST(0)); + x->connection = ST(0); + x->socket = self->socket; + x->handle = handle; + x->errnop = 0; + x->dbname = newSVpv(name,0); + x->dbmode = nummode; + x->dbcard = cardno; + RETVAL = newRV(sv); + SvREFCNT_dec(sv); + sv_bless(RETVAL, gv_stashpv("PDA::Pilot::DLP::DBPtr",0)); + { + HV * h = perl_get_hv("PDA::Pilot::DBClasses", 0); + SV ** s; + if (!h) + croak("DBClasses doesn't exist"); + s = hv_fetch(h, name, strlen(name), 0); + if (!s) + s = hv_fetch(h, "", 0, 0); + if (!s) + croak("Default DBClass not defined"); + x->Class = *s; + SvREFCNT_inc(*s); + } + } + } +#line 5224 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLPPtr_create); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_create) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items < 6 || items > 7) + croak_xs_usage(cv, "self, name, creator, type, flags, version, cardno=0"); + { + PDA__Pilot__DLP * self; + char * name = (char *)SvPV_nolen(ST(1)); + Char4 creator; + Char4 type; + int flags = (int)SvIV(ST(4)); + int version = (int)SvIV(ST(5)); + int cardno; + SV * RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); + + { + if (SvIOKp(ST(2)) || SvNOKp(ST(2))) + creator = SvIV(ST(2)); + else { + STRLEN len; + char * c = SvPV(ST(2), len); + creator = makelong(c); + } + }; + + { + if (SvIOKp(ST(3)) || SvNOKp(ST(3))) + type = SvIV(ST(3)); + else { + STRLEN len; + char * c = SvPV(ST(3), len); + type = makelong(c); + } + }; + + if (items < 7) + cardno = 0; + else { + cardno = (int)SvIV(ST(6)); + } +#line 3154 "Pilot.xs" + { + int handle; + int result = dlp_CreateDB(self->socket, creator, type, cardno, flags, version, name, &handle); + if (result<0) { + self->errnop = result; + RETVAL = &sv_undef; + } else { + PDA__Pilot__DLP__DB * x = malloc(sizeof(PDA__Pilot__DLP__DB)); + SV * sv = newSViv((IV)(void*)x); + SvREFCNT_inc(ST(0)); + x->connection = ST(0); + x->socket = self->socket; + x->handle = handle; + x->errnop = 0; + x->dbname = newSVpv(name,0); + x->dbmode = dlpOpenRead|dlpOpenWrite|dlpOpenSecret; + x->dbcard = cardno; + RETVAL = newRV(sv); + SvREFCNT_dec(sv); + sv_bless(RETVAL, gv_stashpv("PDA::Pilot::DLP::DBPtr",0)); + { + HV * h = perl_get_hv("PDA::Pilot::DBClasses", 0); + SV ** s; + if (!h) + croak("DBClasses doesn't exist"); + s = hv_fetch(h, name, strlen(name), 0); + if (!s) + s = hv_fetch(h, "", 0, 0); + if (!s) + croak("Default DBClass not defined"); + x->Class = *s; + SvREFCNT_inc(*s); + } + } + } +#line 5320 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLPPtr_getPref); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_getPref) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items < 2 || items > 4) + croak_xs_usage(cv, "self, creator, id=0, backup=1"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__DLP * self; + Char4 creator; + int id; + int backup; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); + + { + if (SvIOKp(ST(1)) || SvNOKp(ST(1))) + creator = SvIV(ST(1)); + else { + STRLEN len; + char * c = SvPV(ST(1), len); + creator = makelong(c); + } + }; + + if (items < 3) + id = 0; + else { + id = (int)SvIV(ST(2)); + } + + if (items < 4) + backup = 1; + else { + backup = (int)SvIV(ST(3)); + } +#line 3201 "Pilot.xs" + { + int version, result; + size_t len; + SV * c, n, v; + result = dlp_ReadAppPreference(self->socket, creator, id, backup, 0xFFFF, mybuf, &len, &version); + ReturnReadPref(mybuf, len); + } +#line 5382 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__DLPPtr_setPref); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_setPref) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "self, data"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__DLP * self; + SV * data = ST(1); + SV * RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); +#line 3214 "Pilot.xs" + { + Char4 creator; + int id; + int version; + int backup; + STRLEN len; + int result; + void * buf; + PackPref; + buf = SvPV(data, len); + result = dlp_WriteAppPreference(self->socket, creator, id, backup, version, buf, len); + if (result < 0) { + self->errnop = result; + RETVAL = newSVsv(&sv_undef); + } else { + RETVAL = newSViv(result); + } + } +#line 5431 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__DLPPtr_setPrefRaw); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_setPrefRaw) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items < 5 || items > 6) + croak_xs_usage(cv, "self, data, creator, number, version, backup=1"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__DLP * self; + SV * data = ST(1); + Char4 creator; + int number = (int)SvIV(ST(3)); + int version = (int)SvIV(ST(4)); + int backup; + SV * RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); + + { + if (SvIOKp(ST(2)) || SvNOKp(ST(2))) + creator = SvIV(ST(2)); + else { + STRLEN len; + char * c = SvPV(ST(2), len); + creator = makelong(c); + } + }; + + if (items < 6) + backup = 1; + else { + backup = (int)SvIV(ST(5)); + } +#line 3242 "Pilot.xs" + { + STRLEN len; + int version, result; + void * buf; + PackRaw; + buf = SvPV(data, len); + result = dlp_WriteAppPreference(self->socket, creator, number, backup, version, buf, len); + if (result < 0) { + self->errnop = result; + RETVAL = newSVsv(&sv_undef); + } else { + RETVAL = newSViv(result); + } + } +#line 5496 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__DLPPtr_close); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_close) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items < 1 || items > 2) + croak_xs_usage(cv, "self, status=0"); + { + PDA__Pilot__DLP * self; + int status; + Result RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); + + if (items < 2) + status = 0; + else { + status = (int)SvIV(ST(1)); + } +#line 3263 "Pilot.xs" + RETVAL = dlp_EndOfSync(self->socket, status) || pi_close(self->socket); + if (!RETVAL) + self->socket = 0; +#line 5534 "Pilot.c" + ST(0) = sv_newmortal(); + if (RETVAL < 0) { + sv_setsv(ST(0), &sv_no); + self->errnop = RETVAL; + } else + sv_setsv(ST(0), &sv_yes); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLPPtr_abort); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_abort) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + { + PDA__Pilot__DLP * self; + Result RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); +#line 3273 "Pilot.xs" + RETVAL = dlp_AbortSync(self->socket) || pi_close(self->socket); + if (!RETVAL) + self->socket = 0; +#line 5570 "Pilot.c" + ST(0) = sv_newmortal(); + if (RETVAL < 0) { + sv_setsv(ST(0), &sv_no); + self->errnop = RETVAL; + } else + sv_setsv(ST(0), &sv_yes); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLPPtr_reset); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_reset) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + { + PDA__Pilot__DLP * self; + Result RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); +#line 3283 "Pilot.xs" + RETVAL = dlp_ResetSystem(self->socket); +#line 5604 "Pilot.c" + ST(0) = sv_newmortal(); + if (RETVAL < 0) { + sv_setsv(ST(0), &sv_no); + self->errnop = RETVAL; + } else + sv_setsv(ST(0), &sv_yes); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLPPtr_getStatus); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_getStatus) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + { + PDA__Pilot__DLP * self; + Result RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); +#line 3291 "Pilot.xs" + RETVAL = dlp_OpenConduit(self->socket); +#line 5638 "Pilot.c" + ST(0) = sv_newmortal(); + if (RETVAL < 0) { + sv_setsv(ST(0), &sv_no); + self->errnop = RETVAL; + } else + sv_setsv(ST(0), &sv_yes); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLPPtr_log); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_log) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "self, message"); + { + PDA__Pilot__DLP * self; + char * message = (char *)SvPV_nolen(ST(1)); + Result RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); +#line 3300 "Pilot.xs" + RETVAL = dlp_AddSyncLogEntry(self->socket,message); +#line 5673 "Pilot.c" + ST(0) = sv_newmortal(); + if (RETVAL < 0) { + sv_setsv(ST(0), &sv_no); + self->errnop = RETVAL; + } else + sv_setsv(ST(0), &sv_yes); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLPPtr_dirty); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_dirty) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + { + PDA__Pilot__DLP * self; + Result RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); +#line 3309 "Pilot.xs" + RETVAL = dlp_ResetLastSyncPC(self->socket); +#line 5707 "Pilot.c" + ST(0) = sv_newmortal(); + if (RETVAL < 0) { + sv_setsv(ST(0), &sv_no); + self->errnop = RETVAL; + } else + sv_setsv(ST(0), &sv_yes); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLPPtr_getDBInfo); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_getDBInfo) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items < 2 || items > 5) + croak_xs_usage(cv, "self, start, RAM=1, ROM=0, cardno=0"); + { + PDA__Pilot__DLP * self; + int start = (int)SvIV(ST(1)); + int RAM; + int ROM; + int cardno; + SV * RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); + + if (items < 3) + RAM = 1; + else { + RAM = (int)SvIV(ST(2)); + } + + if (items < 4) + ROM = 0; + else { + ROM = (int)SvIV(ST(3)); + } + + if (items < 5) + cardno = 0; + else { + cardno = (int)SvIV(ST(4)); + } +#line 3321 "Pilot.xs" + { + struct DBInfo info; + + int where = (RAM ? dlpDBListRAM : 0) | (ROM ? dlpDBListROM : 0); + int result = dlp_ReadDBList(self->socket, cardno, where, start, &pibuf); + pack_dbinfo(RETVAL,(*(struct DBInfo *)(pibuf.data)), result); + } +#line 5769 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLPPtr_findDBInfo); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_findDBInfo) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items < 5 || items > 6) + croak_xs_usage(cv, "self, start, name, creator, type, cardno=0"); + { + PDA__Pilot__DLP * self; + int start = (int)SvIV(ST(1)); + SV * name = ST(2); + SV * creator = ST(3); + SV * type = ST(4); + int cardno; + SV * RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); + + if (items < 6) + cardno = 0; + else { + cardno = (int)SvIV(ST(5)); + } +#line 3340 "Pilot.xs" + { + struct DBInfo info; + Char4 c,t; + int result; + if (SvOK(creator)) + c = SvChar4(creator); + else + c = 0; + if (SvOK(type)) + t = SvChar4(type); + else + t = 0; + result = dlp_FindDBInfo(self->socket, cardno, start, + SvOK(name) ? SvPV(name,na) : 0, + t, c, &info); + pack_dbinfo(RETVAL, info, result); + } +#line 5826 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLPPtr_getFeature); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_getFeature) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 3) + croak_xs_usage(cv, "self, creator, number"); + { + PDA__Pilot__DLP * self; + Char4 creator; + int number = (int)SvIV(ST(2)); + SV * RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); + + { + if (SvIOKp(ST(1)) || SvNOKp(ST(1))) + creator = SvIV(ST(1)); + else { + STRLEN len; + char * c = SvPV(ST(1), len); + creator = makelong(c); + } + }; +#line 3366 "Pilot.xs" + { + unsigned long f; + int result; + if ((result = dlp_ReadFeature(self->socket, creator, number, &f))<0) { + RETVAL = newSVsv(&sv_undef); + self->errnop = result; + } else { + RETVAL = newSViv(f); + } + } +#line 5877 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLPPtr_getROMToken); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_getROMToken) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "self, token"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__DLP * self; + Char4 token; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); + + { + if (SvIOKp(ST(1)) || SvNOKp(ST(1))) + token = SvIV(ST(1)); + else { + STRLEN len; + char * c = SvPV(ST(1), len); + token = makelong(c); + } + }; +#line 3385 "Pilot.xs" + { + char buffer[50]; + long long_token; + size_t size; + int result; + + result = dlp_GetROMToken(self->socket, token, buffer, &size); + + if (result==0) { + EXTEND(sp,1); + PUSHs(sv_2mortal(newSVpvn(buffer, size))); + } + } +#line 5931 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__DLPPtr_callApplication); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_callApplication) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items < 4 || items > 5) + croak_xs_usage(cv, "self, creator, type, action, data=&sv_undef"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__DLP * self; + Char4 creator; + Char4 type; + int action = (int)SvIV(ST(3)); + SV * data; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); + + { + if (SvIOKp(ST(1)) || SvNOKp(ST(1))) + creator = SvIV(ST(1)); + else { + STRLEN len; + char * c = SvPV(ST(1), len); + creator = makelong(c); + } + }; + + { + if (SvIOKp(ST(2)) || SvNOKp(ST(2))) + type = SvIV(ST(2)); + else { + STRLEN len; + char * c = SvPV(ST(2), len); + type = makelong(c); + } + }; + + if (items < 5) + data = &sv_undef; + else { + data = ST(4); + } +#line 3407 "Pilot.xs" + { + unsigned long retcode; + STRLEN len; + int result; + (void)SvPV(data,len); + result = dlp_CallApplication(self->socket, creator, + type, action, len, SvPV(data,na), + &retcode, &pibuf); + EXTEND(sp, 2); + if (result >= 0) { + PUSHs(sv_2mortal(newSVpvn((char *) pibuf.data, pibuf.used))); + if (GIMME != G_SCALAR) { + PUSHs(sv_2mortal(newSViv(retcode))); + } + } else + PUSHs(&sv_undef); + } +#line 6007 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__DLPPtr_tickle); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_tickle) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + { + PDA__Pilot__DLP * self; + int RETVAL; + dXSTARG; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); +#line 3429 "Pilot.xs" + { + RETVAL = pi_tickle(self->socket); + } +#line 6039 "Pilot.c" + XSprePUSH; PUSHi((IV)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__DLPPtr_watchdog); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__DLPPtr_watchdog) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "self, interval"); + { + PDA__Pilot__DLP * self; + int interval = (int)SvIV(ST(1)); + int RETVAL; + dXSTARG; + + if (sv_derived_from(ST(0), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__DLP *) tmp; + } + else + croak("self is not of type PDA::Pilot::DLPPtr"); +#line 3440 "Pilot.xs" + { + RETVAL = pi_watchdog(self->socket, interval); + } +#line 6072 "Pilot.c" + XSprePUSH; PUSHi((IV)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__File_open); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__File_open) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "name"); + { + char * name = (char *)SvPV_nolen(ST(0)); + PDA__Pilot__File * RETVAL; +#line 3452 "Pilot.xs" + { + RETVAL = calloc(sizeof(PDA__Pilot__File),1); + RETVAL->errnop = 0; + RETVAL->pf = pi_file_open(name); + { + HV * h = perl_get_hv("PDA::Pilot::DBClasses", 0); + SV ** s; + if (!h) + croak("DBClasses doesn't exist"); + s = hv_fetch(h, name, strlen(name), 0); + if (!s) + s = hv_fetch(h, "", 0, 0); + if (!s) + croak("Default DBClass not defined"); + RETVAL->Class = *s; + SvREFCNT_inc(*s); + } + } +#line 6111 "Pilot.c" + ST(0) = sv_newmortal(); + sv_setref_pv(ST(0), "PDA::Pilot::FilePtr", (void*)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__File_create); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__File_create) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "name, info"); + { + char * name = (char *)SvPV_nolen(ST(0)); + DBInfo info; + PDA__Pilot__File * RETVAL; + + unpack_dbinfo(ST(1), info); +#line 3478 "Pilot.xs" + RETVAL = calloc(sizeof(PDA__Pilot__File),1); + RETVAL->errnop = 0; + RETVAL->pf = pi_file_create(name, &info); + { + HV * h = perl_get_hv("PDA::Pilot::DBClasses", 0); + SV ** s; + if (!h) + croak("DBClasses doesn't exist"); + s = hv_fetch(h, name, strlen(name), 0); + if (!s) + s = hv_fetch(h, "", 0, 0); + if (!s) + croak("Default DBClass not defined"); + RETVAL->Class = *s; + SvREFCNT_inc(*s); + } +#line 6152 "Pilot.c" + ST(0) = sv_newmortal(); + sv_setref_pv(ST(0), "PDA::Pilot::FilePtr", (void*)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__FilePtr_errno); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__FilePtr_errno) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + { + PDA__Pilot__File * self; + int RETVAL; + dXSTARG; + + if (sv_derived_from(ST(0), "PDA::Pilot::FilePtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__File *) tmp; + } + else + croak("self is not of type PDA::Pilot::FilePtr"); +#line 3503 "Pilot.xs" + RETVAL = self->errnop; + self->errnop = 0; +#line 6184 "Pilot.c" + XSprePUSH; PUSHi((IV)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__FilePtr_DESTROY); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__FilePtr_DESTROY) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + { + PDA__Pilot__File * self; + + if (SvROK(ST(0))) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = INT2PTR(PDA__Pilot__File *,tmp); + } + else + Perl_croak(aTHX_ "%s: %s is not a reference", + "PDA::Pilot::FilePtr::DESTROY", + "self"); +#line 3512 "Pilot.xs" + if (self->pf) + pi_file_close(self->pf); + if (self->Class) + SvREFCNT_dec(self->Class); + free(self); +#line 6218 "Pilot.c" + } + XSRETURN_EMPTY; +} + + +XS(XS_PDA__Pilot__FilePtr_class); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__FilePtr_class) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items < 1 || items > 2) + croak_xs_usage(cv, "self, name=0"); + { + PDA__Pilot__File * self; + SV * name; + SV * RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::FilePtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__File *) tmp; + } + else + croak("self is not of type PDA::Pilot::FilePtr"); + + if (items < 2) + name = 0; + else { + name = ST(1); + } +#line 3523 "Pilot.xs" + { + SV ** s = 0; + HV * h; + if (name) { + STRLEN len; + h = perl_get_hv("PDA::Pilot::DBClasses", 0); + if (!h) + croak("DBClasses doesn't exist"); + if (SvOK(name)) { + (void)SvPV(name, len); + s = hv_fetch(h, SvPV(name, na), len, 0); + } + if (!s) + s = hv_fetch(h, "", 0, 0); + if (!s) + croak("Default DBClass not defined"); + SvREFCNT_inc(*s); + if (self->Class) + SvREFCNT_dec(self->Class); + self->Class = *s; + } + RETVAL = newSVsv(self->Class); + } +#line 6275 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__FilePtr_close); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__FilePtr_close) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + { + PDA__Pilot__File * self; + int RETVAL; + dXSTARG; + + if (sv_derived_from(ST(0), "PDA::Pilot::FilePtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__File *) tmp; + } + else + croak("self is not of type PDA::Pilot::FilePtr"); +#line 3553 "Pilot.xs" + if (self->pf) { + RETVAL = pi_file_close(self->pf); + self->pf = 0; + } else + RETVAL = 0; +#line 6310 "Pilot.c" + XSprePUSH; PUSHi((IV)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__FilePtr_getAppBlock); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__FilePtr_getAppBlock) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__File * self; + SV * RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::FilePtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__File *) tmp; + } + else + croak("self is not of type PDA::Pilot::FilePtr"); +#line 3565 "Pilot.xs" + { + int result = 0; + size_t len; + void * buf; + pi_file_get_app_info(self->pf, &buf, &len); + ReturnReadAI(buf, (int)len); + } +#line 6347 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__FilePtr_getSortBlock); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__FilePtr_getSortBlock) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__File * self; + SV * RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::FilePtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__File *) tmp; + } + else + croak("self is not of type PDA::Pilot::FilePtr"); +#line 3577 "Pilot.xs" + { + int result = 0; + size_t len; + void * buf; + pi_file_get_sort_info(self->pf, &buf, &len); + ReturnReadSI(buf, (int)len); + } +#line 6384 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__FilePtr_getRecords); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__FilePtr_getRecords) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + { + PDA__Pilot__File * self; + SV * RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::FilePtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__File *) tmp; + } + else + croak("self is not of type PDA::Pilot::FilePtr"); +#line 3590 "Pilot.xs" + { + int len, result = 0; + pi_file_get_entries(self->pf, &len); + RETVAL = newSViv((int)len); + } +#line 6417 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__FilePtr_getResource); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__FilePtr_getResource) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "self, index"); + { + PDA__Pilot__File * self; + int index = (int)SvIV(ST(1)); + SV * RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::FilePtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__File *) tmp; + } + else + croak("self is not of type PDA::Pilot::FilePtr"); +#line 3603 "Pilot.xs" + { + int result, id; + size_t len; + Char4 type; + void * buf; + result = pi_file_read_resource(self->pf, index, &buf, &len, &type, &id); + ReturnReadResource(buf,(int)len); + } +#line 6455 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__FilePtr_getRecord); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__FilePtr_getRecord) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "self, index"); + PERL_UNUSED_VAR(ax); /* -Wall */ + SP -= items; + { + PDA__Pilot__File * self; + int index = (int)SvIV(ST(1)); + SV * RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::FilePtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__File *) tmp; + } + else + croak("self is not of type PDA::Pilot::FilePtr"); +#line 3619 "Pilot.xs" + { + int result, attr, category; + size_t len; + unsigned long id; + void * buf; + result = pi_file_read_record(self->pf, index, &buf, &len, &attr, &category, &id); + ReturnReadRecord(buf,(int)len); + } +#line 6495 "Pilot.c" + PUTBACK; + return; + } +} + + +XS(XS_PDA__Pilot__FilePtr_getRecordByID); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__FilePtr_getRecordByID) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "self, id"); + { + PDA__Pilot__File * self; + unsigned long id = (unsigned long)SvUV(ST(1)); + SV * RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::FilePtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__File *) tmp; + } + else + croak("self is not of type PDA::Pilot::FilePtr"); +#line 3634 "Pilot.xs" + { + int result; + size_t len; + int attr, category, index; + void * buf; + result = pi_file_read_record_by_id(self->pf, id, &buf, &len, &index, &attr, &category); + ReturnReadRecord(buf, (int)len); + } +#line 6532 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__FilePtr_checkID); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__FilePtr_checkID) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "self, uid"); + { + PDA__Pilot__File * self; + unsigned long uid = (unsigned long)SvUV(ST(1)); + int RETVAL; + dXSTARG; + + if (sv_derived_from(ST(0), "PDA::Pilot::FilePtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__File *) tmp; + } + else + croak("self is not of type PDA::Pilot::FilePtr"); +#line 3650 "Pilot.xs" + RETVAL = pi_file_id_used(self->pf, uid); +#line 6564 "Pilot.c" + XSprePUSH; PUSHi((IV)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__FilePtr_getDBInfo); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__FilePtr_getDBInfo) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 1) + croak_xs_usage(cv, "self"); + { + PDA__Pilot__File * self; + SV * RETVAL; + + if (sv_derived_from(ST(0), "PDA::Pilot::FilePtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__File *) tmp; + } + else + croak("self is not of type PDA::Pilot::FilePtr"); +#line 3658 "Pilot.xs" + { + DBInfo result; + pi_file_get_info(self->pf, &result); + pack_dbinfo(RETVAL, result, 0); + } +#line 6597 "Pilot.c" + ST(0) = RETVAL; + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__FilePtr_setDBInfo); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__FilePtr_setDBInfo) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "self, info"); + { + PDA__Pilot__File * self; + DBInfo info; + int RETVAL; + dXSTARG; + + if (sv_derived_from(ST(0), "PDA::Pilot::FilePtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__File *) tmp; + } + else + croak("self is not of type PDA::Pilot::FilePtr"); + + unpack_dbinfo(ST(1), info); +#line 3671 "Pilot.xs" + RETVAL = pi_file_set_info(self->pf, &info); +#line 6631 "Pilot.c" + XSprePUSH; PUSHi((IV)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__FilePtr_setAppBlock); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__FilePtr_setAppBlock) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "self, data"); + { + PDA__Pilot__File * self; + SV * data = ST(1); + int RETVAL; + dXSTARG; + + if (sv_derived_from(ST(0), "PDA::Pilot::FilePtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__File *) tmp; + } + else + croak("self is not of type PDA::Pilot::FilePtr"); +#line 3680 "Pilot.xs" + { + STRLEN len; + char * c; + PackAI; + c = SvPV(data, len); + RETVAL = pi_file_set_app_info(self->pf, c, len); + } +#line 6668 "Pilot.c" + XSprePUSH; PUSHi((IV)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__FilePtr_setSortBlock); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__FilePtr_setSortBlock) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "self, data"); + { + PDA__Pilot__File * self; + SV * data = ST(1); + int RETVAL; + dXSTARG; + + if (sv_derived_from(ST(0), "PDA::Pilot::FilePtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__File *) tmp; + } + else + croak("self is not of type PDA::Pilot::FilePtr"); +#line 3695 "Pilot.xs" + { + STRLEN len; + char * c; + PackSI; + c = SvPV(data, len); + RETVAL = pi_file_set_sort_info(self->pf, c, len); + } +#line 6705 "Pilot.c" + XSprePUSH; PUSHi((IV)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__FilePtr_addResource); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__FilePtr_addResource) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 4) + croak_xs_usage(cv, "self, data, type, id"); + { + PDA__Pilot__File * self; + SV * data = ST(1); + Char4 type; + int id = (int)SvIV(ST(3)); + int RETVAL; + dXSTARG; + + if (sv_derived_from(ST(0), "PDA::Pilot::FilePtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__File *) tmp; + } + else + croak("self is not of type PDA::Pilot::FilePtr"); + + { + if (SvIOKp(ST(2)) || SvNOKp(ST(2))) + type = SvIV(ST(2)); + else { + STRLEN len; + char * c = SvPV(ST(2), len); + type = makelong(c); + } + }; +#line 3712 "Pilot.xs" + { + STRLEN len; + int result; + void * buf; + PackResource; + buf = SvPV(data, len); + RETVAL = pi_file_append_resource(self->pf, buf, len, type, id); + } +#line 6755 "Pilot.c" + XSprePUSH; PUSHi((IV)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__FilePtr_addRecord); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__FilePtr_addRecord) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 2) + croak_xs_usage(cv, "self, data"); + { + PDA__Pilot__File * self; + SV * data = ST(1); + int RETVAL; + dXSTARG; + + if (sv_derived_from(ST(0), "PDA::Pilot::FilePtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__File *) tmp; + } + else + croak("self is not of type PDA::Pilot::FilePtr"); +#line 3728 "Pilot.xs" + { + STRLEN len; + unsigned long id; + int attr, category; + int result; + void * buf; + PackRecord; + buf = SvPV(data, len); + RETVAL = pi_file_append_record(self->pf, buf, len, attr, category, id); + } +#line 6795 "Pilot.c" + XSprePUSH; PUSHi((IV)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__FilePtr_addRecordRaw); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__FilePtr_addRecordRaw) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 5) + croak_xs_usage(cv, "self, data, uid, attr, category"); + { + PDA__Pilot__File * self; + SV * data = ST(1); + unsigned long uid = (unsigned long)SvUV(ST(2)); + int attr = (int)SvIV(ST(3)); + int category = (int)SvIV(ST(4)); + int RETVAL; + dXSTARG; + + if (sv_derived_from(ST(0), "PDA::Pilot::FilePtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__File *) tmp; + } + else + croak("self is not of type PDA::Pilot::FilePtr"); +#line 3749 "Pilot.xs" + { + STRLEN len; + int result; + void * buf; + PackRaw; + buf = SvPV(data, len); + RETVAL = pi_file_append_record(self->pf, buf, len, attr, category, uid); + } +#line 6836 "Pilot.c" + XSprePUSH; PUSHi((IV)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__FilePtr_install); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__FilePtr_install) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 3) + croak_xs_usage(cv, "self, socket, cardno"); + { + PDA__Pilot__File * self; + PDA__Pilot__DLP * socket; + int cardno = (int)SvIV(ST(2)); + int RETVAL; + dXSTARG; + + if (sv_derived_from(ST(0), "PDA::Pilot::FilePtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__File *) tmp; + } + else + croak("self is not of type PDA::Pilot::FilePtr"); + + if (sv_derived_from(ST(1), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(1))); + socket = (PDA__Pilot__DLP *) tmp; + } + else + croak("socket is not of type PDA::Pilot::DLPPtr"); +#line 3767 "Pilot.xs" + RETVAL = pi_file_install(self->pf, socket->socket, cardno, NULL); +#line 6875 "Pilot.c" + XSprePUSH; PUSHi((IV)RETVAL); + } + XSRETURN(1); +} + + +XS(XS_PDA__Pilot__FilePtr_retrieve); /* prototype to pass -Wmissing-prototypes */ +XS(XS_PDA__Pilot__FilePtr_retrieve) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + if (items != 3) + croak_xs_usage(cv, "self, socket, cardno"); + { + PDA__Pilot__File * self; + PDA__Pilot__DLP * socket; + int cardno = (int)SvIV(ST(2)); + int RETVAL; + dXSTARG; + + if (sv_derived_from(ST(0), "PDA::Pilot::FilePtr")) { + IV tmp = SvIV((SV*)SvRV(ST(0))); + self = (PDA__Pilot__File *) tmp; + } + else + croak("self is not of type PDA::Pilot::FilePtr"); + + if (sv_derived_from(ST(1), "PDA::Pilot::DLPPtr")) { + IV tmp = SvIV((SV*)SvRV(ST(1))); + socket = (PDA__Pilot__DLP *) tmp; + } + else + croak("socket is not of type PDA::Pilot::DLPPtr"); +#line 3777 "Pilot.xs" + RETVAL = pi_file_retrieve(self->pf, socket->socket, cardno, NULL); +#line 6914 "Pilot.c" + XSprePUSH; PUSHi((IV)RETVAL); + } + XSRETURN(1); +} + +#ifdef __cplusplus +extern "C" +#endif +XS(boot_PDA__Pilot); /* prototype to pass -Wmissing-prototypes */ +XS(boot_PDA__Pilot) +{ +#ifdef dVAR + dVAR; dXSARGS; +#else + dXSARGS; +#endif + const char* file = __FILE__; + + PERL_UNUSED_VAR(cv); /* -W */ + PERL_UNUSED_VAR(items); /* -W */ + XS_VERSION_BOOTCHECK ; + + newXS("PDA::Pilot::constant", XS_PDA__Pilot_constant, file); + newXS("PDA::Pilot::Appointment::Unpack", XS_PDA__Pilot__Appointment_Unpack, file); + newXS("PDA::Pilot::Appointment::Pack", XS_PDA__Pilot__Appointment_Pack, file); + newXS("PDA::Pilot::Appointment::UnpackAppBlock", XS_PDA__Pilot__Appointment_UnpackAppBlock, file); + newXS("PDA::Pilot::Appointment::PackAppBlock", XS_PDA__Pilot__Appointment_PackAppBlock, file); + newXS("PDA::Pilot::ToDo::Unpack", XS_PDA__Pilot__ToDo_Unpack, file); + newXS("PDA::Pilot::ToDo::Pack", XS_PDA__Pilot__ToDo_Pack, file); + newXS("PDA::Pilot::ToDo::UnpackAppBlock", XS_PDA__Pilot__ToDo_UnpackAppBlock, file); + newXS("PDA::Pilot::ToDo::PackAppBlock", XS_PDA__Pilot__ToDo_PackAppBlock, file); + newXS("PDA::Pilot::Address::Unpack", XS_PDA__Pilot__Address_Unpack, file); + newXS("PDA::Pilot::Address::Pack", XS_PDA__Pilot__Address_Pack, file); + newXS("PDA::Pilot::Address::UnpackAppBlock", XS_PDA__Pilot__Address_UnpackAppBlock, file); + newXS("PDA::Pilot::Address::PackAppBlock", XS_PDA__Pilot__Address_PackAppBlock, file); + newXS("PDA::Pilot::Memo::Unpack", XS_PDA__Pilot__Memo_Unpack, file); + newXS("PDA::Pilot::Memo::Pack", XS_PDA__Pilot__Memo_Pack, file); + newXS("PDA::Pilot::Memo::UnpackAppBlock", XS_PDA__Pilot__Memo_UnpackAppBlock, file); + newXS("PDA::Pilot::Memo::PackAppBlock", XS_PDA__Pilot__Memo_PackAppBlock, file); + newXS("PDA::Pilot::Expense::Unpack", XS_PDA__Pilot__Expense_Unpack, file); + newXS("PDA::Pilot::Expense::Pack", XS_PDA__Pilot__Expense_Pack, file); + newXS("PDA::Pilot::Expense::UnpackAppBlock", XS_PDA__Pilot__Expense_UnpackAppBlock, file); + newXS("PDA::Pilot::Expense::PackAppBlock", XS_PDA__Pilot__Expense_PackAppBlock, file); + newXS("PDA::Pilot::Expense::UnpackPref", XS_PDA__Pilot__Expense_UnpackPref, file); + newXS("PDA::Pilot::Expense::PackPref", XS_PDA__Pilot__Expense_PackPref, file); + newXS("PDA::Pilot::Mail::Unpack", XS_PDA__Pilot__Mail_Unpack, file); + newXS("PDA::Pilot::Mail::Pack", XS_PDA__Pilot__Mail_Pack, file); + newXS("PDA::Pilot::Mail::UnpackAppBlock", XS_PDA__Pilot__Mail_UnpackAppBlock, file); + newXS("PDA::Pilot::Mail::PackAppBlock", XS_PDA__Pilot__Mail_PackAppBlock, file); + newXS("PDA::Pilot::Mail::UnpackSyncPref", XS_PDA__Pilot__Mail_UnpackSyncPref, file); + newXS("PDA::Pilot::Mail::PackSyncPref", XS_PDA__Pilot__Mail_PackSyncPref, file); + newXS("PDA::Pilot::Mail::UnpackSignaturePref", XS_PDA__Pilot__Mail_UnpackSignaturePref, file); + newXS("PDA::Pilot::Mail::PackSignaturePref", XS_PDA__Pilot__Mail_PackSignaturePref, file); + newXS("PDA::Pilot::close", XS_PDA__Pilot_close, file); + newXS("PDA::Pilot::write", XS_PDA__Pilot_write, file); + newXS("PDA::Pilot::read", XS_PDA__Pilot_read, file); + newXS("PDA::Pilot::socket", XS_PDA__Pilot_socket, file); + newXS("PDA::Pilot::listen", XS_PDA__Pilot_listen, file); + newXS("PDA::Pilot::errorText", XS_PDA__Pilot_errorText, file); + newXS("PDA::Pilot::bind", XS_PDA__Pilot_bind, file); + newXS("PDA::Pilot::openPort", XS_PDA__Pilot_openPort, file); + newXS("PDA::Pilot::accept", XS_PDA__Pilot_accept, file); + newXS("PDA::Pilot::DLP::DBPtr::DESTROY", XS_PDA__Pilot__DLP__DBPtr_DESTROY, file); + newXS("PDA::Pilot::DLP::DBPtr::errno", XS_PDA__Pilot__DLP__DBPtr_errno, file); + newXS("PDA::Pilot::DLP::DBPtr::palmos_errno", XS_PDA__Pilot__DLP__DBPtr_palmos_errno, file); + newXS("PDA::Pilot::DLP::DBPtr::class", XS_PDA__Pilot__DLP__DBPtr_class, file); + newXS("PDA::Pilot::DLP::DBPtr::close", XS_PDA__Pilot__DLP__DBPtr_close, file); + newXS("PDA::Pilot::DLP::DBPtr::setSortBlock", XS_PDA__Pilot__DLP__DBPtr_setSortBlock, file); + newXS("PDA::Pilot::DLP::DBPtr::getAppBlock", XS_PDA__Pilot__DLP__DBPtr_getAppBlock, file); + newXS("PDA::Pilot::DLP::DBPtr::getSortBlock", XS_PDA__Pilot__DLP__DBPtr_getSortBlock, file); + newXS("PDA::Pilot::DLP::DBPtr::setAppBlock", XS_PDA__Pilot__DLP__DBPtr_setAppBlock, file); + newXS("PDA::Pilot::DLP::DBPtr::purge", XS_PDA__Pilot__DLP__DBPtr_purge, file); + newXS("PDA::Pilot::DLP::DBPtr::resetFlags", XS_PDA__Pilot__DLP__DBPtr_resetFlags, file); + newXS("PDA::Pilot::DLP::DBPtr::deleteCategory", XS_PDA__Pilot__DLP__DBPtr_deleteCategory, file); + newXS("PDA::Pilot::DLP::DBPtr::newRecord", XS_PDA__Pilot__DLP__DBPtr_newRecord, file); + newXS("PDA::Pilot::DLP::DBPtr::newResource", XS_PDA__Pilot__DLP__DBPtr_newResource, file); + newXS("PDA::Pilot::DLP::DBPtr::newAppBlock", XS_PDA__Pilot__DLP__DBPtr_newAppBlock, file); + newXS("PDA::Pilot::DLP::DBPtr::newSortBlock", XS_PDA__Pilot__DLP__DBPtr_newSortBlock, file); + newXS("PDA::Pilot::DLP::DBPtr::newPref", XS_PDA__Pilot__DLP__DBPtr_newPref, file); + newXS("PDA::Pilot::DLP::DBPtr::getRecord", XS_PDA__Pilot__DLP__DBPtr_getRecord, file); + newXS("PDA::Pilot::DLP::DBPtr::moveCategory", XS_PDA__Pilot__DLP__DBPtr_moveCategory, file); + newXS("PDA::Pilot::DLP::DBPtr::deleteRecord", XS_PDA__Pilot__DLP__DBPtr_deleteRecord, file); + newXS("PDA::Pilot::DLP::DBPtr::deleteRecords", XS_PDA__Pilot__DLP__DBPtr_deleteRecords, file); + newXS("PDA::Pilot::DLP::DBPtr::resetNext", XS_PDA__Pilot__DLP__DBPtr_resetNext, file); + newXS("PDA::Pilot::DLP::DBPtr::getRecords", XS_PDA__Pilot__DLP__DBPtr_getRecords, file); + newXS("PDA::Pilot::DLP::DBPtr::getRecordIDs", XS_PDA__Pilot__DLP__DBPtr_getRecordIDs, file); + newXS("PDA::Pilot::DLP::DBPtr::getRecordByID", XS_PDA__Pilot__DLP__DBPtr_getRecordByID, file); + newXS("PDA::Pilot::DLP::DBPtr::getNextModRecord", XS_PDA__Pilot__DLP__DBPtr_getNextModRecord, file); + newXS("PDA::Pilot::DLP::DBPtr::getNextRecord", XS_PDA__Pilot__DLP__DBPtr_getNextRecord, file); + newXS("PDA::Pilot::DLP::DBPtr::setRecord", XS_PDA__Pilot__DLP__DBPtr_setRecord, file); + newXS("PDA::Pilot::DLP::DBPtr::setRecordRaw", XS_PDA__Pilot__DLP__DBPtr_setRecordRaw, file); + newXS("PDA::Pilot::DLP::DBPtr::setResourceByID", XS_PDA__Pilot__DLP__DBPtr_setResourceByID, file); + newXS("PDA::Pilot::DLP::DBPtr::getResource", XS_PDA__Pilot__DLP__DBPtr_getResource, file); + newXS("PDA::Pilot::DLP::DBPtr::setResource", XS_PDA__Pilot__DLP__DBPtr_setResource, file); + newXS("PDA::Pilot::DLP::DBPtr::deleteResource", XS_PDA__Pilot__DLP__DBPtr_deleteResource, file); + newXS("PDA::Pilot::DLP::DBPtr::deleteResources", XS_PDA__Pilot__DLP__DBPtr_deleteResources, file); + newXS("PDA::Pilot::DLP::DBPtr::getPref", XS_PDA__Pilot__DLP__DBPtr_getPref, file); + newXS("PDA::Pilot::DLP::DBPtr::setPref", XS_PDA__Pilot__DLP__DBPtr_setPref, file); + newXS("PDA::Pilot::DLP::DBPtr::setPrefRaw", XS_PDA__Pilot__DLP__DBPtr_setPrefRaw, file); + newXS("PDA::Pilot::DLPPtr::DESTROY", XS_PDA__Pilot__DLPPtr_DESTROY, file); + newXS("PDA::Pilot::DLPPtr::errno", XS_PDA__Pilot__DLPPtr_errno, file); + newXS("PDA::Pilot::DLPPtr::palmos_errno", XS_PDA__Pilot__DLPPtr_palmos_errno, file); + newXS("PDA::Pilot::DLPPtr::getTime", XS_PDA__Pilot__DLPPtr_getTime, file); + newXS("PDA::Pilot::DLPPtr::setTime", XS_PDA__Pilot__DLPPtr_setTime, file); + newXS("PDA::Pilot::DLPPtr::getSysInfo", XS_PDA__Pilot__DLPPtr_getSysInfo, file); + newXS("PDA::Pilot::DLPPtr::getCardInfo", XS_PDA__Pilot__DLPPtr_getCardInfo, file); + newXS("PDA::Pilot::DLPPtr::setUserInfo", XS_PDA__Pilot__DLPPtr_setUserInfo, file); + newXS("PDA::Pilot::DLPPtr::getBattery", XS_PDA__Pilot__DLPPtr_getBattery, file); + newXS("PDA::Pilot::DLPPtr::getUserInfo", XS_PDA__Pilot__DLPPtr_getUserInfo, file); + newXS("PDA::Pilot::DLPPtr::newPref", XS_PDA__Pilot__DLPPtr_newPref, file); + newXS("PDA::Pilot::DLPPtr::delete", XS_PDA__Pilot__DLPPtr_delete, file); + newXS("PDA::Pilot::DLPPtr::open", XS_PDA__Pilot__DLPPtr_open, file); + newXS("PDA::Pilot::DLPPtr::create", XS_PDA__Pilot__DLPPtr_create, file); + newXS("PDA::Pilot::DLPPtr::getPref", XS_PDA__Pilot__DLPPtr_getPref, file); + newXS("PDA::Pilot::DLPPtr::setPref", XS_PDA__Pilot__DLPPtr_setPref, file); + newXS("PDA::Pilot::DLPPtr::setPrefRaw", XS_PDA__Pilot__DLPPtr_setPrefRaw, file); + newXS("PDA::Pilot::DLPPtr::close", XS_PDA__Pilot__DLPPtr_close, file); + newXS("PDA::Pilot::DLPPtr::abort", XS_PDA__Pilot__DLPPtr_abort, file); + newXS("PDA::Pilot::DLPPtr::reset", XS_PDA__Pilot__DLPPtr_reset, file); + newXS("PDA::Pilot::DLPPtr::getStatus", XS_PDA__Pilot__DLPPtr_getStatus, file); + newXS("PDA::Pilot::DLPPtr::log", XS_PDA__Pilot__DLPPtr_log, file); + newXS("PDA::Pilot::DLPPtr::dirty", XS_PDA__Pilot__DLPPtr_dirty, file); + newXS("PDA::Pilot::DLPPtr::getDBInfo", XS_PDA__Pilot__DLPPtr_getDBInfo, file); + newXS("PDA::Pilot::DLPPtr::findDBInfo", XS_PDA__Pilot__DLPPtr_findDBInfo, file); + newXS("PDA::Pilot::DLPPtr::getFeature", XS_PDA__Pilot__DLPPtr_getFeature, file); + newXS("PDA::Pilot::DLPPtr::getROMToken", XS_PDA__Pilot__DLPPtr_getROMToken, file); + newXS("PDA::Pilot::DLPPtr::callApplication", XS_PDA__Pilot__DLPPtr_callApplication, file); + newXS("PDA::Pilot::DLPPtr::tickle", XS_PDA__Pilot__DLPPtr_tickle, file); + newXS("PDA::Pilot::DLPPtr::watchdog", XS_PDA__Pilot__DLPPtr_watchdog, file); + newXS("PDA::Pilot::File::open", XS_PDA__Pilot__File_open, file); + newXS("PDA::Pilot::File::create", XS_PDA__Pilot__File_create, file); + newXS("PDA::Pilot::FilePtr::errno", XS_PDA__Pilot__FilePtr_errno, file); + newXS("PDA::Pilot::FilePtr::DESTROY", XS_PDA__Pilot__FilePtr_DESTROY, file); + newXS("PDA::Pilot::FilePtr::class", XS_PDA__Pilot__FilePtr_class, file); + newXS("PDA::Pilot::FilePtr::close", XS_PDA__Pilot__FilePtr_close, file); + newXS("PDA::Pilot::FilePtr::getAppBlock", XS_PDA__Pilot__FilePtr_getAppBlock, file); + newXS("PDA::Pilot::FilePtr::getSortBlock", XS_PDA__Pilot__FilePtr_getSortBlock, file); + newXS("PDA::Pilot::FilePtr::getRecords", XS_PDA__Pilot__FilePtr_getRecords, file); + newXS("PDA::Pilot::FilePtr::getResource", XS_PDA__Pilot__FilePtr_getResource, file); + newXS("PDA::Pilot::FilePtr::getRecord", XS_PDA__Pilot__FilePtr_getRecord, file); + newXS("PDA::Pilot::FilePtr::getRecordByID", XS_PDA__Pilot__FilePtr_getRecordByID, file); + newXS("PDA::Pilot::FilePtr::checkID", XS_PDA__Pilot__FilePtr_checkID, file); + newXS("PDA::Pilot::FilePtr::getDBInfo", XS_PDA__Pilot__FilePtr_getDBInfo, file); + newXS("PDA::Pilot::FilePtr::setDBInfo", XS_PDA__Pilot__FilePtr_setDBInfo, file); + newXS("PDA::Pilot::FilePtr::setAppBlock", XS_PDA__Pilot__FilePtr_setAppBlock, file); + newXS("PDA::Pilot::FilePtr::setSortBlock", XS_PDA__Pilot__FilePtr_setSortBlock, file); + newXS("PDA::Pilot::FilePtr::addResource", XS_PDA__Pilot__FilePtr_addResource, file); + newXS("PDA::Pilot::FilePtr::addRecord", XS_PDA__Pilot__FilePtr_addRecord, file); + newXS("PDA::Pilot::FilePtr::addRecordRaw", XS_PDA__Pilot__FilePtr_addRecordRaw, file); + newXS("PDA::Pilot::FilePtr::install", XS_PDA__Pilot__FilePtr_install, file); + newXS("PDA::Pilot::FilePtr::retrieve", XS_PDA__Pilot__FilePtr_retrieve, file); + if (PL_unitcheckav) + call_list(PL_scopestack_ix, PL_unitcheckav); + XSRETURN_YES; +} + diff --git a/bindings/Perl/Pilot.o b/bindings/Perl/Pilot.o new file mode 100644 index 0000000000000000000000000000000000000000..fea3ea27358d42b3cc6205c14c0eb9ad4280f80a GIT binary patch literal 1092616 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 YDONXp(m8eKn&QxB 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 z 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%0Asa>zCK0kwFgl=R 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%0A3yfd=)59BoScMPfUCgTO2@a8XG4Q*m#A_Mi0v( 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 DBoU=6 literal 0 HcmV?d00001 diff --git a/bindings/Perl/Pilot.pm b/bindings/Perl/Pilot.pm new file mode 100644 index 0000000..43b9258 --- /dev/null +++ b/bindings/Perl/Pilot.pm @@ -0,0 +1,1060 @@ +# +# Pilot.pm - Interface glue for the pilot-link libraries and Perl. +# +# Copyright (C) 1997, 1998, Kenneth Albanowski +# +# 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 St, Fifth Floor, Boston, MA 02110-1301, USA. * +# + +package PDA::Pilot; + +require Exporter; +require DynaLoader; +require AutoLoader; +use Carp; + +@ISA = qw(Exporter DynaLoader); +# Items to export into callers namespace by default. Note: do not export +# names by default without a very good reason. Use EXPORT_OK instead. +# Do not simply export all your public functions/methods/constants. +@ EXPORT = qw(PI_AF_SLP + PI_PF_LOOP + PI_PF_PADP + PI_PF_SLP + PI_PilotSocketConsole + PI_PilotSocketDLP + PI_PilotSocketDebugger + PI_PilotSocketRemoteUI + PI_SOCK_DGRAM + PI_SOCK_RAW + PI_SOCK_SEQPACKET + PI_SOCK_STREAM + dlpOpenRead + dlpOpenWrite + dlpOpenExclusive + dlpOpenSecret + dlpOpenReadWrite + dlpEndCodeNormal + dlpEndCodeOutOfMemory + dlpEndCodeUserCan + dlpEndCodeOther + dlpRecAttrDeleted + dlpRecAttrDirty + dlpRecAttrBusy + dlpRecAttrSecret + dlpRecAttrArchived + dlpDBFlagResource + dlpDBFlagReadOnly + dlpDBFlagAppInfoDirty + dlpDBFlagBackup + dlpDBFlagOpen + dlpDBFlagNewer + dlpDBFlagReset + dlpDBFlagCopyPrevention + dlpDBFlagStream + dlpDBListRAM + dlpDBListROM +); + +# Other items we are prepared to export if requested +@EXPORT_OK = qw( + CompareTm +); + +# This AUTOLOAD is used to 'autoload' constants from the constant() XS +# function. If a constant is not found then control is passed to the +# AUTOLOAD in AutoLoader. + +sub AUTOLOAD { + # This AUTOLOAD is used to 'autoload' constants from the constant() + # XS function. + + my $constname; + our $AUTOLOAD; + ($constname = $AUTOLOAD) =~ s/.*:://; + croak "&PDA::Pilot::constant not defined" if $constname eq 'constant'; + my ($error, $val) = constant($constname); + if ($error) { croak $error; } + { + no strict 'refs'; + # Fixed between 5.005_53 and 5.005_61 +#XXX if ($] >= 5.00561) { +#XXX *$AUTOLOAD = sub () { $val }; +#XXX } +#XXX else { + *$AUTOLOAD = sub { $val }; +#XXX } + } + goto &$AUTOLOAD; +} + + +bootstrap PDA::Pilot; +package PDA::Pilot::Block; + +##################################################################### +# +# Generic functions for "blocks", i.e., chunks of data from a Pilot. +# +##################################################################### +sub new { + my($self,$data) = @_; + $self = bless {}, (ref($self) || $self); + if (defined($data)) { + $self->Unpack($data); + } else { + $self->Fill(); + } + return $self; +} + +##################################################################### +# +# Translate a "packed" block of binary data into a decent Perl +# representation +# +##################################################################### +sub Unpack { + my($self,$data) = @_; + $self->{raw} = $data; +} + + +##################################################################### +# +# Translate a Perl representation of a data block into a string of +# binary data +# +##################################################################### +sub Pack { + my($self) = @_; + return $self->{raw}; +} + +##################################################################### +# +# Just copy the "raw" item straight through +# +##################################################################### +sub Raw { + my($self) = @_; + return $self->{raw}; +} + +##################################################################### +# +# Fill in a block with default Perl data +# +##################################################################### +sub Fill { + +} + +##################################################################### +# +# Copy a block +# +##################################################################### +sub Clone { + my($self) = @_; + my($k,$v); + my($new) = bless {}, ref($_); + for (($k,$v) = each %$self) { $new->{$k} = $v } + $new; +} + +package PDA::Pilot::Record; + +##################################################################### +# +# A class to represent generic database records +# +##################################################################### +@ISA = qw(PDA::Pilot::Block); + +sub new { + my($self,$data,$id,$attr,$cat,$index) = @_; + + $index = 0 unless defined($index); + $id = 0 unless defined($id); + $attr = 0 unless defined($attr); + $cat = "" unless defined($cat); + + $self = bless { + "index" => $index, + id => $id, + deleted => !!($attr & 0x80), + modified => !!($attr & 0x40), + busy => !!($attr & 0x20), + secret => !!($attr & 0x10), + archived => !!($attr & 0x08), + category => $cat}, + (ref($self) || $self); + if (defined($data)) { + $self->Unpack($data); + } else { + $self->Fill(); + } + return $self; +} + +package PDA::Pilot::Resource; + +##################################################################### +# +# A class to represent generic database resources +# +##################################################################### +@ISA = qw(PDA::Pilot::Block); + +sub new { + my($self,$data,$index,$type,$id) = @_; + $self = bless { "index" => $index, type => $type, id => $id}, + (ref($self) || $self); + if (defined($data)) { + $self->Unpack($data); + } else { + $self->Fill(); + } + return $self; +} + +package PDA::Pilot::AppBlock; + +##################################################################### +# A class to represent generic application-information blocks +##################################################################### +@ISA = qw(PDA::Pilot::Block); + +package PDA::Pilot::SortBlock; + +##################################################################### +# A class to represent generic sort-information blocks +##################################################################### +@ISA = qw(PDA::Pilot::Block); + +package PDA::Pilot::Pref; + +##################################################################### +# A class to represent generic preference blocks +##################################################################### +@ISA = qw(PDA::Pilot::Block); + +sub new { + my($self,$data,$creator,$id,$version,$backup) = @_; + $self = bless { creator => $creator, id => $id, version => $version, backup => $backup}, + (ref($self) || $self); + if (defined($data)) { + $self->Unpack($data); + } else { + $self->Fill(); + } + return $self; +} + +package PDA::Pilot::MemoRecord; + +##################################################################### +# A class to represent records of the Memo application +##################################################################### +@ISA = qw(PDA::Pilot::Record); + +sub Pack { + my($self) = @_; + return $self->{raw} = PDA::Pilot::Memo::Pack($self); +} + +sub Unpack { + my($self, $data) = @_; + $self->{raw} = $data; + PDA::Pilot::Memo::Unpack($self); +} + +package PDA::Pilot::MemoAppBlock; + +##################################################################### +# A class to represent records of the Memo application +##################################################################### +@ISA = qw(PDA::Pilot::AppBlock); + +sub Pack { + my($self) = @_; + return PDA::Pilot::Memo::PackAppBlock($self); +} + +sub Unpack { + my($self, $data) = @_; + $self->{raw} = $data; + PDA::Pilot::Memo::UnpackAppBlock($self); +} + +package PDA::Pilot::ToDoRecord; + +##################################################################### +# A class to represent records of the ToDo application +##################################################################### +@ISA = qw(PDA::Pilot::Record); + +sub Pack { + my($self) = @_; + return $self->{raw} = PDA::Pilot::ToDo::Pack($self); +} + +sub Unpack { + my($self, $data) = @_; + $self->{raw} = $data; + PDA::Pilot::ToDo::Unpack($self); +} + +package PDA::Pilot::ToDoAppBlock; + +##################################################################### +# A class to represent the app block of the ToDo application +##################################################################### +@ISA = qw(PDA::Pilot::AppBlock); + +sub Pack { + my($self) = @_; + return PDA::Pilot::ToDo::PackAppBlock($self); +} + +sub Unpack { + my($self, $data) = @_; + $self->{raw} = $data; + PDA::Pilot::ToDo::UnpackAppBlock($self); +} + +package PDA::Pilot::AddressRecord; + +##################################################################### +# A class to represent records of the Address application +##################################################################### +@ISA = qw(PDA::Pilot::Record); + +sub Pack { + my($self) = @_; + return $self->{raw} = PDA::Pilot::Address::Pack($self); +} + +sub Unpack { + my($self, $data) = @_; + $self->{raw} = $data; + PDA::Pilot::Address::Unpack($self); +} + +package PDA::Pilot::AddressAppBlock; + +##################################################################### +# A class to represent the app block of the Address application +##################################################################### +@ISA = qw(PDA::Pilot::AppBlock); + +sub Pack { + my($self) = @_; + return PDA::Pilot::Address::PackAppBlock($self); +} + +sub Unpack { + my($self, $data) = @_; + $self->{raw} = $data; + PDA::Pilot::Address::UnpackAppBlock($self); +} + +package PDA::Pilot::AppointmentRecord; + +##################################################################### +# A class to represent records of the Appointment application +##################################################################### +@ISA = qw(PDA::Pilot::Record); + +sub Pack { + my($self) = @_; + return PDA::Pilot::Appointment::Pack($self); +} + +sub Unpack { + my($self, $data) = @_; + $self->{raw} = $data; + PDA::Pilot::Appointment::Unpack($self); +} + +package PDA::Pilot::AppointmentAppBlock; + +##################################################################### +# A class to represent the app block of the Appointment application +##################################################################### +@ISA = qw(PDA::Pilot::AppBlock); + +sub Pack { + my($self) = @_; + return PDA::Pilot::Appointment::PackAppBlock($self); +} + +sub Unpack { + my($self, $data) = @_; + $self->{raw} = $data; + PDA::Pilot::Appointment::UnpackAppBlock($self); +} + +package PDA::Pilot::MailRecord; + +##################################################################### +# A class to represent records of the Mail application +##################################################################### +@ISA = qw(PDA::Pilot::Record); + +sub Pack { + my($self) = @_; + return PDA::Pilot::Mail::Pack($self); +} + +sub Unpack { + my($self, $data) = @_; + $self->{raw} = $data; + PDA::Pilot::Mail::Unpack($self); +} + +package PDA::Pilot::MailAppBlock; + +##################################################################### +# A class to represent the app block of the Mail application +##################################################################### +@ISA = qw(PDA::Pilot::AppBlock); + +sub Pack { + my($self) = @_; + return PDA::Pilot::Mail::PackAppBlock($self); +} + +sub Unpack { + my($self, $data) = @_; + $self->{raw} = $data; + PDA::Pilot::Mail::UnpackAppBlock($self); +} + +package PDA::Pilot::MailSyncPref; + +##################################################################### +# A class to represent the sync pref of the Mail application +##################################################################### +@ISA = qw(PDA::Pilot::Pref); + +sub Pack { + my($self) = @_; + return PDA::Pilot::Mail::PackSyncPref($self); +} + +sub Unpack { + my($self, $data) = @_; + $self->{raw} = $data; + PDA::Pilot::Mail::UnpackSyncPref($self); +} + +package PDA::Pilot::MailSignaturePref; + +##################################################################### +# A class to represent the signature pref of the Mail application +##################################################################### +@ISA = qw(PDA::Pilot::Pref); + +sub Pack { + my($self) = @_; + return PDA::Pilot::Mail::PackSignaturePref($self); +} + +sub Unpack { + my($self, $data) = @_; + $self->{raw} = $data; + PDA::Pilot::Mail::UnpackSignaturePref($self); +} + +package PDA::Pilot::ExpenseRecord; + +##################################################################### +# A class to represent records of the Expense application +##################################################################### +@ISA = qw(PDA::Pilot::Record); + +sub Pack { + my($self) = @_; + return PDA::Pilot::Expense::Pack($self); +} + +sub Unpack { + my($self, $data) = @_; + $self->{raw} = $data; + PDA::Pilot::Expense::Unpack($self); +} + +package PDA::Pilot::ExpenseAppBlock; + +##################################################################### +# A class to represent the app block of the Expense application +##################################################################### +@ISA = qw(PDA::Pilot::AppBlock); + +sub Pack { + my($self) = @_; + return PDA::Pilot::Expense::PackAppBlock($self); +} + +sub Unpack { + my($self, $data) = @_; + $self->{raw} = $data; + PDA::Pilot::Expense::UnpackAppBlock($self); +} + +package PDA::Pilot::ExpensePref; + +##################################################################### +# A class to represent the pref of the Expense application +##################################################################### +@ISA = qw(PDA::Pilot::Pref); + +sub Pack { + my($self) = @_; + return PDA::Pilot::Expense::PackPref($self); +} + +sub Unpack { + my($self, $data) = @_; + $self->{raw} = $data; + PDA::Pilot::Expense::UnpackPref($self); +} + +package PDA::Pilot::Database; + +##################################################################### +# A class to specify which classes are used for generic database entries +##################################################################### +sub record { shift @_; PDA::Pilot::Record->new(@_) } +sub resource { shift @_; PDA::Pilot::Resource->new(@_) } +sub pref { shift @_; PDA::Pilot::Pref->new(@_) } +sub appblock { shift @_; PDA::Pilot::AppBlock->new(@_) } +sub sortblock { shift @_; PDA::Pilot::SortBlock->new(@_) } + +package PDA::Pilot::MemoDatabase; + +##################################################################### +# A class to specify which classes are used for Memo database entries +##################################################################### +@ISA=qw(PDA::Pilot::Database); + +sub record { shift @_; PDA::Pilot::MemoRecord->new(@_) } +sub appblock { shift @_; PDA::Pilot::MemoAppBlock->new(@_) } +sub creator { 'memo' } +sub dbname { 'MemoDB' } + +package PDA::Pilot::ToDoDatabase; + +@ISA=qw(PDA::Pilot::Database); + +sub record { shift @_; PDA::Pilot::ToDoRecord->new(@_) } +sub appblock { shift @_; PDA::Pilot::ToDoAppBlock->new(@_) } +sub creator { 'todo' } +sub dbname { 'ToDoDB' } + +package PDA::Pilot::AppointmentDatabase; + +@ISA=qw(PDA::Pilot::Database); + +sub record { shift @_; PDA::Pilot::AppointmentRecord->new(@_) } +sub appblock { shift @_; PDA::Pilot::AppointmentAppBlock->new(@_) } +sub creator { 'date' } +sub dbname { 'DatebookDB' } + +package PDA::Pilot::AddressDatabase; + +@ISA=qw(PDA::Pilot::Database); + +sub record { shift @_; PDA::Pilot::AddressRecord->new(@_) } +sub appblock { shift @_; PDA::Pilot::AddressAppBlock->new(@_) } +sub creator { 'addr' } +sub dbname { 'AddressDB' } + +package PDA::Pilot::MailDatabase; + +@ISA=qw(PDA::Pilot::Database); + +sub record { shift @_; PDA::Pilot::MailRecord->new(@_) } +sub appblock { shift @_; PDA::Pilot::MailAppBlock->new(@_) } +sub pref { + shift @_; + my($data,$creator,$id) = @_; + if (($id == 1) || ($id == 2)) { + PDA::Pilot::MailSyncPref->new(@_); + } elsif ($id == 3) { + PDA::Pilot::MailSignaturePref->new(@_); + } else { + PDA::Pilot::Database->pref(@_); + } +} +sub creator { 'mail' } +sub dbname { 'MailDB' } + +package PDA::Pilot::ExpenseDatabase; + +@ISA=qw(PDA::Pilot::Database); + +sub record { shift @_; PDA::Pilot::ExpenseRecord->new(@_) } +sub appblock { shift @_; PDA::Pilot::ExpenseAppBlock->new(@_) } +sub pref { + shift @_; + my($data,$creator,$id) = @_; + if ($id == 1) { + PDA::Pilot::ExpensePref->new(@_); + } else { + PDA::Pilot::Database->pref(@_); + } +} +sub creator { 'exps' } +sub dbname { 'ExpenseDB' } + +package PDA::Pilot; + +%DBClasses = ( MemoDB => 'PDA::Pilot::MemoDatabase', + ToDoDB => 'PDA::Pilot::ToDoDatabase', + AddressDB => 'PDA::Pilot::AddressDatabase', + DatebookDB => 'PDA::Pilot::AppointmentDatabase', + MailDB => 'PDA::Pilot::MailDatabase', + ExpenseDB => 'PDA::Pilot::ExpenseDatabase' + ); +%PrefClasses = ( memo => 'PDA::Pilot::MemoDatabase', + todo => 'PDA::Pilot::ToDoDatabase', + mail => 'PDA::Pilot::MailDatabase', + date => 'PDA::Pilot::AppointmentDatabase', + addr => 'PDA::Pilot::AddressDatabase', + exps => 'PDA::Pilot::ExpenseDatabase' + ); + +##################################################################### +# Default classes +##################################################################### +$DBClasses{''} = 'PDA::Pilot::Database'; +$PrefClasses{''} = 'PDA::Pilot::Database'; + +sub CompareTm { + my(@a) = @{$_[0]}; + my(@b) = @{$_[1]}; + return ($a[5] <=> $b[5]) || ($a[4] <=> $b[4]) || ($a[3] <=> $b[3]) || + ($a[2] <=> $b[2]) || ($a[1] <=> $b[1]) || ($a[0] <=> $b[0]); +} + +##################################################################### +# Autoload methods go after __END__, and are processed by the +# autosplit program. +##################################################################### + +1; +__END__ + +=head1 + +Commands include: + +B This information is out of date, and potentially quite +misleading. + +=over 4 + +=item PDA::Pilot::Appointment::Unpack(buffer) + +Returns hash reference containing appointment (datebook entry) in a usable +format, given a record from a .pdb file or a Pilot database. + +=item PDA::Pilot::Appointment::Pack(buffer) + +Given a hash reference in the form that the previous call generates, returns +a single string suitable for storing in a Pilot's database. + +=item PDA::Pilot::Appointment::UnpackAppInfo(buffer) + +Returns hash reference containing appointment (datebook entry) in a usable +format, given the AppInfo record from a .pdb file or a Pilot database. + +=item PDA::Pilot::Appointment::PackAppInfo(buffer) + +Given a hash reference in the form that the previous call generates, returns +a single string suitable for storing in a Pilot's database AppInfo block. + +=item PDA::Pilot::Memo::Unpack(buffer) + +Returns hash reference containing appointment (datebook entry) in a usable +format, given a record from a .pdb file or a Pilot database. + +=item PDA::Pilot::Memo::Pack(buffer) + +Given a hash reference in the form that the previous call generates, returns +a single string suitable for storing in a Pilot's database. + +=item PDA::Pilot::Memo::UnpackAppInfo(buffer) + +Returns hash reference containing appointment (datebook entry) in a usable +format, given the AppInfo record from a .pdb file or a Pilot database. + +=item PDA::Pilot::Memo::PackAppInfo(buffer) + +Given a hash reference in the form that the previous call generates, returns +a single string suitable for storing in a Pilot's database AppInfo block. + +=item PDA::Pilot::ToDo::Unpack(buffer) + +Returns hash reference containing appointment (datebook entry) in a usable +format, given a record from a .pdb file or a Pilot database. + +=item PDA::Pilot::ToDo::Pack(buffer) + +Given a hash reference in the form that the previous call generates, returns +a single string suitable for storing in a Pilot's database. + +=item PDA::Pilot::ToDo::UnpackAppInfo(buffer) + +Returns hash reference containing appointment (datebook entry) in a usable +format, given the AppInfo record from a .pdb file or a Pilot database. + +=item PDA::Pilot::ToDo::PackAppInfo(buffer) + +Given a hash reference in the form that the previous call generates, returns +a single string suitable for storing in a Pilot's database AppInfo block. + +=item PDA::Pilot::Address::Unpack(buffer) + +Returns hash reference containing appointment (datebook entry) in a usable +format, given a record from a .pdb file or a Pilot database. + +=item PDA::Pilot::Address::Pack(buffer) + +Given a hash reference in the form that the previous call generates, returns +a single string suitable for storing in a Pilot's database. + +=item PDA::Pilot::Address::UnpackAppInfo(buffer) + +Returns hash reference containing appointment (datebook entry) in a usable +format, given the AppInfo record from a .pdb file or a Pilot database. + +=item PDA::Pilot::Address::PackAppInfo(buffer) + +Given a hash reference in the form that the previous call generates, returns +a single string suitable for storing in a Pilot's database AppInfo block. + +=item PDA::Pilot::Mail::Unpack(buffer) + +Returns hash reference containing appointment (datebook entry) in a usable +format, given a record from a .pdb file or a Pilot database. + +=item PDA::Pilot::Mail::Pack(buffer) + +Given a hash reference in the form that the previous call generates, returns +a single string suitable for storing in a Pilot's database. + +=item PDA::Pilot::Mail::UnpackAppInfo(buffer) + +Returns hash reference containing appointment (datebook entry) in a usable +format, given the AppInfo record from a .pdb file or a Pilot database. + +=item PDA::Pilot::Mail::PackAppInfo(buffer) + +Given a hash reference in the form that the previous call generates, returns +a single string suitable for storing in a Pilot's database AppInfo block. + +=item PDA::Pilot::Socket::socket(domain, type, protocol) + +Same as pi-link routine called pi_socket. + +=item PDA::Pilot::Socket::close(socket) + +Same as pi-link routine called pi_close. + +=item PDA::Pilot::Socket::write(socket, string) + +Same as pi-link routine called pi_write. + +=item PDA::Pilot::Socket::read(socket, len) + +Same as pi-link routine called pi_write (returns read data as result.) + +=item PDA::Pilot::Socket::listen(socket, backlog) + +Same as pi-link routine called pi_listen. + +=item PDA::Pilot::Socket::bind(socket, sockaddr) + +Same as pi-link routine called pi_bind. Sockaddr may either be a packed +string containing a pi_sockaddr structure, or a hash reference containing +"device", "family", and "port" keys. + +=item PDA::Pilot::Socket::accept(socket) + +Same as pi-link routine called pi_accept. If connection is successfull, returns +reference to hash containing remote address, as described above. If failed, returns +undef. + +=item PDA::Pilot::DLP::errno() + +Returns last DLP error, resetting error to zero. + +=item PDA::Pilot::DLP::GetSysDateTime(socket) + +Same as DLP call dlp_GetSysDateTime. If successfull, returns time, otherwise +returns undef. + +=item PDA::Pilot::DLP::SetSysDateTime(socket, time) + +Same as DLP call dlp_SetSysDateTime. time must be a time_t value. + +=item PDA::Pilot::DLP::ReadSysInfo(socket) + +Same as DLP call dlp_ReadSysInfo. If successfull, returns reference to hash +containing system information. + +=item PDA::Pilot::DLP::ReadStorageInfo(socket, cardno) + +Same as DLP call dlp_ReadStorageInfo. If successfull, returns reference to hash +containing information on given memory card. + +=item PDA::Pilot::DLP::ReadUserInfo(socket) + +Same as DLP call dlp_ReadUserInfo. If successfull, returns reference to hash +containing information about user settings. + +=item PDA::Pilot::DLP::WriteUserInfo(socket, info) + +Same as DLP call dlp_WriteUserInfo. info must be a reference to a hash +containing data similar to that returned by ReadUserInfo (Note: the password +can not be set through this call.) + +=item PDA::Pilot::DLP::OpenDB(socket, cardno, mode, name) + +Same as DLP call dlp_OpenDB. If successfull returns database handle, +otherwise returns undef. + +=item PDA::Pilot::DLP::CloseDB(socket, handle) + +Same as DLP call dlp_CloseDB. + +=item PDA::Pilot::DLP::EndOfSync(socket, status) + +Same as DLP call dlp_EndOfSync. + +=item PDA::Pilot::DLP::AbortSync(socket) + +Same as DLP call dlp_AbortSync. + +=item PDA::Pilot::DLP::MoveCategory(socket, handle, fromcat, tocat) + +Same as DLP call dlp_MoveCategory. + +=item PDA::Pilot::DLP::ResetSystem(socket) + +Same as DLP call dlp_ResetSystem. + +=item PDA::Pilot::DLP::OpenConduit(socket) + +Same as DLP call dlp_OpenConduit. + +=item PDA::Pilot::DLP::AddSyncLogEntry(socket, message) + +Same as DLP call dlp_AddSyncLogEntry + +=item PDA::Pilot::DLP::CleanUpDatabase(socket, handle) + +Same as DLP call dlp_CleanUpDatabase. + +=item PDA::Pilot::DLP::ResetSyncFlags(socket, handle) + +Same as DLP call dlp_ResetSyncFlags. + +=item PDA::Pilot::DLP::ResetDBIndex(socket, handle) + +Same as DLP call dlp_ResetDBIndex. + +=item PDA::Pilot::DLP::ResetLastSyncPC(socket) + +Same as DLP call dlp_ResetLastSyncPC. + +=item PDA::Pilot::DLP::DeleteCategory(socket, handle, category) + +Same as DLP call dlp_DeleteCategory. + +=item PDA::Pilot::DLP::DeleteRecord(socket, handle, all, id) + +Same as DLP call dlp_DeleteRecord. + +=item PDA::Pilot::DLP::ReadDBList(socket, cardno, flags, start) + +Same as DLP call dlp_ReadDBList. If successfull, returns reference +to hash containing DB information. If failed, returns undef. + +=item PDA::Pilot::DLP::FindDBInfo(socket, cardno, flags, name, type, creator) + +Same as DLP call dlp_FindDBInfo. If successfull, returns reference +to hash containing DB information. If failed, returns undef. + +=item PDA::Pilot::DLP::ReadFeature(socket, creator, number) + +Same as DLP call dlp_ReadFeature. If successfull, returns feature value. If +failed, returns undef. + +=item PDA::Pilot::DLP::ReadAppBlock(socket, handle) + +Same as DLP call dlp_ReadAppBlock. If successfull, returns app block. If +failed, returns undef. + +=item PDA::Pilot::DLP::ReadSortBlock(socket, handle) + +Same as DLP call dlp_ReadSortBlock. If successfull, returns app block. If +failed, returns undef. + +=item PDA::Pilot::DLP::WriteAppBlock(socket, handle, block) + +Same as DLP call dlp_WriteAppBlock. + +=item PDA::Pilot::DLP::WriteSortBlock(socket, handle, block) + +Same as DLP call dlp_WriteSortBlock. + +=item PDA::Pilot::DLP::ReadOpenDBInfo(socket, handle) + +Same as DLP call dlp_ReadOpenDBInfo. + +=item PDA::Pilot::DLP::ReadRecordByIndex(socket, handle, index) + +Same as DLP call dlp_ReadRecordByIndex. If call fails, it returns undef. +Otherwise, in scalar context it returns the read record, in array it returns +the record, id, index, attr, and category, in that order. + +=item PDA::Pilot::DLP::ReadRecordById(socket, handle, id) + +Same as DLP call dlp_ReadRecordById. If call fails, it returns undef. +Otherwise, in scalar context it returns the read record, in array it returns +the record, id, index, attr, and category, in that order. + +=item PDA::Pilot::DLP::ReadNextModifiedRec(socket, handle) + +Same as DLP call dlp_ReadNextModifiedRec. If call fails, it returns undef. +Otherwise, in scalar context it returns the read record, in array it returns +the record, id, index, attr, and category, in that order. + +=item PDA::Pilot::DLP::ReadNextRecInCategory(socket, handle, category) + +Same as DLP call dlp_ReadNextRecInCategory. If call fails, it returns undef. +Otherwise, in scalar context it returns the read record, in array it returns +the record, id, index, attr, and category, in that order. + +=item PDA::Pilot::DLP::ReadNextModifiedRecInCategory(socket, handle, category) + +Same as DLP call dlp_ReadNextModifiedRecInCategory. If call fails, it returns undef. +Otherwise, in scalar context it returns the read record, in array it returns +the record, id, index, attr, and category, in that order. + +=item PDA::Pilot::DLP::WriteRecord(socket, handle, record, id, attr, category) + +Same as DLP call dlp_WriteRecord. + +=item PDA::Pilot::DLP::ReadResourceByType(socket, handle, type, id) + +Same as DLP call dlp_ReadResourceByType. If call fails, it returns undef. +Otherwise, in scalar context it returns the read record, in array it returns +the record, type, id, and index, in that order. + +=item PDA::Pilot::DLP::ReadResourceByIndex(socket, handle, index) + +Same as DLP call dlp_ReadResourceByIndex. If call fails, it returns undef. +Otherwise, in scalar context it returns the read record, in array it returns +the record, type, id, and index, in that order. + +=item PDA::Pilot::DLP::WriteResource(socket, handle, record, type, id) + +Same as DLP call dlp_WriteResource. + +=item PDA::Pilot::DLP::DeleteResource(socket, handle, all, type, id) + +Same as DLP call dlp_DeleteResource. + +=item PDA::Pilot::DLP::CallApplication(socket, creator, type, action, data) + +Same as DLP call dlp_CallApplication. + +=item PDA::Pilot::File::open(name) + +Same as pi_file_open. Returns a PDA::Pilot::File object on success. + +=item PDA::Pilot::File::close(file) + +Same as pi_file_close. + +=item PDA::Pilot::File::get_app_info(file) + +Same as pi_file_get_app_info. + +=item PDA::Pilot::File::get_sort_info(file) + +Same as pi_file_get_sort_info. + +=item PDA::Pilot::File::get_entries(file) + +Same as pi_file_get_entries. + +=item PDA::Pilot::File::read_resource(file, index) + +Same as pi_file_read_resource. Returns (record, type, id, index). + +=item PDA::Pilot::File::read_record(file, index) + +Same as pi_file_read_record. Returns (record, id, index, attr, category). + +=item PDA::Pilot::File::read_record_by_id(file, type, id) + +Same as pi_file_read_record_by_id. Returns (record, id, index, attr, category). + +=item PDA::Pilot::File::create(name, info) + +Same as pi_file_create. Info is reference to hash containg dbinfo data. + +=item PDA::Pilot::File::get_info(file) + +Same as pi_file_get_info. + +=item PDA::Pilot::File::set_info(file, info) + +Same as pi_file_set_info. + +=item PDA::Pilot::File::set_app_info(file, data) + +Same as pi_file_set_app_info. + +=item PDA::Pilot::File::set_sort_info(file, data) + +Same as pi_file_set_sort_info. + +=item PDA::Pilot::File::append_resource(file, data, type, id) + +Same as pi_file_append_resource. + +=item PDA::Pilot::File::append_record(file, data, attr, category, id) + +Same as pi_file_append_record. + +=item PDA::Pilot::File::install(file, socket, cardno) + +Same as pi_file_install. + +=item PDA::Pilot::File::retrieve(file, socket, cardno) + +Same as pi_file_retrieve. + +=back + +=cut diff --git a/bindings/Perl/Pilot.xs b/bindings/Perl/Pilot.xs new file mode 100644 index 0000000..5a633ff --- /dev/null +++ b/bindings/Perl/Pilot.xs @@ -0,0 +1,3779 @@ +/* + * Pilot.xs - Interface pilot-link library with Perl. + * + * Copyright (C) 1997, 1998, Kenneth Albanowski + * + * 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 St, Fifth Floor, Boston, MA 02110-1301, USA. * + */ + +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" +#include "patchlevel.h" + +/* FIXME Hack to get around a perl macro problem with calling the type 'int + dirty;' in pi-mail.h and pi-todo.h. This originally showed up with perl + 5.6 and gcc-3.x, and was fixed in gcc, but now appears in perl 5.8 with + gcc-3.x. It smells like another internal macro being exposed into + userland. */ +#undef dirty + +#include "pi-macros.h" +#include "pi-buffer.h" +#include "pi-file.h" +#include "pi-datebook.h" +#include "pi-memo.h" +#include "pi-expense.h" +#include "pi-address.h" +#include "pi-todo.h" +#include "pi-mail.h" +#include "pi-socket.h" +#include "pi-dlp.h" +#include "pi-syspkt.h" +#include "pi-error.h" +#include "pi-version.h" + +#include "const-c.inc" + + +typedef unsigned char * CPTR; + +static unsigned char mybuf[0xffff]; +static pi_buffer_t pibuf = {NULL, 0, 0}; + +static AV * tmtoav (struct tm * t) { + AV * ret = newAV(); + + av_push(ret, newSViv(t->tm_sec)); + av_push(ret, newSViv(t->tm_min)); + av_push(ret, newSViv(t->tm_hour)); + av_push(ret, newSViv(t->tm_mday)); + av_push(ret, newSViv(t->tm_mon)); + av_push(ret, newSViv(t->tm_year)); + av_push(ret, newSViv(t->tm_wday)); + av_push(ret, newSViv(t->tm_yday)); + av_push(ret, newSViv(t->tm_isdst)); + + return ret; +} + +struct tm * avtotm (AV * av, struct tm * t) { + SV ** s; + t->tm_sec = (s = av_fetch(av, 0, 0)) ? SvIV(*s) : 0; + t->tm_min = (s = av_fetch(av, 1, 0)) ? SvIV(*s) : 0; + t->tm_hour = (s = av_fetch(av, 2, 0)) ? SvIV(*s) : 0; + t->tm_mday = (s = av_fetch(av, 3, 0)) ? SvIV(*s) : 0; + t->tm_mon = (s = av_fetch(av, 4, 0)) ? SvIV(*s) : 0; + t->tm_year = (s = av_fetch(av, 5, 0)) ? SvIV(*s) : 0; + t->tm_wday = (s = av_fetch(av, 6, 0)) ? SvIV(*s) : 0; + t->tm_yday = (s = av_fetch(av, 7, 0)) ? SvIV(*s) : 0; + t->tm_isdst = (s = av_fetch(av, 8, 0)) ? SvIV(*s) : 0; + + return t; +} + +#ifndef newRV_noinc +static SV * rv; +#define newRV_noinc(s) ((rv=newRV(s)), SvREFCNT_dec(s), rv) +#endif + +#if (PATCHLEVEL < 3) || ((PATCHLEVEL == 3) && (SUBVERSION < 16)) +#define sv_derived_from(x, y) sv_isobject((x)) +#endif + +extern char * printlong _((unsigned long val)); +extern unsigned long makelong _((char * c)); +SV * newSVChar4 _((unsigned long arg)); +unsigned long SvChar4 _((SV *arg)); + +typedef struct { + int errnop; + struct pi_file * pf; + SV * Class; +} PDA__Pilot__File; + +typedef struct DLP { + int errnop; + int socket; +} PDA__Pilot__DLP; + +typedef struct DLPDB { + SV * connection; + int socket; + int handle; + int errnop; + SV * dbname; + int dbmode; + int dbcard; + SV * Class; +} PDA__Pilot__DLP__DB; + +/* typedef PDA__Pilot__DLP__DB PDA__Pilot__DLP__ResourceDB; + typedef PDA__Pilot__DLP__DB PDA__Pilot__DLP__RecordDB; +*/ +typedef struct DBInfo DBInfo; +typedef struct PilotUser UserInfo; +typedef unsigned long Char4; +typedef int Result; + +SV * +newSVChar4(arg) + unsigned long arg; +{ + char * c = printlong(arg); + if((isalpha(c[0]) || (c[0] == ' ') || (c[0] == '_')) && + (isalpha(c[1]) || (c[1] == ' ') || (c[0] == '_')) && + (isalpha(c[2]) || (c[2] == ' ') || (c[0] == '_')) && + (isalpha(c[3]) || (c[3] == ' ') || (c[0] == '_'))) { + return newSVpv(c,4); + } else { + return newSViv(arg); + } +} + +unsigned long +SvChar4(arg) + SV * arg; +{ + if (SvIOKp(arg)) { + return SvIV(arg); + } else { + STRLEN len; + char * c = SvPV(arg, len); + if (len != 4) + croak("Char4 argument a string that isn't four bytes long"); + return makelong(c); + } +} + +#define pack_dbinfo(arg, var, failure) { \ + if (failure < 0) { \ + arg = &sv_undef; \ + self->errnop = failure; \ + } else { \ + HV * i = newHV(); \ + hv_store(i, "more", 4, newSViv(var.more), 0); \ + hv_store(i, "flagReadOnly", 12, newSViv((var.flags & dlpDBFlagReadOnly) !=0), 0); \ + hv_store(i, "flagResource", 12, newSViv((var.flags & dlpDBFlagResource) !=0), 0); \ + hv_store(i, "flagBackup", 10, newSViv((var.flags & dlpDBFlagBackup) !=0), 0); \ + hv_store(i, "flagOpen", 8, newSViv((var.flags & dlpDBFlagOpen) !=0), 0); \ + hv_store(i, "flagAppInfoDirty", 16, newSViv((var.flags & dlpDBFlagAppInfoDirty) !=0), 0); \ + hv_store(i, "flagNewer", 9, newSViv((var.flags & dlpDBFlagNewer) !=0), 0); \ + hv_store(i, "flagReset", 9, newSViv((var.flags & dlpDBFlagReset) !=0), 0); \ + hv_store(i, "flagCopyPrevention", 18, newSViv((var.flags & dlpDBFlagCopyPrevention) !=0), 0); \ + hv_store(i, "flagStream", 10, newSViv((var.flags & dlpDBFlagStream) !=0), 0); \ + hv_store(i, "flagExcludeFromSync", 19, newSViv((var.miscFlags & dlpDBMiscFlagExcludeFromSync)!=0), 0); \ + hv_store(i, "type", 4, newSVChar4(var.type), 0); \ + hv_store(i, "creator", 7, newSVChar4(var.creator), 0); \ + hv_store(i, "version", 7, newSViv(var.version), 0); \ + hv_store(i, "modnum", 6, newSViv(var.modnum), 0); \ + hv_store(i, "index", 5, newSViv(var.index), 0); \ + hv_store(i, "createDate", 10, newSViv(var.createDate), 0); \ + hv_store(i, "modifyDate", 10, newSViv(var.modifyDate), 0); \ + hv_store(i, "backupDate", 10, newSViv(var.backupDate), 0); \ + hv_store(i, "name", 4, newSVpv(var.name, 0), 0); \ + arg = newRV_noinc((SV*)i);\ + }\ + } + +#define unpack_dbinfo(arg, var)\ + if (SvROK(arg) && (SvTYPE(SvRV(arg))==SVt_PVHV)) {\ + HV * i = (HV*)SvRV(arg);\ + SV ** s;\ + var.more = (s = hv_fetch(i, "more", 4, 0)) ? SvIV(*s) : 0;\ + var.flags =\ + (((s = hv_fetch(i, "flagReadOnly", 12, 0)) && SvTRUE(*s)) ? dlpDBFlagReadOnly : 0) | \ + (((s = hv_fetch(i, "flagResource", 12, 0)) && SvTRUE(*s)) ? dlpDBFlagResource : 0) | \ + (((s = hv_fetch(i, "flagBackup", 10, 0)) && SvTRUE(*s)) ? dlpDBFlagBackup : 0) | \ + (((s = hv_fetch(i, "flagOpen", 8, 0)) && SvTRUE(*s)) ? dlpDBFlagOpen : 0) | \ + (((s = hv_fetch(i, "flagAppInfoDirty", 16, 0)) && SvTRUE(*s)) ? dlpDBFlagAppInfoDirty : 0)| \ + (((s = hv_fetch(i, "flagNewer", 9, 0)) && SvTRUE(*s)) ? dlpDBFlagNewer : 0) | \ + (((s = hv_fetch(i, "flagReset", 9, 0)) && SvTRUE(*s)) ? dlpDBFlagReset : 0) | \ + (((s = hv_fetch(i, "flagCopyPrevention", 18, 0)) && SvTRUE(*s)) ? dlpDBFlagCopyPrevention : 0) |\ + (((s = hv_fetch(i, "flagStream", 10, 0)) && SvTRUE(*s)) ? dlpDBFlagStream : 0) | \ + 0;\ + var.miscFlags =\ + (((s = hv_fetch(i, "flagExcludeFromSync", 19, 0)) && SvTRUE(*s)) ? dlpDBMiscFlagExcludeFromSync : 0);\ + var.type = (s = hv_fetch(i, "type", 4, 0)) ? SvChar4(*s) : 0;\ + var.creator = (s = hv_fetch(i, "creator", 7, 0)) ? SvChar4(*s) : 0;\ + var.version = (s = hv_fetch(i, "version", 7, 0)) ? SvIV(*s) : 0;\ + var.modnum = (s = hv_fetch(i, "modnum", 6, 0)) ? SvIV(*s) : 0;\ + var.index = (s = hv_fetch(i, "index", 5, 0)) ? SvIV(*s) : 0;\ + var.createDate = (s = hv_fetch(i, "createDate", 10, 0)) ? SvIV(*s) : 0;\ + var.modifyDate = (s = hv_fetch(i, "modifyDate", 10, 0)) ? SvIV(*s) : 0;\ + var.backupDate = (s = hv_fetch(i, "backupDate", 10, 0)) ? SvIV(*s) : 0;\ + if ((s = hv_fetch(i, "name", 4, 0)) ? SvPV(*s,na) : 0) \ + strncpy(var.name, SvPV(*s, na), sizeof(var.name)); \ + } else {\ + croak("argument is not a hash reference"); \ + } + +#define pack_userinfo(arg, var, failure) { \ + if (failure < 0) { \ + arg = &sv_undef; \ + self->errnop = failure; \ + } else { \ + HV * i = newHV(); \ + hv_store(i, "userID", 6, newSViv(var.userID), 0); \ + hv_store(i, "viewerID", 8, newSViv(var.viewerID), 0); \ + hv_store(i, "lastSyncPC", 10, newSViv(var.lastSyncPC), 0); \ + hv_store(i, "successfulSyncDate", 18, newSViv(var.successfulSyncDate), 0); \ + hv_store(i, "lastSyncDate", 12, newSViv(var.lastSyncDate), 0); \ + hv_store(i, "name", 4, newSVpv(var.username,0), 0); \ + hv_store(i, "password", 8, newSVpvn(var.password,var.passwordLength), 0); \ + arg = newRV_noinc((SV*)i); \ + }\ +} + +#define unpack_userinfo(arg, var)\ + if (SvROK(arg) && (SvTYPE(SvRV(arg))==SVt_PVHV)) {\ + HV * i = (HV*)SvRV(arg);\ + SV ** s;\ + var.userID = (s = hv_fetch(i, "userID", 6, 0)) ? SvIV(*s) : 0;\ + var.viewerID = (s = hv_fetch(i, "viewerID", 8, 0)) ? SvIV(*s) : 0;\ + var.lastSyncPC = (s = hv_fetch(i, "lastSyncPC", 10, 0)) ? SvIV(*s) : 0;\ + var.lastSyncDate = (s = hv_fetch(i, "lastSyncDate", 12, 0)) ? SvIV(*s) : 0;\ + var.successfulSyncDate = (s = hv_fetch(i, "successfulSyncDate", 18, 0)) ? SvIV(*s) : 0;\ + if ((s = hv_fetch(i, "name", 4, 0)) ? SvPV(*s,na) : 0)\ + strncpy(var.username, SvPV(*s, na), sizeof(var.username));\ + } else {\ + croak("argument is not a hash reference");\ + } + +#define PackAI {\ + HV * h;\ + if (SvRV(data) && (SvTYPE(h=(HV*)SvRV(data))==SVt_PVHV)) {\ + int count; \ + PUSHMARK(sp); \ + XPUSHs(data); \ + PUTBACK; \ + count = perl_call_method("Pack", G_SCALAR);\ + SPAGAIN; \ + if (count != 1) \ + croak("Unable to pack app block");\ + data = POPs; \ + PUTBACK; \ + } else { \ + croak("Unable to pack app block");\ + } \ +} + +#define ReturnReadAI(buf,size)\ + if (result >=0) {\ + if (self->Class) {\ + int count;\ + PUSHMARK(sp);\ + XPUSHs(self->Class);\ + XPUSHs(newSVpvn((char *) buf, size)); \ + PUTBACK;\ + count = perl_call_method("appblock", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to create appblock");\ + } else {\ + croak("Class not defined");\ + }\ + } else {\ + self->errnop = result;\ + PUSHs(&sv_undef);\ + } + +#define PackSI\ + {\ + HV * h;\ + if (SvRV(data) &&\ + (SvTYPE(h=(HV*)SvRV(data))==SVt_PVHV)) {\ + int count;\ + PUSHMARK(sp);\ + XPUSHs(data);\ + PUTBACK;\ + count = perl_call_method("Pack", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to pack sort block");\ + data = POPs;\ + PUTBACK;\ + }\ + else {\ + croak("Unable to pack sort block");\ + }\ + } + +#define ReturnReadSI(buf,size)\ + if (result >=0) {\ + if (self->Class) {\ + int count;\ + PUSHMARK(sp);\ + XPUSHs(self->Class);\ + XPUSHs(newSVpvn((char *) buf, size)); \ + PUTBACK;\ + count = perl_call_method("sortblock", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to create sortblock");\ + }\ + else {\ + croak("Class not defined");\ + }\ + } else {\ + self->errnop = result;\ + PUSHs(&sv_undef);\ + } + +#define PackRecord {\ + HV * h;\ + if (SvRV(data) &&\ + (SvTYPE(h=(HV*)SvRV(data))==SVt_PVHV)) {\ + int count;\ + SV ** s;\ + if (!(s = hv_fetch(h, "id", 2, 0)) || !SvOK(*s))\ + croak("record must contain id");\ + id = SvIV(*s);\ + attr = 0;\ + if (!(s = hv_fetch(h, "secret", 6, 0)) || !SvOK(*s))\ + croak("record must contain secret");\ + attr |= SvTRUE(*s) ? dlpRecAttrSecret : 0;\ + if (!(s = hv_fetch(h, "deleted", 7, 0)) || !SvOK(*s))\ + croak("record must contain deleted");\ + attr |= SvTRUE(*s) ? dlpRecAttrDeleted : 0;\ + if (!(s = hv_fetch(h, "modified", 8, 0)) || !SvOK(*s))\ + croak("record must contain modified");\ + attr |= SvTRUE(*s) ? dlpRecAttrDirty : 0;\ + if (!(s = hv_fetch(h, "busy", 4, 0)) || !SvOK(*s))\ + croak("record must contain busy");\ + attr |= SvTRUE(*s) ? dlpRecAttrBusy : 0;\ + if (!(s = hv_fetch(h, "archived", 8, 0)) || !SvOK(*s))\ + croak("record must contain archived");\ + attr |= SvTRUE(*s) ? dlpRecAttrArchived : 0;\ + if (!(s = hv_fetch(h, "category", 8, 0)) || !SvOK(*s))\ + croak("record must contain category");\ + category = SvIV(*s);\ + PUSHMARK(sp);\ + XPUSHs(data);\ + PUTBACK;\ + count = perl_call_method("Pack", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to pack record");\ + data = POPs;\ + PUTBACK;\ + } else {\ + croak("Unable to pack record");\ + }\ +} + +#define PackRaw {\ + HV * h;\ + if (SvRV(data) &&\ + (SvTYPE(h=(HV*)SvRV(data))==SVt_PVHV)) {\ + int count;\ + PUSHMARK(sp);\ + XPUSHs(data);\ + PUTBACK;\ + count = perl_call_method("Raw", G_SCALAR);\ + SPAGAIN;\ + if (count != 1) {\ + SV ** s = hv_fetch(h, "raw", 3, 0);\ + if (s)\ + data = *s;\ + } else {\ + data = POPs;\ + PUTBACK;\ + }\ + }\ +} + +#define ReturnReadRecord(buf,size)\ + if (result >=0) {\ + if (self->Class) {\ + int count;\ + SV * ret;\ + PUSHMARK(sp);\ + XPUSHs(self->Class);\ + XPUSHs(newSVpvn((char *) buf, size)); \ + XPUSHs(sv_2mortal(newSViv(id)));\ + XPUSHs(sv_2mortal(newSViv(attr)));\ + XPUSHs(sv_2mortal(newSViv(category)));\ + XPUSHs(sv_2mortal(newSViv(index)));\ + PUTBACK;\ + count = perl_call_method("record", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to create record");\ + ret = POPs;\ + PUTBACK;\ + PUSHs(ret);\ + }\ + else {\ + croak("Class not defined");\ + }\ + } else {\ + self->errnop = result;\ + PUSHs(&sv_undef);\ + } + +#define PackResource\ + {\ + HV * h;\ + if (SvRV(data) &&\ + (SvTYPE(h=(HV*)SvRV(data))==SVt_PVHV)) {\ + int count;\ + SV ** s;\ + if (!(s = hv_fetch(h, "id", 2, 0)) || !SvOK(*s))\ + croak("record must contain id");\ + id = SvIV(*s);\ + if (!(s = hv_fetch(h, "type", 4, 0)) || !SvOK(*s))\ + croak("record must contain type");\ + type = SvChar4(*s);\ + PUSHMARK(sp);\ + XPUSHs(data);\ + PUTBACK;\ + count = perl_call_method("Pack", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to pack resource");\ + data = POPs;\ + PUTBACK;\ + }\ + else {\ + croak("Unable to pack resource");\ + }\ + } + +#define ReturnReadResource(buf,size)\ + if (result >=0) {\ + if (self->Class) {\ + int count;\ + PUSHMARK(sp);\ + XPUSHs(self->Class);\ + XPUSHs(newSVpvn((char *) buf, size)); \ + XPUSHs(sv_2mortal(newSVChar4(type)));\ + XPUSHs(sv_2mortal(newSViv(id)));\ + XPUSHs(sv_2mortal(newSViv(index)));\ + PUTBACK;\ + count = perl_call_method("resource", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to create resource");\ + }\ + else {\ + croak("Class not defined");\ + }\ + } else {\ + self->errnop = result;\ + PUSHs(&sv_undef);\ + } + +#define PackPref\ + {\ + HV * h;\ + if (SvRV(data) &&\ + (SvTYPE(h=(HV*)SvRV(data))==SVt_PVHV)) {\ + int count;\ + SV ** s;\ + if (!(s = hv_fetch(h, "id", 2, 0)) || !SvOK(*s))\ + croak("record must contain id");\ + id = SvIV(*s);\ + if (!(s = hv_fetch(h, "creator", 7, 0)) || !SvOK(*s))\ + croak("record must contain type");\ + creator = SvChar4(*s);\ + if (!(s = hv_fetch(h, "version", 7, 0)) || !SvOK(*s))\ + croak("record must contain type");\ + version = SvIV(*s);\ + if (!(s = hv_fetch(h, "backup", 6, 0)) || !SvOK(*s))\ + croak("record must contain type");\ + backup = SvIV(*s);\ + PUSHMARK(sp);\ + XPUSHs(data);\ + PUTBACK;\ + count = perl_call_method("Pack", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to pack resource");\ + data = POPs;\ + PUTBACK;\ + }\ + else {\ + croak("Unable to pack resource");\ + }\ + } + +#define ReturnReadPref(buf,size)\ + if (result >=0) {\ + HV * h = perl_get_hv("PDA::Pilot::PrefClasses", 0);\ + SV ** s;\ + int count;\ + if (!h)\ + croak("PrefClasses doesn't exist");\ + s = hv_fetch(h, printlong(creator), 4, 0);\ + if (!s)\ + s = hv_fetch(h, "", 0, 0);\ + if (!s)\ + croak("Default PrefClass not defined");\ + PUSHMARK(sp);\ + XPUSHs(newSVsv(*s));\ + XPUSHs(newSVpvn((char *) buf, size)); \ + XPUSHs(sv_2mortal(newSVChar4(creator)));\ + XPUSHs(sv_2mortal(newSViv(id)));\ + XPUSHs(sv_2mortal(newSViv(version)));\ + XPUSHs(sv_2mortal(newSViv(backup)));\ + PUTBACK;\ + count = perl_call_method("pref", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to create resource");\ + } else {\ + self->errnop = result;\ + PUSHs(&sv_undef);\ + } + +void doUnpackCategory(HV * self, struct CategoryAppInfo * c) +{ + AV * e = newAV(); + int i; + + hv_store(self, "categoryRenamed", 15, newRV_noinc((SV*)e), 0); + + for (i=0;i<16;i++) { + av_push(e, newSViv(c->renamed[i])); + } + + e = newAV(); + hv_store(self, "categoryName", 12, newRV_noinc((SV*)e), 0); + + for (i=0;i<16;i++) { + av_push(e, newSVpv(c->name[i], 0)); + } + + e = newAV(); + hv_store(self, "categoryID", 10, newRV_noinc((SV*)e), 0); + + for (i=0;i<16;i++) { + av_push(e, newSViv(c->ID[i])); + } + + hv_store(self, "categoryLastUniqueID", 20, newSViv(c->lastUniqueID), 0); +} + + +void doPackCategory(HV * self, struct CategoryAppInfo * c) +{ + SV ** s; + AV * av; + int i; + + if ((s = hv_fetch(self, "categoryName", 12, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) + for (i=0;i<16;i++) + strncpy(c->name[i], (s=av_fetch(av, i, 0)) ? SvPV(*s,na) : "", 16); + else + for (i=0;i<16;i++) + strcpy(c->name[i], ""); + + for (i=0;i<16;i++) + c->name[i][15] = '\0'; + + if ((s = hv_fetch(self, "categoryID", 10, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) + for (i=0;i<16;i++) + c->ID[i] = (s=av_fetch(av, i, 0)) ? SvIV(*s) : 0; + else + for (i=0;i<16;i++) + c->ID[i] = 0; + + if ((s = hv_fetch(self, "categoryRenamed", 10, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) + for (i=0;i<16;i++) + c->renamed[i] = (s=av_fetch(av, i, 0)) ? SvIV(*s) : 0; + else + for (i=0;i<16;i++) + c->renamed[i] = 0; +} + +int SvList(SV * arg, char **list) +{ + int i; + char * str = SvPV(arg, na); + for (i=0;list[i];i++) + if (strcasecmp(list[i], str)==0) + return i; + if (SvPOKp(arg)) { + croak("Invalid value"); + } + return SvIV(arg); +} + +SV * newSVlist(int value, char **list) +{ + int i; + for (i=0;list[i];i++) + ; + if (value < i) + return newSVpv(list[value], 0); + else + return newSViv(value); +} + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot + +INCLUDE: const-xs.inc + + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot::Appointment + +SV * +Unpack(record) + SV * record + CODE: + { + STRLEN len; + int i; + AV * e; + HV * ret, *h; + struct Appointment a; + char *str; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + if (!SvPOK(record)) { + croak("Not a string!?"); + } + str = SvPV(record,len); + if (len > 0) { /* len == 0 when the record has the deleted flag set */ + pi_buffer_clear(&pibuf); + if (!pi_buffer_append(&pibuf, str, len)) { + croak("Unable to reallocate buffer"); + } + if (unpack_Appointment(&a, &pibuf, datebook_v1) < 0) { + croak("unpack_Appointment failed"); + } + + hv_store(ret, "event", 5, newSViv(a.event), 0); + hv_store(ret, "begin", 5, newRV_noinc((SV*)tmtoav(&a.begin)), 0); + + if (!a.event) { + hv_store(ret, "end", 3, newRV_noinc((SV*)tmtoav(&a.end)), 0); + } + + if (a.alarm) { + HV * alarm = newHV(); + hv_store(ret, "alarm", 5, newRV_noinc((SV*)alarm), 0); + + hv_store(alarm, "advance", 7, newSViv(a.advance), 0); + hv_store(alarm, "units", 5, newSVpv(( + (a.advanceUnits == 0) ? "minutes" : /* Minutes */ + (a.advanceUnits == 1) ? "hours" : /* Hours */ + (a.advanceUnits == 2) ? "days" : /* Days */ + 0), 0), 0); + if (a.advanceUnits > 2) { + warn("Invalid advance unit %d encountered", a.advanceUnits); + } + } + if (a.repeatType) { + HV * repeat = newHV(); + hv_store(ret, "repeat", 6, newRV_noinc((SV*)repeat), 0); + + hv_store(repeat, "type", 4, newSVpv(DatebookRepeatTypeNames[a.repeatType],0), 0); + hv_store(repeat, "frequency", 9, newSViv(a.repeatFrequency), 0); + if (a.repeatType == repeatMonthlyByDay) + hv_store(repeat, "day", 3, newSViv(a.repeatDay), 0); + else if (a.repeatType == repeatWeekly) { + e = newAV(); + hv_store(repeat, "days", 4, newRV_noinc((SV*)e), 0); + for (i=0;i<7;i++) + av_push(e,newSViv(a.repeatDays[i])); + } + hv_store(repeat, "weekstart", 9, newSViv(a.repeatWeekstart), 0); + if (!a.repeatForever) + hv_store(repeat, "end", 3, newRV_noinc((SV*)tmtoav(&a.repeatEnd)),0); + } + + if (a.exceptions) { + e = newAV(); + hv_store(ret, "exceptions", 10, newRV_noinc((SV*)e), 0); + for (i=0;i 254) + warn("Alarm advance value %d out of range", a.advance); + a.alarm = 1; + } else { + a.alarm = 0; + a.advance = 0; + a.advanceUnits = 0; + } + + + if ((s = hv_fetch(h, "repeat", 6, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(SvRV(*s))==SVt_PVHV)) { + HV * h2 = (HV*)SvRV(*s); + int i; + a.repeatType = (s = hv_fetch(h2, "type", 4, 0)) ? SvList(*s, DatebookRepeatTypeNames) : 0; + a.repeatFrequency = (s = hv_fetch(h2, "frequency", 9, 0)) ? SvIV(*s) : 0; + a.repeatDay = 0; + for(i=0;i<7;i++) + a.repeatDays[i] = 0; + if (a.repeatType == repeatMonthlyByDay ) { + a.repeatDay = (s = hv_fetch(h2, "day", 3, 0)) ? SvIV(*s) : 0; + } else if (a.repeatType == repeatWeekly) { + if ((s = hv_fetch(h2, "days", 4, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(SvRV(*s))==SVt_PVAV)) { + int i; + AV * a2 = (AV*)SvRV(*s); + for (i=0;i<7;i++) + if ((s = av_fetch(a2, i, 0))) + a.repeatDays[i] = SvIV(*s); + } + } + a.repeatWeekstart = (s = hv_fetch(h2, "weekstart", 9, 0)) ? SvIV(*s) : 0; + if ((s = hv_fetch(h2, "end", 3, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(SvRV(*s))==SVt_PVAV)) { + avtotm((AV*)SvRV(*s), &a.repeatEnd); + a.repeatForever = 0; + } else { + a.repeatForever = 1; + } + } else { + a.repeatType = 0; + a.repeatForever = 0; + a.repeatFrequency = 0; + a.repeatDay = 0; + a.repeatWeekstart = 0; + memset(&a.repeatEnd,'\0', sizeof(struct tm)); + } + + a.exceptions = 0; + a.exception = 0; + if ((s = hv_fetch(h, "exceptions", 10, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(SvRV(*s))==SVt_PVAV)) { + int i; + AV * a2 = (AV*)SvRV(*s); + if (av_len(a2)>-1) { + a.exceptions = av_len(a2)+1; + a.exception = malloc(sizeof(struct tm)*a.exceptions); + for (i=0;i0) { + + doUnpackCategory(ret, &a.category); + + hv_store(ret, "startOfWeek", 11, newSViv(a.startOfWeek), 0); + } + + } + OUTPUT: + RETVAL + +SV * +PackAppBlock(record) + SV * record + CODE: + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct AppointmentAppInfo a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + doPackCategory(h, &a.category); + + if ((s = hv_fetch(h, "startOfWeek", 11, 0))) + a.startOfWeek = SvIV(*s); + else + a.startOfWeek = 0; + + len = pack_AppointmentAppInfo(&a, (unsigned char *) mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot::ToDo + +SV * +Unpack(record) + SV * record + CODE: + { + STRLEN len; + int i; + AV * e; + HV * ret; + struct ToDo a; + char *str; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + str = SvPV(record,len); + if (len > 0) { /* len == 0 if deleted flag is set */ + pi_buffer_clear(&pibuf); + if (!pi_buffer_append(&pibuf, str, len)) { + croak("Unable to reallocate buffer"); + } + if (unpack_ToDo(&a, &pibuf, todo_v1) < 0) { + croak("unpack_ToDo failed"); + } + + if (!a.indefinite) + hv_store(ret, "due", 3, newRV_noinc((SV*)tmtoav(&a.due)), 0); + hv_store(ret, "priority", 8, newSViv(a.priority), 0); + hv_store(ret, "complete", 8, newSViv(a.complete), 0); + if (a.description) + hv_store(ret, "description", 11, newSVpv((char*)a.description,0), 0); + if (a.note) + hv_store(ret, "note", 4, newSVpv((char*)a.note,0), 0); + + free_ToDo(&a); + } + } + OUTPUT: + RETVAL + +SV * +Pack(record) + SV * record + CODE: + { + SV ** s; + HV * h; + struct ToDo a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else if ((s=hv_fetch(h, "deleted", 7, 0)) && SvOK(*s) && SvTRUE(*s) && + (s=hv_fetch(h, "archived", 8, 0)) && SvOK(*s) && !SvTRUE(*s)) { + RETVAL = newSVpv("",0); + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + else { + + a.priority = (s = hv_fetch(h, "priority", 8, 0)) ? SvIV(*s) : 0; + a.complete = (s = hv_fetch(h, "complete", 8, 0)) ? SvIV(*s) : 0; + if ((s = hv_fetch(h, "due", 3, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(SvRV(*s))==SVt_PVAV)) { + avtotm((AV*)SvRV(*s), &a.due); + a.indefinite = 0; + } + else { + memset(&a.due,'\0', sizeof(struct tm)); + a.indefinite = 1; + } + + a.description = (s = hv_fetch(h, "description", 11, 0)) ? SvPV(*s,na) : 0; + a.note = (s = hv_fetch(h, "note", 4, 0)) ? SvPV(*s,na) : 0; + + if (pack_ToDo(&a, &pibuf, todo_v1) < 0) { + croak("pack_ToDo failed"); + } + + RETVAL = newSVpvn((char *) pibuf.data, pibuf.used); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + + +SV * +UnpackAppBlock(record) + SV * record + CODE: + { + STRLEN len; + AV * e; + HV * ret; + int i; + struct ToDoAppInfo a; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (unpack_ToDoAppInfo(&a, (CPTR)SvPV(record, na), len)>0) { + + doUnpackCategory(ret, &a.category); + + hv_store(ret, "dirty", 5, newSViv(a.dirty), 0); + + hv_store(ret, "sortByPriority", 14, newSViv(a.sortByPriority), 0); + } + } + OUTPUT: + RETVAL + +SV * +PackAppBlock(record) + SV * record + CODE: + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct ToDoAppInfo a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + doUnpackCategory(h, &a.category); + + + doPackCategory(h, &a.category); + + a.dirty = (s = hv_fetch(h, "dirty", 5, 0)) ? SvIV(*s) : 0; + a.sortByPriority = (s = hv_fetch(h, "sortByPriority", 14, 0)) ? SvIV(*s) : 0; + + len = pack_ToDoAppInfo(&a, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot::Address + +SV * +Unpack(record) + SV * record + CODE: + { + STRLEN len; + int i; + AV * e; + HV * ret; + struct Address a; + char *str; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + str = SvPV(record,len); + if (len > 0) { /* len == 0 when deleted flag is set */ + pi_buffer_clear(&pibuf); + if (!pi_buffer_append(&pibuf, str, len)) { + croak("Unable to reallocate buffer"); + } + if (unpack_Address(&a, &pibuf, address_v1) < 0) { + croak("unpack_Address failed"); + } + + e = newAV(); + hv_store(ret, "phoneLabel", 10, newRV_noinc((SV*)e), 0); + + for (i=0;i<5;i++) { + av_push(e, newSViv(a.phoneLabel[i])); + } + + e = newAV(); + hv_store(ret, "entry", 5, newRV_noinc((SV*)e), 0); + + for (i=0;i<19;i++) { + av_push(e, a.entry[i] ? newSVpv(a.entry[i],0) : &sv_undef); + } + + hv_store(ret, "showPhone", 9, newSViv(a.showPhone), 0); + + free_Address(&a); + } + } + OUTPUT: + RETVAL + +SV * +Pack(record) + SV * record + CODE: + { + SV ** s; + HV * h; + AV * av; + int i; + struct Address a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else if ((s=hv_fetch(h, "deleted", 7, 0)) && SvOK(*s) && SvTRUE(*s) && + (s=hv_fetch(h, "archived", 8, 0)) && SvOK(*s) && !SvTRUE(*s)) { + RETVAL = newSVpv("",0); + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + else { + + if ((s = hv_fetch(h, "phoneLabel", 10, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) + for (i=0;i<5;i++) + a.phoneLabel[i] = ((s=av_fetch(av, i, 0)) && SvOK(*s)) ? SvIV(*s) : 0; + else + for (i=0;i<5;i++) + a.phoneLabel[i] = 0; + + if ((s = hv_fetch(h, "entry", 5, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) + for (i=0;i<19;i++) + a.entry[i] = ((s=av_fetch(av, i, 0)) && SvOK(*s)) ? SvPV(*s,na) : 0; + else + for (i=0;i<19;i++) + a.entry[i] = 0; + + if ((s = hv_fetch(h, "showPhone", 9, 0))) + a.showPhone = SvIV(*s); + else + a.showPhone = 0; + + if (pack_Address(&a, &pibuf, address_v1) < 0) { + croak("pack_Address failed"); + } + + RETVAL = newSVpvn((char *) pibuf.data, pibuf.used); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + + +SV * +UnpackAppBlock(record) + SV * record + CODE: + { + STRLEN len; + AV * e; + HV * ret; + int i; + struct AddressAppInfo a; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (unpack_AddressAppInfo(&a, (CPTR)SvPV(record, na), len)>0) { + + doUnpackCategory(ret, &a.category); + + e = newAV(); + hv_store(ret, "labelRenamed", 12, newRV_noinc((SV*)e), 0); + + for (i=0;i<22;i++) { + av_push(e, newSViv(a.labelRenamed[i])); + } + + hv_store(ret, "country", 7, newSViv(a.country), 0); + hv_store(ret, "sortByCompany", 13, newSViv(a.sortByCompany), 0); + + e = newAV(); + hv_store(ret, "label", 5, newRV_noinc((SV*)e), 0); + + for (i=0;i<22;i++) { + av_push(e, newSVpv(a.labels[i],0)); + } + + e = newAV(); + hv_store(ret, "phoneLabel", 10, newRV_noinc((SV*)e), 0); + + for (i=0;i<8;i++) { + av_push(e, newSVpv(a.phoneLabels[i],0)); + } + + } + } + OUTPUT: + RETVAL + +SV * +PackAppBlock(record) + SV * record + CODE: + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct AddressAppInfo a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + doPackCategory(h, &a.category); + + if ((s = hv_fetch(h, "labelRenamed", 12, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) + for (i=0;i<22;i++) a.labelRenamed[i] = (s=av_fetch(av, i, 0)) ? SvIV(*s) : 0; + else + for (i=0;i<22;i++) a.labelRenamed[i] = 0; + + a.country = (s = hv_fetch(h, "country", 7, 0)) ? SvIV(*s) : 0; + a.sortByCompany = (s = hv_fetch(h, "sortByCompany", 13, 0)) ? SvIV(*s) : 0; + + if ((s = hv_fetch(h, "label", 5, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) + for (i=0;i<22;i++) strncpy(a.labels[i], (s=av_fetch(av, i, 0)) ? SvPV(*s,na) : "", 16); + else + for (i=0;i<22;i++) a.labels[i][0] = 0; + for (i=0;i<22;i++) a.labels[i][15] = 0; + + if ((s = hv_fetch(h, "phoneLabel", 10, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) + for (i=0;i<8;i++) strncpy(a.phoneLabels[i], (s=av_fetch(av, i, 0)) ? SvPV(*s,na) : "", 16); + else + for (i=0;i<8;i++) a.phoneLabels[i][0] = 0; + for (i=0;i<8;i++) a.phoneLabels[i][15] = 0; + + len = pack_AddressAppInfo(&a, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot::Memo + +SV * +Unpack(record) + SV * record + CODE: + { + STRLEN len; + int i; + AV * e; + HV * ret; + struct Memo a; + char *str; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + str = SvPV(record,len); + if (len > 0) { /* len == 0 if deleted flag is set */ + pi_buffer_clear(&pibuf); + if (!pi_buffer_append(&pibuf, str, len)) { + croak("Unable to reallocate buffer"); + } + if (unpack_Memo(&a, &pibuf, memo_v1) < 0) { + croak("unpack_Memo failed"); + } + + + hv_store(ret, "text", 4, newSVpv(a.text,0), 0); + + free_Memo(&a); + } + } + OUTPUT: + RETVAL + +SV * +Pack(record) + SV * record + CODE: + { + SV ** s; + HV * h; + struct Memo a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else if ((s=hv_fetch(h, "deleted", 7, 0)) && SvOK(*s) && SvTRUE(*s) && + (s=hv_fetch(h, "archived", 8, 0)) && SvOK(*s) && !SvTRUE(*s)) { + RETVAL = newSVpv("",0); + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + else { + + if ((s = hv_fetch(h, "text", 4, 0))) + a.text = SvPV(*s,na); + else + a.text = 0; + + if (pack_Memo(&a, &pibuf, memo_v1) < 0) { + croak("pack_Memo failed"); + } + + RETVAL = newSVpvn((char *) pibuf.data, pibuf.used); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + +SV * +UnpackAppBlock(record) + SV * record + CODE: + { + STRLEN len; + AV * e; + HV * ret; + int i; + struct MemoAppInfo a; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (unpack_MemoAppInfo(&a, (CPTR)SvPV(record, na), len)>0) { + + doUnpackCategory(ret, &a.category); + + hv_store(ret, "sortByAlpha", 11, newSViv(a.sortByAlpha), 0); + } + } + OUTPUT: + RETVAL + +SV * +PackAppBlock(record) + SV * record + CODE: + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct MemoAppInfo a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + doPackCategory(h, &a.category); + + + if ((s = hv_fetch(h, "sortByAlpha", 11, 0))) + a.sortByAlpha = SvIV(*s); + else + a.sortByAlpha = 0; + + len = pack_MemoAppInfo(&a, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot::Expense + +SV * +Unpack(record) + SV * record + CODE: + { + STRLEN len; + int i; + HV * ret; + struct Expense e; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (len > 0) { /* len == 0 if deleted flag is set */ + if (unpack_Expense(&e, (CPTR)SvPV(record, na), len)>0) { + + hv_store(ret, "date", 4, newRV_noinc((SV*)tmtoav(&e.date)), 0); + hv_store(ret, "type", 4, newSVlist(e.type,ExpenseTypeNames),0); + hv_store(ret, "payment", 7, newSVlist(e.payment,ExpensePaymentNames),0); + hv_store(ret, "currency", 8, newSViv(e.currency),0); + if (e.amount) + hv_store(ret, "amount", 6, newSVpv(e.amount,0), 0); + if (e.vendor) + hv_store(ret, "vendor", 6, newSVpv(e.vendor,0), 0); + if (e.city) + hv_store(ret, "city", 4, newSVpv(e.city,0), 0); + if (e.note) + hv_store(ret, "note", 4, newSVpv(e.note,0), 0); + if (e.attendees) + hv_store(ret, "attendees", 9, newSVpv(e.attendees,0), 0); + + free_Expense(&e); + } + } + } + OUTPUT: + RETVAL + +SV * +Pack(record) + SV * record + CODE: + { + STRLEN len; + SV ** s; + HV * h; + struct Expense e; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else if ((s=hv_fetch(h, "deleted", 7, 0)) && SvOK(*s) && SvTRUE(*s) && + (s=hv_fetch(h, "archived", 8, 0)) && SvOK(*s) && !SvTRUE(*s)) { + RETVAL = newSVpv("",0); + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + else { + + if ((s = hv_fetch(h, "type", 4, 0))) + e.type = SvList(*s,ExpenseTypeNames); + else + croak("must have type"); + if ((s = hv_fetch(h, "payment", 7, 0))) + e.payment = SvList(*s,ExpensePaymentNames); + else + croak("must have payment"); + if ((s = hv_fetch(h, "currency", 8, 0))) + e.currency = SvIV(*s); + else + croak("must have currency"); + + if ((s = hv_fetch(h, "date", 4, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(SvRV(*s))==SVt_PVAV)) + avtotm((AV*)SvRV(*s), &e.date); + else + croak("expense record must contain date"); + if ((s = hv_fetch(h, "amount", 6, 0))) e.amount = SvPV(*s,na); + else e.amount = 0; + if ((s = hv_fetch(h, "vendor", 6, 0))) e.vendor = SvPV(*s,na); + else e.vendor = 0; + if ((s = hv_fetch(h, "city", 4, 0))) e.city = SvPV(*s,na); + else e.city = 0; + if ((s = hv_fetch(h, "attendess", 9, 0))) e.attendees = SvPV(*s,na); + else e.attendees = 0; + if ((s = hv_fetch(h, "note", 4, 0))) e.note = SvPV(*s,na); + else e.note = 0; + + len = pack_Expense(&e, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + + + } + } + OUTPUT: + RETVAL + +SV * +UnpackAppBlock(record) + SV * record + CODE: + { + STRLEN len; + HV * ret; + AV * a; + int i; + struct ExpenseAppInfo e; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (unpack_ExpenseAppInfo(&e, (CPTR)SvPV(record, na), len)>0) { + + hv_store(ret, "sortOrder", 9, newSVlist(e.sortOrder,ExpenseSortNames),0); + a = newAV(); + hv_store(ret, "currencies", 10, newRV_noinc((SV*)a), 0); + for (i=0;i<4;i++) { + HV * h = newHV(); + hv_store(h, "name", 4, newSVpv(e.currencies[i].name, 0), 0); + hv_store(h, "symbol", 6, newSVpv(e.currencies[i].symbol, 0), 0); + hv_store(h, "rate", 4, newSVpv(e.currencies[i].rate, 0), 0); + av_store(a, i, (SV*)newRV_noinc((SV*)h)); + } + + doUnpackCategory(ret, &e.category); + } + } + OUTPUT: + RETVAL + +SV * +PackAppBlock(record) + SV * record + CODE: + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct ExpenseAppInfo e; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + doPackCategory(h, &e.category); + + e.sortOrder = (s = hv_fetch(h, "sortOrder", 9, 0)) ? SvList(*s, ExpenseSortNames) : 0; + if ((s=hv_fetch(h, "currencies", 10, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) { + for(i=0;i<4;i++) { + HV * hv; + if ((s=av_fetch(av, i, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(hv=(HV*)SvRV(*s))==SVt_PVHV)) { + if (s = hv_fetch(hv, "name", 4, 0)) { + strncpy(e.currencies[i].name, SvPV(*s, na), 16); + e.currencies[i].name[15] = 0; + } + if (s = hv_fetch(hv, "symbol", 6, 0)) { + strncpy(e.currencies[i].symbol, SvPV(*s, na), 4); + e.currencies[i].symbol[3] = 0; + } + if (s = hv_fetch(hv, "rate", 4, 0)) { + strncpy(e.currencies[i].rate, SvPV(*s, na), 8); + e.currencies[i].rate[7] = 0; + } + } + } + } else + for(i=0;i<4;i++) { + e.currencies[i].symbol[0] = 0; + e.currencies[i].name[0] = 0; + e.currencies[i].rate[0] = 0; + } + + len = pack_ExpenseAppInfo(&e, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + +SV * +UnpackPref(record) + SV * record + CODE: + { + STRLEN len; + AV * e; + HV * ret; + int i; + struct ExpensePref a; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (unpack_ExpensePref(&a, (CPTR)SvPV(record, na), len)>0) { + + hv_store(ret, "unitOfDistance", 14, newSVlist(a.unitOfDistance, ExpenseDistanceNames), 0); + hv_store(ret, "currentCategory", 15, newSViv(a.currentCategory), 0); + hv_store(ret, "defaultCurrency", 15, newSViv(a.defaultCurrency), 0); + hv_store(ret, "attendeeFont", 8, newSViv(a.attendeeFont), 0); + hv_store(ret, "showAllCategories", 17, newSViv(a.showAllCategories), 0); + hv_store(ret, "showCurrency", 12, newSViv(a.showCurrency), 0); + hv_store(ret, "saveBackup", 10, newSViv(a.saveBackup), 0); + hv_store(ret, "allowQuickFill", 14, newSViv(a.allowQuickFill), 0); + e = newAV(); + for (i=0;i<5;i++) + av_store(e, i, newSViv(a.currencies[i])); + hv_store(ret, "currencies", 10, (SV*)newRV_noinc((SV*)e), 0); + hv_store(ret, "noteFont", 8, newSViv(a.noteFont), 0); + } + } + OUTPUT: + RETVAL + +SV * +PackPref(record, id) + SV * record + int id + CODE: + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct ExpensePref a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + a.unitOfDistance = (s = hv_fetch(h, "unitOfDistance", 14, 0)) ? SvList(*s, ExpenseDistanceNames) : 0; + a.currentCategory = (s=hv_fetch(h,"currentCategory",15,0)) ? SvIV(*s) : 0; + a.defaultCurrency = (s=hv_fetch(h,"defaultCurrency",15,0)) ? SvIV(*s) : 0; + a.attendeeFont = (s=hv_fetch(h,"attendeeFont",8,0)) ? SvIV(*s) : 0; + a.showAllCategories = (s=hv_fetch(h,"showAllCategories",17,0)) ? SvIV(*s) : 0; + a.showCurrency = (s=hv_fetch(h,"showCurrency",12,0)) ? SvIV(*s) : 0; + a.saveBackup = (s=hv_fetch(h,"saveBackup",10,0)) ? SvIV(*s) : 0; + a.allowQuickFill = (s=hv_fetch(h,"allowQuickFill",14,0)) ? SvIV(*s) : 0; + + if ((s=hv_fetch(h, "currencies", 10, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) { + for(i=0;i<5;i++) + a.currencies[i] = (s=av_fetch(av, i, 0)) ? SvIV(*s) : 0; + } else + for(i=0;i<5;i++) + a.currencies[i] = 0; + a.noteFont = (s=hv_fetch(h,"noteFont",8,0)) ? SvIV(*s) : 0; + + len = pack_ExpensePref(&a, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot::Mail + +SV * +Unpack(record) + SV * record + CODE: + { + STRLEN len; + int i; + AV * e; + HV * ret; + struct Mail a; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (len > 0) { /* len == 0 if deleted flag is set */ + if (unpack_Mail(&a, (CPTR)SvPV(record, na), len)>0) { + + if (a.subject) hv_store(ret, "subject", 7, newSVpv(a.subject,0), 0); + if (a.from) hv_store(ret, "from", 4, newSVpv(a.from,0), 0); + if (a.to) hv_store(ret, "to", 2, newSVpv(a.to,0), 0); + if (a.cc) hv_store(ret, "cc", 2, newSVpv(a.cc,0), 0); + if (a.bcc) hv_store(ret, "bcc", 3, newSVpv(a.bcc,0), 0); + if (a.replyTo) hv_store(ret, "replyTo", 7, newSVpv(a.replyTo,0), 0); + if (a.sentTo) hv_store(ret, "sentTo", 6, newSVpv(a.sentTo,0), 0); + if (a.body) hv_store(ret, "body", 4, newSVpv(a.body,0), 0); + + hv_store(ret, "read", 4, newSViv(a.read), 0); + hv_store(ret, "signature", 9, newSViv(a.signature), 0); + hv_store(ret, "confirmRead", 11, newSViv(a.confirmRead), 0); + hv_store(ret, "confirmDelivery", 15, newSViv(a.confirmDelivery), 0); + hv_store(ret, "priority", 8, newSViv(a.priority), 0); + hv_store(ret, "addressing", 10, newSViv(a.addressing), 0); + + if (a.dated) + hv_store(ret, "date", 4, newRV_noinc((SV*)tmtoav(&a.date)), 0); + + free_Mail(&a); + } + } + } + OUTPUT: + RETVAL + +SV * +Pack(record) + SV * record + CODE: + { + STRLEN len; + SV ** s; + HV * h; + struct Mail a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else if ((s=hv_fetch(h, "deleted", 7, 0)) && SvOK(*s) && SvTRUE(*s) && + (s=hv_fetch(h, "archived", 8, 0)) && SvOK(*s) && !SvTRUE(*s)) { + RETVAL = newSVpv("",0); + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + else { + + a.subject = (s = hv_fetch(h, "subject", 7, 0)) ? SvPV(*s,na) : 0; + a.from = (s = hv_fetch(h, "from", 4, 0)) ? SvPV(*s,na) : 0; + a.to = (s = hv_fetch(h, "to", 2, 0)) ? SvPV(*s,na) : 0; + a.cc = (s = hv_fetch(h, "cc", 2, 0)) ? SvPV(*s,na) : 0; + a.bcc = (s = hv_fetch(h, "bcc", 3, 0)) ? SvPV(*s,na) : 0; + a.replyTo = (s = hv_fetch(h, "replyTo", 7, 0)) ? SvPV(*s,na) : 0; + a.sentTo = (s = hv_fetch(h, "sentTo", 6, 0)) ? SvPV(*s,na) : 0; + a.body = (s = hv_fetch(h, "body", 4, 0)) ? SvPV(*s,na) : 0; + + a.read = (s = hv_fetch(h, "read", 4, 0)) ? SvIV(*s) : 0; + a.signature = (s = hv_fetch(h, "signature", 9, 0)) ? SvIV(*s) : 0; + a.confirmRead = (s = hv_fetch(h, "confirmRead", 11, 0)) ? SvIV(*s) : 0; + a.confirmDelivery = (s = hv_fetch(h, "confirmDelivery", 15, 0)) ? SvIV(*s) : 0; + a.priority = (s = hv_fetch(h, "priority", 8, 0)) ? SvIV(*s) : 0; + a.addressing = (s = hv_fetch(h, "addressing", 10, 0)) ? SvIV(*s) : 0; + + a.dated = (s = hv_fetch(h, "date", 4, 0)) ? 1 : 0; + if (s && SvOK(*s) && SvRV(*s) && (SvTYPE(SvRV(*s))==SVt_PVAV)) avtotm((AV*)SvRV(*s), &a.date); + + len = pack_Mail(&a, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + +SV * +UnpackAppBlock(record) + SV * record + CODE: + { + STRLEN len; + AV * e; + HV * ret; + int i; + struct MailAppInfo a; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (unpack_MailAppInfo(&a, (CPTR)SvPV(record, na), len)>0) { + + doUnpackCategory(ret, &a.category); + + hv_store(ret, "sortOrder", 9, newSVlist(a.sortOrder, MailSortTypeNames), 0); + + hv_store(ret, "dirty", 5, newSViv(a.dirty), 0); + hv_store(ret, "unsentMessage", 13, newSViv(a.unsentMessage), 0); + } + } + OUTPUT: + RETVAL + +SV * +PackAppBlock(record) + SV * record + CODE: + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct MailAppInfo a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + + doPackCategory(h, &a.category); + + if ((s = hv_fetch(h, "sortOrder", 9, 0))) + a.sortOrder = SvList(*s, MailSortTypeNames); + else + a.sortOrder = 0; + + a.dirty = (s=hv_fetch(h,"dirty",5,0)) ? SvIV(*s) : 0; + a.unsentMessage = (s=hv_fetch(h,"unsentMessage",13,0)) ? SvIV(*s) : 0; + + len = pack_MailAppInfo(&a, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + +SV * +UnpackSyncPref(record) + SV * record + CODE: + { + STRLEN len; + AV * e; + HV * ret; + int i; + struct MailSyncPref a; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (unpack_MailSyncPref(&a, (CPTR)SvPV(record, na), len)>0) { + + hv_store(ret, "syncType", 8, newSVlist(a.syncType, MailSyncTypeNames), 0); + hv_store(ret, "getHigh", 7, newSViv(a.getHigh), 0); + hv_store(ret, "getContaining", 13, newSViv(a.getContaining), 0); + hv_store(ret, "truncate", 8, newSViv(a.truncate), 0); + + if (a.filterTo) + hv_store(ret, "filterTo", 8, newSVpv(a.filterTo, 0), 0); + if (a.filterFrom) + hv_store(ret, "filterFrom", 10, newSVpv(a.filterFrom, 0), 0); + if (a.filterSubject) + hv_store(ret, "filterSubject", 13, newSVpv(a.filterSubject, 0), 0); + } + } + OUTPUT: + RETVAL + +SV * +PackSyncPref(record, id) + SV * record + int id + CODE: + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct MailSyncPref a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + if ((s = hv_fetch(h, "syncType", 8, 0))) + a.syncType = SvList(*s, MailSyncTypeNames); + else + a.syncType = 0; + + a.getHigh = (s=hv_fetch(h,"getHigh",7,0)) ? SvIV(*s) : 0; + a.getContaining = (s=hv_fetch(h,"getContaining",13,0)) ? SvIV(*s) : 0; + a.truncate = (s=hv_fetch(h,"truncate",8,0)) ? SvIV(*s) : 0; + + a.filterTo = (s=hv_fetch(h,"filterTo",8,0)) ? SvPV(*s,na) : 0; + a.filterFrom = (s=hv_fetch(h,"filterFrom",10,0)) ? SvPV(*s,na) : 0; + a.filterSubject = (s=hv_fetch(h,"filterSubject",13,0)) ? SvPV(*s,na) : 0; + + len = pack_MailSyncPref(&a, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + +SV * +UnpackSignaturePref(record) + SV * record + CODE: + { + STRLEN len; + AV * e; + HV * ret; + int i; + struct MailSignaturePref a; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (unpack_MailSignaturePref(&a, (CPTR)SvPV(record, na), len)>0) { + + if (a.signature) + hv_store(ret, "signature", 9, newSVpv(a.signature, 0), 0); + } + } + OUTPUT: + RETVAL + +SV * +PackSignaturePref(record, id) + SV * record + int id + CODE: + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct MailSignaturePref a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + a.signature = (s=hv_fetch(h,"signature",9,0)) ? SvPV(*s,na) : 0; + + len = pack_MailSignaturePref(&a, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot + +int +close(socket) + int socket + CODE: + RETVAL = pi_close(socket); + OUTPUT: + RETVAL + +int +write(socket, msg) + int socket + SV * msg + CODE: + { + STRLEN len; + SvPV(msg, len); + RETVAL = pi_write(socket,SvPV(msg,na),len); + } + +SV * +read(socket, len) + int socket + int len + + + CODE: + { + int result; + + result = pi_read(socket, &pibuf, len); + if (result >=0) + RETVAL = newSVpvn((char *) pibuf.data, result); + else + RETVAL = &sv_undef; + } + OUTPUT: + RETVAL + +int +socket(domain, type, protocol) + int domain + int type + int protocol + CODE: + RETVAL = pi_socket(domain, type, protocol); + OUTPUT: + RETVAL + +int +listen(socket, backlog) + int socket + int backlog + CODE: + RETVAL = pi_listen(socket, backlog); + OUTPUT: + RETVAL + +char * +errorText(error) + int error + CODE: + RETVAL = dlp_strerror(error); + OUTPUT: + RETVAL + +int +bind(socket, port) + int socket + char * port + CODE: + RETVAL = pi_bind(socket, port); + OUTPUT: + RETVAL + +int +openPort(port) + char * port + CODE: + { + int socket = pi_socket(PI_AF_PILOT, PI_SOCK_STREAM, PI_PF_DLP); + pi_bind(socket, port); + pi_listen(socket, 1); + RETVAL = socket; + } + OUTPUT: + RETVAL + +void +accept(socket) + int socket + PPCODE: + { + struct pi_sockaddr a; + size_t len = sizeof(struct pi_sockaddr); + int result; + result = pi_accept(socket, (struct sockaddr*)&a, &len); + EXTEND(SP, 1); + if (result < 0) { + PUSHs(sv_newmortal()); + } else { + PDA__Pilot__DLP * x = malloc(sizeof(PDA__Pilot__DLP)); + SV * sv = newSViv((IV)(void*)x); + x->errnop = 0; + x->socket = result; + SV * rv = newRV_noinc(sv); + sv_bless(rv, gv_stashpv("PDA::Pilot::DLPPtr",0)); + PUSHs(sv_2mortal(rv)); + } + /* In list context, return error code as a second value */ + if (GIMME_V == G_ARRAY) { + EXTEND(SP, 1); + if (result < 0) { + PUSHs(sv_2mortal(newSViv(result))); + } else { + PUSHs(sv_newmortal()); + } + } + + } + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot::DLP::DBPtr + +void +DESTROY(db) + PDA::Pilot::DLP::DB * db + CODE: + if (db->Class) + SvREFCNT_dec(db->Class); + if (db->handle) + dlp_CloseDB(db->socket, db->handle); + if (db->dbname) + SvREFCNT_dec(db->dbname); + SvREFCNT_dec(db->connection); + free(db); + +int +errno(self) + PDA::Pilot::DLP::DB *self + CODE: + RETVAL = self->errnop; + self->errnop = 0; + OUTPUT: + RETVAL + +int +palmos_errno(self) + PDA::Pilot::DLP::DB *self + CODE: + RETVAL = pi_palmos_error(self->socket); + OUTPUT: + RETVAL + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot::DLP::DBPtr + +SV * +class(self, name=0) + PDA::Pilot::DLP::DB *self + SV * name + CODE: + { + SV ** s = 0; + HV * h; + if (name) { + STRLEN len; + h = perl_get_hv("PDA::Pilot::DBClasses", 0); + if (!h) + croak("DBClasses doesn't exist"); + if (SvOK(name)) { + (void)SvPV(name,len); + s = hv_fetch(h, SvPV(name,na), len, 0); + } + if (!s) + s = hv_fetch(h, "", 0, 0); + if (!s) + croak("Default DBClass not defined"); + SvREFCNT_inc(*s); + if (self->Class) + SvREFCNT_dec(self->Class); + self->Class = *s; + } + RETVAL = newSVsv(self->Class); + } + OUTPUT: + RETVAL + +Result +close(self) + PDA::Pilot::DLP::DB *self + CODE: + RETVAL = dlp_CloseDB(self->socket, self->handle); + self->handle=0; + OUTPUT: + RETVAL + +Result +setSortBlock(self, data) + PDA::Pilot::DLP::DB *self + SV *data + CODE: + { + STRLEN len; + void * c; + PackSI; + c = SvPV(data, len); + RETVAL = dlp_WriteSortBlock(self->socket, self->handle, c, len); + } + OUTPUT: + RETVAL + +SV * +getAppBlock(self) + PDA::Pilot::DLP::DB *self + PPCODE: + { + int result = dlp_ReadAppBlock(self->socket, self->handle, 0, -1, &pibuf); + ReturnReadAI(pibuf.data, result); + } + +SV * +getSortBlock(self) + PDA::Pilot::DLP::DB *self + PPCODE: + { + int result = dlp_ReadSortBlock(self->socket,self->handle, 0, -1, &pibuf); + ReturnReadSI(pibuf.data, result); + } + +Result +setAppBlock(self, data) + PDA::Pilot::DLP::DB *self + SV *data + CODE: + { + STRLEN len; + void * c; + PackAI; + c = SvPV(data, len); + RETVAL = dlp_WriteAppBlock(self->socket, self->handle, c, len); + } + OUTPUT: + RETVAL + +Result +purge(self) + PDA::Pilot::DLP::DB *self + CODE: + RETVAL = dlp_CleanUpDatabase(self->socket, self->handle); + OUTPUT: + RETVAL + +Result +resetFlags(self) + PDA::Pilot::DLP::DB *self + CODE: + RETVAL = dlp_ResetSyncFlags(self->socket, self->handle); + OUTPUT: + RETVAL + +Result +deleteCategory(self, category) + PDA::Pilot::DLP::DB *self + int category + CODE: + RETVAL = dlp_DeleteCategory(self->socket, self->handle, category); + OUTPUT: + RETVAL + +void +newRecord(self, id=0, attr=0, cat=0) + PDA::Pilot::DLP::DB *self + SV * id + SV * attr + SV * cat + PPCODE: + { + if (self->Class) { + int count; + PUSHMARK(sp); + XPUSHs(self->Class); + if (id) + XPUSHs(id); + if (attr) + XPUSHs(attr); + if (cat) + XPUSHs(cat); + PUTBACK; + count = perl_call_method("record", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to create record"); + } + else { + croak("Class not defined"); + } + } + +void +newResource(self, type=0, id=0) + PDA::Pilot::DLP::DB *self + SV * type + SV * id + PPCODE: + { + if (self->Class) { + int count; + PUSHMARK(sp); + XPUSHs(self->Class); + if (type) + XPUSHs(type); + if (id) + XPUSHs(id); + PUTBACK; + count = perl_call_method("resource", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to create record"); + } + else { + croak("Class not defined"); + } + } + +void +newAppBlock(self) + PDA::Pilot::DLP::DB *self + PPCODE: + { + if (self->Class) { + int count; + PUSHMARK(sp); + XPUSHs(self->Class); + PUTBACK; + count = perl_call_method("appblock", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to create record"); + } + else { + croak("Class not defined"); + } + } + +void +newSortBlock(self) + PDA::Pilot::DLP::DB *self + PPCODE: + { + if (self->Class) { + int count; + PUSHMARK(sp); + XPUSHs(self->Class); + PUTBACK; + count = perl_call_method("sortblock", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to create record"); + } + else { + croak("Class not defined"); + } + } + +void +newPref(self, id=0, version=0, backup=0, creator=0) + PDA::Pilot::DLP::DB *self + SV * id + SV * version + SV * backup + SV * creator + PPCODE: + { + if (!creator) { + int count; + PUSHMARK(sp); + XPUSHs(self->Class); + PUTBACK; + count = perl_call_method("creator", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to get creator"); + creator = POPs; + PUTBACK; + } + if (self->Class) { + int count; + PUSHMARK(sp); + XPUSHs(self->Class); + if (creator) + XPUSHs(creator); + if (id) + XPUSHs(id); + if (version) + XPUSHs(version); + if (backup) + XPUSHs(backup); + PUTBACK; + count = perl_call_method("pref", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to create record"); + } + else { + croak("Class not defined"); + } + } + +void +getRecord(self, index) + PDA::Pilot::DLP::DB *self + int index + PPCODE: + { + int attr, category; + unsigned long id; + int result; + + result = dlp_ReadRecordByIndex(self->socket, self->handle, index, &pibuf, &id, &attr, &category); + ReturnReadRecord(pibuf.data, pibuf.used); + } + +Result +moveCategory(self, fromcat, tocat) + PDA::Pilot::DLP::DB *self + int fromcat + int tocat + CODE: + RETVAL = dlp_MoveCategory(self->socket, self->handle, fromcat, tocat); + OUTPUT: + RETVAL + + +Result +deleteRecord(self, id) + PDA::Pilot::DLP::DB *self + unsigned long id + CODE: + RETVAL = dlp_DeleteRecord(self->socket, self->handle, 0, id); + OUTPUT: + RETVAL + + +Result +deleteRecords(self) + PDA::Pilot::DLP::DB *self + CODE: + RETVAL = dlp_DeleteRecord(self->socket, self->handle, 1, 0); + OUTPUT: + RETVAL + +Result +resetNext(self) + PDA::Pilot::DLP::DB *self + CODE: + RETVAL = dlp_ResetDBIndex(self->socket, self->handle); + OUTPUT: + RETVAL + +int +getRecords(self) + PDA::Pilot::DLP::DB *self + CODE: + { + int result = dlp_ReadOpenDBInfo(self->socket, self->handle, &RETVAL); + if (result < 0) { + RETVAL = newSVsv(&sv_undef); + self->errnop = result; + } + } + OUTPUT: + RETVAL + +void +getRecordIDs(self, sort=0) + PDA::Pilot::DLP::DB *self + int sort + PPCODE: + { + recordid_t * id = (recordid_t*)mybuf; + int result; + int start; + int count; + int i; + AV * list = newAV(); + + start = 0; + for(;;) { + result = dlp_ReadRecordIDList(self->socket, self->handle, sort, start, + 0xFFFF/sizeof(recordid_t), id, &count); + if (result < 0) { + self->errnop = result; + break; + } else { + for(i=0;isocket, self->handle, id, &pibuf, &index, &attr, &category); + ReturnReadRecord(pibuf.data, pibuf.used); + } + +void +getNextModRecord(self, category=-1) + PDA::Pilot::DLP::DB *self + int category + PPCODE: + { + int result, attr, index; + unsigned long id; + + if (category == -1) + result = dlp_ReadNextModifiedRec(self->socket, self->handle, &pibuf, &id, &index, &attr, &category); + else + result = dlp_ReadNextModifiedRecInCategory(self->socket, self->handle, category, &pibuf, &id, &index, &attr); + ReturnReadRecord(pibuf.data, pibuf.used); + } + +void +getNextRecord(self, category) + PDA::Pilot::DLP::DB *self + int category + PPCODE: + { + int result, attr, index; + unsigned long id; + + result = dlp_ReadNextRecInCategory(self->socket, self->handle, category, &pibuf, &id, &index, &attr); + ReturnReadRecord(pibuf.data, pibuf.used); + } + +unsigned long +setRecord(self, data) + PDA::Pilot::DLP::DB *self + SV *data + CODE: + { + STRLEN len; + unsigned long id; + int attr, category; + int result; + void * c; + PackRecord; + c = SvPV(data, len); + result = dlp_WriteRecord(self->socket, self->handle, attr, id, category, c, len, &RETVAL); + if (result<0) { + RETVAL = 0; + self->errnop = result; + } + } + OUTPUT: + RETVAL + +unsigned long +setRecordRaw(self, data, id, attr, category) + PDA::Pilot::DLP::DB *self + unsigned long id + int attr + int category + SV *data + CODE: + { + STRLEN len; + int result; + void * c; + PackRaw; + c = SvPV(data, len); + result = dlp_WriteRecord(self->socket, self->handle, attr, id, category, c, len, &RETVAL); + if (result<0) { + RETVAL = 0; + self->errnop = result; + } + } + OUTPUT: + RETVAL + +void +setResourceByID(self, type, id) + PDA::Pilot::DLP::DB *self + Char4 type + int id + PPCODE: + { + int result, index; + + result = dlp_ReadResourceByType(self->socket, self->handle, type, id, &pibuf, &index); + ReturnReadResource(pibuf.data, pibuf.used); + } + +void +getResource(self, index) + PDA::Pilot::DLP::DB *self + int index + PPCODE: + { + int result, id; + Char4 type; + + result = dlp_ReadResourceByIndex(self->socket, self->handle, index, &pibuf, &type, &id); + ReturnReadResource(pibuf.data, pibuf.used); + } + +SV * +setResource(self, data) + PDA::Pilot::DLP::DB *self + SV *data + CODE: + { + STRLEN len; + int result; + Char4 type; + int id; + void * c; + PackResource; + c = SvPV(data, len); + result = dlp_WriteResource(self->socket, self->handle, type, id, c, len); + if (result < 0) { + self->errnop = result; + RETVAL = newSVsv(&sv_undef); + } else + RETVAL = newSViv(result); + } + OUTPUT: + RETVAL + +Result +deleteResource(self, type, id) + PDA::Pilot::DLP::DB *self + Char4 type + int id + CODE: + RETVAL = dlp_DeleteResource(self->socket, self->handle, 0, type, id); + OUTPUT: + RETVAL + +Result +deleteResources(self) + PDA::Pilot::DLP::DB *self + CODE: + RETVAL = dlp_DeleteResource(self->socket, self->handle, 1, 0, 0); + OUTPUT: + RETVAL + +void +getPref(self, id=0, backup=1) + PDA::Pilot::DLP::DB *self + int id + int backup + PPCODE: + { + Char4 creator; + int version, result; + size_t len; + SV * c, n, v; + int r; + if (self->Class) { + int count; + PUSHMARK(sp); + XPUSHs(self->Class); + PUTBACK; + count = perl_call_method("creator", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to get creator"); + creator = SvChar4(POPs); + PUTBACK; + } + if (pi_version(self->socket)< 0x101) + r = dlp_CloseDB(self->socket, self->handle); + result = dlp_ReadAppPreference(self->socket, creator, id, backup, 0xFFFF, mybuf, &len, &version); + if (pi_version(self->socket)< 0x101) + r = dlp_OpenDB(self->socket, self->dbcard, self->dbmode, SvPV(self->dbname,na), &self->handle); + ReturnReadPref(mybuf, len); + } + +SV * +setPref(self, data) + PDA::Pilot::DLP::DB *self + SV *data + PPCODE: + { + Char4 creator; + int id; + int version; + int backup; + STRLEN len; + int result; + void * buf; + int r; + PackPref; + buf = SvPV(data, len); + if (pi_version(self->socket)< 0x101) + r = dlp_CloseDB(self->socket, self->handle); + result = dlp_WriteAppPreference(self->socket, creator, id, backup, version, buf, len); + if (pi_version(self->socket)< 0x101) + r = dlp_OpenDB(self->socket, self->dbcard, self->dbmode, SvPV(self->dbname,na), &self->handle); + if (result < 0) { + self->errnop = result; + RETVAL = newSVsv(&sv_undef); + } else { + RETVAL = newSViv(result); + } + } + +SV * +setPrefRaw(self, data, number, version, backup=1) + PDA::Pilot::DLP::DB *self + SV *data + int number + int version + int backup + PPCODE: + { + STRLEN len; + Char4 creator; + int version, result; + void * buf; + PackRaw; + buf = SvPV(data, len); + if (self->Class) { + int count; + PUSHMARK(sp); + XPUSHs(self->Class); + PUTBACK; + count = perl_call_method("creator", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to get creator"); + creator = SvChar4(POPs); + PUTBACK; + } + result = dlp_WriteAppPreference(self->socket, creator, number, backup, version, buf, len); + if (result < 0) { + self->errnop = result; + RETVAL = newSVsv(&sv_undef); + } else { + RETVAL = newSViv(result); + } + } + + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot::DLPPtr + +void +DESTROY(self) + PDA::Pilot::DLP *self + CODE: + if (self->socket) + pi_close(self->socket); + free(self); + +int +errno(self) + PDA::Pilot::DLP *self + CODE: + RETVAL = self->errnop; + self->errnop = 0; + OUTPUT: + RETVAL + +int +palmos_errno(self) + PDA::Pilot::DLP *self + CODE: + RETVAL = pi_palmos_error(self->socket); + OUTPUT: + RETVAL + +SV * +getTime(self) + PDA::Pilot::DLP *self + CODE: + { + time_t t; + int result = dlp_GetSysDateTime(self->socket, &t); + if (result < 0) { + self->errnop = result; + RETVAL = newSVsv(&sv_undef); + } else + RETVAL = newSViv(t); + } + OUTPUT: + RETVAL + +Result +setTime(self, time) + PDA::Pilot::DLP *self + long time + CODE: + RETVAL = dlp_SetSysDateTime(self->socket, time); + OUTPUT: + RETVAL + +SV * +getSysInfo(self) + PDA::Pilot::DLP *self + CODE: + { + struct SysInfo si; + int result = dlp_ReadSysInfo(self->socket, &si); + if (result < 0) { + self->errnop = result; + RETVAL = newSVsv(&sv_undef); + } else { + HV * i = newHV(); + hv_store(i, "romVersion", 10, newSViv(si.romVersion), 0);\ + hv_store(i, "locale", 6, newSViv(si.locale), 0);\ + hv_store(i, "product", 4, newSVpvn(si.prodID, si.prodIDLength), 0);\ + RETVAL = newRV((SV*)i); + } + } + OUTPUT: + RETVAL + +SV * +getCardInfo(self, cardno=0) + PDA::Pilot::DLP *self + int cardno + CODE: + { + struct CardInfo c; + int result = dlp_ReadStorageInfo(self->socket, cardno, &c); + if (result < 0) { + self->errnop = result; + RETVAL = newSVsv(&sv_undef); + } else { + HV * i = newHV(); + hv_store(i, "card", 6, newSViv(c.card), 0);\ + hv_store(i, "version", 7, newSViv(c.version), 0);\ + hv_store(i, "created", 8, newSViv(c.creation), 0);\ + hv_store(i, "romSize", 7, newSViv(c.romSize), 0);\ + hv_store(i, "ramSize", 7, newSViv(c.ramSize), 0);\ + hv_store(i, "ramFree", 7, newSViv(c.ramFree), 0);\ + hv_store(i, "name", 4, newSVpv(c.name,0), 0);\ + hv_store(i, "manufacturer", 12, newSVpv(c.manufacturer,0), 0);\ + RETVAL = newRV((SV*)i); + } + } + OUTPUT: + RETVAL + +int +setUserInfo(self, info) + PDA::Pilot::DLP *self + UserInfo &info + CODE: + RETVAL = dlp_WriteUserInfo(self->socket, &info); + OUTPUT: + RETVAL + +void +getBattery(self) + PDA::Pilot::DLP *self + PPCODE: + { + int warn, critical, ticks, kind, AC; + unsigned long voltage; + int result; + struct RPC_params p; + + PackRPC(&p,0xA0B6, RPC_IntReply, + RPC_Byte(0), RPC_ShortPtr(&warn), RPC_ShortPtr(&critical), + RPC_ShortPtr(&ticks), RPC_BytePtr(&kind), RPC_BytePtr(&AC), RPC_End); + + result = dlp_RPC(self->socket, &p, &voltage); + + if (result==0) { + EXTEND(sp,5); + PUSHs(sv_2mortal(newSVnv((float)voltage/100))); + PUSHs(sv_2mortal(newSVnv((float)warn/100))); + PUSHs(sv_2mortal(newSVnv((float)critical/100))); + PUSHs(sv_2mortal(newSViv(kind))); + PUSHs(sv_2mortal(newSViv(AC))); + } + } + +SV * +getUserInfo(self) + PDA::Pilot::DLP *self + CODE: + { + UserInfo info; + int result; + result = dlp_ReadUserInfo(self->socket, &info); + pack_userinfo(RETVAL, info, result); + } + OUTPUT: + RETVAL + +void +newPref(self, creator, id=0, version=0, backup=0) + PDA::Pilot::DLP *self + Char4 creator + SV * id + SV * version + SV * backup + PPCODE: + { + HV * h = perl_get_hv("PDA::Pilot::PrefClasses", 0); + SV ** s; + int count; + if (!h) + croak("PrefClasses doesn't exist"); + s = hv_fetch(h, printlong(creator), 4, 0); + if (!s) + s = hv_fetch(h, "", 0, 0); + if (!s) + croak("Default PrefClass not defined"); + PUSHMARK(sp); + XPUSHs(newSVsv(*s)); + XPUSHs(&sv_undef); + XPUSHs(sv_2mortal(newSVChar4(creator))); + if (id) + XPUSHs(id); + if (version) + XPUSHs(version); + if (backup) + XPUSHs(backup); + PUTBACK; + count = perl_call_method("pref", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to create resource"); + } + +Result +delete(self, name, cardno=0) + PDA::Pilot::DLP *self + char * name + int cardno + CODE: + { + UserInfo info; + int result; + RETVAL = dlp_DeleteDB(self->socket, cardno, name); + } + OUTPUT: + RETVAL + +SV * +open(self, name, mode=0, cardno=0) + PDA::Pilot::DLP *self + char * name + SV * mode + int cardno + CODE: + { + int handle; + int nummode; + int result; + if (!mode) + nummode = dlpOpenRead|dlpOpenWrite|dlpOpenSecret; + else { + char *c; + STRLEN len; + nummode = SvIV(mode); + if (SvPOKp(mode)) { + c = SvPV(mode, len); + while (*c) { + switch (*c) { + case 'r': + nummode |= dlpOpenRead; + break; + case 'w': + nummode |= dlpOpenWrite; + break; + case 'x': + nummode |= dlpOpenExclusive; + break; + case 's': + nummode |= dlpOpenSecret; + break; + } + c++; + } + } + } + result = dlp_OpenDB(self->socket, cardno, nummode, name, &handle); + if (result<0) { + self->errnop = result; + RETVAL = &sv_undef; + } else { + int type; + PDA__Pilot__DLP__DB * x = malloc(sizeof(PDA__Pilot__DLP__DB)); + SV * sv = newSViv((IV)(void*)x); + SvREFCNT_inc(ST(0)); + x->connection = ST(0); + x->socket = self->socket; + x->handle = handle; + x->errnop = 0; + x->dbname = newSVpv(name,0); + x->dbmode = nummode; + x->dbcard = cardno; + RETVAL = newRV(sv); + SvREFCNT_dec(sv); + sv_bless(RETVAL, gv_stashpv("PDA::Pilot::DLP::DBPtr",0)); + { + HV * h = perl_get_hv("PDA::Pilot::DBClasses", 0); + SV ** s; + if (!h) + croak("DBClasses doesn't exist"); + s = hv_fetch(h, name, strlen(name), 0); + if (!s) + s = hv_fetch(h, "", 0, 0); + if (!s) + croak("Default DBClass not defined"); + x->Class = *s; + SvREFCNT_inc(*s); + } + } + } + OUTPUT: + RETVAL + +SV * +create(self, name, creator, type, flags, version, cardno=0) + PDA::Pilot::DLP *self + char * name + Char4 creator + Char4 type + int flags + int version + int cardno + CODE: + { + int handle; + int result = dlp_CreateDB(self->socket, creator, type, cardno, flags, version, name, &handle); + if (result<0) { + self->errnop = result; + RETVAL = &sv_undef; + } else { + PDA__Pilot__DLP__DB * x = malloc(sizeof(PDA__Pilot__DLP__DB)); + SV * sv = newSViv((IV)(void*)x); + SvREFCNT_inc(ST(0)); + x->connection = ST(0); + x->socket = self->socket; + x->handle = handle; + x->errnop = 0; + x->dbname = newSVpv(name,0); + x->dbmode = dlpOpenRead|dlpOpenWrite|dlpOpenSecret; + x->dbcard = cardno; + RETVAL = newRV(sv); + SvREFCNT_dec(sv); + sv_bless(RETVAL, gv_stashpv("PDA::Pilot::DLP::DBPtr",0)); + { + HV * h = perl_get_hv("PDA::Pilot::DBClasses", 0); + SV ** s; + if (!h) + croak("DBClasses doesn't exist"); + s = hv_fetch(h, name, strlen(name), 0); + if (!s) + s = hv_fetch(h, "", 0, 0); + if (!s) + croak("Default DBClass not defined"); + x->Class = *s; + SvREFCNT_inc(*s); + } + } + } + OUTPUT: + RETVAL + + + +void +getPref(self, creator, id=0, backup=1) + PDA::Pilot::DLP *self + Char4 creator + int id + int backup + PPCODE: + { + int version, result; + size_t len; + SV * c, n, v; + result = dlp_ReadAppPreference(self->socket, creator, id, backup, 0xFFFF, mybuf, &len, &version); + ReturnReadPref(mybuf, len); + } + +SV * +setPref(self, data) + PDA::Pilot::DLP *self + SV *data + PPCODE: + { + Char4 creator; + int id; + int version; + int backup; + STRLEN len; + int result; + void * buf; + PackPref; + buf = SvPV(data, len); + result = dlp_WriteAppPreference(self->socket, creator, id, backup, version, buf, len); + if (result < 0) { + self->errnop = result; + RETVAL = newSVsv(&sv_undef); + } else { + RETVAL = newSViv(result); + } + } + +SV * +setPrefRaw(self, data, creator, number, version, backup=1) + PDA::Pilot::DLP *self + SV *data + Char4 creator + int number + int version + int backup + PPCODE: + { + STRLEN len; + int version, result; + void * buf; + PackRaw; + buf = SvPV(data, len); + result = dlp_WriteAppPreference(self->socket, creator, number, backup, version, buf, len); + if (result < 0) { + self->errnop = result; + RETVAL = newSVsv(&sv_undef); + } else { + RETVAL = newSViv(result); + } + } + + +Result +close(self, status=0) + PDA::Pilot::DLP *self + int status + CODE: + RETVAL = dlp_EndOfSync(self->socket, status) || pi_close(self->socket); + if (!RETVAL) + self->socket = 0; + OUTPUT: + RETVAL + +Result +abort(self) + PDA::Pilot::DLP *self + CODE: + RETVAL = dlp_AbortSync(self->socket) || pi_close(self->socket); + if (!RETVAL) + self->socket = 0; + OUTPUT: + RETVAL + +Result +reset(self) + PDA::Pilot::DLP *self + CODE: + RETVAL = dlp_ResetSystem(self->socket); + OUTPUT: + RETVAL + +Result +getStatus(self) + PDA::Pilot::DLP *self + CODE: + RETVAL = dlp_OpenConduit(self->socket); + OUTPUT: + RETVAL + +Result +log(self, message) + PDA::Pilot::DLP *self + char * message + CODE: + RETVAL = dlp_AddSyncLogEntry(self->socket,message); + OUTPUT: + RETVAL + + +Result +dirty(self) + PDA::Pilot::DLP *self + CODE: + RETVAL = dlp_ResetLastSyncPC(self->socket); + OUTPUT: + RETVAL + +SV * +getDBInfo(self, start, RAM=1, ROM=0, cardno=0) + PDA::Pilot::DLP *self + int start + int RAM + int ROM + int cardno + CODE: + { + struct DBInfo info; + + int where = (RAM ? dlpDBListRAM : 0) | (ROM ? dlpDBListROM : 0); + int result = dlp_ReadDBList(self->socket, cardno, where, start, &pibuf); + pack_dbinfo(RETVAL,(*(struct DBInfo *)(pibuf.data)), result); + } + OUTPUT: + RETVAL + +SV * +findDBInfo(self, start, name, creator, type, cardno=0) + PDA::Pilot::DLP *self + int start + SV * name + SV * creator + SV * type + int cardno + CODE: + { + struct DBInfo info; + Char4 c,t; + int result; + if (SvOK(creator)) + c = SvChar4(creator); + else + c = 0; + if (SvOK(type)) + t = SvChar4(type); + else + t = 0; + result = dlp_FindDBInfo(self->socket, cardno, start, + SvOK(name) ? SvPV(name,na) : 0, + t, c, &info); + pack_dbinfo(RETVAL, info, result); + } + OUTPUT: + RETVAL + +SV * +getFeature(self, creator, number) + PDA::Pilot::DLP *self + Char4 creator + int number + CODE: + { + unsigned long f; + int result; + if ((result = dlp_ReadFeature(self->socket, creator, number, &f))<0) { + RETVAL = newSVsv(&sv_undef); + self->errnop = result; + } else { + RETVAL = newSViv(f); + } + } + OUTPUT: + RETVAL + + +void +getROMToken(self,token) + PDA::Pilot::DLP *self + Char4 token + PPCODE: + { + char buffer[50]; + long long_token; + size_t size; + int result; + + result = dlp_GetROMToken(self->socket, token, buffer, &size); + + if (result==0) { + EXTEND(sp,1); + PUSHs(sv_2mortal(newSVpvn(buffer, size))); + } + } + +void +callApplication(self, creator, type, action, data=&sv_undef) + PDA::Pilot::DLP *self + Char4 creator + Char4 type + int action + SV *data + PPCODE: + { + unsigned long retcode; + STRLEN len; + int result; + (void)SvPV(data,len); + result = dlp_CallApplication(self->socket, creator, + type, action, len, SvPV(data,na), + &retcode, &pibuf); + EXTEND(sp, 2); + if (result >= 0) { + PUSHs(sv_2mortal(newSVpvn((char *) pibuf.data, pibuf.used))); + if (GIMME != G_SCALAR) { + PUSHs(sv_2mortal(newSViv(retcode))); + } + } else + PUSHs(&sv_undef); + } + +int +tickle(self) + PDA::Pilot::DLP *self + CODE: + { + RETVAL = pi_tickle(self->socket); + } + OUTPUT: + RETVAL + +int +watchdog(self, interval) + PDA::Pilot::DLP *self + int interval + CODE: + { + RETVAL = pi_watchdog(self->socket, interval); + } + OUTPUT: + RETVAL + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot::File + +PDA::Pilot::File * +open(name) + char * name + CODE: + { + RETVAL = calloc(sizeof(PDA__Pilot__File),1); + RETVAL->errnop = 0; + RETVAL->pf = pi_file_open(name); + { + HV * h = perl_get_hv("PDA::Pilot::DBClasses", 0); + SV ** s; + if (!h) + croak("DBClasses doesn't exist"); + s = hv_fetch(h, name, strlen(name), 0); + if (!s) + s = hv_fetch(h, "", 0, 0); + if (!s) + croak("Default DBClass not defined"); + RETVAL->Class = *s; + SvREFCNT_inc(*s); + } + } + OUTPUT: + RETVAL + +PDA::Pilot::File * +create(name, info) + char * name + DBInfo info + CODE: + RETVAL = calloc(sizeof(PDA__Pilot__File),1); + RETVAL->errnop = 0; + RETVAL->pf = pi_file_create(name, &info); + { + HV * h = perl_get_hv("PDA::Pilot::DBClasses", 0); + SV ** s; + if (!h) + croak("DBClasses doesn't exist"); + s = hv_fetch(h, name, strlen(name), 0); + if (!s) + s = hv_fetch(h, "", 0, 0); + if (!s) + croak("Default DBClass not defined"); + RETVAL->Class = *s; + SvREFCNT_inc(*s); + } + OUTPUT: + RETVAL + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot::FilePtr + +int +errno(self) + PDA::Pilot::File *self + CODE: + RETVAL = self->errnop; + self->errnop = 0; + OUTPUT: + RETVAL + +void +DESTROY(self) + PDA::Pilot::File *self + CODE: + if (self->pf) + pi_file_close(self->pf); + if (self->Class) + SvREFCNT_dec(self->Class); + free(self); + +SV * +class(self, name=0) + PDA::Pilot::File *self + SV * name + CODE: + { + SV ** s = 0; + HV * h; + if (name) { + STRLEN len; + h = perl_get_hv("PDA::Pilot::DBClasses", 0); + if (!h) + croak("DBClasses doesn't exist"); + if (SvOK(name)) { + (void)SvPV(name, len); + s = hv_fetch(h, SvPV(name, na), len, 0); + } + if (!s) + s = hv_fetch(h, "", 0, 0); + if (!s) + croak("Default DBClass not defined"); + SvREFCNT_inc(*s); + if (self->Class) + SvREFCNT_dec(self->Class); + self->Class = *s; + } + RETVAL = newSVsv(self->Class); + } + OUTPUT: + RETVAL + +int +close(self) + PDA::Pilot::File *self + CODE: + if (self->pf) { + RETVAL = pi_file_close(self->pf); + self->pf = 0; + } else + RETVAL = 0; + OUTPUT: + RETVAL + +SV * +getAppBlock(self) + PDA::Pilot::File *self + PPCODE: + { + int result = 0; + size_t len; + void * buf; + pi_file_get_app_info(self->pf, &buf, &len); + ReturnReadAI(buf, (int)len); + } + +SV * +getSortBlock(self) + PDA::Pilot::File *self + PPCODE: + { + int result = 0; + size_t len; + void * buf; + pi_file_get_sort_info(self->pf, &buf, &len); + ReturnReadSI(buf, (int)len); + } + + +SV * +getRecords(self) + PDA::Pilot::File *self + CODE: + { + int len, result = 0; + pi_file_get_entries(self->pf, &len); + RETVAL = newSViv((int)len); + } + OUTPUT: + RETVAL + +SV * +getResource(self, index) + PDA::Pilot::File *self + int index + CODE: + { + int result, id; + size_t len; + Char4 type; + void * buf; + result = pi_file_read_resource(self->pf, index, &buf, &len, &type, &id); + ReturnReadResource(buf,(int)len); + } + OUTPUT: + RETVAL + +SV * +getRecord(self, index) + PDA::Pilot::File *self + int index + PPCODE: + { + int result, attr, category; + size_t len; + unsigned long id; + void * buf; + result = pi_file_read_record(self->pf, index, &buf, &len, &attr, &category, &id); + ReturnReadRecord(buf,(int)len); + } + + +SV * +getRecordByID(self, id) + PDA::Pilot::File *self + unsigned long id + CODE: + { + int result; + size_t len; + int attr, category, index; + void * buf; + result = pi_file_read_record_by_id(self->pf, id, &buf, &len, &index, &attr, &category); + ReturnReadRecord(buf, (int)len); + } + OUTPUT: + RETVAL + +int +checkID(self, uid) + PDA::Pilot::File *self + unsigned long uid + CODE: + RETVAL = pi_file_id_used(self->pf, uid); + OUTPUT: + RETVAL + +SV * +getDBInfo(self) + PDA::Pilot::File *self + CODE: + { + DBInfo result; + pi_file_get_info(self->pf, &result); + pack_dbinfo(RETVAL, result, 0); + } + OUTPUT: + RETVAL + +int +setDBInfo(self, info) + PDA::Pilot::File *self + DBInfo info + CODE: + RETVAL = pi_file_set_info(self->pf, &info); + OUTPUT: + RETVAL + +int +setAppBlock(self, data) + PDA::Pilot::File *self + SV *data + CODE: + { + STRLEN len; + char * c; + PackAI; + c = SvPV(data, len); + RETVAL = pi_file_set_app_info(self->pf, c, len); + } + OUTPUT: + RETVAL + +int +setSortBlock(self, data) + PDA::Pilot::File *self + SV *data + CODE: + { + STRLEN len; + char * c; + PackSI; + c = SvPV(data, len); + RETVAL = pi_file_set_sort_info(self->pf, c, len); + } + OUTPUT: + RETVAL + +int +addResource(self, data, type, id) + PDA::Pilot::File *self + SV *data + Char4 type + int id + CODE: + { + STRLEN len; + int result; + void * buf; + PackResource; + buf = SvPV(data, len); + RETVAL = pi_file_append_resource(self->pf, buf, len, type, id); + } + OUTPUT: + RETVAL + +int +addRecord(self, data) + PDA::Pilot::File *self + SV *data + CODE: + { + STRLEN len; + unsigned long id; + int attr, category; + int result; + void * buf; + PackRecord; + buf = SvPV(data, len); + RETVAL = pi_file_append_record(self->pf, buf, len, attr, category, id); + } + OUTPUT: + RETVAL + +int +addRecordRaw(self, data, uid, attr, category) + PDA::Pilot::File *self + SV *data + unsigned long uid + int attr + int category + CODE: + { + STRLEN len; + int result; + void * buf; + PackRaw; + buf = SvPV(data, len); + RETVAL = pi_file_append_record(self->pf, buf, len, attr, category, uid); + } + OUTPUT: + RETVAL + + +int +install(self, socket, cardno) + PDA::Pilot::File *self + PDA::Pilot::DLP *socket + int cardno + CODE: + RETVAL = pi_file_install(self->pf, socket->socket, cardno, NULL); + OUTPUT: + RETVAL + +int +retrieve(self, socket, cardno) + PDA::Pilot::File *self + PDA::Pilot::DLP *socket + int cardno + CODE: + RETVAL = pi_file_retrieve(self->pf, socket->socket, cardno, NULL); + OUTPUT: + RETVAL diff --git a/bindings/Perl/Pilot.xs.orig b/bindings/Perl/Pilot.xs.orig new file mode 100644 index 0000000..cb7de0f --- /dev/null +++ b/bindings/Perl/Pilot.xs.orig @@ -0,0 +1,3770 @@ +/* + * Pilot.xs - Interface pilot-link library with Perl. + * + * Copyright (C) 1997, 1998, Kenneth Albanowski + * + * 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 St, Fifth Floor, Boston, MA 02110-1301, USA. * + */ + +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" +#include "patchlevel.h" + +/* FIXME Hack to get around a perl macro problem with calling the type 'int + dirty;' in pi-mail.h and pi-todo.h. This originally showed up with perl + 5.6 and gcc-3.x, and was fixed in gcc, but now appears in perl 5.8 with + gcc-3.x. It smells like another internal macro being exposed into + userland. */ +#undef dirty + +#include "pi-macros.h" +#include "pi-buffer.h" +#include "pi-file.h" +#include "pi-datebook.h" +#include "pi-memo.h" +#include "pi-expense.h" +#include "pi-address.h" +#include "pi-todo.h" +#include "pi-mail.h" +#include "pi-socket.h" +#include "pi-dlp.h" +#include "pi-syspkt.h" +#include "pi-error.h" +#include "pi-version.h" + +#include "const-c.inc" + + +typedef unsigned char * CPTR; + +static unsigned char mybuf[0xffff]; +static pi_buffer_t pibuf = {NULL, 0, 0}; + +static AV * tmtoav (struct tm * t) { + AV * ret = newAV(); + + av_push(ret, newSViv(t->tm_sec)); + av_push(ret, newSViv(t->tm_min)); + av_push(ret, newSViv(t->tm_hour)); + av_push(ret, newSViv(t->tm_mday)); + av_push(ret, newSViv(t->tm_mon)); + av_push(ret, newSViv(t->tm_year)); + av_push(ret, newSViv(t->tm_wday)); + av_push(ret, newSViv(t->tm_yday)); + av_push(ret, newSViv(t->tm_isdst)); + + return ret; +} + +struct tm * avtotm (AV * av, struct tm * t) { + SV ** s; + t->tm_sec = (s = av_fetch(av, 0, 0)) ? SvIV(*s) : 0; + t->tm_min = (s = av_fetch(av, 1, 0)) ? SvIV(*s) : 0; + t->tm_hour = (s = av_fetch(av, 2, 0)) ? SvIV(*s) : 0; + t->tm_mday = (s = av_fetch(av, 3, 0)) ? SvIV(*s) : 0; + t->tm_mon = (s = av_fetch(av, 4, 0)) ? SvIV(*s) : 0; + t->tm_year = (s = av_fetch(av, 5, 0)) ? SvIV(*s) : 0; + t->tm_wday = (s = av_fetch(av, 6, 0)) ? SvIV(*s) : 0; + t->tm_yday = (s = av_fetch(av, 7, 0)) ? SvIV(*s) : 0; + t->tm_isdst = (s = av_fetch(av, 8, 0)) ? SvIV(*s) : 0; + + return t; +} + +#ifndef newRV_noinc +static SV * rv; +#define newRV_noinc(s) ((rv=newRV(s)), SvREFCNT_dec(s), rv) +#endif + +#if (PATCHLEVEL < 3) || ((PATCHLEVEL == 3) && (SUBVERSION < 16)) +#define sv_derived_from(x, y) sv_isobject((x)) +#endif + +extern char * printlong _((unsigned long val)); +extern unsigned long makelong _((char * c)); +SV * newSVChar4 _((unsigned long arg)); +unsigned long SvChar4 _((SV *arg)); + +typedef struct { + int errnop; + struct pi_file * pf; + SV * Class; +} PDA__Pilot__File; + +typedef struct DLP { + int errnop; + int socket; +} PDA__Pilot__DLP; + +typedef struct DLPDB { + SV * connection; + int socket; + int handle; + int errnop; + SV * dbname; + int dbmode; + int dbcard; + SV * Class; +} PDA__Pilot__DLP__DB; + +/* typedef PDA__Pilot__DLP__DB PDA__Pilot__DLP__ResourceDB; + typedef PDA__Pilot__DLP__DB PDA__Pilot__DLP__RecordDB; +*/ +typedef struct DBInfo DBInfo; +typedef struct PilotUser UserInfo; +typedef unsigned long Char4; +typedef int Result; + +SV * +newSVChar4(arg) + unsigned long arg; +{ + char * c = printlong(arg); + if((isalpha(c[0]) || (c[0] == ' ') || (c[0] == '_')) && + (isalpha(c[1]) || (c[1] == ' ') || (c[0] == '_')) && + (isalpha(c[2]) || (c[2] == ' ') || (c[0] == '_')) && + (isalpha(c[3]) || (c[3] == ' ') || (c[0] == '_'))) { + return newSVpv(c,4); + } else { + return newSViv(arg); + } +} + +unsigned long +SvChar4(arg) + SV * arg; +{ + if (SvIOKp(arg)) { + return SvIV(arg); + } else { + STRLEN len; + char * c = SvPV(arg, len); + if (len != 4) + croak("Char4 argument a string that isn't four bytes long"); + return makelong(c); + } +} + +#define pack_dbinfo(arg, var, failure) { \ + if (failure < 0) { \ + arg = &sv_undef; \ + self->errnop = failure; \ + } else { \ + HV * i = newHV(); \ + hv_store(i, "more", 4, newSViv(var.more), 0); \ + hv_store(i, "flagReadOnly", 12, newSViv((var.flags & dlpDBFlagReadOnly) !=0), 0); \ + hv_store(i, "flagResource", 12, newSViv((var.flags & dlpDBFlagResource) !=0), 0); \ + hv_store(i, "flagBackup", 10, newSViv((var.flags & dlpDBFlagBackup) !=0), 0); \ + hv_store(i, "flagOpen", 8, newSViv((var.flags & dlpDBFlagOpen) !=0), 0); \ + hv_store(i, "flagAppInfoDirty", 16, newSViv((var.flags & dlpDBFlagAppInfoDirty) !=0), 0); \ + hv_store(i, "flagNewer", 9, newSViv((var.flags & dlpDBFlagNewer) !=0), 0); \ + hv_store(i, "flagReset", 9, newSViv((var.flags & dlpDBFlagReset) !=0), 0); \ + hv_store(i, "flagCopyPrevention", 18, newSViv((var.flags & dlpDBFlagCopyPrevention) !=0), 0); \ + hv_store(i, "flagStream", 10, newSViv((var.flags & dlpDBFlagStream) !=0), 0); \ + hv_store(i, "flagExcludeFromSync", 19, newSViv((var.miscFlags & dlpDBMiscFlagExcludeFromSync)!=0), 0); \ + hv_store(i, "type", 4, newSVChar4(var.type), 0); \ + hv_store(i, "creator", 7, newSVChar4(var.creator), 0); \ + hv_store(i, "version", 7, newSViv(var.version), 0); \ + hv_store(i, "modnum", 6, newSViv(var.modnum), 0); \ + hv_store(i, "index", 5, newSViv(var.index), 0); \ + hv_store(i, "createDate", 10, newSViv(var.createDate), 0); \ + hv_store(i, "modifyDate", 10, newSViv(var.modifyDate), 0); \ + hv_store(i, "backupDate", 10, newSViv(var.backupDate), 0); \ + hv_store(i, "name", 4, newSVpv(var.name, 0), 0); \ + arg = newRV_noinc((SV*)i);\ + }\ + } + +#define unpack_dbinfo(arg, var)\ + if (SvROK(arg) && (SvTYPE(SvRV(arg))==SVt_PVHV)) {\ + HV * i = (HV*)SvRV(arg);\ + SV ** s;\ + var.more = (s = hv_fetch(i, "more", 4, 0)) ? SvIV(*s) : 0;\ + var.flags =\ + (((s = hv_fetch(i, "flagReadOnly", 12, 0)) && SvTRUE(*s)) ? dlpDBFlagReadOnly : 0) | \ + (((s = hv_fetch(i, "flagResource", 12, 0)) && SvTRUE(*s)) ? dlpDBFlagResource : 0) | \ + (((s = hv_fetch(i, "flagBackup", 10, 0)) && SvTRUE(*s)) ? dlpDBFlagBackup : 0) | \ + (((s = hv_fetch(i, "flagOpen", 8, 0)) && SvTRUE(*s)) ? dlpDBFlagOpen : 0) | \ + (((s = hv_fetch(i, "flagAppInfoDirty", 16, 0)) && SvTRUE(*s)) ? dlpDBFlagAppInfoDirty : 0)| \ + (((s = hv_fetch(i, "flagNewer", 9, 0)) && SvTRUE(*s)) ? dlpDBFlagNewer : 0) | \ + (((s = hv_fetch(i, "flagReset", 9, 0)) && SvTRUE(*s)) ? dlpDBFlagReset : 0) | \ + (((s = hv_fetch(i, "flagCopyPrevention", 18, 0)) && SvTRUE(*s)) ? dlpDBFlagCopyPrevention : 0) |\ + (((s = hv_fetch(i, "flagStream", 10, 0)) && SvTRUE(*s)) ? dlpDBFlagStream : 0) | \ + 0;\ + var.miscFlags =\ + (((s = hv_fetch(i, "flagExcludeFromSync", 19, 0)) && SvTRUE(*s)) ? dlpDBMiscFlagExcludeFromSync : 0);\ + var.type = (s = hv_fetch(i, "type", 4, 0)) ? SvChar4(*s) : 0;\ + var.creator = (s = hv_fetch(i, "creator", 7, 0)) ? SvChar4(*s) : 0;\ + var.version = (s = hv_fetch(i, "version", 7, 0)) ? SvIV(*s) : 0;\ + var.modnum = (s = hv_fetch(i, "modnum", 6, 0)) ? SvIV(*s) : 0;\ + var.index = (s = hv_fetch(i, "index", 5, 0)) ? SvIV(*s) : 0;\ + var.createDate = (s = hv_fetch(i, "createDate", 10, 0)) ? SvIV(*s) : 0;\ + var.modifyDate = (s = hv_fetch(i, "modifyDate", 10, 0)) ? SvIV(*s) : 0;\ + var.backupDate = (s = hv_fetch(i, "backupDate", 10, 0)) ? SvIV(*s) : 0;\ + if ((s = hv_fetch(i, "name", 4, 0)) ? SvPV(*s,na) : 0) \ + strncpy(var.name, SvPV(*s, na), sizeof(var.name)); \ + } else {\ + croak("argument is not a hash reference"); \ + } + +#define pack_userinfo(arg, var, failure) { \ + if (failure < 0) { \ + arg = &sv_undef; \ + self->errnop = failure; \ + } else { \ + HV * i = newHV(); \ + hv_store(i, "userID", 6, newSViv(var.userID), 0); \ + hv_store(i, "viewerID", 8, newSViv(var.viewerID), 0); \ + hv_store(i, "lastSyncPC", 10, newSViv(var.lastSyncPC), 0); \ + hv_store(i, "successfulSyncDate", 18, newSViv(var.successfulSyncDate), 0); \ + hv_store(i, "lastSyncDate", 12, newSViv(var.lastSyncDate), 0); \ + hv_store(i, "name", 4, newSVpv(var.username,0), 0); \ + hv_store(i, "password", 8, newSVpvn(var.password,var.passwordLength), 0); \ + arg = newRV_noinc((SV*)i); \ + }\ +} + +#define unpack_userinfo(arg, var)\ + if (SvROK(arg) && (SvTYPE(SvRV(arg))==SVt_PVHV)) {\ + HV * i = (HV*)SvRV(arg);\ + SV ** s;\ + var.userID = (s = hv_fetch(i, "userID", 6, 0)) ? SvIV(*s) : 0;\ + var.viewerID = (s = hv_fetch(i, "viewerID", 8, 0)) ? SvIV(*s) : 0;\ + var.lastSyncPC = (s = hv_fetch(i, "lastSyncPC", 10, 0)) ? SvIV(*s) : 0;\ + var.lastSyncDate = (s = hv_fetch(i, "lastSyncDate", 12, 0)) ? SvIV(*s) : 0;\ + var.successfulSyncDate = (s = hv_fetch(i, "successfulSyncDate", 18, 0)) ? SvIV(*s) : 0;\ + if ((s = hv_fetch(i, "name", 4, 0)) ? SvPV(*s,na) : 0)\ + strncpy(var.username, SvPV(*s, na), sizeof(var.username));\ + } else {\ + croak("argument is not a hash reference");\ + } + +#define PackAI {\ + HV * h;\ + if (SvRV(data) && (SvTYPE(h=(HV*)SvRV(data))==SVt_PVHV)) {\ + int count; \ + PUSHMARK(sp); \ + XPUSHs(data); \ + PUTBACK; \ + count = perl_call_method("Pack", G_SCALAR);\ + SPAGAIN; \ + if (count != 1) \ + croak("Unable to pack app block");\ + data = POPs; \ + PUTBACK; \ + } else { \ + croak("Unable to pack app block");\ + } \ +} + +#define ReturnReadAI(buf,size)\ + if (result >=0) {\ + if (self->Class) {\ + int count;\ + PUSHMARK(sp);\ + XPUSHs(self->Class);\ + XPUSHs(newSVpvn((char *) buf, size)); \ + PUTBACK;\ + count = perl_call_method("appblock", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to create appblock");\ + } else {\ + croak("Class not defined");\ + }\ + } else {\ + self->errnop = result;\ + PUSHs(&sv_undef);\ + } + +#define PackSI\ + {\ + HV * h;\ + if (SvRV(data) &&\ + (SvTYPE(h=(HV*)SvRV(data))==SVt_PVHV)) {\ + int count;\ + PUSHMARK(sp);\ + XPUSHs(data);\ + PUTBACK;\ + count = perl_call_method("Pack", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to pack sort block");\ + data = POPs;\ + PUTBACK;\ + }\ + else {\ + croak("Unable to pack sort block");\ + }\ + } + +#define ReturnReadSI(buf,size)\ + if (result >=0) {\ + if (self->Class) {\ + int count;\ + PUSHMARK(sp);\ + XPUSHs(self->Class);\ + XPUSHs(newSVpvn((char *) buf, size)); \ + PUTBACK;\ + count = perl_call_method("sortblock", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to create sortblock");\ + }\ + else {\ + croak("Class not defined");\ + }\ + } else {\ + self->errnop = result;\ + PUSHs(&sv_undef);\ + } + +#define PackRecord {\ + HV * h;\ + if (SvRV(data) &&\ + (SvTYPE(h=(HV*)SvRV(data))==SVt_PVHV)) {\ + int count;\ + SV ** s;\ + if (!(s = hv_fetch(h, "id", 2, 0)) || !SvOK(*s))\ + croak("record must contain id");\ + id = SvIV(*s);\ + attr = 0;\ + if (!(s = hv_fetch(h, "secret", 6, 0)) || !SvOK(*s))\ + croak("record must contain secret");\ + attr |= SvTRUE(*s) ? dlpRecAttrSecret : 0;\ + if (!(s = hv_fetch(h, "deleted", 7, 0)) || !SvOK(*s))\ + croak("record must contain deleted");\ + attr |= SvTRUE(*s) ? dlpRecAttrDeleted : 0;\ + if (!(s = hv_fetch(h, "modified", 8, 0)) || !SvOK(*s))\ + croak("record must contain modified");\ + attr |= SvTRUE(*s) ? dlpRecAttrDirty : 0;\ + if (!(s = hv_fetch(h, "busy", 4, 0)) || !SvOK(*s))\ + croak("record must contain busy");\ + attr |= SvTRUE(*s) ? dlpRecAttrBusy : 0;\ + if (!(s = hv_fetch(h, "archived", 8, 0)) || !SvOK(*s))\ + croak("record must contain archived");\ + attr |= SvTRUE(*s) ? dlpRecAttrArchived : 0;\ + if (!(s = hv_fetch(h, "category", 8, 0)) || !SvOK(*s))\ + croak("record must contain category");\ + category = SvIV(*s);\ + PUSHMARK(sp);\ + XPUSHs(data);\ + PUTBACK;\ + count = perl_call_method("Pack", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to pack record");\ + data = POPs;\ + PUTBACK;\ + } else {\ + croak("Unable to pack record");\ + }\ +} + +#define PackRaw {\ + HV * h;\ + if (SvRV(data) &&\ + (SvTYPE(h=(HV*)SvRV(data))==SVt_PVHV)) {\ + int count;\ + PUSHMARK(sp);\ + XPUSHs(data);\ + PUTBACK;\ + count = perl_call_method("Raw", G_SCALAR);\ + SPAGAIN;\ + if (count != 1) {\ + SV ** s = hv_fetch(h, "raw", 3, 0);\ + if (s)\ + data = *s;\ + } else {\ + data = POPs;\ + PUTBACK;\ + }\ + }\ +} + +#define ReturnReadRecord(buf,size)\ + if (result >=0) {\ + if (self->Class) {\ + int count;\ + SV * ret;\ + PUSHMARK(sp);\ + XPUSHs(self->Class);\ + XPUSHs(newSVpvn((char *) buf, size)); \ + XPUSHs(sv_2mortal(newSViv(id)));\ + XPUSHs(sv_2mortal(newSViv(attr)));\ + XPUSHs(sv_2mortal(newSViv(category)));\ + XPUSHs(sv_2mortal(newSViv(index)));\ + PUTBACK;\ + count = perl_call_method("record", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to create record");\ + ret = POPs;\ + PUTBACK;\ + PUSHs(ret);\ + }\ + else {\ + croak("Class not defined");\ + }\ + } else {\ + self->errnop = result;\ + PUSHs(&sv_undef);\ + } + +#define PackResource\ + {\ + HV * h;\ + if (SvRV(data) &&\ + (SvTYPE(h=(HV*)SvRV(data))==SVt_PVHV)) {\ + int count;\ + SV ** s;\ + if (!(s = hv_fetch(h, "id", 2, 0)) || !SvOK(*s))\ + croak("record must contain id");\ + id = SvIV(*s);\ + if (!(s = hv_fetch(h, "type", 4, 0)) || !SvOK(*s))\ + croak("record must contain type");\ + type = SvChar4(*s);\ + PUSHMARK(sp);\ + XPUSHs(data);\ + PUTBACK;\ + count = perl_call_method("Pack", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to pack resource");\ + data = POPs;\ + PUTBACK;\ + }\ + else {\ + croak("Unable to pack resource");\ + }\ + } + +#define ReturnReadResource(buf,size)\ + if (result >=0) {\ + if (self->Class) {\ + int count;\ + PUSHMARK(sp);\ + XPUSHs(self->Class);\ + XPUSHs(newSVpvn((char *) buf, size)); \ + XPUSHs(sv_2mortal(newSVChar4(type)));\ + XPUSHs(sv_2mortal(newSViv(id)));\ + XPUSHs(sv_2mortal(newSViv(index)));\ + PUTBACK;\ + count = perl_call_method("resource", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to create resource");\ + }\ + else {\ + croak("Class not defined");\ + }\ + } else {\ + self->errnop = result;\ + PUSHs(&sv_undef);\ + } + +#define PackPref\ + {\ + HV * h;\ + if (SvRV(data) &&\ + (SvTYPE(h=(HV*)SvRV(data))==SVt_PVHV)) {\ + int count;\ + SV ** s;\ + if (!(s = hv_fetch(h, "id", 2, 0)) || !SvOK(*s))\ + croak("record must contain id");\ + id = SvIV(*s);\ + if (!(s = hv_fetch(h, "creator", 7, 0)) || !SvOK(*s))\ + croak("record must contain type");\ + creator = SvChar4(*s);\ + if (!(s = hv_fetch(h, "version", 7, 0)) || !SvOK(*s))\ + croak("record must contain type");\ + version = SvIV(*s);\ + if (!(s = hv_fetch(h, "backup", 6, 0)) || !SvOK(*s))\ + croak("record must contain type");\ + backup = SvIV(*s);\ + PUSHMARK(sp);\ + XPUSHs(data);\ + PUTBACK;\ + count = perl_call_method("Pack", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to pack resource");\ + data = POPs;\ + PUTBACK;\ + }\ + else {\ + croak("Unable to pack resource");\ + }\ + } + +#define ReturnReadPref(buf,size)\ + if (result >=0) {\ + HV * h = perl_get_hv("PDA::Pilot::PrefClasses", 0);\ + SV ** s;\ + int count;\ + if (!h)\ + croak("PrefClasses doesn't exist");\ + s = hv_fetch(h, printlong(creator), 4, 0);\ + if (!s)\ + s = hv_fetch(h, "", 0, 0);\ + if (!s)\ + croak("Default PrefClass not defined");\ + PUSHMARK(sp);\ + XPUSHs(newSVsv(*s));\ + XPUSHs(newSVpvn((char *) buf, size)); \ + XPUSHs(sv_2mortal(newSVChar4(creator)));\ + XPUSHs(sv_2mortal(newSViv(id)));\ + XPUSHs(sv_2mortal(newSViv(version)));\ + XPUSHs(sv_2mortal(newSViv(backup)));\ + PUTBACK;\ + count = perl_call_method("pref", G_SCALAR);\ + SPAGAIN;\ + if (count != 1)\ + croak("Unable to create resource");\ + } else {\ + self->errnop = result;\ + PUSHs(&sv_undef);\ + } + +void doUnpackCategory(HV * self, struct CategoryAppInfo * c) +{ + AV * e = newAV(); + int i; + + hv_store(self, "categoryRenamed", 15, newRV_noinc((SV*)e), 0); + + for (i=0;i<16;i++) { + av_push(e, newSViv(c->renamed[i])); + } + + e = newAV(); + hv_store(self, "categoryName", 12, newRV_noinc((SV*)e), 0); + + for (i=0;i<16;i++) { + av_push(e, newSVpv(c->name[i], 0)); + } + + e = newAV(); + hv_store(self, "categoryID", 10, newRV_noinc((SV*)e), 0); + + for (i=0;i<16;i++) { + av_push(e, newSViv(c->ID[i])); + } + + hv_store(self, "categoryLastUniqueID", 20, newSViv(c->lastUniqueID), 0); +} + + +void doPackCategory(HV * self, struct CategoryAppInfo * c) +{ + SV ** s; + AV * av; + int i; + + if ((s = hv_fetch(self, "categoryName", 12, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) + for (i=0;i<16;i++) + strncpy(c->name[i], (s=av_fetch(av, i, 0)) ? SvPV(*s,na) : "", 16); + else + for (i=0;i<16;i++) + strcpy(c->name[i], ""); + + for (i=0;i<16;i++) + c->name[i][15] = '\0'; + + if ((s = hv_fetch(self, "categoryID", 10, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) + for (i=0;i<16;i++) + c->ID[i] = (s=av_fetch(av, i, 0)) ? SvIV(*s) : 0; + else + for (i=0;i<16;i++) + c->ID[i] = 0; + + if ((s = hv_fetch(self, "categoryRenamed", 10, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) + for (i=0;i<16;i++) + c->renamed[i] = (s=av_fetch(av, i, 0)) ? SvIV(*s) : 0; + else + for (i=0;i<16;i++) + c->renamed[i] = 0; +} + +int SvList(SV * arg, char **list) +{ + int i; + char * str = SvPV(arg, na); + for (i=0;list[i];i++) + if (strcasecmp(list[i], str)==0) + return i; + if (SvPOKp(arg)) { + croak("Invalid value"); + } + return SvIV(arg); +} + +SV * newSVlist(int value, char **list) +{ + int i; + for (i=0;list[i];i++) + ; + if (value < i) + return newSVpv(list[value], 0); + else + return newSViv(value); +} + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot + +INCLUDE: const-xs.inc + + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot::Appointment + +SV * +Unpack(record) + SV * record + CODE: + { + STRLEN len; + int i; + AV * e; + HV * ret, *h; + struct Appointment a; + char *str; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + if (!SvPOK(record)) { + croak("Not a string!?"); + } + str = SvPV(record,len); + if (len > 0) { /* len == 0 when the record has the deleted flag set */ + pi_buffer_clear(&pibuf); + if (!pi_buffer_append(&pibuf, str, len)) { + croak("Unable to reallocate buffer"); + } + if (unpack_Appointment(&a, &pibuf, datebook_v1) < 0) { + croak("unpack_Appointment failed"); + } + + hv_store(ret, "event", 5, newSViv(a.event), 0); + hv_store(ret, "begin", 5, newRV_noinc((SV*)tmtoav(&a.begin)), 0); + + if (!a.event) { + hv_store(ret, "end", 3, newRV_noinc((SV*)tmtoav(&a.end)), 0); + } + + if (a.alarm) { + HV * alarm = newHV(); + hv_store(ret, "alarm", 5, newRV_noinc((SV*)alarm), 0); + + hv_store(alarm, "advance", 7, newSViv(a.advance), 0); + hv_store(alarm, "units", 5, newSVpv(( + (a.advanceUnits == 0) ? "minutes" : /* Minutes */ + (a.advanceUnits == 1) ? "hours" : /* Hours */ + (a.advanceUnits == 2) ? "days" : /* Days */ + 0), 0), 0); + if (a.advanceUnits > 2) { + warn("Invalid advance unit %d encountered", a.advanceUnits); + } + } + if (a.repeatType) { + HV * repeat = newHV(); + hv_store(ret, "repeat", 6, newRV_noinc((SV*)repeat), 0); + + hv_store(repeat, "type", 4, newSVpv(DatebookRepeatTypeNames[a.repeatType],0), 0); + hv_store(repeat, "frequency", 9, newSViv(a.repeatFrequency), 0); + if (a.repeatType == repeatMonthlyByDay) + hv_store(repeat, "day", 3, newSViv(a.repeatDay), 0); + else if (a.repeatType == repeatWeekly) { + e = newAV(); + hv_store(repeat, "days", 4, newRV_noinc((SV*)e), 0); + for (i=0;i<7;i++) + av_push(e,newSViv(a.repeatDays[i])); + } + hv_store(repeat, "weekstart", 9, newSViv(a.repeatWeekstart), 0); + if (!a.repeatForever) + hv_store(repeat, "end", 3, newRV_noinc((SV*)tmtoav(&a.repeatEnd)),0); + } + + if (a.exceptions) { + e = newAV(); + hv_store(ret, "exceptions", 10, newRV_noinc((SV*)e), 0); + for (i=0;i 254) + warn("Alarm advance value %d out of range", a.advance); + a.alarm = 1; + } else { + a.alarm = 0; + a.advance = 0; + a.advanceUnits = 0; + } + + + if ((s = hv_fetch(h, "repeat", 6, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(SvRV(*s))==SVt_PVHV)) { + HV * h2 = (HV*)SvRV(*s); + int i; + a.repeatType = (s = hv_fetch(h2, "type", 4, 0)) ? SvList(*s, DatebookRepeatTypeNames) : 0; + a.repeatFrequency = (s = hv_fetch(h2, "frequency", 9, 0)) ? SvIV(*s) : 0; + a.repeatDay = 0; + for(i=0;i<7;i++) + a.repeatDays[i] = 0; + if (a.repeatType == repeatMonthlyByDay ) { + a.repeatDay = (s = hv_fetch(h2, "day", 3, 0)) ? SvIV(*s) : 0; + } else if (a.repeatType == repeatWeekly) { + if ((s = hv_fetch(h2, "days", 4, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(SvRV(*s))==SVt_PVAV)) { + int i; + AV * a2 = (AV*)SvRV(*s); + for (i=0;i<7;i++) + if ((s = av_fetch(a2, i, 0))) + a.repeatDays[i] = SvIV(*s); + } + } + a.repeatWeekstart = (s = hv_fetch(h2, "weekstart", 9, 0)) ? SvIV(*s) : 0; + if ((s = hv_fetch(h2, "end", 3, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(SvRV(*s))==SVt_PVAV)) { + avtotm((AV*)SvRV(*s), &a.repeatEnd); + a.repeatForever = 0; + } else { + a.repeatForever = 1; + } + } else { + a.repeatType = 0; + a.repeatForever = 0; + a.repeatFrequency = 0; + a.repeatDay = 0; + a.repeatWeekstart = 0; + memset(&a.repeatEnd,'\0', sizeof(struct tm)); + } + + a.exceptions = 0; + a.exception = 0; + if ((s = hv_fetch(h, "exceptions", 10, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(SvRV(*s))==SVt_PVAV)) { + int i; + AV * a2 = (AV*)SvRV(*s); + if (av_len(a2)>-1) { + a.exceptions = av_len(a2)+1; + a.exception = malloc(sizeof(struct tm)*a.exceptions); + for (i=0;i0) { + + doUnpackCategory(ret, &a.category); + + hv_store(ret, "startOfWeek", 11, newSViv(a.startOfWeek), 0); + } + + } + OUTPUT: + RETVAL + +SV * +PackAppBlock(record) + SV * record + CODE: + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct AppointmentAppInfo a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + doPackCategory(h, &a.category); + + if ((s = hv_fetch(h, "startOfWeek", 11, 0))) + a.startOfWeek = SvIV(*s); + else + a.startOfWeek = 0; + + len = pack_AppointmentAppInfo(&a, (unsigned char *) mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot::ToDo + +SV * +Unpack(record) + SV * record + CODE: + { + STRLEN len; + int i; + AV * e; + HV * ret; + struct ToDo a; + char *str; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + str = SvPV(record,len); + if (len > 0) { /* len == 0 if deleted flag is set */ + pi_buffer_clear(&pibuf); + if (!pi_buffer_append(&pibuf, str, len)) { + croak("Unable to reallocate buffer"); + } + if (unpack_ToDo(&a, &pibuf, todo_v1) < 0) { + croak("unpack_ToDo failed"); + } + + if (!a.indefinite) + hv_store(ret, "due", 3, newRV_noinc((SV*)tmtoav(&a.due)), 0); + hv_store(ret, "priority", 8, newSViv(a.priority), 0); + hv_store(ret, "complete", 8, newSViv(a.complete), 0); + if (a.description) + hv_store(ret, "description", 11, newSVpv((char*)a.description,0), 0); + if (a.note) + hv_store(ret, "note", 4, newSVpv((char*)a.note,0), 0); + + free_ToDo(&a); + } + } + OUTPUT: + RETVAL + +SV * +Pack(record) + SV * record + CODE: + { + SV ** s; + HV * h; + struct ToDo a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else if ((s=hv_fetch(h, "deleted", 7, 0)) && SvOK(*s) && SvTRUE(*s) && + (s=hv_fetch(h, "archived", 8, 0)) && SvOK(*s) && !SvTRUE(*s)) { + RETVAL = newSVpv("",0); + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + else { + + a.priority = (s = hv_fetch(h, "priority", 8, 0)) ? SvIV(*s) : 0; + a.complete = (s = hv_fetch(h, "complete", 8, 0)) ? SvIV(*s) : 0; + if ((s = hv_fetch(h, "due", 3, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(SvRV(*s))==SVt_PVAV)) { + avtotm((AV*)SvRV(*s), &a.due); + a.indefinite = 0; + } + else { + memset(&a.due,'\0', sizeof(struct tm)); + a.indefinite = 1; + } + + a.description = (s = hv_fetch(h, "description", 11, 0)) ? SvPV(*s,na) : 0; + a.note = (s = hv_fetch(h, "note", 4, 0)) ? SvPV(*s,na) : 0; + + if (pack_ToDo(&a, &pibuf, todo_v1) < 0) { + croak("pack_ToDo failed"); + } + + RETVAL = newSVpvn((char *) pibuf.data, pibuf.used); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + + +SV * +UnpackAppBlock(record) + SV * record + CODE: + { + STRLEN len; + AV * e; + HV * ret; + int i; + struct ToDoAppInfo a; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (unpack_ToDoAppInfo(&a, (CPTR)SvPV(record, na), len)>0) { + + doUnpackCategory(ret, &a.category); + + hv_store(ret, "dirty", 5, newSViv(a.dirty), 0); + + hv_store(ret, "sortByPriority", 14, newSViv(a.sortByPriority), 0); + } + } + OUTPUT: + RETVAL + +SV * +PackAppBlock(record) + SV * record + CODE: + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct ToDoAppInfo a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + doUnpackCategory(h, &a.category); + + + doPackCategory(h, &a.category); + + a.dirty = (s = hv_fetch(h, "dirty", 5, 0)) ? SvIV(*s) : 0; + a.sortByPriority = (s = hv_fetch(h, "sortByPriority", 14, 0)) ? SvIV(*s) : 0; + + len = pack_ToDoAppInfo(&a, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot::Address + +SV * +Unpack(record) + SV * record + CODE: + { + STRLEN len; + int i; + AV * e; + HV * ret; + struct Address a; + char *str; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + str = SvPV(record,len); + if (len > 0) { /* len == 0 when deleted flag is set */ + pi_buffer_clear(&pibuf); + if (!pi_buffer_append(&pibuf, str, len)) { + croak("Unable to reallocate buffer"); + } + if (unpack_Address(&a, &pibuf, address_v1) < 0) { + croak("unpack_Address failed"); + } + + e = newAV(); + hv_store(ret, "phoneLabel", 10, newRV_noinc((SV*)e), 0); + + for (i=0;i<5;i++) { + av_push(e, newSViv(a.phoneLabel[i])); + } + + e = newAV(); + hv_store(ret, "entry", 5, newRV_noinc((SV*)e), 0); + + for (i=0;i<19;i++) { + av_push(e, a.entry[i] ? newSVpv(a.entry[i],0) : &sv_undef); + } + + hv_store(ret, "showPhone", 9, newSViv(a.showPhone), 0); + + free_Address(&a); + } + } + OUTPUT: + RETVAL + +SV * +Pack(record) + SV * record + CODE: + { + SV ** s; + HV * h; + AV * av; + int i; + struct Address a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else if ((s=hv_fetch(h, "deleted", 7, 0)) && SvOK(*s) && SvTRUE(*s) && + (s=hv_fetch(h, "archived", 8, 0)) && SvOK(*s) && !SvTRUE(*s)) { + RETVAL = newSVpv("",0); + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + else { + + if ((s = hv_fetch(h, "phoneLabel", 10, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) + for (i=0;i<5;i++) + a.phoneLabel[i] = ((s=av_fetch(av, i, 0)) && SvOK(*s)) ? SvIV(*s) : 0; + else + for (i=0;i<5;i++) + a.phoneLabel[i] = 0; + + if ((s = hv_fetch(h, "entry", 5, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) + for (i=0;i<19;i++) + a.entry[i] = ((s=av_fetch(av, i, 0)) && SvOK(*s)) ? SvPV(*s,na) : 0; + else + for (i=0;i<19;i++) + a.entry[i] = 0; + + if ((s = hv_fetch(h, "showPhone", 9, 0))) + a.showPhone = SvIV(*s); + else + a.showPhone = 0; + + if (pack_Address(&a, &pibuf, address_v1) < 0) { + croak("pack_Address failed"); + } + + RETVAL = newSVpvn((char *) pibuf.data, pibuf.used); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + + +SV * +UnpackAppBlock(record) + SV * record + CODE: + { + STRLEN len; + AV * e; + HV * ret; + int i; + struct AddressAppInfo a; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (unpack_AddressAppInfo(&a, (CPTR)SvPV(record, na), len)>0) { + + doUnpackCategory(ret, &a.category); + + e = newAV(); + hv_store(ret, "labelRenamed", 12, newRV_noinc((SV*)e), 0); + + for (i=0;i<22;i++) { + av_push(e, newSViv(a.labelRenamed[i])); + } + + hv_store(ret, "country", 7, newSViv(a.country), 0); + hv_store(ret, "sortByCompany", 13, newSViv(a.sortByCompany), 0); + + e = newAV(); + hv_store(ret, "label", 5, newRV_noinc((SV*)e), 0); + + for (i=0;i<22;i++) { + av_push(e, newSVpv(a.labels[i],0)); + } + + e = newAV(); + hv_store(ret, "phoneLabel", 10, newRV_noinc((SV*)e), 0); + + for (i=0;i<8;i++) { + av_push(e, newSVpv(a.phoneLabels[i],0)); + } + + } + } + OUTPUT: + RETVAL + +SV * +PackAppBlock(record) + SV * record + CODE: + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct AddressAppInfo a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + doPackCategory(h, &a.category); + + if ((s = hv_fetch(h, "labelRenamed", 12, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) + for (i=0;i<22;i++) a.labelRenamed[i] = (s=av_fetch(av, i, 0)) ? SvIV(*s) : 0; + else + for (i=0;i<22;i++) a.labelRenamed[i] = 0; + + a.country = (s = hv_fetch(h, "country", 7, 0)) ? SvIV(*s) : 0; + a.sortByCompany = (s = hv_fetch(h, "sortByCompany", 13, 0)) ? SvIV(*s) : 0; + + if ((s = hv_fetch(h, "label", 5, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) + for (i=0;i<22;i++) strncpy(a.labels[i], (s=av_fetch(av, i, 0)) ? SvPV(*s,na) : "", 16); + else + for (i=0;i<22;i++) a.labels[i][0] = 0; + for (i=0;i<22;i++) a.labels[i][15] = 0; + + if ((s = hv_fetch(h, "phoneLabel", 10, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) + for (i=0;i<8;i++) strncpy(a.phoneLabels[i], (s=av_fetch(av, i, 0)) ? SvPV(*s,na) : "", 16); + else + for (i=0;i<8;i++) a.phoneLabels[i][0] = 0; + for (i=0;i<8;i++) a.phoneLabels[i][15] = 0; + + len = pack_AddressAppInfo(&a, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot::Memo + +SV * +Unpack(record) + SV * record + CODE: + { + STRLEN len; + int i; + AV * e; + HV * ret; + struct Memo a; + char *str; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + str = SvPV(record,len); + if (len > 0) { /* len == 0 if deleted flag is set */ + pi_buffer_clear(&pibuf); + if (!pi_buffer_append(&pibuf, str, len)) { + croak("Unable to reallocate buffer"); + } + if (unpack_Memo(&a, &pibuf, memo_v1) < 0) { + croak("unpack_Memo failed"); + } + + + hv_store(ret, "text", 4, newSVpv(a.text,0), 0); + + free_Memo(&a); + } + } + OUTPUT: + RETVAL + +SV * +Pack(record) + SV * record + CODE: + { + SV ** s; + HV * h; + struct Memo a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else if ((s=hv_fetch(h, "deleted", 7, 0)) && SvOK(*s) && SvTRUE(*s) && + (s=hv_fetch(h, "archived", 8, 0)) && SvOK(*s) && !SvTRUE(*s)) { + RETVAL = newSVpv("",0); + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + else { + + if ((s = hv_fetch(h, "text", 4, 0))) + a.text = SvPV(*s,na); + else + a.text = 0; + + if (pack_Memo(&a, &pibuf, memo_v1) < 0) { + croak("pack_Memo failed"); + } + + RETVAL = newSVpvn((char *) pibuf.data, pibuf.used); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + +SV * +UnpackAppBlock(record) + SV * record + CODE: + { + STRLEN len; + AV * e; + HV * ret; + int i; + struct MemoAppInfo a; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (unpack_MemoAppInfo(&a, (CPTR)SvPV(record, na), len)>0) { + + doUnpackCategory(ret, &a.category); + + hv_store(ret, "sortByAlpha", 11, newSViv(a.sortByAlpha), 0); + } + } + OUTPUT: + RETVAL + +SV * +PackAppBlock(record) + SV * record + CODE: + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct MemoAppInfo a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + doPackCategory(h, &a.category); + + + if ((s = hv_fetch(h, "sortByAlpha", 11, 0))) + a.sortByAlpha = SvIV(*s); + else + a.sortByAlpha = 0; + + len = pack_MemoAppInfo(&a, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot::Expense + +SV * +Unpack(record) + SV * record + CODE: + { + STRLEN len; + int i; + HV * ret; + struct Expense e; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (len > 0) { /* len == 0 if deleted flag is set */ + if (unpack_Expense(&e, (CPTR)SvPV(record, na), len)>0) { + + hv_store(ret, "date", 4, newRV_noinc((SV*)tmtoav(&e.date)), 0); + hv_store(ret, "type", 4, newSVlist(e.type,ExpenseTypeNames),0); + hv_store(ret, "payment", 7, newSVlist(e.payment,ExpensePaymentNames),0); + hv_store(ret, "currency", 8, newSViv(e.currency),0); + if (e.amount) + hv_store(ret, "amount", 6, newSVpv(e.amount,0), 0); + if (e.vendor) + hv_store(ret, "vendor", 6, newSVpv(e.vendor,0), 0); + if (e.city) + hv_store(ret, "city", 4, newSVpv(e.city,0), 0); + if (e.note) + hv_store(ret, "note", 4, newSVpv(e.note,0), 0); + if (e.attendees) + hv_store(ret, "attendees", 9, newSVpv(e.attendees,0), 0); + + free_Expense(&e); + } + } + } + OUTPUT: + RETVAL + +SV * +Pack(record) + SV * record + CODE: + { + STRLEN len; + SV ** s; + HV * h; + struct Expense e; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else if ((s=hv_fetch(h, "deleted", 7, 0)) && SvOK(*s) && SvTRUE(*s) && + (s=hv_fetch(h, "archived", 8, 0)) && SvOK(*s) && !SvTRUE(*s)) { + RETVAL = newSVpv("",0); + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + else { + + if ((s = hv_fetch(h, "type", 4, 0))) + e.type = SvList(*s,ExpenseTypeNames); + else + croak("must have type"); + if ((s = hv_fetch(h, "payment", 7, 0))) + e.payment = SvList(*s,ExpensePaymentNames); + else + croak("must have payment"); + if ((s = hv_fetch(h, "currency", 8, 0))) + e.currency = SvIV(*s); + else + croak("must have currency"); + + if ((s = hv_fetch(h, "date", 4, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(SvRV(*s))==SVt_PVAV)) + avtotm((AV*)SvRV(*s), &e.date); + else + croak("expense record must contain date"); + if ((s = hv_fetch(h, "amount", 6, 0))) e.amount = SvPV(*s,na); + else e.amount = 0; + if ((s = hv_fetch(h, "vendor", 6, 0))) e.vendor = SvPV(*s,na); + else e.vendor = 0; + if ((s = hv_fetch(h, "city", 4, 0))) e.city = SvPV(*s,na); + else e.city = 0; + if ((s = hv_fetch(h, "attendess", 9, 0))) e.attendees = SvPV(*s,na); + else e.attendees = 0; + if ((s = hv_fetch(h, "note", 4, 0))) e.note = SvPV(*s,na); + else e.note = 0; + + len = pack_Expense(&e, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + + + } + } + OUTPUT: + RETVAL + +SV * +UnpackAppBlock(record) + SV * record + CODE: + { + STRLEN len; + HV * ret; + AV * a; + int i; + struct ExpenseAppInfo e; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (unpack_ExpenseAppInfo(&e, (CPTR)SvPV(record, na), len)>0) { + + hv_store(ret, "sortOrder", 9, newSVlist(e.sortOrder,ExpenseSortNames),0); + a = newAV(); + hv_store(ret, "currencies", 10, newRV_noinc((SV*)a), 0); + for (i=0;i<4;i++) { + HV * h = newHV(); + hv_store(h, "name", 4, newSVpv(e.currencies[i].name, 0), 0); + hv_store(h, "symbol", 6, newSVpv(e.currencies[i].symbol, 0), 0); + hv_store(h, "rate", 4, newSVpv(e.currencies[i].rate, 0), 0); + av_store(a, i, (SV*)newRV_noinc((SV*)h)); + } + + doUnpackCategory(ret, &e.category); + } + } + OUTPUT: + RETVAL + +SV * +PackAppBlock(record) + SV * record + CODE: + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct ExpenseAppInfo e; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + doPackCategory(h, &e.category); + + e.sortOrder = (s = hv_fetch(h, "sortOrder", 9, 0)) ? SvList(*s, ExpenseSortNames) : 0; + if ((s=hv_fetch(h, "currencies", 10, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) { + for(i=0;i<4;i++) { + HV * hv; + if ((s=av_fetch(av, i, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(hv=(HV*)SvRV(*s))==SVt_PVHV)) { + if (s = hv_fetch(hv, "name", 4, 0)) { + strncpy(e.currencies[i].name, SvPV(*s, na), 16); + e.currencies[i].name[15] = 0; + } + if (s = hv_fetch(hv, "symbol", 6, 0)) { + strncpy(e.currencies[i].symbol, SvPV(*s, na), 4); + e.currencies[i].symbol[3] = 0; + } + if (s = hv_fetch(hv, "rate", 4, 0)) { + strncpy(e.currencies[i].rate, SvPV(*s, na), 8); + e.currencies[i].rate[7] = 0; + } + } + } + } else + for(i=0;i<4;i++) { + e.currencies[i].symbol[0] = 0; + e.currencies[i].name[0] = 0; + e.currencies[i].rate[0] = 0; + } + + len = pack_ExpenseAppInfo(&e, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + +SV * +UnpackPref(record) + SV * record + CODE: + { + STRLEN len; + AV * e; + HV * ret; + int i; + struct ExpensePref a; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (unpack_ExpensePref(&a, (CPTR)SvPV(record, na), len)>0) { + + hv_store(ret, "unitOfDistance", 14, newSVlist(a.unitOfDistance, ExpenseDistanceNames), 0); + hv_store(ret, "currentCategory", 15, newSViv(a.currentCategory), 0); + hv_store(ret, "defaultCurrency", 15, newSViv(a.defaultCurrency), 0); + hv_store(ret, "attendeeFont", 8, newSViv(a.attendeeFont), 0); + hv_store(ret, "showAllCategories", 17, newSViv(a.showAllCategories), 0); + hv_store(ret, "showCurrency", 12, newSViv(a.showCurrency), 0); + hv_store(ret, "saveBackup", 10, newSViv(a.saveBackup), 0); + hv_store(ret, "allowQuickFill", 14, newSViv(a.allowQuickFill), 0); + e = newAV(); + for (i=0;i<5;i++) + av_store(e, i, newSViv(a.currencies[i])); + hv_store(ret, "currencies", 10, (SV*)newRV_noinc((SV*)e), 0); + hv_store(ret, "noteFont", 8, newSViv(a.noteFont), 0); + } + } + OUTPUT: + RETVAL + +SV * +PackPref(record, id) + SV * record + int id + CODE: + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct ExpensePref a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + a.unitOfDistance = (s = hv_fetch(h, "unitOfDistance", 14, 0)) ? SvList(*s, ExpenseDistanceNames) : 0; + a.currentCategory = (s=hv_fetch(h,"currentCategory",15,0)) ? SvIV(*s) : 0; + a.defaultCurrency = (s=hv_fetch(h,"defaultCurrency",15,0)) ? SvIV(*s) : 0; + a.attendeeFont = (s=hv_fetch(h,"attendeeFont",8,0)) ? SvIV(*s) : 0; + a.showAllCategories = (s=hv_fetch(h,"showAllCategories",17,0)) ? SvIV(*s) : 0; + a.showCurrency = (s=hv_fetch(h,"showCurrency",12,0)) ? SvIV(*s) : 0; + a.saveBackup = (s=hv_fetch(h,"saveBackup",10,0)) ? SvIV(*s) : 0; + a.allowQuickFill = (s=hv_fetch(h,"allowQuickFill",14,0)) ? SvIV(*s) : 0; + + if ((s=hv_fetch(h, "currencies", 10, 0)) && SvOK(*s) && SvRV(*s) && (SvTYPE(av=(AV*)SvRV(*s))==SVt_PVAV)) { + for(i=0;i<5;i++) + a.currencies[i] = (s=av_fetch(av, i, 0)) ? SvIV(*s) : 0; + } else + for(i=0;i<5;i++) + a.currencies[i] = 0; + a.noteFont = (s=hv_fetch(h,"noteFont",8,0)) ? SvIV(*s) : 0; + + len = pack_ExpensePref(&a, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot::Mail + +SV * +Unpack(record) + SV * record + CODE: + { + STRLEN len; + int i; + AV * e; + HV * ret; + struct Mail a; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (len > 0) { /* len == 0 if deleted flag is set */ + if (unpack_Mail(&a, (CPTR)SvPV(record, na), len)>0) { + + if (a.subject) hv_store(ret, "subject", 7, newSVpv(a.subject,0), 0); + if (a.from) hv_store(ret, "from", 4, newSVpv(a.from,0), 0); + if (a.to) hv_store(ret, "to", 2, newSVpv(a.to,0), 0); + if (a.cc) hv_store(ret, "cc", 2, newSVpv(a.cc,0), 0); + if (a.bcc) hv_store(ret, "bcc", 3, newSVpv(a.bcc,0), 0); + if (a.replyTo) hv_store(ret, "replyTo", 7, newSVpv(a.replyTo,0), 0); + if (a.sentTo) hv_store(ret, "sentTo", 6, newSVpv(a.sentTo,0), 0); + if (a.body) hv_store(ret, "body", 4, newSVpv(a.body,0), 0); + + hv_store(ret, "read", 4, newSViv(a.read), 0); + hv_store(ret, "signature", 9, newSViv(a.signature), 0); + hv_store(ret, "confirmRead", 11, newSViv(a.confirmRead), 0); + hv_store(ret, "confirmDelivery", 15, newSViv(a.confirmDelivery), 0); + hv_store(ret, "priority", 8, newSViv(a.priority), 0); + hv_store(ret, "addressing", 10, newSViv(a.addressing), 0); + + if (a.dated) + hv_store(ret, "date", 4, newRV_noinc((SV*)tmtoav(&a.date)), 0); + + free_Mail(&a); + } + } + } + OUTPUT: + RETVAL + +SV * +Pack(record) + SV * record + CODE: + { + STRLEN len; + SV ** s; + HV * h; + struct Mail a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else if ((s=hv_fetch(h, "deleted", 7, 0)) && SvOK(*s) && SvTRUE(*s) && + (s=hv_fetch(h, "archived", 8, 0)) && SvOK(*s) && !SvTRUE(*s)) { + RETVAL = newSVpv("",0); + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + else { + + a.subject = (s = hv_fetch(h, "subject", 7, 0)) ? SvPV(*s,na) : 0; + a.from = (s = hv_fetch(h, "from", 4, 0)) ? SvPV(*s,na) : 0; + a.to = (s = hv_fetch(h, "to", 2, 0)) ? SvPV(*s,na) : 0; + a.cc = (s = hv_fetch(h, "cc", 2, 0)) ? SvPV(*s,na) : 0; + a.bcc = (s = hv_fetch(h, "bcc", 3, 0)) ? SvPV(*s,na) : 0; + a.replyTo = (s = hv_fetch(h, "replyTo", 7, 0)) ? SvPV(*s,na) : 0; + a.sentTo = (s = hv_fetch(h, "sentTo", 6, 0)) ? SvPV(*s,na) : 0; + a.body = (s = hv_fetch(h, "body", 4, 0)) ? SvPV(*s,na) : 0; + + a.read = (s = hv_fetch(h, "read", 4, 0)) ? SvIV(*s) : 0; + a.signature = (s = hv_fetch(h, "signature", 9, 0)) ? SvIV(*s) : 0; + a.confirmRead = (s = hv_fetch(h, "confirmRead", 11, 0)) ? SvIV(*s) : 0; + a.confirmDelivery = (s = hv_fetch(h, "confirmDelivery", 15, 0)) ? SvIV(*s) : 0; + a.priority = (s = hv_fetch(h, "priority", 8, 0)) ? SvIV(*s) : 0; + a.addressing = (s = hv_fetch(h, "addressing", 10, 0)) ? SvIV(*s) : 0; + + a.dated = (s = hv_fetch(h, "date", 4, 0)) ? 1 : 0; + if (s && SvOK(*s) && SvRV(*s) && (SvTYPE(SvRV(*s))==SVt_PVAV)) avtotm((AV*)SvRV(*s), &a.date); + + len = pack_Mail(&a, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + +SV * +UnpackAppBlock(record) + SV * record + CODE: + { + STRLEN len; + AV * e; + HV * ret; + int i; + struct MailAppInfo a; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (unpack_MailAppInfo(&a, (CPTR)SvPV(record, na), len)>0) { + + doUnpackCategory(ret, &a.category); + + hv_store(ret, "sortOrder", 9, newSVlist(a.sortOrder, MailSortTypeNames), 0); + + hv_store(ret, "dirty", 5, newSViv(a.dirty), 0); + hv_store(ret, "unsentMessage", 13, newSViv(a.unsentMessage), 0); + } + } + OUTPUT: + RETVAL + +SV * +PackAppBlock(record) + SV * record + CODE: + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct MailAppInfo a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + + doPackCategory(h, &a.category); + + if ((s = hv_fetch(h, "sortOrder", 9, 0))) + a.sortOrder = SvList(*s, MailSortTypeNames); + else + a.sortOrder = 0; + + a.dirty = (s=hv_fetch(h,"dirty",5,0)) ? SvIV(*s) : 0; + a.unsentMessage = (s=hv_fetch(h,"unsentMessage",13,0)) ? SvIV(*s) : 0; + + len = pack_MailAppInfo(&a, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + +SV * +UnpackSyncPref(record) + SV * record + CODE: + { + STRLEN len; + AV * e; + HV * ret; + int i; + struct MailSyncPref a; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (unpack_MailSyncPref(&a, (CPTR)SvPV(record, na), len)>0) { + + hv_store(ret, "syncType", 8, newSVlist(a.syncType, MailSyncTypeNames), 0); + hv_store(ret, "getHigh", 7, newSViv(a.getHigh), 0); + hv_store(ret, "getContaining", 13, newSViv(a.getContaining), 0); + hv_store(ret, "truncate", 8, newSViv(a.truncate), 0); + + if (a.filterTo) + hv_store(ret, "filterTo", 8, newSVpv(a.filterTo, 0), 0); + if (a.filterFrom) + hv_store(ret, "filterFrom", 10, newSVpv(a.filterFrom, 0), 0); + if (a.filterSubject) + hv_store(ret, "filterSubject", 13, newSVpv(a.filterSubject, 0), 0); + } + } + OUTPUT: + RETVAL + +SV * +PackSyncPref(record, id) + SV * record + int id + CODE: + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct MailSyncPref a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + if ((s = hv_fetch(h, "syncType", 8, 0))) + a.syncType = SvList(*s, MailSyncTypeNames); + else + a.syncType = 0; + + a.getHigh = (s=hv_fetch(h,"getHigh",7,0)) ? SvIV(*s) : 0; + a.getContaining = (s=hv_fetch(h,"getContaining",13,0)) ? SvIV(*s) : 0; + a.truncate = (s=hv_fetch(h,"truncate",8,0)) ? SvIV(*s) : 0; + + a.filterTo = (s=hv_fetch(h,"filterTo",8,0)) ? SvPV(*s,na) : 0; + a.filterFrom = (s=hv_fetch(h,"filterFrom",10,0)) ? SvPV(*s,na) : 0; + a.filterSubject = (s=hv_fetch(h,"filterSubject",13,0)) ? SvPV(*s,na) : 0; + + len = pack_MailSyncPref(&a, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + +SV * +UnpackSignaturePref(record) + SV * record + CODE: + { + STRLEN len; + AV * e; + HV * ret; + int i; + struct MailSignaturePref a; + + if (SvOK(record) && SvRV(record) && (SvTYPE(SvRV(record)) == SVt_PVHV)) { + SV ** raw; + ret = (HV*)SvRV(record); + raw = hv_fetch(ret, "raw", 3, 0); + if (!raw || !SvOK(*raw)) + croak("Unable to unpack"); + RETVAL = newSVsv(record); + record = *raw; + } else { + ret = newHV(); + hv_store(ret, "raw", 3, newSVsv(record),0); + RETVAL = newRV_noinc((SV*)ret); + } + + SvPV(record,len); + if (unpack_MailSignaturePref(&a, (CPTR)SvPV(record, na), len)>0) { + + if (a.signature) + hv_store(ret, "signature", 9, newSVpv(a.signature, 0), 0); + } + } + OUTPUT: + RETVAL + +SV * +PackSignaturePref(record, id) + SV * record + int id + CODE: + { + int i; + int len; + SV ** s; + HV * h; + AV * av; + struct MailSignaturePref a; + + if (!SvRV(record) || (SvTYPE(h=(HV*)SvRV(record))!=SVt_PVHV)) + RETVAL = record; + else { + + a.signature = (s=hv_fetch(h,"signature",9,0)) ? SvPV(*s,na) : 0; + + len = pack_MailSignaturePref(&a, mybuf, 0xffff); + + RETVAL = newSVpvn((char *) mybuf, len); + + hv_store(h, "raw", 3, SvREFCNT_inc(RETVAL), 0); + } + } + OUTPUT: + RETVAL + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot + +int +close(socket) + int socket + CODE: + RETVAL = pi_close(socket); + OUTPUT: + RETVAL + +int +write(socket, msg) + int socket + SV * msg + CODE: + { + STRLEN len; + SvPV(msg, len); + RETVAL = pi_write(socket,SvPV(msg,na),len); + } + +SV * +read(socket, len) + int socket + int len + + + CODE: + { + int result; + + result = pi_read(socket, &pibuf, len); + if (result >=0) + RETVAL = newSVpvn((char *) pibuf.data, result); + else + RETVAL = &sv_undef; + } + OUTPUT: + RETVAL + +int +socket(domain, type, protocol) + int domain + int type + int protocol + CODE: + RETVAL = pi_socket(domain, type, protocol); + OUTPUT: + RETVAL + +int +listen(socket, backlog) + int socket + int backlog + CODE: + RETVAL = pi_listen(socket, backlog); + OUTPUT: + RETVAL + +char * +errorText(error) + int error + CODE: + RETVAL = dlp_strerror(error); + OUTPUT: + RETVAL + +int +bind(socket, port) + int socket + char * port + CODE: + RETVAL = pi_bind(socket, port); + OUTPUT: + RETVAL + +int +openPort(port) + char * port + CODE: + { + int socket = pi_socket(PI_AF_PILOT, PI_SOCK_STREAM, PI_PF_DLP); + pi_bind(socket, port); + pi_listen(socket, 1); + RETVAL = socket; + } + OUTPUT: + RETVAL + +SV * +accept(socket) + int socket + CODE: + { + struct pi_sockaddr a; + size_t len = sizeof(struct pi_sockaddr); + int result; + result = pi_accept(socket, (struct sockaddr*)&a, &len); + if (result < 0) { + RETVAL = newSViv(result); + } else { + PDA__Pilot__DLP * x = malloc(sizeof(PDA__Pilot__DLP)); + SV * sv = newSViv((IV)(void*)x); + x->errnop = 0; + x->socket = result; + RETVAL = newRV(sv); + SvREFCNT_dec(sv); + sv_bless(RETVAL, gv_stashpv("PDA::Pilot::DLPPtr",0)); + } + } + OUTPUT: + RETVAL + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot::DLP::DBPtr + +void +DESTROY(db) + PDA::Pilot::DLP::DB * db + CODE: + if (db->Class) + SvREFCNT_dec(db->Class); + if (db->handle) + dlp_CloseDB(db->socket, db->handle); + if (db->dbname) + SvREFCNT_dec(db->dbname); + SvREFCNT_dec(db->connection); + free(db); + +int +errno(self) + PDA::Pilot::DLP::DB *self + CODE: + RETVAL = self->errnop; + self->errnop = 0; + OUTPUT: + RETVAL + +int +palmos_errno(self) + PDA::Pilot::DLP::DB *self + CODE: + RETVAL = pi_palmos_error(self->socket); + OUTPUT: + RETVAL + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot::DLP::DBPtr + +SV * +class(self, name=0) + PDA::Pilot::DLP::DB *self + SV * name + CODE: + { + SV ** s = 0; + HV * h; + if (name) { + STRLEN len; + h = perl_get_hv("PDA::Pilot::DBClasses", 0); + if (!h) + croak("DBClasses doesn't exist"); + if (SvOK(name)) { + (void)SvPV(name,len); + s = hv_fetch(h, SvPV(name,na), len, 0); + } + if (!s) + s = hv_fetch(h, "", 0, 0); + if (!s) + croak("Default DBClass not defined"); + SvREFCNT_inc(*s); + if (self->Class) + SvREFCNT_dec(self->Class); + self->Class = *s; + } + RETVAL = newSVsv(self->Class); + } + OUTPUT: + RETVAL + +Result +close(self) + PDA::Pilot::DLP::DB *self + CODE: + RETVAL = dlp_CloseDB(self->socket, self->handle); + self->handle=0; + OUTPUT: + RETVAL + +Result +setSortBlock(self, data) + PDA::Pilot::DLP::DB *self + SV *data + CODE: + { + STRLEN len; + void * c; + PackSI; + c = SvPV(data, len); + RETVAL = dlp_WriteSortBlock(self->socket, self->handle, c, len); + } + OUTPUT: + RETVAL + +SV * +getAppBlock(self) + PDA::Pilot::DLP::DB *self + PPCODE: + { + int result = dlp_ReadAppBlock(self->socket, self->handle, 0, -1, &pibuf); + ReturnReadAI(pibuf.data, result); + } + +SV * +getSortBlock(self) + PDA::Pilot::DLP::DB *self + PPCODE: + { + int result = dlp_ReadSortBlock(self->socket,self->handle, 0, -1, &pibuf); + ReturnReadSI(pibuf.data, result); + } + +Result +setAppBlock(self, data) + PDA::Pilot::DLP::DB *self + SV *data + CODE: + { + STRLEN len; + void * c; + PackAI; + c = SvPV(data, len); + RETVAL = dlp_WriteAppBlock(self->socket, self->handle, c, len); + } + OUTPUT: + RETVAL + +Result +purge(self) + PDA::Pilot::DLP::DB *self + CODE: + RETVAL = dlp_CleanUpDatabase(self->socket, self->handle); + OUTPUT: + RETVAL + +Result +resetFlags(self) + PDA::Pilot::DLP::DB *self + CODE: + RETVAL = dlp_ResetSyncFlags(self->socket, self->handle); + OUTPUT: + RETVAL + +Result +deleteCategory(self, category) + PDA::Pilot::DLP::DB *self + int category + CODE: + RETVAL = dlp_DeleteCategory(self->socket, self->handle, category); + OUTPUT: + RETVAL + +void +newRecord(self, id=0, attr=0, cat=0) + PDA::Pilot::DLP::DB *self + SV * id + SV * attr + SV * cat + PPCODE: + { + if (self->Class) { + int count; + PUSHMARK(sp); + XPUSHs(self->Class); + if (id) + XPUSHs(id); + if (attr) + XPUSHs(attr); + if (cat) + XPUSHs(cat); + PUTBACK; + count = perl_call_method("record", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to create record"); + } + else { + croak("Class not defined"); + } + } + +void +newResource(self, type=0, id=0) + PDA::Pilot::DLP::DB *self + SV * type + SV * id + PPCODE: + { + if (self->Class) { + int count; + PUSHMARK(sp); + XPUSHs(self->Class); + if (type) + XPUSHs(type); + if (id) + XPUSHs(id); + PUTBACK; + count = perl_call_method("resource", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to create record"); + } + else { + croak("Class not defined"); + } + } + +void +newAppBlock(self) + PDA::Pilot::DLP::DB *self + PPCODE: + { + if (self->Class) { + int count; + PUSHMARK(sp); + XPUSHs(self->Class); + PUTBACK; + count = perl_call_method("appblock", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to create record"); + } + else { + croak("Class not defined"); + } + } + +void +newSortBlock(self) + PDA::Pilot::DLP::DB *self + PPCODE: + { + if (self->Class) { + int count; + PUSHMARK(sp); + XPUSHs(self->Class); + PUTBACK; + count = perl_call_method("sortblock", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to create record"); + } + else { + croak("Class not defined"); + } + } + +void +newPref(self, id=0, version=0, backup=0, creator=0) + PDA::Pilot::DLP::DB *self + SV * id + SV * version + SV * backup + SV * creator + PPCODE: + { + if (!creator) { + int count; + PUSHMARK(sp); + XPUSHs(self->Class); + PUTBACK; + count = perl_call_method("creator", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to get creator"); + creator = POPs; + PUTBACK; + } + if (self->Class) { + int count; + PUSHMARK(sp); + XPUSHs(self->Class); + if (creator) + XPUSHs(creator); + if (id) + XPUSHs(id); + if (version) + XPUSHs(version); + if (backup) + XPUSHs(backup); + PUTBACK; + count = perl_call_method("pref", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to create record"); + } + else { + croak("Class not defined"); + } + } + +void +getRecord(self, index) + PDA::Pilot::DLP::DB *self + int index + PPCODE: + { + int attr, category; + unsigned long id; + int result; + + result = dlp_ReadRecordByIndex(self->socket, self->handle, index, &pibuf, &id, &attr, &category); + ReturnReadRecord(pibuf.data, pibuf.used); + } + +Result +moveCategory(self, fromcat, tocat) + PDA::Pilot::DLP::DB *self + int fromcat + int tocat + CODE: + RETVAL = dlp_MoveCategory(self->socket, self->handle, fromcat, tocat); + OUTPUT: + RETVAL + + +Result +deleteRecord(self, id) + PDA::Pilot::DLP::DB *self + unsigned long id + CODE: + RETVAL = dlp_DeleteRecord(self->socket, self->handle, 0, id); + OUTPUT: + RETVAL + + +Result +deleteRecords(self) + PDA::Pilot::DLP::DB *self + CODE: + RETVAL = dlp_DeleteRecord(self->socket, self->handle, 1, 0); + OUTPUT: + RETVAL + +Result +resetNext(self) + PDA::Pilot::DLP::DB *self + CODE: + RETVAL = dlp_ResetDBIndex(self->socket, self->handle); + OUTPUT: + RETVAL + +int +getRecords(self) + PDA::Pilot::DLP::DB *self + CODE: + { + int result = dlp_ReadOpenDBInfo(self->socket, self->handle, &RETVAL); + if (result < 0) { + RETVAL = newSVsv(&sv_undef); + self->errnop = result; + } + } + OUTPUT: + RETVAL + +void +getRecordIDs(self, sort=0) + PDA::Pilot::DLP::DB *self + int sort + PPCODE: + { + recordid_t * id = (recordid_t*)mybuf; + int result; + int start; + int count; + int i; + AV * list = newAV(); + + start = 0; + for(;;) { + result = dlp_ReadRecordIDList(self->socket, self->handle, sort, start, + 0xFFFF/sizeof(recordid_t), id, &count); + if (result < 0) { + self->errnop = result; + break; + } else { + for(i=0;isocket, self->handle, id, &pibuf, &index, &attr, &category); + ReturnReadRecord(pibuf.data, pibuf.used); + } + +void +getNextModRecord(self, category=-1) + PDA::Pilot::DLP::DB *self + int category + PPCODE: + { + int result, attr, index; + unsigned long id; + + if (category == -1) + result = dlp_ReadNextModifiedRec(self->socket, self->handle, &pibuf, &id, &index, &attr, &category); + else + result = dlp_ReadNextModifiedRecInCategory(self->socket, self->handle, category, &pibuf, &id, &index, &attr); + ReturnReadRecord(pibuf.data, pibuf.used); + } + +void +getNextRecord(self, category) + PDA::Pilot::DLP::DB *self + int category + PPCODE: + { + int result, attr, index; + unsigned long id; + + result = dlp_ReadNextRecInCategory(self->socket, self->handle, category, &pibuf, &id, &index, &attr); + ReturnReadRecord(pibuf.data, pibuf.used); + } + +unsigned long +setRecord(self, data) + PDA::Pilot::DLP::DB *self + SV *data + CODE: + { + STRLEN len; + unsigned long id; + int attr, category; + int result; + void * c; + PackRecord; + c = SvPV(data, len); + result = dlp_WriteRecord(self->socket, self->handle, attr, id, category, c, len, &RETVAL); + if (result<0) { + RETVAL = 0; + self->errnop = result; + } + } + OUTPUT: + RETVAL + +unsigned long +setRecordRaw(self, data, id, attr, category) + PDA::Pilot::DLP::DB *self + unsigned long id + int attr + int category + SV *data + CODE: + { + STRLEN len; + int result; + void * c; + PackRaw; + c = SvPV(data, len); + result = dlp_WriteRecord(self->socket, self->handle, attr, id, category, c, len, &RETVAL); + if (result<0) { + RETVAL = 0; + self->errnop = result; + } + } + OUTPUT: + RETVAL + +void +setResourceByID(self, type, id) + PDA::Pilot::DLP::DB *self + Char4 type + int id + PPCODE: + { + int result, index; + + result = dlp_ReadResourceByType(self->socket, self->handle, type, id, &pibuf, &index); + ReturnReadResource(pibuf.data, pibuf.used); + } + +void +getResource(self, index) + PDA::Pilot::DLP::DB *self + int index + PPCODE: + { + int result, id; + Char4 type; + + result = dlp_ReadResourceByIndex(self->socket, self->handle, index, &pibuf, &type, &id); + ReturnReadResource(pibuf.data, pibuf.used); + } + +SV * +setResource(self, data) + PDA::Pilot::DLP::DB *self + SV *data + CODE: + { + STRLEN len; + int result; + Char4 type; + int id; + void * c; + PackResource; + c = SvPV(data, len); + result = dlp_WriteResource(self->socket, self->handle, type, id, c, len); + if (result < 0) { + self->errnop = result; + RETVAL = newSVsv(&sv_undef); + } else + RETVAL = newSViv(result); + } + OUTPUT: + RETVAL + +Result +deleteResource(self, type, id) + PDA::Pilot::DLP::DB *self + Char4 type + int id + CODE: + RETVAL = dlp_DeleteResource(self->socket, self->handle, 0, type, id); + OUTPUT: + RETVAL + +Result +deleteResources(self) + PDA::Pilot::DLP::DB *self + CODE: + RETVAL = dlp_DeleteResource(self->socket, self->handle, 1, 0, 0); + OUTPUT: + RETVAL + +void +getPref(self, id=0, backup=1) + PDA::Pilot::DLP::DB *self + int id + int backup + PPCODE: + { + Char4 creator; + int version, result; + size_t len; + SV * c, n, v; + int r; + if (self->Class) { + int count; + PUSHMARK(sp); + XPUSHs(self->Class); + PUTBACK; + count = perl_call_method("creator", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to get creator"); + creator = SvChar4(POPs); + PUTBACK; + } + if (pi_version(self->socket)< 0x101) + r = dlp_CloseDB(self->socket, self->handle); + result = dlp_ReadAppPreference(self->socket, creator, id, backup, 0xFFFF, mybuf, &len, &version); + if (pi_version(self->socket)< 0x101) + r = dlp_OpenDB(self->socket, self->dbcard, self->dbmode, SvPV(self->dbname,na), &self->handle); + ReturnReadPref(mybuf, len); + } + +SV * +setPref(self, data) + PDA::Pilot::DLP::DB *self + SV *data + PPCODE: + { + Char4 creator; + int id; + int version; + int backup; + STRLEN len; + int result; + void * buf; + int r; + PackPref; + buf = SvPV(data, len); + if (pi_version(self->socket)< 0x101) + r = dlp_CloseDB(self->socket, self->handle); + result = dlp_WriteAppPreference(self->socket, creator, id, backup, version, buf, len); + if (pi_version(self->socket)< 0x101) + r = dlp_OpenDB(self->socket, self->dbcard, self->dbmode, SvPV(self->dbname,na), &self->handle); + if (result < 0) { + self->errnop = result; + RETVAL = newSVsv(&sv_undef); + } else { + RETVAL = newSViv(result); + } + } + +SV * +setPrefRaw(self, data, number, version, backup=1) + PDA::Pilot::DLP::DB *self + SV *data + int number + int version + int backup + PPCODE: + { + STRLEN len; + Char4 creator; + int version, result; + void * buf; + PackRaw; + buf = SvPV(data, len); + if (self->Class) { + int count; + PUSHMARK(sp); + XPUSHs(self->Class); + PUTBACK; + count = perl_call_method("creator", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to get creator"); + creator = SvChar4(POPs); + PUTBACK; + } + result = dlp_WriteAppPreference(self->socket, creator, number, backup, version, buf, len); + if (result < 0) { + self->errnop = result; + RETVAL = newSVsv(&sv_undef); + } else { + RETVAL = newSViv(result); + } + } + + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot::DLPPtr + +void +DESTROY(self) + PDA::Pilot::DLP *self + CODE: + if (self->socket) + pi_close(self->socket); + free(self); + +int +errno(self) + PDA::Pilot::DLP *self + CODE: + RETVAL = self->errnop; + self->errnop = 0; + OUTPUT: + RETVAL + +int +palmos_errno(self) + PDA::Pilot::DLP *self + CODE: + RETVAL = pi_palmos_error(self->socket); + OUTPUT: + RETVAL + +SV * +getTime(self) + PDA::Pilot::DLP *self + CODE: + { + time_t t; + int result = dlp_GetSysDateTime(self->socket, &t); + if (result < 0) { + self->errnop = result; + RETVAL = newSVsv(&sv_undef); + } else + RETVAL = newSViv(t); + } + OUTPUT: + RETVAL + +Result +setTime(self, time) + PDA::Pilot::DLP *self + long time + CODE: + RETVAL = dlp_SetSysDateTime(self->socket, time); + OUTPUT: + RETVAL + +SV * +getSysInfo(self) + PDA::Pilot::DLP *self + CODE: + { + struct SysInfo si; + int result = dlp_ReadSysInfo(self->socket, &si); + if (result < 0) { + self->errnop = result; + RETVAL = newSVsv(&sv_undef); + } else { + HV * i = newHV(); + hv_store(i, "romVersion", 10, newSViv(si.romVersion), 0);\ + hv_store(i, "locale", 6, newSViv(si.locale), 0);\ + hv_store(i, "product", 4, newSVpvn(si.prodID, si.prodIDLength), 0);\ + RETVAL = newRV((SV*)i); + } + } + OUTPUT: + RETVAL + +SV * +getCardInfo(self, cardno=0) + PDA::Pilot::DLP *self + int cardno + CODE: + { + struct CardInfo c; + int result = dlp_ReadStorageInfo(self->socket, cardno, &c); + if (result < 0) { + self->errnop = result; + RETVAL = newSVsv(&sv_undef); + } else { + HV * i = newHV(); + hv_store(i, "card", 6, newSViv(c.card), 0);\ + hv_store(i, "version", 7, newSViv(c.version), 0);\ + hv_store(i, "created", 8, newSViv(c.creation), 0);\ + hv_store(i, "romSize", 7, newSViv(c.romSize), 0);\ + hv_store(i, "ramSize", 7, newSViv(c.ramSize), 0);\ + hv_store(i, "ramFree", 7, newSViv(c.ramFree), 0);\ + hv_store(i, "name", 4, newSVpv(c.name,0), 0);\ + hv_store(i, "manufacturer", 12, newSVpv(c.manufacturer,0), 0);\ + RETVAL = newRV((SV*)i); + } + } + OUTPUT: + RETVAL + +int +setUserInfo(self, info) + PDA::Pilot::DLP *self + UserInfo &info + CODE: + RETVAL = dlp_WriteUserInfo(self->socket, &info); + OUTPUT: + RETVAL + +void +getBattery(self) + PDA::Pilot::DLP *self + PPCODE: + { + int warn, critical, ticks, kind, AC; + unsigned long voltage; + int result; + struct RPC_params p; + + PackRPC(&p,0xA0B6, RPC_IntReply, + RPC_Byte(0), RPC_ShortPtr(&warn), RPC_ShortPtr(&critical), + RPC_ShortPtr(&ticks), RPC_BytePtr(&kind), RPC_BytePtr(&AC), RPC_End); + + result = dlp_RPC(self->socket, &p, &voltage); + + if (result==0) { + EXTEND(sp,5); + PUSHs(sv_2mortal(newSVnv((float)voltage/100))); + PUSHs(sv_2mortal(newSVnv((float)warn/100))); + PUSHs(sv_2mortal(newSVnv((float)critical/100))); + PUSHs(sv_2mortal(newSViv(kind))); + PUSHs(sv_2mortal(newSViv(AC))); + } + } + +SV * +getUserInfo(self) + PDA::Pilot::DLP *self + CODE: + { + UserInfo info; + int result; + result = dlp_ReadUserInfo(self->socket, &info); + pack_userinfo(RETVAL, info, result); + } + OUTPUT: + RETVAL + +void +newPref(self, creator, id=0, version=0, backup=0) + PDA::Pilot::DLP *self + Char4 creator + SV * id + SV * version + SV * backup + PPCODE: + { + HV * h = perl_get_hv("PDA::Pilot::PrefClasses", 0); + SV ** s; + int count; + if (!h) + croak("PrefClasses doesn't exist"); + s = hv_fetch(h, printlong(creator), 4, 0); + if (!s) + s = hv_fetch(h, "", 0, 0); + if (!s) + croak("Default PrefClass not defined"); + PUSHMARK(sp); + XPUSHs(newSVsv(*s)); + XPUSHs(&sv_undef); + XPUSHs(sv_2mortal(newSVChar4(creator))); + if (id) + XPUSHs(id); + if (version) + XPUSHs(version); + if (backup) + XPUSHs(backup); + PUTBACK; + count = perl_call_method("pref", G_SCALAR); + SPAGAIN; + if (count != 1) + croak("Unable to create resource"); + } + +Result +delete(self, name, cardno=0) + PDA::Pilot::DLP *self + char * name + int cardno + CODE: + { + UserInfo info; + int result; + RETVAL = dlp_DeleteDB(self->socket, cardno, name); + } + OUTPUT: + RETVAL + +SV * +open(self, name, mode=0, cardno=0) + PDA::Pilot::DLP *self + char * name + SV * mode + int cardno + CODE: + { + int handle; + int nummode; + int result; + if (!mode) + nummode = dlpOpenRead|dlpOpenWrite|dlpOpenSecret; + else { + char *c; + STRLEN len; + nummode = SvIV(mode); + if (SvPOKp(mode)) { + c = SvPV(mode, len); + while (*c) { + switch (*c) { + case 'r': + nummode |= dlpOpenRead; + break; + case 'w': + nummode |= dlpOpenWrite; + break; + case 'x': + nummode |= dlpOpenExclusive; + break; + case 's': + nummode |= dlpOpenSecret; + break; + } + c++; + } + } + } + result = dlp_OpenDB(self->socket, cardno, nummode, name, &handle); + if (result<0) { + self->errnop = result; + RETVAL = &sv_undef; + } else { + int type; + PDA__Pilot__DLP__DB * x = malloc(sizeof(PDA__Pilot__DLP__DB)); + SV * sv = newSViv((IV)(void*)x); + SvREFCNT_inc(ST(0)); + x->connection = ST(0); + x->socket = self->socket; + x->handle = handle; + x->errnop = 0; + x->dbname = newSVpv(name,0); + x->dbmode = nummode; + x->dbcard = cardno; + RETVAL = newRV(sv); + SvREFCNT_dec(sv); + sv_bless(RETVAL, gv_stashpv("PDA::Pilot::DLP::DBPtr",0)); + { + HV * h = perl_get_hv("PDA::Pilot::DBClasses", 0); + SV ** s; + if (!h) + croak("DBClasses doesn't exist"); + s = hv_fetch(h, name, strlen(name), 0); + if (!s) + s = hv_fetch(h, "", 0, 0); + if (!s) + croak("Default DBClass not defined"); + x->Class = *s; + SvREFCNT_inc(*s); + } + } + } + OUTPUT: + RETVAL + +SV * +create(self, name, creator, type, flags, version, cardno=0) + PDA::Pilot::DLP *self + char * name + Char4 creator + Char4 type + int flags + int version + int cardno + CODE: + { + int handle; + int result = dlp_CreateDB(self->socket, creator, type, cardno, flags, version, name, &handle); + if (result<0) { + self->errnop = result; + RETVAL = &sv_undef; + } else { + PDA__Pilot__DLP__DB * x = malloc(sizeof(PDA__Pilot__DLP__DB)); + SV * sv = newSViv((IV)(void*)x); + SvREFCNT_inc(ST(0)); + x->connection = ST(0); + x->socket = self->socket; + x->handle = handle; + x->errnop = 0; + x->dbname = newSVpv(name,0); + x->dbmode = dlpOpenRead|dlpOpenWrite|dlpOpenSecret; + x->dbcard = cardno; + RETVAL = newRV(sv); + SvREFCNT_dec(sv); + sv_bless(RETVAL, gv_stashpv("PDA::Pilot::DLP::DBPtr",0)); + { + HV * h = perl_get_hv("PDA::Pilot::DBClasses", 0); + SV ** s; + if (!h) + croak("DBClasses doesn't exist"); + s = hv_fetch(h, name, strlen(name), 0); + if (!s) + s = hv_fetch(h, "", 0, 0); + if (!s) + croak("Default DBClass not defined"); + x->Class = *s; + SvREFCNT_inc(*s); + } + } + } + OUTPUT: + RETVAL + + + +void +getPref(self, creator, id=0, backup=1) + PDA::Pilot::DLP *self + Char4 creator + int id + int backup + PPCODE: + { + int version, result; + size_t len; + SV * c, n, v; + result = dlp_ReadAppPreference(self->socket, creator, id, backup, 0xFFFF, mybuf, &len, &version); + ReturnReadPref(mybuf, len); + } + +SV * +setPref(self, data) + PDA::Pilot::DLP *self + SV *data + PPCODE: + { + Char4 creator; + int id; + int version; + int backup; + STRLEN len; + int result; + void * buf; + PackPref; + buf = SvPV(data, len); + result = dlp_WriteAppPreference(self->socket, creator, id, backup, version, buf, len); + if (result < 0) { + self->errnop = result; + RETVAL = newSVsv(&sv_undef); + } else { + RETVAL = newSViv(result); + } + } + +SV * +setPrefRaw(self, data, creator, number, version, backup=1) + PDA::Pilot::DLP *self + SV *data + Char4 creator + int number + int version + int backup + PPCODE: + { + STRLEN len; + int version, result; + void * buf; + PackRaw; + buf = SvPV(data, len); + result = dlp_WriteAppPreference(self->socket, creator, number, backup, version, buf, len); + if (result < 0) { + self->errnop = result; + RETVAL = newSVsv(&sv_undef); + } else { + RETVAL = newSViv(result); + } + } + + +Result +close(self, status=0) + PDA::Pilot::DLP *self + int status + CODE: + RETVAL = dlp_EndOfSync(self->socket, status) || pi_close(self->socket); + if (!RETVAL) + self->socket = 0; + OUTPUT: + RETVAL + +Result +abort(self) + PDA::Pilot::DLP *self + CODE: + RETVAL = dlp_AbortSync(self->socket) || pi_close(self->socket); + if (!RETVAL) + self->socket = 0; + OUTPUT: + RETVAL + +Result +reset(self) + PDA::Pilot::DLP *self + CODE: + RETVAL = dlp_ResetSystem(self->socket); + OUTPUT: + RETVAL + +Result +getStatus(self) + PDA::Pilot::DLP *self + CODE: + RETVAL = dlp_OpenConduit(self->socket); + OUTPUT: + RETVAL + +Result +log(self, message) + PDA::Pilot::DLP *self + char * message + CODE: + RETVAL = dlp_AddSyncLogEntry(self->socket,message); + OUTPUT: + RETVAL + + +Result +dirty(self) + PDA::Pilot::DLP *self + CODE: + RETVAL = dlp_ResetLastSyncPC(self->socket); + OUTPUT: + RETVAL + +SV * +getDBInfo(self, start, RAM=1, ROM=0, cardno=0) + PDA::Pilot::DLP *self + int start + int RAM + int ROM + int cardno + CODE: + { + struct DBInfo info; + + int where = (RAM ? dlpDBListRAM : 0) | (ROM ? dlpDBListROM : 0); + int result = dlp_ReadDBList(self->socket, cardno, where, start, &pibuf); + pack_dbinfo(RETVAL,(*(struct DBInfo *)(pibuf.data)), result); + } + OUTPUT: + RETVAL + +SV * +findDBInfo(self, start, name, creator, type, cardno=0) + PDA::Pilot::DLP *self + int start + SV * name + SV * creator + SV * type + int cardno + CODE: + { + struct DBInfo info; + Char4 c,t; + int result; + if (SvOK(creator)) + c = SvChar4(creator); + else + c = 0; + if (SvOK(type)) + t = SvChar4(type); + else + t = 0; + result = dlp_FindDBInfo(self->socket, cardno, start, + SvOK(name) ? SvPV(name,na) : 0, + t, c, &info); + pack_dbinfo(RETVAL, info, result); + } + OUTPUT: + RETVAL + +SV * +getFeature(self, creator, number) + PDA::Pilot::DLP *self + Char4 creator + int number + CODE: + { + unsigned long f; + int result; + if ((result = dlp_ReadFeature(self->socket, creator, number, &f))<0) { + RETVAL = newSVsv(&sv_undef); + self->errnop = result; + } else { + RETVAL = newSViv(f); + } + } + OUTPUT: + RETVAL + + +void +getROMToken(self,token) + PDA::Pilot::DLP *self + Char4 token + PPCODE: + { + char buffer[50]; + long long_token; + size_t size; + int result; + + result = dlp_GetROMToken(self->socket, token, buffer, &size); + + if (result==0) { + EXTEND(sp,1); + PUSHs(sv_2mortal(newSVpvn(buffer, size))); + } + } + +void +callApplication(self, creator, type, action, data=&sv_undef) + PDA::Pilot::DLP *self + Char4 creator + Char4 type + int action + SV *data + PPCODE: + { + unsigned long retcode; + STRLEN len; + int result; + (void)SvPV(data,len); + result = dlp_CallApplication(self->socket, creator, + type, action, len, SvPV(data,na), + &retcode, &pibuf); + EXTEND(sp, 2); + if (result >= 0) { + PUSHs(sv_2mortal(newSVpvn((char *) pibuf.data, pibuf.used))); + if (GIMME != G_SCALAR) { + PUSHs(sv_2mortal(newSViv(retcode))); + } + } else + PUSHs(&sv_undef); + } + +int +tickle(self) + PDA::Pilot::DLP *self + CODE: + { + RETVAL = pi_tickle(self->socket); + } + OUTPUT: + RETVAL + +int +watchdog(self, interval) + PDA::Pilot::DLP *self + int interval + CODE: + { + RETVAL = pi_watchdog(self->socket, interval); + } + OUTPUT: + RETVAL + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot::File + +PDA::Pilot::File * +open(name) + char * name + CODE: + { + RETVAL = calloc(sizeof(PDA__Pilot__File),1); + RETVAL->errnop = 0; + RETVAL->pf = pi_file_open(name); + { + HV * h = perl_get_hv("PDA::Pilot::DBClasses", 0); + SV ** s; + if (!h) + croak("DBClasses doesn't exist"); + s = hv_fetch(h, name, strlen(name), 0); + if (!s) + s = hv_fetch(h, "", 0, 0); + if (!s) + croak("Default DBClass not defined"); + RETVAL->Class = *s; + SvREFCNT_inc(*s); + } + } + OUTPUT: + RETVAL + +PDA::Pilot::File * +create(name, info) + char * name + DBInfo info + CODE: + RETVAL = calloc(sizeof(PDA__Pilot__File),1); + RETVAL->errnop = 0; + RETVAL->pf = pi_file_create(name, &info); + { + HV * h = perl_get_hv("PDA::Pilot::DBClasses", 0); + SV ** s; + if (!h) + croak("DBClasses doesn't exist"); + s = hv_fetch(h, name, strlen(name), 0); + if (!s) + s = hv_fetch(h, "", 0, 0); + if (!s) + croak("Default DBClass not defined"); + RETVAL->Class = *s; + SvREFCNT_inc(*s); + } + OUTPUT: + RETVAL + +MODULE = PDA::Pilot PACKAGE = PDA::Pilot::FilePtr + +int +errno(self) + PDA::Pilot::File *self + CODE: + RETVAL = self->errnop; + self->errnop = 0; + OUTPUT: + RETVAL + +void +DESTROY(self) + PDA::Pilot::File *self + CODE: + if (self->pf) + pi_file_close(self->pf); + if (self->Class) + SvREFCNT_dec(self->Class); + free(self); + +SV * +class(self, name=0) + PDA::Pilot::File *self + SV * name + CODE: + { + SV ** s = 0; + HV * h; + if (name) { + STRLEN len; + h = perl_get_hv("PDA::Pilot::DBClasses", 0); + if (!h) + croak("DBClasses doesn't exist"); + if (SvOK(name)) { + (void)SvPV(name, len); + s = hv_fetch(h, SvPV(name, na), len, 0); + } + if (!s) + s = hv_fetch(h, "", 0, 0); + if (!s) + croak("Default DBClass not defined"); + SvREFCNT_inc(*s); + if (self->Class) + SvREFCNT_dec(self->Class); + self->Class = *s; + } + RETVAL = newSVsv(self->Class); + } + OUTPUT: + RETVAL + +int +close(self) + PDA::Pilot::File *self + CODE: + if (self->pf) { + RETVAL = pi_file_close(self->pf); + self->pf = 0; + } else + RETVAL = 0; + OUTPUT: + RETVAL + +SV * +getAppBlock(self) + PDA::Pilot::File *self + PPCODE: + { + int result = 0; + size_t len; + void * buf; + pi_file_get_app_info(self->pf, &buf, &len); + ReturnReadAI(buf, (int)len); + } + +SV * +getSortBlock(self) + PDA::Pilot::File *self + PPCODE: + { + int result = 0; + size_t len; + void * buf; + pi_file_get_sort_info(self->pf, &buf, &len); + ReturnReadSI(buf, (int)len); + } + + +SV * +getRecords(self) + PDA::Pilot::File *self + CODE: + { + int len, result = 0; + pi_file_get_entries(self->pf, &len); + RETVAL = newSViv((int)len); + } + OUTPUT: + RETVAL + +SV * +getResource(self, index) + PDA::Pilot::File *self + int index + CODE: + { + int result, id; + size_t len; + Char4 type; + void * buf; + result = pi_file_read_resource(self->pf, index, &buf, &len, &type, &id); + ReturnReadResource(buf,(int)len); + } + OUTPUT: + RETVAL + +SV * +getRecord(self, index) + PDA::Pilot::File *self + int index + PPCODE: + { + int result, attr, category; + size_t len; + unsigned long id; + void * buf; + result = pi_file_read_record(self->pf, index, &buf, &len, &attr, &category, &id); + ReturnReadRecord(buf,(int)len); + } + + +SV * +getRecordByID(self, id) + PDA::Pilot::File *self + unsigned long id + CODE: + { + int result; + size_t len; + int attr, category, index; + void * buf; + result = pi_file_read_record_by_id(self->pf, id, &buf, &len, &index, &attr, &category); + ReturnReadRecord(buf, (int)len); + } + OUTPUT: + RETVAL + +int +checkID(self, uid) + PDA::Pilot::File *self + unsigned long uid + CODE: + RETVAL = pi_file_id_used(self->pf, uid); + OUTPUT: + RETVAL + +SV * +getDBInfo(self) + PDA::Pilot::File *self + CODE: + { + DBInfo result; + pi_file_get_info(self->pf, &result); + pack_dbinfo(RETVAL, result, 0); + } + OUTPUT: + RETVAL + +int +setDBInfo(self, info) + PDA::Pilot::File *self + DBInfo info + CODE: + RETVAL = pi_file_set_info(self->pf, &info); + OUTPUT: + RETVAL + +int +setAppBlock(self, data) + PDA::Pilot::File *self + SV *data + CODE: + { + STRLEN len; + char * c; + PackAI; + c = SvPV(data, len); + RETVAL = pi_file_set_app_info(self->pf, c, len); + } + OUTPUT: + RETVAL + +int +setSortBlock(self, data) + PDA::Pilot::File *self + SV *data + CODE: + { + STRLEN len; + char * c; + PackSI; + c = SvPV(data, len); + RETVAL = pi_file_set_sort_info(self->pf, c, len); + } + OUTPUT: + RETVAL + +int +addResource(self, data, type, id) + PDA::Pilot::File *self + SV *data + Char4 type + int id + CODE: + { + STRLEN len; + int result; + void * buf; + PackResource; + buf = SvPV(data, len); + RETVAL = pi_file_append_resource(self->pf, buf, len, type, id); + } + OUTPUT: + RETVAL + +int +addRecord(self, data) + PDA::Pilot::File *self + SV *data + CODE: + { + STRLEN len; + unsigned long id; + int attr, category; + int result; + void * buf; + PackRecord; + buf = SvPV(data, len); + RETVAL = pi_file_append_record(self->pf, buf, len, attr, category, id); + } + OUTPUT: + RETVAL + +int +addRecordRaw(self, data, uid, attr, category) + PDA::Pilot::File *self + SV *data + unsigned long uid + int attr + int category + CODE: + { + STRLEN len; + int result; + void * buf; + PackRaw; + buf = SvPV(data, len); + RETVAL = pi_file_append_record(self->pf, buf, len, attr, category, uid); + } + OUTPUT: + RETVAL + + +int +install(self, socket, cardno) + PDA::Pilot::File *self + PDA::Pilot::DLP *socket + int cardno + CODE: + RETVAL = pi_file_install(self->pf, socket->socket, cardno, NULL); + OUTPUT: + RETVAL + +int +retrieve(self, socket, cardno) + PDA::Pilot::File *self + PDA::Pilot::DLP *socket + int cardno + CODE: + RETVAL = pi_file_retrieve(self->pf, socket->socket, cardno, NULL); + OUTPUT: + RETVAL diff --git a/bindings/Perl/README b/bindings/Perl/README new file mode 100644 index 0000000..57e0906 --- /dev/null +++ b/bindings/Perl/README @@ -0,0 +1,16 @@ +This is a functional (yet always experimental) set of modules to interface +Perl to the pilot-link library. To use it, you will need to perform these +steps: + + perl ./Makefile.PL + make + +If everything is working, you can execute a "make test". If that proves +successful, execute a "make install UNINST=1" as the superuser (root in most +cases) to install this interface into a system-wide location. + + make test + su - root + make install UNINST=1 + +For additional documentation, please read test.pl. diff --git a/bindings/Perl/blib/arch/.exists b/bindings/Perl/blib/arch/.exists new file mode 100644 index 0000000..e69de29 diff --git a/bindings/Perl/blib/arch/auto/PDA/Pilot/.exists b/bindings/Perl/blib/arch/auto/PDA/Pilot/.exists new file mode 100644 index 0000000..e69de29 diff --git a/bindings/Perl/blib/arch/auto/PDA/Pilot/Pilot.bs b/bindings/Perl/blib/arch/auto/PDA/Pilot/Pilot.bs new file mode 100644 index 0000000..e69de29 diff --git a/bindings/Perl/blib/arch/auto/PDA/Pilot/Pilot.so b/bindings/Perl/blib/arch/auto/PDA/Pilot/Pilot.so new file mode 100755 index 0000000000000000000000000000000000000000..ba8f3673e1c7c7cbaa00073d3d48b68ba3e7e76a GIT binary patch literal 574577 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