dyv *mk_dyv_read( PFILE *f) { int i, size, lineno; double val; char line[101]; dyv *dv; lineno = 1; line[100] = '\0'; /* Read size and make dyv. */ if (pfeof(f)) { my_errorf( "mk_dyv_read: unexpected end-of-file while reading size,\n" "after line %d of file", lineno); } if (pfgets( line, 100, f) == NULL) { my_errorf( "mk_dyv_read: failed to read line %d from the passed stream.", lineno); } else lineno++; size = atoi( line); dv = mk_dyv( size); /* Read values. */ for (i=0; i<size; ++i) { if (pfeof(f)) { my_errorf( "mk_dyv_read: unexpected end-of-file while reading %d vals,\n" "after line %d of file (after the %dth value)", size, lineno, lineno-1); } if (pfgets( line, 100, f) == NULL) { my_errorf( "mk_dyv_read: failed to read line %d from the passed stream.", lineno); } else lineno++; val = atof( line); dyv_set( dv, i, val); } return dv; }
bool PStreamFile::readLine(pUint32 length, pUint8* buffer) { if (m_file == P_NULL) { pLogError("Unable to open file for reading"); return false; } pChar* p = pfgets((pChar*)buffer, length, m_file); return true; }
static void read_repo_file (file *f) { char c; FILE *stream = fopen (f->key, "r"); if (tlink_verbose >= 2) fprintf (stderr, _("collect: reading %s\n"), f->key); while (fscanf (stream, "%c ", &c) == 1) { switch (c) { case 'A': f->args = pfgets (stream); break; case 'D': f->dir = pfgets (stream); break; case 'M': f->main = pfgets (stream); break; case 'P': freadsym (stream, f, 2); break; case 'C': freadsym (stream, f, 1); break; case 'O': freadsym (stream, f, 0); break; } obstack_free (&temporary_obstack, temporary_firstobj); } fclose (stream); if (f->args == NULL) f->args = getenv ("COLLECT_GCC_OPTIONS"); if (f->dir == NULL) f->dir = "."; }
//parses the input file, runs phoneme tests and produces output to be parsed by perl script void doInputTestPhonemes(SR_Vocabulary *vocab, PFile* fin, FILE* fout) { #if 0 //waste of space with all of these arrays, they are too large, but leave for now ESR_ReturnCode rc; LCHAR line[2 * MAX_PRONS_LENGTH]; LCHAR phoneme[MAX_PRONS_LENGTH]; LCHAR* phrase; LCHAR* expectedPhoneme; LCHAR** tokenArray; size_t len; //read through the test file parsing it into the variables while(!pfeof(fin)) { pfgets(line, MAX_LINE_LENGTH, fin); rc = ESR_ProcessLinearToCommandLineTokens(line, &tokenArray, &len); if (rc!=ESR_SUCCESS || len!=2) { LFPRINTF(fout, "ERROR: INVALID FORMAT for input line\n"); continue; } phrase = tokenArray[0]; expectedPhoneme = tokenArray[1]; LPRINTF( "expected %s\n", expectedPhoneme); len = MAX_PRONS_LENGTH; rc = vocab->getPronunciation(vocab, phrase, phoneme, &len); if(rc != ESR_SUCCESS) LFPRINTF(fout,"ERROR: %s\n", ESR_rc2str(rc)); else { LFPRINTF(fout,"%s|%s|%s|", phrase, expectedPhoneme, phoneme); if(LSTRCMP(expectedPhoneme, phoneme) == 0) LFPRINTF(fout,"PASSED\n"); else LFPRINTF(fout,"FAILED\n"); } } #endif }
ESR_ReturnCode SR_NametagsLoadImpl(SR_Nametags* self, const LCHAR* filename) { SR_NametagsImpl* impl = (SR_NametagsImpl*) self; ESR_ReturnCode rc; PFile* file = NULL; LCHAR line[256]; LCHAR* result = NULL; LCHAR* id; LCHAR* value; SR_Nametag* newNametag = NULL; SR_Nametag* oldNametag; HashMap* nametags = impl->value; size_t size, len, i; LCHAR devicePath[P_PATH_MAX]; LCHAR number[MAX_UINT_DIGITS+1]; #define NAMETAGID_LENGTH 20 /* strlen("token\0") == 6 */ #define TOKEN_LENGTH 6 + NAMETAGID_LENGTH LCHAR tokenName[TOKEN_LENGTH]; if (filename == NULL) { rc = ESR_INVALID_STATE; PLogError(ESR_rc2str(rc)); goto CLEANUP; } size = P_PATH_MAX; CHKLOG(rc, ESR_SessionGetLCHAR(L("cmdline.nametagPath"), devicePath, &size)); /* check if the filename has the path */ if (LSTRNCMP(filename, devicePath, LSTRLEN(devicePath)) != 0) LSTRCAT(devicePath, filename); else LSTRCPY(devicePath, filename); file = pfopen ( devicePath, L("r")); /* CHKLOG(rc, PFileSystemCreatePFile(devicePath, ESR_TRUE, &file)); CHKLOG(rc, file->open(file, L("r")));*/ if ( file == NULL ) goto CLEANUP; /* Flush collection */ CHKLOG(rc, nametags->getSize(nametags, &size)); for (i = 0; i < size; ++i) { CHKLOG(rc, nametags->getValueAtIndex(nametags, 0, (void **)&oldNametag)); CHKLOG(rc, nametags->removeAtIndex(nametags, 0)); CHKLOG(rc, oldNametag->destroy(oldNametag)); } len = MAX_UINT_DIGITS + 1; CHKLOG(rc, lultostr(size, number, &len, 10)); CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("removeCount"), number)); while (ESR_TRUE) { result = pfgets ( line, 256, file ); if (result == NULL) break; if (LSTRLEN(line) == 255) { rc = ESR_BUFFER_OVERFLOW; PLogError(ESR_rc2str(rc)); goto CLEANUP; } lstrtrim(line); /* Get the Nametag ID */ id = line; /* Find next whitespace */ for (value = id + 1; *value != L('\0') && !LISSPACE(*value); ++value); if (*value == L('\0')) { rc = ESR_INVALID_STATE; PLogError(L("%s: Cannot find end of Nametag id"), ESR_rc2str(rc)); goto CLEANUP; } /* Delimit end of nametag ID */ *value = L('\0'); /* Find next non-whitespace */ for (++value; *value != L('\0') && LISSPACE(*value); ++value); if (*value == L('\0')) { rc = ESR_INVALID_STATE; PLogError(L("%s: Cannot find Nametag value"), ESR_rc2str(rc)); goto CLEANUP; } /* We now have both the Nametag ID and value */ len = (LSTRLEN(value)+1) * sizeof(LCHAR) ; CHKLOG(rc, SR_NametagCreateFromValue(id, (const char*)value, len, &newNametag)); /* Add Nametag to collection */ CHKLOG(rc, impl->value->put(impl->value, id, newNametag)); if (LSTRLEN(id) > NAMETAGID_LENGTH) { rc = ESR_BUFFER_OVERFLOW; PLogError(ESR_rc2str(rc)); goto CLEANUP; } psprintf(tokenName, L("nametag[%s]"), id); CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, tokenName, value)); newNametag = NULL; } CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("filename"), filename)); CHKLOG(rc, nametags->getSize(nametags, &size)); len = MAX_UINT_DIGITS + 1; CHKLOG(rc, lultostr(size, number, &len, 10)); CHKLOG(rc, SR_EventLogToken_BASIC(impl->eventLog, impl->logLevel, L("addCount"), number)); CHKLOG(rc, SR_EventLogEvent_BASIC(impl->eventLog, impl->logLevel, L("SR_NametagsLoad"))); pfclose (file); return ESR_SUCCESS; CLEANUP: if (file != NULL) pfclose (file); if (newNametag != NULL) newNametag->destroy(newNametag); return rc; }
STATIC int readtoken1(int firstc, char const *syntax, char *eofmark, int striptabs) { int c = firstc; char *out; int len; char line[EOFMARKLEN + 1]; struct nodelist *bqlist; int quotef; int dblquote; int varnest; /* levels of variables expansion */ int arinest; /* levels of arithmetic expansion */ int parenlevel; /* levels of parens in arithmetic */ int oldstyle; char const *prevsyntax; /* syntax before arithmetic */ int synentry; #if __GNUC__ /* Avoid longjmp clobbering */ (void) &out; (void) "ef; (void) &dblquote; (void) &varnest; (void) &arinest; (void) &parenlevel; (void) &oldstyle; (void) &prevsyntax; (void) &syntax; (void) &synentry; #endif startlinno = plinno; dblquote = 0; if (syntax == DQSYNTAX) dblquote = 1; quotef = 0; bqlist = NULL; varnest = 0; arinest = 0; parenlevel = 0; STARTSTACKSTR(out); loop: { /* for each line, until end of word */ CHECKEND(); /* set c to PEOF if at end of here document */ for (;;) { /* until end of line or end of word */ CHECKSTRSPACE(3, out); /* permit 3 calls to USTPUTC */ synentry = syntax[c]; switch(synentry) { case CNL: /* '\n' */ if (syntax == BASESYNTAX) goto endword; /* exit outer loop */ USTPUTC(c, out); plinno++; if (doprompt) setprompt(2); else setprompt(0); c = pgetc(); goto loop; /* continue outer loop */ case CWORD: USTPUTC(c, out); break; case CCTL: if (eofmark == NULL || dblquote) USTPUTC(CTLESC, out); USTPUTC(c, out); break; case CBACK: /* backslash */ c = pgetc(); if (c == PEOF) { USTPUTC('\\', out); pungetc(); } else if (c == '\n') { if (doprompt) setprompt(2); else setprompt(0); } else { if (dblquote && c != '\\' && c != '`' && c != '$' && (c != '"' || eofmark != NULL)) USTPUTC('\\', out); if (SQSYNTAX[c] == CCTL) USTPUTC(CTLESC, out); else if (eofmark == NULL) USTPUTC(CTLQUOTEMARK, out); USTPUTC(c, out); quotef++; } break; case CSQUOTE: if (eofmark == NULL) USTPUTC(CTLQUOTEMARK, out); syntax = SQSYNTAX; break; case CDQUOTE: if (eofmark == NULL) USTPUTC(CTLQUOTEMARK, out); syntax = DQSYNTAX; dblquote = 1; break; case CENDQUOTE: if (eofmark != NULL && arinest == 0 && varnest == 0) { USTPUTC(c, out); } else { if (arinest) { syntax = ARISYNTAX; dblquote = 0; } else if (eofmark == NULL) { syntax = BASESYNTAX; dblquote = 0; } quotef++; } break; case CVAR: /* '$' */ PARSESUB(); /* parse substitution */ break; case CENDVAR: /* '}' */ if (varnest > 0) { varnest--; USTPUTC(CTLENDVAR, out); } else { USTPUTC(c, out); } break; case CLP: /* '(' in arithmetic */ parenlevel++; USTPUTC(c, out); break; case CRP: /* ')' in arithmetic */ if (parenlevel > 0) { USTPUTC(c, out); --parenlevel; } else { if (pgetc() == ')') { if (--arinest == 0) { USTPUTC(CTLENDARI, out); syntax = prevsyntax; if (syntax == DQSYNTAX) dblquote = 1; else dblquote = 0; } else USTPUTC(')', out); } else { /* * unbalanced parens * (don't 2nd guess - no error) */ pungetc(); USTPUTC(')', out); } } break; case CBQUOTE: /* '`' */ PARSEBACKQOLD(); break; case CEOF: goto endword; /* exit outer loop */ default: if (varnest == 0) goto endword; /* exit outer loop */ USTPUTC(c, out); } c = pgetc_macro(); } } endword: if (syntax == ARISYNTAX) synerror("Missing '))'"); if (syntax != BASESYNTAX && ! parsebackquote && eofmark == NULL) synerror("Unterminated quoted string"); if (varnest != 0) { startlinno = plinno; synerror("Missing '}'"); } USTPUTC('\0', out); len = out - stackblock(); out = stackblock(); if (eofmark == NULL) { if ((c == '>' || c == '<') && quotef == 0 && len <= 2 && (*out == '\0' || is_digit(*out))) { PARSEREDIR(); return lasttoken = TREDIR; } else { pungetc(); } } quoteflag = quotef; backquotelist = bqlist; grabstackblock(len); wordtext = out; return lasttoken = TWORD; /* end of readtoken routine */ /* * Check to see whether we are at the end of the here document. When this * is called, c is set to the first character of the next input line. If * we are at the end of the here document, this routine sets the c to PEOF. */ checkend: { if (eofmark) { if (striptabs) { while (c == '\t') c = pgetc(); } if (c == *eofmark) { if (pfgets(line, sizeof line) != NULL) { char *p, *q; p = line; for (q = eofmark + 1 ; *q && *p == *q ; p++, q++); if (*p == '\n' && *q == '\0') { c = PEOF; plinno++; needprompt = doprompt; } else { pushstring(line, strlen(line), NULL); } } } } goto checkend_return; } /* * Parse a redirection operator. The variable "out" points to a string * specifying the fd to be redirected. The variable "c" contains the * first character of the redirection operator. */ parseredir: { char fd = *out; union node *np; np = (union node *)stalloc(sizeof (struct nfile)); if (c == '>') { np->nfile.fd = 1; c = pgetc(); if (c == '>') np->type = NAPPEND; else if (c == '&') np->type = NTOFD; else if (c == '|') np->type = NCLOBBER; else { np->type = NTO; pungetc(); } } else { /* c == '<' */ np->nfile.fd = 0; c = pgetc(); if (c == '<') { if (sizeof (struct nfile) != sizeof (struct nhere)) { np = (union node *)stalloc(sizeof (struct nhere)); np->nfile.fd = 0; } np->type = NHERE; heredoc = (struct heredoc *)stalloc(sizeof (struct heredoc)); heredoc->here = np; if ((c = pgetc()) == '-') { heredoc->striptabs = 1; } else { heredoc->striptabs = 0; pungetc(); } } else if (c == '&') np->type = NFROMFD; else if (c == '>') np->type = NFROMTO; else { np->type = NFROM; pungetc(); } } if (fd != '\0') np->nfile.fd = digit_val(fd); redirnode = np; goto parseredir_return; } /* * Parse a substitution. At this point, we have read the dollar sign * and nothing else. */ parsesub: { int subtype; int typeloc; int flags; char *p; #ifndef GDB_HACK static const char types[] = "}-+?="; #endif int bracketed_name = 0; /* used to handle ${[0-9]*} variables */ c = pgetc(); if (c != '(' && c != '{' && !is_name(c) && !is_special(c)) { USTPUTC('$', out); pungetc(); } else if (c == '(') { /* $(command) or $((arith)) */ if (pgetc() == '(') { PARSEARITH(); } else { pungetc(); PARSEBACKQNEW(); } } else { USTPUTC(CTLVAR, out); typeloc = out - stackblock(); USTPUTC(VSNORMAL, out); subtype = VSNORMAL; if (c == '{') { bracketed_name = 1; c = pgetc(); if (c == '#') { if ((c = pgetc()) == '}') c = '#'; else subtype = VSLENGTH; } else subtype = 0; } if (is_name(c)) { do { STPUTC(c, out); c = pgetc(); } while (is_in_name(c)); } else if (is_digit(c)) { if (bracketed_name) { do { STPUTC(c, out); c = pgetc(); } while (is_digit(c)); } else { STPUTC(c, out); c = pgetc(); } } else { if (! is_special(c)) badsub: synerror("Bad substitution"); USTPUTC(c, out); c = pgetc(); } STPUTC('=', out); flags = 0; if (subtype == 0) { switch (c) { case ':': flags = VSNUL; c = pgetc(); /*FALLTHROUGH*/ default: p = strchr(types, c); if (p == NULL) goto badsub; subtype = p - types + VSNORMAL; break; case '%': case '#': { int cc = c; subtype = c == '#' ? VSTRIMLEFT : VSTRIMRIGHT; c = pgetc(); if (c == cc) subtype++; else pungetc(); break; } } } else { pungetc(); } if (subtype != VSLENGTH && (dblquote || arinest)) flags |= VSQUOTE; *(stackblock() + typeloc) = subtype | flags; if (subtype != VSNORMAL) varnest++; } goto parsesub_return; } /* * Called to parse command substitutions. Newstyle is set if the command * is enclosed inside $(...); nlpp is a pointer to the head of the linked * list of commands (passed by reference), and savelen is the number of * characters on the top of the stack which must be preserved. */ parsebackq: { struct nodelist **nlpp; int savepbq; union node *n; char *volatile str; struct jmploc jmploc; struct jmploc *volatile savehandler; int savelen; int saveprompt; #if __GNUC__ /* Avoid longjmp clobbering */ (void) &saveprompt; #endif savepbq = parsebackquote; if (setjmp(jmploc.loc)) { if (str) ckfree(str); parsebackquote = 0; handler = savehandler; longjmp(handler->loc, 1); } INTOFF; str = NULL; savelen = out - stackblock(); if (savelen > 0) { str = ckmalloc(savelen); memcpy(str, stackblock(), savelen); } savehandler = handler; handler = &jmploc; INTON; if (oldstyle) { /* We must read until the closing backquote, giving special treatment to some slashes, and then push the string and reread it as input, interpreting it normally. */ char *out; int c; int savelen; char *str; STARTSTACKSTR(out); for (;;) { if (needprompt) { setprompt(2); needprompt = 0; } switch (c = pgetc()) { case '`': goto done; case '\\': if ((c = pgetc()) == '\n') { plinno++; if (doprompt) setprompt(2); else setprompt(0); /* * If eating a newline, avoid putting * the newline into the new character * stream (via the STPUTC after the * switch). */ continue; } if (c != '\\' && c != '`' && c != '$' && (!dblquote || c != '"')) STPUTC('\\', out); break; case '\n': plinno++; needprompt = doprompt; break; case PEOF: startlinno = plinno; synerror("EOF in backquote substitution"); break; default: break; } STPUTC(c, out); } done: STPUTC('\0', out); savelen = out - stackblock(); if (savelen > 0) { str = ckmalloc(savelen); memcpy(str, stackblock(), savelen); setinputstring(str, 1); } } nlpp = &bqlist; while (*nlpp) nlpp = &(*nlpp)->next; *nlpp = (struct nodelist *)stalloc(sizeof (struct nodelist)); (*nlpp)->next = NULL; parsebackquote = oldstyle; if (oldstyle) { saveprompt = doprompt; doprompt = 0; } n = list(0); if (oldstyle) doprompt = saveprompt; else { if (readtoken() != TRP) synexpect(TRP); } (*nlpp)->n = n; if (oldstyle) { /* * Start reading from old file again, ignoring any pushed back * tokens left from the backquote parsing */ popfile(); tokpushback = 0; } while (stackblocksize() <= savelen) growstackblock(); STARTSTACKSTR(out); if (str) { memcpy(out, str, savelen); STADJUST(savelen, out); INTOFF; ckfree(str); str = NULL; INTON; } parsebackquote = savepbq; handler = savehandler; if (arinest || dblquote) USTPUTC(CTLBACKQ | CTLQUOTE, out); else USTPUTC(CTLBACKQ, out); if (oldstyle) goto parsebackq_oldreturn; else goto parsebackq_newreturn; } /* * Parse an arithmetic expansion (indicate start of one and set state) */ parsearith: { if (++arinest == 1) { prevsyntax = syntax; syntax = ARISYNTAX; USTPUTC(CTLARI, out); if (dblquote) USTPUTC('"',out); else USTPUTC(' ',out); } else { /* * we collapse embedded arithmetic expansion to * parenthesis, which should be equivalent */ USTPUTC('(', out); } goto parsearith_return; } } /* end of readtoken */
int main(int argc, char **argv) { LCHAR phrase[MAX_LINE_LENGTH]; SR_Vocabulary *vocab = 0; LCHAR vocabfile[MAX_LINE_LENGTH]; LCHAR outfilename[MAX_LINE_LENGTH]; LCHAR testfilename[MAX_LINE_LENGTH]; LCHAR parfilename[MAX_LINE_LENGTH]; LCHAR wordfile[MAX_LINE_LENGTH]; LCHAR locale[MAX_LINE_LENGTH]; LCHAR ptemp[MAX_LINE_LENGTH]; LCHAR* p; ESR_ReturnCode rc; int i; PFile* fin = 0; FILE* fout = stdout; size_t len; ESR_BOOL bSession = ESR_FALSE; LCHAR *env_sdk_path; LCHAR *env_lang; CHKLOG(rc, PMemInit()); /* CHKLOG(rc, PFileSystemCreate()); CHKLOG(rc, PANSIFileSystemCreate()); CHKLOG(rc, PANSIFileSystemAddPath(L("/dev/ansi"), L("/")));*/ /* 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));*/ fout = stdout; *vocabfile = 0; *wordfile = 0; *locale = 0; *outfilename = 0; *testfilename = 0; *parfilename = 0; /* get some phrases from the user */ LPRINTF("\nDictation Test Program for esr (Nuance Communications, 2007)\n"); if(argc != 1 && argc != 3 && argc != 5 && argc != 7 && argc != 9) { usage(); rc = 1; goto CLEANUP; } for(i=1; i<argc; i++) { if(!LSTRCMP(argv[i], L("-words"))) LSTRCPY(wordfile, argv[++i]); else if(!LSTRCMP(argv[i], L("-vocab"))) LSTRCPY(vocabfile, argv[++i]); else if(!LSTRCMP(argv[i], L("-locale"))) LSTRCPY(locale, argv[++i]); else if(!LSTRCMP(argv[i], L("-out"))) LSTRCPY(outfilename, argv[++i]); else if(!LSTRCMP(argv[i], L("-itest"))) LSTRCPY(testfilename, argv[++i]); else if(!LSTRCMP(argv[i], L("-parfile")) || !LSTRCMP(argv[i], L("-par")) ) LSTRCPY(parfilename, argv[++i]); else { usage(); rc = 1; goto CLEANUP; } } if ( *parfilename == L('\0') ) { LPRINTF ( "Warning: No parfile defined in the command line.\n" ); LPRINTF ( "Looking for the default parfile, $ESRSDK/config/$ESRLANG/baseline.par...\n" ); env_sdk_path = LGETENV(L("ESRSDK")); if ( env_sdk_path != NULL ) { LSPRINTF ( parfilename, L("%s/config/"), env_sdk_path ); env_lang = LGETENV(L("ESRLANG")); if ( env_lang != NULL ) { LSTRCAT ( parfilename, env_lang ); LSTRCAT ( parfilename, L("/baseline.par") ); } else { LPRINTF("Error: An environment variable ESRLANG should be defined.\n"); goto CLEANUP; } } else { LPRINTF("Error: An environment variable ESRSDK should be defined.\n"); goto CLEANUP; } } rc = InitSession( parfilename ); if ( rc != ESR_SUCCESS ) { LPRINTF("Error: %s\n", ESR_rc2str(rc)); goto CLEANUP; } bSession = ESR_TRUE; if (*vocabfile == 0) { len = sizeof(vocabfile); rc = ESR_SessionGetLCHAR ( L("cmdline.vocabulary"), vocabfile, &len ); env_sdk_path = LGETENV(L("ESRSDK")); if ( env_sdk_path != NULL ) { LSPRINTF ( parfilename, L("%s/config/"), env_sdk_path ); env_lang = LGETENV(L("ESRLANG")); if ( env_lang != NULL ) { LSTRCAT ( parfilename, env_lang ); LSTRCAT ( parfilename, L("/baseline.par") ); } else { LPRINTF("Error: An environment variable ESRLANG should be defined.\n"); goto CLEANUP; } } else { LPRINTF("Error: An environment variable ESRSDK should be defined.\n"); goto CLEANUP; } strcpy(ptemp, env_sdk_path); strcat(ptemp,"/config/"); strcat(ptemp,env_lang); strcat(ptemp,"/"); strcat(ptemp,vocabfile); strcpy(vocabfile,ptemp); if ( rc == ESR_SUCCESS ) { len = sizeof(vocabfile); rc = ESR_SessionPrefixWithBaseDirectory(vocabfile, &len); } else { *vocabfile = 0; } } if (*vocabfile) rc = SR_VocabularyLoad(vocabfile, &vocab); else if (*locale) { ESR_Locale localeTag; rc = ESR_str2locale(locale, &localeTag); if (rc != ESR_SUCCESS) { LPRINTF("Error: %s\n",ESR_rc2str(rc)); goto CLEANUP; } rc = SR_VocabularyCreate(localeTag, &vocab); } else rc = SR_VocabularyCreate(ESR_LOCALE_EN_US, &vocab); if (rc != ESR_SUCCESS) { LPRINTF("Error: %s\n",ESR_rc2str(rc)); goto CLEANUP; } if (*outfilename) /* output file */ { if ((fout = fopen(outfilename,"w")) == NULL) { LPRINTF("Could not open file: %s\n",outfilename); rc = 1; goto CLEANUP; } } if (*wordfile) /* file mode */ { if ((fin = pfopen(wordfile,"r")) == NULL) { LPRINTF("Could not open file: %s\n", wordfile); goto CLEANUP; } while (pfgets(phrase, MAX_LINE_LENGTH, fin)!=NULL) { lstrtrim(phrase); doGetProns(vocab, phrase, MAX_PRONS_LENGTH, fout); } } else if (*testfilename) /* test file mode */ { if ((fin = pfopen(testfilename,"r")) == NULL) { LPRINTF("Could not open file: %s\n", testfilename); rc = 1; goto CLEANUP; } doInputTestPhonemes(vocab, fin, fout); } else /* interactive mode */ { LPRINTF("'qqq' to quit\n"); while (ESR_TRUE) { LPRINTF("> "); if(! pfgets(phrase, MAX_LINE_LENGTH, PSTDIN )) break; // remove trailing whitespace for(p=&phrase[0]; *p!=0 && *p!='\n' && *p!='\r'; p++) {} *p=0; lstrtrim(phrase); if(!LSTRCMP("qqq",phrase)) break; else doGetProns(vocab, phrase, MAX_PRONS_LENGTH, fout); } } CLEANUP: if(vocab) vocab->destroy(vocab); if(bSession) ShutdownSession(); if(fin) pfclose(fin); if(fout && fout != stdout) fclose(fout); /* PANSIFileSystemDestroy(); PFileSystemDestroy();*/ PMemShutdown(); return rc; }