+/*
+ * Order two holes by hole diameter.
+ */
+static gerbv_image_t *hsc_drill_data;
+static int hole_size_cmp(const void *a_, const void *b_)
+{
+ gerbv_net_t * const *a = a_, * const *b = b_;
+ gerbv_aperture_t *ta, *tb;
+
+ ta = hsc_drill_data->aperture[abs(a[0]->aperture)];
+ assert(ta->type == GERBV_APTYPE_CIRCLE);
+
+ tb = hsc_drill_data->aperture[abs(b[0]->aperture)];
+ assert(tb->type == GERBV_APTYPE_CIRCLE);
+
+ if (ta->parameter[0] > tb->parameter[0])
+ return -1;
+ if (ta->parameter[0] < tb->parameter[0])
+ return 1;
+ return 0;
+}
+
+static void sort_holes_by_size(gerbv_image_t *drill, CVectorHandle work)
+{
+ hsc_drill_data = drill;
+ qsort(work->array, work->size, work->elementsize, hole_size_cmp);
+}
+