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