/*
 *	dpvn2scr - P/VNSスクリプト to
 *		   うたわれるものキャラクタコンバータスクリプト コンバータ
 *
 *	P/VNSスクリプトの「bg」「ld」コマンドで使われている画像ファイル名を抽出して、
 *	うたわれるものキャラクタコンバータの画像切出しスクリプトを生成します。
 *
 *	* Mon Jul 24 05:18:00 JST 2002 Naoyuki Sawa <nsawa@north.hokkai.net>
 *	- 作成開始。
 *	- まだ、標準入力->標準出力、の使い方しかサポートしていません。
 *	- 縮小率は「5」決めうちです。(640->128を想定)
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>

#define R		5		/* 縮小率 */
#define N		100		/* 最大アイテム数 */
#define DELIM		" ,\"\t\r\n"	/* 簡単のために、「,」と「"」もデリミタにしてしまいます */

char* egbg_a[N];	/* egbg.aから取り出すアイテムリスト */
int n_egbg_a;

char* char_a[N];	/* char.aから取り出すアイテムリスト */
int n_char_a;

int
main()
{
	int i, len;
	char str[1024], *p1, *p2;

	if(isatty(fileno(stdin))) {
		fprintf(stderr, "P/VNSスクリプト to UTOPスクリプト コンバータ\n");
		fprintf(stderr, "USAGE: dpvn2scr < P/VNSスクリプト.pvn > UTOPスクリプト.scr\n");
		exit(1);
	}

	/* 縮小率指定。 */
	printf("REDUCE %d\n", R);
	printf("\n");

	/* P/VNSスクリプトの全行を走査して... */
	while(gets(str) != NULL) {
		/* コメント以降を切り捨てます。 */
		p1 = strchr(str, ';');
		if(p1 != NULL) *p1 = '\0';

		/* この行の各トークンについて... */
		p1 = strtok(str, DELIM);
		while(p1 != NULL) {
			/* 「bg」または「ld」コマンド？ */
			if(strcmp(p1, "bg") == 0 || strcmp(p1, "ld") == 0) {
				/* 次のトークンが画像ファイル名？ */
				p2 = strtok(NULL, DELIM);
				if(p2 == NULL) break; /* もうトークンがない */
				len = strlen(p2);
				if(len < 1/*少なくとも1文字のfname*/ + 4/*.*/) continue; /* 〜.pgdじゃない */
				if(strcmp(&p2[len - 4], ".pgd") != 0) continue;          /* 〜.pgdじゃない */

				p2[len - 4] = '\0'; /* 拡張子切り捨て */
				if(strcmp(p1, "bg") == 0) {
					/* アイテム数がいっぱいでなく、新しく出現したアイテムなら、登録。 */
					if(n_egbg_a < N) {
						for(i = 0; i < n_egbg_a; i++) {
							if(strcmp(egbg_a[i], p2) == 0) break; /* もうある */
						}
						if(i == n_egbg_a) egbg_a[n_egbg_a++] = strdup(p2); /* 登録 */
					}
				} else { /* p1 = "ld" */
					/* アイテム数がいっぱいでなく、新しく出現したアイテムなら、登録。 */
					if(n_char_a < N) {
						for(i = 0; i < n_char_a; i++) {
							if(strcmp(char_a[i], p2) == 0) break; /* もうある */
						}
						if(i == n_char_a) char_a[n_char_a++] = strdup(p2); /* 登録 */
					}
				}
			}

			/* 次のトークンへ。 */
			p1 = strtok(NULL, DELIM);
		}
	}

	/* アイテムリスト出力。 */
	if(n_egbg_a != 0) {
		printf("ARCHIVE egbg\n");
		for(i = 0; i < n_egbg_a; i++) {
			printf("%s\n", egbg_a[i]);
		}
		printf("\n");
	}
	if(n_char_a != 0) {
		printf("ARCHIVE char\n");
		for(i = 0; i < n_char_a; i++) {
			printf("%s\n", char_a[i]);
		}
		printf("\n");
	}

	return 0;
}
