+sub read_only_top {
+ my %args = @_;
+ die "Missing language argument" unless defined $args{lang};
+ die "Unknown language argument '$args{lang}'"
+ unless $args{lang} eq 'Perl' or $args{lang} eq 'C';
+ my $style = $args{style} ? " $args{style} " : ' ';
+
+ my $raw = "-*- buffer-read-only: t -*-\n";
+
+ if ($args{file}) {
+ $raw .= "\n $args{file}\n";
+ }
+ if ($args{copyright}) {
+ local $" = ', ';
+ local $Text::Wrap::columns = 75;
+ $raw .= wrap(' ', ' ', <<"EOM") . "\n";
+
+Copyright (C) @{$args{copyright}} by\0Larry\0Wall\0and\0others
+
+You may distribute under the terms of either the GNU General Public
+License or the Artistic License, as specified in the README file.
+EOM
+ }
+
+ $raw .= "!!!!!!! DO NOT EDIT THIS FILE !!!!!!!\n";
+
+ if ($args{by}) {
+ $raw .= "This file is built by $args{by}";
+ if ($args{from}) {
+ my @from = ref $args{from} eq 'ARRAY' ? @{$args{from}} : $args{from};
+ my $last = pop @from;
+ if (@from) {
+ $raw .= ' from ' . join (', ', @from) . " and $last";
+ } else {
+ $raw .= " from $last";
+ }
+ }
+ $raw .= ".\n";
+ }
+ $raw .= "Any changes made here will be lost!\n";
+ $raw .= $args{final} if $args{final};
+
+ local $Text::Wrap::columns = 78;
+ my $cooked = $args{lang} eq 'Perl'
+ ? wrap('# ', '# ', $raw) . "\n" : wrap('/* ', $style, $raw) . " */\n\n";
+ $cooked =~ tr/\0/ /; # Don't break Larry's name etc
+ $cooked =~ s/ +$//mg; # Remove all trailing spaces
+ return $cooked;
+}
+