~ubuntu-branches/ubuntu/gutsy/vnc4/gutsy

« back to all changes in this revision

Viewing changes to unix/xc/extras/FreeType/contrib/ttf2pk/dvidrv.btm

  • Committer: Bazaar Package Importer
  • Author(s): Ola Lundqvist
  • Date: 2006-05-15 20:35:17 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20060515203517-l4lre1ku942mn26k
Tags: 4.1.1+X4.3.0-10
* Correction of critical security issue. Thanks to Martin Kogler
  <e9925248@student.tuwien.ac.at> that informed me about the issue,
  and provided the patch.
  This flaw was originally found by Steve Wiseman of intelliadmin.com.
* Applied patch from Javier Kohen <jkohen@users.sourceforge.net> that
  inform the user that only 8 first characters of the password will
  actually be used when typing more than 8 characters, closes:
  #355619.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
::
 
2
::  This is dvidrv.btm, a batch file for 4DOS/4OS2 written by
 
3
::  Werner Lemberg <wl@gnu.org> partially based on the
 
4
::  dvidrv.btm file of the 4allTeX package written by Phons Bloemen.
 
5
::
 
6
::  It is a replacement for dvidrv.exe of the emTeX package.
 
7
::
 
8
::  Additional features: support of ps2pk
 
9
::                       support of ttf2pk
 
10
::                       support of hbf2gf for HBFs (Hanzi bitmap fonts)
 
11
::
 
12
::      Only quadratic printer modes are supported for ttf2pk!
 
13
::
 
14
::  All needed binaries will be searched in the path.
 
15
 
 
16
iff %# lt 2 then
 
17
  echo ``
 
18
  echo Usage: %0 dvi-driver dvi-file [parameters]
 
19
  quit
 
20
endiff
 
21
 
 
22
setlocal
 
23
  :: we set a default value only if the corresponding environment variable
 
24
  :: is empty. The `=' must follow the variable name immediately.
 
25
  alias set_def `iff "%[%@word["=",0,%1]]" eq "" then %+ set %& %+ endiff`
 
26
 
 
27
  :: =========================================
 
28
  :: ======== User defined variables. ========
 
29
  :: =========================================
 
30
  ::
 
31
  :: Can be overridden in the environment (except %ps2pk, %ttf2pk, %hbf2gf,
 
32
  :: %pre_dpi, and %post_dpi).
 
33
 
 
34
  :: Set these values to `no' for  the programs you don't want to use.
 
35
  set ps2pk=yes
 
36
  set ttf2pk=yes
 
37
  set hbf2gf=yes
 
38
 
 
39
  :: where the PK files will be installed created by ps2pk, ttf2pk, and
 
40
  :: hbf2gf.
 
41
  :: dvidrv.btm adds `\modeless\XXXdpi' to this string (see below for the
 
42
  :: exact string).
 
43
  set_def pkdir=%emtexdir\pixel\tmp\pk
 
44
 
 
45
  :: where the TrueType fonts reside. Supports trailing `!' and `!!'.
 
46
  set_def ttfonts=%emtexdir\fonts\truetype
 
47
  :: where auxiliary files of ttf2pk are located. Supports trailing `!'
 
48
  :: and `!!'.
 
49
  set_def ttfcfg=%emtexdir\ttf2pk
 
50
 
 
51
  :: where the HBF files reside. Supports trailing `!' and `!!'.
 
52
  set_def hbfonts=%emtexdir\fonts\hbf
 
53
  :: where the hbf2gf config files are. Supports trailing `!' and `!!'.
 
54
  set_def hbfcfg=%emtexdir\hbf2gf
 
55
 
 
56
  :: the dpi-subdirectory has various forms; the most common are XXXdpi and
 
57
  :: dpiXXX, e.g. 300dpi and dpi300. Here we define two variables which
 
58
  :: control this behaviour.
 
59
  :: [dpiXXX is used for TDS compatible TeX trees.]
 
60
  set pre_dpi=dpi
 
61
  set post_dpi=
 
62
 
 
63
  :: ================================================
 
64
  :: ======== End of user defined variables. ========
 
65
  :: ================================================
 
66
 
 
67
  :: the base name for log files etc.
 
68
  set basename=%@name[%1]
 
69
 
 
70
  :: do we run dvips?
 
71
  iff "%basename" ne "dvips" then
 
72
    goto nodvips1
 
73
  endiff
 
74
 
 
75
  :: we delete dvips.mfj if it exists.
 
76
  del dvips.mfj >& nul
 
77
 
 
78
  :: now we run dvips with all supplied parameters.
 
79
  %&
 
80
 
 
81
  :: do we have to generate fonts?
 
82
  iff exist dvips.mfj then
 
83
    goto generate_fonts
 
84
  endiff
 
85
 
 
86
  :: else all is done.
 
87
  goto end
 
88
 
 
89
 
 
90
:nodvips1
 
91
  :: here we call the dvi driver with all supplied parameters.
 
92
  %& -pj:%basename.mfj
 
93
 
 
94
  :: do we have to generate fonts?
 
95
  iff errorlevel 8 then
 
96
    goto generate_fonts
 
97
  endiff
 
98
 
 
99
  :: else all is done.
 
100
  goto end
 
101
 
 
102
 
 
103
:generate_fonts
 
104
  gosub call_mfjob
 
105
 
 
106
  :: do we run dvips?
 
107
  iff "%basename" ne "dvips" then
 
108
    goto nodvips2
 
109
  endiff
 
110
 
 
111
  :: we now call dvips a second time
 
112
  %&
 
113
 
 
114
  :: since no fonts will be generated in the second run we remove dvips.mfj
 
115
  del dvips.mfj >& nul
 
116
 
 
117
  goto end
 
118
 
 
119
 
 
120
:nodvips2
 
121
  :: we call the dvi driver a second time (without font generation).
 
122
  %& -pj -fm
 
123
 
 
124
  del %basename.mfj >& nul
 
125
 
 
126
  goto end
 
127
 
 
128
 
 
129
:: this is the main subroutine which calls mfjob and then parses the mfjob
 
130
:: file for fonts which can be handled by ps2pk, ttf2pk, or hbf2gf.
 
131
:call_mfjob
 
132
  :: this alias prints a message on the screen and writes it into the logfile.
 
133
  alias echolog=`echo %& | tee /a %basename.mlg`
 
134
 
 
135
  echo ======== DVIDRV.BTM logfile ========  > %basename.mlg
 
136
  echo Commandline: dvidrv.btm %&           >> %basename.mlg
 
137
  echo ``                                   >> %basename.mlg
 
138
  echo basename=%basename                   >> %basename.mlg
 
139
  echo emtexdir=%emtexdir                   >> %basename.mlg
 
140
  echo dvidrvfonts=%dvidrvfonts             >> %basename.mlg
 
141
  echo mfinput=%mfinput                     >> %basename.mlg
 
142
  echo mfjobopt=%mfjobopt                   >> %basename.mlg
 
143
  echo textfm=%textfm                       >> %basename.mlg
 
144
  echo psfonts=%psfonts                     >> %basename.mlg
 
145
  echo ttfonts=%ttfonts                     >> %basename.mlg
 
146
  echo ttfcfg=%ttfcfg                       >> %basename.mlg
 
147
  echo hbfonts=%hbfonts                     >> %basename.mlg
 
148
  echo hbfcfg=%hbfcfg                       >> %basename.mlg
 
149
  echo ``                                   >> %basename.mlg
 
150
 
 
151
  iff "%@search[mfjob]" eq "" then
 
152
    echolog MFJOB not found in the path.
 
153
    echolog Can't generate PK fonts from METAFONT automatically.
 
154
    echo ``
 
155
    quit
 
156
  endiff
 
157
 
 
158
  :: now we call mfjob.
 
159
  echolog mfjob %mfjobopt -g%basename.mfl %basename.mfj
 
160
  mfjob %mfjobopt -g%basename.mfl %basename.mfj
 
161
  iff %? gt 0 then
 
162
    echolog ``
 
163
    echolog Something went wrong while running METAFONT.
 
164
    echolog Look into the log files...
 
165
    echolog ``
 
166
  endiff
 
167
 
 
168
  :: after running mfjob we scan the mfjob input file for fonts which can
 
169
  :: be handled by ps2pk, ttf2pk, or hbf2gf.
 
170
  set lnnr=0
 
171
  set totlines=%@lines[%basename.mfj]
 
172
 
 
173
  do while %lnnr le %totlines
 
174
    :: input a line.
 
175
    set scratch=%@line[%basename.mfj,%lnnr]
 
176
    set lnnr=%@inc[%lnnr]
 
177
 
 
178
    :: get resolutions (METAFONT mode will be ignored).
 
179
    :: example:
 
180
    ::   mode=lqlores[180 180];
 
181
    iff %@index[%scratch,mode] ge 0 then
 
182
      set temp=%@word["[]",1,%scratch]
 
183
      set xdpi=%@word[0,%temp]
 
184
      set ydpi=%@word[1,%temp]
 
185
    endiff
 
186
 
 
187
    :: get fontname and magnification; we then compute the font resolutions
 
188
    :: (rounded to the nearest integer---there is no necessity to adjust
 
189
    :: these values further because of possible rounding errors since both
 
190
    :: emTeX's dvi drivers and dvips check neighbored values too).
 
191
    :: example:
 
192
    ::   {font=cmr10; mag=0.5;}
 
193
    iff %@index[%scratch,{font] ge 0 then
 
194
      set testfont=%@word["=;",1,%scratch]
 
195
      set temp=%@word["=;",3,%scratch]
 
196
      :: we use highest arithmetic precision for these calculations.
 
197
      :: Additionally we write 1/2 instead of 0.5 to avoid problems with
 
198
      :: countries which use a comma instead of a colon as the decimal
 
199
      :: separator.
 
200
      set fontresx=%@int[%@eval[%xdpi*%temp+1/2=8]]
 
201
      set fontresy=%@int[%@eval[%ydpi*%temp+1/2=8]]
 
202
      set pksubdir=modeless\%[pre_dpi]%[fontresx]%post_dpi
 
203
 
 
204
      set success=0
 
205
 
 
206
      :: check whether %testfont leads to a PS font (we call ps2pkmfj).
 
207
      iff %success == 0 .and. "%ps2pk" eq "yes" then
 
208
        gosub call_ps2pk
 
209
      endiff
 
210
 
 
211
      :: check whether %testfont leads to a TrueType font.
 
212
      iff %success == 0 .and. "%ttf2pk" eq "yes" then
 
213
        gosub call_ttf2pk
 
214
      endiff
 
215
 
 
216
      :: check whether %testfont leads to a HBF file.
 
217
      iff %success == 0 .and. "%hbf2gf" eq "yes" then
 
218
        gosub call_hbf2gf
 
219
      endiff
 
220
    endiff
 
221
  enddo
 
222
 
 
223
  iff exist %basename.mfp then
 
224
    echo ``                              >> %basename.mlg
 
225
    echo ``                              >> %basename.mlg
 
226
    echo ======== PS2PK logfile ======== >> %basename.mlg
 
227
    echo ``                              >> %basename.mlg
 
228
    type %basename.mfp                   >> %basename.mlg
 
229
    echo ``                              >> %basename.mlg
 
230
    del %basename.mfp >& nul
 
231
  endiff
 
232
 
 
233
  iff exist %basename.mfl then
 
234
    echo ``                              >> %basename.mlg
 
235
    type %basename.mfl                   >> %basename.mlg
 
236
    echo ``                              >> %basename.mlg
 
237
    del %basename.mfl >& nul
 
238
  endiff
 
239
 
 
240
  return
 
241
 
 
242
 
 
243
:call_ttf2pk
 
244
  iff "%@search[ttf2pk]" eq "" then
 
245
    echolog TTF2PK not found in the path.
 
246
    echolog Can't generate PK fonts from TrueType fonts automatically.
 
247
    echo ``
 
248
    quit
 
249
  endiff
 
250
 
 
251
  echolog ttf2pk -q -n %testfont %fontresx
 
252
  ttf2pk -q -n %testfont %fontresx
 
253
 
 
254
  iff %? == 0 then
 
255
    echolog Font %pkdir\%pksubdir\%testfont.pk generated.
 
256
    mkdir /s %pkdir\%pksubdir >& nul
 
257
    move %testfont.pk %pkdir\%pksubdir >& nul
 
258
    set success=1
 
259
  elseiff %? == 2 then
 
260
    echolog (%lnnr/%totlines): Font %testfont is no TrueType font.
 
261
    set success=0
 
262
  else
 
263
    echolog Error running TTF2PK for font %testfont!
 
264
  endiff
 
265
 
 
266
  return
 
267
 
 
268
 
 
269
:call_hbf2gf
 
270
  iff "%@search[hbf2gf]" eq "" then
 
271
    echolog HBF2GF not found in the path.
 
272
    echolog Can't generate PK fonts from HBF files automatically.
 
273
    echo ``
 
274
    quit
 
275
  endiff
 
276
 
 
277
  echolog hbf2gf -q -p -n %testfont %fontresx %fontresy
 
278
  hbf2gf -q -p -n %testfont %fontresx %fontresy
 
279
 
 
280
  iff %? == 0 then
 
281
    echolog Font %pkdir\%pksubdir\%testfont.pk generated.
 
282
    mkdir /s %pkdir\%pksubdir >& nul
 
283
    gftopk %testfont.gf %testfont.pk
 
284
    move %testfont.pk %pkdir\%pksubdir >& nul
 
285
    del %testfont.gf >& nul
 
286
    set success=1
 
287
  elseiff %? == 2 then
 
288
    echolog (%lnnr/%totlines): Font %testfont is no HBF.
 
289
    set success=0
 
290
  else
 
291
    echolog Error running HBF2GF for font %testfont!
 
292
  endiff
 
293
 
 
294
  return
 
295
 
 
296
 
 
297
:call_ps2pk
 
298
  iff not exist %pkdir\%pksubdir\%testfont.pk then
 
299
    iff "%@search[ps2pkmfj]" eq "" .or. "%@search[ps2pk]" eq "" then
 
300
      echolog PS2PKMFJ and/or PS2PK not found in the path.
 
301
      echolog Can't generate PK fonts from PostScript fonts automatically.
 
302
      echo ``
 
303
      quit
 
304
    endiff
 
305
 
 
306
    echolog ps2pkmfj -X%fontresx -Y%fontresy %testfont %testfont.pk
 
307
    ps2pkmfj -X%fontresx -Y%fontresy %testfont %testfont.pk | input %%pspkline
 
308
 
 
309
    iff errorlevel != 1 then
 
310
      %pspkline >> %basename.mfp
 
311
      iff %? == 0 then
 
312
        echolog Font %pkdir\%pksubdir\%testfont.pk generated.
 
313
        mkdir /s %pkdir\%pksubdir >& nul
 
314
        move %testfont.pk %pkdir\%pksubdir >& nul
 
315
        success=1
 
316
      else
 
317
        echolog Error running PS2PK for font %testfont!
 
318
      endiff
 
319
    else
 
320
      echolog (%lnnr/%totlines): Font %testfont is no PS font.
 
321
      success=0
 
322
    endiff
 
323
  else
 
324
    echolog Font %pkdir\%pksubdir\%testfont.pk already exists.
 
325
  endiff
 
326
 
 
327
  return
 
328
 
 
329
 
 
330
:end
 
331
 
 
332
endlocal
 
333
 
 
334
:: ==== end of dvidrv.btm ====