programs/media: Post-SVN tidy (#417)
- 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: #417 Reviewed-by: Mikhail Frolov <mixa.frolov2003@gmail.com> Reviewed-by: Burer <burer@noreply.localhost> Co-authored-by: Andrew <dent.ace@gmail.com> Co-committed-by: Andrew <dent.ace@gmail.com>
@@ -155,10 +155,10 @@ extra_files = {
|
||||
{"kolibrios/3D/blocks/models/", "../programs/bcc32/games/blocks/models/*"},
|
||||
{"kolibrios/3D/md2view/", "common/3d/md2view/*"},
|
||||
{"kolibrios/3D/md2view/md2_model/", "common/3d/md2view/md2_model/*"},
|
||||
{"kolibrios/3D/voxel_editor/VOX_EDITOR.INI", SRC_PROGS .. "/media/voxel_editor/trunk/vox_editor.ini"},
|
||||
{"kolibrios/3D/voxel_editor/HOUSE1.VOX", SRC_PROGS .. "/media/voxel_editor/trunk/house1.vox"},
|
||||
{"kolibrios/3D/voxel_editor/HOUSE2.VOX", SRC_PROGS .. "/media/voxel_editor/trunk/house2.vox"},
|
||||
{"kolibrios/3D/voxel_editor/SQUIRREL.VOX", SRC_PROGS .. "/media/voxel_editor/trunk/squirrel.vox"},
|
||||
{"kolibrios/3D/voxel_editor/VOX_EDITOR.INI", SRC_PROGS .. "/media/voxel_editor/vox_editor.ini"},
|
||||
{"kolibrios/3D/voxel_editor/HOUSE1.VOX", SRC_PROGS .. "/media/voxel_editor/house1.vox"},
|
||||
{"kolibrios/3D/voxel_editor/HOUSE2.VOX", SRC_PROGS .. "/media/voxel_editor/house2.vox"},
|
||||
{"kolibrios/3D/voxel_editor/SQUIRREL.VOX", SRC_PROGS .. "/media/voxel_editor/squirrel.vox"},
|
||||
{"kolibrios/3D/voxel_utilites/VOX_MOVER.INI" , SRC_PROGS .. "/media/voxel_editor/utilites/vox_mover.ini"},
|
||||
{"kolibrios/3D/FONT8X9.BMP", SRC_PROGS .. "/fs/kfar/trunk/font8x9.bmp"},
|
||||
{"kolibrios/3D/TOOLB_1.PNG", SRC_PROGS .. "/develop/libraries/TinyGL/asm_fork/examples/toolb_1.png"},
|
||||
@@ -529,12 +529,12 @@ tup.append_table(img_files, {
|
||||
{"MEDIA/FILLSCR", VAR_PROGS .. "/media/FillScr/fillscr"},
|
||||
{"MEDIA/KIV", VAR_PROGS .. "/media/kiv/kiv"},
|
||||
{"MEDIA/LISTPLAY", VAR_PROGS .. "/media/listplay/listplay"},
|
||||
{"MEDIA/MIDAMP", VAR_PROGS .. "/media/midamp/trunk/midamp"},
|
||||
{"MEDIA/MIDAMP", VAR_PROGS .. "/media/midamp/midamp"},
|
||||
{"MEDIA/MP3INFO", VAR_PROGS .. "/media/mp3info/mp3info"},
|
||||
{"MEDIA/PALITRA", VAR_PROGS .. "/media/palitra/trunk/palitra"},
|
||||
{"MEDIA/PALITRA", VAR_PROGS .. "/media/palitra/palitra"},
|
||||
{"MEDIA/PIANO", VAR_PROGS .. "/media/piano/piano"},
|
||||
{"MEDIA/PIANO.MAP", VAR_PROGS .. "/media/piano/piano.map"},
|
||||
{"MEDIA/STARTMUS", VAR_PROGS .. "/media/startmus/trunk/STARTMUS"},
|
||||
{"MEDIA/STARTMUS", VAR_PROGS .. "/media/startmus/STARTMUS"},
|
||||
{"NETWORK/PING", VAR_PROGS .. "/network/ping/ping"},
|
||||
{"NETWORK/NETCFG", VAR_PROGS .. "/network/netcfg/netcfg"},
|
||||
{"NETWORK/NETSTAT", VAR_PROGS .. "/network/netstat/netstat"},
|
||||
@@ -604,7 +604,7 @@ tup.append_table(extra_files, {
|
||||
{"kolibrios/3D/info3ds/INFO3DS", VAR_PROGS .. "/develop/info3ds/info3ds"},
|
||||
{"kolibrios/3D/textures1", VAR_PROGS .. "/develop/libraries/TinyGL/asm_fork/examples/textures1"},
|
||||
{"kolibrios/3D/info3ds/INFO3DS_U", VAR_PROGS .. "/develop/info3ds/info3ds_u"},
|
||||
{"kolibrios/3D/voxel_editor/VOXEL_EDITOR", VAR_PROGS .. "/media/voxel_editor/trunk/voxel_editor"},
|
||||
{"kolibrios/3D/voxel_editor/VOXEL_EDITOR", VAR_PROGS .. "/media/voxel_editor/voxel_editor"},
|
||||
{"kolibrios/3D/voxel_utilites/VOX_CREATOR" , VAR_PROGS .. "/media/voxel_editor/utilites/vox_creator"},
|
||||
{"kolibrios/3D/voxel_utilites/VOX_MOVER" , VAR_PROGS .. "/media/voxel_editor/utilites/vox_mover"},
|
||||
{"kolibrios/3D/voxel_utilites/VOX_TGL" , VAR_PROGS .. "/media/voxel_editor/utilites/vox_tgl"},
|
||||
|
||||
@@ -164,17 +164,16 @@ echo Building media
|
||||
echo *
|
||||
rem media\ac97snd\trunk\ac97snd.asm ac97snd
|
||||
fasm media\animage\animage.asm %BIN%\animage
|
||||
fasm media\cdp\trunk\cdp.asm %BIN%\cdp
|
||||
fasm media\gifview\trunk\gifview.asm %BIN%\gifview
|
||||
fasm media\iconedit\trunk\iconedit.asm %BIN%\iconedit
|
||||
fasm media\jpegview\trunk\jpegview.asm %BIN%\jpegview
|
||||
fasm media\midamp\trunk\midamp.asm %BIN%\midamp
|
||||
fasm media\midiplay\trunk\midiplay.asm %BIN%\midiplay
|
||||
fasm media\mixer\trunk\mixer.asm %BIN%\mixer
|
||||
|
||||
fasm media\mv\trunk\mv.asm %BIN%\mv
|
||||
fasm media\pic4\trunk\pic4.asm %BIN%\pic4
|
||||
fasm media\sb\trunk\sb.asm %BIN%\sb
|
||||
rem fasm media\cdp\trunk\cdp.asm %BIN%\cdp
|
||||
rem fasm media\gifview\trunk\gifview.asm %BIN%\gifview
|
||||
rem fasm media\iconedit\trunk\iconedit.asm %BIN%\iconedit
|
||||
rem fasm media\jpegview\trunk\jpegview.asm %BIN%\jpegview
|
||||
fasm media\midamp\midamp.asm %BIN%\midamp
|
||||
fasm media\midiplay\midiplay.asm %BIN%\midiplay
|
||||
rem fasm media\mixer\trunk\mixer.asm %BIN%\mixer
|
||||
rem fasm media\mv\trunk\mv.asm %BIN%\mv
|
||||
fasm media\pic4\pic4.asm %BIN%\pic4
|
||||
rem fasm media\sb\trunk\sb.asm %BIN%\sb
|
||||
fasm media\scrshoot\scrshoot.asm %BIN%\scrshoot
|
||||
|
||||
echo *
|
||||
@@ -234,7 +233,7 @@ echo __nightbuild fix yes >> config.inc
|
||||
fasm media\kiv\kiv.asm %BIN%\nightbuild\kiv
|
||||
fasm media\scrshoot\scrshoot.asm %BIN%\nightbuild\scrshoot
|
||||
fasm media\animage\animage.asm %BIN%\nightbuild\animage
|
||||
fasm media\midamp\trunk\midamp.asm %BIN%\nightbuild\midamp
|
||||
fasm media\midamp\midamp.asm %BIN%\nightbuild\midamp
|
||||
fasm develop\heed\trunk\heed.asm %BIN%\nightbuild\heed
|
||||
fasm develop\tinypad\trunk\tinypad.asm %BIN%\nightbuild\tinypad
|
||||
fasm system\skincfg\skincfg.asm %BIN%\nightbuild\skincfg
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
if not exist bin mkdir bin
|
||||
if not exist bin\font6x9.bmp @copy ..\..\..\fs\kfar\trunk\font6x9.bmp bin\font6x9.bmp
|
||||
if not exist bin\font6x9.bmp @copy ..\..\fs\kfar\trunk\font6x9.bmp bin\font6x9.bmp
|
||||
@copy *.png bin\*.png
|
||||
@copy *.txt bin\*.txt
|
||||
@fasm.exe -m 16384 log_el.asm bin\log_el.kex
|
||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 192 B After Width: | Height: | Size: 192 B |
|
Before Width: | Height: | Size: 670 B After Width: | Height: | Size: 670 B |
|
Before Width: | Height: | Size: 960 B After Width: | Height: | Size: 960 B |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
@@ -1,5 +1,5 @@
|
||||
if tup.getconfig("NO_FASM") ~= "" then return end
|
||||
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
|
||||
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
|
||||
tup.include(HELPERDIR .. "/use_fasm.lua")
|
||||
add_include(tup.getvariantdir())
|
||||
|
||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 644 B After Width: | Height: | Size: 644 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
@@ -1,5 +1,5 @@
|
||||
if tup.getconfig("NO_FASM") ~= "" then return end
|
||||
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
|
||||
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
|
||||
tup.include(HELPERDIR .. "/use_fasm.lua")
|
||||
add_include(tup.getvariantdir())
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
; SPDX-License-Identifier: NOASSERTION
|
||||
;
|
||||
|
||||
;
|
||||
; Ok, this is the sceleton that MENUET 0.01 understands.
|
||||
; Do not change the header bits for now. Compile with nasm.
|
||||
;
|
||||
|
||||
include '..\..\..\macros.inc'
|
||||
include '..\..\macros.inc'
|
||||
|
||||
use32
|
||||
org 0x0
|
||||
@@ -295,6 +298,3 @@ errorlen2:
|
||||
base db 0x0
|
||||
|
||||
I_END:
|
||||
|
||||
|
||||
|
||||
@@ -1,331 +1,337 @@
|
||||
;*********************************
|
||||
;* *
|
||||
;* PAINT 0.02 для MenuetOS *
|
||||
;* *
|
||||
;* Компилировать FASM'ом *
|
||||
;* *
|
||||
;*********************************
|
||||
|
||||
;******************************************************************************
|
||||
; Эту программу не нужно серьезно рассматривать - это всего лишь пример,
|
||||
; в котором показано, как работать с некоторыми системными функциями МеОС,
|
||||
; но никак не нормальный графический редактор. Код программы ОЧЕНЬ простой,
|
||||
; и она предназначена для тех, кто только начинает изучать ассемблер,
|
||||
; поэтому я стремился сделать его как можно более понятным.
|
||||
; Тем не менее, код довольно неплохо оптимизирован, хотя это немного
|
||||
; может затруднить его понимание. Я постарался тщательно прокомментировать
|
||||
; сложные места. Кстати, идея программы принадлежит не мне, а Sniper'у, для
|
||||
; которого вобщем-то все и писалось.
|
||||
; Удачи в изучении асма!
|
||||
; Иван Поддубный, ivan-yar@bk.ru
|
||||
;******************************************************************************
|
||||
|
||||
; Подключаем необходимые макросы
|
||||
include '../../../macros.inc'
|
||||
|
||||
;******************************************************************************
|
||||
|
||||
; НАЧАЛО ПРОГРАММЫ
|
||||
use32
|
||||
org 0x0
|
||||
db 'MENUET01' ; 8 byte id
|
||||
dd 0x01 ; title version
|
||||
dd START ; start of code
|
||||
dd I_END ; size of image
|
||||
dd E_END ; memory for app
|
||||
dd E_END ; esp
|
||||
dd 0x0,0x0 ; I_Param , I_Icon
|
||||
|
||||
; ОБЛАСТЬ КОДА
|
||||
START:
|
||||
mov eax,40 ; сообщим системе, какие события будем обрабатывать
|
||||
mov ebx,0100101b ; маска событий - перерисовка (1) + кнопка (3) + мышь (6
|
||||
int 0x40 ; эта команда вызывает системную функцию
|
||||
|
||||
mov [workarea.cx],5 ; координаты рабочей (клиентской) области
|
||||
mov [workarea.cy],30 ; для рисования
|
||||
|
||||
red:
|
||||
call draw_window ; вызываем процедуру отрисовки окна
|
||||
|
||||
still: ; ГЛАВНЫЙ ЦИКЛ ПРОГРАММЫ - ЦИКЛ ОБРАБОТКИ СООБЩЕНИЙ
|
||||
|
||||
mov eax,10 ; функция 10 - ждать события; программа останавливается на
|
||||
int 0x40 ; следующая команда не будет выполнена до тех пор, пока
|
||||
; не произойдёт событие
|
||||
|
||||
; теперь регистр eax содержит номер события
|
||||
; поочередно сравним его со всеми возможными значениями, чтобы вызвать
|
||||
; нужный обработчик
|
||||
|
||||
cmp eax,1 ; перерисовать окно ?
|
||||
je red ; если регистр eax равен единице, то переходим на метку red
|
||||
cmp eax,3 ; нажата кнопка ?
|
||||
je button
|
||||
cmp eax,6 ; мышь?
|
||||
je mouse
|
||||
|
||||
jmp still ; если произошло событие, которое мы не обрабатываем,
|
||||
; просто возвращаемся к началу цикла, хотя такого быть
|
||||
; не должно! Т.е. если эту команду отсюда убрать, то
|
||||
; ничего страшного не случится.
|
||||
|
||||
;******************************************************************************
|
||||
|
||||
button: ; обработчик нажатия кнопки в окне программы
|
||||
mov eax,17 ; функция N17 - получить идентификатор нажатой кнопки
|
||||
int 0x40
|
||||
|
||||
; теперь в регистре ah содержится идентификатор.
|
||||
|
||||
shr eax,8 ; ah -> al (сдвиг на 8 бит вправо)
|
||||
|
||||
dec al ; идентификатор_кнопки--;
|
||||
jnz .noclose ; если результат предыдущей команды равен нулю, закрываемся
|
||||
; иначе - идём на метку noclose
|
||||
|
||||
or eax,-1 ; выход из программы
|
||||
int 0x40
|
||||
|
||||
.noclose:
|
||||
; если мы сюда попали, значит идентификатор кнопки не был равен нулю...
|
||||
; теперь у нас в eax содержится (номер цветной кнопки - 1),
|
||||
; т.е или 1, или 2, ... ,или 5
|
||||
|
||||
; уменьшим на 1:
|
||||
dec eax
|
||||
|
||||
; вот эта вот команда извлекает в eax двойное слово по адресу colors+eax*4
|
||||
; где colors - смещение метки colors, после которой идет последовательность
|
||||
; цветов, eax*4 - номер цвета, умноженный на 4, т.к. на один цвет нужно
|
||||
; четыре байта.
|
||||
mov eax,[colors+eax*4]
|
||||
|
||||
; теперь мы установим цвет, содержащийся в регистре eax как основной:
|
||||
mov [active_color],eax
|
||||
|
||||
; ну вот, собственно, и всё, что от нас требовалось ;)
|
||||
; вернёмся к началу цикла обработки событий
|
||||
jmp still
|
||||
|
||||
;******************************************************************************
|
||||
|
||||
mouse: ; обработчик мыши
|
||||
mov eax,37 ; сначала получим текущие координаты мыши
|
||||
mov ebx,1
|
||||
int 0x40
|
||||
|
||||
mov ebx,eax ; преобразуем их
|
||||
shr eax,16 ; eax=x;
|
||||
and ebx,0xffff ; ebx=y;
|
||||
|
||||
cmp ebx,22
|
||||
jb save_canvas
|
||||
|
||||
sub eax,[workarea.cx] ; x-=[workarea.cx]
|
||||
cmp eax,0 ; если мышь левее клиентской области,
|
||||
jle .not_pressed ; ничего не рисуем
|
||||
cmp eax,[workarea.sx] ; если мышь правее...
|
||||
jae .not_pressed
|
||||
|
||||
sub ebx,[workarea.cy]
|
||||
cmp ebx,0 ; ...выше...
|
||||
jle .not_pressed
|
||||
cmp ebx,[workarea.sy] ; ...ниже...
|
||||
jae .not_pressed
|
||||
|
||||
; какие кнопки нажаты?
|
||||
mov eax,37
|
||||
mov ebx,2
|
||||
int 0x40
|
||||
|
||||
; если левая кнопка (т.е. eax = 1), те пойдём дальше
|
||||
cmp eax,1
|
||||
je .leftbtn
|
||||
|
||||
.not_pressed:
|
||||
; Левая кнопка не нажата, запомним текущие координаты и будем ждать события
|
||||
mov [mouse_pressed],0 ; мышь не нажата
|
||||
mov eax,37 ; получим координаты
|
||||
mov ebx,1
|
||||
int 0x40
|
||||
mov ebx,eax
|
||||
shr eax,16
|
||||
and ebx,0xffff
|
||||
mov [old_x],eax ; запомним их
|
||||
mov [old_y],ebx
|
||||
jmp still
|
||||
|
||||
.leftbtn:
|
||||
; Левая кнопка нажата, надо это записать!
|
||||
mov [mouse_pressed],1
|
||||
|
||||
; Получим координаты курсора мыши (относительно окна)
|
||||
mcall 37,1 ; получить состояние мыши
|
||||
|
||||
; Переделаем их так, чтобы они были в разных регистрах, т.е. eax и ebx
|
||||
mov ebx,eax
|
||||
shr eax,16
|
||||
and ebx,0xffff
|
||||
|
||||
; Подготовим параметры для функции рисования линии
|
||||
mov ecx,[old_x] ; для начала загрузим старые координаты
|
||||
mov edx,[old_y]
|
||||
mov [old_x],eax ; теперь сохраним текущие в старые
|
||||
mov [old_y],ebx
|
||||
shl ecx,16 ; в верхнее слово начальные (текущие) координаты
|
||||
shl edx,16
|
||||
add eax,ecx ; а в нижнее слово конечные, т.е. старые
|
||||
add ebx,edx
|
||||
|
||||
mov ecx,ebx ; поменяем регистры так, как эту нужно 38 функции
|
||||
mov ebx,eax
|
||||
mov eax,38 ; номер функции в eax
|
||||
mov edx,[active_color] ; в edx цвет
|
||||
int 0x40
|
||||
|
||||
; - попробуйте поставить другие значения (00090001)
|
||||
mov edi,0x00010001 ; чтобы линия не была слишком тонкой,
|
||||
add ebx,edi ; нарисуем рядом еще 3!
|
||||
int 0x40
|
||||
add ecx,edi
|
||||
int 0x40
|
||||
sub ebx,edi
|
||||
int 0x40
|
||||
|
||||
sub ebx,edi ; ну а чтобы смотрелось совсем круто,
|
||||
int 0x40 ; дорисуем еще 5!
|
||||
sub ecx,edi
|
||||
int 0x40
|
||||
sub ecx,edi
|
||||
int 0x40
|
||||
add ebx,edi
|
||||
int 0x40
|
||||
add ebx,edi
|
||||
int 0x40
|
||||
|
||||
jmp still
|
||||
|
||||
;******************************************************************************
|
||||
|
||||
save_canvas:
|
||||
mov eax,[proc_info.box.width]
|
||||
add eax,[workarea.cx]
|
||||
mov ebx,[proc_info.box.height]
|
||||
add ebx,[workarea.cy]
|
||||
|
||||
jmp still
|
||||
|
||||
;******************************************************************************
|
||||
|
||||
; *********************************************
|
||||
; ******* ОПРЕДЕЛЕНИЕ И ОТРИСОВКА ОКНА *******
|
||||
; *********************************************
|
||||
|
||||
draw_window:
|
||||
|
||||
mcall 48,3,sc,sizeof.system_colors ; ПОДГРУЖАЕМ СИСТЕМНЫЕ ЦВЕТА
|
||||
mcall 12, 1 ; начало отрисовки окна
|
||||
mov edx, [sc.work]
|
||||
or edx, 0x33000000
|
||||
mcall 0, (100 shl 16)+400, (100 shl 16)+300, , , title ; рисуем окно
|
||||
mcall 12, 1
|
||||
|
||||
mcall 9,proc_info,-1 ; получим информацию о своем потоке
|
||||
|
||||
mov eax,[proc_info.box.width] ; настроим размер рабочей области
|
||||
sub eax,20 ; (х размер окна - 20)
|
||||
mov [workarea.sx],eax
|
||||
mov eax,[proc_info.box.height]
|
||||
sub eax,63 ; (у размер - 63)
|
||||
mov [workarea.sy],eax
|
||||
|
||||
cmp [proc_info.box.height],80
|
||||
jb .finish
|
||||
|
||||
mov eax, 8
|
||||
mov edx, 1
|
||||
; создаём кнопки выбора цвета:
|
||||
mov ebx,10*65536+15 ; начальная x координата и размер
|
||||
mov ecx, 7*65536+15 ; начальная y координата & size
|
||||
.new_button:
|
||||
inc edx ; идентификатор++;
|
||||
mov esi,[btn_colors-8+edx*4] ; цвет кнопки
|
||||
int 0x40 ; ставим кнопку
|
||||
add ebx,18*65536 ; следующая кнопка правее на 12
|
||||
cmp edx,9 ; сравниваем edx (идентификатор) с 9
|
||||
jbe .new_button ; если меньше или равно -> ещё одну кпоку
|
||||
|
||||
mov eax,13 ; чистим "холст" - клиентскую область
|
||||
mov ebx,[workarea.cx]
|
||||
mov ecx,[workarea.cy]
|
||||
shl ebx,16
|
||||
shl ecx,16
|
||||
add ebx,[workarea.sx]
|
||||
add ecx,[workarea.sy]
|
||||
mov edx,0xffffff
|
||||
mcall 13
|
||||
|
||||
.finish:
|
||||
ret
|
||||
|
||||
;******************************************************************************
|
||||
; начало области инициализированных данных
|
||||
; если кто ещё не знает, что значит "инициализированные", то поясняю:
|
||||
; это те данные, которым присвоено начальное значение
|
||||
|
||||
;data
|
||||
|
||||
title db 'Simple Paint v0.3',0
|
||||
|
||||
mouse_pressed db 0 ; показывает, нажата ли была мышь в предыдущий момент
|
||||
|
||||
; цвета кнопок
|
||||
btn_colors:
|
||||
dd 0xdddddd ; white
|
||||
dd 0x444444 ; black
|
||||
dd 0x00dd00 ; green
|
||||
dd 0x0000dd ; blue
|
||||
dd 0xdd0000 ; red
|
||||
dd 0xdd00dd ; magenta
|
||||
dd 0xdddd00 ; yellow
|
||||
dd 0x00dddd ; cyan
|
||||
dd 0x559955 ; warm green
|
||||
|
||||
; цвета кисти (в том же порядке, что и цвета кнопок)
|
||||
colors:
|
||||
dd 0xffffff ; белый
|
||||
dd 0x000000 ; черный
|
||||
dd 0x00ff00 ; зеленый
|
||||
dd 0x0000ff ; синий
|
||||
dd 0xff0000 ; красный
|
||||
dd 0xff00ff ; пурпурный
|
||||
dd 0xffff00 ; желтый
|
||||
dd 0x00ffff ; голубой
|
||||
dd 0x77bb77 ; теплый зеленый
|
||||
|
||||
;******************************************************************************
|
||||
; а вот тут начинается область НЕинициализированных данных, т.е.
|
||||
; здесь данным значения не присвоены. В отличие от иниц., не увеличивают размер
|
||||
; файла
|
||||
|
||||
I_END:
|
||||
|
||||
active_color dd ? ; активный цвет
|
||||
|
||||
old_x dd ? ; старые координаты мыши
|
||||
old_y dd ?
|
||||
|
||||
workarea: ; координаты и размеры клиентской области
|
||||
.cx dd ? ; c - коодинаты
|
||||
.cy dd ?
|
||||
.sx dd ? ; s - размеры
|
||||
.sy dd ?
|
||||
|
||||
sc system_colors ; системные цвета
|
||||
proc_info process_information ; информация о процессе
|
||||
|
||||
restflag dd ?
|
||||
canvas rb 800*600*3
|
||||
|
||||
E_END:
|
||||
; SPDX-License-Identifier: NOASSERTION
|
||||
;
|
||||
|
||||
; Text encoded with Code Page 866 - Cyrillic
|
||||
|
||||
|
||||
;*********************************
|
||||
;* *
|
||||
;* PAINT 0.02 для MenuetOS *
|
||||
;* *
|
||||
;* Компилировать FASM'ом *
|
||||
;* *
|
||||
;*********************************
|
||||
|
||||
;******************************************************************************
|
||||
; Эту программу не нужно серьезно рассматривать - это всего лишь пример,
|
||||
; в котором показано, как работать с некоторыми системными функциями МеОС,
|
||||
; но никак не нормальный графический редактор. Код программы ОЧЕНЬ простой,
|
||||
; и она предназначена для тех, кто только начинает изучать ассемблер,
|
||||
; поэтому я стремился сделать его как можно более понятным.
|
||||
; Тем не менее, код довольно неплохо оптимизирован, хотя это немного
|
||||
; может затруднить его понимание. Я постарался тщательно прокомментировать
|
||||
; сложные места. Кстати, идея программы принадлежит не мне, а Sniper'у, для
|
||||
; которого вобщем-то все и писалось.
|
||||
; Удачи в изучении асма!
|
||||
; Иван Поддубный, ivan-yar@bk.ru
|
||||
;******************************************************************************
|
||||
|
||||
; Подключаем необходимые макросы
|
||||
include '../../macros.inc'
|
||||
|
||||
;******************************************************************************
|
||||
|
||||
; НАЧАЛО ПРОГРАММЫ
|
||||
use32
|
||||
org 0x0
|
||||
db 'MENUET01' ; 8 byte id
|
||||
dd 0x01 ; title version
|
||||
dd START ; start of code
|
||||
dd I_END ; size of image
|
||||
dd E_END ; memory for app
|
||||
dd E_END ; esp
|
||||
dd 0x0,0x0 ; I_Param , I_Icon
|
||||
|
||||
; ОБЛАСТЬ КОДА
|
||||
START:
|
||||
mov eax,40 ; сообщим системе, какие события будем обрабатывать
|
||||
mov ebx,0100101b ; маска событий - перерисовка (1) + кнопка (3) + мышь (6
|
||||
int 0x40 ; эта команда вызывает системную функцию
|
||||
|
||||
mov [workarea.cx],5 ; координаты рабочей (клиентской) области
|
||||
mov [workarea.cy],30 ; для рисования
|
||||
|
||||
red:
|
||||
call draw_window ; вызываем процедуру отрисовки окна
|
||||
|
||||
still: ; ГЛАВНЫЙ ЦИКЛ ПРОГРАММЫ - ЦИКЛ ОБРАБОТКИ СООБЩЕНИЙ
|
||||
|
||||
mov eax,10 ; функция 10 - ждать события; программа останавливается на
|
||||
int 0x40 ; следующая команда не будет выполнена до тех пор, пока
|
||||
; не произойдёт событие
|
||||
|
||||
; теперь регистр eax содержит номер события
|
||||
; поочередно сравним его со всеми возможными значениями, чтобы вызвать
|
||||
; нужный обработчик
|
||||
|
||||
cmp eax,1 ; перерисовать окно ?
|
||||
je red ; если регистр eax равен единице, то переходим на метку red
|
||||
cmp eax,3 ; нажата кнопка ?
|
||||
je button
|
||||
cmp eax,6 ; мышь?
|
||||
je mouse
|
||||
|
||||
jmp still ; если произошло событие, которое мы не обрабатываем,
|
||||
; просто возвращаемся к началу цикла, хотя такого быть
|
||||
; не должно! Т.е. если эту команду отсюда убрать, то
|
||||
; ничего страшного не случится.
|
||||
|
||||
;******************************************************************************
|
||||
|
||||
button: ; обработчик нажатия кнопки в окне программы
|
||||
mov eax,17 ; функция N17 - получить идентификатор нажатой кнопки
|
||||
int 0x40
|
||||
|
||||
; теперь в регистре ah содержится идентификатор.
|
||||
|
||||
shr eax,8 ; ah -> al (сдвиг на 8 бит вправо)
|
||||
|
||||
dec al ; идентификатор_кнопки--;
|
||||
jnz .noclose ; если результат предыдущей команды равен нулю, закрываемся
|
||||
; иначе - идём на метку noclose
|
||||
|
||||
or eax,-1 ; выход из программы
|
||||
int 0x40
|
||||
|
||||
.noclose:
|
||||
; если мы сюда попали, значит идентификатор кнопки не был равен нулю...
|
||||
; теперь у нас в eax содержится (номер цветной кнопки - 1),
|
||||
; т.е или 1, или 2, ... ,или 5
|
||||
|
||||
; уменьшим на 1:
|
||||
dec eax
|
||||
|
||||
; вот эта вот команда извлекает в eax двойное слово по адресу colors+eax*4
|
||||
; где colors - смещение метки colors, после которой идет последовательность
|
||||
; цветов, eax*4 - номер цвета, умноженный на 4, т.к. на один цвет нужно
|
||||
; четыре байта.
|
||||
mov eax,[colors+eax*4]
|
||||
|
||||
; теперь мы установим цвет, содержащийся в регистре eax как основной:
|
||||
mov [active_color],eax
|
||||
|
||||
; ну вот, собственно, и всё, что от нас требовалось ;)
|
||||
; вернёмся к началу цикла обработки событий
|
||||
jmp still
|
||||
|
||||
;******************************************************************************
|
||||
|
||||
mouse: ; обработчик мыши
|
||||
mov eax,37 ; сначала получим текущие координаты мыши
|
||||
mov ebx,1
|
||||
int 0x40
|
||||
|
||||
mov ebx,eax ; преобразуем их
|
||||
shr eax,16 ; eax=x;
|
||||
and ebx,0xffff ; ebx=y;
|
||||
|
||||
cmp ebx,22
|
||||
jb save_canvas
|
||||
|
||||
sub eax,[workarea.cx] ; x-=[workarea.cx]
|
||||
cmp eax,0 ; если мышь левее клиентской области,
|
||||
jle .not_pressed ; ничего не рисуем
|
||||
cmp eax,[workarea.sx] ; если мышь правее...
|
||||
jae .not_pressed
|
||||
|
||||
sub ebx,[workarea.cy]
|
||||
cmp ebx,0 ; ...выше...
|
||||
jle .not_pressed
|
||||
cmp ebx,[workarea.sy] ; ...ниже...
|
||||
jae .not_pressed
|
||||
|
||||
; какие кнопки нажаты?
|
||||
mov eax,37
|
||||
mov ebx,2
|
||||
int 0x40
|
||||
|
||||
; если левая кнопка (т.е. eax = 1), те пойдём дальше
|
||||
cmp eax,1
|
||||
je .leftbtn
|
||||
|
||||
.not_pressed:
|
||||
; Левая кнопка не нажата, запомним текущие координаты и будем ждать события
|
||||
mov [mouse_pressed],0 ; мышь не нажата
|
||||
mov eax,37 ; получим координаты
|
||||
mov ebx,1
|
||||
int 0x40
|
||||
mov ebx,eax
|
||||
shr eax,16
|
||||
and ebx,0xffff
|
||||
mov [old_x],eax ; запомним их
|
||||
mov [old_y],ebx
|
||||
jmp still
|
||||
|
||||
.leftbtn:
|
||||
; Левая кнопка нажата, надо это записать!
|
||||
mov [mouse_pressed],1
|
||||
|
||||
; Получим координаты курсора мыши (относительно окна)
|
||||
mcall 37,1 ; получить состояние мыши
|
||||
|
||||
; Переделаем их так, чтобы они были в разных регистрах, т.е. eax и ebx
|
||||
mov ebx,eax
|
||||
shr eax,16
|
||||
and ebx,0xffff
|
||||
|
||||
; Подготовим параметры для функции рисования линии
|
||||
mov ecx,[old_x] ; для начала загрузим старые координаты
|
||||
mov edx,[old_y]
|
||||
mov [old_x],eax ; теперь сохраним текущие в старые
|
||||
mov [old_y],ebx
|
||||
shl ecx,16 ; в верхнее слово начальные (текущие) координаты
|
||||
shl edx,16
|
||||
add eax,ecx ; а в нижнее слово конечные, т.е. старые
|
||||
add ebx,edx
|
||||
|
||||
mov ecx,ebx ; поменяем регистры так, как эту нужно 38 функции
|
||||
mov ebx,eax
|
||||
mov eax,38 ; номер функции в eax
|
||||
mov edx,[active_color] ; в edx цвет
|
||||
int 0x40
|
||||
|
||||
; - попробуйте поставить другие значения (00090001)
|
||||
mov edi,0x00010001 ; чтобы линия не была слишком тонкой,
|
||||
add ebx,edi ; нарисуем рядом еще 3!
|
||||
int 0x40
|
||||
add ecx,edi
|
||||
int 0x40
|
||||
sub ebx,edi
|
||||
int 0x40
|
||||
|
||||
sub ebx,edi ; ну а чтобы смотрелось совсем круто,
|
||||
int 0x40 ; дорисуем еще 5!
|
||||
sub ecx,edi
|
||||
int 0x40
|
||||
sub ecx,edi
|
||||
int 0x40
|
||||
add ebx,edi
|
||||
int 0x40
|
||||
add ebx,edi
|
||||
int 0x40
|
||||
|
||||
jmp still
|
||||
|
||||
;******************************************************************************
|
||||
|
||||
save_canvas:
|
||||
mov eax,[proc_info.box.width]
|
||||
add eax,[workarea.cx]
|
||||
mov ebx,[proc_info.box.height]
|
||||
add ebx,[workarea.cy]
|
||||
|
||||
jmp still
|
||||
|
||||
;******************************************************************************
|
||||
|
||||
; *********************************************
|
||||
; ******* ОПРЕДЕЛЕНИЕ И ОТРИСОВКА ОКНА *******
|
||||
; *********************************************
|
||||
|
||||
draw_window:
|
||||
|
||||
mcall 48,3,sc,sizeof.system_colors ; ПОДГРУЖАЕМ СИСТЕМНЫЕ ЦВЕТА
|
||||
mcall 12, 1 ; начало отрисовки окна
|
||||
mov edx, [sc.work]
|
||||
or edx, 0x33000000
|
||||
mcall 0, (100 shl 16)+400, (100 shl 16)+300, , , title ; рисуем окно
|
||||
mcall 12, 1
|
||||
|
||||
mcall 9,proc_info,-1 ; получим информацию о своем потоке
|
||||
|
||||
mov eax,[proc_info.box.width] ; настроим размер рабочей области
|
||||
sub eax,20 ; (х размер окна - 20)
|
||||
mov [workarea.sx],eax
|
||||
mov eax,[proc_info.box.height]
|
||||
sub eax,63 ; (у размер - 63)
|
||||
mov [workarea.sy],eax
|
||||
|
||||
cmp [proc_info.box.height],80
|
||||
jb .finish
|
||||
|
||||
mov eax, 8
|
||||
mov edx, 1
|
||||
; создаём кнопки выбора цвета:
|
||||
mov ebx,10*65536+15 ; начальная x координата и размер
|
||||
mov ecx, 7*65536+15 ; начальная y координата & size
|
||||
.new_button:
|
||||
inc edx ; идентификатор++;
|
||||
mov esi,[btn_colors-8+edx*4] ; цвет кнопки
|
||||
int 0x40 ; ставим кнопку
|
||||
add ebx,18*65536 ; следующая кнопка правее на 12
|
||||
cmp edx,9 ; сравниваем edx (идентификатор) с 9
|
||||
jbe .new_button ; если меньше или равно -> ещё одну кпоку
|
||||
|
||||
mov eax,13 ; чистим "холст" - клиентскую область
|
||||
mov ebx,[workarea.cx]
|
||||
mov ecx,[workarea.cy]
|
||||
shl ebx,16
|
||||
shl ecx,16
|
||||
add ebx,[workarea.sx]
|
||||
add ecx,[workarea.sy]
|
||||
mov edx,0xffffff
|
||||
mcall 13
|
||||
|
||||
.finish:
|
||||
ret
|
||||
|
||||
;******************************************************************************
|
||||
; начало области инициализированных данных
|
||||
; если кто ещё не знает, что значит "инициализированные", то поясняю:
|
||||
; это те данные, которым присвоено начальное значение
|
||||
|
||||
;data
|
||||
|
||||
title db 'Simple Paint v0.3',0
|
||||
|
||||
mouse_pressed db 0 ; показывает, нажата ли была мышь в предыдущий момент
|
||||
|
||||
; цвета кнопок
|
||||
btn_colors:
|
||||
dd 0xdddddd ; white
|
||||
dd 0x444444 ; black
|
||||
dd 0x00dd00 ; green
|
||||
dd 0x0000dd ; blue
|
||||
dd 0xdd0000 ; red
|
||||
dd 0xdd00dd ; magenta
|
||||
dd 0xdddd00 ; yellow
|
||||
dd 0x00dddd ; cyan
|
||||
dd 0x559955 ; warm green
|
||||
|
||||
; цвета кисти (в том же порядке, что и цвета кнопок)
|
||||
colors:
|
||||
dd 0xffffff ; белый
|
||||
dd 0x000000 ; черный
|
||||
dd 0x00ff00 ; зеленый
|
||||
dd 0x0000ff ; синий
|
||||
dd 0xff0000 ; красный
|
||||
dd 0xff00ff ; пурпурный
|
||||
dd 0xffff00 ; желтый
|
||||
dd 0x00ffff ; голубой
|
||||
dd 0x77bb77 ; теплый зеленый
|
||||
|
||||
;******************************************************************************
|
||||
; а вот тут начинается область НЕинициализированных данных, т.е.
|
||||
; здесь данным значения не присвоены. В отличие от иниц., не увеличивают размер
|
||||
; файла
|
||||
|
||||
I_END:
|
||||
|
||||
active_color dd ? ; активный цвет
|
||||
|
||||
old_x dd ? ; старые координаты мыши
|
||||
old_y dd ?
|
||||
|
||||
workarea: ; координаты и размеры клиентской области
|
||||
.cx dd ? ; c - коодинаты
|
||||
.cy dd ?
|
||||
.sx dd ? ; s - размеры
|
||||
.sy dd ?
|
||||
|
||||
sc system_colors ; системные цвета
|
||||
proc_info process_information ; информация о процессе
|
||||
|
||||
restflag dd ?
|
||||
canvas rb 800*600*3
|
||||
|
||||
E_END:
|
||||
@@ -1,5 +1,5 @@
|
||||
if tup.getconfig("NO_FASM") ~= "" then return end
|
||||
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../../.." or tup.getconfig("HELPERDIR")
|
||||
HELPERDIR = (tup.getconfig("HELPERDIR") == "") and "../.." or tup.getconfig("HELPERDIR")
|
||||
tup.include(HELPERDIR .. "/use_fasm.lua")
|
||||
add_include(tup.getvariantdir())
|
||||
|
||||
@@ -1,73 +1,77 @@
|
||||
use32
|
||||
db 'MENUET01'
|
||||
dd 1
|
||||
dd start
|
||||
dd i_end
|
||||
dd 0x400
|
||||
dd 0x400
|
||||
dd 0,0
|
||||
|
||||
include '../../../macros.inc'
|
||||
|
||||
start:
|
||||
mov eax, 55
|
||||
mov ebx, eax
|
||||
mov esi, melody2
|
||||
int 0x40
|
||||
mov eax, 5
|
||||
mov ebx, 1000
|
||||
int 0x40
|
||||
mov eax, -1
|
||||
int 0x40
|
||||
|
||||
melody1:
|
||||
db 0xE4, 0x35, 0x99, 0x33, 0x99, 0x31, 0x99, 0x33
|
||||
db 0xE4, 0x35, 0x99, 0x35, 0x99, 0x36, 0x99, 0x38, 0x99, 0x3A
|
||||
db 0xE4, 0x36, 0xE4, 0x36
|
||||
db 0xB2, 0xFF
|
||||
db 0xE4, 0x33, 0x99, 0x31, 0x99, 0x2C, 0x99, 0x31
|
||||
db 0xE4, 0x33, 0xB2, 0x33, 0x99, 0x35, 0x99, 0x36
|
||||
db 0xE4, 0x35, 0xE4, 0x35
|
||||
db 0xB2, 0xFF
|
||||
db 0x99, 0x35, 0x99, 0x36
|
||||
db 0xE4, 0x33, 0x99, 0x35, 0x99, 0x36
|
||||
db 0xB2, 0x33, 0x99, 0x35, 0x99, 0x36
|
||||
db 0xB2, 0x33, 0x99, 0x35, 0x99, 0x36
|
||||
db 0xE4, 0x39, 0xE4, 0x39
|
||||
db 0xB2, 0xFF
|
||||
db 0x99, 0x35, 0x99, 0x36
|
||||
db 0xE4, 0x33, 0x99, 0x35, 0x99, 0x36
|
||||
db 0xB2, 0x33, 0x99, 0x35, 0x99, 0x36
|
||||
db 0xB2, 0x33, 0x99, 0x35, 0x99, 0x36
|
||||
db 0xE4, 0x35, 0xE4, 0x35
|
||||
db 0
|
||||
|
||||
melody2:
|
||||
db 0x90, 0x31, 0x90, 0x33, 0x90, 0x35, 0x90, 0x36
|
||||
db 0xA0, 0xFF
|
||||
db 0xA0, 0x06
|
||||
db 0x90, 0xFF
|
||||
db 0xA0, 0x06
|
||||
db 0x90, 0xFF
|
||||
db 0x90, 0x33, 0x90, 0x35, 0x90, 0x37, 0x90, 0x38
|
||||
db 0xA0, 0xFF
|
||||
db 0xA0, 0x18
|
||||
db 0x90, 0xFF
|
||||
db 0xA0, 0x18
|
||||
db 0x90, 0xFF
|
||||
db 0x90, 0x33, 0x90, 0x35, 0x90, 0x37, 0x90, 0x38
|
||||
db 0xA0, 0xFF
|
||||
db 0x90, 0x33, 0x90, 0x35, 0x90, 0x37, 0x90, 0x38
|
||||
db 0xA0, 0xFF
|
||||
db 0x90, 0x31, 0x90, 0x33, 0x90, 0x35, 0x90, 0x36
|
||||
db 0xA0, 0xFF
|
||||
db 0xA0, 0x16
|
||||
db 0x90, 0xFF
|
||||
db 0xA0, 0x16
|
||||
db 0
|
||||
|
||||
melody3:
|
||||
db 0x99, 0x31, 0xB2, 0x36, 0x99, 0x3A, 0xB2, 0x36
|
||||
db 0x99, 0x33, 0xB2, 0x28, 0xBC, 0x38
|
||||
db 0
|
||||
i_end:
|
||||
; SPDX-License-Identifier: NOASSERTION
|
||||
;
|
||||
|
||||
|
||||
use32
|
||||
db 'MENUET01'
|
||||
dd 1
|
||||
dd start
|
||||
dd i_end
|
||||
dd 0x400
|
||||
dd 0x400
|
||||
dd 0,0
|
||||
|
||||
include '../../macros.inc'
|
||||
|
||||
start:
|
||||
mov eax, 55
|
||||
mov ebx, eax
|
||||
mov esi, melody2
|
||||
int 0x40
|
||||
mov eax, 5
|
||||
mov ebx, 1000
|
||||
int 0x40
|
||||
mov eax, -1
|
||||
int 0x40
|
||||
|
||||
melody1:
|
||||
db 0xE4, 0x35, 0x99, 0x33, 0x99, 0x31, 0x99, 0x33
|
||||
db 0xE4, 0x35, 0x99, 0x35, 0x99, 0x36, 0x99, 0x38, 0x99, 0x3A
|
||||
db 0xE4, 0x36, 0xE4, 0x36
|
||||
db 0xB2, 0xFF
|
||||
db 0xE4, 0x33, 0x99, 0x31, 0x99, 0x2C, 0x99, 0x31
|
||||
db 0xE4, 0x33, 0xB2, 0x33, 0x99, 0x35, 0x99, 0x36
|
||||
db 0xE4, 0x35, 0xE4, 0x35
|
||||
db 0xB2, 0xFF
|
||||
db 0x99, 0x35, 0x99, 0x36
|
||||
db 0xE4, 0x33, 0x99, 0x35, 0x99, 0x36
|
||||
db 0xB2, 0x33, 0x99, 0x35, 0x99, 0x36
|
||||
db 0xB2, 0x33, 0x99, 0x35, 0x99, 0x36
|
||||
db 0xE4, 0x39, 0xE4, 0x39
|
||||
db 0xB2, 0xFF
|
||||
db 0x99, 0x35, 0x99, 0x36
|
||||
db 0xE4, 0x33, 0x99, 0x35, 0x99, 0x36
|
||||
db 0xB2, 0x33, 0x99, 0x35, 0x99, 0x36
|
||||
db 0xB2, 0x33, 0x99, 0x35, 0x99, 0x36
|
||||
db 0xE4, 0x35, 0xE4, 0x35
|
||||
db 0
|
||||
|
||||
melody2:
|
||||
db 0x90, 0x31, 0x90, 0x33, 0x90, 0x35, 0x90, 0x36
|
||||
db 0xA0, 0xFF
|
||||
db 0xA0, 0x06
|
||||
db 0x90, 0xFF
|
||||
db 0xA0, 0x06
|
||||
db 0x90, 0xFF
|
||||
db 0x90, 0x33, 0x90, 0x35, 0x90, 0x37, 0x90, 0x38
|
||||
db 0xA0, 0xFF
|
||||
db 0xA0, 0x18
|
||||
db 0x90, 0xFF
|
||||
db 0xA0, 0x18
|
||||
db 0x90, 0xFF
|
||||
db 0x90, 0x33, 0x90, 0x35, 0x90, 0x37, 0x90, 0x38
|
||||
db 0xA0, 0xFF
|
||||
db 0x90, 0x33, 0x90, 0x35, 0x90, 0x37, 0x90, 0x38
|
||||
db 0xA0, 0xFF
|
||||
db 0x90, 0x31, 0x90, 0x33, 0x90, 0x35, 0x90, 0x36
|
||||
db 0xA0, 0xFF
|
||||
db 0xA0, 0x16
|
||||
db 0x90, 0xFF
|
||||
db 0xA0, 0x16
|
||||
db 0
|
||||
|
||||
melody3:
|
||||
db 0x99, 0x31, 0xB2, 0x36, 0x99, 0x3A, 0xB2, 0x36
|
||||
db 0x99, 0x33, 0xB2, 0x28, 0xBC, 0x38
|
||||
db 0
|
||||
i_end:
|
||||
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 209 B After Width: | Height: | Size: 209 B |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
@@ -1,3 +1,9 @@
|
||||
; SPDX-License-Identifier: NOASSERTION
|
||||
;
|
||||
|
||||
; Text encoded with Code Page 866 - Cyrillic
|
||||
|
||||
|
||||
use32
|
||||
org 0
|
||||
db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
|
||||
@@ -8,13 +14,13 @@ include '../../../proc32.inc'
|
||||
include '../../../KOSfuncs.inc'
|
||||
include '../../../load_img.inc'
|
||||
include '../../../load_lib.mac'
|
||||
include '../trunk/str.inc'
|
||||
include '../str.inc'
|
||||
include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US.
|
||||
|
||||
vox_offs_tree_table equ 4
|
||||
vox_offs_data equ 12
|
||||
txt_buf rb 8
|
||||
include '../trunk/vox_rotate.inc'
|
||||
include '../vox_rotate.inc'
|
||||
|
||||
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
|
||||
if lang eq ru_RU
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
; SPDX-License-Identifier: NOASSERTION
|
||||
;
|
||||
|
||||
; Text encoded with Code Page 866 - Cyrillic
|
||||
|
||||
|
||||
use32
|
||||
org 0
|
||||
db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
|
||||
@@ -8,9 +14,9 @@ include '../../../proc32.inc'
|
||||
include '../../../KOSfuncs.inc'
|
||||
include '../../../load_img.inc'
|
||||
include '../../../load_lib.mac'
|
||||
include '../trunk/vox_draw.inc'
|
||||
include '../trunk/vox_rotate.inc'
|
||||
include '../trunk/str.inc'
|
||||
include '../vox_draw.inc'
|
||||
include '../vox_rotate.inc'
|
||||
include '../str.inc'
|
||||
include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US.
|
||||
|
||||
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
; SPDX-License-Identifier: NOASSERTION
|
||||
;
|
||||
|
||||
; Text encoded with Code Page 866 - Cyrillic
|
||||
|
||||
|
||||
use32
|
||||
org 0
|
||||
db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
|
||||
@@ -11,7 +17,7 @@ include '../../../load_lib.mac'
|
||||
include '../../../develop/libraries/TinyGL/asm_fork/opengl_const.inc'
|
||||
include '../../../develop/libraries/TinyGL/asm_fork/zbuffer.inc'
|
||||
include 'vox_3d.inc'
|
||||
include '../trunk/str.inc'
|
||||
include '../str.inc'
|
||||
include 'lang.inc' ; Language support for locales: ru_RU (CP866), en_US.
|
||||
|
||||
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
|
||||
|
||||
@@ -93,7 +93,7 @@ mov ebp,lib0
|
||||
stdcall img_to_gray, [bmp_icon],eax,(TOOLBAR_ICONS_SIZE)/3
|
||||
;---------------------------------------------------------------------
|
||||
; внедряем файл с курсорами и линиями
|
||||
include_image_file '..\..\media\log_el\trunk\tl_sys_16.png', icon_tl_sys
|
||||
include_image_file '..\..\media\log_el\tl_sys_16.png', icon_tl_sys
|
||||
mov eax,dword[icon_tl_sys]
|
||||
mov dword[tree1.data_img_sys],eax
|
||||
; внедряем файл с иконками узлов
|
||||
|
||||
@@ -50,7 +50,7 @@ start:
|
||||
stdcall [tl_data_init], tree1
|
||||
|
||||
; читаем файл с курсорами и линиями
|
||||
include_image_file '..\..\media\log_el\trunk\tl_sys_16.png', icon_tl_sys
|
||||
include_image_file '..\..\media\log_el\tl_sys_16.png', icon_tl_sys
|
||||
mov eax,[icon_tl_sys]
|
||||
mov [tree1.data_img_sys],eax
|
||||
;---------------------------------------------------------------------
|
||||
|
||||