#include <string.h>
#include "splib.h"

void dawg_pr(NODE *dawg, INDEX node, int len, int tlen)
{
  static char word[MAX_WORD_LEN];
  NODE *edge;

  for (edge = (NODE *)&dawg[node]; ; edge++) {
  long c;
    c = *edge;           /* Don't rewrite this - its avoiding a MSC bug */
    c = c >> V_LETTER;
    c = c & M_LETTER;
    word[len] = (char)c;
    if ((*edge & M_END_OF_WORD) != 0) {
      word[len+1] = '\0';
      if (strlen(word) == tlen) fprintf(stdout, "%s\n", word);
    }
    c = *edge & M_NODE_POINTER;
    if ((*edge & M_NODE_POINTER) != 0)
      dawg_pr (dawg, c, len + 1, tlen);
    if ((*edge & M_END_OF_NODE) != 0) break; /* End of node */
  }
}

int main(int argc, char **argv)
{
    NODE           *dawg;
    INDEX           nedges;
    long len;

    if ((argc != 2) || (!dawg_init("", &dawg, &nedges))) exit(EXIT_ERROR);
    len = atol(argv[1]);
    dawg_pr(dawg, (INDEX) ROOT_NODE, 0, (int)len);
    fprintf(stderr, "Finished printing dawg\n");
    exit(EXIT_OK);
}
