home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / X / mit / clients / xditview / page.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-07-25  |  1.4 KB  |  91 lines

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