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