archivo

Archivo de la etiqueta: almacenamiento

Uno de los primeros programas con los que jugué cuando compré mi primer QL fue el copiador que acompañaba al software de PSION. Con este programa uno puede aprender varios conceptos básicos acerca de las facilidades del QL y del SuperBASIC, uso de ficheros, canales… y de paso el programa ayudó a salvar más de un cartucho de microdrive, al menos hasta la llegada de las extensiones TK2 (Toolkit II) de Tony Tebby, con sus “wildcards” o facilidades de copia salvaje. Respecto a esto, tengo que hacer mención al artículo de Salvador Merino titulado “Un resumen de la historia de un copión llamado trumpcopy2” que os recomiendo que no dejéis de leer pues tiene su gracia a la vez que es muy aprovechable si se dispone de TK2.

Hablaba del programa copiador de microdrives. Esto es lo que veremos en este artículo dedicado obviamente a los que empiezan con el QL. Es muy cortito. Veamos su listado y que hace en cada línea:

100 REMark copia de mdv2_ a mdv1_
110 OPEN_NEW #3,mdv1_dir
120 DIR #3,mdv2_
130 OPEN_IN #3,mdv1_dir
140 INPUT #3,a$;a$
150 REPeat copia
160   IF EOF(#3): EXIT copia
170   INPUT #3,a$
180   PRINT "Copiando mdv1_";a$
190   COPY mdv2_ & a$ TO mdv1_ & a$
200 END REPeat copia
210 CLOSE #3
220 DELETE mdv1_dir
230 PRINT "Copia completada."

La línea 100 muestra un comentario. Nada nuevo bajo el sol. Sólo decir que cuando se renumeran automáticamente las líneas (RENUM) en el QL, la primera línea por defecto es la 100.

El programa, a grandes rasgos, va a abrir un fichero en mdv1_ (unidad de microdrive 1), luego listará en ese fichero el nombre de los ficheros que hay en mdv2_ y por último copiará uno por uno cada fichero de mdv2_ a mdv1_.

En la línea 110 abrimos (OPEN) un canal nuevo de comunicación (#3) que va a ser un fichero en mdv1_ llamado “dir”. Cualquier dispositivo de entrada o salida, ficheros, puertos serie, etc… se abrirá como un canal numerado “#n”.

En la línea 120 hacemos DIR para mostrare el contenido de mdv2_ y este contenido se mostrará por el canal 3 (#3). Si #3 se hubiese abierto como un puerto serie en vez de como un fichero, estaríamos mandando el listado a la impresora por ejemplo directamente.

El siguiente paso será poder acceder al canal en modo lectura. Usamos pues OPEN_IN en la línea 130.

Ya podemos leer del #3. Las dos primeras cadenas de texto del fichero mdv1_dir corresponden al nombre del microdrive y al número de sectores disponibles (información que proporcionó DIR). Esta información no es necesaria para realizar la copia, así que la desechamos.

En la línea 140 leemos en a$ las dos primeras cadenas de texto (a$;a$) del fichero “dir”. El punto y coma pues es un separador. El SuperBASIC tiene estas facilidades que nos permiten leer varias cadenas a la vez con un INPUT.

Entre las líneas 150 y 200 se produce la magia. Estamos en un bucle llamado “copia” cuya condición de salida podemos ver en la línea 160: Si hemos llegado al final del canal (EOF) entonces salimos del bucle “copia” y segimos desde la línea posterior a END REPeat copia.

En la línea 170 leemos a$, que contendrá una cadena con un nombre de fichero del listado de mdv2_.

En la línea 180 indicamos por pantalla que vamos a copiar ese fichero. Volvemos a usar “;” como separador. Existen varios tipos de separadores en SuperBASIC que descubrirás en el manual.

En la línea 190, por fin, se realiza la copia de un fichero desde mdv2_ a mdv1_ Analicemos esta línea.

La orden COPY  necesita saber desde donde hacia donde vamos a copiar. Sabemos que el fichero a copiar está en a$, y que vamos a copiar desde mdv2_ a mdv1_, ahora sólo tenemos que escribir correctamente la sentencia.

el separador “&” consigue unir cadenas de texto. En este caso la cadena de texto es mdv2_ o mdv1_ y el contenido de a$, que será igual para ambas unidades de microdrive, puesto que el fichero que copiaremos se va a llamar igual en el origen y en el destino.

Pongamos que tenemos un fichero llamado programa_bas en mdv2_. La orden sería:

COPY mdv2_programa_bas TO mdv1_ programa_bas

Podríamos tener, como sucede en el listado, el nombre del fichero en una variable:

fichero$="programa_bas"
COPY mdv2_ & fichero$ TO mdv1_ & fichero$

y funcionaría igual.

Esto puede ser de mucha utilidad cuando escribimos programas que van a acceder a datos en microdrive o en discos, pues de esta forma podemos sustituir el nombre del dispositivo guardado en una variable sin tener que cambiar cada línea del listado donde se use ese dispositivo. Por ejemplo:

..
500 DIR mdv1_
600 RUN mdv1_programa_bas
..

Si este programa lo salvamos en flp1_ (floppy 1) por poner un ejemplo y en el copiamos también el fichero programa_bas tendremos que cambiar las líneas 500 y 600 y cualquiera otra que apunte a algún archivo en mdv1_ que ahora esté en flp1_

Con el siguiente programa la cosa sería más sencilla.

100 disp$="mdv1_"
..
500 DIR disp$
600 RUN disp$ & programa_bas
..

En este ejemplo sólo tendremos que cambiar la línea 100 por:

100 disp$="flp1_"

Útil ¿verdad?

Seguimos pues. Como ya hemos salido del bucle, y copiado todos los ficheros, que era nuestro objetivo, en la línea 210 cerramos el canal 3 (#3) definitivamente.

En la línea 220 borramos el fichero “dir” en mdv1_, pues ya no lo necesitamos, y en la línea 230 avisamos que la tarea está realizada.

Ha llegado la hora de usar el programa. Debemos poner el microdrive que queramos copiar en mdv2_ y un cartucho en blanco formateado en mdv1_ y ejecutar el programa.

Si salvamos el programa en mdv2_ antes de ejecutarlo, este se clonará a si mismo en la copia que realicemos. 😉

Con lo expuesto aquí, uno ya puede abrir ficheros para escribir y leer de ellos o copiar en ellos información proveniente de otros canales. Puedes probar a crear un pequeño fichero al que añadas mediante INPUTs cadenas de texto que introduzcas por teclado y luego muestres lo escrito por pantalla, o abrir un canal dirijido al puerto serie y escribir directamente líneas en la impresora. Todo sea por enredar.

En el artículo “Copiando ficheros desde el QL al PC (y viceversa)” se muestra un enlace a las instrucciones  que tenemos que seguir si queremos transferir ficheros entre ambas máquinas. Esto abre las puertas a muchas posibilidades, pero es importante destacar algunas cosas a tener en cuenta:

  1. Los microdrives son caros en lo que respecta a su capacidad de almacenamiento y difíciles de obtener.
  2. Los programas pues, en general, ocuparán demasiado espacio en los microdrives, pero lo peor es la escasa cantidad de memoria de que dispondremos para ejecutarlos en el QL.
  3. Algunos ejecutables requieren extensiones del sistema como el Toolkit II, que si bien hoy día están disponibles gratuitamente, limitan aún más el espacio de memoria para programas.
  4. Los ficheros ejecutables tienen una cabecera que hay que preservar cuando transferimos archivos.
  5. Los programas que obtendremos por Internet generalmente están disponibles comprimidos en formato zip.

…todo esto sin hablar de que necesitaremos saber cómo instalar y usar un emulador y cuales son los comandos necesarios para copiar ficheros.

Es evidente que tratar con el QL no es lo mismo que hacerlo con sus otros hermanos Sinclair, y su metodología de uso se asemeja más a la de MS/DOS o cualquier OS de línea de comandos. Vamos a ver cuales son las distintas soluciones a estos problemas que seguro se os presentarán si os estáis iniciando en el mundo del QL con una máquina básica.

Los puntos 1 al 3 tienen una única solución: ampliar. Necesitaremos una controladora de discos y una ampliación de memoria para nuestro QL. Ambas pueden ser tarjetas independientes o una sola tarjeta que incluya ambas cosas. La más recomendable por precio y prestaciones es la TrumpCard de Miracle Systems, pero hay muchas otras posibilidades. Una búsqueda entre los enlaces a las páginas comerciales de QL o en Ebay nos dará algunas opciones.

Claro que si tenemos una controladora de discos necesitaremos un lector de discos. Buenas noticias. Las disqueteras de hoy sirven perfectamente. En este artículo se explica cómo adaptarlas.

Para solucionar el problema del punto 4 es necesario que la manipulación de los ficheros ejecutables se haga siempre desde un sistema QL que soporte el formato de ficheros del S.O. QDOS, es decir, desde el propio QL, un emulador de QL que pueda acceder a ficheros en una partición FAT, NTFS, etc… (casi todos lo hacen) pero nunca, NUNCA, manipular esos ficheros desde Windows, Linux u otros sistemas. Si copiamos un ejecutable mediante “copiar y pegar” por ejemplo, habremos perdido la cabecera de ese fichero y ya no funcionará en el QL. Los que tengan Macs saben de que hablo. Afortunadamente, los ficheros no ejecutables no tienen este problema, pudiendo, por ejemplo, editar un fichero de texto con el bloc de notas y luego usarlo en el QL o en el emulador sin más (podemos pues editar nuestros programas SuperBASIC en nuestro cómodo editor de textos…)

Por ultimo, para solucionar el problema planteado por el punto 5 debemos usar los programas zip y unzip para QL. No podemos, por la razón descrita, descomprimir los zip fuera de el emulador o el QL. Aquí tienes una descripción de cómo usarlos (mismo modo que en otros sistemas) y dónde conseguir unzip. Lee el leeme.txt.

Si lo que queremos es pasar nuestros viejos programas SuperBASIC al PC para hacer una copia de respaldo, todo esto no será necesario, pero enseguida querremos sacarle más partido al QL, y estas anotaciones te serán entonces imprescindibles.

jav_ql_mdvHe leído un hilo muy bueno en ql-user de cómo transferir ficheros desde un QL básico (sólo con unidades microdrives sin ningún tipo de ampliación de disqueteras) a un PC empleando simplemente un cable RS232.

El usuario que inicia la experiencia (aupf82), pone como último post (http://www.mail-archive.com/ql-users@lists.q-v-d.com/msg06162.html) el resumen de todos los pasos a dar para quien lo pueda necesitar. En este resumen explica con todo lujo de detalles los pasos para realizar dicha transferencia con éxito y en ambos sentidos (QL a PC y PC a QL).

jav_ql_serLa idea básica es emplear un cable estándar RS232, para hacer la transferencia al PC por medio de Q-emulator (un emulador QL en el PC) y no vía MS-DOS. (Para emplear este cable se necesita un adaptador en el QL, -se puede conseguir en “Sinclair Shop”-)

Hay dos partes en el proceso:

1) Lograr transferir desde el Q-emulator a un microdrive del QL, una utilidad que viene con el propio Q-emulator llamada MdvToWin. Ejecutando esta utilidad en el QL podemos transferir ficheros EXEcutables sin perder las cabeceras. El problema de este primer paso es que se necesita un mecanismo para que el propio MdvToWIN (que es un ejecutable QDOS) no pierda las cabeceras al pasarlo al QL real. Bien, el artículo mencionado explica cómo hacerlo.

2) Una vez hayamos transferido la utilidad MdvToWin a una unidad Microdrive del QL, el resto es mucho más sencillo. El propio MdvToWin nos guía en el proceso para lograr transferir cualquier tipo de fichero respetando las dichosas cabeceras de los ejecutables QDOS.

Bueno, lo dicho, un artículo muy útil para aquellos que sólo dispongan de un QL básico con algunos cartuchos microdrives y quieran disfrutar de la máquina real copiando ficheros desde el PC. O bien para aquellos que tengan programas en microdrives y deseen pasarlo al PC para ser usados en un emulador.