예제 #1
0
파일: pe2ps.c 프로젝트: Kampbell/isode-8.0
int 
ps_write_len (PS ps, PE pe)
{
	byte    buffer[1 + sizeof (PElementLen)];
	byte  *bp = buffer,
					*ep;
	PElementLen len;

	if ((len = pe -> pe_len) == PE_LEN_INDF)
		*bp++ = PE_LEN_XTND;
	else if (len <= PE_LEN_SMAX)
		*bp++ = len & 0xff;
	else {
		ep = buffer + sizeof buffer - 1;
		for (bp = ep; len != 0 && buffer < bp; len >>= 8)
			*bp-- = len & 0xff;
		*bp = PE_LEN_XTND | ((ep - bp) & 0xff);
		if (ps_write (ps, bp, ep - bp + 1) == NOTOK)
			return NOTOK;

		return OK;
	}

	if (ps_write (ps, buffer, bp - buffer) == NOTOK)
		return NOTOK;

	return OK;
}
예제 #2
0
파일: my_ps.c 프로젝트: tommie/xppaut
void ps_end(void) {
  ps_write("stroke");
  ps_write("grestore");
  ps_write("end");
  ps_write("showpage");
  ps_write_pars(psfile);
  fclose(psfile);
  PltFmtFlag = 0;
  if (Xup)
    init_x11();
}
예제 #3
0
파일: pe2ps.c 프로젝트: Kampbell/isode-8.0
int 
ps_write_id (PS ps, PE pe)
{
	byte    buffer[1 + sizeof (PElementID)];
	byte  *bp = buffer;
	PElementForm    form;
	PElementID id;

	if ((form = pe -> pe_form) == PE_FORM_ICONS)
		form = PE_FORM_CONS;
	*bp = ((pe -> pe_class << PE_CLASS_SHIFT) & PE_CLASS_MASK)
		  | ((form << PE_FORM_SHIFT) & PE_FORM_MASK);

	if ((id = pe -> pe_id) < PE_ID_XTND)
		*bp++ |= id;
	else {
		byte *ep;
		PElementID jd;

		*bp |= PE_ID_XTND;

		ep = buffer;
		for (jd = id; jd != 0; jd >>= PE_ID_SHIFT)
			ep++;

		for (bp = ep; id != 0; id >>= PE_ID_SHIFT)
			*bp-- = id & PE_ID_MASK;
		for (bp = buffer + 1; bp < ep; bp++)
			*bp |= PE_ID_MORE;

		bp = ++ep;
	}

	if (ps_write (ps, buffer, bp - buffer) == NOTOK)
		return NOTOK;

	return OK;
}