Rev 501 | Rev 512 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
488 | spraid | 1 | ;------------------------------------------------------------------------- |
2 | ; |
||
3 | ; Замена имен файлов |
||
4 | ; |
||
5 | ; |
||
6 | ; SPraid |
||
7 | ; |
||
8 | ;------------------------------------------------------------------------- |
||
9 | |||
10 | ; перебирает по файлу варианты замен |
||
11 | proc full_file_name stdcall,sourc,dest |
||
12 | locals |
||
13 | param rb 60 |
||
14 | val rb 60 |
||
15 | tmpsrc rb 60 ; временное хранение преобразования |
||
501 | serge | 16 | endl |
488 | spraid | 17 | pushad |
18 | |||
501 | serge | 19 | |
488 | spraid | 20 | mov esi,[sourc] |
501 | serge | 21 | ; mov edi,ebp |
22 | ; add edi,tmpsrc-ebp |
||
23 | lea edi, [tmpsrc] |
||
24 | |||
488 | spraid | 25 | @@: |
26 | lodsb |
||
27 | stosb |
||
28 | or al,al |
||
29 | jnz @b |
||
30 | |||
31 | mov al,[conf_file_loaded] ; требуется при обращении к первому файлу (конфигу) |
||
32 | or al,al |
||
33 | jnz @use_replace |
||
501 | serge | 34 | |
488 | spraid | 35 | jmp full_file_name_exit |
36 | |||
501 | serge | 37 | |
488 | spraid | 38 | ;-------------------------------- |
39 | @use_replace: |
||
501 | serge | 40 | |
488 | spraid | 41 | xor eax,eax |
42 | .loop: |
||
43 | push eax |
||
501 | serge | 44 | ; mov ebx,ebp |
45 | ; add ebx,param-ebp |
||
46 | ; mov ecx,ebp |
||
47 | ; add ecx,val-ebp |
||
48 | lea ebx, [param] |
||
49 | lea ecx, [val] |
||
488 | spraid | 50 | invoke ini.get_par,sect, ebx, ecx, eax |
51 | |||
52 | mov bl,[param] |
||
53 | or bl,bl |
||
54 | jz .done |
||
55 | |||
501 | serge | 56 | ; mov eax,ebp |
57 | ; add eax,tmpsrc-ebp |
||
58 | ; mov ebx,ebp |
||
59 | ; add ebx,param-ebp |
||
60 | ; mov ecx,ebp |
||
61 | ; add ecx,val-ebp |
||
62 | lea eax, [tmpsrc] |
||
63 | lea ebx, [param] |
||
64 | lea ecx, [val] |
||
65 | mov edx,[dest] |
||
488 | spraid | 66 | |
67 | stdcall full_file_name_parse, eax,edx,ebx,ecx |
||
501 | serge | 68 | |
488 | spraid | 69 | mov esi,[dest] |
501 | serge | 70 | ; mov edi,ebp |
71 | ; add edi,tmpsrc-ebp |
||
72 | lea edi, [tmpsrc] |
||
488 | spraid | 73 | @@: |
74 | lodsb |
||
75 | stosb |
||
76 | or al,al |
||
77 | jnz @b |
||
501 | serge | 78 | |
488 | spraid | 79 | pop eax |
80 | inc eax |
||
81 | jmp .loop |
||
501 | serge | 82 | |
83 | .done: |
||
488 | spraid | 84 | pop eax |
85 | full_file_name_exit: |
||
86 | |||
501 | serge | 87 | ; mov eax,ebp |
88 | ; add eax,tmpsrc-ebp |
||
89 | lea eax, [tmpsrc] |
||
488 | spraid | 90 | stdcall full_file_name_parse , eax , [dest], sysdir_ , sys_path |
91 | popad |
||
92 | ret |
||
93 | endp |
||
94 | |||
95 | sect: db 'path',0 |
||
96 | |||
97 | ; |
||
98 | ; Преобразовать имя в полное. Если в начале стоит |
||
99 | ; sourc - ссылка на строку... |
||
100 | ; dest - ссылка на буфер куда результат ложить |
||
101 | ; def - строка шаблон для поиска |
||
102 | ; dval - к чему приравнивать шаблон |
||
103 | proc full_file_name_parse stdcall,sourc,dest,def,dval |
||
104 | ; для одного |
||
105 | pushad |
||
106 | |||
107 | mov eax,[sourc] |
||
108 | mov ebx,[def] |
||
109 | @@: |
||
110 | mov dl,[ebx] |
||
111 | mov cl,[eax] |
||
112 | cmp cl,0 |
||
113 | je @@bad_s |
||
114 | cmp dl,0 |
||
115 | je @@good |
||
501 | serge | 116 | |
488 | spraid | 117 | or cl,0x20 |
118 | or dl,0x20 |
||
119 | cmp cl,dl |
||
120 | jne @@bad |
||
121 | |||
122 | inc eax |
||
123 | inc ebx |
||
124 | jmp @b |
||
125 | |||
126 | @@bad_s: |
||
127 | cmp dl,0 |
||
501 | serge | 128 | je @@good |
129 | |||
488 | spraid | 130 | @@bad: |
131 | mov edi,[dest] |
||
132 | mov esi,[sourc] |
||
133 | @@: |
||
134 | lodsb |
||
135 | stosb |
||
136 | or al,al |
||
137 | jnz @b |
||
138 | jmp @@ret_ok |
||
139 | |||
140 | @@good: |
||
141 | push eax |
||
142 | mov edi,[dest] |
||
143 | mov esi,[dval] |
||
144 | @@: |
||
145 | lodsb |
||
146 | stosb |
||
147 | or al,al |
||
501 | serge | 148 | jnz @b |
488 | spraid | 149 | |
501 | serge | 150 | @@goodl: |
488 | spraid | 151 | pop esi |
152 | dec edi |
||
153 | @@: |
||
154 | lodsb |
||
501 | serge | 155 | stosb |
488 | spraid | 156 | or al,al |
501 | serge | 157 | jnz @b |
488 | spraid | 158 | |
159 | @@ret_ok: |
||
160 | popad |
||
161 | ret |
||
162 | |||
501 | serge | 163 | endp |
164 | |||
488 | spraid | 165 | sys_dir_mess: db 'System dir is ' |
166 | sys_path: db '/HD0/1/KOLIBRI',0,0 |
||
167 | sysdir_ db '%sys%',0 |
||
168 | |||
169 | ; берет параметры bx_from_load и исчит файл конфигурации |
||
170 | Parser_params: |
||
171 | pushad |
||
509 | diamond | 172 | mov ax,[OS_BASE+0x10000+bx_from_load] |
488 | spraid | 173 | cmp al,'r' ; рам диск |
174 | jnz @f |
||
175 | mov [sys_path],dword '/RD/' |
||
176 | mov [sys_path+4],byte ah |
||
177 | mov [sys_path+5],word 0 ;0x002F |
||
178 | jmp .done |
||
179 | @@: |
||
180 | sub al,49 |
||
181 | mov [sys_path],dword '/HDa' |
||
182 | mov [sys_path+3],byte al |
||
183 | mov [sys_path+4],byte '/' |
||
184 | mov [sys_path+5],byte ah |
||
185 | mov [sys_path+6],dword '/KOL' |
||
186 | mov [sys_path+10],dword 'IBRI' |
||
187 | mov [sys_path+14],word 0 ;0x002F |
||
501 | serge | 188 | |
488 | spraid | 189 | .done: |
190 | popad |
||
191 | ret |
||
501 | serge | 192 |