view ueda/libuschem/pinref.c @ 139:bf188727e606

donl-rename-parts reader: no tEDAx-style escapes
author Mychaela Falconia <falcon@freecalypso.org>
date Mon, 07 Sep 2020 04:25:11 +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);
}