
int logger_status;
int logger_handle;
string logger_path;


// log file and print operation in file 'doclog'

void logger_fix(int user, int file)
{
 int h = 0;
 string f, s, t;

 h = fileopen(logger_path, "a");
 if(!h)
 {
  s = "{LOGGER_01}";
  translate(s);
  messagebox(s);
  return;
 }

 if(user == 5 || user == 6)
  file = filefromview(file);
 fileinfo(file, f);

 gettimestring("%24:%MI:%SE %ZDY%ST %M3 %YR", t);

 switch(user)
 {
 case 0:
        s = "{LOGGER_02}";
        break;
 case 1:
        s = "{LOGGER_03}";
        break;
 case 2:
        s = "{LOGGER_04}";
        break;
 case 3:
        s = "{LOGGER_05}";
        break;
 case 4:
        s = "{LOGGER_06}";
        break;
 case 5:
        s = "{LOGGER_07}";
        break;
 case 6:
        s = "{LOGGER_08}";
        break;
 case 7:
        s = "{LOGGER_09}";
        break;
 }
 translate(s);
 filewrites(f + " " + t + " - " + s + "\n", h);

 fileclose(h);
}


// set up events

void logger_setevent(int i)
{ 
 int EVENT_FOPEN      = 0x1;
 int EVENT_FCLOSE     = 0x2;
 int EVENT_NEWDOCF    = 0x5f;
 int EVENT_BAREDOCF   = 0x6f;
 int EVENT_LOADSTYLEF = 0x7f;
 int EVENT_PRSTART    = 0x10c;
 int EVENT_PREND      = 0x10d;
 int EVENT_FILESAVED  = 0x211;

 if(i)
 {
 addeventhandler(EVENT_FOPEN, 0, "logger_fix");
 addeventhandler(EVENT_FCLOSE, 1, "logger_fix");
 addeventhandler(EVENT_NEWDOCF, 2, "logger_fix");
 addeventhandler(EVENT_BAREDOCF, 3, "logger_fix");
 addeventhandler(EVENT_LOADSTYLEF, 4, "logger_fix");
 addeventhandler(EVENT_PRSTART, 5, "logger_fix");
 addeventhandler(EVENT_PREND, 6, "logger_fix");
 addeventhandler(EVENT_FILESAVED, 7, "logger_fix");
 }
 else
 {
 remeventhandler(EVENT_FOPEN, 0, "logger_fix");
 remeventhandler(EVENT_FCLOSE, 1, "logger_fix");
 remeventhandler(EVENT_NEWDOCF, 2, "logger_fix");
 remeventhandler(EVENT_BAREDOCF, 3, "logger_fix");
 remeventhandler(EVENT_LOADSTYLEF, 4, "logger_fix");
 remeventhandler(EVENT_PRSTART, 5, "logger_fix");
 remeventhandler(EVENT_PREND, 6, "logger_fix");
 remeventhandler(EVENT_FILESAVED, 7, "logger_fix");
 }

 logger_status = i;
}


// Deal with 'Document logger' menu entry

int logger_entry(int entry, int subcode)
{
 if(subcode >= 0)
  return(0);

 logger_setevent(!logger_status);
 return(0);
}


// Tick or un-tick 'Logger' menu entry

int logger_flags(int entry, string &text)
{
 return(logger_status);
}


// Deal with 'View log' menu entry

int logger_viewentry(int entry, int subcode)
{
 osclis("filer_run " + logger_path);
 return(0);
}


int logger_menu(int open)
{
 return(logger_handle);
}


// add 'Document logger' entry to 'Applets' menu and enable logging by default

void main(void)
{
 script_menu_initialise();

 logger_path = "OvationPro$AppletsDir";
 getenvs(logger_path);
 logger_path += ".!Logger.doclog";

 addentry_menu(script_handle,"logger_entry","logger_flags","logger_menu","","{LOGGER_00}");

 logger_handle=create_menu("{LOGGER_10}");
 addentry_menu(logger_handle,"logger_viewentry","","","","{LOGGER_11}");

 logger_setevent(1);
}