
 /****************************************************************************
 **									    **
 **		-- TEdi --    (c) 21.4.88 by TAA			    **
 **									    **
 sub1************************************************************************/


 /******  Globals  */

extern struct System System;
extern struct File *Wfile;
extern struct Line *Wline;
extern UBYTE Wpos,Wlen;
extern int Wy,Wx,p2flag;
extern char *Wbuf,*bmp;
extern char UP[],DOWN[];


 /******  SubRoutines */

Left()
{
if (Wpos == 0)
	{
	if (Wline->prev == 0) return(0);
	if (p2flag == 1)
		{
		cursor(0);
		prtmd(1,0,JAM2);
		prt(0,Wy,Wbuf,Wlen);
		}
	ModLine();
	if (Wy == 0) print(DOWN);
	else Wy--;
	Wline = Wline->prev;
	Wlen  = Wline->len;
	Wpos  = Wlen-1;
	cpystr(Wline->string,Wlen,Wbuf);
	Wfile->ActLine--;
	ActPrt();
	PrtLine(Wpos,Wy,Wbuf,Wlen,1);
	}
else
	{
	Wpos--;
	PrtLine(Wpos,Wy,Wbuf,Wlen,1);
	}
}


Right()
{
if (Wpos == Wlen-1)
	{
	if (Wline->next == 0) return(0);
	if (p2flag == 1)
		{
		cursor(0);
		prtmd(1,0,JAM2);
		prt(0,Wy,Wbuf,Wlen);
		}
	ModLine();
	if(Wy == (size()-1)) print(UP);
	else Wy++;
	Wline = Wline->next;
	Wlen  = Wline->len;
	Wpos  = 0;
	cpystr(Wline->string,Wlen,Wbuf);
	Wfile->ActLine++;
	ActPrt();
	PrtLine(Wpos,Wy,Wbuf,Wlen,1);
	}
else
	{
	Wpos++;
	PrtLine(Wpos,Wy,Wbuf,Wlen,1);
	}
}


Help()
{
Wfile->Mode = 1 - Wfile->Mode;
InfoPrt(System.Active);
}


Character(c)
char c;
{
struct Line *Help;
int i;

if (Wfile->Mode == 1)
	{
	if(Wpos == Wlen-1)
		{
		Help = Wline->next;
		if (Help == 0) return(0);
		cpystr(Help->string,Help->len,Wbuf+Wlen);
		if (Wlen+Help->len >255) return(0);
		Wfile->SFlag = 0;
		Wlen += Help->len;
		*(Wbuf+Wpos) = c;
		Wpos++;
		Wline->next = Help->next;
		Help->next->prev = Wline;
		killine(Help);
		Wfile->AnzLines--;
		if (Wline->next == 0) Wfile->last = Wline;
		if (Wy+1 < size()) Shift(0,Wy+1);
		PrtLine(Wpos,Wy,Wbuf,Wlen,1);
		}
	else
		{
		Wfile->SFlag = 0;
		*(Wbuf+Wpos) = c;
		Wpos++;
		PrtLine(Wpos,Wy,Wbuf,Wlen,1);
		}
	}
else
	{
	if (Wlen == 255) { DisplayBeep(0); return(0); }
	Wfile->SFlag = 0;
	i = Wlen-1;
	do *(Wbuf+i+1) = *(Wbuf+i); while(i-- > Wpos);
	*(Wbuf+Wpos) = c;
	Wpos++;
	Wlen++;
	PrtLine(Wpos,Wy,Wbuf,Wlen,1);
	}
}


Return()
{
struct Line *Help;
int i,j;

Wfile->ActLine++;
Wfile->AnzLines++;
Wfile->SFlag     = 0;
for(i=0;(*(Wbuf+i) == 9) && (i < Wpos);i++);
Help             = AllocMem(sizeof(struct Line),MEMF_PUBLIC);
Help->len        = Wlen - Wpos+i;
Help->string     = AllocMem(Help->len,MEMF_PUBLIC);
for(j=0;j<i;j++) *(Help->string+j) = 9;
cpystr(Wbuf+Wpos,Help->len-i,Help->string+i);
Help->next       = Wline->next;
Wline->next      = Help;
if (Wline->next != 0) Help->next->prev = Help;
else Wfile->last = Help;
Help->prev       = Wline;
Wlen             = Wpos+1;
*(Wbuf+Wpos)     = 10;
ModLine();
if (Wline == Wfile->last) Wfile->last = Help;
Wline            = Help;
Wpos             = i;
Wlen             = Help->len;
cpystr(Help->string,Wlen,Wbuf);
if (Wy == (size()-1)) print(UP);
else
	{
	Wy++;
	Shift(1,Wy);
	}
prtmd(1,0,JAM2);
prt(0,trans(Wy-1),Wline->prev->string,Wline->prev->len);
PrtLine(Wpos,Wy,Wbuf,Wlen,1);
ActPrt();
}


Delete()
{
struct Line *Help;

if (Wpos == Wlen-1)
	{
	Help = Wline->next;
	if ((Help == 0)||(Wlen+Help->len-1 >255)) return(0);
	Wfile->SFlag = 0;
	cpystr(Help->string,Help->len,Wbuf+Wpos);
	Wlen += (Help->len-1);
	Wline->next = Help->next;
	Help->next->prev = Wline;
	killine(Help);
	Wfile->AnzLines--;
	if (Wline->next == 0) Wfile->last = Wline;
	if (Wy+1 < size()) Shift(0,Wy+1);
	PrtLine(Wpos,Wy,Wbuf,Wlen,1);
	}
else
	{
	Wfile->SFlag = 0;
	cpystr(Wbuf+Wpos+1,Wlen-Wpos-1,Wbuf+Wpos);
	Wlen--;
	PrtLine(Wpos,Wy,Wbuf,Wlen,1);
	}
}


Backspace()
{
struct Line *Help;

if (Wpos == 0)
	{
	Help = Wline->prev;
	if ((Help == 0)||(Wlen+Help->len-1 >255)) return(0);
	Wfile->SFlag = 0;
	cpystr(Help->string,Help->len,bmp);
	cpystr(Wbuf,Wlen,bmp+Help->len-1);
	cpystr(bmp,Wlen+Help->len-1,Wbuf);
	Wlen += (Help->len-1);
	Help->next = Wline->next;
	Help->next->prev = Help;
	if (Wline == Wfile->last) Wfile->last = Help;
	killine(Wline);
	Wline = Help;
	Wpos  = Help->len-1;
	Wfile->AnzLines--;
	Wfile->ActLine--;
	if (Wy != 0)
		{
		Shift(0,Wy);
		Wy--;
		}
	ActPrt();
	PrtLine(Wpos,Wy,Wbuf,Wlen,1);
	}
else
	{
	Wfile->SFlag = 0;
	cpystr(Wbuf+Wpos,Wlen-Wpos,Wbuf+Wpos-1);
	Wlen--;
	Wpos--;
	PrtLine(Wpos,Wy,Wbuf,Wlen,1);
	}
}
	

 /******  EndofTextFile  */

