home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The World of Computer Software
/
World_Of_Computer_Software-02-385-Vol-1of3.iso
/
t
/
tel2305s.zip
/
ENGINE
/
MOUSE.C
< prev
next >
Wrap
C/C++ Source or Header
|
1991-10-20
|
4KB
|
179 lines
/* Mouse routines for NCSA Telnet */
/* Andrew Tridgell 10/17/90 */
/* Basically these can replace n_chkchar,n_getchar and n_scrlck
with ones that do the following
mouse up : up arrow
mouse down : down arrow
mouse right : right arrow
mouse left : left arrow
left button : space bar
right button : scroll lock toggle
This is achieved by including mouse.h
*/
#define MOUSE_H
#include <stdio.h>
#include <stdlib.h>
#include "nkeys.h"
#include "externs.h"
#ifdef MSC
#define mousecl mousecml
#endif
int nm_getchar(void);
int nm_chkchar(void);
int nm_scrlck(void);
int nm_chkmouse(void);
int nm_initmouse(void);
int nm_mousespeed(int change);
extern int use_mouse;
extern int ginon;
struct {
int speed,
num_right,
num_down;
unsigned int installed:1, /* boolean, whether the mouse has been installed */
left_flag:1, /* boolean, whether the left button is down */
right_flag:1, /* boolean, whether the right button is down */
scrlck:1; /* boolean, whether the scrl-lock is active */
} mouse;
#ifdef GETCHAR_NEEDED
int nm_getchar(void )
{
int mouse_char;
if ((mouse_char=nm_chkmouse())!=-1)
return(mouse_char);
else
return(n_getchar());
} /* end nm_getchar() */
#endif
int nm_chkchar(void )
{
int mouse_char;
if((mouse_char=nm_chkmouse())!=-1)
return(mouse_char);
else
return(n_chkchar());
} /* end nm_chkchar() */
int nm_scrlck(void )
{
if ((int)(mouse.scrlck) != !(!n_scrlck()))
return(1);
return(0);
} /* end nm_scrlck() */
int nm_chkmouse(void )
{
int m1=3, m2=0 ,m3=0 ,m4=0; /* mouse variables */
static int press_used=0;
if(!mouse.installed)
return(-1);
m1=11;
mousecl(&m1,&m2,&m3,&m4); /* read mickeys */
mouse.num_right+=m3;
mouse.num_down+=m4;
m1=3;
mousecl(&m1,&m2,&m3,&m4);
if((m2&3)==0) press_used=0;
if (press_used) return(-1);
if(m2&1) { /* left button */
if((mouse.right_flag)&&(!ginon)) {
press_used=1;
mouse.right_flag=0;
return(ALTV);
}
else mouse.left_flag=1;
}
else if(mouse.left_flag) {
mouse.left_flag=0;
return((int)'\n');
} /* end if */
if (ginon) return(-1);
if(m2&2) { /* right button */
if(mouse.left_flag) {
press_used=1;
mouse.left_flag=0;
return(ALTC);
}
else mouse.right_flag=1;
}
else if(mouse.right_flag) {
/* use_mouse=!mouse.scrlck;
*/ mouse.scrlck=!mouse.scrlck;
mouse.right_flag=0;
} /* end if */
if (!use_mouse && !nm_scrlck()) {
mouse.num_right=0;
mouse.num_down=0;
return(-1);
};
if(abs(mouse.num_right)>abs(mouse.num_down)) {
if(mouse.num_right>=mouse.speed) {
mouse.num_right-=mouse.speed;
return(E_CURRT);
} /* end if */
if(mouse.num_right<=(-mouse.speed)) {
mouse.num_right+=mouse.speed;
return(E_CURLF);
} /* end if */
} /* end if */
if(mouse.num_down>=mouse.speed) {
mouse.num_down-=mouse.speed;
return(E_CURDN);
} /* end if */
if(mouse.num_down<=(-mouse.speed)) {
mouse.num_down+=mouse.speed;
return(E_CURUP);
} /* end if */
return(-1);
} /* end nm_chkmouse() */
int nm_initmouse(void )
{
int m1=0, m2=0, m3=0, m4=0; /* mouse variables */
mouse.installed=1;
mouse.speed=10;
mouse.num_right=0;
mouse.num_down=0;
mouse.left_flag=0;
mouse.right_flag=0;
mouse.scrlck=0;
m1=0;
mousecl(&m1,&m2,&m3,&m4); /* initialize mouse driver */
if(!m1) {
mouse.installed=0;
return(0);
} /* end if */
m1=2;
mousecl(&m1,&m2,&m3,&m4); /* turn off software cursor */
return(1);
} /* end nm_initmouse() */
int nm_mousespeed(int change)
{
mouse.speed+=change;
if (mouse.speed<1) mouse.speed=1;
return(1);
} /* end nm_mousespeed() */