int init_macintosh( void) { static int initdone = 0; Handle menuBar; long attributes; /* semaphore required for preemptive threads */ if( initdone) return initdone == 1; initdone = -1; /* should I check for MLNK resource too as launch-filtering is done based on it? */ /* too late--since I'm running there likely wasn't a problem (this time anyway). */ menuBar = GetNewMBar(rMenuBar); if( menuBar){ SetMenuBar(menuBar); DisposeHandle(menuBar); }else{ MenuHandle am, fm, em; am = NewMenu( mApple, (unsigned char*)"\001\024"); fm = NewMenu( mFile, (unsigned char*)"\004File"); em = NewMenu( mEdit, (unsigned char*)"\004Edit"); if( !am || !fm || !em) return 0; AppendMenu( am, (unsigned char*)"\022About MathLink\252\311;-"); DisableMenuItem(am, 0); InsertMenu( am, 0); AppendMenu( fm, (unsigned char*)"\006Quit/Q"); InsertMenu( fm, 0); AppendMenu( em, (unsigned char*)"\043Undo/Z;-;Cut/X;Copy/C;Paste/V;Clear"); DisableMenuItem(em, 0); InsertMenu( em, 0); } AppendResMenu( GetMenuHandle(mApple), 'DRVR'); set_about_item(); DrawMenuBar(); about_filter_upp = NewModalFilterUPP( about_filter); outline_hook_upp = NewUserItemUPP( outline_hook); if( Gestalt( gestaltAppleEventsAttr, &attributes) == noErr && ((1 << gestaltAppleEventsPresent) & attributes)){ handle_core_ae_upp = NewAEEventHandlerUPP( handle_core_ae); (void) AEInstallEventHandler( kCoreEventClass, typeWildCard, handle_core_ae_upp, 0, false); }else{ return 0; /* this may be too strong since I am, after all, running. */ } initdone = 1; return initdone == 1; }
/* GetXOPDialog(dialogID) This routine is implemented on Macintosh only. Thread Safety: GetXOPDialog is not thread-safe. */ DialogPtr GetXOPDialog(int dialogID) { DialogPtr theDialog; int saveResFile; saveResFile = CurResFile(); UseResFile(XOPRefNum()); theDialog = GetNewDialog(dialogID, NULL, (WindowPtr)-1); UseResFile(saveResFile); if (theDialog == NULL) return NULL; gXOPDialogFilterUPP = NewModalFilterUPP(XOPDialogFilter); return theDialog; }
void ShowSecurityError(const char *format, ...) { va_list args; #ifdef __x86_64__ va_start(args, format); vfprintf(stderr, format, args); va_end(args); #else char s[1024]; short itemHit; AlertStdAlertParamRec alertParams; ModalFilterUPP ErrorDlgFilterProcUPP; ProcessSerialNumber ourProcess; va_start(args, format); s[0] = vsprintf(s+1, format, args); va_end(args); ErrorDlgFilterProcUPP = NewModalFilterUPP(ErrorDlgFilterProc); alertParams.movable = true; alertParams.helpButton = false; alertParams.filterProc = ErrorDlgFilterProcUPP; alertParams.defaultText = "\pOK"; alertParams.cancelText = NULL; alertParams.otherText = NULL; alertParams.defaultButton = kAlertStdAlertOKButton; alertParams.cancelButton = 0; alertParams.position = kWindowDefaultPosition; ::GetCurrentProcess (&ourProcess); ::SetFrontProcess(&ourProcess); StandardAlert (kAlertStopAlert, (StringPtr)s, NULL, &alertParams, &itemHit); DisposeModalFilterUPP(ErrorDlgFilterProcUPP); #endif }