IO_stat readheader(IO_handle& stream, char *version) { char tnewheader[NEWHEADERSIZE]; uint4 size = NEWHEADERSIZE; if (IO_read(tnewheader, sizeof(char), size, stream) == IO_NORMAL) { // MW-2012-03-04: [[ StackFile5500 ]] Check for either the 2.7 or 5.5 header. if (strncmp(tnewheader, newheader, NEWHEADERSIZE) == 0 || strncmp(tnewheader, newheader5500, NEWHEADERSIZE) == 0) { sprintf(version, "%c.%c.%c.%c", tnewheader[4], tnewheader[5], tnewheader[6], tnewheader[7]); if (tnewheader[7] == '0') { version[5] = '\0'; if (tnewheader[6] == '0') version[3] = '\0'; } } else { char theader[HEADERSIZE + 1]; uint4 size = HEADERSIZE - NEWHEADERSIZE; theader[HEADERSIZE] = '\0'; uint4 offset; strncpy(theader, tnewheader, NEWHEADERSIZE); if (IO_read(theader + NEWHEADERSIZE, sizeof(char), size, stream) == IO_NORMAL && MCU_offset(SIGNATURE, theader, offset)) { if (theader[offset - 1] != '\n' || theader[offset - 2] == '\r') { MCresult->sets("stack was corrupted by a non-binary file transfer"); return IO_ERROR; } strncpy(version, &theader[offset + VERSION_OFFSET], 3); version[3] = '\0'; } else return IO_ERROR; } } return IO_NORMAL; }
void MCEPS::setextents() { tx = 0; ty = 0; ex = 612; ey = 792; uint4 offset; uint1 *bptr = (uint1 *)postscript; if (*bptr == 0xC5) { MCswapbytes = !MCswapbytes; uint4 *uint4ptr = (uint4 *)postscript; uint4 offset = swap_uint4(&uint4ptr[1]); size = swap_uint4(&uint4ptr[2]); MCswapbytes = !MCswapbytes; char *newps = new char[size]; memcpy(newps, &postscript[offset], size); delete postscript; postscript = newps; } if (MCU_offset("\n%%BeginPreview:", postscript, offset)) { uint4 eoffset; if (MCU_offset("\n%%EndPreview", postscript, eoffset)) { eoffset += 13; memmove(&postscript[offset], &postscript[eoffset], size - eoffset); size -= eoffset - offset; } } if (MCU_offset("\n%%BoundingBox:", postscript, offset)) { if (strnequal(&postscript[offset + 16], "(atend)", 7)) { uint4 newoffset; MCU_offset("\n%%BoundingBox:", &postscript[offset + 24], newoffset); offset += newoffset + 24; } real8 llx, lly, urx, ury; const char *sptr = &postscript[offset + 14]; // MW-2005-04-26: Remove 'const' to get it compiling using GCC 4.0 on MacOS X char *newptr; llx = strtod(sptr, &newptr); if (newptr != sptr) { sptr = newptr; lly = strtod(sptr, &newptr); if (newptr != sptr) { sptr = newptr; urx = strtod(sptr, &newptr); if (newptr != sptr) { sptr = newptr; ury = strtod(sptr, &newptr); if (newptr != sptr) { tx = (int2)llx; ty = (int2)lly; ex = (uint2)(urx - llx); ey = (uint2)(ury - lly); } } } } } offset = 0; uint4 newoffset = 0; pagecount = 0; while (MCU_offset("\n%%Page:", &postscript[offset], newoffset)) { MCU_realloc((char **)&pageIndex, pagecount, pagecount + 1, sizeof(uint4)); offset += newoffset + 1; pageIndex[pagecount] = offset; pagecount++; } }