summaryrefslogtreecommitdiff
path: root/monitor
diff options
context:
space:
mode:
authorjlovell <jlovell@a1ca3aef-8c08-0410-bb20-df032aa958be>2006-02-20 18:43:55 +0000
committerjlovell <jlovell@a1ca3aef-8c08-0410-bb20-df032aa958be>2006-02-20 18:43:55 +0000
commitbd7854cb4d663bb0e561eaf5b01bbd47baa71d22 (patch)
treebca042d698732a5e19035c88c6ffc39d80f543f1 /monitor
parent4400e98de24bd267328aa20d57951fb6678297fe (diff)
downloadcups-bd7854cb4d663bb0e561eaf5b01bbd47baa71d22.tar.gz
Load cups into easysw/current.
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@60 a1ca3aef-8c08-0410-bb20-df032aa958be
Diffstat (limited to 'monitor')
-rw-r--r--monitor/Dependencies8
-rw-r--r--monitor/Makefile95
-rw-r--r--monitor/bcp.c286
-rw-r--r--monitor/tbcp.c283
4 files changed, 672 insertions, 0 deletions
diff --git a/monitor/Dependencies b/monitor/Dependencies
new file mode 100644
index 000000000..52599cfa1
--- /dev/null
+++ b/monitor/Dependencies
@@ -0,0 +1,8 @@
+# DO NOT DELETE
+
+bcp.o: ../cups/string.h ../config.h ../cups/cups.h ../cups/ipp.h
+bcp.o: ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+bcp.o: ../cups/file.h ../cups/language.h
+tbcp.o: ../cups/string.h ../config.h ../cups/cups.h ../cups/ipp.h
+tbcp.o: ../cups/http.h ../cups/md5.h ../cups/ppd.h ../cups/array.h
+tbcp.o: ../cups/file.h ../cups/language.h
diff --git a/monitor/Makefile b/monitor/Makefile
new file mode 100644
index 000000000..a689220c9
--- /dev/null
+++ b/monitor/Makefile
@@ -0,0 +1,95 @@
+#
+# "$Id: Makefile 5087 2006-02-07 03:43:29Z mike $"
+#
+# Port monitor makefile for the Common UNIX Printing System (CUPS).
+#
+# Copyright 2006 by Easy Software Products.
+#
+# These coded instructions, statements, and computer programs are the
+# property of Easy Software Products and are protected by Federal
+# copyright law. Distribution and use rights are outlined in the file
+# "LICENSE.txt" which should have been included with this file. If this
+# file is missing or damaged please contact Easy Software Products
+# at:
+#
+# Attn: CUPS Licensing Information
+# Easy Software Products
+# 44141 Airport View Drive, Suite 204
+# Hollywood, Maryland 20636 USA
+#
+# Voice: (301) 373-9600
+# EMail: cups-info@cups.org
+# WWW: http://www.cups.org
+#
+# This file is subject to the Apple OS-Developed Software exception.
+#
+
+include ../Makedefs
+
+TARGETS = bcp tbcp
+
+OBJS = bcp.o tbcp.o
+
+
+#
+# Make all targets...
+#
+
+all: $(TARGETS)
+
+
+#
+# Clean all object files...
+#
+
+clean:
+ $(RM) $(OBJS) $(TARGETS)
+
+
+#
+# Update dependencies (without system header dependencies...)
+#
+
+depend:
+ makedepend -Y -I.. -fDependencies $(OBJS:.o=.c) >/dev/null 2>&1
+
+
+#
+# Install all targets...
+#
+
+install: all
+ $(INSTALL_DIR) -m 755 $(SERVERBIN)/monitor
+ for file in $(TARGETS); do \
+ $(INSTALL_BIN) $$file $(SERVERBIN)/monitor; \
+ done
+
+
+#
+# bcp
+#
+
+bcp: bcp.o ../cups/$(LIBCUPS)
+ echo Linking $@...
+ $(CC) $(LDFLAGS) -o $@ bcp.o $(LIBS)
+
+
+#
+# tbcp
+#
+
+tbcp: tbcp.o ../cups/$(LIBCUPS)
+ echo Linking $@...
+ $(CC) $(LDFLAGS) -o $@ tbcp.o $(LIBS)
+
+
+#
+# Dependencies...
+#
+
+include Dependencies
+
+
+#
+# End of "$Id: Makefile 5087 2006-02-07 03:43:29Z mike $".
+#
diff --git a/monitor/bcp.c b/monitor/bcp.c
new file mode 100644
index 000000000..7b19e4b84
--- /dev/null
+++ b/monitor/bcp.c
@@ -0,0 +1,286 @@
+/*
+ * "$Id: bcp.c 5087 2006-02-07 03:43:29Z mike $"
+ *
+ * TBCP port monitor for the Common UNIX Printing System (CUPS).
+ *
+ * Copyright 1993-2006 by Easy Software Products.
+ *
+ * These coded instructions, statements, and computer programs are the
+ * property of Easy Software Products and are protected by Federal
+ * copyright law. Distribution and use rights are outlined in the file
+ * "LICENSE.txt" which should have been included with this file. If this
+ * file is missing or damaged please contact Easy Software Products
+ * at:
+ *
+ * Attn: CUPS Licensing Information
+ * Easy Software Products
+ * 44141 Airport View Drive, Suite 204
+ * Hollywood, Maryland 20636 USA
+ *
+ * Voice: (301) 373-9600
+ * EMail: cups-info@cups.org
+ * WWW: http://www.cups.org
+ *
+ * This file is subject to the Apple OS-Developed Software exception.
+ *
+ * Contents:
+ *
+ */
+
+/*
+ * Include necessary headers...
+ */
+
+#include <cups/string.h>
+#include <cups/cups.h>
+
+
+/*
+ * Local functions...
+ */
+
+static char *psgets(char *buf, size_t *bytes, FILE *fp);
+static size_t pswrite(const char *buf, size_t bytes, FILE *fp);
+
+
+/*
+ * 'main()' - Main entry...
+ */
+
+int /* O - Exit status */
+main(int argc, /* I - Number of command-line args */
+ char *argv[]) /* I - Command-line arguments */
+{
+ FILE *fp; /* File to print */
+ int copies; /* Number of copies left */
+ char line[1024]; /* Line/buffer from stream/file */
+ size_t linelen; /* Length of line */
+ ppd_file_t *ppd; /* PPD file */
+
+
+ /*
+ * Check command-line...
+ */
+
+ if (argc < 6 || argc > 7)
+ {
+ fputs("ERROR: tbcp job-id user title copies options [file]\n", stderr);
+ return (1);
+ }
+
+ if (argc == 6)
+ {
+ copies = 1;
+ fp = stdin;
+ }
+ else
+ {
+ copies = atoi(argv[4]);
+ fp = fopen(argv[6], "rb");
+
+ if (!fp)
+ {
+ perror(argv[6]);
+ return (1);
+ }
+ }
+
+ /*
+ * Open the PPD file as needed...
+ */
+
+ ppd = ppdOpenFile(getenv("PPD"));
+
+ /*
+ * Copy the print file to stdout...
+ */
+
+ while (copies > 0)
+ {
+ copies --;
+
+ if (ppd && ppd->jcl_begin)
+ fputs(ppd->jcl_begin, stdout);
+ if (ppd && ppd->jcl_ps)
+ fputs(ppd->jcl_ps, stdout);
+
+ if (!ppd || ppd->language_level == 1)
+ {
+ /*
+ * Use setsoftwareiomode for BCP mode...
+ */
+
+ puts("%!PS-Adobe-3.0 ExitServer");
+ puts("%%Title: (BCP - Level 1)");
+ puts("%%EndComments");
+ puts("%%BeginExitServer: 0");
+ puts("serverdict begin 0 exitserver");
+ puts("%%EndExitServer");
+ puts("statusdict begin");
+ puts("/setsoftwareiomode known {100 setsoftwareiomode}");
+ puts("end");
+ puts("%EOF");
+ }
+ else
+ {
+ /*
+ * Use setdevparams for BCP mode...
+ */
+
+ puts("%!PS-Adobe-3.0");
+ puts("%%Title: (BCP - Level 2)");
+ puts("%%EndComments");
+ puts("currentsysparams");
+ puts("/CurInputDevice 2 copy known {");
+ puts("get");
+ puts("<</Protocol /Binary>> setdevparams");
+ puts("}{");
+ puts("pop pop");
+ puts("} ifelse");
+ puts("%EOF");
+ }
+
+ if (ppd && ppd->jcl_end)
+ fputs(ppd->jcl_end, stdout);
+ else if (!ppd || ppd->num_filters == 0)
+ putchar(0x04);
+
+ /*
+ * Loop until we see end-of-file...
+ */
+
+ do
+ {
+ linelen = sizeof(line);
+ if (psgets(line, &linelen, fp) == NULL)
+ break;
+ }
+ while (pswrite(line, linelen, stdout) > 0);
+
+ fflush(stdout);
+ }
+
+ return (0);
+}
+
+
+/*
+ * 'psgets()' - Get a line from a file.
+ *
+ * Note:
+ *
+ * This function differs from the gets() function in that it
+ * handles any combination of CR, LF, or CR LF to end input
+ * lines.
+ */
+
+static char * /* O - String or NULL if EOF */
+psgets(char *buf, /* I - Buffer to read into */
+ size_t *bytes, /* IO - Length of buffer */
+ FILE *fp) /* I - File to read from */
+{
+ char *bufptr; /* Pointer into buffer */
+ int ch; /* Character from file */
+ size_t len; /* Max length of string */
+
+
+ len = *bytes - 1;
+ bufptr = buf;
+ ch = EOF;
+
+ while ((bufptr - buf) < len)
+ {
+ if ((ch = getc(fp)) == EOF)
+ break;
+
+ if (ch == '\r')
+ {
+ /*
+ * Got a CR; see if there is a LF as well...
+ */
+
+ ch = getc(fp);
+
+ if (ch != EOF && ch != '\n')
+ {
+ ungetc(ch, fp); /* Nope, save it for later... */
+ ch = '\r';
+ }
+ else
+ *bufptr++ = '\r';
+ break;
+ }
+ else if (ch == '\n')
+ break;
+ else
+ *bufptr++ = ch;
+ }
+
+ /*
+ * Add a trailing newline if it is there...
+ */
+
+ if (ch == '\n' || ch == '\r')
+ {
+ if ((bufptr - buf) < len)
+ *bufptr++ = ch;
+ else
+ ungetc(ch, fp);
+ }
+
+ /*
+ * Nul-terminate the string and return it (or NULL for EOF).
+ */
+
+ *bufptr = '\0';
+ *bytes = bufptr - buf;
+
+ if (ch == EOF && bufptr == buf)
+ return (NULL);
+ else
+ return (buf);
+}
+
+
+/*
+ * 'pswrite()' - Write data from a file.
+ */
+
+static size_t /* O - Number of bytes written */
+pswrite(const char *buf, /* I - Buffer to write */
+ size_t bytes, /* I - Bytes to write */
+ FILE *fp) /* I - File to write to */
+{
+ size_t count; /* Remaining bytes */
+
+
+ for (count = bytes; count > 0; count --, buf ++)
+ switch (*buf)
+ {
+ case 0x01 : /* CTRL-A */
+ case 0x03 : /* CTRL-C */
+ case 0x04 : /* CTRL-D */
+ case 0x05 : /* CTRL-E */
+ case 0x11 : /* CTRL-Q */
+ case 0x13 : /* CTRL-S */
+ case 0x14 : /* CTRL-T */
+ case 0x1c : /* CTRL-\ */
+ if (putchar(0x01) < 0)
+ return (-1);
+ if (putchar(*buf ^ 0x40) < 0)
+ return (-1);
+ break;
+
+ default :
+ if (putchar(*buf) < 0)
+ return (-1);
+ break;
+ }
+
+ return (bytes);
+}
+
+
+/*
+ * End of "$Id: bcp.c 5087 2006-02-07 03:43:29Z mike $".
+ */
diff --git a/monitor/tbcp.c b/monitor/tbcp.c
new file mode 100644
index 000000000..400e1ce0b
--- /dev/null
+++ b/monitor/tbcp.c
@@ -0,0 +1,283 @@
+/*
+ * "$Id: tbcp.c 5087 2006-02-07 03:43:29Z mike $"
+ *
+ * TBCP port monitor for the Common UNIX Printing System (CUPS).
+ *
+ * Copyright 1993-2006 by Easy Software Products.
+ *
+ * These coded instructions, statements, and computer programs are the
+ * property of Easy Software Products and are protected by Federal
+ * copyright law. Distribution and use rights are outlined in the file
+ * "LICENSE.txt" which should have been included with this file. If this
+ * file is missing or damaged please contact Easy Software Products
+ * at:
+ *
+ * Attn: CUPS Licensing Information
+ * Easy Software Products
+ * 44141 Airport View Drive, Suite 204
+ * Hollywood, Maryland 20636 USA
+ *
+ * Voice: (301) 373-9600
+ * EMail: cups-info@cups.org
+ * WWW: http://www.cups.org
+ *
+ * This file is subject to the Apple OS-Developed Software exception.
+ *
+ * Contents:
+ *
+ * main() - Main entry...
+ * psgets() - Get a line from a file.
+ * pswrite() - Write data from a file.
+ */
+
+/*
+ * Include necessary headers...
+ */
+
+#include <cups/string.h>
+#include <cups/cups.h>
+
+
+/*
+ * Local functions...
+ */
+
+static char *psgets(char *buf, size_t *bytes, FILE *fp);
+static size_t pswrite(const char *buf, size_t bytes, FILE *fp);
+
+
+/*
+ * 'main()' - Main entry...
+ */
+
+int /* O - Exit status */
+main(int argc, /* I - Number of command-line args */
+ char *argv[]) /* I - Command-line arguments */
+{
+ FILE *fp; /* File to print */
+ int copies; /* Number of copies left */
+ char line[1024]; /* Line/buffer from stream/file */
+ size_t linelen; /* Length of line */
+
+
+ /*
+ * Check command-line...
+ */
+
+ if (argc < 6 || argc > 7)
+ {
+ fputs("ERROR: tbcp job-id user title copies options [file]\n", stderr);
+ return (1);
+ }
+
+ if (argc == 6)
+ {
+ copies = 1;
+ fp = stdin;
+ }
+ else
+ {
+ copies = atoi(argv[4]);
+ fp = fopen(argv[6], "rb");
+
+ if (!fp)
+ {
+ perror(argv[6]);
+ return (1);
+ }
+ }
+
+ /*
+ * Copy the print file to stdout...
+ */
+
+ while (copies > 0)
+ {
+ copies --;
+
+ /*
+ * Read the first line...
+ */
+
+ linelen = sizeof(line);
+ if (psgets(line, &linelen, fp) == NULL)
+ {
+ fputs("ERROR: Empty print file!\n", stderr);
+ return (1);
+ }
+
+ /*
+ * Handle leading PJL fun...
+ */
+
+ if (!strncmp(line, "\033%-12345X", 9) || !strncmp(line, "@PJL ", 5))
+ {
+ /*
+ * Yup, we have leading PJL fun, so copy it until we hit a line
+ * with "ENTER LANGUAGE"...
+ */
+
+ while (strstr(line, "ENTER LANGUAGE") == NULL)
+ {
+ fwrite(line, 1, linelen, stdout);
+
+ linelen = sizeof(line);
+ if (psgets(line, &linelen, fp) == NULL)
+ break;
+ }
+ }
+ else
+ {
+ /*
+ * No PJL stuff, add it...
+ */
+
+ puts("\033%-12345X@PJL");
+ puts("@PJL ENTER LANGUAGE = POSTSCRIPT");
+ }
+
+ /*
+ * Switch to TBCP mode...
+ */
+
+ fputs("\001M", stdout);
+
+ /*
+ * Loop until we see end-of-file...
+ */
+
+ while (pswrite(line, linelen, stdout) > 0)
+ {
+ linelen = sizeof(line);
+ if (psgets(line, &linelen, fp) == NULL)
+ break;
+ }
+
+ fflush(stdout);
+ }
+
+ return (0);
+}
+
+
+/*
+ * 'psgets()' - Get a line from a file.
+ *
+ * Note:
+ *
+ * This function differs from the gets() function in that it
+ * handles any combination of CR, LF, or CR LF to end input
+ * lines.
+ */
+
+static char * /* O - String or NULL if EOF */
+psgets(char *buf, /* I - Buffer to read into */
+ size_t *bytes, /* IO - Length of buffer */
+ FILE *fp) /* I - File to read from */
+{
+ char *bufptr; /* Pointer into buffer */
+ int ch; /* Character from file */
+ size_t len; /* Max length of string */
+
+
+ len = *bytes - 1;
+ bufptr = buf;
+ ch = EOF;
+
+ while ((bufptr - buf) < len)
+ {
+ if ((ch = getc(fp)) == EOF)
+ break;
+
+ if (ch == '\r')
+ {
+ /*
+ * Got a CR; see if there is a LF as well...
+ */
+
+ ch = getc(fp);
+
+ if (ch != EOF && ch != '\n')
+ {
+ ungetc(ch, fp); /* Nope, save it for later... */
+ ch = '\r';
+ }
+ else
+ *bufptr++ = '\r';
+ break;
+ }
+ else if (ch == '\n')
+ break;
+ else
+ *bufptr++ = ch;
+ }
+
+ /*
+ * Add a trailing newline if it is there...
+ */
+
+ if (ch == '\n' || ch == '\r')
+ {
+ if ((bufptr - buf) < len)
+ *bufptr++ = ch;
+ else
+ ungetc(ch, fp);
+ }
+
+ /*
+ * Nul-terminate the string and return it (or NULL for EOF).
+ */
+
+ *bufptr = '\0';
+ *bytes = bufptr - buf;
+
+ if (ch == EOF && bufptr == buf)
+ return (NULL);
+ else
+ return (buf);
+}
+
+
+/*
+ * 'pswrite()' - Write data from a file.
+ */
+
+static size_t /* O - Number of bytes written */
+pswrite(const char *buf, /* I - Buffer to write */
+ size_t bytes, /* I - Bytes to write */
+ FILE *fp) /* I - File to write to */
+{
+ size_t count; /* Remaining bytes */
+
+
+ for (count = bytes; count > 0; count --, buf ++)
+ switch (*buf)
+ {
+ case 0x01 : /* CTRL-A */
+ case 0x03 : /* CTRL-C */
+ case 0x04 : /* CTRL-D */
+ case 0x05 : /* CTRL-E */
+ case 0x11 : /* CTRL-Q */
+ case 0x13 : /* CTRL-S */
+ case 0x14 : /* CTRL-T */
+ case 0x1b : /* CTRL-[ (aka ESC) */
+ case 0x1c : /* CTRL-\ */
+ if (putchar(0x01) < 0)
+ return (-1);
+ if (putchar(*buf ^ 0x40) < 0)
+ return (-1);
+ break;
+
+ default :
+ if (putchar(*buf) < 0)
+ return (-1);
+ break;
+ }
+
+ return (bytes);
+}
+
+
+/*
+ * End of "$Id: tbcp.c 5087 2006-02-07 03:43:29Z mike $".
+ */