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 a

⟦40a603834⟧ TextFile

    Length: 2147 (0x863)
    Types: TextFile
    Names: »abbrev.c«

Derivation

└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0
    └─⟦dc59850a2⟧ »EurOpenD22/pp5.0/pp-5.tar.Z« 
        └─⟦e5a54fb17⟧ 
            └─⟦this⟧ »pp-5.0/Tools/tables/abbrev/abbrev.c« 

TextFile

/* abbrev.c: abbreviates domains */

# ifndef lint
static char Rcsid[] = "@(#)$Header: /cs/research/pp/hubris/pp-beta/Tools/tables/abbrev/RCS/abbrev.c,v 5.0 90/09/20 16:31:50 pp Exp Locker: pp $";
# endif

/*
 * $Header: /cs/research/pp/hubris/pp-beta/Tools/tables/abbrev/RCS/abbrev.c,v 5.0 90/09/20 16:31:50 pp Exp Locker: pp $
 *
 * $Log:	abbrev.c,v $
 * Revision 5.0  90/09/20  16:31:50  pp
 * rcsforce : 5.0 public release
 * 
 */



#include	<stdio.h>

extern char	*strdup ();
static int	LineCount;
static char	*myname;
static char	*aliases[100];
static int	maxalias = 0;
static int	bitmap;

static void do_alias ();
/* ---------------------  Begin	 Routines  -------------------------------- */


main (ac,av)
int	ac;
char	*av [];
{
	char		buffer [BUFSIZ];
	register char	*alias, *name;
	register int	i;

	myname = av [0];
	if (ac < 2) {
		fprintf (stderr, "Usage: %s Domain...\n", myname);
		exit (1);
	}


	for (i = 1; i < ac; i++) {
		(void) sprintf (buffer, "X.%s", av[i]);
		aliases[maxalias++] = strdup (buffer);
	}
	LineCount = 0;

	while (fgets (buffer, sizeof buffer, stdin) != NULL) {
		LineCount++;
		alias = &buffer [0];
		printf ("%s", alias);
		if (*alias == '#' || *alias == '\n')
			continue;

		alias [strlen (alias) - 1] = '\0';
		for (name = alias; *name != '\00'; name++)
			if (*name == ':' || *name == '#')
				break;
		if (*name == '#')
			continue;

		if (*name == '\0') {
			fprintf (stderr, "%s: Syntax Error [%s] ",
				myname, alias);
			fprintf (stderr, "at line %d - Ignored\n", LineCount);
			continue;
		}
		*name++ = '\0';
		bitmap = 0;
		for (i = 0; i < maxalias; i++)
			do_alias (alias, name, aliases[i]);
	}
	exit (0);
}



/* ---------------------  Static  Routines  ------------------------------- */



static void do_alias (alias, name, domain)
register char	*alias, *name, *domain;
{
	register char	*a, *d;
	int dn = -1;

	a = &alias [strlen (alias) - 1];
	d = &domain [strlen (domain) - 1];
	for (; a != alias && *a == *d; a--, d--)
		if (*a == '.') {
			dn ++;
			if (bitmap & (1 << dn))
				continue;
			bitmap |= (1 << dn);
			*a = '\00';
			printf ("%s:%s\n", alias, name);
			*a = '.';
		}
}