| #!/usr/bin/perl |
| # |
| # Copyright (c) International Business Machines Corp., 2002 |
| # |
| # This program is free software; you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; either version 2 of the License, or (at |
| # your option) any later version. |
| # |
| # This program is distributed in the hope that it will be useful, but |
| # WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| # General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with this program; if not, write to the Free Software |
| # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| # |
| # |
| # posterize.pl |
| # |
| # This script generates a postscript file from output generated from the |
| # fcgp http://sourceforge.net/projects/fcgp/ for plotting |
| # |
| # |
| # History: |
| # 2003-09-04 wrote - James M Kenefick Jr. <jkenefic@us.ibm.com> |
| # |
| |
| |
| |
| # a good deal of this could be turned in to cli |
| # arguments. |
| |
| # Constants |
| my $Title = "Linux Kernel Coverage"; |
| my $KernelVersion = "2.5.73"; |
| my $TestDescription = "A Sample Print"; |
| my $Image = "../lgp/image.ps"; |
| |
| # Variables |
| my $Bounds = ""; |
| # Paper sizes in inches |
| my $PAPER_WIDTH = 34; |
| my $PAPER_HEIGHT = 42; |
| |
| # points per inch |
| my $ppi = 72; |
| |
| # Margins |
| my $TopMargin = 1; |
| my $BottomMargin = 1.5; |
| my $LeftMargin = 1; |
| my $RightMargin = 1; |
| |
| |
| $RightMargin = $PAPER_WIDTH - $RightMargin; |
| $TopMargin = $PAPER_HEIGHT - $TopMargin; |
| |
| my $filename = "poster.ps"; |
| |
| # Sizes in ppi |
| my $PPI_WIDTH = ($PAPER_WIDTH * $ppi); |
| my $PPI_HEIGHT = ($PAPER_HEIGHT * $ppi); |
| |
| # Date we create poster |
| my $date = `date`; |
| |
| print STDERR "Creating Poster\n"; |
| |
| open POSTER, ">$filename"; |
| |
| |
| |
| print(POSTER <<END_OF_USAGE); |
| %!PS-Adobe-1.0 |
| %%DocumentFonts: Helvetica Helvetica-Bold |
| %%Title: Linux 2.4.0 Kernel Poster |
| %%Creator: Rusty's scripts and postersize (GPL) |
| %%CreationDate: $date |
| %%Pages: 1 |
| %%BoundingBox: 0 0 $PPI_WIDTH $PPI_HEIGHT |
| %%EndComments |
| %! |
| /PRorig_showpage_x178313 /showpage load def /showpage{ |
| errordict /handleerror {} put |
| }def |
| /initgraphics{}def/setpagedevice{pop}def |
| statusdict begin /a4tray{}def /lettertray{}def end |
| /a4{}def/a3{}def/a0{}def/letter{}def/legal{}def |
| /a4small{}def /lettersmall{}def /a4tray{}def /lettertray{}def |
| /setscreen{pop pop pop}def |
| /ColorManagement {pop} def |
| |
| |
| /A {gsave newpath 0 360 arc stroke grestore} bind def |
| /M {moveto} bind def |
| /L {lineto} bind def |
| /D {[] 0 setdash} bind def |
| /D5 {[5] 0 setdash} bind def |
| /C0 {0 0 0 setrgbcolor} bind def |
| /C1 {.8 .4 .4 setrgbcolor} bind def |
| /C2 {.5 1 .5 setrgbcolor} bind def |
| /C3 {0 .7 0 setrgbcolor} bind def |
| /C4 {1 0 0 setrgbcolor} bind def |
| /C5 {0 0 1 setrgbcolor} bind def |
| /R {grestore} bind def |
| /S {0 0 M stroke} bind def |
| /T {gsave translate} bind def |
| /U {C0 newpath 4 copy 4 2 roll 8 7 roll M L L L closepath stroke |
| C1 findfont exch scalefont setfont M show} bind def |
| |
| % Added James M Kenefick Jr. |
| /Hi_Color {0 0 1} def |
| /Med_Color {0 .60 1} def |
| /Lo_Color {0 1 1} def |
| /None_Color {.75 .75 .75} def |
| /Hi {newpath 4 copy 4 2 roll 8 7 roll M L L L Hi_Color setrgbcolor fill closepath} bind def |
| /Med {newpath 4 copy 4 2 roll 8 7 roll M L L L Med_Color setrgbcolor fill closepath} bind def |
| /Lo {newpath 4 copy 4 2 roll 8 7 roll M L L L Lo_Color setrgbcolor fill closepath} bind def |
| /None {newpath 4 copy 4 2 roll 8 7 roll M L L L None_Color setrgbcolor fill closepath} bind def |
| |
| /inch |
| { |
| 72 mul |
| } |
| def |
| |
| /LeftMargin $LeftMargin inch def |
| /RightMargin $RightMargin inch def |
| /TopMargin $TopMargin inch def |
| /BottomMargin $BottomMargin inch def |
| /FontScale 25 def |
| /AuthorFontScale 70 def |
| |
| /centerText |
| { |
| dup |
| stringwidth pop |
| 2 div |
| RightMargin LeftMargin sub 2 div |
| exch sub |
| LeftMargin add |
| NextLine moveto |
| show |
| } |
| def |
| |
| /upLine |
| { |
| /NextLine |
| NextLine LineSpace2 add |
| def |
| } |
| def |
| |
| /advanceLine |
| { |
| /NextLine |
| NextLine LineSpace sub |
| def |
| } |
| def |
| |
| /fontScale |
| { |
| TopMargin BottomMargin sub FontScale div |
| } |
| def |
| |
| /authorfontScale |
| { |
| TopMargin BottomMargin sub AuthorFontScale div |
| } |
| def |
| |
| /rightJustify |
| { |
| dup |
| stringwidth pop |
| RightMargin 1 inch sub |
| exch sub |
| NextLine moveto |
| show |
| } |
| def |
| |
| /usableY |
| { |
| TopMargin LineSpace 3 mul sub BottomMargin sub |
| } |
| def |
| |
| /usableX |
| { |
| RightMargin LeftMargin sub |
| } |
| def |
| gsave |
| /Times-Roman findfont fontScale scalefont setfont |
| /LineSpace fontScale def |
| /NextLine (B) stringwidth pop TopMargin exch sub def |
| |
| %%EndProlog |
| %%Page 1 |
| % title |
| |
| ($Title) centerText advanceLine |
| (Kernel: $KernelVersion) centerText advanceLine |
| ($TestDescription) centerText |
| |
| % Author Block |
| LeftMargin BottomMargin translate |
| /Times-Roman findfont authorfontScale scalefont setfont |
| /LineSpace2 authorfontScale def |
| /NextLine 0 def |
| (Based on work by Rusty Russell, Christian Reiniger) rightJustify |
| upLine |
| (By James M. Kenefick Jr.) rightJustify |
| |
| grestore |
| LeftMargin BottomMargin translate |
| |
| % Key Block |
| 15 15 scale |
| % This is the key for the graph. |
| |
| /box { newpath moveto 0 1 rlineto 2 0 rlineto 0 -1 rlineto closepath } def |
| /key { setrgbcolor 2 copy box gsave fill grestore 0 0 0 setrgbcolor strokepath fill moveto 2.4 0.25 rmoveto show } def |
| |
| /Helvetica-Oblique findfont |
| 1 scalefont setfont |
| 0.1 setlinewidth |
| |
| (static functions) 1 5 0.5 1 0.5 key % Light green. |
| (indirectly called functions) 1 7 0 0.7 0 key % green |
| (exported functions) 1 9 1 0 0 key % red |
| (other functions) 1 11 0 0 1 key % blue |
| |
| (Low Coverage) 1 15 Lo_Color key % blue |
| (Medium Coverage) 1 17 Med_Color key % blue |
| (Hi Coverage) 1 19 Hi_Color key % blue |
| (No Coverage) 1 21 None_Color key % blue |
| 1 3.25 moveto |
| 0.8 0.4 0.4 setrgbcolor |
| /Helvetica findfont |
| 1 scalefont setfont |
| (xxx) show |
| 1 3 moveto |
| 2.4 0.25 rmoveto |
| 0 0 0 setrgbcolor |
| /Helvetica-Oblique findfont |
| 1 scalefont setfont |
| (function name) show |
| |
| 1 1.25 moveto |
| 0.8 0.4 0.4 setrgbcolor |
| /Helvetica-Bold findfont |
| 1 scalefont setfont |
| (xxx) show |
| 1 1 moveto |
| 2.4 0.25 rmoveto |
| 0 0 0 setrgbcolor |
| /Helvetica-Oblique findfont |
| 1 scalefont setfont |
| (source filename) show |
| |
| 6 24 moveto |
| /Helvetica-Bold findfont |
| 2 scalefont setfont |
| (Key) show |
| |
| % Box around it |
| newpath |
| 0.2 0.2 moveto |
| 0.2 27 lineto |
| 17 27 lineto |
| 17 0.2 lineto |
| closepath |
| strokepath fill |
| |
| |
| 1 15 div 1 15 div scale |
| |
| % find and move to center |
| END_OF_USAGE |
| |
| # Find the bounds for the image |
| |
| $Bounds = `tail -1 $Image`; |
| ($Junk, $Junk, $minX, $minY, $maxX, $maxY) = split / /, $Bounds; |
| |
| my $xRange = $maxX - $minX; |
| my $yRange = $maxY - $minY; |
| |
| if ($xRange < $yRange){ |
| $Range = $xRange; |
| } else { |
| $Range = $yRange; |
| } |
| print POSTER " 0 usableY usableX sub 2 div translate\n"; |
| print POSTER "usableX $Range div usableX $Range div scale\n"; |
| print POSTER "$Range 2 div $Range 2 div translate\n"; |
| print POSTER "gsave\n"; |
| # Paste in actual image. |
| print POSTER `cat /home/lgp/image.ps`; |
| print POSTER "%%Trailer\n"; |
| print POSTER "grestore\n"; |
| print POSTER "showpage\n"; |
| print POSTER "PRorig_showpage_x178313\n"; |
| print POSTER "/showpage /PRorig_showpage_x178313 load def\n"; |
| |