Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | 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",
18
"Error #8 - FAT table is destroyed",
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);
39
		buff = malloc(12000);
40
		program_path[strrchr(#program_path, '/')] = NULL;
41
		strcat(#program_path, "Eolite.ini");
42
		ReadFile(0, 12000, buff, #program_path);
43
		fsize=EBX;
44
		IF (EAX<>6) ReadFile(0, 12000, buff, "/sys/File managers/Eolite.ini");
45
		IF (EAX<>6) notify("Eolite.ini not found. Defaults will be used.");
46
	}
47
	//парсим его
48
	for (tj=0; tj
49
	{
50
		bukva = ESBYTE[buff+tj];
51
		switch (bukva)
52
		{
53
			case ';':
54
				InfType=COMMENT;
55
				break;
56
			case '[':
57
				InfType=SECTION;
58
				section=NULL;
59
				break;
60
			case ']':
61
				InfType=PARAM;
62
				break;
63
			case '=':
64
				InfType=OPTION;
65
				break;
66
			case 0x0a:
67
			case 0x0d:
68
				InfType=PARAM;
69
				IF (!strcmp(#parametr,"SelectionColor")) edit2.shift_color=col_selec=StrToCol(#option);
70
				IF (!strcmp(#parametr,"LineHeight")) BUTTON_HEIGHT=atoi(#option);
71
				IF (!strcmp(#parametr,"ShowDeviceName")) show_dev_name=atoi(#option);
72
 
73
				/*if (!strcmp(#section,"UserDirectories")) && (parametr) && (onload)
74
				{
75
					copystr(#parametr, #disk_list[disc_num].Item);
76
					disc_num++;
77
				}*/
78
 
79
				IF (parametr) && (!strcmp(#file_name+strrchr(#file_name,'.'),#parametr)) && (!onload)
80
				{
81
					errornum=RunProgram(#option,#file_path);
82
					IF (errornum<0) Write_Error(errornum); //если ошибочка вышла при запуске
83
					return;
84
				}
85
				parametr=option=NULL;
86
				break;
87
			default:
88
				IF (InfType==SECTION) chrcat(#section, bukva);
89
				IF (InfType==PARAM) chrcat(#parametr, bukva);
90
				IF (InfType==OPTION) chrcat(#option, bukva);
91
		}
92
	}
93
	if (file_path) && (!onload)
94
	{
95
		errornum=RunProgram(#file_path,NULL);
96
		if (errornum<0) Write_Error(errornum); //если ошибочка вышла при запуске
97
	}
98
}
99
 
100
 
101
void Write_Error(int error_number)
102
{
103
	char error[256];
104
 
105
	if (error_number<0) error_number=-1*error_number;
106
 
107
	if (error_number<33)
108
		strcpy(#error, ERROR_TEXT[error_number]);
109
	else
110
		{
111
			strcpy(#error, itoa(error_number));
112
			strcat(#error, " - Unknown error number O_o");
113
		}
114
	if (curbtn>=0) Line_ReDraw(0xFF0000, curbtn);
115
	pause(5);
116
	notify(#error);
117
}
118
 
119
 
120
dword StrToCol(char* htmlcolor)
121
{
122
  dword j, color=0;
123
  char ch=0x00;
124
 
125
  FOR (j=0; j<6; j++)
126
  {
127
    ch=ESBYTE[htmlcolor+j];
128
    IF ((ch>='0') && (ch<='9')) ch -= '0';
129
    IF ((ch>='A') && (ch<='F')) ch -= 'A'-10;
130
    IF ((ch>='a') && (ch<='f')) ch -= 'a'-10;
131
    color = color*0x10 + ch;
132
  }
133
   return color;
134
}