// Version 1.00 07/10/96  First full release.
//         1.01 08/01/97  'Never saved' option changed to 'Newer files'.
//         1.02 22/05/97  Error messages now defined in messages file.
//                        Uses OvationPro$AppletsDir to read/write resources.
//                        Saves choices when Ovation Pro is quit.


int ovrwrite_handle;
int ovrwrite_status;
int ovrwrite_all;
string ovrwrite_choicespath;


// read choices

void ovrwrite_readchoices(void)
{
 int h;

 h = fileopen(ovrwrite_choicespath, "rb");
 if(h)
 {
  ovrwrite_all = filegetc(h);
  fileclose(h);
 }
 else
  ovrwrite_all = 0;
}


// write choices

void ovrwrite_quit(int user)
{
 int h;

 h = fileopen(ovrwrite_choicespath, "wb");
 if(h)
 {
  fileputc(ovrwrite_all, h);
  fileclose(h);
 }
}


// if document already exists, give warning

int ovrwrite_fix(int user, int file, string &s)
{
 string t, memtime, disctime;;

 if (objectexists(s))
 {
  if(!(fileinfo(file, t) & 1) || ovrwrite_all)
  {
   t = "{OVRWRITE_04}";
   translate(t);
   if(confirm(t) != 1)
    s = "";
  }
  else
  {
   getfiletimestring("%CE%YR%MN%DY%24%MI%SE", memtime, file);
   gettimestamp("%CE%YR%MN%DY%24%MI%SE", disctime, s);
   if(disctime > memtime)
   {
    t = "{OVRWRITE_05}";
    translate(t);
    if(confirm(t) != 1)
     s = "";
   }
  }
 }
}


// set up EVENT_FPRESAVE events

void ovrwrite_setevent(int i)
{
 if (i)  
  addeventhandler(0x7, 0, "ovrwrite_fix");
 else
  remeventhandler(0x7, 0, "ovrwrite_fix");

 ovrwrite_status = i;
}


// deal with 'Overwrite?' menu entry

int ovrwrite_entry(int entry, int subcode)
{
 if(subcode == -1)
  ovrwrite_setevent(!ovrwrite_status);
 return(0);
}


// tick or un-tick 'Overwrite' menu entry

int ovrwrite_flags(int entry, string &text)
{
 return(ovrwrite_status);
}


// deal with 'Overwrite?' menu entries

int ovrwrite_menu_entry(int entry, int subcode)
{
 ovrwrite_all = !ovrwrite_all;
 return(0);
}


// tick or un-tick 'Overwrite' menu entries

int ovrwrite_menu_flags(int entry, string &text)
{
 switch(entry)
 {
 case 0:
        return(!ovrwrite_all);
        break;
 case 1:
        return(ovrwrite_all);
        break;
 }
}


int ovrwrite_menu(int open)
{
 return(ovrwrite_handle);
}


// create 'Overwrite' menu and add it to 'Applets' menu
// enable 'Never saved' overwrite warning

void main(void)
{
 script_menu_initialise();

 ovrwrite_choicespath = "OvationPro$AppletsDir";
 getenvs(ovrwrite_choicespath);
 ovrwrite_choicespath += ".!OvrWrite.Choices";

 ovrwrite_handle = create_menu("{OVRWRITE_01}");
 addentry_menu(ovrwrite_handle, "ovrwrite_menu_entry","ovrwrite_menu_flags","","","{OVRWRITE_02}");
 addentry_menu(ovrwrite_handle, "ovrwrite_menu_entry","ovrwrite_menu_flags","","","{OVRWRITE_03}");

 addentry_menu(script_handle,"ovrwrite_entry","ovrwrite_flags","ovrwrite_menu","","{OVRWRITE_00}");
 addeventhandler(0x004, 0, "ovrwrite_quit");
 ovrwrite_readchoices();
 ovrwrite_setevent(1);
}
