This is MailCrashTrap.m in view mode; [Download] [Up]
/*+++
* title: MailCrashTrap.m
* abstract: Implementation of MailCrashTrap class for PROJECT.
* author: Tom Hageman <mailapp-utilities@basil.icce.rug.nl>
* created: December 1998
* modified: January 1999
* copyleft:
*
* Copyright (C) 1998, 1999 Tom R. Hageman.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this software; see the file COPYING. If not, write to
* the Free Software Foundation, 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
* description:
* (see corresponding *.h file)
*---*/
static const char * const RCSid = ((void)&RCSid,
"@(#)MailCrashTrap.m,v 1.7 1999/01/10 17:28:47 tom Exp");
#define RCS_MailCrashTrap_ID
#import <appkit/appkit.h>
#import "MailCrashTrap.h"
#import "TRHCrashTrap.h"
#import "version.h"
// Localizables.
#define CRASH_ALERT NXLocalizedStringFromTableInBundle(NULL, bundle, "CRASH_ALERT", "Crash Alert!", Error alert header)
#define CRASH_MESSAGE_FORMAT NXLocalizedStringFromTableInBundle(NULL, bundle, "CRASH_MESSAGE_FORMAT", "%s\n\nAn internal error has occurred. Try to save work, then quit and restart Mail Ð or continue at your own risk.\n(see the console for details)", Crash alert message format; %s is replaced with actual message)
#define CRASH_CONTINUE_BUTTON NXLocalizedStringFromTableInBundle(NULL, bundle, "Continue", NULL, Crash alert default [continue] button)
#define CRASH_EXIT_BUTTON NXLocalizedStringFromTableInBundle(NULL, bundle, "Exit", NULL, Crash alert alternate [crash] button)
static const char *crash_alert;
static const char *crash_message_format;
static const char *crash_continue_button;
static const char *crash_exit_button;
/* Support function to transmogrify class of existing instance. */
static void changeClassOfInstanceTo(id instance, Class class)
{
/* Don't try this at home, kids */
instance->isa = class;
}
@implementation MailCrashTrap
static NXBundle *bundle;
+ finishLoading:(struct mach_header *)header
{
[self poseAs:[self superclass]];
changeClassOfInstanceTo(NXApp, self);
bundle = [NXBundle bundleForClass:self];
[self setupCrashTrap];
return self;
}
+ (void)setupCrashTrap
{
// Preload localizable strings, to improve robustness.
crash_alert = CRASH_ALERT;
crash_message_format = CRASH_MESSAGE_FORMAT;
crash_continue_button = CRASH_CONTINUE_BUTTON;
crash_exit_button = CRASH_EXIT_BUTTON;
[TRHCrashTrap setup];
[TRHCrashTrap setContinueAfterError:YES];
[self logNote:"%s (version %s, %s) installed", PACKAGE, VERSION, VERSION_DATE];
}
/* This is to update CrashTrap's signal handlers _after_ -appDidInit: has finished.
Since -appDidInit: installs its own signal handlers after it loads bundles,
we'd lose out otherwise.
Also setup self as CrashTrap delegate, so we can use our own alert panel. */
- (void)finishSetupCrashTrap
{
[TRHCrashTrap resumeHandlingCrashes];
[TRHCrashTrap setDelegate:self];
}
- initialCheck:sender
{
[self finishSetupCrashTrap];
return [super initialCheck:sender];
}
// CrashTrap delegate method.
- (BOOL)crashTrap:sender shouldContinueAfterError:(const char *)anErrorMessage
{
return NXRunAlertPanel(crash_alert,
crash_message_format,
crash_continue_button,
crash_exit_button,
NULL,
anErrorMessage) == NX_ALERTDEFAULT;
// XXX should preallocate this alert panel to be more crashproof.
}
@end // MailCrashTrap
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.