home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 5 / DATAFILE_PDCD5.iso / utilities / t / tex / !dvips / Documents / Fonts / Source / c / dviinput < prev    next >
Encoding:
Text File  |  1994-10-23  |  3.1 KB  |  179 lines

  1. /*
  2.  *   Input bytes from the dvi file or the current virtual character.
  3.  *   These routines could probably be sped up significantly; but they are
  4.  *   very machine dependent, so I will leave such tuning to the installer.
  5.  *   They simply get and return bytes in batches of one, two, three, and four,
  6.  *   updating the current position as necessary.
  7.  */
  8. #include "dvips.h" /* The copyright notice in that file is included too! */
  9. void error() ;
  10. extern FILE *dvifile ;
  11. extern quarterword *curpos, *curlim ;
  12.  
  13. void
  14. abortpage()
  15. {
  16.    error("! unexpected eof on DVI file") ;
  17. }
  18.  
  19. /* Some speed ups, but only tested with RISC OS.
  20. #define ONEBYTE ((curpos ? \
  21.                 ((curpos>=curlim) ? (140) \
  22.                                   : (*curpos++)) \
  23.                         : (getc(dvifile))))
  24.  
  25. #define ONESBYTE ((curpos ? \
  26.                  ((curpos>=curlim) ? abortpack() \
  27.                                    : (*curpos++)) \
  28.                          : (getc(dvifile)|(-1<<8))))
  29.  
  30. static int
  31. abortpack()
  32. {
  33.   error("! unexpected end of virtual packet") ;
  34.   return 0;
  35. }
  36.  
  37. shalfword
  38. dvibyte()
  39. {
  40.   register shalfword i = ONEBYTE ;
  41.   if (feof(dvifile))
  42.     abortpage() ;
  43.   return(i) ;
  44. }
  45.  
  46. halfword
  47. twobytes()
  48. {
  49.   register halfword i = ONEBYTE<<8|ONEBYTE ;
  50.   if (feof(dvifile))
  51.     abortpage() ;
  52.   return(i) ;
  53. }
  54.  
  55. integer
  56. threebytes()
  57. {
  58.   register integer i = (ONEBYTE<<16)|(ONEBYTE<<8)|ONEBYTE ;
  59.   if (feof(dvifile))
  60.     abortpage() ;
  61.   return(i) ;
  62. }
  63.  
  64. shalfword
  65. signedbyte()
  66. {
  67.   register shalfword i = ONESBYTE ;
  68.   if (feof(dvifile))
  69.     abortpage() ;
  70.   return(i) ;
  71. }
  72.  
  73. shalfword
  74. signedpair()
  75. {
  76.   register shalfword i = ONESBYTE<<8 ;
  77.   i |= ONEBYTE ;
  78.   if (feof(dvifile))
  79.     abortpage() ;
  80.   return(i) ;
  81. }
  82.  
  83. integer
  84. signedtrio()
  85. {
  86.   register integer i = (ONESBYTE<<16)|(ONEBYTE<<8)|ONEBYTE ;
  87.   if (feof(dvifile))
  88.     abortpage() ;
  89.   return(i) ;
  90. }
  91.  
  92. integer
  93. signedquad()
  94. {
  95.   register integer i = (ONESBYTE<<24)|(ONEBYTE<<16)|(ONEBYTE<<8)|ONEBYTE ;
  96.   if (feof(dvifile))
  97.     abortpage() ;
  98.   return(i) ;
  99. }
  100.  
  101. void
  102. skipover(i)
  103.         int i ;
  104. {
  105.   while (i-->0) (void)dvibyte() ;
  106. } */
  107.  
  108. shalfword  /* the value returned is, however, between 0 and 255 */
  109. dvibyte()
  110. {
  111.   register shalfword i ;
  112.   if (curpos) {
  113.      if (curpos>=curlim) return((shalfword)140) ;
  114.      return (*curpos++) ;
  115.   }
  116.   if ((i=getc(dvifile))==EOF)
  117.     abortpage() ;
  118.   return(i) ;
  119. }
  120.  
  121. halfword
  122. twobytes()
  123. {
  124.   register halfword i ;
  125.   i = dvibyte() ;
  126.   return(i*256+dvibyte()) ; }
  127.  
  128. integer
  129. threebytes()
  130. {
  131.   register integer i ;
  132.   i = twobytes() ;
  133.   return(i*256+dvibyte()) ; }
  134.  
  135. shalfword
  136. signedbyte()
  137. {
  138.   register shalfword i ;
  139.   if (curpos) {
  140.      if (curpos>=curlim)
  141.        error("! unexpected end of virtual packet") ;
  142.      i = *curpos++ ;
  143.   } else if ((i=getc(dvifile))==EOF)
  144.     abortpage() ;
  145.   if (i<128) return(i) ;
  146.   else return(i-256) ;
  147. }
  148.  
  149. shalfword
  150. signedpair()
  151. {
  152.   register shalfword i ;
  153.   i = signedbyte() ;
  154.   return(i*256+dvibyte()) ;
  155. }
  156.  
  157. integer
  158. signedtrio()
  159. {
  160.   register integer i ;
  161.   i = signedpair() ;
  162.   return(i*256+dvibyte()) ;
  163. }
  164.  
  165. integer
  166. signedquad()
  167. {
  168.   register integer i ;
  169.   i = signedpair() ;
  170.   return(i*65536+twobytes()) ;
  171. }
  172.  
  173. void
  174. skipover(i)
  175.         int i ;
  176. {
  177.   while (i-->0) (void)dvibyte() ;
  178. }
  179.