view ueda/libuschem/pinref.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

/*
 * pin name reference parsing
 */

#include <sys/types.h>
#include <stdio.h>
#include <ctype.h>
#include "schemstruct.h"

extern struct schemobj *find_component_instance();

parse_pin_nameref(schem, lineno, nameref, compp, soughtpin, bynum)
	struct schem *schem;
	int lineno;
	char *nameref;
	struct schemobj **compp;
	char **soughtpin;
	int *bynum;
{
	register char *cp;
	char chsave;
	register struct schemobj *comp;

	cp = nameref;
	if (!isalnum(*cp)) {
inv:		fprintf(stderr,
		"%s: line %d: \"%s\" is not a valid pin name reference\n",
			schem->orig_filename, lineno, nameref);
		return(-1);
	}
	while (isalnum(*cp))
		cp++;
	chsave = *cp;
	switch (*cp) {
	case '.':
		*bynum = 0;
		break;
	case '-':
		*bynum = 1;
		break;
	default:
		goto inv;
	}
	*cp = '\0';
	comp = find_component_instance(schem, nameref);
	if (!comp)
		fprintf(stderr,
			"%s: line %d: component instance %s not found\n",
			schem->orig_filename, lineno, nameref);
	*cp++ = chsave;
	*compp = comp;
	if (!isgraph(*cp))
		goto inv;
	*soughtpin = cp;
	return(comp ? 0 : -1);
}