#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;
}