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