int xmain(int ra)
{
	SetupCallbacks();

	pgInit();
	pgScreenFrame(1, 0);
	pgFillvram(0);

	mainImpl();
	
	pgWaitVn(500);
	sceKernelExitGame();

	return 0;
}
Example #2
0
void Draw_All(void) {
	int			i,col;

	pgFillvram(0);
	
    strncpy(path_tmp, doomwaddir2, 128);

    mh_print(5, 5, "Please choose a game to launch (Press Circle to select)", rgb2col(255, 255, 255), 0, 0);
    mh_print(310, 245, "Vita Doom - Release 1", rgb2col(255, 0, 0), 0, 0);
    mh_print(245, 270, "based on DoomPSP-0.04 S.S. b5", rgb2col(255, 255, 0), 0, 0);

    /*char errtext[64];
    sprintf(errtext, "Error: 0x%x", res);

    mh_print(10, 300, errtext, RGBA8(255, 0, 0, 2555), 0, 0);*/

    if (dlist_num == 0)
    {
        mh_print(32, 40, "No WADs found... Put WADs in:", rgb2col(255, 0, 0), 0, 0);
        mh_print(32, 60, path_tmp, rgb2col(255, 0, 0), 0, 0);
    }
    else
    {
        i = dlist_start;
        while (i < (dlist_start + PATHLIST_H)) {
            if (i < dlist_num) {
                col = rgb2col(255, 255, 255);
                if (dlist[i].type & TYPE_DIR) {
                    col = rgb2col(255, 255, 0);
                }
                if (i == dlist_curpos) {
                    col = rgb2col(255, 0, 0);
                }
                strncpy(path_tmp, dlist[i].name, 40);
                mh_print(32, ((i - dlist_start) + 2) * 20, path_tmp, col, 0, 0);
            }
            i++;
        }
    }

    pgScreenFlipV();
}
Example #3
0
void ButtonChange(char tempstring[][MAX_TEMP_STRING], const char* buttons[], const char* tempkeystring[]) {
	
	pgFillvram(0);

	int i = 0;
	int die = 0;
	int col;
	int tempact = 0;
	char tempselect[27];
	
	for (i=0; i<MAX_CONTROL; i++) {

	    if (d_controls[i] == CKEY_WEAPON) die = 0;
	    else if (d_controls[i] == KEY_ENTER) die = 1;
	    else if (d_controls[i] == KEY_ESCAPE) die = 2;
	    else if (d_controls[i] == ' ') die = 3;
	    else if (d_controls[i] == CKEY_MOVE) die = 4;
	    else if (d_controls[i] == KEY_TAB) die = 5;
	    else if (d_controls[i] == KEY_RSHIFT) die = 6;
	    else if (d_controls[i] == KEY_RCTRL) die = 7;
	    else if (d_controls[i] == ',') die = 8;
	    else if (d_controls[i] == '.') die = 9;
	    else if (d_controls[i] == 222) die = 10;
	    else if (d_controls[i] == 266) die = 11;
	    else if (d_controls[i] == 333) die = 12;
	
	    col = rgb2col(255,255,255);
	
	    if (i==d_clist_curpos) {
	        col = rgb2col(255,0,0);
	    }
	
        sprintf(tempstring[i], "%s = %s", buttons[i], tempkeystring[die]);
        mh_print(5, ((i + 1) * 20), tempstring[i], col, 0, 0);
	}
	
	if (d_controls[d_clist_curpos] == CKEY_WEAPON) die = 0;
	else if (d_controls[d_clist_curpos] == KEY_ENTER) die = 1;
	else if (d_controls[d_clist_curpos] == KEY_ESCAPE) die = 2;
	else if (d_controls[d_clist_curpos] == ' ') die = 3;
	else if (d_controls[d_clist_curpos] == CKEY_MOVE) die = 4;
	else if (d_controls[d_clist_curpos] == KEY_TAB) die = 5;
	else if (d_controls[d_clist_curpos] == KEY_RSHIFT) die = 6;
	else if (d_controls[d_clist_curpos] == KEY_RCTRL) die = 7;
	else if (d_controls[d_clist_curpos] == ',') die = 8;
	else if (d_controls[d_clist_curpos] == '.') die = 9;
	else if (d_controls[d_clist_curpos] == 222) die = 10;
	else if (d_controls[d_clist_curpos] == 266) die = 11;
	else if (d_controls[d_clist_curpos] == 333) die = 12;
	
	sprintf(tempselect, "Make selection for %s", tempkeystring[die]);
    mh_print(5, 255, tempselect, rgb2col(50, 255, 50), 0, 0);
		
	pgScreenFlipV();

	unsigned long key;
	control_bef_ctl = now_pad;
	
	while (1) {
	    key = Read_Key3();
	    if (key != 0) break;
	    pgWaitV();
	}
	
	if (d_controls[die] == CKEY_WEAPON || d_controls[die] == CKEY_MOVE) {
	    tempact = d_controls[4];
	    d_controls[4] = d_controls[0];
	    d_controls[0] = tempact;
	    
	    if (d_controls[0] == CKEY_MOVE) {
	        analog = 1;
	    }
	    else {
	        analog = 0;
	    }
	}
	else if (key & SCE_CTRL_START) {
	    tempact = d_controls[1];
	    d_controls[1] = d_controls[d_clist_curpos];
	    d_controls[d_clist_curpos] = tempact;
	}
	else if (key & SCE_CTRL_SELECT) {
	    tempact = d_controls[2];
	    d_controls[2] = d_controls[d_clist_curpos];
	    d_controls[d_clist_curpos] = tempact;
	}
	else if (key & SCE_CTRL_CROSS) {
	    tempact = d_controls[3];
	    d_controls[3] = d_controls[d_clist_curpos];
	    d_controls[d_clist_curpos] = tempact;
	}
	else if (key & SCE_CTRL_TRIANGLE) {
	    tempact = d_controls[5];
	    d_controls[5] = d_controls[d_clist_curpos];
	    d_controls[d_clist_curpos] = tempact;
	}
	else if (key & SCE_CTRL_SQUARE) {
	    tempact = d_controls[6];
	    d_controls[6] = d_controls[d_clist_curpos];
	    d_controls[d_clist_curpos] = tempact;
	}
	else if (key & SCE_CTRL_CIRCLE) {
	    tempact = d_controls[7];
	    d_controls[7] = d_controls[d_clist_curpos];
	    d_controls[d_clist_curpos] = tempact;
	}
    else if (key & SCE_CTRL_LTRIGGER) {
	    tempact = d_controls[8];
	    d_controls[8] = d_controls[d_clist_curpos];
	    d_controls[d_clist_curpos] = tempact;
	}
    else if (key & SCE_CTRL_RTRIGGER) {
	    tempact = d_controls[9];
	    d_controls[9] = d_controls[d_clist_curpos];
	    d_controls[d_clist_curpos] = tempact;
	}
	
	control_bef_ctl = key;
	
}
Example #4
0
void NewPrompter() {
	char* buttons[MAX_CONTROL];
	char tempstring[MAX_CONTROL][MAX_TEMP_STRING];
	char* tempkeystring[MAX_CONTROL+2];
	tempkeystring[0] = "WEAPON";
	tempkeystring[1] = "ENTER";
	tempkeystring[2] = "ESC";
	tempkeystring[3] = "USE";
	tempkeystring[4] = "MOVE";
	tempkeystring[5] = "MAP";
	tempkeystring[6] = "RUN";
	tempkeystring[7] = "FIRE";
	tempkeystring[8] = "M_LEFT";
	tempkeystring[9] = "M_RIGHT";
    //tempkeystring[10] = "222";
    //tempkeystring[11] = "266";
    //tempkeystring[12] = "333";
	buttons[0] = "ANALOG   ";
	buttons[1] = "START    ";
	buttons[2] = "SELECT   ";
	buttons[3] = "CROSS    ";
	buttons[4] = "DPAD     ";
	buttons[5] = "TRIANGLE ";
	buttons[6] = "SQUARE   ";
	buttons[7] = "CIRCLE   ";
	buttons[8] = "L_TRIG   ";
	buttons[9] = "R_TRIG   ";
	//buttons[10] = "CPU_CLOCK";
	
	control_bef_ctl = 0;
	pgScreenFrame(2,0);
	pgFillvram(0);
	pgScreenFlipV();
	while (1) {
	    pgFillvram(0);
	    int i = 0;
	    int die = 0;
	    int col;
	    for (i=0; i<MAX_CONTROL; i++) {
	    
		if (d_controls[i] == CKEY_WEAPON) die = 0;
		else if (d_controls[i] == KEY_ENTER) die = 1;
		else if (d_controls[i] == KEY_ESCAPE) die = 2;
		else if (d_controls[i] == ' ') die = 3;
		else if (d_controls[i] == CKEY_MOVE) die = 4;
		else if (d_controls[i] == KEY_TAB) die = 5;
		else if (d_controls[i] == KEY_RSHIFT) die = 6;
		else if (d_controls[i] == KEY_RCTRL) die = 7;
		else if (d_controls[i] == ',') die = 8;
		else if (d_controls[i] == '.') die = 9;
		else if (d_controls[i] == 222) die = 10;
		else if (d_controls[i] == 266) die = 11;
		else if (d_controls[i] == 333) die = 12;
	
		col = rgb2col(255,255,255);
	
		if (i==d_clist_curpos) {
		    col = rgb2col(255,0,0);
		}
	
		sprintf(tempstring[i], "%s = %s",buttons[i],tempkeystring[die]);
        mh_print(5, ((i + 2) * 20), tempstring[i], col, 0, 0);
	    }
	    if (d_clist_curpos != 10) {
	        mh_print(5,255,"X: Exit | O: Change | Triangle: Save To File",rgb2col(50,255,50),0,0);
	    }
	    else {
	        mh_print(5,255,"X: Exit | O: Increment | Square: Decrement | Triangle: Save To File",rgb2col(50,255,50),0,0);
	    }
	    pgScreenFlipV();
	
	    if (control_bef_ctl == 0) {
	        Read_Key2();
	        pgWaitV();
	    }
	    else {
	        unsigned long ankey;
	        while (1) {
	    	    ankey = Read_Key3();
	    	if (ankey != 0) break;
	    	    pgWaitV();
	    	}
	    	new_pad = old_pad = now_pad = ankey;
	    	control_bef_ctl = 0;
	    }
	    
	   
	    if (new_pad & SCE_CTRL_UP) {
		if (d_clist_curpos > 0) {
			d_clist_curpos--;
			if (d_clist_curpos < d_clist_start) { d_clist_start = d_clist_curpos; }
		}
	    }
	    else if (new_pad & SCE_CTRL_DOWN) {
		if (d_clist_curpos < (MAX_CONTROL-1)) {
			d_clist_curpos++;
			if (d_clist_curpos >= (d_clist_start+MAX_CONTROL-1)) { d_clist_start++; }
		}
	    }
	
	    else if (new_pad & SCE_CTRL_CIRCLE) {
	    if (d_clist_curpos != 10) {
	        ButtonChange(tempstring, buttons, tempkeystring);
	    }
	    else {
	        change_cpu_clock(1);  // increment
	    }
	    }
	
	    else if (new_pad & SCE_CTRL_TRIANGLE) {
	    SaveToFile(tempstring, buttons, tempkeystring);
	    }
	    
	    else if (new_pad & SCE_CTRL_SQUARE) {
	    if (d_clist_curpos == 10)
	        change_cpu_clock(0); // decrement
	    }
	    
	    else if (new_pad & SCE_CTRL_CROSS) {
	    break;
	    }
	}
	
}
Example #5
0
void InputUpdatePad(void)
{
	SceCtrlData paddata;
	static boolean bPushFlag = FALSE;
	static boolean bTogglePushFlag = FALSE;

	g_PadBit[0]=0;
	stKeyState.bRapidA = FALSE;
	stKeyState.bRapidB = FALSE;
	sceCtrlPeekBufferPositive(&paddata, 1);

	// Analog pad state
	if (paddata.Ly > UPPER_THRESHOLD) {
		paddata.Buttons |= PSP_CTRL_A_DOWN;	// DOWN(analog)
	}
	else if (paddata.Ly < LOWER_THRESHOLD) {
		paddata.Buttons |= PSP_CTRL_A_UP;	// UP(analog)
	}
	if (paddata.Lx < LOWER_THRESHOLD) {
		paddata.Buttons |= PSP_CTRL_A_LEFT; // LEFT(analog)
	}
	else if (paddata.Lx > UPPER_THRESHOLD) {
		paddata.Buttons |= PSP_CTRL_A_RIGHT; // RIGHT(analog)
	}

    // Hold
    if (paddata.Buttons & PSP_CTRL_HOLD) {
		paddata.Buttons = 0;
	}

	// for Enter Menu
	now_pad = paddata.Buttons;

	// ↑↓←→
	if((paddata.Buttons&setting.key_config[0])==setting.key_config[0] && setting.key_config[0])
		g_PadBit[0] |= NES_UP;
	if((paddata.Buttons&setting.key_config[1])==setting.key_config[1] && setting.key_config[1])
		g_PadBit[0] |= NES_DOWN;
	if((paddata.Buttons&setting.key_config[2])==setting.key_config[2] && setting.key_config[2])
		g_PadBit[0] |= NES_LEFT;
	if((paddata.Buttons&setting.key_config[3])==setting.key_config[3] && setting.key_config[3])
		g_PadBit[0] |= NES_RIGHT;

	// A、B AB連射
	if((paddata.Buttons&setting.key_config[6])==setting.key_config[6] && setting.key_config[6])
		stKeyState.bRapidA = TRUE;
	else if((paddata.Buttons&setting.key_config[4])==setting.key_config[4] && setting.key_config[4])
		g_PadBit[0] |= NES_A;
	if((paddata.Buttons&setting.key_config[7])==setting.key_config[7] && setting.key_config[7])
		stKeyState.bRapidB = TRUE;
	else if((paddata.Buttons&setting.key_config[5])==setting.key_config[5] && setting.key_config[5])
		g_PadBit[0] |= NES_B;
	if((paddata.Buttons&setting.key_config[8])==setting.key_config[8] && setting.key_config[8])
		g_PadBit[0] |= NES_SELECT;
	if((paddata.Buttons&setting.key_config[9])==setting.key_config[9] && setting.key_config[9])
		g_PadBit[0] |= NES_START;

	g_PadBit[4]=0;
	// PLAYER2 MIC
	if((paddata.Buttons&setting.key_config[11])==setting.key_config[11] && setting.key_config[11])
		g_PadBit[4] |= 0x04;

	//>>>davex
	if( screen_rotated_on){
		if(paddata.Buttons & PSP_CTRL_DOWN)  g_PadBit[0] |= NES_UP;
		if(paddata.Buttons & PSP_CTRL_UP)    g_PadBit[0] |= NES_DOWN;
		if(paddata.Buttons & PSP_CTRL_LEFT)  g_PadBit[0] |= NES_RIGHT;
		if(paddata.Buttons & PSP_CTRL_RIGHT) g_PadBit[0] |= NES_LEFT;

	}else{

		// cross
		if(paddata.Buttons & PSP_CTRL_DOWN)  g_PadBit[0] |= NES_DOWN;
		if(paddata.Buttons & PSP_CTRL_UP)    g_PadBit[0] |= NES_UP;
		if( g_mirror){
			if(paddata.Buttons & PSP_CTRL_LEFT)  g_PadBit[0] |= NES_RIGHT;
			if(paddata.Buttons & PSP_CTRL_RIGHT) g_PadBit[0] |= NES_LEFT;
		}else{
			if(paddata.Buttons & PSP_CTRL_LEFT)  g_PadBit[0] |= NES_LEFT;
			if(paddata.Buttons & PSP_CTRL_RIGHT) g_PadBit[0] |= NES_RIGHT;
		}
	}//<<<

	// Toggle モードじゃないときの処理
	if(!setting.bToggle) {
		// Speed mode
		if(setting.key_config[12] && (paddata.Buttons&setting.key_config[12])==setting.key_config[12]){
			stKeyState.nSpeedMode = EMU_SPEED_MODE1;
		}else if(setting.key_config[13] && (paddata.Buttons&setting.key_config[13])==setting.key_config[13]){
			stKeyState.nSpeedMode = EMU_SPEED_MODE2;
		}
		else {
			stKeyState.nSpeedMode = EMU_SPEED_NORMAL;
		}
	}
	else {
		// Speed mode 1(Toggle)
		if(setting.bToggle && setting.key_config[12] && (paddata.Buttons&setting.key_config[12])==setting.key_config[12]){
			if (!bTogglePushFlag) {
				if( stKeyState.nSpeedMode == EMU_SPEED_MODE1 ){
					char szTemp[128];
					stKeyState.nSpeedMode = EMU_SPEED_NORMAL;
					_strcpy(szTemp, "SPEED MODE: NORMAL");
					Scr_SetMessage(szTemp, 120, 0xFFFF);
				}else{
					char msg[256], szTemp[128];
					stKeyState.nSpeedMode = EMU_SPEED_MODE1;
					_strcpy(szTemp, "SPEED MODE: MODE 1 (");
					_itoa(setting.speedmode1, msg);
					_strcat(szTemp, msg);
					_strcat(szTemp, "fps)");
					Scr_SetMessage(szTemp, 120, 0xFFFF);
				}
				bTogglePushFlag = TRUE;
			}
			// キーをクリアすると押したとき動きが止まるのでクリアしない
			//g_PadBit[0]=0;
		}
		// Speed mode 2(Toggle)
		else if(setting.bToggle && setting.key_config[13] && (paddata.Buttons&setting.key_config[13])==setting.key_config[13]){
			if (!bTogglePushFlag) {
				if( stKeyState.nSpeedMode == EMU_SPEED_MODE2 ){
					char szTemp[128];
					stKeyState.nSpeedMode = EMU_SPEED_NORMAL;
					_strcpy(szTemp, "SPEED MODE: NORMAL");
					Scr_SetMessage(szTemp, 120, 0xFFFF);
				}else{
					char msg[256], szTemp[128];
					stKeyState.nSpeedMode = EMU_SPEED_MODE2;
					_strcpy(szTemp, "SPEED MODE: MODE 2 (");
					_itoa(setting.speedmode2, msg);
					_strcat(szTemp, msg);
					_strcat(szTemp, "fps)");
					Scr_SetMessage(szTemp, 120, 0xFFFF);
				}
				bTogglePushFlag = TRUE;
			}
			// キーをクリアすると押したとき動きが止まるのでクリアしない
			//g_PadBit[0]=0;
		}
		else {
			bTogglePushFlag = FALSE;
		}
	}

	if (1) {
		// Sound on/off
		if(setting.key_config[14] && (paddata.Buttons&setting.key_config[14])==setting.key_config[14]){
			if (!bPushFlag) {
				g_NESConfig.sound.enabled = g_NESConfig.sound.enabled ? 0: 1;
				Scr_SetMessage(g_NESConfig.sound.enabled ? "SOUND ENABLE": "SOUND DISABLE", 120, 0xFFFF);
				PSPEMU_ApplySoundConfig();
				wavout_enable=g_NESConfig.sound.enabled;
				bPushFlag = TRUE;
			}
			g_PadBit[0]=0;
		}
		// Screen size change
		else if(setting.key_config[15] && (paddata.Buttons&setting.key_config[15])==setting.key_config[15]){
			if (!bPushFlag) {
				setting.screenmode = (setting.screenmode + 1) % SCREEN_COUNT;
				char szTemp[128];
				_strcpy(szTemp, "SCREEN SIZE:");
				_strcat(szTemp, aszScreenName[setting.screenmode]);
				// 画面の掃除
				pgFillvram(0); pgScreenFlip();
				pgFillvram(0); pgScreenFlip();
				pgFillvram(0); pgScreenFlip();
				Scr_SetMessage(szTemp, 120, 0xFFFF);
				bPushFlag = TRUE;
			}
			g_PadBit[0]=0;
		}
		// Quick save
		else if(setting.key_config[16] && (paddata.Buttons&setting.key_config[16])==setting.key_config[16]){
			if (!bPushFlag) {
				PSPEMU_Freeze();
				if(PSPEMU_SaveState(StateSlot)) {
					char szTemp[128];
					_strcpy(szTemp, "State save at x");
					szTemp[sizeof("State save at x") - 2] = StateSlot+'0';
					Scr_SetMessage(szTemp, 120, 0xFFFF);
				}
				else
					Scr_SetMessage("State save Failed", 120, RGB(255, 0, 0));
				bPushFlag = TRUE;
				PSPEMU_Thaw();
			}
			g_PadBit[0]=0;
		}
		// Quick load
		else if(setting.key_config[17] && (paddata.Buttons&setting.key_config[17])==setting.key_config[17]){
			if (!bPushFlag) {
				if(PSPEMU_LoadState(StateSlot)) {
					char szTemp[128];
					_strcpy(szTemp, "State load at x");
					szTemp[sizeof("State load at x") - 2] = StateSlot+'0';
					Scr_SetMessage(szTemp, 120, 0xFFFF);
				}
				else
					Scr_SetMessage("State load Failed", 120, RGB(255, 0, 0));
				bPushFlag = TRUE;
			}
			g_PadBit[0]=0;
		}
		// Quick Slot change
		else if(setting.key_config[18] && (paddata.Buttons&setting.key_config[18])==setting.key_config[18]){
			if (!bPushFlag) {
				char szTemp[128];
				StateSlot = (StateSlot + 1) % STATE_SLOT_MAX;
				_strcpy(szTemp,"QUICK SLOT : x");
				szTemp[sizeof("QUICK SLOT : x") -2] = StateSlot+'0';
				Scr_SetMessage(szTemp, 120, 0xFFFF);
				bPushFlag = TRUE;
			}
			g_PadBit[0]=0;
		}
		//Battery Display by Smiths
		else if(setting.key_config[19] && (paddata.Buttons&setting.key_config[19])==setting.key_config[19]){
			if (!bPushFlag) {
				char szTemp[128];
				int color;
				GetBatteryInfoString(szTemp, &color);
				Scr_SetMessage(szTemp, 120, 0xFFFF);
				bPushFlag = TRUE;
			}
			// キーをクリアすると押したとき動きが止まるのでクリアしない
			// メッセージしか表示しないしねぇ
			// g_PadBit[0]=0;
		}
		// Screen shot
		else if(setting.key_config[20] && (paddata.Buttons&setting.key_config[20])==setting.key_config[20]){
			if (!bPushFlag) {
				PSPEMU_Freeze();
				if(PSPEMU_SaveScreenShot()) {
					Scr_SetMessage("Save the Screen Shot Successfully", 120, 0xFFFF);
				}
				else
					Scr_SetMessage("Save the Screen Shot Failed", 120, RGB(255, 0, 0));
				bPushFlag = TRUE;
				PSPEMU_Thaw();
			}
			g_PadBit[0]=0;
		}
		else {
			bPushFlag = FALSE;
		}
	}

//	now_sensor_x=2047-paddata.analog[PSP_CTRL_ANALOG_X]+127;
//	now_sensor_y=2047-paddata.analog[PSP_CTRL_ANALOG_Y]+127;
}
Example #6
0
int main(int argc, char** argv)
{
#ifdef USE_DEBUGNET
    int ret = debugNetInit("255.255.255.255", 18194, DEBUG);
    printf("debugNetInit: %d", ret);
#endif

    printf("DOOM started\n");

    setbuf(stdout, NULL);

    int res = scePowerSetArmClockFrequency(50);
    if (res != 0x0)
    {
        printf("scePowerSetArmClockFrequency failed! (0x%08x) (Normal if not using PSM Unity 1.06. No clock speed change for you.)\n", res);
    }

    myargc = 0;
    myargv = 0;

    doomwaddir = PSP2_DIR("Documents/");
    strcpy_s(doomwaddir2, 256, doomwaddir);
    strcat(doomwaddir2, "WADS/");

    printf("WAD folder: %s\n", doomwaddir2);

	//pspAudioInit();
	//pspAudioSetChannelCallback(0, (void *)&sound_callback);

	//_DisableFPUExceptions();
//	pspDebugScreenInit();

	//sceCtrlSetSamplingCycle(0);

	//int result = sceCtrlSetSamplingMode(PSP2_CTRL_MODE_ANALOG);
 //   if (result < 0)
 //   {
 //       printf("sceCtrlSetSamplingMode : 0x%x", result);
 //   }

	//SetupCallbacks();
        pgInit();
        pgScreenFrame(2,0);
        pgFillvram(0);

    Get_DirList(doomwaddir2);
    dlist_start  = 0;
    dlist_curpos = 0;
    now_depth    = 0;

while(1) {
    Draw_All();
switch(Control()) {
		case 1:
			Get_DirList(doomwaddir2);
			break;
		case 2:
                        pgFillvram(0);
                        strcpy_s(target, 264, doomwaddir2);
                        strcat(target, dlist[dlist_curpos].name);

                        pgScreenFlipV();
                        //pspDebugScreenInit();

    D_DoomMain (); 
        }
    }    

    return 0;

}
Example #7
0
// Picks an IP address - int[4]
int IP_picker(int* address)
{
    u32 buttonsLast = 0;
    int bRedraw = 1;
    int iPick = 0;
    int ipaddr[4];

    if (address == NULL)
        return -1; // nowhere to store the IP!

    // copy the address
    for (iPick = 0;iPick<4;iPick++) ipaddr[iPick]=address[iPick];
    iPick = 0;
    
    sceCtrlSetSamplingCycle(0);
    sceCtrlSetSamplingMode(0); // digital

    char number[5];
    while (1)
    {
        int i;
        SceCtrlData pad;
        u32 buttonsNew;


        if (bRedraw)
        {
            pgFillvram(0);
            pgPrint4AtPixel(X_TITLE, X_TITLE, COLOR_GREY50, "Server IP");
            for (i = 0; i < 4; i++)
            {
                u32 color1 = COLOR_GREY25;
                if (i == iPick)
		{
                    color1 = COLOR_GREY75;
                    // underline selected number
                    pgPrint2AtPixel(i*16*4+32, MIDSCREEN+16, COLOR_WHITE, "---");
                }
                sprintf(number,"%3d",ipaddr[i]);
                if (i < 3) {
		    number[3]='.';
		    number[4]=0;
                }
                pgPrint2AtPixel(i*16*4+32, MIDSCREEN, color1, number);
            }
            pgScreenFlipV();
            bRedraw = 0;
        }

        // handle inputs
        sceCtrlReadBufferPositive(&pad, 1);
        buttonsNew = pad.Buttons & ~buttonsLast;
        buttonsLast = pad.Buttons;
        if (buttonsNew & PSP_CTRL_RIGHT)
        {
            iPick++;
            if (iPick >= 4)
                iPick = 0;
            bRedraw = 1;
        }
        else if (buttonsNew & PSP_CTRL_LEFT)
        {
            iPick--;
            if (iPick < 0)
                iPick = 3;
            bRedraw = 1;
        }
        else if (buttonsLast & PSP_CTRL_UP) {
             ipaddr[iPick]++;
             if (ipaddr[iPick]>255) ipaddr[iPick]=0;
             bRedraw = 1;
        }
        else if (buttonsLast & PSP_CTRL_DOWN) {
             ipaddr[iPick]--;
             if (ipaddr[iPick]<0) ipaddr[iPick]=255;
             bRedraw = 1;
        }
        else if (buttonsNew & (PSP_CTRL_CIRCLE | PSP_CTRL_CROSS))
        {
                break; // picked !
        }
        else if (buttonsNew & PSP_CTRL_TRIANGLE)
        {
            iPick = -1; // cancel
            break;
        }
    }

    // show_confirmation: show final selection for a short time
    pgFillvram(0);
    pgPrint4AtPixel(X_TITLE, Y_TITLE, COLOR_GREY50, "Server IP");
    if (iPick != -1) {
	int i;
	for (i=0;i<4;i++) address[i]=ipaddr[i];
    }
    
    for (iPick = 0; iPick<4; iPick++) {
        sprintf(number,"%3d",address[iPick]);
    	if (iPick < 3) {
	    number[3]='.';
	    number[4]=0;
        }
        pgPrint2AtPixel(iPick*16*4+32, MIDSCREEN, COLOR_WHITE, number);
    }
    pgScreenFlipV();
    pgWaitVn(50);

    return 0;
}
Example #8
0
int my_picker(const PICKER* pickerP)
{
    int iPick = pickerP->pick_start;
    u32 buttonsLast = 0;
    int bRedraw = 1;

    if (pickerP->pick_count == 0)
        return -1; // nothing to pick

    sceCtrlSetSamplingCycle(0);
    sceCtrlSetSamplingMode(0); // digital

    while (1)
    {
        int i;
        SceCtrlData pad;
        u32 buttonsNew;

        if (pickerP->pick_count == 1)
        {
            // auto-pick if only one
            iPick = 0;
            break;
        }

        if (bRedraw)
        {
            pgFillvram(0);
            pgPrint4AtPixel(X_TITLE, X_TITLE, COLOR_GREY50, pickerP->szTitle);
            for (i = 0; i < pickerP->pick_count; i++)
            {
                PICKER_INFO const* pickP = &pickerP->picks[i];
                u32 color1 = COLOR_GREY25;
                u32 color2 = COLOR_GREY12;
                int y2;
                if (i == iPick)
                {
                    color1 = COLOR_GREY75;
                    color2 = COLOR_GREY50;
                    pgPrint4AtPixel(0, Y_PICK(i), COLOR_WHITE, STR_PICK);
                }
                pgPrint4AtPixel(X_PICK, Y_PICK(i), color1, pickP->szBig);
                y2 = Y_PICK_FINEPRINT(i);
                if (i != MAX_PICK-1)
                    y2 += 2;    // space it out a little
                pgPrint1AtPixel(X_PICK_FINEPRINT, y2, color2, pickP->szFinePrint);
            }
            pgScreenFlipV();
            bRedraw = 0;
        }

        // handle up/down inputs
        sceCtrlReadBufferPositive(&pad, 1); 
        buttonsNew = pad.Buttons & ~buttonsLast;
        buttonsLast = pad.Buttons;
        if (buttonsNew & PSP_CTRL_DOWN)
        {
            iPick++;
            if (iPick >= pickerP->pick_count)
                iPick = pickerP->pick_count-1;
            bRedraw = 1;
        }
        else if (buttonsNew & PSP_CTRL_UP)
        {
            iPick--;
            if (iPick < 0)
                iPick = 0;
            bRedraw = 1;
        }
        else if (buttonsNew & (PSP_CTRL_CIRCLE | PSP_CTRL_CROSS))
        {
            if (iPick >= 0 && iPick < pickerP->pick_count)
                break; // picked !
        }
        else if (buttonsNew & PSP_CTRL_TRIANGLE)
        {
            iPick = -1; // cancel
            break;
        }
    }

    // show_confirmation: show final selection for a short time
    pgFillvram(0);
    pgPrint4AtPixel(X_TITLE, Y_TITLE, COLOR_GREY50, pickerP->szTitle);
    if (iPick != -1)
        pgPrint4AtPixel(X_PICK, Y_PICK(iPick), COLOR_WHITE, pickerP->picks[iPick].szBig);
    else
        pgPrint4AtPixel(X_PICK, Y_PICK(2), COLOR_WHITE, "[Cancel]");
    pgScreenFlipV();
    pgWaitVn(50);

    return iPick;
}