static void extract (SCAN * scan, char buffer [], size_t length) { scanuntil (scan, gcsSpace ".,;"); copytoken (scan, buffer, length); noversion (buffer); return; }
static void function (FIND * find, flag_t flags) { if (! match (find->filename, find->wildcard)) { return; } if (efreopen (find->fullname, "rb", stdin)) { SCAN scan; char package [FILENAME_MAX]; char scratch [FILENAME_MAX]; char buffer [TEXTLINE_MAX]; size_t line; scaninput (& scan, buffer, sizeof (buffer)); for (line = 0; ~ fgetline (buffer, sizeof (buffer), stdin); line++) { scanwhile (& scan, gcsASCIIAlpha "."); scanbreak (& scan, ":"); if (havetoken (& scan, "Name:")) { scanuntil (& scan, gcsBreak); extract (& scan, package, sizeof (package)); } else if (havetoken (& scan, "Requires:")) { while (tokensize (& scan)) { if (isclass (& scan, "A")) { extract (& scan, scratch, sizeof (scratch)); printf ("\"%s\",\"%s\"\n", package, scratch); } nexttoken (& scan); } } else if (havetoken (& scan, "Requires.private:")) { while (tokensize (& scan)) { if (isclass (& scan, "A")) { extract (& scan, scratch, sizeof (scratch)); printf ("\"%s\",\"%s\"\n", package, scratch); } nexttoken (& scan); } } scanstart (& scan); } } return; }
void scanblock (SCAN * content, const char *literal) { while ((content->final < content->limit) && (*content->final != *literal)) { literal++; scanuntil (content, literal); scanbreak (content, literal); literal--; } nextbreak (content); return; }