home *** CD-ROM | disk | FTP | other *** search
- /*
- * 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 ;
- }
- }
- }
-