Index: abstract.c =================================================================== --- abstract.c (revision 700) +++ abstract.c (revision 701) @@ -79,7 +79,22 @@ return comp; } +csch_aport_t *csch_aport_get(csch_abstract_t *abs, csch_acomp_t *comp, const char *name, int alloc) +{ + csch_aport_t *port; + port = htsp_get(&comp->ports, name); + if ((port != NULL) || (!alloc)) + return port; + + port = calloc(sizeof(csch_acomp_t), 1); + csch_aobj_init(&port->hdr, CSCH_ATYPE_PORT); + comp->name = csch_strdup(name); + htsp_set(&comp->ports, port->name, port); + return port; +} + + static void dump_attr(const csch_attribs_t *attr, FILE *f, const char *prefix1, const char *prefix2) { htsp_entry_t *e; @@ -103,8 +118,17 @@ fprintf(f, "%sComponents:\n", prefix); for(e = htsp_first(&abs->comps); e != NULL; e = htsp_next(&abs->comps, e)) { + htsp_entry_t *pe; csch_acomp_t *comp = e->value; + fprintf(f, "%s %s\n", prefix, comp->name); + + fprintf(f, "%s Ports:\n", prefix); + for(pe = htsp_first(&comp->ports); pe != NULL; pe = htsp_next(&comp->ports, e)) { + csch_aport_t *port = e->value; + fprintf(f, "%s %s\n", prefix, port->name); + dump_attr(&port->hdr.attr, f, prefix, " "); + } dump_attr(&comp->hdr.attr, f, prefix, " "); } }