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