Esempio n. 1
0
void str2binstr(const char* instr, char** out)
{	
	buffer* b = buffer_init();
	int last = strlen(instr);	
	for (int i = 0; i < last; i++) {

		char tmp[8]="\0";
		strncpy(tmp, instr + i, 1);
		
		int acsii_code = ((int)*tmp) & 0x000000ff;
		if (acsii_code < 128){
			char* binStr;
			dec2Bin(acsii_code, &binStr);

			//Cdbg(1, "%s -> %d %d, binStr=%s", tmp, *tmp, acsii_code, binStr);
			
			buffer_append_string_len(b, binStr, 8);
			//Cdbg(1, "b=%s", b->ptr);

			free(binStr);
		}
		
		
	}		

	//Cdbg(1, "11111111111111 %d %d %d", b->used, last*8, b->size+1);

	int len = last*8 + 1;
	*out = (char*)malloc(len);
	memset(*out, '\0', len);
	strcpy(*out, b->ptr);
	buffer_free(b);
}
void app()
{
	//UP TO RESET
	if (input & KEY_UP) variableReset();
	
	//CHECK PRESSED NUMBERS
	//Get input
	//DECIMAL INPUT
	if ((posX >= 10 && posX <= 51) && (posY >= 9 && posY <= 48))PRESSED_NUMBER = 1;
	else if ((posX >= 55 && posX <= 95) && (posY >= 9 && posY <= 48))PRESSED_NUMBER = 2;
	else if ((posX >= 100 && posX <= 140) && (posY >= 9 && posY <= 48))PRESSED_NUMBER = 3;
	else if ((posX >= 10 && posX <= 51) && (posY >= 53 && posY <= 95))PRESSED_NUMBER = 4;
	else if ((posX >= 55 && posX <= 95) && (posY >= 53 && posY <= 95))PRESSED_NUMBER = 5;
	else if ((posX >= 100 && posX <= 140) && (posY >= 53 && posY <= 95))PRESSED_NUMBER = 6;
	else if ((posX >= 10 && posX <= 51) && (posY >= 100 && posY <= 140))PRESSED_NUMBER = 7;
	else if ((posX >= 55 && posX <= 95) && (posY >= 100 && posY <= 140))PRESSED_NUMBER = 8;
	else if ((posX >= 100 && posX <= 140) && (posY >= 100 && posY <= 140))PRESSED_NUMBER = 9;
	else if ((posX >= 10 && posX <= 77) && (posY >= 145 && posY <= 193))PRESSED_NUMBER = 0;
	else if ((posX >= 82 && posX <= 140) && (posY >= 145 && posY <= 193)) PRESSED_NUMBER = -1; //Decimal "Cancel" button//BINARY KEYBOARD
	else if ((posX >= 124 && posX <= 184) && (posY >= 202 && posY <= 236))PRESSED_NUMBER = 20; //Binary "0"
	else if ((posX >= 59 && posX <= 118) && (posY >= 202 && posY <= 236))PRESSED_NUMBER = 21; //Binary "1"
	else if ((posX >= 189 && posX <= 250) && (posY >= 202 && posY <= 236)) PRESSED_NUMBER = -2; //Binary "Cancel" button//HEX KEYBOARD
	else if ((posX >= 179 && posX <= 209) && (posY >= 9 && posY <= 48))PRESSED_NUMBER = 31; //hex 1
	else if ((posX >= 213 && posX <= 244) && (posY >= 9 && posY <= 48))PRESSED_NUMBER = 32; //hex 2
	else if ((posX >= 247 && posX <= 279) && (posY >= 9 && posY <= 48))PRESSED_NUMBER = 33; //hex 3
	else if ((posX >= 179 && posX <= 209) && (posY >= 54 && posY <= 96))PRESSED_NUMBER = 34; //hex 4
	else if ((posX >= 213 && posX <= 244) && (posY >= 54 && posY <= 96))PRESSED_NUMBER = 35; //hex 5
	else if ((posX >= 247 && posX <= 279) && (posY >= 54 && posY <= 96))PRESSED_NUMBER = 36; //hex 6
	else if ((posX >= 179 && posX <= 209) && (posY >= 108 && posY <= 140))PRESSED_NUMBER = 37; //hex 7
	else if ((posX >= 213 && posX <= 244) && (posY >= 108 && posY <= 140))PRESSED_NUMBER = 38; //hex 8
	else if ((posX >= 247 && posX <= 279) && (posY >= 108 && posY <= 140))PRESSED_NUMBER = 39; //hex 9
	else if ((posX >= 179 && posX <= 226) && (posY >= 146 && posY <= 176))PRESSED_NUMBER = 30; //hex 0
	else if ((posX >= 231 && posX <= 279) && (posY >= 146 && posY <= 176))PRESSED_NUMBER = -3; //hex "Cancel"
	else if ((posX >= 283 && posX <= 313) && (posY >= 9 && posY <= 31))PRESSED_NUMBER = 41; //hex A
	else if ((posX >= 283 && posX <= 313) && (posY >= 36 && posY <= 59))PRESSED_NUMBER = 42; //hex B
	else if ((posX >= 283 && posX <= 313) && (posY >= 64 && posY <= 89))PRESSED_NUMBER = 43; //hex C
	else if ((posX >= 283 && posX <= 313) && (posY >= 94 && posY <= 118))PRESSED_NUMBER = 44; //hex D
	else if ((posX >= 283 && posX <= 313) && (posY >= 122 && posY <= 148))PRESSED_NUMBER = 45; //hex E
	else if ((posX >= 283 && posX <= 313) && (posY >= 153 && posY <= 176))PRESSED_NUMBER = 46; //hex F
	else PRESSED_NUMBER = 10;

	//Process input and conversion
	if (OLD_PRESSED_NUMBER == 10 && PRESSED_NUMBER != 10)
	{
		if (PRESSED_NUMBER == 20 || PRESSED_NUMBER == 21 || PRESSED_NUMBER == -2)
		{
			//BINARY--->DECIMAL & HEX:
			if (PRESSED_NUMBER != -2) { if (bit_count < 20){ BINARY *= 10; BINARY += (PRESSED_NUMBER - 20); bit_count++; } }
			else { BINARY /= 10; bit_count--; }
			DECIMAL = bin2Dec(BINARY);
			dec2Hex(DECIMAL, HEX);
		}
		else if (posX < 160)
		{
			//DECIMAL--->BINARY & HEX:
			if (PRESSED_NUMBER != -1) { if (DECIMAL*10+PRESSED_NUMBER<=maxDec){ DECIMAL *= 10; DECIMAL += PRESSED_NUMBER; } }
			else DECIMAL /= 10;
			BINARY = dec2Bin(DECIMAL);
			dec2Hex(DECIMAL, HEX);
		}
		else
		{
			//HEX--->DECIMAL&BIN  
			if (PRESSED_NUMBER == -3)
			{
				if (hex_count != -1)
				{
					HEX[hex_count] = '\0';
					hex_count--;
				}				
			}
			else if (hex_count!=4)
			{				
				hex_count++;				
				if (PRESSED_NUMBER > 40 && PRESSED_NUMBER < 48)
				{
					if (PRESSED_NUMBER == 41)HEX[hex_count] = 'A';
					if (PRESSED_NUMBER == 42)HEX[hex_count] = 'B';
					if (PRESSED_NUMBER == 43)HEX[hex_count] = 'C';
					if (PRESSED_NUMBER == 44)HEX[hex_count] = 'D';
					if (PRESSED_NUMBER == 45)HEX[hex_count] = 'E';
					if (PRESSED_NUMBER == 46)HEX[hex_count] = 'F';
				}
				else
				{
					if(!(PRESSED_NUMBER==30 && hex_count==0)) HEX[hex_count] = PRESSED_NUMBER - 30 + 48;
					else hex_count--;
				}
				
			}
			if (hex2Dec(HEX) > maxDec)
			{
				HEX[hex_count] = '\0';
				hex_count--;
			}
			DECIMAL = hex2Dec(HEX);
			BINARY = dec2Bin(DECIMAL);
		}
	}
	OLD_PRESSED_NUMBER = PRESSED_NUMBER;
}