Subversion Repositories Kolibri OS

Rev

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