
;*****  Narrator-Demo  6/87  S.D. CHIP RAM  *****

ExecBase  = 4     ;EXEC-Base address
FindTask  =-294   ;Find Task
AddPort   =-354   ;Add Port
RemPort   =-360   ;Remove Port
OpenLib   =-408   ;Open Library
closelib  =-414   ;Close Library
OpenDev   =-444   ;Open Device
CloseDev  =-450   ;Close Device
DoIo      =-456   ;Do I/O
SendIo    = -462  ;Send I/O
Translate =-30    ;Translate Text

run:                ;** Initialize and open system **
     move.l  execbase,a6
     lea     transname,a1
     moveq   #0,d0            ; orginal was-clr.l   d0
     jsr     openlib(a6)      ;Open Translator Library
     move.l  d0,tranbase
     beq     error

     sub.l   a1,a1            ;Task Number = 0: Your own task
     move.l  execbase,a6
     jsr     FindTask(a6)     ;Find Task

     move.l  d0,writerep+$10  ;set SigTask

     lea     writerep,a1
     jsr     addport(a6)      ;Add Reply-Port

     lea     talkio,a1
     move.l  #writerep,14(a1) ;Enter Reply  
     clr.l   d0
     clr.l   d1
     lea     nardevice,a0
     jsr     opendev(a6)      ;Open Narrator.device
     tst.l   d0
     bne     error

     lea     talkio,a1
     move.l  #writerep,14(a1) ;set Reply-Port (*)
     move    #150,48(a1)      ;Rate (40-400)
     move    #110,50(a1)      ;Pitch (65-320)
     move    #0,52(a1)        ;Mode: inflected (0/1)
     move    #0,54(a1)        ;Gender:male (0/1)
     move.l  #amaps,56(a1)    ;Masks (*)
     move    #4,60(a1)        ;4 Masks (*)
     move    #64,62(a1)       ;Volume (0-64)
     move    #22200,64(a1)    ;Sampling rate (5000-28000)

sayit:                   ;** Examine and say text **
     lea     intext,a0        ;Original text
     move.l  #outtext-intext,d0 ;Text length
     lea     outtext,a1       ;Buffer for translation
     move.l  #512,d1          ;Buffer length
     move.l  tranbase,a6
     jsr     Translate(a6)    ;Translate text

     lea     talkio,a1
     move    #3,28(a1)        ;Command: Write
     move.l  #512,36(a1)      ;Length
     move.l  #outtext,40(a1)  ;Buffer
     move.l  execbase,a6
     jsr     DoIo(a6)         ;Say it!!

qu:                      ;** End **
     lea writerep,a1
     jsr RemPort(a6)          ;Remove Port

     lea talkio,a1
     jsr closedev(a6)         ;Close Narrator

     move.l tranbase,a1
     jsr     closelib(a6)     ;Close Translator-Lib

     clr.l   d0
error:
     rts

transname:   dc.b "translator.library",0
nardevice:   dc.b 'narrator.device',0
amaps:       dc.b 3,5,10,12
intext:      dc.b 'this is from the abacus book amiga system programming',0
 align         ;some assemblers use even
outtext:     blk.l 128,0
tranbase:    blk.l 1,0
narread:     blk.l 20,0
talkio:      blk.l 120,0
writerep:    blk.l 8,0
 end
