#include <3ds.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//HI
int main(int argc, char **argv)
{
//Matrix containing the name of each key. Useful for printing when a key is pressed
char keysNames[32][32] = {
"KEY_A", "KEY_B", "KEY_SELECT", "KEY_START",
"KEY_DRIGHT", "KEY_DLEFT", "KEY_DUP", "KEY_DDOWN",
"KEY_R", "KEY_L", "KEY_X", "KEY_Y",
"", "", "KEY_ZL", "KEY_ZR",
"", "", "", "",
"KEY_TOUCH", "", "", "",
"KEY_CSTICK_RIGHT", "KEY_CSTICK_LEFT", "KEY_CSTICK_UP", "KEY_CSTICK_DOWN",
"KEY_CPAD_RIGHT", "KEY_CPAD_LEFT", "KEY_CPAD_UP", "KEY_CPAD_DOWN"
};
// Initialize services
gfxInitDefault();
//Initialize console on top screen. Using NULL as the second argument tells the console library to use the internal console structure as current one
consoleInit(GFX_TOP, NULL);
u32 kDownOld = 0, kHeldOld = 0, kUpOld = 0; //In these variables there will be information about keys detected in the previous frame
printf("\x1b[0;0HConvertidor de Entero a Decimal y Hexadecimal.");
printf("\x1b[1;0HBotones: A = +1 y B = -1 o las flechas.");
printf("\x1b[2;0HBy Angel Xex.");
printf("\x1b[15;0HEntero: 0\n");
printf ("\x1b[16;0Hhexadecimal: 0\n");
printf ("\x1b[17;0Hbinario: 0\n");
int count = 0;
int i;
char buffer [33];
// Main loop
while (aptMainLoop())
{
//Scan all the inputs. This should be done once for each frame
hidScanInput();
//hidKeysDown returns information about which buttons have been just pressed (and they weren't in the previous frame)
u32 kDown = hidKeysDown();
//hidKeysHeld returns information about which buttons have are held down in this frame
u32 kHeld = hidKeysHeld();
//hidKeysUp returns information about which buttons have been just released
u32 kUp = hidKeysUp();
if (kDown & KEY_START) break; // break in order to return to hbmenu
//Do the keys printing only if keys have changed
if (kDown != kDownOld || kHeld != kHeldOld || kUp != kUpOld)
{
//Clear console
consoleClear();
//These two lines must be rewritten because we cleared the whole console
printf("\x1b[0;0HConvertidor de Entero a Decimal y Hexadecimal.");
printf("\x1b[1;0HBotones: A = +1 y B = -1 o las flechas.");
printf("\x1b[2;0HBy Angel Xex.");
printf("\x1b[15;0HEntero: %i \n",count);
itoa (count,buffer,16);
printf ("\x1b[16;0Hhexadecimal: %s\n",buffer);
itoa (count,buffer,2);
printf ("\x1b[17;0Hbinario: %s\n",buffer);
printf("\x1b[3;0H"); //Move the cursor to the fourth row because on the third one we'll write the circle pad position
//Check if some of the keys are down, held or up
int i;
for (i = 0; i < 32; i++)
{
if (kDown & BIT(i))
{//printf("%s down\n", keysNames[i]);
if( strcmp(keysNames[i],"KEY_A") == 0 )
count++;
if( strcmp(keysNames[i],"KEY_DRIGHT") == 0 )
count++;
if( strcmp(keysNames[i],"KEY_B") == 0 )
count--;
if( strcmp(keysNames[i],"KEY_DLEFT") == 0 )
count--;
}
if (kHeld & BIT(i))
{//printf("%s held\n", keysNames[i]);
}
if (kUp & BIT(i))
{//printf("%s up\n", keysNames[i]);
}
}
}
//Set keys old values for the next frame
kDownOld = kDown;
kHeldOld = kHeld;
kUpOld = kUp;
circlePosition pos;
//Read the CirclePad position
hidCircleRead(&pos);
//Print the CirclePad position
//printf("\x1b[2;0H%04d; %04d", pos.dx, pos.dy);
// Flush and swap framebuffers
gfxFlushBuffers();
gfxSwapBuffers();
//Wait for VBlank
gspWaitForVBlank();
}
// Exit services
gfxExit();
return 0;
}