#!/usr/local/bin/perl $SCRIPT_NAME = $ENV{'SCRIPT_NAME'} || $0; $CGI = "file://$SCRIPT_NAME?"; if ($ENV{'QUERY_STRING'}) { $file = $ENV{'QUERY_STRING'}; } else { $file = $ARGV[0]; } $file = &cleanup($file); if (-d $file) { print <$file $_ EOF exit 1; } $file = &html_quote($file); ($dir = $file) =~ s@[^/]*$@@; print <$file
EOF
while () {
  $_ = &html_quote($_);

  s/^(\#\s*include\s+)(\".*\"|\<\;.*\>\;)/$1 . &header_ref($2)/ge;

  print;
}
close(FILE);
print "
\n"; sub header_ref { local($_) = @_; local($d); if (s/^\"//) { s/\"$//; return ""$_""; } s/^\<\;//; s/\>\;$//; for $d ( "/usr/include", "/usr/local/include", "/usr/X11R6/include", "/usr/X11/include", "/usr/X/include", "/usr/include/X11" ) { -f "$d/$_" && return "<$_>"; } return $_; } sub html_quote { local($_) = @_; local(%QUOTE) = ( '<', '<', '>', '>', '&', '&', '"', '"', ); s/[<>&"]/$QUOTE{$&}/g; return $_; } sub cleanup { local($_) = @_; s@//+@/@g; s@/\./@/@g; while(m@/\.\./@) { s@^/(\.\./)+@/@; s@/[^/]+/\.\./@/@; } return $_; }