Rev 10 | Rev 8103 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 10 | Rev 8100 | ||
---|---|---|---|
Line 172... | Line 172... | ||
172 | if(a+l>1000 || a+l<1) error("Bad dvi: bad font name."); |
172 | if(a+l>1000 || a+l<1) error("Bad dvi: bad font name."); |
173 | memmove(fname,dviptr,a+l); fname[a+l]=0; dviptr+=a+l-1; |
173 | memmove(fname,dviptr,a+l); fname[a+l]=0; dviptr+=a+l-1; |
174 | if(pass==1) { |
174 | if(pass==1) { |
175 | fdensity=(double) density*((double) s/d); |
175 | fdensity=(double) density*((double) s/d); |
176 | if(loadfont(fname, c, fdensity, wfont+fontcnt)==NULL) { |
176 | if(loadfont(fname, c, fdensity, wfont+fontcnt)==NULL) { |
177 | if(loadfont("cmr10",0,fdensity,wfont+fontcnt)==NULL) |
177 | if(loadfont("cmr10",0,fdensity,wfont+fontcnt)==NULL) |
178 | error("Font panick: even cmr10 cannot be found."); |
178 | error("Font panick: even cmr10 cannot be found."); |
179 | else fprintf(stderr,"Font %s not found; replace by cmr10.\n",fname); |
179 | else fprintf(stderr,"Font %s not found; replace by cmr10.\n",fname); |
180 | } |
180 | } |
181 | wfont[fontcnt].num=fnum; |
181 | wfont[fontcnt].num=fnum; |
182 | fratio=(double) s/wfont[fontcnt].designsize*d/65536; |
182 | fratio=(double) s/wfont[fontcnt].designsize*d/65536; |
Line 226... | Line 226... | ||
226 | 226 | ||
227 | void DVI_xxx(int p) |
227 | void DVI_xxx(int p) |
228 | { |
228 | { |
229 | int i, t; |
229 | int i, t; |
230 | char *pp, buf[1024]; |
230 | char *pp, buf[1024]; |
231 | 231 | ||
232 | t=texint(dviptr+1,p); |
232 | t=texint(dviptr+1,p); |
233 | if(pass<2 || t>1000) {dviptr+=t+p; return;} |
233 | if(pass<2 || t>1000) {dviptr+=t+p; return;} |
234 | memmove(buf,dviptr+1+1,t); buf[t]=0; |
234 | memmove(buf,dviptr+1+1,t); buf[t]=0; |
235 | dviptr+=t+p; |
235 | dviptr+=t+p; |
236 | for(i=0;i<t;i++) buf[i]=tolower(buf[i]); |
236 | for(i=0;i<t;i++) buf[i]=tolower(buf[i]); |
237 | if(strncmp(buf,"color",5)!=0) return; |
237 | if(strncmp(buf,"color",5)!=0) return; |
238 | pp=find_word_start(buf+5); if(*pp!='=') return; |
238 | pp=find_word_start(buf+5); if(*pp!='=') return; |
239 | makecolor(pp+1); |
239 | makecolor(pp+1); |
240 | } |
240 | } |
241 | 241 | ||
242 | #include "dvicmd.c" |
242 | #include "dvicmd.c" |
243 | 243 | ||
244 | /* load and interprete dvi file */ |
244 | /* load and interprete dvi file */ |
245 | void dvi(void) |
245 | void dvi(void) |
246 | { |
246 | { |
247 | unsigned char cc, *startpoint; |
247 | unsigned char cc, *startpoint; |
248 | char namebuf[1024]; |
248 | char namebuf[1024]; |
249 | 249 | ||
250 | snprintf(namebuf,sizeof(namebuf),"%s/texgif.dvi",tmpdir); |
250 | snprintf(namebuf,sizeof(namebuf),"%s/texgif.dvi",tmpdir); |
251 | dvilen=getfile(namebuf,&dvibuf); |
251 | dvilen=getfile(namebuf,&dvibuf); |
252 | if(dvilen<=0) error("dvi file not found."); |
252 | if(dvilen<=0) error("dvi file not found."); |
253 | dviptr=dvibuf; fontcnt=0; |
253 | dviptr=dvibuf; fontcnt=0; |
254 | if(*dviptr++!=dvi_pre || *dviptr++!=2) { |
254 | if(*dviptr++!=dvi_pre || *dviptr++!=2) { |
Line 273... | Line 273... | ||
273 | } |
273 | } |
274 | switch(*dviptr) { |
274 | switch(*dviptr) { |
275 | case dvi_set1: case dvi_set2: case dvi_set3: |
275 | case dvi_set1: case dvi_set2: case dvi_set3: |
276 | case dvi_set4: DVI_set(*dviptr-dvi_set1+1); break; |
276 | case dvi_set4: DVI_set(*dviptr-dvi_set1+1); break; |
277 | case dvi_set_rule: DVI_set_rule(); break; |
277 | case dvi_set_rule: DVI_set_rule(); break; |
278 | 278 | ||
279 | case dvi_put1: case dvi_put2: case dvi_put3: |
279 | case dvi_put1: case dvi_put2: case dvi_put3: |
280 | case dvi_put4: DVI_put(*dviptr-dvi_put1+1); break; |
280 | case dvi_put4: DVI_put(*dviptr-dvi_put1+1); break; |
281 | case dvi_put_rule: DVI_put_rule(); break; |
281 | case dvi_put_rule: DVI_put_rule(); break; |
282 | 282 | ||
283 | case dvi_nop: DVI_nop(); break; |
283 | case dvi_nop: DVI_nop(); break; |
284 | case dvi_bop: DVI_bop(); break; |
284 | case dvi_bop: DVI_bop(); break; |
285 | case dvi_eop: DVI_eop(); break; |
285 | case dvi_eop: DVI_eop(); break; |
286 | case dvi_push: DVI_push(); break; |
286 | case dvi_push: DVI_push(); break; |
287 | case dvi_pop: DVI_pop(); break; |
287 | case dvi_pop: DVI_pop(); break; |
288 | 288 | ||
289 | case dvi_right1: case dvi_right2: case dvi_right3: |
289 | case dvi_right1: case dvi_right2: case dvi_right3: |
290 | case dvi_right4: DVI_move(&d_h, *dviptr-dvi_right1+1); break; |
290 | case dvi_right4: DVI_move(&d_h, *dviptr-dvi_right1+1); break; |
291 | 291 | ||
292 | case dvi_w0: case dvi_w1: case dvi_w2: case dvi_w3: |
292 | case dvi_w0: case dvi_w1: case dvi_w2: case dvi_w3: |
293 | case dvi_w4: DVI_move2(&d_h, &d_w, *dviptr-dvi_w0); break; |
293 | case dvi_w4: DVI_move2(&d_h, &d_w, *dviptr-dvi_w0); break; |
294 | case dvi_x0: case dvi_x1: case dvi_x2: case dvi_x3: |
294 | case dvi_x0: case dvi_x1: case dvi_x2: case dvi_x3: |
295 | case dvi_x4: DVI_move2(&d_h, &d_x, *dviptr-dvi_x0); break; |
295 | case dvi_x4: DVI_move2(&d_h, &d_x, *dviptr-dvi_x0); break; |
296 | 296 | ||
297 | case dvi_down1: case dvi_down2: case dvi_down3: |
297 | case dvi_down1: case dvi_down2: case dvi_down3: |
298 | case dvi_down4: DVI_move(&d_v, *dviptr-dvi_down1+1); break; |
298 | case dvi_down4: DVI_move(&d_v, *dviptr-dvi_down1+1); break; |
299 | 299 | ||
300 | case dvi_y0: case dvi_y1: case dvi_y2: case dvi_y3: |
300 | case dvi_y0: case dvi_y1: case dvi_y2: case dvi_y3: |
301 | case dvi_y4: DVI_move2(&d_v, &d_y, *dviptr-dvi_y0); break; |
301 | case dvi_y4: DVI_move2(&d_v, &d_y, *dviptr-dvi_y0); break; |
302 | case dvi_z0: case dvi_z1: case dvi_z2: case dvi_z3: |
302 | case dvi_z0: case dvi_z1: case dvi_z2: case dvi_z3: |
303 | case dvi_z4: DVI_move2(&d_v, &d_z, *dviptr-dvi_z0); break; |
303 | case dvi_z4: DVI_move2(&d_v, &d_z, *dviptr-dvi_z0); break; |
304 | 304 | ||
305 | case dvi_fnt1: case dvi_fnt2: case dvi_fnt3: |
305 | case dvi_fnt1: case dvi_fnt2: case dvi_fnt3: |
306 | case dvi_fnt4: DVI_fnt_num(*dviptr-dvi_fnt1+1); break; |
306 | case dvi_fnt4: DVI_fnt_num(*dviptr-dvi_fnt1+1); break; |
307 | 307 | ||
308 | case dvi_xxx1: case dvi_xxx2: case dvi_xxx3: |
308 | case dvi_xxx1: case dvi_xxx2: case dvi_xxx3: |
309 | case dvi_xxx4: DVI_xxx(*dviptr-dvi_xxx1+1); break; |
309 | case dvi_xxx4: DVI_xxx(*dviptr-dvi_xxx1+1); break; |
310 | 310 | ||
311 | case dvi_fnt_def1: case dvi_fnt_def2: case dvi_fnt_def3: |
311 | case dvi_fnt_def1: case dvi_fnt_def2: case dvi_fnt_def3: |
312 | case dvi_fnt_def4: DVI_fnt_def(*dviptr-dvi_fnt_def1+1); break; |
312 | case dvi_fnt_def4: DVI_fnt_def(*dviptr-dvi_fnt_def1+1); break; |
313 | 313 | ||
314 | case dvi_pre: error("Bad dvi file: pre within file."); |
314 | case dvi_pre: error("Bad dvi file: pre within file."); |
315 | case dvi_post: DVI_post(); break; |
315 | case dvi_post: DVI_post(); break; |
316 | case dvi_post_post: DVI_post_post(); break; |
316 | case dvi_post_post: DVI_post_post(); break; |
317 | 317 | ||
318 | default: error("Bad dvi file: unknown command."); |
318 | default: error("Bad dvi file: unknown command."); |
319 | } |
319 | } |
320 | } |
320 | } |
321 | } |
321 | } |
322 | free(dvibuf); |
322 | free(dvibuf); |