+ printf("loaded bkm, %d players, %d frames, %d bytes, have_xyz=%d\n",
+ have_pl2 ? 2 : 1, frames, count, have_xyz);
+ out_byte_count[0] = count;
+ if (have_pl2)
+ out_byte_count[1] = count;
+ else {
+ free(out[1]);
+ out[1] = NULL;
+ }
+
+ return 0;
+}
+
+static int import_raw(FILE *f, uint8_t **out, int *out_byte_count,
+ FILE *logf)
+{
+ int count = 0;
+ int alloc = 0;
+ int line = 0;
+ int first = 1;
+ char buf[256];
+ uint8_t val;
+ char *p;
+ int i;
+
+ *out_byte_count = 0;
+
+ while ((p = fgets(buf, sizeof(buf), f)) != NULL)
+ {
+ line++;
+ if (p[0] == '#')
+ continue;
+ if (p[0] != 'e') {
+ printf("skipping: %s", p);
+ continue;
+ }
+
+ val = 0;
+ p++;
+ for (i = 6; i >= 0; i--, p++) {
+ if (*p != '0' && *p != '1')
+ goto bad;
+ if (*p == '1')
+ val |= 1 << i;
+ }
+ if (*p != ' ')
+ goto bad;
+
+ if (first && (val & 0x40))
+ continue; // XXX..
+ first = 0;
+
+ if (count >= alloc) {
+ alloc = alloc * 2 + 64;
+ *out = realloc(*out, alloc * sizeof((*out)[0]));
+ if (*out == NULL) {
+ fprintf(stderr, "OOM?\n");
+ return -1;
+ }
+ }
+
+ if (logf)
+ fwrite(&val, 1, 1, logf);
+
+ (*out)[count++] = val & 0x3f;
+ continue;
+
+bad:
+ fprintf(stderr, "bad raw line %d: '%s'\n", line, buf);
+ return -1;
+ }
+
+ printf("loaded raw, %d bytes\n", count);
+ *out_byte_count = count;
+ return 0;