예제 #1
0
파일: joystick.c 프로젝트: kenyahiro/px68k
void Joystick_Init(void)
{
#ifndef PSP
    int i, nr_joys, nr_axes, nr_btns, nr_hats;
#endif

    joy[0] = 1;  // active only one
    joy[1] = 0;
    JoyKeyState = 0;
    JoyKeyState0 = 0;
    JoyKeyState1 = 0;
    JoyState0[0] = 0xff;
    JoyState0[1] = 0xff;
    JoyState1[0] = 0xff;
    JoyState1[1] = 0xff;
    JoyPortData[0] = 0;
    JoyPortData[1] = 0;

#if defined(ANDROID) || TARGET_OS_IPHONE
    Joystick_Vbtn_Update(WinUI_get_vkscale());
#endif

#ifndef PSP
    sdl_joy = 0;

    SDL_InitSubSystem(SDL_INIT_JOYSTICK);

    nr_joys = SDL_NumJoysticks();
    p6logd("joy num %d\n", nr_joys);
    for (i = 0; i < nr_joys; i++) {
        sdl_joy = SDL_JoystickOpen(i);
        if (sdl_joy) {
            nr_btns = SDL_JoystickNumButtons(sdl_joy);
            nr_axes = SDL_JoystickNumAxes(sdl_joy);
            nr_hats = SDL_JoystickNumHats(sdl_joy);

#if SDL_VERSION_ATLEAST(2, 0, 0)
            p6logd("Name: %s\n", SDL_JoystickNameForIndex(i));
#endif
            p6logd("# of Axes: %d\n", nr_axes);
            p6logd("# of Btns: %d\n", nr_btns);
            p6logd("# of Hats: %d\n", nr_hats);

            // skip accelerometer and keyboard
            if (nr_btns < 2 || (nr_axes < 2 && nr_hats == 0)) {
                Joystick_Cleanup();
                sdl_joy = 0;
            } else {
                break;
            }
        } else {
            p6logd("can't open joy %d\n", i);
        }
    }
#endif
}
예제 #2
0
파일: prop.c 프로젝트: meesokim/px68k
int
set_modulepath(char *path, size_t len)
{
	struct stat sb;
	char *homepath;

#ifdef ANDROID
	const char *extpath;
	char *p, ep_buf[MAX_PATH], p6dir_buf[MAX_PATH];
	FILE *fp;

	p6dir_buf[0] = '\0';
	extpath = SDL_AndroidGetExternalStoragePath();
	p6logd("extpath:%s", extpath);

	// get the Android external path (.ex /storage/emulated/0)
	strcpy(p6dir_buf, extpath);
	p = strstr(p6dir_buf, "/Android/data/com.fc2.blog45.hissorii/files");
	if (p != NULL) {
		*p = '\0';
		p6logd("extpath2:%s", p6dir_buf);

		strcat(p6dir_buf, "/px68k");
		p6logd("p6dir_buf:%s", p6dir_buf);
		// if there is the px68k directory ...
		if (stat(p6dir_buf, &sb) == 0 && S_ISDIR(sb.st_mode)) {
			goto set_dir;
		}
	}

	if (extpath != NULL) {
		// read Android/data/com.fc2.blog45.hissorii/files/dir.txt
		sprintf(ep_buf, "%s/dir.txt", extpath);
		if ((fp = fopen(ep_buf, "r")) != NULL) {
			fgets(p6dir_buf, MAX_PATH - 1, fp);
			p6logd("p6dir:%s", p6dir_buf);
			fclose(fp);
		}
	}

	// if everything failed, try /sdcard/px68k directory
	if (p6dir_buf[0] == '\0') {
		strcpy(p6dir_buf, "/sdcard/px68k");
	}

set_dir:
	strcpy(path, p6dir_buf);
	p6logd("path:%s", path);

	sprintf(winx68k_ini, "%s/config", p6dir_buf);
	p6logd("config:%s", winx68k_ini);

	return 0;
#endif
#if TARGET_OS_IPHONE && TARGET_IPHONE_SIMULATOR == 0
        puts("Iphone...");
        sprintf(path, "/var/mobile/px68k");
        sprintf(winx68k_ini, "/var/mobile/px68k/config");
        return 0;
#endif

	homepath = getenv("HOME");
	if (homepath == 0)
		homepath = ".";

	snprintf(path, len, "%s/%s", homepath, ".keropi");
	if (stat(path, &sb) < 0) {
#ifdef WIN32		
		if (mkdir(path) < 0) {
#else
		if (mkdir(path, 0700) < 0) {
#endif
			perror(path);
			return 1;
		}
	} else {
		if ((sb.st_mode & S_IFDIR) == 0) {
			fprintf(stderr, "%s isn't directory.\n", path);
			return 1;
		}
	}
	snprintf(winx68k_ini, sizeof(winx68k_ini), "%s/%s", path, "config");
	if (stat(winx68k_ini, &sb) >= 0) {
		if (sb.st_mode & S_IFDIR) {
			fprintf(stderr, "%s is directory.\n", winx68k_ini);
			return 1;
		}
	}

	return 0;
}

void LoadConfig(void)
{
	int	i, j;
	char	buf[CFGLEN];
	FILEH fp;

	winx = GetPrivateProfileInt(ini_title, "WinPosX", 0, winx68k_ini);
	winy = GetPrivateProfileInt(ini_title, "WinPosY", 0, winx68k_ini);

#ifdef PSP
	Config.FrameRate = (BYTE)GetPrivateProfileInt(ini_title, "FrameRate", 5, winx68k_ini);
#else
	Config.FrameRate = (BYTE)GetPrivateProfileInt(ini_title, "FrameRate", 7, winx68k_ini);
#endif
	if (!Config.FrameRate) Config.FrameRate = 7;
	GetPrivateProfileString(ini_title, "StartDir", "", buf, MAX_PATH, winx68k_ini);
	if (buf[0] != 0)
		strncpy(filepath, buf, sizeof(filepath));
	else
		filepath[0] = 0;

	Config.OPM_VOL = GetPrivateProfileInt(ini_title, "OPM_Volume", 12, winx68k_ini);
	Config.PCM_VOL = GetPrivateProfileInt(ini_title, "PCM_Volume", 15, winx68k_ini);
	Config.MCR_VOL = GetPrivateProfileInt(ini_title, "MCR_Volume", 13, winx68k_ini);
#ifdef PSP
	Config.SampleRate = GetPrivateProfileInt(ini_title, "SampleRate", 11025, winx68k_ini);
#else
	Config.SampleRate = GetPrivateProfileInt(ini_title, "SampleRate", 22050, winx68k_ini);
#endif
	Config.BufferSize = GetPrivateProfileInt(ini_title, "BufferSize", 50, winx68k_ini);

	Config.MouseSpeed = GetPrivateProfileInt(ini_title, "MouseSpeed", 10, winx68k_ini);

	GetPrivateProfileString(ini_title, "FDDStatWin", "1", buf, CFGLEN, winx68k_ini);
	Config.WindowFDDStat = solveBOOL(buf);
	GetPrivateProfileString(ini_title, "FDDStatFullScr", "1", buf, CFGLEN, winx68k_ini);
	Config.FullScrFDDStat = solveBOOL(buf);

	GetPrivateProfileString(ini_title, "DSAlert", "1", buf, CFGLEN, winx68k_ini);
	Config.DSAlert = solveBOOL(buf);
	GetPrivateProfileString(ini_title, "SoundLPF", "1", buf, CFGLEN, winx68k_ini);
	Config.Sound_LPF = solveBOOL(buf);
	GetPrivateProfileString(ini_title, "UseRomeo", "0", buf, CFGLEN, winx68k_ini);
	Config.SoundROMEO = solveBOOL(buf);
	GetPrivateProfileString(ini_title, "MIDI_SW", "1", buf, CFGLEN, winx68k_ini);
	Config.MIDI_SW = solveBOOL(buf);
	GetPrivateProfileString(ini_title, "MIDI_Reset", "0", buf, CFGLEN, winx68k_ini);
	Config.MIDI_Reset = solveBOOL(buf);
	Config.MIDI_Type = GetPrivateProfileInt(ini_title, "MIDI_Type", 1, winx68k_ini);

	GetPrivateProfileString(ini_title, "JoySwap", "0", buf, CFGLEN, winx68k_ini);
	Config.JoySwap = solveBOOL(buf);

	GetPrivateProfileString(ini_title, "JoyKey", "0", buf, CFGLEN, winx68k_ini);
	Config.JoyKey = solveBOOL(buf);
	GetPrivateProfileString(ini_title, "JoyKeyReverse", "0", buf, CFGLEN, winx68k_ini);
	Config.JoyKeyReverse = solveBOOL(buf);
	GetPrivateProfileString(ini_title, "JoyKeyJoy2", "0", buf, CFGLEN, winx68k_ini);
	Config.JoyKeyJoy2 = solveBOOL(buf);
	GetPrivateProfileString(ini_title, "SRAMBootWarning", "1", buf, CFGLEN, winx68k_ini);
	Config.SRAMWarning = solveBOOL(buf);

	GetPrivateProfileString(ini_title, "WinDrvLFN", "1", buf, CFGLEN, winx68k_ini);
	Config.LongFileName = solveBOOL(buf);
	GetPrivateProfileString(ini_title, "WinDrvFDD", "1", buf, CFGLEN, winx68k_ini);
	Config.WinDrvFD = solveBOOL(buf);

	Config.WinStrech = GetPrivateProfileInt(ini_title, "WinStretch", 1, winx68k_ini);

	GetPrivateProfileString(ini_title, "DSMixing", "0", buf, CFGLEN, winx68k_ini);
	Config.DSMixing = solveBOOL(buf);

	Config.XVIMode = (BYTE)GetPrivateProfileInt(ini_title, "XVIMode", 0, winx68k_ini);

	GetPrivateProfileString(ini_title, "CDROM_ASPI", "1", buf, CFGLEN, winx68k_ini);
	Config.CDROM_ASPI = solveBOOL(buf);
	Config.CDROM_SCSIID = (BYTE)GetPrivateProfileInt(ini_title, "CDROM_SCSIID", 6, winx68k_ini);
	Config.CDROM_ASPI_Drive = (BYTE)GetPrivateProfileInt(ini_title, "CDROM_ASPIDrv", 0, winx68k_ini);
	Config.CDROM_IOCTRL_Drive = (BYTE)GetPrivateProfileInt(ini_title, "CDROM_CTRLDrv", 16, winx68k_ini);
	GetPrivateProfileString(ini_title, "CDROM_Enable", "1", buf, CFGLEN, winx68k_ini);
	Config.CDROM_Enable = solveBOOL(buf);

	GetPrivateProfileString(ini_title, "SSTP_Enable", "0", buf, CFGLEN, winx68k_ini);
	Config.SSTP_Enable = solveBOOL(buf);
	Config.SSTP_Port = GetPrivateProfileInt(ini_title, "SSTP_Port", 11000, winx68k_ini);

	GetPrivateProfileString(ini_title, "ToneMapping", "0", buf, CFGLEN, winx68k_ini);
	Config.ToneMap = solveBOOL(buf);
	GetPrivateProfileString(ini_title, "ToneMapFile", "", buf, MAX_PATH, winx68k_ini);
	if (buf[0] != 0)
		strcpy(Config.ToneMapFile, buf);
	else
		Config.ToneMapFile[0] = 0;

	Config.MIDIDelay = GetPrivateProfileInt(ini_title, "MIDIDelay", Config.BufferSize*5, winx68k_ini);
	Config.MIDIAutoDelay = GetPrivateProfileInt(ini_title, "MIDIAutoDelay", 1, winx68k_ini);

	Config.VkeyScale = GetPrivateProfileInt(ini_title, "VkeyScale", 4, winx68k_ini);

	Config.VbtnSwap = GetPrivateProfileInt(ini_title, "VbtnSwap", 0, winx68k_ini);

	Config.JoyOrMouse = GetPrivateProfileInt(ini_title, "JoyOrMouse", 0, winx68k_ini);

	Config.HwJoyAxis[0] = GetPrivateProfileInt(ini_title, "HwJoyAxis0", 0, winx68k_ini);

	Config.HwJoyAxis[1] = GetPrivateProfileInt(ini_title, "HwJoyAxis1", 1, winx68k_ini);

	Config.HwJoyHat = GetPrivateProfileInt(ini_title, "HwJoyHat", 0, winx68k_ini);

	for (i = 0; i < 8; i++) {
		sprintf(buf, "HwJoyBtn%d", i);
		Config.HwJoyBtn[i] = GetPrivateProfileInt(ini_title, buf, i, winx68k_ini);
	}

	Config.NoWaitMode = GetPrivateProfileInt(ini_title, "NoWaitMode", 0, winx68k_ini);

	for (i=0; i<2; i++)
	{
		for (j=0; j<8; j++)
		{
			sprintf(buf, "Joy%dButton%d", i+1, j+1);
			Config.JOY_BTN[i][j] = GetPrivateProfileInt(ini_title, buf, j, winx68k_ini);
		}
	}

	for (i = 0; i < 2; i++) {
		sprintf(buf, "FDD%d", i);
		GetPrivateProfileString(ini_title, buf, "", Config.FDDImage[i], MAX_PATH, winx68k_ini);
	}

	for (i=0; i<16; i++)
	{
		sprintf(buf, "HDD%d", i);
		GetPrivateProfileString(ini_title, buf, "", Config.HDImage[i], MAX_PATH, winx68k_ini);
	}

#if 0
	fp = File_OpenCurDir(KEYCONFFILE);
	if (fp)
	{
		File_Read(fp, KeyTable, 512);
		File_Close(fp);
	}
#endif
}