#!/usr/athena/bin/perl


print("Content-Type: text/html\n\n");

$query = $ENV{'QUERY_STRING'};

&do_madlib($query);

sub do_madlib {
    local($query) = @_;

    $mname = $ENV{'PATH_INFO'};
    $mname =~ s%^/%%;

    if($query){
	&returnmadlib($mname,$query);
    }
    else{
	&givemadlib($mname);
    }
}

sub returnmadlib {
    local($madlib, $fillins) = @_;

    if(!$madlib){
	if (substr($fillins, 0, 1) =~ /[A-Z]/){
	    &givemadlib($fillins);
	}
	else {
	    &givemadlib("list");
	}
	return;
    }

    %table = &parseform($fillins);

    open(ML, "/var/www/data/storyfun/$madlib");
    while(<ML>){
	$mltext .=$_;
    }
    close(ML);
    for $word (keys %table){
	$mltext=~s/\*\*\*$word\/[^\*]+\*\*\*/$table{$word}/g;
    }

    print $mltext;
    $mltext=~s/<[^>]*>//g;
     #open(ZW, "|/usr/local/bin/zwrite -d -n -q -c storyfun -i http://www.mit.edu/");
     #print(ZW $mltext);
     #close(ZW);
	print("<p><h2>Give me <a href=\"/storyfun\">another StoryFun selection</a>, or <a href=\"/sipb-homepage.html\">the MIT SIPB Home Page</a></h2>\n");
    alarm 0;
}

sub givemadlib {
    local($madlib) = @_;

    srand(time);

	opendir(DIR, "/var/www/data/storyfun");
	@libs = readdir(DIR);
	close(DIR);
    
	@libs = @libs[2..$#libs];
    $n = rand($#libs+1);
	&givemadliblist if ($madlib eq "list");
    $libs[$n] = $madlib if $madlib;
    print("<title>StoryFun</title>\n");
    print("<h1>StoryFun!</h1>\n");
    print("StoryFun name: \"$libs[$n]\"<br>Reload to get a <a href=\"/storyfun\">new story topic</a> or see the <a href=\"/storyfun/list\">list of story topics</a>");
    open(LIB, "/var/www/data/storyfun/".$libs[$n]) || print "hey!! what gives?";
    while(<LIB>){
	$lib .=$_;
    }
    close(LIB);
    print("<hr>\n");
    print("<form action=\"/storyfun/$libs[$n]\">\n");

    while($lib=~/\*\*\*([A-Z0-9]+)\/([^\*]+)\*\*\*/g){
	push(@output,"$2: <input size=40 name=$1><p>\n");

    }
    $no = $#output;
    for $i (0..$no){
	$n = rand($#output+1);
	print($output[$n]);
	splice(@output,$n,1);
    }
    print("<input type=\"submit\" value=\"Submit StoryFun\">\n");
	print("</form>\n");
	print("<h2><a href=\"/sipb-homepage.html\">The MIT SIPB Home Page</a></h2>\n");
    alarm 0;
}

sub givemadliblist {
	print "<title>StoryFun List</title>\n";
	print("<h1>StoryFun List</h1>\n");
	print "<ol>\n";
	for $mname (@libs) {
		print("<li><a href=\"$mname\">");
		$mname =~ s/_/ /g;
		print("$mname</a>\n");
	}
	print("</ol>\n");
exit;
}
sub parseform {
    local($formthing) = @_;     # Expects something like:
                                # foo=wow%21&bar=hello&baz=blah

    (@fields) = split('&', $formthing);
    for $f (@fields){
        ($name, $value) = split('=', $f);
	$value =~ s/\+/ /g;
        $value =~ s/%([\da-f]{1,2})/pack(C,hex($1))/eig; # remove % escapes
        $lookup{$name} = $value;
    }

    %lookup;
}

1;
