diff -up cups-1.4.5/filter/pstops.c.page-label cups-1.4.5/filter/pstops.c --- cups-1.4.5/filter/pstops.c.page-label 2010-08-31 20:36:08.000000000 +0200 +++ cups-1.4.5/filter/pstops.c 2010-11-12 13:11:11.000000000 +0100 @@ -108,6 +108,7 @@ typedef struct /**** Document informa int num_options; /* Number of document-wide options */ cups_option_t *options; /* Document-wide options */ int normal_landscape, /* Normal rotation for landscape? */ + orientation, /* Original orientation of the document */ saw_eof, /* Saw the %%EOF comment? */ slow_collate, /* Collate copies by hand? */ slow_duplex, /* Duplex pages slowly? */ @@ -2083,7 +2084,7 @@ do_setup(pstops_doc_t *doc, /* I - Docu * of the pages... */ - if (Orientation & 1) + if (doc->orientation & 1) write_label_prolog(doc, doc->page_label, PageBottom, PageWidth - PageLength + PageTop, PageLength); else @@ -2091,7 +2092,30 @@ do_setup(pstops_doc_t *doc, /* I - Docu PageLength); } else - write_label_prolog(doc, doc->page_label, PageBottom, PageTop, PageWidth); + { + switch (doc->orientation) + { + case 0 : + write_label_prolog(doc, doc->page_label, PageBottom, PageTop, + PageWidth); + break; + + case 1 : + write_label_prolog(doc, doc->page_label, PageLeft, PageRight, + PageLength); + break; + + case 2 : + write_label_prolog(doc, doc->page_label, PageLength - PageTop, + PageLength - PageBottom, PageWidth); + break; + + case 3 : + write_label_prolog(doc, doc->page_label, PageWidth - PageRight, + PageWidth - PageLeft, PageLength); + break; + } + } } @@ -2176,7 +2200,7 @@ end_nup(pstops_doc_t *doc, /* I - Docum case 1 : if (doc->use_ESPshowpage) { - write_labels(doc, Orientation); + write_labels(doc, doc->orientation); doc_puts(doc, "ESPshowpage\n"); } break; @@ -2191,7 +2215,7 @@ end_nup(pstops_doc_t *doc, /* I - Docum * Rotate the labels back to portrait... */ - write_labels(doc, Orientation - 1); + write_labels(doc, doc->orientation - 1); } else if (Orientation == 0) { @@ -2217,7 +2241,7 @@ end_nup(pstops_doc_t *doc, /* I - Docum default : if (is_last_page(number) && doc->use_ESPshowpage) { - write_labels(doc, Orientation); + write_labels(doc, doc->orientation); doc_puts(doc, "ESPshowpage\n"); } break; @@ -2433,6 +2457,12 @@ set_pstops_options( Orientation = 0; /* + * Save original orientation of the document + */ + + doc->orientation = Orientation; + + /* * AP_FIRSTPAGE_* and the corresponding non-first-page options. */