Really sort alphabetically.
[dragonfly.git] / contrib / groff-1.19 / src / xditview / page.c
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 void
32 DestroyFileMap (m)
33         DviFileMap      *m;
34 {
35         DviFileMap      *next;
36
37         for (; m; m = next) {
38                 next = m->next;
39                 XtFree ((char *) m);
40         }
41 }
42
43 void
44 ForgetPagePositions (dw)
45         DviWidget       dw;
46 {
47         DestroyFileMap (dw->dvi.file_map);
48         dw->dvi.file_map = 0;
49 }
50
51 void
52 RememberPagePosition(dw, number)
53         DviWidget       dw;
54         int             number;
55 {
56         DviFileMap      *m;
57
58         if (!(m = MapPageNumberToFileMap (dw, number))) {
59                 m = (DviFileMap *) XtMalloc (sizeof *m);
60                 m->page_number = number;
61                 m->next = dw->dvi.file_map;
62                 dw->dvi.file_map = m;
63         }
64         if (dw->dvi.tmpFile)
65                 m->position = ftell (dw->dvi.tmpFile);
66         else
67                 m->position = ftell (dw->dvi.file);
68 }
69
70 long
71 SearchPagePosition (dw, number)
72         DviWidget       dw;
73         int             number;
74 {
75         DviFileMap      *m;
76
77         if (!(m = MapPageNumberToFileMap (dw, number)))
78                 return -1;
79         return m->position;
80 }
81
82 void
83 FileSeek(dw, position)
84 DviWidget       dw;
85 long            position;
86 {
87         if (dw->dvi.tmpFile) {
88                 dw->dvi.readingTmp = 1;
89                 fseek (dw->dvi.tmpFile, position, 0);
90         } else
91                 fseek (dw->dvi.file, position, 0);
92 }
93