#include #include /* Long Itemは面倒なので対応する気無し */ static char *MainItem[] = { "(M) Undefined [0]", "(M) Undefined [1]", "(M) Undefined [2]", "(M) Undefined [3]", "(M) Undefined [4]", "(M) Undefined [5]", "(M) Undefined [6]", "(M) Undefined [7]", "(M) Input", "(M) Output", "(M) Collection", "(M) Feature", "(M) End Collection", "(M) Reserved [d]", "(M) Reserved [e]", "(M) Reserved [f]", }; static char *GlobalItem[] = { "(G) Usage Page", "(G) Logical Minimum", "(G) Logical Maximum", "(G) Physical Minimum", "(G) Physical Maximum", "(G) Unit Exponent", "(G) Unit", "(G) Report Size", "(G) Report ID", "(G) Report Count", "(G) Push", "(G) Pop", "(G) Reserved [c]", "(G) Reserved [d]", "(G) Reserved [e]", "(G) Reserved [f]", }; static char *LocalItem[] = { "(L) Usage", "(L) Usage Minimum", "(L) Usage Maximum", "(L) Designator Index", "(L) Designator Minimum", "(L) Designator Maximum", "(L) Undefined [6]", "(L) String Index", "(L) String Minimum", "(L) String Maximum", "(L) Delimiter", "(L) Reserved [b]", "(L) Reserved [c]", "(L) Reserved [d]", "(L) Reserved [e]", "(L) Reserved [f]", }; static char *ReservedItem[] = { "(R) Reserved [0]", "(R) Reserved [1]", "(R) Reserved [2]", "(R) Reserved [3]", "(R) Reserved [4]", "(R) Reserved [5]", "(R) Reserved [6]", "(R) Reserved [7]", "(R) Reserved [8]", "(R) Reserved [9]", "(R) Reserved [a]", "(R) Reserved [b]", "(R) Reserved [c]", "(R) Reserved [d]", "(R) Reserved [e]", "(R) Reserved [f]", }; static char **Items[] = {MainItem, GlobalItem, LocalItem, ReservedItem}; static int bSize[] = {0, 1, 2, 4}; static unsigned char Buf[16384]; static void dump(unsigned char *buf, int len) { int i, j, size, type, tag; for (i = 0; i < len; ) { size = buf[i] & 0x03; type = (buf[i] >> 2) & 0x03; tag = (buf[i] >> 4) & 0x0f; printf("%02x ", buf[i++]); for (j = 0; j < bSize[size] && (i + j) < len; j++) { printf("%02x ", buf[i + j]); } for (; j < 4; j++) printf(" "); printf(" %s\n", Items[type][tag]); i += bSize[size]; } return; } main(int argc, char *argv[]) { int i, d; /* データ読み込み */ for (i = 0; scanf("%x", &d) != EOF; i++) Buf[i] = d; /* 表示 */ dump(Buf, i); return EXIT_SUCCESS; }