Mdulo barra.h 2.0 para InformatE 6/7E o 6/10E
(C) 2001 Presi (Enrique D. Bosch) [kifcu@confluencia.net]
Puede distribuirse libremente bajo licencia GNU LGPL


                               TUTORIAL RPIDO
                               ---------------

El mdulo es biplataforma, asi que puede compilar tanto para Z como para
Glulx.

Implementa lo necesario para crear barras de estado (lineas de estado
en argot Informate) potentes de manera sencilla.

Primero que nada, hay que saber que existen dos modos de funcionamiento:
modo simple y modo compuesto.

* Modo simple
-------------

Permite crear barras de estado con un solo item (elemento), para crear una
barra que ponga el texto "Mi aventura", hay que hacer las siguientes
declaraciones:


replace dibujarlineaestado;

include "EParser";            ! estos son los includes habituales de la 
include "Acciones";           ! libreria Informate que deben estar entre 
                              ! el replace y el include "barra"
include "barra";

objeto_barra_estado barra_estado
  with
    texto "Mi aventura";

[ dibujarlineaestado; barra_estado.dibujar(); ];


asi de fcil ya tendramos una barra de estado (en modo invertido en Z), que
muestra el texto "Mi aventura" justificado a la izquierda, que son las
opciones por defecto, pero si quisieramos incluir un elemento que no fuera
un texto fijo, por ejemplo el nombre de localidad en la que se est en cada
momento y centrada sustuimos la declaracin de objeto_barra_estado por la
siguiente:

objeto_barra_estado barra_estado
  with
    item BE_LOCALIDAD,
    alineacion BE_CENTRO,
    longitud 10;


la propiedad alineacion es por defecto BE_IZQUIERDA, puede ser tambin
BE_CENTRO y BE_DERECHA, con estos dos ltimos valores es necesario
especificar "a mano" la longitud aproximada del texto con la propiedad
"longitud"

los items disponibles son los siguientes:

BE_TEXTO              texto de usuario en la propiedad "texto"
                      (si no se especifica item este ser usado por defecto)
BE_LOCALIDAD          nombre de la localidad actual
BE_AVENTURA           nombre de la aventura (constante historia)
BE_HORA_24            hora en formato 24h con el texto "Hora:" delante
BE_SOLO_HORA_24       hora en formato 24h
BE_HORA_AMPM          hora en formato AM/PM con el texto "Hora:" delante
BE_SOLO_HORA_AMPM     hora en formato AM/PM
BE_TURNOS             nmero de turnos empleados (movimientos) con el 
                      texto "Movim.:" delante
BE_SOLO_TURNOS        nmero de turnos empleados (movimientos)
BE_PUNTUACION         puntuacin actual con el texto "Punt.:" delante
BE_SOLO_PUNTUACION    puntuacin actual
BE_SALIDAS            puntos cardinales que son salidas visibles con
                      el texto "Salidas:" delante
BE_SOLO_SALIDAS       puntos cardinales que son salidas visibles

Nota 1: La propiedad texto puede contener una rutina.
Nota 2: Para el uso de la hora (tato en formato 24h como en AM/PM) debe
        estar incluido el mdulo hora24.h, si no est incluido, barra.h
        compilar y funcionar correctamente excepto que ignorar las
        opciones de hora.
Nota 3: Para el uso de las salidas o la brjula (ver BE_BRUJULA en el modo
        compuesto) debe estar definida la constante ADMITIR_COMANDO_SALIDAS
        de Informate

Para otras opciones como multilnea o texto invertido ver el manual (fichero
manual.txt).


* Modo compuesto
----------------

Permite crear una barra de estado con mltiples items, definiendo en que
posicin debe ir cada elemento; por ejemplo, imaginemos que queremos una
barra que en el extremo izquierdo ponga el nombre de la aventura, ms o
menos a mitad de barra el texto de usuario "XYZZY" y ms a la derecha los
turnos empleados (movimientos) y la hora en formato 24h, la declaracin
completa sera:


replace dibujarlineaestado;

include "EParser";               ! includes habituales de la librera
include "Acciones";              ! Informate

include "hora24";
include "barra";

objeto_barra_estado barra_estado
  with
    modo BE_COMPUESTO,
    disposicion
      1  1 true BE_AVENTURA
      40 1 true BE_TEXTO
      50 1 true BE_TURNOS
      61 1 true BE_HORA_24,
    texto "XYZZY";

[ dibujarlineaestado; barra_estado.dibujar(); ];

La propiedad "modo" puesta al valor "BE_COMPUESTO" indica que debe
utilizarse el modo compuesto. En el simple no hace falta ponerlo porque es
por defecto, pero la clave est en la propiedad disposicin que es la que
define donde va cada elemento, cada lnea de disposicin se divide en cuatro
parmetros que conforman un elemento de la barra, notar que todos los datos
forman parte de la propiedad disposicin y que no hay comas entre una lnea
y la siguiente, solo al final de la propiedad.

Explicaremos ahora parmetro por parmetro qu es cada cosa:

      1  1 true BE_AVENTURA
      40 1 true BE_TEXTO
      50 1 true BE_TURNOS
      61 1 true BE_HORA_24,
      ^^
El primer parmetro es la posicin horizontal del elemento en la lnea
expresado en tanto por 80, si el ancho real de pantalla (o ventana) es de 80
caracteres entonces equivale exactamente a la posicin en caracteres, si no,
el mdulo calcula el equivalente proporcional al ancho real, en este caso 1
es el primer carcter, o sea, todo a la izquierda y en los dems 40 es la
mitad y 50 y 61 ms a la derecha. Notar que 40 simempre equivaldr a la
mitad y 80 al ltimo (el de ms a la derecha) carcter sea cual sea el ancho
real. Tambin puede ponerse el valor BE_JUNTO que significa que el item debe
ir a continuacin del anterior.


      1  1 true BE_AVENTURA
      40 1 true BE_TEXTO
      50 1 true BE_TURNOS
      61 1 true BE_HORA_24,
         ^
El segundo parmetro es la posicin vertical, en nuestro caso todos son la
primera lnea ya que nuestra barra solo tiene una lnea, podra ser ms de 1
en caso de que la barra tuviera ms de una lnea, para obetener informacin
sobre multilnea ver el manual (fichero manual.txt).

      1  1 true BE_AVENTURA
      40 1 true BE_TEXTO
      50 1 true BE_TURNOS
      61 1 true BE_HORA_24,
           ^^^^

El tercer parmetro indica si el elemento se visualiza en texto invertido
(true) o no (false), en nuestro caso todo es invertido ya que la barra es
invertida. Para obtener ms informacin sobre barra y texto invertido ver el
manual (fichero manual.txt).

      1  1 true BE_AVENTURA
      40 1 true BE_TEXTO
      50 1 true BE_TURNOS
      61 1 true BE_HORA_24,
                ^^^^^^^^^^
Y el cuatro y ltimo parmetro indica qu elemento es el que queremos
introducir, es la misma lista que en el modo simple, descrita arriba,
excepto BE_BRUJULA que solo funciona en el modo compuesto:

BE_BRUJULA            dibuja una especie de brjula (en modo texto) que
                      seala las salidas visibles, este item solo funciona
                      en el modo compuesto y ocupa tres lneas de la barra a
                      partir de la posicin vertical especificada, asi que
                      barra de estado debe tener las suficientes lneas para
                      albergar la brjula
BE_BRUJULA_BONITA     Igual que BE_BRUJULA pero aadindole un marco y las
                      inscripciones N, S, E y O.

Si hay ms de un item de texto (BE_TEXTO) entonces la rutina texto debe ser
un switch, en donde se especifique el primer item de texto, el segundo, etc.
asi:

texto
 [ x;
   switch(x)
    {
      1: "Primer texto";
      2: "Segundo texto";
      3: "Tercer texto";
    }
 ];

Por ltimo existen funciones para cambiar la barra en tiempo de ejecucin,
es decir durante el juego, para obtener informacin sobre ello ver el
manual (fichero manual.txt).

Se incluyen tambin tres ficheros en inform de ejemplo de uso de barra.h, el
primero en modo simple, el segundo en modo compuesto, y el tercero de
salidas y brjulas.

Nota: si compilando da warnings sobre variables declaradas pero no usadas,
no pasa nada, es completamente normal.
