#!/usr/bin/perl -w # replace "include" lines with the file to be included, works recursively. # special support for .f, .tex, .inp, and .conf files # make list of files to NOT include $opt_x=0; require "getopts.pl"; &Getopts('x:'); ($opt_x) and (@noinclude = split(/,/, $opt_x)); $i = 0; foreach $file (@ARGV) { ($exten, $comment,$lang) = ("" , "# ", "inp"); # default (.inp files) ($exten, $comment,$lang) = ("" , "c ", "f77") if ($file =~ /.*\.f/) ; ($exten, $comment,$lang) = (".tex", "% ", "tex") if ($file =~ /.*\.tex/); &parseinclude($file, $i); } sub parseinclude { $_[1]++; local($filehandle) = $_[1]; open($filehandle, $_[0]) || die "couldn't open $_[0]\n"; while (<$filehandle>) { $newfile = ""; # get name of include file if (($lang eq "inp") and (/^\s*(\s*)in(clude|put)\s*["{'\s*]([^"{'\s]*)(["}'\s])\s*/o)) { $newfile = $3 . $exten; } elsif (($lang eq "f77") and (/^[ ](\s*)in(clude|put)\s*["{'\s*]([^"{'\s]*)(["}'\s])\s*/o)) { $newfile = $3 . $exten; } elsif (($lang eq "tex") and (/^\s*\\in(clude|put)\s*["{'\s*]([^"{'\s]*)(["}'\s])\s*/o)) { $newfile = $2; chop $newfile if ($3) ; $newfile .= $exten; } # insert include file if ($newfile) { unless (grep /\b$newfile\b/, @noinclude) { print $comment, $_; &parseinclude($newfile, $_[1]); } else { print; } } else { print; } } close($filehandle); $_[1]--; }