| /****************************************************************************** |
| * |
| * Copyright (c) 1999-2000 Palm, Inc. or its subsidiaries. |
| * All rights reserved. |
| * |
| * File: Starter.c |
| * |
| * Release: Palm OS SDK 5.0 (111823) |
| * |
| *****************************************************************************/ |
| //=================================================================================== |
| // |
| // (C) COPYRIGHT International Business Machines Corp., 2002 All Rights Reserved |
| // Licensed Materials - Property of IBM |
| // US Government Users Restricted Rights - Use, duplication or |
| // disclosure restricted by GSA ADP Schedule Contract with IBM Corp. |
| // |
| // IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING |
| // ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| // PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR |
| // CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF |
| // USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR |
| // OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE |
| // OR PERFORMANCE OF THIS SOFTWARE. |
| // |
| // The program may be used, executed, copied, modified, and distributed |
| // without royalty for the purpose of developing, using, marketing, or distributing. |
| // |
| //======================================================================================= |
| #include <PalmOS.h> |
| #include "StockQuoteRsc.h" |
| #include "soapH.h" // include the generated proxy |
| |
| /*********************************************************************** |
| * |
| * Entry Points |
| * |
| ***********************************************************************/ |
| |
| |
| /*********************************************************************** |
| * |
| * Internal Structures |
| * |
| ***********************************************************************/ |
| typedef struct |
| { |
| UInt8 replaceme; |
| } StarterPreferenceType; |
| |
| typedef struct |
| { |
| UInt8 replaceme; |
| } StarterAppInfoType; |
| |
| typedef StarterAppInfoType* StarterAppInfoPtr; |
| |
| |
| /*********************************************************************** |
| * |
| * Global variables |
| * |
| ***********************************************************************/ |
| //static Boolean HideSecretRecords; |
| |
| UInt16 libNum; |
| /*********************************************************************** |
| * |
| * Internal Constants |
| * |
| ***********************************************************************/ |
| #define appFileCreator 'BOB1' // register your own at http://www.palmos.com/dev/creatorid/ |
| #define appVersionNum 0x01 |
| #define appPrefID 0x00 |
| #define appPrefVersionNum 0x01 |
| |
| // Define the minimum OS version we support (2.0 for now). |
| #define ourMinVersion sysMakeROMVersion(2,0,0,sysROMStageRelease,0) |
| #define kPalmOS10Version sysMakeROMVersion(1,0,0,sysROMStageRelease,0) |
| |
| |
| /*********************************************************************** |
| * |
| * Internal Functions |
| * |
| ***********************************************************************/ |
| |
| int getQuote( char *symbol, char *result); |
| void StdEtoA(char *text); |
| |
| /*********************************************************************** |
| * |
| * FUNCTION: RomVersionCompatible |
| * |
| * DESCRIPTION: This routine checks that a ROM version is meet your |
| * minimum requirement. |
| * |
| * PARAMETERS: requiredVersion - minimum rom version required |
| * (see sysFtrNumROMVersion in SystemMgr.h |
| * for format) |
| * launchFlags - flags that indicate if the application |
| * UI is initialized. |
| * |
| * RETURNED: error code or zero if rom is compatible |
| * |
| * REVISION HISTORY: |
| * |
| * |
| ***********************************************************************/ |
| static Err RomVersionCompatible(UInt32 requiredVersion, UInt16 launchFlags) |
| { |
| UInt32 romVersion; |
| |
| // See if we're on in minimum required version of the ROM or later. |
| FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion); |
| if (romVersion < requiredVersion) |
| { |
| if ((launchFlags & (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) == |
| (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) |
| { |
| FrmAlert (RomIncompatibleAlert); |
| |
| // Palm OS 1.0 will continuously relaunch this app unless we switch to |
| // another safe one. |
| if (romVersion <= kPalmOS10Version) |
| { |
| AppLaunchWithCommand(sysFileCDefaultApp, sysAppLaunchCmdNormalLaunch, NULL); |
| } |
| } |
| |
| return sysErrRomIncompatible; |
| } |
| |
| return errNone; |
| } |
| |
| |
| /*********************************************************************** |
| * |
| * FUNCTION: GetObjectPtr |
| * |
| * DESCRIPTION: This routine returns a pointer to an object in the current |
| * form. |
| * |
| * PARAMETERS: formId - id of the form to display |
| * |
| * RETURNED: void * |
| * |
| * REVISION HISTORY: |
| * |
| * |
| ***********************************************************************/ |
| static void * GetObjectPtr(UInt16 objectID) |
| { |
| FormPtr frmP; |
| |
| frmP = FrmGetActiveForm(); |
| return FrmGetObjectPtr(frmP, FrmGetObjectIndex(frmP, objectID)); |
| } |
| |
| |
| /*********************************************************************** |
| * |
| * FUNCTION: MainFormInit |
| * |
| * DESCRIPTION: This routine initializes the MainForm form. |
| * |
| * PARAMETERS: frm - pointer to the MainForm form. |
| * |
| * RETURNED: nothing |
| * |
| * REVISION HISTORY: |
| * |
| * |
| ***********************************************************************/ |
| static void MainFormInit(FormPtr frmP) |
| { |
| FieldPtr fld; |
| char *ptr; |
| MemHandle mh = MemHandleNew (10); |
| fld = GetObjectPtr (MainSymbolField); |
| ptr = MemHandleLock (mh); |
| strcpy(ptr,"IBM"); |
| FldSetTextHandle (fld, mh); |
| MemHandleUnlock(mh); |
| } |
| |
| |
| /*********************************************************************** |
| * |
| * FUNCTION: MainFormDoCommand |
| * |
| * DESCRIPTION: This routine performs the menu command specified. |
| * |
| * PARAMETERS: command - menu item id |
| * |
| * RETURNED: nothing |
| * |
| * REVISION HISTORY: |
| * |
| * |
| ***********************************************************************/ |
| static Boolean MainFormDoCommand(UInt16 command) |
| { |
| Boolean handled = false; |
| FormPtr frmP; |
| |
| switch (command) |
| { |
| case MainOptionsAboutStockQuote: |
| MenuEraseStatus(0); // Clear the menu status from the display. |
| frmP = FrmInitForm (AboutForm); |
| FrmDoDialog (frmP); // Display the About Box. |
| FrmDeleteForm (frmP); |
| handled = true; |
| break; |
| |
| } |
| |
| return handled; |
| } |
| |
| |
| /*********************************************************************** |
| * |
| * FUNCTION: MainFormHandleEvent |
| * |
| * DESCRIPTION: This routine is the event handler for the |
| * "MainForm" of this application. |
| * |
| * PARAMETERS: eventP - a pointer to an EventType structure |
| * |
| * RETURNED: true if the event has handle and should not be passed |
| * to a higher level handler. |
| * |
| * REVISION HISTORY: |
| * |
| * |
| ***********************************************************************/ |
| static Boolean MainFormHandleEvent(EventPtr eventP) |
| { |
| Boolean handled = false; |
| FormPtr frmP; |
| char result[240]; |
| int rc; |
| FieldPtr fld; |
| |
| |
| switch (eventP->eType) |
| { |
| case menuEvent: |
| return MainFormDoCommand(eventP->data.menu.itemID); |
| |
| case frmOpenEvent: |
| frmP = FrmGetActiveForm(); |
| MainFormInit( frmP); |
| FrmDrawForm ( frmP); |
| handled = true; |
| break; |
| |
| case frmUpdateEvent: |
| // To do any custom drawing here, first call FrmDrawForm(), then do your |
| // drawing, and then set handled to true. |
| break; |
| |
| /* |
| case ctlEnterEvent: |
| switch (eventP->data.ctlEnter.controlID) |
| { |
| case MainRunButton: |
| getQuote("IBM",result); |
| break; |
| } |
| break; |
| */ |
| |
| case ctlSelectEvent: |
| switch (eventP->data.ctlSelect.controlID) |
| { |
| case MainRunButton: |
| rc = getQuote("IBM",result); |
| // if (rc==SOAP_OK) |
| // { |
| fld = GetObjectPtr (MainResultField); |
| FldSetTextPtr( fld, result); |
| FldDrawField(fld); |
| FldRecalculateField(fld,true); |
| // } |
| // else |
| // FrmAlert(Soap_errorAlert); |
| |
| |
| break; |
| } |
| break; |
| |
| default: |
| break; |
| |
| } |
| |
| return handled; |
| } |
| |
| |
| /*********************************************************************** |
| * |
| * FUNCTION: AppHandleEvent |
| * |
| * DESCRIPTION: This routine loads form resources and set the event |
| * handler for the form loaded. |
| * |
| * PARAMETERS: event - a pointer to an EventType structure |
| * |
| * RETURNED: true if the event has handle and should not be passed |
| * to a higher level handler. |
| * |
| * REVISION HISTORY: |
| * |
| * |
| ***********************************************************************/ |
| static Boolean AppHandleEvent(EventPtr eventP) |
| { |
| UInt16 formId; |
| FormPtr frmP; |
| |
| if (eventP->eType == frmLoadEvent) |
| { |
| // Load the form resource. |
| formId = eventP->data.frmLoad.formID; |
| frmP = FrmInitForm(formId); |
| FrmSetActiveForm(frmP); |
| |
| // Set the event handler for the form. The handler of the currently |
| // active form is called by FrmHandleEvent each time is receives an |
| // event. |
| switch (formId) |
| { |
| case MainForm: |
| FrmSetEventHandler(frmP, MainFormHandleEvent); |
| break; |
| |
| default: |
| // ErrFatalDisplay("Invalid Form Load Event"); |
| break; |
| |
| } |
| return true; |
| } |
| |
| return false; |
| } |
| |
| |
| /*********************************************************************** |
| * |
| * FUNCTION: AppEventLoop |
| * |
| * DESCRIPTION: This routine is the event loop for the application. |
| * |
| * PARAMETERS: nothing |
| * |
| * RETURNED: nothing |
| * |
| * REVISION HISTORY: |
| * |
| * |
| ***********************************************************************/ |
| static void AppEventLoop(void) |
| { |
| UInt16 error; |
| EventType event; |
| |
| do { |
| EvtGetEvent(&event, evtWaitForever); |
| |
| if (! SysHandleEvent(&event)) |
| if (! MenuHandleEvent(0, &event, &error)) |
| if (! AppHandleEvent(&event)) |
| FrmDispatchEvent(&event); |
| |
| } while (event.eType != appStopEvent); |
| } |
| |
| |
| /*********************************************************************** |
| * |
| * FUNCTION: AppStart |
| * |
| * DESCRIPTION: Get the current application's preferences. |
| * |
| * PARAMETERS: nothing |
| * |
| * RETURNED: Err value 0 if nothing went wrong |
| * |
| * REVISION HISTORY: |
| * |
| * |
| ***********************************************************************/ |
| static Err AppStart(void) |
| { |
| StarterPreferenceType prefs; |
| UInt16 prefsSize; |
| |
| // Read the saved preferences / saved-state information. |
| prefsSize = sizeof(StarterPreferenceType); |
| if (PrefGetAppPreferences(appFileCreator, appPrefID, &prefs, &prefsSize, true) != |
| noPreferenceFound) |
| { |
| } |
| |
| return errNone; |
| } |
| |
| |
| /*********************************************************************** |
| * |
| * FUNCTION: AppStop |
| * |
| * DESCRIPTION: Save the current state of the application. |
| * |
| * PARAMETERS: nothing |
| * |
| * RETURNED: nothing |
| * |
| * REVISION HISTORY: |
| * |
| * |
| ***********************************************************************/ |
| static void AppStop(void) |
| { |
| StarterPreferenceType prefs; |
| |
| // Write the saved preferences / saved-state information. This data |
| // will saved during a HotSync backup. |
| PrefSetAppPreferences (appFileCreator, appPrefID, appPrefVersionNum, |
| &prefs, sizeof (prefs), true); |
| |
| // Close all the open forms. |
| FrmCloseAllForms (); |
| } |
| |
| |
| /*********************************************************************** |
| * |
| * FUNCTION: StarterPalmMain |
| * |
| * DESCRIPTION: This is the main entry point for the application. |
| * |
| * PARAMETERS: cmd - word value specifying the launch code. |
| * cmdPB - pointer to a structure that is associated with the launch code. |
| * launchFlags - word value providing extra information about the launch. |
| * |
| * RETURNED: Result of launch |
| * |
| * REVISION HISTORY: |
| * |
| * |
| ***********************************************************************/ |
| static UInt32 StarterPalmMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) |
| { |
| Err error; |
| |
| error = RomVersionCompatible (ourMinVersion, launchFlags); |
| if (error) return (error); |
| |
| switch (cmd) |
| { |
| case sysAppLaunchCmdNormalLaunch: |
| error = AppStart(); |
| if (error) |
| return error; |
| |
| FrmGotoForm(MainForm); |
| AppEventLoop(); |
| AppStop(); |
| break; |
| |
| default: |
| break; |
| |
| } |
| |
| return errNone; |
| } |
| |
| |
| /*********************************************************************** |
| * |
| * FUNCTION: PilotMain |
| * |
| * DESCRIPTION: This is the main entry point for the application. |
| * |
| * PARAMETERS: cmd - word value specifying the launch code. |
| * cmdPB - pointer to a structure that is associated with the launch code. |
| * launchFlags - word value providing extra information about the launch. |
| * RETURNED: Result of launch |
| * |
| * REVISION HISTORY: |
| * |
| * |
| ***********************************************************************/ |
| UInt32 PilotMain( UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) |
| { |
| |
| // char result[40]; |
| HostTraceInit(); |
| |
| return StarterPalmMain(cmd, cmdPBP, launchFlags); |
| } |
| |
| |
| |
| |