/*! 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 readPec(EmbPattern* pattern, const char* fileName) { unsigned int graphicsOffset; unsigned char colorChanges; int i; EmbFile* file = 0; if(!pattern) { embLog_error("format-pec.c readPec(), pattern argument is null\n"); return 0; } if(!fileName) { embLog_error("format-pec.c readPec(), fileName argument is null\n"); return 0; } file = embFile_open(fileName, "rb"); if(!file) { embLog_error("format-pec.c readPec(), cannot open %s for reading\n", fileName); return 0; } embFile_seek(file, 0x38, SEEK_SET); colorChanges = (unsigned char)binaryReadByte(file); for(i = 0; i <= colorChanges; i++) { embPattern_addThread(pattern, pecThreads[binaryReadByte(file) % 65]); } /* Get Graphics offset */ embFile_seek(file, 0x20A, SEEK_SET); graphicsOffset = (unsigned int)(binaryReadUInt8(file)); graphicsOffset |= (binaryReadUInt8(file) << 8); graphicsOffset |= (binaryReadUInt8(file) << 16); (void)binaryReadByte(file); /* 0x31 */ (void)binaryReadByte(file); /* 0xFF */ (void)binaryReadByte(file); /* 0xF0 */ /* Get X and Y size in .1 mm */ /* 0x210 */ binaryReadInt16(file); /* x size */ binaryReadInt16(file); /* y size */ binaryReadInt16(file); /* 0x01E0 */ binaryReadInt16(file); /* 0x01B0 */ binaryReadInt16(file); /* distance left from start */ binaryReadInt16(file); /* distance up from start */ /* Begin Stitch Data */ /* 0x21C */ /*unsigned int end = graphicsOffset + 0x208; */ readPecStitches(pattern, file); 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); embPattern_flipVertical(pattern); return 1; }
int readPhb(EmbPattern* pattern, const char* fileName) { unsigned int fileOffset; short colorCount; FILE* file = 0; int i; file = fopen(fileName, "rb"); if(!file) { return 0; } fseek(file, 0x71, SEEK_SET); colorCount = binaryReadInt16(file); for(i = 0; i < colorCount; i++) { EmbThread t = pecThreads[binaryReadByte(file)]; embPattern_addThread(pattern, t); } /* TODO: check that file begins with #PHB */ fseek(file, 0x54, SEEK_SET); fileOffset = 0x52; fileOffset += binaryReadUInt32(file); fseek(file, fileOffset, SEEK_SET); fileOffset += binaryReadUInt32(file) + 2; fseek(file, fileOffset, SEEK_SET); fileOffset += binaryReadUInt32(file); fseek(file, fileOffset + 14, SEEK_SET); /* 28 */ colorCount = (short)binaryReadByte(file); for(i = 0; i< colorCount; i++) { binaryReadByte(file); } binaryReadInt32(file); /* bytes to end of file */ binaryReadInt32(file); binaryReadByte(file); binaryReadInt16(file); binaryReadInt16(file); binaryReadInt16(file); binaryReadInt16(file); binaryReadInt16(file); binaryReadInt16(file); readPecStitches(pattern, file); embPattern_addStitchRel(pattern, 0.0, 0.0, END, 1); fclose(file); embPattern_flipVertical(pattern); return 1; /*TODO: finish ReadPhb */ }
/*! 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 readPhc(EmbPattern* pattern, const char* fileName) { int colorChanges, version, bytesInSection2; unsigned short pecOffset, bytesInSection, bytesInSection3; char pecAdd; FILE* file = 0; int i; if(!pattern) { embLog_error("format-phc.c readPhc(), pattern argument is null\n"); return 0; } if(!fileName) { embLog_error("format-phc.c readPhc(), fileName argument is null\n"); return 0; } file = fopen(fileName, "rb"); if(!file) { embLog_error("format-phc.c readPhc(), cannot open %s for reading\n", fileName); return 0; } fseek(file, 0x07, SEEK_SET); version = binaryReadByte(file) - 0x30; /* converting from ansi number */ fseek(file, 0x4D, SEEK_SET); colorChanges = binaryReadUInt16(file); for(i = 0; i < colorChanges; i++) { EmbThread t = pecThreads[(int)binaryReadByte(file)]; embPattern_addThread(pattern, t); } fseek(file, 0x2B, SEEK_SET); pecAdd = binaryReadByte(file); binaryReadUInt32(file); /* file length */ pecOffset = binaryReadUInt16(file); fseek(file, pecOffset + pecAdd, SEEK_SET); bytesInSection = binaryReadUInt16(file); fseek(file, bytesInSection, SEEK_CUR); bytesInSection2 = binaryReadUInt32(file); fseek(file, bytesInSection2, SEEK_CUR); bytesInSection3 = binaryReadUInt16(file); fseek(file, bytesInSection3 + 0x12, SEEK_CUR); readPecStitches(pattern, file); fclose(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); embPattern_flipVertical(pattern); return 1; /*TODO: finish ReadPhc */ }
/*! 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 readPes(EmbPattern* pattern, const char* fileName) { int pecstart, numColors, x; FILE* file = 0; if(!pattern) { embLog_error("format-pes.c readPes(), pattern argument is null\n"); return 0; } if(!fileName) { embLog_error("format-pes.c readPes(), fileName argument is null\n"); return 0; } file = fopen(fileName, "rb"); if(!file) { embLog_error("format-pes.c readPes(), cannot open %s for reading\n", fileName); return 0; } fseek(file, 8, SEEK_SET); pecstart = binaryReadInt32(file); fseek(file, pecstart + 48, SEEK_SET); numColors = fgetc(file) + 1; for(x = 0; x < numColors; x++) { embPattern_addThread(pattern, pecThreads[(unsigned char) fgetc(file)]); } fseek(file, pecstart + 532, SEEK_SET); readPecStitches(pattern, file); embPattern_addStitchRel(pattern, 0, 0, END, 1); embPattern_flipVertical(pattern); fclose(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 readPhb(EmbPattern* pattern, const char* fileName) { unsigned int fileOffset; short colorCount; FILE* file = 0; int i; if(!pattern) { embLog_error("format-phb.c readPhb(), pattern argument is null\n"); return 0; } if(!fileName) { embLog_error("format-phb.c readPhb(), fileName argument is null\n"); return 0; } file = fopen(fileName, "rb"); if(!file) { embLog_error("format-phb.c readPhb(), cannot open %s for reading\n", fileName); return 0; } fseek(file, 0x71, SEEK_SET); colorCount = binaryReadInt16(file); for(i = 0; i < colorCount; i++) { EmbThread t = pecThreads[(int)binaryReadByte(file)]; embPattern_addThread(pattern, t); } /* TODO: check that file begins with #PHB */ fseek(file, 0x54, SEEK_SET); fileOffset = 0x52; fileOffset += binaryReadUInt32(file); fseek(file, fileOffset, SEEK_SET); fileOffset += binaryReadUInt32(file) + 2; fseek(file, fileOffset, SEEK_SET); fileOffset += binaryReadUInt32(file); fseek(file, fileOffset + 14, SEEK_SET); /* 28 */ colorCount = (short)binaryReadByte(file); for(i = 0; i< colorCount; i++) { binaryReadByte(file); } binaryReadInt32(file); /* bytes to end of file */ binaryReadInt32(file); binaryReadByte(file); binaryReadInt16(file); binaryReadInt16(file); binaryReadInt16(file); binaryReadInt16(file); binaryReadInt16(file); binaryReadInt16(file); readPecStitches(pattern, file); fclose(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); embPattern_flipVertical(pattern); return 1; /*TODO: finish ReadPhb */ }