                  SayMore Version 0.42
                        © 1997
                By Kenton A. Groombridge

Quick note:

   I have ordered ClassAct about a month and a half ago.  I still
have not received it, but when I do, I will start working on some
major changes to the program.  Until then, it will be just simple
bug fixes and enhancements.  I like ClassAct, because unlike MUI,
it costs you, the user, nothing.

The use of this program requires:
Workbench 2.04+
narrator.device V37+ found on Workbench 2.04 and 2.05.

******************** AND ***********************

translator.library V43+ found on Aminet as:
   util/libs/translator42.lha
   util/libs/Tran43pch.lha

************************************************

Introduction:

   SayMore is a program designed to replace Say.  Say was fine 
for Workbench 1.3, but the Say program included with 2.0X did not 
have the ability to change most of the options in the new 
narrator.device.

   This is a prerelease version of SayMore.  It is not far from 
being completed, but I want to make this program the best I can.  
Please look over the interface and features and tell me what you 
like and dislike.

************************************************

The following use to be true, but now I can say that SayMore,
even in it's beta stage, is superior to all programs like it on
Aminet. 

   There are a couple programs similar to SayMore currently on 
Aminet.  These programs have severe memory leaks and are not 
system friendly.  A considerable amount of time and effort has 
gone into SayMore to ensure that it is safe.  It is near 
impossible for me to test all the limits of SayMore, but all test 
have proven that it is completely 100% OS friendly and has no 
memory leaks.

************************************************

Disclaimer:

   The use of this program is on your own risk. There is no 
liability or responsibility for any damage caused by the program.

Copyright:

   SayMore is free to be spread on public-domain and shareware 
disks, as long as they  are sold for a reasonable charge.

Use of the program:

   SayMore is my gift to the Amiga community.  I do not charge
money for the use of SayMore, but I have coined the term
caveatware.  Caveatware means that you may use the program just
by reading the following.  You don't have to abide by them, just
read them.

1.  If English is your native language, please try to speak it 
correctly.  I know that my English is not always correct, but I 
am trying to improve it.  Some of by pet peeves are using the 
word "gender" when you mean "sex."  As one person said, gender is
the attribute of a word and not a person.  This all has to do
with political correctness which I despise.

2.  Write a program for the Amiga.  It seems like every time I 
read usenet news, there is somebody wishing there was a program 
that did this or that.  Do something about it, and write a 
program.  I use to write programs with the public domain/freeware
a68k and blink.  Although painful, I did write some pretty nifty
programs.

3.  If you write Amiga software, and charge a fee for what you 
write, please consider discounts for other Amiga software 
authors.

4.  Send a message to me letting me know that you use the 
program.  I would greatly appreciate some input on what you would 
like to see added or changed to the program.

5.  If you do find a bug with the program.  Please let me know
as soon as possible.  This will make future versions of the
program better for you and other users.

5.  Bug Amiga International to include narrator.device and 
translator.library with future releases of Workbench.

6.  Please forgive the sloppiness in this documentation as I am
in a hurry to get this out.

7.  More to follow.

Required:

   As far as I know, this program requires Workbench 2.04+, but
it has not been tested on all platforms.  It was written on an
Amiga 2000/GVP 040/Workbench 3.1 and an Amiga 4000/040/Workbench
3.1.  Remember that it requires the new narrator.device included
with Workbench 2.0X, and V43 of translator.library found on
Aminet.

Reporting errors:

   I have put in some code to help determine the cause of 
errors.  When a detectable error occurs in this program, a 
requester will pop up with some text indicating the error that
occurred and the approximate amount of CHIP RAM and FAST RAM.
If either of these numbers are small, you may be running out of
memory.  Try to free some memory and try again.  Read the
message.  If the message says "Can not open translator.library
V43 or above," check to see that you have that library and it
is the correct version.  The only problem that will not display
an error, is if intuition.library V37 or above could not be 
opened.  This is because the requester requires
intuition.library to be opened to operate.

   If you can not determine the cause of the error or the 
program fails without a detectable error, please send me the 
configuration of your system, other programs that were running at 
the time, and any other information you feel is important.   

Contacting the author:

e-mail      kgroombr@interquest.de
            Kenton.Groombridge@wpc.af.mil

snail-mail  Kenton Groombridge
            PSC 3 Box 1766
            APO AE  09021
            USA

         -OR-

            Kenton Groombridge
            PSC 3 Box 1766
            D:67661 Kapaun Flugplatz
            Germany

Acknowledgments:

   The first SayMore program was written using HiSoft DevPac 
Assembler 3.04.  I have sent several messages to HiSoft as how to 
upgrade to the most recent version of the program, but have never 
received a response.  If you know who to contact about upgrading 
this program, please let me know.

   This version of the program is written using SAS/C 6.58.  
SAS/C is a great program, and I hope that they continue support 
for the Amiga.  Thanks to the SAS/C Amiga developers for the four 
patches written after Commodore's death.

   Thanks to Gateway 2000 for saving the Amiga's future.

To do:

1.  Refine the tool types.
2.  File requester to speak files.
3.  Command line operation that parses the command line.
4.  Switch characters so that the voice can change while speaking.
5.  Rewind, Fast Forward, Stop, and Pause buttons.
6.  Sizeable main window.
7.  Menu with items such as "Open", "About", "Quit, etc."
8.  Font sensitivity.
9.  Localization.
10. More face types.
11. Refine the GUI.
12. Save options, with the ability to save multiple setups.
13. Enhance the breakup of files.  Maybe do a plugin or
    something so users can make their own routines to break
    down the sentences to fit his/her needs.
14. Multiple selection of icons.
15. Progress indicator.
16. Pretty icons.
17. Better documentation in AmigaGuide format.
18. Any feasible user request.

0.10B
Written in assembler.  It was not user friendly, but it worked.

0.20
Ported to C and made several enhancements.

0.25
Fixed a bug in error reporting.  It reported that it could not 
create the console message port when it could not open 
translator.library and vice-versa.

Included the correct documentation.                                         

0.30
Fixed bug with the console_task that caused messages to get 
passed to the wrong instance of the program when two or more 
instances of the program were loaded.

Changed translate_buffer's size to account for the largest 
possible translate string (I hope).                     

Discovered a bug in translator.library.  When it handles large 
strings of consecutive numbers, it  will skip numbers every 100 
numbers it processes.  The tranlate_buffer's size accounts for 
the largest string possible when or if this bug is ever fixed.                     

Found a bug with the creation of the console_task.  If 
console_task tried to find it's parents message port before the 
port was added to the system list, it would crash with a Guru 
80000008.  I could not find a way to completely fix this bug.  I 
did make it where the parent's message port is added to the 
system list way before the spawned task should ask for it.  The 
only way I know to fix this is to have only one instance of 
SayMore running at a time.  If at anytime you get this error, 
please let me know, and I will work harder to try to eliminate 
this bug.                     

Added "Face" window.  It is ugly, but it is a start.

0.33
Changed code so that only one instance of SayMore can run at a time.
There really is no reason for two instances since only one
narrator.device can be open at any one time.

Fixed "Face" window so that it works with different size borders.

Eliminated the GimmeZeroZero window for face so less system
resources are needed.

Sped up Face routine significantly.

Now uses EasyRequest() to print error messages.  This is good news
for those who are using monitors that don't sync down to 15KHz.

"Face" window now uses a diamond mouth.  Don't worry, future version
will have user configurable mouths.  This is just for testing since

I am certian that the round mouth is functional.

0.41
Fixed bug with the code that determined if another instance of
saymore was running.  It used to assign a name to the node of the
process.  The problem was, if the program was run from the shell, it
would change the process node of the shell to "SayMore".  If the
program was exited and an attempt was made to run it again, it
would not run because the shell still had the name "SayMore".  It
would only run again if the shell was exited.  Make sense?  Now it
uses a message port to send and recieve it's messages when starting
up.

Added one of my "To Do" items about a requester for "CONTINUE" or
"BRING TO FRONT".  It can't bring the "SayMore Input" and "SayMore
Output" windows to front because they are actually CON:.  Depending
on the difficulty and the time I have, I will try to change CON: to
windows and attach the console.device.  The current method is easiest
since CON: already has cut/paste and history built in.

Fixed the spelling of my name in the title bar.  When I was doing a
search and replace, I killed the two o's in Groombridge.  Oh well,
it didn't affect the running and it actually saved a couple bytes.

Added a couple optimizations that save a few bytes and sped up the
code a bit.

SayMore is now translator.library V43+ only.  I did this because it
is free, and it overcomes the shortcommings and the bugs found in V37
translator.library.  It also has many features which make it a must
have.  The docs say that V42 has bugs, but I never came across them.
Since the V43 patch is free, I made SayMore V43 only.

Command line operation.  Although not complete, you can specify a 
file name to speak.  The length of the filename does have a limit,
but future versions will overcome this.  At the moment, this is
under testing.  To read a file back type: Saymore "path:file", 
where "path:file" is the absolute or relative path and file name.

Added tool types.  At the moment there is no way to save the current
configuration, but this is due to change.  To change their values,
use the Icon->Information from the Workbench menus and add/delete/edit
the tools.  Tool types currently supported are:

0.42
Fixed some stupid bugs in the file read routines.  Although the windows
would open, no text was rendered in them.  Also the windows sometimes 
would not close when the program was finished speaking the file.

Fixed the "EYE" types so that they are all the same width and height no
matter what eye type is used.  The "BOX" eye used to be rendered
slightly larger.

Changed the tooltype values for "EYES" and "MOUTH".  "SQUARE" is now
"BOX", and "ROUND" is now "OVAL".  I did this for three reasons.  It
saves several bytes in the code, it makes the program faster, and they
are more accurate terms. 

     String                   Value
-----------------------------------------------------------------------------------
NOFACE       Boolean: use if you do not want the face window.
FACEX=       Any positive value within the screen limits.
FACEY=       Any positive value within the screen limits.
FACEWIDTH=   Any positive value greater than 50 and within the screen limits.
FACEHEIGHT=  Any positive value greater than 75 and within the screen limits.
NOMAIN       Boolean: use if you do not want the main window.
MAINX=       Any positive value within the screen limits.
MAINY=       Any positive value within the screen limits.
NOINPUT      Boolean: use if you do not want the input window.
INPUTX=      Any positive value within the screen limits.
INPUTY=      Any positive value within the screen limits.
INPUTWIDTH=  Any positive value within the screen limits.
INPUTHEIGHT= Any positive value within the screen limits.
NOOUTPUT     Boolean: use if you do not want the output window.
OUTPUTX=     Any positive value within the screen limits.
OUTPUTY=     Any positive value within the screen limits.
OUTPUTWIDTH= Any positive value within the screen limits.
OUTPUTHEIGHT=Any positive value within the screen limits.
EYES=        DIAMOND, BOX, OVAL
MOUTH=       DIAMOND, BOX, OVAL
********************************************************
Be careful with these two.  If the number is too small, you will be
rendering in the window borders and you can go outside the rastport.
This can crash the system.  If you leave these out, it will default 
to a safe value.

MOUTHWIDTH=  Any postive value.  The bigger the number the smaller the mouth.
MOUTHHEIGHT= Any postive value.  The bigger the number the smaller the mouth.
********************************************************
VOLUME=      0 - 64
RATE=        40 - 400
PITCH=       65 - 320
SAMPFREQ=    5000 - 28000
PRIORITY=    -128 - 127
AVBIAS=      -31 - 32
AFBIAS=      -31 - 32
ENTHUSIASM=  0 - 255
PERTURB=     0 - 255
CENTRALIZE=  0 - 100
ARTICULATE=  0 - 400
F1ADJ=       -100 - 100
F2ADJ=       -100 - 100
F3ADJ=       -100 - 100
A1ADJ=       -31 - 32
A2ADJ=       -31 - 32
A3ADJ=       -31 - 32
SEX=         MALE, FEMALE
MODE=        NATURAL, ROBOTIC, MANUAL
SPEAKER=     BOTH, LEFT, RIGHT
CENTPHON=    AA, AE, AH, AO, EH, ER, IH, IY, OW, UH, UW
ACCENT=      Any accent listed in LOCALE:accents/  Do not use the .accent extension.

                   These are not yet supported.
-----------------------------------------------------------------------------
INPUTBUFFER= The size of the input buffer for file reading.
OUTPUTBUFFER=The size of the output buffer for the text conversion.

     These will be supported when the Sizeable main window is finished.
-----------------------------------------------------------------------------
MAINWIDTH=   Any positive value within the screen limits.
MAINHEIGHT=  Any positive value within the screen limits.

You all may wonder what happens to versions that are not listed
above.  They do exist, but are versions that I test and debug.
They are not released to the general public.  If you want to 
receive beta programs, actually they are all beta, send me an email
and I will send you these for testing.  All I ask is that you test
them thoroughly and send me notes letting me know the problems you
find.  For those that don't want these unreleased beta's, I have not
received any reports of bugs in the beta's that I have released on
Aminet.  Just so you know that I try to release safe programs.

Get the latest version on my web page at:

http://www.interquest.de/~kgroombr/
