|
|
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;
}