#include <stdio.h>
#define D1_VAL 1
#define D2_VAL 2
#define D3_VAL 19
#define D4_VAL 4
#define D5_VAL 14
#define D_CNT 5
#define D_OFS 0
#define O1_VAL 6
#define O2_VAL 12
#define O3_VAL 15
#define O4_VAL 17
#define O_CNT 4
#define O_OFS D_CNT
#define PIN_NUM_CNT (D_CNT+O_CNT)
#define PIN_GRP_CNT 2
enum decode_res_e {
DECODE_OK = 0,
DECODE_ERR = !DECODE_OK
};
int const pin_num_tab[PIN_NUM_CNT] = {
D1_VAL, D2_VAL, D3_VAL, D4_VAL, D5_VAL,
O1_VAL, O2_VAL, O3_VAL, O4_VAL,
};
typedef struct { unsigned char chr, ofs, cnt; } pin_grp_t;
pin_grp_t const pin_grp_tab[2] = {
{ .chr = 'd', .ofs = D_OFS, .cnt = D_CNT },
{ .chr = 'o', .ofs = O_OFS, .cnt = O_CNT },
};
int pin_to_num(int * num, unsigned char * pin)
{
unsigned char i = 0, tmp = pin[1] - 0x31;
while (i < PIN_GRP_CNT) {
if (pin_grp_tab[i].chr == pin[0]) {
if (tmp >= pin_grp_tab[i].cnt) break;
*num = pin_num_tab[pin_grp_tab[i].ofs + tmp];
return DECODE_OK;
}
i++;
}
return DECODE_ERR;
}
int main(void) {
int num;
unsigned char const inp[] = "d6";
if (pin_to_num(&num,inp) == DECODE_OK) {
} else {
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgogICAgI2RlZmluZSBEMV9WQUwgIDEKICAgICNkZWZpbmUgRDJfVkFMICAyCiAgICAjZGVmaW5lIEQzX1ZBTCAgMTkKICAgICNkZWZpbmUgRDRfVkFMICA0CiAgICAjZGVmaW5lIEQ1X1ZBTCAgMTQKCgkjZGVmaW5lIERfQ05UCTUKCSNkZWZpbmUgRF9PRlMJMAoKICAgICNkZWZpbmUgTzFfVkFMICA2CiAgICAjZGVmaW5lIE8yX1ZBTCAgMTIKICAgICNkZWZpbmUgTzNfVkFMICAxNQogICAgI2RlZmluZSBPNF9WQUwgIDE3CiAgICAKICAgICNkZWZpbmUgT19DTlQJNAoJI2RlZmluZSBPX09GUwlEX0NOVAoJCgkjZGVmaW5lIFBJTl9OVU1fQ05UCQkoRF9DTlQrT19DTlQpCgkjZGVmaW5lIFBJTl9HUlBfQ05UCQkyCgplbnVtIGRlY29kZV9yZXNfZSB7CglERUNPREVfT0sgPSAwLAoJREVDT0RFX0VSUiA9ICFERUNPREVfT0sKfTsKCmludCBjb25zdCBwaW5fbnVtX3RhYltQSU5fTlVNX0NOVF0gPSB7CglEMV9WQUwsIEQyX1ZBTCwgRDNfVkFMLCBENF9WQUwsIEQ1X1ZBTCwKCU8xX1ZBTCwgTzJfVkFMLCBPM19WQUwsIE80X1ZBTCwKfTsKCnR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgY2hhciBjaHIsIG9mcywgY250OyB9IHBpbl9ncnBfdDsKCnBpbl9ncnBfdCBjb25zdCBwaW5fZ3JwX3RhYlsyXSA9IHsKCXsgLmNociA9ICdkJywgLm9mcyA9IERfT0ZTLCAuY250ID0gRF9DTlQgfSwKCXsgLmNociA9ICdvJywgLm9mcyA9IE9fT0ZTLCAuY250ID0gT19DTlQgfSwKfTsKCmludCBwaW5fdG9fbnVtKGludCAqIG51bSwgdW5zaWduZWQgY2hhciAqIHBpbikKewoJdW5zaWduZWQgY2hhciBpID0gMCwgdG1wID0gcGluWzFdIC0gMHgzMTsKCXdoaWxlIChpIDwgUElOX0dSUF9DTlQpIHsKCQlpZiAocGluX2dycF90YWJbaV0uY2hyID09IHBpblswXSkgewoJCQlpZiAodG1wID49IHBpbl9ncnBfdGFiW2ldLmNudCkgYnJlYWs7CgkJCSpudW0gPSBwaW5fbnVtX3RhYltwaW5fZ3JwX3RhYltpXS5vZnMgKyB0bXBdOwoJCQlyZXR1cm4gREVDT0RFX09LOwoJCX0KCQlpKys7Cgl9CglyZXR1cm4gREVDT0RFX0VSUjsKfQoKaW50IG1haW4odm9pZCkgewoJaW50IG51bTsKCXVuc2lnbmVkIGNoYXIgY29uc3QgaW5wW10gPSAiZDYiOwoJcHJpbnRmKCJcZiVzIGlzICIsaW5wKTsKCWlmIChwaW5fdG9fbnVtKCZudW0saW5wKSA9PSBERUNPREVfT0spIHsKCQlwcmludGYoIiVkXHJcbiIsbnVtKTsKCX0gZWxzZSB7CgkJcHJpbnRmKCJlcnJcclxuIik7Cgl9CglyZXR1cm4gMDsKfQo=