Subversion Repositories Kolibri OS

Rev

Rev 3683 | 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