/*--------------------------------------------------------------------------*\ * LireBin.c - Lire un fichier au format biniaire. *-------------------------------------------------------------------------- * Copyright (c) 1995-2004 SoDevLog. Written by BRy. *-------------------------------------------------------------------------- * Affichage format caractere (plus petite entitee). *-------------------------------------------------------------------------- * Creation : 31/10/95 * Evolutions : * 10/11/1995 : BRy * Ajout demande de paramatres, -c=nombre_de_colonnes pour l'affichage * 22/10/1996 : BRy * Suppression des fonctions cmp_n_mina et cmp_mina pour utiliser a la place * les fonctions strncmpi et strcmpi de la librairie standard * Ajout d'une option -v= pour la lecture des fichiers .obj issue de * memory save. * 13/11/2004 : BRy * Implementer les tests sous la PMLite (a faire plus tard...) * Recompiler le projet sous VS.NET \*--------------------------------------------------------------------------*/ #include #include #include /*--------------------------------------------------------------------------*/ typedef unsigned char BOOL; #define VRAI (0==0) #define FAUX (1==0) typedef enum { C40, C30, NOP } t_version; /*--------------------------------------------------------------------------*/ #define NB_MAX_COLONNES 40 /*--------------------------------------------------------------------------*/ int nb_colonnes; /*--------------------------------------------------------------------------*/ void demande_parametres( void ); /*--------------------------------------------------------------------------*/ int main( int argc, char *argv[] ) { unsigned char lecture; FILE *file_in; char *name_in; int i; long int taille; /* en octets */ long int cpt_col; BOOL affiche_stat; t_version E_version; /* Les initialisations */ nb_colonnes = 5; affiche_stat = FAUX; taille = 0; cpt_col = 0; E_version = NOP; /* Tester l'entree des parametres utilisateur */ if ( argc < 2 ) { demande_parametres(); } for ( i = 1 ; i < argc ; i++ ) /* argv[0] : nom du programme */ { /* argc : compteur des arguments */ if ( strcmpi( argv[i], "-?") == 0 ) { demande_parametres(); } else if ( strncmp( argv[i], "-c=", 3) == 0) { nb_colonnes = atoi( &argv[i][3] ); if ( nb_colonnes > NB_MAX_COLONNES ) { printf("Attention : le nombre de colonnes ne doit depasser %d\n",NB_MAX_COLONNES); nb_colonnes = NB_MAX_COLONNES; } if ( nb_colonnes <= 0 ) { printf("Attention : le nombre de colonnes doit etre superieur a 0.\n"); nb_colonnes = 1; } } else if ( strncmp( &argv[i][0], "-v=", 3) == 0) { if ( strncmp( &argv[i][3], "C40", 3) == 0 ) { E_version = C40; } else if ( strcmpi( &argv[i][3], "C30") == 0 ) { E_version = C30; } else { printf("Version inconnue.\n"); E_version = NOP; } } else if (strcmpi ( argv[i], "-s") == 0) { affiche_stat = VRAI; } else if ( *argv[i] != '-') { name_in = argv[i]; } else { printf("%s: parametre inconnu.\n",argv[i]); demande_parametres(); } }/* fin du for ( argc ) */ /* Ouvrir le fichier d'entree */ if ( (file_in = fopen( name_in, "rb" )) == NULL ) { fprintf( stderr, "Ouverture impossible du fichier. %s\n", name_in ); exit( EXIT_FAILURE ); } /* Quelle version ? faire ce qu'il faut */ switch ( E_version ) { case C30: case C40: { int i; int f=1; cpt_col = 0; fprintf( stdout, "\n-----------------------------------------"); fprintf( stdout, "\n- Version TEXAS : Affichage de l'entete -"); fprintf( stdout, "\n-----------------------------------------\n"); /* Afficher les 60 premiers caracteres d'entete */ for ( i = 0 ; i < 60 && f != 0 ; i++ ) { f = fread (&lecture, sizeof (lecture), (size_t)1, file_in); fprintf( stdout, "%2.2X ", lecture ); cpt_col = (cpt_col + 1) % nb_colonnes; if ( cpt_col == 0 && i < (60-1) ) fprintf( stdout, "\n" ); } fprintf( stdout, "\n- FIN de l'entete -----------------------\n\n"); } break; } /* Lire le fichier */ cpt_col = 0; while ( fread( &lecture, sizeof( lecture ), (size_t)1, file_in ) != 0 ) { fprintf( stdout, "%2.2X ", lecture ); cpt_col = (cpt_col + 1) % nb_colonnes; if ( cpt_col == 0 ) fprintf( stdout, "\n" ); taille = taille + sizeof( lecture ); } /* Afficher les statistiques */ if ( affiche_stat == VRAI ) { fprintf( stdout, "\n\nTaille du fichier : %4d (Octets)\n", taille ); } /* Fermer le fichier d'entree */ if ( fclose( file_in ) < 0 ) { fprintf( stderr, "La fermeture du fichier a echouee." ); exit( EXIT_FAILURE ); } return( 0 ); } /*--------------------------------------------------------------------------*/ void demande_parametres( void ) { printf("\n"); printf("Supra Couche DOS - BRy - Version 3.0\n\n"); printf("Lecture d'un fichier en mode binaire.\n"); printf("Les parametres peuvent etre dans n'importe quel ordre.\n"); printf("Ce programme lit le fichier caractere par caractere.\n\n"); printf("Syntax:\n\n>lire_bin [-csv] nom_fichier.ext\n\n"); printf("\t-? : Aide.\n"); printf("\t-c=xxx : xxx = nombre de colonnes pour l'affichage (defaut %d),\n",nb_colonnes); printf("\t-s : Affiche des statisques sur le fichier.\n"); printf("\t-v=VER : Choix d'une version VER = C30, C40.\n"); exit( EXIT_SUCCESS ); }/* fin de demande_parametres() */