Capítulo 7. Para su referencia

Parte 7: Mensajes de error de BASIC

Contenido:


Mensajes de error de BASIC

1 Unexpected NEXT

Se ha encontrado un NEXT que no corresponde a ningún FOR, o bien la variable mencionada tras NEXT no coincide con la de FOR.

2 Syntax error

BASIC no puede entender la línea porque algo en ella no se ajusta a las reglas de sintaxis del lenguaje.

3 Unexpected RETURN

Se ha encontrado una orden RETURN fuera de una subrutina.

4 DATA exhausted

Una orden READ ha intentado leer más datos de los incluidos en líneas DATA.

5 Improper argument

Este es un error no específico. Puede haber algo incorrecto en el argumento de una función o en un parámetro de una orden.

6 Overflow

El resultado de una operación aritmética ha sobrepasado los márgenes aceptables. Si ha ocurrido en un número en punto flotante, el resultado ha sido mayor que 1.7E+38 (aprox.). También puede haber ocurrido al intentar convertir un número en punto flotante en un entero con signo de 16 bits.

7 Memory full

El programa actual o sus variables ocupan demasiado espacio en la memoria, el anidamiento de la estructura de control es demasiado profundo (demasiadas órdenes GOSUB, WHILE o FOR anidadas).

La orden MEMORY provoca este error si se intenta situar el límite de la memoria accesible a BASIC demasiado bajo, o tan alto que sea imposible. Obsérvese que los ficheros abiertos tienen un tampón dedicado a ellos, lo que puede restringir los valores correctos de MEMORY.

8 Line does not exist

Se ha mencionado un número de línea que no existe en el programa.

9 Subscript out of range

Uno de los subíndices mencionados en una lista es demasiado pequeño o demasiado grande.

10 Array already dimensioned

Una de las listas declaradas en una orden DIM ya ha sido dimensionada antes.

11 Division by zero

División por cero, que puede ocurrir en la división de números reales, en la división entera, en la operación MOD y en la exponenciación.

12 Invalid direct command

Se ha intentado dar como orden directa una orden que sólo es válida si va precedida de un número de línea.

13 Type mismatch

Incongruencia de tipos. Un dato es literal cuando tenía que ser numérico, o viceversa, o se ha introducido un dato no numérico en READ o INPUT.

14 String space full

Se han creado demasiadas cadenas literales y ya no hay espacio disponible para más, incluso después de reorganizar la memoria.

15 String too long

Una cadena literal consta de más de 255 caracteres. Puede haber sido generada por concatenación de otras.

16 String expression too complex

Expresión literal demasiado compleja. Las expresiones literales pueden generar valores intermedios; cuando el número de estos valores excede de un límite razonable, se produce este error.

17 Cannot CONTinue

No se puede reanudar la ejecución del programa con CONT. Obsérvese que CONT reanuda el programa después de una instrucción STOP, de [ESC] [ESC] o de un error, pero a condición de que no se modifique el programa durante la pausa.

18 Unknown user function

Se ha invocado una FN sin la correspondiente DEF FN.

19 RESUME missing

Se ha llegado al final del programa mientras se ejecutaba una rutina de gestión de errores (esto es, una rutina invocada por ON ERROR GOTO).

20 Unexpected RESUME

RESUME sólo es válida en una rutina de gestión de errores (esto es, en una rutina invocada por ON ERROR GOTO).

21 Direct command found

Al cargar un fichero se ha encontrado una línea sin número de línea.

22 Operand missing

BASIC ha encontrado una expresión incompleta.

23 Line too long

BASIC ha convertido a su forma interna una línea y ésta ha resultado ser demasiado larga.

24 EOF met

Se ha intentado leer más allá del final del fichero de entrada.

25 File type error

El fichero que se ha leído no es del tipo adecuado. OPENIN sólo puede abrir ficheros de texto ASCII. Análogamente, LOAD, RUN, etc., solamente pueden acceder a ficheros creados por SAVE.

26 NEXT missing

BASIC ha encontrado un FOR al que no corresponde ningún NEXT. La línea mencionada tras el mensaje es aquella en la que se encuentra el FOR.

27 File already open

Se ha ejecutado una orden OPENIN u OPENOUT sin previamente cerrar el fichero que estaba abierto.

28 Unknown command

BASIC no encuentra un comando externo que corresponda a lo que se ha escrito tras |.

29 WEND missing

BASIC ha encontrado un WHILE al que no corresponde ningún WEND.

30 Unexpected WEND

Se ha encontrado un WEND que no corresponde a ningún WHILE, o bien el WEND no concuerda con el WHILE del bucle actual.

31 File not open

Véase la sección "Errores de disco".

32 Broken in

Véase la sección "Errores de disco".

Errores de disco en AMSDOS

Hay varios errores que pueden producirse con ocasión del manejo de ficheros en disco. BASIC da a todos ellos el número de ERR 32; no obstante, DERR contiene información más específica cuando se detecta ese número de error. Los valores de DERR tienen el siguiente significado:

Error de
AMSDOS
Valor de
DERR
Causa del error
00 o 22Se ha pulsado [ESC].
14142 (128+14)El canal no se encuentra en situación correcta.
15143 (128+15)Se ha alcanzado el final físico del fichero.
16144 (128+16)Orden incorrecta: generalmente nombre de fichero incorrecto.
17145 (128+17)El fichero ya existe.
18146 (128+18)El fichero no existe.
19147 (128+19)El directorio está lleno.
20148 (128+20)El disco está lleno.
21149 (128+21)Se ha cambiado el disco cuando había ficheros abiertos en él.
22150 (128+22)El fichero es de "sólo lectura".
26154 (128+26)Se ha llegado al final de los datos grabados en el fichero (final lógico del fichero).

Si AMSDOS ya ha informado de un error, el bit 7 de DERR está a 1 y por lo tanto todos los valores de DERR están desplazados en 128 unidades.

Otros valores generados por DERR proceden del controlador del disco. Su significado se analiza bit a bit. El bit 6 siempre está a 1. El bit 7 indica si AMSDOS ha informado del error (según se ha explicado antes). El significado de los bits es el siguiente:

BitSignificado
0Falta marca de direcciones.
1No escribible. El disco está protegido.
2Faltan datos. No se puede encontrar el sector.
3No hay disco en la unidad, unidad no preparada.
4Error de sincronización (velocidad).
5Error de datos. Error CRC (comprobación de redundancia cíclica).
6Siempre a 1, para indicar que es un error detectado por el controlador del disco.
7A 1 si AMSDOS ya ha informado del error.

ERR también puede dar el valor 31 si se ha intentado el acceso sin haber ningún fichero abierto. La forma recomendable de utilizar ERR y DERR consiste en incluir una instrucción ON ERROR GOTO que invoque una pequeña subrutina en la cual se compruebe si ERR es 31 o 32; si es 32, se puede examinar DERR para obtener mayor información sobre la naturaleza del error. Por ejemplo:

19 ON ERROR GOTO 1000
20 OPENOUT "fichero.asc"
30 WRITE #9,"prueba-datos"
40 CLOSEOUT
50 END
1000 erramsdos=(DERR AND &7F): REM mascara para bit 7
1010 IF ERR<31 THEN END
1020 IF ERR=31 THEN PRINT "Esta seguro de que ha tecleado la linea 20 correctamente?":END
1030 IF erramsdos=20 THEN PRINT "Disco lleno; ponga otro disco de datos. ":END
1940 IF erramsdos=&X01001000 THEN PRINT "Inserte un disco en la unidad y luego pulse una tecla.":WHILE INKEY$="":WEND:RESUME
1050 END