call

Sintaxis: call(a)
Descripción:
Llama a una rutina de lenguaje de máquina que comienza en la dirección 'a'. Esta rutina tiene que ejecutar una instrucción RET #C3 para devolver el control a Euphoria. Esta rutina, también, debería guardar y restablecer cualquier registro que utilice.
Comentarios:
Puede asignar un bloque de memoria para la rutina y entonces ponerlo en los bytes del código de máquina. Tendría que asignar otros bloques de memoria para datos y parámetros con los que pueda operar el código. Las direcciones de estos bloques podrían ser puestas dentro del código de máquina.
Programa de ejemplo: demo\callmach.ex
Ver también: allocate, free, peek, poke, poke4, c_proc, define_c_proc

call_back

Plataforma: WIN32, Linux, FreeBSD
Sintaxis: include dll.e
a = call_back(i)
o
a = call_back({i1, i})
Descripción:
Obtiene una dirección de máquina para la rutina Euphoria con el routine id 'i'. Esta dirección puede la puede usar Windows, o una rutina C externa en una .dll de Windows .dll o una librería compartida de Linux/FreeBSD (.so), como una dirección de retorno ("call-back") de 32 bits para llamar a su rutina Euphoria. En Windows, puede especificar 'i1', que determina que la convención de llamada de C se puede usar para llamar a su rutina. Si 'i1' es '+', entonces su rutina trabajará con la convención de llamadas cdecl. Por defecto trabajará con la convención stdcall. En Linux y FreeBSD debería usar solamente la primera forma, ya que solo existe una convención de llamadas estándar.
Comentarios:
Puede iniciar tantas funciones call-back como quiera, pero todas tienen que ser funciones Euphoria (o tipos) con 0 a 9 argumentos. Si su rutina no devuelve nada (realmente tendría que ser un procedimiento), solo devuelve 0 (digamos), y la rutina C llamada puede ignorar el resultado.

Cuando se llama a su rutina, los valores de los argumentos serán todos de 32 bits sin signo (positivos). Debería declarar a cada parámetro de de su rutina como átomo, a menos que quiera imponer una verificación más estrecha. Su rutina tiene que devolver un valor entero de 32 bits.

También puede usar una dirección call-back para especificar una rutina Euphoria como un manejador de excepciones en la función signal() de Linux/FreeBSD. Por ejemplo, tendría que capturar la señal SIGTERM, y hacer el cierre del sistema. Algunos servidores Web envían una señal SIGTERM a un proceso CGI que está usando demasiado tiempo de CPU.

Una rutina call-back que usa la convención cdecl y devuelve un resultado de punto flotante, podría no funcionar con exw. Esto se debe a que el compilador C de Watcom (usado para generar exw) tiene una forma no estándar de manejar los valores de retorno cdecl de punto flotante.

Programa de ejemplo: demo\win32\window.exw, demo\linux\qsort.exu
Ver también: routine_id, platform.doc

c_func

Plataforma: WIN32, Linux, FreeBSD
Sintaxis: a = c_func(i, s)
Descripción:
Llama a la función de C, o rutina de código de máquina con el routine id 'i'. 'i' tiene que ser un routine id válido, devuelto por define_c_func(). 's' es una secuencia de valores de argumentos de longitud 'n', donde 'n' es la cantidad de argumentos necesitada por la función. 'a' será el resultado devuelto por la función de C.
Comentarios: Si la función C no toma argumentos, entonces 's' debería ser {}.

Si pasa un valor de argumento que contiene parte fraccionaria, cundo la función de C espera un tipo entero de C, el argumento será redondeado a 0. Por ejemplo: 5.9 se pasará a 5 y -5.9 se pasará a -5.

La función C podría ser parte de una .dll creada por el Traductor Euphoria a C.

Ejemplo:
atom user32, hwnd, ps, hdc
integer BeginPaint

-- abre user32.dll - que contiene la función BeginPaint de C
user32 = open_dll("user32.dll")

-- la función BeginPaint de C, toma un argumento entero de C y 
-- un puntero de C, y devuelve como resultado, un entero de C:
BeginPaint = define_c_func(user32, "BeginPaint",
                           {C_INT, C_POINTER}, C_INT)

-- llama a BeginPaint, pasando hwnd y ps como los argumentos,
-- en hdc se adigna el resultado:
hdc = c_func(BeginPaint, {hwnd, ps})

Ver también: c_proc, define_c_func, open_dll, platform.doc

c_proc

Plataforma: WIN32, Linux, FreeBSD
Sintaxis: c_proc(i, s)
Descripción:
Llama a una función C, o una rutina en código de máquina, mediante routine id 'i'. 'i' tiene que ser un routine id válido, devuelto por define_c_proc(). 's' es una secuencia de valores de argumento de longitud 'n', donde 'n' es la cantidad de argumentos requeridos por la función.
Comentarios: Si la función C no toma argumentos, entonces 's' debería ser {}.

Si pasa un valor de argumento que contiene parte fraccionaria, cuando la función de C espera un tipo entero de C, el argumento será redondeado a 0. Por ejemplo: 5.9 se pasará a 5 y -5.9 se pasará a -5.

La función C podría ser parte de una .dll creada por el Traductor Euphoria a C.

Ejemplo:
atom user32, hwnd, rect
integer GetClientRect

-- open user32.dll - contiene ña función C GetClientRect 
user32 = open_dll("user32.dll")

-- GetClientRect es una función C VOID que toma un entero de C
-- y un puntero de C como argumentos:
GetClientRect = define_c_proc(user32, "GetClientRect",
                              {C_INT, C_POINTER})

-- pasa hwnd y rect como los argumentos
c_proc(GetClientRect, {hwnd, rect})

Ver también: c_func, call, define_c_proc, open_dll, platform.doc

call_func

Sintaxis: x = call_func(i, s)
Descripción:
Llama a una función Euphoria definida por el usuario, mediante routine id 'i'. 'i' tiene que ser un routine id válido, devuelto por routine_id(). 's' tiene que ser una secuencia de valores de argumento de longitud 'n', donde 'n' es la cantidad de argumentos requeridos por la función 'i'. 'x' será el resultado devuelto por la función 'i'.
Comentarios: Si la función 'i' no toma argumentos, entonces 's' debería ser {}.
Programa de ejemplo: demo\csort.ex
Ver también: call_proc, routine_id

call_proc

Sintaxis: call_proc(i, s)
Descripción:
Llama a un procedimiento Euphoria definida por el usuario mediante routine id 'i'. 'i' tiene que ser un routine id válido, devuelto por routine_id(). 's' tiene que ser una secuencia de valores de argumento de longitud 'n', donde 'n' es la cantidad de argumentos requeridos por el procedimiento 'i'.
Comentarios: Si el procedimiento 'i' no toma argumentos, entonces 's' debería ser {}.
Ejemplo:
global integer foo_id

procedure x()
    call_proc(foo_id, {1, "Hola Mundo\n"})
end procedure

procedure foo(integer a, sequence s)
    puts(a, s)
end procedure

foo_id = routine_id("foo")

x()

Ver también: call_func, routine_id

chdir

Sintaxis: include file.e
i = chdir(s)
Descripción:
Establece el directorio actual a la ruta dada por la secuencia 's'. 's' tiene que indicar un directorio que exista en el sistema. Si resulta bien, chdir() devuelve 1. Si falla, chdir() devuelve 0.
Comentarios:
Al establecer el directorio actual, puede referirse a los archivos en este directorio usando solamente su nombre de archivo.

La función current_dir() devolverá el nombre del directorio actual.

En DOS32 y WIN32 el directorio actual es una propiedad global compartida por todos los procesos que corren bajo un shell. En Linux/FreeBSD, un subproceso puede cambiar el directorio actual por sí mismo, pero esto no afecta al directorio actual de su proceso padre.

Ejemplo:
if chdir("c:\\euphoria") then
    f = open("leeme.doc", "r")
else
    puts(1, "Error: No euphoria directory?\n")
end if
Ver también: current_dir

check_break

Sintaxis: include file.e
i = check_break()
Descripción:
Devuelve la cantidad de veces que se presionaron Ctrl+C or Ctrl+Break desde la última llamada a check_break(), o desde el comienzo del programa si esta es la primera llamada.
Comentarios:
Esta función es útil después de haber llamado a allow_break(0) que evita que Ctrl+C o Ctrl+Break terminen el programa. Puede usar check_break() para determinar si el usuario presionó alguna de esas teclas; entonces realizar alguna acción, como un cierre "elegante" de su programa.

Cuando lea el teclado, ni Ctrl+C, ni Ctrl+Break se devolverán como caracteres ingresados. Solamente se pueden detectar llamando a check_break().

Ejemplo:
k = get_key()
if check_break() then
    temp = graphics_mode(-1)
    puts(1, "Cerrando la aplicación...")
    save_all_user_data()
    abort(1)
end if

Ver también: allow_break, get_key

clear_screen

Sintaxis: clear_screen()
Descripción: Limpia la pantalla, usando el color de fondo actual (puede establecerse con bk_color()).
Comentarios: Funciona en todos los modos de texto y gráficos de píxel.
Ver también: bk_color, graphics_mode

close

Sintaxis: close(fn)
Descripción: Cierra un archivo o dispositivo y descarga cualquier caracter que esté en el búfer.
Comentarios: Cualquier archivo abierto se cerrará automáticamente al terminar el programa.
Ver también: open, flush

command_line

Sintaxis: s = command_line()
Descripción:
Devuelve una secuencia de cadena, donde cada cadena es una palabra de la línea de comandos que inició su programa. La primera palabra será tanto la ruta al ejecutable de Euphoria (ex.exe, exw.exe o exu), como la de su archivo ejecutable enlazado. La siguiente palabra es el nombre de su archivo principal Euphoria, o (nuevamente) la ruta a su archivo ejecutable enlazado. Después de ellas, vendrá cualquier palabra adicional escrita por el usuario. Puede usar estas palabras en su programa.
Comentarios:
El intérprete Euphoria en sí mismo no usa ninguna opción de la línea de comandos. Su programa puede usar libremente cualquier opción.

El usuario puede poner comillas alrededor de una serie de palabras para convertirlas en un argumento único.

Si enlaza su programa, encontrará que todos los argumentos de la línea de comandos son iguales, excepto los dos primeros, aún cuando el usuario no escriba "ex" en la línea de comandos (ver los ejemplos de más abajo).

Ejemplo 1:
-- El usuario escribe:  ex miprog mifich.dat 12345 "fin"

cmd = command_line()

-- cmd será:
      {"C:\EUPHORIA\BIN\EX.EXE",
       "miprog",
       "mifich.dat",
       "12345",
       "fin"}

Ejemplo 2:
-- Su programa se enlaza con el nombre "miprog.exe"
-- y se almacena en el directorio c:\misarchivos
-- El usuario escribe: miprog mifich.dat 12345 "fin"

cmd = command_line()

-- cmd será:
       {"C:\MISFICHEROS\MIPROG.EXE",
        "C:\MISFICHEROS\MIPROG.EXE", -- relleno
        "mifich.dat",
        "12345",
        "fin"
        }

-- Vea que todos los argumentos son los mismos que los del 
-- del ejemplo 1 excepto por los primeros dos.
-- El segundo argumento es siempre igual al primero y se inserta
-- para mantener la numeración de los argumentos siguientes,
-- sea que su programa esté enlazado como un .exe o no.
Ver también: getenv

compare

Sintaxis: i = compare(x1, x2)
Descripción:
Devuelve 0 si los objetos 'x1' y 'x2' son idénticos, 1 si 'x1' es mayor que 'x2' o, -1 si 'x1' es menor que 'x2'. Se considera que los átomos son menores que las secuencias. Las secuencias se comparan "alfabéticamente" comenzando por el primer elemento hasta que se encuentra una diferencia.
Ejemplo 1:
x = compare({1,2,{3,{4}},5}, {2-1,1+1,{3,{4}},6-1})
-- idénticos, x es 0

Ejemplo 2:
if compare("ABC", "ABCD") < 0 then   -- -1
    -- será verdadero: ABC es "menor" porque es más corta
end if

Ejemplo 3:
x = compare({12345, 99999, -1, 700, 2},
            {12345, 99999, -1, 699, 3, 0})
-- x será 1 porque 700 > 699

Ejemplo 4:
x = compare('a', "a")
-- x será -1 porque 'a' es un átomo
-- mientras que "a" es una secuencia

Ver también: equal, operadores relacionales, operaciones sobre secuencias

cos

Sintaxis: x2 = cos(x1)
Descripción: Devuelve el coseno de 'x1', donde 'x1' está expresado en radianes.
Comentarios: Esta función se puede aplicar a un átomo o a todos los elementos de una secuencia.
Ejemplo:
x = cos({.5, .6, .7})

-- x es {0.8775826, 0.8253356, 0.7648422}

Ver también: sin, tan, log, sqrt

crash_file

Sintaxis: include machine.e
crash_file(s)
Descripción:
Especifica un nombre de archivo 's', para mantener el diagnóstico de error, en caso que Euphoria deba detener el programa debido a un error en tiempo de compilación o de ejecución.
Comentarios:
Normalmente, Euphoria muestra en pantalla un mensaje de diagnóstico como "error de sintaxis" o "división por cero", tanto como realiza el volcado de la información de depuración en el archivo ex.err dentro del directorio actual. Llamando a crash_file(), puede controlar en qué directorio y archivo se escribe la información de depuración.

's' puede estar vacío, es decir, "". En este caso, la información de depuración o los mensajes de diagnóstico no se mostrarán por pantalla, ni se escribirán en un archivo. También, 's' podría ser "NUL" o "/dev/null", en este caso se verán los mensajes de diagnóstico por pantalla, pero la información del archivo ex.err será descartada.

Puede llamar a crash_file() tantas veces como quiera en diferentes partes del programa. El archivo especificado en la última llamada será el que se use.

Ejemplo:
crash_file("\\tmp\\mibug")

Ver también: abort, crash_message, depuración y análisis de perfiles de ejecución

crash_message

Sintaxis: include machine.e
crash_message(s)
Descripción:
Especifica una cadena 's', para imprimirse en pantalla cuando Euphoria tiene que detener su programa, debido a un error en tiempo de compilación o de ejecución.
Comentarios:
Normalmente, Euphoria imprime un mensaje de diagnóstico como "error de sintaxis" o "división por cero" en pantalla, del mismo modo que vuelca la información de depuración en ex.err. Los mensajes de error de Euphoria no serán significativos para los usuarios, a menos que sean programadores Euphoria. Al llamar a crash_message(), puede controlar el mensaje que aparecerá en la pantalla. La información de depuración se almacenará, igualmente, en ex.err. Usted no pierde ninguna información por usar esta función.

's' puede contener '\n' (caracteres de nueva línea) por lo que su mensaje puede ocupar varias línea en la pantalla. Euphoria limpiará y cambiará la línea superior de la pantalla a modo de texto antes que imprima su mensaje.

Puede llamar a crash_message() tantas veces como quiera desde diferentes partes de su programa. El mensaje especificado por la última llamada será el que se muestre.

Ejemplo:
crash_message("Ocurrió un error inesperado!\n" &
              "Por favor, contacte a juan_perez@auxilio.com\n" &
              "No borre el archivo \"ex.err\".\n")

Ver también: abort, crash_file, depuración y análisis de perfiles de ejecución

current_dir

Sintaxis: include file.e
s = current_dir()
Descripción: Devuelve el nombre del directorio actual.
Ejemplo:
sequence s
s = current_dir()
-- s podría valer "C:\EUPHORIA\DOC" si se estuviera en ese directorio.

Ver también: dir, chdir, getenv

cursor

Sintaxis: include graphics.e
cursor(i)
Descripción: Selecciona un estilo de cursor. graphics.e contiene:
    global constant NO_CURSOR = #2000,
             UNDERLINE_CURSOR = #0607,
       THICK_UNDERLINE_CURSOR = #0507,
            HALF_BLOCK_CURSOR = #0407,
                 BLOCK_CURSOR = #0007
El segundo y cuarto dígitos hexadecimales (desde la izquierda) determinan la fila superior e infoerior de píxeles en el cursor. El primer dígito controla si el cursor es visible o no. Por ejemplo, #0407 activa las filas 4 a la 7.
Comentarios: En los modos gráficos de píxel el cursor no se muestra.
Ejemplo:
cursor(BLOCK_CURSOR)

Ver también: graphics_mode, text_rows

custom_sort

Sintaxis: include sort.e
s2 = custom_sort(i, s1)
Descripción: Ordena los elementos de la secuencia 's1', usando la función de comparación de routine id 'i'.
Comentarios:
Su función de comparación tiene que ser una función de dos argumentos, similar a compare() de Euphoria. compare() compara dos objetos y devuelve -1, 0 o +1.
Programa de ejemplo: demo\csort.ex
Ver también: sort, compare, routine_id

date

Sintaxis: s = date()
Descripción: Devuelve una secuencia con la siguiente información:
             {  año,  -- desde 1900
                mes,  -- Enero = 1
                día,  -- día del mes, comenzando en 1
               hora,  -- 0 a 23
            minutos,  -- 0 a 59
           segundos,  -- 0 a 59
   día de la semana,  -- Domingo = 1
        día del año}  -- 1 de Enero = 1
Ejemplo:
now = date()
-- now vale: {95,3,24,23,47,38,6,83}
-- es decir, Viernes 24 de Marzo de 1995 a las 11:47:38pm, día 83 del año
Comentarios:
El valor devuelto para el año es la cantidad de años desde el 1900 (no son los últimos dos dígitos del año). Por ejemplo, el año 2000 es 100, el 2001 es 101, etc.
Ver también: time

define_c_func

Sintaxis: include dll.e
i1 = define_c_func(x1, x2, s1, i2)
Descripción:
Define las características tanto de una función de C, como de una rutina de código de máquina que devuelve un valor. Se devolverá un entero pequeño, 'i1' conocido como routine id. Use este routine id como el primer argumento de c_func() cuando desea llamar a la función desde Euphoria.

Al definir una función de C, 'x1' es la dirección de la librería que contiene la función de C, mientras que 'x2' es el nombre de la función de C. 'x1' es un valor devuelto por open_dll(). Si no se puede encontrar a la función de C, routine id devolverá -1. En Windows, puede agregar un caracter '+' como prefijo del nombre de la función. Esto le indica a Euphoria que la función usa la convención de llamadas cdecl. Por defecto, Euphoria asume que la rutina de C acepta la convención stdcall.

Al definir una rutina de código de máquina, 'x1' tiene que ser la secuencia vacía, "" o {}, y 'x2' indica la dirección de la rutina de código de máquina. Puede poner los bytes del código de máquina en un bloque de memoria reservada usando allocate(). En Windows, se espera normalmente que la rutina de código de máquina siga la convención de llamadas stdcall, pero si desea usar la convención cdecl en lugar de aquella, puede escribir {'+', dirección} en lugar de dirección para 'x2'.

's1' es una lista de los tipos de parámetros de la función. 'i2' es el tipo devuelto por la función. En dll.e hay una lista de los tipos de C, y estos se pueden usar para definir también los parámetros del código de máquina:

    global constant C_CHAR = #01000001,
                   C_UCHAR = #02000001,
                   C_SHORT = #01000002,
                  C_USHORT = #02000002,
                     C_INT = #01000004,
                    C_UINT = #02000004,
                    C_LONG = C_INT,
                   C_ULONG = C_UINT,
                 C_POINTER = C_ULONG,
                   C_FLOAT = #03000004,
                  C_DOUBLE = #03000008
La función de C que usted define, podría ser una creada por el Traductor Euphoria a C. En este caso puede pasarle datos a Euphoria y recibir de regreso datos Euphoria. En dll.e hay una lista de tipos Euphoria:
    global constant
         E_INTEGER = #06000004,
         E_ATOM    = #07000004,
         E_SEQUENCE= #08000004,
         E_OBJECT  = #09000004
Comentarios:
Puede pasar o devolver cualquier tipo entero o puntero de C. También puede pasar un átomo Euphoria como un double o float de C, y obtener un double o float de C devuelto, como un átomo Euphoria.

Los tipos de los parámetros que usan 4 bytes o menos se pasan de la misma forma, por lo que no es necesario ser exacto. Sin embargo, la distinción entre 'con signo' o 'sin signo' puede ser importante cuando especifica el tipo de retorno de una función.

Actualmente, no hay forma de pasar una estructura de C por valor u obtener una estructura de C como resultado de retorno. Solamente puede pasar un puntero a una estructura y obtener un puntero a la estructura como resultado.

Si no está interesado en usar el valor devuelto por la función C, debería definirla con define_c_proc() y llamarla con c_proc().

Si usa exw para llamar una rutina cdecl de C que devuelve un valor de punto flotante, esto podría no funcionar. Esto se debe a qye el compilador de C de Watcom (usado para generar exw) tiene una forma no estándar de manejar los valores de retorno cdecl de punto flotante.

Si usa c_func() para pasar valores de punto flotante a rutinas de código de máquina, la llamada resultará más rápida que si la hace mediante call(), ya que no tiene que usar atom_to_float64() y poke() para obtener los valores de punto flotante en memoria.

ex.exe usa llamadas a rutinas de punto flotante de WATCOM (que luego usa instrucciones de punto flotante por hardware si está disponible), por lo que los valores de punto flotante, generalmente, se pasan y devuelven en pares de registros enteros, en lugar de registros de punto flotante. Tendría que desensamblar algún código Watcom para ver como trabaja.

Ejemplo:
atom user32
integer LoadIcon

-- abrir user32.dll - contiene la función C LoadIconA
user32 = open_dll("user32.dll")

-- Toma como argumentos un puntero de C y un entero de C.
-- Devuelve un entero de C como resultado.
LoadIcon = define_c_func(user32, "LoadIconA",
                         {C_POINTER, C_INT}, C_INT)
-- Usamos "LoadIconA" aquí porque sabemos que LoadIconA
-- necesita la convención stdcall, como lo hacen todas
-- las rutinas de .dll estándares en la WIN32 API. 
-- Para especificar la convención cdecl, deberíamos haber usado "+LoadIconA".

if LoadIcon = -1 then
    puts(1, "No se pudo encontrar a LoadIconA!\n")
end if

Ver también: euphoria\demo\callmach.ex, c_func, define_c_proc, c_proc, open_dll, platform.doc

define_c_proc

Sintaxis: include dll.e
i1 = define_c_proc(x1, x2, s1)
Descripción:

Define las características tanto de una función de C, como de una rutina de código de máquina que desea llamar como procedimiento desde su programa Euphoria. Se devolverá un entero pequeño, 'i1' conocido como routine id. Use este routine id como el primer argumento de c_proc() cuando desea llamar a la rutina desde Euphoria.

Al definir una función de C, 'x1' es la dirección de la librería que contiene la función de C, mientras que 'x2' es el nombre de la función de C. 'x1' es un valor devuelto por open_dll(). Si no se puede encontrar a la función de C, routine id devolverá -1. En Windows, puede agregar un caracter '+' como prefijo del nombre de la función. Esto le indica a Euphoria que la función usa la convención de llamadas cdecl. Por defecto, Euphoria asume que la rutina de C acepta la convención stdcall.

Al definir una rutina de código de máquina, 'x1' tiene que ser la secuencia vacía, "" o {}, y 'x2' indica la dirección de la rutina de código de máquina. Puede poner los bytes del código de máquina en un bloque de memoria reservada usando allocate(). En Windows, se espera normalmente que la rutina de código de máquina siga la convención de llamadas stdcall, pero si desea usar la convención cdecl en lugar de aquella, puede escribir {'+', dirección} en lugar de dirección para 'x2'.

's1' es una lista de los tipos de parámetros de la función. 'i2' es el tipo devuelto por la función. En dll.e hay una lista de los tipos de C, y estos se pueden usar para definir también los parámetros del código de máquina (como se muestra más arriba).

La función de C que usted define, podría ser una creada por el Traductor Euphoria a C. En este caso puede pasarle datos a Euphoria y recibir de regreso datos Euphoria. En dll.e hay una lista de tipos Euphoria, que se muestra más arriba.

Comentarios:
Puede pasar cualquier tipo entero o puntero de C. También puede pasar un átomo Euphoria como un double o float de C.

Los tipos de los parámetros que usan 4 bytes o menos se pasan de la misma forma, por lo que no es necesario ser exacto.

Actualmente, no hay forma de pasar una estructura de C por valor. Solamente puede pasar un puntero a la estructura.

La función de C puede devolver un valor, pero éste será ignorado. Si quiere usar el valor devuelto por la función de C, tiene que definirla con define_c_func() y llamarla con c_func().

Ejemplo:
atom user32
integer ShowWindow

-- abrir user32.dll - contiene la función de C ShowWindow
user32 = open_dll("user32.dll")

-- Tiene 2 parámetros que son enteros de C.
ShowWindow = define_c_proc(user32, "ShowWindow", {C_INT, C_INT})
-- Si ShowWindow usase la convención cdecl, 
-- tendríamos que escribir "+ShowWindow" aquí

if ShowWindow = -1 then
    puts(1, "No se encuentra ShowWindow!\n")
end if

Ver también: c_proc, define_c_func, c_func, open_dll, platform.doc

define_c_var

Plataforma: WIN32, Linux, FreeBSD
Sintaxis: include dll.e
a1 = define_c_var(a2, s)
Descripción:
'a2' es la dirección de una librería compartida de Linux o FreeBSD, o de una .dll de Windows como las devueltas por open_dll(). 's' es el nombre de una variable global de C definida dentro de la librería. 'a1' será la dirección de memoria de la variable 's'.
Comentarios:
Una vez que tiene la dirección de la variable de C, y conoce su tipo, puede usar peek() y poke() para leer o escribir el valor de la variable.
Programa de ejemplo: euphoria/demo/linux/mylib.exu
Ver también: c_proc, define_c_func, c_func, open_dll, platform.doc

dir

Sintaxis: include file.e
x = dir(st)
Descripción:
Devuelve información de directorio para el archivo o directorio indicado en 'st'. Si no existe un archivo o directorio con este nombre, entoces se devuelve -1. En Windows y DOS 'st' puede contener los comodines * y ? para seleccionar varios archivos.

Esta información es similar a lo que obtiene con el comando DIR del DOS. Se devuelve una secuencia, donde cada elemento es una secuencia que describe un archivo o subdirectorio.

Si 'st' indica un directorio, entonces 'x' puede tener entradas para "." y "..", igual que con el comando DIR del DOS. Si 'st' indica un archivo, entonces 'x' tendrá solo una entrada, es decir, length(x) será 1. Si 'st' contiene comodines, puede tener varias entradas.

Cada entrada contiene el nombre, atributos y tamaño del archivo, así como el año, mes, día, hora, minutos y segundos de la última modificación. Puede referirse a los elementos de una entrada con las siguiente constantes definidas en file.e:

    global constant D_NAME = 1,
              D_ATTRIBUTES = 2,
                    D_SIZE = 3,

                    D_YEAR = 4,
                   D_MONTH = 5,
                     D_DAY = 6,

                    D_HOUR = 7,
                  D_MINUTE = 8,
                  D_SECOND = 9
El elemento atributo es una secuencia de cadena que contiene caracteres con valor:
    'd' -- directorio
    'r' -- archivo de solo lectura
    'h' -- archivo oculto
    's' -- archivo del sistema
    'v' -- nombre del volumen
    'a' -- archivo archivo
Un archivo normal sin atributos especiales podría tener una cadena vacía en este campo.
Comentarios: El directorio de nivel superior, por ejemplo, c:\ no tiene las entradas "." o "..".

Frecuentemente, se usa esta función para probar la existencia de un archivo o directorio.

Bajo WIN32, 'st' puede tener en cualquier parte de la ruta, un nombre largo de archivo o directorio.

Bajo Linux/FreeBSD, el único atributo disponible es 'd'.

DOS32: El nombre de archivo devuelto en D_NAME será un nombre DOS estándar 8.3 (Vea una solución mejor en el Archivo de la página web).

WIN32: El nombre de archivo devuelto en D_NAME será un nombre largo.

Ejemplo:
d = dir(current_dir())

-- d podría tener:
  {
    {".",    "d",     0  1994, 1, 18,  9, 30, 02},
    {"..",   "d",     0  1994, 1, 18,  9, 20, 14},
    {"fred", "ra", 2350, 1994, 1, 22, 17, 22, 40},
    {"sub",  "d" ,    0, 1993, 9, 20,  8, 50, 12}
  }

d[3][D_NAME] debería ser "fred"

Programas de ejemplo: bin\search.ex, bin\install.ex
Ver también: wildcard_file, current_dir, open

display_image

Plataforma: DOS32
Sintaxis: include image.e
display_image(s1, s2)
Descripción:
Muestra en el punto 's1' de una pantalla de gráficos de píxel la secuencia 2D de píxeles contenida en 's2'. 's1' es una secuencia de 2 elementos {x, y}. 's2' es una secuencia de secuencias, donde cada secuencia es una fila horizontal de colores de píxel a mostrar. El primer píxel de la primera secuencia se muestra en s1. Es el píxel superior izquierdo. Los demás píxeles aparecen a la derecha o debajo de este punto.
Comentarios:
's2' podría ser el resultado de una llamada previa a save_image(), o read_bitmap(), o algo creado por usted.

Las secuencias (filas) de la imagen no tienen que ser todas de la misma longitud.

Ejemplo:
display_image({20,30}, {{7,5,9,4,8},
                        {2,4,1,2},
                        {1,0,1,0,4,6,1},
                        {5,5,5,5,5,5}})
-- Esto mostrará una imagen pequeña conteniendo 4 filas de píxeles.
-- El primer píxel (7) de la fila superior estará en {20,30}. 
-- La fila superior contiene 5 píxeles, la última tiene 6,
-- terminando en {25,33}.
Programa de ejemplo: demo\dos32\bitmap.ex
Ver también: save_image, read_bitmap, display_text_image

display_text_image

Plataforma: DOS32, Linux, FreeBSD
Sintaxis: include image.e
display_text_image(s1, s2)
Descripción:
Muestra la secuencia 2D de caracteres y atributos contenida en 's2', en la línea s1[1]. columna s1[2]. 's2' es una secuencia de secuencias, donde cada secuencia es una cadena de caracteres y atributos a mostrar. El caracter superior izquierdo se muestra en 's1'. Los otros caracteres aparecen a la derecha o debajo de esta posición. Los atributos indican los colores de frente y fondo del caracter precedente. En DOS32, el atributo debería constar del color de frente más 16 veces el color de fondo.
Comentarios:
Normalmente, 's2' podría ser el resultado de una llamada previa a save_text_image(), aunque podría construirla usted mismo.

Esta rutina solamente funciona en los modos de texto.

Podría usar save_text_image()/display_text_image() en una interfaz gráfica de usuario en modo de texto, para permitir que aparezcan y desaparezcan cajas de diálogo emergentes y menúes desplegables sin perder lo que estaba previamente en pantalla.

Las secuencias de la imagen de texto no tienen que tener todas la misma longitud..

Ejemplo:
clear_screen()
display_text_image({1,1}, {{'A', WHITE, 'B', GREEN},
                           {'C', RED+16*WHITE},
                           {'D', BLUE}})
-- muestra:
     AB
     C
     D
-- en la esquina superior izquierda de la pantalla.
-- 'A' será blanca sobre fondo negro,
-- 'B' será verde sobre negro, 
-- 'C' será rojo sobre blanco, y
-- 'D' será azul sobre negro.

Ver también: save_text_image, display_image, put_screen_char

dos_interrupt

Plataforma: DOS32
Sintaxis: include machine.e
s2 = dos_interrupt(i, s1)
Descripción:
Llama a la interrupción de software de DOS número 'i'. 's1' es una secuencia de 10 elementos con los valores de los registros de 16 bits, para usarlos como entrada a la rutina de interrupción. 's2' es una secuencia similar de 10 elementos que contiene los valores de salida de los registros después que la llamada regresa. machine.e tiene la siguiente declaración que muestra el orden de los valores de los registros en las secuencias de entrada y salida.
    global constant REG_DI = 1,
                    REG_SI = 2,
                    REG_BP = 3,
                    REG_BX = 4,
                    REG_DX = 5,
                    REG_CX = 6,
                    REG_AX = 7,
                    REG_FLAGS = 8,
                    REG_ES = 9,
                    REG_DS = 10
Comentarios: Los valores de los registros devueltos en 's2' son siempre valores positivos entre 0 y #FFFF (65535).

El valor 'flags' en s1[REG_FLAGS] se ignora en la salida. En la salida, el bit menos significativo de s2[REG_FLAGS] tiene el indicador de arrastre (carry flag), que normalmente indica falla si vale 1.

Ciertas interrupciones necesitan que se les suministre direcciones de bloques de memoria. Estas direcciones tienen que ser direcciones convencionales de la memoria baja. Puede asignar o desasignar memoria baja usando allocate_low() y free_low().

Con las interrupciones por software de DOS puede realizar una amplia variedad de operaciones especializadas, desde formatear un disquete a reiniciar la computadora. La documentación de estas interrupciones la puede encontrar en manuales técnicos como "La Biblia del programador de PC"de Peter Norton o descargar desde la web "Lista de interrupciones" de Ralf Brown:

http://www.cs.cmu.edu/afs/cs.cmu.edu/user/ralf/pub/WWW/files.html

Ejemplo:
sequence registers

registers = repeat(0, 10)  -- no se necesita dar valor a los registros

-- llama a la interupcion 5 de DOS: Imprimir pantalla
registers = dos_interrupt(#5, registers)
Programa de ejemplo: demo\dos32\dosint.ex
Ver también: allocate_low, free_low

draw_line

Plataforma: DOS32
Sintaxis: include graphics.e
draw_line(i, s)
Descripción:
Dibuja una línea en una pantalla de gráficos de píxel contectando dos o más puntos en 's', usando el color 'i'.
Ejemplo:
draw_line(WHITE, {{100, 100}, {200, 200}, {900, 700}})

-- Conecta los tres puntos de la secuencia usando
-- una línea blanca, es decir, dibuja una línea desde {100, 100} a
-- {200, 200} y otra desde {200, 200} a {900, 700}.
Ver también: polygon, ellipse, pixel

 

... continua
 
A a B   |   C a D   |   E a G   |   H a O   |   P a R   |   S a T   |   U a Z