Commit b00a36907c88022a670aba509b1da52372ad441f
1 parent
2a4054a8
Exists in
master
and in
5 other branches
Melhorando sistema de callbacks.
Showing
5 changed files
with
55 additions
and
53 deletions
Show diff stats
src/include/lib3270/session.h
@@ -83,8 +83,6 @@ | @@ -83,8 +83,6 @@ | ||
83 | 83 | ||
84 | struct lib3270_session_callbacks | 84 | struct lib3270_session_callbacks |
85 | { | 85 | { |
86 | - unsigned short sz; | ||
87 | - | ||
88 | int (*write)(H3270 *hSession, unsigned const char *buf, int len); | 86 | int (*write)(H3270 *hSession, unsigned const char *buf, int len); |
89 | void (*disconnect)(H3270 *hSession); | 87 | void (*disconnect)(H3270 *hSession); |
90 | 88 | ||
@@ -119,6 +117,8 @@ | @@ -119,6 +117,8 @@ | ||
119 | }; | 117 | }; |
120 | 118 | ||
121 | 119 | ||
120 | + LIB3270_EXPORT struct lib3270_session_callbacks * lib3270_get_session_callbacks(H3270 *session, unsigned short sz); | ||
121 | + | ||
122 | struct _h3270 | 122 | struct _h3270 |
123 | { | 123 | { |
124 | unsigned short sz; /**< Struct size */ | 124 | unsigned short sz; /**< Struct size */ |
@@ -182,10 +182,10 @@ | @@ -182,10 +182,10 @@ | ||
182 | 182 | ||
183 | struct | 183 | struct |
184 | { | 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; | 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; | 189 | } host; |
190 | 190 | ||
191 | char * proxy; /**< Proxy server (type:host[:port]) */ | 191 | char * proxy; /**< Proxy server (type:host[:port]) */ |
src/lib3270/ctlr.c
@@ -2696,27 +2696,6 @@ void ctlr_scroll(H3270 *hSession) | @@ -2696,27 +2696,6 @@ void ctlr_scroll(H3270 *hSession) | ||
2696 | #endif /*]*/ | 2696 | #endif /*]*/ |
2697 | 2697 | ||
2698 | /* | 2698 | /* |
2699 | - * Note that a particular region of the screen has changed. | ||
2700 | - */ | ||
2701 | - | ||
2702 | -// void changed(H3270 *session, int bstart, int bend) | ||
2703 | -// { | ||
2704 | - /* | ||
2705 | - if(session->first_changed < 0) | ||
2706 | - { | ||
2707 | - session->first_changed = bstart; | ||
2708 | - session->last_changed = bend; | ||
2709 | - return; | ||
2710 | - } | ||
2711 | - if(bstart < session->first_changed) | ||
2712 | - session->first_changed = bstart; | ||
2713 | - | ||
2714 | - if(bend > session->last_changed) | ||
2715 | - session->last_changed = bend; | ||
2716 | - */ | ||
2717 | -// } | ||
2718 | - | ||
2719 | -/* | ||
2720 | * Swap the regular and alternate screen buffers | 2699 | * Swap the regular and alternate screen buffers |
2721 | */ | 2700 | */ |
2722 | void ctlr_altbuffer(H3270 *session, int alt) | 2701 | void ctlr_altbuffer(H3270 *session, int alt) |
src/lib3270/session.c
@@ -331,3 +331,15 @@ LIB3270_EXPORT void * lib3270_get_user_data(H3270 *h) | @@ -331,3 +331,15 @@ LIB3270_EXPORT void * lib3270_get_user_data(H3270 *h) | ||
331 | CHECK_SESSION_HANDLE(h); | 331 | CHECK_SESSION_HANDLE(h); |
332 | return h->user_data; | 332 | return h->user_data; |
333 | } | 333 | } |
334 | + | ||
335 | +struct lib3270_session_callbacks * lib3270_get_session_callbacks(H3270 *session, unsigned short sz) | ||
336 | +{ | ||
337 | + CHECK_SESSION_HANDLE(session); | ||
338 | + | ||
339 | + if(sz != sizeof(struct lib3270_session_callbacks)) | ||
340 | + return NULL; | ||
341 | + | ||
342 | + return &session->cbk; | ||
343 | +} | ||
344 | + | ||
345 | + |
src/lib3270/telnet.c
@@ -1866,10 +1866,11 @@ static void process_bind(H3270 *hSession, unsigned char *buf, int buflen) | @@ -1866,10 +1866,11 @@ static void process_bind(H3270 *hSession, unsigned char *buf, int buflen) | ||
1866 | } | 1866 | } |
1867 | #endif /*]*/ | 1867 | #endif /*]*/ |
1868 | 1868 | ||
1869 | -static int | ||
1870 | -process_eor(H3270 *hSession) | 1869 | +static int process_eor(H3270 *hSession) |
1871 | { | 1870 | { |
1871 | + | ||
1872 | trace("%s: syncing=%s",__FUNCTION__,hSession->syncing ? "Yes" : "No"); | 1872 | trace("%s: syncing=%s",__FUNCTION__,hSession->syncing ? "Yes" : "No"); |
1873 | + | ||
1873 | if (hSession->syncing || !(hSession->ibptr - hSession->ibuf)) | 1874 | if (hSession->syncing || !(hSession->ibptr - hSession->ibuf)) |
1874 | return(0); | 1875 | return(0); |
1875 | 1876 |
src/pw3270/v3270/widget.c
@@ -918,7 +918,11 @@ static void release_activity_timer(v3270 *widget) | @@ -918,7 +918,11 @@ static void release_activity_timer(v3270 *widget) | ||
918 | 918 | ||
919 | static void v3270_init(v3270 *widget) | 919 | static void v3270_init(v3270 *widget) |
920 | { | 920 | { |
921 | - widget->host = lib3270_session_new(""); | 921 | + struct lib3270_session_callbacks *cbk; |
922 | + | ||
923 | + widget->host = lib3270_session_new(""); | ||
924 | + widget->host->user_data = widget; | ||
925 | + | ||
922 | 926 | ||
923 | trace("%s host->sz=%d expected=%d revision=%s expected=%s",__FUNCTION__,widget->host->sz,(int) sizeof(H3270),lib3270_get_revision(),PACKAGE_REVISION); | 927 | trace("%s host->sz=%d expected=%d revision=%s expected=%s",__FUNCTION__,widget->host->sz,(int) sizeof(H3270),lib3270_get_revision(),PACKAGE_REVISION); |
924 | 928 | ||
@@ -928,29 +932,35 @@ static void v3270_init(v3270 *widget) | @@ -928,29 +932,35 @@ static void v3270_init(v3270 *widget) | ||
928 | return; | 932 | return; |
929 | } | 933 | } |
930 | 934 | ||
931 | - widget->host->user_data = widget; | ||
932 | - | ||
933 | - widget->host->cbk.update = v3270_update_char; | ||
934 | - widget->host->cbk.changed = changed; | ||
935 | - widget->host->cbk.set_timer = set_timer; | ||
936 | - | ||
937 | - widget->host->cbk.set_selection = set_selection; | ||
938 | - widget->host->cbk.update_selection = update_selection; | ||
939 | - | ||
940 | - widget->host->cbk.update_luname = update_luname; | ||
941 | - widget->host->cbk.configure = update_screen_size; | ||
942 | - widget->host->cbk.update_status = update_message; | ||
943 | - widget->host->cbk.update_cursor = v3270_update_cursor; | ||
944 | - widget->host->cbk.update_toggle = update_toggle; | ||
945 | - widget->host->cbk.update_oia = v3270_update_oia; | ||
946 | - widget->host->cbk.cursor = select_cursor; | ||
947 | - widget->host->cbk.update_connect = update_connect; | ||
948 | - widget->host->cbk.update_model = update_model; | ||
949 | - widget->host->cbk.changed = changed; | ||
950 | - widget->host->cbk.ctlr_done = ctlr_done; | ||
951 | - widget->host->cbk.message = message; | ||
952 | - widget->host->cbk.update_ssl = v3270_update_ssl; | ||
953 | - widget->host->cbk.print = emit_print_signal; | 935 | + cbk = lib3270_get_session_callbacks(widget->host,sizeof(struct lib3270_session_callbacks)); |
936 | + if(!cbk) | ||
937 | + { | ||
938 | + g_error( _( "Invalid callback table, possible version mismatch in lib3270") ); | ||
939 | + return; | ||
940 | + } | ||
941 | + | ||
942 | + | ||
943 | + cbk->update = v3270_update_char; | ||
944 | + cbk->changed = changed; | ||
945 | + cbk->set_timer = set_timer; | ||
946 | + | ||
947 | + cbk->set_selection = set_selection; | ||
948 | + cbk->update_selection = update_selection; | ||
949 | + | ||
950 | + cbk->update_luname = update_luname; | ||
951 | + cbk->configure = update_screen_size; | ||
952 | + cbk->update_status = update_message; | ||
953 | + cbk->update_cursor = v3270_update_cursor; | ||
954 | + cbk->update_toggle = update_toggle; | ||
955 | + cbk->update_oia = v3270_update_oia; | ||
956 | + cbk->cursor = select_cursor; | ||
957 | + cbk->update_connect = update_connect; | ||
958 | + cbk->update_model = update_model; | ||
959 | + cbk->changed = changed; | ||
960 | + cbk->ctlr_done = ctlr_done; | ||
961 | + cbk->message = message; | ||
962 | + cbk->update_ssl = v3270_update_ssl; | ||
963 | + cbk->print = emit_print_signal; | ||
954 | 964 | ||
955 | 965 | ||
956 | // Reset timer | 966 | // Reset timer |