***************************************************************************

*******************************

FLIB 3.2

*******************************

por François LEIBER
traducción a Español por David Suescun


http://leiber.free.fr

***************************************************************************


Este texto contiene una descripción detallada de todas las funciones de Flib y Flib2, lea el archivo Léeme para una presentación más general.

Resumen

 

    1. Cómo usar Flib
    2. Información
    3. Funciones generales
    4. Funciones Gráficas
    5. Funciones de texto
    6. Funciones de puntaje (High-scores)
    7. Funciones de la línea de estado (Status Line)
    8. Funciones de teclas
    9. Funciones del TIOS

Cómo usar Flib


Sólo debe digitar, usualmente es un programa BASIC:
flib("comando1" [,"comando2",...])

Ejemplo:
flib("clrscr","msg:Hola, Mundo!","slrcl")

Si usa funciones de flib2, entonces:

Ejemplo:
flib2("version","mkhs:10,500,fl,sc","hide:sc")

Los argumentos numéricos pueden ser de cualquier tipo, tal como en BASIC: números, nombres de variables, expresiones matemáticas, en resumen, cualquier cosa que devuelva un valor numérico. Atención, una argumento numérico debe empezar por un número o un espacio:

Ejemplo, note los espacios antes de 'list', 'int' y 'sin':
flib2("drawline:0,1/2-1/5, list[5], int(a+7*b), sin(atan(x^2))")

Un número o un nombre de una variable funcionaran perfecta y rápidamente (Hecho manualmente), mientras que la expresiones son más lentas y no reconocen funciones locales. Si un argumento tiene un error de sintaxis, Flib se detendrá y mostrará un mensaje de error, tal como lo haría una instrucción BASIC.

Flib siempre devuelve una lista, vacía de ser el caso, o conteniendo el resultado de todas las funciones en el orden que hayan sido ejecutadas. Esta lista es almacenada en la variable 'fl', que puede declararse como variable local.

Si no entiende una función, MIRE LOS EJEMPLOS dados con Flib; 99% de los problemas se pueden solucionar de esta forma, gracias! no responderé preguntas que puedan solucionarse observando los ejemplos, Realmente no tengo tiempo disponible para esto... De todas formas, Flib es sólo una librería para llenar las carencias del TI-BASIC, por lo tanto usted debe conocer el lenguaje antes de poder usar esta librería!

Información


Las Funciones de la segunda librería (flib2) están precedidas por un asterisco rojo.

Todas las funciones se escriben en letra minúscula y son tan cortas cómo fue posible para que sean fáciles y rápidas de recordar y escribir.

He incluido todo tipo de protecciones, por lo tanto Flib no puede devolver errores, inclusive si una argumento es erróneo.

Funciones Generales

 

off

Apaga la calculadora.

breakoff

Deshabilita la función break (Tecla ON, mire el ejemplo 'flpass'). Atención, al usar getkey(), llamar un programa o la función string() habilitan el break de nuevo, por esta razón no se incluyó ninguna función adicional para habilitarlo. Finalmente, ya que esta función deshabilita todas las interrupciones, esto acelerará sus programas.

beep:freq[,longitud]

Reproduce una nota a una frecuencia freq, para longitud en centésimas de segundo (por defecto 4).
Las notas deben estar perfectamente afinadas tanto en calculadoras con HW1 y HW2.

beep2:[tempo,]canción

Reproduce la canción en el tempo (beats por minuto) tempo, el cuál tiene un valor de 120 por defecto. Para cuando el usuario digita una tecla cualquiera. canción debe respetar las siguientes convenciones (mire el ejemplo 'sound'):

C

C#

D

D#

E

F

F#

G

G#

A

A#

B

A

B

C

D

E

F

G

H

I

J

K

L

 

Para cambiar la octava, digite 'O' seguido del número de la octava, el cual debe estar entre 0 y 4 (2 por defecto).
Para cambiar la nota (corchete por defecto), digite:

1

2

3

4

5

6

7

8

9

Semibreve

Minim

Dot crochet

Crochet

Dot quaver

Quaver

Double quaver

Triple quaver

Triolet

4 beats

2 beats

1+1/2 beats

1 beat

1/2+1/4 beats

1/2 beat

1/4 beat

1/8 beat

1/3 beat

 

Finalmente, para una pausa, digite 'P', la pausa será de la misma longitud de la nota que sería reproducida.

wait:valor

Espera sin hacer nada, valor esta en décimos de segundo. Esta función está parametrizada para encajar exactamente en las calculadoras HW2.

*apd: valor

Ajusta el valor de la rata de apagado automático (APD); valor está en segundo. Devuelve el valor anterior.

*error:num

Devuelve el error número num; vea el manual TI para encontrar el significado de los diferentes códigos de error. Las ventajas de devolver el error manualmente es que puede mostrar el error sin salirse del programa.

*reset

Resetea la calculadora. Esta función no es la más útil, pero seguro que es la más divertida!

(*)version

Devuelve una cadena que contiene la versión Flib's.

+

Aumento el contraste.

-

Decremento del contraste.

getcont

Obtiene el contraste actual, que es un número entero entre 0 (contraste muy bajo) y 15 (contraste muy alto).

setcont:valor

Ajusta el contraste actual. valor debe ser un número entero entre 0 y 15.

Funciones Gráficas


El argumento 'modo' siempre es opcional, será reemplazado por 1 si es omitido.
Las coordenadas comienzan con la esquina superior izquierda (0,0) hasta la esquina inferior derecha (159,99) [o (239,127) en una 92+].

gray

Actívale modo de escala de grises, limpia la pantalla en los dos planos y activa el plano 1. Al final de la llamada de Flib, la librería espera a que el usuario presione una tecla, en ese momento devuelve el valor de la tecla presionada, apaga el modo de escala de grises y restaura la pantalla original (mire el ejemplo 'grayex' y 'anni').

gray2

Es lo mismo que 'gray', pero no espera a que el usuario presione una tecla al final. Si la llama por segunda vez, apaga el modo de escala de grises.

plane:x

Ajusta el plano activo a x : todas las llamadas de funciones gráficas que haga después serán dibujadas en este plano. x puede tomar los valores 0 y 1.
A * pixel corresponde a los planos * prendido/apagado :

  • white : all off
  • light gray : plano 0 activo y plano 1 inactivo
  • dark gray : plano 1 activo y plano 0 inactivo
  • black : plano 1 y 0 activos

clrscr

Limpia la pantalla.

sprite:[x,][y,][modo,]pic

Pone el bitmap pic en la pantalla en la posición (x, y).
modo puede tomar los valores:

  • 0 reemplaza el destino por el inverso de pic
  • 1 superpone pic en el destino
  • 2 muestra pic en modo 'xor'
  • 3 borra el destino
  • 4 reemplaza el destino con pic
  • 6 muestra pic en modo 'and'.

x y y valen 0 por defecto.

savpic:x1,y1,x2,y2,pic

Almacena en la variable pic la fracción de la pantalla comprendida entre las coordenadas (x1, y1) and (x2, y2).

savscr:pic

Alamcena la pantalla LCD y la guarda en la variable pic.

rclscr:pic

Restaura la pantalla LCD almacenada en pic por 'savscr'.

picsize:pic

Devuelve, en una lista, las dimensiones horizontales y verticales de pic.

rect:x1,y1,x2,y2[,modo]

Dibuja una rectángulo vació entre (x1, y1) y (x2, y2) como esquinas.
modo puede tomar los valores:

  • 0 borra el rectángulo
  • 1 dibuja un rectángulo negro
  • 2 dibuja un rectángulo invertido
  • 32 dibuja un rectángulo con las esquinas redondeadas
  • 64 dibuja un rectángulo doble
  • 128 dibuja un rectángulo con las esquinas superiores cortadas.

De hecho, si está buscando un efecto en particular, pruebe con otros argumentos, usted puede tener rectángulos invertidos con los borden redondeados, etc...
De hecho los efectos mixtos se obtienen de la suma de modos.

Ej : 97 ( = 64 + 32 + 1 ) para una rectángulo negro, doble y redondeado.

fillrect:x1,y1,x2,y2[,modo]

Dibuja un rectángulo relleno entre (x1, y1) y (x2, y2) como esquinas.
modo puede tomar los valores:

  • 0 borra el rectángulo
  • 1 dibuja un rectángulo negro
  • 2 dibuja un rectángulo invertido

filltri:x1,y1,x2,y2,x3,y3[,modo]

Dibuja un triangulo relleno entre los puntos (x1, y1), (x2, y2) y (x3, y3).
modo puede tomar los mismos valores que 'line'.

fillpoly:x1,y1,x2,y2,x3,y3,x4,y4[,modo]

Dibuja un cuadrilatero entre las líneas (x1, y1)-(x2, y2) y (x3, y3)-(x4, y4).
La primera línea debe ser más cercana a la aprte inferior de la pantalla que la segunda línea, de lo contrario nada será dibujado.
modo puede tomar los mimso valores de 'line'.

ellipse:x,y,r1,r2[,mode]

Dibuja una elipse con centro en (x, y), y los semi ejes r1 y r2.
mode puede tomar los mismo valores de 'fillrect'.

line:x1,y1,x2,y2[,modo]

Dibuja una línea entre (x1, y1) y (x2, y2).
modo puede tomar los valores:

  • 0 borra la línea
  • 1 dibuja una línea negra
  • 2 dibuja una línea invertida
  • 7 dibuja una línea doble
  • 8 dibuja una línea con sombreado vertical
  • 9 dibuja una línea con sombreado horizontal
  • 10 dibuja una línea con son sombreado diagonal de pendiente negativa
  • 11 dibuja una línea con son sombreado diagonal de pendiente positiva.

Los sombreados funcionan con líneas de más de45°.

pix:x,y[,modo]

Dibuja un pixel en (x, y).
modo puede tomar los mismos valores que 'fillrect'.

pixtest:x,y

Devuelve 0 si el pixel (x, y) está apagado y 1 si está prendido.

mkpic:width,height,var,data

Crea, en la variable var, una imágen de ancho width y alto height, en donde la imágen misma se da como una cadena.

La estructura de data structure se define a continuación: cada línea dada contiene un número de caracteres; cada character contiene 8 pixels (si el ancho de la imágen no es un multiplo de 8, el último bit del último carácter de cada línea no será usado). Las líneas se escriben un tras la otra. Para evitar el problema de caracteres que no tengan acceso desde BASIC, reemplace el caracter n°0 por '00', n°2 por '02' y n°13 by '13'.

Para entender, mire los pqueños programas de BASIC 'mkpic' y 'mkpic2' que automáticamente convierten imágenes en cadenas para 'mkpic'; también debería mirar mi programa BASIC Othello para que pueda ver un ejemplo de cómo se usa.

Si desarrollé tal función, es por que siempre veo programadores BASIC que distribuyen sus programas con cientos de imágenes pequeñas en diferentes folders. Con esta función es posible crear imágenes fácilmente y con poca memoria.

map:[width,][x,][y,][horiz,][vert,][mode,][time,],prefix,data

Muestra una suceción de sprites en una pasada, uno después del otro en líneas ordenadas (mire el ejemplo 'map').
width es el número de sprites ppor línea horizontal; cuando este número es alcanzado, los sprites serán dibujados en la siguiente línea.
Los Sprites serán dibujados desde el punto (x, y); este punto es (0, 0) por defecto.
horiz y vert indica que tamaño falta para alcanzar cada sprite: si algunos surtes son más grandes que este tamaño, se van a sobreponer. Cuando horiz y vert son omitidos, 'map' toma el tamaño del sprite actual como argumento, pero en este caso, todos los sprites deben tener el mismo tamaño, de lo contrario cambios extraños van a aparecer.
Todos los sprites deben tener el nombre  prefix + 'un cracter': data es la sucesión de los caracteres presentes para todos los sprites que desea mostrar.
mode puede tomar los mismo valores que 'sprite'.
De último pero no menos importante, time es un argumento sutil: 'map' se convierte en una versión evolucionada de CyclePic en caso de que la use. Ciertamente esta función va a hacer un bucle hasta que el usuario presione una tecla y después devolverá el valor de la tecla. time es el tiempo dado en centésimas de segundo durante el cual se esperará entre el trazo de dos imágenes. Si horiz y vert valen 0, todas las imágenes serán dibujadas en el mismo lugar, tal como CyclePic.

Ej : flib("map:,x,y,0,,4,time,pic,123456")
en donde pic1, pic2,... harán un pequeño video, y x, y y time deben ser reemplazados por números.
Al ajustar el tiempo en 0, puede hacer una escala de grises (vea el ejemplo 'grayex'), es práctico mostrar una imágen gris en una interfaz blanca con negro; esto no lo puede hacer con 'gray' (pero la calidad no es tan buena).

Funciones de Texto

 

font:size

Configura el tamaño de la fuente.
size puede tomar los valores:

  • 0 para fuente pequeña (nx5 pixels)
  • 1 para fuente estándar (6x8 pixels)
  • 2 para fuente grande (8x10 pixels).

drawstr:x,y,[mode,]str

imprime la cadena str en (x, y).
Si x vale 999, la cadena será centrada automáticamente en la pantalla; no use esto muy amenudo por que usualmente los programas par alas ti-89 no se ven tan bien en las 92+.
mode puede tomar los valores:

  • 0 imprime blanco sobre negro
  • 1 imprime negro
  • 2 imprime invertido
  • 3 imprime gris en blanco
  • 4 Imprime negro en blanco

Atención, si omite el argumento mode, str no debe empezar en por un número o un espacio, de lo contrario Flib lo tomará como mode. Otra solcuión que recomiendo es poner la coma sin ningún valor.

drawstrv:x,y,[mode,]str

Imprime la cadena str verticalmente en (x, y).
mode puede tomar los mismo valores que 'drawstr'.

pretty:x,y,[mode,]expr

Imprime en modo Pretty Print la expresión expr en (x, y).
mode puede tomar los mismo valores que 'drawstr'.

pinfo:expr

Devuelve {ancho, tope, fondo} que la expresión tendrá si es impresa con pretty.
En resumen, si usted imprime en (x,y), estará contenido dentro de (x, y+tope) y (x+ancho, y+fondo).

width:size,str

Devuelve el ancho, en pixels, de una cadena str usando una fuente tamaño size.

msg:string

Imprime string invertida en una caja negra y espera hasta que el usuario presione una tecla, después restaura la pantalla y devuelve el valor correspondiente a la tecla presionada (vea 'keywait').
Usted puede imprimir el mensaje en más de una línea separando cada una con '|', cada línea será truncada cada 25 caracteres (38 en una 92+) y centrada en la panatlla. La pntalla se limita a  8 línas (12 en una 92+).

No use esta function cuando la escala de grises esté activada ya que las dos funciones usan la misma dirección de memoria para almacenar la pantalla, por lo tanto Flib no restaurará la pantalla correctamente al final, pero usted lo puede hacer manualmente si así lo desea...

*menu:[height,][x,][y,]title,options...

Muestra un menu rectangular con tantas opciones y subopciones como se deseen, con la esquina superior en (x, y). Los primeros tres argumentos son opcionales, El menu tendrá la altura correcta y será centrado en caso de ser omitidas. Si height es insuficiente para mostrar todos los elementos, ud podrá desplazarse dentro del menú.

Cada opción es precedida por una coma, y cada sub opción por un '|'.

El valor devuelto en 'fl' es el número del elemento seleccionado al presionar ENTER, o 0 si el usuario presionó ESC.

Por ejemplo, en su calculadora, intente
flib2("menu:20,title,option1,option2|suboption1|suboption2")
To understand, or look at the program 'menu' given as an example.

*numline:var

Devuelve el número de líneas en el variable de texto var.
Si hay algún problema - si var no existe o no es una variable de texto- la función no devuelve nada.

*getline:n,var

Devuelve la n-sima línea de la variable de texto var.
En un texto, la primera línea es la n°0 (es igual par alas dos siguientes instrucciones).
Si hay algún problema, la function no devuelve nada.

*delline:n,var

Borra la n-sima línea de la variable de texto var.
Devuelve 1 si fue existoso y 0 en cualquier otro caso.

*insertline:n,var,str

Inserta la línea str entre la (n-1)-sima línea y la n-sima línea de la variable de texto var.
Devuelve 1 si fue existoso y 0 en cualquier otro caso.

Funciones de puntajes altos (High-scores)


Una tabla de puntajes altos es un símbolo que contiene varias puntuaciones altas alcanzadas, cada uno de ellos está formado por un número entre 0 y 65535 y una cadena, máximo 10 caracteres.

El símbolo es una cadena, y no se tiene acceso a los datos, solo podrá ver 'Highscores by Flib;' puede encontrar un ejemplo en el programa 'memory.'

*mkhs:n,rec,name,var

Crea, en la variable var, una tabla de puntajes altos que contiene n puntuaciones altas, inicializado al valor score y al nombre name.
Si name tiene más de 10 caracteres de largo, la cadena será truncada.

*puths:rec,name,var

Agrega automáticamente puntajes altos a la tabla var el record siendo el valor score y un nombre name.
Devuelve la posición en la tabla del Nuevo record o 0 si el puntaje score no fue lo suficientemente alto para entrar ala tabla de puntajes altos.
Si name tiene más de 10 caracteres de largo, la cadena será truncada.

*geths:n,var

Devuelve, en la variable 'fl', el n-simo puntaje alto de la variable var, un número seguido de una cadena con el nombre.

Funciones de la línea de estatus

 

slclr

Borra el contenido de la línea de estatus.

slrcl

Redibuja la línea encima de la línea de estatus.

slmsg:string

Muestra la cadena string en la línea de estatus.

busy:modo

Ajusta el indicador BUSY en la línea de estatus.
modo puede tomar los valores:

  • 1 lo pone en 'BUSY'
  • 2 lo pone en 'PAUSE'
  • 3 borra el indicador.

 

Funciones de teclas

 

keywait

Espera a que el usuario presione una tecla y devuelve el valor correspondiente de la tecla presionada.
Atención: los siguientes códigos son diferentes de los devueltos por la función getkey() en BASIC, todos los demás son iguales:

 

Normal

2nd

Shift

Diamond

Alpha

Arriba

337

4433

8529

16721

33105

Izquierda

338

4434

8530

16722

33106

Abajo

340

4436

8532

16724

33108

Derecha

344

4440

8536

16728

33112

 

Atención: en una 92+, las teclas arriba e izquierda están invertidas.

keylow

keylow se usa para lectura de teclas de bajo nivel: solo detecta cuando se presionan las flechas o las teclas 2nd, Shift, Diamond o Alpha.
Más aún, no interfiere con la espera del teclado, es independiente de todas las funciones como getkey(), simplemente devuelve el estado actual del teclado.
Finalmente detecta cuando más de un tecla son presionadas a al vez.
Devuelve una cadena con la sucesión de caracteres que representan las teclas keys 2nd, Shift, Diamond, Alpha (Lock en la 92+),  y las flechas

Por ejemplo, "10001010" significa que 2nd, izquierda y arriba están siendo presionadas mientras las otras teclas no.

initdelay:time

Ajusta el tiempo time (395avos de segundo) durante el cual una tecla debe estar presionada antes de repetirse.
El valor por defecto es 336, este se resetea cada vez que la calculadora se apaga. Devuelve el valor anterior.

delay:time

Ajusta el tiempo time (395avos de segundo) para que una tecla se auto repita.
El valor por defecto es 48, este se resetea cada vez que la calculadora se apaga. Devuelve el valor anterior.

TIOS functions

 

*hide:var

Esconde el símbolo o carpeta var (el símbolo será Escondido del TIOS).
Si es un folder, primero contrae todas las variables y las esconde junto al folder.

*unhide:var

Muestra el símbolo o folder var que esté oculto (mire el ejemplo 'hide').

*size:var

Devuelve el tamaño de var.

*state:var

Devuelve un número compuesto de 3 bits que representan el estado de la variable var: El primero indica si la variable está archivada, el Segundo si está asegurada (locked) y el último si está escondida.
De una forma más clara, debe hacer esto para ver las características de forma independiente:

flib("state:var")
fl[1] and 1->archived
fl[1] and 2->locked
fl[1] and 4->hidden

 

*folder:var

Devuelve una lista de todos los folders que contengan el símbolo var.

*getfolder

Devuelve una lista de todos los folder en la calculadora.

*getfile:[type,]folder

Devuelve una lista de todos los archivos en la carpeta folder.
Más aún, puede agregar otro argumento: un número que representa un tipo de variable. Si lo usa, getfile solo devolverá la lista de archivos de tipo type.
type  puede tomar los siguientes valores:

  • 45 -> para devolver cadenas
  • 217 -> listas o matrices
  • 220 -> programas o funciones
  • 221 -> data
  • 222 -> GDB
  • 223 -> imágenes
  • 224 -> textos
  • 225 -> figuras
  • 226 -> macros
  • 243 -> programas asm o librerias

Las expresiones no tienen un valor asigando, es por esta razón que no aparecen aquí.

*getbyte:num[,n],var

Devuelve el byte número num de la variable var.
Si argumento n está presente, Flib devolverá, en una cadena, n bytes de la variable var, empezando por el byte num.
num debe ser un número entre 0 y 'size(var)-3'.
El argumento n es mucho más potente y práctico para programar un editor en vez de obtener los bytes uno por uno, pero habrán errores si la cadena contiene caracteres no autorizados. n debe ser menor que 4997.

*setbyte:num,value,var

Ajusta el byte número num de una variable var al valor value.
num debe estar entre 0 y 'size(var)-3', valor entre 0 y 255.
Esta función le da control total sobre las variables, pero también sobre la estabilidad del TIOS...

*memcpy:ndest,nsrc,num,dest,src

Copia num bytes de la variable src, comenzando por su nsrc-simo byte, a la variable dest, comenzando por su ndest-simo byte.

Ej : "Flib by François Leiber"->a : "Flib2 &                        "->b : flib2("memcpy:9,1,23,b,a")

*komp:var

Si la variable var no está comprimida, la función la comprime, reemplaza la variable por una tipo KOMP, pero más pequeña en tamaño. Si var ya está comprimida entonces la descomprime.
La función devuelve un número que puede tomar los siguientes valores

  • 0 : (de) compresión exitosa
  • 1 : la variable var no existe
  • 2 : ninguna compresión fue realizada, la variable comprimida sería mayor en tamaño que la original
  • 3 : no hay suficiente memoria para (des)comprimir.

 

*kinfo:var

Devuelve el tipo original (vea la función 'getfile') y el tamaño de una variable KOMP. Devuelve 0 si var no es una variable KOMP.

*group:[n,][var1,var2,...]var

Cuando hay más de un argumento, la función agrupa las variables var1, var2, ... y las almacena en la variable var, cuyo tipo será GRP. Si la variable var ya es una variable tipo GRP y sólo hay un argumento adicional var1, la función agregará var1 a la variable var.La suma del tamaño de todas las variables no debe exceder los 65 KB, limitados por el TIOS. Los nombres de las variables pueden incluir el nombre del folder.
Devuelve el número de variables exitosamente agrupadas en var.

Cuando solo hay un nombre de una variable, la función entiende que debe extraer las variables agrupadas en var (deeb ser tipo GRP).
Si hay un argumento numérico, sólo extraerá la n-sima variable de la variable var.

El uso de esta función no implica que deba hacer con programas con miles de programitas pequeños. Inclusive, la compresión con 'komp' es mucho más eficiente cuando se agrupan variables antes de comprimirlas independientemente para luego agruparlas.

*ginfo:var

Devuelve una lista de archivo en una variable var tipo GRP.

*mkvar:taille,[type,][extension,]name

Crea una variable llamada name de tamaño size bytes llena de ceros.
type es un número para asignarle el tipo a al variable (vea 'getfile' para ver las diferentes posibilidades). Por defecto, 'mkvar' crea texto (type por lo tanto vale 224).
extension es una cadena de 4 letras máximo para crear un tipo de variable que se vea en el Var-Link como extension.
Si usted pone los argumentos type y extension, el último será preponderante.

Ej: flib2("mkvar:7,aaa","setbyte:2,32,aaa")
para crear un texto vacio llamado 'aaa'. El Segundo Byte ajustado a 32 le indica al TIOS el comienzo de la primera línea.

Ex : flib2("mkvar:50,pers,aaa")
para crear una variable de 50 byes de larga cuyo tipo en el Var-Link sea 'pers'.

*type:var

Devuelve la extensión de var, si var tiene una extensión personalizada (hecha con 'mkvar' por ejemplo).
No devuelve nada si la variable no tiene una extensión personalizada.

Volver al inicio de la página