/
umud/DOC/
umud/DOC/examples/
umud/DOC/internals/
umud/DOC/wizard/
umud/MISC/
umud/MISC/dbchk/
umud/RWHO/rwhod/
/*
	Copyright (C) 1991, Andrew Molitor. All rights reserved.
*/

/*
	Heavily chopped down variation on the loaddb theme for VMS
implementations.

*/
#include	"config.h"

#include	<stdio.h>

#include	"mud.h"

main(ac,av)
int	ac;
char	*av[];
{
	char	obuf[MAXOID];
	FILE	*in;
	Obj	*op;
	int	cnt = 0;
	int	vflg = 0;
#ifdef COMPRESS_OIF
	int	cin = 0;
	int	cout = 0;
#endif

	/* Simplified argument handling for now */

	if(ac < 3){
		exit(usage());
	}
	while(ac-- > 1){
		if(av[ac][0] != '-')
			continue;
		switch(av[ac][1]){
		case 'o':
			dddb_setfile(av[ac+1]);
			break;
		case 'i':
			in = fopen(av[ac+1],"r");
			if(in == (FILE *)0){
				printf("Could not open file %s for input.\n",
					av[ac+1]);
				exit(1);
			}
			break;
		case 'v':
			vflg = 1;
			break;
#ifdef COMPRESS_OIF
		case 'C':
			switch(av[ac][2]){
			case 'i':
				cin = 1;
				break;
			case 'o':
				cout = 1;
				break;
			default:
				exit(usage());
				break;
			}
			break;
#endif
		default:
			exit(usage());
			break;
		}
	}

	dddb_init();

	/* Loop across the flat OIF file. */

	while(1){
		tmp_sync();

#ifdef COMPRESS_OIF
		if(cin) comp_on(1); else comp_on(0);
#endif
		op = oiffromFILE(in,obuf);
		if(op == (Obj *)0)
			break;

		if(obuf[0] == '\0') {
			fprintf(stderr,"unnamed object in input\n");
			objfree(op);
			obuf[0] = '\0';
			continue;
		}

#ifdef COMPRESS_OIF
		if(cout) comp_on(1); else comp_on(0);
#endif
		if(dddb_put(op,obuf)) {
			fprintf(stderr,"cannot store object %s\n",obuf);
			objfree(op);
			obuf[0] = '\0';
			continue;
		} else {
		    cnt++;
		    if(vflg)
			fprintf(stderr,"<+ %s\n",obuf);
		    objfree(op);
		    obuf[0] = '\0';
		}
	}
	dddb_close();
	fclose(in);
	printf("Stored %d objects.\n",cnt);
}

usage()
{
	puts("loaddb -i <flat_oif_file> -o <output_db_name> [-Ci -Co -v]");
	return(1);
}