tmovegen.c - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       tmovegen.c (1566B)
       ---
            1 #include        <stdio.h>
            2 #include        "pic.h"
            3 #include        "y.tab.h"
            4 
            5 obj*
            6 movegen(void)
            7 {
            8         static double prevdx, prevdy;
            9         int i, some;
           10         double defx, defy, dx, dy;
           11         obj *p;
           12         obj *ppos;
           13         static int xtab[] = { 1, 0, -1, 0 };        /* R=0, U=1, L=2, D=3 */
           14         static int ytab[] = { 0, 1, 0, -1 };
           15         Attr *ap;
           16 
           17         defx = getfval("movewid");
           18         defy = getfval("moveht");
           19         dx = dy = some = 0;
           20         for (i = 0; i < nattr; i++) {
           21                 ap = &attr[i];
           22                 switch (ap->a_type) {
           23                 case TEXTATTR:
           24                         savetext(ap->a_sub, ap->a_val.p);
           25                         break;
           26                 case SAME:
           27                         dx = prevdx;
           28                         dy = prevdy;
           29                         some++;
           30                         break;
           31                 case LEFT:
           32                         dx -= (ap->a_sub==DEFAULT) ? defx : ap->a_val.f;
           33                         some++;
           34                         hvmode = L_DIR;
           35                         break;
           36                 case RIGHT:
           37                         dx += (ap->a_sub==DEFAULT) ? defx : ap->a_val.f;
           38                         some++;
           39                         hvmode = R_DIR;
           40                         break;
           41                 case UP:
           42                         dy += (ap->a_sub==DEFAULT) ? defy : ap->a_val.f;
           43                         some++;
           44                         hvmode = U_DIR;
           45                         break;
           46                 case DOWN:
           47                         dy -= (ap->a_sub==DEFAULT) ? defy : ap->a_val.f;
           48                         some++;
           49                         hvmode = D_DIR;
           50                         break;
           51                 case TO:
           52                         ppos = ap->a_val.o;
           53                         dx = ppos->o_x - curx;
           54                         dy = ppos->o_y - cury;
           55                         some++;
           56                         break;
           57                 case BY:
           58                         ppos = ap->a_val.o;
           59                         dx = ppos->o_x;
           60                         dy = ppos->o_y;
           61                         some++;
           62                         break;
           63                 case FROM:
           64                 case AT:
           65                         ppos = ap->a_val.o;
           66                         curx = ppos->o_x;
           67                         cury = ppos->o_y;
           68                         break;
           69                 }
           70         }
           71         if (some) {
           72                 defx = dx;
           73                 defy = dy;
           74         } else {
           75                 defx *= xtab[hvmode];
           76                 defy *= ytab[hvmode];
           77         }
           78         prevdx = defx;
           79         prevdy = defy;
           80         extreme(curx, cury);
           81         curx += defx;
           82         cury += defy;
           83         extreme(curx, cury);
           84         p = makenode(MOVE, 0);
           85         dprintf("M %g %g\n", curx, cury);
           86         return(p);
           87 }