use32 ; âà á«ïâ®à, ¨á¯®«ì§ãî騩 32 à §àï¤ëå ª®¬ ¤ë
org 0x0 ; ¡ §®¢ë© ¤à¥á ª®¤ , ¢á¥£¤ 0x0
db 'MENUET01' ; ¨¤¥â¨ä¨ª â®à ¨á¯®«ï¥¬®£® ä ©« (8 ¡ ©â)
dd 0x1 ; ¢¥àá¨ï ä®à¬ â § £®«®¢ª ¨á¯®«ï¥¬®£® ä ©«
dd start ; ¤à¥á, ª®â®àë© á¨á⥬ ¯¥à¥¤ ñâ ã¯à ¢«¥¨¥
; ¯®á«¥ § £à㧪¨ ¯à¨«®¦¥¨ï ¢ ¯ ¬ïâì
dd i_end ; à §¬¥à ¯à¨«®¦¥¨ï
dd mem ; ¡ê¥¬ ¨á¯®«ì§ã¥¬®© ¯ ¬ïâ¨, ¤«ï á⥪ ®â¢¥¤¥¬ 0å100 ¡ ©â ¨ ¢ë஢¨¬ £à¨æã 4 ¡ ©â
dd mem ; à ᯮ«®¦¨¬ ¯®§¨æ¨î á⥪ ¢ ®¡« á⨠¯ ¬ïâ¨, áà §ã § ⥫®¬ ¯à®£à ¬¬ë. ¥àè¨ á⥪ ¢ ¤¨ ¯ §®¥ ¯ ¬ïâ¨, 㪠§ ®¬ ¢ëè¥
dd 0x0 ; 㪠§ ⥫ì áâபã á ¯ à ¬¥âà ¬¨.
dd 0;pathprog ;¯ãâì ¨ ¨¬ï ¯à®£¨
include "../../macros.inc"
include "../../proc32.inc"
include "API.INC"
include "../../dll.inc"
include '../../develop/libraries/box_lib/trunk/box_lib.mac'
include '../../develop/libraries/box_lib/load_lib.mac'
start:
mcall 68,11 ;¨¨æ¨ «¨§¨à㥬 ªãçã
test eax,eax
jz Win1.Exit
stdcall dll.Load, @IMPORT
; mov ecx,1024
; mov edi,pathprog
; xor al,al
;
; repne scasb
;
; dec edi
; mov esi,WordFile
; @@:
; lodsb
; stosb
; test al,al
; jne @b
;GetFileInfo fStruc,pathprog,fInfo ;¯à®¢¥àª «¨ç¨¥ ä ©«
;test eax,eax ;§ ®¤® ¨ ¯®«ãçã à §¬¥à ä ©«
;je WordFileOK
;stdcall [mb_create],msgNotFound,mbThread
;jmp Win1.Redraw
;WordFileOK:
; stdcall mem.Alloc,dword [fInfo+32]
; mov ebx,dword [fInfo+32]
; mov [filBuffer],eax
; add dword[fInfo+32],eax ;§¤¥áì åà ¨âáï 㪠§ â¥«ì ª®¥æ ¡ãä¥à
; ReadFile fStruc,pathprog,ebx,eax,0
; test eax,eax
; jz Win1.Redraw
;
; add al,30h
; mov [NumErr],al
; stdcall [mb_create],msgNotFound1,mbThread
;
align 4
Win1.Redraw:
RedrawWinBeg
xor eax,eax
mov ebx,(524*10000h+500)
mov ecx,(548*10000h+200)
mov edx,73FFFFFFh
mov edi,Win1.Caption
int 40h ;®ª® á ¯à®§à çë¬ ä®o¬
mcall 9,ThreadInfo,-1
mov eax,13
mov ebx,[ThreadInfo+3Eh]
inc ebx
mov ecx,[ThreadInfo+42h]
inc ecx
mov edx,clWhite
int 40h ; ⥯¥àì ¥ ¯à®§à çë¬:)
call Perevod ; ¢ ¯¥à¥à¨á®¢ª¥ áà §ã ¯¥à¥¢®¤¨¬ ¢¢¥¤ñ®¥ á«®¢®
call NextPerev
stdcall [edit_box_draw],EditIN
RedrawWinEnd
align 4
Win1.Events:
WaitMessage
dec eax
jz Win1.Redraw
dec eax
jz Win1.Key
dec eax
jz Win1.ButtonPress
;stdcall [edit_box_mouse],EditIN
jmp Win1.Events
Win1.ButtonPress:
GetButtonPressed
cmp ah,idbExit
je Win1.Exit
jmp Win1.Events
Win1.Key:
GetKeyPressed
stdcall [edit_box_key],EditIN
jmp Win1.FonRedraw
Win1.Exit:
ExitProcess
Win1.FonRedraw: ;¯¥à¥à¨á®¢ª ®¡« á⨠¢ë¢®¤
mcall 9,ThreadInfo,-1
mov eax,13
mov ebx,[ThreadInfo+3Eh]
inc ebx
mov ecx,20
shl ecx,16
add ecx,[ThreadInfo+42h]
sub ecx,19
mov edx,clWhite
int 40h
call Perevod
call NextPerev
jmp Win1.Events
;-------------------------------------------------------------------------------
Perevod: ;á ¬ ¯¥à¥¢®¤
mov edi,dict;[filBuffer]
Perev:
xor ebx,ebx
@@: ;áà ¢¨¥¬ ¨áå. á«®¢® á® á«®¢®¬ ¯®¤ esi
mov al,[text+ebx]
test al,al
je endWord
cmp [ebx+edi],al
jne WordNotFound
inc ebx
jmp @b
endWord:
cmp byte[ebx+edi],20h
jne WordNotFound
add edi,ebx
dec edi ;¯à®¯ã᪠¥¬ ¯à®¡¥«ë ¯®á«¥ £«¨©áª®£® á«®¢
@@:
inc edi
cmp byte[edi],20h
je @b
xor ebx,ebx
CopyWord: ;ª®¯¨à㥬 ¯¥à¥¢®¤ ¢ áâப㠤«ï ¢ë¢®¤
mov al,[edi+ebx]
cmp al,0Dh
je @f
mov [perevText+ebx],al
inc ebx
jmp CopyWord
@@:
mov byte[perevText+ebx],0
OutText 7,25,perevText
ret
WordNotFound: ;¥á«¨ á«®¢® ¥ ¯®¤®è«®
add edi,ebx
@@:
cmp byte[edi],0Dh
je NextWord
inc edi
cmp edi,SizeDict;dword [fInfo+32]
jae endPerev
jmp @b
NextWord:
add edi,2
cmp edi,SizeDict;dword [fInfo+32]
jae endPerev
jmp Perev
endPerev:
ret
;-------------------------------------------------------------------------------
NextPerev:
mov ecx,Lines
mov edi,dict;[filBuffer]
LinePerev: ;横« à¨á®¢ ¨ï áâப¨
xor ebx,ebx
@@: ;áà ¢¨¥¬ ¨áå. á«®¢® á® á«®¢®¬ ¯®¤ esi
mov al,[text+ebx]
test al,al
je N_endWord
cmp [ebx+edi],al
jne N_WordNotFound
inc ebx
jmp @b
N_endWord:
cmp ebx,0
jne N_Ppoisk
ret
N_Ppoisk: ;¯®¨áª ç « áâப¨
add edi,ebx
@@:
dec edi
cmp byte[edi],0Ah
jne @b
inc edi
;########¯à®¯ã᪠¥¬ 㦥 ¯¥à¥¢¥¤ñ®¥ á«®¢®########
xor ebx,ebx
N_NoDouble:
mov al,[text+ebx]
test al,al
je N_Double
cmp [ebx+edi],al
jne N_NoDblOk
inc ebx
jmp N_NoDouble
N_Double:
cmp byte[ebx+edi],20h
jne N_NoDblOk
add edi,ebx
@@:
inc edi
cmp byte[edi],0Ah
jne @b
add edi,2
jmp LinePerev
N_NoDblOk: ;############¢ë¢®¤ १ã«ìâ ⮢####################
xor ebx,ebx ;ª®¯¨à㥬 १ã«ìâ â
N_CopyWord:
mov al,[edi+ebx]
cmp al,20h
je @f
mov [perevText+ebx],al
inc ebx
jmp N_CopyWord
@@:
mov byte[perevText+ebx],0
add edi,ebx
mov eax,Lines
sub eax,ecx
dec eax
shl eax,3
add eax,45
push ecx
push edi
OutText 7,ax,perevText
pop edi
pop ecx
@@:
inc edi
cmp byte[edi],20h
je @b
xor ebx,ebx
N_CopyPerev:
mov al,[edi+ebx]
cmp al,0Dh
je @f
mov [perevText+ebx],al
inc ebx
jmp N_CopyPerev
@@:
mov byte[perevText+ebx],0
mov eax,Lines
sub eax,ecx
dec eax
shl eax,3
add eax,45
push ecx
push edi
OutText 127,ax,perevText
pop edi
pop ecx
@@:
inc edi
cmp byte[edi],0Ah
jne @b
inc edi
loop @f ;¥¤®â¢ ¥âáï ¤® LinePerev
ret
@@:
jmp LinePerev
N_WordNotFound:
add edi,ebx
@@:
cmp byte[edi],0Dh
je N_NextWord
inc edi
cmp edi,SizeDict;dword [fInfo+32]
jae N_endPerev
jmp @b
N_NextWord:
add edi,2
cmp edi,SizeDict;dword [fInfo+32]
jae N_endPerev
jmp LinePerev
N_endPerev:
ret
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
;------DATA---------------------------------------------------------------------
;-------------------------------------------------------------------------------
;-------------------------------------------------------------------------------
idbExit = 1
Lines = 16 ;ª®«¨ç¥á⢠áâப
clTheme = 080B0FFh
Win1.Caption db 'Dictionary ENG -> RUS',0
Win1X = 524
Win1Y = 548
Win1W = 500
Win1H = 200
Memo.X = 5
Memo.Y = 20
Memo.W = 400
Memo.H = 370
EditIN edit_box 350,5,5,0FFFFFFh,06F9480h,0,00h,0,40,\
text,mouse_dd,ed_focus,0,0
; msgNotFound:
; dw 0
; db '訡ª ',0
; db ' ©« dictionary.wrd ¥ ©¤¥',0
; db 'á®',0
; db 0
;
; msgNotFound1:
; dw 0
; db '!!!',0
; db '訡ª ç⥨ï '
; NumErr: db 0
; db 0
; db 'á®',0
; db 0
;
; WordFile db '.wrd',0
;-------------------------------------------------------------------------------
@IMPORT:
library box_lib,'box_lib.obj',msgbox,'msgbox.obj'
import box_lib,\
edit_box_draw,'edit_box',\
edit_box_key,'edit_box_key';,\
;edit_box_mouse,'edit_box_mouse'
import msgbox,\
mb_create,'mb_create'
dict:
include 'dictionary.wrd'
SizeDict = $;-dict
i_end:
;-------------------------------------------------------------------------------
;WordFP rb 1024
; m1 dd 0
;filBuffer rd 1
ThreadInfo: rb 1024
;pathprog
mouse_dd rd 1
text rb 40
perevText rb 300
;fStruc rb 30
;fInfo rb 40
mbThread rb 1024
rb 4096
mem: