#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void showhelp();
void showhelp(){
	printf("hex.exe: decimal and hex convertor\n");
	printf(" abstruct: change decimal and hex.\n");
	printf(" usage:\n");
	printf("  If signed or unsigned decimal is input,\n");
	printf("   return hex.\n");
	printf("   ex. hex> 200\n");
	printf("       200 = 0x000000c8\n");
	printf("  If hex following '0x' is input,\n");
	printf("   return signed and unsigned decimal.\n");
	printf("   ex. hex> 0xFF\n");
	printf("       ui 0xFF = 255\n");
	printf("       uf 0xFF = 0.99609375\n");
	printf("       si 0xFF = 32767\n");
	printf("       sf 0xFF = -0.00390625\n");
	printf("   ui : unsigned integer representation.\n");
	printf("   uf : unsigned fractional representation.\n");
	printf("   si : signed integer representation.\n");
	printf("   sf : signed fractional representation.\n");
	printf("  Fractional representation is value from 0 and 1.\n");
	printf("  If 'exit' is input then quit program.\n");
}
int main(int argc,char **argv){
	char str[256];
	int f;
	int i;
	int j;
	int k;
	float h;
	if(argc>1){
		showhelp();
		exit(0);
	}
	f=1;
	while(f){
		printf("hex>");
		scanf("%s",str);
		i=atoi(str);
		if(str[0]=='0' && str[1]=='x'){
			i=0;
			j=1;
			for(k=0;str[k+2]!='\0';k++){
				if(str[k+2]>='0' && str[k+2]<='9'){
					i=i*16 + str[k+2]-'0';
					j=j*16;
				}else if(str[k+2]>='A' && str[k+2]<='F'){
					i=i*16 + str[k+2]-'A' + 10;
					j=j*16;
				}else if(str[k+2]>='a' && str[k+2]<='f'){
					i=i*16 + str[k+2]-'a' + 10;
					j=j*16;
				}else{
					i=0;
					break;
				}
			}
			if(i!=0){
				if(i<j/2){
					printf("ui %s = %d \n",str,i);
					printf("uf %s = %1.8f \n",str,(float)i/(float)j);
					printf("si %s = %d \n",str,i);
					printf("sf %s = %1.8f \n",str,(float)i/(float)j*2);
				}else{
					printf("ui %s = %d \n",str,i);
					printf("uf %s = %1.8f \n",str,(float)i/(float)j);
					printf("si %s = %d \n",str,i-j);
					printf("sf %s = %1.8f \n",str,(float)(i-j)/(float)j);
				}
			}else{
				printf("N/A\n");
			}
		}else if(i!=0){
			printf("%s = 0x%08x\n",str,i);
		}else if(strcmp(str,"help")==0){
			showhelp();
		}else if(strcmp(str,"exit")==0){
			printf("bye!\n");
			f=0;
		}else if(strcmp(str,"0")==0){
			printf("0\n");
		}else{
			printf("N/A\n");
		}
	}
}
