* doc/groff.texinfo: Add documentation of most missing requests.
[s-roff.git] / src / xditview / page.c
blob9284199cde8d6d5e01b47476ff35283cf224e0af
1 /*
2 * page.c
4 * map page numbers to file position
5 */
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"
14 #ifdef X_NOT_STDC_ENV
15 extern long ftell();
16 #endif
18 static DviFileMap *
19 MapPageNumberToFileMap (dw, number)
20 DviWidget dw;
21 int number;
23 DviFileMap *m;
25 for (m = dw->dvi.file_map; m; m=m->next)
26 if (m->page_number == number)
27 break;
28 return m;
31 DestroyFileMap (m)
32 DviFileMap *m;
34 DviFileMap *next;
36 for (; m; m = next) {
37 next = m->next;
38 XtFree ((char *) m);
42 ForgetPagePositions (dw)
43 DviWidget dw;
45 DestroyFileMap (dw->dvi.file_map);
46 dw->dvi.file_map = 0;
49 RememberPagePosition(dw, number)
50 DviWidget dw;
51 int number;
53 DviFileMap *m;
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;
61 if (dw->dvi.tmpFile)
62 m->position = ftell (dw->dvi.tmpFile);
63 else
64 m->position = ftell (dw->dvi.file);
67 SearchPagePosition (dw, number)
68 DviWidget dw;
69 int number;
71 DviFileMap *m;
73 if (!(m = MapPageNumberToFileMap (dw, number)))
74 return -1;
75 return m->position;
78 FileSeek(dw, position)
79 DviWidget dw;
80 long position;
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);