2 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
3 SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
4 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
5 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
6 IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
7 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
8 FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
9 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
10 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
11 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
15 #define WIN32_LEAN_AND_MEAN
36 #define MAX_MSG_LEN 256
40 static void (*ErrorPrintFunc)(char *);
42 char exit_message[MAX_MSG_LEN]="";
43 char warn_message[MAX_MSG_LEN];
45 //takes string in register, calls printf with string on stack
46 void warn_printf(char *s)
51 void (*warn_func)(char *s)=warn_printf;
53 //provides a function to call with warning messages
54 void set_warn_func(void (*f)(char *s))
59 //uninstall warning function - install default printf
60 void clear_warn_func(void (*f)(char *s))
62 warn_func = warn_printf;
65 void set_exit_message(char *fmt,...)
70 va_start(arglist,fmt);
71 len = vsprintf(exit_message,fmt,arglist);
74 if (len==-1 || len>MAX_MSG_LEN) Error("Message too long in set_exit_message (len=%d, max=%d)",len,MAX_MSG_LEN);
79 void _Assert(int expr, char *expr_text, char *filename, int linenum)
83 if (FindArg("-debugmode")) DebugBreak();
85 Error("Assertion failed: %s, file %s, line %d", expr_text, filename, linenum);
89 void _Assert(int expr,char *expr_text,char *filename,int linenum)
91 if (!(expr)) Error("Assertion failed: %s, file %s, line %d",expr_text,filename,linenum);
96 void print_exit_message()
102 (*ErrorPrintFunc)(exit_message);
106 #if (defined(MACINTOSH) && defined(NDEBUG) && defined(RELEASE))
108 c2pstr(exit_message);
110 ParamText(exit_message, "\p", "\p", "\p");
111 StopAlert(ERROR_ALERT, nil);
115 printf("%s\n",exit_message);
122 //terminates with error code 1, printing message
123 void Error(char *fmt,...)
127 #if (defined(MACINTOSH) && defined(NDEBUG) && defined(RELEASE))
128 strcpy(exit_message,"Error: "); // don't put the new line in for dialog output
130 strcpy(exit_message,"\nError: ");
132 va_start(arglist,fmt);
133 vsprintf(exit_message+strlen(exit_message),fmt,arglist);
138 if (!initialized) print_exit_message();
143 //print out warning message to user
144 void Warning(char *fmt,...)
148 if (warn_func == NULL)
151 strcpy(warn_message,"Warning: ");
153 va_start(arglist,fmt);
154 vsprintf(warn_message+strlen(warn_message),fmt,arglist);
157 mprintf((0, "%s\n", warn_message));
158 (*warn_func)(warn_message);
162 //initialize error handling system, and set default message. returns 0=ok
163 int error_init(void (*func)(char *), char *fmt,...)
168 atexit(print_exit_message); //last thing at exit is print message
170 ErrorPrintFunc = func; // Set Error Print Functions
173 va_start(arglist,fmt);
174 len = vsprintf(exit_message,fmt,arglist);
176 if (len==-1 || len>MAX_MSG_LEN) Error("Message too long in error_init (len=%d, max=%d)",len,MAX_MSG_LEN);
186 int MacEnableInt3 = 1;
188 void MacAssert(int expr, char *expr_text, char *filename, int linenum)
192 // Error("Assertion failed: %s, file %s, line %d", expr_text, filename, linenum);
200 int WinEnableInt3 = 1;