commit ba4072119327cde975e2682854c13431848a025a Author: jdg <jd@infdj.com> Date: Wed Sep 8 21:24:42 2021 +0200 First commit 05/09/1999 diff --git a/JDIR.BAK b/JDIR.BAK new file mode 100644 index 0000000..8706189 --- /dev/null +++ b/JDIR.BAK @@ -0,0 +1,1013 @@ + /*////////////////////////////////////////////////////////////////////////*\*/ +/* +/// Nombre: JDIR .CPP /// +/// Modulo: /// +/// Descripci�n: Dir especial, para mostrar en color los archivos /// +/// /// +/// Autor: Jos� David Guill�n 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'; + fnmerge(path,ATRIBUTO_C,Buffer,Nombre_archivo,Extension); + + 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 Guill�n 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; +} + diff --git a/JDIR.CPP b/JDIR.CPP new file mode 100644 index 0000000..37f841e --- /dev/null +++ b/JDIR.CPP @@ -0,0 +1,1015 @@ + /*////////////////////////////////////////////////////////////////////////*\*/ +/* +/// Nombre: JDIR .CPP /// +/// Modulo: /// +/// Descripci�n: Dir especial, para mostrar en color los archivos /// +/// /// +/// Autor: Jos� David Guill�n 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 Guill�n 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; +} + diff --git a/JDIR.EXE b/JDIR.EXE new file mode 100644 index 0000000..f752161 Binary files /dev/null and b/JDIR.EXE differ diff --git a/JDIRECT.H b/JDIRECT.H new file mode 100644 index 0000000..102ea70 --- /dev/null +++ b/JDIRECT.H @@ -0,0 +1,88 @@ +/* + Este fichero forma parte del Curso de C + Copyright (C) 1991 Grupo Editorial Jackson + Todos los derechos reservados +*/ + + +/* JDIRECT.H: cabecera para utilizar las funciones de b�squeda en los */ +/* directorios MS-DOS tanto con Quick C como con Turbo C. */ + + +#if !defined(__JDIRECT_H_) /*incluye s�lo si no est� ya incluido*/ +#define __JDIRECT_H_ + + +#include <dos.h> + +typedef struct { /*define el tipo FileInfo: <1> */ + char reserved[21]; /*espacio reservado para DOS*/ + char atrib; /*atributos del fichero*/ + struct { /*tiempo de la �ltima modific. <2>*/ + unsigned int sec : 5; + unsigned int min : 6; + unsigned int hours : 5; + } time; + struct { /*fecha de la �ltima modific. <3>*/ + unsigned int day : 5; + unsigned int month : 4; + unsigned int year : 7; + } date; + long size; /*dimensiones del fichero*/ + char name[13]; /*nombre del fichero*/ +} FileInfo; + + +#ifdef __TURBOC__ /*compila si Turbo C*/ + + #include <dir.h> + +// #define FA_NORMAL 0 /*constante para ficheros 'normales'*/ + + /*convierte el tipo del puntero a datos del fichero: */ + + #define findfirst(p,b,a) findfirst(p,(struct ffblk *)b,a) /*<4>*/ + #define findnext(b) findnext((struct ffblk *)b) + +#else /*compila si Quick C*/ + + #include <direct.h> + + #define FA_NORMAL _A_NORMAL /*convierte nombres const. atributos: */ + #define FA_RDONLY _A_RDONLY /*s�lo lectura*/ + #define FA_HIDDEN _A_HIDDEN /*oculto*/ + #define FA_SYSTEM _A_SYSTEM /*de sistema*/ + #define FA_LABEL _A_VOLID /*etiqueta de volumen*/ + #define FA_DIREC _A_SUBDIR /*directorio*/ + #define FA_ARCH _A_ARCH /*archivo*/ + + /*convierte nombres funciones, cambia orden argumentos de findfirst: */ + + #define findfirst(p,b,a) (int)_dos_findfirst(p,a,(struct find_t *)b) + #define findnext(b) (int)_dos_findnext((struct find_t *)b) /*<5>*/ + +#endif /*fin opci�n Turbo C / Quick C*/ + + +#endif /*(si no incluido)*/ + + +/* Notas sobre DIRECT.H: + + <1> FileInfo es una estructura que contiene informaci�n relativa a + un fichero, restituida por findfirst y findnext. + <2> La componente time es un int (16 bits) que contiene en realidad tres + valores, cada uno conservado en un grupo de bits adyacentes. El orden + de lectura de los bits depende del compilador, as� esta definici�n no + es port�til (aunque sirve tanto con Turbo C como con Quick C). Se + pod�an escribir tambi�n simplemente los tres campos de bits como + componentes de la estructura FileInfo (sin utilizar la estructura + time), pero hemos preferido subrayar que los tres campos de bits + forman en conjunto un int: esto puede ser �til por comodidad de + manipulaci�n (por ej. pasar time a una funci�n). + <3> Ver nota 2. + <4> Este cast, desgraciadamente, le deja al compilador sin posibilidades + de comprobar los errores. S�lo lo hemos utilizado para asegurar la + portabilidad entre Turbo C 2.0 y Quick C 2.0. + <5> Ver nota 4. +*/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..c04dbe6 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +#JDIR + + +*05/09/1999* + +ToDo: wwtcf? + + +