blob: 1b2895ede67e94eb0b96e712fb05569faa631325 [file] [log] [blame]
#!/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";