Toolkit II, Manual de Usuario
Anterior Siguiente

8 Ejecución de Programas

El procedimiento que inicia la ejecución de programas ejecutables puede ser invocado mediante cinco comandos: EX y EXEC (que son sinónimos), EW y EXEC_W (que son sinónimos), y ET. Las diferencias son muy pequeñas: mientras que EX vuelve al SuperBASIC en cuanto se inicia el programa, EW espera a que termine el programa antes de volver al SuperBASIC. ET instala el programa pero vuelve el SuperBASIC, de manera que se pueda trazar su ejecución mediante un programa monitor. Usaremos EX para describir todos los comandos.

8.1 Ejecución de Programas Individuales

En su forma más sencilla, EX puede ser utilizado para iniciar un único programa:

EX nombre

Se carga en el área de programas transitorios el programa contenido en el fichero "nombre" y se empieza su ejecución. Si el fichero no contiene un fichero ejecutable, aparecerá el error "parámetro incorrecto".

Es también posible pasar parámetros a un programa a través de una expresión de cadena:

EX nombre;parámetro de cadena

En este caso, se carga en el área de programas transitorios el fichero "nombre", se introduce la cadena en su pila y se comienza su ejecución.

Finalmente es posible para EX abrir ficheros de entrada y salida para un programa, además de (o en lugar de) pasarle parámetros. Si se prefiere, se puede pasar un número de canal del SuperBASIC en lugar de un nombre de fichero. Un canal usado de esta forma debe de estar ya abierto.

EX nombre_del_programa,nombres de ficheros o #canal;parámetro de cadena

Tomando como ejemplo un programa llamado UC que convierte un texto en mayúsculas, el comando

EX uc,fred,#1

cargará e inicializará el programa UC, que tiene a "fred" como fichero de entrada, siendo enviada la salida a la ventana #1.

8.2 Filtros

Se ha diseñado EX para seleccionar filtros para el proceso de un flujo de datos.

Es posible tener en el QL una cadena de tareas colaborando en el proceso de los mismos datos como si fuera una cadena de producción. Cuando se usa una producción en cadena, cada tarea realiza una parte bien definida del proceso total. La primera tarea tomará los datos originales y hará su parte del proceso; los datos parcialmente procesados serán pasados a la siguiente tarea la cual realizará su parte del trabajo; y así los datos pasarán gradualmente por todas las etapas del proceso. Los datos pasan de una tarea a la siguiente a través de un conducto llamado "pipe". Los datos reciben el nombre de "flujo" y las tareas que realizan el proceso de los datos se llaman "filtros".

Usando los símbolos [] para indicar un ítem opcional único y para representar una opción que puede ser repetida, la forma completa de EX será:

EX [#canal TO] espec_prog TO espec_prog [TO #canal]

donde espec_prog (especificación del programa) es

nombre del programa ,nombre de fichero o #canal [;parámetro de cadena]

Cada separador TO crea un "pipe" entre tareas.

Todos los nombres y los parámetros de cadena pueden ser nombres, cadenas o expresiones de cadena. El significado de los nombres de fichero es, hasta cierto punto, dependiente del programa; hay, sin embargo, dos reglas que deben ser seguidas para todos los filtros:

1) la entrada principal de un filtro es el "pipe" que le une con la anterior tarea de la cadena (si existe), o, en caso contrario, el primer fichero de datos.

2) la salida principal de un filtro es el "pipe" a la siguiente tarea de la cadena (si existe) o el último fichero de datos.

Algunos filtros pueden tener solamente dos canales para entradas y salidas: la entrada principal y la salida principal.

Si el primer parámetro de EX es #canal TO, se cerrará el correspondiente canal del SuperBASIC (si estaba abierto) y se reabrirá un nuevo canal como un conducto ("pipe") al primer programa.

Cualquier cadena enviada a este canal (por ejemplo, mediante PRINT) será procesada por la cadena de tareas. Cuando se cierre el canal, las tareas serán eliminadas del QL.

Si el último parámetro de EX es TO #canal, se cerrará el correspondiente canal de SuperBASIC (en el caso de que estuviera abierto) y se abrirá un nuevo canal que servirá de conducto ("pipe") al último programa.

Cualquier dato que pase a través de la cadena de tareas, llegará a este canal, de manera que podrá ser leído (por ejemplo, mediante INPUT). Cuando todos los datos hayan pasado, las tareas se autoeliminarán y cualquier intento de lectura desde el canal dará el error de "fin de fichero". Se puede usar la función EOF para averiguar si el fichero ha terminado.

8.3 Ejemplo de Proceso mediante Filtros

Como un ejemplo de proceso mediante filtros, encadenemos los siguientes programas para que procesen un único fichero: "uc" convierte un fichero a mayúsculas, "lno" numera las líneas de un fichero, y "page" lo divide en páginas con un encabezamiento opcional.

EX uc,fred TO lno TO page, ser;'Fichero fred, a '&DATE$

El filtro "uc" convierte el fichero "fred" a mayúsculas y lo pasa a través de un conducto a "lno". Este, a su vez, añade los números de línea y envía el resultado al conducto que lo une con "page". Finalmente "page" divide el fichero en páginas, añadiendo al principio de cada una el encabezamiento 'Fichero fred, a' seguido de la fecha, antes de enviar el fichero a la puerta "ser". Obsérvese que el fichero "fred" no es modificado; las versiones modificadas son simplemente transitorias.


Anterior Índice de Materias Siguiente
Cargar y Salvar   Control de tareas