/*--------------------------------------------------------------------
 * FICHERO:  CdrLinVa.c
 * OBJETIVO: Definir la funcin interna Cdr_LineaVariada()
 * AUTOR:    Pedro Reina
 * FECHA:    J.20.4.1995
 *------------------------------------------------------------------*/

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

#include "Cuadro.h"

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

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

/*--------------------------------------------------------------------
 * FUNCION:  Cdr_LineaVariada()
 * OBJETIVO: Crear una cadena con distintos caracteres que forman una
 *           lnea de un cuadro
 * ENTRADAS: Una cadena donde copiar la lnea formada, el tipo de lnea
 *           de las lneas externas, el de las internas, la posicin relativa
 *           de la lnea, nmero de huecos y ancho de cada uno
 * SALIDAS:  La cadena de entrada se modifica y se devuelve
 * EJEMPLO:  Cdr_LineaVariada (Cadena,CDR_DOBLE,CDR_SIMPLE,CDR_ARRIBA,2,5)
 *------------------------------------------------------------------*/
cadena Cdr_LineaVariada (Cadena,Fuera,Dentro,PosRel,Hueco,Ancho)
cadena Cadena;
octeto Fuera, Dentro, PosRel, Hueco, Ancho;
  {
  static caracter ArrIzq[4] = { 218, 218, 201, 201 };
  static caracter ArrCen[4] = { 194, 210, 209, 203 };
  static caracter ArrDer[4] = { 191, 191, 187, 187 };
  static caracter CenIzq[4] = { 195, 198, 199, 204 };
  static caracter CenCen[4] = { 197, 206, 197, 206 };
  static caracter CenDer[4] = { 180, 181, 182, 185 };
  static caracter AbaIzq[4] = { 192, 192, 200, 200 };
  static caracter AbaCen[4] = { 193, 208, 207, 202 };
  static caracter AbaDer[4] = { 217, 217, 188, 188 };
  static caracter HorFue[4] = { 196, 196, 205, 205 };
  static caracter VerFue[4] = { 179, 179, 186, 186 };
  static caracter HorDen[4] = { 196, 205, 196, 205 };
  static caracter VerDen[4] = { 179, 186, 179, 186 };
  static caracter Espaci[4] = { ' ', ' ', ' ', ' ' };

  octeto   Tipo, i, j, k;
  caracter Inicio, Medio, Corte, Fin;
  
  Tipo = 2 * Fuera + Dentro;
  switch ( PosRel )
    {
    case CDR_ARRIBA: Inicio = ArrIzq[Tipo];
                     Medio  = HorFue[Tipo];
                     Corte  = ArrCen[Tipo];
                     Fin    = ArrDer[Tipo];
                     break;
                     
    case CDR_CENTRO: Inicio = VerFue[Tipo];
                     Medio  = Espaci[Tipo];
                     Corte  = VerDen[Tipo];
                     Fin    = VerFue[Tipo];
                     break;

    case CDR_CORTE:  Inicio = CenIzq[Tipo];
                     Medio  = HorDen[Tipo];
                     Corte  = CenCen[Tipo];
                     Fin    = CenDer[Tipo];
                     break;

    case CDR_ABAJO:  Inicio = AbaIzq[Tipo];
                     Medio  = HorFue[Tipo];
                     Corte  = AbaCen[Tipo];
                     Fin    = AbaDer[Tipo];
                     break;
    } 

  k = 0;
  Cadena[k++] = Inicio;
  for ( i=0 ; i<Hueco-1 ; i++ )
    {
    for ( j=0 ; j<Ancho ; j++ )
      { Cadena[k++] = Medio; }
    Cadena[k++] = Corte;
    }
    for ( j=0 ; j<Ancho ; j++ )
      { Cadena[k++] = Medio; }
  Cadena[k++] = Fin;
  Cadena[k] = NULO;

  return ( Cadena );
  }
