Back to index

tetex-bin  3.0
Functions | Variables
virtualfont.c File Reference
#include "dvips.h"
#include "protos.h"

Go to the source code of this file.

Functions

void badvf P1C (char *, s)
shalfword vfbyte P1H (void)
int vfopen P1C (register fontdesctype *, fd)
fontmaptype *vfontdef P2C (integer, s, int, siz)
Boolean virtualfont P1C (register fontdesctype *, curfnt)

Variables

integer debug_flag
long bytesleft
quarterwordraster
char * vfpath
char errbuf [200]
real conv
real vconv
real alpha
int actualdpi
int vactualdpi
char * nextstring
char * maxstring
fontdesctypefonthead
Boolean noomega
static FILEvffile
static char name [50]

Function Documentation

void badvf P1C ( char *  ,
s   
)

Definition at line 41 of file virtualfont.c.

{
   (void)sprintf(errbuf,"! Bad VF file %s: %s",name,s) ;
   error(errbuf);
}

Here is the call graph for this function:

int vfopen P1C ( register fontdesctype ,
fd   
)

Definition at line 83 of file virtualfont.c.

{
   register char *n ;
#ifndef KPATHSEA
   register char *d ;
#endif

   n = fd->name ;
#ifndef KPATHSEA
   d = fd->area ;
   if (*d==0)
      d = vfpath ;
#endif
#ifdef MVSXA   /* IBM: MVS/XA */
   (void)sprintf(name, "vf(%s)", n) ;
#else
   (void)sprintf(name, "%s.vf", n) ;
#endif
#ifdef KPATHSEA
   if (0 != (vffile=search(vfpath, name, READBIN)))
#else
   if (0 != (vffile=search(d, name, READBIN)))
#endif
      return(1) ;
   if (!noomega)
#ifdef KPATHSEA
      if (0 != (vffile=search(ovfpath, n, READBIN)))
#else
      if (0 != (vffile=search(d, n, READBIN)))
#endif
         return(2) ;
   return(0) ;
}

Here is the call graph for this function:

Boolean virtualfont P1C ( register fontdesctype ,
curfnt   
)

Definition at line 165 of file virtualfont.c.

{
   register integer i ;
   register shalfword cmd ;
   register integer k ;
   register integer length ;
   register integer cc ;
   register chardesctype *cd ;
   integer scaledsize = curfnt->scaledsize ;
   integer no_of_chars=256 ;
   integer maxcc=255 ;
   register quarterword *tempr ;
   fontmaptype *fm, *newf ;
   int kindfont ;
   kindfont = vfopen(curfnt) ;  /* 1 for TeX, 2 for Omega */
   if (!kindfont)
      return (0) ;
#ifdef DEBUG
   if (dd(D_FONTS))
      (void)fprintf(stderr,"Loading virtual font %s at %.1fpt\n",
         name, (real)scaledsize/(alpha*0x100000)) ;
#endif /* DEBUG */

/*
 *   We clear out some pointers:
 */
   if (kindfont==2) {
     no_of_chars = 65536;
     curfnt->maxchars=65536;
     free(curfnt->chardesc);
     curfnt->chardesc = (chardesctype *)
                        mymalloc(65536 * (integer)sizeof(chardesctype));
   }
   for (i=0; i<no_of_chars; i++) {
      curfnt->chardesc[i].TFMwidth = 0 ;
      curfnt->chardesc[i].packptr = NULL ;
      curfnt->chardesc[i].pixelwidth = 0 ;
      curfnt->chardesc[i].flags = 0 ;
      curfnt->chardesc[i].flags2 = 0 ;
   }
   if (vfbyte()!=247)
      badvf("expected pre") ;
   if (vfbyte()!=202)
      badvf("wrong id byte") ;
   for(i=vfbyte(); i>0; i--)
      (void)vfbyte() ;
   k = vfquad() ;
   check_checksum (k, curfnt->checksum, curfnt->name);
   k = (integer)(alpha * (real)vfquad()) ;
   if (k > curfnt->designsize + 2 || k < curfnt->designsize - 2) {
      (void)sprintf(errbuf,"Design size mismatch in font %s", name) ;
      error(errbuf) ;
   }
/*
 * Now we look for font definitions.
 */
   fm = NULL ;
   while ((cmd=vfbyte())>=243) {
      if (cmd>246)
         badvf("unexpected command in preamble") ;
      newf = vfontdef(scaledsize, cmd-242) ;
      if (fm)
         fm->next = newf ;
      else curfnt->localfonts = newf ;
      fm = newf ;
      fm->next = NULL ; /* FIFO */
   }
/*
 *   Now we get down to the serious business of reading character definitions.
 */
   do {
      if (cmd==242) {
         length = vfquad() + 2 ;
         if (length<2) badvf("negative length packet") ;
         if (length>65535) badvf("packet too long") ;
         cc = vfquad() ;
         if (cc<0 || cc>=no_of_chars) badvf("character code out of range") ;
         cd = curfnt->chardesc + cc ;
         cd->TFMwidth = scalewidth(vfquad(), scaledsize) ;
      } else {
         length = cmd + 2;
         cc = vfbyte() ;
         cd = curfnt->chardesc + cc ;
         cd->TFMwidth = scalewidth(vftrio(), scaledsize) ;
      }
      maxcc = (maxcc<cc) ? cc : maxcc;
      if (cd->TFMwidth >= 0)
         cd->pixelwidth = ((integer)(conv*cd->TFMwidth+0.5)) ;
      else
         cd->pixelwidth = -((integer)(conv*-cd->TFMwidth+0.5)) ;
      cd->flags = EXISTS ;
      cd->flags2 = EXISTS ;
      if (bytesleft < length) {
#ifdef DEBUG
          if (dd(D_MEM))
             (void)fprintf(stderr,
#ifdef SHORTINT
                   "Allocating new raster memory (%ld req, %ld left)\n",
#else
                   "Allocating new raster memory (%d req, %ld left)\n",
#endif
                                length, bytesleft) ;
#endif /* DEBUG */
          if (length > MINCHUNK) {
             tempr = (quarterword *)mymalloc((integer)length) ;
             bytesleft = 0 ;
          } else {
             raster = (quarterword *)mymalloc((integer)RASTERCHUNK) ;
             tempr = raster ;
             bytesleft = RASTERCHUNK - length ;
             raster += length ;
         }
      } else {
         tempr = raster ;
         bytesleft -= length ;
         raster += length ;
      }
      cd->packptr = tempr ;
      length -= 2 ;
      *tempr++ = length / 256 ;
      *tempr++ = length % 256 ;
         for (; length>0; length--)
            *tempr++ = vfbyte() ;
      cmd = vfbyte() ;
   } while (cmd < 243) ;
   if (cmd != 248)
      badvf("missing postamble") ;
   (void)fclose(vffile) ;
   curfnt->loaded = 2 ;
   if (maxcc+1<no_of_chars) {
      curfnt->chardesc = (chardesctype *)
         xrealloc(curfnt->chardesc,
                  (maxcc+1) * (integer)sizeof(chardesctype));
      curfnt->maxchars=maxcc+1;
   }
   return (1) ;
}

Here is the call graph for this function:

shalfword vfbyte P1H ( void  ) [read]

Definition at line 48 of file virtualfont.c.

{
   register shalfword i ;

   if ((i=getc(vffile))==EOF)
      badvf("unexpected eof") ;
   return(i) ;
}
fontmaptype* vfontdef P2C ( integer  ,
s  ,
int  ,
siz   
)

Definition at line 121 of file virtualfont.c.

{
   register integer i, j, fn ;
   register fontdesctype *fp ;
   register fontmaptype *cfnt ;
   char *nam, *area ;
   integer cksum, scsize, dssize ;

   fn = vfbyte() ;
   while (siz-- > 1)
      fn = (fn << 8) + vfbyte() ;
   cfnt = (fontmaptype *)mymalloc((integer)sizeof(fontmaptype)) ;
   cfnt->fontnum = fn ;
   cksum = vfquad() ;
   scsize = scalewidth(s, vfquad()) ;
   dssize = (integer)(alpha * (real)vfquad()) ;
   i = vfbyte() ; j = vfbyte() ;
   if (nextstring + i + j > maxstring)
      error("! out of string space") ;
   area = nextstring ;
   for (; i>0; i--)
      *nextstring++ = vfbyte() ;
   *nextstring++ = 0 ;
   nam = nextstring ;
   for (; j>0; j--)
      *nextstring++ = vfbyte() ;
   *nextstring++ = 0 ;
   fp = matchfont(nam, area, scsize, (char *)0) ;
   if (fp) {
      nextstring = nam ;
      fp->checksum = cksum ;
   } else {
      fp = newfontdesc(cksum, scsize, dssize, nam, area) ;
      fp->next = fonthead ;
      fonthead = fp ;
   }
   cfnt->desc = fp ;
   return (cfnt) ;
}

Here is the call graph for this function:


Variable Documentation

Definition at line 103 of file dvips.c.

Definition at line 32 of file virtualfont.c.

long bytesleft

Definition at line 112 of file dvips.c.

Definition at line 97 of file dvips.c.

Definition at line 199 of file dvips.c.

char errbuf[200]

Definition at line 42 of file loadfont.c.

Definition at line 53 of file dvips.c.

char * maxstring

Definition at line 92 of file dvips.c.

char name[50] [static]

Definition at line 39 of file virtualfont.c.

char* nextstring

Definition at line 92 of file dvips.c.

Definition at line 115 of file dvips.c.

Definition at line 113 of file dvips.c.

Definition at line 104 of file dvips.c.

Definition at line 591 of file dvi2xx.h.

FILE* vffile [static]

Definition at line 38 of file virtualfont.c.

char* vfpath

Definition at line 137 of file dvips.c.