/*
 *  Rede benutzt die "uebersetzer.library" von Jürgen Schmitz
 *  Das Programm Rede ist Public Domain - man kann also machen damit,
 *  was man will.
 *
 */

#include <exec/types.h>
#include <proto/exec.h>
#include <exec/libraries.h>
#include <dos/dos.h>
#include <proto/dos.h>
#include <proto/uebersetzer.h>
#include <devices/narrator.h>
#include <clib/alib_protos.h>
#include <string.h>
#include <stdio.h>

struct  Library		*UebersetzerBase;
struct  MsgPort     *VoiceMP;
struct  narrator_rb *VoiceIO;
BYTE    audio_chan[4]   = {3, 5, 10, 12};
char	PhoneticText[300];
char	UserText[100];
char	templ[]="Text/F";
LONG	res[1];
struct  RDArgs		*rda;


void Labern(void)
{
	if (UebersetzerBase=OpenLibrary("uebersetzer.library",37))
	{
		/* Create the message port */
   		if (VoiceMP=CreateMsgPort())
		{
    		/* Create the IORequest */
      		if (VoiceIO = CreateIORequest(VoiceMP,sizeof(struct narrator_rb)))
	        {
    	        /* Open the narrator device */
        	 	if (OpenDevice("narrator.device",0,(struct IORequest *)VoiceIO,0L))
				{
		            printf("Fehler: Konnte NARRATOR.DEVICE nicht öffnen\n");
    			}
	        	else
	            {
					Translate(UserText,strlen(UserText),PhoneticText,sizeof(PhoneticText));

		        	/* Speak the string using the default parameters */
        	    	VoiceIO->ch_masks = &audio_chan[0];
            		VoiceIO->nm_masks = sizeof(audio_chan);
            		VoiceIO->message.io_Command = CMD_WRITE;
	            	VoiceIO->message.io_Data = PhoneticText;
    	        	VoiceIO->message.io_Length = strlen(PhoneticText);
        	    	DoIO((struct IORequest*) VoiceIO);

            		/* Close the narrator device */
            		CloseDevice((struct IORequest *)VoiceIO);
	            }
				/* Delete the IORequest */
	    	    DeleteIORequest(VoiceIO);
			}
			else
	    	{
				printf("Fehler: Konnte IORequest nicht anlegen\n");
    	    }
			/* Delete the message port */
			DeleteMsgPort(VoiceMP);
		}
		else
		{
			printf("Fehler: Konnte MessagePort nicht anlegen\n");
		}
		CloseLibrary(UebersetzerBase);
    }
	else
	{
		printf("Fehler: UEBERSETZER.LIBRARY nicht gefunden\n");
	}
}

void main(void)
{
    if (rda=ReadArgs(templ,res,NULL))
    {
    	if (res[0])
    	{
	    	strcpy(UserText,(char *)res[0]);
    		Labern();
        }
        else
        {
        	printf("Fehler: Kein Text\n");
        	strcpy(UserText,"Fehler: Kein Text");
        	Labern();
        }
    	FreeArgs(rda);
    }
}
