ÊäÈë·¨µÄÖ÷µ¼Ä£¿éÒÔ¶¯Ì¬Á¬½Ó¿â(libimpi.a)µÄÐÎʽ´æÔÚ£¬ºÍ¸÷ÊäÈ뷨ģ¿éÁ¬½Ó³Éµ¥¶ÀµÄ¿ÉÖ´ÐÐÎļþ¡£Ä£¿é²ã´ÎÈçÏÂͼ£º
¶ÔÓÚÿһ¸ö¾ßÌåµÄÊäÈë·¨£¬Ö»ÐèÒª°´ÕÕÒ»¶¨µÄÊý¾Ý½á¹¹¾Í¿ÉÒÔÁ´½Ó³ÉΪеĿÉÖ´ÐÐÎļþ£¬²¢ÇÒÌí¼Óµ½Ñ×»ÆÖÐÎÄÆ½Ì¨ÉÏ¡£ÕâЩÊý¾Ý½á¹¹°üÀ¨Íⲿ±äÁ¿ºÍÍⲿº¯Êý¡£
1¡¢Íⲿ±äÁ¿
Êý×éextcode[]£º×Ö·û´®ÀàÐÍ£¬±íʾÊäÈëµÄÍâÂë´®£»
Êý×écandstr[]£º×Ö·û´®ÀàÐÍ£¬±íÊ¾ÖØÂëµÄ´ýÑ¡´®£»
Êý×éresult[]£º×Ö·û´®ÀàÐÍ£¬±íʾµÃµ½µÄ½á¹û´®£»
Êý×éimname[]£º×Ö·û´®ÀàÐÍ£¬±íʾÊäÈë·¨µÄÃû³Æ£»
Êý×éimdscrpt[]£º×Ö·û´®ÀàÐÍ£¬±íʾ¶ÔÊäÈë·¨µÄÃèÊö¡£
±äÁ¿maxeclen£ºÕûÐÍ£¬±íʾÍâÂëµÄ×î´ó³¤¶È£»
±äÁ¿eclen£ºÕûÐÍ£¬±íʾÍâÂëµÄ³¤¶È¡£
ÕâЩ±äÁ¿µÄ¶¨ÒåÈçÏÂËùʾ£º
ÒýÓÃ:extern int maxeclen; /* The maximum length of external code */
extern int eclen; /* The length of external code */
extern char extcode[]; /* External code */
extern char candstr[]; /* Candinate string */
extern char result[]; /* Result string */
2¡¢Íⲿº¯Êý
Íⲿº¯ÊýÒ»¹²ÓÐËĸö£¬ËüÃÇ·Ö±ðÊÇIMInit£¨£©¡¢IMCleanup£¨£©¡¢IMSelect£¨£©ºÍIMFilter£¨£©¡£ÕâËĸöº¯ÊýµÄ¶¨Òå·Ö±ðÈçÏÂËùʾ£º
ÒýÓÃ:int IMInit();
int IMClearup();
int IMSelect(int select);
int IMFilter(int ch);
ÆäÖÐIMInit£¨£©º¯ÊýÓÃÀ´Íê³ÉÊäÈë·¨µÄ³õʼ»¯¹¤×÷£»IMClearup£¨£©º¯ÊýÓÃÀ´¶ÔÊäÈë·¨±»ÊÍ·ÅʱµÄÇé¿ö½øÐд¦Àí£» IMSelect£¨£©º¯ÊýÓÃÀ´´¦Àíµ±Ç°ÊäÈë·¨±»Ñ¡ÖеÄÇé¿ö£»IMFilter£¨£©ÊÇÊäÈë·¨µÄºËÐĺ¯Êý£¬ÓÃÀ´¶Ô½ÓÊÕµÄ×Ö·û´®½øÐйýÂË£¬µÃµ½ÕýÈ·µÄÊäÈë½á¹û¡£
ÏÂÃæÒÔÇøÎ»ÊäÈ뷨ΪÀý¶Ô´Ë½øÐмòµ¥µÄ½éÉÜ£º
×¼±¸¹¤×÷
Ê×ÏÈÐèҪȡµÃlibimpi.aÎļþ£¬È»ºó¿ÉÒÔ´´½¨Ò»¸öqvweiĿ¼¡£
´úÂë±àд
±àÒëÒ»¸öqvwei.cÎļþ£¬½Ó×ŶÔÊäÈë·¨½øÐгõʼ»¯£¬ÕâʱºòµÄqvwei.cÈçÏÂËùʾ¡£
ÒýÓÃ:/* The qvwei input method
*/
#include
#include
#include
#include
#include "impi.h"
char imname[] = "ÇøÎ»";
char imdscrpt[] = "ÇøÎ»ÊäÈë·¨";
static void reset();
static void append(int ch);
static void comp_appe(int prevch, int ch);
int IMInit()
{
return 0;
}
int IMClearup()
{
return 0;
}
int IMSelect(select)
int select;
{
return 0;
}
int IMFilter(ch)
int ch;
{
}
½ÓÏÂÀ´µÄ¹¤×÷¾ÍÊDZàдIMInit£¨£©¡¢IMClearup£¨£©¡¢IMSelect£¨£©ºÍIMFilter£¨£©ÕâËĸöº¯ÊýÁË¡£
ÔÚIMInit£¨£©º¯ÊýÖÐÌí¼ÓÈçϵĴúÂ룺
ÒýÓÃ:maxeclen = 5;
reset();
return 0;
ÓÉÓÚÇøÎ»ÊäÈë·¨±È½Ï¼òµ¥£¬IMClearup£¨£©ºÍIMSelect£¨£©º¯Êý¶¼²»ÐèÒª¶îÍâÌí¼Ó´úÂ룬ÔÚIMFilter£¨£©Õâ¸öº¯ÊýÖмÓÈëÈçϵĴ¦Àí´úÂ룺
ÒýÓÃ:candstr[0] = '\0';
result[0] = '\0';
/* process currnet keystroke */
if (isdigit(ch))
{
if ((eclen == 1) || (eclen == 3))
comp_appe(extcode[eclen - 1], ch);
else
append(ch);
if (eclen == 4)
{
int qv, wei;
qv = (extcode[0] - '0') * 10 + (extcode[1] - '0');
wei = (extcode[2] - '0') * 10 + (extcode[3] - '0');
reset();
result[0] = qv + 0xa0;
result[1] = wei + 0xa0;
result[2] = '\0';
}
}
else
{
if ((ch == KEY_BACKSPACE) && (eclen > 0))
extcode[--eclen] = '\0';
else
{
result[0] = ch;
result[1] = '\0';
}
}
/* generate candinates */
if ((eclen > 0) && (eclen < 4))
{
int qv, wei, i, w;
char buf[3];
char *p;
¡¡
if (eclen > 1)
qv = (extcode[0] - '0') * 10 + (extcode[1] - '0');
else if (extcode[0] == '0')
qv = 1;
else
qv = (extcode[0] - '0') * 10;
wei = (eclen < 3) ? 0 : (extcode[2] - '0') * 10;
p = candstr;
for (i = 0; i <= 9; i++)
{
w = wei + i;
if ((w > 0) && (w <= 94))
{
buf[0] = qv + 0xa0;
buf[1] = wei + i + 0xa0;
buf[2] = '\0';
p += sprintf(p, " %d: %s", i, buf);
}
}
}
return 0;
ÉÏÃæµÄ´úÂëÖÐÓõ½ÁËÁíÍâÈý¸öº¯Êý£¬ÕâÈý¸öº¯Êý¿ÉÒÔ¶¨ÒåΪ¾Ö²¿º¯Êý£¬ËüÃǵÄʵÏÖ´úÂëÈçÏÂËùʾ£º
ÒýÓÃ:static void reset(void)
{
eclen = 0;
extcode[0] = '\0';
candstr[0] = '\0';
result[0] = '\0';
}
static void append(ch)
int ch;
{
extcode[eclen++] = ch;
extcode[eclen] = '\0';
}
static void comp_appe(prevch, ch)
int prevch;
int ch;
{
if (prevch == '0')
{
if (ch != '0')
append(ch);
}
else if (prevch == '9')
{
if (ch <= '4')
append(ch);
}
else
append(ch);
}
°ÑÉÏÃæµÄ´úÂëÆ´½ÓÆðÀ´£¬¾ÍÊÇÒ»¸öÍêÕûµÄqvwei.cÎļþ¡£
±àÒëºÍÁ´½Ó
×îºó¿ÉÒÔ±àдһ¸öMakeFileÀ´´´½¨¿ÉÖ´ÐеÄÊäÈë·¨Îļþ¡£Ò»¸öMakefileµÄÀý×ÓÈçÏÂËùʾ£º
ÒýÓÃ:qvwei:
cc -c qvwei.c
cc -o $@ qvwei.o libimpi.a
strip $@
rm -f *.o
È»ºóÖ»ÐèÒªÔÚÕâ¸öĿ¼Ï¼üÈëmake£¬¾Í¿ÉÒÔ´´½¨Ò»¸ö¿ÉÖ´ÐеÄqvweiÎļþ¡£ÔÚÔËÐÐÑ×»ÆÖÐÎÄÆ½Ì¨Ö®ºóÔËÐÐÕâ¸öqvweiÎļþ£¬¾Í¿ÉÒÔ°ÑÕâ¸öÊäÈë·¨Ìí¼Óµ½Ñ×»ÆÖÐÎÄÆ½Ì¨ÖУ¬Æ½Ì¨»á×Ô¶¯¸øÕâ¸öÊäÈë·¨·ÖÅäÇл»¿ì½Ý¼ü¡£
×¢ÒâÊÂÏ
1£ºËæÍ¬´ò°üµÄ»¹ÓÐËĸöÎļþ£¬ËüÃÇ·Ö±ðÊÇimpi.c¡¢impi.h¡¢incommon.cºÍimcommon.h£¬ËüÃǵÄ×÷ÓÃÊÇÓÃÀ´Éú³É libimpi.a¡£ÌṩÕâËĸöº¯ÊýÔ´´úÂëµÄÓÃÒâÊÇ·½±ãÓû§¶ÔÊäÈë·¨µÄÀí½â¡£µ«ÊǾø¶Ô²»Òª¸Ä±äÕâËĸöÎļþ²¢ÇÒÖØÐ±àÒëlibimi.a£¬·ñÔòÑ×»ÆÖÐÎÄÆ½Ì¨ÓпÉÄÜÎÞ·¨Ê¶±ðÐÂÉú³ÉµÄÊäÈë·¨¡£
2£ºÒÔÉÏÖ»ÊÇÒ»¸ö¼òµ¥µÄʾÀý£¬Õë¶Ô²»Í¬µÄÊäÈë·¨ÀàÐÍ£¬ÊäÈë·¨µÄºËÐÄ´úÂë¿ÉÄÜÒª¸´Ôӵöࡣ
oracle_java ÓÚ 2006-08-29 21:00:56·¢±í:
ding!