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 |