Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
3363 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
 
10
void GetIni(byte onload)
11
{
12
	byte section[32], parametr[32], option[256], InfType=0;
13
	char bukva[2];
14
	int errornum, tj;
15
	static dword buff, fsize;
16
	//читаем файл
17
	if (onload==1)
18
	{
19
		free(buff);
3432 leency 20
		if (!GetFile(#buff, #fsize, abspath("Eolite.ini"))) notify("Eolite.ini not found. Defaults will be used.");
3363 leency 21
	}
22
	//парсим его
23
	for (tj=0; tj
24
	{
25
		bukva = ESBYTE[buff+tj];
26
		switch (bukva)
27
		{
28
			case ';':
29
				InfType=COMMENT;
30
				break;
31
			case '[':
32
				InfType=SECTION;
33
				section=NULL;
34
				break;
35
			case ']':
36
				InfType=PARAM;
37
				break;
38
			case '=':
39
				InfType=OPTION;
40
				break;
41
			case 0x0a:
42
			case 0x0d:
43
				InfType=PARAM;
44
				IF (!strcmp(#parametr,"SelectionColor")) edit2.shift_color=col_selec=StrToCol(#option);
3434 leency 45
				IF (!strcmp(#parametr,"LineHeight")) files.line_h = atoi(#option);
3363 leency 46
				IF (!strcmp(#parametr,"ShowDeviceName")) show_dev_name=atoi(#option);
47
 
48
				/*if (!strcmp(#section,"UserDirectories")) && (parametr) && (onload)
49
				{
50
					copystr(#parametr, #disk_list[disc_num].Item);
51
					disc_num++;
52
				}*/
53
 
54
				IF (parametr) && (!strcmp(#file_name+strrchr(#file_name,'.'),#parametr)) && (!onload)
55
				{
56
					errornum=RunProgram(#option,#file_path);
57
					IF (errornum<0) Write_Error(errornum); //если ошибочка вышла при запуске
58
					return;
59
				}
60
				parametr=option=NULL;
61
				break;
62
			default:
63
				IF (InfType==SECTION) chrcat(#section, bukva);
64
				IF (InfType==PARAM) chrcat(#parametr, bukva);
65
				IF (InfType==OPTION) chrcat(#option, bukva);
66
		}
67
	}
68
	if (file_path) && (!onload)
69
	{
70
		errornum=RunProgram(#file_path,NULL);
71
		if (errornum<0) Write_Error(errornum); //если ошибочка вышла при запуске
72
	}
73
}
74
 
75
 
76
void Write_Error(int error_number)
77
{
3434 leency 78
	if (files.current>=0) Line_ReDraw(0xFF0000, files.current);
3363 leency 79
	pause(5);
3434 leency 80
	notify(get_error(error_number));
3363 leency 81
}
82
 
83
 
84
dword StrToCol(char* htmlcolor)
85
{
3433 leency 86
  dword j, color=0;
87
  char ch=0x00;
88
 
89
  FOR (j=0; j<6; j++)
90
  {
91
    ch=ESBYTE[htmlcolor+j];
92
    IF ((ch>='0') && (ch<='9')) ch -= '0';
93
    IF ((ch>='A') && (ch<='F')) ch -= 'A'-10;
94
    IF ((ch>='a') && (ch<='f')) ch -= 'a'-10;
95
    color = color*0x10 + ch;
96
  }
97
   return color;
3363 leency 98
}