First commit 20/09/1997
This commit is contained in:
		
							
								
								
									
										243
									
								
								BONITRON.CPP
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										243
									
								
								BONITRON.CPP
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,243 @@
 | 
			
		||||
 /************************************************************************\
 | 
			
		||||
|*                                                                        *|
 | 
			
		||||
|* Programa para poner bonito el c<>digo fuente de los otros programas...  *|
 | 
			
		||||
|*                                                                        *|
 | 
			
		||||
|* Jos<6F> David Guill<6C>n                                                     *|
 | 
			
		||||
|*                                                                        *|
 | 
			
		||||
|* Historia                                                               *|
 | 
			
		||||
|*          Hay veces que empiezo a escribir un programa que creo que no  *|
 | 
			
		||||
|*          me va a servir para nada y cuando me doy cuenta lo estoy re-  *|
 | 
			
		||||
|*          escribiendo o adaptandolo, pero es un Spagetti-Code tan       *|
 | 
			
		||||
|*          grande que pierdo un buen rato sangrandolo. Bien, pues se     *|
 | 
			
		||||
|*          acabo el 'frotar' ya tengo 'bonitron'....                     *|
 | 
			
		||||
|*                                                                        *|
 | 
			
		||||
 \************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
// los corchetes son '{' y  '}'
 | 
			
		||||
#define DESPLAZAMIENTO_CORCHETE         2
 | 
			
		||||
// Considero etiquetas a los 'case' de switch();
 | 
			
		||||
#define DESPLAZAMIENTO_ETIQUETA        12
 | 
			
		||||
 | 
			
		||||
// Mayor longitud de palabra compleja
 | 
			
		||||
#define PALABRA_MAXIMA                 14
 | 
			
		||||
 | 
			
		||||
void main( int argc, char *argv[] )
 | 
			
		||||
{
 | 
			
		||||
 FILE *ORIGEN, *DESTINO;
 | 
			
		||||
 int i;
 | 
			
		||||
 int charR, OcharR;
 | 
			
		||||
 int NivelActual, NivelEtiqueta;
 | 
			
		||||
 char DetectadoEOL,
 | 
			
		||||
      DetectadoComm;
 | 
			
		||||
 char BufferPalabra[PALABRA_MAXIMA + 1];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 if ( argc != 3 )
 | 
			
		||||
 {
 | 
			
		||||
  printf( "\nError, n<> de parametros erroneo\n" );
 | 
			
		||||
  return;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 if ( ( ORIGEN  = fopen( argv[1], "rt" ) ) == NULL ||
 | 
			
		||||
      ( DESTINO = fopen( argv[2], "wt" ) ) == NULL   )
 | 
			
		||||
 {
 | 
			
		||||
  printf( "\nError abriendo el origen o destino\n" );
 | 
			
		||||
  return;
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 NivelEtiqueta = 0;
 | 
			
		||||
 NivelActual   = 0;
 | 
			
		||||
 DetectadoEOL  = 0;
 | 
			
		||||
 DetectadoComm = 0;
 | 
			
		||||
 BufferPalabra[0] = '\0';
 | 
			
		||||
 | 
			
		||||
 charR = 0;
 | 
			
		||||
 while ( !feof(ORIGEN) )
 | 
			
		||||
 {
 | 
			
		||||
  OcharR = charR;
 | 
			
		||||
  charR  = fgetc(ORIGEN);
 | 
			
		||||
 | 
			
		||||
  switch( charR )
 | 
			
		||||
  {
 | 
			
		||||
   // Cuidadin con esto
 | 
			
		||||
   case '\n':
 | 
			
		||||
   case '\r':
 | 
			
		||||
             BufferPalabra[0] = '\0';
 | 
			
		||||
 | 
			
		||||
             DetectadoComm = 0;
 | 
			
		||||
 | 
			
		||||
             DetectadoEOL = 1;
 | 
			
		||||
 | 
			
		||||
             fputc( charR, DESTINO );
 | 
			
		||||
             break;
 | 
			
		||||
   case  '=':
 | 
			
		||||
   case  '<':
 | 
			
		||||
   case  '>':
 | 
			
		||||
   case  '!':
 | 
			
		||||
   case  '+':
 | 
			
		||||
   case  '-':
 | 
			
		||||
   case  '/':
 | 
			
		||||
   case  '*':
 | 
			
		||||
   case  '^':
 | 
			
		||||
   case  ']':
 | 
			
		||||
   case  ')':
 | 
			
		||||
   case  '[':
 | 
			
		||||
   case  '(':
 | 
			
		||||
   case  '"':
 | 
			
		||||
             // Si antes no hab<61>a un espacio, ni un caracter de los anteriores
 | 
			
		||||
             // me parece mas est<73>tico un espacio antes.
 | 
			
		||||
             if ( OcharR != ' ' &&
 | 
			
		||||
                  OcharR != '=' && OcharR != '*' &&
 | 
			
		||||
                  OcharR != '<' && OcharR != '^' &&
 | 
			
		||||
                  OcharR != '>' && OcharR != '[' &&
 | 
			
		||||
                  OcharR != ']' && OcharR != '(' &&
 | 
			
		||||
                  OcharR != '!' && OcharR != ')' &&
 | 
			
		||||
                  OcharR != '+' && OcharR != '-' &&
 | 
			
		||||
                  OcharR != '/'                     )
 | 
			
		||||
             {
 | 
			
		||||
               fputc( ' ', DESTINO );
 | 
			
		||||
             }
 | 
			
		||||
             fputc( charR, DESTINO );
 | 
			
		||||
             DetectadoEOL = 0;
 | 
			
		||||
             break;
 | 
			
		||||
   // Veamos las etiquetas
 | 
			
		||||
   case  ':':
 | 
			
		||||
             if ( !DetectadoComm )
 | 
			
		||||
             {
 | 
			
		||||
              if ( !DetectadoEOL )
 | 
			
		||||
                fputc( 13, DESTINO );
 | 
			
		||||
              NivelActual   += DESPLAZAMIENTO_ETIQUETA;
 | 
			
		||||
              NivelEtiqueta += DESPLAZAMIENTO_ETIQUETA;
 | 
			
		||||
              fputc( ':', DESTINO );
 | 
			
		||||
             }
 | 
			
		||||
             DetectadoEOL = 0;
 | 
			
		||||
             break;
 | 
			
		||||
   // Corchetes de entrada
 | 
			
		||||
   case '{':
 | 
			
		||||
            if ( !DetectadoComm )
 | 
			
		||||
            {
 | 
			
		||||
             if ( !DetectadoEOL )
 | 
			
		||||
               fputc( 13, DESTINO );
 | 
			
		||||
             for ( i = 0; i < NivelActual; i++ )
 | 
			
		||||
               fputc( ' ', DESTINO );
 | 
			
		||||
             fputc( '{', DESTINO );
 | 
			
		||||
             NivelActual+=DESPLAZAMIENTO_CORCHETE;
 | 
			
		||||
            }
 | 
			
		||||
            DetectadoEOL = 0;
 | 
			
		||||
            break;
 | 
			
		||||
   // Corchetes de Salida
 | 
			
		||||
   case '}':
 | 
			
		||||
            if ( !DetectadoComm )
 | 
			
		||||
            {
 | 
			
		||||
             if ( !DetectadoEOL )
 | 
			
		||||
               fputc( 13, DESTINO );
 | 
			
		||||
             NivelActual-=DESPLAZAMIENTO_CORCHETE;
 | 
			
		||||
             for ( i = 0; i < NivelActual; i++ )
 | 
			
		||||
               fputc( ' ', DESTINO );
 | 
			
		||||
             fputc( '}', DESTINO );
 | 
			
		||||
            }
 | 
			
		||||
            DetectadoEOL = 0;
 | 
			
		||||
            break;
 | 
			
		||||
   case ';':
 | 
			
		||||
            if ( OcharR == '}' )
 | 
			
		||||
             fputc( ' ', DESTINO );
 | 
			
		||||
            fputc( ';', DESTINO );
 | 
			
		||||
            DetectadoEOL = 0;
 | 
			
		||||
            break;
 | 
			
		||||
   // Salvamos el EOL, para los corchetes
 | 
			
		||||
   case ' ':
 | 
			
		||||
            // Nos saltamos todos los espacios blancos
 | 
			
		||||
           if ( !DetectadoEOL )
 | 
			
		||||
            fputc( charR, DESTINO );
 | 
			
		||||
           BufferPalabra[0] = '\0';
 | 
			
		||||
           break;
 | 
			
		||||
 | 
			
		||||
   // No sabemos procesar el simbolo
 | 
			
		||||
   default:
 | 
			
		||||
           if ( NivelActual < 0 )
 | 
			
		||||
            NivelActual = 0;
 | 
			
		||||
           PROCESA_CARACTER_POR_DEFECTO:
 | 
			
		||||
           if ( DetectadoEOL )
 | 
			
		||||
             for ( i = 0; i < NivelActual/*+DESPLAZAMIENTO_CORCHETE*/; i++ )
 | 
			
		||||
               fputc( ' ', DESTINO );
 | 
			
		||||
           DetectadoEOL = 0;
 | 
			
		||||
 | 
			
		||||
           switch ( OcharR )
 | 
			
		||||
           {
 | 
			
		||||
             case  '=':
 | 
			
		||||
             case  '<':
 | 
			
		||||
             case  '>':
 | 
			
		||||
             case  '!':
 | 
			
		||||
             case  '+':
 | 
			
		||||
             case  '-':
 | 
			
		||||
             case  '/':
 | 
			
		||||
             case  '*':
 | 
			
		||||
             case  '^':
 | 
			
		||||
             case  ']':
 | 
			
		||||
             case  '[':
 | 
			
		||||
             case  '(':
 | 
			
		||||
             case  ')':
 | 
			
		||||
                 // Si el carater actual no es ninguno de estos, ni un espacio
 | 
			
		||||
                 // quedaria muy bien un espacio detras de aqui...
 | 
			
		||||
             if ( charR != ' ' &&
 | 
			
		||||
                  charR != '=' && charR != '*' &&
 | 
			
		||||
                  charR != '<' && charR != '^' &&
 | 
			
		||||
                  charR != '>' && charR != '[' &&
 | 
			
		||||
                  charR != ']' && charR != '(' &&
 | 
			
		||||
                  charR != '!' && charR != ')' &&
 | 
			
		||||
                  charR != '+' && charR != '-' &&
 | 
			
		||||
                  charR != '/'                     )
 | 
			
		||||
             {
 | 
			
		||||
               fputc( ' ', DESTINO );
 | 
			
		||||
             }
 | 
			
		||||
             fputc( charR, DESTINO );
 | 
			
		||||
             break;
 | 
			
		||||
            default:
 | 
			
		||||
              fputc( charR, DESTINO );
 | 
			
		||||
           }
 | 
			
		||||
 | 
			
		||||
           // Procesado de palabras complejas
 | 
			
		||||
           i = strlen(BufferPalabra);
 | 
			
		||||
           BufferPalabra[ i ] = (char)charR;
 | 
			
		||||
           BufferPalabra[ i+1] = '\0';
 | 
			
		||||
 | 
			
		||||
           // Detectado 'break'
 | 
			
		||||
           if ( strcmp( BufferPalabra, "break;" ) == 0 )
 | 
			
		||||
           {
 | 
			
		||||
            NivelEtiqueta -= DESPLAZAMIENTO_ETIQUETA;
 | 
			
		||||
            if ( NivelEtiqueta >= 0 )
 | 
			
		||||
              NivelActual   -= DESPLAZAMIENTO_ETIQUETA;
 | 
			
		||||
            fputc( 13, DESTINO );
 | 
			
		||||
 | 
			
		||||
            BufferPalabra[0] = '\0';
 | 
			
		||||
           }
 | 
			
		||||
 | 
			
		||||
           if ( strcmp( BufferPalabra, "//" ) == 0 )
 | 
			
		||||
           {
 | 
			
		||||
            BufferPalabra[0] = '\0';
 | 
			
		||||
            DetectadoComm    = 0;
 | 
			
		||||
           }
 | 
			
		||||
 | 
			
		||||
           if ( strlen( BufferPalabra ) == PALABRA_MAXIMA )
 | 
			
		||||
             BufferPalabra[0] = '\0';
 | 
			
		||||
 | 
			
		||||
           break;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 fclose( ORIGEN  );
 | 
			
		||||
 fclose( DESTINO );
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								BONITRON.EXE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								BONITRON.EXE
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										978
									
								
								INDEXM.CPP
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										978
									
								
								INDEXM.CPP
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,978 @@
 | 
			
		||||
 /**************************************************************************\
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|* Indexador de Medios 1.0d                                                 *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
 \**************************************************************************/
 | 
			
		||||
 | 
			
		||||
#include <dir.h>
 | 
			
		||||
#include <conio.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <dos.h>
 | 
			
		||||
 | 
			
		||||
#define NUM_LINEAS  20
 | 
			
		||||
 | 
			
		||||
char Buffer[80];
 | 
			
		||||
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
 char FA[1024];
 | 
			
		||||
 long NumArchivos;
 | 
			
		||||
 int  NumDirectorios;
 | 
			
		||||
} CABECERA_IM;
 | 
			
		||||
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
// unsigned char Nivel;           // Nivel actual en el que me encuentro
 | 
			
		||||
 char ff_attrib;       /* attribute found */
 | 
			
		||||
 int  ff_ftime;        /* file time */
 | 
			
		||||
 int  ff_fdate;        /* file date */
 | 
			
		||||
 long ff_fsize;        /* file size */
 | 
			
		||||
 char ff_name[13];     /* found file name */
 | 
			
		||||
 char nivel;
 | 
			
		||||
} MINDEX;
 | 
			
		||||
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
 char Nivel;
 | 
			
		||||
 long PosDirectorio;
 | 
			
		||||
 char ContraidoExpandido;
 | 
			
		||||
} MDIREC;
 | 
			
		||||
 | 
			
		||||
//MINDEX *MIndex;
 | 
			
		||||
 | 
			
		||||
void formatea_u_long( unsigned long Numero, char *Inter_Chg);
 | 
			
		||||
void GuardaMedio( char *DesdeDonde, unsigned char Nivel );
 | 
			
		||||
int ConstruyeIndice( char *DesdeDonde, char *NArchivo );
 | 
			
		||||
void Que_Color(void);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
MINDEX MI;
 | 
			
		||||
MDIREC MD, far *Directorios;
 | 
			
		||||
CABECERA_IM CabIM;
 | 
			
		||||
 | 
			
		||||
FILE * HF, * HD;
 | 
			
		||||
 | 
			
		||||
void GuardaMedio( char *TiposArchivos, unsigned char Nivel )
 | 
			
		||||
{
 | 
			
		||||
 struct ffblk ffblk;
 | 
			
		||||
 int done;
 | 
			
		||||
 | 
			
		||||
 // Guardamos toda la informaci<63>n desde el directorio Actual.
 | 
			
		||||
 done = findfirst(TiposArchivos,&ffblk, FA_RDONLY | FA_HIDDEN | FA_SYSTEM | FA_DIREC | FA_ARCH );
 | 
			
		||||
 while (!done)
 | 
			
		||||
 {
 | 
			
		||||
   MI.ff_attrib= ffblk.ff_attrib;
 | 
			
		||||
   MI.ff_ftime = ffblk.ff_ftime;
 | 
			
		||||
   MI.ff_fdate = ffblk.ff_fdate;
 | 
			
		||||
   MI.ff_fsize = ffblk.ff_fsize;
 | 
			
		||||
   sprintf( MI.ff_name, "%s", ffblk.ff_name   );
 | 
			
		||||
      MI.nivel = Nivel;
 | 
			
		||||
//////////////////////////////////////////////////////////////////////////
 | 
			
		||||
gotoxy( Nivel+1, wherey() );
 | 
			
		||||
cprintf( "%s [%d]\r\n", ffblk.ff_name, Nivel );
 | 
			
		||||
//////////////////////////////////////////////////////////////////////////
 | 
			
		||||
   CabIM.NumArchivos++;
 | 
			
		||||
   fwrite( &MI, sizeof(MINDEX), 1, HF );
 | 
			
		||||
 | 
			
		||||
   if ( (ffblk.ff_attrib&FA_DIREC) && MI.ff_name[0] != '.' )
 | 
			
		||||
    {
 | 
			
		||||
     MD.PosDirectorio = CabIM.NumArchivos;
 | 
			
		||||
     MD.Nivel = Nivel;
 | 
			
		||||
     CabIM.NumDirectorios++;
 | 
			
		||||
     fwrite( &MD, sizeof(MD), 1, HD );
 | 
			
		||||
     if ( !chdir( ffblk.ff_name ) )
 | 
			
		||||
     {
 | 
			
		||||
      GuardaMedio( TiposArchivos, Nivel+1 );
 | 
			
		||||
      chdir( ".." );
 | 
			
		||||
     }
 | 
			
		||||
    }
 | 
			
		||||
   done = findnext(&ffblk);
 | 
			
		||||
 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char PathActual[512];
 | 
			
		||||
 | 
			
		||||
int ConstruyeIndice( char *DesdeDonde, char *NArchivo )
 | 
			
		||||
{
 | 
			
		||||
 FILE *HF1, *HF2, *HFf;
 | 
			
		||||
 struct ffblk ffblk;
 | 
			
		||||
 long i;
 | 
			
		||||
 char buffer[80];
 | 
			
		||||
 | 
			
		||||
 int  CurrDisk;
 | 
			
		||||
 | 
			
		||||
 // Creamos dos ficheros temporales...
 | 
			
		||||
 if ( (HF1 = fopen( "files.tmp", "wb" )) == NULL )
 | 
			
		||||
  return -1;
 | 
			
		||||
 if ( (HF2 = fopen( "direc.tmp", "wb" )) == NULL )
 | 
			
		||||
  return -1;
 | 
			
		||||
 | 
			
		||||
 CurrDisk = getdisk();
 | 
			
		||||
 getcurdir( 0, PathActual );
 | 
			
		||||
 | 
			
		||||
 // Recorremos todo el "medio" guardando una especie de copia de la FAT.
 | 
			
		||||
 setdisk( ( DesdeDonde[0] - 'A' ) );
 | 
			
		||||
 chdir(DesdeDonde);
 | 
			
		||||
 CabIM.NumDirectorios= 0;
 | 
			
		||||
 CabIM.NumArchivos   = 0;
 | 
			
		||||
 | 
			
		||||
 sprintf( buffer, "%c:\\*.*", DesdeDonde[0] );
 | 
			
		||||
 | 
			
		||||
 findfirst(buffer,&ffblk, FA_LABEL );
 | 
			
		||||
 sprintf( MI.ff_name, "%s", ffblk.ff_name );
 | 
			
		||||
 MI.ff_name[8] = ffblk.ff_name[9];
 | 
			
		||||
 MI.ff_name[9] = ffblk.ff_name[10];
 | 
			
		||||
 MI.ff_name[10] = ffblk.ff_name[11];
 | 
			
		||||
 MI.ff_name[11] = '\0';
 | 
			
		||||
 | 
			
		||||
 MI.ff_attrib= ffblk.ff_attrib;
 | 
			
		||||
 MI.ff_ftime = ffblk.ff_attrib;
 | 
			
		||||
 | 
			
		||||
 MI.nivel = 0;
 | 
			
		||||
 | 
			
		||||
     MD.PosDirectorio = 0;
 | 
			
		||||
     MD.Nivel = 0;
 | 
			
		||||
     MD.ContraidoExpandido = 1;
 | 
			
		||||
     fwrite( &MD, sizeof(MD), 1, HF2 );
 | 
			
		||||
     fwrite( &MI, sizeof(MI), 1, HF1 );
 | 
			
		||||
 | 
			
		||||
 MD.ContraidoExpandido = 0;
 | 
			
		||||
 HF = HF1; HD = HF2;
 | 
			
		||||
 GuardaMedio( "*.*", 1 );
 | 
			
		||||
 | 
			
		||||
 CabIM.NumDirectorios ++;
 | 
			
		||||
 MD.PosDirectorio = -1;
 | 
			
		||||
 MD.Nivel = 0;
 | 
			
		||||
 MD.ContraidoExpandido = 0;
 | 
			
		||||
 | 
			
		||||
 fwrite( &MD, sizeof(MD), 1, HF2 );
 | 
			
		||||
 | 
			
		||||
 CabIM.NumArchivos++;
 | 
			
		||||
 MI.ff_name[8] = ffblk.ff_name[9];
 | 
			
		||||
 MI.ff_name[9] = ffblk.ff_name[10];
 | 
			
		||||
 MI.ff_name[10] = ffblk.ff_name[11];
 | 
			
		||||
 MI.ff_name[11] = '\0';
 | 
			
		||||
 | 
			
		||||
 MI.ff_attrib= ffblk.ff_attrib;
 | 
			
		||||
 MI.ff_ftime = ffblk.ff_attrib;
 | 
			
		||||
 | 
			
		||||
 MI.nivel = 0;
 | 
			
		||||
 | 
			
		||||
 fwrite( &MI, sizeof(MI), 1, HF1 );
 | 
			
		||||
 | 
			
		||||
 fclose( HF1 );
 | 
			
		||||
 fclose( HF2 );
 | 
			
		||||
 | 
			
		||||
 chdir(PathActual);
 | 
			
		||||
 setdisk(CurrDisk);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 if ( (HF1 = fopen( "files.tmp", "rb" )) == NULL )
 | 
			
		||||
  return -1;
 | 
			
		||||
 if ( (HF2 = fopen( "direc.tmp", "rb" )) == NULL )
 | 
			
		||||
  return -1;
 | 
			
		||||
 if ( (HFf = fopen( NArchivo, "wb" )) == NULL )
 | 
			
		||||
  return -1;
 | 
			
		||||
 | 
			
		||||
 // Fusionamos los dos archivos en uno
 | 
			
		||||
 fwrite( &CabIM, sizeof(CabIM), 1, HFf );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 // Directorios
 | 
			
		||||
 for ( i = 0; i <= CabIM.NumDirectorios; i++ )
 | 
			
		||||
 {
 | 
			
		||||
     fread( &MD, sizeof(MD), 1, HF2 );
 | 
			
		||||
     fwrite( &MD, sizeof(MD), 1, HFf );
 | 
			
		||||
 }
 | 
			
		||||
 // Archivos
 | 
			
		||||
 for ( i = 0; i <= CabIM.NumArchivos; i++ )
 | 
			
		||||
 {
 | 
			
		||||
     fread( &MI, sizeof(MI), 1, HF1 );
 | 
			
		||||
     fwrite( &MI, sizeof(MI), 1, HFf );
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 fclose( HFf );
 | 
			
		||||
 fclose( HF1 );
 | 
			
		||||
 fclose( HF2 );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void DibujaPantalla(void)
 | 
			
		||||
{
 | 
			
		||||
         //123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-
 | 
			
		||||
 clrscr();
 | 
			
		||||
// textbackground(BLUE);
 | 
			
		||||
 textbackground( BLACK );
 | 
			
		||||
 | 
			
		||||
 textcolor(LIGHTCYAN);
 | 
			
		||||
 cprintf( "-x<><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ  Nombre           Tama<6D>o <20> Nombre           Tama<6D>o " );
 | 
			
		||||
 cprintf( "                           <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "<EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ" );
 | 
			
		||||
 cprintf( "<EFBFBD>                                                                              <20>" );
 | 
			
		||||
 cprintf( "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" );
 | 
			
		||||
 | 
			
		||||
 textcolor( YELLOW );
 | 
			
		||||
 gotoxy( 31 , 1 ); cprintf( "Nombre           Tama<6D>o" );
 | 
			
		||||
 gotoxy( 57,  1 ); cprintf( "Nombre           Tama<6D>o" );
 | 
			
		||||
 | 
			
		||||
 textbackground( RED );
 | 
			
		||||
 gotoxy(  2 , 1 ); cprintf( "x" );
 | 
			
		||||
 gotoxy(  2, 22 ); cprintf( "x" );
 | 
			
		||||
 | 
			
		||||
// textbackground(BLUE);
 | 
			
		||||
 textbackground( BLACK );
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
 char Directorios;
 | 
			
		||||
 char Ruta;
 | 
			
		||||
 | 
			
		||||
} CONFIG;
 | 
			
		||||
 | 
			
		||||
CONFIG config;
 | 
			
		||||
 | 
			
		||||
void MuestraDirectorio( int Row, int DirMuestra, char como );
 | 
			
		||||
void ContraeExpandeRama( MDIREC far *DesdeAqui, char ContraeExpande );
 | 
			
		||||
int  AvanzaRetrocede( int PuntoInicio, char RetrocedeAvanza );
 | 
			
		||||
void MuestraDirectorios( long DirInicio );
 | 
			
		||||
void LeeDir(void);
 | 
			
		||||
void ReconstruyeDirectorio( int Nivel );
 | 
			
		||||
 | 
			
		||||
void MuestraArchivo( int RowFisica, int PosArch, char como );
 | 
			
		||||
void MuestraArchivos( long CurrTrnDir );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
FILE *HFf;
 | 
			
		||||
 | 
			
		||||
void main(void)
 | 
			
		||||
{
 | 
			
		||||
 int ok, i;
 | 
			
		||||
 int OldNivel;
 | 
			
		||||
 | 
			
		||||
 DibujaPantalla();
 | 
			
		||||
/*
 | 
			
		||||
 window(2, 2, 25, 21);
 | 
			
		||||
 ConstruyeIndice( "I:\\", "CDa.idm" );
 | 
			
		||||
 window(1, 1, 80, 25);
 | 
			
		||||
 return;*/
 | 
			
		||||
 config.Directorios = 1;
 | 
			
		||||
 config.Ruta        = 1;
 | 
			
		||||
 | 
			
		||||
 if ( ( HFf = fopen( "CDa.idm", "rb" ) ) != NULL )
 | 
			
		||||
 {
 | 
			
		||||
 | 
			
		||||
 long CurrRowDir;
 | 
			
		||||
 long  CurrTrnDir, OldCurrTrnDir, IniTrnDir;
 | 
			
		||||
 long CurrTrnArch, CurrRowArch;
 | 
			
		||||
 | 
			
		||||
 LeeDir();
 | 
			
		||||
 | 
			
		||||
 CurrRowDir = 0;
 | 
			
		||||
 CurrTrnDir = 0;
 | 
			
		||||
 OldCurrTrnDir = 0;
 | 
			
		||||
 IniTrnDir = 0;
 | 
			
		||||
 | 
			
		||||
 // Construye el directorio actual
 | 
			
		||||
 | 
			
		||||
 char VentanaActual = 1;
 | 
			
		||||
 | 
			
		||||
 ok = 0;
 | 
			
		||||
 | 
			
		||||
 if ( config.Directorios )
 | 
			
		||||
 {
 | 
			
		||||
  MuestraDirectorios( CurrTrnDir );
 | 
			
		||||
  MuestraDirectorio( CurrRowDir, CurrTrnDir, 1 );
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 if ( config.Ruta )
 | 
			
		||||
 {
 | 
			
		||||
   sprintf( PathActual, "[%s]\\", MI.ff_name );
 | 
			
		||||
 | 
			
		||||
   textcolor( YELLOW );
 | 
			
		||||
   gotoxy( 2, 23 ); cprintf( "                                                                              " );
 | 
			
		||||
   gotoxy( 2, 23 ); cprintf( "%s", PathActual );
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 CurrTrnArch = CurrTrnDir+1;
 | 
			
		||||
 CurrRowArch = 0;
 | 
			
		||||
 | 
			
		||||
 MuestraArchivos( CurrTrnArch );
 | 
			
		||||
 | 
			
		||||
 do {
 | 
			
		||||
  if ( kbhit() )
 | 
			
		||||
  {
 | 
			
		||||
   if ( config.Directorios && VentanaActual == 1 )
 | 
			
		||||
      MuestraDirectorio( CurrRowDir, CurrTrnDir, 0 );
 | 
			
		||||
   else
 | 
			
		||||
      MuestraArchivo( CurrRowArch, CurrTrnArch+1, 0 );
 | 
			
		||||
 | 
			
		||||
   switch( getch() )
 | 
			
		||||
   {
 | 
			
		||||
    case  9:
 | 
			
		||||
            if ( config.Directorios )
 | 
			
		||||
            {
 | 
			
		||||
             VentanaActual++; if ( VentanaActual > 2 ) VentanaActual = 1;
 | 
			
		||||
            }
 | 
			
		||||
            switch( VentanaActual )
 | 
			
		||||
            {
 | 
			
		||||
             case 1:
 | 
			
		||||
               fseek( HFf, sizeof( CabIM ) + sizeof( MDIREC ) * (CabIM.NumDirectorios+1) + sizeof(MINDEX)*CurrTrnDir, SEEK_SET );
 | 
			
		||||
               break;
 | 
			
		||||
             case 2:
 | 
			
		||||
               fseek( HFf, sizeof( CabIM ) + sizeof( MDIREC ) * (CabIM.NumDirectorios+1) + sizeof(MINDEX)*CurrTrnArch, SEEK_SET );
 | 
			
		||||
               break;
 | 
			
		||||
            }
 | 
			
		||||
            fread( &MI, sizeof(MI), 1, HFf );
 | 
			
		||||
            break;
 | 
			
		||||
    case 13:
 | 
			
		||||
     switch( VentanaActual )
 | 
			
		||||
     {
 | 
			
		||||
      case 1:
 | 
			
		||||
             IniTrnDir = CurrTrnDir;
 | 
			
		||||
             for ( i=0; i < CurrRowDir; i++ )
 | 
			
		||||
                IniTrnDir = AvanzaRetrocede( IniTrnDir, -1 );
 | 
			
		||||
             ContraeExpandeRama( &Directorios[CurrTrnDir], !Directorios[CurrTrnDir+1].ContraidoExpandido );
 | 
			
		||||
             MuestraDirectorios( IniTrnDir );
 | 
			
		||||
             break;
 | 
			
		||||
      case 2:
 | 
			
		||||
             // Retrocedemos / entramos en un directorio o mostramos las propiedades si es un archivo
 | 
			
		||||
             if ( strcmp( MI.ff_name, ".." ) == 0 )
 | 
			
		||||
             {
 | 
			
		||||
              OldNivel = Directorios[CurrTrnDir].Nivel;
 | 
			
		||||
              do {
 | 
			
		||||
                   CurrRowDir--; if ( CurrRowDir < 0 )
 | 
			
		||||
                   {
 | 
			
		||||
                    CurrRowDir = 0;
 | 
			
		||||
                    if ( CurrTrnDir != 0 )
 | 
			
		||||
                    {
 | 
			
		||||
                     movetext( 1, 2, 27, 20, 1, 3);
 | 
			
		||||
                    }
 | 
			
		||||
                    if ( config.Directorios && VentanaActual == 1 )
 | 
			
		||||
                          MuestraDirectorio( CurrRowDir, CurrTrnDir, 0 );
 | 
			
		||||
                   }
 | 
			
		||||
                   CurrTrnDir = AvanzaRetrocede( CurrTrnDir, -1 );
 | 
			
		||||
              } while( Directorios[CurrTrnDir].Nivel != (OldNivel-1) && Directorios[CurrTrnDir].Nivel != 0 );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                     CurrTrnArch = Directorios[CurrTrnDir].PosDirectorio + 1;
 | 
			
		||||
                     CurrRowArch = 0;
 | 
			
		||||
                     MuestraArchivos( CurrTrnArch );
 | 
			
		||||
 | 
			
		||||
                     if ( config.Ruta )
 | 
			
		||||
                   {
 | 
			
		||||
                    ReconstruyeDirectorio( CurrTrnDir );
 | 
			
		||||
                    textcolor( YELLOW );
 | 
			
		||||
                    gotoxy( 2, 23 ); cprintf( "                                                                              " );
 | 
			
		||||
                    gotoxy( 2, 23 ); cprintf( "%s", PathActual, MI.ff_name );
 | 
			
		||||
                   }
 | 
			
		||||
 | 
			
		||||
  fseek( HFf, sizeof( CabIM ) + sizeof( MDIREC ) * (CabIM.NumDirectorios+1) + sizeof(MINDEX)*CurrTrnArch, SEEK_SET );
 | 
			
		||||
  fread( &MI, sizeof(MI), 1, HFf );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
             } else {
 | 
			
		||||
             // Penetramos en ese directorio...
 | 
			
		||||
             // Si la rama no esta expandida, la expandimos
 | 
			
		||||
              if ( MI.ff_attrib & FA_DIREC )
 | 
			
		||||
              {
 | 
			
		||||
               strcpy( Buffer, MI.ff_name );
 | 
			
		||||
               if ( !Directorios[CurrTrnDir+1].ContraidoExpandido )
 | 
			
		||||
               {
 | 
			
		||||
                IniTrnDir = CurrTrnDir;
 | 
			
		||||
                for ( i=0; i < CurrRowDir; i++ )
 | 
			
		||||
                   IniTrnDir = AvanzaRetrocede( IniTrnDir, -1 );
 | 
			
		||||
                ContraeExpandeRama( &Directorios[CurrTrnDir], !Directorios[CurrTrnDir+1].ContraidoExpandido );
 | 
			
		||||
                MuestraDirectorios( IniTrnDir );
 | 
			
		||||
               }
 | 
			
		||||
               // Ahora avanzamos hasta alcanzar al directorio
 | 
			
		||||
                   do {
 | 
			
		||||
                    OldCurrTrnDir = CurrTrnDir;
 | 
			
		||||
                    CurrTrnDir = AvanzaRetrocede( CurrTrnDir,  1 );
 | 
			
		||||
                    if ( OldCurrTrnDir != CurrTrnDir )
 | 
			
		||||
                    {
 | 
			
		||||
                     CurrRowDir++;
 | 
			
		||||
                     if ( CurrRowDir >= NUM_LINEAS )
 | 
			
		||||
                     {
 | 
			
		||||
                      CurrRowDir = NUM_LINEAS-1;
 | 
			
		||||
                      movetext( 1, 3, 27, 21, 1, 2 );
 | 
			
		||||
                     }
 | 
			
		||||
                    }
 | 
			
		||||
                   } while( strcmp( Buffer, MI.ff_name ) != 0 );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                     CurrTrnArch = Directorios[CurrTrnDir].PosDirectorio + 1;
 | 
			
		||||
                     CurrRowArch = 0;
 | 
			
		||||
                     MuestraArchivos( CurrTrnArch );
 | 
			
		||||
 | 
			
		||||
                    if ( config.Ruta )
 | 
			
		||||
                    {
 | 
			
		||||
                     ReconstruyeDirectorio( CurrTrnDir );
 | 
			
		||||
                     textcolor( YELLOW );
 | 
			
		||||
                     gotoxy( 2, 23 ); cprintf( "                                                                              " );
 | 
			
		||||
                     gotoxy( 2, 23 ); cprintf( "%s", PathActual );
 | 
			
		||||
                    }
 | 
			
		||||
              } else {
 | 
			
		||||
//               MuestraPropiedades();
 | 
			
		||||
              }
 | 
			
		||||
             }
 | 
			
		||||
             break;
 | 
			
		||||
     }
 | 
			
		||||
     break;
 | 
			
		||||
    case 27:
 | 
			
		||||
     ok = 1;
 | 
			
		||||
     break;
 | 
			
		||||
    case  0:
 | 
			
		||||
     switch( getch() )
 | 
			
		||||
     {
 | 
			
		||||
      case 64:
 | 
			
		||||
            if ( config.Directorios )
 | 
			
		||||
            {
 | 
			
		||||
             VentanaActual++; if ( VentanaActual > 2 ) VentanaActual = 1;
 | 
			
		||||
            }
 | 
			
		||||
            switch( VentanaActual )
 | 
			
		||||
            {
 | 
			
		||||
             case 1:
 | 
			
		||||
               fseek( HFf, sizeof( CabIM ) + sizeof( MDIREC ) * (CabIM.NumDirectorios+1) + sizeof(MINDEX)*CurrTrnDir, SEEK_SET );
 | 
			
		||||
               break;
 | 
			
		||||
             case 2:
 | 
			
		||||
               fseek( HFf, sizeof( CabIM ) + sizeof( MDIREC ) * (CabIM.NumDirectorios+1) + sizeof(MINDEX)*CurrTrnArch, SEEK_SET );
 | 
			
		||||
               break;
 | 
			
		||||
            }
 | 
			
		||||
            fread( &MI, sizeof(MI), 1, HFf );
 | 
			
		||||
            break;
 | 
			
		||||
 | 
			
		||||
      case 72:
 | 
			
		||||
           switch( VentanaActual )
 | 
			
		||||
           {
 | 
			
		||||
            case 1:
 | 
			
		||||
                   CurrRowDir--; if ( CurrRowDir < 0 )
 | 
			
		||||
                   {
 | 
			
		||||
                    CurrRowDir = 0;
 | 
			
		||||
                    if ( CurrTrnDir != 0 )
 | 
			
		||||
                    {
 | 
			
		||||
                     movetext( 1, 2, 27, 20, 1, 3);
 | 
			
		||||
                    }
 | 
			
		||||
                   }
 | 
			
		||||
                   CurrTrnDir = AvanzaRetrocede( CurrTrnDir, -1 );
 | 
			
		||||
 | 
			
		||||
                     CurrTrnArch = Directorios[CurrTrnDir].PosDirectorio + 1;
 | 
			
		||||
                     CurrRowArch = 0;
 | 
			
		||||
                     MuestraArchivos( CurrTrnArch );
 | 
			
		||||
 | 
			
		||||
                   if ( config.Ruta )
 | 
			
		||||
                   {
 | 
			
		||||
                    ReconstruyeDirectorio( CurrTrnDir );
 | 
			
		||||
                    textcolor( YELLOW );
 | 
			
		||||
                    gotoxy( 2, 23 ); cprintf( "                                                                              " );
 | 
			
		||||
                    gotoxy( 2, 23 ); cprintf( "%s", PathActual, MI.ff_name );
 | 
			
		||||
                   }
 | 
			
		||||
                   break;
 | 
			
		||||
            case 2:
 | 
			
		||||
                   OldCurrTrnDir = CurrTrnArch; OldNivel = MI.nivel;
 | 
			
		||||
                   if ( CurrTrnArch == 1 ) break;
 | 
			
		||||
                   do {
 | 
			
		||||
                    CurrTrnArch--;
 | 
			
		||||
                    fseek( HFf, sizeof( CabIM ) + sizeof( MDIREC ) * (CabIM.NumDirectorios+1) + sizeof(MINDEX)*CurrTrnArch, SEEK_SET );
 | 
			
		||||
                    fread( &MI, sizeof(MI), 1, HFf );
 | 
			
		||||
                   } while ( MI.nivel > OldNivel );
 | 
			
		||||
                   if ( MI.nivel < OldNivel )
 | 
			
		||||
                   {
 | 
			
		||||
                    CurrTrnArch = OldCurrTrnDir;
 | 
			
		||||
                    fseek( HFf, sizeof( CabIM ) + sizeof( MDIREC ) * (CabIM.NumDirectorios+1) + sizeof(MINDEX)*CurrTrnArch, SEEK_SET );
 | 
			
		||||
                    fread( &MI, sizeof(MI), 1, HFf );
 | 
			
		||||
                   } else {
 | 
			
		||||
                    CurrRowArch--;
 | 
			
		||||
                    if ( CurrRowArch < 0 )
 | 
			
		||||
                    {
 | 
			
		||||
                     CurrRowArch = 0;
 | 
			
		||||
 | 
			
		||||
                     MuestraArchivos( CurrTrnArch );
 | 
			
		||||
                    }
 | 
			
		||||
                   }
 | 
			
		||||
                   break;
 | 
			
		||||
           }
 | 
			
		||||
       break;
 | 
			
		||||
 | 
			
		||||
      case 80:
 | 
			
		||||
           switch( VentanaActual )
 | 
			
		||||
           {
 | 
			
		||||
            case 1:
 | 
			
		||||
                   OldCurrTrnDir = CurrTrnDir;
 | 
			
		||||
                   CurrTrnDir = AvanzaRetrocede( CurrTrnDir,  1 );
 | 
			
		||||
                   if ( OldCurrTrnDir != CurrTrnDir )
 | 
			
		||||
                   {
 | 
			
		||||
                    CurrRowDir++;
 | 
			
		||||
                    if ( CurrRowDir >= NUM_LINEAS )
 | 
			
		||||
                    {
 | 
			
		||||
                     CurrRowDir = NUM_LINEAS-1;
 | 
			
		||||
                     movetext( 1, 3, 27, 21, 1, 2 );
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                     CurrTrnArch = Directorios[CurrTrnDir].PosDirectorio + 1;
 | 
			
		||||
                     CurrRowArch = 0;
 | 
			
		||||
                     MuestraArchivos( CurrTrnArch );
 | 
			
		||||
 | 
			
		||||
                    if ( config.Ruta )
 | 
			
		||||
                    {
 | 
			
		||||
                     ReconstruyeDirectorio( CurrTrnDir );
 | 
			
		||||
                     textcolor( YELLOW );
 | 
			
		||||
                     gotoxy( 2, 23 ); cprintf( "                                                                              " );
 | 
			
		||||
                     gotoxy( 2, 23 ); cprintf( "%s", PathActual );
 | 
			
		||||
                    }
 | 
			
		||||
                   }
 | 
			
		||||
                   break;
 | 
			
		||||
            case 2:
 | 
			
		||||
                   OldCurrTrnDir = CurrTrnArch; OldNivel = MI.nivel;
 | 
			
		||||
 | 
			
		||||
                   do {
 | 
			
		||||
                    CurrTrnArch++;
 | 
			
		||||
                    fseek( HFf, sizeof( CabIM ) + sizeof( MDIREC ) * (CabIM.NumDirectorios+1) + sizeof(MINDEX)*CurrTrnArch, SEEK_SET );
 | 
			
		||||
                    fread( &MI, sizeof(MI), 1, HFf );
 | 
			
		||||
                   } while ( MI.nivel > OldNivel );
 | 
			
		||||
                   if ( MI.nivel < OldNivel )
 | 
			
		||||
                   {
 | 
			
		||||
                    CurrTrnArch = OldCurrTrnDir;
 | 
			
		||||
                    fseek( HFf, sizeof( CabIM ) + sizeof( MDIREC ) * (CabIM.NumDirectorios+1) + sizeof(MINDEX)*CurrTrnArch, SEEK_SET );
 | 
			
		||||
                    fread( &MI, sizeof(MI), 1, HFf );
 | 
			
		||||
                   } else {
 | 
			
		||||
                    CurrRowArch++;
 | 
			
		||||
                    if ( CurrRowArch >= (config.Directorios ? 19*2 : 19*4) )
 | 
			
		||||
                    {
 | 
			
		||||
                     CurrRowArch = 0;
 | 
			
		||||
 | 
			
		||||
                     MuestraArchivos( CurrTrnArch );
 | 
			
		||||
                    }
 | 
			
		||||
                   }
 | 
			
		||||
 | 
			
		||||
                   break;
 | 
			
		||||
           }
 | 
			
		||||
       break;
 | 
			
		||||
 | 
			
		||||
     }
 | 
			
		||||
     break;
 | 
			
		||||
 | 
			
		||||
   }
 | 
			
		||||
   if ( config.Directorios && VentanaActual == 1 )
 | 
			
		||||
      MuestraDirectorio( CurrRowDir, CurrTrnDir, 1 );
 | 
			
		||||
   else
 | 
			
		||||
      MuestraArchivo( CurrRowArch, CurrTrnArch, 1 );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 } while( !ok );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  if ( Directorios != NULL ) delete [] Directorios;
 | 
			
		||||
  fclose( HFf );
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 textbackground( BLACK );
 | 
			
		||||
 textcolor( LIGHTGRAY );
 | 
			
		||||
 clrscr();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ReconstruyeDirectorio( int Nivel )
 | 
			
		||||
{
 | 
			
		||||
  char RutaActual[13];
 | 
			
		||||
  int NivelA;
 | 
			
		||||
 | 
			
		||||
  // Retrocedemos al nivel anterior
 | 
			
		||||
  NivelA = Directorios[Nivel].Nivel;
 | 
			
		||||
  // Nombre del Nivel 'anterior'
 | 
			
		||||
  fseek( HFf, sizeof( CabIM ) + sizeof( MDIREC ) * (CabIM.NumDirectorios+1) + sizeof(MINDEX)*Directorios[Nivel].PosDirectorio, SEEK_SET );
 | 
			
		||||
  fread( &MI, sizeof(MI), 1, HFf );
 | 
			
		||||
  strcpy( RutaActual, MI.ff_name );
 | 
			
		||||
 | 
			
		||||
  if ( NivelA > 0 )
 | 
			
		||||
  {
 | 
			
		||||
   while ( Directorios[Nivel].Nivel != NivelA - 1 ) Nivel--;
 | 
			
		||||
   ReconstruyeDirectorio( Nivel );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if ( NivelA == 0 )
 | 
			
		||||
  {
 | 
			
		||||
   fseek( HFf, sizeof( CabIM ) + sizeof( MDIREC ) * (CabIM.NumDirectorios+1) + sizeof(MINDEX)*Directorios[NivelA].PosDirectorio, SEEK_SET );
 | 
			
		||||
   fread( &MI, sizeof(MI), 1, HFf );
 | 
			
		||||
   sprintf( PathActual, "[%s]\\", MI.ff_name );
 | 
			
		||||
  } else {
 | 
			
		||||
   strcat( PathActual, RutaActual );
 | 
			
		||||
   strcat( PathActual, "\\" );
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int AvanzaRetrocede( int PuntoInicio, char RetrocedeAvanza )
 | 
			
		||||
{
 | 
			
		||||
 int oldPI, NivelE;
 | 
			
		||||
 | 
			
		||||
 oldPI  = PuntoInicio;
 | 
			
		||||
 | 
			
		||||
 if ( PuntoInicio <= 1 && RetrocedeAvanza == -1 ) return 0;
 | 
			
		||||
 | 
			
		||||
 do {
 | 
			
		||||
     PuntoInicio+=RetrocedeAvanza;
 | 
			
		||||
 } while ( !Directorios[PuntoInicio].ContraidoExpandido && Directorios[PuntoInicio].Nivel!=0 );
 | 
			
		||||
 | 
			
		||||
 if ( Directorios[PuntoInicio].Nivel == 0 )
 | 
			
		||||
   return oldPI;
 | 
			
		||||
 | 
			
		||||
 return PuntoInicio;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MuestraDirectorio( int Row, int DirMuestra, char como )
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 window(2, 2, 27, 23);
 | 
			
		||||
 | 
			
		||||
 textcolor( LIGHTMAGENTA );
 | 
			
		||||
 | 
			
		||||
 if ( como )
 | 
			
		||||
 {
 | 
			
		||||
  textbackground( LIGHTMAGENTA );
 | 
			
		||||
  textcolor( BLACK );
 | 
			
		||||
 } else {
 | 
			
		||||
//  textbackground(BLUE);
 | 
			
		||||
  textbackground( BLACK );
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 gotoxy( 1, Row+1 );
 | 
			
		||||
 cprintf( "                          " );
 | 
			
		||||
 | 
			
		||||
 gotoxy( 1+Directorios[DirMuestra].Nivel, Row+1 );
 | 
			
		||||
 | 
			
		||||
 fseek( HFf, sizeof( CabIM ) + sizeof( MDIREC ) * (CabIM.NumDirectorios+1) + sizeof(MINDEX)*Directorios[DirMuestra].PosDirectorio, SEEK_SET );
 | 
			
		||||
 fread( &MI, sizeof(MI), 1, HFf );
 | 
			
		||||
 cprintf( "%c%s", Directorios[DirMuestra].Nivel < Directorios[DirMuestra+1].Nivel ? Directorios[DirMuestra+1].ContraidoExpandido ? '-' : '+' : '<EFBFBD>', MI.ff_name );
 | 
			
		||||
 | 
			
		||||
// textbackground(BLUE);
 | 
			
		||||
 textbackground( BLACK );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 window(1, 1, 80, 24);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void LeeDir()
 | 
			
		||||
{
 | 
			
		||||
 long i;
 | 
			
		||||
 int RowFisica;
 | 
			
		||||
 | 
			
		||||
  rewind( HFf );
 | 
			
		||||
  fread( &CabIM, sizeof(CabIM), 1, HFf );
 | 
			
		||||
 | 
			
		||||
  if ( Directorios != NULL ) delete [] Directorios;
 | 
			
		||||
  if ( ( Directorios = new MDIREC far [CabIM.NumDirectorios+1] ) != NULL )
 | 
			
		||||
  {
 | 
			
		||||
   fread( Directorios, sizeof(MDIREC), CabIM.NumDirectorios+1, HFf );
 | 
			
		||||
  } else {
 | 
			
		||||
   // No hay memoria suficiente
 | 
			
		||||
   exit(-1);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MuestraArchivos( long CurrTrnDir )
 | 
			
		||||
{
 | 
			
		||||
 int CurrNivel, RowFisica;
 | 
			
		||||
 long CurrN;
 | 
			
		||||
 | 
			
		||||
 fseek( HFf, sizeof( CabIM ) + sizeof( MDIREC ) * (CabIM.NumDirectorios+1) + sizeof(MINDEX)*CurrTrnDir, SEEK_SET );
 | 
			
		||||
 fread( &MI, sizeof(MI), 1, HFf );
 | 
			
		||||
 | 
			
		||||
 CurrN     = CurrTrnDir;//Directorios[CurrTrnDir].PosDirectorio + 1;
 | 
			
		||||
 | 
			
		||||
 CurrNivel = MI.nivel;//Directorios[CurrTrnDir].Nivel + 1;
 | 
			
		||||
 | 
			
		||||
 for ( RowFisica=3; RowFisica<22; RowFisica++ )
 | 
			
		||||
 {
 | 
			
		||||
  gotoxy( 30, RowFisica );
 | 
			
		||||
  cprintf( "                         <20>                         " );
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 // Miro si el archivo siguiente a este directorio es de un nivel superior
 | 
			
		||||
 fseek( HFf, sizeof( CabIM ) + sizeof( MDIREC ) * (CabIM.NumDirectorios+1) + sizeof(MINDEX)*CurrN, SEEK_SET );
 | 
			
		||||
 fread( &MI, sizeof(MI), 1, HFf );
 | 
			
		||||
 if ( MI.nivel != CurrNivel )
 | 
			
		||||
  return;                               // Parece que el directorio estaba vacio
 | 
			
		||||
 | 
			
		||||
 // Continua solo mientra no estemos en un nivel inferior
 | 
			
		||||
 for ( RowFisica = 0; MI.nivel >= CurrNivel
 | 
			
		||||
                     && RowFisica < (config.Directorios ? 19*2 : 19*4); )
 | 
			
		||||
 {
 | 
			
		||||
   if ( MI.nivel == CurrNivel )
 | 
			
		||||
   {
 | 
			
		||||
    MuestraArchivo( RowFisica, CurrTrnDir, 0 );
 | 
			
		||||
    RowFisica++;
 | 
			
		||||
   }
 | 
			
		||||
   CurrN++;
 | 
			
		||||
//   fseek( HFf, sizeof( CabIM ) + sizeof( MDIREC ) * (CabIM.NumDirectorios+1) + sizeof(MINDEX)*CurrN, SEEK_SET );
 | 
			
		||||
   fread( &MI, sizeof(MI), 1, HFf );
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
  fseek( HFf, sizeof( CabIM ) + sizeof( MDIREC ) * (CabIM.NumDirectorios+1) + sizeof(MINDEX)*CurrTrnDir, SEEK_SET );
 | 
			
		||||
  fread( &MI, sizeof(MI), 1, HFf );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MuestraArchivo( int RowFisica, int PosArch, char como )
 | 
			
		||||
{
 | 
			
		||||
 int s, i;
 | 
			
		||||
 | 
			
		||||
 if ( como )
 | 
			
		||||
 {
 | 
			
		||||
  textbackground( LIGHTMAGENTA );
 | 
			
		||||
  textcolor( BLACK );
 | 
			
		||||
 } else {
 | 
			
		||||
//  textbackground(BLUE);
 | 
			
		||||
  textbackground( BLACK );
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
       // obtenemos la columna: 0 - 1 - 2
 | 
			
		||||
 gotoxy( ( ( RowFisica / 19 ) + ( config.Directorios ? 1 : 0 ) ) * 26 + 5, 3 + RowFisica % 19 );
 | 
			
		||||
 | 
			
		||||
 if ( MI.ff_name[0] != '.' && strstr( MI.ff_name, "." ) != NULL )
 | 
			
		||||
 {
 | 
			
		||||
  i = 0;
 | 
			
		||||
  while ( MI.ff_name[i] != '.' ) i++;
 | 
			
		||||
  MI.ff_name[i] = '\0';
 | 
			
		||||
  sprintf( Buffer, "%-8s %-3s", MI.ff_name, &MI.ff_name[i+1] );
 | 
			
		||||
  MI.ff_name[i] = '.';
 | 
			
		||||
 } else
 | 
			
		||||
  sprintf( Buffer, "%s", MI.ff_name );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 Que_Color();                                cprintf("%-12s", Buffer );
 | 
			
		||||
 if( MI.ff_attrib & FA_DIREC )    cprintf("   <dir>");
 | 
			
		||||
 else
 | 
			
		||||
 {
 | 
			
		||||
   textcolor(YELLOW);    formatea_u_long( (unsigned long) MI.ff_fsize, Buffer );
 | 
			
		||||
   			 cprintf(" %11s",  Buffer );
 | 
			
		||||
 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Que_Color(void){
 | 
			
		||||
 | 
			
		||||
 char Extension[4];
 | 
			
		||||
 int i;
 | 
			
		||||
 | 
			
		||||
/*// Todo lo que este oculto*/
 | 
			
		||||
 if ( MI.ff_attrib & FA_HIDDEN  )                     { textcolor(GREEN); return; }
 | 
			
		||||
/*// Directorios*/
 | 
			
		||||
 if ( MI.ff_attrib & FA_DIREC )                 { textcolor(LIGHTMAGENTA); return; }
 | 
			
		||||
 | 
			
		||||
 i = 0;
 | 
			
		||||
 while ( MI.ff_name[i] != '.' ) i++;
 | 
			
		||||
 Extension[0] = MI.ff_name[i+1];
 | 
			
		||||
 Extension[1] = MI.ff_name[i+2];
 | 
			
		||||
 Extension[2] = MI.ff_name[i+3];
 | 
			
		||||
 Extension[3] = '\0';
 | 
			
		||||
 | 
			
		||||
/*// Ejecutaables *.BAT dee proceso por Lotes*/
 | 
			
		||||
 if ( !strcmpi(Extension, "BAT") ) { textcolor(RED); return; }
 | 
			
		||||
/*// Ejecutables *.EXE*/
 | 
			
		||||
 if ( !strcmpi(Extension, "EXE") ) { textcolor(LIGHTCYAN); return; }
 | 
			
		||||
/*// Ejecutables  *.COM*/
 | 
			
		||||
 if ( !strcmpi(Extension, "COM") ) { textcolor(LIGHTGREEN); return; }
 | 
			
		||||
 | 
			
		||||
/* //Texto*/
 | 
			
		||||
 if ( !strcmpi(Extension, "TXT") ) { textcolor(WHITE); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "DOC") ) { textcolor(WHITE); return; }
 | 
			
		||||
/*// Texto con formatos especiales*/
 | 
			
		||||
 if ( !strcmpi(Extension, "WRI") ) { textcolor(WHITE); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "WPC") ) { textcolor(WHITE); return; }
 | 
			
		||||
 | 
			
		||||
/*// M<>sica*/
 | 
			
		||||
 if ( !strcmpi(Extension, "MID") ) { textcolor(BLUE); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "MOD") ) { textcolor(BLUE); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "VOC") ) { textcolor(BLUE); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "CMF") ) { textcolor(BLUE); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "WAV") ) { textcolor(BLUE); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "S3M") ) { textcolor(BLUE); return; }
 | 
			
		||||
 | 
			
		||||
/* // Imagenes y videos*/
 | 
			
		||||
 if ( !strcmpi(Extension, "FLI") ) { textcolor(MAGENTA); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "FLC") ) { textcolor(MAGENTA); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "MPG") ) { textcolor(MAGENTA); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "MOV") ) { textcolor(MAGENTA); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "AVI") ) { textcolor(MAGENTA); return; }
 | 
			
		||||
 | 
			
		||||
 if ( !strcmpi(Extension, "CEL") ) { textcolor(MAGENTA); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "PNG") ) { textcolor(MAGENTA); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "PCX") ) { textcolor(MAGENTA); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "GIF") ) { textcolor(MAGENTA); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "JPG") ) { textcolor(MAGENTA); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "LBM") ) { textcolor(MAGENTA); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "TGA") ) { textcolor(MAGENTA); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "DIB") ) { textcolor(MAGENTA); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "MAC") ) { textcolor(MAGENTA); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "WPG") ) { textcolor(MAGENTA); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "BMP") ) { textcolor(MAGENTA); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "PIC") ) { textcolor(MAGENTA); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "RLE") ) { textcolor(MAGENTA); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "CUT") ) { textcolor(MAGENTA); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "TIF") ) { textcolor(MAGENTA); return; }
 | 
			
		||||
 | 
			
		||||
/* // Lenguajes*/
 | 
			
		||||
 if ( !strcmpi(Extension, "C") ) { textcolor(BROWN); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "CPP") ) { textcolor(BROWN); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "C++") ) { textcolor(BROWN); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "PAS") ) { textcolor(BROWN); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "ASM") ) { textcolor(BROWN); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "VBX") ) { textcolor(BROWN); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "LIB") ) { textcolor(BROWN); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "BAS") ) { textcolor(BROWN); return; }
 | 
			
		||||
 | 
			
		||||
/*// Compresores*/
 | 
			
		||||
 if ( !strcmpi(Extension, "ZIP") ) { textcolor(LIGHTBLUE); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "ARJ") ) { textcolor(LIGHTBLUE); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "ARC") ) { textcolor(LIGHTBLUE); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "AIN") ) { textcolor(LIGHTBLUE); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "LZH") ) { textcolor(LIGHTBLUE); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "TGZ") ) { textcolor(LIGHTBLUE); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "RAR") ) { textcolor(LIGHTBLUE); return; }
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 if ( !strcmpi(Extension, "") ) { textcolor(); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "") ) { textcolor(); return; }
 | 
			
		||||
 if ( !strcmpi(Extension, "") ) { textcolor(); return; }
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 textcolor(LIGHTGRAY);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void MuestraDirectorios( long DirInicio )
 | 
			
		||||
{
 | 
			
		||||
 int i, RowFisica = 0;
 | 
			
		||||
 | 
			
		||||
 window(2, 2, 27, 21);
 | 
			
		||||
 clrscr();
 | 
			
		||||
 | 
			
		||||
 Directorios[0].ContraidoExpandido = 1;
 | 
			
		||||
 | 
			
		||||
 for ( i=DirInicio; i < CabIM.NumDirectorios &&  RowFisica < NUM_LINEAS; i++ )
 | 
			
		||||
 {
 | 
			
		||||
  if ( Directorios[i].ContraidoExpandido )
 | 
			
		||||
  {
 | 
			
		||||
   gotoxy( 1+Directorios[i].Nivel, RowFisica+1 );
 | 
			
		||||
 | 
			
		||||
   fseek( HFf, sizeof( CabIM ) + sizeof( MDIREC ) * (CabIM.NumDirectorios+1) + sizeof(MINDEX)*Directorios[i].PosDirectorio, SEEK_SET );
 | 
			
		||||
   fread( &MI, sizeof(MI), 1, HFf );
 | 
			
		||||
   cprintf( "%c%s", Directorios[i].Nivel < Directorios[i+1].Nivel ? Directorios[i+1].ContraidoExpandido ? '-' : '+' : '<EFBFBD>', MI.ff_name );
 | 
			
		||||
   RowFisica++;
 | 
			
		||||
  }
 | 
			
		||||
 }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 window(1, 1, 80, 24);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 /**************************************************************************\
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*  ContraeExpandeRama                                                      *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*  Descripci<63>n:                                                            *|
 | 
			
		||||
|*              Contrae o expande la rama seg<65>n el par<61>metro y apartir del  *|
 | 
			
		||||
|*              punto indicado...                                           *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*  Entradas: Puntero al inicio de la expanci<63>n / contraccion               *|
 | 
			
		||||
|*            Accion a ejecutar: CONTRAE / EXPANDE                          *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
|*  Salidas:  (ninguna)                                                     *|
 | 
			
		||||
|*                                                                          *|
 | 
			
		||||
 \**************************************************************************/
 | 
			
		||||
void ContraeExpandeRama( MDIREC far *DesdeAqui, char ContraeExpande )
 | 
			
		||||
{
 | 
			
		||||
 int NivelE;
 | 
			
		||||
 | 
			
		||||
 NivelE = DesdeAqui -> Nivel;
 | 
			
		||||
 | 
			
		||||
 DesdeAqui++;
 | 
			
		||||
  while( DesdeAqui -> Nivel > NivelE  )
 | 
			
		||||
  {
 | 
			
		||||
   if ( ContraeExpande )
 | 
			
		||||
   {
 | 
			
		||||
    if ( DesdeAqui -> Nivel == NivelE + 1 )
 | 
			
		||||
     DesdeAqui -> ContraidoExpandido = ContraeExpande;
 | 
			
		||||
   } else
 | 
			
		||||
     DesdeAqui -> ContraidoExpandido = ContraeExpande;
 | 
			
		||||
   DesdeAqui++;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
//
 | 
			
		||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>  <20>   <20>  <20><>  <20><><EFBFBD> <20><><EFBFBD>  <20><>           <20>    <20><><EFBFBD><EFBFBD> <20>   <20> <20><><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
// <20>    <20>  <20> <20>  <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20>  <20>  <20>  <20>   <20>  <20>          <20>    <20>  <20> <20><>  <20> <20>
 | 
			
		||||
// <20><><EFBFBD>  <20>  <20> <20><><EFBFBD>  <20>   <20> <20><><EFBFBD><EFBFBD>  <20>  <20><>  <20><><EFBFBD><EFBFBD>   <20> <20>    <20>    <20>  <20> <20> <20> <20> <20> <20><><EFBFBD>
 | 
			
		||||
// <20>    <20>  <20> <20> <20>  <20>   <20> <20>  <20>  <20>  <20>   <20>  <20>   <20> <20> <20><> <20>    <20>  <20> <20>  <20><> <20>   <20>
 | 
			
		||||
// <20>    <20><><EFBFBD><EFBFBD> <20>  <20> <20>   <20> <20>  <20>  <20>  <20><><EFBFBD> <20>  <20>   <20><><EFBFBD>    <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>   <20> <20><><EFBFBD><EFBFBD><EFBFBD>
 | 
			
		||||
*/
 | 
			
		||||
void formatea_u_long( unsigned long Numero, char *Inter_Chg) {
 | 
			
		||||
 | 
			
		||||
	char Buffer1[80];
 | 
			
		||||
	char Buffer2[80];
 | 
			
		||||
	int c;
 | 
			
		||||
 | 
			
		||||
		sprintf(Buffer1, "%lu", Numero);
 | 
			
		||||
			strcpy(Buffer2, "\0");
 | 
			
		||||
			strrev(Buffer1);
 | 
			
		||||
			c = strlen( Buffer1 );
 | 
			
		||||
		      while( c >= 3 ){
 | 
			
		||||
			c -= 3;
 | 
			
		||||
			strncat( Buffer2, Buffer1, 3);
 | 
			
		||||
			strrev(Buffer1);
 | 
			
		||||
			Buffer1[c] = '\0';
 | 
			
		||||
			strrev(Buffer1);
 | 
			
		||||
			if(strlen(Buffer1)!=0)
 | 
			
		||||
				strcat( Buffer2, "." );
 | 
			
		||||
		      }
 | 
			
		||||
			strcat( Buffer2, Buffer1);
 | 
			
		||||
strrev(Buffer2);
 | 
			
		||||
strcpy(Inter_Chg, Buffer2);
 | 
			
		||||
 | 
			
		||||
/*// return Buffer2;*/
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								INDEXM.EXE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								INDEXM.EXE
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										89
									
								
								LEEIDX.CPP
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								LEEIDX.CPP
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,89 @@
 | 
			
		||||
#include <conio.h>
 | 
			
		||||
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
 char FA[1024];
 | 
			
		||||
} CABECERA_IM;
 | 
			
		||||
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
 unsigned char Nivel;           // Nivel actual en el que me encuentro
 | 
			
		||||
 char ff_attrib;       /* attribute found */
 | 
			
		||||
 int  ff_ftime;        /* file time */
 | 
			
		||||
 int  ff_fdate;        /* file date */
 | 
			
		||||
 long ff_fsize;        /* file size */
 | 
			
		||||
 char ff_name[13];     /* found file name */
 | 
			
		||||
} MINDEX;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void DibujaPantalla(void)
 | 
			
		||||
{
 | 
			
		||||
         //123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-
 | 
			
		||||
 clrscr();
 | 
			
		||||
 textbackground(BLUE);
 | 
			
		||||
 textcolor(LIGHTCYAN);
 | 
			
		||||
 cprintf( "-x<><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ  Nombre           Tama<6D>o <20> Nombre           Tama<6D>o " );
 | 
			
		||||
 cprintf( "                           <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "                           <20>                          <20>                         " );
 | 
			
		||||
 cprintf( "<EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ" );
 | 
			
		||||
 cprintf( "<EFBFBD>                                                                              <20>" );
 | 
			
		||||
 cprintf( "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" );
 | 
			
		||||
 | 
			
		||||
 textcolor( YELLOW );
 | 
			
		||||
 gotoxy( 31 , 1 ); cprintf( "Nombre           Tama<6D>o" );
 | 
			
		||||
 gotoxy( 57,  1 ); cprintf( "Nombre           Tama<6D>o" );
 | 
			
		||||
 | 
			
		||||
 textbackground( RED );
 | 
			
		||||
 gotoxy(  2 , 1 ); cprintf( "x" );
 | 
			
		||||
 gotoxy(  2, 22 ); cprintf( "x" );
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct
 | 
			
		||||
{
 | 
			
		||||
 char Directorios;
 | 
			
		||||
 char Ruta;
 | 
			
		||||
 | 
			
		||||
} CONFIG;
 | 
			
		||||
 | 
			
		||||
CONFIG config;
 | 
			
		||||
 | 
			
		||||
void MuestraDirectorios( int DirInicio );
 | 
			
		||||
void LeeConstruyeDir(char *NArchivo);
 | 
			
		||||
 | 
			
		||||
void main(void)
 | 
			
		||||
{
 | 
			
		||||
 int ok;
 | 
			
		||||
 DibujaPantalla();
 | 
			
		||||
 | 
			
		||||
 char CurrRowDir;
 | 
			
		||||
 int  CurrTrnDir;
 | 
			
		||||
 | 
			
		||||
 ConstruyeDir("i1.idm");
 | 
			
		||||
 | 
			
		||||
 CurrRowDir = 0;
 | 
			
		||||
 CurrTrnDir = 0;
 | 
			
		||||
 if ( config.Directorios )
 | 
			
		||||
  MuestraDirectorios( CurrRowDir + CurrTrnDir );
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user