Blame vxloader/toxlx.c

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