E
n este capítulo se hablará de una seríe de comandos no tan importantes como los anteriores, pero necesarios en ocasiones, y de difícil catalogación en alguno de los capítulos precedentes.El comando clock
Este comando efectúa las operaciones que permiten obtener o manipular cadenas o valores que representan el tiempo. El argumento opcion determina cuál es la acción a efectuar por el comando. Las opciones permitidas son :
clock opcion arg1 arg2 ...?
|
clock clicks |
Devuelve el tiempo en alta resolución. |
|
clock format valor? -format string? -gmt bool |
Convierte un valor en segundos, en tiempo legible. |
|
clock scan datestring? -base valor -gmt bool |
Convierte una fecha dada en un formato, en segundos. |
|
clock seconds |
Devuelve la fecha y hora actual en segundos. |
En el argumento de format, se colocará el descriptor de cómo se desea que el tiempo y la fecha sean formateados. Estos descriptores de campo consisten en un % seguido de un carácter. Los valores válidos son:
|
%a |
Día de la semana abreviado (Mon, Tue, ...). |
|
% A |
Día de la semana complet0 (Monday, Tuesday, ...). |
|
%b |
Mes abreviado (Jan, Feb, ...). |
|
%B |
Mes completo (January, February, ...). |
|
%d |
Día del mes (01-31). |
|
%D |
Fecha (%m/%d/%y). |
|
%e |
Día del mes (1-31) Sin ceros. |
|
%H |
Hora (00-23). |
|
%I |
Hora (00-12). |
|
%m |
Número del mes (01-12). |
|
%M |
Minuto (00-59). |
|
%S |
Segundos (00-59). |
|
%T |
Hora (%H:%M:%S). |
|
%V |
Número de la semana del año (01-52). |
|
%w |
Día de la semana ( Sunday = 0). |
|
%Y |
Año ccyy (Ej: 1997). |
|
%Z |
Nombre de la zona horaria. |
Si el formato no es especificado, este será:
%a %b %d %H:%M:%S %Z %Y
No debe olvidarse que al ser Tcl un lenguaje procedente del entorno UNIX, cuenta el tiempo en segundos a partir del 1 de Enero de 1970.
El siguiente ejemplo son dos procedimientos que permiten presentar la fecha y la hora en una ventana. Se actualiza de forma automática cada cierto tiempo, ya que se le pasa como parámetro el tiempo, en milisegundos, que debe esperar entre actualizaciones. El comando after hace que espere sin hacer nada durante este tiempo. Esto no interfiere en el funcionamiento del programa principal, que continúa funcionando normalmente.
El comando info
El comando info permite obtener información acerca del intérprete. Las operaciones más habituales con este comando son:
|
info args procedimiento |
Devuelve una lista de los argumentos de los procedimientos. |
|
info body procedimiento |
Devuelve los camandos en el cuerpo del procedimiento. |
|
info commands ?patron? |
Devuelve el número de comandos ejecutados. |
|
info exists variable |
Devuelve true si existe la variable. |
|
info globals ?patron? |
Devuelve una lista de variables globales. |
|
info library |
Devuelve el path del directorio de la librería de Tcl. |
|
info tclversion |
Devuelve el número de versión de Tcl. |
|
info vars ?patron? |
Devuelve una lista de las variables visibles. |
El comando exec
El comando exec es usado para ejecutar otros programas desde una aplicación Tcl. La salida que el programa ejecutado efectuaría por la salida estándard puede ser capturada mediante el comando catch.
En este ejemplo, se ha hecho correr desde el intérprete de tcl, el intérprete de Tk, wish80.exe, que a su vez ha intérpretado un programa denominado entorno.tcl.
Esta es una forma sencilla y cómoda de implementar nuevos comandos Tcl, sin recurrir al algo más engorroso método de crear un nuevo intérprete que incorpore el nuevo comando.
Así, por ejemplo, si lo que se desea es conseguir que Tcl incorpore una función que le prmita conseguir números aleatoros, cosa que hasta la versión 8.0b1 no podía hacer, bastará con escribir en C o en cualquier otro lenguaje de programación, una función que devuelva un número aleatorio. pero este valor no debe devolverlo como resultado del programa, sino que debe escribirlo en la salida estandard. Es decir, en C no debería de hacerse
return num;
sino:
printf("%f",num);
Este valor será el devuelto por exec y que puede ser captura mediante un catch de la siguiente forma:
catch { exec c:/usr/vergara/aleatorio.exe } num_aleat
Con lo que el valor devuelto quedará almacenado en la variable Tcl num_aleat.
Los comandos eval, list y uplevel
El comando eval permite la evaluación de un comando que ha sido creado durante la ejecución de un programa. Es decir, si durante la ejecución de un programa o aplicación se construye en una lista, por ejemplo, un comando de Tcl, este no funcionará directamente, ya que serán necesarias algunas sustituciones más, sino que deberá ejecutarse empleando el comando eval.
El ejemplo anterior, permite ejecutar un comando generado de forma dinámica durante la ejecución del programa. Pero pudiera ocurrir que la variable a la que hace referencia el comando, exista en el momento de generar dicho comando, pero no en el momento de ejecutarlo. En este caso se usará el comando list .
En este caso da un error, ya que cadena no existe en el momento de ejecutar el comando.
En este otro caso no hay error, puesto que utilizando el comando list, ya se realiza la sustitución de la variable cadena por su contenido, por lo que es independiente de que se borre o no la variable a la que hace referencia.
El comando uplevel es similar a eval, con la diferencia de que uplevel evalúa un comando en un ámbito de variables distinto al propio. La sintaxis de uplevel es la siguiente:
uplevel level comando
Por ejemplo, si se desea evaluar un comando en el ambito global (valor 0) del programa:
uplevel #0 $cmd