⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 config.c

📁 索尼公司著名游戏机PS2使用的引导工具文件源代码,这是爱好者自编的工具,可以使用它来引导自己的程序,达到跳过原光驱启动执行自己制作的程序的目的,在windows上可以安装使用ps2的专用开发包,搭建c
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "launchelf.h"

enum
{
	DEF_TIMEOUT = 10,
	DEF_FILENAME = TRUE,
	DEF_COLOR1 = ITO_RGBA(30,30,50,0),
	DEF_COLOR2 = ITO_RGBA(85,85,95,0),
	DEF_COLOR3 = ITO_RGBA(160,160,160,0),
	DEF_COLOR4 = ITO_RGBA(255,255,255,0),
	DEF_SCREEN_X = 128,
	DEF_SCREEN_Y = 30,
	DEF_DISCCONTROL = TRUE,
	DEF_INTERLACE = FALSE,
	
	DEFAULT=0,
	TIMEOUT=12,
	DISCCONTROL,
	FILENAME,
	SCREEN,
	OK,
	CANCEL
};

SETTING *setting, *tmpsetting;

////////////////////////////////////////////////////////////////////////
// 儊儌儕乕僇乕僪偺忬懺傪僠僃僢僋偡傞丅
// 栠傝抣偼桳岠側儊儌儕乕僇乕僪僗儘僢僩偺斣崋丅
// 儊儌儕乕僇乕僪偑憓偝偭偰偄側偄応崌偼-11傪曉偡丅
int CheckMC(void)
{
	int ret;
	
	mcGetInfo(0, 0, NULL, NULL, NULL);
	mcSync(0, NULL, &ret);

	if( -1 == ret || 0 == ret) return 0;

	mcGetInfo(0, 0, NULL, NULL, NULL);
	mcSync(0, NULL, &ret);

	if( -1 == ret || 0 == ret ) return 1;

	return -11;
}

////////////////////////////////////////////////////////////////////////
// LAUNCHELF.CNF 偵愝掕傪曐懚偡傞
void saveConfig(char *mainMsg)
{
	int i, ret, fd, size;
	const char LF[3]={0x0D, 0x0A, 0};
	char c[MAX_PATH], tmp[22][MAX_PATH];
	char* p;
	
	// 愝掕傪儊儌儕偵奿擺
	for(i=0; i<12; i++)
		strcpy(tmp[i], setting->dirElf[i]);
	sprintf(tmp[12], "%d", setting->timeout);
	sprintf(tmp[13], "%d", setting->filename);
	for(i=0; i<4; i++)
		sprintf(tmp[14+i], "%lu", setting->color[i]);
	sprintf(tmp[18], "%d", setting->screen_x);
	sprintf(tmp[19], "%d", setting->screen_y);
	sprintf(tmp[20], "%d", setting->discControl);
	sprintf(tmp[21], "%d", setting->interlace);
	
	p = (char*)malloc(sizeof(SETTING));
	p[0]=0;
	size=0;
	for(i=0; i<22; i++){
		strcpy(c, tmp[i]);
		strcat(c, LF);
		strcpy(p+size, c);
		size += strlen(c);
	}
	// LaunchELF偺僨傿儗僋僩儕偵CNF偑偁偭偨傜LaunchELF偺僨傿儗僋僩儕偵僙乕僽
	strcpy(c, LaunchElfDir);
	strcat(c, "LAUNCHELF.CNF");
	if((fd=fioOpen(c, O_RDONLY)) >= 0)
		fioClose(fd);
	else{
		if(!strncmp(LaunchElfDir, "mc", 2))
			sprintf(c, "mc%d:/SYS-CONF", LaunchElfDir[2]-'0');
		else
			sprintf(c, "mc%d:/SYS-CONF", CheckMC());
		// SYS-CONF偑偁偭偨傜SYS-CONF偵僙乕僽
		if((fd=fioDopen(c)) >= 0){
			fioDclose(fd);
			strcat(c, "/LAUNCHELF.CNF");
		// SYS-CONF偑側偐偭偨傜LaunchELF偺僨傿儗僋僩儕偵僙乕僽
		}else{
			strcpy(c, LaunchElfDir);
			strcat(c, "LAUNCHELF.CNF");
		}
	}
	strcpy(mainMsg,"Save Failed");
	// 彂偒崬傒
	if((fd=fioOpen(c,O_CREAT|O_WRONLY|O_TRUNC)) < 0){
		return;
	}
	ret = fioWrite(fd,p,size);
	if(ret==size) sprintf(mainMsg, "Save Config (%s)", c);
	fioClose(fd);
	free(p);
}

////////////////////////////////////////////////////////////////////////
// LAUNCHELF.CNF 偐傜愝掕傪撉傒崬傓
void loadConfig(char *mainMsg)
{
	int i, j, k, fd, len, mcport;
	size_t size;
	char path[MAX_PATH], tmp[22][MAX_PATH], *p;
	
	setting = (SETTING*)malloc(sizeof(SETTING));
	// LaunchELF偑幚峴偝傟偨僷僗偐傜愝掕僼傽僀儖傪奐偔
	sprintf(path, "%s%s", LaunchElfDir, "LAUNCHELF.CNF");
	if(!strncmp(path, "cdrom", 5)) strcat(path, ";1");
	fd = fioOpen(path, O_RDONLY);
	// 奐偗側偐偭偨傜丄SYS-CONF偺愝掕僼傽僀儖傪奐偔
	if(fd<0) {
		if(!strncmp(LaunchElfDir, "mc", 2))
			mcport = LaunchElfDir[2]-'0';
		else
			mcport = CheckMC();
		if(mcport==1 || mcport==0){
			sprintf(path, "mc%d:/SYS-CONF/LAUNCHELF.CNF", mcport);
			fd = fioOpen(path, O_RDONLY);
		}
	}
	// 偳偺僼傽僀儖傕奐偗側偐偭偨応崌丄愝掕傪弶婜壔偡傞
	if(fd<0) {
		for(i=0; i<12; i++)
			setting->dirElf[i][0] = 0;
		setting->timeout = DEF_TIMEOUT;
		setting->filename = DEF_FILENAME;
		setting->color[0] = DEF_COLOR1;
		setting->color[1] = DEF_COLOR2;
		setting->color[2] = DEF_COLOR3;
		setting->color[3] = DEF_COLOR4;
		setting->screen_x = DEF_SCREEN_X;
		setting->screen_y = DEF_SCREEN_Y;
		setting->discControl = DEF_DISCCONTROL;
		setting->interlace = DEF_INTERLACE;
		mainMsg[0] = 0;
	} else {
		// 愝掕僼傽僀儖傪儊儌儕偵撉傒崬傒
		size = fioLseek(fd, 0, SEEK_END);
		printf("size=%d\n", size);
		fioLseek(fd, 0, SEEK_SET);
		p = (char*)malloc(sizeof(size));
		fioRead(fd, p, size);
		fioClose(fd);
		
		// 寁22峴偺僥僉僗僩傪撉傒崬傓
		// 12峴栚傑偱偼儃僞儞僙僢僥傿儞僌
		// 13峴栚偼 TIMEOUT 抣
		// 14峴栚偼 PRINT ONLY FILENAME 偺愝掕抣
		// 15峴栚偼僇儔乕1
		// 16峴栚偼僇儔乕2
		// 17峴栚偼僇儔乕3
		// 18峴栚偼僇儔乕4
		// 19峴栚偼僗僋儕乕儞X
		// 20峴栚偼僗僋儕乕儞Y
		// 21峴栚偼僨傿僗僋僐儞僩儘乕儖
		// 22峴栚偼僀儞僞乕儗乕僗
		for(i=j=k=0; i<size; i++) {
			if(p[i]==0x0D && p[i+1]==0x0A) {
				if(i-k<MAX_PATH) {
					p[i]=0;
					strcpy(tmp[j++], &p[k]);
				} else
					break;
				if(j>=22)
					break;
				k=i+2;
			}
		}
		while(j<22)
			tmp[j++][0] = 0;
		// 儃僞儞僙僢僥傿儞僌
		for(i=0; i<12; i++) {
			// v3.01埲慜偺僶乕僕儑儞偲偺忋埵屳姺
			if(tmp[i][0] == '/')
				sprintf(setting->dirElf[i], "mc:%s", tmp[i]);
			else
				strcpy(setting->dirElf[i], tmp[i]);
		}
		// TIMEOUT抣偺愝掕
		if(tmp[12][0]) {
			setting->timeout = 0;
			len = strlen(tmp[12]);
			i = 1;
			while(len-- != 0) {
				setting->timeout += (tmp[12][len]-'0') * i;
				i *= 10;
			}
		} else
			setting->timeout = DEF_TIMEOUT;
		// PRINT ONLY FILENAME 偺愝掕
		if(tmp[13][0])
			setting->filename = tmp[13][0]-'0';
		else
			setting->filename = DEF_FILENAME;
		// 僇儔乕1偐傜4偺愝掕
		if(tmp[14][0]) {
			for(i=0; i<4; i++) {
				setting->color[i] = 0;
				len = strlen(tmp[14+i]);
				j = 1;
				while(len-- != 0) {
					setting->color[i] += (tmp[14+i][len]-'0') * j;
					j *= 10;
				}
			}
		} else {
			setting->color[0] = DEF_COLOR1;
			setting->color[1] = DEF_COLOR2;
			setting->color[2] = DEF_COLOR3;
			setting->color[3] = DEF_COLOR4;
		}
		// 僗僋儕乕儞X偺愝掕
		if(tmp[18][0]) {
			setting->screen_x = 0;
			j = strlen(tmp[18]);
			for(i=1; j; i*=10)
				setting->screen_x += (tmp[18][--j]-'0')*i;
		} else
			setting->screen_x = DEF_SCREEN_X;
		// 僗僋儕乕儞Y偺愝掕
		if(tmp[19][0]) {
			setting->screen_y = 0;
			j = strlen(tmp[19]);
			for(i=1; j; i*=10)
				setting->screen_y += (tmp[19][--j]-'0')*i;
		} else
			setting->screen_y = DEF_SCREEN_Y;
		// 僨傿僗僋僐儞僩儘乕儖偺愝掕
		if(tmp[20][0])
			setting->discControl = tmp[20][0]-'0';
		else
			setting->discControl = DEF_DISCCONTROL;
		// 僀儞僞乕儗乕僗偺愝掕
		if(tmp[21][0])
			setting->interlace = tmp[21][0]-'0';
		else
			setting->interlace = DEF_INTERLACE;
		
		free(p);
		sprintf(mainMsg, "Load Config (%s)", path);
	}
	return;
}

////////////////////////////////////////////////////////////////////////
// 僗僋儕乕儞僙僢僥傿儞僌夋柺
void setColor(void)
{
	int i;
	int s;
	int x, y;
	uint64 rgb[4][3];
	char c[MAX_PATH];
	
	for(i=0; i<4; i++) {
		rgb[i][0] = setting->color[i] & 0xFF;
		rgb[i][1] = setting->color[i] >> 8 & 0xFF;
		rgb[i][2] = setting->color[i] >> 16 & 0xFF;
	}
	
	s=0;
	while(1)
	{
		// 憖嶌
		waitPadReady(0, 0);
		if(readpad())
		{
			if(new_pad & PAD_UP)
			{
				if(s!=0)
					s--;
				else
					s=16;
			}
			else if(new_pad & PAD_DOWN)
			{
				if(s!=16)
					s++;
				else
					s=0;
			}
			else if(new_pad & PAD_LEFT)
			{
				if(s>=15) s=14;
				else if(s>=14) s=12;
				else if(s>=12) s=9;
				else if(s>=9) s=6;
				else if(s>=6) s=3;
				else if(s>=3) s=0;
			}
			else if(new_pad & PAD_RIGHT)
			{
				if(s>=14) s=15;
				else if(s>=12) s=14;
				else if(s>=9) s=12;
				else if(s>=6) s=9;
				else if(s>=3) s=6;
				else s=3;
			}
			else if(new_pad & PAD_CROSS)
			{
				if(s<12) {
					if(rgb[s/3][s%3] > 0) {
						rgb[s/3][s%3]--;
						setting->color[s/3] = 
							ITO_RGBA(rgb[s/3][0], rgb[s/3][1], rgb[s/3][2], 0);
						if(s/3 == 0) itoSetBgColor(setting->color[0]);
					}
				} else if(s==12) {
					if(setting->screen_x > 0) {
						setting->screen_x--;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -