Subversion Repositories Kolibri OS

Rev

Rev 3363 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3363 Rev 3432
1
//INI parser in C--, GPL licence.
1
//INI parser in C--, GPL licence.
2
//Leency - 2012
2
//Leency - 2012
3
 
3
 
4
#define COMMENT	0
4
#define COMMENT	0
5
#define SECTION	1
5
#define SECTION	1
6
#define PARAM	2
6
#define PARAM	2
7
#define OPTION	3
7
#define OPTION	3
8
 
8
 
9
unsigned char *ERROR_TEXT[]={
9
unsigned char *ERROR_TEXT[]={
10
"Code #0 - No error",
10
"Code #0 - No error",
11
"Error #1 - Base or partition of a hard disk is not defined",
11
"Error #1 - Base or partition of a hard disk is not defined",
12
"Error #2 - Function isn't supported for this file system",
12
"Error #2 - Function isn't supported for this file system",
13
"Error #3 - Unknown file system",
13
"Error #3 - Unknown file system",
14
"Error #4 - Reserved, is never returned",
14
"Error #4 - Reserved, is never returned",
15
"Error #5 - File or folder not found",
15
"Error #5 - File or folder not found",
16
"Error #6 - End of file, EOF",
16
"Error #6 - End of file, EOF",
17
"Error #7 - Pointer lies outside of application memory",
17
"Error #7 - Pointer lies outside of application memory",
18
"Error #8 - FAT table is destroyed",
18
"Error #8 - Too less disk space",
19
"Error #9 - FAT table is destroyed",
19
"Error #9 - FAT table is destroyed",
20
"Error #10 - Access denied",
20
"Error #10 - Access denied",
21
"Error #11 - Device error",
21
"Error #11 - Device error",
22
0, 0, 0, 0, 0, 0, 0, 0, 0,
22
0, 0, 0, 0, 0, 0, 0, 0, 0,
23
0, 0, 0, 0, 0, 0, 0, 0, 0, 
23
0, 0, 0, 0, 0, 0, 0, 0, 0, 
24
"Error #30 - Not enough memory",
24
"Error #30 - Not enough memory",
25
"Error #31 - File is not executable",
25
"Error #31 - File is not executable",
26
"Error #32 - Too many processes",
26
"Error #32 - Too many processes",
27
0}; 
27
0}; 
28
 
28
 
29
void GetIni(byte onload)
29
void GetIni(byte onload)
30
{
30
{
31
	byte section[32], parametr[32], option[256], InfType=0;
31
	byte section[32], parametr[32], option[256], InfType=0;
32
	char bukva[2];
32
	char bukva[2];
33
	int errornum, tj;
33
	int errornum, tj;
34
	static dword buff, fsize;
34
	static dword buff, fsize;
35
	//÷èòàåì ôàéë
35
	//÷èòàåì ôàéë
36
	if (onload==1)
36
	if (onload==1)
37
	{
37
	{
38
		free(buff);
38
		free(buff);
39
		buff = malloc(12000);
-
 
40
		program_path[strrchr(#program_path, '/')] = NULL;
-
 
41
		strcat(#program_path, "Eolite.ini");
-
 
42
		ReadFile(0, 12000, buff, #program_path);
-
 
43
		fsize=EBX;
-
 
44
		IF (EAX<>6) ReadFile(0, 12000, buff, "/sys/File managers/Eolite.ini");
-
 
45
		IF (EAX<>6) notify("Eolite.ini not found. Defaults will be used.");
39
		if (!GetFile(#buff, #fsize, abspath("Eolite.ini"))) notify("Eolite.ini not found. Defaults will be used.");
46
	}
40
	}
47
	//ïàðñèì åãî
41
	//ïàðñèì åãî
48
	for (tj=0; tj
42
	for (tj=0; tj
49
	{   
43
	{   
50
		bukva = ESBYTE[buff+tj];
44
		bukva = ESBYTE[buff+tj];
51
		switch (bukva)
45
		switch (bukva)
52
		{
46
		{
53
			case ';':
47
			case ';':
54
				InfType=COMMENT;
48
				InfType=COMMENT;
55
				break;				
49
				break;				
56
			case '[':
50
			case '[':
57
				InfType=SECTION;
51
				InfType=SECTION;
58
				section=NULL;
52
				section=NULL;
59
				break;
53
				break;
60
			case ']':
54
			case ']':
61
				InfType=PARAM;
55
				InfType=PARAM;
62
				break;
56
				break;
63
			case '=':
57
			case '=':
64
				InfType=OPTION;
58
				InfType=OPTION;
65
				break;
59
				break;
66
			case 0x0a:
60
			case 0x0a:
67
			case 0x0d:
61
			case 0x0d:
68
				InfType=PARAM;
62
				InfType=PARAM;
69
				IF (!strcmp(#parametr,"SelectionColor")) edit2.shift_color=col_selec=StrToCol(#option);
63
				IF (!strcmp(#parametr,"SelectionColor")) edit2.shift_color=col_selec=StrToCol(#option);
70
				IF (!strcmp(#parametr,"LineHeight")) BUTTON_HEIGHT=atoi(#option);
64
				IF (!strcmp(#parametr,"LineHeight")) BUTTON_HEIGHT=atoi(#option);
71
				IF (!strcmp(#parametr,"ShowDeviceName")) show_dev_name=atoi(#option);
65
				IF (!strcmp(#parametr,"ShowDeviceName")) show_dev_name=atoi(#option);
72
				
66
				
73
				/*if (!strcmp(#section,"UserDirectories")) && (parametr) && (onload)
67
				/*if (!strcmp(#section,"UserDirectories")) && (parametr) && (onload)
74
				{
68
				{
75
					copystr(#parametr, #disk_list[disc_num].Item);
69
					copystr(#parametr, #disk_list[disc_num].Item);
76
					disc_num++;
70
					disc_num++;
77
				}*/
71
				}*/
78
				
72
				
79
				IF (parametr) && (!strcmp(#file_name+strrchr(#file_name,'.'),#parametr)) && (!onload)
73
				IF (parametr) && (!strcmp(#file_name+strrchr(#file_name,'.'),#parametr)) && (!onload)
80
				{
74
				{
81
					errornum=RunProgram(#option,#file_path);
75
					errornum=RunProgram(#option,#file_path);
82
					IF (errornum<0) Write_Error(errornum); //åñëè îøèáî÷êà âûøëà ïðè çàïóñêå
76
					IF (errornum<0) Write_Error(errornum); //åñëè îøèáî÷êà âûøëà ïðè çàïóñêå
83
					return;
77
					return;
84
				}
78
				}
85
				parametr=option=NULL;
79
				parametr=option=NULL;
86
				break;
80
				break;
87
			default:
81
			default:
88
				IF (InfType==SECTION) chrcat(#section, bukva);
82
				IF (InfType==SECTION) chrcat(#section, bukva);
89
				IF (InfType==PARAM) chrcat(#parametr, bukva);
83
				IF (InfType==PARAM) chrcat(#parametr, bukva);
90
				IF (InfType==OPTION) chrcat(#option, bukva);
84
				IF (InfType==OPTION) chrcat(#option, bukva);
91
		}
85
		}
92
	}
86
	}
93
	if (file_path) && (!onload)
87
	if (file_path) && (!onload)
94
	{
88
	{
95
		errornum=RunProgram(#file_path,NULL); 
89
		errornum=RunProgram(#file_path,NULL); 
96
		if (errornum<0) Write_Error(errornum); //åñëè îøèáî÷êà âûøëà ïðè çàïóñêå
90
		if (errornum<0) Write_Error(errornum); //åñëè îøèáî÷êà âûøëà ïðè çàïóñêå
97
	}
91
	}
98
}
92
}
99
 
93
 
100
 
94
 
101
void Write_Error(int error_number)
95
void Write_Error(int error_number)
102
{
96
{
103
	char error[256];
97
	char error[256];
104
 
98
 
105
	if (error_number<0) error_number=-1*error_number;
99
	if (error_number<0) error_number=-1*error_number;
106
	
100
	
107
	if (error_number<33)
101
	if (error_number<33)
108
		strcpy(#error, ERROR_TEXT[error_number]);
102
		strcpy(#error, ERROR_TEXT[error_number]);
109
	else
103
	else
110
		{
104
		{
111
			strcpy(#error, itoa(error_number));
105
			strcpy(#error, itoa(error_number));
112
			strcat(#error, " - Unknown error number O_o");
106
			strcat(#error, " - Unknown error number O_o");
113
		}
107
		}
114
	if (curbtn>=0) Line_ReDraw(0xFF0000, curbtn);
108
	if (curbtn>=0) Line_ReDraw(0xFF0000, curbtn);
115
	pause(5);
109
	pause(5);
116
	notify(#error);
110
	notify(#error);
117
}
111
}
118
 
112
 
119
 
113
 
120
dword StrToCol(char* htmlcolor)
114
dword StrToCol(char* htmlcolor)
121
{
115
{
122
  dword j, color=0;
116
	dword color;
123
  char ch=0x00;
117
	char j, ch;
124
  
118
 
125
  FOR (j=0; j<6; j++)
119
	FOR (j=0; j<6; j++)
126
  {
120
	{
127
    ch=ESBYTE[htmlcolor+j];
121
		ch=ESBYTE[htmlcolor+j];
128
    IF ((ch>='0') && (ch<='9')) ch -= '0';
122
		IF ((ch>='0') && (ch<='9')) ch -= '0';
129
    IF ((ch>='A') && (ch<='F')) ch -= 'A'-10;
123
		IF ((ch>='A') && (ch<='F')) ch -= 'A'-10;
130
    IF ((ch>='a') && (ch<='f')) ch -= 'a'-10;
124
		IF ((ch>='a') && (ch<='f')) ch -= 'a'-10;
131
    color = color*0x10 + ch;
125
		color = color*0x10 + ch;
132
  }
126
	}
133
   return color;
127
	return color;
134
}
128
}
135
>
129
>