rem: while (ptr < lim && ISBLANK (*ptr)) ++ptr;
add: while (is_blank (*ptr)) if (++ptr == lim) return;  do { char *sep; for (sep = ptr + 1; sep != lim && ! is_blank (*sep); sep++) continue; extract_field (line, ptr, sep - ptr); if (sep == lim) return; for (ptr = sep + 1; ptr != lim && is_blank (*ptr); ptr++) continue; } while (ptr != lim);
context: xfields (struct line *line){  int i;  unsigned char *ptr0 = (unsigned char *) line->buf.buffer;  unsigned char *ptr;  unsigned char *lim;  ptr = ptr0;  lim = ptr0 + line->buf.length - 1;  if (!tab)    {      /* Skip leading blanks before the first field.  */      while (ptr < lim && ISBLANK (*ptr))	++ptr;    }  for (i = 0; ptr < lim; ++i)    {      if (tab)	{	  unsigned char *beg;	  beg = ptr;	  while (ptr < lim && *ptr != tab)	    ++ptr;	  ADD_FIELD (line, beg, ptr - beg);	  if (ptr < lim)	    ++ptr;	}      else	{	  unsigned char *beg;	  beg = ptr;	  while (ptr < lim && !ISBLANK (*ptr))	    ++ptr;	  ADD_FIELD (line, beg, ptr - beg);	  while (ptr < lim && ISBLANK (*ptr))	    ++ptr;	}    }  if (ptr != ptr0 && ((!tab && ISBLANK (ptr[-1])) || ptr[-1] == tab))    {      /* Add one more (empty) field because the last character of the	 line was a delimiter.  */      ADD_FIELD (line, NULL, 0);    }}