1)Added memory meneger.

2)Added log output to console in debug mode.
3)Added SDK for MSVC++.


git-svn-id: svn://kolibrios.org@1175 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
andrew_programmer 2009-09-24 21:19:56 +00:00
parent 698f06c417
commit 82495158d4
101 changed files with 0 additions and 31362 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,18 +0,0 @@
/*OUTPUT_FORMAT("binary")*/
ENTRY("start_")
SECTIONS
{
.text 0x000000:
{
*(.text)
}
.data : {
*(.data)
}
.bss :
{
*(.bss)
}
}

View File

@ -1,22 +0,0 @@
OUTFILE = interface.kex
INPUT = interface.c
OUTPUT = interface.o
OBJS = start.o interface.o
.SUFFIXES: .asm .o
$(OUTFILE) : $(OBJS)
fasm start.asm start.o
gcc -c $(INPUT) -nostdinc -I/home/andrew/kolibri/develop/include/
ld -nostdlib -T kolibri.ld -n -L/home/andrew/kolibri/develop/lib/ -o $(OUTFILE) $(OBJS) -lck -lm
objcopy $(OUTFILE) -O binary
.asm.o:
fasm $*.asm
.c.o:
gcc -c $*.c
clean :
del *.o

View File

@ -1,136 +0,0 @@
format MS COFF
section '.text' executable
public start_
;extrn mf_init
extrn main
;include 'debug2.inc'
__DEBUG__=0
start_:
;virtual at 0
db 'MENUET01' ; 1. Magic number (8 bytes)
dd 0x01 ; 2. Version of executable file
dd start ; 3. Start address
dd 0x0 ; 4. Size of image
dd 0x100000 ; 5. Size of needed memory
dd 0x100000 ; 6. Pointer to stack
hparams dd 0x0 ; 7. Pointer to program arguments
hpath dd 0x0 ; 8. Pointer to program path
;end virtual
start:
;DEBUGF 'Start programm\n'
;init heap of memory
mov eax,68
mov ebx,11
int 0x40
;DEBUGF ' path "%s"\n params "%s"\n', .path, .params
; check for overflow
mov al, [path+buf_len-1]
or al, [params+buf_len-1]
jnz .crash
; check if path written by OS
mov eax, [hparams]
test eax, eax
jz .without_path
mov eax, path
.without_path:
mov esi, eax
call push_param
; retrieving parameters
mov esi, params
xor edx, edx ; dl - èä¸ò ïàðàìåòð(1) èëè ðàçäåëèòåëè(0)
; dh - ñèìâîë ñ êîòîðîãî íà÷àëñÿ ïàðàìåòð (1 êàâû÷êè, 0 îñòàëüíîå)
mov ecx, 1 ; cl = 1
; ch = 0 ïðîñòî íîëü
.parse:
lodsb
test al, al
jz .run
test dl, dl
jnz .findendparam
;{åñëè áûë ðàçäåëèòåëü
cmp al, ' '
jz .parse ;çàãðóæåí ïðîáåë, ãðóçèì ñëåäóþùèé ñèìâîë
mov dl, cl ;íà÷èíàåòñÿ ïàðàìåòð
cmp al, '"'
jz @f ;çàãðóæåíû êàâû÷êè
mov dh, ch ;ïàðàìåòð áåç êàâû÷åê
dec esi
call push_param
inc esi
jmp .parse
@@:
mov dh, cl ;ïàðàìåòð â êàâû÷åêàõ
call push_param ;åñëè íå ïðîáåë çíà÷èò íà÷èíàåòñÿ êàêîé òî ïàðàìåòð
jmp .parse ;åñëè áûë ðàçäåëèòåëü}
.findendparam:
test dh, dh
jz @f ; áåç êàâû÷åê
cmp al, '"'
jz .clear
jmp .parse
@@:
cmp al, ' '
jnz .parse
.clear:
lea ebx, [esi - 1]
mov [ebx], ch
mov dl, ch
jmp .parse
.run:
;DEBUGF 'call main(%x, %x) with params:\n', [argc], argv
if __DEBUG__ = 1
mov ecx, [argc]
@@:
lea esi, [ecx * 4 + argv-4]
DEBUGF '0x%x) "%s"\n', cx, [esi]
loop @b
end if
push [argc]
push argv
call main
.exit:
;DEBUGF 'Exit from prog\n';
xor eax,eax
dec eax
int 0x40
dd -1
.crash:
;DEBUGF 'E:buffer overflowed\n'
jmp .exit
;============================
push_param:
;============================
;parameters
; esi - pointer
;description
; procedure increase argc
; and add pointer to array argv
; procedure changes ebx
mov ebx, [argc]
cmp ebx, max_parameters
jae .dont_add
mov [argv+4*ebx], esi
inc [argc]
.dont_add:
ret
;==============================
public params as '__argv'
public path as '__path'
section '.bss'
buf_len = 0x400
max_parameters=0x20
argc rd 1
argv rd max_parameters
path rb buf_len
params rb buf_len
;section '.data'
;include_debug_strings ; ALWAYS present in data section

View File

@ -1,47 +0,0 @@
_ksys_cofflib_getproc:
mov ebx,[esp+4]
next_name_check:
mov ecx,[ebx]
test ecx,ecx
jz end_export
;cmp export string with name
mov esi,[esp+8]
xor edi,edi
next_simbol_check:
xor eax,eax
mov al,[ecx]
test al,al
jz exit_check_simbol
xor edx,edx
mov dl,[esi]
cmp al,dl
je simbols_equvalent
add edi,1
jmp exit_check_simbol
simbols_equvalent:
add ecx,1
add esi,1
jmp next_simbol_check
exit_check_simbol:
test edi,edi
jnz function_not_finded
mov eax,[ebx+4]
jmp end_export
function_not_finded:
add ebx,8
jmp next_name_check
end_export:
ret 8

View File

@ -1,800 +0,0 @@
;
;
; This is example using GUI component Bookmark from libGUI.
;
;
include 'macros.inc'
use32
db 'MENUET01'
dd 1
dd start
dd i_end
dd 126*1024
dd 126*1024
dd 0
dd path
start:
;init hepe of memory
mcall 68,11
;set current dir as ./
call GetPath
;load dll
mcall 68,19,path
test eax,eax
jnz libGUI_loaded
mcall 68,19,sys_libGUI_path
test eax,eax
jnz libGUI_loaded
mcall -1
libGUI_loaded:
mov [myexport],eax
;load dll functions
push fnDestroyControl
push [myexport]
call _ksys_cofflib_getproc
mov [destroy_control],eax
push fnSendMessage
push [myexport]
call _ksys_cofflib_getproc
mov [send_message],eax
push fnResizeComponent
push [myexport]
call _ksys_cofflib_getproc
mov [resize_component],eax
push fnMoveComponent
push [myexport]
call _ksys_cofflib_getproc
mov [move_component],eax
push fnCraeteButton
push [myexport]
call _ksys_cofflib_getproc
mov [craete_button],eax
push fnCraeteScroller
push [myexport]
call _ksys_cofflib_getproc
mov [craete_scroller],eax
push fnCraeteBookmark
push [myexport]
call _ksys_cofflib_getproc
mov [craete_bookmark],eax
push fnCraeteImage
push [myexport]
call _ksys_cofflib_getproc
mov [craete_image],eax
push fnCraeteText
push [myexport]
call _ksys_cofflib_getproc
mov [craete_text],eax
push fnCraeteNumber
push [myexport]
call _ksys_cofflib_getproc
mov [craete_number],eax
push fnCraeteCheckbox
push [myexport]
call _ksys_cofflib_getproc
mov [craete_check_box],eax
push fnCraeteEditbox
push [myexport]
call _ksys_cofflib_getproc
mov [craete_edit_box],eax
;set events mask
mcall 40,1100111b
;get standart colors table
mcall 48,3,ColorsTable,40
;*********************************************
;****************Init Butttons****************
;*********************************************
mov ecx,[ColorsTable+8]
and ecx,0xffffff
mov [Button1.type],byte 10010001b
mov [Button1.x],120
mov [Button1.y],120
mov [Button1.width],word 70
mov [Button1.height],word 20
mov [Button1.color1],dword ecx
mov [Button1.color2],dword 0xffffff
mov [Button1.text],text1
mov [Button3.type],byte 10010001b
mov [Button3.x],165
mov [Button3.y],320
mov [Button3.width],word 70
mov [Button3.height],word 20
mov [Button3.color1],dword ecx
mov [Button3.color2],dword 0xffffff
mov [Button3.text],text3
push Button3
push Parend
call [craete_button]
mov [PointerToControlForButtonExit],eax
mov ecx,[ColorsTable+8]
and ecx,0xffffff
;********************************************
;***************Init scrollers****************
;********************************************
;init vertical scroller
mov ecx,[ColorsTable+8]
mov [VerticalScroller.type],byte 11110001b
mov [VerticalScroller.x],150
mov [VerticalScroller.y],10
mov [VerticalScroller.pos],0.2
mov [VerticalScroller.length],200
mov [VerticalScroller.size],0.3
mov [VerticalScroller.color1],ecx
;********************************************
;******************Init Image****************
;********************************************
mov [Image.type],byte 10000000b
mov [Image.x],30
mov [Image.y],10
mov [Image.sizex],200
mov [Image.sizey],200
mov [Image.pointer],Picture
;********************************************
;******************Init Text*****************
;********************************************
mov [Text.type],byte 10000000b
mov [Text.color],0xffffff
mov [Text.x],100
mov [Text.y],100
mov [Text.length],25
mov [Text.pointer],text_for_text
;********************************************
;*****************Init Number****************
;********************************************
mov [Number.type],byte 10000010b
mov [Number.color],0xffffff
mov [Number.x],150
mov [Number.y],100
mov [Number.parameters],5*65536+4
mov [Number.number],-1234.5678
;********************************************
;***************Init CheckBox****************
;********************************************
mov ecx,[ColorsTable+8]
and ecx,0xffffff
;mov [CheckBox.ch_flags],word 10b
mov [CheckBox.ch_left],150
mov [CheckBox.ch_top],330
mov [CheckBox.ch_text_margin],4
mov [CheckBox.ch_size],11
mov [CheckBox.ch_color],0xffffff
mov [CheckBox.ch_border_color],ecx
mov [CheckBox.ch_text_color],0
mov [CheckBox.ch_text_ptr],check_box_text
mov [CheckBox.ch_text_length],9
;********************************************
;***************Init EditBox*****************
;********************************************
mov ecx,[ColorsTable+8]
mov [EditBox.ed_flags],0b;1000000000000000b
mov [EditBox.ed_left],100 ;x
mov [EditBox.ed_top],100 ;y
mov [EditBox.ed_width],150
mov [EditBox.ed_height],14
mov [EditBox.ed_max],100
mov [EditBox.ed_text],buffer_for_text
mov [EditBox.ed_color],dword 0xffffff
mov [EditBox.shift_color],dword 0xaabbcc
mov [EditBox.ed_focus_border_color],0
mov [EditBox.ed_blur_border_color],ecx
mov [EditBox.ed_text_color],0
;********************************************
;***************Init bookmark****************
;********************************************
;init bookmark
mov ecx,[ColorsTable+8]
mov [Bookmark.type],byte 10100001b
mov [Bookmark.x],10
mov [Bookmark.y],10
mov [Bookmark.sizex],350
mov [Bookmark.sizey],270
mov [Bookmark.color_1],dword ecx
mov [Bookmark.color2],dword 0xffffff
mov [Bookmark.number_bookmarks],3
mov [Bookmark.number_zak_in_1],2
mov [Bookmark.number_zak_in_2],3
mov [Bookmark.number_zak_in_3],1
mov [Bookmark.text_for_1],text4
mov [Bookmark.number_contrl_1],1
mov [Bookmark.type_control_1],1
mov [Bookmark.info_1_control],dword Button1
mov [Bookmark.text_for_2],text5
mov [Bookmark.number_contrl_2],1
mov [Bookmark.type_control_2],6
mov [Bookmark.info_2_control],dword Number
mov [Bookmark.text_for_3],text6
mov [Bookmark.number_contrl_3],1
mov [Bookmark.type_control_3],8
mov [Bookmark.info_3_control],dword EditBox
mov [Bookmark.text_for_4],text7
mov [Bookmark.number_contrl_4],1
mov [Bookmark.type_control_4],4
mov [Bookmark.info_4_control],dword Image
mov [Bookmark.text_for_5],text8
mov [Bookmark.number_contrl_5],1
mov [Bookmark.type_control_5],2
mov [Bookmark.info_5_control],dword VerticalScroller
mov [Bookmark.text_for_6],text9
mov [Bookmark.number_contrl_6],1
mov [Bookmark.type_control_6],5
mov [Bookmark.info_6_control],dword Text
push Bookmark
push Parend
call [craete_bookmark]
mov [PointerToControlForBookmark],eax
call draw_window
;*****************************************************
;**********Example of resize component****************
;*****************************************************
mov ebx,[PointerToControlForButtonExit]
push 30;270
push 150;250
push ebx
call [resize_component]
;*****************************************************
;**********Example of remove component****************
;*****************************************************
mov ebx,[PointerToControlForButtonExit]
push 340;270
push 120;250
push ebx
call [move_component]
;send message 1 for redrawing ALL controls
mov [Message],dword 1
push Message
push Parend
call [send_message]
still:
mcall 10
;check for redraw window
cmp eax,1
jne no_window
call draw_window
mov eax,[PointerToControlForBookmark]
mov ebx,[Window_SizeX]
mov ecx,[Window_SizeY]
sub ebx,50
sub ecx,130
;or [eax+44],byte 1000000b
mov [eax+32],ebx
mov [eax+36],ecx
mov [Message],dword 1
push Message
push Parend
call [send_message]
jmp still
no_window:
;check for keys events
cmp eax,2
jne no_keys
mcall 2
shr eax,8
mov [Message],dword 2
mov [Message+4],eax
push Message
push Parend
call [send_message]
mov eax,[Message+4]
cmp al,27
je exit
jmp still
no_keys:
;check for pressed butons
cmp eax,3
jne no_buttons
mcall 17
shr eax,8
jmp still
no_buttons:
;check for mouse events
cmp eax,6
jne no_mouse
mov [Message],dword 6
mcall 37,1
mov ebx,eax
shr eax,16 ;x
and ebx,0xffff ;y
mov [Message+4],eax
mov [Message+8],ebx
mcall 37,2
mov [Message+12],eax
;send system events to control
push Message
push Parend
call [send_message]
mov eax,[PointerToControlForButtonExit]
xor ebx,ebx
mov bl,byte[eax+45]
cmp bl,11b
jne no_crossing_pressing_button
mov [button_pressed],1
no_crossing_pressing_button:
xor ebx,ebx
mov bl,byte[eax+45]
cmp bl,1b
jne no_crossing_button
cmp [button_pressed],1
jne no_crossing_button
jmp exit
no_crossing_button:
jmp still
no_mouse:
jmp still
exit:
push [PointerToControlForButtonExit]
call [destroy_control]
push [PointerToControlForBookmark]
call [destroy_control]
mcall -1
;**********************************************
;*******************Draw window****************
;**********************************************
draw_window:
mcall 9,IPC_table,-1
mcall 12,1
mov eax,[IPC_table+34]
mov ebx,[IPC_table+38]
mov ecx,[IPC_table+42]
mov edx,[IPC_table+46]
mov [Window_CordinatX],eax
mov [Window_CordinatY],ebx
mov [Window_SizeX],ecx
mov [Window_SizeY],edx
cmp [Window_SizeX],400
jae no_minimum_size_x
mov [Window_SizeX],400
mov ecx,[Window_SizeX]
no_minimum_size_x:
cmp [Window_SizeY],400
jae no_minimum_size_y
mov [Window_SizeY],400
mov edx,[Window_SizeY]
no_minimum_size_y:
xor eax,eax
mov ebx,[Window_CordinatX]
mov ecx,[Window_CordinatY]
shl ebx,16
shl ecx,16
add ebx,[Window_SizeX]
add ecx,[Window_SizeY]
mov edx,0x03aabbcc
mov esi,0x805080d0
mov edi,0x005080d0
mcall
;call print_controls_information
mcall 12,2
ret
GetPath:
mov ebx,255
mov ecx,path
next_symvol:
mov edx,ecx
add edx,ebx
xor eax,eax
mov al,[edx]
cmp eax,'/'
je exit_path
dec ebx
jnz next_symvol
exit_path:
inc edx
mov esi,dll_name
mov edi,edx
mov ecx,10
rep movsb
ret
include 'getproc.asm'
;************************************************************
;***************************DATA*****************************
;************************************************************
align 4
dll_name db 'libGUI.obj',0
sys_libGUI_path db '/sys/lib/libGUI.obj',0
check_box_text db 'Check box',0
text1 db 'text',0
text3 db 'Exit',0
text4 db 'Bookmark_1',0
text5 db 'Bookmark_2',0
text6 db 'Bookmark_3',0
text7 db 'Bookmark_4',0
text8 db 'Bookmark_5',0
text9 db 'Bookmark_6',0
text_for_text db 'Hello world from bookmark',0
fnDestroyControl db 'DestroyControl',0
fnSendMessage db 'SendMessage',0
fnResizeComponent db 'ResizeComponent',0
fnMoveComponent db 'MoveComponent',0
fnCraeteButton db 'CraeteButton',0
fnCraeteScroller db 'CraeteScroller',0
fnCraeteBookmark db 'CraeteBookmark',0
fnCraeteImage db 'CraeteImage',0
fnCraeteText db 'CraeteText',0
fnCraeteNumber db 'CraeteNumber',0
fnCraeteCheckbox db 'CraeteCheckbox',0
fnCraeteEditbox db 'CraeteEditbox',0
fnCraeteProgressbar db 'CraeteProgressbar',0
myexport dd 0
destroy_control dd 0
send_message dd 0
resize_component dd 0
move_component dd 0
craete_button dd 0
craete_scroller dd 0
craete_bookmark dd 0
craete_image dd 0
craete_text dd 0
craete_number dd 0
craete_check_box dd 0
craete_edit_box dd 0
craete_progres_bar dd 0
PointerToControlForButton1 dd 0
PointerToControlForButtonExit dd 0
PointerToControlForHorizontalScroller dd 0
PointerToControlForVerticalScroller dd 0
PointerToControlForBookmark dd 0
PointerToControlForImage dd 0
PointerToControlForText dd 0
PointerToControlForCheckBox dd 0
PointerToControlForEditBox dd 0
Window_CordinatX dd 0
Window_CordinatY dd 0
Window_SizeX dd 0
Window_SizeY dd 0
button_pressed dd 0
IPC_table rd 256
path rb 256
Parend: dd 0,0,0,0,0,0,0,0,0,0,0,0 ;44 bytes
Message rd 4
ColorsTable rd 10
buffer_for_text rb 100+2
struc BUTTON
{
.type db 1
.flag db 1
.x dw 1
.y dw 1
.width dw 1
.height dw 1
.image dd 1
.imageX dw 1
.imageY dw 1
.imageSizeX dw 1
.imageSizeY dw 1
.transparentColor dd 1
.text dd 1
.textX dw 1
.textY dw 1
.textcolor dd 1
.color1 dd 1
.color2 dd 1
.mouseX dw 1
.mouseY dw 1
}
struc SCROLLER
{
.type rb 1
.x rw 1
.y rw 1
.length rw 1
.color1 rd 1
.size rd 1
.pos rd 1
.buttons_flags rw 1
.ChildButton1 rd 1
.ChildButton2 rd 1
.mouseX rw 1
.mouseY rw 1
}
struc BOOKMARK
{
.type rb 1
.flag rb 1
.x rd 1
.y rd 1
.sizex rd 1
.sizey rd 1
.color_1 rd 1
.reserved rd 1
.color2 rd 1
.number_bookmarks rd 1
.number_zak_in_1 rd 1
.number_zak_in_2 rd 1
.number_zak_in_3 rd 1
.text_for_1 rd 1
.number_contrl_1 rd 1
.type_control_1 rd 1
.info_1_control rd 1
.text_for_2 rd 1
.number_contrl_2 rd 1
.type_control_2 rd 1
.info_2_control rd 1
.text_for_3 rd 1
.number_contrl_3 rd 1
.type_control_3 rd 1
.info_3_control rd 1
.text_for_4 rd 1
.number_contrl_4 rd 1
.type_control_4 rd 1
.info_4_control rd 1
.text_for_5 rd 1
.number_contrl_5 rd 1
.type_control_5 rd 1
.info_5_control rd 1
.text_for_6 rd 1
.number_contrl_6 rd 1
.type_control_6 rd 1
.info_6_control rd 1
}
struc IMAGE
{
.type rb 1
.flag rb 1
.color rd 1
.x rd 1
.y rd 1
.sizex rd 1
.sizey rd 1
.pointer rd 1
}
struc TEXT
{
.type rb 1
.flag rb 1
.color rd 1
.x rd 1
.y rd 1
.length rd 1
.pointer rd 1
}
struc NUMBER
{
.type rb 1
.flag rb 1
.color rd 1
.x rd 1
.y rd 1
.number rd 1
.parameters rd 1
}
struc CHECKBOX
{
.ch_flags rw 1
.ch_left rw 1
.ch_top rw 1
.ch_text_margin rd 1
.ch_size rd 1
.ch_size_2 rw 1
.ch_size_3 rw 1
.ch_color rd 1
.ch_border_color rd 1
.ch_text_color rd 1
.ch_text_ptr rd 1
.ch_text_length rw 1
.mouseX rd 1
.mouseY rd 1
}
struc EDITBOX
{
.ed_width rd 1 ;? ?
.ed_left rd 1 ; ??
.ed_top rd 1 ; ??
.ed_color rd 1 ;??? ?
.shift_color rd 1 ;?????. ??
.ed_focus_border_color rd 1 ;??? ?
.ed_blur_border_color rd 1 ;?? ? ?
.ed_text_color rd 1 ;????
.ed_max rd 1 ;- ? ?? ?? ?
.ed_text rd 1 ;??? ??
.ed_flags rw 1 ;?
.ed_size rd 1 ;- ?
.ed_pos rd 1 ;? ??
.ed_offset rd 1 ;??
.cl_curs_x rd 1 ;??? ???? ?
.cl_curs_y rd 1 ;??? ???? ?
.ed_shift_pos rd 1 ; ??
.ed_shift_pos_old rd 1 ;?? ??
.ed_height rd 1
.mouseX rd 1
.mouseY rd 1
}
struc PROGRESSBAR
{
.type rb 1
.flag rb 1
.color1 rd 1
.color2 rd 1
.x rd 1
.y rd 1
.sizex rd 1
.sizey rd 1
.progres rd 1
.color3 rd 1
}
Button1 BUTTON
Button3 BUTTON
VerticalScroller SCROLLER
Bookmark BOOKMARK
Image IMAGE
Text TEXT
Number NUMBER
CheckBox CHECKBOX
EditBox EDITBOX
EditBox2 EDITBOX
ProgressBar PROGRESSBAR
antibug: rb 2000
Picture:
file 'image.raw'
i_end:

File diff suppressed because one or more lines are too long

View File

@ -1,47 +0,0 @@
_ksys_cofflib_getproc:
mov ebx,[esp+4]
next_name_check:
mov ecx,[ebx]
test ecx,ecx
jz end_export
;cmp export string with name
mov esi,[esp+8]
xor edi,edi
next_simbol_check:
xor eax,eax
mov al,[ecx]
test al,al
jz exit_check_simbol
xor edx,edx
mov dl,[esi]
cmp al,dl
je simbols_equvalent
add edi,1
jmp exit_check_simbol
simbols_equvalent:
add ecx,1
add esi,1
jmp next_simbol_check
exit_check_simbol:
test edi,edi
jnz function_not_finded
mov eax,[ebx+4]
jmp end_export
function_not_finded:
add ebx,8
jmp next_name_check
end_export:
ret 8

View File

@ -1,444 +0,0 @@
;
;
; This is a example of using GUI component Button from libGUI
;
;
control_hader_size = 44
control_button_data_size = 50
include 'macros.inc'
use32
db 'MENUET01'
dd 1
dd start
dd i_end
dd 4*1024
dd 4*1024
dd 0
dd path
start:
;init hepe of memory
mcall 68,11
;set current dir as ./
call GetPath
;load dll
mcall 68,19,path
test eax,eax
jnz libGUI_loaded
;load dll from system directory
mcall 68,19,sys_dll_path
test eax,eax
jnz libGUI_loaded
mcall -1
libGUI_loaded:
mov [myexport],eax
;load dll functions
push fnDestroyControl
push [myexport]
call _ksys_cofflib_getproc
mov [destroy_control],eax
push fnSendMessage
push [myexport]
call _ksys_cofflib_getproc
mov [send_message],eax
push fnCraeteButton
push [myexport]
call _ksys_cofflib_getproc
mov [crate_button],eax
;set events mask
mcall 40,1100111b
;get standart colors table
mcall 48,3,ColorsTable,40
;*********************************************
;****************Init Butttons****************
;*********************************************
mov ecx,[ColorsTable+8]
and ecx,0xffffff
mov [Button1.type],byte 10010001b
mov [Button1.x],20
mov [Button1.y],10
mov [Button1.width],word 70
mov [Button1.height],word 20
mov [Button1.color1],0xaabbccff;dword ecx
;mov [Button1.color2],dword 0xffffff
mov [Button1.text],text1
push Button1
push Parend
call [crate_button]
mov [PointerToControlForButton1],eax
mov ecx,[ColorsTable+8]
and ecx,0xffffff
mov [Button2.type],byte 10010010b
mov [Button2.x],20
mov [Button2.y],40
mov [Button2.width],word 70
mov [Button2.height],word 20
mov [Button2.color1],dword ecx
mov [Button2.color2],dword 0xffffff
mov [Button2.image],ButtonPicture
mov [Button2.imageSizeX],16
mov [Button2.imageSizeY],16
mov [Button2.transparentColor],0xffffff
push Button2
push Parend
call [crate_button]
mov [PointerToControlForButton2],eax
mov ecx,[ColorsTable+8]
and ecx,0xffffff
mov [Button3.type],byte 10000100b
mov [Button3.x],20
mov [Button3.y],70
mov [Button3.width],word 70
mov [Button3.height],word 20
mov [Button3.color1],dword ecx
mov [Button3.color2],dword 0xffffff
mov [Button3.text],text1
mov [Button3.textX],40
mov [Button3.textY],8
mov [Button3.textcolor],0
mov [Button3.image],ButtonPicture
mov [Button3.imageX],3
mov [Button3.imageY],3
mov [Button3.imageSizeX],16
mov [Button3.imageSizeY],16
mov [Button3.transparentColor],0xffffff
push Button3
push Parend
call [crate_button]
mov [PointerToControlForButton3],eax
mov ecx,[ColorsTable+8]
and ecx,0xffffff
mov [Button4.type],byte 10010001b
mov [Button4.x],20
mov [Button4.y],100
mov [Button4.width],word 70
mov [Button4.height],word 20
mov [Button4.color1],dword ecx
mov [Button4.color2],dword 0xffffff
mov [Button4.text],text4
mov [Button4.textX],10
mov [Button4.textY],10
mov [Button4.textcolor],0
mov [Button4.image],ButtonPicture
mov [Button4.imageX],5
mov [Button4.imageY],5
mov [Button4.imageSizeX],16
mov [Button4.imageSizeY],16
mov [Button4.transparentColor],0xffffff
push Button4
push Parend
call [crate_button]
mov [PointerToControlForButton4],eax
call draw_window
;send message 1 for redrawing ALL controls
mov [Message],dword 1
push Message
push Parend
call [send_message]
still:
mcall 10
mov [SystemEvent],eax
;check for redraw window
cmp eax,1
jne no_window
call draw_window
mov [Message],dword 1
push Message
push Parend
call [send_message]
jmp still
no_window:
;check for keys events
cmp eax,2
jne no_keys
mcall 2
shr eax,8
mov [Message],dword 2
mov [Message+4],eax
push Message
push Parend
call [send_message]
mov eax,[Message+4]
cmp al,27
je exit
jmp still
no_keys:
;check for pressed butons
cmp eax,3
jne no_buttons
mcall 17
shr eax,8
jmp still
no_buttons:
;check for mouse events
cmp eax,6
jne no_mouse
mov [Message],dword 6
mcall 37,1
mov ebx,eax
shr eax,16 ;x
and ebx,0xffff ;y
mov [Message+4],eax
mov [Message+8],ebx
mcall 37,2
mov [Message+12],eax
;send system events to control
push Message
push Parend
call [send_message]
;button 1
mov esi,[PointerToControlForButton1]
add esi,control_hader_size ;size control's structure
mov edi,Button1
mov ecx,control_button_data_size
rep movsb
;button 2
mov esi,[PointerToControlForButton2]
add esi,control_hader_size ;size control's structure
mov edi,Button2
mov ecx,control_button_data_size
rep movsb
;button 3
mov esi,[PointerToControlForButton3]
add esi,control_hader_size ;size control's structure
mov edi,Button3
mov ecx,control_button_data_size
rep movsb
;button 4
mov esi,[PointerToControlForButton4]
add esi,control_hader_size ;size control's structure
mov edi,Button4
mov ecx,control_button_data_size
rep movsb
xor eax,eax
mov al,[Button4.flag]
cmp al,11b
jne no_exit_demo
mov [button_pressed],1
no_exit_demo:
cmp al,1b
jne no_only_crossing_button
cmp [button_pressed],1
jne no_only_crossing_button
jmp exit
no_only_crossing_button:
jmp still
no_mouse:
jmp still
exit:
;free resourses
push [PointerToControlForButton1]
call [destroy_control]
push [PointerToControlForButton2]
call [destroy_control]
push [PointerToControlForButton3]
call [destroy_control]
push [PointerToControlForButton4]
call [destroy_control]
mcall -1
;**********************************************
;*******************Draw window****************
;**********************************************
draw_window:
mcall 12,1
xor eax,eax
mov ebx,50
mov ecx,50
shl ebx,16
shl ecx,16
add ebx,200
add ecx,200
mov edx,0x03aabbcc
mov esi,0x805080d0
mov edi,0x005080d0
mcall
mcall 12,2
ret
GetPath:
mov ebx,255
mov ecx,path
next_symvol:
mov edx,ecx
add edx,ebx
xor eax,eax
mov al,[edx]
cmp eax,'/'
je exit_path
dec ebx
jnz next_symvol
exit_path:
inc edx
mov esi,dll_name
mov edi,edx
mov ecx,10
rep movsb
ret
include 'getproc.asm'
;************************************************************
;***************************DATA*****************************
;************************************************************
align 4
dll_name db 'libGUI.obj',0
sys_dll_path db '/sys/lib/libGUi.obj',0
text1 db 'text',0
text4 db 'Exit',0
fnDestroyControl db 'DestroyControl',0
fnSendMessage db 'SendMessage',0
fnCraeteButton db 'CraeteButton',0
myexport dd 0
destroy_control dd 0
send_message dd 0
crate_button dd 0
PointerToControlForButton1 dd 0
PointerToControlForButton2 dd 0
PointerToControlForButton3 dd 0
PointerToControlForButton4 dd 0
SystemEvent dd 0
button_pressed rb 1
path rb 256
Parend: dd 0,0,0,0,0,0,0,0,0,0,0,0 ;44 bytes
Message dd 0,0,0,0
ColorsTable dd 0,0,0,0,0,0,0,0,0,0,0,0
struc BUTTON
{
.type db 1
.flag db 1
.x dw 1
.y dw 1
.width dw 1
.height dw 1
.image dd 1
.imageX dw 1
.imageY dw 1
.imageSizeX dw 1
.imageSizeY dw 1
.transparentColor dd 1
.text dd 1
.textX dw 1
.textY dw 1
.textcolor dd 1
.color1 dd 1
.color2 dd 1
.mouseX dw 1
.mouseY dw 1
}
Button1 BUTTON
Button2 BUTTON
Button3 BUTTON
Button4 BUTTON
antibug rb 460
ButtonPicture:
file 'test.raw'
i_end:

View File

@ -1 +0,0 @@
˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙úý˙÷üţűĆĺ÷™Ń˙˙˙˙˙˙˙˙­˙˙x˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙·˙˙ǡáůVÉôěŇővÁ÷üţµđěůŔ˙˙O˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙„˙˙ś{Ő÷¶ńĚÂčúżâĎđüJĆôľęŻ˙˙W˙˙˙˙˙˙˙˙˙Úřˇáů˙˙˙˙˙<CB99>˙˙k°ćŇBĂ줟Ú÷<C39A>Č©äÝsÓ«˙˙D˙˙Ľ˙˙˙˙˙˙˙˙˙1ľň°ďŤŰřąéăÓńŽéřm°ć}śÔ{÷ŤEÔéMşéf˙˙čĚďüHĹô)»ň˙˙˙†Ů÷!¸ńcÍőPÇôHĹô2ľňÓń©üÓUîŹüÝ@˙˙Á—ŢřRČôŢřoŃö˙˙˙úý˙úý˙˙˙˙í•î šî ší‰˙˙µňNŻýăV÷ŹźÚK°Ýjľú·ß˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ţđřýŕńýŕńţđDţń×ňJ­ţň€˙˙<CB99>ţí÷ůŻŰď%ť˙˙˙˙˙˙˙˙˙˙˙˙˙˙ń˙˙<CB99>˙˙e˙˙Z˙˙HýáěňP°˙˙p˙˙Ž˙˙˙˙ýţîţôú˙˙˙˙˙˙˙˙˙˙˙č˙˙n˙˙´˙˙ľ˝ęďßÚńňQ±“ÝĂžŕźýţ˙˙˙˙ţňů˙ţ˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙ůý˙DÄóÍâőöŠĘŰôý%şńľęű˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙§ăůdÎőfÎő˙˙˙˙˙˙˙˙˙¬ĺúhĎö˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙Ęîüµçúäöý˙˙˙˙˙˙˙˙˙ŢőýwÔö˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙˙

View File

@ -1,47 +0,0 @@
_ksys_cofflib_getproc:
mov ebx,[esp+4]
next_name_check:
mov ecx,[ebx]
test ecx,ecx
jz end_export
;cmp export string with name
mov esi,[esp+8]
xor edi,edi
next_simbol_check:
xor eax,eax
mov al,[ecx]
test al,al
jz exit_check_simbol
xor edx,edx
mov dl,[esi]
cmp al,dl
je simbols_equvalent
add edi,1
jmp exit_check_simbol
simbols_equvalent:
add ecx,1
add esi,1
jmp next_simbol_check
exit_check_simbol:
test edi,edi
jnz function_not_finded
mov eax,[ebx+4]
jmp end_export
function_not_finded:
add ebx,8
jmp next_name_check
end_export:
ret 8

View File

@ -1,373 +0,0 @@
;
;
; Example of using gui component CheckBox from libGUI.
;
;
include 'macros.inc'
use32
db 'MENUET01'
dd 1
dd start
dd i_end
dd 1600
dd 1600
dd 0
dd path
start:
;init hepe of memory
mcall 68,11
;set current dir as ./
call GetPath
;load dll
mcall 68,19,path
test eax,eax
jnz libGUI_loaded
mcall 68,19,sys_libGUI_path
test eax,eax
jnz libGUI_loaded
mcall -1
libGUI_loaded:
mov [myexport],eax
;load dll functions
push fnDestroyControl
push [myexport]
call _ksys_cofflib_getproc
mov [destroy_control],eax
push fnSendMessage
push [myexport]
call _ksys_cofflib_getproc
mov [send_message],eax
push fnCraeteButton
push [myexport]
call _ksys_cofflib_getproc
mov [craete_button],eax
push fnCraeteCheckbox
push [myexport]
call _ksys_cofflib_getproc
mov [craete_check_box],eax
;set events mask
mcall 40,1100111b
;get standart colors table
mcall 48,3,ColorsTable,40
;*********************************************
;****************Init Buttton****************
;*********************************************
mov ecx,[ColorsTable+8]
and ecx,0xffffff
mov [Button1.type],byte 10010001b
mov [Button1.x],10
mov [Button1.y],40
mov [Button1.width],word 70
mov [Button1.height],word 20
mov [Button1.color1],dword ecx
mov [Button1.color2],dword 0xffffff
mov [Button1.text],text1
push Button1
push Parend
call [craete_button]
mov [PointerToControlForButtonExit],eax
;********************************************
;***************Init CheckBox****************
;********************************************
mov ecx,[ColorsTable+8]
and ecx,0xffffff
;mov [CheckBox.ch_flags],word 10b
mov [CheckBox.ch_left],20
mov [CheckBox.ch_top],15
mov [CheckBox.ch_text_margin],4
mov [CheckBox.ch_size],11
mov [CheckBox.ch_color],0xffffff
mov [CheckBox.ch_border_color],ecx
mov [CheckBox.ch_text_color],0
mov [CheckBox.ch_text_ptr],check_box_text
mov [CheckBox.ch_text_length],9
push CheckBox
push Parend
call [craete_check_box]
mov [PointerToControlForCheckBox],eax
call draw_window
;send message 1 for redrawing ALL controls
mov [Message],dword 1
push Message
push Parend
call [send_message]
still:
mcall 10
;check for redraw window
cmp eax,1
jne no_window
call draw_window
mov [Message],dword 1
push Message
push Parend
call [send_message]
jmp still
no_window:
;check for keys events
cmp eax,2
jne no_keys
mcall 2
shr eax,8
mov [Message],dword 2
mov [Message+4],eax
push Message
push Parend
call [send_message]
mov eax,[Message+4]
cmp al,27
je exit
jmp still
no_keys:
;check for pressed butons
cmp eax,3
jne no_buttons
mcall 17
shr eax,8
jmp still
no_buttons:
;check for mouse events
cmp eax,6
jne no_mouse
mov [Message],dword 6
mcall 37,1
mov ebx,eax
shr eax,16 ;x
and ebx,0xffff ;y
mov [Message+4],eax
mov [Message+8],ebx
mcall 37,2
mov [Message+12],eax
;send system events to control
push Message
push Parend
call [send_message]
mov eax,[PointerToControlForButtonExit]
xor ebx,ebx
mov bl,byte[eax+45]
cmp bl,11b
jne no_crossing_pressing_button
mov [button_pressed],1
no_crossing_pressing_button:
xor ebx,ebx
mov bl,byte[eax+45]
cmp bl,1b
jne no_crossing_button
cmp [button_pressed],1
jne no_crossing_button
jmp exit
no_crossing_button:
jmp still
no_mouse:
jmp still
exit:
push [PointerToControlForButtonExit]
call [destroy_control]
push [PointerToControlForCheckBox]
call [destroy_control]
mcall -1
;**********************************************
;*******************Draw window****************
;**********************************************
draw_window:
mcall 12,1
xor eax,eax
mov ebx,50
mov ecx,50
shl ebx,16
shl ecx,16
add ebx,100
add ecx,100
mov edx,0x03aabbcc
mov esi,0x805080d0
mov edi,0x005080d0
mcall
mcall 12,2
ret
GetPath:
mov ebx,255
mov ecx,path
next_symvol:
mov edx,ecx
add edx,ebx
xor eax,eax
mov al,[edx]
cmp eax,'/'
je exit_path
dec ebx
jnz next_symvol
exit_path:
inc edx
mov esi,dll_name
mov edi,edx
mov ecx,10
rep movsb
ret
include 'getproc.asm'
;************************************************************
;***************************DATA*****************************
;************************************************************
align 4
dll_name db 'libGUI.obj',0
sys_libGUI_path db '/sys/lib/libGUI.obj',0
check_box_text db 'Check box',0
text1 db 'Exit',0
fnDestroyControl db 'DestroyControl',0
fnSendMessage db 'SendMessage',0
fnCraeteButton db 'CraeteButton',0
fnCraeteCheckbox db 'CraeteCheckbox',0
myexport dd 0
destroy_control dd 0
send_message dd 0
craete_button dd 0
craete_check_box dd 0
PointerToControlForButtonExit dd 0
PointerToControlForCheckBox dd 0
button_pressed dd 0
path rb 256
Parend: dd 0,0,0,0,0,0,0,0,0,0,0,0 ;44 bytes
Message rd 4
ColorsTable rd 10
struc BUTTON
{
.type db 1
.flag db 1
.x dw 1
.y dw 1
.width dw 1
.height dw 1
.image dd 1
.imageX dw 1
.imageY dw 1
.imageSizeX dw 1
.imageSizeY dw 1
.transparentColor dd 1
.text dd 1
.textX dw 1
.textY dw 1
.textcolor dd 1
.color1 dd 1
.color2 dd 1
.mouseX dw 1
.mouseY dw 1
}
struc CHECKBOX
{
.ch_flags rw 1
.ch_left rw 1
.ch_top rw 1
.ch_text_margin rd 1
.ch_size rd 1
.ch_size_2 rw 1
.ch_size_3 rw 1
.ch_color rd 1
.ch_border_color rd 1
.ch_text_color rd 1
.ch_text_ptr rd 1
.ch_text_length rw 1
.mouseX rd 1
.mouseY rd 1
}
Button1 BUTTON
CheckBox CHECKBOX
i_end:

View File

@ -1,47 +0,0 @@
_ksys_cofflib_getproc:
mov ebx,[esp+4]
next_name_check:
mov ecx,[ebx]
test ecx,ecx
jz end_export
;cmp export string with name
mov esi,[esp+8]
xor edi,edi
next_simbol_check:
xor eax,eax
mov al,[ecx]
test al,al
jz exit_check_simbol
xor edx,edx
mov dl,[esi]
cmp al,dl
je simbols_equvalent
add edi,1
jmp exit_check_simbol
simbols_equvalent:
add ecx,1
add esi,1
jmp next_simbol_check
exit_check_simbol:
test edi,edi
jnz function_not_finded
mov eax,[ebx+4]
jmp end_export
function_not_finded:
add ebx,8
jmp next_name_check
end_export:
ret 8

View File

@ -1,383 +0,0 @@
;
;
; This is example of using GUI component EditBox from libGUI.
;
;
include 'macros.inc'
use32
db 'MENUET01'
dd 1
dd start
dd i_end
dd 1800
dd 1800
dd 0
dd path
start:
;init hepe of memory
mcall 68,11
;set current dir as ./
call GetPath
;load dll
mcall 68,19,path
test eax,eax
jnz libGUI_loaded
mcall 68,19,sys_libGUI_path
test eax,eax
jnz libGUI_loaded
mcall -1
libGUI_loaded:
mov [myexport],eax
;load dll functions
push fnDestroyControl
push [myexport]
call _ksys_cofflib_getproc
mov [destroy_control],eax
push fnSendMessage
push [myexport]
call _ksys_cofflib_getproc
mov [send_message],eax
push fnCraeteButton
push [myexport]
call _ksys_cofflib_getproc
mov [craete_button],eax
push fnCraeteEditbox
push [myexport]
call _ksys_cofflib_getproc
mov [craete_edit_box],eax
;set events mask
mcall 40,1100111b
;get standart colors table
mcall 48,3,ColorsTable,40
;*********************************************
;****************Init Butttons****************
;*********************************************
mov ecx,[ColorsTable+8]
and ecx,0xffffff
mov [Button1.type],byte 10010001b
mov [Button1.x],20
mov [Button1.y],50
mov [Button1.width],word 70
mov [Button1.height],word 20
mov [Button1.color1],dword ecx
mov [Button1.color2],dword 0xffffff
mov [Button1.text],text1
push Button1
push Parend
call [craete_button]
mov [PointerToControlForButtonExit],eax
mov ecx,[ColorsTable+8]
and ecx,0xffffff
;********************************************
;***************Init EditBox*****************
;********************************************
mov ecx,[ColorsTable+8]
mov [EditBox.ed_flags],0b;1000000000000000b
mov [EditBox.ed_left],5 ;x
mov [EditBox.ed_top],10 ;y
mov [EditBox.ed_width],100
mov [EditBox.ed_height],14
mov [EditBox.ed_max],100
mov [EditBox.ed_text],buffer_for_text
mov [EditBox.ed_color],dword 0xffffff
mov [EditBox.shift_color],dword 0xaabbcc
mov [EditBox.ed_focus_border_color],0
mov [EditBox.ed_blur_border_color],ecx
mov [EditBox.ed_text_color],0
push EditBox
push Parend
call [craete_edit_box]
mov [PointerToControlForEditBox],eax
call draw_window
;send message 1 for redrawing ALL controls
mov [Message],dword 1
push Message
push Parend
call [send_message]
still:
mcall 10
;check for redraw window
cmp eax,1
jne no_window
call draw_window
mov [Message],dword 1
push Message
push Parend
call [send_message]
jmp still
no_window:
;check for keys events
cmp eax,2
jne no_keys
mcall 2
shr eax,8
mov [Message],dword 2
mov [Message+4],eax
push Message
push Parend
call [send_message]
mov eax,[Message+4]
cmp al,27
je exit
jmp still
no_keys:
;check for pressed butons
cmp eax,3
jne no_buttons
mcall 17
shr eax,8
jmp still
no_buttons:
;check for mouse events
cmp eax,6
jne no_mouse
mov [Message],dword 6
mcall 37,1
mov ebx,eax
shr eax,16 ;x
and ebx,0xffff ;y
mov [Message+4],eax
mov [Message+8],ebx
mcall 37,2
mov [Message+12],eax
;send system events to control
push Message
push Parend
call [send_message]
mov eax,[PointerToControlForButtonExit]
xor ebx,ebx
mov bl,byte[eax+45]
cmp bl,11b
jne no_crossing_pressing_button
mov [button_pressed],1
no_crossing_pressing_button:
xor ebx,ebx
mov bl,byte[eax+45]
cmp bl,1b
jne no_crossing_button
cmp [button_pressed],1
jne no_crossing_button
jmp exit
no_crossing_button:
jmp still
no_mouse:
jmp still
exit:
push [PointerToControlForButtonExit]
call [destroy_control]
push [PointerToControlForEditBox]
call [destroy_control]
mcall -1
;**********************************************
;*******************Draw window****************
;**********************************************
draw_window:
mcall 12,1
xor eax,eax
mov ebx,50
mov ecx,50
shl ebx,16
shl ecx,16
add ebx,120
add ecx,120
mov edx,0x03aabbcc
mov esi,0x805080d0
mov edi,0x005080d0
mcall
mcall 12,2
ret
GetPath:
mov ebx,255
mov ecx,path
next_symvol:
mov edx,ecx
add edx,ebx
xor eax,eax
mov al,[edx]
cmp eax,'/'
je exit_path
dec ebx
jnz next_symvol
exit_path:
inc edx
mov esi,dll_name
mov edi,edx
mov ecx,10
rep movsb
ret
include 'getproc.asm'
;************************************************************
;***************************DATA*****************************
;************************************************************
align 4
dll_name db 'libGUI.obj',0
sys_libGUI_path db '/sys/lib/libGUI.obj',0
text1 db 'Exit',0
text_for_text db 'Hello world from zakladka',0
fnDestroyControl db 'DestroyControl',0
fnSendMessage db 'SendMessage',0
fnCraeteButton db 'CraeteButton',0
fnCraeteEditbox db 'CraeteEditbox',0
myexport dd 0
destroy_control dd 0
send_message dd 0
craete_button dd 0
craete_edit_box dd 0
PointerToControlForButtonExit dd 0
PointerToControlForEditBox dd 0
button_pressed dd 0
path rb 256
Parend: dd 0,0,0,0,0,0,0,0,0,0,0,0 ;44 bytes
Message rd 4
ColorsTable rd 10
buffer_for_text rb 100+2
struc BUTTON
{
.type db 1
.flag db 1
.x dw 1
.y dw 1
.width dw 1
.height dw 1
.image dd 1
.imageX dw 1
.imageY dw 1
.imageSizeX dw 1
.imageSizeY dw 1
.transparentColor dd 1
.text dd 1
.textX dw 1
.textY dw 1
.textcolor dd 1
.color1 dd 1
.color2 dd 1
.mouseX dw 1
.mouseY dw 1
}
struc EDITBOX
{
.ed_width rd 1
.ed_left rd 1
.ed_top rd 1
.ed_color rd 1
.shift_color rd 1
.ed_focus_border_color rd 1
.ed_blur_border_color rd 1
.ed_text_color rd 1
.ed_max rd 1
.ed_text rd 1
.ed_flags rw 1
.ed_size rd 1
.ed_pos rd 1
.ed_offset rd 1
.cl_curs_x rd 1
.cl_curs_y rd 1
.ed_shift_pos rd 1
.ed_shift_pos_old rd 1
.ed_height rd 1
.mouseX rd 1
.mouseY rd 1
}
Button1 BUTTON
EditBox EDITBOX
i_end:

View File

@ -1,47 +0,0 @@
_ksys_cofflib_getproc:
mov ebx,[esp+4]
next_name_check:
mov ecx,[ebx]
test ecx,ecx
jz end_export
;cmp export string with name
mov esi,[esp+8]
xor edi,edi
next_simbol_check:
xor eax,eax
mov al,[ecx]
test al,al
jz exit_check_simbol
xor edx,edx
mov dl,[esi]
cmp al,dl
je simbols_equvalent
add edi,1
jmp exit_check_simbol
simbols_equvalent:
add ecx,1
add esi,1
jmp next_simbol_check
exit_check_simbol:
test edi,edi
jnz function_not_finded
mov eax,[ebx+4]
jmp end_export
function_not_finded:
add ebx,8
jmp next_name_check
end_export:
ret 8

View File

@ -1,362 +0,0 @@
;
;
; This is example of using GUI component Image from libGUI.
;
;
include 'macros.inc'
use32
db 'MENUET01'
dd 1
dd start
dd i_end
dd 7*1024+100
dd 7*1024+100
dd 0
dd path
start:
;init hepe of memory
mcall 68,11
;set current dir as ./
call GetPath
;load dll
mcall 68,19,path
test eax,eax
jnz libGUI_loaded
mcall 68,19,sys_libGUI_path
test eax,eax
jnz libGUI_loaded
mcall -1
libGUI_loaded:
mov [myexport],eax
;load dll functions
push fnDestroyControl
push [myexport]
call _ksys_cofflib_getproc
mov [destroy_control],eax
push fnSendMessage
push [myexport]
call _ksys_cofflib_getproc
mov [send_message],eax
push fnCraeteButton
push [myexport]
call _ksys_cofflib_getproc
mov [crate_button],eax
push fnCraeteImage
push [myexport]
call _ksys_cofflib_getproc
mov [crate_image],eax
;set events mask
mcall 40,1100111b
;get standart colors table
mcall 48,3,ColorsTable,40
;*********************************************
;****************Init Butttons****************
;*********************************************
mov ecx,[ColorsTable+8]
and ecx,0xffffff
mov [Button1.type],byte 10010001b
mov [Button1.x],10
mov [Button1.y],50
mov [Button1.width],word 70
mov [Button1.height],word 20
mov [Button1.color1],dword ecx
mov [Button1.color2],dword 0xffffff
mov [Button1.text],text1
push Button1
push Parend
call [crate_button]
mov [PointerToControlForButtonExit],eax
;********************************************
;******************Init Image****************
;********************************************
mov [Image.type],byte 10000000b
mov [Image.x],25
mov [Image.y],5
mov [Image.sizex],40
mov [Image.sizey],40
mov [Image.pointer],Picture
push Image
push Parend
call [crate_image]
mov [PointerToControlForImage],eax
call draw_window
;send message 1 for redrawing ALL controls
mov [Message],dword 1
push Message
push Parend
call [send_message]
still:
mcall 10
;check for redraw window
cmp eax,1
jne no_window
call draw_window
mov [Message],1
push Message
push Parend
call [send_message]
jmp still
no_window:
;check for keys events
cmp eax,2
jne no_keys
mcall 2
shr eax,8
mov [Message],dword 2
mov [Message+4],eax
push Message
push Parend
call [send_message]
mov eax,[Message+4]
cmp al,27
je exit
jmp still
no_keys:
;check for pressed butons
cmp eax,3
jne no_buttons
mcall 17
shr eax,8
jmp still
no_buttons:
;check for mouse events
cmp eax,6
jne no_mouse
mov [Message],dword 6
mcall 37,1
mov ebx,eax
shr eax,16 ;x
and ebx,0xffff ;y
mov [Message+4],eax
mov [Message+8],ebx
mcall 37,2
mov [Message+12],eax
;send system events to control
push Message
push Parend
call [send_message]
mov eax,[PointerToControlForButtonExit]
xor ebx,ebx
mov bl,byte[eax+45]
cmp bl,11b
jne no_crossing_pressing_button
mov [button_pressed],1
no_crossing_pressing_button:
xor ebx,ebx
mov bl,byte[eax+45]
cmp bl,1b
jne no_crossing_button
cmp [button_pressed],1
jne no_crossing_button
jmp exit
no_crossing_button:
jmp still
no_mouse:
jmp still
exit:
push [PointerToControlForButtonExit]
call [destroy_control]
push [PointerToControlForImage]
call [destroy_control]
mcall -1
;**********************************************
;*******************Draw window****************
;**********************************************
draw_window:
mcall 12,1
xor eax,eax
mov ebx,50
mov ecx,50
shl ebx,16
shl ecx,16
add ebx,100
add ecx,100
mov edx,0x03aabbcc
mov esi,0x805080d0
mov edi,0x005080d0
mcall
mcall 12,2
ret
GetPath:
mov ebx,255
mov ecx,path
next_symvol:
mov edx,ecx
add edx,ebx
xor eax,eax
mov al,[edx]
cmp eax,'/'
je exit_path
dec ebx
jnz next_symvol
exit_path:
inc edx
mov esi,dll_name
mov edi,edx
mov ecx,10
rep movsb
ret
include 'getproc.asm'
;************************************************************
;***************************DATA*****************************
;************************************************************
align 4
dll_name db 'libGUI.obj',0
sys_libGUI_path db '/sys/lib/libGUI.obj',0
text1 db 'Exit',0
fnDestroyControl db 'DestroyControl',0
fnSendMessage db 'SendMessage',0
fnCraeteButton db 'CraeteButton',0
fnCraeteImage db 'CraeteImage',0
myexport dd 0
destroy_control dd 0
send_message dd 0
crate_button dd 0
crate_image dd 0
PointerToControlForButtonExit dd 0
PointerToControlForImage dd 0
button_pressed dd 0
path rb 256
Parend: dd 0,0,0,0,0,0,0,0,0,0,0,0 ;44 bytes
Message rd 4
ColorsTable rd 10
struc BUTTON
{
.type db 1
.flag db 1
.x dw 1
.y dw 1
.width dw 1
.height dw 1
.image dd 1
.imageX dw 1
.imageY dw 1
.imageSizeX dw 1
.imageSizeY dw 1
.transparentColor dd 1
.text dd 1
.textX dw 1
.textY dw 1
.textcolor dd 1
.color1 dd 1
.color2 dd 1
.mouseX dw 1
.mouseY dw 1
}
struc IMAGE
{
.type rb 1
.flag rb 1
.color rd 1
.x rd 1
.y rd 1
.sizex rd 1
.sizey rd 1
.pointer rd 1
}
Button1 BUTTON
Image IMAGE
untibug: rb 1000
Picture:
file 'koslogo.raw'
i_end:

View File

@ -1,47 +0,0 @@
_ksys_cofflib_getproc:
mov ebx,[esp+4]
next_name_check:
mov ecx,[ebx]
test ecx,ecx
jz end_export
;cmp export string with name
mov esi,[esp+8]
xor edi,edi
next_simbol_check:
xor eax,eax
mov al,[ecx]
test al,al
jz exit_check_simbol
xor edx,edx
mov dl,[esi]
cmp al,dl
je simbols_equvalent
add edi,1
jmp exit_check_simbol
simbols_equvalent:
add ecx,1
add esi,1
jmp next_simbol_check
exit_check_simbol:
test edi,edi
jnz function_not_finded
mov eax,[ebx+4]
jmp end_export
function_not_finded:
add ebx,8
jmp next_name_check
end_export:
ret 8

View File

@ -1,377 +0,0 @@
;
;
; This is example using GUI component Number from libGUI.
;
;
include 'macros.inc'
use32
db 'MENUET01'
dd 1
dd start
dd i_end
dd 1700
dd 1700
dd 0
dd path
start:
;init hepe of memory
mcall 68,11
;set current dir as ./
call GetPath
;load dll
mcall 68,19,path
test eax,eax
jnz libGUI_loaded
mcall 68,19,sys_libGUI_path
test eax,eax
jnz libGUI_loaded
mcall -1
libGUI_loaded:
mov [myexport],eax
;load dll functions
push fnDestroyControl
push [myexport]
call _ksys_cofflib_getproc
mov [destroy_control],eax
push fnSendMessage
push [myexport]
call _ksys_cofflib_getproc
mov [send_message],eax
push fnCraeteButton
push [myexport]
call _ksys_cofflib_getproc
mov [craete_button],eax
push fnCraeteNumber
push [myexport]
call _ksys_cofflib_getproc
mov [craete_number],eax
;set events mask
mcall 40,1100111b
;get standart colors table
mcall 48,3,ColorsTable,40
;*********************************************
;****************Init Butttons****************
;*********************************************
mov ecx,[ColorsTable+8]
and ecx,0xffffff
mov [Button1.type],byte 10010001b
mov [Button1.x],10
mov [Button1.y],50
mov [Button1.width],word 70
mov [Button1.height],word 20
mov [Button1.color1],dword ecx
mov [Button1.color2],dword 0xffffff
mov [Button1.text],text1
push Button1
push Parend
call [craete_button]
mov [PointerToControlForButtonExit],eax
mov ecx,[ColorsTable+8]
and ecx,0xffffff
;********************************************
;****************Init Numbers****************
;********************************************
mov [NumberFloat.type],byte 10000010b
mov [NumberFloat.color],0xffffff
mov [NumberFloat.x],20
mov [NumberFloat.y],10
mov [NumberFloat.parameters],4*65536+5
mov [NumberFloat.number],-1234.56789
mov [NumberInteger.type],byte 10000000b
mov [NumberInteger.color],0xffffff
mov [NumberInteger.x],26
mov [NumberInteger.y],30
mov [NumberInteger.parameters],8*65536
mov [NumberInteger.number],12345678
push NumberFloat
push Parend
call [craete_number]
mov [PointerToControlForNumberFloat],eax
push NumberInteger
push Parend
call [craete_number]
mov [PointerToControlForNumberInteger],eax
call draw_window
;send message 1 for redrawing ALL controls
mov [Message],dword 1
push Message
push Parend
call [send_message]
still:
mcall 10
;check for redraw window
cmp eax,1
jne no_window
call draw_window
mov [Message],dword 1
push Message
push Parend
call [send_message]
jmp still
no_window:
;check for keys events
cmp eax,2
jne no_keys
mcall 2
shr eax,8
mov [Message],dword 2
mov [Message+4],eax
push Message
push Parend
call [send_message]
mov eax,[Message+4]
cmp al,27
je exit
jmp still
no_keys:
;check for pressed butons
cmp eax,3
jne no_buttons
mcall 17
shr eax,8
jmp still
no_buttons:
;check for mouse events
cmp eax,6
jne no_mouse
mov [Message],dword 6
mcall 37,1
mov ebx,eax
shr eax,16 ;x
and ebx,0xffff ;y
mov [Message+4],eax
mov [Message+8],ebx
mcall 37,2
mov [Message+12],eax
;send system events to control
push Message
push Parend
call [send_message]
mov eax,[PointerToControlForButtonExit]
xor ebx,ebx
mov bl,byte[eax+45]
cmp bl,11b
jne no_crossing_pressing_button
mov [button_pressed],1
no_crossing_pressing_button:
xor ebx,ebx
mov bl,byte[eax+45]
cmp bl,1b
jne no_crossing_button
cmp [button_pressed],1
jne no_crossing_button
jmp exit
no_crossing_button:
jmp still
no_mouse:
jmp still
exit:
push [PointerToControlForButtonExit]
call [destroy_control]
push [PointerToControlForNumberFloat]
call [destroy_control]
push [PointerToControlForNumberInteger]
call [destroy_control]
mcall -1
;**********************************************
;*******************Draw window****************
;**********************************************
draw_window:
mcall 12,1
xor eax,eax
mov ebx,50
mov ecx,50
shl ebx,16
shl ecx,16
add ebx,100
add ecx,100
mov edx,0x03aabbcc
mov esi,0x805080d0
mov edi,0x005080d0
mcall
mcall 12,2
ret
GetPath:
mov ebx,255
mov ecx,path
next_symvol:
mov edx,ecx
add edx,ebx
xor eax,eax
mov al,[edx]
cmp eax,'/'
je exit_path
dec ebx
jnz next_symvol
exit_path:
inc edx
mov esi,dll_name
mov edi,edx
mov ecx,10
rep movsb
ret
include 'getproc.asm'
;************************************************************
;***************************DATA*****************************
;************************************************************
align 4
dll_name db 'libGUI.obj',0
sys_libGUI_path db '/sys/lib/libGUI.obj',0
text1 db 'Exit',0
fnDestroyControl db 'DestroyControl',0
fnSendMessage db 'SendMessage',0
fnCraeteButton db 'CraeteButton',0
fnCraeteNumber db 'CraeteNumber',0
myexport dd 0
destroy_control dd 0
send_message dd 0
craete_button dd 0
craete_number dd 0
PointerToControlForButtonExit dd 0
PointerToControlForNumberFloat dd 0
PointerToControlForNumberInteger dd 0
button_pressed dd 0
path rb 256
Parend: dd 0,0,0,0,0,0,0,0,0,0,0,0 ;44 bytes
Message rd 4
ColorsTable rd 10
struc BUTTON
{
.type db 1
.flag db 1
.x dw 1
.y dw 1
.width dw 1
.height dw 1
.image dd 1
.imageX dw 1
.imageY dw 1
.imageSizeX dw 1
.imageSizeY dw 1
.transparentColor dd 1
.text dd 1
.textX dw 1
.textY dw 1
.textcolor dd 1
.color1 dd 1
.color2 dd 1
.mouseX dw 1
.mouseY dw 1
}
struc NUMBER
{
.type rb 1
.flag rb 1
.color rd 1
.x rd 1
.y rd 1
.number rd 1
.parameters rd 1
}
Button1 BUTTON
NumberFloat NUMBER
NumberInteger NUMBER
i_end:

View File

@ -1,47 +0,0 @@
_ksys_cofflib_getproc:
mov ebx,[esp+4]
next_name_check:
mov ecx,[ebx]
test ecx,ecx
jz end_export
;cmp export string with name
mov esi,[esp+8]
xor edi,edi
next_simbol_check:
xor eax,eax
mov al,[ecx]
test al,al
jz exit_check_simbol
xor edx,edx
mov dl,[esi]
cmp al,dl
je simbols_equvalent
add edi,1
jmp exit_check_simbol
simbols_equvalent:
add ecx,1
add esi,1
jmp next_simbol_check
exit_check_simbol:
test edi,edi
jnz function_not_finded
mov eax,[ebx+4]
jmp end_export
function_not_finded:
add ebx,8
jmp next_name_check
end_export:
ret 8

View File

@ -1,424 +0,0 @@
;
;
; Example of using GUI componet ProgressBar from libGUI
;
;
include 'macros.inc'
use32
db 'MENUET01'
dd 1
dd start
dd i_end
dd 124*1024
dd 124*1024
dd 0
dd path
start:
;init hepe of memory
mcall 68,11
;set current dir as ./
call GetPath
;load dll
mcall 68,19,path
test eax,eax
jnz libGUI_loaded
mcall 68,19,sys_libGUI_path
test eax,eax
jnz libGUI_loaded
mcall -1
libGUI_loaded:
mov [myexport],eax
;load dll functions
push fnDestroyControl
push [myexport]
call _ksys_cofflib_getproc
mov [destroy_control],eax
push fnSendMessage
push [myexport]
call _ksys_cofflib_getproc
mov [send_message],eax
push fnActivateTrapForSpecializedMessage
push [myexport]
call _ksys_cofflib_getproc
mov [activate_trap_for_specialized_message],eax
push fnCraeteButton
push [myexport]
call _ksys_cofflib_getproc
mov [craete_button],eax
push fnCraeteProgressbar
push [myexport]
call _ksys_cofflib_getproc
mov [craete_progress_bar],eax
;set events mask
mcall 40,1100111b
;get standart colors table
mcall 48,3,ColorsTable,40
;*********************************************
;****************Init Butttons****************
;*********************************************
mov ecx,[ColorsTable+8]
and ecx,0xffffff
mov [Button1.type],byte 10010001b
mov [Button1.x],60
mov [Button1.y],50
mov [Button1.width],word 70
mov [Button1.height],word 20
mov [Button1.color1],dword ecx
mov [Button1.color2],dword 0xffffff
mov [Button1.text],text1
mov [ProgressBar.type],byte 10000001b
mov [ProgressBar.color1],dword 0xffffff
mov [ProgressBar.color2],0xff0000
mov [ProgressBar.color3],ecx
mov [ProgressBar.x],5
mov [ProgressBar.y],5
mov [ProgressBar.sizex],175
mov [ProgressBar.sizey],16
mov [ProgressBar.progres],0
push Button1
push Parend
call [craete_button]
mov [PointerToControlForButtonExit],eax
mov ecx,[ColorsTable+8]
and ecx,0xffffff
push ProgressBar
push Parend
call [craete_progress_bar]
mov [PointerToControlForProgressBar],eax
call draw_window
;send message 1 for redrawing ALL controls
mov [Message],dword 1
push Message
push Parend
call [send_message]
mov [progress],0.02
mov [progress_step],0.01
still:
;----------------------------------------
;--send special message for ProgressBar--
;----------------------------------------
mov ebx,[progress]
mov eax,[PointerToControlForProgressBar]
mov [eax+44+26],ebx
push eax
call [activate_trap_for_specialized_message]
fld [progress_step]
fld [progress]
fadd st0,st1
fstp [progress]
fstp st0
cmp [progress],dword 1.0
jl no_1_
mov [progress],0.02
mov eax,[PointerToControlForProgressBar]
mov [eax+44+26],dword 0.02
push eax
call [activate_trap_for_specialized_message]
mov [Message],dword 1
push Message
push Parend
call [send_message]
no_1_:
;fld [progress]
;fcmovbe
;fstsw ax
;sahf
;jle no_1_
;no_1_:
mov [Message],dword 3
push Message
push Parend
call [send_message]
mcall 5,1
mcall 11
;check for redraw window
cmp eax,1
jne no_window
call draw_window
mov [Message],dword 1
push Message
push Parend
call [send_message]
jmp still
no_window:
;check for keys events
cmp eax,2
jne no_keys
mcall 2
shr eax,8
mov [Message],dword 2
mov [Message+4],eax
push Message
push Parend
call [send_message]
mov eax,[Message+4]
cmp al,27
je exit
jmp still
no_keys:
;check for pressed butons
cmp eax,3
jne no_buttons
mcall 17
shr eax,8
jmp still
no_buttons:
;check for mouse events
cmp eax,6
jne no_mouse
mov [Message],dword 6
mcall 37,1
mov ebx,eax
shr eax,16 ;x
and ebx,0xffff ;y
mov [Message+4],eax
mov [Message+8],ebx
mcall 37,2
mov [Message+12],eax
;send system events to control
push Message
push Parend
call [send_message]
mov eax,[PointerToControlForButtonExit]
xor ebx,ebx
mov bl,byte[eax+45]
cmp bl,11b
jne no_crossing_pressing_button
mov [button_pressed],1
no_crossing_pressing_button:
xor ebx,ebx
mov bl,byte[eax+45]
cmp bl,1b
jne no_crossing_button
cmp [button_pressed],1
jne no_crossing_button
jmp exit
no_crossing_button:
jmp still
no_mouse:
jmp still
exit:
push [PointerToControlForButtonExit]
call [destroy_control]
push [PointerToControlForProgressBar]
call [destroy_control]
mcall -1
;**********************************************
;*******************Draw window****************
;**********************************************
draw_window:
mcall 12,1
xor eax,eax
mov ebx,50
mov ecx,50
shl ebx,16
shl ecx,16
add ebx,200
add ecx,100
mov edx,0x03aabbcc
mov esi,0x805080d0
mov edi,0x005080d0
mcall
;call print_controls_information
mcall 12,2
ret
GetPath:
mov ebx,255
mov ecx,path
next_symvol:
mov edx,ecx
add edx,ebx
xor eax,eax
mov al,[edx]
cmp eax,'/'
je exit_path
dec ebx
jnz next_symvol
exit_path:
inc edx
mov esi,dll_name
mov edi,edx
mov ecx,10
rep movsb
ret
include 'getproc.asm'
;************************************************************
;***************************DATA*****************************
;************************************************************
align 4
dll_name db 'libGUI.obj',0
sys_libGUI_path db '/sys/lib/libGUI.obj',0
text1 db 'Exit',0
fnDestroyControl db 'DestroyControl',0
fnSendMessage db 'SendMessage',0
fnCraeteButton db 'CraeteButton',0
fnCraeteProgressbar db 'CraeteProgressbar',0
fnActivateTrapForSpecializedMessage db 'ActivateTrapForSpecializedMessage',0
myexport dd 0
destroy_control dd 0
send_message dd 0
craete_button dd 0
craete_progress_bar dd 0
activate_trap_for_specialized_message dd 0
PointerToControlForButtonExit dd 0
PointerToControlForProgressBar dd 0
button_pressed dd 0
progress dd 0
progress_step dd 0
path rb 256
Parend: dd 0,0,0,0,0,0,0,0,0,0,0,0 ;44 bytes
Message rd 4
ColorsTable rd 10
struc BUTTON
{
.type db 1
.flag db 1
.x dw 1
.y dw 1
.width dw 1
.height dw 1
.image dd 1
.imageX dw 1
.imageY dw 1
.imageSizeX dw 1
.imageSizeY dw 1
.transparentColor dd 1
.text dd 1
.textX dw 1
.textY dw 1
.textcolor dd 1
.color1 dd 1
.color2 dd 1
.mouseX dw 1
.mouseY dw 1
}
struc PROGRESSBAR
{
.type rb 1
.flag rb 1
.color1 rd 1
.color2 rd 1
.x rd 1
.y rd 1
.sizex rd 1
.sizey rd 1
.progres rd 1
.color3 rd 1
}
Button1 BUTTON
ProgressBar PROGRESSBAR
i_end:

View File

@ -1,47 +0,0 @@
_ksys_cofflib_getproc:
mov ebx,[esp+4]
next_name_check:
mov ecx,[ebx]
test ecx,ecx
jz end_export
;cmp export string with name
mov esi,[esp+8]
xor edi,edi
next_simbol_check:
xor eax,eax
mov al,[ecx]
test al,al
jz exit_check_simbol
xor edx,edx
mov dl,[esi]
cmp al,dl
je simbols_equvalent
add edi,1
jmp exit_check_simbol
simbols_equvalent:
add ecx,1
add esi,1
jmp next_simbol_check
exit_check_simbol:
test edi,edi
jnz function_not_finded
mov eax,[ebx+4]
jmp end_export
function_not_finded:
add ebx,8
jmp next_name_check
end_export:
ret 8

View File

@ -1,506 +0,0 @@
;
;
; This is example of using GUI component Scroller from libGUI
;
;
control_hader_size = 44
control_scroller_data_size = 29
control_button_data_size = 50
first_child_button_pressed = 1b
second_child_button_pressed = 10000b
include 'macros.inc'
use32
db 'MENUET01'
dd 1
dd start
dd i_end
dd 4000
dd 4000
dd 0
dd path
start:
;init hepe of memory
mcall 68,11
;set current dir as ./
call GetPath
;load dll
mcall 68,19,path
test eax,eax
jnz libGUI_loaded
;load dll from system directory
mcall 68,19,sys_dll_path
test eax,eax
jnz libGUI_loaded
mcall -1
libGUI_loaded:
mov [myexport],eax
;load dll functions
push fnDestroyControl
push [myexport]
call _ksys_cofflib_getproc
mov [destroy_control],eax
push fnSendMessage
push [myexport]
call _ksys_cofflib_getproc
mov [send_message],eax
push fnCraeteButton
push [myexport]
call _ksys_cofflib_getproc
mov [craete_button],eax
push fnCraeteScroller
push [myexport]
call _ksys_cofflib_getproc
mov [craete_scroller],eax
;set events mask
mcall 40,1100111b
;get standart colors table
mcall 48,3,ColorsTable,40
;*********************************************
;****************Init Butttons****************
;*********************************************
mov ecx,[ColorsTable+8]
and ecx,0xffffff
mov [ButtonExit.type],byte 10010001b
mov [ButtonExit.x],90
mov [ButtonExit.y],160
mov [ButtonExit.width],word 70
mov [ButtonExit.height],word 20
mov [ButtonExit.color1],dword ecx
mov [ButtonExit.color2],dword 0xffffff
mov [ButtonExit.text],text
push ButtonExit
push Parend
call [craete_button]
mov [PointerToControlForButtonExit],eax
mov ecx,[ColorsTable+8]
and ecx,0xffffff
;********************************************
;***************Init scrollers****************
;********************************************
;init vertical scroller
mov ecx,[ColorsTable+8]
mov [VerticalScroller.type],byte 11100001b
mov [VerticalScroller.x],10
mov [VerticalScroller.y],30
mov [VerticalScroller.pos],0.2
mov [VerticalScroller.length],200
mov [VerticalScroller.size],0.9
mov [VerticalScroller.color1],ecx
push VerticalScroller
push Parend
call [craete_scroller]
mov [PointerToControlForVerticalScroller],eax
;init horizontal scroller
mov ecx,[ColorsTable+8]
mov [HorizontalScroller.type],byte 11110010b
mov [HorizontalScroller.x],30
mov [HorizontalScroller.y],30
mov [HorizontalScroller.pos],0.7
mov [HorizontalScroller.length],200
mov [HorizontalScroller.size],0.3
mov [HorizontalScroller.color1],0xaabbccff;ecx
push HorizontalScroller
push Parend
call [craete_scroller]
mov [PointerToControlForHorizontalScroller],eax
call draw_window
;send message 1 for redrawing ALL controls
mov [Message],dword 1
push Message
push Parend
call [send_message]
still:
mcall 10
mov [SystemEvent],eax
;-----------------------
;check for redraw window
;-----------------------
cmp eax,1
jne no_window
call draw_window
mov [Message],dword 1
push Message
push Parend
call [send_message]
jmp still
no_window:
;---------------------
;check for keys events
;---------------------
cmp eax,2
jne no_keys
mcall 2
shr eax,8
mov [Message],dword 2
mov [Message+4],eax
push Message
push Parend
call [send_message]
mov eax,[Message+4]
cmp al,27
je exit
jmp still
no_keys:
;-------------------------
;check for events of mouse
;-------------------------
cmp eax,3
jne no_button_close_window
mcall 17
shr eax,8
jmp still
no_button_close_window:
;check for mouse events
cmp eax,6
jne no_mouse
;craete message of mouse for controls
mov [Message],dword 6
mcall 37,1
mov ebx,eax
shr eax,16 ;x
and ebx,0xffff ;y
mov [Message+4],eax
mov [Message+8],ebx
mcall 37,2
mov [Message+12],eax
;send message to controls
push Message
push Parend
call [send_message]
;interraction with button exit
;copy data of scroller of button from control to structure
mov esi,[PointerToControlForButtonExit]
add esi,control_hader_size
mov edi,ButtonExit
mov ecx,control_button_data_size
rep movsb
xor eax,eax
mov al,[ButtonExit.flag]
;check button for pressing
and al,10b
test al,al
jz button_3_not_pressed
mov [button_pressed],1
jmp no_pressed_button
button_3_not_pressed:
cmp [button_pressed],1
jne no_pressed_button
jmp exit
no_pressed_button:
;interraction with vertical scroller
;copy data of vertical scroller from control to structure
mov esi,[PointerToControlForVerticalScroller]
add esi,control_hader_size
mov edi,VerticalScroller
mov ecx,control_scroller_data_size
rep movsb
mov eax,[VerticalScroller.pos]
mov [PosY_float],eax ;position of scroll bar from 0...1
xor edx,edx
call DrawRectangle
xor eax,eax
mov ax,[VerticalScroller.buttons_flags]
and ax,first_child_button_pressed
test ax,ax
jz vertical_first_child_button_not_pressed
mov edx,0xff00
call DrawRectangle
vertical_first_child_button_not_pressed:
xor eax,eax
mov ax,[VerticalScroller.buttons_flags]
and ax,second_child_button_pressed
test ax,ax
jz vertical_second_child_button_not_pressed
mov edx,0xff
call DrawRectangle
vertical_second_child_button_not_pressed:
;interraction with horizontal scroller
;copy data of horizontal scroller from control to structure
mov esi,[PointerToControlForHorizontalScroller]
add esi,control_hader_size
mov edi,HorizontalScroller
mov ecx,control_scroller_data_size
rep movsb
xor eax,eax
mov ax,[HorizontalScroller.buttons_flags]
and ax,first_child_button_pressed
test ax,ax
jz horizontal_first_child_button_not_pressed
mov edx,0xffffff
call DrawRectangle
horizontal_first_child_button_not_pressed:
xor eax,eax
mov ax,[HorizontalScroller.buttons_flags]
and ax,second_child_button_pressed
test ax,ax
jz horizontal_second_child_button_not_pressed
mov edx,0xff0000
call DrawRectangle
horizontal_second_child_button_not_pressed:
jmp still
no_mouse:
jmp still
exit:
;free resourses
push [PointerToControlForVerticalScroller]
call [destroy_control]
push [PointerToControlForHorizontalScroller]
call [destroy_control]
push [PointerToControlForButtonExit]
call [destroy_control]
mcall -1
;**********************************************
;*******************Draw window****************
;**********************************************
draw_window:
mcall 12,1
xor eax,eax
mov ebx,50
mov ecx,50
shl ebx,16
shl ecx,16
add ebx,280
add ecx,280
mov edx,0x03aabbcc
mov esi,0x805080d0
mov edi,0x005080d0
mcall
mcall 12,2
ret
GetPath:
mov ebx,255
mov ecx,path
next_symvol:
mov edx,ecx
add edx,ebx
xor eax,eax
mov al,[edx]
cmp eax,'/'
je exit_path
dec ebx
jnz next_symvol
exit_path:
inc edx
mov esi,dll_name
mov edi,edx
mov ecx,10
rep movsb
ret
DrawRectangle:
mov eax,13
mov ebx,100*65536+50
mov ecx,100*65536+50
int 0x40
ret
include 'getproc.asm'
;************************************************************
;***************************DATA*****************************
;************************************************************
align 4
dll_name db 'libGUI.obj',0
sys_dll_path db '/sys/lib/libGUI.obj',0
text db 'Exit',0
fnDestroyControl db 'DestroyControl',0
fnSendMessage db 'SendMessage',0
fnCraeteButton db 'CraeteButton',0
fnCraeteScroller db 'CraeteScroller',0
myexport dd 0
destroy_control dd 0
send_message dd 0
craete_button dd 0
craete_scroller dd 0
PointerToControlForButtonExit dd 0
PointerToControlForHorizontalScroller dd 0
PointerToControlForVerticalScroller dd 0
SystemEvent dd 0
PosX_float dd 0
PosY_float dd 0
button_pressed dd 0
IPC_table rd 256
path rb 256
ColorsTable rd 10
Parend: dd 0,0,0,0,0,0,0,0,0,0,0,0 ;44 bytes
Message rd 4
x dd 0
y dd 0
number dd 0
struc BUTTON
{
.type db 1
.flag db 1
.x dw 1
.y dw 1
.width dw 1
.height dw 1
.image dd 1
.imageX dw 1
.imageY dw 1
.imageSizeX dw 1
.imageSizeY dw 1
.transparentColor dd 1
.text dd 1
.textX dw 1
.textY dw 1
.textcolor dd 1
.color1 dd 1
.color2 dd 1
.mouseX dw 1
.mouseY dw 1
}
struc SCROLLER
{
.type rb 1
.x rw 1
.y rw 1
.length rw 1
.color1 rd 1
.size rd 1
.pos rd 1
.buttons_flags rw 1
.ChildButton1 rd 1
.ChildButton2 rd 1
.mouseX rw 1
.mouseY rw 1
}
ButtonExit BUTTON
VerticalScroller SCROLLER
HorizontalScroller SCROLLER
i_end:

View File

@ -1,47 +0,0 @@
_ksys_cofflib_getproc:
mov ebx,[esp+4]
next_name_check:
mov ecx,[ebx]
test ecx,ecx
jz end_export
;cmp export string with name
mov esi,[esp+8]
xor edi,edi
next_simbol_check:
xor eax,eax
mov al,[ecx]
test al,al
jz exit_check_simbol
xor edx,edx
mov dl,[esi]
cmp al,dl
je simbols_equvalent
add edi,1
jmp exit_check_simbol
simbols_equvalent:
add ecx,1
add esi,1
jmp next_simbol_check
exit_check_simbol:
test edi,edi
jnz function_not_finded
mov eax,[ebx+4]
jmp end_export
function_not_finded:
add ebx,8
jmp next_name_check
end_export:
ret 8

View File

@ -1,366 +0,0 @@
;
;
; This is example using GUI component Text from libGUI.
;
;
include 'macros.inc'
use32
db 'MENUET01'
dd 1
dd start
dd i_end
dd 1600
dd 1600
dd 0
dd path
start:
;init hepe of memory
mcall 68,11
;set current dir as ./
call GetPath
;load dll
mcall 68,19,path
test eax,eax
jnz libGUI_loaded
mcall 68,19,sys_libGUI_path
test eax,eax
jnz libGUI_loaded
mcall -1
libGUI_loaded:
mov [myexport],eax
;load dll functions
push fnDestroyControl
push [myexport]
call _ksys_cofflib_getproc
mov [destroy_control],eax
push fnSendMessage
push [myexport]
call _ksys_cofflib_getproc
mov [send_message],eax
push fnCraeteButton
push [myexport]
call _ksys_cofflib_getproc
mov [craete_button],eax
push fnCraeteText
push [myexport]
call _ksys_cofflib_getproc
mov [craete_text],eax
;set events mask
mcall 40,1100111b
;get standart colors table
mcall 48,3,ColorsTable,40
;*********************************************
;****************Init Butttons****************
;*********************************************
mov ecx,[ColorsTable+8]
and ecx,0xffffff
mov [Button1.type],byte 10010001b
mov [Button1.x],80
mov [Button1.y],50
mov [Button1.width],word 70
mov [Button1.height],word 20
mov [Button1.color1],dword ecx
mov [Button1.color2],dword 0xffffff
mov [Button1.text],text1
push Button1
push Parend
call [craete_button]
mov [PointerToControlForButtonExit],eax
mov ecx,[ColorsTable+8]
and ecx,0xffffff
;********************************************
;******************Init Text*****************
;********************************************
mov [Text.type],byte 10000010b
mov [Text.color],0xffffff
mov [Text.background_color],0xff
mov [Text.x],5
mov [Text.y],10
mov [Text.length],36
mov [Text.pointer],text_for_text
push Text
push Parend
call [craete_text]
mov [PointerToControlForText],eax
call draw_window
;send message 1 for redrawing ALL controls
mov [Message],dword 1
push Message
push Parend
call [send_message]
still:
mcall 10
;check for redraw window
cmp eax,1
jne no_window
call draw_window
mov [Message],dword 1
push Message
push Parend
call [send_message]
jmp still
no_window:
;check for keys events
cmp eax,2
jne no_keys
mcall 2
shr eax,8
mov [Message],dword 2
mov [Message+4],eax
push Message
push Parend
call [send_message]
mov eax,[Message+4]
cmp al,27
je exit
jmp still
no_keys:
;check for pressed butons
cmp eax,3
jne no_buttons
mcall 17
shr eax,8
jmp still
no_buttons:
;check for mouse events
cmp eax,6
jne no_mouse
mov [Message],dword 6
mcall 37,1
mov ebx,eax
shr eax,16 ;x
and ebx,0xffff ;y
mov [Message+4],eax
mov [Message+8],ebx
mcall 37,2
mov [Message+12],eax
;send system events to control
push Message
push Parend
call [send_message]
mov eax,[PointerToControlForButtonExit]
xor ebx,ebx
mov bl,byte[eax+45]
cmp bl,11b
jne no_crossing_pressing_button
mov [button_pressed],1
no_crossing_pressing_button:
xor ebx,ebx
mov bl,byte[eax+45]
cmp bl,1b
jne no_crossing_button
cmp [button_pressed],1
jne no_crossing_button
jmp exit
no_crossing_button:
jmp still
no_mouse:
jmp still
exit:
push [PointerToControlForButtonExit]
call [destroy_control]
push [PointerToControlForText]
call [destroy_control]
mcall -1
;**********************************************
;*******************Draw window****************
;**********************************************
draw_window:
mcall 12,1
xor eax,eax
mov ebx,50
mov ecx,50
shl ebx,16
shl ecx,16
add ebx,250
add ecx,100
mov edx,0x03aabbcc
mov esi,0x805080d0
mov edi,0x005080d0
mcall
;call print_controls_information
mcall 12,2
ret
GetPath:
mov ebx,255
mov ecx,path
next_symvol:
mov edx,ecx
add edx,ebx
xor eax,eax
mov al,[edx]
cmp eax,'/'
je exit_path
dec ebx
jnz next_symvol
exit_path:
inc edx
mov esi,dll_name
mov edi,edx
mov ecx,10
rep movsb
ret
include 'getproc.asm'
;************************************************************
;***************************DATA*****************************
;************************************************************
align 4
dll_name db 'libGUI.obj',0
sys_libGUI_path db '/sys/lib/libGUI.obj',0
text1 db 'Exit',0
text_for_text db 'Example of using GUI component text.',0
fnDestroyControl db 'DestroyControl',0
fnSendMessage db 'SendMessage',0
fnCraeteButton db 'CraeteButton',0
fnCraeteText db 'CraeteText',0
myexport dd 0
destroy_control dd 0
send_message dd 0
craete_button dd 0
craete_text dd 0
PointerToControlForButtonExit dd 0
PointerToControlForText dd 0
button_pressed dd 0
path rb 256
Parend: dd 0,0,0,0,0,0,0,0,0,0,0,0 ;44 bytes
Message rd 4
ColorsTable rd 10
struc BUTTON
{
.type db 1
.flag db 1
.x dw 1
.y dw 1
.width dw 1
.height dw 1
.image dd 1
.imageX dw 1
.imageY dw 1
.imageSizeX dw 1
.imageSizeY dw 1
.transparentColor dd 1
.text dd 1
.textX dw 1
.textY dw 1
.textcolor dd 1
.color1 dd 1
.color2 dd 1
.mouseX dw 1
.mouseY dw 1
}
struc TEXT
{
.type rb 1
.flag rb 1
.color rd 1
.x rd 1
.y rd 1
.length rd 1
.pointer rd 1
.background_color rd 1
}
Button1 BUTTON
Text TEXT
i_end:

View File

@ -1,29 +0,0 @@
RUSSIAN
Åñòü íåñêîëüêî ñïîñîáîâ óñòàíîâèòü libGUI.
1) Óñòàíîâêà èç KolibriOS.
Çàãðóçèòå KolibriOS. Ïðè ïîìîùè ôàéëîâîãî ìåíåäæåðà (KFAR èëè KFM íà âàø âûáîð) çàéäèòå â äèðåêòîðèþ /rd/1/lib/ è ñêîïèðóéòå òóäà libGUI.obj
Çàïóñòèòå ïðîãðàììó RDSAVE. Åñëè âû çàãðóçèëèñü ñ æ¸ñòêîãî äèñêà, òî ñîõðàíèòå îáðàç íà æ¸ñòêèé äèñê. Ïî óìîë÷àíèþ ïîäðàçóìåâàåòñÿ, ÷òî Âû
çàãðóçèëè KolibriOS èç äèðåêòîðèè /hdx/1/kolibri/ , ãäå x çàâèñèò îò òîãî, íà êàêîì IDE ðàçú¸ìå íàõîäèòüñÿ âàø æ¸ñòêèé äèñê. Çíà÷åíèå x âû ìîæåòå
ïîñìîòðåòü â ôàéëîâîì ìåíåäæåðå.Åñëè âû çàãðóçèëèñü ñ floppy äèñêà, òî íàæìèòå ñîîòâåòñòâóþùóþ êíîïêó.
Âñ¸, óñòàíîâêà çàêîí÷åíà!
2)Îòêðîéòå îáðàç KOLIBRI.IMG ,Ýòî ìîæíî ñäåëàòü ïðè ïîìîùè ïðîãðàììû WinImage èëè êàêîé ëèáî äðóãîé ïðîãðàììû, ðàáîòàþùåé ñ img îáðàçàìè.
Çàéäèòå â îáðàçå â ïàïêó lib è ñêîïèðóéòå òóäà libGUI.obj . Ñîõðàíèòå îáðàç.
ENGLISH
There are some ways to establish libGUI.
1) Installation from KolibriOS.
Load KolibriOS. By means of the file manager (KFAR or KFM on your choice) go in a directory/rd/1/lib/and copy there libGUI.obj
Start program RDSAVE. If you were loaded from a hard disk keep an image on a hard disk. By default it is meant, that you
Have loaded KolibriOS from a directory/hdx/1/kolibri/where x depends on on what IDE a socket to be your hard disk. Value x you can
To look in the file manager. If you were loaded with floppy a disk press the appropriate button.
Everything, installation is completed!
2) Open image KOLIBRI.IMG, It can be made by means of program WinImage or what or other program working with img in the images.
Go in an image in a folder lib and copy there libGUI.obj. Keep an image.

View File

@ -1,22 +0,0 @@
;*******************************************************
;*Function activate a trap for the specialized message.*
;*******************************************************
;IN
;void ActivateTrapForSpecializedMessage(dword *control)
activate_trap_for_specialized_message:
push eax
push ebx
mov ebx,[esp+8+4]
xor eax,eax
mov al,[ebx+control_header_size]
or al,activate_trap
mov [ebx+control_header_size],al
pop ebx
pop eax
ret 4

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,251 +0,0 @@
cb_control_data_dize = 44
;****************************************************
;****************craete CheckBox**********************
;****************************************************
;IN
;pointer to parend
;pointer to CheckBox's structure
;OUT
;pointer to initialized control
align 4
craete_check_box:
push ebx
push ecx
push edx
push esi
push edi
push ebp
mov ebx,[esp+24+4]
mov eax,[esp+24+8]
mov [PointerToStructureForCheckBox],eax
mov eax,control_header_size+cb_control_data_dize
call craete_control
;set all CheckBox's parameters in control
mov [eax],dword check_box
mov ecx,cb_control_data_dize
mov esi,[PointerToStructureForCheckBox]
mov edi,eax
add edi,control_header_size
rep movsb
call get_skin_height
mov ebx,[PointerToStructureForCheckBox]
xor ecx,ecx
xor edx,edx
mov cx,[ebx+2] ;CheckBox x
mov dx,[ebx+4] ;CheckBox y
mov esi,[ebx+10] ;CheckBox size
add ecx,border_width
add edx,[skin_height]
;copy information to control
mov [eax+24],ecx
mov [eax+28],edx
mov [eax+32],esi
mov [eax+36],esi
pop ebp
pop edi
pop esi
pop edx
pop ecx
pop ebx
ret 8
;****************************************************
;*****************Draw CheckBox**********************
;****************************************************
;IN
;pointer to control of CheckBox
;message
;OUT
;not returned value
align 4
check_box:
;get message
mov eax,[esp+8]
;get pointer to control of CheckBox
mov esi,[esp+4]
mov [PointerForCheckBox],esi
;copy information from control to structure
add esi,control_header_size
mov edi,dword CheckBox
mov ecx,control_header_size+cb_control_data_dize
rep movsb
push eax
;load coordinats and size from control
mov eax,[PointerForCheckBox]
mov ebx,[eax+24] ;x
mov ecx,[eax+28] ;y
mov edx,[eax+32] ;size
;set current coordinats and sizes in CheckBox
mov [CheckBox.ch_left],bx
mov [CheckBox.ch_top],cx
mov [CheckBox.ch_size],edx
pop eax
cmp [eax],dword 1
jne no_redraw_all_check_box
mov eax,13
mov bx,[CheckBox.ch_left]
mov cx,[CheckBox.ch_top]
shl ebx,16
shl ecx,16
add ebx,[CheckBox.ch_size]
add ecx,[CheckBox.ch_size]
mov edx,[CheckBox.ch_border_color]
mcall
mov edx,[CheckBox.ch_color]
add ebx,1 shl 16 - 2
add ecx,1 shl 16 - 2
mcall
mov eax,[CheckBox.ch_size]
mov ebx,eax
mov ecx,3
shr ebx,1
cdq
idiv ecx
mov [CheckBox.ch_size_2],bx
mov [CheckBox.ch_size_3],ax
test word [CheckBox.ch_flags],2
jz @f
call draw_ch
@@:
movzx ebx,word[CheckBox.ch_left]
add ebx,[CheckBox.ch_size]
add ebx,[CheckBox.ch_text_margin]
shl ebx,16
mov bx,[CheckBox.ch_top]
add ebx,[CheckBox.ch_size]
add ebx,(-9+1)
mov ecx,[CheckBox.ch_text_color]
mov edx,[CheckBox.ch_text_ptr]
movzx esi,word [CheckBox.ch_text_length]
mov eax,4
mcall
jmp exit_check_box
no_redraw_all_check_box:
cmp [eax],dword 3
je exit_check_box
cmp [eax],dword 6
jne no_mouse_check_box
mov esi,[eax+4]
mov edi,[eax+8]
mov ebx,[eax+12] ;buttons of mouse state
mov [CheckBox.mouseX],esi
mov [CheckBox.mouseY],edi
mov eax,ebx
test eax,eax
jnz @f
btr word [CheckBox.ch_flags],2
jmp exit_check_box
@@:
bts word [CheckBox.ch_flags],2
jc .mouse_end
movzx esi,word [CheckBox.ch_text_length]
imul esi,6
add esi,[CheckBox.ch_text_margin]
mov eax,[CheckBox.mouseX]
shl eax,16
add eax,[CheckBox.mouseY]
xor ebx,ebx
movzx ebx,word[CheckBox.ch_top]
cmp ax,bx
jl .mouse_end
add ebx,[CheckBox.ch_size]
cmp ax,bx
jg .mouse_end
shr eax,16
movzx ebx,word[CheckBox.ch_left]
cmp ax,bx
jl .mouse_end
add ebx,[CheckBox.ch_size]
add ebx,esi
cmp ax,bx
jg .mouse_end
bts word[CheckBox.ch_flags],1
jc @f
call draw_ch
jmp .mouse_end
@@:
btr word[CheckBox.ch_flags],1
call clear_ch
.mouse_end:
no_mouse_check_box:
exit_check_box:
;save resultat of work in control
mov ecx,cb_control_data_dize ;save in control only flags
mov esi,dword CheckBox
mov edi,[PointerForCheckBox]
add edi,control_header_size
cld
rep movsb
ret 8
;ch_text_margin=4
;ch_size=11
clear_ch:
mov edx,[CheckBox.ch_color]
jmp @f
draw_ch:
mov edx,[CheckBox.ch_border_color]
@@:
movzx ebx,word[CheckBox.ch_left]
add bx,[CheckBox.ch_size_3]
shl ebx,16
mov bx,[CheckBox.ch_size_2]
;mov bp,bx
;push bx
movzx ecx,word [CheckBox.ch_top]
mov eax,13
add cx,[CheckBox.ch_size_3]
shl ecx,16
;mov cx,bp
mov cx,[CheckBox.ch_size_2]
mcall
ret

View File

@ -1,26 +0,0 @@
;eax - x1
;ebx - y1
;ecx - size x
;edx - size y
;esi - x2
;edi - y2
;if crossing than eax=0xffffff
CheckCrossingBox:
add ecx,eax
add edx,ebx
cmp esi,eax
jl exit_crossing
cmp esi,ecx
ja exit_crossing
cmp edi,ebx
jl exit_crossing
cmp edi,edx
ja exit_crossing
xor eax,eax
mov eax,0xffffff
exit_crossing:
ret

View File

@ -1 +0,0 @@
__CPU_type fix p5

View File

@ -1,131 +0,0 @@
macro debug_print str
{
local ..string, ..label
jmp ..label
..string db str,0
..label:
pushf
pushad
mov edx,..string
call debug_outstr
popad
popf
}
dps fix debug_print
macro debug_print_dec arg
{
pushf
pushad
if ~arg eq eax
mov eax,arg
end if
call debug_outdec
popad
popf
}
dpd fix debug_print_dec
;---------------------------------
debug_outdec: ;(eax - num, edi-str)
push 10 ;2
pop ecx ;1
push -'0' ;2
.l0:
xor edx,edx ;2
div ecx ;2
push edx ;1
test eax,eax ;2
jnz .l0 ;2
.l1:
pop eax ;1
add al,'0' ;2
call debug_outchar ; stosb
jnz .l1 ;2
ret ;1
;---------------------------------
debug_outchar: ; al - char
pushf
pushad
mov cl,al
mov eax,63
mov ebx,1
int 0x40
popad
popf
ret
debug_outstr:
mov eax,63
mov ebx,1
@@:
mov cl,[edx]
test cl,cl
jz @f
int 40h
inc edx
jmp @b
@@:
ret
macro newline
{
dps <13,10>
}
macro print message
{
dps message
newline
}
macro pregs
{
dps "EAX: "
dpd eax
dps " EBX: "
dpd ebx
newline
dps "ECX: "
dpd ecx
dps " EDX: "
dpd edx
newline
}
macro debug_print_hex arg
{
pushf
pushad
if ~arg eq eax
mov eax, arg
end if
call debug_outhex
popad
popf
}
dph fix debug_print_hex
debug_outhex:
; eax - number
mov edx, 8
.new_char:
rol eax, 4
movzx ecx, al
and cl, 0x0f
mov cl, [__hexdigits + ecx]
pushad
mcall 63, 1
popad
dec edx
jnz .new_char
ret
__hexdigits:
db '0123456789ABCDEF'

View File

@ -1,595 +0,0 @@
DrawLine:
mov eax,38
mov ebx,[Line.x1]
mov ecx,[Line.y1]
mov edx,[Line.color]
shl ebx,16
shl ecx,16
add ebx,[Line.x2]
add ecx,[Line.y2]
mcall
ret
DrawPixel:
xor eax,eax
inc al
mov ebx,[Pixel.x]
mov ecx,[Pixel.y]
mov edx,[Pixel.color]
mcall
ret
RectangleContour:
mov eax,38
mov ebx,[Rectangle.x]
mov ecx,[Rectangle.y]
mov edx,[Rectangle.color]
mov esi,ebx
mov edi,ecx
shl ebx,16
shl ecx,16
add ebx,esi
add ecx,edi
add ebx,[Rectangle.width]
mcall
mov eax,38
mov ebx,[Rectangle.x]
mov ecx,[Rectangle.y]
mov edx,[Rectangle.color]
add ecx,[Rectangle.height]
mov esi,ebx
mov edi,ecx
shl ebx,16
shl ecx,16
add ebx,esi
add ecx,edi
add ebx,[Rectangle.width]
mcall
mov eax,38
mov ebx,[Rectangle.x]
mov ecx,[Rectangle.y]
mov edx,[Rectangle.color]
mov esi,ebx
mov edi,ecx
shl ebx,16
shl ecx,16
add ebx,esi
add ecx,edi
add ecx,[Rectangle.height]
mcall
mov eax,38
mov ebx,[Rectangle.x]
mov ecx,[Rectangle.y]
mov edx,[Rectangle.color]
add ebx,[Rectangle.width]
mov esi,ebx
mov edi,ecx
shl ebx,16
shl ecx,16
add ebx,esi
add ecx,edi
add ecx,[Rectangle.height]
mcall
ret
;eax -first color
;ebx- second color
;OUT
;eax - averege color
calculate_average_color:
and eax,0xffffff
and ebx,0xffffff
mov [b_min],al
mov [b_max],bl
shr eax,8
shr ebx,8
mov [g_min],al
mov [g_max],bl
shr eax,8
shr ebx,8
mov [r_min],al
mov [r_max],bl
xor eax,eax
xor ebx,ebx
mov al,[r_max]
mov bl,[r_min]
add eax,ebx
shr eax,1
mov [r],al
xor eax,eax
xor ebx,ebx
mov al,[g_max]
mov bl,[g_min]
add eax,ebx
shr eax,1
mov [g],al
xor eax,eax
xor ebx,ebx
mov al,[b_max]
mov bl,[b_min]
add eax,ebx
shr eax,1
mov [b],al
xor eax,eax
mov al,[r]
shl eax,8
mov al,[g]
shl eax,8
mov al,[b]
ret
;eax -color
;ebx- sub value
;OUT
;eax - sabved color
calculate_sabved_color:
and eax,0xffffff
mov [b],al
shr eax,8
mov [g],al
shr eax,8
mov [r],al
sub [r],bl
sub [g],bl
sub [b],bl
xor eax,eax
mov al,[r]
shl eax,8
mov al,[g]
shl eax,8
mov al,[b]
ret
DrawString:
mov ebx,[Button.text]
call GetLengthString
mov esi,eax
mov eax,4
mov ebx,[Font.x]
shl ebx,16
add ebx,[Font.y]
mov ecx,[Button.textcolor]
mov edx,[Button.text]
mcall
ret
;eax -first color
;ebx- second color
;ecx- x coordinat of rectangle
;edx- y coordinat of rectangle
;esi- rectangle size x
;edi- rectangle size y
rectangle_gradient_right:
mov [line_coordinat_x],ecx
mov [line_coordinat_y],edx
mov [line_size_x],esi
mov [line_size_y],edi
mov ecx,esi
mov edx,dword pointer
call gradient
mov ecx,[line_coordinat_y]
shl ecx,16
add ecx,[line_coordinat_y]
add ecx,[line_size_y]
mov eax,[line_size_x]
add [line_coordinat_x],eax
mov esi,dword pointer
mov edi,[line_size_x]
next_vertical_line_draw_right:
mov eax,38
mov ebx,[line_coordinat_x]
shl ebx,16
add ebx,[line_coordinat_x]
mov edx,[esi]
and edx,0xffffff
mcall
add esi,3
sub [line_coordinat_x],1
dec edi
jnz next_vertical_line_draw_right
ret
;eax -first color
;ebx- second color
;ecx- x coordinat of rectangle
;edx- y coordinat of rectangle
;esi- rectangle size x
;edi- rectangle size y
rectangle_gradient_left:
mov [line_coordinat_x],ecx
mov [line_coordinat_y],edx
mov [line_size_x],esi
mov [line_size_y],edi
mov ecx,esi
mov edx,dword pointer
call gradient
mov ecx,[line_coordinat_y]
shl ecx,16
add ecx,[line_coordinat_y]
add ecx,[line_size_y]
mov esi,dword pointer
mov edi,[line_size_x]
next_vertical_line_draw_left:
mov eax,38
mov ebx,[line_coordinat_x]
shl ebx,16
add ebx,[line_coordinat_x]
mov edx,[esi]
and edx,0xffffff
mcall
add esi,3
add [line_coordinat_x],1
dec edi
jnz next_vertical_line_draw_left
ret
;eax -first color
;ebx- second color
;ecx- x coordinat of rectangle
;edx- y coordinat of rectangle
;esi- rectangle size x
;edi- rectangle size y
rectangle_gradient_up:
mov [line_coordinat_x],ecx
mov [line_coordinat_y],edx
mov [line_size_x],esi
mov [line_size_y],edi
mov ecx,edi
mov edx,dword pointer
call gradient
mov ebx,[line_coordinat_x]
shl ebx,16
add ebx,[line_coordinat_x]
add ebx,[line_size_x]
mov eax,[line_size_y]
add [line_coordinat_y],eax
mov esi,dword pointer
mov edi,[line_size_y]
next_horizontal_line_draw_up:
mov eax,38
mov ecx,[line_coordinat_y]
shl ecx,16
add ecx,[line_coordinat_y]
mov edx,[esi]
and edx,0xffffff
mcall
add esi,3
sub [line_coordinat_y],1
dec edi
jnz next_horizontal_line_draw_up
ret
;eax -first color
;ebx- second color
;ecx- x coordinat of rectangle
;edx- y coordinat of rectangle
;esi- rectangle size x
;edi- rectangle size y
rectangle_gradient_down:
mov [line_coordinat_x],ecx
mov [line_coordinat_y],edx
mov [line_size_x],esi
mov [line_size_y],edi
mov ecx,edi
mov edx,dword pointer
call gradient
mov ebx,[line_coordinat_x]
shl ebx,16
add ebx,[line_coordinat_x]
add ebx,[line_size_x]
mov esi,dword pointer
mov edi,[line_size_y]
next_horizontal_line_draw_down:
mov eax,38
mov ecx,[line_coordinat_y]
shl ecx,16
add ecx,[line_coordinat_y]
mov edx,[esi]
and edx,0xffffff
mcall
add esi,3
add [line_coordinat_y],1
dec edi
jnz next_horizontal_line_draw_down
ret
;eax -first color
;ebx- second color
;ecx- length of line
;edx- pointer to memory for colors of gradient
gradient:
mov [length],ecx
and eax,0xffffff
and eax,0xffffff
mov [b_min],al
mov [b_max],bl
shr eax,8
shr ebx,8
mov [g_min],al
mov [g_max],bl
shr eax,8
shr ebx,8
mov [r_min],al
mov [r_max],bl
mov eax,[length]
dec eax
mov [v],eax
fild [v]
xor eax,eax
mov al,[r_max]
sub al,[r_min]
mov [v],eax
fild [v]
fdiv st0,st1
fstp [step_r]
xor eax,eax
mov al,[g_max]
sub al,[g_min]
mov [v],eax
fild [v]
fdiv st0,st1
fstp [step_g]
xor eax,eax
mov al,[b_max]
sub al,[b_min]
mov [v],eax
fild [v]
fdiv st0,st1
fstp [step_b]
fstp [v]
xor eax,eax
mov al,[r_min]
mov [r],al
mov [v],eax
fild [v]
fstp [r_f]
xor eax,eax
mov al,[g_min]
mov [g],al
mov [v],eax
fild [v]
fstp [g_f]
xor eax,eax
mov al,[b_min]
mov [b],al
mov [v],eax
fild [v]
fstp [b_f]
next_gradient_color_save:
xor ebx,ebx
xor eax,eax
mov al,[r]
mov bl,al
shl eax,8
mov al,[g]
shl eax,8
mov al,[b]
mov [edx],ax
mov [edx+2],bl
fld [step_r]
fld [r_f]
fadd st0,st1
fst [r_f]
fistp [v]
xor eax,eax
mov eax,[v]
mov [r],al
fstp [v]
fld [step_g]
fld [g_f]
fadd st0,st1
fst [g_f]
fistp [v]
xor eax,eax
mov eax,[v]
mov [g],al
fstp [v]
fld [step_b]
fld [b_f]
fadd st0,st1
fst [b_f]
fistp [v]
xor eax,eax
mov eax,[v]
mov [b],al
fstp [v]
add edx,3
dec ecx
jnz next_gradient_color_save
ret
;IN
;NON
;OUT
;variable [skin_height]
get_skin_height:
pushad
mov eax,48
mov ebx,4
int 0x40
mov [skin_height],eax
popad
ret
;eax - x
;ebx - y
;ecx - size x
;edx - size y
;esi - pointer to memory for rectangle
SaveFonForRectangle:
mov [Rectangle.x],eax
mov [Rectangle.y],ebx
mov [Rectangle.width],ecx
mov [Rectangle.height],edx
mov [PointerToMem],esi
;get bytes per string
mov eax,61
mov ebx,2
mcall
mov [BitsPerPixel],eax
mov eax,61
mov ebx,3
mcall
mov [BytesPerString],eax
;get window coordinats
mov eax,9
mov ebx,dword IPC_table
or ecx,-1
mcall
mov eax,dword[IPC_table+34]
mov ebx,dword[IPC_table+38]
;mov ecx,dword[IPC_table+42]
;mov edx,dword[IPC_table+46]
;mov [WindowCoordinatX],eax
;mov [WindowCoordinatY],ebx
;mov [WindowSizeX],ecx
;mov [WindowSizeY],edx
add eax,[Rectangle.x]
add ebx,[Rectangle.y]
imul ebx,[BytesPerString]
mov esi,[Rectangle.width]
cmp [BitsPerPixel],24
jne no_24
lea eax,[eax+eax*2]
lea esi,[esi+esi*2]
mov edi,3
jmp exit_bits_per_pixel
no_24:
shl eax,2
shl esi,2
mov edi,4
exit_bits_per_pixel:
add eax,ebx
mov ebx,[BytesPerString]
sub ebx,esi
mov [offset],ebx
mov esi,[PointerToMem]
mov edx,[Rectangle.height]
next_string_pixels_save:
mov ecx,[Rectangle.width]
next_pixel_save:
mov ebx,[gs:eax]
and ebx,0xffffff
mov [esi],bx
shr ebx,16
mov [esi+2],bl
add esi,3
add eax,edi
dec ecx
jnz next_pixel_save
add eax,[offset]
dec edx
jnz next_string_pixels_save
exit_:
ret

View File

@ -1,267 +0,0 @@
eb_control_data_size = 82
;****************************************************
;******************craete EditBox*********************
;****************************************************
;IN
;pointer to parend
;pointer to EditBox's structure
;OUT
;pointer to initialized control
align 4
craete_edit_box:
push ebx
push ecx
push edx
push esi
push edi
push ebp
mov ebx,[esp+24+4]
mov eax,[esp+24+8]
mov [PointerToStructureForEditBox],eax
mov eax,control_header_size+eb_control_data_size
call craete_control
;set all EditBox's parameters in control
mov [eax],dword edit_box
mov ecx,eb_control_data_size
mov esi,[PointerToStructureForEditBox]
mov edi,eax
add edi,control_header_size
rep movsb
call get_skin_height
mov ebx,[PointerToStructureForEditBox]
mov ecx,[ebx+4] ;x
mov edx,[ebx+8] ;y
mov esi,[ebx] ;size x
mov edi,[ebx+70] ;size y
add ecx,border_width
add edx,[skin_height]
;copy information to control
mov [eax+24],ecx
mov [eax+28],edx
mov [eax+32],esi
mov [eax+36],edi
pop ebp
pop edi
pop esi
pop edx
pop ecx
pop ebx
ret 8
;****************************************************
;******************Draw EditBox**********************
;****************************************************
;include 'editbox_mac.inc'
;IN
;pointer to control of EditBox
;message
;OUT
;not returned value
align 4
include 'editbox_mac.inc'
edit_box:
;;;;;;;;;;;;
;Structure from libGui  á®æ¨ æ¨ï áâàãªâãà
;;;;;;;;;;;;
;get message
mov eax,[esp+8]
;get pointer to control of button
mov esi,[esp+4]
mov [PointerForEditBox],esi
;copy control to local control
add esi,control_header_size
mov edi,dword EditBox
mov ecx,eb_control_data_size
rep movsb
;;;;;;;;;;;;
;Structure from libGui  á®æ¨ æ¨ï áâàãªâãà
;;;;;;;;;;;;
srt_ed_libgui
push eax
;load coordinats and size from control
mov eax,[PointerForEditBox]
mov ebx,[eax+24] ;x
mov ecx,[eax+28] ;y
mov edx,[eax+32] ;size x
mov esi,[eax+36] ;size y
;set current coordinats and sizes in EeditBox
mov [EditBox.ed_left],ebx
mov [EditBox.ed_top],ecx
mov [EditBox.ed_width],edx
mov [EditBox.ed_height],esi
pop eax
;events of redraw all EditBox
cmp [eax],dword 1
jne .no_redraw_all_edit_box
call .draw_border
.draw_bg_cursor_text:
call .check_offset
call .draw_bg
call .draw_shift
.draw_cursor_text:
test word[EditBox.ed_flags],ed_focus
je @f
call .draw_cursor
@@:
call .draw_text
jmp .editbox_exit;exit_edit_box
.no_redraw_all_edit_box:
;events of keys for EditBox
cmp [eax],dword 2
jne .no_keys_edit_box
mov ebx,[eax+4]
shl ebx,8
mov eax,ebx
test word [EditBox.ed_flags],ed_focus
je .editbox_exit;exit_edit_box;@b
call .check_shift
;----------------------------------------------------------
;--- ¯à®¢¥à塞, çâ® ­ ¦ â® --------------------------------
;----------------------------------------------------------
use_key_process backspase,delete,left,right,home,end,insert
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;‡ £«ã誠 ­  ®¡à ¡®âªã ª« ¢¨è ¢¢¥àå ¨ ¢­¨§ â.¥. ¯à¨
;®¡­ à㦥­¨¨ íâ¨å ª®¤®¢ ¯à®¨á室¨â ¢ë室 ¨§ ®¡à ¡®â稪 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
srt_ed_libgui
use_key_no_process up,down,esc
;--- ­ ¦ â  ¤àã£ ï ª« ¢¨è  ---
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;<EFBFBD>஢¥àª  ãáâ ­®¢«¥­ «¨ ä« £ ¯à¨ ª®â®à®¬ ­ã¦­® ¢ë¢®¤¨âì
;⮫쪮 æ¨äàë ¢ ­ã¦­®¬ ¡®ªá¥ ¥á«¨ â ª®© ­¥®¡å®¤¨¬®á⨠­¥â
;­ã¦­® § ª®¬¥­â¨à®¢ âì ¬ ªà®á
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
use_key_figures_only
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;¯à®¢¥àª  ­  shift ¡ë« «¨ ­ ¦ â
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
are_key_shift_press
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ¯à®¢¥à塞, ­ å®¤¨âáï «¨ ªãàá®à ¢ ª®­æ¥ + ¤ «ì­¥©è ï ®¡à ¡®âª 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
are_key_cur_end
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Ž¡à ¡®âª  ª« ¢¨è insert,delete.backspase,home,end,left,right
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
use_work_key
.no_keys_edit_box:
cmp [eax],dword 3
je exit_edit_box
;events of mouse for EditBox
cmp [eax],dword 6
jne .editbox_exit
mov esi,[eax+4]
mov edi,[eax+8]
mov ecx,[eax+12]
mov [EditBox.mouseX],esi
mov [EditBox.mouseY],edi
mov [ButtonsOfMouse],ecx
mov eax,ecx
test eax,1
jnz .mouse_left_button
and word [EditBox.ed_flags],ed_mouse_on_off
jmp .editbox_exit
.mouse_left_button:
mov eax,[EditBox.mouseX]
shl eax,16
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;”ã­ªæ¨ï ®¡à ¡®âª¨ ¬ë誨 ¯®«ã祭¨¥ ª®®à¤¨­ â ¨ ¯à®¢¥àª  ¨å + ¢ë¤¥«¥­¨ï
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
use_work_mouse ;scr_h,scr_w
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Ž¡é¨¥ ä㭪樨 ®¡à ¡®âª¨
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
use_general_func
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;”㭪樨 ¤«ï à ¡®âë á key
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
use_key_func
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;”㭪樨 ¤«ï à ¡®âë á mouse
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
use_mouse_func ;scr_w
;;;;;;;;;;;;;;;;;;;;;;;;;;
;Ž¡é¨© ¢ë室 ¨§ editbox ¤«ï ¢á¥å ä㭪権 ¨ ¯®áâ ®¡à ¡®â稪®¢
;;;;;;;;;;;;;;;;;;;;;;;;;;
.editbox_exit:
exit_edit_box:
;save resulatat of work in control
mov esi,dword EditBox
mov edi,[PointerForEditBox]
add edi,control_header_size
mov ecx,eb_control_data_size
rep movsb
ret 8

File diff suppressed because it is too large Load Diff

View File

@ -1,160 +0,0 @@
im_control_data_size = 26
im_redraw_all = 10000000b
im_redraw_all_off = 01111111b
;im_special_redraw_on = 00000001b
;im_special_redraw_off = 11111110b
;****************************************************
;*******************craete Image**********************
;****************************************************
;IN
;pointer to parend
;pointer to Image's structure
;OUT
;pointer to initialized Image's structure
align 4
craete_image:
push ebx
push ecx
push edx
push esi
push edi
push ebp
mov ebx,[esp+24+4]
mov eax,[esp+24+8]
mov [PointerToStructureForImage],eax
mov eax,control_header_size+im_control_data_size
call craete_control
;set all image's parameters in control
mov [eax],dword image
mov ecx,im_control_data_size
mov esi,[PointerToStructureForImage]
mov edi,eax
add edi,control_header_size
rep movsb
call get_skin_height
mov ebx,[PointerToStructureForImage]
mov ecx,[ebx+6] ;x
mov edx,[ebx+10] ;y
mov esi,[ebx+14] ;size x
mov edi,[ebx+18] ;size y
add ecx,border_width
add edx,[skin_height]
;copy information to control
mov [eax+24],ecx
mov [eax+28],edx
mov [eax+32],esi
mov [eax+36],edi
pop ebp
pop edi
pop esi
pop edx
pop ecx
pop ebx
ret 8
;****************************************************
;********************Draw Image**********************
;****************************************************
;IN
;pointer to control of button
;message
;OUT
;not returned value
align 4
image:
;get message
mov eax,[esp+8]
;get pointer to control of image
mov esi,[esp+4]
mov [PointerForImage],esi
;copy control to local control
add esi,control_header_size
mov edi,dword Image
mov ecx,im_control_data_size
rep movsb
cmp [eax],dword 1
jne no_redraw_all_image
or [Image.type],im_redraw_all
no_redraw_all_image:
cmp [eax],dword 3
jne no_special_message_image
xor eax,eax
mov al,[Image.type]
and al,activate_trap
test al,al
jz no_activate_redraw_image
and [Image.type],deactivate_trap
or [Image.type],im_redraw_all
no_activate_redraw_image:
no_special_message_image:
;load coordinats and size from control
mov eax,[PointerForImage]
mov ebx,[eax+24] ;x
mov ecx,[eax+28] ;y
mov edx,[eax+32] ;size x
mov esi,[eax+36] ;size y
;set current coordinats and sizes in zakladka
mov [Image.x],ebx
mov [Image.y],ecx
mov [Image.sizex],edx
mov [Image.sizey],esi
xor eax,eax
mov al,[Image.type]
and al,im_redraw_all
test al,al
jz no_redraw_image_
and [Image.type],im_redraw_all_off
mov esi,dword Image
mov edi,[PointerForImage]
add edi,control_header_size
mov ecx,2
rep movsb
mov eax,7
mov ebx,[Image.pointer]
mov ecx,[Image.sizex]
shl ecx,16
add ecx,[Image.sizey]
mov edx,[Image.x]
shl edx,16
add edx,[Image.y]
mcall
no_redraw_image_:
exit_image:
mov edi,[PointerForImage]
add edi,control_header_size
mov esi,dword Image
mov ecx,im_control_data_size
rep movsb
ret 8

View File

@ -1,548 +0,0 @@
;**********************************************************************
; library of Graphics Universal Interface for Kolibri operation system
;
; version 071119
; 2007 year
;
;autors:
;
;andrew_programmer polynki@mail.ru
;
;menegement of controls : destroy_control, send_message,move_component
; resize_component,activate_trap_for_specialized_message
;GUI components : button,scroller,Bookmark,text,image,number,progres_bar
;
;<Lrz> and Maxxxx32
;
;GUI components : CheckBox,EditBox
;
;**********************************************************************
format MS COFF
public EXPORTS
control_header_size = 44
border_width = 5
activate_trap = 01000000b
deactivate_trap = 10111111b
section '.flat' code readable align 16
include 'macros.inc'
include 'debug.inc'
;GUI components
include 'button.inc'
include 'scroller.inc'
include 'bookmark.inc'
include 'image.inc'
include 'text.inc'
include 'number.inc'
include 'check_box.inc'
include 'edit_box.inc'
include 'progress_bar.inc'
;engen of libGUI(menegment of controls)
include 'menegment_of_controls.inc'
;functions which proved work of GUI components
include 'draw.inc'
include 'string.inc'
include 'check_crossing_box.inc'
include 'memory.inc'
;function for get version of library
include 'version.inc'
;function for resize GUI component
include 'resize_component.inc'
;function for move GUI component
include 'move_component.inc'
;function for activate trap for specialized messages
include 'activate_trap.inc'
align 16
EXPORTS:
dd szDestroyControl,destroy_control
dd szSendMessage,send_message
dd szVersion,get_version
dd szResizeComponent,resize_component
dd szMoveComponent,move_component
dd szActivateTrap,activate_trap_for_specialized_message
dd szcraeteButton,craete_button
dd szcraeteScroller,craete_scroller
dd szcraeteBookmark,craete_Bookmark
dd szcraeteImage,craete_image
dd szcraeteText,craete_text
dd szcraeteNumber,craete_number
dd szcraeteCheckBox,craete_check_box
dd szcraeteEditBox,craete_edit_box
dd szcraeteProgressBar,craete_progress_bar
dd 0,0
szDestroyControl db 'DestroyControl',0
szSendMessage db 'SendMessage',0
szVersion db 'Version',0
szResizeComponent db 'ResizeComponent',0
szMoveComponent db 'MoveComponent',0
szActivateTrap db 'ActivateTrapForSpecializedMessage',0
szcraeteButton db 'CraeteButton',0
szcraeteScroller db 'CraeteScroller',0
szcraeteBookmark db 'CraeteBookmark',0
szcraeteImage db 'CraeteImage',0
szcraeteText db 'CraeteText',0
szcraeteNumber db 'CraeteNumber',0
szcraeteCheckBox db 'CraeteCheckbox',0
szcraeteEditBox db 'CraeteEditbox',0
szcraeteProgressBar db 'CraeteProgressbar',0
section '.data' data readable writable align 16
;************************************************
;******************DLL DATA**********************
;************************************************
point db '.',0
signum db '-',0
BitsPerPixel rd 1
BytesPerString rd 1
WindowCoordinatX rd 1
WindowCoordinatY rd 1
WindowSizeX rd 1
WindowSizeY rd 1
PointerToMem rd 1
offset rd 1
v rd 1
v2 rd 1
v3 rd 1
r_min rb 1
r_max rb 1
g_min rb 1
g_max rb 1
b_min rb 1
b_max rb 1
r rb 1
g rb 1
b rb 1
r_f rd 1
g_f rd 1
b_f rd 1
step_r rd 1
step_g rd 1
step_b rd 1
length rd 1
length2 rd 1
Color rd 1
AveregeColor rd 1
line_coordinat_x rd 1
line_coordinat_y rd 1
line_size_x rd 1
line_size_y rd 1
line_size_y_f rd 1
x rd 1
y rd 1
xo rd 1
yo rd 1
x_ctl rd 1
y_ctl rd 1
;ReturnAddresButton rd 1
;ReturnAddresScroller rd 1
;ReturnAddresBookmark rd 1
;ReturnAddresImage rd 1
;ReturnAddresText rd 1
;ReturnAddresNumber rd 1
;ReturnAddresCheckBox rd 1
;ReturnAddresEditBox rd 1
;ReturnAddresProgressBar rd 1
Button_Flag rb 1
Scrollersize rd 1
ControlID rd 1
Message rd 4
Parend rd 1
Control rd 1
ReturnControl rd 1
PointerToControl rd 1
ActiveControl rd 1
ActiveControlForKeys rd 1
ButtonsOfMouse rd 1
PointerToStructureForBookmark rd 1
ParendForBookmark rd 1
PointerToStructureForButton rd 1
ParendForButton rd 1
PointerToStructureForScroller rd 1
ParendForScroller rd 1
PointerToStructureForImage rd 1
PointerToStructureForText rd 1
PointerToStructureForNumber rd 1
PointerToStructureForCheckBox rd 1
PointerToStructureForEditBox rd 1
PointerToStructureForProgressBar rd 1
PointerForButton rd 1
PointerForScroller rd 1
PointerForBookmark rd 1
PointerForImage rd 1
PointerForText rd 1
PointerForNumber rd 1
PointerForCheckBox rd 1
PointerForEditBox rd 1
PointerForProgressBar rd 1
ChisloZakladok rd 1
integer_part rd 1
float_part rd 1
tochnost1 rd 1
tochnost2 rd 1
signum_float_number rb 1
skin_height rd 1
;*********************************
;**********GUI structures*********
;*********************************
;struc CONTROL
;{
; .ctrl_proc rd 0 ;0
; .ctrl_fd rd 0 ;4
; .ctrl_bk rd 0 ;8
; .child_fd rd 0 ;12
; .child_bk rd 0 ;16
; .parend rd 0 ;20
; .x rd 0 ;24
; .y rd 0 ;28
; .sizex rd 0 ;32
; .sizey rd 0 ;36
; .ID rd 0 ;40
;}
struc BUTTON
{
.ctrl_proc rd 1
.ctrl_fd rd 1
.ctrl_bk rd 1
.child_fd rd 1
.child_bk rd 1
.parend rd 1
.ctrl_x rd 1
.ctrl_y rd 1
.ctrl_sizex rd 1
.ctrl_sizey rd 1
.ctrl_ID rd 1
.type rb 1
.flag rb 1
.x rw 1
.y rw 1
.width rw 1
.height rw 1
.image rd 1
.imageX rw 1
.imageY rw 1
.imageSizeX rw 1
.imageSizeY rw 1
.transparentColor rd 1
.text rd 1
.textX rw 1
.textY rw 1
.textcolor rd 1
.color1 rd 1
.color2 rd 1
.mouseX rw 1
.mouseY rw 1
}
struc SCROLLER
{
.ctrl_proc rd 1
.ctrl_fd rd 1
.ctrl_bk rd 1
.child_fd rd 1
.child_bk rd 1
.parend rd 1
.ctrl_x rd 1
.ctrl_y rd 1
.ctrl_sizex rd 1
.ctrl_sizey rd 1
.ctrl_ID rd 1
.type rb 1
.x rw 1
.y rw 1
.length rw 1
.color1 rd 1
.size rd 1
.pos rd 1
.buttons_flags rw 1
.ChildButton1 rd 1
.ChildButton2 rd 1
.mouseX rw 1
.mouseY rw 1
}
;********************************
;*********Child Buttons**********
;********************************
struc CHILDBUTTON
{
.type rb 1
.flag rb 1
.x rw 1
.y rw 1
.width rw 1
.height rw 1
.image rd 1
.imageX rw 1
.imageY rw 1
.imageSizeX rw 1
.imageSizeY rw 1
.transparentColor rd 1
.text rd 1
.textX rw 1
.textY rw 1
.textcolor rd 1
.color1 rd 1
.color2 rd 1
.mouseX rw 1
.mouseY rw 1
}
struc BOOKMARK
{
.type rb 1
.flag rb 1
.x rd 1
.y rd 1
.sizex rd 1
.sizey rd 1
.color1 rd 1
.reserved rd 1
.color2 rd 1
.FullBookmarkSizeX rd 1
.BookmarkSizeX rd 1
.PointerToTextForBookmark rd 1
.BookmarkX rd 1
.BookmarkY rd 1
.ChildButtonsForBookmark rd 1
.CounterChildButtons rd 1
.ChisloZakladok rd 1
.ChisloStrokeZakladok rd 1
.MessageForChildButton rd 5
.ChildControlForBookmark rd 1
.NumberBookmarksInActiveString rd 1
.NumberBookmarksInEndString rd 1
.PointerToActiveBookmarks rd 1
.PointerToEndBookmarks rd 1
.BookmarkFlag rb 1
.y_end_stroke rd 1
.CounterChildControls rd 1
.ActiveChildControl rd 1
.AddresOfActiveChildControl rd 1
.MouseX rd 1
.MouseY rd 1
.DefectSizeX rd 1
.ControlAddres rd 1
.counter1 rd 1
.counter2 rd 1
.NumberActiveControl rd 1
.WorkPlace_x rd 1
.WorkPlace_y rd 1
.WorkPlace_sizex rd 1
.WorkPlace_sizey rd 1
.WorkPlace_windowx rd 1
.WorkPlace_windowsizex rd 1
}
struc IMAGE
{
.type rb 1
.flag rb 1
.color rd 1
.x rd 1
.y rd 1
.sizex rd 1
.sizey rd 1
.pointer rd 1
}
struc TEXT
{
.type rb 1
.flag rb 1
.color rd 1
.x rd 1
.y rd 1
.length rd 1
.pointer rd 1
.background_color rd 1
}
struc NUMBER
{
.type rb 1
.flag rb 1
.color rd 1
.x rd 1
.y rd 1
.number rd 1
.parameters rd 1
}
struc CHECKBOX
{
.ch_flags rw 1
.ch_left rw 1
.ch_top rw 1
.ch_text_margin rd 1
.ch_size rd 1
.ch_size_2 rw 1
.ch_size_3 rw 1
.ch_color rd 1
.ch_border_color rd 1
.ch_text_color rd 1
.ch_text_ptr rd 1
.ch_text_length rw 1
.mouseX rd 1
.mouseY rd 1
}
struc EDITBOX
{
.ed_width rd 1
.ed_left rd 1
.ed_top rd 1
.ed_color rd 1
.shift_color rd 1
.ed_focus_border_color rd 1
.ed_blur_border_color rd 1
.ed_text_color rd 1
.ed_max rd 1
.ed_text rd 1
.ed_flags rw 1
.ed_size rd 1
.ed_pos rd 1
.ed_offset rd 1
.cl_curs_x rd 1
.cl_curs_y rd 1
.ed_shift_pos rd 1
.ed_shift_pos_old rd 1
.ed_height rd 1
.mouseX rd 1
.mouseY rd 1
}
struc PROGRESSBAR
{
.type rb 1
.flag rb 1
.color1 rd 1
.color2 rd 1
.x rd 1
.y rd 1
.sizex rd 1
.sizey rd 1
.progress rd 1
.color3 rd 1
}
;********************************
;*Graphics primitives structures*
;********************************
struc LINE
{
.x1 rd 1
.y1 rd 1
.x2 rd 1
.y2 rd 1
.color rd 1
}
struc PIXEL
{
.x rd 1
.y rd 1
.color rd 1
}
struc FONT1
{
.sizeX rd 6
.sizeY rd 9
.x rd 1
.y rd 1
}
struc RECTANGLE
{
.x rd 1
.y rd 1
.width rd 1
.height rd 1
.color rd 1
}
struc SCROLLBAR
{
.x rd 1
.y rd 1
}
Line LINE
Pixel PIXEL
Font FONT1
Rectangle RECTANGLE
ScrollBar SCROLLBAR
ChildButton CHILDBUTTON
Button BUTTON
Scroller SCROLLER
Bookmark BOOKMARK
Image IMAGE
Text TEXT
Number NUMBER
CheckBox CHECKBOX
EditBox EDITBOX
ProgressBar PROGRESSBAR
pointer rd 50
pointer2 rd 13
IPC_table process_information; rb 1024
colors_table1 rd 15
colors_table2 rd 15

View File

@ -1,269 +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) | (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
dw ? ; +52 - reserved
.client_left dd ? ; +54
.client_top dd ? ; +58
.client_width dd ? ; +62
.client_height dd ? ; +66
.wnd_state db ? ; +70
rb (1024-71)
}
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

View File

@ -1,32 +0,0 @@
;eax - size
;OUT
;eax - pointer
malloc:
push ebx
push ecx
mov ecx,eax
mov eax,68
mov ebx,12
mcall
pop ecx
pop ebx
ret
;eax - pointer
free:
push ebx
push ecx
mov ecx,eax
mov eax,68
mov ebx,13
mcall
pop ecx
pop ebx
ret

View File

@ -1,535 +0,0 @@
;****************************************************************
;***************Elements of menegment for Controls***************
;****************************************************************
;**********************************************************
;********************craete control*************************
;**********************************************************
;IN
;eax - ctructure's size
;ebx - Parend(pointer to structure for parend)
;OUT
;eax - pointer to new control
craete_control:
test eax,eax
jnz no_null_size
mov eax,1
no_null_size:
call malloc
mov [ReturnControl],eax
push ebx ;parend
push eax ;control
call AddObject
mov eax,[ReturnControl]
;information about craete control output to debug board
call new_line
mov [s_p],s_craete
call print_string
debug_print_dec [ReturnControl]
mov [s_p],s_parend
call print_string
debug_print_dec dword[eax+20]
mov [s_p],s_last
call print_string
debug_print_dec dword[eax+4]
;--------------------------------
ret
AddObject:
mov ecx,[esp+4] ;control
mov edx,[esp+8] ;parend
mov eax,[edx+12] ;eax=parend->child_fd
test eax,eax
jnz else_parend_add_object
add [ControlID],1
mov esi,[ControlID]
mov [edx+12],ecx ;Parend->child_fd=control
mov [edx+16],ecx ;Parend->child_bk=control
mov [ecx+20],edx ;control->parend=Parend
mov [ecx+4],edx ;control->ctrl_fd=Parend
mov [ecx+40],esi ;control->ctrl_ID=ID
jmp exit_if_parend_add_object
else_parend_add_object:
add [ControlID],1
mov esi,[ControlID]
mov edi,[edx+16] ;last_control=Parend->child_bk
mov [edx+16],ecx ;Parend->child_bk=control
mov [edi+8],ecx ;last_control->ctrl_bk=control
mov [ecx+4],edi ;control->ctrl_fd=last_control;
mov [ecx+20],edx ;control->parend=Parend;
mov [ecx+40],esi ;control->ctrl_ID=ID
exit_if_parend_add_object:
ret 8
;************************************************************
;***********************Destroy control**********************
;************************************************************
;Delete Control.
;IN
;pointer to control for delete
;OUT
;not returned value
align 4
destroy_control:
push eax
push ebx
push ecx
push edx
push esi
push edi
push ebp
mov eax,[esp+28+4]
mov ebx,[eax+20] ;get parend for control
;checking pointer of control to 0
test eax,eax
jz exit_destroy_control
;checking parend to main parend(parend of window)
;if parend equ main parend than exit
test ebx,ebx
jz exit_destroy_control
mov ecx,[ebx+12] ;Parend->child_fd
test ecx,ecx
jz exit_destroy_control
mov ecx,[ebx+12] ;Parend->child_fd
mov edx,[ebx+16] ;Parend->child_bk
cmp ecx,edx
jne no_if_parend_child_fd_child_bk
cmp ecx,eax
jne no_if_parend_child_fd_control
mov [ebx+12],dword 0 ;Parend->child_fd=0
mov [ebx+16],dword 0 ;Parend->child_bk=0
;send message to control for deleting
push eax
mov [Message],dword -1
mov ebx,[eax] ;load .... for control
push Message
push eax
call ebx
pop eax
push eax
call free
pop eax
call new_line
mov [s_p],s_destroy
call print_string
debug_print_dec eax
mov [s_p],s_1
call print_string
jmp exit_destroy_control
no_if_parend_child_fd_control:
no_if_parend_child_fd_child_bk:
;----------------------------------------------
mov esi,ecx ;seek_control=Parend->child_fd
while_seek_control:
cmp esi,0
je exit_destroy_control
;*******************************************************************
cmp esi,eax
jne no_if_seek_control_control
;***************************************************************
mov edi,[esi+8]
test edi,edi
jz no_if_seek_control_ctrl_bk
;***********************************************************
mov ecx,[esi+4]
mov edx,[esi+8]
mov [edx+4],ecx
cmp ecx,ebx
je no_if_last_control_parend
;*******************************************************
mov [ecx+8],edx
jmp else_seek_control_ctrl_bk
;*******************************************************
no_if_last_control_parend:
mov [ebx+12],edx
jmp else_seek_control_ctrl_bk
;*********************************************************
no_if_seek_control_ctrl_bk:
;**********************************************************
mov ecx,[esi+4] ;last_control=seek_control->ctrl_fd
mov [ecx+8],dword 0 ;last_control->ctrl_bk=0
mov [ebx+16],ecx ;Parend->child_bk=last_control
else_seek_control_ctrl_bk:
;**********************************************************
;send message to control for deleting
push eax
mov [Message],dword -1
mov ebx,[eax] ;load .... for control
push Message
push eax
call ebx
pop eax
push eax
call free
pop eax
call new_line
mov [s_p],s_destroy
call print_string
debug_print_dec eax
mov [s_p],s_2
call print_string
jmp exit_destroy_control
no_if_seek_control_control:
;****************************************************************
mov edi,[esi+8] ;exchange_control=seek_control->ctrl_bk
mov esi,edi ;seek_control=exchange_control
jmp while_seek_control
;*******************************************************************
exit_destroy_control:
pop ebp
pop edi
pop esi
pop edx
pop ecx
pop ebx
pop eax
ret 4
;***********************************************************
;*****************Send message to Control*******************
;***********************************************************
;IN
;pointer to message
;pointer to parend(structure)
;OUT
;not returned value
align 4
send_message:
push eax
push ebx
push ecx
push edx
push esi
push edi
push ebp
;get pointer to parend
mov eax,[esp+28+4]
mov [Parend],eax
;get message
mov esi,[esp+28+8]
mov edi,dword Message
mov ecx,4
rep movsd
;load event type
mov eax,[Message]
;check for event type and get parameters for Control
dec eax
jnz no_window_redraw
mov ebx,[Parend]
mov esi,[ebx+12] ;get pointer to first child control of parend
mov ebx,esi
send_message_for_redraw_to_next_control:
;if esi=0 than exit
test esi,esi
jz exit_check_event_type
push ebx
push esi
mov eax,ebx
mov ebx,[eax] ;load .... for control
push Message
push eax
call ebx
pop esi
pop ebx
mov esi,[ebx+8]
mov ebx,esi
jmp send_message_for_redraw_to_next_control
no_window_redraw:
dec eax
jnz no_keys
;if have active control than send message
;checking for active control
mov ebx,[ActiveControlForKeys]
test ebx,ebx
jz exit_check_event_type
mov eax,[ActiveControlForKeys]
mov ebx,[eax] ;load proc for control
push Message
push eax
call ebx
jmp exit_check_event_type
no_keys:
dec eax
jnz no_special_system_message
mov ebx,[Parend];
mov esi,[ebx+12]
mov ebx,esi
send_special_message_to_next_control:
;if esi=0 than exit
test esi,esi
jz exit_check_event_type
push ebx
push esi
mov eax,ebx
mov ebx,[eax] ;load .... for control
push Message
push eax
call ebx
pop esi
pop ebx
mov esi,[ebx+8]
mov ebx,esi
jmp send_special_message_to_next_control
no_special_system_message:
;*************************************************
;****************Mouse send message***************
;*************************************************
cmp eax,3
jne no_mouse
;check childrens of parend for crossing
mov ebx,[Parend]
mov esi,[ebx+12] ;esi =first child control
mov ebx,esi ;ebx =first child control
mov eax,[Message+12]
and eax,1b
test eax,eax
jz left_button_of_mouse_not_pressed
mov eax,[ActiveControl]
test eax,eax
jz havent_active_control
mov eax,[ActiveControl]
mov ebx,[eax] ;load proc for control
push Message
push eax
call ebx
jmp exit_check_event_type
havent_active_control:
jmp exit_if_left_button_of_mouse__pressed
left_button_of_mouse_not_pressed:
mov eax,[ActiveControl]
test eax,eax
jz havent_active_control_
mov [ActiveControl],dword 0
havent_active_control_:
exit_if_left_button_of_mouse__pressed:
next_conrol_check_for_crossing_with_mouse:
test esi,esi
jz exit_next_conrol_check_for_crossing_with_mouse
mov [PointerToControl],ebx
push ebx
push esi
mov eax,[ebx+28] ;eax = y coordinat of control
mov [y_ctl],eax
mov eax,[ebx+24] ;eax = x coordinat of control
mov ecx,[ebx+32] ;ecx = size x of control
mov edx,[ebx+36] ;edx = size y of control
mov esi,[Message+4] ;mouse x
mov edi,[Message+8] ;mouse y
mov ebx,[y_ctl]
call CheckCrossingBox
cmp eax,0xffffff
jne no_activate_control
mov eax,[Message+12]
and eax,1b
test eax,eax
jz no_activate_control
mov eax,[PointerToControl]
mov [ActiveControl],eax
mov [ActiveControlForKeys],eax
no_activate_control:
mov eax,[PointerToControl]
mov ebx,[eax] ;load proc for control
push Message
push eax
call ebx
pop esi
pop ebx
mov esi,[ebx+8] ;16 but not 8
mov ebx,esi
jmp next_conrol_check_for_crossing_with_mouse
exit_next_conrol_check_for_crossing_with_mouse:
no_mouse:
exit_check_event_type:
pop ebp
pop edi
pop esi
pop edx
pop ecx
pop ebx
pop eax
ret 8
new_line:
pushad
mov eax,63
mov ebx,1
xor ecx,ecx
mov cl,13
int 0x40
mov eax,63
mov ebx,1
xor ecx,ecx
mov cl,10
int 0x40
popad
ret
print_string:
pushad
xor esi,esi
next_symbol_print:
mov edi,[s_p]
add edi,esi
xor edx,edx
mov dl,byte[edi]
test dl,dl
jz exit_print_str
mov eax,63
mov ebx,1
xor ecx,ecx
mov cl,byte[edi]
int 0x40
inc esi
jmp next_symbol_print
exit_print_str:
popad
ret
s_p dd 0
s_craete db 'craete ',0
s_destroy db 'destroy ',0
s_parend db ' parend ',0
s_last db ' ctrl_fd ',0
s_next db ' ctrl_bk ',0
s_1 db ' 1',0
s_2 db ' 2',0

View File

@ -1,34 +0,0 @@
;****************************************************
;*****************move of GUI component**************
;****************************************************
;IN
;MoveComponent(dword Parend,dword Control,dword newx,dword newy)
;newy
;newx
;Control
;Parend
;OUT
;not
align 4
move_component:
push ebx
push ecx
push edx
push ebp
mov ebx,[esp+16+4] ;Control
mov ecx,[esp+16+8] ;new x
mov edx,[esp+16+12] ;new y
mov [ebx+24],ecx
mov [ebx+28],edx
pop ebp
pop edx
pop ecx
pop ebx
ret 12

View File

@ -1,397 +0,0 @@
nm_control_data_size = 22
nm_redraw_all = 10000000b
nm_redraw_off = 01111111b
;nm_special_redraw_on = 00000100b
;nm_special_redraw_off = 11111011b
nm_integer_type = 00000010b
nm_no_show_number = 00000001b
;****************************************************
;********************craete Number**********************
;****************************************************
;IN
;pointer to parend
;pointer to Number's structure
;OUT
;pointer to initialized Number's structure
align 4
craete_number:
push ebx
push ecx
push edx
push esi
push edi
push ebp
mov ebx,[esp+24+4]
mov eax,[esp+24+8]
mov [PointerToStructureForNumber],eax
mov eax,control_header_size+nm_control_data_size
call craete_control
;set all image's parameters in control
mov [eax],dword number
mov ecx,nm_control_data_size
mov esi,[PointerToStructureForNumber]
mov edi,eax
add edi,control_header_size
rep movsb
call get_skin_height
mov ebx,[PointerToStructureForNumber]
mov ecx,[ebx+6] ;x
mov edx,[ebx+10] ;y
add ecx,border_width
add edx,[skin_height]
;copy information to control
mov [eax+24],ecx
mov [eax+28],edx
pop ebp
pop edi
pop esi
pop edx
pop ecx
pop ebx
ret 8
;****************************************************
;********************Draw Number*********************
;****************************************************
;IN
;pointer to control of number
;message
;OUT
;not returned value
align 4
number:
;get message
mov eax,[esp+8]
;get pointer to control of image
mov esi,[esp+4]
mov [PointerForNumber],esi
;copy control to local control
add esi,control_header_size
mov edi,dword Number
mov ecx,nm_control_data_size
rep movsb
cmp [eax],dword 1
jne no_redraw_all_number
xor ebx,ebx
mov bl,[Number.type]
and bl,nm_no_show_number
test bl,bl
jnz no_redraw_all_number
or [Number.type],nm_redraw_all
no_redraw_all_number:
cmp [eax],dword 3
jne no_special_message_for_number
xor ebx,ebx
mov bl,[Number.type]
and bl,activate_trap
test bl,bl
jz no_special_message_for_number
or [Number.type],nm_redraw_all
and [Number.type],deactivate_trap
no_special_message_for_number:
cmp [eax],dword -1
jne no_destroy_control_of_number
jmp exit_number
no_destroy_control_of_number:
;load coordinats and size from control
mov eax,[PointerForNumber]
mov ebx,[eax+24] ;x
mov ecx,[eax+28] ;y
;set current coordinats and sizes in zakladka
mov [Number.x],ebx
mov [Number.y],ecx
xor eax,eax
mov al,[Number.type]
and al,nm_redraw_all
test al,al
jz no_redraw_number_
and [Number.type],nm_redraw_off
mov esi,dword Number
mov edi,[PointerForNumber]
add edi,control_header_size
mov ecx,2
rep movsb
;get standart colors table
mov eax,48
mov ebx,3
mov ecx,dword pointer2
mov edx,40
mcall
xor eax,eax
mov al,[Number.type]
and al,nm_integer_type
test al,al
jnz no_integer_number
mov eax,47
mov ebx,[Number.parameters]
mov ecx,[Number.number]
mov edx,[Number.x]
shl edx,16
add edx,[Number.y]
mov esi,[Number.color]
mov edi,[pointer2+8]
mcall
jmp no_redraw_number_
no_integer_number:
;---------------------------------------
mov ebx,[Number.parameters]
mov ecx,ebx
shr ebx,16 ;format for integer
and ecx,0xffff ;format for float
;get integer part of float number
mov eax,1
mov edi,ecx
pow_10__:
;eax=eax*10
lea eax,[eax+eax*4]
shl eax,1
dec edi
jnz pow_10__
mov edx,eax
;check for signum
mov [v2],0
fld [Number.number]
fcom [v2]
fstsw ax
sahf
jae no_signum_float_number
fabs
mov [signum_float_number],byte 1
no_signum_float_number:
fstp [Number.number]
mov [v2],edx ;v2=10^ecx
fild [v2]
fld [Number.number]
fmul st0,st1
fistp [v]
fstp st0
mov esi,edx
mov eax,[v]
cdq
idiv esi
mov [v],eax
and [integer_part],0
and [tochnost1],0
;save v in v2
mov eax,[v]
mov [v2],eax
mov [Number.flag],0
mov esi,ebx
get_next_razryd_of_number_integer:
mov eax,1
mov edi,esi
pow_10_integer:
;eax=eax*10
lea eax,[eax+eax*4]
shl eax,1
dec edi
jnz pow_10_integer
mov edi,eax
mov eax,[v]
cdq
idiv edi
and eax,0xf
test eax,eax
jz no_save_pos_for_integer
cmp [Number.flag],0
jne no_save_pos_for_integer
mov [Number.flag],1b
mov [tochnost1],esi
add [tochnost1],1
no_save_pos_for_integer:
imul eax,edi
sub [v],eax
add [integer_part],eax
dec esi
jnz get_next_razryd_of_number_integer
mov eax,[v]
add [integer_part],eax
cmp [tochnost1],0
jnz all_ok_with_tochnost
mov [tochnost1],1
all_ok_with_tochnost:
;get float part of float number
mov eax,[v2]
mov [v],eax
mov eax,1
mov edi,ecx
pow_10_float__:
;eax=eax*10
lea eax,[eax+eax*4]
shl eax,1
dec edi
jnz pow_10_float__
mov [v2],eax ;v2=10^ecx
fild [v2]
fild [v]
fld [Number.number]
fsub st0,st1
fmul st0,st2
fistp [v]
fstp st0
fstp st0
and [float_part],0
mov esi,ecx
get_next_razryd_of_number_float:
mov eax,1
mov edi,esi
pow_10_float:
;eax=eax*10
lea eax,[eax+eax*4]
shl eax,1
dec edi
jnz pow_10_float
mov edi,eax
mov eax,[v]
cdq
idiv edi
and eax,0xf
imul eax,edi
sub [v],eax
add [float_part],eax
dec esi
jnz get_next_razryd_of_number_float
mov eax,[v]
add [float_part],eax
mov [tochnost2],ecx
cmp [signum_float_number],byte 1
jne no_draw_signum_for_float_number
;draw signum
mov eax,4
mov ebx,[Number.x]
mov ecx,[Number.color]
mov edx,dword signum
mov esi,1
mov edi,[pointer2+8]
shl ebx,16
add ebx,[Number.y]
mcall
add [Number.x],6
mov [signum_float_number],0
no_draw_signum_for_float_number:
;draw integer part of float number
mov eax,47
mov ebx,[tochnost1]
mov ecx,[integer_part]
mov edx,[Number.x]
mov esi,[Number.color]
mov edi,[pointer2+8]
shl edx,16
shl ebx,16
add edx,[Number.y]
mcall
mov edx,[tochnost1]
add edx,1
lea edx,[edx+edx*2]
shl edx,1 ;edx=edx*6
add edx,[Number.x]
mov [x],edx
;draw float part of float number
mov eax,47
mov ebx,[tochnost2]
mov ecx,[float_part]
mov esi,[Number.color]
mov edi,[pointer2+8]
shl edx,16
shl ebx,16
add edx,[Number.y]
mcall
;draw point betwen integer part of number and float part of number
mov eax,4
mov ebx,[x]
mov ecx,[Number.color]
mov edx,dword point
mov esi,1
mov edi,[pointer2+8]
sub ebx,6
shl ebx,16
add ebx,[Number.y]
mcall
no_redraw_number_:
;-----------------------------------------
exit_number:
ret 8

View File

@ -1,484 +0,0 @@
pb_control_data_size = 34
pb_redraw_all = 10000000b
pb_redraw_all_off = 01111111b
;pb_special_progress_on = 00000001b
;pb_special_progress_off = 11111110b
;****************************************************
;****************craete ProgressBar********************
;****************************************************
;IN
;pointer to parend
;pointer to ProgressBar's structure
;OUT
;pointer to initialized control
align 4
craete_progress_bar:
push ebx
push ecx
push edx
push esi
push edi
push ebp
mov ebx,[esp+24+4]
mov eax,[esp+24+8]
mov [PointerToStructureForProgressBar],eax
mov eax,control_header_size+pb_control_data_size
call craete_control
;set all EditBox's parameters in control
mov [eax],dword progress_bar
mov ecx,pb_control_data_size
mov esi,[PointerToStructureForProgressBar]
mov edi,eax
add edi,control_header_size
rep movsb
call get_skin_height
mov ebx,[PointerToStructureForProgressBar]
mov ecx,[ebx+10] ;x
mov edx,[ebx+14] ;y
mov esi,[ebx+18] ;size x
mov edi,[ebx+22] ;size y
add ecx,border_width
add edx,[skin_height]
;copy information to control
mov [eax+24],ecx
mov [eax+28],edx
mov [eax+32],esi
mov [eax+36],edi
pop ebp
pop edi
pop esi
pop edx
pop ecx
pop ebx
ret 8
;****************************************************
;*****************Draw ProgressBar********************
;****************************************************
;IN
;pointer to control of ProgressBar
;message
;OUT
;not returned value
align 4
progress_bar:
;get message
mov eax,[esp+8]
;get pointer to control of button
mov esi,[esp+4]
mov [PointerForProgressBar],esi
;copy control to local control
add esi,control_header_size
mov edi,dword ProgressBar
mov ecx,pb_control_data_size
rep movsb
push eax
;load coordinats and size from control
mov eax,[PointerForProgressBar]
mov ebx,[eax+24] ;x
mov ecx,[eax+28] ;y
mov edx,[eax+32] ;size x
mov esi,[eax+36] ;size y
;set current coordinats and sizes in EeditBox
mov [ProgressBar.x],ebx
mov [ProgressBar.y],ecx
mov [ProgressBar.sizex],edx
mov [ProgressBar.sizey],esi
pop eax
cmp [eax],dword -1
jne no_destroy_progress_bar
jmp exit_progress_bar
no_destroy_progress_bar:
cmp [eax],dword 1
jne no_redraw_all_progress_bar
or [ProgressBar.type],pb_redraw_all
no_redraw_all_progress_bar:
cmp [eax],dword 3
jne no_special_message_progress_bar
xor eax,eax
mov al,[ProgressBar.type]
and al,activate_trap
test al,al
jz no_draw_progress_bar
and [ProgressBar.type],deactivate_trap
cmp [ProgressBar.progress],dword 0.02
jae nofull_redraw
call draw_all_progress_bar
nofull_redraw:
call draw_progress
no_draw_progress_bar:
jmp exit_progress_bar
no_special_message_progress_bar:
xor eax,eax
mov al,[ProgressBar.type]
and al,pb_redraw_all
test al,al
jz no_draw_all_progress_bar
and [ProgressBar.type],pb_redraw_all_off
call draw_all_progress_bar
jmp exit_progress_bar
no_draw_all_progress_bar:
exit_progress_bar:
mov edi,[PointerForProgressBar]
add edi,control_header_size
mov esi,dword ProgressBar
mov ecx,pb_control_data_size
rep movsb
ret 8
draw_all_progress_bar:
mov eax,[ProgressBar.color3]
mov ebx,dword 0xffffff
mov ecx,20
mov edx,dword colors_table1
call gradient
mov eax,13
mov ebx,[ProgressBar.x]
mov ecx,[ProgressBar.y]
mov edx,[ProgressBar.color1]
shl ebx,16
shl ecx,16
add ebx,[ProgressBar.sizex]
add ecx,[ProgressBar.sizey]
mcall
mov eax,[ProgressBar.x]
mov ebx,[ProgressBar.y]
add eax,[ProgressBar.sizex]
add ebx,[ProgressBar.sizey]
mov [v],eax ;v=x+sizex
mov [v2],ebx ;v2=y+sizey
;dark lines
mov eax,[ProgressBar.color3]
and eax,0xffffff
mov [Line.color],eax
mov [Pixel.color],eax
;(x+1,y)-(x+sizex-1,y)
mov eax,[ProgressBar.x]
mov ebx,[ProgressBar.y]
mov ecx,[v]
add eax,1
sub ecx,1
mov [Line.x1],eax
mov [Line.x2],ecx
mov [Line.y1],ebx
mov [Line.y2],ebx
call DrawLine
;(x+sizex,y+1)-(x+sizex,y+sizey-1)
mov eax,[v]
mov ebx,[v2]
mov ecx,[ProgressBar.y]
add ecx,1
sub ebx,1
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ecx
mov [Line.y2],ebx
call DrawLine
;(x+1,y+sizey)-(x+sizex-1,y+sizey)
mov eax,[ProgressBar.x]
mov ebx,[v]
mov ecx,[v2]
add eax,1
sub ebx,1
mov [Line.x1],eax
mov [Line.x2],ebx
mov [Line.y1],ecx
mov [Line.y2],ecx
call DrawLine
;(x,y+1)-(x,y_sizey-1)
mov eax,[ProgressBar.x]
mov ebx,[ProgressBar.y]
mov ecx,[v2]
add ebx,1
sub ecx,1
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ecx
call DrawLine
;(x+1,y+1)-(x+1,y+2)
mov eax,[ProgressBar.x]
mov ebx,[ProgressBar.y]
mov ecx,ebx
add eax,1
add ebx,1
add ecx,2
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ecx
call DrawLine
;(x+2,y+1)
mov eax,[ProgressBar.x]
mov ebx,[ProgressBar.y]
add eax,2
add ebx,1
mov [Pixel.x],eax
mov [Pixel.y],ebx
call DrawPixel
;(x+1,y+sizey-1)-(x+1,y+sizey-2)
mov eax,[ProgressBar.x]
mov ebx,[v2]
mov ecx,ebx
add eax,1
sub ebx,1
sub ecx,2
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ecx
call DrawLine
;(x+2,y+sizey-1)
mov eax,[ProgressBar.x]
mov ebx,[v2]
add eax,2
sub ebx,1
mov [Pixel.x],eax
mov [Pixel.y],ebx
call DrawPixel
;(x+sizex-1,y+1)-(x+sizex-1,y+2)
mov eax,[v]
mov ebx,[ProgressBar.y]
mov ecx,ebx
sub eax,1
add ebx,1
add ecx,2
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ecx
call DrawLine
;(x+sizex-2,y+1)
mov eax,[v]
mov ebx,[ProgressBar.y]
sub eax,2
add ebx,1
mov [Pixel.x],eax
mov [Pixel.y],ebx
call DrawPixel
;(x+sizex-1,y+sizey-2)-(x+sizex-1,y+sizey-1)
mov eax,[v]
mov ebx,[v2]
mov ecx,ebx
sub eax,1
sub ebx,2
sub ecx,1
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ecx
call DrawLine
;(x+sizex-2,y+sizey-1)
mov eax,[v]
mov ebx,[v2]
sub eax,2
sub ebx,1
mov [Pixel.x],eax
mov [Pixel.y],ebx
call DrawPixel
mov eax,[colors_table1+10*3]
and eax,0xffffff
mov [Line.color],eax
mov [Pixel.color],eax
;(x+3,y+1)-(x+sizex-3,y+1)
mov eax,[ProgressBar.x]
mov ebx,[v]
mov ecx,[ProgressBar.y]
add ecx,1
add eax,3
sub ebx,3
mov [Line.x1],eax
mov [Line.x2],ebx
mov [Line.y1],ecx
mov [Line.y2],ecx
call DrawLine
;(x+2,y+2)
mov eax,[ProgressBar.x]
mov ebx,[ProgressBar.y]
add eax,2
add ebx,2
mov [Pixel.x],eax
mov [Pixel.y],ebx
call DrawPixel
;(x+sizex-1,y+3)-(x+sizex-1,y+sizey-3)
mov eax,[v]
mov ebx,[v2]
mov ecx,[ProgressBar.y]
sub eax,1
sub ebx,3
add ecx,3
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ecx
mov [Line.y2],ebx
call DrawLine
;(x+sizex-2,y+2)
mov eax,[v]
mov ebx,[ProgressBar.y]
sub eax,2
add ebx,2
mov [Pixel.x],eax
mov [Pixel.y],ebx
call DrawPixel
;(x+3,y+sizey-1)-(x+sizex-3,y+sizey-1)
mov eax,[ProgressBar.x]
mov ebx,[v]
mov ecx,[v2]
sub ebx,3
sub ecx,1
add eax,3
mov [Line.x1],eax
mov [Line.x2],ebx
mov [Line.y1],ecx
mov [Line.y2],ecx
call DrawLine
;(x+sizex-2,y+sizey-2)
mov eax,[v]
mov ebx,[v2]
sub eax,2
sub ebx,2
mov [Pixel.x],eax
mov [Pixel.y],ebx
call DrawPixel
;(x+1,y+3)-(x+1,y+sizey-3)
mov eax,[ProgressBar.x]
mov ebx,[ProgressBar.y]
mov ecx,[v2]
add eax,1
add ebx,3
sub ecx,3
mov [Line.x1],eax
mov [Line.x2],eax
mov [Line.y1],ebx
mov [Line.y2],ecx
call DrawLine
;(x+2,y+sizey-2)
mov eax,[ProgressBar.x]
mov ebx,[v2]
add eax,2
sub ebx,2
mov [Pixel.x],eax
mov [Pixel.y],ebx
call DrawPixel
ret
draw_progress:
cmp [ProgressBar.progress],dword 0.02
jae min_size_ok
mov [ProgressBar.progress],dword 0.02
min_size_ok:
cmp [ProgressBar.progress],dword 1.0
jle max_size_ok
mov [ProgressBar.progress],dword 1.0
max_size_ok:
mov eax,[ProgressBar.sizex]
sub eax,6
mov [v2],eax
fld [ProgressBar.progress]
fild [v2]
fmul st0,st1
fistp [v3]
fstp st0
mov eax,[ProgressBar.color2]
mov ebx,0xffffff
mov ecx,[ProgressBar.x]
mov edx,[ProgressBar.y]
mov esi,[v3]
mov edi,[ProgressBar.sizey]
sub edi,4
shr edi,1
add ecx,3
add edx,1
call rectangle_gradient_up
mov eax,[ProgressBar.color2]
mov ebx,0xffffff
mov ecx,[ProgressBar.x]
mov edx,[ProgressBar.y]
mov esi,[v3]
mov edi,[ProgressBar.sizey]
sub edi,4
shr edi,1
add ecx,3
add edx,2
add edx,edi
call rectangle_gradient_down
ret

View File

@ -1,34 +0,0 @@
;****************************************************
;***************Resize of GUI component**************
;****************************************************
;IN
;ResizeComponent(dword Parend,dword Control,dword newx,dword newy)
;newy
;newx
;Control
;Parend
;OUT
;not
align 4
resize_component:
push ebx
push ecx
push edx
push ebp
mov ebx,[esp+16+4] ;Control
mov ecx,[esp+16+8] ;new size x
mov edx,[esp+16+12] ;new size y
mov [ebx+32],ecx
mov [ebx+36],edx
pop ebp
pop edx
pop ecx
pop ebx
ret 12

File diff suppressed because it is too large Load Diff

View File

@ -1,19 +0,0 @@
;ebx - pointer to string
GetLengthString:
xor ecx,ecx
next_simvol:
inc ecx
xor eax,eax
mov al,[ebx]
test al,al
jz null
inc ebx
jmp next_simvol
null:
mov eax,ecx
dec eax
ret

View File

@ -1,180 +0,0 @@
; Macroinstructions for defining data structures
macro struct name
{ fields@struct equ name
match child parent, name \{ fields@struct equ child,fields@\#parent \}
sub@struct equ
struc db [val] \{ \common fields@struct equ fields@struct,.,db,<val> \}
struc dw [val] \{ \common fields@struct equ fields@struct,.,dw,<val> \}
struc du [val] \{ \common fields@struct equ fields@struct,.,du,<val> \}
struc dd [val] \{ \common fields@struct equ fields@struct,.,dd,<val> \}
struc dp [val] \{ \common fields@struct equ fields@struct,.,dp,<val> \}
struc dq [val] \{ \common fields@struct equ fields@struct,.,dq,<val> \}
struc dt [val] \{ \common fields@struct equ fields@struct,.,dt,<val> \}
struc rb count \{ fields@struct equ fields@struct,.,db,count dup (?) \}
struc rw count \{ fields@struct equ fields@struct,.,dw,count dup (?) \}
struc rd count \{ fields@struct equ fields@struct,.,dd,count dup (?) \}
struc rp count \{ fields@struct equ fields@struct,.,dp,count dup (?) \}
struc rq count \{ fields@struct equ fields@struct,.,dq,count dup (?) \}
struc rt count \{ fields@struct equ fields@struct,.,dt,count dup (?) \}
macro db [val] \{ \common \local anonymous
fields@struct equ fields@struct,anonymous,db,<val> \}
macro dw [val] \{ \common \local anonymous
fields@struct equ fields@struct,anonymous,dw,<val> \}
macro du [val] \{ \common \local anonymous
fields@struct equ fields@struct,anonymous,du,<val> \}
macro dd [val] \{ \common \local anonymous
fields@struct equ fields@struct,anonymous,dd,<val> \}
macro dp [val] \{ \common \local anonymous
fields@struct equ fields@struct,anonymous,dp,<val> \}
macro dq [val] \{ \common \local anonymous
fields@struct equ fields@struct,anonymous,dq,<val> \}
macro dt [val] \{ \common \local anonymous
fields@struct equ fields@struct,anonymous,dt,<val> \}
macro rb count \{ \local anonymous
fields@struct equ fields@struct,anonymous,db,count dup (?) \}
macro rw count \{ \local anonymous
fields@struct equ fields@struct,anonymous,dw,count dup (?) \}
macro rd count \{ \local anonymous
fields@struct equ fields@struct,anonymous,dd,count dup (?) \}
macro rp count \{ \local anonymous
fields@struct equ fields@struct,anonymous,dp,count dup (?) \}
macro rq count \{ \local anonymous
fields@struct equ fields@struct,anonymous,dq,count dup (?) \}
macro rt count \{ \local anonymous
fields@struct equ fields@struct,anonymous,dt,count dup (?) \}
macro union \{ fields@struct equ fields@struct,,union,<
sub@struct equ union \}
macro struct \{ fields@struct equ fields@struct,,substruct,<
sub@struct equ substruct \}
virtual at 0 }
macro ends
{ match , sub@struct \{ restruc db,dw,du,dd,dp,dq,dt
restruc rb,rw,rd,rp,rq,rt
purge db,dw,du,dd,dp,dq,dt
purge rb,rw,rd,rp,rq,rt
purge union,struct
match name=,fields,fields@struct \\{ fields@struct equ
make@struct name,fields
fields@\\#name equ fields \\}
end virtual \}
match any, sub@struct \{ fields@struct equ fields@struct> \}
restore sub@struct }
macro make@struct name,[field,type,def]
{ common
if $
display 'Error: definition of ',`name,' contains illegal instructions.',0Dh,0Ah
err
end if
local define
define equ name
forward
local sub
match , field \{ make@substruct type,name,sub def
define equ define,.,sub, \}
match any, field \{ define equ define,.#field,type,<def> \}
common
match fields, define \{ define@struct fields \} }
macro define@struct name,[field,type,def]
{ common
local list
list equ
forward
if ~ field eq .
name#field type def
sizeof.#name#field = $ - name#field
else
rb sizeof.#type
end if
local value
match any, list \{ list equ list, \}
list equ list <value>
common
sizeof.#name = $
restruc name
match values, list \{
struc name value \\{
match any, fields@struct \\\{ fields@struct equ fields@struct,.,name,<values> \\\}
match , fields@struct \\\{ label .
forward
match , value \\\\{ field type def \\\\}
match any, value \\\\{ field type value
if ~ field eq .
rb sizeof.#name#field - ($-field)
end if \\\\}
common \\\} \\} \} }
macro enable@substruct
{ macro make@substruct substruct,parent,name,[field,type,def]
\{ \common
\local define
define equ parent,name
\forward
\local sub
match , field \\{ match any, type \\\{ enable@substruct
make@substruct type,name,sub def
purge make@substruct
define equ define,.,sub, \\\} \\}
match any, field \\{ define equ define,.\#field,type,<def> \\}
\common
match fields, define \\{ define@\#substruct fields \\} \} }
enable@substruct
macro define@union parent,name,[field,type,def]
{ common
virtual at 0
forward
if ~ field eq .
virtual at 0
parent#field type def
sizeof.#parent#field = $ - parent#field
end virtual
if sizeof.#parent#field > $
rb sizeof.#parent#field - $
end if
else if sizeof.#type > $
rb sizeof.#type - $
end if
common
sizeof.#name = $
end virtual
struc name [value] \{ \common
label .\#name
last@union equ
forward
match any, last@union \\{ virtual at .\#name
field type def
end virtual \\}
match , last@union \\{ match , value \\\{ field type def \\\}
match any, value \\\{ field type value \\\} \\}
last@union equ field
common rb sizeof.#name - ($ - .\#name) \} }
macro define@substruct parent,name,[field,type,def]
{ common
virtual at 0
forward
if ~ field eq .
parent#field type def
sizeof.#parent#field = $ - parent#field
else
rb sizeof.#type
end if
local value
common
sizeof.#name = $
end virtual
struc name value \{
label .\#name
forward
match , value \\{ field type def \\}
match any, value \\{ field type value
if ~ field eq .
rb sizeof.#parent#field - ($-field)
end if \\}
common \} }

View File

@ -1,183 +0,0 @@
tx_control_data_size = 26
tx_no_show_text = 00000001b
tx_text_and_background = 00000010b
tx_redraw_all = 10000000b
tx_redraw_all_off = 01111111b
;tx_special_redraw_on = 00000100b
;tx_special_redraw_off = 11111011b
;****************************************************
;********************craete Text**********************
;****************************************************
;IN
;pointer to parend
;pointer to Text's structure
;OUT
;pointer to initialized Texr's structure
align 4
craete_text:
push ebx
push ecx
push edx
push esi
push edi
push ebp
mov ebx,[esp+24+4]
mov eax,[esp+24+8]
mov [PointerToStructureForText],eax
mov eax,control_header_size+tx_control_data_size
call craete_control
;set all image's parameters in control
mov [eax],dword text
mov ecx,tx_control_data_size
mov esi,[PointerToStructureForText]
mov edi,eax
add edi,control_header_size
rep movsb
call get_skin_height
mov ebx,[PointerToStructureForText]
mov ecx,[ebx+6] ;x
mov edx,[ebx+10] ;y
mov esi,[ebx+14] ;length x
imul esi,6
add ecx,border_width
add edx,[skin_height]
;copy information to control
mov [eax+24],ecx
mov [eax+28],edx
mov [eax+32],esi
mov [eax+36],dword 9
pop ebp
pop edi
pop esi
pop edx
pop ecx
pop ebx
ret 8
;****************************************************
;********************Draw Text**********************
;****************************************************
;IN
;pointer to control of text
;message
;OUT
;not returned value
align 4
text:
;get message
mov eax,[esp+8]
;get pointer to control of image
mov esi,[esp+4]
mov [PointerForText],esi
;copy control to local control
add esi,control_header_size
mov edi,dword Text
mov ecx,tx_control_data_size
rep movsb
cmp [eax],dword 1
jne no_redraw_all_text
xor ebx,ebx
mov bl,[Text.type]
and bl,tx_no_show_text
test bl,bl
jnz no_redraw_all_text
or [Text.type],tx_redraw_all
no_redraw_all_text:
cmp [eax],dword 3
jne no_special_message_for_text
xor ebx,ebx
mov bl,[Text.type]
and bl,activate_trap
test bl,bl
jz no_special_message_for_text
or [Text.type],tx_redraw_all
and [Text.type],deactivate_trap
no_special_message_for_text:
;load coordinats and size from control
mov eax,[PointerForText]
mov ebx,[eax+24] ;x
mov ecx,[eax+28] ;y
;set current coordinats and sizes in zakladka
mov [Text.x],ebx
mov [Text.y],ecx
;get standart colors table
mov eax,48
mov ebx,3
mov ecx,dword pointer2
mov edx,40
mcall
xor eax,eax
mov al,[Text.type]
and al,tx_redraw_all
test al,al
jz no_redraw_text_
and [Text.type],tx_redraw_all_off
mov esi,dword Text
mov edi,[PointerForText]
add edi,control_header_size
mov ecx,2
rep movsb
mov ecx,[Text.color]
xor eax,eax
mov al,[Text.type]
and al,tx_text_and_background
test al,al
jz no_background_color
mov edi,[Text.background_color]
or ecx,01000000000000000000000000000000b
no_background_color:
mov eax,4
mov ebx,[Text.x]
shl ebx,16
add ebx,[Text.y]
mov edx,[Text.pointer]
mov esi,[Text.length]
mcall
no_redraw_text_:
exit_text:
mov edi,[PointerForText]
add edi,control_header_size
mov esi,dword Text
mov ecx,tx_control_data_size
rep movsb
ret 8

View File

@ -1,16 +0,0 @@
;****************************************************
;****************get version of library**************
;****************************************************
;IN
;not
;OUT
;version of library
;fersion format year:mouth:day
align 4
get_version:
xor eax,eax
mov eax,dword 080204 ;4.02.08
ret

View File

@ -1,100 +0,0 @@
4.02.08
RUSSIAN
Äîáàâëåíî ñîõðàíåíèå ðåãèñòðîâ ïîñëå âõîäà â ôóíêöèè: SendMessage() , DestroyControl().
ENGLISH
Save of registers after an entrance in function is added: SendMessage (), DestroyControl ().
31.01.08
RUSSIAN
Äîáàâëåíî ñîõðàíåíèå ðåãèñòðîâ ïîñëå âõîäà â ôóíêöèè libGUI.
ENGLISH
Save of registers after an entrance in function libGUI is added.
16.12.07
RUSSIAN
Èñïðàâëåíû îøèáêè â êîíòðîëàõ: ProgressBar, Text, Image.
ENGLISH
Mistakes in controls are corrected: ProgressBar, Text, Image.
28.11.07
RUSSIAN
Äîáàâëåíà ïîääåðæêà ôîíîâîãî öâåòà äëÿ control-à Text.
ENGLISH
Support of background color for control Text is added.
19.11.07
RUSSIAN
Ôóíêöèÿ RemoveComponent ïåðåèìåíîâàíà â MoveComponent.
Äîáàâëåíà íîâàÿ ôóíêöèÿ.
void ActivateTrapForSpecializedMessage(dword *control) - àêòèâèðîâàòü ëîâóøêó äëÿ ñïåöèàëèçèðîâàííûõ ñîîáùåíèé.
ENGLISH
Function RemoveComponent is renamed in MoveComponent.
New function is added.
void ActivateTrapForSpecializedMessage (dword *control) - to activate a trap for the specialized messages.
15.10.07
RUSSIAN
Âûøëà íîâàÿ âåðñèÿ áèáëèîòåêè libGUI.
×òî íîâîãî â ýòîé âåðñèè:
1) Ïåðåäà÷à ïàðàìåòðîâ ôóíêöèÿì áèáëèîòåêè ïåðåïèñàíà íà êîíâåíöèþ stdcall.
2)Òåïåðü ôóíêöèè ëèíêóþòñÿ ïî èìåíàì.
3)Òåïåðü, åñëè íàâåñòè ìûøü íà êîìïîíåíò è íàæàòü ëåâóþ êíîïêó ìûøè, òî âñå ñîîáùåíèÿ îò
ìûøè ïîñûëàþòñÿ òîëüêî ýòîìó êîìïîíåíòó.Åñëè îòïóñòèòü ëåâóþ êíîïêó ìûøè, òî ñîîáùåíèÿ îò
ìûøè âíîâü ñòàíîâÿòñÿ äîñòóïíûìè äëÿ âñåõ êîìïîíåíòîâ.
4) Â áèáëèîòåêó äîáàâëåíû íîâûå ôóíêöèè.
int Version(void) - ïîëó÷èòü âåðñèþ áèáëèîòåêè. Âåðñèÿ âîçâðàùàåòñÿ â ôîðìàòå: ãîä + ìåñÿö + äåíü . Òåêóùàÿ
áèáëèîòåêà èìååò âåðñèþ 071014.
void RemoveComponent(void *Control,int new_x,int new_y) - ïåðåìåùàåò êîìïîíåíò â íîâûå êîîðäèíàòû.
void ResizeComponent(void *Control,int new_sizex,int new_sizey) - èçìåíÿåò ðàçìåð êîìïîíåíòà.
Ïðèìåðû èñïîëüçîâàíèÿ ýòèõ ôóíêöèé ñìîòðèòå â ïðèìåðå Bookmark.
5)Äîáàâëåí ïðèìåð ðàáîòû ñ libGUI â ÿçûêå ïðîãðàììèðîâàíèÿ C. Ýòîò ïðèìåð ÿâëÿåòñÿ ÷àñòüþ èíòåðôåéñà íàïèñàííîãî
ìíîé äëÿ ìîåé íàó÷íîé ïðîãðàììû.
ENGLISH
14.10.07
The new version of library libGUI has left.
That new in this version:
1) Transfer of parameters to functions of library is copied on the convention stdcall.
2) Now functions link on names.
3)Now, if to guide the mouse on a component and to press the left button of the mouse all
messages from the mouse are sent only to this component.If to release(let off) the left
button of the mouse messages from the mouse again become accessible to all components.
4) In library new functions are added.
int Version (void) - to receive the version of library. The version comes back in a format: year + month + day.
The current library has version 71014.
void RemoveComponent (void *Control, int new_x, int new_y) - moves a component to new coordinates.
void ResizeComponent (void *Control, int new_sizex, int new_sizey) - changes the size of a component.
Examples of use of these functions look in example Bookmark.
5) The example of work with libGUI in programming language C is added. This example is a part of the interface
written by me for my scientific program.

View File

@ -1,243 +0,0 @@
/*
libGUI dinamic library SDK
load library and link function
*/
#include "libGUI.h"
struct IMPORT
{
char *name;
void *function;
}__attribute__((packed));
typedef struct IMPORT import_t;
static char *sys_libGUI_path="/sys/lib/libGUI.obj";
static char* funcnames[] = {"LibGUIversion","InitLibGUI","LibGUImain","QuitLibGUI",
"CreateWindow","SetWindowSizeRequest",
"PackControls","DestroyControl","SetControlSizeRequest","GetControlSizeX",
"GetControlSizeY","SetControlNewPosition","GetControlPositionX",
"GetControlPositionY","SetFocuse","RedrawControl","SpecialRedrawControl",
"SetCallbackFunction","BlockCallbackFunction","UnblockCallbackFunction",
"SetIDL_Function","DestroyIDL_Function",
"SetTimerCallbackForFunction","DestroyTimerCallbackForFunction",
"SetCallbackFunctionForEvent","DestroyCallbackFunctionForEvent",
"CreateButton","CreateButtonWithText",
"CreateProgressBar","SetProgressBarPulse","ProgressBarSetText","ProgressBarGetText",
"CreateHorizontalScrollBar","CreateVerticalScrollBar",
"CreateScrolledWindow","ScrolledWindowPackControls",
"CreateImage",
"CreateText","TextBackgroundOn","TextBackgroundOff",
"LoadFont","FreeFont"};
static inline void* gui_ksys_load_dll(char *path)
{
void *dll_export;
__asm__ __volatile__(
"int $0x40"
:"=a"(dll_export)
:"a"(68),"b"(19),"c"(path));
return(dll_export);
}
static inline void gui_ksys_debug_out(int c)
{
__asm__ __volatile__(
"int $0x40"
:
:"a"(63),"b"(1),"c"(c));
}
static void gui_debug_out_str(char *s)
{
while(*s)
{
if (*s=='\n') gui_ksys_debug_out(13);
gui_ksys_debug_out(*s);
s++;
}
}
static int gui_strcmp(const char* string1, const char* string2)
{
while (1)
{
if (*string1<*string2)
return -1;
if (*string1>*string2)
return 1;
if (*string1=='\0')
return 0;
string1++;
string2++;
}
}
static void* gui_cofflib_getproc(import_t *lib, char *name)
{
int i;
for(i = 0; lib[i].name && gui_strcmp(name, lib[i].name); i++);
if(lib[i].name) return lib[i].function;
else return NULL;
}
static inline void gui_ksys_exit(int value)
{
__asm__ __volatile__(
"int $0x40"
:
:"a"(-1),"b"(value));
}
void link_libGUI(import_t *exp,char **imports)
{
LibGUIversion=(DWORD (stdcall *)(void))
gui_cofflib_getproc(exp,imports[0]);
InitLibGUI=(char (stdcall *)(void))
gui_cofflib_getproc(exp,imports[1]);
LibGUImain=(void (stdcall *)(parent_t *WindowParent))
gui_cofflib_getproc(exp,imports[2]);
QuitLibGUI=(void (stdcall *)(parent_t *window))
gui_cofflib_getproc(exp,imports[3]);
CreateWindow=(void* (stdcall *)(void))
gui_cofflib_getproc(exp,imports[4]);
SetWindowSizeRequest=(void (stdcall *)(parent_t *WindowParent,int size_x,int size_y))
gui_cofflib_getproc(exp,imports[5]);
PackControls=(void (stdcall *)(void *Parent,void *control))
gui_cofflib_getproc(exp,imports[6]);
DestroyControl=(void (stdcall *)(void *control))
gui_cofflib_getproc(exp,imports[7]);
SetControlSizeRequest=(void (stdcall *)(void *Control,int new_size_x,int new_size_y))
gui_cofflib_getproc(exp,imports[8]);
GetControlSizeX=(int (stdcall *)(void *Control))
gui_cofflib_getproc(exp,imports[9]);
GetControlSizeY=(int (stdcall *)(void *Control))
gui_cofflib_getproc(exp,imports[10]);
SetControlNewPosition=(void (stdcall *)(void *Control,int new_x,int new_y))
gui_cofflib_getproc(exp,imports[11]);
GetControlPositionX=(int (stdcall *)(void *Control))
gui_cofflib_getproc(exp,imports[12]);
GetControlPositionY=(int (stdcall *)(void *Control))
gui_cofflib_getproc(exp,imports[13]);
SetFocuse=(void* (stdcall *)(void *Control))
gui_cofflib_getproc(exp,imports[14]);
RedrawControl=(void (stdcall *)(void *Control))
gui_cofflib_getproc(exp,imports[15]);
SpecialRedrawControl=(void (stdcall *)(void *Control))
gui_cofflib_getproc(exp,imports[16]);
SetCallbackFunction=(gui_callback_t* (stdcall *)(void *Control,
int event_name,void *callback_func,void *callback_func_data))
gui_cofflib_getproc(exp,imports[17]);
BlockCallbackFunction=(void (stdcall *)(void *Control,gui_callback_t *callback_ID))
gui_cofflib_getproc(exp,imports[18]);
UnblockCallbackFunction=(void (stdcall *)(void *Control,gui_callback_t *callback_ID))
gui_cofflib_getproc(exp,imports[19]);
SetIDL_Function=(void (stdcall *)(parent_t *Parent,void *function,void *function_data))
gui_cofflib_getproc(exp,imports[20]);
DestroyIDL_Function=(void (stdcall *)(parent_t *Parent))
gui_cofflib_getproc(exp,imports[21]);
SetTimerCallbackForFunction=(gui_timer_t* (stdcall *)(parent_t *parent_window,
int time_tick,void *func,void *func_data))
gui_cofflib_getproc(exp,imports[22]);
DestroyTimerCallbackForFunction=(void (stdcall *)(gui_timer_t *timer))
gui_cofflib_getproc(exp,imports[23]);
SetCallbackFunctionForEvent=(gui_callbackevent_t* (stdcall *)(parent_t *parent_window,
int event_type,void *func,void *func_data))
gui_cofflib_getproc(exp,imports[24]);
DestroyCallbackFunctionForEvent=(void (stdcall *)(gui_callbackevent_t *callback_event))
gui_cofflib_getproc(exp,imports[25]);
CreateButton=(gui_button_t* (stdcall *)(gui_button_data_t *info_for_control))
gui_cofflib_getproc(exp,imports[26]);
CreateButtonWithText=(gui_button_t* (stdcall *)(gui_button_data_t *info,char *txt))
gui_cofflib_getproc(exp,imports[27]);
CreateProgressBar=(gui_progress_bar_t* (stdcall *)(gui_progress_bar_data_t *info_for_control))
gui_cofflib_getproc(exp,imports[28]);
SetProgressBarPulse=(void (stdcall *)(gui_progress_bar_t *ProgressBar,int time_update))
gui_cofflib_getproc(exp,imports[29]);
ProgressBarSetText=(void (stdcall *)(gui_progress_bar_t *pbar,char *txt))
gui_cofflib_getproc(exp,imports[30]);
ProgressBarGetText=(char* (stdcall *)(gui_progress_bar_t *pbar))
gui_cofflib_getproc(exp,imports[31]);
CreateHorizontalScrollBar=(gui_scroll_bar_t* (stdcall *)(gui_scroll_bar_data_t *info_for_control))
gui_cofflib_getproc(exp,imports[32]);
CreateVerticalScrollBar=(gui_scroll_bar_t* (stdcall *)(gui_scroll_bar_data_t *info_for_control))
gui_cofflib_getproc(exp,imports[33]);
CreateScrolledWindow=(gui_scrolled_window_t* (stdcall *)(gui_scrolled_window_data_t *info_for_control))
gui_cofflib_getproc(exp,imports[34]);
ScrolledWindowPackControls=(void (stdcall *)(gui_scrolled_window_t *parent,void *Control))
gui_cofflib_getproc(exp,imports[35]);
CreateImage=(gui_image_t* (stdcall *)(gui_image_data_t *info_for_control))
gui_cofflib_getproc(exp,imports[36]);
CreateText=(gui_text_t* (stdcall *)(gui_text_data_t *info_for_control))
gui_cofflib_getproc(exp,imports[37]);
TextBackgroundOn=(void (stdcall *)(gui_text_t *Text))
gui_cofflib_getproc(exp,imports[38]);
TextBackgroundOff=(void (stdcall *)(gui_text_t *Text))
gui_cofflib_getproc(exp,imports[39]);
LoadFont=(font_t* (stdcall *)(char *fullfontname))
gui_cofflib_getproc(exp,imports[40]);
FreeFont=(void (stdcall *)(font_t *font))
gui_cofflib_getproc(exp,imports[41]);
}
void LoadLibGUI(char *lib_path)
{
import_t *export;
char *path;
DWORD vers;
if (lib_path==NULL)
{
path=sys_libGUI_path;
export=(import_t*)gui_ksys_load_dll(path);
}
else
{
path=lib_path;
export=(import_t*)gui_ksys_load_dll(path);
}
if (export==NULL)
{
gui_debug_out_str("\ncan't load lib=");
gui_debug_out_str(path);
gui_ksys_exit(0);
}
else
{
link_libGUI(export,funcnames);
if (InitLibGUI())
{
gui_debug_out_str("\ncan't initialize libGUI");
gui_ksys_exit(0);
}
gui_debug_out_str(" initialized");
}
}

View File

@ -1,591 +0,0 @@
/*
service structures of libGUI
*/
#define NULL (void*)0
typedef unsigned int DWORD;
typedef unsigned char BYTE;
typedef unsigned short int WORD;
typedef unsigned int size_t;
#define stdcall __stdcall
#define cdecl __cdecl
/////////////////////////////////////////////////////////////////////////
// libGUI sysyem messages types
/////////////////////////////////////////////////////////////////////////
#define MESSAGE_FULL_REDRAW_ALL 1
#define MESSAGE_KEYS_EVENT 2
#define MESSAGE_SPECIALIZED 3
#define MESSAGE_SET_FOCUSE 4
#define MESSAGE_CHANGE_FOCUSE 5
#define MESSAGE_MOUSE_EVENT 6
#define MESSAGE_CHANGE_POSITION_EVENT 7
#define MESSAGE_CHANGESIZE_EVENT 8
#define MESSAGE_CALL_TIMER_EVENT 9
#define MESSAGE_FULL_REDRAW_ALL_WITH_FINITION 10
#define MESSAGE_SET_MAIN_PARENT 11
#define MESSAGE_DESTROY_CONTROL -1
/////////////////////////////////////////////////////////////////////////
// system keys states
/////////////////////////////////////////////////////////////////////////
#define KEY_DOWN 16
#define KEY_UP 17
#define KEY_HOTKEY 18
/////////////////////////////////////////////////////////////////////////
// system mouse buttons states
/////////////////////////////////////////////////////////////////////////
#define MOUSE_LEFT_BUTTON_DOWN 19
#define MOUSE_LEFT_BUTTON_UP 20
#define MOUSE_RIGHT_BUTTON_DOWN 21
#define MOUSE_RIGHT_BUTTON_UP 22
#define MOUSE_MIDDLE_BUTTON_DOWN 23
#define MOUSE_MIDDLE_BUTTON_UP 24
#define MOUSE_4_BUTTON_DOWN 25
#define MOUSE_4_BUTTON_UP 26
#define MOUSE_5_BUTTON_DOWN 27
#define MOUSE_5_BUTTON_UP 28
//-----------------------------------------------------------------------
// CONNECT EVENTS FOR CALLBACKs
//-----------------------------------------------------------------------
////////////////////////////////////////////////////////////////
// connect events for button
////////////////////////////////////////////////////////////////
#define BUTTON_ENTER_EVENT 29
#define BUTTON_LEAVE_EVENT 30
#define BUTTON_PRESSED_EVENT 31
#define BUTTON_RELEASED_EVENT 32
////////////////////////////////////////////////////////////////
// connect events for scroll bar
////////////////////////////////////////////////////////////////
#define SCROLLBAR_CHANGED_EVENT 33
////////////////////////////////////////////////////////////////
// connect events for main parent window
////////////////////////////////////////////////////////////////
#define DELETE_EVENT 36
////////////////////////////////////////////////////////////////
// font type structure
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct FONT
{
DWORD *fnt_draw;
DWORD *fnt_unpacker;
DWORD *fnt_fd;
DWORD *fnt_bk;
int sizex;
int sizey;
int size;
int encoding_type;
char *font;
char *fnt_name;
DWORD type;
DWORD flags;
};
#pragma pack(pop)
typedef struct FONT font_t;
////////////////////////////////////////////////////////////////
// header of parent of control
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct HEADERPARENT
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
DWORD **control_for_callback_function;
DWORD **callback_for_control_callback;
DWORD number_callbacks;
DWORD *global_active_control_for_keys;
DWORD *message;
DWORD *timer_bk;
DWORD *timer_fd;
DWORD number_timers_for_controls;
DWORD *calev_bk;
DWORD *calev_fd;
DWORD *IDL_func;
DWORD *IDL_func_data;
};
#pragma pack(pop)
typedef struct HEADERPARENT parent_t;
////////////////////////////////////////////////////////////////
// header of control
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct HEADER
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
};
#pragma pack(pop)
typedef struct HEADER header_t;
////////////////////////////////////////////////////////////////
// callback structure for callback function of control
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct CALLBACK
{
DWORD *clb_bk;
DWORD *clb_fd;
DWORD *clb_control;
DWORD *func;
DWORD *func_data;
DWORD connect_event;
DWORD flags;
};
#pragma pack(pop)
typedef struct CALLBACK gui_callback_t;
////////////////////////////////////////////////////////////////
// timer
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct TIMER
{
DWORD *tmr_bk;
DWORD *tmr_fd;
DWORD *tmr_parent;
DWORD *func;
DWORD *func_data;
DWORD last_time;
DWORD time_tick;
DWORD flags;
};
#pragma pack(pop)
typedef struct TIMER gui_timer_t;
////////////////////////////////////////////////////////////////
// structure for callback events
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct CALLBACKEVENT
{
DWORD *calev_bk;
DWORD *calev_fd;
DWORD *calev_parent;
DWORD *func;
DWORD *func_data;
DWORD event_type;
};
#pragma pack(pop)
typedef struct CALLBACKEVENT gui_callbackevent_t;
////////////////////////////////////////////////////////////////
// type of data - structure message
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct MESSAGE
{
DWORD type;
DWORD arg1;
DWORD arg2;
DWORD arg3;
DWORD arg4;
};
#pragma pack(pop)
typedef struct MESSAGE gui_message_t;
////////////////////////////////////////////////////////////////
// button
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct ControlButton
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
//button's data
BYTE btn_flags;
};
#pragma pack(pop)
typedef struct ControlButton gui_button_t;
// information for creating control Button
#pragma pack(push,1)
struct ButtonData
{
int x;
int y;
int width;
int height;
};
#pragma pack(pop)
typedef struct ButtonData gui_button_data_t;
////////////////////////////////////////////////////////////////
// scroller
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct ControlScrollBar
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
//scroll bar's data
float ruller_size;
float ruller_pos;
float ruller_step;
BYTE scb_flags;
};
typedef struct ControlScrollBar gui_scroll_bar_t;
#pragma pack(push,1)
struct ScrollBarData
{
int x;
int y;
int width;
int height;
float ruller_size;
float ruller_pos;
float ruller_step;
};
#pragma pack(pop)
typedef struct ScrollBarData gui_scroll_bar_data_t;
////////////////////////////////////////////////////////////////
// progressbar
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct ControlProgressBar
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
//progress bar's data
float progress;
BYTE prb_flags;
};
#pragma pack(pop)
typedef struct ControlProgressBar gui_progress_bar_t;
#pragma pack(push,1)
struct ProgressBarData
{
int x;
int y;
int width;
int height;
float progress;
};
#pragma pack(pop)
typedef struct ProgressBarData gui_progress_bar_data_t;
////////////////////////////////////////////////////////////////
// scrolled window
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct ControlScrolledWindow
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
//scrolled windows's data
DWORD virtual_x;
DWORD virtual_y;
DWORD virtual_sizex;
DWORD virtual_sizey;
DWORD *virtual_controls_x;
DWORD *virtual_controls_y;
DWORD number_virtual_controls;
DWORD scroll_arrea_sizex;
DWORD scroll_arrea_sizey;
DWORD *horizontal_scroll;
DWORD *vertical_scroll;
BYTE scw_flags;
};
#pragma pack(pop)
typedef struct ControlScrolledWindow gui_scrolled_window_t;
#pragma pack(push,1)
struct ScrolledWindowData
{
int x;
int y;
int width;
int height;
};
#pragma pack(pop)
typedef struct ScrolledWindowData gui_scrolled_window_data_t;
////////////////////////////////////////////////////////////////
// image
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct ControlImage
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
char bits_per_pixel;
char bytes_per_pixel;
char *img;
};
#pragma pack(pop)
typedef struct ControlImage gui_image_t;
#pragma pack(push,1)
struct ImageData
{
int x;
int y;
int width;
int height;
char bits_per_pixel;
};
#pragma pack(pop)
typedef struct ImageData gui_image_data_t;
////////////////////////////////////////////////////////////////
// text
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct ControlText
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
DWORD *font;
DWORD color;
DWORD background_color;
char *text;
BYTE txt_flags;
};
#pragma pack(pop)
typedef struct ControlText gui_text_t;
#pragma pack(push,1)
struct TextData
{
int x;
int y;
DWORD *font;
DWORD color;
DWORD background_color;
char background;
char *text;
};
#pragma pack(pop)
typedef struct TextData gui_text_data_t;
/////////////////////////////////////////////////////////////////
// load libGUI library and link functions
/////////////////////////////////////////////////////////////////
void LoadLibGUI(char *lib_path);
//**********************************************************************
// libGUI service functions
//**********************************************************************
DWORD (stdcall *LibGUIversion)(void);
char (stdcall *InitLibGUI)(void);
void (stdcall *LibGUImain)(parent_t *WindowParent);
void (stdcall *QuitLibGUI)(parent_t *window);
void* (stdcall *CreateWindow)(void);
void (stdcall *SetWindowSizeRequest)(parent_t *WindowParent,int size_x,int size_y);
void (stdcall *PackControls)(void *Parent,void *control);
void (stdcall *DestroyControl)(void *control);
void (stdcall *SetControlSizeRequest)(void *Control,int new_size_x,int new_size_y);
int (stdcall *GetControlSizeX)(void *Control);
int (stdcall *GetControlSizeY)(void *Control);
void (stdcall *SetControlNewPosition)(void *Control,int new_x,int new_y);
int (stdcall *GetControlPositionX)(void *Control);
int (stdcall *GetControlPositionY)(void *Control);
void* (stdcall *SetFocuse)(void *Control);
void (stdcall *RedrawControl)(void *Control);
void (stdcall *SpecialRedrawControl)(void *Control);
gui_callback_t* (stdcall *SetCallbackFunction)(void *Control,
int event_name,void *callback_func,
void *callback_func_data);
void (stdcall *BlockCallbackFunction)(void *Control,gui_callback_t *callback_ID);
void (stdcall *UnblockCallbackFunction)(void *Control,gui_callback_t *callback_ID);
void (stdcall *SetIDL_Function)(parent_t *Parent,void *function,void *function_data);
void (stdcall *DestroyIDL_Function)(parent_t *Parent);
gui_timer_t* (stdcall *SetTimerCallbackForFunction)(parent_t *parent_window,
int time_tick,void *func,void *func_data);
void (stdcall *DestroyTimerCallbackForFunction)(gui_timer_t *timer);
gui_callbackevent_t* (stdcall *SetCallbackFunctionForEvent)(parent_t *parent_window,
int event_type,void *func,void *func_data);
void (stdcall *DestroyCallbackFunctionForEvent)(gui_callbackevent_t *callback_event);
gui_button_t* (stdcall *CreateButton)(gui_button_data_t *info_for_control);
gui_button_t* (stdcall *CreateButtonWithText)(gui_button_data_t *info,char *txt);
gui_progress_bar_t* (stdcall *CreateProgressBar)(gui_progress_bar_data_t *info_for_control);
void (stdcall *SetProgressBarPulse)(gui_progress_bar_t *ProgressBar,int time_update);
void (stdcall *ProgressBarSetText)(gui_progress_bar_t *pbar,char *txt);
char* (stdcall *ProgressBarGetText)(gui_progress_bar_t *pbar);
gui_scroll_bar_t* (stdcall *CreateHorizontalScrollBar)(gui_scroll_bar_data_t *info_for_control);
gui_scroll_bar_t* (stdcall *CreateVerticalScrollBar)(gui_scroll_bar_data_t *info_for_control);
gui_scrolled_window_t* (stdcall *CreateScrolledWindow)(gui_scrolled_window_data_t *info_for_control);
void (stdcall *ScrolledWindowPackControls)(gui_scrolled_window_t *parent,void *Control);
gui_image_t* (stdcall *CreateImage)(gui_image_data_t *info_for_control);
gui_text_t* (stdcall *CreateText)(gui_text_data_t *info_for_control);
void (stdcall *TextBackgroundOn)(gui_text_t *Text);
void (stdcall *TextBackgroundOff)(gui_text_t *Text);
font_t* (stdcall *LoadFont)(char *fullfontname);
void (stdcall *FreeFont)(font_t *font);

View File

@ -1,241 +0,0 @@
/*
libGUI dinamic library SDK
load library and link function
*/
#include "libGUI.h"
struct IMPORT
{
char *name;
void *function;
}__attribute__((packed));
typedef struct IMPORT import_t;
static char *sys_libGUI_path="/sys/lib/libGUI.obj";
static char* funcnames[] = {"LibGUIversion","InitLibGUI","LibGUImain","QuitLibGUI",
"CreateWindow","SetWindowSizeRequest",
"PackControls","DestroyControl","SetControlSizeRequest","GetControlSizeX",
"GetControlSizeY","SetControlNewPosition","GetControlPositionX",
"GetControlPositionY","SetFocuse","RedrawControl","SpecialRedrawControl",
"SetCallbackFunction","BlockCallbackFunction","UnblockCallbackFunction",
"SetIDL_Function","DestroyIDL_Function",
"SetTimerCallbackForFunction","DestroyTimerCallbackForFunction",
"SetCallbackFunctionForEvent","DestroyCallbackFunctionForEvent",
"CreateButton","CreateButtonWithText",
"CreateProgressBar","SetProgressBarPulse","ProgressBarSetText","ProgressBarGetText",
"CreateHorizontalScrollBar","CreateVerticalScrollBar",
"CreateScrolledWindow","ScrolledWindowPackControls",
"CreateImage",
"CreateText","TextBackgroundOn","TextBackgroundOff",
"LoadFont","FreeFont"};
static inline void* gui_ksys_load_dll(char *path)
{
void *dll_export;
__asm__ __volatile__(
"int $0x40"
:"=a"(dll_export)
:"a"(68),"b"(19),"c"(path));
return(dll_export);
}
static inline void gui_ksys_debug_out(int c)
{
__asm__ __volatile__(
"int $0x40"
:
:"a"(63),"b"(1),"c"(c));
}
static void gui_debug_out_str(char *s)
{
while(*s)
{
if (*s=='\n') gui_ksys_debug_out(13);
gui_ksys_debug_out(*s);
s++;
}
}
static int gui_strcmp(const char* string1, const char* string2)
{
while (1)
{
if (*string1<*string2)
return -1;
if (*string1>*string2)
return 1;
if (*string1=='\0')
return 0;
string1++;
string2++;
}
}
static void* gui_cofflib_getproc(import_t *lib, char *name)
{
int i;
for(i = 0; lib[i].name && gui_strcmp(name, lib[i].name); i++);
if(lib[i].name) return lib[i].function;
else return NULL;
}
static inline void gui_ksys_exit(int value)
{
__asm__ __volatile__(
"int $0x40"
:
:"a"(-1),"b"(value));
}
void link_libGUI(import_t *exp,char **imports)
{
LibGUIversion=(DWORD stdcall (*)(void))
gui_cofflib_getproc(exp,imports[0]);
InitLibGUI=(char stdcall (*)(void))
gui_cofflib_getproc(exp,imports[1]);
LibGUImain=(void stdcall (*)(parent_t *WindowParent))
gui_cofflib_getproc(exp,imports[2]);
QuitLibGUI=(void stdcall (*)(parent_t *window))
gui_cofflib_getproc(exp,imports[3]);
CreateWindow=(void* stdcall (*)(void))
gui_cofflib_getproc(exp,imports[4]);
SetWindowSizeRequest=(void stdcall (*)(parent_t *WindowParent,int size_x,int size_y))
gui_cofflib_getproc(exp,imports[5]);
PackControls=(void stdcall (*)(void *Parent,void *control))
gui_cofflib_getproc(exp,imports[6]);
DestroyControl=(void stdcall (*)(void *control))
gui_cofflib_getproc(exp,imports[7]);
SetControlSizeRequest=(void stdcall (*)(void *Control,int new_size_x,int new_size_y))
gui_cofflib_getproc(exp,imports[8]);
GetControlSizeX=(int stdcall (*)(void *Control))
gui_cofflib_getproc(exp,imports[9]);
GetControlSizeY=(int stdcall (*)(void *Control))
gui_cofflib_getproc(exp,imports[10]);
SetControlNewPosition=(void stdcall (*)(void *Control,int new_x,int new_y))
gui_cofflib_getproc(exp,imports[11]);
GetControlPositionX=(int stdcall (*)(void *Control))
gui_cofflib_getproc(exp,imports[12]);
GetControlPositionY=(int stdcall (*)(void *Control))
gui_cofflib_getproc(exp,imports[13]);
SetFocuse=(void* stdcall (*)(void *Control))
gui_cofflib_getproc(exp,imports[14]);
RedrawControl=(void stdcall (*)(void *Control))
gui_cofflib_getproc(exp,imports[15]);
SpecialRedrawControl=(void stdcall (*)(void *Control))
gui_cofflib_getproc(exp,imports[16]);
SetCallbackFunction=(gui_callback_t* stdcall (*)(void *Control,
int event_name,void *callback_func,void *callback_func_data))
gui_cofflib_getproc(exp,imports[17]);
BlockCallbackFunction=(void stdcall (*)(void *Control,gui_callback_t *callback_ID))
gui_cofflib_getproc(exp,imports[18]);
UnblockCallbackFunction=(void stdcall (*)(void *Control,gui_callback_t *callback_ID))
gui_cofflib_getproc(exp,imports[19]);
SetIDL_Function=(void stdcall (*)(parent_t *Parent,void *function,void *function_data))
gui_cofflib_getproc(exp,imports[20]);
DestroyIDL_Function=(void stdcall (*)(parent_t *Parent))
gui_cofflib_getproc(exp,imports[21]);
SetTimerCallbackForFunction=(gui_timer_t* stdcall (*)(parent_t *parent_window,
int time_tick,void *func,void *func_data))
gui_cofflib_getproc(exp,imports[22]);
DestroyTimerCallbackForFunction=(void stdcall (*)(gui_timer_t *timer))
gui_cofflib_getproc(exp,imports[23]);
SetCallbackFunctionForEvent=(gui_callbackevent_t* stdcall (*)(parent_t *parent_window,
int event_type,void *func,void *func_data))
gui_cofflib_getproc(exp,imports[24]);
DestroyCallbackFunctionForEvent=(void stdcall (*)(gui_callbackevent_t *callback_event))
gui_cofflib_getproc(exp,imports[25]);
CreateButton=(gui_button_t* stdcall (*)(gui_button_data_t *info_for_control))
gui_cofflib_getproc(exp,imports[26]);
CreateButtonWithText=(gui_button_t* stdcall (*)(gui_button_data_t *info,char *txt))
gui_cofflib_getproc(exp,imports[27]);
CreateProgressBar=(gui_progress_bar_t* stdcall (*)(gui_progress_bar_data_t *info_for_control))
gui_cofflib_getproc(exp,imports[28]);
SetProgressBarPulse=(void stdcall (*)(gui_progress_bar_t *ProgressBar,int time_update))
gui_cofflib_getproc(exp,imports[29]);
ProgressBarSetText=(void stdcall (*)(gui_progress_bar_t *pbar,char *txt))
gui_cofflib_getproc(exp,imports[30]);
ProgressBarGetText=(char* stdcall (*)(gui_progress_bar_t *pbar))
gui_cofflib_getproc(exp,imports[31]);
CreateHorizontalScrollBar=(gui_scroll_bar_t* stdcall (*)(gui_scroll_bar_data_t *info_for_control))
gui_cofflib_getproc(exp,imports[32]);
CreateVerticalScrollBar=(gui_scroll_bar_t* stdcall (*)(gui_scroll_bar_data_t *info_for_control))
gui_cofflib_getproc(exp,imports[33]);
CreateScrolledWindow=(gui_scrolled_window_t* stdcall (*)(gui_scrolled_window_data_t *info_for_control))
gui_cofflib_getproc(exp,imports[34]);
ScrolledWindowPackControls=(void stdcall (*)(gui_scrolled_window_t *parent,void *Control))
gui_cofflib_getproc(exp,imports[35]);
CreateImage=(gui_image_t* stdcall (*)(gui_image_data_t *info_for_control))
gui_cofflib_getproc(exp,imports[36]);
CreateText=(gui_text_t* stdcall (*)(gui_text_data_t *info_for_control))
gui_cofflib_getproc(exp,imports[37]);
TextBackgroundOn=(void stdcall (*)(gui_text_t *Text))
gui_cofflib_getproc(exp,imports[38]);
TextBackgroundOff=(void stdcall (*)(gui_text_t *Text))
gui_cofflib_getproc(exp,imports[39]);
LoadFont=(font_t* stdcall (*)(char *fullfontname))
gui_cofflib_getproc(exp,imports[40]);
FreeFont=(void stdcall (*)(font_t *font))
gui_cofflib_getproc(exp,imports[41]);
}
void LoadLibGUI(char *lib_path)
{
import_t *export;
char *path;
if (lib_path==NULL)
{
path=sys_libGUI_path;
export=(import_t*)gui_ksys_load_dll(path);
}
else
{
path=lib_path;
export=(import_t*)gui_ksys_load_dll(path);
}
if (export==NULL)
{
gui_debug_out_str("\ncan't load lib=");
gui_debug_out_str(path);
gui_ksys_exit(0);
}
else
{
link_libGUI(export,funcnames);
if (InitLibGUI())
{
gui_debug_out_str("\ncan't initialize libGUI");
gui_ksys_exit(0);
}
}
}

View File

@ -1,589 +0,0 @@
/*
service structures of libGUI
*/
#define NULL (void*)0
typedef unsigned int DWORD;
typedef unsigned char BYTE;
typedef unsigned short int WORD;
typedef unsigned int size_t;
#define stdcall __attribute__ ((stdcall))
#define cdecl __attribute__ ((cdecl))
#define pack __attribute__ ((packed))
/////////////////////////////////////////////////////////////////////////
// libGUI sysyem messages types
/////////////////////////////////////////////////////////////////////////
#define MESSAGE_FULL_REDRAW_ALL 1
#define MESSAGE_KEYS_EVENT 2
#define MESSAGE_SPECIALIZED 3
#define MESSAGE_SET_FOCUSE 4
#define MESSAGE_CHANGE_FOCUSE 5
#define MESSAGE_MOUSE_EVENT 6
#define MESSAGE_CHANGE_POSITION_EVENT 7
#define MESSAGE_CHANGESIZE_EVENT 8
#define MESSAGE_CALL_TIMER_EVENT 9
#define MESSAGE_FULL_REDRAW_ALL_WITH_FINITION 10
#define MESSAGE_SET_MAIN_PARENT 11
#define MESSAGE_DESTROY_CONTROL -1
/////////////////////////////////////////////////////////////////////////
// system keys states
/////////////////////////////////////////////////////////////////////////
#define KEY_DOWN 16
#define KEY_UP 17
#define KEY_HOTKEY 18
/////////////////////////////////////////////////////////////////////////
// system mouse buttons states
/////////////////////////////////////////////////////////////////////////
#define MOUSE_LEFT_BUTTON_DOWN 19
#define MOUSE_LEFT_BUTTON_UP 20
#define MOUSE_RIGHT_BUTTON_DOWN 21
#define MOUSE_RIGHT_BUTTON_UP 22
#define MOUSE_MIDDLE_BUTTON_DOWN 23
#define MOUSE_MIDDLE_BUTTON_UP 24
#define MOUSE_4_BUTTON_DOWN 25
#define MOUSE_4_BUTTON_UP 26
#define MOUSE_5_BUTTON_DOWN 27
#define MOUSE_5_BUTTON_UP 28
//-----------------------------------------------------------------------
// CONNECT EVENTS FOR CALLBACKs
//-----------------------------------------------------------------------
////////////////////////////////////////////////////////////////
// connect events for button
////////////////////////////////////////////////////////////////
#define BUTTON_ENTER_EVENT 29
#define BUTTON_LEAVE_EVENT 30
#define BUTTON_PRESSED_EVENT 31
#define BUTTON_RELEASED_EVENT 32
////////////////////////////////////////////////////////////////
// connect events for scroll bar
////////////////////////////////////////////////////////////////
#define SCROLLBAR_CHANGED_EVENT 33
////////////////////////////////////////////////////////////////
// connect events for main parent window
////////////////////////////////////////////////////////////////
#define DELETE_EVENT 36
////////////////////////////////////////////////////////////////
// font type structure
////////////////////////////////////////////////////////////////
struct FONT
{
DWORD *fnt_draw;
DWORD *fnt_unpacker;
DWORD *fnt_fd;
DWORD *fnt_bk;
int sizex;
int sizey;
int size;
int encoding_type;
char *font;
char *fnt_name;
DWORD type;
DWORD flags;
}pack;
typedef struct FONT font_t;
////////////////////////////////////////////////////////////////
// header of parent of control
////////////////////////////////////////////////////////////////
struct HEADERPARENT
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
DWORD **control_for_callback_function;
DWORD **callback_for_control_callback;
DWORD number_callbacks;
DWORD *global_active_control_for_keys;
DWORD *message;
DWORD *timer_bk;
DWORD *timer_fd;
DWORD number_timers_for_controls;
DWORD *calev_bk;
DWORD *calev_fd;
DWORD *IDL_func;
DWORD *IDL_func_data;
}pack;
typedef struct HEADERPARENT parent_t;
////////////////////////////////////////////////////////////////
// header of control
////////////////////////////////////////////////////////////////
struct HEADER
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
}pack;
typedef struct HEADER header_t;
////////////////////////////////////////////////////////////////
// callback structure for callback function of control
////////////////////////////////////////////////////////////////
struct CALLBACK
{
DWORD *clb_bk;
DWORD *clb_fd;
DWORD *clb_control;
DWORD *func;
DWORD *func_data;
DWORD connect_event;
DWORD flags;
}pack;
typedef struct CALLBACK gui_callback_t;
////////////////////////////////////////////////////////////////
// timer
////////////////////////////////////////////////////////////////
struct TIMER
{
DWORD *tmr_bk;
DWORD *tmr_fd;
DWORD *tmr_parent;
DWORD *func;
DWORD *func_data;
DWORD last_time;
DWORD time_tick;
DWORD flags;
}pack;
typedef struct TIMER gui_timer_t;
////////////////////////////////////////////////////////////////
// structure for callback events
////////////////////////////////////////////////////////////////
struct CALLBACKEVENT
{
DWORD *calev_bk;
DWORD *calev_fd;
DWORD *calev_parent;
DWORD *func;
DWORD *func_data;
DWORD event_type;
}pack;
typedef struct CALLBACKEVENT gui_callbackevent_t;
////////////////////////////////////////////////////////////////
// type of data - structure message
////////////////////////////////////////////////////////////////
struct MESSAGE
{
DWORD type;
DWORD arg1;
DWORD arg2;
DWORD arg3;
DWORD arg4;
}pack;
typedef struct MESSAGE gui_message_t;
////////////////////////////////////////////////////////////////
// button
////////////////////////////////////////////////////////////////
struct ControlButton
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
//button's data
BYTE btn_flags;
}pack;
typedef struct ControlButton gui_button_t;
// information for creating control Button
struct ButtonData
{
int x;
int y;
int width;
int height;
}pack;
typedef struct ButtonData gui_button_data_t;
////////////////////////////////////////////////////////////////
// scroller
////////////////////////////////////////////////////////////////
struct ControlScrollBar
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
//scroll bar's data
float ruller_size;
float ruller_pos;
float ruller_step;
BYTE scb_flags;
}pack;
typedef struct ControlScrollBar gui_scroll_bar_t;
struct ScrollBarData
{
int x;
int y;
int width;
int height;
float ruller_size;
float ruller_pos;
float ruller_step;
}pack;
typedef struct ScrollBarData gui_scroll_bar_data_t;
////////////////////////////////////////////////////////////////
// progressbar
////////////////////////////////////////////////////////////////
struct ControlProgressBar
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
//progress bar's data
float progress;
BYTE prb_flags;
}pack;
typedef struct ControlProgressBar gui_progress_bar_t;
struct ProgressBarData
{
int x;
int y;
int width;
int height;
float progress;
}pack;
typedef struct ProgressBarData gui_progress_bar_data_t;
////////////////////////////////////////////////////////////////
// scrolled window
////////////////////////////////////////////////////////////////
struct ControlScrolledWindow
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
//scrolled windows's data
DWORD virtual_x;
DWORD virtual_y;
DWORD virtual_sizex;
DWORD virtual_sizey;
DWORD *virtual_controls_x;
DWORD *virtual_controls_y;
DWORD number_virtual_controls;
DWORD scroll_arrea_sizex;
DWORD scroll_arrea_sizey;
DWORD *horizontal_scroll;
DWORD *vertical_scroll;
BYTE scw_flags;
}pack;
typedef struct ControlScrolledWindow gui_scrolled_window_t;
struct ScrolledWindowData
{
int x;
int y;
int width;
int height;
}pack;
typedef struct ScrolledWindowData gui_scrolled_window_data_t;
////////////////////////////////////////////////////////////////
// image
////////////////////////////////////////////////////////////////
struct ControlImage
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
char bits_per_pixel;
char bytes_per_pixel;
char *img;
}pack;
typedef struct ControlImage gui_image_t;
struct ImageData
{
int x;
int y;
int width;
int height;
char bits_per_pixel;
}pack;
typedef struct ImageData gui_image_data_t;
////////////////////////////////////////////////////////////////
// text
////////////////////////////////////////////////////////////////
struct ControlText
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
DWORD *font;
DWORD color;
DWORD background_color;
char *text;
BYTE txt_flags;
}pack;
typedef struct ControlText gui_text_t;
struct TextData
{
int x;
int y;
DWORD *font;
DWORD color;
DWORD background_color;
char background;
char *text;
}pack;
typedef struct TextData gui_text_data_t;
/////////////////////////////////////////////////////////////////
// load libGUI library and link functions
/////////////////////////////////////////////////////////////////
void LoadLibGUI(char *lib_path);
//**********************************************************************
// libGUI service functions
//**********************************************************************
DWORD stdcall (*LibGUIversion)(void);
char stdcall (*InitLibGUI)(void);
void stdcall (*LibGUImain)(parent_t *WindowParent);
void stdcall (*QuitLibGUI)(parent_t *window);
void* stdcall (*CreateWindow)(void);
void stdcall (*SetWindowSizeRequest)(parent_t *WindowParent,int size_x,int size_y);
void stdcall (*PackControls)(void *Parent,void *control);
void stdcall (*DestroyControl)(void *control);
void stdcall (*SetControlSizeRequest)(void *Control,int new_size_x,int new_size_y);
int stdcall (*GetControlSizeX)(void *Control);
int stdcall (*GetControlSizeY)(void *Control);
void stdcall (*SetControlNewPosition)(void *Control,int new_x,int new_y);
int stdcall (*GetControlPositionX)(void *Control);
int stdcall (*GetControlPositionY)(void *Control);
void* stdcall (*SetFocuse)(void *Control);
void stdcall (*RedrawControl)(void *Control);
void stdcall (*SpecialRedrawControl)(void *Control);
gui_callback_t* stdcall (*SetCallbackFunction)(void *Control,
int event_name,void *callback_func,
void *callback_func_data);
void stdcall (*BlockCallbackFunction)(void *Control,gui_callback_t *callback_ID);
void stdcall (*UnblockCallbackFunction)(void *Control,gui_callback_t *callback_ID);
void stdcall (*SetIDL_Function)(parent_t *Parent,void *function,void *function_data);
void stdcall (*DestroyIDL_Function)(parent_t *Parent);
gui_timer_t* stdcall (*SetTimerCallbackForFunction)(parent_t *parent_window,
int time_tick,void *func,void *func_data);
void stdcall (*DestroyTimerCallbackForFunction)(gui_timer_t *timer);
gui_callbackevent_t* stdcall (*SetCallbackFunctionForEvent)(parent_t *parent_window,
int event_type,void *func,void *func_data);
void stdcall (*DestroyCallbackFunctionForEvent)(gui_callbackevent_t *callback_event);
gui_button_t* stdcall (*CreateButton)(gui_button_data_t *info_for_control);
gui_button_t* stdcall (*CreateButtonWithText)(gui_button_data_t *info,char *txt);
gui_progress_bar_t* stdcall (*CreateProgressBar)(gui_progress_bar_data_t *info_for_control);
void stdcall (*SetProgressBarPulse)(gui_progress_bar_t *ProgressBar,int time_update);
void stdcall (*ProgressBarSetText)(gui_progress_bar_t *pbar,char *txt);
char* stdcall (*ProgressBarGetText)(gui_progress_bar_t *pbar);
gui_scroll_bar_t* stdcall (*CreateHorizontalScrollBar)(gui_scroll_bar_data_t *info_for_control);
gui_scroll_bar_t* stdcall (*CreateVerticalScrollBar)(gui_scroll_bar_data_t *info_for_control);
gui_scrolled_window_t* stdcall (*CreateScrolledWindow)(gui_scrolled_window_data_t *info_for_control);
void stdcall (*ScrolledWindowPackControls)(gui_scrolled_window_t *parent,void *Control);
gui_image_t* stdcall (*CreateImage)(gui_image_data_t *info_for_control);
gui_text_t* stdcall (*CreateText)(gui_text_data_t *info_for_control);
void stdcall (*TextBackgroundOn)(gui_text_t *Text);
void stdcall (*TextBackgroundOff)(gui_text_t *Text);
font_t* stdcall (*LoadFont)(char *fullfontname);
void stdcall (*FreeFont)(font_t *font);

View File

@ -1,2 +0,0 @@
gcc -c -O2 -nostdinc -nostdlib -march=pentium -fomit-frame-pointer -fno-builtin -o libGUI.obj libGUI.c
@pause

View File

@ -1,11 +0,0 @@
SRC = libGUI.c
TARGET = libGUI.obj
CFLAGS = -O2 -nostdinc -nostdlib -march=pentium -fomit-frame-pointer -fno-builtin
CC = gcc
all:
$(CC) -c $(SRC) $(CFLAGS) -o $(TARGET)
strip -X --strip-unneeded $(TARGET)
clean:
rm *.obj
rm $(TARGET)

View File

@ -1,11 +0,0 @@
/*
control button data
*/
#define FLAG_INSERT_BUTTON_ON 0x1;
#define FLAG_INSERT_BUTTON_OFF 0xfe;
#define FLAG_PRESSED_BUTTON_ON 0x2
#define FLAG_PRESSED_BUTTON_OFF 0xfd
#define FLAG_RELEASED_BUTTON_ON 0x4
#define FLAG_RELEASED_BUTTON_OFF 0xfb

View File

@ -1,413 +0,0 @@
/*
control Button
*/
void DrawFocuseForButton(struct ControlButton *Button)
{
int x;
int y;
int sizex;
int sizey;
struct FINITION *fin;
x=Button->ctrl_x;
y=Button->ctrl_y;
sizex=Button->ctrl_sizex;
sizey=Button->ctrl_sizey;
fin=(struct FINITION*)Button->finition;
Draw(fin,TOOL_RECTANGLE,x,y,sizex,sizey,0xbfff);
}
void DrawPressedButton(struct ControlButton *Button)
{
int x;
int y;
int sizex;
int sizey;
struct FINITION *fin;
gui_message_t message;
x=Button->ctrl_x;
y=Button->ctrl_y;
sizex=Button->ctrl_sizex;
sizey=Button->ctrl_sizey;
fin=(struct FINITION*)Button->finition;
Draw(fin,TOOL_GRADIENT_DOWN_FILLED_RECTANGLE,x,y,sizex,sizey/2,COLOR_FON,COLOR_MIDDLE_LIGHT);
Draw(fin,TOOL_GRADIENT_DOWN_FILLED_RECTANGLE,x,y+sizey/2,sizex,sizey/2,COLOR_MIDDLE_LIGHT,COLOR_FON);
Draw(fin,TOOL_HORIZONTAL_LINE,x,x+sizex-1,y,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_VERTICAL_LINE,x,y,y+sizey-1,COLOR_LIGHT);
Draw(fin,TOOL_HORIZONTAL_LINE,x,x+sizex-1,y+sizey-1,COLOR_LIGHT);
Draw(fin,TOOL_VERTICAL_LINE,x,y,y+sizey-1,COLOR_ABSOLUTE_DARK);
if (fin->flags & FINITION_ON)
{
message.type=MESSAGE_FULL_REDRAW_ALL_WITH_FINITION;
message.arg1=fin->x;
message.arg2=fin->y;
message.arg3=fin->sizex;
message.arg4=fin->sizey;
}
else
{
message.type=MESSAGE_FULL_REDRAW_ALL;
}
SendMessage((struct HEADER*)Button,&message);
if (Button->flags & FLAG_FOCUSE_INPUT_ON) DrawFocuseForButton(Button);
}
void DrawInsertButton(struct ControlButton *Button)
{
int x;
int y;
int sizex;
int sizey;
struct FINITION *fin;
x=Button->ctrl_x;
y=Button->ctrl_y;
sizex=Button->ctrl_sizex;
sizey=Button->ctrl_sizey;
fin=(struct FINITION*)Button->finition;
Draw(fin,TOOL_RECTANGLE,x,y,sizex,sizey,COLOR_INSERT);
}
void DrawButton(struct ControlButton *Button)
{
int x;
int y;
int sizex;
int sizey;
struct FINITION *fin;
gui_message_t message;
x=Button->ctrl_x;
y=Button->ctrl_y;
sizex=Button->ctrl_sizex;
sizey=Button->ctrl_sizey;
fin=(struct FINITION*)Button->finition;
Draw(fin,TOOL_GRADIENT_UP_FILLED_RECTANGLE,x,y,sizex,sizey,COLOR_FON,COLOR_MIDDLE_LIGHT);
//Draw(fin,TOOL_GRADIENT_DOWN_FILLED_RECTANGLE,x,y+sizey/2,sizex,sizey/2,COLOR_FON,COLOR_MIDDLE_LIGHT);
Draw(fin,TOOL_RECTANGLE,x,y,sizex,sizey,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_HORIZONTAL_LINE,x+1,x+sizex-2,y+1,COLOR_LIGHT);
Draw(fin,TOOL_VERTICAL_LINE,x+sizex-2,y+1,y+sizey-2,COLOR_MIDDLE_LIGHT);
Draw(fin,TOOL_HORIZONTAL_LINE,x+1,x+sizex-2,y+sizey-2,COLOR_MIDDLE_LIGHT);
Draw(fin,TOOL_VERTICAL_LINE,x+1,y+1,y+sizey-2,COLOR_LIGHT);
if (Button->child_bk!=NULL)
{
if (fin->flags & FINITION_ON)
{
message.type=MESSAGE_FULL_REDRAW_ALL_WITH_FINITION;
message.arg1=fin->x;
message.arg2=fin->y;
message.arg3=fin->sizex;
message.arg4=fin->sizey;
}
else
{
message.type=MESSAGE_FULL_REDRAW_ALL;
}
SendMessage((struct HEADER*)Button,&message);
}
if (Button->flags & FLAG_FOCUSE_INPUT_ON) DrawFocuseForButton(Button);
}
//---------------------------------------------------------------------------------
// control Button
//---------------------------------------------------------------------------------
void ButtonProc(struct ControlButton *button,struct MESSAGE *message)
{
int x,y,btn_state;
char v;
struct TIMER *timer;
struct FINITION *fin;
parent_t *main_parent;
switch(message->type)
{
case MESSAGE_FULL_REDRAW_ALL:
{
//draw button
if (button->flags & FLAG_SHOW_CONTROL) DrawButton(button);
break;
}
case MESSAGE_FULL_REDRAW_ALL_WITH_FINITION:
{
fin=(struct FINITION*)button->finition;
fin->flags=fin->flags | FINITION_ON;
fin->x=message->arg1;
fin->y=message->arg2;
fin->sizex=message->arg3;
fin->sizey=message->arg4;
DrawButton(button);
break;
}
case MESSAGE_KEYS_EVENT:
{
main_parent=(parent_t*)button->main_parent;
//not relazed yet
if (button->flags & FLAG_FOCUSE_INPUT_ON)
{
if (message->arg1==KEY_DOWN)
{
if (message->arg2==SC_SPACE)
{
button->btn_flags=button->btn_flags | FLAG_PRESSED_BUTTON_ON;
if (ControlCheckCallbackEvent(button,(DWORD)BUTTON_PRESSED_EVENT)!=NULL)
{
button->flags=button->flags | FLAG_CONNECT_EVENT_ON;
main_parent->control_for_callback_function[main_parent->number_callbacks]=
(DWORD*)button;
main_parent->callback_for_control_callback[main_parent->number_callbacks]=
(DWORD*)ControlCheckCallbackEvent(button,(DWORD)BUTTON_PRESSED_EVENT);
main_parent->number_callbacks++;
}
if (button->flags & FLAG_SHOW_CONTROL) DrawPressedButton(button);
}
}
else
{
if (message->arg2==SC_SPACE)
{
button->btn_flags=button->btn_flags | FLAG_RELEASED_BUTTON_ON;
button->btn_flags=button->btn_flags & FLAG_PRESSED_BUTTON_OFF;
if (ControlCheckCallbackEvent(button,(DWORD)BUTTON_RELEASED_EVENT)!=NULL)
{
button->flags=button->flags | FLAG_CONNECT_EVENT_ON;
main_parent->control_for_callback_function[main_parent->number_callbacks]=
(DWORD*)button;
main_parent->callback_for_control_callback[main_parent->number_callbacks]=
(DWORD*)ControlCheckCallbackEvent(button,(DWORD)BUTTON_RELEASED_EVENT);
main_parent->number_callbacks++;
}
if (button->flags & FLAG_SHOW_CONTROL) DrawButton(button);
}
}
}
break;
}
case MESSAGE_SPECIALIZED:
{
if (button->flags & FLAG_GET_SPECIALIZED_MESSAGE_ON)
{
if (button->flags & FLAG_SHOW_CONTROL) DrawButton(button);
button->flags=button->flags & FLAG_GET_SPECIALIZED_MESSAGE_OFF;
}
break;
}
case MESSAGE_MOUSE_EVENT:
{ //check press of mouse buttons
x=message->arg1;
y=message->arg2;
main_parent=(parent_t*)button->main_parent;
if (message->arg3==MOUSE_LEFT_BUTTON_UP)
{
//insert of button
if (CheckCrossBox((struct HEADER*)button,x,y)==TRUE)
{
v=button->btn_flags & FLAG_INSERT_BUTTON_ON;
if ((ControlCheckCallbackEvent(button,(DWORD)BUTTON_ENTER_EVENT)!=NULL) && (v==FALSE))
{
button->flags=button->flags | FLAG_CONNECT_EVENT_ON;
main_parent->control_for_callback_function[main_parent->number_callbacks]=
(DWORD*)button;
main_parent->callback_for_control_callback[main_parent->number_callbacks]=
(DWORD*)ControlCheckCallbackEvent(button,(DWORD)BUTTON_ENTER_EVENT);
main_parent->number_callbacks++;
}
button->btn_flags=button->btn_flags | FLAG_INSERT_BUTTON_ON;
if (button->flags & FLAG_SHOW_CONTROL) DrawInsertButton(button);
}
else
{
v=button->btn_flags & FLAG_INSERT_BUTTON_ON;
if (v==TRUE)
{
if (ControlCheckCallbackEvent(button,(DWORD)BUTTON_LEAVE_EVENT)!=NULL)
{
button->flags=button->flags | FLAG_CONNECT_EVENT_ON;
main_parent->control_for_callback_function[main_parent->number_callbacks]=
(DWORD*)button;
main_parent->callback_for_control_callback[main_parent->number_callbacks]=
(DWORD*)ControlCheckCallbackEvent(button,(DWORD)BUTTON_LEAVE_EVENT);
main_parent->number_callbacks++;
}
button->btn_flags=button->btn_flags & FLAG_INSERT_BUTTON_OFF;
if (button->flags & FLAG_SHOW_CONTROL) DrawButton(button);
}
}
if (button->btn_flags & FLAG_PRESSED_BUTTON_ON)
{
button->btn_flags=button->btn_flags & FLAG_PRESSED_BUTTON_OFF;
button->btn_flags=button->btn_flags | FLAG_RELEASED_BUTTON_ON;
if (ControlCheckCallbackEvent(button,(DWORD)BUTTON_RELEASED_EVENT)!=NULL)
{
button->flags=button->flags | FLAG_CONNECT_EVENT_ON;
main_parent->control_for_callback_function[main_parent->number_callbacks]=
(DWORD*)button;
main_parent->callback_for_control_callback[main_parent->number_callbacks]=
(DWORD*)ControlCheckCallbackEvent(button,(DWORD)BUTTON_RELEASED_EVENT);
main_parent->number_callbacks++;
}
if (button->flags & FLAG_SHOW_CONTROL) DrawButton(button);
}
}
else
{
if (CheckCrossBox((struct HEADER*)button,x,y)==TRUE)
{
if (message->arg3==MOUSE_LEFT_BUTTON_DOWN)
{
if ((button->btn_flags & FLAG_PRESSED_BUTTON_ON)==FALSE)
{if (button->flags & FLAG_SHOW_CONTROL)
DrawPressedButton(button);}
button->btn_flags=button->btn_flags | FLAG_PRESSED_BUTTON_ON;
}
}
if ((message->arg3==MOUSE_LEFT_BUTTON_DOWN) && (button->btn_flags & FLAG_PRESSED_BUTTON_ON))
{
if (ControlCheckCallbackEvent(button,(DWORD)BUTTON_PRESSED_EVENT)!=NULL)
{
button->flags=button->flags | FLAG_CONNECT_EVENT_ON;
main_parent->control_for_callback_function[main_parent->number_callbacks]=
(DWORD*)button;
main_parent->callback_for_control_callback[main_parent->number_callbacks]=
(DWORD*)ControlCheckCallbackEvent(button,(DWORD)BUTTON_PRESSED_EVENT);
main_parent->number_callbacks++;
}
}
}
break;
}
case MESSAGE_CHANGE_POSITION_EVENT:
{
button->ctrl_x=button->ctrl_x+message->arg1;
button->ctrl_y=button->ctrl_y+message->arg2;
break;
}
case MESSAGE_CALL_TIMER_EVENT:
{
if (button->timer!=(DWORD*)NULL)
{
timer=(struct TIMER*)button->timer;
if (timer->flags & FLAG_TIMER_ON) Timer(timer);
}
break;
}
case MESSAGE_SET_FOCUSE:
{
button->flags=button->flags | FLAG_FOCUSE_INPUT_ON;
if (button->flags & FLAG_SHOW_CONTROL) DrawButton(button);
break;
}
case MESSAGE_CHANGE_FOCUSE:
{
button->flags=button->flags & FLAG_FOCUSE_INPUT_OFF;
if (button->flags & FLAG_SHOW_CONTROL) DrawButton(button);
break;
}
case MESSAGE_DESTROY_CONTROL:
{
if (button->timer!=(DWORD*)NULL) free(button->timer);
free(button->finition);
break;
}
case MESSAGE_SET_MAIN_PARENT:
{
SendMessage((struct HEADER*)button,message);
button->main_parent=(DWORD*)message->arg1;
break;
}
default: break;
}
//send message to child controls(if there is)
SendMessage((struct HEADER*)button,message);
}
//---------------------------------------------------------------------------------
// create control Button
//---------------------------------------------------------------------------------
void* CreateButton(struct ButtonData *info_for_control)
{
struct ControlButton *Button;
struct FINITION *fin;
Button=malloc(sizeof(struct ControlButton));
Button->finition=malloc(sizeof(struct FINITION));
fin=(struct FINITION*)Button->finition;
fin->flags=0;
ID++;
#ifdef DEBUG
printf("\ncreated button with ID=%d",(int)ID);
#endif
Button->child_bk=(DWORD*)NULL;
Button->child_fd=(DWORD*)NULL;
Button->active_control_for_keys=(DWORD*)NULL;
Button->active_control_for_mouse=(DWORD*)NULL;
Button->callback=(DWORD*)NULL;
Button->timer=(DWORD*)NULL;
Button->ctrl_proc=(DWORD*)&ButtonProc;
Button->ctrl_x=info_for_control->x;
Button->ctrl_y=info_for_control->y;
Button->ctrl_sizex=info_for_control->width;
Button->ctrl_sizey=info_for_control->height;
Button->ctrl_ID=ID;
Button->flags=0;
Button->flags=Button->flags | FLAG_SHOW_CONTROL;
Button->flags=Button->flags | FLAG_FOCUSE_INPUT_SUPPOROTE;
Button->btn_flags=0;
return(Button);
}
void* CreateButtonWithText(gui_button_data_t *info,char *txt)
{
gui_button_t *Button;
gui_text_t *text;
gui_text_data_t txtdata;
int len;
Button=CreateButton(info);
len=strlen(txt);
txtdata.x=0;
txtdata.y=0;
txtdata.font=NULL;
txtdata.background=FALSE;
txtdata.color=0;
txtdata.text=malloc(len);
memmove(txtdata.text,txt,len);
text=CreateText(&txtdata);
if (text->ctrl_sizex>Button->ctrl_sizex) Button->ctrl_sizex=text->ctrl_sizex+10;
if (text->ctrl_sizey>Button->ctrl_sizey) Button->ctrl_sizey=text->ctrl_sizey+6;
text->ctrl_x=(Button->ctrl_sizex/2)-(text->ctrl_sizex/2);
text->ctrl_y=(Button->ctrl_sizey/2)-(text->ctrl_sizey/2);
PackControls(Button,text);
return(Button);
}

View File

@ -1,162 +0,0 @@
/*
control Image
*/
void DisplayImage(gui_image_t *Image)
{
int x;
int y;
int sizex;
int sizey;
struct FINITION *fin;
x=Image->ctrl_x;
y=Image->ctrl_y;
sizex=Image->ctrl_sizex;
sizey=Image->ctrl_sizey;
fin=(struct FINITION*)Image->finition;
Draw(fin,TOOL_IMAGE,x,y,sizex,sizey,Image->bits_per_pixel,Image->img);
}
//---------------------------------------------------------------------------------
// control Image
//---------------------------------------------------------------------------------
void ImageProc(gui_image_t *Image,gui_message_t *message)
{
finition_t *fin;
switch(message->type)
{
case MESSAGE_FULL_REDRAW_ALL:
{
//draw Image
if (Image->flags & FLAG_SHOW_CONTROL) DisplayImage(Image);
break;
}
case MESSAGE_FULL_REDRAW_ALL_WITH_FINITION:
{
fin=(struct FINITION*)Image->finition;
fin->flags=fin->flags | FINITION_ON;
fin->x=message->arg1;
fin->y=message->arg2;
fin->sizex=message->arg3;
fin->sizey=message->arg4;
DisplayImage(Image);
break;
}
case MESSAGE_SPECIALIZED:
{
if (Image->flags & FLAG_GET_SPECIALIZED_MESSAGE_ON)
{
if (Image->flags & FLAG_SHOW_CONTROL) DisplayImage(Image);
Image->flags=Image->flags & FLAG_GET_SPECIALIZED_MESSAGE_OFF;
}
break;
}
case MESSAGE_CHANGE_POSITION_EVENT:
{
Image->ctrl_x=Image->ctrl_x+message->arg1;
Image->ctrl_y=Image->ctrl_y+message->arg2;
break;
}
case MESSAGE_DESTROY_CONTROL:
{
free(Image->finition);
free(Image->img);
break;
}
case MESSAGE_SET_MAIN_PARENT:
{
SendMessage((struct HEADER*)Image,message);
Image->main_parent=(DWORD*)message->arg1;
break;
}
default: break;
}
//send message to child controls(if there is)
SendMessage((struct HEADER*)Image,message);
}
//---------------------------------------------------------------------------------
// create control Image
//---------------------------------------------------------------------------------
void* CreateImage(struct ImageData *info_for_control)
{
gui_image_t *Image;
finition_t *fin;
DWORD sizemem;
Image=malloc(sizeof(struct ControlImage));
Image->finition=malloc(sizeof(struct FINITION));
fin=(struct FINITION*)Image->finition;
fin->flags=0;
ID++;
#ifdef DEBUG
printf("\ncreated image with ID=%d",(int)ID);
#endif
Image->child_bk=(DWORD*)NULL;
Image->child_fd=(DWORD*)NULL;
Image->active_control_for_keys=(DWORD*)NULL;
Image->active_control_for_mouse=(DWORD*)NULL;
Image->callback=(DWORD*)NULL;
Image->timer=(DWORD*)NULL;
Image->ctrl_proc=(DWORD*)&ImageProc;
Image->ctrl_x=(DWORD)info_for_control->x;
Image->ctrl_y=(DWORD)info_for_control->y;
Image->ctrl_sizex=(DWORD)info_for_control->width;
Image->ctrl_sizey=(DWORD)info_for_control->height;
Image->bits_per_pixel=info_for_control->bits_per_pixel;
Image->ctrl_ID=ID;
Image->flags=0;
Image->flags=Image->flags | FLAG_SHOW_CONTROL;
switch(Image->bits_per_pixel)
{
case 32:
{
sizemem=(Image->ctrl_sizex*Image->ctrl_sizey)*4;
Image->bytes_per_pixel=4;
break;
}
case 24:
{
sizemem=(Image->ctrl_sizex*Image->ctrl_sizey)*3;
Image->bytes_per_pixel=3;
break;
}
case 16:
{
sizemem=(Image->ctrl_sizex*Image->ctrl_sizey)*2;
Image->bytes_per_pixel=2;
break;
}
case 15:
{
sizemem=(Image->ctrl_sizex*Image->ctrl_sizey)*2;
Image->bytes_per_pixel=2;
break;
}
case 8:
{
sizemem=Image->ctrl_sizex*Image->ctrl_sizey;
Image->bytes_per_pixel=1;
break;
}
case 4:
{
sizemem=((Image->ctrl_sizex*Image->ctrl_sizey)>>1)+1;
Image->bytes_per_pixel=0;
break;
}
default: return(NULL);
}
Image->img=malloc(sizemem);
return(Image);
}

View File

@ -1,16 +0,0 @@
#define FLAG_PB_VERTICAL_ORIENTATION_ON 0x1
#define FLAG_PB_HORIZONTAL_ORIENTATION_ON 0x2
#define FLAG_PB_FROM_LEFT_TO_RIGHT_ON 0x4
#define FLAG_PB_FROM_RIGHT_TO_LEFT_ON 0x8
#define FLAG_PB_FROM_DOWN_TO_UP_ON 0x10
#define FLAG_PB_FROM_UP_TO_DOWN_ON 0x20
#define FLAG_PB_TEXT_ON 0x40
#define FLAG_PB_VERTICAL_ORIENTATION_OFF 0xfe
#define FLAG_PB_HORIZONTAL_ORIENTATION_OFF 0xfd
#define FLAG_PB_FROM_LEFT_TO_RIGHT_OFF 0xfb
#define FLAG_PB_FROM_RIGHT_TO_LEFT_OFF 0xf7
#define FLAG_PB_FROM_DOWN_TO_UP_OFF 0xef
#define FLAG_PB_FROM_UP_TO_DOWN_OFF 0xdf
#define FLAG_PB_TEXT_OFF 0xbf

View File

@ -1,311 +0,0 @@
/*
control ProgressBar
*/
void ProgressBarDrawProgress(struct ControlProgressBar *ProgressBar)
{
int x;
int y;
int pos_progress;
int sizex;
int sizey;
char v;
struct FINITION *fin;
gui_message_t message;
gui_text_size_t size;
gui_text_t *Text;
if ((ProgressBar->flags & FLAG_SHOW_CONTROL)==FALSE) return;
x=ProgressBar->ctrl_x;
y=ProgressBar->ctrl_y;
sizex=ProgressBar->ctrl_sizex;
sizey=ProgressBar->ctrl_sizey;
fin=(struct FINITION*)ProgressBar->finition;
if (ProgressBar->progress<0.0) ProgressBar->progress=0.0;
if (ProgressBar->progress>1.0) ProgressBar->progress=1.0;
v=ProgressBar->prb_flags & FLAG_PB_HORIZONTAL_ORIENTATION_ON;
if (v!=FALSE)
{
pos_progress=(int)(ProgressBar->progress*(sizex-2));
if (ProgressBar->prb_flags & FLAG_PB_FROM_LEFT_TO_RIGHT_ON)
{
Draw(fin,TOOL_GRADIENT_UP_FILLED_RECTANGLE,x+1,y+1,pos_progress,sizey-2,COLOR_FON,COLOR_MIDDLE_LIGHT);
Draw(fin,TOOL_GRADIENT_UP_FILLED_RECTANGLE,x+1+pos_progress,y+1,sizex-2-pos_progress,
sizey-2,COLOR_MIDDLE_LIGHT,COLOR_LIGHT);
if (ProgressBar->prb_flags & FLAG_PB_TEXT_ON)
{
if (fin->flags & FINITION_ON)
{
message.type=MESSAGE_FULL_REDRAW_ALL_WITH_FINITION;
message.arg1=fin->x;
message.arg2=fin->y;
message.arg3=fin->sizex;
message.arg4=fin->sizey;
}
else
{
message.type=MESSAGE_FULL_REDRAW_ALL;
}
Text=(gui_text_t*)ProgressBar->child_bk;
size=GetStringSize((font_t*)Text->font,Text->text);
Text->ctrl_sizex=(DWORD)size.sizex;
Text->ctrl_sizey=(DWORD)size.sizey;
Text->ctrl_x=x+(sizex/2)-(Text->ctrl_sizex/2);
Text->ctrl_y=y+(sizey/2)-(Text->ctrl_sizey/2);
SendMessage((struct HEADER*)ProgressBar,&message);
}
}
if (ProgressBar->prb_flags & FLAG_PB_FROM_RIGHT_TO_LEFT_ON)
{
//Draw(fin,"filled_rectangle",x+sizex-pos_progress-1,y+1,x+sizex-1,sizey-2,0xff0000);
}
}
}
void DrawProgressBar(struct ControlProgressBar *ProgressBar)
{
int x,y,sizex,sizey;
char c;
char *save_buf,*buf;
int save_size_x,save_size_y;
DWORD draw_output,flags;
finition_t *fin;
x=ProgressBar->ctrl_x;
y=ProgressBar->ctrl_y;
sizex=ProgressBar->ctrl_sizex;
sizey=ProgressBar->ctrl_sizey;
fin=(struct FINITION*)ProgressBar->finition;
//alocate a buffer for draw text
c=screen.bits_per_pixel >> 3;
buf=malloc(sizex*sizey*c);
//save current screen parameters
save_buf=screen.buffer;
save_size_x=screen.size_x;
save_size_y=screen.size_y;
draw_output=screen.draw_output;
//load parameters of local buffer
screen.buffer=buf;
screen.size_x=sizex;
screen.size_y=sizey;
screen.draw_output=DRAW_OUTPUT_BUFFER;
//move control
SetControlNewPosition(ProgressBar,0,0);
//save finition parameters
flags=fin->flags;
fin->flags &=FINITION_OFF;
//draw progress bar in buffer
Draw(fin,TOOL_RECTANGLE,0,0,sizex,sizey,COLOR_ABSOLUTE_DARK);
ProgressBarDrawProgress(ProgressBar);
//restore last position of control
SetControlNewPosition(ProgressBar,x,y);
//restore finition
fin->flags=flags;
//restore screen parameters
screen.buffer=save_buf;
screen.size_x=save_size_x;
screen.size_y=save_size_y;
screen.draw_output=draw_output;
//move rendered objects from local buffer to screen
if (fin->flags & FINITION_ON)
DrawImageFinit(fin,x,y,sizex,sizey,screen.bits_per_pixel,buf);
else
DrawImage(x,y,sizex,sizey,screen.bits_per_pixel,buf);
//free local buffer
free(buf);
}
void SetProgressBarPulse(struct ControlProgressBar *ProgressBar,int time_tick)
{
struct TIMER *timer;
struct HEADERPARENT *main_parent;
main_parent=(struct HEADERPARENT*)ProgressBar->main_parent;
if (main_parent!=(struct HEADERPARENT*)NULL)
{
main_parent->number_timers_for_controls++;
ProgressBar->timer=(DWORD*)SetTimerCallbackForControl(time_tick,&DrawProgressBar,ProgressBar);
timer=(struct TIMER*)ProgressBar->timer;
timer->flags=timer->flags | FLAG_TIMER_ON;
}
}
//---------------------------------------------------------------------------------
// control ProgressBar
//---------------------------------------------------------------------------------
void ProgressBarProc(struct ControlProgressBar *ProgressBar,struct MESSAGE *message)
{
int btn_state;
char v;
struct TIMER *timer;
struct FINITION *fin;
switch(message->type)
{
case MESSAGE_FULL_REDRAW_ALL:
{
//draw ProgressBar
if (ProgressBar->flags & FLAG_SHOW_CONTROL) DrawProgressBar(ProgressBar);
break;
}
case MESSAGE_FULL_REDRAW_ALL_WITH_FINITION:
{
fin=(struct FINITION*)ProgressBar->finition;
fin->flags=fin->flags | FINITION_ON;
fin->x=message->arg1;
fin->y=message->arg2;
fin->sizex=message->arg3;
fin->sizey=message->arg4;
DrawProgressBar(ProgressBar);
break;
}
case MESSAGE_SPECIALIZED:
{ //redraw bar of progress
if (ProgressBar->flags & FLAG_GET_SPECIALIZED_MESSAGE_ON)
{
if (ProgressBar->flags & FLAG_SHOW_CONTROL) ProgressBarDrawProgress(ProgressBar);
ProgressBar->flags=ProgressBar->flags & FLAG_GET_SPECIALIZED_MESSAGE_OFF;
}
break;
}
case MESSAGE_CHANGE_POSITION_EVENT:
{
ProgressBar->ctrl_x=ProgressBar->ctrl_x+message->arg1;
ProgressBar->ctrl_y=ProgressBar->ctrl_y+message->arg2;
SendMessage((struct HEADER*)ProgressBar,message);
break;
}
case MESSAGE_CALL_TIMER_EVENT:
{
if (ProgressBar->timer!=(DWORD*)NULL)
{
timer=(struct TIMER*)ProgressBar->timer;
if (timer->flags & FLAG_TIMER_ON) Timer(timer);
}
SendMessage((struct HEADER*)ProgressBar,message);
break;
}
case MESSAGE_DESTROY_CONTROL:
{
if (ProgressBar->timer!=(DWORD*)NULL) free(ProgressBar->timer);
free(ProgressBar->finition);
SendMessage((struct HEADER*)ProgressBar,message);
break;
}
case MESSAGE_SET_MAIN_PARENT:
{
SendMessage((struct HEADER*)ProgressBar,message);
ProgressBar->main_parent=(DWORD*)message->arg1;
SendMessage((struct HEADER*)ProgressBar,message);
break;
}
default: break;
}
}
//---------------------------------------------------------------------------------
// create control ProgressBar
//---------------------------------------------------------------------------------
void* CreateProgressBarEmpty(struct ProgressBarData *info_for_control)
{
struct ControlProgressBar *ProgressBar;
struct FINITION *fin;
ProgressBar=malloc(sizeof(struct ControlProgressBar));
ProgressBar->finition=malloc(sizeof(struct FINITION));
fin=(struct FINITION*)ProgressBar->finition;
fin->flags=0;
ID++;
#ifdef DEBUG
printf("\ncreated progress bar with ID=%d",(int)ID);
#endif
ProgressBar->child_bk=(DWORD*)NULL;
ProgressBar->child_fd=(DWORD*)NULL;
ProgressBar->active_control_for_keys=(DWORD*)NULL;
ProgressBar->active_control_for_mouse=(DWORD*)NULL;
ProgressBar->callback=(DWORD*)NULL;
ProgressBar->timer=(DWORD*)NULL;
ProgressBar->ctrl_proc=(DWORD*)&ProgressBarProc;
ProgressBar->ctrl_x=(DWORD)info_for_control->x;
ProgressBar->ctrl_y=(DWORD)info_for_control->y;
ProgressBar->ctrl_sizex=(DWORD)info_for_control->width;
ProgressBar->ctrl_sizey=(DWORD)info_for_control->height;
ProgressBar->ctrl_ID=ID;
ProgressBar->progress=info_for_control->progress;
ProgressBar->flags=0;
ProgressBar->flags=ProgressBar->flags | FLAG_SHOW_CONTROL;
ProgressBar->prb_flags=0;
ProgressBar->prb_flags=ProgressBar->prb_flags | FLAG_PB_HORIZONTAL_ORIENTATION_ON;
ProgressBar->prb_flags=ProgressBar->prb_flags | FLAG_PB_FROM_LEFT_TO_RIGHT_ON;
return(ProgressBar);
}
void* CreateProgressBar(gui_progress_bar_data_t *info)
{
gui_text_t *text;
gui_text_data_t txtdata;
gui_progress_bar_t *pbar;
pbar=CreateProgressBarEmpty(info);
txtdata.x=0;
txtdata.y=0;
txtdata.font=NULL;
txtdata.background=FALSE;
txtdata.color=0;
txtdata.text=malloc(1024);
txtdata.text[0]=0;
text=CreateText(&txtdata);
text->ctrl_x=(pbar->ctrl_sizex/2)-(text->ctrl_sizex/2);
text->ctrl_y=(pbar->ctrl_sizey/2)-(text->ctrl_sizey/2);
PackControls(pbar,text);
text->flags &=FLAG_HIDE_CONTROL;
return(pbar);
}
void ProgressBarSetText(gui_progress_bar_t *pbar,char *txt)
{
gui_text_t *text;
text=(gui_text_t*)pbar->child_bk;
if (*txt!='\0')
{
pbar->prb_flags|=FLAG_PB_TEXT_ON;
memmove(text->text,txt,strlen(txt));
text->flags |=FLAG_SHOW_CONTROL;
}
}
char *ProgressBarGetText(gui_progress_bar_t *pbar)
{
gui_text_t *text;
text=(gui_text_t*)pbar->child_bk;
return(text->text);
}

View File

@ -1,6 +0,0 @@
#define FLAG_SCROLL_BAR_ORIENTATION_HORIZONTAL_ON 0x1
#define FLAG_SCROLL_BAR_ORIENTATION_HORIZONTAL_OFF 0xfe
#define FLAG_SCROLL_BAR_ORIENTATION_VERTICAL_ON 0x2
#define FLAG_SCROLL_BAR_ORIENTATION_VERTICAL_OFF 0xfd
#define FLAG_SCROLL_RULLER_PRESSED 0x4
#define FLAG_SCROLL_RULLER_RELEASED 0xfb

View File

@ -1,801 +0,0 @@
/*
control ScrollBar
*/
////////////////////////////////////////////////////////////////////////////////
// Draw Ruller
////////////////////////////////////////////////////////////////////////////////
void DrawRuller(struct ControlScrollBar *ScrollBar)
{
int x,y,sizex,sizey;
int scrollbar_size,ruller_size,ruller_pos;
struct FINITION *fin;
x=ScrollBar->ctrl_x;
y=ScrollBar->ctrl_y;
sizex=ScrollBar->ctrl_sizex;
sizey=ScrollBar->ctrl_sizey;
fin=(struct FINITION*)ScrollBar->finition;
if (ScrollBar->scb_flags & FLAG_SCROLL_BAR_ORIENTATION_HORIZONTAL_ON)
{
scrollbar_size=sizex-sizey*2;
ruller_size=(int)(scrollbar_size*ScrollBar->ruller_size);
if (ruller_size<5) ruller_size=5;
if (ruller_size>sizex) ruller_size=sizex-2*sizey;
ruller_pos=x+sizey+(int)((scrollbar_size-ruller_size)*ScrollBar->ruller_pos);
//left bar
Draw(fin,TOOL_FILLED_RECTANGLE,x+sizey,y+1,ruller_pos-x-sizey,sizey-2,COLOR_FON);
//right bar
Draw(fin,TOOL_FILLED_RECTANGLE,ruller_pos+ruller_size,y+1,x+sizex-sizey-ruller_pos-ruller_size,sizey-2,COLOR_FON);
//roller
Draw(fin,TOOL_RECTANGLE,ruller_pos,y,ruller_size,sizey,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_FILLED_RECTANGLE,ruller_pos+1,y+1,ruller_size-2,sizey-2,COLOR_MIDDLE_LIGHT);
Draw(fin,TOOL_VERTICAL_LINE,ruller_pos+(ruller_size/2)-2,y+sizey/4,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_VERTICAL_LINE,ruller_pos+(ruller_size/2),y+sizey/4,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_VERTICAL_LINE,ruller_pos+(ruller_size/2)+2,y+sizey/4,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
}
if (ScrollBar->scb_flags & FLAG_SCROLL_BAR_ORIENTATION_VERTICAL_ON)
{
scrollbar_size=sizey-sizex*2;
ruller_size=(int)(scrollbar_size*ScrollBar->ruller_size);
if (ruller_size<5) ruller_size=5;
if (ruller_size>sizey) ruller_size=sizey-2*sizex;
ruller_pos=y+sizex+(int)((scrollbar_size-ruller_size)*ScrollBar->ruller_pos);
//up bar
Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+sizex,sizex-2,ruller_pos-y-sizex,COLOR_FON);
//down bar
Draw(fin,TOOL_FILLED_RECTANGLE,x+1,ruller_pos+ruller_size,sizex-2,y+sizey-sizex-ruller_pos-ruller_size,COLOR_FON);
//roller
Draw(fin,TOOL_RECTANGLE,x,ruller_pos,sizex,ruller_size,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_FILLED_RECTANGLE,x+1,ruller_pos+1,sizex-2,ruller_size-2,COLOR_MIDDLE_LIGHT);
Draw(fin,TOOL_HORIZONTAL_LINE,x+sizex/4,x+(3*sizex)/4,ruller_pos+(ruller_size/2)-2,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_HORIZONTAL_LINE,x+sizex/4,x+(3*sizex)/4,ruller_pos+(ruller_size/2),COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_HORIZONTAL_LINE,x+sizex/4,x+(3*sizex)/4,ruller_pos+(ruller_size/2)+2,COLOR_ABSOLUTE_DARK);
}
}
////////////////////////////////////////////////////////////////////////////////
// Draw full Scroll Bar
////////////////////////////////////////////////////////////////////////////////
void DrawScrollBar(struct ControlScrollBar *ScrollBar)
{
int x,y,sizex,sizey;
struct FINITION *fin;
x=ScrollBar->ctrl_x;
y=ScrollBar->ctrl_y;
sizex=ScrollBar->ctrl_sizex;
sizey=ScrollBar->ctrl_sizey;
fin=(struct FINITION*)ScrollBar->finition;
if (ScrollBar->scb_flags & FLAG_SCROLL_BAR_ORIENTATION_HORIZONTAL_ON)
{
//draw child buttons and roller
Draw(fin,TOOL_RECTANGLE,x,y,sizex,sizey,COLOR_ABSOLUTE_DARK);
//left button
Draw(fin,TOOL_RECTANGLE,x,y,sizey,sizey,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+1,sizey-2,sizey-2,COLOR_MIDDLE_LIGHT);
//left arrow of left button
Draw(fin,TOOL_LINE,x+sizey/3,y+sizey/2,x+(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizey/3,y+sizey/2,x+(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+1+(sizey/3),y+sizey/2,x+1+(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+1+(sizey/3),y+sizey/2,x+1+(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
//right button
Draw(fin,TOOL_RECTANGLE,x+sizex-sizey,y,sizey,sizey,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_FILLED_RECTANGLE,x+sizex-sizey+1,y+1,sizey-2,sizey-2,COLOR_MIDDLE_LIGHT);
//right arrow of right button
Draw(fin,TOOL_LINE,x+sizex-sizey/3,y+sizey/2,x+sizex-(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex-sizey/3,y+sizey/2,x+sizex-(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex-1-(sizey/3),y+sizey/2,x+sizex-1-(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex-1-(sizey/3),y+sizey/2,x+sizex-1-(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
//roller
DrawRuller(ScrollBar);
}
if (ScrollBar->scb_flags & FLAG_SCROLL_BAR_ORIENTATION_VERTICAL_ON)
{
//draw child buttons and roller
Draw(fin,TOOL_RECTANGLE,x,y,sizex,sizey,COLOR_ABSOLUTE_DARK);
//up button
Draw(fin,TOOL_RECTANGLE,x,y,sizex,sizex,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+1,sizex-2,sizex-2,COLOR_MIDDLE_LIGHT);
//up arrow of up button
Draw(fin,TOOL_LINE,x+sizex/2,y+sizex/3,x+sizex/4,y+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex/2,y+sizex/3,x+(3*sizex)/4,y+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex/2,y+1+(sizex/3),x+sizex/4,y+1+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex/2,y+1+(sizex/3),x+(3*sizex)/4,y+1+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
//down button
Draw(fin,TOOL_RECTANGLE,x,y+sizey-sizex,sizex,sizex,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+sizey-sizex+1,sizex-2,sizex-2,COLOR_MIDDLE_LIGHT);
//down arrow of down button
Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-sizex/3,x+sizex/4,y+sizey-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-sizex/3,x+(3*sizex)/4,y+sizey-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-1-(sizex/3),x+sizex/4,y+sizey-1-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-1-(sizex/3),x+(3*sizex)/4,y+sizey-1-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
//roller
DrawRuller(ScrollBar);
}
}
////////////////////////////////////////////////////////////////////////////////
// Vertical Scroll Bar
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// animation of up button of Scroll Bar
////////////////////////////////////////////////////////////////////////////////
void ScrollBar_DrawPressedUpButton(struct ControlScrollBar *ScrollBar)
{
int x,y,sizex,sizey;
struct FINITION *fin;
x=ScrollBar->ctrl_x;
y=ScrollBar->ctrl_y;
sizex=ScrollBar->ctrl_sizex;
sizey=ScrollBar->ctrl_sizey;
fin=(struct FINITION*)ScrollBar->finition;
//up button
Draw(fin,TOOL_RECTANGLE,x,y,sizex,sizex,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+1,sizex-2,sizex-2,COLOR_FON);
//up arrow of up button
Draw(fin,TOOL_LINE,x+sizex/2,y+sizex/3,x+sizex/4,y+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex/2,y+sizex/3,x+(3*sizex)/4,y+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex/2,y+1+(sizex/3),x+sizex/4,y+1+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex/2,y+1+(sizex/3),x+(3*sizex)/4,y+1+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
}
void ScrollBar_DrawReleasedUpButton(struct ControlScrollBar *ScrollBar)
{
int x,y,sizex,sizey;
struct FINITION *fin;
x=ScrollBar->ctrl_x;
y=ScrollBar->ctrl_y;
sizex=ScrollBar->ctrl_sizex;
sizey=ScrollBar->ctrl_sizey;
fin=(struct FINITION*)ScrollBar->finition;
//up button
Draw(fin,TOOL_RECTANGLE,x,y,sizex,sizex,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+1,sizex-2,sizex-2,COLOR_MIDDLE_LIGHT);
//up arrow of up button
Draw(fin,TOOL_LINE,x+sizex/2,y+sizex/3,x+sizex/4,y+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex/2,y+sizex/3,x+(3*sizex)/4,y+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex/2,y+1+(sizex/3),x+sizex/4,y+1+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex/2,y+1+(sizex/3),x+(3*sizex)/4,y+1+(2*sizex)/3,COLOR_ABSOLUTE_DARK);
}
////////////////////////////////////////////////////////////////////////////////
// animation of down button of Scroll Bar
////////////////////////////////////////////////////////////////////////////////
void ScrollBar_DrawPressedDownButton(struct ControlScrollBar *ScrollBar)
{
int x,y,sizex,sizey;
struct FINITION *fin;
x=ScrollBar->ctrl_x;
y=ScrollBar->ctrl_y;
sizex=ScrollBar->ctrl_sizex;
sizey=ScrollBar->ctrl_sizey;
fin=(struct FINITION*)ScrollBar->finition;
//down button
Draw(fin,TOOL_RECTANGLE,x,y+sizey-sizex,sizex,sizex,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+sizey-sizex+1,sizex-2,sizex-2,COLOR_FON);
//down arrow of down button
Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-sizex/3,x+sizex/4,y+sizey-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-sizex/3,x+(3*sizex)/4,y+sizey-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-1-(sizex/3),x+sizex/4,y+sizey-1-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-1-(sizex/3),x+(3*sizex)/4,y+sizey-1-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
}
void ScrollBar_DrawReleasedDownButton(struct ControlScrollBar *ScrollBar)
{
int x,y,sizex,sizey;
struct FINITION *fin;
x=ScrollBar->ctrl_x;
y=ScrollBar->ctrl_y;
sizex=ScrollBar->ctrl_sizex;
sizey=ScrollBar->ctrl_sizey;
fin=(struct FINITION*)ScrollBar->finition;
//down button
Draw(fin,TOOL_RECTANGLE,x,y+sizey-sizex,sizex,sizex,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+sizey-sizex+1,sizex-2,sizex-2,COLOR_MIDDLE_LIGHT);
//down arrow of down button
Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-sizex/3,x+sizex/4,y+sizey-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-sizex/3,x+(3*sizex)/4,y+sizey-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-1-(sizex/3),x+sizex/4,y+sizey-1-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex/2,y+sizey-1-(sizex/3),x+(3*sizex)/4,y+sizey-1-(2*sizex)/3,COLOR_ABSOLUTE_DARK);
}
////////////////////////////////////////////////////////////////////////////////
// callback function for up button of Scroll Bar
////////////////////////////////////////////////////////////////////////////////
void ScrollBar_FuncCallbackForUpButton_Pressed(struct HEADER *control,void *data)
{
struct ControlScrollBar *ScrollBar;
struct HEADERPARENT *main_parent;
ScrollBar=(struct ControlScrollBar*)data;
if (ScrollBar->ruller_size!=1.0)
{
ScrollBar->ruller_pos=ScrollBar->ruller_pos-ScrollBar->ruller_step;
}
if (ScrollBar->ruller_pos<0.0) ScrollBar->ruller_pos=0.0;
ScrollBar_DrawPressedUpButton(ScrollBar);
if (ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT)!=NULL)
{
main_parent=(struct HEADERPARENT*)ScrollBar->main_parent;
ScrollBar->flags=ScrollBar->flags | FLAG_CONNECT_EVENT_ON;
main_parent->control_for_callback_function[main_parent->number_callbacks]=
(DWORD*)ScrollBar;
main_parent->callback_for_control_callback[main_parent->number_callbacks]=
(DWORD*)ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT);
main_parent->number_callbacks++;
}
DrawRuller(ScrollBar);
}
void ScrollBar_FuncCallbackForUpButton_Released(struct HEADER *control,void *data)
{
struct ControlScrollBar *ScrollBar;
ScrollBar=(struct ControlScrollBar*)data;
ScrollBar_DrawReleasedUpButton(ScrollBar);
}
////////////////////////////////////////////////////////////////////////////////
// callback function for down button of Scroll Bar
////////////////////////////////////////////////////////////////////////////////
void ScrollBar_FuncCallbackForDownButton_Pressed(struct HEADER *control,void *data)
{
struct ControlScrollBar *ScrollBar;
struct HEADERPARENT *main_parent;
ScrollBar=(struct ControlScrollBar*)data;
if (ScrollBar->ruller_size!=1.0)
{
ScrollBar->ruller_pos=ScrollBar->ruller_pos+ScrollBar->ruller_step;
}
if (ScrollBar->ruller_pos>1.0) ScrollBar->ruller_pos=1.0;
ScrollBar_DrawPressedDownButton(ScrollBar);
if (ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT)!=NULL)
{
main_parent=(struct HEADERPARENT*)ScrollBar->main_parent;
ScrollBar->flags=ScrollBar->flags | FLAG_CONNECT_EVENT_ON;
main_parent->control_for_callback_function[main_parent->number_callbacks]=
(DWORD*)ScrollBar;
main_parent->callback_for_control_callback[main_parent->number_callbacks]=
(DWORD*)ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT);
main_parent->number_callbacks++;
}
DrawRuller(ScrollBar);
}
void ScrollBar_FuncCallbackForDownButton_Released(struct HEADER *control,void *data)
{
struct ControlScrollBar *ScrollBar;
ScrollBar=(struct ControlScrollBar*)data;
ScrollBar_DrawReleasedDownButton(ScrollBar);
DrawRuller(ScrollBar);
}
////////////////////////////////////////////////////////////////////////////////
// Horizontal Scroll Bar
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// animation of left button of Scroll Bar
////////////////////////////////////////////////////////////////////////////////
void ScrollBar_DrawPressedLeftButton(struct ControlScrollBar *ScrollBar)
{
int x,y,sizex,sizey;
struct FINITION *fin;
x=ScrollBar->ctrl_x;
y=ScrollBar->ctrl_y;
sizex=ScrollBar->ctrl_sizex;
sizey=ScrollBar->ctrl_sizey;
fin=(struct FINITION*)ScrollBar->finition;
//left button
Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+1,sizey-2,sizey-2,COLOR_FON);
//left arrow of left button
Draw(fin,TOOL_LINE,x+sizey/3,y+sizey/2,x+(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizey/3,y+sizey/2,x+(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+1+(sizey/3),y+sizey/2,x+1+(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+1+(sizey/3),y+sizey/2,x+1+(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
}
void ScrollBar_DrawReleasedLeftButton(struct ControlScrollBar *ScrollBar)
{
int x,y,sizex,sizey;
struct FINITION *fin;
x=ScrollBar->ctrl_x;
y=ScrollBar->ctrl_y;
sizex=ScrollBar->ctrl_sizex;
sizey=ScrollBar->ctrl_sizey;
fin=(struct FINITION*)ScrollBar->finition;
//left button
Draw(fin,TOOL_FILLED_RECTANGLE,x+1,y+1,sizey-2,sizey-2,COLOR_MIDDLE_LIGHT);
//left arrow of left button
Draw(fin,TOOL_LINE,x+sizey/3,y+sizey/2,x+(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizey/3,y+sizey/2,x+(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+1+(sizey/3),y+sizey/2,x+1+(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+1+(sizey/3),y+sizey/2,x+1+(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
}
////////////////////////////////////////////////////////////////////////////////
// animation of right button of Scroll Bar
////////////////////////////////////////////////////////////////////////////////
void ScrollBar_DrawPressedRightButton(struct ControlScrollBar *ScrollBar)
{
int x,y,sizex,sizey;
struct FINITION *fin;
x=ScrollBar->ctrl_x;
y=ScrollBar->ctrl_y;
sizex=ScrollBar->ctrl_sizex;
sizey=ScrollBar->ctrl_sizey;
fin=(struct FINITION*)ScrollBar->finition;
//right button
Draw(fin,TOOL_FILLED_RECTANGLE,x+sizex-sizey+1,y+1,sizey-2,sizey-2,COLOR_FON);
//right arrow of right button
Draw(fin,TOOL_LINE,x+sizex-sizey/3,y+sizey/2,x+sizex-(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex-sizey/3,y+sizey/2,x+sizex-(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex-1-(sizey/3),y+sizey/2,x+sizex-1-(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex-1-(sizey/3),y+sizey/2,x+sizex-1-(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
}
void ScrollBar_DrawReleasedRightButton(struct ControlScrollBar *ScrollBar)
{
int x,y,sizex,sizey;
struct FINITION *fin;
x=ScrollBar->ctrl_x;
y=ScrollBar->ctrl_y;
sizex=ScrollBar->ctrl_sizex;
sizey=ScrollBar->ctrl_sizey;
fin=(struct FINITION*)ScrollBar->finition;
//right button
Draw(fin,TOOL_FILLED_RECTANGLE,x+sizex-sizey+1,y+1,sizey-2,sizey-2,COLOR_MIDDLE_LIGHT);
//right arrow of right button
Draw(fin,TOOL_LINE,x+sizex-sizey/3,y+sizey/2,x+sizex-(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex-sizey/3,y+sizey/2,x+sizex-(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex-1-(sizey/3),y+sizey/2,x+sizex-1-(2*sizey)/3,y+sizey/4,COLOR_ABSOLUTE_DARK);
Draw(fin,TOOL_LINE,x+sizex-1-(sizey/3),y+sizey/2,x+sizex-1-(2*sizey)/3,y+(3*sizey)/4,COLOR_ABSOLUTE_DARK);
}
////////////////////////////////////////////////////////////////////////////////
// callback function for left button of Scroll Bar
////////////////////////////////////////////////////////////////////////////////
void ScrollBar_FuncCallbackForLeftButton_Pressed(struct HEADER *control,void *data)
{
struct ControlScrollBar *ScrollBar;
struct HEADERPARENT *main_parent;
ScrollBar=(struct ControlScrollBar*)data;
if (ScrollBar->ruller_size!=1.0)
{
ScrollBar->ruller_pos=ScrollBar->ruller_pos-ScrollBar->ruller_step;
}
if (ScrollBar->ruller_pos<0.0) ScrollBar->ruller_pos=0.0;
ScrollBar_DrawPressedLeftButton(ScrollBar);
if (ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT)!=NULL)
{
main_parent=(struct HEADERPARENT*)ScrollBar->main_parent;
ScrollBar->flags=ScrollBar->flags | FLAG_CONNECT_EVENT_ON;
main_parent->control_for_callback_function[main_parent->number_callbacks]=
(DWORD*)ScrollBar;
main_parent->callback_for_control_callback[main_parent->number_callbacks]=
(DWORD*)ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT);
main_parent->number_callbacks++;
}
DrawRuller(ScrollBar);
}
void ScrollBar_FuncCallbackForLeftButton_Released(struct HEADER *control,void *data)
{
struct ControlScrollBar *ScrollBar;
ScrollBar=(struct ControlScrollBar*)data;
ScrollBar_DrawReleasedLeftButton(ScrollBar);
}
////////////////////////////////////////////////////////////////////////////////
// callback function for right button of Scroll Bar
////////////////////////////////////////////////////////////////////////////////
void ScrollBar_FuncCallbackForRightButton_Pressed(struct HEADER *control,void *data)
{
struct ControlScrollBar *ScrollBar;
struct HEADERPARENT *main_parent;
ScrollBar=(struct ControlScrollBar*)data;
if (ScrollBar->ruller_size!=1.0)
{
ScrollBar->ruller_pos=ScrollBar->ruller_pos+ScrollBar->ruller_step;
}
if (ScrollBar->ruller_pos>1.0) ScrollBar->ruller_pos=1.0;
ScrollBar_DrawPressedRightButton(ScrollBar);
if (ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT)!=NULL)
{
main_parent=(struct HEADERPARENT*)ScrollBar->main_parent;
ScrollBar->flags=ScrollBar->flags | FLAG_CONNECT_EVENT_ON;
main_parent->control_for_callback_function[main_parent->number_callbacks]=
(DWORD*)ScrollBar;
main_parent->callback_for_control_callback[main_parent->number_callbacks]=
(DWORD*)ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT);
main_parent->number_callbacks++;
}
DrawRuller(ScrollBar);
}
void ScrollBar_FuncCallbackForRightButton_Released(struct HEADER *control,void *data)
{
struct ControlScrollBar *ScrollBar;
ScrollBar=(struct ControlScrollBar*)data;
ScrollBar_DrawReleasedRightButton(ScrollBar);
DrawRuller(ScrollBar);
}
////////////////////////////////////////////////////////////////////////////////
// callback function for ruller bar button of Scroll Bar
////////////////////////////////////////////////////////////////////////////////
void ScrollBar_FuncCallbackForScrollRullerPressed(struct HEADER *control,void *data)
{
struct ControlScrollBar *ScrollBar;
ScrollBar=(struct ControlScrollBar*)data;
ScrollBar->scb_flags=ScrollBar->scb_flags | FLAG_SCROLL_RULLER_PRESSED;
}
void ScrollBar_FuncCallbackForScrollRullerReleased(struct HEADER *control,void *data)
{
struct ControlScrollBar *ScrollBar;
ScrollBar=(struct ControlScrollBar*)data;
ScrollBar->scb_flags=ScrollBar->scb_flags & FLAG_SCROLL_RULLER_RELEASED;
}
//---------------------------------------------------------------------------------
// control ScrollBar
//---------------------------------------------------------------------------------
void ScrollBarProc(struct ControlScrollBar *ScrollBar,struct MESSAGE *message)
{
int mx,my;
char mouse_buttons_state;
int x,y,sizex,sizey;
int scrollbar_size,ruller_size,ruller_pos;
int ruller_min,ruller_max;
float max_pos,current_pos,last_ruller_pos;
struct FINITION *fin;
struct TIMER *timer;
struct HEADERPARENT *main_parent;
x=ScrollBar->ctrl_x;
y=ScrollBar->ctrl_y;
sizex=ScrollBar->ctrl_sizex;
sizey=ScrollBar->ctrl_sizey;
switch(message->type)
{
case MESSAGE_FULL_REDRAW_ALL:
{
//draw ScrollBar
if (ScrollBar->flags & FLAG_SHOW_CONTROL) DrawScrollBar(ScrollBar);
break;
}
case MESSAGE_FULL_REDRAW_ALL_WITH_FINITION:
{
fin=(struct FINITION*)ScrollBar->finition;
fin->flags=fin->flags | FINITION_ON;
fin->x=message->arg1;
fin->y=message->arg2;
fin->sizex=message->arg3;
fin->sizey=message->arg4;
DrawScrollBar(ScrollBar);
break;
}
case MESSAGE_SPECIALIZED:
{
if (ScrollBar->flags & FLAG_GET_SPECIALIZED_MESSAGE_ON)
{
if (ScrollBar->flags & FLAG_SHOW_CONTROL) DrawScrollBar(ScrollBar);
ScrollBar->flags=ScrollBar->flags & FLAG_GET_SPECIALIZED_MESSAGE_OFF;
}
break;
}
case MESSAGE_MOUSE_EVENT:
{
mx=message->arg1;
my=message->arg2;
mouse_buttons_state=message->arg3;
main_parent=(struct HEADERPARENT*)ScrollBar->main_parent;
//check ruller state
if (ScrollBar->scb_flags & FLAG_SCROLL_RULLER_PRESSED)
{ // horizontal ScrollBar
if (ScrollBar->scb_flags & FLAG_SCROLL_BAR_ORIENTATION_HORIZONTAL_ON)
{
scrollbar_size=sizex-sizey*2;
ruller_size=scrollbar_size*ScrollBar->ruller_size;
if (ruller_size<5) ruller_size=5;
ruller_min=x+sizey; //minimum x
ruller_max=ruller_min+scrollbar_size-ruller_size;
ruller_pos=mx-(ruller_size/2);//ruller centred under mouse pointer
if (ruller_pos<ruller_min) ruller_pos=ruller_min;
if (ruller_pos>ruller_max) ruller_pos=ruller_max;
if (ruller_max!=ruller_min)
{
max_pos=(float)(ruller_max-ruller_min);
current_pos=(float)(ruller_pos-ruller_min);
last_ruller_pos=ScrollBar->ruller_pos;
ScrollBar->ruller_pos=current_pos/max_pos;
}
else {ScrollBar->ruller_pos=0.0;}
if (ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT)!=NULL)
{
if (ScrollBar->ruller_pos!=last_ruller_pos)
{
ScrollBar->flags=ScrollBar->flags | FLAG_CONNECT_EVENT_ON;
main_parent->control_for_callback_function[main_parent->number_callbacks]=
(DWORD*)ScrollBar;
main_parent->callback_for_control_callback[main_parent->number_callbacks]=
(DWORD*)ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT);
main_parent->number_callbacks++;
}
}
if (ScrollBar->ruller_pos!=last_ruller_pos) DrawRuller(ScrollBar);
break;
}
// vertical ScrollBar
if (ScrollBar->scb_flags & FLAG_SCROLL_BAR_ORIENTATION_VERTICAL_ON)
{
scrollbar_size=sizey-sizex*2;
ruller_size=scrollbar_size*ScrollBar->ruller_size;
if (ruller_size<5) ruller_size=5;
ruller_min=y+sizex; //minimum x
ruller_max=ruller_min+scrollbar_size-ruller_size;
ruller_pos=my-(ruller_size/2);//ruller centred under mouse pointer
if (ruller_pos<ruller_min) ruller_pos=ruller_min;
if (ruller_pos>ruller_max) ruller_pos=ruller_max;
if (ruller_max!=ruller_min)
{
max_pos=(float)(ruller_max-ruller_min);
current_pos=(float)(ruller_pos-ruller_min);
last_ruller_pos=ScrollBar->ruller_pos;
ScrollBar->ruller_pos=current_pos/max_pos;
}
else {ScrollBar->ruller_pos=0.0;}
if (ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT)!=NULL)
{
if (ScrollBar->ruller_pos!=last_ruller_pos)
{
ScrollBar->flags=ScrollBar->flags | FLAG_CONNECT_EVENT_ON;
main_parent->control_for_callback_function[main_parent->number_callbacks]=
(DWORD*)ScrollBar;
main_parent->callback_for_control_callback[main_parent->number_callbacks]=
(DWORD*)ControlCheckCallbackEvent(ScrollBar,SCROLLBAR_CHANGED_EVENT);
main_parent->number_callbacks++;
}
}
if (ScrollBar->ruller_pos!=last_ruller_pos) DrawRuller(ScrollBar);
}
}
break;
}
case MESSAGE_CHANGE_POSITION_EVENT:
{
ScrollBar->ctrl_x=ScrollBar->ctrl_x+message->arg1;
ScrollBar->ctrl_y=ScrollBar->ctrl_y+message->arg2;
break;
}
case MESSAGE_CALL_TIMER_EVENT:
{
if (ScrollBar->timer!=(DWORD*)NULL)
{
timer=(struct TIMER*)ScrollBar->timer;
if (timer->flags & FLAG_TIMER_ON) Timer(timer);
}
break;
}
case MESSAGE_DESTROY_CONTROL:
{
if (ScrollBar->timer!=(DWORD*)NULL) free(ScrollBar->timer);
free(ScrollBar->finition);
break;
}
case MESSAGE_SET_MAIN_PARENT:
{
SendMessage((struct HEADER*)ScrollBar,message);
ScrollBar->main_parent=(DWORD*)message->arg1;
break;
}
default: break;
}
//send message to child controls(if there is)
SendMessage((struct HEADER*)ScrollBar,message);
}
//---------------------------------------------------------------------------------
// create control ScrollBar
//---------------------------------------------------------------------------------
void* CreateScrollBar(struct ScrollBarData *info_for_control)
{
struct ControlScrollBar *ScrollBar;
struct FINITION *fin;
ScrollBar=malloc(sizeof(struct ControlScrollBar));
ScrollBar->finition=malloc(sizeof(struct FINITION));
fin=(struct FINITION*)ScrollBar->finition;
fin->flags=0;
ID++;
#ifdef DEBUG
printf("\ncreated scroll bar with ID=%d",(int)ID);
#endif
ScrollBar->child_bk=(DWORD*)NULL;
ScrollBar->child_fd=(DWORD*)NULL;
ScrollBar->active_control_for_keys=(DWORD*)NULL;
ScrollBar->active_control_for_mouse=(DWORD*)NULL;
ScrollBar->callback=(DWORD*)NULL;
ScrollBar->timer=(DWORD*)NULL;
ScrollBar->ctrl_proc=(DWORD*)&ScrollBarProc;
ScrollBar->ctrl_x=(DWORD)info_for_control->x;
ScrollBar->ctrl_y=(DWORD)info_for_control->y;
ScrollBar->ctrl_sizex=(DWORD)info_for_control->width;
ScrollBar->ctrl_sizey=(DWORD)info_for_control->height;
ScrollBar->ctrl_ID=ID;
ScrollBar->ruller_size=info_for_control->ruller_size;
ScrollBar->ruller_pos=info_for_control->ruller_pos;
ScrollBar->ruller_step=info_for_control->ruller_step;
ScrollBar->flags=0;
ScrollBar->flags=ScrollBar->flags | FLAG_SHOW_CONTROL;
return(ScrollBar);
}
void* CreateHorizontalScrollBar(struct ScrollBarData *info_for_control)
{
struct ControlScrollBar *ScrollBar;
struct ControlButton *ChildButton1;
struct ControlButton *ChildButton2;
struct ControlButton *ScrollRuller;
struct ButtonData ChildButton1Data;
struct ButtonData ChildButton2Data;
struct ButtonData ScrollRullerData;
ScrollBar=CreateScrollBar(info_for_control);
//set horizontal orientation
ScrollBar->scb_flags=0;
ScrollBar->scb_flags=ScrollBar->scb_flags | FLAG_SCROLL_BAR_ORIENTATION_HORIZONTAL_ON;
//fill data for first child button of scroller
ChildButton1Data.x=0;
ChildButton1Data.y=0;
ChildButton1Data.width=ScrollBar->ctrl_sizey;
ChildButton1Data.height=ChildButton1Data.width;
//fill data for second child button of scroller
ChildButton2Data.x=ScrollBar->ctrl_sizex-ScrollBar->ctrl_sizey;
ChildButton2Data.y=0;
ChildButton2Data.width=ScrollBar->ctrl_sizey;
ChildButton2Data.height=ChildButton2Data.width;
//fill data for scroll ruller button of scroller
ScrollRullerData.x=ScrollBar->ctrl_sizey;
ScrollRullerData.y=0;
ScrollRullerData.width=ScrollBar->ctrl_sizex-2*ScrollBar->ctrl_sizey;
ScrollRullerData.height=ScrollBar->ctrl_sizey;
ChildButton1=CreateButton(&ChildButton1Data);
ChildButton2=CreateButton(&ChildButton2Data);
ScrollRuller=CreateButton(&ScrollRullerData);
ChildButton1->flags=ChildButton1->flags & FLAG_HIDE_CONTROL;
ChildButton2->flags=ChildButton2->flags & FLAG_HIDE_CONTROL;
ScrollRuller->flags=ScrollRuller->flags & FLAG_HIDE_CONTROL;
SetCallbackFunction(ChildButton1,BUTTON_PRESSED_EVENT,&ScrollBar_FuncCallbackForLeftButton_Pressed,ScrollBar);
SetCallbackFunction(ChildButton1,BUTTON_RELEASED_EVENT,&ScrollBar_FuncCallbackForLeftButton_Released,ScrollBar);
SetCallbackFunction(ChildButton2,BUTTON_PRESSED_EVENT,&ScrollBar_FuncCallbackForRightButton_Pressed,ScrollBar);
SetCallbackFunction(ChildButton2,BUTTON_RELEASED_EVENT,&ScrollBar_FuncCallbackForRightButton_Released,ScrollBar);
SetCallbackFunction(ScrollRuller,BUTTON_PRESSED_EVENT,&ScrollBar_FuncCallbackForScrollRullerPressed,ScrollBar);
SetCallbackFunction(ScrollRuller,BUTTON_RELEASED_EVENT,&ScrollBar_FuncCallbackForScrollRullerReleased,ScrollBar);
//pack button in control ScrollBar
PackControls(ScrollBar,ChildButton1);
PackControls(ScrollBar,ChildButton2);
PackControls(ScrollBar,ScrollRuller);
return(ScrollBar);
}
void* CreateVerticalScrollBar(struct ScrollBarData *info_for_control)
{
struct ControlScrollBar *ScrollBar;
struct ControlButton *ChildButton1;
struct ControlButton *ChildButton2;
struct ControlButton *ScrollRuller;
struct ButtonData ChildButton1Data;
struct ButtonData ChildButton2Data;
struct ButtonData ScrollRullerData;
ScrollBar=CreateScrollBar(info_for_control);
//set vertical orientation
ScrollBar->scb_flags=0;
ScrollBar->scb_flags=ScrollBar->scb_flags | FLAG_SCROLL_BAR_ORIENTATION_VERTICAL_ON;
//fill data for first child button of scroller
ChildButton1Data.x=0;
ChildButton1Data.y=0;
ChildButton1Data.width=ScrollBar->ctrl_sizex;
ChildButton1Data.height=ChildButton1Data.width;
//fill data for second child button of scroller
ChildButton2Data.x=0;
ChildButton2Data.y=ScrollBar->ctrl_sizey-ScrollBar->ctrl_sizex;
ChildButton2Data.width=ScrollBar->ctrl_sizex;
ChildButton2Data.height=ChildButton2Data.width;
//fill data for scroll ruller button of scroller
ScrollRullerData.x=0;
ScrollRullerData.y=ScrollBar->ctrl_sizex;
ScrollRullerData.width=ScrollBar->ctrl_sizex;
ScrollRullerData.height=ScrollBar->ctrl_sizey-2*ScrollBar->ctrl_sizex;
ChildButton1=CreateButton(&ChildButton1Data);
ChildButton2=CreateButton(&ChildButton2Data);
ScrollRuller=CreateButton(&ScrollRullerData);
ChildButton1->flags=ChildButton1->flags & FLAG_HIDE_CONTROL;
ChildButton2->flags=ChildButton2->flags & FLAG_HIDE_CONTROL;
ScrollRuller->flags=ScrollRuller->flags & FLAG_HIDE_CONTROL;
SetCallbackFunction(ChildButton1,BUTTON_PRESSED_EVENT,&ScrollBar_FuncCallbackForUpButton_Pressed,ScrollBar);
SetCallbackFunction(ChildButton1,BUTTON_RELEASED_EVENT,&ScrollBar_FuncCallbackForUpButton_Released,ScrollBar);
SetCallbackFunction(ChildButton2,BUTTON_PRESSED_EVENT,&ScrollBar_FuncCallbackForDownButton_Pressed,ScrollBar);
SetCallbackFunction(ChildButton2,BUTTON_RELEASED_EVENT,&ScrollBar_FuncCallbackForDownButton_Released,ScrollBar);
SetCallbackFunction(ScrollRuller,BUTTON_PRESSED_EVENT,&ScrollBar_FuncCallbackForScrollRullerPressed,ScrollBar);
SetCallbackFunction(ScrollRuller,BUTTON_RELEASED_EVENT,&ScrollBar_FuncCallbackForScrollRullerReleased,ScrollBar);
//pack button in control ScrollBar
PackControls(ScrollBar,ChildButton1);
PackControls(ScrollBar,ChildButton2);
PackControls(ScrollBar,ScrollRuller);
return(ScrollBar);
}

View File

@ -1,6 +0,0 @@
#define FLAG_SCROLL_WIN_HORIZONTAL_SCROLL_ON 0x1
#define FLAG_SCROLL_WIN_VERTICAL_SCROLL_ON 0x2
#define FLAG_SCROLL_WIN_HORIZONTAL_SCROLL_OFF 0xfe
#define FLAG_SCROLL_WIN_VERTICAL_SCROLL_OFF 0xfd

View File

@ -1,530 +0,0 @@
/*
control ScrolledWindow
*/
////////////////////////////////////////////////////////////////////////
// pack controls in ScrolledWindow
////////////////////////////////////////////////////////////////////////
void ScrolledWindowPackControls(void *parent,void *Control)
{
struct HEADER *control;
struct ControlScrolledWindow *ScrolledWindow;
struct ControlScrollBar *HorizontalScrollBar;
struct ControlScrollBar *VerticalScrollBar;
struct FINITION *fin;
int x,y;
ScrolledWindow=(struct ControlScrolledWindow*)parent;
control=(struct HEADER *)Control;
if (control->ctrl_x+control->ctrl_sizex>ScrolledWindow->virtual_sizex)
{
ScrolledWindow->virtual_sizex=control->ctrl_x+control->ctrl_sizex;
}
if (control->ctrl_y+control->ctrl_sizey>ScrolledWindow->virtual_sizey)
{
ScrolledWindow->virtual_sizey=control->ctrl_y+control->ctrl_sizey;
}
PackControls(ScrolledWindow,control);
//calculate new control coordinates
x=control->ctrl_x+1;//add border width
y=control->ctrl_y+1;//add border heght
SetControlNewPosition(control,x,y);
//save coordinates of control in arrea
ScrolledWindow->virtual_controls_x[ScrolledWindow->number_virtual_controls]=x;
ScrolledWindow->virtual_controls_y[ScrolledWindow->number_virtual_controls]=y;
ScrolledWindow->number_virtual_controls++;
x=ScrolledWindow->ctrl_x+1;
y=ScrolledWindow->ctrl_y+1;
//check cross control with scroll arrea
if (CheckCrossRectangles(x,y,ScrolledWindow->scroll_arrea_sizex,ScrolledWindow->scroll_arrea_sizey,
control->ctrl_x,control->ctrl_y,control->ctrl_sizex,control->ctrl_sizey)==TRUE)
{
control->flags=control->flags | FLAG_SHOW_CONTROL;
control->flags=control->flags & FLAG_MOUSE_BLOCKED_OFF;
}
else
{
control->flags=control->flags & FLAG_HIDE_CONTROL;
control->flags=control->flags | FLAG_MOUSE_BLOCKED_ON;
}
if (ScrolledWindow->virtual_sizex>ScrolledWindow->scroll_arrea_sizex)
{
HorizontalScrollBar=(struct ControlScrollBar*)ScrolledWindow->horizontal_scroll;
if ((ScrolledWindow->scw_flags & FLAG_SCROLL_WIN_HORIZONTAL_SCROLL_ON)==FALSE)
{
ScrolledWindow->scroll_arrea_sizey=ScrolledWindow->ctrl_sizey-16-2;
ScrolledWindow->scw_flags=ScrolledWindow->scw_flags | FLAG_SCROLL_WIN_HORIZONTAL_SCROLL_ON;
HorizontalScrollBar->flags=HorizontalScrollBar->flags | FLAG_SHOW_CONTROL;
HorizontalScrollBar->flags=HorizontalScrollBar->flags & FLAG_MOUSE_BLOCKED_OFF;
}
}
if (ScrolledWindow->virtual_sizey>ScrolledWindow->scroll_arrea_sizey)
{
VerticalScrollBar=(struct ControlScrollBar*)ScrolledWindow->vertical_scroll;
if ((ScrolledWindow->scw_flags & FLAG_SCROLL_WIN_VERTICAL_SCROLL_ON)==FALSE)
{
ScrolledWindow->scroll_arrea_sizex=ScrolledWindow->ctrl_sizex-16-2;
ScrolledWindow->scw_flags=ScrolledWindow->scw_flags | FLAG_SCROLL_WIN_VERTICAL_SCROLL_ON;
VerticalScrollBar->flags=VerticalScrollBar->flags | FLAG_SHOW_CONTROL;
VerticalScrollBar->flags=VerticalScrollBar->flags & FLAG_MOUSE_BLOCKED_OFF;
}
}
if (ScrolledWindow->scw_flags & FLAG_SCROLL_WIN_HORIZONTAL_SCROLL_ON)
{
HorizontalScrollBar->ruller_size=(float)ScrolledWindow->scroll_arrea_sizex;
HorizontalScrollBar->ruller_size=HorizontalScrollBar->ruller_size/((float)ScrolledWindow->virtual_sizex);
}
if (ScrolledWindow->scw_flags & FLAG_SCROLL_WIN_VERTICAL_SCROLL_ON)
{
VerticalScrollBar->ruller_size=(float)ScrolledWindow->scroll_arrea_sizey;
VerticalScrollBar->ruller_size=VerticalScrollBar->ruller_size/((float)ScrolledWindow->virtual_sizey);
}
//finit draw arrea for control
fin=(struct FINITION*)control->finition;
fin->x=ScrolledWindow->ctrl_x+1;
fin->y=ScrolledWindow->ctrl_y+1;
fin->sizex=ScrolledWindow->scroll_arrea_sizex;
fin->sizey=ScrolledWindow->scroll_arrea_sizey;
fin->flags=fin->flags | FINITION_ON;
}
////////////////////////////////////////////////////////////////////////////////
// Draw full Scrolled Window
////////////////////////////////////////////////////////////////////////////////
void ScrollWin_FuncCallback_HVScroll(struct HEADER* control,void *data)
{
struct ControlScrollBar *Hscrollbar,*Vscrollbar;
struct ControlScrolledWindow *ScrolledWindow;
struct HEADER *seek_control,*exchange_control;
struct MESSAGE local_message;
struct FINITION *fin;
int i,new_x,new_y,x,y,sizex,sizey;
char c;
char *save_buf,*buf;
int save_size_x,save_size_y;
DWORD draw_output;
ScrolledWindow=(gui_scrolled_window_t*)data;
Hscrollbar=(gui_scroll_bar_t*)ScrolledWindow->horizontal_scroll;
Vscrollbar=(gui_scroll_bar_t*)ScrolledWindow->vertical_scroll;
ScrolledWindow->virtual_x=(ScrolledWindow->virtual_sizex-ScrolledWindow->scroll_arrea_sizex)*Hscrollbar->ruller_pos;
ScrolledWindow->virtual_y=(ScrolledWindow->virtual_sizey-ScrolledWindow->scroll_arrea_sizey)*Vscrollbar->ruller_pos;
x=ScrolledWindow->ctrl_x+1;
y=ScrolledWindow->ctrl_y+1;
sizex=ScrolledWindow->scroll_arrea_sizex;
sizey=ScrolledWindow->scroll_arrea_sizey;
//alocate a buffer for draw text
c=screen.bits_per_pixel >> 3;
i=sizex*sizey*c;
buf=malloc(i);
//save current screen parameters
save_buf=screen.buffer;
save_size_x=screen.size_x;
save_size_y=screen.size_y;
draw_output=screen.draw_output;
//load parameters of local buffer
screen.buffer=buf;
screen.size_x=sizex;
screen.size_y=sizey;
screen.draw_output=DRAW_OUTPUT_BUFFER;
//fill buffer by background color
FillArrea(buf,i,screen.bits_per_pixel,COLOR_LIGHT);
local_message.type=MESSAGE_FULL_REDRAW_ALL_WITH_FINITION;
local_message.arg1=0;
local_message.arg2=0;
local_message.arg3=sizex;
local_message.arg4=sizey;
seek_control=(struct HEADER*)Vscrollbar->ctrl_fd;
//move controls in new position
for(i=0;i<ScrolledWindow->number_virtual_controls;i++)
{
new_x=ScrolledWindow->virtual_controls_x[i]-ScrolledWindow->virtual_x;
new_y=ScrolledWindow->virtual_controls_y[i]-ScrolledWindow->virtual_y;
SetControlNewPosition(seek_control,new_x,new_y);
if (CheckCrossRectangles(x,y,sizex,sizey,new_x,new_y,
seek_control->ctrl_sizex,
seek_control->ctrl_sizey)==TRUE)
{
seek_control->flags=seek_control->flags | FLAG_SHOW_CONTROL;
seek_control->flags=seek_control->flags & FLAG_MOUSE_BLOCKED_OFF;
//move control
SetControlNewPosition(seek_control,new_x-x,new_y-y);
//call draw control in buffer
ControlProc=(void (*)(void *Control,struct MESSAGE *message))seek_control->ctrl_proc;
ControlProc(seek_control,&local_message);
//restore last position of control
SetControlNewPosition(seek_control,new_x,new_y);
//restore coordinates of last finition of control
fin=(finition_t*)seek_control->finition;
fin->x=x;
fin->y=y;
}
else
{
seek_control->flags=seek_control->flags & FLAG_HIDE_CONTROL;
seek_control->flags=seek_control->flags | FLAG_MOUSE_BLOCKED_ON;
}
exchange_control=(struct HEADER*)seek_control->ctrl_fd;
seek_control=exchange_control;
}
//restore screen parameters
screen.buffer=save_buf;
screen.size_x=save_size_x;
screen.size_y=save_size_y;
screen.draw_output=draw_output;
//move rendered objects from local buffer to screen
fin=(finition_t*)ScrolledWindow->finition;
if (fin->flags & FINITION_ON)
DrawImageFinit(fin,x,y,sizex,sizey,screen.bits_per_pixel,buf);
else
DrawImage(x,y,sizex,sizey,screen.bits_per_pixel,buf);
//free local buffer
free(buf);
}
void DrawScrolledWindow(struct ControlScrolledWindow *ScrolledWindow)
{
int x,y,sizex,sizey;
struct FINITION *fin;
x=ScrolledWindow->ctrl_x;
y=ScrolledWindow->ctrl_y;
sizex=ScrolledWindow->ctrl_sizex;
sizey=ScrolledWindow->ctrl_sizey;
fin=(struct FINITION*)ScrolledWindow->finition;
if ((ScrolledWindow->scw_flags & FLAG_SCROLL_WIN_HORIZONTAL_SCROLL_ON) ||
(ScrolledWindow->scw_flags & FLAG_SCROLL_WIN_VERTICAL_SCROLL_ON))
{
Draw(fin,TOOL_RECTANGLE,x,y,ScrolledWindow->scroll_arrea_sizex+2,
ScrolledWindow->scroll_arrea_sizey+2,COLOR_ABSOLUTE_DARK);
}
else
Draw(fin,TOOL_RECTANGLE,x,y,sizex,sizey,COLOR_ABSOLUTE_DARK);
ScrollWin_FuncCallback_HVScroll(NULL,ScrolledWindow);
}
void ScrlWinCheckActivatedForKeysControl(struct ControlScrolledWindow *ScrolledWindow)
{
struct HEADER *control,*seek_control,*exchange_control;
struct MESSAGE local_message;
struct FINITION *fin;
struct ControlScrollBar *Vscrollbar,*Hscrollbar;
int i,x,y,sizex,sizey;
int sx,sy;
control=(struct HEADER*)ScrolledWindow->active_control_for_keys;
x=ScrolledWindow->ctrl_x+1;
y=ScrolledWindow->ctrl_y+1;
sizex=ScrolledWindow->scroll_arrea_sizex;
sizey=ScrolledWindow->scroll_arrea_sizey;
if (CheckFullCrossRectangles(x,y,sizex,sizey,
control->ctrl_x,control->ctrl_y,control->ctrl_sizex,control->ctrl_sizey)==TRUE) return;
//calculate new x and y coordinates
if (ScrolledWindow->scw_flags & FLAG_SCROLL_WIN_HORIZONTAL_SCROLL_ON)
{
sx=(control->ctrl_x-x);
if (sx<0) sx=x;
else
{
if (control->ctrl_sizex<sizex) sx=x+sizex-control->ctrl_sizex;
else sx=x;
}
}
if (ScrolledWindow->scw_flags & FLAG_SCROLL_WIN_VERTICAL_SCROLL_ON)
{
sy=(control->ctrl_y-y);
if (sy<0) sy=y;
else
{
if (control->ctrl_sizey<sizey) sy=y+sizey-control->ctrl_sizey;
else sy=y;
}
}
Vscrollbar=(struct ControlScrollBar*)ScrolledWindow->vertical_scroll;
Hscrollbar=(struct ControlScrollBar*)ScrolledWindow->horizontal_scroll;
//find active control and virtual control coordinates
seek_control=(struct HEADER*)Vscrollbar->ctrl_fd;
for(i=0;i<ScrolledWindow->number_virtual_controls;i++)
{
if (seek_control==control)
{
if (ScrolledWindow->scw_flags & FLAG_SCROLL_WIN_HORIZONTAL_SCROLL_ON)
ScrolledWindow->virtual_x=ScrolledWindow->virtual_controls_x[i]-sx;
if (ScrolledWindow->scw_flags & FLAG_SCROLL_WIN_VERTICAL_SCROLL_ON)
ScrolledWindow->virtual_y=ScrolledWindow->virtual_controls_y[i]-sy;
break;
}
exchange_control=(struct HEADER*)seek_control->ctrl_fd;
seek_control=exchange_control;
}
if (ScrolledWindow->scw_flags & FLAG_SCROLL_WIN_HORIZONTAL_SCROLL_ON)
{
Hscrollbar->ruller_pos=(float)ScrolledWindow->virtual_x;
Hscrollbar->ruller_pos=Hscrollbar->ruller_pos/((float)(ScrolledWindow->virtual_sizex-ScrolledWindow->scroll_arrea_sizex));
SpecialRedrawControl(Hscrollbar);
}
if (ScrolledWindow->scw_flags & FLAG_SCROLL_WIN_VERTICAL_SCROLL_ON)
{
Vscrollbar->ruller_pos=(float)ScrolledWindow->virtual_y;
Vscrollbar->ruller_pos=Vscrollbar->ruller_pos/((float)(ScrolledWindow->virtual_sizey-ScrolledWindow->scroll_arrea_sizey));
SpecialRedrawControl(Vscrollbar);
}
ScrollWin_FuncCallback_HVScroll(NULL,ScrolledWindow);
}
//---------------------------------------------------------------------------------
// control ScrolledWindowScrolledWindow->virtual_sizex
//---------------------------------------------------------------------------------
void ScrolledWindowProc(struct ControlScrolledWindow *ScrolledWindow,struct MESSAGE *message)
{
int i,x,y,sizex,sizey;
struct HEADER *seek_control,*exchange_control;
struct ControlScrollBar *Hscrollbar,*Vscrollbar;
struct MESSAGE local_message;
struct FINITION *fin;
struct TIMER *timer;
x=ScrolledWindow->ctrl_x;
y=ScrolledWindow->ctrl_y;
sizex=ScrolledWindow->ctrl_sizex;
sizey=ScrolledWindow->ctrl_sizey;
switch(message->type)
{
case MESSAGE_FULL_REDRAW_ALL:
{
//draw ScrolledWindow
if (ScrolledWindow->flags & FLAG_SHOW_CONTROL)
{
DrawScrolledWindow(ScrolledWindow);
Hscrollbar=(gui_scroll_bar_t*)ScrolledWindow->horizontal_scroll;
Vscrollbar=(gui_scroll_bar_t*)ScrolledWindow->vertical_scroll;
//draw scroll bars
ControlProc=(void (*)(void *Control,gui_message_t *message))Hscrollbar->ctrl_proc;
ControlProc(Hscrollbar,message);
ControlProc=(void (*)(void *Control,gui_message_t *message))Vscrollbar->ctrl_proc;
ControlProc(Vscrollbar,message);
}
break;
}
case MESSAGE_FULL_REDRAW_ALL_WITH_FINITION:
{
fin=(struct FINITION*)ScrolledWindow->finition;
fin->flags=fin->flags | FINITION_ON;
fin->x=message->arg1;
fin->y=message->arg2;
fin->sizex=message->arg3;
fin->sizey=message->arg4;
DrawScrolledWindow(ScrolledWindow);
SendMessage((struct HEADER*)ScrolledWindow,message);//<<<<<<----------------------------------
break;
}
case MESSAGE_SPECIALIZED:
{
if (ScrolledWindow->flags & FLAG_SHOW_CONTROL) SendMessage((struct HEADER*)ScrolledWindow,message);
ScrolledWindow->flags=ScrolledWindow->flags & FLAG_GET_SPECIALIZED_MESSAGE_OFF;
break;
}
case MESSAGE_KEYS_EVENT:
{
if (ScrolledWindow->active_control_for_keys!=NULL) ScrlWinCheckActivatedForKeysControl(ScrolledWindow);
SendMessage((struct HEADER*)ScrolledWindow,message);
break;
}
case MESSAGE_MOUSE_EVENT:
{
SendMessage((struct HEADER*)ScrolledWindow,message);
break;
}
case MESSAGE_CHANGE_POSITION_EVENT:
{
ScrolledWindow->ctrl_x=ScrolledWindow->ctrl_x+message->arg1;
ScrolledWindow->ctrl_y=ScrolledWindow->ctrl_y+message->arg2;
//change virtual coordinates of controls
Vscrollbar=(struct ControlScrollBar*)ScrolledWindow->vertical_scroll;
seek_control=(struct HEADER *)Vscrollbar->ctrl_fd;
for(i=0;i<ScrolledWindow->number_virtual_controls;i++)
{
ScrolledWindow->virtual_controls_x[i]+=message->arg1;
ScrolledWindow->virtual_controls_y[i]+=message->arg2;
fin=(struct FINITION*)seek_control->finition;
fin->x=ScrolledWindow->ctrl_x+1;
fin->y=ScrolledWindow->ctrl_y+1;
fin->sizex=ScrolledWindow->scroll_arrea_sizex;
fin->sizey=ScrolledWindow->scroll_arrea_sizey;
exchange_control=(struct HEADER*)seek_control->ctrl_fd;
seek_control=exchange_control;
}
SendMessage((struct HEADER*)ScrolledWindow,message);
break;
}
case MESSAGE_CALL_TIMER_EVENT:
{
if (ScrolledWindow->timer!=(DWORD*)NULL)
{
timer=(struct TIMER*)ScrolledWindow->timer;
if (timer->flags & FLAG_TIMER_ON) Timer(timer);
}
SendMessage((struct HEADER*)ScrolledWindow,message);
break;
}
case MESSAGE_SET_FOCUSE:
{
//SendMessage((struct HEADER*)ScrolledWindow,message);
break;
}
case MESSAGE_CHANGE_FOCUSE:
{
//SendMessage((struct HEADER*)ScrolledWindow,message);
break;
}
case MESSAGE_DESTROY_CONTROL:
{
if (ScrolledWindow->timer!=(DWORD*)NULL) free(ScrolledWindow->timer);
free(ScrolledWindow->finition);
SendMessage((struct HEADER*)ScrolledWindow,message);
break;
}
case MESSAGE_SET_MAIN_PARENT:
{
SendMessage((struct HEADER*)ScrolledWindow,message);
ScrolledWindow->main_parent=(DWORD*)message->arg1;
break;
}
default: break;
}
}
//---------------------------------------------------------------------------------
// create control ScrolledWindow
//---------------------------------------------------------------------------------
void* CreateScrolledWindow(struct ScrolledWindowData *info_for_control)
{
struct ControlScrolledWindow *ScrolledWindow;
struct FINITION *fin;
struct ControlScrollBar *HorizontalScrollBar;
struct ControlScrollBar *VerticalScrollBar;
struct ScrollBarData HorizontalScrollData;
struct ScrollBarData VerticalScrollData;
ScrolledWindow=malloc(sizeof(struct ControlScrolledWindow));
ScrolledWindow->finition=malloc(sizeof(struct FINITION));
fin=(struct FINITION*)ScrolledWindow->finition;
fin->flags=0;
ScrolledWindow->scw_flags=0;
ID++;
#ifdef DEBUG
printf("\ncreated scrollet window with ID=%d",(int)ID);
#endif
ScrolledWindow->child_bk=(DWORD*)NULL;
ScrolledWindow->child_fd=(DWORD*)NULL;
ScrolledWindow->active_control_for_keys=(DWORD*)NULL;
ScrolledWindow->active_control_for_mouse=(DWORD*)NULL;
ScrolledWindow->callback=(DWORD*)NULL;
ScrolledWindow->timer=(DWORD*)NULL;
ScrolledWindow->ctrl_proc=(DWORD*)&ScrolledWindowProc;
ScrolledWindow->ctrl_x=(DWORD)info_for_control->x;
ScrolledWindow->ctrl_y=(DWORD)info_for_control->y;
ScrolledWindow->ctrl_sizex=(DWORD)info_for_control->width;
ScrolledWindow->ctrl_sizey=(DWORD)info_for_control->height;
ScrolledWindow->ctrl_ID=ID;
ScrolledWindow->virtual_x=0;
ScrolledWindow->virtual_y=0;
ScrolledWindow->virtual_controls_x=malloc(1024*sizeof(DWORD));
ScrolledWindow->virtual_controls_y=malloc(1024*sizeof(DWORD));
ScrolledWindow->virtual_sizex=0;
ScrolledWindow->virtual_sizey=0;
ScrolledWindow->number_virtual_controls=0;
ScrolledWindow->flags=0;
ScrolledWindow->flags=ScrolledWindow->flags | FLAG_SHOW_CONTROL;
ScrolledWindow->flags=ScrolledWindow->flags | FLAG_FOCUSE_INPUT_SUPPOROTE;
//calculate default scroll arrea size
ScrolledWindow->scroll_arrea_sizex=ScrolledWindow->ctrl_sizex-2;
ScrolledWindow->scroll_arrea_sizey=ScrolledWindow->ctrl_sizey-2;
//create child scroll bars
HorizontalScrollData.x=0;
HorizontalScrollData.y=ScrolledWindow->ctrl_sizey-16;
HorizontalScrollData.width=ScrolledWindow->ctrl_sizex-16;
HorizontalScrollData.height=16;
HorizontalScrollData.ruller_size=1.0;
HorizontalScrollData.ruller_pos=0.0;
HorizontalScrollData.ruller_step=0.05;
VerticalScrollData.x=ScrolledWindow->ctrl_sizex-16;
VerticalScrollData.y=0;
VerticalScrollData.width=16;
VerticalScrollData.height=ScrolledWindow->ctrl_sizey-16;
VerticalScrollData.ruller_size=1.0;
VerticalScrollData.ruller_pos=0.0;
VerticalScrollData.ruller_step=0.05;
HorizontalScrollBar=CreateHorizontalScrollBar(&HorizontalScrollData);
VerticalScrollBar=CreateVerticalScrollBar(&VerticalScrollData);
SetCallbackFunction(HorizontalScrollBar,SCROLLBAR_CHANGED_EVENT,&ScrollWin_FuncCallback_HVScroll,ScrolledWindow);
SetCallbackFunction(VerticalScrollBar,SCROLLBAR_CHANGED_EVENT,&ScrollWin_FuncCallback_HVScroll,ScrolledWindow);
PackControls(ScrolledWindow,HorizontalScrollBar);
PackControls(ScrolledWindow,VerticalScrollBar);
ScrolledWindow->horizontal_scroll=(DWORD*)HorizontalScrollBar;
ScrolledWindow->vertical_scroll=(DWORD*)VerticalScrollBar;
//disable show scrollers and block mouse for them
HorizontalScrollBar->flags=HorizontalScrollBar->flags & FLAG_HIDE_CONTROL;
HorizontalScrollBar->flags=HorizontalScrollBar->flags | FLAG_MOUSE_BLOCKED_ON;
VerticalScrollBar->flags=VerticalScrollBar->flags & FLAG_HIDE_CONTROL;
VerticalScrollBar->flags=VerticalScrollBar->flags | FLAG_MOUSE_BLOCKED_ON;
return(ScrolledWindow);
}

View File

@ -1,16 +0,0 @@
#define TEXT_ORIENTATION_FROM_LEFT_TO_RIGHT_ON 0x1
#define TEXT_ORIENTATION_FROM_LEFT_TO_RIGHT_OFF 0xfe
#define TEXT_BACKGROUND_ON 0x2;
#define TEXT_BACKGROUND_OFF 0xfd;
struct TextSize
{
int sizex;
int sizey;
};
typedef struct TextSize gui_text_size_t;

View File

@ -1,181 +0,0 @@
/*
control Text
*/
gui_text_size_t GetStringSize(font_t *font,char *s)
{
long len;
gui_text_size_t size;
len=strlen(s);
if (font->size==FONT_CONSTANT_SIZE)
{
if (font->flags & FONT_FLAG_ORIENTATION_HORIZONTAL_FROM_LEFT_TO_RIGHT_ON)
{
size.sizex=len*font->sizex;
size.sizey=font->sizey;
}
}
return(size);
}
void TextBackgroundOn(gui_text_t *Text)
{
Text->txt_flags |=TEXT_BACKGROUND_ON;
}
void TextBackgroundOff(gui_text_t *Text)
{
Text->txt_flags &=TEXT_BACKGROUND_ON;
}
void DisplayText(gui_text_t *Text)
{
int x;
int y;
int sizex;
int sizey;
char v;
font_t *font;
gui_text_size_t size;
struct FINITION *fin;
x=Text->ctrl_x;
y=Text->ctrl_y;
fin=(struct FINITION*)Text->finition;
font=(font_t*)Text->font;
v=Text->txt_flags & TEXT_BACKGROUND_ON;
if (v) font->flags|=FONT_FLAG_DRAW_BACKGROUND_ON;
else font->flags&=FONT_FLAG_DRAW_BACKGROUND_OFF;
v=Text->txt_flags & TEXT_ORIENTATION_FROM_LEFT_TO_RIGHT_ON;
if (v) font->flags|=FONT_FLAG_ORIENTATION_HORIZONTAL_FROM_LEFT_TO_RIGHT_ON;
else font->flags&=FONT_FLAG_ORIENTATION_HORIZONTAL_FROM_LEFT_TO_RIGHT_OFF;
size=GetStringSize((font_t*)Text->font,Text->text);
Text->ctrl_sizex=(DWORD)size.sizex;
Text->ctrl_sizey=(DWORD)size.sizey;
DrawFont=(void(*)(finition_t *fin,int fx,int fy,DWORD color,
DWORD background_color,font_t *font,BYTE *s))font->fnt_draw;
DrawFont(fin,x,y,Text->color,Text->background_color,font,Text->text);
}
//---------------------------------------------------------------------------------
// control Text
//---------------------------------------------------------------------------------
void TextProc(gui_text_t *Text,gui_message_t *message)
{
finition_t *fin;
switch(message->type)
{
case MESSAGE_FULL_REDRAW_ALL:
{
//draw Text
if (Text->flags & FLAG_SHOW_CONTROL) DisplayText(Text);
break;
}
case MESSAGE_FULL_REDRAW_ALL_WITH_FINITION:
{
fin=(struct FINITION*)Text->finition;
fin->flags=fin->flags | FINITION_ON;
fin->x=message->arg1;
fin->y=message->arg2;
fin->sizex=message->arg3;
fin->sizey=message->arg4;
DisplayText(Text);
break;
}
case MESSAGE_SPECIALIZED:
{
if (Text->flags & FLAG_GET_SPECIALIZED_MESSAGE_ON)
{
if (Text->flags & FLAG_SHOW_CONTROL) DisplayText(Text);
Text->flags=Text->flags & FLAG_GET_SPECIALIZED_MESSAGE_OFF;
}
break;
}
case MESSAGE_CHANGE_POSITION_EVENT:
{
Text->ctrl_x=Text->ctrl_x+message->arg1;
Text->ctrl_y=Text->ctrl_y+message->arg2;
break;
}
case MESSAGE_DESTROY_CONTROL:
{
free(Text->finition);
break;
}
case MESSAGE_SET_MAIN_PARENT:
{
SendMessage((struct HEADER*)Text,message);
Text->main_parent=(DWORD*)message->arg1;
break;
}
default: break;
}
//send message to child controls(if there is)
SendMessage((struct HEADER*)Text,message);
}
//---------------------------------------------------------------------------------
// create control Text
//---------------------------------------------------------------------------------
void* CreateText(gui_text_data_t *info_for_control)
{
gui_text_t *Text;
finition_t *fin;
gui_text_size_t size;
Text=malloc(sizeof(struct ControlText));
Text->finition=malloc(sizeof(struct FINITION));
fin=(struct FINITION*)Text->finition;
fin->flags=0;
if (info_for_control->font==(DWORD*)NULL) Text->font=FontsMeneger.default_font;
else Text->font=info_for_control->font;
size=GetStringSize((font_t*)Text->font,info_for_control->text);
ID++;
#ifdef DEBUG
printf("\ncreated text with ID=%d",(int)ID);
#endif
Text->child_bk=(DWORD*)NULL;
Text->child_fd=(DWORD*)NULL;
Text->active_control_for_keys=(DWORD*)NULL;
Text->active_control_for_mouse=(DWORD*)NULL;
Text->callback=(DWORD*)NULL;
Text->timer=(DWORD*)NULL;
Text->ctrl_proc=(DWORD*)&TextProc;
Text->ctrl_x=(DWORD)info_for_control->x;
Text->ctrl_y=(DWORD)info_for_control->y;
Text->ctrl_sizex=(DWORD)size.sizex;
Text->ctrl_sizey=(DWORD)size.sizey;
Text->ctrl_ID=ID;
Text->color=info_for_control->color;
Text->background_color=info_for_control->background_color;
Text->text=info_for_control->text;
Text->txt_flags=0;
Text->txt_flags|=TEXT_ORIENTATION_FROM_LEFT_TO_RIGHT_ON;
if (info_for_control->background)
{
Text->txt_flags|=TEXT_BACKGROUND_ON;
}
else
{
Text->txt_flags&=TEXT_BACKGROUND_OFF;
}
Text->flags=0;
Text->flags=Text->flags | FLAG_SHOW_CONTROL;
return(Text);
}

View File

@ -1,31 +0,0 @@
#define FINITION_ON 0x1
#define FINITION_OFF 0xfe
#define COLOR_FON 0x924900
#define COLOR_DARK 0x5a5a5a
#define COLOR_ABSOLUTE_DARK 0x0
#define COLOR_MIDDLE_LIGHT 0xffff00
#define COLOR_LIGHT 0xffffff
#define COLOR_INSERT 0x71ff30//0xffff10
/////////////////////////////////////////////////////////////////////////////////////////
// tool's names
/////////////////////////////////////////////////////////////////////////////////////////
#define TOOL_PIXEL 128
#define TOOL_LINE 129
#define TOOL_VERTICAL_LINE 130
#define TOOL_HORIZONTAL_LINE 131
#define TOOL_RECTANGLE 132
#define TOOL_FILLED_RECTANGLE 133
#define TOOL_GRADIENT_UP_FILLED_RECTANGLE 134
#define TOOL_GRADIENT_DOWN_FILLED_RECTANGLE 135
#define TOOL_GRADIENT_LEFT_FILLED_RECTANGLE 136
#define TOOL_GRADIENT_RIGHT_FILLED_RECTANGLE 137
#define TOOL_CIRCLE 138
#define TOOL_FILLED_CIRCLE 139
#define TOOL_ELLIPSE 140
#define TOOL_FILLED_ELLIPSE 141
#define TOOL_IMAGE 142

File diff suppressed because it is too large Load Diff

View File

@ -1,63 +0,0 @@
/*
font meneger header structure
*/
#define FONT_FLAG_DEFAULT_FONT_ON 0x1
#define FONT_FLAG_DEFAULT_FONT_OFF 0xfe
#define FONT_FLAG_DRAW_BACKGROUND_ON 0x2
#define FONT_FLAG_DRAW_BACKGROUND_OFF 0xfd
#define FONT_FLAG_ORIENTATION_HORIZONTAL_FROM_LEFT_TO_RIGHT_ON 0x4
#define FONT_FLAG_ORIENTATION_HORIZONTAL_FROM_LEFT_TO_RIGHT_OFF 0xfb
#define FONT_CONSTANT_SIZE -1
//some types encoding characters
#define FONT_TYPE_ASCII 0x1
#define FONT_TYPE_UNICODE 0x2
///////////////////////////////////////////////////////////
// some ASCII encodings
///////////////////////////////////////////////////////////
//cyrillic encodings
#define FONT_ENCODING_CYRILLIC_IBM866 0x1
#define FONT_ENCODING_CYRILLIC_IBM437 0x2
#define FONT_ENCODING_CYRILLIC_KOI8R 0x4
#define FONT_ENCODING_CYRILLIC_ISO8859_5 0x8
#define FONT_ENCODING_CYRILLIC_CP1251 0x10
#pragma pack(push,1)
static struct
{
DWORD *fnt_fd;
DWORD *fnt_bk;
DWORD *default_font;
DWORD number_fonts;
}FontsMeneger;
#pragma pack(pop)
#pragma pack(push,1)
struct FONT
{
DWORD *fnt_draw;
DWORD *fnt_unpacker;
DWORD *fnt_fd;
DWORD *fnt_bk;
int sizex;
int sizey;
int size;
int encoding_type;
char *font;
char *fnt_name;
DWORD type;
DWORD flags;
};
#pragma pack(pop)
typedef struct FONT font_t;
static char *default_fonts_path="/sys/fonts/";
void (*DrawFont)(finition_t *fin,int fx,int fy,DWORD color,DWORD background_color,font_t *font,BYTE *s);

View File

@ -1,373 +0,0 @@
/*
menegement of fonts
*/
//---------------------------------------------------------------------------------
// destroy font
//---------------------------------------------------------------------------------
void DestroyFont(font_t *font)
{
font_t *seek_font;
font_t *exchange_font;
font_t *last_font;
font_t *next_font;
if (font==(font_t*)NULL) return;
if (FontsMeneger.fnt_bk==FontsMeneger.fnt_fd)
{
//parent have got alone font
if (FontsMeneger.fnt_bk==(DWORD*)font)
{
#ifdef DEBUG
printf("\ndestroyed font %d font name=%s",(int)font,(char*)font->fnt_name);
#endif
free(font);
FontsMeneger.fnt_bk=(DWORD*)NULL;
FontsMeneger.fnt_fd=(DWORD*)NULL;
}
return;
}
seek_font=(font_t*)FontsMeneger.fnt_bk;
while(seek_font!=(font_t*)NULL)
{
if (seek_font==font)
{
//delete font from fonts's cash
last_font=(font_t*)seek_font->fnt_bk;
next_font=(font_t*)seek_font->fnt_fd;
if ((last_font!=(font_t*)NULL) && (next_font!=(font_t*)NULL))
{//deliting font isn't first font and isn't endest
next_font->fnt_bk=(DWORD*)last_font;
last_font->fnt_fd=(DWORD*)next_font;
}
else
{
if (last_font==(font_t*)NULL)
{//deliting font is first font of Parend
FontsMeneger.fnt_bk=(DWORD*)next_font;
next_font->fnt_bk=(DWORD*)NULL;
if (next_font->fnt_fd==(DWORD*)NULL)
{
FontsMeneger.fnt_fd=(DWORD*)next_font;
FontsMeneger.fnt_bk=(DWORD*)next_font;
}
}
if (next_font==(font_t*)NULL)
{
//there isn't next fonts
last_font->fnt_fd=(DWORD*)NULL;
FontsMeneger.fnt_fd=(DWORD*)last_font;
}
}
#ifdef DEBUG
printf("\ndestroyed font %d font name=%s",(int)font,(char*)font->fnt_name);
#endif
free(font);
break;
}
exchange_font=(font_t*)seek_font->fnt_fd;
seek_font=exchange_font;
}
}
void *CreateFont(void)
{
font_t *font;
font_t *backward_font;
font=malloc(sizeof(struct FONT));
if (FontsMeneger.fnt_bk==(DWORD*)NULL)
{//not yet fonts
FontsMeneger.fnt_bk=(DWORD*)font;
FontsMeneger.fnt_fd=(DWORD*)font;
font->fnt_bk=(DWORD*)NULL;
font->fnt_fd=(DWORD*)NULL;
}
else
{
backward_font=(font_t*)FontsMeneger.fnt_fd;
FontsMeneger.fnt_fd=(DWORD*)font;
backward_font->fnt_fd=(DWORD*)font;
font->fnt_bk=(DWORD*)backward_font;
font->fnt_fd=(DWORD*)NULL;
}
return(font);
}
////////////////////////////////////////////////////////////////////////////////
// CHAR.MT and CHAR2.MT fonts unpacker
////////////////////////////////////////////////////////////////////////////////
void CHAR_MT_FontsUnpacker(unsigned char *loaded_font,font_t *font,char font_type)
{
int i,j,k;
unsigned char c;
unsigned char *p;
if (font_type==FALSE)
{//CHAR.MT
font->font=malloc(6*9*256);
p=(unsigned char*)font->font;
for(j=0;j<256;j++)
{
for(i=0;i<9;i++)
{
c=(unsigned char)(*loaded_font);
p[5]=(unsigned char)(c & 0x20);
p[4]=(unsigned char)(c & 0x10);
p[3]=(unsigned char)(c & 0x8);
p[2]=(unsigned char)(c & 0x4);
p[1]=(unsigned char)(c & 0x2);
p[0]=(unsigned char)(c & 0x1);
p+=6;
loaded_font++;
}
}
font->sizex=6;
font->sizey=9;
}
else
{//CHAR2.MT
font->font=malloc(8*10*256);
p=(unsigned char*)font->font;
for(j=0;j<256;j++)
{
for(i=0;i<10;i++)
{
c=(unsigned char)(*loaded_font);
p[7]=(unsigned char)(c & 0x80);
p[6]=(unsigned char)(c & 0x40);
p[5]=(unsigned char)(c & 0x20);
p[4]=(unsigned char)(c & 0x10);
p[3]=(unsigned char)(c & 0x8);
p[2]=(unsigned char)(c & 0x4);
p[1]=(unsigned char)(c & 0x2);
p[0]=(unsigned char)(c & 0x1);
p+=8;
loaded_font++;
}
}
font->sizex=8;
font->sizey=10;
}
font->size=FONT_CONSTANT_SIZE;
font->type=FONT_TYPE_ASCII;
font->encoding_type=FONT_ENCODING_CYRILLIC_IBM866;
}
////////////////////////////////////////////////////////////////////////////////
// CHAR.MT and CHAR2.MT fonts draw
////////////////////////////////////////////////////////////////////////////////
void MonofontDraw(finition_t *fin,int fx,int fy,
DWORD color,DWORD background_color,
font_t *font,unsigned char *s)
{
unsigned int i,j,k,step,len;
int x,y,size_x,save_size_x,save_size_y;
unsigned char *p,*buf,*save_buf;
unsigned char c;
DWORD draw_output;
step=font->sizex*font->sizey;
len=strlen(s);
if (font->flags & FONT_FLAG_ORIENTATION_HORIZONTAL_FROM_LEFT_TO_RIGHT_ON)
{
if (font->flags & FONT_FLAG_DRAW_BACKGROUND_ON)
{//there is a fon and not finition for draw
//alocate a buffer for draw text
size_x=font->sizex*len;
c=screen.bits_per_pixel >> 3;
i=step*c*len;
buf=malloc(i);
//save current screen parameters
save_buf=screen.buffer;
save_size_x=screen.size_x;
save_size_y=screen.size_y;
draw_output=screen.draw_output;
//load parameters of local buffer
screen.buffer=buf;
screen.size_x=size_x;
screen.size_y=font->sizey;
screen.draw_output=DRAW_OUTPUT_BUFFER;
//fill buffer by background color
FillArrea(buf,i,screen.bits_per_pixel,background_color);
//draw text
x=0;
for(k=0;k<len;k++)
{
c=s[k];
p=font->font+step*c;
for(j=0;j<font->sizey;j++)
{
for(i=0;i<font->sizex;i++)
{
if (*p) DrawPixel(x+i,j,color);
p++;
}
}
x=x+font->sizex;
}
//restore screen parameters
screen.buffer=save_buf;
screen.size_x=save_size_x;
screen.size_y=save_size_y;
screen.draw_output=draw_output;
//move text from local buffer to screen
if (fin->flags & FINITION_ON)
DrawImageFinit(fin,fx,fy,size_x,font->sizey,screen.bits_per_pixel,buf);
else
DrawImage(fx,fy,size_x,font->sizey,screen.bits_per_pixel,buf);
//free local buffer
free(buf);
}
else
{
if (fin->flags & FINITION_ON)
{//not background and finition for draw
x=fx;
y=fy;
for(k=0;k<len;k++)
{
c=s[k];
p=font->font+step*c;
for(j=0;j<font->sizey;j++)
{
for(i=0;i<font->sizex;i++)
{
if (*p) DrawPixelFinit(fin,x+i,y+j,color);
p++;
}
}
x=x+font->sizex;
}
}
else
{//not background and not finition for draw
x=fx;
y=fy;
for(k=0;k<len;k++)
{
c=s[k];
p=font->font+step*c;
for(j=0;j<font->sizey;j++)
{
for(i=0;i<font->sizex;i++)
{
if (*p) DrawPixel(x+i,y+j,color);
p++;
}
}
x=x+font->sizex;
}
}
}
}
}
////////////////////////////////////////////////////////////////////////////////
// fonts loader
////////////////////////////////////////////////////////////////////////////////
font_t *LoadFont(char *fullfontname)
{
char *path;
char *c;
BYTE *buf;
long filesize;
int len1,len2,i;
font_t *font;
static DWORD buf_for_size[2];
static DWORD buf_for_pos[2];
path=malloc(263);
if (strchr(fullfontname,'/')==NULL)
{
len1=strlen(default_fonts_path);
len2=strlen(fullfontname);
memmove(path,default_fonts_path,len1);
memmove(path+len1,fullfontname,len2);
*(path+len1+len2)='\0';
}
else
memmove(path,fullfontname,strlen(fullfontname));
if (gui_get_file_size(path,buf_for_size)==KOLIBRIOS_SYS_FILE_ACCESS_SUCCESSFULLY)
{
filesize=buf_for_size[0];
buf=malloc(filesize);
//load fonts in buffer
gui_read_file(path,buf_for_pos,filesize,buf);
free(path);
//register font
font=CreateFont();
c=strrchr(fullfontname,'/');
if(c==NULL) font->fnt_name=fullfontname;
else
font->fnt_name=(char*)(c+1);
//check font type
c=strstr(font->fnt_name,"CHAR.MT");//check standart type of fonts
if (c!=NULL)
{
font->fnt_unpacker=(DWORD*)&CHAR_MT_FontsUnpacker;
font->fnt_draw=(DWORD*)&MonofontDraw;
CHAR_MT_FontsUnpacker(buf,font,FALSE);//CHAR.MT
free(buf);
font->flags=0;
font->flags|=FONT_FLAG_ORIENTATION_HORIZONTAL_FROM_LEFT_TO_RIGHT_ON;
}
c=strstr(font->fnt_name,"CHAR2.MT");//check standart type of fonts
if (c!=NULL)
{
font->fnt_unpacker=(DWORD*)&CHAR_MT_FontsUnpacker;
font->fnt_draw=(DWORD*)&MonofontDraw;
CHAR_MT_FontsUnpacker(buf,font,TRUE);//CHAR2.MT
free(buf);
font->flags=0;
font->flags|=FONT_FLAG_ORIENTATION_HORIZONTAL_FROM_LEFT_TO_RIGHT_ON;
}
//not other fonts yet
}
else
{
#ifdef DEBUG
printf("\ncannot load font %s",path);
#endif
free(path);
return(NULL);
}
FontsMeneger.number_fonts++;
return(font);
}
void FreeFont(font_t *font)
{
if (font==(font_t*)FontsMeneger.default_font) return;
free(font->font);
DestroyFont(font);
}

View File

@ -1,8 +0,0 @@
/*
scan codes of keys
*/
//Scan Codes of some keys in pressed state
#define SC_TAB 15
#define SC_ENTER 28
#define SC_SPACE 57

View File

@ -1,657 +0,0 @@
/*
some system function of KolibriOS
*/
#define KOLIBRIOS_SYS_EVENT_REDRAW 1
#define KOLIBRIOS_SYS_EVENT_KEYS 2
#define KOLIBRIOS_SYS_EVENT_BUTTON_PRESSED 3
#define KOLIBRIOS_SYS_EVENT_REDRAW_BACKGROUND 5
#define KOLIBRIOS_SYS_EVENT_MOUSE 6
#define KOLIBRIOS_SYS_EVENT_IPC 7
#define KOLIBRIOS_SYS_EVENT_NET 8
#define KOLIBRIOS_SYS_EVENT_DEBUG 9
#define KOLIBRIOS_SYS_MOUSE_BUTTON_LEFT_DOWN 0x1
#define KOLIBRIOS_SYS_MOUSE_BUTTON_RIGHT_DOWN (0x1<<1)
#define KOLIBRIOS_SYS_MOUSE_BUTTON_MIDDLE_DOWN (0x1 <<2)
#define KOLIBRIOS_SYS_MOUSE_BUTTON_4_DOWN (0x1 <<3)
#define KOLIBRIOS_SYS_MOUSE_BUTTON_5_DOWN (0x1 <<4)
#define KOLIBRIOS_SYS_FILE_ACCESS_SUCCESSFULLY 0
#define KOLIBRIOS_SYS_FILE_UNDEFINED_PARTITION_OR_HARDDRIVE_BASE 1
#define KOLIBRIOS_SYS_FILE_FUNCTION_DONT_SUPPOROTE_FOR_CURRENT_FILE_SYSTEM 2
#define KOLIBRIOS_SYS_FILE_UNKNOWN_FILE_SYSTEM 3
#define KOLIBRIOS_SYS_FILE_NOT_FOUND 5
#define KOLIBRIOS_SYS_FILE_FINISHED 6
#define KOLIBRIOS_SYS_FILE_POINTER_OUTOFMEMORY_APPLICATION 7
#define KOLIBRIOS_SYS_FILE_MEMORY_OF_DEVICE_FILLED 8
#define KOLIBRIOS_SYS_FILE_TABLE_DESTROYED 9
#define KOLIBRIOS_SYS_FILE_ACCESS_DENITED 10
#define KOLIBRIOS_SYS_FILE_DEVICE_ERROR 11
#pragma pack(push,1)
struct KOLIBRIOS_FILEIO
{
DWORD number_subfunction;
DWORD offset_in_file_low;
DWORD offset_in_file_hight;
DWORD size;
DWORD *data;
BYTE null;
char *full_file_path;
};
#pragma pack(pop)
typedef struct KOLIBRIOS_FILEIO fileio_t;
#pragma pack(push,1)
struct BLOCK_DATA_ENTRY_DIRECTORY
{
DWORD attributes;
DWORD types_data_of_name;
DWORD time_created_file;
DWORD date_created_file;
DWORD time_last_access;
DWORD date_last_access;
DWORD time_last_modification;
DWORD date_last_modification;
DWORD file_size_low;
DWORD file_size_hight;
DWORD *filename;
};
#pragma pack(pop)
typedef struct BLOCK_DATA_ENTRY_DIRECTORY bded_t;
#pragma pack(push,1)
struct PROCESS_TABLE
{
int cpu_usage; //+0
int window_pos_info; //+4
short int reserved1; //+8
char name[12]; //+10
int memstart; //+22
int memused; //+26
int pid; //+30
int winx_start; //+34
int winy_start; //+38
int winx_size; //+42
int winy_size; //+46
short int slot_info; //+50
short int reserved2; //+52
int clientx; //+54
int clienty; //+58
int clientwidth; //+62
int clientheight; //+66
unsigned char window_state; //+70
char reserved3[1024-71]; //+71
};
#pragma pack(pop)
typedef struct PROCESS_TABLE process_table_t;
#pragma pack(push,1)
struct IMPORT
{
char *name;
void *data;
};
#pragma pack(pop)
typedef struct IMPORT import_t;
static DWORD gui_get_file_size(char *filename,DWORD *buf_for_size);
static DWORD gui_read_file(char *filename,DWORD *buf_pos_size,DWORD size_read,char *buf);
static DWORD gui_create_rewrite_file(char *filename,DWORD *buf_pos_size,DWORD size_write,char *buf);
static DWORD gui_append_to_file(char *filename,DWORD *buf_pos_size,DWORD size_write,char *buf);
static void gui_debug_out_str(char *s);
static void* gui_cofflib_getproc(import_t *lib, char *name);
#define alwinline __attribute__((always_inline))
//------------------------------------------------------------------------------------------
// draw window
//------------------------------------------------------------------------------------------
extern inline void __attribute__((always_inline)) gui_ksys_draw_window(DWORD x,DWORD y,DWORD sizex,DWORD sizey,DWORD flags)
{
__asm__ __volatile__(
"xorl %%eax,%%eax\n\t"
"movl %0,%%ebx\n\t"
"movl %1,%%ecx\n\t"
"movl %4,%%edx\n\t"
"shll $16,%%ebx\n\t"
"shll $16,%%ecx\n\t"
"addl %2,%%ebx\n\t"
"addl %3,%%ecx\n\t"
"int $0x40"
:/*no output*/
:"g"(x),"g"(y),"g"(sizex),"g"(sizey),"g"(flags)
:"eax","ebx","ecx","edx");
}
//------------------------------------------------------------------------------------------
// begin redraw window
//------------------------------------------------------------------------------------------
extern inline void __attribute__((always_inline)) gui_ksys_begin_draw_window(void)
{
__asm__ __volatile__(
"int $0x40"
:/*no output*/
:"a"(12),"b"(1));
}
//------------------------------------------------------------------------------------------
// finish redraw window
//------------------------------------------------------------------------------------------
extern inline void __attribute__((always_inline)) gui_ksys_finish_draw_window(void)
{
__asm__ __volatile__(
"int $0x40"
:/*no output*/
:"a"(12),"b"(2));
}
//------------------------------------------------------------------------------------------
// set new position and new size of window
//------------------------------------------------------------------------------------------
extern inline void alwinline gui_ksys_set_position_and_size_window(DWORD new_x,
DWORD new_y,DWORD new_sizex,DWORD new_sizey)
{
__asm__ __volatile__(
"int $0x40"
:/*no output*/
:"a"(67),"b"(new_x),"c"(new_y),"d"(new_sizex),"S"(new_sizey));
}
//------------------------------------------------------------------------------------------
// set title of window
//------------------------------------------------------------------------------------------
extern inline void gui_ksys_set_title_window(char *title)
{
__asm__ __volatile__(
"int $0x40"
:/*no output*/
:"a"(71),"b"(1),"c"(title));
}
//------------------------------------------------------------------------------------------
// delete title of window
//------------------------------------------------------------------------------------------
extern inline void gui_ksys_delete_title_window(void)
{
__asm__ __volatile__(
"int $0x40"
:/*no output*/
:"a"(71),"b"(1),"c"(0));
}
//------------------------------------------------------------------------------------------
// get information about current process
//------------------------------------------------------------------------------------------
extern inline int gui_ksys_get_current_process_information(void *mem)
{
int value;
__asm__ __volatile__(
"int $0x40"
:"=a"(value)
:"a"(9),"b"(mem),"c"(-1));
return(value);
}
//------------------------------------------------------------------------------------------
// delete title of window
//------------------------------------------------------------------------------------------
extern inline int __attribute__((always_inline)) gui_ksys_get_skin_height(void)
{
int value;
__asm__ __volatile__(
"int $0x40"
:"=a"(value)
:"a"(48),"b"(4));
return(value);
}
//------------------------------------------------------------------------------------------
// get pressed key
//------------------------------------------------------------------------------------------
extern inline int __attribute__((always_inline)) gui_ksys_get_key(void)
{
int value;
__asm__ __volatile__(
"int $0x40"
:"=a"(value)
:"a"(2));
return(value);
}
//------------------------------------------------------------------------------------------
// set keyboard input mode
//------------------------------------------------------------------------------------------
extern inline void gui_ksys_set_keyboard_input_mode(int mode)
{
__asm__ __volatile__(
"int $0x40"
:/*no output*/
:"a"(66),"b"(1),"c"(mode));
}
//------------------------------------------------------------------------------------------
// get keyboard input mode
//------------------------------------------------------------------------------------------
extern inline int gui_ksys_get_keyboard_input_mode(void)
{
int value;
__asm__ __volatile__(
"int $0x40"
:"=a"(value)
:"a"(66),"b"(2));
return(value);
}
//------------------------------------------------------------------------------------------
// get state of menegers keys
//------------------------------------------------------------------------------------------
extern inline int gui_ksys_get_state_menegers_keys(void)
{
int value;
__asm__ __volatile__(
"int $0x40"
:"=a"(value)
:"a"(66),"b"(3));
return(value);
}
//------------------------------------------------------------------------------------------
// set events mask
//------------------------------------------------------------------------------------------
extern inline void gui_ksys_set_events_mask(DWORD mask)
{
__asm__ __volatile__(
"int $0x40"
:/*no output*/
:"a"(40),"b"(mask));
}
//------------------------------------------------------------------------------------------
// wait event
//------------------------------------------------------------------------------------------
extern inline int __attribute__((always_inline)) gui_ksys_wait_event(void)
{
int value;
__asm__ __volatile__(
"int $0x40"
:"=a"(value)
:"a"(10));
return(value);
}
//------------------------------------------------------------------------------------------
// check for event
//------------------------------------------------------------------------------------------
extern inline int gui_ksys_check_event(void)
{
int value;
__asm__ __volatile__(
"int $0x40"
:"=a"(value)
:"a"(11));
return(value);
}
//------------------------------------------------------------------------------------------
// wait event while not timeout
//------------------------------------------------------------------------------------------
extern inline int gui_ksys_wait_event_with_timeout(DWORD timeout)
{
int value;
__asm__ __volatile__(
"int $0x40"
:"=a"(value)
:"a"(23),"b"(timeout));
return(value);
}
//------------------------------------------------------------------------------------------
// get code of pressed button
//------------------------------------------------------------------------------------------
extern inline int gui_ksys_get_code_pressed_button(void)
{
int value;
__asm__ __volatile__(
"int $0x40"
:"=a"(value)
:"a"(17));
return(value);
}
//------------------------------------------------------------------------------------------
// get window mouse coordinates
//------------------------------------------------------------------------------------------
extern inline int gui_ksys_get_window_mouse_coordinates(void)
{
int value;
__asm__ __volatile__(
"int $0x40"
:"=a"(value)
:"a"(37),"b"(1));
return(value);
}
//------------------------------------------------------------------------------------------
// get screen mouse coordinates
//------------------------------------------------------------------------------------------
extern inline int gui_ksys_get_screen_mouse_coordinates(void)
{
int value;
__asm__ __volatile__(
"int $0x40"
:"=a"(value)
:"a"(37),"b"(0));
return(value);
}
//------------------------------------------------------------------------------------------
// get mouse buttons state
//------------------------------------------------------------------------------------------
extern inline int gui_ksys_get_mouse_buttons_state(void)
{
int value;
__asm__ __volatile__(
"int $0x40"
:"=a"(value)
:"a"(37),"b"(2));
return(value);
}
//------------------------------------------------------------------------------------------
// get mouse ruler state
//------------------------------------------------------------------------------------------
extern inline int gui_ksys_get_mouse_ruler_state(void)
{
int value;
__asm__ __volatile__(
"int $0x40"
:"=a"(value)
:"a"(37),"b"(7));
return(value);
}
//------------------------------------------------------------------------------------------
// put pixel in window
//------------------------------------------------------------------------------------------
extern inline void gui_ksys_put_pixel_window(int x,int y,DWORD color)
{
__asm__ __volatile__(
"int $0x40"
:/*no output*/
:"a"(1),"b"(x),"c"(y),"d"(color));
}
//------------------------------------------------------------------------------------------
// put image in window
//------------------------------------------------------------------------------------------
extern inline void gui_ksys_put_image_window(char *p,int x,int y,int sizex,int sizey)
{
__asm__ __volatile__(
"shll $16,%%ecx\n\t"
"shll $16,%%edx\n\t"
"addl %%esi,%%ecx\n\t"
"addl %%edi,%%edx\n\t"
"int $0x40"
:/*no output*/
:"a"(7),"b"(p),"c"(sizex),"d"(x),"S"(sizey),"D"(y));
}
//------------------------------------------------------------------------------------------
// draw filled rectangle in window
//------------------------------------------------------------------------------------------
extern inline void gui_ksys_draw_filled_rectangle_window(int x,int y,int sizex,int sizey,DWORD color)
{
__asm__ __volatile__(
"shll $16,%%ebx\n\t"
"shll $16,%%ecx\n\t"
"addl %%esi,%%ebx\n\t"
"addl %%edi,%%ecx\n\t"
"int $0x40"
:/*no output*/
:"a"(13),"b"(x),"c"(y),"d"(color),"S"(sizex),"D"(sizey));
}
//------------------------------------------------------------------------------------------
// get screen size
//------------------------------------------------------------------------------------------
extern inline DWORD gui_ksys_get_screen_size(void)
{
DWORD value;
__asm__ __volatile__(
"int $0x40"
:"=a"(value)
:"a"(14));
return(value);
}
//------------------------------------------------------------------------------------------
// get color of pixel in coordinates (x,y)
//------------------------------------------------------------------------------------------
extern inline DWORD gui_ksys_get_color_pixel_window(DWORD coordinates)
{
int value;
__asm__ __volatile__(
"int $0x40"
:"=a"(value)
:"a"(35),"b"(coordinates));
return(value);
}
//------------------------------------------------------------------------------------------
// get bits per pixel on the screen
//------------------------------------------------------------------------------------------
extern inline DWORD gui_ksys_get_screen_bits_per_pixel(void)
{
int value;
__asm__ __volatile__(
"int $0x40"
:"=a"(value)
:"a"(61),"b"(2));
return(value);
}
//------------------------------------------------------------------------------------------
// draw line in window
//------------------------------------------------------------------------------------------
extern inline void gui_ksys_draw_line_window(int x1,int y1,int x2,int y2,DWORD color)
{
__asm__ __volatile__(
"shll $16,%%ebx\n\t"
"shll $16,%%ecx\n\t"
"addl %%esi,%%ebx\n\t"
"addl %%edi,%%ecx\n\t"
"int $0x40"
:/*no output*/
:"a"(38),"b"(x1),"c"(y1),"d"(color),"S"(x2),"D"(y2));
}
//------------------------------------------------------------------------------------------
// get standart colors table
//------------------------------------------------------------------------------------------
extern inline void gui_ksys_get_standart_colors_table(char *buf)
{
__asm__ __volatile__(
"int $0x40"
:/*no output*/
:"a"(48),"b"(3),"c"(buf),"d"(40));
}
//------------------------------------------------------------------------------------------
// get time from start system to current in 1/100 sec.
//------------------------------------------------------------------------------------------
extern inline DWORD gui_ksys_get_ticks(void)
{
DWORD value;
__asm__ __volatile__(
"int $0x40"
:"=a"(value)
:"a"(26),"b"(9));
return(value);
}
//------------------------------------------------------------------------------------------
// initialize heap of memory
//------------------------------------------------------------------------------------------
extern inline DWORD gui_ksys_init_user_heap(void)
{
DWORD value;
__asm__ __volatile__(
"int $0x40"
:"=a"(value)
:"a"(68),"b"(11));
return(value);
}
//------------------------------------------------------------------------------------------
// alloctae size bytes of user memory
//------------------------------------------------------------------------------------------
extern inline void* gui_ksys_malloc(DWORD size)
{
void *value;
__asm__ __volatile__(
"int $0x40" :"=a"(value)
:"a"(68),"b"(12),"c"(size)
:"memory");
return(value);
}
//------------------------------------------------------------------------------------------
// free pointer of memory
//------------------------------------------------------------------------------------------
extern inline void gui_ksys_free(void *mem)
{
__asm__ __volatile__(
"int $0x40"
:
:"a"(68),"b"(13),"c"(mem)
:"memory");
}
//------------------------------------------------------------------------------------------
// reallocate of memory
//------------------------------------------------------------------------------------------
extern inline void* gui_ksys_realloc(DWORD new_size,void *old_mem)
{
void *new_mem;
__asm__ __volatile__(
"int $0x40"
:"=a"(new_mem)
:"a"(68),"b"(20),"c"(new_size),"d"(old_mem)
:"memory");
return(new_mem);
}
//------------------------------------------------------------------------------------------
// load user mode DLL
//------------------------------------------------------------------------------------------
extern inline void* gui_ksys_load_dll(char *path)
{
void *dll_export;
__asm__ __volatile__(
"int $0x40"
:"=a"(dll_export)
:"a"(68),"b"(19),"c"(path));
return(dll_export);
}
//------------------------------------------------------------------------------------------
// create thred
//------------------------------------------------------------------------------------------
extern inline void* gui_ksys_create_thread(DWORD *thread_eip,DWORD *thread_esp)
{
void *thread_TID;
__asm__ __volatile__(
"int $0x40"
:"=a"(thread_TID)
:"a"(51),"b"(1),"c"(thread_eip),"d"(thread_esp)
:"memory");
return(thread_TID);
}
//------------------------------------------------------------------------------------------
// acces to files input output
//------------------------------------------------------------------------------------------
extern inline DWORD gui_ksys_files_io(fileio_t *f,DWORD value)
{
DWORD err_status;
__asm__ __volatile__(
"int $0x40"
:"=a"(err_status),"=b"(value)
:"a"(70),"b"(f));
return(err_status);
}
//------------------------------------------------------------------------------------------
// debug board output
//------------------------------------------------------------------------------------------
extern inline void gui_ksys_debug_out(int c)
{
__asm__ __volatile__(
"int $0x40"
:
:"a"(63),"b"(1),"c"(c));
}
//------------------------------------------------------------------------------------------
// KolibriOS system exit program
//------------------------------------------------------------------------------------------
extern inline void gui_ksys_exit(int value)
{
__asm__ __volatile__(
"int $0x40"
:
:"a"(-1),"b"(value));
}

View File

@ -1,67 +0,0 @@
/*
some system function of KolibriOS and founded of them functions
*/
static DWORD gui_get_file_size(char *filename,DWORD *buf_for_size)
{
static char buf[44];
static fileio_t f;
bded_t *bded;
DWORD status,value;
f.number_subfunction=5;
f.data=(DWORD*)buf;
f.full_file_path=filename;
status=gui_ksys_files_io(&f,value);
if (status==KOLIBRIOS_SYS_FILE_ACCESS_SUCCESSFULLY)
{
bded=(bded_t*)buf;
*buf_for_size=bded->file_size_low;
buf_for_size++;
*buf_for_size=bded->file_size_hight;
}
return(status);
}
static DWORD gui_read_file(char *filename,DWORD *buf_pos_size,DWORD size_read,char *buf)
{
static fileio_t f;
DWORD status,value;
f.number_subfunction=0;
f.offset_in_file_low=(DWORD)*buf_pos_size;buf_pos_size++;
f.offset_in_file_hight=(DWORD)*buf_pos_size;
f.size=size_read;
f.data=(DWORD*)buf;
f.full_file_path=filename;
status=gui_ksys_files_io(&f,value);
return(status);
}
static void gui_debug_out_str(char *s)
{
while(*s)
{
if (*s=='\n') gui_ksys_debug_out(13);
gui_ksys_debug_out(*s);
s++;
}
}
static void* gui_cofflib_getproc(import_t *lib, char *name)
{
int i;
for(i = 0; lib[i].name && strcmp(name, lib[i].name); i++);
if(lib[i].name) return lib[i].data;
else return NULL;
}

View File

@ -1,167 +0,0 @@
/*
libGUI dinamic library
(c) andrew_programmer 2009
*/
//service libGUI types of data,functions and constants
#include "types.h"
#include "libGUI.h"
#include "kolibri_system.h"
#include "draw_controls.h"
#include "fonts_meneger.h"
#include "keys.h"
//controls
#include "control_button.h"
#include "control_image.h"
#include "control_progress_bar.h"
#include "control_scroll_bar.h"
#include "control_scrolled_window.h"
#include "control_text.h"
//some libC functions
#include "stdarg.h"
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "stdio.inc"
#include "string.inc"
#include "stdlib.inc"
#include "kolibri_system.inc"
#include "draw_controls.inc"
#include "fonts_meneger.inc"
#include "libGUI_menegement.inc"
#include "parent_window.inc"
#include "main_libGUI.inc"
#include "control_text.inc"
#include "control_image.inc"
#include "control_button.inc"
#include "control_progress_bar.inc"
#include "control_scroll_bar.inc"
#include "control_scrolled_window.inc"
typedef struct
{
char *name;
void *function;
}export_t;
//char szSTART[] = "START";
char szLibGUIversion[] = "LibGUIversion";
char szInitLibGUI[] = "InitLibGUI";
char szLibGUImain[] = "LibGUImain";
char szQuitLibGUI[] = "QuitLibGUI";
char szCreateWindow[] = "CreateWindow";
char szSetWindowSizeRequest[] = "SetWindowSizeRequest";
char szPackControls[] = "PackControls";
char szDestroyControl[] = "DestroyControl";
char szSetControlSizeRequest[] = "SetControlSizeRequest";
char szGetControlSizeX[] = "GetControlSizeX";
char szGetControlSizeY[] = "GetControlSizeY";
char szSetControlNewPosition[] = "SetControlNewPosition";
char szGetControlPositionX[] = "GetControlPositionX";
char szGetControlPositionY[] = "GetControlPositionY";
char szSetFocuse[] = "SetFocuse";
char szRedrawControl[] = "RedrawControl";
char szSpecialRedrawControl[] = "SpecialRedrawControl";
char szSetCallbackFunction[] = "SetCallbackFunction";
char szBlockCallbackFunction[] = "BlockCallbackFunction";
char szUnblockCallbackFunction[] = "UnblockCallbackFunction";
char szSetIDL_Function[] = "SetIDL_Function";
char szDestroyIDL_Function[] = "DestroyIDL_Function";
char szSetTimerCallbackForFunction[] = "SetTimerCallbackForFunction";
char szDestroyTimerCallbackForFunction[] = "DestroyTimerCallbackForFunction";
char szSetCallbackFunctionForEvent[] = "SetCallbackFunctionForEvent";
char szDestroyCallbackFunctionForEvent[] = "DestroyCallbackFunctionForEvent";
char szCreateButton[] = "CreateButton";
char szCreateButtonWithText[] = "CreateButtonWithText";
char szCreateProgressBar[] = "CreateProgressBar";
char szSetProgressBarPulse[] = "SetProgressBarPulse";
char szProgressBarSetText[] = "ProgressBarSetText";
char szProgressBarGetText[] = "ProgressBarGetText";
char szCreateHorizontalScrollBar[] = "CreateHorizontalScrollBar";
char szCreateVerticalScrollBar[] = "CreateVerticalScrollBar";
char szCreateScrolledWindow[] = "CreateScrolledWindow";
char szScrolledWindowPackControls[] = "ScrolledWindowPackControls";
char szCreateImage[] = "CreateImage";
char szCreateText[] = "CreateText";
char szTextBackgroundOn[] = "TextBackgroundOn";
char szTextBackgroundOff[] = "TextBackgroundOff";
char szLoadFont[] = "LoadFont";
char szFreeFont[] = "FreeFont";
export_t EXPORTS[]__asm__("EXPORTS") =
{
{szLibGUIversion, LibGUIversion },
{szInitLibGUI, InitLibGUI },
{szLibGUImain, LibGUImain },
{szQuitLibGUI, QuitLibGUI },
{szCreateWindow, CreateWindow },
{szSetWindowSizeRequest, SetWindowSizeRequest },
{szPackControls, PackControls },
{szDestroyControl, DestroyControl },
{szSetControlSizeRequest, SetControlSizeRequest },
{szGetControlSizeX, GetControlSizeX },
{szGetControlSizeY, GetControlSizeY },
{szSetControlNewPosition, SetControlNewPosition },
{szGetControlPositionX, GetControlPositionX },
{szGetControlPositionY, GetControlPositionY },
{szSetFocuse, SetFocuse },
{szRedrawControl, RedrawControl },
{szSpecialRedrawControl, SpecialRedrawControl },
{szSetCallbackFunction, SetCallbackFunction },
{szBlockCallbackFunction, BlockCallbackFunction },
{szUnblockCallbackFunction, UnblockCallbackFunction },
{szSetIDL_Function, SetIDL_Function },
{szDestroyIDL_Function, DestroyIDL_Function },
{szSetTimerCallbackForFunction, SetTimerCallbackForFunction },
{szDestroyTimerCallbackForFunction, DestroyTimerCallbackForFunction },
{szSetCallbackFunctionForEvent, SetCallbackFunctionForEvent },
{szDestroyCallbackFunctionForEvent, DestroyCallbackFunctionForEvent },
{szCreateButton, CreateButton },
{szCreateButtonWithText, CreateButtonWithText },
{szCreateProgressBar, CreateProgressBar },
{szSetProgressBarPulse, SetProgressBarPulse },
{szProgressBarSetText, ProgressBarSetText },
{szProgressBarGetText, ProgressBarGetText },
{szCreateHorizontalScrollBar, CreateHorizontalScrollBar },
{szCreateVerticalScrollBar, CreateVerticalScrollBar },
{szCreateScrolledWindow, CreateScrolledWindow },
{szScrolledWindowPackControls, ScrolledWindowPackControls },
{szCreateImage, CreateImage },
{szCreateText, CreateText },
{szTextBackgroundOn, TextBackgroundOn },
{szTextBackgroundOff, TextBackgroundOff },
{szLoadFont, LoadFont },
{szFreeFont, FreeFont },
{NULL,NULL},
};

View File

@ -1,581 +0,0 @@
/*
service structures of libGUI
*/
static DWORD ID;
//screen's parameters
#define BYTES_PER_PIXEL 4
//platform parameters
#define KOLIBRIOS 1
//#define DEBUG
//boolean constants
#define TRUE 0x1
#define FALSE 0x0
//maximum callbacks for one check of callback
#define MAX_CALLBACKS 255
/////////////////////////////////////////////////////////////////////////
// libGUI sysyem messages types
/////////////////////////////////////////////////////////////////////////
#define MESSAGE_FULL_REDRAW_ALL 1
#define MESSAGE_KEYS_EVENT 2
#define MESSAGE_SPECIALIZED 3
#define MESSAGE_SET_FOCUSE 4
#define MESSAGE_CHANGE_FOCUSE 5
#define MESSAGE_MOUSE_EVENT 6
#define MESSAGE_CHANGE_POSITION_EVENT 7
#define MESSAGE_CHANGESIZE_EVENT 8
#define MESSAGE_CALL_TIMER_EVENT 9
#define MESSAGE_FULL_REDRAW_ALL_WITH_FINITION 10
#define MESSAGE_SET_MAIN_PARENT 11
#define MESSAGE_DESTROY_CONTROL -1
/////////////////////////////////////////////////////////////////////////
// system flags of controls
/////////////////////////////////////////////////////////////////////////
#define FLAG_SHOW_CONTROL 0x1
#define FLAG_HIDE_CONTROL 0xfffe
#define FLAG_FOCUSE_INPUT_SUPPOROTE 0x2
#define FLAG_FOCUSE_INPUT_NOTSUPPOROTE 0xfffd
#define FLAG_FOCUSE_INPUT_ON 0x4
#define FLAG_FOCUSE_INPUT_OFF 0xfffb
#define FLAG_CONNECT_EVENT_ON 0x8
#define FLAG_CONNECT_EVENT_OFF 0xfff7
#define FLAG_MOUSE_BLOCKED_ON 0x10
#define FLAG_MOUSE_BLOCKED_OFF 0xffef
#define FLAG_GET_SPECIALIZED_MESSAGE_ON 0x20
#define FLAG_GET_SPECIALIZED_MESSAGE_OFF 0xffdf
/////////////////////////////////////////////////////////////////////////
// system flags of callback functions
/////////////////////////////////////////////////////////////////////////
#define FLAG_BLOCK_CALLBACK_ON 0x1
#define FLAG_BLOCK_CALLBACK_OFF 0xfe
/////////////////////////////////////////////////////////////////////////
// system flags of main wondow for timers
/////////////////////////////////////////////////////////////////////////
#define FLAG_TIMER_ON 0x1
#define FLAG_TIMER_OFF 0xfe
/////////////////////////////////////////////////////////////////////////
// system keys states
/////////////////////////////////////////////////////////////////////////
#define KEY_DOWN 16
#define KEY_UP 17
#define KEY_HOTKEY 18
/////////////////////////////////////////////////////////////////////////
// system mouse buttons states
/////////////////////////////////////////////////////////////////////////
#define MOUSE_LEFT_BUTTON_DOWN 19
#define MOUSE_LEFT_BUTTON_UP 20
#define MOUSE_RIGHT_BUTTON_DOWN 21
#define MOUSE_RIGHT_BUTTON_UP 22
#define MOUSE_MIDDLE_BUTTON_DOWN 23
#define MOUSE_MIDDLE_BUTTON_UP 24
#define MOUSE_4_BUTTON_DOWN 25
#define MOUSE_4_BUTTON_UP 26
#define MOUSE_5_BUTTON_DOWN 27
#define MOUSE_5_BUTTON_UP 28
/////////////////////////////////////////////////////////////////
// CONNECT EVENTS FOR CALLBACKs
/////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
// connect events for button
////////////////////////////////////////////////////////////////
#define BUTTON_ENTER_EVENT 29
#define BUTTON_LEAVE_EVENT 30
#define BUTTON_PRESSED_EVENT 31
#define BUTTON_RELEASED_EVENT 32
////////////////////////////////////////////////////////////////
// connect events for button
////////////////////////////////////////////////////////////////
#define SCROLLBAR_CHANGED_EVENT 33
////////////////////////////////////////////////////////////////
// connect events for main parent window
////////////////////////////////////////////////////////////////
#define DELETE_EVENT 36
////////////////////////////////////////////////////////////////////
//screen buffer parameters
////////////////////////////////////////////////////////////////////
#define DRAW_OUTPUT_SCREEN 0
#define DRAW_OUTPUT_BUFFER 1
static struct SCREEN
{
DWORD bits_per_pixel;
DWORD bytes_per_pixel;
DWORD draw_output;
int x;
int y;
int size_x;
int size_y;
int skin_height;
int display_size_x;
int display_size_y;
char *buffer;
}screen;
////////////////////////////////////////////////////////////////
// header of parent of control
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct HEADERPARENT
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
DWORD **control_for_callback_function;
DWORD **callback_for_control_callback;
DWORD number_callbacks;
DWORD *global_active_control_for_keys;
DWORD *message;
DWORD *timer_bk;
DWORD *timer_fd;
DWORD number_timers_for_controls;
DWORD *calev_bk;
DWORD *calev_fd;
DWORD *IDL_func;
DWORD *IDL_func_data;
};
#pragma pack(pop)
typedef struct HEADERPARENT parent_t;
////////////////////////////////////////////////////////////////
// header of control
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct HEADER
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
};
#pragma pack(pop)
typedef struct HEADER header_t;
////////////////////////////////////////////////////////////////
// callback structure for callback function of control
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct CALLBACK
{
DWORD *clb_bk;
DWORD *clb_fd;
DWORD *clb_control;
DWORD *func;
DWORD *func_data;
DWORD connect_event;
DWORD flags;
};
#pragma pack(pop)
typedef struct CALLBACK gui_callback_t;
////////////////////////////////////////////////////////////////
// timer
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct TIMER
{
DWORD *tmr_bk;
DWORD *tmr_fd;
DWORD *tmr_parent;
DWORD *func;
DWORD *func_data;
DWORD last_time;
DWORD time_tick;
DWORD flags;
};
#pragma pack(pop)
typedef struct TIMER gui_timer_t;
////////////////////////////////////////////////////////////////
// structure for callback events
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct CALLBACKEVENT
{
DWORD *calev_bk;
DWORD *calev_fd;
DWORD *calev_parent;
DWORD *func;
DWORD *func_data;
DWORD event_type;
};
#pragma pack(pop)
typedef struct CALLBACKEVENT gui_callbackevent_t;
////////////////////////////////////////////////////////////////
// structure for callback events
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct FINITION
{
DWORD x;
DWORD y;
DWORD sizex;
DWORD sizey;
char flags;
};
#pragma pack(pop)
typedef struct FINITION finition_t;
////////////////////////////////////////////////////////////////
// type of data - structure message
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct MESSAGE
{
DWORD type;
DWORD arg1;
DWORD arg2;
DWORD arg3;
DWORD arg4;
};
#pragma pack(pop)
typedef struct MESSAGE gui_message_t;
////////////////////////////////////////////////////////////////
// prototype of functions
////////////////////////////////////////////////////////////////
void (*ControlProc)(void *Control,gui_message_t *message);
void (*CallbackFunction)(header_t *Control,void *data);
void (*TimerCallbackFunction)(void *data);
void (*CallbackFunctionForEvent)(gui_message_t *message,void *data);
void (*IDL_Function)(void *data);
////////////////////////////////////////////////////////////////
// button
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct ControlButton
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
//button's data
unsigned char btn_flags;
};
#pragma pack(pop)
typedef struct ControlButton gui_button_t;
// information for creating control Button
#pragma pack(push,1)
struct ButtonData
{
int x;
int y;
int width;
int height;
};
#pragma pack(pop)
typedef struct ButtonData gui_button_data_t;
////////////////////////////////////////////////////////////////
// scroller
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct ControlScrollBar
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
//scroll bar's data
float ruller_size;
float ruller_pos;
float ruller_step;
unsigned char scb_flags;
};
#pragma pack(pop)
typedef struct ControlScrollBar gui_scroll_bar_t;
#pragma pack(push,1)
struct ScrollBarData
{
int x;
int y;
int width;
int height;
float ruller_size;
float ruller_pos;
float ruller_step;
};
#pragma pack(pop)
typedef struct ScrollBarData gui_scroll_bar_data_t;
////////////////////////////////////////////////////////////////
// progressbar
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct ControlProgressBar
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
//progress bar's data
float progress;
unsigned char prb_flags;
};
#pragma pack(pop)
typedef struct ControlProgressBar gui_progress_bar_t;
#pragma pack(push,1)
struct ProgressBarData
{
int x;
int y;
int width;
int height;
float progress;
};
#pragma pack(pop)
typedef struct ProgressBarData gui_progress_bar_data_t;
////////////////////////////////////////////////////////////////
// scrolled window
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct ControlScrolledWindow
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
//scrolled windows's data
DWORD virtual_x;
DWORD virtual_y;
DWORD virtual_sizex;
DWORD virtual_sizey;
DWORD *virtual_controls_x;
DWORD *virtual_controls_y;
DWORD number_virtual_controls;
DWORD scroll_arrea_sizex;
DWORD scroll_arrea_sizey;
DWORD *horizontal_scroll;
DWORD *vertical_scroll;
unsigned char scw_flags;
};
#pragma pack(pop)
typedef struct ControlScrolledWindow gui_scrolled_window_t;
#pragma pack(push,1)
struct ScrolledWindowData
{
int x;
int y;
int width;
int height;
};
#pragma pack(pop)
typedef struct ScrolledWindowData gui_scrolled_window_data_t;
////////////////////////////////////////////////////////////////
// image
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct ControlImage
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
char bits_per_pixel;
char bytes_per_pixel;
char *img;
};
#pragma pack(pop)
typedef struct ControlImage gui_image_t;
#pragma pack(push,1)
struct ImageData
{
int x;
int y;
int width;
int height;
char bits_per_pixel;
};
#pragma pack(pop)
typedef struct ImageData gui_image_data_t;
////////////////////////////////////////////////////////////////
// text
////////////////////////////////////////////////////////////////
#pragma pack(push,1)
struct ControlText
{
DWORD *ctrl_proc;
DWORD *ctrl_fd;
DWORD *ctrl_bk;
DWORD *child_fd;
DWORD *child_bk;
DWORD *parent;
DWORD *main_parent;
DWORD ctrl_x;
DWORD ctrl_y;
DWORD ctrl_sizex;
DWORD ctrl_sizey;
DWORD ctrl_ID;
DWORD *active_control_for_keys;
DWORD *active_control_for_mouse;
DWORD *callback;
DWORD *finition;
DWORD *timer;
DWORD flags;
DWORD *font;
DWORD color;
DWORD background_color;
char *text;
BYTE txt_flags;
};
#pragma pack(pop)
typedef struct ControlText gui_text_t;
#pragma pack(push,1)
struct TextData
{
int x;
int y;
DWORD *font;
DWORD color;
DWORD background_color;
char background;
char *text;
};
#pragma pack(pop)
typedef struct TextData gui_text_data_t;
/////////////////////////////////////////////////////////////////////////////
// prototips of some service functions
/////////////////////////////////////////////////////////////////////////////
char CheckCrossRectangles(int x1,int y1,int sizex1,int sizey1,int x2,int y2,int sizex2,int sizey2);

File diff suppressed because it is too large Load Diff

View File

@ -1,225 +0,0 @@
/*
main meneger loop libGUI library
*/
void LibGUImain(parent_t *WindowParent)
{
DWORD event,key,value;
header_t *control;
gui_message_t *events_message;
gui_timer_t *seek_timer,*exchange_timer;
gui_callbackevent_t *seek_calev,*calev,*exchange_calev;
int i;
char quit;
events_message=(struct MESSAGE*)WindowParent->message;
//tell all child controls of main parent who is main parent
events_message->type=MESSAGE_SET_MAIN_PARENT;
events_message->arg1=(DWORD)WindowParent;
SendMessage((struct HEADER *)WindowParent,events_message);
//display all created controls in window
gui_draw_window(WindowParent);
events_message->type=MESSAGE_FULL_REDRAW_ALL;
SendMessage((struct HEADER *)WindowParent,events_message);
events_message->type=0;
quit=FALSE;
WindowParent->number_callbacks=0;
while (quit==FALSE)
{
//check for timers
if ((WindowParent->timer_bk!=(DWORD*)NULL) ||
(WindowParent->number_timers_for_controls!=0)) {event=gui_ksys_wait_event_with_timeout(1);}
else {event=gui_ksys_wait_event();}
//get and chack system events
switch(event)
{
case KOLIBRIOS_SYS_EVENT_BUTTON_PRESSED:
{
if (ControlCheckCallbackEvent(WindowParent,DELETE_EVENT)!=NULL)
{
WindowParent->flags |= FLAG_CONNECT_EVENT_ON;
WindowParent->control_for_callback_function[WindowParent->number_callbacks]=
(DWORD*)WindowParent;
WindowParent->callback_for_control_callback[WindowParent->number_callbacks]=
(DWORD*)ControlCheckCallbackEvent(WindowParent,(DWORD)DELETE_EVENT);
WindowParent->number_callbacks++;
}
quit=TRUE;
break;
}
case KOLIBRIOS_SYS_EVENT_REDRAW:
{
GetNewWindowSizePos(WindowParent);
SetWindowSizeRequest(WindowParent,WindowParent->ctrl_sizex,WindowParent->ctrl_sizey);
gui_draw_window(WindowParent);
events_message->type=MESSAGE_FULL_REDRAW_ALL;
SendMessage((struct HEADER *)WindowParent,events_message);
break;
}
case KOLIBRIOS_SYS_EVENT_KEYS:
{
key=gui_ksys_get_key();
key=key>>8;
if (key & 128)
{
events_message->arg1=KEY_UP;
events_message->arg2=key & 127;
}
else
{
events_message->arg1=KEY_DOWN;
events_message->arg2=key;
}
events_message->type=MESSAGE_KEYS_EVENT;
SendMessage((struct HEADER *)WindowParent,events_message);
break;
}
case KOLIBRIOS_SYS_EVENT_MOUSE:
{
value=gui_ksys_get_window_mouse_coordinates();
events_message->type=MESSAGE_MOUSE_EVENT;
events_message->arg2=(value & 0xffff)-screen.y;//y
value=value >>16;
events_message->arg1=value-screen.x;//x
value=gui_ksys_get_mouse_buttons_state();
switch(value)
{
case KOLIBRIOS_SYS_MOUSE_BUTTON_LEFT_DOWN:
{
events_message->arg3=MOUSE_LEFT_BUTTON_DOWN;
break;
}
case KOLIBRIOS_SYS_MOUSE_BUTTON_RIGHT_DOWN:
{
events_message->arg3=MOUSE_RIGHT_BUTTON_DOWN;
break;
}
case KOLIBRIOS_SYS_MOUSE_BUTTON_MIDDLE_DOWN:
{
events_message->arg3=MOUSE_MIDDLE_BUTTON_DOWN;
break;
}
case KOLIBRIOS_SYS_MOUSE_BUTTON_4_DOWN:
{
events_message->arg3=MOUSE_4_BUTTON_DOWN;
break;
}
case KOLIBRIOS_SYS_MOUSE_BUTTON_5_DOWN:
{
events_message->arg3=MOUSE_5_BUTTON_DOWN;
break;
}
default:
{
if (events_message->arg3==MOUSE_LEFT_BUTTON_DOWN)
{
events_message->arg3=MOUSE_LEFT_BUTTON_UP;
break;
}
if (events_message->arg3==MOUSE_RIGHT_BUTTON_DOWN)
{
events_message->arg3=MOUSE_RIGHT_BUTTON_UP;
break;
}
if (events_message->arg3==MOUSE_MIDDLE_BUTTON_DOWN)
{
events_message->arg3=MOUSE_MIDDLE_BUTTON_UP;
break;
}
if (events_message->arg3==MOUSE_4_BUTTON_DOWN)
{
events_message->arg3=MOUSE_4_BUTTON_UP;
break;
}
if (events_message->arg3==MOUSE_5_BUTTON_DOWN)
{
events_message->arg3=MOUSE_5_BUTTON_UP;
break;
}
break;
}
}
SendMessage((struct HEADER *)WindowParent,events_message);
break;
}
}
//call functions for events
seek_calev=(struct CALLBACKEVENT*)WindowParent->calev_bk;
while(seek_calev!=(struct CALLBACKEVENT*)NULL)
{
if (seek_calev->event_type==events_message->type)
{
CallbackFunctionForEvent=(void(*)(struct MESSAGE *message,void *data))seek_calev->func;
CallbackFunctionForEvent(events_message,seek_calev->func_data);
}
exchange_calev=(struct CALLBACKEVENT*)seek_calev->calev_fd;
seek_calev=exchange_calev;
}
//call timers of controls
if (WindowParent->number_timers_for_controls!=0)
{
events_message->type=(char)MESSAGE_CALL_TIMER_EVENT;
SendMessage((struct HEADER *)WindowParent,events_message);
}
//call callback functions
for(i=0;i<WindowParent->number_callbacks;i++)
{
control=(struct HEADER*)WindowParent->control_for_callback_function[i];
//check callback control
if (control!=(struct HEADER*)NULL)
{
calev=(struct CALLBACKEVENT*)WindowParent->callback_for_control_callback[i];
if (control->flags & FLAG_CONNECT_EVENT_ON)
{
CallbackFunction=(void (*)( struct HEADER *Control,void *data))calev->func;
CallbackFunction(control,calev->func_data);
control->flags=control->flags & FLAG_CONNECT_EVENT_OFF;
}
}
}
WindowParent->number_callbacks=0;
//call timers of parent window
seek_timer=(struct TIMER*)WindowParent->timer_bk;
while(seek_timer!=(struct TIMER*)NULL)
{
if (seek_timer->flags & FLAG_TIMER_ON) Timer(seek_timer);
exchange_timer=(struct TIMER*)seek_timer->tmr_fd;
seek_timer=exchange_timer;
}
//check for IDL function and call it if enabled
if (WindowParent->IDL_func!=(DWORD*)NULL)
{
IDL_Function=(void(*)(void *data))WindowParent->IDL_func;
IDL_Function(WindowParent->IDL_func_data);
}
}
}

View File

@ -1,132 +0,0 @@
/*
create parent of window
*/
#define PARENT_WINDOW_DEFAULT_SIZEX 320
#define PARENT_WINDOW_DEFAULT_SIZEY 200
#define PARENT_WINDOW_BORDER_WIDTH 5;
void gui_get_screen_parameters(void)
{
int value;
value=(int)gui_ksys_get_screen_bits_per_pixel();
screen.bits_per_pixel=(char)value;
screen.bytes_per_pixel=screen.bits_per_pixel >> 3;
screen.skin_height=gui_ksys_get_skin_height();
screen.x=PARENT_WINDOW_BORDER_WIDTH;
screen.y=screen.skin_height;
value=gui_ksys_get_screen_size();
screen.display_size_y=value & 0xffff;
screen.display_size_y=value >> 16;
}
void gui_draw_window(parent_t *window)
{
DWORD flag;
flag=3;
flag=flag<<24;
flag +=0xaabbcc;
gui_ksys_begin_draw_window();
gui_ksys_draw_window(window->ctrl_x,window->ctrl_y,window->ctrl_sizex,window->ctrl_sizey,flag);
gui_ksys_finish_draw_window();
}
//---------------------------------------------------------------------------------
// create window parent
//---------------------------------------------------------------------------------
void* CreateWindow(void)
{
struct HEADERPARENT *WindowParent;
WindowParent=malloc(sizeof(parent_t));
WindowParent->message=malloc(sizeof(gui_message_t));
WindowParent->control_for_callback_function=malloc(sizeof(DWORD)*MAX_CALLBACKS);
WindowParent->callback_for_control_callback=malloc(sizeof(DWORD)*MAX_CALLBACKS);
WindowParent->main_parent=(DWORD*)WindowParent;
WindowParent->global_active_control_for_keys=(DWORD*)NULL;
WindowParent->control_for_callback_function[0]=(DWORD*)NULL;
WindowParent->number_callbacks=0;
WindowParent->child_bk=(DWORD*)NULL;
WindowParent->active_control_for_keys=(DWORD*)NULL;
WindowParent->active_control_for_mouse=(DWORD*)NULL;
WindowParent->ctrl_x=0x0;
WindowParent->ctrl_y=0x0;
WindowParent->ctrl_sizex=PARENT_WINDOW_DEFAULT_SIZEX;
WindowParent->ctrl_sizey=PARENT_WINDOW_DEFAULT_SIZEY;
WindowParent->callback=(DWORD*)NULL;//no callbacks yet
WindowParent->timer=(DWORD*)NULL;//no timers yet
WindowParent->flags=0;
WindowParent->flags=WindowParent->flags | FLAG_SHOW_CONTROL;
WindowParent->flags=WindowParent->flags | FLAG_FOCUSE_INPUT_SUPPOROTE;
WindowParent->number_timers_for_controls=0;
WindowParent->timer_bk=(DWORD*)NULL;
WindowParent->timer_fd=(DWORD*)NULL;
WindowParent->calev_bk=(DWORD*)NULL;
WindowParent->calev_fd=(DWORD*)NULL;
WindowParent->IDL_func=(DWORD*)NULL;
//---------------------------------------------------------------------------------
//---------------------------platform depended part of code------------------------
//---------------------------------------------------------------------------------
//create and initialize screen buffer
gui_get_screen_parameters();
//by default draw output to the screen
screen.draw_output=DRAW_OUTPUT_SCREEN;
//calculate size of client's arrea
screen.size_x=WindowParent->ctrl_sizex-9;
screen.size_y=WindowParent->ctrl_sizey-screen.skin_height-4;
//----------------------------------------------------------------------------------
ID=0;
return(WindowParent);
}
//---------------------------------------------------------------------------------
// create window parent
//---------------------------------------------------------------------------------
void SetWindowSizeRequest(parent_t *WindowParent,int size_x,int size_y)
{
static int x,y,sizex,sizey;
//---------------------------------------------------------------------------------
//---------------------------platform depended part of code------------------------
//---------------------------------------------------------------------------------
x=WindowParent->ctrl_x;
y=WindowParent->ctrl_y;
sizex=size_x;
sizey=size_y;
gui_ksys_set_position_and_size_window(x,y,sizex,sizey);
//---------------------------------------------------------------------------------
WindowParent->ctrl_sizex=sizex;
WindowParent->ctrl_sizey=sizey;
screen.size_x=WindowParent->ctrl_sizex-9;
screen.size_y=WindowParent->ctrl_sizey-screen.skin_height-4;
}
void GetNewWindowSizePos(parent_t *WindowParent)
{
static process_table_t procinfo;
gui_ksys_get_current_process_information(&procinfo);
WindowParent->ctrl_x=(DWORD)procinfo.winx_start;
WindowParent->ctrl_y=(DWORD)procinfo.winy_start;
WindowParent->ctrl_sizex=(DWORD)procinfo.winx_size;
WindowParent->ctrl_sizey=(DWORD)procinfo.winy_size;
//get screen parameters again
gui_get_screen_parameters();
}

View File

@ -1,8 +0,0 @@
typedef char *va_list;
#define _roundsize(n) ( (sizeof(n) + 3) & ~3 )
#define va_start(ap,v) (ap = (va_list)&v+_roundsize(v))
#define va_arg(ap,t) ( *(t *)((ap += _roundsize(t)) - _roundsize(t)) )
#define va_end(ap) (ap = (va_list)0)

View File

@ -1,3 +0,0 @@
static int cdecl printf(const char *format,...);

View File

@ -1,790 +0,0 @@
/*
function for format output to the string
*/
static int formatted_double_to_string(long double number,int format1,int format2,char *s)
{
/*
double n;
double nbefor;
double nafter;
double v,v2;
long intdigit;
long beforpointdigit;
long div;
int i;
int pos;
int size;
int fmt1;
int fmt2;
long mul;
static char buf[200];
size=(int)s;
n=(double)number;
if (n<0) {*s='-';s++;n=-n;}
fmt1=format1;
fmt2=format2;
if (fmt2>18) {fmt2=18;} //maximum of size long long type
//clear array befor output
for(i=0;i<=200;i++) {buf[i]=0;}
if ((fmt1>=0) && (n<1))
{ //formatted output if 0<=n<1
mul=1;
for(i=0;i<fmt2;i++)
{n=n*10;mul=mul*10;}
n=n*10;
n=ceil(n);
intdigit=floor(n);
//intdigit=n;
intdigit=(intdigit/10);
pos=0;
mul=mul/10;
for(i=0;i<fmt2-1;i++)
{
div=intdigit/mul;
buf[pos]=(char)div;
pos++;
intdigit=intdigit-div*mul;
mul=mul/10;
if (mul==1) break;
}
buf[pos]=(char)intdigit;
*s='0';s++;
*s='.';s++;
for(i=0;i<format2;i++)
{
if ((buf[i]>=0) && (buf[i]<=9)) {*s='0'+buf[i];}
else {*s='0';}
s++;
}
}
else
{ //if n>=1
//v=floorf(n+0.00000000000001);
beforpointdigit=floor(n+0.00000000000001);
//beforpointdigit=n;
nbefor=beforpointdigit;
nafter=n-nbefor;
//print part of number befor point
mul=1;
for(i=0;i<200-2;i++)
{
mul=mul*10;
if ((beforpointdigit/mul)==0) {fmt1=i+1;break;}
}
pos=0;
mul=mul/10;
for(i=0;i<fmt1-1;i++)
{
div=beforpointdigit/mul;
buf[pos]=(char)div;
pos++;
beforpointdigit=beforpointdigit-div*mul;
mul=mul/10;
if (mul==1) break;
}
buf[pos]=(char)beforpointdigit;
for(i=0;i<fmt1;i++)
{
if ((buf[i]>=0) && (buf[i]<=9)) {*s='0'+buf[i];}
s++;
}
//print part of number after point
mul=1;
for(i=0;i<fmt2;i++)
{nafter=nafter*10;mul=mul*10;}
nafter=nafter*10;
nafter=ceil(nafter);
intdigit=floor(nafter);
//intdigit=nafter;
intdigit=intdigit/10;
pos=0;
mul=mul/10;
for(i=0;i<fmt2-1;i++)
{
div=intdigit/mul;
buf[pos]=(char)div;
pos++;
intdigit=intdigit-div*mul;
mul=mul/10;
if (mul==1) break;
}
buf[pos]=(char)intdigit;
*s='.';s++;
for(i=0;i<format2;i++)
{
if ((buf[i]>=0) && (buf[i]<=9)) {*s='0'+buf[i];}
else {*s='0';}
s++;
}
}
size=(int)s-size;
return(size);
*/
}
static int formatted_long_to_string(long long number,int fmt1,char *s)
{
int i;
int pos;
int fmt;
int size;
int difference_pos;
long digit;
long mul;
long div;
static char buf[200];
//clear array befor output
for(i=0;i<200;i++) {buf[i]=0;}
digit=number;
size=(int)s;
if (digit<0) {*s='-';s++;digit=-digit;}
if (digit==0) {*s='0';s++;goto end;}
mul=1;
for(i=0;i<200-2;i++)
{
mul=mul*10;
if ((digit/mul)==0) {fmt=i+1;break;}
}
difference_pos=i+1;
pos=0;
mul=mul/10;
for(i=0;i<fmt-1;i++)
{
div=digit/mul;
buf[pos]=(char)div;
pos++;
digit=digit-div*mul;
mul=mul/10;
if (mul==1) break;
}
buf[pos]=(char)digit;
if (fmt1>=difference_pos) fmt=fmt1;
else
fmt=difference_pos;
for(i=0;i<fmt;i++)
{
if (i<difference_pos)
{
if ((buf[i]>=0) && (buf[i]<=9)) {*s='0'+buf[i];}
}
else
{
*s=' ';
}
s++;
}
end:
size=(int)s-size;
return(size);
}
static int formatted_hex_to_string(long long number,int fmt1,char flag_register,char *s)
{
long n;
int i,pos;
int fmt;
long size;
int difference_pos;
static char xdigs_lower[16]="0123456789abcdef";
static char xdigs_upper[16]="0123456789ABCDEF";
static char buf[200];
n=(long)number;
size=(int)s;
if (n<0) {*s='-';s++;n=-n;}
if (n==0) {*s='0';s++;goto end;}
for(i=0;i<200;i++) {buf[i]=0;}
i=0;
if (flag_register==0)
{
while (n>0)
{
buf[i]=xdigs_lower[n & 15];
n=n>>4;
i++;
}
}
else
{
while (n>0)
{
buf[i]=xdigs_upper[n & 15];
n=n>>4;
i++;
}
}
pos=i;
difference_pos=i;
for(i=pos-1;i>=0;i--)
{
*s=buf[i];
s++;
}
if (fmt1-difference_pos>0)
{
for(i=difference_pos+1;i<=fmt1;i++)
{
*s=' ';
s++;
}
}
end:size=(int)s-size;
return(size);
}
static int formatted_octa_to_string(long long number,int fmt1,char flag_register,char *s)
{
long n;
int i,pos;
int fmt;
long size;
int difference_pos;
static char xdigs_lower[16]="012345678";
static char buf[200];
n=number;
size=(int)s;
if (n<0) {*s='-';s++;n=-n;}
if (n==0) {*s='0';s++;goto end;}
for(i=0;i<200;i++) {buf[i]=0;}
i=0;
if (flag_register==0)
{
while (n>0)
{
buf[i]=xdigs_lower[n & 7];
n=n>>3;
i++;
}
}
pos=i;
difference_pos=i;
for(i=pos-1;i>=0;i--)
{
*s=buf[i];
s++;
}
if (fmt1-difference_pos>0)
{
for(i=difference_pos+1;i<=fmt1;i++)
{
*s=' ';
s++;
}
}
end:size=(int)s-size;
return(size);
}
static int format_print(char *dest, size_t maxlen,const char *fmt0, va_list argp)
{
int i,j,k;
int length;
int fmt1,fmt2,stepen;
size_t pos,posc;
long long intdigit;
long double doubledigit;
float floatdigit;
const char *fmt,*fmtc;
char *s;
char *str;
static char buffmt1[30];
static char buffmt2[30];
static char buf[1024];
char format_flag;
char flag_point;
char flag_noformat;
char flag_long;
char flag_unsigned;
char flag_register;
char flag_plus;
fmt=fmt0;
s=dest;
pos=0;
while(pos<maxlen)
{
if (*fmt=='%')
{
if (*(fmt+1)=='%')
{
*s='%';
s++;
fmt=fmt+2;
pos++;
goto exit_check;
}
//checking to containg format in the string
fmtc=fmt;
posc=pos;
format_flag=0;
flag_long=0;
flag_unsigned=0;
flag_register=0;
flag_plus=0;
while((*fmtc!='\0') || (*fmtc!=0))
{
fmtc++;
posc++;
switch(*fmtc)
{
case 'c':
case 'C':
format_flag=1;
break;
case 'd':
case 'D':
case 'i':
case 'I':
format_flag=1;
break;
case 'e':
format_flag=1;
break;
case 'E':
format_flag=1;
flag_long=1;
break;
case 'f':
format_flag=1;
break;
case 'F':
format_flag=1;
flag_long=1;
break;
case 'g':
format_flag=1;
break;
case 'G':
format_flag=1;
flag_long=1;
break;
case 'l':
flag_long=1;
break;
case 'L':
flag_long=2;
break;
case 'o':
format_flag=1;
break;
case 's':
case 'S':
format_flag=1;
break;
case 'u':
case 'U':
format_flag=1;
flag_unsigned=1;
break;
case 'x':
format_flag=1;
break;
case 'X':
flag_register=1;
format_flag=1;
break;
case 'z':
case 'Z':
format_flag=1;
flag_unsigned=1;
break;
case '+':
flag_plus=1;
break;
default:;
}
if ((*fmtc=='%') || (*fmtc==' ')) break;
if (format_flag==1) break;
}
if (format_flag==0)
{
*s=*fmt;
fmt++;
s++;
pos++;
}
else
{
if ((posc-pos)==1)
{//simbols % and format simbol near tothere(for example %c )
fmt=fmtc+1;
switch(*fmtc)
{
case 'c':
case 'C':
if ((pos+1)<maxlen)
{
//*s=(int)va_arg(argp,char*);
*s=*((char *)argp);
argp=argp+4;
*s++;pos++;
}
break;
case 's':
case 'S':
str=va_arg(argp,char*);
length=strlen(str);
if ((pos+length)<maxlen)
{
memmove(s,str,length);
s=s+length;pos=pos+length;
}
break;
case 'd':
case 'D':
case 'i':
case 'I':
if (flag_long==0) {intdigit=va_arg(argp,int);}
if (flag_long==1) {intdigit=va_arg(argp,long);}
if (flag_long==2) {intdigit=va_arg(argp,long long);}
//intdigit=*((long*)argp);
//argp=argp+4;
if ((intdigit>0) && (flag_plus==1) && (pos+1<maxlen))
{
*s='+';
s++;
pos++;
}
length=formatted_long_to_string(intdigit,0,buf);
if ((pos+length)<maxlen)
{
memmove(s,buf,length);
s=s+length;pos=pos+length;
}
break;
case 'o':
if (flag_long==0) {intdigit=va_arg(argp,int);}
if (flag_long==1) {intdigit=va_arg(argp,long);}
if (flag_long==2) {intdigit=va_arg(argp,long long);}
//intdigit=*((long int *)argp);
//argp=argp+4;
length=formatted_octa_to_string(intdigit,0,flag_register,buf);
if ((pos+length)<maxlen)
{
memmove(s,buf,length);
s=s+length;pos=pos+length;
}
break;
case 'u':
case 'U':
if (flag_long==0) {intdigit=va_arg(argp,int);}
if (flag_long==1) {intdigit=va_arg(argp,long int);}
if (flag_long==2) {intdigit=va_arg(argp,long long);}
if (flag_unsigned==1) {
if (intdigit<0) {intdigit=-intdigit;}
}
length=formatted_long_to_string(intdigit,0,buf);
if ((pos+length)<maxlen)
{
memmove(s,buf,length);
s=s+length;pos=pos+length;
}
break;
case 'x':
case 'X':
if (flag_long==0) {intdigit=va_arg(argp,int);}
if (flag_long==1) {intdigit=va_arg(argp,long);}
if (flag_long==2) {intdigit=va_arg(argp,long long);}
//intdigit=*((long int *)argp);
//argp=argp+4;
length=formatted_hex_to_string(intdigit,0,flag_register,buf);
if ((pos+length)<maxlen)
{
memmove(s,buf,length);
s=s+length;pos=pos+length;
}
break;
case 'z':
case 'Z':
intdigit=va_arg(argp,size_t);
if (flag_unsigned==1) {
if (intdigit<0) {intdigit=-intdigit;}
}
length=formatted_long_to_string(intdigit,0,buf);
if ((pos+length)<maxlen)
{
memmove(s,buf,length);
s=s+length;pos=pos+length;
}
break;
default:;
}
}
else
{
fmt++;
flag_point=0;
flag_noformat=0;
fmt1=0;
fmt2=0;
j=0;
k=0;
for(i=pos+1;i<posc;i++)
{
switch(*fmt)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
if (flag_point==0)
{
buffmt1[j]=*fmt-'0';
j++;
}
else
{
buffmt2[k]=*fmt-'0';
k++;
}
break;
case '.':
flag_point=1;
break;
case 'l':
case 'L':
break;
case '+':
break;
default:flag_noformat=1;
}
if (flag_noformat==1) break;
fmt++;
}
if (flag_noformat==0)
{
stepen=1;
for(i=j-1;i>=0;i--)
{
fmt1=fmt1+buffmt1[i]*stepen;
stepen=stepen*10;
}
stepen=1;
for(i=k-1;i>=0;i--)
{
fmt2=fmt2+buffmt2[i]*stepen;
stepen=stepen*10;
}
switch(*fmtc)
{
case 'f':
case 'F':
if (flag_long==0) {doubledigit=va_arg(argp,double);}
if (flag_long>=1) {doubledigit=va_arg(argp,long double);}
//doubledigit=*((double *)argp);
//sargp=argp+8;
length=formatted_double_to_string(doubledigit,fmt1,fmt2,buf);
if ((pos+length)<maxlen)
{
memmove(s,buf,length);
s=s+length;pos=pos+length;
}
break;
case 'd':
case 'D':
case 'i':
case 'I':
if (flag_long==0) {intdigit=va_arg(argp,int);}
if (flag_long==1) {intdigit=va_arg(argp,long);}
if (flag_long==2) {intdigit=va_arg(argp,long long);}
if ((intdigit>0) && (flag_plus==1) && (pos+1<maxlen))
{
*s='+';
s++;
pos++;
}
length=formatted_long_to_string(intdigit,fmt1,buf);
if ((pos+length)<maxlen)
{
memmove(s,buf,length);
s=s+length;pos=pos+length;
}
break;
case 'o':
if (flag_long==0) {intdigit=va_arg(argp,int);}
if (flag_long==1) {intdigit=va_arg(argp,long);}
if (flag_long==2) {intdigit=va_arg(argp,long long);}
length=formatted_octa_to_string(intdigit,fmt1,flag_register,buf);
if ((pos+length)<maxlen)
{
memmove(s,buf,length);
s=s+length;pos=pos+length;
}
break;
case 'u':
case 'U':
if (flag_long==0) {intdigit=va_arg(argp,int);}
if (flag_long==1) {intdigit=va_arg(argp,long int);}
if (flag_long==2) {intdigit=va_arg(argp,long long);}
if (flag_unsigned==1) {
if (intdigit<0) {intdigit=-intdigit;}
}
length=formatted_long_to_string(intdigit,fmt1,buf);
if ((pos+length)<maxlen)
{
memmove(s,buf,length);
s=s+length;pos=pos+length;
}
break;
case 'x':
case 'X':
if (flag_long==0) {intdigit=va_arg(argp,int);}
if (flag_long==1) {intdigit=va_arg(argp,long int);}
if (flag_long==2) {intdigit=va_arg(argp,long long);}
length=formatted_hex_to_string(intdigit,fmt1,flag_register,buf);
if ((pos+length)<maxlen)
{
memmove(s,buf,length);
s=s+length;pos=pos+length;
}
break;
case 'z':
case 'Z':
intdigit=va_arg(argp,size_t);
if (flag_unsigned==1) {
if (intdigit<0) {intdigit=-intdigit;}
}
length=formatted_long_to_string(intdigit,fmt1,buf);
if ((pos+length)<maxlen)
{
memmove(s,buf,length);
s=s+length;pos=pos+length;
}
break;
default:;
}
}
fmt=fmtc+1;
}
}
}
else
{
if (*fmt=='\0') {break;}
*s=*fmt;
fmt++;
s++;
pos++;
}
exit_check:;
}
return(pos);
}
static char* dllname="/rd/1/lib/console.obj";
int console_init_status=0;
static char* imports[] = {"START","version","con_init","con_write_asciiz","con_printf","con_exit"};
static char* caption = "Console";
static DWORD (stdcall *dll_ver)(void);
static void (stdcall *con_init)(DWORD wnd_width, DWORD wnd_height, DWORD scr_width, DWORD scr_height, const char* title);
static void (stdcall *con_write_asciiz)(const char* string);
static void (cdecl *con_printf)(const char* format,...);
static void (stdcall *con_exit)(DWORD bCloseWindow);
static void printf_link(import_t *exp, char** imports)
{
dll_ver = (DWORD (stdcall *)(void))
gui_cofflib_getproc(exp, imports[1]);
con_init = (void (stdcall *)(DWORD , DWORD, DWORD, DWORD, const char*))
gui_cofflib_getproc(exp, imports[2]);
con_printf = (void (cdecl *)(const char*,...))
(exp, imports[4]);
con_exit = (void (stdcall *)(DWORD))
gui_cofflib_getproc(exp, imports[5]);
}
static int init_console(void)
{
import_t *hDll;
if((hDll = (import_t*)gui_ksys_load_dll(dllname)) == 0)
{
gui_debug_out_str("can't load lib\n");
return 1;
}
printf_link(hDll, imports);
con_init(-1, -1, -1, -1, caption);
return(0);
}
static int printf(const char *format,...)
{
int i;
int printed_simbols;
va_list arg;
static char simbol[]={"%s"};
char *s;
va_start(arg,format);
/*
if (console_init_status==0)
{
i=init_console();
console_init_status=1;
}
*/
s=malloc(4096);
printed_simbols=format_print(s,4096,format,arg);
gui_debug_out_str(s); //con_printf(simbol,s);
free(s);
return(printed_simbols);
}

View File

@ -1,9 +0,0 @@
/*
some standart libC helper functions
*/
static void* malloc(DWORD size);
static void free(void *memory);
static void* realloc(void *old_mem,DWORD new_size);
static void exit(int c);

View File

@ -1,24 +0,0 @@
/*
some standart libC helper functions
*/
static void* malloc(DWORD size)
{
return(gui_ksys_malloc(size));
}
static void free(void *memory)
{
gui_ksys_free(memory);
}
static void* realloc(void *old_mem,DWORD new_size)
{
return(gui_ksys_realloc(new_size,old_mem));
}
static void exit(int c)
{
gui_ksys_exit(c);
}

View File

@ -1,16 +0,0 @@
/*
some libC function working with memory
*/
static void *memmove(void *dst,const void *src,size_t length);
static size_t strlen(const char *s);
static char* strchr(const char *string, int c);
static char* strrchr(const char *string, int c);
static char* strstr(const char *s1,const char *s2);
static int strcmp(const char*,const char*);
static int strncmp(const char* string1, const char* string2, int count);
static int vsnprintf(char *dest, size_t size,const char *format,va_list ap);
static int cdecl snprintf(char *dest, size_t size, const char *format,...);
static int cdecl sprintf(char *dest,const char *format,...);

View File

@ -1,149 +0,0 @@
/*
some libC function working with memory
*/
static void *memmove(void *dst,const void *src,size_t length)
{
void *value;
if (length & 3)
{//length not aligned in 4 bytes use reb movsb
__asm__ __volatile__(
"movl %%edi,%%eax\n\t"
"cld\n\t"
"rep\n\t"
"movsb"
:"=D"(value)
:"c"(length),"S"(src),"D"(dst)
:"eax");
}
else
{//length aligned in 4 bytes use rep movsd
length=length >> 2;//length=length/4
__asm__ __volatile__(
"movl %%edi,%%eax\n\t"
"cld\n\t"
"rep\n\t"
"movsd"
:"=D"(value)
:"c"(length),"S"(src),"D"(dst)
:"eax");
}
return(value);
}
static size_t strlen(const char *s)
{
size_t i;
i=0;
while(*s!='\0')
{
i++;
s++;
}
return(i);
}
static char* strchr(const char *string, int c)
{
while(*string!='\0')
{
if (*string==(char)c) return((char*)string);
string++;
}
return(NULL);
}
static char* strrchr(const char *string, int c)
{
char *s;
int i,j;
s=(char*)string;
while(*s!='\0') {s++;}
j=(int)(s-string);
s--;
for(i=0;i<j;i++)
{
if (*s==(char)c) return(s);
s--;
}
return(NULL);
}
static char* strstr(const char *s1,const char *s2)
{
char *s;
int i,j,len1,len2;
len2=strlen(s2);
if (len2==0) return((char*)s1);
len1=strlen(s1);
for(i=0;i<len1-len2+1;i++)
{
if (s1[i]==s2[0])
{
for(j=0;j<len2;j++)
{
if (s1[i+j]!=s2[j]) break;
}
if (j==len2) return((char*)(s1+i));
}
}
return(NULL);
}
static int strcmp(const char* string1, const char* string2)
{
while (1)
{
if (*string1<*string2)
return -1;
if (*string1>*string2)
return 1;
if (*string1=='\0')
return 0;
string1++;
string2++;
}
}
static int strncmp(const char* string1, const char* string2, int count)
{
while(count>0 && *string1==*string2)
{
if (*string1) return 0;
++string1;
++string2;
--count;
}
if(count) return (*string1 - *string2);
return 0;
}
static int sprintf(char *dest,const char *format,...)
{
va_list arg;
va_start (arg, format);
return format_print(dest,4096, format, arg);
}
static int snprintf(char *dest, size_t size,const char *format,...)
{
va_list arg;
va_start (arg, format);
return format_print(dest,size, format, arg);
}
static int vsnprintf(char *dest, size_t size,const char *format,va_list ap)
{
return format_print(dest,size, format, ap);
}

View File

@ -1,17 +0,0 @@
/*
some used types
*/
#define NULL (void*)0
typedef unsigned int DWORD;
typedef unsigned char BYTE;
typedef unsigned short int WORD;
typedef unsigned int size_t;
//#define stdcall __attribute__((stdcall))
//#define cdecl __attribute__((cdecl))
//for win compilers
#define stdcall __stdcall
#define cdecl __cdecl

View File

@ -1,70 +0,0 @@
/*
test libGUI library
*/
#include "stdarg.h"
#include "libGUI.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define FALSE 0
#define TRUE 1
void callback_func_delete_window(header_t *control,void *data)
{
QuitLibGUI((parent_t*)control);
}
void callback_func1(header_t *control,void *data)
{
printf("\nentry in button");
}
void callback_func2(header_t *control,void *data)
{
printf("\nbutton pressed");
}
void callback_func3(header_t *control,void *data)
{
printf("\nbutton released");
}
void callback_func4(header_t *control,void *data)
{
printf("\nleave button");
}
int main(int argc, char *argv[])
{
parent_t *window;
gui_callback_t *id1,*id2,*id3,*id4;
gui_button_data_t button_data;
gui_button_t *button;
//load libGUI library
LoadLibGUI(NULL);
//create main window
window=CreateWindow();
SetWindowSizeRequest(window,90,60);
//create button
button_data.x=5;
button_data.y=5;
button_data.width=70;
button_data.height=20;
//create button with text
button=CreateButtonWithText(&button_data,"Click my!");
//set callback functions for button close window
SetCallbackFunction(window,DELETE_EVENT,&callback_func_delete_window,NULL);
//set callback functions for button
id1=SetCallbackFunction(button,BUTTON_ENTER_EVENT,&callback_func1,NULL);
id2=SetCallbackFunction(button,BUTTON_PRESSED_EVENT,&callback_func2,NULL);
id3=SetCallbackFunction(button,BUTTON_RELEASED_EVENT,&callback_func3,NULL);
id4=SetCallbackFunction(button,BUTTON_LEAVE_EVENT,&callback_func4,NULL);
//pack button in window
PackControls(window,button);
//start main libGUI loop
LibGUImain(window);
}

View File

@ -1,52 +0,0 @@
/*
test libGUI library
*/
#include "stdarg.h"
#include "libGUI.h"
#include "stdlib.h"
#include "stdio.h"
void callback_func_delete_window(header_t *control,void *data)
{
QuitLibGUI((parent_t*)control);
}
int main(int argc, char *argv[])
{
parent_t *window;
gui_image_data_t imdata;
gui_image_t *image;
int i,j;
unsigned int *img;
//load libGUI library
LoadLibGUI(NULL);//use default system path to library
//create main window
window=CreateWindow();
//change window size
SetWindowSizeRequest(window,220,142);
//set callback function for close window button
SetCallbackFunction(window,DELETE_EVENT,&callback_func_delete_window,NULL);
//create image
imdata.x=5;
imdata.y=5;
imdata.width=200;
imdata.height=100;
imdata.bits_per_pixel=32;//bits per pixel
image=CreateImage(&imdata);
img=(unsigned int*)image->img;
//generate 32 bits image
for(i=0;i<GetControlSizeY(image);i++)
{
for(j=0;j<GetControlSizeX(image);j++)
{
*img=100*(i*i+j*j-i*3+2*j);
img++;
}
}
//pack image in window
PackControls(window,image);
//start main libGUI loop
LibGUImain(window);
}

View File

@ -1,66 +0,0 @@
/*
test libGUI library
*/
#include "stdarg.h"
#include "libGUI.h"
#include "string.h"
void callback_func_delete_window(header_t *control,void *data)
{
QuitLibGUI((parent_t*)control);
}
void ProgressBarCallback(void *data)
{
gui_progress_bar_t *progress_bar;
int progress;
static char txt[16];
progress_bar=(gui_progress_bar_t*)data;
progress_bar->progress+=0.01;//incrase progress
if (progress_bar->progress>1.0) progress_bar->progress=0.0;
//calculate progress level in %
progress=progress_bar->progress*100;
snprintf(txt,16,"progress %d%%",progress);
//set text for progress bar
ProgressBarSetText(progress_bar,txt);
}
int main(int argc, char *argv[])
{
parent_t *window;
gui_progress_bar_data_t progress_bar_data;
gui_progress_bar_t *progress_bar;
gui_timer_t *timer;
//load libGUI library
LoadLibGUI(NULL);//use default system path to library
//create main window
window=CreateWindow();
//change size of main window
SetWindowSizeRequest(window,320,57);
//set callback function for button close window
SetCallbackFunction(window,DELETE_EVENT,&callback_func_delete_window,NULL);
//create progress bar
progress_bar_data.x=5;
progress_bar_data.y=5;
progress_bar_data.width=300;
progress_bar_data.height=25;
progress_bar_data.progress=0.0;
progress_bar=CreateProgressBar(&progress_bar_data);
//create timer for update progress level each 50 millisecunds
timer=SetTimerCallbackForFunction(window,5,&ProgressBarCallback,progress_bar);
//pack progress bar in window
PackControls(window,progress_bar);
//update progress bar automatically each 50 millisecund
SetProgressBarPulse(progress_bar,5);
//call main libGUI loop
LibGUImain(window);
}

View File

@ -1,76 +0,0 @@
/*
test libGUI library
*/
#include "stdarg.h"
#include "libGUI.h"
#include "stdio.h"
#define FALSE 0
#define TRUE 1
void callback_func_delete_window(header_t *control,void *data)
{
printf("\nlibGUI quit...");
QuitLibGUI((parent_t*)control);
}
void ScrollStateH(header_t *control,void *data)
{
gui_scroll_bar_t *hsc;
hsc=(gui_scroll_bar_t*)control;
printf("\nhorizontal ruler position %d%%",(int)(hsc->ruller_pos*100));
}
void ScrollStateV(header_t *control,void *data)
{
gui_scroll_bar_t *vsc;
vsc=(gui_scroll_bar_t*)control;
printf("\nvertical ruler position %d%%",(int)(vsc->ruller_pos*100));
}
int main(int argc, char *argv[])
{
parent_t *window;
gui_callback_t *id1,*id2;
gui_scroll_bar_data_t horizontal_sbar_data;
gui_scroll_bar_data_t vertical_sbar_data;
gui_scroll_bar_t *ScrollBarH;
gui_scroll_bar_t *ScrollBarV;
//load libGUI library
LoadLibGUI(NULL);//use default system path to library
//create main window
window=CreateWindow();
//change size of window
SetWindowSizeRequest(window,270,207);
//create horizontal scroll bar
horizontal_sbar_data.x=5;
horizontal_sbar_data.y=5;
horizontal_sbar_data.width=250;
horizontal_sbar_data.height=16;
horizontal_sbar_data.ruller_size=0.2;//size of ruler E [0,1]
horizontal_sbar_data.ruller_pos=0.5;//ruler position E [0,1]
horizontal_sbar_data.ruller_step=0.1;//step of change ruler pos after press of button E [0,1]
//create vertical scroll bar
vertical_sbar_data.x=5;
vertical_sbar_data.y=26;
vertical_sbar_data.width=16;
vertical_sbar_data.height=150;
vertical_sbar_data.ruller_size=0.5;//size of ruler E [0,1]
vertical_sbar_data.ruller_pos=0.05;//ruler position E [0,1]
vertical_sbar_data.ruller_step=0.1;//step of change ruler pos after press of button E [0,1]
//create horizontal and vertical scroll bars
ScrollBarH=CreateHorizontalScrollBar(&horizontal_sbar_data);
ScrollBarV=CreateVerticalScrollBar(&vertical_sbar_data);
//set callback functions for scroll bars
id1=SetCallbackFunction(ScrollBarH,SCROLLBAR_CHANGED_EVENT,&ScrollStateH,NULL);
id2=SetCallbackFunction(ScrollBarV,SCROLLBAR_CHANGED_EVENT,&ScrollStateV,NULL);
//pack scroll bars in window
PackControls(window,ScrollBarH);
PackControls(window,ScrollBarV);
//start minl libGUI loop
LibGUImain(window);
}

View File

@ -1,67 +0,0 @@
/*
test libGUI library
*/
#include "stdarg.h"
#include "libGUI.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
void callback_func_delete_window(header_t *control,void *data)
{
QuitLibGUI((parent_t*)control);
}
void callback_func(header_t *control,void *data)
{
printf("\npressed button with ID=%d control=%d",(int)control->ctrl_ID,(int)control);
}
int main(int argc, char *argv[])
{
parent_t *window;
gui_button_data_t button_data;
gui_button_t *button;
gui_scrolled_window_data_t scroll_win_data;
gui_scrolled_window_t *ScrollWin;
int i,j;
static char txt[20];
//load libGUI library
LoadLibGUI(NULL);
//create main window
window=CreateWindow();
//change size of window
SetWindowSizeRequest(window,270,282);
//create scrolled window
scroll_win_data.x=5;
scroll_win_data.y=5;
scroll_win_data.width=250;
scroll_win_data.height=250;
ScrollWin=CreateScrolledWindow(&scroll_win_data);
//create buttons
for(j=1;j<=10;j++)
{
for(i=1;i<=10;i++)
{
button_data.x=10+(i-1)*75;
button_data.y=10+(j-1)*25;
button_data.width=70;
button_data.height=20;
snprintf(txt,20,"(%d,%d)",j,i);
button=CreateButtonWithText(&button_data,txt);
SetCallbackFunction(button,BUTTON_PRESSED_EVENT,&callback_func,NULL);
ScrolledWindowPackControls(ScrollWin,button);
}
}
//set callback function for button close window
SetCallbackFunction(window,DELETE_EVENT,&callback_func_delete_window,NULL);
//pack scrolled window in window
PackControls(window,ScrollWin);
//start main libGUI loop
LibGUImain(window);
}

View File

@ -1,45 +0,0 @@
/*
hello world example
*/
#include "libGUI.h"
#define TRUE 1
#define FALSE 0
void callback_func_delete_window(header_t *control,void *data)
{
QuitLibGUI((parent_t*)control);
}
int main(int argc, char *argv[])
{
parent_t *window;
gui_text_data_t txtdata;
gui_text_t *text;
//load libGUI library
LoadLibGUI(NULL);//load from default system path to library
//create main window
window=CreateWindow();
//change size of window
SetWindowSizeRequest(window,92,46);
//set callback function for button close window
SetCallbackFunction(window,DELETE_EVENT,&callback_func_delete_window,NULL);
//create control text
txtdata.x=5;
txtdata.y=5;
txtdata.font=NULL;//use default system libGUI font
txtdata.background=TRUE;//use background for text
txtdata.color=0xffffff;//text color
txtdata.background_color=0xff8000;//background color
txtdata.text="Hello world!";
text=CreateText(&txtdata);
//pack control text in window
PackControls(window,text);
//start libGUI main loop
LibGUImain(window);
}

View File

@ -1,2 +0,0 @@
C file compile by GCC.
asm file compile by FASM

View File

@ -1,73 +0,0 @@
format ELF
include 'proc32.inc'
section '.text' executable
public _ksys_cofflib_load
public _ksys_cofflib_getproc
proc _ksys_cofflib_load stdcall, name:dword
mov eax, 68
mov ebx, 19
mov ecx, [name]
int 0x40
ret
endp
proc _ksys_cofflib_getproc stdcall, export:dword,name:dword
mov ebx,[export]
next_name_check:
mov ecx,[ebx]
test ecx,ecx
jz end_export
;cmp export string with name
mov esi,[name]
xor edi,edi
next_simbol_check:
xor eax,eax
mov al,[ecx]
test al,al
jz exit_check_simbol
xor edx,edx
mov dl,[esi]
cmp al,dl
je simbols_equvalent
add edi,1
jmp exit_check_simbol
simbols_equvalent:
;pushad
;mov cl,al
;mov ebx,1
;mov eax,63
;int 0x40
;popad
add ecx,1
add esi,1
jmp next_simbol_check
exit_check_simbol:
test edi,edi
jnz function_not_finded
mov eax,[ebx+4]
jmp end_export
function_not_finded:
add ebx,8
jmp next_name_check
end_export:
ret
endp

View File

@ -1,195 +0,0 @@
#ifndef kolibrisys_h
#define kolibrisys_h
/*
#ifdef GNUC
#define stdcall __stdcall
#define cdecl __cdecl
#else
#define stdcall ((__stdcall))
#define cdecl ((__cdecl))
#endif
*/
//#ifdef GNUC
//#define stdcall __stdcall
//#else
#define cdecl __attribute__ ((cdecl))
#define stdcall __attribute__ ((stdcall))
//#endif
typedef unsigned int dword;
typedef unsigned char byte;
typedef unsigned short word;
typedef unsigned int fpos_t;
typedef unsigned int size_t;
typedef struct process_table_entry{
int cpu_usage; //+0
int window_pos_info; //+4
short int reserved1; //+8
char name[12]; //+10
int memstart; //+22
int memused; //+26
int pid; //+30
int winx_start; //+34
int winy_start; //+38
int winx_size; //+42
int winy_size; //+46
short int slot_info; //+50
short int reserved2; //+52
int clientx; //+54
int clienty; //+58
int clientwidth; //+62
int clientheight; //+66
unsigned char window_state;//+70
char reserved3[1024-71]; //+71
}__attribute__((packed));
//-----------------------------------------------------------------------------------
//------------------------KolibriOS system acces to files----------------------------
//-----------------------------------------------------------------------------------
extern dword stdcall _ksys_get_filesize(char *filename);
extern dword stdcall _ksys_readfile(char *filename,dword pos,dword blocksize,void *data);
extern dword stdcall _ksys_rewritefile(char *filename,dword blocksize,void *data);
extern dword stdcall _ksys_appendtofile(char *filename,dword pos,dword blocksize,void *data);
//-----------------------------------------------------------------------------------
//----------------------Run program---------------------------------------------------
extern void stdcall _ksys_run_program(char* filename,char* parameters);
//------------------------------------------------------------------------------------
//--------------------Debug output---------------------------------------------------
extern void stdcall _ksys_debug_out(int c);
extern void stdcall debug_out_str(char* str);
//-----------------------------------------------------------------------------------
//--------------------------Mouse state----------------------------------------------
extern int stdcall _ksys_GetMouseXY(void);
extern int stdcall _ksys_GetMouseButtonsState(void);
//-----------------------------------------------------------------------------------
//--------------------------get skin height------------------------------------------
extern int stdcall _ksys_get_skin_height(void);
//-----------------------------------------------------------------------------------
//----------------------------background---------------------------------------------
extern void stdcall _ksys_set_background_size(int xsize,int ysize);
extern void stdcall _ksys_write_background_mem(int pos,int color);
extern void stdcall _ksys_draw_background(void);
extern void stdcall _ksys_set_background_draw_type(int type);
extern void stdcall _ksys_background_blockmove(void* src,int bgr_pos, int count);
//-----------------------------------------------------------------------------------
//----------------------------functionf for draw window,lines.bar,etc.---------------
extern void stdcall _ksys_draw_window(int xcoord,int ycoord, int xsize,
int ysize,int workcolor,int type,
int captioncolor,int windowtype,int bordercolor);
extern void stdcall _ksys_window_redraw(int status);
extern int stdcall _ksys_putpixel(int x,int y,int color);
extern void stdcall _ksys_draw_bar(int x, int y, int xsize, int ysize, int color);
extern void stdcall _ksys_line(int x1,int y1,int x2,int y2,int color);
extern void stdcall _ksys_putimage(int x, int y, int xsize, int ysize, void* image);
//-----------------------------------------------------------------------------------
//--------------------------write text(system fonts 6x9)-----------------------------
extern void stdcall _ksys_write_text(int x,int y,int color,char* text,int len);
//-----------------------------------------------------------------------------------
//------------------ get screen size and bytes per pixel---------------------------
extern int stdcall _ksys_get_screen_size(int* x,int* y);
extern void stdcall _ksys_dga_get_resolution(int* xres, int* yres, int* bpp, int* bpscan);
//-----------------------------------------------------------------------------------
//-------------------------------craete thread---------------------------------------
extern void* stdcall _ksys_start_thread(void (* func_ptr)(void),int stack_size,int* pid);
//-----------------------------------------------------------------------------------
//------------------system button(Old function. Better use libGUI functions.)--------
extern void stdcall _ksys_make_button(int x, int y, int xsize, int ysize, int id, int color);
extern int stdcall _ksys_get_button_id(void); //get state of system button
//------------------------------------------------------------------------------------
//----------------------system clock(in 1/100 sec.) and date--------------------------
extern int stdcall _ksys_get_system_clock(void);
extern int stdcall _ksys_get_date(void);
//------------------------------------------------------------------------------------
//-------------------------system delay(in 1/100 sec.)-------------------------------
extern void stdcall _ksys_delay(int m);
//-----------------------------------------------------------------------------------
//------------------------system events----------------------------------------------
extern int stdcall _ksys_wait_for_event_infinite(void);
extern int stdcall _ksys_check_for_event(void);
extern int stdcall _ksys_wait_for_event(int time);
extern void stdcall _ksys_set_wanted_events(int ev);
//-----------------------------------------------------------------------------------
//----------------------------system exit program------------------------------------
extern void stdcall _ksys_exit(void);
//-----------------------------------------------------------------------------------
//-----------------------------system IPC send message-------------------------------
extern void stdcall _ksys_send_message(int pid, void* msg, int size);
//-----------------------------------------------------------------------------------
//---------------------------system work with IRQ from user mode---------------------
extern void stdcall _ksys_define_receive_area(void* area, int size);
extern int stdcall _ksys_get_irq_owner(int irq);
extern int stdcall _ksys_get_data_read_by_irq(int irq, int* size, void* data);
extern int stdcall _ksys_send_data_to_device(int port, unsigned char val);
extern int stdcall _ksys_receive_data_from_device(int port,unsigned char* data);
extern void stdcall _ksys_program_irq(void* intrtable, int irq);
extern void stdcall _ksys_reserve_irq(int irq);
extern void stdcall _ksys_free_irq(int irq);
//----------------------------------------------------------------------------------
//----------------------------system reserve diapason of ports----------------------
extern int stdcall _ksys_reserve_port_area(int start,int end);
extern int stdcall _ksys_free_port_area(int start,int end);
//----------------------------------------------------------------------------------
//-------------functions get key and set keyboard mode------------------------------
extern int stdcall _ksys_get_key(void);
extern void stdcall _ksys_set_keyboard_mode(int mode);
//----------------------------------------------------------------------------------
//--------------simple work with MPU401 sound device---------------------------------
extern void stdcall _ksys_midi_reset(void);
extern void stdcall _ksys_midi_send(int data);
//-----------------------------------------------------------------------------------
//--------------------------acces to PCI BUS from user mode---------------------------
extern int stdcall _ksys_get_pci_version(void);
extern int stdcall _ksys_get_last_pci_bus(void);
extern int stdcall _ksys_get_pci_access_mechanism(void);
extern int stdcall _ksys_pci_read_config_byte(int bus,int dev,int fn,int reg);
extern int stdcall _ksys_pci_read_config_word(int bus,int dev,int fn,int reg);
extern int stdcall _ksys_pci_read_config_dword(int bus,int dev,int fn,int reg);
extern int stdcall _ksys_pci_write_config_byte(int bus,int dev,int fn,int reg,int value);
extern int stdcall _ksys_pci_write_config_word(int bus,int dev,int fn,int reg,int value);
extern int stdcall _ksys_pci_write_config_value(int bus,int dev,int fn,int reg,int value);
//--------------------------------------------------------------------------------------
//------------------------Process information--------------------------------------
extern int stdcall _ksys_get_process_table(struct process_table_entry *proctab,int pid); //if pid=-1 than get info about him.
//---------------------------------------------------------------------------------
//-----------------Old functions for work with sound(Sound Blaster only).---------
extern void stdcall _ksys_sound_load_block(void* blockptr);
extern void stdcall _ksys_sound_play_block(void);
extern void stdcall _ksys_sound_set_channels(int channels);
extern void stdcall _ksys_sound_set_data_size(int size);
extern void stdcall _ksys_sound_set_frequency(int frequency);
//--------------------------------------------------------------------------------
//------------------------------system speaker(integrated speaker)----------------
extern void stdcall _ksys_sound_speaker_play(void* data);
//--------------------------------------------------------------------------------
//------------------function for work with Dinamic Link Librarys(DLL)--------------
extern dword* stdcall _ksys_cofflib_load(char* name);
extern char* stdcall _ksys_cofflib_getproc(void* exp,char* sz_name);
//---------------------------------------------------------------------------------
#endif

View File

@ -1,69 +0,0 @@
#include "kolibrisys.h"
#include "libGUI.h"
char* sys_libGUI_path="/sys/lib/libGUI.obj";
void link_libGUI(char *exp){
char name_DestroyControl[]={"DestroyControl"};
char name_SendMessage[]={"SendMessage"};
char name_Version[]={"Version"};
char name_ResizeComponent[]={"ResizeComponent"};
char name_MoveComponent[]={"MoveComponent"};
char name_ActivateTrapForSpecializedMessage[]={"ActivateTrapForSpecializedMessage"};
char name_CraeteButton[]={"CraeteButton"};
char name_CraeteScroller[]={"CraeteScroller"};
char name_CraeteBookmark[]={"CraeteBookmark"};
char name_CraeteImage[]={"CraeteImage"};
char name_CraeteText[]={"CraeteText"};
char name_CraeteNumber[]={"CraeteNumber"};
char name_CraeteCheckbox[]={"CraeteCheckbox"};
char name_CraeteEditbox[]={"CraeteEditbox"};
char name_CraeteProgressbar[]={"CraeteProgressbar"};
DestroyControl=(void stdcall (*)(void *control))
_ksys_cofflib_getproc(exp,name_DestroyControl);
SendMessage=(void stdcall (*)(struct HEADER *Parend,struct MESSAGE *Message))
_ksys_cofflib_getproc(exp,name_SendMessage);
Version=(int stdcall (*)(void))
_ksys_cofflib_getproc(exp,name_Version);
ResizeComponent=(void stdcall(*)(void *Control,int new_sizex,int new_sizey))
_ksys_cofflib_getproc(exp,name_ResizeComponent);
MoveComponent=(void stdcall(*)(void *Control,int new_x,int new_y))
_ksys_cofflib_getproc(exp,name_MoveComponent);
ActivateTrapForSpecializedMessage=(void stdcall(*)(void *Control,int new_x,int new_y))
_ksys_cofflib_getproc(exp,name_ActivateTrapForSpecializedMessage);
CraeteButton=(void* stdcall (*)(struct HEADER *Parend,void *Control))
_ksys_cofflib_getproc(exp,name_CraeteButton);
CraeteScroller=(void* stdcall (*)(struct HEADER *Parend,void *Control))
_ksys_cofflib_getproc(exp,name_CraeteScroller);
CraeteBookmark=(void* stdcall (*)(struct HEADER *Parend,void *Control))
_ksys_cofflib_getproc(exp,name_CraeteBookmark);
CraeteImage=(void* stdcall (*)(struct HEADER *Parend,void *Control))
_ksys_cofflib_getproc(exp,name_CraeteImage);
CraeteText=(void* stdcall (*)(struct HEADER *Parend,void *Control))
_ksys_cofflib_getproc(exp,name_CraeteText);
CraeteNumber=(void* stdcall (*)(struct HEADER *Parend,void *Control))
_ksys_cofflib_getproc(exp,name_CraeteNumber);
CraeteCheckbox=(void* stdcall (*)(struct HEADER *Parend,void *Control))
_ksys_cofflib_getproc(exp,name_CraeteCheckbox);
CraeteEditbox=(void* stdcall (*)(struct HEADER *Parend,void *Control))
_ksys_cofflib_getproc(exp,name_CraeteEditbox);
CraeteProgressbar=(void* stdcall (*)(struct HEADER *Parend,void *Control))
_ksys_cofflib_getproc(exp,name_CraeteProgressbar);
}
int Init_libGUI(void)
{
char *Export;
Export=(char *)_ksys_cofflib_load(sys_libGUI_path);
if (Export==0) return CANNOT_LOAD_LIBGUI;
link_libGUI(Export);
return(0);
}

View File

@ -1,369 +0,0 @@
/*
structures for work with libGUI
*/
/////////////////////////////////////////////////////////////////
#define CANNOT_LOAD_LIBGUI 100
#define PAREND_SIZE 44
#define MESSAGE_SIZE 16
#define MESSAGE_FULL_REDRAW_ALL 1
#define MESSAGE_KEYS_EVENTS 2
#define MESSAGE_SPECIALIZED 3
#define MESSAGE_MOUSE_EVENTS 6
#define BUTTON_TYPE_2D_WITH_TEXT (1+128)
#define BUTTON_TYPE_2D_WITH_PICTURE (2+128)
#define BUTTON_TYPE_2D_WITH_TEXT_PICTURE (4+128)
#define BUTTON_TYPE_NO_DRAW (8+128)
#define BUTTON_TYPE_3D_WITH_TEXT (1+16+128)
#define BUTTON_TYPE_3D_WITH_PICTURE (2+16+128)
#define BUTTON_TYPE_3D_WITH_TEXT_PICTURE (4+16+128)
#define TEXT_TYPE_NO_DRAW (1)
#define TEXT_TYPE_WITH_BACKGROUND (128+2)
#define TEXT_TYPE_SYSTEM_6X9 (128)
#define NUMBER_NO_DRAW (1)
#define NUMBER_INTEGER (128)
#define NUMBER_FLOAT (128+2)
#define IMAGE_TYPE_1 (128)
#define PROGRESS_BAR_TYPE_1 (128)
#define BOOKMARK_TYPE_1 (128)
///////////////////////////////////////////////////////////////////
#define BUTTON_STATE_CROSS (1)
#define BUTTON_STATE_CROSS_PRESS (3)
////////////////////////////////////////////////////////////////
// header of control
////////////////////////////////////////////////////////////////
struct HEADER
{
dword ctrl_proc;
dword *ctrl_fd;
dword *ctrl_bk;
dword *child_fd;
dword *child_bk;
dword *parend;
dword ctrl_x;
dword ctrl_y;
dword ctrl_sizex;
dword ctrl_sizey;
dword ctrl_ID;
}__attribute__((packed));
////////////////////////////////////////////////////////////////
// message
////////////////////////////////////////////////////////////////
struct MESSAGE
{
dword type;
dword arg1;
dword arg2;
dword arg3;
}__attribute__((packed));
////////////////////////////////////////////////////////////////
// button
////////////////////////////////////////////////////////////////
struct ControlButton
{
dword ctrl_proc;
dword *ctrl_fd;
dword *ctrl_bk;
dword *child_fd;
dword *child_bk;
dword *parend;
dword ctrl_x;
dword ctrl_y;
dword ctrl_sizex;
dword ctrl_sizey;
dword ctrl_ID;
byte type;
byte flag;
word x;
word y;
word width;
word height;
dword image;
word imageX;
word imageY;
word imageSizeX;
word imageSizeY;
dword transparentColor;
dword text;
word textX;
word textY;
dword textcolor;
dword color1;
dword color2;
word mouseX;
word mouseY;
}__attribute__((packed));
typedef struct InfoForButton
{
byte type; //0
byte flag; //1
word x; //2
word y; //4
word width; //6
word height; //8
dword image; //10
word imageX; //14
word imageY; //16
word imageSizeX; //18
word imageSizeY; //20
dword transparentColor;//24
dword text; //28
word textX; //32
word textY; //34
dword textcolor; //36
dword color1; //40
dword color2;
word mouseX;
word mouseY;
}__attribute__((packed));
////////////////////////////////////////////////////////////////
// scroller
////////////////////////////////////////////////////////////////
struct ControlScroller
{
dword ctrl_proc;
dword *ctrl_fd;
dword *ctrl_bk;
dword *child_fd;
dword *child_bk;
dword *parend;
dword ctrl_x;
dword ctrl_y;
dword ctrl_sizex;
dword ctrl_sizey;
dword ctrl_ID;
byte type;
word x;
word y;
word length;
dword color1;
float size;
float pos;
word buttons_flags;
dword ChildButton1;
dword ChildButton2;
word MouseX;
word MouseY;
}__attribute__((packed));
struct InfoForScroller
{
byte type;
word x;
word y;
word length;
dword color1;
float size;
float pos;
word buttons_flags;
dword ChildButton1;
dword ChildButton2;
word MouseX;
word MouseY;
}__attribute__((packed));
////////////////////////////////////////////////////////////////
// progressbar
////////////////////////////////////////////////////////////////
struct ControlProgressbar
{
dword ctrl_proc;
dword *ctrl_fd;
dword *ctrl_bk;
dword *child_fd;
dword *child_bk;
dword *parend;
dword ctrl_x;
dword ctrl_y;
dword ctrl_sizex;
dword ctrl_sizey;
dword ctrl_ID;
byte type;
byte flag;
dword color1;
dword color2;
dword x;
dword y;
dword sizex;
dword sizey;
float progress;
dword color3;
}__attribute__((packed));
struct InfoForProgressbar
{
byte type;
byte flag;
dword color1;
dword color2;
dword x;
dword y;
dword sizex;
dword sizey;
float progress;
dword color3;
}__attribute__((packed));
////////////////////////////////////////////////////////////////
// image
////////////////////////////////////////////////////////////////
struct ControlImage
{
dword ctrl_proc;
dword *ctrl_fd;
dword *ctrl_bk;
dword *child_fd;
dword *child_bk;
dword *parend;
dword ctrl_x;
dword ctrl_y;
dword ctrl_sizex;
dword ctrl_sizey;
dword ctrl_ID;
byte type;
byte flag;
dword color1;
dword x;
dword y;
dword sizex;
dword sizey;
dword pointer;
}__attribute__((packed));
struct InfoForImage
{
byte type;
byte flag;
dword color1;
dword x;
dword y;
dword sizex;
dword sizey;
dword pointer;
}__attribute__((packed));
////////////////////////////////////////////////////////////////
// text
////////////////////////////////////////////////////////////////
struct ControlText
{
dword ctrl_proc;
dword *ctrl_fd;
dword *ctrl_bk;
dword *child_fd;
dword *child_bk;
dword *parend;
dword ctrl_x;
dword ctrl_y;
dword ctrl_sizex;
dword ctrl_sizey;
dword ctrl_ID;
byte type;
byte flag;
dword color1;
dword x;
dword y;
dword length;
dword text;
dword background_color;
}__attribute__((packed));
struct InfoForText
{
byte type;
byte flag;
dword color1;
dword x;
dword y;
dword length;
dword text;
dword background_color;
}__attribute__((packed));
////////////////////////////////////////////////////////////////
// number
////////////////////////////////////////////////////////////////
struct ControlNumber
{
dword ctrl_proc;
dword *ctrl_fd;
dword *ctrl_bk;
dword *child_fd;
dword *child_bk;
dword *parend;
dword ctrl_x;
dword ctrl_y;
dword ctrl_sizex;
dword ctrl_sizey;
dword ctrl_ID;
byte type;
byte flag;
dword color1;
dword x;
dword y;
float number;
dword format;
}__attribute__((packed));
struct InfoForNumber
{
byte type;
byte flag;
dword color1;
dword x;
dword y;
float number;
dword format;
}__attribute__((packed));
/////////////////////////////////////////////////////////////////
// libGUI functions
/////////////////////////////////////////////////////////////////
void stdcall (*DestroyControl)(void *control);
void stdcall (*SendMessage)(struct HEADER *Parend,struct MESSAGE *Message);
int stdcall (*Version)(void);
void stdcall (*ResizeComponent)(void *Control,int new_sizex,int new_sizey);
void stdcall (*MoveComponent)(void *Control,int new_x,int new_y);
void stdcall (*ActivateTrapForSpecializedMessage)(void *Control);
void* stdcall (*CraeteButton)(struct HEADER *Parend,void *Control);
void* stdcall (*CraeteScroller)(struct HEADER *Parend,void *Control);
void* stdcall (*CraeteBookmark)(struct HEADER *Parend,void *Control);
void* stdcall (*CraeteImage)(struct HEADER *Parend,void *Control);
void* stdcall (*CraeteText)(struct HEADER *Parend,void *Control);
void* stdcall (*CraeteNumber)(struct HEADER *Parend,void *Control);
void* stdcall (*CraeteCheckbox)(struct HEADER *Parend,void *Control);
void* stdcall (*CraeteEditbox)(struct HEADER *Parend,void *Control);
void* stdcall (*CraeteProgressbar)(struct HEADER *Parend,void *Control);

Some files were not shown because too many files have changed in this diff Show More