ソースの推敲
[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 = 0;
24     int stat = 0;
25     const char *version = PACKAGE_VERSION;
26     const char *cmdversion = "disassemble of YACASL2 version %s\n";
27     const char *usage = "Usage: %s [-vh] FILE\n";
28
29     /* エラーの定義 */
30     cerr_init();
31     addcerrlist_load();
32     addcerrlist_exec();
33
34     /* オプションの処理 */
35     while((opt = getopt_long(argc, argv, "vh", longopts, NULL)) != -1) {
36         switch(opt) {
37         case 'v':
38             fprintf(stdout, cmdversion, version);
39             goto casl2revfin;
40         case 'h':
41             fprintf(stdout, usage, argv[0]);
42             goto casl2revfin;
43         case '?':
44             fprintf(stderr, usage, argv[0]);
45             setcerr(212, "");    /* invalid option */
46             goto casl2revfin;
47         }
48     }
49     if(argv[optind] == NULL) {
50         setcerr(211, "");    /* object file not specified */
51         fprintf(stderr, "disassemble error - %d: %s\n", cerr->num, cerr->msg);
52         goto casl2revfin;
53     }
54     disassemble_file(argv[optind]);                /* プログラム実行 */
55 casl2revfin:
56     if(cerr->num > 0) {
57         stat = 1;
58     }
59     freecerr();                 /* エラーの解放 */
60     return stat;
61 }