Current Path : /usr/src/contrib/groff/src/devices/xditview/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //usr/src/contrib/groff/src/devices/xditview/page.c |
/* * page.c * * map page numbers to file position */ #include <X11/Xos.h> #include <X11/IntrinsicP.h> #include <X11/StringDefs.h> #include <stdio.h> #include <ctype.h> #include "DviP.h" #ifdef X_NOT_STDC_ENV extern long ftell(); #endif static DviFileMap * MapPageNumberToFileMap (DviWidget dw, int number) { DviFileMap *m; for (m = dw->dvi.file_map; m; m=m->next) if (m->page_number == number) break; return m; } void DestroyFileMap (DviFileMap *m) { DviFileMap *next; for (; m; m = next) { next = m->next; XtFree ((char *) m); } } void ForgetPagePositions (DviWidget dw) { DestroyFileMap (dw->dvi.file_map); dw->dvi.file_map = 0; } void RememberPagePosition(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); } long SearchPagePosition (DviWidget dw, int number) { DviFileMap *m; if (!(m = MapPageNumberToFileMap (dw, number))) return -1; return m->position; } void FileSeek(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); }