14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------*
24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  make_ve_grammar.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
214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <stdio.h>
224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <stdlib.h>
234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <string.h>
244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "plog.h"
264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "passert.h"
274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "duk_args.h"
284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "duk_err.h"
294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ptrd.h"
304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "srec_arb.h"
324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "simapi.h"
334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "PFileSystem.h"
354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "PANSIFileSystem.h"
364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MAX_FILE_NAME_LEN 64
384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define DEFAULT_WWTRIPHONE_SILMODE 3
394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* check if the central phoneme is a word-specific phoneme; if so, do not enroll it into the ve grammar.*/
424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint ws_verify(char * allo_phoneme){
434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  switch(allo_phoneme[0]){
444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case '(': return 1;
454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case '.': return 1;
464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case '0': return 1;
474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case '1': return 1;
484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case '2': return 1;
494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case '3': return 1;
504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case '4': return 1;
514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case '5': return 1;
524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case '7': return 1;
534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case '8': return 1;
544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case '9': return 1;
554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case '=': return 1;
564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case '>': return 1;
574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case 'B': return 1;
584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case 'F': return 1;
594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case 'G': return 1;
604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case 'H': return 1;
614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case 'K': return 1;
624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case 'M': return 1;
634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case 'Q': return 1;
644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case 'R': return 1;
654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case 'W': return 1;
664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case 'X': return 1;
674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case 'Y': return 1;
684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case '[': return 1;
694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case '\\': return 1;
704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case '|': return 1;
714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  case '+': return 1;
724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  default: return 0;
734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  }
744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint main (int argc, char **argv)
774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	int i;
794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	char filen[MAX_FILE_NAME_LEN]="";
804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	CA_Arbdata *ca_arbdata = NULL;     /* new, link btw acc/syn */
814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	char *arbfile = NULL;
824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	char *base = NULL;
834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	FILE* pfile;
854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	FILE* pFile_PCLG;
864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	FILE* pFile_map;
874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	FILE* pFile_P;
884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        FILE* pFile_Grev;
894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	FILE* pFile_script;
904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	int num_hmms;
924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	int num_wd = 0;
934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	int script_line = 0;
944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	int cflag = 0, fnode = 0;
954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	int sil_model = DEFAULT_WWTRIPHONE_SILMODE;
964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	int rc;
974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	srec_arbdata *allotree = NULL;
984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	nodeID startNode       = 0;
1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	nodeID pauEndNode      = 1;
1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	nodeID modelStartNode  = 2;
1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	nodeID modelEndNode    = 3;
1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	nodeID pau2StartNode   = 4;
1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	nodeID pau2EndNode     = 5;
1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	nodeID endNode         = 6;
1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	/* initial memory */
1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	CHKLOG(rc, PMemInit());
1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	if(argc<5){
1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	  printf("USAGE: -swiarb <swiarb file> -base <output base name>\n");
1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	  exit(1);
1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	}
1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	for(i=1; i<argc; i++) {
1174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	  if(!strcmp(argv[i],"-swiarb")) {
1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    arbfile = argv[++i];
1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    printf("using swiarb from file %s\n", arbfile);
1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	  }
1214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	  else if(!strcmp(argv[i],"-base")){
1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    base = argv[++i];
1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	  }
1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	  else {
1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    printf("error_usage: argument [%s]\n", argv[i]);
1264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    exit(1);
1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	  }
1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	}
1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	/* check arb file exist*/
1314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	if ( (pfile = fopen(arbfile, "r")) != NULL ){
1324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    fclose(pfile);
1334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	}
1344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	else{
1354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	  printf("ERROR: the specified swiarb file does not exist.\n");
1364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	  exit(1);
1374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	}
1384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	ca_arbdata = CA_LoadArbdata(arbfile);
1414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	allotree = (srec_arbdata*)ca_arbdata;
1434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	num_hmms = allotree->num_hmms;
1444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	/* Dump out VE .PCLG.txt, .Grev2.det.txt, .P.txt, .script and .map files; .P.txt, .script and .map are not necessary for voice enroll, so just dump out to create .g2g file. Xufang */
1474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	printf("Dumping out VE files\n");
1494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	strcat(filen,base);
1514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	strcat(filen,".PCLG.txt");
1524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	pFile_PCLG = fopen(filen,"w");
1534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	filen[0]='\0';
1554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	strcat(filen,base);
1564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	strcat(filen,".map");
1574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        pFile_map = fopen(filen,"w");
1584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        filen[0]='\0';
1604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        strcat(filen,base);
1614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        strcat(filen,".P.txt");
1624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        pFile_P = fopen(filen,"w");
1634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        filen[0]='\0';
1654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        strcat(filen,base);
1664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        strcat(filen,".Grev2.det.txt");
1674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        pFile_Grev = fopen(filen,"w");
1684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        filen[0]='\0';
1704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        strcat(filen,base);
1714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        strcat(filen,".script");
1724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        pFile_script = fopen(filen,"w");
1734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_Grev,"0\t1\teps\t80\n");
1754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_Grev,"1\t2\t%s.grxml@VE_Words\n",base);
1764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	fprintf(pFile_map,"eps %d\n",num_wd++);
1784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_map,"%s.grxml@ROOT %d\n",base,num_wd++);
1794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_map,"%s.grxml@VE_Words %d\n",base,num_wd++);
1804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_map,"-pau- %d\n",num_wd++);
1814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_map,"-pau2- %d\n",num_wd++);
1824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_map,"@VE_Words %d\n",num_wd++);
1834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_P,"0\t1\teps\t{\t\n");
1854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_P,"1\t2\teps\t{\t\n");
1864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_P,"2\t3\teps\t{\t\n");
1874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_P,"2\t4\teps\t{\t\n");
1884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_P,"3\t5\t%s.grxml@VE_Words\t%s.grxml@VE_Words\t\n",base,base);
1894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_P,"4\t8\teps\t{\t\n");
1904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_P,"5\t6\teps\t_3\t\n");
1914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_P,"6\t7\teps\tVE_Words}\t\n");
1924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_P,"7\t9\teps\t_2\t\n");
1934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_script,"%d type=SENT.type;meaning=SENT.V;\n",script_line++);
1954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_script,"%d type='NEW';V=UTT.V;\n",script_line++);
1964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_script,"%d type='OLD';V=VE_Words.V;\n",script_line++);
1974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	fprintf(pFile_script,"%d V=UTT.V?UTT.V:'--';\n",script_line++);
1984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_script,"%d V=PHONEME.V\n",script_line++);
1994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	for(i=0;i<num_hmms;i++){
2014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	  if(ws_verify(allotree->hmm_infos[i].name))
2024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    continue;
2034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	  if(!strcmp(allotree->hmm_infos[i].name,"#")){
2044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    sil_model = i;
2054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    fprintf(pFile_PCLG,"%d\t%d\thmm%d_#sil#\t-pau-\n", startNode, pauEndNode, i);
2064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            fprintf(pFile_PCLG,"%d\t%d\t.wb\teps\n", pauEndNode, modelStartNode);
2074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          }
2084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          else{
2094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            if(strlen(allotree->hmm_infos[i].name)>0){
2104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	      if(cflag==0){
2114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project		fnode = i;
2124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project		cflag = 1;
2134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	      }
2144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project              fprintf(pFile_PCLG,"%d\t%d\thmm%d_%s\twd_hmm%d_%s\t40\n", modelStartNode, modelEndNode,
2154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project		      i,allotree->hmm_infos[i].name,i,allotree->hmm_infos[i].name);
2164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	      fprintf(pFile_map,"wd_hmm%d_%s %d\n",i,allotree->hmm_infos[i].name,num_wd++);
2174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	      fprintf(pFile_Grev,"1\t3\twd_hmm%d_%s\n",i,allotree->hmm_infos[i].name);
2184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	      fprintf(pFile_P,"8\t10\twd_hmm%d_%s\t_%d\t\n",i,allotree->hmm_infos[i].name,script_line);
2194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	      fprintf(pFile_script,"%d V=V?V:'';V=V+'wd_hmm%d_%s';\n",script_line++,i,allotree->hmm_infos[i].name);
2204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	    }
2214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          }
2224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	}
2234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_PCLG,"%d\t%d\t.wb\teps\n", modelEndNode, modelStartNode);
2254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_PCLG,"%d\t%d\t.wb\teps\n", modelEndNode, pau2StartNode);
2264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_PCLG,"%d\t%d\thmm%d_#sil#\t-pau2-\n",pau2StartNode, pau2EndNode, sil_model);
2274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_PCLG,"%d\t%d\t.wb\teps\n", pau2EndNode, endNode);
2284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_PCLG,"%d\n", endNode);
2294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_Grev,"2\n");
2314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	for(i=fnode;i<num_hmms;i++){
2324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project          if(ws_verify(allotree->hmm_infos[i].name))
2334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project            continue;
2344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	  fprintf(pFile_Grev,"3\t3\twd_hmm%d_%s\t40\n",i,allotree->hmm_infos[i].name);
2354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	}
2364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_Grev,"3\n");
2374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_P,"9\t11\teps\tSENT}\t\n");
2394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_P,"10\t12\teps\tPHONEME}\t\n");
2404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_P,"11\t13\teps\t_0\t\n");
2414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_P,"12\t14\teps\t_4\t\n");
2424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_P,"13\t15\teps\tROOT}\t\n");
2434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_P,"14\t16\teps\teps\t\n");
2444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_P,"15\t\n");
2454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_P,"16\t17\teps\tUTT}\t\n");
2464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_P,"16\t8\teps\t{\t\n");
2474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fprintf(pFile_P,"17\t9\teps\t_1\t\n");
2484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	fclose(pFile_PCLG);
2504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	printf("Creating %s.PCLG.txt...\n",base);
2514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fclose(pFile_Grev);
2524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        printf("Creating %s.Grev2.det.txt...\n",base);
2534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fclose(pFile_map);
2544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	printf("Creating %s.map...\n",base);
2554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project        fclose(pFile_P);
2564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	printf("Creating %s.P.txt...\n",base);
2574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	fclose(pFile_script);
2584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	printf("Creating %s.script...\n",base);
2594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project	printf("SUCCESS!\n");
2604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  CA_FreeArbdata( ca_arbdata);
2634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
2644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PMemShutdown();
2654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return 0;
2664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP:
2674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  return 1;
2684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
2694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
270