home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fonts 1 / freshfonts1.bin / bbs / programs / amiga / pastex13.lha / DVIPS / dvips5519.lha / dvips / dpicheck.c < prev    next >
C/C++ Source or Header  |  1993-01-19  |  2KB  |  79 lines

  1. /*
  2.  *   This software is Copyright 1988 by Radical Eye Software.
  3.  */
  4. /*
  5.  *   dpicheck of dvips.c.  Checks the dots per inch to make sure
  6.  *   it exists.  The fonts which exist are DPI at the appropriate
  7.  *   magnifications.
  8.  */
  9. #include "dvips.h"
  10. extern int actualdpi ;
  11. static integer existsizes[30] = { 0 , 99999999 } ;
  12. static int checkdpi ;
  13. /*
  14.  *   This routine adds some sizes to `existsizes'.
  15.  */
  16. void addsiz(rhsize)
  17. int rhsize ;
  18. {
  19.    register integer *p ;
  20.    long t, hsize ;
  21.  
  22.    hsize = rhsize ;
  23.    for (p=existsizes; *p < hsize; p++) ;
  24.    if (*p == hsize)
  25.       return ;
  26.    do {
  27.       t = *p ;
  28.       *p++ = hsize ;
  29.       hsize = t ;
  30.    } while (hsize) ;
  31. }
  32. void adddpi(hsize)
  33. int hsize ;
  34. {
  35.    long a, b, c ;
  36.    int i ;
  37.  
  38.    addsiz(hsize) ;
  39.    addsiz((int)((hsize * 116161L + 53020L) / 106040L)) ;
  40.    a = hsize ;
  41.    b = 0 ;
  42.    c = 1 ;
  43.    for (i=0; i<9; i++) {
  44.       b = 6 * b + (a % 5) * c ;
  45.       a = a + a / 5 ;
  46.       c = c * 5 ;
  47.       if (b > c) {
  48.          b -= c ;
  49.          a++ ;
  50.       }
  51.       if (b + b >= c)
  52.          addsiz((int)(a+1)) ;
  53.       else
  54.          addsiz((int)a) ;
  55.    }
  56. }
  57. /*
  58.  *   Finally, the routine that checks a size for match.
  59.  */
  60. halfword
  61. dpicheck(dpi)
  62. halfword dpi ;
  63. {
  64.    integer i ;
  65.    integer margin = 1 + dpi / 500 ;
  66.  
  67.    if (! checkdpi) {
  68.       adddpi(DPI) ;
  69.       checkdpi = 1 ;
  70.    }
  71.    for (i=0; existsizes[i] < dpi; i++) ;
  72.    if (existsizes[i]-dpi <= margin)
  73.       return(existsizes[i]) ;
  74.    else if (dpi-existsizes[i-1] <= margin)
  75.       return(existsizes[i-1]) ;
  76.    else
  77.       return(dpi) ;
  78. }
  79.