home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
enterprs
/
c128
/
util
/
128c.arc
/
WFREQ.C
< prev
Wrap
Text File
|
1993-03-04
|
2KB
|
100 lines
#INCLUDE <STDIO.H>
#DEFINE ═┴╪╫╧╥─ 20
#DEFINE ╠┼╘╘┼╥ 'A'
STRUCT TNODE █
CHAR *WORD;
INT COUNT;
STRUCT TNODE *LEFT;
STRUCT TNODE *RIGHT;
▌;
MAIN()
█
STRUCT TNODE *ROOT, *TREE();
STATIC CHAR WORD[═┴╪╫╧╥─];
INT T;
ROOT = ╬╒╠╠;
WHILE ((T=GETWORD(WORD, ═┴╪╫╧╥─)) != ┼╧╞)
IF (T == ╠┼╘╘┼╥)
ROOT = TREE(ROOT, WORD);
TREEPRINT(ROOT);
▌
STRUCT TNODE *TREE(P, W)
STRUCT TNODE *P;
CHAR *W;
█
CHAR *STRSAVE(), *MALLOC();
INT COND;
IF (P == ╬╒╠╠) █
P = (STRUCT TNODE *)
MALLOC (SIZEOF (STRUCT TNODE));
IF (P == ╬╒╠╠)
FULL();
P->WORD = STRSAVE(W);
P->COUNT = 1;
P->LEFT = ╬╒╠╠;
P->RIGHT = ╬╒╠╠;
▌ ELSE IF ((COND=STRCMP(W, P->WORD)) == 0)
P->COUNT++;
ELSE IF (COND < 0)
P->LEFT = TREE(P->LEFT, W);
ELSE
P->RIGHT = TREE(P->RIGHT, W);
RETURN(P);
▌
TREEPRINT (P)
STRUCT TNODE *P;
█
IF (P != ╬╒╠╠) █
TREEPRINT(P->LEFT);
PRINTF ("%4D %S\N", P->COUNT, P->WORD);
TREEPRINT(P->RIGHT);
▌
▌
GETWORD(W, LIM)
CHAR *W;
█
INT C;
IF (!ISALPHA((C=GETCHAR(), *W++=C))) █
*W = '\0';
RETURN (C);
▌
WHILE (--LIM)
IF (!ISALNUM(*W++=GETCHAR()))
BREAK;
*(W-1) = '\0';
RETURN (╠┼╘╘┼╥);
▌
CHAR *STRSAVE(S)
CHAR *S;
█
CHAR *P, *MALLOC();
IF ((P=MALLOC(STRLEN(S)+1)) == ╬╒╠╠)
FULL();
STRCPY (P, S);
RETURN(P);
▌
FULL()
█
PRINTF ("INPUT TOO BIG\N");
EXIT();
▌