Rev 8103 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 8103 | Rev 8195 | ||
---|---|---|---|
Line 130... | Line 130... | ||
130 | char *p; |
130 | char *p; |
131 | maxx=pagedata[pageptr].maxx; |
131 | maxx=pagedata[pageptr].maxx; |
132 | minx=pagedata[pageptr].minx; |
132 | minx=pagedata[pageptr].minx; |
133 | maxy=pagedata[pageptr].maxy; |
133 | maxy=pagedata[pageptr].maxy; |
134 | miny=pagedata[pageptr].miny; |
134 | miny=pagedata[pageptr].miny; |
135 | if(maxx<=minx || maxy<=miny) |
135 | if(maxx<=minx || maxy<=miny) texgif_error("Empty page."); |
136 | createimage(maxx-minx,maxy-miny); |
136 | createimage(maxx-minx,maxy-miny); |
137 | currentcolor=color_black; |
137 | currentcolor=color_black; |
138 | p=getenv("w_instex_color"); |
138 | p=getenv("w_instex_color"); |
139 | if(p!=NULL && *p!=0) makecolor(p); |
139 | if(p!=NULL && *p!=0) makecolor(p); |
140 | } |
140 | } |
Line 143... | Line 143... | ||
143 | void DVI_nop(void) {} |
143 | void DVI_nop(void) {} |
144 | 144 | ||
145 | int DVI_put(int p) |
145 | int DVI_put(int p) |
146 | { |
146 | { |
147 | int cc, ct, x1, x2, y1, y2; |
147 | int cc, ct, x1, x2, y1, y2; |
148 | if(d_f<0) |
148 | if(d_f<0) texgif_error("Bad dvi: trying to put non-existing font."); |
149 | if(p==0) cc=*dviptr; else cc=texint(dviptr+1,p); |
149 | if(p==0) cc=*dviptr; else cc=texint(dviptr+1,p); |
150 | dviptr+=p; |
150 | dviptr+=p; |
151 | if(cc<wfont[d_f].bc || cc>wfont[d_f].ec) return -1; |
151 | if(cc<wfont[d_f].bc || cc>wfont[d_f].ec) return -1; |
152 | dvix=rint(dviratio*d_h); dviy=rint(dviratio*d_v); |
152 | dvix=rint(dviratio*d_h); dviy=rint(dviratio*d_v); |
153 | if(pass==1) { |
153 | if(pass==1) { |
Line 208... | Line 208... | ||
208 | { |
208 | { |
209 | int fnum; |
209 | int fnum; |
210 | if(p==0) fnum=*dviptr-171; else fnum=texint(dviptr+1,p); |
210 | if(p==0) fnum=*dviptr-171; else fnum=texint(dviptr+1,p); |
211 | dviptr+=p; |
211 | dviptr+=p; |
212 | for(d_f=0; d_f<fontcnt && wfont[d_f].num!=fnum; d_f++); |
212 | for(d_f=0; d_f<fontcnt && wfont[d_f].num!=fnum; d_f++); |
213 | if(d_f>=fontcnt) |
213 | if(d_f>=fontcnt) texgif_error("Bad dvi: using font before defining it."); |
214 | } |
214 | } |
215 | 215 | ||
216 | void DVI_fnt_def(int p) |
216 | void DVI_fnt_def(int p) |
217 | { |
217 | { |
218 | int i, fnum, fdensity; |
218 | int i, fnum, fdensity; |
219 | char fname[1024]; |
219 | char fname[1024]; |
220 | unsigned long int c,s,d,a,l; |
220 | unsigned long int c,s,d,a,l; |
221 | double fratio; |
221 | double fratio; |
222 | union { unsigned long c; char C[4]; } U; |
222 | union { unsigned long c; char C[4]; } U; |
223 | 223 | ||
224 | if(fontcnt>=FONT_NUMBER_LIMIT) |
224 | if(fontcnt>=FONT_NUMBER_LIMIT) texgif_error("Font number exceeded design capacity."); |
225 | fnum=texint(++dviptr,p); dviptr+=p; |
225 | fnum=texint(++dviptr,p); dviptr+=p; |
226 | for (i = 0; i <= 3; i++) U.C[i] = dviptr[i]; |
226 | for (i = 0; i <= 3; i++) U.C[i] = dviptr[i]; |
227 | c=U.c; dviptr+=4; |
227 | c=U.c; dviptr+=4; |
228 | s=texint(dviptr,4); dviptr+=4; |
228 | s=texint(dviptr,4); dviptr+=4; |
229 | d=texint(dviptr,4); dviptr+=4; |
229 | d=texint(dviptr,4); dviptr+=4; |
230 | a=*dviptr++; l=*dviptr++; |
230 | a=*dviptr++; l=*dviptr++; |
231 | if(a+l>1000 || a+l<1) |
231 | if(a+l>1000 || a+l<1) texgif_error("Bad dvi: bad font name."); |
232 | memmove(fname,dviptr,a+l); fname[a+l]=0; dviptr+=a+l-1; |
232 | memmove(fname,dviptr,a+l); fname[a+l]=0; dviptr+=a+l-1; |
233 | if(pass==1) { |
233 | if(pass==1) { |
234 | fdensity=(double) density*((double) s/d); |
234 | fdensity=(double) density*((double) s/d); |
235 | if(loadfont(fname, c, fdensity, wfont+fontcnt)==NULL) { |
235 | if(loadfont(fname, c, fdensity, wfont+fontcnt)==NULL) { |
236 | if(loadfont("cmr10",0,fdensity,wfont+fontcnt)==NULL) |
236 | if(loadfont("cmr10",0,fdensity,wfont+fontcnt)==NULL) |
237 |
|
237 | texgif_error("Font panick: even cmr10 cannot be found."); |
238 | else fprintf(stderr,"Font %s not found; replace by cmr10.\n",fname); |
238 | else fprintf(stderr,"Font %s not found; replace by cmr10.\n",fname); |
239 | } |
239 | } |
240 | wfont[fontcnt].num=fnum; |
240 | wfont[fontcnt].num=fnum; |
241 | fratio=(double) s/wfont[fontcnt].designsize*d/65536; |
241 | fratio=(double) s/wfont[fontcnt].designsize*d/65536; |
242 | for(i=0;i<wfont[fontcnt].cnt; i++) |
242 | for(i=0;i<wfont[fontcnt].cnt; i++) |
Line 245... | Line 245... | ||
245 | } |
245 | } |
246 | } |
246 | } |
247 | 247 | ||
248 | void DVI_push(void) |
248 | void DVI_push(void) |
249 | { |
249 | { |
250 | if(dvistackptr>=DVI_STACK_LIMIT) |
250 | if(dvistackptr>=DVI_STACK_LIMIT) texgif_error("dvi stack overflow."); |
251 | dvistack[dvistackptr].h=d_h; |
251 | dvistack[dvistackptr].h=d_h; |
252 | dvistack[dvistackptr].v=d_v; |
252 | dvistack[dvistackptr].v=d_v; |
253 | dvistack[dvistackptr].w=d_w; |
253 | dvistack[dvistackptr].w=d_w; |
254 | dvistack[dvistackptr].x=d_x; |
254 | dvistack[dvistackptr].x=d_x; |
255 | dvistack[dvistackptr].y=d_y; |
255 | dvistack[dvistackptr].y=d_y; |
Line 257... | Line 257... | ||
257 | dvistackptr++; |
257 | dvistackptr++; |
258 | } |
258 | } |
259 | 259 | ||
260 | void DVI_pop(void) |
260 | void DVI_pop(void) |
261 | { |
261 | { |
262 | if(dvistackptr<=0) |
262 | if(dvistackptr<=0) texgif_error("Bad dvi file: dvi stack underflow."); |
263 | dvistackptr--; |
263 | dvistackptr--; |
264 | d_h=dvistack[dvistackptr].h; |
264 | d_h=dvistack[dvistackptr].h; |
265 | d_v=dvistack[dvistackptr].v; |
265 | d_v=dvistack[dvistackptr].v; |
266 | d_w=dvistack[dvistackptr].w; |
266 | d_w=dvistack[dvistackptr].w; |
267 | d_x=dvistack[dvistackptr].x; |
267 | d_x=dvistack[dvistackptr].x; |
Line 304... | Line 304... | ||
304 | unsigned char cc, *startpoint; |
304 | unsigned char cc, *startpoint; |
305 | char namebuf[1024]; |
305 | char namebuf[1024]; |
306 | 306 | ||
307 | snprintf(namebuf,sizeof(namebuf),"%s/texgif.dvi",tmpdir); |
307 | snprintf(namebuf,sizeof(namebuf),"%s/texgif.dvi",tmpdir); |
308 | dvilen=getfile(namebuf,&dvibuf); |
308 | dvilen=getfile(namebuf,&dvibuf); |
309 | if(dvilen<=0) |
309 | if(dvilen<=0) texgif_error("dvi file not found."); |
310 | dviptr=dvibuf; fontcnt=0; |
310 | dviptr=dvibuf; fontcnt=0; |
311 | if(*dviptr++!=dvi_pre || *dviptr++!=2) { |
311 | if(*dviptr++!=dvi_pre || *dviptr++!=2) { |
312 | /* baddvi: */ |
312 | /* baddvi: */ texgif_error("Bad dvi file header."); |
313 | } |
313 | } |
314 | num=texint(dviptr,4); dviptr+=4; |
314 | num=texint(dviptr,4); dviptr+=4; |
315 | den=texint(dviptr,4); dviptr+=4; |
315 | den=texint(dviptr,4); dviptr+=4; |
316 | mag=texint(dviptr,4); dviptr+=4; |
316 | mag=texint(dviptr,4); dviptr+=4; |
317 | cc=*dviptr++; dviptr+=cc; startpoint=dviptr; |
317 | cc=*dviptr++; dviptr+=cc; startpoint=dviptr; |
Line 366... | Line 366... | ||
366 | case dvi_xxx4: DVI_xxx(*dviptr-dvi_xxx1+1); break; |
366 | case dvi_xxx4: DVI_xxx(*dviptr-dvi_xxx1+1); break; |
367 | 367 | ||
368 | case dvi_fnt_def1: case dvi_fnt_def2: case dvi_fnt_def3: |
368 | case dvi_fnt_def1: case dvi_fnt_def2: case dvi_fnt_def3: |
369 | case dvi_fnt_def4: DVI_fnt_def(*dviptr-dvi_fnt_def1+1); break; |
369 | case dvi_fnt_def4: DVI_fnt_def(*dviptr-dvi_fnt_def1+1); break; |
370 | 370 | ||
371 | case dvi_pre: |
371 | case dvi_pre: texgif_error("Bad dvi file: pre within file."); |
372 | case dvi_post: DVI_post(); break; |
372 | case dvi_post: DVI_post(); break; |
373 | case dvi_post_post: DVI_post_post(); break; |
373 | case dvi_post_post: DVI_post_post(); break; |
374 | 374 | ||
375 | default: |
375 | default: texgif_error("Bad dvi file: unknown command."); |
376 | } |
376 | } |
377 | } |
377 | } |
378 | } |
378 | } |
379 | free(dvibuf); |
379 | free(dvibuf); |
380 | } |
380 | } |