/* :ts=4
 * mkdbm - rebuild dbm file for a history file
 *
 *	$Log:	mkdbm.c,v $
 * Revision 1.4  90/12/25  15:52:52  crash
 * as of 12-15-90 patches
 * 
 * Revision 1.3  90/05/30  23:44:42  crash
 * updated to CNews patchlevel 25May90
 * 
 */

#ifndef lint
static char RCSid[] =
	"$Id: mkdbm.c,v 1.4 90/12/25 15:52:52 crash Exp Locker: crash $";
#endif /* lint */

#include <stdio.h>
#include <string.h>
#include "alloc.h"
#include "fgetmfs.h"
#include "dbz.h"

char *progname = "mkdbm";

main(argc, argv)
int argc;
char *argv[];
{
	register char *scan;
	long place;
	datum lhs;
	datum rhs;
	register char *line;
	FILE *f;
	extern FILE *efopen();

	if (argc < 2) {
		fprintf(stderr, "Usage: mkdbm historyfile\n");
		return( 15 );
	}
	f = efopen(argv[1], "r");
	(void) close(creat(str3save(argv[1], ".", "dir"), 0666));
	(void) close(creat(str3save(argv[1], ".", "pag"), 0666));
	(void) dbzincore(1);
	if (dbminit(argv[1]) < 0)
		error("unable to do dbminit(`%s')", argv[1]);

	for (;;) {
		place = ftell(f);
		line = fgetms(f);
		if (line == NULL)
			break;

		scan = strchr(line, '\t');
		if (scan == NULL || line[strlen(line)-1] != '\n') {
			fprintf(stderr, "bad format: `%.60s'\n", line);
			return( 20 );
		}
		*scan = '\0';

		lhs.dptr = line;
		lhs.dsize = strlen(line) + 1;
		rhs.dptr = (char *)&place;
		rhs.dsize = sizeof place;
		if (dbzstore(lhs, rhs) < 0)
			fprintf(stderr, "dbm failure `%.50s' @ %ld\n", line, place);
		free(line);
	}
	dbmclose();
	return(0);
}

/*
 - unprivileged - needed due to library interdependencies
 */
/* ARGSUSED */
void
unprivileged(reason)
char *reason;
{
}
