デバッガー機能をsrc/debbugger.cに独立
[YACASL2.git] / src / word.c
index 415dfa4..e7b646c 100644 (file)
@@ -8,25 +8,32 @@
 #include "cerr.h"
 
 /**
- * wordのエラー定義
+ * @brief 10進数値を表す文字列をWORD値に変換する
+ *
+ * @return WORD値
+ *
+ * @param *str 10進数値を表す文字列
  */
-static CERR cerr_word[] = {
-    { 114, "not integer" },
-    { 115, "not hex" },
-    { 116, "out of hex range" },
-};
+WORD n2word(const char *str);
 
 /**
- * wordのエラーをエラーリストに追加
+ * @brief 16進数の文字列をWORD値に変換する
+ *
+ * @return WORD値
+ *
+ * @param *str 16進数値を表す文字列
  */
-void addcerrlist_word()
-{
-    addcerrlist(ARRAYSIZE(cerr_word), cerr_word);
-}
+WORD h2word(const char *str);
 
 /**
- * 10進数の文字列をWORD値に変換
+ * @brief wordのエラー定義
  */
+static CERR cerr_word[] = {
+    { 114, "not integer" },
+    { 115, "not hex" },
+    { 116, "out of hex range" },
+};
+
 WORD n2word(const char *str)
 {
     assert(isdigit(*str) || *str == '-');
@@ -46,9 +53,6 @@ WORD n2word(const char *str)
     return (WORD)n;
 }
 
-/**
- * 16進数の文字列をWORD値に変換
- */
 WORD h2word(const char *str)
 {
     assert(*str == '#');
@@ -58,7 +62,7 @@ WORD h2word(const char *str)
     str++;
     if(*str == '-' || strlen(str) > 4) {
         setcerr(116, str-1);    /* out of hex range */
-        return 0;
+        return 0x0;
     }
     /* WORD値に変換 */
     w = (WORD)strtol(str, &check, 16);
@@ -69,9 +73,12 @@ WORD h2word(const char *str)
     return w;
 }
 
-/**
- * 10進数または16進数の文字列をWORD値に変換
- */
+/* word.hで定義された関数群 */
+void addcerrlist_word()
+{
+    addcerrlist(ARRAYSIZE(cerr_word), cerr_word);
+}
+
 WORD nh2word(const char *str)
 {
     WORD w;
@@ -89,15 +96,12 @@ WORD nh2word(const char *str)
     return w;
 }
 
-/**
- * WORD値を10進数の文字列に変換
- */
 char *word2n(WORD word)
 {
     enum {
-        MAXLEN = 6,        /* WORD値を10進数で表したときの最大桁数 */
+        MAXLEN = 5,        /* WORD値を10進数で表したときの最大桁数 */
     };
-    char *p = malloc_chk(MAXLEN, "word2n.p"), *digit = malloc_chk(MAXLEN, "word2n.digit");
+    char *p = malloc_chk(MAXLEN + 1, "word2n.p"), *digit = malloc_chk(MAXLEN + 1, "word2n.digit");
     int i = 0, j;
 
     do{
@@ -111,9 +115,6 @@ char *word2n(WORD word)
     return digit;
 }
 
-/**
- * WORD値を2進数の文字列に変換
- */
 char *word2bit(const WORD word)
 {
     enum {
@@ -130,17 +131,16 @@ char *word2bit(const WORD word)
     return bit;
 }
 
-/**
- * WORD値を解析して表示
- */
 void print_dumpword(WORD word, bool logicalmode)
 {
+    char *b;
+
     if(logicalmode == true) {
         fprintf(stdout, "%6d", word);
     } else {
         fprintf(stdout, "%6d", (signed short)word);
     }
-    fprintf(stdout, " = #%04X = %s", word, word2bit(word));
+    fprintf(stdout, " = #%04X = %s", word, (b = word2bit(word)));
     /* 「文字の組」の符号表に記載された文字と、改行(CR)/タブを表示 */
     if(word >= 0x20 && word <= 0x7E) {
         fprintf(stdout, " = \'%c\'", word);
@@ -149,5 +149,5 @@ void print_dumpword(WORD word, bool logicalmode)
     } else if(word == '\t') {
         fprintf(stdout, " = \'\\t\'");
     }
-    fprintf(stdout, "\n");
+    FREE(b);
 }