Guía de resolución de problemas de Euphoria

 
Si se encuentra atrapado, aquí hay algunas cosas que puede hacer:

1. - Escriba: guru
seguido por alguna palabra clave asociada con su problema.

Por ejemplo,
guru declare global include

2. - Verifique la lista de problemas comunes (debajo).
3. - Lea las partes relevantes de la documentación, es decir, refman.doc o library.doc.
4. - Intente correr su programa con las sentencias:
        with trace
        trace(1)
al comienzo de su archivo .ex principal para ver que pasa.
5. -
La lista de correo de Euphoria tiene una utilidad de búsqueda. Puede buscar el archivo de todos los mensajes previos. Hay una buena probabilidad que su pregunta ya haya sido discutida.
6. - Deje un mensaje en la lista de correo.

Aquí están algunos problemas comúnmente informados ( P: ) y sus soluciones ( S: ).
P: Corrí mi programa con exw y la ventana de consola desapareció antes que pudiera leer la salida.
S:
La ventana de consola solamente aparecerá si se la necesita, y desaparecerá inmediatamente cuando su programa finalice. Quizás debería codificar algo como:
        puts(1, "\nPresione Enter\n")
        if getc(0) then
        end if
al final de sus programa.

P: Quisiera cambiar las propiedades de la ventana de consola.
S:
Haga click derecho sobre c:\windows\system\conagent.exe y elija "propiedades". Puede cambiar el fondo y varios ítems más.

P: Al correr ex.exe en una caja DOS, hace que mi pequeña ventana DOS vaya a pantalla completa.
S:
Esto ocurrirá solamente la primera vez que ejecute ex.exe después de crear una nueva ventana DOS pequeña. Puede hacer que la ventana se haga pequeña otra vez presionando Alt+Enter. Después de esto, quedará pequeña. Su programa Euphoria puede mantener pequeña la ventana al ejecutar:
        if graphics_mode(-1) then
        end if
al inicio de la ejecución. Esto puede causar un breve parpadeo. Su programa puede forzar una ventana de texto a pantalla conpleta, ejecutando:
        if graphics_mode(3) then
        end if

P: Mi programa CGI Euphoria se "cuelga" o no tiene salida.
S:
Busque un archivo ex.err en su directorio cgi-bin. Active with trace / trace(3) para ver que sentencias se están ejecutando (mire ctrace.out en su cgi-bin). Inserte without warning al comienzo de su programa. En Windows, cuando hay advertencias, Euphoria emitirá una indicación antes de terminar, provocando que su programa se cuelgue. En Windows siempre debería usar exwc.exe para correr programas CGI, o puede tener problemas con la salida estándar (vea euphoria\bin\makecon.exw). Con el servidor web Apache, puede tener una primera línea en su programa de: #!.\exwc.exe para ejecutar su programa usando exwc.exe en el directorio actual (cgi-bin). En Linux/FreeBSD, cuide que su primera línea termine en LF, y no en CR-LF, o el #! no se manejará correctamente. En Linux también tiene que establecer correctamente permisos de ejecución en su programa, y ex.err y ctrace.out tienen que ser escribibles por el proceso servidor o no serán actualizados.

P: ¿Cómo hago para leer/escribir en los puertos?
S:
Consiga la colección de rutinas del sistema para DOS y nivel de máquina de Jacques Deschenes en la página web de Euphoria. Lea el archivo ports.e.

P:
Tengo problemas corriendo un programa gráfico DOS32. Presiono Ctrl+Break y el sistema parece quedar muerto.
S:
Algunos programas gráficos no funcionarán a menos que los inicie desde DOS o desde una ventana de pantalla completa del DOS bajo Windows. A veces, tiene que editar el código fuente del programa para usar un modo gráfico de resolución más baja, como el modo 18. Algunos modos gráficos SVGA pueden no trabajar bajo una ventana DOS, pero funcionarán cuando reinicie su máquina en modo MS-DOS. Un mejor controlador para su tarjeta de video puede solucionar esto.

Debería detener el programa usando el método que la documentación recomienda. Si aborta su programa con Ctrl+C o Ctrl+Break puede encontrar que su pantalla queda en un modo gráfico que usa divertidos colores. Cuando intenta escribir algo, puede resultar difícil o aún imposible leer lo que escribió. El sistema puede parecer muerto, cuando de hecho no lo está.

Pruebe los siguientes comandos DOS, en este orden, hasta que se alcaren las cosas:

1. escriba: Alt+Enter para obtener una ventana normal (no pantalla completa) nuevamente.

2. escriba: cls
Aún cuando no pueda ver ninguna tecla presionada en pantalla, éste puede limpiar la pantalla.

3. escriba: ex
El intérprete Euphoria intentará restablecer la pantalla modo de texto normal.

4. escriba: exit
Si está corriendo bajo Windows, esto terminará la sesión DOS.

5. escriba: Ctrl+Alt+Supr
Esto destruirá su actual sesión DOS bajo Windows, o reiniciará su computadora si está ejecutando bajo DOS.

6. Si todo falla, reinicie o apague y vuelva a encender la computadora. Inmediatamente debería ejecutarse scandisk cuando el sistema reinicie.

P:
Cuando ejecuto programas Euphoria SVGA, la salida en la pantalla se abarrota en la parte superior de la pantalla.
S: Pruebe: use_vesa(1) en machine.e.

Pruebe descargando el último controlador para su tarjeta de video desde Internet. El sitio de ATI es:

http://www.atitech.com

Otros que han tenido problemas de video, lo solucionaron instalando la última versión de DirectX.

P: Mi programa deja la ventana de DOS en un estado sucio. Quisiera que dejara una ventana normal de texto.
S:
Cuando su programa termina, debería llamar la función graphics_mode(-1) para regresar la ventana DOS a la normalidad. Por ejemplo:
        if graphics_mode(-1) then
        end if

P:
Cuando ejecuto mi programa desde el editor y presiono Ctrl+C, el programa se muere con un error del sistema operativo.
S:
Esto es un problema conocido. Ejecute su programa desde la línea de comandos, fuera del editor, si tiene que presionar Ctrl+C o Ctrl+Break.

P: Al ejecutar mi programa no hay errores, pero nada ocurre.
S:
Probablemente se olvidó de llamar al procedimiento principal. Necesita una sentencia de alto nivel que venga después de su procedimiento principal para llamarlo e iniciar la ejecución.

P:
Estoy tratando de llamar a una rutina documentada en library.doc, pero sigue diciendo que la rutina no está declarada.
S:
¿Recordó incluir el archivo .e necesario del directorio euphoria\include? Si la sintaxis de la rutina dice, por ejemplo, "include graphics.e", entonces su programa tiene que tener "include graphics.e" (sin las comillas) antes del lugar donde llama por primera vez a la rutina.

P:
Tengo un archivo de inclusión con una rutina a la que quiero llamar, pero cuando intento llamarla, dice que la rutina no ha sido declarada. Pero ha sido declarada.
S:
¿Recordó definir la rutina con "global" delante de ella en el archivo de inclusión? Sin "global", la rutina no es visible fuera de su propio archivo.

P: ¿Cómo ingreso una línea de texto desde el usuario?
S:
Vea gets() en library.doc. gets(0) leerá una línea desde la entrada estándar, que normalmente es el teclado. La línea siempre tiene que terminar en \n. Para quitar el caracter \n sobrante, haga:
        line = line[1..length(line)-1]
También vea prompt_string() en get.e.

P:
Después de ingresar una cadena desde el usuario con gets(), la siguiente línea que aparece en pantalla no comienza en el margen izquierdo.
S:
Su programa debería emitir un caracter de nueva línea, por ejemplo, puts(SCREEN, '\n') después de hacer un gets(). Esto no ocurre automáticamente.

P: ¿Cómo hago para convertir un número en una cadena?
S: Use sprintf() en library.doc, por ejemplo:
        string = sprintf("%d", number)
Además de %d, también puede probar otros formatos, como %x (hexadecimal) o %f (punto flotante).

P: ¿Cómo hago para convertir una cadena en un número?
S: Use value() en library.doc o, si está leyendo desde un archivo o el teclado, use get().

P: Dice que estoy tratando de redefinir ni variable del ciclo for.
S:
Las variables de los ciclos for se declaran automáticamente. Aparentemente, ya tiene una declaración anterior con el mismo nombre en su rutina o programa. Quite esa declaración anterior o cábiele el nombre a la variable del ciclo.

P:
Obtengo el mensaje "caracter de escape desconocido" en una línea donde estoy tratando de especificar un nombre de archivo.
S:
No escriba "C:\TMP\MYFILE", sino "C:\\TMP\\MYFILE". La barra invertida se usa para caracteres de escape como \n o \t. Para especificar una barra sola en una cadena, necesita escribir \\.

P: Estoy tratando de usar la entrada del ratón en un modo gráfico SVGA pero apenas trabaja .
S:
DOS no soporta la entrada del ratón en modos más allá del modo gráfico 18 (640x480 16 colores). DOS 7.0 (parte de Windows 95/98) parece dejarle leer, por lo menos, las coordenadas x-y y los botones en modos de alta resolución, pero usted puede tener que dibujar su propio indicador de ratón en los modos de alta resolución. Graeme Burke, Peter Blue y otros tienen buenas soluciones a este problema. Ver sus archivos en la página web "Archivo" de Euphoria.

P: Estoy tratando de imprimir una cadena usando printf() pero solo sale el primer caracter.
S: Vea la descripción de printf() en library.doc. Puede necesitar poner llaves alrededor de su cadena para que sea vista como un único valor a imprimir, por ejemplo, escribió:
        printf(1, "Hello %s", mystring)
donde debería haber escrito:
        printf(1, "Hello %s", {mystring})

P: Cuando imprimo números usando print() o ?, solamente se muestran 10 dígitos significativos.
S:
Euphoria normalmente solo muestra 10 dígitos. Internamente, todos los cálculos se realizan usando al menos 15 dígitos significativos. Para ver más dígitos, tiene que usar printf(). Por ejemplo,
        printf(1, "%.15f", 1/3)
Esto mostrará 15 dígitos.

P: Se queja de mi declaración de rutina, diciendo "aquí se esperaba un tipo".
S:
Al declarar los parámetros de la subrutina, Euphoria le requiere proporcionar un tipo explícito para cada parámetro individual. Por ejemplo:
        procedure foo(integer x, y)         -- MAL
        procedure foo(integer x, integer y) -- BIEN
En el resto de los contextos es aceptable hacer una lista:
        atom a, b, c, d, e

P: Declarando algunas variables en medio de una rutina, me da un error de sintaxis.
S:
Todas las declaraciones de variables privadas tienen que estar al comienzo de su subrutina, antes de cualquier sentencia ejecutable. (En el nivel más alto de un programa, fuera de cualquier rutina, está bien declarar variables en cualquier parte).

P: Aparece: Error de sintaxis - esperaba ver posiblemente ' xxx ', no ' yyy '
S:
En este punto en su programa se escribió una variable, palabra clave, número o símbolo de puntuación, yyy, que no se ajusta sintácticamente con lo que venía de él. El compilador le está ofreciendo un elemplo, xxx, de algo que sería aceptado en este punto, en lugar de yyy. Observe que puede haber muchas otras (y mucho mejores) posibilidades legales en este punto que xxx, pero xxx pudo por lo menos darle una pista en cuanto a lo que "está pensando" el compilador.

P: Tengo problemas para ejecutar Euphoria con DR-DOS.
S: Su config.sys debería tener solamente HIMEM.SYS pero no EMM386.EXE.

P: Intento de correr un programa con exw y dice "este es un ejecutable de modo caracter de Windows NT".
S:
exw.exe es un programa Windows de 32 bits. Tiene que ejecutarse bajo Windows o en una ventana DOS. No funcionará bajo DOS puro en un sistema viejo. ex.exe funcionará bajo DOS puro.