/*--------------------------------------------------------------------
 * FICHERO:  Vfch.c
 * OBJETIVO: Probar el objeto Fichero
 * AUTOR:    Pedro Reina
 * FECHA:    J.6.7.1995
 *------------------------------------------------------------------*/

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

#include "Fichero.h"

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

void P_Fch_Existe();
void P_Fch_Nombre();
void P_Fch_AbreGrabarT();
void P_Fch_AbreGrabarB();
void P_Fch_AbreActualizarB();
void P_Fch_AbreLeerT();
void P_Fch_AbreLeerB();
void P_Fch_Borra();
void P_Fch_LeeLinea();
void P_Fch_Coloca();
void P_Fch_ColocaFinal();
void P_Fch_Posicion();
void P_Fch_ListaNombre();

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

  Pan_Define (PAN_TEXTO);
  while ( Sigue )
    {
    Pan_Limpia();
    Pan_Color (NEGRO,BLANCO);
    Fil = 0, Col = 3;
    Pan_PonTexto (Fil++,Col,"Prueba del objeto Fichero" );
    Pan_PonTexto (Fil++,Col,"=========================" );
    Fil++;
    Pan_PonTexto (Fil++,Col,"0. Fin del programa" );
    Pan_PonTexto (Fil++,Col,"1. Paso a grfico" );
    Pan_PonTexto (Fil++,Col,"2. Paso a texto" );
    Pan_PonTexto (Fil++,Col,"3. Fch_Existe()" );
    Pan_PonTexto (Fil++,Col,"4. Fch_Nombre()" );
    Pan_PonTexto (Fil++,Col,"5. Fch_AbreGrabarT()" );
    Pan_PonTexto (Fil++,Col,"6. Fch_AbreGrabarB()" );
    Pan_PonTexto (Fil++,Col,"7. Fch_AbreLeerT()" );
    Pan_PonTexto (Fil++,Col,"8. Fch_AbreLeerB()" );
    Pan_PonTexto (Fil++,Col,"9. Fch_Borra()" );
    Col--;
    Pan_PonTexto (Fil++,Col,"10. Fch_LeeLinea()" );
    Pan_PonTexto (Fil++,Col,"11. Fch_Coloca()" );
    Pan_PonTexto (Fil++,Col,"12. Fch_AbreActualizarB()" );
    Pan_PonTexto (Fil++,Col,"13. Fch_ColocaFinal()" );
    Pan_PonTexto (Fil++,Col,"14. Fch_Posicion()" );
    Pan_PonTexto (Fil++,Col,"15. Fch_ListaNombre()" );
    Fil++;
    Pan_PonTexto (Fil++,Col,"Introduce nmero de opcin: " );
    scanf ( "%d", &Opcion );
    getchar();

    switch ( Opcion )
      {
      case 0:   Sigue = 0;               break;
      case 1:   Pan_Cierra();
                Pan_Define (PAN_GRAFICO);
                break;
      case 2:   Pan_Cierra();
                Pan_Define (PAN_TEXTO);
                break;
      case 3:   P_Fch_Existe();          break;
      case 4:   P_Fch_Nombre();          break;
      case 5:   P_Fch_AbreGrabarT();     break;
      case 6:   P_Fch_AbreGrabarB();     break;
      case 7:   P_Fch_AbreLeerT();       break;
      case 8:   P_Fch_AbreLeerB();       break;
      case 9:   P_Fch_Borra();           break;
      case 10:  P_Fch_LeeLinea();        break;
      case 11:  P_Fch_Coloca();          break;
      case 12:  P_Fch_AbreActualizarB(); break;
      case 13:  P_Fch_ColocaFinal();     break;
      case 14:  P_Fch_Posicion();        break;
      case 15:  P_Fch_ListaNombre();     break;
      }
    }
  Pan_Cierra();
  }

/*--------------------------------------------------------------------
 * Funcin P_Fch_Existe()
 *------------------------------------------------------------------*/
void P_Fch_Existe()
  {
  cadena Nombre;

  Pan_Color (NEGRO,BLANCO);
  Pan_Limpia();
  Pan_PonTexto (0,0,"Prueba de Fch_Existe()");

  Pan_PonTexto (2,0,"Nombre del fichero: ");
  Nombre = Usr_Texto ("",15,2,20,NEGRO,BLANCO);
  if ( Fch_Existe (Nombre) ) { Pan_PonTexto (4,0,"S existe"); }
  else                       { Pan_PonTexto (4,0,"No existe"); }
  Cad_Destruye (Nombre);

  Pan_PonTexto (21,0,"Pulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Fch_Nombre()
 *------------------------------------------------------------------*/
void P_Fch_Nombre()
  {
  cadena Nombre,Extension,Total,Mensaje;

  Pan_Color (NEGRO,BLANCO);
  Pan_Limpia();
  Pan_PonTexto (0,0,"Prueba de Fch_Nombre()");

  Nombre = "Fichero";
  Extension = "txt";
  Total = Fch_Nombre (Nombre,Extension);
  Mensaje = Cad_Une ("Nombre: \"",Nombre,"\", extensin: \"",
                     Extension,"\"; resultado: \"",Total,"\"",CAD_FIN);
  Pan_PonTexto (2,0,Mensaje);
  Cad_Destruye (Total);
  Cad_Destruye (Mensaje);

  Nombre = "OtroFichero";
  Extension = "";
  Total = Fch_Nombre (Nombre,Extension);
  Mensaje = Cad_Une ("Nombre: \"",Nombre,"\", extensin: \"",
                     Extension,"\"; resultado: \"",Total,"\"",CAD_FIN);
  Pan_PonTexto (4,0,Mensaje);
  Cad_Destruye (Total);
  Cad_Destruye (Mensaje);

  Pan_PonTexto (21,0,"Pulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Fch_AbreGrabarT()
 *------------------------------------------------------------------*/
void P_Fch_AbreGrabarT()
  {
  cadena  Nombre,Extension,Total;
  fichero F;

  Pan_Color (NEGRO,BLANCO);
  Pan_Limpia();
  Pan_PonTexto (0,0,"Prueba de Fch_AbreGrabar() texto");

  Nombre = "Vfch";
  Extension = "txt";
  Total = Fch_Nombre (Nombre,Extension);
  Pan_PonTexto (2,0,"Abriendo el fichero ");
  Pan_Texto (Total);

  if ( F = Fch_AbreGrabar (Total,FCH_TEXTO) )
    {
    Pan_PonTexto (4,0,"Escribo 3 lneas.");
    Fch_EscribeLinea (F,"Primera lnea");
    Fch_EscribeLinea (F,"Segunda...");
    Fch_EscribeLinea (F,"... y tercera");
    Fch_Cierra (F);
    }

  Cad_Destruye (Total);

  Pan_PonTexto (21,0,"Pulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Fch_AbreGrabarB()
 *------------------------------------------------------------------*/
void P_Fch_AbreGrabarB()
  {
  char     Aux[15];
  cadena   Nombre,Extension,Total;
  fichero  F;
  contador i;

  Pan_Color (NEGRO,BLANCO);
  Pan_Limpia();
  Pan_PonTexto (0,0,"Prueba de Fch_AbreGrabar() binario");

  for ( i=0 ; i<15 ; i++ ) { Aux[i] = (char)i; }

  Nombre = "Vfch";
  Extension = "bin";
  Total = Fch_Nombre (Nombre,Extension);
  Pan_PonTexto (2,0,"Abriendo el fichero ");
  Pan_Texto (Total);

  if ( F = Fch_AbreGrabar (Total,FCH_BINARIO) )
    {
    Pan_PonTexto (4,0,"Escribo 15 octetos.");
    Fch_EscribeOcteto (F,Aux,15);
    Fch_Cierra (F);
    }

  Cad_Destruye (Total);

  Pan_PonTexto (21,0,"Pulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Fch_AbreLeerT()
 *------------------------------------------------------------------*/
void P_Fch_AbreLeerT()
  {
  cadena  Nombre,Extension,Total,Aux;
  fichero F;

  Pan_Color (NEGRO,BLANCO);
  Pan_Limpia();
  Pan_PonTexto (0,0,"Prueba de Fch_AbreLeer() texto");

  Nombre = "Vfch";
  Extension = "txt";
  Total = Fch_Nombre (Nombre,Extension);
  Pan_PonTexto (2,0,"Abriendo el fichero ");
  Pan_Texto (Total);

  if ( F = Fch_AbreLeer (Total,FCH_TEXTO) )
    {
    Pan_PonTexto (4,0,"Leo 2 lneas:");
    Aux = Fch_LeeLinea (F);
    Pan_PonTexto (6,0,Aux);
    Cad_Destruye (Aux);
    Aux = Fch_LeeLinea (F);
    Pan_PonTexto (7,0,Aux);
    Cad_Destruye (Aux);
    Fch_Cierra (F);
    }

  Cad_Destruye (Total);

  Pan_PonTexto (21,0,"Pulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Fch_AbreLeerB()
 *------------------------------------------------------------------*/
void P_Fch_AbreLeerB()
  {
  octeto   Aux[20];
  cadena   Nombre,Extension,Total;
  fichero  F;
  contador i;

  Pan_Color (NEGRO,BLANCO);
  Pan_Limpia();
  Pan_PonTexto (0,0,"Prueba de Fch_AbreLeer() binario");

  Nombre = "Vfch";
  Extension = "bin";
  Total = Fch_Nombre (Nombre,Extension);
  Pan_PonTexto (2,0,"Abriendo el fichero ");
  Pan_Texto (Total);

  if ( F = Fch_AbreLeer (Total,FCH_BINARIO) )
    {
    Pan_PonTexto (4,0,"Leo 15 octetos:");
    Fch_LeeOcteto (F,Aux,15);
    Pan_Cursor (6,0);
    for ( i=0 ; i<15 ; i++ ) { Pan_Entero (Aux[i],3); }
    Fch_Cierra (F);
    }

  Pan_PonTexto (21,0,"Pulsa ENTER para seguir: ");
  getchar();

  Pan_Borra (NEGRO,18,0,21,79);

  if ( F = Fch_AbreLeer (Total,FCH_BINARIO) )
    {
    Pan_PonTexto (8,0,"Leo 20 octetos:");
    if ( Fch_LeeOcteto (F,Aux,20) )
      {
      Pan_Cursor (10,0);
      for ( i=0 ; i<20 ; i++ ) { Pan_Entero (Aux[i],3); }
      }
    else
      { Pan_PonTexto (10,0,"No se ha podido realizar la lectura."); }
    Fch_Cierra (F);
    }

  Cad_Destruye (Total);

  Pan_PonTexto (21,0,"Pulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Fch_Borra()
 *------------------------------------------------------------------*/
void P_Fch_Borra()
  {
  cadena Nombre;

  Pan_Color (NEGRO,BLANCO);
  Pan_Limpia();
  Pan_PonTexto (0,0,"Prueba de Fch_Borra()");

  Pan_PonTexto (2,0,"Nombre del fichero: ");
  Nombre = Usr_Texto ("",15,2,20,NEGRO,BLANCO);
  Fch_Borra (Nombre);
  Cad_Destruye (Nombre);

  Pan_PonTexto (21,0,"Pulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Fch_LeeLinea()
 *------------------------------------------------------------------*/
void P_Fch_LeeLinea()
  {
  cadena   Nombre,Extension,Total,Aux;
  fichero  F;
  contador TotLin;

  Pan_Color (NEGRO,BLANCO);
  Pan_Limpia();
  Pan_PonTexto (0,0,"Prueba de Fch_LeeLinea()");

  Nombre = "Vfch";
  Extension = "txt";
  Total = Fch_Nombre (Nombre,Extension);
  Pan_PonTexto (2,0,"Abriendo el fichero ");
  Pan_Texto (Total);

  if ( F = Fch_AbreLeer (Total,FCH_TEXTO) )
    {
    Pan_PonTexto (4,0,"Miro cuntas lneas tiene: ");
    TotLin = 0;
    while ( Aux = Fch_LeeLinea (F) )
      {
      TotLin++;
      Cad_Destruye (Aux);
      }
    Pan_Entero (TotLin,3);
    Fch_Cierra (F);
    }

  Cad_Destruye (Total);

  Pan_PonTexto (21,0,"Pulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Fch_Coloca()
 *------------------------------------------------------------------*/
void P_Fch_Coloca()
  {
  char     Aux[1];
  cadena   Nombre,Extension,Total;
  fichero  F;

  Pan_Color (NEGRO,BLANCO);
  Pan_Limpia();
  Pan_PonTexto (0,0,"Prueba de Fch_Coloca()");

  Nombre = "Vfch";
  Extension = "bin";
  Total = Fch_Nombre (Nombre,Extension);
  Pan_PonTexto (2,0,"Abriendo el fichero ");
  Pan_Texto (Total);

  if ( F = Fch_AbreLeer (Total,FCH_BINARIO) )
    {
    Pan_PonTexto (4,0,"Leo el octeto 10, el 3, el 7 y el 0:");
    Pan_Cursor (6,0);
    Fch_Coloca (F,10); Fch_LeeOcteto(F,Aux,1); Pan_Entero (Aux[0],3);
    Fch_Coloca (F, 3); Fch_LeeOcteto(F,Aux,1); Pan_Entero (Aux[0],3);
    Fch_Coloca (F, 7); Fch_LeeOcteto(F,Aux,1); Pan_Entero (Aux[0],3);
    Fch_Coloca (F, 0); Fch_LeeOcteto(F,Aux,1); Pan_Entero (Aux[0],3);
    Fch_Cierra (F);
    }

  Cad_Destruye (Total);

  Pan_PonTexto (21,0,"Pulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Fch_AbreActualizarB()
 *------------------------------------------------------------------*/
void P_Fch_AbreActualizarB()
  {
  char     Aux[10];
  cadena   Nombre,Extension,Total;
  fichero  F;
  contador i;

  Pan_Color (NEGRO,BLANCO);
  Pan_Limpia();
  Pan_PonTexto (0,0,"Prueba de Fch_AbreActualizar() binario");

  for ( i=0 ; i<10 ; i++ ) { Aux[i] = (char)(10-i); }

  Nombre = "Vfch";
  Extension = "bin";
  Total = Fch_Nombre (Nombre,Extension);
  Pan_PonTexto (2,0,"Abriendo el fichero ");
  Pan_Texto (Total);

  if ( F = Fch_AbreActualizar (Total,FCH_BINARIO) )
    {
    Pan_PonTexto (4,0,"Escribo 10 octetos.");
    Fch_EscribeOcteto (F,Aux,10);
    Fch_Cierra (F);
    }

  Cad_Destruye (Total);

  Pan_PonTexto (21,0,"Pulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Fch_ColocaFinal()
 *------------------------------------------------------------------*/
void P_Fch_ColocaFinal()
  {
  char     Aux[20] = {21,21,21,21,21};
  cadena   Nombre,Extension,Total;
  contador i;
  fichero  F;

  Pan_Color (NEGRO,BLANCO);
  Pan_Limpia();
  Pan_PonTexto (0,0,"Prueba de Fch_ColocaFinal()");

  Nombre = "Vfch";
  Extension = "bin";
  Total = Fch_Nombre (Nombre,Extension);
  Pan_PonTexto (2,0,"Abriendo el fichero ");
  Pan_Texto (Total);

  if ( F = Fch_AbreActualizar (Total,FCH_BINARIO) )
    {
    Pan_PonTexto (4,0,"Aado 5 octetos");
    Fch_ColocaFinal (F);
    Fch_EscribeOcteto (F,Aux,5);
    Fch_Cierra (F);
    Pan_PonTexto (6,0,"Cierro, abro y leo 20 octetos");
    if ( F = Fch_AbreLeer (Total,FCH_BINARIO) )
      {
      if ( Fch_LeeOcteto(F,Aux,20) )
        {
        Pan_Cursor (8,0);
        for ( i=0 ; i<20 ; i++ ) { Pan_Entero (Aux[i],3); }
        }
      Fch_Cierra (F);
      }
    }

  Cad_Destruye (Total);

  Pan_PonTexto (21,0,"Pulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Fch_Posicion()
 *------------------------------------------------------------------*/
void P_Fch_Posicion()
  {
  cadena   Nombre,Extension,Total;
  fichero  F;

  Pan_Color (NEGRO,BLANCO);
  Pan_Limpia();
  Pan_PonTexto (0,0,"Prueba de Fch_Posicion()");

  Nombre = "Vfch";
  Extension = "bin";
  Total = Fch_Nombre (Nombre,Extension);
  Pan_PonTexto (2,0,"Abriendo el fichero ");
  Pan_Texto (Total);

  if ( F = Fch_AbreLeer (Total,FCH_BINARIO) )
    {
    Pan_PonTexto (4,0,"Me voy al final");
    Fch_ColocaFinal (F);
    Pan_PonTexto (6,0,"Posicin: ");
    Pan_Entero (Fch_Posicion(F),1);
    Fch_Cierra (F);
    }

  Cad_Destruye (Total);

  Pan_PonTexto (21,0,"Pulsa ENTER para seguir: ");
  getchar();
  }

/*--------------------------------------------------------------------
 * Funcin P_Fch_ListaNombre()
 *------------------------------------------------------------------*/
void P_Fch_ListaNombre()
  {
  lista    Directorio, L;
  cadena   Mascara;
  contador i;

  Pan_Color (NEGRO,BLANCO);
  Pan_Limpia();
  Pan_PonTexto (0,0,"Prueba de Fch_ListaNombre()");

  Pan_PonTexto (2,0,"Escribe la mscara: ");
  Mascara = Usr_Texto ("",20,3,0,NEGRO,BLANCO);

  if ( Directorio = Fch_ListaNombre (Mascara) )
    {
    for ( i=0 , L=Directorio ; L ; i++ , L=Lis_Siguiente(L) )
      {
      Pan_PonTexto (i,30,Lis_Contenido(L));
      if ( i==20 )
        {
        Usr_PulsaUnaTecla ("Hay ms ficheros");
        Pan_Color (NEGRO,BLANCO);
        Pan_Borra (NEGRO,0,30,20,79);
        i=-1;
        }
      }
    }
  else
    { Pan_PonTexto (3,0,"Ningn fichero"); }

  Cad_Destruye (Mascara);

  Pan_PonTexto (21,0,"Pulsa ENTER para seguir: ");
  getchar();
  }