mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-19 23:07:33 +09:00
78 lines
1.3 KiB
C
78 lines
1.3 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;
|
|
}
|