jdir/JDIR.CPP
2021-09-08 21:24:42 +02:00

1016 lines
35 KiB
C++
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*////////////////////////////////////////////////////////////////////////*\*/
/*
/// Nombre: JDIR .CPP ///
/// Modulo: ///
/// Descripci¢n: Dir especial, para mostrar en color los archivos ///
/// ///
/// Autor: Jos David Guilln Dominguez ///
/// Fecha: 06 - 07 - 1995 ///
/// 05 - 11 - 1995 ( fixed bugs ) ///
/// 19 - 12 - 1995 ( re_coded all ) ///
/// ///
/// Comentario: ///
/// ///
/// ///
/// ///
/// Compilador Borland C++ 3.0 ///
*/
/* //////////////////////////////////////////////////////////////////////// */
#include <io.h>
#include <dir.h>
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "Jdirect.h" /*para funciones de acceso a directorio*/
#define MAXLDIR 90 /*longitud m xima nombre directorio*/
#define UNA_COLUMNA 1
#define DOS_COLUMNAS 2
#define TRES_COLUMNAS 3
#define CUATRO_COLUMNAS 4
#define CINCO_COLUMNAS 5
#define SEIS_COLUMNAS 6
#define POR_TAMANYO 1
#define POR_NOMBRE 2
#define POR_EXTENCION 3
void Help( void );
void Que_Color( void );
void Muestra_Archivos( int Columnas );
void CargaDatosFich( FileInfo far *fp );
void informe_final( char Unidad, char tipo );
void formatea_u_long( unsigned long Numero, char *Inter_Chg );
int Carga_Archivos( char *Comodin, int atr );
char Rellena_path( char *path, char *half_path );
int sort_function( const void far *a, const void far *b );
unsigned int Numero_Archivos = 0, Numero_rArchivos = 0;
unsigned long Espacio_T_consumido, Espacio_Tr_consumido = 0;
char Directorio, oculto;
FileInfo far *fi, far *fi_TMP, ftmp;
long Longitud, L1, L2;
char BufferA[13], BufferB[13];
char Nombre_archivo[13], Extension[5], Fecha_Larga[10], Fecha_Corta[10],
HORA[10], ATRIBUTO_L[10], ATRIBUTO_C[6], Columnas;
int Ordenado;
char Recursivo = 0, NoPausar = 0, Buffer[255];
// ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
// ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
// ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
// ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
void EsperarTecla(void)
{
if ( !NoPausar )
{
textcolor(YELLOW);
cprintf("< Presione una tecla para continuar >\r");
while( !kbhit() ); getch();
cprintf(" \r");
}
};
void RestaurarEntorno()
{
char *p;
if ( ( p = getenv("JD_DIR") ) == NULL )
{
Columnas = TRES_COLUMNAS; Ordenado = POR_NOMBRE;
} else {
switch( p[0] )
{
case 'N': Ordenado = POR_NOMBRE; break;
case 'E': Ordenado = POR_EXTENCION; break;
case 'S': Ordenado = POR_TAMANYO; break;
default: Ordenado = POR_NOMBRE; break;
}
if ( ( p[1] - '0' ) > 0 && ( p[1] - '0' ) <= 6 ) Columnas = ( p[1] - '0' );
}
};
int ProcesarLineaComandos( int argc, char *argv[] )
{
char i, cont; /* Contador de par metro */
cont = 0;
for(i = 1; i != argc; i++)
if ( *argv[i] == '/' ) /* Comandos internos */
{
if ( *(argv[i]+1) >= '1' && *(argv[i]+1) <= '6' ) Columnas = *(argv[i]+1) - '0';
if ( *(argv[i]+1) == 'e' || *(argv[i]+1) == 'E' ) Ordenado = POR_EXTENCION;
if ( *(argv[i]+1) == 's' || *(argv[i]+1) == 'S' ) Ordenado = POR_TAMANYO;
if ( *(argv[i]+1) == 'r' || *(argv[i]+1) == 'R' )
{
Recursivo = 1;
if ( *(argv[i]+2) == 'c' || *(argv[i]+1) == 'C' )
NoPausar = 1;
}
if ( *(argv[i]+1) == 'c' || *(argv[i]+1) == 'C' ) NoPausar = 1;
if ( *(argv[i]+1) == '?' ) { Help(); return -1; }
cont++;
}
if ( argc == 1 ) argc = 2; else
if ( cont == argc -1 ) { strcpy( argv[1], "*.*"); }
return argc;
};
void MuestraDirectorio( char *path ) // DEBE SER UN PATH COMPLETO
{
int Entrada, i;
textcolor(CYAN); cprintf("Path: %s\r\n", path );
if ( Carga_Archivos( path, 0xF7 ) != -1 )
{
qsort((void *)fi, Numero_Archivos, sizeof(FileInfo), sort_function);
Muestra_Archivos( Columnas ); informe_final( path[0]-'A' , 0);
Espacio_Tr_consumido += Espacio_T_consumido; Numero_rArchivos += Numero_Archivos;
}
if ( Recursivo )
{
// BEGIN 05-10-99
fnsplit(path,ATRIBUTO_C,Buffer,Nombre_archivo,Extension);
fnmerge(path,ATRIBUTO_C,Buffer,"*","*");
// END 05-10-99
if ( Carga_Archivos( path, 0x10 ) == -1 ) return;
if ( strcmp( fi[1].name, ".." ) == 0 ) Entrada = 2; else Entrada = 0;
for( ; Entrada < Numero_Archivos; Entrada++)
{
// BEGIN 05-10-99 (NULL,NULL)
fnsplit(path,ATRIBUTO_C,Buffer, NULL,NULL ); //Nombre_archivo,Extension);
// END 05-10-99
strcat( Buffer, fi[Entrada].name );
fnmerge(path,ATRIBUTO_C,Buffer,Nombre_archivo,Extension);
EsperarTecla();
MuestraDirectorio( path );
// BEGIN 05-10-99 (NULL,NULL)
fnsplit(path,ATRIBUTO_C,Buffer, NULL, NULL );//Nombre_archivo,Extension);
// END 05-10-99
i = strlen( Buffer );
while ( i > 1 && Buffer[--i] != '\\' );
if ( Buffer[i-1] != '\0' ) while ( i > 1 && Buffer[--i] != '\\' ); Buffer[i] = '\0';
// BEGIN 05-10-99 ("*","*")
fnmerge(path,ATRIBUTO_C,Buffer, "*", "*" );//Nombre_archivo,Extension);
// END 05-10-99
if ( Carga_Archivos( path, 0x10 ) == -1 ) return;
}
}
};
/********************************************************************
* main
********************************************************************/
void main(int argc, char *argv[])
{
char i, path[255];
highvideo(); textcolor(YELLOW); cprintf("\r\nJD_Dir\r\n");
RestaurarEntorno();
argc = ProcesarLineaComandos( argc, argv );
for(i = 1; i < argc; i++)
if ( *argv[i] != '/' ) // Filtramos los comandos internos
{
Rellena_path( path, argv[i] );
MuestraDirectorio( path );
informe_final( path[0]-'A', 1);
}
}
/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/
/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/
/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/
/*ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ*/
int Carga_Archivos(char *Comodin, int atr )
{
int contador;
farfree(fi);
if( (fi = (FileInfo far *)farcalloc(50, sizeof(FileInfo) )) == NULL )
{
textcolor(BLUE); cprintf("\r\nError buscando memoria.\r\n");
normvideo(); textcolor(LIGHTGRAY); return -1;
}
Espacio_T_consumido = 0;
Numero_Archivos = contador = 0;
if ( findfirst(Comodin, &ftmp, atr) != 0)
{
textcolor(LIGHTGREEN); cprintf("Fichero/s no encontrado/s\n\r");
textcolor(LIGHTGRAY);
cprintf("\r\n"); return -1;
}
{
fi[Numero_Archivos] = ftmp;
Numero_Archivos++;
while (findnext(&ftmp) == 0)
{
if ( atr != 0x10 || ftmp.atrib & atr )
{
fi[Numero_Archivos] = ftmp;
Numero_Archivos++;
contador++;
if(contador==49)
{
if( ( fi = (FileInfo far *)farrealloc(fi, sizeof(FileInfo)*(Numero_Archivos + 50) ) )==NULL )
{
textcolor(BLUE); cprintf("\r\nError buscando memoria.\r\n");
normvideo(); textcolor(WHITE);
return -1;
}
contador = 0;
}
}
}
}
return 0;
}
void Muestra_Archivos( int Columnas )
{
int i, lineas = 0, PartCol;
//char Buffer[80];
textcolor(BLUE);
switch( Columnas )
{
case 1:
cprintf("ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ");
for(i=0; i < Numero_Archivos; i++)
{
CargaDatosFich(&fi[i]);
Que_Color(); cprintf("%s", Nombre_archivo);
if( Directorio ) cprintf(" <dir> ");
else
{
textcolor(YELLOW); formatea_u_long( (unsigned long) Longitud, Buffer );
cprintf(" %11s", Buffer );
}
textcolor(CYAN); cprintf(" %s ", Fecha_Larga);
textcolor(LIGHTBLUE); cprintf("%s", HORA);
textcolor(BLUE); cprintf("%s\r\n", ATRIBUTO_L);
lineas++;
if(lineas==21)
{
EsperarTecla();
lineas = 0;
}
}
textcolor(BLUE);
cprintf("ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ");
break;
case TRES_COLUMNAS:
cprintf("ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ");
PartCol = (Numero_Archivos/3);
PartCol += ( ( Numero_Archivos - (PartCol*3) )!=0 ? 1: 0 );
for(i=0; i < PartCol; i++)
{
/* /////////////////////// Columna 1*/
if ( i < Numero_Archivos )
{
CargaDatosFich(&fi[i]);
Que_Color(); cprintf("%s", Nombre_archivo);
if( Directorio ) cprintf(" <dir> "); else
{
textcolor(YELLOW); formatea_u_long( (unsigned long) Longitud, Buffer );
cprintf(" %11s ", Buffer );
}
}
/* /////////////////////// Columna 2*/
if( (i+PartCol) < Numero_Archivos )
{
CargaDatosFich(&fi[i+PartCol]);
textcolor(BLUE); cprintf("³");
Que_Color(); cprintf(" %s", Nombre_archivo);
if( Directorio ) cprintf(" <dir> "); else
{
textcolor(YELLOW); formatea_u_long( (unsigned long) Longitud, Buffer );
cprintf(" %11s ", Buffer );
}
/* /////////////////////// Columna 3*/
if( (i+(PartCol*2)) < Numero_Archivos )
{
CargaDatosFich(&fi[i+(PartCol*2)]);
textcolor(BLUE); cprintf("³");
Que_Color(); cprintf(" %s", Nombre_archivo);
if( Directorio ) cprintf(" <dir> \r\n"); else
{
textcolor(YELLOW); formatea_u_long( (unsigned long) Longitud, Buffer );
cprintf(" %11s\r\n", Buffer );
}
} else { textcolor(BLUE); cprintf("³\r\n"); }
} else { textcolor(BLUE);
strcpy( BufferA, "³ ³\r\n");
cprintf("%s", BufferA);
}
lineas++;
if(lineas==21)
{
EsperarTecla();
lineas = 0;
/*
cprintf("< Presione una tecla para continuar >");
while( !kbhit() ); getch(); lineas = 0;
cprintf("\r\n");
*/
}
}
textcolor(BLUE);
cprintf("ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ");
break;
case CUATRO_COLUMNAS:
cprintf("ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ");
PartCol = (Numero_Archivos/4);
PartCol += ( ( Numero_Archivos - (PartCol*4) )!=0 ? 1: 0 );
for(i=0; i < PartCol; i++)
{
/* /////////////////////// Columna 1*/
if ( i < Numero_Archivos )
{
CargaDatosFich(&fi[i]);
Que_Color(); cprintf("%s", Nombre_archivo);
if( Directorio ) cprintf(" <dir> "); else
{
textcolor(YELLOW); cprintf("% 7ld", Longitud );
}
}
/* /////////////////////// Columna 2*/
if( (i+PartCol) < Numero_Archivos )
{
CargaDatosFich(&fi[i+PartCol]);
textcolor(BLUE); cprintf("³");
Que_Color(); cprintf("%s", Nombre_archivo);
if( Directorio ) cprintf(" <dir> "); else
{
textcolor(YELLOW); cprintf("% 7ld", Longitud );
}
/* /////////////////////// Columna 3*/
if( (i+(PartCol*2)) < Numero_Archivos )
{
CargaDatosFich(&fi[i+(PartCol*2)]);
textcolor(BLUE); cprintf("³");
Que_Color(); cprintf("%s", Nombre_archivo);
if( Directorio ) cprintf(" <dir> "); else
{
textcolor(YELLOW); cprintf("% 7ld", Longitud );
}
/* /////////////////////// Columna 4 */
if( (i+(PartCol*3)) < Numero_Archivos )
{
CargaDatosFich(&fi[i+(PartCol*3)]);
textcolor(BLUE); cprintf("³");
Que_Color(); cprintf("%s", Nombre_archivo);
if( Directorio ) cprintf(" <dir> \r\n"); else
{
textcolor(YELLOW); cprintf("% 7ld\r\n", Longitud );
}
} else { textcolor(BLUE); cprintf("³\r\n"); }
} else { textcolor(BLUE);
cprintf("³ ³ ³\r\n");
}
} else { textcolor(BLUE);
cprintf("³ ³ ³ \r\n");
}
lineas++;
if(lineas==21)
{
EsperarTecla();
lineas = 0;
/*
cprintf("< Presione una tecla para continuar >");
while( !kbhit() ); getch(); lineas = 0;
cprintf("\r\n");
*/
}
}
textcolor(BLUE);
cprintf("ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ");
break;
case CINCO_COLUMNAS:
cprintf("ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄ");
PartCol = (Numero_Archivos/5);
PartCol += ( ( Numero_Archivos - (PartCol*5) )!=0 ? 1: 0 );
for(i=0; i < PartCol; i++)
{
/* /////////////////////// Columna 1 */
if ( i < Numero_Archivos )
{
CargaDatosFich(&fi[i]);
Que_Color(); cprintf("%s", Nombre_archivo);
if( Directorio ) cprintf(" D"); else cprintf(" ");
}
/* /////////////////////// Columna 2*/
if( (i+PartCol) < Numero_Archivos )
{
CargaDatosFich(&fi[i+PartCol]);
textcolor(BLUE); cprintf("³ ");
Que_Color(); cprintf("%s", Nombre_archivo);
if( Directorio ) cprintf(" D"); else cprintf(" ");
/* /////////////////////// Columna 3*/
if( (i+(PartCol*2)) < Numero_Archivos )
{
CargaDatosFich(&fi[i+(PartCol*2)]);
textcolor(BLUE); cprintf("³ ");
Que_Color(); cprintf("%s", Nombre_archivo);
if( Directorio ) cprintf(" D"); else cprintf(" ");
/* /////////////////////// Columna 4*/
if( (i+(PartCol*3)) < Numero_Archivos )
{
CargaDatosFich(&fi[i+(PartCol*3)]);
textcolor(BLUE); cprintf("³ ");
Que_Color(); cprintf("%s", Nombre_archivo);
if( Directorio ) cprintf(" D"); else cprintf(" ");
/* /////////////////////// Columna 5*/
if( (i+(PartCol*4)) < Numero_Archivos )
{
CargaDatosFich(&fi[i+(PartCol*4)]);
textcolor(BLUE); cprintf("³ ");
Que_Color(); cprintf("%s", Nombre_archivo);
if( Directorio ) cprintf(" D\r"); else cprintf(" \r");
} else { textcolor(BLUE); cprintf("³\r\n"); }
} else { textcolor(BLUE);
cprintf("³ ³\r\n");
}
} else { textcolor(BLUE);
cprintf("³ ³ ³\r\n");
}
} else { textcolor(BLUE);
cprintf("³ ³ ³ ³\r\n");
}
lineas++;
if(lineas==21)
{
EsperarTecla();
lineas = 0;
/*
cprintf("< Presione una tecla para continuar >");
while( !kbhit() ); getch(); lineas = 0;
cprintf("\r\n");
*/
}
}
textcolor(BLUE);
cprintf("ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄ");
break;
case SEIS_COLUMNAS:
/* // 12345678.123 12345678.123 12345678.123 12345678.123 12345678.123 12345678.123*/
cprintf(" ÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄ\r\n");
PartCol = (Numero_Archivos/6);
PartCol += ( ( Numero_Archivos - (PartCol*6) )!=0 ? 1: 0 );
for(i=0; i < PartCol; i++)
{
/* /////////////////////// Columna 1 */
if ( i < Numero_Archivos )
{
CargaDatosFich(&fi[i]);
Que_Color(); cprintf(" %s", Nombre_archivo);
}
/* /////////////////////// Columna 2*/
if( (i+PartCol) < Numero_Archivos )
{
CargaDatosFich(&fi[i+PartCol]);
Que_Color(); cprintf(" %s", Nombre_archivo);
/* /////////////////////// Columna 3 */
if( (i+(PartCol*2)) < Numero_Archivos )
{
CargaDatosFich(&fi[i+(PartCol*2)]);
Que_Color(); cprintf(" %s", Nombre_archivo);
/* /////////////////////// Columna 4*/
if( (i+(PartCol*3)) < Numero_Archivos )
{
CargaDatosFich(&fi[i+(PartCol*3)]);
Que_Color(); cprintf(" %s", Nombre_archivo);
/* /////////////////////// Columna 5*/
if( (i+(PartCol*4)) < Numero_Archivos )
{
CargaDatosFich(&fi[i+(PartCol*4)]);
Que_Color(); cprintf(" %s", Nombre_archivo);
/* /////////////////////// Columna 6*/
if( (i+(PartCol*5)) < Numero_Archivos )
{
CargaDatosFich(&fi[i+(PartCol*5)]);
Que_Color(); cprintf(" %s", Nombre_archivo);
}
}
}
}
}
cprintf("\r\n");
lineas++;
if(lineas==21)
{
EsperarTecla();
lineas = 0;
}
}
textcolor(BLUE);
cprintf(" ÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄ ÄÄÄÄÄÄÄÄÄÄÄÄ");
break;
default:
break;
}
}
/********************************************************************\
|* MuestraDatosFich: datos sobre el fichero *fi. *|
\********************************************************************/
void CargaDatosFich(FileInfo far *fp)
{
static char *meses[] = { "Ene", "Feb", "Mar", "Abr", "May", "Jun",
"Jul", "Ago", "Sep", "Oct", "Nov", "Dic" };
char n[13]; /*nombre*/
char s[4]; /*y sufijo*/
char *p;
/*_f*/strcpy(n,fp->name); /*copia nombre <2>*/
s[0] = 0; /*ning£n sufijo*/
p = strchr(n,'.'); /*busca separador*/
if (p != NULL && p > n) { /*si lo encuentra <3>*/
*p = 0; /*termina nombre en n[]*/
strcpy(s,p+1); /*y copia sufijo*/
}
sprintf(Nombre_archivo, "%-9s%-3s",n,s);
sprintf(Extension, "%s", s);
if (fp->atrib & FA_DIREC) { /*si directorio <4>*/
Directorio = 1;
} else { /*si fichero normal*/
Directorio = 0;
Longitud = fp -> size;
Espacio_T_consumido += Longitud;
}
if( fp->date.month-1 >=1 && fp->date.month-1 <= 12 )
sprintf(Fecha_Larga, "%2d %3s %2d",fp->date.day, /*muestra fecha <6>*/
meses[fp->date.month-1],fp->date.year+80);
if( fp->date.month-1 >=1 && fp->date.month-1 <= 12 )
sprintf(Fecha_Corta, "% 2d-% 2d-% 2d",fp->date.day, /*muestra fecha <6>*/
fp->date.month,fp->date.year+80);
sprintf(HORA, "%2d:%02d:%02d ",fp->time.hours, /*muestra hora*/
fp->time.min,fp->time.sec*2);
if (fp->atrib & FA_SYSTEM) { /*muestra atributos <7>*/
strcpy(ATRIBUTO_L, "System ");
strcpy(ATRIBUTO_C, "S");
} else {
strcpy(ATRIBUTO_L, " ");
strcpy(ATRIBUTO_C, " ");
}
if (fp->atrib & FA_HIDDEN) {
strcpy(ATRIBUTO_L, "Oculto ");
strcpy(ATRIBUTO_C, "O");
oculto = 1;
} else {
oculto = 0;
strcpy(ATRIBUTO_L, " ");
strcpy(ATRIBUTO_C, " ");
}
if (fp->atrib & FA_RDONLY) {
strcpy(ATRIBUTO_L, "Protegido ");
strcpy(ATRIBUTO_C, "P");
}
}
void Que_Color(void)
{
/*// Todo lo que este oculto*/
if ( oculto ) { textcolor(GREEN); return; }
/*// Directorios*/
if ( Directorio ) { textcolor(LIGHTMAGENTA); return; }
/*// Ejecutables *.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; }
if ( !strcmpi(Extension, "RTF") ) { 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; }
if ( !strcmpi(Extension, "MP1") ) { textcolor(BLUE); return; }
if ( !strcmpi(Extension, "MP2") ) { textcolor(BLUE); return; }
if ( !strcmpi(Extension, "MP3") ) { textcolor(BLUE); return; }
if ( !strcmpi(Extension, "QPV") ) { 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 Help(void)
{
int i;
clrscr(); textcolor(WHITE); textbackground(BLUE);
cprintf("Copyright (c) J.D. Soft. 1994-98. Jos David Guilln Dominguez... JD_DIR vú2.5");
textbackground(BLACK);
textcolor(LIGHTBLUE);
for ( i=2; i<12; i++ )
{
gotoxy(1,i); cprintf("³"); gotoxy(80,i); cprintf("³");
}
textcolor(BLUE); gotoxy(1,12); cprintf("³"); gotoxy(80,12); cprintf("³");
textcolor(LIGHTBLUE);
gotoxy(1,13); cprintf("³"); gotoxy(80,13); cprintf("³");
gotoxy(1,14); cprintf("³"); gotoxy(80,14); cprintf("³");
textcolor(BLUE);
gotoxy(1,15); cprintf("³"); gotoxy(80,15); cprintf("³");
gotoxy(1,16); cprintf("³"); gotoxy(80,16); cprintf("³");
textcolor(LIGHTBLUE); gotoxy(1,17); cprintf("³"); gotoxy(80,17); cprintf("³");
textcolor(BLUE);
for ( i=18; i<22; i++ )
{
gotoxy(1,i); cprintf("³"); gotoxy(80,i); cprintf("³\r\n");
}
gotoxy(1,23); cprintf("³"); gotoxy(80,23); cprintf("³");
textcolor(DARKGRAY); gotoxy(60,15); cprintf(" Ü ßÜ Û ß ");
gotoxy(60,16); cprintf(" ßÜ ß ß ß");
gotoxy(60,17); cprintf(" Ü ßÜ ß °°°°°°");
gotoxy(60,18); cprintf(" ßßÜ ß °°°±±±±±±");
gotoxy(60,19); cprintf("ÜÜ ß °°°±±±±²²²²²");
gotoxy(60,20); cprintf(" ßÜ °°±±±±²²²ÛÛÛÛÛ");
gotoxy(60,21); cprintf("ßÜÜ °±±±²²²ÛÛÛÛÛÛÛÛ");
gotoxy(60,22); cprintf(" °±±²²ÛÛÛÛÛÛÛÛß ");
gotoxy(60,23); cprintf("ßß °°±²²ÛÛÛÛÛÛÛÛ ");
textcolor(YELLOW); gotoxy( 2,15); cprintf("Par metros:");
gotoxy( 2,16); cprintf(" /# N£mero de columnas [1,3,4,5,6]");
gotoxy( 2,17); cprintf(" /S ¢ /E Ordenar por Tam¤o ¢ Extensi¢n");
gotoxy( 2,18); cprintf(" /R[c] Recursivo [Sin realizar pausas]");
textcolor(RED); gotoxy( 2,20); cprintf(" þPara configurar la ordenaci¢n y columnas por defecto");
gotoxy( 2,21); cprintf(" puedes usar la variable de entorno 'JD_DIR'");
textcolor(YELLOW); gotoxy( 2,22); cprintf(" --> set JD_DIR=[Ordenacion>N|S|E][Columnas]");
textcolor(LIGHTRED); gotoxy( 3,4); cprintf("Rev.5");
textcolor(RED); gotoxy( 3,5); cprintf("Dedico el par metro /R a OSCAR, al fin y al cabo");
gotoxy( 3,6); cprintf("lo puse por l.");
textcolor(LIGHTRED);
gotoxy(55, 4); cprintf("Saludos a:");
textcolor(RED);
gotoxy(56, 5); cprintf("Alvaro Joshua Marcial");
gotoxy(56, 6); cprintf("Israel Millan Oscar ");
gotoxy(56, 7); cprintf("Lopez VD Zapper ");
gotoxy(56, 8); cprintf("Manolo Carlos Fernan ");
textcolor(LIGHTRED);
gotoxy(55,10); cprintf("Y a todos a los que no ");
gotoxy(55,11); cprintf("recuerdo ahora mismo ;-)");
textcolor(WHITE);
gotoxy(20, 6); cprintf( " __ ");
gotoxy(10, 7); cprintf( " ____ / / \\ ");
gotoxy(10, 8); cprintf( " / /³ ÛßßÜ /| ");
gotoxy(10, 9); cprintf( " ßßßÛ | Û Û/ ___---ÜÜ ");
gotoxy(10,10); cprintf( " //\\Û ³_ÛÜÜß ùù ÜÜßßï ");
gotoxy(10,11); cprintf( " __ßÜÜß/ ÜÜÜßßï ___ ");
gotoxy(10,12); cprintf( " ù-__ ÜÜßßßï ,-, | ");
gotoxy(10,13); cprintf( " / ÜÜßßï /-- /ù\\ |_ | .");
gotoxy(10,14); cprintf( " ùßß ù-, \\_/ | ");
gotoxy(10,15); cprintf( " --ï ");
/*
__
____ / / \
/ /³ ÛßßÜ /|
ßßßÛ | Û Û/ ___---ÜÜ
//\Û ³_ÛÜÜß ùù ÜÜßßï
__ßÜÜß/ ÜÜÜßßï /
ù-__ ÜÜßßßï ,/\ /^\
/ ÜÜßßï ,/ ï\ `\ `\
ùßß \/ï\ `\/ï
*/
/*
__
____ / / \
/ /³ ÛßßÜ /|
ßßßÛ | Û Û/ ___---ÜÜ
//\Û ³_ÛÜÜß ùù ÜÜßßï
__ßÜÜß/ ÜÜÜßßï ___
ù-__ ÜÜßßßï ,-, |
/ ÜÜßßï /-- /ù\ |_ | .
ùßß ù-, \_/ |
--ï
*/
gotoxy(1,24);
}
/*
//
// ÜÜÜÜ ÜÜÜÜ ÜÜÜ Ü Ü ÜÜ ÜÜÜ ÜÜÜ ÜÜ Ü ÜÜÜÜ Ü Ü ÜÜÜÜÜ
// Û Û Û Û Û ÛßÜßÛ Û Û Û Û Û Û Û Û Û ÛÛ Û Û
// Ûßß Û Û ÛÛß Û Û ÛßßÛ Û Ûß ÛßßÛ Ü Ü Û Û Û Û Û Û Û ÜÜÜ
// Û Û Û Û Û Û Û Û Û Û Û Û Û Û Û ßß Û Û Û Û ÛÛ Û Û
// ß ßßßß ß ß ß ß ß ß ß ßßß ß ß ßßß ßßßß ßßßß ß ß ßßßßß
*/
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;*/
}
/*
//
// ÜÜÜÜÜ Ü Ü ÜÜÜÜ ÜÜÜÜÜ ÜÜÜÜ Ü Ü ÜÜÜÜ ÜÜÜÜ ÜÜÜÜÜ Ü Ü ÜÜÜ Ü
// Û ÛÛ Û Û Û Û Û Û ÛßÜßÛ Û Û Û ÛÛ Û Û Û Û
// Û Û Û Û Ûßß Û Û ÛßÛß Û Û Ûßß Ûßß Û Û Û Û ÛßßßÛ Û
// Û Û ÛÛ Û Û Û Û Û Û Û Û Û Û Û ÛÛ Û Û Û
// ßßßßß ß ß ß ßßßßß ß ß ß ß ßßßß ß ßßßßß ß ß ß ß ßßßß
*/
void informe_final(char Unidad, char tipo)
{
int unidad; /*unidad a examinar (0=A:, 1=B:, etc.)*/
union REGS r; /*registros para llamada a DOS*/
long ctot; /*n£mero total clusters en el disco <1>*/
unsigned int clib; /*n£mero de clusters libres*/
int scl; /*n£mero de sectores por cluster*/
unsigned long bcl; /*n£mero de bytes por cluster*/
long btot; /*n£mero de bytes totales <2>*/
long blib; /*n£mero de bytes libres*/
char Buffer[80];
char ID_Volumen[13] = "JD ComputeR";
float E_Total;
if ( (unidad = Unidad) == -1 )
unidad = bdos(0x19,0,0); /*utiliza actual */;
r.h.ah = 0x36; /*Get Disk Free Space*/
r.h.dl = unidad+1;
intdos(&r,&r); /*llama a DOS <6>*/
scl = r.x.ax; /*sectores por cluster*/
bcl = (long)scl*r.x.cx; /*bytes por cluster*/
ctot = r.x.dx; /*clusters total*/
clib = r.x.bx; /*clusters libres*/
if ( tipo == 0 )
{
textcolor(YELLOW); cprintf("%13d", Numero_Archivos);
textcolor(LIGHTBLUE); cprintf(" Archivo/s, consumen un total de ");
textcolor(YELLOW); formatea_u_long(Espacio_T_consumido, Buffer);
cprintf("%s", Buffer );
textcolor(LIGHTBLUE); cprintf(" bytes");
if ( Recursivo ) cprintf( "\r\n" );
} else {
if ( Recursivo )
{
textcolor(YELLOW); cprintf("\n\r%13d", Numero_rArchivos);
textcolor(LIGHTBLUE); cprintf(" Archivo/s, consumen un TOTAL de ");
textcolor(YELLOW);
if ( Espacio_Tr_consumido > 1048576 )
{
sprintf( Buffer, "%.2f", (float)Espacio_Tr_consumido/1048576 );
} else
formatea_u_long(Espacio_Tr_consumido, Buffer);
cprintf("%s", Buffer );
textcolor(LIGHTBLUE);
if ( Espacio_Tr_consumido > 1048576 )
cprintf(" Mbytes");
else
cprintf(" bytes");
}
textcolor(LIGHTBLUE); cprintf(" de ");
E_Total = ( ( (float)(ctot*bcl) ) / 1048576 );
textcolor(YELLOW); cprintf("%.1f", E_Total );
textcolor(LIGHTBLUE); cprintf(" Mbytes\r\n"); /*\n*/
textcolor(YELLOW); formatea_u_long( (unsigned long)(clib*bcl), Buffer );
cprintf("%13s", Buffer );
textcolor(LIGHTBLUE); cprintf(" bytes de espacio libre en ");
textcolor(YELLOW); cprintf("%c:", (unidad + 65) );
textcolor(LIGHTBLUE); cprintf(" Volumen:");
sprintf( ID_Volumen, "%c:\*.*", (unidad + 65) );
findfirst( ID_Volumen, &fi[0], FA_LABEL );
if ( fi[0].atrib & FA_LABEL )
{
strncpy( ID_Volumen, fi[0].name, 8 ); ID_Volumen[8] = '\0';
Buffer[0]=0;
while( ID_Volumen[Buffer[0]] != NULL && Buffer[0]<8) Buffer[0]++;
if ( Buffer[0]==8 )
strncat( ID_Volumen, &(fi[0].name[9]), 3);
textcolor(LIGHTRED); cprintf(" %s", ID_Volumen );
}
textcolor(LIGHTGRAY);
cprintf("\r\n");
}
}
int sort_function( const void far *a, const void far *b)
{
switch( Ordenado ){
case POR_NOMBRE:
fi_TMP = (FileInfo *)a;
/*_f*/strncpy( BufferA, fi_TMP -> name, 12);
fi_TMP = (FileInfo *)b;
/*_f*/strncpy( BufferB, fi_TMP -> name, 12);
BufferA[12] = '\0';
BufferB[12] = '\0';
return( strcmp(BufferA, BufferB) );
case POR_TAMANYO:
fi_TMP = (FileInfo *)a; L1 = fi_TMP -> size;
fi_TMP = (FileInfo *)b; L2 = fi_TMP -> size;
if ( L1 < L2 ) return -1;
if ( L1 == L2 ) return 0;
if ( L1 > L2 ) return 1;
break;
case POR_EXTENCION:
fi_TMP = (FileInfo *)a;
/*_f*/strncpy( BufferA, strrev(fi_TMP -> name), 3);
strrev(fi_TMP -> name);
fi_TMP = (FileInfo *)b;
/*_f*/strncpy( BufferB, strrev(fi_TMP -> name), 3);
strrev(fi_TMP -> name);
BufferA[3] = '\0'; BufferB[3] = '\0';
strrev(BufferA); strrev(BufferB);
return( strcmp(BufferA, BufferB) );
}
return 0;
}
char Rellena_path( char *path, char *half_path )
{
char unidad[5], directorio[255], nombre[15], ext[6], flags;
char *ptr, cont, Buffer[255];
flags = fnsplit( half_path, unidad, directorio, nombre, ext );
*unidad = toupper( *unidad );
if ( !(flags & DRIVE) ) *unidad=getdisk() + 'A';
if ( !(flags & DIRECTORY) )
{
if ( getcurdir( *unidad - 'A'+ 1, Buffer ) != -1 )
sprintf( directorio, "\\%s", Buffer );
else
sprintf( directorio, "\\NO ESTA DISPONIBLE" );
}
if ( strcmp( directorio, ":") == 0 )
strcpy( directorio, "\\");
if ( !(flags & FILENAME) ) { strcpy( nombre, "*"); strcpy( ext, ".*"); }
fnmerge( path, unidad, directorio, nombre, ext );
if ( strchr( path, '*' ) == NULL && strchr( path, '?' ) == NULL &&
findfirst( path, &ftmp, (FA_HIDDEN | FA_DIREC) ) == 0 )
if (ftmp.atrib & FA_DIREC)
strcat(path, "\\*.*");
return *unidad;
}