/*--------------------------------------------------------------------
 * FICHERO:  UsrEnter.c
 * OBJETIVO: Definir la fucin Usr_Entero()
 * AUTOR:    Pedro Reina
 * FECHA:    V.14.7.1995
 *------------------------------------------------------------------*/

#include "Usuario.h"

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

/*--------------------------------------------------------------Olimpo
 * FUNCION:  Usr_Entero()
 * OBJETIVO: Devolver un nmero determinado por el usuario 
 *           despus de editar el que se le ofrece
 * ENTRADAS: El nmero que hay que editar, el ancho asignado, 
 *           los valores mnimo y mximo admitidos, las 
 *           coordenadas donde se edita y los colores
 * SALIDAS:  El entero editado
 * EJEMPLO:  Usr_Entero (100,4,-900,2000,1,1,BLANCO,NEGRO)
 * ALGORITMO:
 *     Decir al usuario lo que puede hacer
 *     Asignar colores
 *     Repetir mientras el usuario no se decida
 *       Escribir el nmero
 *       Pedir una tecla
 *       Si es ENTER, terminar
 *       Si es ESC, tomar el nmero original y terminar
 *       Si es ARRIBA, sumar 1
 *       Si es ABAJO, restar 1
 *       Si es DERECHA, sumar 10
 *       Si es IZQUIERDA, restar 10
 *       Si es INICIO, hacerlo Mnimo
 *       Si es FIN, hacerlo Mximo
 *       Si el nmero sale de lmites, corregirlo
 *     Devolver el nmero elegido
 *------------------------------------------------------------------*/
contador Usr_Entero (Numero,Ancho,Minimo,Maximo,Fil,Col,Papel,Tinta)
contador Numero, Ancho, Minimo, Maximo, Fil, Col;
octeto   Papel, Tinta;
  {
  static tecla ListaTecla[] = { TEC_ENTER, TEC_ESC, TEC_IZQUIERDA,
                                TEC_DERECHA,TEC_ARRIBA, TEC_ABAJO,
                                TEC_INICIO, TEC_FIN, TEC_F4, NIL};
  contador Respuesta;
  logico   Decidido;
  cadena   L1, L2;
  tecla    Tecla;

  L1 = "ARRIBA: +1. ABAJO: -1. DERECHA: +10. IZQUIERDA: -10. F4: original";
  L2 = "ENTER: acepta. ESC: anula. INICIO: menor. FIN: mayor";
  Usr_Indica (L1,L2);
  Pan_Color (Papel,Tinta);

  Respuesta = Numero;
  Decidido = NO;
  while ( !Decidido )
    {
    Pan_Cursor (Fil,Col);
    Pan_CursorVisible (NO);
    Pan_Entero (Respuesta,Ancho);
    Tecla = Tec_Validada (ListaTecla);
    switch ( Tecla )
      {
      case TEC_ENTER :      Decidido = SI;                       break;
      case TEC_ESC :        Decidido = SI; Respuesta = Numero;   break;
      case TEC_IZQUIERDA :  Respuesta -= 10;                     break;
      case TEC_DERECHA :    Respuesta += 10;                     break;
      case TEC_ARRIBA :     Respuesta++;                         break;
      case TEC_ABAJO :      Respuesta--;                         break;
      case TEC_INICIO :     Respuesta = Minimo;                  break;
      case TEC_FIN :        Respuesta = Maximo;                  break;
      case TEC_F4 :         Respuesta = Numero;                  break;
      }
    if ( Respuesta > Maximo ) { Respuesta = Maximo; }
    if ( Respuesta < Minimo ) { Respuesta = Minimo; }
    }

  Usr_BorraZona (NEGRO);
  return ( Respuesta );
  }