Files
ace-dent 0cd3b0c5b1 programs/develop: Post-SVN tidy (part 1) (#419)
- Move source code from `trunk` into root directory for each program.
- Update build files and ASM include paths. Add SPDX license header where appropriate.
- Note: Line endings standardised from `CRLF` > `LF`, so best to view diffs with whitespace changes hidden.

(Work towards #75, point 3)

Reviewed-on: KolibriOS/kolibrios#419
Co-authored-by: Andrew <dent.ace@gmail.com>
Co-committed-by: Andrew <dent.ace@gmail.com>
2026-04-11 10:25:59 +00:00

132 lines
5.5 KiB
FASM
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
; SPDX-License-Identifier: NOASSERTION
;
; Text encoded with Code Page 866 - Cyrillic
;Оптимизированный компонент CheckBox (Исходный вариант от Maxxxx32)
;Оптимизирован вывод строки, надписи для CheckBox'a + теперь при проверке не ;происходит подсчет кол-ва символов в строке
;Оптимизация команд.
;21.02.2007 модернизация и поддержка двух разных вариантов с использованием сис цветов и старой схемой
;19.02.2007 общее улучшение кода, уменьшение размера и использование системных цветов для отображения checkbox
;22.08.2006 произведена оптимизация команд, приняты во внимание замечания DIAMOND'а.
;<Lrz> - Теплов Алексей www.lrz.land.ru
;заголовок приложения
use32 ; транслятор, использующий 32 разрядных команды
org 0x0 ; базовый адрес кода, всегда 0x0
db 'MENUET01' ; идентификатор исполняемого файла (8 байт)
dd 0x1 ; версия формата заголовка исполняемого файла
dd start ; адрес, на который система передаёт управление
; после загрузки приложения в память
dd i_end ; размер приложения
dd i_end ; Объем используемой памяти, для стека отведем 0х100 байт и выровним на грницу 4 байта
dd i_end ; расположим позицию стека в области памяти, сразу за телом программы. Вершина стека в диапазоне памяти, указанном выше
dd 0x0,0x0 ; указатель на строку с параметрами.
; если после запуска неравно нулю, приложение было
; запущено с параметрами из командной строки
; указатель на строку, в которую записан путь,
; откуда запущено приложение
;------------------
include '..\..\..\macros.inc'
include 'check.inc' ;включить файл check.inc
; version_ch ;необходимый макрос для включения "старой" версии check_box
version_ch1 ;необходимый макрос для включения new версии check_box1
;Недопустимо включение двух макросво version_ch1 и version_ch - они взамоисключают друг- дргуга.
use_check_box ;используя макросы внести процедуры для рисования чек бокса
;Область кода
align 4
start: ;Точка входа в программу
mov eax,48 ;получить системные цвета
mov ebx,3
mov ecx,sc
mov edx,sizeof.system_colors
mcall
mov eax,40 ;установить маску для ожидаемых событий
mov ebx,0x25 ;система будет реагировать только на сообщение о перерисовке,нажата кнопка, определённая ранее, событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении)
mcall
red_win:
call draw_window ;первоначально необходимо нарисовать окно
still: ;основной обработчик
mov eax,10 ;Ожидать события
mcall ;ожидать событие в течение 2 миллисекунд
cmp al,0x1 ;если изменилось положение окна
jz red_win
cmp al,0x3 ;если нажата кнопка то перейти
jz button
mouse_check_boxes check_boxes,check_boxes_end ;проверка чек бокса
jmp still ;если ничего из перечисленного то снова в цикл
button:
or eax,-1 ;в eax,-1 - 5 ,байтов у нас же только 3 выйти
mcall ;далее выполняется выход из программы
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
draw_window: ;рисование окна приложения
mov eax,12 ;в регистр внести значение = 12
mov ebx,1 ;присвоить 1
mcall
xor eax,eax ;обнулить eax
mov ebx,50*65536+180 ;[координата по оси x]*65536 + [размер по оси x]
mov ecx,30*65536+100 ;[координата по оси y]*65536 + [размер по оси y]
mov edx,[sc.work] ; color of work area RRGGBB,8->color gl
or edx,0xb3000000
mov edi,hed
mcall ;нарисовать окно приложения
draw_check_boxes check_boxes,check_boxes_end ;рисование чекбоксов
mov eax,12 ;Функция 12 - начать/закончить перерисовку окна.
mov ebx,2 ;Подфункция 2 - закончить перерисовку окна.
mcall
ret
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;DATA данные
;Формат данных чек бокса:
;10 - координата чек бокса по х
;30 - координата чек бокса по у
;0 - цвет заливки внутри чек бокса
;0xfffffff - цвет рамки чек бокса если нужно так используются ситемные цвета
;0 - цвет текста надписи если нужно так используются ситемные цвета
;ch_text.1 - указатель на начало строки
;ch_text.e1-ch_text.1 - длина строки
;
align 4
check_boxes:
;ch1 check_box 10,15,0xffffff,0,0,ch_text.1,ch_text.e1-ch_text.1,ch_flag_en
;ch2 check_box 10,30,0xffffff,0,0,ch_text.2,ch_text.e2-ch_text.2
;ch3 check_box 10,45,0xffffff,0,0,ch_text.3,ch_text.e3-ch_text.3
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;DATA данные для check_box1 - использует системные цвета
;Формат данных чек бокса:
;10 - координата чек бокса по х
;30 - координата чек бокса по у
;ch_text.1 - указатель на начало строки
;ch_text.e1-ch_text.1 - длина строки
;
ch1 check_box1 10,15,ch_text.1,ch_text.e1-ch_text.1,ch_flag_en
ch2 check_box1 10,30,ch_text.2,ch_text.e2-ch_text.2
ch3 check_box1 10,45,ch_text.3,ch_text.e3-ch_text.3
check_boxes_end:
ch_text: ;сопровождающий текст для чек боксов
.1 db 'Check_Box #1'
.e1:
.2 db 'Check_Box #2'
.e2:
.3 db 'Check_Box #3'
.e3:
hed db 'Checkbox [21.02.2007]',0 ;заголовок приложения
align 16
sc system_colors
rb 0x100
i_end: ;конец кода