+static void
+newline(FILE *stream, int pos)
+{
+ fprintf(stream, "\n%08x: ", pos);
+}
+
+static void
+dump_raw(FILE *stream, int start, int end)
+{
+ for (size_t i = start; i < end; )
+ {
+ if (i + 5 <= n
+ && data[i]
+ //&& !data[i + 1]
+ && !data[i + 2]
+ && !data[i + 3]
+ && i + 4 + data[i] + data[i + 1] * 256 <= end
+ && all_ascii(&data[i + 4], data[i] + data[i + 1] * 256))
+ {
+ newline(stream, i);
+ fprintf(stream, "\"");
+ fwrite(&data[i + 4], 1, data[i] + data[i + 1] * 256, stream);
+ fputs("\" ", stream);
+
+ i += 4 + data[i] + data[i + 1] * 256;
+ }
+ else if (i + 12 <= end
+ && data[i + 1] == 40
+ && data[i + 2] == 5
+ && data[i + 3] == 0)
+ {
+ double d;
+
+ memcpy (&d, &data[i + 4], 8);
+ fprintf (stream, "F40.%d(%.*f)", data[i], data[i], d);
+ i += 12;
+ newline (stream, i);
+ }
+ else if (i + 12 <= end
+ && data[i + 1] == 40
+ && data[i + 2] == 31
+ && data[i + 3] == 0)
+ {
+ double d;
+
+ memcpy (&d, &data[i + 4], 8);
+ fprintf (stream, "PCT40.%d(%.*f)", data[i], data[i], d);
+ i += 12;
+ newline(stream, i);
+ }
+ else if (i + 4 <= end
+ && (data[i] && data[i] != 88 && data[i] != 0x41)
+ && !data[i + 1]
+ && !data[i + 2]
+ && !data[i + 3])
+ {
+ fprintf (stream, "i%d ", data[i]);
+ i += 4;
+ }
+ else
+ {
+ fprintf(stream, "%02x ", data[i]);
+ i++;
+ }
+ }
+
+
+}
+