#include <cups/cups-private.h>
#include "driver.h"
#include "data/escp.h"
int
main(int argc,
char *argv[])
{
FILE *fp;
char line[1024],
*lineptr;
int feedpage;
ppd_file_t *ppd;
if (argc < 6 || argc > 7)
{
_cupsLangPrintf(stderr,
_("Usage: %s job-id user title copies options [file]"),
argv[0]);
return (1);
}
if ((ppd = ppdOpenFile(getenv("PPD"))) == NULL)
{
fputs("ERROR: Unable to open PPD file!\n", stderr);
return (1);
}
if (argc == 7)
{
if ((fp = fopen(argv[6], "r")) == NULL)
{
perror("ERROR: Unable to open command file - ");
return (1);
}
}
else
fp = stdin;
if (ppd->model_number & ESCP_USB)
cupsWritePrintData("\000\000\000\033\001@EJL 1284.4\n@EJL \n\033@", 29);
cupsWritePrintData("\033@", 2);
cupsWritePrintData("\033(R\010\000\000REMOTE1", 13);
feedpage = 0;
while (fgets(line, sizeof(line), fp) != NULL)
{
lineptr = line + strlen(line) - 1;
if (*lineptr == '\n')
*lineptr = '\0';
for (lineptr = line; isspace(*lineptr); lineptr ++);
if (*lineptr == '#' || !*lineptr)
continue;
if (_cups_strncasecmp(lineptr, "Clean", 5) == 0)
{
cupsWritePrintData("CH\002\000\000\000", 6);
}
else if (_cups_strncasecmp(lineptr, "PrintAlignmentPage", 18) == 0)
{
int phase;
phase = atoi(lineptr + 18);
cupsWritePrintData("DT\003\000\000", 5);
putchar(phase & 255);
putchar(phase >> 8);
feedpage = 1;
}
else if (_cups_strncasecmp(lineptr, "PrintSelfTestPage", 17) == 0)
{
cupsWritePrintData("VI\002\000\000\000", 6);
cupsWritePrintData("NC\002\000\000\000", 6);
feedpage = 1;
}
else if (_cups_strncasecmp(lineptr, "ReportLevels", 12) == 0)
{
cupsWritePrintData("IQ\001\000\001", 5);
}
else if (_cups_strncasecmp(lineptr, "SetAlignment", 12) == 0)
{
int phase, x;
if (sscanf(lineptr + 12, "%d%d", &phase, &x) != 2)
{
fprintf(stderr, "ERROR: Invalid printer command \"%s\"!\n", lineptr);
continue;
}
cupsWritePrintData("DA\004\000", 4);
putchar(0);
putchar(phase);
putchar(0);
putchar(x);
cupsWritePrintData("SV\000\000", 4);
}
else
fprintf(stderr, "ERROR: Invalid printer command \"%s\"!\n", lineptr);
}
cupsWritePrintData("\033\000\000\000", 4);
if (feedpage)
{
fputs("PAGE: 1 1\n", stderr);
putchar(13);
putchar(10);
putchar(12);
}
cupsWritePrintData("\033@", 2);
ppdClose(ppd);
if (fp != stdin)
fclose(fp);
return (0);
}