Rev 3683 | Rev 7649 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
3683 | GerdtR | 1 | |
2 | org 0x0 ; базовый адрес кода, всегда 0x0 |
||
3 | db 'MENUET01' ; идентификатор исполняемого файла (8 байт) |
||
4 | dd 0x1 ; версия формата заголовка исполняемого файла |
||
5 | dd start ; адрес, на который система передаёт управление |
||
6 | ; после загрузки приложения в память |
||
7 | dd i_end ; размер приложения |
||
8 | dd mem ; Объем используемой памяти, для стека отведем 0х100 байт и выровним на грницу 4 байта |
||
9 | dd mem ; расположим позицию стека в области памяти, сразу за телом программы. Вершина стека в диапазоне памяти, указанном выше |
||
10 | dd 0x0 ; указатель на строку с параметрами. |
||
11 | dd 0;pathprog ;путь и имя проги |
||
12 | |||
13 | |||
3230 | leency | 14 | include "../../proc32.inc" |
15 | include "API.INC" |
||
5098 | clevermous | 16 | include "../../dll.inc" |
3230 | leency | 17 | include '../../develop/libraries/box_lib/trunk/box_lib.mac' |
18 | include '../../develop/libraries/box_lib/load_lib.mac' |
||
19 | |||
20 | |||
21 | mcall 68,11 ;инициализируем кучу |
||
3683 | GerdtR | 22 | test eax,eax |
23 | jz Win1.Exit |
||
24 | stdcall dll.Load, @IMPORT |
||
25 | |||
3230 | leency | 26 | |
27 | |||
28 | ; mov edi,pathprog |
||
29 | ; xor al,al |
||
30 | ; |
||
31 | ; repne scasb |
||
32 | ; |
||
33 | ; dec edi |
||
34 | ; mov esi,WordFile |
||
35 | ; @@: |
||
36 | ; lodsb |
||
37 | ; stosb |
||
38 | ; test al,al |
||
39 | ; jne @b |
||
40 | |||
41 | |||
3683 | GerdtR | 42 | ;test eax,eax ;заодно и получу размер файла |
43 | ;je WordFileOK |
||
44 | |||
3230 | leency | 45 | |
3683 | GerdtR | 46 | ;jmp Win1.Redraw |
47 | |||
3230 | leency | 48 | |
49 | ; stdcall mem.Alloc,dword [fInfo+32] |
||
50 | ; mov ebx,dword [fInfo+32] |
||
51 | ; mov [filBuffer],eax |
||
52 | ; add dword[fInfo+32],eax ;здесь хранится указатель на конец буфера |
||
3683 | GerdtR | 53 | ; ReadFile fStruc,pathprog,ebx,eax,0 |
3230 | leency | 54 | ; test eax,eax |
55 | ; jz Win1.Redraw |
||
56 | ; |
||
57 | ; add al,30h |
||
58 | ; mov [NumErr],al |
||
59 | ; stdcall [mb_create],msgNotFound1,mbThread |
||
60 | ; |
||
61 | |||
62 | |||
63 | |||
64 | Win1.Redraw: |
||
65 | RedrawWinBeg |
||
3683 | GerdtR | 66 | |
3230 | leency | 67 | |
3683 | GerdtR | 68 | mov ebx,(524*10000h+500) |
69 | mov ecx,(548*10000h+200) |
||
70 | mov edx,73FFFFFFh |
||
71 | mov edi,Win1.Caption |
||
72 | int 40h ;окно с прозрачным фонoм |
||
73 | |||
3230 | leency | 74 | |
3683 | GerdtR | 75 | |
3230 | leency | 76 | |
3683 | GerdtR | 77 | mov ebx,[ThreadInfo+3Eh] |
78 | inc ebx |
||
79 | mov ecx,[ThreadInfo+42h] |
||
80 | inc ecx |
||
81 | mov edx,clWhite |
||
82 | int 40h ;а теперь не прозрачным:) |
||
83 | |||
3230 | leency | 84 | |
3683 | GerdtR | 85 | call NextPerev |
86 | stdcall [edit_box_draw],EditIN |
||
87 | RedrawWinEnd |
||
88 | |||
3230 | leency | 89 | |
90 | Win1.Events: |
||
91 | WaitMessage |
||
3683 | GerdtR | 92 | dec eax |
93 | jz Win1.Redraw |
||
94 | dec eax |
||
95 | jz Win1.Key |
||
96 | dec eax |
||
97 | jz Win1.ButtonPress |
||
98 | |||
3230 | leency | 99 | |
3683 | GerdtR | 100 | |
3230 | leency | 101 | |
3683 | GerdtR | 102 | |
3230 | leency | 103 | |
104 | GetButtonPressed |
||
3683 | GerdtR | 105 | |
3230 | leency | 106 | |
3683 | GerdtR | 107 | je Win1.Exit |
108 | |||
3230 | leency | 109 | |
3683 | GerdtR | 110 | |
3230 | leency | 111 | |
112 | GetKeyPressed |
||
3683 | GerdtR | 113 | stdcall [edit_box_key],EditIN |
114 | jmp Win1.FonRedraw |
||
115 | |||
3230 | leency | 116 | |
117 | |||
118 | |||
119 | |||
3683 | GerdtR | 120 | |
3230 | leency | 121 | |
3683 | GerdtR | 122 | mcall 9,ThreadInfo,-1 |
123 | |||
3230 | leency | 124 | |
3683 | GerdtR | 125 | mov ebx,[ThreadInfo+3Eh] |
126 | inc ebx |
||
127 | mov ecx,20 |
||
128 | shl ecx,16 |
||
129 | add ecx,[ThreadInfo+42h] |
||
130 | sub ecx,19 |
||
131 | mov edx,clWhite |
||
132 | int 40h |
||
133 | |||
3230 | leency | 134 | |
3683 | GerdtR | 135 | call NextPerev |
136 | jmp Win1.Events |
||
3230 | leency | 137 | |
138 | |||
139 | |||
140 | |||
3683 | GerdtR | 141 | mov edi,dict;[filBuffer] |
142 | |||
3230 | leency | 143 | |
144 | xor ebx,ebx |
||
3683 | GerdtR | 145 | @@: ;сравнием исх. слово со словом под esi |
146 | mov al,[text+ebx] |
||
147 | test al,al |
||
148 | je endWord |
||
149 | cmp [ebx+edi],al |
||
150 | jne WordNotFound |
||
151 | inc ebx |
||
152 | jmp @b |
||
153 | |||
3230 | leency | 154 | |
155 | cmp byte[ebx+edi],20h |
||
3683 | GerdtR | 156 | jne WordNotFound |
157 | |||
3230 | leency | 158 | |
3683 | GerdtR | 159 | dec edi ;пропускаем пробелы после английского слова |
160 | @@: |
||
3230 | leency | 161 | inc edi |
3683 | GerdtR | 162 | cmp byte[edi],20h |
163 | je @b |
||
164 | |||
3230 | leency | 165 | |
3683 | GerdtR | 166 | CopyWord: ;копируем перевод в строку для вывода |
167 | mov al,[edi+ebx] |
||
168 | cmp al,0Dh |
||
169 | je @f |
||
170 | mov [perevText+ebx],al |
||
171 | inc ebx |
||
172 | jmp CopyWord |
||
173 | @@: |
||
3230 | leency | 174 | mov byte[perevText+ebx],0 |
3683 | GerdtR | 175 | |
3230 | leency | 176 | |
3683 | GerdtR | 177 | ret |
178 | |||
3230 | leency | 179 | |
3683 | GerdtR | 180 | add edi,ebx |
181 | @@: |
||
3230 | leency | 182 | cmp byte[edi],0Dh |
3683 | GerdtR | 183 | je NextWord |
184 | inc edi |
||
185 | cmp edi,SizeDict;dword [fInfo+32] |
||
186 | jae endPerev |
||
187 | jmp @b |
||
188 | |||
3230 | leency | 189 | |
190 | add edi,2 |
||
3683 | GerdtR | 191 | cmp edi,SizeDict;dword [fInfo+32] |
192 | jae endPerev |
||
193 | jmp Perev |
||
194 | endPerev: |
||
3230 | leency | 195 | ret |
3683 | GerdtR | 196 | |
3230 | leency | 197 | |
198 | |||
199 | NextPerev: |
||
200 | mov ecx,Lines |
||
3683 | GerdtR | 201 | mov edi,dict;[filBuffer] |
202 | LinePerev: ;цикл рисования строки |
||
203 | xor ebx,ebx |
||
204 | @@: ;сравнием исх. слово со словом под esi |
||
205 | mov al,[text+ebx] |
||
206 | test al,al |
||
207 | je N_endWord |
||
208 | cmp [ebx+edi],al |
||
209 | jne N_WordNotFound |
||
210 | inc ebx |
||
211 | jmp @b |
||
212 | |||
3230 | leency | 213 | |
214 | cmp ebx,0 |
||
3683 | GerdtR | 215 | jne N_Ppoisk |
216 | ret |
||
217 | |||
3230 | leency | 218 | |
3683 | GerdtR | 219 | add edi,ebx |
220 | @@: |
||
3230 | leency | 221 | dec edi |
3683 | GerdtR | 222 | cmp byte[edi],0Ah |
223 | jne @b |
||
224 | inc edi |
||
225 | |||
3230 | leency | 226 | |
3683 | GerdtR | 227 | xor ebx,ebx |
228 | N_NoDouble: |
||
3230 | leency | 229 | mov al,[text+ebx] |
3683 | GerdtR | 230 | test al,al |
231 | je N_Double |
||
232 | cmp [ebx+edi],al |
||
233 | jne N_NoDblOk |
||
234 | inc ebx |
||
235 | jmp N_NoDouble |
||
236 | |||
3230 | leency | 237 | |
238 | cmp byte[ebx+edi],20h |
||
3683 | GerdtR | 239 | jne N_NoDblOk |
240 | |||
3230 | leency | 241 | |
3683 | GerdtR | 242 | @@: |
3230 | leency | 243 | inc edi |
3683 | GerdtR | 244 | cmp byte[edi],0Ah |
245 | jne @b |
||
246 | add edi,2 |
||
247 | jmp LinePerev |
||
248 | |||
3230 | leency | 249 | |
3683 | GerdtR | 250 | xor ebx,ebx ;копируем результат |
251 | N_CopyWord: |
||
3230 | leency | 252 | mov al,[edi+ebx] |
3683 | GerdtR | 253 | cmp al,20h |
254 | je @f |
||
255 | mov [perevText+ebx],al |
||
256 | inc ebx |
||
257 | jmp N_CopyWord |
||
258 | @@: |
||
3230 | leency | 259 | mov byte[perevText+ebx],0 |
3683 | GerdtR | 260 | add edi,ebx |
261 | |||
3230 | leency | 262 | |
3683 | GerdtR | 263 | sub eax,ecx |
264 | dec eax |
||
265 | shl eax,3 |
||
266 | add eax,45 |
||
267 | push ecx |
||
268 | push edi |
||
269 | OutText 7,ax,perevText |
||
270 | pop edi |
||
271 | pop ecx |
||
272 | |||
3230 | leency | 273 | |
274 | inc edi |
||
3683 | GerdtR | 275 | cmp byte[edi],20h |
276 | je @b |
||
277 | |||
3230 | leency | 278 | |
279 | |||
3683 | GerdtR | 280 | N_CopyPerev: |
3230 | leency | 281 | mov al,[edi+ebx] |
3683 | GerdtR | 282 | cmp al,0Dh |
283 | je @f |
||
284 | mov [perevText+ebx],al |
||
285 | inc ebx |
||
286 | jmp N_CopyPerev |
||
287 | @@: |
||
3230 | leency | 288 | mov byte[perevText+ebx],0 |
3683 | GerdtR | 289 | |
3230 | leency | 290 | |
3683 | GerdtR | 291 | sub eax,ecx |
292 | dec eax |
||
293 | shl eax,3 |
||
294 | add eax,45 |
||
295 | push ecx |
||
296 | push edi |
||
297 | OutText 127,ax,perevText |
||
298 | pop edi |
||
299 | pop ecx |
||
300 | |||
3230 | leency | 301 | |
302 | inc edi |
||
3683 | GerdtR | 303 | cmp byte[edi],0Ah |
304 | jne @b |
||
305 | inc edi |
||
306 | |||
3230 | leency | 307 | |
3683 | GerdtR | 308 | ret |
309 | @@: |
||
3230 | leency | 310 | jmp LinePerev |
3683 | GerdtR | 311 | |
3230 | leency | 312 | |
313 | add edi,ebx |
||
3683 | GerdtR | 314 | @@: |
3230 | leency | 315 | cmp byte[edi],0Dh |
3683 | GerdtR | 316 | je N_NextWord |
317 | inc edi |
||
318 | cmp edi,SizeDict;dword [fInfo+32] |
||
319 | jae N_endPerev |
||
320 | jmp @b |
||
321 | |||
3230 | leency | 322 | |
323 | add edi,2 |
||
3683 | GerdtR | 324 | cmp edi,SizeDict;dword [fInfo+32] |
325 | jae N_endPerev |
||
326 | jmp LinePerev |
||
327 | N_endPerev: |
||
3230 | leency | 328 | ret |
3683 | GerdtR | 329 | |
3230 | leency | 330 | |
331 | ;------------------------------------------------------------------------------- |
||
332 | ;------DATA--------------------------------------------------------------------- |
||
333 | ;------------------------------------------------------------------------------- |
||
334 | ;------------------------------------------------------------------------------- |
||
335 | |||
336 | |||
3683 | GerdtR | 337 | |
3230 | leency | 338 | |
3683 | GerdtR | 339 | |
3230 | leency | 340 | |
3683 | GerdtR | 341 | |
3230 | leency | 342 | |
3683 | GerdtR | 343 | Win1X = 524 |
344 | Win1Y = 548 |
||
345 | Win1W = 500 |
||
346 | Win1H = 200 |
||
347 | |||
3230 | leency | 348 | |
3683 | GerdtR | 349 | Memo.Y = 20 |
350 | Memo.W = 400 |
||
351 | Memo.H = 370 |
||
352 | |||
3230 | leency | 353 | |
3683 | GerdtR | 354 | text,mouse_dd,ed_focus,0,0 |
355 | |||
3230 | leency | 356 | |
357 | |||
358 | |||
359 | ; dw 0 |
||
360 | ; db 'Ошибка',0 |
||
3683 | GerdtR | 361 | ; db 'Файл dictionary.wrd не найден',0 |
362 | ; db 'Ясно',0 |
||
363 | ; db 0 |
||
3230 | leency | 364 | ; |
365 | ; msgNotFound1: |
||
366 | ; dw 0 |
||
367 | ; db '!!!',0 |
||
368 | ; db 'Ошибка чтения ' |
||
3683 | GerdtR | 369 | ; NumErr: db 0 |
3230 | leency | 370 | ; db 0 |
371 | ; db 'Ясно',0 |
||
3683 | GerdtR | 372 | ; db 0 |
3230 | leency | 373 | ; |
374 | ; WordFile db '.wrd',0 |
||
375 | |||
376 | |||
377 | |||
378 | @IMPORT: |
||
379 | library box_lib,'box_lib.obj',msgbox,'msgbox.obj' |
||
380 | import box_lib,\ |
||
3683 | GerdtR | 381 | edit_box_draw,'edit_box',\ |
382 | edit_box_key,'edit_box_key';,\ |
||
383 | ;edit_box_mouse,'edit_box_mouse' |
||
384 | import msgbox,\ |
||
385 | mb_create,'mb_create' |
||
386 | |||
3230 | leency | 387 | |
388 | include 'dictionary.wrd' |
||
389 | |||
390 | |||
391 | |||
392 | |||
393 | |||
394 | ;------------------------------------------------------------------------------- |
||
395 | |||
396 | |||
3683 | GerdtR | 397 | ; m1 dd 0 |
3230 | leency | 398 | ;filBuffer rd 1 |
3683 | GerdtR | 399 | |
3230 | leency | 400 | |
401 | |||
3683 | GerdtR | 402 | ;pathprog |
403 | mouse_dd rd 1 |
||
404 | text rb 40 |
||
405 | perevText rb 300 |
||
406 | ;fStruc rb 30 |
||
407 | ;fInfo rb 40 |
||
408 | mbThread rb 1024 |
||
409 | |||
3230 | leency | 410 | |
411 | |||
3683 | GerdtR | 412 | mem: |
3230 | leency | 413 |