forked from KolibriOS/kolibrios
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: KolibriOS/kolibrios#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>
This commit is contained in:
1 parent
d6a1b56b7f
commit
33acd57c58
90 files changed
+7508
-7451
No files matched your search
+8
-8
@@ -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"},
|
||||
|
||||
+11
-12
@@ -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
|
||||
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -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
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File diff suppressed because it is too large.
Load diff
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -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())
|
||||
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File diff suppressed because it is too large.
Load diff
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -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())
|
||||
|
||||
File renamed without changes.
File renamed without changes.
@@ -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:
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File diff suppressed because it is too large.
Load diff
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -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())
|
||||
|
||||
File renamed without changes.
File renamed without changes.
File diff suppressed because it is too large.
Load diff
@@ -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:
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -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
|
||||
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
+2009
-2003
File diff suppressed because it is too large.
Load diff
@@ -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
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
Reference in new issue
Block a user