Subversion Repositories Kolibri OS

Rev

Rev 1505 | Rev 1689 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1505 Rev 1664
Line 1... Line -...
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
 
2
;;                                                              ;;
1
;;                                                              ;;
3
;; Copyright (C) KolibriOS team 2004-2009. All rights reserved. ;;
2
;; Copyright (C) KolibriOS team 2004-2009. All rights reserved. ;;
4
;; Distributed under terms of the GNU General Public License    ;;
3
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
4
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line 7... Line 6...
7
 
6
 
Line 8... Line 7...
8
$Revision: 1491 $
7
$Revision: 1664 $
9
 
8
 
Line 39... Line 38...
39
	dd	fs_OnHd2
38
	dd	fs_OnHd2
40
	dd	fs_NextHd2
39
	dd	fs_NextHd2
41
	db	3,'hd3'
40
	db	3,'hd3'
42
	dd	fs_OnHd3
41
	dd	fs_OnHd3
43
	dd	fs_NextHd3
42
	dd	fs_NextHd3
44
;**********************************************
-
 
45
	db	3,'cd0'
-
 
46
	dd	fs_OnCd0
-
 
47
	dd	fs_NextCd
-
 
48
	db	3,'cd1'
-
 
49
	dd	fs_OnCd1
-
 
50
	dd	fs_NextCd
-
 
51
	db	3,'cd2'
-
 
52
	dd	fs_OnCd2
-
 
53
	dd	fs_NextCd
-
 
54
	db	3,'cd3'
-
 
55
	dd	fs_OnCd3
-
 
56
	dd	fs_NextCd
-
 
57
;***********************************************
-
 
58
	db	0
43
	db	0
Line 59... Line 44...
59
 
44
 
60
 
45
 
Line 69... Line 54...
69
	db	'hd1',0
54
	db	'hd1',0
70
	dd	fs_HasHd2
55
	dd	fs_HasHd2
71
	db	'hd2',0
56
	db	'hd2',0
72
	dd	fs_HasHd3
57
	dd	fs_HasHd3
73
	db	'hd3',0
58
	db	'hd3',0
74
;**********************************************
-
 
75
	dd	fs_HasCd0
-
 
76
	db	'cd0',0
-
 
77
	dd	fs_HasCd1
-
 
78
	db	'cd1',0
-
 
79
	dd	fs_HasCd2
-
 
80
	db	'cd2',0
-
 
81
	dd	fs_HasCd3
-
 
82
	db	'cd3',0
-
 
83
;**********************************************
-
 
84
	dd	0
59
	dd	0
Line 85... Line 60...
85
 
60
 
86
fs_additional_handlers:
61
fs_additional_handlers:
87
        dd      biosdisk_handler, biosdisk_enum_root
62
        dd      biosdisk_handler, biosdisk_enum_root
Line 165... Line 140...
165
	mov	esi, [edi+4]
140
	mov	esi, [edi+4]
166
.maindir_noesi:
141
.maindir_noesi:
167
	cmp	dword [ebx], 1
142
	cmp	dword [ebx], 1
168
	jnz	.access_denied
143
	jnz	.access_denied
169
	xor	eax, eax
144
	xor	eax, eax
170
	mov	ebp, [ebx+12]			;количество блоков для считывания
145
	mov	ebp, [ebx+12]			;êîëè÷åñòâî áëîêîâ äëÿ ñ÷èòûâàíèÿ
171
	mov	edx, [ebx+16]			;куда записывать рузельтат
146
	mov	edx, [ebx+16]			;êóäà çàïèñûâàòü ðóçåëüòàò
172
    ;    add     edx, std_application_base_address
147
    ;    add     edx, std_application_base_address
173
	push	dword [ebx+4]	; first block
148
	push	dword [ebx+4]	; first block
174
	mov	ebx, [ebx+8]	; flags
149
	mov	ebx, [ebx+8]	; flags
175
; ebx=flags, [esp]=first block, ebp=number of blocks, edx=return area, esi='Next' handler
150
; ebx=flags, [esp]=first block, ebp=number of blocks, edx=return area, esi='Next' handler
176
	mov	edi, edx
151
	mov	edi, edx
Line 569... Line 544...
569
	dd	0
544
	dd	0
570
	dd	fs_HdDelete
545
	dd	fs_HdDelete
571
	dd	fs_HdCreateFolder
546
	dd	fs_HdCreateFolder
572
fs_NumHdServices = ($ - fs_HdServices)/4
547
fs_NumHdServices = ($ - fs_HdServices)/4
Line 573... Line -...
573
 
-
 
574
;*******************************************************
-
 
575
fs_OnCd0:
-
 
576
	call	reserve_cd
-
 
577
	mov  [ChannelNumber],1
-
 
578
	mov  [DiskNumber],0
-
 
579
	push	6
-
 
580
	push	1
-
 
581
	jmp	fs_OnCd
-
 
582
fs_OnCd1:
-
 
583
	call	reserve_cd
-
 
584
	mov  [ChannelNumber],1
-
 
585
	mov  [DiskNumber],1
-
 
586
	push	4
-
 
587
	push	2
-
 
588
	jmp	fs_OnCd
-
 
589
fs_OnCd2:
-
 
590
	call	reserve_cd
-
 
591
	mov  [ChannelNumber],2
-
 
592
	mov  [DiskNumber],0
-
 
593
	push	2
-
 
594
	push	3
-
 
595
	jmp	fs_OnCd
-
 
596
fs_OnCd3:
-
 
597
	call	reserve_cd
-
 
598
	mov  [ChannelNumber],2
-
 
599
	mov  [DiskNumber],1
-
 
600
	push	0
-
 
601
	push	4
-
 
602
fs_OnCd:
-
 
603
	call	reserve_cd_channel
-
 
604
	pop	eax
-
 
605
	mov	[cdpos], eax
-
 
606
	pop	eax
-
 
607
	cmp	ecx, 0x100
-
 
608
	jae	.nf
-
 
609
	push	ecx ebx
-
 
610
	mov	cl,al
-
 
611
	mov	bl,[DRIVE_DATA+1]
-
 
612
	shr	bl,cl
-
 
613
	test	bl,2
-
 
614
	pop	ebx ecx
-
 
615
 
-
 
616
	jnz	@f
-
 
617
.nf:
-
 
618
	call	free_cd_channel
-
 
619
	and    [cd_status], 0
-
 
620
	mov	dword [image_of_eax], 5       ; not found
-
 
621
	ret
-
 
622
@@:
-
 
623
	mov	ecx, [ebx+12]
-
 
624
	mov	edx, [ebx+16]
-
 
625
    ;    add     edx, std_application_base_address
-
 
626
	mov	eax, [ebx]
-
 
627
	cmp	eax,fs_NumCdServices
-
 
628
	jae	 .not_impl
-
 
629
	add	ebx, 4
-
 
630
	call	dword [fs_CdServices + eax*4]
-
 
631
	call	free_cd_channel
-
 
632
	and	[cd_status], 0
-
 
633
	mov	[image_of_eax], eax
-
 
634
	mov	[image_of_ebx], ebx
-
 
635
	ret
-
 
636
.not_impl:
-
 
637
	call	free_cd_channel
-
 
638
	and	[cd_status], 0
-
 
639
	mov	dword [image_of_eax], 2       ; not implemented
-
 
640
	ret
-
 
641
 
-
 
642
fs_CdServices:
-
 
643
	dd	fs_CdRead
-
 
644
	dd	fs_CdReadFolder
-
 
645
	dd	fs_NotImplemented
-
 
646
	dd	fs_NotImplemented
-
 
647
	dd	fs_NotImplemented
-
 
648
	dd	fs_CdGetFileInfo
-
 
649
	dd	fs_NotImplemented
-
 
650
	dd	0
-
 
651
	dd	fs_NotImplemented
-
 
652
	dd	fs_NotImplemented
-
 
653
fs_NumCdServices = ($ - fs_CdServices)/4
-
 
654
 
-
 
Line 655... Line 548...
655
;*******************************************************
548
 
656
 
549
 
657
fs_HasRamdisk:
550
fs_HasRamdisk:
Line 1139... Line 1032...
1139
	xor	ebp, ebp
1032
	xor	ebp, ebp
1140
	test	esi, esi
1033
	test	esi, esi
1141
	jz	.ret.ok
1034
	jz	.ret.ok
1142
	mov	byte [edi-1], '/'
1035
	mov	byte [edi-1], '/'
1143
	jmp	.set_copy_cont
1036
	jmp	.set_copy_cont
-
 
1037
 
-
 
1038
; ===============  moved from fs/iso9660.inc
-
 
1039
 
-
 
1040
char_todown:
-
 
1041
; convert character to uppercase, using cp866 encoding
-
 
1042
; in: al=symbol
-
 
1043
; out: al=converted symbol
-
 
1044
	cmp	al, 'A'
-
 
1045
	jb	.ret
-
 
1046
	cmp	al, 'Z'
-
 
1047
	jbe	.az
-
 
1048
	cmp	al, '€'
-
 
1049
	jb	.ret
-
 
1050
	cmp	al, ''
-
 
1051
	jb	.rus1
-
 
1052
	cmp	al, 'Ÿ'
-
 
1053
	ja	.ret
-
 
1054
; 0x90-0x9F -> 0xE0-0xEF
-
 
1055
	add	al, 'à'-''
-
 
1056
.ret:
-
 
1057
	ret
-
 
1058
.rus1:
-
 
1059
; 0x80-0x8F -> 0xA0-0xAF
-
 
1060
.az:
-
 
1061
	add	al, 0x20
-
 
1062
	ret
-
 
1063
 
-
 
1064
uni2ansi_char:
-
 
1065
; convert UNICODE character in al to ANSI character in ax, using cp866 encoding
-
 
1066
; in: ax=UNICODE character
-
 
1067
; out: al=converted ANSI character
-
 
1068
	cmp	ax, 0x80
-
 
1069
	jb	.ascii
-
 
1070
	cmp	ax, 0x401
-
 
1071
	jz	.yo1
-
 
1072
	cmp	ax, 0x451
-
 
1073
	jz	.yo2
-
 
1074
	cmp	ax, 0x410
-
 
1075
	jb	.unk
-
 
1076
	cmp	ax, 0x440
-
 
1077
	jb	.rus1
-
 
1078
	cmp	ax, 0x450
-
 
1079
	jb	.rus2
-
 
1080
.unk:
-
 
1081
	mov	al, '_'
-
 
1082
	jmp	.doit
-
 
1083
.yo1:
-
 
1084
	mov	al, 'ð'
-
 
1085
	jmp	.doit
-
 
1086
.yo2:
-
 
1087
	mov	al, 'ñ'
-
 
1088
	jmp	.doit
-
 
1089
.rus1:
-
 
1090
; 0x410-0x43F -> 0x80-0xAF
-
 
1091
	add	al, 0x70
-
 
1092
	jmp	.doit
-
 
1093
.rus2:
-
 
1094
; 0x440-0x44F -> 0xE0-0xEF
-
 
1095
	add	al, 0xA0
-
 
1096
.ascii:
-
 
1097
.doit:
-
 
1098
	ret