Commit e244e0adf0cd443fd3f789b003aa53ec9b3baa7a
1 parent
a07c8642
Exists in
master
and in
2 other branches
Adding callback for 'select-word' action.
Showing
6 changed files
with
128 additions
and
135 deletions
Show diff stats
configure.ac
src/core/session.c
| 1 | +/* SPDX-License-Identifier: LGPL-3.0-or-later */ | |
| 2 | + | |
| 1 | 3 | /* |
| 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 session.c e possui - linhas de código. | |
| 4 | + * Copyright (C) 2008 Banco do Brasil S.A. | |
| 22 | 5 | * |
| 23 | - * Contatos: | |
| 6 | + * This program is free software: you can redistribute it and/or modify | |
| 7 | + * it under the terms of the GNU Lesser General Public License as published | |
| 8 | + * by the Free Software Foundation, either version 3 of the License, or | |
| 9 | + * (at your option) any later version. | |
| 24 | 10 | * |
| 25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
| 26 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
| 11 | + * This program is distributed in the hope that it will be useful, | |
| 12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | + * GNU General Public License for more details. | |
| 27 | 15 | * |
| 16 | + * You should have received a copy of the GNU Lesser General Public License | |
| 17 | + * along with this program. If not, see <https://www.gnu.org/licenses/>. | |
| 28 | 18 | */ |
| 29 | 19 | |
| 30 | 20 | #ifndef ANDROID |
| ... | ... | @@ -154,13 +144,16 @@ void lib3270_session_free(H3270 *h) { |
| 154 | 144 | |
| 155 | 145 | } |
| 156 | 146 | |
| 157 | -static void update_char(H3270 GNUC_UNUSED(*session), int GNUC_UNUSED(addr), unsigned char GNUC_UNUSED(chr), unsigned short GNUC_UNUSED(attr), unsigned char GNUC_UNUSED(cursor)) { | |
| 147 | +static void nop_void() { | |
| 158 | 148 | } |
| 159 | 149 | |
| 160 | -static void nop_char(H3270 GNUC_UNUSED(*session), unsigned char GNUC_UNUSED(chr)) { | |
| 150 | +static int default_action(H3270 GNUC_UNUSED(*hSession), const char GNUC_UNUSED(*name)) { | |
| 151 | + return errno = ENOENT; | |
| 161 | 152 | } |
| 162 | 153 | |
| 163 | -static void nop(H3270 GNUC_UNUSED(*session)) { | |
| 154 | + | |
| 155 | +/* | |
| 156 | +static void update_char(H3270 GNUC_UNUSED(*session), int GNUC_UNUSED(addr), unsigned char GNUC_UNUSED(chr), unsigned short GNUC_UNUSED(attr), unsigned char GNUC_UNUSED(cursor)) { | |
| 164 | 157 | } |
| 165 | 158 | |
| 166 | 159 | static void update_model(H3270 GNUC_UNUSED(*session), const char GNUC_UNUSED(*name), int GNUC_UNUSED(model), int GNUC_UNUSED(rows), int GNUC_UNUSED(cols)) { |
| ... | ... | @@ -181,6 +174,20 @@ static void update_selection(H3270 GNUC_UNUSED(*session), int GNUC_UNUSED(start) |
| 181 | 174 | static void set_cursor(H3270 GNUC_UNUSED(*session), LIB3270_POINTER GNUC_UNUSED(id)) { |
| 182 | 175 | } |
| 183 | 176 | |
| 177 | +static void update_ssl(H3270 GNUC_UNUSED(*session), LIB3270_SSL_STATE GNUC_UNUSED(state)) { | |
| 178 | +} | |
| 179 | + | |
| 180 | +static void set_timer(H3270 GNUC_UNUSED(*session), unsigned char GNUC_UNUSED(on)) { | |
| 181 | +} | |
| 182 | + | |
| 183 | +static void default_update_luname(H3270 GNUC_UNUSED(*session), const char GNUC_UNUSED(*name)) { | |
| 184 | +} | |
| 185 | + | |
| 186 | +static void default_update_url(H3270 GNUC_UNUSED(*session), const char GNUC_UNUSED(*url)) { | |
| 187 | +} | |
| 188 | + | |
| 189 | +*/ | |
| 190 | + | |
| 184 | 191 | static int print(H3270 *session, LIB3270_CONTENT_OPTION GNUC_UNUSED(mode)) { |
| 185 | 192 | lib3270_write_log(session, "print", "%s", "Printing is unavailable"); |
| 186 | 193 | lib3270_popup_dialog(session, LIB3270_NOTIFY_WARNING, _( "Can't print" ), _( "Unable to print" ), "%s", strerror(ENOTSUP)); |
| ... | ... | @@ -199,60 +206,46 @@ static int load(H3270 *session, const char GNUC_UNUSED(*filename)) { |
| 199 | 206 | return errno = ENOTSUP; |
| 200 | 207 | } |
| 201 | 208 | |
| 202 | -static void update_ssl(H3270 GNUC_UNUSED(*session), LIB3270_SSL_STATE GNUC_UNUSED(state)) { | |
| 203 | -} | |
| 204 | - | |
| 205 | -static void set_timer(H3270 GNUC_UNUSED(*session), unsigned char GNUC_UNUSED(on)) { | |
| 206 | -} | |
| 207 | - | |
| 208 | 209 | static void screen_disp(H3270 *session) { |
| 209 | 210 | CHECK_SESSION_HANDLE(session); |
| 210 | 211 | screen_update(session,0,session->view.rows*session->view.cols); |
| 211 | 212 | } |
| 212 | 213 | |
| 213 | -static void nop_int(H3270 GNUC_UNUSED(*session), int GNUC_UNUSED(width)) { | |
| 214 | - return; | |
| 215 | -} | |
| 216 | - | |
| 217 | -static void default_update_luname(H3270 GNUC_UNUSED(*session), const char GNUC_UNUSED(*name)) { | |
| 218 | -} | |
| 219 | - | |
| 220 | -static void default_update_url(H3270 GNUC_UNUSED(*session), const char GNUC_UNUSED(*url)) { | |
| 221 | -} | |
| 222 | - | |
| 223 | -static int default_action(H3270 GNUC_UNUSED(*hSession), const char GNUC_UNUSED(*name)) { | |
| 224 | - return ENOENT; | |
| 225 | -} | |
| 226 | - | |
| 227 | 214 | void lib3270_reset_callbacks(H3270 *hSession) { |
| 228 | 215 | // Default calls |
| 229 | 216 | memset(&hSession->cbk,0,sizeof(hSession->cbk)); |
| 230 | 217 | |
| 231 | - hSession->cbk.update = update_char; | |
| 232 | - hSession->cbk.update_model = update_model; | |
| 233 | - hSession->cbk.update_cursor = update_cursor; | |
| 234 | - hSession->cbk.set_selection = nop_char; | |
| 235 | - hSession->cbk.ctlr_done = nop; | |
| 236 | - hSession->cbk.changed = changed; | |
| 218 | + #pragma GCC diagnostic push | |
| 219 | + #pragma GCC diagnostic ignored "-Wincompatible-pointer-types" | |
| 220 | + | |
| 221 | + hSession->cbk.update = nop_void; | |
| 222 | + hSession->cbk.update_model = nop_void; | |
| 223 | + hSession->cbk.update_cursor = nop_void; | |
| 224 | + hSession->cbk.set_selection = nop_void; | |
| 225 | + hSession->cbk.ctlr_done = nop_void; | |
| 226 | + hSession->cbk.changed = nop_void; | |
| 237 | 227 | hSession->cbk.erase = screen_disp; |
| 238 | - hSession->cbk.suspend = nop; | |
| 228 | + hSession->cbk.suspend = nop_void; | |
| 239 | 229 | hSession->cbk.resume = screen_disp; |
| 240 | - hSession->cbk.update_oia = update_oia; | |
| 241 | - hSession->cbk.update_selection = update_selection; | |
| 242 | - hSession->cbk.cursor = set_cursor; | |
| 243 | - hSession->cbk.update_ssl = update_ssl; | |
| 230 | + hSession->cbk.update_oia = nop_void; | |
| 231 | + hSession->cbk.update_selection = nop_void; | |
| 232 | + hSession->cbk.cursor = nop_void; | |
| 233 | + hSession->cbk.update_ssl = nop_void; | |
| 244 | 234 | hSession->cbk.display = screen_disp; |
| 245 | - hSession->cbk.set_width = nop_int; | |
| 246 | - hSession->cbk.update_status = (void (*)(H3270 *, LIB3270_MESSAGE)) nop_int; | |
| 247 | - hSession->cbk.autostart = nop; | |
| 248 | - hSession->cbk.set_timer = set_timer; | |
| 235 | + hSession->cbk.set_width = nop_void; | |
| 236 | + hSession->cbk.update_status = nop_void; | |
| 237 | + hSession->cbk.autostart = nop_void; | |
| 238 | + hSession->cbk.set_timer = nop_void; | |
| 249 | 239 | hSession->cbk.print = print; |
| 250 | 240 | hSession->cbk.save = save; |
| 251 | 241 | hSession->cbk.load = load; |
| 252 | - hSession->cbk.update_luname = default_update_luname; | |
| 253 | - hSession->cbk.update_url = default_update_url; | |
| 242 | + hSession->cbk.update_luname = nop_void; | |
| 243 | + hSession->cbk.update_url = nop_void; | |
| 254 | 244 | hSession->cbk.action = default_action; |
| 255 | 245 | hSession->cbk.reconnect = lib3270_reconnect; |
| 246 | + hSession->cbk.word_selected = nop_void; | |
| 247 | + | |
| 248 | + #pragma GCC diagnostic pop | |
| 256 | 249 | |
| 257 | 250 | lib3270_set_popup_handler(hSession, NULL); |
| 258 | 251 | lib3270_set_log_handler(hSession,NULL,NULL); |
| ... | ... | @@ -468,7 +461,7 @@ LIB3270_EXPORT char lib3270_get_session_id(H3270 *hSession) { |
| 468 | 461 | |
| 469 | 462 | struct lib3270_session_callbacks * lib3270_get_session_callbacks(H3270 *hSession, const char *revision, unsigned short sz) { |
| 470 | 463 | |
| 471 | - #define REQUIRED_REVISION "20210801" | |
| 464 | + #define REQUIRED_REVISION "20211118" | |
| 472 | 465 | |
| 473 | 466 | if(revision && strcasecmp(revision,REQUIRED_REVISION) < 0) { |
| 474 | 467 | errno = EINVAL; | ... | ... |
src/include/lib3270/selection.h
| 1 | +/* SPDX-License-Identifier: LGPL-3.0-or-later */ | |
| 2 | + | |
| 1 | 3 | /* |
| 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. | |
| 4 | + * Copyright (C) 2008 Banco do Brasil S.A. | |
| 16 | 5 | * |
| 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 | |
| 6 | + * This program is free software: you can redistribute it and/or modify | |
| 7 | + * it under the terms of the GNU Lesser General Public License as published | |
| 8 | + * by the Free Software Foundation, either version 3 of the License, or | |
| 9 | + * (at your option) any later version. | |
| 20 | 10 | * |
| 21 | - * Este programa está nomeado como selection.h e possui - linhas de código. | |
| 22 | - * | |
| 23 | - * Contatos: | |
| 24 | - * | |
| 25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
| 26 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
| 11 | + * This program is distributed in the hope that it will be useful, | |
| 12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | + * GNU General Public License for more details. | |
| 27 | 15 | * |
| 16 | + * You should have received a copy of the GNU Lesser General Public License | |
| 17 | + * along with this program. If not, see <https://www.gnu.org/licenses/>. | |
| 28 | 18 | */ |
| 29 | 19 | |
| 30 | 20 | /** |
| ... | ... | @@ -75,11 +65,26 @@ typedef struct _lib3270_selection { |
| 75 | 65 | |
| 76 | 66 | LIB3270_EXPORT int lib3270_unselect(H3270 *session); |
| 77 | 67 | LIB3270_EXPORT void lib3270_select_to(H3270 *session, int baddr); |
| 78 | -LIB3270_EXPORT int lib3270_select_word_at(H3270 *session, int baddr); | |
| 79 | -LIB3270_EXPORT int lib3270_select_word(H3270 *session); | |
| 80 | -LIB3270_EXPORT int lib3270_select_field_at(H3270 *session, int baddr); | |
| 81 | -LIB3270_EXPORT int lib3270_select_field(H3270 *session); | |
| 82 | -LIB3270_EXPORT int lib3270_select_all(H3270 *session); | |
| 68 | + | |
| 69 | +/** | |
| 70 | + * @brief Select word at position. | |
| 71 | + * | |
| 72 | + * @param hSession Session handle. | |
| 73 | + * @param baddr position. | |
| 74 | + * | |
| 75 | + * @return 0 if ok, non zero if failed | |
| 76 | + * | |
| 77 | + * @retval 0 The word was selected. | |
| 78 | + * @retval EINVAL baddr is out of the screen. | |
| 79 | + * @retval ENOTCONN The terminal is offline. | |
| 80 | + * | |
| 81 | + */ | |
| 82 | + LIB3270_EXPORT int lib3270_select_word_at(H3270 *session, int baddr); | |
| 83 | + | |
| 84 | + LIB3270_EXPORT int lib3270_select_word(H3270 *session); | |
| 85 | + LIB3270_EXPORT int lib3270_select_field_at(H3270 *session, int baddr); | |
| 86 | + LIB3270_EXPORT int lib3270_select_field(H3270 *session); | |
| 87 | + LIB3270_EXPORT int lib3270_select_all(H3270 *session); | |
| 83 | 88 | |
| 84 | 89 | /** |
| 85 | 90 | * @brief Get selection options. |
| ... | ... | @@ -103,7 +108,7 @@ typedef enum _LIB3270_SELECTION_OPTIONS { |
| 103 | 108 | * |
| 104 | 109 | * @see lib3270_paste_next. |
| 105 | 110 | * |
| 106 | - * @return 0 if suceeded, negative if faile, > 0 if there's more data. | |
| 111 | + * @return 0 if suceeded, negative if fails, > 0 if there's more data. | |
| 107 | 112 | * |
| 108 | 113 | * @retval 0 The entire string was pasted. |
| 109 | 114 | * @retval -EINVAL Invalid argument. | ... | ... |
src/include/lib3270/session.h
src/selection/actions.c
| 1 | +/* SPDX-License-Identifier: LGPL-3.0-or-later */ | |
| 2 | + | |
| 1 | 3 | /* |
| 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 | |
| 4 | + * Copyright (C) 2008 Banco do Brasil S.A. | |
| 20 | 5 | * |
| 21 | - * Este programa está nomeado como - e possui - linhas de código. | |
| 6 | + * This program is free software: you can redistribute it and/or modify | |
| 7 | + * it under the terms of the GNU Lesser General Public License as published | |
| 8 | + * by the Free Software Foundation, either version 3 of the License, or | |
| 9 | + * (at your option) any later version. | |
| 22 | 10 | * |
| 23 | - * Contatos: | |
| 24 | - * | |
| 25 | - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | |
| 26 | - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | |
| 11 | + * This program is distributed in the hope that it will be useful, | |
| 12 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | + * GNU General Public License for more details. | |
| 27 | 15 | * |
| 16 | + * You should have received a copy of the GNU Lesser General Public License | |
| 17 | + * along with this program. If not, see <https://www.gnu.org/licenses/>. | |
| 28 | 18 | */ |
| 29 | 19 | |
| 30 | 20 | #include <internals.h> |
| ... | ... | @@ -107,14 +97,20 @@ LIB3270_EXPORT int lib3270_select_word(H3270 *session) { |
| 107 | 97 | } |
| 108 | 98 | |
| 109 | 99 | LIB3270_EXPORT int lib3270_select_word_at(H3270 *session, int baddr) { |
| 110 | - int start, end; | |
| 100 | + int start, end, rc; | |
| 111 | 101 | |
| 112 | - if(lib3270_get_word_bounds(session,baddr,&start,&end)) | |
| 113 | - return -1; | |
| 102 | + rc = lib3270_get_word_bounds(session,baddr,&start,&end); | |
| 103 | + if(rc) | |
| 104 | + return rc; | |
| 114 | 105 | |
| 115 | 106 | trace("%s: baddr=%d start=%d end=%d",__FUNCTION__,baddr,start,end); |
| 116 | 107 | |
| 117 | - do_select(session,start,end,0); | |
| 108 | + rc = do_select(session,start,end,0); | |
| 109 | + if(rc) | |
| 110 | + return rc; | |
| 111 | + | |
| 112 | + // Notify word selected to allow testing for URL selection. | |
| 113 | + session->cbk.word_selected(session,start,end); | |
| 118 | 114 | |
| 119 | 115 | return 0; |
| 120 | 116 | } | ... | ... |
win/install-cross.sh
| ... | ... | @@ -19,22 +19,20 @@ install_packages() { |
| 19 | 19 | | xargs sudo zypper --non-interactive --verbose in |
| 20 | 20 | |
| 21 | 21 | |
| 22 | + ## Instala apicativos e temas necessários | |
| 23 | + sudo zypper --non-interactive in \ | |
| 24 | + gettext-tools \ | |
| 25 | + automake | |
| 26 | + | |
| 27 | + while read FILE | |
| 28 | + do | |
| 29 | + sudo zypper --non-interactive in ${1}-${FILE} | |
| 30 | + done < ${TEMPFILE} | |
| 31 | + | |
| 32 | + rm -f ${TEMPFILE} | |
| 33 | + | |
| 22 | 34 | } |
| 23 | 35 | |
| 24 | -## Instala apicativos e temas necessários | |
| 25 | -#sudo zypper --non-interactive in \ | |
| 26 | -# gettext-tools \ | |
| 27 | -# automake | |
| 28 | -# | |
| 29 | -#while read FILE | |
| 30 | -#do | |
| 31 | -# sudo zypper --non-interactive in ${1}-${FILE} | |
| 32 | -#done < ${TEMPFILE} | |
| 33 | -# | |
| 34 | -#rm -f ${TEMPFILE} | |
| 35 | -# | |
| 36 | -#} | |
| 37 | -# | |
| 38 | 36 | |
| 39 | 37 | if [ -z ${1} ]; then |
| 40 | 38 | echo "Use ${0} --32 for 32 bits cross-compiler" | ... | ... |