Subversion Repositories Kolibri OS

Rev

Rev 3432 | 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
unsigned char *ERROR_TEXT[]={
10
"Code #0 - No error",
11
"Error #1 - Base or partition of a hard disk is not defined",
12
"Error #2 - Function isn't supported for this file system",
13
"Error #3 - Unknown file system",
14
"Error #4 - Reserved, is never returned",
15
"Error #5 - File or folder not found",
16
"Error #6 - End of file, EOF",
17
"Error #7 - Pointer lies outside of application memory",
3432 leency 18
"Error #8 - Too less disk space",
3363 leency 19
"Error #9 - FAT table is destroyed",
20
"Error #10 - Access denied",
21
"Error #11 - Device error",
22
0, 0, 0, 0, 0, 0, 0, 0, 0,
23
0, 0, 0, 0, 0, 0, 0, 0, 0,
24
"Error #30 - Not enough memory",
25
"Error #31 - File is not executable",
26
"Error #32 - Too many processes",
27
0};
28
 
29
void GetIni(byte onload)
30
{
31
	byte section[32], parametr[32], option[256], InfType=0;
32
	char bukva[2];
33
	int errornum, tj;
34
	static dword buff, fsize;
35
	//читаем файл
36
	if (onload==1)
37
	{
38
		free(buff);
3432 leency 39
		if (!GetFile(#buff, #fsize, abspath("Eolite.ini"))) notify("Eolite.ini not found. Defaults will be used.");
3363 leency 40
	}
41
	//парсим его
42
	for (tj=0; tj
43
	{
44
		bukva = ESBYTE[buff+tj];
45
		switch (bukva)
46
		{
47
			case ';':
48
				InfType=COMMENT;
49
				break;
50
			case '[':
51
				InfType=SECTION;
52
				section=NULL;
53
				break;
54
			case ']':
55
				InfType=PARAM;
56
				break;
57
			case '=':
58
				InfType=OPTION;
59
				break;
60
			case 0x0a:
61
			case 0x0d:
62
				InfType=PARAM;
63
				IF (!strcmp(#parametr,"SelectionColor")) edit2.shift_color=col_selec=StrToCol(#option);
64
				IF (!strcmp(#parametr,"LineHeight")) BUTTON_HEIGHT=atoi(#option);
65
				IF (!strcmp(#parametr,"ShowDeviceName")) show_dev_name=atoi(#option);
66
 
67
				/*if (!strcmp(#section,"UserDirectories")) && (parametr) && (onload)
68
				{
69
					copystr(#parametr, #disk_list[disc_num].Item);
70
					disc_num++;
71
				}*/
72
 
73
				IF (parametr) && (!strcmp(#file_name+strrchr(#file_name,'.'),#parametr)) && (!onload)
74
				{
75
					errornum=RunProgram(#option,#file_path);
76
					IF (errornum<0) Write_Error(errornum); //если ошибочка вышла при запуске
77
					return;
78
				}
79
				parametr=option=NULL;
80
				break;
81
			default:
82
				IF (InfType==SECTION) chrcat(#section, bukva);
83
				IF (InfType==PARAM) chrcat(#parametr, bukva);
84
				IF (InfType==OPTION) chrcat(#option, bukva);
85
		}
86
	}
87
	if (file_path) && (!onload)
88
	{
89
		errornum=RunProgram(#file_path,NULL);
90
		if (errornum<0) Write_Error(errornum); //если ошибочка вышла при запуске
91
	}
92
}
93
 
94
 
95
void Write_Error(int error_number)
96
{
97
	char error[256];
98
 
99
	if (error_number<0) error_number=-1*error_number;
100
 
101
	if (error_number<33)
102
		strcpy(#error, ERROR_TEXT[error_number]);
103
	else
104
		{
105
			strcpy(#error, itoa(error_number));
106
			strcat(#error, " - Unknown error number O_o");
107
		}
108
	if (curbtn>=0) Line_ReDraw(0xFF0000, curbtn);
109
	pause(5);
110
	notify(#error);
111
}
112
 
113
 
114
dword StrToCol(char* htmlcolor)
115
{
3433 leency 116
  dword j, color=0;
117
  char ch=0x00;
118
 
119
  FOR (j=0; j<6; j++)
120
  {
121
    ch=ESBYTE[htmlcolor+j];
122
    IF ((ch>='0') && (ch<='9')) ch -= '0';
123
    IF ((ch>='A') && (ch<='F')) ch -= 'A'-10;
124
    IF ((ch>='a') && (ch<='f')) ch -= 'a'-10;
125
    color = color*0x10 + ch;
126
  }
127
   return color;
3363 leency 128
}