1uchar *ScanFill(uchar *cursor){
2    unsigned cnt = s->tok - s->bot;
3    s->pos += cursor - s->mrk;
4    if(cnt){
5        if(s->eot){
6            unsigned len = s->eot - s->tok;
7            memcpy(s->bot, s->tok, len);
8            s->eot = &s->bot[len];
9            if((len = s->lim - cursor) != 0)
10                memcpy(s->eot, cursor, len);
11            cursor = s->eot;
12            s->lim = &cursor[len];
13        } else {
14            memcpy(s->bot, s->tok, s->lim - s->tok);
15            cursor -= cnt;
16            s->lim -= cnt;
17        }
18        s->tok = s->bot;
19        s->ptr -= cnt;
20    }
21    if((s->top - s->lim) < 512){
22        uchar *buf = (uchar*) malloc(((s->lim - s->bot) + 512)*sizeof(uchar));
23        memcpy(buf, s->bot, s->lim - s->bot);
24        s->tok = buf;
25        s->ptr = &buf[s->ptr - s->bot];
26        if(s->eot)
27            s->eot = &buf[s->eot - s->bot];
28        cursor = &buf[cursor - s->bot];
29        s->lim = &buf[s->lim - s->bot];
30        s->top = &s->lim[512];
31        free(s->bot);
32        s->bot = buf;
33    }
34    s->mrk = cursor;
35    if(ScanCBIO.file){
36        if((cnt = read(ScanCBIO.u.f.fd, (char*) s->lim, 512)) != 512)
37            memset(&s->lim[cnt], 0, 512 - cnt);
38        s->lim += 512;
39    }
40    return cursor;
41}
42