ftp.nice.ch/pub/next/text/tex/apps/TeXview-kp0.25.s.tar.gz#/TeXview-grey/fontdef.c

This is fontdef.c in view mode; [Download] [Up]

/*
 *   fontdef.c of dviamiga software package.
 *
 *  Stores the data from a font definition into the global data structures.
 *  A routine skipnop is also included to skip over nops and font definitions.
 *  It returns the first byte not a nop or font definition.
 */
#include "structures.h"
/*
 *   These are the external routines it calls.
 */
extern shalfword dvibyte() ;
extern halfword twobytes() ;
extern integer signedquad(), threebytes() ;
extern void dviseek(), skipover() ;
/*
 *   The external variables it uses:
 */
extern TeXfontdesctype *TeXfonts[] ;
extern integer curpos, thispage ;
extern int tracking ;
extern int debugon ;
long fakeeof = 2000000000 ;
/*
 *   We use mymalloc here:
 */
void *mymalloc() ;
/*
 *   fontdef takes a font definition in the dvi file and loads the data
 *   into its data structures.
 */
void fontdef()
{  register int i, j ;
   register char *p ;
   register TeXfontdesctype *fp ;
   register shalfword fn ;
   register integer t1, t2, t3 ;

   fn = dvibyte() ;
   if (TeXfonts[fn] == NULL)
   {
      t1 = signedquad() ;
      t2 = signedquad() ;
      t3 = signedquad() ;
      i = dvibyte() ;
      j = dvibyte() ;
      fp = mymalloc(sizeof(TeXfontdesctype)+i+j+1, 0L) ;
      TeXfonts[fn] = fp ;
      fp->loaded = NULL ;
      fp->checksum = t1 ;
      fp->scaledsize = t2 ;
      fp->designsize = t3 ;
      fp->thinspace = t2 / 6 ;
      p = fp->name ;
      for (; i>0; i--)
         *p++ = dvibyte() ;
      *p++ = 0 ;
      for (; j>0; j--)
         *p++ = dvibyte() ;
      *p++ = 0 ;
      for (i=0; i<256; i++)
         fp->scaledwidth[i] = 0 ;
#ifdef DEBUG
      if (debugon > 4)
         printf("Defining font %s\n", fp->name+1) ;
#endif
   } else {
      for (i = 1; i<=12; i++) dvibyte() ;
      i = dvibyte() + dvibyte() ;
      for (; i>0; i--) dvibyte() ;
   }
}
/*
 *   The next routine handles nops or font definitions between pages in a
 *   dvi file.  Returns the first command that is not a nop or font definition.
 *
 *   Now handles specials (but ignores them)
 */
int
skipnop()
{
  register int cmd ;

   if (curpos >= fakeeof)
      return -1 ;
   while (1) {
      switch(cmd=dvibyte()) {
case 138: break ;
case 239: skipover((int)dvibyte()) ; break ; /* xxx1 */
case 240: skipover((int)twobytes()) ; break ; /* xxx2 */
case 241: skipover((int)threebytes()) ; break ; /* xxx3 */
case 242: skipover((int)signedquad()) ; break ; /* xxx4 */
case 243: case 244: case 245: case 246: fontdef(cmd-242) ; break ;
default: return cmd ;
      }
   }
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.