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 m

⟦6109f0495⟧ TextFile

    Length: 3417 (0xd59)
    Types: TextFile
    Names: »moniker.c«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/General/Cubes/moniker.c« 

TextFile

/*	vi:set sw=4 ts=4: */
#ifndef	lint
static char	sccsid[] = "@(#)moniker.c 5.1 (G.M. Paris) 89/01/22";
#endif	lint

/*
**
**	cubes 5.1  Copyright 1989 Gregory M. Paris
**		Permission granted to redistribute on a no charge basis.
**		All other rights are reserved.
**
*/

#include	<stdio.h>
#include	<syslog.h>
#include	<strings.h>
#include	"cubes.h"

#ifdef	lint
#ifndef	MONFILE
#define	MONFILE	"dummy-monfile"
#endif	MONFILE
#endif	lint

struct mon {
	char		m_name[NAMELEN];
	struct mon *m_next;
};

/*
**	seed: names to seed the moniker list
*/
static struct mon	seed[]	= {
	{ "Ronald Reagan",		seed+ 1 },
	{ "Nancy Reagan",		seed+ 2 },
	{ "George Bush",		seed+ 3 },
	{ "Barbara Bush",		seed+ 4 },
	{ "Mikhail Gorbachev",	seed+ 5 },
	{ "Raisa Gorbachev",	seed+ 6 },
	{ "Benny Hill",			seed+ 7 },
	{ "Margaret Thatcher", 	seed+ 8 },
	{ "Piotr Chekov", 		seed+ 9 },
	{ "Jamie Finney", 		seed+10 },
	{ "Touche Turtle", 		seed+11 },
	{ "Judy Jetson", 		seed+12 },
	{ "Cobb Anderson", 		seed+13 },
	{ "Della Taze", 		seed+14 },
	{ "Mickey Mouse", 		seed+15 },
	{ "Minnie Mouse", 		seed+16 },
	{ "Edison Carter", 		seed+17 },
	{ "Theora Jones",		0 },
};

static int			seedcnt	= sizeof seed / sizeof seed[0];
static struct mon  *monlist	= 0;
static int			moncnt	= 0;

extern char		   *malloc();
extern char		   *fgets();
extern computer	   *compbyname();

/*
**	savename: add a name to the moniker list and save the new list
*/
savename(name)
char   *name;
{
	register struct mon	   *m;
	FILE				   *fp;

	if(monlist == 0)
		readmonfile();

	if(strlen(name) < 5)		/* small names are boring */
		return;
	if(compbyname(name) != 0)	/* don't save computer names */
		return;
	
	/*
	**	Check for duplicate while finding the end of the list.
	*/
	for(m = monlist;;m = m->m_next) {
		if(strncmp(name, m->m_name, NAMELEN) == 0)
			return;
		if(m->m_next == 0)
			break;
	}

	/*
	**	Add the new name to the end of the list.
	*/
	if((m->m_next = (struct mon *)malloc(sizeof *m)) == 0) {
		syslog(LOG_WARNING, "savename: out of memory");
		return;
	}
	m = m->m_next;
	m->m_next = 0;
	strncpy(m->m_name, name, NAMELEN);
	m->m_name[NAMELEN-1] = '\0';
	++moncnt;

	/*
	**	Append the new name to the monikers file.
	*/
	(void) umask(022);
	if((fp = fopen(MONFILE, "a")) == 0) {
		syslog(LOG_WARNING, "savename: fopen(%s,a): %m", MONFILE);
		return;
	}
	fprintf(fp, "%s\n", m->m_name);
	(void) fclose(fp);
}

/*
**	moniker: randomly select a name from the moniker list
*/
char *
moniker()
{
	register struct mon	   *m;
	register int			n;

	if(monlist == 0)
		readmonfile();

	n = randint(moncnt) - 1;
	for(m = monlist;n > 0 && m->m_next != 0;--n, m = m->m_next)
		;
	
	return m->m_name;
}

/*
**	readmonfile: seed the monikers list then read in the monikers file
*/
readmonfile()
{
	register struct mon	   *m;
	register FILE		   *fp;
	char				   *s, line[2*NAMELEN];

	monlist = &seed[0];
	moncnt = seedcnt;

	if((fp = fopen(MONFILE, "r")) == 0) {
		syslog(LOG_WARNING, "readmonfile: fopen(%s,r): %m", MONFILE);
		return;
	}

	for(m = monlist;m->m_next != 0;++m)
		;

	while(fgets(line, sizeof line, fp) != 0) {
		if(*(s = &line[strlen(line)-1]) == '\n')
			*s = '\0';
		if((m->m_next = (struct mon *)malloc(sizeof *m)) == 0) {
			syslog(LOG_WARNING, "readmonfile: out of memory");
			return;
		}
		m = m->m_next;
		m->m_next = 0;
		strncpy(m->m_name, line, NAMELEN);
		m->m_name[NAMELEN-1] = '\0';
		++moncnt;
	}

	(void) fclose(fp);
}