|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include <ctype.h> ! 3: #include "tsort.h" ! 4: ! 5: ! 6: void ! 7: getcon(fp) ! 8: FILE *fp; ! 9: { ! 10: register char *wrd; ! 11: struct word *wordp1, *wordp2; ! 12: struct wordlist *rel; ! 13: char *getwrd(); ! 14: ! 15: for (;;) { ! 16: wrd = getwrd(fp); ! 17: if (wrd == NULL) ! 18: break; ! 19: wordp1 = insert(wrd); ! 20: wrd = getwrd(fp); ! 21: if (wrd == NULL) ! 22: die("odd number of fields input"); ! 23: wordp2 = insert(wrd); ! 24: if (wordp1 != wordp2) { ! 25: rel = newwordl(wordp1); ! 26: rel->next = wordp2->ancestors; ! 27: wordp2->ancestors = rel; ! 28: } ! 29: } ! 30: words = cmphash(); ! 31: } ! 32: ! 33: ! 34: /* ! 35: * Getwrd is used to get the next word from the FILE pointed to ! 36: * by "fp". Word is defined as non-white-space. If the end of ! 37: * file is reached, then getwrd returns an empty string. Note ! 38: * that since getwrd returns a pointer to a static area, the result ! 39: * must be copyied before the next call. ! 40: */ ! 41: ! 42: static char * ! 43: getwrd(fp) ! 44: register FILE *fp; ! 45: { ! 46: register int ch; ! 47: static char word[MAXWORD]; ! 48: register char *wrdp; ! 49: ! 50: while ((ch = getc(fp)) != EOF && isascii(ch) && isspace(ch)) ! 51: ; ! 52: if (ch == EOF) ! 53: return (NULL); ! 54: for (wrdp = word; !(isascii(ch) && isspace(ch)); ch = getc(fp)) { ! 55: if (ch == EOF) ! 56: break; ! 57: if (wrdp >= &word[MAXWORD - 1]) ! 58: die("word too long"); ! 59: *wrdp++ = ch; ! 60: } ! 61: *wrdp = '\0'; ! 62: return (word); ! 63: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.