68,18 → 68,12 |
; Free area ; +68 |
;--------------------------------------------------------------------- |
use32 |
org 0x0 |
|
org 0 |
db 'MENUET01' |
dd 0x01 |
dd START |
dd IM_END |
dd I_END |
dd stacktop |
dd param |
dd path |
dd 1, START, IM_END, I_END, stacktop, param, path |
;--------------------------------------------------------------------- |
include '../../macros.inc' |
include '../../proc32.inc' |
include '../../KOSfuncs.inc' |
include '../../load_lib.mac' |
include '../../develop/libraries/box_lib/trunk/box_lib.mac' |
105,25 → 99,25 |
c_start_x = t_start_x + p_size_y + 10 |
c_start_y = 10 |
|
c_size_x = 40 |
c_size_x = 27 |
c_size_y = 20 |
ed_size_x = 53 |
;--------------------------------------------------------------------- |
x_minimal_size equ 350 |
y_minimal_size equ 250 |
;--------------------------------------------------------------------- |
START: |
mcall 68,11 |
mcall 66,1,1 |
mcall 40,0x27 |
; mcall 40,0x7 |
call get_communication_area |
call get_active_pocess |
call clear_colors_history |
mcall SF_SYS_MISC,SSF_HEAP_INIT |
;mcall SF_KEYBOARD,SSF_SET_INPUT_MODE,1 |
mcall SF_SET_EVENTS_MASK,0x27 |
;-------------------------------------- |
load_libraries l_libs_start,end_l_libs |
test eax,eax |
jnz button.exit_2 |
;-------------------------------------- |
call get_communication_area |
call get_active_pocess |
call clear_colors_history |
xor eax,eax |
mov al,p_size_x |
mov [palette_SIZE_X],eax |
140,7 → 134,7 |
imul ecx,[palette_SIZE_X] |
lea ecx,[ecx*3] |
inc ecx ;reserve for stosd |
mcall 68,12 |
mcall SF_SYS_MISC,SSF_MEM_ALLOC |
mov [palette_area],eax |
;-------------------------------------- |
call create_palette |
149,7 → 143,7 |
imul ecx,[tone_SIZE_X] |
lea ecx,[ecx*3] |
inc ecx ;reserve for stosd |
mcall 68,12 |
mcall SF_SYS_MISC,SSF_MEM_ALLOC |
mov [tone_area],eax |
;-------------------------------------- |
call create_tone |
160,7 → 154,7 |
;--------------------------------------------------------------------- |
align 4 |
still: |
mcall 10 |
mcall SF_WAIT_EVENT |
|
cmp eax,1 |
je red |
178,7 → 172,7 |
;--------------------------------------------------------------------- |
align 4 |
button: |
mcall 17 |
mcall SF_GET_BUTTON |
|
cmp ah, 2 |
je palette_button |
236,40 → 230,39 |
mov ebx,[communication_area] |
mov ecx,procinfo |
; mov eax,[window_x] |
mov eax,[ecx+34] |
mov eax,[ecx+process_information.box.left] |
shl eax,16 |
add eax,[ecx+42] |
add eax,[ecx+process_information.box.width] |
mov [ebx+4],eax |
; mov eax,[window_y] |
mov eax,[ecx+38] |
mov eax,[ecx+process_information.box.top] |
shl eax,16 |
add eax,[ecx+46] |
add eax,[ecx+process_information.box.height] |
mov [ebx+8],eax |
;-------------------------------------- |
align 4 |
.exit_2: |
mcall -1 |
mcall SF_TERMINATE_PROCESS |
;--------------------------------------------------------------------- |
align 4 |
get_window_param: |
mcall 9,procinfo,-1 |
mov eax,[ebx+66] |
mcall SF_THREAD_INFO,procinfo,-1 |
mov eax,[ebx+process_information.client_box.height] |
inc eax |
; mov [window_high],eax |
mov eax,[ebx+62] |
mov eax,[ebx+process_information.client_box.width] |
inc eax |
; mov [window_width],eax |
mov eax,[ebx+70] |
mov eax,dword[ebx+process_information.wnd_state] |
; mov [window_status],eax |
ret |
;--------------------------------------------------------------------- |
align 4 |
get_communication_area: |
xor eax,eax |
mov al,[param] |
movzx eax,byte[param] |
test eax,eax |
jz @f |
mcall 68,22,param,,0x01 |
mcall SF_SYS_MISC,SSF_MEM_OPEN,param,,0x01 |
mov [communication_area],eax |
; movzx ebx,word [eax+2] |
; mov [color_dialog_type],ebx |
289,9 → 282,9 |
;--------------------------------------------------------------------- |
align 4 |
get_active_pocess: |
mcall 9,procinfo,-1 |
mov ecx,[ebx+30] ; PID |
mcall 18,21 |
mcall SF_THREAD_INFO,procinfo,-1 |
mov ecx,[ebx+process_information.PID] |
mcall SF_SYSTEM,SSF_GET_THREAD_SLOT |
mov [active_process],eax ; WINDOW SLOT |
mov ebx,[communication_area] |
test ebx,ebx |
334,7 → 327,7 |
;--------------------------------------------------------------------- |
align 4 |
palette_button: |
mcall 37,1 |
mcall SF_MOUSE_GET,SSF_WINDOW_POSITION |
and eax,0xffff |
sub eax,p_start_y |
imul eax,p_size_x |
351,7 → 344,7 |
;--------------------------------------------------------------------- |
align 4 |
tone_button: |
mcall 37,1 |
mcall SF_MOUSE_GET,SSF_WINDOW_POSITION |
mov ebx,eax |
and eax,0xffff |
shr ebx,16 |
382,12 → 375,18 |
prepare_scrollbars_position_from_color: |
; in: eax = selected color |
movzx ebx,al |
inc bl |
neg bl |
mov [scroll_bar_data_blue.position],ebx |
shr eax,8 |
mov bl,al |
inc bl |
neg bl |
mov [scroll_bar_data_green.position],ebx |
shr eax,8 |
mov bl,al |
inc bl |
neg bl |
mov [scroll_bar_data_red.position],ebx |
ret |
;--------------------------------------------------------------------- |
395,18 → 394,35 |
prepare_color_from_scrollbars_position: |
; out: ebx = selected color |
mov eax,[scroll_bar_data_red.position] |
inc al |
neg al |
movzx ebx,al |
shl ebx,8 |
mov eax,[scroll_bar_data_green.position] |
inc al |
neg al |
mov bl,al |
shl ebx,8 |
mov eax,[scroll_bar_data_blue.position] |
inc al |
neg al |
mov bl,al |
ret |
;--------------------------------------------------------------------- |
align 4 |
key: |
mcall 2 |
mcall SF_GET_KEY |
test word[edit1.flags],10b ;ed_focus |
je still |
stdcall [edit_box_key], edit1 |
stdcall conv_str_to_int, [edit1.text] |
cmp [selected_color],eax |
je still |
mov [selected_color],eax |
call prepare_scrollbars_position_from_color |
;call draw_selected_color |
mcall SF_DRAW_RECT,<c_start_x,c_size_x>,<c_start_y,c_size_y>,[selected_color] |
call draw_scrollbars |
jmp still |
;--------------------------------------------------------------------- |
align 4 |
420,27 → 436,25 |
;-------------------------------------- |
align 4 |
.red: |
push dword scroll_bar_data_red |
call [scrollbar_ver_mouse] |
stdcall [scrollbar_ver_mouse], scroll_bar_data_red |
cmp [scroll_bar_data_red.delta2],0 |
jne @f |
;-------------------------------------- |
align 4 |
.green: |
push dword scroll_bar_data_green |
call [scrollbar_ver_mouse] |
stdcall [scrollbar_ver_mouse], scroll_bar_data_green |
cmp [scroll_bar_data_green.delta2],0 |
jne @f |
;-------------------------------------- |
align 4 |
.blue: |
push dword scroll_bar_data_blue |
call [scrollbar_ver_mouse] |
; cmp [scroll_bar_data_blue.delta2],0 |
; jne @f |
stdcall [scrollbar_ver_mouse], scroll_bar_data_blue |
cmp [scroll_bar_data_blue.delta2],0 |
jne @f |
;-------------------------------------- |
align 4 |
@@: |
stdcall [edit_box_mouse], edit1 |
call prepare_color_from_scrollbars_position |
cmp [selected_color],ebx |
je still |
450,11 → 464,11 |
;--------------------------------------------------------------------- |
align 4 |
draw_selected_color: |
mcall 13,<c_start_x,c_size_x>,<c_start_y,c_size_y>,[selected_color] |
mcall 13,<c_start_x+c_size_x+10,c_size_x>,<c_start_y,c_size_y>,0xffffff |
mov ecx,[selected_color] |
and ecx,0xffffff |
mcall 47,0x00060100,,<c_start_x+c_size_x+13,c_start_y+(c_size_y-6)/2>,0 |
mcall SF_DRAW_RECT,<c_start_x,c_size_x>,<c_start_y,c_size_y>,[selected_color] |
stdcall hex_in_str, sz_0x+2,[selected_color],6 |
mov byte[sz_0x+8],0 |
stdcall [edit_box_set_text],edit1,sz_0x |
stdcall [edit_box_draw],edit1 |
ret |
;--------------------------------------------------------------------- |
align 4 |
465,28 → 479,25 |
;--------------------------------------------------------------------- |
align 4 |
draw_tone: |
mcall 65,[tone_area],<[tone_SIZE_X],[tone_SIZE_Y]>,<t_start_x,t_start_y>,24 |
mcall SF_PUT_IMAGE_EXT,[tone_area],<[tone_SIZE_X],[tone_SIZE_Y]>,<t_start_x,t_start_y>,24 |
ret |
;--------------------------------------------------------------------- |
align 4 |
draw_scrollbars: |
push dword scroll_bar_data_red |
call [scrollbar_ver_draw] |
push dword scroll_bar_data_green |
call [scrollbar_ver_draw] |
push dword scroll_bar_data_blue |
call [scrollbar_ver_draw] |
stdcall [scrollbar_ver_draw], scroll_bar_data_red |
stdcall [scrollbar_ver_draw], scroll_bar_data_green |
stdcall [scrollbar_ver_draw], scroll_bar_data_blue |
ret |
;--------------------------------------------------------------------- |
align 4 |
draw_history_frame: |
mov [frame_data.x],dword (c_start_x+c_size_x*2+10*2)*65536+80 |
mov [frame_data.x],dword (c_start_x+c_size_x+ed_size_x+10*2)*65536+80 |
mov [frame_data.y],dword (p_start_y+5)*65536+(p_size_y-5) |
|
mov [frame_data.draw_text_flag],dword 1 |
|
mov [frame_data.text_pointer],dword history_text |
push dword frame_data |
call [Frame_draw] |
stdcall [Frame_draw], frame_data |
ret |
;--------------------------------------------------------------------- |
align 4 |
493,9 → 504,9 |
draw_button_row: |
mov edx,0x60000000 + 30 ; BUTTON ROW |
; mov ebx,220*65536+14 |
mov ebx,(c_start_x+c_size_x*2+10*3)*65536+14 |
mov ebx,(c_start_x+c_size_x+ed_size_x+10*3)*65536+14 |
mov ecx,25*65536+14 |
mov eax,8 |
mov eax,SF_DEFINE_BUTTON |
;----------------------------------- |
align 4 |
.newb: |
508,10 → 519,12 |
;--------------------------------------------------------------------- |
align 4 |
draw_color_value: |
mov ebx,(c_start_x+c_size_x*3+10)*65536+(c_size_x-1) |
movzx ebx,word[frame_data.x_start] |
shl ebx,16 |
add ebx,(22 shl 16)+39 |
mov ecx,28*65536+11 |
mov edx,0xffffff |
mov eax,13 |
mov eax,SF_DRAW_RECT |
mov edi,10 |
mov esi,[communication_area] |
add esi,28 |
520,14 → 533,13 |
@@: |
mcall |
pusha |
mov edx,ebx |
add edx,2 shl 16 |
lea edx,[ebx+(2 shl 16)] |
shr ecx,16 |
mov dx,cx |
add dx,2 |
mov ecx,[esi] |
and ecx,0xffffff |
mcall 47,0x00060100,,,0 |
mcall SF_DRAW_NUMBER,0x00060100,,,0 |
popa |
|
add ecx,24*65536 |
543,9 → 555,9 |
mov esi,[communication_area] |
add esi,28 |
; mov ebx,220*65536+14 |
mov ebx,(c_start_x+c_size_x*2+10*3)*65536+14 |
mov ebx,(c_start_x+c_size_x+ed_size_x+10*3)*65536+14 |
mov ecx,27*65536+14 |
mov eax,13 |
mov eax,SF_DRAW_RECT |
mov [frame_data.draw_text_flag],dword 0 |
;-------------------------------------- |
align 4 |
563,8 → 575,7 |
mov [frame_data.x],ebx |
mov [frame_data.y],ecx |
|
push dword frame_data |
call [Frame_draw] |
stdcall [Frame_draw], frame_data |
|
pop ecx ebx |
|
578,18 → 589,18 |
;---------------------------------------------------------------------- |
align 4 |
draw_window: |
mcall 12,1 |
; mcall 0, <w_start_x,w_size_x>, <w_start_y,w_size_y>, 0x33AABBCC,,title |
mcall SF_REDRAW,SSF_BEGIN_DRAW |
; mcall SF_CREATE_WINDOW, <w_start_x,w_size_x>, <w_start_y,w_size_y>, 0x33AABBCC,,title |
xor esi,esi |
mcall 0,[window_x],[window_y], 0x34EEEeee,,title |
mcall 8,<p_start_x,[palette_SIZE_X]>,<p_start_y,[palette_SIZE_Y]>,0x60000002 |
mcall SF_CREATE_WINDOW,[window_x],[window_y], 0x34EEEeee,,title |
mcall SF_DEFINE_BUTTON,<p_start_x,[palette_SIZE_X]>,<p_start_y,[palette_SIZE_Y]>,0x60000002 |
mcall ,<t_start_x,[tone_SIZE_X]>,<t_start_y,[tone_SIZE_Y]>,0x60000003 |
mcall ,<296,80>,<280,22>,4,0x37A4D4 |
mcall ,<402,80>, ,1 |
mcall 4,<332,289>,0x802C7B9E,OK_Cancel |
mcall SF_DRAW_TEXT,<332,289>,0x802C7B9E,OK_Cancel |
mcall ,<331,288>,0x80FFFfff |
xor ebp,ebp |
mcall 65,[palette_area],<[palette_SIZE_X],[palette_SIZE_Y]>,<p_start_x,p_start_y>,24 |
mcall SF_PUT_IMAGE_EXT,[palette_area],<[palette_SIZE_X],[palette_SIZE_Y]>,<p_start_x,p_start_y>,24 |
call draw_tone |
call draw_selected_color |
xor eax,eax |
602,9 → 613,114 |
call draw_button_row |
call draw_colours |
call draw_color_value |
mcall 12,2 |
mcall SF_REDRAW,SSF_END_DRAW |
ret |
;--------------------------------------------------------------------- |
align 4 |
proc hex_in_str, buf:dword,val:dword,zif:dword |
pushad |
mov edi,[buf] |
mov ecx,[zif] |
add edi,ecx |
dec edi |
mov ebx,[val] |
|
.cycle: |
mov al,bl |
and al,0xf |
cmp al,10 |
jl @f |
add al,'A'-'0'-10 |
@@: |
add al,'0' |
mov byte[edi],al |
dec edi |
shr ebx,4 |
loop .cycle |
popad |
ret |
endp |
;--------------------------------------------------------------------- |
;input: |
; buf - указатель на строку, число должно быть в 10 или 16 ричном виде |
;output: |
; eax - число |
align 4 |
proc conv_str_to_int uses ebx ecx esi, buf:dword |
xor eax,eax |
xor ebx,ebx |
mov esi,[buf] |
|
;на случай если перед числом находятся пробелы |
@@: |
cmp byte[esi],' ' |
jne @f |
inc esi |
jmp @b |
@@: |
|
;определение отрицательных чисел |
xor ecx,ecx |
inc ecx |
cmp byte[esi],'-' |
jne @f |
dec ecx |
inc esi |
@@: |
|
cmp word[esi],'0x' |
je .load_digit_16 |
|
.load_digit_10: ;считывание 10-тичных цифр |
mov bl,byte[esi] |
cmp bl,'0' |
jl @f |
cmp bl,'9' |
jg @f |
sub bl,'0' |
imul eax,10 |
add eax,ebx |
inc esi |
jmp .load_digit_10 |
jmp @f |
|
.load_digit_16: ;считывание 16-ричных цифр |
add esi,2 |
.cycle_16: |
mov bl,byte[esi] |
cmp bl,'0' |
jl @f |
cmp bl,'f' |
jg @f |
cmp bl,'9' |
jle .us1 |
cmp bl,'A' |
jl @f ;отсеиваем символы >'9' и <'A' |
.us1: ;составное условие |
cmp bl,'F' |
jle .us2 |
cmp bl,'a' |
jl @f ;отсеиваем символы >'F' и <'a' |
sub bl,32 ;переводим символы в верхний регистр, для упрощения их последущей обработки |
.us2: ;составное условие |
sub bl,'0' |
cmp bl,9 |
jle .cor1 |
sub bl,7 ;convert 'A' to '10' |
.cor1: |
shl eax,4 |
add eax,ebx |
inc esi |
jmp .cycle_16 |
@@: |
cmp ecx,0 ;если число отрицательное |
jne @f |
sub ecx,eax |
mov eax,ecx |
@@: |
ret |
endp |
;--------------------------------------------------------------------- |
include 'palette.inc' |
;--------------------------------------------------------------------- |
include 'tone.inc' |