1 /* $Id: cefep.c,v 1.1 2000/11/16 14:21:28 amura Exp $ */
2 /* OS dependent code used by Ng for WinCE.
3 * Copyright (C) 1998 Eiichiro Ito
4 * Modified for Ng for Win32
5 * Copyright (C) 1999,2000 Toru Imai
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * ree Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 */
21 /*
22 * NG : NG FEP controll routine
23 *
24 * 1998/11/14:Eiichiroh Itoh
25 *
26 */
27
28 /*
29 * $Log: cefep.c,v $
30 * Revision 1.1 2000/11/16 14:21:28 amura
31 * merge Ng for win32 0.5
32 *
33 */
34
35 #ifndef STRICT
36 #define STRICT
37 #endif
38 #include <windows.h>
39 #include <tchar.h>
40 #include "config.h"
41 #include "def.h"
42
43 #if defined(KANJI) && defined(USE_KCTRL)
44 #include "cefep.h"
45
46 #define NO_CTRLSPACE
47
48 #define GawaroBaseKey TEXT("Software\\Gawaro")
49 #define VAR_FEPNAME TEXT("FepName")
50 #define VAR_FEPPROGRAM TEXT("FepProgram")
51 #define VAR_USECTRL TEXT("UseCtrl")
52
53 TCHAR g_szFepName[ MAX_PATH ] = TEXT("KANJIIN") ;
54 TCHAR g_szFepProgram[ MAX_PATH ] = TEXT("KanjiIn.exe") ;
55 BOOL g_fKanji = FALSE ;
56 BOOL g_fUseCtrl = FALSE ;
57 BOOL g_fFepOption = FALSE ;
58
59 /*
60 * Initilize FEP
61 */
62 BOOL
InitFep(void)63 InitFep( void )
64 {
65 HKEY hk ;
66 LONG lret ;
67 LPCTSTR name ;
68 LPBYTE lpData ;
69 TCHAR sValue[ 256 ] ;
70 DWORD dwType, cbData, dwValue ;
71
72 /* Open Registory */
73 lret = RegOpenKeyEx( HKEY_CURRENT_USER, GawaroBaseKey, 0,
74 KEY_QUERY_VALUE, &hk ) ;
75 if ( lret == ERROR_SUCCESS ) {
76 /* FEP name */
77 name = VAR_FEPNAME ;
78 dwType = REG_SZ ;
79 lpData = (LPBYTE) sValue ;
80 cbData = sizeof sValue ;
81 if ( RegQueryValueEx( hk, name, NULL, &dwType, lpData, &cbData ) == ERROR_SUCCESS ) {
82 _tcscpy( g_szFepName, sValue ) ;
83 }
84 /* FEP Program Name */
85 name = VAR_FEPPROGRAM ;
86 dwType = REG_SZ ;
87 lpData = (LPBYTE) sValue ;
88 cbData = sizeof sValue ;
89 if ( RegQueryValueEx( hk, name, NULL, &dwType, lpData, &cbData ) == ERROR_SUCCESS ) {
90 _tcscpy( g_szFepProgram, sValue ) ;
91 }
92 /* CTRL/ALT swapping */
93 name = VAR_USECTRL ;
94 dwType = REG_DWORD ;
95 lpData = (LPBYTE) &dwValue ;
96 cbData = sizeof dwValue ;
97 if ( RegQueryValueEx( hk, name, NULL, &dwType, lpData, &cbData ) == ERROR_SUCCESS ) {
98 g_fUseCtrl = dwValue ;
99 }
100 /* Close Registory */
101 RegCloseKey( hk ) ;
102 }
103 return TRUE ;
104 }
105
106 /*
107 * Open FEP
108 */
109 void
Fep_Execute(HWND hWnd)110 Fep_Execute( HWND hWnd )
111 {
112 HWND hWndFep ;
113
114 hWndFep = FindWindow( g_szFepName, NULL ) ;
115 if ( hWndFep ) {
116 /* If FEP process exist, change it state */
117 g_fKanji = SendMessage( hWndFep, WM_COMMAND, IDM_FEPGETMODE, 0 ) ;
118 SendMessage( hWndFep, WM_COMMAND, IDM_FEPSETMODE, g_fKanji ? 0 : 1 ) ;
119 #ifdef _WIN32_WCE
120 } else {
121 /* FEP process is not exist */
122 PROCESS_INFORMATION pi ;
123 TCHAR param[ 20 ] ;
124 wsprintf( param, TEXT("%d"), hWnd ) ;
125 g_fKanji = CreateProcess( g_szFepProgram, param,
126 NULL, NULL, FALSE, 0, NULL, NULL, NULL, &pi ) ;
127 #endif /* _WIN32_WCE */
128 }
129 }
130
131 /*
132 * WM_CHAR
133 */
134 BOOL
Fep_WM_CHAR(HWND hWnd,TCHAR chCharCode,LONG lKeyData)135 Fep_WM_CHAR( HWND hWnd, TCHAR chCharCode, LONG lKeyData )
136 {
137 HWND hWndFep ;
138
139 #ifndef NO_CTRLSPACE
140 if ( chCharCode == TEXT(' ') ) {
141 if ( g_fUseCtrl && (GetKeyState( VK_CONTROL) & 0x80) ) {
142 /* Pressed CTRL + SPACE */
143 Fep_Execute( hWnd ) ;
144 return TRUE ;
145 }
146 return FALSE ;
147 }
148 #endif /* NO_CTRLSPACE */
149 if ( chCharCode < TEXT(' ') ) {
150 return FALSE ;
151 }
152 hWndFep = FindWindow( g_szFepName, NULL ) ;
153 if ( hWndFep ) {
154 g_fKanji = SendMessage( hWndFep, WM_COMMAND, IDM_FEPGETMODE, 0 ) ? FALSE : TRUE ;
155 } else {
156 g_fKanji = FALSE ;
157 }
158 if ( g_fKanji && (chCharCode != TEXT(' ')) ) {
159 SendMessage( hWndFep, WM_COMMAND, MAKEWPARAM( IDM_ACTIVATE_HWND, chCharCode ), (LPARAM) hWnd ) ;
160 return TRUE ;
161 }
162 return FALSE ;
163 }
164
165 /*
166 * WM_SYSCHAR
167 */
168 BOOL
Fep_WM_SYSCHAR(HWND hWnd,TCHAR chCharCode,LONG lKeyData)169 Fep_WM_SYSCHAR( HWND hWnd, TCHAR chCharCode, LONG lKeyData )
170 {
171 #ifndef NO_CTRLSPACE
172 if ( chCharCode == TEXT(' ') ) {
173 if ( !g_fUseCtrl && (lKeyData & 0x20000000) ) {
174 /* Pressed ALT + SPACE */
175 Fep_Execute( hWnd ) ;
176 return TRUE ;
177 }
178 }
179 #endif /* NO_CTRLSPACE */
180 return FALSE ;
181 }
182
183 BOOL
Fep_WM_ACTIVATE(HWND hWnd,WORD fActive,BOOL fMinimize,HWND hWndDeactive)184 Fep_WM_ACTIVATE( HWND hWnd, WORD fActive, BOOL fMinimize, HWND hWndDeactive )
185 {
186 if ( g_fFepOption ) {
187 if ( fActive == WA_ACTIVE || fActive == WA_CLICKACTIVE ) {
188 HWND hWndFep = FindWindow( g_szFepName, NULL ) ;
189 if ( hWndFep ) {
190 g_fKanji = SendMessage( hWndFep, WM_COMMAND, IDM_FEPGETMODE, 0 ) ? FALSE : TRUE ;
191 if ( g_fKanji ) {
192 SendMessage( hWndFep, WM_COMMAND, IDM_FEPSETMODE, 1 ) ;
193 }
194 }
195 }
196 }
197 return FALSE ;
198 }
199
200 #endif /* defined(KANJI) && defined(USE_KCTRL) */
201