Subversion Repositories wimsdev

Rev

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) error("Empty page.");
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) error("Bad dvi: trying to put non-existing font.");
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) error("Bad dvi: using font before defining it.");
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) error("Font number exceeded design capacity.");
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) error("Bad dvi: bad font name.");
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
              error("Font panick: even cmr10 cannot be found.");
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) error("dvi stack overflow.");
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) error("Bad dvi file: dvi stack underflow.");
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) error("dvi file not found.");
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: */ error("Bad dvi file header.");
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: error("Bad dvi file: pre within file.");
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: error("Bad dvi file: unknown command.");
375
                default: texgif_error("Bad dvi file: unknown command.");
376
            }
376
            }
377
        }
377
        }
378
    }
378
    }
379
    free(dvibuf);
379
    free(dvibuf);
380
}
380
}