2N/A/*
2N/A * CDDL HEADER START
2N/A *
2N/A * The contents of this file are subject to the terms of the
2N/A * Common Development and Distribution License, Version 1.0 only
2N/A * (the "License"). You may not use this file except in compliance
2N/A * with the License.
2N/A *
2N/A * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
2N/A * or http://www.opensolaris.org/os/licensing.
2N/A * See the License for the specific language governing permissions
2N/A * and limitations under the License.
2N/A *
2N/A * When distributing Covered Code, include this CDDL HEADER in each
2N/A * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
2N/A * If applicable, add the following below this CDDL HEADER, with the
2N/A * fields enclosed by brackets "[]" replaced with your own identifying
2N/A * information: Portions Copyright [yyyy] [name of copyright owner]
2N/A *
2N/A * CDDL HEADER END
2N/A */
2N/A/*
2N/A * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
2N/A * Use is subject to license terms.
2N/A */
2N/A
2N/A/* Copyright (c) 1988 AT&T */
2N/A/* All Rights Reserved */
2N/A
2N/A/*
2N/A * University Copyright- Copyright (c) 1982, 1986, 1988
2N/A * The Regents of the University of California
2N/A * All Rights Reserved
2N/A *
2N/A * University Acknowledgment- Portions of this document are derived from
2N/A * software developed by the University of California, Berkeley, and its
2N/A * contributors.
2N/A */
2N/A
2N/A#pragma ident "%Z%%M% %I% %E% SMI"
2N/A
2N/A/*LINTLIBRARY*/
2N/A
2N/A#include <sys/types.h>
2N/A#include "curses_inc.h"
2N/A
2N/Aint
2N/Amouse_set(long int mbe)
2N/A{
2N/A if (get_mouse) {
2N/A SP->_trap_mbe = mbe;
2N/A (void) tputs(tparm_p1(get_mouse, mbe), 1, _outch);
2N/A (void) fflush(SP->term_file);
2N/A return (OK);
2N/A }
2N/A return (ERR);
2N/A}
2N/A
2N/Aint
2N/Amouse_on(long int mbe)
2N/A{
2N/A if (get_mouse) {
2N/A SP->_trap_mbe |= mbe;
2N/A (void) tputs(tparm_p1(get_mouse, (long) SP->_trap_mbe),
2N/A 1, _outch);
2N/A (void) fflush(SP->term_file);
2N/A return (OK);
2N/A }
2N/A return (ERR);
2N/A}
2N/A
2N/Aint
2N/Amouse_off(long int mbe)
2N/A{
2N/A if (get_mouse) {
2N/A SP->_trap_mbe &= ~mbe;
2N/A (void) tputs(tparm_p1(get_mouse, (long) SP->_trap_mbe),
2N/A 1, _outch);
2N/A (void) fflush(SP->term_file);
2N/A return (OK);
2N/A }
2N/A return (ERR);
2N/A}
2N/A
2N/A
2N/Aint
2N/Arequest_mouse_pos(void)
2N/A{
2N/A int i;
2N/A
2N/A if (req_mouse_pos) {
2N/A (void) tputs(req_mouse_pos, 1, _outch);
2N/A (void) fflush(SP->term_file);
2N/A
2N/A /* we now must wait for report of mouse position. How do */
2N/A /* we know that this is mouse position report an not any- */
2N/A /* thing else? thetch() returns KEY_MOUSE and the status */
2N/A /* off all the buttons remains unchanged. */
2N/A /* just to avoid going into infinite loop, we have a */
2N/A /* counter. if 1000 responses won't have what we need, */
2N/A /* we'll return error */
2N/A
2N/A for (i = 0; i < 1000; i++) {
2N/A if ((tgetch(1) == KEY_MOUSE) && MOUSE_POS_REPORT)
2N/A break;
2N/A }
2N/A if (i == 1000)
2N/A return (ERR);
2N/A return (OK);
2N/A }
2N/A return (ERR);
2N/A}
2N/A
2N/Avoid
2N/Awmouse_position(WINDOW *win, int *x, int *y)
2N/A{
2N/A /* mouse pointer outside the window, store -1's into x and y */
2N/A
2N/A if (win->_begy > MOUSE_Y_POS || win->_begx > MOUSE_X_POS ||
2N/A win->_begy+win->_maxy < MOUSE_Y_POS ||
2N/A win->_begx+win->_maxx < MOUSE_X_POS) {
2N/A *x = -1; *y = -1;
2N/A } else {
2N/A *x = MOUSE_X_POS - win->_begx;
2N/A *y = MOUSE_Y_POS - win->_begy;
2N/A }
2N/A}
2N/A
2N/A
2N/Aint
2N/Amap_button(unsigned long a)
2N/A{
2N/A SP->_map_mbe_to_key = a;
2N/A return (OK);
2N/A}
2N/A
2N/A
2N/Aunsigned long
2N/Agetmouse(void)
2N/A{
2N/A return (SP->_trap_mbe);
2N/A}
2N/A
2N/A
2N/Aunsigned long
2N/Agetbmap(void)
2N/A{
2N/A return (SP->_map_mbe_to_key);
2N/A}