[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[mgp-users-jp 00217] patch for mgp2ps
- To: mgp-users-jp@mew.org
- Subject: [mgp-users-jp 00217] patch for mgp2ps
- From: "Takashi P.KATOH" <p-katoh@shiratori.riec.tohoku.ac.jp>
- Date: Tue, 28 Jul 1998 20:58:57 +0900
- Posted: Tue, 28 Jul 1998 21:01:45 +0900
- Reply-to: mgp-users-jp@mew.org
かとぺ です。
先週の金曜日に初めて mgp を使わせていただきました。
そのとき、念の為にと思って OHP も作成しようとしたのですが、
mgp2ps がちょっとホゲホゲしていたので、手を入れてみました。
# 手を入れたのは発表後ですが :-)
主にやってることは、
・paper size をオプションで指定できるようにした / それに伴なう変更
本当は「DocumentPaperSizes が A4 で、BoundingBox が Letter
Size」という奇ッ怪な状態をどうにかしたかっただけなのですが...
・%%Title: の変更
元のファイル名が分からないのが悲しかったので。
(%%Creater: もあることだし、「mgp2ps output file」ってほと
んど情報量ないと思います)
・「%BeginDocument」, 「%EndDocument」の修正
これだと EPS を取りこんだときに GV でまともに見れないです。
(この comment って Version 3.0 から?)
です。
これで A4 用紙にちゃんとプリントアウトされると思います。
# が、私のところではデフォルトではマージンが足りなくて、周り
# がちょっと切れますけど...
# GV では問題無く見えてます。
コードの一部は psutils から拝借してます。
なお mgp2ps.man は変更していません (_o_)
----------
それ以外で気付いている mgp2ps の問題点として、
| 任意の整数
| %image "Eq/i.gif", cont
| %cont
| において、...
などが上手くいかないようです (イメージが左端に行ってしまう)。
mgp では期待通りに表示されています。
# 単に私の書きかたが変なだけ?
あと、%mark, %again の処理。
# は、まだ手を付けてないだけですか?
--
かとぺ / 加藤 貴司
--- kit-980727/print.c Tue Jul 21 02:50:26 1998
+++ kit-hack/print.c Tue Jul 28 20:51:22 1998
@@ -43,10 +43,7 @@
static int tmpopen = 0;
-#define A4_WIDTH 760
-#define A4_HEIGHT 590
-#define A4_XMARGIN 10
-#define A4_YMARGIN 5
+#define DEFAULT_PAPER_SIZE "a4"
#define PRINT_ASCIIFONT "Times-Roman"
#define PRINT_ASCIITHICKFONT "Helvetica"
#define PRINT_KANJIFONT "Ryumin-Light-H"
@@ -131,6 +128,40 @@
0x2242, 0x2244, 0
};
+/* `papersize' and `papersizes[]' were based on psutil.[ch]
+ by Angus J. C. Duggan in psutils */
+typedef struct papersize {
+ char *name; /* name of paper size */
+ int height, width; /* height, width in points for LANDSCAPE */
+} Paper;
+
+static Paper papersizes[] = {
+ { "a3", 842, 1191 }, /* 29.7cm * 42cm */
+ { "a4", 595, 842 }, /* 21cm * 29.7cm */
+ { "a5", 421, 595 }, /* 14.85cm * 21cm */
+ { "b5", 516, 729 }, /* 18.2cm * 25.72cm */
+ { "A3", 842, 1191 }, /* 29.7cm * 42cm */
+ { "A4", 595, 842 }, /* 21cm * 29.7cm */
+ { "A5", 421, 595 }, /* 14.85cm * 21cm */
+ { "B5", 516, 729 }, /* 18.2cm * 25.72cm */
+ { "letter", 612, 792 }, /* 8.5in * 11in */
+ { "legal", 612, 1008 }, /* 8.5in * 14in */
+ { "ledger", 1224, 792 }, /* 17in * 11in */
+ { "tabloid", 792, 1224 }, /* 11in * 17in */
+ { "statement", 396, 612 }, /* 5.5in * 8.5in */
+ { "executive", 540, 720 }, /* 7.6in * 10in */
+ { "folio", 612, 936 }, /* 8.5in * 13in */
+ { "quarto", 610, 780 }, /* 8.5in * 10.83in */
+ { "10x14", 720, 1008 }, /* 10in * 14in */
+ { NULL, 0, 0 }
+};
+
+static Paper *paper;
+static int w_width, w_height;
+static int paper_xmargin = 10;
+static int paper_ymargin = 5;
+
+static Paper* findpaper __P((char *));
static void print_out __P((void));
static void print_page __P((u_int));
static void print_init __P((void));
@@ -166,6 +197,21 @@
extern int findImage __P((char *, char *));
+/* This code is based on psutil.c
+ by Angus J. C. Duggan in psutils */
+static Paper*
+findpaper(name)
+ char *name;
+{
+ Paper *pp;
+ for (pp = papersizes; pp->name; pp++) {
+ if (strcmp(pp->name, name) == 0) {
+ return pp;
+ }
+ }
+ return (Paper *)NULL;
+}
+
static void
print_out()
{
@@ -174,8 +220,8 @@
width = window_width;
height = window_height;
- window_width = A4_WIDTH;
- window_height = A4_HEIGHT;
+ window_width = w_width;
+ window_height = w_height;
char_size = window_height * DEFAULT_CHARSIZE / 100;
@@ -228,17 +274,17 @@
fprintf(fp, "%%!PS-Adobe-2.0 EPSF-2.0\n");
fprintf(fp, "%%%%Creater: mgp2ps\n");
- fprintf(fp, "%%%%Title: mgp2ps output file\n");
+ fprintf(fp, "%%%%Title: %s\n", mgp_fname);
fprintf(fp, "%%%%Pages: %d\n", maxpage);
- fprintf(fp, "%%%%BoundingBox: 0 0 612 792\n");
- fprintf(fp, "%%%%DocumentPaperSizes: A4\n");
+ fprintf(fp, "%%%%BoundingBox: 0 0 %d %d\n", paper->height, paper->width);
+ fprintf(fp, "%%%%DocumentPaperSizes: %s\n", paper->name);
fprintf(fp, "%%%%Orientation: Landscape\n");
fprintf(fp, "%%%%EndComments\n");
/* define constants */
fprintf(fp, "/XMARGIN %d def /YMARGIN %d def "
"/WIDTH %d def /HEIGHT %d def\n",
- A4_XMARGIN, A4_YMARGIN, window_width, window_height);
+ paper_xmargin, paper_ymargin, window_width, window_height);
fprintf(fp, "/XBODY WIDTH XMARGIN 2 mul sub def\n");
fprintf(fp, "/vertgap %d def /horizgap %d def\n", vert_gap, horiz_gap);
@@ -352,7 +398,7 @@
u_int page;
{
fprintf(fp, "%%%%Page: %d %d\n", page, page);
- fprintf(fp, "/ypos %d def\n", - A4_YMARGIN);
+ fprintf(fp, "/ypos %d def\n", - paper_ymargin);
fprintf(fp, "initcharsize\n");
}
@@ -750,9 +796,9 @@
{
struct ctrl_bar pbar;
- pbar.ct_width = cp->ctb_width * A4_HEIGHT / 1000;
- pbar.ct_start = cp->ctb_start * A4_WIDTH / 100;
- pbar.ct_length = cp->ctb_length * A4_WIDTH / 100;
+ pbar.ct_width = cp->ctb_width * w_height / 1000;
+ pbar.ct_start = cp->ctb_start * w_width / 100;
+ pbar.ct_length = cp->ctb_length * w_width / 100;
fprintf(fp, "%%bar color %d %d %d\n",
cp->ctb_width, cp->ctb_start, cp->ctb_length);
@@ -1132,7 +1178,7 @@
fprintf(fp, "gsave\n");
fprintf(fp, "%d ypos %d sub translate\n",
- xpos + A4_XMARGIN, print_height);
+ xpos + paper_xmargin, print_height);
fprintf(fp, "%d %d scale\n", print_width, print_height);
fprintf(fp, "%d %d 8\n", print_width, print_height);
fprintf(fp, "[%d 0 0 %d 0 %d]\n", print_width,
@@ -1171,7 +1217,7 @@
print_usage(name)
char *name;
{
- fprintf(stderr, "Usage: %s [-cirV] [-f psfile] mgpfile\n", name);
+ fprintf(stderr, "Usage: %s [-cirV] [-x xmargin] [-y ymargin] [-p paper] [-f psfile] mgpfile\n", name);
exit(0);
}
@@ -1405,11 +1451,11 @@
fprintf(fp, "BeginEPSF\n");
fprintf(fp, "%f %f scale\n", PSSCALEF, PSSCALEF);
fprintf(fp, "%d %d translate\n",
- (x1 - (int)(A4_XMARGIN * PSBASE)) * -1,
- (y2 + (int)(A4_YMARGIN * PSBASE)) * -1);
+ (x1 - (int)(paper_xmargin * PSBASE)) * -1,
+ (y2 + (int)(paper_ymargin * PSBASE)) * -1);
fprintf(fp, "%d ypos XMARGIN add %f mul translate\n",
(int)(xpos * PSBASE), (double)PSBASE);
- fprintf(fp, "%%BeginDocument: %s\n", filename);
+ fprintf(fp, "%%%%BeginDocument: %s\n", filename);
fputs(line1, fp);
fputs(line2, fp);
while (fgets(line, sizeof(line), epsfp)) {
@@ -1418,7 +1464,7 @@
line[1] = '#';
fputs(line, fp);
}
- fprintf(fp, "%%EndDocument\n");
+ fprintf(fp, "%%%%EndDocument\n");
fprintf(fp, "EndEPSF\n");
}
@@ -1437,7 +1483,10 @@
progname = argv[0];
- while ((opt = getopt(argc, argv, "ciVrf:")) != -1) {
+ /* set default paper size */
+ paper = findpaper(DEFAULT_PAPER_SIZE);
+
+ while ((opt = getopt(argc, argv, "ciVrf:x:y:p:")) != -1) {
switch (opt) {
case 'c':
colorps++;
@@ -1459,11 +1508,29 @@
mgp_flag |= FL_VERBOSE;
break;
+ case 'x' :
+ paper_xmargin = atoi(optarg);
+ break;
+
+ case 'y' :
+ paper_ymargin = atoi(optarg);
+ break;
+
+ case 'p' :
+ if ((paper = findpaper(optarg)) == (Paper *)0) {
+ fprintf(stderr, "Paper size '%s' not recognised. Use %s instead.\n", optarg, DEFAULT_PAPER_SIZE);
+ paper = findpaper(DEFAULT_PAPER_SIZE);
+ }
+ break;
+
default:
print_usage(progname);
/*NOTREACHED*/
}
}
+
+ w_width = paper->width - paper_xmargin * 2;
+ w_height = paper->height - paper_ymargin * 2;
argc -= optind;
argv += optind;