/* IBM_PROLOG_BEGIN_TAG */ /* This is an automatically generated prolog. */ /* */ /* gos720 src/gos/2d/XTOP/contrib/programs/xditview/page.c 1.1 */ /* */ /* Licensed Materials - Property of IBM */ /* */ /* COPYRIGHT International Business Machines Corp. 1996 */ /* All Rights Reserved */ /* */ /* US Government Users Restricted Rights - Use, duplication or */ /* disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ /* */ /* IBM_PROLOG_END_TAG */ /* SCCSID_BEGIN_TAG */ #ifndef lint static char sccsid[] = "@(#)01 1.1 src/gos/2d/XTOP/contrib/programs/xditview/page.c, xsample, gos720 10/24/96 15:08:37"; #endif /* SCCSID_END_TAG */ /* $XConsortium: page.c,v 1.5 91/07/26 00:40:20 keith Exp $ */ /* * page.c * * map page numbers to file position */ #include #include #include #include #include #include "DviP.h" #ifdef X_NOT_STDC_ENV extern long ftell(); #endif static DviFileMap * MapPageNumberToFileMap (dw, number) DviWidget dw; int number; { DviFileMap *m; for (m = dw->dvi.file_map; m; m=m->next) if (m->page_number == number) break; return m; } DestroyFileMap (m) DviFileMap *m; { DviFileMap *next; for (; m; m = next) { next = m->next; XtFree ((char *) m); } } ForgetPagePositions (dw) DviWidget dw; { DestroyFileMap (dw->dvi.file_map); dw->dvi.file_map = 0; } RememberPagePosition(dw, number) DviWidget dw; int number; { DviFileMap *m; if (!(m = MapPageNumberToFileMap (dw, number))) { m = (DviFileMap *) XtMalloc (sizeof *m); m->page_number = number; m->next = dw->dvi.file_map; dw->dvi.file_map = m; } if (dw->dvi.tmpFile) m->position = ftell (dw->dvi.tmpFile); else m->position = ftell (dw->dvi.file); } SearchPagePosition (dw, number) DviWidget dw; int number; { DviFileMap *m; if (!(m = MapPageNumberToFileMap (dw, number))) return -1; return m->position; } FileSeek(dw, position) DviWidget dw; long position; { if (dw->dvi.tmpFile) { dw->dvi.readingTmp = 1; fseek (dw->dvi.tmpFile, position, 0); } else fseek (dw->dvi.file, position, 0); }