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 | }='f'))>='F'))>='9'))>6;>33) |