tpic
This commit is contained in:
parent
434d1b41b6
commit
b6d98463b4
22 changed files with 5419 additions and 0 deletions
87
src/cmd/tpic/movegen.c
Normal file
87
src/cmd/tpic/movegen.c
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
#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);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue