view ueda/uschem-netlist/nlcomp.c @ 19:1d4c693b8f35

unet-bind: sverp netlist reading implemented
author Space Falcon <falcon@ivan.Harhan.ORG>
date Sun, 02 Aug 2015 03:09:15 +0000
parents cd92449fdb51
children
line wrap: on
line source

#include <sys/types.h>
#include <stdio.h>
#include "../libueda/mcl.h"
#include "netlist.h"

extern char *malloc();

extern struct component components[];
extern int ncomponents;

extern char *get_comp_attr();

struct nlcomp *netlist_comps;

alloc_nlcomp_array()
{
	register int i;

	netlist_comps = (struct nlcomp *)
				malloc(sizeof(struct nlcomp) * ncomponents);
	if (!netlist_comps) {
		perror("malloc");
		exit(1);
	}
	bzero(netlist_comps, sizeof(struct nlcomp) * ncomponents);
	for (i = 0; i < ncomponents; i++) {
		netlist_comps[i].mclcomp = components + i;
		fill_nlcomp(netlist_comps + i);
	}
}

fill_nlcomp(nlc)
	register struct nlcomp *nlc;
{
	char *npins_attr;
	register int n;
	register struct pinconn **pintab;

	npins_attr = get_comp_attr(nlc->mclcomp, "npins");
	if (!npins_attr)
		return;
	n = atoi(npins_attr);
	if (n <= 0) {
		fprintf(stderr, "%s: invalid npins attribute\n",
			nlc->mclcomp->name);
		exit(1);
	}
	nlc->npins = n;
	pintab = (struct pinconn **) malloc(sizeof(struct pinconn *) * n);
	if (!pintab) {
		perror("malloc");
		exit(1);
	}
	bzero(pintab, sizeof(struct pinconn *) * n);
	nlc->pintab = pintab;
}

struct nlcomp *
mclcomp_to_nlcomp(comp)
	struct component *comp;
{
	return(netlist_comps + (comp - components));
}