/*--------------------------------------------------------------------
 * FICHERO:  CdrConst.c
 * OBJETIVO: Definir la funcin Cdr_Construye()
 * AUTOR:    Pedro Reina
 * FECHA:    V.14.7.1995
 *------------------------------------------------------------------*/

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

#include "Cuadro.h"

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

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

/*--------------------------------------------------------------Olimpo
 * FUNCION:  Cdr_Construye()
 * OBJETIVO: Construye un cuadro: una lista de cadenas que
 *           forman un cuadro
 * ENTRADAS: El tipo de lnea que se dibuja en las lneas 
 *           externas, el de las internas, el nmero de filas,
 *           el alto de cada una, el nmero de columnas y el 
 *           ancho de cada una
 * SALIDAS:  Una lista de cadenas
 * NOTA:     La lista devuelta hay que destruirla cuando no 
 *           sea necesaria
 * EJEMPLO:  Cdr_Construye (CDR_DOBLE,CDR_SIMPLE,2,3,4,1)
 *------------------------------------------------------------------*/
lista Cdr_Construye (Fuera,Dentro,NumF,Alto,NumC,Ancho)
octeto Fuera,Dentro,NumF,Alto,NumC,Ancho;
  {
  contador i, j, AnchoTotal;
  cadena   Cadena;
  lista    Respuesta;

  AnchoTotal = NumC * (Ancho+1) + 1;
  Respuesta = Lis_Crea();
  Cadena = Cad_Crea (AnchoTotal);

  Cadena = Cdr_LineaVariada (Cadena,Fuera,Dentro,CDR_ARRIBA,NumC,Ancho);
  Lis_PonContenido (Respuesta,Cadena);
  Cadena = Cad_Crea (AnchoTotal);

  for ( i=0; i<NumF-1 ; i++ )
    {
    for ( j=0 ; j<Alto ; j++ )
      {
      Cadena = Cdr_LineaVariada (Cadena,Fuera,Dentro,CDR_CENTRO,NumC,Ancho);
      Lis_AgregaFin (Respuesta,Cadena);
      Cadena = Cad_Crea (AnchoTotal);
      }
      Cadena = Cdr_LineaVariada (Cadena,Fuera,Dentro,CDR_CORTE,NumC,Ancho);
      Lis_AgregaFin (Respuesta,Cadena);
      Cadena = Cad_Crea (AnchoTotal);
    }
    for ( j=0 ; j<Alto ; j++ )
      {
      Cadena = Cdr_LineaVariada (Cadena,Fuera,Dentro,CDR_CENTRO,NumC,Ancho);
      Lis_AgregaFin (Respuesta,Cadena);
      Cadena = Cad_Crea (AnchoTotal);
      }
  Cadena = Cdr_LineaVariada (Cadena,Fuera,Dentro,CDR_ABAJO,NumC,Ancho);
  Lis_AgregaFin (Respuesta,Cadena);

  return ( Respuesta );
  }
