home *** CD-ROM | disk | FTP | other *** search
- PART II
-
- HEARSAY PROGRAMMER'S GUIDE
-
- INTRODUCTION
-
- Hearsay Gold allows programmers to call speech functions directly from
- programs they write, without going through the Hearsay menus. These functions
- can be called directly from assembly language or by high level languages with
- register-access capability such as "C". For programmers working in BASIC, an
- assembly-language driver program is included on the Hearsay Gold diskette. The
- available functions are:
-
- - SPEAK A LINE OF TEXT
- - SET SCREEN ECHO PARAMETERS
- - SET SCREEN ECHO WINDOW
- - UNHOOK HEARSAY FROM DOS
- - LOAD DICTIONARY
- - GET VERSION NUMBER
-
- Examples are given in BASIC and Assembly Language. For BASIC programmers,
- sample code segments are provided, which when copied directly into your program
- will call the Hearsay driver program and exercise the programmable functions.
-
- CALLING HEARSAY FUNCTIONS FROM BASIC
-
- To access Hearsay Gold functions from BASIC programs, a machine language
- "Driver" program must be called from BASIC. A multiple function driver
- (HSGOLDDR.BAS) is supplied on the Hearsay Gold diskette.
-
- In order to use the Hearsay functions, your BASIC program must load the
- driver program into high memory, and then "Call" the driver for each function
- required.
-
- To load the driver into high memory:
-
- 1. When loading BASIC, reserve memory for the driver by using a /M switch.
-
- Type in: BASIC/M:65024 (BASICA/M:65024 if you use BASICA) then
-
- 2. Include the following lines in your program to load the driver into
- memory:
-
- 10 REM LOAD HEARSAY DRIVERS
- 20 DEF SEG
- 30 HSBASE=65024! :REM This must be equal to the
- 40 :REM number used in the /M switch
- 50 BLOAD "HSGOLDDR",HSBASE
- 60
- 70 :REM INITIALIZE HEARSAY FUNCTIONS
- 80 SAYSTR=HSBASE+256! :REM Location of SAYSTR Driver
- 90 BUFFER=HSBASE :REM Location of SAYSTR Buffer
- 100 SETSCRENCHO=HSBASE+272! :REM Location of SETSCRENECHO
- 110 SETWINDOW=HSBASE+321! :REM Location of SET WINDOW
- 120 UNHOOK=HSBASE+352! :REM Location of UNHOOK HS
- 130 LOADDICT=HSBASE+388! :REM Location of LOAD DICTIONARY
- 140 GET VERSION+HSBASE+411! :REM Location of GET VERSION
-
- Once the driver is loaded, each Hearsay function can be called by setting
- the proper values & then calling the desired function from the Hearsay driver.
-
- SPEAK A LINE OF TEXT
-
- The SAYSTR function speaks a line (String) of text. In the BASIC program
- example given below, this is a line of text typed at the keyboard in response
- to a prompt, but it could have been hard coded into the program (By
- initializing A$ as the string to be spoken).
-
- PROGRAMMING IN BASIC
-
- The BASIC program segment below calls for the SAYSTR function.
-
- 100 REM Input a line of text from the keybaord and speak it.
- 110 SAYSTR=HSBASE+256! :REM Location of SAY driver
- 120 BUFFER=HSBASE :REM Location of BUFFER
- 130 INPUT A$ :REM Get line from keyboard
- 140 A$=A$+"." :REM Add period and space
- 150 POKE BUFFER,LEN(A$) :REM Store length of line
- 160 FOR N=1TOLEN(A$) :REM Store line in buffer
- 170 POKE BUFFER+N,ASC(MID$(A$,N,1))
- 180 NEXT N
- 190 CALL SAYSTR :REM Speak line
-
- Lines 110-120 establish the parameters for the SAYSTR function. Once that
- has been done, it is not necessary to do it again each time a string is to be
- spoken it remains available to you until you redfine it or leave the program.
-
- Lines 130-140 accept input keystrokes to define the string to be spoken, &
- put a period & space at the end of it. If you were hard coding the string into
- your program you would replace these lines with a string defining A$, including
- the period and space in the definition (ie. 130 A$="THIS IS A TEST.").
-
- Line 150 pokes the length of the string into the beginning of the buffer
- and lines 160-180 poke the characters of the string into the buffer. This must
- done for each string you want Hearsay to speak.
-
- Once the string has been defined and poked into the proper location in
- memory, line 190 calls the SAYSTR function which speaks the phrase.
-
- PROGRAMMING IN ASSEMBLER
-
- The SAYSTR function speaks the text string passed to it. The first byte of
- the string must contain the length of the string. You must allocate 256 Bytes
- for the string even if the length is less than 256 Bytes.
-
- USE
-
- 1. First push a FAR pointer to string onto the stack.
- 2. The call Hearsay Gold with a function code of 00h in the AL register.
- 3. Upon return, pull all parameters from the stack.
-
- SAY STRING EXAMPLE
-
- DATA SEGMENT WORD PUBLIC 'DATA'
-
- String EQU $
- DB 24d
- DB 'I am the Hearsay Gold'
- DB 13d
-
- DATA ENDS
-
- CODE SEGMENT BYTE PUBLIC 'CODE'
- ASSUME CS:CODE,CS:DATA
-
- Say demo PROCEDURE NEAR
-
- mov ax,ds ;Push far pointer to STRING
- push ax ;onto the stack.
- mov ax,offset String
- push ax
- mov al,00h ;Call the Hearsay Gold with
- int 55h ;a function code of 00h.
- pop ax ;Pull parameters from stack.
- pop ax
- ret
- Say demo ENDP
-
- CODE ENDS
- END
-
- SET SCREEN ECHO PARAMETERS
-
- The SETSCRENECHO function set Screen Echo ON or OFF, defines punctuation,
- voice, pitch, and speed for both the Screen Echo and the Say String functions.
- If SETSCRNECHO is never called, Hearsay will default to voice 1, pitch 6, and
- speed 7 for Say String functions.
-
- PROGRAMMING IN BASIC
-
- In the BASIC program sample given below, Screen Echo is set on & the other
- parameters are set to their default values (All parameters must be included
- when SETSCRNECHO is called, even if they are to be set to the default values).
-
- 100 SETSCRNECHO=HSBASE+272! :REM Location of SETSCRNECHO
- 110 ECHO%=1 :REM Set ECHO on (0 would be off)
- 120 PUNCT$=0 :REM Don't speak punctuation
- 130 LM%=0 :REM Set Line Mode off
- 140 VOICE%=1 :REM Use voice 1
- 150 PITCH%=6 :REM Use pitch 6
- 160 SPEED%=7 :REM Speed 7
- 170 CALL SETSCRENECHO
- (ECHO%,PUNCT%,LM%,VOICE%,PITCH%,SPEED%)
- 180 REM Screen Echo is now set as indicated above
-
- Line 100 establishes the location of SETSCRENECHO, the Screen Echo
- function in the Hearsay driver. This line needs to occur once in your program,
- the location will be maintained until you leave the program.
-
- Lines 110-160 establish the conditions to be implemented. It's necessary
- to enumerate all conditions every time you change any one.
-
- Line 170 calls the SETSCRNECHO driver and establishes the conditions you
- described in lines 110-160. This command will be included at any point in your
- program where you want to change to Screen Echo settings.
-
- PROGRAMMING IN ASSEMBLER
-
- USE
-
- 1. First push an integer (1 to 9, 1 is slowest, 7 is default) to specify
- speed.
-
- 2. Next push an integer (1 to 9, 1 is slowest, 6 is default) to specify
- pitch.
-
- 3. Then push an integer (1 or 2, 1 is lower and default) to specify voice.
-
- 4. Next push an integer (1 or 0, 0 is off & default) to specify line mode.
-
- 5. Then push an integer (1 or 0, 0 is off and default) to specify
- punctuation mode.
-
- 6. Next push an integer (1 or 0, 0 is off and default) to specify screen
- echo.
-
- 7. Now call Hearsay Gold with a function code of 01h in the AL register.
-
- 8. Upon return, pull all parameters from stack.
-
- SET SCREEN ECHO EXAMPLE
-
- CODE SEGMENT BYTE PUBLIC 'CODE'
- ASSUME CS:CODE
-
- Set echo PROCEDURE NEAR
-
- push bp ;Save stack pointer
- mov bp,sp
- mov ax,7 ;Speed=7
- push ax
- mov ax,6 ;Pitch=6
- push ax
- mov ax,1 ;Voice=1
- push ax
- mov ax,0 ;Line mode off
- push ax
- mov ax,0 ;Punctuation mode off
- push ax
- mov ax,1 ;Screen echo on
- push ax
- mov al,01h ;Call the Hearsay Gold with a
- int 55h ;function code of 01h
- mov sp,bp ;Remove parameters from stack
- pop bp
- ret
- Set echo ENDP
- CODE ENDS
- END
-
- SET WINDOW
-
- The SETWINDOW function sets Hearsay's Screen Echo window parameters. The
- function defines the top & bottom lines of the window, and whether text inside
- or outside of it is to be echoed. Remember, text will only be spoken when
- Screen Echo is turned on.
-
- PROGRAMMING IN BASIC
-
- The BASIC program segment below calls the Set Window function.
-
- 100 REM speak text from lines 10 to 15.
- 110 SETWINDOW=HSBASE+321!:REM Location of SETWINDOW.
- 120 MODE%=1: REM Speak text inside window.
- 130 TOP%=10: REM From line 10 to 15
- 140 BOTTOM%=15
- 150 CALL SETWINDOW (MODE%,TOP%,BOTTOM%)
-
- Line 110 establishes the location of the SETWINDOW function. This command
- only needs to be executed once within your program.
-
- Lines 120-140 set window parameters of inside or outside, top and bottom.
-
- Line 150 calls the SETWINDOW function and implements the parameters set in
- lines 120-140. This line will be used whenever it is necessary to change the
- Hearsay window settings.
-
- PROGRAMMING IN ASSEMBLER
-
- USE
-
- 1. First, push an integer (1 to 25, 25 is the bottom row of the screen)
- specifying the bottom row of the window.
-
- 2. Next push an integer (1 to 25, 1 is the top row) specifying the top row
- of the window.
-
- 3. Then push an integer (0 or 1, 1 is inside) specifying the mode (Whether
- text inside or outside the window is to be spoken).
-
- 4. Now call Hearsay Gold with a function of 2 in the AL register.
-
- 5. Upon return pop all parameters from the stack.
-
- SET WINDOW EXAMPLE
-
- CODE SEGMENT BYTE PUBLIC 'CODE'
- ASSUME CS:CODE
-
- WINDOW PROCEDURE NEAR
- mov ax,20d ;Only speak text printed from
- push ax ;Line 10 to line 20
- mov ax,10d
- push ax
- mov ax,1 ;Set mode to speak inside window
- push ax
- mov al,02h ;Call the HEARSAY GOLD with a
- int 55h ;function code of 02h
- pop ax ;Pull parameters from stack
- pop ax
- pop ax
- ret
- WINDOW ENDP
- CODE ENDS
- END
-
- UNHOOK HEARSAY FROM DOS
-
- This command "Unloads" the Hearsay Gold program, removing all hooks to DOS
- and returning all reserved memory to DOS.
-
- To rerun Hearsay after unhooking, you must rerun the SpeechV2 or SPEECHV3
- and Hearsay programs and redefine the Hearsay Key as you normally do at setup.
-
- PROGRAMMING IN BASIC
-
- The BASIC program segment below shows the Unhook function in use.
-
- 100 REM Unhook the HSGOLD from DOS
- 110 UNHOOKHS=HSBASE+352!: REM Location of UNHOOK HS.
- 120 CALL UNHOOKHS: REM Unhook HSGOLD from DOS.
-
- Line 110 established the location of the Unhook function (Only needs to be
- done once) and line 120 calls the function.
-
- PROGRAMMING IN ASSEMBLER
-
- USE
-
- 1. Issue a call to the Hearsay Gold with a function code of 3 in the AL
- register.
-
- 2. No parameters are passed or returned.
-
- UNHOOK EXAMPLE
-
- CODE SEGMENT BYTE PUBLIC 'CODE'
- ASSUME CS:CODE
- UNHOOK HS PROCEDURE NEAR
- mov al,03h ;Call the Hearsay Gold with
- int 55h ;a function code of 03h
- ret
- UNHOOK HS ENDP
- CODE ENDS
- END
-
- LOAD DICTIONARY
-
- This command loads a dictionary file (Created with the Speech Editor) from
- disk.
-
- PROGRAMMING IN BASIC
-
- An example of its use is given below:
-
- 100 REM load dictionary file SAMPLE.
- 110 LOADDICT=HSBASE+388!: REM Location of Load Dictionary
- 120 BUFFER=HSBASE: REM Location of buffer
- 130 FILENAME$="SAMPLE": REM Name of file to load
- 140 FLAG%=0: REM Initialize ERROR
- 150 POKE BUFFER,LEN(FILENAME$): REM Store length of filename
- 160 FORN=1TOLEN(FILENAME$): REM Store filename in buffer
- 170 POKE BUFFER+N,ASC(MID$(FILENAME$,N,1))
- 180 NEXT N
- 190 CALL LOADDICT(FLAG%): REM Load the file
- 200 IF FLAG%=0THEN220: REM If error then print message
- 210 PRINT "ERROR LOADING FILE"
- 220 END
-
- Lines 110-120 establish the location of the LOADDICT function (Only needs
- to be done once), line 130 provides the filename of the dictionary file, & line
- 140 initializes the error flag.
-
- Lines 150-180 poke the filename into the buffer, & line 190 actually calls
- the LOADDICT function which loads the specified dictionary in Hearsay's memory.
-
- The LOADDICT function will check for errors in loading the file and set
- the FLAG% variable if any are encountered. Lines 200-210 check for errors and
- print an error message on the screen if one is encountered. (In your own
- program, you may choose to handle file loading errors in some other way, but
- you will still test it by checking the value of FLAG%).
-
- PROGRAMMING IN ASSEMBLER
-
- The LOADDICT function is called with a FAR pointer to the filename on the
- stack. The filename can be any legal DOS filename without the file extension,
- which Hearsay Gold will add automatically.
-
- If the file is to be loaded from other than the current drive & directory,
- an optional path name must be included with the filename.
-
- If the file loads OK, 0 will be returned in the AX register. If there was
- an error in loading the file, a non-zero value will be returned. Use the DOS
- function call 59h (GET EXTENDED ERROR) to get further information on the error.
-
- USE
-
- 1. Push a FAR pointer to the filename onto the stack.
-
- 2. Call Hearsay Gold with the function code 05h in the AL register.
-
- 3. Upon return, pull all parameters from the stack.
-
- LOAD DICTIONARY EXAMPLE
-
- DATA SEGMENT WORD PUBLIC 'DATA'
-
- filename EQU $
- DB 10d ;Length of filename
- DB C:\HS\DEMO ;Filename with drive C and directory HS
-
- DATA ENDS
- CODE SEGMENT BYTE PUBLIC 'CODE'
- ASSUME CS:CODE,DS:DATA
-
- Load dict PROCEDURE NEAR
- push bp ;Save stack pointer
- mov bp,sp
- mov ax,ds ;Push far pointer to filename
- push ax
- mov ax,offset filename
- push ax
- mov al,05h ;Call the Hearsay Gold with a
- int 55h ;function code of 05h
- mov sp,bp ;Remove filename from stack
- pop bp
- cmp pax,0 ;Error?
- je Done ;no,exit
- mov bx,0h ;DOS version #
- mov ah,59h ;Get extended error information
- int 21h ;Process error
- Done:
- ret
- Load dict ENDP
- CODE ENDS
- END
-
- GET VERSION NUMBER
-
- This command extracts the version of Hearsay Gold currently being used.
- This permits software developers to check version number and version level as
- part of their program. Hearsay is committed to upward compatibility, so that
- any program written for the Hearsay Gold will run on any later version. If you
- are developing programs to use Hearsay, check that the version number is no
- lower than the one you used for development.
-
- The Version ID codes for Hearsay Gold versions 2 and 3 are 0300h and 0400h
- respectively. The first two digits indicate the product code, and the last two
- indicate the release number of that product. Release 2 of Version 2 will have a
- Version ID of 0301h or 769 decimal.
-
- PROGRAMMING IN BASIC
-
- The program segment below shows the function in use.
-
- 100 REM Display the HSGOLD version number.
- 110 HSVERSION=HSBASE+411!: REM Location of GET VERSION
- 120 VERSION%=0: REM Initialize number.
- 130 CALL HSVERSION (VERSION%): REM Get version number.
- 140 IF VERSION%=768 THEN PRINT "VERSION 2"
- 150 IF VERSION%=1024 THEN PRINT "VERSION 3"
-
- Line 110 locates the GET VERSION function (Only needs to be done once) and
- line 120 initializes VERSION to 0.
-
- Line 130 actually calls the GET VERSION function, returning a version
- number of 768 if Version 2 is loaded or 1024 if Version 3 is loaded. Lines 140-
- 150 test to see which version is loaded, in the example given printing the
- version number.
-
- PROGRAMMING IN ASSEMBLER
-
- The product code is returned in register AH and the release number is
- returned in register AL.
-
- USE
-
- 1. Call Hearsay Gold with function code 06h in the AL register.
-
- 2. The Version ID will be returned in register AX.
-
- GET VERSION EXAMPLE
-
- CODE SEGMENT BYTE PUBLIC 'CODE'
- ASSUME CS:CODE
-
- Get version PROCEDURE NEAR
- mov al,06h ;Call the Hearsay Gold with a
- int 55h ; function code of 06h
- ret
- Get version ENDP
- CODE ENDS
- END