// Cookies v1.00 (24/2/98)
//
// Inserts a random quote into an Ovation Pro Document
//
// Tony Howat, (c) Risc User 1998

int cookie_rnd_seed=1,cookie_count=0;
string cookie_filename;

int cookie_rnd(void)
{
  int result;
  cookie_rnd_seed=(cookie_rnd_seed*1103515245)+12345;
  result=cookie_rnd_seed >> 16;
  if(result<0)
    result=0-result; /* get rid of any negative results */
  return(result);
}

int cookie_count_cookies(void)
{
  int file;
  string error;

  file=fileopen(cookie_filename,"r");

  if(!file)
  {
    error="{COOKIES_NOFILE}"+" ("+cookie_filename+")";
    errorbox(error);
  }
  
  // now scan through the file looking for nulls

  while(!fileeof(file))
  {
    if(filegetc(file)==0)
      ++cookie_count;
  }

  fileclose(file);
}

// deal with 'Cookies' menu entry

int cookies_entry(int entry, int subcode)
{
  int file, chosen=0, firstchar=0xff, c=0;
  string error, cooky;

  cookie_rnd_seed = (clock() * 4267) & 0xffffffff;

  file=fileopen(cookie_filename,"r");

  if(!file)
  {
    error="{COOKIES_NOFILE}"+" ("+cookie_filename+")";
    errorbox(error);
  }

  if(cookie_count)
  {
    chosen=cookie_rnd();
    chosen=chosen % cookie_count;
    c=0;
  
    // now scan through the file looking for our cooky
  
    while((!fileeof(file)) && (c!=chosen))
    {
      if(filegetc(file)==0)
        ++c;
    }
  
    filereads(cooky,file); // skip leading newline
  
    while(firstchar!=0)
    {
      firstchar=filegetc(file);
      if(firstchar!=0)
      {
        type(chars(firstchar));
        filereads(cooky,file);
        type(cooky); 
      }
    }
  }
 
  fileclose(file);

  return(0);
}

// add our option to the applet menu

void main(void)
{
  cookie_filename="OvationPro$AppletsDir";
  getenvs(cookie_filename);
  cookie_filename+=".!Cookies.AResources.Cookies";

  cookie_count_cookies();
  script_menu_initialise();
  addentry_menu(script_handle,"cookies_entry","","","","{COOKIES_00}");
}
