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