Subversion Repositories wimsdev

Rev

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);