YAcasl2エラーの整理
[YACASL2.git] / src / casl2rev.c
1 #include "package.h"
2 #include "disassemble.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
33     /* オプションの処理 */
34     while((opt = getopt_long(argc, argv, "vh", longopts, NULL)) != -1) {
35         switch(opt) {
36         case 'v':
37             fprintf(stdout, cmdversion, version);
38             goto casl2revfin;
39         case 'h':
40             fprintf(stdout, usage, argv[0]);
41             goto casl2revfin;
42         case '?':
43             fprintf(stderr, usage, argv[0]);
44             setcerr(212, "");    /* invalid option */
45             goto casl2revfin;
46         }
47     }
48     if(argv[optind] == NULL) {
49         setcerr(211, "");    /* object file not specified */
50         fprintf(stderr, "disassemble error - %d: %s\n", cerr->num, cerr->msg);
51         goto casl2revfin;
52     }
53     disassemble_file(argv[optind]);                /* プログラム実行 */
54 casl2revfin:
55     if(cerr->num > 0) {
56         stat = 1;
57     }
58     freecerr();                 /* エラーの解放 */
59     return stat;
60 }