Rev 513 | Rev 525 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 513 | Rev 521 | ||
---|---|---|---|
Line 5... | Line 5... | ||
5 | ; |
5 | ; |
6 | ; SPraid |
6 | ; SPraid |
7 | ; |
7 | ; |
8 | ;------------------------------------------------------------------------- |
8 | ;------------------------------------------------------------------------- |
Line -... | Line 9... | ||
- | 9 | ||
- | 10 | iglobal |
|
9 | 11 | ; pointer to memory for path replace table, |
|
10 | full_file_name_table dd 0 ; 㪠§ â¥«ì ¯ ¬ïâì ¤«ï â ¡«¨æë ¯ã⥩ 4 § ¯¨áì 64 (32 - áâப è ¡«® ¤«ï ¯®¨áª , 32 - áâப è ¡«® ¤«ï § ¬¥ë) |
12 | ; size of one record is 128 bytes: 64 bytes for search pattern + 64 bytes for replace string |
11 | 13 | ||
12 | ; ¯¥à¥¡¨à ¥â ¯® ä ©«ã ¢ ਠâë § ¬¥ |
14 | ; start with one entry: %sys% -> |
- | 15 | full_file_name_table dd sysdir_name |
|
13 | proc full_file_name stdcall,sourc,dest |
16 | .size dd 1 |
14 | locals |
17 | |
15 | tmpsrc rb 260 ; ¢à¥¬¥®¥ åà ¥¨¥ ¯à¥®¡à §®¢ ¨ï |
18 | tmp_file_name_size dd 1 |
- | 19 | endg |
|
16 | endl |
20 | |
- | 21 | uglobal |
|
17 | pushad |
22 | ; Parser_params will initialize: sysdir_name = "%sys%", sysdir_path = |
- | 23 | sysdir_name rb 64 |
|
18 | mov esi,[sourc] |
24 | sysdir_path rb 64 |
- | 25 | tmp_file_name_table dd ? |
|
Line -... | Line 26... | ||
- | 26 | endg |
|
- | 27 | ||
- | 28 | ; ¡¥à¥â ¯ à ¬¥âàë bx_from_load ¨ ¨¨æ¨ «¨§¨àã¥â § ¬¥ã ¤«ï %sys% |
|
- | 29 | Parser_params: |
|
- | 30 | mov eax,[OS_BASE+0x10000+bx_from_load] |
|
- | 31 | mov ecx,sysdir_path |
|
- | 32 | mov [ecx-64],dword '%sys' |
|
- | 33 | mov [ecx-64+4],word '%' |
|
- | 34 | cmp al,'r' ; à ¬ ¤¨áª |
|
- | 35 | jnz @f |
|
- | 36 | mov [ecx],dword 'RD/?' |
|
- | 37 | mov [ecx+3],byte ah |
|
19 | lea edi, [tmpsrc] |
38 | mov [ecx+4],byte 0 |
20 | - | ||
21 | @@: |
- | |
22 | lodsb |
39 | ret |
23 | stosb |
40 | @@: |
24 | or al,al |
- | |
25 | jnz @b |
- | |
26 | 41 | sub al,49 |
|
27 | mov al,[conf_file_loaded] ; âॡã¥âáï ¯à¨ ®¡à 饨¨ ª ¯¥à¢®¬ã ä ©«ã (ª®ä¨£ã) |
42 | mov [ecx],dword 'HD?/' |
28 | or al,al |
- | |
29 | jnz @use_replace |
43 | mov [ecx+2],byte al |
30 | - | ||
31 | jmp full_file_name_exit |
- | |
32 | - | ||
33 | 44 | mov [ecx+4],byte ah |
|
34 | ;-------------------------------- |
- | |
35 | @use_replace: |
45 | mov [ecx+5],dword '/KOL' |
36 | - | ||
37 | xor eax,eax |
46 | mov [ecx+9],dword 'IBRI' |
Line -... | Line 47... | ||
- | 47 | mov [ecx+13],byte 0 |
|
38 | .loop: |
48 | ret |
39 | push eax |
49 | |
40 | 50 | proc load_file_parse_table |
|
- | 51 | stdcall kernel_alloc,0x1000 |
|
41 | imul eax,eax,64 |
52 | mov [tmp_file_name_table],eax |
- | 53 | mov edi,eax |
|
Line 42... | Line 54... | ||
42 | add eax,[full_file_name_table] |
54 | mov esi,sysdir_name |
43 | mov ebx,eax |
- | |
44 | add eax,32 |
- | |
Line 45... | Line 55... | ||
45 | 55 | mov ecx,128/4 |
|
- | 56 | rep movsd |
|
46 | mov cl,[ebx] |
57 | |
- | 58 | invoke ini.enum_keys,conf_fname,conf_path_sect,get_every_key |
|
- | 59 | ||
- | 60 | mov eax,[tmp_file_name_table] |
|
Line -... | Line 61... | ||
- | 61 | mov [full_file_name_table],eax |
|
47 | or cl,cl |
62 | mov eax,[tmp_file_name_size] |
- | 63 | mov [full_file_name_table.size],eax |
|
Line -... | Line 64... | ||
- | 64 | ret |
|
- | 65 | endp |
|
- | 66 | ||
- | 67 | uglobal |
|
- | 68 | def_val_1 db 0 |
|
- | 69 | endg |
|
- | 70 | ||
- | 71 | proc get_every_key stdcall, f_name, sec_name, key_name |
|
- | 72 | mov esi, [key_name] |
|
- | 73 | mov ecx, esi |
|
- | 74 | cmp byte [esi], '/' |
|
- | 75 | jnz @f |
|
- | 76 | inc esi |
|
- | 77 | @@: |
|
- | 78 | mov edi, [tmp_file_name_size] |
|
- | 79 | shl edi, 7 |
|
48 | jz .done |
80 | cmp edi, 0x1000 |
- | 81 | jae .stop_parse |
|
- | 82 | add edi, [tmp_file_name_table] |
|
- | 83 | lea ebx, [edi+64] |
|
49 | 84 | @@: |
|
- | 85 | cmp edi, ebx |
|
50 | lea ecx, [tmpsrc] |
86 | jae .skip_this_key |
51 | mov edx,[dest] |
- | |
52 | 87 | lodsb |
|
53 | stdcall full_file_name_parse, ecx,edx,ebx,eax |
- | |
54 | - | ||
55 | mov esi,[dest] |
- | |
56 | lea edi, [tmpsrc] |
- | |
57 | @@: |
- | |
58 | lodsb |
- | |
Line 59... | Line -... | ||
59 | stosb |
- | |
60 | or al,al |
- | |
61 | jnz @b |
- | |
62 | - | ||
63 | pop eax |
- | |
64 | inc eax |
88 | test al, al |
65 | jmp .loop |
- | |
66 | - | ||
67 | .done: |
- | |
Line -... | Line 89... | ||
- | 89 | jz @f |
|
- | 90 | or al, 20h |
|
- | 91 | stosb |
|
- | 92 | jmp @b |
|
- | 93 | @@: |
|
- | 94 | stosb |
|
68 | pop eax |
95 | |
69 | full_file_name_exit: |
96 | invoke ini.get_str, [f_name],[sec_name],ecx,ebx,64,def_val_1 |
70 | 97 | ||
71 | lea eax, [tmpsrc] |
98 | cmp byte [ebx], '/' |
72 | stdcall full_file_name_parse , eax , [dest], sysdir_ , sys_path |
99 | jnz @f |
73 | popad |
100 | lea esi, [ebx+1] |
- | 101 | mov edi, ebx |
|
74 | ret |
102 | mov ecx, 63 |
75 | endp |
103 | rep movsb |
76 | 104 | @@: |
|
77 | ; |
- | |
78 | ; ८¡à §®¢ âì ¨¬ï ¢ ¯®«®¥. ᫨ ¢ ç «¥ á⮨â |
105 | push ebp |
79 | ; sourc - áá뫪 áâபã... |
106 | mov ebp, [tmp_file_name_table] |
80 | ; dest - áá뫪 ¡ãä¥à ªã¤ १ã«ìâ â «®¦¨âì |
107 | mov ecx, [tmp_file_name_size] |
81 | ; def - áâப è ¡«® ¤«ï ¯®¨áª |
108 | jecxz .noreplace |
- | 109 | mov eax, ecx |
|
- | 110 | dec eax |
|
82 | ; dval - ª 祬㠯à¨à ¢¨¢ âì è ¡«® |
111 | shl eax, 7 |
- | 112 | add ebp, eax |
|
- | 113 | .replace_loop: |
|
- | 114 | mov edi, ebx |
|
- | 115 | mov esi, ebp |
|
83 | proc full_file_name_parse stdcall,sourc,dest,def,dval |
116 | @@: |
84 | ; ¤«ï ®¤®£® |
117 | lodsb |
- | 118 | test al, al |
|
85 | pushad |
119 | jz .doreplace |
- | 120 | mov dl, [edi] |
|
86 | 121 | inc edi |
|
- | 122 | test dl, dl |
|
- | 123 | jz .replace_loop_cont |
|
87 | mov eax,[sourc] |
124 | or dl, 20h |
- | 125 | cmp al, dl |
|
88 | mov ebx,[def] |
126 | jz @b |
- | 127 | jmp .replace_loop_cont |
|
- | 128 | .doreplace: |
|
89 | @@: |
129 | cmp byte [edi], 0 |
- | 130 | jz @f |
|
90 | mov dl,[ebx] |
131 | cmp byte [edi], '/' |
91 | mov cl,[eax] |
132 | jnz .replace_loop_cont |
Line -... | Line 133... | ||
- | 133 | @@: |
|
- | 134 | lea esi, [ebp+64] |
|
- | 135 | call .replace |
|
92 | cmp cl,0 |
136 | jc .skip_this_key2 |
93 | je @@bad_s |
137 | .replace_loop_cont: |
94 | cmp dl,0 |
- | |
95 | je @@good |
- | |
96 | 138 | sub ebp, 128 |
|
97 | or cl,0x20 |
139 | loop .replace_loop |
98 | or dl,0x20 |
140 | .noreplace: |
99 | cmp cl,dl |
- | |
100 | jne @@bad |
- | |
101 | 141 | pop ebp |
|
102 | inc eax |
142 | |
103 | inc ebx |
- | |
104 | jmp @b |
- | |
105 | - | ||
106 | @@bad_s: |
143 | inc [tmp_file_name_size] |
107 | cmp dl,0 |
144 | .skip_this_key: |
108 | je @@good |
- | |
Line 109... | Line 145... | ||
109 | 145 | xor eax, eax |
|
- | 146 | inc eax |
|
- | 147 | ret |
|
110 | @@bad: |
148 | .skip_this_key2: |
- | 149 | pop ebp |
|
111 | mov edi,[dest] |
150 | jmp .skip_this_key |
- | 151 | .stop_parse: |
|
112 | mov esi,[sourc] |
152 | xor eax, eax |
- | 153 | ret |
|
- | 154 | endp |
|
113 | @@: |
155 | |
114 | lodsb |
156 | proc get_every_key.replace |
115 | stosb |
157 | ; in: ebx->destination, esi->first part of name, edi->second part of name |
116 | or al,al |
158 | ; maximum length is 64 bytes |
117 | jnz @b |
159 | ; out: CF=1 <=> overflow |
118 | jmp @@ret_ok |
- | |
119 | 160 | ; 1) allocate temporary buffer in stack |
|
120 | @@good: |
161 | sub esp, 64 |
121 | push eax |
162 | ; 2) save second part of name to temporary buffer |
122 | mov edi,[dest] |
163 | push esi |
123 | mov esi,[dval] |
164 | lea esi, [esp+4] ; esi->tmp buffer |
- | 165 | xchg esi, edi ; edi->tmp buffer, esi->source |
|
- | 166 | @@: |
|
124 | @@: |
167 | lodsb |
125 | lodsb |
- | |
126 | stosb |
- | |
127 | or al,al |
- | |
128 | jnz @b |
- | |
129 | - | ||
130 | @@goodl: |
- | |
131 | pop esi |
- | |
132 | dec edi |
- | |
133 | @@: |
- | |
134 | lodsb |
- | |
135 | stosb |
- | |
136 | or al,al |
- | |
137 | jnz @b |
- | |
138 | - | ||
139 | @@ret_ok: |
- | |
140 | popad |
- | |
141 | ret |
- | |
142 | - | ||
143 | endp |
- | |
144 | - | ||
145 | sys_dir_mess: db 'System dir is ' |
- | |
146 | sys_path: db '/HD0/1/KOLIBRI',0,0 |
- | |
147 | sysdir_ db '%sys%',0 |
168 | stosb |
148 | 169 | test al, al |
|
149 | ; ¡¥à¥â ¯ à ¬¥âàë bx_from_load ¨ ¨áç¨â ä ©« ª®ä¨£ãà 樨 |
- | |
150 | Parser_params: |
- | |
151 | pushad |
- | |
152 | mov ax,[OS_BASE+0x10000+bx_from_load] |
- | |
153 | cmp al,'r' ; à ¬ ¤¨áª |
- | |
154 | jnz @f |
- | |
155 | mov [sys_path],dword '/RD/' |
- | |
156 | mov [sys_path+4],byte ah |
- | |
157 | mov [sys_path+5],word 0 ;0x002F |
- | |
158 | jmp .done |
- | |
159 | @@: |
- | |
160 | sub al,49 |
- | |
161 | mov [sys_path],dword '/HDa' |
- | |
162 | mov [sys_path+3],byte al |
- | |
163 | mov [sys_path+4],byte '/' |
- | |
164 | mov [sys_path+5],byte ah |
- | |
165 | mov [sys_path+6],dword '/KOL' |
- | |
166 | mov [sys_path+10],dword 'IBRI' |
- | |
167 | mov [sys_path+14],word 0 ;0x002F |
170 | jnz @b |
168 | - | ||
169 | .done: |
- | |
170 | popad |
171 | ; 3) copy first part of name to destination |
171 | ret |
- | |
172 | - | ||
173 | proc load_file_parse_table |
- | |
174 | pushad |
- | |
175 | stdcall kernel_alloc,0x1000 |
- | |
176 | mov [full_file_name_table],eax |
- | |
177 | - | ||
178 | invoke ini.enum_keys,conf_fname,conf_path_sect,get_every_key |
- | |
179 | - | ||
180 | mov eax,[loading_counter] |
172 | pop esi |
181 | imul eax,eax,64 |
- | |
182 | add eax,[full_file_name_table] |
- | |
183 | mov [eax],byte 0 |
- | |
184 | popad |
173 | mov edi, ebx |
185 | ret |
- | |
186 | endp |
174 | @@: |
- | 175 | lodsb |
|
- | 176 | test al, al |
|
187 | 177 | jz @f |
|
188 | loading_counter dd 0 |
178 | stosb |
189 | def_val_1 db 0 |
179 | jmp @b |
190 | 180 | @@: |
|
191 | proc get_every_key stdcall,f_name, sec_name, key_name |
- | |
192 | pushad |
- | |
193 | mov esi,[key_name] |
181 | ; 4) restore second part of name from temporary buffer to destination |
194 | mov edi,[loading_counter] |
182 | ; (may cause overflow) |
195 | imul edi,edi,64 |
183 | lea edx, [ebx+64] ; limit of destination |
196 | add edi,[full_file_name_table] |
184 | mov esi, esp |
197 | @@: |
- | |
198 | lodsb |
- | |
199 | stosb |
185 | @@: |
200 | or al,al |
- | |
201 | jnz @b |
186 | cmp edi, edx |
202 | 187 | jae .overflow |
|
203 | mov eax,[loading_counter] |
188 | lodsb |
204 | imul eax,eax,64 |
189 | stosb |
205 | add eax,[full_file_name_table] |
- |