[docs] Replace cyrillic 'с' with latin 'c' in register names
[kolibrios.git] / programs / media / zsea / load.inc
blobe45fc5e8694f12350733388b360a2faad3e89f0a
1 ;---------------------------------------------------------------------\r
2 load_plugins:\r
3 \r
4 load_libraries l_libs_start,end_l_libs\r
5 \r
6         test  eax,eax\r
7         jnz    START.exit_1\r
8 ;---------------------------------------------------------------------\r
9 ; Get ini values\r
10         call  Get_ini\r
11 ;       jmp  last_plugin\r
12 ;---------------------------------------------------------------------\r
13 ;       mov [cnv_plugin_name_pointer],plugin_0_name\r
14 load_convert_plugins:\r
15         mov     ecx,10\r
16 .1:\r
17         push    ecx\r
18         mov esi,[cnv_plugin_name_pointer]\r
19         cmp [esi],dword 'NoKe'\r
20         je  clear_current_load_convert_plugins_area ;last_plugin\r
21         mov edi,system_path.1\r
22         mov ecx,128/4\r
23         cld\r
24         rep movsd\r
25         \r
26 load_library system_path.1, library_path, system_path, \\r
27 [cnv_plugin_import_pointer], plugins_directory\r
29         test  eax,eax\r
30         jnz    START.exit_1\r
31 load_convert_plugins_next:      \r
32         add  [cnv_plugin_import_pointer],dword 24\r
33         add  [cnv_plugin_name_pointer],128\r
34         pop     ecx\r
35         dec     ecx\r
36         jnz     load_convert_plugins.1\r
37         \r
38 ;       jmp  load_convert_plugins\r
39         \r
40 last_plugin:\r
41 ; initialize sort\r
42         push dword 1\r
43         call dword [sort_init]\r
44 ; unpack deflate\r
45         mov   eax,[unpack_DeflateUnpack2]\r
46         mov  [deflate_unpack],eax\r
47         ret\r
48 ;-----------------------------------------\r
49 clear_current_load_convert_plugins_area:\r
50         xor     eax,eax\r
51         mov     edi,[cnv_plugin_import_pointer]\r
52         cld\r
53         push    ecx\r
54         mov     ecx,24/4\r
55         rep     stosd\r
56         pop     ecx\r
57         jmp     load_convert_plugins_next\r
58 ;---------------------------------------------------------------------\r
59 copy_path_my:\r
60     xor   eax,eax\r
61 @@:\r
62     cld\r
63     lodsb\r
64     stosb\r
65     test  eax,eax\r
66     jnz   @b\r
67     mov   esi,edi\r
68 @@:\r
69     std\r
70     lodsb\r
71     cmp   al,'/'\r
72     jnz   @b\r
73     mov   edi,esi\r
74     add   edi,2\r
75     mov   esi,ebx\r
76 @@:\r
77     cld\r
78     lodsb\r
79     stosb\r
80     test  eax,eax\r
81     jnz   @b\r
82     mov   esi,ecx\r
83     dec   edi\r
84 @@:\r
85     cld\r
86     lodsb\r
87     stosb\r
88     test  eax,eax\r
89     jnz   @b\r
90     ret\r
91 ;---------------------------------------------------------------------\r
92 load_image:\r
93         \r
94         call delete_RAW1\r
95         mov     [fileinfo+0],dword 5\r
96         mov     [fileinfo+12],dword 0\r
97         mov     [fileinfo+16],dword process_info\r
99     cmp  [soi],0\r
100     je    @f\r
101     mov   ecx,[raw_pointer]\r
102     mcall 68, 13,\r
103     mov  [soi],0\r
104 @@:\r
105 ;      cmp  [raw_pointer_2],dword 0\r
106 ;      je       @f\r
107 ;      mov   ecx,[raw_pointer_2]    ;[soi]\r
108 ;      mcall 68, 13,\r
109 ;      mov  [raw_pointer_2],0\r
110 ;@@:\r
111 .1:\r
112         mcall 70, fileinfo\r
113         test  eax,eax\r
114         jnz   .end\r
115  \r
116         mov     [fileinfo+0],dword 0\r
118         mov     ecx,[process_info+32]\r
120 ; for Diamond emulator, and broken files - size = 0\r
121 ;       test  ecx,ecx\r
122 ;       jnz    @f\r
123         cmp  ecx,32\r
124         jae   @f\r
125         mov   eax,6\r
126         jmp     .end\r
127 @@:\r
128         mov      [fileinfo+12],ecx\r
129         mov  [img_size],ecx\r
131         mcall 68, 12\r
133         mov     [fileinfo+16],eax\r
134         mov     [image_file],eax\r
136         mcall 70, fileinfo\r
137 .end:\r
138         mov  [error_fs],eax\r
140         ret\r
141 ;---------------------------------------------------------------------\r
142 delete_RAW1:\r
143         cmp  [RAW1_pointer],0\r
144         jne  @f\r
145         ret\r
146 @@:\r
147         mcall 68, 13,[previous_frame_pointer]\r
148         xor  eax,eax\r
149         mov  [Repeat_N],eax\r
150         \r
151 @@:\r
152         mov  edx,[Repeat_N]\r
153         shl  edx,4\r
154         add  edx,[RAW1_pointer]\r
155         mov  ecx,[edx+16]\r
156         call .1\r
157         \r
158         inc  [Repeat_N]\r
159         mov  eax,[Repeat_N]\r
160         cmp  [Total_Repeat_N],eax\r
161         ja  @r\r
162         \r
163         mov  ecx,[RAW1_pointer]\r
164         call .1\r
165         \r
166         xor   eax,eax\r
167         mov   [RAW1_pointer],eax\r
168         ret\r
169 .1:\r
170         mcall 68, 13,\r
171         ret\r
172 ;---------------------------------------------------------------------\r
173 load_buttons:\r
175     mov   esi,path\r
176     mov   edi,plugin_pach\r
177     mov   ebx,buttons_directory\r
178     mov   ecx,button_name ;buttons_passive_name\r
179     call  copy_path_my\r
180         \r
181         mov   [fileinfo.name], dword plugin_pach\r
183         xor  eax,eax\r
184     mov  [raw_pointer_2],eax\r
186         call  load_image\r
187     mov   eax,[error_fs]\r
188         test  eax,eax\r
189         jnz   START.exit_1\r
191         call  convert_plugin_invoke\r
192     mov   eax,[return_code]\r
193         test  eax,eax\r
194     jnz   START.exit_1\r
196         \r
197     mov  ebx,[raw_pointer]\r
198     mov  eax,[ebx+4]\r
199     mov  [dinamic_button_data_1.size_x],ax\r
200     mov  [dinamic_button_data_1.size_y],ax\r
201     mov  [dinamic_button_data_2.size_x],ax\r
202     mov  [dinamic_button_data_2.size_y],ax\r
203     mov  [dinamic_button_data_3.size_x],ax\r
204     mov  [dinamic_button_data_3.size_y],ax\r
205     mov  [dinamic_button_data_4.size_x],ax\r
206     mov  [dinamic_button_data_4.size_y],ax\r
207     mov  [dinamic_button_data_5.size_x],ax\r
208     mov  [dinamic_button_data_5.size_y],ax\r
209     mov  [dinamic_button_data_6.size_x],ax\r
210     mov  [dinamic_button_data_6.size_y],ax\r
211     mov  [dinamic_button_data_7.size_x],ax\r
212     mov  [dinamic_button_data_7.size_y],ax\r
213     mov  [dinamic_button_data_8.size_x],ax\r
214     mov  [dinamic_button_data_8.size_y],ax\r
215     mov  [dinamic_button_data_9.size_x],ax\r
216     mov  [dinamic_button_data_9.size_y],ax\r
217     mov  [dinamic_button_data_10.size_x],ax\r
218     mov  [dinamic_button_data_10.size_y],ax\r
219     mov  [dinamic_button_data_11.size_x],ax\r
220     mov  [dinamic_button_data_11.size_y],ax\r
221     mov  [dinamic_button_data_12.size_x],ax\r
222     mov  [dinamic_button_data_12.size_y],ax\r
223     mov  [dinamic_button_data_13.size_x],ax\r
224     mov  [dinamic_button_data_13.size_y],ax\r
225     mov  [dinamic_button_data_14.size_x],ax\r
226     mov  [dinamic_button_data_14.size_y],ax\r
227     mov  [dinamic_button_data_15.size_x],ax\r
228     mov  [dinamic_button_data_15.size_y],ax\r
229     mov  eax,[ebx+12]\r
230     mov  [dinamic_button_data_1.resolution_raw],eax\r
231     mov  [dinamic_button_data_2.resolution_raw],eax\r
232     mov  [dinamic_button_data_3.resolution_raw],eax\r
233     mov  [dinamic_button_data_4.resolution_raw],eax\r
234     mov  [dinamic_button_data_5.resolution_raw],eax\r
235     mov  [dinamic_button_data_6.resolution_raw],eax\r
236     mov  [dinamic_button_data_7.resolution_raw],eax\r
237     mov  [dinamic_button_data_8.resolution_raw],eax\r
238     mov  [dinamic_button_data_9.resolution_raw],eax\r
239     mov  [dinamic_button_data_10.resolution_raw],eax\r
240     mov  [dinamic_button_data_11.resolution_raw],eax\r
241     mov  [dinamic_button_data_12.resolution_raw],eax\r
242     mov  [dinamic_button_data_13.resolution_raw],eax\r
243     mov  [dinamic_button_data_14.resolution_raw],eax\r
244     mov  [dinamic_button_data_15.resolution_raw],eax\r
245     mov  eax,[ebx+20]\r
246     add  eax,ebx\r
247     mov  [dinamic_button_data_1.palette_raw],eax\r
248     mov  [dinamic_button_data_2.palette_raw],eax\r
249     mov  [dinamic_button_data_3.palette_raw],eax\r
250     mov  [dinamic_button_data_4.palette_raw],eax\r
251     mov  [dinamic_button_data_5.palette_raw],eax\r
252     mov  [dinamic_button_data_6.palette_raw],eax\r
253     mov  [dinamic_button_data_7.palette_raw],eax\r
254     mov  [dinamic_button_data_8.palette_raw],eax\r
255     mov  [dinamic_button_data_9.palette_raw],eax\r
256     mov  [dinamic_button_data_10.palette_raw],eax\r
257     mov  [dinamic_button_data_11.palette_raw],eax\r
258     mov  [dinamic_button_data_12.palette_raw],eax\r
259     mov  [dinamic_button_data_13.palette_raw],eax\r
260     mov  [dinamic_button_data_14.palette_raw],eax\r
261     mov  [dinamic_button_data_15.palette_raw],eax\r
262     mov  eax,[ebx+28]\r
263     add  eax,ebx\r
264         push    eax\r
265     mov  [dinamic_button_data_1.passive_raw],eax\r
266         mov  ecx,[ebx+4]\r
267         imul ecx,[ebx+4]\r
268         imul ecx,[ebx+12]\r
269         shr  ecx,3\r
270         add  eax,ecx\r
271     mov  [dinamic_button_data_2.passive_raw],eax\r
272         add  eax,ecx\r
273     mov  [dinamic_button_data_3.passive_raw],eax\r
274         add  eax,ecx\r
275     mov  [dinamic_button_data_4.passive_raw],eax\r
276         add  eax,ecx\r
277     mov  [dinamic_button_data_5.passive_raw],eax\r
278         add  eax,ecx\r
279     mov  [dinamic_button_data_6.passive_raw],eax\r
280         add  eax,ecx\r
281     mov  [dinamic_button_data_7.passive_raw],eax\r
282         add  eax,ecx\r
283     mov  [dinamic_button_data_8.passive_raw],eax\r
284         add  eax,ecx\r
285     mov  [dinamic_button_data_9.passive_raw],eax\r
286         add  eax,ecx\r
287     mov  [dinamic_button_data_10.passive_raw],eax\r
288         add  eax,ecx\r
289     mov  [dinamic_button_data_11.passive_raw],eax\r
290         add  eax,ecx\r
291     mov  [dinamic_button_data_12.passive_raw],eax\r
292         add  eax,ecx\r
293     mov  [dinamic_button_data_13.passive_raw],eax\r
294         add  eax,ecx\r
295     mov  [dinamic_button_data_14.passive_raw],eax\r
296         add  eax,ecx\r
297     mov  [dinamic_button_data_15.passive_raw],eax\r
298 ;------------------------------------\r
299         movzx   ebx,word [dinamic_button_data_1.size_x]\r
300         movzx   eax,word [dinamic_button_data_1.size_y]\r
301         imul    eax,ebx\r
302         imul    eax,15\r
303         mov     ebx,[dinamic_button_data_1.resolution_raw]\r
304         shr     ebx,3\r
305         imul    ebx,eax\r
306         \r
307         pop     eax\r
308         add     eax,ebx\r
309         push    eax\r
310     mov  [dinamic_button_data_1.active_raw],eax\r
311         add  eax,ecx\r
312     mov  [dinamic_button_data_2.active_raw],eax\r
313         add  eax,ecx\r
314     mov  [dinamic_button_data_3.active_raw],eax\r
315         add  eax,ecx\r
316     mov  [dinamic_button_data_4.active_raw],eax\r
317         add  eax,ecx\r
318     mov  [dinamic_button_data_5.active_raw],eax\r
319         add  eax,ecx\r
320     mov  [dinamic_button_data_6.active_raw],eax\r
321         add  eax,ecx\r
322     mov  [dinamic_button_data_7.active_raw],eax\r
323         add  eax,ecx\r
324     mov  [dinamic_button_data_8.active_raw],eax\r
325         add  eax,ecx\r
326     mov  [dinamic_button_data_9.active_raw],eax\r
327         add  eax,ecx\r
328     mov  [dinamic_button_data_10.active_raw],eax\r
329         add  eax,ecx\r
330     mov  [dinamic_button_data_11.active_raw],eax\r
331         add  eax,ecx\r
332     mov  [dinamic_button_data_12.active_raw],eax\r
333         add  eax,ecx\r
334     mov  [dinamic_button_data_13.active_raw],eax\r
335         add  eax,ecx\r
336     mov  [dinamic_button_data_14.active_raw],eax\r
337         add  eax,ecx\r
338     mov  [dinamic_button_data_15.active_raw],eax\r
339 ;------------------------------------\r
340         pop     eax\r
341         add     eax,ebx\r
342     mov  [dinamic_button_data_1.click_raw],eax\r
343         add  eax,ecx\r
344     mov  [dinamic_button_data_2.click_raw],eax\r
345         add  eax,ecx\r
346     mov  [dinamic_button_data_3.click_raw],eax\r
347         add  eax,ecx\r
348     mov  [dinamic_button_data_4.click_raw],eax\r
349         add  eax,ecx\r
350     mov  [dinamic_button_data_5.click_raw],eax\r
351         add  eax,ecx\r
352     mov  [dinamic_button_data_6.click_raw],eax\r
353         add  eax,ecx\r
354     mov  [dinamic_button_data_7.click_raw],eax\r
355         add  eax,ecx\r
356     mov  [dinamic_button_data_8.click_raw],eax\r
357         add  eax,ecx\r
358     mov  [dinamic_button_data_9.click_raw],eax\r
359         add  eax,ecx\r
360     mov  [dinamic_button_data_10.click_raw],eax\r
361         add  eax,ecx\r
362     mov  [dinamic_button_data_11.click_raw],eax\r
363         add  eax,ecx\r
364     mov  [dinamic_button_data_12.click_raw],eax\r
365         add  eax,ecx\r
366     mov  [dinamic_button_data_13.click_raw],eax\r
367         add  eax,ecx\r
368     mov  [dinamic_button_data_14.click_raw],eax\r
369         add  eax,ecx\r
370     mov  [dinamic_button_data_15.click_raw],eax\r
371 ;------------------------------------\r
372         mov   [fileinfo.name], dword string\r
373         xor  eax,eax\r
374         mov  [img_size],eax\r
375     ret\r
376 ;---------------------------------------------------------------------\r
377 load_directory:\r
378     cmp   [load_directory_pointer],dir_header ;dword 0\r
379         je    @f\r
380         mcall 68, 13, [load_directory_pointer]  \r
381 @@:\r
382         call  .copy_dir_path\r
383         mov   [dirinfo.size],dword 0\r
384         mov      [dirinfo.return],dir_header  ;procinfo \r
385         mcall 70, dirinfo\r
386         test  eax,eax\r
387         jnz   .end_err\r
388         \r
389         mov   ecx,[dir_header.totl_blocks]  ;[procinfo+8]\r
390         mov   [dirinfo.size],ecx\r
391         imul  ecx,304\r
392         add   ecx,32\r
393         mcall 68, 12\r
394         mov      [dirinfo.return],eax\r
395         mov  [load_directory_pointer],eax\r
397         mcall 70, dirinfo\r
398         test  eax,eax\r
399         jnz   .end_err\r
400         call  delete_unsupported_BDFE\r
401 .sort:\r
402         call  sort_directory\r
403 ;       add [load_directory_pointer],2*304+32+40\r
404     mov   ebp,[load_directory_pointer]\r
405         mov   ebp,[ebp+4]\r
406 ; check ebp = 0\r
407         test  ebp,ebp \r
408         jz   .end_1  ;.start\r
409         dec   ebp\r
410         jz   .end_1\r
412 .start:\r
413     mov   esi,file_name\r
414     mov   ecx,[file_name_length]\r
415         imul  edi,ebp,304\r
416         add   edi,32+40\r
417         add   edi,[load_directory_pointer]\r
418 @@:\r
419     cld\r
420         lodsb\r
421         call  char_todown\r
422         xchg  ah,al\r
423         xchg  edi,esi\r
424         cld\r
425         lodsb\r
426         call  char_todown\r
427 ;       xchg  ah,al\r
428         xchg  edi,esi\r
429         dec  ecx\r
430         jz   .end\r
431         cmp  ah,al\r
432     je   @r\r
433         \r
434     dec  ebp\r
435         jnz  .start\r
436 .end_1:\r
437         xor  eax,eax\r
438     mov  [load_file_number],eax\r
439         ret\r
440 .end:\r
441     mov  [load_file_number],ebp\r
442         xor  eax,eax\r
443 .end_err:\r
444         ret\r
445 ;-------------------------------------------\r
446 .copy_dir_path:\r
447     mov   esi,string  ;path\r
448     mov   edi,plugin_pach\r
449         mov   ebx,file_name\r
450         call  copy_dir_path\r
451         mov  [file_name_length],ebx\r
452         ret\r
453 ;---------------------------------------------------------------------\r
454 sort_directory:\r
455 ;       pusha\r
456         push  dword [sort_type]  ;2     ; ðåæèì ñîðòèðîâêè\r
457         mov   eax,[load_directory_pointer]\r
458         push  dword [eax+4] ;[dirdata+4]        ; ÷èñëî ôàéëîâ\r
459                                 ; ìîæíî ïèñàòü push ebx, åñëè\r
460                                 ; äåëî ïðîèñõîäèò íåïîñðåäñòâåííî ïîñëå int 0x40\r
461         add   eax,32\r
462         push  eax ;dirdata+32   ; äàííûå ôàéëîâ\r
463 ;       call  [plugin_sort]\r
464         call  [sort_dir]\r
465 ;       popa\r
466         ret\r
467 ;---------------------------------------------------------------------\r
468 delete_unsupported_BDFE:\r
470         mov      [fileinfo.subfunction],dword 0\r
471         mov      [fileinfo.size],dword 32\r
472         mov  [fileinfo.name], dword plugin_pach\r
473         \r
474         mov  eax,process_info\r
475         mov      [fileinfo.return],eax\r
476         mov     [image_file],eax\r
478         mov   ebx,[load_directory_pointer]\r
479         add   ebx,4\r
480         xor   ecx,ecx\r
481         dec   ecx\r
482         \r
483         mov   eax,[load_directory_pointer]\r
484         add   eax,32+40\r
485         sub   eax,304\r
486 .start:\r
487     inc   ecx\r
488         add   eax,304\r
489 .1:\r
490     cmp   [ebx],ecx\r
491         je    .end\r
492         cmp   [eax],byte '.'\r
493         jne   @f\r
494         cmp   [eax+1],byte 0\r
495         je    .delete\r
496 @@:\r
497         cmp   [eax],word '..'\r
498         jne   @f\r
499         cmp   [eax+2],byte 0\r
500         je    .delete\r
501 @@:\r
502         test   [eax-40],byte 0x10\r
503         jnz   .delete\r
505         push  eax ebx\r
506         mov   esi,eax\r
507         call  search_expansion\r
508         test   eax,eax\r
509         pop   ebx eax\r
510         jnz   .delete\r
511         \r
512 ;       mov  edi,[test_area+4]\r
513 ;       cmp  [esi],edi\r
514 ;       je   .start\r
516         mov edi,plugin_0_name\r
517         cmp [edi],dword 'NoKe'\r
518         je  .delete\r
520         push  eax ebx ecx esi\r
521         mov   edi,[Convert_plugin_0.Assoc]\r
522         test    edi,edi\r
523         jnz     @f\r
524         pop   esi ecx ebx eax\r
525         jmp     .delete\r
526 @@:\r
527         call  compare_expansion\r
528         test   eax,eax\r
529         pop   esi ecx ebx eax\r
530         jz   .start\r
531         \r
532         mov edi,plugin_1_name\r
533         cmp [edi],dword 'NoKe'\r
534         je  .delete\r
535         \r
536         push  eax ebx ecx esi\r
537         mov   edi,[Convert_plugin_1.Assoc]\r
538         test    edi,edi\r
539         jnz     @f\r
540         pop   esi ecx ebx eax\r
541         jmp     .delete\r
542 @@:\r
543         call  compare_expansion\r
544         test   eax,eax\r
545         pop   esi ecx ebx eax\r
546         jz   .start\r
548         mov edi,plugin_2_name\r
549         cmp [edi],dword 'NoKe'\r
550         je  .delete\r
551         \r
552         push  eax ebx ecx esi\r
553         mov   edi,[Convert_plugin_2.Assoc]\r
554         test    edi,edi\r
555         jnz     @f\r
556         pop   esi ecx ebx eax\r
557         jmp     .delete\r
558 @@:\r
559         call  compare_expansion\r
560         test   eax,eax\r
561         pop   esi ecx ebx eax\r
562         jz   .start\r
564         mov edi,plugin_3_name\r
565         cmp [edi],dword 'NoKe'\r
566         je  .delete\r
567         \r
568         push  eax ebx ecx esi\r
569         mov   edi,[Convert_plugin_3.Assoc]\r
570         test    edi,edi\r
571         jnz     @f\r
572         pop   esi ecx ebx eax\r
573         jmp     .delete\r
574 @@:\r
575         call  compare_expansion\r
576         test   eax,eax\r
577         pop   esi ecx ebx eax\r
578         jz   .start\r
579         \r
580         mov edi,plugin_4_name\r
581         cmp [edi],dword 'NoKe'\r
582         je  .delete\r
583         \r
584         push  eax ebx ecx esi\r
585         mov   edi,[Convert_plugin_4.Assoc]\r
586         test    edi,edi\r
587         jnz     @f\r
588         pop   esi ecx ebx eax\r
589         jmp     .delete\r
590 @@:\r
591         call  compare_expansion\r
592         test   eax,eax\r
593         pop   esi ecx ebx eax\r
594         jz   .start\r
595         \r
596         mov edi,plugin_5_name\r
597         cmp [edi],dword 'NoKe'\r
598         je  .delete\r
599         \r
600         push  eax ebx ecx esi\r
601         mov   edi,[Convert_plugin_5.Assoc]\r
602         test    edi,edi\r
603         jnz     @f\r
604         pop   esi ecx ebx eax\r
605         jmp     .delete\r
606 @@:\r
607         call  compare_expansion\r
608         test   eax,eax\r
609         pop   esi ecx ebx eax\r
610         jz   .start\r
611         \r
612         mov edi,plugin_6_name\r
613         cmp [edi],dword 'NoKe'\r
614         je  .delete\r
615         \r
616         push  eax ebx ecx esi\r
617         mov   edi,[Convert_plugin_6.Assoc]\r
618         test    edi,edi\r
619         jnz     @f\r
620         pop   esi ecx ebx eax\r
621         jmp     .delete\r
622 @@:\r
623         call  compare_expansion\r
624         test   eax,eax\r
625         pop   esi ecx ebx eax\r
626         jz   .start\r
627         \r
628         mov edi,plugin_7_name\r
629         cmp [edi],dword 'NoKe'\r
630         je  .delete\r
631         \r
632         push  eax ebx ecx esi\r
633         mov   edi,[Convert_plugin_7.Assoc]\r
634         test    edi,edi\r
635         jnz     @f\r
636         pop   esi ecx ebx eax\r
637         jmp     .delete\r
638 @@:\r
639         call  compare_expansion\r
640         test   eax,eax\r
641         pop   esi ecx ebx eax\r
642         jz   .start\r
643         \r
644         mov edi,plugin_8_name\r
645         cmp [edi],dword 'NoKe'\r
646         je  .delete\r
647         \r
648         push  eax ebx ecx esi\r
649         mov   edi,[Convert_plugin_8.Assoc]\r
650         test    edi,edi\r
651         jnz     @f\r
652         pop   esi ecx ebx eax\r
653         jmp     .delete\r
654 @@:\r
655         call  compare_expansion\r
656         test   eax,eax\r
657         pop   esi ecx ebx eax\r
658         jz   .start\r
659         \r
660         mov edi,plugin_9_name\r
661         cmp [edi],dword 'NoKe'\r
662         je  .delete\r
663         \r
664         push  eax ebx ecx esi\r
665         mov   edi,[Convert_plugin_9.Assoc]\r
666         test    edi,edi\r
667         jnz     @f\r
668         pop   esi ecx ebx eax\r
669         jmp     .delete\r
670 @@:\r
671         call  compare_expansion\r
672         test   eax,eax\r
673         pop   esi ecx ebx eax\r
674         jz   .start\r
675 ;-------------------------------------------\r
676 .delete:\r
677         dec   dword [ebx]\r
678         mov   esi,[ebx]\r
679         sub   esi,ecx\r
681         push  ecx\r
682         mov   ecx,esi\r
683         imul  ecx,304/4\r
684         mov   edi,eax\r
685         sub   edi,40\r
686         mov   esi,edi\r
687         add   esi,304\r
688         cld\r
689         rep  movsd\r
690         pop   ecx\r
691         \r
692         jmp  .1\r
693 .end:\r
694         mov   [fileinfo.name], dword string\r
695         ret\r
696 ;---------------------------------------------------------------------\r
697 image_editor:\r
698         mov   [start_appl.parameter],dword string\r
699         mov   [start_appl.name],dword  Editor_path\r
700         mcall 70, start_appl\r
701     jmp   still\r
702 ;---------------------------------------------------------------------\r
703 open_help:\r
704         mov             ebx,key_help_name\r
705     mov         esi,path\r
706     mov         edi,library_path\r
707     call        copy_file_path\r
708         mov   [start_appl.parameter],dword library_path\r
709         mov   [start_appl.name],dword Help_path\r
710         mcall 70, start_appl    \r
711     jmp   still\r
712 ;---------------------------------------------------------------------\r
713 char_todown:\r
714 ; convert character to uppercase, using cp866 encoding\r
715 ; in: al=symbol\r
716 ; out: al=converted symbol\r
717         cmp     al, 'A'\r
718         jb      .ret\r
719         cmp     al, 'Z'\r
720         jbe     .az\r
721         cmp     al, '€'\r
722         jb      .ret\r
723         cmp     al, '�'\r
724         jb      .rus1\r
725         cmp     al, 'Ÿ'\r
726         ja      .ret\r
727 ; 0x90-0x9F -> 0xE0-0xEF\r
728         add     al, 'à'-'�'\r
729 .ret:\r
730         ret\r
731 .rus1:\r
732 ; 0x80-0x8F -> 0xA0-0xAF\r
733 .az:\r
734         add     al, 0x20\r
735         ret\r
736 ;---------------------------------------------------------------------\r
737 copy_dir_path:\r
738     xor   eax,eax\r
739         cmp  [esi],al\r
740         jne  @f\r
741         mov  [edi],al\r
742         mov  [ebx],al\r
743         xor  ebx,ebx\r
744         inc  ebx\r
745         ret\r
746 @@:\r
747     cld\r
748     lodsb\r
749     stosb\r
750     test  eax,eax\r
751     jnz   @b\r
752     mov   esi,edi\r
753         dec   esi\r
754 @@:\r
755     std\r
756     lodsb\r
757     cmp   al,'/'\r
758     jnz   @b\r
759         \r
760         push  esi\r
761         add  esi,2\r
762         mov  edi,ebx  ;file_name\r
763         xor  ebx,ebx\r
764 @@:\r
765     cld\r
766     lodsb\r
767     stosb\r
768         inc   ebx\r
769     test  eax,eax\r
770     jnz   @b\r
771         pop   esi\r
772         \r
773     mov  [esi+1], byte 0\r
774     cld\r
775         ret\r
776 ;---------------------------------------------------------------------\r
777 copy_file_path:\r
778     xor   eax,eax\r
779 @@:\r
780     cld\r
781     lodsb\r
782     stosb\r
783     test  eax,eax\r
784     jnz   @b\r
785     mov   esi,edi\r
786     dec   esi\r
787 @@:\r
788     std\r
789     lodsb\r
790     cmp   al,'/'\r
791     jnz   @b\r
792     mov   edi,esi\r
793     add   edi,2\r
794     mov   esi,ebx\r
795 @@:\r
796     cld\r
797     lodsb\r
798     stosb\r
799     test  eax,eax\r
800     jnz   @b\r
801     ret\r
802 ;---------------------------------------------------------------------\r
803 search_expansion:\r
804     mov   edi,esi\r
805     xor   eax,eax\r
806 @@:\r
807     cld\r
808     lodsb\r
809     test  eax,eax\r
810     jnz   @b\r
811         mov   ebx,esi\r
812         dec   esi\r
813 @@:\r
814     std\r
815     lodsb\r
816     cmp  esi,edi\r
817         jb   .end_err\r
818     cmp   al,'.'\r
819     jne   @b\r
820         \r
821         add   esi,2\r
822         sub   ebx,esi\r
823         dec   ebx\r
824         mov   [expansion_length],ebx\r
825         cld\r
826         xor   eax,eax\r
827         ret\r
828         \r
829 .end_err:\r
830     cld\r
831     xor   eax,eax\r
832         inc   eax\r
833         ret\r
834 ;---------------------------------------------------------------------\r
835 compare_expansion:\r
836         mov     ebx,[edi]\r
837         add     ebx,edi\r
838         add     edi,3\r
839 .start:\r
840         cmp     ebx,edi\r
841         jb      .end_err\r
842         mov     ecx,[expansion_length]\r
843         inc     edi\r
844         \r
845         push    esi edi\r
846 @@:\r
847         cld\r
848         lodsb\r
849         xchg    esi,edi\r
850         shl     eax,8\r
851         lodsb\r
852         xchg    esi,edi\r
853         call    char_todown\r
854         xchg    al,ah\r
855         call    char_todown\r
856         cmp     al,ah\r
857         jne     @f\r
858         dec     ecx\r
859         jnz     @b\r
860         jmp     .end\r
861 @@:\r
862         pop     edi esi\r
863         jmp     .start\r
864         \r
865 ;       jnz   .start\r
866 .end:\r
867         pop     edi esi\r
868         xor     eax,eax\r
869         ret\r
870         \r
871 .end_err:\r
872         xor     eax,eax\r
873         inc     eax\r
874         ret\r
875 ;---------------------------------------------------------------------