| //=================================================================================== |
| // |
| // (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. |
| // |
| //======================================================================================= |
| /****************************************************************************** |
| * |
| * Copyright (c) 1999 Palm Computing, Inc. or its subsidiaries. |
| * All rights reserved. |
| * |
| * File: Starter.cpp |
| * |
| *****************************************************************************/ |
| #include <PalmOS.h> |
| #include "StarterRsc.h" |
| #include <unix_string.h> |
| #include <unix_stdlib.h> |
| |
| //#include "interop2H.h" // include the generated proxy |
| //#include "interop2BH.h" // include the generated proxy |
| //#include "interop2CH.h" // include the generated proxy |
| |
| extern "C" int interoptA(const char *site); |
| extern "C" int interopB(const char *site); |
| extern "C" int interopC(const char *site); |
| extern "C" void displayText(char *text); |
| void initURLList(); |
| char *getSite(char type); |
| |
| /*********************************************************************** |
| * |
| * Entry Points |
| * |
| ***********************************************************************/ |
| |
| |
| /*********************************************************************** |
| * |
| * Internal Structures |
| * |
| ***********************************************************************/ |
| typedef struct |
| { |
| UInt8 replaceme; |
| } StarterPreferenceType; |
| |
| typedef struct |
| { |
| UInt8 replaceme; |
| } StarterAppInfoType; |
| |
| typedef StarterAppInfoType* StarterAppInfoPtr; |
| |
| |
| /*********************************************************************** |
| * |
| * Global variables |
| * |
| ***********************************************************************/ |
| //static Boolean HideSecretRecords; |
| |
| char **resultText ; |
| int resultLines=0; |
| |
| #define URL_COUNT 6 |
| char * tryURLsA[]={ |
| "http://www.cs.fsu.edu/~engelen/interop2.cgi", |
| "http://services.soaplite.com/interop.cgi", |
| "http://interop.capeclear.com/ccx/soapbuilders-round2", |
| "http://nagoya.apache.org:5049/axis/services/echoA", |
| "http://easysoap.sourceforge.net/cgi-bin/interopserver", |
| "http://soapinterop.simdb.com/round2", |
| }; |
| |
| char * tryURLsB[]={ |
| "http://www.cs.fsu.edu/~engelen/interop2B.cgi", |
| "http://services.soaplite.com/interop.cgi", |
| "http://interop.capeclear.com/ccx/soapbuilders-round2", |
| "http://nagoya.apache.org:5049/axis/services/echoB", |
| "http://easysoap.sourceforge.net/cgi-bin/interopserver", |
| "http://soapinterop.simdb.com/round2B", |
| }; |
| |
| char * tryURLsC[]={ |
| "http://www.cs.fsu.edu/~engelen/interop2C.cgi", |
| "http://services.soaplite.com/interop.cgi", |
| "http://interop.capeclear.com/ccx/soapbuilders-round2", |
| "http://nagoya.apache.org:5049/axis/services/echoB", |
| "http://easysoap.sourceforge.net/cgi-bin/interopserver", |
| "http://soapinterop.simdb.com/round2B", |
| }; |
| |
| |
| /*********************************************************************** |
| * |
| * Internal Constants |
| * |
| ***********************************************************************/ |
| #define appFileCreator 'STRT' // 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 kOurMinVersion sysMakeROMVersion(2,0,0,sysROMStageRelease,0) |
| #define kPalmOS10Version sysMakeROMVersion(1,0,0,sysROMStageRelease,0) |
| |
| |
| /*********************************************************************** |
| * |
| * Internal Functions |
| * |
| ***********************************************************************/ |
| |
| /*********************************************************************** |
| * |
| * 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*/) |
| { |
| initURLList(); |
| } |
| |
| |
| /*********************************************************************** |
| * |
| * 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 MainOptionsAboutStarterApp: |
| 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; |
| |
| 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 ctlSelectEvent: |
| switch (eventP->data.ctlSelect.controlID) |
| { |
| case MainRunAButton: |
| interoptA(getSite('A')); |
| break; |
| case MainRunBButton: |
| interopB(getSite('B')); |
| break; |
| case MainRunCButton: |
| interopC(getSite('C')); |
| 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: |
| |
| switch (eventP->data.ctlSelect.controlID) |
| { |
| // case InteroptARunAll: |
| // interoptA(1); |
| // break; |
| } |
| |
| 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 (kOurMinVersion, 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) |
| { |
| // int i1=sizeof(size_t); |
| // int i2=sizeof(int); |
| // int i3=sizeof(struct xsd__base64Binary); |
| return StarterPalmMain(cmd, cmdPBP, launchFlags); |
| } |
| |
| void displayText(char *text) |
| { |
| ListPtr lst; |
| char ** newText; |
| char *str =(char*) malloc(1+StrLen(text)); |
| strcpy(str,text); |
| int i=0; |
| if (resultLines==0) |
| { |
| newText = (char**)malloc(sizeof(void*)); |
| } |
| else |
| { |
| int size= resultLines*sizeof(void*); |
| newText =(char**) malloc(size+sizeof(void*)); |
| memcpy(newText,resultText,size); |
| } |
| |
| newText[resultLines]=str; |
| resultLines++; |
| resultText=newText; |
| |
| lst = (ListPtr) GetObjectPtr(MainResultsList); |
| |
| LstSetListChoices(lst, resultText, resultLines); |
| if (resultLines>5) |
| LstSetTopItem(lst,resultLines-5); |
| LstDrawList(lst); |
| |
| } |
| |
| |
| char *getSite(char type) |
| { |
| int listIndex; |
| listIndex = LstGetSelection((ListPtr)GetObjectPtr(MainURLList)); |
| if (type=='A') return tryURLsA[listIndex]; |
| if (type=='B') return tryURLsB[listIndex]; |
| if (type=='C') return tryURLsC[listIndex]; |
| |
| // Shouldn't ever get to this point. Just return A list |
| return tryURLsA[listIndex]; |
| } |
| |
| void initURLList() |
| { |
| ControlPtr ctl; |
| ListPtr lst; |
| // UInt32 defaultID; |
| |
| ctl = (ControlPtr)GetObjectPtr(MainURLPopTrigger); |
| lst = (ListPtr)GetObjectPtr(MainURLList); |
| |
| LstSetListChoices(lst, tryURLsA, URL_COUNT); |
| LstSetHeight(lst, 10); |
| CtlSetLabel (ctl, tryURLsA[0]); |
| } |
| |