Example #1
0
int
main(void)
{
/*char text[] = "abcdef;aGDZXC"; */
	char			text[] = "abcdef;a:ibgdezhuiklmnjoprstyfxcv";

	kstate_init_all(GREEK_ELOT928);
	printf("text: %s\n", text);
	greek_xlat(text, STRLEN(text));
	printf("xlat'ed text: %s\n", text);
	kstate_end_all();
	return 0;
}
Example #2
0
/*  Convert the keypress event into a string.
    Matthias: trick: used the composed character from Qt if usefull
 */
static unsigned char *lookup_key(XEvent *ev,int *pcount, unsigned char qt_c)
{
  KeySym keysym;
  static XComposeStatus compose = {NULL,0};
  int count;
  static unsigned char kbuf[KBUFSIZE];
  unsigned char *s, *c;
  int meta;

  count = XLookupString(&ev->xkey,kbuf,KBUFSIZE-1,&keysym,&compose); 
 
  if (count <= 1 && qt_c != '\0'){
    kbuf[0] = qt_c;
    count = 1;
  }

  kbuf[count] = (unsigned char)0;

  meta = ev->xkey.state & Mod1Mask;
  s = NULL;
  /* no longer needed. (Matthias) */
  if((keysym == SecureKeysym)&&((ev->xkey.state &Mod1Mask) == Mod1Mask))
    {
/*       scr_secure(); */
      count = 0;
    }

  else if((keysym == BigFontKeysym)&&((ev->xkey.state &Mod1Mask) == Mod1Mask))
    {
/*       NewFont(BIGGER); */
      count = 0;
    }
  else if((keysym==SmallFontKeysym)&&((ev->xkey.state &Mod1Mask) == Mod1Mask))
    {
/*       NewFont(SMALLER); */
      count = 0;
    }
  else

  if((keysym == PageUpKeysym)&&((ev->xkey.state &Mod1Mask) == Mod1Mask))
    {
      scr_move_up_down(UP);
      count = 0;
    }
  else if((keysym == PageDownKeysym)&&((ev->xkey.state &Mod1Mask) == Mod1Mask))
    {
      scr_move_up_down(DOWN);
      count = 0;
    }
  /* added ShiftMask here to be more like an xterm. (Matthias) */ 
  else if((keysym == PageUpKeysym)&&((ev->xkey.state &ShiftMask) == ShiftMask))
    {
      scr_move_up_down(UP);
      count = 0;
    }
  else if((keysym == PageDownKeysym)&&((ev->xkey.state &ShiftMask) == ShiftMask))
    {
      scr_move_up_down(DOWN);
      count = 0;
    }
#ifdef MAPALERT
  else if((keysym == AlertKeysym)&&((ev->xkey.state &Mod1Mask) == Mod1Mask))
    {
      map_alert = !map_alert;
      count = 0;
    }
#endif
#ifdef GREEK_KBD
  else if(keysym == GreekSwitchKeysym)
    {
      greek_mode_ON = !greek_mode_ON;
      if (greek_mode_ON)
        greek_reset();
      count = 0;
    }
#endif
  else switch(keysym)
    {
      /* introduced BackSpace and Delete mapping (Matthias) */ 
    case XK_BackSpace :
      /* \010 = ^H (BS)  */
      /* \177 = ^? (Del) */
      strcpy(kbuf, BackspaceSendsControlH ? "\010" : "\177");
      count = 1;
      break;
    case XK_Delete :
#if XlibSpecificationRelease >= 6
    case XK_KP_Delete :
#endif
      /* strcpy(kbuf,"\033[3~"); */
      /* strcpy(kbuf, BackspaceSendsControlH ? "\177" : "\010"); */
      strcpy(kbuf, keys[KeySetSend].del);
      count = strlen(kbuf);
      break;

      
    case XK_Up :
#if XlibSpecificationRelease >= 6
    case XK_KP_Up :
#endif
      strcpy(kbuf,(app_cur_keys ? "\033OA" : "\033[A"));
      count = strlen(kbuf);
      break;
    case XK_Down :
#if XlibSpecificationRelease >= 6
    case XK_KP_Down :
#endif
      strcpy(kbuf,app_cur_keys ? "\033OB" : "\033[B");
      count = strlen(kbuf);
      break;
    case XK_Right :
      strcpy(kbuf,app_cur_keys ? "\033OC" : "\033[C");
      count = strlen(kbuf);
      break;
    case XK_Left :
      strcpy(kbuf,app_cur_keys ? "\033OD" : "\033[D");
      count = strlen(kbuf);
      break;
    case XK_KP_F1 :
      strcpy(kbuf,"\033OP");
      count = 3;
      break;
    case XK_KP_F2 :
      strcpy(kbuf,"\033OQ");
      count = 3;
      break;
    case XK_KP_F3 :
      strcpy(kbuf,"\033OR");
      count = 3;
      break;
    case XK_KP_F4 :
      strcpy(kbuf,"\033OS");
      count = 3;
      break;
    case XK_KP_0 :  
      strcpy(kbuf,app_kp_keys ? "\033Op" : "0");
      count = strlen(kbuf);
      break;
    case XK_KP_1 :
      strcpy(kbuf,app_kp_keys ? "\033Oq" : "1");
      count = strlen(kbuf);
      break;
    case XK_KP_2 :
      strcpy(kbuf,app_kp_keys ? "\033Or" : "2");
      count = strlen(kbuf);
      break;
    case XK_KP_3 :
      strcpy(kbuf,app_kp_keys ? "\033Os" : "3");
      count = strlen(kbuf);
      break;
    case XK_KP_4 :
      strcpy(kbuf,app_kp_keys ? "\033Ot" : "4");
      count = strlen(kbuf);
      break;
    case XK_KP_5 :
      strcpy(kbuf,app_kp_keys ? "\033Ou" : "5");
      count = strlen(kbuf);
      break;
    case XK_KP_6 :
      strcpy(kbuf,app_kp_keys ? "\033Ov" : "6");
      count = strlen(kbuf);
      break;
    case XK_KP_7 :
      strcpy(kbuf,app_kp_keys ? "\033Ow" : "7");
      count = strlen(kbuf);
      break;
    case XK_KP_8 :
      strcpy(kbuf,app_kp_keys ? "\033Ox" : "8");
      count = strlen(kbuf);
      break;
    case XK_KP_9 :
      strcpy(kbuf,app_kp_keys ? "\033Oy" : "9");
      count = strlen(kbuf);
      break;
    case XK_KP_Subtract :
      strcpy(kbuf,app_kp_keys ? "\033Om" : "-");
      count = strlen(kbuf);
      break;
    case XK_KP_Separator :
      strcpy(kbuf,app_kp_keys ? "\033Ol" : ",");
      count = strlen(kbuf);
      break;
    case XK_KP_Decimal :
      strcpy(kbuf,app_kp_keys ? "\033On" : ".");
      count = strlen(kbuf);
      break;
    case XK_KP_Enter :
      strcpy(kbuf,app_kp_keys ? "\033OM" : "\r");
      count = strlen(kbuf);
      break;
      /* changed home and end to more modern values (Matthias) */ 
    case XK_Home :
#if XlibSpecificationRelease >= 6
    case XK_KP_Home :
#endif
      /*strcpy(kbuf,"\033[H");*/
      strcpy(kbuf, keys[KeySetSend].home);
      count = strlen(kbuf);
      break;
    case XK_End :
#if XlibSpecificationRelease >= 6
    case XK_KP_End :
#endif
      /*strcpy(kbuf,"\033[F");*/
      strcpy(kbuf, keys[KeySetSend].end);
      count = strlen(kbuf);
      break;
    case XK_F1 :
      strcpy(kbuf,"\033[11~");
      count = 5;
      break;
    case XK_F2 :
      strcpy(kbuf,"\033[12~");
      count = 5;
      break;
    case XK_F3 :
      strcpy(kbuf,"\033[13~");
      count = 5;
      break;
    case XK_F4 :
      strcpy(kbuf,"\033[14~");
      count = 5;
      break;
    case XK_F5 :
      strcpy(kbuf,"\033[15~");
      count = 5;
      break;
    case XK_F6 :
      strcpy(kbuf,"\033[17~");
      count = 5;
      break;
    case XK_F7 :
      strcpy(kbuf,"\033[18~");
      count = 5;
      break;
    case XK_F8 :
      strcpy(kbuf,"\033[19~");
      count = 5;
      break;
    case XK_F9 :
      strcpy(kbuf,"\033[20~");
      count = 5;
      break;
    case XK_F10 :
      strcpy(kbuf,"\033[21~");
      count = 5;
      break;
    case XK_F11 :
      strcpy(kbuf,"\033[23~");
      count = 5;
      break;
    case XK_F12 :
      strcpy(kbuf,"\033[24~");
      count = 5;
      break;
    case XK_F13 :
      strcpy(kbuf,"\033[25~");
      count = 5;
      break;
    case XK_F14 :
      strcpy(kbuf,"\033[26~");
      count = 5;
      break;
    case XK_Help :
    case XK_F15 :
      strcpy(kbuf,"\033[28~");
      count = 5;
      break;
    case XK_Menu :
    case XK_F16 :
      strcpy(kbuf,"\033[29~");
      count = 5;
      break;
    case XK_F17 :
      strcpy(kbuf,"\033[31~");
      count = 5;
      break;
    case XK_F18 :
      strcpy(kbuf,"\033[32~");
      count = 5;
      break;
    case XK_F19 :
      strcpy(kbuf,"\033[33~");
      count = 5;
      break;
    case XK_F20 :
      strcpy(kbuf,"\033[34~");
      count = 5;
      break;
    case XK_Find :
      strcpy(kbuf,"\033[1~");
      count = 4;
      break;
    case XK_Insert :
#if XlibSpecificationRelease >= 6
    case XK_KP_Insert :
#endif
      /* strcpy(kbuf,"\033[2~"); */
      strcpy(kbuf, keys[KeySetSend].ins);
      count = strlen(kbuf);
      break;
    case XK_Execute :
      strcpy(kbuf,"\033[3~");
      count = 4;
      break;
    case XK_Select :
      strcpy(kbuf,"\033[4~");
      count = 4;
      break;
    case XK_Prior :
#if XlibSpecificationRelease >= 6
    case XK_KP_Prior :
#endif
      strcpy(kbuf,"\033[5~");
      count = 4;
      break;
    case XK_Next :
#if XlibSpecificationRelease >= 6
    case XK_KP_Next :
#endif
      strcpy(kbuf,"\033[6~");
      count = 4;
      break;
#ifdef GREEK_KBD
    default:
      if (greek_mode_ON)
        count = greek_xlat(kbuf, count);
#endif                
    }
  
  *pcount = count;

  /* if meta is pressed, precede message with ESC */
  /* used to set the 8th bit high, but this confuses things
   * for some non-english character sets */
  if((MetaHandling == ESCAPE) && meta &&(count > 0))
    {
      *pcount = count + 1;
      for(c = (kbuf + (count)); c > kbuf ; c--)
	{
	  *c = *(c-1);
	}
      *kbuf = 27;
      *(kbuf+count+1)=0;  
    }
  else if((MetaHandling == BIT) && meta &&(count > 0))
    {
      for(c = kbuf; c < kbuf+count ; c++)
	{
	  *c = *c | 0x80 ;
	}
      *(kbuf+count)=0;
    }
  else
    *(kbuf+count) = 0;
  return (kbuf);
}