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