1/*---------------------------------------------------------------------------* 2 * make_g2g.c * 3 * * 4 * Copyright 2007, 2008 Nuance Communciations, Inc. * 5 * * 6 * Licensed under the Apache License, Version 2.0 (the 'License'); * 7 * you may not use this file except in compliance with the License. * 8 * * 9 * You may obtain a copy of the License at * 10 * http://www.apache.org/licenses/LICENSE-2.0 * 11 * * 12 * Unless required by applicable law or agreed to in writing, software * 13 * distributed under the License is distributed on an 'AS IS' BASIS, * 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * 15 * See the License for the specific language governing permissions and * 16 * limitations under the License. * 17 * * 18 *---------------------------------------------------------------------------*/ 19 20#include <stdlib.h> 21 22#include "pstdio.h" 23#include "pmemory.h" 24#include "plog.h" 25#include "PFile.h" 26#include "PFileSystem.h" 27#include "PANSIFileSystem.h" 28 29#include "SR_Grammar.h" 30#include "ESR_CommandLine.h" 31#include "ESR_Session.h" 32#include "LCHAR.h" 33#include "srec_context.h" 34 35#define MAX_LINE_LENGTH 256 36#define MAX_STR_LENGTH 80 37#define MAX_SEM_RESULTS 3 38#define MAX_KEYS 30 39 40static void usage(LCHAR* exename) 41{ 42 LFPRINTF(stdout,"usage: %s -base <base grammar filename> [-out <output file>] \n",exename); 43} 44 45int main (int argc, char *argv[]) 46{ 47 SR_Grammar* grammar = NULL; 48 ESR_ReturnCode rc; 49 LCHAR base[P_PATH_MAX]; 50 LCHAR* p; 51 LCHAR outFilename[P_PATH_MAX]; 52 size_t len; 53 54 /* 55 * Initialize portable library. 56 * Can't use CHKLOG() before plogInit, so use non-portable methods instead. 57 */ 58 CHKLOG(rc, PMemInit()); 59/* CHKLOG(rc, PFileSystemCreate()); 60 CHKLOG(rc, PANSIFileSystemCreate()); 61 CHKLOG(rc, PANSIFileSystemAddPath(L("/dev/ansi/"), L("/")));*/ 62 CHKLOG(rc, PLogInit(NULL, 3)); 63 64 /* Set ANSI file-system as default file-system */ 65/* CHKLOG(rc, PANSIFileSystemSetDefault(ESR_TRUE));*/ 66 /* Set virtual current working directory to native current working directory */ 67/* len = P_PATH_MAX; 68 CHKLOG(rc, PANSIFileSystemGetcwd(cwd, &len)); 69 CHKLOG(rc, PFileSystemChdir(cwd));*/ 70 71 len = P_PATH_MAX; 72 rc = ESR_CommandLineGetValue(argc, (const char **)argv, L("base"), base, &len); 73 if (rc==ESR_NO_MATCH_ERROR) 74 { 75 LFPRINTF(stderr, "ERROR: Mandatory option -base is unspecified\n"); 76 return ESR_INVALID_ARGUMENT; 77 } 78 else if (rc!=ESR_SUCCESS) 79 { 80 PLogError(ESR_rc2str(rc)); 81 goto CLEANUP; 82 } 83 84 len = P_PATH_MAX; 85 rc = ESR_CommandLineGetValue(argc, (const char **)argv, L("out"), outFilename, &len); 86 if (rc==ESR_NO_MATCH_ERROR) 87 { 88 LFPRINTF(stderr, "ERROR: Mandatory option -out is unspecified\n"); 89 return ESR_INVALID_ARGUMENT; 90 } 91 else if (rc!=ESR_SUCCESS) 92 { 93 PLogError(ESR_rc2str(rc)); 94 goto CLEANUP; 95 } 96 97 if (base==NULL || (LSTRCMP(outFilename, L(""))==0 )) 98 { 99 usage(argv[0]); 100 exit(EXIT_FAILURE); 101 } 102 103 /* setup the default outfilename if not already set */ 104 if (!outFilename[0]) 105 { 106 LSTRCPY(outFilename,base); 107 /* get rid of the ',addWords=2000' grammar load param */ 108 p = LSTRCHR(outFilename,L(',')); 109 if(p) *p = 0; 110 LSTRCAT(outFilename,L(".g2g")); 111 } 112 113 LFPRINTF(stdout,"Loading grammar %s from text files...\n",base); 114 CHKLOG(rc, SR_GrammarLoad(base, &grammar)); 115 116 LFPRINTF(stdout,"Saving grammar as binary image %s...\n",outFilename); 117 CHKLOG(rc, SR_GrammarSave(grammar, outFilename)); 118 119 LFPRINTF(stdout,"SUCCESS!\n"); 120 121CLEANUP: 122 123 if (grammar) 124 grammar->destroy(grammar); 125 PLogShutdown(); 126/* PANSIFileSystemDestroy(); 127 PFileSystemDestroy();*/ 128 PMemShutdown(); 129 return rc; 130} 131