#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <direct.h>
#include "sftlib.h"

#define PROTO
#define SOFTDATA "sftlib.dat"
#define INDEX    "sftlib.ind"

void  fprintuse( FILE *fp, char *fpath);
int   data2ind( soft *x, index *y);

int main( int argc, char *argv[])
{
	FILE  *fpr, *fpw;
	soft   data;  
	index  ind;
    char  *iname, *oname;
    int    num, ret, i;

	iname=SOFTDATA;
	oname=INDEX;
	if( argc==1 ) { fprintuse(stderr, argv[0]);}
	for( i=1; i< argc; i++ ) {
		if( strcmp( argv[i],"-help" ) ==0 ) { fprintuse(stderr, argv[0]);} 
		if( strcmp( argv[i],"-i" ) ==0 ) { i++;iname=argv[i];} 
		if( strcmp( argv[i],"-o" ) ==0 ) { i++;oname=argv[i];} 
		else {
			fprintuse(stderr, argv[0]);
			fprintf( stderr, "undefined option %s\n", argv[i]);
		}
	}

	fpw=fopen( oname ,"wb");
	if( fpw==NULL) {
		fprintf(stderr, "%s open error!!\n", oname);
		return 1;
	}

	fpr=fopen( iname ,"rb");
	if( fpr==NULL) {
		fprintf(stderr, "%s open error!!\n", iname);
		fclose(fpw);
		return 1;
	}

	num=0;
    while( fread( &data, sizeof(soft), 1, fpr )==1 )
    {
		data2ind( &data , &ind );
		ind.softno=num;
		ret=fwrite( &ind, sizeof(index), 1, fpw );
		if( ret!=1 ) { 
			fprintf(stderr, "fwrite error!! ret=%d\n",ret);
			fclose( fpr );
			fclose( fpw );
			return 2;	
		}
		num++;
    }

	fclose (fpr);
	fclose (fpw);

	fprintf( stderr, "Data created in %s.\n", oname); 
	fprintf( stderr, "One recorde size=%d Total size=%d\n", 
		sizeof(index), sizeof(index)*num);

    return 0;
}


void  fprintuse( FILE *fp, char *fpath)
{
	char drv[_MAX_DRIVE],dir[_MAX_DIR],fname[_MAX_FNAME],ext[_MAX_EXT];
	_splitpath(fpath, drv, dir, fname, ext);
	fprintf( fp, "usage: %s%s [-help] -o OUTFNAME -i INFILE\n", fname, ext);
	fprintf( fp, "       -help ヘルプの表示\n");
	fprintf( fp, "       OUTFNAME: 出力するファイル名\n");
	fprintf( fp, "       INFNAME:  入力するファイル名\n");
	exit(-1);
}

