int main(int argc, char* argv[]) { if (argc <= 1) { printf("wine spec file convert tool\nusage: %s specfile(16bit only) module name\n%s specfile(16bit only) -DEF\n", argv[0], argv[0]); fatal_error("file argument '%s' not allowed in this mode\n", argv[0]); } DLLSPEC *spec = alloc_dll_spec(); spec_file_name = argv[1]; exec_mode = MODE_DLL; spec->type = SPEC_WIN16; spec->file_name = spec_file_name; output_file = stdout; // init_dll_name(spec); if (argc > 2) { if (!strcmp(argv[2], "-DEF")) { exec_mode = MODE_DEF; } else { spec->main_module = xstrdup(argv[2]); spec->dll_name = xstrdup(argv[2]); } } else { init_dll_name(spec); } switch (exec_mode) { case MODE_DEF: if (!spec_file_name) fatal_error("missing .spec file\n"); if (!parse_input_file(spec)) break; output_def_file(spec, 1); break; case MODE_DLL: if (spec->subsystem != IMAGE_SUBSYSTEM_NATIVE) spec->characteristics |= IMAGE_FILE_DLL; /* fall through */ case MODE_EXE: load_resources(argv, spec); load_import_libs(argv); if (spec_file_name && !parse_input_file(spec)) break; if (fake_module) { if (spec->type == SPEC_WIN16) output_fake_module16(spec); else output_fake_module(spec); break; } //read_undef_symbols(spec, argv); switch (spec->type) { case SPEC_WIN16: output_spec16_file(spec); break; case SPEC_WIN32: BuildSpec32File(spec); break; default: assert(0); } break; } if (nb_errors) exit(1); return EXIT_SUCCESS; }
/******************************************************************* * main */ int main(int argc, char **argv) { DLLSPEC *spec = alloc_dll_spec(); #ifdef SIGHUP signal( SIGHUP, exit_on_signal ); #endif signal( SIGTERM, exit_on_signal ); signal( SIGINT, exit_on_signal ); output_file = stdout; argv = parse_options( argc, argv, spec ); switch(exec_mode) { case MODE_DLL: if (spec->subsystem != IMAGE_SUBSYSTEM_NATIVE) spec->characteristics |= IMAGE_FILE_DLL; /* fall through */ case MODE_EXE: load_resources( argv, spec ); load_import_libs( argv ); if (spec_file_name && !parse_input_file( spec )) break; if (fake_module) { if (spec->type == SPEC_WIN16) output_fake_module16( spec ); else output_fake_module( spec ); break; } read_undef_symbols( spec, argv ); switch (spec->type) { case SPEC_WIN16: output_spec16_file( spec ); break; case SPEC_WIN32: BuildSpec32File( spec ); break; default: assert(0); } break; case MODE_DEF: if (argv[0]) fatal_error( "file argument '%s' not allowed in this mode\n", argv[0] ); if (!spec_file_name) fatal_error( "missing .spec file\n" ); if (!parse_input_file( spec )) break; output_def_file( spec, 1 ); break; case MODE_IMPLIB: if (!spec_file_name) fatal_error( "missing .spec file\n" ); if (!parse_input_file( spec )) break; output_import_lib( spec, argv ); break; case MODE_RESOURCES: load_resources( argv, spec ); output_res_o_file( spec ); break; default: usage(1); break; } if (nb_errors) exit(1); if (output_file_name) { if (fclose( output_file ) < 0) fatal_perror( "fclose" ); if (output_file_source_name) assemble_file( output_file_source_name, output_file_name ); output_file_name = NULL; } return 0; }