]> j8takagi.net git repositories - yacasl2.git/commitdiff
disassemble.cの修正
authorj8takagi <j8takagi@nifty.com>
Thu, 2 Jul 2026 14:11:37 +0000 (23:11 +0900)
committerj8takagi <j8takagi@nifty.com>
Thu, 2 Jul 2026 14:11:37 +0000 (23:11 +0900)
https://claude.ai/share/20e6a70b-58be-4b90-8381-d7b6590aa5d8

src/disassemble.c

index 455ed3d1bce36c16897ec8f7aca4b87576c5f4ef..b2500eb9e58ec3b322ac1b8a117d2b532694f975 100644 (file)
@@ -5,15 +5,6 @@
  */
 int codecol = 32;
 
-/**
- * @brief ファイルストリームから1ワードを取得する
- *
- * @return 取得した1ワード
- *
- * @param stream ファイルストリーム
- */
-WORD fgetword(FILE *stream);
-
 /**
  * @brief WORDデータから、値が0のWORDがいくつ連続するか返す
  *
@@ -138,13 +129,6 @@ void disassemble_ds(WORD wcnt, WORD pradr)
     }
 }
 
-WORD fgetword(FILE *stream)
-{
-    WORD aword;
-    fread(&aword, sizeof(WORD), 1, stream);
-    return aword;
-}
-
 WORD zero_data_cnt(const WORD *data, WORD wordlen)
 {
     WORD cnt = 0;
@@ -158,6 +142,7 @@ void disassemble_file(const char *file)
 {
     WORD *buf = NULL;
     WORD endptr = 0;
+    WORD w = 0;
     FILE *fp = NULL;
 
     assert(file != NULL);
@@ -167,15 +152,18 @@ void disassemble_file(const char *file)
     }
 
     buf = calloc_chk(MAX_MEMSIZE, sizeof(WORD), "disassemble_file");
-    for(WORD i = 0; !feof(fp); i++) {
-        buf[i] = fgetword(fp);
-        endptr = i;
+    while(fread(&w, sizeof(WORD), 1, fp) == 1) {
+        buf[endptr++] = w;
     }
     fclose(fp);
-    endptr--;
-    fprintf(stdout, "MAIN    START\n");
-    disassemble_memory(buf, 0, endptr);
-    fprintf(stdout, "        END\n");
+   if (endptr == 0) {
+       fprintf(stderr, "%s: empty or unreadable file\n", file);
+   } else {
+       fprintf(stdout, "MAIN    START\n");
+       disassemble_memory(buf, 0, endptr - 1);
+       fprintf(stdout, "        END\n");
+   }
+   free(buf);
 }
 
 void disassemble_memory(WORD *memory, WORD start, WORD end)