	/*********************************************/
	/*	    " ULOM VA DE PASEO "             */
	/*                                           */
	/* Por: Juan Manuel S nchez Cervantes.       */
	/*                                           */
	/* Programa demostraci¢n de las aplicaciones */
	/* b sicas de los m¢dulos:  .pantalla.cpp    */
	/*			    .imagen.cpp      */
	/*			    .video.cpp       */
	/*			    .memoria.cpp     */
	/*********************************************/

#include "pantalla.h"
#include "video.h"
#include "imagen.h"
#include "memoria.h"

pantalla320200256 Pantalla;  //Pantalla virtual.
paleta256 Paleta;	     //Paleta de colores.
multiImagen256 Ulom;         //"Ulom" ser  la secuencia de imagenes de
			     // nuestro cerdo. (ver m¢dulo "imagen.h").

/**************************************************************************/
// Este simple procedimiento ilustra una peque¤a animaci¢n en pantalla.
// Partiremos de un objeto 'multiImagen256' que no es m s que una secuencia
// de im genes, en este caso 17.
// Las 8 primeras imagenes (bloques gr ficos) son las posiciones de Ulom
// andando en direcci¢n izquierda-derecha (0-7 inclusives).
// Las 8 siguientes (8-15) son las posiciones de Ulom en sentido contrario.
// La imagen 16 es una foto de Ulom que ilustrar  el fondo de la animaci¢n.
/**************************************************************************/
void Ulom_Anda(void){
 int dx, dy;   //tama¤o de la imagen a dibujar.
 int i,j, incr;  //contador de la posici¢n de Ulom andando.
 int sig=2; //positivo

 i=incr=0;
 j=84;
 while(inportb(96)!=1){
   Pantalla.cls(0);        //borrar pantalla completa.

   Ulom.darDimensiones(16, &dx, &dy);                //dibujar foto de Ulom.
   Pantalla.dImagen(80,45,dx,dy,Ulom.devolver(16));  // (bloque n§ 16)

   Ulom.darDimensiones(i+incr, &dx, &dy);            //dibujar Ulom andando.
   Pantalla.dImagenMasc(j+=sig,98,dx,dy,Ulom.devolver(i+incr));

   Pantalla.volcar();    //volcar la pantalla virtual a Video RAM.
   delay(80);            //variar el retardo seg£n la capacidad de PC.


   i = (i+1)%8;
   if(j==220 || j==60) {
	incr = (incr+8)%16;
	sig*=-1;
   }
 };
};

/**************************************************************************/
/* M A I N
/**************************************************************************/
void main(void){

  Modo320200256();		   //inicializar modo 320x200 a 256 colores.

  Paleta.cargar("paleta.pal",0);
  Paleta.actualizarDAC();	   //el DAC se actualiza con nuestra paleta.


  Pantalla.inicializar();          //reservar memoria para la pantalla.
  Pantalla.cls(0);		   //borrar la pantalla con el color 0.

  Ulom.cargarMig("ulom.mig");

  Ulom_Anda();                     //Procedimiento principal del programa.

  ModoTexto();
};