Toolkit II, Manual de Usuario
Anterior Siguiente

23 Escribiendo Programas para usar con EX

Los programas invocados mediante EX (o EW o ET) pueden ser de tres tipos:

En lo que respecta a EX, la distinción estriba en que los programas especiales deben contener el código para abrir sus propios canales de entrada/salida.

23.1 Programas Estándar y No Estándar

Al comienzo de la ejecución de un programa estándar o no estándar, debe haber la siguiente información en la pila:

Si sólo hay un canal abierto para una tarea, estará abierto para lectura/escritura a no ser que sea un "pipe" en cuyo caso la dirección estará implicada en el comando.

Si hay más de un canal abierto para una tarea, el primer canal será la entrada principal (abierto sólo para lectura), y el resto será abierto con sobrescritura (OVERWRITE). El último canal es la salida principal.

Una tarea no debe cerrar los canales suministrados, sino que debe suicidarse cuando esté completa. Cada tarea es propiedad de la siguiente de la cadena, de forma que cuando la última tarea acaba, toda la cadena es eliminada. Cuando se suicide la cadena de esta manera, se colocará una señal "fin de fichero" en la salida. Una señal "fin de fichero" en su canal principal de entrada indicará, directamente o de otra manera, a una programa que los datos están completos.

23.2 Programas Especiales

Los programas estándar y los especiales contienen el valor 4AFB en sus bytes 6 y 7. A estos bytes le sigue la identificación del programa en forma de cadena estándar (una palabra con su longitud seguida de los bytes de los caracteres de la cadena). En el caso del encabezamiento de programas especiales, la identificación es seguida por otro valor $4AFB (alineado con los límites de una palabra). Una vez cargado el programa, puesta la cadena opcional en la pila de las tareas y abierto el "pipe" de entrada (en los casos necesarios) y puesta su identificación en la pila de la tarea, EX hará una llamada a la dirección señalada después de la segunda palabra de identificación. Obsérvese que el código llamado deberá formar parte de una procedimiento del Basic y no de un programa ejecutable.

Al entrar en este código, los siguientes registros deben ser seleccionados a los siguientes valores:

D4.L 0 ó 1 si hay un "pipe" de entrada: ID no está en la pila
D5.L 0 ó 1 si hay un "pipe" de salida: ID no está en la pila
D6.L ID de Tarea para este programa
D7.L número total de "pipes" + el de nombres de fichero en la especificación del programa
A0 dirección de las rutinas de apoyo
A1 puntero a la cadena de comando
A3,A6 (*)puntero al primer nombre de fichero (tabla de nombres)
A4 puntero a la pila de la tarea
A5,A6 (*)puntero por debajo del último nombre de fichero (tabla de nombres)

(*) estos son los registros estándar para el paso de parámetros de procedimientos del SuperBASIC.

El procedimiento de selección de fichero descodifica los nombres de los ficheros, los abre y pone su identificación (ID) en la pila (A4). El registro D0 devolverá el código de error. D5 será aumentado con el número de identificaciones de canal puestos en la pila de la tarea. En A4 se mantendrá el puntero a la pila de la tarea. La información contenida en los registros D1 a D7, A0 a A3 y A5 será considerada como volátil.

La rutina (A0) para obtener un nombre de fichero deberá ser llamada con el puntero en A3 señalando a la entrada apropiada en la tabla de nombres. D0 devuelve el código de error. D1 a D3 son destruidos. Si D0 es igual a 0, A1 devolverá el puntero al nombre (relativo a A6). Si D0 es positivo, A0 devolverá la identificación del canal del SuperBASIC (si el parámetro era #n), siendo preservados todas los demás registros de direcciones.

La rutina 2(A0) para abrir un canal deberá ser llamada con el puntero al nombre del fichero en A1(relativa a A6). El nombre del fichero no debe estar en el amortiguador del Basic; D3 debe contener el código de acceso (es posible la sobrescritura) y la identificación de la tarea (tal como es pasada por la rutina de inicialización) deberá estar en D6. El código de error será devuelto en D0 mientras que D1 y D2 serán destruidos. A1 será devuelto apuntando al nombre del fichero usado (puede tener delante un directorio de omisión). Si la apertura falla, A1 apuntará al nombre del fichero de omisión + el dado. La identificación del canal es devuelta en A0 y todos los demás registros son preservados.

En ambos casos, el registro de estado es devuelto seleccionado de acuerdo con el valor de D0.


Anterior Índice de Materias Siguiente
Controlador de red local   Lista de Extensiones