; Copyright (C) KolibriOS team 2025. All rights reserved. ; Distributed under terms of the GNU General Public License ; ; GNU GENERAL PUBLIC LICENSE ; Version 2, June 1991 SETTINGS_WIN_STACK_SIZE = 1024 SETTINGS_WIN_WIDTH = 350 SETTINGS_WIN_HEIGHT = 250 SETTINGS_BTN_WIDTH = 60 SETTINGS_BTN_HEIGHT = 24 OPT_HEIGHT = 10 COL2 = 190 SETTINGS_APPEND_NONE = 0 SETTINGS_APPEND_LF = 1 SETTINGS_APPEND_CRLF = 2 proc show_settings_win cmp [settings_is_win_opened], 1 jne @f mcall SF_SYSTEM, SSF_GET_THREAD_SLOT, [settings_win_pid] xchg eax, ecx mcall SF_SYSTEM, SSF_FOCUS_WINDOW ret @@: mcall SF_CREATE_THREAD, 1, .thread, settings_win_stack + SETTINGS_WIN_STACK_SIZE cmp eax, -1 je @f mov [settings_win_pid], eax mov [settings_is_win_opened], 1 @@: ret .thread: mcall SF_SET_EVENTS_MASK, EVM_MOUSE + EVM_MOUSE_FILTER + EVM_REDRAW + EVM_BUTTON + EVM_KEY call settings_load call .draw_window .loop: mcall SF_WAIT_EVENT dec eax jz .win dec eax jz .key dec eax jz .btn .mouse: invoke edit_box_mouse, ed_port invoke edit_box_mouse, ed_baud invoke edit_box_mouse, ed_bits invoke option_box_mouse, op_append jmp .loop .win: call .draw_window jmp .loop .key: mcall SF_GET_KEY invoke edit_box_key, ed_port invoke edit_box_key, ed_baud invoke edit_box_key, ed_bits jmp .loop .btn: mcall SF_GET_BUTTON cmp ah, BTN_OK jne @f call settings_save @@: and [settings_is_win_opened], 0 mcall SF_TERMINATE_PROCESS .draw_window: mcall SF_REDRAW, SSF_BEGIN_DRAW mov edx, [sc.work] or edx, 0x34000000 mov esi, [sc.work] mov edi, settings_win_name mov ebx, [pi.box.width] shr ebx, 1 add ebx, [pi.box.left] sub ebx, SETTINGS_WIN_WIDTH / 2 shl ebx, 16 add ebx, SETTINGS_WIN_WIDTH mov ecx, [pi.box.height] shr ecx, 1 add ecx, [pi.box.top] sub ecx, SETTINGS_WIN_HEIGHT / 2 shl ecx, 16 add ecx, SETTINGS_WIN_HEIGHT mcall SF_CREATE_WINDOW mcall SF_THREAD_INFO, s_pi, -1 ; prevent drawing if the window is collapsed test [s_pi.wnd_state], 0x04 jnz .end_redraw mov ecx, 0x90000000 or ecx, [sc.work_text] mcall SF_DRAW_TEXT, , , port_conf_lbl add ebx, WIN_MARGIN * 2 + FONT_HEIGHT mcall SF_DRAW_TEXT, , , port_lbl mov word [ed_port.top], bx add ebx, WIN_MARGIN + ED_HEIGHT mcall SF_DRAW_TEXT, , , baud_lbl mov word [ed_baud.top], bx add ebx, WIN_MARGIN + ED_HEIGHT mcall SF_DRAW_TEXT, , , bits_lbl mov word [ed_bits.top], bx mcall SF_DRAW_TEXT, , , tx_text_lbl edit_boxes_set_sys_color settings_win_edits_start, settings_win_edits_end, sc invoke edit_box_draw, ed_port invoke edit_box_draw, ed_baud invoke edit_box_draw, ed_bits option_boxes_set_sys_color sc, op_append invoke option_box_draw, op_append mov ebx, WIN_MARGIN shl 16 add ebx, [s_pi.client_box.width] sub ebx, WIN_MARGIN + 1 mov edx, [s_pi.client_box.height] sub edx, SETTINGS_BTN_HEIGHT + WIN_MARGIN * 2 mov ecx, edx shl ecx, 16 mov cx, dx mov edx, [sc.work_graph] mcall SF_DRAW_LINE mov ebx, [s_pi.client_box.width] sub ebx, (SETTINGS_BTN_WIDTH + WIN_MARGIN) * 2 shl ebx, 16 add ebx, SETTINGS_BTN_WIDTH mov ecx, [s_pi.client_box.height] sub ecx, SETTINGS_BTN_HEIGHT + WIN_MARGIN shl ecx, 16 add ecx, SETTINGS_BTN_HEIGHT mcall SF_DEFINE_BUTTON, , , BTN_OK, [sc.work_button] push ebx ecx add ebx, 24 shl 16 mov bx, word [s_pi.client_box.height] sub bx, SETTINGS_BTN_HEIGHT + WIN_MARGIN - 5 mov ecx, 0x90000000 or ecx, [sc.work_button_text] mcall SF_DRAW_TEXT, , , ok_lbl pop ecx ebx add ebx, (SETTINGS_BTN_WIDTH + WIN_MARGIN) shl 16 mcall SF_DEFINE_BUTTON, , , BTN_CANCEL, [sc.work_button] add ebx, 8 shl 16 mov bx, word [s_pi.client_box.height] sub bx, SETTINGS_BTN_HEIGHT + WIN_MARGIN - 5 mov ecx, 0x90000000 or ecx, [sc.work_button_text] mcall SF_DRAW_TEXT, , , cancel_lbl .end_redraw: mcall SF_REDRAW, SSF_END_DRAW ret endp proc settings_load mov eax, [port_num] mov ecx, 10 mov edi, ed_port_val call int_to_str and byte [edi], 0 mov esi, ed_port_val call strlen mov [ed_port.size], eax mov [ed_port.pos], eax mov eax, [port_conf + SP_CONF.baudrate] mov ecx, 10 mov edi, ed_baud_val call int_to_str and byte [edi], 0 mov esi, ed_baud_val call strlen mov [ed_baud.size], eax mov al, [port_conf + SP_CONF.word_size] add al, '0' mov [ed_bits_val], al mov [ed_bits_val + 1], 0 mov [ed_bits.size], 1 mov al, [text_append] mov ebx, opt_append_none cmp al, SETTINGS_APPEND_NONE je .opt_append_ok mov ebx, opt_append_lf cmp al, SETTINGS_APPEND_LF je .opt_append_ok mov ebx, opt_append_crlf .opt_append_ok: mov [op_append_val], ebx ret endp proc settings_save mov esi, ed_port_val call str_to_uint mov [port_num], ebx mov esi, ed_baud_val call str_to_uint mov [port_conf + SP_CONF.baudrate], ebx mov al, [ed_bits_val] sub al, '0' mov [port_conf + SP_CONF.word_size], al mov eax, [op_append_val] mov bl, SETTINGS_APPEND_NONE cmp eax, opt_append_none je .opt_append_ok mov bl, SETTINGS_APPEND_LF cmp eax, opt_append_lf je .opt_append_ok mov bl, SETTINGS_APPEND_CRLF .opt_append_ok: mov [text_append], bl ret endp iglobal settings_is_win_opened db 0 settings_win_edits_start: ed_port edit_box 70, 100, WIN_MARGIN, 0xffffff, 0x6f9480, \ 0, 0, 0x10000000, 6, ed_port_val, mouse_dd, \ ed_focus + ed_figure_only ed_baud edit_box 70, 100, WIN_MARGIN * 2 + ED_HEIGHT, 0xffffff, 0x6f9480, \ 0, 0, 0x10000000, 6, ed_baud_val, mouse_dd, \ ed_figure_only ed_bits edit_box 40, 100, WIN_MARGIN * 3 + ED_HEIGHT * 2, 0xffffff, 0x6f9480, \ 0, 0, 0x10000000, 1, ed_bits_val, mouse_dd, \ ed_figure_only settings_win_edits_end: opt_append_none option_box op_append_val, COL2, WIN_MARGIN * 2 + FONT_HEIGHT, 6, 12, 0, 0, 0, opt_lbl_nothing, 14 opt_append_lf option_box op_append_val, COL2, WIN_MARGIN * 3 + OPT_HEIGHT+ FONT_HEIGHT, 6, 12, 0, 0, 0, opt_lbl_lf, 9 opt_append_crlf option_box op_append_val, COL2, WIN_MARGIN * 4 + OPT_HEIGHT * 2+ FONT_HEIGHT, 6, 12, 0, 0, 0, opt_lbl_crlf, 11 op_append dd opt_append_none, opt_append_lf, opt_append_crlf, 0 settings_win_name db 'kterm - settings', 0 port_conf_lbl db 'Port settings', 0 tx_text_lbl db 'Transmitted text', 0 port_lbl db 'Port:', 0 baud_lbl db 'Baudrate:', 0 bits_lbl db 'Data bits:', 0 ok_lbl db 'Ok', 0 cancel_lbl db 'Cancel', 0 opt_lbl_nothing db 'Append nothing', 0 opt_lbl_lf db 'Append LF', 0 opt_lbl_crlf db 'Append CRLF', 0 endg uglobal align 4 settings_win_pid dd ? op_append_val dd ? s_pi process_information ed_port_val rb 7 ed_baud_val rb 7 ed_bits_val rb 2 settings_win_stack rb SETTINGS_WIN_STACK_SIZE endg