Index: trunk/src/libcschem/attrib.c =================================================================== --- trunk/src/libcschem/attrib.c (revision 3971) +++ trunk/src/libcschem/attrib.c (revision 3972) @@ -837,6 +837,26 @@ } +void csch_attrib_plugin_source_c(csch_source_arg_t *dst, const char *filename, long line, long col, const char *desc) +{ + gds_t tmp = {0}; + + dst->type[0] = 'c'; + dst->type[1] = '\0'; + + if (filename == NULL) filename = "-"; + if (desc == NULL) desc = ""; + + if ((line > 0) && (col > 0)) + dst->source = rnd_strdup_printf("%s,%ld,%ld", filename, line, col); + else if (line > 0) + dst->source = rnd_strdup_printf("%s,%ld", filename, line); + else + dst->source = rnd_strdup(filename); + + dst->desc = rnd_strdup(desc); +} + void csch_attrib_plugin_source_ac(csch_source_arg_t *dst, csch_chdr_t *cobj, const char *attr_name, const char *desc) { gds_t tmp = {0}; Index: trunk/src/libcschem/attrib.h =================================================================== --- trunk/src/libcschem/attrib.h (revision 3971) +++ trunk/src/libcschem/attrib.h (revision 3972) @@ -69,6 +69,7 @@ /* Create source info in dst for different source addressing schemes, as specified in {des4:19} */ +void csch_attrib_plugin_source_c(csch_source_arg_t *dst, const char *filename, long line, long col, const char *desc); void csch_attrib_plugin_source_ac(csch_source_arg_t *dst, csch_chdr_t *cobj, const char *attr_name, const char *desc); void csch_attrib_plugin_source_pa(csch_source_arg_t *dst, csch_ahdr_t *aobj, const char *attr_name, const char *plugin_name, const char *desc); void csch_attrib_plugin_source_p(csch_source_arg_t *dst, const char *plugin_name, const char *desc); Index: trunk/src/libcschem/util_grp.c =================================================================== --- trunk/src/libcschem/util_grp.c (revision 3971) +++ trunk/src/libcschem/util_grp.c (revision 3972) @@ -182,8 +182,10 @@ void csch_auto_attr_create(csch_sheet_t *sheet, csch_cgrp_t *grp, const char *key, const char *val, const char *stroke, const char *atempl) { - static const csch_source_arg_t src = {"c", "n/a", ""}; + static const csch_source_arg_t src; + csch_attrib_plugin_source_c(&src, NULL, 0, 0, NULL); + csch_cobj_attrib_set(sheet, grp, CSCH_ATP_USER_DEFAULT, key, val, src); if (stroke != NULL) csch_auto_attr_place(sheet, grp, key, stroke, atempl); Index: trunk/src/libcschem/util_wirenet.c =================================================================== --- trunk/src/libcschem/util_wirenet.c (revision 3971) +++ trunk/src/libcschem/util_wirenet.c (revision 3972) @@ -98,9 +98,11 @@ csch_cgrp_t *csch_wirenet_new(csch_sheet_t *sheet) { - static const csch_source_arg_t src = {"c", "unsaved", "manual_draw_wirenet"}; + static const csch_source_arg_t src; csch_cgrp_t *grp = (csch_cgrp_t *)csch_op_create(sheet, &sheet->direct, CSCH_CTYPE_GRP); + csch_attrib_plugin_source_c(&src, NULL, 0, 0, "manual_draw_wirenet"); + if (grp == NULL) { rnd_message(RND_MSG_ERROR, "Internal error: failed to create direct group for wirenet\n"); return NULL;