Subversion Repositories Kolibri OS

Rev

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,
-