|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T p
Length: 2390 (0x956) Types: TextFile Names: »parse_hdr.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0 └─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z« └─⟦e5a54fb17⟧ └─⟦this⟧ »pp-5.0/Chans/822-local/parse_hdr.c«
/* parse_hdr: attempt to parse a header file */ # ifndef lint static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Chans/822-local/RCS/parse_hdr.c,v 5.0 90/09/20 15:45:02 pp Exp Locker: pp $"; # endif /* * $Header: /cs/research/pp/hubris/pp-beta/Chans/822-local/RCS/parse_hdr.c,v 5.0 90/09/20 15:45:02 pp Exp Locker: pp $ * * $Log: parse_hdr.c,v $ * Revision 5.0 90/09/20 15:45:02 pp * rcsforce : 5.0 public release * */ #include "util.h" #include "expand.h" #include "loc.h" extern void compress(); parse_hdr (fd, vars, maxvp) int fd; Expand vars[]; int maxvp; { FILE *fp; Symbol *sp; char *name, *contents; int vp = 0; PP_TRACE (("parse_hdr (%d, vars, %d)", fd, maxvp)); fp = fdopen (dup(fd), "r"); while (hdr_read (fp, &name, &contents) == OK) { if ((sp = lookup (name)) != NULL && sp -> type == field) { if (vp >= maxvp) adios (NULLCP, "More than %s variables!", maxvp); if (contents == NULLCP) contents = ""; if (sp -> str && *sp -> str) { char *cp; int i; cp = smalloc (strlen (sp -> str) + strlen (contents) + 2); strcpy (cp, sp -> str); strcat (cp, " "); strcat (cp, contents); free (sp -> str); sp -> str = cp; for (i = 0; i < vp; i++) if (lexequ (vars[i].macro, name) == 0) { vars[i].expansion = sp -> str; break; } if (i >= vp) { vars[vp].macro = strdup (name); vars[vp++].expansion = sp -> str; } } else { sp -> str = strdup (contents); vars[vp].macro = strdup (name); vars[vp++].expansion = sp -> str; } } } fclose (fp); return vp; } hdr_read (fp, np, cp) FILE *fp; char **np, **cp; { int c; char buf[8192], *p; PP_TRACE (("hdr_read (fp, np, cp)")); *cp = NULLCP; *np = buf; for (p = buf; (c = getc (fp)) != EOF;) { if (c == '\n') { if ((c = getc(fp)) == ' ' || c == '\t') continue; else { ungetc (c, fp); break; } } else if (c == ':' && *cp == NULLCP) { *cp = p + 1; *p++ = '\0'; continue; } *p++ = c; } if (c == EOF && p == buf) return DONE; else if (p == buf) return DONE; *p = 0; compress (buf, buf); compress (*cp, *cp); for (p = *np; *p; p++) if (isupper(*p)) *p = tolower (*p); for (p = *cp; *p; p++) if (isupper (*p)) *p = tolower (*p); PP_TRACE (("hdr_read field=%s contents=%s", *np, *cp)); return OK; }