// process a directory, insert all files found
\EMBED{lang=perl}

use strict;

sub includeDirectoryFiles
 {
  # get and check parameters
  my ($dir)=@_;
  die qq([Error] Missing directory option.\n) unless $dir;
  die qq([Error] Directory "$dir" does not exist.\n) unless -d $dir;

  # declare variables
  my ($perlPoint, %headlines)='';

  # get all sources of this category
  opendir(D, $dir) or die(qq([Error] Cannot open directory "$dir".\n));
  my @sources=grep(/\.pp$/, readdir(D));
  closedir(D);

  # open all files and extract their first headline
  foreach my $source (@sources)
    {
     # open file
     open(F, "$dir/$source") or warn(qq([Error] Cannot open file "$dir/$source"\n)), next;
     
     # extract headline
     while (<F>)
       {
        # find headline
        next unless /^=+(.+)$/;
        # and store it
        push(@{$headlines{$1}}, $source);
        last;
       }

     # close file
     close(F);
    }

  # anything found?
  if (%headlines)
    {
     # process files in sorted order
     foreach my $headline (sort keys %headlines)
       {
        # pass the file(s) to PerlPoint
        $perlPoint.=qq(\n\n\\INCLUDE{file="$dir/$_" type=pp headlinebase=CURRENT_LEVEL}\n\n) foreach @{$headlines{$headline}};
       }
    }

  # supply generated PerlPoint
  $perlPoint;
 }

\END_EMBED