Home | History | Annotate | Download | only in wcstox
      1 #include "shgetc.h"
      2 
      3 #include <stdio.h>
      4 
      5 void shinit_wcstring(struct fake_file_t *f, const wchar_t* wcs) {
      6     f->rstart = wcs;
      7     f->rpos = wcs;
      8     f->rend = wcs + wcslen(wcs);
      9     f->extra_eof = 0;
     10 }
     11 
     12 int shgetc(struct fake_file_t *f) {
     13     if (f->rpos >= f->rend) {
     14         f->extra_eof ++;
     15         return EOF;
     16     }
     17     wchar_t wc = *f->rpos++;
     18     int ch = (wc < 128) ? (int)wc : '@';
     19     return ch;
     20 }
     21 
     22 void shunget(struct fake_file_t *f) {
     23     if (f->extra_eof) {
     24         f->extra_eof--;
     25     } else if (f->rpos > f->rstart) {
     26         f->rpos--;
     27     }
     28 }
     29 
     30 void shlim(struct fake_file_t *f, off_t lim) {
     31     int off = f->rpos - f->rstart;
     32     if (off > lim)
     33         f->rpos = f->rstart + lim;
     34 
     35 }
     36 
     37 off_t shcnt(struct fake_file_t *f) {
     38     return (off_t)(f->rpos - f->rstart);
     39 }
     40