void PrintErrorMsg( return_val exit_code, int where ) { ChangePrintDest( STDERR_FILENO ); if( exit_code == RC_OUT_OF_MEMORY ) { BufferMsg( OUT_OF_MEMORY ); } else if( exit_code == RC_ERROR ) { BufferMsg( ERROR_OCCURRED ); } BufferMsg( where ); BufferConcatNL(); BufferPrint(); ChangePrintDest( OutputDest ); }
static void openFiles( void ) { int objhdl; objhdl = open( ObjFileName, O_RDONLY | O_BINARY ); if( objhdl != -1 ) { if( ListFileName != NULL ) { OutputDest = open( ListFileName, O_WRONLY | O_CREAT | O_TRUNC, PMODE_RW ); if( OutputDest == -1 ) openError( ListFileName ); ChangePrintDest( OutputDest ); } objFileLen = filelength( objhdl ); if( objFileLen == 0 ) { LeaveProgram( RC_OKAY, WHERE_OBJ_ZERO_LEN ); } objFileBuf = MemAlloc( objFileLen ); objFilePos = 0; if( posix_read( objhdl, objFileBuf, objFileLen ) == -1 ) { openError( ObjFileName ); } close( objhdl ); } else { openError( ObjFileName ); } }
static void printUsage( int msg ) { int i; static const char * const banner[]={ banner1w( "Multi-processor Disassembler", _WDISASM_VERSION_ ), banner2( "1995" ), banner3, banner3a, NULL }; const char * const *text; ChangePrintDest( STDERR_FILENO ); if( msg != 0 ) { BufferMsg( msg ); BufferConcatNL(); BufferConcatNL(); BufferPrint(); } text = banner; while( *text ) { Print( (char *)*text++ ); Print( "\n" ); } for( i = USAGE_1; i <= USAGE_LAST; i++ ) { BufferMsg( i ); BufferConcatNL(); BufferPrint(); } if( ObjFileName != NULL ) { MemFree( ObjFileName ); } MemClose(); exit( 1 ); }
return_val Init( void ) { return_val error; const char * const *list; const char *name; hash_entry_data key_entry; error = RC_OKAY; OutputDest = STDOUT_FILENO; ChangePrintDest( OutputDest ); relocSections.first = NULL; relocSections.last = NULL; if( !MsgInit() ) { // MsgInit does its own error message printing return( RC_ERROR ); } MemOpen(); error = HandleArgs(); if( error != RC_OKAY ) { return( error ); } openFiles(); initGlobals(); error = initHashTables(); if( error != RC_OKAY ) { PrintErrorMsg( error, WHERE_INIT_HASH_TABLES ); return( error ); } error = initServicesUsed(); if( error != RC_OKAY ) { // initServicesUsed does its own error message printing return( error ); } error = initSectionTables(); if( error != RC_OKAY ) { PrintErrorMsg( error, WHERE_CREATE_SEC_TABLES ); return( error ); } if( Options & PRINT_PUBLICS ) { CreatePublicsArray(); } if( IsMasmOutput() ) { CommentString = MASM_COMMENT_STRING; } if( IsIntelx86() ) { SkipRefTable = HashTableCreate( RECOGNITION_TABLE_SIZE, HASH_STRING_IGNORECASE ); if( SkipRefTable != NULL ) { for( list = intelSkipRefList; (name = *list) != NULL; ++list ) { key_entry.key.u.string = name; key_entry.data.u.string = *list; error = HashTableInsert( SkipRefTable, &key_entry ); if( error != RC_OKAY ) { break; } } } } if( LabelChar == 0 ) { if( IsMasmOutput() ) { LabelChar = 'L'; } else { LabelChar = 'X'; } } return( error ); }
void Init( void ) { char cmd_line[ CMD_LINE_LEN ]; return_val error; char **list; OutputDest = STDOUT_FILENO; ChangePrintDest( OutputDest ); relocSections.first = NULL; relocSections.last = NULL; if( !MsgInit() ) { // MsgInit does its own error message printing exit( -1 ); } MemOpen(); getcmd( cmd_line ); HandleArgs( cmd_line ); openFiles(); initGlobals(); error = initHashTables(); if( error == OKAY ) { error = initServicesUsed(); if( error == OKAY ) { error = initSectionTables(); if( error != OKAY ) { // free hash tables and services MemClose(); LeaveProgram( error, WHERE_CREATE_SEC_TABLES ); } } else { // free hash tables CloseFiles(); FreeHashTables(); // initServicesUsed does its own error message printing exit( error ); } } else { CloseFiles(); MemClose(); LeaveProgram( error, WHERE_INIT_HASH_TABLES ); } if( Options & PRINT_PUBLICS ) { CreatePublicsArray(); } if( IsMasmOutput() ) { CommentString = MASM_COMMENT_STRING; } if( IsIntelx86() ) { SkipRefTable = HashTableCreate( RECOGNITION_TABLE_SIZE, HASH_STRING, (hash_table_comparison_func) stricmp ); if( SkipRefTable ) { list = intelSkipRefList; while( *list ) { error = HashTableInsert( SkipRefTable, (hash_value) *list, (hash_data) *list ); if( error != OKAY ) break; list++; } } } if( !LabelChar ) { if( IsMasmOutput() ) { LabelChar = 'L'; } else { LabelChar = 'X'; } } }