;# $RCSfile: validate.pl,v $$Revision: 4.1 $$Date: 92/08/07 18:24:19 $
;# The validate routine takes a single multiline string consisting of
;# lines containing a filename plus a file test to try on it. (The
;# file test may also be a 'cd', causing subsequent relative filenames
;# to be interpreted relative to that directory.) After the file test
;# you may put '|| die' to make it a fatal error if the file test fails.
;# The default is '|| warn'. The file test may optionally have a ! prepended
;# to test for the opposite condition. If you do a cd and then list some
;# relative filenames, you may want to indent them slightly for readability.
;# If you supply your own "die" or "warn" message, you can use $file to
;# interpolate the filename.
;# Filetests may be bunched: -rwx tests for all of -r, -w and -x.
;# Only the first failed test of the bunch will produce a warning.
;# The routine returns the number of warnings issued.
;# Usage:
;# require "validate.pl";
;# $warnings += do validate('
;# /vmunix -e || die
;# /boot -e || die
;# /bin cd
;# csh -ex
;# csh !-ug
;# sh -ex
;# sh !-ug
;# /usr -d || warn "What happened to $file?\n"
;# ');
sub validate {
foreach $check (split(/\n/,$_[0])) {
next if $check =~ /^#/;
next if $check =~ /^$/;
$testlist = $2;
}
else {
@testlist = ('Z');
}
$oldwarnings = $warnings;
eval $this;
last if $warnings > $oldwarnings;
}
}
$warnings;
}
sub valmess {
local($disposition,$this) = @_;
$neg = $1;
$tmp = $2;
if ($neg eq '!') {
$mess =~ s/ not / /;
}
}
else {
print STDERR "Can't do $this.\n";
}
++$warnings;
}
1;