diff --git a/GNUmakefile b/GNUmakefile new file mode 100644 index 0000000..10950d0 --- /dev/null +++ b/GNUmakefile @@ -0,0 +1,17 @@ +# -*- coding:shift_jis -*- +.PHONY: clean Resources Code + +javabutton.prc: Resources Code + build-prc javabutton.prc "ジャバ" JaBo src/*.grc rsrc/*.bin + +Resources: + $(MAKE) -C rsrc + +Code: + $(MAKE) -C src + +clean: + $(MAKE) -C rsrc clean + $(MAKE) -C src clean + rm -f *.prc + diff --git a/rsrc/GNUmakefile b/rsrc/GNUmakefile new file mode 100644 index 0000000..d48d94c --- /dev/null +++ b/rsrc/GNUmakefile @@ -0,0 +1,8 @@ +.PHONY: clean + +rsrc-timestamp: jb_rscid.h javabutton.rcp + pilrc -Fj -noEllipsis javabutton.rcp + touch rsrc-timestamp + +clean: + rm -f *.bin rsrc-timestamp diff --git a/rsrc/icon24x24in32x32.ppm b/rsrc/icon24x24in32x32.ppm new file mode 100644 index 0000000..2f5818b Binary files /dev/null and b/rsrc/icon24x24in32x32.ppm differ diff --git a/rsrc/icon24x24in32x32bw.pbm b/rsrc/icon24x24in32x32bw.pbm new file mode 100644 index 0000000..6a300b3 Binary files /dev/null and b/rsrc/icon24x24in32x32bw.pbm differ diff --git a/rsrc/icon48x48in64x64.ppm b/rsrc/icon48x48in64x64.ppm new file mode 100644 index 0000000..e7da552 Binary files /dev/null and b/rsrc/icon48x48in64x64.ppm differ diff --git a/rsrc/java22.wav b/rsrc/java22.wav new file mode 100644 index 0000000..d68c98f Binary files /dev/null and b/rsrc/java22.wav differ diff --git a/rsrc/javabutton.rcp b/rsrc/javabutton.rcp new file mode 100644 index 0000000..bd508ac --- /dev/null +++ b/rsrc/javabutton.rcp @@ -0,0 +1,59 @@ +// -*- coding:japanese-shift-jis -*- +#include "jb_rscid.h" + +FORM ID MainForm AT (0 0 160 160) +USABLE +NOSAVEBEHIND +MENUID MainMenuBar +BEGIN + TITLE "ジャバボタン" + LABEL "あなたとJAVA," ID JavaLabelL1 AT (CENTER 32) USABLE FONT 7 + LABEL "今すぐダウンロー" ID JavaLabelL2 AT (CENTER 48) USABLE FONT 7 + LABEL "ド" ID JavaLabelL3 AT (CENTER 64) USABLE FONT 7 + BUTTON "無料Javaのダウンロード" ID JavaButton AT (20 88 120 24) FONT 0 + GRAFFITISTATEINDICATOR AT (143 147) +END + +ALERT ID AboutAlert +INFORMATION +BEGIN + TITLE "Legal" + MESSAGE "This software is not endorsed by or affiliated with Oracle and it is not warranted by Oracle." + BUTTONS "Dismiss" +END + +ALERT ID OldAlert +ERROR +BEGIN + TITLE "Error" + MESSAGE "PCM sound source is required." + BUTTONS "OK" +END + +MENU ID MainMenuBar +BEGIN + PULLDOWN "Options" + BEGIN + MENUITEM "Legal..." ID AboutMenuItm + END +END + +DATA "wave" ID JavaVoice "java22.wav" + +APPLICATION 1 "JaBo" +APPLICATIONICONNAME ID 100 "ジャバボタン" +VERSION "1" + +ICON ID 1000 +BEGIN + BITMAP "icon24x24in32x32bw.pbm" BPP 1 COMPRESS COMPRESSSCANLINE DENSITY 72 + BITMAP "icon24x24in32x32.ppm" BPP 8 COMPRESS COMPRESSSCANLINE TRANSPARENT 255 255 0 DENSITY 72 + BITMAP "icon48x48in64x64.ppm" BPP 8 COMPRESS COMPRESSSCANLINE TRANSPARENT 255 255 0 DENSITY 144 +END + +SMALLICON ID 1001 +BEGIN + BITMAP "smallicon15x9bw.pbm" BPP 1 COMPRESS COMPRESSSCANLINE DENSITY 72 + BITMAP "smallicon15x9.ppm" BPP 8 COMPRESS COMPRESSSCANLINE TRANSPARENT 255 255 0 DENSITY 72 + BITMAP "smallicon30x18.ppm" BPP 8 COMPRESS COMPRESSSCANLINE TRANSPARENT 255 255 0 DENSITY 144 +END diff --git a/rsrc/jb_rscid.h b/rsrc/jb_rscid.h new file mode 100644 index 0000000..3206b2c --- /dev/null +++ b/rsrc/jb_rscid.h @@ -0,0 +1,11 @@ +#define MainForm 1000 +#define MainMenuBar 1001 +#define OptionsMenu 1002 +#define AboutMenuItm 1003 +#define AboutAlert 1004 +#define OldAlert 1006 +#define JavaButton 1007 +#define JavaLabelL1 1008 +#define JavaLabelL2 1010 +#define JavaLabelL3 1011 +#define JavaVoice 1009 diff --git a/rsrc/smallicon15x9.ppm b/rsrc/smallicon15x9.ppm new file mode 100644 index 0000000..35d7970 Binary files /dev/null and b/rsrc/smallicon15x9.ppm differ diff --git a/rsrc/smallicon15x9bw.pbm b/rsrc/smallicon15x9bw.pbm new file mode 100644 index 0000000..f038db7 --- /dev/null +++ b/rsrc/smallicon15x9bw.pbm @@ -0,0 +1,4 @@ +P4 +# CREATOR: GIMP PNM Filter Version 1.1 +15 9 +Ppp \ No newline at end of file diff --git a/rsrc/smallicon30x18.ppm b/rsrc/smallicon30x18.ppm new file mode 100644 index 0000000..95bfb61 Binary files /dev/null and b/rsrc/smallicon30x18.ppm differ diff --git a/src/GNUmakefile b/src/GNUmakefile new file mode 100644 index 0000000..a72fff0 --- /dev/null +++ b/src/GNUmakefile @@ -0,0 +1,12 @@ +.PHONY: clean +CFLAGS=-Wall -Os -I../rsrc -I. + +grc-timestamp: javabutton + m68k-palmos-obj-res javabutton + touch grc-timestamp + +javabutton: javabutton.c + m68k-palmos-gcc $(CFLAGS) -o javabutton javabutton.c + +clean: + rm -f javabutton *.grc grc-timestamp diff --git a/src/PalmChars.h b/src/PalmChars.h new file mode 100644 index 0000000..efb1610 --- /dev/null +++ b/src/PalmChars.h @@ -0,0 +1,144 @@ +/****************************************************************************** + * + * Copyright (c) 1994-2002 Palm, Inc. or its subsidiaries. + * All rights reserved. + * + * File: PalmChars.h + * + * Release: + * + * Description: + * Header file for all Palm Devices + * Contains Palm-specific vchrs + * + *****************************************************************************/ + +#ifndef __PALMCHARS_H__ +#define __PALMCHARS_H__ + +#include + +#if (vchrPalmMin != 0x0500) || (vchrPalmMax != 0x05FF) +#error "please check Palm vchr range or update the above assertion" +#endif + +#define vchrSilkClock (vchrPalmMin + 0) +#define vchrClock (vchrPalmMin + 1) + +#define vchrPopupBrightness (vchrPalmMin + 2) + +#define vchrNavChange (vchrPalmMin + 3) +#define vchrNavReserved0 (vchrPalmMin + 4) +#define vchrNavReserved1 (vchrPalmMin + 5) +#define vchrNavReserved2 (vchrPalmMin + 6) +#define vchrNavReserved3 (vchrPalmMin + 7) + +#define keyBitNavLeft 0x01000000 +#define keyBitNavRight 0x02000000 +#define keyBitNavSelect 0x04000000 +#define keyBitNavLRS 0x07000000 + +#define navBitUp 0x0001 +#define navBitDown 0x0002 +#define navBitLeft 0x0004 +#define navBitRight 0x0008 +#define navBitSelect 0x0010 +#define navBitsAll 0x001F + +#define navChangeUp 0x0100 +#define navChangeDown 0x0200 +#define navChangeLeft 0x0400 +#define navChangeRight 0x0800 +#define navChangeSelect 0x1000 +#define navChangeBitsAll 0x1F00 + +#define navFtrCreator 'fway' +#define navFtrVersion 0 + +#define navVersion 0x00010000 /* header version 1.0 */ + + +// A macro to use for apps that support navigation using the 5-way. +// This macro will let you test whether an event was generated by the 5-way. +// For applications that treat up and down hard buttons differently than up and +// down on the 5-way, this macro can be used to determine which action to take +// if NavKeyPressed returns true for Up or Down. +// +// Usage: if (IsFiveWayNavEvent(eventP)) +// +#define IsFiveWayNavEvent(eventP) \ + ( \ + ((eventP)->data.keyDown.chr == vchrPageUp || \ + (eventP)->data.keyDown.chr == vchrPageDown || \ + (eventP)->data.keyDown.chr == vchrNavChange) \ + && \ + (((eventP)->data.keyDown.keyCode & (navBitsAll | navChangeBitsAll)) != 0) \ + ) + + +// A macro to use for apps that support navigation using the 5-way. +// By using this macro, we have consistent behavior in all our apps +// when it comes to how it handles multiple simultaneous button presses. +// +// Usage: if (NavSelectPressed(eventP)) +// +// Only act when the select button is released, and only if none of the +// direction buttons are down (or being released) at the time, and only if the select +// button has not been held down long enough to start repeating. By ignoring repeat +// events for the select button, we ensure that the launcher will be run if the select +// button is held down. By waiting until the button is released, we ensure that the +// select action is not taken before the launcher is run. +#define NavSelectPressed(eventP) \ + ( \ + IsFiveWayNavEvent(eventP) \ + && \ + (((eventP)->data.keyDown.modifiers & autoRepeatKeyMask) == 0) \ + && \ + (((eventP)->data.keyDown.keyCode & (navBitsAll | navChangeBitsAll)) == \ + navChangeSelect) \ + ) + + +// A macro to use for apps that support navigation using the 5-way. +// By using this macro, we have consistent behavior in all our apps +// when it comes to how it handles multiple simultaneous button presses. +// You can use this macro even if the device does not have a 5-way controller. +// +// Usage: if (NavDirectionPressed(eventP, Left)) +// if (NavDirectionPressed(eventP, Right)) +// if (NavDirectionPressed(eventP, Up)) - also works without 5-way +// if (NavDirectionPressed(eventP, Down)) - also works without 5-way +// +// Act only when one direction is pressed without any other direction (or select) being +// down at the time. Repeat if the button is held down, but not if other buttons are +// pressed. +#define NavDirectionPressed(eventP, nav) \ + (IsFiveWayNavEvent(eventP) \ + ? (((eventP)->data.keyDown.modifiers & autoRepeatKeyMask) \ + ? (((eventP)->data.keyDown.keyCode & (navBitsAll | navChangeBitsAll)) == \ + (navBit ## nav)) \ + : (((eventP)->data.keyDown.keyCode & (navBitsAll | navChangeBitsAll)) == \ + (navBit ## nav | navChange ## nav))) \ + : (((eventP)->data.keyDown.chr == vchrPageUp && navBit ## nav == navBitUp) || \ + ((eventP)->data.keyDown.chr == vchrPageDown && navBit ## nav == navBitDown)) \ + ) + + +// A macro to use for apps that support navigation using the 5-way. +// By using this macro, we have consistent behavior in all our apps +// when it comes to how it handles multiple simultaneous button presses. +// You can use this macro even if the device does not have a 5-way controller. +// +// Usage: if (NavKeyPressed(eventP, Select)) +// if (NavKeyPressed(eventP, Left)) +// if (NavKeyPressed(eventP, Right)) +// if (NavKeyPressed(eventP, Up)) - also works without 5-way +// if (NavKeyPressed(eventP, Down)) - also works without 5-way +// +#define NavKeyPressed(eventP, nav) \ + ((navBit ## nav == navBitSelect) \ + ? NavSelectPressed(eventP) \ + : NavDirectionPressed(eventP, nav) \ + ) + +#endif /* __PALMCHARS_H__ */ diff --git a/src/SonyChars.h b/src/SonyChars.h new file mode 100644 index 0000000..b9e0871 --- /dev/null +++ b/src/SonyChars.h @@ -0,0 +1,196 @@ +/****************************************************************************** + * * + * (C) Copyright 2000-2002, Sony Corporation * + * * + *----------------------------------------------------------------------------* + * * + * * + * file name : $Workfile: SonyChars.h $ + * * + * * + * Sony-specific Virtual character definition * + * * + * * + * Started on : 00/11/28 * + * Last Modified: $Date: 2003/12/06 14:22:07 $ + * * + ******************************************************************************/ +/* this file is best viewed by setting TAB-stop as 3 */ + +#ifndef __SONYCHARS_H__ +#define __SONYCHARS_H__ + +/****************************************************************************** + * Min/Max * + ******************************************************************************/ +#if defined(vchrSonyMin) || defined(vchrSonyMax) + #undef vchrSonyMax + #undef vchrSonyMin +#endif + +#define vchrSonyMin (0x1700) +#define vchrSonyMax (0x17FF) /* 256 command keys */ + +/****************************************************************************** + * Chars * + ******************************************************************************/ +/***** Jog *****/ + /* Developers are encouraged to use those chars */ +#define vchrJogUp (0x1700) +#define vchrJogDown (0x1701) +#define vchrJogPushRepeat (0x1702) +#define vchrJogPushedUp (0x1703) +#define vchrJogPushedDown (0x1704) +#define vchrJogPush (0x1705) +#define vchrJogRelease (0x1706) +#define vchrJogBack (0x1707) /* added @ 2001 */ +#define vchrJogLeft (0x1708) /* added @ 2003 */ +#define vchrJogRight (0x1709) /* added @ 2003 */ + +/*** re-define old key names ***/ + /* Developpers are encouraged not to use those obsolete chars */ +#define vchrJogPressRepeat vchrJogPushRepeat +#define vchrJogPageUp vchrJogPushedUp +#define vchrJogPageDown vchrJogPushedDown +#define vchrJogPress vchrJogPush + +/* movement & chars */ +/* + Up PushedUp + A A + | | + | -- + | -- + -- + ---------> Push/PushRepeat +Release <--------- + -- + | -- + | -- + | | + V V + Down PushedDown + + + -----------> Back +*/ +/*** Access macros ***/ + /* eP must be EventPtr */ +#define SonyKeyIsJog(eP) (((eP->data.keyDown.chr >= vchrJogUp) && (eP->data.keyDown.chr <= vchrJogRight))? true: false) + +/*** Others ***/ +#define vchrRmcKeyPush (0x170A) +#define vchrRmcKeyRelease (0x170B) + /* each remocon-key is identified with keyCode field */ + /* autoRepeat modifier is set when KeyPush is repeated */ + +#define vchrCapture (0x170C) +#define vchrVoiceRec (0x170D) + +#define vchrAdapterInt (0x170E) +#define vchrExtCnt vchrAdapterInt + +#define vchrSonySysNotify (0x170F) + +#define vchrSilkResize (0x1710) +#define vchrSilkLoader (0x1711) +#define vchrSilkChangeSlkw (0x1712) + +#define vchrVolumeDialog (0x1713) +#define vchrBatteryDialog (0x1714) +#define vchrMediaInfoDialog (0x1715) +#define vchrHwrKbdHelpDialog (0x1716) +#define vchrGraffitiDialog (0x1717) +#define vchrStatusDialog (0x1718) + +#define vchrCapFullRelease vchrCapture +#define vchrCapHalfRelease (0x171A) +#define vchrCapCancel (0x171B) + /* CapHalRelease is enqueued when Capture button is half-pressed. */ + /* CapCancel is enqueued when Capture button is released after half-pressed, + not thoroughly pressed. */ + /* CapHalfRelease and CapCancel are paired. */ + /* When pushing Capture button thoroughly, only CapFullRelease is enqueued + and CapHalfRelease is not enqueued ahead of CapFullRelease. + Allowable gap between CapHalf and CapFull must be under 50msec. + When CapFullRelease is emitted, CapCancel is not enqueued. */ + +#define vchrCamStateChange (0x171C) + /* enqueued when camera internal state is changed, like AF begins, AF locks, + Exposure begins, Exposure ends,... + Those states are identified by keyCode field */ + +#define vchrHomePush (0x171D) +#define vchrGraffitiDialogPush (0x171E) +#define vchrInputDialog (0x171F) + +#define vchrHWKeyboardPush (0x1720) +#define vchrHWKeyboardRelease (0x1721) + +#define vchrSonyShortcut (0x1722) // Debug use-only + +#define vchrBatteryAlert (0x1723) + +#define vchrCloseDialog (0x1724) // close dialog +#define vchrDeviceMgr (0x1725) + +#define vchrHibernation (0x1726) // enter hibernation + +/****************************************************************************** + * KeyCodes * + ******************************************************************************/ +/*** vchrSonySysNotify ***/ +#define keyCodeNotifyNull (0x0000) +#define keyCodeNotifyHoldMask (0x0100) +#define keyCodeNotifyHoldOn (keyCodeNotifyHoldMask + 0x0001) +#define keyCodeNotifyHoldOff (keyCodeNotifyHoldMask + 0x0002) +#define keyCodeNotifyHoldAlert (keyCodeNotifyHoldMask + 0x0003) + +/*** vchrRmcKeyPushed/vchrRmcKeyReleased ***/ +#define keyCodeRmcPlay (3303) +#define keyCodeRmcFRPlay (3098) +#define keyCodeRmcFFPlay (2498) +#define keyCodeRmcStop (1993) +#define keyCodeRmcVolDown (1856) +#define keyCodeRmcVolUp (1713) + +/*** vchrCamStateChange ***/ +#define keyCodeCamUnknown (0) +#define keyCodeCamAFStart (1) +#define keyCodeCamAFEnd (2) +#define keyCodeCamExpStart (3) +#define keyCodeCamExpEnd (4) + +/*** vchrSilkChangeSlkw ***/ +#define keyCodeSilkDef (0) +#define keyCodeSilkInputDef (1) +#define keyCodeSilkPrev (2) +#define keyCodeSilkFwd (3) +#define keyCodeSilkBack (4) + +/*** vchrMediaInfoDialog ***/ +// keyCode is slotRefNum + +/*** vchrSonyShortcut ***/ +#define keyCodeSCVersionSony (0x0001) // Version +#define keyCodeSCSilkMgr (0x0002) // Resize Speed (High/Low/None) +#define keyCodeSCCpuConfig (0x0003) // Cpu Config Set (Level0/1/2...) +#define keyCodeSCCpuConfig2 (0x0004) // Cpu Config Get +#define keyCodeSCDeviceReset (0x0005) // DeviceReset +#define keyCodeSCIllegalBattery (0x0006) // Illegal battery +#define keyCodeSCTraceInit (0x0007) // Call HostTraceInit +#define keyCodeSCTraceClose (0x0008) // Call HostTraceClose +#define keyCodeSCBackupStorage (0x0009) // backup storage heap +#define keyCodeSCRestoreStorage (0x000a) // restore storage heap +#define keyCodeSCNANDFormat (0x000b) // Enable NAND Format + + /* Option Set */ /* those options are all able to be On/Off(default) */ +#define keyCodeSCOptionSet0 (0x0010) // 0: + // those codes from Set0 thru Get0 are reserved for SetX + /* Option Get */ +#define keyCodeSCOptionGet0 (0x0020) // Get option bitfield + // those codes from Get0 thru Get are reserved for GetX +#define keyCodeSCOptionGet (0x0030) // Get option bitfield + +#endif // __SONYCHARS_H__ + diff --git a/src/javabutton.c b/src/javabutton.c new file mode 100644 index 0000000..985cadc --- /dev/null +++ b/src/javabutton.c @@ -0,0 +1,208 @@ +#include +#include +#include +#include + +static void playJavaSound() { + MemHandle jvHandle; + SndPtr jvPtr; + + jvHandle=DmGetResource('wave',JavaVoice); + if(!jvHandle) { return; } + jvPtr=MemHandleLock(jvHandle); + SndPlayResource(jvPtr,1024,sndFlagAsync); + MemHandleUnlock(jvHandle); +} + +static void JavaFormResizeForm(FormType *frmP,RectangleType *fromBounds, RectangleType *toBounds) { + Int16 heightDelta, widthDelta; + UInt16 numObjects, i; + heightDelta=(toBounds->extent.y-toBounds->topLeft.y)-(fromBounds->extent.y-fromBounds->topLeft.y); + widthDelta=(toBounds->extent.x-toBounds->topLeft.x)-(fromBounds->extent.x-fromBounds->topLeft.x); + numObjects=FrmGetNumberOfObjects(frmP); + for(i=0; i>1),y+(heightDelta>>1)); + break; + } + } +} + +static Boolean MainFormHandleEvent(EventPtr eventP) { + Boolean handled = false; + FormType *frmP; + + switch (eventP->eType) { + case menuEvent: + if (eventP->data.menu.itemID == AboutMenuItm) { + MenuEraseStatus(0); + FrmAlert(AboutAlert); + handled = true; + break; + } + break; + case frmOpenEvent: + frmP = FrmGetActiveForm(); + FrmDrawForm(frmP); + handled = true; + break; + case ctlSelectEvent: + switch(eventP->data.ctlSelect.controlID) { + case JavaButton: + playJavaSound(); + handled=true; + break; + default: + break; + } + break; + case keyDownEvent: + if(NavSelectPressed(eventP)) { + playJavaSound(); + handled=true; + break; + } + switch (eventP->data.keyDown.chr) { + case vchrPageUp: + case vchrJogUp: + case vchrPageDown: + case vchrJogDown: + case vchrJogPush: + case vchrJogPushedUp: + case vchrJogPushedDown: + playJavaSound(); + handled = true; + break; + } + break; + case winDisplayChangedEvent: + { + RectangleType curBounds,displayBounds; + frmP=FrmGetActiveForm(); + WinGetBounds(FrmGetWindowHandle(frmP),&curBounds); + WinGetBounds(WinGetDisplayWindow(), &displayBounds); + JavaFormResizeForm(frmP,&curBounds,&displayBounds); + FrmDrawForm(frmP); + handled=true; + break; + } + default: + break; + } + return handled; +} + +static Boolean dynamicInputAvail() { + UInt32 version; + Err err=FtrGet(pinCreator,pinFtrAPIVersion,&version); + if(!err && version) { + return true; + } else { + return false; + } +} + +static void setPalmDynInputParams(FormType *frmP) { + Err err; + Boolean dia=dynamicInputAvail(); + if(dia) { + WinHandle frmH; + err=FrmSetDIAPolicyAttr(frmP,frmDIAPolicyCustom); + if(!err) { + err=PINSetInputTriggerState(pinInputTriggerEnabled); + } + frmH=FrmGetWindowHandle(frmP); + WinSetConstraintsSize(frmH,160,160,640,160,160,640); + } +} + +static void setSonyVirtSilkParams(frmP) { + return; +} + +static void dynInputOnMainFormLoad(FormType *frmP) { + setPalmDynInputParams(frmP); + setSonyVirtSilkParams(frmP); +} + +static Boolean AppHandleEvent(EventPtr eventP) { + Boolean handled = false; + FormType *frmP; + + if (eventP->eType == frmLoadEvent) { /* Initialize and activate the form resource. */ + frmP = FrmInitForm(eventP->data.frmLoad.formID); + + FrmSetActiveForm(frmP); + + if (eventP->data.frmLoad.formID == MainForm) { + dynInputOnMainFormLoad(frmP); + FrmSetEventHandler(frmP, MainFormHandleEvent); + } + handled = true; + } else if (eventP->eType == frmOpenEvent) { /* Load the form resource. */ + frmP = FrmGetActiveForm(); + FrmDrawForm(frmP); + handled = true; + } else if (eventP->eType == appStopEvent) { /* Unload the form resource. */ + frmP = FrmGetActiveForm(); + FrmEraseForm(frmP); + FrmDeleteForm(frmP); + handled = true; + } + + return(handled); +} + +static Boolean isTheDeviceSupported() { + UInt32 version = 0; + Err err; + Boolean res=false; + err=FtrGet(sysFileCSoundMgr,sndFtrIDVersion,&version); + if(!err) { + if(version) { + return true; + } + } + return res; +} + +UInt32 PilotMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags) { + EventType event; + Err err = 0; + + switch (cmd) { + case sysAppLaunchCmdNormalLaunch: + if(isTheDeviceSupported() == false) { + FrmAlert(OldAlert); + break; + } + + FrmGotoForm(MainForm); + do { + UInt16 MenuError; + EvtGetEvent(&event, evtWaitForever); + if (! SysHandleEvent(&event)) + if (! MenuHandleEvent(0, &event, &MenuError)) + if (! AppHandleEvent(&event)) + FrmDispatchEvent(&event); + } while (event.eType != appStopEvent); + break; + case sysAppLaunchCmdNotify: + if(((SysNotifyParamType*) cmdPBP)->notifyType==sysNotifyDisplayResizedEvent) { + EventType resizedEvent; + MemSet(&resizedEvent,sizeof(EventType),0); + resizedEvent.eType=winDisplayChangedEvent; + EvtAddUniqueEventToQueue(&resizedEvent,0,true); + } + break; + default: + break; + } + return(err); +}