#include <cups/cups.h>
#include <ctype.h>
#include <stdlib.h>
#define pwrite(s,n) fwrite((s), 1, (n), stdout)
int
main(int argc,
char *argv[])
{
FILE *fp;
char line[1024],
*lineptr;
int feedpage;
if (argc < 6 || argc > 7)
{
fputs("ERROR: commandtocanon job-id user title copies options [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;
pwrite("\x1b\x5b\x4b\x02\x00\x00\x1f" "BJLSTART\x0a", 16);
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 (strncasecmp(lineptr, "Clean", 5) == 0)
{
char *what;
for (what = lineptr + 6; isspace(*what); what ++);
if (*what == 0) pwrite("@Cleaning=1ALL\x0a", 15);
if (!strncasecmp(what,"all",3)) pwrite("@Cleaning=1ALL\x0a", 15);
if (!strncasecmp(what,"black",5)) pwrite("@Cleaning=1K\x0a", 13);
}
else if (strncasecmp(lineptr, "PrintAlignmentPage", 18) == 0)
{
int phase;
phase = atoi(lineptr + 18);
if (phase==0) pwrite("@TestPrint=Auto\x0a", 16);
if (phase==1) pwrite("@TestPrint=Manual1\x0a", 19);
if (phase==2) pwrite("@TestPrint=Manual2\x0a", 19);
feedpage = 0;
}
else if (strncasecmp(lineptr, "PrintSelfTestPage", 17) == 0)
{
pwrite("@TestPrint=NozzleCheck\x0a", 23);
feedpage = 0;
}
else if (strncasecmp(lineptr, "ReportLevels", 12) == 0)
{
}
else if (strncasecmp(lineptr, "SetAlignment", 12) == 0)
{
}
else
fprintf(stderr, "ERROR: Invalid printer command \"%s\"!\n", lineptr);
}
pwrite("BJLEND\x0a", 7);
if (feedpage)
{
putchar(13);
putchar(10);
putchar(12);
}
if (fp != stdin)
fclose(fp);
return (0);
}