/*--------------------------------------------------------------------
 * FICHERO:  ZonCrea.c
 * OBJETIVO: Definir las funciones Zon_Crea() y Zon_Escala()
 * AUTOR:    Pedro Reina
 * FECHA:    J.13.7.1995
 *------------------------------------------------------------------*/

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

#include "Zona.h"

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

/*--------------------------------------------------------------Olimpo
 * FUNCION:  Zon_Crea()
 * OBJETIVO: Crear una zona
 * ENTRADAS: La fila superior, la columna izquierda, la fila
 *           inferior y la columna derecha, todo en caracteres
 * SALIDAS:  Una zona o NIL si no se puede crear
 * NOTA:     La zona queda iniciada con una escala de 100 
 *           unidades de altura y de anchura, con el origen 
 *           situado en la esquina inferior izquierda
 * EJEMPLO:  Zon_Crea (3,4,14,70)
 *------------------------------------------------------------------*/
zona Zon_Crea (F1,C1,F2,C2)
octeto F1, C1, F2, C2;
  {
  zona Nuevo = NIL;

  if ( Pan_Modo() == PAN_GRAFICO )
   {
   if ( Nuevo = (zona) Mem_Crea (sizeof(Zon_st)) )
     {
     Zon_PonMargenIzquierdo (Nuevo, Pan_MargenIzquierdo() + C1*Pan_AnchoCar());
     Zon_PonMargenSuperior  (Nuevo, Pan_MargenSuperior()  + F1*Pan_AltoCar());
     Zon_PonAnchoFisico     (Nuevo, (C2-C1+1) * Pan_AnchoCar());
     Zon_PonAltoFisico      (Nuevo, (F2-F1+1) * Pan_AltoCar());

     Zon_PonFilSup (Nuevo,F1);
     Zon_PonFilInf (Nuevo,F2);
     Zon_PonColIzq (Nuevo,C1);
     Zon_PonColDer (Nuevo,C2);

     Zon_Escala (Nuevo, 100.0, 100.0, 0.0, 0.0);
     }
   }

  return ( Nuevo );
  }

/*--------------------------------------------------------------Olimpo
 * FUNCION:  Zon_Escala()
 * OBJETIVO: Establecer la escala que se usar al manejar 
 *           una zona
 * ENTRADAS: La zona y nmeros reales que indican la anchura, 
 *           la altura y el origen de coordenadas
 * SALIDAS:  La zona
 * NOTA:     El signo de la anchura y la altura indican la 
 *           direccin que se va a considerar positiva. Un 
 *           valor positivo indica respecto a la convencin 
 *           (horizontal es positivo hacia la derecha, vertical
 *           es positivo hacia arriba), mientras que un valor 
 *           negativo invierte la convencin. El origen tambin
 *           se cuenta en un extremo de la zona o en otro segn
 *           estos signos.
 * EJEMPLO:  Zon_Escala (Imagen, 4.5, 2.8, 2.3, 1.4)
 *------------------------------------------------------------------*/
zona Zon_Escala (Zona, Ancho, Alto, OrigenX, OrigenY)
zona Zona;
real Ancho, Alto, OrigenX, OrigenY;
  {
  Zon_PonAncho (Zona, Ancho);
  Zon_PonAlto (Zona, Alto);
  Zon_PonOrigenX (Zona, OrigenX);
  Zon_PonOrigenY (Zona, OrigenY);

  return ( Zona );
  }