Commit c9297c1affada8902df7b76329ebc9dc93d0591d

Authored by Perry Werneck
Committed by GitHub
2 parents 66f3ee00 dce20407

Merge pull request #8 from PerryWerneck/develop

Updating to latest develop code.
.github/auto_assign.yml 0 → 100644
... ... @@ -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 &quot;&quot;
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 &quot;Erro 3270&quot;
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 &quot;&quot;
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 &quot;&quot;
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 &quot;Reconecta automaticamente caso o servidor desconecte&quot;
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 &quot;Cursor piscante&quot;
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 &quot;Can&#39;t decode certificate revocation list&quot;
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 &quot;Não foi possível setar o socket para o modo não blocante.&quot;
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 &quot;&quot;
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 &quot;Falha na assinatura do certificado&quot;
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 &quot;Conexão falhou&quot;
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 &quot;Largura atua da tela em colunas&quot;
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 &quot;Erro na conversão de dados&quot;
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 &quot;Descrição do estado de segurança atual&quot;
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 &quot;Tabela de caracteres para a tela&quot;
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 &quot;Habilita trace da negociação de segurança&quot;
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 &quot;Error \&quot;%s\&quot; writing to local file (rc=%d)&quot;
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 &quot;Erro ao ler ou gravar no host: Transferência cancelada&quot;
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 &quot;Transferência completa com registros segmentados&quot;
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 &quot;Erro de formato no campo \&quot;notAfter\&quot; do certificado&quot;
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 &quot;Got a bad formatted certificate revocation list from LDAP server&quot;
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 &quot;IBM AS/400&quot;
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 &quot;Opção xxxxxxxx inválida: Transferência cancelada&quot;
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 &quot;Teclado está bloqueado&quot;
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 &quot;Nome do modelo&quot;
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 &quot;Erro de rede&quot;
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 &quot;&quot;
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 &quot;Outro (VM/CMS)&quot;
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 &quot;Especificação de arquivo PC incorreta: Transferência cancelada&quot;
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 &quot;RPQ: Não foi possível resolver &#39;%s&#39;: %s&quot;
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 &quot;Requisição falhou&quot;
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 &quot;Reset&quot;
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 &quot;&quot;
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 &quot;Erro SSL&quot;
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 &quot;Pesquisa não produziu nenhum valor&quot;
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 &quot;Conexão segura efetuada com sucesso.&quot;
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 &quot;Selecionar tudo&quot;
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 &quot;Certificado auto assinado&quot;
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 &quot;Erro ao enviar dados para a rede&quot;
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 &quot;Ainda existe texto para colar&quot;
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 &quot;Sys Req&quot;
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 &quot;Nome do terminal&quot;
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 &quot;&quot;
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 &quot;&quot;
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 &quot;Erro inesperado&quot;
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 &quot;Unsupported RPQ term&quot;
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 &quot;&quot;
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 &quot;Revisão da lib3270&quot;
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
... ... @@ -90,7 +90,7 @@
90 90 }
91 91  
92 92 // Do I have a defined host?
93   - if(!(hSession->host.current && hSession->host.srvc))
  93 + if(!(hSession->host.current && hSession->host.srvc && *hSession->host.current && *hSession->host.srvc))
94 94 {
95 95 errno = EINVAL;
96 96 return 0;
... ...
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
... ... @@ -98,6 +98,7 @@ int ssl_ctx_init(H3270 *hSession, SSL_ERROR_MESSAGE * message)
98 98  
99 99 ssl_3270_ex_index = SSL_get_ex_new_index(0,NULL,NULL,NULL,NULL);
100 100  
  101 +
101 102 #ifdef SSL_ENABLE_CRL_CHECK
102 103  
103 104 // Enable CRL check
... ...
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
... ...