// Version 1.00 24/03/97  First full release.


int hidedoc_viewhandle;
int hidedoc_dischandle;



// if close icon clicked, ask whether document is to be hidden

int hidedoc_fix(int user, int file, int claimed)
{
 string s;
 int    bits;

 bits=fileinfo(file, s);
 if(bbc_inkey(-2) && ((bits & (1<<5))==0))
  return(1);

 return(claimed);
}


// extract leafname from pathname

string hidedoc_leafname(string &s)
{
 int i;

 for(i = slen(s); i > 0; --i)
 {
  if(mids(s, i - 1, 1) == ".")
  {
   s = s << i;
   break;
  }
 }
 return(s);
}


// rebuild view menu each time it is opened

int hidedoc_viewmenu(int open)
{
 string s;
 int f;

 if(hidedoc_viewhandle)
  delete_menu(hidedoc_viewhandle);
 hidedoc_viewhandle=create_menu("{HIDEDOC_01}");

 f = 0;
 while((f = nextuserfile(f)))
 {
  fileinfo(f, s);
  if(!nextview(0, f))
   addentry_menu(hidedoc_viewhandle,"hidedoc_viewmenu_entry","","","", hidedoc_leafname(s));
 }
 return(hidedoc_viewhandle);
}


// rebuild discard menu each time it is opened

int hidedoc_discmenu(int open)
{
 string s;
 int f, i;

 if(hidedoc_dischandle)
  delete_menu(hidedoc_dischandle);
 hidedoc_dischandle=create_menu("{HIDEDOC_03}");

 f = 0;
 while((f = nextuserfile(f)))
 {
  i = fileinfo(f, s);
  if(!nextview(0,f))
  {
   s = hidedoc_leafname(s) + ((i & 2) ? " *" : "");
   addentry_menu(hidedoc_dischandle,"hidedoc_discmenu_entry","","","", s);
  }
 }
 return(hidedoc_dischandle);
}


// deal with click on 'View document' menu

int hidedoc_viewmenu_entry(int entry, int subcode)
{
 string s;
 int f, i;

 f=i=0;
 while(i<=entry)
 {
  f=nextuserfile(f);
  if(!f) break;
  fileinfo(f,s);

  if(!nextview(0,f)) i++;
 }

 if(f)
 {
  rementry_menu(hidedoc_viewhandle, entry);
  setcurrentfile(f);
  newview(0);
 }
}


// deal with click on 'Discard document' menu

int hidedoc_discmenu_entry(int entry, int subcode)
{
 int f, i;
 string s; 

 f = i = 0;
 while(i <= entry)
 {
  f=nextuserfile(f);
  fileinfo(f,s);

  if(!nextview(0,f))
   ++i;
 }
 rementry_menu(hidedoc_dischandle, entry);
 i=fileinfo(f,s);
 if(!(i&0x2) || !dcsfile(f)) filescrap(f);
}


// shade or un-shade 'View document'  and 'Discard document' menu entries

int hidedoc_flags(int entry, string &text)
{
 int f;
 string s;

 f = 0;
 while((f=nextuserfile(f)))
 {
  fileinfo(f, s);
  if(!nextview(0,f))
   return(0);
 }
 return(SHADED);
}


// find the position of an entry on a menu

int hidedoc_findmenuentry(int handle, string &t)
{
 int entry;
 string s;

 entry = 0;
 while(menudefstring(handle, entry, 4, s))
 {
  if(s == t)
   return(entry);
  entry++;
 }
 return(0);
}


// create 'Hide document' submenu and add it to the icon bar menu

void main(void)
{
 int i;

 i = hidedoc_findmenuentry(info_handle, "Quit");
 insertentry_menu(info_handle,i,"","hidedoc_flags","hidedoc_viewmenu","","{HIDEDOC_00}");
 insertentry_menu(info_handle,i+1,"","hidedoc_flags","hidedoc_discmenu","","{HIDEDOC_02}");

 addeventhandler(0x309, 0, "hidedoc_fix");
}
