/*--------------------------------------------------------------------
 * FICHERO:  Vtec.c
 * OBJETIVO: Probar el objeto "Tecla"
 * AUTOR:    Pedro Reina
 * FECHA:    L.12.7.1993
 *------------------------------------------------------------------*/

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

#include "Tecla.h"

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

void P_Tec_Pulsada();
void P_Tec_Pertenece();
void P_Tec_Validada();
void P_Tec_Ultima();
void P_Tec_Disponible();
void P_Tec_ValidadaRapido();

/*--------------------------------------------------------------------
 * Programa principal
 *------------------------------------------------------------------*/
void main()
  {
  int Opcion, Sigue=1;

  Son_Enciende();

  while ( Sigue )
    {
    printf ( "\n\n" );
    printf ( "\nPrueba del objeto Tecla" );
    printf ( "\n=======================\n" );

    printf ( "\n0. Fin del programa" );
    printf ( "\n1. Tec_Pulsada(), Tec_Minus(), Tec_Mayus()" );
    printf ( "\n2. Tec_Pertenece()" );
    printf ( "\n3. Tec_Validada()" );
    printf ( "\n4. Tec_Ultima()" );
    printf ( "\n5. Tec_Disponible(), Tec_FijadoMayus()" );
    printf ( "\n6. Tec_ValidadaRapido()" );

    printf ( "\n\nIntroduce nmero de opcin: " );
    scanf ( "%d", &Opcion );
    getchar();

    switch ( Opcion )
      {
      case 0:   Sigue = 0;               break;
      case 1:   P_Tec_Pulsada();         break;
      case 2:   P_Tec_Pertenece();       break;
      case 3:   P_Tec_Validada();        break;
      case 4:   P_Tec_Ultima();          break;
      case 5:   P_Tec_Disponible();      break;
      case 6:   P_Tec_ValidadaRapido();  break;
      }
    }
  }

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

/*--------------------------------------------------------------------
 * Funcin P_Tec_Pulsada()
 *------------------------------------------------------------------*/
void P_Tec_Pulsada()
  {
  tecla Tecla;

  printf ( "\n\n" );
  printf ( "\nPrueba de Tec_Pulsada()" );
  printf ( "\n-----------------------\n" );

  printf ( "\nPulsa teclas; ESC para terminar\n\n" );
  while ( ( Tecla = Tec_Pulsada() ) != TEC_ESC )
    {
    printf ( "\rTecla -> %d; Mayus -> %d; Minus -> %d      ",
             Tecla, Tec_Mayus(Tecla), Tec_Minus(Tecla) );
    }

  printf ("\n\nPulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Tec_Pertenece()
 *------------------------------------------------------------------*/
void P_Tec_Pertenece()
  {
  tecla Tecla;
  static tecla Lista[] = { TEC_F1, TEC_A, TEC_MAY_B, TEC_ALT_C,
                           TEC_CTRL_D, NIL };

  printf ( "\n\n" );
  printf ( "\nPrueba de Tec_Pertenece()" );
  printf ( "\n-------------------------\n" );

  printf ( "\nLista de teclas: F1, a, B, ALT/C, CTRL/D" );
  printf ( "\nPulsa teclas; ESC para terminar\n\n" );
  while ( ( Tecla = Tec_Pulsada() ) != TEC_ESC )
    {
    if ( Tec_Pertenece (Tecla, Lista) ) { printf ( "\rS" ); }
    else                                { printf ( "\rNo" ); }
    }

  printf ("\n\nPulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Tec_Validada()
 *------------------------------------------------------------------*/
void P_Tec_Validada()
  {
  tecla Tecla;
  static tecla Lista[] = { TEC_F1, TEC_A, TEC_MAY_B, TEC_ALT_C,
                           TEC_CTRL_D, TEC_ESC, NIL };

  printf ( "\n\n" );
  printf ( "\nPrueba de Tec_Validada()" );
  printf ( "\n------------------------\n" );

  printf ( "\nLista de teclas: F1, a, B, ALT/C, CTRL/D" );
  printf ( "\nPulsa teclas; ESC para terminar\n\n" );
  while ( ( Tecla = Tec_Validada(Lista) ) != TEC_ESC )
    {
    switch ( Tecla )
      {
      case TEC_F1:       printf ( "\rF1      " );      break;
      case TEC_A:        printf ( "\ra       " );      break;
      case TEC_MAY_B:    printf ( "\rB       " );      break;
      case TEC_ALT_C:    printf ( "\rALT/C   " );      break;
      case TEC_CTRL_D:   printf ( "\rCTRL/D  " );      break;
      }
    }

  printf ("\n\nPulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Tec_Ultima()
 *------------------------------------------------------------------*/
void P_Tec_Ultima()
  {
  tecla Tecla;

  printf ( "\n\n" );
  printf ( "\nPrueba de Tec_Ultima()" );
  printf ( "\n----------------------\n" );

  printf ( "\nPulsa dos teclas\n\n" );
  Tec_Pulsada();
  Tec_Pulsada();
  printf ( "El cdigo de la ltima es: %d", Tec_Ultima() );

  printf ("\n\nPulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Tec_Disponible()
 *------------------------------------------------------------------*/
void P_Tec_Disponible()
  {
  tecla Tecla;

  printf ( "\n\n" );
  printf ( "\nPrueba de Tec_Disponible() y Tec_FijadoMayus()" );
  printf ( "\n----------------------------------------------\n" );

  printf ( "\nPulsa una tecla para terminar, FIJA-MAYUSCULAS cambia.\n\n" );
  while ( ! Tec_Disponible() )
    {
    if ( Tec_FijadoMayus() ) { printf ( "\rMAYUSCULA" ); }
    else                     { printf ( "\rminscula" ); }
    }

  printf ("\n\nPulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Tec_ValidadaRapido()
 *------------------------------------------------------------------*/
void P_Tec_ValidadaRapido()
  {
  tecla    Tecla;
  contador i, Sigue = 1;
  static char Molino[] = { '|', '/', '-', '\\' };
  static tecla Lista[] = { TEC_F1, TEC_A, TEC_MAY_B, TEC_ALT_C,
                           TEC_CTRL_D, TEC_ESC, NIL };

  printf ( "\n\n" );
  printf ( "\nPrueba de Tec_ValidadaRapido()" );
  printf ( "\n------------------------------\n" );

  printf ( "\nLista de teclas: F1, a, B, ALT/C, CTRL/D" );
  printf ( "\nPulsa teclas; ESC para terminar\n\n" );

  while ( Sigue )
    {
    if ( Tecla = Tec_ValidadaRapido (Lista)  )
      {
      switch ( Tecla )
        {
        case TEC_ESC:      Sigue = 0;                       break;
        case TEC_F1:       printf ( "\r    F1     " );      break;
        case TEC_A:        printf ( "\r    a      " );      break;
        case TEC_MAY_B:    printf ( "\r    B      " );      break;
        case TEC_ALT_C:    printf ( "\r    ALT/C  " );      break;
        case TEC_CTRL_D:   printf ( "\r    CTRL/D " );      break;
        }
      }
    else
      {
      printf ("\r%c", Molino[i]);
      i = i == 4 ? 0 : i+1;
      }
    }

  printf ("\n\nPulsa ENTER para seguir: ");
  getchar();
  }
