Rev 8839 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 8839 | Rev 8853 | ||
---|---|---|---|
Line 12... | Line 12... | ||
12 | ;8 1,dir4 |
12 | ;8 1,dir4 |
13 | ;9 2,dir41 |
13 | ;9 2,dir41 |
Line 14... | Line -... | ||
14 | - | ||
15 | - | ||
16 | - | ||
17 | - | ||
18 | RAZD equ 1 ; ª à §¤¥«¨â¥«ï áâப |
- | |
19 | - | ||
20 | F_ONLY_READ equ 1b |
- | |
21 | F_HIDDEN equ 10b |
- | |
22 | F_SYSTEM equ 100b |
- | |
23 | F_LABEL equ 1000b |
- | |
24 | F_FOLDER equ 10000b |
14 | |
25 | F_NOT_BACKUP equ 100000b |
- | |
- | 15 | ||
26 | 16 | ||
27 | TR_LINE_H equ 18 |
- | |
Line 28... | Line 17... | ||
28 | TR_STEP_W equ 10 |
17 | TR_LINE_H equ 18 |
29 | NUM_READ_FILES = 26 |
18 | |
30 | TR_BACKGROUND = 0EFF8FFh |
19 | NUM_READ_FILES = 26 |
31 | 20 | ||
32 | 21 | ||
Line 33... | Line -... | ||
33 | - | ||
34 | - | ||
35 | macro p2p r1,r2 |
- | |
36 | { |
- | |
37 | push dword r2 |
- | |
38 | pop dword r1 |
- | |
39 | } |
- | |
40 | - | ||
41 | macro CopyStr strOut,strIn |
- | |
42 | { |
- | |
43 | mov edi,strOut |
- | |
44 | mov esi,strIn |
- | |
45 | @@: lodsb |
- | |
46 | stosb |
- | |
47 | test al,al |
- | |
48 | jnz @b |
- | |
49 | } |
- | |
50 | - | ||
51 | - | ||
52 | struct _BDWK |
- | |
53 | flags rd 1 ;bit0: only read , hidden , system , label , folder , not backup |
- | |
54 | encod rb 1 ;0-ASCII, 1-UNICODE |
- | |
55 | res rb 3 |
- | |
56 | timeCreated rd 1 |
- | |
57 | dataCreated rd 1 |
- | |
58 | lastTimeAccess rd 1 |
- | |
59 | lastDataAccess rd 1 |
- | |
60 | lastTimeModify rd 1 |
- | |
61 | lastDataModify rd 1 |
- | |
62 | size rq 1 |
- | |
63 | name rb 263 |
- | |
64 | ends |
- | |
65 | - | ||
66 | proc d_OutTree |
- | |
67 | pushad |
- | |
68 | pushfd |
- | |
69 | - | ||
70 | mov edi,[PTree] |
- | |
71 | dps '¥à¥¢®:' |
- | |
72 | dnl |
- | |
73 | @@: cmp dword[edi+4],0 |
- | |
74 | je .exit |
- | |
75 | dph [edi] |
- | |
76 | dps ' ' |
- | |
77 | dph [edi+4] |
- | |
78 | dps ' ' |
- | |
79 | dpsP [edi+4] |
- | |
80 | dnl |
- | |
81 | add edi,8 |
- | |
82 | jmp @b |
- | |
83 | .exit: |
- | |
84 | - | ||
85 | popfd |
- | |
86 | popad |
- | |
87 | ret |
- | |
Line 88... | Line 22... | ||
88 | endp |
22 | |
Line 128... | Line 62... | ||
128 | .buff dd treeDirBuf;buf |
62 | .buff dd treeDirBuf;buf |
129 | db 0 |
63 | db 0 |
130 | .path dd openDir |
64 | .path dd openDir |
Line 131... | Line -... | ||
131 | - | ||
132 | - | ||
133 | imgFree: |
- | |
134 | ; file 'pic/free.raw' |
- | |
135 | imgOk: |
- | |
136 | ; file 'pic/ok.raw' |
- | |
137 | imgMinus: |
- | |
138 | ; file 'pic/minus.raw' |
- | |
139 | imgPlus: |
- | |
Line 140... | Line 65... | ||
140 | ; file 'pic/plus.raw' |
65 | |
Line 141... | Line 66... | ||
141 | i_end: |
66 | |
Line 142... | Line -... | ||
142 | - | ||
143 | readFolder dd rdFoldforTree ;äãªæ¨ï, ª®â®à®© ç¨â ¥âáï ¯ ¯ª |
- | |
144 | - | ||
145 | - | ||
146 | endg |
- | |
147 | - | ||
148 | - | ||
149 | DDD123 = 0 |
- | |
150 | - | ||
151 | - | ||
152 | proc file_tree_Init |
- | |
153 | stdcall MM_AllocMem,4000 |
- | |
154 | mov [TVROOT],eax |
- | |
155 | mov dword[eax],0 |
- | |
156 | mov dword[eax+4],4000 |
- | |
157 | - | ||
158 | mcall 68,12,4096 |
- | |
159 | mov [PTree],eax |
- | |
160 | - | ||
161 | mov [eax+_tree.open],dword 0 |
- | |
162 | mov [eax+_tree.name],dword szRoot |
- | |
163 | mov [eax+8+_tree.open],dword 0 |
- | |
164 | mov [eax+8+_tree.name],dword 0 |
- | |
165 | - | ||
166 | - | ||
167 | DDD123 = 0 |
- | |
168 | if DDD123 |
- | |
169 | mov [1*8+eax+_tree.open],dword 1 |
- | |
170 | mov [1*8+eax+_tree.name],dword sz_d1 |
- | |
171 | mov [2*8+eax+_tree.open],dword 1 |
- | |
172 | mov [2*8+eax+_tree.name],dword sz_d2 |
- | |
173 | mov [3*8+eax+_tree.open],dword 2 |
- | |
174 | mov [3*8+eax+_tree.name],dword sz_d21 |
- | |
175 | mov [4*8+eax+_tree.open],dword 2 |
- | |
176 | mov [4*8+eax+_tree.name],dword sz_d22 |
- | |
177 | mov [5*8+eax+_tree.open],dword 3 |
- | |
178 | mov [5*8+eax+_tree.name],dword sz_d221 |
- | |
179 | mov [6*8+eax+_tree.open],dword 2 |
- | |
180 | mov [6*8+eax+_tree.name],dword sz_d23 |
- | |
181 | mov [7*8+eax+_tree.open],dword 1 |
- | |
182 | mov [7*8+eax+_tree.name],dword sz_d3 |
- | |
183 | mov [8*8+eax+_tree.open],dword 1 |
- | |
184 | mov [8*8+eax+_tree.name],dword sz_d4 |
- | |
185 | mov [9*8+eax+_tree.open],dword 2 |
- | |
186 | mov [9*8+eax+_tree.name],dword sz_d41 |
- | |
187 | mov [0Ah*8+eax+_tree.open],dword 0 |
- | |
188 | mov [0Ah*8+eax+_tree.name],dword 0 |
- | |
189 | end if |
- | |
190 | mov [TreeSize],1 |
- | |
191 | - | ||
192 | ;Fantomer ; mcall 68,12,4096 |
- | |
193 | ; mov [PWoSearch],eax |
- | |
194 | ; mov dword[eax],searchPath |
- | |
195 | ; mov dword[eax+4],0 |
- | |
196 | ret |
- | |
197 | endp |
- | |
198 | if DDD123 |
- | |
199 | sz_d1 db 'dir1',0 |
- | |
200 | sz_d2 db 'dir2',0 |
- | |
201 | sz_d21 db 'dir21',0 |
- | |
202 | sz_d22 db 'dir22',0 |
- | |
203 | sz_d221 db 'dir221',0 |
- | |
204 | sz_d23 db 'dir23',0 |
- | |
205 | sz_d3 db 'dir3',0 |
- | |
206 | sz_d4 db 'dir4',0 |
- | |
207 | sz_d41 db 'dir41',0 |
- | |
208 | end if |
- | |
209 | - | ||
210 | uglobal |
- | |
211 | bufImg rb 384*300*3 |
- | |
212 | endg |
- | |
213 | - | ||
214 | proc file_tree_Draw |
- | |
215 | locals |
- | |
216 | tr_y rd 1 |
- | |
217 | tr_numLine rd 1 |
- | |
218 | endl |
- | |
219 | - | ||
220 | mcall 13,<[tree_info.x],[tree_info.w]>,\ |
- | |
221 | <[tree_info.y],[tree_info.h]>,TR_BACKGROUND |
- | |
222 | - | ||
223 | mov [tr_numLine],0 |
- | |
224 | p2p [tr_y],[tree_info.y] |
- | |
225 | mov eax,[PTree] |
- | |
226 | mov eax,[eax+_tree.open] |
- | |
227 | inc eax |
- | |
228 | - | ||
229 | - | ||
230 | mov ecx,[TreeSize] |
- | |
231 | .drawLine: |
- | |
232 | push ecx |
- | |
233 | - | ||
234 | mov edi,[tr_numLine] |
- | |
235 | shl edi,3 |
- | |
236 | add edi,[PTree] |
- | |
237 | - | ||
238 | ; mov eax,[edi+_tree.open] |
- | |
239 | ; mov bx,TR_LINE_H |
- | |
240 | ; mul bx |
- | |
241 | ; add eax,[tree_info.x] |
- | |
242 | ; mpack ebx,eax,[tr_y] |
- | |
243 | - | ||
244 | POPRDLJAKART = 4 |
- | |
245 | mov eax,[edi+_tree.open] |
- | |
246 | mov bx,TR_STEP_W |
- | |
247 | mul bx |
- | |
248 | add eax,[tree_info.x] |
- | |
249 | mpack edx,eax,[tr_y] |
- | |
250 | add edx,POPRDLJAKART ;¯®¯à ¢ª ¤«ï ª à⨮ª |
- | |
251 | - | ||
252 | mov eax,[edi+_tree.open] |
- | |
253 | inc eax |
- | |
254 | cmp eax,[edi+8+_tree.open] |
- | |
255 | je @f |
- | |
256 | mov ebx,imgPlus |
- | |
257 | jmp .draw1 |
- | |
258 | @@: |
- | |
259 | mov ebx,imgMinus |
- | |
260 | .draw1: |
- | |
261 | mcall 7,,<9,9> |
- | |
262 | - | ||
263 | push edx |
- | |
264 | - | ||
265 | ;mov eax,edi |
- | |
266 | ;call getPath |
- | |
267 | ;mov ebx,eax |
- | |
268 | ;stdcall findVetka,eax |
- | |
269 | ;push ecx |
- | |
270 | ;stdcall strCpy,ebx, |
- | |
271 | ;stdcall MM_DelMem,ebx |
- | |
272 | mov ebx,edi |
- | |
273 | call getFullPath |
- | |
274 | stdcall findVetka,openDir |
- | |
275 | - | ||
276 | test ecx,ecx |
- | |
277 | jnz .l1 |
- | |
278 | mov ebx,imgOk |
- | |
279 | jmp .l2 |
- | |
280 | .l1: |
- | |
281 | mov ebx,imgFree |
- | |
282 | .l2: |
- | |
283 | - | ||
284 | pop edx |
- | |
285 | add edx,15 shl 16 |
- | |
286 | mov ebx,imgOk |
- | |
287 | mcall 7,,<9,9> |
- | |
288 | sub edx,POPRDLJAKART ;ã¡¨à ¥¬ ¯®¯à ¢ªã ¤«ï ª à⨮ª |
- | |
289 | - | ||
290 | lea ebx,[edx+1+10*10000h] |
- | |
291 | - | ||
292 | - | ||
293 | mov ecx,90000000h |
- | |
294 | or ecx,[sc.work_text] |
- | |
295 | - | ||
296 | mov edx,[edi+_tree.name] |
- | |
297 | mcall 4 |
- | |
298 | - | ||
299 | add [tr_y],TR_LINE_H |
- | |
300 | inc [tr_numLine] |
- | |
301 | - | ||
302 | mov eax,[tree_info.y] |
- | |
303 | add eax,[tree_info.h] |
- | |
304 | cmp [tr_y],eax |
- | |
305 | jae .end |
- | |
306 | - | ||
307 | pop ecx |
- | |
308 | dec ecx |
- | |
309 | jnz .drawLine |
- | |
310 | .end: |
- | |
311 | - | ||
312 | ret |
- | |
313 | endp |
- | |
314 | - | ||
315 | - | ||
316 | - | ||
317 | proc file_tree_Mouse |
- | |
318 | locals |
- | |
319 | m_x rd 1 |
- | |
320 | endl |
- | |
321 | ;mcall 37,0 ¡á®«îâë¥ ª®®à¤¨ âë ¬ëè¨ |
- | |
322 | - | ||
323 | mcall 37,2 ;ª®¯ª¨ |
- | |
324 | test al,1 |
- | |
325 | jz .exit |
- | |
326 | - | ||
327 | - | ||
328 | mcall 37,1 ;ª®®à¤¨ âë ®â®á¨â¥«ì® ®ª |
- | |
329 | mov bx,ax ;y |
- | |
330 | shr eax,16 ;x |
- | |
331 | mov [m_x],eax |
- | |
332 | - | ||
333 | cmp eax,[tree_info.x] ;®â¡à áë¢ ¥¬ ª«¨ª¨ ¢¥ ¤¥à¥¢ |
- | |
334 | jb .exit |
- | |
335 | - | ||
336 | sub eax,[tree_info.x] |
- | |
337 | cmp eax,[tree_info.w] |
- | |
338 | ja .exit |
- | |
339 | - | ||
340 | cmp ebx,[tree_info.y] |
- | |
341 | jb .exit |
- | |
342 | sub ebx,[tree_info.y] |
- | |
343 | mov edx,ebx |
- | |
344 | cmp edx,[tree_info.h] |
- | |
345 | ja .exit |
- | |
346 | - | ||
347 | mov eax,edx |
- | |
348 | - | ||
349 | mov bx,TR_LINE_H |
- | |
350 | xor edx,edx |
- | |
351 | div bx |
- | |
352 | - | ||
353 | mov ebx,[PTree] |
- | |
354 | lea ebx,[ebx+eax*8] |
- | |
355 | ;eax=®¬¥à áâப¨, ebx - 㪠§ ⥫ì _tree, |
- | |
356 | - | ||
357 | ;¯à®¯ã᪠¥¬ ¢á¥ ª«¨ª¨ ¨¦¥ ¤¥à¥¢ |
- | |
358 | - | ||
359 | mov edx,[TreeSize] |
- | |
360 | dec edx |
- | |
361 | cmp eax,edx |
- | |
362 | ja .exit |
- | |
363 | - | ||
364 | mov eax,[ebx+_tree.open] |
- | |
365 | mov dx,TR_STEP_W |
- | |
366 | mul dx |
- | |
367 | add eax,[tree_info.x] |
- | |
368 | cmp eax,[m_x] |
- | |
369 | ja .mark |
- | |
370 | add eax,9 |
- | |
371 | cmp eax,[m_x] |
- | |
372 | jb .mark |
- | |
373 | - | ||
374 | ;¯à®¢¥à塞: § ªàëâì ¨«¨ ®âªàëâì ¯ ¯ªã |
- | |
375 | mov edx,[ebx+_tree.open] |
- | |
376 | inc edx |
- | |
377 | cmp [ebx+_tree.open+8],edx |
- | |
378 | jne @f |
- | |
379 | call tree_closeFolder |
- | |
380 | call file_tree_Draw |
- | |
381 | ret |
- | |
382 | @@: |
- | |
383 | call tree_openFolder |
- | |
384 | - | ||
385 | call file_tree_Draw |
- | |
386 | jmp .exit |
- | |
387 | .mark: |
- | |
388 | ;ª«¨ª ¯® áâப¥ |
- | |
389 | - | ||
390 | .exit: |
- | |
391 | ret |
- | |
392 | endp |
- | |
393 | - | ||
394 | - | ||
395 | ;------------------------------------------------------------------------------- |
- | |
396 | ;---------------------- § ªàë¢ ¥â ¯ ¯ªã ---------------------------------------- |
- | |
397 | ;------------------------------------------------------------------------------- |
- | |
398 | ; inp: ebx - 㪠§ ⥫ì _tree, |
- | |
399 | ;------------------------------------------------------------------------------- |
- | |
400 | proc tree_closeFolder |
- | |
401 | - | ||
402 | mov esi,[ebx+_tree.open] |
- | |
403 | lea edi,[ebx+8] |
- | |
404 | @@: |
- | |
405 | cmp [edi+_tree.open],esi |
- | |
406 | jbe @f |
- | |
407 | stdcall MM_DelMem,[edi+_tree.name] |
- | |
408 | add edi,8 |
- | |
409 | jmp @b |
- | |
410 | @@: |
- | |
411 | - | ||
412 | - | ||
413 | mov esi,edi |
- | |
414 | lea edi,[ebx+8] |
- | |
415 | - | ||
416 | mov eax,esi |
- | |
417 | sub eax,edi |
- | |
418 | shr eax,3 |
- | |
419 | sub [TreeSize],eax |
- | |
420 | - | ||
421 | ;ᤢ¨£ ¥¬ ¢á¥ áâàãªâãàë, ª®â®àë¥ ¨¦¥ § ªàë¢ ¥¬®©, ¢¢¥àå |
- | |
422 | @@: movsd |
- | |
423 | lodsd |
- | |
424 | stosd |
- | |
425 | test eax,eax |
- | |
426 | jnz @b |
- | |
427 | - | ||
428 | ret |
- | |
429 | endp |
- | |
430 | - | ||
431 | ;------------------------------------------------------------------------------- |
- | |
432 | ;-------------------- ®âªàë¢ ¥â ¯ ¯ªã ------------------------------------------ |
- | |
433 | ;------------------------------------------------------------------------------- |
- | |
434 | ; inp: eax=®¬¥à áâப¨, ebx - 㪠§ ⥫ì _tree, |
- | |
435 | ;------------------------------------------------------------------------------- |
- | |
436 | - | ||
437 | proc tree_openFolder |
- | |
438 | locals |
- | |
439 | p_treeOpen rd 1 |
- | |
440 | currLine rd 1 |
- | |
441 | PTmpTree rd 1 |
- | |
442 | endTmpTree rd 1 |
- | |
443 | lEOF rd 1 |
- | |
444 | numFolds rd 1 |
- | |
445 | openLine rd 1 |
- | |
446 | - | ||
447 | endl |
- | |
448 | mov [p_treeOpen],ebx |
- | |
449 | ; int3 |
- | |
450 | call getFullPath |
- | |
451 | - | ||
452 | ;----- ¨â ¥¬ ¯ ¯ªã ¨ § ¯®«ï¥¬ tmpTree--------------------------------------------------------- |
- | |
453 | - | ||
454 | mcall 68,12,8192 |
- | |
455 | mov [PTmpTree],eax ;¯ ¬ïâì ¤«ï ᯨ᪠ª â «®£®¢ |
- | |
456 | - | ||
457 | mov [lEOF],0 |
- | |
458 | mov [endTmpTree],0 |
- | |
459 | mov [numFolds],0 |
- | |
460 | - | ||
461 | mov [fiTree.numBlock],0 |
- | |
462 | - | ||
463 | .stepLoadFold: ;ç⥨¥ ¯ ¯ª¨ |
- | |
464 | ; dpsP [fiTree+21] |
- | |
465 | ; dnl |
- | |
466 | - | ||
467 | mcall 70,fiTree |
- | |
468 | ; mov eax, fiTree |
- | |
469 | ; call [readFolder] |
- | |
470 | - | ||
471 | test eax,eax |
- | |
472 | je @f |
- | |
473 | cmp eax,6 |
- | |
474 | jne .err |
- | |
475 | @@: |
- | |
476 | - | ||
477 | cmp ebx,NUM_READ_FILES |
- | |
478 | je @f |
- | |
479 | mov [lEOF],1 ;áâ ¢¨¬ EOF |
- | |
480 | @@: |
- | |
481 | mov ecx,ebx |
- | |
482 | - | ||
483 | mov edi,treeDirBuf+32 |
- | |
484 | - | ||
485 | .testRec: ;®¡à ¡®âª § ¯¨á¥© ¢ treeDirBuf |
- | |
486 | push ecx |
- | |
487 | - | ||
488 | lea eax,[edi+_BDWK.name] ;®â¡à áë¢ ¥¬ ¥ ¯ ¯ª¨ ¨ ¯ ¯ª¨ . ¨ .. |
- | |
489 | cmp word[eax],'.' |
- | |
490 | je .endtestRec |
- | |
491 | - | ||
492 | cmp word[eax],'..' |
- | |
493 | jne @f |
- | |
494 | cmp byte[eax+2],0 |
- | |
495 | je .endtestRec |
- | |
496 | @@: |
- | |
497 | - | ||
498 | ; cmp [edi+_BDWK.flags],F_FOLDER |
- | |
499 | ; jne .endtestRec |
- | |
500 | - | ||
501 | inc [numFolds] |
- | |
502 | push edi |
- | |
503 | - | ||
504 | lea esi,[edi+_BDWK.name] |
- | |
505 | - | ||
506 | - | ||
507 | ;;;;;;;;; ;¤®¡ ¢«¥¨¥ ¯ ¯ª¨ ¢ ᯨ᮪ |
- | |
508 | mov edi,esi ;¯®«ãç ¥¬ ¤«¨ã áâப¨ |
- | |
509 | xor al,al |
- | |
510 | mov ecx,260 |
- | |
511 | repne scasb |
- | |
512 | mov eax,260 |
- | |
513 | sub eax,ecx |
- | |
514 | - | ||
515 | stdcall MM_AllocMem,eax |
- | |
516 | ;dph eax |
- | |
517 | ;dnl |
- | |
518 | mov edi,eax |
- | |
519 | mov ebx,[endTmpTree] |
- | |
520 | add ebx,[PTmpTree] |
- | |
521 | mov [ebx],eax |
- | |
522 | add [endTmpTree],4 |
- | |
523 | - | ||
524 | mov ecx,ebx ;¥á«¨ ¬ «® ¬¥áâ ¯®¤ § ¯¨á¨, â® ¯¥à¥à á¯à¥¤¥«¨âì |
- | |
525 | add ecx,4 ;¡®«ìè¥ ¯ ¬ï⨠|
- | |
526 | test ecx,0FFFh |
- | |
527 | jz @f |
- | |
528 | and ecx,0FFFFF000h |
- | |
529 | add ecx,1000h |
- | |
530 | @@: sub ecx,4 |
- | |
531 | cmp ecx,ebx |
- | |
532 | jne @f |
- | |
533 | mcall 68,20,,[PTmpTree] |
- | |
534 | mov [PTmpTree],eax |
- | |
535 | - | ||
536 | @@: lodsb |
- | |
537 | stosb |
- | |
538 | test al,al |
- | |
539 | jnz @b |
- | |
540 | - | ||
541 | - | ||
542 | pop edi |
- | |
543 | - | ||
544 | .endtestRec: |
- | |
545 | add edi,304 |
- | |
546 | pop ecx |
- | |
547 | dec ecx |
- | |
548 | jnz .testRec |
- | |
549 | - | ||
550 | - | ||
551 | add [fiTree.numBlock],NUM_READ_FILES |
- | |
552 | - | ||
553 | cmp [lEOF],1 |
- | |
554 | jne .stepLoadFold |
- | |
555 | - | ||
556 | cmp [numFolds],0 |
- | |
557 | je .exit |
- | |
558 | ;;;;;;;;;;;; ¢¯¨áë¢ ¥¬ ¢ ®á®¢®¥ ¤¥à¥¢® |
- | |
559 | ;á¬¥é ¥¬ § ¯¨á¨ ¢¨§, ç⮡ ¢¯¨á âì ®¢ãî ¢¥âªã ¤¥à¥¢ |
- | |
560 | - | ||
561 | mov esi,[PTree] |
- | |
562 | mov eax,[TreeSize] |
- | |
563 | inc eax |
- | |
564 | shl eax,3 |
- | |
565 | add esi,eax |
- | |
566 | - | ||
567 | mov edi,esi |
- | |
568 | mov eax,[numFolds] |
- | |
569 | shl eax,3 |
- | |
570 | add edi,eax |
- | |
571 | - | ||
572 | mov eax,esi |
- | |
573 | sub eax,[p_treeOpen] |
- | |
574 | shr eax,2 |
- | |
575 | mov ecx,eax |
- | |
576 | add esi,4 |
- | |
577 | add edi,4 |
- | |
578 | std |
- | |
579 | rep movsd |
- | |
580 | cld |
- | |
581 | - | ||
582 | ;⥯¥àì § ¯¨áë¢ ¥¬ ¢ [PTree] |
- | |
583 | mov ebx,[p_treeOpen] |
- | |
584 | mov eax,[ebx+_tree.open] |
- | |
585 | inc eax |
- | |
586 | mov esi,[PTmpTree] |
- | |
587 | lea edi,[ebx+8] |
- | |
588 | mov ecx,[numFolds] |
- | |
589 | @@: mov [edi+_tree.open],eax |
- | |
590 | p2p [edi+_tree.name],[esi] |
- | |
591 | add esi,4 |
- | |
592 | add edi,8 |
- | |
593 | loop @b |
- | |
594 | - | ||
595 | mov eax,[numFolds] |
- | |
596 | add [TreeSize],eax |
- | |
597 | - | ||
598 | .exit: |
- | |
599 | .err: |
- | |
600 | - | ||
601 | mcall 68,13,[PTmpTree] |
- | |
602 | - | ||
603 | call d_OutTree |
- | |
604 | ret |
- | |
605 | endp |
- | |
606 | - | ||
607 | ;------------------------------------------------------------------------------- |
- | |
608 | ;--- 室¨â ¯®«ë© ¯ãâì ¤® í«¥¬¥â ------------------------------------------- |
- | |
609 | ;------------------------------------------------------------------------------- |
- | |
610 | ;inp: ebx = Pointer to _tree. |
- | |
611 | ;outp: openDir ᮤ¥à¦¨â ¯®«ë© ¯ãâì (¯®á«¥ ¯®á«¥¤¥© ¯ ¯ª¨ ¨¬¥¥âáï /) |
- | |
612 | ;------------------------------------------------------------------------------- |
- | |
613 | proc getFullPath |
- | |
614 | ;㦮 ¯à®¡¥¦ âìáï ®â ¯®á«¥¤¥© ¯ ¯ª¨ ¢ ¯ã⨠¢¢¥àå, ¯® த¨â¥«ì᪨¬ |
- | |
615 | ;á ç « § ¯¨áë¢ ¥¬ ¯ ¯ª¨ ¢ tmpStr, à §¤¥«ïï ¨å ᨬ¢®«®¬ RAZD, § ⥬ |
- | |
616 | ;᪮¯¨p㥬 ¨å ¢ ®¡à ⮬ ¯®à浪¥ ¢ £®â®¢ë© ¯ãâì ¢ openDir |
- | |
617 | push ebx edi esi |
- | |
618 | mov eax,[ebx+_tree.open] |
- | |
619 | mov edi,tmpStr+1 |
- | |
620 | mov byte[edi-1],RAZD |
- | |
621 | - | ||
622 | cmp [ebx+_tree.name],0 |
- | |
623 | je .copyIn_openDir |
- | |
624 | - | ||
625 | jmp .addFoldToPath |
- | |
626 | .testLine: |
- | |
627 | cmp [ebx+_tree.open],eax |
- | |
628 | jb .addFoldToPath |
- | |
629 | - | ||
630 | sub ebx,8 |
- | |
631 | cmp ebx,[PTree] |
- | |
632 | jne .testLine |
- | |
633 | ; jmp .copyIn_openDir |
- | |
634 | - | ||
635 | .addFoldToPath: |
- | |
636 | mov byte[edi-1],RAZD |
- | |
637 | mov esi,[ebx+_tree.name] |
- | |
638 | @@: lodsb |
- | |
639 | stosb |
- | |
640 | test al,al |
- | |
641 | jnz @b |
- | |
642 | - | ||
643 | mov eax,[ebx+_tree.open] |
- | |
644 | cmp ebx,[PTree] |
- | |
645 | je .copyIn_openDir |
- | |
646 | - | ||
647 | cmp ebx,[PTree] |
- | |
648 | jne .testLine |
- | |
649 | sub ebx,8 |
- | |
650 | cmp ebx,[PTree] |
- | |
651 | jne .testLine |
- | |
652 | - | ||
653 | .copyIn_openDir: |
- | |
654 | sub edi,2 |
- | |
655 | mov edx,openDir+1 |
- | |
656 | mov byte[edx-1],'/' |
- | |
657 | mov byte[edx],0 |
- | |
658 | cmp edi,tmpStr-1 |
- | |
659 | je .endConv |
- | |
660 | @@: |
- | |
661 | mov al,RAZD |
- | |
662 | mov ecx,1024 |
- | |
663 | std |
- | |
664 | repne scasb |
- | |
665 | cld |
- | |
666 | - | ||
667 | push edi |
- | |
668 | add edi,2 |
- | |
669 | mov eax,1024 |
- | |
670 | sub eax,ecx |
- | |
671 | mov ecx,eax |
- | |
672 | mov esi,edi |
- | |
673 | mov edi,edx |
- | |
674 | rep movsb |
- | |
675 | mov byte[edi-1],'/' |
- | |
676 | mov byte[edi],0 |
- | |
677 | mov edx,edi |
- | |
678 | pop edi |
- | |
679 | - | ||
680 | cmp edi,tmpStr-1 |
- | |
681 | jne @b |
- | |
682 | .endConv: |
- | |
683 | - | ||
684 | pop esi edi ebx |
- | |
685 | ret |
- | |
686 | endp |
- | |
687 | - | ||
688 | - | ||
689 | ;inp eax = Pointer to _tree |
- | |
690 | ;outp eax = Pointer to string - full path |
- | |
691 | ; ¬ïâì á ¨¬¥¥¬ ®á¢®¡®¤¨âì!!! |
- | |
692 | proc getPath |
- | |
693 | locals |
- | |
694 | strTmp rb 256 |
- | |
695 | reslt rd 1 |
- | |
696 | endl |
- | |
697 | push ebx edi esi |
- | |
698 | mov ebx,eax |
- | |
699 | mov eax,[eax+_tree.open] |
- | |
700 | lea edi,[strTmp+1] |
- | |
701 | mov byte[edi-1],RAZD |
- | |
702 | - | ||
703 | cmp ebx,[PTree] |
- | |
704 | je .copyIn_openDir |
- | |
705 | jmp .addFoldToPath |
- | |
706 | .testLine: |
- | |
707 | cmp [ebx+_tree.open],eax |
- | |
708 | jb .addFoldToPath |
- | |
709 | - | ||
710 | sub ebx,8 |
- | |
711 | cmp ebx,[PTree] |
- | |
712 | jne .testLine |
- | |
713 | jmp .copyIn_openDir |
- | |
714 | - | ||
715 | .addFoldToPath: |
- | |
716 | mov byte[edi-1],RAZD |
- | |
717 | mov esi,[ebx+_tree.name] |
- | |
718 | @@: lodsb |
- | |
719 | stosb |
- | |
720 | test al,al |
- | |
721 | jnz @b |
- | |
722 | - | ||
723 | mov eax,[ebx+_tree.open] |
- | |
724 | sub ebx,8 |
- | |
725 | cmp ebx,[PTree] |
- | |
726 | jne .testLine |
- | |
727 | - | ||
728 | .copyIn_openDir: |
- | |
729 | lea eax,[strTmp] |
- | |
730 | stdcall strLen,eax |
- | |
731 | stdcall MM_AllocMem,eax |
- | |
732 | mov [reslt],eax |
- | |
733 | mov edx,eax |
- | |
734 | inc edx |
- | |
735 | sub edi,2 |
- | |
736 | mov byte[edx-1],'/' |
- | |
737 | mov byte[edx],0 |
- | |
738 | lea eax,[strTmp-1] |
- | |
739 | cmp edi,eax |
- | |
740 | je .endConv |
- | |
741 | @@: |
- | |
742 | mov al,RAZD |
- | |
743 | mov ecx,1024 |
- | |
744 | std |
- | |
745 | repne scasb |
- | |
746 | cld |
- | |
747 | - | ||
748 | push edi |
- | |
749 | add edi,2 |
- | |
750 | mov eax,1024 |
- | |
751 | sub eax,ecx |
- | |
752 | mov ecx,eax |
- | |
753 | mov esi,edi |
- | |
754 | mov edi,edx |
- | |
755 | rep movsb |
- | |
756 | mov byte[edi-1],'/' |
- | |
757 | mov byte[edi],0 |
- | |
758 | mov edx,edi |
- | |
759 | pop edi |
- | |
760 | - | ||
761 | lea eax,[strTmp-1] |
- | |
762 | cmp edi,eax |
- | |
763 | jne @b |
- | |
764 | .endConv: |
- | |
765 | mov eax,[reslt] |
- | |
766 | pop esi edi ebx |
- | |
767 | ret |
- | |
768 | endp |
- | |
769 | - | ||
770 | ;#################################################################################################### |
- | |
771 | ;#################################################################################################### |
- | |
772 | ;#################################################################################################### |
- | |
773 | ;#################################################################################################### |
- | |
774 | - | ||
775 | - | ||
776 | ;tree_ äãªæ¨¨, åà ï騥 ®â¬¥ç¥ë¥ ¯ãâ¨. ¯®áâà®¥ë ¢ ¢¨¤¥ ¤¥à¥¢ ¯ ¯®ª\ä ©«®¢ |
- | |
777 | ;¢ ¯ ¬ï⨠åà ïâìáï ª ª ᯨ᮪ áâàãªâãà (usel) |
- | |
778 | - | ||
779 | ;tree_Add(path) |
- | |
780 | ;¤®¡ ¢«ï¥â ¯ãâì ¢ ¤¥à¥¢® ®â¬¥ç¥ëå ä ©«®¢ |
- | |
781 | ;¢ë¢®¤ |
- | |
782 | ;¥ å = 0 - ¤®¡ ¢«¥® |
- | |
783 | ; 1 - â ª®© ¯ãâì 㦥 ¥áâì |
- | |
784 | ; -1 - ¥¢¥àë© ¯ãâì |
- | |
785 | ; |
- | |
786 | ; |
- | |
787 | ;tree_Del(path) |
- | |
788 | - | ||
789 | - | ||
790 | - | ||
791 | - | ||
792 | - | ||
793 | ;#################################################################################################### |
- | |
794 | struct _vetka |
- | |
795 | - | ||
796 | sizeused rd 1 |
- | |
797 | sizebuf rd 1 |
- | |
798 | ends |
- | |
799 | - | ||
800 | struct _usel |
- | |
801 | - | ||
802 | pName rd 1 |
- | |
803 | pNext rd 1 |
- | |
804 | ends |
- | |
805 | - | ||
806 | - | ||
807 | ;''''''''''''''''' |
- | |
808 | ;¤®¡ ¢«ï¥â ¯ãâì ¢ ¤¥à¥¢® ®â¬¥ç¥ëå ä ©«®¢ |
- | |
809 | ;¢ë¢®¤ |
- | |
810 | ;¥ å = 0 - ¤®¡ ¢«¥® |
- | |
811 | ; 1 - â ª®© ¯ãâì 㦥 ¥áâì |
- | |
812 | ; -1 - ¥¢¥àë© ¯ãâì |
- | |
813 | proc tree_Add path:DWORD |
- | |
814 | locals |
- | |
815 | numFolds rd 1 |
- | |
816 | vetB rd 1 |
- | |
817 | uselB rd 1 |
- | |
818 | endl |
- | |
819 | push ebx edi esi |
- | |
820 | ;int3 |
- | |
821 | stdcall getNumFolds, [path] |
- | |
822 | cmp eax,-1 |
- | |
823 | je .error |
- | |
824 | - | ||
825 | mov ecx,eax |
- | |
826 | inc eax |
- | |
827 | mov [numFolds],eax |
- | |
828 | ;¨é¥¬ ª â «®£, á ª®â®à®£® ç¨ ¥¬ ¤®¯¨áë¢ ¨¥ ¤¥à¥¢ |
- | |
829 | .searchBegin: |
- | |
830 | push ecx |
- | |
831 | mov eax,[numFolds] |
- | |
832 | sub eax,ecx |
- | |
833 | stdcall getFirstTailPath, [path], eax |
- | |
834 | push eax |
- | |
835 | stdcall findVetka,eax |
- | |
836 | mov ebx,ecx |
- | |
837 | mov [vetB],eax |
- | |
838 | mov [uselB],edx |
- | |
839 | pop eax |
- | |
840 | stdcall MM_DelMem,eax |
- | |
841 | cmp ebx,0 |
- | |
842 | jne .foundBegin |
- | |
843 | pop ecx |
- | |
844 | loop .searchBegin |
- | |
845 | jmp .exitNotAdded |
- | |
846 | .foundBegin: ;¢ á⥪¥ ¥éñ ¥áå ®â ¯à®è«®£® loop'a |
- | |
847 | ;int3 |
- | |
848 | mov eax,[uselB] |
- | |
849 | mov ebx,[eax+_usel.pNext] |
- | |
850 | cmp ebx,0 |
- | |
851 | jne @f |
- | |
852 | mov ebx,eax |
- | |
853 | stdcall MM_AllocMem,4000 |
- | |
854 | mov [ebx+_usel.pNext],eax |
- | |
855 | mov dword[eax],0 |
- | |
856 | mov dword[eax+4],4000 |
- | |
857 | mov ebx,eax |
- | |
858 | @@: |
- | |
859 | mov eax,ebx |
- | |
860 | add [eax+_vetka.sizeused],8 |
- | |
861 | mov edx,[eax+_vetka.sizebuf] |
- | |
862 | sub edx,8 |
- | |
863 | cmp [eax+_vetka.sizeused],edx |
- | |
864 | jb .noOverflow |
- | |
865 | - | ||
866 | add edx,8 |
- | |
867 | push eax ;㢥«¨ç¨¢ ¥¬ à §¬¥à ¡ãä¥à |
- | |
868 | push edx ;äãªæ¨¨ realloc ¥â - ¯®â®¬ã â ª®¥ ¨§¢à 饨¥ - Fantom |
- | |
869 | add edx,4000 |
- | |
870 | mov esi,eax |
- | |
871 | stdcall MM_AllocMem, edx |
- | |
872 | mov ebx,eax |
- | |
873 | mov edi,eax |
- | |
874 | pop ecx |
- | |
875 | shr ecx,2 |
- | |
876 | rep movsd |
- | |
877 | pop eax |
- | |
878 | stdcall MM_DelMem,eax |
- | |
879 | mov eax,ebx |
- | |
880 | - | ||
881 | .noOverflow: |
- | |
882 | mov ebx, [eax+_vetka.sizeused] |
- | |
883 | lea ebx, [ebx+eax] |
- | |
884 | ;ebx = PU_ - usel |
- | |
885 | ;eax = P_ - vetka |
- | |
886 | mov eax,[numFolds] |
- | |
887 | sub eax,[esp] ;- ¢ á⥪¥ ¢áñ ¥éñ ¥áå ®â .searchBegin |
- | |
888 | dec eax |
- | |
889 | stdcall getFoldByNum ,[path], eax |
- | |
890 | mov [ebx+_usel.pName],eax |
- | |
891 | mov [ebx+_usel.pNext],0 |
- | |
892 | - | ||
893 | ;call D_OutTree |
- | |
894 | ;dps '--------------------------------' |
- | |
895 | ;dnl |
- | |
896 | pop ecx |
- | |
897 | dec ecx |
- | |
898 | jnz .searchBegin |
- | |
899 | mov eax, 0 |
- | |
900 | jmp .exit |
- | |
901 | .exitNotAdded: |
- | |
902 | mov eax,1 |
- | |
903 | jmp .exit |
- | |
904 | .error: |
- | |
905 | mov eax,-1 |
- | |
906 | - | ||
907 | .exit: |
- | |
908 | ;dps '-- ------------------------' |
- | |
909 | ;dnl |
67 | |
Line 910... | Line -... | ||
910 | ;call D_OutTree |
- | |
911 | pop esi edi ebx |
- | |
912 | ret |
- | |
913 | endp |
- | |
914 | - | ||
915 | DDt dd 0 |
- | |
916 | - | ||
917 | ;------------------------------------------------------------------------------- |
- | |
918 | ; |
- | |
919 | proc D_OutTree |
- | |
920 | mov eax,[TVROOT] |
- | |
921 | call D_OutTree2 |
- | |
922 | ret |
- | |
923 | endp |
- | |
924 | - | ||
925 | proc D_OutTree2 |
- | |
926 | inc [DDt] |
- | |
927 | mov ecx,[eax] |
- | |
928 | shr ecx,3 |
- | |
929 | add eax,8 |
- | |
930 | .loop: |
- | |
931 | push eax ecx |
- | |
932 | mov ecx,[DDt] |
- | |
933 | .space: dps ' ' |
- | |
934 | loop .space |
- | |
935 | - | ||
936 | dpsP [eax] |
- | |
937 | dps ' ' |
- | |
938 | dph dword[eax+4] |
- | |
939 | dnl |
- | |
940 | cmp dword[eax+4],0 |
- | |
941 | je @f |
- | |
942 | mov eax,[eax+4] |
- | |
943 | call D_OutTree2 |
- | |
944 | @@: |
- | |
945 | pop ecx eax |
- | |
946 | add eax,8 |
- | |
947 | loop .loop |
- | |
948 | dec [DDt] |
- | |
949 | - | ||
950 | ret |
- | |
951 | endp |
- | |
952 | ;------------------------------------------------------------------------------- |
- | |
953 | - | ||
954 | - | ||
955 | ;tree_Del(path) |
- | |
956 | ; ¥á«¨ ¢ 㪠§ ®¬ 㧫¥ ¥áâì 㪠§ â¥«ì ¢¥âªã, â® |
- | |
957 | ; treeDelIn(path) |
- | |
958 | ; 㤠«¨âì 㪠§ ë© ã§¥« |
- | |
959 | ; ¥á«¨ ® ¥ ¯®á«¥¤¨© ¢ ᯨ᪥, â® |
- | |
960 | ; ¥á«¨ ® ¥ á⮨⠯®á«¥¤¨¬, â® |
- | |
961 | ; ᤢ¨ãâì ¢á¥ ¯®á«¥¤ãî騥 áâàãªâãàë 㧥« ¢¢¥àå 8 |
- | |
962 | ;last_elem: ¨ ç¥ |
- | |
963 | ; 㤠«¨âì íâã ¢¥âªã |
- | |
964 | ; tree_Del(¯ãâì - 1 í«¥¬¥â) |
- | |
965 | - | ||
966 | ;treeDelIn(path) |
- | |
967 | ; ¥á«¨ íâ® ¢¥âª , â® |
- | |
968 | ; ¯®ª ¥áâì 㧫ë { |
- | |
969 | ; ¥á«¨ ã 㧫 ¥áâì ¢¥âª , â® |
- | |
970 | ; treeDelIn(¯ãâì ¤® ⥪ã饣® 㧫 ) |
- | |
971 | ; ¨ ç¥ |
- | |
972 | ; ®á¢®¡®¤¨âì ¯ ¬ïâì á ¨¬¥¥¬ |
- | |
973 | ; } |
- | |
974 | ; |
- | |
975 | ;return: |
- | |
976 | ;eax = 0 - success, -1 - error |
- | |
977 | proc tree_Del path:DWORD |
- | |
978 | locals |
- | |
979 | PU rd 1 |
- | |
980 | P rd 1 |
- | |
981 | path2 rb 256 |
- | |
982 | endl |
- | |
983 | ;int3 |
- | |
984 | push ebx edi esi |
- | |
985 | stdcall findVetka,[path] |
- | |
986 | test ecx,ecx |
- | |
987 | jne .err |
- | |
988 | mov edi,edx |
- | |
989 | mov esi,eax |
- | |
990 | cmp [edi+_usel.pNext],dword 0 |
- | |
991 | je @f |
- | |
992 | mov eax,edi |
- | |
993 | push edi esi |
- | |
994 | call treeDelIn |
- | |
995 | pop esi edi |
- | |
996 | @@: |
- | |
997 | stdcall MM_DelMem,[edi+_usel.pName] |
- | |
998 | mov eax,[esi+_vetka.sizeused] |
- | |
999 | cmp eax,8 |
- | |
1000 | je .last_elem |
- | |
1001 | - | ||
1002 | add eax,esi ; - last _usel |
- | |
1003 | cmp edi,eax ;if last _usel, then do not |
- | |
1004 | je @f |
- | |
1005 | push esi |
- | |
1006 | sub eax,edi ;move all _usel up |
- | |
1007 | shr eax,2 |
- | |
1008 | mov ecx,eax |
- | |
1009 | mov esi,edi |
- | |
1010 | add esi,8 |
- | |
1011 | rep movsd |
- | |
1012 | pop esi |
- | |
1013 | - | ||
1014 | @@: sub dword [esi+_vetka.sizeused],8 |
- | |
1015 | jmp .exit |
- | |
1016 | - | ||
1017 | .last_elem: |
- | |
1018 | stdcall MM_DelMem,esi |
- | |
1019 | stdcall findUselMinusOne,[path] |
- | |
1020 | cmp ecx,0 |
- | |
1021 | jne .exit |
- | |
1022 | mov [edx+_usel.pNext],0 |
- | |
1023 | .exit: |
- | |
1024 | xor eax,eax |
- | |
1025 | pop esi edi ebx |
- | |
1026 | ret |
- | |
1027 | - | ||
1028 | .err: |
- | |
1029 | or eax,-1 |
- | |
1030 | pop esi edi ebx |
- | |
1031 | ret |
- | |
1032 | - | ||
1033 | endp |
- | |
1034 | - | ||
1035 | ;!!!! ¥ á®åà ï¥â ॣ¨áâàë |
- | |
1036 | - | ||
1037 | ;input: eax = pointer to _usel |
- | |
1038 | proc treeDelIn |
- | |
1039 | ;mov eax,[eax+_usel.pNext] ;®¯ á®, ® ¨ â ª ¢¥§¤¥ ¯à®¢¥àï¥âáï ¯¥à¥¤ ¢ë§®¢®¬ |
- | |
1040 | ;cmp eax,0 |
- | |
1041 | ;je .exit |
- | |
1042 | - | ||
1043 | lea ebx,[eax+8] |
- | |
1044 | mov ecx,[eax] |
- | |
1045 | shr ecx,3 ;ª®«¨ç¥á⢮ 㧫®¢ |
- | |
1046 | .loop: |
- | |
1047 | push ecx |
- | |
1048 | mov eax,[ebx+_usel.pNext] |
- | |
1049 | test eax,eax |
- | |
1050 | jz @f |
- | |
1051 | push ebx |
- | |
1052 | call treeDelIn |
- | |
1053 | pop ebx |
- | |
1054 | @@: |
- | |
1055 | stdcall MM_DelMem,[ebx+_usel.pName] |
- | |
1056 | stdcall MM_DelMem,[ebx+_usel.pNext] |
- | |
1057 | add ebx,8 |
- | |
1058 | pop ecx |
- | |
1059 | dec ecx |
- | |
1060 | jnz .loop |
- | |
1061 | .exit: |
- | |
1062 | - | ||
1063 | ret |
- | |
1064 | endp |
- | |
1065 | - | ||
1066 | ; """""""""""""""" |
- | |
1067 | ;path = /hd0/1/kol -folder |
- | |
1068 | ;TV1 -> us'hd0' -> us'1' -> us'kol' |
- | |
1069 | ;path = /hd0/1/mtldr -file |
- | |
1070 | ;path = /rd/1/kernel.mnt - file in ramdisk |
- | |
1071 | - | ||
1072 | ; 室¨â ¢¥âªã ¢ ª®â®à®© 室¨âáï 㧥« á 㦮© ¬ ¯ ¯ª®© |
- | |
1073 | ;¢ë¢®¤: |
- | |
1074 | ;eax - ¢¥âª |
- | |
1075 | ;edx - 㧥«, ª®â®àë© ©¤¥ ¯®á«¥¤¨¬, â. ¥. ¤«ï ¯ã⨠/rd/1/lib/qwe ¡ã¤¥â 㧥« lib, â ª ª ª ä ©« qwe ¥â |
- | |
1076 | ;ecx - 0 - ã¦ë© ¢¥âª /㧥« ãá¯¥è® ©¤¥ |
- | |
1077 | ; 1 - ã¦ë© ¢¥âª /㧥« ¥ ©¤¥ - ¢ë室¥ ¯®á«¥¤¨© ©¤¥ë© 㧥« |
- | |
1078 | ; 2 - ¥¢¥àë© ¯ à ¬¥âà |
- | |
1079 | proc findVetka path:DWORD |
- | |
1080 | locals |
- | |
1081 | curFold rd 1 |
- | |
1082 | num_f rd 1 |
- | |
1083 | old_vetk rd 1 |
- | |
1084 | old_usel rd 1 |
- | |
1085 | endl |
- | |
1086 | ;int3 |
- | |
1087 | mov eax, [TVROOT] |
- | |
1088 | cmp dword[eax],0 |
- | |
1089 | jne @f |
- | |
1090 | mov edx, 0 |
- | |
1091 | mov ecx,2 |
- | |
1092 | xor eax,eax |
- | |
1093 | ret |
- | |
1094 | @@: |
- | |
1095 | push ebx edi esi |
- | |
1096 | mov [num_f], 0 |
- | |
1097 | xor edx, edx |
- | |
1098 | stdcall getFoldByNum, [path], 0 |
- | |
1099 | test eax, eax |
- | |
1100 | jz .error2 |
- | |
1101 | ;dpsP eax |
- | |
1102 | ;dnl |
- | |
1103 | - | ||
1104 | mov [curFold], eax |
- | |
1105 | mov esi, [TVROOT] |
- | |
1106 | .goLoop: |
- | |
1107 | mov ebx, 8 |
- | |
1108 | mov ecx, [esi] |
- | |
1109 | shr ecx, 3 ;á⮫쪮 ¢ TVROOT áâàãªâãà usel |
- | |
1110 | .loop: |
- | |
1111 | push ecx |
- | |
1112 | stdcall strCmp, [curFold], [esi+ebx] |
- | |
1113 | test al, al |
- | |
1114 | jz .find |
- | |
1115 | add ebx, 8 |
- | |
1116 | pop ecx |
- | |
1117 | loop .loop |
- | |
1118 | jmp .error1 |
- | |
1119 | - | ||
1120 | .find: |
- | |
1121 | pop eax ; ¢ë஢﫨 |
- | |
1122 | inc [num_f] |
- | |
1123 | stdcall MM_DelMem, [curFold] |
- | |
1124 | stdcall getFoldByNum, [path], [num_f] |
- | |
1125 | test eax, eax |
- | |
1126 | jz .end |
- | |
1127 | mov [curFold], eax |
- | |
1128 | - | ||
1129 | - | ||
1130 | cmp dword[esi+ebx+4], 0 |
- | |
1131 | jz .error |
- | |
1132 | lea eax, [esi+ebx] |
- | |
1133 | mov [old_vetk],esi |
- | |
1134 | mov [old_usel],eax |
- | |
1135 | mov esi, [esi+ebx+4] |
- | |
1136 | jmp .goLoop |
- | |
1137 | .end: |
- | |
1138 | - | ||
1139 | mov eax, esi |
- | |
1140 | lea edx, [esi+ebx] |
- | |
1141 | xor ecx,ecx |
- | |
1142 | jmp .exit |
- | |
1143 | - | ||
1144 | .error: |
- | |
1145 | stdcall MM_DelMem, [curFold] |
- | |
1146 | mov eax, esi |
- | |
1147 | lea edx, [esi+ebx] |
- | |
1148 | mov ecx,1 |
- | |
1149 | jmp .exit |
- | |
1150 | .error1: |
- | |
1151 | stdcall MM_DelMem, [curFold] |
- | |
1152 | mov eax, [old_vetk] |
- | |
1153 | mov edx, [old_usel] |
- | |
1154 | mov ecx,1 |
- | |
1155 | jmp .exit |
- | |
1156 | .error2: |
- | |
1157 | stdcall MM_DelMem, [curFold] |
- | |
1158 | mov eax, 0 |
- | |
1159 | mov edx, 0 |
- | |
1160 | mov ecx,2 |
- | |
1161 | - | ||
1162 | .exit: |
- | |
1163 | pop esi edi ebx |
- | |
1164 | ret |
- | |
1165 | endp |
- | |
1166 | - | ||
1167 | ; |
- | |
1168 | ; 室¨â 㧥«, ª®â®àë© ááë« ¥âáï § ¤ ë© ã§¥« |
- | |
1169 | ;¢¥àñâ ¢ edx usel, ¤«ï ¯à¥¤¯®á«¥¤¥© ¯ ¯ª¨ ¢ ¯ã⨠|
- | |
1170 | ;eax - ¢¥âª , ¢ ª®â®à®© íâ®â 㧥« |
- | |
1171 | ;¥áå - áâ âãá(0, 1, 2, -1) |
- | |
1172 | proc findUselMinusOne path:DWORD |
- | |
1173 | locals |
- | |
1174 | path2 rb 256 |
- | |
1175 | endl |
- | |
1176 | push ebx edi esi |
- | |
1177 | - | ||
1178 | stdcall strLen,[path] |
- | |
1179 | cmp eax,255 |
- | |
1180 | ja .err |
- | |
1181 | lea eax,[path2] |
- | |
1182 | stdcall strCpy,[path],eax |
- | |
1183 | - | ||
1184 | lea edi,[path2] |
- | |
1185 | xor al,al |
- | |
1186 | mov ecx,256 |
- | |
1187 | repne scasb ; V |
- | |
1188 | test ecx,ecx ;/hd0/1/kol |
- | |
1189 | jz .err ;⮫쪮 ®¤ ¯ ¯ª |
- | |
1190 | sub ecx,255 |
- | |
1191 | xor ecx,-1 |
- | |
1192 | inc ecx |
- | |
1193 | sub edi,2 |
- | |
1194 | cmp byte [edi], '/' |
- | |
1195 | jne @f |
- | |
1196 | dec edi |
- | |
1197 | dec ecx |
- | |
1198 | @@: |
- | |
1199 | mov al,'/' |
- | |
1200 | std |
- | |
1201 | repne scasb |
- | |
1202 | cld |
- | |
1203 | test ecx,ecx |
- | |
1204 | jz .err ; ⮫쪮 ®¤ ¯ ¯ª |
- | |
1205 | - | ||
1206 | inc edi |
- | |
1207 | mov byte[edi],0 |
- | |
1208 | - | ||
1209 | lea eax,[path2] |
- | |
1210 | stdcall findVetka,eax |
- | |
1211 | jmp @f |
- | |
1212 | .err: |
- | |
1213 | xor eax,eax |
- | |
1214 | xor edx,edx |
- | |
1215 | or ecx,-1 |
- | |
1216 | @@: |
- | |
1217 | pop esi edi ebx |
- | |
1218 | ret |
- | |
1219 | endp |
- | |
1220 | - | ||
1221 | ;--------------®â®¢ |
- | |
1222 | ; 室¨â 㧥« ¤«ï § ¤ ®£® ª â «®£ ¢ ¯ã⨠|
- | |
1223 | ;eax = Pointer to _vetka |
- | |
1224 | ;edx = Pointer to _usel |
- | |
1225 | ;ecx = status (0 - success, 1 - found path not full, |
- | |
1226 | ; 2 - path not corrected, -1 - only one folder in path) |
- | |
1227 | - | ||
1228 | proc findUselByNum path:DWORD,num:DWORD |
- | |
1229 | locals |
- | |
1230 | path2 rb 256 |
- | |
1231 | endl |
- | |
1232 | push ebx edi esi |
- | |
1233 | - | ||
1234 | stdcall getNumFolds,[path] |
- | |
1235 | cmp eax,[num] |
- | |
1236 | jl .err |
- | |
1237 | - | ||
1238 | xor ebx,ebx |
- | |
1239 | lea edi,[path2] |
- | |
1240 | mov esi,[path] |
- | |
1241 | cmp byte[esi],'/' |
- | |
1242 | jne .l2 |
- | |
1243 | dec ebx |
- | |
1244 | .l2: lodsb |
- | |
1245 | stosb |
- | |
1246 | cmp al,'/' |
- | |
1247 | jne @f |
- | |
1248 | inc ebx |
- | |
1249 | cmp ebx,[num] |
- | |
1250 | ja .go |
- | |
1251 | @@: |
- | |
1252 | test al,al |
- | |
1253 | jnz .l2 |
- | |
1254 | - | ||
1255 | .go: |
- | |
1256 | mov byte[esi-1],0 |
- | |
1257 | lea eax,[path2] |
- | |
1258 | stdcall findVetka,eax |
- | |
1259 | jmp @f |
- | |
1260 | .err: |
- | |
1261 | xor eax,eax |
- | |
1262 | xor edx,edx |
- | |
1263 | or ecx,-1 |
- | |
1264 | @@: |
- | |
1265 | pop esi edi ebx |
- | |
1266 | ret |
- | |
1267 | endp |
- | |
1268 | - | ||
1269 | ;''''''''''''''' |
- | |
1270 | ;®§¢à é ¥â ¨¬ï ä ©« /ª â «®£ ¨§ ¢á¥£® ¯ã⨠|
- | |
1271 | ; --- !!! ¬ïâì 㦮 ¡ã¤¥â ®á¢®¡®¤¨âì |
- | |
1272 | proc getName path:DWORD |
- | |
1273 | push esi edi |
- | |
1274 | - | ||
1275 | stdcall strLen,[path] |
- | |
1276 | mov edi,[path] |
- | |
1277 | add edi,eax |
- | |
1278 | sub edi,2 |
- | |
1279 | cmp byte[edi],'/' |
- | |
1280 | jne @f |
- | |
1281 | dec edi |
- | |
1282 | @@: |
- | |
1283 | mov ecx,eax |
- | |
1284 | mov al,'/' |
- | |
1285 | std |
- | |
1286 | repne scasb |
- | |
1287 | cld |
- | |
1288 | add edi,2 |
- | |
1289 | stdcall strLen,edi |
- | |
1290 | mov esi,eax |
- | |
1291 | stdcall MM_AllocMem, ecx |
- | |
1292 | push eax |
- | |
1293 | add esi,eax |
- | |
1294 | stdcall strCpy,edi, eax |
- | |
1295 | cmp byte[esi-2],'/' |
- | |
1296 | jne @f |
- | |
1297 | mov byte[esi-2],0 |
- | |
1298 | @@: |
- | |
1299 | pop eax |
- | |
1300 | pop edi esi |
- | |
1301 | ret |
- | |
1302 | endp |
- | |
1303 | - | ||
1304 | - | ||
1305 | - | ||
1306 | ; """""""""""""""" |
- | |
1307 | proc strCpy src:DWORD,dest:DWORD |
- | |
1308 | push esi edi |
- | |
1309 | mov edi,[dest] |
- | |
1310 | mov esi,[src] |
- | |
1311 | @@: lodsb |
- | |
1312 | stosb |
- | |
1313 | test al,al |
- | |
1314 | jnz @b |
- | |
1315 | pop edi esi |
- | |
1316 | ret |
- | |
1317 | endp |
- | |
1318 | - | ||
1319 | ; """""""""""""""" |
- | |
1320 | ; á ãçñ⮬ § ¢¥àè î饣® 0 |
- | |
1321 | proc strLen strz:DWORD |
- | |
1322 | push edi |
- | |
1323 | mov edi,[strz] |
- | |
1324 | xor al,al |
- | |
1325 | mov ecx,1024 |
- | |
1326 | repnz scasb |
- | |
1327 | mov eax,1024 |
- | |
1328 | sub eax,ecx |
- | |
1329 | pop edi |
- | |
1330 | ret |
- | |
1331 | endp |
- | |
1332 | - | ||
1333 | ; """""""""""""""" |
- | |
1334 | proc strCmp src1:DWORD, src2:DWORD |
- | |
1335 | push esi edi |
- | |
1336 | mov edi, [src1] |
- | |
1337 | mov esi, [src2] |
- | |
1338 | mov eax, 1 |
- | |
1339 | @@: test al, al |
- | |
1340 | jz .end |
- | |
1341 | lodsb |
- | |
1342 | scasb |
- | |
1343 | jz @b |
- | |
1344 | - | ||
1345 | ja .low |
- | |
1346 | mov eax, 1 |
- | |
1347 | jmp @f |
- | |
1348 | .low: |
- | |
1349 | mov eax, -1 |
- | |
1350 | @@: |
- | |
1351 | pop edi esi |
- | |
1352 | ret |
- | |
1353 | .end: |
- | |
1354 | xor eax,eax |
- | |
1355 | jmp @b |
- | |
1356 | endp |
- | |
1357 | - | ||
1358 | - | ||
1359 | ; """""""""""""""" |
- | |
1360 | ;¢®§à é ¥â ¨¬ï ¯ ¯ª¨ ¨§ ¢á¥£® ¯ã⨠¯® ¥£® ®¬¥àã. |
- | |
1361 | ;! çñâ ç¨ ¥âáï á 0 |
- | |
1362 | ; --- !!! ¬ïâì 㦮 ¡ã¤¥â ®á¢®¡®¤¨âì |
- | |
1363 | proc getFoldByNum strz:DWORD, num:DWORD |
- | |
1364 | push ebx edi esi |
- | |
1365 | - | ||
1366 | mov esi, [strz] |
- | |
1367 | mov ecx, 1024 |
- | |
1368 | stdcall MM_AllocMem, 256 |
- | |
1369 | mov ebx, eax |
- | |
1370 | cmp byte[esi], '/' |
- | |
1371 | jne @f |
- | |
1372 | inc esi |
- | |
1373 | @@: |
- | |
1374 | - | ||
1375 | .find_begin: |
- | |
1376 | cmp [num], 0 |
- | |
1377 | jz .copy |
- | |
1378 | - | ||
1379 | @@: lodsb |
- | |
1380 | cmp al, '/' |
- | |
1381 | je @f |
- | |
1382 | cmp al, 0 |
- | |
1383 | je .error |
- | |
1384 | loop @b |
- | |
1385 | @@: dec [num] |
- | |
1386 | jmp .find_begin |
- | |
1387 | - | ||
1388 | .copy: |
- | |
1389 | ;dec esi |
- | |
1390 | mov edi, ebx |
- | |
1391 | mov byte[edi], 1 ;íâ® ¬¥âª ⮣®, çâ® ¨ ®¤¨ ¡ ©â ¥ § ¯¨á |
- | |
1392 | @@: |
- | |
1393 | lodsb |
- | |
1394 | cmp al, '/' |
- | |
1395 | je @f |
- | |
1396 | cmp al, 0 |
- | |
1397 | je @f |
- | |
1398 | stosb |
- | |
1399 | loop @b |
- | |
1400 | @@: |
- | |
1401 | cmp byte[edi], 1 |
- | |
1402 | jne @f |
- | |
1403 | .error: |
- | |
1404 | stdcall MM_DelMem, ebx |
- | |
1405 | xor ebx, ebx |
- | |
1406 | jmp .end |
- | |
1407 | @@: |
- | |
1408 | xor al, al |
- | |
1409 | stosb |
- | |
1410 | .end: |
- | |
1411 | mov eax, ebx |
- | |
1412 | pop esi edi ebx |
- | |
1413 | ret |
- | |
1414 | endp |
- | |
1415 | - | ||
1416 | - | ||
1417 | ; """""""""""""""" |
- | |
1418 | ;¢®§à é ¥â ª®«¨ç¥á⢮ í«¥¬¥â®¢ |
- | |
1419 | ;ret: eax = Num or -1 |
- | |
1420 | proc getNumFolds path:DWORD |
- | |
1421 | push ebx edi esi |
- | |
1422 | - | ||
1423 | stdcall strLen,[path] |
- | |
1424 | cmp eax,255 |
- | |
1425 | ja .err |
- | |
1426 | - | ||
1427 | xor ebx,ebx |
- | |
1428 | mov esi,[path] |
- | |
1429 | cmp byte[esi],'/' |
- | |
1430 | jne .l1 |
- | |
1431 | dec ebx |
- | |
1432 | .l1: lodsb |
- | |
1433 | cmp al,'/' |
- | |
1434 | jne @f |
- | |
1435 | inc ebx |
- | |
1436 | @@: |
- | |
1437 | test al,al |
- | |
1438 | jnz .l1 |
- | |
1439 | - | ||
1440 | cmp [esi-2],byte '/' |
- | |
1441 | je @f |
- | |
1442 | inc ebx |
- | |
1443 | @@: |
- | |
1444 | - | ||
1445 | mov eax,ebx |
- | |
1446 | jmp .exit |
- | |
1447 | .err: |
- | |
1448 | or eax,-1 |
- | |
1449 | .exit: |
- | |
1450 | pop esi edi ebx |
- | |
1451 | ret |
- | |
1452 | endp |
- | |
1453 | - | ||
1454 | - | ||
1455 | ;'''''''''''''''' |
- | |
1456 | ;¢®§¢à é ¥â ç áâì ¯ãâ¨: ¯¥à¢ë¥ num ª â «®£®¢ |
- | |
1457 | ;ret: ª § ⥫ì áâபã. |
- | |
1458 | ; --- !!! ¬ïâì 㦮 ¡ã¤¥â ®á¢®¡®¤¨âì |
- | |
1459 | proc getFirstTailPath path:DWORD, num:DWORD |
- | |
1460 | push ebx edi esi |
- | |
1461 | - | ||
1462 | cmp [num],0 |
- | |
1463 | je .err |
- | |
1464 | - | ||
1465 | - | ||
1466 | stdcall strLen,[path] |
- | |
1467 | cmp eax,255 |
- | |
1468 | ja .err |
- | |
1469 | - | ||
1470 | stdcall MM_AllocMem, eax |
- | |
1471 | mov edi,eax |
- | |
1472 | push eax |
- | |
1473 | - | ||
1474 | - | ||
1475 | xor ebx,ebx |
- | |
1476 | mov esi,[path] |
- | |
1477 | cmp byte[esi],'/' |
- | |
1478 | jne .l1 |
- | |
1479 | .l1: lodsb |
- | |
1480 | stosb |
- | |
1481 | cmp al,'/' |
- | |
1482 | jne @f |
- | |
1483 | inc ebx |
- | |
1484 | cmp ebx,[num] |
- | |
1485 | ja .endloop |
- | |
1486 | @@: |
- | |
1487 | test al,al |
- | |
1488 | jnz .l1 |
- | |
1489 | .endloop: |
- | |
1490 | - | ||
1491 | cmp [esi-2],byte '/' |
- | |
1492 | je @f |
- | |
1493 | mov byte[edi-1],0 |
- | |
1494 | jmp .l2 |
- | |
1495 | @@: |
- | |
1496 | mov byte[edi-2],0 |
- | |
1497 | .l2: |
- | |
1498 | - | ||
1499 | pop eax |
- | |
1500 | jmp .exit |
- | |
1501 | .err: |
- | |
1502 | - | ||
1503 | or eax,-1 |
- | |
1504 | - | ||
1505 | .exit: |
- | |
1506 | - | ||
1507 | pop esi edi ebx |
- | |
1508 | ret |
- | |
1509 | endp |
- | |
1510 | - | ||
1511 | - | ||
1512 | proc TESTINIT |
- | |
1513 | ;---- ç⮡ë áâàãâãàë ¬¥¥¤¦¥à ¯ ¬ï⨠¡ë«¨ ¢ ®à¬¥ 㦮 ¨¬¥® ¨¬ ¢ë¤¥«¨âì ¯ ¬ïâì ¯®¤ íâ® ¤¥à¥¢® |
- | |
1514 | - | ||
1515 | ;;TEST getFoldByNum |
- | |
1516 | ;tstStr db '/hd0/1/dqw',0 |
- | |
1517 | ; stdcall getFoldByNum,tstStr,2 |
- | |
1518 | ; dpsP eax |
- | |
1519 | ; dps '|' |
- | |
1520 | ; dnl |
- | |
1521 | ; ret |
- | |
1522 | stdcall MM_AllocMem,4000 |
- | |
1523 | mov [TVROOT],eax |
- | |
1524 | stdcall MM_AllocMem,4000 |
- | |
1525 | mov [Tus1+4],eax |
- | |
1526 | stdcall MM_AllocMem,4000 |
- | |
1527 | mov [Tus2+4],eax |
- | |
1528 | - | ||
1529 | stdcall MM_AllocMem,4 |
- | |
1530 | mov [Tus1],eax |
- | |
1531 | stdcall MM_AllocMem,4 |
- | |
1532 | mov [Tus2],eax |
- | |
1533 | stdcall MM_AllocMem,4 |
- | |
1534 | mov [Tus3],eax |
- | |
1535 | - | ||
1536 | stdcall strCpy,sname1,[Tus1] |
- | |
1537 | stdcall strCpy,sname2,[Tus2] |
- | |
1538 | stdcall strCpy,sname3,[Tus3] |
- | |
1539 | - | ||
1540 | mov esi,TvetkaHD0 |
- | |
1541 | mov edi,[TVROOT] |
- | |
1542 | mov ecx,4 |
- | |
1543 | rep movsd |
- | |
1544 | - | ||
1545 | mov esi,Tvetka1 |
- | |
1546 | mov edi,[Tus1+4] |
- | |
1547 | mov ecx,4 |
- | |
1548 | rep movsd |
- | |
1549 | - | ||
1550 | mov esi,TvetkaKOL |
- | |
1551 | mov edi,[Tus2+4] |
- | |
1552 | mov ecx,4 |
- | |
1553 | rep movsd |
- | |
1554 | - | ||
1555 | - | ||
1556 | ;int3 |
- | |
1557 | ; stdcall tree_Add,strTets1 |
- | |
1558 | ; stdcall tree_Add,strTets2 |
- | |
1559 | ; stdcall tree_Add,strTets3 |
- | |
1560 | ;dps '----------' |
- | |
1561 | ;dnl |
- | |
1562 | ;call D_OutTree |
- | |
1563 | - | ||
1564 | ; stdcall tree_Del,strTets2 |
- | |
1565 | ;dps '----------' |
- | |
1566 | ;dnl |
- | |
1567 | ;call D_OutTree |
- | |
1568 | ;dps '-------------------------' |
- | |
1569 | ;dnl |
- | |
1570 | ; stdcall getFoldByNum,strTets,0 |
- | |
1571 | ;mov edi,eax |
- | |
1572 | ;dpsP edi |
- | |
1573 | ;dnl |
- | |
1574 | ;int3 |
- | |
1575 | mov eax,[PTree] |
- | |
1576 | lea eax, [5*8+eax+_tree.open] |
- | |
1577 | call GetPath |
- | |
1578 | dpsP eax |
- | |
1579 | dnl |
- | |
1580 | ret |
- | |
1581 | endp |
- | |
1582 | - | ||
1583 | - | ||
1584 | ;;TEST |
- | |
1585 | strTets1 db '/hd0/kol/asd1',0 |
- | |
1586 | strTets2 db '/hd0/kol/asd2',0 |
- | |
1587 | strTets3 db '/hd0/kol/asd3',0 |
- | |
1588 | - | ||
1589 | TvetkaHD0: |
- | |
1590 | dd 2*4 |
- | |
1591 | dd 4000 |
- | |
1592 | - | ||
1593 | Tus1: |
- | |
1594 | dd sname1 |
- | |
1595 | dd Tvetka1 |
- | |
1596 | ;--------------------- |
- | |
1597 | - | ||
1598 | - | ||
1599 | - | ||
1600 | Tvetka1: |
- | |
1601 | dd 2*4 |
- | |
1602 | dd 4000 |
- | |
1603 | - | ||
1604 | Tus2: |
- | |
1605 | dd sname2 |
- | |
1606 | dd TvetkaKOL |
- | |
1607 | ;--------------------- |
- | |
1608 | - | ||
1609 | - | ||
1610 | TvetkaKOL: |
- | |
1611 | dd 2*4 |
- | |
1612 | dd 4000 |
- | |
1613 | - | ||
1614 | Tus3: |
- | |
1615 | dd sname3 |
- | |
1616 | dd 0 |
- | |
1617 | ;--------------------- |
- | |
1618 | - | ||
1619 | sname1 db 'hd0',0 |
- | |
1620 | sname2 db '1',0 |
- | |
1621 | sname3 db 'kol',0 |
- | |
1622 | - | ||
1623 | _TBUFSIZE dd 4000 - $ |
- | |
1624 | - | ||
1625 | - | ||
1626 | TVROOT rd 1 |
- | |
1627 | - | ||
1628 | ;¡ã¤¥â ¡ãä¥à ®â¬¥ç¥ëå ä ©«®¢/¯ ¯®ª |
- | |
1629 | ;®âªàëâì ¯ ¯ªã |
- | |
1630 | ; ¥á«¨ ® ®â¬¥ç¥ ¢áï, â® ¨ç¥£® ¥ ¤¥« âì |
- | |
1631 | ; ¥á«¨ ¢ ¥© ã¡à âì £ «ªã, â® ¤®¡ ¢¨âì ¢ ᯨ᮪ ®â¬¥ç¥ëå ¢á¥ ®áâ «ìë¥, |
- | |
1632 | ; ¯ ¯ªã ã¡à âì ¨§ ᯨ᪠|
- | |
1633 | ; ¥á«¨ ¯®áâ ¢¨âì £ «ªã ¯®á«¥¤¥¬ ¥ ¢ë¤¥«¥®¬ ä ©«¥, â® ¨ç¥£®. ¯à®áâ® ¤®¡ ¢¨âì ¥£® ¢ ᯨ᮪,¬ ¨¯ã«ï樨 á ¯ ¯ª ¬¨ ¥§ 祬 |
- | |
1634 | ; |
- | |
1635 | - | ||
1636 | ;vetka: |
- | |
1637 | ; sizeused |
- | |
1638 | ; sizebuf(def - 4000) |
- | |
1639 | ; array of usel |
- | |
1640 | ; |
- | |
1641 | ; --- ॠ«¨§ æ¨ï --- |
- | |
1642 | ;¤¥à¥¢® ¢ë¤¥«¥ëå ®¡ê¥ªâ®¢: |
- | |
1643 | ; 㧥« (usel): |
- | |
1644 | ; pName - ¤¢á«®¢® - 㪠§ ⥫ì áâப㠨¬ï 㧫 |
- | |
1645 | ; pNext - ¤¢á«®¢® - 㪠§ ⥫ì vetka ¨«¨ 0 |
- | |
1646 | - | ||
1647 | - | ||
1648 | ;vetka {2*8,4000-2*8, |
- |