HandyShopper v1.7 (updated 06/30/99)

Shopping List Tool for the Palm Computing Platform
by Christopher Antos, Copyright © 1998-1999, All Rights Reserved.

To install HandyShopper, or to upgrade from a previous version of HandyShopper, simply use the Palm Install Tool to install HandyShop.PRC, and then HotSync. If you are upgrading, v1.7 will use your existing database (and you do not need to delete HandyShopper before upgrading).

Table of Contents

What's New -- [Updated 06/30/99]
What is HandyShopper?
Quick Start: How to Shop with HandyShopper
HandyShopper's Features and How to Use Them
The Shopping List
Setting Preferences
Import/Export -- [New since v1.05, 12/12/98]
v2.0 - Info on Next Version -- [Updated 06/30/99]
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>).

A big "Thank You" to everyone who has sent a postcard, you've sent some really great cards (and my list of desirable vacation spots is growing, too)! 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.7, 06/30/99

Not much has changed since v1.6, but here it is:
  • NEW: The currency symbol is user-definable.
  • FIXED: If there were not enough items to fill the view, then for large databases HS was very slow filling and repainting the view. (A while ago, a user reported this; my apologies for explaining it away!).
  • FIXED: It was impossible to select text in the Lookup field.
  • FIXED: Tapping on the name of a store in the Stores list in the Details dialog did not redraw the checkbox correctly.
  • FIXED: Changing which stores an item was associated with did not update the view correctly.
  • FIXED: Reinstalling the .PDB from a backup would crash.
  • GERMAN: German translation by Ronald Höllwarth.

Release Notes for v1.6, 03/30/99

A lot has changed. HandyShopper now survives the Gremlins test tool running overnight. It's been over 3 months since the last maintenance release, but my day job was really busy and I just didn't have time to make an official release. As always, v1.6 is fully compatible with data from previous versions of HandyShopper. Also, most of the free time I spend doing Palm programming is spent on HandyShopper v2.0, so reset assured it is coming along slowly but surely.

Release Notes for v1.05, 12/12/98

I've told many people I would not add any new features to 1.x. Apparently I was lying, because I've added 2 major new features, and 2 minor ones.

Release Notes for v1.04

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.


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

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!

To change various settings (such as which columns are displayed, and other settings) you can tap the Menu circle next to the graffiti area, and choose Options and then Preferences.

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 — You can have up to 15 stores. The list of stores can be customized by choosing Options/Edit Stores from the menu.

Other Preferences — The other settings for HandyShopper can be changed by choosing Options/Preferences from the menu.

Importing and Exporting

Exporting to MemoPad:

You can export the current view in HandyShopper to a MemoPad memo:
  1. Tap the Menu area next to the graffiti area.
  2. Select "Options", then "Export to MemoPad..."
  3. Check the optional fields that you wish to include in the exported list.
  4. Tap the "Export" button.
When exporting, HandyShopper creates a new MemoPad memo in the Unfiled category, and makes it the first memo.

Importing from MemoPad:

You can import a list from a MemoPad memo. The list is imported into the current category and current store.
  1. Tap the Menu area next to the graffiti area.
  2. Select "Options", then "Import from MemoPad..."
  3. Select the memo from which to import the list.
  4. Tap the "Import" button.
When importing, the new items are placed in the current category (or Unfiled if "All" is the current category). If you are in the "Need" view, then the new items are also marked as needed items. The items are also associated with the currently selected store (if "All Stores" is selected, then the new items are not associated with any stores).

Memo Format for Importing

HandyShopper currently support two different basic formats for the list that can be imported.
Format 1: Bullet Marks
This is the format that HandyShopper uses when it exports a list to the MemoPad.
  1. Each item begins with a bullet mark, which is either a dash ('-') or the bullet character (the graffiti stroke is backslash, dot), followed by a space.
  2. Next comes the Quantity, which is a number followed by '@'. (This field is optional; if you omit it, the quantity is set to 0).
  3. Next is the Price, which may or may not begin with a '$'. (This field is optional; if you omit it, the price is set to $0).
  4. Next is the Aisle, which must be 'a:' followed by a number (for instance, 'a:3' means aisle 3). (This field is optional; if you omit it, the aisle is set to 1).
  5. Anything following the above fields is put into the Name field. Line breaks are considered to be part of the Name field, unless they are immediately followed by a bullet character (or dash).
My shopping list:
- cereal
- 2@ 1.49 Pringles
- 5.99 batteries
- a:27 sci-fi books
- 4@ .99 2-Liter bottles of pop
- 3@ a:4 cookies for party
party is at Greg's house
(this is 3rd line of party item)
- 14.99 box of logs for fire
Format 2: No Bullet Marks
If you do not use bullet marks, then line breaks are used to determine when to start a new item. Other than that, this format is the same as Format 1.

3@ towels
$5 cat food
1@ $5.99 AAA batteries
2@ $1.89 a:3 soup

Known Limitations

v2.0 - Info on Next Version

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.

Update on Progress of v2.0 [Updated 06/30/99]

v2 is coming along slowly but surely. I am definitely going to release a v2, but please be patient because it will take several months. I've signed up a team of beta testers, and things are going great so far.

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:

  • Allows up to 100 stores.
  • If one or more stores are defined and you create a new item that is not associated with any stores, then HandyShopper will warn you.
  • Multiple lists (Find works across all the lists, too).
  • 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.
  • Supports aisles 0 through 200.
  • Record date of purchase.
  • Automatic sorting (the list will stay sorted instead of needing resorted whenever you add items).
  • Sort by up to three fields, in ascending or descending order.
  • Allow decimal quantities.
  • Allow user-defineable "units" (e.g., Description = "meat", Quantity = 0.5, Unit = "kg", Price = 3.99, so the actual price of what you'll purchase is 3.99 times 0.5).
  • User-definable currency symbol.
  • In number fields, automatically popup a 4-function numeric keypad/calculator with memory.
  • Redesigned database format.
  • Import/Export to MemoPad.
  • Choose font.
  • Optionally alerts you if you create a new item and neglect to associate it with any stores.
  • A "Best Buy" wizard that lets you enter the price and quantity of two products, and calculates the per-unit prices and says which is cheaper. For instance, if you see a box of 6 microwave popcorn packets for $3.59, and a box of 10 for $5.29, which is cheaper? Answer: product A is $0.5983 per packet, product B is $0.529 per packet, so product B is cheaper.
  • and more that I forget...

Features Planned or In Progress:

Note, not all of these will necessarily be in v2. Some may bein the next version after that, or may end up being not feasible to implement.
  • Keep track of aisle and price for each store (because this feature can significantly increase the database size, and because I personally will not use it, I am making this an optional feature which is OFF by default).
    **NOTE** This feature is certainly possible to implement, but I'm facing some difficult problems. For instance if you sort by aisle, then every time you change stores the entire list must be resorted. That's not exactly speedy on these handheld devices... There are ways around this, but they impact the user experience and make it non-intuitive. I'll see what I can come up with.
  • 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 superset of ToDo's features. (this is almost complete).
  • I purchased CodeWarrior, so I will probably write a Win32 Conduit to allowing importing and exporting CSV files. (CW was $369 - HS is freeware I write as a hobby, so talk about an expensive hobby...!). Either that, or I will write some other kind of converter program to support CSV files, and allow easy data entry on the PC.
  • Undo -- it's too easy to accidentally check off the wrong item, or double-tap and accidentally check off two items. The Undo command will probably allow you to undo checking off the most recent 2 or 3 items.
  • 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 (maybe 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.
  • IR beaming. (This is especially important to me; my wife and I want to be able to share a shopping list and synchronize with each via IR).
  • IR printing.
  • and more...

Features NOT Planned:

  • Show a flat list with a separator for each store. There is no reasonable way to do this given the fact that a given item may be associated with multiple stores. Sure, I could write this feature, but it would be so S...L...O...W that noone would use it anyway.

Source Code

I am no longer including the source code for HandyShopper. However, it is still freely available. If you want it, just e-mail me and ask for it (I will e-mail you a .ZIP file containing the full source, which may or may not compile for you depending on what tools you have available).

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, so maybe you'll find it useful.

HandyShopper was originally created using the Win32 GCC 0.50 PalmPilot SDK (but its makefile is intended for use with the NMake from Microsoft Visual C++ 5.0 or higher). I now use CodeWarrior R5 to compile it, but I still use PilRC to compile the resources, and I use the RCPalm post-linker (which I wrote) to link the resources into the .PRC file.

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 follow this link to PilotGear HQ's information page on HandyShopper: