#include "project.h" int set_parity (uint8_t *d, unsigned s, unsigned e) { unsigned i; uint8_t p = 0; for (i = s; i <= e; ++i) p ^= d[i]; return !p; } void bcd_set (uint8_t *d, unsigned s, unsigned e, unsigned v) { unsigned c, i, w; w = v % 10; for (i = e, c = 1 ; i >= s; --i) { d[i] = !! (c & w) ; if (c & 0x77777777) c <<= 1; else { c >>= 3; v = v / 10; w = v % 10; } } } int check_parity (uint8_t *d, unsigned s, unsigned e, uint8_t p) { unsigned i; for (i = s; i <= e; ++i) p ^= d[i]; return !p; } unsigned bcd (uint8_t *d, unsigned s, unsigned e) { unsigned ret = 0, c, i; for (i = e, c = 1 ; i >= s; --i) { if (d[i]) ret += c; if (c & 0x77777777) c <<= 1; else { c >>= 3; c *= 10; } } return ret; }