MODULE NarratorDemo; (* Dieses Demo veranschaulicht die Benutzung der Routinen aus dem *) (* Modul NarratorDevice. Auf diesem Demo liegt kein Copyright! *) FROM SYSTEM IMPORT ADR,ASSEMBLE; FROM NarratorDevice IMPORT SayModes,GetMouth,OpenNarrator,SetNarrator, Say,CloseNarrator,TranslationPhonemsPtr; FROM Languages IMPORT German; FROM GraphicsD IMPORT RastPortPtr,ViewModes,ViewModeSet; FROM GraphicsL IMPORT RectFill,SetAPen,LoadRGB4,SetRast,Draw,Move; FROM IntuitionD IMPORT ScreenPtr,NewScreen,ScreenFlagSet,customScreen; FROM IntuitionL IMPORT OpenScreen,CloseScreen; FROM DosL IMPORT Delay; TYPE Mouths = (block,raute); (*$ EntryExitCode:=FALSE *) PROCEDURE Colors; BEGIN ASSEMBLE(DC.W $0000,$0F00 END); END Colors; PROCEDURE MakeScreen(w,h,d : INTEGER; vm : ViewModeSet) : ScreenPtr; VAR ns:NewScreen; BEGIN WITH ns DO leftEdge:=0; topEdge:=0; width:=w; height:=h; depth:=d; detailPen:=1; blockPen:=2; viewModes:=vm; type:=ScreenFlagSet{}; font:=NIL; defaultTitle:=ADR("NarratorDemo"); gadgets:=NIL; customBitMap:=NIL; END; RETURN OpenScreen(ns); END MakeScreen; VAR scr : ScreenPtr; rp : RastPortPtr; width,height,oh,ow,t,z : INTEGER; PROCEDURE DrawMouth(w,h : INTEGER; mode : Mouths); BEGIN IF mode=block THEN (* Alten Block löschen *) SetAPen(rp,0); RectFill(rp,160-ow*2,100-oh,160+ow*2,100+oh); (* Neuen Block zeichnen *) SetAPen(rp,1); RectFill(rp,160-w*2,100-h,160+w*2,100+h); ELSIF mode=raute THEN (* Alte Raute löschen *) SetAPen(rp,0); Move(rp,160-ow*2,100); Draw(rp,160,100-oh); Draw(rp,160+ow*2,100); Draw(rp,160,100+oh); Draw(rp,160-ow*2,100); (* Neue Raute zeichnen *) SetAPen(rp,1); Move(rp,160-w*2,100); Draw(rp,160,100-h); Draw(rp,160+w*2,100); Draw(rp,160,100+h); Draw(rp,160-w*2,100); END; oh:=h; ow:=w; END DrawMouth; PROCEDURE SpeakAndDraw(tx : ARRAY OF CHAR; mod : SayModes; mm : Mouths); VAR l : TranslationPhonemsPtr; t:INTEGER; BEGIN IF mod=english THEN l:=NIL; ELSE l:=German; END; Say(tx,mod,l); (* Sprechen starten *) WHILE GetMouth(width,height) DO (* Solange nicht zuendegesprochen ... *) DrawMouth(width,height,mm); (* zeichne den Mund (breite,höhe) *) END; SetRast(rp,0); Delay(50); END SpeakAndDraw; BEGIN IF OpenNarrator() THEN scr:=MakeScreen(320,256,1,ViewModeSet{}); IF scr#NIL THEN rp:=ADR(scr^.rastPort); LoadRGB4(ADR(scr^.viewPort),ADR(Colors),2); SetRast(rp,0); oh:=0; ow:=0; SetNarrator(0,0,0,0,0,0); (* Setzt die Vorgabewerte *) SpeakAndDraw("Hallo, ich bin der AMIGA fuenfhundert.",givenLanguage, block); SpeakAndDraw("Ich kann deutsche und englische Texte sprechen.", givenLanguage,raute); SpeakAndDraw("Hello, I am the AMIGA 5hundred.",english,block); SpeakAndDraw("I can speak any language once learned!",english,raute); END; END; CLOSE IF scr#NIL THEN CloseScreen(scr); END; CloseNarrator; END NarratorDemo.