Subversion Repositories Kolibri OS

Rev

Rev 993 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
31 halyavin 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;                                              ;
3
;   SYSTEM X-TREE BROWSER                      ;
4
;                                              ;
5
;   Author: Pavlushin Evgeni waptap@mail.ru    ;
6
;                   site: www.deck4.narod.ru   ;
7
;                                              ;
8
;   Compile with FASM for MenuetOS             ;
9
;                                              ;
10
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
11
 
12
;Bug report +bug deleted  -bug not deleted
13
;show/fade del notwork+
14
;64Ver Run file from HD bug deleted.
15
;65Ver The bad scroll realization
16
;66Ver The good scroll realization, url line anti-flick
17
;67Ver Url line monolith procedure
18
;68Ver Mini icon on left of file name
19
;69Ver Getimg proc size minus 900 bytes
20
;70Ver Del data area ramsize minus 140000 bytes
21
;72Ver Quick sort, ramsize minus 200000 bytes
22
;73Ver Url flick and out bugs delete
23
;74Ver scroll bug deleted
24
;75Ver hd partition fast change button. Add bmp,txt,exec,asm and inc icons.
25
; sort type in headmenu bug del
26
;78Ver directory extension bug fix by Asko Vuori
27
;79Ver Asko Vuori volume label add and "put in command line" bug fix
28
;80Ver prompt edit fatal bug deleted, antiflick when move list up/down
29
;81Ver Save Dialog bug deleted
134 diamond 30
;82Ver Rewritten to function 70. Corrected work with scrollbar.
156 diamond 31
;83Ver CD-ROM support
32
;84Ver URL line editor corrected
134 diamond 33
;1560000 bytes memory!
31 halyavin 34
 
35
;******************************************************************************
36
  use32
131 diamond 37
  org	   0x0
38
  db	 'MENUET01'   ; 8 byte id
39
  dd	 0x01		; header version
40
  dd	 START	      ; program start
41
  dd	 I_END	      ; program image size
42
  dd	 RAM_END      ; memory
43
  dd	 RAM_END      ; stack
44
  dd	 param_area ,0x0   ; param,icon
31 halyavin 45
;  dd 0,0
46
 
47
;******************************************************************************
2706 leency 48
include '../../../macros.inc' ;
31 halyavin 49
include 'ascl.inc'
50
include 'ascgl.inc'
131 diamond 51
 
52
START:		    ; start of execution
31 halyavin 53
; //// Willow
131 diamond 54
;    mov eax,58
55
;    mov ebx,MRUfile
485 heavyiron 56
;    mcall
31 halyavin 57
; //// Willow
131 diamond 58
    mcall 18,11,1,table_area
134 diamond 59
    cmp [edx+2],byte 0
131 diamond 60
    je	  no_hdpartition_on_hd0
134 diamond 61
    mov [hdimg1], aHD0
131 diamond 62
 no_hdpartition_on_hd0:
134 diamond 63
    cmp [edx+3],byte 0
131 diamond 64
    je	  no_hdpartition_on_hd1
134 diamond 65
    mov [hdimg2], aHD1
131 diamond 66
 no_hdpartition_on_hd1:
134 diamond 67
    cmp [edx+4],byte 0
131 diamond 68
    je	  no_hdpartition_on_hd2
134 diamond 69
    mov [hdimg3], aHD2
131 diamond 70
 no_hdpartition_on_hd2:
134 diamond 71
    cmp [edx+5],byte 0
131 diamond 72
    je	  no_hdpartition_on_hd3
134 diamond 73
    mov [hdimg4], aHD3
131 diamond 74
 no_hdpartition_on_hd3:
993 Ataualpa 75
	test	byte [edx+1], 80h
76
	jz	@f
77
	mov	[hdimg1], aCD0
78
	mov	[hdimg1+4], 'CD-R'
79
	mov	[hdimg1+8], 'OM  '
156 diamond 80
@@:
993 Ataualpa 81
	test	byte [edx+1], 20h
82
	jz	@f
83
	mov	[hdimg2], aCD1
84
	mov	[hdimg2+4], 'CD-R'
85
	mov	[hdimg2+8], 'OM  '
156 diamond 86
@@:
993 Ataualpa 87
	test	byte [edx+1], 8
88
	jz	@f
89
	mov	[hdimg3], aCD2
90
	mov	[hdimg3+4], 'CD-R'
91
	mov	[hdimg3+8], 'OM  '
156 diamond 92
@@:
993 Ataualpa 93
	test	byte [edx+1], 2
94
	jz	@f
95
	mov	[hdimg4], aCD3
96
	mov	[hdimg4+4], 'CD-R'
97
	mov	[hdimg4+8], 'OM  '
156 diamond 98
@@:
31 halyavin 99
 
100
    mov eax,40
101
    mov ebx,0100111b
485 heavyiron 102
    mcall
31 halyavin 103
 
104
    cmp byte [param_area],0 ;test parameters line
131 diamond 105
    jne no_brow     ;it's dialog
134 diamond 106
    mov [browser], 1   ;it's browser
107
    jmp no_dlg
31 halyavin 108
no_brow:
109
 
110
    mov al,byte [param_area+5]
111
    mov [dlg_type],al
112
 
113
    mov eax,9
114
    mov ebx,procinfo
115
    mov ecx,-1
485 heavyiron 116
    mcall
31 halyavin 117
 
118
    mov eax,dword [procinfo+30]
119
    mov edi,MYPID+4-1
120
    mov ecx,4
121
    mov ebx,10
122
    cld
123
 
124
new_d:
125
    xor edx,edx
126
    div ebx
127
    add dl,'0'
128
    mov [edi],dl
129
    dec edi
130
    loop new_d
131
 
132
    movzx eax,byte [param_area]
133
    sub eax,48
134
    imul eax,10
135
    movzx ebx,byte [param_area+1]
136
    add eax,ebx
137
    sub eax,48
138
    imul eax,10
139
    movzx ebx,byte [param_area+2]
140
    add eax,ebx
141
    sub eax,48
142
    imul eax,10
143
    movzx ebx,byte [param_area+3]
144
    add eax,ebx
145
    sub eax,48
146
 
147
    mov ecx,eax ;pid to ecx
148
    mov eax,60
149
    mov ebx,2
150
    mov edx,MYPID
151
    mov esi,4
485 heavyiron 152
    mcall
31 halyavin 153
no_dlg:
154
 
155
    giftoimg but_file,tempimg
156
 
157
;************************
158
;      Get images
159
;************************
160
 
161
    mov eax,0  ;x
131 diamond 162
    mov ebx,0	    ;y
31 halyavin 163
    mov esi,286     ;xs
131 diamond 164
    mov edi,16		;ys
31 halyavin 165
    mov ecx,tempimg ;src
166
    mov edx,butimg   ;dest
167
    call getimgproc
168
    mov eax,288
169
    mov esi,60
170
    mov edx,logoimg  ;dest
171
    call getimgproc
172
    mov eax,0  ;x
131 diamond 173
    mov ebx,16	       ;y
174
    mov esi,51	       ;xs
31 halyavin 175
    mov edi,esi      ;ys
131 diamond 176
    mov edx,logoinfimg	     ;dest
31 halyavin 177
    call getimgproc
131 diamond 178
    mov eax,51	    ;x
179
    mov esi,8	    ;xs
180
    mov edi,9	     ;ys
31 halyavin 181
    mov edx,upsb   ;dest
182
    call getimgproc
183
    mov eax,51+8  ;x
184
    mov edx,dnsb   ;dest
185
    call getimgproc
186
 
187
    mov eax,51+16  ;x
131 diamond 188
    mov ebx,16	       ;y
189
    mov esi,12	       ;xs
190
    mov edi,9	     ;ys
31 halyavin 191
 
192
    mov ecx,tempimg ;src
193
    mov edx,hdico   ;dest
156 diamond 194
    mov ebp,10
31 halyavin 195
loogetimg:
196
    call getimgproc
197
    add edx,9*12*3+8
198
    add eax,12
199
    dec ebp
200
    jnz loogetimg
201
 
202
    call read_directory
203
;    call convertation
204
red:
131 diamond 205
    call draw_window	    ; at first, draw the window
31 halyavin 206
 
207
still:
208
    mov eax,9
209
    mov ebx,procinfo
210
    mov ecx,-1
485 heavyiron 211
    mcall
31 halyavin 212
 
213
    wtevent red,key,button
214
 
215
scrolltest:
216
    mov eax,37
217
    mov ebx,2
485 heavyiron 218
    mcall
134 diamond 219
    dec eax
31 halyavin 220
    jne still
221
 
222
scrl:
223
    mov eax,37
224
    mov ebx,1
485 heavyiron 225
    mcall
993 Ataualpa 226
	movzx	ebx, ax 	; y
227
	shr	eax, 16 	; x
31 halyavin 228
    mov ebp,eax
502 heavyiron 229
    sub ebp,[listx] ;[procinfo.box.width]
31 halyavin 230
    sub ebp,[listxsize]
231
    add ebp,[scrollsize]
232
    cmp ebp,dword [scrollsize] ;8
134 diamond 233
    jae menu_test ; still
31 halyavin 234
 
993 Ataualpa 235
	lea	ebp, [ebx-scrollbutsize]
236
	sub	ebp, [listy]	; up scroll
237
	jl	menu_test
238
	mov	ecx, [listysize]
239
	sub	ecx, 2*scrollbutsize
240
	mov	eax, [scroll_height]
241
	cmp	ebp, ecx
242
	jge	menu_test
243
	sub	ecx, eax
244
	shr	eax, 1
245
	sub	ebp, eax
246
	jge	@f
247
	xor	ebp, ebp
134 diamond 248
@@:
993 Ataualpa 249
	cmp	ebp, ecx
250
	jl	@f
251
	mov	ebp, ecx
134 diamond 252
@@:
993 Ataualpa 253
	xor	edx, edx
254
	mov	eax, [listysize]
255
	sub	eax, 2
256
	mov	ebx, 10
257
	div	ebx
258
	mov	ebx, eax
259
	cmp	ebx, [listsize]
260
	jae	notusescrl
261
	mov	eax, [listsize]
262
	sub	eax, ebx
263
	mul	ebp
264
	div	ecx
265
	cmp	eax, [filecursor]
266
	jz	still
267
	mov	[filecursor], eax
268
	jmp	usescrl
31 halyavin 269
notusescrl:
993 Ataualpa 270
	cmp	[filecursor], 0
271
	jz	still
31 halyavin 272
    mov [filecursor],0 ;ebp
273
usescrl:
274
 
275
    mov [flick],1
276
    jmp anti_flick ;red
277
 
278
menu_test:
279
    cmp [pmenu_draw],1 ;if menu is show, update all
280
    jne still
281
    mov [pmenu_draw],0
131 diamond 282
    jmp red	     ;update all window
31 halyavin 283
 
284
;this function not use in dialog when poup menu's is not used
285
;in dialog's
286
 
287
;===================
288
; Test keyboard
289
;===================
131 diamond 290
key:		  ; key
31 halyavin 291
    mov  eax,2
485 heavyiron 292
    mcall
31 halyavin 293
    cmp dword [focus],0
294
    jne con_edit
295
    cmp  ah,key_Up
296
    jne  no_upk
297
    mov  ebx,1
298
    jmp  up
299
no_upk:
300
    cmp  ah,key_Down
301
    jne  no_downk
302
    mov  ebx,1
303
    jmp  down
304
no_downk:
305
    cmp  ah,key_PgUp
306
    jne  no_pgup
307
    mov  ebx,10
308
    jmp  up
309
no_pgup:
310
    cmp  ah,key_PgDown
311
    jne  no_pgdown
312
    mov  ebx,10
313
    jmp  down
314
no_pgdown:
315
    cmp  ah,key_Enter
993 Ataualpa 316
    je	 kfad
31 halyavin 317
    cmp  ah,key_Bspace
131 diamond 318
    je	     back
31 halyavin 319
    cmp  ah,key_F2
131 diamond 320
    je	     viewset
31 halyavin 321
    cmp  ah,key_F3
131 diamond 322
    je	     textopen
31 halyavin 323
    cmp  ah,key_F5
131 diamond 324
    je	     copy_to_clip
31 halyavin 325
    cmp  ah,key_F6
131 diamond 326
    je	     paste_from_clip
31 halyavin 327
    cmp  ah,key_F11
131 diamond 328
    je	     edit_prompt
31 halyavin 329
    cmp  ah,key_F12
131 diamond 330
    je	     update
31 halyavin 331
    jmp  still
332
 
333
; test input string
334
con_edit:
335
    cmp  ah,key_Enter
336
    jne  no_con_ent
337
    not  [focus]
338
    jmp  savetest
134 diamond 339
;    jmp  update
31 halyavin 340
no_con_ent:
341
    cmp  ah,key_Left
342
    jne  no_con_left
993 Ataualpa 343
	cmp	[cursor], 0
344
	jz	still
31 halyavin 345
    dec  [cursor]
346
    mov  [flick],2
347
    jmp  anti_flick ;red
348
no_con_left:
349
    cmp  ah,key_Right
350
    jne  no_con_right
993 Ataualpa 351
	mov	eax, [cursor]
352
	cmp	byte [path+eax], 0
353
	jz	still
31 halyavin 354
    inc  [cursor]
355
    mov  [flick],2
356
    jmp  anti_flick ;red
357
no_con_right:
358
    cmp  ah,key_Bspace
359
    jne  no_con_bspace
360
 
993 Ataualpa 361
	mov	ebp, [cursor]
362
	test	ebp, ebp
363
	jz	still
31 halyavin 364
lobsp:
365
    mov  bl,byte [path+ebp]
366
    mov  byte [path+ebp-1],bl
367
    inc  ebp
134 diamond 368
    cmp  ebp,1024
31 halyavin 369
    jne  lobsp
370
    dec  [cursor]
371
    mov  [flick],2
372
    jmp  anti_flick ;red
373
no_con_bspace:
374
 
375
    mov  ecx,[cursor]
134 diamond 376
    mov  ebp,1022
993 Ataualpa 377
	cmp	byte [path+ebp], 0
378
	jnz	still
31 halyavin 379
losx:
993 Ataualpa 380
	cmp	ebp, ecx
381
	jbe	@f
31 halyavin 382
    mov  bl,byte [path+ebp]
383
    mov  byte [path+ebp+1],bl
384
    dec  ebp
134 diamond 385
    jmp  losx
386
@@:
31 halyavin 387
 
388
    mov  byte [path+ebp],ah
389
    inc  dword [cursor]
390
 
391
    mov  [flick],2
392
    jmp  anti_flick
393
 
394
 
395
;----------------------------
396
;Test on mouse button
397
;-----------------------------
398
 
131 diamond 399
  button:	  ; button
31 halyavin 400
    mov eax,17
485 heavyiron 401
    mcall
31 halyavin 402
 
131 diamond 403
    cmp ah,2	       ;Edit prompt line?
404
    je	    edit_prompt
31 halyavin 405
 
406
    cmp ah,4
407
    jne no_filelist
408
 
409
mousetest:
410
    mov eax,37
411
    mov ebx,1
485 heavyiron 412
    mcall
31 halyavin 413
    mov ebx,eax
131 diamond 414
    shr eax,16		 ;x
31 halyavin 415
    and ebx,0xffff   ;y
416
 
417
    sub ebx,[listy] ;80
418
    mov [mousey],ebx
419
 
420
    mov ecx,[listx]
421
    cmp eax,ecx
131 diamond 422
    jl	    still
31 halyavin 423
    add ecx,[listxsize]
424
    cmp eax,ecx
131 diamond 425
    jg	    still
31 halyavin 426
 
427
filexadd:
428
 
429
; Enter in directory
430
file_add:
431
    mov edx,0  ;for div correct work div
432
    mov eax,dword [mousey]
433
    mov ebx,10
434
    div ebx
435
 
436
    add eax,[filecursor]
437
    jmp no_kfad
438
kfad:
439
    mov eax,[filecursor]
440
no_kfad:
134 diamond 441
    mov ebx,27
31 halyavin 442
    mul ebx
134 diamond 443
    lea ebp,[convinfo+eax]
444
    mov esi,[ebp]
445
    cmp esi,-1
993 Ataualpa 446
    jz	still
31 halyavin 447
 
448
    mov edi,paramtest ;clear param string
134 diamond 449
    mov ecx,1024/4
450
    xor eax,eax
451
    rep stosd
31 halyavin 452
 
993 Ataualpa 453
	mov	edi, path
454
	mov	ecx, 1024
455
	repnz	scasb
456
	dec	edi
457
	cmp	[ebp+15], dword 'FOL '
458
	jnz	openf
134 diamond 459
; open directory - append its name to path
993 Ataualpa 460
	cmp	ecx, 2
461
	jb	still
462
	push	edi
463
	mov	al, '/'
464
	stosb
465
	dec	ecx
134 diamond 466
@@:
993 Ataualpa 467
	lodsb
468
	stosb
469
	test	al, al
470
	jz	@f
471
	dec	ecx
472
	jnz	@b
134 diamond 473
; name is too long - do not do anything
993 Ataualpa 474
	pop	edi
475
	xor	eax, eax
476
	mov	ecx, path+1024
477
	sub	ecx, edi
478
	rep	stosb
479
	jmp	still
134 diamond 480
@@:
993 Ataualpa 481
	sub	edi, path+1
482
	mov	[cursor], edi
483
	pop	edi
134 diamond 484
; name appended, now read new directory
31 halyavin 485
    mov [filecursor],0
486
 
487
    call read_directory
488
;;    call convertation
489
    call draw_window
134 diamond 490
    jmp still
31 halyavin 491
 
492
;Savetest
493
savetest:
494
    cmp byte [dlg_type],'S'
134 diamond 495
    jne still
496
; always force open file - this is better
497
; because there exists files without extension and folders with extension
993 Ataualpa 498
	jmp	openf
134 diamond 499
;    mov ecx,100
500
;savetestloop:
501
;    cmp [path+ecx],byte 0
993 Ataualpa 502
;    je     next_byte
134 diamond 503
;    cmp [path+ecx],byte 32
993 Ataualpa 504
;    je     next_byte
134 diamond 505
;    cmp [path+ecx],byte '.'
993 Ataualpa 506
;    je     openf  ;it's file
134 diamond 507
;;    cmp [path+ecx],byte '/'
508
;;    je  no_save  ;it's dir
509
;next_byte:
510
;    dec ecx
511
;    jnz savetestloop
512
;    jmp still
31 halyavin 513
 
514
;Open/Run file
515
 
516
openf:
993 Ataualpa 517
	push	esi edi
518
	mov	esi, path
519
	mov	edi, paramtest
520
	mov	ecx, 1024/4
521
	rep	movsd
522
	pop	edi esi
523
	add	edi, paramtest-path
31 halyavin 524
 
525
    cmp dword [focus],0 ;if prompt line with focus no add file name from frame
526
    jne file_set
527
 
993 Ataualpa 528
	cmp	edi, paramtest+1022
529
	jae	still
530
	mov	al, '/'
531
	stosb
134 diamond 532
@@:
993 Ataualpa 533
	lodsb
534
	stosb
535
	test	al, al
536
	jz	file_set
537
	cmp	edi, paramtest+1024
538
	jb	@b
539
	jmp	still
134 diamond 540
 
31 halyavin 541
file_set:
542
 
543
    cmp [browser],0
544
    jne is_brow
545
 
546
    movzx eax,byte [param_area]
547
    sub eax,48
548
    imul eax,10
549
    movzx ebx,byte [param_area+1]
550
    add eax,ebx
551
    sub eax,48
552
    imul eax,10
553
    movzx ebx,byte [param_area+2]
554
    add eax,ebx
555
    sub eax,48
556
    imul eax,10
557
    movzx ebx,byte [param_area+3]
558
    add eax,ebx
559
    sub eax,48
560
 
561
    mov ecx,eax ;pid to ecx
562
    mov eax,60
563
    mov ebx,2
564
    mov edx,paramtest
134 diamond 565
    mov esi,1024
485 heavyiron 566
    mcall
31 halyavin 567
 
568
    jmp exit
569
 
570
is_brow:
571
 
572
;    cmp [convinfo+edi+26],dword 'Fvol'
573
;    je  edit
574
 
134 diamond 575
; find extension
993 Ataualpa 576
	mov	eax, paramtest+1023
134 diamond 577
@@:
993 Ataualpa 578
	dec	eax
579
	cmp	byte [eax+1], 0
580
	jz	@b
134 diamond 581
@@:
993 Ataualpa 582
	cmp	byte [eax], '/'
583
	jz	.noext
584
	cmp	byte [eax], '.'
585
	jz	.ext
586
	dec	eax
587
	cmp	eax, paramtest
588
	jae	@b
134 diamond 589
.noext:
590
; file has no extension
591
;        xor     ebx, ebx
993 Ataualpa 592
	jmp	execute
134 diamond 593
.ext:
993 Ataualpa 594
	inc	eax
134 diamond 595
; eax points to extension
993 Ataualpa 596
	cmp	byte [eax], 0
597
	jz	.noext
598
	mov	ecx, dword [eax]
599
	and	ecx, not 0x20202020
2706 leency 600
 
601
	mov	ebx, kiv
993 Ataualpa 602
	cmp	ecx, 'JPG'
603
	jz	run
604
	cmp	ecx, 'JPEG'	; note that it will select also *.JPEG*
605
	jz	run
606
	cmp	ecx, 'GIF'
607
	jz	run
2706 leency 608
	cmp	ecx, 'BMP'
609
	jz	run
610
	cmp	ecx, 'PNG'
611
	jz	run
612
	cmp	ecx, 'ICO'
613
	jz	run
614
	cmp	ecx, 'CUR'
615
	jz	run
616
 
617
 
993 Ataualpa 618
	mov	ebx, ac97
619
	cmp	ecx, 'WAV'
620
	jz	run
621
	cmp	ecx, 'MP3'
622
	jz	run
623
	cmp	ecx, 'XM'
624
	jz	run
2706 leency 625
 
993 Ataualpa 626
	mov	ebx, midamp
627
	cmp	ecx, 'MID'
628
	jz	run
629
	mov	ebx, htmlv
630
	cmp	ecx, 'HTM'
631
	jz	run
2706 leency 632
	cmp	ecx, 'HTML'
993 Ataualpa 633
	jz	run
634
	mov	ebx, rtfread
635
	cmp	ecx, 'RTF'
636
	jz	run
637
	mov	ebx, editor
638
	cmp	ecx, 'ASM'
639
	jz	run
640
	cmp	ecx, 'TXT'
641
	jz	run
642
	cmp	ecx, 'INC'
643
	jz	run
644
	cmp	ecx, 'INI'
645
	jz	run
646
	cmp	ecx, 'LOG'
647
	jz	run
648
	cmp	ecx, 'CONF'
649
	jz	run
650
	mov	ebx, life2
651
	cmp	ecx, 'LIF'
652
	jz	run
653
	mov	ebx, view3ds
654
	cmp	ecx, '3DS' and not 0x20202020
655
	jz	run
656
	jmp	still
31 halyavin 657
 
658
execute:
993 Ataualpa 659
	mov	ebx, fileinfo_start
660
	and	dword [ebx+8], 0		; no parameters
661
	mov	dword [ebx+21], paramtest	; program name
134 diamond 662
.do:
993 Ataualpa 663
	mov	eax, 70
664
	mcall
665
	jmp	still
31 halyavin 666
 
667
run:
993 Ataualpa 668
	mov	[fileinfo_name], ebx		; program name
669
	mov	ebx, fileinfo_start
670
	mov	dword [ebx+8], paramtest	; parameters
671
	jmp	execute.do
31 halyavin 672
 
673
no_filelist:
674
 
131 diamond 675
    cmp ah,5	;OPEN/SAVE button
676
    je	    kfad
31 halyavin 677
 
131 diamond 678
    cmp ah,6	;Scroll up
31 halyavin 679
    jne no_scrlup
680
    mov ebx,1
681
    jmp up
682
no_scrlup:
683
 
131 diamond 684
    cmp ah,7	;Scroll down
31 halyavin 685
    jne no_scrldown
686
    mov ebx,1
687
    jmp down
688
no_scrldown:
689
 
690
    cmp ah,8
691
    jne no_update
692
update:
693
    call read_directory
694
;    call convertation
695
;    mov [filecursor],0
696
    call draw_window
697
no_update:
698
 
699
    cmp ah,9
700
    jne no_textopen
701
textopen:
993 Ataualpa 702
	mov	eax, 27
703
	mul	[filecursor]
704
	cmp	dword [eax+convinfo+15], 'FOL '
705
	jz	still
706
	push	eax
707
	mov	esi, path
708
	mov	edi, paramtest
134 diamond 709
@@:
993 Ataualpa 710
	lodsb
711
	test	al, al
712
	jz	@f
713
	stosb
714
	jmp	@b
134 diamond 715
@@:
993 Ataualpa 716
	mov	al, '/'
717
	stosb
718
	pop	eax
719
	mov	esi, [eax+convinfo]
720
	cmp	esi, -1
721
	jz	still
134 diamond 722
@@:
993 Ataualpa 723
	lodsb
724
	stosb
725
	test	al, al
726
	jz	@f
727
	cmp	edi, paramtest+1024
728
	jb	@b
729
	jmp	still
134 diamond 730
@@:
993 Ataualpa 731
	mov	ebx, editor
732
	jmp	run
31 halyavin 733
 
734
no_textopen:
735
 
736
    cmp  ah,11
737
    jne  no_view
738
viewset:
993 Ataualpa 739
	inc	[viewmode]
740
	cmp	[viewmode], 4
741
	jb	@f
742
	mov	[viewmode], 0
134 diamond 743
@@:
31 halyavin 744
    call read_directory
745
;    call convertation
746
    mov [filecursor],0
747
    call draw_window
748
    jmp still
749
no_view:
750
 
131 diamond 751
    cmp  ah,12	      ;move back
31 halyavin 752
    jne  no_back
753
back:
993 Ataualpa 754
	mov	edi, path+1024
755
	mov	ecx, edi
134 diamond 756
@@:
993 Ataualpa 757
	dec	edi
758
	cmp	byte [edi], '/'
759
	jz	@f
760
	cmp	edi, path
761
	ja	@b
762
	jmp	still
134 diamond 763
@@:
993 Ataualpa 764
	sub	ecx, edi
765
	lea	eax, [edi-path]
766
	mov	[cursor], eax
767
	xor	eax, eax
768
	rep	stosb
31 halyavin 769
    mov [filecursor],0
770
    call read_directory
771
;    call convertation
772
    call draw_window
773
    jmp still
774
 
775
no_back:
131 diamond 776
    cmp  ah,13	      ;string up?
31 halyavin 777
    jne  no_up
131 diamond 778
    mov  ebx,1	      ;step
31 halyavin 779
up:
780
    mov  [downstop],0
781
    sub  [filecursor],ebx
782
    cmp  [filecursor],0
783
    jnl  cr_ok
784
    mov  [filecursor],0
785
cr_ok:
786
    jmp  draw_wd
787
no_up:
131 diamond 788
    cmp  ah,14		 ;string down?
31 halyavin 789
    jne  no_dn
131 diamond 790
    mov  ebx,1		 ;step
31 halyavin 791
down:
792
    cmp  [downstop],1
131 diamond 793
    je	     no_dn
31 halyavin 794
    add  [filecursor],ebx
795
    jmp  draw_wd
796
no_dn:
797
 
798
    cmp  ah,15
131 diamond 799
    jne  no_copyclip	;copy to clipboard
31 halyavin 800
copy_to_clip:
993 Ataualpa 801
	mov	eax, 27
802
	mul	[filecursor]
803
	cmp	dword [convinfo+eax+15], 'FOL '
804
	jz	still
805
	push	eax
806
	mov	esi, path
807
	mov	edi, paramtest
134 diamond 808
@@:
993 Ataualpa 809
	lodsb
810
	test	al, al
811
	jz	@f
812
	stosb
813
	jmp	@b
134 diamond 814
@@:
993 Ataualpa 815
	pop	eax
816
	mov	esi, [convinfo+eax]
817
	cmp	esi, -1
818
	jz	still
819
	mov	al, '/'
820
	stosb
134 diamond 821
@@:
993 Ataualpa 822
	lodsb
823
	stosb
824
	test	al, al
825
	jz	@f
826
	cmp	edi, paramtest+1024
827
	jb	@b
828
	jmp	still
134 diamond 829
@@:
993 Ataualpa 830
	sub	edi, paramtest+1
831
	mov	ebx, clipfile_info
832
	mov	byte [ebx], 2
833
	mov	[ebx+12], edi
834
	mov	eax, 70
835
	mcall
836
	jmp	still
31 halyavin 837
no_copyclip:
838
 
839
    cmp ah,16
840
    jne no_clippaste
841
paste_from_clip:
993 Ataualpa 842
	mov	ebx, clipfile_info
843
	mov	byte [ebx], 0
844
	mov	dword [ebx+12], 1023
845
	mov	eax, 70
846
	mcall
847
	cmp	ebx, 0
848
	jle	still
849
	mov	byte [paramtest+ebx], 0
134 diamond 850
; OS allows only 256 symbols in command line
993 Ataualpa 851
	cmp	ebx, 250
852
	jae	still
134 diamond 853
; we use Pascal-style strings for /RD/1/COPYR
854
; source file
993 Ataualpa 855
	mov	edi, copyr_param
856
	mov	al, bl
857
	stosb
858
	mov	ecx, ebx
859
	mov	esi, paramtest
860
	rep	movsb
134 diamond 861
; destination path
993 Ataualpa 862
	inc	edi
863
	mov	ebp, edi
864
	mov	esi, path
134 diamond 865
@@:
993 Ataualpa 866
	cmp	edi, copyr_param+255
867
	jae	still
868
	lodsb
869
	test	al, al
870
	jz	@f
871
	stosb
872
	jmp	@b
134 diamond 873
; destination file name
874
@@:
993 Ataualpa 875
	dec	ebx
876
	jz	still
877
	cmp	byte [paramtest+ebx], '/'
878
	jnz	@b
879
	lea	esi, [paramtest+ebx]
134 diamond 880
@@:
993 Ataualpa 881
	lodsb
882
	test	al, al
883
	jz	@f
884
	stosb
885
	cmp	edi, copyr_param+255
886
	jae	still
887
	jmp	@b
134 diamond 888
@@:
993 Ataualpa 889
	mov	byte [edi], 0
890
	sub	edi, ebp
891
	mov	eax, edi
892
	mov	[ebp-1], al
134 diamond 893
; display
894
    cmp [browser], 1
31 halyavin 895
    jne no_outpath
131 diamond 896
    mov  eax,4		   ; function 4 : write text to window
897
    mov  ebx,10*65536+67     ; [x start] *65536 + [y start]
31 halyavin 898
    mov  ecx,0x00000000 ;[sc.grab_text] ; color of text RRGGBB
993 Ataualpa 899
	mov	edx, copyr_param+1
900
	movzx	esi, byte [edx-1]
485 heavyiron 901
    mcall
131 diamond 902
    mov  ebx,250*65536+67	; [x start] *65536 + [y start]
31 halyavin 903
    mov  ecx,0x00000000 ;[sc.grab_text] ; color of text RRGGBB
993 Ataualpa 904
	mov	edx, ebp
905
	mov	esi, edi
485 heavyiron 906
    mcall
31 halyavin 907
no_outpath:
908
 
134 diamond 909
; run COPYR
993 Ataualpa 910
	mov	eax, 70
911
	mov	ebx, copyr_run
912
	mcall
31 halyavin 913
    delay 50   ;wait recoed file
914
    jmp update ;still
915
no_clippaste:
916
 
131 diamond 917
    cmp ah,19		;Delete from floppy
134 diamond 918
    jne no_delt
31 halyavin 919
delete_file:
134 diamond 920
; OS now do not support file delete
993 Ataualpa 921
	jmp	still
31 halyavin 922
no_delt:
923
 
131 diamond 924
    cmp ah,20		;I - Help
925
    je	    help_scr
31 halyavin 926
 
927
    cmp ah,22
928
    jne no_headfile
929
    mov [drawhf],1
930
    call draw_window
931
    mov [drawhf],0
932
    mov [pmenu_draw],1
933
    jmp still
934
no_headfile:
935
 
936
    cmp ah,23
937
    jne no_headview
938
    mov [drawhv],1
939
    call draw_window
940
    mov [drawhv],0
941
    mov [pmenu_draw],1
942
    jmp still
943
no_headview:
944
 
945
    cmp ah,24
946
    jne no_headinfo
947
    mov [drawhi],1
948
    call draw_window
949
    mov [drawhi],0
950
    mov [pmenu_draw],1
951
    jmp still
952
no_headinfo:
953
 
954
;FILE MENU
955
    cmp ah,30
956
    je kfad
957
 
958
    cmp ah,31
131 diamond 959
    je	    copy_to_clip      ;Copy
31 halyavin 960
 
961
    cmp ah,32
131 diamond 962
    je	    paste_from_clip ;Paste
31 halyavin 963
 
964
    cmp ah,33
131 diamond 965
    je	    delete_file     ;Delte
31 halyavin 966
 
967
    cmp ah,34
131 diamond 968
    je	    textopen	;Edit in Tinypad
31 halyavin 969
 
970
    cmp ah,37
131 diamond 971
    je	    exit
31 halyavin 972
 
973
;VIEW MENU
134 diamond 974
    cmp ah,40		;Sort by name
31 halyavin 975
    jne no_sn
993 Ataualpa 976
	mov	[viewmode], 0
31 halyavin 977
    jmp update
978
no_sn:
979
 
134 diamond 980
    cmp ah,41		;Sort by extension
31 halyavin 981
    jne no_se
993 Ataualpa 982
	mov	[viewmode], 1
31 halyavin 983
    jmp update
984
no_se:
985
 
134 diamond 986
    cmp ah,42		;Sort by size
31 halyavin 987
    jne no_ss
993 Ataualpa 988
	mov	[viewmode], 2
31 halyavin 989
    jmp update
990
no_ss:
991
 
134 diamond 992
    cmp ah,43		;Sort by date
31 halyavin 993
    jne no_sd
993 Ataualpa 994
	mov	[viewmode], 3
31 halyavin 995
    jmp update
996
no_sd:
997
 
998
;HELP MENU
131 diamond 999
    cmp ah,50		;Help?
1000
    je	    help_scr
31 halyavin 1001
 
131 diamond 1002
    cmp ah,51		;Info?
1003
    je	    info_scr
31 halyavin 1004
 
131 diamond 1005
    cmp ah,1	       ; test on exit button
1006
    je	    exit
31 halyavin 1007
 
1008
    jmp still
1009
 
1010
exit:
1011
; //// Willow
131 diamond 1012
;    mov eax,58
1013
;    mov ebx,MRUfile
1014
;    mov dword[ebx+8],255
1015
;    inc dword[ebx]
485 heavyiron 1016
;    mcall
31 halyavin 1017
; //// Willow
1018
    mov eax,-1
485 heavyiron 1019
    mcall
31 halyavin 1020
 
1021
draw_wd:
1022
;    call draw_window
1023
;    jmp still
1024
    mov [flick],1
1025
    jmp anti_flick
1026
 
1027
edit_prompt:
1028
    not  [focus]
1029
    jmp  red
1030
 
1031
help_scr:
1032
    mov esi,14
1033
    mov ebp,help_text
1034
    jmp screen
1035
 
1036
info_scr:
1037
    mov esi,6
1038
    mov ebp,info_text
1039
    jmp screen
1040
 
1041
screen:
134 diamond 1042
    cmp [browser], 1 ;it's browser?
31 halyavin 1043
    jne dialogscr
1044
 
502 heavyiron 1045
    mov eax,[procinfo.box.height]
31 halyavin 1046
    sub eax,90
1047
    drawfbox 40,76,300,eax,0x00000000
502 heavyiron 1048
    mov eax,[procinfo.box.height]
31 halyavin 1049
    sub eax,92
1050
    drawfbox 41,77,298,eax,0x00ffffff
1051
    mov edi,esi ;14
1052
    mov ebx,(41+26)*65536+(77+20)
1053
    mov ecx,cl_Black
1054
    mov edx,ebp ;help_text
1055
    jmp outlab
1056
 
1057
dialogscr:
502 heavyiron 1058
    mov eax,[procinfo.box.height]
31 halyavin 1059
    sub eax,84
1060
    drawfbox 16,54,270,eax,0x00000000
502 heavyiron 1061
    mov eax,[procinfo.box.height]
31 halyavin 1062
    sub eax,86
1063
    drawfbox 17,55,268,eax,0x00ffffff
1064
    mov edi,esi ;14
1065
    mov ebx,(17+10)*65536+(55+1)
1066
    mov ecx,cl_Black
1067
    mov edx,ebp ;help_text
1068
 
131 diamond 1069
outlab:     ;out labels
31 halyavin 1070
    mov eax,4
1071
    mov esi,40
1072
helploo:
485 heavyiron 1073
    mcall
31 halyavin 1074
    add ebx,11
1075
    add edx,40
1076
    dec edi
1077
    jnz helploo
1078
 
1079
    setimg 48,84,logoinfimg
1080
 
1081
    jmp still
1082
 
134 diamond 1083
getimgproc:
1084
    pushad
1085
    mov dword [edx],esi ;xs
1086
    mov dword [edx+4],edi ;ys
1087
 
1088
    mov ebp,eax
1089
    mov eax,dword [ecx] ;getx size
1090
    push edx
1091
    push ecx
1092
    lea ecx,[eax+2*eax]
1093
 
1094
    mul ebx
1095
    add eax,ebp ;x
1096
    mov edx,ecx
1097
    lea eax,[eax+2*eax]  ;eax=offset on imsrc
1098
 
1099
    mov ebp,esi ;xs
1100
    mov ebx,edi ;ys
1101
 
1102
    pop edi
1103
    lea esi,[eax+8+edi]
1104
 
1105
    pop edi
1106
    add edi,8
1107
 
1108
    cld
1109
cyc:
993 Ataualpa 1110
	push	esi
1111
	lea	ecx, [ebp+ebp*2]
1112
	rep	movsb
1113
	pop	esi
134 diamond 1114
    add esi,edx
1115
    dec ebx
1116
    jne cyc
1117
 
1118
    popad
1119
    ret
1120
 
552 diamond 1121
iglobal
31 halyavin 1122
;HELP TEXT
1123
help_text:
1124
       ;0123456789012345678901234567890123456789
1125
    db '        ~~~~~ SYSTEM X-TREE ~~~~~       '
1126
    db '                   HELP                 '
1127
    db '                                        '
1128
    db '                                        '
1129
    db 'F2 - CHANGE SORTMODE (name,ext,size,dat)'
1130
    db 'F3 - VIEW file in tinypad               '
1131
 
1132
    db 'F5 - COPY FILE to clipboard             '
1133
    db 'F6 - PASTE FILE from clipboard          '
1134
    db 'F11- EDIT PROMPT string                 '
1135
    db 'F12- UPDATE directory sources           '
1136
    db '                                        '
1137
 
1138
    db 'Enter - input to directory              '
1139
    db 'Backspace - back to previos directory   '
1140
    db 'PageDn/PageUp, Up/Down - move cursor    '
1141
 
1142
info_text:
1143
    db '        ~~~~~ SYSTEM X-TREE ~~~~~       '
156 diamond 1144
    db '               INFO 84 Ver              '
31 halyavin 1145
    db '                                        '
1146
    db '        Create by Pavlushin Evgeni      '
134 diamond 1147
    db 'with ASCL library special for Kolibri OS'
31 halyavin 1148
    db ' www.deck4.narod.ru      waptap@mail.ru '
552 diamond 1149
endg
31 halyavin 1150
 
1151
;   *********************************************
1152
;   *******  WINDOW DEFINITIONS AND DRAW ********
1153
;   ********    FILE BROWSER / DIALOG   *********
1154
 
1155
;draw_browser_window:
1156
 
1157
draw_window:
1158
 
1159
;    mov eax,9
1160
;    mov ebx,procinfo
1161
;    mov ecx,-1
485 heavyiron 1162
;    mcall
502 heavyiron 1163
;    mov  eax,[procinfo.box.width]
31 halyavin 1164
;    cmp  eax,66
1165
;    jg  temp12345
1166
;    ret
1167
; temp12345:
1168
 
2706 leency 1169
    mcall 48, 3, sc, sizeof.system_colors
1170
 
31 halyavin 1171
    mov  eax,[sc.work_button]
1172
    mov  [b_color],eax
1173
 
2706 leency 1174
    mcall 12, 1
31 halyavin 1175
 
1176
;Window
1177
 
131 diamond 1178
    xor  eax,eax       ; function 0 : define and draw window
31 halyavin 1179
 
134 diamond 1180
    cmp  [browser], 1 ;it's browser
31 halyavin 1181
    jne  nob1
131 diamond 1182
    mov  ebx,140*65536+400     ; [x start] *65536 + [x size]
1183
    mov  ecx,160*65536+280     ; [y start] *65536 + [y size]
31 halyavin 1184
    jmp  isb1
1185
nob1:
131 diamond 1186
    mov  ebx,140*65536+320     ; [x start] *65536 + [x size]
1187
    mov  ecx,260*65536+240     ; [y start] *65536 + [y size]
31 halyavin 1188
isb1:
1189
;    mov  edx,[sc.work]             ; color of work area RRGGBB
2706 leency 1190
    or	     edx,0x13ffffff
485 heavyiron 1191
    mcall
2706 leency 1192
 
1193
    mcall 12, 2      ; end of window redraw
31 halyavin 1194
 
1195
;Get proc info
1196
    mov eax,9
1197
    mov ebx,procinfo
1198
    mov ecx,-1
485 heavyiron 1199
    mcall
31 halyavin 1200
 
502 heavyiron 1201
    mov  eax,[procinfo.box.width]
31 halyavin 1202
    cmp  eax,66
134 diamond 1203
    jg	 @f
1204
.ret:
31 halyavin 1205
    ret
134 diamond 1206
 @@:
502 heavyiron 1207
    cmp  [procinfo.box.height], 0x70
993 Ataualpa 1208
    jl	.ret
31 halyavin 1209
 
134 diamond 1210
    cmp  [browser], 1 ;it's browser
31 halyavin 1211
    jne  nob9
1212
    mov  [listx],120
502 heavyiron 1213
;    mov  eax,[procinfo.box.width]
134 diamond 1214
    sub  eax,127;[listx]+7
1215
    cmp  eax,10
993 Ataualpa 1216
    jl	 .ret
31 halyavin 1217
    mov  [listxsize],eax
1218
    mov  [listy],73
502 heavyiron 1219
    mov  eax,[procinfo.box.height]
134 diamond 1220
    sub  eax,73+7;[listy]+7
31 halyavin 1221
    mov  [listysize],eax
1222
    jmp isb9
1223
nob9:
1224
    mov  [listx],10
502 heavyiron 1225
;    mov  eax,[procinfo.box.width]
134 diamond 1226
    sub  eax,17 ;[listx]+7
31 halyavin 1227
    mov  [listxsize],eax
1228
    mov  [listy],54
502 heavyiron 1229
    mov  eax,[procinfo.box.height]
134 diamond 1230
    sub  eax,54+34;[listy]+34
31 halyavin 1231
    mov  [listysize],eax
1232
isb9:
1233
 
1234
 
1235
;Draw only browser components
134 diamond 1236
    cmp  [browser], 1 ;it's browser
31 halyavin 1237
    jne  nob2
1238
 
131 diamond 1239
    mov  eax,[sc.grab_text]	 ; color of text RRGGBB
1240
    or	     eax,0x10000000
2706 leency 1241
	mcall 71,1,title_browser
31 halyavin 1242
 
1243
;Draw buttons headers
1244
    mov  eax,8
1245
    mov  ebx,8*65536+(6*8-1) ;start pos x
1246
    mov  ecx,23*65536+10      ;start pos y
1247
    mov  edx,22;+1000000000000000000000000000000b  ;spoke butt
131 diamond 1248
    mov  edi,3		  ;draw 13 button's
31 halyavin 1249
    mov  esi,0x00339933
485 heavyiron 1250
    mcall
31 halyavin 1251
    dec edi
1252
nexthbut:
1253
    add  ebx,(6*8)*65536
1254
    inc  edx
485 heavyiron 1255
    mcall
31 halyavin 1256
    dec  edi
1257
    jnz  nexthbut
1258
 
1259
;File STRING
134 diamond 1260
    glabel 8,25,'  FILE    VIEW    INFO  ',  cl_White ;Black
31 halyavin 1261
 
1262
;BlackLine
502 heavyiron 1263
    mov eax,[procinfo.box.width]
31 halyavin 1264
    sub eax,10
1265
    drawfbox 5,35, eax, 1, cl_Black
1266
 
1267
;BlackLine2
502 heavyiron 1268
    mov eax,[procinfo.box.width]
31 halyavin 1269
    sub eax,10
1270
    drawfbox 5,68, eax, 1, cl_Black
1271
 
1272
;BlackLine2 vertical
502 heavyiron 1273
;    mov eax,[procinfo.box.height]
31 halyavin 1274
;    sub eax,69+4
1275
;    drawfbox 115, 69, 1, eax, cl_Black
1276
 
1277
;Set logo img
1278
    setimg 34,88,logoinfimg
131 diamond 1279
    glabel 20,165,'SYSTEM X-TREE',cl_Black
31 halyavin 1280
    add  ebx,10
134 diamond 1281
    glabel ,,'FOR KolibriOS',
31 halyavin 1282
 
1283
    add  ebx,9*65536+20
131 diamond 1284
    glabel ,,'welcome to',cl_Green
31 halyavin 1285
    add  ebx,-15*65536+10
134 diamond 1286
    glabel ,,'www.kolibrios.org',cl_Green
31 halyavin 1287
 
1288
 
1289
;Draw head->file buttons
1290
    cmp [drawhf],1
1291
    jne  no_drawhf
1292
    mov  ebx,8*65536+6*12 ;start pos x
1293
    mov  ecx,35*65536+10      ;start pos y
1294
    mov  edx,30  ;spoke butt
131 diamond 1295
    mov  edi,8		  ;draw 4 button's
31 halyavin 1296
    mov  esi,cl_Grey
1297
    call menubutton
1298
no_drawhf:
1299
 
1300
;Draw head->view buttons
1301
    cmp [drawhv],1
1302
    jne  no_drawhv
1303
    mov  ebx,(8+6*8)*65536+6*12 ;start pos x
1304
    mov  ecx,35*65536+10      ;start pos y
1305
    mov  edx,40  ;spoke butt
134 diamond 1306
    mov  edi,4		  ;draw 4 button's
31 halyavin 1307
    mov  esi,cl_Grey
1308
    call menubutton
1309
no_drawhv:
1310
 
1311
;Draw head->info buttons
1312
    cmp [drawhi],1
1313
    jne  no_drawhi
1314
    mov  ebx,(8+12*8)*65536+6*12 ;start pos x
1315
    mov  ecx,35*65536+10      ;start pos y
1316
    mov  edx,50  ;spoke butt
131 diamond 1317
    mov  edi,2		  ;draw 2 button's
31 halyavin 1318
    mov  esi,cl_Grey
1319
    call menubutton
1320
no_drawhi:
1321
 
1322
nob2:
1323
 
1324
;Draw buttons instruments
1325
    mov  eax,8
134 diamond 1326
    cmp  [browser], 1 ;it's browser
31 halyavin 1327
    jne  nob3
1328
    mov  ebx,10*65536+16+5 ;start pos x
1329
    mov  ecx,37*65536+15      ;start pos y
1330
    jmp isb3
1331
nob3:
1332
    mov  ebx,16*65536+16+5 ;start pos x
1333
    mov  ecx,29*65536+15      ;start pos y
1334
isb3:
1335
    mov  edx,8;+1000000000000000000000000000000b  ;spoke butt
131 diamond 1336
    mov  edi,13        ;draw 13 button's
31 halyavin 1337
    mov  esi,cl_Grey
485 heavyiron 1338
    mcall
31 halyavin 1339
    dec edi
1340
nextbut:
1341
    add  ebx,(16+6)*65536
1342
    inc  edx
485 heavyiron 1343
    mcall
31 halyavin 1344
    dec  edi
1345
    jnz  nextbut
1346
 
1347
 
134 diamond 1348
    cmp  [browser], 1 ;it's browser
31 halyavin 1349
    jne  nob4
1350
;But img browser
1351
    setimg 10,37,butimg
1352
;left logo
502 heavyiron 1353
    add eax,[procinfo.box.width]
31 halyavin 1354
    sub eax,80
1355
    mov [temp],eax
1356
    setimg [temp],37,logoimg
1357
    jmp isb4
1358
nob4:
1359
;But img dialog
1360
    setimg 16,29,butimg
1361
isb4:
1362
 
134 diamond 1363
    cmp  [browser], 1 ;it's browser
31 halyavin 1364
    jne  nob5
1365
 
1366
    mov [urlx],48
1367
    mov [urly],55
502 heavyiron 1368
    mov eax,[procinfo.box.width]
31 halyavin 1369
    sub eax,48+10
1370
    mov [urlxsize],eax
1371
    mov [urlysize],12
1372
 
131 diamond 1373
    glabel 20,57,"URL:",cl_Black
31 halyavin 1374
 
1375
;Out view mode info
993 Ataualpa 1376
	movzx	edx, [viewmode]
1377
	shl	edx, 4
31 halyavin 1378
    mov eax,4
1379
    mov ebx,180*65536+25
1380
    mov ecx,cl_Black
1381
    add edx,modetext
1382
    mov esi,16
485 heavyiron 1383
    mcall
31 halyavin 1384
 
1385
;List size
1386
    outcount [listsize],294,25,cl_Black,4*65536
1387
    jmp isb5
1388
 
552 diamond 1389
iglobal
2706 leency 1390
 
31 halyavin 1391
but_dlg:  db 'OPEN'
2706 leency 1392
          db 'SAVE'
552 diamond 1393
endg
31 halyavin 1394
 
1395
nob5:
1396
 
1397
    mov [urlx],10
502 heavyiron 1398
    mov eax,[procinfo.box.height]
31 halyavin 1399
    sub eax,24
1400
    mov [urly],eax
502 heavyiron 1401
    mov eax,[procinfo.box.width]
31 halyavin 1402
    sub eax,80
1403
    mov [urlxsize],eax
1404
    mov [urlysize],12
1405
 
131 diamond 1406
    cmp byte [dlg_type],'O'    ;if byte O - is Open dialog
31 halyavin 1407
    jne no_openh
2706 leency 1408
    mcall 71,1,open_dlg	      ;draw in head OPEN FILE
1409
    jmp no_saveh
31 halyavin 1410
no_openh:
131 diamond 1411
    cmp byte [dlg_type],'S'    ;if byte S - is Save dialog
31 halyavin 1412
    jne no_saveh
2706 leency 1413
    mcall 71,1,save_dlg	      ;draw in head SAVE FILE
1414
 
31 halyavin 1415
no_saveh:
1416
 
1417
 
1418
;Draw OPEN\SAVE button
1419
    mov ebx,0*65536+50
1420
    mov ecx,0*65536+12
502 heavyiron 1421
    mov eax,[procinfo.box.width]
31 halyavin 1422
    sub eax,63
1423
    shl eax,16
1424
    add ebx,eax
502 heavyiron 1425
    mov eax,[procinfo.box.height]
31 halyavin 1426
    sub eax,25
1427
    shl eax,16
1428
    add ecx,eax
1429
    mov  eax,8
1430
    mov  edx,5 ;button ID
1431
    mov  esi,0x006699aa  ;gradient!!!
485 heavyiron 1432
    mcall
31 halyavin 1433
 
1434
; label OPEN or SAVE
502 heavyiron 1435
    mov ebx,[procinfo.box.width]
31 halyavin 1436
    sub ebx,48
502 heavyiron 1437
    mov eax,[procinfo.box.height]
31 halyavin 1438
    sub eax,22
1439
    shl ebx,16
1440
    add ebx,eax
1441
 
131 diamond 1442
    cmp byte [dlg_type],'O'    ;if byte O - is Open dialog
31 halyavin 1443
    jne no_openb
131 diamond 1444
    mov edx,but_dlg	   ;draw in head OPEN FILE
31 halyavin 1445
    jmp out_labx
1446
no_openb:
131 diamond 1447
    cmp byte [dlg_type],'S'    ;if byte S - is Save dialog
31 halyavin 1448
    jne no_saveb
131 diamond 1449
    mov edx,but_dlg+4	       ;draw in head SAVE FILE
31 halyavin 1450
out_labx:
1451
    mov ecx,cl_White
1452
    mov esi,4
1453
    mov eax,4
485 heavyiron 1454
    mcall
31 halyavin 1455
no_saveb:
1456
 
1457
isb5:
1458
 
1459
anti_flick:
1460
 
1461
    cmp [flick],2
1462
    je draw_url
1463
    cmp [flick],0
1464
    jne no_flick_url
1465
 
1466
;***************************
1467
;    DRAW URL LINE
1468
;***************************
1469
draw_url:
1470
 
1471
;Draw URL focus button
1472
    mov ebx,[urlx]
1473
    shl ebx,16
1474
    add ebx,[urlxsize]
1475
    mov ecx,[urly]
1476
    shl ecx,16
1477
    add ecx,[urlysize]
1478
    dec ebx
1479
    dec ecx
1480
    mov  eax,8
1481
    mov  edx,2 ;button ID
1482
    mov  esi,0x00aaaaaa  ;gradient!!!
485 heavyiron 1483
    mcall
31 halyavin 1484
 
1485
;Draw URL String
1486
    mov eax,13
1487
    mov edx,cl_Black
485 heavyiron 1488
    mcall
31 halyavin 1489
    add ebx,1*65536-2+1
1490
    add ecx,1*65536-2+1
1491
    mov edx,cl_White
485 heavyiron 1492
    mcall
31 halyavin 1493
 
1494
;Draw URL Cursor
1495
    mov eax,6
1496
    mul [cursor]
1497
    mov ebx,[urlx]
1498
    add ebx,eax
1499
    shl ebx,16
1500
    add ebx,2*65536+1
1501
    mov ecx,[urly]
1502
    shl ecx,16
1503
    add ecx,[urlysize]
1504
    add ecx,2*65536-4
1505
    mov eax,13
1506
    mov edx,cl_Black
485 heavyiron 1507
    mcall
31 halyavin 1508
 
1509
; OUT TEXT
131 diamond 1510
    mov eax,[urlxsize]	    ;calculating text leight
31 halyavin 1511
    sub eax,8
1512
    mov ebx,6
1513
    div ebx
1514
    mov esi,eax
1515
 
1516
    mov  ebx,[urlx]
1517
    shl  ebx,16
1518
    add  ebx,[urly]
1519
    add  ebx,3*65536+2
131 diamond 1520
    mov  eax,4		   ; function 4 : write text to window
31 halyavin 1521
    mov  ecx,0x00000000 ;[sc.grab_text] ; color of text RRGGBB
131 diamond 1522
    mov  edx,path	 ; pointer to text beginning
485 heavyiron 1523
    mcall
31 halyavin 1524
 
1525
    cmp  [flick],2
1526
    jne  no_flick_url
1527
    mov  [flick],0
1528
    jmp  still
1529
no_flick_url:
1530
 
1531
 
1532
;***************************
1533
;    DRAW FILE LIST
1534
;***************************
1535
 
1536
;Draw Scroll Line
1537
    mov eax,13
1538
 
1539
    mov ebx,[listx]
1540
    add ebx,[listxsize]
1541
    sub ebx,[scrollsize]
1542
    shl ebx,16
1543
    add ebx,dword [scrollsize]
1544
    mov ecx,[listy]
134 diamond 1545
    add ecx,scrollbutsize
31 halyavin 1546
    shl ecx,16
1547
    add ecx,[listysize]
134 diamond 1548
    sub ecx,scrollbutsize*2
31 halyavin 1549
    mov edx,[scrollcolor] ;0x00006600
485 heavyiron 1550
    mcall
31 halyavin 1551
 
1552
;Draw Scroll Box
1553
    mov  edx,0
1554
    mov  eax,[listysize]
1555
    sub  eax,2
1556
    mov  ebx,dword 10
1557
    div  ebx
1558
 
1559
    mov ebx,eax
131 diamond 1560
    cmp ebx,[listsize]	    ;filelistsize in ebx
134 diamond 1561
    jae    notusescroll
31 halyavin 1562
;usescroll
134 diamond 1563
; calculate scroll size
993 Ataualpa 1564
	mov	eax, [listysize]
1565
	sub	eax, 2*scrollbutsize
1566
	push	eax
1567
	mul	ebx
1568
	div	[listsize]
1569
	cmp	eax, 5
1570
	jae	@f
1571
	mov	al, 5
134 diamond 1572
@@:
993 Ataualpa 1573
	mov	[scroll_height], eax
134 diamond 1574
; calculate scroll pos
993 Ataualpa 1575
	sub	[esp], eax
1576
	mov	eax, [listsize]
1577
	sub	eax, ebx
1578
	mov	ecx, eax
1579
	cmp	eax, [filecursor]
1580
	jb	@f
1581
	mov	eax, [filecursor]
134 diamond 1582
@@:
993 Ataualpa 1583
	mul	dword [esp]
1584
	div	ecx
1585
	mov	[scroll_pos], eax
1586
	pop	ecx
134 diamond 1587
; draw
993 Ataualpa 1588
	lea	ecx, [eax+scrollbutsize]
1589
	add	ecx, [listy]
1590
	shl	ecx, 16
1591
	mov	cx, word [scroll_height]
1592
	mov	eax, 13
1593
	mov	ebx, [listx]
1594
	add	ebx, [listxsize]
1595
	sub	ebx, [scrollsize]
1596
	shl	ebx, 16
1597
	mov	bx, word [scrollsize]
1598
	mov	edx, [scrollboxcol]
1599
	mcall
31 halyavin 1600
notusescroll:
1601
 
1602
 
1603
;Draw list button for get file name
1604
    mov  ebx,[listx]
1605
    shl  ebx,16
1606
    add  ebx,[listxsize]
131 diamond 1607
    sub  ebx,15      ;right free zone
31 halyavin 1608
    sub  ebx,[scrollsize]
1609
    mov  ecx,[listy]
1610
    shl  ecx,16
1611
    add  ecx,[listysize]
1612
 
1613
    mov  eax,8
2706 leency 1614
    mov  edx,4+0x60000000
485 heavyiron 1615
    mcall
31 halyavin 1616
 
1617
    add  ebx,15
1618
    mov  eax,13
2706 leency 1619
	sub  ebx,[scrollsize]   ;leency
31 halyavin 1620
    mov  edx,[listcolor] ;ffffff
485 heavyiron 1621
    mcall
31 halyavin 1622
 
1623
;Draw up/down buttons
1624
    mov  ebx,[listx]
1625
    add  ebx,[listxsize]
1626
    sub  ebx,[scrollsize]
1627
    shl  ebx,16
1628
    add  ebx,[scrollsize]
1629
    mov  ecx,[listy]
1630
    shl  ecx,16
134 diamond 1631
    add  ecx,scrollbutsize-1
31 halyavin 1632
    mov  eax,8
1633
    mov  edx,6+1000000000000000000000000000000b  ;spoke butt
485 heavyiron 1634
    mcall
31 halyavin 1635
 
1636
    inc  ecx
1637
    mov  eax,13
2706 leency 1638
    mov  edx,[scrollbutcol]
485 heavyiron 1639
    mcall
31 halyavin 1640
 
1641
; Draw image on up button
1642
    pushad
1643
    shr  ebx,16
1644
    mov  edx,ebx
1645
    shl  edx,16
1646
    shr  ecx,16
1647
    add  edx,ecx
1648
    mov  ecx,8*65536+9
1649
    mov  ebx,upsb+8
1650
    mov  eax,7
485 heavyiron 1651
    mcall
31 halyavin 1652
    popad
1653
 
1654
 
131 diamond 1655
    dec  ecx	 ;correction
31 halyavin 1656
    mov  edx,7+1000000000000000000000000000000b  ;spoke butt
1657
    mov  eax,[listysize]
134 diamond 1658
    sub  eax,scrollbutsize
31 halyavin 1659
    shl  eax,16
1660
    add  ecx,eax
1661
 
1662
    mov  eax,8
485 heavyiron 1663
    mcall
31 halyavin 1664
 
1665
    inc  ecx
1666
    mov  eax,13
1667
    mov  edx,[scrollbutcol] ;ffffff
485 heavyiron 1668
    mcall
31 halyavin 1669
 
1670
; Draw image on down button
1671
    pushad
1672
    shr  ebx,16
1673
    mov  edx,ebx
1674
    shl  edx,16
1675
    shr  ecx,16
1676
    add  edx,ecx
1677
    mov  ecx,8*65536+9
1678
    mov  ebx,dnsb+8
1679
    mov  eax,7
485 heavyiron 1680
    mcall
31 halyavin 1681
    popad
1682
 
1683
 
1684
; Draw text in file list
1685
 
134 diamond 1686
;    mov  eax,[listxsize]
1687
;    sub  eax,40*6  ;leight of string
1688
;    shr  eax,1
1689
;    add  eax,[listx]
993 Ataualpa 1690
	mov	eax, [listx]
1691
	add	eax, 12+4 ; for icons
31 halyavin 1692
    shl  eax,16
1693
    add  eax,[listy]
1694
    add  eax,2
1695
 
1696
    mov  [filelistxy],eax ;dword 19*65536+58
1697
 
1698
    mov  edx,0
1699
    mov  eax,[listysize]
1700
    sub  eax,2
1701
    mov  ebx,dword 10
1702
    div  ebx
1703
    mov  [filelistsize],eax  ;dword 40
1704
 
1705
; OUT FILE DATA
131 diamond 1706
    mov  eax,[filecursor]     ;calc cursor position
134 diamond 1707
    mov  ebx,27
31 halyavin 1708
    mul  ebx
1709
 
1710
;OUT TEXT
1711
    mov  ebp,4096 ; 16             ;out strings process
1712
    sub  ebp,[filecursor]
1713
    mov  edx,convinfo ;fileinfo+11
1714
    add  edx,eax
1715
    mov  ebx,dword [filelistxy]
1716
loo:
993 Ataualpa 1717
	cmp	dword [edx], -1
1718
	jz	noout
31 halyavin 1719
    mov  ecx,0x00888888        ;for another file's color white
134 diamond 1720
    cmp  [edx+15],dword 'FOL ' ;folder yellow
31 halyavin 1721
    jne  nb
1722
    mov  ecx,0x00006666
1723
    jmp cset1
1724
nb:
993 Ataualpa 1725
	mov	eax, [edx]
1726
	xor	edi, edi
134 diamond 1727
; find extension and set color
1728
@@:
993 Ataualpa 1729
	inc	eax
1730
	cmp	byte [eax-1], 0
1731
	jz	@f
1732
	cmp	byte [eax-1], '.'
1733
	jnz	@b
1734
	mov	edi, eax
1735
	jmp	@b
134 diamond 1736
@@:
993 Ataualpa 1737
	test	edi, edi
1738
	jz	@f
1739
	mov	edi, [edi]
1740
	and	edi, not 0x20202020	; toupper
134 diamond 1741
@@:
31 halyavin 1742
;Color set
134 diamond 1743
; text's blue
993 Ataualpa 1744
	mov	ecx, 0x00446666
1745
	cmp	edi, 'TXT'
1746
	jz	cset
1747
	cmp	edi, 'INC'
1748
	jz	cset
1749
	cmp	edi, 'ASM'
1750
	jz	cset
1751
	cmp	edi, 'RTF'
1752
	jz	cset
134 diamond 1753
; picture's pure
993 Ataualpa 1754
	mov	ecx, 0x00226688
1755
	cmp	edi, 'BMP'
1756
	jz	cset
1757
	cmp	edi, 'JPG'
1758
	jz	cset
1759
	cmp	edi, 'JPEG'
1760
	jz	cset
1761
	cmp	edi, 'GIF'
1762
	jz	cset
1763
	cmp	edi, 'PNG'
1764
	jz	cset
1765
	cmp	edi, 'WAV'
1766
	jz	cset
1767
	cmp	edi, 'MID'
1768
	jz	cset
134 diamond 1769
; execute's green
993 Ataualpa 1770
	mov	ecx, 0x00008866
1771
	test	edi, edi
1772
	jz	cset
134 diamond 1773
; for another file's color white
993 Ataualpa 1774
	mov	ecx, 0x00888888
31 halyavin 1775
cset:
1776
 
1777
cset1:
134 diamond 1778
    push edx
1779
    mov  edx,[edx]
993 Ataualpa 1780
	push	ebx edx
1781
	mov	eax, [listxsize]
1782
	sub	eax, [scrollsize]
1783
	sub	eax, 12+4
1784
	xor	edx, edx
1785
	mov	ebx, 6
1786
	div	ebx
1787
	pop	edx ebx
1788
	sub	eax, 25
1789
	xor	esi, esi
134 diamond 1790
@@:
993 Ataualpa 1791
	cmp	byte [edx+esi], 0
1792
	jz	@f
1793
	inc	esi
1794
	cmp	esi, eax
1795
	jbe	@b
1796
	dec	esi
134 diamond 1797
@@:
993 Ataualpa 1798
	push	eax
31 halyavin 1799
    mov  eax,4
485 heavyiron 1800
    mcall
993 Ataualpa 1801
	cmp	byte [edx+esi], 0
1802
	jz	@f
1803
	pushad
1804
	mov	edx, more_char
1805
	mov	eax, esi
1806
	imul	eax, 6*65536
1807
	add	ebx, eax
1808
	mov	esi, 1
1809
	mov	eax, 4
1810
	mcall
1811
	popad
134 diamond 1812
@@:
993 Ataualpa 1813
	pop	eax
134 diamond 1814
    pop  edx
1815
    push ebx edx
993 Ataualpa 1816
	inc	eax
1817
	imul	eax, 6*65536
1818
	add	ebx, eax
134 diamond 1819
    add  edx,4
1820
    mov  esi,23
1821
    mov  eax,4
485 heavyiron 1822
    mcall
134 diamond 1823
    pop  edx ebx
31 halyavin 1824
 
134 diamond 1825
    pushad
1826
    cmp  [edx+15],dword 'Fvol' ;volume label
31 halyavin 1827
    jne  no_volico
1828
    push hdico+8
1829
    jmp out_ico
1830
no_volico:
134 diamond 1831
    cmp  [edx+15],dword 'FOL '
31 halyavin 1832
    jne  no_folico
134 diamond 1833
    cmp  [edx+4],dword 'HARD'
31 halyavin 1834
    jne  no_hdico
1835
    push hdico+8
1836
    jmp out_ico
1837
no_hdico:
134 diamond 1838
    cmp  [edx+4],dword 'RAMD'
31 halyavin 1839
    jne  no_rdico
1840
    push rdico+8
1841
    jmp out_ico
1842
no_rdico:
134 diamond 1843
    cmp  [edx+4],dword 'FLOP'
131 diamond 1844
    jne  no_fdico
1845
    push rdico+8
1846
    jmp out_ico
1847
no_fdico:
156 diamond 1848
    cmp  [edx+4],dword 'CD-R'
1849
    jne  no_cdico
1850
    push cdico+8
1851
    jmp out_ico
1852
no_cdico:
31 halyavin 1853
    push folico+8
1854
    jmp out_ico
1855
no_folico:
134 diamond 1856
    cmp  edi,dword 'BMP'
131 diamond 1857
    je	     is_imgico
134 diamond 1858
    cmp  edi,dword 'JPG'
131 diamond 1859
    je	     is_imgico
134 diamond 1860
    cmp  edi,dword 'JPEG'
131 diamond 1861
    je	     is_imgico
134 diamond 1862
    cmp  edi,dword 'GIF'
131 diamond 1863
    je	     is_imgico
134 diamond 1864
    cmp  edi,dword 'PNG'
2706 leency 1865
    je	     is_imgico
1866
    cmp  edi,dword 'ICO'
1867
    je	     is_imgico
1868
 
134 diamond 1869
    cmp  edi,dword 'WAV'
131 diamond 1870
    je	     is_imgico
134 diamond 1871
    cmp  edi,dword 'MID'
131 diamond 1872
    je	     is_imgico
993 Ataualpa 1873
    cmp  edi,dword 'MP3'
1874
    je	     is_imgico
1875
    cmp  edi,dword 'XM'
1876
    je	     is_imgico
31 halyavin 1877
    jmp  no_imgico
1878
is_imgico:
1879
    push imgico+8
1880
    jmp out_ico
1881
no_imgico:
134 diamond 1882
    cmp  edi,dword 'ASM'
131 diamond 1883
    je	     is_asmincico
134 diamond 1884
    cmp  edi,dword 'INC'
131 diamond 1885
    je	     is_asmincico
993 Ataualpa 1886
    cmp  edi,dword 'INI'
1887
    je	     is_asmincico
1888
    cmp  edi,dword 'CONF'
1889
    je	     is_asmincico
31 halyavin 1890
    jmp  no_asmincico
1891
is_asmincico:
1892
    push asmincico+8
1893
    jmp out_ico
1894
no_asmincico:
134 diamond 1895
    cmp  edi,dword 'RTF'
131 diamond 1896
    je	 @f
134 diamond 1897
    cmp  edi,dword 'TXT'
31 halyavin 1898
    jne  no_txtico
993 Ataualpa 1899
    cmp  edi,dword 'LOG'
1900
    jne  no_txtico
131 diamond 1901
 @@:
31 halyavin 1902
    push txtico+8
1903
    jmp out_ico
1904
no_txtico:
134 diamond 1905
    test edi,edi
31 halyavin 1906
    jne  no_execico
1907
    push execico+8
1908
    jmp out_ico
1909
no_execico:
134 diamond 1910
    cmp  [edx+15],dword 'DAT '
31 halyavin 1911
    jne  no_datico
1912
    push datico+8
1913
    jmp out_ico
1914
no_datico:
134 diamond 1915
    cmp  [edx+15],dword 'DEL '
31 halyavin 1916
    jne  no_out_ico
1917
    push delico+8
1918
    jmp out_ico
1919
out_ico:
1920
 
1921
    mov  edx,ebx
1922
    sub  edx,14*65536+1
1923
    mov  ecx,12*65536+9
1924
;    mov  ebx,upsb+8
1925
    pop  ebx
1926
    mov  eax,7
485 heavyiron 1927
    mcall
31 halyavin 1928
no_out_ico:
1929
    popad
1930
 
1931
 
1932
    add  ebx,10
1933
noout:
134 diamond 1934
    add  edx,27
31 halyavin 1935
 
1936
    dec  [filelistsize]
134 diamond 1937
    jz	     extloo
31 halyavin 1938
 
1939
    dec  ebp
1940
    jnz  loo
1941
dext:
1942
    mov [downstop],1
1943
 
1944
extloo:
1945
 
134 diamond 1946
    cmp  [browser], 1 ;it's browser
31 halyavin 1947
    jne  nob8
1948
 
1949
;Draw text for head->file buttons
1950
    cmp [drawhf],1
1951
    jne  no_drawhftext
1952
    drawfbox 8,35,(6*12)+1,11*8,0x00000000
1953
    drawfbox 9,36,(6*12)-1,(11*8)-2,0x00ffffff
1954
 
1955
    mov edi,8
1956
    mov ebx,9*65536+37
1957
    mov ecx,cl_Black
1958
    mov edx,file_text_label
1959
    call drawmenu
1960
 
552 diamond 1961
iglobal
31 halyavin 1962
file_text_label:
131 diamond 1963
    db	     '    Open    '
1964
    db	     '    Copy    '
1965
    db	     '    Paste   '
1966
    db	     '   Delete   '
1967
    db	     '   Tinypad  '
1968
    db	     '    Edit    '
1969
    db	     '            '
1970
    db	     '    Exit    '
552 diamond 1971
endg
31 halyavin 1972
 
1973
no_drawhftext:
1974
 
1975
;Draw text for head->view buttons
1976
    cmp [drawhv],1
1977
    jne  no_drawhvtext
134 diamond 1978
    drawfbox (8+6*8),35,(6*12)+1,(11*4),0x00000000
1979
    drawfbox (9+6*8),36,(6*12)-1,(11*4)-2,0x00ffffff
31 halyavin 1980
 
134 diamond 1981
    mov edi,4
31 halyavin 1982
    mov ebx,(9+6*8)*65536+37
1983
    mov ecx,cl_Black
1984
    mov edx,view_text_label
1985
    call drawmenu
1986
 
552 diamond 1987
iglobal
31 halyavin 1988
view_text_label:
131 diamond 1989
    db	     '  Name sort '
1990
    db	     '  Ext. sort '
1991
    db	     '  Size sort '
1992
    db	     '  Date sort '
552 diamond 1993
endg
31 halyavin 1994
 
1995
no_drawhvtext:
1996
 
1997
;Draw text for head->info buttons
1998
    cmp [drawhi],1
1999
    jne  no_drawhitext
2000
    drawfbox (8+12*8),35,(6*12)+1,(11*2),0x00000000
2001
    drawfbox (9+12*8),36,(6*12)-1,(11*2)-2,0x00ffffff
2002
 
2003
    mov edi,2
2004
    mov eax,4
2005
    mov ebx,(9+12*8)*65536+37
2006
    mov ecx,cl_Black
2007
    mov edx,info_text_label
2008
    call drawmenu
2009
 
552 diamond 2010
iglobal
31 halyavin 2011
info_text_label:
131 diamond 2012
    db	     '   Help     '
2013
    db	     '   About    '
552 diamond 2014
endg
31 halyavin 2015
 
2016
no_drawhitext:
2017
 
2018
nob8:
2019
    cmp  [flick],1
2020
    jne  no_flick
2021
    mov  [flick],0
2022
    jmp  still
2023
no_flick:
2024
 
2025
    ret
2026
 
2027
;FILE LIST PARAMETRS
2028
 
552 diamond 2029
iglobal
131 diamond 2030
listx	    dd 15
2031
listy	    dd 72
31 halyavin 2032
listxsize dd 350
2033
listysize dd 41
2034
 
2035
filelistxy    dd 0
2036
filelistsize  dd 0
2037
scrollsize    dd 8
2038
listcolor     dd 0xffffff ;0xeeeeee
2039
scrollcolor   dd 0x778877
2040
scrollboxcol  dd 0x335533
2041
scrollbutcol  dd 0x224422
134 diamond 2042
scrollbutsize = 9
31 halyavin 2043
 
2044
;URL LINE PARAMETRS
2045
 
131 diamond 2046
urlx	 dd 10
2047
urly	 dd 20
31 halyavin 2048
urlxsize dd 350
2049
urlysize dd 12
552 diamond 2050
endg
31 halyavin 2051
 
2052
drawmenu:
2053
    mov eax,4
2054
    mov esi,12
2055
menuloo:
485 heavyiron 2056
    mcall
31 halyavin 2057
    add ebx,11
2058
    add edx,12
2059
    dec edi
2060
    jnz menuloo
2061
    ret
2062
 
2063
menubutton:
2064
    mov  eax,8
2065
nextmenubut:
485 heavyiron 2066
    mcall
31 halyavin 2067
    add  ecx,11*65536
2068
    inc  edx
2069
    dec  edi
2070
    jnz  nextmenubut
2071
    ret
2072
 
2073
;*****************************
2074
; READ FILE STRUCTURE PROC
2075
;*****************************
2076
 
2077
read_directory:
2078
 
2079
;STEP 1 CLEAR CONVINFO
2080
    mov  edi,convinfo
2081
    mov  al,255
134 diamond 2082
    mov  ecx,4096*27
31 halyavin 2083
    cld
134 diamond 2084
    push edi
31 halyavin 2085
    rep  stosb
134 diamond 2086
    pop  edi
31 halyavin 2087
 
2088
;STEP 2 TEST ON HD OR PARTITION
2089
    cmp [path],byte '/'
2090
    je nstep
134 diamond 2091
; copy info on RD and FD
993 Ataualpa 2092
	mov	esi, hdimg
2093
	mov	ecx, 2*27
2094
	rep	movsb
134 diamond 2095
; hard disks
993 Ataualpa 2096
	mov	eax, 4
134 diamond 2097
.1:
993 Ataualpa 2098
	mov	ecx, 27
2099
	cmp	dword [esi], 0
2100
	jz	.2
2101
	rep	movsb
2102
	jmp	.3
134 diamond 2103
.2:
993 Ataualpa 2104
	add	esi, ecx
134 diamond 2105
.3:
993 Ataualpa 2106
	dec	eax
2107
	jnz	.1
2108
	mov	[listsize], 0
2109
	ret
31 halyavin 2110
nstep:
2111
    cmp [path+3],byte '/'
2112
    je nstep2
131 diamond 2113
    cmp [path+4],byte '/'
2114
    je nstep2
156 diamond 2115
    mov ecx,1
131 diamond 2116
    cmp [path+1],word 'RD'
993 Ataualpa 2117
    jz	loxpt
156 diamond 2118
    cmp [path+1],word 'CD'
993 Ataualpa 2119
    jz	loxpt
156 diamond 2120
    mov ecx,2
131 diamond 2121
    cmp [path+1],word 'FD'
993 Ataualpa 2122
    jz	loxpt
131 diamond 2123
    cmp [path+1],dword 'HD0'
2124
    jne nostep_HD0
134 diamond 2125
    movzx ecx,byte [table_area+2]
131 diamond 2126
    jmp loxpt
2127
nostep_HD0:
2128
    cmp [path+1],dword 'HD1'
2129
    jne nostep_HD1
134 diamond 2130
    movzx ecx,byte [table_area+3]
131 diamond 2131
    jmp loxpt
2132
nostep_HD1:
2133
    cmp [path+1],dword 'HD2'
2134
    jne nostep_HD2
134 diamond 2135
    movzx ecx,byte [table_area+4]
131 diamond 2136
    jmp loxpt
2137
nostep_HD2:
2138
    cmp [path+1],dword 'HD3'
2139
    jne nostep_HD3
134 diamond 2140
    movzx ecx,byte [table_area+5]
131 diamond 2141
    jmp loxpt
2142
nostep_HD3:
2143
 
134 diamond 2144
    mov ecx,2
131 diamond 2145
 
31 halyavin 2146
loxpt:
993 Ataualpa 2147
	cmp	ecx, 20
2148
	jbe	@f
2149
	mov	ecx, 20
134 diamond 2150
@@:
993 Ataualpa 2151
	mov	eax, a1
2152
	mov	esi, ptimg
134 diamond 2153
@@:
993 Ataualpa 2154
	stosd
2155
	add	eax, 3
2156
	push	ecx esi
2157
	mov	ecx, 23
2158
	rep	movsb
2159
	pop	esi ecx
2160
	loop	@b
31 halyavin 2161
    mov [listsize],0
2162
    ret
2163
nstep2:
2164
 
134 diamond 2165
;STEP 3 was deleted
31 halyavin 2166
 
2167
;STEP 4 READ DATA FROM HD
2168
 
2169
loorhd:
134 diamond 2170
    mov  eax,70
31 halyavin 2171
    mov  ebx,fileinfoblock
485 heavyiron 2172
    mcall
31 halyavin 2173
 
134 diamond 2174
    cmp eax,6
131 diamond 2175
    je	    end_of_dir
31 halyavin 2176
 
2177
;  It's erorr's test is poor code
2178
 
2179
    cmp eax,1
2180
    jne no_inv_part
131 diamond 2181
    glabel 10,10,'Invalid partition or hd base',cl_Red+font_Big
31 halyavin 2182
    jmp end_of_dir
2183
no_inv_part:
2184
    cmp eax,3
2185
    jne no_unk_fs
134 diamond 2186
    glabel 10,10,'Unknown file system',cl_Red+font_Big
31 halyavin 2187
    jmp end_of_dir
2188
no_unk_fs:
2189
 
2190
end_of_dir:
134 diamond 2191
; -1 -> 0
993 Ataualpa 2192
	cmp	ebx, -1
2193
	sbb	ebx, -1
31 halyavin 2194
    mov  [dirlen],ebx
2195
 
134 diamond 2196
    ; command successful
31 halyavin 2197
 
993 Ataualpa 2198
	mov	esi, outinfo+32
2199
	and	[listsize], 0
2200
	test	ebx, ebx
2201
	jz	nofiles
31 halyavin 2202
 
2203
  newlineb:
993 Ataualpa 2204
	push	ebx
31 halyavin 2205
 
993 Ataualpa 2206
	mov	edi, fileinfo
2207
	push	edi
2208
	mov	al, ' '
2209
	mov	ecx, 27
2210
	rep	stosb
2211
	pop	edi
2212
	push	esi
2213
	add	esi, 40
2214
	mov	[edi], esi
2215
	pop	esi
31 halyavin 2216
 
993 Ataualpa 2217
	mov	eax, 'DAT '	; data or ... ?
2218
	mov	cl, [esi]
2219
	test	cl, 0x10
2220
	jz	@f
2221
	mov	eax, 'FOL '
2222
	mov	[edi+15], eax
2223
	jmp	nosize
134 diamond 2224
@@:
993 Ataualpa 2225
	test	cl, 8
2226
	jz	novol
2227
	mov	eax, 'Fvol'
2228
	mov	[edi+15], eax
2229
	jmp	nosize
134 diamond 2230
novol:
993 Ataualpa 2231
	mov	[edi+15], eax
31 halyavin 2232
 
134 diamond 2233
; size
993 Ataualpa 2234
	mov	eax, [esi+32]
2235
	push	esi
2236
	lea	esi, [edi+26]
2237
	mov	ebx, 10
2238
	mov	ecx, 8
134 diamond 2239
newnum:
993 Ataualpa 2240
	xor	edx, edx
2241
	div	ebx
2242
	add	dl, '0'
2243
	mov	[esi], dl
2244
	test	eax, eax
2245
	jz	zernum
2246
	dec	esi
2247
	loop	newnum
134 diamond 2248
zernum:
993 Ataualpa 2249
	pop	esi
134 diamond 2250
nosize:
31 halyavin 2251
 
134 diamond 2252
; date
993 Ataualpa 2253
	mov	dword [edi+6], '.  .'
134 diamond 2254
; year
993 Ataualpa 2255
	movzx	eax, word [esi+28+2]
2256
	mov	ecx, 4
134 diamond 2257
newdel1:
993 Ataualpa 2258
	xor	edx, edx
2259
	mov	ebx, 10
2260
	div	ebx
2261
	add	edx, '0'
2262
	mov	[edi+ecx+9], dl
2263
	loop	newdel1
134 diamond 2264
; month
993 Ataualpa 2265
	movzx	eax, byte [esi+28+1]
2266
	xor	edx, edx
2267
	div	ebx
2268
	add	al, '0'
2269
	add	dl, '0'
2270
	mov	[edi+7], al
2271
	mov	[edi+8], dl
134 diamond 2272
; day
993 Ataualpa 2273
	movzx	eax, byte [esi+28]
2274
	xor	edx, edx
2275
	div	ebx
2276
	add	al, '0'
2277
	add	dl, '0'
2278
	mov	[edi+4], al
2279
	mov	[edi+5], dl
31 halyavin 2280
 
2281
;STEP 5 Test on WRITE OR NOTWRITE
993 Ataualpa 2282
	cmp	word [esi+40], '.'
2283
	jz	nextfl
2284
	cmp	word [esi+40], '..'
2285
	jnz	@f
2286
	cmp	byte [esi+42], 0
2287
	jz	nextfl
134 diamond 2288
@@:
31 halyavin 2289
 
134 diamond 2290
; STEP 6 SORT ALGORYTHM
31 halyavin 2291
 
993 Ataualpa 2292
	push	esi
2293
	xor	esi, esi
31 halyavin 2294
 
134 diamond 2295
; At first Fold after Dat
31 halyavin 2296
 
2297
ftestname:
993 Ataualpa 2298
	cmp	dword [convinfo+esi], -1
2299
	jz	writefile
134 diamond 2300
    cmp byte [fileinfo+15],'F'
131 diamond 2301
    je	    F
134 diamond 2302
    cmp byte [fileinfo+15],'D'
2303
    jne add_element
2304
D:  cmp byte [convinfo+esi+15],'D'
131 diamond 2305
    je	    add_element
134 diamond 2306
    cmp byte [convinfo+esi+15],'F'
131 diamond 2307
    je	    skipfile
31 halyavin 2308
    jmp add_element
134 diamond 2309
F:  cmp byte [convinfo+esi+15],'D'
31 halyavin 2310
    je writenow
134 diamond 2311
;    cmp byte [convinfo+esi+15],'F'
31 halyavin 2312
;    je  add_element
2313
;    jmp add_element
2314
 
2315
add_element:
134 diamond 2316
; compare items
993 Ataualpa 2317
	movzx	eax, [viewmode]
2318
	call	[compare+eax*4]
2319
	jb	writenow
31 halyavin 2320
skipfile:
134 diamond 2321
    add esi,27
31 halyavin 2322
    jmp ftestname
2323
 
2324
writenow:
134 diamond 2325
    mov ecx,4096*27-1
31 halyavin 2326
    sub ecx,esi
2327
ldloop:
2328
    mov al,[convinfo+ecx+esi]
134 diamond 2329
    mov [convinfo+ecx+esi+27],al
31 halyavin 2330
    dec ecx
2331
    jns ldloop
2332
 
2333
writefile:
134 diamond 2334
    mov ecx,26
31 halyavin 2335
wfloop:
134 diamond 2336
    mov al,[fileinfo+ecx]
31 halyavin 2337
    mov [convinfo+ecx+esi],al
2338
    dec ecx
2339
    jns wfloop
993 Ataualpa 2340
	inc	[listsize]
2341
	pop	esi
31 halyavin 2342
 
2343
nextfl:
993 Ataualpa 2344
	add	esi, 304
2345
	pop	ebx
2346
	dec	ebx
2347
	jnz	newlineb
31 halyavin 2348
 
134 diamond 2349
nofiles:
993 Ataualpa 2350
	ret
31 halyavin 2351
 
134 diamond 2352
toupper:
993 Ataualpa 2353
	cmp	al, 'a'
2354
	jb	.ret
2355
	cmp	al, 'z'
2356
	ja	@f
134 diamond 2357
.sub20:
993 Ataualpa 2358
	sub	al, 0x20
134 diamond 2359
.ret:
993 Ataualpa 2360
	ret
134 diamond 2361
@@:
993 Ataualpa 2362
	cmp	al, 0xA0
2363
	jb	.ret
2364
	cmp	al, 0xB0
2365
	jb	.sub20
2366
	cmp	al, 0xE0
2367
	jb	.ret
2368
	cmp	al, 0xF0
2369
	jae	@f
2370
	sub	al, 0xE0-0x90
2371
	ret
134 diamond 2372
@@:
993 Ataualpa 2373
	cmp	al, 0xF1
2374
	jnz	.ret
2375
	dec	eax
2376
	ret
31 halyavin 2377
 
134 diamond 2378
compare_date:
993 Ataualpa 2379
	pushad
2380
	mov	al, [fileinfo+10]
2381
	cmp	al, [convinfo+esi+10]
2382
	jnz	.ret
2383
	mov	al, [fileinfo+11]
2384
	cmp	al, [convinfo+esi+11]
2385
	jnz	.ret
2386
	mov	al, [fileinfo+12]
2387
	cmp	al, [convinfo+esi+12]
2388
	jnz	.ret
2389
	mov	al, [fileinfo+13]
2390
	cmp	al, [convinfo+esi+13]
2391
	jnz	.ret
2392
	mov	al, [fileinfo+7]
2393
	cmp	al, [convinfo+esi+7]
2394
	jnz	.ret
2395
	mov	al, [fileinfo+8]
2396
	cmp	al, [convinfo+esi+8]
2397
	jnz	.ret
2398
	mov	al, [fileinfo+4]
2399
	cmp	al, [convinfo+esi+4]
2400
	jnz	.ret
2401
	mov	al, [fileinfo+5]
2402
	cmp	al, [convinfo+esi+5]
2403
	jz	compare_name.1
134 diamond 2404
.ret:
993 Ataualpa 2405
	popad
2406
	ret
134 diamond 2407
compare_name:
993 Ataualpa 2408
	pushad
134 diamond 2409
.1:
993 Ataualpa 2410
	mov	edi, dword [convinfo+esi]
2411
	mov	esi, dword [fileinfo]
2412
	call	strcmpi
2413
	popad
2414
	ret
134 diamond 2415
compare_ext:
993 Ataualpa 2416
	pushad
2417
	mov	esi, dword [convinfo+esi]
2418
	mov	edi, dword [fileinfo]
2419
	call	find_ext
2420
	xchg	esi, edi
2421
	call	find_ext
2422
	call	strcmpi
2423
	popad
2424
	jz	compare_name
2425
	ret
134 diamond 2426
compare_size:
993 Ataualpa 2427
	pushad
2428
	lea	edi, [convinfo+esi+19]
2429
	lea	esi, [fileinfo+19]
2430
	mov	ecx, 8
2431
	repz	cmpsb
2432
	popad
2433
	jz	compare_name
2434
	ret
31 halyavin 2435
 
134 diamond 2436
strcmpi:
993 Ataualpa 2437
	lodsb
2438
	call	toupper
2439
	push	eax
2440
	mov	al, [edi]
2441
	inc	edi
2442
	call	toupper
2443
	cmp	[esp], al
2444
	pop	eax
2445
	jnz	@f
2446
	test	al, al
2447
	jnz	strcmpi
134 diamond 2448
@@:
993 Ataualpa 2449
	ret
134 diamond 2450
 
2451
find_ext:
993 Ataualpa 2452
	lodsb
2453
	test	al, al
2454
	jz	.noext
2455
	cmp	al, '.'
2456
	jnz	find_ext
2457
	ret
134 diamond 2458
.noext:
993 Ataualpa 2459
	dec	esi
2460
	ret
134 diamond 2461
 
31 halyavin 2462
;******************************************************************************
2706 leency 2463
title_browser db 'SYSTEM X-TREE FILE BROWSER',0
2464
open_dlg  db 'OPEN FILE',0
2465
save_dlg  db 'SAVE FILE',0
31 halyavin 2466
 
2467
; DATA AREA
2468
pmenu_draw dd 0  ;if poup menu is draw,update all window
131 diamond 2469
flick	     dd 0  ;anti flick on ?
2470
drawhf	       dd 0  ;draw file menu?
2471
drawhv	       dd 0  ;draw view menu?
2472
drawhi	       dd 0  ;draw info menu?
2473
cursor	       dd 0  ;cursor in prompt line
2474
focus	     dd 0  ;prompt edit or window?
31 halyavin 2475
downstop   dd 0
2476
filecursor dd 0
131 diamond 2477
mousex	       dd 0
2478
mousey	       dd 0
31 halyavin 2479
blocksread dd 0
2480
listsize   dd 0  ;num of files in directory
131 diamond 2481
temp	   dd 0
31 halyavin 2482
readblock  dd 1
2483
dlg_type   db 0 ;S-save O-open
134 diamond 2484
browser    db 0  ;0-dialog, 1-browser
2485
viewmode   db 0  ;folder sort
31 halyavin 2486
 
993 Ataualpa 2487
compare dd	compare_name
2488
	dd	compare_ext
2489
	dd	compare_size
2490
	dd	compare_date
31 halyavin 2491
 
993 Ataualpa 2492
aRD	db	'RD',0
2493
aFD	db	'FD',0
2494
aHD0	db	'HD0',0
2495
aHD1	db	'HD1',0
2496
aHD2	db	'HD2',0
2497
aHD3	db	'HD3',0
2498
aCD0	db	'CD0',0
2499
aCD1	db	'CD1',0
2500
aCD2	db	'CD2',0
2501
aCD3	db	'CD3',0
2502
a1	db	'1',0,0
2503
a2	db	'2',0,0
2504
a3	db	'3',0,0
2505
a4	db	'4',0,0
2506
a5	db	'5',0,0
2507
a6	db	'6',0,0
2508
a7	db	'7',0,0
2509
a8	db	'8',0,0
2510
a9	db	'9',0,0
2511
a10	db	'10',0
2512
a11	db	'11',0
2513
a12	db	'12',0
2514
a13	db	'13',0
2515
a14	db	'14',0
2516
a15	db	'15',0
2517
a16	db	'16',0
2518
a17	db	'17',0
2519
a18	db	'18',0
2520
a19	db	'19',0
2521
a20	db	'20',0
131 diamond 2522
 
134 diamond 2523
hdimg:
993 Ataualpa 2524
	dd	aRD
2525
	db	'RAMDISK    FOL         '
2526
	dd	aFD
2527
	db	'FLOPPYDISK FOL         '
2528
hdimg1	dd	0
2529
	db	'HARDDISK   FOL         '
2530
hdimg2	dd	0
2531
	db	'HARDDISK   FOL         '
2532
hdimg3	dd	0
2533
	db	'HARDDISK   FOL         '
2534
hdimg4	dd	0
2535
	db	'HARDDISK   FOL         '
2536
ptimg	db	'PARTITION  FOL         '
31 halyavin 2537
 
2538
modetext:
2539
      ;0123456789012345
2540
   db 'SORT BY NAME   0'
2541
   db 'SORT BY EXT.   1'
2542
   db 'SORT BY SIZE   2' ;type sort
2543
   db 'SORT BY DATE   3'
2544
   db 'DEL SORT NAME  4'
2545
   db 'DEL SORT EXT.  5'
2546
   db 'DEL SORT SIZE  6' ;type sort
2547
   db 'DEL SORT DATE  7'
2548
 
131 diamond 2549
dirlen	      dd     0x1
31 halyavin 2550
b_color   dd   0x6677cc
2551
 
2552
; //// Willow
131 diamond 2553
;MRUfile:
2554
;   dd 0x0
2555
;   dd 0x0
2556
;   dd 0x1
2557
;   dd path
2558
;   dd tempzone
2559
;   db '/RD/1/MRU.LST',0
31 halyavin 2560
; //// Willow
2561
 
2562
;Name of programs
2706 leency 2563
editor	  db '/sys/tinypad',0
2564
kiv       db '/sys/media/kiv',0
2565
ac97	  db '/sys/media/ac97snd',0
2566
midamp	  db '/sys/media/midamp',0
2567
htmlv	  db '/sys/network/htmlv',0
2568
rtfread   db '/sys/rtfread',0
2569
view3ds   db '/sys/3d/view3ds',0
2570
life2	  db '/sys/demos/life2',0
31 halyavin 2571
 
134 diamond 2572
more_char db 10h
2573
 
552 diamond 2574
IncludeIGlobals
2575
 
31 halyavin 2576
fileinfo_start:
993 Ataualpa 2577
	dd	7
2578
	dd	0
134 diamond 2579
fileinfo_params:
993 Ataualpa 2580
	dd	0
2581
	dd	0
2582
	dd	0
2583
	db	0
134 diamond 2584
fileinfo_name:
993 Ataualpa 2585
	dd	0
31 halyavin 2586
 
134 diamond 2587
clipfile_info:
993 Ataualpa 2588
	dd	?
2589
	dd	0
2590
	dd	0
2591
	dd	?
2592
	dd	paramtest
2593
	db	'/SYS/CLIPFILE.TXT',0
134 diamond 2594
copyr_run:
993 Ataualpa 2595
	dd	7
2596
	dd	0
2597
	dd	copyr_param
2598
	dd	0
2599
	dd	0
2600
	db	'/SYS/COPYR',0
134 diamond 2601
 
31 halyavin 2602
fileinfoblock:
134 diamond 2603
   dd 0x1    ; read folder
131 diamond 2604
   dd 0x0    ; first block
134 diamond 2605
   dd 0x0    ; flags (ANSI names)
2606
   dd 4095   ; number of blocks to read
131 diamond 2607
   dd outinfo	  ; ret offset
31 halyavin 2608
path:
993 Ataualpa 2609
times 1024 db 0     ;path
131 diamond 2610
 
2611
table_area:
2612
rb 10
2613
 
31 halyavin 2614
;rb 256
2615
but_file:
2616
file 'systr12.GIF'
134 diamond 2617
 
2618
I_END:
2619
 
2620
scroll_height dd ?
2621
scroll_pos dd ?
2622
 
31 halyavin 2623
butimg:
131 diamond 2624
rb 400*16*3+8	  ;buttons (left pice of picture)
31 halyavin 2625
logoimg:
131 diamond 2626
rb 70*16*3+8	;logo (right pice of picture)
31 halyavin 2627
logoinfimg:
131 diamond 2628
rb 60*60*3+8	;logoinfo (right pice of picture)
31 halyavin 2629
upsb:
131 diamond 2630
rb 8*9*3+8    ;up scroll button
31 halyavin 2631
dnsb:
131 diamond 2632
rb 8*9*3+8    ;down scroll button
31 halyavin 2633
 
2634
;ICONS RESERVE AREA
2635
hdico:
2636
rb 12*9*3+8
2637
rdico:
2638
rb 12*9*3+8
2639
folico:
2640
rb 12*9*3+8
2641
datico:
2642
rb 12*9*3+8
2643
delico:
2644
rb 12*9*3+8
2645
imgico:
2646
rb 12*9*3+8
2647
txtico:
2648
rb 12*9*3+8
2649
asmincico:
2650
rb 12*9*3+8
2651
execico:
2652
rb 12*9*3+8
156 diamond 2653
cdico:
2654
rb 12*9*3+8
31 halyavin 2655
 
131 diamond 2656
tempimg:    ;reserve ram for images
2657
rb 400*100*3+8	     ;for picture
31 halyavin 2658
rb 8000
2659
 
2660
MYPID:
2661
rd 8
2662
 
2663
param_area:
2664
rb 256
2665
paramtest:
134 diamond 2666
rb 1024
31 halyavin 2667
filedir:
134 diamond 2668
rb 1024
31 halyavin 2669
 
552 diamond 2670
IncludeUGlobals
2671
 
31 halyavin 2672
procinfo process_information
2673
sc system_colors
2674
 
2675
fileinfo:
2676
rb 200 ;4096*62+1024
2677
 
993 Ataualpa 2678
copyr_param	rb	256
134 diamond 2679
 
31 halyavin 2680
outinfo:
134 diamond 2681
rb 32+4096*304
31 halyavin 2682
 
2683
convinfo:
134 diamond 2684
rb 4096*27
2685
; stack
993 Ataualpa 2686
	align 4
2687
	rb	1024
31 halyavin 2688
RAM_END: