/*////////////////////////////////////////////////////////////////////////*\*/ /* /// 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 #include #include #include #include #include #include #include #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(" "); 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(" "); 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(" "); 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(" \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(" "); 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(" "); 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(" "); 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(" \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; }