static int tm_init( int install ) /*******************************/ { bool kmous; // Does key_mouse exist? MouseInstalled = false; MouseType = M_NONE; kmous = ( key_mouse != NULL ); if( install == 0 ) return( false ); if( strstr( GetTermType(), "xterm" ) != NULL ) { if( kmous ) { TryOne( M_XT, NULL, XT_INIT, key_mouse ); } else { TryOne( M_XT, NULL, XT_INIT, ANSI_HDR "M" ); } return( true ); } #ifdef __LINUX__ return( gpm_tm_init() ); #else return( false ); #endif }
static int tm_init( int install ) /*******************************/ { char *term; bool kmous; // Does key_mouse exist? MouseInstalled = FALSE; MouseType = M_NONE; kmous = ( key_mouse != NULL ); if( install == 0 ) return( FALSE ); term = GetTermType(); if( term != NULL && strstr( term, "xterm" ) != NULL ) { if( kmous ) { TryOne( M_XT, NULL, XT_INIT, key_mouse ); } else { TryOne( M_XT, NULL, XT_INIT, ANSI_HDR "M" ); } return( TRUE ); } #ifdef __LINUX__ return( gpm_tm_init() ); #else return( FALSE ); #endif }
static int gpm_tm_init( void ) /****************************/ { struct { unsigned short eventMask; unsigned short defaultMask; unsigned short minMod; unsigned short maxMod; int pid; int vc; } gpm_conn; struct sockaddr_un sau; char tty_name[20]; char procname[30]; int len, mult; UIMouseHandle = socket( PF_UNIX, SOCK_STREAM, 0 ); if( UIMouseHandle < 0 ) return( false ); sau.sun_family = AF_UNIX; strcpy( sau.sun_path, "/dev/gpmctl" ); if( connect( UIMouseHandle, (struct sockaddr *)&sau, sizeof sau ) < 0 ) goto out; gpm_conn.eventMask = GPM_DRAG | GPM_UP | GPM_DOWN; gpm_conn.defaultMask = ~GPM_HARD; gpm_conn.pid = getpid(); gpm_conn.vc = gpm_conn.minMod = gpm_conn.maxMod = 0; sprintf( procname, "/proc/self/fd/%d", UIConHandle ); len = readlink( procname, tty_name, sizeof( tty_name ) - 1 ); if( len < 0 ) goto out; if( memcmp( tty_name, "/dev/tty", len ) == 0 ) { len = readlink( "/proc/self/fd/0", tty_name, sizeof( tty_name ) - 1 ); if( len < 0 ) { goto out; } } len--; mult = 1; while( len && tty_name[len] >= '0' && tty_name[len] <= '9' ) { gpm_conn.vc += ( tty_name[len] - '0' ) * mult; len--; mult *= 10; } write( UIMouseHandle, &gpm_conn, sizeof gpm_conn ); TryOne( M_GPM, NULL, "", ANSI_HDR "M" ); MouseType = M_GPM; return( true ); out: close( UIMouseHandle ); UIMouseHandle = -1; return( false ); }