/************************************************************************/
/*	inquir_cvt.c							*/
/*	Routines to convert to and from inquir binary database to	*/
/*	ascii.  Mainline is in cvt.c.					*/
/************************************************************************/

#include <stdio.h>
#include <dbm.h>
#include "inquir.h"

outdatum( item )	datum item;
    {
    printf( "%d\n", item.dsize );
    fwrite( item.dptr, item.dsize, 1, stdout );
    }

datum indatum( buf )	char *buf;
    {
    datum res;
    if( gets( buf ) == NULL )
	{
	res.dsize = -1;
	res.dptr = NULL;
	}
    else
	{
	res.dsize = atoi(buf);
	res.dptr = buf;
	if( res.dsize > 0 ) fread( res.dptr, res.dsize, 1, stdin );
	/* fprintf(stderr,"Read a datum of size %d.\n",res.dsize); */
	}
    return res;
    }

makeascii( dbname )	char *dbname;
    {
    datum key, data;

    if( dbname == NULL ) dbname = Inquirdata;

    if( dbminit( dbname ) < 0 )
	{
	perror( dbname );
	return -1;
	}
    for( key=firstkey(); key.dptr; key=nextkey(key) )
	{	
	outdatum( key );
	data = fetch(key);
	if( data.dptr == NULL )
	    {
	    perror("fetch");
	    exit(1);
	    }
	outdatum( data );
	}
    dbmclose();
    return 0;
    }

makedb( dbname )	char *dbname;
    {
    datum key, data;
    char keybuf[10240], databuf[10240];

    if( dbname == NULL ) dbname = Inquirdata;

    if( dbminit( dbname ) < 0 )
	{
	perror( dbname );
	return -1;
	}
    for( key=indatum(keybuf); key.dptr; key=indatum(keybuf) )
	{
	data=indatum(databuf);
	store( key, data );
	}
    dbmclose();
    return 0;
    }
