// ->ver


int    ver_handle;
string ver_path;
string ver_created;
string ver_edited;
string ver_org;
string ver_version;
int    ver_file;


int    ver_tag=('v'<<24)|('e'<<16)|('r'<<8);


void ver_timenow(string & s)
{
 string timef;
 string datef;
 string format;

 gettimeformat(datef,timef);
 format=timef+" "+datef;
 gettimestring(format,s);
}




void ver_loaddefaults(void)
{
 int fh;

 fh=fileopen(ver_path,"r");
 if(fh)
 {
  filereads(ver_created,fh);
  filereads(ver_edited,fh);
  filereads(ver_org,fh);
  filereads(ver_version,fh);
  fileclose(fh);
 }
}


void ver_savedefaults(void)
{
 int fh;

 fh=fileopen(ver_path,"w");
 if(fh)
 {
  filewrites(ver_created+"\n",fh);
  filewrites(ver_edited+"\n",fh);
  filewrites(ver_org+"\n",fh);
  filewrites(ver_version+"\n",fh);
  fileclose(fh);
 }
}


void ver_loaddefaultswindow(void)
{
 string s;
 string format;
 string timef;
 string datef;

 writeicon(ver_handle,9,"");
 writeicon(ver_handle,14,ver_org);
 writeicon(ver_handle,5,ver_version);
 writeicon(ver_handle,1,ver_created);
 writeicon(ver_handle,3,ver_edited);
 writeicon(ver_handle,16,"1");

 ver_timenow(s);

 writeicon(ver_handle,13,s);
 writeicon(ver_handle,15,s);
}



void ver_savedefaultswindow(void)
{
 ver_created=readicon(ver_handle,1);
 ver_edited=readicon(ver_handle,3);
 ver_version=readicon(ver_handle,5);
 ver_org=readicon(ver_handle,14);
}



void ver_updatedocument(void)
{
 string s;
          
 s=readicon(ver_handle,16);               // generation
 tagwrite(ver_file,ver_tag+0,stoi(s),0);

 s=readicon(ver_handle,1);                // created by
 tagwrites(ver_file,ver_tag+1,s);

 s=readicon(ver_handle,3);               // edited by
 tagwrites(ver_file,ver_tag+2,s);

 s=readicon(ver_handle,5);                // version
 tagwrites(ver_file,ver_tag+3,s);

 s=readicon(ver_handle,14);                // organisation
 tagwrites(ver_file,ver_tag+4,s);

 s=readicon(ver_handle,9);                // comment
 tagwrites(ver_file,ver_tag+5,s);

 s=readicon(ver_handle,13);               // creation date
 tagwrites(ver_file,ver_tag+6,s);

 s=readicon(ver_handle,15);               // edited date
 tagwrites(ver_file,ver_tag+7,s);
}



void ver_loaddocument(void)
{
 string s;
 int    generation;

 if(tagexists(ver_file,ver_tag+0,0))
 {
  generation=tagread(ver_file,ver_tag+0,0);     // generation
  writeicon(ver_handle,16,itos(generation));

  tagreads(ver_file,ver_tag+1,s);               // created by
  writeicon(ver_handle,1,s);

  tagreads(ver_file,ver_tag+2,s);               // edited by
  writeicon(ver_handle,3,s);

  tagreads(ver_file,ver_tag+3,s);               // version
  writeicon(ver_handle,5,s);

  tagreads(ver_file,ver_tag+4,s);               // organisation
  writeicon(ver_handle,14,s);

  tagreads(ver_file,ver_tag+5,s);               // comment
  writeicon(ver_handle,9,s);

  tagreads(ver_file,ver_tag+6,s);               // creation date
  writeicon(ver_handle,13,s);

  tagreads(ver_file,ver_tag+7,s);               // edited date
  writeicon(ver_handle,15,s);
 }
 else
 {
  ver_loaddefaultswindow();
 }
}






void ver_click(int handle, int icon, int bbits, int mx, int my)
{
 switch(icon)
 {
  case  7:
          ver_updatedocument();

  case  6:
          close_window(handle);
          break;

  case 10:
          ver_loaddefaultswindow();
          break;

  case 11:
          ver_savedefaultswindow();
          ver_savedefaults();
          break;
 }
}



int ver_keypress(int handle, int icon, int key)
{
 if(key==13) ver_updatedocument();
 if(key==13 || key==27) {close_window(handle);return(-1);}
 return(key);
}




int ver_command(int subcode,int all)
{
 ver_file=currentfile();
 ver_loaddocument();

 display_window(ver_handle, 0, 1+2);

 return(0);
}




void ver_close(int user, int file)
{
 if(file==ver_file) close_window(ver_handle);
}



void ver_save(int user, int file, string & name)
{
 string s;
 int    generation;

 if(tagexists(file,ver_tag+0,0))
 {
  generation=tagread(file,ver_tag+0,0);      // the next generation
  tagwrite(file,ver_tag+0,generation+1,0);

  tagwrites(file,ver_tag+2,ver_edited);  // set edited by

  ver_timenow(s);
  tagwrites(file,ver_tag+7,s);           // set edited date
 }
}




void ver_new(int user,int file)
{
 string s;
          
 tagwrite(file,ver_tag+0,1,0);            // first generation

 tagwrites(file,ver_tag+1,ver_created);   // created by

 tagwrites(file,ver_tag+2,ver_edited);    // edited by

 tagwrites(file,ver_tag+3,ver_version);   // version

 tagwrites(file,ver_tag+4,ver_org);       // organisation

 tagwrites(file,ver_tag+5,"");            // comment

 ver_timenow(s);

 tagwrites(file,ver_tag+6,s);             // creation date

 tagwrites(file,ver_tag+7,s);             // edited date
}





void main(void)
{
 ver_path="OvationPro$AppletsDir";
 getenvs(ver_path);
 ver_path+=".!Version.Defaults";

 ver_loaddefaults();

 ver_handle = create_window("ver_main");
 addwindowhandler(0,ver_handle,"ver_click");
 addwindowhandler(1,ver_handle,"ver_keypress");

 script_menu_initialise();
 addentry_menu(script_handle,"ver_command","","","","{VER_00}");

 addeventhandler(0x7,  0, "ver_save");

 addeventhandler(0x5F, 0, "ver_new"); // icon bar
 addeventhandler(0x6F, 0, "ver_new"); // DDL
 addeventhandler(0x7F, 0, "ver_new"); // style sheet

 addeventhandler(0x2,  0, "ver_close");
}

