/programs/demos/life2/include/kolibri.h |
---|
1,5 → 1,5 |
#ifndef __MENUET_H_INCLUDED_ |
#define __MENUET_H_INCLUDED_ |
#ifndef __KOLIBRI_H_INCLUDED_ |
#define __KOLIBRI_H_INCLUDED_ |
#include <kos_lib.h> |
17,7 → 17,7 |
const char *Title; |
}; |
struct TStartData // This structure is used only for MenuetOnStart function. |
struct TStartData // This structure is used only for KolibriOnStart function. |
{ |
unsigned short Left, Width, Top, Height; // Initial window rectangle. |
TWindowData WinData; |
59,7 → 59,7 |
void ExitThread(); // Exit from the current thread |
void ExitThread(TThreadData thread_data); |
void ReturnMessageLoop(); // Return to the message loop of the thread. Exit from the thread |
void ReturnMessageLoop(TThreadData thread_data); //_ if it is called from (MenuetOnStart). |
void ReturnMessageLoop(TThreadData thread_data); //_ if it is called from (KolibriOnStart). |
void Delay(unsigned int time); // Delay the execution of the program during (time) hundredth seconds. |
unsigned int Clock(); // Return the time from starting of the system to this moment in hundredth of seconds. |
133,17 → 133,18 |
//_ the same size as the main thread if (stack_size) less that 4096. Set the beginning |
//_ of the stack if (stack_end) is zero or (stack_size) is not zero, in this case stack |
//_ will be deleted automaticaly from dynamic memory at the finish of the thread. |
void DrawText(short x, short y, int color, const char* string); |
} |
// Function, defined outside. |
bool MenuetOnStart(Kolibri::TStartData &me_start, Kolibri::TThreadData thread_data); |
bool KolibriOnStart(Kolibri::TStartData &me_start, Kolibri::TThreadData thread_data); |
// Window will be created iff return value is true. |
bool MenuetOnClose(Kolibri::TThreadData thread_data); // Window will be closed iff return value is true. |
int MenuetOnIdle(Kolibri::TThreadData thread_data); // Return the time to wait next message. |
void MenuetOnSize(int window_rect[/* 4 */], Kolibri::TThreadData thread_data); // When the window is resized. |
void MenuetOnKeyPress(Kolibri::TThreadData thread_data); // When user press a key. |
void MenuetOnMouse(Kolibri::TThreadData thread_data); // When user move a mouse. |
bool KolibriOnClose(Kolibri::TThreadData thread_data); // Window will be closed iff return value is true. |
int KolibriOnIdle(Kolibri::TThreadData thread_data); // Return the time to wait next message. |
void KolibriOnSize(int window_rect[/* 4 */], Kolibri::TThreadData thread_data); // When the window is resized. |
void KolibriOnKeyPress(Kolibri::TThreadData thread_data); // When user press a key. |
void KolibriOnMouse(Kolibri::TThreadData thread_data); // When user move a mouse. |
#ifdef __MENUET__ |
258,18 → 259,18 |
void _GetStartData(TStartData &start_data, TThreadData thread_data) |
{ |
start_data.Left = (unsigned short)((unsigned long)thread_data[MENUET_THREAD_DATA_X] >> 16); |
start_data.Width = (unsigned short)((unsigned long)thread_data[MENUET_THREAD_DATA_X]); |
start_data.Top = (unsigned short)((unsigned long)thread_data[MENUET_THREAD_DATA_Y] >> 16); |
start_data.Height = (unsigned short)((unsigned long)thread_data[MENUET_THREAD_DATA_Y]); |
start_data.Left = (unsigned short)((unsigned long)thread_data[KOLIBRI_THREAD_DATA_X] >> 16); |
start_data.Width = (unsigned short)((unsigned long)thread_data[KOLIBRI_THREAD_DATA_X]); |
start_data.Top = (unsigned short)((unsigned long)thread_data[KOLIBRI_THREAD_DATA_Y] >> 16); |
start_data.Height = (unsigned short)((unsigned long)thread_data[KOLIBRI_THREAD_DATA_Y]); |
GetWindowData(start_data.WinData, thread_data); |
} |
void _SetStartData(const TStartData &start_data, TThreadData thread_data) |
{ |
(unsigned long&)thread_data[MENUET_THREAD_DATA_X] = |
(unsigned long&)thread_data[KOLIBRI_THREAD_DATA_X] = |
((unsigned int)start_data.Left << 16) | start_data.Width; |
(unsigned long&)thread_data[MENUET_THREAD_DATA_Y] = |
(unsigned long&)thread_data[KOLIBRI_THREAD_DATA_Y] = |
((unsigned int)start_data.Top << 16) | start_data.Height; |
SetWindowData(start_data.WinData, thread_data); |
} |
373,9 → 374,9 |
Lock(&_ThreadMutex); |
if (_ExitProcessNow) ExitProcess(); |
thread_table_item = &_ThreadTable[_HashByte(pid)]; |
thread_data[MENUET_THREAD_DATA_NEXT] = (void*)*thread_table_item; |
(unsigned int&)thread_data[MENUET_THREAD_DATA_PID] = pid; |
*(_TThreadDataTemplate*)(thread_data + MENUET_THREAD_DATA_FLAG) = _ThreadDataTemplate; |
thread_data[KOLIBRI_THREAD_DATA_NEXT] = (void*)*thread_table_item; |
(unsigned int&)thread_data[KOLIBRI_THREAD_DATA_PID] = pid; |
*(_TThreadDataTemplate*)(thread_data + KOLIBRI_THREAD_DATA_FLAG) = _ThreadDataTemplate; |
*thread_table_item = thread_data; |
UnLock(&_ThreadMutex); |
if (_ExitProcessNow) ExitProcess(); |
383,10 → 384,10 |
TStartData start_data; |
_GetStartData(start_data, thread_data); |
_ApplyCommonColors(start_data.WinData); |
(unsigned int&)thread_data[MENUET_THREAD_DATA_FLAG] |= 0x40000000; |
thread_data[MENUET_THREAD_DATA_TITLE] = (void*)(&start_data); |
if (!MenuetOnStart(start_data, thread_data)) return false; |
(unsigned int&)thread_data[MENUET_THREAD_DATA_FLAG] &= ~0x40000000; |
(unsigned int&)thread_data[KOLIBRI_THREAD_DATA_FLAG] |= 0x40000000; |
thread_data[KOLIBRI_THREAD_DATA_TITLE] = (void*)(&start_data); |
if (!KolibriOnStart(start_data, thread_data)) return false; |
(unsigned int&)thread_data[KOLIBRI_THREAD_DATA_FLAG] &= ~0x40000000; |
_SetStartData(start_data, thread_data); |
return true; |
} |
402,10 → 403,10 |
{ |
if (*thread_table_item == thread_data) |
{ |
*thread_table_item = (TThreadData)thread_data[MENUET_THREAD_DATA_NEXT]; |
*thread_table_item = (TThreadData)thread_data[KOLIBRI_THREAD_DATA_NEXT]; |
break; |
} |
thread_table_item = (TThreadData*)(*thread_table_item + MENUET_THREAD_DATA_NEXT); |
thread_table_item = (TThreadData*)(*thread_table_item + KOLIBRI_THREAD_DATA_NEXT); |
} |
UnLock(&_ThreadMutex); |
if (_ExitProcessNow) ExitProcess(); |
413,59 → 414,59 |
void GetWindowData(TWindowData &win_data, TThreadData thread_data) |
{ |
if ((unsigned int)thread_data[MENUET_THREAD_DATA_FLAG] & 0x40000000) |
if ((unsigned int)thread_data[KOLIBRI_THREAD_DATA_FLAG] & 0x40000000) |
{ |
win_data = ((TStartData*)thread_data[MENUET_THREAD_DATA_TITLE])->WinData; |
win_data = ((TStartData*)thread_data[KOLIBRI_THREAD_DATA_TITLE])->WinData; |
return; |
} |
win_data.WindowType = (unsigned short)((unsigned int)thread_data[MENUET_THREAD_DATA_C_WINDOW] >> 24); |
win_data.HeaderType = (unsigned short)((unsigned int)thread_data[MENUET_THREAD_DATA_C_HEADER] >> 24); |
win_data.WindowColor = (unsigned int)thread_data[MENUET_THREAD_DATA_C_WINDOW] & 0xFFFFFF; |
win_data.HeaderColor = (unsigned int)thread_data[MENUET_THREAD_DATA_C_HEADER] & 0xFFFFFF; |
win_data.BorderColor = (unsigned int)thread_data[MENUET_THREAD_DATA_C_BORDER] & 0xFFFFFF; |
win_data.TitleColor = (unsigned int)thread_data[MENUET_THREAD_DATA_C_TITLE] & 0xFFFFFF; |
win_data.Title = (char*)thread_data[MENUET_THREAD_DATA_TITLE]; |
win_data.WindowType = (unsigned short)((unsigned int)thread_data[KOLIBRI_THREAD_DATA_C_WINDOW] >> 24); |
win_data.HeaderType = (unsigned short)((unsigned int)thread_data[KOLIBRI_THREAD_DATA_C_HEADER] >> 24); |
win_data.WindowColor = (unsigned int)thread_data[KOLIBRI_THREAD_DATA_C_WINDOW] & 0xFFFFFF; |
win_data.HeaderColor = (unsigned int)thread_data[KOLIBRI_THREAD_DATA_C_HEADER] & 0xFFFFFF; |
win_data.BorderColor = (unsigned int)thread_data[KOLIBRI_THREAD_DATA_C_BORDER] & 0xFFFFFF; |
win_data.TitleColor = (unsigned int)thread_data[KOLIBRI_THREAD_DATA_C_TITLE] & 0xFFFFFF; |
win_data.Title = (char*)thread_data[KOLIBRI_THREAD_DATA_TITLE]; |
} |
void SetWindowData(const TWindowData &win_data, TThreadData thread_data) |
{ |
if ((unsigned int)thread_data[MENUET_THREAD_DATA_FLAG] & 0x40000000) |
if ((unsigned int)thread_data[KOLIBRI_THREAD_DATA_FLAG] & 0x40000000) |
{ |
((TStartData*)thread_data[MENUET_THREAD_DATA_TITLE])->WinData = win_data; |
((TStartData*)thread_data[KOLIBRI_THREAD_DATA_TITLE])->WinData = win_data; |
return; |
} |
(unsigned int&)thread_data[MENUET_THREAD_DATA_C_WINDOW] = |
(unsigned int&)thread_data[KOLIBRI_THREAD_DATA_C_WINDOW] = |
((unsigned int)win_data.WindowType << 24) | (win_data.WindowColor & 0xFFFFFF); |
(unsigned int&)thread_data[MENUET_THREAD_DATA_C_HEADER] = |
(unsigned int&)thread_data[KOLIBRI_THREAD_DATA_C_HEADER] = |
((unsigned int)win_data.HeaderType << 24) | (win_data.HeaderColor & 0xFFFFFF); |
(unsigned int&)thread_data[MENUET_THREAD_DATA_C_BORDER] = win_data.BorderColor & 0xFFFFFF; |
(unsigned int&)thread_data[MENUET_THREAD_DATA_C_TITLE] = win_data.TitleColor & 0xFFFFFF; |
thread_data[MENUET_THREAD_DATA_TITLE] = (void*)win_data.Title; |
(unsigned int&)thread_data[KOLIBRI_THREAD_DATA_C_BORDER] = win_data.BorderColor & 0xFFFFFF; |
(unsigned int&)thread_data[KOLIBRI_THREAD_DATA_C_TITLE] = win_data.TitleColor & 0xFFFFFF; |
thread_data[KOLIBRI_THREAD_DATA_TITLE] = (void*)win_data.Title; |
Invalidate(1, thread_data); |
} |
void CloseWindow(TThreadData thread_data) |
{ |
(unsigned int&)thread_data[MENUET_THREAD_DATA_FLAG] |= 0x80000000; |
(unsigned int&)thread_data[KOLIBRI_THREAD_DATA_FLAG] |= 0x80000000; |
} |
void Invalidate(int frame, TThreadData thread_data) |
{ |
if (frame < 0) return; |
(unsigned int&)thread_data[MENUET_THREAD_DATA_FLAG] |= (frame ? 3 : 1); |
(unsigned int&)thread_data[KOLIBRI_THREAD_DATA_FLAG] |= (frame ? 3 : 1); |
} |
void* GetPicture(unsigned short &width, unsigned short &height, TThreadData thread_data) |
{ |
width = (unsigned short)((unsigned int)thread_data[MENUET_THREAD_DATA_SZ_PICT] >> 16); |
height = (unsigned short)((unsigned int)thread_data[MENUET_THREAD_DATA_SZ_PICT]); |
return (void*)thread_data[MENUET_THREAD_DATA_PICTURE]; |
width = (unsigned short)((unsigned int)thread_data[KOLIBRI_THREAD_DATA_SZ_PICT] >> 16); |
height = (unsigned short)((unsigned int)thread_data[KOLIBRI_THREAD_DATA_SZ_PICT]); |
return (void*)thread_data[KOLIBRI_THREAD_DATA_PICTURE]; |
} |
void SetPicture(void *picture, unsigned short width, unsigned short height, TThreadData thread_data) |
{ |
thread_data[MENUET_THREAD_DATA_PICTURE] = (void*)picture; |
(unsigned int&)thread_data[MENUET_THREAD_DATA_SZ_PICT] = |
thread_data[KOLIBRI_THREAD_DATA_PICTURE] = (void*)picture; |
(unsigned int&)thread_data[KOLIBRI_THREAD_DATA_SZ_PICT] = |
(width == 0 || height == 0) ? 0 : (((unsigned int)width << 16) | height); |
Invalidate(0, thread_data); |
} |
474,9 → 475,9 |
void GetBorderHeader(unsigned short &border_size, unsigned short &header_size, TThreadData thread_data) |
{ |
int win_type = ((unsigned int)thread_data[MENUET_THREAD_DATA_FLAG] & 0x40000000) ? |
((TStartData*)thread_data[MENUET_THREAD_DATA_TITLE])->WinData.WindowType : |
((unsigned int)thread_data[MENUET_THREAD_DATA_C_WINDOW] >> 24); |
int win_type = ((unsigned int)thread_data[KOLIBRI_THREAD_DATA_FLAG] & 0x40000000) ? |
((TStartData*)thread_data[KOLIBRI_THREAD_DATA_TITLE])->WinData.WindowType : |
((unsigned int)thread_data[KOLIBRI_THREAD_DATA_C_WINDOW] >> 24); |
border_size = MENUET_BORDER_SIZE; |
header_size = short(((win_type & 15) == 3) ? _GetSkinHeader() : MENUET_HEADER_SIZE); |
} |
533,5 → 534,5 |
#endif // else: def __MENUET__ |
#endif // ndef __MENUET_H_INCLUDED_ |
#endif // ndef __KOLIBRI_H_INCLUDED_ |
/programs/demos/life2/include/kos_file.h |
---|
1,5 → 1,5 |
#ifndef __MENUET_FILE_H_INCLUDED_ |
#define __MENUET_FILE_H_INCLUDED_ |
#ifndef __KOLIBRI_FILE_H_INCLUDED_ |
#define __KOLIBRI_FILE_H_INCLUDED_ |
#include <kolibri.h> |
#include <kos_heap.h> |
67,7 → 67,7 |
if (!name || !name[0]) return 0; |
unsigned int name_len = StrLen(name) + 1; |
unsigned int data_len = (_FileDataStruct::PosName + name_len + 3) & ~3; |
buffer_length = (buffer_length / MENUET_FILE_BLOCK_SIZE) * MENUET_FILE_BLOCK_SIZE; |
buffer_length = (buffer_length / KOLIBRI_FILE_BLOCK_SIZE) * KOLIBRI_FILE_BLOCK_SIZE; |
if (buffer_length) data_len += buffer_length + 2*sizeof(unsigned int); |
TFileData file = (TFileData)Alloc(_FileDataStruct::PosName + data_len); |
if (!file) return 0; |
119,7 → 119,7 |
if (file_data->buffer) buffer = file_data->buffer; |
else if (temp_mem) |
{ |
buffer = (unsigned int*)((char*)temp_mem + MENUET_FILE_BLOCK_SIZE); |
buffer = (unsigned int*)((char*)temp_mem + KOLIBRI_FILE_BLOCK_SIZE); |
} |
else return 0; |
if (!buffer[1]) return 0; |
142,18 → 142,18 |
{ |
int res; |
unsigned int len0, len1; |
size /= MENUET_FILE_BLOCK_SIZE; |
size /= KOLIBRI_FILE_BLOCK_SIZE; |
if (!file_data || !mem || size <= 0) return -1; |
file_data->access_param[0] = 0; |
file_data->access_param[1] = (file_data->position / MENUET_FILE_BLOCK_SIZE) * MENUET_FILE_BLOCK_SIZE; |
file_data->access_param[1] = (file_data->position / KOLIBRI_FILE_BLOCK_SIZE) * KOLIBRI_FILE_BLOCK_SIZE; |
file_data->access_param[2] = 0; |
file_data->access_param[3] = size * MENUET_FILE_BLOCK_SIZE; |
file_data->access_param[3] = size * KOLIBRI_FILE_BLOCK_SIZE; |
file_data->access_param[4] = (unsigned int)mem; |
res = _FileAccess(file_data->access_param); |
if (res != 0 && res != 6) return (res & 255) - 1024; |
if (file_data->length <= file_data->position) return 0; |
len0 = file_data->length - file_data->position; |
len1 = size * MENUET_FILE_BLOCK_SIZE - (file_data->position % MENUET_FILE_BLOCK_SIZE); |
len1 = size * KOLIBRI_FILE_BLOCK_SIZE - (file_data->position % KOLIBRI_FILE_BLOCK_SIZE); |
return (len0 <= len1) ? len0 : len1; |
} |
167,16 → 167,16 |
{ |
if (!temp_mem) |
{ |
temp_mem = Alloc(MENUET_FILE_BLOCK_SIZE + 2*sizeof(unsigned int)); |
temp_mem = Alloc(KOLIBRI_FILE_BLOCK_SIZE + 2*sizeof(unsigned int)); |
if (!temp_mem) return -10; |
} |
buffer = (unsigned int*)((char*)temp_mem + MENUET_FILE_BLOCK_SIZE); |
buffer[0] = MENUET_FILE_BLOCK_SIZE; |
buffer = (unsigned int*)((char*)temp_mem + KOLIBRI_FILE_BLOCK_SIZE); |
buffer[0] = KOLIBRI_FILE_BLOCK_SIZE; |
} |
buffer[1] = buffer[0]; |
res = _FileReadSystem(file_data, (char*)buffer - buffer[1], buffer[1]); |
if (res < 0) buffer[1] = 0; |
else buffer[1] -= file_data->position % MENUET_FILE_BLOCK_SIZE; |
else buffer[1] -= file_data->position % KOLIBRI_FILE_BLOCK_SIZE; |
return res; |
} |
200,7 → 200,7 |
read_len = res; |
mem = (char*)mem + res; |
size -= res; |
tlen = file_data->position % MENUET_FILE_BLOCK_SIZE; |
tlen = file_data->position % KOLIBRI_FILE_BLOCK_SIZE; |
if (tlen) |
{ |
res = _FileBufferSystem(file_data, temp_mem); |
220,7 → 220,7 |
mem = (char*)mem + res; |
size -= res; |
} |
if (size >= (file_data->buffer ? file_data->buffer[0] : MENUET_FILE_BLOCK_SIZE)) |
if (size >= (file_data->buffer ? file_data->buffer[0] : KOLIBRI_FILE_BLOCK_SIZE)) |
{ |
res = _FileReadSystem(file_data, mem, size); |
if (res < 0) |
230,7 → 230,7 |
} |
file_data->position += res; |
read_len += res; |
if (res < (size / MENUET_FILE_BLOCK_SIZE) * MENUET_FILE_BLOCK_SIZE) |
if (res < (size / KOLIBRI_FILE_BLOCK_SIZE) * KOLIBRI_FILE_BLOCK_SIZE) |
{ |
if (temp_mem) Free(temp_mem); |
return read_len; |
274,5 → 274,5 |
#endif // else: def __MENUET__ |
#endif // ndef __MENUET_FILE_H_INCLUDED_ |
#endif // ndef __KOLIBRI_FILE_H_INCLUDED_ |
/programs/demos/life2/include/kos_func.inc |
---|
4,48 → 4,48 |
MENUET_HEADER_SIZE = 20; |
;const int |
MENUET_THREAD_DATA_USER = 0; // Thread data begin from the user dword |
KOLIBRI_THREAD_DATA_USER = 0; // Thread data begin from the user dword |
;const int |
MENUET_THREAD_DATA_ST_BEGIN = 1; // Stack beginning follows after the user dword |
KOLIBRI_THREAD_DATA_ST_BEGIN = 1; // Stack beginning follows after the user dword |
;const int |
MENUET_THREAD_DATA_NEXT = 2; |
KOLIBRI_THREAD_DATA_NEXT = 2; |
;const int |
MENUET_THREAD_DATA_PID = 3; |
KOLIBRI_THREAD_DATA_PID = 3; |
;const int |
MENUET_THREAD_DATA_FLAG = 4; |
KOLIBRI_THREAD_DATA_FLAG = 4; |
;const int |
MENUET_THREAD_DATA_X = 5; |
KOLIBRI_THREAD_DATA_X = 5; |
;const int |
MENUET_THREAD_DATA_Y = 6; |
KOLIBRI_THREAD_DATA_Y = 6; |
;const int |
MENUET_THREAD_DATA_C_WINDOW = 7; |
KOLIBRI_THREAD_DATA_C_WINDOW = 7; |
;const int |
MENUET_THREAD_DATA_C_HEADER = 8; |
KOLIBRI_THREAD_DATA_C_HEADER = 8; |
;const int |
MENUET_THREAD_DATA_C_BORDER = 9; |
KOLIBRI_THREAD_DATA_C_BORDER = 9; |
;const int |
MENUET_THREAD_DATA_C_TITLE = 10; |
KOLIBRI_THREAD_DATA_C_TITLE = 10; |
;const int |
MENUET_THREAD_DATA_TITLE = 11; |
KOLIBRI_THREAD_DATA_TITLE = 11; |
;const int |
MENUET_THREAD_DATA_PICTURE = 12; |
KOLIBRI_THREAD_DATA_PICTURE = 12; |
;const int |
MENUET_THREAD_DATA_SZ_PICT = 13; |
KOLIBRI_THREAD_DATA_SZ_PICT = 13; |
;const int |
MENUET_THREAD_DATA_LAST_SX = 14; |
KOLIBRI_THREAD_DATA_LAST_SX = 14; |
;const int |
MENUET_THREAD_DATA_LAST_SY = 15; |
KOLIBRI_THREAD_DATA_LAST_SY = 15; |
;const int |
MENUET_THREAD_DATA_LEN = 16; |
KOLIBRI_THREAD_DATA_LEN = 16; |
;const int |
MENUET_MUTEX_MAX_TIME_WAIT = 20; |
;const int |
MENUET_FILE_BLOCK_SIZE = 512; |
KOLIBRI_FILE_BLOCK_SIZE = 512; |
;const int |
MENUET_FILE_MEMORY_OS_NEED = 4096; |
KOLIBRI_FILE_MEMORY_OS_NEED = 4096; |
;/*** |
139,7 → 139,7 |
xchg ebx,[esp+4] |
xchg ebp,[esp+8] |
push esi edi |
sub esp,MENUET_THREAD_DATA_LEN*4 |
sub esp,KOLIBRI_THREAD_DATA_LEN*4 |
mov [esp],ebx |
mov [esp+4],ebp |
mov eax,40 |
165,14 → 165,14 |
jnz .main_test_close_first |
jmp .main_end |
.main_close_first: |
btr dword [esp+MENUET_THREAD_DATA_FLAG*4],31 |
btr dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],31 |
push esp |
call @@MenuetOnClose$qppv |
call @@KolibriOnClose$qppv |
pop ecx |
test al,al |
jnz .main_end |
.main_test_close_first: |
cmp dword [esp+MENUET_THREAD_DATA_FLAG*4],0 |
cmp dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],0 |
jl .main_close_first |
push esp |
push dword 1 |
179,7 → 179,7 |
call @Kolibri@Redraw$qippv |
add esp,8 |
.main_paint_msg: |
or dword [esp+MENUET_THREAD_DATA_FLAG*4],3 |
or dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],3 |
sub esp,1024 |
mov eax,9 |
mov ebx,esp |
190,13 → 190,13 |
mov ecx,[esp+42] |
mov edx,[esp+46] |
add esp,1024 |
cmp ecx,[esp+MENUET_THREAD_DATA_LAST_SX*4] |
cmp ecx,[esp+KOLIBRI_THREAD_DATA_LAST_SX*4] |
jnz .main_size |
cmp edx,[esp+MENUET_THREAD_DATA_LAST_SY*4] |
cmp edx,[esp+KOLIBRI_THREAD_DATA_LAST_SY*4] |
jz .main_paint |
.main_size: |
mov [esp+MENUET_THREAD_DATA_LAST_SX*4],ecx |
mov [esp+MENUET_THREAD_DATA_LAST_SY*4],edx |
mov [esp+KOLIBRI_THREAD_DATA_LAST_SX*4],ecx |
mov [esp+KOLIBRI_THREAD_DATA_LAST_SY*4],edx |
push edx |
push ecx |
push ebx |
205,12 → 205,12 |
mov edx,esp |
push ecx |
push edx |
call @@MenuetOnSize$qpippv |
call @@KolibriOnSize$qpippv |
add esp,24 |
test dword [esp+MENUET_THREAD_DATA_FLAG*4],3 |
test dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],3 |
jz .main_cycle |
.main_paint: |
cmp dword [esp+MENUET_THREAD_DATA_FLAG*4],0 |
cmp dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],0 |
jl .main_close |
push esp |
push dword 0 |
219,15 → 219,15 |
.main_cycle: |
mov eax,11 |
.main_message: |
cmp dword [esp+MENUET_THREAD_DATA_FLAG*4],0 |
cmp dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],0 |
jl .main_close |
int 0x40 |
test eax,eax |
jnz .main_on_message |
cmp dword [esp+MENUET_THREAD_DATA_FLAG*4],0 |
cmp dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],0 |
jne .main_paint |
push esp |
call @@MenuetOnIdle$qppv |
call @@KolibriOnIdle$qppv |
pop ecx |
test eax,eax |
jz .main_cycle |
240,12 → 240,12 |
jmp .main_message |
.main_key_press: |
push esp |
call @@MenuetOnKeyPress$qppv |
call @@KolibriOnKeyPress$qppv |
pop ecx |
jmp .main_cycle |
.main_mouse: |
push esp |
call @@MenuetOnMouse$qppv |
call @@KolibriOnMouse$qppv |
pop ecx |
jmp .main_cycle |
.main_on_message: |
263,9 → 263,9 |
test al,al |
jnz .main_cycle |
.main_close: |
btr dword [esp+MENUET_THREAD_DATA_FLAG*4],31 |
btr dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],31 |
push esp |
call @@MenuetOnClose$qppv |
call @@KolibriOnClose$qppv |
pop ecx |
test al,al |
jz .main_button |
304,7 → 304,7 |
lock dec dword [@Kolibri@_ThreadScanCount+4] |
mov ebp,[esp+4] |
mov ebx,[esp] |
add esp,MENUET_THREAD_DATA_LEN*4 |
add esp,KOLIBRI_THREAD_DATA_LEN*4 |
mov eax,ebp |
pop edi esi |
xchg ebp,[esp+8] |
324,7 → 324,7 |
proc @Kolibri@Redraw$qippv |
push ebp |
mov ebp,[esp+12] |
mov edx,[ebp+MENUET_THREAD_DATA_FLAG*4] |
mov edx,[ebp+KOLIBRI_THREAD_DATA_FLAG*4] |
cmp dword [esp+8],0 |
jl .redraw_only_inv |
jz .redraw_no_frame |
333,7 → 333,7 |
bt edx,30 |
jnc .redraw_begin |
or dl,1 |
mov [ebp+MENUET_THREAD_DATA_FLAG*4],edx |
mov [ebp+KOLIBRI_THREAD_DATA_FLAG*4],edx |
jmp .redraw_end |
.redraw_only_inv: |
test dl,3 |
343,7 → 343,7 |
ret |
.redraw_begin: |
push ebx esi edi |
and dword [ebp+MENUET_THREAD_DATA_FLAG*4],0xFFFFFFFC |
and dword [ebp+KOLIBRI_THREAD_DATA_FLAG*4],0xFFFFFFFC |
test dl,2 |
jz .redraw_picture |
mov eax,12 |
350,13 → 350,13 |
mov ebx,1 |
int 0x40 |
xor eax,eax |
mov ebx,[ebp+MENUET_THREAD_DATA_X*4] |
mov ecx,[ebp+MENUET_THREAD_DATA_Y*4] |
mov edx,[ebp+MENUET_THREAD_DATA_C_WINDOW*4] |
mov esi,[ebp+MENUET_THREAD_DATA_C_HEADER*4] |
mov edi,[ebp+MENUET_THREAD_DATA_C_BORDER*4] |
mov ebx,[ebp+KOLIBRI_THREAD_DATA_X*4] |
mov ecx,[ebp+KOLIBRI_THREAD_DATA_Y*4] |
mov edx,[ebp+KOLIBRI_THREAD_DATA_C_WINDOW*4] |
mov esi,[ebp+KOLIBRI_THREAD_DATA_C_HEADER*4] |
mov edi,[ebp+KOLIBRI_THREAD_DATA_C_BORDER*4] |
int 0x40 |
mov edx,[ebp+MENUET_THREAD_DATA_TITLE*4] |
mov edx,[ebp+KOLIBRI_THREAD_DATA_TITLE*4] |
test edx,edx |
jz .window_defined |
mov edi,edx |
370,7 → 370,7 |
jz .window_defined |
mov eax,4 |
mov ebx,0x00070007 |
mov ecx,[ebp+MENUET_THREAD_DATA_C_TITLE*4] |
mov ecx,[ebp+KOLIBRI_THREAD_DATA_C_TITLE*4] |
int 0x40 |
.window_defined: |
mov eax,12 |
380,12 → 380,12 |
mov eax,12 |
mov ebx,2 |
int 0x40 |
mov esi,[ebp+MENUET_THREAD_DATA_PICTURE*4] |
mov esi,[ebp+KOLIBRI_THREAD_DATA_PICTURE*4] |
test esi,esi |
jz .redraw_end_draw |
mov ecx,[ebp+MENUET_THREAD_DATA_SZ_PICT*4] |
mov ecx,[ebp+KOLIBRI_THREAD_DATA_SZ_PICT*4] |
jecxz .redraw_end_draw |
mov al,byte [ebp+MENUET_THREAD_DATA_C_WINDOW*4+3] |
mov al,byte [ebp+KOLIBRI_THREAD_DATA_C_WINDOW*4+3] |
and al,15 |
mov edx,MENUET_BORDER_SIZE*65536+MENUET_HEADER_SIZE |
cmp al,3 |
448,11 → 448,11 |
mov eax,dword [@Kolibri@_ThreadTable+eax*4] |
jmp .exit_process_test |
.exit_process_next: |
mov eax,dword [eax+MENUET_THREAD_DATA_NEXT*4] |
mov eax,dword [eax+KOLIBRI_THREAD_DATA_NEXT*4] |
.exit_process_test: |
test eax,eax |
jz .exit_process_continue |
cmp ebx,[eax+MENUET_THREAD_DATA_PID*4] |
cmp ebx,[eax+KOLIBRI_THREAD_DATA_PID*4] |
jnz .exit_process_next |
mov eax,18 |
mov ebx,2 |
492,7 → 492,7 |
proc @Kolibri@ReturnMessageLoop$qppv,@Kolibri@ThreadMain$qpvt1 |
mov esp,[esp+4] |
bt dword [esp+MENUET_THREAD_DATA_FLAG*4],30 |
bt dword [esp+KOLIBRI_THREAD_DATA_FLAG*4],30 |
jc Menuet_main_end |
jmp Menuet_main_cycle |
endp |
584,6 → 584,17 |
ret |
endp |
proc @Kolibri@DrawText$qssipxc uses ebx |
mov eax,4 |
mov ebx,[esp+8-2] |
mov bx,[esp+12] |
mov ecx,[esp+16] |
or ecx,0x80000000 |
mov edx,[esp+20] |
int 0x40 |
ret |
endp |
proc @Kolibri@GetProcessInfo$qpuipct1t1piui uses ebx esi edi |
sub esp,1024 |
mov eax,9 |
646,7 → 657,7 |
proc @Kolibri@GetPid$qppv |
mov ecx,[esp+4] |
mov eax,[ecx+MENUET_THREAD_DATA_PID*4] |
mov eax,[ecx+KOLIBRI_THREAD_DATA_PID*4] |
ret |
endp |
691,11 → 702,11 |
mov ecx,[esp+4] |
jmp .get_thread_data_test |
.get_thread_data_loop: |
mov eax,dword [eax+MENUET_THREAD_DATA_NEXT*4] |
mov eax,dword [eax+KOLIBRI_THREAD_DATA_NEXT*4] |
.get_thread_data_test: |
test eax,eax |
jz .get_thread_data_end |
cmp ecx,[eax+MENUET_THREAD_DATA_PID*4] |
cmp ecx,[eax+KOLIBRI_THREAD_DATA_PID*4] |
jnz .get_thread_data_loop |
.get_thread_data_end: |
lock dec dword [@Kolibri@_ThreadScanCount] |
/programs/demos/life2/include/kos_start.inc |
---|
52,7 → 52,7 |
end if |
} |
macro define x,[link] |
macro define_f x,[link] |
{ |
common |
if x eq |
/programs/demos/life2/life2.cpp |
---|
1699,7 → 1699,7 |
SetPicture(picture, (unsigned short)xpar.win, (unsigned short)ypar.win, th); |
} |
bool MenuetOnStart(TStartData &me_start, TThreadData th) |
bool KolibriOnStart(TStartData &me_start, TThreadData th) |
{ |
randomize(); |
me_start.WinData.Title = "Black and white Life"; |
1714,7 → 1714,7 |
return true; |
} |
bool MenuetOnClose(TThreadData) |
bool KolibriOnClose(TThreadData) |
{ |
SetPictureSize(0, 0); |
SetPoleSize(0, 0); |
1721,7 → 1721,7 |
return true; |
} |
int MenuetOnIdle(TThreadData th) |
int KolibriOnIdle(TThreadData th) |
{ |
static const unsigned int WAIT_TIME = 2, GEN_TIME = 1; |
int res = -1; |
1788,7 → 1788,7 |
return res; |
} |
void MenuetOnSize(int window_rect[], Kolibri::TThreadData th) |
void KolibriOnSize(int window_rect[], Kolibri::TThreadData th) |
{ |
unsigned short w, h; |
GetClientSize(w, h, window_rect[2], window_rect[3], th); |
1798,7 → 1798,7 |
Paint(PaintWNull | PaintWNow, th); |
} |
void MenuetOnKeyPress(TThreadData th) |
void KolibriOnKeyPress(TThreadData th) |
{ |
int ch; |
while ((ch = GetKey()) >= 0) |
1898,7 → 1898,7 |
} |
} |
void MenuetOnMouse(TThreadData th) |
void KolibriOnMouse(TThreadData th) |
{ |
short xp = 0, yp = 0; |
int w, h, x, y, xx, yy, m; |