#include "shgetc.h" #include void shinit_wcstring(struct fake_file_t *f, const wchar_t* wcs) { f->rstart = wcs; f->rpos = wcs; f->rend = wcs + wcslen(wcs); f->extra_eof = 0; } int shgetc(struct fake_file_t *f) { if (f->rpos >= f->rend) { f->extra_eof ++; return EOF; } wchar_t wc = *f->rpos++; int ch = (wc < 128) ? (int)wc : '@'; return ch; } void shunget(struct fake_file_t *f) { if (f->extra_eof) { f->extra_eof--; } else if (f->rpos > f->rstart) { f->rpos--; } } void shlim(struct fake_file_t *f, off_t lim) { int off = f->rpos - f->rstart; if (off > lim) f->rpos = f->rstart + lim; } off_t shcnt(struct fake_file_t *f) { return (off_t)(f->rpos - f->rstart); }