tinycobol/test.code/00_FernandoWuthstrack/tcl/api.doc

181 lines
6.5 KiB
Plaintext

Documentação da interface do TinyCobol com tcl/tk.
(C) Copyright 2001, 2004 - Rildo Pragana <rildo@pragana.net>
Este software é livre para todos os usos, inclusive em aplicações
comerciais. Crédito de autoria é agradecido, mas não explicitamente
requerido. O software e a documentação seguem a mesma licença que a
linguagem tcl. A única coisa que você não pode fazer, essencialmente, é
se declarar autor desse programa. Apesar de ter sido escrito para uso
conjunto com o TinyCobol, este programa é disponibilizado separadamente
e segue licença diferente do TinyCobol.
Changes:
20040513 - adicionada função stcleval para avaliar um comando
arbitrário no tcl, retornando o resultado (primeiros 80 chars)
(veja ítem 1.d, abaixo)
1. Utilização básica
a) Chamar a função "initTcl" antes de qualquer outra, uma só vez.
b) Declarar (Cobol) um ítem de grupo contendo todas as variáveis a
transferir entre o cobol e o tcl, sendo todos os ítens do grupo com
picture X.
(*ELIMINADO*)Declarar um contador com o tamanho total desse item de grupo,
em caracteres.
Finalmente, declarar uma variável contendo o nome do
script tcl a ser executado, podendo ser dado o caminho (path) completo,
ou somente o nome, se este estiver no diretório corrente. No lugar da variável,
podemos entrar diretamente uma string literal, contendo o nome do script
seguido de pelo menos um espaço (exemplo: "formA.tcl ").
c) executar a chamada à função (definida em C) tcleval, com os seguintes
argumentos: variável de grupo com a transferência,
e uma variável texto PIC X(64) com o nome do script tcl a ser avaliado,
ou literal terminado por espaço (veja acima).
01 DATA-BLOCK.
05 NAME PIC X(40).
05 W-ADDRESS PIC X(50).
05 PHONE PIC X(15).
05 END-PGM PIC X.
05 QUICK-RET PIC X.
77 GUI-01 PIC X(64) VALUE "formA.tcl".
CALL "tcleval" USING DATA-BLOCK DATA-BLOCK-SIZE GUI-01
A ordem de carga dos scripts é a seguinte: (i) o script "cobtools"
definido internamente no programa C é avaliado; (ii) o script definido
pelo usuário é avaliado, mas suas variáveis globais (definidas em
cobol_fileds) não são ainda inicializadas. Podemos aguardar essa
inicialização adicionando um "trace" na variável "ready", como no
exemplo abaixo: (*MODIFICADO*)
trace add variable ::ready write check_quickret
No lugar do trace acima (que deve ser evitado de agora em diante), podemos
definir a proc "cobol_preprocess" que será executado quando todas as variáveis
globais forem definidas.
Assim, a rotina "check_quickret" será executada logo após definidas
todas as variáveis globais. Somente após essa definição, poderemos
chamar a função "do_exit", que retorna do tcl para o cobol. Da segunda,
terceira, e demais vezes que o mesmo script é chamado, sem uma chamada
prévia à função "newGui", não teremos mais interpretações do script
definido pelo usuário, mas apenas a chamada da proc "cobol_update", se
esta for definida. Após um "call newGui", a função cobol_update não é
mais executada, e o novo script (ou o mesmo) passado como argumento na
chamada a "tcleval" será reinterpretado. A chamada "newGui" também
destroi todos os widgets filhos do toplevel "." (ponto) do tk.
d) Opcionalmente, podemos chamar a função "stcleval" para executar um
script arbitrário no tcl, retornando o resultado como string. Nesse
caso, a variável T-STRING (exemplo abaixo) será uma string terminada
pelo caracter NULL (LOW-VALUES ou X"00" em Cobol) e a variável T-RESULT
deverá conter pelo menos 80 caracteres, ou haverá estouro de memória.
CALL "tcleval" USING T-STRING T-RESULT
Essa chamada precisa ser realizada com bastante conhecimento (e
responsabilidade) do programador, pois podera deixar o interpretador em
um estado instável se um comando errado ou incompleto for passado.
Entretanto, ela pode ser útil para fazer certos tipos de testes, ou para
passar de maneira bastante rápida atribuições para variáveis ou
consultas de seus valores entre o cobol e o tcl.
e) Uma sugestão aos programadores Cobol para fazerem testes de programas
em tcl, é chamar uma console tkcon (comando "source tkcon") de uma
interface GUI normal criada no tctcl. Executando "Attach to Main(tk)" ou
Ctrl-3 no tckon, poderemos acessar as variáveis e procedures definidas
pelo nosso programa tcl, inclusive as variáveis passadas pelo Cobol. Da
mesma forma, outros programas como o tkinspect, etc, podem ser usados
com a mesma finalidade. No exemplo estamos chamando o tkcon já instalado no
nosso sistema (/usr/local/bin/tkcon). Se o seu estiver em outro lugar,
modifique o comando associado ao botão "tkcon", refletindo o local correto.
2. Scripts executados (evaluated) na interface
Os tres fragmentos de script abaixo são interpretados (melhor dizendo,
"evaluated") nas seguintes situações:
cobtools -- antes de carregar o script definido pelo usuário
wait_ready -- após carregado o script do usuário, aguardando a chamada
da proc do_exit para retornar ao cobol
newgui -- na chamada da função C newGui() pelo programa cobol.
########## cobtools
set argc 0
set argv {}
proc split_fields {} {
global data_block cobol_fields result_format
set ix 0
set result_format ""
foreach {varname size} $cobol_fields {
global $varname
set $varname [string range $data_block $ix [expr $ix+$size-1]]
incr ix $size
append result_format "%-$size.${size}s"
}
}
proc do_exit {} {
global result_format result ready cobol_fields
set vars {}
foreach {varname size} $cobol_fields {
upvar $varname v
lappend vars $v
}
set result [eval format $result_format $vars]
set ready 1
}
proc cobol_update {} { }
######### wait_ready
split_fields
set ready 0
tkwait variable ready
######### newgui
foreach child [winfo children .] {
destroy $child
}
3. Observações
As seguintes variáveis globais são reservadas pela interface e não devem ser
usadas em scripts:
data_block, ready, cobol_fields, result, result_format
exceto onde for explicitamente documentado.
Dúvidas e sugestões sobre o programa e sua documentação são benvindas.
Se alguém quiser traduzir para outras línguas, por gentileze me envie o
documento traduzido para eu anexar ao pacote.
4. Windows
Windows é uma plataforma cheia de problemas, por isso, siga rigorosamente as
seguintes instruções para obter resultados satisfatórios.
1- Instale MinGW/MSYS.
2- Instale ActiveTcl 8.4.4 ou posterior, no diretório default C:/Tcl
3- Execute em um terminal o comando (atenção: barras não não invertidas):
export TCL-LIBRARY=C:/Tcl/lib/tcl8.4/
4- Siga as instruções genéricas para Linux/Unix.
Recife, 24 de março de 2004
Rildo Pragana