#include "global.h" /* Possibly rename */ struct FILE; /* Page cursor stack */ static FILE **hto_page = &refsfound; #define PCS_MAXPAGE 16 static size_t PCS_pos[PCS_MAXPAGE] = {0}; static size_t PCS_top = 0; long seekpage(const size_t i) { if(i > PCS_MAXPAGE - 1) { return -1; } if(i < PCS_top) { fseek(*hto_page, PCS_pos[i], SEEK_SET); return PCS_pos[i]; } fseek(*hto_page, PCS_pos[PCS_top], SEEK_SET); size_t lc = 0; while(PCS_top < i) { const char c = getc(*hto_page); if(c == '\n') { ++lc; } if(c == EOF) { return -1; } if(lc == mdisprefs) { PCS_pos[++PCS_top] = ftell(*hto_page); } } return PCS_pos[PCS_top]; } long seekrelline(unsigned i) { seekpage(current_page); size_t lc = 0; while(lc < i) { const char c = getc(*hto_page); assert("seekrelline() tried to read past the reference file" && !(c == EOF)); if(c == '\n') { ++lc; } } return ftell(*hto_page); } void PCS_reset(void) { PCS_top = 0; }