Home | History | Annotate | Download | only in rexx
      1 uchar *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