コード例 #1
0
ファイル: daemon.c プロジェクト: kissthink/fbsplash
static void do_cleanup(void)
{
	pthread_mutex_trylock(&mtx_tty);
#ifdef CONFIG_GPM
	if (fd_gpm >= 0) {
		Gpm_Close();
	}
#endif
	vt_silent_cleanup();
}
コード例 #2
0
ファイル: static_exit_tty.c プロジェクト: amery/clip-angelo
static void
exit_tty()
{
#if 0
   termcap_put_raw_str(termcap_ME);
   termcap_set_color(COLOR_WHITE | COLOR_BACK_BLACK);
   if (clear_on_exit)
      termcap_clear_screen();
   termcap_set_cursor(Lines - 1, 0);
   termcap_put_raw_str(termcap_TE);
   termcap_put_raw_str(termcap_KE);
   termcap_flush();
#endif
   stop_scan_mode(0);
#ifdef _WIN32
   if (w32_console)
      return;
#endif

#ifndef _WIN32
   if (xterm_mouse)		/* xterm */
   {
      const char msg[] = "\033[?1000l\033[?1001r";

      write(1, msg, sizeof(msg) - 1);
   }

   /* enable cursor */

   if (screen_data)
   {
      termcap_put_raw_str(screen_data, screen_data->termcap_VE);
      termcap_flush(screen_data);
   }

#endif

#ifdef HAVE_GPM_H
   if (gpm_fd >= 0)
      Gpm_Close();
#endif

   tcsetattr(0, TCSADRAIN, &start_mode);
}
コード例 #3
0
ファイル: display-coords.c プロジェクト: Distrotech/gpm
int main(int argc, char **argv)
{
   int            vc;                              /* argv: console number */
   Gpm_Connect    conn;                            /* connection to gpm    */
   fd_set         fds;

   /* select virtual console, 0 if not set */
   vc = (argc == 2) ? strtol(argv[1],NULL,10) : 0;

   conn.eventMask    =  GPM_MOVE; /* read only moves            */
   conn.defaultMask  = ~GPM_HARD; /* inverted GPM_HARD mask    */
   conn.minMod       =  0;
   conn.maxMod       = ~0;

   if(Gpm_Open(&conn,vc) == -1) {
      printf("Cannot connect to gpm!\n");
      return 1;
   }
   if(gpm_fd == -2) {
      printf("I must be run on the console\n");
      return 1;
   }
   

   while(1) { /* read data */
      FD_ZERO(&fds);
      FD_SET(gpm_fd, &fds);

      if (select(gpm_fd+1, &fds, 0, 0, 0) < 0 && errno == EINTR)
         continue;
      if (FD_ISSET(gpm_fd, &fds)) {
         Gpm_Event evt;
         if (Gpm_GetEvent(&evt) > 0) {
            display_data(&evt, NULL);
         } else {
            printf("Gpm_GetEvent failed\n");
         }
      }
   }

   Gpm_Close(); /* close connection */

   return 0;
}
コード例 #4
0
ファイル: mouse.c プロジェクト: CTU-OSP/mc
void
disable_mouse (void)
{
    if (!mouse_enabled)
        return;

    mouse_enabled = FALSE;

    switch (use_mouse_p)
    {
#ifdef HAVE_LIBGPM
    case MOUSE_GPM:
        Gpm_Close ();
        break;
#endif
    case MOUSE_XTERM_NORMAL_TRACKING:
        /* disable SGR extended mouse reporting */
        printf (ESC_STR "[?1006l");

        /* disable mouse tracking */
        printf (ESC_STR "[?1000l");

        /* restore old highlight mouse tracking */
        printf (ESC_STR "[?1001r");

        fflush (stdout);
        break;
    case MOUSE_XTERM_BUTTON_EVENT_TRACKING:
        /* disable SGR extended mouse reporting */
        printf (ESC_STR "[?1006l");

        /* disable mouse tracking */
        printf (ESC_STR "[?1002l");

        /* restore old highlight mouse tracking */
        printf (ESC_STR "[?1001r");

        fflush (stdout);
        break;
    default:
        break;
    }
}
コード例 #5
0
ファイル: disable-paste.c プロジェクト: Distrotech/gpm
int 
main(int argc, char** argv)
{
  Gpm_Connect conn;
  const int len = sizeof(Gpm_Connect);
  int exit_status = 0;
  conn.eventMask = (unsigned short)(-1); conn.defaultMask = 0;
  conn.minMod = 0; conn.maxMod = (unsigned short)(-1);
  
  if (0 > Gpm_Open(&conn,0)) {
    fprintf(stderr,"disable-paste: cannot open mouse connection\n");
    exit(1);
  }
  conn.vc = GPM_REQ_NOPASTE;
  conn.pid = 0;
  if (len > write(gpm_fd, &conn, len)) {
    fprintf(stderr,"disable-paste: cannot write request\n");
    exit_status = 2;
  }
  Gpm_Close();
  exit(exit_status);
}
コード例 #6
0
ファイル: framebuf.c プロジェクト: Acidburn0zzz/links-plus
static void unhandle_fb_mouse(void)
{
	if (fb_hgpm >= 0) set_handlers(fb_hgpm, (void (*)(void *))NULL, (void (*)(void *))NULL, (void (*)(void *))NULL, NULL);
#ifndef USE_GPM_DX
	fb_hgpm = -1;
	if (fb_old_ws_v) {
		int rs;
		EINTRLOOP(rs, ioctl(1, TIOCSWINSZ, &fb_old_ws));
		fb_old_ws_v = 0;
	}
#endif
	Gpm_Close();
#ifdef SIGTSTP
	install_signal_handler(SIGTSTP, (void (*)(void *))sig_tstp, NULL, 0);
#endif
#ifdef SIGCONT
	install_signal_handler(SIGCONT, (void (*)(void *))sig_cont, NULL, 0);
#endif
#ifdef SIGTTIN
	install_signal_handler(SIGTTIN, (void (*)(void *))sig_tstp, NULL, 0);
#endif
}
コード例 #7
0
ファイル: viper_kmio.c プロジェクト: TragicWarrior/libviper
gint viper_kmio_gpm(MEVENT *mouse_event,guint cmd)
{
	extern guint32		viper_global_flags;
   extern int        gpm_tried;
   extern int        gpm_fd;
   struct pollfd     mio_poll;
   struct timespec   sleep_time={.tv_sec=0,.tv_nsec=5000};
   static int        mio_fd=-1;
   Gpm_Connect       gpm_connect;
   Gpm_Event         g_event;
   gint              array_sz;
   gint              i;
	int					fflags;

   if(cmd == CMD_GPM_CLOSE)
   {
      if(mio_fd > 0) Gpm_Close();
      mio_fd=-1;
      return 0;
   }

   if(mouse_event==NULL) return -1;

   /* could not connect to the GPM server.   */
   if(gpm_fd==-2 || (gpm_fd==-1 && gpm_tried==TRUE)) return -1;

   memset(&g_event,0,sizeof(g_event));

   if(mio_fd==-1)
   {
      memset(&gpm_connect,0,sizeof(gpm_connect));
      gpm_connect.defaultMask=0; /* do not propgate any GPM events            */
      gpm_connect.eventMask=GPM_MOVE | GPM_UP | GPM_DOWN | GPM_DRAG;
      gpm_connect.maxMod=~0;     /* allow all modifiers ie. CTRL, SHFT, ALT   */
      mio_fd=Gpm_Open(&gpm_connect,0);
		if(mio_fd > 0 && (viper_global_flags & VIPER_GPM_SIGIO))
		{
			fcntl(mio_fd,F_SETOWN,getpid());
   		fflags=fcntl(mio_fd,F_GETFL);
   		fcntl(mio_fd,F_SETFL,fflags | FASYNC);
		}
   }

   if(mio_fd==-1) return -1;

   memset(&mio_poll,0,sizeof(mio_poll));
   mio_poll.events=POLLIN;
   mio_poll.fd=mio_fd;

   if(poll(&mio_poll,1,1)<1) return -1;
   if(Gpm_GetEvent(&g_event)<1) return -1;

   memset(mouse_event,0,sizeof(MEVENT));
   mouse_event->bstate=g_event.modifiers;
   mouse_event->x=g_event.x-1;
   mouse_event->y=g_event.y-1;

   array_sz=sizeof(x_ncurses_state)/sizeof(x_ncurses_state[0]);

   if(!(GPM_CLICK_STRICT(g_event.type)))
   {
      for(i=0;i<array_sz;i++)
      {
         /* sift by mode... ignore COOKED table entries        */
         if(x_gpm_mode[i]==X_GPM_COOKED) continue;

         /* sift raw event... GPM_UP, GPM_DOWN, etc.           */
         if(!(g_event.type & x_gpm_event[i])) continue;

         /* sift which physical button... GPM_B_LEFT, etc.     */
         if(g_event.buttons != x_gpm_button[i]) continue;

         mouse_event->bstate |= x_ncurses_state[i];
         break;
      }
   }

   if(GPM_CLICK_STRICT(g_event.type))
   {
      for(i=0;i<array_sz;i++)
      {
         /* sift by mode... ignore RAW table entries           */
         if(x_gpm_mode[i]==X_GPM_RAW) continue;

         /* sift cooked event... GPM_SINGLE, GPM_DOUBLE, etc.  */
         if(!(g_event.type & x_gpm_event[i])) continue;

         /* sift which physical button... GPM_B_LEFT, etc.     */
         if(g_event.buttons != x_gpm_button[i]) continue;

         mouse_event->bstate=x_ncurses_state[i];
         break;
      }
   }

   if((g_event.type & GPM_DRAG) || (g_event.type & GPM_MOVE))
      mouse_event->bstate = REPORT_MOUSE_POSITION;

   if(mouse_event->bstate!=0)
   {
      while(ungetmouse(mouse_event)==ERR)
      {
         nanosleep(&sleep_time,NULL);
      }
   }

   return 0;
}
コード例 #8
0
ファイル: vrpn_Mouse.C プロジェクト: Progga1/vrpn
vrpn_Mouse::~vrpn_Mouse()
{
#if defined(linux) && defined(VRPN_USE_GPM_MOUSE)
    Gpm_Close();
#endif
}
コード例 #9
0
ファイル: aagpm.c プロジェクト: dgeelen/tmvp
static void gpm_uninit(aa_context * c)
{
	__curses_usegpm = 0;
	Gpm_Close();
}
コード例 #10
0
ファイル: mouse.c プロジェクト: BackupTheBerlios/geoirc
void
mouse_close(void)
{
    Gpm_Close();
}
コード例 #11
0
ファイル: scr_real.c プロジェクト: BaJIeK/brltty
static int
gpmOpenConnection (void) {
  switch (gpmConnectionState) {
    case  GCS_CLOSED: {
      Gpm_Connect options = {
        .eventMask = GPM_MOVE,
        .defaultMask = ~0,
        .minMod = 0,
        .maxMod = ~0
      };

      gpm_tried = 0;
      gpm_zerobased = 1;

      if (Gpm_Open(&options, -1) == -1) {
        logMessage(GPM_LOG_LEVEL, "GPM open error: %s", strerror(errno));
        asyncSetAlarmIn(NULL, 5000, gpmResetConnection, NULL);
        gpmConnectionState = GCS_FAILED;
        return 0;
      }

      logMessage(GPM_LOG_LEVEL, "GPM opened: fd=%d con=%d", gpm_fd, gpm_consolefd);
      gpmConnectionState = GCS_OPENED;
    }

    case GCS_OPENED:
      return 1;
  }

  return 0;
}

static void
gpmCloseConnection (int alreadyClosed) {
  if (gpmConnectionState == GCS_OPENED) {
    if (!alreadyClosed) Gpm_Close();
    logMessage(GPM_LOG_LEVEL, "GPM closed");
  }
  gpmConnectionState = GCS_CLOSED;
}
#endif /* HAVE_LIBGPM */

static int
routeCursor_RealScreen (int column, int row, int screen) {
  return startRouting(column, row, screen);
}

static int
highlightRegion_RealScreen (int left, int right, int top, int bottom) {
  FILE *console = getConsole();

  if (console) {
#ifdef HAVE_LIBGPM
    if (gpmOpenConnection() && (gpm_fd >= 0)) {
      if (Gpm_DrawPointer(left, top, fileno(console)) != -1) return 1;

      if (errno != EINVAL) {
        logMessage(GPM_LOG_LEVEL, "Gpm_DrawPointer error: %s", strerror(errno));
        gpmCloseConnection(0);
        return 0;
      }
    }
#endif /* HAVE_LIBGPM */
  }

  return 0;
}
コード例 #12
0
ファイル: unix.c プロジェクト: ohmori7/kcn-tools
static int
done_mouse(void)
{
	return Gpm_Close();
}