コマンドラインオプションの修正
[YACASL2.git] / src / casl2rev.c
1 #include "package.h"
2 #include "exec.h"
3
4 /**
5  * @brief casl2revコマンドのオプション
6  */
7 static struct option longopts[] = {
8     {"version", no_argument, NULL, 'v' },
9     {"help", no_argument, NULL, 'h'},
10     {0, 0, 0, 0},
11 };
12
13 /**
14  * @brief casl2revコマンドのメイン
15  *
16  * @return 正常終了時は0、異常終了時は1
17  *
18  * @param argc コマンドライン引数の数
19  * @param *argv[] コマンドライン引数の配列
20  */
21 int main(int argc, char *argv[])
22 {
23     int opt, stat = 0;
24     const char *version = PACKAGE_VERSION,  *cmdversion = "disassemble of YACASL2 version %s\n";
25     const char *usage = "Usage: %s [-vh] FILE\n";
26
27     cerr_init();
28     addcerrlist_load();
29     addcerrlist_exec();
30
31     /* オプションの処理 */
32     while((opt = getopt_long(argc, argv, "vh", longopts, NULL)) != -1) {
33         switch(opt) {
34         case 'v':
35             fprintf(stdout, cmdversion, version);
36             return 0;
37         case 'h':
38             fprintf(stdout, usage, argv[0]);
39             return 0;
40         case '?':
41             fprintf(stderr, usage, argv[0]);
42             exit(1);
43         }
44     }
45     if(argv[optind] == NULL) {
46         setcerr(211, "");    /* object file not specified */
47         fprintf(stderr, "disassemble error - %d: %s\n", cerr->num, cerr->msg);
48         exit(1);
49     }
50     disassemble_file(argv[optind]);                /* プログラム実行 */
51     stat = (cerr->num == 0) ? 0 : 1;
52     freecerr();                 /* エラーの解放 */
53     return stat;
54 }