First commit 20/09/1997
This commit is contained in:
commit
985e2b64cc
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‚ David Guill‚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¡a un espacio, ni un caracter de los anteriores
|
||||||
|
// me parece mas est‚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¢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ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ Nombre Tama¤o ³ Nombre Tama¤o " );
|
||||||
|
cprintf( " ³ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ" );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( "ÚxÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿" );
|
||||||
|
cprintf( "³ ³" );
|
||||||
|
cprintf( "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ" );
|
||||||
|
|
||||||
|
textcolor( YELLOW );
|
||||||
|
gotoxy( 31 , 1 ); cprintf( "Nombre Tama¤o" );
|
||||||
|
gotoxy( 57, 1 ); cprintf( "Nombre Tama¤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 ? '-' : '+' : 'ú', 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( " ³ " );
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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 ? '-' : '+' : 'ú', MI.ff_name );
|
||||||
|
RowFisica++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
window(1, 1, 80, 24);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************\
|
||||||
|
|* *|
|
||||||
|
|* ContraeExpandeRama *|
|
||||||
|
|* *|
|
||||||
|
|* Descripci¢n: *|
|
||||||
|
|* Contrae o expande la rama seg£n el par metro y apartir del *|
|
||||||
|
|* punto indicado... *|
|
||||||
|
|* *|
|
||||||
|
|* Entradas: Puntero al inicio de la expanci¢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++;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
//
|
||||||
|
// ÜÜÜÜ ÜÜÜÜ ÜÜÜ Ü Ü ÜÜ ÜÜÜ ÜÜÜ ÜÜ Ü ÜÜÜÜ Ü Ü ÜÜÜÜÜ
|
||||||
|
// Û Û Û Û Û ÛßÜßÛ Û Û Û Û Û Û Û Û Û ÛÛ Û Û
|
||||||
|
// Ûßß Û Û ÛÛß Û Û ÛßßÛ Û Ûß ÛßßÛ Ü Ü Û Û Û Û Û Û Û ÜÜÜ
|
||||||
|
// Û Û Û Û Û Û Û Û Û Û Û Û Û Û Û ßß Û Û Û Û ÛÛ Û Û
|
||||||
|
// ß ßßßß ß ß ß ß ß ß ß ßßß ß ß ßßß ßßßß ßßßß ß ß ßßßßß
|
||||||
|
*/
|
||||||
|
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ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ Nombre Tama¤o ³ Nombre Tama¤o " );
|
||||||
|
cprintf( " ³ ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ" );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( " ³ ³ " );
|
||||||
|
cprintf( "ÚxÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿" );
|
||||||
|
cprintf( "³ ³" );
|
||||||
|
cprintf( "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ" );
|
||||||
|
|
||||||
|
textcolor( YELLOW );
|
||||||
|
gotoxy( 31 , 1 ); cprintf( "Nombre Tama¤o" );
|
||||||
|
gotoxy( 57, 1 ); cprintf( "Nombre Tama¤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 );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user