view ueda/libuschem/pinref.c @ 6:048d55d50ff3

ueda/README: describes this Linux port of ueda
author Space Falcon <falcon@ivan.Harhan.ORG>
date Mon, 20 Jul 2015 01:02:49 +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);
}