|
|
1.1 root 1: /* Copyright (c) 1988 AT&T */
2: /* All Rights Reserved */
3:
4: /* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T */
5: /* The copyright notice above does not evidence any */
6: /* actual or intended publication of such source code. */
7:
8: /* @(#)picasso:movegen.c 1.0 */
9: #include "picasso.h"
10: #include "y.tab.h"
11:
12: obj *movegen()
13: {
14: static double prevdx, prevdy;
15: static int xtab[] = { 1, 0, -1, 0 }; /* R=0, U=1, L=2, D=3 */
16: static int ytab[] = { 0, 1, 0, -1 };
17:
18: struct objattr obat;
19: double defx, defy, dx, dy, tcolor;
20: int i, some;
21: obj *p;
22: obj *ppos;
23: Attr *ap;
24:
25: defx = getfval("movewid");
26: defy = getfval("moveht");
27: tcolor = -1;
28: set_text();
29: dx = dy = some = 0;
30: for (i = 0; i < nattr; i++) {
31: ap = &attr[i];
32: switch (ap->a_type) {
33: case FONT:
34: case SIZE:
35: case SPACE:
36: case TEXTATTR:
37: miscattrs(ap, &obat); /* obat not really used here */
38: break;
39: case TCOLOR:
40: tcolor = ap->a_val.f;
41: break;
42: case SAME:
43: dx = prevdx;
44: dy = prevdy;
45: some++;
46: break;
47: case LEFT:
48: dx -= (ap->a_sub==DEFAULT) ? defx : ap->a_val.f;
49: some++;
50: hvmode = L_DIR;
51: break;
52: case RIGHT:
53: dx += (ap->a_sub==DEFAULT) ? defx : ap->a_val.f;
54: some++;
55: hvmode = R_DIR;
56: break;
57: case UP:
58: dy += (ap->a_sub==DEFAULT) ? defy : ap->a_val.f;
59: some++;
60: hvmode = U_DIR;
61: break;
62: case DOWN:
63: dy -= (ap->a_sub==DEFAULT) ? defy : ap->a_val.f;
64: some++;
65: hvmode = D_DIR;
66: break;
67: case TO:
68: ppos = ap->a_val.o;
69: dx = Xformx(ppos, 1, ppos->o_x, ppos->o_y) - curx;
70: dy = Xformy(ppos, 0, ppos->o_x, ppos->o_y) - cury;
71: some++;
72: break;
73: case BY:
74: ppos = ap->a_val.o;
75: dx = Xformx(ppos, 1, ppos->o_x, ppos->o_y);
76: dy = Xformy(ppos, 0, ppos->o_x, ppos->o_y);
77: some++;
78: break;
79: case FROM:
80: case AT:
81: ppos = ap->a_val.o;
82: curx = Xformx(ppos, 1, ppos->o_x, ppos->o_y);
83: cury = Xformy(ppos, 0, ppos->o_x, ppos->o_y);
84: break;
85: }
86: }
87: if (some) {
88: defx = dx;
89: defy = dy;
90: } else {
91: defx *= xtab[hvmode];
92: defy *= ytab[hvmode];
93: }
94: prevdx = defx;
95: prevdy = defy;
96: extreme(curx, cury, Gbox);
97: curx += defx;
98: cury += defy;
99: extreme(curx, cury, Gbox);
100: p = makenode(MOVE, 0, 0);
101: if (p->o_nt2 > p->o_nt1) {
102: p->o_text = tcolor;
103: checktextcolor(p);
104: text_bounds(p);
105: }
106: return(p);
107: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.