Example #1
0
/*
 * pushmatrix
 *
 * Push the top matrix of the stack down, placing a copy
 * of it on the top of the stack.
 *
 */
void
pushmatrix(void)
{
	Mstack	*tmpmat;
	Token	*p;

	if (vdevice.inobject) {
		p = newtokens(1);

		p->i = PUSHMATRIX;

		return;
	}

	if (msfree != (Mstack *)NULL) {
		tmpmat = vdevice.transmat;
		vdevice.transmat = msfree;
		msfree = msfree->back;
		vdevice.transmat->back = tmpmat;
		copymatrix(vdevice.transmat->m, tmpmat->m);
	} else {
		tmpmat = (Mstack *)vallocate(sizeof(Mstack));
		tmpmat->back = vdevice.transmat;
		copymatrix(tmpmat->m, vdevice.transmat->m);
		vdevice.transmat = tmpmat;
	}
}
Example #2
0
/*
 * pushviewport
 *
 * pushes the current viewport on the viewport stack
 *
 */
void
pushviewport()
{
	Vstack	*nvport;
	Token	*tok;

	if (!vdevice.initialised)
		verror("pushviewport: vogle not initialised");
	
	if (vdevice.inobject) {
		tok = newtokens(1);

		tok->i = PUSHVIEWPORT;

		return;
	}

	if (vsfree != (Vstack *)NULL) {
		nvport = vdevice.viewport;
		vdevice.viewport = vsfree;
		vsfree = vsfree->back;
		vdevice.viewport->back = nvport;
		vdevice.viewport->v.left = nvport->v.left;
		vdevice.viewport->v.right = nvport->v.right;
		vdevice.viewport->v.bottom = nvport->v.bottom;
		vdevice.viewport->v.top = nvport->v.top;
	} else {
		nvport = (Vstack *)vallocate(sizeof(Vstack));
		nvport->back = vdevice.viewport;
		nvport->v.left = vdevice.viewport->v.left;
		nvport->v.right = vdevice.viewport->v.right;
		nvport->v.bottom = vdevice.viewport->v.bottom;
		nvport->v.top = vdevice.viewport->v.top;
		vdevice.viewport = nvport;
	}
}