Rev 3711 | Rev 4277 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3711 | Rev 3742 | ||
---|---|---|---|
Line 3... | Line 3... | ||
3 | ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
5 | ;; ;; |
5 | ;; ;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 7... | Line 7... | ||
7 | 7 | ||
Line 8... | Line 8... | ||
8 | $Revision: 3711 $ |
8 | $Revision: 3742 $ |
9 | 9 | ||
10 | ERROR_SUCCESS = 0 |
10 | ERROR_SUCCESS = 0 |
11 | ERROR_DISK_BASE = 1 |
11 | ERROR_DISK_BASE = 1 |
Line 40... | Line 40... | ||
40 | dd fs_OnFloppy |
40 | dd fs_OnFloppy |
41 | dd fs_NextFloppy |
41 | dd fs_NextFloppy |
42 | db 10,'floppydisk' |
42 | db 10,'floppydisk' |
43 | dd fs_OnFloppy |
43 | dd fs_OnFloppy |
44 | dd fs_NextFloppy |
44 | dd fs_NextFloppy |
45 | db 3,'hd0' |
- | |
46 | dd fs_OnHd0 |
- | |
47 | dd fs_NextHd0 |
- | |
48 | db 3,'hd1' |
- | |
49 | dd fs_OnHd1 |
- | |
50 | dd fs_NextHd1 |
- | |
51 | db 3,'hd2' |
- | |
52 | dd fs_OnHd2 |
- | |
53 | dd fs_NextHd2 |
- | |
54 | db 3,'hd3' |
- | |
55 | dd fs_OnHd3 |
- | |
56 | dd fs_NextHd3 |
- | |
57 | ;********************************************** |
45 | ;********************************************** |
58 | db 3,'cd0' |
46 | db 3,'cd0' |
59 | dd fs_OnCd0 |
47 | dd fs_OnCd0 |
60 | dd fs_NextCd |
48 | dd fs_NextCd |
61 | db 3,'cd1' |
49 | db 3,'cd1' |
Line 74... | Line 62... | ||
74 | virtual_root_query: |
62 | virtual_root_query: |
75 | dd fs_HasRamdisk |
63 | dd fs_HasRamdisk |
76 | db 'rd',0 |
64 | db 'rd',0 |
77 | dd fs_HasFloppy |
65 | dd fs_HasFloppy |
78 | db 'fd',0 |
66 | db 'fd',0 |
79 | dd fs_HasHd0 |
- | |
80 | db 'hd0',0 |
- | |
81 | dd fs_HasHd1 |
- | |
82 | db 'hd1',0 |
- | |
83 | dd fs_HasHd2 |
- | |
84 | db 'hd2',0 |
- | |
85 | dd fs_HasHd3 |
- | |
86 | db 'hd3',0 |
- | |
87 | ;********************************************** |
67 | ;********************************************** |
88 | dd fs_HasCd0 |
68 | dd fs_HasCd0 |
89 | db 'cd0',0 |
69 | db 'cd0',0 |
90 | dd fs_HasCd1 |
70 | dd fs_HasCd1 |
91 | db 'cd1',0 |
71 | db 'cd1',0 |
Line 95... | Line 75... | ||
95 | db 'cd3',0 |
75 | db 'cd3',0 |
96 | ;********************************************** |
76 | ;********************************************** |
97 | dd 0 |
77 | dd 0 |
Line 98... | Line 78... | ||
98 | 78 | ||
99 | fs_additional_handlers: |
- | |
100 | dd biosdisk_handler, biosdisk_enum_root |
79 | fs_additional_handlers: |
101 | dd dyndisk_handler, dyndisk_enum_root |
80 | dd dyndisk_handler, dyndisk_enum_root |
102 | ; add new handlers here |
81 | ; add new handlers here |
Line 103... | Line 82... | ||
103 | dd 0 |
82 | dd 0 |
Line 521... | Line 500... | ||
521 | dd 0 |
500 | dd 0 |
522 | dd fs_FloppyDelete |
501 | dd fs_FloppyDelete |
523 | dd fs_FloppyCreateFolder |
502 | dd fs_FloppyCreateFolder |
524 | fs_NumFloppyServices = ($ - fs_FloppyServices)/4 |
503 | fs_NumFloppyServices = ($ - fs_FloppyServices)/4 |
Line 525... | Line -... | ||
525 | - | ||
526 | fs_OnHd0: |
- | |
527 | call reserve_hd1 |
- | |
528 | mov eax, [hd_address_table] |
- | |
529 | mov [hdbase], eax ;0x1F0 |
- | |
530 | mov [hdid], 0 |
- | |
531 | push 1 |
- | |
532 | jmp fs_OnHd |
- | |
533 | fs_OnHd1: |
- | |
534 | call reserve_hd1 |
- | |
535 | mov eax, [hd_address_table] |
- | |
536 | mov [hdbase], eax ;0x1F0 |
- | |
537 | mov [hdid], 0x10 |
- | |
538 | push 2 |
- | |
539 | jmp fs_OnHd |
- | |
540 | fs_OnHd2: |
- | |
541 | call reserve_hd1 |
- | |
542 | mov eax, [hd_address_table+16] |
- | |
543 | mov [hdbase], eax ;0x170 |
- | |
544 | mov [hdid], 0 |
- | |
545 | push 3 |
- | |
546 | jmp fs_OnHd |
- | |
547 | fs_OnHd3: |
- | |
548 | call reserve_hd1 |
- | |
549 | mov eax, [hd_address_table+16] |
- | |
550 | mov [hdbase], eax ;0x170 |
- | |
551 | mov [hdid], 0x10 |
- | |
552 | push 4 |
- | |
553 | fs_OnHd: |
- | |
554 | call reserve_hd_channel |
- | |
555 | pop eax |
- | |
556 | mov [hdpos], eax |
- | |
557 | cmp ecx, 0x100 |
- | |
558 | jae fs_OnHdAndBd.nf |
- | |
559 | cmp cl, [DRIVE_DATA+1+eax] |
- | |
560 | fs_OnHdAndBd: |
- | |
561 | jbe @f |
- | |
562 | .nf: |
- | |
563 | call free_hd_channel |
- | |
564 | and [hd1_status], 0 |
- | |
565 | mov dword [image_of_eax], 5 ; not found |
- | |
566 | ret |
- | |
567 | @@: |
- | |
568 | mov [known_part], ecx ; mov [fat32part], ecx |
- | |
569 | push ebx esi |
- | |
570 | call choice_necessity_partition_1 |
- | |
571 | pop esi ebx |
- | |
572 | mov ecx, [ebx+12] |
- | |
573 | mov edx, [ebx+16] |
- | |
574 | ; add edx, std_application_base_address |
- | |
575 | mov eax, [ebx] |
- | |
576 | cmp eax, fs_NumHdServices |
- | |
577 | jae .not_impl |
- | |
578 | add ebx, 4 |
- | |
579 | call dword [fs_HdServices + eax*4] |
- | |
580 | call free_hd_channel |
- | |
581 | and [hd1_status], 0 |
- | |
582 | mov [image_of_eax], eax |
- | |
583 | mov [image_of_ebx], ebx |
- | |
584 | ret |
- | |
585 | .not_impl: |
- | |
586 | call free_hd_channel |
- | |
587 | and [hd1_status], 0 |
- | |
588 | mov dword [image_of_eax], 2 ; not implemented |
- | |
589 | ret |
- | |
590 | - | ||
591 | fs_HdServices: |
- | |
592 | dd fs_HdRead |
- | |
593 | dd fs_HdReadFolder |
- | |
594 | dd fs_HdRewrite |
- | |
595 | dd fs_HdWrite |
- | |
596 | dd fs_HdSetFileEnd |
- | |
597 | dd fs_HdGetFileInfo |
- | |
598 | dd fs_HdSetFileInfo |
- | |
599 | dd 0 |
- | |
600 | dd fs_HdDelete |
- | |
601 | dd fs_HdCreateFolder |
- | |
602 | fs_NumHdServices = ($ - fs_HdServices)/4 |
- | |
603 | 504 | ||
604 | ;******************************************************* |
505 | ;******************************************************* |
605 | fs_OnCd0: |
506 | fs_OnCd0: |
606 | call reserve_cd |
507 | call reserve_cd |
607 | mov [ChannelNumber], 1 |
508 | mov [ChannelNumber], 1 |
Line 689... | Line 590... | ||
689 | ret |
590 | ret |
690 | fs_HasFloppy: |
591 | fs_HasFloppy: |
691 | cmp byte [DRIVE_DATA], 0 |
592 | cmp byte [DRIVE_DATA], 0 |
692 | setnz al |
593 | setnz al |
693 | ret |
594 | ret |
694 | fs_HasHd0: |
- | |
695 | test byte [DRIVE_DATA+1], 01000000b |
- | |
696 | setnz al |
- | |
697 | ret |
- | |
698 | fs_HasHd1: |
- | |
699 | test byte [DRIVE_DATA+1], 00010000b |
- | |
700 | setnz al |
- | |
701 | ret |
- | |
702 | fs_HasHd2: |
- | |
703 | test byte [DRIVE_DATA+1], 00000100b |
- | |
704 | setnz al |
- | |
705 | ret |
- | |
706 | fs_HasHd3: |
- | |
707 | test byte [DRIVE_DATA+1], 00000001b |
- | |
708 | setnz al |
- | |
709 | ret |
- | |
Line 710... | Line 595... | ||
710 | 595 | ||
711 | ;******************************************************* |
596 | ;******************************************************* |
712 | fs_HasCd0: |
597 | fs_HasCd0: |
713 | test byte [DRIVE_DATA+1], 10000000b |
598 | test byte [DRIVE_DATA+1], 10000000b |
Line 760... | Line 645... | ||
760 | ret |
645 | ret |
761 | .no2: |
646 | .no2: |
762 | stc |
647 | stc |
763 | ret |
648 | ret |
Line 764... | Line -... | ||
764 | - | ||
765 | ; on hdx, we have partitions from 1 to [0x40002+x] |
- | |
766 | fs_NextHd0: |
- | |
767 | push 0 |
- | |
768 | jmp fs_NextHd |
- | |
769 | fs_NextHd1: |
- | |
770 | push 1 |
- | |
771 | jmp fs_NextHd |
- | |
772 | fs_NextHd2: |
- | |
773 | push 2 |
- | |
774 | jmp fs_NextHd |
- | |
775 | fs_NextHd3: |
- | |
776 | push 3 |
- | |
777 | fs_NextHd: |
- | |
778 | pop ecx |
- | |
779 | movzx ecx, byte [DRIVE_DATA+2+ecx] |
- | |
780 | cmp eax, ecx |
- | |
781 | jae fs_NextFloppy.no2 |
- | |
782 | inc eax |
- | |
783 | clc |
- | |
784 | ret |
- | |
785 | 649 | ||
786 | ;******************************************************* |
650 | ;******************************************************* |
787 | fs_NextCd: |
651 | fs_NextCd: |
788 | ; we always have /cdX/1 |
652 | ; we always have /cdX/1 |
789 | test eax, eax |
653 | test eax, eax |
Line 793... | Line 657... | ||
793 | clc |
657 | clc |
794 | @@: |
658 | @@: |
795 | ret |
659 | ret |
796 | ;******************************************************* |
660 | ;******************************************************* |
Line 797... | Line -... | ||
797 | - | ||
798 | ; Additional FS handlers. |
- | |
799 | ; This handler gets the control each time when fn 70 is called |
- | |
800 | ; with unknown item of root subdirectory. |
- | |
801 | ; in: esi -> name |
- | |
802 | ; ebp = 0 or rest of name relative to esi |
- | |
803 | ; out: if the handler processes path, he must not return in file_system_lfn, |
- | |
804 | ; but instead pop return address and return directly to the caller |
- | |
805 | ; otherwise simply return |
- | |
806 | - | ||
807 | ; here we test for /bd |
- | |
808 | biosdisk_handler: |
- | |
809 | cmp [NumBiosDisks], 0 |
- | |
810 | jz .ret |
- | |
811 | mov al, [esi] |
- | |
812 | or al, 20h |
- | |
813 | cmp al, 'b' |
- | |
814 | jnz .ret |
- | |
815 | mov al, [esi+1] |
- | |
816 | or al, 20h |
- | |
817 | cmp al, 'd' |
- | |
818 | jnz .ret |
- | |
819 | push esi |
- | |
820 | inc esi |
- | |
821 | inc esi |
- | |
822 | cmp byte [esi], '0' |
- | |
823 | jb .ret2 |
- | |
824 | cmp byte [esi], '9' |
- | |
825 | ja .ret2 |
- | |
826 | xor edx, edx |
- | |
827 | @@: |
- | |
828 | lodsb |
- | |
829 | test al, al |
- | |
830 | jz .ok |
- | |
831 | cmp al, '/' |
- | |
832 | jz .ok |
- | |
833 | sub al, '0' |
- | |
834 | cmp al, 9 |
- | |
835 | ja .ret2 |
- | |
836 | lea edx, [edx*5] |
- | |
837 | lea edx, [edx*2+eax] |
- | |
838 | jmp @b |
- | |
839 | .ret2: |
- | |
840 | pop esi |
- | |
841 | .ret: |
- | |
842 | ret |
- | |
843 | .ok: |
- | |
844 | cmp al, '/' |
- | |
845 | jz @f |
- | |
846 | dec esi |
- | |
847 | @@: |
- | |
848 | add dl, 80h |
- | |
849 | xor ecx, ecx |
- | |
850 | @@: |
- | |
851 | cmp dl, [BiosDisksData+ecx*4] |
- | |
852 | jz .ok2 |
- | |
853 | inc ecx |
- | |
854 | cmp ecx, [NumBiosDisks] |
- | |
855 | jb @b |
- | |
856 | jmp .ret2 |
- | |
857 | .ok2: |
- | |
858 | add esp, 8 |
- | |
859 | test al, al |
- | |
860 | jnz @f |
- | |
861 | mov esi, fs_BdNext |
- | |
862 | jmp file_system_lfn.maindir_noesi |
- | |
863 | @@: |
- | |
864 | push ecx |
- | |
865 | push ecx |
- | |
866 | push biosdisk_cleanup |
- | |
867 | push fs_OnBd |
- | |
868 | mov edi, esp |
- | |
869 | jmp file_system_lfn.found2 |
- | |
870 | - | ||
871 | fs_BdNext: |
- | |
872 | cmp eax, [BiosDiskPartitions+ecx*4] |
- | |
873 | inc eax |
- | |
874 | cmc |
- | |
875 | biosdisk_cleanup: |
- | |
876 | ret |
- | |
877 | - | ||
878 | fs_OnBd: |
- | |
879 | pop edx edx edx edx |
- | |
880 | ; edx = disk number, ecx = partition number |
- | |
881 | ; esi+ebp = name |
- | |
882 | call reserve_hd1 |
- | |
883 | add edx, 0x80 |
- | |
884 | mov [hdpos], edx |
- | |
885 | cmp ecx, [BiosDiskPartitions+(edx-0x80)*4] |
- | |
886 | jmp fs_OnHdAndBd |
- | |
887 | - | ||
888 | ; This handler is called when virtual root is enumerated |
- | |
889 | ; and must return all items which can be handled by this. |
- | |
890 | ; It is called several times, first time with eax=0 |
- | |
891 | ; in: eax = 0 for first call, previously returned value for subsequent calls |
- | |
892 | ; out: eax = 0 => no more items |
- | |
893 | ; eax != 0 => buffer pointed to by edi contains name of item |
- | |
894 | - | ||
895 | ; here we enumerate existing BIOS disks /bd |
- | |
896 | biosdisk_enum_root: |
- | |
897 | cmp eax, [NumBiosDisks] |
- | |
898 | jae .end |
- | |
899 | push eax |
- | |
900 | movzx eax, byte [BiosDisksData+eax*4] |
- | |
901 | sub al, 80h |
- | |
902 | push eax |
- | |
903 | mov al, 'b' |
- | |
904 | stosb |
- | |
905 | mov al, 'd' |
- | |
906 | stosb |
- | |
907 | pop eax |
- | |
908 | cmp al, 10 |
- | |
909 | jae .big |
- | |
910 | add al, '0' |
- | |
911 | stosb |
- | |
912 | mov byte [edi], 0 |
- | |
913 | pop eax |
- | |
914 | inc eax |
- | |
915 | ret |
- | |
916 | .end: |
- | |
917 | xor eax, eax |
- | |
918 | ret |
- | |
919 | .big: |
- | |
920 | push ecx edx |
- | |
921 | push -'0' |
- | |
922 | mov ecx, 10 |
- | |
923 | @@: |
- | |
924 | xor edx, edx |
- | |
925 | div ecx |
- | |
926 | push edx |
- | |
927 | test eax, eax |
- | |
928 | jnz @b |
- | |
929 | xchg eax, edx |
- | |
930 | @@: |
- | |
931 | pop eax |
- | |
932 | add al, '0' |
- | |
933 | stosb |
- | |
934 | jnz @b |
- | |
935 | pop edx ecx |
- | |
936 | pop eax |
- | |
937 | inc eax |
- | |
938 | ret |
661 | |
939 | ;----------------------------------------------------------------------------- |
662 | ;----------------------------------------------------------------------------- |
940 | process_replace_file_name: |
663 | process_replace_file_name: |
941 | ; in |
664 | ; in |
942 | ; esi - path with filename(f.70) |
665 | ; esi - path with filename(f.70) |