---	printf.c	2004-08-13 00:49:19.207943496 +0530
+++ printf.c	2004-08-13 01:23:29.850198488 +0530
@@ -327,6 +327,7 @@
 	     int precision, const char *argument)
 {
   char *p;		/* Null-terminated copy of % directive. */
+  int temp_int;
 
   p = xmalloc ((unsigned) (length + 1));
   strncpy (p, start, length);
@@ -394,7 +395,20 @@
       break;
 
     case 'c':
-      printf (p, *argument);
+      /*  Previously, it was printf( p,  *argument ) for "%c". The problem was,
+	  printf "%c" 65 outputs '6'. Instead of printing argument, we convert it to int
+	  and see if it falls in printable range or not, then print it.
+
+	  This is the first time I'm actually playing with a real source-code. If it's naive/wrong/stupid,
+	  please let me know by mailing me at vamsee_k@students.iiit.net
+      */
+      temp_int = atoi(argument);
+      if( !( temp_int >= 0 && temp_int < 256 ) )         /*  oops, can't print this one :-)  */
+	{
+	  fprintf ( stderr, _("no corresponding printable character for \"%s\": %s\n"),argument,program_name );
+	  exit( EXIT_FAILURE );
+	}
+      printf( p, (char) temp_int );
       break;
 
     case 's':
