| @@ -1,7 +1,7 @@ | |||
| /*************************************************************************** | |||
| * Copyright (C) 2005 to 2014 by Jonathan Duddington * | |||
| * email: [email protected] * | |||
| * Copyright (C) 2013 by Reece H. Dunn * | |||
| * Copyright (C) 2013-2015 by Reece H. Dunn * | |||
| * * | |||
| * This program is free software; you can redistribute it and/or modify * | |||
| * it under the terms of the GNU General Public License as published by * | |||
| @@ -1649,6 +1649,7 @@ int LoadSpect(const char *path, int control) | |||
| if(stream.Ok() == FALSE) | |||
| { | |||
| error("Failed to open: '%s'",path); | |||
| delete spectseq; | |||
| return(0); | |||
| } | |||
| spectseq->Load(stream); | |||
| @@ -1656,6 +1657,7 @@ int LoadSpect(const char *path, int control) | |||
| if(spectseq->frames == NULL) | |||
| { | |||
| error("Bad vowel file, no frames: '%s'",path); | |||
| delete spectseq; | |||
| return(0); | |||
| } | |||
| @@ -3997,6 +3999,7 @@ void CompileIntonation() | |||
| { | |||
| fclose(f_in); | |||
| fclose(f_errors); | |||
| free(tune_data); | |||
| return; | |||
| } | |||
| @@ -4183,6 +4186,7 @@ void CompileIntonation() | |||
| } | |||
| } | |||
| fwrite(tune_data, n_tune_names, sizeof(TUNE), f_out); | |||
| free(tune_data); | |||
| fclose(f_in); | |||
| fclose(f_out); | |||
| @@ -1,6 +1,7 @@ | |||
| /*************************************************************************** | |||
| * Copyright (C) 2005 to 2014 by Jonathan Duddington * | |||
| * email: [email protected] * | |||
| * Copyright (C) 2015 by Reece H. Dunn * | |||
| * * | |||
| * This program is free software; you can redistribute it and/or modify * | |||
| * it under the terms of the GNU General Public License as published by * | |||
| @@ -870,7 +871,8 @@ static int compile_dictlist_file(const char *path, const char* filename) | |||
| return(-1); | |||
| } | |||
| fprintf(f_log,"Compiling: '%s'\n",fname); | |||
| if(f_log != NULL) | |||
| fprintf(f_log,"Compiling: '%s'\n",fname); | |||
| linenum=0; | |||
| @@ -900,7 +902,8 @@ static int compile_dictlist_file(const char *path, const char* filename) | |||
| count++; | |||
| } | |||
| fprintf(f_log,"\t%d entries\n",count); | |||
| if(f_log != NULL) | |||
| fprintf(f_log,"\t%d entries\n",count); | |||
| fclose(f_in); | |||
| return(0); | |||
| } /* end of compile_dictlist_file */ | |||
| @@ -1965,6 +1968,7 @@ int CompileDictionary(const char *dsource, const char *dict_name, FILE *log, cha | |||
| { | |||
| if(fname_err) | |||
| strcpy(fname_err,fname_out); | |||
| fclose(f_in); | |||
| return(-1); | |||
| } | |||
| sprintf(fname_temp,"%s%ctemp",path_home,PATHSEP); | |||
| @@ -1,7 +1,7 @@ | |||
| /*************************************************************************** | |||
| * Copyright (C) 2005 to 2014 by Jonathan Duddington * | |||
| * email: [email protected] * | |||
| * Copyright (C) 2013 Reece H. Dunn * | |||
| * Copyright (C) 2013-2015 Reece H. Dunn * | |||
| * * | |||
| * This program is free software; you can redistribute it and/or modify * | |||
| * it under the terms of the GNU General Public License as published by * | |||
| @@ -273,6 +273,8 @@ int LoadDictionary(Translator *tr, const char *name, int no_error) | |||
| { | |||
| fprintf(stderr,"Can't read dictionary file: '%s'\n",fname); | |||
| } | |||
| if (f != NULL) | |||
| fclose(f); | |||
| return(1); | |||
| } | |||
| @@ -1,7 +1,7 @@ | |||
| /*************************************************************************** | |||
| * Copyright (C) 2005 to 2015 by Jonathan Duddington * | |||
| * email: [email protected] * | |||
| * Copyright (C) 2013 by Reece H. Dunn * | |||
| * Copyright (C) 2013-2015 by Reece H. Dunn * | |||
| * * | |||
| * This program is free software; you can redistribute it and/or modify * | |||
| * it under the terms of the GNU General Public License as published by * | |||
| @@ -111,21 +111,21 @@ static const char *help_text = | |||
| "\tCompile phoneme data in espeak-data/phsource\n" | |||
| "\tand dictionary data in espeak-data/dictsource\n"; | |||
| // Initialise this in OnInit, not statically | |||
| bool MyApp::OnInit(void) | |||
| {//===================== | |||
| int j; | |||
| const wxChar *p; | |||
| char param[120]; | |||
| if(argc > 1) | |||
| { | |||
| p = argv[1]; | |||
| j = 0; | |||
| #if wxUSE_UNICODE == 1 | |||
| wcstombs(param, argv[1], sizeof(param)); | |||
| #else | |||
| const char *p = argv[1]; | |||
| while((param[j] = p[j]) != 0) j++; | |||
| #endif | |||
| if((strcmp(param,"--help")==0) || (strcmp(param,"-h")==0)) | |||
| { | |||
| @@ -559,23 +559,20 @@ void MyFrame::OnAbout(wxCommandEvent& event) | |||
| char buf[300]; | |||
| wxString url_docs; | |||
| wxBoxSizer *topsizer; | |||
| HtmlWindow *html; | |||
| wxDialog dlg(this, wxID_ANY, wxString(_("About"))); | |||
| topsizer = new wxBoxSizer(wxVERTICAL); | |||
| switch(event.GetId()) | |||
| { | |||
| case MENU_ABOUT: | |||
| { | |||
| wxDialog dlg(this, wxID_ANY, wxString(_("About"))); | |||
| sprintf(buf,about_string,espeak_Info(NULL)); | |||
| html = new HtmlWindow(&dlg, wxID_ANY, wxDefaultPosition, wxSize(380, 160), wxHW_SCROLLBAR_NEVER); | |||
| HtmlWindow *html = new HtmlWindow(&dlg, wxID_ANY, wxDefaultPosition, wxSize(380, 160), wxHW_SCROLLBAR_NEVER); | |||
| html -> SetBorders(0); | |||
| html -> SetPage(wxString(buf,wxConvLocal)); | |||
| html -> SetSize(html -> GetInternalRepresentation() -> GetWidth(), | |||
| html -> GetInternalRepresentation() -> GetHeight()); | |||
| wxBoxSizer *topsizer = new wxBoxSizer(wxVERTICAL); | |||
| topsizer -> Add(html, 1, wxALL, 10); | |||
| //#if wxUSE_STATLINE | |||
| @@ -1,7 +1,7 @@ | |||
| /*************************************************************************** | |||
| * Copyright (C) 2006 to 2011 by Jonathan Duddington * | |||
| * email: [email protected] * | |||
| * Copyright (C) 2013 by Reece H. Dunn * | |||
| * Copyright (C) 2013-2015 by Reece H. Dunn * | |||
| * * | |||
| * This program is free software; you can redistribute it and/or modify * | |||
| * it under the terms of the GNU General Public License as published by * | |||
| @@ -369,6 +369,7 @@ void Lexicon_It(int pass) | |||
| { | |||
| str = wxString(buf, wxConvLocal); | |||
| wxLogError(_T("Can't write file: ") + str); | |||
| fclose(f_in); | |||
| return; | |||
| } | |||
| @@ -383,7 +384,7 @@ void Lexicon_It(int pass) | |||
| f_listx = fopen(buf,"w"); | |||
| wxLogStatus(_T("Pass 1")); | |||
| } | |||
| else | |||
| else if(pass == 2) | |||
| { | |||
| CompileDictionary(path_dsource,"it",NULL,NULL,0); | |||
| sprintf(buf,"%s/it_listx2",path_dsource); | |||
| @@ -711,6 +712,7 @@ void Lexicon_De() | |||
| if((f_out = fopen("compare_de","w")) == NULL) | |||
| { | |||
| wxLogError(_T("Can't write file ")); | |||
| fclose(f_out); | |||
| return; | |||
| } | |||
| LoadVoice("de",0); | |||
| @@ -1646,6 +1648,7 @@ void MakeWordFreqList() | |||
| free(p); | |||
| } | |||
| fclose(f_out); | |||
| free(w_list); | |||
| } // end of Make WorkFreqList | |||
| @@ -1,6 +1,7 @@ | |||
| /*************************************************************************** | |||
| * Copyright (C) 2005 to 2014 by Jonathan Duddington * | |||
| * email: [email protected] * | |||
| * Copyright (C) 2015 by Reece H. Dunn * | |||
| * * | |||
| * This program is free software; you can redistribute it and/or modify * | |||
| * it under the terms of the GNU General Public License as published by * | |||
| @@ -106,7 +107,10 @@ void ReadPhondataManifest() | |||
| } | |||
| if((manifest = (NAMETAB *)realloc(manifest, n_lines * sizeof(NAMETAB))) == NULL) | |||
| { | |||
| fclose(f); | |||
| return; | |||
| } | |||
| n_manifest = 0; | |||
| while(fgets(buf, sizeof(buf), f) != NULL) | |||
| @@ -256,25 +256,33 @@ int SpectFrame::ImportSPC2(wxInputStream& stream, float &time_acc) | |||
| if(cy.flags & 0x04) | |||
| markers |= 8; | |||
| spect_data = new USHORT[nx]; | |||
| if(spect_data == NULL) | |||
| if(nx>0) | |||
| { | |||
| wxLogError(_T("Failed to allocate memory")); | |||
| return(1); | |||
| } | |||
| spect_data = new USHORT[nx]; | |||
| max_y = 0; | |||
| for(ix=0; ix<nx; ix++) | |||
| { | |||
| spect_data[ix] = p->data[ix]; | |||
| if(spect_data[ix] > max_y) | |||
| max_y = spect_data[ix]; | |||
| if(spect_data == NULL) | |||
| { | |||
| wxLogError(_T("Failed to allocate memory")); | |||
| return(1); | |||
| } | |||
| max_y = 0; | |||
| for(ix=0; ix<nx; ix++) | |||
| { | |||
| spect_data[ix] = p->data[ix]; | |||
| if(spect_data[ix] > max_y) | |||
| max_y = spect_data[ix]; | |||
| } | |||
| } | |||
| if(nx==0) | |||
| else | |||
| { | |||
| nx = int(8000/dx); | |||
| spect_data = new USHORT[nx]; | |||
| if(spect_data == NULL) | |||
| { | |||
| wxLogError(_T("Failed to allocate memory")); | |||
| return(1); | |||
| } | |||
| for(ix=0; ix<nx; ix++) | |||
| spect_data[ix] = 1; | |||
| max_y = 1; | |||
| @@ -993,6 +993,7 @@ void MyFrame::OnNewWindow(wxCommandEvent& event) | |||
| if(stream.Ok() == FALSE) | |||
| { | |||
| wxLogError(_T("Failed to open '%s'"),filename.c_str()); | |||
| delete spectseq; | |||
| return; | |||
| } | |||
| wxFileName path = wxFileName(filename); | |||
| @@ -1,7 +1,7 @@ | |||
| /*************************************************************************** | |||
| * Copyright (C) 2005 to 2007 by Jonathan Duddington * | |||
| * email: [email protected] * | |||
| * Copyright (C) 2013 Reece H. Dunn * | |||
| * Copyright (C) 2013-2015 Reece H. Dunn * | |||
| * * | |||
| * This program is free software; you can redistribute it and/or modify * | |||
| * it under the terms of the GNU General Public License as published by * | |||
| @@ -386,16 +386,28 @@ void SpectSeq::Load2(wxInputStream& stream, int import, int n) | |||
| if(import==1) | |||
| { | |||
| if(frame->Import(stream) != 0) break; | |||
| if(frame->Import(stream) != 0) | |||
| { | |||
| delete frame; | |||
| break; | |||
| } | |||
| } | |||
| else | |||
| if(import==2) | |||
| { | |||
| if(frame->ImportSPC2(stream,time_acc) != 0) break; | |||
| if(frame->ImportSPC2(stream,time_acc) != 0) | |||
| { | |||
| delete frame; | |||
| break; | |||
| } | |||
| } | |||
| else | |||
| { | |||
| if(frame->Load(stream, file_format) != 0) break; | |||
| if(frame->Load(stream, file_format) != 0) | |||
| { | |||
| delete frame; | |||
| break; | |||
| } | |||
| } | |||
| frames[numframes++] = frame; | |||
| @@ -1,6 +1,7 @@ | |||
| /*************************************************************************** | |||
| * Copyright (C) 2005 to 2014 by Jonathan Duddington * | |||
| * email: [email protected] * | |||
| * Copyright (C) 2015 by Reece H. Dunn * | |||
| * * | |||
| * This program is free software; you can redistribute it and/or modify * | |||
| * it under the terms of the GNU General Public License as published by * | |||
| @@ -98,6 +99,7 @@ static char *ReadPhFile(void *ptr, const char *fname, int *size) | |||
| if(fread(p,1,length,f_in) != length) | |||
| { | |||
| fclose(f_in); | |||
| Free(p); | |||
| return(NULL); | |||
| } | |||
| @@ -493,7 +495,11 @@ void LoadConfig(void) | |||
| if(memcmp(buf,"log",3)==0) | |||
| { | |||
| if(sscanf(&buf[4],"%d %s",&logging_type,string)==2) | |||
| { | |||
| if (f_logespeak) | |||
| fclose(f_logespeak); | |||
| f_logespeak = fopen(string,"w"); | |||
| } | |||
| } | |||
| else | |||
| if(memcmp(buf,"tone",4)==0) | |||
| @@ -1,6 +1,7 @@ | |||
| /*************************************************************************** | |||
| * Copyright (C) 2005 to 2015 by Jonathan Duddington * | |||
| * email: [email protected] * | |||
| * Copyright (C) 2015 by Reece H. Dunn * | |||
| * * | |||
| * This program is free software; you can redistribute it and/or modify * | |||
| * it under the terms of the GNU General Public License as published by * | |||
| @@ -1100,7 +1101,10 @@ voice_t *LoadVoice(const char *vname, int control) | |||
| new_translator->dict_min_size = dict_min; | |||
| LoadDictionary(new_translator, new_dictionary, control & 4); | |||
| if(dictionary_name[0]==0) | |||
| { | |||
| DeleteTranslator(new_translator); | |||
| return(NULL); // no dictionary loaded | |||
| } | |||
| new_translator->dict_condition = conditional_rules; | |||
| @@ -1,7 +1,7 @@ | |||
| /*************************************************************************** | |||
| * Copyright (C) 2005 to 2013 by Jonathan Duddington * | |||
| * email: [email protected] * | |||
| * Copyright (C) 2013 Reece H. Dunn * | |||
| * Copyright (C) 2013-2015 Reece H. Dunn * | |||
| * * | |||
| * This program is free software; you can redistribute it and/or modify * | |||
| * it under the terms of the GNU General Public License as published by * | |||
| @@ -225,6 +225,7 @@ static int VowelChartDir(wxDC *dc, wxBitmap *bitmap) | |||
| if(stream.Ok() == FALSE) | |||
| { | |||
| path = wxFindNextFile(); | |||
| delete spectseq; | |||
| continue; | |||
| } | |||
| spectseq->Load(stream); | |||
| @@ -328,6 +329,7 @@ static int VowelChartList(wxDC *dc, wxBitmap *bitmap, char *fname) | |||
| filename.SetExt(_T("png")); | |||
| bitmap->SaveFile(filename.GetFullPath(),wxBITMAP_TYPE_PNG); | |||
| fclose(f_in); | |||
| return(count); | |||
| } | |||
| @@ -583,7 +585,10 @@ void MakeVowelLists(void) | |||
| ix = GetFileLength(fname); | |||
| prog_log_table = (PHONEME_PROG_LOG *)malloc(ix); | |||
| if(prog_log_table == NULL) | |||
| { | |||
| fclose(f_prog_log); | |||
| return; | |||
| } | |||
| ix = fread(prog_log_table, 1, ix, f_prog_log); | |||
| fclose(f_prog_log); | |||
| n_prog_log = ix / sizeof(PHONEME_PROG_LOG); | |||
| @@ -604,7 +609,11 @@ void MakeVowelLists(void) | |||
| // select the phoneme table by name | |||
| // if(SetVoiceByName(phoneme_tab_list[table].name) != 0) continue; | |||
| if(SelectPhonemeTableName(phoneme_tab_list[table].name) < 0) continue; | |||
| if(SelectPhonemeTableName(phoneme_tab_list[table].name) < 0) | |||
| { | |||
| fclose(f); | |||
| continue; | |||
| } | |||
| voice_found = 0; | |||
| if((LoadVoice(phoneme_tab_list[table].name, 0) != NULL) && (translator->data_dictrules != NULL)) | |||