commit 985e2b64cca6cadba3b79c98694358c854d8a08e Author: jdg <jd@infdj.com> Date: Wed Sep 8 21:23:56 2021 +0200 First commit 20/09/1997 diff --git a/BONITRON.CPP b/BONITRON.CPP new file mode 100644 index 0000000..9132ad2 --- /dev/null +++ b/BONITRON.CPP @@ -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 ); + +} + + + + + diff --git a/BONITRON.EXE b/BONITRON.EXE new file mode 100644 index 0000000..0c3e5f5 Binary files /dev/null and b/BONITRON.EXE differ diff --git a/CDA.IDM b/CDA.IDM new file mode 100644 index 0000000..3113975 Binary files /dev/null and b/CDA.IDM differ diff --git a/I1.IDM b/I1.IDM new file mode 100644 index 0000000..aa02bb2 Binary files /dev/null and b/I1.IDM differ diff --git a/INDEXM.CPP b/INDEXM.CPP new file mode 100644 index 0000000..cb1da6f --- /dev/null +++ b/INDEXM.CPP @@ -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;*/ +} diff --git a/INDEXM.EXE b/INDEXM.EXE new file mode 100644 index 0000000..234b875 Binary files /dev/null and b/INDEXM.EXE differ diff --git a/LEEIDX.CPP b/LEEIDX.CPP new file mode 100644 index 0000000..d6de511 --- /dev/null +++ b/LEEIDX.CPP @@ -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 ); + +} + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..ae9f90a --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +#INDEXM + + +*20/09/1997* + +ToDo: wwtcf? + + +