ONCE.24. CÓDIGOS Y MENSAJES DE ERROR
ONCE.24.1. Códigos de error
En la tabla siguiente se muestran los valores de códigos de error generados por AutoLISP. La variable de sistema
ERRNO toma uno de estos valores cuando una llamada de función de AutoLISP provoca un error que AutoCAD detecta después.Código ----- Significado
------------------------------------------------------------------------------------
0 ----------- Sin errores
1 ----------- Nombre no válido de tabla de símbolos
2 ---------- Nombre no válido de conjunto de selección o entidad
3 ---------- Se ha superado el número máximo de conjuntos de selección
4 ---------- Conjunto de selección no válido
5 ---------- Uso no adecuado de definición de bloque
6 ---------- Uso no adecuado de referencia externa
7 ---------- Selección de objeto: fallo en la designación
8 ---------- Final de archivo de entida
9 ---------- Final de archivo de definición de bloque
10 --------- No se ha encontrado la última entidad
11 --------- Intento no válido de suprimir un objeto de ventana gráfica
12 --------- Operación no permitida durante el comando
POL13 --------- Identificador no válido
14 --------- Identificadores no activados
15 --------- Argumentos no válidos en la petición de transformación de coordenadas
16 --------- Espacio no válido en la petición de transformación de coordenadas
17 --------- Uso no válido de entidad suprimida
18 --------- Nombre de tabla no válido
19 --------- Argumento de función de tabla no válido
20 --------- Intento de definir una variable de sólo lectura
21 --------- No puede utilizarse el valor cero
22 --------- Valor incorrecto
23 --------- Regeneración compleja en curso
24 --------- Intento de cambiar el tipo de entidad
25 --------- Nombre de capa erróneo
26 --------- Nombre de tipo de línea erróneo
27 --------- Nombre de color erróneo
28 --------- Nombre de estilo de texto erróneo
29 --------- Nombre de forma erróneo
30 --------- Campo para el tipo de entidad erróneo
31 --------- Intento de modificar una entidad suprimida
32 --------- Intento de modificar una subentidad
SEQEND33 --------- Intento de cambiar identificador
34 --------- Intento de modificar la visibilidad en pantalla gráfica
35 --------- Entidad en capa bloqueada
36 --------- Tipo de entidad errónea
37 --------- Entidad polilínea errónea
38 --------- Entidad compleja incompleta en el bloque
39 --------- Campo de nombre de bloque no válido
40 --------- Campos de identificador de bloque repetidos
41 --------- Campos de nombre de bloque repetidos
42 --------- Vector normal erróneo
43 --------- Falta el nombre de bloque
44 --------- Faltan los indicadores de bloques
45 --------- Bloque anónimo no válido
46 --------- Definición de bloque no válida
47 --------- Falta un campo obligatorio
48 --------- Tipo de datos extendidos (
XDATA) no reconocido49 --------- Anidación errónea de lista en
XDATA50 --------- Ubicación errónea del campo
APPID51 --------- Se ha superado el tamaño máximo de
XDATA52 --------- Selección de entidad: respuesta nula
53 ---------
APPID duplicada54 --------- Intento de crear o modificar objeto de pantalla gráfica
55 --------- Intento de crear o modificar RefX, XDef o XDep
56 --------- Filtro
SSGET: fin de lista no esperado57 --------- Filtro
SSGET: falta operando de prueba58 --------- Filtro
SSGET: cadena opcode (-4) no válida59 --------- Filtro
SSGET: anidación errónea o cláusula condicional vacía60 --------- Filtro
SSGET: incoherencia en principio y final de cláusula condicional61 --------- Filtro
SSGET: número erróneo de argumentos en cláusula condicional (con NOT o XOR)62 --------- Filtro
SSGET: superado el límite máximo de anidación63 --------- Filtro
SSGET: código de grupo no válido64 --------- Filtro
SSGET: prueba de cadena no válida65 --------- Filtro
SSGET: prueba de vector no válida66 --------- Filtro
SSGET: prueba de número real no válida67 --------- Filtro
SSGET: prueba de número entero no válida68 --------- El digitalizador no es un tablero
69 --------- El tablero no está calibrado
70 --------- Argumentos de tablero no válidos
71 --------- Error ADS: no es posible asignar buffer nuevo de resultados
72 --------- Error ADS: se ha detectado un puntero nulo
73 --------- No es posible abrir el archivo ejecutable
74 --------- La aplicación ya está cargada
75 --------- Número máximo de aplicaciones ya cargadas
76 --------- No es posible ejecutar la aplicación
77 --------- Número de versión no compatible
78 --------- No es posible descargar la aplicación anidada
79 --------- La aplicación no se descarga
80 --------- La aplicación no está cargada
81 --------- Memoria insuficiente para cargar la aplicación
82 --------- Error ADS: matriz de transformación no válida
83 --------- Error ADS: nombre de símbolo no válido
84 --------- Error ADS: valor de símbolo no válido
85 --------- Operación AutoLISP/ADS no permitida mientras se presenta un cuadro de diálogo
ONCE.24.2. Mensajes de error
error: mensaje
El mensaje va seguido de un indicador de función. Si hay una función
*error* definida por el usuario, el indicador no actúa, sino que se hace referencia a dicha función de usuario con mensaje como argumento único.A continuación se muestra una lista completa de los mensajes de error que puede proporcionar AutoLISP en programas de usuario, además de una explicación de cada uno. La lista recoge los mensajes únicamente en castellano, excepto los que se encuentran en inglés en todas las plataformas idiomáticas.
Lista 1
Los argumentos de defun no pueden tener el mismo nombre
AutoCAD rechazó la función
Desbordamiento de pila de AutoLISP
Se ha superado el espacio de almacenamiento de pila de AutoLISP. El motivo puede ser una repetición excesiva de funciones o listas de argumentos muy largas.
tipo de argumento erróneo
Se ha pasado un tipo de argumento incorrecto a una función Por ejemplo, no se puede obtener la
STRLEN de un número entero.bad association list
La lista suministrada a la función
ASSOC no está formada por listas de valor clave.código de conversión erróneo
El identificador
SPACE suministrado a la función TRANS no es válido.bad ENTMOD list
El argumento suministrado a
ENTMOD no es una lista de datos de entidades adecuada (tal y como lo devuelve ENTGET).bad ENTMOD list value
Una de las sublistas de la lista de asociación suministrada a
ENTMOD contiene un valor erróneo.lista de argumento formal inadecuada
Al evaluar esta función, AutoLISP ha detectado una lista de argumento formal no válida. Quizás no se trate de una función, sino más bien de una lista de datos.
función incorrecta
El primer elemento de la lista no es un nombre de función válido; quizás se trate de un nombre de variable o de un número. Este mensaje también puede indicar que la función especificada no está bien definida (no olvidar la lista de argumentos formal obligatoria).
código de función erróneo
El identificador de función suministrado al comando
TABLET no es correcto.bad grvecs list value
El valor pasado en una lista
GRVECS no es un punto 2D o un punto 3D.bad grvecs matrix value
La matriz que se ha suministrado a
GRVECS contiene errores de formación o de tipo de datos (por ejemplo: STR, SYM, etc.).lista incorrecta
Se ha suministrado una lista con errores de forma a una función. Esto puede suceder si un número real empieza con un separador decimal. Hemos de incluir un cero inicial en este caso.
lista de puntos incorrecta
La solicitud
F, CP o WP lleva adjunta una lista nula o con elementos que no son puntos. Se utilizan con SSGET y GRVECS.bad node
La función
TYPE ha encontrado un tipo de elemento no válido.tipo de nodo erróneo en la lista
La función
FOREACH ha encontrado un tipo de elemento no válido.argumento de puntos incorrecto valor de punto incorrecto
Se ha pasado un punto mal definido (una lista de dos números reales) a una función que esperaba un punto. Un número real no puede empezar por un separador decimal; en dicho caso, hay que incluir el cero inicial.
detectado número real incorrecto
Se ha intentado transmitir un número real no válido de AutoLISP a AutoCAD.
bad ssget list
El argumento suministrado a
SSGET "X" no es una lista de datos de entidad adecuada (tal y como devuelve ENTGET).bad ssget list value
Una de las sublistas de la lista de asociaciones suministrada a
SSGET "X" contiene un valor erróneo.cadena modo ssget incorrecta
Este error se produce cuando
SSGET recibe una cadena no válida en el argumento modo.lista de xdata incorrecta
Este error se genera cuando
XDSIZE, SSGET, ENTMOD, ENTMAKE o TEXTBOX recibe una lista de datos de entidad extendida con errores de forma.se requiere punto de base
Se ha llamado a la función
GETCORNER sin el argumento de punto base obligatorio.Boole arg1 0 or 15
El primer argumento de la función booleana ha de ser un número entero entre
0 y 15.imposible evaluar la expresión
Separador decimal mal colocado o alguna otra expresión incorrecta.
no es posible abrir (archivo) para entrada; fallo de LOAD
No se ha encontrado el archivo designado en la función
LOAD, o el usuario no tiene permisos de lectura sobre ese archivo.imposible volver a entrar en AutoLISP
Una función activa está utilizando el buffer de comunicación AutoCAD/AutoLISP; no se podrá llamar a otra nueva función hasta que la actual haya finalizado.
interrupción desde el teclado
El usuario ha tecleado
CTRL+C durante el proceso de una función.divide by zero
No se puede dividir por cero.
desbordamiento en división
La división por un número muy pequeño ha dado como resultado un cociente no válido.
exceeded maximum string length
Se ha pasado a una función una cadena con más de 132 caracteres.
extra right paren
Se ha encontrado uno o más paréntesis cerrados de los necesarios.
file not open
El descriptor de archivo para la operación de E/S no es el de un archivo abierto.
lectura de archivo, memoria de cadenas insuficiente
Memoria de cadenas agotada mientras AutoLISP leía un archivo.
file size limit exceeded
Un archivo ha superado el límite de tamaño permitido por el sistema operativo.
floating-point exception
Sólo sistemas UNIX. El sistema operativo ha detectado un error aritmético de coma flotante.
función cancelada
El usuario ha tecleado
CTRL+C o ESC (cancelar) en respuesta a una solicitud de datos.function undefined for argument
El argumento pasado a
LOG o SQRT sobrepasa los límites permitidos.function undefined for real
Se ha suministrado un número real como argumento de una función que exige un número entero, por ejemplo
(LSH 2.2 1).falta punto final grvecs
Falta un punto final en la lista de vectores que se ha suministrado a
GRVECS.illegal type in left
El archivo
.LSP no es ASCII puro, sino que se ha guardado con un programa de tratamiento de textos e incluye códigos de formato.improper argument
El argumento para
GCD es negativo o cero.inappropriate object in function
El paginador de funciones
VMON ha detectado una función mal expresada.número incorrecto de argumentos
La función
QUOTE sólo espera un argumento concreto, pero se le han proporcionado otros.número incorrecto de argumentos para una función
El número de argumentos para la función creada por el usuario no coincide con el número de argumentos formales especificado en
DEFUN.
solicitud inadecuada de datos sobre lista de comandos
Se ha encontrado una función de comando pero no se puede ejecutar porque hay otra función activa o porque el intérprete de comandos no está completamente inicializado. Este error puede producirse desde una llamada a la función
COMMAND en ACAD.LSP, ACADR14.LSP o en un archivo .MNL.entrada interrumpida
Se ha detectado un error o condición de fin de archivo prematuro, lo que ha provocado la finalización de la introducción de datos en el archivo.
insufficient node space
No hay espacio suficiente en la pila de almacenamiento para la acción solicitada.
insufficient string space
No hay espacio en la pila de almacenamiento para la cadena de texto especificada.
invalid argument
Tipo de argumento erróneo o argumento sobrepasa los límites permitidos.
lista de argumentos no válida
Se ha pasado a una función una lista de argumentos que contiene errores.
invalid character
Una expresión contiene un carácter erróneo.
par punteado no válido
No se ha dejado el espacio pertinente antes y después del punto en la construcción manual del par punteado. Este mensaje de error también puede deberse a un número real que empieza por el separador decimal, en cuyo caso ha de incluir el cero inicial.
valor de número entero no válido
Se ha encontrado un número menor que el entero más pequeño o mayor que el número entero más grande.
desbordamiento LISPSTACK
Se ha superado el espacio de almacenamiento de pila de AutoLISP. El motivo puede ser una repetición excesiva de funciones o listas de argumentos muy largas.
malformed list
Se ha terminado prematuramente una lista que se estaba leyendo en un archivo. La causa más común es una incoherencia en el emparejamiento de las aperturas y cierres de paréntesis o comillas.
malformed string
Se ha terminado prematuramente una cadena que se estaba leyendo en un archivo.
misplaced dot
Un número real comienza con el separador decimal. Se ha de incluir un cero inicial en este caso.
función nula
Se ha intentado evaluar una función que tiene una definición vacía.
quitar/salir abandonar
Se ha llamado a la función
QUIT o EXIT.cadena demasiado larga
La cadena que se ha pasado a
SETVAR es demasiado larga.too few arguments
Se han pasado pocos argumentos a una función integrada.
argumentos insuficientes para grvecs
No se han pasado suficientes argumentos a
GRVECS.demasiados argumentos
Se han pasado demasiados argumentos a una función integrada.
La siguiente lista muestra los errores internos de AutoLISP que no tienen que ver con el programa de usuario. Estos errores, si se producen, hay que notificarlos a Autodesk de forma inmediata ya que se pueden deber a bugs o fallos en la programación de AutoCAD 14 o en la implementación de AutoLISP en él. Para más información véase la ayuda del programa.
Lista 2
bad argument to system call
Sólo sistemas UNIX. El sistema operativo ha detectado una llamada errónea generada por AutoLISP.
bus error
Sólo sistemas UNIX. El sistema operativo ha detectado un error de bus.
hangup
Sólo sistemas UNIX. El sistema operativo ha detectado una señal hangup (colgado).
illegal instruction
Sólo sistemas UNIX. El sistema operativo ha detectado una instrucción de máquina no válida.
segmentation violation
Sólo sistemas UNIX. El sistema operativo ha detectado un intento de direccionamiento externo al área de memoria especificada para este proceso.
unexpected signal nnn
Sólo sistemas UNIX. El sistema operativo ha emitido una señal inesperada.
ONCE.FIN. EJERCICIOS PROPUESTOS
Como se puede apreciar en este letrero de diálogo, el usuario dispondrá de la posibilidad de escoger un fichero en entrada donde están los datos y un fichero de salida. En este último se guardarán las coordenadas de los puntos precedidas de un número de orden o marca que será el que se dibuje en pantalla al lado de cada punto. Además, también se podrá escoger la posibilidad de ver el fichero de salida al terminar de dibujar la curva, en cuyo caso se abrirá un editor ASCII (tipo Bloc de Notas) con el fichero en cuestión, y la posibilidad de no generar este fichero, en cuyo caso no se generará (al elegir esta opción habrán de desactivarse la innecesarias).
Como segundo paso se elegirá el tipo de curva con el que se dibujará la curva de nivel (sección Generar curva). Después elegiremos las propiedades de la curva: capa, color y tipo de línea. En cada lista desplegable se reflejarán los elementos actuales en el dibujo.
Como se ve en el cuadro, habremos de especificar también un estilo de texto, su rotación y su altura, así como dispondremos de la posibilidad de no escribir las marcas en pantalla. También se ofrece en esta sección del letrero una casilla de edición para indicar cuál será la primera de las marcas.
Por último escogeremos el separador de coordenadas en el archivo de entrada, es decir, cuál es el carácter que divide unas componentes de otras: una coma (formato CDF), un espacio blanco (formato SDF) o cualquier otro que, en su caso, se especificará.
El programa dispondrá de una rutina de control de errores, tanto del cuadro de diálogo (para no introducir valores incorrectos) como de errores AutoLISP.
Como observamos habremos de introducir todos los datos necesarios para el dibujo de la escalera. La opción Hueco interior determina si en por dentro existirá hueco o una columna cilíndrica. Dispondremos de un botón para designar un punto de inserción en pantalla.
Créense rutinas de control de errores y demás.
El cuadro de diálogo principal del programa será el que se puede observar en la página siguiente.
EL área Actuar en capa define la capa en la cual se realizarán las mediciones. Como vemos puede ser una elegida de la lista desplegable que contendrá todas las capas del dibujo, la capa actual o la correspondiente al objeto que se designará (si se elige la última opción). En estos dos último casos la primera opción quedará inhabilitada, evidentemente; en el último caso, se pedirá designar objeto al pulsar el botón Aceptar, antes de proceder a la medición.
En el área Acumular se especifica el tipo de objeto sobre el que actuará: línea, polilínea, arcos o todos (con las correspondientes combinaciones).
En el área Inserción del texto habremos de pulsar el botón designar para escoger un punto de inserción en pantalla. Al volver el cuadro, se reflejarán en las casillas correspondientes las coordenadas X, Y y Z de dicho punto. Además, escogeremos aquí la capa donde se insertará el texto ( Por último, en el área Mostrar texto describiremos las propiedades del texto (estilo, altura y rotación), así como el texto que aparecerá antes del total acumulado y después del mismo.
El botón Preferencias... nos lleva a otro cuadro de diálogo, cuyo diseño lo vemos en la página siguiente. En este nuevo cuadro elegiremos diversas preferencias (si así lo deseamos) para el texto final escrito en pantalla. Así pues, dispondremos de la posibilidad de mostrar el subtotal de tramos rectos y de tramos curvos con sus correspondientes textos inicial y final, la fecha y la hora de la medición y el autor de la misma, así como su empresa y la ubicación de ésta.
Este programa representa ya un alto nivel en la programación en AutoLISP/DCL. Se puede hacer de variadas formas, sobre todo el cuerpo principal donde se realiza la medición. Intentemos escoger la que nos resulte más sencilla y versátil a la hora de tener en cuenta otros aspectos del programa.