Subversion Repositories Kolibri OS

Rev

Rev 1415 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
984 leency 1
//INI parser in C--, GPL licence.
2031 leency 2
//Leency - 2011
984 leency 3
 
4
#define COMMENT	0
5
#define SECTION	1
6
#define PARAM	2
7
#define OPTION	3
8
 
2031 leency 9
void GetIni(byte onload)
984 leency 10
{
11
	byte section[32]='', parametr[32]='', option[256]='', InfType=0;
12
	word bukva[1];
2031 leency 13
	int errornum;
984 leency 14
	dword buff, fsize, tj;
15
	//читаем файл
16
	buff = malloc(1048576);
2031 leency 17
	ReadFile(0, 1048576, buff, INI_PATH);
18
	IF (EAX<>6) //если файл с настройками не найден
19
	{
20
		IF (onload==1) RunProgram(NOTIFY_PATH, "Eolite.ini not found. Defaults will be used.");
21
		IF (onload==0) goto RUN_AS_PROGRAM;
22
	}
984 leency 23
	fsize=EBX;
24
	//парсим его
25
	for (tj=0; tj
26
	{
27
		bukva = ESBYTE[buff+tj];
28
		switch (bukva)
29
		{
30
			case ';':
31
				InfType=COMMENT;
32
				break;
33
			case '[':
34
				InfType=SECTION;
35
				section='';
36
				break;
37
			case ']':
38
				InfType=PARAM;
39
				break;
40
			case '=':
41
				InfType=OPTION;
42
				break;
43
			case 0x0a:
44
			case 0x0d:
45
				InfType=PARAM;
46
				//IF (strcmp(#parametr,"select_color")==0) videlenie=StrToCol(#option);
1415 leency 47
				IF (parametr) && (!strcmp(#file_name+find_symbol(#file_name,'.'),#parametr)) {
2031 leency 48
					errornum=RunProgram(#option,#file_path);
49
					IF (errornum<0) //если ошибочка вышла при запуске
50
					{
51
						WriteDebug(#option);
52
						Write_Debug_Error(errornum);
53
					}
1415 leency 54
					return;
55
				}
984 leency 56
				parametr=option='';
57
				break;
58
			default:
59
				IF (InfType==SECTION) copystr(#bukva,#section+strlen(#section));
60
				IF (InfType==PARAM) copystr(#bukva,#parametr+strlen(#parametr));
61
				IF (InfType==OPTION) copystr(#bukva,#option+strlen(#option));
62
		}
63
	}
2031 leency 64
	RUN_AS_PROGRAM:
65
	IF (file_path) errornum=RunProgram(#file_path,'');
66
	IF (errornum<0) //если ошибочка вышла при запуске
67
	{
68
		WriteDebug(#file_path);
69
		Write_Debug_Error(errornum);
70
	}
984 leency 71
}
2031 leency 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
	}
109
}