コード例 #1
0
ファイル: settings.c プロジェクト: teclator/linuxrc
/*
 * Load keymap.
 */
void set_activate_keymap(char *keymap)
{
  char cmd[MAX_FILENAME];
  char *s, enc[64];

  /* keymap might be config.keymap, so be careful... */
  keymap = keymap ? strdup(keymap) : NULL;

  if(config.keymap) free(config.keymap);

  if((config.keymap = keymap)) {
    kbd_unimode();
    *enc = 0;
    if((s = keymap_encoding(config.keymap))) {
      sprintf(enc, " -c %s", s);
    }
    sprintf(cmd,
      "loadkeys -q %s ; dumpkeys%s >/tmp/dk ; loadkeys -q --unicode </tmp/dk",
      keymap, enc
    );
    if(!config.test) {
      lxrc_run_console(cmd);
    }
  }
}
コード例 #2
0
ファイル: settings.c プロジェクト: markkp/linuxrc
/*
 * Load keymap.
 */
void set_activate_keymap(char *keymap)
{
  char cmd[MAX_FILENAME];

  /* keymap might be config.keymap, so be careful... */
  keymap = keymap ? strdup(keymap) : NULL;

  if(config.keymap) free(config.keymap);

  if((config.keymap = keymap)) {
    kbd_unimode();
    sprintf(cmd, "loadkeys -q %s", keymap);
    if(!config.test) {
      lxrc_run_console(cmd);
    }
  }
}
コード例 #3
0
ファイル: keyboard.c プロジェクト: aginies/linuxrc
void kbd_init (int first)
    {
    struct winsize winsize_ri;
    int fd;

    if(!config.test) {
      fd = open("/dev/tty4", O_RDWR);
      write(fd, "Startup...\n", sizeof "Startup...\n" - 1);
      close(fd);
    }

    kbd_unimode();

    if(config.kbd_fd == -1) config.kbd_fd = open(config.console, O_RDWR);
    tcgetattr (config.kbd_fd, &kbd_norm_tio_rm);
    kbd_tio_rm = kbd_norm_tio_rm;
    if (config.linemode)
        {
	kbd_tio_rm.c_lflag &= ~ISIG;
	tcsetattr (config.kbd_fd, TCSAFLUSH, &kbd_tio_rm);
	if (first)
	    {
	    max_x_ig = X_DEFAULT;
	    max_y_ig = Y_DEFAULT;
	    }
	return;
	}
    kbd_tio_rm.c_cc [VMIN] = 1;
    kbd_tio_rm.c_cc [VTIME] = 0;
    kbd_tio_rm.c_lflag &= ~(ECHO | ICANON | ISIG);
    kbd_tio_rm.c_iflag &= ~(INLCR | IGNCR | ICRNL);
    if (first && !ioctl (config.kbd_fd, TIOCGWINSZ, &winsize_ri))
        {
        if (winsize_ri.ws_col >= MIN_X && winsize_ri.ws_row >= MIN_Y)
            {
            max_x_ig = winsize_ri.ws_col;
            max_y_ig = winsize_ri.ws_row;
            }

        }

    tcsetattr (config.kbd_fd, TCSAFLUSH, &kbd_tio_rm);

    if (config.utf8)
    {
      write(config.kbd_fd, "\033[?1l", sizeof "\033[?1l" - 1);
      fsync(config.kbd_fd);

      write(config.kbd_fd, "\033%G", sizeof "\033%G" - 1);
      fsync(config.kbd_fd);
    }

    if(first && config.serial) {
      get_screen_size(config.kbd_fd);

      if(max_x_ig > MAX_X) max_x_ig = MAX_X;
      if(max_y_ig > MAX_Y) max_y_ig = MAX_Y;

      if(max_x_ig < MIN_X || max_y_ig < MIN_Y) {
        max_x_ig = X_DEFAULT;
        max_y_ig = Y_DEFAULT;
      }

      if(!config.had_segv) fprintf(stderr, "Window size: %d x %d\n", max_x_ig, max_y_ig);

      memset(&winsize_ri, 0, sizeof winsize_ri);

      winsize_ri.ws_col = max_x_ig;
      winsize_ri.ws_row = max_y_ig;

      ioctl(config.kbd_fd, TIOCSWINSZ, &winsize_ri);
    }

    }