14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------* 24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * dictTest.c * 34a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 44a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Copyright 2007, 2008 Nuance Communciations, Inc. * 54a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 64a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the 'License'); * 74a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * you may not use this file except in compliance with the License. * 84a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 94a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * You may obtain a copy of the License at * 104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 * 114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Unless required by applicable law or agreed to in writing, software * 134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * distributed under the License is distributed on an 'AS IS' BASIS, * 144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * 154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * See the License for the specific language governing permissions and * 164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * limitations under the License. * 174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *---------------------------------------------------------------------------*/ 194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ESR_Locale.h" 214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "LCHAR.h" 224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "pstdio.h" 234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "PFileSystem.h" 244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "PANSIFileSystem.h" 254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "plog.h" 264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "pmemory.h" 274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ESR_Session.h" 284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_Session.h" 294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_Vocabulary.h" 304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MAX_LINE_LENGTH 512 324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MAX_PRONS_LENGTH 1024 334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic ESR_ReturnCode InitSession ( LCHAR *parfilename ); 354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic ESR_ReturnCode ShutdownSession ( void ); 364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid usage() 384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LPRINTF("usage: dictTest [-words words.txt] [-vocab dictionary.ok] [-itest input.tst] [-out output.txt] [-locale en-us|en-gb|fr-fr|de-de] [-parfile baseline.par]\n"); 404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid doGetProns(SR_Vocabulary *vocab, LCHAR* phrase, size_t len, FILE* fout) 434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR prons[MAX_PRONS_LENGTH]; 464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = SR_VocabularyGetPronunciation(vocab, phrase, prons, &len); 484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // rc = vocab->getPronunciation(vocab, phrase, prons, &len); 494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LFPRINTF(fout,"ERROR: %s\n", ESR_rc2str(rc)); 524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else { 534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t len_used; 544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR *pron = 0; 554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for(len_used=0; len_used<len; ) { 564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project pron = &prons[0]+len_used; 574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len_used += LSTRLEN(pron)+1; 584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LFPRINTF(fout,"%s : %s\n", phrase, pron); 594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//parses the input file, runs phoneme tests and produces output to be parsed by perl script 644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectvoid doInputTestPhonemes(SR_Vocabulary *vocab, PFile* fin, FILE* fout) 654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#if 0 674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project //waste of space with all of these arrays, they are too large, but leave for now 684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR line[2 * MAX_PRONS_LENGTH]; 704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR phoneme[MAX_PRONS_LENGTH]; 714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR* phrase; 724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR* expectedPhoneme; 734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR** tokenArray; 744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t len; 754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project //read through the test file parsing it into the variables 774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project while(!pfeof(fin)) 784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project pfgets(line, MAX_LINE_LENGTH, fin); 804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_ProcessLinearToCommandLineTokens(line, &tokenArray, &len); 824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc!=ESR_SUCCESS || len!=2) 834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LFPRINTF(fout, "ERROR: INVALID FORMAT for input line\n"); 854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project continue; 864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project phrase = tokenArray[0]; 884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project expectedPhoneme = tokenArray[1]; 894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LPRINTF( "expected %s\n", expectedPhoneme); 914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = MAX_PRONS_LENGTH; 934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = vocab->getPronunciation(vocab, phrase, phoneme, &len); 944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(rc != ESR_SUCCESS) 964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LFPRINTF(fout,"ERROR: %s\n", ESR_rc2str(rc)); 974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LFPRINTF(fout,"%s|%s|%s|", phrase, expectedPhoneme, phoneme); 1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(LSTRCMP(expectedPhoneme, phoneme) == 0) 1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LFPRINTF(fout,"PASSED\n"); 1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LFPRINTF(fout,"FAILED\n"); 1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif 1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint main(int argc, char **argv) 1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR phrase[MAX_LINE_LENGTH]; 1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_Vocabulary *vocab = 0; 1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR vocabfile[MAX_LINE_LENGTH]; 1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR outfilename[MAX_LINE_LENGTH]; 1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR testfilename[MAX_LINE_LENGTH]; 1174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR parfilename[MAX_LINE_LENGTH]; 1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR wordfile[MAX_LINE_LENGTH]; 1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR locale[MAX_LINE_LENGTH]; 1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR ptemp[MAX_LINE_LENGTH]; 1214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR* p; 1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int i; 1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PFile* fin = 0; 1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FILE* fout = stdout; 1264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t len; 1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_BOOL bSession = ESR_FALSE; 1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR *env_sdk_path; 1304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR *env_lang; 1314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, PMemInit()); 1334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* CHKLOG(rc, PFileSystemCreate()); 1344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, PANSIFileSystemCreate()); 1354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, PANSIFileSystemAddPath(L("/dev/ansi"), L("/")));*/ 1364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Set ANSI file-system as default file-system */ 1384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* CHKLOG(rc, PANSIFileSystemSetDefault(ESR_TRUE));*/ 1394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Set virtual current working directory to native current working directory */ 1404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* len = P_PATH_MAX; 1414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, PANSIFileSystemGetcwd(cwd, &len)); 1424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, PFileSystemChdir(cwd));*/ 1434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fout = stdout; 1454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *vocabfile = 0; 1464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *wordfile = 0; 1474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *locale = 0; 1484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *outfilename = 0; 1494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *testfilename = 0; 1504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *parfilename = 0; 1514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* get some phrases from the user */ 1534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LPRINTF("\nDictation Test Program for esr (Nuance Communications, 2007)\n"); 1544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(argc != 1 && argc != 3 && argc != 5 && argc != 7 && argc != 9) 1564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project usage(); 1584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = 1; 1594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 1604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for(i=1; i<argc; i++) 1634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(!LSTRCMP(argv[i], L("-words"))) 1654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCPY(wordfile, argv[++i]); 1664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if(!LSTRCMP(argv[i], L("-vocab"))) 1674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCPY(vocabfile, argv[++i]); 1684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if(!LSTRCMP(argv[i], L("-locale"))) 1694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCPY(locale, argv[++i]); 1704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if(!LSTRCMP(argv[i], L("-out"))) 1714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCPY(outfilename, argv[++i]); 1724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if(!LSTRCMP(argv[i], L("-itest"))) 1734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCPY(testfilename, argv[++i]); 1744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if(!LSTRCMP(argv[i], L("-parfile")) || !LSTRCMP(argv[i], L("-par")) ) 1754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCPY(parfilename, argv[++i]); 1764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else { 1774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project usage(); 1784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = 1; 1794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 1804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( *parfilename == L('\0') ) 1844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LPRINTF ( "Warning: No parfile defined in the command line.\n" ); 1864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LPRINTF ( "Looking for the default parfile, $ESRSDK/config/$ESRLANG/baseline.par...\n" ); 1874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project env_sdk_path = LGETENV(L("ESRSDK")); 1894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( env_sdk_path != NULL ) 1904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSPRINTF ( parfilename, L("%s/config/"), env_sdk_path ); 1924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project env_lang = LGETENV(L("ESRLANG")); 1934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( env_lang != NULL ) 1944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCAT ( parfilename, env_lang ); 1964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCAT ( parfilename, L("/baseline.par") ); 1974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 1994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LPRINTF("Error: An environment variable ESRLANG should be defined.\n"); 2014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 2024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 2054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LPRINTF("Error: An environment variable ESRSDK should be defined.\n"); 2074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 2084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = InitSession( parfilename ); 2124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( rc != ESR_SUCCESS ) 2134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LPRINTF("Error: %s\n", ESR_rc2str(rc)); 2154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 2164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project bSession = ESR_TRUE; 2184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (*vocabfile == 0) 2204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = sizeof(vocabfile); 2224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_SessionGetLCHAR ( L("cmdline.vocabulary"), vocabfile, &len ); 2234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project env_sdk_path = LGETENV(L("ESRSDK")); 2244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( env_sdk_path != NULL ) 2254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSPRINTF ( parfilename, L("%s/config/"), env_sdk_path ); 2274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project env_lang = LGETENV(L("ESRLANG")); 2284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( env_lang != NULL ) 2294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCAT ( parfilename, env_lang ); 2314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCAT ( parfilename, L("/baseline.par") ); 2324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 2344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LPRINTF("Error: An environment variable ESRLANG should be defined.\n"); 2364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 2374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 2404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LPRINTF("Error: An environment variable ESRSDK should be defined.\n"); 2424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 2434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project strcpy(ptemp, env_sdk_path); 2464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project strcat(ptemp,"/config/"); 2474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project strcat(ptemp,env_lang); 2484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project strcat(ptemp,"/"); 2494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project strcat(ptemp,vocabfile); 2504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project strcpy(vocabfile,ptemp); 2514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( rc == ESR_SUCCESS ) 2524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = sizeof(vocabfile); 2544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_SessionPrefixWithBaseDirectory(vocabfile, &len); 2554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 2574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *vocabfile = 0; 2594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (*vocabfile) 2634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = SR_VocabularyLoad(vocabfile, &vocab); 2644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if (*locale) 2654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_Locale localeTag; 2674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_str2locale(locale, &localeTag); 2694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 2704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LPRINTF("Error: %s\n",ESR_rc2str(rc)); 2724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 2734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = SR_VocabularyCreate(localeTag, &vocab); 2754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 2774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = SR_VocabularyCreate(ESR_LOCALE_EN_US, &vocab); 2784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc != ESR_SUCCESS) 2804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LPRINTF("Error: %s\n",ESR_rc2str(rc)); 2824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 2834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (*outfilename) /* output file */ 2864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ((fout = fopen(outfilename,"w")) == NULL) 2884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LPRINTF("Could not open file: %s\n",outfilename); 2904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = 1; 2914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 2924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (*wordfile) /* file mode */ 2964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ((fin = pfopen(wordfile,"r")) == NULL) 2984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 2994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LPRINTF("Could not open file: %s\n", wordfile); 3004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 3014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project while (pfgets(phrase, MAX_LINE_LENGTH, fin)!=NULL) 3034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 3044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project lstrtrim(phrase); 3054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project doGetProns(vocab, phrase, MAX_PRONS_LENGTH, fout); 3064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if (*testfilename) /* test file mode */ 3104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 3114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ((fin = pfopen(testfilename,"r")) == NULL) 3124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 3134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LPRINTF("Could not open file: %s\n", testfilename); 3144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = 1; 3154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 3164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project doInputTestPhonemes(vocab, fin, fout); 3184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else /* interactive mode */ 3204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 3214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LPRINTF("'qqq' to quit\n"); 3224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project while (ESR_TRUE) 3234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 3244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LPRINTF("> "); 3254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(! pfgets(phrase, MAX_LINE_LENGTH, PSTDIN )) 3264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 3274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project // remove trailing whitespace 3284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for(p=&phrase[0]; *p!=0 && *p!='\n' && *p!='\r'; p++) {} 3294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *p=0; 3304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project lstrtrim(phrase); 3314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(!LSTRCMP("qqq",phrase)) 3324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project break; 3334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 3344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project doGetProns(vocab, phrase, MAX_PRONS_LENGTH, fout); 3354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 3374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 3394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(vocab) 3404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project vocab->destroy(vocab); 3414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(bSession) 3434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ShutdownSession(); 3444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(fin) 3464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project pfclose(fin); 3474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(fout && fout != stdout) 3494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fclose(fout); 3504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* PANSIFileSystemDestroy(); 3524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PFileSystemDestroy();*/ 3534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PMemShutdown(); 3544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 3554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic ESR_ReturnCode InitSession ( LCHAR *parfilename ) 3584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 3594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode init_status; 3604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project init_status = SR_SessionCreate ( parfilename ); 3624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ( init_status ); 3644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic ESR_ReturnCode ShutdownSession ( void ) 3674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 3684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode shutdown_status; 3694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project shutdown_status = SR_SessionDestroy ( ); 3714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 3724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ( shutdown_status ); 3734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 3744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 375