Toolkit II, Manual de Usuario
Anterior Siguiente

5 Mantenimiento de Ficheros

Los procedimientos estándar para el mantenimiento de ficheros (COPY, DELETE y DIR) han sido ampliados a un juego racional en el Toolkit II. Tanto los comandos nuevos como los antiguos, usan los directorios de omisión; además, algunos de los comandos usan unos nombres especiales llamados "wild card" para referirse a grupos de ficheros con nombres similares.

5.1 Nombres "Wild Card"

Un nombre "Wild card" es un tipo especial de nombre de fichero en el que una parte de dicho nombre puede ser sustituida por cualquier cadena de caracteres. Al diseñar los nombres "Wild card" hemos tenido en cuenta que es conveniente que dichos nombres cumplan las normas sintácticas del SuperBASIC, por lo que en ellos no pueden usarse caracteres especiales (por ejemplo, el nombre misficheros_*_asm para indicar todos los ficheros que comienzan por misficheros_ y acaban por _asm, sería tratado por el SuperBASIC como una expresión aritmética, por lo que trataría de multiplicar misficheros_ por _asm).

Por esta razón, se ha adoptado un esquema más simple: los nombres de ficheros se dividen en secciones (flp2_fred_bin tiene tres secciones) y los nombres "Wild card" pueden tener secciones perdidas (por ejemplo, flp2_old__list tiene una sección perdida). El nombre "Wild Card" refiere a todos los ficheros cuyos nombres tengan secciones que emparejen con las secciones del "Wild Card". El final de un nombre "Wild card" se considera implícitamente como perdido.

Si el nombre "Wild card" no es el nombre completo de ningún fichero, se pone el nombre del directorio de omisión delante del comienzo del nombre.

En los siguientes ejemplos, se supone que FLP2_ es el directorio de omisión:

	Nombre          Nombre "Wild card"  Ejemplos de ficheros

	"Wild card"     entero              designados por "Wild card"

	fred            flp2_fred           flp2_fred

	                                    flp2_freda_list

	_fred           flp2__fred          flp2_fred

	                                    flp2_freda_list

	                                    flp2_old_fred

	                                    flp2_old_fred_list

	flp1_old__list  flp1_old__list      flp1_old_jo_list

	                                    flp1_old_fred_list

5.2 Listado de Directorios

Hay dos formas de listado de directorios: La primera lista solamente los nombres de los ficheros mientras que la segunda lista también su tamaño y la fecha de la última modificación. Todos los comandos usan los nombres "Wild card" y el directorio de omisión para datos. La salida de todos los comandos, por omisión, es el canal #1; sin embargo, puede especificarse otro canal o un dispositivo. Si la salida es a pantalla, el listado se para cuando la ventana está llena.

DIR #canal, nombre estadística del disco y listado de los ficheros
WDIR #canal,nombre listado de los ficheros
WSTAT #canal,nombre listado de los ficheros y de sus estadísticas

En todos los casos, la especificación tanto del canal como del nombre es optativa.

Las formas posibles de, por ejemplo, WDIR son:

WDIR lista el directorio actual en #1
o WDIR #canal lista el directorio actual en #canal
o WDIR \nombre lista el directorio actual en "nombre"
o WDIR nombre lista el directorio "nombre" en #1
o WDIR #canal,nombre lista el directorio "nombre" en #canal
o WDIR \nombre1,nombre2 lista el directorio "nombre2" en "nombre1"

Por ejemplo:

WDIR \ser,_asm lista todos los ficheros "_asm" del directorio actual en SER1
WDIR flp1_ lista todos los ficheros de FLP1_ en #1
WDIR #3 lista todos los ficheros del directorio actual en el canal #3

Se incluye el comando DIR sólo por compatibilidad: antes del listado de los ficheros, aparece la estadística del dispositivo (nombre del medio, número de sectores vacantes/número de sectores buenos).

5.3 Estadística del Dispositivo

Hay un comando que imprime la estadística del dispositivo que acoge a un directorio especificado o al directorio de omisión.

STAT #canal,nombre
o STAT \nombre1,nombre2

Tanto el canal como el nombre son opcionales.

5.4 Borrado de Ficheros

Se ha modificado el procedimiento estándar DELETE de manera que, cuando no se le de un nombre de fichero completo, use los directorios de omisión. No se genera ningún error de "no encontrado". Hay también un comando interactivo que permite el borrado de grupos de ficheros usando nombres "Wild card".

DELETE nombre borra un fichero
WDEL #canal,nombre borra ficheros

Para WDEL tanto el canal como el nombre son opcionales. Por ejemplo:

WDEL borra ficheros del directorio actual
WDEL _list borra ficheros _list del directorio actual

A no ser que se especifique un canal, el procedimiento de borrado "Wild card" usa la ventana de comandos #0 para pedir confirmación para el borrado. Hay cuatro posibles respuestas:

Y (yes-sí) borra este fichero
N (no) no borres este fichero
A (all-todos) borra este y todos los ficheros siguientes
Q (quit-abandonar) no borres ni este fichero ni el resto

(Nota: Las versiones reducidas del Toolkit, aquellas que vienen en la ROM del controlador de disco, incorporan otro comando, WDEL_F que funciona como WDEL con la diferencia que el borrado de los ficheros es Forzado, es decir no se pide permiso para ello)

5.5 Copia de Ficheros

Se han cambiado las dos formas del comando COPY para que utilicen los nombres de omisión de ficheros, y además para darles mayor flexibilidad. También se han añadido algunos comandos más.

Los ficheros en el QDOS tienen una cabecera que da información útil sobre el fichero que sigue.

En ciertas circunstancias puede ser útil copiar la cabecera del fichero que sigue. Este es el caso cuando:

a) se copia un fichero de un programa ejecutable de manera que se conserva la información del fichero.

b) se copia un fichero a través de una unión en serie pura de forma que el software de comunicación sabrá de antemano la longitud del fichero.

En otras, sin embargo, no será una buena idea copiar la cabecera. Este es el caso cuando:

c) se copia un fichero de texto a la impresora ya que es probable que contenga códigos de control o caracteres no imprimibles o falsos.

La regla general usada por los procedimientos COPY en el Toolkit II es que la cabecera sólo se copia si contiene alguna información adicional. De esta forma, se atiende a los casos a) y c) anteriores. Se incluye un comando COPY_N por compatibilidad con el mismo comando estándar del QL: este comando nunca copia la cabecera. Además se incluye un nuevo comando, COPY_H, el cual copia siempre la cabecera, y debe usarse en el caso b) anterior (nótese que el comando estándarCOPY copia siempre la cabecera). Ni COPY_H ni COPY_N necesitan ser usados para la copia de fichero a fichero.

Una segunda regla usada por el procedimiento COPY (y además por el WREN) es que, si el fichero destino realmente existe, el usuario será requerido para confirmar si la sobrescritura del fichero es aceptable. El procedimiento COPY_O (copia con sobrescritura) y los del "SPooLer" no tienen esta deferencia con el usuario.

Si se utilizan los comandos con dos nombres de fichero, se usará el directorio de omisión para datos en ambos casos. Si, sin embargo, sólo se da un nombre (o ninguno, en el caso de los procedimientos "Wild card"), el fichero de destino se derivará del directorio de omisión para el destino.

a) si la omisión para el destino es un directorio (acabado en "_", seleccionado con DEST_USE), el fichero de destino es el valor de omisión para el destino, seguido del nombre.

b) si la omisión para el destino es un dispositivo (no acabado en "_", seleccionado con SPL_USE) el destino es el valor de omisión para el destino sin modificación.

5.5.1 Copias de un sólo Fichero

COPY nombre TO nombre copia un fichero
COPY_O nombre TO nombre copia un fichero (sobreescribiendo)
COPY_N nombre TO nombre copia un fichero (sin cabecera)
COPY_H nombre TO nombre copia un fichero (con cabecera)

Estos comandos pueden entrarse con uno o dos nombres. Se usa el separador "TO" por claridad, pero puede usarse una coma en su lugar.

Para ilustrar estos comandos de copia, he aquí unos ejemplos en los que se asume que el directorio de datos es MDV2_ y el de destino MDV1_:

COPY fred TO old_fred copia mdv2_fred a mdv2_old_fred
COPY fred, ser copia mdv2_fred a ser
COPY fred copia mdv2_fred a mdv1_fred
SPL_USE fred
COPY fred copia mdv2_fred a ser

5.5.2 Copiando Varios Ficheros

El comando interactivo de copia WCOPY se usa para la copia de todo o parte de un directorio. El comando puede ser dado con nombre "Wild Card" fuente y destino, con un sólo nombre "Wild Card", o, incluso, con ninguno. Este último caso equivale a dar un sólo nombre nulo:

WCOPY y WCOPY "" son lo mismo

Si las siguientes reglas sobre la derivación del nombre fichero destino de la copia, te parecen confusas, usa WCOPY intuitivamente, mirando con cuidado las preguntas que te hace.

Si el destino no es el directorio de omisión para destino, el nombre del fichero de destino verdadero para cada operación de copia se obtiene a partir del nombre de fichero verdadero fuente y del nombre "Wild Card" de destino. Si una sección perdida del nombre "Wild" fuente está emparejada con una sección perdida del nombre "Wild" destino, esta parte del nombre verdadero del fichero fuente será usada como la parte correspondiente del nombre de fichero destino. Si no, el nombre verdadero para el fichero destino se toma del nombre "Wild" de destino. Si hay más secciones en el nombre "Wild" de destino que en el fuente, las secciones extras serán insertadas detrás del nombre del dispositivo y viceversa.

La forma completa del comando es:

WCOPY #canal,nombre TO nombre copia ficheros

El separador TO se usa por claridad y puede ser sustituido por una coma.

Si no se da el canal, las preguntas para confirmación son enviadas al canal de comandos #0 (Nota: #1, para algunas versiones del Toolkit reducido), de manera que en dicho canal (o en el escogido) el usuario será requerido para que pulse:

Y (yes-sí) copia este fichero
N (no) no copies este fichero
A (all-todos) copia este fichero y todos los siguientes
Q (quit-abandonar) abandona sin copiar ni éste ni ningún otro fichero

Si el fichero de destino existe ya, se requerirá al usuario para que pulse:

Y (yes-sí) copia este fichero, sobreescribiendo el antiguo
N (no) no, no copies este fichero
A (all-todos) sobrescribe el antiguo fichero, y cualquier otro fichero que vaya a ser copiado
Q (quit-abandonar) abandona sin copiar ni éste ni ningún otro fichero

Por ejemplo, si el directorio de omisión para datos es flp2_, y el de destino es flp1_:

WCOPY copia todos los ficheros de flp2_ a flp1_
WCOPY flp1_,flp2_ copia todos los de flp1_ a flp2_
WCOPY fred copia flp2_fred a flp1_fred, flp2_freda_list a flp1_freda_list, etc.
WCOPY fred,mog copia flp2_fred a flp2_mog, flp2_freda_list a flp2_moga_list,etc.
WCOPY _fred,_mog copia flp2_fred a flp2_mog, flp2_frada_list a flp2_moga_list, flp2_old_fred a flp2_old_mog, flp2_old_freda_list a flp2_old_moga_list, etc
WCOPY _list,old_ copia flp2_jo_list a flp2_old_jo_list, flp2_freda_list a flp2_old_freda_list
WCOPY old__list,flp1_ copia flp2_old_jo_list a flp1_jo_list, flp2_old_freda_list a flp1_freda_list

5.5.3 Copiando en Multitarea

El comando SPL copia ficheros de la misma manera que COPY_O, con la diferencia que lo que realmente hace es iniciar un programa en Multitarea (llamado "SPooLer") que es el que hace el trabajo de copia, mientras que el intérprete de BASIC queda libre para dedicarse a otras tareas. El comando SPL está pensado fundamentalmente para copiar ficheros a un impresora. Como una opción, se puede enviar a la impresora un salto de página (<FF>, carácter decimal 12, hexadecimal 0C) al final del fichero.

SPL nombre TO nombre vuelca un fichero
SPLF nombre TO nombre vuelca un fichero y añade un salto de página <FF> al final

El uso normal de este comando es con un solo nombre:

SPL_USE ser2 selecciona ser2 como valor de omisión para el "SPooLer"
SPLF fred vuelca fred a ser2, añadiendo un salto de página al fichero

Cuando se usa este comando de esta manera, si el dispositivo de omisión está en uso, la tarea será suspendida hasta que el dispositivo se encuentre disponible. Esto significa que es posible volcar varios ficheros a la impresora a la vez.

Una variación en el uso de los comandos SPL y SPLF es utilizar canales del SuperBASIC en lugar de nombres de ficheros. Estos canales deben abrirse antes de invocar al "SPooLer".

SPL #canal1 TO #canal2

donde canal1 y canal2 deben haber sido abiertos para entrada y salida respectivamente.

5.5.4 Renombrando Ficheros

Renombrar un fichero es un proceso similar a copiarlo, con la diferencia que no le se mueve ni se le duplica, sino que sólo se le cambia el nombre en el directorio. Los comandos son, sin embargo, exactamente iguales a sus equivalentes COPY.

RENAME nombre TO nombre ver COPY
WREN #canal,nombre TO nombre ver WCOPY


Anterior Índice de Materias Siguiente
Control de directorios   Programas en SuperBASIC