00001 // 00002 // 00003 // Upper interface declarations for MacMain functions 00004 // 00005 #ifndef MACMAINIF_H_ 00006 #define MACMAINIF_H 1 00007 00008 // This embarassing hack exists purely because EMACS' electric-c indentation 00009 // mode is too clever by half... 00010 #ifdef __cplusplus 00011 #define BEGIN_EXTERN_C extern "C" { 00012 #define END_EXTERN_C }; 00013 #else 00014 #define BEGIN_EXTERN_C 00015 #define END_EXTERN_C 00016 #endif 00017 00018 #include <CoreServices/CoreServices.h> 00019 00020 BEGIN_EXTERN_C 00021 00022 long MacInitialisePWLibEvents(void); 00023 long MacTeardownPWLibEvents(void); 00024 // technically, CALLBACK_API_C returns OSStatus, but that's a long 00025 typedef long(*callback_api_c)(void*); 00026 int SpawnProcessInContext( callback_api_c trampoline ); 00027 // The shutdown dance is long and complicated. 00028 // Actually, it's not. When (or shortly after) the PProcess terminates, 00029 // three things happen: 00030 // The extern variable pwlibAppQueueID gets set to zero; 00031 // the main application event loop receives a special event call; 00032 // and the main application receives a Quit event. 00033 // Here's the special event: 00034 #define kEventClassPwlib 'PWLB' 00035 #define kEventPwlibPProcExit 0 00036 // Here's the variable: 00037 extern MPQueueID pwlibAppQueueID; 00038 // And here's a function you can call to wait for the application PProcess 00039 // to exit (assuming you've already suggested to it that it should). 00040 long MacWaitForPProcess(Duration); 00041 00042 END_EXTERN_C 00043 #endif