Sección 3 - Sistema para reportar errores en Atari

https://www.atariware.cl/archivos/compu-util1/errores.png

Uno de los aspectos desalentadores en la mayoría de los micro computadores, es la falta de mensajes claros orientados al usuario. Particularmente molesto es el mensaje de error, o mejor dicho el "NUMERO DE ERROR".


La ejecución del programa se detiene y aparece un mensaje


ERROR 138


¿Queeeeee?


¿Donde puse mi manual?


Entonces buscas sobre tu escritorio hasta encontrar el Manual y revisas sus páginas hasta ubicar el dichoso error 138 y luego buceas en tu programa hasta detectar la falta precisa y corregirla.


Si tienes disquetera, el programa siguiente hará todo el trabajo por ti y te ofrecerá varias opciones para continuar la ejecución de tu programa. Si no tienes disquetera, también encontrarás varios aspectos del programa apropiados para usar sin sistema de disco.


He aquí lo que el programa hace para ti, toda vez que se encuentra un error:


  1. Te informa que ha aparecido un error, el número del error y la línea en donde fue detectado.
  2. Si has creado un archivo de mensajes de error (utilizando el programa 2 que se muestra más adelante), el sistema te imprimirá un mensaje de error, en español, explicitando lo que se encontró malo y las maneras de corregirlo. Si no tienes disquetera, no podrás implementar esta parte del sistema, pero todo el resto funcionará sin problemas.
  3. Te permitirá elegir si terminas allí la ejecución de tu programa o si, por el contrario, deseas continuarla de alguna de las tres formas siguientes:
    1. Continuar desde la línea en donde se detectó el error.
    2. Continuar desde la línea inmediatamente siguiente a la que presenta el error.
    3. Continuar con la línea LINK(equivalente a la función TRAP).

Ese es el sistema en términos generales. Ha sido estructurado para uso general y deberá ser modificado para tus necesidades particulares. A modo de ayuda, te explicaremos a continuación, cómo trabaja el programa.


Explicación del programa 1


Línea 0 : Es la declaración de DIMensiones que el sistema ATARI requiere para todas las variables alfanuméricas (strings).
Línea 1 : Hace saltar la ejecución del programa a la linea 32500 -inicio del Sistema para Reportar Errores- por acción del comando TRAP 32500 y del error generado por tu programa.


NOTA: No puedes usar el comando TRAP en tu programa. En su lugar, simplemente envía la variable LINK a la línea que normalmente habrías usado para el TRAP. Por ejemplo:

250 TRAP 5000	

deberás escribirlo como

250 LINK = 5000	

Línea 32500 : Encuentra la línea en la que ocurrió el error. También encuentra el número del error.


Línea 32510 : Imprime el numero del error y el de la línea en la cual ocurrió.


Líneas 32520 y 32530 : Asignan un nombre al archivo que se usará para rescatar, desde el disco, los mensajes de error apropiados.


Línea 32540 : Instrucción TRAP. Envía la ejecución del programa a la línea 32560 en caso que se detecte un error mientras se accesa el mensaje de error (por ejemplo si tienes apagada la disquetera, o simplemente no la tienes).


Línea 32550 : Abre el archivo de disco que corresponde y, si no encuentra problemas, omite el mensaje de defecto de la línea 32560.


Linea 32570 : Obtiene el mensaje de error desde el disco.


Linea 32580 : Envía la ejecución del programa a la subrutina que encuentra la línea inmediatamente siguiente a aquella en donde se detectó el error. También hace que la función TRAP vuelva a su estado inicial, es decir, el que le da la instrucción 1.


Líneas 32581 a 32586 : Imprimen el menú de opciones que se te ofrecerá.


Linea 32588 : Te pregunta cual de la funciones ofrecidas usarás.


Línea 32589 : Limpia la pantalla.


Línea 32590 : "Apaga" la instrucción TRAP, es decir, la coloca en el estado que tiene cuendo no se ha escrito ninguna sentencia TRAP.


Líneas 32591 a 32593 : Verifican si has elegido alguna de las otras opciones ofrecidas y envían la ejecución a la línea apropiada.


Linea 32599 : Retrocede la ejecución del programa para imprimir nuevamente el listado de opciones y lo hará una y otra vez, hasta que elijas alguna de las posibilidades ofrecidas.


Línea 32600 : Comienza la rutina para ubicar la línea siguiente a la del error detectado. Se coloca en 0 1 a variable LINSIG.


Línea 32610 : Ubica el número de la primera línea del programa.


Líneas 32620 a 32660 : Verifican las líneas, una por una, partiendo desde la primera, hasta ubicar la linea del error. La línea siguiente se usa entonces para el próximo número de línea.


Línea 32699 : Retorna la ejecución a la instrucción siguiente a aquel la que la llamó.


¡ESO ES TODO!


Listado de instrucciones "programa 1"
Programa para reportar errores

0 DIM NUMERR$(5),ARCHERR$(12),XA$(100)
1 TRAP 32500:REM ENVIA A RUTINA REPORTA ERRORES
2 REM PUEDES USAR LAS LINEAS 2 A 32499
3 REM PARA ESCRIBIR TU PROGRAMA.
4 REM COLOCA LA VARIABLE LINK EN LA
5 REM PRIMERA LINEA DE TUS MODULOS
6 REM NECESITAS UN DISKETTE EN EL DRIVE 1
7 REM CCN EL ARCHIVO DE MENSAJES DE ERROR
8 REM CREADOS CON EL PR06RAMA 2 QUE SE MUESTRA
9 REM EN EL SEGUNDO LISTADO DE ESTA SECCION
32500 LINERR=256*PEEK(187)+PEEK(186):NUMERR$=STR$(PEEK(195)):REM SISTEMA PARA REPORTAR ERRORES
32510 PRINT CHR$(125);"ERROR NUMERO ";NUMERR$:PRINT "EN LA LINEA ";LINERR
32520 ARCHERR$="D:ERROR"
32530 ARCHERR$(LEN(ARCHERR$)+1)=NUMERR$
32540 TRAP 32560
32550 OPEN #5,4,0,ARCHERR$:GOTO 32570
32560 PRINT "ERROR NUMERO ";NUMERR$;" NO ESTA EN ARCHIVO":GOTO 32580
32570 INPUT #5;XA$:PRINT XA$:CLOSE #5
32580 GOSUB 32600:TRAP 32500
32581 PRINT "OPCIONES OFRECIDAS:":PRINT 
32582 PRINT "(F) DETENER LA EJECUCION"
32583 PRINT "    CONTINUAR DESDE:"
32584 PRINT "(E) LA LINEA DEL ERROR  ";LINERR
32585 PRINT "(P) LA LINEA SIGUIENTE ";LINSIG
32586 PRINT "(L) LA LINEA LINK ";LINK
32588 POSITION 10,16:PRINT "CUAL ES TU ELECCION:";:INPUT XA$
32589 PRINT CHR$(125):REM LIMPIA LA PANTALLA
32590 IF XA$="F" THEN TRAP 34567:STOP 
32591 IF XA$="E" THEN GOTO LINERR
32592 IF XA$="P" THEN GOTO LINSIG
32593 IF XA$="L" THEN GOTO LINK
32599 GOTO 32581:REM NO SE HA ELEGIDO NINGUNA DE LA OPCIONES OFRECIDAS
32600 LINSIG=0:REM ENCUENTRA EL NUMERO DE LA LINEA SIGUIENTE AL ERROR
32601 REM LA LINEA DEL ERROR SE INGRESA A ESTA RUTINA COMO LINERR
32602 REM Y LA LINEA SIGUIENTE COMO LINSIG
32610 DIREC=PEEK(136)+PEEK(137)*256:REM ENCUENTRA EL NUMERO DE LA PRIMERA LINEA DEL PROGRAMA
32620 LIN=PEEK(DIREC)+PEEK(DIREC+1)*256
32630 IF LINSIG=1 THEN LINSIG=LIN:GOTO 32699
32640 IF LIN=LINERR THEN LINSIG=1
32650 DIREC=DIREC+PEEK(DIREC+2)
32660 GOTO 32620
32699 RETURN	

Explicación del programa 2


Para obtener el provecho máximo del Sistema para Reportar Errores deberás tener un disquete con los mensajes de error grabados en él.


Puedes usar el siguiente programa para crear tu propio Disco Maestro con tus mensajes de error, escritos a tu modo, como mejor los entiendas y como te sean más útiles.


El programa es muy sencillo de utilizar: simplemente te pedirá el numero del error y el mensaje que deseas ver cuando aparezca. El mensaje será entonces grabado en el disco, junto al número de error correspondiente.


Listado de instrucciones "programa 2"
Programa para crear archivos de mensajes de error

0 REM REPORTERO DE ERRORES
1 REM GRABA EN DISCO LOS MENSAJES DE ERROR
10 DIM NUMERR$(5),ARCHERR$(12),XA$(100)
90 PRINT CHR$(125):REM LIMPIA LA PANTALLA
100 PRINT :PRINT "GRABARE EN UN DISCO TUS MENSAJES DE   ERROR."
110 PRINT :PRINT "POR FAVOR DAME TU LISTA DE ERRORES"
120 TRAP 120:PRINT "INGRESA EL NUMERO DEL ERROR ";:INPUT NUMERR$
125 E=VAL(NUMERR$):TRAP 34567
130 ARCHERR$="D:ERROR"
140 ARCHERR$(LEN(ARCHERR$)+1)=NUMERR$
150 PRINT "ESCRIBE EL SIGNIFICADO DEL ERROR":INPUT XA$
160 OPEN #1,8,0,ARCHERR$
170 PRINT CHR$(125);"AHORA ESTOY GRABANDO EL ERROR NUMERO ";NUMERR$
180 PRINT #1;XA$:CLOSE #1
190 GOTO 120	

Como hacer funcionar el sistema


  1. Escribe cuidadosamente el programa 2 y grábalo en un disco. Si no tienes disquetera, no podrás usar esta parte.
  2. Confecciona un listado que contenga los números de error y los mensajes correspondientes, redactados según tú los entiendas y cómo te resulten más útiles.
  3. Ejecuta el programa 2, el que creará (en un disco) los archivos correspondientes a cada, mensaje de error, para ser leídos por el programa 1, cuando sea necesario.
  4. Escribe el programa 1 y grábalo. Será la matriz permanente de todos tus programas en el futuro.
  5. Cuando hagas tus propios programas, carga (LOAD) el programa 1 y, sobre él, escribe el tuyo utilizando el espacio que se ha dejado disponible. Puedes utilizar para tu programa los números de línea desde el 2 hasta el 32499, ambos inclusive.
  6. Cuando hagas corres tu programa, éste no se "caerá" (como le pasa frecuentemente a los programadores, sin excepción). Recibirás, en cambio, opciones para continuar o detener la ejecución del programa (a tu propio arbitrio) y obtendrás mensajes de error claros, de ayuda efectiva, los mismos que hayas preparado con el programa 2, y sin tener que investigar cada vez en tu Manual de Instrucciones.

NOTAS :


  1. Antes de ejecutar tu programa, coloca en la disquetera el disco que contiene los mensajes de error. En caso contrario, el programa no tendrá de donde obtenerlos.
  2. Graba tus programas bajo nombre diferentes a aquellos con que grabes los programas 1 y 2 y, en lo posible, en un disquete diferente para mayor seguridad.
  3. Prepara SIEMPRE un disco duplicado que contenga tus archivos y programas más importantes. Esto se llama RESPALDO.

Posibles aplicaciones y modificaciones


El sistema para reportar errores puede usarse mientras desarrollas tus programas, para mantener a mano tu propio listado de mensajes de error, proveyéndote, ademas, de varias opciones para continuar el proceso de ejecución, a diferencia del caso habitual que detiene la ejecución en forma ineludible.


El sistema queda bajo control manual cuando se detecta un error. Esto podría también automatizarse, implementando un TRAP e instrucciones de corrección. Te lo planteamos como tema de reflexión y desafío, pero te ayudaremos, a continuación, con algunas ideas.


Tu programa podría, por ejemplo, proporcionar una "copia dura" de los resultados obtenidos. (Se llama copia dura a aquella obtenida a través de una impresora).
Si se encontrara un error N° 138, por ejemplo, podrías imprimir en la pantalla un mensaje como: "Por favor enciende tu impresora" y entonces retroceder hasta la línea causante del problema. Luego imprimir un "cursor-up", es decir (en español), enviar el cursor a la línea inmediatamente superior y podrías repetir el ciclo (loop) hasta que sea encendida la impresora, después de lo cual continuara de inmediato la ejecución de tu programa.


Por otra parte, puedes integrar partes de este programa en cualquiera de los tuyos. Por ejemplo, las líneas 32520 y 32530, te muestran como tu programa podría crear dinámicamente sus propios nombres para los archivos en disco, basados en el valor de las variables.