Subversion Repositories Kolibri OS

Rev

Rev 509 | Rev 513 | 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
 
512 spraid 10
full_file_name_table dd 0		; указатель на память для таблицы путей 4К   запись 64 (32 - строка шаблон для поиска, 32 - строка шаблон для замены)
11
 
488 spraid 12
; перебирает по файлу варианты замен
13
proc full_file_name stdcall,sourc,dest
14
locals
15
  tmpsrc rb 60	; временное хранение преобразования
501 serge 16
endl
488 spraid 17
  pushad
18
  mov esi,[sourc]
512 spraid 19
  lea edi, [tmpsrc]
501 serge 20
 
488 spraid 21
@@:
22
  lodsb
23
  stosb
24
  or al,al
25
  jnz @b
26
 
27
  mov al,[conf_file_loaded]					; требуется при обращении к первому файлу (конфигу)
28
  or al,al
29
  jnz @use_replace
501 serge 30
 
488 spraid 31
  jmp full_file_name_exit
32
 
501 serge 33
 
488 spraid 34
;--------------------------------
35
 @use_replace:
501 serge 36
 
488 spraid 37
  xor eax,eax
38
.loop:
39
  push eax
512 spraid 40
 
41
  imul eax,eax,64
42
  add eax,[full_file_name_table]
43
  mov ebx,eax
44
  add eax,32
45
 
46
  mov cl,[ebx]
47
  or cl,cl
488 spraid 48
  jz .done
49
 
512 spraid 50
  lea ecx, [tmpsrc]
501 serge 51
  mov edx,[dest]
488 spraid 52
 
512 spraid 53
  stdcall full_file_name_parse, ecx,edx,ebx,eax
501 serge 54
 
488 spraid 55
  mov esi,[dest]
501 serge 56
  lea edi, [tmpsrc]
488 spraid 57
@@:
58
  lodsb
59
  stosb
60
  or al,al
61
  jnz @b
501 serge 62
 
488 spraid 63
  pop eax
64
  inc eax
65
  jmp .loop
501 serge 66
 
67
.done:
488 spraid 68
  pop eax
69
full_file_name_exit:
70
 
501 serge 71
  lea eax, [tmpsrc]
488 spraid 72
  stdcall full_file_name_parse , eax , [dest], sysdir_ , sys_path
73
  popad
74
  ret
75
endp
76
 
77
;
78
;  Преобразовать имя в полное. Если в начале стоит
79
;     sourc - ссылка на строку...
80
;	  dest - ссылка на буфер куда результат ложить
81
;	  def - строка шаблон для поиска
82
;	  dval - к чему приравнивать шаблон
83
proc full_file_name_parse stdcall,sourc,dest,def,dval
84
  ; для одного
85
  pushad
86
 
87
  mov eax,[sourc]
88
  mov ebx,[def]
89
@@:
90
  mov dl,[ebx]
91
  mov cl,[eax]
92
  cmp cl,0
93
  je  @@bad_s
94
  cmp dl,0
95
  je  @@good
501 serge 96
 
488 spraid 97
  or cl,0x20
98
  or dl,0x20
99
  cmp cl,dl
100
  jne  @@bad
101
 
102
  inc eax
103
  inc ebx
104
  jmp @b
105
 
106
@@bad_s:
107
  cmp dl,0
501 serge 108
  je  @@good
109
 
488 spraid 110
@@bad:
111
  mov edi,[dest]
112
  mov esi,[sourc]
113
@@:
114
  lodsb
115
  stosb
116
  or al,al
117
  jnz	@b
118
  jmp @@ret_ok
119
 
120
@@good:
121
  push eax
122
  mov edi,[dest]
123
  mov esi,[dval]
124
@@:
125
  lodsb
126
  stosb
127
  or al,al
501 serge 128
  jnz	@b
488 spraid 129
 
501 serge 130
@@goodl:
488 spraid 131
  pop esi
132
  dec edi
133
@@:
134
  lodsb
501 serge 135
  stosb
488 spraid 136
  or al,al
501 serge 137
  jnz	@b
488 spraid 138
 
139
@@ret_ok:
140
  popad
141
  ret
142
 
501 serge 143
endp
144
 
488 spraid 145
 sys_dir_mess: db 'System dir is '
146
 sys_path: db '/HD0/1/KOLIBRI',0,0
147
 sysdir_ db '%sys%',0
148
 
149
; берет параметры bx_from_load и исчит файл конфигурации
150
Parser_params:
151
  pushad
509 diamond 152
  mov ax,[OS_BASE+0x10000+bx_from_load]
488 spraid 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
501 serge 168
 
488 spraid 169
.done:
170
  popad
171
  ret
512 spraid 172
 
173
proc load_file_parse_table
174
  pushad
175
  stdcall kernel_alloc,0x1000
176
  mov [full_file_name_table],eax
501 serge 177
 
512 spraid 178
  invoke ini.enum_keys,conf_fname,conf_path_sect,get_every_key
179
 
180
  mov eax,[loading_counter]
181
  imul eax,eax,64
182
  add eax,[full_file_name_table]
183
  mov [eax],byte 0
184
  popad
185
  ret
186
endp
187
 
188
loading_counter dd 0
189
def_val_1 db 0
190
 
191
proc get_every_key stdcall,f_name, sec_name, key_name
192
  pushad
193
  mov esi,[key_name]
194
  mov edi,[loading_counter]
195
  imul edi,edi,64
196
  add edi,[full_file_name_table]
197
@@:
198
  lodsb
199
  stosb
200
  or al,al
201
  jnz	@b
202
 
203
  mov eax,[loading_counter]
204
  imul eax,eax,64
205
  add eax,[full_file_name_table]
206
  add eax,32
207
  mov ebx,[key_name]
208
  invoke ini.get_str,conf_fname,conf_path_sect,ebx,eax,32,def_val_1
209
 
210
  inc dword [loading_counter]
211
 
212
  popad
213
  mov eax,1
214
  ret
215
endp
216