/*--------------------------------------------------------------------
 * FICHERO:  MenEjeHo.c
 * OBJETIVO: Definir la funcin privada Men_EjecutaHorizontal()
 * AUTOR:    Pedro Reina
 * FECHA:    L.7.8.1995
 *------------------------------------------------------------------*/

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

#include "Menu.h"

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

/*--------------------------------------------------------------------
 * FUNCION:  Men_EjecutaHorizontal()
 * OBJETIVO: Mostrar al usuario las opciones de un men de tipo horizontal,
 *           manejar las pulsaciones y devolver el nmero de opcin elegida
 * ENTRADAS: El men, la opcin que debe resaltarse al comenzar y el texto
 *           de la primera lnea de ayuda
 * SALIDAS:  El nmero de opcin o cero si no se elige ninguna
 * EJEMPLO:  Men_EjecutaHorizontal ( MenuPrincipal, 7 , "Elige la opcion" )
 *------------------------------------------------------------------*/
entero Men_EjecutaHorizontal (Menu, Opcion, Texto)
menu   Menu;
entero Opcion;
cadena Texto;
  {
  static tecla TeclaMover[] = { TEC_IZQUIERDA, TEC_DERECHA, NIL };
  octeto Estado;
  entero i;
  logico Decidido=NO, Visto;
  tecla *TeclaTrata;

  TeclaTrata = Men_AgregaAtajo (Menu, TeclaMover);
     
  Usr_Indica (Texto, "ENTER: acepta. ESC: anula. IZQUIERDA, DERECHA: mueve");
  Men_EscribeHorizontal (Menu, Opcion, SI);
  Pan_CursorVisible (NO);
  
  while ( !Decidido )
    {
    Estado = Men_Tecla (Menu, TeclaTrata);

    if ( Estado == MEN_SI )
      { 
      if ( Men_DiDisponible (Menu,Opcion) )
        { Decidido = SI; }
      else
        { Son_MalaTecla(); }
      }

    else if ( Estado == MEN_NO ) 
      { 
      Decidido = SI;
      Opcion = 0;
      }

    else 
      {
      Men_EscribeNormal (Menu, Opcion, Men_FilSup(Menu),
                         Men_Columna (Menu,Opcion),
                         Men_TextoVector (Menu,Opcion));

      switch ( Tec_Ultima() )
        {
        case TEC_IZQUIERDA:
          Opcion--;
          if ( Opcion == 0 )  { Opcion = Men_Total(Menu); }
          break;
        
        case TEC_DERECHA:
          Opcion++;
          if ( Opcion == Men_Total(Menu)+1 )  { Opcion = 1; }
          break;

        default:   /* La tecla es un atajo */
          Visto = NO;
          for ( i=0 ; !Visto ; i++ )
            {
            if ( Tec_Mayus((tecla)
                     ((Men_TextoVector(Menu,i)[Men_Lugar(Menu,i)])))
                 == Tec_Mayus(Tec_Ultima()) )
              { 
              Opcion = i; 
              Visto = SI; 
              }
            }
          if ( Men_DiDisponible (Menu,Opcion) )
            { Decidido = SI; }
          else
            { Son_MalaTecla(); }
          break;
          }
      Men_EscribeResaltado (Menu, Opcion, Men_FilSup(Menu),
                            Men_Columna (Menu,Opcion),
                            Men_TextoVector (Menu,Opcion));
      }  /* Fin Estado == MEN_TRATA */
    } /* Fin while (!Decidido) */
    
  Mem_Destruye (TeclaTrata);

  Usr_BorraZona (NEGRO);
    
  return ( Opcion );  
  }                          
