Subversion Repositories Kolibri OS

Rev

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