|
|
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 o
Length: 1916 (0x77c)
Types: TextFile
Names: »or_basic.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
└─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z«
└─⟦e5a54fb17⟧
└─⟦this⟧ »pp-5.0/Lib/or/or_basic.c«
/* or_basic.c: basic low level or structure manipulation */
# ifndef lint
static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Lib/or/RCS/or_basic.c,v 5.0 90/09/20 16:07:48 pp Exp Locker: pp $";
# endif
/*
* $Header: /cs/research/pp/hubris/pp-beta/Lib/or/RCS/or_basic.c,v 5.0 90/09/20 16:07:48 pp Exp Locker: pp $
*
* $Log: or_basic.c,v $
* Revision 5.0 90/09/20 16:07:48 pp
* rcsforce : 5.0 public release
*
*/
#include "or.h"
#include "util.h"
static void fixup_space(str, dest)
char *str;
char *dest;
{
int seen_space = TRUE;
char *sp, *dp;
for (sp = str, dp = dest; *sp; sp++) {
if (*sp == ' ') {
if (seen_space == FALSE)
seen_space = TRUE;
else
continue;
} else
seen_space = FALSE;
*dp++ = *sp;
}
if (dp > dest && dp[-1] == ' ')
dp --;
if (dp == dest)
(void) strcpy (dest, " ");
else
*dp = NULL;
}
OR_ptr or_new (type, ddname, value)
int type;
char *ddname;
char *value;
{
OR_ptr or;
char buf[BUFSIZ];
PP_DBG (("or_util.c/or_new ('%d', '%s', '%s')",
type, ddname, value));
or = (OR_ptr) smalloc (sizeof (struct or_part));
if (or == NULLOR)
return NULLOR;
or -> or_type = type;
or -> or_encoding = or_type2charset (type);
or -> or_next = NULLOR;
or -> or_prev = NULLOR;
if (type != OR_DD ) {
or -> or_ddname = NULLCP;
fixup_space (value, buf);
or -> or_value = strdup (buf);
}
else {
or -> or_ddname = strdup (ddname);
or -> or_value = strdup (value);
}
return (or);
}
OR_ptr or_dup (or)
OR_ptr or;
{
return (or_new (or -> or_type, or -> or_ddname, or -> or_value));
}
void or_free (tree)
OR_ptr tree;
{
if (tree == NULLOR)
return;
if (tree -> or_next)
or_free (tree -> or_next);
if (tree -> or_value)
free (tree -> or_value);
if (tree -> or_ddname)
free (tree -> or_ddname);
free ((char *)tree);
}