#!/usr/bin/env perl
$sep = "--" . $ARGV[0];
$dir = ($ARGV[1] || "tmp");
($dir =~ /^([^<>\;\&]*)$/) and $dir = $1;

$/ = undef;
@slices = split($sep, <STDIN>);
@rv = ();
shift(@slices);
pop(@slices);
foreach $item (@slices) {
  $item =~ s/^\n//;
  ($header = $item) =~ s/\r\n\r\n.*//s;
  ($body = $item) =~ s/.*?\r\n\r\n//s;
  $body =~ s/\r\n$//;
  unless ($header =~ /\bname=([\"']?)(.*?)\1/) {
    next;
  }
  $name = $2;
  if ($header =~ /filename=(['\"]?)(.*?)\1/ && $2 gt "") {
    $fn=$2;
    if ($fn =~ /^([^\/]*)$/) {
      $fn = $1;
    }
    open(OUT, ">$dir/$fn");
      print OUT $body;
    close(OUT);
    $var = sprintf("%s:filename", $name);
    $val = $fn;
  } else {
    $var = $name;
    $val = $body;
  }
  $var =~ s/([^\w ])/'%' . unpack('H2', $1)/eg; $var =~ tr/ /+/;
  $val =~ s/([^\w ])/'%' . unpack('H2', $1)/eg; $val =~ tr/ /+/;
  push(@rv, sprintf("%s=%s", $var, $val));
}
print join('&', @rv);
