home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ARM Club 3
/
TheARMClub_PDCD3.iso
/
hensa
/
programming
/
desklib
/
examples
/
DeskLib
/
Examples
/
!SpriteTst
/
c
/
Error
< prev
Wrap
Text File
|
1993-07-13
|
3KB
|
124 lines
/*
#### # # # #
# # # # # The FreeWare C library for
# # ## ### # # # # ### RISC OS machines
# # # # # # # # # # # ___________________________________
# # #### ### ## # # # #
# # # # # # # # # # Please refer to the accompanying
#### ### #### # # ##### # ### documentation for conditions of use
________________________________________________________________________
File: Error.c
Author: Copyright © 1992 Jason Williams
Improved by Philip Colmer
Version: 0.19 (13 Jul 1993)
Purpose: Centralised error handling functions
Mods: 7 Apr 1992 - JCW - Added Error_OutOfMemory
30 Apr 1993 - JCW - Fixed (Wimp_ReportError prototype changed)
14 Jun 1993 - PJC - Allowed Error_Report(Fatal) to take
variable arguments
13 Jul 1993 - PJC - Added varargs to "Internal" versions of above
*/
#include <stdarg.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "DeskLib:Error.h"
#include "DeskLib:WimpSWIs.h"
#include "DeskLib:Event.h"
extern void Error_Report(int errornum, char *report, ...)
{
va_list va;
os_error error;
error_flags eflags;
va_start(va, report);
vsprintf(error.errmess, report, va);
va_end(va);
error.errnum = errornum;
eflags.value = 1;
(void) Wimp_ReportError(&error, eflags.value, event_taskname);
}
extern void Error_ReportFatal(int errornum, char *report, ...)
{
va_list va;
char errmess[256];
va_start(va, report);
vsprintf(errmess, report, va);
va_end(va);
Error_Report(errornum,
"%s has suffered a fatal internal error (%s) and must quit immediately",
event_taskname, errmess);
exit(1);
}
extern void Error_ReportInternal(int errornum, char *report, ...)
{
va_list va;
char errmess[256];
va_start(va, report);
vsprintf(errmess, report, va);
va_end(va);
Error_Report(errornum, errmess);
}
extern void Error_ReportFatalInternal(int errornum, char *report, ...)
{
va_list va;
char errmess[256];
va_start(va, report);
vsprintf(errmess, report, va);
va_end(va);
Error_ReportFatal(errornum, errmess);
}
extern BOOL Error_Check(os_error *error)
{
if (error != NULL)
{
Error_Report(error->errnum, error->errmess);
return(TRUE);
}
return(FALSE);
}
extern void Error_CheckFatal(os_error *error)
{
if (error != NULL)
Error_ReportFatal(error->errnum, error->errmess);
}
extern BOOL Error_OutOfMemory(BOOL fatal, char *place)
{
if (fatal)
Error_ReportFatal(0, "Unable to get enough memory for the %s", place);
else
Error_Report(0, "Unable to get enough memory for the %s", place);
return(FALSE); /* Always returns FALSE so can return FALSE from your
* own function at the same time as reporting the error
*/
}