Programming for Palm OS/C/Menus

      files

      With all of these files in the working directory, invoke:

      make -f MenusMakefile
      

      ..which will create Menus.prc in the working directory ready for installation on a Palm.


      Menus.h

      This file defines in one place constants that are referred to by both Menus.rcp and Menus.c.

      
      #define  MainForm            1000
      #define  MainMenu            1000
      #define  MainMenuRecordNew   1011
      #define  MainMenuRecordOpen  1012
      #define  MainMenuHelpAbout   1020
      
      

      Menus.rcp

      
      #include "Menus.h"
      
      MENU ID MainMenu
      BEGIN
        PULLDOWN "Record"
        BEGIN
          MENUITEM "New" ID MainMenuRecordNew "N"
          MENUITEM SEPARATOR
          MENUITEM "Open" ID MainMenuRecordOpen "O"
        END
        PULLDOWN "Help"
        BEGIN
          MENUITEM "About" ID MainMenuHelpAbout "A"
        END
      END
      
      FORM ID MainForm AT (0 0 160 160)
      USABLE
      MENUID MainMenu
      BEGIN
      END
      
      


      Menus.c

      
      #include <PalmOS.h>
      #include <unix_stdarg.h>
      #include "Menus.h"
      
      
      void showMessage( char *format, ...)
      {
        va_list  args;
        char     msg[99];
      
        va_start( args, format);
        StrVPrintF( msg, format, args);
        va_end( args);
      
        WinDrawChars( msg, StrLen(msg), 0, 80);
      }
      
      
      Boolean appHandleEvent( EventPtr event)
      {
        Boolean  handled;
        FormPtr  form;
      
        handled = true;
      
        if ( frmLoadEvent == event->eType)
        {
          form = FrmInitForm( event->data.frmLoad.formID);
          FrmSetActiveForm( form);
        }
        else if ( menuEvent == event->eType)
        {
          showMessage( "selected resource %i", event->data.menu.itemID);
        }
        else {
          handled = false;
        }
      
        return handled;
      }
      
      
      UInt32 PilotMain( UInt16 cmd, void *cmdPBP, UInt16 launchFlags)
      {
        EventType  event;
        UInt16     error;
      
        if ( sysAppLaunchCmdNormalLaunch == cmd)
        {
          FrmGotoForm( MainForm);
      
          showMessage( "open the menu");
      
          do {
            EvtGetEvent( &event, evtWaitForever);
      
            if ( ! SysHandleEvent( &event))
            if ( ! MenuHandleEvent( 0, &event, &error))
            appHandleEvent( &event);
      
          } while (event.eType != appStopEvent);
      
          FrmCloseAllForms();
        }
      
        return 0;
      }
      
      


      MenusMakefile

      
      PROJECT=Menus
      CREATOR_ID=Anon
      
      .SILENT:
      
      all: $(PROJECT).prc
      
      $(PROJECT).prc: $(PROJECT).c $(PROJECT).h $(PROJECT).rcp
              m68k-palmos-gcc $(PROJECT).c -o $(PROJECT)
              m68k-palmos-obj-res $(PROJECT)
              pilrc -q $(PROJECT).rcp
              build-prc $(PROJECT).prc "$(PROJECT)" $(CREATOR_ID) *.$(PROJECT).grc *.bin
              rm *.$(PROJECT).grc *.bin $(PROJECT)
      
      clean:
              rm -f $(PROJECT).prc
      
      
      Last modified on 2 June 2009, at 23:14