|
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 |
}
|