Commit 04c0ee5c557d63f0eb15ac0e7f0496d0ae7a5a6f

Authored by Perry Werneck
1 parent 053ca75f

+ Changing the management method for the action tables.

@@ -163,6 +163,9 @@ @@ -163,6 +163,9 @@
163 <Unit filename="src/lib3270/macros.c"> 163 <Unit filename="src/lib3270/macros.c">
164 <Option compilerVar="CC" /> 164 <Option compilerVar="CC" />
165 </Unit> 165 </Unit>
  166 + <Unit filename="src/lib3270/mkactions/mkactions.c">
  167 + <Option compilerVar="CC" />
  168 + </Unit>
166 <Unit filename="src/lib3270/mkfb/mkfb.c"> 169 <Unit filename="src/lib3270/mkfb/mkfb.c">
167 <Option compilerVar="CC" /> 170 <Option compilerVar="CC" />
168 </Unit> 171 </Unit>
src/include/lib3270/action_table.h
@@ -39,53 +39,55 @@ @@ -39,53 +39,55 @@
39 */ 39 */
40 40
41 /* Keyboard actions */ 41 /* Keyboard actions */
42 - DECLARE_LIB3270_KEY_ACTION( enter ) 42 + DECLARE_LIB3270_KEY_ACTION( enter, "Send an \"Enter\" action." )
43 43
44 - DECLARE_LIB3270_FKEY_ACTION( pfkey )  
45 - DECLARE_LIB3270_FKEY_ACTION( pakey ) 44 + DECLARE_LIB3270_FKEY_ACTION( pfkey, "" )
  45 + DECLARE_LIB3270_FKEY_ACTION( pakey, "" )
46 46
47 /* Cursor movement */ 47 /* Cursor movement */
48 - DECLARE_LIB3270_CURSOR_ACTION( up )  
49 - DECLARE_LIB3270_CURSOR_ACTION( down )  
50 - DECLARE_LIB3270_CURSOR_ACTION( left )  
51 - DECLARE_LIB3270_CURSOR_ACTION( right )  
52 - DECLARE_LIB3270_CURSOR_ACTION( newline ) 48 + DECLARE_LIB3270_CURSOR_ACTION( up, "Cursor up 1 position." )
  49 + DECLARE_LIB3270_CURSOR_ACTION( down, "Cursor down 1 position." )
  50 + DECLARE_LIB3270_CURSOR_ACTION( left, "Cursor left 1 position." )
  51 + DECLARE_LIB3270_CURSOR_ACTION( right, "Cursor right 1 position." )
  52 +
  53 + DECLARE_LIB3270_ACTION( newline, "Cursor to first field on next line or any lines after that." )
53 54
54 /* Misc actions */ 55 /* Misc actions */
55 - DECLARE_LIB3270_ACTION( kybdreset )  
56 - DECLARE_LIB3270_ACTION( clear )  
57 - DECLARE_LIB3270_ACTION( eraseinput )  
58 -  
59 - DECLARE_LIB3270_ACTION( select_field )  
60 - DECLARE_LIB3270_ACTION( select_all )  
61 - DECLARE_LIB3270_ACTION( unselect )  
62 - DECLARE_LIB3270_ACTION( reselect )  
63 -  
64 - DECLARE_LIB3270_ACTION( firstfield )  
65 - DECLARE_LIB3270_ACTION( eraseeof )  
66 - DECLARE_LIB3270_ACTION( eraseeol )  
67 - DECLARE_LIB3270_ACTION( erase )  
68 - DECLARE_LIB3270_ACTION( delete )  
69 - DECLARE_LIB3270_ACTION( dup )  
70 - DECLARE_LIB3270_ACTION( fieldmark )  
71 -  
72 - DECLARE_LIB3270_ACTION( backspace )  
73 - DECLARE_LIB3270_ACTION( previousword )  
74 - DECLARE_LIB3270_ACTION( nextword )  
75 - DECLARE_LIB3270_ACTION( fieldend )  
76 -  
77 - DECLARE_LIB3270_ACTION( nextfield )  
78 - DECLARE_LIB3270_ACTION( previousfield )  
79 -  
80 - DECLARE_LIB3270_ACTION( attn )  
81 - DECLARE_LIB3270_ACTION( break )  
82 - DECLARE_LIB3270_ACTION( pastenext )  
83 -  
84 - DECLARE_LIB3270_ACTION( deleteword )  
85 - DECLARE_LIB3270_ACTION( deletefield )  
86 - DECLARE_LIB3270_ACTION( sysreq )  
87 -  
88 - DECLARE_LIB3270_ACTION( testpattern )  
89 - DECLARE_LIB3270_ACTION( charsettable ) 56 + DECLARE_LIB3270_ACTION( kybdreset, "" )
  57 + DECLARE_LIB3270_ACTION( clear, "Clear AID key" )
  58 + DECLARE_LIB3270_ACTION( eraseinput, "" )
  59 +
  60 + DECLARE_LIB3270_ACTION( select_field, "" )
  61 + DECLARE_LIB3270_ACTION( select_all, "" )
  62 + DECLARE_LIB3270_ACTION( unselect, "" )
  63 + DECLARE_LIB3270_ACTION( reselect, "" )
  64 +
  65 + DECLARE_LIB3270_ACTION( eraseeof, "Erase End Of Field Key." )
  66 + DECLARE_LIB3270_ACTION( eraseeol, "Erase End Of Line Key." )
  67 + DECLARE_LIB3270_ACTION( erase, "" )
  68 + DECLARE_LIB3270_ACTION( delete, "" )
  69 + DECLARE_LIB3270_ACTION( dup, "DUP key" )
  70 + DECLARE_LIB3270_ACTION( fieldmark, "FM key" )
  71 +
  72 + DECLARE_LIB3270_ACTION( backspace, "3270-style backspace." )
  73 +
  74 + DECLARE_LIB3270_ACTION( previousword, "Cursor to previous word." )
  75 + DECLARE_LIB3270_ACTION( nextword, "Cursor to next unprotected word." )
  76 + DECLARE_LIB3270_ACTION( fieldend, "Move the cursor to the first blank after the last nonblank in the field." )
  77 +
  78 + DECLARE_LIB3270_ACTION( firstfield, "Move to first unprotected field on screen." )
  79 + DECLARE_LIB3270_ACTION( nextfield, "" )
  80 + DECLARE_LIB3270_ACTION( previousfield, "Tab backward to previous field." )
  81 +
  82 + DECLARE_LIB3270_ACTION( attn, "ATTN key, per RFC 2355. Sends IP, regardless." )
  83 + DECLARE_LIB3270_ACTION( break, "" )
  84 + DECLARE_LIB3270_ACTION( pastenext, "" )
  85 +
  86 + DECLARE_LIB3270_ACTION( deleteword, "Backspaces the cursor until it hits the front of a word (does a ^W)." )
  87 + DECLARE_LIB3270_ACTION( deletefield, "Delete field key (does a ^U)." )
  88 + DECLARE_LIB3270_ACTION( sysreq, "" )
  89 +
  90 + DECLARE_LIB3270_ACTION( testpattern, "" )
  91 + DECLARE_LIB3270_ACTION( charsettable, "" )
90 92
91 93
src/include/lib3270/actions.h
@@ -1,58 +0,0 @@ @@ -1,58 +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 actions.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 de Mendonça)  
27 - * licinio@bb.com.br (Licínio Luis Branco)  
28 - * kraucer@bb.com.br (Kraucer Fernandes Mazuco)  
29 - * macmiranda@bb.com.br (Marco Aurélio Caldas Miranda)  
30 - *  
31 - */  
32 -  
33 -#ifdef __cplusplus  
34 - extern "C" {  
35 -#endif  
36 -  
37 - // Standard actions  
38 - #define DECLARE_LIB3270_ACTION( name ) LIB3270_EXPORT int lib3270_ ## name (H3270 *hSession);  
39 - #define LIB3270_ACTION( name ) LIB3270_EXPORT int lib3270_ ## name (H3270 *hSession)  
40 -  
41 - // Single key actions  
42 - #define DECLARE_LIB3270_KEY_ACTION( name ) LIB3270_EXPORT int lib3270_ ## name (H3270 *hSession);  
43 - #define LIB3270_KEY_ACTION( name ) LIB3270_EXPORT int lib3270_ ## name (H3270 *hSession)  
44 -  
45 - // Cursor actions  
46 - #define DECLARE_LIB3270_CURSOR_ACTION( name ) LIB3270_EXPORT int lib3270_cursor_ ## name (H3270 *hSession);  
47 - #define LIB3270_CURSOR_ACTION( name ) LIB3270_EXPORT int lib3270_cursor_ ## name (H3270 *hSession)  
48 -  
49 - // PF & PA key actions  
50 - #define DECLARE_LIB3270_FKEY_ACTION( name ) LIB3270_EXPORT int lib3270_ ## name (H3270 *hSession, int key);  
51 - #define LIB3270_FKEY_ACTION( name ) LIB3270_EXPORT int lib3270_ ## name (H3270 *hSession, int key)  
52 -  
53 - // Load action table entries  
54 - #include <lib3270/action_table.h>  
55 -  
56 -#ifdef __cplusplus  
57 - }  
58 -#endif  
src/lib3270/Makefile.in
@@ -84,8 +84,8 @@ DEPENDS= \ @@ -84,8 +84,8 @@ DEPENDS= \
84 Makefile \ 84 Makefile \
85 ../include/*.h \ 85 ../include/*.h \
86 ../include/lib3270/*.h \ 86 ../include/lib3270/*.h \
87 - ../lib3270/*.h  
88 - 87 + ../lib3270/*.h \
  88 + $(BASEDIR)/src/include/lib3270/actions.h
89 89
90 CFLAGS= \ 90 CFLAGS= \
91 @CFLAGS@ \ 91 @CFLAGS@ \
@@ -286,6 +286,21 @@ $(BASEDIR)/.tmp/$(LIBNAME)/fallbacks.c: \ @@ -286,6 +286,21 @@ $(BASEDIR)/.tmp/$(LIBNAME)/fallbacks.c: \
286 @$(HOST_CC) -g -o $(BINDIR)/mkfb@EXEEXT@ $(wildcard mkfb/*.c) 286 @$(HOST_CC) -g -o $(BINDIR)/mkfb@EXEEXT@ $(wildcard mkfb/*.c)
287 @$(BINDIR)/mkfb@EXEEXT@ -c X3270.xad $@ 287 @$(BINDIR)/mkfb@EXEEXT@ -c X3270.xad $@
288 288
  289 +$(BASEDIR)/src/include/lib3270/actions.h: \
  290 + ../include/lib3270/action_table.h \
  291 + $(wildcard mkactions/*.c)
  292 +
  293 + @$(MKDIR) `dirname $@`
  294 + @$(MKDIR) $(BINDIR)
  295 + @echo $< ...
  296 + @$(HOST_CC) \
  297 + -g \
  298 + -I../include \
  299 + -DBUILD_DATE=`date +%Y%m%d` \
  300 + -o $(BINDIR)/mkactions@EXEEXT@ \
  301 + $(wildcard mkactions/*.c)
  302 + @$(BINDIR)/mkactions@EXEEXT@ -o $@
  303 +
289 $(POTDIR)/$(LIBNAME).pot: \ 304 $(POTDIR)/$(LIBNAME).pot: \
290 $(foreach SRC, $(basename $(SOURCES)), $(POTDIR)/$(LIBNAME)/$(SRC).pot) 305 $(foreach SRC, $(basename $(SOURCES)), $(POTDIR)/$(LIBNAME)/$(SRC).pot)
291 306
@@ -369,6 +384,7 @@ cleanDebug: @@ -369,6 +384,7 @@ cleanDebug:
369 384
370 @rm -fr $(OBJDBG) 385 @rm -fr $(OBJDBG)
371 @rm -fr $(BINDBG) 386 @rm -fr $(BINDBG)
  387 + @rm -fr $(BASEDIR)/src/include/lib3270/actions.h
372 388
373 cleanRelease: 389 cleanRelease:
374 390
@@ -376,6 +392,7 @@ cleanRelease: @@ -376,6 +392,7 @@ cleanRelease:
376 @rm -fr $(BINRLS) 392 @rm -fr $(BINRLS)
377 @rm -fr $(POTDIR) 393 @rm -fr $(POTDIR)
378 @rm -f lib$(LIBNAME).pot 394 @rm -f lib$(LIBNAME).pot
  395 + @rm -fr $(BASEDIR)/src/include/lib3270/actions.h
379 396
380 clean: \ 397 clean: \
381 cleanDebug \ 398 cleanDebug \
src/lib3270/actions.c
@@ -48,11 +48,11 @@ LIB3270_EXPORT int lib3270_action(H3270 *hSession, const char *name) @@ -48,11 +48,11 @@ LIB3270_EXPORT int lib3270_action(H3270 *hSession, const char *name)
48 #undef DECLARE_LIB3270_CURSOR_ACTION 48 #undef DECLARE_LIB3270_CURSOR_ACTION
49 #undef DECLARE_LIB3270_FKEY_ACTION 49 #undef DECLARE_LIB3270_FKEY_ACTION
50 50
51 - #define DECLARE_LIB3270_ACTION( name ) { #name, lib3270_ ## name },  
52 - #define DECLARE_LIB3270_CLEAR_SELECTION_ACTION( name ) { #name, lib3270_ ## name },  
53 - #define DECLARE_LIB3270_KEY_ACTION( name ) { #name, lib3270_ ## name },  
54 - #define DECLARE_LIB3270_CURSOR_ACTION( name ) { #name, lib3270_cursor_ ## name },  
55 - #define DECLARE_LIB3270_FKEY_ACTION( name ) // name 51 + #define DECLARE_LIB3270_ACTION( name, description ) { #name, lib3270_ ## name },
  52 + #define DECLARE_LIB3270_CLEAR_SELECTION_ACTION( name, description ) { #name, lib3270_ ## name },
  53 + #define DECLARE_LIB3270_KEY_ACTION( name, description ) { #name, lib3270_ ## name },
  54 + #define DECLARE_LIB3270_CURSOR_ACTION( name, description ) { #name, lib3270_cursor_ ## name },
  55 + #define DECLARE_LIB3270_FKEY_ACTION( name, description ) // name
56 56
57 static const struct _action 57 static const struct _action
58 { 58 {
src/lib3270/charset.c
@@ -204,9 +204,9 @@ static const unsigned short asc2uc[UT_SIZE] = @@ -204,9 +204,9 @@ static const unsigned short asc2uc[UT_SIZE] =
204 204
205 typedef struct _info 205 typedef struct _info
206 { 206 {
207 - const char * name;  
208 - unsigned long cgcsgid;  
209 - const unsigned short const * chr; 207 + const char * name;
  208 + unsigned long cgcsgid;
  209 + const unsigned short * chr;
210 } remap; 210 } remap;
211 211
212 static const remap charset[] = 212 static const remap charset[] =
@@ -214,7 +214,7 @@ static const remap charset[] = @@ -214,7 +214,7 @@ static const remap charset[] =
214 { 214 {
215 "us", 215 "us",
216 LIB3270_DEFAULT_CGEN | LIB3270_DEFAULT_CSET, 216 LIB3270_DEFAULT_CGEN | LIB3270_DEFAULT_CSET,
217 - (const unsigned short const []) 217 + (const unsigned short [])
218 { 218 {
219 0x0000, 0x0000 219 0x0000, 0x0000
220 } 220 }
@@ -223,7 +223,7 @@ static const remap charset[] = @@ -223,7 +223,7 @@ static const remap charset[] =
223 { 223 {
224 "bracket", 224 "bracket",
225 LIB3270_DEFAULT_CGEN|LIB3270_DEFAULT_CSET, 225 LIB3270_DEFAULT_CGEN|LIB3270_DEFAULT_CSET,
226 - (const unsigned short const []) 226 + (const unsigned short [])
227 { 227 {
228 0x00ad, '[', 228 0x00ad, '[',
229 0x00ba, XK_Yacute, 229 0x00ba, XK_Yacute,
@@ -236,7 +236,7 @@ static const remap charset[] = @@ -236,7 +236,7 @@ static const remap charset[] =
236 { 236 {
237 "cp500", 237 "cp500",
238 LIB3270_DEFAULT_CGEN|0x000001F4, 238 LIB3270_DEFAULT_CGEN|0x000001F4,
239 - (const unsigned short const []) 239 + (const unsigned short [])
240 { 240 {
241 0x004a, '[', 241 0x004a, '[',
242 0x004f, '!', 242 0x004f, '!',
@@ -345,7 +345,7 @@ LIB3270_EXPORT const char * lib3270_get_host_charset(H3270 *hSession) @@ -345,7 +345,7 @@ LIB3270_EXPORT const char * lib3270_get_host_charset(H3270 *hSession)
345 return hSession->charset.host; 345 return hSession->charset.host;
346 } 346 }
347 347
348 -LIB3270_ACTION( charsettable ) 348 +LIB3270_EXPORT int lib3270_charsettable(H3270 *hSession)
349 { 349 {
350 static const char * hChars = "0123456789ABCDEF"; 350 static const char * hChars = "0123456789ABCDEF";
351 static const char * label = "Name:"; 351 static const char * label = "Name:";
src/lib3270/kybd.c
@@ -51,31 +51,21 @@ struct ta; @@ -51,31 +51,21 @@ struct ta;
51 #if defined(X3270_APL) /*[*/ 51 #if defined(X3270_APL) /*[*/
52 #define XK_APL 52 #define XK_APL
53 #endif /*]*/ 53 #endif /*]*/
54 -// #include <X11/keysym.h>  
55 54
56 #include <fcntl.h> 55 #include <fcntl.h>
57 #include "3270ds.h" 56 #include "3270ds.h"
58 -// #include "appres.h"  
59 -// #include "ctlr.h"  
60 #include "resources.h" 57 #include "resources.h"
61 58
62 -//#include "actionsc.h"  
63 #include "ansic.h" 59 #include "ansic.h"
64 -//#include "aplc.h"  
65 #include "ctlrc.h" 60 #include "ctlrc.h"
66 #include "ftc.h" 61 #include "ftc.h"
67 #include "hostc.h" 62 #include "hostc.h"
68 -// #include "keypadc.h"  
69 #include "kybdc.h" 63 #include "kybdc.h"
70 #include "popupsc.h" 64 #include "popupsc.h"
71 // #include "printc.h" 65 // #include "printc.h"
72 #include "screenc.h" 66 #include "screenc.h"
73 #include "screen.h" 67 #include "screen.h"
74 -// #if defined(X3270_DISPLAY) /*[*/  
75 -// #include "selectc.h"  
76 -// #endif /*]*/  
77 #include "statusc.h" 68 #include "statusc.h"
78 -// #include "tablesc.h"  
79 #include "telnetc.h" 69 #include "telnetc.h"
80 #include "togglesc.h" 70 #include "togglesc.h"
81 #include "trace_dsc.h" 71 #include "trace_dsc.h"
@@ -84,6 +74,9 @@ struct ta; @@ -84,6 +74,9 @@ struct ta;
84 #if defined(X3270_DBCS) /*[*/ 74 #if defined(X3270_DBCS) /*[*/
85 #include "widec.h" 75 #include "widec.h"
86 #endif /*]*/ 76 #endif /*]*/
  77 +
  78 +#include <lib3270/actions.h>
  79 +
87 #include "api.h" 80 #include "api.h"
88 81
89 82
@@ -526,14 +519,15 @@ static void key_AID(H3270 *hSession, unsigned char aid_code) @@ -526,14 +519,15 @@ static void key_AID(H3270 *hSession, unsigned char aid_code)
526 status_ctlr_done(hSession); 519 status_ctlr_done(hSession);
527 } 520 }
528 521
529 -LIB3270_FKEY_ACTION( pfkey ) 522 +LIB3270_EXPORT int lib3270_pfkey(H3270 *hSession, int key)
530 { 523 {
  524 + FAIL_IF_NOT_ONLINE(hSession)
531 525
532 if (key < 1 || key > PF_SZ) 526 if (key < 1 || key > PF_SZ)
533 - return EINVAL; 527 + return errno = EINVAL;
534 528
535 if (hSession->kybdlock & KL_OIA_MINUS) 529 if (hSession->kybdlock & KL_OIA_MINUS)
536 - return -1; 530 + return errno = EPERM;
537 531
538 if (hSession->kybdlock) 532 if (hSession->kybdlock)
539 { 533 {
@@ -553,15 +547,17 @@ LIB3270_FKEY_ACTION( pfkey ) @@ -553,15 +547,17 @@ LIB3270_FKEY_ACTION( pfkey )
553 return 0; 547 return 0;
554 } 548 }
555 549
556 -LIB3270_FKEY_ACTION( pakey ) 550 +LIB3270_EXPORT int lib3270_pakey(H3270 *hSession, int key)
557 { 551 {
  552 + FAIL_IF_NOT_ONLINE(hSession)
  553 +
558 if (key < 1 || key > PA_SZ) 554 if (key < 1 || key > PA_SZ)
559 { 555 {
560 - return EINVAL; 556 + return errno = EINVAL;
561 } 557 }
562 558
563 if (hSession->kybdlock & KL_OIA_MINUS) 559 if (hSession->kybdlock & KL_OIA_MINUS)
564 - return -1; 560 + return errno = EPERM;
565 else if (hSession->kybdlock) 561 else if (hSession->kybdlock)
566 enq_key(hSession,pa_xlate[key-1]); 562 enq_key(hSession,pa_xlate[key-1]);
567 else 563 else
@@ -570,23 +566,23 @@ LIB3270_FKEY_ACTION( pakey ) @@ -570,23 +566,23 @@ LIB3270_FKEY_ACTION( pakey )
570 return 0; 566 return 0;
571 } 567 }
572 568
573 -LIB3270_ACTION(break) 569 +LIB3270_EXPORT int lib3270_break(H3270 *hSession)
574 { 570 {
575 if (!IN_3270) 571 if (!IN_3270)
576 - return 0; 572 + return errno = ENOTCONN;
577 573
578 net_break(hSession); 574 net_break(hSession);
579 575
580 return 0; 576 return 0;
581 } 577 }
582 578
583 -/*  
584 - * ATTN key, per RFC 2355. Sends IP, regardless. 579 +/***
  580 + * @brief ATTN key, per RFC 2355. Sends IP, regardless.
585 */ 581 */
586 -LIB3270_ACTION(attn) 582 +LIB3270_EXPORT int lib3270_attn(H3270 *hSession)
587 { 583 {
588 if (!IN_3270) 584 if (!IN_3270)
589 - return 0; 585 + return errno = ENOTCONN;
590 586
591 net_interrupt(hSession); 587 net_interrupt(hSession);
592 588
@@ -1018,10 +1014,10 @@ void key_ACharacter(H3270 *hSession, unsigned char c, enum keytype keytype, enum @@ -1018,10 +1014,10 @@ void key_ACharacter(H3270 *hSession, unsigned char c, enum keytype keytype, enum
1018 } 1014 }
1019 } 1015 }
1020 1016
1021 -LIB3270_ACTION( nextfield ) 1017 +LIB3270_EXPORT int lib3270_nextfield(H3270 *hSession)
1022 { 1018 {
1023 1019
1024 -// reset_idle_timer(); 1020 + FAIL_IF_NOT_ONLINE(hSession);
1025 1021
1026 if (hSession->kybdlock) 1022 if (hSession->kybdlock)
1027 { 1023 {
@@ -1060,16 +1056,15 @@ LIB3270_EXPORT int lib3270_clear_operator_error(H3270 *hSession) @@ -1060,16 +1056,15 @@ LIB3270_EXPORT int lib3270_clear_operator_error(H3270 *hSession)
1060 return EINVAL; 1056 return EINVAL;
1061 } 1057 }
1062 1058
1063 -  
1064 -/*  
1065 - * Tab backward to previous field. 1059 +/**
  1060 + * @brief Tab backward to previous field.
1066 */ 1061 */
1067 -LIB3270_ACTION( previousfield ) 1062 +LIB3270_EXPORT int lib3270_previousfield(H3270 *hSession)
1068 { 1063 {
1069 register int baddr, nbaddr; 1064 register int baddr, nbaddr;
1070 int sbaddr; 1065 int sbaddr;
1071 1066
1072 -// reset_idle_timer(); 1067 + FAIL_IF_NOT_ONLINE(hSession);
1073 1068
1074 if (hSession->kybdlock) 1069 if (hSession->kybdlock)
1075 { 1070 {
@@ -1187,20 +1182,20 @@ void do_reset(H3270 *hSession, Boolean explicit) @@ -1187,20 +1182,20 @@ void do_reset(H3270 *hSession, Boolean explicit)
1187 1182
1188 } 1183 }
1189 1184
1190 -LIB3270_ACTION( kybdreset ) 1185 +LIB3270_EXPORT int lib3270_kybdreset(H3270 *hSession)
1191 { 1186 {
1192 lib3270_unselect(hSession); 1187 lib3270_unselect(hSession);
1193 do_reset(hSession,True); 1188 do_reset(hSession,True);
1194 return 0; 1189 return 0;
1195 } 1190 }
1196 1191
1197 -  
1198 -/*  
1199 - * Move to first unprotected field on screen. 1192 +/**
  1193 + * @brief Move to first unprotected field on screen.
1200 */ 1194 */
1201 -LIB3270_ACTION( firstfield ) 1195 +LIB3270_EXPORT int lib3270_firstfield(H3270 *hSession)
1202 { 1196 {
1203 -// reset_idle_timer(); 1197 + FAIL_IF_NOT_ONLINE(hSession);
  1198 +
1204 if (hSession->kybdlock) 1199 if (hSession->kybdlock)
1205 { 1200 {
1206 ENQUEUE_ACTION(lib3270_firstfield); 1201 ENQUEUE_ACTION(lib3270_firstfield);
@@ -1222,9 +1217,8 @@ LIB3270_ACTION( firstfield ) @@ -1222,9 +1217,8 @@ LIB3270_ACTION( firstfield )
1222 return 0; 1217 return 0;
1223 } 1218 }
1224 1219
1225 -  
1226 -/*  
1227 - * Cursor left 1 position. 1220 +/**
  1221 + * @brief Cursor left 1 position.
1228 */ 1222 */
1229 static void do_left(H3270 *hSession) 1223 static void do_left(H3270 *hSession)
1230 { 1224 {
@@ -1239,8 +1233,10 @@ static void do_left(H3270 *hSession) @@ -1239,8 +1233,10 @@ static void do_left(H3270 *hSession)
1239 cursor_move(hSession,baddr); 1233 cursor_move(hSession,baddr);
1240 } 1234 }
1241 1235
1242 -LIB3270_CURSOR_ACTION( left ) 1236 +LIB3270_EXPORT int lib3270_cursor_left(H3270 *hSession)
1243 { 1237 {
  1238 + FAIL_IF_NOT_ONLINE(hSession);
  1239 +
1244 if (hSession->kybdlock) 1240 if (hSession->kybdlock)
1245 { 1241 {
1246 if(KYBDLOCK_IS_OERR(hSession)) 1242 if(KYBDLOCK_IS_OERR(hSession))
@@ -1278,9 +1274,8 @@ LIB3270_CURSOR_ACTION( left ) @@ -1278,9 +1274,8 @@ LIB3270_CURSOR_ACTION( left )
1278 return 0; 1274 return 0;
1279 } 1275 }
1280 1276
1281 -  
1282 /** 1277 /**
1283 - * Delete char key. 1278 + * @brief Delete char key.
1284 * 1279 *
1285 * @param hSession Session handle 1280 * @param hSession Session handle
1286 * 1281 *
@@ -1375,8 +1370,10 @@ static Boolean do_delete(H3270 *hSession) @@ -1375,8 +1370,10 @@ static Boolean do_delete(H3270 *hSession)
1375 return True; 1370 return True;
1376 } 1371 }
1377 1372
1378 -LIB3270_ACTION( delete ) 1373 +LIB3270_EXPORT int lib3270_delete(H3270 *hSession)
1379 { 1374 {
  1375 + FAIL_IF_NOT_ONLINE(hSession);
  1376 +
1380 if (hSession->kybdlock) 1377 if (hSession->kybdlock)
1381 { 1378 {
1382 ENQUEUE_ACTION(lib3270_delete); 1379 ENQUEUE_ACTION(lib3270_delete);
@@ -1403,12 +1400,13 @@ LIB3270_ACTION( delete ) @@ -1403,12 +1400,13 @@ LIB3270_ACTION( delete )
1403 return 0; 1400 return 0;
1404 } 1401 }
1405 1402
1406 -  
1407 -/*  
1408 - * 3270-style backspace. 1403 +/**
  1404 + * @brief 3270-style backspace.
1409 */ 1405 */
1410 -LIB3270_ACTION( backspace ) 1406 +LIB3270_EXPORT int lib3270_backspace(H3270 *hSession)
1411 { 1407 {
  1408 + FAIL_IF_NOT_ONLINE(hSession);
  1409 +
1412 if (hSession->kybdlock) 1410 if (hSession->kybdlock)
1413 { 1411 {
1414 ENQUEUE_ACTION( lib3270_backspace ); 1412 ENQUEUE_ACTION( lib3270_backspace );
@@ -1435,9 +1433,8 @@ LIB3270_ACTION( backspace ) @@ -1435,9 +1433,8 @@ LIB3270_ACTION( backspace )
1435 return 0; 1433 return 0;
1436 } 1434 }
1437 1435
1438 -  
1439 -/*  
1440 - * Destructive backspace, like Unix "erase". 1436 +/**
  1437 + * @brief Destructive backspace, like Unix "erase".
1441 */ 1438 */
1442 static void do_erase(H3270 *hSession) 1439 static void do_erase(H3270 *hSession)
1443 { 1440 {
@@ -1501,9 +1498,10 @@ static void do_erase(H3270 *hSession) @@ -1501,9 +1498,10 @@ static void do_erase(H3270 *hSession)
1501 hSession->cbk.display(hSession); 1498 hSession->cbk.display(hSession);
1502 } 1499 }
1503 1500
1504 -LIB3270_ACTION( erase ) 1501 +int lib3270_erase(H3270 *hSession)
1505 { 1502 {
1506 -// reset_idle_timer(); 1503 + FAIL_IF_NOT_ONLINE(hSession);
  1504 +
1507 if (hSession->kybdlock) 1505 if (hSession->kybdlock)
1508 { 1506 {
1509 ENQUEUE_ACTION(lib3270_erase); 1507 ENQUEUE_ACTION(lib3270_erase);
@@ -1521,13 +1519,15 @@ LIB3270_ACTION( erase ) @@ -1521,13 +1519,15 @@ LIB3270_ACTION( erase )
1521 } 1519 }
1522 1520
1523 /** 1521 /**
1524 - * Cursor right 1 position. 1522 + * @brief Cursor right 1 position.
1525 */ 1523 */
1526 -LIB3270_CURSOR_ACTION( right ) 1524 +LIB3270_EXPORT int lib3270_cursor_right(H3270 *hSession)
1527 { 1525 {
1528 register int baddr; 1526 register int baddr;
1529 enum dbcs_state d; 1527 enum dbcs_state d;
1530 1528
  1529 + FAIL_IF_NOT_ONLINE(hSession);
  1530 +
1531 if (hSession->kybdlock) 1531 if (hSession->kybdlock)
1532 { 1532 {
1533 if (KYBDLOCK_IS_OERR(hSession)) 1533 if (KYBDLOCK_IS_OERR(hSession))
@@ -1563,18 +1563,18 @@ LIB3270_CURSOR_ACTION( right ) @@ -1563,18 +1563,18 @@ LIB3270_CURSOR_ACTION( right )
1563 return 0; 1563 return 0;
1564 } 1564 }
1565 1565
1566 -  
1567 -/*  
1568 - * Cursor to previous word. 1566 +/**
  1567 + * @brief Cursor to previous word.
1569 */ 1568 */
1570 -LIB3270_ACTION( previousword ) 1569 +LIB3270_EXPORT int lib3270_previousword(H3270 *hSession)
1571 { 1570 {
1572 register int baddr; 1571 register int baddr;
1573 int baddr0; 1572 int baddr0;
1574 unsigned char c; 1573 unsigned char c;
1575 Boolean prot; 1574 Boolean prot;
1576 1575
1577 -// reset_idle_timer(); 1576 + FAIL_IF_NOT_ONLINE(hSession);
  1577 +
1578 if (hSession->kybdlock) { 1578 if (hSession->kybdlock) {
1579 ENQUEUE_ACTION(lib3270_previousword); 1579 ENQUEUE_ACTION(lib3270_previousword);
1580 // enq_ta(PreviousWord_action, CN, CN); 1580 // enq_ta(PreviousWord_action, CN, CN);
@@ -1688,15 +1688,16 @@ static int nt_word(H3270 *hSession, int baddr) @@ -1688,15 +1688,16 @@ static int nt_word(H3270 *hSession, int baddr)
1688 } 1688 }
1689 1689
1690 1690
1691 -/*  
1692 - * Cursor to next unprotected word. 1691 +/**
  1692 + * @brief Cursor to next unprotected word.
1693 */ 1693 */
1694 -LIB3270_ACTION( nextword ) 1694 +LIB3270_EXPORT int lib3270_nextword(H3270 *hSession)
1695 { 1695 {
1696 register int baddr; 1696 register int baddr;
1697 unsigned char c; 1697 unsigned char c;
1698 1698
1699 -// reset_idle_timer(); 1699 + FAIL_IF_NOT_ONLINE(hSession);
  1700 +
1700 if (hSession->kybdlock) { 1701 if (hSession->kybdlock) {
1701 ENQUEUE_ACTION( lib3270_nextword ); 1702 ENQUEUE_ACTION( lib3270_nextword );
1702 // enq_ta(NextWord_action, CN, CN); 1703 // enq_ta(NextWord_action, CN, CN);
@@ -1753,19 +1754,15 @@ LIB3270_ACTION( nextword ) @@ -1753,19 +1754,15 @@ LIB3270_ACTION( nextword )
1753 return 0; 1754 return 0;
1754 } 1755 }
1755 1756
1756 -  
1757 -  
1758 /** 1757 /**
1759 - * Cursor up 1 position.  
1760 - *  
1761 - * @return 0  
1762 - * 1758 + * @brief Cursor up 1 position.
1763 */ 1759 */
1764 -LIB3270_CURSOR_ACTION( up ) 1760 +LIB3270_EXPORT int lib3270_cursor_up(H3270 *hSession)
1765 { 1761 {
1766 register int baddr; 1762 register int baddr;
1767 1763
1768 -// reset_idle_timer(); 1764 + FAIL_IF_NOT_ONLINE(hSession);
  1765 +
1769 if (hSession->kybdlock) 1766 if (hSession->kybdlock)
1770 { 1767 {
1771 if (KYBDLOCK_IS_OERR(hSession)) 1768 if (KYBDLOCK_IS_OERR(hSession))
@@ -1794,16 +1791,15 @@ LIB3270_CURSOR_ACTION( up ) @@ -1794,16 +1791,15 @@ LIB3270_CURSOR_ACTION( up )
1794 } 1791 }
1795 1792
1796 /** 1793 /**
1797 - * Cursor down 1 position.  
1798 - *  
1799 - * @return 0 1794 + * @brief Cursor down 1 position.
1800 * 1795 *
1801 */ 1796 */
1802 -LIB3270_CURSOR_ACTION( down ) 1797 +LIB3270_EXPORT int lib3270_cursor_down(H3270 *hSession)
1803 { 1798 {
1804 register int baddr; 1799 register int baddr;
1805 1800
1806 -// reset_idle_timer(); 1801 + FAIL_IF_NOT_ONLINE(hSession);
  1802 +
1807 if (hSession->kybdlock) 1803 if (hSession->kybdlock)
1808 { 1804 {
1809 if (KYBDLOCK_IS_OERR(hSession)) 1805 if (KYBDLOCK_IS_OERR(hSession))
@@ -1829,18 +1825,19 @@ LIB3270_CURSOR_ACTION( down ) @@ -1829,18 +1825,19 @@ LIB3270_CURSOR_ACTION( down )
1829 return 0; 1825 return 0;
1830 } 1826 }
1831 1827
1832 -  
1833 /** 1828 /**
1834 - * Cursor to first field on next line or any lines after that. 1829 + * @brief Cursor to first field on next line or any lines after that.
1835 */ 1830 */
1836 -LIB3270_CURSOR_ACTION( newline ) 1831 +LIB3270_EXPORT int lib3270_newline(H3270 *hSession)
1837 { 1832 {
1838 register int baddr, faddr; 1833 register int baddr, faddr;
1839 register unsigned char fa; 1834 register unsigned char fa;
1840 1835
  1836 + FAIL_IF_NOT_ONLINE(hSession);
  1837 +
1841 if (hSession->kybdlock) 1838 if (hSession->kybdlock)
1842 { 1839 {
1843 - ENQUEUE_ACTION(lib3270_cursor_newline); 1840 + ENQUEUE_ACTION(lib3270_newline);
1844 return 0; 1841 return 0;
1845 } 1842 }
1846 #if defined(X3270_ANSI) /*[*/ 1843 #if defined(X3270_ANSI) /*[*/
@@ -1862,12 +1859,13 @@ LIB3270_CURSOR_ACTION( newline ) @@ -1862,12 +1859,13 @@ LIB3270_CURSOR_ACTION( newline )
1862 return 0; 1859 return 0;
1863 } 1860 }
1864 1861
1865 -  
1866 -/*  
1867 - * DUP key 1862 +/**
  1863 + * @brief DUP key
1868 */ 1864 */
1869 -LIB3270_ACTION( dup ) 1865 +LIB3270_EXPORT int lib3270_dup(H3270 *hSession)
1870 { 1866 {
  1867 + FAIL_IF_NOT_ONLINE(hSession);
  1868 +
1871 if (hSession->kybdlock) 1869 if (hSession->kybdlock)
1872 { 1870 {
1873 ENQUEUE_ACTION(lib3270_dup); 1871 ENQUEUE_ACTION(lib3270_dup);
@@ -1886,11 +1884,13 @@ LIB3270_ACTION( dup ) @@ -1886,11 +1884,13 @@ LIB3270_ACTION( dup )
1886 return 0; 1884 return 0;
1887 } 1885 }
1888 1886
1889 -/*  
1890 - * FM key 1887 +/**
  1888 + * @brief FM key
1891 */ 1889 */
1892 -LIB3270_ACTION( fieldmark ) 1890 +LIB3270_EXPORT int lib3270_fieldmark(H3270 *hSession)
1893 { 1891 {
  1892 + FAIL_IF_NOT_ONLINE(hSession);
  1893 +
1894 if (hSession->kybdlock) 1894 if (hSession->kybdlock)
1895 { 1895 {
1896 ENQUEUE_ACTION(lib3270_fieldmark); 1896 ENQUEUE_ACTION(lib3270_fieldmark);
@@ -1906,36 +1906,50 @@ LIB3270_ACTION( fieldmark ) @@ -1906,36 +1906,50 @@ LIB3270_ACTION( fieldmark )
1906 } 1906 }
1907 1907
1908 /** 1908 /**
1909 - * Send an "Enter" action. 1909 + * @brief Send an "Enter" action.
1910 * 1910 *
1911 * Called when the user press the key enter. 1911 * Called when the user press the key enter.
1912 * 1912 *
1913 - * @return 0 if ok, -1 if the action can't be performed.  
1914 - *  
1915 */ 1913 */
1916 -LIB3270_KEY_ACTION( enter ) 1914 +LIB3270_EXPORT int lib3270_enter(H3270 *hSession)
1917 { 1915 {
  1916 + FAIL_IF_NOT_ONLINE(hSession);
  1917 +
1918 trace("%s (kybdlock & KL_OIA_MINUS): %d kybdlock: %d",__FUNCTION__,(hSession->kybdlock & KL_OIA_MINUS),hSession->kybdlock); 1918 trace("%s (kybdlock & KL_OIA_MINUS): %d kybdlock: %d",__FUNCTION__,(hSession->kybdlock & KL_OIA_MINUS),hSession->kybdlock);
1919 1919
1920 if (hSession->kybdlock & KL_OIA_MINUS) 1920 if (hSession->kybdlock & KL_OIA_MINUS)
  1921 + {
  1922 + errno = EPERM;
1921 return -1; 1923 return -1;
  1924 + }
1922 else if (hSession->kybdlock) 1925 else if (hSession->kybdlock)
  1926 + {
1923 ENQUEUE_ACTION(lib3270_enter); 1927 ENQUEUE_ACTION(lib3270_enter);
  1928 + }
1924 else 1929 else
  1930 + {
1925 key_AID(hSession,AID_ENTER); 1931 key_AID(hSession,AID_ENTER);
  1932 + }
1926 1933
1927 return 0; 1934 return 0;
1928 } 1935 }
1929 1936
1930 -LIB3270_ACTION( sysreq ) 1937 +LIB3270_EXPORT int lib3270_sysreq(H3270 *hSession)
1931 { 1938 {
1932 -// reset_idle_timer(); 1939 + FAIL_IF_NOT_ONLINE(hSession);
  1940 +
1933 if (IN_ANSI) 1941 if (IN_ANSI)
  1942 + {
  1943 + errno = ENOTCONN;
1934 return 0; 1944 return 0;
  1945 + }
  1946 +
1935 #if defined(X3270_TN3270E) /*[*/ 1947 #if defined(X3270_TN3270E) /*[*/
1936 - if (IN_E) { 1948 + if (IN_E)
  1949 + {
1937 net_abort(hSession); 1950 net_abort(hSession);
1938 - } else 1951 + }
  1952 + else
1939 #endif /*]*/ 1953 #endif /*]*/
1940 { 1954 {
1941 if (hSession->kybdlock & KL_OIA_MINUS) 1955 if (hSession->kybdlock & KL_OIA_MINUS)
@@ -1945,14 +1959,14 @@ LIB3270_ACTION( sysreq ) @@ -1945,14 +1959,14 @@ LIB3270_ACTION( sysreq )
1945 else 1959 else
1946 key_AID(hSession,AID_SYSREQ); 1960 key_AID(hSession,AID_SYSREQ);
1947 } 1961 }
  1962 +
1948 return 0; 1963 return 0;
1949 } 1964 }
1950 1965
1951 -  
1952 -/*  
1953 - * Clear AID key 1966 +/**
  1967 + * @brief Clear AID key
1954 */ 1968 */
1955 -LIB3270_ACTION( clear ) 1969 +LIB3270_EXPORT int lib3270_clear(H3270 *hSession)
1956 { 1970 {
1957 // reset_idle_timer(); 1971 // reset_idle_timer();
1958 if (hSession->kybdlock & KL_OIA_MINUS) 1972 if (hSession->kybdlock & KL_OIA_MINUS)
@@ -1976,10 +1990,10 @@ LIB3270_ACTION( clear ) @@ -1976,10 +1990,10 @@ LIB3270_ACTION( clear )
1976 } 1990 }
1977 1991
1978 /** 1992 /**
1979 - * Erase End Of Line Key. 1993 + * @brief Erase End Of Line Key.
1980 * 1994 *
1981 */ 1995 */
1982 -LIB3270_ACTION( eraseeol ) 1996 +LIB3270_EXPORT int lib3270_eraseeol(H3270 *hSession)
1983 { 1997 {
1984 register int baddr; 1998 register int baddr;
1985 register unsigned char fa; 1999 register unsigned char fa;
@@ -2044,10 +2058,10 @@ LIB3270_ACTION( eraseeol ) @@ -2044,10 +2058,10 @@ LIB3270_ACTION( eraseeol )
2044 } 2058 }
2045 2059
2046 /** 2060 /**
2047 - * Erase End Of Field Key. 2061 + * @brief Erase End Of Field Key.
2048 * 2062 *
2049 */ 2063 */
2050 -LIB3270_ACTION( eraseeof ) 2064 +LIB3270_EXPORT int lib3270_eraseeof(H3270 *hSession)
2051 { 2065 {
2052 register int baddr; 2066 register int baddr;
2053 register unsigned char fa; 2067 register unsigned char fa;
@@ -2100,7 +2114,7 @@ LIB3270_ACTION( eraseeof ) @@ -2100,7 +2114,7 @@ LIB3270_ACTION( eraseeof )
2100 return 0; 2114 return 0;
2101 } 2115 }
2102 2116
2103 -LIB3270_ACTION( eraseinput ) 2117 +LIB3270_EXPORT int lib3270_eraseinput(H3270 *hSession)
2104 { 2118 {
2105 register int baddr, sbaddr; 2119 register int baddr, sbaddr;
2106 unsigned char fa; 2120 unsigned char fa;
@@ -2157,15 +2171,16 @@ LIB3270_ACTION( eraseinput ) @@ -2157,15 +2171,16 @@ LIB3270_ACTION( eraseinput )
2157 } 2171 }
2158 2172
2159 2173
2160 -  
2161 -/*  
2162 - * Delete word key. Backspaces the cursor until it hits the front of a word, 2174 +/**
  2175 + * @brief Delete word key.
  2176 +
  2177 + * Backspaces the cursor until it hits the front of a word,
2163 * deletes characters until it hits a blank or null, and deletes all of these 2178 * deletes characters until it hits a blank or null, and deletes all of these
2164 * but the last. 2179 * but the last.
2165 * 2180 *
2166 * Which is to say, does a ^W. 2181 * Which is to say, does a ^W.
2167 */ 2182 */
2168 -LIB3270_ACTION( deleteword ) 2183 +LIB3270_EXPORT int lib3270_deleteword(H3270 *hSession)
2169 { 2184 {
2170 register int baddr; 2185 register int baddr;
2171 register unsigned char fa; 2186 register unsigned char fa;
@@ -2225,14 +2240,16 @@ LIB3270_ACTION( deleteword ) @@ -2225,14 +2240,16 @@ LIB3270_ACTION( deleteword )
2225 return 0; 2240 return 0;
2226 } 2241 }
2227 2242
2228 -/*  
2229 - * Delete field key. Similar to EraseEOF, but it wipes out the entire field 2243 +/**
  2244 + * @brief Delete field key.
  2245 +
  2246 + * Similar to EraseEOF, but it wipes out the entire field
2230 * rather than just to the right of the cursor, and it leaves the cursor at 2247 * rather than just to the right of the cursor, and it leaves the cursor at
2231 * the front of the field. 2248 * the front of the field.
2232 * 2249 *
2233 * Which is to say, does a ^U. 2250 * Which is to say, does a ^U.
2234 */ 2251 */
2235 -LIB3270_ACTION( deletefield ) 2252 +LIB3270_EXPORT int lib3270_deletefield(H3270 *hSession)
2236 { 2253 {
2237 register int baddr; 2254 register int baddr;
2238 register unsigned char fa; 2255 register unsigned char fa;
@@ -2272,72 +2289,14 @@ LIB3270_ACTION( deletefield ) @@ -2272,72 +2289,14 @@ LIB3270_ACTION( deletefield )
2272 } 2289 }
2273 2290
2274 2291
2275 -  
2276 -/*  
2277 - * Set insert mode key.  
2278 - */ /*  
2279 -void  
2280 -Insert_action(Widget w unused, XEvent *event, String *params, Cardinal *num_params)  
2281 -{  
2282 -// reset_idle_timer();  
2283 - if (kybdlock) {  
2284 - enq_ta(Insert_action, CN, CN);  
2285 - return;  
2286 - }  
2287 -#if defined(X3270_ANSI)  
2288 - if (IN_ANSI)  
2289 - return;  
2290 -#endif  
2291 - set_toggle(INSERT,True);  
2292 -}  
2293 -*/  
2294 -  
2295 -  
2296 -/*  
2297 - * Toggle insert mode key.  
2298 - */ /*  
2299 -void  
2300 -ToggleInsert_action(Widget w unused, XEvent *event, String *params, Cardinal *num_params)  
2301 -{  
2302 -// reset_idle_timer();  
2303 - if (kybdlock) {  
2304 - enq_ta(ToggleInsert_action, CN, CN);  
2305 - return;  
2306 - }  
2307 -#if defined(X3270_ANSI)  
2308 - if (IN_ANSI)  
2309 - return;  
2310 -#endif  
2311 -  
2312 - do_toggle(INSERT);  
2313 -}  
2314 -*/  
2315 -  
2316 -  
2317 -/*  
2318 - * Toggle reverse mode key.  
2319 - */ /*  
2320 -void  
2321 -ToggleReverse_action(Widget w unused, XEvent *event, String *params, Cardinal *num_params)  
2322 -{  
2323 -// reset_idle_timer();  
2324 - if (kybdlock) {  
2325 - enq_ta(ToggleReverse_action, CN, CN);  
2326 - return;  
2327 - }  
2328 -#if defined(X3270_ANSI)  
2329 - if (IN_ANSI)  
2330 - return;  
2331 -#endif  
2332 - reverse_mode(!reverse);  
2333 -} */  
2334 -  
2335 -  
2336 -/* 2292 +/**
  2293 + * @brief Move the cursor to the first blank after the last nonblank in the field.
  2294 + *
2337 * Move the cursor to the first blank after the last nonblank in the 2295 * Move the cursor to the first blank after the last nonblank in the
2338 * field, or if the field is full, to the last character in the field. 2296 * field, or if the field is full, to the last character in the field.
  2297 + *
2339 */ 2298 */
2340 -LIB3270_ACTION( fieldend ) 2299 +LIB3270_EXPORT int lib3270_fieldend(H3270 *hSession)
2341 { 2300 {
2342 int baddr; 2301 int baddr;
2343 2302
@@ -2400,7 +2359,7 @@ int lib3270_get_field_end(H3270 *hSession, int baddr) @@ -2400,7 +2359,7 @@ int lib3270_get_field_end(H3270 *hSession, int baddr)
2400 } 2359 }
2401 2360
2402 /** 2361 /**
2403 - * PA key action for String actions 2362 + * @brief PA key action for String actions.
2404 */ 2363 */
2405 static void do_pa(H3270 *hSession, unsigned n) 2364 static void do_pa(H3270 *hSession, unsigned n)
2406 { 2365 {
@@ -2415,7 +2374,7 @@ static void do_pa(H3270 *hSession, unsigned n) @@ -2415,7 +2374,7 @@ static void do_pa(H3270 *hSession, unsigned n)
2415 } 2374 }
2416 2375
2417 /** 2376 /**
2418 - * PF key action for String actions 2377 + * @brief PF key action for String actions.
2419 */ 2378 */
2420 static void do_pf(H3270 *hSession, unsigned n) 2379 static void do_pf(H3270 *hSession, unsigned n)
2421 { 2380 {
@@ -2429,20 +2388,6 @@ static void do_pf(H3270 *hSession, unsigned n) @@ -2429,20 +2388,6 @@ static void do_pf(H3270 *hSession, unsigned n)
2429 } 2388 }
2430 2389
2431 /* 2390 /*
2432 - * Set or clear the keyboard scroll lock.  
2433 - */ /*  
2434 -void  
2435 -kybd_scroll_lock(Boolean lock)  
2436 -{  
2437 - if (!IN_3270)  
2438 - return;  
2439 - if (lock)  
2440 - kybdlock_set(KL_SCROLLED, "kybd_scroll_lock");  
2441 - else  
2442 - kybdlock_clr(hSession, KL_SCROLLED, "kybd_scroll_lock");  
2443 -} */  
2444 -  
2445 -/*  
2446 * Move the cursor back within the legal paste area. 2391 * Move the cursor back within the legal paste area.
2447 * Returns a Boolean indicating success. 2392 * Returns a Boolean indicating success.
2448 */ 2393 */
src/lib3270/macros.c
@@ -356,10 +356,10 @@ @@ -356,10 +356,10 @@
356 } 356 }
357 action[] = 357 action[] =
358 { 358 {
359 - #define DECLARE_LIB3270_ACTION( name ) { #name, lib3270_ ## name },  
360 - #define DECLARE_LIB3270_KEY_ACTION( name ) { #name, lib3270_ ## name },  
361 - #define DECLARE_LIB3270_CURSOR_ACTION( name ) { #name, lib3270_cursor_ ## name },  
362 - #define DECLARE_LIB3270_FKEY_ACTION( name ) /* */ 359 + #define DECLARE_LIB3270_ACTION( name, description ) { #name, lib3270_ ## name },
  360 + #define DECLARE_LIB3270_KEY_ACTION( name, description ) { #name, lib3270_ ## name },
  361 + #define DECLARE_LIB3270_CURSOR_ACTION( name, description ) { #name, lib3270_cursor_ ## name },
  362 + #define DECLARE_LIB3270_FKEY_ACTION( name, description ) /* */
363 363
364 #include <lib3270/action_table.h> 364 #include <lib3270/action_table.h>
365 365
src/lib3270/mkactions/mkactions.c 0 → 100644
@@ -0,0 +1,189 @@ @@ -0,0 +1,189 @@
  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. 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 mkfb.c 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 + *
  28 + */
  29 +
  30 +/**
  31 + * @brief Utility to create the actions definition files.
  32 + *
  33 + */
  34 +
  35 +#include <getopt.h>
  36 +#include <stdio.h>
  37 +
  38 +#define DECLARE_LIB3270_ACTION( name, description ) \
  39 + { \
  40 + description, \
  41 + NULL, \
  42 + "LIB3270_EXPORT int lib3270_" # name "(H3270 *hSession);" \
  43 + },
  44 +
  45 +#define DECLARE_LIB3270_CLEAR_SELECTION_ACTION( name, description ) \
  46 + { \
  47 + description, \
  48 + NULL, \
  49 + "LIB3270_EXPORT int lib3270_" # name "(H3270 *hSession);" \
  50 + },
  51 +
  52 +#define DECLARE_LIB3270_KEY_ACTION( name, description ) \
  53 + { \
  54 + description, \
  55 + NULL, \
  56 + "LIB3270_EXPORT int lib3270_" # name "(H3270 *hSession);" \
  57 + },
  58 +
  59 +#define DECLARE_LIB3270_CURSOR_ACTION( name, description ) \
  60 + { \
  61 + description, \
  62 + NULL, \
  63 + "LIB3270_EXPORT int lib3270_cursor_" # name "(H3270 *hSession);" \
  64 + },
  65 +
  66 +#define DECLARE_LIB3270_FKEY_ACTION( name, description ) \
  67 + { \
  68 + description, \
  69 + "keycode\tNumber of the " #name " to activate.", \
  70 + "LIB3270_EXPORT int lib3270_" # name "(H3270 *hSession, int keycode);" \
  71 + },
  72 +
  73 +
  74 +static struct {
  75 + const char *description;
  76 + const char *args;
  77 + const char *prototype;
  78 +} actions[] = {
  79 + #include <lib3270/action_table.h>
  80 +};
  81 +
  82 +
  83 +int main(int argc, char *argv[]) {
  84 +
  85 + enum _format {
  86 + FORMAT_HEADER
  87 + } format = FORMAT_HEADER;
  88 +
  89 + size_t ix;
  90 +
  91 + char * outfile = "actions.h";
  92 +
  93 + //#pragma GCC diagnostic push
  94 + //#pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant"
  95 + static struct option options[] = {
  96 + { "outfile", required_argument, 0, 'o' },
  97 + { 0, 0, 0, 0}
  98 +
  99 + };
  100 + //#pragma GCC diagnostic pop
  101 +
  102 + int long_index =0;
  103 + int opt;
  104 + while((opt = getopt_long(argc, argv, "o:", options, &long_index )) != -1) {
  105 +
  106 + switch(opt) {
  107 + case 'o': // Pidfile
  108 + outfile = optarg;
  109 + break;
  110 + }
  111 +
  112 + }
  113 +
  114 + FILE *out = fopen(outfile,"w");
  115 +
  116 + fprintf(out,"%s\n",
  117 + "/*\n"
  118 + " * Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270\n"
  119 + " * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a\n"
  120 + " * aplicativos mainframe. Registro no INPI sob o nome G3270. Registro no INPI sob o nome G3270.\n"
  121 + " *\n"
  122 + " * Copyright (C) <2008> <Banco do Brasil S.A.>\n"
  123 + " *\n"
  124 + " * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob\n"
  125 + " * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela\n"
  126 + " * Free Software Foundation.\n"
  127 + " *\n"
  128 + " * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER\n"
  129 + " * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO\n"
  130 + " * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para\n"
  131 + " * obter mais detalhes.\n"
  132 + " *\n"
  133 + " * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este\n"
  134 + " * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin\n"
  135 + " * St, Fifth Floor, Boston, MA 02110-1301 USA\n"
  136 + " *\n"
  137 + " * Contatos:\n"
  138 + " *\n"
  139 + " * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)\n"
  140 + " * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)\n"
  141 + " *\n"
  142 + " */\n\n"
  143 + );
  144 +
  145 + if(format == FORMAT_HEADER)
  146 + {
  147 +
  148 + for(ix = 0; ix < (sizeof(actions)/sizeof(actions[0])); ix++)
  149 + {
  150 + fprintf(out,
  151 + "/**\n"
  152 + " *\n"
  153 + " * @brief %s\n"
  154 + " *\n"
  155 + " * @param hSession\tTN3270 Session handle.\n",
  156 + actions[ix].description
  157 + );
  158 +
  159 + if(actions[ix].args) {
  160 + fprintf(out," * @param %s\n", actions[ix].args);
  161 + }
  162 +
  163 + fprintf(out,
  164 + " *\n"
  165 + " * @return 0 if Ok, non zero if not (sets errno)\n"
  166 + );
  167 +
  168 + fprintf(out," *\n */\n %s\n\n",actions[ix].prototype);
  169 + }
  170 +
  171 + fprintf(out,
  172 + "/**\n"
  173 + " *\n"
  174 + " * @brief Call lib3270 action by name.\n"
  175 + " *\n"
  176 + " * @param hSession\tTN3270 Session handle.\n"
  177 + " * @param name\tName of the action to call.\n"
  178 + " *\n"
  179 + " */\n"
  180 + " LIB3270_EXPORT int lib3270_action(H3270 *hSession, const char *name);\n"
  181 + );
  182 + }
  183 +
  184 + fclose(out);
  185 +
  186 + return 0;
  187 +}
  188 +
  189 +
src/lib3270/mkactions/mkactions.cbp 0 → 100644
@@ -0,0 +1,45 @@ @@ -0,0 +1,45 @@
  1 +<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
  2 +<CodeBlocks_project_file>
  3 + <FileVersion major="1" minor="6" />
  4 + <Project>
  5 + <Option title="LIB3270 Action Table Generator" />
  6 + <Option pch_mode="2" />
  7 + <Option compiler="gcc" />
  8 + <Build>
  9 + <Target title="Debug">
  10 + <Option output=".bin/Debug/mkactions" prefix_auto="1" extension_auto="1" />
  11 + <Option object_output=".obj/Debug/" />
  12 + <Option type="1" />
  13 + <Option compiler="gcc" />
  14 + <Compiler>
  15 + <Add option="-g" />
  16 + </Compiler>
  17 + </Target>
  18 + <Target title="Release">
  19 + <Option output=".bin/Release/mkactions" prefix_auto="1" extension_auto="1" />
  20 + <Option object_output=".obj/Release/" />
  21 + <Option type="1" />
  22 + <Option compiler="gcc" />
  23 + <Compiler>
  24 + <Add option="-O2" />
  25 + </Compiler>
  26 + <Linker>
  27 + <Add option="-s" />
  28 + </Linker>
  29 + </Target>
  30 + </Build>
  31 + <Compiler>
  32 + <Add option="-Wall" />
  33 + <Add directory="../../include" />
  34 + </Compiler>
  35 + <Unit filename="mkactions.c">
  36 + <Option compilerVar="CC" />
  37 + </Unit>
  38 + <Extensions>
  39 + <code_completion />
  40 + <envvars />
  41 + <debugger />
  42 + <lib_finder disable_auto="1" />
  43 + </Extensions>
  44 + </Project>
  45 +</CodeBlocks_project_file>
src/lib3270/paste.c
@@ -329,12 +329,12 @@ LIB3270_EXPORT int lib3270_paste(H3270 *h, const unsigned char *str) @@ -329,12 +329,12 @@ LIB3270_EXPORT int lib3270_paste(H3270 *h, const unsigned char *str)
329 return 0; 329 return 0;
330 } 330 }
331 331
332 -LIB3270_ACTION(pastenext) 332 +LIB3270_EXPORT int lib3270_pastenext(H3270 *hSession)
333 { 333 {
334 char * ptr; 334 char * ptr;
335 int rc; 335 int rc;
336 336
337 - CHECK_SESSION_HANDLE(hSession); 337 + FAIL_IF_NOT_ONLINE(hSession);
338 338
339 if(!(lib3270_connected(hSession) && hSession->paste_buffer)) 339 if(!(lib3270_connected(hSession) && hSession->paste_buffer))
340 { 340 {
src/lib3270/screen.c
@@ -27,28 +27,23 @@ @@ -27,28 +27,23 @@
27 * 27 *
28 */ 28 */
29 29
30 -/*  
31 - * screen.c  
32 - * A callback based 3270 Terminal Emulator  
33 - * Screen drawing 30 +/**
  31 + * @file screen.c
  32 + *
  33 + * @brief A callback based 3270 Terminal Emulator Screen drawing
  34 + *
34 */ 35 */
35 36
36 #include "private.h" 37 #include "private.h"
37 #include <signal.h> 38 #include <signal.h>
38 -//#include "appres.h"  
39 #include "3270ds.h" 39 #include "3270ds.h"
40 #include "resources.h" 40 #include "resources.h"
41 -// #include "ctlr.h"  
42 -  
43 -//#include "actionsc.h"  
44 #include "ctlrc.h" 41 #include "ctlrc.h"
45 #include "hostc.h" 42 #include "hostc.h"
46 #include "kybdc.h" 43 #include "kybdc.h"
47 #include "screenc.h" 44 #include "screenc.h"
48 -// #include "tablesc.h"  
49 #include "trace_dsc.h" 45 #include "trace_dsc.h"
50 #include "utilc.h" 46 #include "utilc.h"
51 -// #include "w3miscc.h"  
52 #include "widec.h" 47 #include "widec.h"
53 #include "xioc.h" 48 #include "xioc.h"
54 #include "screen.h" 49 #include "screen.h"
@@ -56,7 +51,7 @@ @@ -56,7 +51,7 @@
56 #include "statusc.h" 51 #include "statusc.h"
57 #include "togglesc.h" 52 #include "togglesc.h"
58 #include "api.h" 53 #include "api.h"
59 -// #include "charsetc.h" 54 +#include <lib3270/actions.h>
60 55
61 #if defined(_WIN32) 56 #if defined(_WIN32)
62 #include <windows.h> 57 #include <windows.h>
@@ -825,7 +820,7 @@ void mcursor_set(H3270 *session,LIB3270_POINTER m) @@ -825,7 +820,7 @@ void mcursor_set(H3270 *session,LIB3270_POINTER m)
825 } 820 }
826 } 821 }
827 822
828 -LIB3270_ACTION( testpattern ) 823 +LIB3270_EXPORT int lib3270_testpattern(H3270 *hSession)
829 { 824 {
830 static const unsigned char text_pat[] = 825 static const unsigned char text_pat[] =
831 { 826 {
@@ -887,7 +882,7 @@ LIB3270_ACTION( testpattern ) @@ -887,7 +882,7 @@ LIB3270_ACTION( testpattern )
887 int f; 882 int f;
888 int fg = COLOR_BLUE; 883 int fg = COLOR_BLUE;
889 884
890 - CHECK_SESSION_HANDLE(hSession); 885 + FAIL_IF_NOT_ONLINE(hSession);
891 886
892 max = (hSession->maxROWS * hSession->maxCOLS); 887 max = (hSession->maxROWS * hSession->maxCOLS);
893 for(f=0;f<max;f++) 888 for(f=0;f<max;f++)
src/lib3270/selection.c
@@ -28,8 +28,8 @@ @@ -28,8 +28,8 @@
28 */ 28 */
29 29
30 #include "private.h" 30 #include "private.h"
31 -// #include "appres.h"  
32 #include <lib3270.h> 31 #include <lib3270.h>
  32 + #include <lib3270/actions.h>
33 #include <lib3270/session.h> 33 #include <lib3270/session.h>
34 #include <lib3270/selection.h> 34 #include <lib3270/selection.h>
35 #include "3270ds.h" 35 #include "3270ds.h"
@@ -353,20 +353,18 @@ LIB3270_EXPORT int lib3270_select_field(H3270 *hSession) @@ -353,20 +353,18 @@ LIB3270_EXPORT int lib3270_select_field(H3270 *hSession)
353 353
354 LIB3270_EXPORT int lib3270_select_all(H3270 * hSession) 354 LIB3270_EXPORT int lib3270_select_all(H3270 * hSession)
355 { 355 {
356 - CHECK_SESSION_HANDLE(hSession); 356 + FAIL_IF_NOT_ONLINE(hSession);
357 357
358 do_select(hSession,0,(hSession->rows*hSession->cols)-1,0); 358 do_select(hSession,0,(hSession->rows*hSession->cols)-1,0);
359 359
360 return 0; 360 return 0;
361 } 361 }
362 362
363 -LIB3270_ACTION( reselect ) 363 +LIB3270_EXPORT int lib3270_reselect(H3270 *hSession)
364 { 364 {
365 -// int start, end;  
366 -  
367 - CHECK_SESSION_HANDLE(hSession); 365 + FAIL_IF_NOT_ONLINE(hSession);
368 366
369 - if(!lib3270_connected(hSession) || hSession->select.start == hSession->select.end || hSession->selected) 367 + if(hSession->select.start == hSession->select.end || hSession->selected)
370 return 0; 368 return 0;
371 369
372 do_select(hSession, hSession->select.start,hSession->select.end,lib3270_get_toggle(hSession,LIB3270_TOGGLE_RECTANGLE_SELECT)); 370 do_select(hSession, hSession->select.start,hSession->select.end,lib3270_get_toggle(hSession,LIB3270_TOGGLE_RECTANGLE_SELECT));