Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 8132 → Rev 8133

/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;