forked from KolibriOS/kolibrios
kiv: simple libimg-based viewer
git-svn-id: svn://kolibrios.org@1004 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
5907e5759e
commit
c526abcf3e
93
programs/media/kiv/trunk/dll.inc
Normal file
93
programs/media/kiv/trunk/dll.inc
Normal file
@ -0,0 +1,93 @@
|
||||
|
||||
proc dll.Load, import_table:dword
|
||||
mov esi,[import_table]
|
||||
.next_lib: mov edx,[esi]
|
||||
or edx,edx
|
||||
jz .exit
|
||||
push esi
|
||||
mov esi,[esi+4]
|
||||
mov edi,s_libdir.fname
|
||||
@@: lodsb
|
||||
stosb
|
||||
or al,al
|
||||
jnz @b
|
||||
mcall 68,19,s_libdir
|
||||
or eax,eax
|
||||
jz .fail
|
||||
stdcall dll.Link,eax,edx
|
||||
stdcall dll.Init,[eax+4]
|
||||
pop esi
|
||||
add esi,8
|
||||
jmp .next_lib
|
||||
.exit: xor eax,eax
|
||||
ret
|
||||
.fail: add esp,4
|
||||
xor eax,eax
|
||||
inc eax
|
||||
ret
|
||||
endp
|
||||
|
||||
proc dll.Link, exp:dword,imp:dword
|
||||
push eax
|
||||
mov esi,[imp]
|
||||
test esi,esi
|
||||
jz .done
|
||||
.next: lodsd
|
||||
test eax,eax
|
||||
jz .done
|
||||
stdcall dll.GetProcAddress,[exp],eax
|
||||
or eax,eax
|
||||
jz @f
|
||||
mov [esi-4],eax
|
||||
jmp .next
|
||||
@@: mov dword[esp],0
|
||||
.done: pop eax
|
||||
ret
|
||||
endp
|
||||
|
||||
proc dll.Init, dllentry:dword
|
||||
pushad
|
||||
mov eax,mem.Alloc
|
||||
mov ebx,mem.Free
|
||||
mov ecx,mem.ReAlloc
|
||||
mov edx,dll.Load
|
||||
stdcall [dllentry]
|
||||
popad
|
||||
ret
|
||||
endp
|
||||
|
||||
proc dll.GetProcAddress, exp:dword,sz_name:dword
|
||||
mov edx,[exp]
|
||||
xor eax,eax
|
||||
.next: or edx,edx
|
||||
jz .end
|
||||
cmp dword[edx],0
|
||||
jz .end
|
||||
stdcall strcmp,[edx],[sz_name]
|
||||
test eax,eax
|
||||
jz .ok
|
||||
add edx,8
|
||||
jmp .next
|
||||
.ok: mov eax,[edx+4]
|
||||
.end: ret
|
||||
endp
|
||||
|
||||
proc strcmp, str1:dword,str2:dword
|
||||
push esi edi
|
||||
mov esi,[str1]
|
||||
mov edi,[str2]
|
||||
xor eax,eax
|
||||
@@: lodsb
|
||||
scasb
|
||||
jne .fail
|
||||
or al,al
|
||||
jnz @b
|
||||
jmp .ok
|
||||
.fail: or eax,-1
|
||||
.ok: pop edi esi
|
||||
ret
|
||||
endp
|
||||
|
||||
s_libdir:
|
||||
db '/sys/lib/'
|
||||
.fname rb 32
|
BIN
programs/media/kiv/trunk/fliphorz.bmp
Normal file
BIN
programs/media/kiv/trunk/fliphorz.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 358 B |
BIN
programs/media/kiv/trunk/flipvert.bmp
Normal file
BIN
programs/media/kiv/trunk/flipvert.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 358 B |
663
programs/media/kiv/trunk/kiv.asm
Normal file
663
programs/media/kiv/trunk/kiv.asm
Normal file
@ -0,0 +1,663 @@
|
||||
use32
|
||||
org 0x0
|
||||
|
||||
db 'MENUET01'
|
||||
dd 0x01, START, I_END, 0x4000, 0x4000, @PARAMS, 0x0
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
|
||||
FALSE = 0
|
||||
TRUE = 1
|
||||
|
||||
include '../../../../../proc32.inc'
|
||||
include '../../../../../macros.inc'
|
||||
include 'dll.inc'
|
||||
|
||||
include '../../../develop/libraries/libs-dev/libio/libio.inc'
|
||||
include '../../../develop/libraries/libs-dev/libimg/libimg.inc'
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
|
||||
START:
|
||||
mcall 68, 11
|
||||
|
||||
stdcall dll.Load, @IMPORT
|
||||
or eax, eax
|
||||
jnz exit
|
||||
|
||||
mov ecx, 1 ; for 15.4: 1 = tile
|
||||
cmp word [@PARAMS], '\T'
|
||||
jz set_bgr
|
||||
inc ecx ; for 15.4: 2 = stretch
|
||||
cmp word [@PARAMS], '\S'
|
||||
jz set_bgr
|
||||
|
||||
cmp byte [@PARAMS], 0
|
||||
jnz params_given
|
||||
|
||||
call opendialog
|
||||
jc exit
|
||||
mov esi, path
|
||||
mov edi, @PARAMS
|
||||
mov ecx, 512/4
|
||||
rep movsd
|
||||
mov byte [edi-1], 0
|
||||
jmp params_given
|
||||
|
||||
set_bgr:
|
||||
mcall 15, 4
|
||||
mov eax, @PARAMS + 4
|
||||
call load_image
|
||||
jc exit_bgr
|
||||
|
||||
mov esi, [image]
|
||||
mov ecx, [esi + Image.Width]
|
||||
mov edx, [esi + Image.Height]
|
||||
mcall 15, 1
|
||||
|
||||
mcall 15, 6
|
||||
test eax, eax
|
||||
jz exit_bgr
|
||||
|
||||
push eax
|
||||
invoke img.to_rgb2, esi, eax
|
||||
pop ecx
|
||||
mcall 15, 7
|
||||
|
||||
exit_bgr:
|
||||
mcall 15, 3
|
||||
jmp exit
|
||||
|
||||
params_given:
|
||||
|
||||
mov eax, @PARAMS
|
||||
call load_image
|
||||
jc exit
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
|
||||
red:
|
||||
call draw_window
|
||||
|
||||
still:
|
||||
mcall 10
|
||||
dec eax
|
||||
jz red
|
||||
dec eax
|
||||
jnz button
|
||||
|
||||
key:
|
||||
mcall 2
|
||||
jmp still
|
||||
|
||||
button:
|
||||
mcall 17
|
||||
shr eax, 8
|
||||
|
||||
; flip horizontally
|
||||
cmp eax, 'flh'
|
||||
jne @f
|
||||
|
||||
invoke img.flip, [image], FLIP_HORIZONTAL
|
||||
jmp redraw_image
|
||||
|
||||
; flip vertically
|
||||
@@: cmp eax, 'flv'
|
||||
jne @f
|
||||
|
||||
invoke img.flip, [image], FLIP_VERTICAL
|
||||
jmp redraw_image
|
||||
|
||||
; flip both horizontally and vertically
|
||||
@@: cmp eax, 'flb'
|
||||
jne @f
|
||||
|
||||
invoke img.flip, [image], FLIP_BOTH
|
||||
jmp redraw_image
|
||||
|
||||
; rotate left
|
||||
@@: cmp eax, 'rtl'
|
||||
jne @f
|
||||
|
||||
push ROTATE_90_CCW
|
||||
.rotate_common:
|
||||
invoke img.rotate, [image]
|
||||
mov eax, [image]
|
||||
test eax, eax ; clear ZF flag
|
||||
call update_image_sizes
|
||||
jmp redraw_image
|
||||
|
||||
; rotate right
|
||||
@@: cmp eax, 'rtr'
|
||||
jne @f
|
||||
|
||||
push ROTATE_90_CW
|
||||
jmp .rotate_common
|
||||
|
||||
; open new file
|
||||
@@: cmp eax, 'opn'
|
||||
jne @f
|
||||
|
||||
call opendialog
|
||||
jc still
|
||||
push [image]
|
||||
mov eax, path
|
||||
call load_image
|
||||
jc .restore_old
|
||||
mov esi, path
|
||||
mov edi, @PARAMS
|
||||
mov ecx, 512/4
|
||||
rep movsd
|
||||
invoke img.destroy
|
||||
mov byte [edi-1], 0
|
||||
jmp red
|
||||
.restore_old:
|
||||
pop [image]
|
||||
jmp still
|
||||
|
||||
@@: cmp eax, 1
|
||||
jne still
|
||||
|
||||
exit:
|
||||
mcall -1
|
||||
|
||||
redraw_image = red
|
||||
|
||||
load_image:
|
||||
and [img_data], 0
|
||||
push eax
|
||||
invoke file.open, eax, O_READ
|
||||
or eax, eax
|
||||
jz .error_pop
|
||||
mov [fh], eax
|
||||
invoke file.size
|
||||
mov [img_data_len], ebx
|
||||
stdcall mem.Alloc, ebx
|
||||
test eax, eax
|
||||
jz .error_close
|
||||
mov [img_data], eax
|
||||
invoke file.read, [fh], eax, [img_data_len]
|
||||
cmp eax, -1
|
||||
jz .error_close
|
||||
cmp eax, [img_data_len]
|
||||
jnz .error_close
|
||||
invoke file.close, [fh]
|
||||
inc eax
|
||||
jz .error
|
||||
|
||||
; img.decode checks for img.is_img
|
||||
; invoke img.is_img, [img_data], [img_data_len]
|
||||
; or eax, eax
|
||||
; jz exit
|
||||
invoke img.decode, [img_data], [img_data_len]
|
||||
or eax, eax
|
||||
jz .error
|
||||
cmp [image], 0
|
||||
mov [image], eax
|
||||
call update_image_sizes
|
||||
call free_img_data
|
||||
clc
|
||||
ret
|
||||
|
||||
.error_free:
|
||||
invoke img.destroy, [image]
|
||||
jmp .error
|
||||
|
||||
.error_pop:
|
||||
pop eax
|
||||
jmp .error
|
||||
.error_close:
|
||||
invoke file.close, [fh]
|
||||
.error:
|
||||
call free_img_data
|
||||
stc
|
||||
ret
|
||||
|
||||
free_img_data:
|
||||
mov eax, [img_data]
|
||||
test eax, eax
|
||||
jz @f
|
||||
stdcall mem.Free, eax
|
||||
@@:
|
||||
ret
|
||||
|
||||
update_image_sizes:
|
||||
pushf
|
||||
mov edx, [eax + Image.Width]
|
||||
add edx, 19
|
||||
cmp edx, 50 + 25*5
|
||||
jae @f
|
||||
mov edx, 50 + 25*5
|
||||
@@:
|
||||
mov [wnd_width], edx
|
||||
mov esi, [eax + Image.Height]
|
||||
add esi, 44
|
||||
mov [wnd_height], esi
|
||||
popf
|
||||
jz .no_resize
|
||||
mcall 48, 4
|
||||
add esi, eax
|
||||
mcall 67,-1,-1
|
||||
.no_resize:
|
||||
ret
|
||||
|
||||
draw_window:
|
||||
invoke gfx.open, TRUE
|
||||
mov [ctx], eax
|
||||
|
||||
mcall 48, 4
|
||||
mov ebp, eax ; save skin height
|
||||
add eax, [wnd_height]
|
||||
__mov ebx, 100, 0
|
||||
add ebx, [wnd_width]
|
||||
lea ecx, [100*65536 + eax]
|
||||
mcall 0, , , 0x73FFFFFF, , s_header
|
||||
|
||||
mcall 9, procinfo, -1
|
||||
|
||||
mov ebx, [procinfo + 42]
|
||||
sub ebx, 9
|
||||
mcall 13, , <0, 35>, 0xFFFFFF
|
||||
mov ecx, [procinfo + 46]
|
||||
sub ecx, ebp
|
||||
sub ecx, 9
|
||||
shl ecx, 16
|
||||
mov cl, 5
|
||||
mcall
|
||||
mov cl, 35
|
||||
ror ecx, 16
|
||||
sub cx, 35
|
||||
mov ebx, 5
|
||||
mcall
|
||||
; 5 pixels for indentation, [image.Width] pixels for image
|
||||
; client_width - 5 - [image.Width] pixels must be white
|
||||
mov ebx, [image]
|
||||
mov esi, [procinfo + 62]
|
||||
inc esi
|
||||
push esi
|
||||
mov ebx, [ebx + Image.Width]
|
||||
sub esi, 5
|
||||
sub esi, ebx
|
||||
pop ebx
|
||||
sub ebx, esi
|
||||
shl ebx, 16
|
||||
add ebx, esi
|
||||
mcall
|
||||
|
||||
invoke gfx.pen.color, [ctx], 0x007F7F7F
|
||||
mov eax, [procinfo + 42]
|
||||
sub eax, 10
|
||||
invoke gfx.line, [ctx], 0, 30, eax, 30
|
||||
|
||||
xor ebp, ebp
|
||||
|
||||
mcall 8, <5 + 25 * 0, 20>, <5, 20>, 'opn'+40000000h
|
||||
mcall 65, openbtn, <20, 20>, <5 + 25 * 0, 5>, 4, palette
|
||||
|
||||
invoke gfx.line, [ctx], 5 + 25 * 1, 0, 5 + 25 * 1, 30
|
||||
|
||||
mcall 8, <10 + 25 * 1, 20>, <5, 20>, 'flh'+40000000h
|
||||
mcall 65, fliphorzbtn, <20, 20>, <10 + 25 * 1, 5>, 4, palette
|
||||
mcall 8, <10 + 25 * 2, 20>, <5, 20>, 'flv'+40000000h
|
||||
mcall 65, flipvertbtn, <20, 20>, <10 + 25 * 2, 5>, 4, palette
|
||||
|
||||
invoke gfx.line, [ctx], 10 + 25 * 3, 0, 10 + 25 * 3, 30
|
||||
|
||||
mcall 8, <15 + 25 * 3, 20>, <5, 20>, 'rtr'+40000000h
|
||||
mcall 65, rotcwbtn, <20, 20>, <15 + 25 * 3, 5>, 4, palette
|
||||
mcall 8, <15 + 25 * 4, 20>, <5, 20>, 'rtl'+40000000h
|
||||
mcall 65, rotccwbtn, <20, 20>, <15 + 25 * 4, 5>, 4, palette
|
||||
mcall 8, <15 + 25 * 5, 20>, <5, 20>, 'flb'+40000000h
|
||||
mcall 65, rot180btn, <20, 20>, <15 + 25 * 5, 5>, 4, palette
|
||||
|
||||
mov ebx, [image]
|
||||
mov ecx, [ebx + Image.Width]
|
||||
shl ecx, 16
|
||||
add ecx, [ebx + Image.Height]
|
||||
__mov edx, 5, 35
|
||||
mov esi, 8
|
||||
cmp [ebx + Image.Type], Image.bpp8
|
||||
jz @f
|
||||
mov esi, 24
|
||||
cmp [ebx + Image.Type], Image.bpp24
|
||||
jz @f
|
||||
mov esi, 32
|
||||
@@:
|
||||
mov edi, [ebx + Image.Palette]
|
||||
mov ebx, [ebx + Image.Data]
|
||||
xor ebp, ebp
|
||||
mcall 65
|
||||
|
||||
invoke gfx.close, [ctx]
|
||||
ret
|
||||
|
||||
; void* __stdcall mem.Alloc(unsigned size);
|
||||
mem.Alloc:
|
||||
push ebx ecx
|
||||
mov ecx, [esp+12]
|
||||
mcall 68, 12
|
||||
pop ecx ebx
|
||||
ret 4
|
||||
|
||||
; void* __stdcall mem.ReAlloc(void* mptr, unsigned size);
|
||||
mem.ReAlloc:
|
||||
push ebx ecx edx
|
||||
mov edx, [esp+16]
|
||||
mov ecx, [esp+20]
|
||||
mcall 68, 20
|
||||
pop edx ecx ebx
|
||||
ret 8
|
||||
|
||||
; void __stdcall mem.Free(void* mptr);
|
||||
mem.Free:
|
||||
push ebx ecx
|
||||
mov ecx, [esp+12]
|
||||
mcall 68, 13
|
||||
pop ecx ebx
|
||||
ret 4
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
|
||||
s_header db 'Kolibri Image Viewer', 0
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
|
||||
opendialog:
|
||||
;
|
||||
; STEP 1 Run SYSXTREE with parametrs MYPID 4 bytes in dec,
|
||||
; 1 byte space, 1 byte type of dialog (O - Open ,S - Save)
|
||||
;
|
||||
|
||||
;; mov esi,path
|
||||
mov edi,path
|
||||
xor eax,eax
|
||||
mov ecx,(1024+16)/4
|
||||
rep stosd
|
||||
|
||||
;mov [get_loops],0
|
||||
mov [dlg_pid_get],0
|
||||
|
||||
; Get my PID in dec format 4 bytes
|
||||
mov eax,9
|
||||
mov ebx,procinfo
|
||||
or ecx,-1
|
||||
mcall
|
||||
|
||||
; 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
|
||||
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,1024+16 ; size
|
||||
mcall
|
||||
|
||||
; change wanted events list 7-bit IPC event
|
||||
mov eax,40
|
||||
mov ebx,01000111b
|
||||
cmp [image], 0
|
||||
jnz @f
|
||||
mov bl, 01000110b
|
||||
@@:
|
||||
mcall
|
||||
|
||||
;
|
||||
; STEP 3 run SYSTEM XTREE with parameters
|
||||
;
|
||||
|
||||
mov eax,70
|
||||
mov ebx,run_fileinfo
|
||||
mcall
|
||||
|
||||
mov [get_loops],0
|
||||
getmesloop:
|
||||
mov eax,23
|
||||
mov ebx,50 ;0.5 sec
|
||||
mcall
|
||||
dec eax
|
||||
jz mred
|
||||
dec eax
|
||||
jz mkey
|
||||
dec eax
|
||||
jz mbutton
|
||||
cmp al, 7-3
|
||||
jz mgetmes
|
||||
|
||||
; Get number of procces
|
||||
mov ebx,procinfo
|
||||
mov ecx,-1
|
||||
mov eax,9
|
||||
mcall
|
||||
mov ebp,eax
|
||||
|
||||
loox:
|
||||
mov eax,9
|
||||
mov ebx,procinfo
|
||||
mov ecx,ebp
|
||||
mcall
|
||||
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:
|
||||
cmp [image], 0
|
||||
jz getmesloop
|
||||
call draw_window
|
||||
jmp getmesloop
|
||||
mkey:
|
||||
mov eax,2
|
||||
mcall ; read (eax=2)
|
||||
jmp getmesloop
|
||||
mbutton:
|
||||
mov eax,17 ; get id
|
||||
mcall
|
||||
cmp ah,1 ; button id=1 ?
|
||||
jne getmesloop
|
||||
mov eax,-1 ; close this program
|
||||
mcall
|
||||
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
|
||||
cmp [image], 0
|
||||
jz getmesloop
|
||||
call draw_window
|
||||
jmp getmesloop
|
||||
|
||||
ready:
|
||||
;
|
||||
; The second message get
|
||||
; Second message is 100 bytes path to SAVE/OPEN file
|
||||
; shl path string on 16 bytes
|
||||
;
|
||||
mov esi,path+16
|
||||
mov edi,path
|
||||
mov ecx,1024/4
|
||||
rep movsd
|
||||
mov [edi],byte 0
|
||||
|
||||
openoff:
|
||||
mcall 40, 7
|
||||
clc
|
||||
ret
|
||||
|
||||
erroff:
|
||||
mcall 40, 7
|
||||
stc
|
||||
ret
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
|
||||
align 4
|
||||
@IMPORT:
|
||||
|
||||
library \
|
||||
libio , 'libio.obj' , \
|
||||
libgfx , 'libgfx.obj' , \
|
||||
libimg , 'libimg.obj'
|
||||
|
||||
import libio , \
|
||||
libio.init , 'lib_init' , \
|
||||
file.size , 'file.size' , \
|
||||
file.open , 'file.open' , \
|
||||
file.read , 'file.read' , \
|
||||
file.close , 'file.close'
|
||||
|
||||
import libgfx , \
|
||||
libgfx.init , 'lib_init' , \
|
||||
gfx.open , 'gfx.open' , \
|
||||
gfx.close , 'gfx.close' , \
|
||||
gfx.pen.color , 'gfx.pen.color' , \
|
||||
gfx.line , 'gfx.line'
|
||||
|
||||
import libimg , \
|
||||
libimg.init , 'lib_init' , \
|
||||
img.is_img , 'img.is_img' , \
|
||||
img.to_rgb2 , 'img.to_rgb2', \
|
||||
img.decode , 'img.decode' , \
|
||||
img.flip , 'img.flip' , \
|
||||
img.rotate , 'img.rotate' , \
|
||||
img.destroy , 'img.destroy'
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
|
||||
palette:
|
||||
dd 0x000000, 0x800000, 0x008000, 0x808000
|
||||
dd 0x000080, 0x800080, 0x008080, 0x808080
|
||||
dd 0xC0C0C0, 0xFF0000, 0x00FF00, 0xFFFF00
|
||||
dd 0x0000FF, 0xFF00FF, 0x00FFFF, 0xFFFFFF
|
||||
|
||||
macro loadbtn filename
|
||||
{
|
||||
repeat 20
|
||||
file filename:76h+(%-1)*12,10
|
||||
end repeat
|
||||
repeat 10
|
||||
y = % - 1
|
||||
z = 20 - %
|
||||
repeat 10
|
||||
load a byte from $ - 20*10 + y*10 + (%-1)
|
||||
load b byte from $ - 20*10 + z*10 + (%-1)
|
||||
store byte a at $ - 20*10 + z*10 + (%-1)
|
||||
store byte b at $ - 20*10 + y*10 + (%-1)
|
||||
end repeat
|
||||
end repeat
|
||||
}
|
||||
|
||||
openbtn:
|
||||
loadbtn 'open.bmp'
|
||||
fliphorzbtn:
|
||||
loadbtn 'fliphorz.bmp'
|
||||
flipvertbtn:
|
||||
loadbtn 'flipvert.bmp'
|
||||
rotcwbtn:
|
||||
loadbtn 'rotcw.bmp'
|
||||
rotccwbtn:
|
||||
loadbtn 'rotccw.bmp'
|
||||
rot180btn:
|
||||
loadbtn 'rot180.bmp'
|
||||
|
||||
; 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 7
|
||||
dd 0
|
||||
dd param
|
||||
dd 0
|
||||
dd 0
|
||||
;run_filepath
|
||||
db '/sys/SYSXTREE',0
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
|
||||
I_END:
|
||||
|
||||
img_data dd ?
|
||||
img_data_len dd ?
|
||||
fh dd ?
|
||||
image dd ?
|
||||
wnd_width dd ?
|
||||
wnd_height dd ?
|
||||
|
||||
ctx dd ?
|
||||
|
||||
procinfo: rb 1024
|
||||
path: rb 1024+16
|
||||
|
||||
@PARAMS rb 512
|
BIN
programs/media/kiv/trunk/open.bmp
Normal file
BIN
programs/media/kiv/trunk/open.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 358 B |
BIN
programs/media/kiv/trunk/rot180.bmp
Normal file
BIN
programs/media/kiv/trunk/rot180.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 358 B |
BIN
programs/media/kiv/trunk/rotccw.bmp
Normal file
BIN
programs/media/kiv/trunk/rotccw.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 358 B |
BIN
programs/media/kiv/trunk/rotcw.bmp
Normal file
BIN
programs/media/kiv/trunk/rotcw.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 358 B |
Loading…
Reference in New Issue
Block a user