*************************************** * say - speak a text file * * * * written by E. Lenz * * Johann-Fichte-Strasse 11 * * 8 Munich 40 * * Germany * * * *************************************** **** exec **** _AbsExecBase equ 4 _LVOForbid equ -$84 _LVOPermit equ -$8a _LVOAddPort equ -$162 _LVORemPort equ -$168 _LVOGetMsg equ -$174 _LVOReplyMsg equ -$17a _LVOWaitPort equ -$180 _LVOCloseLibrary equ -$19e _LVOOpenDevice equ -$1bc _LVOCloseDevice equ -$1c2 _LVODoIo equ -$1c8 _LVOOpenLibrary equ -$228 **** dos ***** _LVOOpen equ -$1e _LVOClose equ -$24 _LVORead equ -$2a _LVOWrite equ -$30 ***** translator **** _LVOTranslate equ -$1e TC_SIGRECVD equ $1a pr_MsgPort equ $5c pr_CLI equ $ac ThisTask equ $114 VBlankFrequency equ $212 SIGBREAK_ANY equ $1000 XREF ReadLn,request,_Request move.l a0,d7 save instruction from CLI move.l d0,d4 subq.w #1,d4 clr.b 0(a0,d4.w) movea.l _AbsExecBase,a6 test if WB or CLI movea.l ThisTask(a6),a0 move.l a0,writerep+$10 lea TC_SIGRECVD(a0),a1 get task signal address move.l a1,TaskSigs moveq #0,d0 tst.l pr_CLI(a0) bne.s isCLI lea pr_MsgPort(a0),a0 for WB get WB Message jsr _LVOWaitPort(a6) jsr _LVOGetMsg(a6) moveq #0,d4 make sure there's no instruction isCLI move.l d0,-(a7) cmpi.b #60,VBlankFrequency(a6) test if PAL or NTSC beq.s isNTSC move.l #'256/',window+12 isNTSC lea transname(pc),a1 open translator library moveq #0,d0 jsr _LVOOpenLibrary(a6) movea.l d0,a4 tst.l d0 this is one of the few cases bne.s Transok where this test is vital lea transname(pc),a0 first line lea notfnd(pc),a1 second line suba.l a2,a2 no third line lea hdtxt(pc),a3 header lea OkTxt(pc),a4 gadget text suba.l a5,a5 no 2nd gadget moveq #0,d0 moveq #1,d1 jsr request suba.l a3,a3 bra nocon Transok lea dosname(pc),a1 open DOS library moveq #0,d0 jsr _LVOOpenLibrary(a6) movea.l d0,a3 tst.l d0 beq.s Gerror movea.l d0,a6 open Console window move.l #window,d1 move.l #1005,d2 jsr _LVOOpen(a6) movea.l d0,a5 tst.l d0 Gerror beq error movea.l _AbsExecBase,a6 lea writerep(pc),a1 jsr _LVOAddPort(a6) lea talkio(pc),a1 moveq #0,d0 moveq #0,d1 lea nardevice(pc),a0 jsr _LVOOpenDevice(a6) tst.l d0 bne exit movea.l a3,a6 move.l d7,d1 tst.l d4 bne.s file moveq #0,d0 move.l #160,d1 moveq #18,d2 lea title(pc),a0 jsr _Request move.l d0,d1 bra.s file move.l #filename,d1 open old file file move.l #1005,d2 jsr _LVOOpen(a6) move.l d0,filehandle Gexit beq exit lea talkio(pc),a1 move.l #writerep,14(a1) move.w #150,48(a1) rate 40-400 move.w #110,50(a1) pitch 65-320 move.w #0,52(a1) mode 0-1 move.w #0,54(a1) sex 0-1 move.l #amaps,56(a1) masks move.w #4,60(a1) 4 masks move.w #64,62(a1) volume move.w #22200,64(a1) saylop bsr Read move.l d1,d4 beq.s Gexit movea.l TaskSigs,a0 test for ***BREAK*** move.l (a0),d0 andi.l #SIGBREAK_ANY,d0 bne.s Gexit lea outtext(pc),a1 clear translated stuff moveq #0,d0 moveq #$7f,d1 clear move.l d0,(a1)+ dbra d1,clear move.l a1,a2 write to console move.l a5,d1 move.l #Buffer,d2 move.l d4,d3 jsr _LVOWrite(a6) cmpi.l #1,d4 beq.s saylop move.l d4,d0 clr.b -1(a2) lea Buffer(pc),a0 lea outtext(pc),a1 move.l #512,d1 movea.l a4,a6 jsr _LVOTranslate(a6) lea talkio(pc),a1 move.w #3,28(a1) move.l #512,36(a1) move.l #outtext,40(a1) move.l _AbsExecBase,a6 jsr _LVODoIo(a6) bra saylop exit move.l _AbsExecBase,a6 lea writerep(pc),a1 jsr _LVORemPort(a6) lea talkio(pc),a1 jsr _LVOCloseDevice(a6) movea.l a4,a1 close translator library jsr _LVOCloseLibrary(a6) error move.l a3,a6 move.l filehandle(pc),d1 close file beq.s nofile jsr _LVOClose(a6) nofile move.l a5,d1 close console beq.s nocon jsr _LVOClose(a6) nocon move.l _AbsExecBase,a6 move.l (a7)+,d0 beq.s NoBench jsr _LVOForbid(a6) reply to WB movea.l d0,a1 jsr _LVOReplyMsg(a6) jsr _LVOPermit(a6) NoBench move.l a3,d0 beq.s NoDos movea.l d0,a1 close dos.lib jsr _LVOCloseLibrary(a6) NoDos moveq #0,d0 rts Read movem.l a2-a5,-(a7) movea.l a3,a6 move.l BufNum(pc),d0 movea.l BufPnt(pc),a0 movea.l #Buf2,a1 movea.l #Buffer,a2 movea.l filehandle(pc),a3 jsr ReadLn move.l d0,BufNum move.l a0,BufPnt movem.l (a7)+,a2-a5 rts TaskSigs ds.l 1 amaps dc.b 3,5,10,12 transname dc.b 'translator.library',0 dosname dc.b 'dos.library',0 nardevice dc.b 'narrator.device',0 even ; requester texts notfnd dc.b ' not found',0 hdtxt dc.b ' Say Request',0 OkTxt dc.b ' OK',0 even title dc.b 'load file to SAY',0 even filename ds.b 80 window dc.b 'CON:0/0/639/199/Say - abort with ^C',0 even filehandle dc.l 0 narread ds.l 20 talkio ds.l 20 writerep ds.l 8 BufNum dc.l 0 BufPnt dc.l 0 Buffer ds.b 200 Buf2 ds.b 200 outtext ds.l $100 end