Blame vxloader/toxlx.c

Packit e67170
#include <stdio.h>
Packit e67170
#include <stdlib.h>
Packit e67170
#include <string.h>
Packit e67170
#include <ctype.h>
Packit e67170
Packit e67170
int main()
Packit e67170
{
Packit e67170
	char buf[256];
Packit e67170
	int data, c, idx, length;
Packit e67170
	unsigned char *imgbuf = NULL;
Packit e67170
	char *p;
Packit e67170
Packit e67170
	c = 0;
Packit e67170
	data = 0;
Packit e67170
	idx = 0;
Packit e67170
	length = 0;
Packit e67170
	while (fgets(buf, sizeof(buf), stdin)) {
Packit e67170
		if (strncmp(buf, "Bits:", 5) == 0) {
Packit e67170
			for (p = buf + 5; *p && isspace(*p); p++)
Packit e67170
				;
Packit e67170
			if (! *p) {
Packit e67170
				fprintf(stderr, "corrupted file in Bits line\n");
Packit e67170
				return 1;
Packit e67170
			}
Packit e67170
			length = atoi(p);
Packit e67170
			length /= 8;
Packit e67170
			if (length <= 0) {
Packit e67170
				fprintf(stderr, "corrupted file, detected length = %d\n", length);
Packit e67170
				return 1;
Packit e67170
			}
Packit e67170
			imgbuf = malloc(length);
Packit e67170
			if (! imgbuf) {
Packit e67170
				fprintf(stderr, "cannot alloc %d bytes\n", length);
Packit e67170
				return 1;
Packit e67170
			}
Packit e67170
			continue;
Packit e67170
		}
Packit e67170
		if (buf[0] != '0' && buf[1] != '1')
Packit e67170
			continue;
Packit e67170
		if (length <= 0) {
Packit e67170
			fprintf(stderr, "corrupted file, starting without Bits line\n");
Packit e67170
			return 1;
Packit e67170
		}
Packit e67170
		for (p = buf; *p == '0' || *p == '1'; p++) {
Packit e67170
			data |= (*p - '0') << c;
Packit e67170
			c++;
Packit e67170
			if (c >= 8) {
Packit e67170
				imgbuf[idx] = data;
Packit e67170
				data = 0;
Packit e67170
				c = 0;
Packit e67170
				idx++;
Packit e67170
				if (idx >= length)
Packit e67170
					break;
Packit e67170
			}
Packit e67170
		}
Packit e67170
	}
Packit e67170
	if (c)
Packit e67170
		imgbuf[idx++] = data;
Packit e67170
	if (idx != length) {
Packit e67170
		fprintf(stderr, "length doesn't match: %d != %d\n", idx, length);
Packit e67170
		return 1;
Packit e67170
	}
Packit e67170
Packit e67170
	for (idx = 0; idx < length; idx++)
Packit e67170
		putchar(imgbuf[idx]);
Packit e67170
Packit e67170
	return 0;
Packit e67170
}