+
+const short kMacMinHeap = (29 * 1024) ;
+// platform specific static variables
+
+const short kwxMacMenuBarResource = 1 ;
+const short kwxMacAppleMenuId = 1 ;
+
+RgnHandle wxApp::s_macCursorRgn = NULL;
+wxWindow* wxApp::s_captureWindow = NULL ;
+int wxApp::s_lastMouseDown = 0 ;
+long wxApp::sm_lastMessageTime = 0;
+
+bool wxApp::s_macDefaultEncodingIsPC = true ;
+bool wxApp::s_macSupportPCMenuShortcuts = true ;
+long wxApp::s_macAboutMenuItemId = wxID_ABOUT ;
+wxString wxApp::s_macHelpMenuTitleName = "&Help" ;
+
+#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
+pascal OSErr AEHandleODoc( const AppleEvent *event , AppleEvent *reply , long refcon )
+#else
+pascal OSErr AEHandleODoc( const AppleEvent *event , AppleEvent *reply , unsigned long refcon )
+#endif
+{
+ wxApp* app = (wxApp*) refcon ;
+ return wxTheApp->MacHandleAEODoc( (AppleEvent*) event , reply) ;
+}
+
+#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
+pascal OSErr AEHandleOApp( const AppleEvent *event , AppleEvent *reply , long refcon )
+#else
+pascal OSErr AEHandleOApp( const AppleEvent *event , AppleEvent *reply , unsigned long refcon )
+#endif
+{
+ wxApp* app = (wxApp*) refcon ;
+ return wxTheApp->MacHandleAEOApp( (AppleEvent*) event , reply ) ;
+}
+
+#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
+pascal OSErr AEHandlePDoc( const AppleEvent *event , AppleEvent *reply , long refcon )
+#else
+pascal OSErr AEHandlePDoc( const AppleEvent *event , AppleEvent *reply , unsigned long refcon )
+#endif
+{
+ wxApp* app = (wxApp*) refcon ;
+ return wxTheApp->MacHandleAEPDoc( (AppleEvent*) event , reply ) ;
+}
+
+#if defined(UNIVERSAL_INTERFACES_VERSION) && (UNIVERSAL_INTERFACES_VERSION >= 0x0340)
+pascal OSErr AEHandleQuit( const AppleEvent *event , AppleEvent *reply , long refcon )
+#else
+pascal OSErr AEHandleQuit( const AppleEvent *event , AppleEvent *reply , unsigned long refcon )
+#endif
+{
+ wxApp* app = (wxApp*) refcon ;
+ return wxTheApp->MacHandleAEQuit( (AppleEvent*) event , reply) ;
+}
+
+OSErr wxApp::MacHandleAEODoc(const AppleEvent *event , AppleEvent *reply)
+{
+ SysBeep(40) ;
+ ProcessSerialNumber PSN ;
+ PSN.highLongOfPSN = 0 ;
+ PSN.lowLongOfPSN = kCurrentProcess ;
+ SetFrontProcess( &PSN ) ;
+ return noErr ;
+}
+
+OSErr wxApp::MacHandleAEPDoc(const AppleEvent *event , AppleEvent *reply)
+{
+ return noErr ;
+}
+
+OSErr wxApp::MacHandleAEOApp(const AppleEvent *event , AppleEvent *reply)
+{
+ return noErr ;
+}
+
+OSErr wxApp::MacHandleAEQuit(const AppleEvent *event , AppleEvent *reply)
+{
+ wxWindow* win = GetTopWindow() ;
+ if ( win )
+ {
+ win->Close(TRUE ) ;
+ }
+ else
+ {
+ ExitMainLoop() ;
+ }
+ return noErr ;
+}
+
+char StringMac[] = "\x0d\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
+ "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
+ "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xae\xaf"
+ "\xb1\xb4\xb5\xb6\xbb\xbc\xbe\xbf"
+ "\xc0\xc1\xc2\xc4\xc7\xc8\xc9\xcb\xcc\xcd\xce\xcf"
+ "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd8\xca\xdb" ;
+
+char StringANSI[] = "\x0a\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8"
+ "\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC"
+ "\x86\xBA\xA2\xA3\xA7\x95\xB6\xDF\xAE\xA9\x99\xB4\xA8\xC6\xD8"
+ "\xB1\xA5\xB5\xF0\xAA\xBA\xE6\xF8"
+ "\xBF\xA1\xAC\x83\xAB\xBB\x85\xC0\xC3\xD5\x8C\x9C"
+ "\x96\x97\x93\x94\x91\x92\xF7\xFF\xA0\x80" ;
+
+void wxMacConvertFromPC( const char *from , char *to , int len )
+{
+ char *c ;
+ if ( from == to )
+ {
+ for( int i = 0 ; i < len ; ++ i )
+ {
+ c = strchr( StringANSI , *from ) ;
+ if ( c != NULL )
+ {
+ *to = StringMac[ c - StringANSI] ;
+ }
+ ++to ;
+ ++from ;
+ }
+ }
+ else
+ {
+ for( int i = 0 ; i < len ; ++ i )
+ {
+ c = strchr( StringANSI , *from ) ;
+ if ( c != NULL )
+ {
+ *to = StringMac[ c - StringANSI] ;
+ }
+ else
+ {
+ *to = *from ;
+ }
+ ++to ;
+ ++from ;
+ }
+ }
+}
+
+void wxMacConvertToPC( const char *from , char *to , int len )
+{
+ char *c ;
+ if ( from == to )
+ {
+ for( int i = 0 ; i < len ; ++ i )
+ {
+ c = strchr( StringMac , *from ) ;
+ if ( c != NULL )
+ {
+ *to = StringANSI[ c - StringMac] ;
+ }
+ ++to ;
+ ++from ;
+ }
+ }
+ else
+ {
+ for( int i = 0 ; i < len ; ++ i )
+ {
+ c = strchr( StringMac , *from ) ;
+ if ( c != NULL )
+ {
+ *to = StringANSI[ c - StringMac] ;
+ }
+ else
+ {
+ *to = *from ;
+ }
+ ++to ;
+ ++from ;
+ }
+ }
+}
+
+void wxMacConvertFromPC( char * p )
+{
+ char *ptr = p ;
+ int len = strlen ( p ) ;
+
+ wxMacConvertFromPC( ptr , ptr , len ) ;
+}
+
+void wxMacConvertFromPCForControls( char * p )
+{
+ char *ptr = p ;
+ int len = strlen ( p ) ;
+
+ wxMacConvertFromPC( ptr , ptr , len ) ;
+ for ( int i = 0 ; i < strlen ( ptr ) ; i++ )
+ {
+ if ( ptr[i] == '&' && ptr[i]+1 != ' ' )
+ {
+ memmove( &ptr[i] , &ptr[i+1] , strlen( &ptr[i+1] ) + 1) ;
+ }
+ }
+}
+
+void wxMacConvertFromPC( unsigned char *p )
+{
+ char *ptr = (char*) p + 1 ;
+ int len = p[0] ;
+
+ wxMacConvertFromPC( ptr , ptr , len ) ;
+}
+
+extern char *wxBuffer ;
+
+wxString wxMacMakeMacStringFromPC( const char * p )
+{
+ const char *ptr = p ;
+ int len = strlen ( p ) ;
+ char *buf = wxBuffer ;
+
+ if ( len >= BUFSIZ + 512 )
+ {
+ buf = new char [len+1] ;
+ }
+
+ wxMacConvertFromPC( ptr , buf , len ) ;
+ buf[len] = 0 ;
+ wxString result( buf ) ;
+ if ( buf != wxBuffer )
+ delete buf ;
+ return result ;
+}
+
+
+void wxMacConvertToPC( char * p )
+{
+ char *ptr = p ;
+ int len = strlen ( p ) ;
+
+ wxMacConvertToPC( ptr , ptr , len ) ;
+}
+
+void wxMacConvertToPC( unsigned char *p )
+{
+ char *ptr = (char*) p + 1 ;
+ int len = p[0] ;
+
+ wxMacConvertToPC( ptr , ptr , len ) ;
+}
+
+wxString wxMacMakePCStringFromMac( const char * p )
+{
+ const char *ptr = p ;
+ int len = strlen ( p ) ;
+ char *buf = wxBuffer ;
+
+ if ( len >= BUFSIZ + 512 )
+ {
+ buf = new char [len+1] ;
+ }
+
+ wxMacConvertToPC( ptr , buf , len ) ;
+ buf[len] = 0 ;
+
+ wxString result( buf ) ;
+ if ( buf != wxBuffer )
+ delete buf ;
+ return result ;
+}
+
+wxString wxMacMakeStringFromMacString( const char* from , bool mac2pcEncoding )
+{
+ if (mac2pcEncoding)
+ {
+ return wxMacMakePCStringFromMac( from ) ;
+ }
+ else
+ {
+ return wxString( from ) ;
+ }
+}
+
+wxString wxMacMakeStringFromPascal( StringPtr from , bool mac2pcEncoding )
+{
+ // this is safe since a pascal string can never be larger than 256 bytes
+ char s[256] ;
+ CopyPascalStringToC( from , s ) ;
+ if (mac2pcEncoding)
+ {
+ return wxMacMakePCStringFromMac( s ) ;
+ }
+ else
+ {
+ return wxString( s ) ;
+ }
+}
+
+void wxMacStringToPascal( const char * from , StringPtr to , bool pc2macEncoding )
+{
+ if (pc2macEncoding)
+ {
+ CopyCStringToPascal( wxMacMakeMacStringFromPC( from ) , to ) ;
+ }
+ else
+ {
+ CopyCStringToPascal( from , to ) ;
+ }
+}