PalmOS Hosted Programming Languages: Using the Palm as a Development Environment David Mertz, Ph.D. Andrew Blais, Ph.D. Gnosis Software, Inc. June, 20001 When most people who think of it at all think of developing PalmOS application, they imagine writing C/C++ code on a desktop, then cross-compiling to the PalmOS. But, there is a whole other approach to PalmOS development. The products we look at in this article are all complete programming languages and development environments that can run entirely on a Palm handheld, all the way from program editing to final run. For mobile programmers, new possibilities are opened by these tools. INTRODUCTION ------------------------------------------------------------------------ At first brush, the compact physical form of a PalmOS handheld leads one to think of it a device dedicated to a few pre-packaged applications. But appearances can be deceiving. A PalmOS handheld is actually a moderately powerful computer in its own right--with more memory and CPU power than many early computers the authors, and readers, have used and owned (and more than many embedded systems). In fact, using the right tools, a PalmOS handheld can act as a complete program development environment--allowing customization of application functionality without the need for a desktop PC. The Palm is a rather unusual device for people used to programming desktop computers--whether MacOS, Windows, Unix/Linux, or other environments. In a lot of ways, the architecture will be more familiar to embedded programmers. In particular, in almost ironic juxtoposition to the Unix philosophy of "everything is a file," the PalmOS wholly lacks the concept of a file. This means that there are no special files for STDIN, STDOUT and STDERR. But, even more interestingly, it means that there are no -files- in which to store source code for interpretation/compilation. The route most of the development environments we look at take to this "problem" of missing files is twofold. On the one hand, most PalmOS-hosted IDEs have their own mini-editors to run one-shot code (sort of like one-liners in Perl or other script languages). But, on the other hand, most of these IDEs utilize the PalmOS Memo Pad to compose persistent programs. Program source "files" are identified by Memo Pad category and/or by special memo naming conventions. After looking at Pippy in another article (see Resources), we were particularly curious about how different PalmOS programming environments handled floating point and various higer-order mathematical functions (Pippy came up short here). We were also interested in the types of input and output (e.g. forms) provided by different environments. HOTPAW BASIC ------------------------------------------------------------------------ HotPaw Basic is one of the two Basic implementations we'll look at in this article. HotPaw claims to implement over 95% of the ANSI/ISO Basic Programming Language Standard. As well, HotPaw supports most GW-Basic functions and statements. As with other modern versions of Basic, HotPaw uses structured programming constructs rather than the old-fashioned line numbers and GOTOs (beloved by one of the present authors). HotPaw supports color; custom forms and dialogs; serial, IR, and IP communication; access to several database formats; and both double precision and transcendental mathematical functions (using the LGPL 'MathLib.prc', which is also used by other programming environments). There is a short tutorial on HotPaw and some examples available at the HotPaw website. We found it easy to install and use HotPaw. Knowing a little Basic opens the possibility of writing your own PalmOS applications for the Palm, on the Palm. In order to install HotPaw, you will need to install the file 'yBasic.prc' by the means usual to your desktop platform. You will probaby also want to install 'MathLib.prc' (version 1.1+), which you need to obtain from a separate site (see Resources). 'yBasic.prc' itself is the virtual machine which allows you to run either source code files from Memo Pad or bytecode compiled applications (the applications can have their own icon, and run without the HotPaw interactive interface). The distribution has a few extra helpers and samples, but they are not strictly required. One of the nicest things about HotPaw is nice form support. You can use the 'form()' function to define a few basic parameterized input/output forms. This makes it easy to make a PalmOS GUI, at least for simple applications. With a little bit more work--but not too much--you can create more customized forms, and even output graphical elements to the screen (lines, shapes, pictures). SMALLBASIC ------------------------------------------------------------------------ SmallBASIC is another Basic environment, this one under GPL license and also available for Linux/SVGALib and Linux/SDL environments. Like most of the development environments we review, SmallBASIC is a code interpreter, rather than a native compiler. SmallBASIC echos the feel of 1986--it refers to "files" and VGA colors, it uses line numbers and GOTOs, and it even recreates the F-KEY prompts of IBM-PC ROM BASIC. All this may sound crude, but actually SmallBASIC has one of the better development interfaces of the IDEs reviewed here. Even though there is no filesystem on the PalmOS, SmallBASIC's sophisticated built-in source code editor uses menu options for "File Save", "Save As", "Close", and "Open". This built-in editor allows for larger documents than Memo Pad supports, it has "search", "goto line" and "search again" options, clipboard support, and an unique online help system. Installing SmallBASIC is pretty much the same as installing HotPaw. You just install the 'sbpad.prc' and 'MathLib.prc' files that come with the distribution archive. After that, run SmallBASIC from its icon, and create and run scripts using the SmallBASIC interface. We do wish that SmallBASIC was a bit stronger on documentation--like many free software projects--or at least on English language documentation (Greek and Japanese are better supported). SmallBASIC supports a good variety of functions; mostly the same ones as GW-BASIC and QBASIC, actually. You can draw graphic primitives to screen, create sounds, output texts in different fonts, get keyboard input, and basically everything you need for a useful application. We do wish that the underlying language used more modern structured programming techniques (OOP and FP are two much to wish for), but SmallBASIC is still a good way to quickly write ad hoc Palm-hosted applications. POCKETC ------------------------------------------------------------------------ PocketC is a C-like language for the PalmOS, with versions of the same compiler available for Win32 and WinCE. The Win32 "Desktop" version lets you target PalmOS and WinCE handhelds. But we are interested in the Palm-hosted version here. PocketC operates much like most of the languages we have looked at in that it provides its own runtime environment, which amounts to a virtual machine to interpret PocketC compiled bytecodes. The language is basically C, but a number of functions for the Palm, and a few C++ syntax conventions were added. You -do- also get some features typical of bytecode languages, such as a string data type and garbage collection. Being a PalmOS application, some extra functions for graphics, sounds, database I/O, and form I/O are included in the "standard library." Writing an application consists largely of calling these Palm-specific functions, but with flow control in a familiar C style. The environment for PocketC is generally similar to the other IDEs we have looked at. As with those, the Memo Pad is used to store source code. You can even use the Memo Pad to store '#include' headers. Unlike some of the "fully interpreted" languages, PocketC requires a separate compilation step before you can run an application; but you can do this compilation right within the same interface (and when you do it once, the bytecode sticks around). One nice touch to PocketC's interaction with the Memo Pad is that if there is a source code error, PocketC gives you the opportunity to jump straight to the error and highlights it. While PocketC is nice for C programmers, it seems to us that C is inherently more verbose than this niche requires. The high-level functions, string types, and garbage collection of PocketC save a bit of code length. But if you need those features (which you -do- want for Palm-hosted quick application development), why not use a language like Basic, Scheme or Python, rather than one whose syntax is designed around low-level efficiency? Nonetheless, PocketC is quite nicely done, and tastes in programming languages are largely a matter of personal faith and devotion. ONBOARD C ------------------------------------------------------------------------ OnBoard C really aims at a different target than the other development environments we review. It supports true native compilation of source code to PRC executables or HackMaster hacks, rather than using a virtual machine and bytecodes. Moreover, OnBoard C is a real project-based IDE, with a choice of source code and resource editors, and the ability to include a variety of "files" in a given project. The source code editors supported by OnBoard C include pedit, pedit32, QED and SmartEdit; of course, you can just use Memo Pad too. The applications you create with OnBoard C can, therefore, be distributed without including any sort of runtime or library (other than the Palm ROM's API). Developers who use OnBoard C will usually also want to get RsrcEdit, which is a resource editor. RsrcEdit allows you to create forms, text strings, bitmaps, menus, and other GUI elements you might want to call from your OnBoard C applications. Like OnBoard C, RsrcEdit is entirely Palm-hosted. Developers whom OnBoard C appeals to will generally be people who are already pretty familiar with the ins-and-outs of PalmOS development--it is not as good for people who just want to bang out a quick custom application. Obviously, you get a lot faster applications, and a lot more low-level control, using ONBoard C than you will with other IDEs that are Palm-hosted. The price for speed and control is verbose and explicit source code, and the need to hand-tweak resources. POPLET KIT ------------------------------------------------------------------------ The Poplet Kit is an interesting creature. Most of the IDEs reviewed here are basically full-cycle write/compile/run environments. Poplet Kit, however, does not allow you to -run- scripts within its environment (nor is it meaningful to do so, in most cases). Instead, each "poplet" that is created and enabled within Poplet Kit adds enhanced capabilities to -every- PalmOS application. This is much like what HackMaster hacks do, but with a friendly and interpreted language. To call a poplet in an application, you just call up the PalmOS Command Bar. For many poplets, whatever text is highlighted will act as the input for the poplet (e.g. computing a calculated expression, or reformatting some selected text). The language of Poplet Kit is called Handscript, and is similar to Javascript. The OOP features of Javascript are left out, but the syntax and function semantics are the same. Some modularity is added by grouping functions into poplets. As well, a few shortcut commands for using PalmOS features are added. Basically, if you know Javascript, Handscript will be easy to work with. The interface for Poplet Kit is well done. A number of views of your poplets are presented, similar to the different views in an application like DateBook+. In one area you can read documentation about a poplet; in another you can browse functions; in another you can edit function definitions. You can also quickly enable or disable each of the installed poplets (a good sample collection comes with the system). Even though Poplet Kit might strike one as a mere system enhancement rather than a programming environment, the programs you can run using Poplet Kit are just as general as with the other languages/IDEs. You can input anything you want by highlighting relevant inputs, and anything can be output to the active application and/or presented in dialogs. In terms of practical usage and interaction with the rest of your Palm, Poplet Kit even shines above the other IDEs. CONCLUSION ------------------------------------------------------------------------ Check out Michael Winikoff's page (see Resources) for even more Palm-hosted IDE's than we looked at. Some "exotic languages" like Forth and Lua are included in the list. We did make a start at looking at the environment LispMe, which is a Scheme for the PalmOS. Unfortunately, at least on our test platforms, LispMe was too unstable to really examine (constant resets); this might be a problem with particular ROM/OS versions. But those we have not yet looked at might still interest readers. RESOURCES ------------------------------------------------------------------------ An earlier article I wrote covered the programming environment Pippy, which is a version of Python for the PalmOS. That article can be found at: http://gnosis.cx/publish/programming/pippy.html Dr. Michael Winikoff has compiled an excellent list of links to development environments for the PalmOS. Winikoff includes in his page, titled "PalmPilot Software Development - Alternatives to C", both PalmOS hosted and PC hosted software development kits (SDKs): http://goanna.cs.rmit.edu.au/~winikoff/palm/dev.html HotPaw Basic can be found at the below link. There is a free demo, and the full system can be purchased for a very moderate $20: http://www.hotpaw.com/rhn/hotpaw/ SmallBASIC can be found at: http://smallbasic.sourceforge.net/ Information about PocketC can be found at the below link. There is a free (time-limited) demo there: http://www.orbworks.com/PalmOS/index.html To purchase PocketC (for a modest $18.50), head to PalmGear: http://www.viaweb.com/pilotgearsw/orbworks.html The homepage for OnBoard C is below (the cost is $15): http://www.individeo.net/OnBoardC.html If you use OnBoard C, you will probably want to pick up the accompanying resource editor, RsrcEdit (also $15): http://www.individeo.net/RsrcEdit.html Information on the Poplet Kit can be found below. Buying it costs $20, or you can download a demo version: http://www.handwave.com/handwavepoplets.html LispMe can be found at: http://www.lispme.de/lispme/ MathLib.prc can be obtained at: http://www.radiks.net/~rhuebner/mathlib.html ABOUT THE AUTHORS ------------------------------------------------------------------------ Andrew Blais divides his time between homeschooling his son, writing for Gnosis, and teaching philosophy and religion at Anna Maria College. He can be reached at onlymice@gnosis.cx. {Picture of Author: http://gnosis.cx/cgi-bin/img_dqm.cgi} David Mertz worries that if the density of transistors doubles every eighteen months, then he may lose his next computer in a haystack. David may be reached at mertz@gnosis.cx; his life pored over at http://gnosis.cx/publish/. Suggestions and recommendations on this, past, or future, columns are welcomed.