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: