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 sí
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. |
|