/* Big endian version */ unsigned int binaryReadUInt32BE(EmbFile* file) { unsigned int returnValue = embFile_getc(file) << 24; returnValue |= embFile_getc(file) << 16; returnValue |= embFile_getc(file) << 8; returnValue |= embFile_getc(file); return returnValue; }
unsigned int binaryReadUInt32(EmbFile* file) { unsigned int x = embFile_getc(file); x = x | embFile_getc(file) << 8; x = x | embFile_getc(file) << 16; x = x | embFile_getc(file) << 24; return x; }
/* Big endian version */ int binaryReadInt32BE(EmbFile* file) { int returnValue = embFile_getc(file) << 24; returnValue |= embFile_getc(file) << 16; returnValue |= embFile_getc(file) << 8; returnValue |= embFile_getc(file); return (returnValue); }
/*! Reads a file with the given \a fileName and loads the data into \a pattern. * Returns \c true if successful, otherwise returns \c false. */ int read10o(EmbPattern* pattern, const char* fileName) { EmbFile* file = 0; if(!pattern) { embLog_error("format-10o.c read10o(), pattern argument is null\n"); return 0; } if(!fileName) { embLog_error("format-10o.c read10o(), fileName argument is null\n"); return 0; } file = embFile_open(fileName,"rb"); if(!file) { embLog_error("format-10o.c read10o(), cannot open %s for reading\n", fileName); return 0; } embPattern_loadExternalColorFile(pattern, fileName); while(1) { int x, y; int stitchType = NORMAL; unsigned char ctrl = (unsigned char)embFile_getc(file); if(embFile_eof(file)) break; y = embFile_getc(file); if(embFile_eof(file)) break; x = embFile_getc(file); if(embFile_eof(file)) break; if(ctrl & 0x20) x = -x; if(ctrl & 0x40) y = -y; if(ctrl & 0x01) stitchType = TRIM; if((ctrl & 0x5) == 5) { stitchType = STOP; } if(ctrl == 0xF8 || ctrl == 0x91 || ctrl == 0x87) { embPattern_addStitchRel(pattern, 0, 0, END, 1); break; } embPattern_addStitchRel(pattern, x / 10.0, y / 10.0, stitchType, 1); } embFile_close(file); /* Check for an END stitch and add one if it is not present */ if(pattern->lastStitch->stitch.flags != END) embPattern_addStitchRel(pattern, 0, 0, END, 1); return 1; }
/*! Reads a file with the given \a fileName and loads the data into \a pattern. * Returns \c true if successful, otherwise returns \c false. */ int readDsb(EmbPattern* pattern, const char* fileName) { EmbFile* file = 0; if(!pattern) { embLog_error("format-dsb.c readDsb(), pattern argument is null\n"); return 0; } if(!fileName) { embLog_error("format-dsb.c readDsb(), fileName argument is null\n"); return 0; } file = embFile_open(fileName,"rb"); if(!file) { embLog_error("format-dsb.c readDsb(), cannot open %s for reading\n", fileName); return 0; } embPattern_loadExternalColorFile(pattern, fileName); /*TODO: READ 512 BYTE HEADER INTO header[] */ /* for(i = 0; i < 512; i++) { header[i] = embFile_getc(file); } */ embFile_seek(file, 0x200, SEEK_SET); while(1) { int x, y; unsigned char ctrl; int stitchType = NORMAL; ctrl =(unsigned char)embFile_getc(file); if(embFile_eof(file)) break; y = embFile_getc(file); if(embFile_eof(file)) break; x = embFile_getc(file); if(embFile_eof(file)) break; if(ctrl & 0x01) stitchType = TRIM; if(ctrl & 0x20) x = -x; if(ctrl & 0x40) y = -y; /* ctrl & 0x02 - Speed change? */ /* TODO: review this line */ /* ctrl & 0x04 - Clutch? */ /* TODO: review this line */ if((ctrl & 0x05) == 0x05) { stitchType = STOP; } if(ctrl == 0xF8 || ctrl == 0x91 || ctrl == 0x87) { embPattern_addStitchRel(pattern, 0, 0, END, 1); break; } embPattern_addStitchRel(pattern, x / 10.0, y / 10.0, stitchType, 1); } embFile_close(file); return 1; }
float binaryReadFloat(EmbFile* file) { union { float f32; unsigned int u32; } float_int_u; float_int_u.u32 = embFile_getc(file); float_int_u.u32 |= embFile_getc(file) << 8; float_int_u.u32 |= embFile_getc(file) << 16; float_int_u.u32 |= embFile_getc(file) << 24; return float_int_u.f32; }
/*! Reads a file with the given \a fileName and loads the data into \a pattern. * Returns \c true if successful, otherwise returns \c false. */ int readDsz(EmbPattern* pattern, const char* fileName) { EmbFile* file = 0; if(!pattern) { embLog_error("format-dsz.c readDsz(), pattern argument is null\n"); return 0; } if(!fileName) { embLog_error("format-dsz.c readDsz(), fileName argument is null\n"); return 0; } file = embFile_open(fileName,"rb"); if(!file) { embLog_error("format-dsz.c readDsz(), cannot open %s for reading\n", fileName); return 0; } embPattern_loadExternalColorFile(pattern, fileName); embFile_seek(file, 0x200, SEEK_SET); while(1) { int x, y; unsigned char ctrl; int stitchType = NORMAL; y = embFile_getc(file); if(embFile_eof(file)) break; x = embFile_getc(file); if(embFile_eof(file)) break; ctrl = (unsigned char)embFile_getc(file); if(embFile_eof(file)) break; if(ctrl & 0x01) stitchType = TRIM; if(ctrl & 0x20) y = -y; if(ctrl & 0x40) x = -x; if(ctrl & 0x0E) { int headNumber = (ctrl & 0x0E) >> 1; stitchType = STOP; } if(ctrl & 0x10) { embPattern_addStitchRel(pattern, 0, 0, END, 1); break; } embPattern_addStitchRel(pattern, x / 10.0, y / 10.0, stitchType, 1); }
void binaryReadString(EmbFile* file, char* buffer, int maxLength) { int i = 0; while(i < maxLength) { buffer[i] = (char)embFile_getc(file); if(buffer[i] == '\0') break; i++; } }
void binaryReadUnicodeString(EmbFile* file, char *buffer, const int stringLength) { int i = 0; for(i = 0; i < stringLength * 2; i++) { char input = (char)embFile_getc(file); if(input != 0) { buffer[i] = input; } } }
/* Big endian version */ unsigned short binaryReadUInt16BE(EmbFile* file) { unsigned short returnValue = (unsigned short)(embFile_getc(file) << 8); returnValue |= embFile_getc(file); return returnValue; }
/* Big endian version */ short binaryReadInt16BE(EmbFile* file) { short returnValue = (short)(embFile_getc(file) << 8); returnValue |= embFile_getc(file); return returnValue; }
unsigned char binaryReadUInt8(EmbFile* file) { return (unsigned char)embFile_getc(file); }
char binaryReadByte(EmbFile* file) { return (char)embFile_getc(file); }
short binaryReadInt16(EmbFile* file) { int x = embFile_getc(file); x = x | embFile_getc(file) << 8; return (short)x; }
/*! Reads a file with the given \a fileName and loads the data into \a pattern. * Returns \c true if successful, otherwise returns \c false. */ int readCsv(EmbPattern* pattern, const char* fileName) { EmbFile* file = 0; int numColorChanges = 0; int size = 1024; int pos = 0; int c = 0; int cellNum = 0; int process = 0; int csvMode = CSV_MODE_NULL; int expect = CSV_EXPECT_QUOTE1; int flags = 0; double xx = 0.0; double yy = 0.0; unsigned char r = 0, g = 0, b = 0; char* buff = 0; if(!pattern) { embLog_error("format-csv.c readCsv(), pattern argument is null\n"); return 0; } if(!fileName) { embLog_error("format-csv.c readCsv(), fileName argument is null\n"); return 0; } buff = (char*)malloc(size); if(!buff) { embLog_error("format-csv.c readCsv(), unable to allocate memory for buff\n"); return 0; } file = embFile_open(fileName,"r"); if(!file) { embLog_error("format-csv.c readCsv(), cannot open %s for reading\n", fileName); return 0; } else { pos = 0; do { c = embFile_getc(file); switch(c) { case '"': if(expect == CSV_EXPECT_QUOTE1) { expect = CSV_EXPECT_QUOTE2; } else if(expect == CSV_EXPECT_QUOTE2) expect = CSV_EXPECT_COMMA; break; case ',': if(expect == CSV_EXPECT_COMMA) { process = 1; } break; case '\n': if(expect == CSV_EXPECT_COMMA) { process = 1; } else if(expect == CSV_EXPECT_QUOTE1) { /* Do Nothing. We encountered a blank line. */ } else { embLog_error("format-csv.c readCsv(), premature newline\n"); return 0; } break; } if(pos >= size - 1) { size *= 2; buff = (char*)realloc(buff,size); if(!buff) { embLog_error("format-csv.c readCsv(), cannot re-allocate memory for buff\n"); return 0; } } if(process) { buff[pos] = 0; pos = 0; process = 0; cellNum++; expect = CSV_EXPECT_QUOTE1; if(csvMode == CSV_MODE_NULL) { if (!strcmp(buff, "#")) { csvMode = CSV_MODE_COMMENT; } else if(!strcmp(buff, ">")) { csvMode = CSV_MODE_VARIABLE; } else if(!strcmp(buff, "$")) { csvMode = CSV_MODE_THREAD; } else if(!strcmp(buff, "*")) { csvMode = CSV_MODE_STITCH; } else { /* TODO: error */ return 0; } } else if(csvMode == CSV_MODE_COMMENT) { /* Do Nothing */ } else if(csvMode == CSV_MODE_VARIABLE) { /* Do Nothing */ } else if(csvMode == CSV_MODE_THREAD) { if(cellNum == 2) { /* Do Nothing. Ignore Thread Number */ } else if(cellNum == 3) r = (unsigned char)atoi(buff); else if(cellNum == 4) g = (unsigned char)atoi(buff); else if(cellNum == 5) b = (unsigned char)atoi(buff); else if(cellNum == 6) { /* TODO: Thread Description */ } else if(cellNum == 7) { /* TODO: Thread Catalog Number */ EmbThread t; t.color.r = r; t.color.g = g; t.color.b = b; t.description = "TODO:DESCRIPTION"; t.catalogNumber = "TODO:CATALOG_NUMBER"; embPattern_addThread(pattern, t); csvMode = CSV_MODE_NULL; cellNum = 0; } else { /* TODO: error */ return 0; } } else if(csvMode == CSV_MODE_STITCH) { if(cellNum == 2) { flags = csvStrToStitchFlag(buff); if(flags == STOP) numColorChanges++; } else if(cellNum == 3) xx = atof(buff); else if(cellNum == 4) { yy = atof(buff); embPattern_addStitchAbs(pattern, xx, yy, flags, 1); csvMode = CSV_MODE_NULL; cellNum = 0; } else { /* TODO: error */ return 0; } } if(c == '\n') { csvMode = CSV_MODE_NULL; cellNum = 0; } } else { if(expect == CSV_EXPECT_QUOTE2 && c != '"') buff[pos++] = (char)c; } } while(c != EOF); embFile_close(file); } /* if not enough colors defined, fill in random colors */ while(embThreadList_count(pattern->threadList) < numColorChanges) { embPattern_addThread(pattern, embThread_getRandom()); } free(buff); buff = 0; return 1; }
unsigned short binaryReadUInt16(EmbFile* file) { return (unsigned short)(embFile_getc(file) | embFile_getc(file) << 8); }
/*! Reads a file with the given \a fileName and loads the data into \a pattern. * Returns \c true if successful, otherwise returns \c false. */ int readExp(EmbPattern* pattern, const char* fileName) { EmbFile* file = 0; int i = 0; unsigned char b0 = 0, b1 = 0; char dx = 0, dy = 0; int flags = 0; if(!pattern) { embLog_error("format-exp.c readExp(), pattern argument is null\n"); return 0; } if(!fileName) { embLog_error("format-exp.c readExp(), fileName argument is null\n"); return 0; } file = embFile_open(fileName, "rb"); if(!file) { embLog_error("format-exp.c readExp(), cannot open %s for reading\n", fileName); return 0; } embPattern_loadExternalColorFile(pattern, fileName); for(i = 0; !embFile_eof(file); i++) { flags = NORMAL; b0 = (unsigned char)embFile_getc(file); if(embFile_eof(file)) break; b1 = (unsigned char)embFile_getc(file); if(embFile_eof(file)) break; if(b0 == 0x80) { if(b1 & 1) { b0 = (unsigned char)embFile_getc(file); if(embFile_eof(file)) break; b1 = (unsigned char)embFile_getc(file); if(embFile_eof(file)) break; flags = STOP; } else if((b1 == 2) || (b1 == 4) || b1 == 6) { flags = TRIM; if(b1 == 2) flags = NORMAL; b0 = (unsigned char)embFile_getc(file); if(embFile_eof(file)) break; b1 = (unsigned char)embFile_getc(file); if(embFile_eof(file)) break; } else if(b1 == 0x80) { b0 = (unsigned char)embFile_getc(file); if(embFile_eof(file)) break; b1 = (unsigned char)embFile_getc(file); if(embFile_eof(file)) break; /* Seems to be b0=0x07 and b1=0x00 * Maybe used as extension functions */ b0 = 0; b1 = 0; flags = TRIM; } } dx = expDecode(b0); dy = expDecode(b1); embPattern_addStitchRel(pattern, dx / 10.0, dy / 10.0, flags, 1); } embFile_close(file); /* Check for an END stitch and add one if it is not present */ if(pattern->lastStitch->stitch.flags != END) embPattern_addStitchRel(pattern, 0, 0, END, 1); return 1; }