HandyShopper v1.03 (updated 9/13/98)

Shopping List Tool for PalmPilot 2.0 and Palm III
by Christopher Antos, Copyright © 1998, All Rights Reserved.

NOTE: REQUIRES PALM 2.0 OR HIGHER.
 

Table of Contents

What's New -- [Updated]
Freeware
What is HandyShopper?
Quick Start: How to Shop with HandyShopper
HandyShopper's Features and How to Use Them
The Shopping List
Setting Preferences
Other Commands
v2.0 and Postcards -- [Updated]
Why was HandyShopper Created?
Source Code
Where to Find the Latest Version


What's New

Many people have responded to HandyShopper over E-mail, and the response has been overwhelmingly favorable (also, there were several good suggestions for v2.0, many of which I will probably implement). I received several offers to go commercial: HandyShopper will remain FREEWARE, since I am not interested in receiving any remuneration for it other than postcards (my wife says my office is too bare, so I'm going to hang up in my office the postcards I receive <grin>).

"Thank You" to everyone who has sent a postcard! To the rest of you, any card is cool; my favorites are scenic views of whereever you are from (or someplace you've visited and really liked), or cards that are somehow unique.

Release Notes for v1.03

  • FIXED: Down button with no items would crash.
  • FIXED: The system Find command was finding private items even if they were hidden.
  • FIXED: If the last item had more lines than were visible, the Down scroll button was not able to scroll it fully into view.
  • NEW: Prices are right-justified.
  • NEW: Up/Down buttons scroll by a page at a time.

Release Notes for v1.02

Release Notes for v1.01

More information on the bugs and their respective fixes can be found near the beginning of the Shop.C source file.


Recovering from the Hard Reset/HotSync Bug

If this bug affected you, here's how to get HandyShopper working again and recover your data:
  1. If HotSync keeps crashing your PalmPilot, follow these steps first:
    1. These steps are for a PC. If you have a Mac, the steps should be similar, but of course different.
    2. Search your hard drive(s) for "HandyShopperDB.PDB", by using the Start menu and choosing "Find->Files or Folders...".
    3. Enter "Handy*.pdb" as the name of the file to search for.
    4. Wait for the search to finish.
    5. Look in the "In Folder" column for folders that end with "\Install". (You might also want to make sure it ends in "<username>\Install", where <username> is similar to your name - for instance, on my computer, it is "AntosC").
    6. If there are any files that match the previous step, select them and delete them (be careful you don't delete your backup database that you're trying to recover!!)
  2. Using the Pilot Install Tool, install "HandyShop.PRC" (v1.02).
  3. HotSync (this copies the new version of HandyShopper onto your PalmPilot).
  4. Use the Pilot Install Tool to install your backed up "HandyShopperDB.PDB" file.
  5. HotSync again.
  6. Your data is restored, and HandyShopper is working fine again.

FREEWARE

HandyShopper is FREEWARE.

HandyShopper is free for anyone to use. No one may sell it, lease it, rent it, or otherwise charge or collect fees for it.

Please feel free to send a postcard to:

Chris Antos
13240 85th Ave NE
Kirkland, WA 98034
USA

E-mail: Chris Antos

Disclaimer: By using HandyShopper, you agree that in no way can I be held responsible for anything bad (or good) that happens as a result of using (or abusing) HandyShopper. When you use it, you do so at your own risk. It works great for me, but your mileage may vary.


What is HandyShopper?

HandyShopper helps keep track of your shopping list(s) for you.

You can add into HandyShopper all the things you commonly shop for, and just check off which ones you need to buy, then go shopping and check them off your list as you buy them. Couldn't be simpler!


Quick Start: How to Shop with HandyShopper

Here are some quick directions to get you started shopping with HandyShopper.

First, make sure the "Need" tab at the top is highlighted in black.

Tap the New button to add new items to your list. You'll notice a checkbox appears on the left, with a dotted underline next to it (this is where you enter a description of the item, for instance "Batteries - AAA").

Add as many items as you wish. When you go shopping, HandyShopper shows your list of items you need (notice the tab at the top which says Need; this tab should be selected, or black).

As you purchase items on your list, check them off. They will disappear from your list. The item is not necessarily deleted from your list, though; if an item is marked as One Time Only then it is deleted when you check it off, otherwise it is merely filtered from the Need view, since it is no longer needed.

Next time you need to go shopping, select the All tab and the items you've gone shopping for before will be listed. Just mark which items you need this time (tap the box to the left of the item so it gets a checkmark in it). Now select the Need tab to show your shopping list, and you're ready to go!

For more information, and to make use of HandyShopper's other useful features, see HandyShopper's Features and How to Use Them.

For instance, you can have up to 15 stores, and mark an item as being available in any or all of those stores. As you might expect, you can see your entire shopping list, or you can limit it to one store at a time. You can categorize items, too (for instance, I have a Wife Gift Ideas category, and a Groceries category). Just like the PalmPilot's To Do List and Memo List, you can see all items at once, or just one category at a time. And much more!


The Shopping List

Figure 1
The first time you start HandyShopper, you'll see a screen that looks like Figure 1. Let's step through what each control can be used for, starting from the top left corner.

"i" — You can tap the "i" in the top left corner to display some quick reminders on how to use HandyShopper.

All / Need / C — These three tabs filter which items are displayed. When All is selected, all items are listed. When Need is selected, only items that are marked as needed are displayed (this is your list of needed items that you intend to purchase). When C is selected, only items that are needed and for which you have coupons are listed. To mark down that you need to buy a particular item, select All and find the item in the list (you can use the lookup feature, described below). Once you've found the item, check the box to the left of the item. This puts the item on your shopping list. When the Need tab is selected and you use the New button (described below) to add a new item to the list, the new item is automatically marked as needed.

Categories — in the top right corner is a dropdown list where you can select a category to show. This works just like the category dropdown in the PalmPilot's built-in Address Book, Memo Pad, and To Do List.

Stores — Just below the All/Need/C tabs is the Stores dropdown. Many items on a shopping list may be available at more than one store. HandyShopper therefore allows you to have up to 15 stores, and you can check off the stores at which each item is available. To see all the items on your shopping list, select All Stores from the Stores dropdown. Or, you can select a specific store; then only the items which are available at that store are listed. If a store has one or more items which you currently need, the store's name is shown in bold in the list of stores. Any store which doesn't have items you need is shown in normal type.

Figure 2
The Columns — There are several optional columns that can be displayed (you can turn them on or off by choosing Options/Preferences from the menu). Figure 2 shows all seven columns turned on. From left to right, the columns are Need, Name, Quantity, Coupon, Aisle, Category, and Price.

New — Tap the New button to add items to your list. When the All tab is selected, new items are added to your master list, but are not marked as currently needed (this is the best way to enter a store's stock into HandyShopper for future use). When the All tab is selected, you can put an item on your "current shopping list" by checking the box to the its left. When the Need or C tab is selected, new items are automatically marked as needed (the checkbox to the left will be empty when the Need tab is selected; check the box when you've purchased the item and the item will disappear from the list).

Details — This button pops up the Details dialog, where you can mark at which stores the item is available, set the category, and mark the item as One Time Only, or Private.

Lookup (L: ...........) — Tap here and enter text to look up. The first item that matches what you enter here will be highlighted.


Setting Preferences

Setting up Stores — [Sorry, I got tired of writing documentation; v2.0 will have instructions for this. It's pretty straightforward.]

Other Preferences — [Sorry, I got tired of writing documentation; v2.0 will have instructions for this. The preferences are fairly self-explanatory.]


Other Commands

[Sorry, I got tired of writing documentation; v2.0 will have instructions for this. Look at the menus. They are fairly self-explanatory.]


v2.0 and Postcards

I have lots of ideas for v2.0, and the more postcards I get, the faster v2.0 will come. If you are interested, remember to send me a postcard.

HandyShopper 1.x is basically a JShopper clone. However, after using HandyShopper myself for a while, I've decided it's a silly way to organize a shopping list. So v2 is being redesigned from scratch.

Update on Progress of v2.0

v2 is coming along slowly but surely. My day job is very demanding, so I don't have much time to spend on HS. It will be a few months before it is finished. However, since there seems to be a big demand for certain features, I may release a "v1.5" sooner but with not all the features yet.

Here's an incomplete list of several features I have planned for v2 (there are more that I haven't listed). Also, I've gotten several requests to keep HS simple to use. That has been my intent from the beginning, and has not changed. I am also making it as efficient as possible, in speed, in database size, and in code size. For instance, many users have requested prices and aisles to be recorded per store. This would make the database significantly larger. Many other users have requested that the database be kept very small and efficient, because they don't care about prices or aisles. So, I have carefully designed the database format to be flexible. For instance, if you choose to use the per-store price feature, your database will get bigger. But those who don't want that feature will not be wasting memory.

Features Already Finished:

  • Attach a Note to an item.
  • Taxable checkbox, user-definable sales tax rate.
  • Show both total price of items purchased so far, and estimated total cost of all items in the current list.
  • Priority.
  • Due dates.
  • Record date of purchase.
  • Automatic sorting (the list will stay sorted instead of needing resorted whenever you add items).
  • Allow decimal quantities.
  • Allow user-defineable "units" (e.g., Description = "meat", Quantity = 0.5, Unit = "kg", Price = 3.99 per kg).
  • User-definable currency symbol.
  • In number fields, automatically popup a numeric keypad/calculator.
  • Redesigned database format.
  • and more that I forget...

Features Planned or In Progress:

  • Multiple lists.
  • v2 is intended to be able to replace the ToDo app. Obviously it will not work the same as the ToDo app, but it is a complete superset of ToDo's features (except no Conduit -- see below for more info).
  • Import/Export from MemoPad, ToDo, or other HandyShopper databases (yes, you will be able to import your existing HandyShopper 1.x database -- and I've carefully designed the new database format so future versions won't need an importer to upgrade the database).
  • Reminders.
  • Impulse Date — to curb impulse purchases, for years I have written down the date that I see something and how much it costs. I wait a week or two, and if I still want it and I think it's still worth it and I really can afford it, then I buy it.
  • Named aisles (optionally set up aisle order per store).
  • Recurring items.
  • Copy items from one list to another. Have "master" lists, and copy items from master lists into other lists.
  • More than 15 stores.
  • IR beaming.
  • Maybe even IR printing.
  • and more...
  • and yes, I am taking great care to ensure HS remains small. For instance, importing and exporting will done by a separate app. So people who don't plan to use importing or exporting (myself, for instance) don't have to waste tons of memory.

Conduit

I am not planning to write a conduit to HotSync HandyShopper's data and edit it on the PC (and definitely not for Mac). The HandyShopper lists will of course continue to be backed up when you HotSync, though.

Why not, you ask? Because the Conduit SDK costs a few hundred dollars, and HS is free. Therefore I am a few hundred short of buying the Conduit SDK. If I personally had need of a conduit, I might spring for the SDK out of my own pocket. But I don't, so I won't. Sorry! If someone donates a Conduit SDK, I'll write a simple one that can generate a CSV file (which can be imported into all kinds of apps, such as Microsoft Excel, Microsoft Access, and most non-Microsoft apps). Or maybe someone will volunteer to write such a simple Conduit.


Why was HandyShopper Created?

I downloaded JShopper, by Land-J Technologies, and was amazed at the $15 shareware fee for it. So I wrote a similar (but slightly superior, I believe) shopping list program over the course of about 2 weeks during my free time (Unfortunately, since I have an almost pathological aversion to writing documentation, it took me over a month to write even this simple documentation, and you'll notice I didn't quite finish it!).

HandyShopper is a few thousand bytes smaller than JShopper, each record uses less space, and has the same set of features as JShopper, plus more. By the way, HandyShopper works with the PalmPilot's Find command (JShopper does not).

I have lots of ideas for v2.0. If you find HandyShopper useful (or if you find the source code useful), remember to send me a postcard.

For what it's worth, I apologize to Land-J for making HandyShopper available for free. My reasons are (1) I've been in the shareware business before and decided it's more work than it's worth, (2) I wanted to make HandyShopper's source code publically available to serve as sample code for a relatively sophisticated use of tables on a PalmPilot, and (3) since HandyShopper is free, I don't have to offer user support!


Source Code

I suspect the source code for HandyShopper will be useful to many people.

When I was starting to program for the PalmPilot, it seemed the big question on the newsgroups was "how do I program tables?". It's very hard to find good source code for programming tables. I've done lots of interesting stuff with tables, and my code is not entirely uncommented.

The HandyShopper source also contains examples of "creating a hidden Field and using it to manipulate text". Several useful debugging aids are also included (a collection of Assert and Panic macros, plus a makefile that conditionally links the alert resource for the asserts, so it's only built/linked in your debug build). Also, some simple memory leak detection (note: it only tracks MemPtrNew and MemPtrFree).

HandyShopper was created using the Win32 GCC 0.50 PalmPilot SDK.

If you find the source code helpful, I'd like to know! Please mail me a postcard. Alternatively you can email me, but remember to send that postcard!


Where to Find the Latest Version

The latest version of HandyShopper can always be found on PilotGear HQ. Or, download it directly from here (if this link does not work, try PilotGear HQ).