Index: test.c =================================================================== --- test.c (revision 8174) +++ test.c (revision 8175) @@ -62,8 +62,10 @@ draw_(p->contours, 1); - for (c = p->contours->next; c != NULL; c = c->next) + for (c = p->contours->next; c != NULL; c = c->next) { + printf("!hole:\n"); draw_(c, 0); + } printf("flush\n"); printf("!!!animator end\n"); } @@ -101,43 +103,46 @@ if (sscanf(vect, "%ld %ld%n", &x, &y, &len) != 2) return NULL; -fprintf(stderr, "Outer:\n"); -fprintf(stderr, " %ld %ld!\n", x, y); - vect += len; v[0] = x; v[1] = y; if ((contour = pcb_poly_contour_new(v)) == NULL) return NULL; - for(;;) { while(isspace(*vect)) vect++; if (*vect == 'h') { -fprintf(stderr, "HOLE!\n"); - if (pa == NULL) + if (pa == NULL) { pa = pcb_poly_from_contour(contour); + } else { pline_update_bbox(holes[0]); pcb_poly_insert_holes(NULL, pa, holes); } - holes[0] = (pcb_pline_t *) calloc(1, sizeof(pcb_pline_t)); - pcb_poly_contour_init(holes[0]); + vect++; + if (sscanf(vect, "%ld %ld%n", &x, &y, &len) != 2) { + fprintf(stderr, "Syntax error: no points after 'h' in polygon\n"); + exit(1); + } + vect += len; + + v[0] = x; v[1] = y; + holes[0] = pcb_poly_contour_new(v); contour = holes[0]; - vect++; } + if (sscanf(vect, "%ld %ld%n", &x, &y, &len) != 2) break; -fprintf(stderr, " %ld %ld!\n", x, y); vect += len; v[0] = x; v[1] = y; pcb_poly_vertex_include(contour->head.prev, pcb_poly_node_create(v)); } - if (pa == NULL) + if (pa == NULL) { pa = pcb_poly_from_contour(contour); + } else { pline_update_bbox(holes[0]); pcb_poly_insert_holes(NULL, pa, holes);