Commit d43c374ac92dbf1d16af0d5939c1b801f89fac66
1 parent
2fd2b75a
Exists in
master
and in
5 other branches
Implementando configuração de charset
Showing
4 changed files
with
98 additions
and
71 deletions
Show diff stats
@@ -0,0 +1,46 @@ | @@ -0,0 +1,46 @@ | ||
1 | +/* | ||
2 | + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | ||
3 | + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | ||
4 | + * aplicativos mainframe. Registro no INPI sob o nome G3270. | ||
5 | + * | ||
6 | + * Copyright (C) <2008> <Banco do Brasil S.A.> | ||
7 | + * | ||
8 | + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | ||
9 | + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | ||
10 | + * Free Software Foundation. | ||
11 | + * | ||
12 | + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | ||
13 | + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | ||
14 | + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | ||
15 | + * obter mais detalhes. | ||
16 | + * | ||
17 | + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | ||
18 | + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | ||
19 | + * St, Fifth Floor, Boston, MA 02110-1301 USA | ||
20 | + * | ||
21 | + * Este programa está nomeado como charset.h e possui - linhas de código. | ||
22 | + * | ||
23 | + * Contatos: | ||
24 | + * | ||
25 | + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | ||
26 | + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | ||
27 | + * licinio@bb.com.br (Licínio Luis Branco) | ||
28 | + * kraucer@bb.com.br (Kraucer Fernandes Mazuco) | ||
29 | + * | ||
30 | + */ | ||
31 | + | ||
32 | +#ifndef LIB3270_CHARSET_H_INCLUDED | ||
33 | + | ||
34 | + #define LIB3270_CHARSET_H_INCLUDED 1 | ||
35 | + | ||
36 | + typedef enum | ||
37 | + { | ||
38 | + CS_ONLY, | ||
39 | + FT_ONLY, | ||
40 | + BOTH | ||
41 | + } lib3270_remap_scope; | ||
42 | + | ||
43 | + LIB3270_EXPORT struct lib3270_charset * lib3270_load_charset(H3270 *hSession, const char *name); | ||
44 | + LIB3270_EXPORT void lib3270_remap(H3270 *hSession, unsigned short ebc, unsigned short iso, lib3270_remap_scope scope, unsigned char one_way); | ||
45 | + | ||
46 | +#endif // LIB3270_CHARSET_H_INCLUDED |
src/lib3270/charset.c
@@ -36,15 +36,7 @@ | @@ -36,15 +36,7 @@ | ||
36 | 36 | ||
37 | #include "globals.h" | 37 | #include "globals.h" |
38 | #include "X11keysym.h" | 38 | #include "X11keysym.h" |
39 | - | ||
40 | -typedef enum | ||
41 | -{ | ||
42 | - CS_ONLY, | ||
43 | - FT_ONLY, | ||
44 | - BOTH | ||
45 | -} remap_scope; | ||
46 | - | ||
47 | -static void remap_char(H3270 *hSession, unsigned short ebc, unsigned short iso, remap_scope scope, unsigned char one_way); | 39 | +#include <lib3270/charset.h"> |
48 | 40 | ||
49 | /* | 41 | /* |
50 | * EBCDIC-to-Unicode translation tables. | 42 | * EBCDIC-to-Unicode translation tables. |
@@ -208,16 +200,32 @@ static const unsigned short asc2uc[UT_SIZE] = | @@ -208,16 +200,32 @@ static const unsigned short asc2uc[UT_SIZE] = | ||
208 | /*f8*/ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde | 200 | /*f8*/ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde |
209 | }; | 201 | }; |
210 | 202 | ||
203 | +typedef struct _info | ||
204 | +{ | ||
205 | + const char * name; | ||
206 | + const unsigned short const * chr; | ||
207 | +} remap; | ||
211 | 208 | ||
209 | +static const remap charset[] = | ||
210 | +{ | ||
211 | + { | ||
212 | + "bracket", | ||
213 | + (const unsigned short const []) | ||
214 | + { | ||
215 | + 0x00ad, '[', | ||
216 | + 0x00ba, XK_Yacute, | ||
217 | + 0x00bd, ']', | ||
218 | + 0x00bb, XK_diaeresis, | ||
219 | + 0x0000, 0x0000 | ||
220 | + } | ||
221 | + }, | ||
212 | 222 | ||
213 | -// | ||
214 | -// bracket: "0xad: [ \n 0xba: XK_Yacute \n0xbd: ] \n 0xbb: XK_diaeresis \n" | ||
215 | -// | ||
216 | -// remap_char(hSession,0xad, '[', BOTH, 0); | ||
217 | -// remap_char(hSession,0xba, XK_Yacute, BOTH, 0); | ||
218 | -// remap_char(hSession,0xbd, ']', BOTH, 0); | ||
219 | -// remap_char(hSession,0xbb, XK_diaeresis, remap_scope scope,0); | ||
220 | -// | 223 | + // Terminate list |
224 | + { | ||
225 | + NULL | ||
226 | + } | ||
227 | + | ||
228 | +}; | ||
221 | 229 | ||
222 | /*---[ Implement ]------------------------------------------------------------------------------------------------------------*/ | 230 | /*---[ Implement ]------------------------------------------------------------------------------------------------------------*/ |
223 | 231 | ||
@@ -232,8 +240,8 @@ LIB3270_EXPORT struct lib3270_charset * lib3270_load_charset(H3270 *hSession, co | @@ -232,8 +240,8 @@ LIB3270_EXPORT struct lib3270_charset * lib3270_load_charset(H3270 *hSession, co | ||
232 | { | 240 | { |
233 | int f; | 241 | int f; |
234 | 242 | ||
235 | - hSession->charset.host = "us"; | ||
236 | - hSession->charset.display = "ISO-8859-1"; | 243 | + hSession->charset.host = "us"; |
244 | + hSession->charset.display = "ISO-8859-1"; | ||
237 | 245 | ||
238 | // lib3270_write_log(hSession,"charset","host.charset=%s display.charset=%s", | 246 | // lib3270_write_log(hSession,"charset","host.charset=%s display.charset=%s", |
239 | // hSession->charset.host,hSession->charset.display); | 247 | // hSession->charset.host,hSession->charset.display); |
@@ -250,17 +258,29 @@ LIB3270_EXPORT struct lib3270_charset * lib3270_load_charset(H3270 *hSession, co | @@ -250,17 +258,29 @@ LIB3270_EXPORT struct lib3270_charset * lib3270_load_charset(H3270 *hSession, co | ||
250 | memcpy(hSession->charset.asc2ft, asc2ft, sizeof(hSession->charset.asc2ft)); | 258 | memcpy(hSession->charset.asc2ft, asc2ft, sizeof(hSession->charset.asc2ft)); |
251 | #endif | 259 | #endif |
252 | 260 | ||
253 | - //if(!(name && strcasecmp(name,hSession->charset.host))) | ||
254 | - // return &hSession->charset; | 261 | + if(!(name && strcasecmp(name,hSession->charset.host))) |
262 | + return &hSession->charset; | ||
263 | + | ||
264 | + for(f=0;charset[f].name != NULL;f++) | ||
265 | + { | ||
266 | + if(!strcasecmp(name,charset[f].name)) | ||
267 | + { | ||
268 | + // Found required charset | ||
269 | + int c; | ||
270 | + | ||
271 | + hSession->charset.host = charset[f].name; | ||
272 | + | ||
273 | + for(c=0;charset[f].chr[c];c+=2) | ||
274 | + lib3270_remap(hSession,charset[f].chr[c],charset[f].chr[c+1], BOTH, 0); | ||
275 | + errno = 0; | ||
276 | + return &hSession->charset; | ||
277 | + } | ||
278 | + } | ||
255 | 279 | ||
256 | - // Bracket | ||
257 | - remap_char(hSession,0xad, '[', BOTH, 0); | ||
258 | - remap_char(hSession,0xba, XK_Yacute, BOTH, 0); | ||
259 | - remap_char(hSession,0xbd, ']', BOTH, 0); | ||
260 | - remap_char(hSession,0xbb, XK_diaeresis, BOTH, 0); | 280 | + errno = ENOENT; |
261 | 281 | ||
282 | + return NULL; | ||
262 | 283 | ||
263 | - return &hSession->charset; | ||
264 | } | 284 | } |
265 | 285 | ||
266 | 286 | ||
@@ -336,7 +356,7 @@ LIB3270_ACTION( charsettable ) | @@ -336,7 +356,7 @@ LIB3270_ACTION( charsettable ) | ||
336 | } | 356 | } |
337 | 357 | ||
338 | // Process a single character definition. | 358 | // Process a single character definition. |
339 | -static void remap_char(H3270 *hSession, unsigned short ebc, unsigned short iso, remap_scope scope, unsigned char one_way) | 359 | +LIB3270_EXPORT void lib3270_remap(H3270 *hSession, unsigned short ebc, unsigned short iso, lib3270_remap_scope scope, unsigned char one_way) |
340 | { | 360 | { |
341 | // unsigned char cg; | 361 | // unsigned char cg; |
342 | 362 |
src/lib3270/charset.h
@@ -1,43 +0,0 @@ | @@ -1,43 +0,0 @@ | ||
1 | -/* | ||
2 | - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | ||
3 | - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | ||
4 | - * aplicativos mainframe. Registro no INPI sob o nome G3270. | ||
5 | - * | ||
6 | - * Copyright (C) <2008> <Banco do Brasil S.A.> | ||
7 | - * | ||
8 | - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | ||
9 | - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | ||
10 | - * Free Software Foundation. | ||
11 | - * | ||
12 | - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | ||
13 | - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | ||
14 | - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | ||
15 | - * obter mais detalhes. | ||
16 | - * | ||
17 | - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | ||
18 | - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin | ||
19 | - * St, Fifth Floor, Boston, MA 02110-1301 USA | ||
20 | - * | ||
21 | - * Este programa está nomeado como charset.h e possui - linhas de código. | ||
22 | - * | ||
23 | - * Contatos: | ||
24 | - * | ||
25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | ||
26 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | ||
27 | - * licinio@bb.com.br (Licínio Luis Branco) | ||
28 | - * kraucer@bb.com.br (Kraucer Fernandes Mazuco) | ||
29 | - * | ||
30 | - */ | ||
31 | - | ||
32 | -#ifndef LIB3270_CHARSET_H_INCLUDED | ||
33 | - | ||
34 | - #define LIB3270_CHARSET_H_INCLUDED 1 | ||
35 | - | ||
36 | - LIB3270_INTERNAL const unsigned short ebc2asc0[256]; | ||
37 | - LIB3270_INTERNAL const unsigned short asc2ft0[256]; | ||
38 | - | ||
39 | - const struct lib3270_charset lib3270_default_charset; | ||
40 | - | ||
41 | - LIB3270_EXPORT struct lib3270_charset * lib3270_load_charset(H3270 *hSession, const char *name); | ||
42 | - | ||
43 | -#endif // LIB3270_CHARSET_H_INCLUDED |
src/lib3270/globals.h
@@ -331,6 +331,10 @@ enum keytype | @@ -331,6 +331,10 @@ enum keytype | ||
331 | KT_GE | 331 | KT_GE |
332 | }; | 332 | }; |
333 | 333 | ||
334 | +/* default charset translation tables */ | ||
335 | +LIB3270_INTERNAL const unsigned short ebc2asc0[256]; | ||
336 | +LIB3270_INTERNAL const unsigned short asc2ft0[256]; | ||
337 | + | ||
334 | 338 | ||
335 | /* Library internal calls */ | 339 | /* Library internal calls */ |
336 | LIB3270_INTERNAL void key_ACharacter(H3270 *hSession, unsigned char c, enum keytype keytype, enum iaction cause,Boolean *skipped); | 340 | LIB3270_INTERNAL void key_ACharacter(H3270 *hSession, unsigned char c, enum keytype keytype, enum iaction cause,Boolean *skipped); |