Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37805549
en ru br
Репозитории ALT
S:a10m-alt4
5.1: a10m-alt1
4.1: a10m-alt0.M41.1
4.0: 10.0-alt2
3.0: 10.0-alt2
www.altlinux.org/Changes

Группа :: Звук
Пакет: freespeech

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: freespeech_1.0m-16focal1.diff
Скачать


--- freespeech-1.0m.orig/INSTALLATION
+++ freespeech-1.0m/INSTALLATION
@@ -24,7 +24,7 @@
 What is needed: 
 
 * An ANSI-C compiler
-* A pronunciation dictionary. We tested with one called the Compuer
+* A pronunciation dictionary. We tested with one called the Computer
   Usable Version of the Oxford Advanced Learner's Dictionary
   (CUVOALD). Because of the copyright restrictions it is not
   contained in this package.  It is available for ftp from
--- freespeech-1.0m.orig/Makefile
+++ freespeech-1.0m/Makefile
@@ -0,0 +1,17 @@
+# General Makefile for Debian packaging system.
+
+DESTDIR =
+
+all:
+	$(MAKE) -C src all
+	$(MAKE) -C lib all
+
+install:
+	$(MAKE) -C src install prefix=$(DESTDIR)/usr
+	$(MAKE) -C lib install prefix=$(DESTDIR)/usr
+
+clean:
+	$(MAKE) -C src clean
+	$(MAKE) -C lib clean
+
+.PHONY: clean install
--- freespeech-1.0m.orig/README.md
+++ freespeech-1.0m/README.md
@@ -0,0 +1,7 @@
+This software originates from the archive found at
+[http://tcts.fpms.ac.be/synthesis/mbrola/tts/English/fs.a10m.tar.gz](http://tcts.fpms.ac.be/synthesis/mbrola/tts/English/fs.a10m.tar.gz)
+
+It contains English text to phoneme converter and pronunciation dictionary
+that being used along with
+[MBROLA](http://tcts.fpms.ac.be/synthesis/mbrola.html)
+can provide full TTS functionality for English language.
--- freespeech-1.0m.orig/debian/changelog
+++ freespeech-1.0m/debian/changelog
@@ -0,0 +1,109 @@
+freespeech (1.0m-16focal1) focal; urgency=low
+
+  * Distribution specific build.
+
+ -- Igor B. Poretsky <poretsky@mlbox.ru>  Sun, 18 Oct 2020 22:03:20 +0300
+
+freespeech (1.0m-16) unstable; urgency=low
+
+  * Numeric values pronunciation fix.
+
+ -- Igor B. Poretsky <poretsky@mlbox.ru>  Fri, 06 Mar 2015 01:41:14 +0300
+
+freespeech (1.0m-15) unstable; urgency=low
+
+  * Corrected pronunciation of numeric values.
+
+ -- Igor B. Poretsky <poretsky@mlbox.ru>  Thu, 05 Mar 2015 22:01:24 +0300
+
+freespeech (1.0m-14) unstable; urgency=low
+
+  * A bit more words in dictionary.
+
+ -- Igor B. Poretsky <poretsky@mlbox.ru>  Wed, 27 Nov 2013 06:40:26 +0400
+
+freespeech (1.0m-11) unstable; urgency=low
+
+  * More words in pronunciation dictionary.
+
+ -- Igor B. Poretsky <poretsky@mlbox.ru>  Thu, 04 Oct 2012 23:37:20 +0400
+
+freespeech (1.0m-10) unstable; urgency=low
+
+  * Fixed memory allocation issue in freephone when compiled in x86-64
+    environment.
+  * Spelling fix in man page.
+  * Updated packaging standards compliance.
+
+ -- Igor B. Poretsky <poretsky@mlbox.ru>  Sun, 23 Sep 2012 16:55:17 +0400
+
+freespeech (1.0m-9) unstable; urgency=low
+
+  * Lexicon additions.
+  * Freephone: Fixed potential issue. Some unused stuff excluded from
+    the compiled executable.
+
+ -- Igor B. Poretsky <poretsky@mlbox.ru>  Sun, 26 Feb 2012 19:02:17 +0400
+
+freespeech (1.0m-8) unstable; urgency=low
+
+  * More words in lexicon.
+
+ -- Igor B. Poretsky <poretsky@mlbox.ru>  Tue, 14 Feb 2012 23:24:25 +0400
+
+freespeech (1.0m-7) unstable; urgency=low
+
+  * Further lexicon improvements.
+
+ -- Igor B. Poretsky <poretsky@mlbox.ru>  Wed, 01 Jun 2011 07:25:45 +0400
+
+freespeech (1.0m-6) unstable; urgency=low
+
+  * Yet more words in lexicon.
+
+ -- Igor B. Poretsky <poretsky@mlbox.ru>  Mon, 30 May 2011 04:12:48 +0400
+
+freespeech (1.0m-5) unstable; urgency=low
+
+  * Lexicon improvements.
+
+ -- Igor B. Poretsky <poretsky@mlbox.ru>  Sun, 29 May 2011 06:36:02 +0400
+
+freespeech (1.0m-4) unstable; urgency=low
+
+  * Some new words added to the lexicon.
+
+ -- Igor B. Poretsky <poretsky@mlbox.ru>  Sun, 09 Jan 2011 14:45:28 +0300
+
+freespeech (1.0m-3) unstable; urgency=low
+
+  * A few words added to the dictionary.
+
+ -- Igor B. Poretsky <poretsky@mlbox.ru>  Thu, 04 Nov 2010 18:27:46 +0300
+
+freespeech (1.0m-2) unstable; urgency=low
+
+  * Fixed segmentation fault condition in freephone.
+  * A few words added to the dictionary.
+  * Additional dictionary corrections are kept in a separate patch file
+    and text710.edin is treated as intermediate file, so it is removed
+    from the sources.
+  * Get rid of redundant libm dependency for the lexholder utility.
+
+ -- Igor B. Poretsky <poretsky@mlbox.ru>  Mon, 14 Jun 2010 23:49:19 +0400
+
+freespeech (1.0m-1) unstable; urgency=low
+
+  * Initial release.
+  * Use Berkeley database instead of gdbm.
+  * Get rid of trailing zeros in the database keys.
+  * Use regexp support from C library instead of the local
+    implementation.
+  * Use default database support library version instead of the explicit
+    one.
+  * Do not claim freephone output file as "probably audio" in it's usage
+    info as it is somewhat confusing in fact.
+  * New lexical database holding utility.
+  * Minor lexical data additions and corrections.
+
+ -- Igor B. Poretsky <poretsky@mlbox.ru>  Sun, 24 Jan 2010 17:21:56 +0300
--- freespeech-1.0m.orig/debian/compat
+++ freespeech-1.0m/debian/compat
@@ -0,0 +1 @@
+10
--- freespeech-1.0m.orig/debian/control
+++ freespeech-1.0m/debian/control
@@ -0,0 +1,27 @@
+Source: freespeech
+Section: sound
+Priority: optional
+Maintainer: Igor B. Poretsky <poretsky@mlbox.ru>
+Build-Depends: cdbs, debhelper (>= 10), libdb-dev
+Standards-Version: 4.1.4
+
+Package: freephone
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Recommends: enlex
+Suggests: mbrola, mbrola-voice-en
+Description: English Text-To-Phoneme converter
+ freephone converts English text to phonemes for MBROLA.
+ .
+ It can make use of an external dictionary in hash format,
+ such as the one provided by enlex package.
+
+Package: enlex
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Recommends: freephone
+Description: English pronunciation dictionary
+ This package is aimed primarily for use together with the Freephone
+ phonetizer for Mbrola. When it is installed you can instruct Freephone
+ to use the pronunciation dictionary by the command line switch
+ "-h /usr/share/freespeech/enlex.db".
--- freespeech-1.0m.orig/debian/copyright
+++ freespeech-1.0m/debian/copyright
@@ -0,0 +1,31 @@
+This package was debianized by Igor B. Poretsky <poretsky@mlbox.ru>
+on Sat, 23 Jan 2010 11:05:07 +0300.
+
+It was downloaded from http://tcts.fpms.ac.be/synthesis/mbrola/tts/English/fs.a10m.tar.gz
+
+Upstream Author: Alistair Conkie <adc@cstr.ed.ac.uk>
+
+Copyright (C) 1995 Stephen Isard, Alistair Conkie
+
+
+License:
+
+    This package is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+ 
+    This package is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with this package; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+
+On Debian systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
+
+The Debian packaging is (C) 2010, Igor B. Poretsky <poretsky@mlbox.ru>
+and is licensed under the GPL, see above.
--- freespeech-1.0m.orig/debian/enlex.README.Debian
+++ freespeech-1.0m/debian/enlex.README.Debian
@@ -0,0 +1,12 @@
+enlex for Debian
+---------------------
+
+This package contains English pronunciation dictionary along with the
+simple lexical database holding utility lexholder-en. It is primarily
+intended for use along with the Freephone phonetizer for Mbrola speech
+synthesizer. For freephone to make use of the pronunciation dictionary
+call it with "-h /usr/share/freespeech/enlex.db" switch in the command line.
+
+See freephone and lexholder-ru man pages for more details.
+
+ -- Igor B. Poretsky <poretsky@mlbox.ru>  Sat, 23 Jan 2010 11:05:07 +0300
--- freespeech-1.0m.orig/debian/enlex.docs
+++ freespeech-1.0m/debian/enlex.docs
@@ -0,0 +1,2 @@
+doc/phoncode.doc
+lib/text710.doc
--- freespeech-1.0m.orig/debian/enlex.install
+++ freespeech-1.0m/debian/enlex.install
@@ -0,0 +1,2 @@
+debian/tmp/usr/bin/lexholder-en
+debian/tmp/usr/share/freespeech/enlex.db
--- freespeech-1.0m.orig/debian/enlex.manpages
+++ freespeech-1.0m/debian/enlex.manpages
@@ -0,0 +1 @@
+debian/lexholder-en.1
--- freespeech-1.0m.orig/debian/freephone.1
+++ freespeech-1.0m/debian/freephone.1
@@ -0,0 +1,36 @@
+.\"                                      Hey, EMACS: -*- nroff -*-
+.TH FREEPHONE 1 "January 23, 2010"
+.SH NAME
+freephone \- English Text-To-Phoneme converter
+.SH SYNOPSIS
+.B freephone
+.RI [-i file] [-o file] [-h dictionary]
+.SH DESCRIPTION
+\fBfreephone\fP converts English text to phonemes for \fBmbrola\fP
+speech synthesizer. Usually this program acts like a filter eating
+English text on the standard input and producing phonemes on the
+standard output. In conjunction with \fBmbrola\fP it provides complete
+English TTS.
+.SH OPTIONS
+\fBfreephone\fP understands the following command line options.
+.TP
+.B \-i <file>
+.br
+Input text file or \fB\-\fP for standard input (default).
+.TP
+.B \-o <file>
+.br
+Output file or \fB\-\fP for standard output (default).
+.TP
+.B \-h <dictionary>
+.br
+Use pronunciation dictionary in hash format (no default), such as the
+one provided by enlex(1).
+.SH SEE ALSO
+.BR lexholder\-en (1),
+.BR mbrola (1).
+.SH AUTHOR
+Alistair Conkie <adc@cstr.ed.ac.uk>
+.PP
+This manual page was written by Igor B. Poretsky <poretsky@mlbox.ru>
+especially for the Debian package.
--- freespeech-1.0m.orig/debian/freephone.docs
+++ freespeech-1.0m/debian/freephone.docs
@@ -0,0 +1,6 @@
+README
+ACKNOWLEDGEMENTS
+doc/minidesc.doc
+doc/OVERVIEW
+doc/phoncode.doc
+doc/spn_format.doc
--- freespeech-1.0m.orig/debian/freephone.install
+++ freespeech-1.0m/debian/freephone.install
@@ -0,0 +1 @@
+debian/tmp/usr/bin/freephone
--- freespeech-1.0m.orig/debian/freephone.manpages
+++ freespeech-1.0m/debian/freephone.manpages
@@ -0,0 +1 @@
+debian/freephone.1
--- freespeech-1.0m.orig/debian/lexholder-en.1
+++ freespeech-1.0m/debian/lexholder-en.1
@@ -0,0 +1,66 @@
+.\"                                      Hey, EMACS: -*- nroff -*-
+.TH LEXHOLDER\-EN 1 "January 23, 2010"
+.SH NAME
+lexholder\-en \- lexical database holding utility
+.SH SYNOPSIS
+.B lexholder\-ru
+.RI [ options ] <db_path>
+.SH DESCRIPTION
+\fBlexholder\-en\fP is a small utility intended for use from the
+command line or shell-scripts. It allows to construct, test, manage
+and query lexical database as well as extract it's content
+in textual form.
+.PP
+This database is primarily intended for use along with the
+\fBfreephone\fP phonetizer for \fBmbrola\fP to provide pronunciation
+information for English words.
+.PP
+When filling and updating the database,
+new records are read from the standard input.
+When extracting data from the database,
+The result is printed to the standard output.
+This behaviour can be changed by the \fB\-f\fP switch.
+.SH OPTIONS
+When no options are specified, the program reads it's standard input
+and stores it's content in the database.
+.PP
+All options recognized in the command line are described below.
+.TP
+.B \-h
+.br
+Print summary of options and exit. This option discards all other
+command line specifications. It is the only case when the database
+path is not required.
+.TP
+.B \-l
+.br
+List database content in textual form.
+.TP
+.B \-s <word>
+.br
+Search specified word in the lexical database. If the word is found
+program exits successfully and outputs it's pronunciation string,
+ otherwise prints nothing and exits with non-zero exit code.
+.TP
+.B \-d <word>
+.br
+Delete record for specified word.
+.TP
+.B \-f <file>
+.br
+Use specified file instead of standard input or output.
+.TP
+.B \-r
+.br
+Replace mode. This mode causes that the new records replace existing
+ones with the same key. By default such records are ignored.
+.TP
+.B \-q
+.br
+Be more quiet than usual: don't print warnings about ignoring
+duplicate records when filling the database.
+.SH SEE ALSO
+.BR freephone (1),
+.BR mbrola (1).
+.SH AUTHOR
+Igor B. Poretsky <poretsky@mlbox.ru>
--- freespeech-1.0m.orig/debian/rules
+++ freespeech-1.0m/debian/rules
@@ -0,0 +1,8 @@
+#!/usr/bin/make -f
+
+include /usr/share/cdbs/1/rules/debhelper.mk
+include /usr/share/cdbs/1/class/makefile.mk
+
+DEB_MAKE_CLEAN_TARGET   = clean
+DEB_MAKE_BUILD_TARGET   = all
+DEB_MAKE_INSTALL_TARGET = install DESTDIR=$(CURDIR)/debian/tmp
--- freespeech-1.0m.orig/debian/source/format
+++ freespeech-1.0m/debian/source/format
@@ -0,0 +1 @@
+1.0
--- freespeech-1.0m.orig/lib/Makefile
+++ freespeech-1.0m/lib/Makefile
@@ -10,45 +10,56 @@
 #
 #
 ############################################################################
+
+# Installation paths
+prefix = /usr/local
+bindir = ${prefix}/bin
+datadir = ${prefix}/share/freespeech
+docdir = ${prefix}/share/doc/enlex
+
+# Installed database filename
+DBF = enlex.db
+
+# Installed utility name
+UTILITY = lexholder-en
+
 # Select the appropriate Makefile options for your system. then type make.
 ############################################################################
-# Sun users
-# CC = gcc
-# CFLAGS = -g -Wall -pedantic
-# LIBS = -lm
-############################################################################
 # FreeBSD users
 # CC = gcc
-# CFLAGS = -O2 -Wall -pedantic -DFBSD_DATABASE
+# CFLAGS = -O2 -DFBSD_DATABASE
+# LFLAGS = -s
 # LIBS = -lm
+# GROUP = wheel
 ############################################################################
 # Linux users
 CC = gcc
-CFLAGS = -g -Wall -pedantic
-LIBS = -lm -lgdbm
+CFLAGS = -Wall -O2
+LFLAGS = -s
+LIBS = -ldb
+GROUP = root
 ############################################################################
 
-OBJ = dbm_prog.c
-
-
-all: lexicon 
 
-lexicon: text710.edin dbm_prog
-	/bin/rm -i lexicon*
-	./dbm_prog -o lexicon -i text710.edin
-	touch lexicon
+all: lexicon
 
-text710.edin: text710.dat read_ox_dict
-	read_ox_dict text710.dat > text710.edin
+lexicon: text710.edin lexholder
+	./lexholder -qf $< $@
 
-dbm_prog: $(OBJ)
-	$(CC) $(CFLAGS) -o $@ $(OBJ) $(LIBS)
+text710.edin: text710.dat text710.edin.patch read_ox_dict
+	./read_ox_dict $< > $@ 2>/dev/null
+	patch -Esup0 < text710.edin.patch
+
+lexholder: lexholder.c
+	$(CC) $(CFLAGS) $(LFLAGS) -o $@ $< $(LIBS)
+
+.PHONY: install
+install: lexholder lexicon
+	install -d ${bindir} ${datadir} ${docdir}
+	install -g ${GROUP} -o root -m 0755 -p lexholder ${bindir}/${UTILITY}
+	install -g ${GROUP} -o root -m 0644 -p lexicon ${datadir}/${DBF}
+	install -g ${GROUP} -o root -m 0644 -p text710.doc ${docdir}
 
+.PHONY: clean
 clean:
-	rm -f dbm_prog *.o core gmon.out lexicon 
-
-distribution:
-	echo "This needs written."
-
-# dependencies
-
+	rm -f lexholder *.o text710.edin lexicon
--- freespeech-1.0m.orig/lib/lexholder.c
+++ freespeech-1.0m/lib/lexholder.c
@@ -0,0 +1,215 @@
+/* lexholder.c
+ *
+ * Lexicon database holding utility.
+ */
+
+/*
+ * Copyright (C) 2010 Igor B. Poretsky <poretsky@mlbox.ru>
+ * 
+ *  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
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ * 
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ */
+
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <limits.h>
+
+#ifdef FBSD_DATABASE
+#include <db.h>
+#else
+#include <db_185.h>
+#endif
+
+#include <fcntl.h>
+
+
+/* Command line error codes */
+#define CL_OK 0
+#define CS_CONFLICT 1
+#define NO_DB_FILE 2
+
+
+static const char *usage =
+  "Lexical database holding utility.\n\n"
+
+  "This utility is designed for constructing, managing, testing and querying\n"
+  "lexical database providing pronunciation info for English words.\n\n"
+
+  "Usage:\t%s [options] <db_path>\n\n"
+
+  "When filling and updating the database, new records are read\n"
+  "from the standard input. When extracting data from the database\n"
+  "the result is printed to the standardoutput.\n"
+  "This behaviour can be changed by the \"-f\" switch.\n\n"
+
+  "If no options are specified, the program reads it's standard input\n"
+  "and stores it's content in the database.\n\n"
+
+  "The recognized options are as follows:\n\n"
+
+  "-h -- Print this help (the only option not requiring the database path)\n"
+  "-l -- List database content\n"
+  "-s <word> -- Search specified word\n"
+  "-d <word> -- Delete record for specified word\n"
+  "-f <file> -- Use specified file instead of standard input or output\n"
+  "-r -- Replace mode\n"
+  "-q -- Don't print messages about ignoring duplicates\n\n";
+
+
+int main(int argc, char *argv[])
+{
+  FILE *fp = NULL;
+  DB *db;
+  DBT key, value;
+  char line[256];
+  char *f = NULL, *d = NULL, *s = NULL;
+  int i, n, q = 0, ret = NO_DB_FILE, mode = R_NOOVERWRITE;
+
+  /* Parse command line */
+  if(argc==1)
+    {
+      (void)fprintf(stderr, usage, argv[0]);
+      return EXIT_FAILURE;
+    }
+  while((n = getopt(argc,argv,"f:s:d:lqrh")) != -1)
+    switch(n)
+      {
+      case 'f':
+        if (strcmp(optarg, "-"))
+          f = optarg;
+        break;
+      case 'd':
+        if (d || s) ret = CS_CONFLICT;
+        else d = optarg;
+        break;
+      case 's':
+        if (d || s) ret = CS_CONFLICT;
+        else s = optarg;
+        break;
+      case 'l':
+        if (d || s) ret = CS_CONFLICT;
+        else s = line;
+        break;
+      case 'r':
+        mode = 0;
+        break;
+      case 'q':
+        q = 1;
+        break;
+      case 'h':
+        (void)fprintf(stderr, usage, argv[0]);
+        return EXIT_SUCCESS;
+      default:
+        (void)fprintf(stderr, usage, argv[0]);
+        return EXIT_FAILURE;
+      }
+  if (optind && argv[optind])
+    ret = CL_OK;
+  switch (ret)
+    {
+    case CS_CONFLICT:
+      (void)fprintf(stderr,
+                    "Ambiguous options in command line\n");
+      return EXIT_FAILURE;
+    case NO_DB_FILE:
+      (void)fprintf(stderr, "DB file must be specified\n");
+      return EXIT_FAILURE;
+    default:
+      break;
+    }
+
+  /* Open file for input or output if necessary */
+  if (!d)
+    {
+      if (f)
+        fp = fopen(f, s ? "w" : "r");
+      else fp = s ? stdout : stdin;
+      if (!fp)
+        {
+          (void)fprintf(stderr, "Can't open file %s\n", f);
+          return EXIT_FAILURE;
+        }
+    }
+
+  /* Open the database in appropriate mode */
+  db = dbopen(argv[optind], s ? O_RDONLY : (O_RDWR | O_CREAT), 0644, DB_HASH, NULL);
+  if (!db)
+    {
+      (void)fprintf(stderr, "Cannot open the database %s\n", argv[optind]);
+      return EXIT_FAILURE;
+    }
+
+  ret = EXIT_SUCCESS;
+  if (s == line) /* List database content */
+    {
+      for (n = 0; !db->seq(db, &key, &value, R_NEXT); n++)
+        {
+          (void)strncpy(line, key.data, key.size);
+          (void)fprintf(fp, "%s %s\n", line, (char *)value.data);
+        }
+      (void)fprintf(stderr, "%i records extracted.\n", n);
+    }
+  else if (s) /* Lookup database for specified word */
+    {
+      key.data = s;
+      key.size = strlen(s);
+      if (db->get(db, &key, &value, 0))
+        ret = EXIT_FAILURE;
+      else (void)fprintf(fp, "%s\n", (char *)value.data);
+    }
+  else if (d) /* Delete record for specified word */
+    {
+      key.data = d;
+      key.size = strlen(d);
+      ret = db->del(db, &key, 0) ? EXIT_FAILURE : EXIT_SUCCESS;
+    }
+  else /* Fill the database */
+    {
+      for (i = 0, n = 1; fgets(line, 256, fp); n++)
+        {
+          key.data = strtok(line," ");
+          key.size = strlen(key.data);
+          value.data = strtok(NULL,"\n");
+          value.size = strlen(value.data) + 1;
+          ret = db->put(db, &key, &value, mode);
+          if (ret < 0)
+            break;
+          else if (ret)
+            {
+              if (!q)
+                (void)fprintf(stderr, "%s:%i: warning: Duplicate entry. Ignored.\n",
+                              f ? f : "stdin", n);
+              i++;
+            }
+        }
+      if (ret < 0)
+        {
+          (void)fprintf(stderr, "%s:%i: error: Database insertion failure. Exiting now.\n",
+                        f ? f : "stdin", n);
+          ret = EXIT_FAILURE;
+        }
+      else
+        {
+          (void)fprintf(stderr, "%i words processed.\n", --n);
+          (void)fprintf(stderr, "%i duplicates ignored.\n", i);
+          (void)fprintf(stderr, "%i records put into the database.\n", n - i);
+          ret = EXIT_SUCCESS;
+        }
+    }
+
+  /* All done */
+  (void)db->close(db);
+  (void)fclose(fp);
+  return ret;
+}
--- freespeech-1.0m.orig/lib/read_ox_dict
+++ freespeech-1.0m/lib/read_ox_dict
@@ -1,4 +1,4 @@
-#!/usr/local/bin/perl
+#!/usr/bin/perl
 
 # Copyright (c) 1995 Alistair Conkie. All rights reserved.
 # This program is free software; you can redistribute it and/or
--- freespeech-1.0m.orig/lib/text710.edin.patch
+++ freespeech-1.0m/lib/text710.edin.patch
@@ -0,0 +1,1301 @@
+diff -u text710.edin.orig text710.edin
+--- text710.edin.orig	2015-03-06 01:02:12.876808110 +0300
++++ text710.edin	2015-03-06 01:03:33.672809165 +0300
+@@ -1009,7 +1009,6 @@
+ Dingle d * i ng g l
+ Dinnington d * i n i ng t a n
+ Dip d * i p
+-Dir d i . r * e k t a r
+ Dives d * ie v ee z
+ Djibouti j i . b * uu t i
+ Djiboutian j i . b * uu t eer n
+@@ -1434,6 +1433,7 @@
+ Gov g * u v a n a r
+ Governor-General g ~ u v n a - j * e n r a l
+ Governor-Generals g ~ u v n a - j * e n r a l z
++Graham g r * aa m
+ Grampian g r * aa m p eer n
+ Granada g r a . n * ar d a
+ Grangemouth g r * ai n j m a th
+@@ -2596,7 +2596,6 @@
+ Nicaragua n ~ i k a . r * aa g y oor
+ Nicaraguan n ~ i k a . r * aa g y oor n
+ Nicaraguans n ~ i k a . r * aa g y oor n z
+-Nice n * ee s
+ Nicholas n * i k a l a s
+ Nick n * i k
+ Nicola n * i k a l a
+@@ -4200,6 +4199,7 @@
+ abstracting a b . s t r * aa k t i ng
+ abstraction a b . s t r * aa k sh n
+ abstractions a b . s t r * aa k sh n z
++abstractness a b . s t r * aa k t n a s
+ abstracts * aa b s t r aa k t s
+ abstracts a b . s t r * aa k t s
+ abstruse a b . s t r * uu s
+@@ -6454,6 +6454,7 @@
+ architectural ~ ar k i . t * e k ch a r a l
+ architecturally ~ ar k i . t * e k ch a r a l i
+ architecture * ar k i t e k ch a r
++architectures * ar k i t e k ch a z
+ archives * ar k ie v z
+ archivist * ar k i v i s t
+ archivists * ar k i v i s t s
+@@ -6979,6 +6980,8 @@
+ asymptotes * aa s i m t oa t s
+ asymptotic ~ aa s i m . t * o t i k
+ asymptotically ~ aa s i m . t * o t i k l i
++asynchronous ~ ai s * i ng k r a n a s
++asynchronously ~ ai s * i ng k r a n a s l i
+ at * aa t
+ at-home a t - h * oa m
+ at-homes a t - h * oa m z
+@@ -7037,7 +7040,6 @@
+ attaboy ~ aa t a . b * oi
+ attach a . t * aa ch
+ attache a . t * aa sh ai
+-attaches a . t * aa sh ai z
+ attached a . t * aa ch t
+ attaches a . t * aa ch i z
+ attaching a . t * aa ch i ng
+@@ -8072,6 +8074,8 @@
+ baseboards b * ai s b aw d z
+ based b * ai s t
+ baseless b * ai s l i s
++baseline b * ai s l ie n
++baselines b * ai s l ie n z
+ basement b * ai s m a n t
+ basements b * ai s m a n t s
+ baser b * ai s a r
+@@ -8086,6 +8090,7 @@
+ bashing b * aa sh i ng
+ basic b * ai s i k
+ basically b * ai s i k l i
++basics b * ai s i k s
+ basil b * aa z l
+ basilica b a . z * i l i k a
+ basilicas b a . z * i l i k a z
+@@ -8526,10 +8531,13 @@
+ behaved b i . h * ai v d
+ behaves b i . h * ai v z
+ behaving b i . h * ai v i ng
++behavior b i . h * ai v eer r
++behaviors b i . h * ai v eer z
+ behaviour b i . h * ai v eer r
+ behaviourism b i . h * ai v eer r i z a m
+ behaviourist b i . h * ai v eer r i s t
+ behaviourists b i . h * ai v eer r i s t s
++behaviours b i . h * ai v eer z
+ behead b i . h * e d
+ beheaded b i . h * e d i d
+ beheading b i . h * e d i ng
+@@ -9057,8 +9065,8 @@
+ billies b * i l i z
+ billing b * i l i ng
+ billingsgate b * i l i ng z g ai t
+-billion b * i l eer ng
+-billions b * i l eer ng z
++billion b * i l eer n
++billions b * i l eer n z
+ billionth b * i l eer n th
+ billionths b * i l eer n th s
+ billow b * i l oa
+@@ -9083,6 +9091,7 @@
+ binders b * ie n d a z
+ bindery b * ie n d a r i
+ binding b * ie n d i ng
++bindings b * ie n d i ng z
+ binds b * ie n d z
+ bindweed b * ie n d w ee d
+ bine b * ie n
+@@ -9605,6 +9614,7 @@
+ bluest b l * uu i s t
+ bluestocking b l * uu s t o k i ng
+ bluestockings b l * uu s t o k i ng z
++bluetooth b l * uu t uu th
+ bluff b l * u f
+ bluffed b l * u f t
+ bluffer b l * u f a r
+@@ -10690,6 +10700,9 @@
+ brows b r * ou z
+ browse b r * ou z
+ browsed b r * ou z d
++browser b r * ou z a r
++browserless b r * ou z a l a s
++browsers b r * ou z a z
+ browses b r * ou z i z
+ browsing b r * ou z i ng
+ bruin b r * uu i n
+@@ -11221,6 +11234,8 @@
+ byroads b * ie r oa d z
+ bystander b * ie s t aa n d a r
+ bystanders b * ie s t aa n d a z
++byte b * ie t
++bytes b * ie t s
+ byway b * ie w ai
+ byways b * ie w ai z
+ byword b * ie w er d
+@@ -11749,6 +11764,8 @@
+ captaining k * aa p t i n i ng
+ captains k * aa p t i n z
+ caption k * aa p sh n
++captioner k * aa p sh n a r
++captioners k * aa p sh n a z
+ captions k * aa p sh n z
+ captious k * aa p sh a s
+ captiously k * aa p sh a s l i
+@@ -12384,6 +12401,10 @@
+ centennial s e n . t * e n eer l
+ centennially s e n . t * e n eer l i
+ centennials s e n . t * e n eer l z
++center s * e n t a r
++centered s * e n t a d
++centers s * e n t a z
++centering s * e n t a r i ng
+ centi- s * e n t i -
+ centigrade s * e n t i g r ai d
+ centime s * o n t ee m
+@@ -13490,6 +13511,8 @@
+ classification k l ~ aa s i f i . k * ai sh n
+ classifications k l ~ aa s i f i . k * ai sh n z
+ classified k l * aa s i f ie d
++classifier k l * aa s i f ie a r
++classifiers k l * aa s i f ie a z
+ classifies k l * aa s i f ie z
+ classify k l * aa s i f ie
+ classifying k l * aa s i f ie i ng
+@@ -14297,7 +14320,9 @@
+ colonnades k ~ o l a . n * ai d z
+ colons k * oa l a n z
+ colony k * o l a n i
++color k * u l a r
+ coloratura k ~ o l a r a . t * oor r a
++colors k * u l a z
+ colossal k a . l * o s l
+ colossi k a . l * o s ie
+ colossus k a . l * o s a s
+@@ -14498,6 +14523,8 @@
+ committed k a . m * i t i d
+ committee k a . m * i t i
+ committees k a . m * i t i z
++committer k a . m * i t a r
++committers k a . m * i t a z
+ committing k a . m * i t i ng
+ commode k a . m * oa d
+ commodes k a . m * oa d z
+@@ -14673,6 +14700,7 @@
+ completes k a m . p l * ee t s
+ completing k a m . p l * ee t i ng
+ completion k a m . p l * ee sh n
++completions k a m . p l * ee sh n z
+ complex k * o m p l e k s
+ complexes k * o m p l e k s i z
+ complexion k a m . p l * e k sh n
+@@ -14680,6 +14708,7 @@
+ complexities k a m . p l * e k s i t i z
+ complexity k a m . p l * e k s i t i
+ compliance k a m . p l * ie a n s
++compliancy k a m . p l * ie a n s i
+ compliant k a m . p l * ie a n t
+ complicate k * o m p l i k ai t
+ complicated k * o m p l i k ai t i d
+@@ -14719,6 +14748,7 @@
+ composes k a m . p * oa z i z
+ composing k a m . p * oa z i ng
+ composite k * o m p a z i t
++composites k * o m p a z i t s
+ composition k ~ o m p a . z * i sh n
+ compositions k ~ o m p a . z * i sh n z
+ compositor k a m . p * o z i t a r
+@@ -14908,6 +14938,7 @@
+ concurred k a n . k * er d
+ concurrence k a n . k * u r a n s
+ concurrences k a n . k * u r a n s i z
++concurrency k a n . k * u r a n s i
+ concurrent k a n . k * u r a n t
+ concurrently k a n . k * u r a n t l i
+ concurring k a n . k * er r i ng
+@@ -15904,6 +15935,8 @@
+ coped k * oa p t
+ copes k * oa p s
+ copied k * o p i d
++copier k * o p eer r
++copiers k * o p eer z
+ copies k * o p i z
+ coping k * oa p i ng
+ coping-stone k * oa p i ng - s t oa n
+@@ -17472,8 +17505,13 @@
+ custom-made k ~ u s t a m - m * ai d
+ customarily k * u s t a m a r a l i
+ customary k * u s t a m a r i
++customed k * u s t a m d
+ customer k * u s t a m a r
+ customers k * u s t a m a z
++customizable k u s t a m * ie z a b l
++customize k * u s t a m ie z
++customized k * u s t a m ie z d
++customizes k * u s t a m ie z i z
+ customs k * u s t a m z
+ cut k * u t
+ cut-out k * u t - ou t
+@@ -17786,7 +17824,11 @@
+ dastardly d * aa s t a d l i
+ dastards d * aa s t a d z
+ data d * ai t a
++database d ~ ai t a . b * ai s
++databases d ~ ai t a . b * ai s i z
+ datable d * ai t a b l
++dataset d ~ ai t a . s e t
++datasets d ~ ai t a . s e t s
+ date d * ai t
+ dated d * ai t i d
+ dateless d * ai t l a s
+@@ -18177,6 +18219,12 @@
+ decolonized d ~ ee . k * o l a n ie z d
+ decolonizes d ~ ee . k * o l a n ie z i z
+ decolonizing d ~ ee . k * o l a n ie z i ng
++decompile d ~ ee k a m . p * ie l
++decompiled d ~ ee k a m . p * ie l d
++decompiler d ~ ee k a m . p * ie l a r
++decompilers d ~ ee k a m . p * ie l a z
++decompiles d ~ ee k a m . p * ie l z
++decompiling d ~ ee k a m . p * ie l i ng
+ decompose d ~ ee k a m . p * oa z
+ decomposed d ~ ee k a m . p * oa z d
+ decomposes d ~ ee k a m . p * oa z i z
+@@ -18562,6 +18610,8 @@
+ delimitation d ee . l ~ i m i . t * ai sh n
+ delimitations d ee . l ~ i m i . t * ai sh n z
+ delimited d ee . l * i m i t i d
++delimiter d ee . l * i m i t a r
++delimiters d ee . l * i m i t a z
+ delimiting d ee . l * i m i t i ng
+ delimits d ee . l * i m i t s
+ delineate d i . l * i n i ai t
+@@ -19044,6 +19094,8 @@
+ descents d i . s * e n t s
+ describe d i . s k r * ie b
+ described d i . s k r * ie b d
++describer d i . s k r * ie b a r
++describers d i . s k r * ie b a z
+ describes d i . s k r * ie b z
+ describing d i . s k r * ie b i ng
+ descried d i . s k r * ie d
+@@ -19432,6 +19484,8 @@
+ dialecticians d ~ ie a l e k . t * i sh n z
+ dialectics d ~ ie a . l * e k t i k s
+ dialects d * ie a l e k t s
++dialed d * ie a l d
++dialing d * ie a l i ng
+ dialled d * ie a l d
+ dialling d * ie a l i ng
+ dialogue d * ie a l o g
+@@ -20123,6 +20177,10 @@
+ disestablishes d ~ i s i . s t * aa b l i sh i z
+ disestablishing d ~ i s i . s t * aa b l i sh i ng
+ disestablishment d ~ i s i . s t * aa b l i sh m a n t
++disfavor d ~ i s . f * ai v a r
++disfavored d ~ i s . f * ai v a d
++disfavoring d ~ i s . f * ai v a r i ng
++disfavors d ~ i s . f * ai v a z
+ disfavour d ~ i s . f * ai v a r
+ disfavoured d ~ i s . f * ai v a d
+ disfavouring d ~ i s . f * ai v a r i ng
+@@ -21755,6 +21813,9 @@
+ duping d y * uu p i ng
+ dupl d y * uu p l i k a t
+ duplex d y * uu p l e k s
++duplexed d y * uu p l e k s t
++duplexes d y * uu p l e k s i z
++duplexing d y * uu p l e k s i ng
+ duplicate d y * uu p l i k a t
+ duplicate d y * uu p l i k ai t
+ duplicated d y * uu p l i k ai t i d
+@@ -22551,6 +22612,8 @@
+ embonpoint ~ o m b o n . p w * ar ng
+ emboss i m . b * o s
+ embossed i m . b * o s t
++embosser i m . b * o s a r
++embossers i m . b * o s a z
+ embosses i m . b * o s i z
+ embossing i m . b * o s i ng
+ embrace i m . b r * ai s
+@@ -22889,6 +22952,7 @@
+ enforceable i n . f * aw s a b l
+ enforced i n . f * aw s t
+ enforcement i n . f * aw s m a n t
++enforcements i n . f * aw s m a n t s
+ enforces i n . f * aw s i z
+ enforcing i n . f * aw s i ng
+ enfranchise i n . f r * aa n ch ie z
+@@ -24200,8 +24264,6 @@
+ exports * e k s p aw t s
+ exports i k . s p * aw t s
+ expos * e k s p oa z
+-expose e k . s p * oa z ai
+-exposes e k . s p * oa z ai z
+ expose i k . s p * oa z
+ exposed i k . s p * oa z d
+ exposes i k . s p * oa z i z
+@@ -24486,6 +24548,7 @@
+ face-saver f * ai s - s ai v a r
+ face-savers f * ai s - s ai v a z
+ face-saving f * ai s - s ai v i ng
++facebook f * ai s b oo k
+ faced f * ai s t
+ faceless f * ai s l a s
+ facer f * ai s a r
+@@ -24517,7 +24580,7 @@
+ factions f * aa k sh n z
+ factious f * aa k sh a s
+ factitious f aa k . t * i sh a s
+-factor f * aa k t a r
++factoring f * aa k t a r i ng
+ factories f * aa k t a r i z
+ factorize f * aa k t a r ie z
+ factorized f * aa k t a r ie z d
+@@ -24868,6 +24931,15 @@
+ faun f * aw n
+ fauna f * aw n a
+ fauns f * aw n z
++favor f * ai v a r
++favorable f * ai v a r a b l
++favorably f * ai v a r a b l i
++favored f * ai v a d
++favoring f * ai v a r i ng
++favorite f * ai v a r i t
++favorites f * ai v a r i t s
++favoritism f * ai v r i t i z a m
++favors f * ai v a z
+ favour f * ai v a r
+ favourable f * ai v a r a b l
+ favourably f * ai v a r a b l i
+@@ -25252,7 +25324,11 @@
+ filching f * i l ch i ng
+ file f * ie l
+ filed f * ie l d
++filename f ~ ie l . n * ai m
++filenames f ~ ie l . n * ai m z
+ files f * ie l z
++filesystem f ~ ie l . s * i s t a m
++filesystems f ~ ie l . s * i s t a m z
+ filial f * i l eer l
+ filibuster f * i l i b u s t a r
+ filibustered f * i l i b u s t a d
+@@ -25438,6 +25514,8 @@
+ firedogs f * ie a d o g z
+ fireflies f * ie a f l ie z
+ firefly f * ie a f l ie
++firefox f * ie a f o k s
++firefoxes f * ie a f o k s i z
+ fireguard f * ie a g ar d
+ fireguards f * ie a g ar d z
+ firelight f * ie a l ie t
+@@ -25745,6 +25823,8 @@
+ flaunts f l * aw n t s
+ flautist f l * aw t i s t
+ flautists f l * aw t i s t s
++flavor f l * aa v a r
++flavors f l * aa v a z
+ flavour f l * ai v a r
+ flavoured f l * ai v a d
+ flavouring f l * ai v a r i ng
+@@ -26214,6 +26294,9 @@
+ fondly f * o n d l i
+ fondness f * o n d n a s
+ font f * o n t
++fontifies f * o n t i f ie z
++fontify f * o n t i f ie
++fontifying f * o n t i f ie i ng
+ fonts f * o n t s
+ food f * uu d
+ foodless f * uu d l a s
+@@ -27265,6 +27348,7 @@
+ fun f * u n
+ function f * u ng k sh n
+ functional f * u ng k sh a n l
++functionalities f ~ u ng k sh a n * aa l i t i z
+ functionalism f * u ng k sh a n a l i z a m
+ functionalist f * u ng k sh n a l i s t
+ functionalists f * u ng k sh n a l i s t s
+@@ -28111,6 +28195,8 @@
+ gifting g * i f t i ng
+ gifts g * i f t s
+ gig g * i g
++gigabyte g * i g a b ie t
++gigabytes g * i g a b ie t s
+ gigantic j ie . g * aa n t i k
+ giggle g * i g l
+ giggled g * i g l d
+@@ -29688,6 +29774,7 @@
+ half-yearly h ar f - y * er l i
+ halfback h * ar f b aa k
+ halfbacks h * ar f b aa k s
++halftoning h ~ ar f . t * oa n i ng
+ halfpennies h * ai p n i z
+ halfpenny h * ai p n i
+ halfpennyworth h * ai p n i w er th
+@@ -30695,6 +30782,7 @@
+ hieroglyphics h ~ ie a r a . g l * i f i k s
+ hieroglyphs h * ie a r a g l i f s
+ hies h * ie z
++hifi h ie f * ie
+ higgledy-piggledy h ~ i g l d i - p * i g l d i
+ high h * ie
+ high-class h * ie - k l ar s
+@@ -31866,6 +31954,8 @@
+ identifiably ie . d ~ e n t i . f * ie a b l i
+ identification ie . d ~ e n t i f i . k * ai sh n
+ identified ie . d * e n t i f ie d
++identifier ie . d * e n t i f ie a r
++identifiers ie . d * e n t i f ie a z
+ identifies ie . d * e n t i f ie z
+ identify ie . d * e n t i f ie
+ identifying ie . d * e n t i f ie i ng
+@@ -33154,6 +33244,8 @@
+ infirmary i n . f * er m a r i
+ infirmities i n . f * er m i t i z
+ infirmity i n . f * er m i t i
++infix * i n f i k s
++infixes * i n f i k s i z
+ inflame i n . f l * ai m
+ inflamed i n . f l * ai m d
+ inflames i n . f l * ai m z
+@@ -33386,6 +33478,7 @@
+ inlays ~ i n . l * ai z
+ inlet * i n l e t
+ inlets * i n l e t s
++inline ~ i n . l * ie n
+ inmate * i n m ai t
+ inmates * i n m ai t s
+ inmost * i n m oa s t
+@@ -33591,6 +33684,8 @@
+ installation ~ i n s t a . l * ai sh n
+ installations ~ i n s t a . l * ai sh n z
+ installed i n . s t * aw l d
++installer i n . s t * aw l a r
++installers i n . s t * aw l a z
+ installing i n . s t * aw l i ng
+ installs i n . s t * aw l z
+ instalment i n . s t * aw l m a n t
+@@ -33711,6 +33806,7 @@
+ integers * i n t i j a z
+ integral * i n t i g r a l
+ integrally * i n t i g r a l i
++integrals * i n t i g r a l z
+ integrate * i n t i g r ai t
+ integrated * i n t i g r ai t i d
+ integrates * i n t i g r ai t s
+@@ -35065,6 +35161,9 @@
+ juxtaposes j ~ u k s t a . p * oa z i z
+ juxtaposing j ~ u k s t a . p * oa z i ng
+ juxtaposition j ~ u k s t a p a . z * i sh n
++juxtapositioned j ~ u k s t a p a . z * i sh n d
++juxtapositioning j ~ u k s t a p a . z * i sh n i ng
++juxtapositions j ~ u k s t a p a . z * i sh n z
+ k k * ai
+ kummel k * oo m a l
+ k's k * ai z
+@@ -35214,6 +35313,8 @@
+ kilns k * i l n z
+ kilo k * ee l oa
+ kilo- k * i l a -
++kilobyte k * i l a b ie t
++kilobytes k * i l a b ie t s
+ kilocycle k * i l a s ie k l
+ kilocycles k * i l a s ie k l z
+ kilogram k * i l a g r aa m
+@@ -35438,6 +35539,8 @@
+ knowingly n * oa i ng l i
+ knowledge n * o l i j
+ knowledgeable n * o l i j a b l
++knowledgebase n ~ o l i j . b * ai s
++knowledgebases n ~ o l i j . b * ai s i z
+ known n * oa n
+ knows n * oa z
+ knuckle n * u k l
+@@ -35493,6 +35596,8 @@
+ laagers l * ar g a z
+ lab l * aa b
+ label l * ai b l
++labeled l * ai b l d
++labeling l * ai b a l i ng
+ labelled l * ai b l d
+ labelling l * ai b a l i ng
+ labels l * ai b l z
+@@ -36532,6 +36637,8 @@
+ lifeboats l * ie f b oa t s
+ lifebuoy l * ie f b oi
+ lifebuoys l * ie f b oi z
++lifecycle l * ie f s ie k l
++lifecycles l * ie f s ie k l z
+ lifeguard l * ie f g ar d
+ lifeguards l * ie f g ar d z
+ lifeless l * ie f l a s
+@@ -36542,6 +36649,10 @@
+ lifelong l * ie f l o ng
+ lifer l * ie f a r
+ lifers l * ie f a z
++lifespan l * ie f s p aa n
++lifespans l * ie f s p aa n z
++lifestyle l * ie f s t ie l
++lifestyles l * ie f s t ie l z
+ lifetime l * ie f t ie m
+ lifetimes l * ie f t ie m z
+ lift l * i f t
+@@ -36748,6 +36859,8 @@
+ linkboy l * i n k b oi
+ linkboys l * i n k b oi z
+ linked l * i ng k t
++linker l * i ng k a r
++linkers l * i ng k a z
+ linking l * i ng k i ng
+ linkman l * i ng k m aa n
+ linkmen l * i ng k m e n
+@@ -36857,6 +36970,7 @@
+ literates l * i t a r a t s
+ literati l ~ i t a . r * ar t i
+ literature l * i t r a ch a r
++literatures l * i t r a ch a z
+ lithe l * ie dh
+ lithograph l * i th a g r ar f
+ lithographed l * i th a g r ar f t
+@@ -37829,6 +37943,8 @@
+ maintain m ai n . t * ai n
+ maintainable m ai n . t * ai n a b l
+ maintained m ai n . t * ai n d
++maintainer m ai n . t * ai n a r
++maintainers m ai n . t * ai n a z
+ maintaining m ai n . t * ai n i ng
+ maintains m ai n . t * ai n z
+ maintenance m * ai n t a n a n s
+@@ -37857,6 +37973,8 @@
+ make-ups m * ai k - u p s
+ maker m * ai k a r
+ makers m * ai k a z
++makefile m ~ ai k . f * ie l
++makefiles m ~ ai k . f * ie l z
+ makes m * ai k s
+ makeshift m * ai k sh i f t
+ makeshifts m * ai k sh i f t s
+@@ -38494,6 +38612,7 @@
+ mathematicians m ~ aa th a m a . t * i sh n z
+ mathematics m ~ aa th a . m * aa t i k s
+ maths m * aa th s
++mathtype m ~ aa th . t * ie p
+ matinee m * aa t i n ai
+ matinees m * aa t i n ai z
+ mating m * ai t i ng
+@@ -38667,6 +38786,8 @@
+ measureless m * e zh a l a s
+ measurement m * e zh a m a n t
+ measurements m * e zh a m a n t s
++measurer m * e zh a r a r
++measurers m * e zh a r a z
+ measures m * e zh a z
+ measuring m * e zh a r i ng
+ meat m * ee t
+@@ -38780,6 +38901,8 @@
+ meeting-places m * ee t i ng - p l ai s i z
+ meetings m * ee t i ng z
+ meets m * ee t s
++megabyte m * e g a b ie t
++megabytes m * e g a b ie t s
+ megacycle m * e g a s ie k l
+ megacycles m * e g a s ie k l z
+ megadeath m * e g a d e th
+@@ -39010,6 +39133,7 @@
+ mess-ups m * e s - u p s
+ message m * e s i j
+ messages m * e s i j i z
++messaging m * e s i j i ng
+ messed m * e s t
+ messenger m * e s i n j a r
+ messengers m * e s i n j a z
+@@ -39165,6 +39289,8 @@
+ microscopical m ~ ie k r a . s k * o p i k l
+ microscopically m ~ ie k r a . s k * o p i k l i
+ microscopy m ie . k r * o s k a p i
++microsecond m * ie k r a s ~ e k a n d
++microseconds m * ie k r a s ~ e k a n d z
+ microwave m * ie k r oa w ai v
+ microwaves m * ie k r oa w ai v z
+ mid m * i d
+@@ -39353,6 +39479,8 @@
+ millionths m * i l eer n th s
+ millipede m * i l i p ee d
+ millipedes m * i l i p ee d z
++millisecond m * i l i s ~ e k a n d
++milliseconds m * i l i s ~ e k a n d z
+ millpond m * i l p o n d
+ millponds m * i l p o n d z
+ millrace m * i l r ai s
+@@ -40662,6 +40790,7 @@
+ mulls m * u l z
+ multi- m * u l t i -
+ multi-lingual m ~ u l t i - l * i ng g w a l
++multibyte m ~ u l t i . b * ie t
+ multifarious m ~ u l t i . f * air r eer s
+ multifariously m ~ u l t i . f * air r eer s l i
+ multiform m * u l t i f aw m
+@@ -40676,6 +40805,7 @@
+ multiplies m * u l t i p l ie z
+ multiply m * u l t i p l ie
+ multiplying m * u l t i p l ie i ng
++multitouch m ~ u l t i . t * u ch
+ multitude m * u l t i t y uu d
+ multitudes m * u l t i t y uu d z
+ multitudinous m ~ uu l t i . t y * uu d i n a s
+@@ -40976,12 +41106,16 @@
+ names n * ai m z
+ namesake n * ai m s ai k
+ namesakes n * ai m s ai k s
++namespace n * ai m s p ai s
++namespaces n * ai m s p ai s i z
+ naming n * ai m i ng
+ nankeen n aa n . k * ee n
+ nannies n * aa n i z
+ nanny n * aa n i
+ nanny-goat n * aa n i - g oa t
+ nanny-goats n * aa n i - g oa t s
++nanosecond n * aa n a s ~ e k a n d
++nanoseconds n * aa n a s ~ e k a n d z
+ nap n * aa p
+ napalm n * ai p ar m
+ nape n * ai p
+@@ -41065,6 +41199,7 @@
+ nations n * ai sh n z
+ nationwide n * ai sh n w ie d
+ native n * ai t i v
++natively n * ai t i v l i
+ natives n * ai t i v z
+ nativities n a . t * i v i t i z
+ nativity n a . t * i v i t i
+@@ -41516,6 +41651,7 @@
+ nightshade n * ie ch ai d
+ nightshirt n * ie ch er t
+ nightshirts n * ie ch er t s
++nighttime n * ie t ie m
+ nightwork n * ie t w er k
+ nihilism n * ie i l i z a m
+ nihilist n * ie i l i s t
+@@ -41689,6 +41825,7 @@
+ nonentities n o . n * e n t i t i z
+ nonentity n o . n * e n t i t i
+ nonesuch n * u n s u ch
++nonetheless n ~ u n dh a . l * e s
+ nonevent n * o n i v e n t
+ nonevents n * o n i v e n t s
+ nonfiction n o n . f * i k sh n
+@@ -41846,6 +41983,8 @@
+ notification n ~ oa t i f i . k * ai sh n
+ notifications n ~ oa t i f i . k * ai sh n z
+ notified n * oa t i f ie d
++notifier n * oa t i f ie a r
++notifiers n * oa t i f ie a z
+ notifies n * oa t i f ie z
+ notify n * oa t i f ie
+ notifying n * oa t i f ie i ng
+@@ -42388,6 +42527,7 @@
+ officiousness a . f * i sh a s n a s
+ offing * o f i ng
+ offish * o f i sh
++offline o f . l * ie n
+ offprint * o f p r i n t
+ offprints * o f p r i n t s
+ offset * o f s e t
+@@ -42538,6 +42678,7 @@
+ ongoing * o n g oa i ng
+ onion * u n eer n
+ onions * u n eer n z
++online o n . l * ie n
+ onlooker * o n l oo k a r
+ onlookers * o n l oo k a z
+ only * oa n l i
+@@ -42549,6 +42690,7 @@
+ onshore * o n sh aw r
+ onslaught * o n s l aw t
+ onslaughts * o n s l aw t s
++onstage o n . s t * ai j
+ onto * o n t a
+ ontologies o n . t * o l a j i z
+ ontology o n . t * o l a j i
+@@ -42654,6 +42796,7 @@
+ opposes a . p * oa z i z
+ opposing a . p * oa z i ng
+ opposite * o p a z i t
++oppositely * o p a z i t l i
+ opposites * o p a z i t s
+ opposition ~ o p a . z * i sh n
+ oppress a . p r * e s
+@@ -42696,6 +42839,7 @@
+ option * o p sh n
+ optional * o p sh n a l
+ optionally * o p sh n a l i
++optionless * o p sh n l a s
+ options * o p sh n z
+ opts * o p t s
+ opulence * o p y oo l a n s
+@@ -43135,6 +43279,7 @@
+ outpouring * ou t p aw r i ng
+ outpourings * ou t p aw r i ng z
+ output * ou t p oo t
++outputs * ou t p oo t s
+ outre * uu t r ai
+ outrage * ou t r ai j
+ outraged * ou t r ai j d
+@@ -43481,6 +43626,10 @@
+ overleapt ~ oa v a . l * e p t
+ overlie ~ oa v a . l * ie
+ overlies ~ oa v a . l * ie z
++overline ~ oa v a . l * ie n
++overlined ~ oa v a . l * ie n d
++overlines ~ oa v a . l * ie n z
++overlining ~ oa v a . l * ie n i ng
+ overload ~ oa v a . l * oa d
+ overloaded ~ oa v a . l * oa d i d
+ overloading ~ oa v a . l * oa d i ng
+@@ -44360,6 +44509,8 @@
+ pars p * ar z
+ parse p * ar z
+ parsed p * ar z d
++parser p * ar z a r
++parsers p * ar z a z
+ parses p * ar z i z
+ parsimonious p ~ ar s i . m * oa n eer s
+ parsimony p * ar s i m a n i
+@@ -46222,6 +46373,8 @@
+ pivoted p * i v a t i d
+ pivoting p * i v a t i ng
+ pivots p * i v a t s
++pixel p * i k s i l
++pixels p * i k s i l z
+ pixie p * i k s i
+ pixies p * i k s i z
+ pixilated p * i k s i l ai t i d
+@@ -46246,6 +46399,8 @@
+ placebo p l a . s * ee b oa
+ placebos p l a . s * ee b oa z
+ placed p l * ai s t
++placeholder p l * ai s + h oa l d a r
++placeholders p l * ai s + h oa l d a z
+ placeman p l * ai s m a n
+ placemen p l * ai s m a n
+ placement p l * ai s m a n t
+@@ -47087,6 +47242,7 @@
+ port p * aw t
+ portability p ~ aw t a . b * i l i t i
+ portable p * aw t a b l
++portably p * aw t a b l i
+ portage p * aw t i j
+ portages p * aw t i j i z
+ portal p * aw t l
+@@ -47227,6 +47383,8 @@
+ postern p * o s t a n
+ posterns p * o s t a n z
+ posters p * oa s t a z
++postfix p * oa s t f i k s
++postfixes p * oa s t f i k s i z
+ postgraduate p ~ oa s t . g r * aa j oor t
+ postgraduates p ~ oa s t . g r * aa j oor t s
+ posthumous p * o s t y oo m a s
+@@ -47544,6 +47702,8 @@
+ precede p r i . s * ee d
+ preceded p r i . s * ee d i d
+ precedence p r * e s i d a n s
++precedencies p r * e s i d a n s i z
++precedency p r * e s i d a n s i
+ precedent p r * e s i d a n t
+ precedented p r * e s i d a n t i d
+ precedents p r * e s i d a n t s
+@@ -47603,6 +47763,12 @@
+ precondition p r ~ ee k a n . d * i sh n
+ preconditioned p r ~ ee k a n . d * i sh n d
+ preconditions p r ~ ee k a n . d * i sh n z
++preconfiguration p r ~ ee k a n . f ~ i g a . r * ai sh n
++preconfigurations p r ~ ee k a n . f ~ i g a . r * ai sh n z
++preconfigure p r ~ ee k a n . f * i g a r
++preconfigured p r ~ ee k a n . f * i g a d
++preconfigures p r ~ ee k a n . f * i g a z
++preconfiguring p r ~ ee k a n . f * i g a r i ng
+ precursor p r ~ ee . k * er s a r
+ precursors p r ~ ee . k * er s a z
+ precursory p r ~ ee . k * er s a r i
+@@ -47615,6 +47781,11 @@
+ predeceasing p r ~ ee d i . s * ee s i ng
+ predecessor p r * ee d i s e s a r
+ predecessors p r * ee d i s e s a z
++predefinable p r ~ ee . d i . f * ie n a b l
++predefine p r ~ ee . d i . f * ie n
++predefined p r ~ ee . d i . f * ie n d
++predefines p r ~ ee . d i . f * ie n z
++predefining p r ~ ee . d i . f * ie n i ng
+ predestinate p r ~ ee . d * e s t i n ai t
+ predestinated p r ~ ee . d * e s t i n ai t i d
+ predestinates p r ~ ee . d * e s t i n ai t s
+@@ -47862,6 +48033,8 @@
+ presentation p r ~ e z n . t * ai sh n
+ presentations p r ~ e z n . t * ai sh n z
+ presented p r i . z * e n t i d
++presenter p r i . z * e n t a r
++presenters p r i . z * e n t a z
+ presentiment p r i . z * e n t i m a n t
+ presentiments p r i . z * e n t i m a n t s
+ presenting p r i . z * e n t i ng
+@@ -49773,8 +49946,6 @@
+ rechauffes r ai . sh * oa f ai z
+ regime r ai . zh * ee m
+ regimes r ai . zh * ee m z
+-resume r * e z y uu m ai
+-resumes r * e z y uu m ai z
+ rabbi r * aa b ie
+ rabbinical r a . b * i n i k l
+ rabbis r * aa b ie z
+@@ -50177,6 +50348,12 @@
+ rasping r * ar s p i ng
+ raspingly r * ar s p i ng l i
+ rasps r * ar s p s
++rasterize r * aa s t a r ie z
++rasterized r * aa s t a r ie z d
++rasterizer r * aa s t a r ie z a r
++rasterizers r * aa s t a r ie z a z
++rasterizes r * aa s t a r ie z i z
++rasterizing r * aa s t a r ie z i ng
+ rat r * aa t
+ rat-a-tat-tat r ~ aa t - a - t ~ aa t - t * aa t
+ rat-a-tat-tats r ~ aa t - a - t ~ aa t - t * aa t s
+@@ -50394,6 +50571,7 @@
+ readjustment r ~ ee a . j * u s t m a n t
+ readjustments r ~ ee a . j * u s t m a n t s
+ readjusts r ~ ee a . j * u s t s
++readme r * ee d . m ee
+ readmission r ~ ee a d . m * i sh n
+ readmissions r ~ ee a d . m * i sh n z
+ readmit r ~ ee a d . m * i t
+@@ -50433,6 +50611,7 @@
+ realms r * e l m z
+ reals r ai * ar l z
+ realties r * eer l t i z
++realtime r ~ eer l . t * ie m
+ realty r * eer l t i
+ ream r * ee m
+ reams r * ee m z
+@@ -50556,7 +50735,6 @@
+ rebuttals r i . b * u t a l z
+ rebutted r i . b * u t i d
+ rebutting r i . b * u t i ng
+-rec r i . s * ee v d
+ recalcitrance r i . k * aa l s i t r a n s
+ recalcitrancy r i . k * aa l s i t r a n s i
+ recalcitrant r i . k * aa l s i t r a n t
+@@ -50636,6 +50814,11 @@
+ recessionals r i . s * e sh a n l z
+ recessions r i . s * e sh n z
+ recessive r i . s * e s i v
++recharge r i . ch * ar j
++rechargeable r i . ch * ar j a b l
++recharged r i . ch * ar j d
++recharges r i . ch * ar j i z
++recharging r i . ch * ar j i ng
+ recherche r a . sh * air sh ai
+ recidivism r i . s * i d i v i z a m
+ recidivist r i . s * i d i v i s t
+@@ -50719,6 +50902,10 @@
+ recompensed r * e k a m p e n s t
+ recompenses r * e k a m p e n s i z
+ recompensing r * e k a m p e n s i ng
++recompile r ~ ee k a m . p * ie l
++recompiled r ~ ee k a m . p * ie l d
++recompiles r ~ ee k a m . p * ie l z
++recompiling r ~ ee k a m . p * ie l i ng
+ reconcilable r ~ e k a n . s * ie l a b l
+ reconcile r * e k a n s ie l
+ reconciled r * e k a n s ie l d
+@@ -50731,6 +50918,12 @@
+ reconditioned r ~ ee k a n . d * i sh n d
+ reconditioning r ~ ee k a n . d * i sh n i ng
+ reconditions r ~ ee k a n . d * i sh n z
++reconfiguration r ~ ee k a n . f ~ i g a . r * ai sh n
++reconfigurations r ~ ee k a n . f ~ i g a . r * ai sh n z
++reconfigure r ~ ee k a n . f * i g a r
++reconfigured r ~ ee k a n . f * i g a d
++reconfigures r ~ ee k a n . f * i g a z
++reconfiguring r ~ ee k a n . f * i g a r i ng
+ reconnaissance r i . k * o n i s a n s
+ reconnaissances r i . k * o n i s a n s i z
+ reconnoitre r ~ e k a . n * oi t a r
+@@ -50914,6 +51107,15 @@
+ redheads r * e d h e d z
+ redid r ~ ee . d * i d
+ rediffusion r ~ ee d i . f y * uu zh n
++redirect r ~ ee d i . r * e k t
++redirected r ~ ee d i . r * e k t i d
++redirecting r ~ ee d i . r * e k t i ng
++redirection r ~ ee d i . r * e k sh n
++redirectional r ~ ee d i . r * e k sh a n l
++redirections r ~ ee d i . r * e k sh n z
++redirector r ~ ee d i . r * e k t a r
++redirectors r ~ ee d i . r * e k t a z
++redirects r ~ ee d i . r * e k t s
+ rediscover r ~ ee d i . s k * u v a r
+ rediscovered r ~ ee d i . s k * u v a d
+ rediscoveries r ~ ee d i . s k * u v a r i z
+@@ -51003,6 +51205,8 @@
+ refaced r ~ ee . f * ai s t
+ refaces r ~ ee . f * ai s i z
+ refacing r ~ ee . f * ai s i ng
++refactor r ~ ee . f * aa k t a r
++refactoring r ~ ee . f * aa k t a r i ng
+ refashion r ee . f * aa sh n
+ refashioned r ee . f * aa sh n d
+ refashioning r ee . f * aa sh a n i ng
+@@ -51018,7 +51222,9 @@
+ refereeing r ~ e f a . r * ee i ng
+ referees r ~ e f a . r * ee z
+ reference r * e f r a n s
++referenced r * e f r a n s t
+ references r * e f r a n s i z
++referencing r * e f r a n s i ng
+ referenda r ~ e f a . r * e n d a
+ referendum r ~ e f a . r * e n d a m
+ referendums r ~ e f a . r * e n d a m z
+@@ -51618,6 +51824,8 @@
+ rend r * e n d
+ render r * e n d a r
+ rendered r * e n d a d
++renderer r * e n d a r a r
++renderers r * e n d a r a z
+ rendering r * e n d a r i ng
+ renderings r * e n d a r i ng z
+ renders r * e n d a z
+@@ -51684,6 +51892,11 @@
+ reopened r ee * oa p a n d
+ reopening r ee * oa p a n i ng
+ reopens r ee * oa p a n z
++reorder r ee * aw d a r
++reordered r ee * * aw d a d
++reordering r ee * * aw d a r i ng
++reorderings r ee * * aw d a r i ng z
++reorders r ee * * aw d a z
+ reorganization r ee ~ aw g a n ie . z * ai sh n
+ reorganizations r ee ~ aw g a n ie . z * ai sh n z
+ reorganize r ee * aw g a n ie z
+@@ -51995,6 +52208,8 @@
+ reseeding r ee . s * ee d i ng
+ reseeds r ee . s * ee d z
+ resell r ee . s * e l
++reseller r ee . s * e l a r
++resellers r ee . s * e l a z
+ reselling r ee . s * e l i ng
+ resells r ee . s * e l z
+ resemblance r i . z * e m b l a n s
+@@ -52429,6 +52644,10 @@
+ returned r i . t * er n d
+ returning r i . t * er n i ng
+ returns r i . t * er n z
++retype r ee . t ie p
++retyped r ee . t ie p t
++retypes r ee . t ie p s
++retyping r ee . t ie p i ng
+ reunification r ee . y ~ uu n i f i . k * ai sh n
+ reunion r ~ ee . y * uu n eer n
+ reunions r ~ ee . y * uu n eer n z
+@@ -53571,6 +53790,7 @@
+ runny r * u n i
+ runs r * u n z
+ runt r * u n t
++runtime r ~ u n . t * ie m
+ runts r * u n t s
+ runway r * u n w ai
+ runways r * u n w ai z
+@@ -54381,6 +54601,8 @@
+ schedule sh * e d y uu l
+ scheduled sh * e d y uu l d
+ schedules sh * e d y uu l z
++scheduler sh * e d y uu l a r
++schedulers sh * e d y uu l a z
+ scheduling sh * e d y uu l i ng
+ schema s k * ee m a
+ schemas s k * ee m a z
+@@ -54658,6 +54880,9 @@
+ screen s k r * ee n
+ screened s k r * ee n d
+ screening s k r * ee n i ng
++screenreader s k r * ee n r ee d a r
++screenreaders s k r * ee n r ee d a z
++screenreading s k r * ee n r ee d i ng
+ screens s k r * ee n z
+ screes s k r * ee z
+ screw s k r * uu
+@@ -54902,6 +55127,7 @@
+ seamiest s * ee m i i s t
+ seaming s * ee m i ng
+ seamless s * ee m l a s
++seamlessly s * ee m l a s l i
+ seams s * ee m z
+ seamstress s * ee m s t r i s
+ seamstresses s * ee m s t r i s i z
+@@ -55385,6 +55611,8 @@
+ sensitized s * e n s i t ie z d
+ sensitizes s * e n s i t ie z i z
+ sensitizing s * e n s i t ie z i ng
++sensor s * e n s a r
++sensors s * e n s a z
+ sensory s * e n s a r i
+ sensual s * e n sh oor l
+ sensualism s * e n sh oor l i z a m
+@@ -57055,6 +57283,7 @@
+ skylights s k * ie l ie t s
+ skyline s k * ie l ie n
+ skylines s k * ie l ie n z
++skype s k * ie p
+ skyrocket s k * ie r o k i t
+ skyrocketed s k * ie r o k i t i d
+ skyrocketing s k * ie r o k i t i ng
+@@ -58595,6 +58824,8 @@
+ specificity s p ~ e s i . f * i s i t i
+ specifics s p a . s * i f i k s
+ specified s p * e s i f ie d
++specifier s p * e s i f ie a r
++specifiers s p * e s i f ie a z
+ specifies s p * e s i f ie z
+ specify s p * e s i f ie
+ specifying s p * e s i f ie i ng
+@@ -58959,6 +59190,8 @@
+ spooks s p * uu k s
+ spooky s p * uu k i
+ spool s p * uu l
++spooler s p * uu l a r
++spoolers s p * uu l a z
+ spools s p * uu l z
+ spoon s p * uu n
+ spooned s p * uu n d
+@@ -60422,6 +60655,7 @@
+ structure s t r * u k ch a r
+ structured s t r * u k ch a d
+ structures s t r * u k ch a z
++structuring s t r * u k ch a r i ng
+ strudel s t r * uu d l
+ strudels s t r * uu d l z
+ struggle s t r * u g l
+@@ -60628,6 +60862,9 @@
+ subeditor s u b * e d i t a r
+ subeditors s u b * e d i t a z
+ subedits s u b * e d i t s
++subformula s ~ u b . f * aw m y oo l a
++subformulae s ~ u b . f * aw m y oo l ee
++subformulas s ~ u b . f * aw m y oo l a z
+ subfusc s * u b f u s k
+ subgroup s * u b g r uu p
+ subgroups s * u b g r uu p s
+@@ -60716,6 +60953,7 @@
+ subpoenaed s a . p * ee n a d
+ subpoenaing s a . p * ee n a r i ng
+ subpoenas s a . p * ee n a z
++subroutine s ~ u b . r uu . t * ee n
+ subs s * u b z
+ subscribe s a b . s k r * ie b
+ subscribed s a b . s k r * ie b d
+@@ -60729,6 +60967,8 @@
+ subscripts s * u b s k r i p t s
+ subsection s * u b s e k sh n
+ subsections s * u b s e k sh n z
++subsequence s ~ a b . s * ee k w a n s
++subsequences s ~ a b . s * ee k w a n s i z
+ subsequent s * u b s i k w a n t
+ subsequently s * u b s i k w a n t l i
+ subserve s a b . s * er v
+@@ -61850,6 +62090,8 @@
+ synthesis s * i n th a s i s
+ synthesize s * i n th a s ie z
+ synthesized s * i n th a s ie z d
++synthesizer s * i n th a s ie z a r
++synthesizers s * i n th a s ie z a z
+ synthesizes s * i n th a s ie z i z
+ synthesizing s * i n th a s ie z i ng
+ synthetic s i n . th * e t i k
+@@ -62749,6 +62991,8 @@
+ tepidity t e . p * i d i t i
+ tepidly t * e p i d l i
+ tepidness t * e p i d n a s
++terabyte t * e r a b ie t
++terabytes t * e r a b ie t s
+ tercentenaries t ~ er s e n . t * ee n a r i z
+ tercentenary t ~ er s e n . t * ee n a r i
+ tercentennial t ~ er s e n . t * e n eer l
+@@ -62772,6 +63016,8 @@
+ terminating t * er m i n ai t i ng
+ termination t ~ er m i . n * ai sh n
+ terminations t ~ er m i . n * ai sh n z
++terminator t * er m i n ai t a r
++terminators t * er m i n ai t a z
+ terming t * er m i ng
+ terminological t ~ er m i n a . l * o j i k l
+ terminologies t ~ er m i . n * o l a j i z
+@@ -63493,10 +63739,16 @@
+ timeless t * ie m l a s
+ timelier t * ie m l eer r
+ timeliest t * ie m l i i s t
++timeline t * ie m l ie n
++timelines t * ie m l ie n z
+ timeliness t * ie m l i n a s
+ timely t * ie m l i
++timeout t * ie m ou t
++timeouts t * ie m ou t s
+ timepiece t * ie m p ee s
+ timepieces t * ie m p ee s i z
++timer t * ie m a r
++timers t * ie m a z
+ times t * ie m z
+ timesaving t * ie m s ai v i ng
+ timeserver t * ie m s er v a r
+@@ -64055,6 +64307,8 @@
+ touchingly t * u ch i ng l i
+ touchline t * u ch l ie n
+ touchlines t * u ch l ie n z
++touchscreen t * u ch + s k r ee n
++touchscreens t * u ch + s k r ee n z
+ touchstone t * u ch + s t oa n
+ touchstones t * u ch + s t oa n z
+ touchy t * u ch i
+@@ -64345,6 +64599,8 @@
+ transcontinental t r ~ aa n z k o n t i . n * e n t l
+ transcribe t r aa n . s k r * ie b
+ transcribed t r aa n . s k r * ie b d
++transcriber t r aa n . s k r * ie b a r
++transcribers t r aa n . s k r * ie b a z
+ transcribes t r aa n . s k r * ie b z
+ transcribing t r aa n . s k r * ie b i ng
+ transcript t r * aa n s k r i p t
+@@ -65374,11 +65630,17 @@
+ typed t * ie p t
+ typeface t * ie p f ai s
+ typefaces t * ie p f ai s i z
++typeform t * ie p f aw m
++typeforms t * ie p f aw m z
+ types t * ie p s
+ typescript t * ie p s k r i p t
+ typescripts t * ie p s k r i p t s
++typeset t * ie p s e t
+ typesetter t * ie p s e t a r
+ typesetters t * ie p s e t a z
++typesetting t * ie p s e t i ng
++typesettings t * ie p s e t i ng z
++typesets t * ie p s e t s
+ typewriter t * ie p r ie t a r
+ typewriters t * ie p r ie t a z
+ typewritten t * ie p r i t n
+@@ -65514,6 +65776,8 @@
+ unalterable u n * o l t a r a b l
+ unalterably u n * aw l t a r a b l i
+ unaltered u n * aw l t a d
++unambiguities ~ u n aa m b i . g y * uu i t i z
++unambiguity ~ u n aa m b i . g y * uu i t i
+ unambiguous ~ u n aa m . b * i g y oor s
+ unambiguously ~ u n aa m . b * i g y oor s l i
+ unamended ~ u n a . m * e n d i d
+@@ -65649,6 +65913,8 @@
+ unchains u n . ch * ai n z
+ unchallengeable u n . ch * aa l a n j a b l
+ unchallenged u n . ch * aa l a n j d
++unchangeable u n . ch * ai n j a b a l
++unchangeableness u n . ch * ai n j a b a l n a s
+ unchanged u n . ch * ai n j d
+ unchanging u n . ch * ai n j i ng
+ uncharacteristic ~ u n k aa r a k t a . r * i s t i k
+@@ -65680,6 +65946,7 @@
+ uncommonly u n . k * o m a n l i
+ uncommunicative ~ u n k a . m y * uu n i k a t i v
+ uncompetitive ~ u n k a m . p * e t a t i v
++uncompiled u n . k a m . p * ie l d
+ uncomplaining ~ u n k a m . p l * ai n i ng
+ uncomplainingly ~ u n k a m . p l * ai n i ng l i
+ uncompleted ~ u n k a m . p l * ee t i d
+@@ -65770,8 +66037,11 @@
+ undefeated ~ u n d i . f * ee t i d
+ undefended ~ u n d i . f * e n d i d
+ undeferential ~ u n d e f a . r * e n sh l
++undefine ~ u n d i . f * ie n
+ undefinable ~ u n d i . f * ie n a b l
+ undefined ~ u n d i . f * ie n d
++undefining ~ u n d i . f * ie n i ng
++undefines ~ u n d i . f * ie n z
+ undemanding ~ u n d i . m * ar n d i ng
+ undemocratic ~ u n d e m a . k r * aa t i k
+ undemocratically ~ u n d e m a . k r * aa t i k l i
+@@ -66255,6 +66525,7 @@
+ unhurt u n . h * er t
+ unhygienic ~ u n h ie . j * ee n i k
+ unhygienically ~ u n h ie . j * ee n i k l i
++unibyte y ~ uu n i . b * ie t
+ unicorn y * uu n i k aw n
+ unicorns y * uu n i k aw n z
+ unidentifiable ~ u n ie . d ~ e n t i . f * ie a b l
+@@ -66296,6 +66567,14 @@
+ uninspired ~ u n i n . s p * ie a d
+ uninspiring ~ u n i n . s p * ie a r i ng
+ uninsured ~ u n i n . sh * oor d
++uninstall ~ u n i n . s t * aw l
++uninstallation ~ u n i n s t a . l * ai sh n
++uninstallations ~ u n i n s t a . l * ai sh n z
++uninstalled ~ u n i n . s t * aw l d
++uninstaller ~ u n i n . s t * aw l a r
++uninstallers ~ u n i n . s t * aw l a z
++uninstalling ~ u n i n . s t * aw l i ng
++uninstalls ~ u n i n . s t * aw l z
+ unintelligent ~ u n i n . t * e l i j a n t
+ unintelligently ~ u n i n . t * e l i j a n t l i
+ unintelligible ~ u n i n . t * e l i j a b l
+@@ -66716,6 +66995,8 @@
+ unsportsmanlike u n . s p * aw t s m a n l ie k
+ unspotted u n . s p * o t i d
+ unstable u n . s t * ai b l
++unstage u n . s t * ai j
++unstaged u n . s t * ai j d
+ unstartling u n . s t * ar t l i ng
+ unstated u n . s t * ai t i d
+ unstatesmanlike u n . s t * ai t s m a n l ie k
+@@ -66728,6 +67009,10 @@
+ unstrung ~ u n . s t r * u ng
+ unstuck ~ u n . s t * u k
+ unstudied ~ u n . s t * u d i d
++unsubscribe u n . s a b . s k r * ie b
++unsubscribed u n . s a b . s k r * ie b d
++unsubscribes u n . s a b . s k r * ie b z
++unsubscribing u n . s a b . s k r * ie b i ng
+ unsubtle u n . s * u t l
+ unsuccessful ~ u n s a k . s * e s f a l
+ unsuccessfully ~ u n s a k . s * e s f a l i
+@@ -66969,6 +67254,7 @@
+ uptake * u p t ai k
+ uptakes * u p t ai k s
+ uptight ~ u p . t * ie t
++uptime ~ u p . t * ie m
+ uptown ~ u p . t * ou n
+ upturn * u p t er n
+ upturned * u p t er n d
+@@ -69117,6 +69403,8 @@
+ whitens w * ie t n z
+ whiter w * ie t a r
+ whites w * ie t s
++whitespace w * ie t s p ai s
++whitespaces w * ie t s p ai s i z
+ whitest w * ie t i s t
+ whitethorn w * ie t th aw n
+ whitethorns w * ie t th aw n z
+@@ -69229,6 +69517,7 @@
+ wielding w * ee l d i ng
+ wields w * ee l d z
+ wife w * ie f
++wifi w ie f * ie
+ wifelier w * ie f l eer r
+ wifeliest w * ie f l i i s t
+ wifelike w * ie f l ie k
+@@ -70165,6 +70454,7 @@
+ zeroed z * eer r oa d
+ zeroing z * eer r oa i ng
+ zeros z * eer r oa z
++zeroth z * eer r oa th
+ zest z * e s t
+ zestful z * e s t f a l
+ zestfully z * e s t f a l i
--- freespeech-1.0m.orig/src/Makefile
+++ freespeech-1.0m/src/Makefile
@@ -10,91 +10,90 @@
 #
 #
 ############################################################################
+
+# Installation paths
+prefix = /usr/local
+bindir = ${prefix}/bin
+
 # Select the appropriate Makefile options for your system. then type make.
 ############################################################################
-# Sun users
-# CC = gcc
-# CFLAGS = -g -Wall -pedantic
-# LIBS = -lm
-############################################################################
 # FreeBSD users
 # CC = gcc
-# CFLAGS = -O2 -Wall -pedantic
+# CFLAGS = -O2 -DFBSD_DATABASE
+# LFLAGS = -s
 # LIBS = -lm
+# GROUP =wheel
 ############################################################################
 # Linux users
 CC = gcc
-CFLAGS = -g -Wall -pedantic
-LIBS = -lm -lgdbm
+CFLAGS = -Wall -O2
+LFLAGS = -s
+LIBS = -ldb
+GROUP = root
 ############################################################################
 
 
-SRC = go.c t2s.c space.c tags.c grammar.c \
-	transcribe.c conv1.c conv2.c durpros.c prosody.c \
-	syllab.c utils.c buffer.c \
-	fw.c broad_cats.c durs.c load_diphs.c spnio.c \
-	durations.c pitch.c audio.c \
-	phon_rules.c edin2sampa.c
-#coeffs.c excitation.c durations.c pitch.c audio.c ulaw.c \
-
 OBJS = go.o t2s.o space.o tags.o grammar.o \
 	transcribe.o conv1.o conv2.o durpros.o prosody.o \
 	syllab.o utils.o buffer.o \
-	fw.o broad_cats.o durs.o load_diphs.o spnio.o \
-	durations.o pitch.o audio.o \
-	phon_rules.o edin2sampa.o
-#coeffs.o excitation.o durations.o pitch.o audio.o ulaw.o \
-
-RULE_SRC = rule_engine.c regerror.c regexp.c regsub.c read_rules.c
+	fw.o broad_cats.o durs.o spnio.o \
+	audio.o phon_rules.o edin2sampa.o
 
-RULE_OBJS = rule_engine.o regerror.o regexp.o regsub.o read_rules.o
+OBSOLETE_OBJS = load_diphs.o durations.o pitch.o
 
-
-NRL_SRC = interface.c english.c nrl_edin.c phoneme.c saynum.c spellwor.c
+RULE_OBJS = rule_engine.o read_rules.o
 
 NRL_OBJS = interface.o english.o nrl_edin.o phoneme.o saynum.o spellwor.o
 
-
-TEST_SRC = test_diphones.c
-
-TEST_OBJS = test_diphones.o
-
-MAIN_SRC = main.c
-
 MAIN = main.o
 
-HEADERS = regexp.h regmagic.h rule_engine.h t2s.h prototypes.h
-
 all: freephone
 
 freephone: $(OBJS) $(NRL_OBJS) $(RULE_OBJS) $(MAIN)
-	$(CC) $(CFLAGS) -o $@ $(OBJS) $(NRL_OBJS) $(RULE_OBJS) $(MAIN) $(LIBS)
+	$(CC) $(LFLAGS) -o $@ $^ $(LIBS)
 
-# /home/awb/src/malloc/libmalloc.a
+.PHONY: install
+install: freephone
+	install -d ${bindir}
+	install -g ${GROUP} -o root -m 0755 -p $^ ${bindir}
 
+.PHONY: clean
 clean:
-	rm -f freephone lpc_synth *.o core gmon.out
+	rm -f freephone *.o
 
-distribution:
-	/bin/rm -r ../distribution
-	mkdir ../distribution
-	mkdir ../distribution/src
-	mkdir ../distribution/lib
-	cp -r ../dist_doc ../distribution/doc
-	cp ../dictionaries/Makefile ../distribution/lib
-	cp ../dictionaries/dbm_prog.c ../distribution/lib
-	cp ../dictionaries/read_ox_dict ../distribution/lib
-	cp ../dictionaries/text710.* ../distribution/lib
-	# cp ../diphs_donovan/donovan.idx ../distribution/lib
-	# cp ../diphs_donovan/donovan.dat ../distribution/lib
-	cp $(SRC) $(RULE_SRC) $(NRL_SRC) $(MAIN_SRC) $(HEADERS) Makefile ../distribution/src
-	# cp context_rules ../distribution/src
-	cp ../ACKNOWLEDGEMENTS ../README ../INSTALLATION ../Copying ../distribution
+%.o:%.c
+	$(CC) -c ${CFLAGS} -o $@ $<
 
 # dependencies
-
-$(OBJS) : t2s.h
-$(TEST_OBJS) : t2s.h
-$(MAIN) : t2s.h
-$(RULE_OBJS) : regexp.h regmagic.h
-rule-engine.c : rule_engine.h
+audio.o: audio.c t2s.h prototypes.h
+broad_cats.o: broad_cats.c t2s.h prototypes.h
+buffer.o: buffer.c t2s.h prototypes.h
+conv1.o: conv1.c t2s.h prototypes.h
+conv2.o: conv2.c t2s.h prototypes.h
+durations.o: durations.c t2s.h prototypes.h
+durpros.o: durpros.c t2s.h prototypes.h
+durs.o: durs.c t2s.h prototypes.h
+edin2sampa.o: edin2sampa.c t2s.h prototypes.h
+english.o: english.c t2s.h prototypes.h
+fw.o: fw.c t2s.h prototypes.h
+go.o: go.c t2s.h prototypes.h
+grammar.o: grammar.c t2s.h prototypes.h
+interface.o: interface.c t2s.h prototypes.h
+load_diphs.o: load_diphs.c t2s.h prototypes.h
+main.o: main.c t2s.h prototypes.h
+nrl_edin.o: nrl_edin.c t2s.h prototypes.h
+phoneme.o: phoneme.c t2s.h prototypes.h
+phon_rules.o: phon_rules.c t2s.h prototypes.h
+pitch.o: pitch.c t2s.h prototypes.h
+prosody.o: prosody.c t2s.h prototypes.h
+read_rules.o: read_rules.c t2s.h prototypes.h
+rule_engine.o: rule_engine.c t2s.h prototypes.h
+saynum.o: saynum.c t2s.h prototypes.h
+space.o: space.c t2s.h prototypes.h
+spellwor.o: spellwor.c t2s.h prototypes.h
+spnio.o: spnio.c t2s.h prototypes.h
+syllab.o: syllab.c t2s.h prototypes.h
+t2s.o: t2s.c t2s.h prototypes.h
+tags.o: tags.c t2s.h prototypes.h
+transcribe.o: transcribe.c t2s.h prototypes.h
+utils.o: utils.c t2s.h prototypes.h
--- freespeech-1.0m.orig/src/audio.c
+++ freespeech-1.0m/src/audio.c
@@ -8,6 +8,7 @@
 #include "t2s.h"
 
  
+#ifdef FREEPHONE_OBSOLETE
 unsigned char hdr16k[] =  {
   0x2e, 0x73, 0x6e, 0x64, 0x00, 0x00, 0x00, 0x20, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x03,
   0x00, 0x00, 0x3e, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
@@ -22,6 +23,7 @@
   0x2e, 0x73, 0x6e, 0x64, 0x00, 0x00, 0x00, 0x20, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01,
   0x00, 0x00, 0x1f, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 };
+#endif
 
 
 export void output_open(CONFIG *config)
@@ -33,6 +35,8 @@
     (void)fprintf(stderr,"Cannot open output file: %s\n",config->output_file);
     exit(2);
   }
+
+#ifdef FREEPHONE_OBSOLETE
   if(!strcmp(config->prog,"high_level")) {
     return;
   }	/* the formats son't matter  */
@@ -47,6 +51,7 @@
   } else if(!strcmp(config->format,"soundblaster8")) {
     ; /* nothing, as far as I know  */
   }
+#endif
 
 }
 
--- freespeech-1.0m.orig/src/conv1.c
+++ freespeech-1.0m/src/conv1.c
@@ -40,19 +40,19 @@
 	sil_fill(j++,"L-H]",0.7,50,sent);
 	buffer_add_str(slist," ##");
       } else if(ling_list->text[i]->word[0] == ':') {
-	sil_fill(j++,"L-H]",0.7,750,sent);
+	sil_fill(j++,"L-H]",0.7,50,sent);
 	buffer_add_str(slist," ##");
       } else if(ling_list->text[i]->word[0] == ';') {
-	sil_fill(j++,"L-L]",0.7,750,sent);
+	sil_fill(j++,"L-L]",0.7,50,sent);
 	buffer_add_str(slist," ##");
       } else if(ling_list->text[i]->word[0] == '.') {
-	sil_fill(j++,"L-L]",1.0,1200,sent);
+	sil_fill(j++,"L-L]",1.0,50,sent);
 	buffer_add_str(slist," ##");
       } else if(ling_list->text[i]->word[0] == '!') {
-	sil_fill(j++,"L-L]",1.0,1200,sent);
+	sil_fill(j++,"L-L]",1.0,50,sent);
 	buffer_add_str(slist," ##");
       } else if(ling_list->text[i]->word[0] == '?') {
-	sil_fill(j++,"L-H]",1.0,1200,sent);
+	sil_fill(j++,"L-H]",1.0,50,sent);
 	buffer_add_str(slist," ##");
       } else {
 	sil_fill(j++,"L-H]",0.7,200,sent);
@@ -88,7 +88,7 @@
     }
   }
   if(buffer_last_char(slist) != '#') {
-    sil_fill(j++,"",0.0,1200,sent);
+    sil_fill(j++,"",0.0,50,sent);
     buffer_add_str(slist," ##");
   }
   sent->sil_sz = j;
--- freespeech-1.0m.orig/src/durations.c
+++ freespeech-1.0m/src/durations.c
@@ -7,16 +7,13 @@
 
 #include "t2s.h"
 
+float fmaxf(float, float);
+
 static int min(int a, int b)
 {
   return((a<b)?a:b);
 }
 
-static float fmax(float a, float b)
-{
-  return((a>b)?a:b);
-}
-
 export void durations(CONFIG *config, SPN *ps, ACOUSTIC *as)
 {
   int durdist;
@@ -43,7 +40,7 @@
       durdist = min(i-ps->pb[j-1],ps->pb[j]-i);
       interdist = ps->pb[j] - ps->pb[j-1];
       proportion = (float)durdist/(float)interdist;
-      multiplier_i = fmax(0.01,4.0*proportion*(ps->scale[j-1]-1.0)+1.0);
+      multiplier_i = fmaxf(0.01,4.0*proportion*(ps->scale[j-1]-1.0)+1.0);
       as->duration[i] = config->fr_sz*multiplier_i;
       ps->duration[j-1] += as->duration[i];
     }
--- freespeech-1.0m.orig/src/go.c
+++ freespeech-1.0m/src/go.c
@@ -21,6 +21,7 @@
   }
 }
 
+#ifdef FREEPHONE_OBSOLETE
 export void go(CONFIG *config, BUFFER *buffer, LING_LIST *ling_list, SENT *sent, SPROSOD_LIST *spl, SPN *ps, ACOUSTIC *as) 
 {
   int c, c1;
@@ -81,6 +82,7 @@
     }
   }
 }
+#endif
 
 export void go3(CONFIG *config, BUFFER *buffer, LING_LIST *ling_list, SENT *sent, SPROSOD_LIST *spl, SPN *ps) 
 {
@@ -144,8 +146,9 @@
   }
 }
 
+#ifdef FREEPHONE_OBSOLETE
 export void go2(CONFIG *config, SPN *ps, ACOUSTIC *as) 
 {
   process_spn_file(config, ps, as);
 }
-	
+#endif
--- freespeech-1.0m.orig/src/interface.c
+++ freespeech-1.0m/src/interface.c
@@ -216,7 +216,7 @@
   for (new_char() ; isalpha(Char) || Char == '\'' ; new_char())
     {
       buff[count++] = makeupper(Char);
-      if (count > MAX_LENGTH-2)
+      if (count >= MAX_LENGTH-2)
 	{
 	  buff[count++] = ' ';
 	  buff[count++] = '\0';
--- freespeech-1.0m.orig/src/main.c
+++ freespeech-1.0m/src/main.c
@@ -20,7 +20,9 @@
   SENT sent_struct;
   SPROSOD_LIST spl_struct;
   SPN ps_struct;
+#ifdef FREEPHONE_OBSOLETE
   ACOUSTIC as_struct;
+#endif
 
   CONFIG *config = &config_struct;
   BUFFER *buffer = &buffer_struct;
@@ -28,7 +30,9 @@
   SENT *sent = &sent_struct;
   SPROSOD_LIST *spl = &spl_struct;
   SPN *ps = &ps_struct;
+#ifdef FREEPHONE_OBSOLETE
   ACOUSTIC *as = &as_struct;
+#endif
 
   int c;
   int errflg = 0;
@@ -36,16 +40,20 @@
   extern char *optarg;
   extern int optind;
 
+#ifdef FREEPHONE_OBSOLETE
   strcpy(config->prog,argv[0]);
+#endif
   config->input_file = "-";
   config->output_file = "-";
   config->hash_file = "-";
+#ifdef FREEPHONE_OBSOLETE
   config->diphone_file = "-";
   config->format = "sun8k";
   strcpy(config->prog,"high_level");
   config->type = _MBROLA_;
+#endif
 
-  while((c = getopt(argc,argv,"i:o:h:ml")) != -1)
+  while((c = getopt(argc,argv,"i:o:h:")) != -1)
     switch(c) {
     case 'i':
       config->input_file = optarg;
@@ -53,12 +61,15 @@
     case 'o':
       config->output_file = optarg;
       break;
+#ifdef FREEPHONE_OBSOLETE
     case 'd':
       config->diphone_file = optarg;
       break;
+#endif
     case 'h':
       config->hash_file = optarg;
       break;
+#ifdef FREEPHONE_OBSOLETE
     case 'f':
       config->format = optarg;
       break;
@@ -76,13 +87,14 @@
     case 't':   /* ``silent Test flag''  */
       strcpy(config->prog,"test_diphones");
       break;
+#endif
     default:
       errflg++;
     }
   if((optind!=argc) || errflg /* || (argc==1) */) {
     (void)fprintf(stderr, "usage: %s\n",argv[0]);
     (void)fprintf(stderr,"\t-i  input text file or - for standard input (default)\n");
-    (void)fprintf(stderr,"\t-o  output (probably audio) file or - for standard output (default)\n");
+    (void)fprintf(stderr,"\t-o  output file or - for standard output (default)\n");
     /* (void)fprintf(stderr,"\t-d   diphone files (default)\n");
        (void)fprintf(stderr,"\t-f output format (sun8k - default, sun10k, soundblaster8, .spn)\n");  */
     (void)fprintf(stderr,"\t-h  dictionary in hash format (no default)\n");
@@ -93,12 +105,17 @@
     exit (2);
   }
 
+#ifdef FREEPHONE_OBSOLETE
   init(config, buffer, ling_list, sent, spl, ps, as);
 
   if(!strcmp(config->prog,"low_level")) {
     go2(config, ps, as);
   } else if(!strcmp(config->prog,"high_level")) {
+#else
+  init(config, buffer, ling_list, sent, spl, ps);
+#endif
     go3(config, buffer, ling_list, sent, spl, ps);
+#ifdef FREEPHONE_OBSOLETE
   } else if(!strcmp(config->prog,"test_diphones")) {
 #ifdef DEBUG
     test_diphones(config, sent, spl, ps, as);
@@ -109,6 +126,9 @@
   }
 
   terminate(config, buffer, ling_list, sent, spl, ps, as);
+#else
+  terminate(config, buffer, ling_list, sent, spl, ps);
+#endif
 
   return(0);
 }
--- freespeech-1.0m.orig/src/nrl_edin.c
+++ freespeech-1.0m/src/nrl_edin.c
@@ -15,8 +15,11 @@
 */
 #include "t2s.h"
 
-static char *nrl_edin[][2] = {
+static PKEY nrl_edin[] = {
   {	" ", "| ",},
+  {	"*", "* ",},
+  {	"~", "~ ",},
+  {	".", ". ",},
   {	"IY", "ee ",},
   {	"EY", "ai ",},
   {	"AE", "aa ",},
@@ -62,7 +65,7 @@
   {	"w", "w ",},
   {	"r", "r ",},
   {	"JH", "j ",},			/* problem  */
-  {	"","",},
+  {	"",""}
 };
 
 
@@ -74,12 +77,12 @@
   
   while(*str) {
     i = 0;
-    while(nrl_edin[i][0] != '\0') {
-      if(!strncmp(str,nrl_edin[i][0],strlen(nrl_edin[i][0])))
+    while(nrl_edin[i].keyword[0]) {
+      if(!strncmp(str,nrl_edin[i].keyword,strlen(nrl_edin[i].keyword)))
 	break;
       i++;
     }
-    strcat(str2,nrl_edin[i][1]);
-    str += strlen(nrl_edin[i][0]);
+    strcat(str2,nrl_edin[i].keyvalue);
+    str += strlen(nrl_edin[i].keyword);
   }
 }
--- freespeech-1.0m.orig/src/phon_rules.c
+++ freespeech-1.0m/src/phon_rules.c
@@ -62,24 +62,64 @@
     */
 }
 
-/* replace string in situ  */
-export void phon_rules_init()
+export void phon_rules_free()
 {
   int i;
 
   for(i=0;i<nrules;i++) {
-    alloetc[i].lc = regcomp(alloetc[i].left_context);
-    alloetc[i].rc = regcomp(alloetc[i].right_context);
+    if (alloetc[i].lc) {
+      regfree(alloetc[i].lc);
+      free (alloetc[i].lc);
+      alloetc[i].lc = NULL;
+    }
+    if (alloetc[i].rc) {
+      regfree(alloetc[i].rc);
+      free(alloetc[i].rc);
+      alloetc[i].rc = NULL;
+    }
   }
 }
 
-export void phon_rules_free()
+/* replace string in situ  */
+export void phon_rules_init()
 {
-  int i;
+  int i, err, msgsize;
+  char *msg;
 
   for(i=0;i<nrules;i++) {
-    free(alloetc[i].lc);
-    free(alloetc[i].rc);
+    alloetc[i].lc = malloc(sizeof(regex_t));
+    if (!alloetc[i].lc) {
+      fprintf(stderr, "Memory allocation error\n");
+      phon_rules_free();
+      exit(EXIT_FAILURE);
+    }
+    err = regcomp(alloetc[i].lc, alloetc[i].left_context,
+		  REG_EXTENDED | REG_NEWLINE);
+    if (err) {
+      msgsize = regerror(err, alloetc[i].lc, NULL, 0);
+      msg = malloc(msgsize);
+      (void)regerror(err, alloetc[i].lc, msg, msgsize);
+      (void)fprintf(stderr, "regcomp: %s\n", msg);
+      phon_rules_free();
+      free(msg);
+      exit(EXIT_FAILURE);
+    }
+    alloetc[i].rc = malloc(sizeof(regex_t));
+    if (!alloetc[i].rc) {
+      fprintf(stderr, "Memory allocation error\n");
+      exit(EXIT_FAILURE);
+    }
+    err = regcomp(alloetc[i].rc, alloetc[i].right_context,
+		  REG_EXTENDED | REG_NEWLINE);
+    if (err) {
+      msgsize = regerror(err, alloetc[i].rc, NULL, 0);
+      msg = malloc(msgsize);
+      (void)regerror(err, alloetc[i].rc, msg, msgsize);
+      (void)fprintf(stderr, "regcomp: %s\n", msg);
+      phon_rules_free();
+      free(msg);
+      exit(EXIT_FAILURE);
+    }
   }
 }
 
--- freespeech-1.0m.orig/src/phoneme.c
+++ freespeech-1.0m/src/phoneme.c
@@ -71,13 +71,15 @@
     {
       /* First check for simple text or space */
       if (isalpha(*pat) || *pat == '\'' || *pat == ' ')
-	if (*pat != *text)
-	  return FALSE;
-	else
-	  {
-	    text--;
-	    continue;
-	  }
+        {
+          if (*pat != *text)
+            return FALSE;
+          else
+            {
+              text--;
+              continue;
+            }
+        }
 
       switch (*pat)
 	{
@@ -143,13 +145,15 @@
     {
       /* First check for simple text or space */
       if (isalpha(*pat) || *pat == '\'' || *pat == ' ')
-	if (*pat != *text)
-	  return FALSE;
-	else
-	  {
-	    text++;
-	    continue;
-	  }
+        {
+          if (*pat != *text)
+            return FALSE;
+          else
+            {
+              text++;
+              continue;
+            }
+        }
 
       switch (*pat)
 	{
--- freespeech-1.0m.orig/src/prototypes.h
+++ freespeech-1.0m/src/prototypes.h
@@ -3,11 +3,17 @@
 export void conv1(CONFIG *config, LING_LIST *ling_list, SENT *sent);
 export int vowel(char *ph) ;
 export void conv2(CONFIG *config, SENT *sent, SPROSOD_LIST *spl);
+#ifdef FREEPHONE_OBSOLETE
 export void durations(CONFIG *config, SPN *ps, ACOUSTIC *as);
+#endif
 export void durpros(CONFIG *config, SPROSOD_LIST *spl);
+#ifdef FREEPHONE_OBSOLETE
 export void go(CONFIG *config, BUFFER *buffer, LING_LIST *ling_list, SENT *sent, SPROSOD_LIST *spl, SPN *ps, ACOUSTIC *as) ;
+#endif
 export void go3(CONFIG *config, BUFFER *buffer, LING_LIST *ling_list, SENT *sent, SPROSOD_LIST *spl, SPN *ps) ;
+#ifdef FREEPHONE_OBSOLETE
 export void go2(CONFIG *config, SPN *ps, ACOUSTIC *as) ;
+#endif
 export void grammar(LING_LIST *ling_list);
 export void outstring(char *string);
 export int makeupper(int character);
@@ -20,9 +26,11 @@
 export void have_special();
 export void xlate_string(char *is);
 export void abbrev(char *buff);
+#ifdef FREEPHONE_OBSOLETE
 export void phonstoframes(SPN *ps, ACOUSTIC *as);
 export void unload_diphs(CONFIG *config) /* for easier changes later  */;
 export void load_speech(CONFIG *config);
+#endif
 export int main(int argc, char **argv);
 export void nrl_edin_conv(char *str, char *str2);
 export void load_context_rules(char * filename);
@@ -30,7 +38,9 @@
 export void phon_rules_free();
 export void phon_rules(SENT *sent);
 export void xlate_word(char *word);
+#ifdef FREEPHONE_OBSOLETE
 export void calc_pitch(CONFIG *config, SPN *ps, ACOUSTIC *as);
+#endif
 export void prosody(SPROSOD_LIST *spl, SPN *ps);
 export int read_rule_file(char *filename, RULE *rules);
 export void process_rule(char *input,RULE *rule);
@@ -41,8 +51,13 @@
 export void rule_exec(int type,int nrules, RULE *rule, SENT *sent);
 export void say_cardinal(long int value);
 export void say_ordinal(long int value);
+#ifdef FREEPHONE_OBSOLETE
 export void init(CONFIG *config, BUFFER *buffer, LING_LIST *ling_list, SENT *sent, SPROSOD_LIST *spl, SPN *ps, ACOUSTIC *as) ;
 export void terminate(CONFIG *config, BUFFER *buffer, LING_LIST *ling_list, SENT *sent, SPROSOD_LIST *spl, SPN *ps, ACOUSTIC *as);
+#else
+export void init(CONFIG *config, BUFFER *buffer, LING_LIST *ling_list, SENT *sent, SPROSOD_LIST *spl, SPN *ps) ;
+export void terminate(CONFIG *config, BUFFER *buffer, LING_LIST *ling_list, SENT *sent, SPROSOD_LIST *spl, SPN *ps);
+#endif
 
 export void  buffer_init(BUFFER *buffer);
 export char *buffer_text(BUFFER *buffer);
@@ -66,21 +81,31 @@
 export void ps_malloc(int nphons, int ntargs, SPN *ps);
 export void ps_realloc(int nphons, int ntargs, SPN *ps);
 export void ps_free(SPN *ps);
+#ifdef FREEPHONE_OBSOLETE
 export void as_malloc(int nframes, int npp, ACOUSTIC *as);
 export void as_realloc(int nframes, int npp, ACOUSTIC *as);
 export void as_free(ACOUSTIC *as);
+#endif
 export void say_ascii(int character);
 export void spell_word(char *word);
 export void put_mbrola_data(CONFIG *config, SPN *ps);
+#ifdef FREEPHONE_OBSOLETE
 export void put_spn_data(CONFIG *config, SPN *ps);
 export void get_spn_data(CONFIG *config, SPN *ps);
+#endif
 export char *syllabify(char *string, CONFIG *config) 	/* replace string in situ  */;
 export char *stress(char *param) /* no stress allowed initially  */;
+#ifdef FREEPHONE_OBSOLETE
 export void process_sentence(CONFIG *config, BUFFER *buffer, LING_LIST *ling_list, SENT *sent, SPROSOD_LIST *spl, SPN *ps, ACOUSTIC *as);
+#endif
 export void produce_spn_file(CONFIG *config, BUFFER *buffer, LING_LIST *ling_list, SENT *sent, SPROSOD_LIST *spl, SPN *ps);
+#ifdef FREEPHONE_OBSOLETE
 export void process_spn_file(CONFIG *config, SPN *ps, ACOUSTIC *as);
+#endif
 export void high_level(CONFIG *config, BUFFER *buffer, LING_LIST *ling_list, SENT *sent, SPROSOD_LIST *spl, SPN *ps);
+#ifdef FREEPHONE_OBSOLETE
 export void low_level(CONFIG *config, SPN *ps, ACOUSTIC *as);
+#endif
 export void tags(CONFIG *config,BUFFER *buffer, LING_LIST *ling_list);
 export void transcribe(CONFIG *config, LING_LIST *ling_list);
 export char **split(char *in) ;
--- freespeech-1.0m.orig/src/rule_engine.c
+++ freespeech-1.0m/src/rule_engine.c
@@ -22,7 +22,7 @@
 export void rule_exec(int type,int nrules, RULE *rule, SENT *sent)
 {
   int i;
-  int lmatch = 0, rmatch = 0;
+  int lmatch = REG_NOMATCH, rmatch = REG_NOMATCH;
   char *input = buffer_text(&(sent->list));
   BUFFER ib;
   BUFFER prev;
@@ -31,13 +31,13 @@
   buffer_init(&prev);
   while (*input) {
     for(i=0;i<nrules;i++) {
-      lmatch = 0;
-      rmatch = 0;
+      lmatch = REG_NOMATCH;
+      rmatch = REG_NOMATCH;
       if(!strncmp(input,rule[i].target,strlen(rule[i].target))) {
 	/* candidate for rule match  */
-	lmatch = regexec(rule[i].lc,buffer_text(&prev));
-	rmatch = regexec(rule[i].rc,input+strlen(rule[i].target));
-	if(lmatch && rmatch) {
+	lmatch = regexec(rule[i].lc,buffer_text(&prev),0,NULL,0);
+	rmatch = regexec(rule[i].rc,input+strlen(rule[i].target),0,NULL,0);
+	if(!(lmatch || rmatch)) {
 	  buffer_add_str(&ib, rule[i].output);
 	  input += strlen(rule[i].target);
 	  buffer_add_str(&prev, rule[i].target);
@@ -45,16 +45,16 @@
 	}
       }
     }
-    if(lmatch && rmatch) {
-      ;
-    } else if (type|SAME) {
-      buffer_add_char(&ib, *input);
-      buffer_add_char(&prev, *input);
-      input++;
-    } else {
-      buffer_free(&prev);
-      buffer_free(&ib);
-      return;
+    if(lmatch || rmatch) {
+      if (type|SAME) {
+	buffer_add_char(&ib, *input);
+	buffer_add_char(&prev, *input);
+	input++;
+      } else {
+	buffer_free(&prev);
+	buffer_free(&ib);
+	return;
+      }
     }
   }
   buffer_clear(&(sent->list));
--- freespeech-1.0m.orig/src/rule_engine.h
+++ freespeech-1.0m/src/rule_engine.h
@@ -1,10 +1,10 @@
 
 typedef struct {
 	char *left_context;
-	regexp *lc;
+	regex_t *lc;
 	char *target;
 	char *right_context;
-	regexp *rc;
+	regex_t *rc;
 	char *output;
 } RULE;
 
--- freespeech-1.0m.orig/src/saynum.c
+++ freespeech-1.0m/src/saynum.c
@@ -14,34 +14,34 @@
 
 static char *Cardinals[] = 
 {
-  "zIHrOW ",	"wAHn ",	"tUW ",		"THrIY ",
-  "fAOr ",	"fAYv ",	"sIHks ",	"sEHvAXn ",
-  "EYt ",		"nAYn ",		
-  "tEHn ",	"IYlEHvAXn ",	"twEHlv ",	"THERtIYn ",
-  "fAOtIYn ",	"fIHftIYn ", 	"sIHkstIYn ",	"sEHvEHntIYn ",
-  "EYtIYn ",	"nAYntIYn "
+  "z*IArOW ",	"w*AHn ",	"t*UW ",		"THr*IY ",
+  "f*AOr ",	"f*AYv ",	"s*IHks ",	"s*EHvn ",
+  "*EYt ",		"n*AYn ",		
+  "t*EHn ",	"IY.l*EHvAXn ",	"tw*EHlv ",	"TH~ER.t*IYn ",
+  "f~AO.t*IYn ",	"f~IHf.t*IYn ", 	"sIHk.st*IYn ",	"s~EHvn.t*IYn ",
+  "~EY.t*IYn ",	"n~AYn.t*IYn "
 } ;
 
 static char *Twenties[] = 
 {
-  "twEHntIY ",	"THERtIY ",	"fAOtIY ",	"fIHftIY ",
-  "sIHkstIY ",	"sEHvEHntIY ",	"EYtIY ",	"nAYntIY "
+  "tw*EHntIY ",	"TH*ERtIY ",	"f*AOtIY ",	"f*IHftIY ",
+  "s*IHkstIY ",	"s*EHvntIY ",	"*EYtIY ",	"n*AYntIY "
 } ;
 
 static char *Ordinals[] = 
 {
-  "zIHrOWEHTH ",	"fERst ",	"sEHkAHnd ",	"THERd ",
-  "fAOTH ",	"fIHfTH ",	"sIHksTH ",	"sEHvEHnTH ",
-  "EYtTH ",	"nAYnTH ",		
-  "tEHnTH ",	"IYlEHvEHnTH ",	"twEHlvTH ",	"THERtIYnTH ",
-  "fAOtIYnTH ",	"fIHftIYnTH ", 	"sIHkstIYnTH ",	"sEHvEHntIYnTH ",
-  "EYtIYnTH ",	"nAYntIYnTH "
+  "z*IArOWTH ",	"f*ERst ",	"s*EHkAHnd ",	"TH*ERd ",
+  "f*AOTH ",	"f*IHfTH ",	"s*IHksTH ",	"s*EHvnTH ",
+  "*EYtTH ",	"n*AYnTH ",		
+  "t*EHnTH ",	"IY.l*EHvnTH ",	"tw*EHlvTH ",	"TH~ER.t*IYnTH ",
+  "f~AO.t*IYnTH ",	"f~IHf.t*IYnTH ", 	"sIHk.st*IYnTH ",	"s~EHvn.t*IYnTH ",
+  "~EY.t*IYnTH ",	"n~AYn.t*IYnTH "
 } ;
 
 static char *Ord_twenties[] = 
 {
-  "twEHntIYEHTH ","THERtIYEHTH ",	"fAOtIYEHTH ",	"fIHftIYEHTH ",
-  "sIHkstIYEHTH ","sEHvEHntIYEHTH ","EYtIYEHTH ",	"nAYntIYEHTH "
+  "tw*EHntIATH ","TH*ERtIATH ",	"f*AOtIATH ",	"f*IHftIATH ",
+  "s*IHkstIATH ","s*EHvntIATH ","*EYtIATH ",	"n*AYntIATH "
 } ;
 
 
@@ -53,11 +53,11 @@
 {
   if (value < 0)
     {
-      outstring("mAYnAHs ");
+      outstring("m*AYnAXs ");
       value = (-value);
       if (value < 0)	/* Overflow!  -32768 */
 	{
-	  outstring("IHnfIHnIHtIY ");
+	  outstring("IHn.f*IHnIHtIH ");
 	  return;
 	}
     }
@@ -65,7 +65,7 @@
   if (value >= 1000000000L)	/* Billions */
     {
       say_cardinal(value/1000000000L);
-      outstring("bIHlIYAXn ");
+      outstring("b*IHlIAn ");
       value = value % 1000000000;
       if (value == 0)
 	return;		/* Even billion */
@@ -76,7 +76,7 @@
   if (value >= 1000000L)	/* Millions */
     {
       say_cardinal(value/1000000L);
-      outstring("mIHlIYAXn ");
+      outstring("m*IHlIAn ");
       value = value % 1000000L;
       if (value == 0)
 	return;		/* Even million */
@@ -85,11 +85,11 @@
     }
 
   /* Thousands 1000..1099 2000..99999 */
-  /* 1100 to 1999 is eleven-hunderd to ninteen-hunderd */
+  /* 1100 to 1999 is eleven-hundred to nineteen-hundred */
   if ((value >= 1000L && value <= 1099L) || value >= 2000L)
     {
       say_cardinal(value/1000L);
-      outstring("THAWzAEnd ");
+      outstring("TH*AWznd ");
       value = value % 1000L;
       if (value == 0)
 	return;		/* Even thousand */
@@ -100,7 +100,7 @@
   if (value >= 100L)
     {
       outstring(Cardinals[value/100]);
-      outstring("HHAHndrEHd ");
+      outstring("HH*AHndrAXd ");
       value = value % 100;
       if (value == 0)
 	return;		/* Even hundred */
@@ -132,7 +132,7 @@
       value = (-value);
       if (value < 0)	/* Overflow!  -32768 */
 	{
-	  outstring("IHnfIHnIHtIY ");
+	  outstring("IHn.f*IHnIHtIH ");
 	  return;
 	}
     }
@@ -143,10 +143,10 @@
       value = value % 1000000000;
       if (value == 0)
 	{
-	  outstring("bIHlIYAXnTH ");
+	  outstring("b*IHlIAnTH ");
 	  return;		/* Even billion */
 	}
-      outstring("bIHlIYAXn ");
+      outstring("b*IHlIAn ");
       if (value < 100)	/* as in THREE BILLION AND FIVE */
 	outstring("AEnd ");
     }
@@ -157,10 +157,10 @@
       value = value % 1000000L;
       if (value == 0)
 	{
-	  outstring("mIHlIYAXnTH ");
+	  outstring("m*IHlIAnTH ");
 	  return;		/* Even million */
 	}
-      outstring("mIHlIYAXn ");
+      outstring("m*IHlIAn ");
       if (value < 100)	/* as in THREE MILLION AND FIVE */
 	outstring("AEnd ");
     }
@@ -173,10 +173,10 @@
       value = value % 1000L;
       if (value == 0)
 	{
-	  outstring("THAWzAEndTH ");
+	  outstring("TH*AWzndTH ");
 	  return;		/* Even thousand */
 	}
-      outstring("THAWzAEnd ");
+      outstring("TH*AWznd ");
       if (value < 100)	/* as in THREE THOUSAND AND FIVE */
 	outstring("AEnd ");
     }
@@ -187,10 +187,10 @@
       value = value % 100;
       if (value == 0)
 	{
-	  outstring("HHAHndrEHdTH ");
+	  outstring("HH*AHndrAXdTH ");
 	  return;		/* Even hundred */
 	}
-      outstring("HHAHndrEHd ");
+      outstring("HH*AHndrAXd ");
     }
 
   if (value >= 20)
--- freespeech-1.0m.orig/src/space.c
+++ freespeech-1.0m/src/space.c
@@ -11,14 +11,16 @@
 
 #include <sys/types.h>
 #include <limits.h>
-/* FreeBSD, and Linux?  */
+
 #ifdef FBSD_DATABASE
 #include <db.h>
 #else
-#include <ndbm.h>
+#include <db_185.h>
 #endif
+
 #include <fcntl.h>
 
+#ifdef FREEPHONE_OBSOLETE
 int ft_endian_loc = 1; /* for deciding if we need to byte-swap  */
 
 ENTRY indx[NDIPHS];
@@ -26,6 +28,9 @@
 int nindex;
 
 export void init(CONFIG *config, BUFFER *buffer, LING_LIST *ling_list, SENT *sent, SPROSOD_LIST *spl, SPN *ps, ACOUSTIC *as) 
+#else
+export void init(CONFIG *config, BUFFER *buffer, LING_LIST *ling_list, SENT *sent, SPROSOD_LIST *spl, SPN *ps)
+#endif
 {
 
   /* check the various files are accessible  */
@@ -41,20 +46,18 @@
 
 
 
+#ifdef FREEPHONE_OBSOLETE
   /* load the diphones including index  */
 
   load_speech(config);
+#endif
 
 
 
   /* set up database if present  */
 
   if(strcmp("-",config->hash_file)) {
-#ifdef FBSD_DATABASE
     config->db = (void *)dbopen(config->hash_file,O_RDONLY, 0000644, DB_HASH, NULL);
-#else
-    config->db = (void *)dbm_open(config->hash_file,O_RDONLY, 0000644);
-#endif
     /* the (void *) is so config can remain ignorant about the database  */
     if(config->db==NULL) {
       (void)fprintf(stderr,"\nDictionary file \"%s\" not found.\n",config->hash_file);
@@ -88,7 +91,9 @@
   /* now the synthesis stuff  */
 
   ps_malloc(DEF_PHONS,DEF_TARGS,ps);
+#ifdef FREEPHONE_OBSOLETE
   as_malloc(DEF_FRAMES,DEF_PM,as);       /* should perhaps use ps??  */
+#endif
 
 
 
@@ -112,13 +117,7 @@
 
   /*	what follows is an example for use as a template  */
   load_context_rules("context_rules");
-  /* this goes with the rule engine code...
-     for(i=0;i<nrules;i++) {
-     rule[i].lc = regcomp(rule[i].left_context);
-     rule[i].rc = regcomp(rule[i].right_context);
-     }
-     */
- 
+
   phon_rules_init();
 
 
@@ -127,16 +126,15 @@
 
 }
 
+#ifdef FREEPHONE_OBSOLETE
 void terminate(CONFIG *config, BUFFER *buffer, LING_LIST *ling_list, SENT *sent, SPROSOD_LIST *spl, SPN *ps, ACOUSTIC *as)
-{
-
-  if(config->db != NULL)
-#ifdef FBSD_DATABASE
-    (void)(config->db->close)(config->db);
 #else
-  dbm_close(config->db);
+void terminate(CONFIG *config, BUFFER *buffer, LING_LIST *ling_list, SENT *sent, SPROSOD_LIST *spl, SPN *ps)
 #endif
+{
 
+  if(config->db != NULL)
+    (void)(((DB *)(config->db))->close)((DB *)(config->db));
 
   output_close(config);
 
@@ -146,9 +144,11 @@
   spl_free(spl);
 
   ps_free(ps);
+#ifdef FREEPHONE_OBSOLETE
   as_free(as);
 
   unload_diphs(config);
+#endif
   phon_rules_free();
   /* also need to free the various other structures  */
 }
@@ -242,8 +242,8 @@
   ps->duration = (int *) malloc(sizeof(int)*(nphons+1));
   ps->pb = (int *) malloc(sizeof(int)*(nphons+1));
   ps->scale = (float *) malloc(sizeof(float)*(nphons+1));
-  ps->phons = (char **) malloc(sizeof(int)*(nphons+1));
-  ps->diphs = (char **) malloc(sizeof(int)*(nphons+1));
+  ps->phons = (char **) malloc(sizeof(char *)*(nphons+1));
+  ps->diphs = (char **) malloc(sizeof(char *)*(nphons+1));
 
   for(i=0;i<nphons;i++) {
     ps->phons[i] = (char *)malloc(sizeof(PHON_SZ));
@@ -268,8 +268,8 @@
   ps->duration = (int *) realloc(ps->duration,sizeof(int)*(nphons+1));
   ps->pb = (int *) realloc(ps->pb,sizeof(int)*(nphons+1));
   ps->scale = (float *) realloc(ps->scale,sizeof(float)*(nphons+1));
-  ps->phons = (char **) realloc(ps->phons,sizeof(int)*(nphons+1));
-  ps->diphs = (char **) realloc(ps->diphs,sizeof(int)*(nphons+1));
+  ps->phons = (char **) realloc(ps->phons,sizeof(char *)*(nphons+1));
+  ps->diphs = (char **) realloc(ps->diphs,sizeof(char *)*(nphons+1));
 
   for(i=rem_p;i<nphons;i++) {
     ps->phons[i] = (char *)malloc(sizeof(PHON_SZ));
@@ -299,6 +299,7 @@
   free(ps->diphs);
 }
 
+#ifdef FREEPHONE_OBSOLETE
 export void as_malloc(int nframes, int npp, ACOUSTIC *as)
 {
 
@@ -331,6 +332,7 @@
   free(as->duration);
   free(as->pitch);
 }
+#endif
 
 /*
  * 'SENT' operations.
--- freespeech-1.0m.orig/src/spnio.c
+++ freespeech-1.0m/src/spnio.c
@@ -7,6 +7,7 @@
 
 #include "t2s.h"
 
+#ifdef FREEPHONE_OBSOLETE
 static void transmogrify(CONFIG *config, char *s, SPN *ps)
 {
   char *phon;
@@ -40,6 +41,7 @@
   if(!ps->t_sz)
     fprintf(stderr,"No frequency specified, using default\n");
 }
+#endif
 
 export void put_mbrola_data(CONFIG *config, SPN *ps)
 {
@@ -68,6 +70,7 @@
   fflush(config->ofd);
 }
 
+#ifdef FREEPHONE_OBSOLETE
 export void put_spn_data(CONFIG *config, SPN *ps)
 {
   int i;
@@ -114,4 +117,4 @@
   }
   /* perhaps we should close the file  ??  */
 }
-
+#endif
--- freespeech-1.0m.orig/src/syllab.c
+++ freespeech-1.0m/src/syllab.c
@@ -161,7 +161,7 @@
   /* we start looking once we find a vowel  */
   /* we stop looking if we find an existing syllable boundary  */
 
-  if(b_cat(carrier[c_sz-1],config) == VOWEL) {
+  if((c_sz>0) && b_cat(carrier[c_sz-1],config) == VOWEL) {
     look = 1;
     /* don't need a marker  */
   }
--- freespeech-1.0m.orig/src/t2s.c
+++ freespeech-1.0m/src/t2s.c
@@ -7,6 +7,7 @@
 
 #include "t2s.h"
 
+#ifdef FREEPHONE_OBSOLETE
 export void process_sentence(CONFIG *config, BUFFER *buffer, LING_LIST *ling_list, SENT *sent, SPROSOD_LIST *spl, SPN *ps, ACOUSTIC *as)
 {
   high_level(config,buffer,ling_list,sent,spl,ps);
@@ -15,20 +16,26 @@
 
   fflush(config->ofd);
 }
+#endif
 
 export void produce_spn_file(CONFIG *config, BUFFER *buffer, LING_LIST *ling_list, SENT *sent, SPROSOD_LIST *spl, SPN *ps)
 {
   high_level(config,buffer,ling_list,sent,spl,ps);
   
+#ifdef FREEPHONE_OBSOLETE
   if(config->type == _SPN_) {
     put_spn_data(config,ps);
   } else if(config->type == _MBROLA_) {
+#endif
     put_mbrola_data(config,ps);
+#ifdef FREEPHONE_OBSOLETE
   }
+#endif
   
   fflush(config->ofd);
 }
 
+#ifdef FREEPHONE_OBSOLETE
 export void process_spn_file(CONFIG *config, SPN *ps, ACOUSTIC *as)
 {
   get_spn_data(config,ps);
@@ -37,6 +44,7 @@
 
   fflush(config->ofd);
 }
+#endif
 
 export void high_level(CONFIG *config, BUFFER *buffer, LING_LIST *ling_list, SENT *sent, SPROSOD_LIST *spl, SPN *ps)
 {
@@ -55,6 +63,7 @@
   prosody(spl,ps);
 }
 
+#ifdef FREEPHONE_OBSOLETE
 export void low_level(CONFIG *config, SPN *ps, ACOUSTIC *as)
 {
   phonstoframes(ps,as);
@@ -63,3 +72,4 @@
 
   calc_pitch(config,ps,as);      
 }
+#endif
--- freespeech-1.0m.orig/src/t2s.h
+++ freespeech-1.0m/src/t2s.h
@@ -3,8 +3,8 @@
 #include <string.h>
 #include <stdlib.h>
 #include <ctype.h>
-#include "regexp.h"
-#include "regmagic.h"
+#include <sys/types.h>
+#include <regex.h>
 
 #define export
 
@@ -52,26 +52,36 @@
 typedef struct {
   char *input_file;
   char *output_file;
+#ifdef FREEPHONE_OBSOLETE
   char *diphone_file;
+#endif
   char *hash_file;
+#ifdef FREEPHONE_OBSOLETE
   char *format;
   int type;	/* format by any other name  */
+#endif
   FILE *ifd;
   FILE *ofd;
+#ifdef FREEPHONE_OBSOLETE
   FILE *xfd;
   FILE *dfd;
+#endif
   void *db;
   int fw_num;
   int broad_cats_num;
   int dur0_num;
   int edin2sampa0_num;
+#ifdef FREEPHONE_OBSOLETE
   char prog[40];
+#endif
   int sr;
   int fr_sz;
+#ifdef FREEPHONE_OBSOLETE
   int fr_data;
   int ncoeffs;
   int norm;		/* used for normalising output amplitude  */
   int ft_endian_loc;	/* for telling byte order  */
+#endif
 } CONFIG;
 
 typedef struct {
@@ -138,9 +148,11 @@
   int end;
 } ENTRY;
 
+#ifdef FREEPHONE_OBSOLETE
 typedef struct {
   short *frame; 
 } FRAME;
+#endif
 
 typedef struct {
   int p_sz;
@@ -159,6 +171,7 @@
   char **diphs;
 } SPN;
 
+#ifdef FREEPHONE_OBSOLETE
 typedef struct {
   int f_sz;
   int p_sz;
@@ -168,14 +181,15 @@
   short *duration; /* since variants may be required  */
   short *pitch;
 } ACOUSTIC;
+#endif
 
 
 typedef struct {
   char *left_context;
-  regexp *lc;
+  regex_t *lc;
   char *target;
   char *right_context;
-  regexp *rc;
+  regex_t *rc;
   char *output;
 } RULE;
 
@@ -190,6 +204,7 @@
 
 /* now definitions of global data  */
 
+#ifdef FREEPHONE_OBSOLETE
 extern ENTRY indx[NDIPHS]; 
 extern FRAME dico[NFRAMES];
 extern int nindex;
@@ -205,5 +220,6 @@
 #define SWAPINT(x) (((x) & 0xff) << 24 | ((x) & 0xff00) << 8 | \
                     ((x) & 0xff0000) >> 8 | ((x) & 0xff000000) >> 24)
 #define SWAPSHORT(x) (((x) & 0xff) << 8 | ((x) & 0xff00) >> 8)
+#endif
 
 #include "prototypes.h"
--- freespeech-1.0m.orig/src/transcribe.c
+++ freespeech-1.0m/src/transcribe.c
@@ -9,12 +9,13 @@
 
 #include <sys/types.h>
 #include <limits.h>
-/* FreeBSD, and Linux?  */
+
 #ifdef FBSD_DATABASE
 #include <db.h>
 #else
-#include <ndbm.h>
+#include <db_185.h>
 #endif
+
 #include <fcntl.h>
 
 static char *lookup_db(char *word, CONFIG *config);
@@ -54,43 +55,24 @@
   }
 }
 
-#ifdef FBSD_DATABASE
-
 static char *lookup_db(char *word, CONFIG *config)
 {
   DBT inKey, inVal;
  
   inKey.data = word;
-  inKey.size = strlen(word)+1;
+  inKey.size = strlen(word);
  
   inVal.data = NULL;
   inVal.size = 0;
  
  
   if(config->db != NULL) {
-    (config->db->get)((DB *)config->db,&inKey,&inVal,0);
+    (((DB *)(config->db))->get)((DB *)(config->db),&inKey,&inVal,0);
     return(inVal.data);
   } else 
     return(NULL);
 }
 
-#else
-
-static char *lookup_db(char *word, CONFIG *config)
-{
-  datum Key;
-
-  Key.dptr = word;
-  Key.dsize = strlen(word)+1;
-
-  if(config->db != NULL)
-    return(dbm_fetch((DBM *)config->db,Key).dptr);
-  else
-    return(NULL);
-}
-
-#endif
-
 static void ToLower(char *word)
 {
   while(*word) {
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin