ldc: Small fixes (includes, less warnings etc.)
[h316.git] / pc-tools / ldc / ldc.c
index 7d67a28bf2a215e0bed2dd5622f902a38cf11118..26a469edea560b05f59596d72e2f9ee3fc92a46d 100644 (file)
@@ -6,6 +6,10 @@
 #include <sys/select.h>
 #include "hw_types.h"
 #include "hw_helpers.h"
+#include "tape.h"
+#include "process.h"
+#include "split.h"
+
 #define XON 0x11
 #define XOFF 0x13
 #define CHAR_START 0x81
@@ -16,8 +20,9 @@
 #define MAX_BLOCK_SIZE 500
 
 //#define DEBUG
-//#define DEBUG_CHECKSUM
-//#define DEBUG_STRUCTURE
+#define DEBUG_CHECKSUM
+#define DEBUG_STRUCTURE
+#define DEBUG_COMBINE
 //#define IGNORE_CHECKSUM
 #define HARDCORE_DEBUG
 /********************************************************/
@@ -32,6 +37,9 @@ int inputfd;
 int ignore = 0;
 int dosplit = 0;
 int splitnum = 0;
+int silent = 0;
+int read_pos = -5;
+int block_pos= -5;
 /********************************************************/
 
 
@@ -90,7 +98,7 @@ void errf (char *format, ...)
 
 void say (char *string)
 {
-    printf ("%s\n", string);
+    if (!silent) printf ("%s\n", string);
 }
 
 void sayf (char *format, ...)
@@ -170,10 +178,9 @@ void combine466 (unsigned char *raw, unsigned char *data)
     result->tape.low = r3;
 
 #ifdef DEBUG_COMBINE
-    msgf ("combine466 (data)     : %s%s%s", bin2str (r1, 4), bin2str (r2, 6),
-         bin2str (r3, 6));
-    msgf ("combine466 (rawmem)   : %s%s", bin2str (data[1], 8),
-         bin2str (data[0], 8));
+    msgf ("combine466 (data)     : %02x %02x %02x",r1,r2,r3, 6);
+//    msgf ("combine466 (rawmem)   : %s%s", bin2str (data[1], 8),
+//       bin2str (data[0], 8));
     msgf ("combine466 (structure): %s", bin2str (result->value, 16));
 #endif
 }
@@ -213,7 +220,8 @@ datablock *get_block()
     if (tapemode)
        tapestart ();
     do {
-       ret = read (inputfd, buffer, 1);
+       read_pos+=ret=read (inputfd, buffer, 1);
+
 #ifdef HARDCORE_DEBUG
        msgf ("READ          : (hex)%02x   (bin)%s    (dec)%3i      (oct)%3o",
              buffer[0], bin2str (buffer[0], 8), buffer[0], buffer[0]);
@@ -233,7 +241,8 @@ datablock *get_block()
        }
         
     } while (*buffer != (unsigned char) CHAR_START);
-
+    
+    block_pos=read_pos;
     msg ("get_block(): Blockstart erkannt");
 
 //    blk_data = (hw16 *) malloc (MAX_BLOCK_SIZE * sizeof (hw16));
@@ -245,6 +254,7 @@ datablock *get_block()
     do {
        complete = 0;
        ret = read (inputfd, buffer + round, 1);
+       read_pos+=ret;
 #ifdef HARDCORE_DEBUG
        static int lochzahl = 0;
        char *bin = bin2str (buffer[round], 8);
@@ -301,12 +311,13 @@ datablock *get_block()
 
 
     if (checksum_error (blk_data, blk_size)) {
-       err ("get_block(): Checksummenfehler");
+      errf ("get_block(): Checksum error!\nBlock start: %i (0x%x), read address %i (0x%x).",
+           block_pos,block_pos,read_pos,read_pos);
 
 
 #ifdef CHECKSUM_DUMP
        dump_data (buffer, 3);
-       read (inputfd, buffer, 3);
+       read_pos+=read (inputfd, buffer, 3);
        dump_data (buffer, 3);
 #endif
 
@@ -348,16 +359,19 @@ int main (int argc, char **args)
            //msgf ("Action %c,  Arg dazu:%s", action, parm);
            switch (action) {
            case 'I':
-               ignore++;
+               ignore=1;
                break;
            case 't':
-               tapemode++;
+               tapemode=1;
                break;
             case 'S':
-               splitnum++;
+               splitnum=1;
             case 's':
-               dosplit++;
+               dosplit=1;
                break;
+           case 'l':
+               silent=1;
+               break;
            default:
                say  ("Usage:\n");
                sayf ("%s [-t] [-S] [-n] [-I] [filename]", args[0]);
@@ -366,6 +380,7 @@ int main (int argc, char **args)
                sayf (" -S Split library tape into separate numbered files");
                sayf (" -s same as -S but no numbering");
                sayf (" -I Ignore errors");
+               sayf (" -l be silent");
                sayf ("");
                exit (1);
                break;
@@ -402,6 +417,9 @@ int main (int argc, char **args)
     }
     datablock *akt_block;
 
+    /* Initialize read position */
+    read_pos=0;
+
     while (1) {
        msg ("********************************************************");
        msgf ("Block no. %5i", blk_no++);