Subversion Repositories Kolibri OS

Rev

Rev 1415 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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