diff -urN wf-/wf_ex.c wf/wf_ex.c --- wf-/wf_ex.c Sat Dec 12 00:00:00 2015 +++ wf/wf_ex.c Sun Dec 13 00:00:00 2015 @@ -77,12 +77,72 @@ } } +struct grp{ + int w, h; + pos_t *p; +}; + +static void +grp_read(struct grp *g, FILE *fp, const d3_t *zoom) +{ + int n, i, x = 0, y = 0; + double d; + char c; + + fscanf(fp, "w=%d,h=%d", &g->w, &g->h); + n = g->w * g->h; + if((g->p = malloc(sizeof(*g->p) * n)) == NULL) ERR("No Mem"); + for(i=0; ip[i], 0, 0, 0); + + while(y < g->h && fscanf(fp, "%lf", &d) == 1){ + i = g->w * y + x; + d3_set(&g->p[i], x, y, d); + d3_zoom(&g->p[i], zoom); + do{ c = getc(fp); }while(c == ' ' || c == '\t'); + if(++x >= g->w || c == '\n'){ + x = 0; + y++; + } + } +} + +static void +draw_grp(const eye_t *e, const struct grp *g) +{ + int x, y, i; + pos_t p2[2]; + + for(y=0; yh; y++){ + for(x=0; xw; x++){ + i = g->w * y + x; + if(x < g->w-1){ + p2[0] = g->p[i]; + p2[1] = g->p[i+1]; + draw_line(e, p2); + } + if(y < g->h-1){ + p2[0] = g->p[i]; + p2[1] = g->p[i+g->w]; + draw_line(e, p2); + } + } + } +} + int main(int ac, char **av) { int w, h, i, n = opt_int("-n", ac, av, 10); eye_t eye; int mode = 0; + char *fn = opt_str("-fn", ac, av, NULL); + char *zoom_s = opt_str("-zoom", ac, av, "1,1,1"); + d3_t zoom; + struct grp grp; + + if(!fn) ERR("-fn filename"); + sscanf(zoom_s, "%lf,%lf,%lf", &zoom.x, &zoom.y, &zoom.z); + grp_read(&grp, fopen(fn, "r"), &zoom); cui_key_init(); cui_key_fd_add(0); @@ -99,18 +159,8 @@ eye_update(&eye); xclear(); - for(i=0; i