#include #include void print_file (char*); void curses_init (void); int main (int argc, char* argv[]) { char *path, *ptr; int num_ch; system ("clear"); path = malloc (30); ptr = malloc (30); if (argc == 1) {/* Si no hubo argumentos (archivo a abrir) al ejecutar el programa */ printf ("No se ha dado el path al archivo,\nindique el path: "); fgets (ptr, 30, stdin);/* Se pide al usuario un path al archivo */ num_ch = strlen (ptr); strncpy (path, ptr, num_ch-1); }else strcpy (path, argv[1]); /* Si se dio argumenton se copia a la var. path */ print_file (path); /*cur_init (); endwin ();*/ return (EXIT_SUCCESS); }/*Fin main */ /* * FUNCIONES */ /* Se encarga de imprimir el contenido del archivo byte por byte */ void print_file (char* path) { unsigned char byte; FILE *arch; int col = 0, offset1, offset2, i; offset1 = offset2 = 0; if ((arch = fopen (path, "rb")) == NULL) { printf ("Error al abrir el archivo %s\n", path); exit (EXIT_FAILURE); }else {/* Una vez abierto el archivo... */ for (i=0; i<(16); i++)/* Imprime nums. de col. */ printf ("%.2d ", i); putchar ('\n'); for (i=0; i<(16*3)-1; i++)/* Linea de separacion entre nums. col. y datos */ putchar ('-'); putchar ('\n'); /* Extraccion byte x byte del archivo (arch) hasta encontrar el fin de archivo */ byte = fgetc (arch); printf ("%.4X:%.4X| ", offset1, offset2); while ( !feof (arch)) { if (col == 16) { /* Se han impreso 16 caracteres? */ putchar ('\n'); if (offset2 == 0x10000) { offset1++; offset2 = 0; } printf ("%.4X:%.4X| ", offset1, offset2); col = 0; } printf ("%.2X ", byte);/* Impresion del caracter, "%.2X" Esto da el número mínimo de dígitos que deben aparecer en las conversiones */ byte = fgetc (arch); col++; offset2++; } putchar ('\n'); fclose (arch); } }/* Fin print_file */ /* Inicializa el video para ncurses */ void curses_init (void) { if (initscr () == NULL) { perror ("initscr"); puts ("No se pudo inicializar el video."); exit (EXIT_FAILURE); } }/* Fin curses_init */