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


 /******  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,*CJbuf;


 /******  SubRoutines  */

TopofFile()
{
if (Wline == Wfile->first) return(0);
cursor(0);
ModLine();
Wfile->ActLine = 1;
Wy = 0;
Wline = Wfile->first;
Wlen = Wline->len;
Wpos = 0;
cpystr(Wline->string,Wlen,Wbuf);
SPage(Wline,0);
}


EndofFile()
{
if (Wline == Wfile->last) return(0);
cursor(0);
ModLine();
Wfile->ActLine = Wfile->AnzLines;
Wy = size()-1;
Wline = Wfile->last;
Wlen = Wline->len;
Wpos = 0;
cpystr(Wline->string,Wlen,Wbuf);
SPage(Wfile->last,size()-1);
}


PageUp()
{
struct Line *Help;

if (Wline == Wfile->first) return(0);
cursor(0);
ModLine();
Help = search(Wline,-size());
if (Help == 0)
	{
	Wfile->ActLine = 1;
	Wline = Wfile->first;
	Wy = 0;
	}
else
	{
	Wline = Help;
	Wfile->ActLine -= size();
	}
Wlen = Wline->len;
Wpos = 0;
cpystr(Wline->string,Wlen,Wbuf);
SPage(Wline,Wy);
}


PageDown()
{
struct Line *Help;
int oldact;

oldact = Wfile->ActLine;
if (Wline == Wfile->last) return(0);
cursor(0);
ModLine();
Help = search(Wline,size());
if (Help == 0)
	{
	Wfile->ActLine = Wfile->AnzLines;
	Wline = Wfile->last;
	}
else
	{
	Wline = Help;
	Wfile->ActLine += size();
	}
Wlen = Wline->len;
Wpos = 0;
cpystr(Wline->string,Wlen,Wbuf);
if ((size()-Wy-1) >= (Wfile->AnzLines - oldact))
	{
	Wy += (Wfile->AnzLines - oldact);
	PrtPage(search(Wline,-Wy));
	ActPrt();
	PrtLine(Wpos,Wy,Wbuf,Wlen,1);
	}
else SPage(Wline,Wy);
}


CtrlA()
{
Wpos = 0;
PrtLine(Wpos,Wy,Wbuf,Wlen,1);
}


CtrlZ()
{
Wpos = Wlen-1;
PrtLine(Wpos,Wy,Wbuf,Wlen,1);
}


CtrlY()
{
Wfile->SFlag = 0;
Wlen = Wpos+1;
*(Wbuf+Wpos) = 10;
PrtLine(Wpos,Wy,Wbuf,Wlen,1);
}


CtrlE()
{
struct Line *Help;

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


CtrlU()
{
struct Line *H;

ModLine();
H            = Wfile->undel;
if (H == 0) { DisplayBeep(0); return(0); }
if (Wfile->ActLine != 1) Wline->prev->next = H;
else Wfile->first = H;
H->prev      = Wline->prev;
Wline->prev  = H;
H->next      = Wline;
Wfile->AnzLines++;
Wfile->undel = 0;
Wline        = H;
Wlen         = Wline->len;
Wpos         = 0;
cpystr(Wline->string,Wlen,Wbuf);
Shift(1,Wy);
PrtLine(Wpos,Wy,Wbuf,Wlen,1);
}


CtrlX()
{
struct File *old,*new;

if (System.AnzFiles == 1) { DisplayBeep(0); return(0); }
old            = &(System.Root[System.Active]);
new            = &(System.Root[1-System.Active]);
ModLine();
old->x         = Wx;
old->y         = Wy;
old->Actl.Line = Wline;
old->Actl.pos  = Wpos;
Wx             = new->x;
Wy             = new->y;
Wline          = new->Actl.Line;
Wpos           = new->Actl.pos;
Wlen           = Wline->len;
Wfile          = new;
cpystr(Wline->string,Wlen,Wbuf);
System.Mode   = 1-System.Mode;
System.Active = 1-System.Active;
CtrlD();
}


CtrlD()
{
if (System.AnzFiles == 1) { DisplayBeep(0); return(0); }
System.Mode = 1-System.Mode;
if (Wy > size()-1) Wy = size()-1;
if (System.Root[1-System.Active].y > size()-1) System.Root[1-System.Active].y = size()-1;
BuildFullDisplay();
}


CtrlJ()
{
int i,w=0,z=0;

i = Input(CJbuf,"Jump to Line:",4);
if (i == 0) { PrtLine(Wpos,Wy,Wbuf,Wlen,1); return(0); }

for (i=4-lenstr(CJbuf);i < 4;i++) w += ((CJbuf[z++]-48)*pow(3-i));
if (w <= 0) { PrtLine(Wpos,Wy,Wbuf,Wlen,1); DisplayBeep(0); return(0); }
if (w > Wfile->AnzLines) w = Wfile->AnzLines;
ModLine();
Wfile->ActLine = w;
Wline = search(Wfile->first,w-1);
Wlen  = Wline->len;
Wpos  = 0;
Wy    = 12;
cpystr(Wline->string,Wlen,Wbuf);
SPage(Wline,Wy);
}


CtrlN()
{
int i;

i = Input(Wfile->Fname,"New Filename:",32);
if (i == 0) { PrtLine(Wpos,Wy,Wbuf,Wlen,1); return(0); }
Wfile->SFlag = 0;
InfoPrt(System.Active);
PrtLine(Wpos,Wy,Wbuf,Wlen,1);
}


CtrlO()
{
struct File *f;
int i;

if (System.AnzFiles == 2) { DisplayBeep(0); return(0); }
f = &System.Root[1];
InitFile(f,"");
i = Input(f->Fname,"File to Open:",32);
if ((i == 0) || (*(f->Fname) == 0)) { PrtLine(Wpos,Wy,Wbuf,Wlen,1); return(0); }
LoadFile(f);
System.AnzFiles = 2;
System.Mode     = 0;
CtrlX();
}


 /******  EndofTextFile  */
