updated sysfunc.txt
*programs
new icons and logo for CPUID and ICON
added new version of @ICON and ICONMNGR
fixes in iconedit and calendar from DedOK
new algoritm of fill background in pic4
all apps (fasm-writen only) rewriten to use common macros.inc for easy recompile in fastcall mode (there is a bug in https; run need rewrite to use common macros.inc)
small fixes in build_all.bat script
git-svn-id: svn://kolibrios.org@485 a494cfbc-eb01-0410-851d-a64ba20cac60
159 lines
4.8 KiB
FASM
159 lines
4.8 KiB
FASM
;
|
||
; Пример программы для MenuetOS
|
||
; озвучивает код нажатой клавиши ;)
|
||
;
|
||
; Компилировать FASM'ом
|
||
;
|
||
; См. также:
|
||
; template.asm - пример простейшей программы (новый!)
|
||
; rb.asm - контекстное меню рабочего стола
|
||
; example2.asm - пример меню и дополнительных окон
|
||
; example3.asm - пример меню, реализованного по-другому
|
||
;---------------------------------------------------------------------
|
||
|
||
use32 ; включить 32-битный режим ассемблера
|
||
org 0x0 ; адресация с нуля
|
||
|
||
db 'MENUET01' ; 8-байтный идентификатор MenuetOS
|
||
dd 0x01 ; версия заголовка (всегда 1)
|
||
dd START ; адрес первой команды
|
||
dd I_END ; размер программы
|
||
dd 0x1000 ; количество памяти
|
||
dd 0x1000 ; адрес вершины стэка
|
||
dd 0x0 ; адрес буфера для параметров (не используется)
|
||
dd 0x0 ; зарезервировано
|
||
|
||
include 'lang.inc'
|
||
include '..\..\..\..\macros.inc' ; макросы облегчают жизнь ассемблерщиков!
|
||
|
||
;---------------------------------------------------------------------
|
||
;--- НАЧАЛО ПРОГРАММЫ ----------------------------------------------
|
||
;---------------------------------------------------------------------
|
||
|
||
START:
|
||
|
||
red: ; перерисовать окно
|
||
|
||
call draw_window ; вызываем процедуру отрисовки окна
|
||
|
||
;---------------------------------------------------------------------
|
||
;--- ЦИКЛ ОБРАБОТКИ СОБЫТИЙ ----------------------------------------
|
||
;---------------------------------------------------------------------
|
||
|
||
still:
|
||
mcall 10 ; функция 10 - ждать события
|
||
|
||
cmp eax,1 ; перерисовать окно ?
|
||
je red ; если да - на метку red
|
||
cmp eax,2 ; нажата клавиша ?
|
||
je key ; если да - на key
|
||
cmp eax,3 ; нажата кнопка ?
|
||
je button ; если да - на button
|
||
|
||
jmp still ; если другое событие - в начало цикла
|
||
|
||
|
||
;---------------------------------------------------------------------
|
||
|
||
|
||
key: ; нажата клавиша на клавиатуре
|
||
mcall 2 ; функция 2 - считать код символа (в ah)
|
||
|
||
mov [Music+1], ah ; записать код символа как код ноты
|
||
|
||
; функция 55-55: системный динамик ("PlayNote")
|
||
; esi - адрес мелодии
|
||
|
||
; mov eax,55
|
||
; mov ebx,eax
|
||
; mov esi,Music
|
||
; int 0x40
|
||
|
||
; или коротко:
|
||
mcall 55, eax, , , Music
|
||
|
||
jmp still ; вернуться к началу цикла
|
||
|
||
;---------------------------------------------------------------------
|
||
|
||
button:
|
||
mcall 17 ; 17 - получить идентификатор нажатой кнопки
|
||
|
||
cmp ah, 1 ; если НЕ нажата кнопка с номером 1,
|
||
jne still ; вернуться
|
||
|
||
.exit:
|
||
mcall -1 ; иначе конец программы
|
||
|
||
|
||
|
||
;---------------------------------------------------------------------
|
||
;--- ОПРЕДЕЛЕНИЕ И ОТРИСОВКА ОКНА ----------------------------------
|
||
;---------------------------------------------------------------------
|
||
|
||
draw_window:
|
||
|
||
mcall 12, 1 ; функция 12: сообщить ОС об отрисовке окна
|
||
; 1 - начинаем рисовать
|
||
|
||
; далее: сначала длинный вариант (закомментированный)
|
||
; затем короткий аналог с использованием макросов
|
||
|
||
|
||
; СОЗДАЁМ ОКНО
|
||
; mov eax,0 ; функция 0 : определить и отрисовать окно
|
||
; mov ebx,200*65536+200 ; [x старт] *65536 + [x размер]
|
||
; mov ecx,200*65536+50 ; [y старт] *65536 + [y размер]
|
||
; mov edx,0x33aabbcc ; цвет рабочей области RRGGBB,8->color gl
|
||
; mov edi,header ; ЗАГОЛОВОК ОКНА
|
||
; int 0x40
|
||
|
||
mcall 0, <200,200>, <200,50>, 0x33AABBCC,,title
|
||
|
||
|
||
|
||
; mov eax,4
|
||
; mov ebx,3 shl 16 + 8
|
||
; mov ecx,0
|
||
; mov edx,message
|
||
; mov esi,message.size
|
||
; int 0x40
|
||
|
||
mcall 4, <3, 8>, 0, message, message.size
|
||
|
||
mcall 12, 2 ; функция 12: сообщить ОС об отрисовке окна
|
||
; 2, закончили рисовать
|
||
|
||
ret ; выходим из процедуры
|
||
|
||
|
||
;---------------------------------------------------------------------
|
||
;--- ДАННЫЕ ПРОГРАММЫ ----------------------------------------------
|
||
;---------------------------------------------------------------------
|
||
|
||
; Вот такая вот короткая "мелодия".
|
||
; Второй байт изменяется нажатием клавишы
|
||
|
||
Music:
|
||
db 0x90, 0x30, 0
|
||
|
||
|
||
;---------------------------------------------------------------------
|
||
|
||
; интерфейс программы многоязычный
|
||
; Вы можете задать язык в MACROS.INC (lang fix язык)
|
||
|
||
lsz message,\
|
||
ru,'Нажмите любую клавишу...',\
|
||
en,'Press any key...',\
|
||
fr,'Pressez une touche...'
|
||
|
||
lsz title,\
|
||
ru,'ПРИМЕР ПРОГРАММЫ',\
|
||
en,'EXAMPLE APPLICATION',\
|
||
fr,"L'exemplaire programme"
|
||
|
||
;---------------------------------------------------------------------
|
||
|
||
I_END: ; метка конца программы
|