int main(int argc, char **argv) { /* name.h define_macro libname */ if(argc == 3) write_h_file(argv[1], argv[2], NULL); else if(argc == 4) write_h_file(argv[1], argv[2], argv[3]); else return 1; return 0; }
int main(int argc,char *argv[]) { extern char* optarg; extern int optind; int optc; int lose = 0; int ret; int i; int cmdlen; atexit( cleanup_files ); signal(SIGSEGV, segvhandler); signal( SIGTERM, exit_on_signal ); signal( SIGINT, exit_on_signal ); #ifdef SIGHUP signal( SIGHUP, exit_on_signal ); #endif now = time(NULL); /* First rebuild the commandline to put in destination */ /* Could be done through env[], but not all OS-es support it */ cmdlen = 5; /* for "wmc " and \0 */ for(i = 1; i < argc; i++) cmdlen += strlen(argv[i]) + 1; cmdline = xmalloc(cmdlen); strcpy(cmdline, "wmc "); for(i = 1; i < argc; i++) { strcat(cmdline, argv[i]); if(i < argc-1) strcat(cmdline, " "); } while((optc = getopt(argc, argv, "B:cdDhH:io:O:P:uUvVW")) != EOF) { switch(optc) { case 'B': switch(optarg[0]) { case 'n': case 'N': byteorder = WMC_BO_NATIVE; break; case 'l': case 'L': byteorder = WMC_BO_LITTLE; break; case 'b': case 'B': byteorder = WMC_BO_BIG; break; default: fprintf(stderr, "Byteordering must be n[ative], l[ittle] or b[ig]\n"); lose++; } break; case 'c': custombit = 1; break; case 'd': decimal = 1; break; case 'D': dodebug = 1; break; case 'h': printf("%s", usage); exit(0); /* No return */ case 'H': header_name = xstrdup(optarg); break; case 'i': rcinline = 1; break; case 'o': output_name = xstrdup(optarg); break; case 'O': if (!strcmp( optarg, "rc" )) output_format = FORMAT_RC; else if (!strcmp( optarg, "res" )) output_format = FORMAT_RES; else if (!strcmp( optarg, "pot" )) output_format = FORMAT_POT; else { fprintf(stderr, "Output format must be rc or res\n" ); lose++; } break; case 'P': po_dir = xstrdup( optarg ); break; case 'u': unicodein = 1; break; case 'U': unicodeout = 1; break; case 'v': show_languages(); show_codepages(); exit(0); /* No return */ case 'V': printf(version_string); exit(0); /* No return */ case 'W': pedantic = 1; break; default: lose++; break; } } if(lose) { fprintf(stderr, "%s", usage); return 1; } mcy_debug = dodebug; if(dodebug) { setbuf(stdout, NULL); setbuf(stderr, NULL); } /* Check for input file on command-line */ if(optind < argc) { input_name = argv[optind]; } /* Generate appropriate outfile names */ if(!output_name) { output_name = dup_basename(input_name, ".mc"); strcat(output_name, ".rc"); } if(!header_name) { header_name = dup_basename(input_name, ".mc"); strcat(header_name, ".h"); } if(input_name) { if(!(yyin = fopen(input_name, "rb"))) error("Could not open %s for input\n", input_name); } else yyin = stdin; /* ret = mcy_parse(); */ /* this is not mentioned anywhere else - how should it get a value? */ if(input_name) fclose(yyin); if(ret) { /* Error during parse */ exit(1); } #ifdef WORDS_BIGENDIAN byte_swapped = (byteorder == WMC_BO_LITTLE); #else byte_swapped = (byteorder == WMC_BO_BIG); #endif switch (output_format) { case FORMAT_RC: write_h_file(header_name); write_rc_file(output_name); if(!rcinline) write_bin_files(); break; case FORMAT_RES: if (po_dir) add_translations( po_dir ); write_res_file( output_name ); break; case FORMAT_POT: write_pot_file( output_name ); break; } output_name = NULL; header_name = NULL; return 0; }