home *** CD-ROM | disk | FTP | other *** search
-
- /* u4error.c (c)Copyright Sequiter Software Inc., 1987-1990. All rights reserved.
-
- Prints all error messages.
- Only routine where 'printf' is called.
- Exits for all errors.
- Adjust for a different error routine.
- */
-
- #include "u4error.h"
- #include "p4misc.h"
-
- int v4error = -1 ;
-
- #ifdef WINDOWS_L
- #define WINDOWS
- #endif
- #ifdef WINDOWS_G
- #define WINDOWS
- #endif
-
- #ifdef WINDOWS
- /* Microsoft Windows Error Handling */
-
- #include "windows.h"
-
- u4error( int error_num )
- {
- v4error = error_num ;
- if ( error_num == E_INTERNAL )
- FatalExit( error_num ) ;
-
- return( 0 ) ;
- }
-
- #else
-
- #include "d4all.h"
- #include "w4.h"
-
- #ifndef UNIX
- #include <io.h>
- #endif
-
- #ifdef VARARGS
- #include <varargs.h>
- #else
- #include <stdarg.h>
- #endif
-
- #ifndef NOIO
- extern int v4default_window ;
- #endif
-
- #define C_LEFT 10
-
- typedef struct error_data_st
- {
- int error_num ;
- char *error_data ;
- } ERROR_DATA ;
-
- ERROR_DATA error_data[] =
- {
- /* General Disk Access Errors */
- { E_CREATE, "Creating File" },
- { E_OPEN, "Opening File" },
- { E_READ, "Reading from File" },
- { E_LSEEK, "Seeking to File Position" },
- { E_WRITE, "Writing to File" },
- { E_CLOSE, "Closing File" },
- { E_REMOVE, "Removing File" },
-
- /* Database Specific Errors */
- { E_BAD_DBF, "File is not a Database:" },
- { E_D_MISSING, "No Open Database" },
- { E_REC_LENGTH, "Record Length is Too Large" },
- { E_FIELD, "Unrecognized Field" },
-
- /* Index File Specific Errors */
- { E_INDEX, "Building Index File" },
- { E_I_CLOSE, "Closing Index File" },
- { E_BAD_NDX, "File is not an Index File" },
- { E_I_DATE, "Index File is out of Date" },
- { E_I_RECORD, "Index File Record does not Exist" },
- { E_UNIQUE, "Key is not Unique" },
- { E_I_TYPE, "Key Evaluates to Logical Result" },
- { E_I_CHANGED, "Key Length or Type has Changed" },
- { E_KEY_LEN, "Key Length over 100 Characters" },
- { E_NO_INDEX, "Seek on Database with no Index File" },
- { E_NUM_PARMS, "Wrong Number of Parameters in Expression"},
-
- /* Multi-User Errors */
- { E_LOCK, "Locking a File" },
- { E_UNLOCK, "Unlocking a File" },
-
- /* Expression Evaluation Errors */
- { E_BASE_NAME, "Database not Located while Evaluating Expression" },
- { E_COMPILE_NULL, "Executing Null Expression" },
- { E_EXPECT, "Expecting \",\" or \")\" while Evaluating Expression" },
- { E_COMPLETE, "Expression is not Complete" },
- { E_DATE, "Illegal Date" },
- { E_OVERFLOW, "Overflow while Evaluating Expression" },
- { E_TYPE, "Parameter or Operator has the Wrong Type" },
- { E_RIGHT, "Right Bracket Missing in Expression" },
- { E_FUNCTION, "Unrecognized Function in Expression" },
- { E_OPERATOR, "Unrecognized Operator in Expression" },
- { E_VALUE, "Unrecognized Value in Expression"} ,
- { E_STRING_LONG,"Unterminated String in Expression"} ,
-
- /* Memo File Errors */
- { E_EDITOR, "Editing Memo File with Editor"} ,
- { E_MEMO_NAME, "Memo File Name Inconsistency"} ,
- { E_MEMO_SIZE, "Memo File Entry is over 32767 Bytes"},
-
- /* Windowing and Menuing Errors */
- { E_WINDOW_REF,"Illegal Window Reference Number"},
-
- /* Extended Routine Errors */
- { E_RELATING, "Relating Databases" } ,
- { E_CONTROL, "No Controlling Database" } ,
- { E_RELATED, "Illegal Related Database" } ,
-
- /* Memory Error */
- { E_MEMORY, "Out of Memory"} ,
- { E_ALLOCATE, "Memory Allocation Error"} ,
-
- /* Internal Error */
- { E_INTERNAL, "Overwritten Memory"} ,
-
- /* Sorting Errors */
- { E_SORT, "Not Enough Memory to Sort"} ,
- { E_SORT_ADD, "Too Many Records in Sort"},
- } ;
-
- void error_out( char * ) ;
-
- #ifdef NOIO
- void error_out( char *ptr )
- {
- write( 0, "\n", 1 ) ;
- write( 0, ptr, (unsigned int) strlen(ptr) ) ;
- }
- #endif
-
- #ifdef VARARGS
- u4error( error_num, va_alist )
- int error_num ;
- va_dcl
- #else
- u4error( int error_num, char *msg, ... )
- #endif
- {
- int keyboard, i, start_window ;
- va_list arg_marker ;
- char *ptr ;
-
- #ifdef NOIO
- char buffer[40] ;
- #endif
-
- v4error = error_num ;
-
- #ifdef NOIO
- error_out( "Error Number: " ) ;
- c4ltoa( (long) error_num, buffer, 10 ) ;
- buffer[10] = '\000' ;
- error_out( buffer ) ;
- error_out( "" ) ;
- #else
- if ( v4default_window < 0 )
- {
- write( 0, "\nError Number: 980, No Error Window", 35 ) ;
- w4exit(1) ;
- }
-
- start_window = w4select(-1) ;
- w4activate( v4default_window ) ;
- w4clear( 0 ) ;
- w4( w4row()+1, C_LEFT, "Error Number:") ;
- w4int( w4row(), w4col(), error_num, 7 ) ;
- w4position( w4row()+1, C_LEFT) ;
- #endif
-
- for ( i=0; i < sizeof(error_data)/sizeof(ERROR_DATA); i++ )
- if ( error_data[i].error_num == error_num )
- {
- #ifdef NOIO
- error_out( error_data[i].error_data ) ;
- #else
- w4( w4row()+1, C_LEFT, error_data[i].error_data ) ;
- #endif
- break ;
- }
-
- #ifdef VARARGS
- va_start( arg_marker ) ;
- ptr = va_arg(arg_marker, char *) ;
- #else
- va_start( arg_marker, msg ) ;
- ptr = msg ;
- #endif
-
- for (; ptr != (char *) 0; ptr = va_arg(arg_marker, char *))
- {
- #ifdef NOIO
- error_out( ptr ) ;
- #else
- w4( w4row()+1, C_LEFT, ptr ) ;
- #endif
- }
-
- #ifdef NOIO
- error_out( "Press a key ..." ) ;
- keyboard = getch() ;
- #else
- w4( w4row()+2, C_LEFT, "Press a key ...") ;
- w4cursor( w4row(), w4col() ) ;
- keyboard = g4char() ;
- w4cursor( -1,-1 ) ;
- #endif
-
- if ( error_num == E_MEMORY || error_num == E_INTERNAL || error_num == E_ALLOCATE )
- #ifdef NOIO
- exit( 1 ) ;
- #else
- w4exit( 1 ) ;
- #endif
-
- #ifndef NOIO
- w4deactivate( v4default_window ) ;
- w4select( start_window ) ;
- #endif
-
- return( keyboard ) ;
- }
-
- #endif
-