int main( int argc, char ** argv ) { int c; int rc; char * cp; int no_warnings = 1; int resolve = 1; int result; bool buffer_messages = false; Express model; EXPRESSprogram_name = argv[0]; ERRORusage_function = 0; EXPRESSinit_init(); EXPRESSinitialize(); if( EXPRESSinit_args ) { ( *EXPRESSinit_args )( argc, argv ); } sc_optind = 1; while( ( c = sc_getopt( argc, argv, EXPRESSgetopt_options ) ) != -1 ) { switch( c ) { case 'd': ERRORdebugging = 1; switch( atoi( sc_optarg ) ) { case 0: fprintf( stderr, "\ndebug codes:\n" ); fprintf( stderr, " 0 - this help\n" ); fprintf( stderr, " 1 - basic debugging\n" ); #ifdef debugging fprintf( stderr, " 4 - light malloc debugging\n" ); fprintf( stderr, " 5 - heavy malloc debugging\n" ); fprintf( stderr, " 6 - heavy malloc debugging while resolving\n" ); #endif /* debugging*/ #ifdef YYDEBUG fprintf( stderr, " 8 - set YYDEBUG\n" ); #endif /*YYDEBUG*/ break; case 1: debug = 1; break; #ifdef debugging case 4: malloc_debug( 1 ); break; case 5: malloc_debug( 2 ); break; case 6: malloc_debug_resolve = 1; break; #endif /*debugging*/ #ifdef YYDEBUG case 8: exp_yydebug = 1; break; #endif /* YYDEBUG */ } break; case 'B': buffer_messages = true; break; case 'b': buffer_messages = false; break; case 'e': input_filename = sc_optarg; break; case 'r': resolve = 0; break; case 'i': case 'w': no_warnings = 0; ERRORset_warning( sc_optarg, c == 'w' ); break; case 'p': for( cp = sc_optarg; *cp; cp++ ) { if( *cp == '#' ) { print_objects_while_running |= OBJ_PASS_BITS; } else if( *cp == 'E' ) { print_objects_while_running = OBJ_ANYTHING_BITS; } else { print_objects_while_running |= OBJget_bits( *cp ); } } break; case 'v': print_fedex_version(); no_need_to_work = 1; break; default: rc = 1; if( EXPRESSgetopt ) { rc = ( *EXPRESSgetopt )( c, sc_optarg ); } if( rc == 1 ) { if( ERRORusage_function ) { ( *ERRORusage_function )(); } else { EXPRESSusage(1); } } break; } } if( !input_filename ) { input_filename = argv[sc_optind]; if( !input_filename ) { EXPRESScleanup(); if( no_need_to_work ) { return( 0 ); } else { ( *ERRORusage_function )(); } } } if( no_warnings ) { ERRORset_all_warnings( 1 ); } ERRORbuffer_messages( buffer_messages ); if( EXPRESSinit_parse ) { ( *EXPRESSinit_parse )(); } model = EXPRESScreate(); EXPRESSparse( model, ( FILE * )0, input_filename ); if( ERRORoccurred ) { result = EXPRESS_fail( model ); EXPRESScleanup(); EXPRESSdestroy( model ); return result; } #ifdef debugging if( malloc_debug_resolve ) { malloc_verify(); malloc_debug( 2 ); } #endif /*debugging*/ if( resolve ) { EXPRESSresolve( model ); if( ERRORoccurred ) { result = EXPRESS_fail( model ); EXPRESScleanup(); EXPRESSdestroy( model ); return result; } } if( EXPRESSbackend ) { ( *EXPRESSbackend )( model ); } if( ERRORoccurred ) { result = EXPRESS_fail( model ); EXPRESScleanup(); EXPRESSdestroy( model ); return result; } result = EXPRESS_succeed( model ); EXPRESScleanup(); EXPRESSdestroy( model ); return result; }
int main( int argc, char ** argv ) { int c; int rc; char * cp; int no_warnings = 1; int resolve = 1; bool buffer_messages = false; char * filename = 0; Express model; EXPRESSprogram_name = argv[0]; ERRORusage_function = usage; #ifdef YYDEBUG yydebug = 0; #endif EXPRESSinit_init(); EXPRESSinitialize(); if( EXPRESSinit_args ) { ( *EXPRESSinit_args )( argc, argv ); } optind = 1; while( ( c = getopt( argc, argv, EXPRESSgetopt_options ) ) != -1 ) switch( c ) { case 'd': ERRORdebugging = 1; switch( atoi( optarg ) ) { case 0: fprintf( stderr, "\ndebug codes:\n" ); fprintf( stderr, " 0 - this help\n" ); fprintf( stderr, " 1 - basic debugging\n" ); #ifdef debugging fprintf( stderr, " 4 - light malloc debugging\n" ); fprintf( stderr, " 5 - heavy malloc debugging\n" ); fprintf( stderr, " 6 - heavy malloc debugging while resolving\n" ); #endif /* debugging*/ #ifdef YYDEBUG fprintf( stderr, " 8 - set yydebug\n" ); fprintf( stderr, " 9 - set yydebug selectively, must use -u and/or -l. Also increases verbosity for some errors\n" ); fprintf( stderr, "-u nnn: upper line limit\n" ); fprintf( stderr, "-l nnn: lower line limit\n" ); #endif /*YYDEBUG*/ break; case 1: debug = 1; break; #ifdef debugging case 4: malloc_debug( 1 ); break; case 5: malloc_debug( 2 ); break; case 6: malloc_debug_resolve = 1; break; #endif /*debugging*/ #ifdef YYDEBUG case 8: yydebug = 1; break; case 9: yydbg_verbose = true; //yydebug gets set in expscan.l when in the line range set by -l and -u break; #endif /* YYDEBUG */ } break; #ifdef YYDEBUG case 'u': yydbg_upper_limit = atoi( optarg ); break; case 'l': yydbg_lower_limit = atoi( optarg ); break; #endif /* YYDEBUG */ case 'B': buffer_messages = true; break; case 'b': buffer_messages = false; break; case 'e': filename = optarg; break; case 'n': skip_exp_pause = true; break; case 'r': resolve = 0; break; case 'i': case 'w': no_warnings = 0; ERRORset_warning( optarg, c == 'w' ); break; case 'p': for( cp = optarg; *cp; cp++ ) { if( *cp == '#' ) { print_objects_while_running |= OBJ_PASS_BITS; } else if( *cp == 'E' ) { print_objects_while_running = OBJ_ANYTHING_BITS; } else { print_objects_while_running |= OBJget_bits( *cp ); } } break; case 'v': print_fedex_version(); break; case 'z': /* to allow user to attach debugger and continue */ printf( "pid = %d\n", getpid() ); #ifndef __WIN32__ pause(); #else //windows getchar(); abort(); #endif break; default: rc = 1; if( EXPRESSgetopt ) { rc = ( *EXPRESSgetopt )( c, optarg ); } if( rc == 1 ) { ( *ERRORusage_function )(); } break; } if( !filename ) { filename = argv[optind]; if( !filename ) { if( no_need_to_work ) { return( 0 ); } else { ( *ERRORusage_function )(); } } } if( no_warnings ) { ERRORset_all_warnings( 1 ); } ERRORbuffer_messages( buffer_messages ); if( EXPRESSinit_parse ) { ( *EXPRESSinit_parse )(); } model = EXPRESScreate(); EXPRESSparse( model, ( FILE * )0, filename ); if( ERRORoccurred ) { return( EXPRESS_fail( model ) ); } #ifdef debugging if( malloc_debug_resolve ) { malloc_verify(); malloc_debug( 2 ); } #endif /*debugging*/ if( resolve ) { EXPRESSresolve( model ); if( ERRORoccurred ) { return( EXPRESS_fail( model ) ); } } if( EXPRESSbackend ) { ( *EXPRESSbackend )( model ); } if( ERRORoccurred ) { return( EXPRESS_fail( model ) ); } return( EXPRESS_succeed( model ) ); }