Listing 9

/*
 * xrt.c - cross-reference table
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "ln_seq.h"
#include "xrt.h"

struct treenode
   {
   char *word;
   ln_seq lines;
   treenode *left, *right;
   treenode(unsigned);
   ~treenode();
   };

treenode::treenode(unsigned n) : lines(n) { }

treenode::~treenode()
   {
   delete word;
   delete left;
   delete right;
   }

static treenode *addtree
      (treenode *t, char *w, unsigned n)
   {
   // same as Listing 7 ...
   }

static void printtree(treenode *t)
   {
   // same as Listing 4 ...
   }

static treenode *root = 0;

void xrt_add(char *w, unsigned n)
   {
   root = addtree(root, w, n);
   }

void xrt_destroy(void)
   {
   delete root;
   }

void xrt_print(void)
   {
   printtree(root);
   }