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