#!/usr/bin/perl -w use strict; use Getopt::Std; our $opt_c; getopts('c'); my $mod = shift @ARGV; $mod =~ s/^.*\///; print "module $mod where\n\n"; print "import Data.ByteString.Unsafe\n"; print "import Data.ByteString\n"; print "import System.IO.Unsafe\n\n"; sub header { print "{-# NOINLINE $_[0] #-}\n"; print "$_[0] :: ByteString\n"; print "$_[0] = unsafePerformIO \$ unsafePackAddress \"\\\n \\"; } sub line { local $_ = @_ ? $_[0] : $_; s/\\/\\\\/g; s/\n/\\n/g; s/[^\x20-\x7e]/sprintf("\\x%04x\\&", ord($&))/eg; s/\"/\\"/g; print "$_\\\n \\"; } if($opt_c) { header('theData'); line "#ifdef JHC_RTS_INCLUDE\n"; for(@ARGV) { local $_ = $_; s/^.*\///; line "#include \"$_\"\n"; } line "#else\n"; for(@ARGV) { line "/* $_ */\n"; open my $fh, "<:utf8", $_ or die "$!: $_"; line while(<$fh>); } line "#endif\n"; print "\"#\n\n"; } else { while (@ARGV) { my $fn = shift @ARGV; my $nn = lc $fn; $nn =~ s/^.*\///; $nn =~ s/\W/_/g; open F, "<:utf8", $fn or die "$!: $fn"; $fn =~ s{/}{\\/}g; print "-- | Generated from $fn\n"; header($nn); while () { line; } close F or die "$!: close $fn"; print "\"#\n\n"; } } print "\n\n";