ºìÁªLinuxÃÅ»§
Linux°ïÖú

LinuxÏÂÌí¼ÓÑ×»ÆÖÐÎÄÊäÈ뷨ƽ̨

·¢²¼Ê±¼ä:2006-07-22 00:23:40À´Ô´:ºìÁª×÷Õß:nxfte
ÔÚÑ×»ÆÖÐÎÄÆ½Ì¨ÉÏ£¬Óû§¿ÉÒÔ×ÔÐÐÌí¼ÓÊäÈë·¨¡£Ñ×»ÆÖÐÎÄÆ½Ì¨µÄÊäÈ벿·ÖµÄ³ÌÐòÉè¼ÆÊ¹ÓÃÁËÒ»¸öÖ÷µ¼Ä£¿é×÷ΪºÍƽ̨µÄ½Ó¿Ú£¬ËüºÍ¸÷ÊäÈ뷨ģ¿éÖ®¼ä²ÉÓÃͳһµÄ¡¢¹æ·¶µÄ½çÃæ¡£¸÷¸öÊäÈë·¨¿É¿´×÷ÊÇÒ»¸ö¸ö¹ýÂË£¬ÊäÈëASCIIÂ룬·µ»ØµÃµ½µÄºº×Ö¡£

ÊäÈë·¨µÄÖ÷µ¼Ä£¿éÒÔ¶¯Ì¬Á¬½Ó¿â(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£ºÒÔÉÏÖ»ÊÇÒ»¸ö¼òµ¥µÄʾÀý£¬Õë¶Ô²»Í¬µÄÊäÈë·¨ÀàÐÍ£¬ÊäÈë·¨µÄºËÐÄ´úÂë¿ÉÄÜÒª¸´Ôӵöࡣ
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 1 ÌõÆÀÂÛ

  1. oracle_java ÓÚ 2006-08-29 21:00:56·¢±í:

    ding!