areaeditor/
/*
** AreaEditor - a program for editing SMAUG and ROM area files.
** Author: Nick Gammon
** http://www.gammon.com.au/
** See Copyright Notice at the end of AreaEditor.h
*/

#include "stdafx.h"
#include "AreaEditor.h"

static CStringArray FirstNames;
static CStringArray MiddleNames;
static CStringArray LastNames;

bool bNamesRead = false;

void ReadNames (void)
  {

  bNamesRead = false;

	try
	  {

    CString sBuf;
    BOOL bOK;

    FirstNames.RemoveAll ();
    MiddleNames.RemoveAll ();
    LastNames.RemoveAll ();

	  CFileDialog	dlg(TRUE,						// TRUE for FileOpen
					  "txt",						// default extension
					  "names.txt",						// initial file name
					  OFN_HIDEREADONLY|OFN_FILEMUSTEXIST,
					  "Text files (*.txt)|*.txt|All files (*.*)|*.*||");
	  dlg.m_ofn.lpstrTitle = "Select names file";
	  if (dlg.DoModal() != IDOK)
		  return;

    CStdioFile f (dlg.GetPathName(), CFile::modeRead|CFile::shareDenyNone|CFile::typeText);
  
    // look for [start]
    while (bOK = f.ReadString (sBuf))
      {
      sBuf.TrimRight ();
      sBuf.TrimLeft ();
      if (sBuf.CompareNoCase ("[start]") == 0)
        break;
      }
    if (!bOK)
      ThrowErrorException ("No [start] in names file");

    // look for [middle]
    while (bOK = f.ReadString (sBuf))
      {
      sBuf.TrimRight ();
      sBuf.TrimLeft ();
      if (sBuf.CompareNoCase ("[middle]") == 0)
        break;
      else
        FirstNames.Add (sBuf);
      }
    if (!bOK)
      ThrowErrorException ("No [middle] in names file");

    // look for [end]
    while (bOK = f.ReadString (sBuf))
      {
      sBuf.TrimRight ();
      sBuf.TrimLeft ();
      if (sBuf.CompareNoCase ("[end]") == 0)
        break;
      else
        MiddleNames.Add (sBuf);
      }
    if (!bOK)
      ThrowErrorException ("No [end] in names file");

    // look for [stop]
    while (bOK = f.ReadString (sBuf))
      {
      sBuf.TrimRight ();
      sBuf.TrimLeft ();
      if (sBuf.CompareNoCase ("[stop]") == 0)
        break;
      else
        LastNames.Add (sBuf);
      }
    if (!bOK)
      ThrowErrorException ("No [stop] in names file");
    bNamesRead = true;

    }
	catch (CException* e)
	  {
		e->ReportError();
		e->Delete();
	  }

  } // end of ReadNames

CString GenerateName (void)
  {
CString strName;

  if (!bNamesRead)
     ReadNames ();

  if (bNamesRead)
    {
    strName = FirstNames [rand () % FirstNames.GetSize ()];
    strName += MiddleNames [rand () % MiddleNames.GetSize ()];
    strName += LastNames [rand () % LastNames.GetSize ()];
    }

  return strName;

  } // end of GenerateName