1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
#include "gcin.h"
#include "pho.h"
extern char inph[];
extern u_char typ_pho[4];
extern void key_typ_pho(phokey_t phokey, u_char rtyp_pho[]);
gboolean pin2juyin()
{
int i;
char pin[7];
pin[7]=0;
#if 0
for(i=0; i < pin_juyinN; i++) {
memcpy(pin, pin_juyin[i].pinyin, sizeof(pin_juyin[0].pinyin));
if (!strcmp(pin, inph))
goto match;
}
#endif
int inphN = strlen(inph);
for(i=0; i < pin_juyinN; i++) {
memcpy(pin, pin_juyin[i].pinyin, sizeof(pin_juyin[0].pinyin));
int pinN = strlen(pin);
if (pinN < inphN)
continue;
if (!memcmp(pin, inph, inphN))
break;
}
if (i==pin_juyinN)
return FALSE;
bzero(typ_pho, sizeof(typ_pho));
key_typ_pho(pin_juyin[i].key, typ_pho);
return TRUE;
}
gboolean inph_typ_pho_pinyin(int newkey)
{
char num = phkbm.phokbm[(int)newkey][0].num;
int typ = phkbm.phokbm[(int)newkey][0].typ;
int i;
for(i=0; i < 7; i++)
if (!inph[i])
break;
if (i==7)
return FALSE;
inph[i] = newkey;
if (typ==3) {
typ_pho[typ] = num;
return TRUE;
}
if (!pin2juyin()) {
if (newkey != ' ')
bell();
inph[i]=0;
return FALSE;
}
return TRUE;
}
extern int text_pho_N;
void load_pin_juyin()
{
text_pho_N = 6;
char pinfname[128];
get_sys_table_file_name("pin-juyin.xlt", pinfname);
dbg("pinyin kbm %s\n", pinfname);
FILE *fr;
if ((fr=fopen(pinfname,"r"))==NULL)
p_err("Cannot open %s", pinfname);
fread(&pin_juyinN, sizeof(short), 1, fr);
pin_juyin = tmalloc(PIN_JUYIN, pin_juyinN);
fread(pin_juyin, sizeof(PIN_JUYIN), pin_juyinN, fr);
fclose(fr);
}
|