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

#define MAX_ENTRIES 10000

typedef struct {
    char *name;
    char *val;
} entry;

char *makeword(char *line, char stop);
char *fmakeword(FILE *f, char stop, int *len);
char x2c(char *what);
void unescape_url(char *url);
void plustospace(char *str);


main(int argc, char *argv[]) {
    entry entries[MAX_ENTRIES];
    register int x,m=0;
    int cl;
	FILE *temp ;
	static char cmd[256] ;
	static char name[256] ;
	static char submit[256] ;
	static char last[256] ;
	static char first[256] ;
	static char full[256] ;
	static char work[256] ;
	static char email[256] ; 
	static char remote_host[256] ;
	static char remote_addr[256] ;
	static char remote_user[256] ;

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

    if(strcmp(getenv("REQUEST_METHOD"),"POST")) {
        printf("This script should be referenced with a METHOD of POST.\n");
        printf("If you don't understand this, see this ");
        printf("<A HREF=\"http://www.ncsa.uiuc.edu/SDG/Software/Mosaic/Docs/fill-out-forms/overview.html\">forms overview</A>.%c",10);
        exit(1);
    }
    if(strcmp(getenv("CONTENT_TYPE"),"application/x-www-form-urlencoded")) {
        printf("This script can only be used to decode form results. \n");
        exit(1);
    }
    cl = atoi(getenv("CONTENT_LENGTH"));

    for(x=0;cl && (!feof(stdin));x++) {
        m=x;
        entries[x].val = fmakeword(stdin,'&',&cl);
        plustospace(entries[x].val);
        unescape_url(entries[x].val);
        entries[x].name = makeword(entries[x].val,'=');
    }

	printf("\n") ;
    printf("<P><HR>\n") ;
    printf("<H1>Comments Page</H1>\n");
    printf("<I>Thank you for your Commetns<I><P>\n") ; 
    printf("You submitted the following information:<p>%c",10);
    printf("<ul>%c",10);
	
	strcpy(submit,"tpecksh@p300.cpl.uiuc.edu") ;
	strcpy(first,"John") ;
	strcpy(last,"Doe") ;

    for(x=0; x <= m; x++)
    {
        printf("<li> <code><B>%s</B> = %s</code>%c",entries[x].name,
               entries[x].val,10);
        if (strcmp(entries[x].name,"Last")==0) strcpy(last,entries[x].val) ;
        if (strcmp(entries[x].name,"First")==0) strcpy(first,entries[x].val) ;
        if (strcmp(entries[x].name,"EMail")==0) strcpy(email,entries[x].val) ;
        if (strcmp(entries[x].name,"Submit")==0) strcpy(submit,entries[x].val) ;
    }

#ifdef NEVER
    if (strlen(last)==0)
	{
		printf("<HR>\n") ;
		printf("<H1>\n") ;
		printf("Bad Registration:  No name given...\n") ;
		printf("</H1>") ;
		printf("<HR>") ;
		exit(1) ;
	}
#endif

    sprintf(full,"%s, %s",last,first) ;
    
    printf("</ul>%c",10);
    printf("<HR>\n") ;

	/* mktemp() replaces the trailing XXXXXX (six Xs) with hash... */
	sprintf(name,"/tmp/%s.XXXXXX",last) ;
	mktemp(name) ;
	sprintf(cmd,"date > %s",name) ;
	system(cmd) ;
	temp = fopen(name,"a") ;
	fprintf(temp,"\n") ;
	fprintf(temp,"* * * Comments from %s * * *\n\n",full) ;
	fprintf(temp,"Please direct questions and replies to:  %s\n",submit) ;
	fprintf(temp,"Thank you for your interest in PLoP '95.\n\n") ; 

	for (x=0 ; x<=m ; x++)
	{
		fprintf(temp,"%s = %s\n",entries[x].name,
			entries[x].val) ;
	}

	fprintf(temp,"\n") ;
	fprintf(temp,"REMOTE_HOST = %s\n",getenv("REMOTE_HOST")) ;
	fprintf(temp,"REMOTE_ADDR = %s\n",getenv("REMOTE_ADDR")) ;
	fprintf(temp,"REMOTE_USER = %s\n",getenv("REMOTE_USER")) ;

	fclose(temp) ;
	sprintf(cmd,"mail -s \"Comments: %s\" %s < \"%s\"\n",
			full,submit,name) ;
	system(cmd) ;
#ifdef NEVER
	if (strlen(email)) 
	{
	sprintf(cmd,"mail -s \"Comments: %s\" %s < \"%s\"\n",
		full,email,name) ;
	system(cmd) ;
	}
#endif
}

