summaryrefslogtreecommitdiff
path: root/vms/vms_yfix.pl
blob: 323a40d79296876247d15d0216265d135bcee285 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# This script takes the output produced from perly.y by byacc and
# the perly.fixer shell script (i.e. the perly.c and perly.h built
# for Unix systems) and patches them to produce copies containing
# appropriate declarations for VMS handling of global symbols.
#
# If it finds that the input files are already patches for VMS,
# it just copies the input to the output.
#
# Revised 26-May-1995 by Charles Bailey  bailey@genetics.upenn.edu

($cinfile,$hinfile,$coutfile,$houtfile) = @ARGV;

open C,$cinfile or die "Can't read $cinfile: $!\n";
open COUT, ">$coutfile" or die "Can't create $coutfile: $!\n";
while (<C>) {
  if (/^dEXT/) {  # we've already got a fixed copy
    print COUT $_,<C>;
    last;
  }
  # add the dEXT tag to definitions of global vars, so we'll insert
  # a globaldef when perly.c is compiled
  s/^(short|int|YYSTYPE|char \*)\s*yy/dEXT $1 yy/;
  print COUT;
}
close C;
close COUT;

open H,$hinfile  or die "Can't read $hinfile: $!\n";
open HOUT, ">$houtfile" or die "Can't create $houtfile: $!\n";
$hfixed = 0;  # keep -w happy
while (<H>) {
  $hfixed = /globalref/ unless $hfixed;  # we've already got a fixed copy
  next if /^extern YYSTYPE yylval/;  # we've got a Unix version, and this
                                     # is what we want to replace
  print HOUT;
}
close H;

print HOUT <<'EODECL' unless $hfixed;
#ifndef vax11c
  extern YYSTYPE yylval;
#else
  globalref YYSTYPE yylval;
#endif
EODECL

close HOUT;