#!/usr/bin/perl -0777

my $debug = 0;

$_ = <>;
my $comments = "";
my $code = "";

# ignore strings and comments appearing in preprocessor directives
s/^#.*//mg;

for(;;) {
  s,^([^"/]+),,;
  $code .= "$1\n";

  if(m,^([^"]*)"",) {
    s,^([^"]*)"",,s;
    $code .= "$1\n";
    next;
  }
  if(m,^([^"]*)"([^"]*)",) {
    s,^([^"]*)"(([^\\"]*?([^\\"]|(\\.)))+)",,s;
    print STDERR "quote: $2\n" if $debug;
    $code .= "$1\n";
    $comments .= "$2\n";
    next;
  }
  if(m,/\*.*?\*/,) {
    s,/\*(.*?)\*/,,s;
    print STDERR "c-style comment: $1\n" if $debug;
    $comments .= "$1\n";
    print STDERR "REMAINDER:\n===========================\n$_\n=========================\n" if $debug;
    next;
  }
  if(m,//,) {
    s,//([^\n]*),,s;
    print STDERR "c++-style comment: $1\n" if $debug;
    $comments .= "$1\n";
    print STDERR "REMAINDER:\n===========================\n$_\n=========================\n" if $debug;
    next;
  }
  last;
}

$code .= "$_\n";
$code =~ s,\W+,\n,g;
$code =~ s,^,@,gm;
print "$code\n";

$comments =~ s,^,^,gm;
print "$comments\n";

