for (size_t i = 0 ; i < field->bytes ; i++) {
char *type;
switch(field->type) {
- case CBOOK_FMT_CHAR: type = "CHAR"; break;
+ case CBOOK_FMT_CHAR: type = "CHAR "; break;
case CBOOK_FMT_VARCHAR: type = "VARCHAR"; break;
- case CBOOK_FMT_DECIMAL: type = "DEC"; break;
- case CBOOK_FMT_UDECIMAL:type = "UDEC"; break;
- case CBOOK_FMT_FIXED_BINARY: type= "BIN" ;break;
- case CBOOK_FMT_UFIXED_BINARY:type= "UBIN";break;
- case CBOOK_FMT_PICTURE: type = "PIC"; break;
+ case CBOOK_FMT_DECIMAL: type = "DEC "; break;
+ case CBOOK_FMT_UDECIMAL:type = "UDEC "; break;
+ case CBOOK_FMT_FIXED_BINARY: type = "BIN ";break;
+ case CBOOK_FMT_UFIXED_BINARY: type = "UBIN ";break;
+ case CBOOK_FMT_PICTURE: type = "PIC "; break;
+ case CBOOK_FMT_BIT: type = "BIT "; break;
default: type = "OTHER";
}
unsigned char byte = (unsigned char)data[i];
fwrite(o, 1, strlen(o), outfile);
break;
+ case CBOOK_FMT_BIT:
+ ;
+ char bit;
+ for (size_t i = 0 ; i < field->bytes ; i++) {
+ unsigned char byte = (unsigned char)data[i];
+ unsigned char mask = 128;
+ while(mask) {
+ bit = '0' + !!(byte & mask);
+ fwrite(&bit, 1, 1, outfile);
+ mask = mask >> 1;
+ }
+ }
+ break;
default:
;
cstring_t *tmp = new_cstring();
free(word); word = NULL;
} else {
if (line->type != CBOOK_FMT_VARCHAR
- && line->type != CBOOK_FMT_CHAR) {
+ && line->type != CBOOK_FMT_CHAR
+ && line->type != CBOOK_FMT_BIT
+ ) {
book->err_mess = cstring_concat(
"This type requires a size",
NULL
s++;
line->bytes = (s + 7) / 8;
break;
+ case CBOOK_FMT_BIT:
+ line->bytes = (line->size + 7) / 8;
+ break;
default:
;
cstring_t *tmp = new_cstring();
(*pic_fmt) = cstring_convert(str); str = NULL;
// TODO: validate the PIC format
+ } else if (cstring_starts_with(mot, "BIT", 0)) {
+ fmt = CBOOK_FMT_BIT;
} else {
// Not supported
return CBOOK_FMT_ERROR;
// FLOAT types not supported
return CBOOK_FMT_ERROR;
}
+
+ if (fmt == CBOOK_FMT_BIT && fixed) {
+ // BIT FIXED does not exist
+ return CBOOK_FMT_ERROR;
+ }
return fmt;
}