			Tutorial Tcl/Tk
			===========================================

			Danilo Pacheco Martins <Danilo@infocont.com.br>
			Fernando Wuthstrack <fernando@infocont.com.br>


			Jueves, 21 de Enero del 2003



Resumen:
=======

Este tutorial tiene como objetivo ser una referencia en el aprendizaje del uso
de Tcl/Tk. Es una herramienta ptima para desarrollo grfico y proporciona una
gran ventaja al poder ser ejecutado en varias plataformas sin que sea necesario
modificar los archivos fuentes. 
Dudas, crticas y sugerencias favor dirigirlas al e-mail:danilo@infocont.com.br.
--------------------------------------------------------------------------------

Contenido:

1.-	Qu es Tcl/Tk?.
2.-	Conceptos bsicos de Tcl/Tk.
3.-	Haciendo a Cobol "conversar" con Tcl/Tk.
4.-	Apndice.

--------------------------------------------------------------------------------

1.- Qu es Tcl/Tk?.

    Tcl (Tcl Command Language) es un lenguaje de scripts usado por medio milln
    de programadores alrededor del mundo y se ha tornado en un componente 
    crtico en miles de corporaciones. Tiene una sintaxis simple y sus programas
    pueden ser usados como aplicaciones "standalone" o incrustadas (embedded) en 
    otras aplicaciones.
    Lo mejor de todo es que Tcl es Open Source y por tanto completamente libre y
    gratis.
    Tk es un "toolkit" para crear interfaces grficas de usuario, posibilitando
    as crear GUI's poderosas e increblemente rpidas, al contrario de 
    aplicaciones desarrolladas en otros lenguajes interpretados y hasta 
    compilados. Ha probado ser tan popular que ahora est incorporado en todas
    las distribuciones Tcl. 
    Tanto Tcl como Tk fueron desarrollados por John Ousterhout. Programadores 
    del mundo entero han seguido el ejemplo y construyen sus propias extensiones
    de Tcl. Hay centenares de extensiones de Tcl para todas las necesidades de 
    las aplicaciones. Tcl y Tk son altamente porttiles y son ejecutados en
    prcticamente todos los sabores de Unix, (Linux, Solaris, IRIX, AIX, *BSD*).
    No podemos dejar de decir que tienen soporte para Windows y Macintosh. Hay
    varias empresas que proveen binarios de precompiladores para varias 
    plataformas.
    Tcl/Tk 8.3.4 era la versin estable para cuando se escribi este tutorial.
    Para esa versin fueron incluidas varias caractersticas que hacen de Tcl
    un lenguaje de scripts altamente recomendado para aplicaciones comerciales.
    Tcl/Tk 8.4a4 era la versin de desarrollo ms reciente para cuando se
    escribi este documento. Tcl/Tk son Open Source y estn en desarrollo
    continuo, entre los ingenieros de Scriptics (www.stripctics.com) y usuarios
    de la comunidad de Tcl.  Striptics mantiene un repositorio CVS con el cdigo
    fuente de Tcl/Tk. Todos pueden enviar adiciones y correcciones a ese cdigo
    fuente de Tcl/Tk. En caso de que encuentre algn error en Tcl/Tk, usted 
    podr comunicarlo directamente a Scriptics utilizando un repositorio de Bugs.
        
    1.1.-   Tcl: Una plataforma de integracin:

            Hoy en da, uno de los grandes problemas enfrentados por los 
            desarrolladores de soluciones es la diversidad de plataformas que 
            pueden ser encontradas en las empresas. Tcl es llamado el programa 
            para la integracin de aplicaciones.
            Para proyectos, la plataforma de integracin resulta 
            estratgicamente importante en cuanto al Sistema Operativo y a los
            Bancos de Datos.
            Tcl es la mejor plataforma de integracin debido a su velocidad, 
            cantidad de funcionalidades y caractersticas para proyectos de 
            desarrollo rpido como lineas de seguridad, internacionalizacin
            y comportamiento multiplataforma.
            La ms reciente versin de Tcl provee todas las caractersticas para
            satisfacer las necesidades de cualquier proyecto e incluye toda la
            integracin necesaria en un lenguaje de scripts.
            Los comentarios hechos arriba tienen como base el sitio web:
            http://tclbrasil.cipsga.org.br/tcltk.h

--------------------------------------------------------------------------------

2.- Conceptos bsicos de Tcl/Tk.

    2.1.-   VENTANA PRINCIPAL.

            2.1.1.- Definiendo Ttulo de la Ventana:
                    wm title . "ttulo de la ventana"

            2.1.2.- Definiendo Tamao de la Ventana:
                    wm geometry . XXXxYYY

                    Ejemplo:    wm geometry . 500x500
                
    2.2.-   VARIABLES.
    
            2.2.1.- Declarando las Variables que vienen de Cobol:
            
                    Las variables recibidas de un programa Cobol tienen 
                    obligatoriamente que ser del tipo "string" y tener el mismo
                    tamao declarado en ambos (tanto en el programa en Cobol
                    como en el script Tcl/Tk). La forma de pasar parmetros de
                    Cobol a Tcl/Tk y viceversa ser tratada ms adelante. La
                    siguiente declaracin de grupo "cobol_fields" es obligatoria
                    y no puede ser alterada:
                    
                        set cobol_fiels {
                            variable1   5
                            variable2   25
                            variable3   40
                        }
                    Observacin:  Un nmero par de nombres con su tamao.
                    
            2.2.2.- Definiendo el valor de una Variable:
                
                    Para definir el valor de una variable deber usar la
                    siguiente sintaxis:
                    
                        vnome set Jose
                        
                    En este caso el valor "Jose" es insertado en la variable 
                    "vnome". El valor especificado _no_ requiere estar entre
                    comillas dobles ("") a no ser que se quiera que el valor a
                    insertar contenga _ms_ de una palabra. Ej: "Jose Da Silva".
                    
            2.2.3.- Recibiendo el valor de una Variable:

                    Siempre que quiera recibir el valor de una variable, sta 
                    tendr que estar precedida por el signo dolar ($). Ej:

                        vnome1 set $vnome2

                    En este caso la variable "vnome1" recibir el valor de la
                    variable "vnome2". 
                    

    2.3.-   INSERTANDO UNA CONDICIN:
    
            
            El comando "if" es utilizado para evaluar una condicin pudiendo el
            resultado ser "verdadero" o "falso". En caso de que la condicin sea
            verdadera se ejecutarn una serie de comandos, pero si es falsa, se
            ejecutarn entonces otros comandos, todo de acuerdo a lo definido 
            por el programador.

            Sintaxis:
            
            if {condicin1} [then] {cuerpo si verdadera} [else {cuerpo si falsa}
                [elseif {condicin 2} {cuerpo}]]
                
            donde:

                {condicin1}, es la primera condicin a ser evaluada.
                [then], es opcional para la condicin que ser evaluada, es 
                        utilizado para indicar que es lo que ser ejecutado en
                        caso de que la condicin sea verdadera.
                {cuerpo si verdadera}, comandos que sern ejecutados si la 
                                       condicin es verdadera.
                [else], es utilizado para indicar algo que deber ser hecho si
                        la condicin es evaluada como falsa.
                {cuerpo si falso}, comandos que ser ejecutados cuando la
                                   condicin evaluada resulte falsa.
                [elseif], es utilizado para hacer una segunda verificacin
                          condicional dentro del mismo "if".
                {condicin2}, es una segunda condicin que ser evaluada si
                              existe el "elseif".
                {cuerpo}, lo mismo que "cuerpo si verdadera".
                
    2.4.-   INSERTANDO UNA RUTINA DE REPETICIN:
    
            El comando "while" permitir ejecutar una serie de comandos en caso 
            de que la primera condicin sea verdadera. Si se verifica que dicha
            condicin es falsa, no ser ejecutado ningn comando del cuerpo de 
            la instruccin. Es semejante al PERFORM de Cobol.

            Sintaxis:
            
                while {condicin} {cuerpo}
                
            donde:

                {condicin}, ser la condicin verificada en cada "loop" o
                             ciclo y que indicar si continua o no el lazo o
                             bucle de repeticin.
                {cuerpo}, son los comandos que debern ser repetidos en cada
                          "loop" (ciclo).
                          
            Ejemplo:
            
                set var1 0
                while {$var1 < 10}
                    incr var1
                }
                
    2.5.-   PROCEDIMIENTOS:

            Es posible en Tcl crear Procedimientos (semejante a PERFORM en
            Cobol), con la siguiente sintaxis:
            
                proc asigna_valor {a b c} {
                    set valor1 a
                    set valor2 b
                    set valor3 c
                }

            Una llamada al procedimiento anterior sera hecha de la siguiente
            manera:
            
                asigna_valor vara varb varc
                
    2.6.-   BIND:
    
            El comando "bind" es utilizado para asociar eventos del teclado o 
            del mouse a objetos de Tk.
            
            Ejemplo:
            
                label .lab
                entry .entcodigo
                bind  .entcodigo <FocusIn> {.lab configure -text "Ha ingresado
                                                    al campo de cdigo"}
                bind  .entcodigo <FocusOut> {.lab configure -text "Ha salido 
                                                    del campo cdigo"}

            En este ejemplo, cuando el cursor entra en "entcodigo" o pasa sobre
            la etiqueta "lab", se mostrar el mensaje "Ha ingresado al campo 
            cdigo" y cuando el cursor sale de all, se mostrar el mensaje "Ha
            salido del campo cdigo".
            
    2.7.-   COMPONENTES TK:
    
            Existen varios componentes de Tk. En nuestro tutorial usamos: 
            "entry", "label", "button" y "listbox". Todo nombre atribuido a un
            componente debe ser precedido por un punto ".".
            
            2.7.1.- LABEL:
            
                    Label es un componente de texto usado para mostrar textos 
                    (ej: identificacin de campos). Grotescamente podra ser
                    comparado con el DISPLAY de Cobol. La sintaxis para crear
                    un "label" es la siguiente:
                    
                        label nombre_del_label
                        
                    Ejemplo:
                    
                        label .codigo
                        
                    En este caso se ha creado un "label" (etiqueta) con el 
                    nombre "codigo".
                    Existen varias propiedades para un "label", como por
                    ejemplo: -text, -foreground, -background, etc.
                    
                    Ejemplo:
                    
                        label .codigo -text "Cdigo" -foreground blue
                                                     -background white

                    En este caso el valor del [label] "codigo" ser "Cdigo" y
                    estar escrito con letra de color azul con fondo blanco.

                    Observacin: Si Usted quiere que el texto del "label" 
                                 tenga ms de una palabra, deber encerrarlo
                                 entre comillas dobles (" "). Ejemplo:
                                 
                                 -text "InfoCont Sistemas Integrados"
                                 
                    Para asociar la propiedad -text a una variable deber 
                    declarar dicha variable de la siguiente manera:
                    
                        -textvariable var
                        
                    En este caso, siempre que la variable "var" cambie su valor
                    el texto del "label" tambin ser modificado.
                    
            2.7.2.- ENTRY:
            
                    Entry es un componente que permite atribuir valor y 
                    propiedades a texto introducido mediante teclado. Semejante
                    a ACCEPT de Cobol.
                    La sintaxis para crear un "entry" es como sigue:
                    
                        entry nombre_del_entry
                        
                    Ejemplo:
                    
                        entry .direccion
                        
                    Ac se ha creado un "entry" con el nombre "direccion".
                    
                    Existen varias propiedades para un "entry" como: -text,
                    -foreground, -background, etc.
                    
                    Ejemplo:
                    
                        entry .direccion -text "Domicilio" -foreground blue
                                                           -background white
                                                         
                    En este ejemplo el [entry] "direccion" actualizar el valor
                    de la variable "Domicilio" cuyo texto lucir con letra de
                    color azul y fondo blanco.
                    
            2.7.3.- BUTTON:

                    Button es un componente que ejecuta un procedimiento cuando
                    es accionado. Su sintaxis es como sigue:
                    
                        button .nombre_del_botn
                        
                    Ejemplo:

                        button .but

                    En este caso se est creando un botn con el nombre "but".
                    Existen varias propiedades para un botn, as tenemos: -text
                    -foreground, -background, -command, etc.
                    
                    Ejemplo:
                    
                        button .but -text "Salir" -foreground blue 
                                                                -command {exit}
                        
                    Aqu, el rtulo (etiqueta) del botn "but" ser "Salir" con
                    letra azul y cerrar el panel (ventana) cuando sea pulsado.
                    Si desea ejecutar ms de un proceso cuando un botn es
                    accionado deber separar un proceso de otro mediante ";"
                    (punto y coma).
                    
            2.7.4.- LISTBOX:
            
                    Es un componente que muestra una lista de items. La sintaxis
                    para crear un "listbox" es la siguiente:
                    
                        listbox .lista
                        
                    En este caso se ha creado un "listbox" con el nombre "lista".
                    Existen varias propiedades para un "listbox", as tenemos:
                    -selectmode, -yscrollcommand, etc.
                    
                    Ejemplo:
                    
                        listbox .lista -selectmode browse -yscrollcommand 
                                                                {-rolagemv set}
                                                                
                    En este ejemplo se ha definido el tipo de seleccin como
                    "browse" y se asoci a una barra de desplazamiento vertical, 
                    la cual ser usada cuando el nmero de items sea superior al
                    tamao fsico del componente (vide scrollbar).
                    
            2.7.5.- SCROLLBAR:

                    Es un componente que sirve como barra de desplazamiento para
                    otros componentes. Su sintaxis es:
                    
                        scrollbar nombre_del_scrollbar
                        
                    Existen varias propiedades para un "scrollbar", a saber:
                    -orient y -command.
                    
                    Ejemplo:
                    
                        listbox .lista -selectmode browse -yscrollcommand 
                                                                {-rolagemv set}
                        scrollbar .rolagemv -orient vertical -command
                                                                {.lista view}
                                                                
                    En este caso se crea una "listbox" y una "scrollbar", donde
                    la "scrollbar" es vertical y se mover hacia arriba y/o
                    hacia abajo de la "lista" definida con el comando "listbox".
                    
            2.7.6.- TOPLEVEL:

                    Es un comando que crea una nueva ventana y responde a la 
                    siguiente sintaxis:
                    
                        toplevel .nueva_ventana
                        
                    Ejemplo:
                    
                        toplevel .catastro
                        
                    Con este comando se crea una nueva ventana de nombre 
                    "catastro". Para asignar la altura a la ventana se utiliza
                    el parmetro "-height altura_ventana", y para especificar
                    el ancho de la ventana se usa "-width ancho_ventana".
                    Si quiere crear algn componente dentro de la ventana, 
                    deber colocar el nombre de esta ltima antes del nombre 
                    del componente, por ejemplo:
                    
                        button .catastro.but -text "Salir" -command {exit}
                        
                    En este ejemplo se crea un botn llamado "but" dentro de la
                    ventana llamada "catastro". El rtulo o ttulo del botn 
                    ser "Salir" y cuando sea presionado se proceder a terminar
                    el programa.
                    
            2.7.7.- PLACE:
            
                    Es un comando cuya utilidad es la de posicionar objetos 
                    dentro de una ventana. Su sintaxis es como sigue:
                    
                        place objeto -x pos_horz -y pos_vert -height alto 
                                                                    -width ancho

                    Descripcin de Parmetros:
                    
                    -x : indica cuantos pixels horizontales abarcar el objeto.
                    -y :    "      "       "   verticales       "     "    "  .
                    -height : indica la altura del objeto en pixels.
                    -width  :    "   el ancho   "    "     "    "  .
                    
                    Ejemplo:
                    
                        place .label -x 10 -y 15 -height 20 -width 170
                        
                    En el ejemplo, el objeto "label" estar a 10 pixels del lado
                    izquierdo y a 15 pixels del lado superior de la ventana 
                    creada y medir 20 pixels de alto y 170 pixels de ancho.
                    
    2.9.-   Paquete IWIDGETS:
    
            El IWidget es una biblioteca que provee acceso a otros componentes,
            como: Combobox y EntryField (campos editados).
            Antes de utilizar un componente del paquete IWidgets tendr que 
            declarar que va a usar componentes de esa biblioteca; para hacer
            esto digite el siguiente comando:
            
                package require Iwidgets
                iwidgets::tipo_de_componente nombre_del_componente
                
            Recordando que todo componente debe ser precedido por un punto ".".
            En nuestro programa usamos dos componentes de IWidgets: combobox y
            entryfield.
            
            2.9.1.- Componente IWidgets ENTRYFIELD:
            
                    Para insertar un "entryfield" deber usar la siguiente 
                    sintaxis:
                    
                        iwidgets::entryfield nombre_del_componente
                        
                    En nuestro tutorial usamos las siguientes opciones para 
                    crear un "entryfield": -validate y -textvariable.
                    La opcin -validate es ejecutada cuando se pulsa cualquier
                    tecla. En nuestro programa llamamos un procedimiento de la
                    siguiente forma: -validate {verificacion %W "%c"}. En este
                    caso se llamar al procedimiento "verificacion" partiendo
                    del hecho de que "%W" es el nombre del componente y "%c" es
                    el caracter que fu insertado (digitado).
                    
            2.9.2.- Componente IWidgets COMBOBOX:
            
                    Para insertar un "combobox" debe seguirse la siguiente 
                    sintaxis:
                    
                        iwidgets::combobox nombre_del_componente
                        
                    En nuestro tutorial usamos la opcin -selection command,
                    la cual disparar un comando cuando una opcin sea 
                    seleccionada, Ejemplo:

                        -selection command {set tcluf "[.cbuf getcurselection]"}

                    En este caso, cuando una opcin es seleccionada, la variable
                    "tcluf" recibir el valor del item seleccionado en el 
                    "combobox" (.cbuf).
                    Para insertar un item al final de la lista del "combobox" se
                    usa la siguiente sintaxis:
                    
                        nombre_combobox insert list end item_a_ser_insertado
                        
                    Ejemplo:
                    
                        .cbuf insert list end Dom Lun Mar Mie Jue Vie Sab
                        
                    Ac sern ingresados (agregados) los das de la semana. Para
                    referenciar un item cuyo nombre tenga ms de una palabra,
                    deber colocar su nombre entre comillas dobles (" ").
                    Para definir un valor para un "combobox" deber hacerse 
                    mediante el siguiente comando:
                    
                        nombre_combobox selection set item
                        
                    Ejemplo:

                        .cbuf selection set $tclsem
                        
                    En este caso el valor definido para el "combobox" es la
                    variable "tclsem" recordando que este item atribuido al
                    "combobox" debe existir en la lista. En caso contrario se
                    producir un error, por ello debe tenerse cuidado cuando
                    se asigna un item a una variable.
--------------------------------------------------------------------------------                    

3.- Haciendo a Cobol "conversar" con Tcl.

    3.1.-   Trabajando con las variables en Cobol:
    
            Las variables asociadas a Tcl/Tk debern ser declaradas en el
            WORKING-STORAGE SECTION. Usted deber declarar una variable de 
            nivel 01 a la cual pertenecen las variables cuyos valores sern 
            intercambiados. Los nombres de dichas variables quedan a su 
            criterio. Tambin ser necesario declarar una variable de tipo
            COMP PIC 9(12) que servir para contener la suma de los tamaos
            de las variables que sern intercambiadas Cobol <--> Tcl/Tk.
            Adems ser necesaria una variable ms del tipo PIC X(64) que
            contendr el nombre del programa(script) en Tcl/Tk.
            A continuacin un ejemplo:
            
                01  VARIABLES-TCL.
                    03  TCL-CODIGO      PIC X(04).
                    03  TCL-NOMBRE      PIC X(40).
                    03  TCL-DIRECCION   PIC X(40).
                01  SUMA-VARIABLES COMP PIC 9(12).
                01  NOMBRE-VENTANA      PIC X(64).
                
            En este ejemplo declaramos la variable "VARIABLES-TCL" en la cual
            estn incluidas todas las variables que Tcl/Tk usar. Es
            imprescindible que el tamao de las variables de Cobol sea el mismo
            que el de las variables declaradas en Tcl/Tk, siendo estas ltimas
            obligatoriamente alfanumricas (PIC X) debido a que Tcl/Tk no 
            permite declarar campos numricos.
            Luego declaramos la variable "SUMA-VARIABLES" cuyo contenido
            corresponder a la suma de los tamaos de las variables declaradas
            en el grupo "VARIABLES-TCL".
            En el ejemplo de arriba, esta variable tendr un valor igual a 84 el
            cual procede de (4 + 40 + 40 = 84).
            Posteriormente declaramos la variable "NOMBRE-VENTANA" que contendr
            el nombre del programa (script Tcl/Tk) que ser llamado.
            Digamos que hacemos un script para manejar una ventana y le damos el 
            nombre de "catastro.tcl", entonces la variable "NOMBRE-VENTANA" 
            recibir ese mismo valor (catastro.tcl).
            Vea el punto siguiente (3.2.-) para conocer como son usadas las 
            variables aqu definidas.
            
    3.2.-   Invocando a una Ventana:

            Antes que todo Usted tendr que llamar al programa "initTcl" el cual
            inicializa el ambiente grfico. Esto debe hacerse al comienzo del
            programa, antes de cualquier rutina.
            La llamada a la ventana (Tcl/Tk) es hecha a travs de la rutina
            "chamatcl", que es un programa escrito en lenguaje C (chamatcl.c), 
            el cual posee un interpretador de scripts Tcl/Tk. El es el 
            responsable de mostrar la ventana y de trasladar los contenidos de
            las variables desde Cobol a Tcl/Tk y viceversa.
            Para mostrar una ventana deber ejecutar el programa "chamatcl"
            mediante la sentencia CALL acompaada de las variables definidas
            bajo "VARIABLES-TCL", que son los campos que se intercambian entre
            Cobol y Tcl/Tk. La variable "SUMA-VARIABLES", que contiene la suma
            de los tamaos de las variables de intercambio y la variable
            "NOMBRE-VENTANA", que contiene el nombre del archivo script Tcl/Tk
            que ser llamado.
            Usando el mismo ejemplo anterior (3.1.-):
            
                01  VARIABLES-TCL.
                    03  TCL-CODIGO      PIC X(04).
                    03  TCL-NOMBRE      PIC X(40).
                    03  TCL-DIRECCION   PIC X(40).
                01  SUMA-VARIABLES COMP PIC 9(12).
                01  NOMBRE-VENTANA      PIC X(64).

            Digamos que la ventana que Usted quiere invocar se llama 
            "catastro.tcl", entonces en Cobol haramos de la siguiente manera:
                
                MOVE 84                 TO SUMA-VARIABLES.
                MOVE "catastro.tcl"     TO NOMBRE-VENTANA.
                CALL "chamatcl" USING VARIABLES-TCL SUMA-VARIABLES 
                                                                 NOMBRE-VENTANA.
                                                                 
            Esto funciona as, cuando la sentencia CALL es ejecutada, sta llama
            al programa(script) de Tcl/Tk "catastro.tcl" en el cual las variables
            "cobol_fields" reciben los valores de las variables definidas en 
            Cobol ("VARIABLES-TCL").
            
    3.3.-   Regresando a Cobol:
    
            Retornar a Cobol desde Tcl/Tk es muy simple, solo tiene que ejecutar
            el comando "do_exit". Haciendo esto cerrar la ventana abierta por 
            Tcl/Tk moviendo las variables de "cobol_fields" a las variables de
            Cobol conforme se declararon en el WORKING-STORAGE SECTION. Aqu Ud.
            debe elaborar una rutina para que Cobol reciba los valores y retorne
            a llamar nuevamente al programa (script) en Tcl/Tk para mostrar los 
            nuevos valores de las variables una vez stos han sido procesados.
            
    3.4.-   Cmo funciona el programa Cobol ejemplo de este Tutorial?:
    
            En el ejemplo de nuestro tutorial ("catastro.cob") tenemos una 
            variable declarada con el nombre "TCL-OPCION" con la correspondiente
            "tclopcion" en Tcl/Tk ("catastro.tcl").
            El programa Cobol llama al programa Tcl/Tk a travs de "chamatcl"
            para mostrar la ventana. Cuando se pulsa algn botn o se quita el
            foco del campo "Cdigo", se le atribuye una accin a la variable 
            "tclopcion" y se ejecuta el comando "do_exit". Este comando hace que
            se retorne al programa en Cobol recibiendo en el proceso el 
            contenido de las variables que vienen del script Tcl/Tk. El programa
            Cobol lee la variable "TCL-OPCION" y ejecuta la rutina 
            correspondiente en base al valor de sta, retornando luego al script
            Tcl/Tk para mostrar la ventana nuevamente.
            En el programa Cobol encontramos en el WORKING-STORAGE SECTION a la
            variable "SUMA-VARIABLES" con un valor preasignado de "234", que es
            el resultado de la suma de los tamaos de las variables que se
            intercambian y a la variable "NOMBRE-VENTANA" con un valor 
            preasignado igual a "catastro.tcl" que es el nombre del programa
            (script) en Tcl/Tk.
            Al inicio del programa Cobol ejecutamos la sentencia CALL "initTcl"
            que nos servir para inicializar el ambiente grfico.
            Antes de llamar a la ventana objeto de este ejemplo por primera vez,
            inicializamos las variables que sern usadas para intercambiar datos
            entre Cobol y Tcl/Tk con el objetivo de que la ventana muestre los
            campos vacos.
            Como las variables "SUMA-VARIABLES" y "NOMBRE-VENTANA" tienen sus
            valores preasignados, llamamos a la ventana de la siguiente forma:
            
             CALL "chamatcl" USING VARIABLES-TCL SUMA-VARIABLES NOMBRE-VENTANA.
            
            Esta sentencia invocar al programa(script) "catastro.tcl", el cual
            nos permitir manipular la ventana.
            Digamos que un Usuario quiere grabar un registro, entonces primero
            rellenar los campos de datos y luego pulsar el botn "GRABAR".
            Cuando hace esto el script Tcl/Tk asignar el valor "gra" a la
            variable "tclopcion" y ejecutar el comando "do_exit"

                (-command {set tclopcion gra ; exit})
            
            lo cual har que el procesamiento retorne al programa Cobol con los
            nuevos valores de las variables.
            Ya en Cobol, se leer la variable "TCL-OPCION" la cual tendr el
            valor "gra" y se ejecutar un PERFORM a la rutina "1000-GRABAR",
            donde los valores de las variables recibidas de Tcl/Tk sern movidas
            al archivo FD "CATASTRO" efectuando luego la grabacin del
            registro.
            A continuacin la secuencia del programa inicializar las variables
            (que van al script Tcl/Tk), asignar un mensaje de texto a la 
            variable "TCL-MENSAJE" describiendo el resultado del proceso de
            grabacin y saldr de la rutina retornando al programa(script) en
            Tcl/Tk. La ventana ser mostrada con los nuevos valores venidos de
            Cobol.
            En el script Tcl/Tk hay una etiqueta que est vinculada a la 
            variables "tclmensaje" la cual ser actualizada en cada retorno
            mostrando al Usuario el resultado de la accin.
            En resmen, Cobol llama a Tcl/Tk, el Usuario modifica los valores 
            de las variables escribiendo sobre los campos en la ventana y luego
            el control retorna al programa en Cobol. En este punto el programa
            en Cobol identifica el deseo del Usuario y a continuacin ejecuta el
            proceso correspondiente retornando luego al programa(Script) Tcl/Tk.
                
--------------------------------------------------------------------------------------

4 - Apndice.

4.1 - Agradecimientos.

    - Carlucio Lopes<carsanlo@terra.com.br> que, mediante su tutorial, nos
      permiti dar los primeros pasos con Tcl/Tk;
    - Rildo Pragana<rildo@pragana.net> por los primeros ejemplos con Tcl/Tk y con
      TinyCobol y por la paciencia en ayudarnos a superar algunas barreras
      encontradas;
    - John Ousterhout por crear el lenguaje Tcl y el toolkit grfico TK.
    - A Wesley R. Braga, creador del sitio tclbrasil.cipsga.org.br

4.2  Colaboradores.

    - Danilo Pacheco Martins
    - Fernando Wuthstrack
    - Carlucio Lopes
    - Rildo Pragana
    - Wesley R. Braga
            
