                                   
                    HOW TO COMMUNICATE WITH DECTALK.

COMMUNICATING WITH THE DECTALK PC.
      The  primary function of the DECtalk PC is to convert ASCII text
files  into synthesized speech output. In addition, a large number  of
control  and status functions are available. These functions are  used
to  modify  the  speech parameters of the DECtalk PC  and  to  provide
status and control to the application program. Most of these functions
are  supported  by third party application packages  such  as  screen
access programs. This document defines how to interface directly  to
the  DECtalk  PC by using in-line text, square-bracket commands  as
well  as by an application program using calls to the DECtalk PC  TSR,
DT_DRIV.EXE.

DECtalk Driver - DT_DRIV.
All text and control communications to the DECtalk PC are done via the
DECtalk Terminate and Stay Resident (TSR) driver, DT_DRIV.EXE.   There
are four basic ways to communicate with the TSR.It can be done by:
     1. Using the DOS commands COPY and PRINT,
     2. Using a terminal emulation program.
     3. Using DOS (Int 86) BIOS calls to a COMM or LPT port.
     4. Interfacing directly with the TSR using Int 2f multithreaded
interrupts.

SENDING ASCII TEXT.
It  is  the responsibility of the PC user or the application to insure
that  only ASCII based text is sent to the DECtalk to synthesize. Word
processing files contain formatting information which the DECtalk does
not  know  how to process and in fact will sometimes try to  speak  it
thereby creating garbled output.

TEXT PROCESSING RULES.
     DECtalk  PC  includes  its  own set of built-in  rules  for  text
processing  as  well  as  a  large integral dictionary.  In  addition,
application specific dictionaries can be included. All text  input  to
the DECtalk are processed based on these rules and dictionaries.
     Many  applications manipulate the text input to a synthesizer  to
control  how it is to be spoken. Prior to modifying the text input  to
the  DECtalk to gain the desired result, it is important to know  that
many  text  processing rules are already programmed into the  DECtalk.
These  rules  include number processing, abbreviations, word  spellout
strategies  and homographs (words with two pronunciations).  In  every
case  the  latest release notes should be consulted to see if  any  of
these rules have been modified.

Application Dictionaries
      Dictionaries containing words, acronyms, etc. that are  specific
to an application and that DECtalk needs help in pronouncing correctly
can  be  created and loaded into the  memory on the DECtalk PC  board.
Appendix  A.  describes  the procedure for  creating  and  loading  an
application dictionary.

NOTE:  Users must be cautioned that creation of a dictionary  requires
the use of a phonetic alphabet and stress symbols.
DECtalk searches dictionaries in the reverse order in which they  were
loaded. Therefore it will search the last loaded dictionary first  and
so  on. If you want to override the pronunciation of a word which  may
be   in  the  internal  dictionary,  DTPC.DIC,  then  the  application
dictionary  must be loaded after it. The DT_LOAD command  is  used  to
load  a  dictionary.  The command can be used anytime  after  the  the
DECtalk  PC  has been initialized and loaded with its basic  opertaing
modules.  Or  the compiled application dictionaries's  file  name  can
added  onto the end of the DT_LOAD command that is included in DECtalk
PC's AUTOEXEC.BAT  file commands.
     Examples:
          DT_LOAD  mydict.dtu.
               or,
          DT_LOAD  kernel .sys command.com dtpc.dic..... mydict.dtu,

CONTROL AND STATUS FUNCTIONS.
      In  addition to being able to send ASCII text to the DECtalk for
it to convert into synthesized speech output, there are a large number
of  operating  parameters which can be controlled  by  a  user  or  an
application  program. These parameters include selecting the  speaking
voice,  rate, and volume, tone generation, and pause lengths.  Various
modes  can  also  be set such as punctuation, logging,  spelling,  and
speaking.  Lastly status and control functions such  as  indexing  and
output   control  are  available  to  the  application  program.   The
description  and  use  of  these  status  and  control  functions  are
described later in this document.

DT_DRIVE CONFIGURATION OPTIONS.
        The  DT_DRIV.EXE program will take various arguments to allow
for  different desired configurations. The default configuration  for
DECtalk is a base address of 340, and serial trapping enabled on port
3  (COM4).  The following is a list of the arguments that the  driver
program accepts.  The I/O address is set via switches 6 and 7 of  the
DIP  switch  pack  on the DECtalk PC board. The DT_DRIV  comand  line
switch options are:

       Table 3.1  DT_DRIV Configuration Options.

 -C  DD     Enables com port trapping 01 = COM2, 02 = COM3,                                             or 03 = COM4)
 -L  DD     Enables parallel printer trapping 01 = LPT2, 02 =LPT3.
 -B  XX     Sets the base module address to XX (hex number).
 -R         Removes the driver from memory.
 -V         Calls  for  verbose printout of information  by  the
            driver.
 -M         Show the valid switches.

USING DOS COPY AND PRINT.
        The  simplest way to communicate with the TSR is to  use  the
DOS  COPY  command. The DOS syntax  "COPY filename.txt COMx"  can  be
used where filename.txt is a file containing ASCII formatted text and
COMx  is  the COM port that the DT_DRIV driver is trapping calls  to.
The  default  COM port for DECtalk PC is COM4. The PRINT command  can
also  be  used  if the printer switch is activiated  in  the  DT_DRIV
command line.  The ports can be changed using switches in the DT_DRIV
command  line.  DT_DRIV  will trap the BIOS call  made  to  COM4  and
instead send the text file to the DECtalk PC installed on the PC bus.
The DECtalk PC then converts the text into synthesized speech.

USING A TERMINAL EMULATOR.
There are a number of comm/terminal emulator software packages such as
KERMIT which will support BIOS calls to a COM or LPT device. Again, a
user can create an ASCII text file using a text editor and then run
the comm package to transmit the file to the COM or LPT port that the
DECtalk PC program is set to receive. (The default ports are COM4 and
LPT3.)  In terminal emulation mode, the comm packages will also allow
you to type directly to a COM or LPT port.

Note: The number of the com port or printer port will differ depending
upon the configuration. Use the DT_CONF utility to determine what
ports are configured.  For example, type DT_CONF -S to determine which
ports are configured.


DOS BIOS Calls.
        The  DECtalk PC can be treated as a standard ASCII device  as
though  it  was  connected to either a serial com port  (COMx)  or  a
parallel  printer  port  (LPTx). DOS INT86 BIOS  calls  made  to  the
specific  port  are  trapped  by  DT_DRIV  which  then  directs   the
information to the DECtalk PC card on the PC bus.

PROGRAMMING DOS BIOS CALLS.
      The  DECtalk driver will trap any COPY or PRINT BIOS  interrupts
for  whichever  device  it has been configured to  emulate(see  Driver
Configuration Options above) and should appear to the calling  program
just  like  a normal serial or parallel card at the BIOS level.  Since
there isn't any actual parallel or serial hardware,  baud rate and the
like  will be emulated and echoed, but nothing is done with these.  In
emulation  mode,  the DECtalk will operate just as quickly  with  baud
rate set at 110 baud as it will at 19.2Kbaud.
      As an example of a COM BIOS call, the status information for the
DECtalk was obtained by an INT14 .
     Example:
          gt_stat(int dtport)
          {
               do{
               RB.ah = _COM_STATUS;
               RB.al = 0;
               RW.dx = dtport;
               RW.si = 0;
               _int86(0x14, &regs, &regs);
               }while(regs.x.ax == TSR_BUSY || regs.x.ax ==
          TSR_RETRY);
               return(RW.ax);
          }

This  document will not address how to make BIOS calls to a serial  or
parallel  device.  That  information is generally  available  and  the
details  are specific to the compiler being utilized, rather  than  to
the  DECtalk. For informational purposes, the definitions for the comm
port bits have been included in the DTTSR.H file which is provided  as
part of the distribution.
NOTE: Some communications programs will try to deal directly with the
port  hardware on the PC thereby bypassing the BIOS. If this  is  the
case,   the   DECtalk  TSR  will  never  see  the   commands.   Other
applications, like KERMIT, will revert to BIOS if it does not see any
hardware  at the designated port. DECtalk PC should work  with  these
types  of  programs as long as the port selected does  not  have  any
physical hardware in the PC designated with the same port name.
Communicating Directly with the TSR.
Application programs can interface directly with the DECtalk  TSR  to
both control the DECtalk PC and to send it text to speak.

2F MULTI-THREADED INTERUPT.
        To  interface  directly  with the TSR  driver,  DT_DRIV,  the
application  must utilize the 2F multi-threaded INT86 interrupt.  The
call is made using a INT86 structure with the ah = DECTALK_ID and the
al  =  the command function code. The bl contains any parameters that
need  to be passed along with the command. The Status command returns
the  status  of the DECtalk and not comm status. The dx contains  the
comm  status information in this case, so you can get the comm status
from the GET_STATUS command.
       Example:
       stopit()

       {
       do{
       RB.ah = DECTALK_ID;
       RB.al = PAUSE_OUTPUT;
       RW.si = 0;
        _int86(0x2f, &regs, &regs);
       }while(regs.x.ax == TSR_BUSY || regs.x.ax == TSR_RETRY);
       return(RW.ax);


How to detect the DECtalk PC version number:

In the TSR, DT_DRIV.EXE, we have a GET_STATUS case:
	
	case GET_STATUS	:
	 DFW.dx = DTC.module_status;
	 DFB.cl = num_modules;
	 DFW.ax = TSR_SUCCESS;
	 DFB.ch = 422;	/* version number */
	break;


Example from DTDEMO.C to retrieve the version number from GET_STATUS

	case 'z':       /* to get the DECtalk version number*/
            if (status() == TSR_SUCCESS)
            break;         


	status()  
		{       
		RB.ah = DECTALK_ID;
		RB.al = GET_STATUS;
		RW.si = 0;
	 	_int86(0x2f, &regs, &regs);
		stat=RB.ch;
   		printf("The DECtalk version number is %d.\n",stat);
		return(RW.ax);
		} 

Version 4.2A:

What is printed is "the DECtalk version number is 165."
To get the correct version, add 256 to 165.  That equals 421, which is 
4.21 essentially 4.2A.

Version 4.2B:

What is printed is "the DECtalk version number is 166."
To get the correct version, add 256 to 166.  That equals 422, which is 
4.22 essentially 4.2B.


Embedding DECtalk commands in the text string.
In  addition to controlling DECtalk directly via TSR commands, it can
also  be  controlled by embedding commands in the ASCII text  string.
These  are  known as "square bracket" commands because the syntax  is
[:CMND DD].
For  example, to change the speaking rate to 220 words per minute the
following  command could be included in the text file  at  the  point
where the change in rate was desired:
               [:Rate 220]
The  "square  bracket"  commands are listed  in  the  Speech  Control
Commands section later in this document.

Mixed Control.
     Both types of command functionality can be present simultaneously
so it is possible to utilize both types at the same time. For example
the TSR command to send a buffer could include an ASCII string
containing "square bracket" speech control commands. Synchronization
of commands and data if both paths were utilized would be the
responsibility of the application.

SPEECH CONTROL.
There are four (4) ways to control speech in the DECtalk PC:
1. Through  English  text (sentences  in  standard  English
format  and spelling). DECtalk speaks this text as  written according
to  a  set  of predefined rules. Chapter 4 discusses these rules   in
more detail.
2. Through phonemic spelling (sentences or phrases  written
in  phonemic  symbols). Phonemic spelling is  closer  to  the  actual
pronunciation  of the text. Phonemic spelling is always  enclosed  in
square  brackets. E.g., if you were to phonemicize the sentence  This
is  an  example of       phonemic spelling, it would look like  this:
[dh'ihs ihz  axn ixgz'aempel axv  faxn'iymixk sp'ehlixnx]. Chapter  5
Phonemics discusses phonemic control in more detail.
NOTE: To use the Phonemic spelling function it must be turned ON.
3. Through voice control, [:dv XX], commands. These commands
control  features  of speech that are not obvious  from  the  visible
text,  such  as  sex  of  the speaker, and excitement  level.   These
commands are a subset of the overall speech control commands. Because
of  the  technical  complexity  and interelationship  of  the  speech
synthesis    parameters    and    the    possibility    of    causing
overloads(squealing)  in the sybthesizer It is not  recommended  that
these  commands  be  used except by persons knowledgeable  in  speech
synthesis.  Chapter  6   Modifying  the  Voices  in  the  DECTalk  PC
Technical  Reference manual discusses voice control in  more  detail.
This  manual  can be purchased from the Digital Equipment Corporation
Users Society(DECUS) Library.
4. Through  speech control commands. These "square  bracket"
([:CMND   XX])  commands  control  the  overall  operation   of   the
synthesizer  as  well as its many special features.  They  allow  the
various  voices to be selected, the speaking  rate and volume  to  be
set and the various operating modes (like spell, log and math, to  be
set.  .  The  also  control  the  generation  of  tones,  punctuation
pronunciation, the length of pauses after periods and  commas.  These
commands are listed in the Speech Control Commands  section  of  this
chapter.

USING SPEECH CONTROL COMMANDS.
      Speech  control commands can be broadly defined as being  either
synchronous  or asynchronous. Speech control commands are  synchronous
unless  otherwise stated in their individual descriptions. Synchronous
commands  take effect when they are encountered in the text string  by
the  DECtalk  synthesizer. For example a voice change command,  [:nX],
will  take effect at the point the command is encountered in the text.
Asynchronous  commands on the other hand are intended to provide  fast
response  and  therefore  when parsed by  the  DECtalk  TSR  are  sent
directly to the DECtalk synthesizer  for immediate processing.

SYNCHRONIZING ASYNCHRONOUS COMMANDS.
         The   immediate  processing  of  asynchronous  commands   is
beneficial when fast response is desired. However caution  should  be
exercised when using commands that are listed as asynchronous and the
intent  is to have them take effect at a specific point in the  text.
If  it  is  desired to synchcronize an asynchronous command then  the
[:SYNCH]  command should be used in conjunction with it. For  example
to  use  the asynchronous PAUSE command to place a pause of 500ms  at
the  begining of a paragraph the following command sequence would  be
used:
       Text of Paragraph 1.
       [:synch :pause 500]  Text of Paragraph 2.

COMMAND ERRORS.
If  an incorrect syntax is sent in a command, the closing bracket may
be  ignored as it might be considered part of the illegal string.  To
help  avoid  this  situation,  set the  [:  error  speak  on]  during
development. If a flush occurs in the middle of processing a  command
string,  it will report an error. Therefore, not all reported command
errors represent a problem.

Speech Control commands.
        The  following is an alphabetized list of the speech  control
commands for DECtalk. Each entry consists of (a) Function:  what  the
command is supposed to accomplish; (b) Command: the text you type  in
to  tell  DECtalk what to do. All commands begin with a "[:" and  end
with a "]".  Any unique substring of the command is valid, e.g., [:ra
180]  is  equivalent to [:rate 180], (:co is sufficient  for  [:comma
pause],  and  so  on.    (c) Options:  (d) Parameters:  the  required
parameters  for  those  options;   (e)  Default;  (f)  Examples:  (g)
Description: a non-formal description of what the command does  along
with  examples where pertinent.

FUNCTION:                             COMMA PAUSE.
COMMAND:                              [:COmma DD].
OPTIONS (XX):                         None.
PARAMETERS (DD):                      Pause time increment in.
                                       milliseconds.
                                      Min -40.
                                      MAX  +30000.
DEFAULT:                              160 ms.
EXAMPLES:                             [:comma 250].

DESCRIPTION:
Comma  pause may be incremented and decremented. [:cp 0]  resets  the
comma pause to its default state (approximately 160 ms.) Comma pauses
can  be incremented by up to 30000ms and decremented by -40 ms.)  All
values outside legal range will default to the nearest legal values.
Note:  Comma pauses may be lengthened or shortened only by the  above
method. Angle bracket notation using durations may no longer be used.

FUNCTION:                             DEFINE VOICE.
COMMAND:                              [:DEfine  XX DD (SAVE)].
                                      [:DV XX DD (SAVE)].
OPTIONS (XX):                         See the Technical Reference.
                                      Manual.
       (SAVE)                         SAVE  saves the specified.
                                      parameters into the VAL.
                                      voice.
PARAMETERS (DD):                      See the Technical Reference
                                      Manual.

DEFAULT:                              Parameters for Paul Voice.
EXAMPLES:                             [:dv ap 120].
                                      [:dv pr 130 SAVE].

DESCRIPTION:
This  command  allow the modification of  speech parameters  such  as
pitch range (for a greater excitement level), head size (for a deeper
voice)  and the like. XX is a mnemonic which stands for an acoustic
parameter. DD is some decimal value of the parameter.
NOTE:  These commands can cause the DECtalk to overload. Their  use
is highly discouraged except by persons trained in speech synthesis.
FUNCTION:                             DIAL TONES.
COMMAND:                              [:DIal "D,DDD-DDD-DDD"].
OPTIONS (XX):                         None.
PARAMETERS  (DD):                     String of dial characters  (0-9,
                                      A,B,C,D,#,*,(comma))
                                      bounded by quotation marks.
DEFAULT:                              None.
EXAMPLES:                             [:dial "1,508-555-1212"].

DESCRIPTION:This  command generates tones called Dual  Tone  Multiple
Frequency  (DTMF) Tones or Touch-Tonestm. The tones  are  the  touch-
tones  for  0-9, *, #, "," (comma) and uppercase A,  B,  C,  D   (for
certain  types of  handsets only).  The comma can be used to generate
a 2-second  pause. Quotation marks are required around the digits and
dashes  should  be used where appropriate in telephone  numbers.  The
dial tone command is asynchronous.
Note:  The  DTMF generated by this command are the same  tones  which
are used to dial a telephone. However, tone levels may not always  be
adequate to signal switch DTMF detectors and thus this is not  always
reliable. You can adjust volume using the [:vs XX]  command.

FUNCTION:                             ENABLE.
COMMAND:                              [:ENable].
OPTION (XX):                          None.
PARAMETERS (DD)                       None.
DEFAULT:                              On.

DESCRIPTION:
Enables speaking after a selective text flush. This command is needed
only  after a flush text command or if a TSR call of FLUSH_SPEECH  is
used.

EXAMPLE:
FUNCTION:              ERROR.
COMMAND:               [:ERror XX].
OPTIONS (XX):
       Ignore :        Ignore all errors.
       TExt :          Send errors back as text strings of the form:
                       [:error <type>]
       Escape :        Send errors back as escape sequences of the
form:
                        ESC P 0 ; 300 ; <error code>
       Speak : Speak error string in current voice, rate, etc.
       TOne :  Generate error tone.

PARAMETERS:                           None.
DEFAULT:                              Ignore.
EXAMPLE:                              [:error sp].
DESCRIPTION:
This  command  sets the error mode for the module.  This  command  is
useful for debugging in an application development setting.
FUNCTION:                             FLUSH.
COMMAND:                              [:Flush XX DD].
OPTIONS (XX):
       ALl :  Flush all text. (see the flush_text TSR command above)
       Until : Flush until the specified index mark is found.
       Mask : Flush until mask and index bit coincide.
       AFter : Flush all text after index mark.
       Speech : Flush all speaking but continues to process
       commands. This mode is ended by the enable ([:enable])
       command.
PARAMETERS (DD):                      Index mark value or mask
                                      value.
DEFAULT:                              None.
EXAMPLES:                             [:flush after 193].
DESCRIPTION:
This  command allows speech to be discarded. All pending but unspoken
text is lost, including index markers that may have been sent by  the
PC. This  command stops speech, even if DECtalk is  in the middle  of
a sentence. Speech stops and all internal buffers are re-initialized.
The flush command is asynchronous.
Note: If a Ctrl K is used to flush text while in phonemic mode,   the
text  will  be  flushed but it may result in an  "error  in  phoneme"
message.
FUNCTION:                             INDEX.
COMMAND:                              [:Index XX DD].
OPTIONS (XX):
       Mark:   Insert mark into text at current position.
        Reply:  Insert mark and reply when encountered.  (reply  =ESC
P 0 ; 31 ; DD z)
        Query:  Respond with last encountered index.   (reply =ESC  P
0 ; 32 ; DD z)
PARAMETERS (DD):                      Index Mark Value.
                                      Index Reply Value.
                                      Index Query Value.
RESPONSE:
DEFAULT:                              None.
EXAMPLES:                             [:index reply 123].
DESCRIPTION:
Text  sent  to  DECtalk  can  contain index  marks.  The  application
"listens"   to  the  spoken text (by reading the value  of  the  last
index) to  determine how much transmitted text has been spoken. Index
markers  are  truly  marks;  they do not modify  heuristics  or  word
pronunciations in any way.  The mark sequence inserts an index marker
(flag)  in  the  text  stream sent to DECtalk. Mark  simply  marks  a
position  in  the text. Reply marks a position, but also has  DECtalk
inform  the  PC   when the index is spoken. When DECtalk  speaks  the
reply  sequence, it sends a reply to the PC.  Note: The  Index  Reply
will  always  be the same number as the Index.  Index Query  requests
DECtalk  to  reply to the PC with the last index marker spoken  (that
is,  the last portion of spoken  text that had an index marker).   It
will send back [:index xxx].
FUNCTION:                             LOG.
COMMAND:                              [:LOg XX YY].
OPTIONS (XX YY):
       XX:
               Text            Log all text except escape sequences.
               Phonemes        Log converted phonemic text.
       YY:
               ON              Absolute.
               OFf             Enable mode.
               Set             Disable mode.
PARAMETERS :                          None.
DEFAULT:                              Off.
EXAMPLES:                             [:log text on].
DESCRIPTION:
This commmand sets text logging modes for the module. The log command
controls DECtalk logging of input text. This  command allows  DECtalk
to  send  the phonemes corresponding to the  input text back  to  the
PC.  The PC must be prepared to receive the characters when  they are
sent, or they will be lost
FUNCTION:                             MODES.
COMMAND:                              [:Mode XX YY].
OPTIONS (XX YY):
       XX:
               Math    Change interpretation of selected symbols
               Europe  Select European monetary pronunciation
               SPell   Spell all words
               Name    Pronounce all proper names (see also
               [:pronounce name])
               Citation        Say certain function words
                       differently when said in isolation
                       (Default ON)
               Homograph       Reserved for Future Use
       YY:
               ON      Absolute.
               OFf     Enable mode.
               Set     Disable mode.
PARAMETERS (DD):                      None.
DEFAULT:                              Off (except Citation).
EXAMPLES:                             [:mode spell on].

DESCRIPTION.
When  mode  is set to Europe, "," is a separator between the  integer
and  fraction  part  of a number and "."  is a separator  between  3-
digit   blocks.  Ex:  1.255  (US) = 1,255 (Europe);  125,873  (US)  =
125.873  (Europe).   1  =  set;  2 =  clear.   Math  takes  ambiguous
characters   and   pronounces   them  with   mathematical   meanings.
Specifically, the following characters are treated differently:
       Character       Clear (Off)            Set (On).
       +               plus                   no change).
       -               dash                   minus.
       *               asterisk               multiplied  by.
       /               slash                  divided by.
       xxE-xx          (spelled)              (scientific notation).
       ^               carat                  to the power of.
       <               left angle bracket     less than.
       >               right angle bracket    greater than.
       =               equals                 (no change).
       %               percent                (no change).
       .               period                 point.

Mode  NAME allows uppercase words which occur in non sentence initial
position to be interpreted as special cases and pronounced as names.
Note:  Do not enable Mode Name except when pronouncing lists of names
only.  Mode  Name will interpret any uppercase word as a  name.  When
finished, make sure that this mode is set to OFF.  For the occasional
use of this utility,  use the [:pronounce name] command (below).
NOTE: Mode commands are asynchronous. See the note on [:SYNCH]
FUNCTION:                             PAUSE.
COMMAND:                              [:PAuse DDD].
OPTIONS (XX):                         None.
PARAMETERS (DD):                      Pause time in ms.
                                      0 = forever.
DEFAULT:                              N/A.
EXAMPLES:
                                      [:pause 200].
DESCRIPTION:
This  command pauses the audio output of the module. Any pending  but
unspoken text is retained, including index markers that may have been
sent by the PC.  The user now has the option of flushing all text  or
resuming  speech  where  it  was left  off.   The  pause  command  is
asynchronous.  It  must  be  used in conjunction  with  the  [:SYNCH]
command to have its effect take palce at a certain place in the  text
e,g. [:Pause 500 :Synch]Pause here in the text.
FUNCTION:                             PERIOD PAUSE.
COMMAND:                              [:PEriod  DDD].
OPTIONS (XX):                         None.
PARAMETERS (DD):                      Increment Pause time in
                                      milliseconds.
                                      MIN -380.
                                      MAX +30000.
DEFAULT:                              640 ms.
EXAMPLES:                             [:pe 250].
DESCRIPTION:
Period  pause may be incremented and decremented. [:pp 0] resets  the
period  pause  to  its default state (approximately 540  ms.)  Period
pauses  can be incremented by 30000 ms. and decremented by -380  ms.)
All   values  outside legal range will default to the  nearest  legal
values.
Note:  Period pauses may be lengthened or shortened only by the above
method. Angle bracket notation using durations may no longer be used.
FUNCTION:                      PHONEME INTERPRETATION.
COMMAND:                       [:PHoneme XX YY ON/OFF].
OPTIONS (XX YY ON/OFF):
       XX:
               ASky    Reserved for Future Use.
               ARpabet Set phonemic interpretation to arpabet.
                        phonemic alphabet.
       YY:
               SPeak   Speak encountered phonemes.
               SIlent  Do not speak encountered phonemes.
       ON/OFF:
               ON      Set phonemic interpretation on.
               OFf     Set phonemic interpretation off.
PARAMETERS (DD):                      None.
DEFAULT:                              Off.
EXAMPLES:                             [:ph ar sp on].
DESCRIPTION:  When set, this command allows everything within  square
brackets to be interpreted as phonemic text (unless [ is followed  by
:  in  which case it is interpreted as a command). When phonemicizing
text, simply put legal phoneme strings in square brackets. This  will
allow for the preferred pronunciation of a word or phrase.   This  is
an  extremely   important function since it sets the  characters  "["
and  "]" as phoneme delimiters. This means that when this command  is
set,  all  text  and characters which appear between square  brackets
will  be interpreted as phonemic text and will be pronounced as such.
This  is  useful if you do not wish to turn this on but wish to  have
something   read  phonetically. For example, to  say  the  word  red,
simply put the phonemic string [r'ehd] in the text.  Default for this
mode is OFF.
Note:  It   is important to make sure that you close square  brackets
after  phonemic text when this command is set. Otherwise,  if  normal
text appears in square brackets, speech will sound garbled. Also,  in
previous versions of DECtalk, square brackets were nested. This is no
longer  the case. One square bracket is sufficient to close  phonemic
mode.  It  is sometimes useful to  begin a  text file with  a  closed
square  bracket  ("]") to ensure that text will  not  be  interpreted
phonemically.  Also,  the command sequence   consisting  of  an  open
square bracket folowed by a colon ("[:") is always interpreted as the
beginning  of  a  voice command and cannot be interpreted  literally.
Default  for  phonemic mode is OFF and it must  be  turned  on  by  a
special command.
FUNCTION:                             PITCH CHANGE.
COMMAND:                              [:PItch DD].
OPTIONS (XX):                         None.
PARAMETERS (DD):                      Pitch delta  in Hz.
DEFAULT:                              35Hz.
EXAMPLES:                             [:pi   45].
DESCRIPTION:
Allows characters  or  words  specified  in the typing table   to  be
pronounced   with  a  pitch  delta  change. Useful  for  differenting
capitalized letters from lower case.
FUNCTION:                             PRONOUNCE NAME.
COMMAND:                              [:PRonounce XX]Name.
OPTIONS (XX):
       Name    Proper name.
       Primary.
       Alternate.
PARAMETERS (DD):                      None.
DEFAULT:                              Off.
EXAMPLES:                             [:pron name] Iacocca.
                                      [: pron  alternate].
DESCRIPTION:
DECtalk is now capable of pronouncing proper names with a high degree
of  accuracy.  This  should  be a great help  to  applications  which
require  peoples names and addresses to be pronounced correctly.  The
command  is  placed  in  front of the  proper  name  that  is  to  be
pronounced.
FUNCTION:                             PUNCTUATION.
COMMANDS:                             [:PUnct XX].
OPTIONS (XX):
       None            No puncuation spoken; all punctuation treated
                       as text breaks.
       Some            Standard DECtalk punctuation pronunciation
       All             All punctuation is spoken.
PARAMETERS (DD):                      None.
DEFAULT:                              [:punc some].
EXAMPLES:                             [:pu  n].
DESCRIPTION:
There   are  three  modes  of  punctuation  pronunciation.   (1)   No
punctuation  is  spoken;  (2)  only non  clause-final  puncuation  is
spoken;  (3)  all  punctuation is spoken. The last  function  may  be
useful  in proofreading as well as in those applications when special
characters are encountered as in computer programs and the like.  The
default is that no punctuation is spoken.
Note:  When the [:punc none] command is used, no punctuation will  be
pronounced. This will affect dollar amounts ($3.25), percentages (5%)
and similar sequences normally processed by special rules.
FUNCTION:                             RATE SELECTION.
COMMAND:                              [:RAte DD].
OPTIONS:                              None.
PARAMETERS (DD):                      Rate in words per minute.
                                      MIN  - 75.
                                      MAX  - 650.
DEFAULT:                              180 wpm.
EXAMPLES:                             [:ra 400].
DESCRIPTION:
The speaking rate in DECtalk can be selected from 75 words per minute
to  650  words per minute. All values outside the range of 75 to  650
will  default to the nearest legal value. Therefore, if you select  a
speaking  rate of [:ra 880] or 880 words per minute, it will  default
to the nearest legal value or 650 words per minute.
FUNCTION:                             SAY MODE.
COMMAND:                              [:SAy XX].
OPTIONS (XX):
       Clause  Speak on end of clause.
       Word    Speak on end of word.
       LEtter  Speak on end of letter.
       LIne            Speak on end of line.
PARAMETERS (DD):                      None.
DEFAULT:                              [:say clause].
EXAMPLES:                             [:sa  w].
DESCRIPTION:
In  DECtalk,  each clause, word, or letter can be spoken as  entered.
In  word and letter mode, DECtalk does not need to wait for a  clause
terminator  to  begin  speaking.  This  command  interacts  with  the
speaking  rate  command so that you can set both  speaking  rate  and
speak word or letter mode for the optimal output. Word mode acts like
letter mode except text is spoken a word at a time.  A white space or
equivalent  after  a  character or string of characters  causes  that
string  to  be spoken.  This mode interacts with speaking  rate  such
that  you can increase or decrease the rate at which letters or words
are  spoken. For example, for rapid feedback of what is being  typed,
try  letter  mode with a rate of 400 wpm.  In clause  mode,  speaking
starts  when  the  PC  is  sent a clause terminator  (period,  comma,
exclamation point, or question mark followed by a white space).  This
is the normal mode where text is spoken a phrase, clause, or sentence
at a time. This mode is the default mode.
Note:  In  [:say letter] mode, the "[" character will be spoken  only
after the next character is typed since DECtalk needs to know whether
or not this is the beginning of a new command.
FUNCTION:                             RESUME.
COMMAND:                              [:REsume].
OPTIONS (XX):                         None.
PARAMETERS (DD):                      None.
DEFAULT:                              N/A.
EXAMPLES:                             [:re].
DESCRIPTION:
This  command  allows speech to be resumed where [:PAUSE]  left  off.
Any  pending  but unspoken text is retained, including index  markers
that may have been sent by the PC.  This command is asynchronous.
FUNCTION:                             SYNCHRONIZATION.
COMMAND:                              [:SYnc].
OPTIONS (XX):                         None.
PARAMETERS (DD):                      None.
DEFAULT:                              N/A.
EXAMPLES:                             [:sy :pause 500].
DESCRIPTION:
The application program can send data to DECtalk faster than  DECtalk
can  speak  it.  If  the  user must carry on  a  dialogue  with   the
application  program,  the  application program should  know  whether
DECtalk has finished speaking the text sent to it. SYNC provides this
coordination between the application program and DECtalk speech. When
the PC sends SYNC, DECtalk finishes speaking  any pending text before
processing  the  next command.. Therefore, the user hears  a  message
before  any  other action starts.  Note that SYNC acts  as  a  clause
boundary, the same as a comma, period, exclamation point, or question
mark  and  a  white  space. SYNC does not reply  when  processing  is
complete.  However, you can arrange to get a reply by  following  the
SYNC  command with an INDEX QUERY command? [:synch] can also be  used
to synch otherwise asynch commands. For example, the PAUSE command is
asynchronous  but  if  it was desired to have a  pause  occur  for  a
specified  amount of time at a given place in the spoken  text,  then
the  following  syntax could be used, [:Pause 500  :SYNCH]Pause  here
before you pseak this text.
FUNCTION:                             TIMEOUT.
COMMAND:                              [:TImeout DD].
OPTIONS (XX):                         None.
PARAMETERS (DD):                      Timeout in seconds.
DEFAULT:                              5 Seconds.
EXAMPLES:                             [:timeout 4].
DESCRIPTION:
This  command  sets  the buffer flush timeout value.   DECtalk  is  a
clause  based sythnesizer and therefore looks for a clause terminator
before  starting  to speak. This function allows the  setting   of  a
timer which will cause text in the buffer without a clause terminator
to be spoken  after the specified timeout.
FUNCTION:                             TONE.
COMMAND:                              [:TOne DD, dd].
OPTIONS (XX):                         None.
PARAMETERS (DD):
       DD:     Tone Frequency in Hertz.
       dd:     Tone Duration in milliseconds.
EXAMPLES:                             [:tone 500,500].
DESCRIPTION:
This command generates sounds of different frequencies and lengths
depending upon the parameters you set. This command allows you to
make a wide variety of sounds for notification, warning, and margin
bell, for example. This may be useful when someone wishes to work in
a quiet environment without using the PC's speaker.
FUNCTION:                             TYPING  TABLE.
COMMAND:                              [:TYpe DD (:) PHONE].
OPTIONS (XX):                         None.
PARAMETERS (DD):
       DD      Keyboard Character codes.
       :       Apply pitch shift.
       PHONE   1-char phonemic alphabet (See Appendix B).
DEFAULT:
EXAMPLE:                              [:TY  32  :hxl'o].
DESCRIPTION:
Provides  the  capability to modify the built-in  typing  table  with
letters  or  words  for  specific  keyboard  codes.  The  1-character
phonemic alphabet is listed in Appendix B. The function also provides
the  capability  to specify if the default (35Hz)  or  defined  pitch
shift  should be applied  to the entry.  The [:Pitch DD]  command  is
used to define the pitch  delta.
FUNCTION:                             VOICE SELECTION.
COMMAND:                              [:Name X].
                                      [:NX].
OPTIONS (X):
        Paul , Betty , Harry , Frank , Dennis , Kit , Ursula , Rita ,
Wendy,  Val.
PARAMETERS:                           None.
DEFAULT:                              Paul voice.
                                      Val = Paul.
EXAMPLES:                             [:name harry].
                                      [:nh].
DESCRIPTION:
[:name  X] allows voices to be changed to one of 9 hard-coded  voices
or  to  a special definable voice. X represents the mnemonic for  one
of the voices: P = Paul, H = Harry, F = Frank, D = Dennis, B = Betty,
U  =  Ursula, R = Rita, W = Wendy, K = Kit. and V = Val.  The default
voice is Paul. The parameters of any one voice may be changed by  the
define voice [:dv] command.
FUNCTION:                             VOLUME.
COMMANDS:                             [:VOlume XX DD].
OPTIONS (XX):
       Set:    Set the volume to the desired level.
       Up:     Increase the volume by the desired amount.
       Down:   Decrease the volume by the desired amount.
PARAMETERS (DD):                      Volume or delta volume.
DEFAULT:                              5.
EXAMPLES                              [:volume up 3].
                                      [:vo 20].
DESCRIPTION:
Volume in DECtalk can be controlled by a manual volume control on the
speaker  or by a software-controlled volume setting on the PC  board.
The  volume command controls the setting on the PC board. It sets the
speaker  volume in increments from 0 to 99. Increments or  decrements
of  10 to 20 cause perceptible increase or descrease in volume.   The
default  volume  level  is 5. [:volume set] is an  absolute  command;
[volume  up] and [volume down] are relative commands which  increment
or  decrement the original value respectively. The volume command  is
asynchronous.
Note:  It  is recommended that the normal operation be set below  95.
Volume  above 95 would be excessively loud and an overload  condition
could  result.  No  damage will occur, but the  unit  could  go  into
overload  protection mode. The audio output contains  self-protection
circuitry which guards against shorts or overloads. This will  result
in  reduction or cessation of output and may take several seconds  to
recover  after  the  short  or  excessive  overload  is  encountered.
Thisdelayed recovery is normal.
Note:  The  command [:lo] used in earlier versions of DECtalk  is  no
longer  used  and  has  been replaced by the G5 parameter  used  with
[:define voice]. To adjust the volume on DECtalk other than using the
volume  control knob on the speaker, it is recommended that  you  use
the [:volume] command.

DECTALK TSR Commands.
        A  seperate description page is provided for each DECtalk TSR
command.  The format is as follows: COMMAND: The command name,  CODE:
The  command  function  code, FUNCTION: a brief  description  of  the
commands  function; TYPE: The type of command e.g.  Status,  Control,
etc.;  Description:  A  more  detailed description  of  the  commands
function  and  use; Example: An example using  the  command;  Related
Commands: Any commands with related or reciprocal functionality.
COMMAND        Code    FUNCTION.
BUFF_FREE      0x1d    Bytes remaining in the input buffer.
TYPE.
Status.
Description.
Provides the number of bytes remaining in the DECtalk input buffer.
Example.
Related Commands.
COMMAND        Code    FUNCTION.
BUFF_USED      0x1f    Input buffer bytes used.
TYPE.
Status.
Description.
Provides   the  number  of bytes  being used  in  the  DECtalk  input
buffer.
Example.

Related Commands.
COMMAND        Code    FUNCTION.
DECTALK_EXIT   0x01    Remove the TSR.
TYPE.
Control.
Description.
       Remove the DECtalk TSR, DT_DRIV, from the PC memory and
restore things to their original state.
Example.

Related Commands.
COMMAND        Code    FUNCTION.
DECTALK_ID     0x01    ID for INT2F multithreaded interrupt.
TYPE.
Status.
Description.
ID to pass in the .ah to the multi-threaded interrupt (INT2F)
Example.
       RB.ah = DECTALK_ID.
Related Commands.
COMMAND        Code    FUNCTION.
DECTALK_RESET  0x27    Reset DECtalk.
TYPE.
Control.
Description.
Resets the DECtalk PC module.
Example.

Related Commands.
COMMAND        Code    FUNCTION.
DECTALK_TEST   0x02    Test for DECTalk TSR.
TYPE.

Description.
Returns a TSR_SUCESS if a DECtalk TSR is installed.
Example.
Related Commands.
COMMAND        Code    FUNCTION.
DIGITIZED_DATA 0x1a    Send Digitized Data.
TYPE.
Control.
Description.
Same as a SEND_BUFF but with digitized data instead of text data.
Example.
         digitize (buffer, size of (buffer))
         ,
         ,
         ,
         digitize (unsigned char_far *
Related Commands.
COMMAND        Code    FUNCTION.
DIGITIZED_MODE 0x18    Digitized Mode.
TYPE.
Mode.
Description.
Put DECtalk into digitized speech mode.
Example.

Related Commands.
TEXT_MODE.
DIGITIZED_DATA.
COMMAND        Code    FUNCTION.
FLUSH_CHAR     0x2a    Flush pending and speak character.
TYPE.
Control.
Description.
        Flushes  any  speech  pending in the  DECtalk  and  says  the
character.  This provides a rapid flush-and-speak-key function.  This
function  uses a built-in translation table to convert characters  to
the   sound  equivalence,  and  sends  the  result  directly  to  the
synthesizer itself, bypassing significant pieces of the DECtalk code.
.  In addition, a means of assigning pitch to a character (such as an
upper-case character) has been provided.
The  typing  table  itself  may  be modified  so  that  keys  can  be
redefined. A global delta pitch command is also provided to  set  the
change in pitch. Its default is a 35 hertz increment. The syntax  for
changing the typing table is:
               [:type (character in decimal) (1-character phonemics]
For  example, to change the space-bar character from default  to  say
"hello"  with elevated pitch enter the following command.  The  colon
character  specifies elevated pitch (normal pitch plus 35Hz  for  the
default and the apostrophe before the vowel indicates stress.)
               [:type 32 :hxl'o]
The  phonemics  are  represented by a  special  1-character  phonemic
alphabet described in Appendix C.
Example.
           case 't':   /* Typing demo.  uses the flush_char function */
             printf("%s\n",typing);
            if (spoken) sendb(typing,sizeof(typing));
            sendb(rate,sizeof(rate));       /* change speaking rate */
                do{
                   inchar = (char)_getch();     /* get character from
keyboard until an '*' */
                   flush_char(inchar) /* used in typing mode to speak faster
*/

flush_char(unsigned char fchar)
{

     RB.ah = DECTALK_ID;
     RB.al = 0x2A;
     RB.bl = fchar;
     RW.si = 0;
     _int86(0x2f, &regs, &regs);
     return(1);
}

Related Commands.
COMMAND                Code    FUNCTION.
FLUSH_SPEECH           0x1b.
TYPE.
Control.
Description.
        Flush  speech but process all commands until an [:enable]  is
seen.  Then  start speaking again. This command is  slower  than  the
flush_text command.
COMMAND        Code    FUNCTION.
FLUSH_TEXT     0x17    Flush pending text.
TYPE.
Control.
Description.
        Flushes  all pending text in the DECtalk buffer. This  is  an
asynchronous  flush and cannot guarantee to flush every character  in
process,  if  sending buffers. This will always work, however,  if  a
flush  is also then inserted in the text stream. The stream flush  is
recommended when it can be used. This function is provided so that if
the  DECtalk is I/O bound with large text buffers, it can be  flushed
quickly,  asynchronously to the text stream.  (See [:flush  all]   in
the Speech Control Commands table).
Example.
   case 'f':                          /* Stop speaking and FLUSH */
              sendb (testb,sizeof(testb));
              flush();                        /* asynchronously flush
the dectalk */
              break;


flush()
{
     do{
     RB.ah = DECTALK_ID;
     RB.al = FLUSH_TEXT;
     RW.si = 0;
      _int86(0x2f, &regs, &regs);
     }while(regs.x.ax == TSR_BUSY || regs.x.ax == TSR_RETRY );
     return(1);
}

Related Commands.
[:flush all].
COMMAND        Code    FUNCTION.
GET_BUFF       0x0b    Get a character buffer.
TYPE.
Control.
Description.
        Gets  a  buffer  of information from the DECtalk.  Assumes  a
fixed  buffer size of 256. The segment address is in the .dx and  the
offset  address  is in the .bx. The segment and offset passed in  the
.dx   and   .bx  registers  is  a  pointer  to  a  structure   called
DECTALK_CHAR_BUFF found in the DTTSR.H file. It contains a count  and
a pointer to the actual buffer (256 bytes  maximum).
Example.

Related Commands.
COMMAND        Code    FUNCTION.
GET_CHAR       0x09    Get a character.
TYPE.

Description.
        Gets  a  character  from DECtalk. Get a character  may  cause
unpredictable results if the TSR does not have a character.
Example.
Related Commands.
COMMAND        Code    FUNCTION.
GET_STATUS     0x03    Get current status.
TYPE.
Status.
Description.
Obtain the comm status information  from the dx registers.
Example.

Related Commands.
COMMAND        Code    FUNCTION.
IMMD_COMMA     0x23    Immediate comma pause.
TYPE.
Control.
Description.
       Change the comma pause at the next clause boundary.
Example.

Related Commands.
COMMAND        Code    FUNCTION.
IMMD_PERIOD    0x22    Immediate Period Pause.
TYPE.
Control.
Description.
       Change the period pause value at next clause boundary.
Example.

Related Commands.
COMMAND        Code    FUNCTION.
IMMD_RATE      0x21    Immediate Speaking  Rate.
TYPE.

Description.
       Change the speaking rate at next clause boundary.
Example.

Related Commands.
COMMAND        Code    FUNCTION.
IMMD_VOICE     0x20    Immediate Voice Selection.
TYPE.
Control.
Description.
Change the voice at next clause boundary.
Example.
Related Commands.
COMMAND                Code    FUNCTION.
IMMD_RATE_DELTA       0x29.
TYPE.

Description.
Change the speaking rate by a delta  at the next clause boundary.
Example.

Related Commands.
COMMAND        Code    FUNCTION.
INSTALL_CHECK  0x00    TSR Installation Check.
TYPE.
Status.
Description.
Checks to see if the DECtalk TSR is installed. Returns  INSTALLED  in
the .si if true.
Example.
/* ...check to see if the tsr is already installed, if so then just
print the switches and exit.  */
       parse_switch(argc,argv);
               RB.ah = DECTALK_ID;
               RB.al = INSTALL_CHECK;
               RW.si = INSTALL_CHECK;
               _int86(0x2f, &tsr_regs, &tsr_regs);
               if (RB.al == INSTALLED)
                       {
                       printf("\nDECtalk tsr already installed");
               usage();
                       }
Related Commands.
INSTALLED.
COMMAND        Code    FUNCTION.
INSTALLED      0xFF    Board Installation Status.
TYPE.
Status.
Description.
       Returned in the .al
Example.
See INSTALL_CHECK.
Related Commands.
INSTALL_CHECK.
COMMAND        Code    FUNCTION.
IO_PRIORITY    0x26    Set I/O Priority.
TYPE.
Control.
Description.
        Set  the  comm  task inside DECtalk to the highest  priority.
This  results  in much faster indexing which should be the  preferred
setting in most cases. The  .cx must be set to 1.
Example.
io_prior()
{
     do{
     RB.ah = DECTALK_ID;
     RB.al = IO_PRIORITY;
     RW.cx=1;
     RW.si = 0;
      _int86(0x2f, &regs, &regs);
     }while(regs.x.ax == TSR_BUSY || regs.x.ax == TSR_RETRY );
     return(1);
}

Related Commands.
COMMAND        Code    FUNCTION.
LAST_INDEX     0x25.
TYPE.
Control.
Description.
        Return the last seen index as an int  in the .c  register. It
returns  a  TSR_RETRY if it has not processed any indexes  since  the
last request.
Example.
          case 'i':             /* see last indexed processed */
        count=get_index();              /* get index */
         if (count == -1 )
             {
                 printf("%s",nonew);
             if (spoken) sendb(nonew,sizeof(nonew));
             }
             else
            {
            num[0]=(char)count;
            num[1]='\0';
                printf("%s%d",indexnum,count); */
         if (spoken) sendb(indexnum,sizeof(indexnum));   /* print and
say index */
          if (spoken) sendb(num,sizeof(num));
            }
                break;

get_index()
{
     do{
     RB.ah = DECTALK_ID;
     RB.al = LAST_INDEX;
     RW.si = 0;
   _int86(0x2f, &regs, &regs);
     }while(regs.x.ax == TSR_BUSY );
     if ( regs.x.ax == TSR_RETRY )
          {
          return(-1);
          }
     if ( regs.x.ax == TSR_FAILURE )
          printf("tsr get_index failed");
     return(regs.x.cx);
}
Related Commands.
COMMAND        Code    FUNCTION.
PAUSE_OUTPUT   0x15    Pause speech output.
TYPE.
Control.
Description.
Pauses  the output of the DECtalk. Speech can be resumed  by  issuing
the RESUME_OUTPUT command.
Example.
stopit()
{
     do{
     RB.ah = DECTALK_ID;
     RB.al = PAUSE_OUTPUT;
     RW.si = 0;
      _int86(0x2f, &regs, &regs);
     }while(regs.x.ax == TSR_BUSY || regs.x.ax == TSR_RETRY);
     return(RW.ax);
}

Related Commands.
RESUME_OUTPUT.
COMMAND                        Code   FUNCTION.
Reserved                       0x07   /* allocate memory */
Reserved                       0x0c
Reserved                       0x0d
Reserved                       0x0e
Reserved                       0x0f
Reserved                       0x10
Reserved                       0x11
Reserved                       0x12
Reserved                       0x13
Reserved                       0x14
TYPE.
Reserved.
Description.
Reserved commands.
Example.
Related Commands.
COMMAND        Code    FUNCTION.
RESUME_OUTPUT  0x16    Resume Speaking.
TYPE.
Control.
Description.
Resume speaking after a pause.
Example.
    case 'c':          /* Resume speaking after a stop.*/
              resume();
              break;


resume()
{


     do{
     RB.ah = DECTALK_ID;
     RB.al = RESUME_OUTPUT;
     RW.si = 0;
     _int86(0x2f, &regs, &regs);
     }while(regs.x.ax == TSR_BUSY || regs.x.ax == TSR_RETRY);
     return(RW.ax);

}
Related Commands.
PAUSE_OUTPUT.
COMMAND        Code    FUNCTION.
SEND_BUFF      0x0a    Send buffer.
TYPE.
Control.
Description.
        Send a character buffer.  Assumes a fixed buffer size of 256.
The  segment address is in the .dx and the offset address  is in  the
.bx. The segment and offset passed in the .dx and .bx registers is  a
pointer  to a structure called DECTALK_CHAR_BUFF found in the DTTSR.H
file.  It  contains a count and a pointer to the actual  buffer  (256
words  maximum). On return, the count is set to the number  of  bytes
actually tranferred.
Example.
 case 'l':     /* Send a file to the DECtalk to read*/
               printf("%s\n",name);                /* Prompt */
               if (spoken) sendb(name,sizeof(name));
               sendb(sayl,sizeof(sayl)-1);

sendb(unsigned char __far *thebuf,int count)
{
     struct  dectalk_char_buff   cb;
     struct  dectalk_char_buff   _far *cbp;
     cb.buff=thebuf;
     cb.count=count;
     cbp = &cb;

     do{
     RW.bx = FP_OFF(cbp);  /* put offset to char buff struct in bx */
     RW.dx = FP_SEG(cbp);  /*put segment in dx */
     RB.ah = DECTALK_ID;
     RB.al = SEND_BUFF;
     RW.si = 0;
      _int86(0x2f, &regs, &regs);
     }while (regs.x.ax == TSR_BUSY || regs.x.ax == TSR_RETRY);
     return(RW.ax);

}

Related Commands.
COMMAND        Code    FUNCTION.
SEND_CHAR      0x08    Send a character.
TYPE.
Control.
Description.
       Send the character in the .bl to the DECtalk.
Example.
send_char(unsigned char schar)
{

     do {
     RB.ah = DECTALK_ID;
     RB.al = SEND_CHAR;
     RB.bl = schar;
     RW.si = 0;
      _int86(0x2f, &regs, &regs);
     }while( regs.x.ax == TSR_BUSY || regs.x.ax == TSR_RETRY);
     return(RW.ax);
}

Related Commands.
COMMAND        Code    FUNCTION.
TEXT_MODE      0x19    Text Mode.
TYPE.
Mode.
Description.
Puts  the DECtalk into text-to-speech mode. This is the default mode.
It  also  has to be issued if the DECtalk had previously been  placed
into the digitized mode.
Example.
Related Commands.
DIGITIZED_MODE.
COMMAND                Code    FUNCTION.
VOLUME_DOWN            0x05    Decrease volume.
TYPE.

Description.
         Decrease the volume by the amount specified in the .bl.
Example.
See VOLUME_UP.
Related Commands.
VOLUME_UP.
COMMAND        Code    FUNCTION.
VOLUME_UP      0x04    Increase volume.
TYPE.
Control.
Description.
        Increase  the volume by the amount specified in .bl  Values??
range??**
Example.
up_vol()
{
     do {
     RB.ah = DECTALK_ID;
     RB.al = VOLUME_UP;
     RB.bl=1;
     RB.dl=0;
     RW.si = 0;
      _int86(0x2f, &regs, &regs);
     }while(regs.x.ax == TSR_BUSY || regs.x.ax == TSR_RETRY);
     return(RW.ax);
}

Related Commands.
VOLUME_DOWN.
COMMAND        Code    FUNCTION.
VOLUME_SET     0x06    Set volume.
TYPE.
Control.
Description.
        Set  the volume to amount specified in  the bl . The range is
0-100 and the default value is 5.
Example.
      case 'v':         /* Set the volume to a specific level */
                printf("%s",invol);                       /* Prompt */
                if (spoken) sendb(invol,sizeof(invol));
                i=0;
                while ((chbuf[i] =  (char)_getch()) !='\r')
               {                                     /*Get input */
                   if (spoken) flush();   /*Flush speech if spoken. */
                   putchar(chbuf[i]);                 /* Echo input */
                   if (spoken) send_char(chbuf[i]); /* Audible echo */
                   send_char('\013');
                   i++;
                   }
                chbuf[i]='\0';
                _cputs("\r\n");
                vol=atoi(chbuf);             /* Convert to a number */
                if ((vol > 100) || vol<0)
               {                               /* Is input in range */
                   printf ("%s,%d\n",volset,vol);
                   if (spoken) sendb(volset,sizeof(volset));
                   break;
                   }
                set_vol(vol);                  /* Go set the volume */
                break;

Related Commands.
                                   
                                   
                              APPENDIX A.
                         APPLICATION DICTIONARY.
                                   
     DECtalk PC has memory allocated for a loadable dictionary. This
dictionary is useful in cases where (a) DECtalk makes an error in
pronounciation, or (b) the pronunciation of a string is unique to the
application.  For example, if the sequence n/cl should be pronounced
as "not cleared", then a user dictionary entry is obviously needed.
NOTE: To utilize the capabilities of the Application Dictionary
requires the abilty to convert words into their phonemic equivalent.
An analogy of this would be in most dictionaries where the phonemic
equivalent follows each word.
     To create and load a dictionary to DECtalk PC, you must do the
following:
     1. Create a dictionary table file using a text editor. The
     dictionary must be in the following format:
          (a) An entry must start at the first character of the line.
          Any space or illegal character as the first character of the
          line causes the line to be treated as a comment and it will
          therefore not be processed.
          (b) The syntax is:
               string to be pronounced  [phonemic substitution]
          Each line may be up to 256 characters long.
          (c) A grapheme (letter) string is comprised of legal
          graphemes. Legal graphemes are:
          
                    The letters A-Z and a-z,  the numbers 0-9 and
               select punctuation marks such as ", !, @, &, (, ), -,
          \,  and /.
          
                    NOTE: The punctuation mark characters may not be
          used at the beginning of the grapheme string.
          
               The grapheme string may be in either upper or lower
          case.
               Uppercase letters match only upper case; lowercase
          letters match either uppercase or lowercase.
          
          (d) The phoneme string is comprised of legal phonemes as
          listed in Appendix B, "DECtalk Phonemic Symbols".
               Phonemes are always in square brackets but may be in
          either upper or lower case.
          
               For example,  to make the word "coffee" be pronounced
          as "tea", you would enter the following:
          
                    coffee    [t'iy]
          
          2. After creating your dictionary table file, you can
          compile into a dictionary file by doing the following:
          
               (a). Compile the dictionary by typing a command in the
               following format:
     
                    userdic   input dictionary table   output
     dictionary file
     
          Input files have the default extension of .tab any extension
     can be used.
          Output dictionary files have the extension of .dtu and must
     have that extension for the loader to find the file correctly. If
     no output file is specified, a file with the same name and .dtu
     extension will be created for the output.
     
          For example: if your dictionary table is called mydict.tab,
     type:
               userdic   mydict
     In this case, the input dictionary table file mydict.tab would be
     compiled into a new output dictionary file called mydict.dtu.
     
          3. Load the user dictionary by switching to the DECtalk file
     subdirectory and typing:
     
               dt_load   output file.dtu
     
          For example, you would type:
     
               dt_load   mydict.dtu
     
          Your customized dictionary is now loaded and ready for use.
     
          Note: User dictionary lookups are done after suffix
     stripping occurs. Therefore, inflected and derived forms should
     also be pronounced according to the dictionary entry.
     
               Note: The User dictionary can not be loaded onto the
     board more than once without first restarting either the DECtalk
     PC or rebooting the machine.
     
          Warning: If your PC is powered down, you must reload the
     user dictionary at power-up. To have a user dictionary loaded
     each time the PC is powered up, the compiled file name should be
     added to the end of the DT_LOAD command string in the
     AUTOEXEC.BAT file.
                                   
                                   
                                   
                                   
                              APPENDIX B.
                       DECTALK PHONEMIC SYMBOLS.
                                   
Several  English phonemic alphabets are widely used today. The  Table
below  lists the phonemic alphabets that DECtalk uses, along with  an
example of each sound. Some dictionaries put the stress symbol  after
the vowel nucleus or  at the start of the syllable.  DECtalk requires
that the stress  symbol appear immediately before the vowel.
MULTI-CHARACTER ALPHABET -
For USER DICTIONARY and PHONETIC Modifications to TEXT
VOWELS
            Phonemic,         Example.
            Symbol.

               ey,              bake.
               aa,              Bob.
               iy,              beat.
               eh,              bet.
               ay,              bite.
               ih,              bit.
               oy,              boy.
               ow,              boat.
               uw,              lute.
               ah,              but.
               aw,              bout.
               yu,              cute.
               rr,              bird.
               ao,              bought.
               ae,              bat.
               uh,              book.
               ix,              kisses.
               ax,             about.

     CONSONANTS.
            Phonemic,       Example.
            Symbol.

               p,               pet.
               b,               bet.
               t,               test.
               d,               debt.
               k,               Ken.
               g,               guess.
               f,               fin.
               v,               vest.
               th,              thin.
               dh,              this.
               s,               sit.
               z,               zoo.
               sh,              shin.
               zh,              measure.
               ch,              chin.
               jh,              gin.
               m,               met.
               n,               net.
               nx,              sing.
               w,               wet.
               y,               yet.
               hx,              head.
               r,               red.
               l,               let.
               el,              bottle.
               en,              button.

Note:  the [em] phoneme in the early version of DECtalk is no  longer
valid but can be replaced with the sequence [axm].
       Allophones.
               rx,              oration (postvocalic r).
               lx,              electric (postvocalic l).
               q,               we eat (glottal stop).
               dx,              rider (flap d).
               tx,              Latin (glottalized t).

