Merge branch 'master'
[YACASL2.git] / src / dumpword.c
1 #include "package.h"
2 #include "word.h"
3
4 /**
5  * @brief dumpwordコマンドのオプション
6  */
7 static struct option longopts[] = {
8     { "arithmetic", no_argument, NULL, 'a' },
9     { "logical", no_argument, NULL, 'l' },
10     { "version", no_argument, NULL, 'v' },
11     { "help", no_argument, NULL, 'h' },
12     { 0, 0, 0, 0 },
13 };
14
15 /**
16  * @brief dumpwordコマンドのメイン
17  *
18  * @return 正常終了時は0、エラー発生時は1
19  *
20  * @param argc コマンドライン引数の数
21  * @param *argv[] コマンドライン引数の配列
22  */
23 int main(int argc, char *argv[])
24 {
25     bool logicalmode = false;    /* レジストリの内容を論理値(0から65535)で表示する場合はtrue */
26     int opt, stat = 0;
27     WORD word;
28     const char *version = PACKAGE_VERSION,  *cmdversion = "dumpword of YACASL2 version %s\n";
29     const char *usage = "Usage: %s [-alh] WORD\n";
30
31     /* エラーの定義 */
32     cerr_init();
33     addcerrlist_load();
34     addcerrlist_word();
35
36     /* オプションの処理 */
37     while((opt = getopt_long(argc, argv, "alvh", longopts, NULL)) != -1) {
38         switch(opt) {
39         case 'l':
40             logicalmode = true;
41             break;
42         case 'v':
43             fprintf(stdout, cmdversion, version);
44             goto dumpwordfin;
45         case 'h':
46             fprintf(stdout, usage, argv[0]);
47             goto dumpwordfin;
48         case '?':
49             fprintf(stderr, usage, argv[0]);
50             setcerr(212, "");    /* invalid option */
51             goto dumpwordfin;
52         }
53     }
54
55     if(argv[optind] == NULL) {
56         setcerr(213, "");    /* invalid argument */
57         fprintf(stderr, usage, argv[0]);
58         goto dumpwordfin;
59     }
60     /* WORD値に変換 */
61     word = nh2word(argv[optind]);
62     if(cerr->num > 0) {
63         fprintf(stderr, "Dumpword Error - %d: %s\n", cerr->num, cerr->msg);
64         goto dumpwordfin;
65     }
66     fprintf(stdout, "%6s: ", argv[optind]);
67     print_dumpword(word, logicalmode);
68     fprintf(stdout, "\n");
69 dumpwordfin:
70     if(cerr->num > 0) {
71         stat = 1;
72     }
73     freecerr();                 /* エラーの解放 */
74     return stat;
75 }