// Version 1.00 03/10/96  First full release.
//         1.01 02/04/97  Now uses Ctrl Shift cursor keys.


int kselect_status;


// select text using Ctrl Shift cursor keys

int kselect_fix(int user,int view,int key)
{
 int b1, b2;
 int dir, unit;

 if(key < 0 || activetype(TEXTFRAME) <= 1)
  return(key);

 if(key == 444) {dir = 0; unit = 0; key = -1;} // cursor left
 else
 if(key == 445) {dir = 1; unit = 0; key = -1;} // cursor right
 else
 if(key == 447) {dir = 0; unit = 8; key = -1;} // cursor up
 else  
 if(key == 446) {dir = 1; unit = 8; key = -1;} // cursor down

 if(key < 0)
 {
  b1=bmcreate("kselect_b1");
  b2=bmcreate("kselect_b2");

  if(zoneorder() == 0)
  {
   setbmtocaret(b1);
   setbmtocaret(b2);
  }
  else setbmtozone(b1, b2);

  if(zoneorder() >= 0)
  {
   bmmove(b2, dir, unit);
   setzonetobm(b2);
   bmview(b2);
  } 
  else
  {
   bmmove(b1, dir, unit);
   setzonetobm(b1);
   bmview(b1);
  }

  bmdelete(b1);
  bmdelete(b2);
 }

 return(key);
}


// set up EVENT_KEYPRESS events

void kselect_setevent(int i)
{
  if (i)  
    addeventhandler(0x300, 0, "kselect_fix");
  else
    remeventhandler(0x300, 0, "kselect_fix");

  kselect_status = i;
}


// deal with 'Key select' menu entry

int kselect_entry(int entry, int subcode)
{
 kselect_setevent(!kselect_status);
 return(0);
}


// tick or un-tick 'Key select' menu entry

int kselect_flags(int entry, string &text)
{
 return(kselect_status);
}


// add 'Key select' option 'Applets' menu and enable it

void main(void)
{
 script_menu_initialise();

 addentry_menu(script_handle, "kselect_entry","kselect_flags","","","{KSELECT_00}");
 kselect_setevent(1);
}
