📄 config.c
字号:
#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 + -