Commit 5a66c3882044ef002d241b0bdc6084e07128056e

Authored by Perry Werneck
1 parent 2705a1d4

Isolando estrutura de sessão para evitar que alterações na biblioteca causem que…

…bra de compatibilidade binária com o aplicativo principal ou plugins.
src/include/lib3270.h
@@ -745,12 +745,10 @@ @@ -745,12 +745,10 @@
745 */ 745 */
746 LIB3270_EXPORT const char * lib3270_get_luname(H3270 *h); 746 LIB3270_EXPORT const char * lib3270_get_luname(H3270 *h);
747 747
748 -// #define lib3270_has_printer_session(h) (h->oia_flag[LIB3270_FLAG_PRINTER] != 0)  
749 - #define lib3270_has_active_script(h) (h->oia_flag[LIB3270_FLAG_SCRIPT] != 0)  
750 - #define lib3270_get_typeahead(h) (h->oia_flag[LIB3270_FLAG_TYPEAHEAD] != 0)  
751 - #define lib3270_get_undera(h) (h->oia_flag[LIB3270_FLAG_UNDERA] != 0)  
752 - #define lib3270_get_oia_box_solid(h) (h->oia_flag[LIB3270_FLAG_BOXSOLID] != 0)  
753 - 748 + LIB3270_EXPORT int lib3270_has_active_script(H3270 *h);
  749 + LIB3270_EXPORT int lib3270_get_typeahead(H3270 *h);
  750 + LIB3270_EXPORT int lib3270_get_undera(H3270 *h);
  751 + LIB3270_EXPORT int lib3270_get_oia_box_solid(H3270 *h);
754 LIB3270_EXPORT int lib3270_pconnected(H3270 *h); 752 LIB3270_EXPORT int lib3270_pconnected(H3270 *h);
755 LIB3270_EXPORT int lib3270_half_connected(H3270 *h); 753 LIB3270_EXPORT int lib3270_half_connected(H3270 *h);
756 LIB3270_EXPORT int lib3270_connected(H3270 *h); 754 LIB3270_EXPORT int lib3270_connected(H3270 *h);
src/include/lib3270/session.h
@@ -24,62 +24,16 @@ @@ -24,62 +24,16 @@
24 * 24 *
25 * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) 25 * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
26 * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) 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 * 27 *
30 */ 28 */
31 29
32 #ifndef LIB3270_SESSION_H_INCLUDED 30 #ifndef LIB3270_SESSION_H_INCLUDED
33 31
34 #define LIB3270_SESSION_H_INCLUDED 1 32 #define LIB3270_SESSION_H_INCLUDED 1
35 - #include <sys/time.h>  
36 33
  34 +// #include <sys/time.h>
37 #include <lib3270/popup.h> 35 #include <lib3270/popup.h>
38 - #include <lib3270/charset.h>  
39 -  
40 - #define LIB3270_LUNAME_LENGTH 16  
41 - #define LIB3270_FULL_MODEL_NAME_LENGTH 13  
42 - #define LIB3270_LU_MAX 32  
43 -  
44 - #define LIB3270_TELNET_N_OPTS 256  
45 -  
46 - /** extended attributes */  
47 - struct lib3270_ea;  
48 - struct lib3270_text;  
49 -  
50 - /*  
51 - struct lib3270_ea  
52 - {  
53 - unsigned char cc; ///< @brief EBCDIC or ASCII character code  
54 - unsigned char fa; ///< @brief field attribute, it nonzero  
55 - unsigned char fg; ///< @brief foreground color (0x00 or 0xf<n>)  
56 - unsigned char bg; ///< @brief background color (0x00 or 0xf<n>)  
57 - unsigned char gr; ///< @brief ANSI graphics rendition bits  
58 - unsigned char cs; ///< @brief character set (GE flag, or 0..2)  
59 - unsigned char ic; ///< @brief input control (DBCS)  
60 - unsigned char db; ///< @brief DBCS state  
61 - };  
62 - */  
63 -  
64 - /*  
65 - struct lib3270_text  
66 - {  
67 - unsigned char chr; ///< ASCII character code  
68 - unsigned short attr; ///< Converted character attribute (color & etc)  
69 - };  
70 - */  
71 -  
72 - #ifndef HEADER_SSL_H  
73 - #define SSL void  
74 - #endif // !HEADER_SSL_H  
75 -  
76 - #ifndef LIB3270_TA  
77 - #define LIB3270_TA void  
78 - #endif // !LIB3270_TA  
79 -  
80 - #define LIB3270_MB_MAX 16  
81 - #define LIB3270_DEFAULT_CGEN 0x02b90000  
82 - #define LIB3270_DEFAULT_CSET 0x00000025 36 +// #include <lib3270/charset.h>
83 37
84 struct lib3270_session_callbacks 38 struct lib3270_session_callbacks
85 { 39 {
@@ -116,357 +70,8 @@ @@ -116,357 +70,8 @@
116 70
117 }; 71 };
118 72
119 -  
120 LIB3270_EXPORT struct lib3270_session_callbacks * lib3270_get_session_callbacks(H3270 *session, unsigned short sz); 73 LIB3270_EXPORT struct lib3270_session_callbacks * lib3270_get_session_callbacks(H3270 *session, unsigned short sz);
121 74
122 - struct _h3270  
123 - {  
124 - unsigned short sz; /**< Struct size */  
125 -  
126 - // Connection info  
127 - int sock; /**< Network socket */  
128 - LIB3270_CSTATE cstate; /**< Connection state */  
129 -  
130 - // flags  
131 - LIB3270_OPTION options; /**< Session options */  
132 -  
133 - int bgthread : 1; /**< Running on a background thread ? */  
134 - int selected : 1; /**< Has selected region? */  
135 - int rectsel : 1; /**< Selected region is a rectangle ? */  
136 - int vcontrol : 1; /**< Visible control ? */  
137 - int modified_sel : 1;  
138 - int mono : 1; /**< Forces monochrome display */  
139 - int m3279 : 1;  
140 - int extended : 1;  
141 - int typeahead : 1;  
142 - int numeric_lock : 1;  
143 - int oerr_lock : 1;  
144 - int unlock_delay : 1;  
145 - int auto_reconnect_inprogress : 1;  
146 - unsigned int colors : 5;  
147 - int apl_mode : 1;  
148 - int icrnl : 1;  
149 - int inlcr : 1;  
150 - int onlcr : 1;  
151 - int bsd_tm : 1;  
152 - int syncing : 1;  
153 - int reverse : 1; /**< reverse-input mode */  
154 - int dbcs : 1;  
155 - int linemode : 1;  
156 - int trace_skipping : 1;  
157 - int need_tls_follows : 1;  
158 - int cut_xfer_in_progress : 1;  
159 -// int auto_keymap : 1;  
160 - int formatted : 1; /**< Formatted screen flag */  
161 - int starting : 1; /**< Is starting (no first screen)? */  
162 -  
163 - char * oversize;  
164 -  
165 - LIB3270_SSL_STATE secure;  
166 -  
167 - struct lib3270_toggle  
168 - {  
169 - char value; /**< toggle value */  
170 - void (*upcall)(H3270 *, struct lib3270_toggle *, LIB3270_TOGGLE_TYPE); /**< change value */  
171 - } toggle[LIB3270_TOGGLE_COUNT];  
172 -  
173 - // Network & Termtype  
174 - char * connected_type;  
175 - char * connected_lu;  
176 - char luname[LIB3270_LUNAME_LENGTH+1];  
177 -  
178 - char full_model_name[LIB3270_FULL_MODEL_NAME_LENGTH+1];  
179 - char * model_name;  
180 - int model_num;  
181 - char * termtype;  
182 -  
183 - struct  
184 - {  
185 - char * current; /**< The hostname part, stripped of qualifiers, luname and port number */  
186 - char * full; /**< The entire string, for use in reconnecting */  
187 - char * srvc; /**< The service name */  
188 - char * qualified;  
189 - } host;  
190 -  
191 - char * proxy; /**< Proxy server (type:host[:port]) */  
192 - char * termname;  
193 -  
194 - struct lib3270_charset charset;  
195 -  
196 - LIB3270_MESSAGE oia_status;  
197 -  
198 - unsigned char oia_flag[LIB3270_FLAG_COUNT];  
199 -  
200 - unsigned short current_port;  
201 -  
202 - // Misc  
203 - void * ft; /**< Active file transfer data */  
204 -  
205 - // screen info  
206 - int ov_rows;  
207 - int ov_cols;  
208 - int maxROWS;  
209 - int maxCOLS;  
210 - unsigned short rows;  
211 - unsigned short cols;  
212 - int cursor_addr;  
213 - int buffer_addr;  
214 - char flipped;  
215 - int screen_alt; /**< alternate screen? */  
216 - int is_altbuffer;  
217 -  
218 - // Screen contents  
219 - void * buffer[2]; /**< Internal buffers */  
220 - struct lib3270_ea * ea_buf; /**< 3270 device buffer. ea_buf[-1] is the dummy default field attribute */  
221 - struct lib3270_ea * aea_buf; /**< alternate 3270 extended attribute buffer */  
222 - struct lib3270_text * text; /**< Converted 3270 chars */  
223 -  
224 - // host.c  
225 - char std_ds_host;  
226 - char no_login_host;  
227 - char non_tn3270e_host;  
228 - char passthru_host;  
229 - char ssl_host;  
230 - char ever_3270;  
231 -  
232 - // ctlr.c  
233 - int sscp_start;  
234 - unsigned char default_fg;  
235 - unsigned char default_bg;  
236 - unsigned char default_gr;  
237 - unsigned char default_cs;  
238 - unsigned char default_ic;  
239 - char reply_mode;  
240 - int trace_primed : 1;  
241 - int ticking : 1;  
242 - int mticking : 1;  
243 - int crm_nattr;  
244 - unsigned char crm_attr[16];  
245 - unsigned char * zero_buf; /**< empty buffer, for area clears */  
246 -  
247 - struct timeval t_start;  
248 - void * tick_id;  
249 - struct timeval t_want;  
250 -  
251 - // Telnet.c  
252 - unsigned char * ibuf;  
253 - int ibuf_size; /**< size of ibuf */  
254 - unsigned char * obuf; /**< 3270 output buffer */  
255 - unsigned char * obptr;  
256 - time_t ns_time;  
257 - int ns_brcvd;  
258 - int ns_rrcvd;  
259 - int ns_bsent;  
260 - int ns_rsent;  
261 - struct timeval ds_ts;  
262 - unsigned long e_funcs; /**< negotiated TN3270E functions */  
263 - unsigned short e_xmit_seq; /**< transmit sequence number */  
264 - int response_required;  
265 - int tn3270e_bound;  
266 - int tn3270e_negotiated;  
267 - int ansi_data;  
268 - int lnext;  
269 - int backslashed;  
270 - char plu_name[LIB3270_BIND_PLU_NAME_MAX+1];  
271 - char **lus;  
272 - char **curr_lu;  
273 - char * try_lu;  
274 - int proxy_type;  
275 - char * proxy_host;  
276 - char * proxy_portname;  
277 - unsigned short proxy_port;  
278 - char reported_lu[LIB3270_LU_MAX+1];  
279 - char reported_type[LIB3270_LU_MAX+1];  
280 -  
281 - enum  
282 - {  
283 - E_NONE,  
284 - E_3270,  
285 - E_NVT,  
286 - E_SSCP  
287 - } tn3270e_submode;  
288 -  
289 - unsigned char * lbuf; /**< line-mode input buffer */  
290 - unsigned char * lbptr;  
291 -  
292 -  
293 - // 3270 input buffer  
294 - unsigned char * ibptr;  
295 - unsigned char * obuf_base;  
296 - int obuf_size;  
297 -// unsigned char * netrbuf;  
298 -  
299 - // network input buffer  
300 - unsigned char * sbbuf;  
301 -  
302 - // telnet sub-option buffer  
303 - unsigned char * sbptr;  
304 - unsigned char telnet_state;  
305 -// char ttype_tmpval[13];  
306 -  
307 - unsigned char myopts[LIB3270_TELNET_N_OPTS];  
308 - unsigned char hisopts[LIB3270_TELNET_N_OPTS];  
309 -  
310 - // kybd.c  
311 - unsigned int kybdlock; ///< @brief keyboard lock state  
312 - unsigned char aid; ///< @brief current attention ID  
313 - void * unlock_id;  
314 - time_t unlock_delay_time;  
315 - unsigned long unlock_delay_ms; ///< @brief Delay before actually unlocking the keyboard after the host permits it.  
316 - LIB3270_TA * ta_head;  
317 - LIB3270_TA * ta_tail;  
318 -  
319 - // ft_dft.c  
320 - int dft_buffersize; ///< @brief Buffer size (LIMIN, LIMOUT)  
321 -  
322 - // rpq.c  
323 - int rpq_complained : 1;  
324 -#if !defined(_WIN32)  
325 - int omit_due_space_limit : 1;  
326 -#endif  
327 -  
328 - char * rpq_warnbuf;  
329 - int rpq_wbcnt;  
330 -  
331 - // User data (Usually points to session's widget)  
332 - void * user_data;  
333 -  
334 - // selection  
335 - char * paste_buffer;  
336 - struct  
337 - {  
338 - int start;  
339 - int end;  
340 - } select;  
341 -  
342 - // ansi.c  
343 - int scroll_top;  
344 - int scroll_bottom;  
345 - int once_cset;  
346 - int saved_cursor;  
347 -  
348 - int held_wrap : 1;  
349 -  
350 - int insert_mode : 1;  
351 - int auto_newline_mode : 1;  
352 -  
353 - int appl_cursor : 1;  
354 - int saved_appl_cursor : 1;  
355 -  
356 - int wraparound_mode : 1;  
357 - int saved_wraparound_mode : 1;  
358 -  
359 - int rev_wraparound_mode : 1;  
360 - int saved_rev_wraparound_mode : 1;  
361 -  
362 - int allow_wide_mode : 1;  
363 - int saved_allow_wide_mode : 1;  
364 -  
365 - int wide_mode : 1;  
366 - int saved_wide_mode : 1;  
367 -  
368 - int saved_altbuffer : 1;  
369 - int ansi_reset : 1; /**< Non zero if the ansi_reset() was called in this session */  
370 -  
371 - int ansi_ch;  
372 - int cs_to_change;  
373 -  
374 - /** ANSI Character sets. */  
375 - enum lib3270_ansi_cs  
376 - {  
377 - LIB3270_ANSI_CS_G0 = 0,  
378 - LIB3270_ANSI_CS_G1 = 1,  
379 - LIB3270_ANSI_CS_G2 = 2,  
380 - LIB3270_ANSI_CS_G3 = 3  
381 - } cset;  
382 - enum lib3270_ansi_cs saved_cset;  
383 -  
384 - /** Character set designations. */  
385 - enum lib3270_ansi_csd  
386 - {  
387 - LIB3270_ANSI_CSD_LD = 0,  
388 - LIB3270_ANSI_CSD_UK = 1,  
389 - LIB3270_ANSI_CSD_US = 2  
390 - } csd[4];  
391 - enum lib3270_ansi_csd saved_csd[4];  
392 -  
393 - enum lib3270_ansi_state  
394 - {  
395 - LIB3270_ANSI_STATE_DATA = 0,  
396 - LIB3270_ANSI_STATE_ESC = 1,  
397 - LIB3270_ANSI_STATE_CSDES = 2,  
398 - LIB3270_ANSI_STATE_N1 = 3,  
399 - LIB3270_ANSI_STATE_DECP = 4,  
400 - LIB3270_ANSI_STATE_TEXT = 5,  
401 - LIB3270_ANSI_STATE_TEXT2 = 6,  
402 - LIB3270_ANSI_STATE_MBPEND = 7  
403 - } state;  
404 -  
405 - unsigned char * tabs;  
406 -  
407 - int pmi;  
408 - char pending_mbs[LIB3270_MB_MAX];  
409 -  
410 - unsigned char gr;  
411 - unsigned char saved_gr;  
412 -  
413 - unsigned char fg;  
414 - unsigned char saved_fg;  
415 -  
416 - unsigned char bg;  
417 - unsigned char saved_bg;  
418 -  
419 - // xio  
420 - void * ns_read_id;  
421 - void * ns_write_id;  
422 - void * ns_exception_id;  
423 -  
424 - // SSL Data (Always defined to mantain the same structure size)  
425 - unsigned long ssl_error;  
426 - SSL * ssl_con;  
427 -  
428 - // Callbacks.  
429 - struct lib3270_state_callback * st_callbacks[LIB3270_STATE_USER];  
430 - struct lib3270_state_callback * st_last[LIB3270_STATE_USER];  
431 - struct lib3270_session_callbacks cbk;  
432 -  
433 - // Session based callbacks  
434 - /*  
435 - int (*write)(H3270 *hSession, unsigned const char *buf, int len);  
436 - void (*disconnect)(H3270 *hSession);  
437 -  
438 - void (*configure)(H3270 *session, unsigned short rows, unsigned short cols);  
439 - void (*update)(H3270 *session, int baddr, unsigned char c, unsigned short attr, unsigned char cursor);  
440 - void (*changed)(H3270 *session, int offset, int len);  
441 - void (*display)(H3270 *session);  
442 - void (*set_width)(H3270 *session, int width);  
443 -  
444 - void (*update_cursor)(H3270 *session, unsigned short row, unsigned short col, unsigned char c, unsigned short attr);  
445 - void (*update_oia)(H3270 *session, LIB3270_FLAG id, unsigned char on);  
446 - void (*update_toggle)(H3270 *session, LIB3270_TOGGLE ix, unsigned char value, LIB3270_TOGGLE_TYPE reason, const char *name);  
447 - void (*update_luname)(H3270 *session, const char *name);  
448 - void (*update_status)(H3270 *session, LIB3270_MESSAGE id);  
449 - void (*update_connect)(H3270 *session, unsigned char connected);  
450 - void (*update_model)(H3270 *session, const char *name, int model, int rows, int cols);  
451 - void (*update_selection)(H3270 *session, int start, int end);  
452 - void (*update_ssl)(H3270 *session, LIB3270_SSL_STATE state);  
453 -  
454 - void (*set_timer)(H3270 *session, unsigned char on);  
455 - void (*erase)(H3270 *session);  
456 - void (*suspend)(H3270 *session);  
457 - void (*resume)(H3270 *session);  
458 - void (*cursor)(H3270 *session, LIB3270_CURSOR id);  
459 - void (*set_selection)(H3270 *session, unsigned char on);  
460 - void (*ctlr_done)(H3270 *session);  
461 - void (*autostart)(H3270 *session);  
462 - int (*print)(H3270 *session);  
463 -  
464 - void (*message)(H3270 *session, LIB3270_NOTIFY id , const char *title, const char *message, const char *text);  
465 - */  
466 -  
467 - };  
468 -  
469 -  
470 #endif // LIB3270_SESSION_H_INCLUDED 75 #endif // LIB3270_SESSION_H_INCLUDED
471 76
472 77
src/lib3270/host.c
@@ -375,3 +375,26 @@ LIB3270_EXPORT const char * lib3270_get_luname(H3270 *h) @@ -375,3 +375,26 @@ LIB3270_EXPORT const char * lib3270_get_luname(H3270 *h)
375 return h->connected_lu; 375 return h->connected_lu;
376 } 376 }
377 377
  378 +LIB3270_EXPORT int lib3270_has_active_script(H3270 *h)
  379 +{
  380 + CHECK_SESSION_HANDLE(h);
  381 + return (h->oia_flag[LIB3270_FLAG_SCRIPT] != 0);
  382 +}
  383 +
  384 +LIB3270_EXPORT int lib3270_get_typeahead(H3270 *h)
  385 +{
  386 + CHECK_SESSION_HANDLE(h);
  387 + return (h->oia_flag[LIB3270_FLAG_TYPEAHEAD] != 0);
  388 +}
  389 +
  390 +LIB3270_EXPORT int lib3270_get_undera(H3270 *h)
  391 +{
  392 + CHECK_SESSION_HANDLE(h);
  393 + return (h->oia_flag[LIB3270_FLAG_UNDERA] != 0);
  394 +}
  395 +
  396 +LIB3270_EXPORT int lib3270_get_oia_box_solid(H3270 *h)
  397 +{
  398 + CHECK_SESSION_HANDLE(h);
  399 + return (h->oia_flag[LIB3270_FLAG_BOXSOLID] != 0);
  400 +}
src/lib3270/private.h
@@ -24,15 +24,13 @@ @@ -24,15 +24,13 @@
24 * 24 *
25 * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) 25 * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
26 * erico.mendonca@gmail.com (Erico Mascarenhas de Mendonça) 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 * 27 *
31 */ 28 */
32 29
33 /* Autoconf settings. */ 30 /* Autoconf settings. */
34 #include <lib3270/config.h> /* autoconf settings */ 31 #include <lib3270/config.h> /* autoconf settings */
35 #include <lib3270.h> /* lib3270 API calls and defs */ 32 #include <lib3270.h> /* lib3270 API calls and defs */
  33 +#include <lib3270/charset.h>
36 #include "api.h" 34 #include "api.h"
37 35
38 #if defined(X3270_TN3270E) && !defined(X3270_ANSI) /*[*/ 36 #if defined(X3270_TN3270E) && !defined(X3270_ANSI) /*[*/
@@ -148,20 +146,19 @@ struct toggle_name { @@ -148,20 +146,19 @@ struct toggle_name {
148 /* Naming convention for private actions. */ 146 /* Naming convention for private actions. */
149 #define PA_PFX "PA-" 147 #define PA_PFX "PA-"
150 148
151 -/* Shorthand macros */  
152 - 149 +/// @brief Shorthand macros
153 #define CN ((char *) NULL) 150 #define CN ((char *) NULL)
154 #define PN ((XtPointer) NULL) 151 #define PN ((XtPointer) NULL)
155 #define Replace(var, value) { lib3270_free(var); var = (value); }; 152 #define Replace(var, value) { lib3270_free(var); var = (value); };
156 153
157 -/* Configuration change masks. */  
158 -#define NO_CHANGE 0x0000 /* no change */  
159 -#define MODEL_CHANGE 0x0001 /* screen dimensions changed */  
160 -#define FONT_CHANGE 0x0002 /* emulator font changed */  
161 -#define COLOR_CHANGE 0x0004 /* color scheme or 3278/9 mode changed */  
162 -#define SCROLL_CHANGE 0x0008 /* scrollbar snapped on or off */  
163 -#define CHARSET_CHANGE 0x0010 /* character set changed */  
164 -#define ALL_CHANGE 0xffff /* everything changed */ 154 +/// @brief Configuration change masks.
  155 +#define NO_CHANGE 0x0000 /// @brief no change
  156 +#define MODEL_CHANGE 0x0001 /// @brief screen dimensions changed
  157 +#define FONT_CHANGE 0x0002 /// @brief emulator font changed
  158 +#define COLOR_CHANGE 0x0004 /// @brief color scheme or 3278/9 mode changed
  159 +#define SCROLL_CHANGE 0x0008 /// @brief scrollbar snapped on or off
  160 +#define CHARSET_CHANGE 0x0010 /// @brief character set changed
  161 +#define ALL_CHANGE 0xffff /// @brief everything changed
165 162
166 /* Portability macros */ 163 /* Portability macros */
167 164
@@ -186,7 +183,7 @@ struct toggle_name { @@ -186,7 +183,7 @@ struct toggle_name {
186 183
187 /* DBCS Preedit Types */ 184 /* DBCS Preedit Types */
188 #if defined(X3270_DBCS) /*[*/ 185 #if defined(X3270_DBCS) /*[*/
189 - #define PT_ROOT "Root" 186 + #define PT_ROOT "Root"
190 #define PT_OVER_THE_SPOT "OverTheSpot" 187 #define PT_OVER_THE_SPOT "OverTheSpot"
191 #define PT_OFF_THE_SPOT "OffTheSpot" 188 #define PT_OFF_THE_SPOT "OffTheSpot"
192 #define PT_ON_THE_SPOT "OnTheSpot" 189 #define PT_ON_THE_SPOT "OnTheSpot"
@@ -211,7 +208,7 @@ LIB3270_INTERNAL struct _ansictl @@ -211,7 +208,7 @@ LIB3270_INTERNAL struct _ansictl
211 char vlnext; 208 char vlnext;
212 } ansictl; 209 } ansictl;
213 210
214 -/** extended attributes */ 211 +/** @brief Extended attributes */
215 struct lib3270_ea 212 struct lib3270_ea
216 { 213 {
217 unsigned char cc; ///< @brief EBCDIC or ASCII character code 214 unsigned char cc; ///< @brief EBCDIC or ASCII character code
@@ -230,21 +227,346 @@ struct lib3270_text @@ -230,21 +227,346 @@ struct lib3270_text
230 unsigned short attr; ///< @brief Converted character attribute (color & etc) 227 unsigned short attr; ///< @brief Converted character attribute (color & etc)
231 }; 228 };
232 229
  230 +#ifndef HEADER_SSL_H
  231 + #define SSL void
  232 +#endif // !HEADER_SSL_H
  233 +
  234 +#ifndef LIB3270_TA
  235 + #define LIB3270_TA void
  236 +#endif // !LIB3270_TA
  237 +
  238 +#define LIB3270_MB_MAX 16
  239 +#define LIB3270_DEFAULT_CGEN 0x02b90000
  240 +#define LIB3270_DEFAULT_CSET 0x00000025
  241 +
  242 +#define LIB3270_LUNAME_LENGTH 16
  243 +#define LIB3270_FULL_MODEL_NAME_LENGTH 13
  244 +#define LIB3270_LU_MAX 32
233 245
  246 +#define LIB3270_TELNET_N_OPTS 256
234 247
235 248
236 -/* default charset translation tables */  
237 -// LIB3270_INTERNAL const unsigned short ebc2asc0[256];  
238 -// LIB3270_INTERNAL const unsigned short asc2ft0[256]; 249 +/** @brief lib3270 session data */
  250 +struct _h3270
  251 +{
  252 + unsigned short sz; /**< Struct size */
  253 +
  254 + // Connection info
  255 + int sock; /**< Network socket */
  256 + LIB3270_CSTATE cstate; /**< Connection state */
  257 +
  258 + // flags
  259 + LIB3270_OPTION options; /**< Session options */
  260 +
  261 + int bgthread : 1; /**< Running on a background thread ? */
  262 + int selected : 1; /**< Has selected region? */
  263 + int rectsel : 1; /**< Selected region is a rectangle ? */
  264 + int vcontrol : 1; /**< Visible control ? */
  265 + int modified_sel : 1;
  266 + int mono : 1; /**< Forces monochrome display */
  267 + int m3279 : 1;
  268 + int extended : 1;
  269 + int typeahead : 1;
  270 + int numeric_lock : 1;
  271 + int oerr_lock : 1;
  272 + int unlock_delay : 1;
  273 + int auto_reconnect_inprogress : 1;
  274 + unsigned int colors : 5;
  275 + int apl_mode : 1;
  276 + int icrnl : 1;
  277 + int inlcr : 1;
  278 + int onlcr : 1;
  279 + int bsd_tm : 1;
  280 + int syncing : 1;
  281 + int reverse : 1; /**< reverse-input mode */
  282 + int dbcs : 1;
  283 + int linemode : 1;
  284 + int trace_skipping : 1;
  285 + int need_tls_follows : 1;
  286 + int cut_xfer_in_progress : 1;
  287 +// int auto_keymap : 1;
  288 + int formatted : 1; /**< Formatted screen flag */
  289 + int starting : 1; /**< Is starting (no first screen)? */
  290 +
  291 + char * oversize;
  292 +
  293 + LIB3270_SSL_STATE secure;
  294 +
  295 + struct lib3270_toggle
  296 + {
  297 + char value; /**< toggle value */
  298 + void (*upcall)(H3270 *, struct lib3270_toggle *, LIB3270_TOGGLE_TYPE); /**< change value */
  299 + } toggle[LIB3270_TOGGLE_COUNT];
  300 +
  301 + // Network & Termtype
  302 + char * connected_type;
  303 + char * connected_lu;
  304 + char luname[LIB3270_LUNAME_LENGTH+1];
  305 +
  306 + char full_model_name[LIB3270_FULL_MODEL_NAME_LENGTH+1];
  307 + char * model_name;
  308 + int model_num;
  309 + char * termtype;
  310 +
  311 + struct
  312 + {
  313 + char * current; /**< The hostname part, stripped of qualifiers, luname and port number */
  314 + char * full; /**< The entire string, for use in reconnecting */
  315 + char * srvc; /**< The service name */
  316 + char * qualified;
  317 + } host;
  318 +
  319 + char * proxy; /**< Proxy server (type:host[:port]) */
  320 + char * termname;
  321 +
  322 + struct lib3270_charset charset;
  323 +
  324 + LIB3270_MESSAGE oia_status;
  325 +
  326 + unsigned char oia_flag[LIB3270_FLAG_COUNT];
  327 +
  328 + unsigned short current_port;
  329 +
  330 + // Misc
  331 + void * ft; /**< Active file transfer data */
  332 +
  333 + // screen info
  334 + int ov_rows;
  335 + int ov_cols;
  336 + int maxROWS;
  337 + int maxCOLS;
  338 + unsigned short rows;
  339 + unsigned short cols;
  340 + int cursor_addr;
  341 + int buffer_addr;
  342 + char flipped;
  343 + int screen_alt; /**< alternate screen? */
  344 + int is_altbuffer;
  345 +
  346 + // Screen contents
  347 + void * buffer[2]; /**< Internal buffers */
  348 + struct lib3270_ea * ea_buf; /**< 3270 device buffer. ea_buf[-1] is the dummy default field attribute */
  349 + struct lib3270_ea * aea_buf; /**< alternate 3270 extended attribute buffer */
  350 + struct lib3270_text * text; /**< Converted 3270 chars */
  351 +
  352 + // host.c
  353 + char std_ds_host;
  354 + char no_login_host;
  355 + char non_tn3270e_host;
  356 + char passthru_host;
  357 + char ssl_host;
  358 + char ever_3270;
  359 +
  360 + // ctlr.c
  361 + int sscp_start;
  362 + unsigned char default_fg;
  363 + unsigned char default_bg;
  364 + unsigned char default_gr;
  365 + unsigned char default_cs;
  366 + unsigned char default_ic;
  367 + char reply_mode;
  368 + int trace_primed : 1;
  369 + int ticking : 1;
  370 + int mticking : 1;
  371 + int crm_nattr;
  372 + unsigned char crm_attr[16];
  373 + unsigned char * zero_buf; /**< empty buffer, for area clears */
  374 +
  375 + struct timeval t_start;
  376 + void * tick_id;
  377 + struct timeval t_want;
  378 +
  379 + // Telnet.c
  380 + unsigned char * ibuf;
  381 + int ibuf_size; /**< size of ibuf */
  382 + unsigned char * obuf; /**< 3270 output buffer */
  383 + unsigned char * obptr;
  384 + time_t ns_time;
  385 + int ns_brcvd;
  386 + int ns_rrcvd;
  387 + int ns_bsent;
  388 + int ns_rsent;
  389 + struct timeval ds_ts;
  390 + unsigned long e_funcs; /**< negotiated TN3270E functions */
  391 + unsigned short e_xmit_seq; /**< transmit sequence number */
  392 + int response_required;
  393 + int tn3270e_bound;
  394 + int tn3270e_negotiated;
  395 + int ansi_data;
  396 + int lnext;
  397 + int backslashed;
  398 + char plu_name[LIB3270_BIND_PLU_NAME_MAX+1];
  399 + char **lus;
  400 + char **curr_lu;
  401 + char * try_lu;
  402 + int proxy_type;
  403 + char * proxy_host;
  404 + char * proxy_portname;
  405 + unsigned short proxy_port;
  406 + char reported_lu[LIB3270_LU_MAX+1];
  407 + char reported_type[LIB3270_LU_MAX+1];
  408 +
  409 + enum
  410 + {
  411 + E_NONE,
  412 + E_3270,
  413 + E_NVT,
  414 + E_SSCP
  415 + } tn3270e_submode;
  416 +
  417 + unsigned char * lbuf; /**< line-mode input buffer */
  418 + unsigned char * lbptr;
  419 +
  420 +
  421 + // 3270 input buffer
  422 + unsigned char * ibptr;
  423 + unsigned char * obuf_base;
  424 + int obuf_size;
  425 +// unsigned char * netrbuf;
  426 +
  427 + // network input buffer
  428 + unsigned char * sbbuf;
  429 +
  430 + // telnet sub-option buffer
  431 + unsigned char * sbptr;
  432 + unsigned char telnet_state;
  433 +// char ttype_tmpval[13];
  434 +
  435 + unsigned char myopts[LIB3270_TELNET_N_OPTS];
  436 + unsigned char hisopts[LIB3270_TELNET_N_OPTS];
  437 +
  438 + // kybd.c
  439 + unsigned int kybdlock; ///< @brief keyboard lock state
  440 + unsigned char aid; ///< @brief current attention ID
  441 + void * unlock_id;
  442 + time_t unlock_delay_time;
  443 + unsigned long unlock_delay_ms; ///< @brief Delay before actually unlocking the keyboard after the host permits it.
  444 + LIB3270_TA * ta_head;
  445 + LIB3270_TA * ta_tail;
  446 +
  447 + // ft_dft.c
  448 + int dft_buffersize; ///< @brief Buffer size (LIMIN, LIMOUT)
  449 +
  450 + // rpq.c
  451 + int rpq_complained : 1;
  452 +#if !defined(_WIN32)
  453 + int omit_due_space_limit : 1;
  454 +#endif
239 455
  456 + char * rpq_warnbuf;
  457 + int rpq_wbcnt;
  458 +
  459 + // User data (Usually points to session's widget)
  460 + void * user_data;
  461 +
  462 + // selection
  463 + char * paste_buffer;
  464 + struct
  465 + {
  466 + int start;
  467 + int end;
  468 + } select;
  469 +
  470 + // ansi.c
  471 + int scroll_top;
  472 + int scroll_bottom;
  473 + int once_cset;
  474 + int saved_cursor;
  475 +
  476 + int held_wrap : 1;
  477 +
  478 + int insert_mode : 1;
  479 + int auto_newline_mode : 1;
  480 +
  481 + int appl_cursor : 1;
  482 + int saved_appl_cursor : 1;
  483 +
  484 + int wraparound_mode : 1;
  485 + int saved_wraparound_mode : 1;
  486 +
  487 + int rev_wraparound_mode : 1;
  488 + int saved_rev_wraparound_mode : 1;
  489 +
  490 + int allow_wide_mode : 1;
  491 + int saved_allow_wide_mode : 1;
  492 +
  493 + int wide_mode : 1;
  494 + int saved_wide_mode : 1;
  495 +
  496 + int saved_altbuffer : 1;
  497 + int ansi_reset : 1; /**< Non zero if the ansi_reset() was called in this session */
  498 +
  499 + int ansi_ch;
  500 + int cs_to_change;
  501 +
  502 + /** ANSI Character sets. */
  503 + enum lib3270_ansi_cs
  504 + {
  505 + LIB3270_ANSI_CS_G0 = 0,
  506 + LIB3270_ANSI_CS_G1 = 1,
  507 + LIB3270_ANSI_CS_G2 = 2,
  508 + LIB3270_ANSI_CS_G3 = 3
  509 + } cset;
  510 + enum lib3270_ansi_cs saved_cset;
  511 +
  512 + /** Character set designations. */
  513 + enum lib3270_ansi_csd
  514 + {
  515 + LIB3270_ANSI_CSD_LD = 0,
  516 + LIB3270_ANSI_CSD_UK = 1,
  517 + LIB3270_ANSI_CSD_US = 2
  518 + } csd[4];
  519 + enum lib3270_ansi_csd saved_csd[4];
  520 +
  521 + enum lib3270_ansi_state
  522 + {
  523 + LIB3270_ANSI_STATE_DATA = 0,
  524 + LIB3270_ANSI_STATE_ESC = 1,
  525 + LIB3270_ANSI_STATE_CSDES = 2,
  526 + LIB3270_ANSI_STATE_N1 = 3,
  527 + LIB3270_ANSI_STATE_DECP = 4,
  528 + LIB3270_ANSI_STATE_TEXT = 5,
  529 + LIB3270_ANSI_STATE_TEXT2 = 6,
  530 + LIB3270_ANSI_STATE_MBPEND = 7
  531 + } state;
  532 +
  533 + unsigned char * tabs;
  534 +
  535 + int pmi;
  536 + char pending_mbs[LIB3270_MB_MAX];
  537 +
  538 + unsigned char gr;
  539 + unsigned char saved_gr;
  540 +
  541 + unsigned char fg;
  542 + unsigned char saved_fg;
  543 +
  544 + unsigned char bg;
  545 + unsigned char saved_bg;
  546 +
  547 + // xio
  548 + void * ns_read_id;
  549 + void * ns_write_id;
  550 + void * ns_exception_id;
  551 +
  552 + // SSL Data (Always defined to mantain the same structure size)
  553 + unsigned long ssl_error;
  554 + SSL * ssl_con;
  555 +
  556 + // Callbacks.
  557 + struct lib3270_state_callback * st_callbacks[LIB3270_STATE_USER];
  558 + struct lib3270_state_callback * st_last[LIB3270_STATE_USER];
  559 + struct lib3270_session_callbacks cbk;
  560 +
  561 +};
240 562
241 /* Library internal calls */ 563 /* Library internal calls */
242 -LIB3270_INTERNAL void key_ACharacter(H3270 *hSession, unsigned char c, enum keytype keytype, enum iaction cause,Boolean *skipped);  
243 -LIB3270_INTERNAL void lib3270_initialize(void);  
244 -LIB3270_INTERNAL int cursor_move(H3270 *session, int baddr); 564 +LIB3270_INTERNAL void key_ACharacter(H3270 *hSession, unsigned char c, enum keytype keytype, enum iaction cause,Boolean *skipped);
  565 +LIB3270_INTERNAL void lib3270_initialize(void);
  566 +LIB3270_INTERNAL int cursor_move(H3270 *session, int baddr);
245 567
246 -LIB3270_INTERNAL void toggle_rectselect(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGGLE_TYPE tt);  
247 -LIB3270_INTERNAL void remove_input_calls(H3270 *session); 568 +LIB3270_INTERNAL void toggle_rectselect(H3270 *session, struct lib3270_toggle *t, LIB3270_TOGGLE_TYPE tt);
  569 +LIB3270_INTERNAL void remove_input_calls(H3270 *session);
248 570
249 LIB3270_INTERNAL int lib3270_sock_send(H3270 *hSession, unsigned const char *buf, int len); 571 LIB3270_INTERNAL int lib3270_sock_send(H3270 *hSession, unsigned const char *buf, int len);
250 LIB3270_INTERNAL void lib3270_sock_disconnect(H3270 *hSession); 572 LIB3270_INTERNAL void lib3270_sock_disconnect(H3270 *hSession);
@@ -259,7 +581,7 @@ LIB3270_INTERNAL int lib3270_default_event_dispatcher(H3270 *hSession, int block @@ -259,7 +581,7 @@ LIB3270_INTERNAL int lib3270_default_event_dispatcher(H3270 *hSession, int block
259 LIB3270_INTERNAL void check_session_handle(H3270 **hSession); 581 LIB3270_INTERNAL void check_session_handle(H3270 **hSession);
260 #endif // DEBUG 582 #endif // DEBUG
261 583
262 -LIB3270_INTERNAL int non_blocking(H3270 *session, Boolean on); 584 +LIB3270_INTERNAL int non_blocking(H3270 *session, Boolean on);
263 585
264 #if defined(HAVE_LIBSSL) /*[*/ 586 #if defined(HAVE_LIBSSL) /*[*/
265 587
src/pw3270/v3270/draw.c
@@ -400,7 +400,7 @@ void v3270_reload(GtkWidget *widget) @@ -400,7 +400,7 @@ void v3270_reload(GtkWidget *widget)
400 400
401 void v3270_update_char(H3270 *session, int addr, unsigned char chr, unsigned short attr, unsigned char cursor) 401 void v3270_update_char(H3270 *session, int addr, unsigned char chr, unsigned short attr, unsigned char cursor)
402 { 402 {
403 - v3270 * terminal = GTK_V3270(session->user_data); 403 + v3270 * terminal = GTK_V3270(lib3270_get_user_data(session));
404 cairo_t * cr; 404 cairo_t * cr;
405 GdkRectangle rect; 405 GdkRectangle rect;
406 int rows,cols; 406 int rows,cols;
src/pw3270/v3270/oia.c
@@ -765,7 +765,7 @@ static void draw_cursor_position(cairo_t *cr, GdkRectangle *rect, v3270FontInfo @@ -765,7 +765,7 @@ static void draw_cursor_position(cairo_t *cr, GdkRectangle *rect, v3270FontInfo
765 765
766 void v3270_update_cursor(H3270 *session, unsigned short row, unsigned short col, unsigned char c, unsigned short attr) 766 void v3270_update_cursor(H3270 *session, unsigned short row, unsigned short col, unsigned char c, unsigned short attr)
767 { 767 {
768 - v3270 * terminal = GTK_V3270(session->user_data); 768 + v3270 * terminal = GTK_V3270(lib3270_get_user_data(session));
769 GdkRectangle saved; 769 GdkRectangle saved;
770 770
771 if(!terminal->surface) 771 if(!terminal->surface)
@@ -1081,9 +1081,7 @@ void v3270_stop_timer(GtkWidget *widget) @@ -1081,9 +1081,7 @@ void v3270_stop_timer(GtkWidget *widget)
1081 1081
1082 void v3270_update_ssl(H3270 *session, LIB3270_SSL_STATE state) 1082 void v3270_update_ssl(H3270 *session, LIB3270_SSL_STATE state)
1083 { 1083 {
1084 - debug("%s **************************************** %d",__FUNCTION__,(int) state);  
1085 -  
1086 - v3270 * terminal = GTK_V3270(session->user_data); 1084 + v3270 * terminal = GTK_V3270(lib3270_get_user_data(session));
1087 cairo_t * cr; 1085 cairo_t * cr;
1088 GdkRectangle * r; 1086 GdkRectangle * r;
1089 1087
@@ -1102,7 +1100,7 @@ void v3270_update_oia(H3270 *session, LIB3270_FLAG id, unsigned char on) @@ -1102,7 +1100,7 @@ void v3270_update_oia(H3270 *session, LIB3270_FLAG id, unsigned char on)
1102 cairo_t *cr; 1100 cairo_t *cr;
1103 GdkRectangle *r; 1101 GdkRectangle *r;
1104 1102
1105 - v3270 *terminal = GTK_V3270(session->user_data); 1103 + v3270 *terminal = GTK_V3270(lib3270_get_user_data(session));
1106 1104
1107 if(!(terminal->surface && terminal->drawing)) 1105 if(!(terminal->surface && terminal->drawing))
1108 return; 1106 return;
src/pw3270/v3270/widget.c
@@ -639,7 +639,7 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int heig @@ -639,7 +639,7 @@ void v3270_update_font_metrics(v3270 *terminal, cairo_t *cr, int width, int heig
639 639
640 static void set_timer(H3270 *session, unsigned char on) 640 static void set_timer(H3270 *session, unsigned char on)
641 { 641 {
642 - GtkWidget *widget = GTK_WIDGET(session->user_data); 642 + GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(session));
643 643
644 if(on) 644 if(on)
645 v3270_start_timer(widget); 645 v3270_start_timer(widget);
@@ -650,6 +650,8 @@ static void set_timer(H3270 *session, unsigned char on) @@ -650,6 +650,8 @@ static void set_timer(H3270 *session, unsigned char on)
650 650
651 static void update_toggle(H3270 *session, LIB3270_TOGGLE ix, unsigned char value, LIB3270_TOGGLE_TYPE reason, const char *name) 651 static void update_toggle(H3270 *session, LIB3270_TOGGLE ix, unsigned char value, LIB3270_TOGGLE_TYPE reason, const char *name)
652 { 652 {
  653 + GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(session));
  654 +
653 trace("Toggle %s is %s",name,value ? "ON" : "OFF"); 655 trace("Toggle %s is %s",name,value ? "ON" : "OFF");
654 656
655 switch(ix) 657 switch(ix)
@@ -665,29 +667,29 @@ static void update_toggle(H3270 *session, LIB3270_TOGGLE ix, unsigned char value @@ -665,29 +667,29 @@ static void update_toggle(H3270 *session, LIB3270_TOGGLE ix, unsigned char value
665 case LIB3270_TOGGLE_UNDERLINE: 667 case LIB3270_TOGGLE_UNDERLINE:
666 case LIB3270_TOGGLE_VIEW_FIELD: 668 case LIB3270_TOGGLE_VIEW_FIELD:
667 case LIB3270_TOGGLE_ALTSCREEN: 669 case LIB3270_TOGGLE_ALTSCREEN:
668 - v3270_reload(GTK_WIDGET(session->user_data));  
669 - gtk_widget_queue_draw(GTK_WIDGET(session->user_data)); 670 + v3270_reload(widget);
  671 + gtk_widget_queue_draw(widget);
670 break; 672 break;
671 673
672 case LIB3270_TOGGLE_CURSOR_BLINK: 674 case LIB3270_TOGGLE_CURSOR_BLINK:
673 - GTK_V3270(session->user_data)->cursor.show |= 1; 675 + GTK_V3270(widget)->cursor.show |= 1;
674 break; 676 break;
675 677
676 case LIB3270_TOGGLE_INSERT: 678 case LIB3270_TOGGLE_INSERT:
677 - v3270_draw_ins_status(GTK_V3270(session->user_data));  
678 - v3270_cursor_draw(GTK_V3270(session->user_data)); 679 + v3270_draw_ins_status(GTK_V3270(widget));
  680 + v3270_cursor_draw(GTK_V3270(widget));
679 break; 681 break;
680 682
681 case LIB3270_TOGGLE_BOLD: 683 case LIB3270_TOGGLE_BOLD:
682 - v3270_reload(GTK_WIDGET(session->user_data));  
683 - gtk_widget_queue_draw(GTK_WIDGET(session->user_data)); 684 + v3270_reload(widget);
  685 + gtk_widget_queue_draw(widget);
684 break; 686 break;
685 687
686 case LIB3270_TOGGLE_FULL_SCREEN: 688 case LIB3270_TOGGLE_FULL_SCREEN:
687 if(value) 689 if(value)
688 - gtk_window_fullscreen(GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(session->user_data)))); 690 + gtk_window_fullscreen(GTK_WINDOW(gtk_widget_get_toplevel(widget)));
689 else 691 else
690 - gtk_window_unfullscreen(GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(session->user_data)))); 692 + gtk_window_unfullscreen(GTK_WINDOW(gtk_widget_get_toplevel(widget)));
691 693
692 break; 694 break;
693 695
@@ -709,27 +711,27 @@ static void update_toggle(H3270 *session, LIB3270_TOGGLE ix, unsigned char value @@ -709,27 +711,27 @@ static void update_toggle(H3270 *session, LIB3270_TOGGLE ix, unsigned char value
709 711
710 } 712 }
711 #if GTK_CHECK_VERSION(2,26,0) 713 #if GTK_CHECK_VERSION(2,26,0)
712 - g_object_notify_by_pspec(G_OBJECT(session->user_data), v3270_properties[PROP_TOGGLE+ix]); 714 + g_object_notify_by_pspec(G_OBJECT(widget), v3270_properties[PROP_TOGGLE+ix]);
713 #else 715 #else
714 - g_object_notify(G_OBJECT(session->user_data),name); 716 + g_object_notify(G_OBJECT(widget),name);
715 #endif // GTK_CHECK_VERSION 717 #endif // GTK_CHECK_VERSION
716 718
717 - g_signal_emit(GTK_WIDGET(session->user_data), v3270_widget_signal[SIGNAL_TOGGLE_CHANGED], 0, (guint) ix, (gboolean) (value != 0), (gchar *) name); 719 + g_signal_emit(widget, v3270_widget_signal[SIGNAL_TOGGLE_CHANGED], 0, (guint) ix, (gboolean) (value != 0), (gchar *) name);
718 } 720 }
719 721
720 static void update_message(H3270 *session, LIB3270_MESSAGE id) 722 static void update_message(H3270 *session, LIB3270_MESSAGE id)
721 { 723 {
722 - g_signal_emit(GTK_WIDGET(session->user_data), v3270_widget_signal[SIGNAL_MESSAGE_CHANGED], 0, (gint) id); 724 + g_signal_emit(GTK_WIDGET(lib3270_get_user_data(session)), v3270_widget_signal[SIGNAL_MESSAGE_CHANGED], 0, (gint) id);
723 } 725 }
724 726
725 static void update_luname(H3270 *session, const char *name) 727 static void update_luname(H3270 *session, const char *name)
726 { 728 {
727 - v3270_update_luname(GTK_WIDGET(session->user_data),name); 729 + v3270_update_luname(GTK_WIDGET(lib3270_get_user_data(session)),name);
728 } 730 }
729 731
730 static void select_cursor(H3270 *session, LIB3270_CURSOR id) 732 static void select_cursor(H3270 *session, LIB3270_CURSOR id)
731 { 733 {
732 - GtkWidget *widget = GTK_WIDGET(session->user_data); 734 + GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(session));
733 735
734 #if GTK_CHECK_VERSION(2,20,0) 736 #if GTK_CHECK_VERSION(2,20,0)
735 if(gtk_widget_get_realized(widget) && gtk_widget_get_has_window(widget)) 737 if(gtk_widget_get_realized(widget) && gtk_widget_get_has_window(widget))
@@ -744,7 +746,7 @@ static void select_cursor(H3270 *session, LIB3270_CURSOR id) @@ -744,7 +746,7 @@ static void select_cursor(H3270 *session, LIB3270_CURSOR id)
744 746
745 static void ctlr_done(H3270 *session) 747 static void ctlr_done(H3270 *session)
746 { 748 {
747 - GtkWidget *widget = GTK_WIDGET(session->user_data); 749 + GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(session));
748 750
749 #if GTK_CHECK_VERSION(2,20,0) 751 #if GTK_CHECK_VERSION(2,20,0)
750 if(gtk_widget_get_realized(widget) && gtk_widget_get_has_window(widget)) 752 if(gtk_widget_get_realized(widget) && gtk_widget_get_has_window(widget))
@@ -759,14 +761,14 @@ static void ctlr_done(H3270 *session) @@ -759,14 +761,14 @@ static void ctlr_done(H3270 *session)
759 761
760 static void update_connect(H3270 *session, unsigned char connected) 762 static void update_connect(H3270 *session, unsigned char connected)
761 { 763 {
762 - v3270 *widget = GTK_V3270(session->user_data); 764 + v3270 *widget = GTK_V3270(lib3270_get_user_data(session));
763 765
764 trace("%s - %s",__FUNCTION__,connected ? "Connected" : "Disconnected"); 766 trace("%s - %s",__FUNCTION__,connected ? "Connected" : "Disconnected");
765 767
766 if(connected) 768 if(connected)
767 { 769 {
768 widget->cursor.show |= 2; 770 widget->cursor.show |= 2;
769 - g_signal_emit(GTK_WIDGET(widget), v3270_widget_signal[SIGNAL_CONNECTED], 0, session->host.full); 771 + g_signal_emit(GTK_WIDGET(widget), v3270_widget_signal[SIGNAL_CONNECTED], 0, lib3270_get_host(session));
770 } 772 }
771 else 773 else
772 { 774 {
@@ -788,23 +790,23 @@ static void update_connect(H3270 *session, unsigned char connected) @@ -788,23 +790,23 @@ static void update_connect(H3270 *session, unsigned char connected)
788 static void update_screen_size(H3270 *session,unsigned short rows, unsigned short cols) 790 static void update_screen_size(H3270 *session,unsigned short rows, unsigned short cols)
789 { 791 {
790 // trace("Widget %p changes to %dx%d",session->widget,cols,rows); 792 // trace("Widget %p changes to %dx%d",session->widget,cols,rows);
791 - v3270_reload(GTK_WIDGET(session->user_data));  
792 - gtk_widget_queue_draw(GTK_WIDGET(session->user_data)); 793 + v3270_reload(GTK_WIDGET(lib3270_get_user_data(session)));
  794 + gtk_widget_queue_draw(GTK_WIDGET(lib3270_get_user_data(session)));
793 } 795 }
794 796
795 static void update_model(H3270 *session, const char *name, int model, int rows, int cols) 797 static void update_model(H3270 *session, const char *name, int model, int rows, int cols)
796 { 798 {
797 #if GTK_CHECK_VERSION(2,26,0) 799 #if GTK_CHECK_VERSION(2,26,0)
798 - g_object_notify_by_pspec(G_OBJECT(session->user_data), v3270_properties[PROP_MODEL]); 800 + g_object_notify_by_pspec(G_OBJECT(lib3270_get_user_data(session)), v3270_properties[PROP_MODEL]);
799 #else 801 #else
800 - g_object_notify(G_OBJECT(session->user_data),"model"); 802 + g_object_notify(G_OBJECT(lib3270_get_user_data(session)),"model");
801 #endif // GTK_CHECK_VERSION 803 #endif // GTK_CHECK_VERSION
802 - g_signal_emit(GTK_WIDGET(session->user_data),v3270_widget_signal[SIGNAL_MODEL_CHANGED], 0, (guint) model, name); 804 + g_signal_emit(GTK_WIDGET(lib3270_get_user_data(session)),v3270_widget_signal[SIGNAL_MODEL_CHANGED], 0, (guint) model, name);
803 } 805 }
804 806
805 static void changed(H3270 *session, int offset, int len) 807 static void changed(H3270 *session, int offset, int len)
806 { 808 {
807 - GtkWidget * widget = session->user_data; 809 + GtkWidget * widget = lib3270_get_user_data(session);
808 GtkAccessible * obj = GTK_V3270(widget)->accessible; 810 GtkAccessible * obj = GTK_V3270(widget)->accessible;
809 811
810 #ifdef WIN32 812 #ifdef WIN32
@@ -863,7 +865,7 @@ static void changed(H3270 *session, int offset, int len) @@ -863,7 +865,7 @@ static void changed(H3270 *session, int offset, int len)
863 865
864 static void set_selection(H3270 *session, unsigned char status) 866 static void set_selection(H3270 *session, unsigned char status)
865 { 867 {
866 - GtkWidget * widget = GTK_WIDGET(session->user_data); 868 + GtkWidget * widget = GTK_WIDGET(lib3270_get_user_data(session));
867 869
868 #if GTK_CHECK_VERSION(2,26,0) 870 #if GTK_CHECK_VERSION(2,26,0)
869 g_object_notify_by_pspec(G_OBJECT(widget), v3270_properties[PROP_SELECTION]); 871 g_object_notify_by_pspec(G_OBJECT(widget), v3270_properties[PROP_SELECTION]);
@@ -877,7 +879,7 @@ static void set_selection(H3270 *session, unsigned char status) @@ -877,7 +879,7 @@ static void set_selection(H3270 *session, unsigned char status)
877 static void update_selection(H3270 *session, int start, int end) 879 static void update_selection(H3270 *session, int start, int end)
878 { 880 {
879 // Selected region changed 881 // Selected region changed
880 - GtkWidget * widget = GTK_WIDGET(session->user_data); 882 + GtkWidget * widget = GTK_WIDGET(lib3270_get_user_data(session));
881 GtkAccessible * atk_obj = GTK_V3270(widget)->accessible; 883 GtkAccessible * atk_obj = GTK_V3270(widget)->accessible;
882 884
883 if(atk_obj) 885 if(atk_obj)
@@ -887,7 +889,7 @@ static void update_selection(H3270 *session, int start, int end) @@ -887,7 +889,7 @@ static void update_selection(H3270 *session, int start, int end)
887 889
888 static void message(H3270 *session, LIB3270_NOTIFY id , const char *title, const char *message, const char *text) 890 static void message(H3270 *session, LIB3270_NOTIFY id , const char *title, const char *message, const char *text)
889 { 891 {
890 - g_signal_emit( GTK_WIDGET(session->user_data), v3270_widget_signal[SIGNAL_MESSAGE], 0, 892 + g_signal_emit( GTK_WIDGET(lib3270_get_user_data(session)), v3270_widget_signal[SIGNAL_MESSAGE], 0,
891 (int) id, 893 (int) id,
892 (gchar *) title, 894 (gchar *) title,
893 (gchar *) message, 895 (gchar *) message,
@@ -897,7 +899,7 @@ static void message(H3270 *session, LIB3270_NOTIFY id , const char *title, const @@ -897,7 +899,7 @@ static void message(H3270 *session, LIB3270_NOTIFY id , const char *title, const
897 899
898 static int emit_print_signal(H3270 *session) 900 static int emit_print_signal(H3270 *session)
899 { 901 {
900 - g_signal_emit(GTK_WIDGET(session->user_data), v3270_widget_signal[SIGNAL_PRINT], 0); 902 + g_signal_emit(GTK_WIDGET(lib3270_get_user_data(session)), v3270_widget_signal[SIGNAL_PRINT], 0);
901 return 0; 903 return 0;
902 } 904 }
903 905
@@ -920,10 +922,11 @@ static void v3270_init(v3270 *widget) @@ -920,10 +922,11 @@ static void v3270_init(v3270 *widget)
920 { 922 {
921 struct lib3270_session_callbacks *cbk; 923 struct lib3270_session_callbacks *cbk;
922 924
923 - widget->host = lib3270_session_new("");  
924 - widget->host->user_data = widget; 925 + widget->host = lib3270_session_new("");
925 926
  927 + lib3270_set_user_data(widget->host,widget);
926 928
  929 + /*
927 trace("%s host->sz=%d expected=%d revision=%s expected=%s",__FUNCTION__,widget->host->sz,(int) sizeof(H3270),lib3270_get_revision(),PACKAGE_REVISION); 930 trace("%s host->sz=%d expected=%d revision=%s expected=%s",__FUNCTION__,widget->host->sz,(int) sizeof(H3270),lib3270_get_revision(),PACKAGE_REVISION);
928 931
929 if(widget->host->sz != sizeof(H3270)) 932 if(widget->host->sz != sizeof(H3270))
@@ -931,6 +934,7 @@ static void v3270_init(v3270 *widget) @@ -931,6 +934,7 @@ static void v3270_init(v3270 *widget)
931 g_error( _( "Unexpected signature in H3270 object, possible version mismatch in lib3270") ); 934 g_error( _( "Unexpected signature in H3270 object, possible version mismatch in lib3270") );
932 return; 935 return;
933 } 936 }
  937 + */
934 938
935 cbk = lib3270_get_session_callbacks(widget->host,sizeof(struct lib3270_session_callbacks)); 939 cbk = lib3270_get_session_callbacks(widget->host,sizeof(struct lib3270_session_callbacks));
936 if(!cbk) 940 if(!cbk)
@@ -1689,13 +1693,15 @@ GtkWidget * v3270_get_default_widget(void) @@ -1689,13 +1693,15 @@ GtkWidget * v3270_get_default_widget(void)
1689 return NULL; 1693 return NULL;
1690 } 1694 }
1691 1695
1692 - if(!(hSession->user_data && GTK_IS_V3270(hSession->user_data))) 1696 + GtkWidget *widget = lib3270_get_user_data(hSession);
  1697 +
  1698 + if(!(widget && GTK_IS_V3270(widget)))
1693 { 1699 {
1694 g_warning("No widget on default session on %s",__FUNCTION__); 1700 g_warning("No widget on default session on %s",__FUNCTION__);
1695 return NULL; 1701 return NULL;
1696 } 1702 }
1697 1703
1698 - return GTK_WIDGET(hSession->user_data); 1704 + return GTK_WIDGET(widget);
1699 } 1705 }
1700 1706
1701 void v3270_disable_updates(GtkWidget *widget) 1707 void v3270_disable_updates(GtkWidget *widget)