#include "DRW/drwwh.h"
#include "DRW/drwWwinit.h"
#include "DRW/drwWxdata.h"
#include "Savertmpl/stdsaveI.h"
#ifndef drw_u_trdf_H
 #include "drwUTrdf.h"
#endif

#include "DRW/drwWitext.h"
#include "DRW/drwWiflags.h"

#ifndef saverh_H
 #include "Saver/saverh.h"
#endif

saver_appdata appdata;


static void saver_settype(saver_file_types savetype)

{

char fileiconstr[saver_filetype_str_len + 8];

appdata.savetype =savetype;

sprintf(fileiconstr,
        "file_%s",
        appdata.fdata[savetype].filetype);

if (pwd->uwd->save_fileiconno != (wimp_i) -1)
 drw_set_icon_name(pwd->uwd->savebox,
                   pwd->uwd->save_fileiconno,
                   'S',
                   fileiconstr);

if (appdata.fdata[savetype].fticon != (wimp_i) -1)
 drw_wimp_iconselect(pwd->uwd->savebox,
                     appdata.fdata[savetype].fticon,
                     1);

if (pwd->uwd->save_filenameiconno != (wimp_i) -1)
 {
  /* Reuse the fileiconstr string to set the filenameicon leafname. */

  sprintf(fileiconstr,
          "%sFile",
          appdata.fdata[savetype].leafname);

  drw_wimp_puticontext(pwd->uwd->savebox,
                      pwd->uwd->save_filenameiconno,
                      fileiconstr);
 }

}


extern void Savertmpl_stdsave_tin(drw_uw_data *uwd,
                                  void *userdata)

{

saver_file_types i;

strcpy(appdata.fdata[saver_textfile].filetype, "FFF");
strcpy(appdata.fdata[saver_datafile].filetype, "FFD");
strcpy(appdata.fdata[saver_obeyfile].filetype, "FEB");

strcpy(appdata.fdata[saver_textfile].leafname, "Text");
strcpy(appdata.fdata[saver_datafile].leafname, "Data");
strcpy(appdata.fdata[saver_obeyfile].leafname, "Obey");

for (i = saver_textfile;
     i < saver_num_filetypes;
     i = (saver_file_types) ((int) i + 1))
 {
  appdata.fdata[i].fticon = (wimp_i) -1;

  if (pwd->uwd->savebox != (wimp_w) -1)
   {
    appdata.fdata[i].fticon = drw_get_iconno(pwd->uwd->savebox,
                                             appdata.fdata[i].filetype,
                                             0,
                                             -1);
   }
 }

appdata.savetype = saver_textfile;
saver_settype(saver_textfile);

}


extern char *Savertmpl_stdsave_fileicon_sft(wimp_w window,
                                            char *ftype,
                                            void *userdata)

{

char *s;

s = NULL;

if (window == pwd->uwd->savebox)
 {
  if (appdata.savetype >= saver_textfile &&
      appdata.savetype < saver_num_filetypes)
   s = appdata.fdata[appdata.savetype].filetype;
 }

return s;

}


extern int Savertmpl_stdsave_FFF(wimp_w whan,
                                 wimp_i icon,
                                 wimp_mouse_state buttontype,
                                 int mousex,
                                 int mousey,
                                 int x,
                                 int y,
                                 void *userdata)

{

saver_settype(saver_textfile);
return TRUE;

}


extern int Savertmpl_stdsave_FFD(wimp_w whan,
                                 wimp_i icon,
                                 wimp_mouse_state buttontype,
                                 int mousex,
                                 int mousey,
                                 int x,
                                 int y,
                                 void *userdata)

{

saver_settype(saver_datafile);
return TRUE;

}


extern int Savertmpl_stdsave_FEB(wimp_w whan,
                                 wimp_i icon,
                                 wimp_mouse_state buttontype,
                                 int mousex,
                                 int mousey,
                                 int x,
                                 int y,
                                 void *userdata)

{

saver_settype(saver_obeyfile);
return TRUE;

}


static int saver_save_file(char *filename, char *leafname)

{

FILE *fd;
int q;

q = 0;

if (appdata.savetype >= saver_textfile &&
    appdata.savetype < saver_num_filetypes)
 {
  if ((fd = fopen(filename, "w")))
   {
    fprintf(fd,
            "This is a%s %s file from saver",
            appdata.savetype != saver_obeyfile ? "": "n",
            appdata.fdata[appdata.savetype].leafname);

    if (ferror(fd))
     q = -1;

    fclose(fd);

    if (!ferror(fd) && q != -1)
     q = 1;
    else
     q = 0;
   }
 }

return q;

}


extern int Savertmpl_stdsave_ok_svd(int myref,
                                    char *filename,
                                    char *leafname,
                                    wimp_w window,
                                    int *fndone,
                                    void *userdata)

{

int q;

q = 0;

if (window == pwd->uwd->savebox)
 q = saver_save_file(filename, leafname);

if (fndone)
 *fndone = TRUE;

return q;

}


