Page 1 of 5

life2

Posted: Tue Nov 03, 2020 2:01 pm
by maxcodehack
Игра life2 - Conway's life
Единственный пример программы на BorlandC++
http://websvn.kolibrios.org/listing.php ... c9bc90d7ba

Re: life2

Posted: Tue Nov 03, 2020 4:54 pm
by IgorA
Хотя таким подобный способом helloworld из статьи diamond'а собрался.
Еще нужно настроить автосборку life2 на сервере
Попробуй строки с equ в начало файла перекинуть.

Code: Select all

@@Kolibri@ReadCommonColors$qpui equ @Kolibri@ReadCommonColors$qpui
@@Kolibri@GetPid$qv equ @Kolibri@GetPid$qv
@@Kolibri@Lock$qp14Kolibri@TMutex equ @Kolibri@Lock$qp14Kolibri@TMutex
...
@@Kolibri@GetMouseButton$qv equ @Kolibri@GetMouseButton$qv

Re: life2

Posted: Tue Nov 03, 2020 5:27 pm
by maxcodehack
Попробую.
Только на сервере это как-то нужно обойти.
И чтобы новый fasm работал
UPD
Да, заработало, спасибо.
Только на сервере лучше обойти нормально.
Еще заметил что title у окна какой то неправильный, маленький. Хотя в том примере diamond'а заголовок нормальный
И еще, удалить бы экзешники с сервера. Они на сервере не нужны для сборки. t2fasm отлично пересобирается для linux, а вот что делать с bmp2h :?:

Re: life2

Posted: Tue Nov 03, 2020 11:42 pm
by IgorA
maxcodehack wrote:И чтобы новый fasm работал
Новый fasm не работает по 2-м причинам:
1) в коде есть макрос define, которым программа t2fasm обделывает все функции из полученного *.asm файла.
В новых версиях fasm появилась команда define, которая совпадает с именем макроса и потому компиляция не идет.
По этой причине я в (rev 8129) в подключаемых *.inc файлах заменил макрос define на макрос proc, однако осталась проблема с программой t2fasm.
2) в коде который создает bcc32 имена некоторых меток начинаются со знака $.
А в новых версиях fasm имена меток не могут начинаться со знака $.
Т.е. для компиляции нужно исправить эти проблемы.

Предлагаю такой вариант решения:
Создаем *.asm файл с таким содержанием:
Spoiler:

Code: Select all

;Crack for Borland C++ 5.5.1
use32

file 'bcc32.exe':0,0x4a8f
dd 0x90909090,0x90909090 ;fix end proc
db 0xb8
dd 0x4a626b

file 'bcc32.exe':0x4a9c,0x5753-0x4a9c
dd 0x4b2472 ;fix label byte
file 'bcc32.exe':0x5757,0x575a-0x5757
dd 0x4b2472 ;fix proc near
file 'bcc32.exe':0x575e,0x5761-0x575e
dd 0x4b2472 ;fix label word
file 'bcc32.exe':0x5765,0x5768-0x5765
dd 0x4b2472 ;fix label dword
file 'bcc32.exe':0x576c,0x576f-0x576c
dd 0x4b2472 ;fix label qword
file 'bcc32.exe':0x5773,0x5776-0x5773
dd 0x4b2472 ;fix label tbyte

file 'bcc32.exe':0x577a,0x56216-0x577a
db '_' ;fix '$' to '_'
file 'bcc32.exe':0x56217,0xd4400-0x56217

;0x4b2472 - ':',13,10,0
;0x4a626b - 13,10,0
Ложим его рядом с компилятором bcc32.exe и делаем ему кряк, описанный в *.asm файле. Исходный файл bcc32.exe куда-нибудь убираем, чтобы не мешал. Переименовываем получившийся скомпилированный файл в bcc32.exe. После чего компилируем все как обычно, но при этом убираем макрос macro define x,[link] ... из файла kos_start.inc .

Может получилось еще сложнее и более накручено, но зато у меня компилируется новым fasm-ом. Кряк компилятору делается одноразово и должен подходить к компиляции разных *.cpp файлов.

Re: life2

Posted: Wed Nov 04, 2020 9:02 am
by maxcodehack
По мне как то кряк использовать не очень хорошо :D
А вот исправить define и $ можно

Попробовать надо

Re: half-life2

Posted: Wed Nov 04, 2020 12:13 pm
by bad_Dr3dd0x
скоро будет готова?

Re: life2

Posted: Wed Nov 04, 2020 12:41 pm
by maxcodehack

Re: life2

Posted: Thu Nov 05, 2020 12:18 am
by IgorA
maxcodehack wrote:А вот исправить define и $ можно
Думаю можно заменить define на define_f что-бы не совпадало. А заменить $ без кряка будет сложновато, нужно находить все метки в коде в программе t2fasm
maxcodehack wrote:По мне как то кряк использовать не очень хорошо
Пока что у нас нет выбора.

rev 8133
Убрал еще немного Menuet-а из кода.
Оказалось что файлы menuet.h в life2 и в примере "Hello word" разные ... Настроить работу нового примера "Hello word" пока не получается. Компилируется но не печатает текст, потому как diamond ввел новую функцию MenuetOnDraw и изменил алгоритм рисования.
Spoiler:

Code: Select all

#include <kolibri.h>
#include <kos_heap.h>
#include <kos_file.h>

using namespace Kolibri;

const char header[] = "HelloWorld test";
const char string[] = "Hello, World!";

bool KolibriOnStart(TStartData &me_start, TThreadData /*th*/)
{
	me_start.Left = 10;
	me_start.Top = 40;
	me_start.Width = 150;
	me_start.Height = 80;
	me_start.WinData.Title = header;
	return true;
}

void KolibriOnPaint(void)
{
	DrawText(30,10,0,string);
}

bool KolibriOnClose(TThreadData /*th*/)
{return true;}
int KolibriOnIdle(TThreadData /*th*/)
{return -1;}
void KolibriOnSize(int /*window_rect*/[], TThreadData /*th*/)
{}
void KolibriOnKeyPress(TThreadData /*th*/)
{GetKey();}
void KolibriOnMouse(TThreadData /*th*/)
{}
Потому на вики пока менять еще не буду.

Re: life2

Posted: Thu Nov 05, 2020 3:01 pm
by maxcodehack
Spoiler:

Code: Select all

<<<<<<< .mine
macro _define x,[link]
||||||| .r8129
macro define x,[link]
=======
macro define_f x,[link]
>>>>>>> .r8133
Что это странное в коде?
Был какой то глюк svn'а
___________________
Крякнул компилятор, компилирую фасмом:

Code: Select all

flat assembler  version 1.71.57  (16384 kilobytes memory)
kos_cdlg.inc [45]:
  mov  ebx,[ebp+MENUET_THREAD_DATA_X*4]
processed: mov ebx,[ebp+MENUET_THREAD_DATA_X*4]
error: undefined symbol 'MENUET_THREAD_DATA_X'.
Это life2
А когда пробую helloworld собрать новым фасмом:

Code: Select all

flat assembler  version 1.71.57  (16384 kilobytes memory)
include\me_func.inc [80]:
nextdef MenuetEntryPoint
include\me_start.inc [85] nextdef [3]:
    end if
processed: end if
error: unexpected instruction.

Re: life2

Posted: Thu Nov 05, 2020 5:28 pm
by IgorA
maxcodehack wrote:<<<<<<< .mine
macro _define x,[link]
||||||| .r8129
macro define x,[link]
=======
macro define_f x,[link]
>>>>>>> .r8133
Такое бывает если пользователь делает изменения в файле и на svn также делаются изменения в этом же месте. Например ты заменил макрос define на _define, а я заменил define на define_f. При обновлении файла svn не хочет удалять твои правки и пишет сразу 3 версии кода, что было, твою версию и что стало на svn. Можно попробовать просто удалить файл и загрузить его снова, должна загрузиться последняя версия.
maxcodehack wrote:flat assembler  version 1.71.57  (16384 kilobytes memory)
kos_cdlg.inc [45]:
  mov  ebx,[ebp+MENUET_THREAD_DATA_X*4]
processed: mov ebx,[ebp+MENUET_THREAD_DATA_X*4]
error: undefined symbol 'MENUET_THREAD_DATA_X'.
это я забыл файл kos_cdlg.inc обновить, потому не работало, скинул его в rev 8134
helloworld у меня пока что не работает, потому для него нужен другой файл kolibri.inc я пока не знаю как с этим быть ложить 2 файла сразу не хочется, а в один файл пока свести не могу. Получается или будет life2 работать или helloworld смотря какой файл положить.

Re: life2

Posted: Thu Nov 05, 2020 6:48 pm
by maxcodehack
Теперь осталась только одна проблема - с equ
И конечно полностью избавится от менуэт, и слиять код диамонда и yogev ezra

Re: life2

Posted: Thu Nov 05, 2020 6:53 pm
by IgorA
Файлы для компиляции обновленного Hello word от diamond-а положил в архив.
Hello.7Z (19.28 KiB)
Downloaded 211 times
Для компиляции нужно взять недостающие новые файлы из папки life. Разница там в стилях окна и в функции рисования, потому пока свести к общему знаменателю не получается.
maxcodehack wrote:Теперь осталась только одна проблема - с equ
для этого нужно доработать перестановку этих строк в t2fasm.

Re: life2

Posted: Thu Nov 05, 2020 6:59 pm
by maxcodehack
Еще один вопрос. Не нравится мне, что все лежит в папке с игрой. Вдруг вот еще на нем программы будут, что копировать? По мне можно в contrib создать папку kos32-bcc, и там будет лежать t2fasm, патч, и helloworld, и набор библиотек. Тогда путь указывать к одной папке.
Только это можно сделать тогда, когда слияем набор инклудников
grep'нул. Поможет полностью избавится от менуэта:
Spoiler:

Code: Select all

maxim@maxim-pc:~$ grep -r Menuet /media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:Menuet_SegmentInit:
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:Menuet_SegmentExit:
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:Menuet_SegmentInitEnd:
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:Menuet_SegmentExitEnd:
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:macro Menuet_Put_MovEaxVal_Ret	address,val
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  Menuet_Put_MovEaxVal_Ret  @Kolibri@GetPid$qv,edx
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:if defined MenuetHeapInit
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  call MenuetHeapInit	; Initialize a dynamic heap and create new memory in its begin.
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:if defined MenuetHeapFreeAndThreadFinish
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  call MenuetHeapFreeAndThreadFinish   ; Free the given memory and finish the thread,
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  Menuet_Put_MovEaxVal_Ret  @Kolibri@GetThreadData$qv,esp
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:if defined Menuet_SegmentInit & defined Menuet_SegmentInitEnd
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  push Menuet_SegmentInitEnd
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  push Menuet_SegmentInit
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:if defined Menuet_SegmentExit & defined Menuet_SegmentExitEnd
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  push Menuet_SegmentExitEnd
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  push Menuet_SegmentExit
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:;  mov	dword [esp],Menuet_abort_string
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  call Menuet_HashInt
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  jmp  Menuet_main_end
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  jc   Menuet_main_end
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  jmp  Menuet_main_cycle
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:Menuet_HashInt:
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  mul  dword [Menuet_hash_int_val0]
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  mul  dword [Menuet_hash_int_val1]
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:Menuet_hash_int_val0:
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:Menuet_hash_int_val1:
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  call Menuet_HashInt
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:proc Menuet_MutexLockNoWait
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:proc Menuet_MutexLockWait uses ebx
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:proc Menuet_MutexLockWaitTime
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:proc Menuet_MutexLock
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  mov  eax,Menuet_MutexLockNoWait
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  jmp  Menuet_MutexLock
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  mov  eax,Menuet_MutexLockWait
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  jmp  Menuet_MutexLock
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  mov  eax,Menuet_MutexLockWaitTime
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  jmp  Menuet_MutexLock
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:proc Menuet_MutexLockRec
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  mov  dword [esp],Menuet_try_lock_rec_overflow_string
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  mov  eax,Menuet_MutexLockNoWait
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  jmp  Menuet_MutexLockRec
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  mov  eax,Menuet_MutexLockWait
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  jmp  Menuet_MutexLockRec
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  mov  eax,Menuet_MutexLockWaitTime
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  jmp  Menuet_MutexLockRec
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  mov  dword [esp],Menuet_unlock_rec_notlocked_string
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:if defined MenuetHeapAlloc
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  call MenuetHeapAlloc	 ; Create new dynamic memory of the given size
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  mov  dword [edx],Menuet_ThreadFinish
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:if defined MenuetHeapFree
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  call MenuetHeapFree	; Delete the given dynamic memory
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:Menuet_abort_string:
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:Menuet_try_lock_rec_overflow_string:
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:Menuet_unlock_rec_notlocked_string:
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.h:	MemoryHeap::TFreeSpace _MenuetFreeSpace;
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.h:	MemoryHeap::TMemBlock  _MenuetMemBlock;
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.h:		MemoryHeap::InitFreeSpace(_MenuetFreeSpace);
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.h:		_MenuetMemBlock = MemoryHeap::CreateBlock(begin, end, _MenuetFreeSpace);
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.h:		unsigned int use_beg = (unsigned int)MemoryHeap::BlockBegin(_MenuetMemBlock) +
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.h:		return MemoryHeap::Alloc(_MenuetFreeSpace, use_size);
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.h:		void *res = MemoryHeap::Alloc(_MenuetFreeSpace, size);
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.h:			unsigned use_mem = (unsigned int)MemoryHeap::BlockEndFor(_MenuetMemBlock, size);
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.h:				res = MemoryHeap::Alloc(_MenuetFreeSpace, size);
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.h:		void *res = MemoryHeap::ReAlloc(_MenuetFreeSpace, mem, size);
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.h:			unsigned use_mem = (unsigned int)MemoryHeap::BlockEndFor(_MenuetMemBlock, size);
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.h:				res = MemoryHeap::ReAlloc(_MenuetFreeSpace, mem, size);
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.h:		MemoryHeap::Free(_MenuetFreeSpace, mem);
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.inc:MenuetHeapInit = @@Kolibri@_HeapInit$qpvt1t1
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.inc:MenuetHeapAlloc = @@Kolibri@Alloc$qui
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.inc:MenuetHeapReAlloc = @@Kolibri@ReAlloc$qpvui
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.inc:MenuetHeapFree = @@Kolibri@Free$qpv
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.inc:MenuetHeapFreeAndThreadFinish = @Kolibri@_FreeAndThreadFinish$qpvpi
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.inc:  push dword [@Kolibri@_MenuetMemBlock]
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.inc:  push @Kolibri@_MenuetFreeSpace
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_lib.inc:  ja   Menuet_floor_end
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_lib.inc:Menuet_floor_end:
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/menuet_win.cpp:const char szWindowClass[] = "Menuet window";
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/menuet_win.cpp:			while (MenuetOnIdle((TThreadData)(&ThreadDataStruct)) == 0 &&
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/menuet_win.cpp:			MenuetOnMouse((TThreadData)(&ThreadDataStruct));
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/menuet_win.cpp:			MenuetOnMouse((TThreadData)(&ThreadDataStruct));
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/menuet_win.cpp:				MenuetOnMouse((TThreadData)(&ThreadDataStruct));
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/menuet_win.cpp:			MenuetOnMouse((TThreadData)(&ThreadDataStruct));
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/menuet_win.cpp:				MenuetOnMouse((TThreadData)(&ThreadDataStruct));
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/menuet_win.cpp:				MenuetOnMouse((TThreadData)(&ThreadDataStruct));
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/menuet_win.cpp:			MenuetOnKeyPress((TThreadData)(&ThreadDataStruct));
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/menuet_win.cpp:			MenuetOnSize(window_rect, (TThreadData)(&ThreadDataStruct));
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/menuet_win.cpp:			if (MenuetOnClose((TThreadData)(&ThreadDataStruct)))
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/menuet_win.cpp:		if (MenuetOnStart(start_data, (TThreadData)(&ThreadDataStruct)))
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/menuet_win.cpp:				if (MenuetOnClose((TThreadData)(&ThreadDataStruct)))
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/write_macro.inc:  jmp  @Menuet@DebugPutString$qpxc




maxim@maxim-pc:~$ grep -r MENUET /media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/cpp2asm.bat:kos32-bcc -S -v- -R- -6 -a4 -O2 -Og -Oi -Ov -OS -k- -D__MENUET__ -Iinclude life2.cpp
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kolibri.h:#define MENUET_MUTEX_INIT {}   // Simple mutex initializer, cat be redefined in a realization of the library
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kolibri.h:#define MENUET_REC_MUTEX_INIT {}   // Recursive mutex initializer, cat be redefined in a realization of the library
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kolibri.h:#ifdef __MENUET__
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kolibri.h:#undef  MENUET_MUTEX_INIT
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kolibri.h:#define MENUET_MUTEX_INIT {0x40}   // Simple mutex initializer, cat be redefined in a realization of the library
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kolibri.h:#undef  MENUET_REC_MUTEX_INIT
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kolibri.h:#define MENUET_REC_MUTEX_INIT {0x20,-1}   // Recursive mutex initializer, cat be redefined in a realization of the library
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kolibri.h:	TMutex _ThreadMutex = MENUET_MUTEX_INIT;
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kolibri.h:		border_size = MENUET_BORDER_SIZE;
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kolibri.h:		header_size = short(((win_type & 15) == 3) ? _GetSkinHeader() : MENUET_HEADER_SIZE);
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kolibri.h:#else   // def __MENUET__
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kolibri.h:#undef  MENUET_MUTEX_INIT
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kolibri.h:#define MENUET_MUTEX_INIT  TMutex()
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kolibri.h:#undef  MENUET_REC_MUTEX_INIT
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kolibri.h:#define MENUET_REC_MUTEX_INIT  TRecMutex()
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kolibri.h:#endif  // else: def __MENUET__
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_file.h:#ifdef __MENUET__
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_file.h:#else   // def  __MENUET__
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_file.h:#endif  // else: def  __MENUET__
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:MENUET_BORDER_SIZE = 4;
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:MENUET_HEADER_SIZE = 20;
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:MENUET_MUTEX_MAX_TIME_WAIT  = 20;
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  cmp  ebx,MENUET_MUTEX_MAX_TIME_WAIT
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  mov  ebx,MENUET_MUTEX_MAX_TIME_WAIT
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  mov  edx,MENUET_BORDER_SIZE*65536+MENUET_HEADER_SIZE
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  cmp  ebx,MENUET_MUTEX_MAX_TIME_WAIT
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  mov  ebx,MENUET_MUTEX_MAX_TIME_WAIT
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  cmp  ebx,MENUET_MUTEX_MAX_TIME_WAIT
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_func.inc:  mov  ebx,MENUET_MUTEX_MAX_TIME_WAIT
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.h:#ifndef __MENUET_HEAP_H_INCLUDED_
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.h:#define __MENUET_HEAP_H_INCLUDED_
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.h:#ifdef __MENUET__
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.h:	TMutex _MemHeapMutex = MENUET_MUTEX_INIT;
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.h:#endif  // def  __MENUET__
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.h:#endif  // ndef __MENUET_HEAP_H_INCLUDED_
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.inc:  cmp  ebx,MENUET_MUTEX_MAX_TIME_WAIT
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_heap.inc:  mov  ebx,MENUET_MUTEX_MAX_TIME_WAIT
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_lib.h:#ifndef __MENUET_LIB_H_INCLUDED_
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_lib.h:#define __MENUET_LIB_H_INCLUDED_
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_lib.h:#endif  // __MENUET_LIB_H_INCLUDED_
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/include/kos_start.inc:  db 'MENUET01'
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/kos_cdlg.h:#ifndef __MENUET_FILE_OPEN_H_INCLUDED_
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/kos_cdlg.h:#define __MENUET_FILE_OPEN_H_INCLUDED_
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/kos_cdlg.h:#define MENUET_OPEN_FILE_INIT {}   // Initializer of the file open struct, cat be redefined in a realization of the library
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/kos_cdlg.h:#ifdef __MENUET__
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/kos_cdlg.h:#undef  MENUET_OPEN_FILE_INIT
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/kos_cdlg.h:#define MENUET_OPEN_FILE_INIT  {0,0}
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/kos_cdlg.h:#else   // else: def __MENUET__
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/kos_cdlg.h:#undef  MENUET_OPEN_FILE_INIT
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/kos_cdlg.h:#define MENUET_OPEN_FILE_INIT  TOpenFileStruct()
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/kos_cdlg.h:#endif  // __MENUET__
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/kos_cdlg.h:#endif  // __MENUET_FILE_OPEN_H_INCLUDED_
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/life2.cpp:TOpenFileStruct open_file_str = MENUET_OPEN_FILE_INIT;
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/life2.cpp:#ifdef __MENUET__
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/life2.cpp:#ifndef __MENUET__
/media/maxim/E22406D62406AE1B/SVNKOS/programs/demos/life2/me_make.inc:;//COMPILER//  bcc32 -S -v- -R- -6 -a4 -O2 -Og -Oi -Ov -OS -k- -D__MENUET__ -Iinclude
Можно использовать хорошие штуки - найти и заменить - в текстовых редакторах

Re: life2

Posted: Thu Nov 05, 2020 7:55 pm
by maxcodehack
Позаменял в редаторе menuet на kolibri
На SVN пока не заливаю, но ВСЕ РАБОТАЕТ. Просто просмотри

Re: life2

Posted: Thu Nov 05, 2020 10:53 pm
by IgorA
maxcodehack wrote:Еще один вопрос. Не нравится мне, что все лежит в папке с игрой. Вдруг вот еще на нем программы будут, что копировать? По мне можно в contrib создать папку kos32-bcc, и там будет лежать t2fasm, патч, и helloworld, и набор библиотек.
Думаю что нужно отдельную папку сделать для Bcc. Но в ней для начала закинуть helloworld, потому как life2 программа сильно накрученная и для первоначальных примеров работы не подходит. В ней рисование окна скорее всего делается по таймеру, а в helloworld окно рисуется при системной перерисовке, потому они не стыкуются между собой. Также если делать такую папку то в последствии хорошо было-бы наклепать разных примеров, наподобие как у 0CodErr-а про Delphi http://board.kolibrios.org/viewtopic.ph ... lit=Delphi
maxcodehack wrote:Можно использовать хорошие штуки - найти и заменить - в текстовых редакторах
Я так и делал в Notepad++, просто все сразу не убирал потому как не компилировалось... Например долго не мог выловить ошибку с функциями использующими TMutex:

Code: Select all

@Kolibri@Lock$qp14Kolibri@TMutex
позже выяснил что с Menuet-ом вместо цифры 14 генерировалась цифра 13, в других функциях также на 1 меньше. После решил кусками заменять и по возможности на svn кидать что-бы не запортить случайно что-то.
maxcodehack wrote:Позаменял в редаторе menuet на kolibri
На SVN пока не заливаю, но ВСЕ РАБОТАЕТ. Просто просмотри
Это очень хорошо что работает.