Fdd - Tos. Sistema Operativo de discos de Timex. (Actualizado 17/05/04) Sintaxis: comando *"pathname: nombre .extensión" Los comandos son los siguientes: Format*, Cat*, List*, Load*, Save*, Merge*, Move*, Erase*, Let*, Attr*, Dim*, Input*, Restore*, Open#*, Close#*, Print*, Draw*, Goto*, Gosub*. El pathname puede ser tanto un nombre de diskette o de subdirectorio. Se admiten hasta cuatro drives: a, b, c y d. El nombre es de hasta 8 caracteres sin la extensión. Todas las minúsculas en el nombre como en la extensión son automáticamente cambiadas a mayusculas al displayarse en pantalla mediante CAT*. La extensión consta del punto más tres letra. Las extensiones son solo referenciales y al gusto del usuario a excepción de dos: .DIR - para subdirectorios .SCP - para puertos de comunicación serial. Los atributos de los archivos son: I - ocultar (el archivo no aparece en el directorio) P - protegido. U - desproteger. V - anula atributo de ocultar. Se admiten + y ? como wildcards específicados. Format* sintaxis 1: Format *"drive" To "nombre del volumen" Formatea y da el nombre al disco en el drive especificado. Ejemplo: Format *"a" To "disk1" sintaxis 2: Format *"nombre .ext" Configura el protocolo para la comunicación por medio del puerto serial. El nombre solo puede ser "CH_A" o "CH_B" La extensión solo puede ser SCP y es omitible por defecto. Cat* sintaxis: Cat *[":"] Cat *"volumen" Cat *"[volumen: [subdirectorio:]]nombre archivo[.ext]" Ejemplo: Cat *"disk1", Cat *"disk2:datos", Cat *"disk2:sdir1:prog.bas" Cat *":" muestra toda la información partiendo desde el directorio raiz del disco. Admite wildcards o comodines. List* Sintaxis 1: List* muestra la información del directorio en curso. Sintaxis 2: List*# [canal] Lista la información de un canal abierto específicamente. De omitirse el canal listará todos los canales abiertos El canal debe ser un número entre 1 y 16. Save* Sintaxis: Save* "nombre" Line/Code/Data/Screen$ [n] Save* "[volumen:][subdirectorio:] nombre[.ext]" Cuando el nombre ya existe el Tos pregunta si se quiere sobre escribir o no el archivo. La opción [n] sobregraba sin preguntar al respecto. Ejemplo: Save *"opera.bas" Line 1, Save *"image.scr" Screen$ n Load* sintaxis: Load* "[volumen:/subdirectorio:]nombre.ext" Code/Data/Screen$ Merge* sintaxis: Merge* "[volumen:/subdirectorio:]nombre[.ext]" Move* Sintaxis: move* "nombre fuente" To "nombre destino" Move *"[volumen1:/subdirectorio1:]nombre1.ext" To "volumen2/subdirectorio2:nombre2.ext" Permite copiar un archivo de un disco volumen1 a otro volumen2. O de un subdirectorio a otro. Ejemplo: Move *"amigo.bas" To "disk2:amigo.bas" Move *"prb.dat" To "prgbk.dat" copia archivo en el mismo disco o subdirectorio. Move *"name" To ":ch_b" envía un archivo "name" a traves de un puerto b. Move *"ch_a" To "ch_b" transmite información de una computadora o terminal a otra. Erase* sintaxis: Erase *"[volumen:/subdirectorios:]nombre.ext" [n] Erase *"[volumen:]nombre" Erase siempre consulta si se desea eliminar o no el archivo. La opción [n] elimina sin cuestiones. Ejemplo: Erase *"alpha:prg.bas", Erase *"Alfa?.+" n Admite wildcards. Let* (Rename) Comando para renombrar los archivos. sintaxis: Let *"nombre viejo" To "nombre nuevo" Ejemplo: Let *"code.bas" To "Codigo.prg" Attr* Permite cambiar los atributos del archivo. sintaxis: Attr *"nombre" atributo Attr *"[volumen:subdirectrios:]nombre[.ext] p/u/i/v Ejemplo: Attr *"copia+.+" p Admite wildcards. Dim* Sintaxis 1: Dim *"nombre.dir" Permite crear un subdirectorio al igual que el comando MKDIR del DOS. Se debe añadir la extensión ".dir" si se quiere crear un subdirectorio, si se omite o se le da otra extensión creará un archivo simple para usar con Open#*. Ejemplo: Dim *"nuevo.dir" Crea subdirectorio "nuevod" Dim *"demo:dir1.dir" Crea un subdirectorio "dir1" dentro de directorio "demo" Sintaxis 2: Dim *"nombre[.ext]" Solo se usa para crear un archivo para usar con Open#*/Close#* en caso de que el archivo no exista. Dim *"textos.dat" crea archivo de datos de cadena para su uso con Open#* Input* Sintaxis: Input *# canal; var$ [;At reg#] El canal debe ser 1-16. Solo admite variable de cadena normales o arrays unidimensionales. La opción [At...] solo se usa con la lectura de archivos directos. Ejemplo: Input *# 1;a$ (lectura secuencial) Input *# 2; v$; At 5 (lectura de acceso directo al registro número 5 del archivo en cuestión) Restore* Sintaxis: Restore* canal Permite volver el puntero de un archivo secuencial a 1. En solo lectura se vuelve al comienzo del archivo. En modo append o escritura borraría todo lo antes escrito pues empezaría todo desde cero nuevamente. En el caso del puerto serial borraría el buffer de entrada de datos eliminando todos los bytes por leerse si se está en modo de solo input o acceso random. No pasa eso cuando el SCP está abierto en otro modo. Open#* Sintaxis: Open# *canal;"nombre";modo[;longitud] canal: 1-16. nombre: puede ser un SCP o cualquier expresión de cadena pero no un directorio. modo: Hay cuatro modos posibles de acceso y solo se admite una letra. I,i - solo lectura modo secuencial (input). O,o - Solo escritura secuencial (output). A,a - permite añadir nuevos datos secuencialmente (append). R,r - Lectura y escritura en acceso directo (random files). longitud: Opcional, un número del 1 al 256. Define el número de bytes o caracteres que tendrá el archivo. La longitud no puede ser omitida cuando se está en modo R. El archivo debe ser previamente creado con el comando DIM* de lo contrario dará error. Solo permite almacenar cadenas. Los datos numéricos deben ser previamente convertidos a cadenas. Los canales del 1 al 4 son considerados rápidos. Poseen un bufer de 512 bytes exclusivos para cada uno. Los canales del 5 al 16 son llamados lentos debido a que comparten un único buffer de 512 bytes entre todos. Ejemplo: Open# *4;"file1.dat";i abre para solo lectura. Open# *1;"alfa";o abre el archivo en modo de escritura. Open# *5,"file1.dat";A Open# *3;"data";R;200 Open# *2;"ch_a";a abre SCP "a" para solo escritura o envío. Close#* Sintaxis: Close# *[canal] Close# sólo sin especificar, cierra todos los canales abiertos. En el caso del SCP Close*# envía un ^Z como caracter de fin de archivo. Print* Sintaxis: Print *# canal; char$ [;At n] Solo trabaja con cadenas. Admite el uso de separadores como Chr$13, Chr$6, "". Ejemplos: Print *#1; a$+Chr$ 13 Print *#2;""Hello"" Print *#3;a$+" "+Val b$+Chr$ 6 Print *#4;n$+b$+p$+c$;At n Escribe los datos en acceso directo. Goto* sintaxis 1: Goto *"pathname" Es el equivalente al CD (Change Dir) del DOS. Ejemplos: Goto *"^" cambia el directorio un nivel hacia arriba. Goto *"^^" mueve el directorio dos niveles. Goto *":" va al directorio raiz. Goto *"demo:fun:games" Sintaxis 2: Goto *"drive"d Ejemplo: Goto *"b"d Cambia del drive por defecto al seleccionado en este caso el "B". Gosub* Sintaxis: Gosub *["pathname"] Gosub *"drive"d Actua parecido a Goto* pero permite volver al directorio desde el que se hizo el salto por medio de Draw* ya que usa un stack para almacenar el directorio en curso. Draw* Vuelve al subdirectorio del cual se salió con Gosub* Da error si se está ya en el directorio raiz. Notas: Es posible usar Save*, Load*, Merge* y move* para intercambiar archivos con el SCP Ejemplo: Save*":ch_a" Line 10. Es posible atrapar errores mediante dos variables del sistema y así hallar el fin de fichero (EOF) Las variables son Trap (23729) y Syserr (23728) Programa ejemplo: 50 Let trap=23729: Let syserr=23728 100 Open #*1;"nombre";I 110 Poke trap,255 120 Input *#1;a$ 130 If Peek syserr<>0 Then Goto 500 140 Print a$ 150 Goto 120 500 Print "Llegó al final del fichero" 510 Close #*1 El error 72 se da cuando se lee más allá del fin de fichero. Para desabilitar la captura de errores usar Poke 23729,0 Mensajes de error: 30 ILLEGAL PATHNAME el nombre de disco o directorio no es valido 31 NON EXISTENT PATH No existe la senda 32 ILLEGAL USE OF A ROOT NAME El uso del nombre raiz no es valido 33 <> HAS WRONG TYPE ... Es de tipo erroneo 34 <> DOES NOT EXIST No existe ... 35 <> ALREADY EXIST Ya existe ... 36 TYPES DO NOT AGREE Los tipos no son compatibles 37 TEMPLATE NOT ALLOWED No se premiten comodines 38 NO FILES MATCHING THE TEMPLATE Ningún archivo encaja con los comodines dados 39 DIRECTORY FULL ON DISK <> El directorio está lleno en el disco ... 40 DISK <> FULL Disco ... lleno 41 NO ROOM FOR FILE IN CHANNEL <> No hay espacio para archivo en canal ... 42 <> IS WRITE PROTECTED ... está protegido contra escritura 43 DISK <> IS SOFTWARE W/P El disco ... esta protegido contra escritura como software 44 DISK <> IS HARDWARE W/P El disco ... está protegido contra escritura en hardware 45 <> HAS DIRECTORIES ... tiene directorios 46 <> HAS FILES OPEN ... tiene archivos abiertos 47 <> HAS FILES W/P ... tiene archivos protegidos contra escritura 48 CANNOT ERASE CURRENT DIRECTORY No se puede borrar directorio en curso 49 CANNOT CREATE MORE DIRECTORIES no se pueden crear más directorios 50 ILLEGAL DIRECTORY SPECIFICATION Especificaciones ilegales de directorio 51 DIRECTORY STACK OVERFLOW Seexcedió el "stack" del directorio 52 CANNOT RETURN FROM LEVEL 0 No se puede retornar desde nivel 0 53 CHANNEL BUSY canal ocupado 54 CHANNEL NOT OPEN Canal no abierto 55 ILLEGAL CHANNEL NUMBER Número de canal no válido 56 NO CHANNELS OPEN No hay canales abiertos 57 NO CHANNELS FREE no hay canales libres 58 NO FAST CHANNELS FREE Ningún canal rápido libre 59 CHANNEL TABLE OVERFLOW Excedió la tabla de canales 60 ILLEGAL MODE/TYPE COMBINATION Combinación modo/tipo no valida 61 ILLEGAL RECORD LENGTH Longitud de registro no válida 62 CANNOT USE A SLOW CHANNEL No puede usarse un canal lento 63 <> IS OPEN ... está abierto 64 <> CHANGED WITH FILES OPEN ... modificado con archivos abiertos 65 CANNOT FORMAT WITH FILES OPEN No es posible formatear con archivos abiertos 66 ILLEGAL DRIVE NAME Nombre de unidad no valido 67 ILLEGAL DISK NAME nombre de disco no válido 68 BUFFER FULL Búfer lleno 69 SCP I/O ERROR error en la entrada/salida del SCP 70 ILLEGAL OPERATION ON WRITE FILE operación nop válida en la escritura de aun archivo 72 READ PAST END OF FILE Se leyó más allá del final del archivo 73 HARDWARE FAULT ON DISK Falla en el hardware del disco 74 DISK CORRUPTED disco dañado 75 ILLEGAL DATA TYPE Tipo de datos no válido Francisco León. zx_if1@hotmail.com