1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
#include "sense_dump.h"
#include <stdio.h>
#include <stdbool.h>
int main(int argc, char **argv)
{
unsigned char sense[256];
int sense_len = 0;
printf("Reading sense from args to buffer...\n");
int i;
bool is_top_nibble = true;
for (i = 1; i < argc; i++) {
char *ch;
for (ch = argv[i]; *ch != 0; ch++) {
unsigned char val;
if (*ch >= '0' && *ch <= '9')
val = (*ch) - '0';
else if (*ch >= 'a' && *ch <= 'f')
val = (*ch) - 'a' + 0xa;
else if (*ch >= 'A' && *ch <= 'F')
val = (*ch) - 'A' + 0xA;
else if (*ch == ' ' || *ch == '+' || *ch == '\t') {
continue;
} else {
fprintf(stderr, "\n\nInvalid character '%c' (%d) in sequence\n", *ch, *ch);
return 1;
}
if (is_top_nibble) {
sense[sense_len] = val<<4;
is_top_nibble = false;
} else {
sense[sense_len] |= val;
is_top_nibble = true;
sense_len++;
}
}
}
if (!is_top_nibble) {
fprintf(stderr, "Missing a nibble!\n");
return 2;
}
printf("Decoding sense...\n");
sense_dump(sense, sense_len);
return 0;
}
|