// #include "os.h" #if defined(IS_MACOSX) #include #endif #if defined(IS_MACOSX) CFStringRef CFStringCreateWithUTF8String(const char *title) { if (title == NULL) { return NULL; } return CFStringCreateWithCString(NULL, title, kCFStringEncodingUTF8); } #endif int showAlert(const char *title, const char *msg, const char *defaultButton, const char *cancelButton) { #if defined(IS_MACOSX) CFStringRef alertHeader = CFStringCreateWithUTF8String(title); CFStringRef alertMessage = CFStringCreateWithUTF8String(msg); CFStringRef defaultButtonTitle = CFStringCreateWithUTF8String(defaultButton); CFStringRef cancelButtonTitle = CFStringCreateWithUTF8String(cancelButton); CFOptionFlags responseFlags; SInt32 err = CFUserNotificationDisplayAlert( 0.0, kCFUserNotificationNoteAlertLevel, NULL, NULL, NULL, alertHeader, alertMessage, defaultButtonTitle, cancelButtonTitle, NULL, &responseFlags); if (alertHeader != NULL) CFRelease(alertHeader); if (alertMessage != NULL) CFRelease(alertMessage); if (defaultButtonTitle != NULL) CFRelease(defaultButtonTitle); if (cancelButtonTitle != NULL) CFRelease(cancelButtonTitle); if (err != 0) { return -1; } return (responseFlags == kCFUserNotificationDefaultResponse) ? 0 : 1; #elif defined(USE_X11) return 0; #else /* TODO: Display custom buttons instead of the pre-defined "OK" and "Cancel". */ int response = MessageBox(NULL, msg, title, (cancelButton == NULL) ? MB_OK : MB_OKCANCEL ); return (response == IDOK) ? 0 : 1; #endif }