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