/*--------------------------------------------------------------------
 * FICHERO:       Zona.h
 * OBJETIVO:      Definir el objeto "Zona"
 * IDENTIFICADOR: Zon
 * AUTOR:         Pedro Reina
 * FECHA:         J.13.7.1995
 * OBJETOS UTILIZADOS: Memoria, Pantalla
 *------------------------------------------------------------------*/

/*--------------------------------------------------------------------
 * Funciones pblicas
 *
 *   Zon_AnchoFisico()       Zona.h
 *   Zon_AltoFisico()        Zona.h
 *   Zon_Ancho()             Zona.h
 *   Zon_Alto()              Zona.h
 *   Zon_OrigenX()           Zona.h
 *   Zon_OrigenY()           Zona.h
 *   Zon_Borra()             Zona.h
 *   Zon_Destruye()          Zona.h
 *   Zon_Crea()              ZonCrea.c
 *   Zon_Pixel()             Zona.h
 *   Zon_PixelSeguro()       Zona.h
 *   Zon_Oxel()              Zona.h
 *   Zon_OxelSeguro()        Zona.h
 *   Zon_Escala()            ZonCrea.c
 *   Zon_AnchoEnOxel         Zona.h (PC), ZonOxFis.c (QL)
 *   Zon_Punto()             Zona.h
 *   Zon_PuntoSeguro()       Zona.h
 *   Zon_Bloque()            ZonBloq.c
 *   Zon_Linea()             ZonLinea.c
 *------------------------------------------------------------------*/

/*--------------------------------------------------------------------
 * Funciones conocidas
 *
 *   Ninguna
 *------------------------------------------------------------------*/

/*--------------------------------------------------------------------
 * Funciones privadas
 *
 *   Zon_MargenIzquierdo()    Zona.h
 *   Zon_PonMargenIzquierdo() Zona.h
 *   Zon_MargenSuperior()     Zona.h
 *   Zon_PonMargenSuperior()  Zona.h
 *   Zon_PonAnchoFisico()     Zona.h
 *   Zon_PonAltoFisico()      Zona.h
 *   Zon_PonAncho()           Zona.h
 *   Zon_PonAlto()            Zona.h
 *   Zon_PonOrigenX()         Zona.h
 *   Zon_PonOrigenY()         Zona.h
 *   Zon_FilSup()             Zona.h
 *   Zon_PonFilSup()          Zona.h
 *   Zon_FilInf()             Zona.h
 *   Zon_PonFilInf()          Zona.h
 *   Zon_ColIzq()             Zona.h
 *   Zon_PonColIzq()          Zona.h
 *   Zon_ColDer()             Zona.h
 *   Zon_PonColDer()          Zona.h
 *   Zon_PixelPertenece()     Zona.h
 *   Zon_OxelPertenece()      Zona.h
 *   Zon_PixelFisico()        ZonPixFi.c
 *   Zon_OxelFisico()         ZonOxFis.c
 *   Zon_Abscisa()            Zona.h
 *   Zon_Ordenada()           Zona.h
 *
 * Funciones privadas QL
 *
 *   Zon_PrimerUtil()         ZonOxFis.c
 *------------------------------------------------------------------*/

#ifndef _ZONA_
#define _ZONA_

/*--------------------------------------------------------------------
 * Ficheros de cabecera
 *------------------------------------------------------------------*/

#include "Memoria.h"
#include "Pantalla.h"

/*--------------------------------------------------------------------
 * Definicin de macros constantes
 *------------------------------------------------------------------*/

    /* Ninguna */

/*--------------------------------------------------------------------
 * Definicin del tipo "zona"
 *------------------------------------------------------------------*/
typedef struct {
               contador MargenIzquierdo;   /* En pixels */
               contador MargenSuperior;    /* En pixels */
               contador AnchoFisico;       /* En pixels */
               contador AltoFisico;        /* En pixels */
               real     Ancho;             /* En escala */
               real     Alto;              /* En escala */
               real     OrigenX;           /* En escala */
               real     OrigenY;           /* En escala */
               octeto   FilSup;            /* En caracteres */
               octeto   FilInf;            /* En caracteres */
               octeto   ColIzq;            /* En caracteres */
               octeto   ColDer;            /* En caracteres */
               } Zon_st, *zona;

/*--------------------------------------------------------------------
 * Variables globales
 *------------------------------------------------------------------*/

   /* Ninguna */

/*--------------------------------------------------------------------
 * Declaracin de funciones
 *------------------------------------------------------------------*/

zona   Zon_Crea();
zona   Zon_Escala();
zona   Zon_Bloque();
zona   Zon_Linea();
logico Zon_PixelFisico();
logico Zon_OxelFisico();

#ifdef OLIMPO_QL
contador Zon_AnchoEnOxel();
contador Zon_PrimerUtil();
#endif

/*--------------------------------------------------------------------
 * Definicin de macros funciones
 *------------------------------------------------------------------*/

/*--------------------------------------------------------------------
 * MACRO:    Zon_MargenIzquierdo()
 * OBJETIVO: Decir la distancia en pixels desde el borde izquierdo de
 *           la pantalla hasta el comienzo de la zona
 * ENTRADAS: La zona
 * SALIDAS:  Un contador que indica el margen izquierdo
 * EJEMPLO:  Zon_MargenIzquierdo ( Imagen )
 *------------------------------------------------------------------*/
#define Zon_MargenIzquierdo(z)  ((z)->MargenIzquierdo)

/*--------------------------------------------------------------------
 * MACRO:    Zon_PonMargenIzquierdo()
 * OBJETIVO: Poner la distancia en pixels desde el borde izquierdo de
 *           la pantalla hasta el comienzo de la zona
 * ENTRADAS: La zona y un contador que indica el margen izquierdo
 * SALIDAS:  Un contador que indica el margen izquierdo
 * EJEMPLO:  Zon_PonMargenIzquierdo ( Imagen, 48 )
 *------------------------------------------------------------------*/
#define Zon_PonMargenIzquierdo(z,v)  ((z)->MargenIzquierdo=(v))

/*--------------------------------------------------------------------
 * MACRO:    Zon_MargenSuperior()
 * OBJETIVO: Decir la distancia en pixels desde el borde superior de
 *           la pantalla hasta el comienzo de la zona
 * ENTRADAS: La zona
 * SALIDAS:  Un contador que indica el margen superior
 * EJEMPLO:  Zon_MargenSuperior ( Imagen )
 *------------------------------------------------------------------*/
#define Zon_MargenSuperior(z)  ((z)->MargenSuperior)

/*--------------------------------------------------------------------
 * MACRO:    Zon_PonMargenSuperior()
 * OBJETIVO: Poner la distancia en pixels desde el borde superior de
 *           la pantalla hasta el comienzo de la zona
 * ENTRADAS: La zona y un contador que indica el margen superior
 * SALIDAS:  Un contador que indica el margen Superior
 * EJEMPLO:  Zon_PonMargenSuperior ( Imagen, 48 )
 *------------------------------------------------------------------*/
#define Zon_PonMargenSuperior(z,v)  ((z)->MargenSuperior=(v))

/*--------------------------------------------------------------Olimpo
 * MACRO:    Zon_AnchoFisico()
 * OBJETIVO: Decir la anchura en pixels de una zona
 * ENTRADAS: La zona
 * SALIDAS:  Un contador que indica la anchura fsica
 * EJEMPLO:  Zon_AnchoFisico ( Imagen )
 *------------------------------------------------------------------*/
#define Zon_AnchoFisico(z)  ((z)->AnchoFisico)

/*--------------------------------------------------------------------
 * MACRO:    Zon_PonAnchoFisico()
 * OBJETIVO: Poner la anchura en pixels de una zona
 * ENTRADAS: La zona y un contador que indica la anchura fsico
 * SALIDAS:  Un contador que indica la anchura fsica
 * EJEMPLO:  Zon_PonAnchoFisico ( Imagen, 148 )
 *------------------------------------------------------------------*/
#define Zon_PonAnchoFisico(z,v)  ((z)->AnchoFisico=(v))

/*--------------------------------------------------------------Olimpo
 * MACRO:    Zon_AltoFisico()
 * OBJETIVO: Decir la altura en pixels de una zona
 * ENTRADAS: La zona
 * SALIDAS:  Un contador que indica la altura fsica
 * EJEMPLO:  Zon_AltoFisico ( Imagen )
 *------------------------------------------------------------------*/
#define Zon_AltoFisico(z)  ((z)->AltoFisico)

/*--------------------------------------------------------------------
 * MACRO:    Zon_PonAltoFisico()
 * OBJETIVO: Poner la altura en pixels de una zona
 * ENTRADAS: La zona y un contador que indica la altura fsico
 * SALIDAS:  Un contador que indica la altura fsica
 * EJEMPLO:  Zon_PonAltoFisico ( Imagen, 148 )
 *------------------------------------------------------------------*/
#define Zon_PonAltoFisico(z,v)  ((z)->AltoFisico=(v))

/*--------------------------------------------------------------Olimpo
 * MACRO:    Zon_Ancho()
 * OBJETIVO: Decir la anchura en escala de una zona
 * ENTRADAS: La zona
 * SALIDAS:  Un nmero real que indica la anchura en escala
 * EJEMPLO:  Zon_Ancho ( Imagen )
 *------------------------------------------------------------------*/
#define Zon_Ancho(z)  ((z)->Ancho)

/*--------------------------------------------------------------------
 * MACRO:    Zon_PonAncho()
 * OBJETIVO: Poner la anchura en escala de una zona
 * ENTRADAS: La zona y un nmero real que indica la anchura
 * SALIDAS:  Un nmero real que indica la anchura en escala
 * EJEMPLO:  Zon_PonAncho ( Imagen, 100 )
 *------------------------------------------------------------------*/
#define Zon_PonAncho(z,v)  ((z)->Ancho=(v))

/*--------------------------------------------------------------Olimpo
 * MACRO:    Zon_Alto()
 * OBJETIVO: Decir la altura en escala de una zona
 * ENTRADAS: La zona
 * SALIDAS:  Un nmero real que indica la altura en escala
 * EJEMPLO:  Zon_Alto ( Imagen )
 *------------------------------------------------------------------*/
#define Zon_Alto(z)  ((z)->Alto)

/*--------------------------------------------------------------------
 * MACRO:    Zon_PonAlto()
 * OBJETIVO: Poner la altura en escala de una zona
 * ENTRADAS: La zona y un nmero real que indica la altura
 * SALIDAS:  Un nmero real que indica la altura en escala
 * EJEMPLO:  Zon_PonAlto ( Imagen, 148 )
 *------------------------------------------------------------------*/
#define Zon_PonAlto(z,v)  ((z)->Alto=(v))

/*--------------------------------------------------------------Olimpo
 * MACRO:    Zon_OrigenX()
 * OBJETIVO: Decir el origen de abscisas en escala de una zona
 * ENTRADAS: La zona
 * SALIDAS:  Un nmero real que indica el origen de abscisas 
 *           en escala
 * EJEMPLO:  Zon_OrigenX ( Imagen )
 *------------------------------------------------------------------*/
#define Zon_OrigenX(z)  ((z)->OrigenX)

/*--------------------------------------------------------------------
 * MACRO:    Zon_PonOrigenX()
 * OBJETIVO: Poner el origen de abscisas en escala de una zona
 * ENTRADAS: La zona y un nmero real que indica el origen de abscisas
 * SALIDAS:  Un nmero real que indica el origen de abscisas en escala
 * EJEMPLO:  Zon_PonOrigenX ( Imagen, 50 )
 *------------------------------------------------------------------*/
#define Zon_PonOrigenX(z,v)  ((z)->OrigenX=(v))

/*--------------------------------------------------------------Olimpo
 * MACRO:    Zon_OrigenY()
 * OBJETIVO: Decir el origen de ordenadas en escala de una zona
 * ENTRADAS: La zona
 * SALIDAS:  Un nmero real que indica el origen de ordenadas 
 *           en escala
 * EJEMPLO:  Zon_OrigenY ( Imagen )
 *------------------------------------------------------------------*/
#define Zon_OrigenY(z)  ((z)->OrigenY)

/*--------------------------------------------------------------------
 * MACRO:    Zon_PonOrigenY()
 * OBJETIVO: Poner el origen de ordenadas en escala de una zona
 * ENTRADAS: La zona y un nmero real que indica el origen de ordenadas
 * SALIDAS:  Un nmero real que indica el origen de ordenadas en escala
 * EJEMPLO:  Zon_PonOrigenY ( Imagen, 50 )
 *------------------------------------------------------------------*/
#define Zon_PonOrigenY(z,v)  ((z)->OrigenY=(v))

/*--------------------------------------------------------------------
 * MACRO:    Zon_FilSup()
 * OBJETIVO: Decir la fila superior de una zona
 * ENTRADAS: La zona
 * SALIDAS:  Un octeto que indica la fila superior
 * EJEMPLO:  Zon_FilSup ( Imagen )
 *------------------------------------------------------------------*/
#define Zon_FilSup(z)  ((z)->FilSup)

/*--------------------------------------------------------------------
 * MACRO:    Zon_PonFilSup()
 * OBJETIVO: Poner la fila superior de una zona
 * ENTRADAS: La zona y un octeto que indica la fila superior
 * SALIDAS:  Un octeto que indica la fila superior
 * EJEMPLO:  Zon_PonFilSup ( Imagen, 4 )
 *------------------------------------------------------------------*/
#define Zon_PonFilSup(z,v)  ((z)->FilSup=(v))

/*--------------------------------------------------------------------
 * MACRO:    Zon_FilInf()
 * OBJETIVO: Decir la fila inferior de una zona
 * ENTRADAS: La zona
 * SALIDAS:  Un octeto que indica la fila inferior
 * EJEMPLO:  Zon_FilInf ( Imagen )
 *------------------------------------------------------------------*/
#define Zon_FilInf(z)  ((z)->FilInf)

/*--------------------------------------------------------------------
 * MACRO:    Zon_PonFilInf()
 * OBJETIVO: Poner la fila inferior de una zona
 * ENTRADAS: La zona y un octeto que indica la fila inferior
 * SALIDAS:  Un octeto que indica la fila Inferior
 * EJEMPLO:  Zon_PonFilInf ( Imagen, 9 )
 *------------------------------------------------------------------*/
#define Zon_PonFilInf(z,v)  ((z)->FilInf=(v))

/*--------------------------------------------------------------------
 * MACRO:    Zon_ColIzq()
 * OBJETIVO: Decir la columna izquierda de una zona
 * ENTRADAS: La zona
 * SALIDAS:  Un octeto que indica la columna izquierda
 * EJEMPLO:  Zon_ColIzq ( Imagen )
 *------------------------------------------------------------------*/
#define Zon_ColIzq(z)  ((z)->ColIzq)

/*--------------------------------------------------------------------
 * MACRO:    Zon_PonColIzq()
 * OBJETIVO: Poner la columna izquierda de una zona
 * ENTRADAS: La zona y un octeto que indica la columna izquierda
 * SALIDAS:  Un octeto que indica la columna izquierda
 * EJEMPLO:  Zon_PonColIzq ( Imagen, 4 )
 *------------------------------------------------------------------*/
#define Zon_PonColIzq(z,v)  ((z)->ColIzq=(v))

/*--------------------------------------------------------------------
 * MACRO:    Zon_ColDer()
 * OBJETIVO: Decir la columna derecha de una zona
 * ENTRADAS: La zona
 * SALIDAS:  Un octeto que indica la columna derecha
 * EJEMPLO:  Zon_ColDer ( Imagen )
 *------------------------------------------------------------------*/
#define Zon_ColDer(z)  ((z)->ColDer)

/*--------------------------------------------------------------------
 * MACRO:    Zon_PonColDer()
 * OBJETIVO: Poner la columna derecha de una zona
 * ENTRADAS: La zona y un octeto que indica la columna derecha
 * SALIDAS:  Un octeto que indica la columna derecha
 * EJEMPLO:  Zon_PonColDer ( Imagen, 9 )
 *------------------------------------------------------------------*/
#define Zon_PonColDer(z,v)  ((z)->ColDer=(v))

/*--------------------------------------------------------------Olimpo
 * MACRO:    Zon_Borra()
 * OBJETIVO: Borrar una zona con un color
 * ENTRADAS: La zona y un octeto que indica el color
 * SALIDAS:  Ninguna
 * EJEMPLO:  Zon_Borra ( Imagen, NEGRO )
 *------------------------------------------------------------------*/
#define Zon_Borra(z,c)  (Pan_Borra(c,Zon_FilSup(z),Zon_ColIzq(z), \
                                     Zon_FilInf(z),Zon_ColDer(z)))

/*--------------------------------------------------------------Olimpo
 * MACRO:    Zon_Destruye()
 * OBJETIVO: Eliminar una zona, liberando memoria
 * ENTRADAS: La zona
 * SALIDAS:  Ninguna
 * EJEMPLO:  Zon_Destruye ( Imagen )
 *------------------------------------------------------------------*/
#define Zon_Destruye(z)  Mem_Destruye(z)

/*--------------------------------------------------------------Olimpo
 * MACRO:    Zon_Pixel()
 * OBJETIVO: Dibujar un pixel de una zona de un color
 * ENTRADAS: La zona, los valores "x" e "y" del pixel y el color
 * SALIDAS:  Lgica, indicando si se ha podido dibujar
 * NOTA:     Los valores "x" e "y" se cuentan a partir de 0 
 *           desde la izquierda y desde arriba respectivamente
 * EJEMPLO:  Zon_Pixel ( Imagen, 3, 8, ROJO )
 *------------------------------------------------------------------*/
#define Zon_Pixel(z,x,y,c)  (Zon_PixelPertenece(z,x,y) ? \
                             Zon_PixelSeguro(z,x,y,c)  : \
                             NO )

/*--------------------------------------------------------------------
 * MACRO:    Zon_PixelPertenece()
 * OBJETIVO: Decir si un pixel pertenece a una zona
 * ENTRADAS: La zona y los valores "x" e "y" del pixel
 * SALIDAS:  Lgica
 * NOTA:     Los valores "x" e "y" se cuentan a partir de 0 desde la
 *           izquierda y desde arriba respectivamente
 * EJEMPLO:  Zon_PixelPertenece ( Imagen, 3, 8 )
 *------------------------------------------------------------------*/
#define Zon_PixelPertenece(z,x,y)  (0 <= (x) && (x) < Zon_AnchoFisico(z) && \
                                    0 <= (y) && (y) < Zon_AltoFisico(z))

/*--------------------------------------------------------------Olimpo
 * MACRO:    Zon_PixelSeguro()
 * OBJETIVO: Dibujar un pixel que pertenezca a una zona 
 *           de un color
 * ENTRADAS: La zona, los valores "x" e "y" del pixel y el color
 * SALIDAS:  SI, ya que debe poder ejecutarse
 * NOTAS:    1. Los valores "x" e "y" se cuentan a partir de 0 
 *              desde la izquierda y desde arriba 
 *              respectivamente
 *           2. Para ejecutar esta funcin el pixel debe 
 *              pertenecer a la zona
 * EJEMPLO:  Zon_PixelSeguro ( Imagen, 3, 8, ROJO )
 *------------------------------------------------------------------*/
#define Zon_PixelSeguro(z,x,y,c)  Zon_PixelFisico(Zon_MargenIzquierdo(z)+x, \
                                                  Zon_MargenSuperior(z)+y,c)

/*--------------------------------------------------------------Olimpo
 * MACRO:    Zon_Oxel()
 * OBJETIVO: Dibujar un oxel de una zona de un color
 * ENTRADAS: La zona, los valores "x" e "y" del oxel, la 
 *           mscara de dibujo y el color
 * SALIDAS:  Lgica, indicando si se ha podido dibujar
 * NOTAS:    1. Los valores "x" e "y" se cuentan a partir de 0
 *              desde la izquierda y desde arriba 
 *              respectivamente
 * EJEMPLO:  Zon_Oxel ( Imagen, 6, 7, 0xFF, ROJO )
 *------------------------------------------------------------------*/
#define Zon_Oxel(z,x,y,m,c)  (Zon_OxelPertenece(z,x,y)  ? \
                              Zon_OxelSeguro(z,x,y,m,c) : \
                              NO )

/*--------------------------------------------------------------------
 * MACRO:    Zon_OxelPertenece()
 * OBJETIVO: Decir si un oxel pertenece a una zona
 * ENTRADAS: La zona y los valores "x" e "y" del Oxel
 * SALIDAS:  Lgica
 * NOTAS:    1. Los valores "x" e "y" se cuentan a partir de 0 desde la
 *              izquierda y desde arriba respectivamente
 * EJEMPLO:  Zon_OxelPertenece ( Imagen, 3, 8 )
 *------------------------------------------------------------------*/
#define Zon_OxelPertenece(z,x,y) (0 <= (x) && (x) < Zon_AnchoEnOxel(z) && \
                                  0 <= (y) && (y) < Zon_AltoFisico(z))

/*--------------------------------------------------------------Olimpo
 * MACRO:    Zon_AnchoEnOxel()
 * OBJETIVO: Decir la anchura en oxels de una zona
 * ENTRADAS: La zona
 * SALIDAS:  Un contador que indica la anchura en oxels
 * EJEMPLO:  Zon_AnchoEnOxel ( Imagen )
 *------------------------------------------------------------------*/

#ifdef OLIMPO_PC
#define Zon_AnchoEnOxel(z)  (Zon_AnchoFisico(z)/Pan_AnchoCar())
#endif

/*--------------------------------------------------------------Olimpo
 * MACRO:    Zon_OxelSeguro()
 * OBJETIVO: Dibujar un oxel que pertenezca a una zona 
 *           de un color
 * ENTRADAS: La zona, los valores "x" e "y" del oxel, la 
 *           mscara de dibujo y el color
 * SALIDAS:  SI, ya que debe poder ejecutarse
 * NOTAS:    1. Los valores "x" e "y" se cuentan a partir de 
 *              0 desde la izquierda y desde arriba 
 *              respectivamente
 *           2. Para ejecutar esta funcin el oxel debe 
 *              pertenecer a la zona
 * EJEMPLO:  Zon_OxelSeguro ( Imagen, 0, 5, 0xFF, ROJO )
 *------------------------------------------------------------------*/

#ifdef OLIMPO_PC
#define Zon_OxelSeguro(z,x,y,m,c)  Zon_OxelFisico(Zon_ColIzq(z)+(x), \
                                                  Zon_MargenSuperior(z)+y,m,c)
#endif

#ifdef OLIMPO_QL
#define Zon_OxelSeguro(z,x,y,m,c)  Zon_OxelFisico((x)+Zon_PrimerUtil(z)/8, \
                                                  Zon_MargenSuperior(z)+y,m,c)
#endif

/*--------------------------------------------------------------------
 * MACRO:    Zon_Abscisa()
 * OBJETIVO: Calcular el valor del pixel asociado a un valor en escala
 *           en el eje de abscisas
 * ENTRADAS: La zona y el valor en escala
 * SALIDAS:  El nmero de pixel
 * NOTA:     Este macro realiza muchas operaciones en coma flotante
 * EJEMPLO:  Zon_Abscisa ( Imagen, 34.67 )
 *------------------------------------------------------------------*/
#define Zon_Abscisa(z,x)  ((contador)(((x+Zon_OrigenX(z))*Zon_AnchoFisico(z) \
                    /Zon_Ancho(z))+(Zon_Ancho(z)<0)*Zon_AnchoFisico(z)-0.5))

/*--------------------------------------------------------------------
 * MACRO:    Zon_Ordenada()
 * OBJETIVO: Calcular el valor del pixel asociado a un valor en escala
 *           en el eje de ordenadas
 * ENTRADAS: La zona y el valor en escala
 * SALIDAS:  El nmero de pixel
 * NOTA:     Este macro realiza muchas operaciones en coma flotante
 * EJEMPLO:  Zon_Ordenada ( Imagen, 34.67 )
 *------------------------------------------------------------------*/
#define Zon_Ordenada(z,y)  ((contador)(-((y+Zon_OrigenY(z))*Zon_AltoFisico(z) \
                        /Zon_Alto(z))+(Zon_Alto(z)>0)*Zon_AltoFisico(z)-0.5))

/*--------------------------------------------------------------Olimpo
 * MACRO:    Zon_Punto()
 * OBJETIVO: Dibujar un punto de una zona de un color
 * ENTRADAS: La zona, los valores "x" e "y" del punto (en 
 *           escala) y el color
 * SALIDAS:  Lgica, indicando si se ha podido dibujar
 * EJEMPLO:  Zon_Punto ( Imagen, 21.3, 82.7, ROJO )
 *------------------------------------------------------------------*/
#define Zon_Punto(z,x,y,c)  (Zon_Pixel(z,Zon_Abscisa(z,x),Zon_Ordenada(z,y),c))

/*--------------------------------------------------------------Olimpo
 * MACRO:    Zon_PuntoSeguro()
 * OBJETIVO: Dibujar un punto de una zona de un color
 * ENTRADAS: La zona, los valores "x" e "y" del punto (en 
 *           escala) y el color
 * SALIDAS:  SI, ya que debe poder ejecutarse
 * NOTA      Para ejecutar esta funcin el punto debe 
 *           pertenecer a la zona
 * EJEMPLO:  Zon_PuntoSeguro ( Imagen, 21.3, 82.7, ROJO )
 *------------------------------------------------------------------*/
#define Zon_PuntoSeguro(z,x,y,c)  (Zon_PixelSeguro(z,Zon_Abscisa(z,x), \
                                                     Zon_Ordenada(z,y),c))

#endif /* _ZONA_ */
