/* * This file is part of the UCB release of Plan 9. It is subject to the license * terms in the LICENSE file found in the top-level directory of this * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No * part of the UCB release of Plan 9, including this file, may be copied, * modified, propagated, or distributed except according to the terms contained * in the LICENSE file. */#include <stdio.h>#include "pic.h"#include "y.tab.h"obj *movegen(void){ static double prevdx, prevdy; int i, some; double defx, defy, dx, dy; obj *p; obj *ppos; static int xtab[] = { 1, 0, -1, 0 }; /* R=0, U=1, L=2, D=3 */ static int ytab[] = { 0, 1, 0, -1 }; Attr *ap; defx = getfval("movewid"); defy = getfval("moveht"); dx = dy = some = 0; for (i = 0; i < nattr; i++) { ap = &attr[i]; switch (ap->a_type) { case TEXTATTR: savetext(ap->a_sub, ap->a_val.p); break; case SAME: dx = prevdx; dy = prevdy; some++; break; case LEFT: dx -= (ap->a_sub==DEFAULT) ? defx : ap->a_val.f; some++; hvmode = L_DIR; break; case RIGHT: dx += (ap->a_sub==DEFAULT) ? defx : ap->a_val.f; some++; hvmode = R_DIR; break; case UP: dy += (ap->a_sub==DEFAULT) ? defy : ap->a_val.f; some++; hvmode = U_DIR; break; case DOWN: dy -= (ap->a_sub==DEFAULT) ? defy : ap->a_val.f; some++; hvmode = D_DIR; break; case TO: ppos = ap->a_val.o; dx = ppos->o_x - curx; dy = ppos->o_y - cury; some++; break; case BY: ppos = ap->a_val.o; dx = ppos->o_x; dy = ppos->o_y; some++; break; case FROM: case AT: ppos = ap->a_val.o; curx = ppos->o_x; cury = ppos->o_y; break; } } if (some) { defx = dx; defy = dy; } else { defx *= xtab[hvmode]; defy *= ytab[hvmode]; } prevdx = defx; prevdy = defy; extreme(curx, cury); curx += defx; cury += defy; extreme(curx, cury); p = makenode(MOVE, 0); dprintf("M %g %g\n", curx, cury); return(p);}
/*
* This file is part of the UCB release of Plan 9. It is subject to the license
* terms in the LICENSE file found in the top-level directory of this
* distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
* part of the UCB release of Plan 9, including this file, may be copied,
* modified, propagated, or distributed except according to the terms contained
* in the LICENSE file.
*/
#include <stdio.h>
#include "pic.h"
#include "y.tab.h"
obj *movegen(void)
{
static double prevdx, prevdy;
int i, some;
double defx, defy, dx, dy;
obj *p;
obj *ppos;
static int xtab[] = { 1, 0, -1, 0 }; /* R=0, U=1, L=2, D=3 */
static int ytab[] = { 0, 1, 0, -1 };
Attr *ap;
defx = getfval("movewid");
defy = getfval("moveht");
dx = dy = some = 0;
for (i = 0; i < nattr; i++) {
ap = &attr[i];
switch (ap->a_type) {
case TEXTATTR:
savetext(ap->a_sub, ap->a_val.p);
break;
case SAME:
dx = prevdx;
dy = prevdy;
some++;
break;
case LEFT:
dx -= (ap->a_sub==DEFAULT) ? defx : ap->a_val.f;
some++;
hvmode = L_DIR;
break;
case RIGHT:
dx += (ap->a_sub==DEFAULT) ? defx : ap->a_val.f;
some++;
hvmode = R_DIR;
break;
case UP:
dy += (ap->a_sub==DEFAULT) ? defy : ap->a_val.f;
some++;
hvmode = U_DIR;
break;
case DOWN:
dy -= (ap->a_sub==DEFAULT) ? defy : ap->a_val.f;
some++;
hvmode = D_DIR;
break;
case TO:
ppos = ap->a_val.o;
dx = ppos->o_x - curx;
dy = ppos->o_y - cury;
some++;
break;
case BY:
ppos = ap->a_val.o;
dx = ppos->o_x;
dy = ppos->o_y;
some++;
break;
case FROM:
case AT:
ppos = ap->a_val.o;
curx = ppos->o_x;
cury = ppos->o_y;
break;
}
}
if (some) {
defx = dx;
defy = dy;
} else {
defx *= xtab[hvmode];
defy *= ytab[hvmode];
}
prevdx = defx;
prevdy = defy;
extreme(curx, cury);
curx += defx;
cury += defy;
extreme(curx, cury);
p = makenode(MOVE, 0);
dprintf("M %g %g\n", curx, cury);
return(p);
}