summaryrefslogtreecommitdiff
path: root/install-win32/macro.pl
diff options
context:
space:
mode:
Diffstat (limited to 'install-win32/macro.pl')
-rw-r--r--install-win32/macro.pl61
1 files changed, 61 insertions, 0 deletions
diff --git a/install-win32/macro.pl b/install-win32/macro.pl
new file mode 100644
index 0000000..08ba58a
--- /dev/null
+++ b/install-win32/macro.pl
@@ -0,0 +1,61 @@
+#!/usr/bin/perl
+
+# Simple macro processor.
+
+# Macros are defined in a control file that follows
+# a simple definition-based grammar as documented in the
+# trans script. Stdin is then copied to stdout, and any
+# occurrence of @@MACRO@@ is substituted. Macros can also
+# be specified on the command line.
+
+die "usage: macro [-O<openquote>] [-C<closequote>] [-Dname=var ...] [control-file ...] " if (@ARGV < 1);
+
+%Parms = ();
+$open_quote = "@@";
+$close_quote = "@@";
+
+while ($arg=shift(@ARGV)) {
+ if ($arg =~ /^-/) {
+ if ($arg =~ /^-D(\w+)(?:=(.*))?$/) {
+ $Parms{$1} = $2
+ } elsif ($arg =~ /-O(.*)$/) {
+ $open_quote = $1;
+ } elsif ($arg =~ /-C(.*)$/) {
+ $close_quote = $1;
+ } else {
+ die "unrecognized option: $arg";
+ }
+ } else {
+ open(CONTROL, "< $arg") or die "cannot open $arg";
+ while (<CONTROL>) {
+ if (/^!define\s+(\w+)(?:\s+['"]?(.*?)['"]?)?\s*$/) {
+ $Parms{$1} = $2;
+ }
+ }
+ }
+}
+
+sub print_symbol_table {
+ foreach my $k (sort (keys(%Parms))) {
+ my $v = $Parms{$k};
+ print "[$k] -> \"$v\"\n";
+ }
+}
+
+#print_symbol_table ();
+#exit 0;
+
+while (<STDIN>) {
+ s{
+ \Q$open_quote\E
+ \s*
+ (
+ \w+
+ )
+ \s*
+ \Q$close_quote\E
+ }{
+ $Parms{$1}
+ }xge;
+ print;
+}