


                                  G V o i c e

                              Version 1.10 Beta 1



                     Copyright (C) 1996-97 by Tamas Vincze
                              All rights reserved

                            Written by Tamas Vincze
                     (Also known as Gza of 220 Volt Team)



     INTRODUCTION
     ~~~~~~~~~~~~
     GVoice is  not a  stand-alone program.  It's a collection of programs
     such as GVoiceTSR or GVoiceTape.

     The reason  I wrote  these programs  is that I couldn't find any DOS-
     based  program  to  use  the  voice  capabilities  of  my  USRobotics
     Sportster.

     So here it is! For free!

     The GVoice  package currently  contains two  programs: GVoiceTape and
     GVoiceTSR.

     GVoiceTape can  be used  to record  and play  back messages  via  the
     modem's microphone and speaker or through the handset attached to the
     modem. All  messages are  stored as plain voice data as it comes from
     the modem (no conversion is done). This has the advantage that GVoice
     is generally  modem-independent. But  because  different  modems  use
     different data  formats, or  even the same modem can be configured to
     use different data formats, the voice files used by GVoice are modem-
     dependent. Because  of this  you can't  use any  other device/program
     (e.g. your  sound card)  to record/play  voice files  used by  GVoice
     programs, except if you got a converter program for your modem.

     I've made  a WAV  => GSM and a GSM => WAV converter for my USRobotics
     Sportster Vi.  These should  be available where you downloaded GVoice
     from.

     GVoiceTSR, as  its name  says, is a TSR (Terminate and Stay Resident)
     program. It  hooks into the FOSSIL driver's INT 14h chain, and it can
     be activated by sending a special character string to the modem.

     GVoiceTSR is  made especially  for BBS  use, to  discriminate between
     voice, data  and fax calls. GVoiceTSR handles voice calls on its own,
     while data  and fax  calls  are  passed  back  to  the  mailer.  With
     GVoiceTSR you  can run your BBS 24 hours a day and you are still able
     to receive voice calls on the same phone line!




                                    - 1 -

     DISCLAIMER
     ~~~~~~~~~~
     THIS PROGRAM  IS PROVIDED "AS IS" AND COMES WITH NO WARRANTIES OF ANY
     KIND, EITHER  EXPRESSED OR  IMPLIED. IN  NO EVENT SHALL THE AUTHOR BE
     LIABLE TO  YOU OR  ANYONE ELSE  FOR ANY  DAMAGES, INCLUDING  ANY LOST
     PROFITS, LOST  SAVINGS OR  OTHER INCIDENTAL  OR CONSEQUENTIAL DAMAGES
     ARISING OUT  OF THE  USE OR  INABILITY TO USE THIS SOFTWARE. THE USER
     ASSUMES FULL RESPONSIBILITY FOR THE USE OF THIS SOFTWARE.


     FREEWARE
     ~~~~~~~~
     This software is a FREEWARE product, so NO charge may be made for its
     distribution. It  is NOT a commercial product and the ONLY acceptable
     charge for  it will  be the  actual, physical  cost  of  duplication,
     storage and  handling. You  may freely  distribute this  software  to
     anyone you  like, as  long as  all  the  files  in  the  archive  are
     unchanged (including  this documentation), and all are included. This
     software must  NOT be  included in  a commercial  release without the
     author's written and signed permission. Distribution on shareware CD-
     ROMs is allowed without any limitations or restrictions.

     The GVoice software package is Copyright (C) 1996-97 by Tamas Vincze.
     All rights reserved.

     Other products  mentioned are  copyrighted by their respective owners
     and include  their own  restrictions  for  use.  Please  be  sure  to
     register those  shareware products  if  requested  by  the  copyright
     holders.


     HARDWARE REQUIREMENTS
     ~~~~~~~~~~~~~~~~~~~~~
       Modem with voice capabilities

     GVoice has been designed to work with a wide range of modems. Nor the
     modem type  nor its  capabilities are  checked by  any of  the GVoice
     programs. It's your job to configure GVoice for your modem. GVoice is
     distributed with a default setup, which is the one that I use with my
     USRobotics Sportster  Vi 33600.  This setup works with most Rockwell-
     compatible modems.

     The 1300Hz calling tone detection didn't work on my Sportster (it was
     a firmware bug, but USR has sent me a new eprom), so I had to plug an
     external PLL  decoder into  the modem's  speaker  jack.  It  detected
     1300Hz calling  tones and  reported them  to  GVoiceTSR  through  the
     printer port.  If you  also have this problem and want to use the LPT
     port 'feature',  you have  to build  your own PLL decoder which holds
     pin 15 (-ERROR input) of the LPT port low while it detects the 1300Hz
     tone. You should also specify the printer port's base address you use
     in GVSetup.


     SOFTWARE REQUIREMENTS
     ~~~~~~~~~~~~~~~~~~~~~
       Some kind  of operating system, which is able to run DOS programs.
        ;-)


                                    - 2 -

       FOSSIL driver  (e.g. BNU  or X00)  locked at  38400 or  higher bps
        rate.

       Front-end software is required by GVoiceTSR (e.g. Xenia Mailer).


     INSTALLATION
     ~~~~~~~~~~~~
     Create a  new directory  anywhere on  your hard  disk and  unpack the
     distribution archive to that directory. GVoiceTSR needs to know where
     this directory  is, so you must set the environment variable GVTSR to
     point to  this  directory.  You  should  put  a  line,  such  as  SET
     GVTSR=C:\GVOICE in your AUTOEXEC.BAT to make things easy.

     Additionally you  should create  one more  direcory opening  from the
     home directory,  named MESSAGES.  Following the  above example,  this
     would be C:\GVOICE\MESSAGES. The voice messages recorded by GVoiceTSR
     will be placed here.


     CONFIGURATION
     ~~~~~~~~~~~~~
     Run GVSETUP.EXE  and try  to set up everything correctly. GVoiceSetup
     modifies GVoice  programs directly,  which are  found in  the current
     directory.

     GVoiceSetup doesn't  modify the  GVoiceTSR  code  already  loaded  in
     memory! After you saved the new configuration into GVTSR.COM you must
     unload and  then reload  GVoiceTSR  in  order  to  make  the  changes
     effective.

     I made  (almost) every  modem command directly editable in GVSetup in
     order to  increase the  modem-independence of  GVoice. This  has  the
     disadvantage that  you must  be  familiar  with  your  modem's  voice
     command set to be able to change even some basic settings.

     In the default configuration these Rockwell-compatible voice commands
     are used: (note that all commands must be starting with "AT")

     #CLS=0         Switch to data mode
     #CLS=2         Switch to fax class 2 mode
     #CLS=8         Switch to voice mode
     #VBS=4         Selects 4 bits per sample ADPCM compression
     #VLS=0         Select phone line only
     #VLS=1         Select handset only
     #VLS=2         Select speaker only
     #VLS=3         Select microphone only
     #VLS=4         Select both phone line and speaker
     #VRX           Voice receive
     #VTX           Voice transmit
     #VSS=0         Disable silence detection
     #VSS=2         Set silence detection tuner sensitivity to midrange
     #VSP=n         Set silence  detection period to n. The parameter n is
                    in units  of 100  ms. E.g.  AT#VSP=30 sets the silence
                    detection period to 3 seconds
     #VTD=3F,3F,3F  Enables every tone detection feature (e.g. DTMF codes,
                    calling tones, busy signal, etc.)


                                    - 3 -

     See your  modem manufacturer's  documents for  the complete  and more
     detailed list of voice commands you can use.


     GVoiceTape USAGE
     ~~~~~~~~~~~~~~~~
     GVoiceTape has  two operating  modes: interactive  and  command  line
     controlled.

     GVoiceTape can  be started  in interactive mode by running GVTAPE.COM
     without any command line parameters. In this case the file GSMTMP.$$$
     is used  for record/playback. Additionally you can supply a file name
     on the command line to use instead of GSMTMP.$$$.

     GVoiceTape can  be started  in automatic  record mode or in automatic
     play back  mode by  running GVTAPE.COM  with /R  or /P on the command
     line. Unless  you specify  a file name after these switches, the file
     GSMTMP.$$$ will be used.


     GVoiceTSR USAGE
     ~~~~~~~~~~~~~~~~
     GVoiceTSR doesn't  use any command line switches, it can be installed
     by simply  running GVTSR.COM.  If you  want to  unload GVoiceTSR form
     memory, run GVTSR.COM again.

     GVoiceTSR MUST  be installed  AFTER the  FOSSIL driver! If the FOSSIL
     driver  re-captures   INT  14h,  you  must  unload  and  then  reload
     GVoiceTSR.

     GVoiceTSR requires  the presence of a front-end software (e.g. a fido
     mailer) which  detects RING  singnals coming  from the modem and then
     answers the call. In normal circumstances the mailer answers the call
     by sending  an ATA  to the modem. But we want GVoiceTSR to answer the
     call instead  of the  mailer. The  solution is to change the mailer's
     answer string from "ATA<CR>" to

                     "GVOICE<delay>T<delay>S<delay>R<CR>".

     This is  case sensitive,  so you  must use  uppercase  letters.  <CR>
     stands for Carriage Return and <delay> stands for a delay of at least
     1/4th seconds.  This delay  is needed  to  supply  a  guard  time  to
     GVoiceTSR in  order to  prevent it from popping up when it shouldn't.
     (The string  GVOICETSR<CR> could  be found  in normal  data  flow  as
     well!)

     You  must  see  your  mailer's  documentation  to  find  the  special
     characters that  can be  used in  modem command  strings in  order to
     implement <delay>  and <CR>.  Xenia mailer,  for example, uses "|" as
     <CR> and  "`" as  a 1/20th  second delay.  Xenia users  can use  this
     answer string in their modem configuration file:

                       ANSWER !GVOICE`````T`````S`````R|

     When GVoiceTSR  detects this  special answer  string, it  pops up and
     initializes the  modem to  voice mode. Then plays the voice data file



                                    - 4 -

     HALLO.GSM to  the caller.  This file (and all the others!) must be in
     the directory you specified by the GVTSR environment variable.

     HALLO.GSM contains a simple "Hallo!", which makes human callers think
     that another human said that, so they hopefully also say "Hallo!", by
     which GVoiceTSR knows that it has a human caller.

     After GVoiceTSR  has said  "Hallo!", it analyzes the call for about 3
     seconds (changeable  in GVSetup).  During this  period if  it detects
     silence or  data/fax calling  tone, it  tells the  modem to answer in
     data/fax mode,  and immediately gives back the control to the mailer.
     After this,  the mailer  will receive  the  result  of  the  data/fax
     handshake (CONNECT,  NO CARRIER,  etc.) and processes the rest of the
     call.

     If a DTMF signal is detected during this period, GVoiceTSR enters the
     DTMF menu. More about this are discussed later.

     If no  special tones and no silence are detected then we have a human
     caller, and  there are  two ways to go on. If someone is available to
     pick up  the phone, GVoiceTSR will signal that there's a voice caller
     (rings the  PC speaker)  and someone  should pick  up the  phone.  If
     nobody picks  up the  phone in  a given time, the caller is told that
     he/she can leave a message.

     If nobody  is available  to pick up the phone, GVoiceTSR won't signal
     the voice  call, instead  it will  try to record the caller's message
     immediately.

     How does  GVoiceTSR know  that someone  is available  to pick  up the
     phone? The answer is very simple: you tell it by means of creating or
     deleting a semaphore file. If this file exists, it means that someone
     is available at the phone. (When you arrive home you create the file,
     and before  you leave  you delete  the file.)  This semaphore file is
     named I_M_HOME.SEM  and should  be placed  in the directory where the
     GVTSR environment variable points to.

     Case 1: someone is available to pick up the phone
     (Semaphore file exists)

     The PC  speaker starts  ringing and HOME.GSM is played to the caller.
     This should  tell the  caller to wait a minute for someone to pick up
     the phone. If you are home, you should pick up the phone, press a key
     on the  PC's keyboard  and you are ready to talk with the caller. The
     beeping will stop, a NO CARRIER string will be placed in the FOSSIL's
     input buffer,  and the  control will be given back to the mailer. The
     mailer will  receive the NO CARRIER string, so it will think that the
     data caller has hung up.

     HOME.GSM must  have a  given structure: first, it tells the caller to
     wait; then it should contain some kind of music or simply silence; at
     the end  it tells  the caller  that noone has picked up the phone and
     he/she can leave a message. You have exactly as much time for picking
     up the phone as long HOME.GSM is playing.

     If you  don't press  a key  on the  PC  keyboard  while  HOME.GSM  is
     playing, GVoiceTSR will start recording the caller's message.


                                    - 5 -

     Case 2: nobody is available to pick up the phone
     (Semaphore file deleted)

     The file  NOTHOME.GSM is  played to the caller. This tells the caller
     that nobody  is home,  and he/she  can leave  a message.  Immediately
     after the  playing of  this file,  GVoiceTSR will start recording the
     caller's message.

     From now on, both cases go on the same way.

     The caller's  message  is  recorded  into  a  file  in  the  MESSAGES
     directory (which you have created during installation). The file name
     will be YYMMDDNN.GSM, where YY is the last two digits of the year, MM
     is the  month, DD  is the  day and  NN is  the message  number  (e.g.
     97081905.GSM is  the 5th message recorded August 19th, 1997). Message
     numbering starts  at 01  every day  at 00:00, and the largest message
     number can  be 99. After the 99th recorded message GVoiceTSR won't be
     able to  record more  messages, so  instead of  NOTHOME.GSM or  after
     playing HOME.GSM, the file named FULL.GSM will be played. This should
     tell the  caller that  his/her message  can't be recorded, and to try
     calling again later.

     The recording of a message will stop after the detection of 4 seconds
     of continous  silence (can be changed in GVSetup), or if dial tone or
     busy signal  is detected.  After the  recording is  finished and  the
     caller didn't  hung up,  the file BYE.GSM is played. This simply says
     good-bye to the caller.


     THE DTMF MENU
     ~~~~~~~~~~~~~
     While a  human caller  is online GVoiceTSR continously looks for DTMF
     signals. (DTMF signal = Dual Tone Multiple Frequency signal, which is
     generated by  the phone when you push a button on it and it is set to
     tone dialing)

     If GVoiceTSR  detects a  DTMF signal  it immediately  enters the DTMF
     menu. In  the DTMF  menu the  caller can  choose from  4 options: fax
     reception, voice  talk or  record message,  forced  ring  and  remote
     listen recorded  messages. You  can assign  any  DTMF  key  to  these
     functions or  you can disable them in GVoiceSetup. The caller chooses
     one of  these functions by pressing the appropriate button on his/her
     phone. DTMFHELP.GSM  is played  to the caller until he/she chooses an
     option.

     Fax reception: GVoiceTSR plays SENDFAX.GSM to the caller, initializes
     the modem for fax reception and gives the control back to the mailer.

     Voice  talk   or  record  message:  depending  on  the  existance  of
     I_M_HOME.SEM, GVoiceTSR  plays HOME.GSM or NOTHOME.GSM, and acts like
     described above.

     Forced ring: similar to the previous one, but GVoiceTSR doesn't check
     the existance  of I_M_HOME.SEM,  instead assumes  that it exists. Got
     this name  because it  always  rings  the  speaker.  Because  it's  a
     dangerous one,  it's protected  by a  password. When a caller selects
     this, GVoiceTSR  plays RING_PW.GSM  and waits for the caller to enter


                                    - 6 -

     the password.  If a  wrong password  is entered GVoiceTSR hangs up on
     the caller.

     Remote listen  recorded messages: by using this function you are able
     to listen  your messages if you're not at home. Like the previous one
     it's also protected by a password, MSGS_PW.GSM is used to ask for the
     password. If  you key  in the  correct password  the  first  recorded
     message is  played back to the line. Then MSGHELP.GSM is played which
     asks for  the action to take. Here you have four choices: skip to the
     next message, re-play the current message, delete the current message
     or stop  listening messages.  You  can  assign  DTMF  keys  to  these
     functions in GVoiceSetup.


     PRE-RECORDED GSM FILES
     ~~~~~~~~~~~~~~~~~~~~~~
     This is  a summary  of the  GSM files that should be pre-recorded for
     GVoiceTSR:

     +-------------------------------------------------------------+
     | File name    | When played           | Example              |
     +--------------+-----------------------+----------------------+
     | HALLO.GSM    | When answering a call.| Hallo!?              |
     |--------------+-----------------------+----------------------|
     | HOME.GSM     | When a voice caller   | Please wait until I  |
     |              | is detected and       | pick up the phone.   |
     |              | I_M_HOME.SEM exists.  | <music>              |
     |              |                       | Sorry, noone picked  |
     |              |                       | up the phone. Leave  |
     |              |                       | a message after the  |
     |              |                       | beep. <beep>         |
     |--------------+-----------------------+----------------------|
     | NOTHOME.GSM  | When a voice caller   | Leave a message after|
     |              | is detected and       | the beep. <beep>     |
     |              | I_M_HOME.SEM doesn't  |                      |
     |              | exist.                |                      |
     |--------------+-----------------------+----------------------|
     | FULL.GSM     | When GVoice is about  | Sorry, I can't record|
     |              | to record the caller's| your message now.    |
     |              | message but it would  | Please call back     |
     |              | be the 100th message  | later.               |
     |              | on that day.          |                      |
     |--------------+-----------------------+----------------------|
     | BYE.GSM      | Before GVoiceTSR      | Thanks for calling.  |
     |              | hangs up on a caller. | Good-bye!            |
     |--------------+-----------------------+----------------------|
     | DTMFHELP.GSM | While the caller is   | Press button 1 if you|
     |              | in the DTMF menu.     | want to send a fax,  |
     |              |                       | button 2 if you want |
     |              |                       | to talk with someone |
     |              |                       | or to leave a        |
     |              |                       | message.             |
     |--------------+-----------------------+----------------------|
     | SENDFAX.GSM  | When the caller       | You can start sending|
     |              | selects fax reception | your fax now.        |
     |              | from the DTMF menu.   |                      |
     |--------------+-----------------------+----------------------|


                                    - 7 -

     | RING_PW.GSM  | When the caller       | Enter the forced ring|
     |              | selects forced ring   | password!            |
     |              | from the DTMF menu.   |                      |
     |--------------+-----------------------+----------------------|
     | MSGS_PW.GSM  | When the caller       | Enter the password   |
     |              | selects remote message| for remote message   |
     |              | listening from the    | listening!           |
     |              | DTMF menu.            |                      |
     |--------------+-----------------------+----------------------|
     | BAD_PW.GSM   | When the caller enters| Incorrect password!  |
     |              | an invalid password.  |                      |
     |--------------+-----------------------+----------------------|
     | MSGHELP.GSM  | After each remotely   | Press button 1 for   |
     |              | played back message.  | the next message,    |
     |              |                       | button 2 to re-play  |
     |              |                       | this message, button |
     |              |                       | 3 to erase this      |
     |              |                       | message or button 4  |
     |              |                       | to stop listening    |
     |              |                       | messages.            |
     |--------------+-----------------------+----------------------|
     | NOMORE.GSM   | When there's no more  | No more messages.    |
     |              | messages to play back |                      |
     |              | in remote message     |                      |
     |              | listening mode.       |                      |
     +-------------------------------------------------------------+


     ERROR CODES
     ~~~~~~~~~~~
     GVoice programs  mainly report error codes instead of error messages.
     All codes are hexadecimal!

     The meaning of these error codes are as follows:

     00 - No error (shouldn't get this one:).
     01 - FOSSIL's output buffer full (but it shouldn't be).
     02 - Didn't get desired response (e.g. "OK"). (Modem timed out.)
     03 - Couldn't create file.
     04 - Couldn't write to file.
     05 - Couldn't close file.
     06 - Couldn't open file.
     07 - Couldn't read from file.
     08 - Character expected  from modem,  but got  nothing. (Modem  timed
          out.)
     09 - Modem hasn't accepted character. (Modem timed out.)
     0A - Couldn't stop  modem, it  keeps sending  data (in  voice receive
          mode).
     0B - User break. The user has pressed [Esc] during voice receive mode
          or voice transmit mode.


     HISTORY
     ~~~~~~~
     + : new feature,
     * : change (improvement or bugfix).



                                    - 8 -

     V1.00 (Rev. 1996 Sep 18) : private beta release;
             + added documentation;
             + added GVSetup;
             + semaphore file support;
             + user break support.

     V1.00 (Rev. 1996 Sep 28) : private beta release;
             + support for monochrome displays.

     V1.00 : first public release;
             * improved GVSetup.
     
     V1.10 : * fixed bug in GVSetup which corrupted data fields in
               GVTSR.COM causing "Can't initialize modem" errors. This
               error occured only if "Switch to fax mode" string was
               longer than 18 characters or "Set silence detect period #1"
               string was equal to 20 characters;
             * the file extension for voice files is now .GSM (was .PCM
               previously);
             * improved general compatibility with unknown modems;
             * GVTSR now uses an advanced method for checking it's
               'already installed' state. Previous versions could be
               installed in memory many times if something also hooked
               into the INT 14h chain (e.g. LANtastic);
             * HOME.GSM is played during ringing the speaker. After the
               entire file is played, message recording begins
               immediately, NONEHOME.PCM is no longer used. The speaker's
               ring time is also determined by the length of HOME.GSM. You
               should record HOME.GSM so that it begins with "Please wait
               while I pick up the phone.", then some music could come,
               and ending with "Nobody picked up the phone, leave a
               message.";
             * now you can quickly abort GVoiceTSR any time by pressing
               (almost) any key;
             + your modem's DLE (Data Link Escape) codes can be specified
               in GVSetup;
             + GVoiceTSR can be configured to automatically delete
               I_M_HOME.SEM if you don't pick up the phone;
             + calling tones are watched continuously.
               E.g. if GVoiceTSR detects fax calling tone while recording
               a caller's message, it immediately answers in fax mode and
               gives the control back to the mailer;
             + DTMF menu. Options:
               - start fax receive session
               - ring the speaker or leave a message (depending on the
               existance of I_M_HOME.SEM)
               - forced ring (rings the speaker regardless of the
               existance of I_M_HOME.SEM; password protected)
               - remotely listen your messages (password protected)


     KNOWN BUGS, INCOMPATIBILITIES
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     GVoiceTSR  doesn't   work  with  V1.02  of  X00  (reported  by  Tamas
     Fedorcsak).




                                    - 9 -

     SUPPORT, NEW VERSIONS
     ~~~~~~~~~~~~~~~~~~~~~
     New versions  of GVoice  will be  first available at the author's BBS
     (Electric Ladyland) located in Szeged, Hungary. The BBS accepts calls
     24 hours a day (using GVoice, of course).

     Tel: +36-62-483-370, FidoNet node number: 2:370/36.

     You can  freq the latest version by requesting the magic name GVOICE,
     or you can download it from file area #74 (GVoice support area).

     WWW homepage:

                           http://gvoice.home.ml.org

     GVoice mailing list:

     To join or leave the list, send an e-mail to:
                       gvoice-request@polghiv.szeged.hu
     with "join"  or "leave"  in the  message body  (without the  quotes).
     Articles to this mailing list should be sent to:
                           gvoice@polghiv.szeged.hu

     If you  have configured  GVoice successfully to work with your modem,
     PLEASE send me
       your GVoice  settings (in  any form, even copies of your GVTSR.COM
        and GVTAPE.COM are welcome),
       the exact type and manufacturer of your modem,
       the active profile of your modem,
       your mailer's modem-specific settings.

     I will  collect these settings and make them publicly available. This
     will help  a lot  for users who have trouble configuring GVoice. This
     is the only thing I ask, so don't be lazy to do this for me. Thanks.


     CONTACTING THE AUTHOR
     ~~~~~~~~~~~~~~~~~~~~~
     If you  have any  questions or  suggestions, found a bug, or whatever
     reason, please feel free to contact me.

     English isn't  my first  language, so  if you find any grammatical or
     spelling mistake please let me know.

     My addresses:

     FidoNet netmail: Tamas Vincze, 2:370/36

     Internet e-mail #1: tamas_vincze@electric.fido.hu

     Internet e-mail #2: geza@polghiv.szeged.hu (this should be faster
     than the previous one).



     [end-of-doc]



                                    - 10 -
