psutils/psutils-flip.dif

113 lines
3.7 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Patch for pstops from psutils to allow page flipping (i. e. mirroring).
Useful for creating of print matrices on transparent films.
http://www.penguin.cz/~utx
ftp://ftp.penguin.cz/pub/users/utx/psutils/psutils-flip.diff
--- psutils/pstops.c.orig 1997-03-11 23:53:04.000000000 +0100
+++ psutils/pstops.c 2002-07-26 19:14:49.000000000 +0200
@@ -35,7 +35,7 @@
{
fprintf(stderr, "%s: page specification error:\n", program);
fprintf(stderr, " <pagespecs> = [modulo:]<spec>\n");
- fprintf(stderr, " <spec> = [-]pageno[@scale][L|R|U][(xoff,yoff)][,spec|+spec]\n");
+ fprintf(stderr, " <spec> = [-]pageno[@scale][L|R|U|H|V][(xoff,yoff)][,spec|+spec]\n");
fprintf(stderr, " modulo>=1, 0<=pageno<modulo\n");
fflush(stderr);
exit(1);
@@ -81,6 +81,14 @@
tail->rotate += 180;
tail->flags |= ROTATE;
break;
+ case 'h': case 'H':
+ tail->hflip += 1;
+ tail->flags |= HFLIP;
+ break;
+ case 'v': case 'V':
+ tail->vflip += 1;
+ tail->flags |= VFLIP;
+ break;
case '(':
tail->xoff += parsedimen(&str, argerror);
if (*str++ != ',') argerror();
--- psutils/psspec.h.orig 1997-03-11 23:53:04.000000000 +0100
+++ psutils/psspec.h 2002-07-26 17:41:41.000000000 +0200
@@ -8,12 +8,14 @@
/* pagespec flags */
#define ADD_NEXT (0x01)
#define ROTATE (0x02)
-#define SCALE (0x04)
-#define OFFSET (0x08)
-#define GSAVE (ROTATE|SCALE|OFFSET)
+#define HFLIP (0x04)
+#define VFLIP (0x08)
+#define SCALE (0x10)
+#define OFFSET (0x20)
+#define GSAVE (ROTATE|HFLIP|VFLIP|SCALE|OFFSET)
typedef struct pagespec {
- int reversed, pageno, flags, rotate;
+ int reversed, pageno, flags, rotate, hflip, vflip;
double xoff, yoff, scale;
struct pagespec *next;
} PageSpec ;
--- psutils/psspec.c.orig 1997-03-11 23:53:04.000000000 +0100
+++ psutils/psspec.c 2002-07-26 19:21:10.000000000 +0200
@@ -22,6 +22,8 @@
if (temp == NULL)
message(FATAL, "out of memory\n");
temp->reversed = temp->pageno = temp->flags = temp->rotate = 0;
+ temp->hflip = 0;
+ temp->vflip = 0;
temp->scale = 1;
temp->xoff = temp->yoff = 0;
temp->next = NULL;
@@ -208,6 +210,14 @@
sprintf(buffer, "%d rotate\n", ps->rotate);
writestring(buffer);
}
+ if ((ps->flags & HFLIP) && (ps->hflip%2)) {
+ sprintf(buffer, "[ -1 0 0 1 %f 0 ] concat\n", width*ps->scale);
+ writestring(buffer);
+ }
+ if ((ps->flags & VFLIP) && (ps->vflip%2)) {
+ sprintf(buffer, "[ 1 0 0 -1 0 %f ] concat\n", height*ps->scale);
+ writestring(buffer);
+ }
if (ps->flags & SCALE) {
sprintf(buffer, "%f dup scale\n", ps->scale);
writestring(buffer);
--- psutils/pstops.man.orig 1997-03-11 23:53:04.000000000 +0100
+++ psutils/pstops.man 2002-07-26 19:25:37.000000000 +0200
@@ -43,7 +43,7 @@
.I = spec[+specs][,specs]
.TP
.I spec
-.I = [-]pageno[L][R][U][@scale][(xoff,yoff)]
+.I = [-]pageno[L][R][U][H][V][@scale][(xoff,yoff)]
.RE
.sp
.I modulo
@@ -74,8 +74,9 @@
or
.B "h"
to specify as a multiple of the width or height.
-The optional parameters \fIL\fR, \fIR\fR, and \fIU\fR rotate the page left,
-right, or upside-down.
+The optional parameters \fIL\fR, \fIR\fR, \fIU\fR, \fIH\fR and \fIV\fR
+rotate the page left, right, or upside-down, and flip (mirror) page
+horizontally or vertically.
The optional
.I scale
parameter scales the page by the fraction specified.
--- psutils/README.orig 1997-03-11 23:53:05.000000000 +0100
+++ psutils/README 2002-07-26 19:36:58.000000000 +0200
@@ -181,6 +181,7 @@
Mike Coleman
Dale Scheetz dwarf@polaris.net
Yves Arrouye arrouye@marin.fdn.fr
+ Stanislav Brabec utx@penguin.cz
(Apologies to anyone who I have left out, it was not intentional.)