ftpiiu_plugin/source/main.c
2016-08-10 23:08:08 -05:00

121 lines
1.9 KiB
C

#include <malloc.h>
#include <stdarg.h>
#include <stdio.h>
#ifdef _3DS
#include <3ds.h>
#endif
#include "console.h"
#include "ftp.h"
/*! looping mechanism
*
* @param[in] callback function to call during each iteration
*
* @returns loop status
*/
static loop_status_t
loop(loop_status_t (*callback)(void))
{
loop_status_t status = LOOP_CONTINUE;
#ifdef _3DS
while(aptMainLoop())
{
status = callback();
console_render();
if(status != LOOP_CONTINUE)
return status;
}
return LOOP_EXIT;
#else
while(status == LOOP_CONTINUE)
status = callback();
return status;
#endif
}
#ifdef _3DS
/*! wait until the B button is pressed
*
* @returns loop status
*/
static loop_status_t
wait_for_b(void)
{
/* update button state */
hidScanInput();
/* check if B was pressed */
if(hidKeysDown() & KEY_B)
return LOOP_EXIT;
/* B was not pressed */
return LOOP_CONTINUE;
}
#endif
/*! entry point
*
* @param[in] argc unused
* @param[in] argv unused
*
* returns exit status
*/
int
main(int argc,
char *argv[])
{
loop_status_t status = LOOP_RESTART;
#ifdef _3DS
/* initialize needed 3DS services */
acInit();
gfxInitDefault();
gfxSet3D(false);
sdmcWriteSafe(false);
#endif
/* initialize console subsystem */
console_init();
console_set_status("\n" GREEN STATUS_STRING RESET);
while(status == LOOP_RESTART)
{
/* initialize ftp subsystem */
if(ftp_init() == 0)
{
/* ftp loop */
status = loop(ftp_loop);
/* done with ftp */
ftp_exit();
}
else
status = LOOP_EXIT;
}
#ifdef _3DS
u64 id;
APT_GetProgramID(&id);
if(id != 0x000400000BEEF500)
{
console_print("Press B to exit\n");
loop(wait_for_b);
}
else
{
console_print("Press the Home Button to exit\n");
while(aptMainLoop())
console_render();
}
/* deinitialize 3DS services */
gfxExit();
acExit();
#endif
return 0;
}