home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 June / SIMTEL_0692.cdr / msdos / tex / dvivga9.arc / RELDFONT.H < prev    next >
C/C++ Source or Header  |  1988-05-30  |  3KB  |  98 lines

  1. /* -*-C-*- reldfont.h */
  2. /*-->reldfont*/
  3. /**********************************************************************/
  4. /****************************** reldfont ******************************/
  5. /**********************************************************************/
  6.  
  7. void
  8. reldfont(tfontptr)        /* load (or reload) font parameters */
  9. struct font_entry *tfontptr;
  10. {
  11.     register UNSIGN16 the_char;    /* loop index */
  12.     int err_code;
  13.     register struct char_entry *tcharptr;/* temporary char_entry pointer */
  14.  
  15.     tfontptr->font_mag = (UNSIGN32)((actfact(
  16.         MAGSIZE((float)tfontptr->s/(float)tfontptr->d)) *
  17.     ((float)runmag/(float)STDMAG) *
  18.  
  19. #if    USEGLOBALMAG
  20.     actfact(mag) *
  21. #endif
  22.  
  23.     (float)RESOLUTION * 5.0) + 0.5);
  24.  
  25.     tfontptr->designsize = (UNSIGN32)0L;
  26.     tfontptr->hppp = (UNSIGN32)0L;
  27.     tfontptr->vppp = (UNSIGN32)0L;
  28.     tfontptr->min_m = (INT32)0L;
  29.     tfontptr->max_m = (INT32)0L;
  30.     tfontptr->min_n = (INT32)0L;
  31.     tfontptr->max_n = (INT32)0L;
  32.  
  33.     for (the_char = FIRSTPXLCHAR; the_char <= LASTPXLCHAR; the_char++)
  34.     {
  35.     tcharptr = &(tfontptr->ch[the_char]);
  36.     tcharptr->dx = (INT32)0L;
  37.     tcharptr->dy = (INT32)0L;
  38.     tcharptr->hp = (COORDINATE)0;
  39.     tcharptr->fontrp = -1L;
  40.     tcharptr->pxlw = (UNSIGN16)0;
  41.     tcharptr->rasters = (UNSIGN32*)NULL;
  42.     tcharptr->refcount = 0;
  43.     tcharptr->tfmw = 0L;
  44.     tcharptr->wp = (COORDINATE)0;
  45.     tcharptr->xoffp = (COORDINATE)0;
  46.     tcharptr->yoffp = (COORDINATE)0;
  47.     }
  48.  
  49.     if (tfontptr != pfontptr)
  50.     (void)openfont(tfontptr->n);
  51.  
  52.     if (fontfp == (FILE *)NULL)    /* have empty font with zero metrics */
  53.     return;
  54.  
  55.     for (;;)        /* fake one-trip loop */
  56.     {    /* test for font types PK, GF, and PXL in order of preference */
  57.         (void)REWIND(fontfp);    /* position to beginning-of-file */
  58.         if ( ((BYTE)nosignex(fontfp,(BYTE)1) == (BYTE)PKPRE) &&
  59.             ((BYTE)nosignex(fontfp,(BYTE)1) == (BYTE)PKID) )
  60.         {
  61.             tfontptr->font_type = (BYTE)FT_PK;
  62.         tfontptr->charxx = (void(*)())charpk;
  63.             err_code = readpk();
  64.         break;
  65.         }
  66.  
  67.         (void)REWIND(fontfp);    /* position to beginning-of-file */
  68.         if ( ((BYTE)nosignex(fontfp,(BYTE)1) == (BYTE)GFPRE) &&
  69.         ((BYTE)nosignex(fontfp,(BYTE)1) == (BYTE)GFID) )
  70.         {
  71.         tfontptr->font_type = (BYTE)FT_GF;
  72.         tfontptr->charxx = (void(*)())chargf;
  73.         err_code = readgf();
  74.         break;
  75.         }
  76.  
  77.     (void)REWIND(fontfp);    /* position to beginning-of-file */
  78.     if (nosignex(fontfp,(BYTE)4) == (UNSIGN32)PXLID)
  79.     {
  80.         tfontptr->font_type = (BYTE)FT_PXL;
  81.         tfontptr->charxx = (void(*)())charpxl;
  82.         err_code = readpxl();
  83.         break;
  84.     }
  85.  
  86.     err_code = (int)EOF;
  87.     break;
  88.     } /* end one-trip loop */
  89.  
  90.     if (err_code)
  91.     {
  92.         (void)sprintf(message,
  93.         "reldfont():  Font file [%s] is not a valid GF, PK, or PXL file",
  94.         tfontptr->name);
  95.         (void)fatal(message);
  96.     }
  97. }
  98.