home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / usr.bin / groff / libXdvi / page.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-06-03  |  1.3 KB  |  86 lines

  1. /*
  2.  * page.c
  3.  *
  4.  * map page numbers to file position
  5.  */
  6.  
  7. #include <X11/Xos.h>
  8. #include <X11/IntrinsicP.h>
  9. #include <X11/StringDefs.h>
  10. #include <stdio.h>
  11. #include <ctype.h>
  12. #include "DviP.h"
  13.  
  14. static DviFileMap *
  15. MapPageNumberToFileMap (dw, number)
  16.     DviWidget    dw;
  17.     int        number;
  18. {
  19.     DviFileMap    *m;
  20.  
  21.     for (m = dw->dvi.file_map; m; m=m->next)
  22.         if (m->page_number == number)
  23.             break;
  24.     return m;
  25. }
  26.  
  27. DestroyFileMap (m)
  28.     DviFileMap    *m;
  29. {
  30.     DviFileMap    *next;
  31.  
  32.     for (; m; m = next) {
  33.         next = m->next;
  34.         free ((char *) m);
  35.     }
  36. }
  37.  
  38. ForgetPagePositions (dw)
  39.     DviWidget    dw;
  40. {
  41.     DestroyFileMap (dw->dvi.file_map);
  42.     dw->dvi.file_map = 0;
  43. }
  44.  
  45. RememberPagePosition(dw, number)
  46.     DviWidget    dw;
  47.     int        number;
  48. {
  49.     extern long    ftell();
  50.     DviFileMap    *m;
  51.  
  52.     if (!(m = MapPageNumberToFileMap (dw, number))) {
  53.         m = (DviFileMap *) malloc (sizeof *m);
  54.         m->page_number = number;
  55.         m->next = dw->dvi.file_map;
  56.         dw->dvi.file_map = m;
  57.     }
  58.     if (dw->dvi.tmpFile)
  59.         m->position = ftell (dw->dvi.tmpFile);
  60.     else
  61.         m->position = ftell (dw->dvi.file);
  62. }
  63.  
  64. SearchPagePosition (dw, number)
  65.     DviWidget    dw;
  66.     int        number;
  67. {
  68.     DviFileMap    *m;
  69.  
  70.     if (!(m = MapPageNumberToFileMap (dw, number)))
  71.         return -1;
  72.     return m->position;
  73. }
  74.  
  75. FileSeek(dw, position)
  76. DviWidget    dw;
  77. long        position;
  78. {
  79.     if (dw->dvi.tmpFile) {
  80.         dw->dvi.readingTmp = 1;
  81.         fseek (dw->dvi.tmpFile, position, 0);
  82.     } else
  83.         fseek (dw->dvi.file, position, 0);
  84. }
  85.  
  86.