/* CAA hacks: xterm mouse support */
static char *sel_mouse_save;

void
sel_go_line(line)
int line;
{
    int i;

    for (i=0;i<sel_item_cnt;i++) {
	if (sel_items[i].line>line)
	    break;
    }
    if (i>0)
	i--;
    sel_item_index = i;
}

void
sel_do_mouse(button,x,y)
int button;	/* 0: button1  1: button2  2: button3  3: release */
int x,y;
{
    if (button == 3) {
	/* do range stuff here later? */
	return;
    }
    switch (button) {
	case 0:
	    sel_go_line(y);
	    sel_mouse_save = ".";
	    break;
	case 1:
	    sel_go_line(y);
	    break;
	case 2:
	    /* move forward or backwards a page:
	     *   if cursor in top half: backwards
	     *   if cursor in bottom half: forwards
	     */
	    if (y<(LINES/2))
		sel_mouse_save = "<";
	    else
		sel_mouse_save = ">";
	    break;
    }
}


void
sel_mouse()
{
    int x,y;
    int button;

    sel_mouse_save = Nullch;
    read_tty(buf,1);
    button = (int)(buf[0]);
    read_tty(buf,1);
    x = (int)(buf[0])-33;
    read_tty(buf,1);
    y = (int)(buf[0])-33;
    sel_do_mouse(button&3,x,y);

    /* get the button-up event */
    while (1) {
	getcmd(buf);
	if (*buf == 3)	/* got the button-up */
	    break;
	/* otherwise just eat any other keystrokes */
    }

    /* interpret the button-up event */
    read_tty(buf,1);
    button = (int)(buf[0]);
    read_tty(buf,1);
    x = (int)(buf[0])-33;
    read_tty(buf,1);
    y = (int)(buf[0])-33;
    sel_do_mouse(button&3,x,y);
    if (sel_mouse_save)
	pushstring(sel_mouse_save,0);
}

