life2

Entertainment for 5 minutes, hours, days
  • Хотя таким подобный способом 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
  • Попробую.
    Только на сервере это как-то нужно обойти.
    И чтобы новый fasm работал
    UPD
    Да, заработало, спасибо.
    Только на сервере лучше обойти нормально.
    Еще заметил что title у окна какой то неправильный, маленький. Хотя в том примере diamond'а заголовок нормальный
    И еще, удалить бы экзешники с сервера. Они на сервере не нужны для сборки. t2fasm отлично пересобирается для linux, а вот что делать с bmp2h :?:
  • 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 файлов.
  • По мне как то кряк использовать не очень хорошо :D
    А вот исправить define и $ можно

    Попробовать надо
  • скоро будет готова?
    If there were no God, he would have to be invented.
    Voltaire

    Code: Select all

    program God
    begin
    
  • Last edited by maxcodehack on Thu Nov 05, 2020 7:48 am, edited 1 time in total.
  • 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*/)
    {}
    Потому на вики пока менять еще не буду.
  • 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.
    
  • 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 смотря какой файл положить.
  • Теперь осталась только одна проблема - с equ
    И конечно полностью избавится от менуэт, и слиять код диамонда и yogev ezra
    Last edited by maxcodehack on Thu Nov 05, 2020 6:53 pm, edited 1 time in total.
  • Файлы для компиляции обновленного Hello word от diamond-а положил в архив.
    Hello.7Z (19.28 KiB)
    Downloaded 210 times
    Для компиляции нужно взять недостающие новые файлы из папки life. Разница там в стилях окна и в функции рисования, потому пока свести к общему знаменателю не получается.
    maxcodehack wrote:Теперь осталась только одна проблема - с equ
    для этого нужно доработать перестановку этих строк в t2fasm.
  • Еще один вопрос. Не нравится мне, что все лежит в папке с игрой. Вдруг вот еще на нем программы будут, что копировать? По мне можно в 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
    
    Можно использовать хорошие штуки - найти и заменить - в текстовых редакторах
  • Позаменял в редаторе menuet на kolibri
    На SVN пока не заливаю, но ВСЕ РАБОТАЕТ. Просто просмотри
    Attachments
    life2__KOS.zip (327.64 KiB)
    Downloaded 220 times
  • 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 пока не заливаю, но ВСЕ РАБОТАЕТ. Просто просмотри
    Это очень хорошо что работает.
  • Who is online

    Users browsing this forum: No registered users and 2 guests