0,0 → 1,241 |
dialog_line: |
mov [string_x],eax |
mov [string_y],ebx |
mov [MaxSizeString],ecx |
|
and [position],0 |
mov eax,string_ |
mov ebx,64/4 |
next_byte_cleare: |
mov [eax],dword 0 |
add eax,4 |
dec ebx |
jnz next_byte_cleare |
call print_line |
call print_cursor |
|
opros: |
mov eax,10 |
int 0x40 |
|
cmp eax,1 |
je exit_cycle |
|
cmp eax,2 |
jne opros |
|
mov eax,2 |
int 0x40 |
shr eax,8 |
|
cmp eax,13 |
je exit_cycle |
cmp eax,8 |
je backspace |
cmp eax,176 |
je left |
cmp eax,179 |
je right |
cmp eax,32 |
je probel |
|
inc [position] |
inc [MaxSizeString] |
call MinMaxCorrect |
dec [MaxSizeString] |
test ecx,ecx |
jz no_maximum_position |
jmp opros |
no_maximum_position: |
|
|
mov ebx,[position] |
dec ebx |
mov [string_+ebx],al |
|
call print_line |
call print_cursor |
jmp opros |
backspace: |
dec [position] |
call MinMaxCorrect |
mov ebx,[position] |
mov [string_+ebx],byte ' ' |
|
call print_line |
call print_cursor |
jmp opros |
|
left: |
dec [position] |
call MinMaxCorrect |
call print_line |
call print_cursor |
jmp opros |
|
right: |
inc [position] |
call MinMaxCorrect |
call print_line |
call print_cursor |
jmp opros |
|
probel: |
mov ebx,[position] |
mov [string_+ebx],byte ' ' |
inc [position] |
call MinMaxCorrect |
call print_line |
call print_cursor |
jmp opros |
|
exit_cycle: |
inc [position] |
mov ebx,[position] |
mov [string_+ebx],byte 13 |
exit_opros: |
|
call print_line |
ret |
;--------------------------------------------------------------- |
print_line: |
mov eax,13 |
mov ebx,[string_x] |
mov ecx,[string_y] |
mov edx,[MaxSizeString] |
shl ebx,16 |
shl ecx,16 |
imul edx,6 |
add ebx,edx |
add ebx,2 |
add ecx,10 |
mov edx,0xffffff |
int 0x40 |
mov eax,4 |
mov ebx,[string_x] |
shl ebx,16 |
add ebx,[string_y] |
mov ecx,0 |
mov edx,string_ |
mov esi,[MaxSizeString] |
int 0x40 |
ret |
|
print_cursor: |
mov eax,13 |
mov ebx,[position] |
mov ecx,[string_y] |
imul ebx,6 |
add ebx,[string_x] |
shl ebx,16 |
shl ecx,16 |
add ebx,2 |
add ecx,8 |
mov edx,0xff6c58 |
int 0x40 |
ret |
;---------------------------------------------------------- |
MinMaxCorrect: |
mov ebx,[MaxSizeString] |
xor ecx,ecx |
|
cmp [position],ebx |
jl no_maximum_length_string |
mov [position],ebx |
mov ecx,1 ;maximul position |
no_maximum_length_string: |
|
cmp [position],0 |
jns no_minimum_length_string |
and [position],0 |
no_minimum_length_string: |
|
ret |
;---------------------------------------------------------- |
string_ rb 65 |
position dd 0 |
MaxSizeString dd 0 |
string_x dd 0 |
string_y dd 0 |
;********************************************************** |
;---------------------------------------------------------- |
value: |
xor edx,edx |
cycle_value_: |
xor ebx,ebx |
mov bl,byte[eax] |
|
cmp bl,'0' |
jne no_0 |
mov ebx,0 |
jmp exit_v |
no_0: |
cmp bl,'1' |
jne no_1 |
mov ebx,1 |
jmp exit_v |
no_1: |
cmp bl,'2' |
jne no_2 |
mov ebx,2 |
jmp exit_v |
no_2: |
cmp bl,'3' |
jne no_3 |
mov ebx,3 |
jmp exit_v |
no_3: |
cmp bl,'4' |
jne no_4 |
mov ebx,4 |
jmp exit_v |
no_4: |
cmp bl,'5' |
jne no_5 |
mov ebx,5 |
jmp exit_v |
no_5: |
cmp bl,'6' |
jne no_6 |
mov ebx,6 |
jmp exit_v |
no_6: |
cmp bl,'7' |
jne no_7 |
mov ebx,7 |
jmp exit_v |
no_7: |
cmp bl,'8' |
jne no_8 |
mov ebx,8 |
jmp exit_v |
no_8: |
cmp bl,'9' |
jne no_9 |
mov ebx,9 |
jmp exit_v |
no_9: |
xor edx,edx |
jmp error |
exit_v: |
mov ecx,[length_number] |
dec ecx |
test ecx,ecx |
jz no_stepen |
|
next_mul: |
imul ebx,10 |
dec ecx |
jne next_mul |
|
no_stepen: |
add edx,ebx |
|
inc eax |
dec [length_number] |
jnz cycle_value_ |
error: |
mov eax,edx |
ret |
;---------------------------------------------------------- |
length_number dd 0 |