WIP: disasm
authorLukas Krickl <lukas@krickl.dev>
Thu, 22 Feb 2024 18:38:19 +0000 (19:38 +0100)
committerLukas Krickl <lukas@krickl.dev>
Thu, 22 Feb 2024 18:38:19 +0000 (19:38 +0100)
src/uldas.c

index cac253201dd09da1abbec8985a2998035a5da925..15cddab0f7781fc73ac83e52553fe08c61d10e51 100644 (file)
@@ -1,17 +1,28 @@
 #include "uldas.h"
 
+// dasm the next instruction
+// if there are no more bytes to be read, return 0
+// on error return -1
+// otherwise return 1
+int ulas_dasm_next(FILE *src, FILE *dst) {
+  unsigned long srctell = ftell(src);
+  // read n bytes (as many as in instruction)
+  char outbuf[ULAS_OUTBUFMAX];
+  memset(outbuf, 0, ULAS_OUTBUFMAX);
+
+  return 0;
+}
+
 int ulas_dasm(FILE *src, FILE *dst) {
-  // pass 1: run and collect labels 
+  // pass 1: run and collect labels
   // pass 2: run and output to file
-  
-  // TODO: the instruction list should be sorted so we can search it faster
-  // but for now we just do it as a linear search
-  
-  unsigned long srctell = ftell(src);
-  
-  int c = '\0';
-  while (fgetc(src) != EOF) {
+
+  int rc = 0;
+  while ((rc = ulas_dasm_next(src, dst)) > 0) {
+    if (rc == -1) {
+      return -1;
+    }
   }
 
-  return 0;
+  return rc;
 }