No empty .Rs/.Re
[netbsd-mini2440.git] / gnu / dist / groff / src / devices / xditview / page.c
blobc784dd1a6db3cb1dfc1a2ed74ad9c5303103dd20
1 /* $NetBSD$ */
3 /*
4 * page.c
6 * map page numbers to file position
7 */
9 #include <X11/Xos.h>
10 #include <X11/IntrinsicP.h>
11 #include <X11/StringDefs.h>
12 #include <stdio.h>
13 #include <ctype.h>
14 #include "DviP.h"
16 #ifdef X_NOT_STDC_ENV
17 extern long ftell();
18 #endif
20 static DviFileMap *
21 MapPageNumberToFileMap (DviWidget dw, 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 void
32 DestroyFileMap (DviFileMap *m)
34 DviFileMap *next;
36 for (; m; m = next) {
37 next = m->next;
38 XtFree ((char *) m);
42 void
43 ForgetPagePositions (DviWidget dw)
45 DestroyFileMap (dw->dvi.file_map);
46 dw->dvi.file_map = 0;
49 void
50 RememberPagePosition(DviWidget dw, int number)
52 DviFileMap *m;
54 if (!(m = MapPageNumberToFileMap (dw, number))) {
55 m = (DviFileMap *) XtMalloc (sizeof *m);
56 m->page_number = number;
57 m->next = dw->dvi.file_map;
58 dw->dvi.file_map = m;
60 if (dw->dvi.tmpFile)
61 m->position = ftell (dw->dvi.tmpFile);
62 else
63 m->position = ftell (dw->dvi.file);
66 long
67 SearchPagePosition (DviWidget dw, int number)
69 DviFileMap *m;
71 if (!(m = MapPageNumberToFileMap (dw, number)))
72 return -1;
73 return m->position;
76 void
77 FileSeek(DviWidget dw, long position)
79 if (dw->dvi.tmpFile) {
80 dw->dvi.readingTmp = 1;
81 fseek (dw->dvi.tmpFile, position, 0);
82 } else
83 fseek (dw->dvi.file, position, 0);