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