Click here to Skip to main content
15,881,172 members
Articles / Mobile Apps

An introduction to the Palm platform

Rate me:
Please Sign up or sign in to vote.
4.83/5 (9 votes)
7 Nov 2002CPOL7 min read 124.9K   45   21
An overview of the Palm world, including a list of C functions which have preferred equivalents in PalmOS

Introduction

Welcome to this, the first in a series of articles on Palm development. So why Palm ? In my case, the decision was customer driven, however the reason for the customers decision was that the Palm platform is widely accepted, inexpensive and easy-to-use. Although I was initially cynical, I have to say that I have come to love the platform also. For me as a developer the reasons are somewhat different. The Palm platform gives me the opportunity to write code for a platform where speed is not so easy to come by, where resources are limited, and where code needs to be tightly written in order to be usable at all. I hope that excites more people than it scares away, it's certainly not all bad news. While the platform is certainly not as powerful as your desktop PC, you still are able to develop code on your desktop, using modern tools and compilers. The purpose of this first article is simply to provide an overview of Palm development, and discuss some of the options that you will have if you decide to develop for it.

I can't afford a Palm

It doesn't matter if you don't have a Palm handheld unit, because the people at Palm kindly provide a Palm emulator which runs on your desktop, is integrated with common IDE's, and even provides debugging support. The bad news is it does not come with any ROM's, which basically means it's useless. Palm provide a developer program through which you can gain access to ROM's, but if you are outside the US this involves filling in a form, which I sent off months ago and got no reply. The emulator does come with a utility for downloading a ROM to your desktop, which is what I eventually did. The link for the emulator is with the rest of the links, at the end of the article.

Languages

It is possible to code for palm in many languages, including Java, basic, C++, or using a number of R.A.D. environments. However, as I have already said, the palm platform is not highly powered, and for that reason I choose to develop for it in straight C. There are a number of C++ class libraries which seek to provide a MFC style wrapper around the C API. I chose to reject this approach even when it claimed to be lightweight because to do so would cut me off from the mainstream in terms of literature and support, and tie me to a product whose lifespan I could not predict.

Compilers

There are a number of compilers available for palm development for Windows. The two most common compilers are probably CodeWarrior and GCC. There are a number of other compilers available, most of which use GCC to do the actual compiling. Of those I personally chose to purchase developer studio from Falch.net. My reasons were that the IDE is very similar to Visual C++ 6 which made it easy to learn to use, and I found it much more intuitive than CodeWarrior. However, that does not mean that my choice should be your choice, and I recommend you investigate the various compilers available. CodeWarrior has the advantage of being the industry standard for palm, GCC has the advantage of being free. So long as you choose a compiler which will build palm programs written in C, you will be able to follow my tutorials. Certainly, if you're looking for a free option, the demo of the Falch compiler should do you for much of the tutorials.

C API

I guess if there's one point I intend to labour, it's that developing for palm means writing optimized code. This is so much the case, that the palm API provides alternatives to functions from the sea runtime library, in order to avoid code bloat caused by linking to that library. The following table lists a number of C functions and their palm equivalents. Print this out and put it somewhere prominent. You will refer to it often.

C FunctionPalm API Equivalent
strlenStrLen
strcpyStrCopy
strncpyStrNCopy
strcatStrNCat
strcmpStrCompare
strncmpStrNCompare
itoaStrIToA
strchrStrChr
itoaStrIToA
strchrStrChr
sprintfStrPrintF
svprintfStrVPrintF
mallocMemPtrNew
freeMemPtrFree
memmoveMemMove
memsetMemSet
memcmpMemCmp

You will notice that unlike the standard library, the Palm functions feature a lot of capitalisation, and that the string functions all begin with Str, and the memory functions all begin with Mem. This is a common theme in Palm development, and you will find that each library in the Palm OS has its own prefix for all functions found in it.

Your developer ID

Another quirky thing about Palm development is a simple fact that your hard drive is your RAM. This is actually an area where performance can be good, because to search through your record set does not require any mechanical process, simply locking of areas of memory and direct access. This does however mean that in theory your application has access to all of the programs and data on your unit. The reason this is not the case is a mechanism whereby you need to know some information about a database before you can gain access to it records. Part of this mechanism involves the assignment of a unique, 4 letter ID. The process is simple, it just involves entering your proposed ID on the Palm site, where you will be advised if the ID has been assigned to you or was previously assigned. The ID must be in capital letters, as all lowercase letters are reserved for use by Palm.

int main()

As you may be aware, the Windows API expects a function called WinMain, rather than main as its initial entry point. The Palm API continues the tradition, its entry point is known as PilotMain. The reason for this is that the original Palm product was called the PalmPilot. Believe it or not, I finally going to show you some code.

Hello Palm Pilot

UInt32 PilotMain (UInt16 launchCode, MemPtr launchParameters, 
                                        UInt16 launchFlags) 
{ 
    EventType event; 
    if (launchCode == sysAppLaunchCmdNormalLaunch) 
    { 
        WinDrawChars( "Hello, world!", 13, 55, 60 ); 
        do 
        { 
            EvtGetEvent( &event, evtWaitForever ); 
            SysHandleEvent( &event ); 
        } while (event.eType != appStopEvent); 
    } 
    return; 
}

As we delve deeper into the Palm API in the coming articles, you will come to realize how much of a barebones example this is, nevertheless it is customary to begin teaching with such example, and who am I to break tradition ? Even so, there is much to be learned from this example. For starters, the Palm system is event driven. I'm sure this hardly comes as a surprise. What may be more surprising, is that the Palm defines its own types. The reason for this is simple: the Palm can be developed for on any system that offers a C compiler. That being the case, it is better that the Palm API provide guarantees regarding the size of numeric variables in particular, but also the nature of variables in general. The Palm API often appends the word 'type' to its types, as in the EventType in this example. The event type is simply an event, which the API catches and in a full example passes to the menus and our own event loop as well as to the system. In this case we merely check the launch code to see if the application is being launched normally, draw our string and run a minimal event loop so that our program will respond when the buttons are pressed to move to a different program or back to the main screen. The next article will introduce forms development, that is to say building a GUI and an event loop to allow user interaction.  I know it's a lot of work to get to the point where you have everything you need and can build Palm apps, I promise you that it's worth it.  I've had a lot of fun getting to the point that I can write these articles, I hope you have as much fun joining me.

Links:

  • www.palmos.com - This is where to go for the Palm SDKs and to sign up for the developer program to get the ROMs for the emulator. The emulator and other tools are also available here, but you may get them with your compiler
  • Code Warrior - The standard for Palm development, but in my opinion a little pricey and hard to use
  • www.falch.net - In my opinion an excellent product, comes with the emulator, etc. and the demo is not time limited ( although it is limited in other ways )
  • news://news.falch.net - The people who made my favorite compiler also host a news feed full of information about Palm.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
Australia Australia
Programming computers ( self taught ) since about 1984 when I bought my first Apple ][. Was working on a GUI library to interface Win32 to Python, and writing graphics filters in my spare time, and then building n-tiered apps using asp, atl and asp.net in my job at Dytech. After 4 years there, I've started working from home, at first for Code Project and now for a vet telemedicine company. I owned part of a company that sells client education software in the vet market, but we sold that and I worked for the owners for five years before leaving to get away from the travel, and spend more time with my family. I now work for a company here in Hobart, doing all sorts of Microsoft based stuff in C++ and C#, with a lot of T-SQL in the mix.

Comments and Discussions

 
Questionflach.net??? Pin
freddy1ca3-Aug-04 22:34
freddy1ca3-Aug-04 22:34 
AnswerRe: flach.net??? Pin
Christian Graus4-Aug-04 10:59
protectorChristian Graus4-Aug-04 10:59 
GeneralPlease update the pilot.programmer.* news server! Pin
Guilherme Hazan30-Nov-03 14:53
sussGuilherme Hazan30-Nov-03 14:53 
GeneralRe: Please update the pilot.programmer.* news server! Pin
Christian Graus30-Nov-03 15:35
protectorChristian Graus30-Nov-03 15:35 
So Falch is completely dead then ? How sad.


Christian

I have drunk the cool-aid and found it wan and bitter. - Chris Maunder
GeneralChristian hope you don't find this question to OT... Pin
Code4Food4-Dec-02 6:41
Code4Food4-Dec-02 6:41 
GeneralRe: Christian hope you don't find this question to OT... Pin
Christian Graus4-Dec-02 8:46
protectorChristian Graus4-Dec-02 8:46 
GeneralFach.net now Moribund (04-2004) Pin
k6whp30-Apr-04 11:36
k6whp30-Apr-04 11:36 
Generalexpect the next one of this series Pin
ruihuahan12-Nov-02 14:02
ruihuahan12-Nov-02 14:02 
GeneralRe: expect the next one of this series Pin
Christian Graus12-Nov-02 14:34
protectorChristian Graus12-Nov-02 14:34 
GeneralGreat idea Pin
Massimo Colurcio9-Nov-02 8:03
professionalMassimo Colurcio9-Nov-02 8:03 
GeneralRe: Great idea Pin
Christian Graus9-Nov-02 10:39
protectorChristian Graus9-Nov-02 10:39 
GeneralWinCE Pin
Mario M.9-Nov-02 5:11
Mario M.9-Nov-02 5:11 
GeneralRe: WinCE Pin
Christian Graus9-Nov-02 10:38
protectorChristian Graus9-Nov-02 10:38 
GeneralNice for PalmOS starters Pin
Nish Nishant8-Nov-02 14:02
sitebuilderNish Nishant8-Nov-02 14:02 
GeneralRe: Nice for PalmOS starters Pin
Christian Graus8-Nov-02 15:07
protectorChristian Graus8-Nov-02 15:07 
GeneralRegistering for access to Palm ROMs Pin
Gavin Greig8-Nov-02 0:30
Gavin Greig8-Nov-02 0:30 
GeneralRe: Registering for access to Palm ROMs Pin
Christian Graus8-Nov-02 9:16
protectorChristian Graus8-Nov-02 9:16 
GeneralRe: Registering for access to Palm ROMs Pin
GJL Global Roaming8-Nov-02 10:10
GJL Global Roaming8-Nov-02 10:10 
GeneralRe: Registering for access to Palm ROMs Pin
Christian Graus8-Nov-02 10:15
protectorChristian Graus8-Nov-02 10:15 
GeneralRe: Registering for access to Palm ROMs Pin
Gavin Greig10-Nov-02 21:54
Gavin Greig10-Nov-02 21:54 
GeneralRe: Registering for access to Palm ROMs Pin
Christian Graus10-Nov-02 22:17
protectorChristian Graus10-Nov-02 22:17 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.