view lib/Xatoklib/key.c @ 0:92745d501b9a

initial import from kinput2-v3.1
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Mon, 08 Mar 2010 04:44:30 +0900
parents
children
line wrap: on
line source

/* 
 * Copyright 1999 Justsystem Corporation, Japan.
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose and without fee is hereby granted,
 * provided that the above copyright notice appear in all copies and that
 * both that copyright notice and this permission notice appear in
 * supporting documentation, and that the name of Justsystem Corporation
 * not be used in advertising or publicity pertaining to distribution
 * of the software without specific, written prior permission.  Justsystem 
 * Corporation makes no representations about the suitability of this
 * software for any purpose.  It is provided "as is" without express
 * or implied warranty.
 *
 * Author: Atsushi Irisawa
 */

#ifndef lint
static  char    rcsid[] = "$Id: key.c,v 1.3 1999/08/24 09:01:09 ishisone Exp $" ;
#endif  /* !lint */


#include	<X11/IntrinsicP.h>
#include <X11/StringDefs.h>
#include <X11/Xmu/Atoms.h>
#include	<X11/keysym.h>

#include	<Xatoklib.h>
#include	<key_def.h>

const WORD XkeyAAJtable[]={
/*      0,8   ,1,9   ,2,a   ,3,b   ,4,c   ,5,d   ,6,e   ,7,f */
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,    /* 00-07 */
        0x0108,0x0109,0x0000,0x0000,0x0000,0x010d,0x0000,0x0000,    /* 08-0f */
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,    /* 10-17 */
        0x0000,0x0000,0x0000,0x011b,0x0000,0x0000,0x0000,0x0000,    /* 18-1f */
	/*          !      "      #      $      %      &      ' */
	/*     XK_Kanji XK_Muhenkan XK_                         */
        0x0000,XFER,NFER,XFER,EIJI,HIRAGANA,KATAKANA,HIRAGANA,      /* 20-27 */
	/*   (      )      *      +      ,      -               */
          ZORH,  ZORH,  ZORH,0x0341,0x033a,0x0015,0x0000,0x0000,    /* 28-2f */
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,    /* 30-37 */
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,    /* 38-3f */
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,    /* 40-47 */
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,    /* 48-4f */
	/*   P      Q      R      S      T      U      V      W */
	/* XK_Home XK_Left XK_Up XK_Right XK_PageUP XK_PageDown XK_End */
          HOME,  LEFT,    UP, RIGHT,  DOWN,  PGUP,  PGDN,  EEND,    /* 50-57 */
	/*   X      Y      Z      [      \      ]      ^      _ */
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,    /* 58-5f */
	/*   `      a      b      c      d      e      f      g */
        0x0000,0x0000,  NFER,   INS,0x0000,0x0000,0x0000,0x0000,    /* 60-67 */
	/*   h      i      j      k      l      m      n      o */
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,    /* 68-6f */
	/*   p      q      r      s      t      u      v      w */
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,    /* 70-77 */
	/*   x      y      z      {      |      }      ~    del */
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,    /* 78-7f */
        0x0020,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,    /* 80-87 */
        0x0000,   TAB,0x0000,0x0000,0x0000,    CR,0x0000,0x0000,    /* 88-8f */
        0x0000,    F1,    F2,    F3,    F4,  HOME,  LEFT,    UP,    /* 90-97 */
         RIGHT,  DOWN,  PGUP,  PGDN,  EEND,0x0000,   INS,   DEL,    /* 98-9f */
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,    /* a0-a7 */
        0x0000,0x0000,0x022a,0x022b,0x0000,0x022d,0x0000,0x022f,    /* a8-af */
        0x0230,0x0231,0x0232,0x0233,0x0234,0x0235,0x0236,0x0237,    /* b0-b7 */
	/*                                         XK_F1  XK_F2 */
        0x0238,0x0239,0x0000,0x0000,0x0000,0x0000,    F1,    F2,    /* b8-bf */
	/* XK_F3 XK_F4 XK_F5  XK_F6  XK_F7  XK_F8  XK_F9 XK_F10 */
            F3,    F4,    F5,    F6,    F7,    F8,    F9,   F10,    /* c0-c7 */
	/* XK_F11 XK_F12 XK_F13 XK_F14 XK_F15 XK_F16 XK_F17 XK_F18 */
           F11,   F12,   F13,   F14,   F15,   F16,   F17,   F18,    /* c8-cf */
	/* XK_F19 XK_F20                                        */
           F19,   F20,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,    /* d0-d7 */
	/*                                        XK_F33        */
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,  HELP,0x0000,    /* d8-df */
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,    /* e0-e7 */
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,    /* e8-ef */
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,    /* f0-f7 */
	/*                                              XK_Delete */
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,   DEL     /* f8-ff */
};

/* Page */
/*
 * [$B4X?tL>(B]
 *		getAAJCode( )
 * [$BI=Bj(B]
 *              AAJCODE $B$N<hF@(B
 * [$B8F=P7A<0(B]
 *	WORD	getAAJCode( XKeyEvent *event, KeySym xkeysym,
 *			unsigned char *kbuf )
 *
 * [$B0z?t(B]
 *              $B7?(B            : $BL>(B  $B>N(B  : I O : $B@b(B      $BL@(B
 *		XKeyEvent     : *event  : i   : X $B$N%$%Y%s%H%3!<%I(B
 *		KeySym        : xkeysym : i   : X$B$N%-!<%7%s%\%k(B
 *	        unsigned char : *kbuf   : i   : $BF~NO$5$l$?J8;z%3!<%I(B
 *
 * [$BJV$jCM(B]
 *		AAJCODE : $BJQ49$5$l$?(BAAJCODE
 *
 * [$B;HMQ4X?t(B]
 *		$B$J$7(B
 * [$B5!G=(B]
 *		X$B$N%-!<%$%Y%s%H$h$j!"(B AAJCODE$B$KJQ49$9$k!#(B
 *
 */
WORD getAAJCode(event, xkeysym, kbuf)
/* Fix Length */
XKeyEvent	*event;
KeySym		xkeysym;
unsigned char	*kbuf;
{

	WORD	aajcode = 0 ;
	unsigned char	ch ;

	ch = kbuf[0] ;

#ifdef	ATOK_DEBUG
printf( "KEY CODE CH = 0x%02x\n", ch ) ;
printf( "KEY SYM ORG 0x%x, FF00 4 = 0x%04x\n", xkeysym, xkeysym & 0xff00  ) ;
printf( "KEY SYM CODE 4 = 0x%04x\n", xkeysym  ) ;
printf( "SHIFT STAT %d\n",  event->state & ShiftMask )  ;
printf( "CTRL STAT %d\n",  event->state & ControlMask )  ;

#endif	/* ATOK_DEBUG */

	/*
 	 * X $B$N5!G=%-!<$@$C$?>l9g(B,AAJTABLE $B$KDj5A$7$F$"$k%3!<%I$KJQ49(B
	 */
	if (( xkeysym & 0xFF00 ) == 0xFF00 ) {
		int	index ;
		index = xkeysym & 0xff ;
#ifdef	ATOK_DEBUG
		printf( "FUNCTIONAL KEY INDEX = 0x%02x\n", index  ) ;
#endif	/* ATOK_DEBUG */
		aajcode = XkeyAAJtable[index] ;
		if ( !aajcode ) {
			return 0 ;
		}
	}
	/*
 	 * $BF~NO$5$l$?J8;z$H%-!<%3!<%I$,F1$8>l9g$K$O(B
	 * $B$=$N%3!<%I$r(BAAJ$B%3!<%I$H$9$k!#(B
 	 * $BF~NOJ8;z$,%3%s%H%m!<%k%3!<%I$N>l9g$OF~NOJ8;z$r(B
	 * AAJ$B%3!<%I$H$9$k!#(B
	 */
	else if ( ch == 0x8e ) {
		aajcode = ( WORD )kbuf[1] ;
	}
	else if ( ch == xkeysym & 0xff ) {
		aajcode = ( WORD )xkeysym ;
	}
	else if ( ch > 0 && ch < 0x20 ) {
		aajcode = ch ;
	}
/* 990614 */
	else if ( ch == 0 && xkeysym & 0xff ) {
		aajcode = xkeysym & 0xff ;
		if (( xkeysym & 0xff ) == '@' && ( event->state & ControlMask )) {
			aajcode = 0x1000 ;
			return aajcode ;
		}
	}
/* 990614 */
	else {
	/* printf( "unknonw key\n" ) ; */
		return 0 ;
	}

	if ( event->state & ShiftMask ) {
		aajcode |= SHIFT ;
	}
	if ( event->state & ControlMask ) {
		 aajcode |= CTRL ;
	}
	if( event->state & 0x08 ) { /* ALT Mask */
                 aajcode |= ALT ;
	}
	switch( aajcode ) {
		case 0x101b :	/* CTR + 3 */
		case 0x101c :	/* CTR + 4 */
		case 0x101d :	/* CTR + 5 */
		case 0x101e :	/* CTR + 6 */
		case 0x101f :	/* CTR + 7 */
			aajcode = 0x1033 + aajcode - 0x101b ;
			break ;
	}


	return aajcode ;
}
/* End of  key.c */