|
|
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.