forked from KolibriOS/kolibrios
*fixed info for 4th function in documentation
*added animage and kfar *renamed docpak (to docpack) *chess fixed by Yellow to use 70th function *docpack, tetris, jpegview, trantest, desktop uses system colors, new functions of window drawing now *removed old rd2hd and rd2fd git-svn-id: svn://kolibrios.org@180 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
f9f3d06971
commit
7c8ba5ff40
@ -192,8 +192,8 @@
|
|||||||
* ecx = 0xX0RRGGBB, ЃЄЅ
|
* ecx = 0xX0RRGGBB, ЃЄЅ
|
||||||
* RR, GG, BB Ї Є ют цЂЅт тЅЊст
|
* RR, GG, BB Ї Є ют цЂЅт тЅЊст
|
||||||
* X=ABnn (ЁЈты):
|
* X=ABnn (ЁЈты):
|
||||||
* nn § ¤ ¥â ¨á¯®«ì§ã¥¬ë© èà¨äâ: 0=á¨áâ¥¬ë© ¬®®è¨à¨ë©,
|
* nn § ¤ ¥â ¨á¯®«ì§ã¥¬ë© èà¨äâ: 1=á¨áâ¥¬ë© ¬®®è¨à¨ë©,
|
||||||
1=á¨áâ¥¬ë© èà¨äâ ¯¥à¥¬¥®© è¨à¨ë
|
0=á¨áâ¥¬ë© èà¨äâ ¯¥à¥¬¥®© è¨à¨ë
|
||||||
* A=0 - ЂыЂЎЄЈть esi сЈЌЂЎЋЎЂ, A=1 - ЂыЂЎЄЈть ASCIIZ-стрЎЊу
|
* A=0 - ЂыЂЎЄЈть esi сЈЌЂЎЋЎЂ, A=1 - ЂыЂЎЄЈть ASCIIZ-стрЎЊу
|
||||||
* B=1 - Ї Њр шЈЂ ть фЎ цЂЅтЎЌ edi
|
* B=1 - Ї Њр шЈЂ ть фЎ цЂЅтЎЌ edi
|
||||||
* edx = уЊ Ї тЅЋь ч ЋЎ стрЎЊЈ
|
* edx = уЊ Ї тЅЋь ч ЋЎ стрЎЊЈ
|
||||||
|
@ -189,8 +189,8 @@ Parameters:
|
|||||||
* ecx = 0xX0RRGGBB, where
|
* ecx = 0xX0RRGGBB, where
|
||||||
* RR, GG, BB specify text color
|
* RR, GG, BB specify text color
|
||||||
* X=ABnn (bits):
|
* X=ABnn (bits):
|
||||||
* nn specifies the used font: 0=system monospaced,
|
* nn specifies the used font: 1=system monospaced,
|
||||||
1=system font of variable width
|
0=system font of variable width
|
||||||
* A=0 - output esi characters, A=1 - output ASCIIZ-string
|
* A=0 - output esi characters, A=1 - output ASCIIZ-string
|
||||||
* B=1 - fill background with the color edi
|
* B=1 - fill background with the color edi
|
||||||
* edx = pointer to the beginning of the string
|
* edx = pointer to the beginning of the string
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
@erase lang.inc
|
@erase lang.inc
|
||||||
@echo lang fix en >lang.inc
|
@echo lang fix en >lang.inc
|
||||||
@fasm trantest.asm trantest
|
@fasm trantest.asm trantest
|
||||||
|
@erase lang.inc
|
||||||
@pause
|
@pause
|
@ -1,4 +1,5 @@
|
|||||||
@erase lang.inc
|
@erase lang.inc
|
||||||
@echo lang fix ru >lang.inc
|
@echo lang fix ru >lang.inc
|
||||||
@fasm trantest.asm trantest
|
@fasm trantest.asm trantest
|
||||||
|
@erase lang.inc
|
||||||
@pause
|
@pause
|
@ -12,8 +12,8 @@ use32
|
|||||||
dd 0x01 ; header version
|
dd 0x01 ; header version
|
||||||
dd START ; start of code
|
dd START ; start of code
|
||||||
dd I_END ; size of image
|
dd I_END ; size of image
|
||||||
dd 0x2000000 ; memory for app
|
dd 0x100000 ; memory for app
|
||||||
dd 0x2000000 ; esp
|
dd 0x100000 ; esp
|
||||||
dd 0x0 , 0x0 ; I_Param , I_Icon
|
dd 0x0 , 0x0 ; I_Param , I_Icon
|
||||||
|
|
||||||
SCREEN_X equ 320 ;800
|
SCREEN_X equ 320 ;800
|
||||||
@ -24,11 +24,12 @@ include 'ascl.inc'
|
|||||||
include 'ascgl.inc'
|
include 'ascgl.inc'
|
||||||
|
|
||||||
START:
|
START:
|
||||||
|
red:
|
||||||
call draw_window
|
call draw_window
|
||||||
|
|
||||||
still:
|
still:
|
||||||
scevent red,key,button
|
scevent red,key,button
|
||||||
fps 280,8,cl_White,cl_Black
|
fps 290,8,cl_White,cl_Black
|
||||||
|
|
||||||
main_loop:
|
main_loop:
|
||||||
random SCREEN_X,eax
|
random SCREEN_X,eax
|
||||||
@ -63,9 +64,6 @@ xxx:
|
|||||||
|
|
||||||
count dd 100
|
count dd 100
|
||||||
|
|
||||||
red:
|
|
||||||
call draw_window
|
|
||||||
jmp still
|
|
||||||
key:
|
key:
|
||||||
mov eax,2
|
mov eax,2
|
||||||
int 0x40
|
int 0x40
|
||||||
@ -81,21 +79,16 @@ exit:
|
|||||||
|
|
||||||
;Draw window
|
;Draw window
|
||||||
draw_window:
|
draw_window:
|
||||||
|
|
||||||
mov eax,12 ;Start
|
mov eax,12 ;Start
|
||||||
mov ebx,1
|
mov ebx,1
|
||||||
int 0x40
|
int 0x40
|
||||||
|
|
||||||
mov eax,0 ;Draw window
|
xor eax,eax ;Draw window
|
||||||
mov ebx,100*65536+(SCREEN_X+9) ;x start*65536+x size
|
mov ebx,100*65536+(SCREEN_X+19) ;x start*65536+x size
|
||||||
mov ecx,100*65536+(SCREEN_Y+26) ;y start*65536+y size
|
mov ecx,100*65536+(SCREEN_Y+51) ;y start*65536+y size
|
||||||
mov edx,0x03000000 ;0x03 use skinned window
|
mov edx,0x33000000 ;0x33 use skinned window
|
||||||
int 0x40
|
mov edi,header
|
||||||
|
|
||||||
mov eax,4 ;Out Text
|
|
||||||
mov ebx,8*65536+8 ;x start*65536+y start
|
|
||||||
mov ecx,0x00ffffff ;color White
|
|
||||||
mov edx,head_label
|
|
||||||
mov esi,hl_end-head_label
|
|
||||||
int 0x40
|
int 0x40
|
||||||
|
|
||||||
mov eax,12 ;End
|
mov eax,12 ;End
|
||||||
@ -103,8 +96,7 @@ draw_window:
|
|||||||
int 0x40
|
int 0x40
|
||||||
ret
|
ret
|
||||||
|
|
||||||
head_label: db "3D TEST SAMPLE FOR MENUETOS"
|
header db '3D TEST SAMPLE',0
|
||||||
hl_end:
|
|
||||||
|
|
||||||
outscr:
|
outscr:
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
@erase lang.inc
|
@erase lang.inc
|
||||||
@echo lang fix en >lang.inc
|
@echo lang fix en >lang.inc
|
||||||
@fasm rd2hd.asm rd2hd
|
@fasm kfar.asm kfar
|
||||||
|
@erase lang.inc
|
||||||
@pause
|
@pause
|
@ -1,4 +1,5 @@
|
|||||||
@erase lang.inc
|
@erase lang.inc
|
||||||
@echo lang fix ru >lang.inc
|
@echo lang fix ru >lang.inc
|
||||||
@fasm rd2hd.asm rd2hd
|
@fasm kfar.asm kfar
|
||||||
|
@erase lang.inc
|
||||||
@pause
|
@pause
|
934
programs/fs/kfar/trunk/dialogs.inc
Normal file
934
programs/fs/kfar/trunk/dialogs.inc
Normal file
@ -0,0 +1,934 @@
|
|||||||
|
; int __stdcall DialogBox(DLGTEMPLATE* dlg, void* DlgProc);
|
||||||
|
; int __stdcall DlgProc(int msg, int param1, int param2);
|
||||||
|
|
||||||
|
virtual at 0
|
||||||
|
dlgtemplate:
|
||||||
|
.flags dd ?
|
||||||
|
.x dd ?
|
||||||
|
.y dd ?
|
||||||
|
.width dd ?
|
||||||
|
.height dd ?
|
||||||
|
.border_size_x dd ?
|
||||||
|
.border_size_y dd ?
|
||||||
|
.title dd ?
|
||||||
|
.main_color db ?
|
||||||
|
.border_color db ?
|
||||||
|
.header_color db ?
|
||||||
|
db ? ; align
|
||||||
|
end virtual
|
||||||
|
|
||||||
|
DialogBox:
|
||||||
|
pushad
|
||||||
|
; some checks
|
||||||
|
mov ebx, [esp+20h+4]
|
||||||
|
mov eax, [ebx+dlgtemplate.x]
|
||||||
|
cmp eax, 1
|
||||||
|
jl .sizeerr
|
||||||
|
add eax, [ebx+dlgtemplate.width]
|
||||||
|
cmp eax, [cur_width]
|
||||||
|
jge .sizeerr
|
||||||
|
mov eax, [ebx+dlgtemplate.y]
|
||||||
|
cmp eax, 1
|
||||||
|
jl .sizeerr
|
||||||
|
add eax, [ebx+dlgtemplate.height]
|
||||||
|
cmp eax, [cur_height]
|
||||||
|
jge .sizeerr
|
||||||
|
cmp [ebx+dlgtemplate.border_size_x], 1
|
||||||
|
jl .sizeerr
|
||||||
|
cmp [ebx+dlgtemplate.border_size_y], 1
|
||||||
|
jge .sizeok
|
||||||
|
.sizeerr:
|
||||||
|
popad
|
||||||
|
or eax, -1
|
||||||
|
ret 8
|
||||||
|
.sizeok:
|
||||||
|
; allocate memory for data under dialog
|
||||||
|
mov eax, [ebx+dlgtemplate.width]
|
||||||
|
add eax, [ebx+dlgtemplate.border_size_x]
|
||||||
|
add eax, [ebx+dlgtemplate.border_size_x]
|
||||||
|
inc eax
|
||||||
|
inc eax
|
||||||
|
mov edx, [ebx+dlgtemplate.height]
|
||||||
|
add edx, [ebx+dlgtemplate.border_size_y]
|
||||||
|
add edx, [ebx+dlgtemplate.border_size_y]
|
||||||
|
inc edx
|
||||||
|
mul edx
|
||||||
|
add eax, eax
|
||||||
|
call mf_alloc
|
||||||
|
test eax, eax
|
||||||
|
jnz @f
|
||||||
|
; TODO: add error message
|
||||||
|
popad
|
||||||
|
or eax, -1
|
||||||
|
ret 8
|
||||||
|
@@:
|
||||||
|
mov ebp, eax
|
||||||
|
; save data
|
||||||
|
mov eax, [ebx+dlgtemplate.y]
|
||||||
|
add eax, [ebx+dlgtemplate.height]
|
||||||
|
add eax, [ebx+dlgtemplate.border_size_y]
|
||||||
|
inc eax
|
||||||
|
push eax
|
||||||
|
mov eax, [ebx+dlgtemplate.x]
|
||||||
|
add eax, [ebx+dlgtemplate.width]
|
||||||
|
add eax, [ebx+dlgtemplate.border_size_x]
|
||||||
|
inc eax
|
||||||
|
inc eax
|
||||||
|
push eax
|
||||||
|
mov eax, [ebx+dlgtemplate.y]
|
||||||
|
sub eax, [ebx+dlgtemplate.border_size_y]
|
||||||
|
push eax
|
||||||
|
mov eax, [ebx+dlgtemplate.x]
|
||||||
|
sub eax, [ebx+dlgtemplate.border_size_x]
|
||||||
|
push eax
|
||||||
|
call save_console_data
|
||||||
|
; draw shadow
|
||||||
|
mov eax, [ebx+dlgtemplate.x]
|
||||||
|
sub eax, [ebx+dlgtemplate.border_size_x]
|
||||||
|
ja @f
|
||||||
|
xor eax, eax
|
||||||
|
@@:
|
||||||
|
push eax ; save real window left
|
||||||
|
inc eax
|
||||||
|
inc eax
|
||||||
|
mov edx, [ebx+dlgtemplate.y]
|
||||||
|
sub edx, [ebx+dlgtemplate.border_size_y]
|
||||||
|
ja @f
|
||||||
|
xor edx, edx
|
||||||
|
@@:
|
||||||
|
push edx ; save real window top
|
||||||
|
inc edx
|
||||||
|
call get_console_ptr
|
||||||
|
mov ecx, [ebx+dlgtemplate.y]
|
||||||
|
add ecx, [ebx+dlgtemplate.height]
|
||||||
|
add ecx, [ebx+dlgtemplate.border_size_y]
|
||||||
|
inc ecx
|
||||||
|
cmp ecx, [cur_height]
|
||||||
|
jb @f
|
||||||
|
mov ecx, [cur_height]
|
||||||
|
@@:
|
||||||
|
sub ecx, edx
|
||||||
|
mov edx, ecx
|
||||||
|
mov ecx, [ebx+dlgtemplate.x]
|
||||||
|
add ecx, [ebx+dlgtemplate.width]
|
||||||
|
add ecx, [ebx+dlgtemplate.border_size_x]
|
||||||
|
inc ecx
|
||||||
|
inc ecx
|
||||||
|
cmp ecx, [cur_width]
|
||||||
|
jb @f
|
||||||
|
mov ecx, [cur_width]
|
||||||
|
@@:
|
||||||
|
sub ecx, eax
|
||||||
|
mov eax, ecx
|
||||||
|
.shadow_loop:
|
||||||
|
mov ecx, eax
|
||||||
|
push edi
|
||||||
|
.sl1:
|
||||||
|
inc edi
|
||||||
|
test byte [edi], 0x0F
|
||||||
|
jnz @f
|
||||||
|
or byte [edi], 8
|
||||||
|
@@:
|
||||||
|
and byte [edi], 0x0F
|
||||||
|
inc edi
|
||||||
|
loop .sl1
|
||||||
|
pop edi
|
||||||
|
add edi, [cur_width]
|
||||||
|
add edi, [cur_width]
|
||||||
|
dec edx
|
||||||
|
jnz .shadow_loop
|
||||||
|
; draw area background
|
||||||
|
pop edx
|
||||||
|
pop eax
|
||||||
|
call get_console_ptr
|
||||||
|
mov ecx, [ebx+dlgtemplate.x]
|
||||||
|
add ecx, [ebx+dlgtemplate.width]
|
||||||
|
add ecx, [ebx+dlgtemplate.border_size_x]
|
||||||
|
cmp ecx, [cur_width]
|
||||||
|
jb @f
|
||||||
|
mov ecx, [cur_width]
|
||||||
|
@@:
|
||||||
|
sub ecx, eax
|
||||||
|
mov esi, ecx
|
||||||
|
mov ecx, [ebx+dlgtemplate.y]
|
||||||
|
add ecx, [ebx+dlgtemplate.height]
|
||||||
|
add ecx, [ebx+dlgtemplate.border_size_y]
|
||||||
|
cmp ecx, [cur_height]
|
||||||
|
jb @f
|
||||||
|
mov ecx, [cur_height]
|
||||||
|
@@:
|
||||||
|
sub ecx, edx
|
||||||
|
mov edx, ecx
|
||||||
|
mov al, ' '
|
||||||
|
mov ah, [ebx+dlgtemplate.border_color]
|
||||||
|
.1:
|
||||||
|
mov ecx, esi
|
||||||
|
push edi
|
||||||
|
rep stosw
|
||||||
|
pop edi
|
||||||
|
add edi, [cur_width]
|
||||||
|
add edi, [cur_width]
|
||||||
|
dec edx
|
||||||
|
jnz .1
|
||||||
|
; draw border
|
||||||
|
mov eax, [ebx+dlgtemplate.x]
|
||||||
|
dec eax
|
||||||
|
mov edx, [ebx+dlgtemplate.y]
|
||||||
|
dec edx
|
||||||
|
call get_console_ptr
|
||||||
|
mov edx, [ebx+dlgtemplate.height]
|
||||||
|
inc edx
|
||||||
|
inc edx
|
||||||
|
mov ah, [ebx+dlgtemplate.border_color]
|
||||||
|
push ebx
|
||||||
|
mov ebx, [ebx+dlgtemplate.width]
|
||||||
|
inc ebx
|
||||||
|
inc ebx
|
||||||
|
call draw_border
|
||||||
|
pop ebx
|
||||||
|
; draw header
|
||||||
|
mov esi, [ebx+dlgtemplate.title]
|
||||||
|
test esi, esi
|
||||||
|
jz .noheader
|
||||||
|
cmp byte [esi], 0
|
||||||
|
jz .noheader
|
||||||
|
push esi
|
||||||
|
@@: lodsb
|
||||||
|
test al, al
|
||||||
|
jnz @b
|
||||||
|
mov eax, esi
|
||||||
|
pop esi
|
||||||
|
sub eax, esi
|
||||||
|
inc eax ; eax = äëèíà çàãîëîâêà + 2
|
||||||
|
mov ecx, [ebx+dlgtemplate.width]
|
||||||
|
cmp eax, ecx
|
||||||
|
jbe .fullhea
|
||||||
|
sub ecx, 5
|
||||||
|
jb .noheader
|
||||||
|
xor edx, edx
|
||||||
|
jmp .drawhea
|
||||||
|
.fullhea:
|
||||||
|
mov edx, ecx
|
||||||
|
sub edx, eax
|
||||||
|
shr edx, 1
|
||||||
|
.drawhea:
|
||||||
|
mov eax, [ebx+dlgtemplate.x]
|
||||||
|
add eax, edx
|
||||||
|
mov edx, [ebx+dlgtemplate.y]
|
||||||
|
dec edx
|
||||||
|
call get_console_ptr
|
||||||
|
mov ah, [ebx+dlgtemplate.header_color]
|
||||||
|
mov al, ' '
|
||||||
|
stosw
|
||||||
|
dec ecx
|
||||||
|
.2:
|
||||||
|
jecxz .3
|
||||||
|
lodsb
|
||||||
|
test al, al
|
||||||
|
jz .4
|
||||||
|
stosw
|
||||||
|
jmp .2
|
||||||
|
.3:
|
||||||
|
mov al, '.'
|
||||||
|
stosw
|
||||||
|
stosw
|
||||||
|
stosw
|
||||||
|
.4:
|
||||||
|
mov al, ' '
|
||||||
|
stosw
|
||||||
|
.noheader:
|
||||||
|
; draw window background
|
||||||
|
mov eax, [ebx+dlgtemplate.x]
|
||||||
|
mov edx, [ebx+dlgtemplate.y]
|
||||||
|
call get_console_ptr
|
||||||
|
mov ah, [ebx+dlgtemplate.main_color]
|
||||||
|
mov al, ' '
|
||||||
|
mov edx, [ebx+dlgtemplate.height]
|
||||||
|
@@:
|
||||||
|
mov ecx, [ebx+dlgtemplate.width]
|
||||||
|
push edi
|
||||||
|
rep stosw
|
||||||
|
pop edi
|
||||||
|
add edi, [cur_width]
|
||||||
|
add edi, [cur_width]
|
||||||
|
dec edx
|
||||||
|
jnz @b
|
||||||
|
; send redraw message
|
||||||
|
mov eax, [esp+20h+8]
|
||||||
|
push ebx ebp
|
||||||
|
push 0
|
||||||
|
push 0
|
||||||
|
push 1
|
||||||
|
call eax
|
||||||
|
call draw_image
|
||||||
|
pop ebp ebx
|
||||||
|
; message loop
|
||||||
|
.event:
|
||||||
|
push 10
|
||||||
|
pop eax
|
||||||
|
int 40h
|
||||||
|
dec eax
|
||||||
|
jz .redraw
|
||||||
|
dec eax
|
||||||
|
jz .key
|
||||||
|
or eax, -1
|
||||||
|
int 40h
|
||||||
|
.redraw:
|
||||||
|
push ebx ebp
|
||||||
|
call draw_window
|
||||||
|
pop ebp ebx
|
||||||
|
jmp .event
|
||||||
|
.key:
|
||||||
|
mov al, 2
|
||||||
|
int 40h
|
||||||
|
shr eax, 8
|
||||||
|
cmp al, 0xE0
|
||||||
|
jnz @f
|
||||||
|
mov [bWasE0], 1
|
||||||
|
jmp .event
|
||||||
|
@@:
|
||||||
|
xchg ah, [bWasE0]
|
||||||
|
cmp al, 0x1D
|
||||||
|
jz .ctrl_down
|
||||||
|
cmp al, 0x9D
|
||||||
|
jz .ctrl_up
|
||||||
|
cmp al, 0x2A
|
||||||
|
jz .lshift_down
|
||||||
|
cmp al, 0xAA
|
||||||
|
jz .lshift_up
|
||||||
|
cmp al, 0x36
|
||||||
|
jz .rshift_down
|
||||||
|
cmp al, 0xB6
|
||||||
|
jz .rshift_up
|
||||||
|
cmp al, 0x38
|
||||||
|
jz .alt_down
|
||||||
|
cmp al, 0xB8
|
||||||
|
jz .alt_up
|
||||||
|
mov ecx, [esp+20h+8]
|
||||||
|
push ebx ebp
|
||||||
|
push 0
|
||||||
|
push eax
|
||||||
|
push 2
|
||||||
|
call ecx
|
||||||
|
pop ebp ebx
|
||||||
|
test eax, eax
|
||||||
|
jz .event
|
||||||
|
mov [esp+28], eax
|
||||||
|
jmp .exit
|
||||||
|
.ctrl_down:
|
||||||
|
test ah, ah
|
||||||
|
jnz .rctrl_down
|
||||||
|
or [ctrlstate], 4
|
||||||
|
jmp .event
|
||||||
|
.rctrl_down:
|
||||||
|
or [ctrlstate], 8
|
||||||
|
jmp .event
|
||||||
|
.ctrl_up:
|
||||||
|
test ah, ah
|
||||||
|
jnz .rctrl_up
|
||||||
|
and [ctrlstate], not 4
|
||||||
|
jmp .event
|
||||||
|
.rctrl_up:
|
||||||
|
and [ctrlstate], not 8
|
||||||
|
jmp .event
|
||||||
|
.lshift_down:
|
||||||
|
test ah, ah
|
||||||
|
jnz @f
|
||||||
|
or [ctrlstate], 1
|
||||||
|
@@: jmp .event
|
||||||
|
.lshift_up:
|
||||||
|
test ah, ah
|
||||||
|
jnz @b
|
||||||
|
and [ctrlstate], not 1
|
||||||
|
jmp @b
|
||||||
|
.rshift_down:
|
||||||
|
or [ctrlstate], 2
|
||||||
|
jmp .event
|
||||||
|
.rshift_up:
|
||||||
|
and [ctrlstate], not 2
|
||||||
|
jmp .event
|
||||||
|
.alt_down:
|
||||||
|
test ah, ah
|
||||||
|
jnz .ralt_down
|
||||||
|
or [ctrlstate], 0x10
|
||||||
|
jmp .event
|
||||||
|
.ralt_down:
|
||||||
|
or [ctrlstate], 0x20
|
||||||
|
jmp .event
|
||||||
|
.alt_up:
|
||||||
|
test ah, ah
|
||||||
|
jnz .ralt_up
|
||||||
|
and [ctrlstate], not 0x10
|
||||||
|
jmp .event
|
||||||
|
.ralt_up:
|
||||||
|
and [ctrlstate], not 0x20
|
||||||
|
jmp .event
|
||||||
|
.exit:
|
||||||
|
; restore data
|
||||||
|
mov eax, [ebx+dlgtemplate.y]
|
||||||
|
add eax, [ebx+dlgtemplate.height]
|
||||||
|
add eax, [ebx+dlgtemplate.border_size_y]
|
||||||
|
inc eax
|
||||||
|
push eax
|
||||||
|
mov eax, [ebx+dlgtemplate.x]
|
||||||
|
add eax, [ebx+dlgtemplate.width]
|
||||||
|
add eax, [ebx+dlgtemplate.border_size_x]
|
||||||
|
inc eax
|
||||||
|
inc eax
|
||||||
|
push eax
|
||||||
|
mov eax, [ebx+dlgtemplate.y]
|
||||||
|
sub eax, [ebx+dlgtemplate.border_size_y]
|
||||||
|
push eax
|
||||||
|
mov eax, [ebx+dlgtemplate.x]
|
||||||
|
sub eax, [ebx+dlgtemplate.border_size_x]
|
||||||
|
push eax
|
||||||
|
call restore_console_data
|
||||||
|
call draw_keybar
|
||||||
|
mov eax, ebp
|
||||||
|
call mf_free
|
||||||
|
call draw_image
|
||||||
|
popad
|
||||||
|
ret 8
|
||||||
|
|
||||||
|
save_console_data:
|
||||||
|
cmp dword [esp+4], 0
|
||||||
|
jge @f
|
||||||
|
and dword [esp+4], 0
|
||||||
|
@@:
|
||||||
|
cmp dword [esp+8], 0
|
||||||
|
jge @f
|
||||||
|
and dword [esp+8], 0
|
||||||
|
@@:
|
||||||
|
mov eax, [esp+12]
|
||||||
|
cmp eax, [cur_width]
|
||||||
|
jbe @f
|
||||||
|
mov eax, [cur_width]
|
||||||
|
@@:
|
||||||
|
sub eax, [esp+4]
|
||||||
|
ja @f
|
||||||
|
ret 16
|
||||||
|
@@:
|
||||||
|
mov [esp+12], eax
|
||||||
|
mov eax, [esp+16]
|
||||||
|
cmp eax, [cur_height]
|
||||||
|
jbe @f
|
||||||
|
mov eax, [cur_height]
|
||||||
|
@@:
|
||||||
|
sub eax, [esp+8]
|
||||||
|
ja @f
|
||||||
|
ret 16
|
||||||
|
@@:
|
||||||
|
mov [esp+16], eax
|
||||||
|
mov eax, [esp+4]
|
||||||
|
mov edx, [esp+8]
|
||||||
|
call get_console_ptr
|
||||||
|
mov esi, edi
|
||||||
|
mov edi, ebp
|
||||||
|
.l:
|
||||||
|
mov ecx, [esp+12]
|
||||||
|
push esi
|
||||||
|
shr ecx, 1
|
||||||
|
rep movsd
|
||||||
|
adc ecx, ecx
|
||||||
|
rep movsw
|
||||||
|
pop esi
|
||||||
|
add esi, [cur_width]
|
||||||
|
add esi, [cur_width]
|
||||||
|
dec dword [esp+16]
|
||||||
|
jnz .l
|
||||||
|
ret 16
|
||||||
|
|
||||||
|
restore_console_data:
|
||||||
|
cmp dword [esp+4], 0
|
||||||
|
jge @f
|
||||||
|
and dword [esp+4], 0
|
||||||
|
@@:
|
||||||
|
cmp dword [esp+8], 0
|
||||||
|
jge @f
|
||||||
|
and dword [esp+8], 0
|
||||||
|
@@:
|
||||||
|
mov eax, [esp+12]
|
||||||
|
cmp eax, [cur_width]
|
||||||
|
jbe @f
|
||||||
|
mov eax, [cur_width]
|
||||||
|
@@:
|
||||||
|
sub eax, [esp+4]
|
||||||
|
ja @f
|
||||||
|
ret 16
|
||||||
|
@@:
|
||||||
|
mov [esp+12], eax
|
||||||
|
mov eax, [esp+16]
|
||||||
|
cmp eax, [cur_height]
|
||||||
|
jbe @f
|
||||||
|
mov eax, [cur_height]
|
||||||
|
@@:
|
||||||
|
sub eax, [esp+8]
|
||||||
|
ja @f
|
||||||
|
ret 16
|
||||||
|
@@:
|
||||||
|
mov [esp+16], eax
|
||||||
|
mov eax, [esp+4]
|
||||||
|
mov edx, [esp+8]
|
||||||
|
call get_console_ptr
|
||||||
|
mov esi, ebp
|
||||||
|
.l:
|
||||||
|
mov ecx, [esp+12]
|
||||||
|
push edi
|
||||||
|
shr ecx, 1
|
||||||
|
rep movsd
|
||||||
|
adc ecx, ecx
|
||||||
|
rep movsw
|
||||||
|
pop edi
|
||||||
|
add edi, [cur_width]
|
||||||
|
add edi, [cur_width]
|
||||||
|
dec dword [esp+16]
|
||||||
|
jnz .l
|
||||||
|
ret 16
|
||||||
|
|
||||||
|
; int __stdcall menu(void* variants, const char* title, unsigned flags);
|
||||||
|
; variants 㪠§ë¢ ¥â ⥪ã騩 í«¥¬¥â ¢ ¤¢ãá¢ï§®¬ «¨¥©®¬ ᯨ᪥
|
||||||
|
menu:
|
||||||
|
pop eax
|
||||||
|
push [cur_height]
|
||||||
|
push [cur_width]
|
||||||
|
push 0
|
||||||
|
push 0
|
||||||
|
push eax
|
||||||
|
|
||||||
|
; int __stdcall menu_centered_in(unsigned left, unsigned top, unsigned width, unsigned height,
|
||||||
|
; void* variants, const char* title, unsigned flags);
|
||||||
|
menu_centered_in:
|
||||||
|
pushad
|
||||||
|
mov eax, 56
|
||||||
|
; 36 bytes for dlgtemplate + additional:
|
||||||
|
; +36: dd cur_variant
|
||||||
|
; +40: dd num_variants
|
||||||
|
; +44: dd begin_variant
|
||||||
|
; +48: dd end_variant
|
||||||
|
; +52: dd cur_variant_idx
|
||||||
|
call mf_alloc
|
||||||
|
test eax, eax
|
||||||
|
jnz @f
|
||||||
|
.ret_bad:
|
||||||
|
popad
|
||||||
|
or eax, -1
|
||||||
|
ret 28
|
||||||
|
@@:
|
||||||
|
mov ebx, eax
|
||||||
|
mov eax, 1
|
||||||
|
test byte [esp+20h+28], 1
|
||||||
|
jz @f
|
||||||
|
mov al, 3
|
||||||
|
@@:
|
||||||
|
mov [ebx+dlgtemplate.border_size_x], eax
|
||||||
|
inc eax
|
||||||
|
shr eax, 1
|
||||||
|
mov [ebx+dlgtemplate.border_size_y], eax
|
||||||
|
; <EFBFBD> 室¨¬ è¨à¨ã ¨ ¢ëá®âã ®ª
|
||||||
|
xor eax, eax
|
||||||
|
xor ecx, ecx
|
||||||
|
mov esi, [esp+20h+20]
|
||||||
|
mov [ebx+36], esi
|
||||||
|
and dword [ebx+52], 0
|
||||||
|
@@:
|
||||||
|
cmp dword [esi+4], 0
|
||||||
|
jz .find_width
|
||||||
|
mov esi, [esi+4]
|
||||||
|
inc dword [ebx+52]
|
||||||
|
jmp @b
|
||||||
|
.find_width:
|
||||||
|
mov [ebx+44], esi
|
||||||
|
add esi, 8
|
||||||
|
push esi
|
||||||
|
xor edx, edx
|
||||||
|
.fw1:
|
||||||
|
cmp byte [esi], '&'
|
||||||
|
jnz @f
|
||||||
|
mov dl, 1
|
||||||
|
@@:
|
||||||
|
inc esi
|
||||||
|
cmp byte [esi-1], 0
|
||||||
|
jnz .fw1
|
||||||
|
sub esi, [esp]
|
||||||
|
sub esi, edx
|
||||||
|
dec esi
|
||||||
|
cmp eax, esi
|
||||||
|
ja @f
|
||||||
|
mov eax, esi
|
||||||
|
@@:
|
||||||
|
inc ecx
|
||||||
|
pop esi
|
||||||
|
mov esi, [esi-8]
|
||||||
|
test esi, esi
|
||||||
|
jnz .find_width
|
||||||
|
add eax, 3
|
||||||
|
add eax, [ebx+dlgtemplate.border_size_x]
|
||||||
|
add eax, [ebx+dlgtemplate.border_size_x]
|
||||||
|
cmp eax, [cur_width]
|
||||||
|
jb @f
|
||||||
|
mov eax, [cur_width]
|
||||||
|
@@:
|
||||||
|
sub eax, [ebx+dlgtemplate.border_size_x]
|
||||||
|
sub eax, [ebx+dlgtemplate.border_size_x]
|
||||||
|
mov [ebx+dlgtemplate.width], eax
|
||||||
|
mov [ebx+dlgtemplate.height], ecx
|
||||||
|
mov [ebx+40], ecx
|
||||||
|
sub eax, [esp+20h+12]
|
||||||
|
neg eax
|
||||||
|
sar eax, 1
|
||||||
|
add eax, [esp+20h+4]
|
||||||
|
cmp eax, [ebx+dlgtemplate.border_size_x]
|
||||||
|
jge @f
|
||||||
|
mov eax, [ebx+dlgtemplate.border_size_x]
|
||||||
|
@@:
|
||||||
|
push eax
|
||||||
|
add eax, [ebx+dlgtemplate.width]
|
||||||
|
add eax, [ebx+dlgtemplate.border_size_x]
|
||||||
|
cmp eax, [cur_width]
|
||||||
|
jbe @f
|
||||||
|
pop eax
|
||||||
|
mov eax, [cur_width]
|
||||||
|
sub eax, [ebx+dlgtemplate.width]
|
||||||
|
sub eax, [ebx+dlgtemplate.border_size_x]
|
||||||
|
push eax
|
||||||
|
@@:
|
||||||
|
pop [ebx+dlgtemplate.x]
|
||||||
|
sub ecx, [esp+20h+16]
|
||||||
|
neg ecx
|
||||||
|
sar ecx, 1
|
||||||
|
add ecx, [esp+20h+8]
|
||||||
|
cmp ecx, [ebx+dlgtemplate.border_size_y]
|
||||||
|
jge @f
|
||||||
|
mov ecx, [ebx+dlgtemplate.border_size_y]
|
||||||
|
@@:
|
||||||
|
push ecx
|
||||||
|
add ecx, [ebx+dlgtemplate.height]
|
||||||
|
add ecx, [ebx+dlgtemplate.border_size_y]
|
||||||
|
cmp ecx, [cur_height]
|
||||||
|
jbe @f
|
||||||
|
pop ecx
|
||||||
|
mov ecx, [cur_height]
|
||||||
|
sub ecx, [ebx+dlgtemplate.height]
|
||||||
|
sub ecx, [ebx+dlgtemplate.border_size_y]
|
||||||
|
push ecx
|
||||||
|
@@:
|
||||||
|
pop [ebx+dlgtemplate.y]
|
||||||
|
mov eax, [cur_height]
|
||||||
|
sub eax, 6
|
||||||
|
cmp [ebx+dlgtemplate.height], eax
|
||||||
|
jbe .small_height
|
||||||
|
mov [ebx+dlgtemplate.height], eax
|
||||||
|
mov [ebx+dlgtemplate.y], 3
|
||||||
|
.small_height:
|
||||||
|
mov ecx, [ebx+dlgtemplate.height]
|
||||||
|
mov eax, [ebx+36]
|
||||||
|
mov [ebx+44], eax
|
||||||
|
dec ecx
|
||||||
|
jz .skip
|
||||||
|
push ecx
|
||||||
|
@@:
|
||||||
|
cmp dword [eax+4], 0
|
||||||
|
jz @f
|
||||||
|
mov eax, [eax+4]
|
||||||
|
loop @b
|
||||||
|
@@:
|
||||||
|
mov [ebx+44], eax
|
||||||
|
pop ecx
|
||||||
|
.loop:
|
||||||
|
mov eax, [eax]
|
||||||
|
loop .loop
|
||||||
|
.skip:
|
||||||
|
mov [ebx+48], eax
|
||||||
|
mov eax, [esp+20h+24]
|
||||||
|
mov [ebx+dlgtemplate.title], eax
|
||||||
|
mov al, [menu_normal_color]
|
||||||
|
mov [ebx+dlgtemplate.main_color], al
|
||||||
|
mov al, [menu_border_color]
|
||||||
|
mov [ebx+dlgtemplate.border_color], al
|
||||||
|
mov al, [menu_header_color]
|
||||||
|
mov [ebx+dlgtemplate.header_color], al
|
||||||
|
push MenuDlgProc
|
||||||
|
push ebx
|
||||||
|
call DialogBox
|
||||||
|
mov [esp+28], eax
|
||||||
|
mov eax, ebx
|
||||||
|
call mf_free
|
||||||
|
popad
|
||||||
|
ret 28
|
||||||
|
|
||||||
|
MenuDlgProc:
|
||||||
|
mov eax, [esp+4]
|
||||||
|
cmp al, 1
|
||||||
|
jz .draw
|
||||||
|
cmp al, 2
|
||||||
|
jz .key
|
||||||
|
ret 12
|
||||||
|
.draw:
|
||||||
|
call .dodraw
|
||||||
|
ret 12
|
||||||
|
.key:
|
||||||
|
mov al, [esp+8]
|
||||||
|
cmp al, 0x48
|
||||||
|
jz .prev
|
||||||
|
cmp al, 0x4B
|
||||||
|
jz .prev
|
||||||
|
cmp al, 0x4D
|
||||||
|
jz .next
|
||||||
|
cmp al, 0x50
|
||||||
|
jz .next
|
||||||
|
cmp al, 0x1C
|
||||||
|
jz .enter
|
||||||
|
cmp al, 1
|
||||||
|
jz .esc
|
||||||
|
cmp al, 0x47
|
||||||
|
jz .home
|
||||||
|
cmp al, 0x4F
|
||||||
|
jz .end
|
||||||
|
cmp al, 0x51
|
||||||
|
jz .pgdn
|
||||||
|
cmp al, 0x49
|
||||||
|
jz .pgup
|
||||||
|
mov edx, [ebx+36]
|
||||||
|
@@:
|
||||||
|
cmp dword [edx+4], 0
|
||||||
|
jz @f
|
||||||
|
mov edx, [edx+4]
|
||||||
|
jmp @b
|
||||||
|
@@:
|
||||||
|
.l:
|
||||||
|
lea esi, [edx+7]
|
||||||
|
@@:
|
||||||
|
inc esi
|
||||||
|
cmp byte [esi], 0
|
||||||
|
jz .n
|
||||||
|
cmp byte [esi], '&'
|
||||||
|
jnz @b
|
||||||
|
movzx ecx, byte [esi+1]
|
||||||
|
cmp [ascii2scan+ecx], al
|
||||||
|
jnz .n
|
||||||
|
mov eax, edx
|
||||||
|
ret 12
|
||||||
|
.n:
|
||||||
|
mov edx, [edx]
|
||||||
|
test edx, edx
|
||||||
|
jnz .l
|
||||||
|
.ret:
|
||||||
|
xor eax, eax
|
||||||
|
ret 12
|
||||||
|
.pgup:
|
||||||
|
mov eax, [ebx+36]
|
||||||
|
mov ecx, [ebx+dlgtemplate.height]
|
||||||
|
.pgupl:
|
||||||
|
cmp dword [eax+4], 0
|
||||||
|
jz .posret
|
||||||
|
call .line_prev
|
||||||
|
loop .pgupl
|
||||||
|
jmp .posret
|
||||||
|
.prev:
|
||||||
|
mov eax, [ebx+36]
|
||||||
|
cmp dword [eax+4], 0
|
||||||
|
jz .end
|
||||||
|
call .line_prev
|
||||||
|
.posret:
|
||||||
|
mov [ebx+36], eax
|
||||||
|
.redraw:
|
||||||
|
call .dodraw
|
||||||
|
call draw_image
|
||||||
|
xor eax, eax
|
||||||
|
ret 12
|
||||||
|
.next:
|
||||||
|
mov eax, [ebx+36]
|
||||||
|
cmp dword [eax], 0
|
||||||
|
jz .home
|
||||||
|
call .line_next
|
||||||
|
jmp .posret
|
||||||
|
.pgdn:
|
||||||
|
mov eax, [ebx+36]
|
||||||
|
mov ecx, [ebx+dlgtemplate.height]
|
||||||
|
.pgdnl:
|
||||||
|
cmp dword [eax], 0
|
||||||
|
jz .posret
|
||||||
|
call .line_next
|
||||||
|
loop .pgdnl
|
||||||
|
jmp .posret
|
||||||
|
.home:
|
||||||
|
mov eax, [ebx+36]
|
||||||
|
@@:
|
||||||
|
cmp dword [eax+4], 0
|
||||||
|
jz @f
|
||||||
|
mov eax, [eax+4]
|
||||||
|
jmp @b
|
||||||
|
@@:
|
||||||
|
mov [ebx+44], eax
|
||||||
|
push eax
|
||||||
|
mov ecx, [ebx+dlgtemplate.height]
|
||||||
|
dec ecx
|
||||||
|
jz .h1
|
||||||
|
.h2:
|
||||||
|
mov eax, [eax]
|
||||||
|
loop .h2
|
||||||
|
.h1:
|
||||||
|
mov [ebx+48], eax
|
||||||
|
pop eax
|
||||||
|
and dword [ebx+52], 0
|
||||||
|
jmp .posret
|
||||||
|
.end:
|
||||||
|
mov eax, [ebx+36]
|
||||||
|
@@:
|
||||||
|
cmp dword [eax], 0
|
||||||
|
jz @f
|
||||||
|
mov eax, [eax]
|
||||||
|
jmp @b
|
||||||
|
@@:
|
||||||
|
mov [ebx+48], eax
|
||||||
|
push eax
|
||||||
|
mov ecx, [ebx+dlgtemplate.height]
|
||||||
|
dec ecx
|
||||||
|
jz .e1
|
||||||
|
.e2:
|
||||||
|
mov eax, [eax+4]
|
||||||
|
loop .e2
|
||||||
|
.e1:
|
||||||
|
mov [ebx+44], eax
|
||||||
|
mov eax, [ebx+40]
|
||||||
|
dec eax
|
||||||
|
mov [ebx+52], eax
|
||||||
|
pop eax
|
||||||
|
jmp .posret
|
||||||
|
.esc:
|
||||||
|
or eax, -1
|
||||||
|
ret 12
|
||||||
|
.enter:
|
||||||
|
mov eax, [ebx+36]
|
||||||
|
ret 12
|
||||||
|
|
||||||
|
.line_prev:
|
||||||
|
cmp eax, [ebx+44]
|
||||||
|
jnz @f
|
||||||
|
mov edx, [ebx+44]
|
||||||
|
mov edx, [edx+4]
|
||||||
|
mov [ebx+44], edx
|
||||||
|
mov edx, [ebx+48]
|
||||||
|
mov edx, [edx+4]
|
||||||
|
mov [ebx+48], edx
|
||||||
|
@@:
|
||||||
|
mov eax, [eax+4]
|
||||||
|
dec dword [ebx+52]
|
||||||
|
ret
|
||||||
|
.line_next:
|
||||||
|
cmp eax, [ebx+48]
|
||||||
|
jnz @f
|
||||||
|
mov edx, [ebx+44]
|
||||||
|
mov edx, [edx]
|
||||||
|
mov [ebx+44], edx
|
||||||
|
mov edx, [ebx+48]
|
||||||
|
mov edx, [edx]
|
||||||
|
mov [ebx+48], edx
|
||||||
|
@@:
|
||||||
|
mov eax, [eax]
|
||||||
|
inc dword [ebx+52]
|
||||||
|
ret
|
||||||
|
|
||||||
|
.dodraw:
|
||||||
|
mov eax, [ebx+dlgtemplate.x]
|
||||||
|
mov edx, [ebx+dlgtemplate.y]
|
||||||
|
call get_console_ptr
|
||||||
|
mov esi, [ebx+44]
|
||||||
|
.0:
|
||||||
|
xor edx, edx
|
||||||
|
mov ah, [menu_selected_color]
|
||||||
|
cmp esi, [ebx+36]
|
||||||
|
jz @f
|
||||||
|
mov ah, [menu_normal_color]
|
||||||
|
@@:
|
||||||
|
push edi
|
||||||
|
mov ecx, [ebx+dlgtemplate.width]
|
||||||
|
mov al, ' '
|
||||||
|
stosw
|
||||||
|
dec ecx
|
||||||
|
stosw
|
||||||
|
dec ecx
|
||||||
|
dec ecx
|
||||||
|
push esi
|
||||||
|
add esi, 8
|
||||||
|
@@:
|
||||||
|
lodsb
|
||||||
|
test al, al
|
||||||
|
jz @f
|
||||||
|
cmp al, '&'
|
||||||
|
jnz .noamp
|
||||||
|
test dl, dl
|
||||||
|
jnz .noamp
|
||||||
|
mov dl, 1
|
||||||
|
lodsb
|
||||||
|
push eax
|
||||||
|
mov ah, [menu_selected_highlight_color]
|
||||||
|
push ecx
|
||||||
|
mov ecx, [esp+8]
|
||||||
|
cmp ecx, [ebx+36]
|
||||||
|
pop ecx
|
||||||
|
jz .amp1
|
||||||
|
mov ah, [menu_highlight_color]
|
||||||
|
.amp1:
|
||||||
|
stosw
|
||||||
|
pop eax
|
||||||
|
jmp .amp2
|
||||||
|
.noamp:
|
||||||
|
stosw
|
||||||
|
.amp2:
|
||||||
|
loop @b
|
||||||
|
mov al, ' '
|
||||||
|
cmp byte [esi], 0
|
||||||
|
jnz .1
|
||||||
|
lodsb
|
||||||
|
jmp .1
|
||||||
|
@@:
|
||||||
|
mov al, ' '
|
||||||
|
.1:
|
||||||
|
stosw
|
||||||
|
mov al, ' '
|
||||||
|
rep stosw
|
||||||
|
pop esi edi
|
||||||
|
add edi, [cur_width]
|
||||||
|
add edi, [cur_width]
|
||||||
|
cmp esi, [ebx+48]
|
||||||
|
jz @f
|
||||||
|
mov esi, [esi]
|
||||||
|
test esi, esi
|
||||||
|
jnz .0
|
||||||
|
@@:
|
||||||
|
; ‹¨¥©ª ¯à®ªàã⪨
|
||||||
|
mov ecx, [ebx+dlgtemplate.height]
|
||||||
|
cmp ecx, [ebx+40]
|
||||||
|
jz .noscrollbar
|
||||||
|
sub ecx, 2
|
||||||
|
jbe .noscrollbar
|
||||||
|
mov eax, [ebx+52]
|
||||||
|
mul ecx
|
||||||
|
div dword [ebx+40]
|
||||||
|
push eax
|
||||||
|
mov eax, [ebx+dlgtemplate.x]
|
||||||
|
add eax, [ebx+dlgtemplate.width]
|
||||||
|
mov edx, [ebx+dlgtemplate.y]
|
||||||
|
call get_console_ptr
|
||||||
|
pop edx
|
||||||
|
inc edx
|
||||||
|
mov al, 0x1E
|
||||||
|
mov ah, [menu_scrollbar_color]
|
||||||
|
mov [edi], ax
|
||||||
|
add edi, [cur_width]
|
||||||
|
add edi, [cur_width]
|
||||||
|
.2:
|
||||||
|
mov al, 0xB2
|
||||||
|
dec edx
|
||||||
|
jz @f
|
||||||
|
mov al, 0xB0
|
||||||
|
@@:
|
||||||
|
mov [edi], ax
|
||||||
|
add edi, [cur_width]
|
||||||
|
add edi, [cur_width]
|
||||||
|
loop .2
|
||||||
|
mov al, 0x1F
|
||||||
|
stosw
|
||||||
|
.noscrollbar:
|
||||||
|
ret
|
48
programs/fs/kfar/trunk/font.inc
Normal file
48
programs/fs/kfar/trunk/font.inc
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
fontname equ 'font8x16.bmp'
|
||||||
|
virtual at 0
|
||||||
|
file fontname, 3Eh
|
||||||
|
; sanity check
|
||||||
|
load a1 word from 0
|
||||||
|
load a2 dword from 0xE
|
||||||
|
if (a1 <> 'BM') | (a2 <> 0x28)
|
||||||
|
error 'not BMP file!'
|
||||||
|
end if
|
||||||
|
load a1 dword from 0x12
|
||||||
|
load a2 dword from 0x16
|
||||||
|
if (a1 and 0xF) | (a2 and 0xF) | (a1 > 16*16)
|
||||||
|
error 'font: invalid width or height'
|
||||||
|
end if
|
||||||
|
font_width = a1 shr 4
|
||||||
|
font_bmp_scanline = (font_width*2 + 3) and not 3
|
||||||
|
font_height = a2 shr 4
|
||||||
|
load a1 dword from 0x1A
|
||||||
|
if a1 <> 0x10001
|
||||||
|
error 'font: not monochrome bitmap'
|
||||||
|
end if
|
||||||
|
end virtual
|
||||||
|
|
||||||
|
font:
|
||||||
|
repeat font_height
|
||||||
|
cur_scan = %
|
||||||
|
repeat 256
|
||||||
|
virtual at 0
|
||||||
|
a2 = (font_width+14) shr 3
|
||||||
|
if cur_scan=1 & %=0x10
|
||||||
|
a2 = (font_width+7) shr 3
|
||||||
|
end if
|
||||||
|
file fontname:3Eh + font_bmp_scanline*(font_height*(16-((%-1) shr 4))-cur_scan) + ((((%-1) and 0xF)*font_width) shr 3), a2
|
||||||
|
dd 0
|
||||||
|
load a1 dword from 0
|
||||||
|
a1 = ((a1 and 0x55555555) shl 1) or ((a1 and 0xAAAAAAAA) shr 1)
|
||||||
|
a1 = ((a1 and 0x33333333) shl 2) or ((a1 and 0xCCCCCCCC) shr 2)
|
||||||
|
a1 = ((a1 and 0x0F0F0F0F) shl 4) or ((a1 and 0xF0F0F0F0) shr 4)
|
||||||
|
end virtual
|
||||||
|
a1 = (a1 shr (((%-1)*font_width) and 7)) and ((1 shl font_width) - 1)
|
||||||
|
a1 = a1 xor ((1 shl font_width) - 1)
|
||||||
|
if font_width > 8
|
||||||
|
dw a1
|
||||||
|
else
|
||||||
|
db a1
|
||||||
|
end if
|
||||||
|
end repeat
|
||||||
|
end repeat
|
BIN
programs/fs/kfar/trunk/font10x20.bmp
Normal file
BIN
programs/fs/kfar/trunk/font10x20.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.3 KiB |
BIN
programs/fs/kfar/trunk/font6x9.bmp
Normal file
BIN
programs/fs/kfar/trunk/font6x9.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
BIN
programs/fs/kfar/trunk/font7x12.bmp
Normal file
BIN
programs/fs/kfar/trunk/font7x12.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.1 KiB |
BIN
programs/fs/kfar/trunk/font8x16.bmp
Normal file
BIN
programs/fs/kfar/trunk/font8x16.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.1 KiB |
BIN
programs/fs/kfar/trunk/font8x9.bmp
Normal file
BIN
programs/fs/kfar/trunk/font8x9.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.3 KiB |
3648
programs/fs/kfar/trunk/kfar.asm
Normal file
3648
programs/fs/kfar/trunk/kfar.asm
Normal file
File diff suppressed because it is too large
Load Diff
50
programs/fs/kfar/trunk/kglobals.inc
Normal file
50
programs/fs/kfar/trunk/kglobals.inc
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
;------------------------------------------------------------------
|
||||||
|
; use "iglobal" for inserting initialized global data definitions.
|
||||||
|
;------------------------------------------------------------------
|
||||||
|
macro iglobal {
|
||||||
|
IGlobals equ IGlobals,
|
||||||
|
macro __IGlobalBlock { }
|
||||||
|
|
||||||
|
;-------------------------------------------------------------
|
||||||
|
; use 'uglobal' for inserting uninitialized global definitions.
|
||||||
|
; even when you define some data values, these variables
|
||||||
|
; will be stored as uninitialized data.
|
||||||
|
;-------------------------------------------------------------
|
||||||
|
macro uglobal {
|
||||||
|
UGlobals equ UGlobals,
|
||||||
|
macro __UGlobalBlock { }
|
||||||
|
|
||||||
|
endg fix } ; Use endg for ending iglobal and uglobal blocks.
|
||||||
|
|
||||||
|
macro IncludeIGlobals{
|
||||||
|
macro IGlobals dummy,[n] \{ __IGlobalBlock
|
||||||
|
purge __IGlobalBlock \}
|
||||||
|
match I, IGlobals \{ I \} }
|
||||||
|
|
||||||
|
|
||||||
|
macro IncludeUGlobals{
|
||||||
|
macro UGlobals dummy,[n] \{
|
||||||
|
\common
|
||||||
|
\local begin, size
|
||||||
|
begin = $
|
||||||
|
virtual at $
|
||||||
|
\forward
|
||||||
|
__UGlobalBlock
|
||||||
|
purge __UGlobalBlock
|
||||||
|
\common
|
||||||
|
size = $ - begin
|
||||||
|
end virtual
|
||||||
|
rb size
|
||||||
|
\}
|
||||||
|
match U, UGlobals \{ U \} }
|
||||||
|
|
||||||
|
macro IncludeAllGlobals {
|
||||||
|
IncludeIGlobals
|
||||||
|
IncludeUGlobals
|
||||||
|
}
|
||||||
|
|
||||||
|
iglobal
|
||||||
|
endg
|
||||||
|
|
||||||
|
uglobal
|
||||||
|
endg
|
517
programs/fs/kfar/trunk/memalloc.inc
Normal file
517
programs/fs/kfar/trunk/memalloc.inc
Normal file
@ -0,0 +1,517 @@
|
|||||||
|
if ~ used memalloc_inc
|
||||||
|
memalloc_inc_fix:
|
||||||
|
memalloc_inc fix memalloc_inc_fix
|
||||||
|
;kglobals.inc required.
|
||||||
|
;multithread: ;uncomment this for thread-safe version
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; Memory allocator for MenuetOS ;;
|
||||||
|
;; Halyavin Andrey halyavin@land.ru, 2006 ;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; allocated mem block structure ;;
|
||||||
|
;; +0: bit 0 - used flag ;;
|
||||||
|
;; bits 31..1 - block size ;;
|
||||||
|
;; +4: address of prev block ;;
|
||||||
|
;; +8 .. +(blocksize) - allocated memory ;;
|
||||||
|
;; +(blocksize) - next block ;;
|
||||||
|
;; ;;
|
||||||
|
;; free mem block structure ;;
|
||||||
|
;; +0: bit 0 - used flag ;;
|
||||||
|
;; bits 31..1 - block size ;;
|
||||||
|
;; +4: address of prev block ;;
|
||||||
|
;; +8: prev free block ;;
|
||||||
|
;; +12: next free block ;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
memblock.size=0
|
||||||
|
memblock.prevblock=4
|
||||||
|
memblock.prevfreeblock=8
|
||||||
|
memblock.nextfreeblock=12
|
||||||
|
uglobal
|
||||||
|
heapsmallblocks rd 1
|
||||||
|
heapstart rd 1
|
||||||
|
heapend rd 1
|
||||||
|
heapfreelist rd 1
|
||||||
|
heapmutex rd 1
|
||||||
|
heaplastblock rd 1
|
||||||
|
endg
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; mf_init ;;
|
||||||
|
;; Initialize memory map for dynamic use ;;
|
||||||
|
;; input: eax: starting address or 0 ;;
|
||||||
|
;; output: none ;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
mf_init:
|
||||||
|
push ebx
|
||||||
|
push ecx
|
||||||
|
test eax,eax
|
||||||
|
jnz .noautodet
|
||||||
|
sub esp,1024
|
||||||
|
mov ebx,esp
|
||||||
|
mov ecx,-1
|
||||||
|
mov eax,9
|
||||||
|
int 0x40
|
||||||
|
mov eax,[esp+26]
|
||||||
|
add esp,1024
|
||||||
|
.noautodet:
|
||||||
|
add eax,15
|
||||||
|
and eax,not 15
|
||||||
|
mov [heapsmallblocks],eax
|
||||||
|
add eax,2048
|
||||||
|
mov [heapstart],eax
|
||||||
|
mov [heapfreelist],eax
|
||||||
|
mov [heaplastblock],eax
|
||||||
|
|
||||||
|
mov ecx,eax
|
||||||
|
if defined heapstartsize
|
||||||
|
add ecx,heapstartsize
|
||||||
|
else
|
||||||
|
add ecx,4096
|
||||||
|
end if
|
||||||
|
add ecx,4095
|
||||||
|
and ecx,not 4095
|
||||||
|
push eax
|
||||||
|
mov eax,64
|
||||||
|
mov ebx,1
|
||||||
|
int 0x40
|
||||||
|
pop eax
|
||||||
|
mov [eax+memblock.prevblock],dword 0
|
||||||
|
mov [heapend],ecx
|
||||||
|
mov [eax+memblock.size],ecx
|
||||||
|
sub [eax+memblock.size],eax
|
||||||
|
xor ebx,ebx
|
||||||
|
mov dword [eax+memblock.prevfreeblock],heapfreelist-memblock.nextfreeblock
|
||||||
|
mov [eax+memblock.nextfreeblock],ebx
|
||||||
|
mov [heapmutex],ebx
|
||||||
|
push edi
|
||||||
|
mov edi,[heapsmallblocks]
|
||||||
|
mov ecx,512
|
||||||
|
xor eax,eax
|
||||||
|
rep stosd
|
||||||
|
pop edi
|
||||||
|
pop ecx
|
||||||
|
pop ebx
|
||||||
|
ret
|
||||||
|
|
||||||
|
if defined multithread
|
||||||
|
heaplock:
|
||||||
|
push eax
|
||||||
|
push ebx
|
||||||
|
mov eax,68
|
||||||
|
mov ebx,1
|
||||||
|
.loop:
|
||||||
|
xchg eax,[heapmutex]
|
||||||
|
test eax,eax
|
||||||
|
jz .endloop
|
||||||
|
int 0x40 ;change task
|
||||||
|
jmp .loop
|
||||||
|
.endloop:
|
||||||
|
pop ebx
|
||||||
|
pop eax
|
||||||
|
ret
|
||||||
|
|
||||||
|
heapunlock:
|
||||||
|
mov [heapmutex],dword 0
|
||||||
|
ret
|
||||||
|
end if
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; heap_split_block ;;
|
||||||
|
;; Split free block to allocated block and free one. ;;
|
||||||
|
;; input: ;;
|
||||||
|
;; eax - size of allocated block ;;
|
||||||
|
;; ebx - block ;;
|
||||||
|
;; output: ;;
|
||||||
|
;; eax - real size of allocated block ;;
|
||||||
|
;; ebx - pointer to new block ;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
heap_split_block:
|
||||||
|
push ecx
|
||||||
|
mov ecx,[ebx+memblock.size]
|
||||||
|
sub ecx,16
|
||||||
|
cmp ecx,eax
|
||||||
|
jge .norm
|
||||||
|
inc dword [ebx+memblock.size]
|
||||||
|
mov eax,ecx
|
||||||
|
xor ebx,ebx
|
||||||
|
pop ecx
|
||||||
|
ret
|
||||||
|
.norm:
|
||||||
|
add ecx,16
|
||||||
|
mov [ebx+memblock.size],eax
|
||||||
|
inc dword [ebx+memblock.size]
|
||||||
|
mov [ebx+eax+memblock.prevblock],ebx
|
||||||
|
add ebx,eax
|
||||||
|
sub ecx,eax
|
||||||
|
mov [ebx+memblock.size],ecx
|
||||||
|
mov ecx,eax
|
||||||
|
mov eax,ebx
|
||||||
|
call heap_fix_right
|
||||||
|
mov eax,ecx
|
||||||
|
pop ecx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; heap_add_free_block ;;
|
||||||
|
;; Add free block to one of free block lists. ;;
|
||||||
|
;; input: ;;
|
||||||
|
;; eax - address of free block ;;
|
||||||
|
;; output: ;;
|
||||||
|
;; none ;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
heap_add_free_block:
|
||||||
|
cmp dword [eax+memblock.size],4096
|
||||||
|
push ebx
|
||||||
|
jge .bigblock
|
||||||
|
mov ebx,[eax+memblock.size]
|
||||||
|
shr ebx,1
|
||||||
|
add ebx,[heapsmallblocks]
|
||||||
|
push dword [ebx]
|
||||||
|
pop dword [eax+memblock.nextfreeblock]
|
||||||
|
mov [ebx],eax
|
||||||
|
mov dword [eax+memblock.prevfreeblock],ebx
|
||||||
|
sub dword [eax+memblock.prevfreeblock],memblock.nextfreeblock
|
||||||
|
mov ebx,[eax+memblock.nextfreeblock]
|
||||||
|
test ebx,ebx
|
||||||
|
jz .no_next_block
|
||||||
|
mov [ebx+memblock.prevfreeblock],eax
|
||||||
|
.no_next_block:
|
||||||
|
pop ebx
|
||||||
|
ret
|
||||||
|
.bigblock:
|
||||||
|
mov ebx,[heapfreelist]
|
||||||
|
mov [eax+memblock.nextfreeblock],ebx
|
||||||
|
mov [heapfreelist],eax
|
||||||
|
mov dword [eax+memblock.prevfreeblock],heapfreelist-memblock.nextfreeblock
|
||||||
|
; mov ebx,[eax+memblock.nextfreeblock]
|
||||||
|
test ebx,ebx
|
||||||
|
jz .no_next_big_block
|
||||||
|
mov [ebx+memblock.prevfreeblock],eax
|
||||||
|
.no_next_big_block:
|
||||||
|
pop ebx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; heap_remove_block ;;
|
||||||
|
;; Remove free block from the list of free blocks. ;;
|
||||||
|
;; input: ;;
|
||||||
|
;; eax - free block ;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
heap_remove_block:
|
||||||
|
push ebx
|
||||||
|
push ecx
|
||||||
|
mov ecx,[eax+memblock.prevfreeblock]
|
||||||
|
mov ebx,[eax+memblock.nextfreeblock]
|
||||||
|
mov [ecx+memblock.nextfreeblock],ebx
|
||||||
|
test ebx,ebx
|
||||||
|
jz .no_next_block
|
||||||
|
mov [ebx+memblock.prevfreeblock],ecx
|
||||||
|
.no_next_block:
|
||||||
|
pop ecx
|
||||||
|
pop ebx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; mf_alloc
|
||||||
|
;; allocates a block of memory in heap
|
||||||
|
;; intput: eax: size of block
|
||||||
|
;; output: eax: address of allocated memory block or 0 if there's no mem.
|
||||||
|
;; allocator will not create new nodes that contain less that 8b of space,
|
||||||
|
;; and minimal allocation is actually 16 bytes - 8 for node and 8 for user.
|
||||||
|
;; allocator will never create non-aligned memory blocks.
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
mf_alloc:
|
||||||
|
test eax,eax
|
||||||
|
jg .not_null ; test that we are not allocating null size block
|
||||||
|
xor eax,eax
|
||||||
|
ret
|
||||||
|
.not_null:
|
||||||
|
if defined multithread
|
||||||
|
call heaplock
|
||||||
|
end if
|
||||||
|
push edi
|
||||||
|
; push edx
|
||||||
|
push ecx
|
||||||
|
push ebx
|
||||||
|
add eax,7
|
||||||
|
and eax,not 7 ; make sure that block size is aligned
|
||||||
|
|
||||||
|
lea edi,[eax+8] ; desired block size
|
||||||
|
cmp edi,4096
|
||||||
|
jge .general_cycle
|
||||||
|
|
||||||
|
mov ebx,[heapsmallblocks]
|
||||||
|
xor ecx,ecx
|
||||||
|
shr edi,1
|
||||||
|
|
||||||
|
.smallloop:
|
||||||
|
cmp [ebx+edi],ecx
|
||||||
|
jnz .smallblockfound
|
||||||
|
add edi,4
|
||||||
|
cmp edi,2048
|
||||||
|
jl .smallloop
|
||||||
|
lea edi,[eax+8]
|
||||||
|
jmp .general_cycle
|
||||||
|
|
||||||
|
.smallblockfound:
|
||||||
|
lea ecx,[eax+8]
|
||||||
|
mov eax,[ebx+edi]
|
||||||
|
call heap_remove_block
|
||||||
|
mov ebx,eax
|
||||||
|
xchg eax,ecx
|
||||||
|
call heap_split_block
|
||||||
|
test ebx,ebx
|
||||||
|
jz .perfect_small_block
|
||||||
|
mov eax,ebx
|
||||||
|
call heap_add_free_block
|
||||||
|
.perfect_small_block:
|
||||||
|
lea eax,[ecx+8]
|
||||||
|
jmp .ret
|
||||||
|
|
||||||
|
.general_cycle:
|
||||||
|
;edi - size needed
|
||||||
|
mov eax,[heapfreelist]
|
||||||
|
|
||||||
|
.loop:
|
||||||
|
test eax,eax
|
||||||
|
jz .new_mem
|
||||||
|
cmp [eax+memblock.size],edi
|
||||||
|
jge .blockfound
|
||||||
|
mov eax,[eax+memblock.nextfreeblock]
|
||||||
|
jmp .loop
|
||||||
|
|
||||||
|
.blockfound:
|
||||||
|
call heap_remove_block
|
||||||
|
mov ebx,eax
|
||||||
|
mov ecx,eax
|
||||||
|
mov eax,edi
|
||||||
|
call heap_split_block
|
||||||
|
test ebx,ebx
|
||||||
|
jz .perfect_block
|
||||||
|
mov eax,ebx
|
||||||
|
call heap_add_free_block
|
||||||
|
.perfect_block:
|
||||||
|
lea eax,[ecx+8]
|
||||||
|
.ret:
|
||||||
|
if defined multithread
|
||||||
|
call heapunlock
|
||||||
|
end if
|
||||||
|
pop ebx
|
||||||
|
pop ecx
|
||||||
|
; pop edx
|
||||||
|
pop edi
|
||||||
|
ret
|
||||||
|
|
||||||
|
.new_mem:
|
||||||
|
mov eax,edi
|
||||||
|
add eax,4095
|
||||||
|
and eax,not 4095
|
||||||
|
mov ecx,[heapend]
|
||||||
|
add [heapend],eax
|
||||||
|
push eax
|
||||||
|
mov eax,64
|
||||||
|
push ebx
|
||||||
|
push ecx
|
||||||
|
mov ecx,[heapend]
|
||||||
|
mov ebx,1
|
||||||
|
int 0x40
|
||||||
|
pop ecx
|
||||||
|
pop ebx
|
||||||
|
pop eax
|
||||||
|
mov [ecx+memblock.size],eax
|
||||||
|
mov eax,[heaplastblock]
|
||||||
|
mov [ecx+memblock.prevblock],eax
|
||||||
|
mov [heaplastblock],ecx
|
||||||
|
mov eax,ecx
|
||||||
|
call heap_add_free_block
|
||||||
|
jmp .general_cycle
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; heap_fix_right ;;
|
||||||
|
;; input: ;;
|
||||||
|
;; eax - pointer to free block ;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
heap_fix_right:
|
||||||
|
push ebx
|
||||||
|
mov ebx,eax
|
||||||
|
add ebx,[eax+memblock.size]
|
||||||
|
cmp ebx,[heapend]
|
||||||
|
jz .endblock
|
||||||
|
mov [ebx+memblock.prevblock],eax
|
||||||
|
pop ebx
|
||||||
|
ret
|
||||||
|
.endblock:
|
||||||
|
mov [heaplastblock],eax
|
||||||
|
pop ebx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; heap_merge_left ;;
|
||||||
|
;; input: ;;
|
||||||
|
;; eax - pointer to free block ;;
|
||||||
|
;; output: ;;
|
||||||
|
;; eax - pointer to merged block ;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
heap_merge_left:
|
||||||
|
push ebx
|
||||||
|
mov ebx,[eax+memblock.prevblock]
|
||||||
|
test ebx,ebx
|
||||||
|
jz .ret
|
||||||
|
test byte [ebx+memblock.size],1
|
||||||
|
jnz .ret
|
||||||
|
xchg eax,ebx
|
||||||
|
call heap_remove_block
|
||||||
|
mov ebx,[ebx+memblock.size]
|
||||||
|
add [eax+memblock.size],ebx
|
||||||
|
call heap_fix_right
|
||||||
|
.ret:
|
||||||
|
pop ebx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; heap_merge_right ;;
|
||||||
|
;; input: ;;
|
||||||
|
;; eax - pointer to free block ;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
heap_merge_right:
|
||||||
|
push ebx
|
||||||
|
mov ebx,eax
|
||||||
|
add ebx,[eax+memblock.size]
|
||||||
|
cmp ebx,[heapend]
|
||||||
|
jz .ret
|
||||||
|
test byte [ebx+memblock.size],1
|
||||||
|
jnz .ret
|
||||||
|
xchg eax,ebx
|
||||||
|
call heap_remove_block
|
||||||
|
xchg eax,ebx
|
||||||
|
mov ebx,[ebx+memblock.size]
|
||||||
|
add [eax+memblock.size],ebx
|
||||||
|
call heap_fix_right
|
||||||
|
.ret:
|
||||||
|
pop ebx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; mf_free ;;
|
||||||
|
;; input: ;;
|
||||||
|
;; eax - pointer ;;
|
||||||
|
;; output: ;;
|
||||||
|
;; eax=1 - ok ;;
|
||||||
|
;; eax=0 - failed ;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
mf_free:
|
||||||
|
test eax,eax
|
||||||
|
jnz .no_null
|
||||||
|
inc eax
|
||||||
|
ret
|
||||||
|
.no_null:
|
||||||
|
if defined multithread
|
||||||
|
call heaplock
|
||||||
|
end if
|
||||||
|
sub eax,8
|
||||||
|
dec dword [eax+memblock.size]
|
||||||
|
call heap_merge_left
|
||||||
|
call heap_merge_right
|
||||||
|
call heap_add_free_block
|
||||||
|
.ret:
|
||||||
|
if defined multithread
|
||||||
|
call heapunlock
|
||||||
|
end if
|
||||||
|
ret
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; heap_try_reloc
|
||||||
|
;; input:
|
||||||
|
;; eax - address
|
||||||
|
;; ebx - new size
|
||||||
|
;; output:
|
||||||
|
;; ebx=1 - ok
|
||||||
|
;; ebx=0 - failed
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
heap_try_reloc:
|
||||||
|
push eax
|
||||||
|
sub eax,8
|
||||||
|
add ebx,15
|
||||||
|
dec dword [eax+memblock.size]
|
||||||
|
and ebx,not 7
|
||||||
|
cmp [eax+memblock.size],ebx
|
||||||
|
jge .truncate
|
||||||
|
push ebx
|
||||||
|
mov ebx,eax
|
||||||
|
add ebx,[eax+memblock.size]
|
||||||
|
cmp ebx,[heapend]
|
||||||
|
jz .fail ;todo: we can allocate new mem here
|
||||||
|
test [ebx+memblock.size],byte 1
|
||||||
|
jnz .fail
|
||||||
|
xchg eax,ebx
|
||||||
|
call heap_remove_block
|
||||||
|
mov eax,[eax+memblock.size]
|
||||||
|
add [ebx+memblock.size],eax
|
||||||
|
mov eax,ebx
|
||||||
|
call heap_fix_right
|
||||||
|
pop ebx
|
||||||
|
.truncate:
|
||||||
|
xchg eax,ebx
|
||||||
|
call heap_split_block
|
||||||
|
test ebx,ebx
|
||||||
|
jz .no_last_block
|
||||||
|
mov eax,ebx
|
||||||
|
call heap_add_free_block
|
||||||
|
call heap_merge_right
|
||||||
|
.no_last_block:
|
||||||
|
xor ebx,ebx
|
||||||
|
pop eax
|
||||||
|
inc ebx
|
||||||
|
ret
|
||||||
|
.fail:
|
||||||
|
pop ebx
|
||||||
|
xor ebx,ebx
|
||||||
|
pop eax
|
||||||
|
inc dword [eax-8+memblock.size]
|
||||||
|
ret
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; mf_realloc
|
||||||
|
;; input:
|
||||||
|
;; eax - pointer
|
||||||
|
;; ebx - new size
|
||||||
|
;; output:
|
||||||
|
;; eax - new pointer
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
mf_realloc:
|
||||||
|
push ebx
|
||||||
|
if defined multithread
|
||||||
|
call heaplock
|
||||||
|
end if
|
||||||
|
call heap_try_reloc
|
||||||
|
test ebx,ebx
|
||||||
|
jnz .ret
|
||||||
|
;allocate new memory
|
||||||
|
push eax
|
||||||
|
mov eax,[esp+4]
|
||||||
|
call mf_alloc
|
||||||
|
test eax,eax
|
||||||
|
jz .fail
|
||||||
|
push esi
|
||||||
|
push edi
|
||||||
|
push ecx
|
||||||
|
mov edi,eax
|
||||||
|
mov esi,[esp+12]
|
||||||
|
mov ecx,[esi-8+memblock.size]
|
||||||
|
shr ecx,2
|
||||||
|
rep movsd
|
||||||
|
pop ecx
|
||||||
|
pop edi
|
||||||
|
pop esi
|
||||||
|
xchg eax,[esp]
|
||||||
|
call mf_free
|
||||||
|
.fail:
|
||||||
|
pop eax
|
||||||
|
.ret:
|
||||||
|
if defined multithread
|
||||||
|
call heapunlock
|
||||||
|
end if
|
||||||
|
pop ebx
|
||||||
|
ret
|
||||||
|
end if
|
67
programs/fs/kfar/trunk/sort.inc
Normal file
67
programs/fs/kfar/trunk/sort.inc
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
; ‘®àâ¨à®¢ª dword'®¢ ¢ ª®«¨ç¥á⢥ ecx ¯® ¤à¥áã edx, äãªæ¨ï áà ¢¥¨ï ¢ ebx
|
||||||
|
; <EFBFBD> §àãè ¥â eax, ecx, esi, edi
|
||||||
|
sort:
|
||||||
|
jecxz .done
|
||||||
|
mov eax, ecx
|
||||||
|
@@:
|
||||||
|
push eax
|
||||||
|
call .restore
|
||||||
|
pop eax
|
||||||
|
dec eax
|
||||||
|
jnz @b
|
||||||
|
@@:
|
||||||
|
cmp ecx, 1
|
||||||
|
jz .done
|
||||||
|
mov esi, 1
|
||||||
|
mov edi, ecx
|
||||||
|
call .exchange
|
||||||
|
dec ecx
|
||||||
|
mov eax, 1
|
||||||
|
call .restore
|
||||||
|
jmp @b
|
||||||
|
.done:
|
||||||
|
ret
|
||||||
|
|
||||||
|
.exchange:
|
||||||
|
push eax ecx
|
||||||
|
mov eax, [edx+esi*4-4]
|
||||||
|
mov ecx, [edx+edi*4-4]
|
||||||
|
mov [edx+esi*4-4], ecx
|
||||||
|
mov [edx+edi*4-4], eax
|
||||||
|
pop ecx eax
|
||||||
|
ret
|
||||||
|
|
||||||
|
.restore:
|
||||||
|
lea esi, [eax+eax]
|
||||||
|
cmp esi, ecx
|
||||||
|
ja .doner
|
||||||
|
push esi
|
||||||
|
mov esi, [edx+esi*4-4]
|
||||||
|
mov edi, [edx+eax*4-4]
|
||||||
|
call ebx
|
||||||
|
pop esi
|
||||||
|
ja .need_xchg
|
||||||
|
cmp esi, ecx
|
||||||
|
jae .doner
|
||||||
|
push esi
|
||||||
|
mov esi, [edx+esi*4]
|
||||||
|
mov edi, [edx+eax*4-4]
|
||||||
|
call ebx
|
||||||
|
pop esi
|
||||||
|
jbe .doner
|
||||||
|
.need_xchg:
|
||||||
|
cmp esi, ecx
|
||||||
|
jz .do_xchg
|
||||||
|
push esi
|
||||||
|
mov edi, [edx+esi*4-4]
|
||||||
|
mov esi, [edx+esi*4]
|
||||||
|
call ebx
|
||||||
|
pop esi
|
||||||
|
sbb esi, -1
|
||||||
|
.do_xchg:
|
||||||
|
mov edi, eax
|
||||||
|
call .exchange
|
||||||
|
mov eax, esi
|
||||||
|
jmp .restore
|
||||||
|
.doner:
|
||||||
|
ret
|
1216
programs/fs/kfar/trunk/viewer.inc
Normal file
1216
programs/fs/kfar/trunk/viewer.inc
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,5 @@
|
|||||||
@erase lang.inc
|
@erase lang.inc
|
||||||
@echo lang fix en >lang.inc
|
@echo lang fix en >lang.inc
|
||||||
@fasm chess.asm chess
|
@fasm chess.asm chess
|
||||||
|
@erase lang.inc
|
||||||
@pause
|
@pause
|
@ -1,4 +1,5 @@
|
|||||||
@erase lang.inc
|
@erase lang.inc
|
||||||
@echo lang fix ru >lang.inc
|
@echo lang fix ru >lang.inc
|
||||||
@fasm chess.asm chess
|
@fasm chess.asm chess
|
||||||
|
@erase lang.inc
|
||||||
@pause
|
@pause
|
@ -4,6 +4,9 @@
|
|||||||
; Compile with FASM for Menuet
|
; Compile with FASM for Menuet
|
||||||
;
|
;
|
||||||
|
|
||||||
|
appname equ 'Chess Client for Chessclub.com '
|
||||||
|
version equ '0.2'
|
||||||
|
|
||||||
use32
|
use32
|
||||||
|
|
||||||
org 0x0
|
org 0x0
|
||||||
@ -19,9 +22,17 @@ use32
|
|||||||
include 'lang.inc'
|
include 'lang.inc'
|
||||||
include 'macros.inc'
|
include 'macros.inc'
|
||||||
|
|
||||||
file_info:
|
;file_info:
|
||||||
|
;
|
||||||
|
; dd 0,0,-1,0x4000,0x20000
|
||||||
|
; db '/rd/1/chess.bmp',0
|
||||||
|
|
||||||
dd 0,0,-1,0x4000,0x20000
|
file_info:
|
||||||
|
dd 0
|
||||||
|
dd 0
|
||||||
|
dd 0
|
||||||
|
dd -1
|
||||||
|
dd 0x4000
|
||||||
db '/rd/1/chess.bmp',0
|
db '/rd/1/chess.bmp',0
|
||||||
|
|
||||||
pawn_color:
|
pawn_color:
|
||||||
@ -52,7 +63,9 @@ text equ texts+80*32*4
|
|||||||
|
|
||||||
START: ; start of execution
|
START: ; start of execution
|
||||||
|
|
||||||
mov eax,58
|
; mov eax,58
|
||||||
|
mov eax,70
|
||||||
|
; mov ebx,file_info
|
||||||
mov ebx,file_info
|
mov ebx,file_info
|
||||||
int 0x40
|
int 0x40
|
||||||
|
|
||||||
@ -896,16 +909,8 @@ draw_window:
|
|||||||
mov bx,550
|
mov bx,550
|
||||||
mov cx,470
|
mov cx,470
|
||||||
mov edx,[wcolor]
|
mov edx,[wcolor]
|
||||||
add edx,0x03000000
|
add edx,0x13000000
|
||||||
mov esi,0x80557799
|
mov edi,header
|
||||||
mov edi,0x00557799
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov eax,4 ; WINDOW LABEL
|
|
||||||
mov ebx,8*65536+8
|
|
||||||
mov ecx,0x10ffffff
|
|
||||||
mov edx,labelt
|
|
||||||
mov esi,labellen-labelt
|
|
||||||
int 0x40
|
int 0x40
|
||||||
|
|
||||||
call display_status
|
call display_status
|
||||||
@ -1213,8 +1218,8 @@ tcolor dd 0x000000
|
|||||||
sq_black dd 0x336688 ; 666666
|
sq_black dd 0x336688 ; 666666
|
||||||
sq_white dd 0xffffff
|
sq_white dd 0xffffff
|
||||||
|
|
||||||
labelt db 'Chess Client for Chessclub.com - v0.1'
|
header db appname,version,0
|
||||||
labellen:
|
|
||||||
setipt db ' . . .'
|
setipt db ' . . .'
|
||||||
setiplen:
|
setiplen:
|
||||||
setportt db ' '
|
setportt db ' '
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
@erase lang.inc
|
@erase lang.inc
|
||||||
@echo lang fix en >lang.inc
|
@echo lang fix en >lang.inc
|
||||||
@fasm tetris.asm tetris
|
@fasm tetris.asm tetris
|
||||||
|
@erase lang.inc
|
||||||
@pause
|
@pause
|
@ -1,4 +1,5 @@
|
|||||||
@erase lang.inc
|
@erase lang.inc
|
||||||
@echo lang fix ru >lang.inc
|
@echo lang fix ru >lang.inc
|
||||||
@fasm tetris.asm tetris
|
@fasm tetris.asm tetris
|
||||||
|
@erase lang.inc
|
||||||
@pause
|
@pause
|
@ -123,8 +123,10 @@ macro mpack dest, hsrc, lsrc
|
|||||||
end if
|
end if
|
||||||
}
|
}
|
||||||
|
|
||||||
macro __mov reg,a { ; mike.dld
|
macro __mov reg,a,b { ; mike.dld
|
||||||
if ~a eq
|
if (~a eq)&(~b eq)
|
||||||
|
mpack reg,a,b
|
||||||
|
else if (~a eq)&(b eq)
|
||||||
mov reg,a
|
mov reg,a
|
||||||
end if
|
end if
|
||||||
}
|
}
|
||||||
@ -144,7 +146,6 @@ macro mcall a,b,c,d,e,f { ; mike.dld
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; optimize the code for size
|
; optimize the code for size
|
||||||
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ UP_KEY equ 130+48
|
|||||||
DOWN_KEY equ 129+48
|
DOWN_KEY equ 129+48
|
||||||
LEFT_KEY equ 128+48
|
LEFT_KEY equ 128+48
|
||||||
RIGHT_KEY equ 131+48
|
RIGHT_KEY equ 131+48
|
||||||
BACKGROUND equ 03000080h
|
;BACKGROUND equ 03000080h
|
||||||
|
|
||||||
_MAXBLOCKS_ = 7*4
|
_MAXBLOCKS_ = 7*4
|
||||||
|
|
||||||
@ -220,7 +220,7 @@ button: ; button
|
|||||||
jmp still
|
jmp still
|
||||||
|
|
||||||
end_program:
|
end_program:
|
||||||
mov eax,0xffffffff ; close this program
|
mov eax,-1 ; close this program
|
||||||
int 0x40
|
int 0x40
|
||||||
|
|
||||||
go_new_game:
|
go_new_game:
|
||||||
@ -241,64 +241,51 @@ jmp still
|
|||||||
draw_window:
|
draw_window:
|
||||||
|
|
||||||
|
|
||||||
|
mov eax,48
|
||||||
|
mov ebx,3
|
||||||
|
mov ecx,sc
|
||||||
|
mov edx,sizeof.system_colors
|
||||||
|
int 0x40
|
||||||
|
|
||||||
mov eax,12 ; function 12:tell os about windowdraw
|
mov eax,12 ; function 12:tell os about windowdraw
|
||||||
mov ebx,1 ; 1, start of draw
|
mov ebx,1 ; 1, start of draw
|
||||||
int 0x40
|
int 0x40
|
||||||
|
|
||||||
; DRAW WINDOW
|
; DRAW WINDOW
|
||||||
mov eax,0 ; function 0 : define and draw window
|
xor eax,eax ; function 0 : define and draw window
|
||||||
mov ebx,320*65536+(LEN_X-BORDER_LEFT-BORDER_RIGHT)*ADOBE_SIZE+X_LOCATION*2
|
mov ebx,320*65536+(LEN_X-BORDER_LEFT-BORDER_RIGHT)*ADOBE_SIZE+X_LOCATION*2
|
||||||
mov ecx,25*65536+ (LEN_Y-BORDER_TOP-BORDER_BOTTOM)*ADOBE_SIZE+Y_LOCATION+30
|
mov ecx,25*65536+ (LEN_Y-BORDER_TOP-BORDER_BOTTOM)*ADOBE_SIZE+Y_LOCATION+30
|
||||||
mov edx,BACKGROUND ; color of work area RRGGBB
|
mov edx,[sc.work] ; color of work area RRGGBB
|
||||||
mov esi,0x006688ee;99bbff ; color of grab bar RRGGBB,8->col
|
or edx,0x13000000
|
||||||
mov edi,0x007799ff;99bbee ; color of frames RRGGBB
|
mov edi,header ; WINDOW LABEL
|
||||||
int 0x40
|
int 0x40
|
||||||
|
|
||||||
; WINDOW LABEL
|
|
||||||
mov eax,4 ; function 4 : write text to window
|
|
||||||
mov ebx,8*65536+8 ; [x start] *65536 + [y start]
|
|
||||||
mov ecx,0x10ffffff ; color of text RRGGBB
|
|
||||||
mov edx,labelt ; pointer to text beginning
|
|
||||||
mov esi,labellen-labelt ; text length
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
; CLOSE BUTTON
|
|
||||||
; mov eax,8 ; function 8 : define and draw button
|
|
||||||
; mov ebx,243*65536+12 ; [x start] *65536 + [x size]
|
|
||||||
; mov ecx,5*65536+12 ; [y start] *65536 + [y size]
|
|
||||||
; mov edx,1 ; button id
|
|
||||||
; mov esi,0x5580cc;22aacc ; button color RRGGBB
|
|
||||||
; int 0x40
|
|
||||||
|
|
||||||
mov eax,8
|
mov eax,8
|
||||||
mov ebx,30*65536+102
|
mov ebx,30*65536+100
|
||||||
mov ecx,378*65536+18
|
mov ecx,378*65536+18
|
||||||
mov edx,2
|
mov edx,2
|
||||||
mov esi,0xA24466;5580cc;22aacc
|
mov esi,[sc.work_button]
|
||||||
int 0x40
|
int 0x40
|
||||||
;/////////////////////////////////////////////// Wildwest's 'Pause' button
|
;/////////////////////////////////////////////// Wildwest's 'Pause' button
|
||||||
mov eax,8
|
;mov eax,8
|
||||||
mov ebx,132*65536+102
|
mov ebx,132*65536+102
|
||||||
mov ecx,378*65536+18
|
mov ecx,378*65536+18
|
||||||
mov edx,3
|
mov edx,3
|
||||||
mov esi,0x0FA0F0;
|
mov esi,[sc.work_button];
|
||||||
int 0x40
|
int 0x40
|
||||||
|
|
||||||
mov eax,4 ; function 4 : write text to window
|
mov eax,4 ; function 4 : write text to window
|
||||||
mov ebx,164*65536+384 ; [x start] *65536 + [y start]
|
mov ebx,164*65536+384 ; [x start] *65536 + [y start]
|
||||||
mov ecx,0x10ffffff ; color of text RRGGBB
|
mov ecx,[sc.work_button_text] ; color of text RRGGBB
|
||||||
mov edx,labe ; pointer to text beginning
|
or ecx,0x90000000
|
||||||
mov esi,labelen-labe ; text length
|
mov edx,labe ; pointer to text
|
||||||
int 0x40
|
int 0x40
|
||||||
;///////////////////////////////////////////////
|
;///////////////////////////////////////////////
|
||||||
mov eax,4
|
;mov eax,4
|
||||||
mov ebx,49*65536+384
|
mov ebx,49*65536+384
|
||||||
xor ecx,ecx
|
|
||||||
mov ecx,0x10ffffff
|
|
||||||
mov edx,game_finished
|
mov edx,game_finished
|
||||||
mov esi,size_of_game_finished-game_finished
|
|
||||||
int 0x40
|
int 0x40
|
||||||
|
|
||||||
call draw_table
|
call draw_table
|
||||||
|
|
||||||
movzx edx,byte [current_block_color]
|
movzx edx,byte [current_block_color]
|
||||||
@ -306,9 +293,9 @@ draw_window:
|
|||||||
|
|
||||||
cld
|
cld
|
||||||
mov ebx,38*65536+35 ; draw info text with function 4
|
mov ebx,38*65536+35 ; draw info text with function 4
|
||||||
mov ecx,0x10ffffff ; color
|
mov ecx,[sc.work_text] ; color
|
||||||
|
or ecx,0x90000000
|
||||||
mov edx,text
|
mov edx,text
|
||||||
mov esi,7
|
|
||||||
mov eax,4
|
mov eax,4
|
||||||
int 0x40
|
int 0x40
|
||||||
|
|
||||||
@ -454,7 +441,7 @@ x_draw: push edi
|
|||||||
; mov ebx,10
|
; mov ebx,10
|
||||||
; int 0x40
|
; int 0x40
|
||||||
; popa
|
; popa
|
||||||
mov ax,13
|
mov eax,13
|
||||||
movzx edx,byte [esi]
|
movzx edx,byte [esi]
|
||||||
mov edx,[color_table+edx*4]
|
mov edx,[color_table+edx*4]
|
||||||
int 0x40
|
int 0x40
|
||||||
@ -655,16 +642,12 @@ write_score:
|
|||||||
mov eax,[score]
|
mov eax,[score]
|
||||||
call number_to_str
|
call number_to_str
|
||||||
|
|
||||||
mov ebx,100*65536+100 ;clear box to write new score
|
mov ebx,90*65536+35 ; draw info text with function 4
|
||||||
mov ecx,35*65536+15
|
mov ecx,[sc.work_text] ; color
|
||||||
mov edx,BACKGROUND
|
or ecx,0x50000000
|
||||||
mov eax,13
|
|
||||||
int 40h
|
|
||||||
|
|
||||||
mov ebx,100*65536+35 ; draw info text with function 4
|
|
||||||
mov ecx,0xffff00 ; color
|
|
||||||
mov edx,number_str
|
mov edx,number_str
|
||||||
mov esi,[size_of_number_str]
|
mov esi,[size_of_number_str]
|
||||||
|
mov edi,[sc.work]
|
||||||
mov eax,4
|
mov eax,4
|
||||||
int 0x40
|
int 0x40
|
||||||
ret
|
ret
|
||||||
@ -842,27 +825,17 @@ block_table:
|
|||||||
|
|
||||||
if lang eq ru
|
if lang eq ru
|
||||||
|
|
||||||
labelt:
|
header db '’…’<E280A6>ˆ‘ 1.61 - ‘’<E28098>…‹Šˆ ˆ <20><>Ž<EFBFBD>…‹',0
|
||||||
db '’…’<E280A6>ˆ‘ 1.6 - ‘’<E28098>…‹Šˆ ˆ <20><>Ž<EFBFBD>…‹'
|
labe db '<27>€“‡€',0
|
||||||
labellen:
|
text db 'Žçª¨:',0
|
||||||
labe:
|
game_finished: db '<27>Ž‚€Ÿ',0
|
||||||
db '<27>€“‡€'
|
|
||||||
labelen:
|
|
||||||
text: db 'Žçª¨: '
|
|
||||||
game_finished: db ' <20>€—€’œ'
|
|
||||||
size_of_game_finished:
|
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
labelt:
|
header db 'TETRIS 1.61 - ARROWS & SPACE',0
|
||||||
db 'TETRIS 1.6 - ARROWS & SPACE'
|
labe db 'PAUSE',0
|
||||||
labellen:
|
text db 'Score:',0
|
||||||
labe:
|
game_finished: db 'NEW GAME',0
|
||||||
db 'PAUSE'
|
|
||||||
labelen:
|
|
||||||
text: db 'Score: '
|
|
||||||
game_finished: db 'NEW GAME'
|
|
||||||
size_of_game_finished:
|
|
||||||
|
|
||||||
end if
|
end if
|
||||||
|
|
||||||
@ -880,6 +853,8 @@ number_str: db 0,0,0,0,0,0,0,0,0
|
|||||||
end_number_str:
|
end_number_str:
|
||||||
size_of_number_str dd 9
|
size_of_number_str dd 9
|
||||||
delay: db 40
|
delay: db 40
|
||||||
|
sc system_colors
|
||||||
table_tetris:
|
table_tetris:
|
||||||
|
|
||||||
I_END:
|
I_END:
|
||||||
|
|
||||||
|
5679
programs/media/animage/trunk/animage.asm
Normal file
5679
programs/media/animage/trunk/animage.asm
Normal file
File diff suppressed because it is too large
Load Diff
715
programs/media/animage/trunk/bmplib.inc
Normal file
715
programs/media/animage/trunk/bmplib.inc
Normal file
@ -0,0 +1,715 @@
|
|||||||
|
;**************************************************************************
|
||||||
|
;**********************DECODING BMP FILE(1,4,8,24 bits)*********************
|
||||||
|
;***************************************************************************
|
||||||
|
; BMPTOIMG -Convert BMP format TO IMG format
|
||||||
|
;***************************************************************************
|
||||||
|
bmptoimg:
|
||||||
|
|
||||||
|
mov [bmp_load_area],esi
|
||||||
|
mov [img_dest_area],edi
|
||||||
|
xor eax,eax
|
||||||
|
mov ax,word[esi+28]
|
||||||
|
mov ebx,[esi+14]
|
||||||
|
mov ecx,[esi+18]
|
||||||
|
mov edx,[esi+22]
|
||||||
|
mov [bmp_bits_per_pixel],ax
|
||||||
|
mov [bmp_first_structure_size],ebx
|
||||||
|
mov [Bmp_SizeY],edx
|
||||||
|
mov [Bmp_SizeX],ecx
|
||||||
|
|
||||||
|
xor eax,eax
|
||||||
|
mov ax,[esi+28]
|
||||||
|
mul dword [esi+18]
|
||||||
|
add eax,31
|
||||||
|
shr eax,5
|
||||||
|
mov dword [bmptoimg_data_area_dwps],eax ;dwps-doublewords per string
|
||||||
|
shl eax,2
|
||||||
|
mov dword [bmptoimg_data_area_bps],eax ;bps-bytes per string
|
||||||
|
|
||||||
|
cmp dword [esi+34],0
|
||||||
|
jne yespicsize ;if picture size is defined
|
||||||
|
mul dword [esi+22]
|
||||||
|
mov dword [esi+34],eax
|
||||||
|
|
||||||
|
yespicsize:
|
||||||
|
|
||||||
|
mov eax,[bmp_load_area]
|
||||||
|
add eax, [esi+10] ;how mach bytes to begin bitmap
|
||||||
|
add eax, [esi+34] ;size of bitmap in BMP file
|
||||||
|
mov dword [bmptoimg_data_area_eop],eax ;eop-end of picture in file
|
||||||
|
;calculate bytes per string
|
||||||
|
mov eax, [esi+18]
|
||||||
|
lea eax,[eax+2*eax] ;3x pixels in eax
|
||||||
|
mov [bmp_bytes_per_string],eax
|
||||||
|
|
||||||
|
mov esi,dword [bmptoimg_data_area_eop]
|
||||||
|
sub esi,dword [bmptoimg_data_area_bps]
|
||||||
|
|
||||||
|
mov ebp,[img_dest_area]
|
||||||
|
mov edi,[img_dest_area]
|
||||||
|
mov ebx,[bmp_load_area]
|
||||||
|
add ebx, [bmp_first_structure_size]
|
||||||
|
add ebx,14 ;in ebx start of color table
|
||||||
|
|
||||||
|
|
||||||
|
cmp [bmp_bits_per_pixel],24
|
||||||
|
je convert_to_24bpp
|
||||||
|
|
||||||
|
cmp [bmp_bits_per_pixel],8
|
||||||
|
je convert_to_8bpp
|
||||||
|
|
||||||
|
cmp [bmp_bits_per_pixel],4
|
||||||
|
je convert_to_4bpp
|
||||||
|
|
||||||
|
cmp [bmp_bits_per_pixel],1
|
||||||
|
je convert_to_1bpp
|
||||||
|
|
||||||
|
jmp end_bmp
|
||||||
|
|
||||||
|
;--------------------------------------------------
|
||||||
|
;-----------Decoding 24 bit BMP file---------------
|
||||||
|
;--------------------------------------------------
|
||||||
|
convert_to_24bpp:
|
||||||
|
|
||||||
|
mov ebx,[Bmp_SizeY]
|
||||||
|
loop_convert_to_24bpp_y:
|
||||||
|
|
||||||
|
mov edi,ebp
|
||||||
|
mov ecx,[bmptoimg_data_area_dwps]
|
||||||
|
|
||||||
|
loop_convert_to_24bpp_x:
|
||||||
|
|
||||||
|
mov edx,[esi]
|
||||||
|
mov [edi],edx
|
||||||
|
add esi,4
|
||||||
|
add edi,4
|
||||||
|
|
||||||
|
dec ecx
|
||||||
|
jnz loop_convert_to_24bpp_x
|
||||||
|
|
||||||
|
sub esi,[bmptoimg_data_area_bps]
|
||||||
|
sub esi,[bmptoimg_data_area_bps]
|
||||||
|
|
||||||
|
add ebp,eax
|
||||||
|
dec ebx
|
||||||
|
jnz loop_convert_to_24bpp_y
|
||||||
|
|
||||||
|
jmp end_bmp
|
||||||
|
;-----------------------------------------------------
|
||||||
|
;--------------Decoding 8 bits BMP file---------------
|
||||||
|
;-----------------------------------------------------
|
||||||
|
convert_to_8bpp:
|
||||||
|
|
||||||
|
mov ebp,[Bmp_SizeY]
|
||||||
|
loop_convert_8bpp_y:
|
||||||
|
|
||||||
|
mov ecx,[bmptoimg_data_area_bps]
|
||||||
|
push edi
|
||||||
|
|
||||||
|
loop_convert_8bpp_x:
|
||||||
|
|
||||||
|
xor eax,eax
|
||||||
|
mov al,byte [esi]
|
||||||
|
call converttable
|
||||||
|
inc esi
|
||||||
|
add edi,3
|
||||||
|
|
||||||
|
dec ecx
|
||||||
|
jnz loop_convert_8bpp_x
|
||||||
|
|
||||||
|
pop edi
|
||||||
|
|
||||||
|
add edi,[bmp_bytes_per_string]
|
||||||
|
sub esi,[bmptoimg_data_area_bps]
|
||||||
|
sub esi,[bmptoimg_data_area_bps]
|
||||||
|
|
||||||
|
dec ebp
|
||||||
|
jnz loop_convert_8bpp_y
|
||||||
|
|
||||||
|
jmp end_bmp
|
||||||
|
;-----------------------------------------------------
|
||||||
|
;--------------Decoding 4 bits BMP file---------------
|
||||||
|
;-----------------------------------------------------
|
||||||
|
convert_to_4bpp:
|
||||||
|
|
||||||
|
mov ebp,[Bmp_SizeY]
|
||||||
|
loop_convert_4bpp_y:
|
||||||
|
|
||||||
|
mov ecx,[bmptoimg_data_area_bps]
|
||||||
|
push edi
|
||||||
|
|
||||||
|
loop_convert_4bpp_x:
|
||||||
|
|
||||||
|
mov [Bmp_save1],ecx
|
||||||
|
xor eax,eax
|
||||||
|
mov al,byte [esi]
|
||||||
|
xor ecx,ecx
|
||||||
|
mov cl,al
|
||||||
|
shr al,4 ;first pixel in byte
|
||||||
|
and cl,0xf ;second pixel in byte
|
||||||
|
call converttable ;draw first pixel of byte
|
||||||
|
mov eax,ecx ;move second pixel to register al and draw
|
||||||
|
add edi,3
|
||||||
|
call converttable ;draw second pixel of byte
|
||||||
|
add edi,3
|
||||||
|
mov ecx,[Bmp_save1]
|
||||||
|
inc esi
|
||||||
|
|
||||||
|
dec ecx
|
||||||
|
jnz loop_convert_4bpp_x
|
||||||
|
|
||||||
|
pop edi
|
||||||
|
|
||||||
|
add edi,[bmp_bytes_per_string]
|
||||||
|
sub esi,[bmptoimg_data_area_bps]
|
||||||
|
sub esi,[bmptoimg_data_area_bps]
|
||||||
|
|
||||||
|
dec ebp
|
||||||
|
jnz loop_convert_4bpp_y
|
||||||
|
|
||||||
|
jmp end_bmp
|
||||||
|
;-----------------------------------------------------
|
||||||
|
;---------------Decoding 1 bit BMP file---------------
|
||||||
|
;-----------------------------------------------------
|
||||||
|
convert_to_1bpp:
|
||||||
|
|
||||||
|
mov ebp,[Bmp_SizeY]
|
||||||
|
loop_convert_1bpp_y:
|
||||||
|
|
||||||
|
mov ecx,[bmptoimg_data_area_bps]
|
||||||
|
push edi
|
||||||
|
|
||||||
|
loop_convert_1bpp_x:
|
||||||
|
|
||||||
|
xor eax,eax
|
||||||
|
mov al,byte [esi]
|
||||||
|
mov [Bmp_save1],ecx
|
||||||
|
mov ecx,eax
|
||||||
|
mov edx,7
|
||||||
|
nextbit:
|
||||||
|
xor eax,eax
|
||||||
|
bt ecx,edx
|
||||||
|
jnc noaddelem
|
||||||
|
inc eax
|
||||||
|
noaddelem:
|
||||||
|
|
||||||
|
push edx
|
||||||
|
call converttable
|
||||||
|
pop edx
|
||||||
|
|
||||||
|
add edi,3
|
||||||
|
dec edx
|
||||||
|
jns nextbit
|
||||||
|
mov ecx,[Bmp_save1]
|
||||||
|
inc esi
|
||||||
|
dec ecx
|
||||||
|
jnz loop_convert_1bpp_x
|
||||||
|
|
||||||
|
pop edi
|
||||||
|
|
||||||
|
add edi,[bmp_bytes_per_string]
|
||||||
|
sub esi,[bmptoimg_data_area_bps]
|
||||||
|
sub esi,[bmptoimg_data_area_bps]
|
||||||
|
|
||||||
|
dec ebp
|
||||||
|
jnz loop_convert_1bpp_y
|
||||||
|
|
||||||
|
jmp end_bmp
|
||||||
|
;-----------------------------------------------------
|
||||||
|
converttable:
|
||||||
|
shl eax,2
|
||||||
|
add eax,ebx
|
||||||
|
mov edx, dword [eax]
|
||||||
|
mov [edi],edx
|
||||||
|
ret
|
||||||
|
;-----------------------------------------------------
|
||||||
|
; DATA AREA
|
||||||
|
bmptoimg_data_area_bps dd 0
|
||||||
|
bmptoimg_data_area_dwps dd 0
|
||||||
|
bmptoimg_data_area_eop dd 0
|
||||||
|
bmp_load_area dd 0
|
||||||
|
img_dest_area dd 0
|
||||||
|
bmp_bits_per_pixel dw 0
|
||||||
|
bmp_first_structure_size dd 0
|
||||||
|
bmp_bytes_per_string dd 0
|
||||||
|
|
||||||
|
end_bmp:
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
;***************************************************************************
|
||||||
|
;*******************CODING BMP FILE(1,4,8,24 bits)**************************
|
||||||
|
;***************************************************************************
|
||||||
|
|
||||||
|
;-------------------------autor andrew_programmer---------------------------
|
||||||
|
|
||||||
|
coding_bmp:
|
||||||
|
|
||||||
|
mov [PointerToImage],ebx
|
||||||
|
mov [WhereCodingBMP],ecx
|
||||||
|
mov [BmpPalette],edx
|
||||||
|
mov [Bmp_SizeX],esi
|
||||||
|
mov [Bmp_SizeY],edi
|
||||||
|
;**********************************************
|
||||||
|
;******************1 bit BMP*******************
|
||||||
|
;**********************************************
|
||||||
|
cmp eax,2
|
||||||
|
ja no_monohrom_colors
|
||||||
|
mov esi,[BmpPalette]
|
||||||
|
mov edi,[WhereCodingBMP]
|
||||||
|
add edi,54
|
||||||
|
mov eax,[esi] ;first color
|
||||||
|
mov ebx,[esi+4] ;second color
|
||||||
|
mov [edi],eax
|
||||||
|
mov [edi+4],ebx
|
||||||
|
|
||||||
|
;coding image to bmp 1 bit format
|
||||||
|
mov esi,[PointerToImage]
|
||||||
|
mov edx,[WhereCodingBMP]
|
||||||
|
mov ebx,[Bmp_SizeX]
|
||||||
|
add ebx,31 ;picture_size_x+31
|
||||||
|
shr ebx,5 ;((picture_size_x)+31)/32
|
||||||
|
mov [Bmp_doublewords],ebx ;double words in string
|
||||||
|
shl ebx,2
|
||||||
|
mov [Bmp_bytes_per_string],ebx ;bytes per string
|
||||||
|
mov ecx,[Bmp_SizeY]
|
||||||
|
dec ecx
|
||||||
|
imul ebx,ecx
|
||||||
|
add edx,54+8
|
||||||
|
add edx,ebx ;in edx pointer to area for coding
|
||||||
|
|
||||||
|
mov ebp,[Bmp_bytes_per_string]
|
||||||
|
|
||||||
|
mov ebx,[Bmp_SizeY]
|
||||||
|
mov esi,[PointerToImage]
|
||||||
|
mov edi,edx
|
||||||
|
|
||||||
|
mov edx,[Bmp_SizeX]
|
||||||
|
lea edx,[edx+edx*2]
|
||||||
|
|
||||||
|
mov [Bmp_Counter],7
|
||||||
|
and [Bmp_Counter2],0
|
||||||
|
copy_lines_1:
|
||||||
|
|
||||||
|
push esi
|
||||||
|
mov ecx,[Bmp_bytes_per_string]
|
||||||
|
shl ecx,3 ;(Bmp_bytes_per_string)*8
|
||||||
|
|
||||||
|
rep_movsb_1:
|
||||||
|
|
||||||
|
mov eax,[esi]
|
||||||
|
and eax,0xffffff
|
||||||
|
push esi
|
||||||
|
push ecx
|
||||||
|
push ebx
|
||||||
|
mov esi,[BmpPalette]
|
||||||
|
xor ecx,ecx
|
||||||
|
find_color_in_palette_1:
|
||||||
|
mov ebx,[esi]
|
||||||
|
and ebx,0xffffff
|
||||||
|
cmp eax,ebx ;color fined ?
|
||||||
|
je color_fined_1
|
||||||
|
add esi,4
|
||||||
|
inc ecx
|
||||||
|
cmp ecx,256
|
||||||
|
jl find_color_in_palette_1
|
||||||
|
color_fined_1:
|
||||||
|
mov [Bmp_Counter3],ecx ;number color in palette
|
||||||
|
pop ebx
|
||||||
|
pop ecx
|
||||||
|
pop esi
|
||||||
|
mov eax,[Bmp_Counter3]
|
||||||
|
|
||||||
|
test eax,eax
|
||||||
|
jz no_change_bit_in_byte
|
||||||
|
|
||||||
|
push ecx
|
||||||
|
mov ecx,[Bmp_Counter]
|
||||||
|
bts [Bmp_Counter2],ecx
|
||||||
|
pop ecx
|
||||||
|
|
||||||
|
no_change_bit_in_byte:
|
||||||
|
|
||||||
|
dec [Bmp_Counter]
|
||||||
|
jns no_minus_in_counter
|
||||||
|
|
||||||
|
push eax
|
||||||
|
mov eax,[Bmp_Counter2]
|
||||||
|
mov [edi],al
|
||||||
|
inc edi
|
||||||
|
mov [Bmp_Counter],7
|
||||||
|
and [Bmp_Counter2],0 ;obnulyaem byte
|
||||||
|
pop eax
|
||||||
|
|
||||||
|
no_minus_in_counter:
|
||||||
|
|
||||||
|
add esi,3
|
||||||
|
dec ecx
|
||||||
|
jnz rep_movsb_1
|
||||||
|
pop esi
|
||||||
|
|
||||||
|
add esi,edx
|
||||||
|
sub edi,ebp
|
||||||
|
sub edi,ebp
|
||||||
|
|
||||||
|
dec ebx
|
||||||
|
jnz copy_lines_1
|
||||||
|
|
||||||
|
mov edi,[WhereCodingBMP]
|
||||||
|
mov ebx,[Bmp_bytes_per_string]
|
||||||
|
imul ebx,[Bmp_SizeY]
|
||||||
|
add ebx,(54+8)
|
||||||
|
|
||||||
|
;crate list of bmp description
|
||||||
|
mov [edi],word 'BM'
|
||||||
|
mov [edi+2],ebx
|
||||||
|
mov [edi+10],dword 54+8 ;where bigin bmp imige
|
||||||
|
mov [edi+14],dword 40
|
||||||
|
mov edx,[Bmp_SizeX]
|
||||||
|
mov ecx,[Bmp_SizeY]
|
||||||
|
mov [edi+18],edx ;picture size x
|
||||||
|
mov [edi+22],ecx ;picture size y
|
||||||
|
mov [edi+26],word 1
|
||||||
|
mov [edi+28],word 1 ;bits per pixel
|
||||||
|
mov [edi+30],dword 0
|
||||||
|
mov edx,[Bmp_bytes_per_string]
|
||||||
|
imul edx,ecx
|
||||||
|
mov [edi+34],edx
|
||||||
|
mov [edi+38],dword 0
|
||||||
|
mov [edi+42],dword 0
|
||||||
|
mov [edi+46],dword 0
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
no_monohrom_colors:
|
||||||
|
|
||||||
|
;**********************************************
|
||||||
|
;*****************4 bits BMP*******************
|
||||||
|
;**********************************************
|
||||||
|
cmp eax,16
|
||||||
|
ja no_16_colors
|
||||||
|
;copy 16 colors palette
|
||||||
|
mov esi,[BmpPalette]
|
||||||
|
mov edi,[WhereCodingBMP]
|
||||||
|
add edi,54
|
||||||
|
mov ecx,16
|
||||||
|
rep movsd
|
||||||
|
|
||||||
|
;coding image to bmp 4 bits format
|
||||||
|
mov esi,[PointerToImage]
|
||||||
|
mov edx,[WhereCodingBMP]
|
||||||
|
mov ebx,[Bmp_SizeX]
|
||||||
|
shl ebx,2 ;4*(picture_size_x)
|
||||||
|
add ebx,31 ;4*(picture_size_x)+31
|
||||||
|
shr ebx,5 ;(4*(picture_size_x)+31)/32
|
||||||
|
mov [Bmp_doublewords],ebx ;double words in string
|
||||||
|
shl ebx,2
|
||||||
|
mov [Bmp_bytes_per_string],ebx ;bytes per string
|
||||||
|
mov ecx,[Bmp_SizeY]
|
||||||
|
dec ecx
|
||||||
|
imul ebx,ecx
|
||||||
|
add edx,54+64
|
||||||
|
add edx,ebx
|
||||||
|
|
||||||
|
mov ebp,[Bmp_bytes_per_string]
|
||||||
|
|
||||||
|
mov ebx,[Bmp_SizeY]
|
||||||
|
mov [Bmp_Counter2],ebx
|
||||||
|
|
||||||
|
mov edi,edx
|
||||||
|
|
||||||
|
xor ebx,ebx
|
||||||
|
copy_lines_4:
|
||||||
|
|
||||||
|
mov ecx,[Bmp_bytes_per_string]
|
||||||
|
shl ecx,1
|
||||||
|
|
||||||
|
and [Bmp_Counter3],0
|
||||||
|
push esi
|
||||||
|
|
||||||
|
rep_movsb_4:
|
||||||
|
mov eax,[esi]
|
||||||
|
and eax,0xffffff
|
||||||
|
|
||||||
|
mov [Bmp_save1],esi
|
||||||
|
mov [Bmp_save2],ecx
|
||||||
|
mov [Bmp_save3],ebx
|
||||||
|
mov esi,[BmpPalette]
|
||||||
|
xor ecx,ecx
|
||||||
|
find_color_in_palette_:
|
||||||
|
mov ebx,[esi]
|
||||||
|
and ebx,0xffffff
|
||||||
|
cmp eax,ebx ;color fined ?
|
||||||
|
je color_fined_
|
||||||
|
add esi,4
|
||||||
|
inc ecx
|
||||||
|
cmp ecx,16
|
||||||
|
jl find_color_in_palette_
|
||||||
|
color_fined_:
|
||||||
|
mov [Bmp_Counter],ecx ;number color in palette
|
||||||
|
mov esi,[Bmp_save1]
|
||||||
|
mov ecx,[Bmp_save2]
|
||||||
|
mov ebx,[Bmp_save3]
|
||||||
|
|
||||||
|
xor eax,eax
|
||||||
|
mov eax,[Bmp_Counter]
|
||||||
|
shl bl,4
|
||||||
|
add bl,al
|
||||||
|
|
||||||
|
mov eax,[Bmp_Counter3]
|
||||||
|
and eax,1b
|
||||||
|
test eax,eax ;next block ready ?
|
||||||
|
jz no_ready
|
||||||
|
mov [edi],bl ;4 bit color
|
||||||
|
inc edi
|
||||||
|
no_ready:
|
||||||
|
|
||||||
|
add esi,3
|
||||||
|
inc [Bmp_Counter3]
|
||||||
|
|
||||||
|
dec ecx
|
||||||
|
jnz rep_movsb_4
|
||||||
|
|
||||||
|
pop esi
|
||||||
|
|
||||||
|
add esi,[Bmp_SizeX]
|
||||||
|
add esi,[Bmp_SizeX]
|
||||||
|
add esi,[Bmp_SizeX]
|
||||||
|
|
||||||
|
sub edi,ebp
|
||||||
|
sub edi,ebp
|
||||||
|
|
||||||
|
dec [Bmp_Counter2]
|
||||||
|
jnz copy_lines_4
|
||||||
|
|
||||||
|
;total size of bmp file
|
||||||
|
mov edi,[WhereCodingBMP]
|
||||||
|
mov ebx,[Bmp_bytes_per_string]
|
||||||
|
imul ebx,[Bmp_SizeY]
|
||||||
|
add ebx,(54+64)
|
||||||
|
|
||||||
|
;crate list of bmp description
|
||||||
|
mov [edi],word 'BM'
|
||||||
|
mov [edi+2],ebx
|
||||||
|
mov [edi+10],dword 54+64
|
||||||
|
mov [edi+14],dword 40
|
||||||
|
mov edx,[Bmp_SizeX]
|
||||||
|
mov ecx,[Bmp_SizeY]
|
||||||
|
mov [edi+18],edx
|
||||||
|
mov [edi+22],ecx
|
||||||
|
mov [edi+26],word 1
|
||||||
|
mov [edi+28],word 4
|
||||||
|
mov [edi+30],dword 0
|
||||||
|
mov edx,[Bmp_bytes_per_string]
|
||||||
|
imul edx,ecx
|
||||||
|
mov [edi+34],edx
|
||||||
|
mov [edi+38],dword 0
|
||||||
|
mov [edi+42],dword 0
|
||||||
|
mov [edi+46],dword 0
|
||||||
|
|
||||||
|
ret
|
||||||
|
no_16_colors:
|
||||||
|
|
||||||
|
;**********************************************
|
||||||
|
;******************8 bits BMP******************
|
||||||
|
;**********************************************
|
||||||
|
|
||||||
|
cmp eax,256
|
||||||
|
ja no_8_bits_per_pixel
|
||||||
|
;copy palette
|
||||||
|
mov esi,[BmpPalette]
|
||||||
|
mov edi,[WhereCodingBMP]
|
||||||
|
add edi,54
|
||||||
|
mov ecx,256
|
||||||
|
rep movsd
|
||||||
|
|
||||||
|
;coding image to bmp 8 bits format
|
||||||
|
mov esi,[PointerToImage]
|
||||||
|
mov edx,[WhereCodingBMP]
|
||||||
|
mov ebx,[Bmp_SizeX]
|
||||||
|
shl ebx,3 ;8*(picture_size_x)
|
||||||
|
add ebx,31 ;8*(picture_size_x)+31
|
||||||
|
shr ebx,5 ;(8*(picture_size_x)+31)/32
|
||||||
|
mov [Bmp_doublewords],ebx ;double words in string
|
||||||
|
shl ebx,2
|
||||||
|
mov [Bmp_bytes_per_string],ebx ;bytes per string
|
||||||
|
|
||||||
|
mov ecx,[Bmp_SizeY]
|
||||||
|
dec ecx
|
||||||
|
imul ebx,ecx
|
||||||
|
add edx,(1024+54)
|
||||||
|
add edx,ebx ;in edx pointer to copy bitmap arrea
|
||||||
|
|
||||||
|
mov ebp,[Bmp_bytes_per_string]
|
||||||
|
shl ebp,1
|
||||||
|
|
||||||
|
mov ebx,[Bmp_SizeY]
|
||||||
|
mov edi,edx
|
||||||
|
|
||||||
|
copy_lines_8:
|
||||||
|
|
||||||
|
mov ecx,[Bmp_bytes_per_string]
|
||||||
|
mov [Bmp_save1],esi
|
||||||
|
rep_movsb_8:
|
||||||
|
mov eax,[esi]
|
||||||
|
and eax,0xffffff
|
||||||
|
push esi
|
||||||
|
push ecx
|
||||||
|
push ebx
|
||||||
|
mov esi,[BmpPalette]
|
||||||
|
xor ecx,ecx
|
||||||
|
find_color_in_palette:
|
||||||
|
mov ebx,[esi]
|
||||||
|
and ebx,0xffffff
|
||||||
|
cmp eax,ebx ;color fined ?
|
||||||
|
je color_fined
|
||||||
|
add esi,4
|
||||||
|
inc ecx
|
||||||
|
cmp ecx,256
|
||||||
|
jl find_color_in_palette
|
||||||
|
color_fined:
|
||||||
|
mov [Bmp_Counter],ecx ;number color in palette
|
||||||
|
pop ebx
|
||||||
|
pop ecx
|
||||||
|
pop esi
|
||||||
|
mov eax,[Bmp_Counter]
|
||||||
|
mov [edi],al ;8 bit color
|
||||||
|
add esi,3
|
||||||
|
inc edi
|
||||||
|
|
||||||
|
dec ecx
|
||||||
|
jnz rep_movsb_8
|
||||||
|
|
||||||
|
mov esi,[Bmp_save1]
|
||||||
|
|
||||||
|
add esi,[Bmp_SizeX]
|
||||||
|
add esi,[Bmp_SizeX]
|
||||||
|
add esi,[Bmp_SizeX]
|
||||||
|
|
||||||
|
sub edi,ebp
|
||||||
|
dec ebx
|
||||||
|
jnz copy_lines_8
|
||||||
|
|
||||||
|
;total size of bmp file
|
||||||
|
mov edi,[WhereCodingBMP]
|
||||||
|
mov ebx,[Bmp_bytes_per_string]
|
||||||
|
imul ebx,[Bmp_SizeY]
|
||||||
|
add ebx,54+1024
|
||||||
|
|
||||||
|
;crate list of bmp description
|
||||||
|
mov [edi],word 'BM'
|
||||||
|
mov [edi+2],ebx
|
||||||
|
mov [edi+10],dword 54+1024
|
||||||
|
mov [edi+14],dword 40
|
||||||
|
mov edx,[Bmp_SizeX]
|
||||||
|
mov ecx,[Bmp_SizeY]
|
||||||
|
mov [edi+18],edx
|
||||||
|
mov [edi+22],ecx
|
||||||
|
mov [edi+26],word 1
|
||||||
|
mov [edi+28],word 8
|
||||||
|
mov [edi+30],dword 0
|
||||||
|
mov edx,[Bmp_bytes_per_string]
|
||||||
|
imul edx,ecx
|
||||||
|
mov [edi+34],edx
|
||||||
|
mov [edi+38],dword 0
|
||||||
|
mov [edi+42],dword 0
|
||||||
|
mov [edi+46],dword 0
|
||||||
|
|
||||||
|
ret
|
||||||
|
no_8_bits_per_pixel:
|
||||||
|
|
||||||
|
;**********************************************
|
||||||
|
;*******************24 bit BMP*****************
|
||||||
|
;**********************************************
|
||||||
|
|
||||||
|
cmp eax,256
|
||||||
|
jle no_32_bits_per_pixel
|
||||||
|
;copy picture
|
||||||
|
mov esi,[PointerToImage]
|
||||||
|
mov edx,[WhereCodingBMP]
|
||||||
|
mov ebx,[Bmp_SizeX]
|
||||||
|
shl ebx,3 ;8*(picture_size_x)
|
||||||
|
lea ebx,[ebx+ebx*2] ;3*8*(picture_size_x)
|
||||||
|
add ebx,31 ;3*8*(picture_size_x)+31
|
||||||
|
shr ebx,5 ;(3*8*(picture_size_x)+31)/32
|
||||||
|
mov [Bmp_doublewords],ebx ;double words in string
|
||||||
|
shl ebx,2
|
||||||
|
mov [Bmp_bytes_per_string],ebx ;bytes per string
|
||||||
|
mov ecx,[Bmp_SizeY]
|
||||||
|
dec ecx
|
||||||
|
imul ebx,ecx
|
||||||
|
add edx,54
|
||||||
|
add edx,ebx ;in edx pointer to start of copy bit map
|
||||||
|
|
||||||
|
mov ebp,[Bmp_bytes_per_string]
|
||||||
|
shl ebp,1
|
||||||
|
|
||||||
|
mov ebx,[Bmp_SizeY]
|
||||||
|
|
||||||
|
mov esi,[PointerToImage]
|
||||||
|
mov edi,edx
|
||||||
|
|
||||||
|
mov edx,[Bmp_SizeX]
|
||||||
|
lea edx,[edx+edx*2]
|
||||||
|
|
||||||
|
copy_lines_24:
|
||||||
|
|
||||||
|
push esi
|
||||||
|
mov ecx,[Bmp_doublewords]
|
||||||
|
rep_movsb_24:
|
||||||
|
mov eax,[esi]
|
||||||
|
mov [edi],eax
|
||||||
|
add esi,4
|
||||||
|
add edi,4
|
||||||
|
dec ecx
|
||||||
|
jnz rep_movsb_24
|
||||||
|
pop esi
|
||||||
|
|
||||||
|
add esi,edx
|
||||||
|
sub edi,ebp
|
||||||
|
dec ebx
|
||||||
|
jnz copy_lines_24
|
||||||
|
|
||||||
|
;total size of bmp fille
|
||||||
|
mov edi,[WhereCodingBMP]
|
||||||
|
mov ebx,[Bmp_bytes_per_string]
|
||||||
|
imul ebx,[Bmp_SizeY]
|
||||||
|
add ebx,54
|
||||||
|
|
||||||
|
;write info to structure of bmp file
|
||||||
|
mov [edi],word 'BM'
|
||||||
|
mov [edi+2],ebx
|
||||||
|
mov [edi+10],dword 54 ;where begin bmp imige
|
||||||
|
mov [edi+14],dword 40 ;total size of structure number two
|
||||||
|
mov edx,[Bmp_SizeX]
|
||||||
|
mov ecx,[Bmp_SizeY]
|
||||||
|
mov [edi+18],edx
|
||||||
|
mov [edi+22],ecx
|
||||||
|
mov [edi+26],word 1
|
||||||
|
mov [edi+28],word 24 ;bytes per pixel
|
||||||
|
mov [edi+30],dword 0
|
||||||
|
mov edx,[Bmp_bytes_per_string]
|
||||||
|
imul edx,ecx
|
||||||
|
mov [edi+34],edx ;size of bmp image
|
||||||
|
mov [edi+38],dword 0
|
||||||
|
mov [edi+42],dword 0
|
||||||
|
mov [edi+46],dword 0
|
||||||
|
ret
|
||||||
|
no_32_bits_per_pixel:
|
||||||
|
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
PointerToImage dd 0
|
||||||
|
WhereCodingBMP dd 0
|
||||||
|
BmpPalette dd 0
|
||||||
|
Bmp_SizeX dd 0
|
||||||
|
Bmp_SizeY dd 0
|
||||||
|
Bmp_Counter dd 0
|
||||||
|
Bmp_Counter2 dd 0
|
||||||
|
Bmp_Counter3 dd 0
|
||||||
|
Bmp_save1 dd 0
|
||||||
|
Bmp_save2 dd 0
|
||||||
|
Bmp_save3 dd 0
|
||||||
|
Bmp_bytes_per_string dd 0
|
||||||
|
Bmp_doublewords dd 0
|
3
programs/media/animage/trunk/build_en.bat
Normal file
3
programs/media/animage/trunk/build_en.bat
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
@fasm animage.asm animage
|
||||||
|
@mtappack animage
|
||||||
|
@pause
|
333
programs/media/animage/trunk/design.inc
Normal file
333
programs/media/animage/trunk/design.inc
Normal file
@ -0,0 +1,333 @@
|
|||||||
|
;-----------------------------------------------------
|
||||||
|
draw_volume_rectangle:
|
||||||
|
|
||||||
|
mov [line_x],eax
|
||||||
|
mov [line_y],ebx
|
||||||
|
mov [line_size_x],ecx
|
||||||
|
mov [line_size_y],edx
|
||||||
|
|
||||||
|
cmp esi,1
|
||||||
|
jne no_volume_light_rectangle
|
||||||
|
|
||||||
|
mov [color_rectangle],9350878
|
||||||
|
mov [color_line1],5669590
|
||||||
|
mov [color_line2],12508927
|
||||||
|
mov [color_line3],9350878
|
||||||
|
jmp exit_colors
|
||||||
|
|
||||||
|
no_volume_light_rectangle:
|
||||||
|
|
||||||
|
cmp esi,2
|
||||||
|
jne no_pressed_rectangle
|
||||||
|
|
||||||
|
mov [color_rectangle],9089258
|
||||||
|
mov [color_line1],5669590
|
||||||
|
mov [color_line2],9089258
|
||||||
|
mov [color_line3],9089258
|
||||||
|
|
||||||
|
jmp exit_colors
|
||||||
|
|
||||||
|
no_pressed_rectangle:
|
||||||
|
|
||||||
|
cmp esi,3
|
||||||
|
jne no_pressed_panel
|
||||||
|
|
||||||
|
mov [color_rectangle],9350878
|
||||||
|
mov [color_line1],5669590
|
||||||
|
mov [color_line2],7000
|
||||||
|
mov [color_line3],12508927
|
||||||
|
jmp exit_colors
|
||||||
|
|
||||||
|
no_pressed_panel:
|
||||||
|
|
||||||
|
cmp esi,4
|
||||||
|
jne no_pressed_light_panel
|
||||||
|
|
||||||
|
mov [color_rectangle],0xffffff
|
||||||
|
mov [color_line1],5669590
|
||||||
|
mov [color_line2],7000
|
||||||
|
mov [color_line3],12508927
|
||||||
|
jmp exit_colors
|
||||||
|
|
||||||
|
no_pressed_light_panel:
|
||||||
|
|
||||||
|
cmp esi,5
|
||||||
|
jne no_light_pressed_rectangle
|
||||||
|
|
||||||
|
mov [color_rectangle],9089258
|
||||||
|
mov [color_line1],5669590
|
||||||
|
mov [color_line2],9089258
|
||||||
|
mov [color_line3],9089258
|
||||||
|
|
||||||
|
jmp exit_colors
|
||||||
|
|
||||||
|
no_light_pressed_rectangle:
|
||||||
|
|
||||||
|
cmp esi,6
|
||||||
|
jne no_work_rectangle
|
||||||
|
|
||||||
|
mov [color_rectangle],9350878
|
||||||
|
mov [color_line1],5669590
|
||||||
|
mov [color_line2],9350878
|
||||||
|
mov [color_line3],9350878
|
||||||
|
jmp exit_colors
|
||||||
|
|
||||||
|
no_work_rectangle:
|
||||||
|
|
||||||
|
cmp esi,7
|
||||||
|
jne no_work_rectangle_2
|
||||||
|
|
||||||
|
mov [color_rectangle],9350878
|
||||||
|
mov [color_line1],9350878
|
||||||
|
mov [color_line2],9350878
|
||||||
|
mov [color_line3],9350878
|
||||||
|
jmp exit_colors
|
||||||
|
|
||||||
|
no_work_rectangle_2:
|
||||||
|
|
||||||
|
exit_colors:
|
||||||
|
;draw rectangle
|
||||||
|
mov ebx,[line_x]
|
||||||
|
mov ecx,[line_y]
|
||||||
|
shl ebx,16
|
||||||
|
shl ecx,16
|
||||||
|
add ebx,[line_size_x]
|
||||||
|
add ecx,[line_size_y]
|
||||||
|
mov edx,[color_rectangle]
|
||||||
|
call draw_rectangle
|
||||||
|
;line 1
|
||||||
|
mov edx,[color_line1]
|
||||||
|
mov ebx,[line_x]
|
||||||
|
mov ecx,[line_y]
|
||||||
|
shl ebx,16
|
||||||
|
shl ecx,16
|
||||||
|
add ebx,[line_x]
|
||||||
|
add ecx,[line_y]
|
||||||
|
add ebx,[line_size_x]
|
||||||
|
call draw_line
|
||||||
|
;line 2
|
||||||
|
mov edx,[color_line1]
|
||||||
|
mov ebx,[line_x]
|
||||||
|
mov ecx,[line_y]
|
||||||
|
shl ebx,16
|
||||||
|
shl ecx,16
|
||||||
|
add ebx,[line_x]
|
||||||
|
add ecx,[line_y]
|
||||||
|
add ecx,[line_size_y]
|
||||||
|
call draw_line
|
||||||
|
;line 3
|
||||||
|
mov edx,[color_line1]
|
||||||
|
mov ebx,[line_x]
|
||||||
|
mov ecx,[line_y]
|
||||||
|
add ecx,[line_size_y]
|
||||||
|
shl ebx,16
|
||||||
|
shl ecx,16
|
||||||
|
add ebx,[line_x]
|
||||||
|
add ecx,[line_y]
|
||||||
|
add ebx,[line_size_x]
|
||||||
|
add ecx,[line_size_y]
|
||||||
|
call draw_line
|
||||||
|
;line 4
|
||||||
|
mov edx,[color_line1]
|
||||||
|
mov ebx,[line_x]
|
||||||
|
mov ecx,[line_y]
|
||||||
|
add ebx,[line_size_x]
|
||||||
|
shl ebx,16
|
||||||
|
shl ecx,16
|
||||||
|
add ebx,[line_x]
|
||||||
|
add ecx,[line_y]
|
||||||
|
add ebx,[line_size_x]
|
||||||
|
add ecx,[line_size_y]
|
||||||
|
call draw_line
|
||||||
|
;light line 1
|
||||||
|
mov edx,[color_line2]
|
||||||
|
mov ebx,[line_x]
|
||||||
|
mov ecx,[line_y]
|
||||||
|
inc ebx
|
||||||
|
inc ecx
|
||||||
|
shl ebx,16
|
||||||
|
shl ecx,16
|
||||||
|
add ebx,[line_x]
|
||||||
|
add ecx,[line_y]
|
||||||
|
add ebx,[line_size_x]
|
||||||
|
dec ebx
|
||||||
|
inc ecx
|
||||||
|
call draw_line
|
||||||
|
;light line 2
|
||||||
|
mov edx,[color_line2]
|
||||||
|
mov ebx,[line_x]
|
||||||
|
mov ecx,[line_y]
|
||||||
|
inc ebx
|
||||||
|
inc ecx
|
||||||
|
shl ebx,16
|
||||||
|
shl ecx,16
|
||||||
|
add ebx,[line_x]
|
||||||
|
add ecx,[line_y]
|
||||||
|
add ecx,[line_size_y]
|
||||||
|
dec ecx
|
||||||
|
inc ebx
|
||||||
|
call draw_line
|
||||||
|
;light line 3
|
||||||
|
mov edx,[color_line3]
|
||||||
|
mov ebx,[line_x]
|
||||||
|
mov ecx,[line_y]
|
||||||
|
add ebx,[line_size_x]
|
||||||
|
dec ebx
|
||||||
|
inc ecx
|
||||||
|
shl ebx,16
|
||||||
|
shl ecx,16
|
||||||
|
add ebx,[line_x]
|
||||||
|
add ecx,[line_y]
|
||||||
|
add ebx,[line_size_x]
|
||||||
|
add ecx,[line_size_y]
|
||||||
|
dec ebx
|
||||||
|
dec ecx
|
||||||
|
call draw_line
|
||||||
|
;light line 4
|
||||||
|
mov edx,[color_line3]
|
||||||
|
mov ebx,[line_x]
|
||||||
|
mov ecx,[line_y]
|
||||||
|
add ecx,[line_size_y]
|
||||||
|
inc ebx
|
||||||
|
dec ecx
|
||||||
|
shl ebx,16
|
||||||
|
shl ecx,16
|
||||||
|
add ebx,[line_x]
|
||||||
|
add ecx,[line_y]
|
||||||
|
add ecx,[line_size_y]
|
||||||
|
add ebx,[line_size_x]
|
||||||
|
dec ecx
|
||||||
|
dec ebx
|
||||||
|
call draw_line
|
||||||
|
|
||||||
|
ret
|
||||||
|
;----------------------------------------------------------
|
||||||
|
rectangle:
|
||||||
|
|
||||||
|
no_light_rectangle:
|
||||||
|
mov [line_x],eax
|
||||||
|
mov [line_y],ebx
|
||||||
|
mov [line_size_x],ecx
|
||||||
|
mov [line_size_y],edx
|
||||||
|
mov edx,esi
|
||||||
|
mov eax,13
|
||||||
|
mov ebx,[line_x]
|
||||||
|
mov ecx,[line_y]
|
||||||
|
shl ebx,16
|
||||||
|
shl ecx,16
|
||||||
|
add ebx,[line_size_x]
|
||||||
|
add ecx,[line_size_y]
|
||||||
|
int 0x40
|
||||||
|
ret
|
||||||
|
;----------------------------------------------------------
|
||||||
|
draw_conture:
|
||||||
|
|
||||||
|
mov [line_x],eax
|
||||||
|
mov [line_y],ebx
|
||||||
|
mov [line_size_x],ecx
|
||||||
|
mov [line_size_y],edx
|
||||||
|
|
||||||
|
mov [color_line1],5669590
|
||||||
|
|
||||||
|
;line 1
|
||||||
|
mov edx,[color_line1]
|
||||||
|
mov ebx,[line_x]
|
||||||
|
mov ecx,[line_y]
|
||||||
|
shl ebx,16
|
||||||
|
shl ecx,16
|
||||||
|
add ebx,[line_x]
|
||||||
|
add ecx,[line_y]
|
||||||
|
add ebx,[line_size_x]
|
||||||
|
call draw_line
|
||||||
|
;line 2
|
||||||
|
mov edx,[color_line1]
|
||||||
|
mov ebx,[line_x]
|
||||||
|
mov ecx,[line_y]
|
||||||
|
shl ebx,16
|
||||||
|
shl ecx,16
|
||||||
|
add ebx,[line_x]
|
||||||
|
add ecx,[line_y]
|
||||||
|
add ecx,[line_size_y]
|
||||||
|
call draw_line
|
||||||
|
;line 3
|
||||||
|
mov edx,[color_line1]
|
||||||
|
mov ebx,[line_x]
|
||||||
|
mov ecx,[line_y]
|
||||||
|
add ecx,[line_size_y]
|
||||||
|
shl ebx,16
|
||||||
|
shl ecx,16
|
||||||
|
add ebx,[line_x]
|
||||||
|
add ecx,[line_y]
|
||||||
|
add ebx,[line_size_x]
|
||||||
|
add ecx,[line_size_y]
|
||||||
|
call draw_line
|
||||||
|
;line 4
|
||||||
|
mov edx,[color_line1]
|
||||||
|
mov ebx,[line_x]
|
||||||
|
mov ecx,[line_y]
|
||||||
|
add ebx,[line_size_x]
|
||||||
|
shl ebx,16
|
||||||
|
shl ecx,16
|
||||||
|
add ebx,[line_x]
|
||||||
|
add ecx,[line_y]
|
||||||
|
add ebx,[line_size_x]
|
||||||
|
add ecx,[line_size_y]
|
||||||
|
call draw_line
|
||||||
|
|
||||||
|
ret
|
||||||
|
;----------------------------------------------------------
|
||||||
|
columnus:
|
||||||
|
|
||||||
|
sub eax,ecx
|
||||||
|
jns no_columnus
|
||||||
|
neg eax
|
||||||
|
cmp eax,esi
|
||||||
|
ja no_columnus
|
||||||
|
sub ebx,edx
|
||||||
|
jns no_columnus
|
||||||
|
neg ebx
|
||||||
|
cmp ebx,edi
|
||||||
|
ja no_columnus
|
||||||
|
mov eax,1
|
||||||
|
jmp columnus_true
|
||||||
|
no_columnus:
|
||||||
|
xor eax,eax
|
||||||
|
columnus_true:
|
||||||
|
ret
|
||||||
|
;----------------------------------------------------------
|
||||||
|
print_text:
|
||||||
|
mov [text_x],eax
|
||||||
|
mov [text_y],ebx
|
||||||
|
mov eax,4
|
||||||
|
mov ebx,[text_x]
|
||||||
|
shl ebx,16
|
||||||
|
add ebx,[text_y]
|
||||||
|
int 0x40
|
||||||
|
ret
|
||||||
|
;----------------------------------------------------------
|
||||||
|
draw_rectangle:
|
||||||
|
mov eax,13
|
||||||
|
int 0x40
|
||||||
|
ret
|
||||||
|
;------------------------
|
||||||
|
draw_line:
|
||||||
|
mov eax,38
|
||||||
|
int 0x40
|
||||||
|
ret
|
||||||
|
;----------------------------------------------------------
|
||||||
|
;lightlin 12508927
|
||||||
|
;lines 5669590
|
||||||
|
;workpan 9350878
|
||||||
|
;btnpress 9089258
|
||||||
|
line_x dd 0
|
||||||
|
line_y dd 0
|
||||||
|
line_size_x dd 0
|
||||||
|
line_size_y dd 0
|
||||||
|
color_line1 dd 0
|
||||||
|
color_line2 dd 0
|
||||||
|
color_line3 dd 0
|
||||||
|
color_rectangle dd 0
|
||||||
|
;--------------------
|
||||||
|
text_x dd 0
|
||||||
|
text_y dd 0
|
||||||
|
;--------------------
|
423
programs/media/animage/trunk/dialog.inc
Normal file
423
programs/media/animage/trunk/dialog.inc
Normal file
@ -0,0 +1,423 @@
|
|||||||
|
macro opendialog redproc,openoff,erroff,path
|
||||||
|
{
|
||||||
|
local new_d, get_loops, dlg_pid_get, DLGPID, num_of_proc
|
||||||
|
local run_fileinfo, param
|
||||||
|
local getmesloop, loox, mred, mkey, mbutton, mgetmes
|
||||||
|
local dlg_is_work, ready, procinfo
|
||||||
|
;
|
||||||
|
; STEP 1 Run SYSXTREE with parametrs MYPID 4 bytes in dec,
|
||||||
|
; 1 byte space, 1 byte type of dialog (O - Open ,S - Save)
|
||||||
|
;
|
||||||
|
|
||||||
|
cld
|
||||||
|
;; mov esi,path
|
||||||
|
mov edi,path
|
||||||
|
mov eax,0
|
||||||
|
mov ecx,200
|
||||||
|
rep stosb
|
||||||
|
|
||||||
|
;mov [get_loops],0
|
||||||
|
mov [dlg_pid_get],0
|
||||||
|
|
||||||
|
; Get my PID in dec format 4 bytes
|
||||||
|
mov eax,9
|
||||||
|
mov ebx,procinfo
|
||||||
|
mov ecx,-1
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
; convert eax bin to param dec
|
||||||
|
mov eax,dword [procinfo+30] ;offset of myPID
|
||||||
|
mov edi,param+4-1 ;offset to 4 bytes
|
||||||
|
mov ecx,4
|
||||||
|
mov ebx,10
|
||||||
|
cld
|
||||||
|
new_d:
|
||||||
|
xor edx,edx
|
||||||
|
div ebx
|
||||||
|
add dl,'0'
|
||||||
|
mov [edi],dl
|
||||||
|
dec edi
|
||||||
|
loop new_d
|
||||||
|
|
||||||
|
; wirite 1 byte space to param
|
||||||
|
mov [param+4],byte 32 ;Space for next parametr
|
||||||
|
; and 1 byte type of dialog to param
|
||||||
|
mov [param+5],byte 'O' ;Get Open dialog (Use 'S' for Save dialog)
|
||||||
|
|
||||||
|
;
|
||||||
|
; STEP2 prepare IPC area for get messages
|
||||||
|
;
|
||||||
|
|
||||||
|
; prepare IPC area
|
||||||
|
mov [path],dword 0
|
||||||
|
mov [path+4],dword 8
|
||||||
|
|
||||||
|
; define IPC memory
|
||||||
|
mov eax,60
|
||||||
|
mov ebx,1 ; define IPC
|
||||||
|
mov ecx,path ; offset of area
|
||||||
|
mov edx,150 ; size 150 bytes
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
; change wanted events list 7-bit IPC event
|
||||||
|
mov eax,40
|
||||||
|
mov ebx,01000111b
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
;
|
||||||
|
; STEP 3 run SYSTEM XTREE with parameters
|
||||||
|
;
|
||||||
|
|
||||||
|
mov eax,58
|
||||||
|
mov ebx,run_fileinfo
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
call redproc
|
||||||
|
|
||||||
|
mov [get_loops],0
|
||||||
|
getmesloop:
|
||||||
|
mov eax,23
|
||||||
|
mov ebx,50 ;0.5 sec
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
cmp eax,1
|
||||||
|
je mred
|
||||||
|
cmp eax,2
|
||||||
|
je mkey
|
||||||
|
cmp eax,3
|
||||||
|
je mbutton
|
||||||
|
cmp eax,7
|
||||||
|
je mgetmes
|
||||||
|
|
||||||
|
; Get number of procces
|
||||||
|
mov ebx,procinfo
|
||||||
|
mov ecx,-1
|
||||||
|
mov eax,9
|
||||||
|
int 0x40
|
||||||
|
mov ebp,eax
|
||||||
|
|
||||||
|
loox:
|
||||||
|
mov eax,9
|
||||||
|
mov ebx,procinfo
|
||||||
|
mov ecx,ebp
|
||||||
|
int 0x40
|
||||||
|
mov eax,[DLGPID]
|
||||||
|
cmp [procinfo+30],eax ;IF Dialog find
|
||||||
|
je dlg_is_work ;jmp to dlg_is_work
|
||||||
|
dec ebp
|
||||||
|
jnz loox
|
||||||
|
|
||||||
|
jmp erroff
|
||||||
|
|
||||||
|
dlg_is_work:
|
||||||
|
cmp [procinfo+50],word 9 ;If slot state 9 - dialog is terminated
|
||||||
|
je erroff ;TESTODP2 terminated too
|
||||||
|
|
||||||
|
cmp [dlg_pid_get],dword 1
|
||||||
|
je getmesloop
|
||||||
|
inc [get_loops]
|
||||||
|
cmp [get_loops],4 ;2 sec if DLG_PID not get, TESTOP2 terminated
|
||||||
|
jae erroff
|
||||||
|
jmp getmesloop
|
||||||
|
|
||||||
|
mred:
|
||||||
|
call redproc
|
||||||
|
jmp getmesloop
|
||||||
|
mkey:
|
||||||
|
mov eax,2
|
||||||
|
int 0x40 ; read (eax=2)
|
||||||
|
jmp getmesloop
|
||||||
|
mbutton:
|
||||||
|
mov eax,17 ; get id
|
||||||
|
int 0x40
|
||||||
|
cmp ah,1 ; button id=1 ?
|
||||||
|
jne getmesloop
|
||||||
|
mov eax,-1 ; close this program
|
||||||
|
int 0x40
|
||||||
|
mgetmes:
|
||||||
|
|
||||||
|
; If dlg_pid_get then second message get jmp to still
|
||||||
|
cmp [dlg_pid_get],dword 1
|
||||||
|
je ready
|
||||||
|
|
||||||
|
; First message is number of PID SYSXTREE dialog
|
||||||
|
|
||||||
|
; convert PID dec to PID bin
|
||||||
|
movzx eax,byte [path+16]
|
||||||
|
sub eax,48
|
||||||
|
imul eax,10
|
||||||
|
movzx ebx,byte [path+16+1]
|
||||||
|
add eax,ebx
|
||||||
|
sub eax,48
|
||||||
|
imul eax,10
|
||||||
|
movzx ebx,byte [path+16+2]
|
||||||
|
add eax,ebx
|
||||||
|
sub eax,48
|
||||||
|
imul eax,10
|
||||||
|
movzx ebx,byte [path+16+3]
|
||||||
|
add eax,ebx
|
||||||
|
sub eax,48
|
||||||
|
mov [DLGPID],eax
|
||||||
|
|
||||||
|
; Claear and prepare IPC area for next message
|
||||||
|
mov [path],dword 0
|
||||||
|
mov [path+4],dword 8
|
||||||
|
mov [path+8],dword 0
|
||||||
|
mov [path+12],dword 0
|
||||||
|
mov [path+16],dword 0
|
||||||
|
|
||||||
|
; Set dlg_pid_get for get next message
|
||||||
|
mov [dlg_pid_get],dword 1
|
||||||
|
call redproc ;show DLG_PID
|
||||||
|
jmp getmesloop
|
||||||
|
|
||||||
|
ready:
|
||||||
|
;
|
||||||
|
; The second message get
|
||||||
|
; Second message is 100 bytes path to SAVE/OPEN file
|
||||||
|
; shl path string on 16 bytes
|
||||||
|
;
|
||||||
|
cld
|
||||||
|
mov esi,path+16
|
||||||
|
mov edi,path
|
||||||
|
mov ecx,200
|
||||||
|
rep movsb
|
||||||
|
mov [edi],byte 0
|
||||||
|
|
||||||
|
jmp openoff
|
||||||
|
|
||||||
|
|
||||||
|
; DATA AREA
|
||||||
|
get_loops dd 0
|
||||||
|
dlg_pid_get dd 0
|
||||||
|
DLGPID dd 0
|
||||||
|
|
||||||
|
param:
|
||||||
|
dd 0 ; My dec PID
|
||||||
|
dd 0,0 ; Type of dialog
|
||||||
|
|
||||||
|
run_fileinfo:
|
||||||
|
dd 16
|
||||||
|
dd 0
|
||||||
|
dd param
|
||||||
|
dd 0
|
||||||
|
dd procinfo ; 0x10000
|
||||||
|
;run_filepath
|
||||||
|
db '/RD/1/SYSXTREE',0
|
||||||
|
|
||||||
|
procinfo:
|
||||||
|
times 1024 db 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
macro savedialog redproc,openoff,erroff,path
|
||||||
|
{
|
||||||
|
local new_d, get_loops, dlg_pid_get, DLGPID, num_of_proc
|
||||||
|
local run_fileinfo, run_filepath, param
|
||||||
|
local getmesloop, loox, mred, mkey, mbutton, mgetmes
|
||||||
|
local dlg_is_work, ready, procinfo
|
||||||
|
;
|
||||||
|
; STEP 1 Run SYSXTREE with parametrs MYPID 4 bytes in dec,
|
||||||
|
; 1 byte space, 1 byte type of dialog (O - Open ,S - Save)
|
||||||
|
;
|
||||||
|
|
||||||
|
cld
|
||||||
|
;; mov esi,path
|
||||||
|
mov edi,path
|
||||||
|
mov eax,0
|
||||||
|
mov ecx,200
|
||||||
|
rep stosb
|
||||||
|
|
||||||
|
;mov [get_loops],0
|
||||||
|
mov [dlg_pid_get],0
|
||||||
|
|
||||||
|
; Get my PID in dec format 4 bytes
|
||||||
|
mov eax,9
|
||||||
|
mov ebx,procinfo
|
||||||
|
mov ecx,-1
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
; convert eax bin to param dec
|
||||||
|
mov eax,dword [procinfo+30] ;offset of myPID
|
||||||
|
mov edi,param+4-1 ;offset to 4 bytes
|
||||||
|
mov ecx,4
|
||||||
|
mov ebx,10
|
||||||
|
cld
|
||||||
|
new_d:
|
||||||
|
xor edx,edx
|
||||||
|
div ebx
|
||||||
|
add dl,'0'
|
||||||
|
mov [edi],dl
|
||||||
|
dec edi
|
||||||
|
loop new_d
|
||||||
|
|
||||||
|
; wirite 1 byte space to param
|
||||||
|
mov [param+4],byte 32 ;Space for next parametr
|
||||||
|
; and 1 byte type of dialog to param
|
||||||
|
mov [param+5],byte 'S' ;Get Open dialog (Use 'S' for Save dialog)
|
||||||
|
|
||||||
|
;
|
||||||
|
; STEP2 prepare IPC area for get messages
|
||||||
|
;
|
||||||
|
|
||||||
|
; prepare IPC area
|
||||||
|
mov [path],dword 0
|
||||||
|
mov [path+4],dword 8
|
||||||
|
|
||||||
|
; define IPC memory
|
||||||
|
mov eax,60
|
||||||
|
mov ebx,1 ; define IPC
|
||||||
|
mov ecx,path ; offset of area
|
||||||
|
mov edx,150 ; size 150 bytes
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
; change wanted events list 7-bit IPC event
|
||||||
|
mov eax,40
|
||||||
|
mov ebx,01000111b
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
;
|
||||||
|
; STEP 3 run SYSTEM XTREE with parameters
|
||||||
|
;
|
||||||
|
|
||||||
|
mov eax,58
|
||||||
|
mov ebx,run_fileinfo
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
call redproc
|
||||||
|
|
||||||
|
mov [get_loops],0
|
||||||
|
getmesloop:
|
||||||
|
mov eax,23
|
||||||
|
mov ebx,50 ;0.5 sec
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
cmp eax,1
|
||||||
|
je mred
|
||||||
|
cmp eax,2
|
||||||
|
je mkey
|
||||||
|
cmp eax,3
|
||||||
|
je mbutton
|
||||||
|
cmp eax,7
|
||||||
|
je mgetmes
|
||||||
|
|
||||||
|
; Get number of procces
|
||||||
|
mov ebx,procinfo
|
||||||
|
mov ecx,-1
|
||||||
|
mov eax,9
|
||||||
|
int 0x40
|
||||||
|
mov ebp,eax
|
||||||
|
|
||||||
|
loox:
|
||||||
|
mov eax,9
|
||||||
|
mov ebx,procinfo
|
||||||
|
mov ecx,ebp
|
||||||
|
int 0x40
|
||||||
|
mov eax,[DLGPID]
|
||||||
|
cmp [procinfo+30],eax ;IF Dialog find
|
||||||
|
je dlg_is_work ;jmp to dlg_is_work
|
||||||
|
dec ebp
|
||||||
|
jnz loox
|
||||||
|
|
||||||
|
jmp erroff
|
||||||
|
|
||||||
|
dlg_is_work:
|
||||||
|
cmp [procinfo+50],word 9 ;If slot state 9 - dialog is terminated
|
||||||
|
je erroff ;TESTODP2 terminated too
|
||||||
|
|
||||||
|
cmp [dlg_pid_get],dword 1
|
||||||
|
je getmesloop
|
||||||
|
inc [get_loops]
|
||||||
|
cmp [get_loops],4 ;2 sec if DLG_PID not get, TESTOP2 terminated
|
||||||
|
jae erroff
|
||||||
|
jmp getmesloop
|
||||||
|
|
||||||
|
mred:
|
||||||
|
call redproc
|
||||||
|
jmp getmesloop
|
||||||
|
mkey:
|
||||||
|
mov eax,2
|
||||||
|
int 0x40 ; read (eax=2)
|
||||||
|
jmp getmesloop
|
||||||
|
mbutton:
|
||||||
|
mov eax,17 ; get id
|
||||||
|
int 0x40
|
||||||
|
cmp ah,1 ; button id=1 ?
|
||||||
|
jne getmesloop
|
||||||
|
mov eax,-1 ; close this program
|
||||||
|
int 0x40
|
||||||
|
mgetmes:
|
||||||
|
|
||||||
|
; If dlg_pid_get then second message get jmp to still
|
||||||
|
cmp [dlg_pid_get],dword 1
|
||||||
|
je ready
|
||||||
|
|
||||||
|
; First message is number of PID SYSXTREE dialog
|
||||||
|
|
||||||
|
; convert PID dec to PID bin
|
||||||
|
movzx eax,byte [path+16]
|
||||||
|
sub eax,48
|
||||||
|
imul eax,10
|
||||||
|
movzx ebx,byte [path+16+1]
|
||||||
|
add eax,ebx
|
||||||
|
sub eax,48
|
||||||
|
imul eax,10
|
||||||
|
movzx ebx,byte [path+16+2]
|
||||||
|
add eax,ebx
|
||||||
|
sub eax,48
|
||||||
|
imul eax,10
|
||||||
|
movzx ebx,byte [path+16+3]
|
||||||
|
add eax,ebx
|
||||||
|
sub eax,48
|
||||||
|
mov [DLGPID],eax
|
||||||
|
|
||||||
|
; Claear and prepare IPC area for next message
|
||||||
|
mov [path],dword 0
|
||||||
|
mov [path+4],dword 8
|
||||||
|
mov [path+8],dword 0
|
||||||
|
mov [path+12],dword 0
|
||||||
|
mov [path+16],dword 0
|
||||||
|
|
||||||
|
; Set dlg_pid_get for get next message
|
||||||
|
mov [dlg_pid_get],dword 1
|
||||||
|
call redproc ;show DLG_PID
|
||||||
|
jmp getmesloop
|
||||||
|
|
||||||
|
ready:
|
||||||
|
;
|
||||||
|
; The second message get
|
||||||
|
; Second message is 100 bytes path to SAVE/OPEN file
|
||||||
|
; shl path string on 16 bytes
|
||||||
|
;
|
||||||
|
cld
|
||||||
|
mov esi,path+16
|
||||||
|
mov edi,path
|
||||||
|
mov ecx,200
|
||||||
|
rep movsb
|
||||||
|
mov [edi],byte 0
|
||||||
|
|
||||||
|
jmp openoff
|
||||||
|
|
||||||
|
|
||||||
|
; DATA AREA
|
||||||
|
get_loops dd 0
|
||||||
|
dlg_pid_get dd 0
|
||||||
|
DLGPID dd 0
|
||||||
|
|
||||||
|
param:
|
||||||
|
dd 0 ; My dec PID
|
||||||
|
dd 0,0 ; Type of dialog
|
||||||
|
|
||||||
|
run_fileinfo:
|
||||||
|
dd 16
|
||||||
|
dd 0
|
||||||
|
dd param
|
||||||
|
dd 0
|
||||||
|
dd procinfo
|
||||||
|
;run_filepath:
|
||||||
|
db '/RD/1/SYSXTREE',0
|
||||||
|
|
||||||
|
procinfo:
|
||||||
|
times 1024 db 0
|
||||||
|
}
|
||||||
|
;-----------------------------------------------------------
|
241
programs/media/animage/trunk/dialog2.inc
Normal file
241
programs/media/animage/trunk/dialog2.inc
Normal file
@ -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
|
331
programs/media/animage/trunk/giflib.inc
Normal file
331
programs/media/animage/trunk/giflib.inc
Normal file
@ -0,0 +1,331 @@
|
|||||||
|
|
||||||
|
|
||||||
|
; GIF LITE v2.0 by Willow
|
||||||
|
; Written in pure assembler by Ivushkin Andrey aka Willow
|
||||||
|
;
|
||||||
|
; This include file will contain functions to handle GIF image format
|
||||||
|
;
|
||||||
|
; Created: August 15, 2004
|
||||||
|
; Last changed: September 9, 2004
|
||||||
|
|
||||||
|
; Change COLOR_ORDER in your program
|
||||||
|
; if colors are displayed improperly
|
||||||
|
|
||||||
|
COLOR_ORDER equ MENUETOS
|
||||||
|
if ~ (COLOR_ORDER in <MENUETOS,OTHER>)
|
||||||
|
; This message may not appear under MenuetOS, so watch...
|
||||||
|
display 'Please define COLOR_ORDER: MENUETOS or OTHER',13,10
|
||||||
|
end if
|
||||||
|
|
||||||
|
; virtual structure, used internally
|
||||||
|
|
||||||
|
struc GIF_list
|
||||||
|
{
|
||||||
|
.NextImg rd 1
|
||||||
|
.Left rw 1
|
||||||
|
.Top rw 1
|
||||||
|
.Width rw 1
|
||||||
|
.Height rw 1
|
||||||
|
}
|
||||||
|
|
||||||
|
struc GIF_info
|
||||||
|
{
|
||||||
|
.Left rw 1
|
||||||
|
.Top rw 1
|
||||||
|
.Width rw 1
|
||||||
|
.Height rw 1
|
||||||
|
}
|
||||||
|
|
||||||
|
_null fix 0x1000
|
||||||
|
|
||||||
|
; ****************************************
|
||||||
|
; FUNCTION GetGIFinfo - retrieve Nth image info
|
||||||
|
; ****************************************
|
||||||
|
; in:
|
||||||
|
; esi - pointer to image list header
|
||||||
|
; ecx - image_index (0...img_count-1)
|
||||||
|
; edi - pointer to GIF_info structure to be filled
|
||||||
|
|
||||||
|
; out:
|
||||||
|
; eax - pointer to RAW data, or 0, if error
|
||||||
|
|
||||||
|
GetGIFinfo:
|
||||||
|
push esi ecx edi
|
||||||
|
xor eax,eax
|
||||||
|
jecxz .eloop
|
||||||
|
.lp:
|
||||||
|
mov esi,[esi]
|
||||||
|
test esi,esi
|
||||||
|
jz .error
|
||||||
|
loop .lp
|
||||||
|
.eloop:
|
||||||
|
add esi,4
|
||||||
|
movsd
|
||||||
|
movsd
|
||||||
|
mov eax,esi
|
||||||
|
.error:
|
||||||
|
pop edi ecx esi
|
||||||
|
ret
|
||||||
|
|
||||||
|
; ****************************************
|
||||||
|
; FUNCTION ReadGIF - unpacks GIF image
|
||||||
|
; ****************************************
|
||||||
|
; in:
|
||||||
|
; esi - pointer to GIF file in memory
|
||||||
|
; edi - pointer to output image list
|
||||||
|
; eax - pointer to work area (MIN 16 KB!)
|
||||||
|
|
||||||
|
; out:
|
||||||
|
; eax - 0, all OK;
|
||||||
|
; eax - 1, invalid signature;
|
||||||
|
; eax >=8, unsupported image attributes
|
||||||
|
;
|
||||||
|
; ecx - number of images
|
||||||
|
|
||||||
|
ReadGIF:
|
||||||
|
push esi edi
|
||||||
|
mov [.table_ptr],eax
|
||||||
|
mov [.cur_info],edi
|
||||||
|
xor eax,eax
|
||||||
|
mov [.globalColor],eax
|
||||||
|
mov [.img_count],eax
|
||||||
|
inc eax
|
||||||
|
cmp dword[esi],'GIF8'
|
||||||
|
jne .er ; signature
|
||||||
|
mov ecx,[esi+0xa]
|
||||||
|
inc eax
|
||||||
|
add esi,0xd
|
||||||
|
mov edi,esi
|
||||||
|
bt ecx,7
|
||||||
|
jnc .nextblock
|
||||||
|
mov [.globalColor],esi
|
||||||
|
call .Gif_skipmap
|
||||||
|
.nextblock:
|
||||||
|
cmp byte[edi],0x21
|
||||||
|
jne .noextblock
|
||||||
|
inc edi
|
||||||
|
cmp byte[edi],0xf9 ; Graphic Control Ext
|
||||||
|
jne .no_gc
|
||||||
|
add edi,7
|
||||||
|
jmp .nextblock
|
||||||
|
.no_gc:
|
||||||
|
cmp byte[edi],0xfe ; Comment Ext
|
||||||
|
jne .no_comm
|
||||||
|
inc edi
|
||||||
|
.block_skip:
|
||||||
|
movzx eax,byte[edi]
|
||||||
|
lea edi,[edi+eax+1]
|
||||||
|
cmp byte[edi],0
|
||||||
|
jnz .block_skip
|
||||||
|
inc edi
|
||||||
|
jmp .nextblock
|
||||||
|
.no_comm:
|
||||||
|
cmp byte[edi],0xff ; Application Ext
|
||||||
|
jne .nextblock
|
||||||
|
add edi,13
|
||||||
|
jmp .block_skip
|
||||||
|
.noextblock:
|
||||||
|
cmp byte[edi],0x2c ; image beginning
|
||||||
|
jne .er
|
||||||
|
inc [.img_count]
|
||||||
|
inc edi
|
||||||
|
mov esi,[.cur_info]
|
||||||
|
add esi,4
|
||||||
|
xchg esi,edi
|
||||||
|
movsd
|
||||||
|
movsd
|
||||||
|
push edi
|
||||||
|
movzx ecx,word[esi]
|
||||||
|
inc esi
|
||||||
|
bt ecx,7
|
||||||
|
jc .uselocal
|
||||||
|
push [.globalColor]
|
||||||
|
mov edi,esi
|
||||||
|
jmp .setPal
|
||||||
|
.uselocal:
|
||||||
|
call .Gif_skipmap
|
||||||
|
push esi
|
||||||
|
.setPal:
|
||||||
|
movzx ecx,byte[edi]
|
||||||
|
inc ecx
|
||||||
|
mov [.codesize],ecx
|
||||||
|
dec ecx
|
||||||
|
pop [.Palette]
|
||||||
|
lea esi,[edi+1]
|
||||||
|
mov edi,[.table_ptr]
|
||||||
|
xor eax,eax
|
||||||
|
cld
|
||||||
|
lodsb ; eax - block_count
|
||||||
|
add eax,esi
|
||||||
|
mov [.block_ofs],eax
|
||||||
|
mov [.bit_count],8
|
||||||
|
mov eax,1
|
||||||
|
shl eax,cl
|
||||||
|
mov [.CC],eax
|
||||||
|
inc eax
|
||||||
|
mov [.EOI],eax
|
||||||
|
lea ecx,[eax-1]
|
||||||
|
mov eax, _null shl 16
|
||||||
|
.filltable:
|
||||||
|
stosd
|
||||||
|
inc eax
|
||||||
|
loop .filltable
|
||||||
|
pop edi
|
||||||
|
mov [.img_start],edi
|
||||||
|
.reinit:
|
||||||
|
mov edx,[.EOI]
|
||||||
|
inc edx
|
||||||
|
push [.codesize]
|
||||||
|
pop [.compsize]
|
||||||
|
call .Gif_get_sym
|
||||||
|
cmp eax,[.CC]
|
||||||
|
je .reinit
|
||||||
|
call .Gif_output
|
||||||
|
.cycle:
|
||||||
|
movzx ebx,ax
|
||||||
|
call .Gif_get_sym
|
||||||
|
cmp eax,edx
|
||||||
|
jae .notintable
|
||||||
|
cmp eax,[.CC]
|
||||||
|
je .reinit
|
||||||
|
cmp eax,[.EOI]
|
||||||
|
je .end
|
||||||
|
call .Gif_output
|
||||||
|
.add:
|
||||||
|
push eax
|
||||||
|
mov eax,[.table_ptr]
|
||||||
|
mov [eax+edx*4],ebx
|
||||||
|
pop eax
|
||||||
|
cmp edx,0xFFF
|
||||||
|
jae .cycle
|
||||||
|
inc edx
|
||||||
|
bsr ebx,edx
|
||||||
|
cmp ebx,[.compsize]
|
||||||
|
jne .noinc
|
||||||
|
inc [.compsize]
|
||||||
|
.noinc:
|
||||||
|
jmp .cycle
|
||||||
|
.notintable:
|
||||||
|
push eax
|
||||||
|
mov eax,ebx
|
||||||
|
call .Gif_output
|
||||||
|
push ebx
|
||||||
|
movzx eax,bx
|
||||||
|
call .Gif_output
|
||||||
|
pop ebx eax
|
||||||
|
jmp .add
|
||||||
|
.er:
|
||||||
|
pop edi
|
||||||
|
jmp .ex
|
||||||
|
.end:
|
||||||
|
mov eax,[.cur_info]
|
||||||
|
mov [eax],edi
|
||||||
|
mov [.cur_info],edi
|
||||||
|
add esi,2
|
||||||
|
xchg esi,edi
|
||||||
|
.nxt:
|
||||||
|
cmp byte[edi],0
|
||||||
|
jnz .continue
|
||||||
|
inc edi
|
||||||
|
jmp .nxt
|
||||||
|
.continue:
|
||||||
|
cmp byte[edi],0x3b
|
||||||
|
jne .nextblock
|
||||||
|
xor eax,eax
|
||||||
|
stosd
|
||||||
|
mov ecx,[.img_count]
|
||||||
|
.ex:
|
||||||
|
pop edi esi
|
||||||
|
ret
|
||||||
|
|
||||||
|
.Gif_skipmap:
|
||||||
|
; in: ecx - image descriptor, esi - pointer to colormap
|
||||||
|
; out: edi - pointer to area after colormap
|
||||||
|
|
||||||
|
and ecx,111b
|
||||||
|
inc ecx ; color map size
|
||||||
|
mov ebx,1
|
||||||
|
shl ebx,cl
|
||||||
|
lea ebx,[ebx*2+ebx]
|
||||||
|
lea edi,[esi+ebx]
|
||||||
|
ret
|
||||||
|
|
||||||
|
.Gif_get_sym:
|
||||||
|
mov ecx,[.compsize]
|
||||||
|
push ecx
|
||||||
|
xor eax,eax
|
||||||
|
.shift:
|
||||||
|
ror byte[esi],1
|
||||||
|
rcr eax,1
|
||||||
|
dec [.bit_count]
|
||||||
|
jnz .loop1
|
||||||
|
inc esi
|
||||||
|
cmp esi,[.block_ofs]
|
||||||
|
jb .noblock
|
||||||
|
push eax
|
||||||
|
xor eax,eax
|
||||||
|
lodsb
|
||||||
|
test eax,eax
|
||||||
|
jnz .nextbl
|
||||||
|
mov eax,[.EOI]
|
||||||
|
sub esi,2
|
||||||
|
add esp,8
|
||||||
|
jmp .exx
|
||||||
|
.nextbl:
|
||||||
|
add eax,esi
|
||||||
|
mov [.block_ofs],eax
|
||||||
|
pop eax
|
||||||
|
.noblock:
|
||||||
|
mov [.bit_count],8
|
||||||
|
.loop1:
|
||||||
|
loop .shift
|
||||||
|
pop ecx
|
||||||
|
rol eax,cl
|
||||||
|
.exx:
|
||||||
|
xor ecx,ecx
|
||||||
|
ret
|
||||||
|
|
||||||
|
.Gif_output:
|
||||||
|
push esi eax edx
|
||||||
|
mov edx,[.table_ptr]
|
||||||
|
.next:
|
||||||
|
push word[edx+eax*4]
|
||||||
|
mov ax,word[edx+eax*4+2]
|
||||||
|
inc ecx
|
||||||
|
cmp ax,_null
|
||||||
|
jnz .next
|
||||||
|
shl ebx,16
|
||||||
|
mov bx,[esp]
|
||||||
|
.loop2:
|
||||||
|
pop ax
|
||||||
|
|
||||||
|
lea esi,[eax+eax*2]
|
||||||
|
add esi,[.Palette]
|
||||||
|
|
||||||
|
if COLOR_ORDER eq MENUETOS
|
||||||
|
mov esi,[esi]
|
||||||
|
bswap esi
|
||||||
|
shr esi,8
|
||||||
|
mov [edi],esi
|
||||||
|
add edi,3
|
||||||
|
else
|
||||||
|
movsw
|
||||||
|
movsb
|
||||||
|
end if
|
||||||
|
|
||||||
|
loop .loop2
|
||||||
|
pop edx eax esi
|
||||||
|
ret
|
||||||
|
|
||||||
|
.globalColor rd 1
|
||||||
|
.img_count rd 1
|
||||||
|
.cur_info rd 1 ; image table pointer
|
||||||
|
.img_start rd 1
|
||||||
|
.codesize rd 1
|
||||||
|
.compsize rd 1
|
||||||
|
.bit_count rd 1
|
||||||
|
.CC rd 1
|
||||||
|
.EOI rd 1
|
||||||
|
.Palette rd 1
|
||||||
|
.block_ofs rd 1
|
||||||
|
.table_ptr rd 1
|
956
programs/media/animage/trunk/graphlib.inc
Normal file
956
programs/media/animage/trunk/graphlib.inc
Normal file
@ -0,0 +1,956 @@
|
|||||||
|
; mov [pointer_to_screen],eax
|
||||||
|
; mov [output_array],ebx
|
||||||
|
; mov [screen_size_x],ecx
|
||||||
|
;setpixel (pixel_x,pixel_y)
|
||||||
|
setpixel:
|
||||||
|
|
||||||
|
mov ecx,[output_array]
|
||||||
|
mov eax,[pixel_y]
|
||||||
|
mov ebx,[screen_size_x]
|
||||||
|
imul eax,ebx
|
||||||
|
add eax,[pixel_x]
|
||||||
|
lea eax,[eax+eax*2]
|
||||||
|
add eax,[pointer_to_screen]
|
||||||
|
mov [ecx],eax
|
||||||
|
add [output_array],4
|
||||||
|
ret
|
||||||
|
; procedure <<<<<<PutPixel>>>>>>
|
||||||
|
; IN
|
||||||
|
; eax - pointer to picture
|
||||||
|
; ebx - picture size x
|
||||||
|
; ecx - color of pixel
|
||||||
|
; esi - x coordinat of pixel
|
||||||
|
; edi - y coordinat of pixel
|
||||||
|
; OUT
|
||||||
|
; not returned value
|
||||||
|
PutPixel:
|
||||||
|
|
||||||
|
imul ebx,edi
|
||||||
|
add ebx,esi
|
||||||
|
lea ebx,[ebx+ebx*2]
|
||||||
|
add eax,ebx
|
||||||
|
mov ebx,ecx
|
||||||
|
shr ebx,16
|
||||||
|
mov [eax],cx
|
||||||
|
mov [eax+2],bl
|
||||||
|
ret
|
||||||
|
; function <<<<<<GetColorOfPixel>>>>>>
|
||||||
|
; IN
|
||||||
|
; eax - pointer to picture
|
||||||
|
; ebx - picture size x
|
||||||
|
; esi - x coordinat of pixel
|
||||||
|
; edi - y coordinat of pixel
|
||||||
|
; OUT
|
||||||
|
; eax - color of pixel in coordinats (x,y)
|
||||||
|
GetColorOfPixel:
|
||||||
|
|
||||||
|
imul ebx,edi
|
||||||
|
add ebx,esi
|
||||||
|
lea ebx,[ebx+ebx*2]
|
||||||
|
add eax,ebx
|
||||||
|
mov ebx,[eax]
|
||||||
|
and ebx,0xffffff
|
||||||
|
mov eax,ebx
|
||||||
|
ret
|
||||||
|
|
||||||
|
;procedure <<<<calculate line>>>>
|
||||||
|
; IN
|
||||||
|
;eax - pointer to screen
|
||||||
|
;ebx - output array
|
||||||
|
;ecx - (screen size x)*bytes per pixel
|
||||||
|
;edx - x1*65536+y1
|
||||||
|
;esi x2
|
||||||
|
;edi - y2
|
||||||
|
; OUT
|
||||||
|
;eax - number of pixels
|
||||||
|
calculate_line:
|
||||||
|
|
||||||
|
mov [pointer_to_screen],eax
|
||||||
|
mov [output_array],ebx
|
||||||
|
mov [screen_size_x],ecx
|
||||||
|
mov eax,edx
|
||||||
|
and eax,0xffff
|
||||||
|
shr edx,16
|
||||||
|
mov [x_l],edx ;x=x1
|
||||||
|
mov [y_l],eax ;y=y1
|
||||||
|
mov [sx],1
|
||||||
|
mov [sy],1
|
||||||
|
|
||||||
|
mov edx,[output_array]
|
||||||
|
|
||||||
|
sub esi,[x_l] ;esi=x2-x1
|
||||||
|
jnz no_0_x
|
||||||
|
and esi,0
|
||||||
|
jmp x_no_minus
|
||||||
|
no_0_x:
|
||||||
|
jns x_no_minus
|
||||||
|
neg esi
|
||||||
|
mov [sx],-1 ;sx=-sx
|
||||||
|
x_no_minus:
|
||||||
|
|
||||||
|
sub edi,[y_l] ;edi=y2-y1
|
||||||
|
jnz no_0_y
|
||||||
|
and edi,0
|
||||||
|
jmp y_no_minus
|
||||||
|
no_0_y:
|
||||||
|
jns y_no_minus
|
||||||
|
neg edi
|
||||||
|
mov [sy],-1 ;sy=-sy
|
||||||
|
y_no_minus:
|
||||||
|
|
||||||
|
mov [_dx],esi
|
||||||
|
mov [_dy],edi
|
||||||
|
|
||||||
|
cmp [_dx],0 ;if (dx=0 & dy=0) { }
|
||||||
|
jnz no_null_d
|
||||||
|
cmp [_dy],0
|
||||||
|
jnz no_null_d
|
||||||
|
mov eax,[x_l]
|
||||||
|
mov ebx,[y_l]
|
||||||
|
mov [pixel_x],eax
|
||||||
|
mov [pixel_y],ebx
|
||||||
|
call setpixel ;setpixel(x1,y1)
|
||||||
|
mov eax,1
|
||||||
|
ret
|
||||||
|
no_null_d:
|
||||||
|
|
||||||
|
cmp edi,esi ;if (dy>dx) { }
|
||||||
|
jle no_bigger
|
||||||
|
mov eax,[_dx]
|
||||||
|
mov [z],eax ;z=dx
|
||||||
|
mov eax,[_dy]
|
||||||
|
mov [_dx],eax ;dx=dy
|
||||||
|
mov eax,[z]
|
||||||
|
mov [_dy],eax ;dy=z
|
||||||
|
mov [_ch],dword 1 ;ch=true
|
||||||
|
jmp exit_if2
|
||||||
|
no_bigger: ;else {}
|
||||||
|
and [_ch],0
|
||||||
|
exit_if2:
|
||||||
|
|
||||||
|
mov eax,[_dy]
|
||||||
|
shl eax,1
|
||||||
|
sub eax,[_dx]
|
||||||
|
mov [e],eax ;e=2*dy-dx
|
||||||
|
|
||||||
|
mov esi,1 ;counter
|
||||||
|
mov edi,[sx]
|
||||||
|
mov ebp,[sy]
|
||||||
|
do:
|
||||||
|
|
||||||
|
mov eax,[x_l]
|
||||||
|
mov ebx,[y_l]
|
||||||
|
mov [pixel_x],eax
|
||||||
|
mov [pixel_y],ebx
|
||||||
|
call setpixel
|
||||||
|
|
||||||
|
cmp [e],0
|
||||||
|
js while_e
|
||||||
|
|
||||||
|
mov eax,[_ch]
|
||||||
|
test eax,eax
|
||||||
|
jz ch_else
|
||||||
|
add [x_l],edi
|
||||||
|
jmp exit_if3
|
||||||
|
ch_else:
|
||||||
|
add [y_l],ebp
|
||||||
|
exit_if3:
|
||||||
|
|
||||||
|
mov eax,[_dx]
|
||||||
|
shl eax,1
|
||||||
|
sub [e],eax ;e=e-2*dx
|
||||||
|
|
||||||
|
while_e:
|
||||||
|
|
||||||
|
mov eax,[_ch]
|
||||||
|
test eax,eax
|
||||||
|
jz ch_else2
|
||||||
|
add [y_l],ebp
|
||||||
|
jmp exit_if4
|
||||||
|
ch_else2:
|
||||||
|
add [x_l],edi
|
||||||
|
exit_if4:
|
||||||
|
|
||||||
|
mov eax,[_dy]
|
||||||
|
shl eax,1
|
||||||
|
add [e],eax ;e=e+2*dy
|
||||||
|
inc esi
|
||||||
|
|
||||||
|
mov ecx,[_dx]
|
||||||
|
cmp esi,ecx
|
||||||
|
jle do ;while (i<=dx)
|
||||||
|
|
||||||
|
mov eax,[x_l]
|
||||||
|
mov ebx,[y_l]
|
||||||
|
mov [pixel_x],eax
|
||||||
|
mov [pixel_y],ebx
|
||||||
|
call setpixel
|
||||||
|
|
||||||
|
mov eax,[output_array]
|
||||||
|
sub eax,edx
|
||||||
|
shr eax,2
|
||||||
|
|
||||||
|
ret
|
||||||
|
;---------------------------
|
||||||
|
;procedure calculate <<<<<rectangle>>>>>>>
|
||||||
|
; IN
|
||||||
|
;eax - pointer to screen
|
||||||
|
;ebx - output array
|
||||||
|
;ecx - (screen size x)
|
||||||
|
;edx - x1*65536+y1
|
||||||
|
;esi x2
|
||||||
|
;edi - y2
|
||||||
|
; OUT
|
||||||
|
;eax - number of pixels
|
||||||
|
|
||||||
|
calculate_rectangle:
|
||||||
|
|
||||||
|
mov [pointer_to_screen],eax
|
||||||
|
mov [output_array],ebx
|
||||||
|
mov [screen_size_x],ecx
|
||||||
|
mov eax,edx
|
||||||
|
and eax,0xffff
|
||||||
|
shr edx,16
|
||||||
|
mov [x_l],edx ;x=x1
|
||||||
|
mov [y_l],eax ;y=y1
|
||||||
|
mov [x2],esi ;x2
|
||||||
|
mov [y2],edi ;y2
|
||||||
|
mov [sx],1
|
||||||
|
mov [sy],1
|
||||||
|
|
||||||
|
mov edx,[output_array]
|
||||||
|
|
||||||
|
sub esi,[x_l] ;esi=x2-x1
|
||||||
|
jnz no_0_x_r
|
||||||
|
and esi,0
|
||||||
|
jmp x_no_minus_r
|
||||||
|
no_0_x_r:
|
||||||
|
jns x_no_minus_r
|
||||||
|
neg esi
|
||||||
|
mov [sx],-1 ;sx=-sx
|
||||||
|
x_no_minus_r:
|
||||||
|
|
||||||
|
sub edi,[y_l] ;edi=y2-y1
|
||||||
|
jnz no_0_y_r
|
||||||
|
and edi,0
|
||||||
|
jmp y_no_minus_r
|
||||||
|
no_0_y_r:
|
||||||
|
jns y_no_minus_r
|
||||||
|
neg edi
|
||||||
|
mov [sy],-1 ;sy=-sy
|
||||||
|
y_no_minus_r:
|
||||||
|
|
||||||
|
mov [_dx],esi
|
||||||
|
mov [_dy],edi
|
||||||
|
|
||||||
|
cmp [_dx],0 ;if (dx=0 & dy=0) { }
|
||||||
|
jnz no_null_r
|
||||||
|
cmp [_dy],0
|
||||||
|
jnz no_null_r
|
||||||
|
mov eax,[x_l]
|
||||||
|
mov ebx,[y_l]
|
||||||
|
mov [pixel_x],eax
|
||||||
|
mov [pixel_y],ebx
|
||||||
|
call setpixel ;setpixel(x1,y1)
|
||||||
|
mov eax,1
|
||||||
|
ret
|
||||||
|
no_null_r:
|
||||||
|
|
||||||
|
mov edi,[_dx]
|
||||||
|
mov esi,[x_l] ;x1
|
||||||
|
|
||||||
|
horizontal_lines:
|
||||||
|
|
||||||
|
mov eax,esi ;x
|
||||||
|
mov ebx,[y_l] ;y1
|
||||||
|
mov [pixel_x],eax
|
||||||
|
mov [pixel_y],ebx
|
||||||
|
call setpixel
|
||||||
|
|
||||||
|
mov eax,esi ;x
|
||||||
|
mov ebx,[y2] ;y2
|
||||||
|
mov [pixel_x],eax
|
||||||
|
mov [pixel_y],ebx
|
||||||
|
call setpixel
|
||||||
|
|
||||||
|
add esi,[sx]
|
||||||
|
dec edi
|
||||||
|
jns horizontal_lines
|
||||||
|
|
||||||
|
mov edi,[_dy]
|
||||||
|
mov esi,[y_l] ;y1
|
||||||
|
vertical_lines:
|
||||||
|
|
||||||
|
mov eax,[x_l] ;x1
|
||||||
|
mov ebx,esi ;y
|
||||||
|
mov [pixel_x],eax
|
||||||
|
mov [pixel_y],ebx
|
||||||
|
call setpixel
|
||||||
|
|
||||||
|
mov eax,[x2] ;x2
|
||||||
|
mov ebx,esi ;y
|
||||||
|
mov [pixel_x],eax
|
||||||
|
mov [pixel_y],ebx
|
||||||
|
call setpixel
|
||||||
|
|
||||||
|
add esi,[sy]
|
||||||
|
dec edi
|
||||||
|
jns vertical_lines
|
||||||
|
|
||||||
|
mov eax,[output_array]
|
||||||
|
sub eax,edx
|
||||||
|
shr eax,2
|
||||||
|
|
||||||
|
ret
|
||||||
|
;procedure <<<<<<calculate_circle>>>>>>
|
||||||
|
; IN
|
||||||
|
;eax - pointer to screen
|
||||||
|
;ebx - output array
|
||||||
|
;ecx - (screen size x)*bytes per pixel
|
||||||
|
;edx - x_c*65536+y_c
|
||||||
|
;esi r
|
||||||
|
; OUT
|
||||||
|
;eax - number of pixels
|
||||||
|
|
||||||
|
calculate_circle:
|
||||||
|
|
||||||
|
mov [pointer_to_screen],eax
|
||||||
|
mov [output_array],ebx
|
||||||
|
mov [screen_size_x],ecx
|
||||||
|
mov eax,edx
|
||||||
|
and eax,0xffff
|
||||||
|
shr edx,16
|
||||||
|
mov [x2],edx ;circle centr x
|
||||||
|
mov [y2],eax ;circle centr y
|
||||||
|
mov [r],esi ;radius of cicrle
|
||||||
|
|
||||||
|
mov edx,[output_array]
|
||||||
|
|
||||||
|
mov [x_l],0 ;x=0
|
||||||
|
mov [y_l],esi ;y=r
|
||||||
|
mov [d],3
|
||||||
|
mov eax,[r]
|
||||||
|
shl eax,1
|
||||||
|
sub [d],eax ;d=3-2*r
|
||||||
|
|
||||||
|
|
||||||
|
while_circle:
|
||||||
|
|
||||||
|
mov esi,[y_l]
|
||||||
|
mov edi,[x_l]
|
||||||
|
|
||||||
|
sub esi,edi ;while y>=x
|
||||||
|
js exit_while_circle
|
||||||
|
|
||||||
|
|
||||||
|
mov eax,[x_l] ;x
|
||||||
|
mov ebx,[y_l] ;y
|
||||||
|
add eax,[x2] ;x+xc
|
||||||
|
add ebx,[y2] ;y+yc
|
||||||
|
mov [pixel_x],eax
|
||||||
|
mov [pixel_y],ebx
|
||||||
|
call setpixel
|
||||||
|
|
||||||
|
mov eax,[x_l] ;x
|
||||||
|
mov ebx,[y2] ;yc
|
||||||
|
add eax,[x2] ;x+xc
|
||||||
|
sub ebx,[y_l] ;yc-y
|
||||||
|
mov [pixel_x],eax
|
||||||
|
mov [pixel_y],ebx
|
||||||
|
call setpixel
|
||||||
|
|
||||||
|
mov eax,[x2] ;xc
|
||||||
|
mov ebx,[y2] ;yc
|
||||||
|
sub eax,[x_l] ;xc-x
|
||||||
|
add ebx,[y_l] ;yc+y
|
||||||
|
mov [pixel_x],eax
|
||||||
|
mov [pixel_y],ebx
|
||||||
|
call setpixel
|
||||||
|
|
||||||
|
mov eax,[x2] ;xc
|
||||||
|
mov ebx,[y2] ;yc
|
||||||
|
sub eax,[x_l] ;xc-x
|
||||||
|
sub ebx,[y_l] ;yc-y
|
||||||
|
mov [pixel_x],eax
|
||||||
|
mov [pixel_y],ebx
|
||||||
|
call setpixel
|
||||||
|
|
||||||
|
mov eax,[x2] ;xc
|
||||||
|
mov ebx,[y2] ;yc
|
||||||
|
add eax,[y_l] ;xc+y
|
||||||
|
add ebx,[x_l] ;yc+x
|
||||||
|
mov [pixel_x],eax
|
||||||
|
mov [pixel_y],ebx
|
||||||
|
call setpixel
|
||||||
|
|
||||||
|
mov eax,[x2] ;xc
|
||||||
|
mov ebx,[y2] ;yc
|
||||||
|
add eax,[y_l] ;xc+y
|
||||||
|
sub ebx,[x_l] ;yc-x
|
||||||
|
mov [pixel_x],eax
|
||||||
|
mov [pixel_y],ebx
|
||||||
|
call setpixel
|
||||||
|
|
||||||
|
mov eax,[x2] ;xc
|
||||||
|
mov ebx,[y2] ;yc
|
||||||
|
sub eax,[y_l] ;xc-y
|
||||||
|
add ebx,[x_l] ;x+yc
|
||||||
|
mov [pixel_x],eax
|
||||||
|
mov [pixel_y],ebx
|
||||||
|
call setpixel
|
||||||
|
|
||||||
|
mov eax,[x2] ;xc
|
||||||
|
mov ebx,[y2] ;yc
|
||||||
|
sub eax,[y_l] ;xc-y
|
||||||
|
sub ebx,[x_l] ;yc-x
|
||||||
|
mov [pixel_x],eax
|
||||||
|
mov [pixel_y],ebx
|
||||||
|
call setpixel
|
||||||
|
|
||||||
|
cmp [d],0
|
||||||
|
jns if1_d
|
||||||
|
mov eax,[x_l]
|
||||||
|
shl eax,2
|
||||||
|
add eax,6
|
||||||
|
add [d],eax ;d=d+4*x+6
|
||||||
|
jmp exit_if1_d
|
||||||
|
if1_d:
|
||||||
|
mov eax,[x_l]
|
||||||
|
sub eax,[y_l]
|
||||||
|
shl eax,2
|
||||||
|
add eax,10
|
||||||
|
add [d],eax ;d=d+4*(x-y)+10
|
||||||
|
dec [y_l]
|
||||||
|
exit_if1_d:
|
||||||
|
inc [x_l]
|
||||||
|
|
||||||
|
jmp while_circle
|
||||||
|
|
||||||
|
exit_while_circle:
|
||||||
|
|
||||||
|
mov eax,[output_array]
|
||||||
|
sub eax,edx
|
||||||
|
shr eax,2
|
||||||
|
|
||||||
|
ret
|
||||||
|
;procedure <<<<<<flood fill>>>>>
|
||||||
|
;IN
|
||||||
|
;eax - pointer to screen
|
||||||
|
;ebx - pointer to output array
|
||||||
|
;ecx - picture size x
|
||||||
|
;edx - x0*65536+y0
|
||||||
|
;esi - x_max*65536+y_max
|
||||||
|
;edi - color of flood fill arrea
|
||||||
|
flood_fill:
|
||||||
|
|
||||||
|
mov [pointer_to_screen],eax
|
||||||
|
mov [output_array],ebx
|
||||||
|
mov [screen_size_x],ecx
|
||||||
|
|
||||||
|
mov eax,edx
|
||||||
|
and edx,0xffff
|
||||||
|
shr eax,16
|
||||||
|
mov [sx],eax ;x0
|
||||||
|
mov [sy],edx ;y0
|
||||||
|
|
||||||
|
mov eax,esi
|
||||||
|
and esi,0xffff
|
||||||
|
shr eax,16
|
||||||
|
mov [m_x],eax ;maximum x size of picture
|
||||||
|
mov [m_y],esi ;maximum y size of picture
|
||||||
|
|
||||||
|
mov [c_f],edi ;color of feel
|
||||||
|
|
||||||
|
mov eax,[output_array] ; stek
|
||||||
|
mov [eax],dword 1 ; number of pointes in stek
|
||||||
|
mov esi,[sx]
|
||||||
|
mov edi,[sy]
|
||||||
|
mov [eax+4],si ;x0
|
||||||
|
mov [eax+4+2],di ;y0
|
||||||
|
|
||||||
|
mov eax,[pointer_to_screen]
|
||||||
|
mov ebx,[screen_size_x]
|
||||||
|
call GetColorOfPixel
|
||||||
|
mov [c],eax
|
||||||
|
|
||||||
|
cmp eax,[c_f]
|
||||||
|
jne can_flood_fill
|
||||||
|
mov eax,[output_array]
|
||||||
|
mov [eax],dword 0
|
||||||
|
ret
|
||||||
|
can_flood_fill:
|
||||||
|
|
||||||
|
while_no_null:
|
||||||
|
;¨§¢«¥ª ¥¬ ª®®à¤¨ âë ¨§ á⥪
|
||||||
|
mov eax,[output_array]
|
||||||
|
mov ebx,[eax]
|
||||||
|
dec ebx
|
||||||
|
shl ebx,2 ;ebx=ebx*8
|
||||||
|
add ebx,4 ;ebx=ebx*8+4
|
||||||
|
xor esi,esi
|
||||||
|
xor edi,edi
|
||||||
|
mov si,[eax+ebx] ;x
|
||||||
|
mov di,[eax+ebx+2] ;y
|
||||||
|
mov [x2],esi
|
||||||
|
mov [y2],edi
|
||||||
|
|
||||||
|
mov [sy],edi
|
||||||
|
|
||||||
|
mov eax,[output_array]
|
||||||
|
mov ebx,[eax]
|
||||||
|
dec ebx
|
||||||
|
mov [eax],ebx ;
|
||||||
|
|
||||||
|
; go to right until color=c or until x<MaxXPicture
|
||||||
|
mov edx,[x2]
|
||||||
|
go_to_right:
|
||||||
|
|
||||||
|
mov eax,[pointer_to_screen]
|
||||||
|
mov ebx,[screen_size_x]
|
||||||
|
mov esi,edx;
|
||||||
|
mov edi,[sy]
|
||||||
|
call GetColorOfPixel
|
||||||
|
|
||||||
|
cmp eax,[c]
|
||||||
|
jne not_color_of_feeling_arrea_right
|
||||||
|
|
||||||
|
mov eax,[pointer_to_screen]
|
||||||
|
mov ebx,[screen_size_x]
|
||||||
|
mov ecx,[c_f] ;color of filinf flood
|
||||||
|
mov esi,edx
|
||||||
|
mov edi,[sy]
|
||||||
|
call PutPixel
|
||||||
|
|
||||||
|
inc edx
|
||||||
|
|
||||||
|
mov eax,edx
|
||||||
|
cmp eax,[m_x]
|
||||||
|
jle go_to_right
|
||||||
|
|
||||||
|
not_color_of_feeling_arrea_right:
|
||||||
|
|
||||||
|
mov eax,edx
|
||||||
|
dec eax ;----------------------------------
|
||||||
|
mov [x_r],eax ; save right absciss
|
||||||
|
|
||||||
|
|
||||||
|
; go to left until color=c or until x>0
|
||||||
|
mov esi,[x2]
|
||||||
|
mov edi,[y2]
|
||||||
|
dec esi
|
||||||
|
mov edx,esi
|
||||||
|
mov [sy],edi
|
||||||
|
|
||||||
|
go_to_left:
|
||||||
|
|
||||||
|
mov eax,[pointer_to_screen]
|
||||||
|
mov ebx,[screen_size_x]
|
||||||
|
mov esi,edx
|
||||||
|
mov edi,[sy]
|
||||||
|
call GetColorOfPixel
|
||||||
|
|
||||||
|
cmp eax,[c]
|
||||||
|
jne not_color_of_feeling_arrea_left
|
||||||
|
|
||||||
|
mov eax,[pointer_to_screen]
|
||||||
|
mov ebx,[screen_size_x]
|
||||||
|
mov ecx,[c_f] ;color of filing flood
|
||||||
|
mov esi,edx
|
||||||
|
mov edi,[sy]
|
||||||
|
call PutPixel
|
||||||
|
|
||||||
|
dec edx
|
||||||
|
jns go_to_left
|
||||||
|
|
||||||
|
not_color_of_feeling_arrea_left:
|
||||||
|
|
||||||
|
mov eax,edx
|
||||||
|
inc eax ;----------------------------------------
|
||||||
|
mov [x_l],eax ; save left absciss
|
||||||
|
|
||||||
|
mov edi,[y2]
|
||||||
|
dec edi
|
||||||
|
jns no_null_1_floodfill
|
||||||
|
mov edi,1
|
||||||
|
no_null_1_floodfill:
|
||||||
|
mov [sy],edi
|
||||||
|
|
||||||
|
mov eax,[output_array]
|
||||||
|
mov ebx,[eax]
|
||||||
|
mov [l_s],ebx ; save total number of points in stek
|
||||||
|
mov [l_c],-1 ; last color = -1
|
||||||
|
mov edx,[x_l]
|
||||||
|
analizing_from_left_to_right_upper:
|
||||||
|
; «¨§¨à㥬 ¯¨ªá¥«¨ ¤ «¨¨¥© á «¥¢®£® ªà ï
|
||||||
|
mov eax,[pointer_to_screen]
|
||||||
|
mov ebx,[screen_size_x]
|
||||||
|
mov esi,edx
|
||||||
|
mov edi,[sy]
|
||||||
|
call GetColorOfPixel
|
||||||
|
push eax
|
||||||
|
|
||||||
|
cmp eax,[c] ;¥á«¨ 梥⠯஢¥àאַ£® ¯¨ªá¥«ï ¥ à ¢¥ á,â® ¥ § ®á¨¬ ¥£® ¢ á⥪
|
||||||
|
jne no_fill_1
|
||||||
|
mov ebx,[l_c]
|
||||||
|
cmp ebx,[c]
|
||||||
|
jne no_fill_1
|
||||||
|
mov edi,[sy]
|
||||||
|
mov eax,[output_array]
|
||||||
|
mov ebx,[eax]
|
||||||
|
inc ebx
|
||||||
|
mov [eax],ebx
|
||||||
|
dec ebx
|
||||||
|
shl ebx,2
|
||||||
|
add ebx,4
|
||||||
|
mov esi,edx
|
||||||
|
dec esi
|
||||||
|
mov [eax+ebx],si
|
||||||
|
mov [eax+ebx+2],di
|
||||||
|
no_fill_1:
|
||||||
|
|
||||||
|
pop [l_c]
|
||||||
|
inc edx
|
||||||
|
cmp edx,[x_r]
|
||||||
|
jle analizing_from_left_to_right_upper
|
||||||
|
|
||||||
|
mov ebx,[l_c]
|
||||||
|
cmp ebx,[c] ;last color is c(color of filing arrea) ?
|
||||||
|
jne have_changes_in_stek_1
|
||||||
|
;save last color in stek
|
||||||
|
mov edi,[sy]
|
||||||
|
mov eax,[output_array]
|
||||||
|
mov ebx,[eax]
|
||||||
|
inc ebx
|
||||||
|
mov [eax],ebx
|
||||||
|
dec ebx
|
||||||
|
shl ebx,2
|
||||||
|
add ebx,4
|
||||||
|
mov esi,edx
|
||||||
|
dec esi
|
||||||
|
mov [eax+ebx],si
|
||||||
|
mov [eax+ebx+2],di
|
||||||
|
|
||||||
|
have_changes_in_stek_1:
|
||||||
|
|
||||||
|
mov edi,[y2]
|
||||||
|
inc edi
|
||||||
|
cmp edi,[m_y]
|
||||||
|
jle no_max_1_floodfill
|
||||||
|
mov edi,[m_y]
|
||||||
|
no_max_1_floodfill:
|
||||||
|
mov [sy],edi
|
||||||
|
|
||||||
|
mov eax,[output_array]
|
||||||
|
mov ebx,[eax]
|
||||||
|
mov [l_s],ebx ; save total number of points in stek
|
||||||
|
mov [l_c],-1 ; last color = -1
|
||||||
|
mov edx,[x_l]
|
||||||
|
analizing_from_left_to_right_down:
|
||||||
|
|
||||||
|
; «¨§¨à㥬 ¯¨ªá¥«¨ ¯®¤ «¨¨¥© á «¥¢®£® ªà ï
|
||||||
|
mov eax,[pointer_to_screen]
|
||||||
|
mov ebx,[screen_size_x]
|
||||||
|
mov esi,edx
|
||||||
|
mov edi,[sy]
|
||||||
|
call GetColorOfPixel
|
||||||
|
push eax
|
||||||
|
|
||||||
|
cmp eax,[c] ;¥á«¨ 梥⠯஢¥àאַ£® ¯¨ªá¥«ï ¥ à ¢¥ á,â® ¥ § ®á¨¬ ¥£® ¢ á⥪
|
||||||
|
je no_fill_3
|
||||||
|
mov ebx,[l_c]
|
||||||
|
cmp ebx,[c]
|
||||||
|
jne no_fill_3
|
||||||
|
mov edi,[sy]
|
||||||
|
mov eax,[output_array]
|
||||||
|
mov ebx,[eax]
|
||||||
|
inc ebx
|
||||||
|
mov [eax],ebx
|
||||||
|
dec ebx
|
||||||
|
shl ebx,2
|
||||||
|
add ebx,4
|
||||||
|
mov esi,edx
|
||||||
|
dec esi
|
||||||
|
mov [eax+ebx],si
|
||||||
|
mov [eax+ebx+2],di
|
||||||
|
no_fill_3:
|
||||||
|
|
||||||
|
pop [l_c]
|
||||||
|
inc edx
|
||||||
|
cmp edx,[x_r]
|
||||||
|
jle analizing_from_left_to_right_down
|
||||||
|
|
||||||
|
mov ebx,[l_c]
|
||||||
|
cmp ebx,[c] ;last color is c(color of filing arrea) ?
|
||||||
|
jne have_changes_in_stek_2
|
||||||
|
;save last color in stek
|
||||||
|
mov edi,[sy]
|
||||||
|
mov eax,[output_array]
|
||||||
|
mov ebx,[eax]
|
||||||
|
inc ebx
|
||||||
|
mov [eax],ebx
|
||||||
|
dec ebx
|
||||||
|
shl ebx,2
|
||||||
|
add ebx,4
|
||||||
|
mov esi,edx
|
||||||
|
dec esi
|
||||||
|
mov [eax+ebx],si
|
||||||
|
mov [eax+ebx+2],di
|
||||||
|
|
||||||
|
have_changes_in_stek_2:
|
||||||
|
|
||||||
|
mov ebx,[output_array] ;while stek have points ¯®ª ¢ á⥪¥ ¥áâì â®çª¨(ª®®à¤¨ âë)
|
||||||
|
mov ecx,[ebx]
|
||||||
|
test ecx,ecx
|
||||||
|
jnz while_no_null
|
||||||
|
|
||||||
|
|
||||||
|
ret
|
||||||
|
; procedure <<<<<<calculate ellips>>>>>>
|
||||||
|
; IN
|
||||||
|
; eax - pointer to picture
|
||||||
|
; ebx - output array
|
||||||
|
; ecx - picture size x
|
||||||
|
; edx - x0*65536+y0
|
||||||
|
; esi - a*65536+b
|
||||||
|
; edi - color
|
||||||
|
; OUT
|
||||||
|
; procedure not return value
|
||||||
|
calculate_ellips:
|
||||||
|
|
||||||
|
mov [pointer_to_screen],eax
|
||||||
|
mov [output_array],ebx
|
||||||
|
mov [screen_size_x],ecx
|
||||||
|
mov [e],ebx
|
||||||
|
|
||||||
|
mov eax,edx
|
||||||
|
and eax,0xffff
|
||||||
|
shr edx,16
|
||||||
|
mov [x2],edx ; centr x
|
||||||
|
mov [y2],eax ; centr y
|
||||||
|
|
||||||
|
mov eax,esi
|
||||||
|
and eax,0xffff ;eax=b
|
||||||
|
shr esi,16 ;esi=a
|
||||||
|
mov [a],esi
|
||||||
|
mov [b],eax
|
||||||
|
|
||||||
|
mov [c],edi ;color
|
||||||
|
mov [row],eax ;b
|
||||||
|
|
||||||
|
imul esi,esi ;a*a
|
||||||
|
imul eax,eax ;b*b
|
||||||
|
|
||||||
|
mov [a_square],esi
|
||||||
|
mov [b_square],eax
|
||||||
|
and [col],0
|
||||||
|
|
||||||
|
shl esi,1
|
||||||
|
shl eax,1
|
||||||
|
mov [two_a_square],esi
|
||||||
|
mov [two_b_square],eax
|
||||||
|
shl esi,1
|
||||||
|
shl eax,1
|
||||||
|
mov [four_a_square],esi
|
||||||
|
mov [four_b_square],eax
|
||||||
|
|
||||||
|
mov eax,[row] ;eax=row
|
||||||
|
mov ebx,eax
|
||||||
|
dec ebx ;ebx=(row-1)
|
||||||
|
imul ebx,eax ;ebx=(row-1)*row
|
||||||
|
imul ebx,[two_a_square] ;ebx=two_a_square*((row-1)*row)
|
||||||
|
mov ecx,[a_square] ;ecx=a_square
|
||||||
|
mov eax,1
|
||||||
|
sub eax,ecx ;eax=(1-a_square)
|
||||||
|
imul eax,[two_b_square] ;eax=two_b_square*(1-a_square)
|
||||||
|
add ebx,[a_square] ;ebx=two_a_square*((row-1)*row)+a_square
|
||||||
|
add eax,ebx ;eax=two_a_square*((row-1)*row)+a_square+two_b_square*(1-a_square)
|
||||||
|
mov [d],eax
|
||||||
|
|
||||||
|
mov edx,[x2] ;x
|
||||||
|
mov ebp,[y2] ;y
|
||||||
|
|
||||||
|
while_ellips_1:
|
||||||
|
mov esi,[a_square]
|
||||||
|
mov edi,[b_square]
|
||||||
|
imul esi,[row]
|
||||||
|
imul edi,[col]
|
||||||
|
cmp esi,edi
|
||||||
|
jle no_while_ellips_1
|
||||||
|
|
||||||
|
mov eax,edx ;x
|
||||||
|
mov ebx,ebp ;y
|
||||||
|
add eax,[col] ;x+col
|
||||||
|
add ebx,[row] ;y+row
|
||||||
|
mov [pixel_x],eax
|
||||||
|
mov [pixel_y],ebx
|
||||||
|
call setpixel
|
||||||
|
|
||||||
|
mov eax,edx ;x
|
||||||
|
mov ebx,ebp ;y
|
||||||
|
add eax,[col] ;x+col
|
||||||
|
sub ebx,[row] ;y-row
|
||||||
|
mov [pixel_x],eax
|
||||||
|
mov [pixel_y],ebx
|
||||||
|
call setpixel
|
||||||
|
|
||||||
|
mov eax,edx ;x
|
||||||
|
mov ebx,ebp ;y
|
||||||
|
sub eax,[col] ;x-col
|
||||||
|
add ebx,[row] ;y+row
|
||||||
|
mov [pixel_x],eax
|
||||||
|
mov [pixel_y],ebx
|
||||||
|
call setpixel
|
||||||
|
|
||||||
|
mov eax,edx ;x
|
||||||
|
mov ebx,ebp ;y
|
||||||
|
sub eax,[col] ;x-col
|
||||||
|
sub ebx,[row] ;y-row
|
||||||
|
mov [pixel_x],eax
|
||||||
|
mov [pixel_y],ebx
|
||||||
|
call setpixel
|
||||||
|
|
||||||
|
mov eax,[d]
|
||||||
|
cmp eax,0
|
||||||
|
js lab33 ;>=0
|
||||||
|
dec [row]
|
||||||
|
mov ebx,[four_a_square]
|
||||||
|
mov ecx,[row]
|
||||||
|
imul ebx,ecx ;ebx=four_a_square*(row)
|
||||||
|
sub [d],ebx ;d=d-four_a_square*(row)
|
||||||
|
lab33:
|
||||||
|
|
||||||
|
mov eax,[col]
|
||||||
|
shl eax,1
|
||||||
|
add eax,3
|
||||||
|
imul eax,[two_b_square]
|
||||||
|
add [d],eax ;d=d+two_b_square*(3+(col*2))
|
||||||
|
|
||||||
|
inc [col]
|
||||||
|
jmp while_ellips_1
|
||||||
|
|
||||||
|
no_while_ellips_1:
|
||||||
|
|
||||||
|
mov eax,[col]
|
||||||
|
inc eax
|
||||||
|
imul eax,[col]
|
||||||
|
imul eax,[two_b_square] ;eax=two_b_square*((col+1)*col)
|
||||||
|
mov ebx,[row]
|
||||||
|
sub ebx,2
|
||||||
|
imul ebx,[row]
|
||||||
|
inc ebx
|
||||||
|
imul ebx,[two_a_square] ;ebx=two_a_square*((row-2)*row+1)
|
||||||
|
mov ecx,1
|
||||||
|
sub ecx,[two_a_square]
|
||||||
|
imul ecx,[b_square] ;ecx=(1-two_a_square)*b_square
|
||||||
|
add eax,ebx
|
||||||
|
add eax,ecx
|
||||||
|
mov [d],eax ;two_b_square*(col+1)*col+two_a_square*(row*(row-2)+1)+(1-two_a_square)*b_square
|
||||||
|
|
||||||
|
mov edx,[x2] ;x
|
||||||
|
mov ebp,[y2] ;y
|
||||||
|
|
||||||
|
while_ellips_2:
|
||||||
|
mov esi,[row]
|
||||||
|
inc esi
|
||||||
|
test esi,esi
|
||||||
|
jz no_while_ellips_2
|
||||||
|
|
||||||
|
mov eax,edx ;x
|
||||||
|
mov ebx,ebp ;y
|
||||||
|
add eax,[col] ;x+col
|
||||||
|
add ebx,[row] ;y+row
|
||||||
|
mov [pixel_x],eax
|
||||||
|
mov [pixel_y],ebx
|
||||||
|
call setpixel
|
||||||
|
|
||||||
|
mov eax,edx ;x
|
||||||
|
mov ebx,ebp ;y
|
||||||
|
add eax,[col] ;x+col
|
||||||
|
sub ebx,[row] ;y-row
|
||||||
|
mov [pixel_x],eax
|
||||||
|
mov [pixel_y],ebx
|
||||||
|
call setpixel
|
||||||
|
|
||||||
|
mov eax,edx ;x
|
||||||
|
mov ebx,ebp ;y
|
||||||
|
sub eax,[col] ;x-col
|
||||||
|
add ebx,[row] ;y+row
|
||||||
|
mov [pixel_x],eax
|
||||||
|
mov [pixel_y],ebx
|
||||||
|
call setpixel
|
||||||
|
|
||||||
|
mov eax,edx ;x
|
||||||
|
mov ebx,ebp ;y
|
||||||
|
sub eax,[col] ;x-col
|
||||||
|
sub ebx,[row] ;y-row
|
||||||
|
mov [pixel_x],eax
|
||||||
|
mov [pixel_y],ebx
|
||||||
|
call setpixel
|
||||||
|
|
||||||
|
mov eax,[d]
|
||||||
|
cmp eax,0
|
||||||
|
jns lab34
|
||||||
|
|
||||||
|
inc [col]
|
||||||
|
mov ebx,[col]
|
||||||
|
imul ebx,[four_b_square]
|
||||||
|
add [d],ebx ;d=d+four_b_square*col
|
||||||
|
lab34:
|
||||||
|
dec [row]
|
||||||
|
mov ebx,[row]
|
||||||
|
shl ebx,1
|
||||||
|
mov eax,3
|
||||||
|
sub eax,ebx
|
||||||
|
imul eax,[two_a_square]
|
||||||
|
add [d],eax ;d=d+two_b_square*(3-(row*2))
|
||||||
|
|
||||||
|
jmp while_ellips_2
|
||||||
|
no_while_ellips_2:
|
||||||
|
|
||||||
|
mov eax,[output_array]
|
||||||
|
sub eax,[e]
|
||||||
|
shr eax,2
|
||||||
|
|
||||||
|
ret
|
||||||
|
;---------------------------
|
||||||
|
x_l dd ?
|
||||||
|
y_l dd ?
|
||||||
|
x_r dd ?
|
||||||
|
y_r dd ?
|
||||||
|
_dx dd ?
|
||||||
|
_dy dd ?
|
||||||
|
sx dd ?
|
||||||
|
sy dd ?
|
||||||
|
z dd ?
|
||||||
|
e dd ?
|
||||||
|
i dd ?
|
||||||
|
_ch dd ?
|
||||||
|
x2 dd ?
|
||||||
|
y2 dd ?
|
||||||
|
d dd ?
|
||||||
|
r dd ?
|
||||||
|
m_x dd ?
|
||||||
|
m_y dd ?
|
||||||
|
c dd ?
|
||||||
|
c_f dd ?
|
||||||
|
l_c dd ?
|
||||||
|
l_s dd ?
|
||||||
|
;---------------------------
|
||||||
|
pointer_to_screen dd 0
|
||||||
|
screen_size_x dd 0
|
||||||
|
output_array dd 0
|
||||||
|
pixel_x dd 0
|
||||||
|
pixel_y dd 0
|
||||||
|
;---------------------------
|
||||||
|
a dd 0
|
||||||
|
b dd 0
|
||||||
|
col dd 0
|
||||||
|
row dd 0
|
||||||
|
bnew dd 0
|
||||||
|
a_square dd 0
|
||||||
|
b_square dd 0
|
||||||
|
two_a_square dd 0
|
||||||
|
two_b_square dd 0
|
||||||
|
four_a_square dd 0
|
||||||
|
four_b_square dd 0
|
||||||
|
;-----------------------------
|
172
programs/media/animage/trunk/readme_k.inc
Normal file
172
programs/media/animage/trunk/readme_k.inc
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
|
||||||
|
*******************************English version*********************************
|
||||||
|
|
||||||
|
Hi! (:-) )
|
||||||
|
|
||||||
|
1) My name is Andrey(or an english Andrew) Ignatyev( nik andrew_programmer).
|
||||||
|
|
||||||
|
|
||||||
|
2) ANIMAGE(Animation and Image or animation of image) is graphics editor written
|
||||||
|
|
||||||
|
in pure assembler for Kolibri operation system.
|
||||||
|
|
||||||
|
|
||||||
|
3) My email polynki@mail.ru You can send my some quation or help my :) with deve-
|
||||||
|
|
||||||
|
|
||||||
|
lopment(for example write decoder or coder some graphics formats).
|
||||||
|
|
||||||
|
Offten I'm be a forum meos.sysbin.com
|
||||||
|
|
||||||
|
Sorry,but documantation only an rassian,because i'm can a litl speake an
|
||||||
|
|
||||||
|
english.
|
||||||
|
|
||||||
|
But i'm done interface of program anderstandly.
|
||||||
|
|
||||||
|
********************************Russian version********************************
|
||||||
|
|
||||||
|
*******************************************************************************
|
||||||
|
*********************************‚‚…„…<EFBFBD>ˆ…**************************************
|
||||||
|
*******************************************************************************
|
||||||
|
‡¤à ¢áâ¢ã©â¥.
|
||||||
|
|
||||||
|
1) Œ¥ï §®¢ãâ €¤à¥© ˆ£ â쥢(¨ª andrew_programmer).
|
||||||
|
|
||||||
|
2) ANIMAGE íâ® £à ä¨ç¥áª¨© । ªâ®à ¯¨á ë© ç¨á⮬ áᥬ¡«¥à¥ ¤«ï ®¯¥à -
|
||||||
|
|
||||||
|
樮®© á¨áâ¥¬ë Š®«¨¡à¨(«ãçè ï ®¯¥à 樮 ï á¨á⥬ ¢ ¬¨à¥).
|
||||||
|
|
||||||
|
3) ‚ë ¬®¦¥â¥ ¯®áë« âì ¬¥ ¢®¯à®áë ¨«¨ ¯®¬®çì ¬¥ ¢ à §à ¡®âª¥- ¯à¨¬¥à ¯¨á âì
|
||||||
|
|
||||||
|
¤¥ª®¤¥à ¨«¨ ª®¤¥à ª ª®£®-¨¡ã¤ì £à ä¨ç¥áª®£® ä®à¬ â .„«ï ⮣® çâ®¡ë ¯¨á âì
|
||||||
|
|
||||||
|
¤¥ª®¤¥à ¢ ¬ ¢®®¡é¥ ¥ ¤® § âì ª ª à ¡®â ¥â £à ä¨ç¥áª¨© । ªâ®à.…¤¨á⢥®¥
|
||||||
|
|
||||||
|
çâ® ¢ ¬ ¥®¡å®¤¨¬® § âì - íâ® â®,çâ® ¢ esi 室¨âìáï 㪠§ ⥫ì à ᯠª®¢ë¢ -
|
||||||
|
|
||||||
|
¥¬ë© ä ©«, ¢ edi 㪠§ â¥«ì ®¡« áâì ªã¤ ã¦® à ᯠª®¢ë¢ âì ä ©«.„«ï à ¡®âë
|
||||||
|
|
||||||
|
¤¥ª®¤¥à /ª®¤¥à ç¥à¥§ eax ¯¥à¥¤ ¥âáï 㪠§ â¥«ì ®¡« áâì ¢ 64 ª¨«®¡ ©â .
|
||||||
|
|
||||||
|
‚ë ¬®¦¥â¥ á¢ï§ âìáï á® ¬®© ¯® í«¥ªâà®®© ¯®ç⥠polynki@mail.ru .ˆ ¥é¥ ï ç áâ®
|
||||||
|
|
||||||
|
¡ë¢ î ä®à㬥 meos.sysbin.com
|
||||||
|
|
||||||
|
|
||||||
|
******************************************************************************
|
||||||
|
****************—⮠㬥¥â ¤¥« âì £à ä¨ç¥áª¨© । ªâ®à*************************
|
||||||
|
******************************************************************************
|
||||||
|
|
||||||
|
ˆ§ ¨ª®®ª ¯ ¥«¨ £à ä¨ç¥áª®£® । ªâ®à ¥à ¡®â îâ ⮫쪮: ¢ë¤¥«¥¨¥ ®¡« áâ¨
|
||||||
|
|
||||||
|
¯à®¨§¢®«ì®© ä®à¬ë(¯®ª ç⮠ॠ«¨§®¢ à ¡®â ⮫쪮 á ¯àאַ㣮«ì®© ®¡« áâìî),
|
||||||
|
|
||||||
|
¢ë¢®¤ ⥪áâ (¥®¡å®¤¨¬® ¯à®¤ã¬ âì à ¡®âã èà¨ä⮢),£à ¤¨¥â ï § «¨¢ª (㦮 ¯à®
|
||||||
|
|
||||||
|
¤ã¬ âì à §«¨çë¥ ¢ ਠâë § «¨¢®ª),¨áâà㬥â ïમáâì(¢®§¬®¦® ¥£® 㦮 ¢ª«îç¨â
|
||||||
|
|
||||||
|
¢ ¯®¤¬¥î 䨫ìâàë),¯®¢®à®â ª à⨪¨ ¯à®¨§¢®«ìë© ã£®«(§ 箪 ¯®«ãªà㣠á®
|
||||||
|
|
||||||
|
áâ५ª®©).‚áñ ®á⠫쮥 à ¡®â ¥â.
|
||||||
|
|
||||||
|
‚ ⥪á⮢®¬ ¬¥î ¯®«®áâìî à ¡®â ¥â ¬¥î FILE ¨ EDIT.‚ ¬¥î EDIT ᥩç á 5 ¯ãªâ®¢,
|
||||||
|
|
||||||
|
® á® ¢à¥¬¥¥¬ ¯®ï¢ïâìáï ¤à㣨¥ ¯®¤¯ãªâë.Žáâ «ìë¥ ¬¥î ¥ ॠ«¨§®¢ ë.
|
||||||
|
|
||||||
|
************************************************************************
|
||||||
|
<<<<<<<<<<<<<<<<<<„®ªã¬¥â æ¨ï ª £à ä¨ç¥áª®¬ã । ªâ®àã>>>>>>>>>>>>>>>>>
|
||||||
|
************************************************************************
|
||||||
|
|
||||||
|
***********************⥪á⮢ ï ¯ ¥«ì ¬¥î****************************
|
||||||
|
|
||||||
|
Œ¥î FILE:
|
||||||
|
|
||||||
|
NEW - ᮧ¤ ¨¥ à ¡®ç¥© ®¡« á⨠¤«ï à¨á®¢ ¨ï.‚ë ¢¢®¤¨â¥ ¢ ¯®«¥ X à §¬¥à ª àâ¨-
|
||||||
|
ª¨ ¯® X, ¢ ¯®«¥ Y à §¬¥à ª à⨪¨ ¯® Y.<EFBFBD>¥§ ¡ë¢ ©â¥ ¯®á«¥ ¡®à ª ¦¤®© æ¨äàë ¢
|
||||||
|
ᮮ⢥âáâ¢ãî饬 ¯®«¥, ¦¨¬ âì ª« ¢¨èã ‚‚Ž„.<EFBFBD>®á«¥ § ¤ ¨ï à §¬¥à ª à⨪¨ ¦¬¨â¥
|
||||||
|
¬ë誮© ª®¯ªã OK.“ ¢ á ¯®ï¢¨âìáï à ¡®ç ï ®¡« áâì § ¤ ë¬ à §¬¥à®¬.
|
||||||
|
|
||||||
|
OPEN - ®âªàë⨥ ä ©« á ¤¨áª .<EFBFBD>®á«¥ ¦ â¨ï íâã ª®¯ªã ¢ë 㢨¤¥ ®ª® ¬¨¨
|
||||||
|
¡à ã§¥à ¢ ª®â®à®¬ ¡ã¤ãâ ®â®¡à ¦¥ë ¨¬¥î騥áï ã ¢ á ¢ á¨á⥬¥ ¤¨áª®¢ë¥ ãáâன-
|
||||||
|
á⢠(¥á«¨ Š®«¨¡à¨ ¨å ®¡ à㦨â).‘ ¯®¬®éìî í⮣® ¡à ã§¥à § 室¨â¥ ¤¨áª ¨
|
||||||
|
¢ë¡¨à ¥â¥ ã¦ë© ¢ ¬ £à ä¨ç¥áª¨© ¢ ©«.<EFBFBD> ¤ ë© ¬®¬¥â £à ä¨ç¥áª¨© । ªâ®à
|
||||||
|
¬®¦¥â ç¨â âì ä ©«ë £à ä¨ç¥áª¨å ä®à¬ ⮢ BMP ¨ GIF.…᫨ ®¡ê¥¬ ä ©« ¤®áâ â®ç®
|
||||||
|
¡®«ì让(¥áª®«ìª® ¬¥£ ¡ ©â ¨ ¡®«¥¥),â® ä ©« ®âªàë¢ ¥âáï ¥áà §ã ç¥à¥§ ¥á-
|
||||||
|
ª®«ìª® ᥪã¤.
|
||||||
|
|
||||||
|
SAVE AS- á®åà ¥¨¥ ä ©« ¤¨áª®¢®¬ ãáâனá⢥.<EFBFBD>®á«¥ ¦ â¨ï íâã ª®¯ªã
|
||||||
|
¯®ï¢«ï¥âáï ®ª® ¬¨¨¡à 㧥à ,®¯¨á ®£® ¢ëè¥.‚ë â ª¦¥ ¢ë¡¨à ¥â¥ á ¯®¬®éî
|
||||||
|
¡à 㧥à ã¦ë© ¢ ¬ ª â «®£ ¨ 饫ª ¥â¥ ¯®«®áªã á ¤¥à¨ªâ®à¨¥ ª ä ©«ã,ª®â®-
|
||||||
|
à ï ®â®¡à ¦ ¥âáï ᨧ㠡à 㧥à .<EFBFBD>¥à¥¤¢¨ã¢ ªãàá®à ¢ ª®¥æ áâ®à®ª¨ á ª â «®£®¬,
|
||||||
|
¢ë ¢¢®¤¨â¥ ¨¬ï ä ©« á à áè¨à¥¨¥¬.
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
<EFBFBD> ¤ ë© ¬®¬¥â ॠ«¨§®¢ ® ¯®«®æ¥®¥
|
||||||
|
|
||||||
|
á®åà ¥¨¥ ¨ ç⥨¥ ä®à¬ â BMP(24,8,4,1 ¡¨â ¯¨ªá¥«ì).
|
||||||
|
;-----------------------------------------------------------------------------
|
||||||
|
SAVE - íâ ®¯æ¨ï ¨á¯®«ì§ã¥âáï ¢ ⮬ á«ãç ¥,ª®£¤ ä ©« ¡ë« á®åà ¥ á ¯®¬®-
|
||||||
|
éêî SAVE AS.‚ è ä ©« á®åà ï¥âáï á ⥬ ¦¥ ¨¬¥¥¬ ¨ ¢â®¬ ¦¥ ª â «®£¥,ª®â®àë© ¢ë
|
||||||
|
¢¢¥«¨ à ¥¥,¨á¯®«ì§ãï SAVE AS.
|
||||||
|
|
||||||
|
EXIT - íâ® ª®¯ª ¢ë室 ¨§ ¯à®£à ¬¬ë.Ž ¯à®¤ã¡«¨à®¢ ª« ¢¨è¥© ESC ª« ¢¨-
|
||||||
|
âãà¥.
|
||||||
|
|
||||||
|
Œ¥î EDIT:
|
||||||
|
|
||||||
|
UNDO - ®â¬¥ ¤¥©á⢨ï.<EFBFBD>â ®¯æ¨ï ¯®§¢®«ï¥â ¤¥« âì ®â¬¥ã ¯®á«¥¤¨å ¤¥©á⢨©.<EFBFBD> ¤
|
||||||
|
ë© ¬®¬¥â ç¨á«® ®âª ⮢ á®áâ ¢«ï¥â ¤¢ .
|
||||||
|
|
||||||
|
COPY - ª®¯¨àã¥â ¢ë¤¥«¥ãî á ¯®¬®éìî ¨áâà㬥⠂›„…‹…<EFBFBD>ˆ…(® 室¨âìáï ¯ ¥«¨
|
||||||
|
¢¢¨¤¥ ¨ª®ª¨ ¯àאַ㣮«ì¨ª , à¨á®¢ ®£® ¯ãªâ¨à®© «¨¨¥©) ®¡« áâì ¢ ¡ãä¥à.
|
||||||
|
|
||||||
|
PASTE - ¢áâ ¢«ï¥â ᪮¯¨à®¢ ãî ᯮ¬®éìî ¨áâà㬥â COPY ®¡« áâì.
|
||||||
|
|
||||||
|
CUT - ¢ë१ ¥â ¢ë¤¥«¥ãî ®¡« áâì(® áâ ®¢¨âìáï ¡¥«®©).
|
||||||
|
|
||||||
|
CLEARE SCREEN - ®ç¨é ¥â à ¡®çãî ®¡« áâì(® áâ ®¢¨âìáï ¡¥«®©).
|
||||||
|
|
||||||
|
******************************ˆŠŽ<EFBFBD>Šˆ ˆ<EFBFBD>‘’<EFBFBD>“Œ…<EFBFBD>’Ž‚*******************************
|
||||||
|
|
||||||
|
********Š¨áâ¨***************
|
||||||
|
<EFBFBD>¥à¢ë¥ 5 ¨ª®®ª ¨§®¡à ¦ îâ 5 ⨯®¢ ª¨á⥩.<EFBFBD>à¨ç¥¬ à §¬¥à ª¨á⨠¢ â®ç®á⨠ᮮâ-
|
||||||
|
¢¥âáâ¢ã¥â ⮬ã,ª®â®àë© ¨§®¡à ¦¥ ¨ª®ª¥.„«ï à¨á®¢ ¨ï ª¨áâìî ¢ ¬ 㦮 «¨¡®
|
||||||
|
¦ âì ¨§®¡à ¦¥¨¥ ⨯ ª¨áâ¨,«¨¡® á ¬ ¨áâà㬥⠊ˆ‘’œ,ª®â®àë© ¨§®¡à ¦¥
|
||||||
|
¢¢¨¤¥ ஧®¢®£® 㪠§ â¥«ï ¬ëè¨.
|
||||||
|
|
||||||
|
******Š à ¤ è**************
|
||||||
|
„«ï à¨á®¢ ¨ï ¨áâà㬥⮬ Š à ¤ è,¢ ¬ 㦮 饫ªãâì ¨ª®ª¥ á ¥£® ¨§®¡à ¦¥-
|
||||||
|
¨¥¬ ¨ ® áà §ã ¦¥ ¡ã¤¥â ªâ¨¢¨à®¢ .ˆáâà㬥⠪ à ¤ è à¨áã¥â ¯® ®â¤¥«ìë¬
|
||||||
|
¯¨ªá¥«ï¬(® ¥§ ¬¥¨¬ ¯à¨ ᮧ¤ ¨¨ ¯¨ªá¥«ì®© £à 䨪¨).
|
||||||
|
|
||||||
|
******<EFBFBD> «¨âà ***************
|
||||||
|
<EFBFBD> «¨âà ¨§®¡à ¦¥ ¯ ¥«¨ ¢¢¨¤¥ ¨ª®ª¨ ¨§ 梥âëå ª¢ ¤à ⨪®¢.„«ï ¢ë¡à
|
||||||
|
梥â à¨á®¢ ¨ï ¢ ¬ ¥®¡å®¤¨¬® 饫ªãâì ¨ª®ª¥, ¨ ¢ ¯®ï¢¨¢è¥©áï ¯ «¨âà¥
|
||||||
|
¢ë¡à âì ã¦ë© 梥â à¨á®¢ ¨ï.<EFBFBD> «¨âà ᮤ¥à¦¨â 256 梥⮢.
|
||||||
|
|
||||||
|
******<EFBFBD>¨¯¥âª ***************
|
||||||
|
ˆáâà㬥â <EFBFBD>¨¯¥âª ¯®§¢®«ï¥â ãáâ ®¢¨âì 梥⮬ à¨á®¢ ¨ï 梥â ⮣® ¯¨ªá¥«ï
|
||||||
|
ª®â®àë© ¢ë ¢¥«¨ ¯¨¯¥âªã(¯ ਠí⮬ 㦮 ¦ âì «¥¢ãî ª®¯ªã ¬ëè¨).
|
||||||
|
|
||||||
|
******“¢¥«¨ç¥¨¥************
|
||||||
|
ˆáâà㬥⠓¢¥«¨ç¥¨¥ ¥®¡å®¤¨¬ ¤«ï 㢥«¨ç¥¨ï ¬ áèâ ¡ ª à⨪¨(íâ® ®ç¥ì
|
||||||
|
㦮 ¯à¨ ᮧ¤ ¨¨ ¯¨ªá¥«ì®© £à 䨪¨).<EFBFBD>â®â ¨áâà㬥⠨§®¡à ¦¥ ¢¢¨¤¥ ç¥âëà¥å
|
||||||
|
¨ª®®ª: "x1","x2","x4","x8","x16".—⮠ᮮ⢥âáâ¢ã¥â 㢥«¨ç¥¨î ¢:
|
||||||
|
1x1,2x2,4x4,8x8,16x16 à §.
|
||||||
|
„¥©á⢨¥ íâ¨å ¨ª®®ª ¯à®¤ã¡«¨à®¢ ® á ª« ¢¨ âãàë ª« ¢¨è ¬¨:"1","2","4","8","0".
|
||||||
|
|
||||||
|
********‹ á⨪**************
|
||||||
|
ˆáâà㬥⠋ á⨪ áâ¨à ¥â ç áâì ª à⨪¨,§ ªà 訢 ï ¥ñ 梥⮬ ä® .<EFBFBD> á ¬®¬ ¤¥«¥
|
||||||
|
¨áâà㬥 « á⨪ - íâ® ª¨áâì à¨áãîé ï ¡¥«ë¬ 梥⮬.<EFBFBD>®í⮬㠬¥ïâì ä®à¬ã « á⨪
|
||||||
|
¬®¦® 饫ª ï ¯® ¨§®¡à ¦¥¨ï¬ ⨯®¢ ª¨á⥩.
|
||||||
|
|
||||||
|
|
||||||
|
<EFBFBD> ¯ ¥«¨ 室¨âìáï ¥é¥ ¬®£® ¤àã£¨å ¨áâà㬥⮢,® ¯¨á âì ¤®ªã¬¥â æ¨î ¤ «ìè¥ -
|
||||||
|
|
||||||
|
¬¥ ¥å®ç¥âìáï,⥬ ¡®«¥¥,çâ® ¥ñ ¬ «® ªâ® ç¨â ¥â( த ¯à¥¤¯®ç¨â ¥â ¨áá«¥¤®¢ âì
|
||||||
|
|
||||||
|
¢áñ ¬¥â®¤®¬ âëª ).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
BIN
programs/media/animage/trunk/worktab1.gif
Normal file
BIN
programs/media/animage/trunk/worktab1.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.2 KiB |
@ -1,4 +1,5 @@
|
|||||||
@erase lang.inc
|
@erase lang.inc
|
||||||
@echo lang fix en >lang.inc
|
@echo lang fix en >lang.inc
|
||||||
@fasm jpegview.asm jpegview
|
@fasm jpegview.asm jpegview
|
||||||
|
@erase lang.inc
|
||||||
@pause
|
@pause
|
@ -1,4 +1,5 @@
|
|||||||
@erase lang.inc
|
@erase lang.inc
|
||||||
@echo lang fix ru >lang.inc
|
@echo lang fix ru >lang.inc
|
||||||
@fasm jpegview.asm jpegview
|
@fasm jpegview.asm jpegview
|
||||||
|
@erase lang.inc
|
||||||
@pause
|
@pause
|
@ -26,6 +26,9 @@
|
|||||||
org 0
|
org 0
|
||||||
PARAMS = memsize - 1024
|
PARAMS = memsize - 1024
|
||||||
|
|
||||||
|
appname equ 'Jpegview '
|
||||||
|
version equ '0.15'
|
||||||
|
|
||||||
use32
|
use32
|
||||||
|
|
||||||
db 'MENUET01' ; 8 byte id
|
db 'MENUET01' ; 8 byte id
|
||||||
@ -271,30 +274,10 @@ dw_002:
|
|||||||
|
|
||||||
xor eax,eax ; DRAW WINDOW
|
xor eax,eax ; DRAW WINDOW
|
||||||
mov edx,[wcolor]
|
mov edx,[wcolor]
|
||||||
add edx,0x02000000
|
add edx,0x13000000
|
||||||
mov esi,0x80557799
|
mov edi,header ; WINDOW LABEL
|
||||||
mov edi,0x00557799
|
|
||||||
int 0x40
|
int 0x40
|
||||||
|
|
||||||
mov eax,4 ; WINDOW LABEL
|
|
||||||
mov ebx,8*65536+8
|
|
||||||
mov ecx,0x00ffffff
|
|
||||||
mov edx,labelt
|
|
||||||
mov esi,labellen-labelt
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
|
|
||||||
mov eax,8 ; CLOSE BUTTON
|
|
||||||
|
|
||||||
mov bx, [winxs]
|
|
||||||
sub bx, 19
|
|
||||||
shl ebx, 16
|
|
||||||
add ebx, 12
|
|
||||||
|
|
||||||
mov ecx,5*65536+12
|
|
||||||
mov edx,1
|
|
||||||
mov esi,0x557799
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
; draw status bar
|
; draw status bar
|
||||||
mov eax, 13
|
mov eax, 13
|
||||||
@ -528,8 +511,7 @@ include 'jpeglib.asm'
|
|||||||
; DATA AREA
|
; DATA AREA
|
||||||
|
|
||||||
wcolor dd 0x000000
|
wcolor dd 0x000000
|
||||||
labelt db 'Jpegview v0.15'
|
header db appname,version,0
|
||||||
labellen:
|
|
||||||
setname db 'SLIDESHOW'
|
setname db 'SLIDESHOW'
|
||||||
setnamelen:
|
setnamelen:
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
@erase lang.inc
|
@erase lang.inc
|
||||||
@echo lang fix en >lang.inc
|
@echo lang fix en >lang.inc
|
||||||
@fasm desktop.asm desktop
|
@fasm desktop.asm desktop
|
||||||
|
@erase lang.inc
|
||||||
@pause
|
@pause
|
@ -1,4 +1,5 @@
|
|||||||
@erase lang.inc
|
@erase lang.inc
|
||||||
@echo lang fix ru >lang.inc
|
@echo lang fix ru >lang.inc
|
||||||
@fasm desktop.asm desktop
|
@fasm desktop.asm desktop
|
||||||
|
@erase lang.inc
|
||||||
@pause
|
@pause
|
@ -799,37 +799,13 @@ draw_window:
|
|||||||
mov eax,14
|
mov eax,14
|
||||||
int 0x40
|
int 0x40
|
||||||
|
|
||||||
sub eax,60*65536
|
|
||||||
mov ebx,eax
|
|
||||||
mov bx,40
|
|
||||||
|
|
||||||
; DRAW WINDOW
|
; DRAW WINDOW
|
||||||
mov eax,0 ; function 0 : define and draw window
|
mov eax,0 ; function 0 : define and draw window
|
||||||
mov ebx,110*65536+555 ; [x start] *65536 + [x size]
|
mov ebx,110*65536+555 ; [x start] *65536 + [x size]
|
||||||
mov ecx,50*65536+255 ; [y start] *65536 + [y size]
|
mov ecx,50*65536+255 ; [y start] *65536 + [y size]
|
||||||
mov edx,[w_work] ; color of work area RRGGBB,8->color
|
mov edx,[w_work] ; color of work area RRGGBB,8->color
|
||||||
or edx,0x02000000
|
or edx,0x13000000
|
||||||
mov esi,[w_grab] ; color of grab bar RRGGBB,8->color gl
|
mov edi,header ; WINDOW LABEL
|
||||||
or esi,0x80000000
|
|
||||||
mov edi,[w_frame] ; color of frames RRGGBB
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
; WINDOW LABEL
|
|
||||||
mov eax,4 ; function 4 : write text to window
|
|
||||||
mov ebx,8*65536+7 ;8 ; [x start] *65536 + [y start]
|
|
||||||
mov ecx,[w_grab_text] ; color of text RRGGBB
|
|
||||||
if lang eq ru
|
|
||||||
or ecx,0x10000000
|
|
||||||
end if
|
|
||||||
mov edx,labelt ; pointer to text beginning
|
|
||||||
mov esi,labelt.size ; text length
|
|
||||||
int 0x40
|
|
||||||
; CLOSE BUTTON
|
|
||||||
mov eax,8 ; function 8 : define and draw button
|
|
||||||
mov ebx,(555-19)*65536+12 ; [x start] *65536 + [x size]
|
|
||||||
mov ecx,4*65536+12 ; [y start] *65536 + [y size]
|
|
||||||
mov edx,1 ; button id
|
|
||||||
mov esi,[w_grab_button] ; button color RRGGBB
|
|
||||||
int 0x40
|
int 0x40
|
||||||
|
|
||||||
if lang eq ru
|
if lang eq ru
|
||||||
@ -844,10 +820,11 @@ else
|
|||||||
apply_w = (5*2+6*7)
|
apply_w = (5*2+6*7)
|
||||||
end if
|
end if
|
||||||
|
|
||||||
; mov eax,8 ; FILENAME BUTTON
|
mov eax,8 ; FILENAME BUTTON
|
||||||
mov ebx,5*65536+545
|
mov ebx,5*65536+545
|
||||||
mov ecx,212*65536+10
|
mov ecx,212*65536+10
|
||||||
mov edx,0x4000000B
|
mov edx,0x4000000B
|
||||||
|
mov esi,[w_grab_button] ; button color RRGGBB
|
||||||
int 0x40
|
int 0x40
|
||||||
|
|
||||||
; mov eax,8 ; LOAD BUTTON
|
; mov eax,8 ; LOAD BUTTON
|
||||||
@ -1034,12 +1011,15 @@ lsz button_text,\
|
|||||||
ru, '’¥ªáâ ª®¯ª¥',\
|
ru, '’¥ªáâ ª®¯ª¥',\
|
||||||
en, 'Button text'
|
en, 'Button text'
|
||||||
|
|
||||||
lsz labelt,\
|
|
||||||
ru, '<27>€‘’<E28098>Ž‰Š€ –‚…’Ž‚',\
|
|
||||||
en, 'DESKTOP COLOURS - DEFINE COLOR AND CLICK ON TARGET'
|
|
||||||
|
|
||||||
sz default_skn, '/RD/1/DEFAULT.SKN',0
|
sz default_skn, '/RD/1/DEFAULT.SKN',0
|
||||||
|
|
||||||
|
if lang eq ru
|
||||||
|
header db '<27>€‘’<E28098>Ž‰Š€ ŽŠŽ<C5A0>',0
|
||||||
|
else
|
||||||
|
header db 'WINDOWS SETTINGS - DEFINE COLOR AND CLICK ON TARGET',0
|
||||||
|
end if
|
||||||
|
|
||||||
|
|
||||||
color dd 0
|
color dd 0
|
||||||
|
|
||||||
I_END:
|
I_END:
|
||||||
|
3
programs/system/docpack/trunk/build.bat
Normal file
3
programs/system/docpack/trunk/build.bat
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
fasm docpack.asm docpack
|
||||||
|
mtappack docpack
|
||||||
|
pause
|
@ -21,7 +21,7 @@ macro embed_file fn
|
|||||||
label2:
|
label2:
|
||||||
FILE_COUNT=FILE_COUNT+1
|
FILE_COUNT=FILE_COUNT+1
|
||||||
}
|
}
|
||||||
|
appname equ 'Doc Pack'
|
||||||
use32
|
use32
|
||||||
org 0x0
|
org 0x0
|
||||||
db 'MENUET01' ; 8 byte id
|
db 'MENUET01' ; 8 byte id
|
||||||
@ -85,13 +85,27 @@ start:
|
|||||||
|
|
||||||
red:
|
red:
|
||||||
mov [my_param],'a'
|
mov [my_param],'a'
|
||||||
|
|
||||||
|
mov eax,48
|
||||||
|
mov ebx,3
|
||||||
|
mov ecx,sc
|
||||||
|
mov edx,sizeof.system_colors
|
||||||
|
int 0x40
|
||||||
|
|
||||||
mcall 12,1
|
mcall 12,1
|
||||||
mcall 0,<220,120>,<30,FILECOUNT*16+35>,0x3b0b0b0
|
|
||||||
mcall 4,<8,8>,0x10ffffff,title,titlen-title
|
xor eax,eax
|
||||||
|
mov ebx,220*65536+120
|
||||||
|
mov ecx,30*65536+FILECOUNT*16+35
|
||||||
|
mov edx,[sc.work]
|
||||||
|
or edx,0x33000000
|
||||||
|
mov edi,header
|
||||||
|
int 0x40
|
||||||
|
|
||||||
mov ecx,FILECOUNT
|
mov ecx,FILECOUNT
|
||||||
mov ebx,10 shl 16+100
|
mov ebx,5 shl 16+100
|
||||||
mov esi,0xb0b0b0
|
mov esi,[sc.work_button]
|
||||||
mov edi,27 shl 16+14
|
mov edi,5 shl 16+14
|
||||||
mov edx,10
|
mov edx,10
|
||||||
mov eax,8
|
mov eax,8
|
||||||
.btnlp:
|
.btnlp:
|
||||||
@ -104,18 +118,18 @@ red:
|
|||||||
mov ecx,FILECOUNT
|
mov ecx,FILECOUNT
|
||||||
mov edx,embedded
|
mov edx,embedded
|
||||||
xor edi,edi
|
xor edi,edi
|
||||||
mov ebx,30 shl 16+30
|
mov ebx,25 shl 16+8
|
||||||
mov eax,4
|
mov eax,4
|
||||||
.list:
|
.list:
|
||||||
lea edx,[edx+edi+8]
|
lea edx,[edx+edi+8]
|
||||||
mov edi,[edx-8]
|
mov edi,[edx-8]
|
||||||
pusha
|
pusha
|
||||||
sub ebx,15 shl 16
|
sub ebx,15 shl 16
|
||||||
mcall ,,0xff,my_param,1
|
mcall ,,0xff0000,my_param,1
|
||||||
inc [my_param]
|
inc [my_param]
|
||||||
popa
|
popa
|
||||||
push ecx
|
push ecx
|
||||||
mcall ,,0xffffff,,[edx-4]
|
mcall ,,[sc.work_button_text],,[edx-4]
|
||||||
pop ecx
|
pop ecx
|
||||||
add edx,esi
|
add edx,esi
|
||||||
add ebx,16
|
add ebx,16
|
||||||
@ -145,14 +159,13 @@ still:
|
|||||||
movzx ecx,ah
|
movzx ecx,ah
|
||||||
jmp start.open
|
jmp start.open
|
||||||
|
|
||||||
title db 'Doc Pack'
|
header db appname,0
|
||||||
titlen:
|
|
||||||
|
|
||||||
fileinfo:
|
fileinfo:
|
||||||
dd 7
|
dd 7
|
||||||
dd 0
|
dd 0
|
||||||
dd param
|
dd param
|
||||||
dd 0, 0
|
dd 0 ,0
|
||||||
db '/RD/1/TINYPAD',0
|
db '/RD/1/TINYPAD',0
|
||||||
|
|
||||||
param db '*'
|
param db '*'
|
||||||
@ -187,3 +200,5 @@ FILECOUNT = FILE_COUNT
|
|||||||
my_param db 0
|
my_param db 0
|
||||||
rb 256
|
rb 256
|
||||||
I_END:
|
I_END:
|
||||||
|
|
||||||
|
sc system_colors
|
@ -143,7 +143,8 @@ macro mcall a,b,c,d,e,f { ; mike.dld
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; language for programs
|
||||||
|
lang fix ru ; ru en fr ge fi
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
|||||||
@erase lang.inc
|
|
||||||
@echo lang fix en >lang.inc
|
|
||||||
@fasm rd2fd.asm rd2fd
|
|
||||||
@pause
|
|
@ -1,4 +0,0 @@
|
|||||||
@erase lang.inc
|
|
||||||
@echo lang fix ru >lang.inc
|
|
||||||
@fasm rd2fd.asm rd2fd
|
|
||||||
@pause
|
|
@ -1,266 +0,0 @@
|
|||||||
; new application structure
|
|
||||||
macro meos_app_start
|
|
||||||
{
|
|
||||||
use32
|
|
||||||
org 0x0
|
|
||||||
|
|
||||||
db 'MENUET01'
|
|
||||||
dd 0x01
|
|
||||||
dd __start
|
|
||||||
dd __end
|
|
||||||
dd __memory
|
|
||||||
dd __stack
|
|
||||||
|
|
||||||
if used __params & ~defined __params
|
|
||||||
dd __params
|
|
||||||
else
|
|
||||||
dd 0x0
|
|
||||||
end if
|
|
||||||
|
|
||||||
dd 0x0
|
|
||||||
}
|
|
||||||
MEOS_APP_START fix meos_app_start
|
|
||||||
|
|
||||||
macro code
|
|
||||||
{
|
|
||||||
__start:
|
|
||||||
}
|
|
||||||
CODE fix code
|
|
||||||
|
|
||||||
macro data
|
|
||||||
{
|
|
||||||
__data:
|
|
||||||
}
|
|
||||||
DATA fix data
|
|
||||||
|
|
||||||
macro udata
|
|
||||||
{
|
|
||||||
if used __params & ~defined __params
|
|
||||||
__params:
|
|
||||||
db 0
|
|
||||||
__end:
|
|
||||||
rb 255
|
|
||||||
else
|
|
||||||
__end:
|
|
||||||
end if
|
|
||||||
__udata:
|
|
||||||
}
|
|
||||||
UDATA fix udata
|
|
||||||
|
|
||||||
macro meos_app_end
|
|
||||||
{
|
|
||||||
align 32
|
|
||||||
rb 2048
|
|
||||||
__stack:
|
|
||||||
__memory:
|
|
||||||
}
|
|
||||||
MEOS_APP_END fix meos_app_end
|
|
||||||
|
|
||||||
|
|
||||||
; macro for defining multiline text data
|
|
||||||
struc mstr [sstring]
|
|
||||||
{
|
|
||||||
forward
|
|
||||||
local ssize
|
|
||||||
virtual at 0
|
|
||||||
db sstring
|
|
||||||
ssize = $
|
|
||||||
end virtual
|
|
||||||
dd ssize
|
|
||||||
db sstring
|
|
||||||
common
|
|
||||||
dd -1
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
; strings
|
|
||||||
macro sz name,[data] { ; from MFAR [mike.dld]
|
|
||||||
common
|
|
||||||
if used name
|
|
||||||
label name
|
|
||||||
end if
|
|
||||||
forward
|
|
||||||
if used name
|
|
||||||
db data
|
|
||||||
end if
|
|
||||||
common
|
|
||||||
if used name
|
|
||||||
.size = $-name
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
macro lsz name,[lng,data] { ; from MFAR [mike.dld]
|
|
||||||
common
|
|
||||||
if used name
|
|
||||||
label name
|
|
||||||
end if
|
|
||||||
forward
|
|
||||||
if (used name)&(lang eq lng)
|
|
||||||
db data
|
|
||||||
end if
|
|
||||||
common
|
|
||||||
if used name
|
|
||||||
.size = $-name
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; easy system call macro
|
|
||||||
macro mpack dest, hsrc, lsrc
|
|
||||||
{
|
|
||||||
if (hsrc eqtype 0) & (lsrc eqtype 0)
|
|
||||||
mov dest, (hsrc) shl 16 + lsrc
|
|
||||||
else
|
|
||||||
if (hsrc eqtype 0) & (~lsrc eqtype 0)
|
|
||||||
mov dest, (hsrc) shl 16
|
|
||||||
add dest, lsrc
|
|
||||||
else
|
|
||||||
mov dest, hsrc
|
|
||||||
shl dest, 16
|
|
||||||
add dest, lsrc
|
|
||||||
end if
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
macro __mov reg,a,b { ; mike.dld
|
|
||||||
if (~a eq)&(~b eq)
|
|
||||||
mpack reg,a,b
|
|
||||||
else if (~a eq)&(b eq)
|
|
||||||
mov reg,a
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
macro mcall a,b,c,d,e,f { ; mike.dld
|
|
||||||
__mov eax,a
|
|
||||||
__mov ebx,b
|
|
||||||
__mov ecx,c
|
|
||||||
__mov edx,d
|
|
||||||
__mov esi,e
|
|
||||||
__mov edi,f
|
|
||||||
int 0x40
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; optimize the code for size
|
|
||||||
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
|
|
||||||
|
|
||||||
macro add arg1,arg2
|
|
||||||
{
|
|
||||||
if (arg2 eqtype 0)
|
|
||||||
if (arg2) = 1
|
|
||||||
inc arg1
|
|
||||||
else
|
|
||||||
add arg1,arg2
|
|
||||||
end if
|
|
||||||
else
|
|
||||||
add arg1,arg2
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
macro sub arg1,arg2
|
|
||||||
{
|
|
||||||
if (arg2 eqtype 0)
|
|
||||||
if (arg2) = 1
|
|
||||||
dec arg1
|
|
||||||
else
|
|
||||||
sub arg1,arg2
|
|
||||||
end if
|
|
||||||
else
|
|
||||||
sub arg1,arg2
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
macro mov arg1,arg2
|
|
||||||
{
|
|
||||||
if (arg1 in __regs) & (arg2 eqtype 0)
|
|
||||||
if (arg2) = 0
|
|
||||||
xor arg1,arg1
|
|
||||||
else if (arg2) = 1
|
|
||||||
xor arg1,arg1
|
|
||||||
inc arg1
|
|
||||||
else if (arg2) = -1
|
|
||||||
or arg1,-1
|
|
||||||
else if (arg2) > -128 & (arg2) < 128
|
|
||||||
push arg2
|
|
||||||
pop arg1
|
|
||||||
else
|
|
||||||
mov arg1,arg2
|
|
||||||
end if
|
|
||||||
else
|
|
||||||
mov arg1,arg2
|
|
||||||
end if
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
macro struct name
|
|
||||||
{
|
|
||||||
virtual at 0
|
|
||||||
name name
|
|
||||||
sizeof.#name = $ - name
|
|
||||||
end virtual
|
|
||||||
}
|
|
||||||
|
|
||||||
; structures used in MeOS
|
|
||||||
struc process_information
|
|
||||||
{
|
|
||||||
.cpu_usage dd ? ; +0
|
|
||||||
.window_stack_position dw ? ; +4
|
|
||||||
.window_stack_value dw ? ; +6
|
|
||||||
.not_used1 dw ? ; +8
|
|
||||||
.process_name rb 12 ; +10
|
|
||||||
.memory_start dd ? ; +22
|
|
||||||
.used_memory dd ? ; +26
|
|
||||||
.PID dd ? ; +30
|
|
||||||
.x_start dd ? ; +34
|
|
||||||
.y_start dd ? ; +38
|
|
||||||
.x_size dd ? ; +42
|
|
||||||
.y_size dd ? ; +46
|
|
||||||
.slot_state dw ? ; +50
|
|
||||||
rb (1024-52)
|
|
||||||
}
|
|
||||||
struct process_information
|
|
||||||
|
|
||||||
struc system_colors
|
|
||||||
{
|
|
||||||
.frame dd ?
|
|
||||||
.grab dd ?
|
|
||||||
.grab_button dd ?
|
|
||||||
.grab_button_text dd ?
|
|
||||||
.grab_text dd ?
|
|
||||||
.work dd ?
|
|
||||||
.work_button dd ?
|
|
||||||
.work_button_text dd ?
|
|
||||||
.work_text dd ?
|
|
||||||
.work_graph dd ?
|
|
||||||
}
|
|
||||||
struct system_colors
|
|
||||||
|
|
||||||
|
|
||||||
; constants
|
|
||||||
|
|
||||||
; events
|
|
||||||
EV_IDLE = 0
|
|
||||||
EV_TIMER = 0
|
|
||||||
EV_REDRAW = 1
|
|
||||||
EV_KEY = 2
|
|
||||||
EV_BUTTON = 3
|
|
||||||
EV_EXIT = 4
|
|
||||||
EV_BACKGROUND = 5
|
|
||||||
EV_MOUSE = 6
|
|
||||||
EV_IPC = 7
|
|
||||||
EV_STACK = 8
|
|
||||||
|
|
||||||
; event mask bits for function 40
|
|
||||||
EVM_REDRAW = 1b
|
|
||||||
EVM_KEY = 10b
|
|
||||||
EVM_BUTTON = 100b
|
|
||||||
EVM_EXIT = 1000b
|
|
||||||
EVM_BACKGROUND = 10000b
|
|
||||||
EVM_MOUSE = 100000b
|
|
||||||
EVM_IPC = 1000000b
|
|
||||||
EVM_STACK = 10000000b
|
|
@ -1,228 +0,0 @@
|
|||||||
;WARNING! Spaghetti code, size optimized
|
|
||||||
|
|
||||||
use32
|
|
||||||
org 0x0
|
|
||||||
|
|
||||||
db 'MENUET01' ; 8 byte id
|
|
||||||
dd 0x01 ; header version
|
|
||||||
dd START ; start of code
|
|
||||||
dd I_END ; size of image
|
|
||||||
dd 0x1000 ; memory for app
|
|
||||||
dd 0x1000 ; esp
|
|
||||||
dd 0x0 , 0x0 ; I_Param , I_Icon
|
|
||||||
|
|
||||||
include "lang.inc"
|
|
||||||
include "macros.inc" ; - 30 bytes !!!
|
|
||||||
|
|
||||||
|
|
||||||
START:
|
|
||||||
red: ; redraw
|
|
||||||
call draw_window
|
|
||||||
|
|
||||||
still:
|
|
||||||
|
|
||||||
mov eax,10 ; wait here for event
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
cmp eax,1 ; redraw request ?
|
|
||||||
je red
|
|
||||||
cmp eax,2 ; key in buffer ?
|
|
||||||
je key
|
|
||||||
cmp eax,3 ; button in buffer ?
|
|
||||||
je button
|
|
||||||
|
|
||||||
; jmp still
|
|
||||||
key: ; key
|
|
||||||
; just read it and ignore
|
|
||||||
int 0x40
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
button: ; button
|
|
||||||
mov eax,17 ; get id
|
|
||||||
int 0x40
|
|
||||||
cmp ah,1 ; button id=1 ?
|
|
||||||
je close
|
|
||||||
cmp ah,2
|
|
||||||
je ramdiskcopy
|
|
||||||
cmp ah,3
|
|
||||||
je ramdiskupdate
|
|
||||||
jmp togglewrite
|
|
||||||
close:
|
|
||||||
or eax,-1 ; close this program
|
|
||||||
jmp callsys
|
|
||||||
ramdiskcopy:
|
|
||||||
mov eax,16
|
|
||||||
xor ebx,ebx
|
|
||||||
inc ebx
|
|
||||||
jmp callsys
|
|
||||||
ramdiskupdate:
|
|
||||||
mov eax,16
|
|
||||||
xor ebx,ebx
|
|
||||||
inc ebx
|
|
||||||
inc ebx
|
|
||||||
jmp callsys
|
|
||||||
togglewrite:
|
|
||||||
call togglefdcwrite
|
|
||||||
callsys:
|
|
||||||
int 0x40
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
; get fdc settings for writing & invert them.
|
|
||||||
togglefdcwrite:
|
|
||||||
mov eax,16
|
|
||||||
mov ebx,4
|
|
||||||
int 0x40
|
|
||||||
xchg ecx,eax
|
|
||||||
xor ecx,1
|
|
||||||
mov eax,16
|
|
||||||
dec ebx
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
mov [esp], dword still ; change return address !
|
|
||||||
;run trough drawwindow :]
|
|
||||||
|
|
||||||
; *********************************************
|
|
||||||
; ******* WINDOW DEFINITIONS AND DRAW ********
|
|
||||||
; *********************************************
|
|
||||||
|
|
||||||
|
|
||||||
draw_window:
|
|
||||||
|
|
||||||
|
|
||||||
mov eax,12 ; function 12:tell os about windowdraw
|
|
||||||
xor ebx,ebx ; 1, start of draw
|
|
||||||
inc ebx
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
; DRAW WINDOW
|
|
||||||
xor eax,eax ; function 0 : define and draw win
|
|
||||||
mov ebx,100*65536+250 ; [x start] *65536 + [x size]
|
|
||||||
mov ecx,100*65536+120 ; [y start] *65536 + [y size]
|
|
||||||
mov edx,0x03ffffff ; color of work area RRGGBB,8->color gl
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
;The important part, the buttons & text.
|
|
||||||
|
|
||||||
mov ebx,9*65536+36
|
|
||||||
mov ecx,41*65536+14
|
|
||||||
xor edx,edx
|
|
||||||
inc edx
|
|
||||||
inc edx
|
|
||||||
;mov edx,2
|
|
||||||
call clickbox
|
|
||||||
|
|
||||||
mov ebx,67*65536+49
|
|
||||||
inc edx
|
|
||||||
call clickbox
|
|
||||||
|
|
||||||
mov ebx,12*65536+12
|
|
||||||
mov ecx,81*65536+12
|
|
||||||
inc edx
|
|
||||||
call clickbox
|
|
||||||
|
|
||||||
mov ecx,96*65536+12
|
|
||||||
xor edx,edx
|
|
||||||
call clickbox
|
|
||||||
|
|
||||||
mov edi,0x10000000
|
|
||||||
mov edx,titlebar
|
|
||||||
mov ebx,9*65536+9
|
|
||||||
mov ecx,0x10ffffff
|
|
||||||
call print
|
|
||||||
|
|
||||||
; mov edx,h1
|
|
||||||
mov ebx,11*65536+28
|
|
||||||
mov ecx,0x10808080
|
|
||||||
call print
|
|
||||||
|
|
||||||
; mov edx,comtext
|
|
||||||
add ebx,15
|
|
||||||
xchg ecx,edi
|
|
||||||
call print
|
|
||||||
|
|
||||||
; mov edx,h2
|
|
||||||
add ebx,25
|
|
||||||
xchg ecx,edi
|
|
||||||
call print
|
|
||||||
|
|
||||||
; mov edx,setwrite
|
|
||||||
add ebx,15
|
|
||||||
xchg ecx,edi
|
|
||||||
call print
|
|
||||||
|
|
||||||
; mov edx,setread
|
|
||||||
add ebx,15
|
|
||||||
xchg ecx,edi
|
|
||||||
call print
|
|
||||||
|
|
||||||
mov eax,16
|
|
||||||
mov ebx,4
|
|
||||||
int 0x40
|
|
||||||
test al,1
|
|
||||||
je nowritex
|
|
||||||
; mov edx,xsign
|
|
||||||
mov ebx,14*65536+83
|
|
||||||
xchg ecx,edi
|
|
||||||
call print
|
|
||||||
nowritex:
|
|
||||||
mov eax,12 ; function 12:tell os about windowdraw
|
|
||||||
mov ebx,2 ; 2, end of draw
|
|
||||||
int 0x40
|
|
||||||
ret
|
|
||||||
|
|
||||||
clickbox:
|
|
||||||
pusha
|
|
||||||
mov edi,edx
|
|
||||||
cmp edx, 0
|
|
||||||
je .disabledbox
|
|
||||||
mov eax,8 ; function 8 : define and draw button
|
|
||||||
int 0x40
|
|
||||||
.disabledbox:
|
|
||||||
inc ecx
|
|
||||||
inc ebx
|
|
||||||
mov eax,13
|
|
||||||
mov edx, 0x808080
|
|
||||||
int 0x40
|
|
||||||
cmp edi,0
|
|
||||||
je .grayed
|
|
||||||
mov edx,0x80
|
|
||||||
.grayed:
|
|
||||||
sub ebx,65536
|
|
||||||
sub ecx,65536
|
|
||||||
int 0x40
|
|
||||||
add ebx,65534
|
|
||||||
add ecx,65534
|
|
||||||
mov edx,0xffffff
|
|
||||||
int 0x40
|
|
||||||
popa
|
|
||||||
ret
|
|
||||||
|
|
||||||
print:
|
|
||||||
mov eax,edx
|
|
||||||
xor esi,esi
|
|
||||||
addchar:
|
|
||||||
inc eax
|
|
||||||
inc esi
|
|
||||||
cmp [eax],byte 0
|
|
||||||
jne addchar
|
|
||||||
mov eax,4
|
|
||||||
int 0x40
|
|
||||||
add edx,esi
|
|
||||||
inc edx
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
; DATA AREA
|
|
||||||
|
|
||||||
titlebar: db 'RD2FD',0
|
|
||||||
h1: db 'Commands',0
|
|
||||||
comtext: db 'Copy or Update ramdisk to floppy',0
|
|
||||||
h2: db 'Settings',0
|
|
||||||
setwrite: db ' Write directly to floppy',0
|
|
||||||
setread: db ' Read directly from floppy',0
|
|
||||||
xsign: db 'X',0
|
|
||||||
I_END:
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,161 +0,0 @@
|
|||||||
;
|
|
||||||
; Save Ramdisk to HD
|
|
||||||
;
|
|
||||||
; Compile with FASM for Menuet
|
|
||||||
;
|
|
||||||
|
|
||||||
include 'lang.inc'
|
|
||||||
include 'macros.inc'
|
|
||||||
|
|
||||||
use32
|
|
||||||
org 0x0
|
|
||||||
|
|
||||||
db 'MENUET01' ; 8 byte id
|
|
||||||
dd 0x01 ; header version
|
|
||||||
dd START ; start of code
|
|
||||||
dd I_END ; size of image
|
|
||||||
dd 0x1000 ; memory for app
|
|
||||||
dd 0x1000 ; esp
|
|
||||||
dd 0x0 ; , 0x0 ; I_Param , I_Icon
|
|
||||||
|
|
||||||
|
|
||||||
;******************************************************************************
|
|
||||||
|
|
||||||
|
|
||||||
START: ; start of execution
|
|
||||||
xor eax,eax
|
|
||||||
mov edi,bootpath
|
|
||||||
mov ecx,128
|
|
||||||
rep stosd
|
|
||||||
|
|
||||||
mcall 6,filename,0,-1,bootpath
|
|
||||||
|
|
||||||
mov esi,bootpath+1
|
|
||||||
mov cx,512
|
|
||||||
start_search:
|
|
||||||
lodsb
|
|
||||||
cmp al,"'"
|
|
||||||
jz set_end_path
|
|
||||||
dec cx
|
|
||||||
cmp cx,0
|
|
||||||
ja start_search
|
|
||||||
set_end_path:
|
|
||||||
mov [esi-1],byte 0
|
|
||||||
|
|
||||||
mov eax,40
|
|
||||||
mov ebx,101b
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
red:
|
|
||||||
call draw_window
|
|
||||||
|
|
||||||
still:
|
|
||||||
mov eax, 10 ; wait here for event
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
dec eax ; redraw request ?
|
|
||||||
je red
|
|
||||||
; dec eax
|
|
||||||
; dec eax ; button in buffer ?
|
|
||||||
; je button
|
|
||||||
|
|
||||||
|
|
||||||
button: ; button
|
|
||||||
mov eax,17 ; get id
|
|
||||||
int 0x40
|
|
||||||
cmp ah,2
|
|
||||||
jne ah_3
|
|
||||||
mcall 18,6,1
|
|
||||||
jmp red
|
|
||||||
ah_3:
|
|
||||||
cmp ah,3
|
|
||||||
jne ah_4
|
|
||||||
mcall 18,6,2
|
|
||||||
jmp red
|
|
||||||
ah_4:
|
|
||||||
cmp ah,4
|
|
||||||
jne ah_1
|
|
||||||
mcall 18,6,3,bootpath+1
|
|
||||||
jmp red
|
|
||||||
ah_1:
|
|
||||||
cmp ah,1
|
|
||||||
je exit
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
exit:
|
|
||||||
or eax,-1 ; close this program
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
|
|
||||||
; *********************************************
|
|
||||||
; ******* WINDOW DEFINITIONS AND DRAW ********
|
|
||||||
; *********************************************
|
|
||||||
|
|
||||||
draw_window:
|
|
||||||
|
|
||||||
mov eax, 12 ; function 12:tell os about windowdraw
|
|
||||||
mov ebx, 1 ; 1, start of draw
|
|
||||||
int 0x40
|
|
||||||
; DRAW WINDOW
|
|
||||||
mov eax, 0 ; function 0 : define and draw window
|
|
||||||
mov ebx, 200*65536+220 ; [x start] *65536 + [x size]
|
|
||||||
mov ecx, 200*65536+150 ; [y start] *65536 + [y size]
|
|
||||||
mov edx, 0x03ccddee ; color of work area RRGGBB,8->color gl
|
|
||||||
int 0x40
|
|
||||||
; WINDOW LABEL
|
|
||||||
mov eax, 4 ; function 4 : write text to window
|
|
||||||
mov ebx, 8*65536+8 ; [x start] *65536 + [y start]
|
|
||||||
mov ecx, 0x10ffffff ; font 1 & color ( 0xF0RRGGBB )
|
|
||||||
mov edx, header ; pointer to text beginning
|
|
||||||
mov esi, header.size ; text length
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
xor edx,edx
|
|
||||||
mcall 13,<15,20>,<30,20>
|
|
||||||
mcall 13, ,<60,20>
|
|
||||||
mcall 13, ,<90,20>
|
|
||||||
|
|
||||||
mcall 8,<16,17>,<31,17>,2,0xdd7700
|
|
||||||
inc edx
|
|
||||||
mcall 8, ,<61,17>, ,0xbb00
|
|
||||||
inc edx
|
|
||||||
mcall 8, ,<91,17>, ,0xcc5555
|
|
||||||
|
|
||||||
mcall 4,<22,36>,0x10ffffff,text_123,1
|
|
||||||
add bx,30
|
|
||||||
add edx,1
|
|
||||||
mcall 4
|
|
||||||
add bx,30
|
|
||||||
add edx,1
|
|
||||||
mcall 4
|
|
||||||
|
|
||||||
mcall 4,<45,36>,0,text_1,text_1.size
|
|
||||||
add bx,30
|
|
||||||
mcall 4, ,0,text_2,text_2.size
|
|
||||||
add bx,30
|
|
||||||
mcall 4, ,0,text_3,text_3.size
|
|
||||||
mcall 4,<20,120>,0,text_4,text_4.size
|
|
||||||
mcall 4,<40,130>,0,text_5,text_5.size
|
|
||||||
|
|
||||||
mcall 4,<40,46>,0,text_6,text_6.size
|
|
||||||
mcall 4,<40,106>,0,text_6,text_6.size
|
|
||||||
|
|
||||||
mov eax,12 ; function 12:tell os about windowdraw
|
|
||||||
mov ebx,2 ; 2, end of draw
|
|
||||||
int 0x40
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sz header, "RD2HD á®åà ¨âì IMG>HD"
|
|
||||||
text_123 db '123'
|
|
||||||
sz text_1, '‚ ¯ ¯ªã /KOLIBRI'
|
|
||||||
sz text_2, '‚ ª®à¥ì ¤¨áª '
|
|
||||||
sz text_3, '<27>ãâì ¢ ä ©«¥ RD2HD.TXT'
|
|
||||||
sz text_4, '¯.3 ¤«ï १¥à¢®£® á®åà ¥¨ï,'
|
|
||||||
sz text_5, 'â.ª. ¢ ï¤à¥ ¥£® ¥â.'
|
|
||||||
sz text_6, '(¯ ¯ª ¤®«¦ ¯à¨áãâá⢮¢ âì)'
|
|
||||||
filename db 'RD2HD TXT'
|
|
||||||
I_END:
|
|
||||||
bootpath:
|
|
@ -48,6 +48,7 @@ vrr_00:
|
|||||||
mov eax,[currvm]
|
mov eax,[currvm]
|
||||||
mov [oldvm],eax
|
mov [oldvm],eax
|
||||||
call get_pid
|
call get_pid
|
||||||
|
red:
|
||||||
call draw_window ; at first, draw the window
|
call draw_window ; at first, draw the window
|
||||||
|
|
||||||
still:
|
still:
|
||||||
@ -64,12 +65,8 @@ still:
|
|||||||
call get_pid
|
call get_pid
|
||||||
jmp still
|
jmp still
|
||||||
|
|
||||||
red: ; redraw
|
|
||||||
call draw_window
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
key: ; key
|
key: ; key
|
||||||
mov eax,2 ; just read it
|
mov al,2 ; just read it
|
||||||
int 0x40
|
int 0x40
|
||||||
cmp ah,'1'
|
cmp ah,'1'
|
||||||
jne key_loc_00
|
jne key_loc_00
|
||||||
@ -143,7 +140,7 @@ key_loc_07:
|
|||||||
jmp red
|
jmp red
|
||||||
|
|
||||||
button: ; button
|
button: ; button
|
||||||
mov eax,17 ; get id
|
mov al,17 ; get id
|
||||||
int 0x40
|
int 0x40
|
||||||
|
|
||||||
cmp ah,1 ; button id=1 ?
|
cmp ah,1 ; button id=1 ?
|
||||||
@ -203,29 +200,17 @@ dw_continue:
|
|||||||
mov eax,0 ; function 0 : define and draw window
|
mov eax,0 ; function 0 : define and draw window
|
||||||
mov ebx,100*65536+400 ; [x start] *65536 + [x size]
|
mov ebx,100*65536+400 ; [x start] *65536 + [x size]
|
||||||
mov ecx,100*65536+200 ; [y start] *65536 + [y size]
|
mov ecx,100*65536+200 ; [y start] *65536 + [y size]
|
||||||
mov edx,0x020020C0;0x00000040 ; color of work area RRGGBB,8->color glide
|
mov edx,0x130020C0;0x00000040 ; color of work area RRGGBB,8->color glide
|
||||||
mov esi,0x805080d0 ; color of grab bar RRGGBB,8->color glide
|
mov edi,header
|
||||||
mov edi,0x00ffffff ; color of frames RRGGBB
|
|
||||||
int 0x40
|
|
||||||
|
|
||||||
; WINDOW LABEL
|
|
||||||
call print_my_title
|
|
||||||
|
|
||||||
; CLOSE BUTTON
|
|
||||||
mov eax,8 ; function 8 : define and draw button
|
|
||||||
mov ebx,(400-19)*65536+12 ; [x start] *65536 + [x size]
|
|
||||||
mov ecx,5*65536+12 ; [y start] *65536 + [y size]
|
|
||||||
mov edx,1 ; button id
|
|
||||||
mov esi,0x5599cc ; button color RRGGBB
|
|
||||||
int 0x40
|
int 0x40
|
||||||
|
|
||||||
; BUTTONS
|
; BUTTONS
|
||||||
xor eax,eax
|
mov eax,8
|
||||||
mov edx,eax
|
mov edx,0
|
||||||
mov al,8
|
|
||||||
mov ebx,330*65536+20
|
mov ebx,330*65536+20
|
||||||
mov ecx,84*65536+48
|
mov ecx,84*65536+48
|
||||||
mov dl,2
|
mov dl,2
|
||||||
|
mov esi,0x5599cc ; button color RRGGBB
|
||||||
int 40h ; Button '+'Width
|
int 40h ; Button '+'Width
|
||||||
add ebx,30*65536
|
add ebx,30*65536
|
||||||
mov dl,3
|
mov dl,3
|
||||||
@ -849,31 +834,6 @@ rs_loc_01:
|
|||||||
rs_loc_00:
|
rs_loc_00:
|
||||||
retn
|
retn
|
||||||
|
|
||||||
print_my_title:
|
|
||||||
pusha
|
|
||||||
xor eax,eax
|
|
||||||
mov ecx,eax
|
|
||||||
mov cl,labellen-labelt
|
|
||||||
mov al,4
|
|
||||||
mov edx,labelt
|
|
||||||
mov ebx,8*65536+8
|
|
||||||
mov edi,00ff0000h
|
|
||||||
xor esi,esi
|
|
||||||
inc esi
|
|
||||||
pmt_loc_00:
|
|
||||||
push ecx
|
|
||||||
mov ecx,edi
|
|
||||||
int 40h
|
|
||||||
inc edx
|
|
||||||
sub edi,4*65536
|
|
||||||
add edi,4*256
|
|
||||||
add ebx,6*65536
|
|
||||||
pop ecx
|
|
||||||
loop pmt_loc_00
|
|
||||||
popa
|
|
||||||
retn
|
|
||||||
|
|
||||||
|
|
||||||
draw_face:
|
draw_face:
|
||||||
call draw_table
|
call draw_table
|
||||||
;
|
;
|
||||||
@ -968,8 +928,7 @@ warning_window:
|
|||||||
mov ebx,1 ; 1, start of draw
|
mov ebx,1 ; 1, start of draw
|
||||||
int 0x40
|
int 0x40
|
||||||
; DRAW WARNING WINDOW
|
; DRAW WARNING WINDOW
|
||||||
mov eax,0 ; function 0 : define and draw window
|
xor eax,eax ; function 0 : define and draw window
|
||||||
; mov ebx,100*65536+400 ; [x start] *65536 + [x size]
|
|
||||||
mov ebx,[oldX]
|
mov ebx,[oldX]
|
||||||
shr ebx,1
|
shr ebx,1
|
||||||
sub ebx,200
|
sub ebx,200
|
||||||
@ -981,19 +940,10 @@ warning_window:
|
|||||||
sub ecx,100
|
sub ecx,100
|
||||||
shl ecx,16
|
shl ecx,16
|
||||||
mov cx,200
|
mov cx,200
|
||||||
mov edx,0x02808080 ; color of work area RRGGBB,8->color glide
|
mov edx,0x13808080 ; color of work area RRGGBB,8->color glide
|
||||||
mov esi,0x40300010 ; color of grab bar RRGGBB,8->color glide
|
mov edi,header
|
||||||
mov edi,0x00ff0000 ; color of frames RRGGBB
|
|
||||||
int 0x40
|
|
||||||
; WARNING WINDOW LABEL
|
|
||||||
call print_my_title
|
|
||||||
; CLOSE BUTTON
|
|
||||||
mov eax,8 ; function 8 : define and draw button
|
|
||||||
mov ebx,(200-36)*65536+72 ; [x start] *65536 + [x size]
|
|
||||||
mov ecx,(160-9)*65536+18 ; [y start] *65536 + [y size]
|
|
||||||
mov edx,1 ; button id
|
|
||||||
mov esi,0x00800010 ; button color RRGGBB
|
|
||||||
int 0x40
|
int 0x40
|
||||||
|
|
||||||
; WARNING TEXT
|
; WARNING TEXT
|
||||||
mov eax,4 ; function 4 : write text to window
|
mov eax,4 ; function 4 : write text to window
|
||||||
mov ebx,(200-(len_warn00/2)*6)*65536+60 ; [x start] *65536 + [y
|
mov ebx,(200-(len_warn00/2)*6)*65536+60 ; [x start] *65536 + [y
|
||||||
@ -1095,9 +1045,7 @@ blinkcol dd 0ffh
|
|||||||
;_m3 dw 0,0,0,0,0
|
;_m3 dw 0,0,0,0,0
|
||||||
;_m4 dw 0,0,0,0,0
|
;_m4 dw 0,0,0,0,0
|
||||||
|
|
||||||
labelt:
|
header db 'Vertical Refresh Rate v2.0 (C) 2003 TRANS',0
|
||||||
db 'Vertical Refresh Rate, ver.2.0, Copileft 2003 ;) TRANS'
|
|
||||||
labellen:
|
|
||||||
|
|
||||||
_m1280x1024 db '1280x1024'
|
_m1280x1024 db '1280x1024'
|
||||||
_m1024x768 db '1024x768 '
|
_m1024x768 db '1024x768 '
|
||||||
|
Loading…
Reference in New Issue
Block a user