#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <ctype.h>

int ALPHA = 0;
int UPPER = 0;
int cpt[256] = { 0 };

void comptage( FILE *src)
{
  int car;
  while ( ! feof(src) ){
    car = fgetc( src );
    if ( UPPER ) 
      car = toupper( car );
    if ( car >= 0 && car < 256)
      if ( ! ALPHA || isalnum( car ) )
	cpt[ car ]++;
  }
}
void distribution( void )
{ int car;
  int total = 0; 
  for( car = 0; car < 256; car++)
    total += cpt[car];
  for( car = 0; car < 256; car++)
     if ( ! ALPHA || isalnum( car ) )
       printf("\n%3d %4.2f", car, cpt[car] * 100. / total);
}

int main( int argc, char *argv[] )
{ int opt;
  char *optlist ="s:hau";
  FILE *src = stdin;
  while ( ( opt = getopt( argc, argv , optlist) ) > 0  )
	  switch( opt ){
	  case 's': src = fopen( optarg , "r"); 
	    if ( ! src ) {
	      printf("\n%s : introuvable!\n", optarg);
	      exit(0);
	    }
	    break;
	  case 'a': ALPHA = 1;
	    break; 
	  case 'u': UPPER = 1;
	    break;
	  case 'h': printf("\nhelp:");
	  default : printf("\n%s:%s\n", argv[0], optlist); 
	            exit ( 1 );
	  }

  comptage( src );
  fclose(src);
  distribution( );
  
  printf("\n");
  return 0;
}
