1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
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 <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
|