1 b6d98463 2006-04-14 devnull #include <stdio.h>
2 b6d98463 2006-04-14 devnull #include "pic.h"
3 b6d98463 2006-04-14 devnull #include "y.tab.h"
6 b6d98463 2006-04-14 devnull movegen(void)
8 b6d98463 2006-04-14 devnull static double prevdx, prevdy;
9 b6d98463 2006-04-14 devnull int i, some;
10 b6d98463 2006-04-14 devnull double defx, defy, dx, dy;
12 b6d98463 2006-04-14 devnull obj *ppos;
13 b6d98463 2006-04-14 devnull static int xtab[] = { 1, 0, -1, 0 }; /* R=0, U=1, L=2, D=3 */
14 b6d98463 2006-04-14 devnull static int ytab[] = { 0, 1, 0, -1 };
15 b6d98463 2006-04-14 devnull Attr *ap;
17 b6d98463 2006-04-14 devnull defx = getfval("movewid");
18 b6d98463 2006-04-14 devnull defy = getfval("moveht");
19 b6d98463 2006-04-14 devnull dx = dy = some = 0;
20 b6d98463 2006-04-14 devnull for (i = 0; i < nattr; i++) {
21 b6d98463 2006-04-14 devnull ap = &attr[i];
22 b6d98463 2006-04-14 devnull switch (ap->a_type) {
23 b6d98463 2006-04-14 devnull case TEXTATTR:
24 b6d98463 2006-04-14 devnull savetext(ap->a_sub, ap->a_val.p);
26 b6d98463 2006-04-14 devnull case SAME:
27 b6d98463 2006-04-14 devnull dx = prevdx;
28 b6d98463 2006-04-14 devnull dy = prevdy;
31 b6d98463 2006-04-14 devnull case LEFT:
32 b6d98463 2006-04-14 devnull dx -= (ap->a_sub==DEFAULT) ? defx : ap->a_val.f;
34 b6d98463 2006-04-14 devnull hvmode = L_DIR;
36 b6d98463 2006-04-14 devnull case RIGHT:
37 b6d98463 2006-04-14 devnull dx += (ap->a_sub==DEFAULT) ? defx : ap->a_val.f;
39 b6d98463 2006-04-14 devnull hvmode = R_DIR;
42 b6d98463 2006-04-14 devnull dy += (ap->a_sub==DEFAULT) ? defy : ap->a_val.f;
44 b6d98463 2006-04-14 devnull hvmode = U_DIR;
46 b6d98463 2006-04-14 devnull case DOWN:
47 b6d98463 2006-04-14 devnull dy -= (ap->a_sub==DEFAULT) ? defy : ap->a_val.f;
49 b6d98463 2006-04-14 devnull hvmode = D_DIR;
52 b6d98463 2006-04-14 devnull ppos = ap->a_val.o;
53 b6d98463 2006-04-14 devnull dx = ppos->o_x - curx;
54 b6d98463 2006-04-14 devnull dy = ppos->o_y - cury;
58 b6d98463 2006-04-14 devnull ppos = ap->a_val.o;
59 b6d98463 2006-04-14 devnull dx = ppos->o_x;
60 b6d98463 2006-04-14 devnull dy = ppos->o_y;
63 b6d98463 2006-04-14 devnull case FROM:
65 b6d98463 2006-04-14 devnull ppos = ap->a_val.o;
66 b6d98463 2006-04-14 devnull curx = ppos->o_x;
67 b6d98463 2006-04-14 devnull cury = ppos->o_y;
71 b6d98463 2006-04-14 devnull if (some) {
72 b6d98463 2006-04-14 devnull defx = dx;
73 b6d98463 2006-04-14 devnull defy = dy;
75 b6d98463 2006-04-14 devnull defx *= xtab[hvmode];
76 b6d98463 2006-04-14 devnull defy *= ytab[hvmode];
78 b6d98463 2006-04-14 devnull prevdx = defx;
79 b6d98463 2006-04-14 devnull prevdy = defy;
80 b6d98463 2006-04-14 devnull extreme(curx, cury);
81 b6d98463 2006-04-14 devnull curx += defx;
82 b6d98463 2006-04-14 devnull cury += defy;
83 b6d98463 2006-04-14 devnull extreme(curx, cury);
84 b6d98463 2006-04-14 devnull p = makenode(MOVE, 0);
85 b6d98463 2006-04-14 devnull dprintf("M %g %g\n", curx, cury);
86 b6d98463 2006-04-14 devnull return(p);