ppd_file_t * /* O - PPD file */ SetCommonOptions( int num_options, /* I - Number of options */ cups_option_t *options, /* I - Options */ int change_size) /* I - Change page size? */ { ppd_file_t *ppd; /* PPD file */ ppd_size_t *pagesize; /* Current page size */ const char *val; /* Option value */ #ifdef LC_TIME setlocale(LC_TIME, ""); #endif /* LC_TIME */ ppd = ppdOpenFile(getenv("PPD")); ppdMarkDefaults(ppd); cupsMarkOptions(ppd, num_options, options); if ((pagesize = ppdPageSize(ppd, NULL)) != NULL) { PageWidth = pagesize->width; PageLength = pagesize->length; PageTop = pagesize->top; PageBottom = pagesize->bottom; PageLeft = pagesize->left; PageRight = pagesize->right; fprintf(stderr, "DEBUG: Page = %.0fx%.0f; %.0f,%.0f to %.0f,%.0f\n", PageWidth, PageLength, PageLeft, PageBottom, PageRight, PageTop); } if (ppd != NULL) { ColorDevice = ppd->color_device; LanguageLevel = ppd->language_level; } if ((val = cupsGetOption("landscape", num_options, options)) != NULL) { if (_cups_strcasecmp(val, "no") != 0 && _cups_strcasecmp(val, "off") != 0 && _cups_strcasecmp(val, "false") != 0) { if (ppd && ppd->landscape > 0) Orientation = 1; else Orientation = 3; } } else if ((val = cupsGetOption("orientation-requested", num_options, options)) != NULL) { /* * Map IPP orientation values to 0 to 3: * * 3 = 0 degrees = 0 * 4 = 90 degrees = 1 * 5 = -90 degrees = 3 * 6 = 180 degrees = 2 */ Orientation = atoi(val) - 3; if (Orientation >= 2) Orientation ^= 1; } if ((val = cupsGetOption("page-left", num_options, options)) != NULL) { switch (Orientation & 3) { case 0 : PageLeft = (float)atof(val); break; case 1 : PageBottom = (float)atof(val); break; case 2 : PageRight = PageWidth - (float)atof(val); break; case 3 : PageTop = PageLength - (float)atof(val); break; } } if ((val = cupsGetOption("page-right", num_options, options)) != NULL) { switch (Orientation & 3) { case 0 : PageRight = PageWidth - (float)atof(val); break; case 1 : PageTop = PageLength - (float)atof(val); break; case 2 : PageLeft = (float)atof(val); break; case 3 : PageBottom = (float)atof(val); break; } } if ((val = cupsGetOption("page-bottom", num_options, options)) != NULL) { switch (Orientation & 3) { case 0 : PageBottom = (float)atof(val); break; case 1 : PageLeft = (float)atof(val); break; case 2 : PageTop = PageLength - (float)atof(val); break; case 3 : PageRight = PageWidth - (float)atof(val); break; } } if ((val = cupsGetOption("page-top", num_options, options)) != NULL) { switch (Orientation & 3) { case 0 : PageTop = PageLength - (float)atof(val); break; case 1 : PageRight = PageWidth - (float)atof(val); break; case 2 : PageBottom = (float)atof(val); break; case 3 : PageLeft = (float)atof(val); break; } } if (change_size) UpdatePageVars(); if (ppdIsMarked(ppd, "Duplex", "DuplexNoTumble") || ppdIsMarked(ppd, "Duplex", "DuplexTumble") || ppdIsMarked(ppd, "JCLDuplex", "DuplexNoTumble") || ppdIsMarked(ppd, "JCLDuplex", "DuplexTumble") || ppdIsMarked(ppd, "EFDuplex", "DuplexNoTumble") || ppdIsMarked(ppd, "EFDuplex", "DuplexTumble") || ppdIsMarked(ppd, "KD03Duplex", "DuplexNoTumble") || ppdIsMarked(ppd, "KD03Duplex", "DuplexTumble")) Duplex = 1; return (ppd); }
void EndPage(ppd_file_t *ppd, /* I - PPD file */ cups_page_header2_t *header) /* I - Page header */ { int val; /* Option value */ ppd_choice_t *choice; /* Marked choice */ switch (ModelNumber) { case DYMO_3x0 : /* * Eject the current page... */ fputs("\033E", stdout); break; case ZEBRA_EPL_LINE : /* * End buffered output, eject the label... */ fputs("\033E\014", stdout); break; case ZEBRA_EPL_PAGE : /* * Print the label... */ puts("P1"); break; case ZEBRA_ZPL : if (Canceled) { /* * Cancel bitmap download... */ puts("~DN"); break; } /* * Start label... */ puts("^XA"); /* * Set print rate... */ if ((choice = ppdFindMarkedChoice(ppd, "zePrintRate")) != NULL && strcmp(choice->choice, "Default")) { val = atoi(choice->choice); printf("^PR%d,%d,%d\n", val, val, val); } /* * Put label home in default position (0,0)... */ printf("^LH0,0\n"); /* * Set media tracking... */ if (ppdIsMarked(ppd, "zeMediaTracking", "Continuous")) { /* * Add label length command for continuous... */ printf("^LL%d\n", header->cupsHeight); printf("^MNN\n"); } else if (ppdIsMarked(ppd, "zeMediaTracking", "Web")) printf("^MNY\n"); else if (ppdIsMarked(ppd, "zeMediaTracking", "Mark")) printf("^MNM\n"); /* * Set label top */ if (header->cupsRowStep != 200) printf("^LT%d\n", header->cupsRowStep); /* * Set media type... */ if (!strcmp(header->MediaType, "Thermal")) printf("^MTT\n"); else if (!strcmp(header->MediaType, "Direct")) printf("^MTD\n"); /* * Set print mode... */ if ((choice = ppdFindMarkedChoice(ppd, "zePrintMode")) != NULL && strcmp(choice->choice, "Saved")) { printf("^MM"); if (!strcmp(choice->choice, "Tear")) printf("T,Y\n"); else if (!strcmp(choice->choice, "Peel")) printf("P,Y\n"); else if (!strcmp(choice->choice, "Rewind")) printf("R,Y\n"); else if (!strcmp(choice->choice, "Applicator")) printf("A,Y\n"); else printf("C,Y\n"); } /* * Set tear-off adjust position... */ if (header->AdvanceDistance != 1000) { if ((int)header->AdvanceDistance < 0) printf("~TA%04d\n", (int)header->AdvanceDistance); else printf("~TA%03d\n", (int)header->AdvanceDistance); } /* * Allow for reprinting after an error... */ if (ppdIsMarked(ppd, "zeErrorReprint", "Always")) printf("^JZY\n"); else if (ppdIsMarked(ppd, "zeErrorReprint", "Never")) printf("^JZN\n"); /* * Print multiple copies */ if (header->NumCopies > 1) printf("^PQ%d, 0, 0, N\n", header->NumCopies); /* * Display the label image... */ puts("^FO0,0^XGR:CUPS.GRF,1,1^FS"); /* * End the label and eject... */ puts("^IDR:CUPS.GRF^FS"); puts("^XZ"); break; case ZEBRA_CPCL : /* * Set tear-off adjust position... */ if (header->AdvanceDistance != 1000) printf("PRESENT-AT %d 1\r\n", (int)header->AdvanceDistance); /* * Allow for reprinting after an error... */ if (ppdIsMarked(ppd, "zeErrorReprint", "Always")) puts("ON-OUT-OF-PAPER WAIT\r"); else if (ppdIsMarked(ppd, "zeErrorReprint", "Never")) puts("ON-OUT-OF-PAPER PURGE\r"); /* * Cut label? */ if (header->CutMedia) puts("CUT\r"); /* * Set darkness... */ if (header->cupsCompression > 0) printf("TONE %u\r\n", 2 * header->cupsCompression); /* * Set print rate... */ if ((choice = ppdFindMarkedChoice(ppd, "zePrintRate")) != NULL && strcmp(choice->choice, "Default")) { val = atoi(choice->choice); printf("SPEED %d\r\n", val); } /* * Print the label... */ if ((choice = ppdFindMarkedChoice(ppd, "zeMediaTracking")) == NULL || strcmp(choice->choice, "Continuous")) puts("FORM\r"); puts("PRINT\r"); break; case INTELLITECH_PCL : printf("\033*rB"); /* End GFX */ printf("\014"); /* Eject current page */ break; } fflush(stdout); /* * Free memory... */ free(Buffer); if (CompBuffer) { free(CompBuffer); CompBuffer = NULL; } if (LastBuffer) { free(LastBuffer); LastBuffer = NULL; } }