893 lines
27 KiB
C++
893 lines
27 KiB
C++
#include "StdAfx.h"
|
|
|
|
//
|
|
// Handlers for Windows messages
|
|
//
|
|
BOOL MainHandleInitDialog(HWND hWnd, HWND hwndFocus, LPARAM lParam);
|
|
void MainHandleClose(HWND hWnd);
|
|
void MainHandleDestroy(HWND hWnd);
|
|
void MainHandleCommand(HWND hWnd, int id, HWND hWndControl, UINT codeNotify);
|
|
|
|
//
|
|
// Other local functions
|
|
//
|
|
BOOL CallOpenFileDialog( HWND hWnd, LPSTR szFileName );
|
|
bool ReadLine();
|
|
void DisplayValues( HWND hWnd );
|
|
HRESULT ConvertReadableToUnicode( const char *szReadable, WCHAR *szwUnicode );
|
|
|
|
// Global variables - needed to be able to read from file...
|
|
using namespace std;
|
|
typedef vector<char*> STRINGVECTOR;
|
|
|
|
STRINGVECTOR fileVector;
|
|
int fileIndex;
|
|
FILE *fStream, *fSkip, *fDelete, *fTemp;
|
|
TCHAR szAFileName[256], tempFileName[257];
|
|
BOOL bGotFile = FALSE;
|
|
TCHAR sOrth[30], sPos1A[10], sPos1B[10], sPos1C[10], sPos1D[10], sIpa1[40];
|
|
TCHAR sPos2A[10], sPos2B[10], sPos2C[10], sPos2D[10], sIpa2[40], sComments[200];
|
|
TCHAR sCurline[100], sPrevline[100];
|
|
|
|
LPARAM CALLBACK DlgProcMain(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
// Call the appropriate message handler
|
|
switch(uMsg)
|
|
{
|
|
HANDLE_MSG( hwnd, WM_INITDIALOG, MainHandleInitDialog );
|
|
HANDLE_MSG( hwnd, WM_CLOSE, MainHandleClose );
|
|
HANDLE_MSG( hwnd, WM_DESTROY, MainHandleDestroy );
|
|
HANDLE_MSG( hwnd, WM_COMMAND, MainHandleCommand );
|
|
}
|
|
|
|
// Call the default message handler.
|
|
// NOTE: Only do this on this main dialog proc. For any other dialogs,
|
|
// return TRUE, or the dialog will pop up, and not ever give up
|
|
// focus.
|
|
return DefWindowProc(hwnd, uMsg, wParam, lParam);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////
|
|
void MainHandleCommand(HWND hWnd, int id, HWND hWndControl, UINT codeNotify)
|
|
/////////////////////////////////////////////////////////////////
|
|
//
|
|
// Handle each of the WM_COMMAND messages that come in, and hand them
|
|
// off to the correct function.
|
|
//
|
|
{
|
|
char *temp, buffer[100];
|
|
|
|
switch(id)
|
|
{
|
|
case IDC_BUTTON_OPEN:
|
|
|
|
|
|
// if file already open, close it before opening a new one...
|
|
if (bGotFile) {
|
|
fclose(fSkip);
|
|
fclose(fDelete);
|
|
fileVector.clear();
|
|
}
|
|
|
|
// Do the Open File Dialog...
|
|
bGotFile = CallOpenFileDialog( hWnd, szAFileName );
|
|
|
|
if (bGotFile) {
|
|
|
|
// DO SOME REGISTRY STUFF TO LOAD THE FIRST UNEDITED WORD...
|
|
LONG lRetVal;
|
|
HKEY hkResult;
|
|
char szPosition[4] = "0";
|
|
DWORD size = 4;
|
|
|
|
lRetVal = RegCreateKeyEx( HKEY_CLASSES_ROOT, _T("LexiconFilePosition"), 0, NULL, 0,
|
|
KEY_ALL_ACCESS, NULL, &hkResult, NULL );
|
|
|
|
if( lRetVal == ERROR_SUCCESS )
|
|
{
|
|
RegQueryValueEx( hkResult, _T(szAFileName), NULL, NULL, (PBYTE)szPosition, &size );
|
|
RegCloseKey( hkResult );
|
|
}
|
|
fileIndex = atoi(szPosition);
|
|
|
|
strcpy(tempFileName, szAFileName);
|
|
strcpy((tempFileName + strlen(tempFileName)), "~");
|
|
|
|
SetDlgItemText( hWnd, IDC_EDIT_ORTH, tempFileName );
|
|
|
|
// OPEN THE FILE, AND READ IT IN TO fileVector... (also copy it into a temporary file)
|
|
if( (fStream = fopen( szAFileName, "r" )) != NULL &&
|
|
(fTemp = fopen( tempFileName, "w" )) != NULL)
|
|
{
|
|
int i = 0;
|
|
temp = new char[100];
|
|
while (fgets(temp, 100, fStream) != NULL) {
|
|
fileVector.push_back(temp);
|
|
fputs(temp, fTemp);
|
|
temp = new char[100];
|
|
}
|
|
fclose(fTemp);
|
|
fclose(fStream);
|
|
delete [] temp;
|
|
|
|
// DISPLAY THE FIRST UNEDITED WORD...
|
|
if ( ReadLine() )
|
|
DisplayValues(hWnd);
|
|
else {
|
|
strcpy(sOrth, "NO WORDS!");
|
|
DisplayValues(hWnd);
|
|
}
|
|
}
|
|
char fSkipFileName[100] = "";
|
|
char fDeleteFileName[100] = "";
|
|
strcat(fSkipFileName, szAFileName);
|
|
strcat(fSkipFileName, "skip");
|
|
strcat(fDeleteFileName, szAFileName);
|
|
strcat(fDeleteFileName, "delete");
|
|
|
|
fSkip = fopen(fSkipFileName, "a+");
|
|
fDelete = fopen(fDeleteFileName, "a+");
|
|
|
|
}
|
|
|
|
|
|
break;
|
|
|
|
case IDC_BUTTON_DONE:
|
|
|
|
if (bGotFile) {
|
|
|
|
// Check word values against their initial values...
|
|
char sCurPos1A[10], sCurPos1B[10], sCurPos1C[10], sCurPos1D[10], sCurIpa1[40];
|
|
char sCurPos2A[10], sCurPos2B[10], sCurPos2C[10], sCurPos2D[10], sCurIpa2[40], sCurComments[200];
|
|
|
|
GetDlgItemText( hWnd, IDC_EDIT_POS1A, sCurPos1A, 10 );
|
|
GetDlgItemText( hWnd, IDC_EDIT_POS1B, sCurPos1B, 10 );
|
|
GetDlgItemText( hWnd, IDC_EDIT_POS1C, sCurPos1C, 10 );
|
|
GetDlgItemText( hWnd, IDC_EDIT_POS1D, sCurPos1D, 10 );
|
|
GetDlgItemText( hWnd, IDC_EDIT_IPA1, sCurIpa1, 40 );
|
|
GetDlgItemText( hWnd, IDC_EDIT_POS2A, sCurPos2A, 10 );
|
|
GetDlgItemText( hWnd, IDC_EDIT_POS2B, sCurPos2B, 10 );
|
|
GetDlgItemText( hWnd, IDC_EDIT_POS2C, sCurPos2C, 10 );
|
|
GetDlgItemText( hWnd, IDC_EDIT_POS2D, sCurPos2D, 10 );
|
|
GetDlgItemText( hWnd, IDC_EDIT_IPA2, sCurIpa2, 40 );
|
|
GetDlgItemText( hWnd, IDC_EDIT_COMMENTS, sCurComments, 200 );
|
|
|
|
if ((strcmp(sPos1A, sCurPos1A) != 0) ||
|
|
(strcmp(sPos1B, sCurPos1B) != 0) ||
|
|
(strcmp(sPos1C, sCurPos1C) != 0) ||
|
|
(strcmp(sPos1D, sCurPos1D) != 0) ||
|
|
(strcmp(sIpa1, sCurIpa1) != 0) ||
|
|
(strcmp(sPos2A, sCurPos2A) != 0) ||
|
|
(strcmp(sPos2B, sCurPos2B) != 0) ||
|
|
(strcmp(sPos2C, sCurPos2C) != 0) ||
|
|
(strcmp(sPos2D, sCurPos2D) != 0) ||
|
|
(strcmp(sIpa2, sCurIpa2) != 0) ||
|
|
(strcmp(sComments, sCurComments) != 0)) {
|
|
|
|
// LINE WAS EDITED
|
|
strcpy(buffer, "");
|
|
strcat(buffer, sOrth);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sCurPos1A);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sCurPos1B);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sCurPos1C);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sCurPos1D);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sCurIpa1);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sCurPos2A);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sCurPos2B);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sCurPos2C);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sCurPos2D);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sCurIpa2);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sCurComments);
|
|
strcat(buffer, "\n");
|
|
|
|
char *temp = fileVector.at(fileIndex - 1);
|
|
strcpy(temp, buffer);
|
|
|
|
} else {
|
|
// LINE WAS NOT EDITED
|
|
}
|
|
|
|
// Display next word...
|
|
// First get rid of the previous word values...
|
|
strcpy(sPos1A, "");
|
|
strcpy(sPos1B, "");
|
|
strcpy(sPos1C, "");
|
|
strcpy(sPos1D, "");
|
|
strcpy(sIpa1, "");
|
|
strcpy(sPos2A, "");
|
|
strcpy(sPos2B, "");
|
|
strcpy(sPos2C, "");
|
|
strcpy(sPos2D, "");
|
|
strcpy(sIpa2, "");
|
|
strcpy(sComments, "");
|
|
|
|
if ( ReadLine() )
|
|
DisplayValues(hWnd);
|
|
else {
|
|
strcpy(sOrth, "NO WORDS LEFT!");
|
|
DisplayValues(hWnd);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case IDC_BUTTON_RESET:
|
|
|
|
DisplayValues(hWnd);
|
|
break;
|
|
|
|
case IDC_BUTTON_PREVIOUS:
|
|
|
|
// First get rid of the previous word values...
|
|
strcpy(sPos1A, "");
|
|
strcpy(sPos1B, "");
|
|
strcpy(sPos1C, "");
|
|
strcpy(sPos1D, "");
|
|
strcpy(sIpa1, "");
|
|
strcpy(sPos2A, "");
|
|
strcpy(sPos2B, "");
|
|
strcpy(sPos2C, "");
|
|
strcpy(sPos2D, "");
|
|
strcpy(sIpa2, "");
|
|
strcpy(sComments, "");
|
|
|
|
fileIndex -= 2;
|
|
ReadLine();
|
|
DisplayValues(hWnd);
|
|
break;
|
|
|
|
case IDC_BUTTON_PLAY1:
|
|
|
|
WCHAR sWIpa1[40];
|
|
char sCurIpa1[40];
|
|
GetDlgItemText( hWnd, IDC_EDIT_IPA1, sCurIpa1, 40 );
|
|
|
|
wcscpy(sWIpa1, L"<PRON IPA=\"");
|
|
ConvertReadableToUnicode(sCurIpa1, sWIpa1+11);
|
|
wcscpy((sWIpa1 + wcslen(sWIpa1)), L"\"/>a</PRON>");
|
|
|
|
cpVoice->Speak( sWIpa1, SPF_USEGLOBALDOC, NULL );
|
|
break;
|
|
|
|
case IDC_BUTTON_PLAY2:
|
|
|
|
WCHAR sWIpa2[40];
|
|
char sCurIpa2[40];
|
|
GetDlgItemText( hWnd, IDC_EDIT_IPA2, sCurIpa2, 40 );
|
|
|
|
wcscpy(sWIpa2, L"<PRON IPA=\"");
|
|
ConvertReadableToUnicode(sCurIpa2, sWIpa2+11);
|
|
wcscpy((sWIpa2 + wcslen(sWIpa2)), L"\"/>a</PRON>");
|
|
|
|
cpVoice->Speak( sWIpa2, SPF_USEGLOBALDOC, NULL );
|
|
break;
|
|
|
|
case IDC_BUTTON_SKIP:
|
|
|
|
GetDlgItemText( hWnd, IDC_EDIT_COMMENTS, sComments, 200 );
|
|
|
|
strcpy(buffer, "");
|
|
strcat(buffer, sOrth);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sPos1A);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sPos1B);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sPos1C);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sPos1D);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sIpa1);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sPos2A);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sPos2B);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sPos2C);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sPos2D);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sIpa2);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sComments);
|
|
strcat(buffer, "\n");
|
|
|
|
fputs(buffer, fSkip);
|
|
|
|
// Display next word...
|
|
// First get rid of the previous word values...
|
|
strcpy(sPos1A, "");
|
|
strcpy(sPos1B, "");
|
|
strcpy(sPos1C, "");
|
|
strcpy(sPos1D, "");
|
|
strcpy(sIpa1, "");
|
|
strcpy(sPos2A, "");
|
|
strcpy(sPos2B, "");
|
|
strcpy(sPos2C, "");
|
|
strcpy(sPos2D, "");
|
|
strcpy(sIpa2, "");
|
|
strcpy(sComments, "");
|
|
|
|
if ( ReadLine() )
|
|
DisplayValues(hWnd);
|
|
else {
|
|
strcpy(sOrth, "NO WORDS LEFT!");
|
|
DisplayValues(hWnd);
|
|
}
|
|
|
|
break;
|
|
|
|
case IDC_BUTTON_DELETE:
|
|
|
|
GetDlgItemText( hWnd, IDC_EDIT_COMMENTS, sComments, 200 );
|
|
|
|
strcpy(buffer, "");
|
|
strcat(buffer, sOrth);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sPos1A);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sPos1B);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sPos1C);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sPos1D);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sIpa1);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sPos2A);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sPos2B);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sPos2C);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sPos2D);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sIpa2);
|
|
strcat(buffer, ",");
|
|
strcat(buffer, sComments);
|
|
strcat(buffer, "\n");
|
|
|
|
fputs(buffer, fDelete);
|
|
|
|
// Display next word...
|
|
// First get rid of the previous word values...
|
|
strcpy(sPos1A, "");
|
|
strcpy(sPos1B, "");
|
|
strcpy(sPos1C, "");
|
|
strcpy(sPos1D, "");
|
|
strcpy(sIpa1, "");
|
|
strcpy(sPos2A, "");
|
|
strcpy(sPos2B, "");
|
|
strcpy(sPos2C, "");
|
|
strcpy(sPos2D, "");
|
|
strcpy(sIpa2, "");
|
|
strcpy(sComments, "");
|
|
|
|
if ( ReadLine() )
|
|
DisplayValues(hWnd);
|
|
else {
|
|
strcpy(sOrth, "NO WORDS LEFT!");
|
|
DisplayValues(hWnd);
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
|
|
///////////////////////
|
|
void DisplayValues(HWND hWnd)
|
|
///////////////////////
|
|
|
|
{
|
|
SetDlgItemText( hWnd, IDC_EDIT_ORTH, sOrth );
|
|
SetDlgItemText( hWnd, IDC_EDIT_POS1A, sPos1A );
|
|
SetDlgItemText( hWnd, IDC_EDIT_POS1B, sPos1B );
|
|
SetDlgItemText( hWnd, IDC_EDIT_POS1C, sPos1C );
|
|
SetDlgItemText( hWnd, IDC_EDIT_POS1D, sPos1D );
|
|
SetDlgItemText( hWnd, IDC_EDIT_POS2A, sPos2A );
|
|
SetDlgItemText( hWnd, IDC_EDIT_POS2B, sPos2B );
|
|
SetDlgItemText( hWnd, IDC_EDIT_POS2C, sPos2C );
|
|
SetDlgItemText( hWnd, IDC_EDIT_POS2D, sPos2D );
|
|
SetDlgItemText( hWnd, IDC_EDIT_IPA1, sIpa1 );
|
|
SetDlgItemText( hWnd, IDC_EDIT_IPA2, sIpa2 );
|
|
SetDlgItemText( hWnd, IDC_EDIT_COMMENTS, sComments );
|
|
}
|
|
|
|
////////////////////////////////
|
|
bool ReadLine()
|
|
////////////////////////////////
|
|
|
|
{
|
|
char *linePtr, sLine[100], temp[100];
|
|
|
|
linePtr = fileVector.at(fileIndex);
|
|
strcpy(sLine, linePtr);
|
|
fileIndex++;
|
|
|
|
// Get Orthography...
|
|
sscanf(sLine, "%[^,],%s", sOrth, sLine);
|
|
|
|
// Get Pos1A
|
|
sscanf(sLine, "%[^,],%s", sPos1A, temp);
|
|
if (strcmp(sPos1A, "") == 0)
|
|
sscanf(sLine, ",%s", sLine);
|
|
else
|
|
strcpy(sLine, temp);
|
|
|
|
// Get Pos1B
|
|
sscanf(sLine, "%[^,],%s", sPos1B, temp);
|
|
if (strcmp(sPos1B, "") == 0)
|
|
sscanf(sLine, ",%s", sLine);
|
|
else
|
|
strcpy(sLine, temp);
|
|
|
|
// Get Pos1C
|
|
sscanf(sLine, "%[^,],%s", sPos1C, temp);
|
|
if (strcmp(sPos1C, "") == 0)
|
|
sscanf(sLine, ",%s", sLine);
|
|
else
|
|
strcpy(sLine, temp);
|
|
|
|
// Get Pos1D
|
|
sscanf(sLine, "%[^,],%s", sPos1D, temp);
|
|
if (strcmp(sPos1D, "") == 0)
|
|
sscanf(sLine, ",%s", sLine);
|
|
else
|
|
strcpy(sLine, temp);
|
|
|
|
// Get Ipa1
|
|
sscanf(sLine, "%[^,],%s", sIpa1, temp);
|
|
if (strcmp(sIpa1, "") == 0)
|
|
sscanf(sLine, ",%s", sLine);
|
|
else
|
|
strcpy(sLine, temp);
|
|
|
|
// Get Pos2A
|
|
sscanf(sLine, "%[^,],%s", sPos2A, temp);
|
|
if (strcmp(sPos2A, "") == 0)
|
|
sscanf(sLine, ",%s", sLine);
|
|
else
|
|
strcpy(sLine, temp);
|
|
|
|
// Get Pos2B
|
|
sscanf(sLine, "%[^,],%s", sPos2B, temp);
|
|
if (strcmp(sPos2B, "") == 0)
|
|
sscanf(sLine, ",%s", sLine);
|
|
else
|
|
strcpy(sLine, temp);
|
|
|
|
// Get Pos2C
|
|
sscanf(sLine, "%[^,],%s", sPos2C, temp);
|
|
if (strcmp(sPos2C, "") == 0)
|
|
sscanf(sLine, ",%s", sLine);
|
|
else
|
|
strcpy(sLine, temp);
|
|
|
|
// Get Pos2D
|
|
sscanf(sLine, "%[^,],%s", sPos2D, temp);
|
|
if (strcmp(sPos2D, "") == 0)
|
|
sscanf(sLine, ",%s", sLine);
|
|
else
|
|
strcpy(sLine, temp);
|
|
|
|
// Get Ipa2
|
|
sscanf(sLine, "%[^,],%s", sIpa2, temp);
|
|
if (strcmp(sIpa2, "") == 0)
|
|
sscanf(sLine, ",%s", sLine);
|
|
else
|
|
strcpy(sLine, temp);
|
|
|
|
sscanf(sLine, "%[^,],%s", sComments, temp);
|
|
return true;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
HRESULT ConvertReadableToUnicode( const char *szReadable, WCHAR *szwUnicode )
|
|
//////////////////////////////////////////////////////////////////////
|
|
{
|
|
|
|
char cFirst, cSecond;
|
|
int iRIndex = 0, iUIndex = 0;
|
|
|
|
if ( szReadable == NULL )
|
|
return E_INVALIDARG;
|
|
if ( szwUnicode == NULL )
|
|
return E_POINTER;
|
|
|
|
cFirst = szReadable[iRIndex];
|
|
|
|
while (cFirst) {
|
|
|
|
if (('a' <= cFirst) && (cFirst <= 'z')) {
|
|
|
|
switch (cFirst)
|
|
{
|
|
case 'b':
|
|
szwUnicode[iUIndex] = 0x62;
|
|
break;
|
|
case 'p':
|
|
szwUnicode[iUIndex] = 0x70;
|
|
break;
|
|
case 'd':
|
|
szwUnicode[iUIndex] = 0x64;
|
|
break;
|
|
case 't':
|
|
szwUnicode[iUIndex] = 0x74;
|
|
break;
|
|
case 'g':
|
|
szwUnicode[iUIndex] = 0x261;
|
|
break;
|
|
case 'k':
|
|
szwUnicode[iUIndex] = 0x6b;
|
|
break;
|
|
case 'f':
|
|
szwUnicode[iUIndex] = 0x66;
|
|
break;
|
|
case 'v':
|
|
szwUnicode[iUIndex] = 0x76;
|
|
break;
|
|
case 's':
|
|
szwUnicode[iUIndex] = 0x73;
|
|
break;
|
|
case 'z':
|
|
szwUnicode[iUIndex] = 0x7a;
|
|
break;
|
|
case 'l':
|
|
szwUnicode[iUIndex] = 0x6c;
|
|
break;
|
|
case 'r':
|
|
szwUnicode[iUIndex] = 0x27b;
|
|
break;
|
|
case 'y':
|
|
szwUnicode[iUIndex] = 0x6a;
|
|
break;
|
|
case 'w':
|
|
szwUnicode[iUIndex] = 0x77;
|
|
break;
|
|
case 'h':
|
|
szwUnicode[iUIndex] = 0x266;
|
|
break;
|
|
case 'm':
|
|
szwUnicode[iUIndex] = 0x6d;
|
|
break;
|
|
case 'n':
|
|
szwUnicode[iUIndex] = 0x6e;
|
|
break;
|
|
case 'j':
|
|
szwUnicode[iUIndex] = 0x2a3;
|
|
break;
|
|
default:
|
|
return E_FAIL;
|
|
}
|
|
iRIndex++;
|
|
iUIndex++;
|
|
|
|
} else if (('A' <= cFirst) && (cFirst <= 'Z')) {
|
|
|
|
cSecond = szReadable[++iRIndex];
|
|
switch (cFirst)
|
|
{
|
|
case 'A':
|
|
switch (cSecond)
|
|
{
|
|
case 'A':
|
|
szwUnicode[iUIndex] = 0x61;
|
|
break;
|
|
case 'E':
|
|
szwUnicode[iUIndex] = 0xe6;
|
|
break;
|
|
case 'O':
|
|
szwUnicode[iUIndex] = 0x254;
|
|
break;
|
|
case 'X':
|
|
szwUnicode[iUIndex] = 0x259;
|
|
break;
|
|
case 'Y':
|
|
szwUnicode[iUIndex] = 0x61;
|
|
szwUnicode[++iUIndex] = 0x26a;
|
|
break;
|
|
case 'W':
|
|
szwUnicode[iUIndex] = 0x61;
|
|
szwUnicode[++iUIndex] = 0x28a;
|
|
break;
|
|
default:
|
|
return E_FAIL;
|
|
}
|
|
break;
|
|
case 'E':
|
|
switch (cSecond)
|
|
{
|
|
case 'H':
|
|
szwUnicode[iUIndex] = 0x25b;
|
|
break;
|
|
case 'R':
|
|
szwUnicode[iUIndex] = 0x25a;
|
|
break;
|
|
case 'Y':
|
|
szwUnicode[iUIndex] = 0x65;
|
|
break;
|
|
default:
|
|
return E_FAIL;
|
|
}
|
|
break;
|
|
case 'I':
|
|
switch (cSecond)
|
|
{
|
|
case 'H':
|
|
szwUnicode[iUIndex] = 0x26a;
|
|
break;
|
|
case 'Y':
|
|
szwUnicode[iUIndex] = 0x69;
|
|
break;
|
|
case 'X':
|
|
szwUnicode[iUIndex] = 0x268;
|
|
break;
|
|
default:
|
|
return E_FAIL;
|
|
}
|
|
break;
|
|
case 'U':
|
|
switch (cSecond)
|
|
{
|
|
case 'H':
|
|
szwUnicode[iUIndex] = 0x28a;
|
|
break;
|
|
case 'W':
|
|
szwUnicode[iUIndex] = 0x75;
|
|
break;
|
|
case 'X':
|
|
szwUnicode[iUIndex] = 0x28c;
|
|
break;
|
|
default:
|
|
return E_FAIL;
|
|
}
|
|
break;
|
|
case 'O':
|
|
switch (cSecond)
|
|
{
|
|
case 'Y':
|
|
szwUnicode[iUIndex] = 0x254;
|
|
szwUnicode[++iUIndex] = 0x26a;
|
|
break;
|
|
case 'W':
|
|
szwUnicode[iUIndex] = 0x6f;
|
|
szwUnicode[++iUIndex] = 0x28a;
|
|
break;
|
|
default:
|
|
return E_FAIL;
|
|
}
|
|
break;
|
|
case 'D':
|
|
switch (cSecond)
|
|
{
|
|
case 'H':
|
|
szwUnicode[iUIndex] = 0xf0;
|
|
break;
|
|
case 'X':
|
|
szwUnicode[iUIndex] = 0x74;
|
|
break;
|
|
default:
|
|
return E_FAIL;
|
|
}
|
|
break;
|
|
case 'T':
|
|
if (cSecond == 'H') {
|
|
szwUnicode[iUIndex] = 0x3b8;
|
|
break;
|
|
} else {
|
|
return E_FAIL;
|
|
}
|
|
case 'S':
|
|
if (cSecond == 'H') {
|
|
szwUnicode[iUIndex] = 0x283;
|
|
break;
|
|
} else {
|
|
return E_FAIL;
|
|
}
|
|
case 'Z':
|
|
if (cSecond == 'H') {
|
|
szwUnicode[iUIndex] = 0x292;
|
|
break;
|
|
} else {
|
|
return E_FAIL;
|
|
}
|
|
case 'C':
|
|
if (cSecond == 'H') {
|
|
szwUnicode[iUIndex] = 0x2a7;
|
|
break;
|
|
} else {
|
|
return E_FAIL;
|
|
}
|
|
default:
|
|
return E_FAIL;
|
|
}
|
|
iRIndex++;
|
|
iUIndex++;
|
|
|
|
} else {
|
|
switch (cFirst)
|
|
{
|
|
case '1':
|
|
szwUnicode[iUIndex] = 0x2c8;
|
|
break;
|
|
case '2':
|
|
szwUnicode[iUIndex] = 0x2cc;
|
|
break;
|
|
case '-':
|
|
szwUnicode[iUIndex] = 0x2d;
|
|
break;
|
|
default:
|
|
return E_FAIL;
|
|
}
|
|
iRIndex++;
|
|
iUIndex++;
|
|
}
|
|
|
|
cFirst = szReadable[iRIndex];
|
|
|
|
}
|
|
szwUnicode[iUIndex] = 0;
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////
|
|
BOOL CallOpenFileDialog( HWND hWnd, LPSTR szFileName )
|
|
/////////////////////////////////////////////////////////////////
|
|
|
|
{
|
|
OPENFILENAME ofn;
|
|
BOOL bRetVal = TRUE;
|
|
LONG lRetVal;
|
|
HKEY hkResult;
|
|
TCHAR szPath[256] = _T("");
|
|
DWORD size = 256;
|
|
|
|
// Open the last directory used by this app (stored in registry)
|
|
lRetVal = RegCreateKeyEx( HKEY_CLASSES_ROOT, _T("PathTTSDataFiles"), 0, NULL, 0,
|
|
KEY_ALL_ACCESS, NULL, &hkResult, NULL );
|
|
|
|
if( lRetVal == ERROR_SUCCESS )
|
|
{
|
|
RegQueryValueEx( hkResult, _T("TTSFiles"), NULL, NULL, (PBYTE)szPath, &size );
|
|
|
|
RegCloseKey( hkResult );
|
|
}
|
|
|
|
ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400;
|
|
ofn.hwndOwner = hWnd;
|
|
ofn.lpstrFilter = "TXT (*.txt)\0*.txt\0All Files (*.*)\0*.*\0";
|
|
ofn.lpstrCustomFilter = NULL;
|
|
ofn.nFilterIndex = 1;
|
|
ofn.lpstrInitialDir = szPath;
|
|
ofn.lpstrFile = szFileName;
|
|
ofn.nMaxFile = 256;
|
|
ofn.lpstrTitle = NULL;
|
|
ofn.lpstrFileTitle = NULL;
|
|
ofn.lpstrDefExt = NULL;
|
|
ofn.Flags = OFN_FILEMUSTEXIST | OFN_READONLY | OFN_PATHMUSTEXIST;
|
|
|
|
// Pop the dialog
|
|
bRetVal = GetOpenFileName( &ofn );
|
|
|
|
// Write the directory path you're in to the registry
|
|
TCHAR pathstr[256] = _T("");
|
|
strcpy( pathstr, szFileName );
|
|
|
|
int i=0;
|
|
while( pathstr[i] != NULL )
|
|
{
|
|
i++;
|
|
}
|
|
while( pathstr[i] != '\\' )
|
|
{
|
|
i --;
|
|
}
|
|
pathstr[i] = NULL;
|
|
|
|
// Now write the string to the registry
|
|
lRetVal = RegCreateKeyEx( HKEY_CLASSES_ROOT, _T("PathTTSDataFiles"), 0, NULL, 0,
|
|
KEY_ALL_ACCESS, NULL, &hkResult, NULL );
|
|
|
|
if( lRetVal == ERROR_SUCCESS )
|
|
{
|
|
RegSetValueEx( hkResult, _T("TTSFiles"), NULL, REG_EXPAND_SZ, (PBYTE)pathstr, strlen(pathstr)+1 );
|
|
|
|
RegCloseKey( hkResult );
|
|
}
|
|
|
|
return bRetVal;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////
|
|
BOOL MainHandleInitDialog(HWND hWnd, HWND hwndFocus, LPARAM lParam)
|
|
/////////////////////////////////////////////////////////////////
|
|
{
|
|
// Store this as the "Main Dialog"
|
|
g_hDlg = hWnd;
|
|
strcpy(sCurline, "");
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////
|
|
void MainHandleClose(HWND hWnd)
|
|
/////////////////////////////////////////////////////////////////
|
|
{
|
|
LONG lRetVal;
|
|
HKEY hkResult;
|
|
char buffer[10], *temp;
|
|
itoa(fileIndex, buffer, 10);
|
|
|
|
lRetVal = RegCreateKeyEx( HKEY_CLASSES_ROOT, _T("LexiconFilePosition"), 0, NULL, 0,
|
|
KEY_ALL_ACCESS, NULL, &hkResult, NULL );
|
|
|
|
if( lRetVal == ERROR_SUCCESS )
|
|
{
|
|
RegSetValueEx( hkResult, _T(szAFileName), NULL, REG_EXPAND_SZ, (PBYTE)buffer, strlen(buffer)+1 );
|
|
RegCloseKey( hkResult );
|
|
}
|
|
|
|
|
|
if (bGotFile) {
|
|
// Save new information back to file in a SAFE manner...
|
|
if ((fStream = fopen( szAFileName, "w" )) != NULL) {
|
|
int i = 0;
|
|
while (i < fileVector.size()) {
|
|
temp = fileVector.at(i);
|
|
fputs(temp, fStream);
|
|
i++;
|
|
}
|
|
fclose(fStream);
|
|
DeleteFile(tempFileName);
|
|
}
|
|
|
|
fclose(fDelete);
|
|
fclose(fSkip);
|
|
}
|
|
|
|
// Terminate the app
|
|
PostQuitMessage(0);
|
|
|
|
// Return success
|
|
return;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////
|
|
void MainHandleDestroy(HWND hWnd)
|
|
/////////////////////////////////////////////////////////////////
|
|
{
|
|
|
|
LONG lRetVal;
|
|
HKEY hkResult;
|
|
char buffer[10];
|
|
itoa(fileIndex, buffer, 10);
|
|
|
|
lRetVal = RegCreateKeyEx( HKEY_CLASSES_ROOT, _T("LexiconFilePosition"), 0, NULL, 0,
|
|
KEY_ALL_ACCESS, NULL, &hkResult, NULL );
|
|
|
|
if( lRetVal == ERROR_SUCCESS )
|
|
{
|
|
RegSetValueEx( hkResult, _T(szAFileName), NULL, REG_EXPAND_SZ, (PBYTE)buffer, strlen(buffer)+1 );
|
|
RegCloseKey( hkResult );
|
|
}
|
|
|
|
// Return success
|
|
return;
|
|
}
|
|
|