home *** CD-ROM | disk | FTP | other *** search
/ Aminet 10 / aminetcdnumber101996.iso / Aminet / util / gnu / groff_src.lha / groff-1.10src / xditview / page.c < prev    next >
C/C++ Source or Header  |  1991-10-09  |  1KB  |  89 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. #ifdef X_NOT_STDC_ENV
  15. extern long    ftell();
  16. #endif
  17.  
  18. static DviFileMap *
  19. MapPageNumberToFileMap (dw, number)
  20.     DviWidget    dw;
  21.     int        number;
  22. {
  23.     DviFileMap    *m;
  24.  
  25.     for (m = dw->dvi.file_map; m; m=m->next)
  26.         if (m->page_number == number)
  27.             break;
  28.     return m;
  29. }
  30.  
  31. DestroyFileMap (m)
  32.     DviFileMap    *m;
  33. {
  34.     DviFileMap    *next;
  35.  
  36.     for (; m; m = next) {
  37.         next = m->next;
  38.         XtFree ((char *) m);
  39.     }
  40. }
  41.  
  42. ForgetPagePositions (dw)
  43.     DviWidget    dw;
  44. {
  45.     DestroyFileMap (dw->dvi.file_map);
  46.     dw->dvi.file_map = 0;
  47. }
  48.  
  49. RememberPagePosition(dw, number)
  50.     DviWidget    dw;
  51.     int        number;
  52. {
  53.     DviFileMap    *m;
  54.  
  55.     if (!(m = MapPageNumberToFileMap (dw, number))) {
  56.         m = (DviFileMap *) XtMalloc (sizeof *m);
  57.         m->page_number = number;
  58.         m->next = dw->dvi.file_map;
  59.         dw->dvi.file_map = m;
  60.     }
  61.     if (dw->dvi.tmpFile)
  62.         m->position = ftell (dw->dvi.tmpFile);
  63.     else
  64.         m->position = ftell (dw->dvi.file);
  65. }
  66.  
  67. SearchPagePosition (dw, number)
  68.     DviWidget    dw;
  69.     int        number;
  70. {
  71.     DviFileMap    *m;
  72.  
  73.     if (!(m = MapPageNumberToFileMap (dw, number)))
  74.         return -1;
  75.     return m->position;
  76. }
  77.  
  78. FileSeek(dw, position)
  79. DviWidget    dw;
  80. long        position;
  81. {
  82.     if (dw->dvi.tmpFile) {
  83.         dw->dvi.readingTmp = 1;
  84.         fseek (dw->dvi.tmpFile, position, 0);
  85.     } else
  86.         fseek (dw->dvi.file, position, 0);
  87. }
  88.  
  89.