1151497Sru/* 2151497Sru * page.c 3151497Sru * 4151497Sru * map page numbers to file position 5151497Sru */ 6151497Sru 7151497Sru#include <X11/Xos.h> 8151497Sru#include <X11/IntrinsicP.h> 9151497Sru#include <X11/StringDefs.h> 10151497Sru#include <stdio.h> 11151497Sru#include <ctype.h> 12151497Sru#include "DviP.h" 13151497Sru 14151497Sru#ifdef X_NOT_STDC_ENV 15151497Sruextern long ftell(); 16151497Sru#endif 17151497Sru 18151497Srustatic DviFileMap * 19151497SruMapPageNumberToFileMap (DviWidget dw, int number) 20151497Sru{ 21151497Sru DviFileMap *m; 22151497Sru 23151497Sru for (m = dw->dvi.file_map; m; m=m->next) 24151497Sru if (m->page_number == number) 25151497Sru break; 26151497Sru return m; 27151497Sru} 28151497Sru 29151497Sruvoid 30151497SruDestroyFileMap (DviFileMap *m) 31151497Sru{ 32151497Sru DviFileMap *next; 33151497Sru 34151497Sru for (; m; m = next) { 35151497Sru next = m->next; 36151497Sru XtFree ((char *) m); 37151497Sru } 38151497Sru} 39151497Sru 40151497Sruvoid 41151497SruForgetPagePositions (DviWidget dw) 42151497Sru{ 43151497Sru DestroyFileMap (dw->dvi.file_map); 44151497Sru dw->dvi.file_map = 0; 45151497Sru} 46151497Sru 47151497Sruvoid 48151497SruRememberPagePosition(DviWidget dw, int number) 49151497Sru{ 50151497Sru DviFileMap *m; 51151497Sru 52151497Sru if (!(m = MapPageNumberToFileMap (dw, number))) { 53151497Sru m = (DviFileMap *) XtMalloc (sizeof *m); 54151497Sru m->page_number = number; 55151497Sru m->next = dw->dvi.file_map; 56151497Sru dw->dvi.file_map = m; 57151497Sru } 58151497Sru if (dw->dvi.tmpFile) 59151497Sru m->position = ftell (dw->dvi.tmpFile); 60151497Sru else 61151497Sru m->position = ftell (dw->dvi.file); 62151497Sru} 63151497Sru 64151497Srulong 65151497SruSearchPagePosition (DviWidget dw, int number) 66151497Sru{ 67151497Sru DviFileMap *m; 68151497Sru 69151497Sru if (!(m = MapPageNumberToFileMap (dw, number))) 70151497Sru return -1; 71151497Sru return m->position; 72151497Sru} 73151497Sru 74151497Sruvoid 75151497SruFileSeek(DviWidget dw, long position) 76151497Sru{ 77151497Sru if (dw->dvi.tmpFile) { 78151497Sru dw->dvi.readingTmp = 1; 79151497Sru fseek (dw->dvi.tmpFile, position, 0); 80151497Sru } else 81151497Sru fseek (dw->dvi.file, position, 0); 82151497Sru} 83