1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167
|
/*
* Advanced PCL command filter for CUPS.
*
* Copyright 2007-2011 by Apple Inc.
* Copyright 1993-2005 by Easy Software Products.
*
* These coded instructions, statements, and computer programs are the
* property of Apple Inc. and are protected by Federal copyright
* law. Distribution and use rights are outlined in the file "COPYING"
* which should have been included with this file.
*
*
* Contents:
*
* main() - Main entry and command processing.
*/
/*
* Include necessary headers...
*/
#include <cups/cups.h>
#include <cups/ppd.h>
#include <cupsfilters/driver.h>
#include <string.h>
#include <ctype.h>
#include "pcl.h"
/*
* 'main()' - Main entry and processing of driver.
*/
int /* O - Exit status */
main(int argc, /* I - Number of command-line arguments */
char *argv[]) /* I - Command-line arguments */
{
FILE *fp; /* Command file */
char line[1024], /* Line from file */
*lineptr; /* Pointer into line */
int feedpage; /* Feed the page */
ppd_file_t *ppd; /* PPD file */
/*
* Check for valid arguments...
*/
if (argc < 6 || argc > 7)
{
/*
* We don't have the correct number of arguments; write an error message
* and return.
*/
fprintf(stderr, "Usage: %s job-id user title copies options [file]\n",
argv[0]);
return (1);
}
/*
* Open the PPD file...
*/
if ((ppd = ppdOpenFile(getenv("PPD"))) == NULL)
{
fputs("ERROR: Unable to open PPD file!\n", stderr);
return (1);
}
/*
* Open the command file as needed...
*/
if (argc == 7)
{
if ((fp = fopen(argv[6], "r")) == NULL)
{
perror("ERROR: Unable to open command file - ");
return (1);
}
}
else
fp = stdin;
/*
* Reset the printer...
*/
cupsWritePrintData("\033E", 2);
/*
* Read the commands from the file and send the appropriate commands...
*/
feedpage = 0;
while (fgets(line, sizeof(line), fp) != NULL)
{
/*
* Drop trailing newline...
*/
lineptr = line + strlen(line) - 1;
if (*lineptr == '\n')
*lineptr = '\0';
/*
* Skip leading whitespace...
*/
for (lineptr = line; isspace(*lineptr); lineptr ++);
/*
* Skip comments and blank lines...
*/
if (*lineptr == '#' || !*lineptr)
continue;
/*
* Parse the command...
*/
if (strncasecmp(lineptr, "Clean", 5) == 0 &&
(ppd->model_number & PCL_INKJET))
{
/*
* Clean heads...
*/
cupsWritePrintData("\033&b16WPML \004\000\006\001\004\001\005\001"
"\001\004\001\144", 22);
}
else
fprintf(stderr, "ERROR: Invalid printer command \"%s\"!\n", lineptr);
}
/*
* Eject the page as needed...
*/
if (feedpage)
{
fputs("PAGE: 1 1\n", stderr);
putchar(12);
}
/*
* Reset the printer...
*/
cupsWritePrintData("\033E", 2);
/*
* Close the command file and return...
*/
ppdClose(ppd);
if (fp != stdin)
fclose(fp);
return (0);
}
|