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, " = [modulo:]\n"); - fprintf(stderr, " = [-]pageno[@scale][L|R|U][(xoff,yoff)][,spec|+spec]\n"); + fprintf(stderr, " = [-]pageno[@scale][L|R|U|H|V][(xoff,yoff)][,spec|+spec]\n"); fprintf(stderr, " modulo>=1, 0<=pagenorotate += 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.)