/*---------------------------------------------------------------------------* * make_g2g.c * * * * Copyright 2007, 2008 Nuance Communciations, Inc. * * * * Licensed under the Apache License, Version 2.0 (the 'License'); * * you may not use this file except in compliance with the License. * * * * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * * * Unless required by applicable law or agreed to in writing, software * * distributed under the License is distributed on an 'AS IS' BASIS, * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * * See the License for the specific language governing permissions and * * limitations under the License. * * * *---------------------------------------------------------------------------*/ #include <stdlib.h> #include "pstdio.h" #include "pmemory.h" #include "plog.h" #include "PFile.h" #include "PFileSystem.h" #include "PANSIFileSystem.h" #include "SR_Grammar.h" #include "ESR_CommandLine.h" #include "ESR_Session.h" #include "LCHAR.h" #include "srec_context.h" #define MAX_LINE_LENGTH 256 #define MAX_STR_LENGTH 80 #define MAX_SEM_RESULTS 3 #define MAX_KEYS 30 static void usage(LCHAR* exename) { LFPRINTF(stdout,"usage: %s -base <base grammar filename> [-out <output file>] \n",exename); } int main (int argc, char *argv[]) { SR_Grammar* grammar = NULL; ESR_ReturnCode rc; LCHAR base[P_PATH_MAX]; LCHAR* p; LCHAR outFilename[P_PATH_MAX]; size_t len; /* * Initialize portable library. * Can't use CHKLOG() before plogInit, so use non-portable methods instead. */ CHKLOG(rc, PMemInit()); /* CHKLOG(rc, PFileSystemCreate()); CHKLOG(rc, PANSIFileSystemCreate()); CHKLOG(rc, PANSIFileSystemAddPath(L("/dev/ansi/"), L("/")));*/ CHKLOG(rc, PLogInit(NULL, 3)); /* Set ANSI file-system as default file-system */ /* CHKLOG(rc, PANSIFileSystemSetDefault(ESR_TRUE));*/ /* Set virtual current working directory to native current working directory */ /* len = P_PATH_MAX; CHKLOG(rc, PANSIFileSystemGetcwd(cwd, &len)); CHKLOG(rc, PFileSystemChdir(cwd));*/ len = P_PATH_MAX; rc = ESR_CommandLineGetValue(argc, (const char **)argv, L("base"), base, &len); if (rc==ESR_NO_MATCH_ERROR) { LFPRINTF(stderr, "ERROR: Mandatory option -base is unspecified\n"); return ESR_INVALID_ARGUMENT; } else if (rc!=ESR_SUCCESS) { PLogError(ESR_rc2str(rc)); goto CLEANUP; } len = P_PATH_MAX; rc = ESR_CommandLineGetValue(argc, (const char **)argv, L("out"), outFilename, &len); if (rc==ESR_NO_MATCH_ERROR) { LFPRINTF(stderr, "ERROR: Mandatory option -out is unspecified\n"); return ESR_INVALID_ARGUMENT; } else if (rc!=ESR_SUCCESS) { PLogError(ESR_rc2str(rc)); goto CLEANUP; } if (base==NULL || (LSTRCMP(outFilename, L(""))==0 )) { usage(argv[0]); exit(EXIT_FAILURE); } /* setup the default outfilename if not already set */ if (!outFilename[0]) { LSTRCPY(outFilename,base); /* get rid of the ',addWords=2000' grammar load param */ p = LSTRCHR(outFilename,L(',')); if(p) *p = 0; LSTRCAT(outFilename,L(".g2g")); } LFPRINTF(stdout,"Loading grammar %s from text files...\n",base); CHKLOG(rc, SR_GrammarLoad(base, &grammar)); LFPRINTF(stdout,"Saving grammar as binary image %s...\n",outFilename); CHKLOG(rc, SR_GrammarSave(grammar, outFilename)); LFPRINTF(stdout,"SUCCESS!\n"); CLEANUP: if (grammar) grammar->destroy(grammar); PLogShutdown(); /* PANSIFileSystemDestroy(); PFileSystemDestroy();*/ PMemShutdown(); return rc; }