/*
 * Automatic page selection : AutoPage.c
 *
 * Kim, Jinsuk
 * jskim@bioinfo.kordic.re.kr
 */

#include <stdio.h>
#include <stdlib.h>

#define HAN "h_index.html"	/* Hangul Page */
#define ENG "e_index.html"	/* English Page */
#define KR_DOMAIN "/usr/www/DOCS/domains.kr"	/* kr domain data */
#define ACC_NUM_FILE "acc_counter.dat"
#define YES 1
#define NO 0

void loadbody(char *body)
{
	FILE *fp;
	char buf[255];

	if ( (fp = fopen(body, "r")) == NULL ) {
		printf("File open error\n");
		exit(1);
	}
 
	while( fgets(buf, 255, fp) )
		printf("%s", buf);

	fclose(fp);
}

main()
{
	int j, tmp[6];
	long int i, n;
	int kr_domain=NO, use_han=NO;
	char buf[80], rev_host[80];
	char *host, *hostip, *agent, *query;
	FILE *fp;

	printf("Content-type: text/html%c%c",10,10);

	host = getenv("REMOTE_HOST");
	hostip = getenv("REMOTE_ADDR");
	agent = getenv("HTTP_USER_AGENT");
	query = getenv("QUERY_STRING");

	/* Reverse host name */
	for (i=strlen(host), j=0; i > 0; i--, j++)
		buf[j] = host[i-1];

	if ( (!strncmp(buf, "ten.irun.", 9) || !strncmp(buf, "rk.", 3)) )
		kr_domain = YES;
	else if ( !strcmp(host, hostip) ){	/* if name resolving failed */
		if ( (fp = fopen(KR_DOMAIN, "r")) == NULL ) {
			printf("File open error");
			exit(1);
		}
		while (fgets(buf, 80, fp)) {
			if ( !strncmp(buf, hostip, strlen(buf)-1) ){
				kr_domain = YES;
				break;
			}
		}
		fclose(fp);
	}
	else kr_domain = NO;

 	if ( strstr(agent, "Window") || strstr(agent, "Win95") || strstr(agent, "Mozilla/2.0") )
		use_han = YES;

	if (strlen(query) > 0) {
		if (strstr(query, "English"))
			loadbody(ENG);
		else if (strstr(query, "Korean"))
			loadbody(HAN);
	}
	else if (kr_domain && use_han) {
		loadbody(HAN);
	}
	else {
		loadbody(ENG);
	}

	if((fp=fopen(ACC_NUM_FILE, "r"))==NULL){
                printf("<I>OOPS! Counter File Open Error</I>");
                exit(1);
        }
	fscanf(fp,"%d",&n);
	fclose(fp);

	if((fp=fopen(ACC_NUM_FILE, "w"))==NULL){
                printf("<I>OOPS! Counter File Open Error</I>");
                exit(1);
        }
	fprintf(fp,"%d\n",n+1);
	fclose(fp);

	for (i=0; i<6; i++) {
		tmp[i] = n%10;
		n = (long) n/10;
	}
	for (i=5; i >= 0; i--) {
		switch ( tmp[i]) {
			case 0:
				printf("<IMG SRC=\"/digitdir/zero.gif\">");
				break;
			case 1:
				printf("<IMG SRC=\"/digitdir/one.gif\">");
				break;
			case 2:
				printf("<IMG SRC=\"/digitdir/two.gif\">");
				break;
			case 3:
				printf("<IMG SRC=\"/digitdir/three.gif\">");
				break;
			case 4:
				printf("<IMG SRC=\"/digitdir/four.gif\">");
				break;
			case 5:
				printf("<IMG SRC=\"/digitdir/five.gif\">");
				break;
			case 6:
				printf("<IMG SRC=\"/digitdir/six.gif\">");
				break;
			case 7:
				printf("<IMG SRC=\"/digitdir/seven.gif\">");
				break;
			case 8:
				printf("<IMG SRC=\"/digitdir/eight.gif\">");
				break;
			case 9:
				printf("<IMG SRC=\"/digitdir/nine.gif\">");
				break;
			default:
				break;
		}
	}

	exit(0);
}

