Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
2568 leency 1
//INI parser in C--, GPL licence.
2
//Leency - 2012
3
 
4
#define COMMENT	0
5
#define SECTION	1
6
#define PARAM	2
7
#define OPTION	3
8
 
9
char NOTIFY_PATH[7]="@notify";
10
 
11
void GetIni(byte onload)
12
{
13
	byte section[32]='', parametr[32]='', option[256]='', InfType=0;
14
	word bukva[1];
15
	int errornum;
16
	dword buff, fsize, tj;
17
	//читаем файл
18
	buff = malloc(1048576);
2814 leency 19
	IF (onload==1) copystr(".ini", #program_path+strlen(#program_path));
2568 leency 20
	ReadFile(0, 1048576, buff, #program_path);
21
	IF (EAX<>6) //если файла с настройками нет в папке с программой смотрим в папке по-умолчанию
22
		ReadFile(0, 1048576, buff, "/sys/File managers/Eolite.ini");
23
	IF (EAX<>6) //если файла с настройками тупо нет печалька
24
	{
25
		IF (onload==1) RunProgram(#NOTIFY_PATH, "Eolite.ini not found. Defaults will be used.");
26
		IF (onload==0) goto RUN_AS_PROGRAM;
27
	}
28
	fsize=EBX;
29
	//парсим его
30
	for (tj=0; tj
31
	{
32
		bukva = ESBYTE[buff+tj];
33
		switch (bukva)
34
		{
35
			case ';':
36
				InfType=COMMENT;
37
				break;
38
			case '[':
39
				InfType=SECTION;
40
				section='';
41
				break;
42
			case ']':
43
				InfType=PARAM;
44
				break;
45
			case '=':
46
				InfType=OPTION;
47
				break;
48
			case 0x0a:
49
			case 0x0d:
50
				InfType=PARAM;
2662 leency 51
				IF (!strcmp(#parametr,"SelectionColor")) videlenie=StrToCol(#option);
52
				IF (!strcmp(#parametr,"LineHeight")) BUTTON_HEIGHT=StrToInt(#option);
53
				IF (!strcmp(#parametr,"ShowDeviceName")) show_dev_name=StrToInt(#option);
2568 leency 54
 
2662 leency 55
				/*if (!strcmp(#section,"UserDirectories")) && (parametr) && (onload)
56
				{
57
					copystr(#parametr, #disk_list[disc_num].Item);
58
					disc_num++;
59
				}*/
60
 
2568 leency 61
				IF (parametr) && (!strcmp(#file_name+find_symbol(#file_name,'.'),#parametr)) {
62
					errornum=RunProgram(#option,#file_path);
63
					IF (errornum<0) //если ошибочка вышла при запуске
64
					{
65
						//WriteDebug(#option);
2814 leency 66
						Write_Error(errornum);
2568 leency 67
					}
68
					return;
69
				}
70
				parametr=option='';
71
				break;
72
			default:
73
				IF (InfType==SECTION) copystr(#bukva,#section+strlen(#section));
74
				IF (InfType==PARAM) copystr(#bukva,#parametr+strlen(#parametr));
75
				IF (InfType==OPTION) copystr(#bukva,#option+strlen(#option));
76
		}
77
	}
78
	RUN_AS_PROGRAM:
79
	IF (file_path) errornum=RunProgram(#file_path,'');
80
	IF (errornum<0) //если ошибочка вышла при запуске
81
	{
2814 leency 82
		Write_Error(errornum);
2568 leency 83
	}
84
}
85
 
86
 
87
///////////////////////////////////////////
88
/// нужно чтобы просто возвращало текст ///
89
///////////////////////////////////////////
90
 
2814 leency 91
void Write_Error(int error_number)
2568 leency 92
{
2814 leency 93
	char error[256];
2568 leency 94
	if (error_number<0) error_number=-1*error_number;
2814 leency 95
	switch (error_number)
2568 leency 96
	{
2814 leency 97
		case 2:	copystr("Error #2 - Function isn't supported for this file system", #error);
98
				break;
99
		case 3:	copystr("Error #3 - Unknown file system", #error);
100
				break;
101
		case 5: copystr("Error #5 - File or folder not found", #error);
102
				break;
103
		case 6:	copystr("Error #6 - End of file, EOF", #error);
104
				break;
105
		case 7:	copystr("Error #7 - Pointer lies outside of application memory", #error);
106
				break;
107
		case 8:	copystr("Error #8 - FAT table is destroyed", #error);
108
				break;
109
		case 9: copystr("Error #9 - FAT table is destroyed", #error);
110
				break;
111
		case 10:copystr("Error #10 - Access denied", #error);
112
				break;
113
		case 11:copystr("Error #11 - Device error", #error);
114
				break;
115
		case 30:copystr("Error #30 - Not enough memory", #error);
116
				break;
117
		case 31:copystr("Error #31 - File is not executable", #error);
118
				break;
119
		case 32:copystr("Error #32 - Too many processes", #error);
120
				break;
121
		default:copystr(IntToStr(error_number), #error);
122
				copystr(" - Unknown error number O_o", #error+strlen(#error));
2568 leency 123
	}
2814 leency 124
	if (curbtn>=0) Line_ReDraw(0xFF0000, curbtn);
125
	Pause(5);
126
	RunProgram(#NOTIFY_PATH, #error);
127
	//DrawBar(192,onTop(0, BUTTON_HEIGHT+7),onLeft(27,192),BUTTON_HEIGHT,0xFF0000);
128
	//WriteText(205,onTop(-5, BUTTON_HEIGHT+7),0x80,0xFFFFFF,#error,0);
129
 
130
 
2568 leency 131
}