summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2002-05-16 19:33:27 +0000
committerH. Peter Anvin <hpa@zytor.com>2002-05-16 19:33:27 +0000
commit365dc47adb09b11f5ac14b46e9cfed324c8b9d3b (patch)
tree260d33655be9ad4be0e8e87b83f4ef6bb0758fe2
parent2a584cf575fadae804a8ee8f4ff47486f50be4d2 (diff)
downloadnasm-365dc47adb09b11f5ac14b46e9cfed324c8b9d3b.tar.gz
nasm-365dc47adb09b11f5ac14b46e9cfed324c8b9d3b.tar.bz2
nasm-365dc47adb09b11f5ac14b46e9cfed324c8b9d3b.zip
Include the NASM logo from the specified EPS file rather than hard-coding it.
-rwxr-xr-xdoc/genps.pl99
-rw-r--r--doc/head.ps25
2 files changed, 91 insertions, 33 deletions
diff --git a/doc/genps.pl b/doc/genps.pl
index 761e2fb..e2b985e 100755
--- a/doc/genps.pl
+++ b/doc/genps.pl
@@ -930,7 +930,7 @@ foreach $fset ( @AllFonts ) {
print "%!PS-Adobe-3.0\n";
print "%%Pages: $curpage\n";
print "%%BoundingBox: 0 0 ", $psconf{pagewidth}, ' ', $psconf{pageheight}, "\n";
-print "%%Creator: NASM psflow.pl\n";
+print "%%Creator: (NASM psflow.pl)\n";
print "%%DocumentData: Clean7Bit\n";
print "%%DocumentFonts: ", join(' ', keys(%ps_all_fonts)), "\n";
print "%%DocumentNeededFonts: ", join(' ', keys(%ps_all_fonts)), "\n";
@@ -1051,45 +1051,78 @@ sub ps_end_page($) {
$ps_page = 0;
-# Title page and inner cover
+# Title page
ps_start_page();
$title = $metadata{'title'};
$title =~ s/ \- / $emdash /;
$pstitle = ps_string($title);
-# FIX THIS: This shouldn't be hard-coded like this
-print <<EOF;
-lmarg pageheight 2 mul 3 div moveto
-tfont0 setfont
-/title linkdest ${pstitle} show
-lmarg pageheight 2 mul 3 div 10 sub moveto
-0 setlinecap 3 setlinewidth
-pagewidth lmarg sub rmarg sub 0 rlineto stroke
-/nasmlogo {
-gsave 1 dict begin
-/sz exch def
-/Courier-Bold findfont sz scalefont setfont
-moveto
-0.85 1.22 scale
-[(-~~..~:\#;L .-:\#;L,.- .~:\#:;.T -~~.~:;. .~:;. )
-( E8+U *T +U\' *T\# .97 *L E8+\' *;T\' *;, )
-( D97 \`*L .97 \'*L \"T;E+:, D9 *L *L )
-( H7 I\# T7 I\# \"*:. H7 I\# I\# )
-( U: :8 *\#+ , :8 T, 79 U: :8 :8 )
-(,\#B. .IE, \"T;E* .IE, J *+;\#:T*\" ,\#B. .IE, .IE,)] {
-currentpoint 3 -1 roll
-sz -0.10 mul 0 3 -1 roll ashow
-sz 0.72 mul sub moveto
-} forall
-end grestore
-} def
-0.6 setgray
-pagewidth 2 div 143 sub
-pageheight 2 div 33 add
-12 nasmlogo
-EOF
+# Print title
+print "lmarg pageheight 2 mul 3 div moveto\n";
+print "tfont0 setfont\n";
+print "/title linkdest ${pstitle} show\n";
+print "lmarg pageheight 2 mul 3 div 10 sub moveto\n";
+print "0 setlinecap 3 setlinewidth\n";
+print "pagewidth lmarg sub rmarg sub 0 rlineto stroke\n";
+
+# Print logo, if there is one
+# FIX: To be 100% correct, this should look for DocumentNeeded*
+# and DocumentFonts in the header of the EPSF and add those to the
+# global header.
+if ( defined($metadata{epslogo}) &&
+ sysopen(EPS, $metadata{epslogo}, O_RDONLY) ) {
+ my @eps = ();
+ my ($bbllx,$bblly,$bburx,$bbury) = (undef,undef,undef,undef);
+ my $line;
+ my $scale = 1;
+ my $maxwidth = $psconf{pagewidth}-$psconf{lmarg}-$psconf{rmarg};
+ my $maxheight = $psconf{pageheight}/3-40;
+ my $width, $height;
+ my $x, $y;
+
+ while ( defined($line = <EPS>) ) {
+ last if ( $line =~ /^%%EOF/ );
+ if ( !defined($bbllx) &&
+ $line =~ /^\%\%BoundingBox\:\s*([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9\.]+)/i ) {
+ $bbllx = $1+0; $bblly = $2+0;
+ $bburx = $3+0; $bbury = $4+0;
+ }
+ push(@eps,$line);
+ }
+ close(EPS);
+
+ if ( defined($bbllx) ) {
+ $width = $bburx-$bbllx;
+ $height = $bbury-$bblly;
+
+ if ( $width > $maxwidth ) {
+ $scale = $maxwidth/$width;
+ }
+ if ( $height*$scale > $maxheight ) {
+ $scale = $maxheight/$height;
+ }
+
+ $x = ($psconf{pagewidth}-$width*$scale)/2;
+ $y = ($psconf{pageheight}-$height*$scale)/2;
+
+ print "BeginEPSF\n";
+ print $x, ' ', $y, " translate\n";
+ print $scale, " dup scale\n" unless ( $scale == 1 );
+ print -$bbllx, ' ', -$bblly, " translate\n";
+ print "$bbllx $bblly moveto\n";
+ print "$bburx $bblly lineto\n";
+ print "$bburx $bbury lineto\n";
+ print "$bbllx $bbury lineto\n";
+ print "$bbllx $bblly lineto clip newpath\n";
+ print "%%BeginDocument: ",ps_string($metadata{epslogo}),"\n";
+ print @eps;
+ print "%%EndDocument\n";
+ print "EndEPSF\n";
+ }
+}
ps_end_page(0);
+# Emit the rest of the document (page 2 and on)
$curpage = 2;
ps_start_page();
foreach $line ( @pslines ) {
diff --git a/doc/head.ps b/doc/head.ps
index 4cfc0ea..b5e9153 100644
--- a/doc/head.ps
+++ b/doc/head.ps
@@ -367,3 +367,28 @@
%
[/PageMode /UseOutlines /DOCVIEW pdfmark % Display bookmarks
+%
+% Functions to include EPS
+%
+/BeginEPSF {
+ /Before_EPSF_State save def
+ /dict_count countdictstack def
+ /op_count count 1 sub def
+ userdict begin
+ /showpage {} def
+ 0 setgray 0 setlinecap
+ 1 setlinewidth 0 setlinejoin
+ 10 setmiterlimit [ ] 0 setdash newpath
+ /languagelevel where
+ {
+ pop languagelevel
+ 1 ne {
+ false setstrokeadjust false setoverprint
+ } if
+ } if
+} bind def
+/EndEPSF {
+ count op_count sub {pop} repeat
+ countdictstack dict_count sub {end} repeat
+ Before_EPSF_State restore
+} bind def