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 |