static void dump_rule( unsigned rule ) { unsigned i; const YYTOKENTYPE YYFAR *tok; const char YYFAR *p; #ifdef _STANDALONE_ if( !_IsOption( DUMP_PARSE_TREE ) ) return; #else #ifndef MYDEBUG #pragma disable_message( 201 ); return; #endif // !MYDEBUG #endif for( p = yytoknames[ yyplhstab[ rule ] ]; *p; ++p ) { putchar( *p ); } putchar( ' ' ); putchar( '<' ); putchar( '-' ); tok = &yyrhstoks[ yyrulebase[ rule ] ]; for( i = yyplentab[ rule ]; i != 0; --i ) { putchar( ' ' ); for( p = yytoknames[ *tok ]; *p; ++p ) { putchar( *p ); } ++tok; } putchar( '\n' ); #pragma enable_message( 201 ); }
extern void ErrorReport( void ) { //******************************* if( !DoReport ) return; if( _IsOption( BE_QUIET ) ) return; AsMsgGet( AS_ERROR_REPORT, AsResBuffer ); printf( AsResBuffer, CurrFilename, CurrLineno, numWarnings, numErrors ); }
extern void DebugPrintf( char *fmt, ... ) { //***************************************** va_list args; if( !_IsOption( DUMP_DEBUG_MSGS ) ) return; va_start( args, fmt ); vprintf( fmt, args ); va_end( args ); fflush( stdout ); }
void ObjFini( void ) { //******************** ObjFlushLabels(); // In case there're still pending labels OWLFileFini( OwlFile ); close( objFile ); fclose( ErrorFile ); if( ErrorsExceeding( 0 ) || ( _IsOption( WARNING_ERROR ) && WarningsExceeding( 0 ) ) ) { remove( objName ); ExitStatus = EXIT_FAILURE; } else if( !WarningsExceeding( 0 ) ) { remove( errorFilename ); } OWLFini( OwlHandle ); SectionFini(); }
bool ObjInit( char *fname ) { //*************************** owl_client_funcs funcs = { (int (*)( owl_client_file, const char *, uint ))write, (long (*)( owl_client_file ))tell, (long (*)( owl_client_file, long, int ))lseek, MemAlloc, MemFree }; char name[ _MAX_FNAME ]; owl_format obj_format; SectionInit(); _splitpath( fname, NULL, NULL, name, NULL ); if( !objectDefined ) { _makepath( objName, NULL, NULL, name, OBJ_EXT ); } else { char tmpName[ _MAX_PATH2 ]; char *tmpNode; char *tmpDir; char *tmpFname; char *tmpExt; _splitpath2( objName, tmpName, &tmpNode, &tmpDir, &tmpFname, &tmpExt ); if( *tmpExt == 0 ) tmpExt = OBJ_EXT; if( *tmpFname == 0 ) tmpFname = name; _makepath( objName, tmpNode, tmpDir, tmpFname, tmpExt ); } objectDefined = FALSE; // so that the /fo applies only to the 1st obj _makepath( errorFilename, NULL, NULL, name, ".err" ); objFile = open( objName, O_CREAT | O_TRUNC | O_BINARY | O_WRONLY, PMODE_RW ); if( objFile == -1 ) { AsOutMessage( stderr, UNABLE_TO_CREATE, objName ); fputc( '\n', stderr ); return( FALSE ); } ErrorFile = fopen( errorFilename, "wt" ); OwlHandle = OWLInit( &funcs, OBJ_OWL_CPU ); obj_format = ( _IsOption( OBJ_COFF ) ? OWL_FORMAT_COFF : OWL_FORMAT_ELF ); OwlFile = OWLFileInit( OwlHandle, fname, (owl_client_file)(pointer_int)objFile, obj_format, OWL_FILE_OBJECT ); ObjSwitchSection( AS_SECTION_TEXT ); CurrAlignment = 0; return( TRUE ); }
extern void Banner( void ) { //************************** static bool printed = FALSE; if( _IsOption( BE_QUIET ) || printed ) return; #if defined( AS_ALPHA ) puts( banner1w( "Alpha AXP Assembler", "0.8" ) ); #elif defined( AS_PPC ) puts( banner1w( "PowerPC Assembler", "0.3" ) ); #elif defined( AS_MIPS ) puts( banner1w( "MIPS Assembler", "0.1" ) ); #else #error unknown AS_CPU #endif puts( banner2a() ); puts( banner3 ); puts( banner3a ); printed = TRUE; }
int main( int argc, char **argv ) //******************************* { static char *fname; #ifndef __WATCOMC__ _argv = argv; _argc = argc; #endif MemInit(); if( !AsMsgInit() ) { return( EXIT_FAILURE ); } if( argc == 1 ) { Banner(); Usage(); } else if( OptionsInit( --argc, ++argv ) ) { Banner(); if( _IsOption( PRINT_HELP ) ) { Usage(); *argv = NULL; } else if( !*argv ) { AsOutMessage( stderr, AS_MSG_ERROR ); AsOutMessage( stderr, NO_FILENAME_SPECIFIED ); fputc( '\n', stderr ); } while( *argv ) { fname = MakeAsmFilename( *argv ); if( PP_Init( fname, PPFLAG_ASM_COMMENT | PPFLAG_EMIT_LINE, NULL ) != 0 ) { AsOutMessage( stderr, UNABLE_TO_OPEN, fname ); fputc( '\n', stderr ); } else { OptionsPPDefine(); SymInit(); InsInit(); DirInit(); if( ObjInit( fname ) ) { if( setjmp( AsmParse ) == 0 ) { ErrorCountsReset(); DoReport = TRUE; if( !yyparse() ) { CurrLineno--; // This is the total # of lines ObjRelocsFini(); // Must be done before ErrorReport // and other finis } else { DoReport = FALSE; } } else { // AbortParse() was invoked DoReport = FALSE; } ErrorReport(); AsLexerFini(); ObjFini(); } DirFini(); InsFini(); SymFini(); } PP_Fini(); ++argv; } } OptionsFini(); AsMsgFini(); MemFini(); return( ExitStatus ); }