- /*-------------------------------------------------------------
- * Fichier : dump.c ( EXTRAIT cf ZIP )
- * N.P. : 19/11/2001 09:24
- * Objet : Lecture en mode binaire
- * ===================================
- */
-
- #include <limits.h>
- #include <string.h>
- #include <ctype.h>
- #include <stdio.h>
-
- #define DECAL_ORG 45 //départ colonne ASCII
-
- #define color printf("\033[36m") //couleur bleu pour ASCII
- #define norm printf("\033[37m") //couleur normale (blanc)
- #define color_2 printf("\033[33m") //couleur jaune pour l'Offset
-
-
- //Prototype(s):
- void curseur ( int decalage , char valeur );
- void binaire_char ( unsigned char nbre );
- void binaire_int ( unsigned int nbre );
-
-
-
-
- /*------------------------------------------------------------*/
- int main( int argc , char *argv[] )
- {
- int base = 16;
- int group = 1; //1 pour char, 4 pour int...
- int i;
-
- //Vérif. des arguments:
- if (argc == 1)
- {
- printf("\nConception: Nicolas PIRAT (R)\n");
- printf("\nUtilite: afficher en dec/bin/hex un fichier par 1 ou 4 octet(s).\n");
- printf("\nAppel: DUMP.EXE nom_fichier [/dec] [/bin] [/int] \n");
- printf(" Par defaut, affichage en hexa et par octet.\n");
- printf("\nIt's ok ? ");
- getchar();
- return 1;
- }
-
- for (i=2; i < argc; i++)
- {
- if ( !strcmp( argv[i], "/dec") )
- base = 10;
-
- if ( !strcmp( argv[i], "/int" ) )
- group = 4;
- if ( !strcmp( argv[i], "/bin" ) )
- base = 2;
- }
-
- //Ouverture du fichier:
- {
- FILE *f;
- unsigned char buffer;
- unsigned int buffer_int;
- int i,ligne = 0;
- int decal = DECAL_ORG;
-
- if ((f = fopen(argv[1],"rb")) == NULL)
- {
- perror("Le fichier ne s'est pas ouvert.");
- return 1;
- }
- else
- {
- //Lecture du fichier:
- do
- {
- color_2;
- printf("%06ld ", ftell( f ) );
- norm;
-
- //Modif. pour affichage des int:
- if ( (group == 4) && (base == 16) )
- base = 6;
- if ( (group == 4) && (base == 10) )
- base = 4;
- if ( (group == 1) && (base == 10) )
- base = 12;
- if ( (group == 1) && (base == 2) )
- base = 5;
-
- for( i=0 ; i <base ; i++)
- {
- //Choix de la taille des données à lire d'un coup:
- if ( group == 1 )
- fread( &buffer , sizeof(char) , 1 , f );
- else
- fread( &buffer_int, sizeof(int), 1 , f );
-
- if ( feof(f) ) //Fin de fichier !
- {
- fclose( f );
- return 0;
- }
-
- //Choix de l'affichage d'apeès la base:
- if ((base == 16) || (base == 6))
- {
- if ( group == 1)
- printf("%02X ",buffer );
- else
- printf("%08X ", buffer_int );
- }
- else if (( base == 12) || (base == 4) ) //base 10
- {
- if ( group == 1)
- printf("%03d ",buffer );
- else
- printf("%010d ", buffer_int );
- }
- else
- {
- if ( group == 1)
- binaire_char( buffer );
- else
- binaire_int( buffer_int );
- }
- //else ( base == 2 )
-
-
- //Ecrit à droite de l'écran et revient à gauche si CHAR !
- if (group == 1)
- curseur(decal,buffer);
-
- //Prépa pour prochain décalage:
- if ( (base == 12) || (base == 4) ) //Correspond à la base 10
- {
- if (group == 1)
- decal -= 3;
- else
- decal -= 10;
- }
- else if ( (base == 16) || (base == 6)) //base 16
- {
- if (group == 1)
- decal -= 2;
- else
- decal -= 8;
- }
- else
- {
- if (group == 1)
- decal -= 5;
- else
- decal -= 2;
- }
-
- }
- //Position en bout de ligne pour faire \n:
- //printf("\0338");
- printf("\n");
- decal = DECAL_ORG;
- ligne++;
- //Affichage page par page...!
- if (ligne > 23)
- {
- printf("Appuyer sur une touche pour continuer...");
- ligne = 0;
- i = getchar();
- }
- } while (!feof(f));
-
- }
- fclose( f );
- }
-
- return 0;
- }
/*-------------------------------------------------------------
* Fichier : dump.c ( EXTRAIT cf ZIP )
* N.P. : 19/11/2001 09:24
* Objet : Lecture en mode binaire
* ===================================
*/
#include <limits.h>
#include <string.h>
#include <ctype.h>
#include <stdio.h>
#define DECAL_ORG 45 //départ colonne ASCII
#define color printf("\033[36m") //couleur bleu pour ASCII
#define norm printf("\033[37m") //couleur normale (blanc)
#define color_2 printf("\033[33m") //couleur jaune pour l'Offset
//Prototype(s):
void curseur ( int decalage , char valeur );
void binaire_char ( unsigned char nbre );
void binaire_int ( unsigned int nbre );
/*------------------------------------------------------------*/
int main( int argc , char *argv[] )
{
int base = 16;
int group = 1; //1 pour char, 4 pour int...
int i;
//Vérif. des arguments:
if (argc == 1)
{
printf("\nConception: Nicolas PIRAT (R)\n");
printf("\nUtilite: afficher en dec/bin/hex un fichier par 1 ou 4 octet(s).\n");
printf("\nAppel: DUMP.EXE nom_fichier [/dec] [/bin] [/int] \n");
printf(" Par defaut, affichage en hexa et par octet.\n");
printf("\nIt's ok ? ");
getchar();
return 1;
}
for (i=2; i < argc; i++)
{
if ( !strcmp( argv[i], "/dec") )
base = 10;
if ( !strcmp( argv[i], "/int" ) )
group = 4;
if ( !strcmp( argv[i], "/bin" ) )
base = 2;
}
//Ouverture du fichier:
{
FILE *f;
unsigned char buffer;
unsigned int buffer_int;
int i,ligne = 0;
int decal = DECAL_ORG;
if ((f = fopen(argv[1],"rb")) == NULL)
{
perror("Le fichier ne s'est pas ouvert.");
return 1;
}
else
{
//Lecture du fichier:
do
{
color_2;
printf("%06ld ", ftell( f ) );
norm;
//Modif. pour affichage des int:
if ( (group == 4) && (base == 16) )
base = 6;
if ( (group == 4) && (base == 10) )
base = 4;
if ( (group == 1) && (base == 10) )
base = 12;
if ( (group == 1) && (base == 2) )
base = 5;
for( i=0 ; i <base ; i++)
{
//Choix de la taille des données à lire d'un coup:
if ( group == 1 )
fread( &buffer , sizeof(char) , 1 , f );
else
fread( &buffer_int, sizeof(int), 1 , f );
if ( feof(f) ) //Fin de fichier !
{
fclose( f );
return 0;
}
//Choix de l'affichage d'apeès la base:
if ((base == 16) || (base == 6))
{
if ( group == 1)
printf("%02X ",buffer );
else
printf("%08X ", buffer_int );
}
else if (( base == 12) || (base == 4) ) //base 10
{
if ( group == 1)
printf("%03d ",buffer );
else
printf("%010d ", buffer_int );
}
else
{
if ( group == 1)
binaire_char( buffer );
else
binaire_int( buffer_int );
}
//else ( base == 2 )
//Ecrit à droite de l'écran et revient à gauche si CHAR !
if (group == 1)
curseur(decal,buffer);
//Prépa pour prochain décalage:
if ( (base == 12) || (base == 4) ) //Correspond à la base 10
{
if (group == 1)
decal -= 3;
else
decal -= 10;
}
else if ( (base == 16) || (base == 6)) //base 16
{
if (group == 1)
decal -= 2;
else
decal -= 8;
}
else
{
if (group == 1)
decal -= 5;
else
decal -= 2;
}
}
//Position en bout de ligne pour faire \n:
//printf("\0338");
printf("\n");
decal = DECAL_ORG;
ligne++;
//Affichage page par page...!
if (ligne > 23)
{
printf("Appuyer sur une touche pour continuer...");
ligne = 0;
i = getchar();
}
} while (!feof(f));
}
fclose( f );
}
return 0;
}