Rev 3363 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3363 | Rev 3432 | ||
---|---|---|---|
1 | //INI parser in C--, GPL licence. |
1 | //INI parser in C--, GPL licence. |
2 | //Leency - 2012 |
2 | //Leency - 2012 |
3 | 3 | ||
4 | #define COMMENT 0 |
4 | #define COMMENT 0 |
5 | #define SECTION 1 |
5 | #define SECTION 1 |
6 | #define PARAM 2 |
6 | #define PARAM 2 |
7 | #define OPTION 3 |
7 | #define OPTION 3 |
8 | 8 | ||
9 | unsigned char *ERROR_TEXT[]={ |
9 | unsigned char *ERROR_TEXT[]={ |
10 | "Code #0 - No error", |
10 | "Code #0 - No error", |
11 | "Error #1 - Base or partition of a hard disk is not defined", |
11 | "Error #1 - Base or partition of a hard disk is not defined", |
12 | "Error #2 - Function isn't supported for this file system", |
12 | "Error #2 - Function isn't supported for this file system", |
13 | "Error #3 - Unknown file system", |
13 | "Error #3 - Unknown file system", |
14 | "Error #4 - Reserved, is never returned", |
14 | "Error #4 - Reserved, is never returned", |
15 | "Error #5 - File or folder not found", |
15 | "Error #5 - File or folder not found", |
16 | "Error #6 - End of file, EOF", |
16 | "Error #6 - End of file, EOF", |
17 | "Error #7 - Pointer lies outside of application memory", |
17 | "Error #7 - Pointer lies outside of application memory", |
18 | "Error #8 - FAT table is destroyed", |
18 | "Error #8 - Too less disk space", |
19 | "Error #9 - FAT table is destroyed", |
19 | "Error #9 - FAT table is destroyed", |
20 | "Error #10 - Access denied", |
20 | "Error #10 - Access denied", |
21 | "Error #11 - Device error", |
21 | "Error #11 - Device error", |
22 | 0, 0, 0, 0, 0, 0, 0, 0, 0, |
22 | 0, 0, 0, 0, 0, 0, 0, 0, 0, |
23 | 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", |
24 | "Error #30 - Not enough memory", |
25 | "Error #31 - File is not executable", |
25 | "Error #31 - File is not executable", |
26 | "Error #32 - Too many processes", |
26 | "Error #32 - Too many processes", |
27 | 0}; |
27 | 0}; |
28 | 28 | ||
29 | void GetIni(byte onload) |
29 | void GetIni(byte onload) |
30 | { |
30 | { |
31 | byte section[32], parametr[32], option[256], InfType=0; |
31 | byte section[32], parametr[32], option[256], InfType=0; |
32 | char bukva[2]; |
32 | char bukva[2]; |
33 | int errornum, tj; |
33 | int errornum, tj; |
34 | static dword buff, fsize; |
34 | static dword buff, fsize; |
35 | //÷èòàåì ôàéë |
35 | //÷èòàåì ôàéë |
36 | if (onload==1) |
36 | if (onload==1) |
37 | { |
37 | { |
38 | free(buff); |
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."); |
39 | if (!GetFile(#buff, #fsize, abspath("Eolite.ini"))) notify("Eolite.ini not found. Defaults will be used."); |
46 | } |
40 | } |
47 | //ïàðñèì åãî |
41 | //ïàðñèì åãî |
48 | for (tj=0; tj |
42 | for (tj=0; tj |
49 | { |
43 | { |
50 | bukva = ESBYTE[buff+tj]; |
44 | bukva = ESBYTE[buff+tj]; |
51 | switch (bukva) |
45 | switch (bukva) |
52 | { |
46 | { |
53 | case ';': |
47 | case ';': |
54 | InfType=COMMENT; |
48 | InfType=COMMENT; |
55 | break; |
49 | break; |
56 | case '[': |
50 | case '[': |
57 | InfType=SECTION; |
51 | InfType=SECTION; |
58 | section=NULL; |
52 | section=NULL; |
59 | break; |
53 | break; |
60 | case ']': |
54 | case ']': |
61 | InfType=PARAM; |
55 | InfType=PARAM; |
62 | break; |
56 | break; |
63 | case '=': |
57 | case '=': |
64 | InfType=OPTION; |
58 | InfType=OPTION; |
65 | break; |
59 | break; |
66 | case 0x0a: |
60 | case 0x0a: |
67 | case 0x0d: |
61 | case 0x0d: |
68 | InfType=PARAM; |
62 | InfType=PARAM; |
69 | IF (!strcmp(#parametr,"SelectionColor")) edit2.shift_color=col_selec=StrToCol(#option); |
63 | IF (!strcmp(#parametr,"SelectionColor")) edit2.shift_color=col_selec=StrToCol(#option); |
70 | IF (!strcmp(#parametr,"LineHeight")) BUTTON_HEIGHT=atoi(#option); |
64 | IF (!strcmp(#parametr,"LineHeight")) BUTTON_HEIGHT=atoi(#option); |
71 | IF (!strcmp(#parametr,"ShowDeviceName")) show_dev_name=atoi(#option); |
65 | IF (!strcmp(#parametr,"ShowDeviceName")) show_dev_name=atoi(#option); |
72 | 66 | ||
73 | /*if (!strcmp(#section,"UserDirectories")) && (parametr) && (onload) |
67 | /*if (!strcmp(#section,"UserDirectories")) && (parametr) && (onload) |
74 | { |
68 | { |
75 | copystr(#parametr, #disk_list[disc_num].Item); |
69 | copystr(#parametr, #disk_list[disc_num].Item); |
76 | disc_num++; |
70 | disc_num++; |
77 | }*/ |
71 | }*/ |
78 | 72 | ||
79 | IF (parametr) && (!strcmp(#file_name+strrchr(#file_name,'.'),#parametr)) && (!onload) |
73 | IF (parametr) && (!strcmp(#file_name+strrchr(#file_name,'.'),#parametr)) && (!onload) |
80 | { |
74 | { |
81 | errornum=RunProgram(#option,#file_path); |
75 | errornum=RunProgram(#option,#file_path); |
82 | IF (errornum<0) Write_Error(errornum); //åñëè îøèáî÷êà âûøëà ïðè çàïóñêå |
76 | IF (errornum<0) Write_Error(errornum); //åñëè îøèáî÷êà âûøëà ïðè çàïóñêå |
83 | return; |
77 | return; |
84 | } |
78 | } |
85 | parametr=option=NULL; |
79 | parametr=option=NULL; |
86 | break; |
80 | break; |
87 | default: |
81 | default: |
88 | IF (InfType==SECTION) chrcat(#section, bukva); |
82 | IF (InfType==SECTION) chrcat(#section, bukva); |
89 | IF (InfType==PARAM) chrcat(#parametr, bukva); |
83 | IF (InfType==PARAM) chrcat(#parametr, bukva); |
90 | IF (InfType==OPTION) chrcat(#option, bukva); |
84 | IF (InfType==OPTION) chrcat(#option, bukva); |
91 | } |
85 | } |
92 | } |
86 | } |
93 | if (file_path) && (!onload) |
87 | if (file_path) && (!onload) |
94 | { |
88 | { |
95 | errornum=RunProgram(#file_path,NULL); |
89 | errornum=RunProgram(#file_path,NULL); |
96 | if (errornum<0) Write_Error(errornum); //åñëè îøèáî÷êà âûøëà ïðè çàïóñêå |
90 | if (errornum<0) Write_Error(errornum); //åñëè îøèáî÷êà âûøëà ïðè çàïóñêå |
97 | } |
91 | } |
98 | } |
92 | } |
99 | 93 | ||
100 | 94 | ||
101 | void Write_Error(int error_number) |
95 | void Write_Error(int error_number) |
102 | { |
96 | { |
103 | char error[256]; |
97 | char error[256]; |
104 | 98 | ||
105 | if (error_number<0) error_number=-1*error_number; |
99 | if (error_number<0) error_number=-1*error_number; |
106 | 100 | ||
107 | if (error_number<33) |
101 | if (error_number<33) |
108 | strcpy(#error, ERROR_TEXT[error_number]); |
102 | strcpy(#error, ERROR_TEXT[error_number]); |
109 | else |
103 | else |
110 | { |
104 | { |
111 | strcpy(#error, itoa(error_number)); |
105 | strcpy(#error, itoa(error_number)); |
112 | strcat(#error, " - Unknown error number O_o"); |
106 | strcat(#error, " - Unknown error number O_o"); |
113 | } |
107 | } |
114 | if (curbtn>=0) Line_ReDraw(0xFF0000, curbtn); |
108 | if (curbtn>=0) Line_ReDraw(0xFF0000, curbtn); |
115 | pause(5); |
109 | pause(5); |
116 | notify(#error); |
110 | notify(#error); |
117 | } |
111 | } |
118 | 112 | ||
119 | 113 | ||
120 | dword StrToCol(char* htmlcolor) |
114 | dword StrToCol(char* htmlcolor) |
121 | { |
115 | { |
122 | dword j, color=0; |
116 | dword color; |
123 | char ch=0x00; |
117 | char j, ch; |
124 | 118 | ||
125 | FOR (j=0; j<6; j++) |
119 | FOR (j=0; j<6; j++) |
126 | { |
120 | { |
127 | ch=ESBYTE[htmlcolor+j]; |
121 | ch=ESBYTE[htmlcolor+j]; |
128 | IF ((ch>='0') && (ch<='9')) ch -= '0'; |
122 | IF ((ch>='0') && (ch<='9')) ch -= '0'; |
129 | IF ((ch>='A') && (ch<='F')) ch -= 'A'-10; |
123 | IF ((ch>='A') && (ch<='F')) ch -= 'A'-10; |
130 | IF ((ch>='a') && (ch<='f')) ch -= 'a'-10; |
124 | IF ((ch>='a') && (ch<='f')) ch -= 'a'-10; |
131 | color = color*0x10 + ch; |
125 | color = color*0x10 + ch; |
132 | } |
126 | } |
133 | return color; |
127 | return color; |
134 | }='f'))>='F'))>='9'))>6;>33) |
128 | }='f'))>='F'))>='9'))>6;>33) |
135 | >0)>0)>0)>>> |
129 | >0)>0)>0)> |