Commit c9297c1affada8902df7b76329ebc9dc93d0591d
Committed by
GitHub
Exists in
master
and in
3 other branches
Merge pull request #8 from PerryWerneck/develop
Updating to latest develop code.
Showing
23 changed files
with
733 additions
and
266 deletions
Show diff stats
... | ... | @@ -0,0 +1,18 @@ |
1 | +# Set to true to add reviewers to pull requests | |
2 | +addReviewers: true | |
3 | + | |
4 | +# Set to true to add assignees to pull requests | |
5 | +addAssignees: true | |
6 | + | |
7 | +# A list of reviewers to be added to pull requests (GitHub user name) | |
8 | +reviewers: | |
9 | + | |
10 | +# A list of keywords to be skipped the process that add reviewers if pull requests include it | |
11 | +skipKeywords: | |
12 | + - wip | |
13 | + - work in progress | |
14 | + | |
15 | +# A number of reviewers added to the pull request | |
16 | +# Set 0 to add all the reviewers (default: 0) | |
17 | +numberOfReviewers: 0 | |
18 | + | ... | ... |
README.md
... | ... | @@ -19,7 +19,9 @@ Building for Linux |
19 | 19 | |
20 | 20 | 1. Get lib3270 sources from git |
21 | 21 | |
22 | - * git clone http://softwarepublico.gov.br/gitlab/pw3270/lib3270.git ./lib3270 | |
22 | + ```shell | |
23 | + git clone http://softwarepublico.gov.br/gitlab/pw3270/lib3270.git ./lib3270 | |
24 | + ``` | |
23 | 25 | |
24 | 26 | 2. Install the required libraries |
25 | 27 | |
... | ... | @@ -39,9 +41,11 @@ Building for Linux |
39 | 41 | |
40 | 42 | 3. Configure and build |
41 | 43 | |
42 | - * ./autogen.sh | |
43 | - * make clean | |
44 | - * make Debug | |
44 | + ```shell | |
45 | + ./autogen.sh | |
46 | + make clean | |
47 | + make all | |
48 | + ``` | |
45 | 49 | |
46 | 50 | |
47 | 51 | Cross-compiling for Windows |
... | ... | @@ -52,29 +56,37 @@ Cross-compiling on SuSE Linux (Native or WSL) |
52 | 56 | |
53 | 57 | 1. First add the MinGW Repositories for your SuSE version from: |
54 | 58 | |
55 | - * 32 bits: https://build.opensuse.org/project/show/windows:mingw:win32 | |
56 | - * 64 bits: https://build.opensuse.org/project/show/windows:mingw:win64 | |
59 | + ```shell | |
60 | + sudo zypper ar obs://windows:mingw:win32 mingw32 | |
61 | + sudo zypper ar obs://windows:mingw:win64 mingw64 | |
62 | + sudo zypper ref | |
63 | + ``` | |
57 | 64 | |
58 | 65 | 2. Get lib3270 sources from git |
59 | 66 | |
60 | - * git clone https://github.com/PerryWerneck/lib3270.git ./lib3270 | |
67 | + ```shell | |
68 | + git clone https://github.com/PerryWerneck/lib3270.git ./lib3270 | |
69 | + ``` | |
61 | 70 | |
62 | 71 | 3. Install cross compilers |
63 | 72 | |
64 | - * ./lib3270/win/install-cross.sh --32 (for 32 bits) | |
65 | - * ./lib3270/win/install-cross.sh --64 (for 64 bits) | |
66 | - * ./lib3270/win/install-cross.sh --all (for 32 and 64 bits) | |
73 | + ```shell | |
74 | + ./lib3270/win/install-cross.sh --all (for 32 and 64 bits) | |
75 | + ``` | |
67 | 76 | |
68 | 77 | 3. Configure build |
69 | 78 | |
70 | - * ./lib3270/win/win-configure.sh --32 (for 32 bits) | |
71 | - * ./lib3270/win/win-configure.sh --64 (for 64 bits) | |
79 | + ```shell | |
80 | + ./lib3270/win/win-configure.sh --64 (for 64 bits) | |
81 | + ``` | |
72 | 82 | |
73 | 83 | 4. Build |
74 | 84 | |
75 | - * cd lib3270 | |
76 | - * make clean | |
77 | - * make all | |
85 | + ```shell | |
86 | + cd lib3270 | |
87 | + make clean | |
88 | + make all | |
89 | + ``` | |
78 | 90 | |
79 | 91 | Compiling for Windows (With MSYS2) |
80 | 92 | ---------------------------------- |
... | ... | @@ -87,20 +99,62 @@ Compiling for Windows (With MSYS2) |
87 | 99 | |
88 | 100 | 2. Install devel packages |
89 | 101 | |
90 | - * pacman -S --needed mingw-w64-x86_64-gcc automake autoconf make git openssl pkg-config | |
102 | + ```shell | |
103 | + pacman -S --needed mingw-w64-x86_64-gcc automake autoconf make git openssl pkg-config | |
104 | + ``` | |
91 | 105 | |
92 | 106 | 3. Get lib3270 sources from git using the mingw shell |
93 | 107 | |
94 | - * git clone https://github.com/PerryWerneck/lib3270.git ./lib3270 | |
108 | + ```shell | |
109 | + git clone https://github.com/PerryWerneck/lib3270.git ./lib3270 | |
110 | + ``` | |
95 | 111 | |
96 | 112 | 4. Build library using the mingw shell |
97 | 113 | |
98 | - * cd lib3270 | |
99 | - * ./autogen.sh | |
100 | - * make all | |
114 | + ```shell | |
115 | + cd lib3270 | |
116 | + ./autogen.sh | |
117 | + make all | |
118 | + ``` | |
101 | 119 | |
102 | 120 | 5. Install |
103 | 121 | |
104 | - * make install | |
122 | + ```shell | |
123 | + make install | |
124 | + ``` | |
105 | 125 | |
106 | 126 | |
127 | +Building for macOS (using homebrew) | |
128 | +=================================== | |
129 | + | |
130 | +1. Install [homebrew](https://brew.sh/) | |
131 | + | |
132 | +2. Install dependencies | |
133 | + | |
134 | + ```shell | |
135 | + $ brew install automake binutils coreutils curl gettext libtool openldap openssl pkgconfig | |
136 | + ``` | |
137 | + | |
138 | +3. Use [open-keg](https://gist.github.com/andrebreves/5f36e78575e20162ed0a62bd27c4bcea) to make keg-only dependencies available during build process | |
139 | + | |
140 | + ```shell | |
141 | + $ open-keg curl openldap openssl | |
142 | + ``` | |
143 | + | |
144 | +4. Configure, build and install (inside the [open-keg](https://gist.github.com/andrebreves/5f36e78575e20162ed0a62bd27c4bcea) shell opened above) | |
145 | + | |
146 | + ```shell | |
147 | + $ ./autogen.sh --prefix="$(brew --cellar)/lib3270/5.3" | |
148 | + $ make all && make install | |
149 | + $ brew link lib3270 | |
150 | + ``` | |
151 | + | |
152 | +Uninstalling | |
153 | +------------ | |
154 | + | |
155 | +1. To uninstall | |
156 | + | |
157 | + ```shell | |
158 | + $ brew unlink lib3270 | |
159 | + $ rm -fr "$(brew --cellar)/lib3270" | |
160 | + ``` | ... | ... |
configure.ac
... | ... | @@ -187,9 +187,9 @@ app_rls_minor=$(echo $app_cv_release.0.0 | cut -d. -f2) |
187 | 187 | |
188 | 188 | AC_DEFINE_UNQUOTED(PACKAGE_MAJOR_RELEASE, $app_rls_major) |
189 | 189 | AC_DEFINE_UNQUOTED(PACKAGE_MINOR_RELEASE, $app_rls_minor) |
190 | -AC_DEFINE_UNQUOTED(PACKAGE_RELEASE, `date +%y%j`) | |
190 | +AC_DEFINE_UNQUOTED(PACKAGE_RELEASE, "$app_cv_release") | |
191 | 191 | |
192 | -AC_SUBST(PACKAGE_RELEASE,$app_cv_release) | |
192 | +AC_SUBST(PACKAGE_RELEASE,"$app_cv_release") | |
193 | 193 | AC_SUBST(PACKAGE_MAJOR_RELEASE,$app_rls_major) |
194 | 194 | AC_SUBST(PACKAGE_MINOR_RELEASE,$app_rls_minor) |
195 | 195 | |
... | ... | @@ -201,12 +201,12 @@ rpq_revision=`$date +"%Y%m%d"` |
201 | 201 | sccs_date=`$date +%Y/%m/%d` |
202 | 202 | sccs_user=$USER |
203 | 203 | |
204 | -AC_SUBST(RPQ_BUILD_DATE,$rpq_build_date) | |
205 | -AC_SUBST(RPQ_TIMESTAMP,$rpq_timestamp) | |
206 | -AC_SUBST(RPQ_REVISION,$rpq_revision) | |
204 | +AC_DEFINE_UNQUOTED(RPQ_BUILD_DATE,"$rpq_build_date") | |
205 | +AC_DEFINE_UNQUOTED(RPQ_TIMESTAMP_VALUE,"$rpq_timestamp") | |
206 | +AC_DEFINE_UNQUOTED(RPQ_REVISION,"$rpq_revision") | |
207 | 207 | |
208 | -AC_SUBST(SCCS_USER,$USER) | |
209 | -AC_SUBST(SCCS_DATE,$sccs_date) | |
208 | +AC_DEFINE_UNQUOTED(SCCS_USER,"$USER") | |
209 | +AC_DEFINE_UNQUOTED(SCCS_DATE,"$sccs_date") | |
210 | 210 | |
211 | 211 | dnl --------------------------------------------------------------------------- |
212 | 212 | dnl Check for libintl |
... | ... | @@ -665,8 +665,6 @@ AC_SUBST(INSTALL_PACKAGES) |
665 | 665 | AC_CONFIG_FILES(Makefile) |
666 | 666 | AC_CONFIG_FILES(locale/Makefile) |
667 | 667 | |
668 | -AC_CONFIG_FILES(src/core/version.c) | |
669 | - | |
670 | 668 | AC_CONFIG_FILES(sdk/lib3270.pc) |
671 | 669 | AC_CONFIG_FILES(sdk/lib3270-static.pc) |
672 | 670 | ... | ... |
locale/pt_BR.po
... | ... | @@ -5,8 +5,8 @@ msgid "" |
5 | 5 | msgstr "" |
6 | 6 | "Project-Id-Version: pw3270 5.0\n" |
7 | 7 | "Report-Msgid-Bugs-To: \n" |
8 | -"POT-Creation-Date: 2020-04-04 01:39-0300\n" | |
9 | -"PO-Revision-Date: 2020-02-11 09:49-0300\n" | |
8 | +"POT-Creation-Date: 2020-05-08 00:49-0300\n" | |
9 | +"PO-Revision-Date: 2020-05-08 00:52-0300\n" | |
10 | 10 | "Last-Translator: Perry Werneck <perry.werneck@gmail.com>\n" |
11 | 11 | "Language-Team: Português <>\n" |
12 | 12 | "Language: pt_BR\n" |
... | ... | @@ -16,7 +16,8 @@ msgstr "" |
16 | 16 | "X-Poedit-Language: Portuguese\n" |
17 | 17 | "X-Poedit-Country: BRAZIL\n" |
18 | 18 | "X-Poedit-SourceCharset: utf-8\n" |
19 | -"Plural-Forms: nplurals=2; plural=(n > 1);\n" | |
19 | +"Plural-Forms: nplurals=4; plural= (n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != " | |
20 | +"11) ? 2 : 3;\n" | |
20 | 21 | "X-Generator: Gtranslator 2.91.7\n" |
21 | 22 | |
22 | 23 | #: src/core/ctlr.c:187 |
... | ... | @@ -79,7 +80,7 @@ msgstr "Erro 3270" |
79 | 80 | msgid "3270 Warning" |
80 | 81 | msgstr "Alerta 3270" |
81 | 82 | |
82 | -#: src/core/actions/table.c:512 | |
83 | +#: src/core/actions/table.c:678 | |
83 | 84 | msgid "3270-style backspace" |
84 | 85 | msgstr "Backspace no estilo 3270" |
85 | 86 | |
... | ... | @@ -91,7 +92,7 @@ msgstr "" |
91 | 92 | "A CA certificate is invalid. Either it is not a CA or its extensions are not " |
92 | 93 | "consistent with the supplied purpose." |
93 | 94 | |
94 | -#: src/core/actions/table.c:526 | |
95 | +#: src/core/actions/table.c:692 | |
95 | 96 | msgid "ATTN key, per RFC 2355. Sends IP, regardless" |
96 | 97 | msgstr "Tecla ATTN, pela RFC 2355" |
97 | 98 | |
... | ... | @@ -136,7 +137,7 @@ msgstr "" |
136 | 137 | msgid "An invalid SEND or RECEIVE parameter was sent to the host." |
137 | 138 | msgstr "Um parametro de ENVIO/RECEBIMENTO inválido foi enviado para o host." |
138 | 139 | |
139 | -#: src/core/actions/table.c:525 | |
140 | +#: src/core/actions/table.c:691 | |
140 | 141 | msgid "Attn" |
141 | 142 | msgstr "Attn" |
142 | 143 | |
... | ... | @@ -178,11 +179,11 @@ msgstr "Reconecta automaticamente caso o servidor desconecte" |
178 | 179 | msgid "Awaiting chance to send an abort" |
179 | 180 | msgstr "Aguardando para enviar pedido de cancelamento" |
180 | 181 | |
181 | -#: src/core/actions/table.c:511 | |
182 | +#: src/core/actions/table.c:677 | |
182 | 183 | msgid "Back space" |
183 | 184 | msgstr "Back space" |
184 | 185 | |
185 | -#: src/core/actions/table.c:338 | |
186 | +#: src/core/actions/table.c:504 | |
186 | 187 | msgid "Backspaces the cursor until it hits the front of a word" |
187 | 188 | msgstr "Volta o cursor até que atinga o início de uma palavra" |
188 | 189 | |
... | ... | @@ -202,7 +203,7 @@ msgstr "Cursor piscante" |
202 | 203 | msgid "Bold" |
203 | 204 | msgstr "Negrito" |
204 | 205 | |
205 | -#: src/core/actions/table.c:539 | |
206 | +#: src/core/actions/table.c:705 | |
206 | 207 | msgid "Break" |
207 | 208 | msgstr "Break" |
208 | 209 | |
... | ... | @@ -258,7 +259,6 @@ msgid "Can't decode certificate revocation list" |
258 | 259 | msgstr "Não foi possível decodificar a lista de certificados revogados" |
259 | 260 | |
260 | 261 | #: src/ssl/linux/url.c:99 |
261 | -#, fuzzy | |
262 | 262 | msgid "Can't decode certificate revocation list got from LDAP server" |
263 | 263 | msgstr "" |
264 | 264 | "Não foi possível decodificar a lista de certificados revogados obtida na " |
... | ... | @@ -316,7 +316,7 @@ msgstr "Não foi possível setar o socket para o modo não blocante." |
316 | 316 | msgid "Can't start file transfer." |
317 | 317 | msgstr "Não foi possível iniciar transferência de arquivo." |
318 | 318 | |
319 | -#: src/ssl/negotiate.c:286 src/ssl/crl.c:165 | |
319 | +#: src/ssl/negotiate.c:298 src/ssl/crl.c:165 | |
320 | 320 | msgid "Can't verify." |
321 | 321 | msgstr "Não foi possível verificar" |
322 | 322 | |
... | ... | @@ -338,7 +338,7 @@ msgstr "" |
338 | 338 | msgid "Cant initialize the SSL context." |
339 | 339 | msgstr "Erro ao inicializar contexto de segurança" |
340 | 340 | |
341 | -#: src/ssl/negotiate.c:159 | |
341 | +#: src/ssl/negotiate.c:171 | |
342 | 342 | msgid "" |
343 | 343 | "Cant set the file descriptor for the input/output facility for the TLS/SSL " |
344 | 344 | "(encrypted) side of ssl." |
... | ... | @@ -374,15 +374,15 @@ msgstr "Falha na assinatura do certificado" |
374 | 374 | msgid "Change screen size on alternative screen" |
375 | 375 | msgstr "Mudar tamanho do terminal em tela alternativa" |
376 | 376 | |
377 | -#: src/core/actions/table.c:599 | |
377 | +#: src/core/actions/table.c:765 | |
378 | 378 | msgid "Charset table" |
379 | 379 | msgstr "Tabela de caracteres" |
380 | 380 | |
381 | -#: src/core/actions/table.c:422 | |
381 | +#: src/core/actions/table.c:588 | |
382 | 382 | msgid "Clear" |
383 | 383 | msgstr "Limpar" |
384 | 384 | |
385 | -#: src/core/actions/table.c:423 | |
385 | +#: src/core/actions/table.c:589 | |
386 | 386 | msgid "Clear AID key" |
387 | 387 | msgstr "Clear AID" |
388 | 388 | |
... | ... | @@ -407,7 +407,7 @@ msgstr "Conexão falhou" |
407 | 407 | msgid "Connection reset by peer" |
408 | 408 | msgstr "Conexão foi cancelada pelo servidor" |
409 | 409 | |
410 | -#: src/core/properties/signed.c:59 | |
410 | +#: src/core/properties/signed.c:101 | |
411 | 411 | msgid "Connection state" |
412 | 412 | msgstr "Estado da conexão" |
413 | 413 | |
... | ... | @@ -427,37 +427,37 @@ msgstr "Largura atua da tela em colunas" |
427 | 427 | msgid "Cursor address" |
428 | 428 | msgstr "Endereço do cursor" |
429 | 429 | |
430 | -#: src/core/actions/table.c:117 | |
430 | +#: src/core/actions/table.c:158 | |
431 | 431 | msgid "Cursor down 1 position" |
432 | 432 | msgstr "Move cursor uma posição para baixo" |
433 | 433 | |
434 | -#: src/core/actions/table.c:131 | |
434 | +#: src/core/actions/table.c:172 | |
435 | 435 | msgid "Cursor left 1 position" |
436 | 436 | msgstr "Move o cursor 1 posição para a esquerda" |
437 | 437 | |
438 | -#: src/core/actions/table.c:145 | |
438 | +#: src/core/actions/table.c:186 | |
439 | 439 | msgid "Cursor right 1 position" |
440 | 440 | msgstr "Move o cursor uma posição para a direita" |
441 | 441 | |
442 | -#: src/core/actions/table.c:159 | |
442 | +#: src/core/actions/table.c:200 | |
443 | 443 | msgid "Cursor to first field on next line or any lines after that" |
444 | 444 | msgstr "" |
445 | 445 | "Move o cursor para o primeiro campo da próxima linha ou qualquer linhas " |
446 | 446 | "depois dela" |
447 | 447 | |
448 | -#: src/core/actions/table.c:187 | |
448 | +#: src/core/actions/table.c:228 | |
449 | 449 | msgid "Cursor to next unprotected word" |
450 | 450 | msgstr "Move o cursor para a próxima palavra desprotegida" |
451 | 451 | |
452 | -#: src/core/actions/table.c:173 | |
452 | +#: src/core/actions/table.c:214 | |
453 | 453 | msgid "Cursor to previous word" |
454 | 454 | msgstr "Move o cursor para a palavra anterior" |
455 | 455 | |
456 | -#: src/core/actions/table.c:103 | |
456 | +#: src/core/actions/table.c:144 | |
457 | 457 | msgid "Cursor up 1 position" |
458 | 458 | msgstr "Cursor para cima 1 posição" |
459 | 459 | |
460 | -#: src/core/actions/table.c:484 | |
460 | +#: src/core/actions/table.c:650 | |
461 | 461 | msgid "DUP key" |
462 | 462 | msgstr "Tecla \"DUP\"" |
463 | 463 | |
... | ... | @@ -469,15 +469,15 @@ msgstr "Erro na conversão de dados" |
469 | 469 | msgid "Default host URL" |
470 | 470 | msgstr "URL parão para acesso ao host" |
471 | 471 | |
472 | -#: src/core/actions/table.c:469 | |
472 | +#: src/core/actions/table.c:635 | |
473 | 473 | msgid "Delete" |
474 | 474 | msgstr "Apagar" |
475 | 475 | |
476 | -#: src/core/actions/table.c:351 src/core/actions/table.c:352 | |
476 | +#: src/core/actions/table.c:517 src/core/actions/table.c:518 | |
477 | 477 | msgid "Delete field" |
478 | 478 | msgstr "Apagar campo" |
479 | 479 | |
480 | -#: src/core/actions/table.c:337 | |
480 | +#: src/core/actions/table.c:503 | |
481 | 481 | msgid "Delete word" |
482 | 482 | msgstr "Apaga palavra" |
483 | 483 | |
... | ... | @@ -489,7 +489,7 @@ msgstr "Descrição do estado de segurança atual" |
489 | 489 | msgid "Device type rejected" |
490 | 490 | msgstr "Tipo de dispositivo rejeitado" |
491 | 491 | |
492 | -#: src/core/actions/table.c:86 | |
492 | +#: src/core/actions/table.c:127 | |
493 | 493 | msgid "Disconnect from host" |
494 | 494 | msgstr "Desconecta do servidor" |
495 | 495 | |
... | ... | @@ -505,11 +505,11 @@ msgstr "Tabela de caracteres para a tela" |
505 | 505 | msgid "Display the cursor location in the OIA (the status line)" |
506 | 506 | msgstr "Mostra posição do cursor na lista de informações ao operador" |
507 | 507 | |
508 | -#: src/core/actions/table.c:116 | |
508 | +#: src/core/actions/table.c:157 | |
509 | 509 | msgid "Down" |
510 | 510 | msgstr "Descer" |
511 | 511 | |
512 | -#: src/core/actions/table.c:483 | |
512 | +#: src/core/actions/table.c:649 | |
513 | 513 | msgid "Dup" |
514 | 514 | msgstr "Dup" |
515 | 515 | |
... | ... | @@ -533,31 +533,31 @@ msgstr "Habilita trace da negociação de segurança" |
533 | 533 | msgid "Enable use of network keep alive" |
534 | 534 | msgstr "Habilita opção \"keep-alive\"" |
535 | 535 | |
536 | -#: src/core/actions/table.c:439 | |
536 | +#: src/core/actions/table.c:605 | |
537 | 537 | msgid "Enter" |
538 | 538 | msgstr "Enter" |
539 | 539 | |
540 | -#: src/core/actions/table.c:408 | |
540 | +#: src/core/actions/table.c:574 | |
541 | 541 | msgid "Erase" |
542 | 542 | msgstr "Apagar" |
543 | 543 | |
544 | -#: src/core/actions/table.c:380 | |
544 | +#: src/core/actions/table.c:546 | |
545 | 545 | msgid "Erase EOF" |
546 | 546 | msgstr "Erase EOF" |
547 | 547 | |
548 | -#: src/core/actions/table.c:394 | |
548 | +#: src/core/actions/table.c:560 | |
549 | 549 | msgid "Erase EOL" |
550 | 550 | msgstr "Erase EOL" |
551 | 551 | |
552 | -#: src/core/actions/table.c:381 | |
552 | +#: src/core/actions/table.c:547 | |
553 | 553 | msgid "Erase End Of Field" |
554 | 554 | msgstr "Apaga até o final do campo" |
555 | 555 | |
556 | -#: src/core/actions/table.c:395 | |
556 | +#: src/core/actions/table.c:561 | |
557 | 557 | msgid "Erase End Of Line" |
558 | 558 | msgstr "Apaga até o final da linha" |
559 | 559 | |
560 | -#: src/core/actions/table.c:366 | |
560 | +#: src/core/actions/table.c:532 | |
561 | 561 | msgid "Erase input" |
562 | 562 | msgstr "Apagar campos" |
563 | 563 | |
... | ... | @@ -576,7 +576,6 @@ msgid "Error \"%s\" writing to local file (rc=%d)" |
576 | 576 | msgstr "Erro \"%s\" gravando arquivo local (rc=%d)" |
577 | 577 | |
578 | 578 | #: src/ssl/linux/url.c:66 |
579 | -#, fuzzy | |
580 | 579 | msgid "Error getting certificate revocation list" |
581 | 580 | msgstr "Erro ao obter a lista de certificados revogados" |
582 | 581 | |
... | ... | @@ -596,11 +595,11 @@ msgstr "Erro ao ler ou gravar no host: Transferência cancelada" |
596 | 595 | msgid "Error writing file to host: file transfer canceled" |
597 | 596 | msgstr "Erro ao gravar arquivo no host, transferência cancelada" |
598 | 597 | |
599 | -#: src/core/actions/table.c:497 src/core/actions/table.c:498 | |
598 | +#: src/core/actions/table.c:663 src/core/actions/table.c:664 | |
600 | 599 | msgid "FM key" |
601 | 600 | msgstr "Tecla \"FM\"" |
602 | 601 | |
603 | -#: src/core/actions/table.c:277 | |
602 | +#: src/core/actions/table.c:443 | |
604 | 603 | msgid "Field end" |
605 | 604 | msgstr "Final do campo" |
606 | 605 | |
... | ... | @@ -616,7 +615,7 @@ msgstr "Transferência completa com registros segmentados" |
616 | 615 | msgid "File transfer is already active in this session." |
617 | 616 | msgstr "Transferência de arquivos já está ativa nesta sessão." |
618 | 617 | |
619 | -#: src/core/actions/table.c:291 | |
618 | +#: src/core/actions/table.c:457 | |
620 | 619 | msgid "First field" |
621 | 620 | msgstr "Primeiro campo" |
622 | 621 | |
... | ... | @@ -636,7 +635,7 @@ msgstr "Erro de formato no campo \"notAfter\" do certificado" |
636 | 635 | msgid "Format error in certificate's notBefore field" |
637 | 636 | msgstr "Erro de formato no campo \"notBefore\" do certificado" |
638 | 637 | |
639 | -#: src/core/properties/boolean.c:168 | |
638 | +#: src/core/properties/boolean.c:175 | |
640 | 639 | msgid "Formatted screen" |
641 | 640 | msgstr "Tela formatada" |
642 | 641 | |
... | ... | @@ -649,7 +648,7 @@ msgid "Got a bad formatted certificate revocation list from LDAP server" |
649 | 648 | msgstr "" |
650 | 649 | "Obtive lista de certificados revogados com formato inválido do servidor LDAP" |
651 | 650 | |
652 | -#: src/core/properties/boolean.c:147 | |
651 | +#: src/core/properties/boolean.c:154 | |
653 | 652 | msgid "Has selected area" |
654 | 653 | msgstr "Tem área selecionada" |
655 | 654 | |
... | ... | @@ -693,7 +692,15 @@ msgstr "IBM AS/400" |
693 | 692 | msgid "IBM S/390" |
694 | 693 | msgstr "IBM S/390" |
695 | 694 | |
696 | -#: src/core/properties/signed.c:73 | |
695 | +#: src/core/properties/signed.c:130 | |
696 | +msgid "ID of the maximum supported SSL protocol version" | |
697 | +msgstr "Identificador da maior versão de protocolo SSL suportada" | |
698 | + | |
699 | +#: src/core/properties/signed.c:122 | |
700 | +msgid "ID of the minimum supported SSL protocol version" | |
701 | +msgstr "Identificador da menor versão de protocolo SSL suportada" | |
702 | + | |
703 | +#: src/core/properties/signed.c:115 | |
697 | 704 | msgid "ID of the session security state" |
698 | 705 | msgstr "Identificação do estado de segurança da sessão" |
699 | 706 | |
... | ... | @@ -814,23 +821,23 @@ msgstr "Opção xxxxxxxx inválida: Transferência cancelada" |
814 | 821 | msgid "Invalid oversize" |
815 | 822 | msgstr "Valor inválido para 'oversize'" |
816 | 823 | |
817 | -#: src/core/properties/boolean.c:68 | |
824 | +#: src/core/properties/boolean.c:75 | |
818 | 825 | msgid "Is connection secure" |
819 | 826 | msgstr "A conexão é segura ?" |
820 | 827 | |
821 | -#: src/core/properties/boolean.c:161 | |
828 | +#: src/core/properties/boolean.c:168 | |
822 | 829 | msgid "Is starting (no first screen)?" |
823 | 830 | msgstr "Está iniciando (não recebeu a primeira tela)?" |
824 | 831 | |
825 | -#: src/core/properties/boolean.c:61 | |
832 | +#: src/core/properties/boolean.c:68 | |
826 | 833 | msgid "Is terminal connected" |
827 | 834 | msgstr "O terminal está conectado" |
828 | 835 | |
829 | -#: src/core/properties/boolean.c:140 | |
836 | +#: src/core/properties/boolean.c:147 | |
830 | 837 | msgid "Is terminal in the INITIAL_E state?" |
831 | 838 | msgstr "O terminal está no estad INITIAL_E?" |
832 | 839 | |
833 | -#: src/core/properties/boolean.c:54 | |
840 | +#: src/core/properties/boolean.c:61 | |
834 | 841 | msgid "Is terminal ready" |
835 | 842 | msgstr "O terminal está pronto" |
836 | 843 | |
... | ... | @@ -850,15 +857,15 @@ msgstr "Teclado está bloqueado" |
850 | 857 | msgid "Keyboard lock status" |
851 | 858 | msgstr "Estado de bloqueio do teclado" |
852 | 859 | |
853 | -#: src/core/properties/signed.c:66 | |
860 | +#: src/core/properties/signed.c:108 | |
854 | 861 | msgid "Latest program message" |
855 | 862 | msgstr "Última mensagem de programa" |
856 | 863 | |
857 | -#: src/core/actions/table.c:130 | |
864 | +#: src/core/actions/table.c:171 | |
858 | 865 | msgid "Left" |
859 | 866 | msgstr "Esquerda" |
860 | 867 | |
861 | -#: src/core/properties/boolean.c:175 | |
868 | +#: src/core/properties/boolean.c:182 | |
862 | 869 | msgid "Lock keyboard on operator error" |
863 | 870 | msgstr "Bloqueia teclado em caso de erro do operador" |
864 | 871 | |
... | ... | @@ -882,11 +889,43 @@ msgstr "Nome do modelo" |
882 | 889 | msgid "Monocase" |
883 | 890 | msgstr "Só Maiúsculas" |
884 | 891 | |
885 | -#: src/core/actions/table.c:278 | |
892 | +#: src/core/actions/table.c:328 | |
893 | +msgid "Move cursor down and select" | |
894 | +msgstr "Move cursor para baixo selecionando" | |
895 | + | |
896 | +#: src/core/actions/table.c:342 | |
897 | +msgid "Move cursor left and select" | |
898 | +msgstr "Move cursor para a esquerda selecionando" | |
899 | + | |
900 | +#: src/core/actions/table.c:356 | |
901 | +msgid "Move cursor rigth and select" | |
902 | +msgstr "Move cursor para a direita selecionando" | |
903 | + | |
904 | +#: src/core/actions/table.c:314 | |
905 | +msgid "Move cursor up and select" | |
906 | +msgstr "Move cursor para cima selecionando" | |
907 | + | |
908 | +#: src/core/actions/table.c:384 | |
909 | +msgid "Move selection down" | |
910 | +msgstr "Move seleção para baixo" | |
911 | + | |
912 | +#: src/core/actions/table.c:398 | |
913 | +msgid "Move selection left" | |
914 | +msgstr "Move seleção para a esquerda" | |
915 | + | |
916 | +#: src/core/actions/table.c:412 | |
917 | +msgid "Move selection right" | |
918 | +msgstr "Move seleção para a direita" | |
919 | + | |
920 | +#: src/core/actions/table.c:370 | |
921 | +msgid "Move selection up" | |
922 | +msgstr "Move seleção para cima" | |
923 | + | |
924 | +#: src/core/actions/table.c:444 | |
886 | 925 | msgid "Move the cursor to the first blank after the last nonblank in the field" |
887 | 926 | msgstr "Move o cursor para o primeiro branco após o último não branco no campo" |
888 | 927 | |
889 | -#: src/core/actions/table.c:292 | |
928 | +#: src/core/actions/table.c:458 | |
890 | 929 | msgid "Move to first unprotected field on screen" |
891 | 930 | msgstr "Move para o primeiro campo desprotegido" |
892 | 931 | |
... | ... | @@ -899,15 +938,15 @@ msgstr "Erro de rede" |
899 | 938 | msgid "Network keep alive" |
900 | 939 | msgstr "Manter rede ativa" |
901 | 940 | |
902 | -#: src/core/actions/table.c:158 | |
941 | +#: src/core/actions/table.c:199 | |
903 | 942 | msgid "New line" |
904 | 943 | msgstr "Nova linha" |
905 | 944 | |
906 | -#: src/core/actions/table.c:305 | |
945 | +#: src/core/actions/table.c:471 | |
907 | 946 | msgid "Next field" |
908 | 947 | msgstr "Próximo campo" |
909 | 948 | |
910 | -#: src/core/actions/table.c:186 | |
949 | +#: src/core/actions/table.c:227 | |
911 | 950 | msgid "Next word" |
912 | 951 | msgstr "Próxima palavra" |
913 | 952 | |
... | ... | @@ -931,11 +970,11 @@ msgstr "" |
931 | 970 | msgid "No transfer in progress" |
932 | 971 | msgstr "Nenhuma transferência em andamento" |
933 | 972 | |
934 | -#: src/core/properties/boolean.c:84 | |
973 | +#: src/core/properties/boolean.c:91 | |
935 | 974 | msgid "Non zero if the host is AS400." |
936 | 975 | msgstr "Diferente de zero se o host é AS400" |
937 | 976 | |
938 | -#: src/core/properties/boolean.c:76 | |
977 | +#: src/core/properties/boolean.c:83 | |
939 | 978 | msgid "Non zero if the host is TSO." |
940 | 979 | msgstr "Diferente de zero se o host é TSO" |
941 | 980 | |
... | ... | @@ -961,15 +1000,15 @@ msgstr "Outro (VM/CMS)" |
961 | 1000 | msgid "Out of memory" |
962 | 1001 | msgstr "Memória insuficiente" |
963 | 1002 | |
964 | -#: src/core/actions/table.c:200 | |
1003 | +#: src/core/actions/table.c:241 | |
965 | 1004 | msgid "Paste from file" |
966 | 1005 | msgstr "Colar de um arquivo" |
967 | 1006 | |
968 | -#: src/core/actions/table.c:201 | |
1007 | +#: src/core/actions/table.c:242 | |
969 | 1008 | msgid "Paste from text file" |
970 | 1009 | msgstr "Colar de um arquivo texto" |
971 | 1010 | |
972 | -#: src/core/actions/table.c:553 | |
1011 | +#: src/core/actions/table.c:719 | |
973 | 1012 | msgid "Paste next" |
974 | 1013 | msgstr "Colar próximo" |
975 | 1014 | |
... | ... | @@ -989,11 +1028,11 @@ msgstr "Especificação de arquivo PC incorreta: Transferência cancelada" |
989 | 1028 | msgid "Preferred protocol for CRL download" |
990 | 1029 | msgstr "Protocolo preferido para download da CRL" |
991 | 1030 | |
992 | -#: src/core/actions/table.c:319 | |
1031 | +#: src/core/actions/table.c:485 | |
993 | 1032 | msgid "Previous field" |
994 | 1033 | msgstr "Campo anterior" |
995 | 1034 | |
996 | -#: src/core/actions/table.c:172 | |
1035 | +#: src/core/actions/table.c:213 | |
997 | 1036 | msgid "Previous word" |
998 | 1037 | msgstr "Palavra anterior" |
999 | 1038 | |
... | ... | @@ -1073,11 +1112,11 @@ msgstr "RPQ: Não foi possível resolver '%s': %s" |
1073 | 1112 | msgid "RPQ: gethostbyname error" |
1074 | 1113 | msgstr "RPQ: Erro em gethostbyname" |
1075 | 1114 | |
1076 | -#: src/core/actions/table.c:72 | |
1115 | +#: src/core/actions/table.c:113 | |
1077 | 1116 | msgid "Reconnect to the same host" |
1078 | 1117 | msgstr "Reconecta ao mesmo servidor" |
1079 | 1118 | |
1080 | -#: src/core/actions/table.c:231 src/core/actions/table.c:232 | |
1119 | +#: src/core/actions/table.c:272 src/core/actions/table.c:273 | |
1081 | 1120 | msgid "Remove selection" |
1082 | 1121 | msgstr "Remover seleção" |
1083 | 1122 | |
... | ... | @@ -1089,11 +1128,11 @@ msgstr "Requisição falhou" |
1089 | 1128 | msgid "Required host storage unavailable: file transfer canceled" |
1090 | 1129 | msgstr "Armazenamento necessário indisponível: Transferência cancelada" |
1091 | 1130 | |
1092 | -#: src/core/actions/table.c:245 src/core/actions/table.c:246 | |
1131 | +#: src/core/actions/table.c:286 src/core/actions/table.c:287 | |
1093 | 1132 | msgid "Reselect" |
1094 | 1133 | msgstr "Reselecionar" |
1095 | 1134 | |
1096 | -#: src/core/actions/table.c:454 | |
1135 | +#: src/core/actions/table.c:620 | |
1097 | 1136 | msgid "Reset" |
1098 | 1137 | msgstr "Reset" |
1099 | 1138 | |
... | ... | @@ -1101,7 +1140,7 @@ msgstr "Reset" |
1101 | 1140 | msgid "Resize on alternate screen" |
1102 | 1141 | msgstr "Mudar tamanho do terminal em tela alternativa" |
1103 | 1142 | |
1104 | -#: src/core/actions/table.c:144 | |
1143 | +#: src/core/actions/table.c:185 | |
1105 | 1144 | msgid "Right" |
1106 | 1145 | msgstr "Direita" |
1107 | 1146 | |
... | ... | @@ -1113,7 +1152,7 @@ msgstr "" |
1113 | 1152 | "SPACE can be specified in units of TRACKS, CYLINDERS, or AVBLOCK, and only " |
1114 | 1153 | "one option can be used." |
1115 | 1154 | |
1116 | -#: src/ssl/negotiate.c:192 | |
1155 | +#: src/ssl/negotiate.c:204 | |
1117 | 1156 | msgid "SSL Connect failed" |
1118 | 1157 | msgstr "Conexão SSL falhou" |
1119 | 1158 | |
... | ... | @@ -1125,7 +1164,7 @@ msgstr "Erro SSL" |
1125 | 1164 | msgid "SSL Read error" |
1126 | 1165 | msgstr "Erro de leitura SSL" |
1127 | 1166 | |
1128 | -#: src/ssl/negotiate.c:158 | |
1167 | +#: src/ssl/negotiate.c:170 | |
1129 | 1168 | msgid "SSL negotiation failed" |
1130 | 1169 | msgstr "Negociação SSL falhou" |
1131 | 1170 | |
... | ... | @@ -1158,8 +1197,8 @@ msgstr "Pesquisa não produziu nenhum valor" |
1158 | 1197 | msgid "Secure connection was successful." |
1159 | 1198 | msgstr "Conexão segura efetuada com sucesso." |
1160 | 1199 | |
1161 | -#: src/ssl/negotiate.c:107 src/ssl/negotiate.c:157 src/ssl/negotiate.c:191 | |
1162 | -#: src/ssl/negotiate.c:285 src/ssl/negotiate.c:307 src/ssl/negotiate.c:328 | |
1200 | +#: src/ssl/negotiate.c:107 src/ssl/negotiate.c:169 src/ssl/negotiate.c:203 | |
1201 | +#: src/ssl/negotiate.c:297 src/ssl/negotiate.c:319 src/ssl/negotiate.c:340 | |
1163 | 1202 | #: src/ssl/crl.c:164 src/ssl/linux/url.c:65 src/ssl/linux/url.c:80 |
1164 | 1203 | #: src/ssl/linux/url.c:98 src/ssl/linux/url.c:115 src/ssl/linux/ldap.c:100 |
1165 | 1204 | #: src/ssl/linux/ldap.c:113 src/ssl/linux/ldap.c:134 src/ssl/linux/ldap.c:145 |
... | ... | @@ -1170,15 +1209,15 @@ msgstr "Conexão segura efetuada com sucesso." |
1170 | 1209 | msgid "Security error" |
1171 | 1210 | msgstr "Erro de segurança" |
1172 | 1211 | |
1173 | -#: src/ssl/negotiate.c:332 | |
1212 | +#: src/ssl/negotiate.c:344 | |
1174 | 1213 | msgid "Security warning" |
1175 | 1214 | msgstr "Alerta de segurança" |
1176 | 1215 | |
1177 | -#: src/core/actions/table.c:263 | |
1216 | +#: src/core/actions/table.c:429 | |
1178 | 1217 | msgid "Select Field" |
1179 | 1218 | msgstr "Selecionar campo" |
1180 | 1219 | |
1181 | -#: src/core/actions/table.c:217 | |
1220 | +#: src/core/actions/table.c:258 | |
1182 | 1221 | msgid "Select all" |
1183 | 1222 | msgstr "Selecionar tudo" |
1184 | 1223 | |
... | ... | @@ -1186,10 +1225,14 @@ msgstr "Selecionar tudo" |
1186 | 1225 | msgid "Select by rectangles" |
1187 | 1226 | msgstr "Seleção retangular" |
1188 | 1227 | |
1189 | -#: src/core/actions/table.c:262 | |
1228 | +#: src/core/actions/table.c:428 | |
1190 | 1229 | msgid "Select field" |
1191 | 1230 | msgstr "Seleciona campo" |
1192 | 1231 | |
1232 | +#: src/core/actions/table.c:300 src/core/actions/table.c:301 | |
1233 | +msgid "Select word" | |
1234 | +msgstr "Seleciona palavra" | |
1235 | + | |
1193 | 1236 | #: src/core/linux/event_dispatcher.c:144 |
1194 | 1237 | msgid "Select() failed when processing for events." |
1195 | 1238 | msgstr "Select() falhou ao processar eventos." |
... | ... | @@ -1202,7 +1245,7 @@ msgstr "Certificado auto assinado" |
1202 | 1245 | msgid "Self signed certificate in certificate chain" |
1203 | 1246 | msgstr "Certificado auto assinado na cadeia de certificados" |
1204 | 1247 | |
1205 | -#: src/core/actions/table.c:440 | |
1248 | +#: src/core/actions/table.c:606 | |
1206 | 1249 | msgid "Send an \"Enter\" action" |
1207 | 1250 | msgstr "Envia um \"Enter\"" |
1208 | 1251 | |
... | ... | @@ -1246,11 +1289,11 @@ msgstr "Erro ao enviar dados para a rede" |
1246 | 1289 | msgid "Sound" |
1247 | 1290 | msgstr "Som" |
1248 | 1291 | |
1249 | -#: src/core/properties/boolean.c:119 | |
1292 | +#: src/core/properties/boolean.c:126 | |
1250 | 1293 | msgid "State is 3270, TN3270e or SSCP" |
1251 | 1294 | msgstr "Estado do terminal é 3270, TN3270e or SSCP" |
1252 | 1295 | |
1253 | -#: src/core/properties/boolean.c:154 | |
1296 | +#: src/core/properties/boolean.c:161 | |
1254 | 1297 | msgid "Still have text to paste" |
1255 | 1298 | msgstr "Ainda existe texto para colar" |
1256 | 1299 | |
... | ... | @@ -1258,7 +1301,7 @@ msgstr "Ainda existe texto para colar" |
1258 | 1301 | msgid "Subject issuer mismatch" |
1259 | 1302 | msgstr "Divergência na identidade do emissor" |
1260 | 1303 | |
1261 | -#: src/core/actions/table.c:567 | |
1304 | +#: src/core/actions/table.c:733 | |
1262 | 1305 | msgid "Sys Req" |
1263 | 1306 | msgstr "Sys Req" |
1264 | 1307 | |
... | ... | @@ -1266,11 +1309,11 @@ msgstr "Sys Req" |
1266 | 1309 | msgid "TLS negotiation failure" |
1267 | 1310 | msgstr "Negociação TLS falhou" |
1268 | 1311 | |
1269 | -#: src/core/actions/table.c:320 | |
1312 | +#: src/core/actions/table.c:486 | |
1270 | 1313 | msgid "Tab backward to previous field" |
1271 | 1314 | msgstr "Move para o campo anterior" |
1272 | 1315 | |
1273 | -#: src/core/actions/table.c:306 | |
1316 | +#: src/core/actions/table.c:472 | |
1274 | 1317 | msgid "Tab forward to next field" |
1275 | 1318 | msgstr "Move para o próximo campo" |
1276 | 1319 | |
... | ... | @@ -1286,7 +1329,7 @@ msgstr "Nome do terminal" |
1286 | 1329 | msgid "Terminal type" |
1287 | 1330 | msgstr "Tipo do terminal" |
1288 | 1331 | |
1289 | -#: src/core/actions/table.c:585 | |
1332 | +#: src/core/actions/table.c:751 | |
1290 | 1333 | msgid "Test pattern" |
1291 | 1334 | msgstr "Padrão de teste" |
1292 | 1335 | |
... | ... | @@ -1341,7 +1384,7 @@ msgstr "" |
1341 | 1384 | "A lista de revogação de certificados (CRL) de um certificado não pôde ser " |
1342 | 1385 | "encontrada." |
1343 | 1386 | |
1344 | -#: src/ssl/negotiate.c:308 | |
1387 | +#: src/ssl/negotiate.c:320 | |
1345 | 1388 | msgid "The SSL certificate for this host is not trusted." |
1346 | 1389 | msgstr "O certificado SSL deste servidor não é confiável" |
1347 | 1390 | |
... | ... | @@ -1563,7 +1606,7 @@ msgstr "" |
1563 | 1606 | "O Certificado raiz não está marcado como confiável para os fins " |
1564 | 1607 | "especificados." |
1565 | 1608 | |
1566 | -#: src/ssl/negotiate.c:309 | |
1609 | +#: src/ssl/negotiate.c:321 | |
1567 | 1610 | msgid "" |
1568 | 1611 | "The security certificate presented by this host was not issued by a trusted " |
1569 | 1612 | "certificate authority." |
... | ... | @@ -1740,7 +1783,7 @@ msgstr "Erro inesperado" |
1740 | 1783 | msgid "Unexpected or invalid CRL URL" |
1741 | 1784 | msgstr "URL do CRL é inesperada ou inválida" |
1742 | 1785 | |
1743 | -#: src/ssl/negotiate.c:287 | |
1786 | +#: src/ssl/negotiate.c:299 | |
1744 | 1787 | msgid "Unexpected or invalid TLS/SSL verify result" |
1745 | 1788 | msgstr "O resultado da verificação TLS/SSL foi inesperado" |
1746 | 1789 | |
... | ... | @@ -1788,7 +1831,7 @@ msgstr "Unsupported RPQ term" |
1788 | 1831 | msgid "Unsupported certificate purpose" |
1789 | 1832 | msgstr "Finalidade do certificado não é suportada" |
1790 | 1833 | |
1791 | -#: src/core/actions/table.c:102 | |
1834 | +#: src/core/actions/table.c:143 | |
1792 | 1835 | msgid "Up" |
1793 | 1836 | msgstr "Subir" |
1794 | 1837 | |
... | ... | @@ -1896,11 +1939,11 @@ msgstr "" |
1896 | 1939 | msgid "You specified an option that is invalid." |
1897 | 1940 | msgstr "Você especificou uma opção inválida." |
1898 | 1941 | |
1899 | -#: src/core/actions/table.c:85 | |
1942 | +#: src/core/actions/table.c:126 | |
1900 | 1943 | msgid "_Disconnect" |
1901 | 1944 | msgstr "_Desconectar" |
1902 | 1945 | |
1903 | -#: src/core/actions/table.c:71 | |
1946 | +#: src/core/actions/table.c:112 | |
1904 | 1947 | msgid "_Reconnect" |
1905 | 1948 | msgstr "_Reconectar" |
1906 | 1949 | |
... | ... | @@ -1928,7 +1971,7 @@ msgstr "Revisão da lib3270" |
1928 | 1971 | msgid "lib3270 version" |
1929 | 1972 | msgstr "Versão da lib3270" |
1930 | 1973 | |
1931 | -#: src/core/properties/boolean.c:182 | |
1974 | +#: src/core/properties/boolean.c:189 | |
1932 | 1975 | msgid "numeric lock" |
1933 | 1976 | msgstr "numeric lock" |
1934 | 1977 | ... | ... |
src/core/actions/table.c
... | ... | @@ -51,6 +51,46 @@ |
51 | 51 | return lib3270_reconnect(hSession,0); |
52 | 52 | } |
53 | 53 | |
54 | + static int select_up(H3270 *hSession) | |
55 | + { | |
56 | + return lib3270_move_cursor(hSession,LIB3270_DIR_UP,1); | |
57 | + } | |
58 | + | |
59 | + static int select_down(H3270 *hSession) | |
60 | + { | |
61 | + return lib3270_move_cursor(hSession,LIB3270_DIR_DOWN,1); | |
62 | + } | |
63 | + | |
64 | + static int select_left(H3270 *hSession) | |
65 | + { | |
66 | + return lib3270_move_cursor(hSession,LIB3270_DIR_LEFT,1); | |
67 | + } | |
68 | + | |
69 | + static int select_right(H3270 *hSession) | |
70 | + { | |
71 | + return lib3270_move_cursor(hSession,LIB3270_DIR_RIGHT,1); | |
72 | + } | |
73 | + | |
74 | + static int selection_up(H3270 *hSession) | |
75 | + { | |
76 | + return lib3270_move_selection(hSession,LIB3270_DIR_UP); | |
77 | + } | |
78 | + | |
79 | + static int selection_down(H3270 *hSession) | |
80 | + { | |
81 | + return lib3270_move_selection(hSession,LIB3270_DIR_DOWN); | |
82 | + } | |
83 | + | |
84 | + static int selection_left(H3270 *hSession) | |
85 | + { | |
86 | + return lib3270_move_selection(hSession,LIB3270_DIR_LEFT); | |
87 | + } | |
88 | + | |
89 | + static int selection_right(H3270 *hSession) | |
90 | + { | |
91 | + return lib3270_move_selection(hSession,LIB3270_DIR_RIGHT); | |
92 | + } | |
93 | + | |
54 | 94 | /** |
55 | 95 | * @brief Get LIB3270 action table; |
56 | 96 | * |
... | ... | @@ -213,7 +253,7 @@ |
213 | 253 | .name = "select-all", |
214 | 254 | .type = LIB3270_ACTION_TYPE_SELECTION, |
215 | 255 | |
216 | - .keys = "<ctrl>a", | |
256 | + .keys = "<Primary>a", | |
217 | 257 | .icon = "edit-select-all", |
218 | 258 | .label = N_( "Select all" ), |
219 | 259 | .summary = NULL, |
... | ... | @@ -241,7 +281,7 @@ |
241 | 281 | .name = "reselect", |
242 | 282 | .type = LIB3270_ACTION_TYPE_SELECTION, |
243 | 283 | |
244 | - .keys = "<Ctrl>r", | |
284 | + .keys = "<Primary>r", | |
245 | 285 | .icon = NULL, |
246 | 286 | .label = N_( "Reselect" ), |
247 | 287 | .summary = N_( "Reselect"), |
... | ... | @@ -265,6 +305,117 @@ |
265 | 305 | .activatable = lib3270_is_connected |
266 | 306 | }, |
267 | 307 | |
308 | + { | |
309 | + .name = "select-up", | |
310 | + .type = LIB3270_ACTION_TYPE_SELECTION, | |
311 | + | |
312 | + .keys = "<Shift>Up", | |
313 | + .icon = NULL, | |
314 | + .label = N_( "Move cursor up and select" ), | |
315 | + .summary = NULL, | |
316 | + .activate = select_up, | |
317 | + | |
318 | + .group = LIB3270_ACTION_GROUP_ONLINE, | |
319 | + .activatable = lib3270_is_connected | |
320 | + }, | |
321 | + | |
322 | + { | |
323 | + .name = "select-down", | |
324 | + .type = LIB3270_ACTION_TYPE_SELECTION, | |
325 | + | |
326 | + .keys = "<Shift>Down", | |
327 | + .icon = NULL, | |
328 | + .label = N_( "Move cursor down and select" ), | |
329 | + .summary = NULL, | |
330 | + .activate = select_down, | |
331 | + | |
332 | + .group = LIB3270_ACTION_GROUP_ONLINE, | |
333 | + .activatable = lib3270_is_connected | |
334 | + }, | |
335 | + | |
336 | + { | |
337 | + .name = "select-left", | |
338 | + .type = LIB3270_ACTION_TYPE_SELECTION, | |
339 | + | |
340 | + .keys = "<Shift>Left", | |
341 | + .icon = NULL, | |
342 | + .label = N_( "Move cursor left and select" ), | |
343 | + .summary = NULL, | |
344 | + .activate = select_left, | |
345 | + | |
346 | + .group = LIB3270_ACTION_GROUP_ONLINE, | |
347 | + .activatable = lib3270_is_connected | |
348 | + }, | |
349 | + | |
350 | + { | |
351 | + .name = "select-right", | |
352 | + .type = LIB3270_ACTION_TYPE_SELECTION, | |
353 | + | |
354 | + .keys = "<Shift>Right", | |
355 | + .icon = NULL, | |
356 | + .label = N_( "Move cursor rigth and select" ), | |
357 | + .summary = NULL, | |
358 | + .activate = select_right, | |
359 | + | |
360 | + .group = LIB3270_ACTION_GROUP_ONLINE, | |
361 | + .activatable = lib3270_is_connected | |
362 | + }, | |
363 | + | |
364 | + { | |
365 | + .name = "selection-up", | |
366 | + .type = LIB3270_ACTION_TYPE_SELECTION, | |
367 | + | |
368 | + .keys = "<Alt>Up", | |
369 | + .icon = NULL, | |
370 | + .label = N_( "Move selection up" ), | |
371 | + .summary = NULL, | |
372 | + .activate = selection_up, | |
373 | + | |
374 | + .group = LIB3270_ACTION_GROUP_SELECTION, | |
375 | + .activatable = lib3270_get_has_selection | |
376 | + }, | |
377 | + | |
378 | + { | |
379 | + .name = "selection-down", | |
380 | + .type = LIB3270_ACTION_TYPE_SELECTION, | |
381 | + | |
382 | + .keys = "<Alt>Down", | |
383 | + .icon = NULL, | |
384 | + .label = N_( "Move selection down" ), | |
385 | + .summary = NULL, | |
386 | + .activate = selection_down, | |
387 | + | |
388 | + .group = LIB3270_ACTION_GROUP_SELECTION, | |
389 | + .activatable = lib3270_get_has_selection | |
390 | + }, | |
391 | + | |
392 | + { | |
393 | + .name = "selection-left", | |
394 | + .type = LIB3270_ACTION_TYPE_SELECTION, | |
395 | + | |
396 | + .keys = "<Alt>Left", | |
397 | + .icon = NULL, | |
398 | + .label = N_( "Move selection left" ), | |
399 | + .summary = NULL, | |
400 | + .activate = selection_left, | |
401 | + | |
402 | + .group = LIB3270_ACTION_GROUP_SELECTION, | |
403 | + .activatable = lib3270_get_has_selection | |
404 | + }, | |
405 | + | |
406 | + { | |
407 | + .name = "selection-right", | |
408 | + .type = LIB3270_ACTION_TYPE_SELECTION, | |
409 | + | |
410 | + .keys = "<Alt>Right", | |
411 | + .icon = NULL, | |
412 | + .label = N_( "Move selection right" ), | |
413 | + .summary = NULL, | |
414 | + .activate = selection_right, | |
415 | + .activatable = lib3270_get_has_selection | |
416 | + | |
417 | + }, | |
418 | + | |
268 | 419 | // |
269 | 420 | // Field actions. |
270 | 421 | // |
... | ... | @@ -272,7 +423,7 @@ |
272 | 423 | .name = "select-field", |
273 | 424 | .type = LIB3270_ACTION_TYPE_SELECTION, |
274 | 425 | |
275 | - .keys = "<Ctrl>f", | |
426 | + .keys = "<Primary>f", | |
276 | 427 | .icon = NULL, |
277 | 428 | .label = N_( "Select field" ), |
278 | 429 | .summary = N_( "Select Field" ), |
... | ... | @@ -347,7 +498,7 @@ |
347 | 498 | .name = "delete-word", |
348 | 499 | .type = LIB3270_ACTION_TYPE_NAVIGATION, |
349 | 500 | |
350 | - .keys = "<Ctrl>w", | |
501 | + .keys = "<Primary>w", | |
351 | 502 | .icon = NULL, |
352 | 503 | .label = N_("Delete word"), |
353 | 504 | .summary = N_( "Backspaces the cursor until it hits the front of a word" ), |
... | ... | @@ -361,7 +512,7 @@ |
361 | 512 | .name = "delete-field", |
362 | 513 | .type = LIB3270_ACTION_TYPE_NAVIGATION, |
363 | 514 | |
364 | - .keys = "<Ctrl>u", | |
515 | + .keys = "<Primary>u", | |
365 | 516 | .icon = NULL, |
366 | 517 | .label = N_( "Delete field" ), |
367 | 518 | .summary = N_( "Delete field" ), | ... | ... |
src/core/bounds.c
... | ... | @@ -79,7 +79,7 @@ LIB3270_EXPORT int lib3270_get_word_bounds(H3270 *session, int baddr, int *start |
79 | 79 | if(baddr < 0) |
80 | 80 | baddr = lib3270_get_cursor_address(session); |
81 | 81 | |
82 | - if(baddr > lib3270_get_length(session)) { | |
82 | + if(baddr > (int) lib3270_get_length(session)) { | |
83 | 83 | return errno = EINVAL; |
84 | 84 | } |
85 | 85 | ... | ... |
src/core/connect.c
src/core/cursor.c
... | ... | @@ -79,8 +79,6 @@ static int cursor_end(H3270 *hSession); |
79 | 79 | */ |
80 | 80 | LIB3270_EXPORT int lib3270_move_cursor(H3270 *hSession, LIB3270_DIRECTION dir, unsigned char sel) |
81 | 81 | { |
82 | - int select_from = -1; | |
83 | - | |
84 | 82 | FAIL_IF_NOT_ONLINE(hSession); |
85 | 83 | |
86 | 84 | if(dir < 0 || dir >= LIB3270_DIR_COUNT) |
... | ... | @@ -106,18 +104,40 @@ LIB3270_EXPORT int lib3270_move_cursor(H3270 *hSession, LIB3270_DIRECTION dir, u |
106 | 104 | } |
107 | 105 | } |
108 | 106 | |
109 | - if(sel) { | |
110 | - select_from = (hSession->selected ? hSession->select.start : hSession->cursor_addr); | |
111 | - } | |
107 | + // Save last cursor position | |
108 | + int saved_cursor = hSession->cursor_addr; | |
112 | 109 | |
113 | 110 | int rc = calls[dir].exec(hSession); |
114 | 111 | if(rc) |
115 | 112 | return rc; |
116 | 113 | |
117 | 114 | if(sel) |
118 | - lib3270_select_region(hSession, select_from, hSession->cursor_addr); | |
115 | + { | |
116 | + if(hSession->cursor_addr < saved_cursor) | |
117 | + { | |
118 | + // Moved back | |
119 | + lib3270_select_region( | |
120 | + hSession, | |
121 | + hSession->cursor_addr, | |
122 | + ((hSession->selected ? hSession->select.end : saved_cursor)) | |
123 | + ); | |
124 | + | |
125 | + } | |
126 | + else | |
127 | + { | |
128 | + // Moved forward | |
129 | + lib3270_select_region( | |
130 | + hSession, | |
131 | + ((hSession->selected ? hSession->select.start : saved_cursor)), | |
132 | + hSession->cursor_addr | |
133 | + ); | |
134 | + } | |
135 | + | |
136 | + } | |
119 | 137 | else if(hSession->selected && !lib3270_get_toggle(hSession,LIB3270_TOGGLE_KEEP_SELECTED)) |
138 | + { | |
120 | 139 | lib3270_unselect(hSession); |
140 | + } | |
121 | 141 | |
122 | 142 | return 0; |
123 | 143 | } | ... | ... |
src/core/properties/signed.c
... | ... | @@ -49,6 +49,48 @@ |
49 | 49 | return (int) lib3270_get_ssl_state(hSession); |
50 | 50 | } |
51 | 51 | |
52 | + static int lib3270_set_ssl_minimum_protocol_version(H3270 *hSession, int value) | |
53 | + { | |
54 | +#ifdef HAVE_LIBSSL | |
55 | + FAIL_IF_ONLINE(hSession); | |
56 | + hSession->ssl.protocol.min_version = value; | |
57 | + return 0; | |
58 | +#else | |
59 | + return ENOTSUP; | |
60 | +#endif // HAVE_LIBSSL | |
61 | + } | |
62 | + | |
63 | + static int lib3270_set_ssl_maximum_protocol_version(H3270 *hSession, int value) | |
64 | + { | |
65 | +#ifdef HAVE_LIBSSL | |
66 | + FAIL_IF_ONLINE(hSession); | |
67 | + hSession->ssl.protocol.max_version = value; | |
68 | + return 0; | |
69 | +#else | |
70 | + return ENOTSUP; | |
71 | +#endif // HAVE_LIBSSL | |
72 | + } | |
73 | + | |
74 | + static int lib3270_get_ssl_minimum_protocol_version(const H3270 *hSession) | |
75 | + { | |
76 | +#ifdef HAVE_LIBSSL | |
77 | + return hSession->ssl.protocol.min_version; | |
78 | +#else | |
79 | + errno = ENOTSUP; | |
80 | + return 0; | |
81 | +#endif // HAVE_LIBSSL | |
82 | + } | |
83 | + | |
84 | + static int lib3270_get_ssl_maximum_protocol_version(const H3270 *hSession) | |
85 | + { | |
86 | +#ifdef HAVE_LIBSSL | |
87 | + return hSession->ssl.protocol.max_version; | |
88 | +#else | |
89 | + errno = ENOTSUP; | |
90 | + return 0; | |
91 | +#endif // HAVE_LIBSSL | |
92 | + } | |
93 | + | |
52 | 94 | const LIB3270_INT_PROPERTY * lib3270_get_int_properties_list(void) |
53 | 95 | { |
54 | 96 | |
... | ... | @@ -75,6 +117,22 @@ |
75 | 117 | .set = NULL // Set value. |
76 | 118 | }, |
77 | 119 | |
120 | + { | |
121 | + .name = "ssl_min_protocol_version", // Property name. | |
122 | + .description = N_( "ID of the minimum supported SSL protocol version" ), // Property description. | |
123 | + .default_value = 0, | |
124 | + .get = lib3270_get_ssl_minimum_protocol_version, // Get value. | |
125 | + .set = lib3270_set_ssl_minimum_protocol_version // Set value. | |
126 | + }, | |
127 | + | |
128 | + { | |
129 | + .name = "ssl_max_protocol_version", // Property name. | |
130 | + .description = N_( "ID of the maximum supported SSL protocol version" ), // Property description. | |
131 | + .default_value = 0, | |
132 | + .get = lib3270_get_ssl_maximum_protocol_version, // Get value. | |
133 | + .set = lib3270_set_ssl_maximum_protocol_version // Set value. | |
134 | + }, | |
135 | + | |
78 | 136 | { |
79 | 137 | .name = NULL, |
80 | 138 | .description = NULL, | ... | ... |
src/core/rpq.c
... | ... | @@ -199,26 +199,26 @@ void do_qr_rpqnames(H3270 *hSession) |
199 | 199 | break; |
200 | 200 | |
201 | 201 | case RPQ_VERSION: /* program version */ |
202 | - x = strlen(build_rpq_version); | |
202 | + x = strlen(PACKAGE_VERSION); | |
203 | 203 | omit_due_space_limit = (x > remaining); |
204 | 204 | if (!omit_due_space_limit) |
205 | 205 | { |
206 | 206 | for (i = 0; i < x; i++) |
207 | 207 | { |
208 | - *hSession->output.ptr++ = hSession->charset.asc2ebc[(int)(*(build_rpq_version+i) & 0xff)]; | |
208 | + *hSession->output.ptr++ = hSession->charset.asc2ebc[(int)(*(PACKAGE_VERSION+i) & 0xff)]; | |
209 | 209 | } |
210 | 210 | } |
211 | 211 | break; |
212 | 212 | |
213 | 213 | case RPQ_TIMESTAMP: /* program build time (yyyymmddhhmmss bcd) */ |
214 | - x = strlen(build_rpq_timestamp); | |
214 | + x = strlen(RPQ_TIMESTAMP_VALUE); | |
215 | 215 | omit_due_space_limit = ((x+1)/2 > remaining) ? 1 : 0; |
216 | 216 | if (!omit_due_space_limit) |
217 | 217 | { |
218 | 218 | for (i=0; i < x; i+=2) |
219 | 219 | { |
220 | - *hSession->output.ptr++ = ((*(build_rpq_timestamp+i) - '0') << 4) | |
221 | - + (*(build_rpq_timestamp+i+1) - '0'); | |
220 | + *hSession->output.ptr++ = ((*(RPQ_TIMESTAMP_VALUE+i) - '0') << 4) | |
221 | + + (*(RPQ_TIMESTAMP_VALUE+i+1) - '0'); | |
222 | 222 | } |
223 | 223 | } |
224 | 224 | break; | ... | ... |
src/core/session.c
... | ... | @@ -410,6 +410,11 @@ H3270 * lib3270_session_new(const char *model) |
410 | 410 | hSession = lib3270_malloc(sizeof(H3270)); |
411 | 411 | hSession->id = 0; |
412 | 412 | |
413 | +#ifdef HAVE_LIBSSL | |
414 | + hSession->ssl.protocol.min_version = 0; | |
415 | + hSession->ssl.protocol.max_version = 0; | |
416 | +#endif // HAVE_LIBSSL | |
417 | + | |
413 | 418 | #ifdef SSL_ENABLE_CRL_CHECK |
414 | 419 | hSession->ssl.crl.download = 1; |
415 | 420 | #endif // SSL_ENABLE_CRL_CHECK | ... | ... |
src/core/util.c
... | ... | @@ -40,6 +40,10 @@ |
40 | 40 | #include <lib3270/selection.h> |
41 | 41 | #include <lib3270/log.h> |
42 | 42 | |
43 | +#if defined(HAVE_LIBSSL) | |
44 | + #include <openssl/opensslv.h> | |
45 | +#endif // HAVE_LIBSSL | |
46 | + | |
43 | 47 | #define my_isspace(c) isspace((unsigned char)c) |
44 | 48 | |
45 | 49 | /** |
... | ... | @@ -357,12 +361,28 @@ LIB3270_EXPORT void * lib3270_strdup(const char *str) |
357 | 361 | |
358 | 362 | LIB3270_EXPORT const char * lib3270_get_version(void) |
359 | 363 | { |
360 | - return build_rpq_version; | |
364 | + return PACKAGE_VERSION; | |
361 | 365 | } |
362 | 366 | |
363 | 367 | LIB3270_EXPORT const char * lib3270_get_revision(void) |
364 | 368 | { |
365 | - return build_rpq_revision; | |
369 | + return RPQ_REVISION; | |
370 | +} | |
371 | + | |
372 | +LIB3270_EXPORT char * lib3270_get_version_info(void) | |
373 | +{ | |
374 | +#if defined(HAVE_LIBSSL) | |
375 | + return lib3270_strdup_printf( | |
376 | + "%s version %s-%s build %s (%s)", | |
377 | + PACKAGE_NAME, | |
378 | + PACKAGE_VERSION, | |
379 | + PACKAGE_RELEASE, | |
380 | + RPQ_TIMESTAMP_VALUE, | |
381 | + OPENSSL_VERSION_TEXT | |
382 | + ); | |
383 | +#else | |
384 | + return lib3270_strdup_printf("%s version %s-%s build %s",PACKAGE_NAME,PACKAGE_VERSION,PACKAGE_RELEASE,RPQ_TIMESTAMP_VALUE); | |
385 | +#endif // HAVE_LIBSSL | |
366 | 386 | } |
367 | 387 | |
368 | 388 | void lib3270_popup_an_errno(H3270 *hSession, int errn, const char *fmt, ...) | ... | ... |
src/core/version.c.in
... | ... | @@ -1,8 +0,0 @@ |
1 | -char *build = "@PACKAGE_TARNAME@ v@PACKAGE_VERSION@ @RPQ_BUILD_DATE@ @SCCS_USER@"; | |
2 | -char *app_defaults_version = "@PACKAGE_VERSION@"; | |
3 | -char *sccsid = "@(#)@PACKAGE_TARNAME@ v@PACKAGE_VERSION@ @SCCS_DATE@ @SCCS_USER@"; | |
4 | - | |
5 | -const char *build_rpq_timestamp = "@RPQ_TIMESTAMP@"; | |
6 | -const char *build_rpq_version = "@PACKAGE_VERSION@"; | |
7 | -const char *build_rpq_revision = "@RPQ_REVISION@"; | |
8 | - |
src/include/config.h.in
... | ... | @@ -39,6 +39,12 @@ |
39 | 39 | #undef LIB3270_NAME |
40 | 40 | #undef GETTEXT_PACKAGE |
41 | 41 | |
42 | + #undef RPQ_BUILD_DATE | |
43 | + #undef RPQ_TIMESTAMP_VALUE | |
44 | + #undef RPQ_REVISION | |
45 | + #undef SCCS_USER | |
46 | + #undef SCCS_DATE | |
47 | + | |
42 | 48 | /* Default settings */ |
43 | 49 | |
44 | 50 | /** @brief The lib3270's default host URL */ | ... | ... |
src/include/internals.h
... | ... | @@ -136,12 +136,14 @@ enum iaction { |
136 | 136 | }; |
137 | 137 | |
138 | 138 | // Version strings |
139 | +/* | |
139 | 140 | LIB3270_INTERNAL const char * build; |
140 | 141 | LIB3270_INTERNAL const char * app_defaults_version; |
141 | 142 | LIB3270_INTERNAL const char * sccsid; |
142 | 143 | LIB3270_INTERNAL const char * build_rpq_timestamp; |
143 | 144 | LIB3270_INTERNAL const char * build_rpq_version; |
144 | 145 | LIB3270_INTERNAL const char * build_rpq_revision; |
146 | +*/ | |
145 | 147 | |
146 | 148 | #if defined(X3270_DBCS) /*[*/ |
147 | 149 | LIB3270_INTERNAL Boolean dbcs; |
... | ... | @@ -662,6 +664,13 @@ struct _h3270 |
662 | 664 | char host; |
663 | 665 | LIB3270_SSL_STATE state; |
664 | 666 | unsigned long error; |
667 | + | |
668 | + struct | |
669 | + { | |
670 | + int min_version; ///< @brief The minimum supported protocol version. | |
671 | + int max_version; ///< @brief The maximum supported protocol version. | |
672 | + } protocol; | |
673 | + | |
665 | 674 | #ifdef SSL_ENABLE_CRL_CHECK |
666 | 675 | struct |
667 | 676 | { |
... | ... | @@ -741,7 +750,7 @@ LIB3270_INTERNAL void lib3270_sock_disconnect(H3270 *hSession); |
741 | 750 | |
742 | 751 | LIB3270_INTERNAL int lib3270_default_event_dispatcher(H3270 *hSession, int block); |
743 | 752 | |
744 | -LIB3270_INTERNAL void do_select(H3270 *h, unsigned int start, unsigned int end, unsigned int rect); | |
753 | +LIB3270_INTERNAL int do_select(H3270 *h, unsigned int start, unsigned int end, unsigned int rect); | |
745 | 754 | |
746 | 755 | |
747 | 756 | /** | ... | ... |
src/include/lib3270/properties.h
... | ... | @@ -220,6 +220,14 @@ |
220 | 220 | */ |
221 | 221 | LIB3270_EXPORT void lib3270_disable_crl_download(H3270 *hSession); |
222 | 222 | |
223 | + /** | |
224 | + * @brief Get lib3270 version info. | |
225 | + * | |
226 | + * @return String with lib3270 version info (release it with lib3270_free). | |
227 | + */ | |
228 | + LIB3270_EXPORT char * lib3270_get_version_info(void); | |
229 | + | |
230 | + | |
223 | 231 | #ifdef __cplusplus |
224 | 232 | } |
225 | 233 | #endif | ... | ... |
src/selection/actions.c
... | ... | @@ -100,11 +100,10 @@ LIB3270_EXPORT int lib3270_select_region(H3270 *h, int start, int end) |
100 | 100 | maxlen = (h->view.rows * h->view.cols); |
101 | 101 | |
102 | 102 | // Check bounds |
103 | - if(start < 0 || start > maxlen || end < 0 || end > maxlen || start > end) | |
103 | + if(start < 0 || start > maxlen || end < 0 || end > maxlen) | |
104 | 104 | return EINVAL; |
105 | 105 | |
106 | 106 | do_select(h,start,end,lib3270_get_toggle(h,LIB3270_TOGGLE_RECTANGLE_SELECT)); |
107 | - cursor_move(h,h->select.end); | |
108 | 107 | |
109 | 108 | return 0; |
110 | 109 | } | ... | ... |
src/selection/selection.c
... | ... | @@ -167,14 +167,16 @@ void toggle_rectselect(H3270 *hSession, const struct lib3270_toggle *t, LIB3270_ |
167 | 167 | update_selected_region(hSession); |
168 | 168 | } |
169 | 169 | |
170 | -void do_select(H3270 *hSession, unsigned int start, unsigned int end, unsigned int rect) | |
170 | +int do_select(H3270 *hSession, unsigned int start, unsigned int end, unsigned int rect) | |
171 | 171 | { |
172 | - if(end > (hSession->view.rows * hSession->view.cols)) | |
173 | - return; | |
172 | + unsigned int length = (hSession->view.rows * hSession->view.cols); | |
173 | + | |
174 | + if(end > length || start > length) | |
175 | + return errno = EINVAL; | |
174 | 176 | |
175 | 177 | // Do we really need to change selection? |
176 | 178 | if( ((int) start) == hSession->select.start && ((int) end) == hSession->select.end && hSession->selected) |
177 | - return; | |
179 | + return 0; | |
178 | 180 | |
179 | 181 | // Start address is inside the screen? |
180 | 182 | hSession->select.start = start; |
... | ... | @@ -200,6 +202,7 @@ void do_select(H3270 *hSession, unsigned int start, unsigned int end, unsigned i |
200 | 202 | |
201 | 203 | hSession->cbk.update_selection(hSession,start,end); |
202 | 204 | |
205 | + return 0; | |
203 | 206 | } |
204 | 207 | |
205 | 208 | LIB3270_EXPORT unsigned char lib3270_get_selection_flags(H3270 *hSession, int baddr) | ... | ... |
src/ssl/linux/init.c
src/ssl/negotiate.c
... | ... | @@ -137,6 +137,52 @@ int x509_store_ctx_error_callback(int ok, X509_STORE_CTX GNUC_UNUSED(*ctx)) |
137 | 137 | } |
138 | 138 | #endif // SSL_ENABLE_CRL_CHECK |
139 | 139 | |
140 | +static const struct ssl_protocol { | |
141 | + int id; | |
142 | + const char * description; | |
143 | +} ssl_protocols[] = { | |
144 | + | |
145 | + { | |
146 | + .id = SSL3_VERSION, | |
147 | + .description = SSL_TXT_SSLV3 | |
148 | + }, | |
149 | + { | |
150 | + .id = TLS1_VERSION, | |
151 | + .description = SSL_TXT_TLSV1 | |
152 | + }, | |
153 | + { | |
154 | + .id = TLS1_1_VERSION, | |
155 | + .description = SSL_TXT_TLSV1_1 | |
156 | + }, | |
157 | + { | |
158 | + .id = TLS1_2_VERSION, | |
159 | + .description = SSL_TXT_TLSV1_2 | |
160 | + }, | |
161 | + { | |
162 | + .id = DTLS1_VERSION, | |
163 | + .description = "DTLSv1" | |
164 | + }, | |
165 | + { | |
166 | + .id = DTLS1_2_VERSION, | |
167 | + .description = "DTLSv2" | |
168 | + } | |
169 | + | |
170 | +}; | |
171 | + | |
172 | +static const struct ssl_protocol * get_protocol_from_id(int id) { | |
173 | + | |
174 | + if(id < 1) | |
175 | + return NULL; | |
176 | + | |
177 | + id--; | |
178 | + | |
179 | + if( ((size_t) id) > (sizeof(ssl_protocols)/sizeof(ssl_protocols[0]))) | |
180 | + return NULL; | |
181 | + | |
182 | + return ssl_protocols + id; | |
183 | + | |
184 | +} | |
185 | + | |
140 | 186 | static int background_ssl_negotiation(H3270 *hSession, void *message) |
141 | 187 | { |
142 | 188 | int rv; |
... | ... | @@ -150,6 +196,40 @@ static int background_ssl_negotiation(H3270 *hSession, void *message) |
150 | 196 | } |
151 | 197 | |
152 | 198 | /* Set up the TLS/SSL connection. */ |
199 | + const struct ssl_protocol * protocol; | |
200 | + | |
201 | + if( (protocol = get_protocol_from_id(hSession->ssl.protocol.min_version)) != NULL ) | |
202 | + { | |
203 | +#if (OPENSSL_VERSION_NUMBER >= 0x1010009fL) | |
204 | + if(SSL_set_min_proto_version(hSession->ssl.con,protocol->id) == 1) | |
205 | + { | |
206 | + trace_ssl(hSession,"Minimum protocol version set to %s\n",protocol->description); | |
207 | + } | |
208 | + else | |
209 | + { | |
210 | + lib3270_write_log(hSession,"ssl","Can't set minimum protocol version to %s",protocol->description); | |
211 | + } | |
212 | +#else | |
213 | + trace_ssl(hSession,"Can't set minimum protocol version to %s\n",protocol->description); | |
214 | +#endif // OPENSSL_VERSION_NUMBER | |
215 | + } | |
216 | + | |
217 | + if( (protocol = get_protocol_from_id(hSession->ssl.protocol.max_version)) != NULL ) | |
218 | + { | |
219 | +#if (OPENSSL_VERSION_NUMBER >= 0x1010009fL) | |
220 | + if(SSL_set_max_proto_version(hSession->ssl.con,protocol->id) == 1) | |
221 | + { | |
222 | + trace_ssl(hSession,"Maximum protocol version set to %s\n",protocol->description); | |
223 | + } | |
224 | + else | |
225 | + { | |
226 | + lib3270_write_log(hSession,"ssl","Can't set maximum protocol version to %s",protocol->description); | |
227 | + } | |
228 | +#else | |
229 | + trace_ssl(hSession,"Can't set maximum protocol version to %s\n",protocol->description); | |
230 | +#endif // OPENSSL_VERSION_NUMBER | |
231 | + } | |
232 | + | |
153 | 233 | if(SSL_set_fd(hSession->ssl.con, hSession->connection.sock) != 1) |
154 | 234 | { |
155 | 235 | trace_ssl(hSession,"%s","SSL_set_fd failed!\n"); | ... | ... |
src/testprogram/testprogram.c
... | ... | @@ -40,7 +40,7 @@ int main(int argc, char *argv[]) |
40 | 40 | setlocale( LC_ALL, "" ); |
41 | 41 | #endif |
42 | 42 | |
43 | - textdomain("pw3270"); | |
43 | + textdomain("lib3270"); | |
44 | 44 | |
45 | 45 | // #pragma GCC diagnostic push |
46 | 46 | // #pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant" |
... | ... | @@ -57,7 +57,8 @@ int main(int argc, char *argv[]) |
57 | 57 | H3270 * h = lib3270_session_new(""); |
58 | 58 | int rc = 0; |
59 | 59 | |
60 | - printf("3270 session %p created\n]",h); | |
60 | + lib3270_autoptr(char) version_info = lib3270_get_version_info(); | |
61 | + printf("3270 session %p created\n%s\n]",h,version_info); | |
61 | 62 | |
62 | 63 | #ifdef HAVE_LDAP |
63 | 64 | lib3270_crl_set_preferred_protocol(h,"ldap"); | ... | ... |
win/x86_32/mingw32-lib3270.spec
1 | 1 | # |
2 | -# spec file for package mingw32-lib3270 | |
2 | +# spec file for package mingw32-%{_libname} | |
3 | 3 | # |
4 | -# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. | |
4 | +# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. | |
5 | 5 | # Copyright (C) <2008> <Banco do Brasil S.A.> |
6 | 6 | # |
7 | 7 | # All modifications and additions to the file contributed by third parties |
... | ... | @@ -16,6 +16,9 @@ |
16 | 16 | # Please submit bugfixes or comments via http://bugs.opensuse.org/ |
17 | 17 | # |
18 | 18 | |
19 | +%define _libname lib3270 | |
20 | +%define _product pw3270 | |
21 | + | |
19 | 22 | %define __strip %{_mingw32_strip} |
20 | 23 | %define __objdump %{_mingw32_objdump} |
21 | 24 | %define _use_internal_dependency_generator 0 |
... | ... | @@ -23,32 +26,27 @@ |
23 | 26 | %define __find_provides %{_mingw32_findprovides} |
24 | 27 | %define __os_install_post %{_mingw32_debug_install_post} \ |
25 | 28 | %{_mingw32_install_post} |
29 | + | |
30 | +#---[ Package header ]------------------------------------------------------------------------------------------------ | |
26 | 31 | |
27 | -#---[ Main package ]-------------------------------------------------------------------------------------------------- | |
28 | - | |
29 | -Summary: TN3270 Access library | |
30 | -Name: mingw32-lib3270 | |
32 | +Summary: TN3270 access library for 32 bits Windows | |
33 | +Name: mingw32-%{_libname} | |
31 | 34 | Version: 5.2 |
32 | - | |
33 | -%define MAJOR_VERSION %(echo %{version} | cut -d. -f1) | |
34 | -%define MINOR_VERSION %(echo %{version} | cut -d. -f2) | |
35 | -%define _libvrs %{MAJOR_VERSION}_%{MINOR_VERSION} | |
36 | - | |
37 | 35 | Release: 0 |
38 | -License: GPL-2.0 | |
36 | +License: LGPL-3.0 | |
39 | 37 | |
40 | 38 | Source: lib3270-%{version}.tar.xz |
41 | 39 | |
42 | -Url: https://portal.softwarepublico.gov.br/social/pw3270/ | |
40 | +URL: https://github.com/PerryWerneck/lib3270 | |
43 | 41 | |
44 | -Group: Development/Libraries/C and C++ | |
42 | +Group: System/Libraries | |
45 | 43 | BuildRoot: /var/tmp/%{name}-%{version} |
46 | 44 | |
47 | -Provides: mingw32(lib:3270) = %{version} | |
48 | - | |
49 | -BuildRequires: autoconf | |
45 | +BuildRequires: autoconf >= 2.61 | |
50 | 46 | BuildRequires: automake |
51 | -BuildRequires: gettext-tools | |
47 | +BuildRequires: gettext-devel | |
48 | +BuildRequires: xz | |
49 | +BuildRequires: fdupes | |
52 | 50 | |
53 | 51 | BuildRequires: mingw32-cross-binutils |
54 | 52 | BuildRequires: mingw32-cross-gcc |
... | ... | @@ -61,77 +59,82 @@ BuildRequires: mingw32(lib:iconv) |
61 | 59 | BuildRequires: mingw32(lib:intl) |
62 | 60 | |
63 | 61 | %description |
62 | +TN3270 access library, originally designed as part of the %{_product} application. | |
64 | 63 | |
65 | -TN3270 access library originally designed as part of the pw3270 application. | |
64 | +For more details, see https://softwarepublico.gov.br/social/pw3270/ . | |
66 | 65 | |
67 | -See more details at https://softwarepublico.gov.br/social/pw3270/ | |
66 | +#---[ Library ]------------------------------------------------------------------------------------------------------- | |
68 | 67 | |
69 | -#---[ Development ]--------------------------------------------------------------------------------------------------- | |
68 | +%define MAJOR_VERSION %(echo %{version} | cut -d. -f1) | |
69 | +%define MINOR_VERSION %(echo %{version} | cut -d. -f2) | |
70 | +%define _libvrs %{MAJOR_VERSION}_%{MINOR_VERSION} | |
70 | 71 | |
71 | -%package devel | |
72 | +%package -n %{name}-%{_libvrs} | |
73 | +Summary: TN3270 Access library | |
74 | +Group: Development/Libraries/C and C++ | |
72 | 75 | |
73 | -Summary: TN3270 Access library development files | |
74 | -Group: Development/Libraries/C and C++ | |
75 | -Requires: %{name} = %{version} | |
76 | +%description -n %{name}-%{_libvrs} | |
77 | +TN3270 access library, originally designed as part of the %{_product} application. | |
76 | 78 | |
77 | -%description devel | |
79 | +For more details, see https://softwarepublico.gov.br/social/pw3270/ . | |
78 | 80 | |
79 | -TN3270 access library for C development files. | |
81 | +%package devel | |
80 | 82 | |
81 | -Originally designed as part of the pw3270 application. | |
83 | +Summary: TN3270 Access library development files | |
84 | +Group: Development/Libraries/C and C++ | |
85 | +Requires: %{name}-%{_libvrs} = %{version} | |
82 | 86 | |
83 | -See more details at https://softwarepublico.gov.br/social/pw3270/ | |
87 | +%description devel | |
88 | +Header files for the TN3270 access library. | |
84 | 89 | |
85 | 90 | #---[ Build & Install ]----------------------------------------------------------------------------------------------- |
86 | 91 | |
87 | 92 | %prep |
88 | 93 | %setup -n lib3270-%{version} |
89 | 94 | |
90 | -NOCONFIGURE=1 ./autogen.sh | |
95 | +NOCONFIGURE=1 \ | |
96 | + ./autogen.sh | |
91 | 97 | |
92 | 98 | %{_mingw32_configure} |
93 | 99 | |
94 | 100 | %build |
95 | -make clean | |
96 | -make all | |
101 | +make all %{?_smp_mflags} | |
97 | 102 | |
98 | 103 | %{_mingw32_strip} \ |
99 | 104 | --strip-all \ |
100 | 105 | .bin/Release/*.dll |
101 | 106 | |
107 | + | |
102 | 108 | %install |
103 | 109 | %{_mingw32_makeinstall} |
110 | +%_mingw32_find_lang %{_libname} langfiles | |
111 | +%fdupes %{buildroot} | |
104 | 112 | |
105 | -%clean | |
106 | -rm -rf %{buildroot} | |
107 | - | |
108 | -#---[ Files ]--------------------------------------------------------------------------------------------------------- | |
109 | - | |
110 | -%files | |
113 | +%files -n %{name}-%{_libvrs} -f langfiles | |
111 | 114 | %defattr(-,root,root) |
112 | -%doc AUTHORS LICENSE README.md | |
113 | 115 | |
114 | -%{_mingw32_libdir}/lib3270.dll | |
115 | -%{_mingw32_libdir}/lib3270.dll.%{MAJOR_VERSION} | |
116 | -%{_mingw32_libdir}/lib3270.dll.%{MAJOR_VERSION}.%{MINOR_VERSION} | |
116 | +%doc AUTHORS README.md | |
117 | +%license LICENSE | |
117 | 118 | |
118 | -%dir %{_mingw32_datadir}/pw3270 | |
119 | +%dir %{_mingw32_datadir}/%{_product} | |
120 | + | |
121 | +%{_mingw32_bindir}/*.dll | |
119 | 122 | |
120 | 123 | %files devel |
121 | 124 | %defattr(-,root,root) |
122 | 125 | |
123 | -%{_mingw32_includedir}/lib3270 | |
126 | +%{_mingw32_libdir}/*.a | |
124 | 127 | |
125 | 128 | %{_mingw32_includedir}/*.h |
129 | +%{_mingw32_includedir}/lib3270 | |
130 | + | |
126 | 131 | %{_mingw32_libdir}/pkgconfig/*.pc |
127 | -%{_mingw32_libdir}/*.a | |
128 | -%{_mingw32_libdir}/*.lib | |
129 | 132 | |
130 | -%dir %{_mingw32_datadir}/pw3270/def | |
131 | -%{_mingw32_datadir}/pw3270/def/*.def | |
133 | +%dir %{_mingw32_datadir}/%{_product}/def | |
134 | +%{_mingw32_datadir}/%{_product}/def/*.def | |
135 | +%{_mingw32_datadir}/%{_product}/def/*.mak | |
132 | 136 | |
133 | -%dir %{_mingw32_datadir}/pw3270/pot | |
134 | -%{_mingw32_datadir}/pw3270/pot/*.pot | |
137 | +%dir %{_mingw32_datadir}/%{_product}/pot | |
138 | +%{_mingw32_datadir}/%{_product}/pot/*.pot | |
135 | 139 | |
136 | 140 | %changelog |
137 | - | ... | ... |
win/x86_64/mingw64-lib3270.spec
1 | 1 | # |
2 | -# spec file for package mingw64-lib3279 | |
2 | +# spec file for package mingw64-%{_libname} | |
3 | 3 | # |
4 | -# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. | |
4 | +# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. | |
5 | 5 | # Copyright (C) <2008> <Banco do Brasil S.A.> |
6 | 6 | # |
7 | 7 | # All modifications and additions to the file contributed by third parties |
... | ... | @@ -16,6 +16,9 @@ |
16 | 16 | # Please submit bugfixes or comments via http://bugs.opensuse.org/ |
17 | 17 | # |
18 | 18 | |
19 | +%define _libname lib3270 | |
20 | +%define _product pw3270 | |
21 | + | |
19 | 22 | %define __strip %{_mingw64_strip} |
20 | 23 | %define __objdump %{_mingw64_objdump} |
21 | 24 | %define _use_internal_dependency_generator 0 |
... | ... | @@ -23,34 +26,27 @@ |
23 | 26 | %define __find_provides %{_mingw64_findprovides} |
24 | 27 | %define __os_install_post %{_mingw64_debug_install_post} \ |
25 | 28 | %{_mingw64_install_post} |
29 | + | |
30 | +#---[ Package header ]------------------------------------------------------------------------------------------------ | |
26 | 31 | |
27 | -#---[ Main package ]-------------------------------------------------------------------------------------------------- | |
28 | - | |
29 | -Summary: TN3270 Access library | |
30 | -Name: mingw64-lib3270 | |
32 | +Summary: TN3270 access library for 64 bits Windows | |
33 | +Name: mingw64-%{_libname} | |
31 | 34 | Version: 5.2 |
32 | - | |
33 | -%define MAJOR_VERSION %(echo %{version} | cut -d. -f1) | |
34 | -%define MINOR_VERSION %(echo %{version} | cut -d. -f2) | |
35 | -%define _libvrs %{MAJOR_VERSION}_%{MINOR_VERSION} | |
36 | - | |
37 | - | |
38 | 35 | Release: 0 |
39 | -License: GPL-2.0 | |
36 | +License: LGPL-3.0 | |
40 | 37 | |
41 | 38 | Source: lib3270-%{version}.tar.xz |
42 | 39 | |
43 | -Url: https://portal.softwarepublico.gov.br/social/pw3270/ | |
40 | +URL: https://github.com/PerryWerneck/lib3270 | |
44 | 41 | |
45 | -Group: Development/Libraries/C and C++ | |
42 | +Group: System/Libraries | |
46 | 43 | BuildRoot: /var/tmp/%{name}-%{version} |
47 | 44 | |
48 | -Provides: mingw64(lib:3270) = %{version} | |
49 | -Provides: mingw64(lib:3270-%{_libvrs}) = %{version} | |
50 | - | |
51 | -BuildRequires: autoconf | |
45 | +BuildRequires: autoconf >= 2.61 | |
52 | 46 | BuildRequires: automake |
53 | -BuildRequires: gettext-tools | |
47 | +BuildRequires: gettext-devel | |
48 | +BuildRequires: xz | |
49 | +BuildRequires: fdupes | |
54 | 50 | |
55 | 51 | BuildRequires: mingw64-cross-binutils |
56 | 52 | BuildRequires: mingw64-cross-gcc |
... | ... | @@ -63,80 +59,82 @@ BuildRequires: mingw64(lib:iconv) |
63 | 59 | BuildRequires: mingw64(lib:intl) |
64 | 60 | |
65 | 61 | %description |
62 | +TN3270 access library, originally designed as part of the %{_product} application. | |
66 | 63 | |
67 | -TN3270 access library originally designed as part of the pw3270 application. | |
68 | - | |
69 | -See more details at https://softwarepublico.gov.br/social/pw3270/ | |
64 | +For more details, see https://softwarepublico.gov.br/social/pw3270/ . | |
70 | 65 | |
71 | -#---[ Development ]--------------------------------------------------------------------------------------------------- | |
66 | +#---[ Library ]------------------------------------------------------------------------------------------------------- | |
72 | 67 | |
73 | -%package devel | |
68 | +%define MAJOR_VERSION %(echo %{version} | cut -d. -f1) | |
69 | +%define MINOR_VERSION %(echo %{version} | cut -d. -f2) | |
70 | +%define _libvrs %{MAJOR_VERSION}_%{MINOR_VERSION} | |
74 | 71 | |
75 | -Summary: TN3270 Access library development files | |
76 | -Group: Development/Libraries/C and C++ | |
77 | -Requires: %{name} = %{version} | |
72 | +%package -n %{name}-%{_libvrs} | |
73 | +Summary: TN3270 Access library | |
74 | +Group: Development/Libraries/C and C++ | |
78 | 75 | |
79 | -Provides: mingw64-lib3270-devel = %{version} | |
80 | -Conflicts: otherproviders(mingw64-lib3270-devel) | |
76 | +%description -n %{name}-%{_libvrs} | |
77 | +TN3270 access library, originally designed as part of the %{_product} application. | |
81 | 78 | |
82 | -%description devel | |
79 | +For more details, see https://softwarepublico.gov.br/social/pw3270/ . | |
83 | 80 | |
84 | -TN3270 access library for C development files. | |
81 | +%package devel | |
85 | 82 | |
86 | -Originally designed as part of the pw3270 application. | |
83 | +Summary: TN3270 Access library development files | |
84 | +Group: Development/Libraries/C and C++ | |
85 | +Requires: %{name}-%{_libvrs} = %{version} | |
87 | 86 | |
88 | -See more details at https://softwarepublico.gov.br/social/pw3270/ | |
87 | +%description devel | |
88 | +Header files for the TN3270 access library. | |
89 | 89 | |
90 | 90 | #---[ Build & Install ]----------------------------------------------------------------------------------------------- |
91 | 91 | |
92 | 92 | %prep |
93 | 93 | %setup -n lib3270-%{version} |
94 | 94 | |
95 | -NOCONFIGURE=1 ./autogen.sh | |
95 | +NOCONFIGURE=1 \ | |
96 | + ./autogen.sh | |
96 | 97 | |
97 | -%{_mingw64_configure} \ | |
98 | - --with-sdk-version=%{version} | |
98 | +%{_mingw64_configure} | |
99 | 99 | |
100 | 100 | %build |
101 | -make clean | |
102 | -make all | |
101 | +make all %{?_smp_mflags} | |
103 | 102 | |
104 | 103 | %{_mingw64_strip} \ |
105 | 104 | --strip-all \ |
106 | 105 | .bin/Release/*.dll |
107 | 106 | |
107 | + | |
108 | 108 | %install |
109 | 109 | %{_mingw64_makeinstall} |
110 | +%_mingw64_find_lang %{_libname} langfiles | |
111 | +%fdupes %{buildroot} | |
110 | 112 | |
111 | -%clean | |
112 | -rm -rf %{buildroot} | |
113 | - | |
114 | -#---[ Files ]--------------------------------------------------------------------------------------------------------- | |
115 | - | |
116 | -%files | |
113 | +%files -n %{name}-%{_libvrs} -f langfiles | |
117 | 114 | %defattr(-,root,root) |
118 | -%doc AUTHORS LICENSE README.md | |
119 | 115 | |
120 | -%{_mingw64_libdir}/lib3270.dll | |
121 | -%{_mingw64_libdir}/lib3270.dll.%{MAJOR_VERSION} | |
122 | -%{_mingw64_libdir}/lib3270.dll.%{MAJOR_VERSION}.%{MINOR_VERSION} | |
116 | +%doc AUTHORS README.md | |
117 | +%license LICENSE | |
118 | + | |
119 | +%dir %{_mingw64_datadir}/%{_product} | |
123 | 120 | |
124 | -%dir %{_mingw64_datadir}/pw3270 | |
121 | +%{_mingw64_bindir}/*.dll | |
125 | 122 | |
126 | 123 | %files devel |
127 | 124 | %defattr(-,root,root) |
128 | 125 | |
129 | -%{_mingw64_includedir}/lib3270 | |
126 | +%{_mingw64_libdir}/*.a | |
130 | 127 | |
131 | 128 | %{_mingw64_includedir}/*.h |
129 | +%{_mingw64_includedir}/lib3270 | |
130 | + | |
132 | 131 | %{_mingw64_libdir}/pkgconfig/*.pc |
133 | -%{_mingw64_libdir}/*.a | |
134 | -%{_mingw64_libdir}/*.lib | |
135 | 132 | |
136 | -%dir %{_mingw64_datadir}/pw3270/def | |
137 | -%{_mingw64_datadir}/pw3270/def/*.def | |
133 | +%dir %{_mingw64_datadir}/%{_product}/def | |
134 | +%{_mingw64_datadir}/%{_product}/def/*.def | |
135 | +%{_mingw64_datadir}/%{_product}/def/*.mak | |
138 | 136 | |
139 | -%dir %{_mingw64_datadir}/pw3270/pot | |
140 | -%{_mingw64_datadir}/pw3270/pot/*.pot | |
137 | +%dir %{_mingw64_datadir}/%{_product}/pot | |
138 | +%{_mingw64_datadir}/%{_product}/pot/*.pot | |
141 | 139 | |
142 | 140 | %changelog | ... | ... |