chiark / gitweb /
undo broken deletion
[trains.git] / detpic / make-panicworthy
1 #!/usr/bin/perl -n
2 BEGIN {
3     while (@ARGV && $ARGV[$#ARGV] =~ m/^\-/) {
4         $_= pop;
5         if (m/^-M$/) { $manglout= 1; }
6         elsif (m/^-I(\S+),(\S+)$/) { $mapinclude{$1}= $2; }
7         else { die "$_ ?"; }
8     }
9 }
10 $l= $_;
11 $pfx= 'pan_';
12 $pcode= '';
13 sub endsection () {
14     return unless defined $codesection;
15     print(";{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{\n",
16           $codesection,
17           ";}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}\n")
18         or die $!
19             unless $manglout;
20     undef $codesection;
21 }
22 sub mangle ($) {
23     print ";#MANGLE# $1\n"
24         or die $!
25             if $manglout;
26 }
27 if (m/^(\w*)\s+code\b/) {
28     endsection();
29     $codesection= "$pfx$_";
30 } elsif (m/^\s+(?:include|end|udata(?:_acs)?)\b/) {
31     endsection();
32 } elsif (m/^(\w+)\s+macro\b/) {
33     $inmacro++;
34 } elsif (m/^\w*\s+endm\b/) {
35     $inmacro--;
36 } elsif (m/^(\w*)\s+(?:equ)\b/) {
37 } elsif (m/^\s+extern\s+(\w+)\b/) {
38     mangle($1);
39     print "  extern $pfx$1;##\n" or die $!
40         unless $manglout;
41 } elsif (!$inmacro && defined $codesection) {
42     if (!s/^\;/;\#\#/) {
43         mangle($1) if m/^(\w+)\b/;
44         s/\b(\w+)\b/ $mangle{$1} ? "$pfx$1" : $1 /ge;
45     }
46     $codesection .= $_
47         unless m/\;\!P\s*$/;
48 } elsif (m/^\;\#MANGLE\# (\w+)$/) {
49     $mangle{$1}= 1;
50     $l= '';
51 }
52 if (m/^\s+include\s+(\S+)\s+$/ && exists $mapinclude{$1}) {
53     $l= "  include $mapinclude{$1}\n";
54 }    
55 print $l or die $!
56     unless $manglout;