Index: trunk/src_plugins/io_lihata/write.c =================================================================== --- trunk/src_plugins/io_lihata/write.c (revision 30308) +++ trunk/src_plugins/io_lihata/write.c (revision 30309) @@ -432,7 +432,7 @@ sprintf(buff, "%s.%ld", is_via ? "via" : "pin", ps->ID); obj = lht_dom_node_alloc(LHT_HASH, buff); - flg = pcb_pstk_compat_pinvia_flag(ps, cshape); + flg = pcb_pstk_compat_pinvia_flag(ps, cshape, 0); obj_attr_flag_warn((pcb_any_obj_t *)ps); Index: trunk/src_plugins/io_pcb/file.c =================================================================== --- trunk/src_plugins/io_pcb/file.c (revision 30308) +++ trunk/src_plugins/io_pcb/file.c (revision 30309) @@ -361,7 +361,7 @@ pcb_fprintf(FP, "Via[%[0] %[0] %[0] %[0] %[0] %[0] ", x, y, pad_dia, clearance*2, mask, drill_dia); pcb_print_quoted_string(FP, (char *) PCB_EMPTY(name)); - fprintf(FP, " %s]\n", pcb_strflg_f2s(pcb_pstk_compat_pinvia_flag(ps, cshape), PCB_OBJ_VIA, NULL, 1)); + fprintf(FP, " %s]\n", pcb_strflg_f2s(pcb_pstk_compat_pinvia_flag(ps, cshape, PCB_PSTKCOMP_OLD_OCTAGON), PCB_OBJ_VIA, NULL, 1)); } } @@ -485,7 +485,7 @@ pcb_print_quoted_string(FP, (char *)PCB_EMPTY(pcb_attribute_get(&ps->Attributes, "name"))); fprintf(FP, " "); pcb_print_quoted_string(FP, (char *) PCB_EMPTY(pcb_attribute_get(&ps->Attributes, "term"))); - fprintf(FP, " %s]\n", pcb_strflg_f2s(pcb_pstk_compat_pinvia_flag(ps, cshape), PCB_OBJ_PIN, &ic, 1)); + fprintf(FP, " %s]\n", pcb_strflg_f2s(pcb_pstk_compat_pinvia_flag(ps, cshape, PCB_PSTKCOMP_OLD_OCTAGON), PCB_OBJ_PIN, &ic, 1)); } else if (pcb_pstk_export_compat_pad(ps, &x1, &y1, &x2, &y2, &thickness, &clearance, &mask, &square, &nopaste)) { unsigned long fl = (square ? PCB_FLAG_SQUARE : 0) | (nopaste ? PCB_FLAG_NOPASTE : 0) | (on_bot ? PCB_FLAG_ONSOLDER : 0); Index: trunk/src_plugins/lib_compat_help/pstk_compat.c =================================================================== --- trunk/src_plugins/lib_compat_help/pstk_compat.c (revision 30308) +++ trunk/src_plugins/lib_compat_help/pstk_compat.c (revision 30309) @@ -691,7 +691,7 @@ return pcb_true; } -pcb_flag_t pcb_pstk_compat_pinvia_flag(pcb_pstk_t *ps, pcb_pstk_compshape_t cshape) +pcb_flag_t pcb_pstk_compat_pinvia_flag(pcb_pstk_t *ps, pcb_pstk_compshape_t cshape, pcb_pstk_compat_t compat) { pcb_flag_t flg; int n; @@ -710,11 +710,17 @@ break; default: if ((cshape >= PCB_PSTK_COMPAT_SHAPED) && (cshape <= PCB_PSTK_COMPAT_SHAPED_END)) { - flg.f |= PCB_FLAG_SQUARE; cshape -= PCB_PSTK_COMPAT_SHAPED; if (cshape == 1) cshape = 17; - flg.q = cshape; + if ((cshape == 17) && (compat & PCB_PSTKCOMP_OLD_OCTAGON)) { + cshape = 0; + flg.f |= PCB_FLAG_OCTAGON; + } + else { + flg.q = cshape; + flg.f |= PCB_FLAG_SQUARE; + } } else pcb_io_incompat_save(ps->parent.data, (pcb_any_obj_t *)ps, "padstack-shape", "Failed to convert shape to old-style pin/via", "Old pin/via format is very much restricted; try to use a simpler shape (e.g. circle)"); Index: trunk/src_plugins/lib_compat_help/pstk_compat.h =================================================================== --- trunk/src_plugins/lib_compat_help/pstk_compat.h (revision 30308) +++ trunk/src_plugins/lib_compat_help/pstk_compat.h (revision 30309) @@ -26,9 +26,13 @@ /* Convert an existing padstack to old-style pad and return broken down parameters */ pcb_bool pcb_pstk_export_compat_pad(pcb_pstk_t *ps, pcb_coord_t *x1, pcb_coord_t *y1, pcb_coord_t *x2, pcb_coord_t *y2, pcb_coord_t *thickness, pcb_coord_t *clearance, pcb_coord_t *mask, pcb_bool *square, pcb_bool *nopaste); +typedef enum { + PCB_PSTKCOMP_OLD_OCTAGON = 1 +} pcb_pstk_compat_t; + /* Convert padstack flags to old pin/via flag. Use only in gEDA/PCB compatibility code: io_pcb and io_lihata. */ -pcb_flag_t pcb_pstk_compat_pinvia_flag(pcb_pstk_t *ps, pcb_pstk_compshape_t cshape); +pcb_flag_t pcb_pstk_compat_pinvia_flag(pcb_pstk_t *ps, pcb_pstk_compshape_t cshape, pcb_pstk_compat_t compat); #define PCB_PSTK_VIA_COMPAT_FLAGS (PCB_FLAG_CLEARLINE | PCB_FLAG_SELECTED | PCB_FLAG_FOUND | PCB_FLAG_WARN | PCB_FLAG_USETHERMAL | PCB_FLAG_LOCK)