Listing 7

/*
 * xrt.c - cross-reference table
 */
:
struct treenode
   {
   char *word;
   ln_seq lines;
   treenode *left, *right;
   treenode(unsigned);
   };
treenode::treenode(unsigned n) : lines(n) { }

static treenode *addtree
      (treenode *t, char *w, unsigned n)
   {
   int cond;

   if (t == 0)
      {
      t = new treenode(n);
      t->word = new char[strlen(w) + 1];
      strcpy(t->word, w);
      t->left = t->right = 0;
      }
   else if ((cond = strcmp(w, t->word)) == 0)
      t->lines.add(n);
   else if (cond < 0)
      t->left = addtree(t->left, w, n);
   else
      t->right = addtree(t->right, w, n);
   return t;
   }
: