Subversion Repositories Kolibri OS

Compare Revisions

No changes between revisions

Regard whitespace Rev 1814 → Rev 1815

/programs/system/notify/trunk/@notify.asm
0,0 → 1,149
 
;
; @notify, pop-up windows
; by Sourcerer, 20.01.2011
;
;---------------------------------------------------------------------
 
use32 ; включить 32-битный режим ассемблера
org 0x0 ; адресация с нуля
 
db 'MENUET01' ; 8-байтный идентификатор MenuetOS
dd 0x01 ; версия заголовка (всегда 1)
dd START ; адрес первой команды
dd I_END ; размер программы
dd 0x1000 ; количество памяти
dd 0x1000 ; адрес вершины стэка
dd I_PARAM ; адрес буфера для параметров
dd 0x0 ; зарезервировано
 
 
include 'macros.inc' ;
 
;---------------------------------------------------------------------
;--- НАЧАЛО ПРОГРАММЫ ----------------------------------------------
;---------------------------------------------------------------------
 
START:
 
red: ; перерисовать окно
 
call draw_window ; вызываем процедуру отрисовки окна
 
;---------------------------------------------------------------------
;--- ЦИКЛ ОБРАБОТКИ СОБЫТИЙ ----------------------------------------
;---------------------------------------------------------------------
 
 
 
still: ; main cycle
mov eax, 23
mov ebx, 500
mcall
 
cmp eax, 0
je exit
cmp eax, 1
je red
cmp eax, 2
je key
cmp eax, 3
je button
 
 
button: ; button event handler
mov al, 17 ; get button identifier
mcall
 
cmp ah, 1
jne still ; return if button id != 1
 
or eax, -1 ; exit application
mcall
 
key: ; key event handler
mov al, 2 ; get key code
mcall
 
jmp still
 
exit:
mcall -1
 
;---------------------------------------------------------------------
;--- ОПРЕДЕЛЕНИЕ И ОТРИСОВКА ОКНА ----------------------------------
;---------------------------------------------------------------------
 
draw_window:
 
mcall 12, 1 ; функция 12: сообщить ОС об отрисовке окна
mov eax,14 ;получим ширину экрана
mov ebx, 4
mcall
shr eax, 16
and eax,0x0000FFFF
sub eax,300 ;отнимем от нее 300
shl eax, 16 ;и превратим в координаты окна по оси X
add eax,300
mov ebx, eax
 
mov eax, 0 ;и выведем это окно
mov ecx, 30 ;высотой 25 пикс
mov edx, 0x41000000 ;черного цвета и без заголовка
mov esi, 0x01000000
mcall
 
;вывод сеточки
mov eax, 1 ;функция вывода точки
mov edx, 0 ;черного цвета
mov ecx, 30 ;высота окна - 30 пкс
mov esi, 0 ;счетчик сдвига сетки
 
drawx: ;рисование линии
sub ecx, 1 ;уменьшаем счетчик линий
cmp ecx, 0 ;закончились линии?
je fin ;значит, хватит рисовать
mov ebx, 300 ;иначе - у нас ширина сетки 300 пкс
cmp esi,1 ;имелся ли сдвиг сетки в прошлой линии?
je sw;если да, то перейдем к sw
mov esi,1 ;иначе - сдвиг был выключен, включим сдвиг
jmp drawy ;перейдем к рисованию
 
sw:
mov esi,0 ;выключаем сдвиг сетки
 
drawy: ;рисование
sub ebx, 2 ;ставить точки будем через одну
cmp ebx, 0 ;дорисовали ли мы линию?
je drawx ;если да, то переходим к новой
sub ebx, esi ;применяем сдвиг
mcall ;рисуем
add ebx, esi ;возвращаем счетчик на место
jmp drawy ;рисуем новую точку
 
fin: ;дорисовали
 
mcall 4, <3, 12>, 0x80000000, I_PARAM, 0 ;тень за текстом
mcall 4, <5, 12>, 0x80000000, I_PARAM, 0 ;
mcall 4, <4, 11>, 0x80000000, I_PARAM, 0 ;
mcall 4, <4, 13>, 0x80000000, I_PARAM, 0 ;
mcall 4, <4, 12>, 0x80EFEFEF, I_PARAM, 0 ;текст
 
 
mcall 12, 2 ; конец рисования
 
ret ; выходим из процедуры
 
 
;---------------------------------------------------------------------
;--- ДАННЫЕ ПРОГРАММЫ ----------------------------------------------
;---------------------------------------------------------------------
 
I_PARAM rb 256
 
I_END: ; метка конца программы
/programs/system/notify/trunk/@notify.c--
0,0 → 1,45
#include "..\lib\kolibri.h--"
#include "..\lib\memory.h--"
// Kolibri Notify Daemon. v0.1 by SoUrcerer
 
dword id;
void main()
{
word key;
id=GetScreenWidth();
 
loop()
{
switch(WaitEvent())
{
case evButton:
id=GetButtonID();
ExitProcess();
break;
case evKey:
key = GetKey();
ExitProcess();
break;
case evReDraw:
draw_window();
break;
}
Pause (500);
ExitProcess();
}
}
 
void draw_window()
{
WindowRedrawStatus(1);
DefineAndDrawWindow(id-300,0,300,44,0x30000000,0x1012141F,0,0,"Kolibri Notify");
// DefineButton(0,300,0,96,0x30000001,0x0) ;
WriteText(7,7,0x80,0xFFFFFF,"Kolibri Notify",0);
WriteText(7,25,0x80,0xEFEFEF,I_Param,0);
WindowRedrawStatus(2);
}
 
stop:
/programs/system/notify/trunk
Property changes:
Added: tsvn:logminsize
+5
\ No newline at end of property
/programs/system/notify/.
Property changes:
Added: tsvn:logminsize
+5
\ No newline at end of property