Date: Wed, 17 Aug 1994 11:37:00 +0200 From: Markus_Kohm@KA2.maus.de (Markus Kohm) Subject: Erweitertes dvidvi fuer verbesserten Buchdruck. Message-ID: <199408171137.a10215@ka2.maus.de> 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 Markus_Kohm@ka.maus.de. 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 40a47 > #include 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)" 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