From 511389ad10d1c9ff0b2be9a46c961e06687f20fa Mon Sep 17 00:00:00 2001 From: rlar Date: Fri, 31 Mar 2017 19:04:41 +0200 Subject: [PATCH] inpcom.c, introduce find_back_assignment() --- src/frontend/inpcom.c | 21 +++++++++++++++++++++ src/include/ngspice/fteext.h | 2 ++ 2 files changed, 23 insertions(+) diff --git a/src/frontend/inpcom.c b/src/frontend/inpcom.c index 3f5c2c2b1..78a988d23 100644 --- a/src/frontend/inpcom.c +++ b/src/frontend/inpcom.c @@ -436,6 +436,27 @@ find_assignment(const char *str) } +/* + * backward search for an assignment + * fixme, doesn't honour neither " nor ' quotes + */ + +char * +find_back_assignment(const char *p, const char *start) +{ + while (--p >= start) { + if (*p != '=') + continue; + // check for '!=', '<=', '>=', '==' + if (p <= start || !strchr("!<=>", p[-1])) + return (char *) p; + p--; + } + + return NULL; +} + + /*------------------------------------------------------------------------- Read the entire input file and return a pointer to the first line of the linked list of 'card' records in data. The pointer is stored in diff --git a/src/include/ngspice/fteext.h b/src/include/ngspice/fteext.h index 828c3c231..92d111f1b 100644 --- a/src/include/ngspice/fteext.h +++ b/src/include/ngspice/fteext.h @@ -216,6 +216,8 @@ extern struct line *inp_readall(FILE *fp, char *dir_name, bool comfile, bool int extern FILE *inp_pathopen(char *name, char *mode); extern char *search_identifier(char *str, const char *identifier, char *str_begin); extern char *find_assignment(const char *s); +extern char *find_back_assignment(const char *s, const char *start); + extern struct line *line_nconc(struct line *head, struct line *rest); extern struct line *line_reverse(struct line *head);