instance

Plataforma: WIN32
Sintaxis: include misc.e
i = instance()
Descripción: Devuelve un número identificador para el programa actual.
Comentarios:
Este valor número identificador se puede pasar a varias rutinas de Windows para obtener información acerca del programa que está corriendo. Cada vez que un usuario inicia su programa, se creará una nueva instancia.

En C, este es el primer parámetro de WinMain().

En DOS32 y Linux/FreeBSD, instance() siempre devuelve 0.

Ver también: platform.doc

int_to_bits

Sintaxis: include machine.e
s = int_to_bits(a, i)
Descripción:
Devuelve los bits 'i' de orden bajo de 'a' como una secuencia de 1 y 0. Los bits menos significativos vienen primero. Para los números negativos, se devuelve el patrón en complemento a 2.
Comentarios:
Puede usar subíndices, subrangos, and/or/xor/not de secuencias completas, etc. para manipular las secuencias de bits. Las rotaciones y desplazamientos de bits son fáciles de realizar.
Ejemplo:
s = int_to_bits(177, 8)
-- s is {1,0,0,0,1,1,0,1} -- orden "inverso" 

Ver también: bits_to_int, and_bits, or_bits, xor_bits, not_bits, operaciones sobre secuencias

int_to_bytes

Sintaxis: include machine.e
s = int_to_bytes(a)
Descripción:
Convierte un entero en una secuencia de 4 bytes. Esos bytes están en el orden esperado por el 386+, es decir, el bit menos significativo primero.
Comentarios:
Usted puede ser que utilice esta rutina antes de poner los 4 bytes en la memoria para el uso por un programa de lenguaje de máquina.

El número entero puede ser negativo. Se devolverán los valores byte negativos, pero después de ponerlos en memoria recién tendrá la representación correcta (complemento a dos) para el 386+.

Esta función convertirá correctamente valores enteros de hasta 32 bits. Para valores más grandes, solamente se convierten los 32 bits de orden inferior. El tipo entero de Euphoria permite solamente valores de hasta 31 bits, así que declare sus variables como átomos si necesita una gama más grande.

Ejemplo 1:
s = int_to_bytes(999)
-- s es {231, 3, 0, 0}
Ejemplo 2:
s = int_to_bytes(-999)
-- s es {-231, -4, -1, -1}
Ver también: bytes_to_int, int_to_bits, bits_to_int, peek, poke, poke4

integer

Sintaxis: i = integer(x)
Descripción:
Devuelve 1 si 'x' es un entero dentro del rango -1073741824 to +1073741823. En cualquier otro caso, devuelve 0.
Comentarios:
Esta función sirve para definir el tipo entero. También puede llamarla como una función ordinaria para determinar si un objeto es un entero.
Ejemplo 1:
integer z
z = -1
Ejemplo 2:
if integer(y/x) then
    puts(SCREEN, "y es un múltiplo exacto de x")
end if
Ver también: atom, sequence, floor

length

Sintaxis: i = length(s)
Descripción: Devuelve la longitud de 's'. 's' tiene que ser una secuencia. Ocurrirá un error si 's' es un átomo.
Comentarios:
La longitud de cada secuencia, la almacena internamente el intérprete para acceso rápido (en otros lenguajes esta operación requiere de una búsqueda en memoria para hallar el caracter de terminación).
Ejemplo 1:
length({{1,2}, {3,4}, {5,6}})   -- 3
Ejemplo 2:
length("")    -- 0
Ejemplo 3:
length({})    -- 0
Ver también: sequence

lock_file

Sintaxis: include file.e
i1 = lock_file(fn, i2, s)
Descripción:
Cuando varios procesos acceden a un archivo simultáneamente, se puede nucesitar algún tipo de mecanismo de bloqueo para evitar mutilar el contenido del archivo, o causar datos erróneos en la lectura.

lock_file() intenta poner un bloqueo en un archivo abierto 'fn' para detener a otros procesos de usar el archivo mientras su programa lo está escribiendo o leyendo. Bajo Linux/FreeBSD, hay dos tipos de bloqueos que se pueden solicitar usando el parámetro 'i2' (bajo DOS32 y WIN32 el parámetro 'i2' se ignora, pero debería ser un entero). Solicite un bloqueo compartido cuando quiera leer un archivo y desee bloquearlo temporalmente para otros procesos que lo lean. Solicite un bloqueo exclusivo cuando quiera escribir en el archivo y desee bloquearlo temporalmente para otros procesos que lo lean o escriban en él. Muchos procesos pueden tener bloqueos compartidos aplicados simultáneamente sobre el mismo archivo, pero solamente un proceso puede tener bloqueo exclusivo, el cual solamente puede aplicarse cuando ningún otro procesos haya aplicado ningún bloqueo de cualquier clase sobre el archivo. file.e contiene la siguiente declaración:

global constant LOCK_SHARED = 1, 
                 LOCK_EXCLUSIVE = 2
En DOS32 y WIN32 puede bloquear una porción específica de un archivo usando el parámetro 's'. 's' es una secuencia de la forma: {primer byte, último byte}. En ella se indican el primer y último byte de la porción del archivo sobre la que se aplica el bloqueo. Especifique la secuencia vacía {}, si quiere bloquear el archivo completo. En la versión actual para Linux/FreeBSD, los bloqueos siempre se aplican sobre el archivo completo y debería especificar {} para este parámetro.

lock_file() devolverá 1, si se pudo obtener el bloqueo deseado; en caso contrario, se devolverá 0. lock_file() no espera otros procesos para abandonar sus bloqueos. Puede tener que llamarlo en varias ocasiones, antes que se conceda la petición del bloqueo.

Comentarios:
En Linux/FreeBSD, estos bloqueos se llaman bloqueos consultivos, lo que significa que no son forzados por el sistema operativo. Esto es, los procesos que utilizan un archivo particular cooperan uno con otro. Un proceso puede acceder a un archivo sin primero bloquearlo. En WIN32 y DOS32, los bloqueos son forzados por el sistema operativo.
En DOS32, lock_file() es más útil cuando está habilitada la compartición de archivos. Típicamente devuelve 0 (falla) bajo MS-DOS plano, fuera de Windows.
Ejemplo:
include misc.e
include file.e
integer v
atom t
v = open("visitor_log", "a")  -- abre para agregar
t = time()
while not lock_file(v, LOCK_EXCLUSIVE, {}) do
    if time() > t + 60 then
        puts(1, "Un minuto ya... No puedo esperar por siempre!\n")
        abort(1)
    end if
    sleep(5) -- permite correr a los demás procesos
end while
puts(v, "Otro visitante\n")
unlock_file(v, {})
close(v)
Ver también: unlock_file, flush, sleep

lock_memory

Plataforma: DOS32
Sintaxis: include machine.e
lock_memory(a, i)
Descripción:
Evita el bloque de la memoria virtual que comienza en la dirección 'a', de longitud 'i', siempre sea intercambiada al disco.
Comentarios:

lock_memory() se debería usar solo en situaciones altamente especializadas, donde tenga que iniciar sus propios manejadores de interrupciones por hardware de DOS, usando código de máquina. Cuando ocurre una interrupción de hardware, no le es posible al sistema operativo devolver ningún código o dato que se haya intercambiado, por lo tanto, usted necesita proteger cualquier bloque de código de máquina o datos que necesite en el servicio de la interrupción.

Programa ejemplo: demo\dos32\hardint.ex
Ver también: get_vector, set_vector

log

Sintaxis: x2 = log(x1)
Descripción: Devuelve el logaritmo natural de 'x1'.
Comentarios:
Esta función se puede aplicar a un átomo o a todos los elementos de una secuencia. Tenga presente que log está definida solamente para números positivos. Si intenta tomar el logaritmo de un número negativo o de cero, su programa se abortará con un mensaje de error.
Ejemplo:
a = log(100)
-- a es 4.60517
Ver también: sin, cos, tan, sqrt

lower

Sintaxis: include wildcard.e
x2 = lower(x1)
Descripción: Convierte un átomo o secuencia a minúsculas.
Ejemplo:
s = lower("Euphoria")
-- s es "euphoria"

a = lower('B')
-- a es 'b'

s = lower({"Euphoria", "Programming"})
-- s es {"euphoria", "programming"}
Ver también: upper

machine_func

Sintaxis: x1 = machine_func(a, x)
Descripción: Ver machine_proc() debajo.

machine_proc

Sintaxis: machine_proc(a, x)
Descripción:
Ejecuta una operación específica de máquina, tal como un gráfico o efectos sonoros. Esta rutina normalmente se debería llamar indirectamentea través de las rutinas de librería de los archivos de inclusión de Euphoria. Una llamada directa, hecha incorrectamente, provocaría una excepción de la máquina.
Ver también: machine_func

match

Sintaxis: i = match(s1, s2)
Descripción:
Busca la coincidencia de 's1' contra un cierto subrango de 's2'. Si resulta exitoso, devuelve el número de elemento de 's2' donde comienza (la primera) coincidencia del subrango, sino devuelve 0.
Ejemplo:
posicion = match("pho", "Euphoria")
-- posicion se establece a 3
Ver también: find, compare, wildcard_match

mem_copy

Sintaxis: mem_copy(a1, a2, i)
Descripción: Copia un bloque de 'i' bytes de memoria desde la dirección 'a2' a la dirección 'a1'.
Comentarios:
Los byes de memoria se copiarán correctamente, aún cuando el bloque en 'a2' se solape sobre el que comienza en 'a1'.

mem_copy(a1, a2, i) es equivalente a: poke(a1, peek({a2, i})), pero mucho más rápida.

Ejemplo:
dest = allocate(50)
src = allocate(100)
poke(src, {1,2,3,4,5,6,7,8,9})
mem_copy(dest, src, 9)
Ver también: mem_set, peek, poke, allocate, allocate_low

mem_set

Sintaxis: mem_set(a1, i1, i2)
Descripción: Establece 'i2' byte de memoria, comenzando en la dirección 'a1' al valor de 'i1'.
Comentarios: Los 8 bits de orden inferior de 'i1' se almacenan realmente en cada byte.

mem_set(a1, i1, i2) es equivalente a: poke(a1, repeat(i1, i2)), pero mucho más rápida.

Ejemplo:
destination = allocate(1000)
mem_set(destination, ' ', 1000)
-- 1000 bytes consecutivos en memoria se establecerán a 32 
-- (el código ASCII de ' ')
Ver también: mem_copy, peek, poke, allocate, allocate_low

message_box

Plataforma: WIN32
Sintaxis: include msgbox.e
i = message_box(s1, s2, x)
Descripción:
Muestra una ventana con título 's2', conteniendo la cadena de mensaje 's1'. 'x' determina la combinación de botones que estarán disponibles para que el usuario presione, y algunas otras características. 'x' puede ser un átomo p una secuencia. El valor de retorno 0, indica la falla en la inicialización de la ventana.
Comentarios: Ver la lista completa de valores posibles para 'x' e 'i' en msgbox.e .
Ejemplo:
response = message_box("¿Desea continuar?",
                       "Mi Programa",
                       MB_YESNOCANCEL)
if response = IDCANCEL or response = IDNO then
    abort(1)
end if
Programa ejemplo: demo\win32\email.exw

mouse_events

Plataforma: DOS32, Linux
Sintaxis: include mouse.e
mouse_events(i)
Descripción:
Use este procedimiento para seleccionar los eventos del ratón que desea que get_mouse() informe. Por defecto, get_mouse() informará todos los eventos. mouse_events() se puede llamar en varios lugares de la ejecución del programa, allí donde se necesite detectar los cambios en los eventos. Bajo Linux, mouse_events() actualmente no tiene efecto.
Comentarios:
Es una buena práctica ignorar los eventos en los que no está interesado, particularmente el muy frecuente evento MOVE, para reducir la ocasión quese perderá de un evento significativo.

La primera llamada que hace a mouse_events() activará el puntero del ratón, o un caracter resaltado.

Ejemplo:
mouse_events(LEFT_DOWN + LEFT_UP + RIGHT_DOWN)
-- restringirá get_mouse() a informar cuando el botón izquierdo
-- sea presionado y liberado, y el botón derecho
-- sea presionado. El resto de los eventos se ignorarán.
Ver también: get_mouse, mouse_pointer

mouse_pointer

Plataforma: DOS32, Linux
Sintaxis: include mouse.e
mouse_pointer(i)
Descripción:
Si 'i' vale 0, se oculta el puntero del ratón, en caso contrario se activará. Varias llamadas para ocultar el puntero, necesitarán de varias llamadas para activarlo nuevamente. La primera llamada tanto a get_mouse() o a mouse_events(), también activará el puntero (una vez). Bajo Linux, mouse_pointer() actualmente no tiene efecto.
Comentarios:
Puede ser necesario ocultar el puntero del ratón en forma temporal, mientras actualiza la pantalla.

Después de llamar a text_rows() puede tener que llamar a mouse_pointer(1) para ver nuevamente el puntero del ratón.

Ver también: get_mouse, mouse_events

not_bits

Sintaxis: x2 = not_bits(x1)
Descripción:
Ejecuta la operación lógica NOT a cada bit de 'x1'. Un bit en 'x2' será 1 si el correspondiente en 'x1' es 0 y viceversa.
Comentarios:
Los argumentos para la función pueden ser átomos o secuencias. Se aplican las reglas para operaciones sobre secuencias.

Los argumentos tienen que ser representables como números de 32 bits, sean con o sin signo.

Si se prepone manipular valores 32-bit completos, debería declarar sus variables como átomos, en lugar de enteros. El tipo entero de Euphoria está limitado a 31 bits.

Los resultados se tratan como números con signo. Serán negativos cuando el bit de mayor orden sea 1.

Ejemplo:
a = not_bits(#000000F7)
-- a es -248 (es decir, FFFFFF08 interpretado como número negativo)
Ver también: and_bits, or_bits, xor_bits, int_to_bits

object

Sintaxis: i = object(x)
Descripción:
Prueba si 'x' es de tipo objeto. Siempre será verdadero, por lo que object() siempre devolverá 1.
Comentarios:
Todos los tipos predefinidos como los definidos por el usuario también se pueden usar como funciones para probar si un valor pertenece a ese tipo. object() se incluye solo para completar. Siempre devuelve 1.
Ejemplo:
? object({1,2,3})  -- siempre imprime 1
Ver también: integer, atom, sequence

open

Sintaxis: fn = open(st1, st2)
Descripción:
Abre un archivo o dispositivo, para obtener el número de archivo. Devuelve -1 si la operación falla. 'st1' es la ruta del archivo o dispositivo. 'st2' es el modo en que se abre el archivo. Los modos posibles son:

"r" - abre un archivo de texto para lectura
"rb" - abre un archivo binario para lectura
"w" - crea un archivo de texto para escritura
"wb" - crea un archivo binario para escritura
"u" - abre un archivo de texto para actualizarlo (lectura y escritura)
"ub" - abre un archivo binario para actualizarlo
"a" - abre un archivo de texto para agregar nuevos datos
"ab" - abre un archivo binario para agregar nuevos datos

Los archivos que se abren para leer o actualizar, tienen que existir. Los archivos que se abren para escribir o agregar, serán creados si es necesario. Un archivo abierto para escritura tendrá 0 bytes. La salida a un archivo abierto para agregar, comenzará en el final del archivo.

La salida a archivos de texto tendrá caracteres de retrono de carro, agregados automáticamente antes de los caracteres de avance de línea. En la entrada, se quitarán estos caracteres de retorno de carro. El caracter Ctrl+Z (ASCII 26) indicará el fin del archivo.

La E/S a archivos binarios no se modifica en forma alguna. Se puede leer o escribir cualquier valor de byte de 0 a 255.

Algunos dispositivos típicos que puede abrir son:

"CON" - consola (pantalla)
"AUX" - puerto serie auxiliar
"COM1" - puerto serie 1
"COM2" - puerto serie 2
"PRN" - impresora en el puerto paralelo
"NUL" - un dispositivo inexistente que acepta y descarta salidas

Comentarios:
DOS32: Al correr bajo Windows 95 o posterior, puede abrir cualquier archivo existente que tenga un nombre largo de archivo o directorio en su ruta (es decir, más grande que el estándar 8.3 del DOS) usando cualquier modo de apertura - leer, escribir, etc. Sin embargo, si intenta crear un archivo nuevo (open con "w" o "a" y el archivo no existe aún) entonces se truncará el nombre al estilo 8.3. En una futura versión, esperamos soportar la creación de archivos con nombres largos.

WIN32, Linux and FreeBSD: Se soportan completamente los nombres largos en lectura, escritura y creación de archivos.

Ejemplo:
integer file_num, file_num95
sequence first_line
constant ERROR = 2

file_num = open("miarchivo", "r")
if file_num = -1 then
    puts(ERROR, "No se puede abrir miarchivo\n")
else
    first_line = gets(file_num)
end if

file_num = open("PRN", "w") -- abre la impresora para salida

-- en Windows 95:
file_num95 = open("nombreDeDirectorio\\nombreDeArchivo.abcdefg", "r")
if file_num95 != -1 then
    puts(1, "funcionó!\n")
end if

Ver también: close

open_dll

Plataforma: WIN32, Linux, FreeBSD
Sintaxis: include dll.e
a = open_dll(st)
Descripción:
Abre un archivo de librería de enlace dinámico de Windows (.dll), o un archivo de librería compartida de Linux o FreeBSD. Se devolverá una dirección de 32 bits, o 0 si no se puede encontrar el archivo. 'st' puede ser una ruta relativa o absoluta. Windows usará la ruta normal para ubicar los archivos .dll.
Comentarios:
El valor devuelto por open_dll() se puede pasar a define_c_proc(), define_c_func(), o define_c_var().

Se puede abrir varias veces el mismo archivo .dll o .so. No se usa memoria extra y cada vez se devolverá el mismo número.

Euphoria cerrará la .dll automáticamente al final de la ejecución.

Ejemplo:
atom user32
user32 = open_dll("user32.dll")
if user32 = 0 then
    puts(1, "No se puede abrir user32.dll!\n")
end if

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

or_bits

Sintaxis: x3 = or_bits(x1, x2)
Descripción:
Ejecuta la operación lógica OR sobre los bits correspondientes de 'x1' y 'x2'. Un bit en 'x3' valdrá 1 cuando el bit correspondiente tanto de 'x1' o 'x2' valga 1.
Comentarios:
Los argumentos para la función pueden ser átomos o secuencias. Se aplican las reglas para operaciones sobre secuencias.

Los argumentos tienen que ser representables como números de 32 bits, sean con o sin signo.

Si se prepone manipular valores 32-bit completos, debería declarar sus variables como átomos, en lugar de enteros. El tipo entero de Euphoria está limitado a 31 bits.

Los resultados se tratan como números con signo. Serán negativos cuando el bit de mayor orden sea 1.

Ejemplo 1:
a = or_bits(#0F0F0000, #12345678)
-- a es #1F3F5678
Ejemplo 2:
a = or_bits(#FF, {#123456, #876543, #2211})
-- a es {#1234FF, #8765FF, #22FF}
Ver también: and_bits, xor_bits, not_bits, int_to_bits

 

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