|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include "pic.h" ! 3: #include "y.tab.h" ! 4: ! 5: obj *movegen(type) ! 6: { ! 7: static float prevdx, prevdy; ! 8: int i, some; ! 9: float defx, defy, dx, dy; ! 10: obj *p; ! 11: obj *ppos; ! 12: static int xtab[] = { 1, 0, -1, 0 }; /* R=0, U=1, L=2, D=3 */ ! 13: static int ytab[] = { 0, 1, 0, -1 }; ! 14: Attr *ap; ! 15: ! 16: defx = getfval("movewid"); ! 17: defy = getfval("moveht"); ! 18: dx = dy = some = 0; ! 19: for (i = 0; i < nattr; i++) { ! 20: ap = &attr[i]; ! 21: switch (ap->a_type) { ! 22: case TEXTATTR: ! 23: savetext(ap->a_sub, ap->a_val.p); ! 24: break; ! 25: case SAME: ! 26: dx = prevdx; ! 27: dy = prevdy; ! 28: some++; ! 29: break; ! 30: case LEFT: ! 31: dx -= (ap->a_sub==DEFAULT) ? defx : ap->a_val.f; ! 32: some++; ! 33: hvmode = L_DIR; ! 34: break; ! 35: case RIGHT: ! 36: dx += (ap->a_sub==DEFAULT) ? defx : ap->a_val.f; ! 37: some++; ! 38: hvmode = R_DIR; ! 39: break; ! 40: case UP: ! 41: dy += (ap->a_sub==DEFAULT) ? defy : ap->a_val.f; ! 42: some++; ! 43: hvmode = U_DIR; ! 44: break; ! 45: case DOWN: ! 46: dy -= (ap->a_sub==DEFAULT) ? defy : ap->a_val.f; ! 47: some++; ! 48: hvmode = D_DIR; ! 49: break; ! 50: case TO: ! 51: ppos = ap->a_val.o; ! 52: dx = ppos->o_x - curx; ! 53: dy = ppos->o_y - cury; ! 54: some++; ! 55: break; ! 56: case BY: ! 57: ppos = ap->a_val.o; ! 58: dx = ppos->o_x; ! 59: dy = ppos->o_y; ! 60: some++; ! 61: break; ! 62: case FROM: ! 63: case AT: ! 64: ppos = ap->a_val.o; ! 65: curx = ppos->o_x; ! 66: cury = ppos->o_y; ! 67: break; ! 68: } ! 69: } ! 70: if (some) { ! 71: defx = dx; ! 72: defy = dy; ! 73: } else { ! 74: defx *= xtab[hvmode]; ! 75: defy *= ytab[hvmode]; ! 76: } ! 77: prevdx = defx; ! 78: prevdy = defy; ! 79: extreme(curx, cury); ! 80: curx += defx; ! 81: cury += defy; ! 82: extreme(curx, cury); ! 83: p = makenode(MOVE, 0); ! 84: dprintf("M %g %g\n", curx, cury); ! 85: return(p); ! 86: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.