extern unsigned long get_event();
extern char getkey(),getesc();

static struct NewWindow myNewLoadWindow = {
 100,40,L_WINDOW_BREITE,210,
	-1,-1,
	0,0,
	0,0,
	0,
	0,0,
	0,0,0,0,
	WBENCHSCREEN
};

static struct Window *myLoadWindow;
static struct RastPort *myrp;
static char *liste[MAXFILES];

static FILE *fp;

static
change(line)
{
	RectFill(myrp,10l,(long)(line*10+13),(long)(8*25+10),(long)(line*10+21));
	SetDrMd(myrp,JAM1);
	SetAPen(myrp,1l);
}

static
char * 
ausw()
{
 int i,line,ende,last,slen;
	char c,mybuf[30],*ptr,*retval=0;

	for(i=0;(ptr=scdir(PATTXT))&&i<MAXFILES;i++) {
	 slen=strlen(ptr)-EXTENSIONLEN;
		ptr[slen]=0;
	 liste[i]=malloc(slen);
		strcpy(liste[i],ptr);
	}
	if(last=i)
		if(myLoadWindow=OpenWindow(&myNewLoadWindow)) {
	  myrp=myLoadWindow->RPort;
			SetAPen(myrp,1l);
			RectFill(myrp,0l,0l,(long)L_WINDOW_BREITE,9l);
			SetAPen(myrp,0l);
			SetDrMd(myrp,JAM1);
			Move(myrp,(long)((L_WINDOW_BREITE-8*LADENLEN)/2),8l);
			Text(myrp,LADENTXT,(long)LADENLEN);

			SetAPen(myrp,1l);
			i=0;
			line=1;
			while(line<18&&i<last) {
			 sprintf(mybuf,"%3d %20s",i+1,liste[i]);
				Move(myrp,10l,(long)(line*10+20));
				Text(myrp,mybuf,(long)strlen(mybuf));
				line++;
				i++;
			}
			line=1; 
			i=0;
		 SetDrMd(myrp,COMPLEMENT);
			change(1);
			ende=0;
	  do {
				c=0;
				do {
				 if(get_event()==RAWKEY)c=getkey();
				}while(!c);
				switch(c)
				{
				 case 0x1b: /* Escape */
					 retval=0;
						ende=1;
						break;
				 case 0xd: /* Return */
						retval=liste[i];
						ende=1;
						break;
				 case -101:
					 c=getesc();
						switch(c) {
						 case 'A':          /* oben */
							 if(i>0) {
									i--;
								 SetDrMd(myrp,COMPLEMENT);
									change(line);
									if(line>1) line--;
									else {
									 SetAPen(myrp,0l);
										change(17);
									 ScrollRaster(myrp,0l,-10l,15l,5l,295l,205l);
									 sprintf(mybuf,"%3d %20s",i+1,liste[i]);
										Move(myrp,10l,(long)(line*10+20));
										Text(myrp,mybuf,(long)strlen(mybuf));
	        }
								 SetDrMd(myrp,COMPLEMENT);
									change(line);
								}
								break;
							case 'B':    /* unten */
							 if(i+1<last) {
									i++;
								 SetDrMd(myrp,COMPLEMENT);
									change(line);
									if(line<17)
									 line++;
									else {
									 SetAPen(myrp,0l);
										change(1);
									 ScrollRaster(myrp,0l,10l,5l,15l,295l,205l);
									 sprintf(mybuf,"%3d %20s",i+1,liste[i]);
										Move(myrp,10l,(long)(line*10+20));
										Text(myrp,mybuf,(long)strlen(mybuf));
									}
								 SetDrMd(myrp,COMPLEMENT);
									change(line);
								}
								break;
						} /* switch esc */
						break;
				} /* switch c */
			}while(!ende);
			CloseWindow(myLoadWindow);
	 }
	return retval;
}

void
load()
{
 struct Posten *Letzter,*Pptr;
	int retval=0,i;
 unsigned e;
	char *load_file_name;
	char string[50];

 load_file_name=ausw();
	if(load_file_name) {
		strcpy(filename,load_file_name);
		strcpy(string,load_file_name);
		strcat(string,EXTENSIONTXT);
	 if(fp=fopen(string,"r")) {
			draft=getw(fp);
			subsuper=getw(fp);
			elpi=getw(fp);
			fix=getw(fp);
			cond=getw(fp);
			fread(mypara,sizeof(mypara),1,fp);
			fread(marked,sizeof(marked),1,fp);
			for(i=0;i<NUMCHARS;i++)
				if(marked[i]) fread(charbuf[i],BYTES_PER_COL*XMAX,1,fp);
				else setmem(charbuf[i],BYTES_PER_COL*XMAX,'\0');
	  fclose(fp);
	 }
	}
}

void
InitTextRequest()
{
 InitRequester(&textrequest);
	textrequest.LeftEdge=500;
	textrequest.TopEdge=GBASE+140;
	textrequest.Width=106;
	textrequest.Height=32;
	textrequest.ReqGadget=&Gadget_SaveName;
	textrequest.ReqText=&IText_FileName;
	textrequest.BackFill=1;
	textrequest.ReqBorder=NULL;
}

void
initsave()
{
	InitTextRequest();
 Request(&textrequest,myWindowPtr);
	ActivateGadget(&Gadget_SaveName,myWindowPtr,&textrequest);
	/* warum geht das nicht ? */
}

void
save()
{
 int i;

	if(*filename) {
		strcat(filename,EXTENSIONTXT);
	 if(fp=fopen(filename,"w")) {
			movmem(tempbuf,charbuf[cnum],BYTES_PER_COL*XMAX);
		 mypara[cnum]=temppara;
			putw(draft,fp);
			putw(subsuper,fp);
			putw(elpi,fp);
			putw(fix,fp);
			putw(cond,fp);
			fwrite(mypara,sizeof(mypara),1,fp);
			fwrite(marked,sizeof(marked),1,fp);
			for(i=0;i<NUMCHARS;i++)
				if(marked[i]) fwrite(charbuf[i],BYTES_PER_COL*XMAX,1,fp);
			fclose(fp);
		}
	}
}

void
initfile()
{
 strcpy(filename,DEFAULTNAME);
}
