gr_t *load(FILE *f) { int lineno; int nets[2][MAXNODES]; /* nodes in nets */ int neut[MAXNODES]; /* neutral nodes */ int nn_net[2]; /* number of nodes in nets */ int nn_neut; /* number of nodes in nets */ int nodes_fin; /* 1 after reading the first conn line */ gr_t *g = NULL; /* peek at next char and return if it is a newline */ #define return_at_eol \ do { \ char c; \ c = fgetc(f); \ if ((c == '\r') || (c == '\n')) \ return; \ ungetc(c, f); \ } while(0) /* eat up space and tabs */ void eat_space(void) { int c; do { c = fgetc(f); } while(isspc(c)); ungetc(c, f); }
str parseargs::getarg () { skiplwsp (); if (p >= lim || *p == '\n') return NULL; bool q = false; vec<char> arg; for (;;) { if (*p == '\\') { if (p + 1 >= lim) { error ("invalid '\\' before end of file"); return NULL; } else if (p[1] == '\n') skiplwsp (); else { arg.push_back (p[1]); p += 2; } continue; } if (p >= lim) { if (q) error ("closing '\"' missing"); return str (arg.base (), arg.size ()); } if (*p == '\"') q = !q; else if (q || !isspc (*p)) arg.push_back (*p); else return str (arg.base (), arg.size ()); p++; } return NULL; // XXX - egcs bug }
/* ... */ int atoi(const char *s, int bs) { register int sg, n; /* skip spaces */ for (; isspc(*s); s++) ; /* get sign */ switch (*s) { case '-': sg = -1; s++; break; case '+': s++; default: sg = 1; } /* calc val */ for (n = 0; isdig(*s); s++) n = n * bs + *s - '0'; return n * sg; }