/*
 * word.c	This defines the interface for using words in 1down.
 *
 * Copyright (C) 1990 Rob Mayoff.
 */

#include <stdio.h>
#include <sys/file.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include "word.h"
#include "grid.h"
#include "fill.h"
#include "misc.h"

int	fd[21];
char	*word[21];
int	numWords[21];
char	frequency[50][26];
int	wordOffset[21][26][26];

void initWords(void)
{
  int	i, j, k, rc;
  char	str[200];
  struct stat	statBuf;

  for(i=3; i<21; i++)
  {
    sprintf(str, "word%d", i);
    fd[i]=open(str, O_RDONLY);
    panicif(fd[i]<0, str);
    rc=fstat(fd[i], &statBuf);
    panicif(rc<0, str);
    if(statBuf.st_size>0)
    {
      word[i]=mmap(0, statBuf.st_size, PROT_READ, MAP_PRIVATE, fd[i], 0);
      panicif(word[i]==(caddr_t)(-1), str);
    }
    numWords[i]=statBuf.st_size/i;
  }

  fd[0]=open("histogram", O_RDONLY);
  panicif(fd[0]<0, "histogram");
  rc=read(fd[0], frequency[0], 26);
  panicif(rc!=26, "histogram");
  close(fd[0]);

  for(rc=1; rc<50; rc++)
  {
    for(i=0; i<26; i++)
    {
      frequency[rc][i]=frequency[rc-1][i];
    }
    for(i=0; i<200; i++)
    {
      k=random()%25;
      j=frequency[rc][k];
      frequency[rc][k]=frequency[rc][k+1];
      frequency[rc][k+1]=j;
    }
  }

  for(i=0; i<stackTop; i++)
  {
    strncpy(stack[i].order, frequency[random()%50], 26);
  }

/*
  for(rc=0; rc<stackTop; rc++)
    for(i=0; i<26; i++)
      stack[rc].order[i]=i+'A';
*/
}
