/*! 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; }
/*! 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 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); }
/*! 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 readFxy(EmbPattern* pattern, const char* fileName) { EmbFile* file = 0; if(!pattern) { embLog_error("format-fxy.c readFxy(), pattern argument is null\n"); return 0; } if(!fileName) { embLog_error("format-fxy.c readFxy(), fileName argument is null\n"); return 0; } file = embFile_open(fileName, "rb"); if(!file) { embLog_error("format-fxy.c readFxy(), cannot open %s for reading\n", fileName); return 0; } embPattern_loadExternalColorFile(pattern, fileName); embFile_seek(file, 0x100, SEEK_SET); /* TODO: review for combining code. This line appears to be the only difference from the GT format. */ while(!embFile_eof(file)) { int stitchType = NORMAL; int b1 = (int)binaryReadByte(file); int b2 = (int)binaryReadByte(file); unsigned char commandByte = binaryReadByte(file); if(commandByte == 0x91) { embPattern_addStitchRel(pattern, 0, 0, END, 1); break; } if((commandByte & 0x01) == 0x01) stitchType = TRIM; if((commandByte & 0x02) == 0x02) stitchType = STOP; if((commandByte & 0x20) == 0x20) b1 = -b1; if((commandByte & 0x40) == 0x40) b2 = -b2; embPattern_addStitchRel(pattern, b2 / 10.0, b1 / 10.0, stitchType, 1); } embFile_close(file); /* Check for an END stitch and add one if it is not present */ if(pattern->lastStitch && pattern->lastStitch->stitch.flags != END) embPattern_addStitchRel(pattern, 0, 0, END, 1); return 1; }
void readPecStitches(EmbPattern* pattern, EmbFile* file) { int stitchNumber = 0; if(!pattern) { embLog_error("format-pec.c readPecStitches(), pattern argument is null\n"); return; } if(!file) { embLog_error("format-pec.c readPecStitches(), file argument is null\n"); return; } while(!embFile_eof(file)) { int val1 = (int)binaryReadUInt8(file); int val2 = (int)binaryReadUInt8(file); int stitchType = NORMAL; if(val1 == 0xFF && val2 == 0x00) { embPattern_addStitchRel(pattern, 0.0, 0.0, END, 1); break; } if(val1 == 0xFE && val2 == 0xB0) { (void)binaryReadByte(file); embPattern_addStitchRel(pattern, 0.0, 0.0, STOP, 1); stitchNumber++; continue; } /* High bit set means 12-bit offset, otherwise 7-bit signed delta */ if(val1 & 0x80) { if(val1 & 0x20) stitchType = TRIM; if(val1 & 0x10) stitchType = JUMP; val1 = ((val1 & 0x0F) << 8) + val2; /* Signed 12-bit arithmetic */ if(val1 & 0x800) { val1 -= 0x1000; } val2 = binaryReadUInt8(file); } else if(val1 >= 0x40) { val1 -= 0x80; } if(val2 & 0x80) { if(val2 & 0x20) stitchType = TRIM; if(val2 & 0x10) stitchType = JUMP; val2 = ((val2 & 0x0F) << 8) + binaryReadUInt8(file); /* Signed 12-bit arithmetic */ if(val2 & 0x800) { val2 -= 0x1000; } } else if(val2 >= 0x40) { val2 -= 0x80; } embPattern_addStitchRel(pattern, val1 / 10.0, val2 / 10.0, stitchType, 1); stitchNumber++; } }
/*! 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; }