Index: trunk/src_plugins/export_excellon/aperture.c =================================================================== --- trunk/src_plugins/export_excellon/aperture.c (revision 29104) +++ trunk/src_plugins/export_excellon/aperture.c (revision 29105) @@ -66,10 +66,12 @@ /*** drill ***/ -void pcb_drill_init(pcb_drill_ctx_t *ctx) +void pcb_drill_init(pcb_drill_ctx_t *ctx, int *aper_cnt) { vtpdr_init(&ctx->obj); init_aperture_list(&ctx->apr); + if (aper_cnt != NULL) + ctx->apr.aperture_count = aper_cnt; } void pcb_drill_uninit(pcb_drill_ctx_t *ctx) Index: trunk/src_plugins/export_excellon/aperture.h =================================================================== --- trunk/src_plugins/export_excellon/aperture.h (revision 29104) +++ trunk/src_plugins/export_excellon/aperture.h (revision 29105) @@ -68,7 +68,7 @@ aperture_list_t apr; } pcb_drill_ctx_t; -void pcb_drill_init(pcb_drill_ctx_t *ctx); +void pcb_drill_init(pcb_drill_ctx_t *ctx, int *aper_cnt); void pcb_drill_uninit(pcb_drill_ctx_t *ctx); pcb_pending_drill_t *pcb_drill_new_pending(pcb_drill_ctx_t *ctx, pcb_coord_t x1, pcb_coord_t y1, pcb_coord_t x2, pcb_coord_t y2, pcb_coord_t diam); void pcb_drill_sort(pcb_drill_ctx_t *ctx); Index: trunk/src_plugins/export_excellon/excellon.c =================================================================== --- trunk/src_plugins/export_excellon/excellon.c (revision 29104) +++ trunk/src_plugins/export_excellon/excellon.c (revision 29105) @@ -17,6 +17,7 @@ #include "plugins.h" #include "funchash_core.h" #include "conf_core.h" +#include "event.h" #include "excellon_conf.h" #include "excellon.h" @@ -23,6 +24,8 @@ conf_excellon_t conf_excellon; +static int exc_aperture_cnt; + #define excellonDrX(pcb, x) ((pcb_coord_t) (x)) #define excellonDrY(pcb, y) ((pcb_coord_t) ((pcb)->hidlib.size_y - (y))) @@ -141,7 +144,7 @@ #define SUFF_LEN 32 /* global exporter states */ -static int is_plated, finding_apertures; +static int is_plated, finding_apertures, exc_aperture_cnt; static pcb_drill_ctx_t pdrills, udrills; static pcb_cam_t excellon_cam; static pcb_coord_t lastwidth; @@ -185,9 +188,13 @@ PCB_HATT_ENUM, 0, 0, {0, 0, 0}, coord_format_names, 0}, #define HA_excellonfile_coordfmt 3 + {"aperture-per-file", "Restart aperture numbering in each new file", + PCB_HATT_BOOL, 0, 0, {0, 0, 0}, 0, 0}, +#define HA_apeture_per_file 4 + {"cam", "CAM instruction", PCB_HATT_STRING, 0, 0, {0, 0, 0}, 0, 0}, -#define HA_cam 4 +#define HA_cam 5 }; #define NUM_OPTIONS (sizeof(excellon_options)/sizeof(excellon_options[0])) @@ -217,9 +224,6 @@ conf_force_set_bool(conf_core.editor.thin_draw_poly, 0); conf_force_set_bool(conf_core.editor.check_planes, 0); - pcb_drill_init(&pdrills); - pcb_drill_init(&udrills); - memset(&warn, 0, sizeof(warn)); if (!options) { excellon_get_export_options(hid, NULL); @@ -227,6 +231,9 @@ excellon_values[i] = excellon_options[i].default_val; options = excellon_values; } + pcb_drill_init(&pdrills, options[HA_apeture_per_file].lng ? NULL : &exc_aperture_cnt); + pcb_drill_init(&udrills, options[HA_apeture_per_file].lng ? NULL : &exc_aperture_cnt); + memset(&warn, 0, sizeof(warn)); pcb_cam_begin(PCB, &excellon_cam, &xform, options[HA_cam].str, excellon_options, NUM_OPTIONS, options); @@ -463,8 +470,11 @@ { } +static void exc_session_begin(pcb_hidlib_t *hidlib, void *user_data, int argc, pcb_event_arg_t argv[]) +{ + exc_aperture_cnt = 0; +} - int pplg_check_ver_export_excellon(int ver_needed) { return 0; } void pplg_uninit_export_excellon(void) @@ -472,6 +482,7 @@ pcb_export_remove_opts_by_cookie(excellon_cookie); free(filename); pcb_conf_unreg_fields("plugins/export_excellon/"); + pcb_event_unbind_allcookie(excellon_cookie); } int pplg_init_export_excellon(void) @@ -514,5 +525,7 @@ excellon_hid.usage = excellon_usage; pcb_hid_register_hid(&excellon_hid); + + pcb_event_bind(PCB_EVENT_EXPORT_SESSION_BEGIN, exc_session_begin, NULL, excellon_cookie); return 0; } Index: trunk/src_plugins/export_gerber/gerber.c =================================================================== --- trunk/src_plugins/export_gerber/gerber.c (revision 29104) +++ trunk/src_plugins/export_gerber/gerber.c (revision 29105) @@ -71,7 +71,7 @@ static int has_outline; static int gerber_debug; static int gerber_ovr; -static int gerber_global_aperture_cnt; +static int gerber_global_aperture_cnt, gerber_global_exc_aperture_cnt; static aperture_list_t *layer_aptr_list; static aperture_list_t *curr_aptr_list; @@ -532,14 +532,12 @@ pcb_xform_t xform; gerber_ovr = 0; - gerber_global_aperture_cnt = 0; + gerber_global_aperture_cnt = gerber_global_exc_aperture_cnt = 0; conf_force_set_bool(conf_core.editor.thin_draw, 0); conf_force_set_bool(conf_core.editor.thin_draw_poly, 0); conf_force_set_bool(conf_core.editor.check_planes, 0); - pcb_drill_init(&pdrills); - pcb_drill_init(&udrills); drawing_mode_issued = PCB_HID_COMP_POSITIVE; @@ -560,6 +558,9 @@ pcb_printf_slot[4] = gerber_cfmt->cfmt; pcb_printf_slot[5] = gerber_cfmt->afmt; + pcb_drill_init(&pdrills, options[HA_apeture_per_file].lng ? NULL : &gerber_global_exc_aperture_cnt); + pcb_drill_init(&udrills, options[HA_apeture_per_file].lng ? NULL : &gerber_global_exc_aperture_cnt); + pcb_cam_begin(PCB, &gerber_cam, &xform, options[HA_cam].str, gerber_options, NUM_OPTIONS, options); fnbase = options[HA_gerberfile].str;