14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------* 24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * make_g2g.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 <stdlib.h> 214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "pstdio.h" 234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "pmemory.h" 244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "plog.h" 254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "PFile.h" 264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "PFileSystem.h" 274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "PANSIFileSystem.h" 284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "SR_Grammar.h" 304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ESR_CommandLine.h" 314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ESR_Session.h" 324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "LCHAR.h" 334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "srec_context.h" 344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MAX_LINE_LENGTH 256 364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MAX_STR_LENGTH 80 374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MAX_SEM_RESULTS 3 384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MAX_KEYS 30 394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectstatic void usage(LCHAR* exename) 414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LFPRINTF(stdout,"usage: %s -base <base grammar filename> [-out <output file>] \n",exename); 434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint main (int argc, char *argv[]) 464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project SR_Grammar* grammar = NULL; 484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ESR_ReturnCode rc; 494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR base[P_PATH_MAX]; 504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR* p; 514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LCHAR outFilename[P_PATH_MAX]; 524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project size_t len; 534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* 554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Initialize portable library. 564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Can't use CHKLOG() before plogInit, so use non-portable methods instead. 574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */ 584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, PMemInit()); 594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* CHKLOG(rc, PFileSystemCreate()); 604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, PANSIFileSystemCreate()); 614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, PANSIFileSystemAddPath(L("/dev/ansi/"), L("/")));*/ 624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, PLogInit(NULL, 3)); 634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Set ANSI file-system as default file-system */ 654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* CHKLOG(rc, PANSIFileSystemSetDefault(ESR_TRUE));*/ 664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Set virtual current working directory to native current working directory */ 674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* len = P_PATH_MAX; 684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, PANSIFileSystemGetcwd(cwd, &len)); 694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, PFileSystemChdir(cwd));*/ 704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = P_PATH_MAX; 724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_CommandLineGetValue(argc, (const char **)argv, L("base"), base, &len); 734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc==ESR_NO_MATCH_ERROR) 744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LFPRINTF(stderr, "ERROR: Mandatory option -base is unspecified\n"); 764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_ARGUMENT; 774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if (rc!=ESR_SUCCESS) 794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project len = P_PATH_MAX; 854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project rc = ESR_CommandLineGetValue(argc, (const char **)argv, L("out"), outFilename, &len); 864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (rc==ESR_NO_MATCH_ERROR) 874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LFPRINTF(stderr, "ERROR: Mandatory option -out is unspecified\n"); 894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return ESR_INVALID_ARGUMENT; 904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if (rc!=ESR_SUCCESS) 924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogError(ESR_rc2str(rc)); 944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project goto CLEANUP; 954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (base==NULL || (LSTRCMP(outFilename, L(""))==0 )) 984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project usage(argv[0]); 1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project exit(EXIT_FAILURE); 1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* setup the default outfilename if not already set */ 1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (!outFilename[0]) 1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project { 1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCPY(outFilename,base); 1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* get rid of the ',addWords=2000' grammar load param */ 1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project p = LSTRCHR(outFilename,L(',')); 1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(p) *p = 0; 1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LSTRCAT(outFilename,L(".g2g")); 1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LFPRINTF(stdout,"Loading grammar %s from text files...\n",base); 1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_GrammarLoad(base, &grammar)); 1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LFPRINTF(stdout,"Saving grammar as binary image %s...\n",outFilename); 1174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, SR_GrammarSave(grammar, outFilename)); 1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project LFPRINTF(stdout,"SUCCESS!\n"); 1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if (grammar) 1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project grammar->destroy(grammar); 1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PLogShutdown(); 1264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* PANSIFileSystemDestroy(); 1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PFileSystemDestroy();*/ 1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PMemShutdown(); 1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return rc; 1304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 131