forked from KolibriOS/kolibrios
cd74d1af33
git-svn-id: svn://kolibrios.org@5098 a494cfbc-eb01-0410-851d-a64ba20cac60
415 lines
9.8 KiB
NASM
415 lines
9.8 KiB
NASM
|
||
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:
|
||
|