Subversion Repositories Kolibri OS

Rev

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

Rev 1270 Rev 1289
Line 1... Line 1...
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
2
;;                                                              ;;
3
;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;;
3
;; Copyright (C) KolibriOS team 2004-2009. 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: 1270 $
8
$Revision: 1289 $
9
 
9
 
Line 1002... Line 1002...
1002
.ret:
1002
.ret:
1003
	ret
1003
	ret
1004
.set:
1004
.set:
1005
; sysfunction 30.1: [for app] eax=30,ebx=1,ecx->string
1005
; sysfunction 30.1: [for app] eax=30,ebx=1,ecx->string
1006
; for our code: ebx->string to set
1006
; for our code: ebx->string to set
-
 
1007
; use generic resolver with APPDATA.cur_dir as destination
-
 
1008
	push	0x1000
-
 
1009
	push	edx
-
 
1010
	call	get_full_file_name
-
 
1011
	ret
-
 
1012
 
-
 
1013
; in: ebx = file name, [esp+4] = destination, [esp+8] = sizeof destination
-
 
1014
; destroys all registers except ebp,esp
-
 
1015
get_full_file_name:
-
 
1016
	push	ebp
-
 
1017
	mov	esi, [current_slot]
-
 
1018
	mov	esi, [esi+APPDATA.cur_dir]
-
 
1019
	mov	edx, esi
1007
@@:
1020
@@:
1008
	inc	esi
1021
	inc	esi
1009
	cmp	byte [esi-1], 0
1022
	cmp	byte [esi-1], 0
1010
	jnz	@b
1023
	jnz	@b
1011
	dec	esi
1024
	dec	esi
1012
	cmp	byte [ebx], '/'
1025
	cmp	byte [ebx], '/'
1013
	jz	.set_absolute
1026
	jz	.set_absolute
1014
; string gives relative path
1027
; string gives relative path
-
 
1028
	mov	edi, [esp+8]	; destination
1015
.relative:
1029
.relative:
1016
	cmp	byte [ebx], 0
1030
	cmp	byte [ebx], 0
1017
	jz	.set_ok
1031
	jz	.set_ok
1018
	cmp	word [ebx], '.'
1032
	cmp	word [ebx], '.'
1019
	jz	.set_ok
1033
	jz	.set_ok
Line 1030... Line 1044...
1030
	jnz	.doset_relative
1044
	jnz	.doset_relative
1031
@@:
1045
@@:
1032
	dec	esi
1046
	dec	esi
1033
	cmp	byte [esi], '/'
1047
	cmp	byte [esi], '/'
1034
	jnz	@b
1048
	jnz	@b
1035
	mov	byte [esi], 0
-
 
1036
	add	ebx, 3
1049
	add	ebx, 3
1037
	jmp	.relative
1050
	jmp	.relative
-
 
1051
.set_ok:
-
 
1052
	cmp	edx, edi	; is destination equal to APPDATA.cur_dir?
-
 
1053
	jz	.set_ok.cur_dir
-
 
1054
	sub	esi, edx
-
 
1055
	cmp	esi, [esp+12]
-
 
1056
	jb	.set_ok.copy
-
 
1057
.fail:
-
 
1058
	mov	byte [edi], 0
-
 
1059
	xor	eax, eax	; fail
-
 
1060
	pop	ebp
-
 
1061
	ret	8
-
 
1062
.set_ok.copy:
-
 
1063
	mov	ecx, esi
-
 
1064
	mov	esi, edx
-
 
1065
	rep	movsb
-
 
1066
	mov	byte [edi], 0
-
 
1067
.ret.ok:
-
 
1068
	mov	al, 1	; ok
-
 
1069
	pop	ebp
-
 
1070
	ret	8
-
 
1071
.set_ok.cur_dir:
-
 
1072
	mov	byte [esi], 0
-
 
1073
	jmp	.ret.ok
1038
.doset_relative:
1074
.doset_relative:
-
 
1075
	cmp	edx, edi
-
 
1076
	jz	.doset_relative.cur_dir
-
 
1077
	sub	esi, edx
-
 
1078
	cmp	esi, [esp+12]
-
 
1079
	jae	.fail
-
 
1080
	mov	ecx, esi
-
 
1081
	mov	esi, edx
-
 
1082
	mov	edx, edi
-
 
1083
	rep	movsb
-
 
1084
	jmp	.doset_relative.copy
-
 
1085
.doset_relative.cur_dir:
-
 
1086
	mov	edi, esi
-
 
1087
.doset_relative.copy:
1039
	add	edx, 0x1000
1088
	add	edx, [esp+12]
1040
	mov	byte [esi], '/'
1089
	mov	byte [edi], '/'
1041
	inc	esi
1090
	inc	edi
1042
	cmp	esi, edx
1091
	cmp	edi, edx
1043
	jae	.overflow_esi
1092
	jae	.overflow
1044
@@:
1093
@@:
1045
	mov	al, [ebx]
1094
	mov	al, [ebx]
1046
	inc	ebx
1095
	inc	ebx
1047
	mov	[esi], al
-
 
1048
	inc	esi
1096
	stosb
1049
	test	al, al
1097
	test	al, al
1050
	jz	.set_ok
1098
	jz	.ret.ok
1051
	cmp	esi, edx
1099
	cmp	edi, edx
1052
	jb	@b
1100
	jb	@b
1053
.overflow_esi:
1101
.overflow:
1054
	mov	byte [esi-1], 0 	; force null-terminated string
-
 
1055
.set_ok:
1102
	dec	edi
1056
	ret
1103
	jmp	.fail
1057
.set_absolute:
1104
.set_absolute:
1058
	lea	esi, [ebx+1]
1105
	lea	esi, [ebx+1]
1059
	call	process_replace_file_name
1106
	call	process_replace_file_name
1060
	mov	edi, edx
1107
	mov	edi, [esp+8]
-
 
1108
	mov	edx, [esp+12]
1061
	add	edx, 0x1000
1109
	add	edx, edi
1062
.set_copy:
1110
.set_copy:
1063
	lodsb
1111
	lodsb
1064
	stosb
1112
	stosb
1065
	test	al, al
1113
	test	al, al
1066
	jz	.set_part2
1114
	jz	.set_part2
1067
.set_copy_cont:
1115
.set_copy_cont:
1068
	cmp	edi, edx
1116
	cmp	edi, edx
1069
	jb	.set_copy
1117
	jb	.set_copy
1070
.overflow_edi:
1118
	jmp	.overflow
1071
	mov	byte [edi-1], 0
-
 
1072
	ret
-
 
1073
.set_part2:
1119
.set_part2:
1074
	mov	esi, ebp
1120
	mov	esi, ebp
1075
	xor	ebp, ebp
1121
	xor	ebp, ebp
1076
	test	esi, esi
1122
	test	esi, esi
1077
	jz	.set_ok
1123
	jz	.ret.ok
1078
	mov	byte [edi-1], '/'
1124
	mov	byte [edi-1], '/'
1079
	jmp	.set_copy_cont
1125
	jmp	.set_copy_cont