
// deal with 'Join lines' menu entry

void joinline_entry(int entry, int subcode)
{
 int b1, b2, zone;

 if(activetype(TEXTFRAME) <= 1)
  return;

 b1 = bmcreate("joinline_b1");
 b2 = bmcreate("joinline_b2");

 if(zone = zoneorder())
  setbmtozone(b1, b2);
 else
 {
  setbmtocaret(b1);
  setbmtocaret(b2);
 }
 if(bmmove(b1, 1, 3))
 {
  while(bmcmp(b1, b2) == -1 || !zone)
  { 
   setcarettobm(b1);
   if(caretchar()==10)
   {
    type("{deletef}");
    if(prevchar() > 32 && caretchar() > 32) type(" ");
    if(caretchar()==10) type("{CRight}");
    setbmtocaret(b1);
   }
   else
   {
    if(!bmmove(b1,1,0)) break; // handle hitting a new frame code - by making some progress
   }

   if(!zone) break;
   if(!bmmove(b1, 1, 3)) break;
  }
 }
 bmdelete(b1);
 bmdelete(b2);
}


// shade or un-shade 'Join lines' menu entry

int joinline_flags(int entry, string &text)
{
 return((activetype(TEXTFRAME) > 1) ? 0 : SHADED);
}


// add 'Join lines' option to 'Applets' menu

void main(void)
{
 string help = "{JOINLINE_01}";

 script_menu_initialise();
 addentry_menu(script_handle,"joinline_entry","joinline_flags","","C_J","{JOINLINE_00}");

 if(isdefmacro("joinline") == -1)
 {
  translate(help);
  defmacro2(0, "joinline" ,"{if(activetype(TEXTFRAME)>1) joinline_entry(0, 0);else bbc_vdu(7)}" ,"joinline", help);
 }
}