Subversion Repositories Kolibri OS

Rev

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

Rev 2158 Rev 2496
1
//INI parser in C--, GPL licence.
1
//INI parser in C--, GPL licence.
2
//Leency - 2011
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
char NOTIFY_PATH[7]="@notify";
9
char NOTIFY_PATH[7]="@notify";
10
 
10
 
11
 
11
 
12
void GetIni(byte onload)
12
void GetIni(byte onload)
13
{
13
{
14
	byte section[32]='', parametr[32]='', option[256]='', InfType=0;
14
	byte section[32]='', parametr[32]='', option[256]='', InfType=0;
15
	word bukva[1];
15
	word bukva[1];
16
	int errornum;
16
	int errornum;
17
	dword buff, fsize, tj;
17
	dword buff, fsize, tj;
18
	//÷èòàåì ôàéë
18
	//÷èòàåì ôàéë
19
	buff = malloc(1048576);
19
	buff = malloc(1048576);
20
	IF (onload==1) copystr(".ini", #program_path+strlen(#program_path)); //facepalm
20
	IF (onload==1) copystr(".ini", #program_path+strlen(#program_path)); //facepalm
21
	ReadFile(0, 1048576, buff, #program_path);
21
	ReadFile(0, 1048576, buff, #program_path);
22
	IF (EAX<>6) //åñëè ôàéëà ñ íàñòðîéêàìè íåò â ïàïêå ñ ïðîãðàììîé ñìîòðèì â ïàïêå ïî-óìîë÷àíèþ
22
	IF (EAX<>6) //åñëè ôàéëà ñ íàñòðîéêàìè íåò â ïàïêå ñ ïðîãðàììîé ñìîòðèì â ïàïêå ïî-óìîë÷àíèþ
23
		ReadFile(0, 1048576, buff, "/sys/File managers/Eolite.ini");
23
		ReadFile(0, 1048576, buff, "/sys/File managers/Eolite.ini");
24
	IF (EAX<>6) //åñëè ôàéëà ñ íàñòðîéêàìè òóïî íåò ïå÷àëüêà
24
	IF (EAX<>6) //åñëè ôàéëà ñ íàñòðîéêàìè òóïî íåò ïå÷àëüêà
25
	{
25
	{
26
		IF (onload==1) RunProgram(#NOTIFY_PATH, "Eolite.ini not found. Defaults will be used.");
26
		IF (onload==1) RunProgram(#NOTIFY_PATH, "Eolite.ini not found. Defaults will be used.");
27
		IF (onload==0) goto RUN_AS_PROGRAM;
27
		IF (onload==0) goto RUN_AS_PROGRAM;
28
	}
28
	}
29
	fsize=EBX;
29
	fsize=EBX;
30
	//ïàðñèì åãî
30
	//ïàðñèì åãî
31
	for (tj=0; tj
31
	for (tj=0; tj
32
	{   
32
	{   
33
		bukva = ESBYTE[buff+tj];
33
		bukva = ESBYTE[buff+tj];
34
		switch (bukva)
34
		switch (bukva)
35
		{
35
		{
36
			case ';':
36
			case ';':
37
				InfType=COMMENT;
37
				InfType=COMMENT;
38
				break;				
38
				break;				
39
			case '[':
39
			case '[':
40
				InfType=SECTION;
40
				InfType=SECTION;
41
				section='';
41
				section='';
42
				break;
42
				break;
43
			case ']':
43
			case ']':
44
				InfType=PARAM;
44
				InfType=PARAM;
45
				break;
45
				break;
46
			case '=':
46
			case '=':
47
				InfType=OPTION;
47
				InfType=OPTION;
48
				break;
48
				break;
49
			case 0x0a:
49
			case 0x0a:
50
			case 0x0d:
50
			case 0x0d:
51
				InfType=PARAM;
51
				InfType=PARAM;
52
				//IF (strcmp(#parametr,"select_color")==0) videlenie=StrToCol(#option);
52
				//IF (strcmp(#parametr,"select_color")==0) videlenie=StrToCol(#option);
53
				IF (parametr) && (!strcmp(#file_name+find_symbol(#file_name,'.'),#parametr)) {
53
				IF (parametr) && (!strcmp(#file_name+find_symbol(#file_name,'.'),#parametr)) {
54
					errornum=RunProgram(#option,#file_path);
54
					errornum=RunProgram(#option,#file_path);
55
					IF (errornum<0) //åñëè îøèáî÷êà âûøëà ïðè çàïóñêå
55
					IF (errornum<0) //åñëè îøèáî÷êà âûøëà ïðè çàïóñêå
56
					{
56
					{
57
						//WriteDebug(#option);
57
						//WriteDebug(#option);
58
						Write_Debug_Error(errornum); 
58
						Write_Debug_Error(errornum); 
59
					}
59
					}
60
					return;
60
					return;
61
				}
61
				}
62
				parametr=option='';
62
				parametr=option='';
63
				break;
63
				break;
64
			default:
64
			default:
65
				IF (InfType==SECTION) copystr(#bukva,#section+strlen(#section));
65
				IF (InfType==SECTION) copystr(#bukva,#section+strlen(#section));
66
				IF (InfType==PARAM) copystr(#bukva,#parametr+strlen(#parametr));
66
				IF (InfType==PARAM) copystr(#bukva,#parametr+strlen(#parametr));
67
				IF (InfType==OPTION) copystr(#bukva,#option+strlen(#option));
67
				IF (InfType==OPTION) copystr(#bukva,#option+strlen(#option));
68
		}
68
		}
69
	}
69
	}
70
	RUN_AS_PROGRAM: 
70
	RUN_AS_PROGRAM: 
71
	IF (file_path) errornum=RunProgram(#file_path,''); 
71
	IF (file_path) errornum=RunProgram(#file_path,''); 
72
	IF (errornum<0) //åñëè îøèáî÷êà âûøëà ïðè çàïóñêå
72
	IF (errornum<0) //åñëè îøèáî÷êà âûøëà ïðè çàïóñêå
73
	{
73
	{
74
		//WriteDebug(#file_path);
74
		//WriteDebug(#file_path);
75
		Write_Debug_Error(errornum); 
75
		Write_Debug_Error(errornum); 
76
	}
76
	}
77
}
77
}
78
 
78
 
79
 
79
 
80
///////////////////////////////////////////
80
///////////////////////////////////////////
81
/// íóæíî ÷òîáû ïðîñòî âîçâðàùàëî òåêñò ///
81
/// íóæíî ÷òîáû ïðîñòî âîçâðàùàëî òåêñò ///
82
///////////////////////////////////////////
82
///////////////////////////////////////////
83
 
83
 
84
void Write_Debug_Error(int error_number)
84
void Write_Debug_Error(int error_number)
85
{
85
{
86
	char unknown_error[8];
86
	char unknown_error[8];
87
	
87
	
88
	if (error_number<0) error_number=-1*error_number;
88
	if (error_number<0) error_number=-1*error_number;
89
	switch (error_number) //èçâåñíàÿ îøèáêà - ïèøåì êàêàÿ è óõîäèì
89
	switch (error_number) //èçâåñíàÿ îøèáêà - ïèøåì êàêàÿ è óõîäèì
90
	{
90
	{
91
		CASE 2:	RunProgram(#NOTIFY_PATH, "Eolite: error 2 - Function is not supported for the given file system");
91
		CASE 2:	RunProgram(#NOTIFY_PATH, "Eolite: error 2 - Function is not supported for the given file system");
92
				return;				
92
				return;				
93
		CASE 3:	RunProgram(#NOTIFY_PATH, "Eolite: error 3 - Unknown file system");
93
		CASE 3:	RunProgram(#NOTIFY_PATH, "Eolite: error 3 - Unknown file system");
94
				return;
94
				return;
95
		CASE 5: RunProgram(#NOTIFY_PATH, "Eolite: error 5 - File or folder not found");
95
		CASE 5: RunProgram(#NOTIFY_PATH, "Eolite: error 5 - File or folder not found");
96
				return;
96
				return;
97
		CASE 6:	RunProgram(#NOTIFY_PATH, "Eolite: error 6 - End of file, EOF");
97
		CASE 6:	RunProgram(#NOTIFY_PATH, "Eolite: error 6 - End of file, EOF");
98
				return;
98
				return;
99
		CASE 7:	RunProgram(#NOTIFY_PATH, "Eolite: error 7 - Pointer lies outside of application memory");
99
		CASE 7:	RunProgram(#NOTIFY_PATH, "Eolite: error 7 - Pointer lies outside of application memory");
100
				return;		
100
				return;		
101
		case 8:	RunProgram(#NOTIFY_PATH, "Eolite: error 8 - FAT table is destroyed");
101
		case 8:	RunProgram(#NOTIFY_PATH, "Eolite: error 8 - FAT table is destroyed");
102
				return;		
102
				return;		
103
		case 9: RunProgram(#NOTIFY_PATH, "Eolite: error 9 - FAT table is destroyed");
103
		case 9: RunProgram(#NOTIFY_PATH, "Eolite: error 9 - FAT table is destroyed");
104
				return;
104
				return;
105
		case 10:RunProgram(#NOTIFY_PATH, "Eolite: error 10 - Access denied");
105
		case 10:RunProgram(#NOTIFY_PATH, "Eolite: error 10 - Access denied");
106
				RETURN;				
106
				RETURN;				
107
		case 11:RunProgram(#NOTIFY_PATH, "Eolite: error 11 - Device error");
107
		case 11:RunProgram(#NOTIFY_PATH, "Eolite: error 11 - Device error");
108
				RETURN;
108
				RETURN;
109
		case 30:RunProgram(#NOTIFY_PATH, "Eolite: error 30 - Not enough memory");
109
		case 30:RunProgram(#NOTIFY_PATH, "Eolite: error 30 - Not enough memory");
110
				RETURN;
110
				RETURN;
111
		case 31:RunProgram(#NOTIFY_PATH, "Eolite: error 31 - File is not executable");
111
		case 31:RunProgram(#NOTIFY_PATH, "Eolite: error 31 - File is not executable");
112
				RETURN;
112
				RETURN;
113
		case 32:RunProgram(#NOTIFY_PATH, "Eolite: error 32 - Too many processes");
113
		case 32:RunProgram(#NOTIFY_PATH, "Eolite: error 32 - Too many processes");
114
				RETURN;
114
				RETURN;
115
		default:copystr(IntToStr(error_number), #unknown_error);
115
		default:copystr(IntToStr(error_number), #unknown_error);
116
				copystr(" - Unknown error number O_o", #unknown_error+strlen(#unknown_error));
116
				copystr(" - Unknown error number O_o", #unknown_error+strlen(#unknown_error));
117
				RunProgram(#NOTIFY_PATH, #unknown_error);
117
				RunProgram(#NOTIFY_PATH, #unknown_error);
118
	}
118
	}
119
}
119
}