package CGIPARSE;

###########################################################################
### PARSE_FORM_DATA - parses GET or POST CGI arguments
###########################################################################
sub main'PARSE_FORM_DATA 
{
  local(*FORM_DATA) = @_;  ### FORM_DATA is type glob

  local($request_method, $query_string, @key_value_pairs, $key_value);
  local($key, $value);
 
  $request_method  = $ENV{'REQUEST_METHOD'};
 
  if ($request_method eq "GET") {
    $query_string = $ENV{'QUERY_STRING'};
  } elsif ($request_method eq "POST") {
    read(STDIN, $query_string, $ENV{'CONTENT_LENGTH'});
  } else {
    &RETURN_ERROR(500, "SERVER ERROR", "Server uses unsupported method");
  }
 
  @key_value_pairs = split(/&/, $query_string);
 
  foreach $key_value (@key_value_pairs) {
    ($key, $value) = split(/=/, $key_value);
    $value =~ tr/+/ /;
    $value =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack ("C", hex ($1))/eg;
        
    if (defined($FORM_DATA{$key})) {
      $FORM_DATA{$key} = join("\0", $FORM_DATA{$key}, $value);
    } else {
      $FORM_DATA{$key} = $value;
    }
  }
}
 
 
###########################################################################
### RETURN_ERROR
###########################################################################
sub RETURN_ERROR
{
  local($status, $keyword, $message) = @_;
 
  print "Content-type: text/html\n";
  print "Status: $status  $keyword \n\n";
 
  print <<EOF;
<HTML><HEAD><TITLE>CGI Program - Unexpected Error</TITLE></HEAD><BODY>
<H1>$keyword</H1>
<HR>$message</HR>
Please contact webmaster for more information
</BODY></HTML>
EOF

  exit(1);
}

################################################################################

1;  ## package return value
