Rev 509 | Rev 513 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
488 | spraid | 1 | ;------------------------------------------------------------------------- |
2 | ; |
||
3 | ; Замена имен файлов |
||
4 | ; |
||
5 | ; |
||
6 | ; SPraid |
||
7 | ; |
||
8 | ;------------------------------------------------------------------------- |
||
9 | |||
512 | spraid | 10 | full_file_name_table dd 0 ; указатель на память для таблицы путей 4К запись 64 (32 - строка шаблон для поиска, 32 - строка шаблон для замены) |
11 | |||
488 | spraid | 12 | ; перебирает по файлу варианты замен |
13 | proc full_file_name stdcall,sourc,dest |
||
14 | locals |
||
15 | tmpsrc rb 60 ; временное хранение преобразования |
||
501 | serge | 16 | endl |
488 | spraid | 17 | pushad |
18 | mov esi,[sourc] |
||
512 | spraid | 19 | lea edi, [tmpsrc] |
501 | serge | 20 | |
488 | spraid | 21 | @@: |
22 | lodsb |
||
23 | stosb |
||
24 | or al,al |
||
25 | jnz @b |
||
26 | |||
27 | mov al,[conf_file_loaded] ; требуется при обращении к первому файлу (конфигу) |
||
28 | or al,al |
||
29 | jnz @use_replace |
||
501 | serge | 30 | |
488 | spraid | 31 | jmp full_file_name_exit |
32 | |||
501 | serge | 33 | |
488 | spraid | 34 | ;-------------------------------- |
35 | @use_replace: |
||
501 | serge | 36 | |
488 | spraid | 37 | xor eax,eax |
38 | .loop: |
||
39 | push eax |
||
512 | spraid | 40 | |
41 | imul eax,eax,64 |
||
42 | add eax,[full_file_name_table] |
||
43 | mov ebx,eax |
||
44 | add eax,32 |
||
45 | |||
46 | mov cl,[ebx] |
||
47 | or cl,cl |
||
488 | spraid | 48 | jz .done |
49 | |||
512 | spraid | 50 | lea ecx, [tmpsrc] |
501 | serge | 51 | mov edx,[dest] |
488 | spraid | 52 | |
512 | spraid | 53 | stdcall full_file_name_parse, ecx,edx,ebx,eax |
501 | serge | 54 | |
488 | spraid | 55 | mov esi,[dest] |
501 | serge | 56 | lea edi, [tmpsrc] |
488 | spraid | 57 | @@: |
58 | lodsb |
||
59 | stosb |
||
60 | or al,al |
||
61 | jnz @b |
||
501 | serge | 62 | |
488 | spraid | 63 | pop eax |
64 | inc eax |
||
65 | jmp .loop |
||
501 | serge | 66 | |
67 | .done: |
||
488 | spraid | 68 | pop eax |
69 | full_file_name_exit: |
||
70 | |||
501 | serge | 71 | lea eax, [tmpsrc] |
488 | spraid | 72 | stdcall full_file_name_parse , eax , [dest], sysdir_ , sys_path |
73 | popad |
||
74 | ret |
||
75 | endp |
||
76 | |||
77 | ; |
||
78 | ; Преобразовать имя в полное. Если в начале стоит |
||
79 | ; sourc - ссылка на строку... |
||
80 | ; dest - ссылка на буфер куда результат ложить |
||
81 | ; def - строка шаблон для поиска |
||
82 | ; dval - к чему приравнивать шаблон |
||
83 | proc full_file_name_parse stdcall,sourc,dest,def,dval |
||
84 | ; для одного |
||
85 | pushad |
||
86 | |||
87 | mov eax,[sourc] |
||
88 | mov ebx,[def] |
||
89 | @@: |
||
90 | mov dl,[ebx] |
||
91 | mov cl,[eax] |
||
92 | cmp cl,0 |
||
93 | je @@bad_s |
||
94 | cmp dl,0 |
||
95 | je @@good |
||
501 | serge | 96 | |
488 | spraid | 97 | or cl,0x20 |
98 | or dl,0x20 |
||
99 | cmp cl,dl |
||
100 | jne @@bad |
||
101 | |||
102 | inc eax |
||
103 | inc ebx |
||
104 | jmp @b |
||
105 | |||
106 | @@bad_s: |
||
107 | cmp dl,0 |
||
501 | serge | 108 | je @@good |
109 | |||
488 | spraid | 110 | @@bad: |
111 | mov edi,[dest] |
||
112 | mov esi,[sourc] |
||
113 | @@: |
||
114 | lodsb |
||
115 | stosb |
||
116 | or al,al |
||
117 | jnz @b |
||
118 | jmp @@ret_ok |
||
119 | |||
120 | @@good: |
||
121 | push eax |
||
122 | mov edi,[dest] |
||
123 | mov esi,[dval] |
||
124 | @@: |
||
125 | lodsb |
||
126 | stosb |
||
127 | or al,al |
||
501 | serge | 128 | jnz @b |
488 | spraid | 129 | |
501 | serge | 130 | @@goodl: |
488 | spraid | 131 | pop esi |
132 | dec edi |
||
133 | @@: |
||
134 | lodsb |
||
501 | serge | 135 | stosb |
488 | spraid | 136 | or al,al |
501 | serge | 137 | jnz @b |
488 | spraid | 138 | |
139 | @@ret_ok: |
||
140 | popad |
||
141 | ret |
||
142 | |||
501 | serge | 143 | endp |
144 | |||
488 | spraid | 145 | sys_dir_mess: db 'System dir is ' |
146 | sys_path: db '/HD0/1/KOLIBRI',0,0 |
||
147 | sysdir_ db '%sys%',0 |
||
148 | |||
149 | ; берет параметры bx_from_load и исчит файл конфигурации |
||
150 | Parser_params: |
||
151 | pushad |
||
509 | diamond | 152 | mov ax,[OS_BASE+0x10000+bx_from_load] |
488 | spraid | 153 | cmp al,'r' ; рам диск |
154 | jnz @f |
||
155 | mov [sys_path],dword '/RD/' |
||
156 | mov [sys_path+4],byte ah |
||
157 | mov [sys_path+5],word 0 ;0x002F |
||
158 | jmp .done |
||
159 | @@: |
||
160 | sub al,49 |
||
161 | mov [sys_path],dword '/HDa' |
||
162 | mov [sys_path+3],byte al |
||
163 | mov [sys_path+4],byte '/' |
||
164 | mov [sys_path+5],byte ah |
||
165 | mov [sys_path+6],dword '/KOL' |
||
166 | mov [sys_path+10],dword 'IBRI' |
||
167 | mov [sys_path+14],word 0 ;0x002F |
||
501 | serge | 168 | |
488 | spraid | 169 | .done: |
170 | popad |
||
171 | ret |
||
512 | spraid | 172 | |
173 | proc load_file_parse_table |
||
174 | pushad |
||
175 | stdcall kernel_alloc,0x1000 |
||
176 | mov [full_file_name_table],eax |
||
501 | serge | 177 | |
512 | spraid | 178 | invoke ini.enum_keys,conf_fname,conf_path_sect,get_every_key |
179 | |||
180 | mov eax,[loading_counter] |
||
181 | imul eax,eax,64 |
||
182 | add eax,[full_file_name_table] |
||
183 | mov [eax],byte 0 |
||
184 | popad |
||
185 | ret |
||
186 | endp |
||
187 | |||
188 | loading_counter dd 0 |
||
189 | def_val_1 db 0 |
||
190 | |||
191 | proc get_every_key stdcall,f_name, sec_name, key_name |
||
192 | pushad |
||
193 | mov esi,[key_name] |
||
194 | mov edi,[loading_counter] |
||
195 | imul edi,edi,64 |
||
196 | add edi,[full_file_name_table] |
||
197 | @@: |
||
198 | lodsb |
||
199 | stosb |
||
200 | or al,al |
||
201 | jnz @b |
||
202 | |||
203 | mov eax,[loading_counter] |
||
204 | imul eax,eax,64 |
||
205 | add eax,[full_file_name_table] |
||
206 | add eax,32 |
||
207 | mov ebx,[key_name] |
||
208 | invoke ini.get_str,conf_fname,conf_path_sect,ebx,eax,32,def_val_1 |
||
209 | |||
210 | inc dword [loading_counter] |
||
211 | |||
212 | popad |
||
213 | mov eax,1 |
||
214 | ret |
||
215 | endp |
||
216 |