Exemple #1
0
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;
}
Exemple #2
0
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++;
	}
}