mirror of
https://github.com/Team-Resurgent/Simple_NTFS_ISO_Mounter.git
synced 2026-08-15 11:18:28 -07:00
477 lines
12 KiB
C++
477 lines
12 KiB
C++
#include "main.h"
|
|
|
|
void ftp_on(void);
|
|
void ftp_off(void);
|
|
void callback_sysutil_exit(uint64_t status, uint64_t param, void *userdata);
|
|
bool LoadModules(void);
|
|
bool UnloadModules(void);
|
|
|
|
bool ftp_service = false;
|
|
|
|
uint32_t screen_width, screen_height;
|
|
GLuint render_width, render_height;
|
|
|
|
struct PSGLdevice* device;
|
|
struct PSGLcontext* context;
|
|
|
|
bool bRun = true;
|
|
uint64_t nFrame = 0;
|
|
|
|
static int nSelInputFrame = 0;
|
|
|
|
int nTextures;
|
|
c_tex** textures;
|
|
|
|
FILE * fp_log = NULL;
|
|
|
|
#define REFERENCE_WIDTH 1920.0
|
|
#define REFERENCE_HEIGHT 1080.0
|
|
|
|
#define FONT_SIZE_1 25.0
|
|
#define FONT_SIZE_2 16.0
|
|
#define FONT_SIZE_3 14.0
|
|
|
|
#define FONT_SPACING 16.0
|
|
|
|
char szTitle[] = { "Simple NTFS ISO Mounter v1.02 (CaptainCPS-X, 2013)" };
|
|
|
|
static uint32_t temp_cpu = 0, temp_rsx = 0;
|
|
|
|
void input(void)
|
|
{
|
|
InputFrameStart();
|
|
|
|
if(((nFrame + nSelInputFrame) - nFrame) == 5)
|
|
{
|
|
// DPAD UP / LEFT ANALOG UP
|
|
if((mIsButtPressed[BT_UP] && buttPressedNow[BT_UP]) || (mValLStickY < 50))
|
|
{
|
|
if(main_menu->nSelectedItem > 0 && main_menu->nSelectedItem <= main_menu->nTotalItem)
|
|
{
|
|
main_menu->nSelectedItem--;
|
|
}
|
|
}
|
|
|
|
// DPAD DOWN / LEFT ANALOG DOWN
|
|
if ( (mIsButtPressed[BT_DOWN] && buttPressedNow[BT_DOWN]) || (mValLStickY > 200) )
|
|
{
|
|
if(main_menu->nSelectedItem >= 0 && main_menu->nSelectedItem < main_menu->nTotalItem-1)
|
|
{
|
|
main_menu->nSelectedItem++;
|
|
}
|
|
}
|
|
nSelInputFrame = 0;
|
|
}
|
|
nSelInputFrame++;
|
|
|
|
// ------------------------------------------------------
|
|
//
|
|
|
|
if(!mIsButtPressed[BT_TRIANGLE] && buttPressedNow[BT_TRIANGLE])
|
|
{
|
|
// Rescan ISOs
|
|
sys_game_process_exitspawn((char*)ISOLIST_SELF, NULL, NULL, NULL, 0, 1000, SYS_PROCESS_PRIMARY_STACK_SIZE_1M);
|
|
}
|
|
|
|
if(!mIsButtPressed[BT_CROSS] && buttPressedNow[BT_CROSS])
|
|
{
|
|
if(main_menu->nTotalItem >= 1)
|
|
{
|
|
int nType = -1;
|
|
|
|
if(strstr(main_menu->item[main_menu->nSelectedItem]->szData_1, "PS3ISO")) nType = ISO_TYPE_PS3;
|
|
if(strstr(main_menu->item[main_menu->nSelectedItem]->szData_1, "PSXISO")) nType = ISO_TYPE_PSX;
|
|
if(strstr(main_menu->item[main_menu->nSelectedItem]->szData_1, "DVDISO")) nType = ISO_TYPE_DVD;
|
|
if(strstr(main_menu->item[main_menu->nSelectedItem]->szData_1, "BDISO")) nType = ISO_TYPE_BD;
|
|
|
|
if(nType != -1) {
|
|
mount_ntfs_iso(main_menu->item[main_menu->nSelectedItem]->szData_1, nType);
|
|
}
|
|
}
|
|
}
|
|
|
|
InputFrameEnd();
|
|
}
|
|
|
|
double debug_font_size(double _px) {
|
|
return (_px * 4.0 / 100.0);
|
|
}
|
|
|
|
void render(bool bClearOnly)
|
|
{
|
|
glClearColor(0.0, 0.0, 0.0, 0.0);
|
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
|
|
|
if(bClearOnly == false)
|
|
{
|
|
textures[0]->Render(0,0,0,0);
|
|
|
|
// =============================================================================================
|
|
// TITLE
|
|
// =============================================================================================
|
|
|
|
double xPos, yPos;
|
|
|
|
xPos = DbgFontCenterX(
|
|
0, // x left (as in RECT)
|
|
render_width, // x right (as in RECT)
|
|
FONT_SIZE_1, // font size (in pixels)
|
|
strlen(szTitle), // text length (num. chars)
|
|
REFERENCE_WIDTH, REFERENCE_HEIGHT, // reference width / height (should not be changed)
|
|
render_width, render_height // currently active resolution
|
|
);
|
|
yPos = DbgFontY(50.0, render_height);
|
|
|
|
cellDbgFontPrintf(xPos, yPos, debug_font_size(FONT_SIZE_1), 0xFFFFFFFF, "%s", szTitle);
|
|
|
|
yPos += DbgFontY(FONT_SIZE_1 + FONT_SPACING, render_height);
|
|
|
|
// =============================================================================================
|
|
// DATE
|
|
// =============================================================================================
|
|
|
|
char szDate[128];
|
|
char szTime[128];
|
|
memset(&szDate, 0, sizeof(szDate));
|
|
memset(&szTime, 0, sizeof(szTime));
|
|
|
|
GetDateTimeStr((char*)szDate, (char*)szTime, false);
|
|
|
|
xPos = DbgFontCenterX(
|
|
0, // x left (as in RECT)
|
|
render_width, // x right (as in RECT)
|
|
FONT_SIZE_2, // font size (in pixels)
|
|
strlen(szDate), // text length (num. chars)
|
|
REFERENCE_WIDTH, REFERENCE_HEIGHT, // reference width / height (should not be changed)
|
|
render_width, render_height // currently active resolution
|
|
);
|
|
|
|
cellDbgFontPrintf(xPos, yPos, debug_font_size(FONT_SIZE_2), 0xFFFFFFFF, "%s", szDate);
|
|
|
|
yPos += DbgFontY(FONT_SIZE_2 + FONT_SPACING, render_height);
|
|
|
|
// =============================================================================================
|
|
// TIME
|
|
// =============================================================================================
|
|
|
|
xPos = DbgFontCenterX(
|
|
0, // x left (as in RECT)
|
|
render_width, // x right (as in RECT)
|
|
FONT_SIZE_1, // font size (in pixels)
|
|
strlen(szTime), // text length (num. chars)
|
|
REFERENCE_WIDTH, REFERENCE_HEIGHT, // reference width / height (should not be changed)
|
|
render_width, render_height // currently active resolution
|
|
);
|
|
|
|
cellDbgFontPrintf(xPos, yPos, debug_font_size(FONT_SIZE_1), 0xFFFFFFFF, "%s", szTime);
|
|
|
|
yPos += DbgFontY(FONT_SIZE_1 + FONT_SPACING, render_height);
|
|
|
|
// =============================================================================================
|
|
|
|
static uint64_t nInterval = 30; // 0.5 second @ 60 FPS
|
|
static uint64_t nFrameCheckpoint = nFrame;
|
|
|
|
if(nFrame >= (nFrameCheckpoint + nInterval))
|
|
{
|
|
nFrameCheckpoint = nFrame;
|
|
|
|
sys_game_get_temperature(0, &temp_cpu);
|
|
sys_game_get_temperature(1, &temp_rsx);
|
|
}
|
|
|
|
char szTemperature[256];
|
|
memset(&szTemperature, 0, sizeof(szTemperature));
|
|
|
|
sprintf(szTemperature, "Temperature: (CPU: %d' C) (RSX: %d' C)", temp_cpu, temp_rsx);
|
|
|
|
xPos = DbgFontCenterX(
|
|
0, // x left (as in RECT)
|
|
render_width, // x right (as in RECT)
|
|
FONT_SIZE_2, // font size (in pixels)
|
|
strlen(szTemperature), // text length (num. chars)
|
|
REFERENCE_WIDTH, REFERENCE_HEIGHT, // reference width / height (should not be changed)
|
|
render_width, render_height // currently active resolution
|
|
);
|
|
|
|
cellDbgFontPrintf(xPos, yPos, debug_font_size(FONT_SIZE_2), 0xFFFFFFFF, "%s", szTemperature);
|
|
|
|
yPos += DbgFontY(FONT_SIZE_2 + FONT_SPACING, render_height);
|
|
|
|
// ===
|
|
yPos += DbgFontY(FONT_SIZE_2 + FONT_SPACING, render_height);
|
|
yPos += DbgFontY(FONT_SIZE_2 + FONT_SPACING, render_height);
|
|
// ===
|
|
|
|
//xPos = DbgFontCenterX(
|
|
// 0, // x left (as in RECT)
|
|
// render_width, // x right (as in RECT)
|
|
// FONT_SIZE_2, // font size (in pixels)
|
|
// strlen((char*)"..::[ ISO LIST ] [ PS3ISO / PSXISO / BDISO / DVDISO ] ::.."), // text length (num. chars)
|
|
// REFERENCE_WIDTH, REFERENCE_HEIGHT, // reference width / height (should not be changed)
|
|
// render_width, render_height // currently active resolution
|
|
//);
|
|
//
|
|
//cellDbgFontPrintf(xPos, yPos, debug_font_size(FONT_SIZE_2), 0xFFFFFFFF, "%s", (char*)"..::[ ISO LIST ] [ PS3ISO / PSXISO / BDISO / DVDISO ] ::..");
|
|
//
|
|
yPos += DbgFontY(FONT_SIZE_2 + FONT_SPACING, render_height);
|
|
yPos += DbgFontY(FONT_SIZE_2 + FONT_SPACING, render_height);
|
|
|
|
// ================
|
|
|
|
xPos = DbgFontX(100.0, render_width);
|
|
|
|
int nMenuItem = main_menu->UpdateTopItem();
|
|
|
|
while(nMenuItem <= (main_menu->nTopItem + main_menu->nListMax))
|
|
{
|
|
if(nMenuItem == main_menu->nTotalItem) break;
|
|
if(main_menu->nTotalItem <= 0) break;
|
|
|
|
// normal
|
|
unsigned int nColor = 0xFFFFFFFF;
|
|
|
|
// selected
|
|
if(nMenuItem == main_menu->nSelectedItem) {
|
|
nColor = 0xFF00CCFF;
|
|
}
|
|
|
|
//if(nFrameStep == 0) { nColor = g_opt_nFontShadowColor; } // Shadow color
|
|
|
|
cellDbgFontPrintf(xPos, yPos, debug_font_size(FONT_SIZE_2), nColor, "%s", main_menu->item[nMenuItem]->szMenuLabel/*, main_menu->item[nMenuItem]->szData_1*/);
|
|
yPos += DbgFontY(FONT_SIZE_2 + FONT_SPACING, render_height);
|
|
|
|
nMenuItem++;
|
|
}
|
|
|
|
(void)font_render();
|
|
}
|
|
|
|
nFrame++;
|
|
psglSwap();
|
|
}
|
|
|
|
|
|
void exit_app(void)
|
|
{
|
|
(void)font_exit();
|
|
(void)delete_history();
|
|
(void)ftp_off();
|
|
(void)InputExit();
|
|
UnloadModules();
|
|
exit(1);
|
|
}
|
|
|
|
int init_core(void)
|
|
{
|
|
(void)delete_history();
|
|
(void)ftp_on();
|
|
//(void)CheckFWVersion();
|
|
//if(!fan_init()) {
|
|
// unsupported fw error...
|
|
//}
|
|
|
|
textures = (c_tex**)malloc(sizeof(c_tex) * 10);
|
|
memset(textures, 0, sizeof(c_tex) * 10);
|
|
|
|
textures[0] = new c_tex(0, (char*)"/dev_hdd0/game/SISO00123/USRDIR/gfx/BG.PNG");
|
|
|
|
InitMainMenu();
|
|
return 1;
|
|
}
|
|
|
|
|
|
|
|
int main(int argc, char* argv[])
|
|
{
|
|
init_log();
|
|
|
|
(void)argc;
|
|
(void)argv;
|
|
|
|
// [cobralib] unmount iso / eject
|
|
cobra_send_fake_disc_eject_event();
|
|
cobra_umount_disc_image();
|
|
|
|
// Check if isolist.self is launching this app...
|
|
FILE* fp_flag = fopen("/dev_hdd0/game/SISO00123/USRDIR/isolist_finished", "r");
|
|
if(fp_flag)
|
|
{
|
|
// load normally...
|
|
fclose(fp_flag);
|
|
*&fp_flag = NULL;
|
|
|
|
// remove the launch flag...
|
|
cellFsUnlink("/dev_hdd0/game/SISO00123/USRDIR/isolist_finished");
|
|
|
|
} else {
|
|
// generate ISO list...
|
|
sys_game_process_exitspawn((char*)ISOLIST_SELF, NULL, NULL, NULL, 0, 1000, SYS_PROCESS_PRIMARY_STACK_SIZE_1M);
|
|
}
|
|
|
|
if(!LoadModules())
|
|
{
|
|
// error...
|
|
(void)exit_app();
|
|
return 0;
|
|
}
|
|
|
|
// setup sys callback
|
|
if(cellSysutilRegisterCallback(0, callback_sysutil_exit, NULL) != CELL_OK)
|
|
{
|
|
// error...
|
|
(void)exit_app();
|
|
return 0;
|
|
}
|
|
|
|
InputInit();
|
|
|
|
if(InitPSGLVideo(device, context, screen_width, screen_height, render_width, render_height))
|
|
{
|
|
// clear vid on startup
|
|
(void)render(true);
|
|
|
|
// init font
|
|
if(!font_init(render_width, render_height)) { bRun = false; }
|
|
|
|
// init app core modules, ftp, settings, etc...
|
|
if(!init_core()) { bRun = false; }
|
|
|
|
// loop
|
|
while(bRun)
|
|
{
|
|
cellSysutilCheckCallback();
|
|
|
|
(void)input();
|
|
(void)render(false);
|
|
}
|
|
|
|
} else {
|
|
// error msg here...
|
|
}
|
|
|
|
(void)exit_app();
|
|
return 0;
|
|
}
|
|
|
|
void callback_sysutil_exit(uint64_t status, uint64_t param, void *userdata)
|
|
{
|
|
(void)param;
|
|
(void)userdata;
|
|
|
|
switch(status)
|
|
{
|
|
case CELL_SYSUTIL_REQUEST_EXITGAME:
|
|
//printf("CELL_SYSUTIL_REQUEST_EXITGAME\n");
|
|
bRun = false;
|
|
break;
|
|
case CELL_SYSUTIL_SYSTEM_MENU_OPEN:
|
|
//printf("CELL_SYSUTIL_SYSTEM_MENU_OPEN\n");
|
|
break;
|
|
case CELL_SYSUTIL_SYSTEM_MENU_CLOSE:
|
|
//printf("CELL_SYSUTIL_SYSTEM_MENU_CLOSE\n");
|
|
break;
|
|
case CELL_SYSUTIL_DRAWING_BEGIN:
|
|
//printf("CELL_SYSUTIL_DRAWING_BEGIN (Pause game)\n");
|
|
break;
|
|
case CELL_SYSUTIL_DRAWING_END:
|
|
//printf("CELL_SYSUTIL_DRAWING_END (Unpause game)\n");
|
|
break;
|
|
case CELL_SYSUTIL_BGMPLAYBACK_PLAY:
|
|
case CELL_SYSUTIL_BGMPLAYBACK_STOP:
|
|
default:
|
|
//printf("system notification: unknown status\n");
|
|
break;
|
|
}
|
|
}
|
|
|
|
bool LoadModules(void)
|
|
{
|
|
cellSysmoduleLoadModule(CELL_SYSMODULE_SYSUTIL_SCREENSHOT);
|
|
cellScreenShotEnable();
|
|
|
|
int ret = cellSysmoduleLoadModule( CELL_SYSMODULE_FS );
|
|
if ( ret < 0 ) {
|
|
//printf( "\nError loading module FS!!!\n" );
|
|
return false;
|
|
}
|
|
|
|
|
|
|
|
ret = cellSysmoduleLoadModule( CELL_SYSMODULE_USBD );
|
|
if ( ret < 0 ) {
|
|
//printf( "\nError loading module USBD!!!\n" );
|
|
return false;
|
|
}
|
|
|
|
|
|
ret = cellSysmoduleLoadModule(CELL_SYSMODULE_HTTP);
|
|
if ( ret < 0 ) {
|
|
//printf( "\nError loading module HTTP!!!\n" );
|
|
return false;
|
|
}
|
|
sys_net_initialize_network();
|
|
|
|
//printf( "\nLoading libnet\n" );
|
|
ret = cellSysmoduleLoadModule( CELL_SYSMODULE_NET );
|
|
if ( ret < 0 ) {
|
|
//printf( "\nError loading module NET!!!\n" );
|
|
return false;
|
|
}
|
|
|
|
cellNetCtlInit();
|
|
|
|
//printf( "\nLoading libio\n" );
|
|
ret = cellSysmoduleLoadModule( CELL_SYSMODULE_IO );
|
|
if ( ret < 0 ) {
|
|
//printf( "\nError loading module IO!!!\n" );
|
|
return false;
|
|
}
|
|
|
|
//printf( "\nLoading libaudio\n" );
|
|
ret = cellSysmoduleLoadModule( CELL_SYSMODULE_AUDIO );
|
|
if ( ret < 0 ) {
|
|
//printf( "\nError loading module AUDIO!!!\n" );
|
|
return false;
|
|
}
|
|
|
|
ret = cellSysmoduleLoadModule( CELL_SYSMODULE_RESC );
|
|
if ( ret < 0 ) {
|
|
//printf( "\nError loading module RESC!!!\n" );
|
|
return false;
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
}
|
|
|
|
bool UnloadModules(void)
|
|
{
|
|
cellSysmoduleUnloadModule( CELL_SYSMODULE_FS );
|
|
cellSysmoduleUnloadModule( CELL_SYSMODULE_SYSUTIL_SCREENSHOT );
|
|
cellSysmoduleUnloadModule( CELL_SYSMODULE_USBD );
|
|
cellSysmoduleUnloadModule( CELL_SYSMODULE_NET );
|
|
cellSysmoduleUnloadModule(CELL_SYSMODULE_HTTP);
|
|
cellSysmoduleUnloadModule( CELL_SYSMODULE_IO );
|
|
cellSysmoduleUnloadModule( CELL_SYSMODULE_AUDIO );
|
|
cellSysmoduleUnloadModule( CELL_SYSMODULE_RESC );
|
|
return true;
|
|
}
|
|
|
|
void ftp_on(void)
|
|
{
|
|
if(ftp_service) { return; }
|
|
ftp_service = true;
|
|
//ftp_clients = 0;
|
|
main_ftp(0);
|
|
}
|
|
|
|
void ftp_off(void)
|
|
{
|
|
if(!ftp_service) { return; }
|
|
ftp_service = false;
|
|
//ftp_clients = 0;
|
|
main_ftp(1);
|
|
}
|