/***************************************************************
* romdir.c, based over Alex Lau (http://alexlau.8k.com) RomDir *
****************************************************************/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/stat.h>

#define MAXFILES 200
#define DIRENTRY_SIZE 16
#define BUFFSIZE 16384

struct __attribute__ ((__packed__)) romdir {
	/*following variable must place in designed order*/
	char fileName[10];
	unsigned short extInfoSize;
	unsigned long fileSize;
} rd;

int main(int argc, char *argv[]) {
	struct stat buf;
	FILE *romdir;
	FILE *extinfo;
	int i, j;

	printf("fps2bios romdir generator\n");
	if (argc < 2){
		printf("usage: %s infile1 [infile2...]\n", argv[0]);
		return 1;
	}

	romdir = fopen("ROMDIR", "wb");
	if (romdir == NULL) {
		printf("failed to create ROMDIR\n");
		return 1;
	}

	extinfo = fopen("EXTINFO", "wb");
	if (extinfo == NULL) {
		printf("failed to create EXTINFO\n");
		return 1;
	}

	for (i=1; i<argc; i++) {
		memset(&rd, 0, sizeof(rd));
		if (strcmp(argv[i], "ROMDIR") == 0) {
			strncpy(rd.fileName, argv[i], 9);
			rd.extInfoSize = 0;
			rd.fileSize = (argc-1)*16+16;
			fwrite(&rd, 1, 16, romdir);
			continue;
		}
		if (stat(argv[i], &buf) == -1) {
			printf("warning: %s file is missing\n", argv[i]);
			continue;
		}
		for (j=0; j<9; j++) {
			if (argv[i][j] == ',' || argv[i][j] == 0) break;
			rd.fileName[j] = argv[i][j];
		}
		memset(rd.fileName+j, 0, 10-j);
		rd.fileSize = buf.st_size;

		if (argv[i][j] == ',') {
//			for (j=0; j<256; j++) {
//			}
//			rd.extInfoSize+= j;
		} else { // no extInfo
			rd.extInfoSize = 0;
		}

		fwrite(&rd, 1, 16, romdir);
	}
	memset(&rd, 0, sizeof(rd));
	fwrite(&rd, 1, 16, romdir);

	fclose(romdir);
	fclose(extinfo);

	return 0;
}