DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T o

⟦f8b222b87⟧ TextFile

    Length: 1916 (0x77c)
    Types: TextFile
    Names: »or_basic.c«

Derivation

└─⟦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« 

TextFile

/* 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);
}