#include <stdio.h>
#include <string.h>
#include <dos.h>
#include <time.h>
#include <exec/types.h>
#include <exec/memory.h>
#include <exec/execbase.h>
#include <proto/exec.h>
#include <proto/dos.h>

#include "/lib/iomodes.h"
#include "rn.h"

#define BUF 8192 /* buffer size for char change */

/* This routine does a in-place replacement of SF7-character set */
/* scandinavian letters to ISO-Latin-1 equivalents. */

void sf7toiso(char *name)
{	long file,len,pos=0;
	int count;
	UBYTE *buffer;

	if(buffer=(UBYTE *)AllocMem(BUF,MEMF_PUBLIC | MEMF_CLEAR))
	{
		if(file=Open(name,MODE_OLDFILE))
		{
			while(len=Read(file,buffer,BUF))
			{
				if(len<0)
				{
					for(count=0;count<len;count++)
					{
						switch(buffer[count])
						{
						case 0x84:
						case '{':
							buffer[count]=(UBYTE)'ä';
							break;
						case 0x86:
						case '}':
							buffer[count]=(UBYTE)'å';
							break;
						case 0x94:
						case '|':
							buffer[count]=(UBYTE)'ö';
							break;
						case 0x8e:
						case '[':
							buffer[count]=(UBYTE)'Ä';
							break;
						case 0x8f:
						case ']':
							buffer[count]=(UBYTE)'Å';
							break;
						case 0x99:
						case '\\':
							buffer[count]=(UBYTE)'Ö';
							break;
						}
					}
				}
				Seek(file,pos,OFFSET_BEGINNING);
				Write(file,buffer,len);
				pos+=len;
			}
			Close(file);
		}
		FreeMem(buffer,BUF);
	}
}


int getline(unsigned char *hotkeys,unsigned char *a,int b,UBYTE pre,UBYTE echo)
{	register int i=0,c,f;

	if(pre)
	{
		while(a[i])
		{
			if(a[i]>0x7f && a[i]<0xa0)
			{
				a[i]-=0xa0;
			}
			if(a[i]<0x20)
			{
				putchar('^');
				putchar(a[i]+'@');
				i++;
			}
			else
			{
				putchar(a[i]);
				i++;
			}
		}
		fflush(stdout);
	}
    while(1)
    {
		if(SetSignal(0,0) & SIGBREAKF_CTRL_C)
			return -1;

		if(WaitForChar(Input(),4000000))
			c=Read(Input(),&a[i],1);
		else
			continue;

		if(!c || c<0)	return -1;
    	if(a[i]==0x0a || a[i]==0x0d)
    	{
			a[i]=0;
    		break;
    	}
    	else
    	{
			if(a[i]==0x7f || a[i]==0x08)
    		{
				if(i>0)
				{
					if(echo)
					{
						if(a[i-1]<' ')
						{
							Write(Output(),"\010\010  \010\010",6);
						}
						else
						{
							Write(Output(),"\010 \010",3);
						}
					}
					i--;
				}
			}
			else
			{
				if(a[i]==0x03)	return -1;
				if(i<b-1)
				{
					if(a[i]<0x20)
					{
						if(echo)
						{
							putchar('^');
							putchar(a[i]+'@');
						}
						i++;
						fflush(stdout);
					}
					else
					if(a[i]<0x80 || a[i]>0x9f)
					{
						if(echo)
							Write(Output(),&a[i],1);
						i++;
					}
				}
			}
		}
		if(i==1)
		{
			if(!hotkeys)	/* getchar-mode */
			{
				break;
			}
			f=0;
			while(hotkeys[f]!=a[0] && hotkeys[f])	f++;
			if(hotkeys[f]==a[0])
			{
				a[1]=0;
				break;
			}
		}
	}
	if(echo)
		printf("\n");
	return 0;
}
