
#include <libraries/dos.h>
#include <libraries/reqtools.h>
#include <proto/reqtools.h>
#include <intuition/intuition.h>
#include <proto/graphics.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* #include "reqtools_inline.h" */

extern struct ReqToolsBase *ReqToolsBase;

void * rtAllocRequestA();

static struct rtFileRequester *filereq=NULL;
static char *returnstring=NULL;
static char filename[128]="";

static char *modestr[]={"Load picture","Save picture","Delete file"};
static char *gadtxt[]={"Load","Save","Delete"};

/*
#define RED(s) ((s)>>8)
#define GREEN(s) (((s)>>4)&0xf)
#define BLUE(s) ((s)&0xf)
*/

int InitRequest(void)
{
   if (filereq = rtAllocRequestA ((ULONG)RT_FILEREQ, NULL))
      return(0); /* all OK */
   else return(1); /* No Memory */
}
void FreeRequest(void)
{
   if(filereq) rtFreeRequest(filereq);
   filereq=NULL;
   if(returnstring) free(returnstring);
   returnstring=NULL;
}
static char *catstring(char *s1,char *s2)
{
   int len1,len2;
   len1=strlen(s1);
   len2=strlen(s2);
   if(returnstring) free(returnstring);
   returnstring=NULL;
   if(s1[len1-1]==':') {
      returnstring=malloc(len1+len2+1);
      if(!returnstring) return(0L);
      strcpy(returnstring,s1);
      strcat(returnstring,s2);
      return(returnstring);
   } else {
      returnstring=malloc(len1+len2+2);
      if(!returnstring) return(0L);
      strcpy(returnstring,s1);
      strcat(returnstring,"/");
      strcat(returnstring,s2);
      return(returnstring);
   }
}
char *FileRequest(struct Window *win,short mode)
{
/*   long col0,col1; */
   char *ret;

/*   col0=GetRGB4(win->WScreen->ViewPort.ColorMap,0L);
   col1=GetRGB4(win->WScreen->ViewPort.ColorMap,1L);

   SetRGB4(&win->WScreen->ViewPort,0L,0L,0L,0L);
   SetRGB4(&win->WScreen->ViewPort,1L,15L,15L,15L); */

   if(mode) {
      if(rtFileRequest(filereq,filename,modestr[mode],
         (ULONG)RT_Window,win,
         (ULONG)RTFI_OkText,gadtxt[mode],
         (ULONG)RTFI_Flags,(ULONG)FREQF_SAVE,(ULONG)TAG_END)) {
         ret=catstring(filereq->Dir,filename);
         rtFreeReqBuffer(filereq);
/*         SetRGB4(&win->WScreen->ViewPort,0L,RED(col0),GREEN(col0),BLUE(col0));
         SetRGB4(&win->WScreen->ViewPort,1L,RED(col1),GREEN(col1),BLUE(col1)); */
         return(ret);
      } else {
/*         SetRGB4(&win->WScreen->ViewPort,0L,RED(col0),GREEN(col0),BLUE(col0));
         SetRGB4(&win->WScreen->ViewPort,1L,RED(col1),GREEN(col1),BLUE(col1)); */
         return(NULL);
      }
   } else {
      if(rtFileRequest(filereq,filename,modestr[mode],
         (ULONG)RTFI_OkText,gadtxt[mode],
         (ULONG)RT_Window,win,(ULONG)TAG_END)) {
/*         SetRGB4(&win->WScreen->ViewPort,0L,RED(col0),GREEN(col0),BLUE(col0));
         SetRGB4(&win->WScreen->ViewPort,1L,RED(col1),GREEN(col1),BLUE(col1)); */
         return(catstring(filereq->Dir,filename));
      } else {
/*         SetRGB4(&win->WScreen->ViewPort,0L,RED(col0),GREEN(col0),BLUE(col0));
         SetRGB4(&win->WScreen->ViewPort,1L,RED(col1),GREEN(col1),BLUE(col1)); */
         return(NULL);
      }
   }
}

