#
$Verbose = 0;
+$file = '';
+@args = ();
-while ( $#ARGV >= 0 && $ARGV[0] eq '-v' ) {
- if ($ARGV[0] eq '-v') {
- $Verbose = 1;
- } else {
- die "hscpp: unrecognised argument: $$ARGV[0]\n";
- }
- shift(@ARGV);
-}
-#ToDo: print a version number ?
-
-$OrigCpp = ${RAWCPP};
-
-if ( $OrigCpp =~ /(\S+)\s+(.*)/ ) {
- $cmd = $1;
- $rest = $2;
- if ( -x $cmd ) { # cool
- $Cpp = $OrigCpp;
- } else { # oops; try to guess
- $GccV = `gcc -v 2>&1`;
- if ( $GccV =~ /Reading specs from (.*)\/specs/ ) {
- $Cpp = "$1/cpp $rest";
+$Cpp = ${RAWCPP};
+
+foreach (@ARGV) {
+ /^-v$/ && do { $Verbose = 1; next; };
+
+ /^[^-]/ && do {
+ if ($file ne '') {
+ die "usage: hscpp [arg...] file";
} else {
- die "hscpp: don't know how to run cpp: $OrigCpp\n";
- }
- }
-} else {
- $Cpp = $OrigCpp;
-}
+ $file = $_;
+ };
+ next;
+ };
-print STDERR "hscpp:CPP invoked: $Cpp @ARGV\n" if $Verbose;
+ push @args, $_;
+}
-open(INPIPE, "$Cpp @ARGV |") || die "Can't open C pre-processor pipe\n";
+print STDERR "hscpp:CPP invoked: $Cpp @args - <$file\n" if $Verbose;
+open(INPIPE, "$Cpp @args - <$file |")
+ || die "Can't open C pre-processor pipe\n";
while (<INPIPE>) {
# line directives come in flavo[u]rs:
# s/^#\s*line\s+\d+$/\{\-# LINE \-\}/; IGNORE THIS ONE FOR NOW
- s/^#\s*line\s+(\d+)\s+(\".+\")$/\{\-# LINE \1 \2 \-\}/;
- s/^#\s*(\d+)\s+(\".*\").*/\{\-# LINE \1 \2 \-\}/;
+ s/^#\s*line\s+(\d+)\s+(\".+\")$/\{\-# LINE \1 \"$file\" \-\}/;
+ s/^#\s*(\d+)\s+(\".*\").*/\{\-# LINE \1 \"$file\" \-\}/;
print $_;
}