From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- support/pssplit/pssplit.c | 133 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 support/pssplit/pssplit.c (limited to 'support/pssplit/pssplit.c') diff --git a/support/pssplit/pssplit.c b/support/pssplit/pssplit.c new file mode 100644 index 0000000000..3baab432d6 --- /dev/null +++ b/support/pssplit/pssplit.c @@ -0,0 +1,133 @@ +/* + * File: pssplit.c + * + * (c) Peter Kleiweg 1998 + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2, + * or (at your option) any later version. + * + */ + +#include +#include +#include +#include +#include + +#ifdef __MSDOS__ +#define strcasecmp(A, B) (stricmp(A, B)) +#endif + +#define BUFSIZE 2048 + +char + buffer [BUFSIZE + 1], + *programname; + +void + syntax (void), + errit (char const *format, ...); + +int main (int argc, char *argv []) +{ + FILE + *fp; + int + page = 0, + prpage = 0, + doclevel = 0, + trailer = 0, + even = 0, + odd = 0, + beginpage, + endpage, + retval = 1; + + programname = argv [0]; + + if (argc != 5) + syntax (); + + beginpage = atoi (argv [2]); + endpage = atoi (argv [3]); + if (beginpage < 1 || endpage < beginpage) + syntax (); + + if (! strcasecmp (argv [4], "all")) { + even = 1; + odd = 1; + } else if (! strcasecmp (argv [4], "even")) + even = 1; + else if (! strcasecmp (argv [4], "odd")) + odd = 1; + else + syntax (); + + fp = fopen (argv [1], "r"); + if (! fp) + errit ("Opening file \"%s\": %s", argv [1], strerror (errno)); + + while (fgets (buffer, BUFSIZE, fp)) { + if (! memcmp (buffer, "%%Page:", 7)) { + if (! doclevel) { + page++; + prpage = ( + page >= beginpage && page <= endpage + && ((odd && (page % 2)) || (even && ! (page % 2))) + ); + if (prpage) { + retval = 0; + fputs (buffer, stderr); + } + } + } else if (! memcmp (buffer, "%%BeginDocument", 15)) + doclevel++; + else if (! memcmp (buffer, "%%EndDocument", 13)) + doclevel--; + else if (! memcmp (buffer, "%%Trailer", 9)) { + if (! doclevel) + trailer = 1; + } + + if ((page == 0) || prpage || trailer) + fputs (buffer, stdout); + } + + fclose (fp); + + if (retval) + fprintf (stderr, "\n%s: No pages found\n\n", programname); + + return retval; +} + +void errit (char const *format, ...) +{ + va_list + list; + + fprintf (stderr, "\nError %s: ", programname); + + va_start (list, format); + vfprintf (stderr, format, list); + + fprintf (stderr, "\n\n"); + + exit (2); +} + +void syntax () +{ + fprintf ( + stderr, + "\nUsage: %s file.ps beginpage endpage all|even|odd\n" + "Return value:\n" + "\t0 - ok\n" + "\t1 - no pages found\n" + "\t2 - error\n", + programname + ); + exit (2); +} -- cgit v1.2.3