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