Initial import of libucore

This commit is contained in:
Nils O. Selåsdal
2012-10-29 23:07:32 +01:00
commit ed3866e49a
79 changed files with 6181 additions and 0 deletions
+55
View File
@@ -0,0 +1,55 @@
#include <ctype.h>
#include <stdint.h>
#include <stddef.h>
#include "ucore_string.h"
size_t
uc_ascii2bcd(const char *ascii, unsigned char *bcdout, unsigned char filler)
{
unsigned char *bcdp = bcdout;
int shift = 0;
*bcdp = 0;
for(; *ascii; ascii++) {
if(*ascii < '0' || *ascii > '9') {
continue;
}
*bcdp |= (*ascii - '0') << shift;
if(shift) {
bcdp++;
*bcdp = 0;
}
shift = 4 - shift;
}
if(shift) {
*bcdp |= (filler & 0xf) << 4;
bcdp++;
}
return bcdp - bcdout;
}
static const char hex[] = "0123456789ABCDEF";
size_t
uc_bcd2ascii(const unsigned char *bcd, size_t bcdlen, char *asciiout)
{
size_t i;
size_t idx = 0;
for(i = 0; i < bcdlen; i++) {
asciiout[idx] = hex[bcd[i] & 0xf];
idx++;
asciiout[idx] = hex[(bcd[i] & 0xf0) >> 4];
idx++;
}
asciiout[idx] = 0;
return idx;
}