campo-sirio/cb5/e4error.c
angelo 0f26593d44 This commit was generated by cvs2svn to compensate for changes in r1542,
which included commits to RCS files with non-trunk default branches.

git-svn-id: svn://10.65.10.50/trunk@1543 c028cbd2-c16b-5b4b-a496-9718f37d4682
1995-07-03 08:54:44 +00:00

972 lines
26 KiB
C
Executable File
Raw Blame History

/* e4error.c (c)Copyright Sequiter Software Inc., 1990-1994. All rights reserved. */
#include "d4all.h"
#ifndef S4UNIX
#ifdef __TURBOC__
#pragma hdrstop
#endif /* __TUROBC__ */
#endif /* S4UNIX */
#ifndef S4WINDOWS
#ifndef S4UNIX
#include <conio.h>
#endif /* S4UNIX */
#endif /* not S4WINDOWS */
#ifdef S4OS2PM
#define E4MSGBOXID 9513
static void do_error_box( void ) ;
#endif
#ifdef S4VB_DOS
#define V4ERROR 1
#define V4SEVERE 2
#endif
#ifndef S4TEST
/* Add alternative error display code here.
Function e4hook() may be placed in your own separate source code
file, but ensure that the same function prototype as below is used.
*/
void S4FUNCTION e4hook( CODE4 S4PTR *c4, int err_code, char *desc1, char *desc2, char *desc3 )
{
return ;
}
#endif
#ifdef S4TESTING
extern int s4test_handle ;
#endif
#ifdef S4WINDOWS
#ifdef __TURBOC__
#if __TURBOC__ == 0x297 /* if Borland C++ 2.0 */
#ifdef __cplusplus
extern "C"{ void FAR PASCAL FatalAppExit(WORD,LPSTR) ; }
#else
void FAR PASCAL FatalAppExit(WORD,LPSTR) ;
#endif /* __cplusplus */
#endif /* __TUROBC__ == 0x297 */
#endif /* __TUROBC__ */
#ifndef __SC__
#ifdef __ZTC__
#ifdef __cplusplus
extern "C"{ void FAR PASCAL FatalAppExit(unsigned short,LPSTR) ; }
#else
void FAR PASCAL FatalAppExit(unsigned short,LPSTR) ;
#endif /* __cplusplus */
#endif /* __ZTC__ */
#endif /* __SC__ */
#ifdef _MSC_VER
#if _MSC_VER == 600
#ifdef __cplusplus
extern "C"{ void FAR PASCAL FatalAppExit(WORD,LPSTR) ; }
#else
void FAR PASCAL FatalAppExit(WORD,LPSTR) ;
#endif /* __cplusplus */
#endif /* _MSC_VER == 600 */
#endif /* _MSC_VER */
#endif /* S4WINDOWS */
#ifndef S4OFF_ERROR
#ifndef S4LANGUAGE
ERROR_DATA e4error_data[] =
{
/* General Disk Access Errors */
{ e4create, "Creating File" },
{ e4open, "Opening File" },
{ e4read, "Reading File" },
{ e4seek, "Seeking to File Position" },
{ e4write, "Writing to File" },
{ e4close, "Closing File" },
{ e4remove, "Removing File" },
{ e4lock, "Locking File" },
{ e4unlock, "Unlocking File" },
{ e4len, "Determining File Length" },
{ e4len_set, "Setting File Length" },
{ e4rename, "Renaming File" },
/* Database Specific Errors */
{ e4data, "File is not a Data File" },
{ e4record_len, "Record Length is too Large" },
{ e4field_name, "Unrecognized Field Name" },
{ e4field_type, "Unrecognized Field Type" },
/* Index File Specific Errors */
{ e4index, "Not a Correct Index File" },
{ e4entry, "Tag Entry Missing" },
{ e4unique, "Unique Key Error" },
{ e4tag_name, "Tag Name not Found" },
/* Expression Evaluation Errors */
{ e4comma_expected, "Comma or Bracket Expected" },
{ e4complete, "Expression not Complete" },
{ e4data_name, "Data File Name not Located" },
{ e4length_err, "IIF() Needs Parameters of Same Length" },
{ e4not_constant, "SUBSTR() and STR() need Constant Parameters" },
{ e4num_parms, "Number of Parameters is Wrong" },
{ e4overflow, "Overflow while Evaluating Expression" },
{ e4right_missing, "Right Bracket Missing" },
{ e4type_sub, "Sub-expression Type is Wrong" },
{ e4unrec_function, "Unrecognized Function" },
{ e4unrec_operator, "Unrecognized Operator" },
{ e4unrec_value, "Unrecognized Value"} ,
{ e4unterminated, "Unterminated String"} ,
/* Optimization Errors */
{ e4opt, "Optimization Error"} ,
{ e4opt_suspend, "Optimization Removal Failure"} ,
{ e4opt_flush, "Optimization File Flushing Failure"} ,
/* Relation Errors */
{ e4relate, "Relation Error"} ,
{ e4lookup_err, "Matching Slave Record Not Located"} ,
/* Report Errors */
{ e4report, "Report Error"} ,
{ e4style_create, "Error Creating Style"},
{ e4style_select, "Error Selecting Style"},
{ e4style_index, "Error Finding Style"},
{ e4area_create, "Error Creating Area"},
{ e4group_create, "Error Creating Group"},
{ e4group_expr, "Error Setting Group Reset-Expression"},
{ e4total_create, "Error Creating Total"},
{ e4obj_create, "Error Creating Object"},
{ e4rep_win, "Error In Windows Output"},
{ e4rep_out, "Error In Report Output"},
{ e4rep_save, "Error Saving Report"},
{ e4rep_ret, "Error Retrieving Report"},
{ e4rep_data, "Error In Sending Report to Data File"},
/* Critical Errors */
{ e4memory, "Out of Memory"} ,
{ e4info, "Unexpected Information"} ,
{ e4parm, "Unexpected Parameter"} ,
{ e4demo, "Exceeded Maximum Record Number for Demonstration"} ,
{ e4result, "Unexpected Result"} ,
/* Not Supported Errors */
{ e4not_memo, "Function unsupported: library compiled with S4OFF_MEMO" },
{ e4not_write, "Function unsupported: library compiled with S4OFF_WRITE" },
{ e4not_index, "Function unsupported: library compiled with S4OFF_INDEX" },
{ e4not_rename, "Function unsupported: library compiled with S4NO_RENAME" },
{ e4not_clipper, "Function unsupported: library not compiled with S4CLIPPER" },
{ e4not_lock, "Function unsupported: library not compiled with S4LOCK_HOOK" },
{ e4not_hook, "Function unsupported: library not compiled with S4ERROR_HOOK" },
{ 0, 0 },
} ;
#endif /* not S4LANGUAGE */
#ifdef S4LANGUAGE
#ifdef S4GERMAN
ERROR_DATA e4error_data[] =
{
/* Allgemeine Fehler beim Diskzugriff (General Disk Access Errors) */
{ e4create, "Anlegen einer Datei" },
{ e4open, "<EFBFBD>ffnen einer Datei" },
{ e4read, "Lesen einer Datei" },
{ e4seek, "Suchen einer Position in der Datei " },
{ e4write, "Schreiben einer Datei" },
{ e4close, "Schlie<EFBFBD>en einer Datei" },
{ e4remove, "L<EFBFBD>schen einer Datei" },
{ e4lock, "Locken einer Datei" },
{ e4unlock, "Freigeben einer Datei" },
{ e4len, "Festlegen der L<>nge einer Datei" },
{ e4len_set, "Einstellen der L<>nge einer Datei" },
{ e4rename, "Umnennen einer Datei" },
/* Datenbank spezifische Fehler (Database Specific Errors) */
{ e4data, "Datei is keiner DatenBank" },
{ e4record_len, "Datensatzl<EFBFBD>nge zu gro<72>" },
{ e4field_name, "Unbekannter Feldname" },
{ e4field_type, "Feldtyp" },
/* Indexdatei spezifische Fehler (Index File Specific Errors) */
{ e4index, "Datei is keine Indexdatei" },
{ e4entry, "Indexdatei is veraltet" },
{ e4unique, "Schul<EFBFBD>sel ist schon einmal vorhanden" },
{ e4tag_name, "Name des 'Tag'"},
/* Fehler bei der Bewertung von Ausdr<64>cken (Expressions Evaluation Errors) */
{ e4comma_expected, "\",\" oder \")\" erwartet" },
{ e4complete, "Ausdruck ist nich vollst<73>ndig" },
{ e4data_name, "Keine offene Datenbank" },
{ e4num_parms, "Ung<EFBFBD>ltige Anzahl von Parametern im Ausdruck"},
{ e4overflow, "<EFBFBD>berlauf bei der Auswertung eines Ausdrucks" },
{ e4right_missing, "Rechte Klammer im Ausdruck fehlt" },
{ e4unrec_function, "Unbekannte Funktion im Ausdruck" },
{ e4unrec_operator, "Unbekannter Operator im Ausdruck" },
{ e4unrec_value, "Unbekannter Wert im Ausdruck"} ,
{ e4unterminated, "Nicht abgeschlossene Zeichenkette im Ausdruck"} ,
/* Optimization Errors */
{ e4opt, "Optimization Error"} , /*!!!GERMAN*/
{ e4opt_suspend, "Optimization Removal Failure"} , /*!!!GERMAN*/
{ e4opt_flush, "Optimization File Flushing Failure"} , /*!!!GERMAN*/
/* Relation Errors */
{ e4lookup_err, "Matching Slave Record Not Located"} ,
/* Kritische Fehler (Critical Errors) */
{ e4memory, "Kein Speicher mehr verf<72>gbar"} ,
{ e4info, "Unerwartete Information" },
{ e4parm, "Unerwarteter Parameter"},
{ e4demo, "Exceeded Maximum Record Number for Demonstration"} , /*!!!GERMAN*/
{ e4result, "Unerwartetes Ergebnis"},
{ 0, 0 },
} ;
#endif /* S4GERMAN */
#ifdef S4FRENCH
ERROR_DATA e4error_data[] =
{
/* General Disk Access Errors */
{ e4create, "En cr<63>ant le fichier" },
{ e4open, "En engageant le fichier" },
{ e4read, "En lisant le fichier" },
{ e4seek, "En se pla<6C>ant dans le fichier" },
{ e4write, "En <20>crivant dans le fichier" },
{ e4close, "En lib<69>rant le fichier" },
{ e4remove, "En effa<66>ant le fichier" },
{ e4lock, "En bloquant le fichier" },
{ e4unlock, "En d<>bloquant le fichier" },
{ e4len, "En d<>terminant la longueur du fichier" },
{ e4len_set, "Mise <20> jour de la longueur du fichier" },
{ e4rename, "D<EFBFBD>nomination du fichier" },
/* Database Specific Errors */
{ e4data, "Le fichier n'est pas une base de donn<6E>es:" },
{ e4record_len, "La fiche est trop grande" },
{ e4field_name, "Champ inconnu" },
{ e4field_type, "Type de champ inconnu" },
/* Index File Specific Errors */
{ e4index, "Ce n'est pas un fichier d'indice" },
{ e4entry, "Le fichier d'indice n'est pas <20> jour" },
{ e4unique, "La clef n'est pas unique" },
{ e4tag_name, "L'article d<>sign<67> par l'indice n'existe pas" },
/* Expression Evaluation Errors */
{ e4comma_expected, "\",\" ou \")\" manquant dans l'expression" },
{ e4complete, "Expression incompl<70>te" },
{ e4data_name, "La base r<>f<EFBFBD>r<EFBFBD>e dans l'expression n'est pas pr<70>sente" },
{ e4num_parms, "Nombre ill<6C>gal de crit<69>res dans l'expression"},
{ e4overflow, "L'expression donne un r<>sultat trop grand" },
{ e4right_missing, "Parenth<EFBFBD>se manquante dans l'expression" },
{ e4type_sub, "Un param<61>tre est de la mauvaise sorte" },
{ e4unrec_function, "L'expression contient une fonction inconnue" },
{ e4unrec_operator, "L'expression contient un op<6F>rateur inconnu" },
{ e4unrec_value, "L'expression contient une valeur inconnue"} ,
{ e4unterminated, "Apostrophe manquante dans l'expression"} ,
/* Optimization Errors */
{ e4opt, "Optimization Error"} ,
{ e4opt_suspend, "Optimization Removal Failure"} ,
{ e4opt_flush, "Optimization File Flushing Failure"} ,
/* Relation Errors */
{ e4lookup_err, "Matching Slave Record Not Located"} ,
/* Critical Errors */
{ e4memory, "Plus de m<>moire disponible" } ,
{ e4info, "Information inexpect<63>e"} ,
{ e4parm, "Param<EFBFBD>tre inexpect<63>"} ,
{ e4demo, "Au maximum d'articles dans la version de d<>monstration" } ,
{ e4result, "R<EFBFBD>sultat inexpect<63>"} ,
{ 0, 0 },
} ;
#endif /* S4FRENCH */
#ifdef S4SCANDINAVIAN
ERROR_DATA e4error_data[] =
{
/* General Disk Access Errors */
{ e4create, "Creating File" },
{ e4open, "Opening File" },
{ e4read, "Reading File" },
{ e4seek, "Seeking to File Position" },
{ e4write, "Writing to File" },
{ e4close, "Closing File" },
{ e4remove, "Removing File" },
{ e4lock, "Locking File" },
{ e4unlock, "Unlocking File" },
{ e4len, "Determining File Length" },
{ e4len_set, "Setting File Length" },
{ e4rename, "Renaming File" },
/* Database Specific Errors */
{ e4data, "File is not a Data File" },
{ e4record_len, "Record Length is too Large" },
{ e4field_name, "Unrecognized Field Name" },
{ e4field_type, "Unrecognized Field Type" },
/* Index File Specific Errors */
{ e4index, "Not a Correct Index File" },
{ e4entry, "Tag Entry Missing" },
{ e4unique, "Unique Key Error" },
{ e4tag_name, "Tag Name not Found" },
/* Expression Evaluation Errors */
{ e4comma_expected, "Comma or Bracket Expected" },
{ e4complete, "Expression not Complete" },
{ e4data_name, "Data File Name not Located" },
{ e4length_err, "IIF() Needs Parameters of Same Length" },
{ e4not_constant, "SUBSTR() and STR() need Constant Parameters" },
{ e4num_parms, "Number of Parameters is Wrong" },
{ e4overflow, "Overflow while Evaluating Expression" },
{ e4right_missing, "Right Bracket Missing" },
{ e4type_sub, "Sub-expression Type is Wrong" },
{ e4unrec_function, "Unrecognized Function" },
{ e4unrec_operator, "Unrecognized Operator" },
{ e4unrec_value, "Unrecognized Value"} ,
{ e4unterminated, "Unterminated String"} ,
/* Optimization Errors */
{ e4opt, "Optimization Error"} ,
{ e4opt_suspend, "Optimization Removal Failure"} ,
{ e4opt_flush, "Optimization File Flushing Failure"} ,
/* Relation Errors */
{ e4relate, "Relation Error"} ,
{ e4lookup_err, "Matching Slave Record Not Located"} ,
/* Report Errors */
{ e4report, "Report Error"} ,
/* Critical Errors */
{ e4memory, "Out of Memory"} ,
{ e4info, "Unexpected Information"} ,
{ e4parm, "Unexpected Parameter"} ,
{ e4demo, "Exceeded Maximum Record Number for Demonstration"} ,
{ e4result, "Unexpected Result"} ,
{ 0, 0 },
} ;
#endif /* S4SCANDINAVIAN */
#endif /* S4LANGUAGE */
#endif /* S4ERROR_OFF */
int S4FUNCTION e4code( CODE4 S4PTR *c4 )
{
return c4->error_code ;
}
int S4FUNCTION e4set( CODE4 S4PTR *c4, int new_err_code )
{
int old_err_code ;
old_err_code = c4->error_code ;
c4->error_code = new_err_code ;
return old_err_code ;
}
char S4PTR * S4FUNCTION e4text( int err_code )
{
#ifndef S4OFF_ERROR
int i ;
for ( i=0; (int) e4error_data[i].error_num != 0; i++ )
if ( e4error_data[i].error_num == err_code )
return e4error_data[i].error_data ;
#endif
return (char *)0 ; /* err_code not matched */
}
void S4FUNCTION e4exit_test( CODE4 S4PTR *c4 )
{
if ( c4->error_code < 0 ) e4exit(c4) ;
}
#ifdef S4OS2PM
#ifndef S4ERROR_HOOK
static void e4do_err_out( int err_code, char *desc1, char *desc2, char *desc3 )
{
int i, pos, desc_number = 1 ;
char *ptr ;
HAB e4hab ;
HMQ e4hmq ;
char e4error_str[100] ;
strcpy( e4error_str, E4_ERROR ) ;
strcat( e4error_str, " #: " ) ;
c4ltoa45( err_code, (char *)e4error_str+9, 4 ) ;
pos = 13 ;
e4error_str[pos++] = '\n' ;
for ( i=0; (int) e4error_data[i].error_num != 0; i++ )
if ( e4error_data[i].error_num == err_code )
{
strcpy( e4error_str+pos, e4error_data[i].error_data ) ;
pos += strlen( e4error_data[i].error_data ) ;
e4error_str[pos++] = '\n' ;
break ;
}
ptr = desc1 ;
while ( (ptr != (char *) 0) && (desc_number <= 3 ) )
{
if ( strlen(desc1)+pos+3 >= sizeof(e4error_str) )
break ;
strcpy( e4error_str + pos, ptr ) ;
pos += strlen(ptr) ;
e4error_str[pos++] = '\n' ;
if ( desc_number++ == 1 )
ptr = desc2 ;
else
ptr = desc3 ;
}
e4error_str[pos] = 0 ;
/* In case the application has done no PM Initialization, set up an
instance to allow for the error output to occur */
e4hab = WinInitialize(0) ;
if ( e4hab == NULLHANDLE )
return ;
e4hmq = WinCreateMsgQueue(e4hab, 0) ;
if ( e4hmq == NULLHANDLE )
{
WinTerminate(e4hab) ;
return ;
}
/* And print out the error via a desktop message box */
WinMessageBox(HWND_DESKTOP, HWND_DESKTOP, e4error_str, "Error", E4MSGBOXID, MB_OK | MB_MOVEABLE | MB_CUACRITICAL ) ;
WinDestroyMsgQueue( e4hmq );
WinTerminate(e4hab) ;
}
#endif
void S4FUNCTION e4exit( CODE4 S4PTR *c4 )
{
exit( 0 ) ;
}
int S4FUNCTION e4( CODE4 S4PTR *c4, int err_code, char *desc )
{
return e4describe( c4, err_code, desc, 0, 0 ) ;
}
int S4FUNCTION e4describe( CODE4 S4PTR *c4, int err_code, char *desc1, char *desc2, char *desc3 )
{
#ifdef S4ERROR_HOOK
c4->error_code = err_code ;
e4hook( c4, err_code, desc1, desc2, desc3 ) ;
#else
c4->error_code = err_code ;
#ifndef S4OFF_ERROR
if ( c4->off_error == 0 )
e4do_err_out( err_code, desc1, desc2, desc3 ) ;
#endif
#endif /* ifdef S4ERROR_HOOK */
return err_code ;
}
void S4FUNCTION e4severe( int err_code, char *desc )
{
#ifdef S4ERROR_HOOK
e4hook( (char *)0, err_code, desc, (char *)0, (char *)0 ) ;
FatalAppExit( 0, desc ) ;
#else
e4do_err_out( err_code, desc, 0, 0 ) ;
e4exit( 0 ) ; ;
#endif
}
#endif /* S4OS2PM */
#ifndef S4OS2PM
#ifdef S4WINDOWS
/* S4WINDOWS */
void S4FUNCTION e4exit( CODE4 S4PTR *c4 )
{
FatalAppExit( 0, E4_MESSAG_EXI ) ;
}
/* S4WINDOWS */
int S4FUNCTION e4( CODE4 S4PTR *c4, int err_code, char *desc )
{
return e4describe( c4, err_code, desc, 0, 0 ) ;
}
/* S4WINDOWS */
int S4FUNCTION e4describe( CODE4 S4PTR *c4, int err_code, char *desc1, char *desc2, char *desc3 )
{
#ifdef S4ERROR_HOOK
c4->error_code = err_code ;
e4hook( c4, err_code, desc1, desc2, desc3 ) ;
#else
char error_str[257], *ptr ;
int i, pos, desc_number = 1 ;
WORD wType ;
c4->error_code = err_code ;
#ifndef S4OFF_ERROR
if ( c4->off_error == 0 )
{
strcpy( error_str, E4_ERROR ) ;
strcat( error_str, " #: " ) ;
c4ltoa45( err_code, (char S4PTR *)error_str+9, 4 ) ;
pos = 13 ;
error_str[pos++] = '\n' ;
for ( i=0; (int) e4error_data[i].error_num != 0; i++ )
if ( e4error_data[i].error_num == err_code )
{
strcpy( error_str+pos, e4error_data[i].error_data ) ;
pos += strlen( e4error_data[i].error_data ) ;
error_str[pos++] = '\n' ;
break ;
}
ptr = desc1 ;
while ( (ptr != (char *) 0) && (desc_number <= 3 ) )
{
if ( strlen(desc1)+pos+3 >= sizeof(error_str) )
break ;
strcpy( error_str+pos, ptr ) ;
pos += strlen(ptr) ;
error_str[pos++] = '\n' ;
if ( desc_number++ == 1 )
ptr = desc2 ;
else
ptr = desc3 ;
}
error_str[pos] = 0 ;
OemToAnsi( error_str, error_str ) ;
wType = MB_OK | MB_ICONSTOP ;
if ( err_code == e4memory )
wType |= MB_SYSTEMMODAL ;
#ifndef S4TESTING
#ifdef S4VBASIC
if ( MessageBox( 0, error_str, E4_ERROR_BAS, wType ) == 0 )
#else
if ( MessageBox( 0, error_str, E4_ERROR_COD, wType ) == 0 )
#endif
FatalAppExit( 0, E4_MEMORY_ERR ) ;
#else
if( s4test_handle )
write( s4test_handle, error_str, (unsigned) strlen(error_str) ) ;
#endif
}
#endif
#endif /* ifdef S4ERROR_HOOK */
return err_code ;
}
/* S4WINDOWS */
void S4FUNCTION e4severe( int err_code, char *desc )
{
#ifdef S4ERROR_HOOK
e4hook( (char *)0, err_code, desc, (char *)0, (char *)0 ) ;
FatalAppExit( 0, desc ) ;
#else
#ifndef S4OFF_ERROR
char error_str[257] ;
int pos, i ;
strcpy( error_str, E4_ERROR_SEV ) ;
strcat( error_str, " #: " ) ;
c4ltoa45( err_code, (char S4PTR *)error_str+27, 4 ) ;
pos = 31 ;
error_str[pos++] = '\n' ;
for ( i=0; e4error_data[i].error_num != 0; i++ )
if ( e4error_data[i].error_num == err_code )
{
strcpy( error_str+pos, e4error_data[i].error_data ) ;
pos += strlen( e4error_data[i].error_data ) ;
error_str[pos++] = '\n' ;
break ;
}
if ( strlen(desc)+pos+4 < sizeof(error_str) )
{
strcpy( error_str+pos, desc ) ;
pos += strlen(desc) ;
error_str[pos++] = '\n' ;
}
error_str[pos] = '\0' ;
OemToAnsi( error_str, error_str ) ;
#ifndef S4TESTING
MessageBox( 0, error_str, E4_ERROR_CDS, MB_OK | MB_ICONSTOP ) ;
FatalAppExit( 0, error_str ) ;
#else
if( s4test_handle )
write( s4test_handle, error_str, (unsigned) strlen(error_str) ) ;
#ifdef S4WIN32
ExitProcess(-1) ;
#else
u4terminate() ;
#endif
#endif
#else
FatalAppExit( 0, "" ) ;
#endif
#endif /* ifdef S4ERROR_HOOK */
}
/* S4WINDOWS */
#ifdef S4VBASIC
void S4FUNCTION e4severe_vbasic( int err_code, char *desc )
{
char error_str[257] ;
int i, pos ;
strcpy( error_str, E4_ERROR_SEV ) ;
strcat( error_str, " #: " ) ;
c4ltoa45( err_code, (char S4PTR *)error_str+27, 4 ) ;
pos = 31 ;
error_str[pos++] = '\n' ;
for ( i=0; e4error_data[i].error_num != 0; i++ )
if ( e4error_data[i].error_num == err_code )
{
strcpy( error_str+pos, e4error_data[i].error_data ) ;
pos += strlen( e4error_data[i].error_data ) ;
error_str[pos++] = '\n' ;
break ;
}
if ( strlen(desc)+pos+4 < sizeof(error_str) )
{
strcpy( error_str+pos, desc ) ;
pos += strlen(desc) ;
error_str[pos++] = '\n' ;
}
error_str[pos] = 0 ;
OemToAnsi( error_str, error_str ) ;
#ifndef S4TESTING
MessageBox( 0, error_str, E4_ERROR_BAS, MB_OK | MB_ICONSTOP ) ;
#else
if( s4test_handle )
write( s4test_handle, error_str, (unsigned) strlen(error_str) ) ;
#endif
}
#endif /* S4VBASIC */
#endif /* S4WINDOWS */
#ifndef S4WINDOWS
#ifdef S4VB_DOS
/* S4VB_DOS */
int S4FUNCTION e4( CODE4 S4PTR *c4, int err_code, char *desc )
{
return e4describe( c4, err_code, desc, 0, 0 ) ;
}
/* S4VB_ DOS */
int S4FUNCTION e4describe( CODE4 S4PTR *c4, int err_code, char *desc1, char *desc2, char *desc3 )
{
char error_str[257], *ptr ;
int i, pos, desc_number = 1 ;
int err_type = V4ERROR ;
c4->error_code = err_code ;
strcpy( error_str, E4_ERROR ) ;
strcat( error_str, " #: " ) ;
c4ltoa45( err_code, (char far *)error_str+9, 4 ) ;
pos = 13 ;
error_str[pos++] = '\n' ;
for ( i=0; (int) e4error_data[i].error_num != 0; i++ )
if ( e4error_data[i].error_num == err_code )
{
strcpy( error_str+pos, e4error_data[i].error_data ) ;
pos += strlen( e4error_data[i].error_data ) ;
error_str[pos++] = '\n' ;
break ;
}
ptr = desc1 ;
while ( (ptr != (char *) 0) && (desc_number <= 3 ) )
{
if ( strlen(desc1)+pos+3 >= sizeof(error_str) ) break ;
strcpy( error_str+pos, ptr ) ;
pos += strlen(ptr) ;
error_str[pos++] = '\n' ;
if ( desc_number++ == 1 )
ptr = desc2 ;
else
ptr = desc3 ;
}
error_str[pos] = 0 ;
#ifndef S4TESTING
u4MsgBox( v4str(error_str), (int near *)&err_type);
#else
if( s4test_handle )
write( s4test_handle, error_str, (unsigned) strlen(error_str) ) ;
#endif
return err_code ;
}
/* S4VB_DOS */
void S4FUNCTION e4severe( int err_code, char *desc )
{
char error_str[257] ;
int pos, i ,err_type = V4SEVERE ;
strcpy( error_str, E4_ERROR_SEV ) ;
strcat( error_str, " #: " ) ;
c4ltoa45( err_code, (char far *)error_str+27, 4 ) ;
pos = 31 ;
error_str[pos++] = '\n' ;
for ( i=0; e4error_data[i].error_num != 0; i++ )
if ( e4error_data[i].error_num == err_code )
{
strcpy( error_str+pos, e4error_data[i].error_data ) ;
pos += strlen( e4error_data[i].error_data ) ;
error_str[pos++] = '\n' ;
break ;
}
if ( strlen(desc)+pos+4 < sizeof(error_str) )
{
strcpy( error_str+pos, desc ) ;
pos += strlen(desc) ;
error_str[pos++] = '\n' ;
}
error_str[pos] = 0 ;
#ifndef S4TESTING
u4MsgBox( v4str(error_str), (int near *)&err_type);
#else
if( s4test_handle )
write( s4test_handle, error_str, (unsigned) strlen(error_str) ) ;
#endif
exit(err_code) ;
}
/* S4VB_DOS */
void S4FUNCTION e4severe_vbasic( int err_code, char *desc )
{
char error_str[257] ;
int i, pos, err_type = V4SEVERE ;
strcpy( error_str, E4_ERROR_SEV ) ;
strcat( error_str, " #: " ) ;
c4ltoa45( err_code, (char far *)error_str+27, 4 ) ;
pos = 31 ;
error_str[pos++] = '\n' ;
for ( i=0; e4error_data[i].error_num != 0; i++ )
if ( e4error_data[i].error_num == err_code )
{
strcpy( error_str+pos, e4error_data[i].error_data ) ;
pos += strlen( e4error_data[i].error_data ) ;
error_str[pos++] = '\n' ;
break ;
}
if ( strlen(desc)+pos+4 < sizeof(error_str) )
{
strcpy( error_str+pos, desc ) ;
pos += strlen(desc) ;
error_str[pos++] = '\n' ;
}
error_str[pos] = 0 ;
#ifndef S4TESTING
u4MsgBox( v4str(error_str), (int near *)&err_type);
#else
if( s4test_handle )
write( s4test_handle, error_str, (unsigned) strlen(error_str) ) ;
#endif
}
/* S4VB_DOS */
void S4FUNCTION e4exit( CODE4 S4PTR *c4 )
{
if ( c4 == 0 )
exit(0) ;
else
exit( c4->error_code ) ;
}
#else /* S4VB_DOS */
/* not S4WINDOWS */
void S4FUNCTION e4exit( CODE4 S4PTR *c4 )
{
if ( c4 == 0 )
exit(0) ;
else
exit( c4->error_code ) ;
}
/* not S4WINDOWS */
#ifndef S4OFF_ERROR
static void e4error_out( char *ptr )
{
#ifdef S4UNIX
printf("%s", ptr ) ;
#else
#ifdef S4TESTING
if( s4test_handle )
write( s4test_handle, ptr, (unsigned int) strlen(ptr) ) ;
#endif
write( 1, ptr, (unsigned int) strlen(ptr) ) ;
#endif
}
/* not S4WINDOWS */
static void display( int err_code )
{
char buf[11] ;
int i ;
c4ltoa45( (long) err_code, buf, 6 ) ;
buf[6] = 0 ;
e4error_out( buf ) ;
for ( i = 0; e4error_data[i].error_data != 0; i++ )
if ( e4error_data[i].error_num == err_code )
{
e4error_out( "\r\n" ) ;
e4error_out( e4error_data[i].error_data ) ;
break ;
}
}
#endif
/* not S4WINDOWS */
int S4FUNCTION e4( CODE4 S4PTR *c4, int err_code, char *desc )
{
return e4describe( c4, err_code, desc, 0, 0 ) ;
}
int S4FUNCTION e4describe( CODE4 S4PTR *c4, int err_code, char *desc1, char *desc2, char *desc3 )
{
#ifdef S4ERROR_HOOK
e4hook( c4, err_code, desc1, desc2, desc3 ) ;
#else
char *ptr ;
int desc_number = 1 ;
c4->error_code = err_code ;
#ifndef S4OFF_ERROR
if ( c4->off_error == 0 )
{
e4error_out( E4_ERROR_NUM ) ;
display ( err_code ) ;
ptr = desc1 ;
while ( (ptr != (char *) 0) && (desc_number <= 3 ) )
{
e4error_out( "\r\n" ) ;
e4error_out( ptr ) ;
if ( desc_number++ == 1 )
ptr = desc2 ;
else
ptr = desc3 ;
}
#ifdef S4UNIX
e4error_out( E4_ERROR_ENT ) ;
getchar() ;
#else
e4error_out( E4_ERROR_KEY ) ;
#ifndef S4TESTING
#ifndef S4PASCAL
getch() ;
#endif
#endif
#endif
}
#endif
#endif /* ifdef S4ERROR_HOOK */
return( err_code ) ;
}
void S4FUNCTION e4severe( int err_code, char *desc )
{
#ifdef S4ERROR_HOOK
e4hook( 0, err_code, desc, (char *)0, (char *)0 ) ;
#else
#ifndef S4OFF_ERROR
e4error_out( E4_ERROR_SEV ) ;
display( err_code ) ;
e4error_out( "\r\n" ) ;
e4error_out( desc ) ;
#ifdef S4UNIX
e4error_out( E4_ERROR_ENT ) ;
getchar() ;
#else
e4error_out( E4_ERROR_KEY ) ;
#ifndef S4TESTING
#ifndef S4PASCAL
getch() ;
#endif
#endif
#endif
#endif
#endif /* ifdef S4ERROR_HOOK */
exit(1) ;
}
#endif /* S4VB_DOS */
#endif /* S4WINDOWS */
#endif /* S4OS2PM */