diff options
Diffstat (limited to 'Build/source/texk/psutils/psutils-src/epsffit.c')
-rw-r--r-- | Build/source/texk/psutils/psutils-src/epsffit.c | 173 |
1 files changed, 0 insertions, 173 deletions
diff --git a/Build/source/texk/psutils/psutils-src/epsffit.c b/Build/source/texk/psutils/psutils-src/epsffit.c deleted file mode 100644 index df7e81eb2ae..00000000000 --- a/Build/source/texk/psutils/psutils-src/epsffit.c +++ /dev/null @@ -1,173 +0,0 @@ -/* epsffit.c - * Fit EPSF file into constrained size - * - * (c) Reuben Thomas 2012-2014 - * (c) Angus J. C. Duggan 1991-1997 - * See file LICENSE for details. - * - * Added filename spec (from Larry Weissman) 5 Feb 93 - * Accepts double %%BoundingBox input, outputs proper BB, 4 Jun 93. (I don't - * like this; developers should read the Big Red Book before writing code which - * outputs PostScript. - */ - -#include "config.h" - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <ctype.h> -#include <unistd.h> -#include "progname.h" -#include "binary-io.h" - -#include "psutil.h" - -const char *syntax = "[-c] [-r] [-a] [-m] [-s] LLX LLY URX URY [INFILE [OUTFILE]]\n"; - -const char *argerr_message = ""; - -int -main(int argc, char **argv) -{ - int bbfound = 0; /* %%BoundingBox: found */ - int urx = 0, ury = 0, llx = 0, lly = 0; - int furx, fury, fllx, flly; - int showpage = 0, centre = 0, rotate = 0, aspect = 0, maximise = 0; - char buf[BUFSIZ]; - FILE *input = stdin; - FILE *output = stdout; - int opt; - - set_program_name(argv[0]); - - while((opt = getopt(argc, argv, "csramv")) != EOF) { - switch(opt) { - case 'c': centre = 1; break; - case 's': showpage = 1; break; - case 'r': rotate = 1; break; - case 'a': aspect = 1; break; - case 'm': maximise = 1; break; - case 'v': - default: - usage(); - break; - } - } - - if ((argc - optind) < 4 || (argc - optind) > 6) usage(); - - fllx = atoi(argv[optind++]); - flly = atoi(argv[optind++]); - furx = atoi(argv[optind++]); - fury = atoi(argv[optind++]); - - /* Be defensive */ - if((argc - optind) < 0 || (argc - optind) > 2) usage(); - - if ((argc - optind) > 0) { - if(!(input = fopen(argv[optind], "rb"))) - die("can't open input file %s", argv[optind]); - optind++; - } else if (set_binary_mode(fileno(stdin), O_BINARY) < 0) - die("can't reset stdin to binary mode"); - - if ((argc - optind) > 0) { - if(!(output = fopen(argv[optind], "wb"))) - die("can't open output file %s", argv[optind]); - optind++; - } else if (set_binary_mode(fileno(stdout), O_BINARY) < 0) - die("can't reset stdout to binary mode"); - - while (fgets(buf, BUFSIZ, input)) { - if (buf[0] == '%' && (buf[1] == '%' || buf[1] == '!')) { - /* still in comment section */ - if (!strncmp(buf, "%%BoundingBox:", 14)) { - double illx, illy, iurx, iury; /* input bbox parameters */ - if (sscanf(buf, "%%%%BoundingBox:%lf %lf %lf %lf\n", - &illx, &illy, &iurx, &iury) == 4) { - bbfound = 1; - llx = (int)illx; /* accept doubles, but convert to int */ - lly = (int)illy; - urx = (int)(iurx+0.5); - ury = (int)(iury+0.5); - } - } else if (!strncmp(buf, "%%EndComments", 13)) { - strcpy(buf, "\n"); /* don't repeat %%EndComments */ - break; - } else fputs(buf, output); - } else break; - } - - if (bbfound) { /* put BB, followed by scale&translate */ - int fwidth, fheight; - double xscale, yscale; - double xoffset = fllx, yoffset = flly; - double width = urx-llx, height = ury-lly; - - if (maximise) - if ((width > height && fury-flly > furx-fllx) || - (width < height && fury-flly < furx-fllx)) - rotate = 1; - - if (rotate) { - fwidth = fury - flly; - fheight = furx - fllx; - } else { - fwidth = furx - fllx; - fheight = fury - flly; - } - - xscale = fwidth/width; - yscale = fheight/height; - - if (!aspect) { /* preserve aspect ratio ? */ - xscale = yscale = MIN(xscale,yscale); - } - width *= xscale; /* actual width and height after scaling */ - height *= yscale; - if (centre) { - if (rotate) { - xoffset += (fheight - height)/2; - yoffset += (fwidth - width)/2; - } else { - xoffset += (fwidth - width)/2; - yoffset += (fheight - height)/2; - } - } - fprintf(output, - "%%%%BoundingBox: %d %d %d %d\n", (int)xoffset, (int)yoffset, - (int)(xoffset+(rotate ? height : width)), - (int)(yoffset+(rotate ? width : height))); - if (rotate) { /* compensate for original image shift */ - xoffset += height + lly * yscale; /* displacement for rotation */ - yoffset -= llx * xscale; - } else { - xoffset -= llx * xscale; - yoffset -= lly * yscale; - } - fputs("%%EndComments\n", output); - if (showpage) - fputs("save /showpage{}def /copypage{}def /erasepage{}def\n", output); - else - fputs("%%BeginProcSet: epsffit 1 0\n", output); - fputs("gsave\n", output); - fprintf(output, "%.3f %.3f translate\n", xoffset, yoffset); - if (rotate) - fputs("90 rotate\n", output); - fprintf(output, "%.3f %.3f scale\n", xscale, yscale); - if (!showpage) - fputs("%%EndProcSet\n", output); - } - do { - fputs(buf, output); - } while (fgets(buf, BUFSIZ, input)); - if (bbfound) { - fputs("grestore\n", output); - if (showpage) - fputs("restore showpage\n", output); /* just in case */ - } else - die("no %%%%BoundingBox:"); - - return 0; -} |