diff options
author | Ravi Nanavati <ravi@bluespec.com> | 2006-09-29 22:47:39 +0000 |
---|---|---|
committer | Ravi Nanavati <ravi@bluespec.com> | 2006-09-29 22:47:39 +0000 |
commit | 138de4239c816531feebc8dcc478995d984276a9 (patch) | |
tree | 0702faf972c1f57ed4197ea8eda0d529976c89a4 /utils/hp2ps | |
parent | 9cd54893c0097b5b763dc9657e3c228492cdb87f (diff) | |
download | haskell-138de4239c816531feebc8dcc478995d984276a9.tar.gz |
multipage_hp2ps
Add support for splitting the key index over multiple pages in hp2ps
Multipage support can be requested with the -M command-line flag
or inferred if the number of bands requested is greater than 20
(the limit on the number of bands displayed has been removed)
Please include this change in the 6.6 branch as well as HEAD
Diffstat (limited to 'utils/hp2ps')
-rw-r--r-- | utils/hp2ps/Defines.h | 2 | ||||
-rw-r--r-- | utils/hp2ps/Dimensions.c | 3 | ||||
-rw-r--r-- | utils/hp2ps/Error.c | 1 | ||||
-rw-r--r-- | utils/hp2ps/Key.c | 13 | ||||
-rw-r--r-- | utils/hp2ps/Main.c | 14 | ||||
-rw-r--r-- | utils/hp2ps/Main.h | 2 | ||||
-rw-r--r-- | utils/hp2ps/PsFile.c | 32 | ||||
-rw-r--r-- | utils/hp2ps/PsFile.h | 1 |
8 files changed, 52 insertions, 16 deletions
diff --git a/utils/hp2ps/Defines.h b/utils/hp2ps/Defines.h index 8d38546fec..ae620f4183 100644 --- a/utils/hp2ps/Defines.h +++ b/utils/hp2ps/Defines.h @@ -10,7 +10,7 @@ extern floatish _thresh_; #define TWENTY _twenty_ /* show top 20 bands, grouping excess */ -#define DEFAULT_TWENTY 20 /* this is default and absolute maximum */ +#define DEFAULT_TWENTY 20 /* this is default and maximum per page */ extern int _twenty_; #define LARGE_FONT 12 /* Helvetica 12pt */ diff --git a/utils/hp2ps/Dimensions.c b/utils/hp2ps/Dimensions.c index e732402dac..4b4aadb101 100644 --- a/utils/hp2ps/Dimensions.c +++ b/utils/hp2ps/Dimensions.c @@ -51,7 +51,8 @@ Dimensions() titleheight = TITLE_HEIGHT; } - graphwidth = titlewidth - graphx0 - (TWENTY ? KeyWidth() : 0); + boolish keyOnGraph = !multipageflag && TWENTY != 0; + graphwidth = titlewidth - graphx0 - (keyOnGraph ? KeyWidth() : 0); graphheight = borderheight - titleheight - (2 * borderspace) - graphy0; } diff --git a/utils/hp2ps/Error.c b/utils/hp2ps/Error.c index 809c24ea44..68f88d8c91 100644 --- a/utils/hp2ps/Error.c +++ b/utils/hp2ps/Error.c @@ -47,6 +47,7 @@ Usage(str) printf(" -ef[in|mm|pt] produce Encapsulated PostScript f units wide (f > 2 inches)\n"); printf(" -g produce output suitable for GHOSTSCRIPT previever\n"); printf(" -i[+|-] sort by identifier string (-i+ gives greatest on top) \n"); + printf(" -M multi-page output (key separate from graph)\n"); printf(" -mn print maximum of n bands (default & max 20)\n"); printf(" -m0 removes the band limit altogether\n"); printf(" -p use previous scaling, shading and ordering\n"); diff --git a/utils/hp2ps/Key.c b/utils/hp2ps/Key.c index 8c63721c74..314a682dd6 100644 --- a/utils/hp2ps/Key.c +++ b/utils/hp2ps/Key.c @@ -5,6 +5,7 @@ #include "Dimensions.h" #include "HpFile.h" #include "Shade.h" +#include "PsFile.h" /* own stuff */ #include "Key.h" @@ -20,12 +21,18 @@ void Key() for (i = 0; i < nidents; i++) /* count identifiers */ ; - c = graphy0; - dc = graphheight / (floatish) (i + 1); + c = multipageflag ? 0 : graphy0; + dc = graphheight / (floatish) ((i <= 20) ? (i + 1) : 20); for (i = 0; i < nidents; i++) { c += dc; KeyEntry(c, identtable[i]->name, ShadeOf(identtable[i]->name)); + // if we have spit out 20 entries and we're going to output more + // advance the page + if (i % DEFAULT_TWENTY == (DEFAULT_TWENTY - 1) && i != nidents - 1) { + c = 0; + NextPage(); + } } } @@ -42,7 +49,7 @@ KeyEntry(centreline, name, colour) namebase = centreline - (floatish) (NORMAL_FONT / 2); keyboxbase = centreline - ((floatish) KEY_BOX_WIDTH / 2.0); - kstart = graphx0 + graphwidth; + kstart = graphx0 + (multipageflag ? 0 : graphwidth); fprintf(psfp, "%f %f moveto\n", kstart + borderspace, keyboxbase); fprintf(psfp, "0 %d rlineto\n", KEY_BOX_WIDTH); diff --git a/utils/hp2ps/Main.c b/utils/hp2ps/Main.c index 3b5efed51b..eb50e00036 100644 --- a/utils/hp2ps/Main.c +++ b/utils/hp2ps/Main.c @@ -17,7 +17,7 @@ #include "Utilities.h" boolish pflag = 0; /* read auxiliary file */ -boolish eflag = 0; /* scaled EPSF */ +boolish eflag = 0; /* scaled EPSF */ boolish dflag = 0; /* sort by standard deviation */ int iflag = 0; /* sort by identifier (3-way flag) */ boolish gflag = 0; /* output suitable for previewer */ @@ -29,6 +29,7 @@ boolish tflag = 0; /* ignored threshold specified */ boolish cflag = 0; /* colour output */ boolish filter; /* true when running as a filter */ +boolish multipageflag = 0; /* true when the output should be 2 pages - key and profile */ static floatish WidthInPoints PROTO((char *)); /* forward */ static FILE *Fp PROTO((char *, char **, char *, char *)); /* forward */ @@ -107,9 +108,13 @@ char* argv[]; case 'm': mflag++; TWENTY = atoi(*argv + 1); - if (TWENTY > DEFAULT_TWENTY) - Usage(*argv-1); + // only 20 keys fit on a page + if (TWENTY > DEFAULT_TWENTY) + multipageflag++; goto nextarg; + case 'M': + multipageflag++; + goto nextarg; case 't': tflag++; THRESHOLD_PERCENT = (floatish) atof(*argv + 1); @@ -161,7 +166,8 @@ nextarg: ; if (pflag) Reorder(); /* ReOrders on aux file */ - if (TWENTY) TopTwenty(); /* Selects top twenty (mflag) */ + /* Selects top bands (mflag) - can be more than 20 now */ + if (TWENTY != 0) TopTwenty(); Dimensions(); diff --git a/utils/hp2ps/Main.h b/utils/hp2ps/Main.h index 30e7a7e9be..81c62dc891 100644 --- a/utils/hp2ps/Main.h +++ b/utils/hp2ps/Main.h @@ -64,6 +64,8 @@ extern int mflag; extern boolish tflag; extern boolish cflag; +extern boolish multipageflag; + extern char *programname; extern char *hpfile; diff --git a/utils/hp2ps/PsFile.c b/utils/hp2ps/PsFile.c index 357f826259..1324da6f08 100644 --- a/utils/hp2ps/PsFile.c +++ b/utils/hp2ps/PsFile.c @@ -21,11 +21,8 @@ static void TitleOutlineBox PROTO((void)); /* forward */ static void BigTitleText PROTO((void)); /* forward */ static void TitleText PROTO((void)); /* forward */ -void -PutPsFile() +static void DoTitleAndBox() { - Prologue(); - Variables(); BorderOutlineBox(); if (bflag) { @@ -35,12 +32,35 @@ PutPsFile() TitleOutlineBox(); TitleText(); } +} + +static void Landscape PROTO((void)); /* forward */ +static void Portrait PROTO((void)); /* forward */ + +void NextPage() { + fprintf(psfp, "showpage\n"); + if (gflag) Portrait(); else Landscape(); + DoTitleAndBox(); +} + +void +PutPsFile() +{ + Prologue(); + Variables(); CurvesInit(); + DoTitleAndBox(); + + if (multipageflag) { + Key(); // print multi-page key even if there are more than 20 bands + NextPage(); + } + Axes(); - if (TWENTY) Key(); + if (!multipageflag && (TWENTY != 0)) Key(); Curves(); @@ -52,8 +72,6 @@ PutPsFile() static void StandardSpecialComments PROTO((void)); /* forward */ static void EPSFSpecialComments PROTO((floatish)); /* forward */ -static void Landscape PROTO((void)); /* forward */ -static void Portrait PROTO((void)); /* forward */ static void Scaling PROTO((floatish)); /* forward */ static void diff --git a/utils/hp2ps/PsFile.h b/utils/hp2ps/PsFile.h index acec0703bc..07d3ed2859 100644 --- a/utils/hp2ps/PsFile.h +++ b/utils/hp2ps/PsFile.h @@ -2,5 +2,6 @@ #define PS_FILE_H void PutPsFile PROTO((void)); +void NextPage PROTO((void)); // for Key.c #endif /* PS_FILE_H */ |