When I got my Acer Aspire 5622WLMI notebook, PODS 1.1 was no longer around – so PODS 1.2 was the only option I had, despite it scoring rather average in my “first impressions – hands on report“. Anyways, the program I am currently working on demands loads of bitmaps – and this is where good old OnBoardC paired up with TbmpEdit really leaves PODS in the dust.

This is a rant…I am pissed…please forgive the aggressive wording

The first and probably biggest nuissance is the way how the storage for the bitmap data is implemented. PODS uses XML files as resource storage data – and this is where the fun starts. Each bitmap “object” is assigned one ore more bitmap files on the harddisk to store its bitmapped data – this looks sort of like this:

[bitmap_resource RESOURCE_ID="1001"]
[bitmap_density] 144 [/bitmap_density]
[width] 32 [/width]
[height] 22 [/height]
[bit_depth] 1 [/bit_depth]
[bitmap_compression] NONE [/bitmap_compression]
[has_transparency] TRUE [/has_transparency]
[index] 0x00 [/index]
[has_color_table] FALSE [/has_color_table]
[bitmap_file] "./AppResources/Bitmap_1001-X2-1.bmp" [/bitmap_file]

So far, all of this is sensible and ok. However, if you change the ID for a bitmap, the fun starts – the files aren’t renamed automatically. So, the bitmap 1001 could still happily be using files called 1100. Now, when you create another bitmap(that originally gets the number 1100 again because it was free); the resource editor assigns the same bitmap files to the new one. So, you essentially have two different bitmaps that use the same bitmap file for storage..a surefire recipie to desaster.

Obviously, someone at PalmSource doesnt eat his own dog food. If the responsible dolt had tried creating a sensible application once; he would have immediately noted what kind of harebrained junk he has produced. However; he probably didnt for whatever reason(management stupidity? whatever…post it as a comment) – and now its good ol’ Hanna’s ‘job’ to point this out.

IMHO, the only way to create bitmaps sanely is to hand-edit the XML file. Really, thats why I have PODS and Windows XP for…

Just as a side note, I didnt quite manage to create 8bit paletted images yet, either.

Overall, the post IMHO says all about PODS 1.2 bitmap editing qualities. BTW, if you know the developer of the component – commenting on TamsPalm is free and anonymous…speaking up may pay out!

My home PC is a dual monitor “workstation” with a 19 and a 17 inch CRT. Don’t ask me why, but I can’t imagine having to go back to a single screen-having the app run on the right screen while coding on the left one is a great experioence, and so is having API documentation or a header file on the right screen while coding on the left(more on muilti-monitored PODS).

Anyways, CNET has just published an excellent writeup on stuff you got to keep in mind when doing dual montitros, and also have a nice little tutorial on how to make your hardware dual monitor capable:


Going multi-screen is a very common trend among programmers(as used CRT prices fall, no LCD for me if I can avoid it). Many of us have two, and plan for getting a third. However, PODS usually cannot go multiwindow and thus cannot go multi-monitor. That is, unless you are a TamsPalm reader.

Clicking Window->New Window will open a new, second windows that is on the same view as the current one. However, all editor tabs are closed. The second window can then be moved to wherever you wish it to be(its really comfortable with the NVIDIA tools, that is if you have an NVIDIA card as primary aka gaming one).

The two windows are permanetly synchronized with one another. So, if you open a file in both of them and change it in one of them, the changes are automatically reflected on the other screen. That is true multimonitor action…finally….

What do you think?

Technorati tags:

Everyone knows popup lists-and almost everyone who created resource files HATES creating them. This tutorial will try to take away the pain from popup lists and their creation in PODS!

First of all, open the Palm OS resource editor. Open the target form, and add a Popup trigger. Position it on the form, and LEAVE ITS PROPERTIES alone. Then create a list. The list’s ID must not be changed, accept it as ‘godgiven’. Then, unselect the Usable attribute of the list. If you are lucky, the resource editor will then bind the list to the popup trigger, the list’S ID will appear in the popup trigger’s properties.

From now on, the list and the trigger belong together and form a popup list. When a user clicks the popup trigger, the list becomes “usable” and appears exactly there where you placed it on the form. For example, if the popup trigger is at the bottom of the form and the list is at the top, it will appear at the top. Place the list’s upper border above the popup trigger for best results…

Any feedback?

One of the big strengths of integrated development environments is the wealth of functionality offered by their editors. PODS is based on Eclipse, which is a rather powerful environment. Today, we will show you how to integrate tasks into your source code files.

First of all, open the source file that you wish to modify in the editor. Then, right-click the margin next to the code and select Add Task in the form that pops up:
 Adding tasks to source code in PODS

On that form, you can give a name to the task and assign it a priority. After clicking ok, a little task icon will be shown next to the line affected:
 Adding tasks to source code in PODS

All tasks are gathered at the bottom of your PODS screen(click for bigger version):
 Adding tasks to source code in PODS

You may now wonder what those tasks are good for. But trust me, they are great for noting down stuff about code that NEEDS to be done, but cant be one right now. For example, you may need to adjust a call eventually, but cant do it right now because you are waiting for the new syntax..

What do you think?

Recently, we created a new PODS project. The AppResources.h file was renamed to another name, and the project failed to compile with various errors complaining about lack of rules to make a target.

The reason for this is PODS’s internal cache that stores compiled ‘object code’ so that it doesnt need to recompile it permanenetely. The cache also stores a list of files that can “affect” a file-and when one of this files gets lost, the cache goes bonkers.

Clicking build again and again dos not help-but one can delete the cache:

Click Project->Clean… and then choose the affected project. A quick click onto OK deletes the cache files, and the project will recompile cleanly when you hit Build the next time.

Cleaning a project can also be helpful if you changed the reource file without changing the accompanying source code files..

Any experiences?

Welcome back to Going CVS. It was a long time since we last had an update here, but as you know-stuff that rests isnt stuf that’s EOL;). In the last part of the column, we looked at how to set up a box with CVS:
Today, we will take a look at configuring it! The first thing that you will want to configure is the VNC server, as it allows you to access your server remotely from the network. Setting up CVS is very easy. All you need to do is click the Install Service entry in the srat menu, restart the machine, and presto-it already runs. After that, you need to click on the VNC icon at the bottom right of the machine and click on properties. You can set up a VNC password there, I advise you to use a long one than you can easily remember.

From now on, if a user is logged on, you can connect yourself to your VNC server with a VNC client.

On we go to CVSNT. Open the CVSNT control panel from the srat menu of your NT box(you can use VNC). Click Repository configuration, then click add. Choose the location, then copy the contents of the location text box into the name field. You will receive a few alert boxes, just click yes on all of them!

Now, CVS should be set up. In the next part, we will connect Eclipse to the server.
BTW, here are a few web sites with further hints on CVSNT:
http://www.mobilefish.com/developer/cvsnt/cvsnt.html(covers old version)

Recently, I decided to give CVS a try after quite a few readers told me that it is worth using. Since I want to have a “log” of my activities regarding CVS, I decided to abuse this blog to share it with other fellow developers who want to share the experience of using CVS with PODS…

Please do not attempt to follow this column if you have no idea of straightforward processes like installing apps. Many obvious things are left out-if you never set up a box before, please do not attempt it(or be prepared to ask questions via anonymous comments and google)

Anyways, the first thing is deciding about where to run the server on. I deecidd to juse an external server because it is less risky. The server does not have access to the internet(because my router has problems giving out IP’s to two boxen connected to the same port via a switch), and thus it will be less prone to viruses,… . In addition, the PODS box does not get bogged down with an extra task.

CVS is a Unix application. However, people who dislike Unix can still use it-there is a lovely server available for Wibndows NT from March Hare. My box has the following specs-you can for sure find a similar one(the processor is overpowered BTW) in your basement or at the flea market/ebay:

  • 350MhZ Pentium 2
  • 16 MB of SDRAM
  • 10 Mbit ISA network card
  • 4GB SCSI hard disk

Getting NT onto the box is no straightforward process. NT4 for sure looks like Windows 95, but it lacks Plug and Play,… . SO, you will need configuration floppies for every hardware that you intend to use. I found the configuration disk for my network card at the Driver Museum. Googling for the chip name(you may need to pull some sticker off) usually helps you out here.

Once you have the basic NT installation up and running, you need to prepare it for beeing able to run CVSNT. I installed the following patches onto my machine-generally, install everything that you can get(I could have forgotten one):

  • Service Pack 6a
  • Internet Explorer 6
  • Windows Installer

Then followed CVSNT and PalmVNC(for the desktop component). After you have that done, set up the network card so that your terminal can be pinged from other machines on the local network. I chose not to give the box DHCP IP obtaining or DNS, as that may make it more difficult for it to communicate with the net(it doesnt even have the standard gateway filled out). If there would be a working web server on it, people would for sure be tempted to abuse it as a surfing station..

So, thats it for today. Your machine is working, and all the servers are installed. In the next episode, we will discuss configuring VNC and CVSNT.

Since I am at my vacation house in tyrol now, I don’t have acces to my good ol’windows 2000 box with PODS 1.1 on it. PalmSource’s current offering is PODS 1.2-so, with much coding lust and little choice, this is what I took. Here are my first experiences after a few days of use:

The current machine is about 20% faster, and the project is a bit smaller. However, AutoCompletition really is MUCH MUCH faster now! Generally, PODS feels much zippier-compilation and startup really takes less time.

While it still can’t quite match Visual Studio 6′s IntelliSense, AutoCompletition seems to take quite a step forward here. It now provides much more useful results!

Here we have the first big bug. The PODS cannot connect to PalmOS 5 and 6 Simulator on a Windows XP SP2 machine, the application never reaches the simulator. This-obviously-makes PODS useless for a developer!

C compiler
The C compiler is bonkers, just plain bonkers. Code that compiled really well in PODS 1.1, now creates loads and loads of insane warnings in PODS 1.2. If you don’t handle all enumeration values in a switch statement, PODS refuses to compile. If you have an unusd function in a project, PODS refuses to compile. The list is long-thus, if you want to reuse existing code, this is not an option!

Resource editor
The resource editor was a discussion topic in the developer list for quite some time. Indeed, working with it is very uncomfortable. You select a new control, and it sometimes doesnt update the selection pointer. Thus, all the changes that you make go to a wrong control-this is lovely. Moving controls,… can be a painful process!

Overall, I would stay with PODS 1.1 if it works for you now-this upgrade is not sensational. The new release of the Palm OS Developer Studio adds a bit of speed-at an insane price. A C compiler that really is extremely picky about code, a resource editor that sometimes simply doesnt do what it is supposed to and a simulator that simply doesnt work are things that can make your life very very ugly fast. The speed increase is nice, people-but is speed really all that matters?

Please post your own experiences. Posting at TamsPalm’s is free and anonymous!
PalmOS Developer Suite 1.2

Meine ersten Eindrücke:

Etwa 20% Geschwindigkeitszuwachs, und Projekte werden kleiner. Auto-Vervollständigen ist viel schneller, und es wird auch schneller gestartet.

Nicht so gut wie IntelliSense von Visual Studio 6, aber es scheint einen Schritt vorangekommen zu sein. Es kommen bessere Ergebnisse!

Erster Fehler: PODS kann keine Programme zum Simulator für PalmOS 5 / 6 übertragen (Windows XP SP 2 Gerät). Nutzlos für Entwickler!

Code, der in PODS 1.1 wunderbar funktioniert bringt Warnungen, und es wird nicht immer kompiliert. Wenn man alten Code weiterverwenden will, ist es nicht empfehlenswert.

Der Ressourcen-Editor ist schon länger ein Thema in der Entwicklerliste. Kein optimales Arbeiten ist damit möglich. Es gibt Probleme beim Verschieben von Feldern, das Arbeiten macht nicht gerade Spaß.

Das Update ist nichts besonderes, wer also PODS 1.1 hat und bei dem es läuft, der sollte nicht wechseln. Es ist etwas schneller, dafür hat man Probleme mit dem C compiler, wenn der Code nicht 100% richtig ist, der Ressourcen-Editor funktioniert nicht und der Simulator auch nicht. Geschwindigkeit ist gut – aber nicht alles.

Senden Sie uns Ihre Erfahrungen!

This code was posted by Estêvão Samuel Procópio to the OnBoardC newsgroup. It replaces the malloc and free functions of regular C compilers, this can be useful when using code from books. Altough these two functions can easily be replaced by calls to MemPtrNew and MemPtrFree(with other functions, the parameters need to be switched), this code is very interesting and thus is beeing posted here. You know, one never reads enough code…

MemPtr malloc(UInt16 size) {
MemHandle h = MemHandleNew(size);
if (!h) return NULL;
return (MemPtr) MemHandleLock(h);

void free(MemPtr ptr) {
MemHandle h = MemPtrRecoverHandle(ptr);
if(!h) return;
ptr = NULL;

What do you think?
Dieser Code stammt aus der OnBoardC-Newsgroup von Estêvão Samuel Procópio Damit werden die “malloc and free”-Funktionen von C-Compilern ersetzt, was nützlich sein kann wenn man mit Quellcodes aus Büchern arbeitet. Obwohl man die Funktionen durch Aufrufe von MemPtrNew und MemPtrFree(mit anderen Funktionen und Parametern) ersetzen kann, ist der Code interessant. Man liest nie genug Code, wie Sie wissen…

MemPtr malloc(UInt16 size) {
MemHandle h = MemHandleNew(size);
if (!h) return NULL;
return (MemPtr) MemHandleLock(h);

void free(MemPtr ptr) {
MemHandle h = MemPtrRecoverHandle(ptr);
if(!h) return;
ptr = NULL;

Was denken Sie

Sometimes, PODS cancels the compiling process with an error message like this shown in the problems tab of the graphical environment:

*** [Project] Error 1 Project 3. September 2005 21:38:22

There is very little information accompanying such an error-at least for people who didnt discover the console tab of Eclipse yet. Well, no problem. There is a lot of tabs at the bottom of eclipse under the editor-and one of them reads console. If not, add it using (Window-Show View->Console) Clicking it leads to more-less random text garbage. Now, rebuild the project from scratch(Project->Clean…). The compiling process now be shown in the Console tab-and you can usually find an error message like this one here:

src/VfsSelect.o(.text+0x1e0):VfsSelect.c: undefined reference to `VFSOpenFile'
collect2: ld returned 1 exit status
make: *** [BinaryClock] Error 1

And indeed, the error is now easy to find. It is a typo in the module VfsSelect.c-the call is VFSFileOpen and not VFSOpenFile. Fixing the call let the program work once again!
Altough PODS is a graphical development environment, it still pays out to look at the console sometimes… . Did you ever have such a problem? Do you use the console view?

I recently ported a small, but working OnboardC project over to PODS 1.0 to benefit from the comfort of the large screen standing on my desktop. According to friendly advice gathered from the developer newsgroup, getting sources and XRD files to the PC was a painless process. After having faced a few minor difficulties at the Windows 2000 command prompt, everything was set. I now expected a painless build cycle – but the app didn’t even survive the parser. Parse errors at almost every variable definition. An Update to the latest and greatest version didn’t help. Treat this as an example:

//Useless code
case foo:
int bar;
//More useless code

A parse error occurs immediately when the code above is compiled-and the variable is not accepted. A short post at the user group brought enlightment to the coder-ANSI C requires that variable definitions must be the first code in a block-and this requirement isn’t met above.
While some compilers(at least OnBoardC) accept variable definitions anywhere, the PODS(Ben Combee says that this is GCC’s fault, as we all known PODS is based on GCC) is picky.
However, ANSI C has a comfortable way of combating this problem-the creating of instruction blocks. Many C programmers treat the {} as a fixed part of the syntax-but actually they only group instructions together. Each block gets its own stack space-and can thus have lots of local variables. So, just put your code into a block-and alas, the PODS accepts it. The corrected example would look like this:

//Useless code
case foo:
int bar;
//More useless code

A possible second way is to change the C file into a C++ file by changing its filename to .cpp and then reinserting the file into the project-C++ does not impose this limitation.

Although it is difficult to call this ‘pedantry’ shortcoming or even bug, it can still pull nerves and cause headaches.
Feel free to comment!

P.S.This article isn’t published to bash Palmsource. It should just save developer’s time. PODS is a cool product in general, but knowing possible traps is always good.
Full disclosure: This article was sent to Ben Combee for correcting before it was published here!

I have been using PODS for a few hours by now instead of the aging OnboardC-and got pretty angry about the incredibly bad help viewer. When you change to the PODS with a help viewer window open, all of its contents get garbled! So it is reloading time….
However, a right click on a link showed me that it pointed to a web server on my local machine-although it was running at an unusual port which changed after every start of the PODS. Here is an example of such a link-it will definitely not work on your machine:

Curious as I am, I immediately opened a current link in my web browser-and alas, I was at the corresponding help topic-but now the Page was displayed in Firefox and all problems were finished. Even after I closed the Help viewer window, the online help still was accessible through Firefox. Now, that is astonishing! PODS automatically starts a web server when loaded into memory-just to serve up the on-line help! If that isn’t a waste of memory… .

To benefit from this yourself, do the following: Open up Help, and click on one of the links with the right mouse button. Then, you shall see a menu entry details. Click it, and a window with an URL shall show up. After there will be a few numbers followed by a /, just copy these into the link below instead of the PORT.

Into Firefox with it, and have fun. I am using this since 4 reboots on my Windows 2000 machine-so one can say that it is stable!
Tell me what you think about it!!!

© 2013 TamsPalm - the Palm OS / web OS Blog Suffusion theme by Sayontan Sinha