home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / enterprs / c128 / util / 128c.arc / WFREQ.C < prev   
Text File  |  1993-03-04  |  2KB  |  100 lines

  1. #INCLUDE <STDIO.H>
  2.  
  3. #DEFINE  ═┴╪╫╧╥─  20
  4. #DEFINE  ╠┼╘╘┼╥  'A'
  5.  
  6.  
  7. STRUCT TNODE █
  8.           CHAR *WORD;
  9.           INT COUNT;
  10.           STRUCT TNODE *LEFT;
  11.           STRUCT TNODE *RIGHT;
  12.        ▌;
  13.  
  14.  
  15. MAIN()
  16.    STRUCT TNODE *ROOT, *TREE();
  17.    STATIC CHAR WORD[═┴╪╫╧╥─];
  18.    INT T;
  19.  
  20.    ROOT = ╬╒╠╠;
  21.    WHILE ((T=GETWORD(WORD, ═┴╪╫╧╥─)) != ┼╧╞)
  22.       IF (T == ╠┼╘╘┼╥)
  23.          ROOT = TREE(ROOT, WORD);
  24.    TREEPRINT(ROOT);
  25.  
  26.  
  27. STRUCT TNODE *TREE(P, W)
  28. STRUCT TNODE *P;
  29. CHAR *W;
  30.    CHAR *STRSAVE(), *MALLOC();
  31.    INT  COND;
  32.  
  33.    IF (P == ╬╒╠╠) █
  34.       P = (STRUCT TNODE *)
  35.           MALLOC (SIZEOF (STRUCT TNODE));
  36.       IF (P == ╬╒╠╠)
  37.          FULL();
  38.       P->WORD = STRSAVE(W);
  39.       P->COUNT = 1;
  40.       P->LEFT = ╬╒╠╠;
  41.       P->RIGHT = ╬╒╠╠;
  42.    ▌ ELSE IF ((COND=STRCMP(W, P->WORD)) == 0)
  43.       P->COUNT++;
  44.    ELSE IF (COND < 0)
  45.       P->LEFT = TREE(P->LEFT, W);
  46.    ELSE
  47.       P->RIGHT = TREE(P->RIGHT, W);
  48.    RETURN(P);
  49.  
  50.  
  51. TREEPRINT (P)
  52. STRUCT TNODE *P;
  53.    IF (P != ╬╒╠╠) █
  54.       TREEPRINT(P->LEFT);
  55.       PRINTF ("%4D %S\N", P->COUNT, P->WORD);
  56.       TREEPRINT(P->RIGHT);
  57.    ▌
  58.  
  59.  
  60. GETWORD(W, LIM)
  61. CHAR *W;
  62.    INT C;
  63.  
  64.    IF (!ISALPHA((C=GETCHAR(), *W++=C))) █
  65.       *W = '\0';
  66.       RETURN (C);
  67.    ▌ 
  68.    WHILE (--LIM)
  69.       IF (!ISALNUM(*W++=GETCHAR()))
  70.          BREAK;
  71.    *(W-1) = '\0';
  72.    RETURN (╠┼╘╘┼╥);
  73.  
  74.  
  75. CHAR *STRSAVE(S)
  76. CHAR *S;
  77.    CHAR *P, *MALLOC();
  78.  
  79.    IF ((P=MALLOC(STRLEN(S)+1)) == ╬╒╠╠)
  80.       FULL();
  81.    STRCPY (P, S);
  82.    RETURN(P);
  83.  
  84.  
  85. FULL()
  86.    PRINTF ("INPUT TOO BIG\N");
  87.    EXIT();
  88.