Rev 1415 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
984 | leency | 1 | //INI parser in C--, GPL licence. |
2031 | leency | 2 | //Leency - 2011 |
984 | leency | 3 | |
4 | #define COMMENT 0 |
||
5 | #define SECTION 1 |
||
6 | #define PARAM 2 |
||
7 | #define OPTION 3 |
||
8 | |||
2031 | leency | 9 | void GetIni(byte onload) |
984 | leency | 10 | { |
11 | byte section[32]='', parametr[32]='', option[256]='', InfType=0; |
||
12 | word bukva[1]; |
||
2031 | leency | 13 | int errornum; |
984 | leency | 14 | dword buff, fsize, tj; |
15 | //читаем файл |
||
16 | buff = malloc(1048576); |
||
2031 | leency | 17 | ReadFile(0, 1048576, buff, INI_PATH); |
18 | IF (EAX<>6) //если файл с настройками не найден |
||
19 | { |
||
20 | IF (onload==1) RunProgram(NOTIFY_PATH, "Eolite.ini not found. Defaults will be used."); |
||
21 | IF (onload==0) goto RUN_AS_PROGRAM; |
||
22 | } |
||
984 | leency | 23 | fsize=EBX; |
24 | //парсим его |
||
25 | for (tj=0; tj |
||
26 | { |
||
27 | bukva = ESBYTE[buff+tj]; |
||
28 | switch (bukva) |
||
29 | { |
||
30 | case ';': |
||
31 | InfType=COMMENT; |
||
32 | break; |
||
33 | case '[': |
||
34 | InfType=SECTION; |
||
35 | section=''; |
||
36 | break; |
||
37 | case ']': |
||
38 | InfType=PARAM; |
||
39 | break; |
||
40 | case '=': |
||
41 | InfType=OPTION; |
||
42 | break; |
||
43 | case 0x0a: |
||
44 | case 0x0d: |
||
45 | InfType=PARAM; |
||
46 | //IF (strcmp(#parametr,"select_color")==0) videlenie=StrToCol(#option); |
||
1415 | leency | 47 | IF (parametr) && (!strcmp(#file_name+find_symbol(#file_name,'.'),#parametr)) { |
2031 | leency | 48 | errornum=RunProgram(#option,#file_path); |
49 | IF (errornum<0) //если ошибочка вышла при запуске |
||
50 | { |
||
51 | WriteDebug(#option); |
||
52 | Write_Debug_Error(errornum); |
||
53 | } |
||
1415 | leency | 54 | return; |
55 | } |
||
984 | leency | 56 | parametr=option=''; |
57 | break; |
||
58 | default: |
||
59 | IF (InfType==SECTION) copystr(#bukva,#section+strlen(#section)); |
||
60 | IF (InfType==PARAM) copystr(#bukva,#parametr+strlen(#parametr)); |
||
61 | IF (InfType==OPTION) copystr(#bukva,#option+strlen(#option)); |
||
62 | } |
||
63 | } |
||
2031 | leency | 64 | RUN_AS_PROGRAM: |
65 | IF (file_path) errornum=RunProgram(#file_path,''); |
||
66 | IF (errornum<0) //если ошибочка вышла при запуске |
||
67 | { |
||
68 | WriteDebug(#file_path); |
||
69 | Write_Debug_Error(errornum); |
||
70 | } |
||
984 | leency | 71 | } |
2031 | leency | 72 | |
73 | |||
74 | /////////////////////////////////////////// |
||
75 | /// нужно чтобы просто возвращало текст /// |
||
76 | /////////////////////////////////////////// |
||
77 | |||
78 | void Write_Debug_Error(int error_number){ |
||
79 | |||
80 | IF (error_number<0) error_number=-1*error_number; |
||
81 | switch (error_number) //извесная ошибка - пишем какая и уходим |
||
82 | { |
||
83 | CASE 2: RunProgram(NOTIFY_PATH, "Eolite: error 2 - Function is not supported for the given file system"); |
||
84 | return; |
||
85 | CASE 3: RunProgram(NOTIFY_PATH, "Eolite: error 3 - Unknown file system"); |
||
86 | return; |
||
87 | CASE 5: RunProgram(NOTIFY_PATH, "Eolite: error 5 - File or folder not found"); |
||
88 | return; |
||
89 | CASE 6: RunProgram(NOTIFY_PATH, "Eolite: error 6 - End of file, EOF"); |
||
90 | return; |
||
91 | CASE 7: RunProgram(NOTIFY_PATH, "Eolite: error 7 - Pointer lies outside of application memory"); |
||
92 | return; |
||
93 | case 8: RunProgram(NOTIFY_PATH, "Eolite: error 8 - FAT table is destroyed"); |
||
94 | return; |
||
95 | case 9: RunProgram(NOTIFY_PATH, "Eolite: error 9 - FAT table is destroyed"); |
||
96 | RETURN; |
||
97 | case 10:RunProgram(NOTIFY_PATH, "Eolite: error 10 - Access denied"); |
||
98 | RETURN; |
||
99 | case 11:RunProgram(NOTIFY_PATH, "Eolite: error 11 - Device error"); |
||
100 | RETURN; |
||
101 | case 30:RunProgram(NOTIFY_PATH, "Eolite: error 30 - Not enough memory"); |
||
102 | RETURN; |
||
103 | case 31:RunProgram(NOTIFY_PATH, "Eolite: error 31 - File is not executable"); |
||
104 | RETURN; |
||
105 | case 32:RunProgram(NOTIFY_PATH, "Eolite: error 32 - Too many processes"); |
||
106 | RETURN; |
||
107 | default:RunProgram(NOTIFY_PATH, "Unknown error number O_o"); |
||
108 | } |
||
109 | }0)>0)>0)>> |