void radix_Print(unsigned int n, int base){
  if (n >= base) radix_Print(n / base, base);
  print_char("0123456789ABCDEF"[n % base]);
}
void radix_print(unsigned int n, int base){
  if (n >= base) radix_print(n / base, base);
  print_char("0123456789abcdef"[n % base]);
}




int myprintf(char *fmt, ...){
  
  char *argx = ((char*)&fmt) + ((sizeof(fmt) + 3) / 4) * 4;
  //char *argx = ((char*)&fmt) + 4;
  int i1,j;
  char *c1;
  float f1;

  while(*fmt){
    
    if(*fmt == '%'){
      fmt++;
      switch(*fmt){
      case 'd':
        
        i1 = *(int*)argx;

        print_int(i1);
        argx += ((sizeof(int) + 3) / 4) * 4;
   
        break;

      case 's':

        c1 = *(char**)argx;

        print_string(c1);
	argx += ((sizeof(char*)+3)/4)*4;

        break;

      case 'c':
        c1 = *(char**)argx;

        print_char(c1);
	argx += ((sizeof(char*)+3)/4)*4;
        
        break;

      case '%':
        print_char('%');
        break;
	

      case 'x':
        i1 = *(int*)argx;
        radix_print(i1, 16);
        argx += ((sizeof(int) + 3) / 4) * 4;
        break;

      case 'X':
        i1 = *(int*)argx;
        radix_Print(i1, 16);
        argx += ((sizeof(int) + 3) / 4) * 4;
        break;

      case 'o':
        i1 = *(int*)argx;
        radix_print(i1, 8);
        argx += ((sizeof(int) + 3) / 4) * 4;
        break; 
	/*        
      case 'e':
        f1 = *(float*)argx;
        if(i1>=0){
          for(j=0;;j++){
	    f1 = f1 / 10;
            if(i1<=0){break;}
          }
	}
        else
	  for(j=0;;j++){
            f1 = f1 * 10;
            if(i1>=0){break;}
            j=-j;
	  }  

        print_float(f1);
        print_char('e');
	if(j>=0){print_char('+');}
        print_int(j);

	argx += ((sizeof(float*) + 3) / 4) * 4;

        break;
	*/

	}         
     }

     else{
       print_char(*fmt);
     }
    fmt++;
  }

}




int main(){

  int a = 15;
  int c = 11;
  char b[] = "ab12cd";

  myprintf("%d to %o\n", c, c);
  myprintf("%d to %X\n", c, c);
  myprintf("%d to %x\n", c, c);

  return 0;
}
