Subject: Erweitertes dvidvi fuer verbesserten Buchdruck.
From: [email-masked] (Markus Kohm)
Date: Wed, 17 Aug 1994 11:37:00 +0200
Newsgroups: de.comp.tex

Hier kommt also das diff fuer ein erweitetes dvidvi. Sollte der Compiler
meckern, dass alloc.h nicht gefunden wird, dieses einfach durch stdlib.h
ersetzen. Als Eingabedatei benoetigt man den Source von dvidvi, wie er auf
ftp.dante.de als dviware/dvidvi/dvidvi.c zu finden ist.

--- dvidvi.diff ------------------------------------------------------
16a17,20
>  *      round up number of pages to a
>  *        multiple of n                       -p n
>  *      sort pages to print one from top      -j
>  *        next one from end
21a26
>  *    To give version 1.1 it was improved by [email-masked].
24c29,30
<  *    compilers Turbo C 2.0 and Microsoft C 6.0.
---
>  *    compilers Turbo C 2.0 and Microsoft C 6.0 and for Atari ST under
>  *    compiler Turbo C 2.0 with MiNTLIB.
31,32c37,39
< #define BANNER "\nThis is dvidvi 1.0, Copyright (C) 1988-91, Radical Eye
Software\n"
< #define STRINGSIZE (500)  /* maximum number of strings in program */
---
> #define BANNER "\nThis is dvidvi 1.1, Copyright (C) 1988-91, Radical Eye
Software\n" \
>                  "Improved from 1.0 to 1.1, 1994, Markus Kohm\n"
> #define STRINGSIZE (500L)  /* maximum number of strings in program */
39d45
< #include <alloc.h>
40a47
> #include <alloc.h>
44c51,56
<
---
> #ifdef __TOS__
> #define READBIN         "rb"    /* TOS must use binary mode */
> #define WRITEBIN        "wb"
> #define PATHSEP         ';'
> #define DIRSEP          '\\'
> #else
63c75
<
---
> #endif
71a84,88
> #ifdef __TOS__
> #ifdef __TURBOC__
> #define SHORTINT
> #endif
> #endif
91a109
> integer pagemodulo ;     /* additional mod value for number of pages */
116c134
< integer pagefake ;      /* number of pages, rounded up to multiple of modulo
*/
---
> integer pagefake ;      /* number of pages, rounded up to multiple of
pagemodulo */
118a137
> Boolean jumpingpages = 0;
309c328,329
<    (void)fprintf(stderr,"    [-m modulo:pagespecs]\n");
---
>    (void)fprintf(stderr,"    [-m modulo:pagespecs]         [-j] jumping
pages\n");
>    (void)fprintf(stderr,"    [-p pagemodulo]\n");
509a530
>    pagemodulo = 0;
527,528c548,549
<    strings =(char *) malloc(STRINGSIZE) ;
<    if (strings == 0)
---
>    strings = malloc(STRINGSIZE) ;
>    if (strings == 0L)
628a650,659
> case 'p' :
>             if (*p == 0 && argv[i+1])
>                p = argv[++i] ;
> #ifdef SHORTINT
>             if (sscanf(p, "%ld", &pagemodulo)==0)
> #else   /* ~SHORTINT */
>             if (sscanf(p, "%d", &pagemodulo)==0)
> #endif  /* ~SHORTINT */
>                error("! Bad pagemodulo option (-p).") ;
>             break ;
698a730,732
> case 'j' : case 'J' :
>             jumpingpages = 1;
>             break;
1146c1180
<    integer actualpageno ;
---
>    integer actualpageno, lastpageno ;
1152c1186,1189
<    pagefake = (pagecount + modulo - 1) / modulo * modulo ;
---
>    if ( !pagemodulo )
>       pagefake = (pagecount + modulo - 1) / modulo * modulo ;
>    else
>       pagefake = (pagecount + pagemodulo - 1) / pagemodulo * pagemodulo ;
1154c1191
<    for (pagenum = 0; pagenum < pagefake; pagenum += modulo) {
---
>    for (lastpageno = -1, pagenum = 0; pagenum < pagefake / ( jumpingpages + 1
); pagenum += modulo) {
1160a1198,1203
>          if ( jumpingpages )
>             ps->reversed = !ps->reversed;
>          if ( actualpageno == lastpageno ) {
>             pagenum = pagefake;
>             break;
>          }
1183a1227,1228
>             if ( pagemodulo )
>                 lastpageno = actualpageno;
----------------------------------------------------------------------

Mit folgenden Parametern erreicht man, dass A5-Seiten auf A4-Seiten (quer) in
Buchreihenfolge sortiert werden:

    dvidvi -j -p 4 -m "1:-0,0(148mm,0mm)" <input> <output>

Wenn der Drucker die Seiten umdrehen und die Treiber landscape beherrscht, kann
man das dann direkt oder per dvips ausdrucken. Folgendes script ist dann recht
nuetzlich (wenn der Drucker korrekt angegeben ist):

--- dvia5bookps ------------------------------------------------------
%
% @(#) dvia5bookps, Copyright (c) Markus Kohm, 1994
%
dvidvi -j -p 4 -m "1:-0,0"(148,0mm) ${1} a5book.${1}
dvips -t landscape a5book.${1}
rm a5book.${1}
----------------------------------------------------------------------

Wenn der Drucker die Seiten nicht umdrehen kann, sollte man zuerst die
ungeraden Seiten drucken, dann den Stapel ohne ihn umzudrehen wieder in den
Drucker geben und dann die geraden Seiten in umgekehrter Reihenfolge drucken.
Wenn ich auswendig die Parameter fuer dvipr oder dvips wuesste, wuerde ich sie
angeben.

Gruss,
      Markus