mirror of
https://github.com/rn10950/RetroZilla.git
synced 2024-11-14 03:30:17 +01:00
69 lines
1.2 KiB
C
69 lines
1.2 KiB
C
|
#include <unistd.h>
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
|
||
|
int tohex(int c)
|
||
|
{
|
||
|
if ((c >= '0') && (c <= '9')) {
|
||
|
return c - '0';
|
||
|
}
|
||
|
if ((c >= 'a') && (c <= 'f')) {
|
||
|
return c - 'a' + 10;
|
||
|
}
|
||
|
if ((c >= 'A') && (c <= 'F')) {
|
||
|
return c - 'A' + 10;
|
||
|
}
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
int isspace(int c)
|
||
|
{
|
||
|
if (c <= ' ') return 1;
|
||
|
if (c == '\n') return 1;
|
||
|
if (c == '\t') return 1;
|
||
|
if (c == ':') return 1;
|
||
|
if (c == ';') return 1;
|
||
|
if (c == ',') return 1;
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
void verify_nibble(int nibble, int current)
|
||
|
{
|
||
|
if (nibble != 0) {
|
||
|
fprintf(stderr,"count mismatch %d (nibbles=0x%x)\n",nibble,current);
|
||
|
fflush(stderr);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
int main(int argc, char **argv)
|
||
|
{
|
||
|
int c;
|
||
|
int current = 0;
|
||
|
int nibble = 0;
|
||
|
int skip = 0;
|
||
|
|
||
|
if (argv[1]) {
|
||
|
skip = atoi(argv[1]);
|
||
|
}
|
||
|
|
||
|
#define NIBBLE_COUNT 2
|
||
|
while ((c=getchar()) != EOF) {
|
||
|
if (isspace(c)) {
|
||
|
verify_nibble(nibble,current);
|
||
|
continue;
|
||
|
}
|
||
|
if (skip) {
|
||
|
skip--;
|
||
|
continue;
|
||
|
}
|
||
|
current = current << 4 | tohex(c);
|
||
|
nibble++;
|
||
|
if (nibble == NIBBLE_COUNT) {
|
||
|
putchar(current);
|
||
|
nibble = 0;
|
||
|
current = 0;
|
||
|
}
|
||
|
}
|
||
|
return 0;
|
||
|
}
|