Kolibri Foundation Classes (KFC)

Discussing libraries simplifying applications development
  • Ghost

    Code: Select all

     ; carpet bombing
               mov eax, 70
               mov ebx, kill
               int 0x40
     ; still alive ?
     ; head shot...
               mov eax, 9
               mov ebx, 0x80003000
               or ecx, -1
               int 0x40
    kill:
      dd 0
      dd 0
      dd 0
      dd 0x20000
      dd 0x80001001
      db '/RD/1/KERNEL.MNT',0
  • Собственно хочу положить бинарники lick для mingw. Я немного поправил инклуды для юзания оных из g++ т.е.

    Code: Select all

    #ifdef __cplusplus
    extern "C" {
    #endif
    Так-же добавил decl.h

    Собственно из предложение из серии "а давайте." Давайте закончим. Без этой либы фактически невозможно написать kfc, т.к. все ее идеология без использования stl и стандартной библиотеки С++ валится в пух и прах.
    Если мы это сделаем то таким-же нехитрым способом можно будет портировать в kolibri весь gcc т.е. скопилировать его с опциями -I$(INCLUDE) -m32 -nostdinc -nostdlib где в INCLUDE будет естественно libck.

    P.S. надо бы добавть new.h

    P.P.S. Standard of C - C99 http://www.open-std.org/jtc1/sc22/wg14/ ... eV5.10.pdf
    Attachments
    Downloaded 292 times
    Если бы строители строили здания, так же как программисты пишут программы первый же залетевший дятел разрушил бы цивилизацию.
  • Чё-то я не понял то про С, то про ++. Но поддерживаю
    Last edited by shamaz.mazum on Wed Jan 23, 2008 5:04 pm, edited 1 time in total.
    Tinki-vinki, Dipsy, Dipsy, Lala, Lala, Po, Po!
    Teletubbies, teletubbies. Oh, Hello!
  • SHREDER

    А чем ты её компилировал ? Там все объектники в ELF
  • gcc.
    MinGW?
    Tinki-vinki, Dipsy, Dipsy, Lala, Lala, Po, Po!
    Teletubbies, teletubbies. Oh, Hello!
  • Обьектники для MinGW http://www.mingw.org. Это короче говоря gcc для винды асм конечно FASM-мом. Вроде работает.
    Если бы строители строили здания, так же как программисты пишут программы первый же залетевший дятел разрушил бы цивилизацию.
  • SHREDER

    У меня mingw gcc 4.2.1. Он всё компилирует в COFF, а ld линкует только в PE. Я пытался скомпилить в ELF, ничего не вышло. С какими опциями ты компилировал и какой версией ?
  • MinGW 5.1.3 (последний)
    Вот собстно батник который это все и делает.

    Однако лучше сбилдить с помощью make файла.

    Для этого надо сделать нечто вроде

    set PATH=%PATH%;C:\MinGW\bin @или пробить переменную окружения PATH вручную раз и навсегда (только там уже может быть ватком или борланд ибо инсталлеры пишут туда сами)
    mingw32-make
    или даже просто make

    Все опции пробиты в майке
    -I$(INCLUDE) -m32 -nostdinc -nostdlib -DGNUC

    Короче без стандартных либ без стандартных инклудов и ELF.

    Это можно сделать либо просто из командной строки или взять тулзу от mingw MSYS которая делает нечто аналогичное cygwin (только без posix).
    Attachments
    libc-build.rar (40.14 KiB)
    Downloaded 272 times
    Если бы строители строили здания, так же как программисты пишут программы первый же залетевший дятел разрушил бы цивилизацию.
  • SHREDER

    Архив с ошибкой
  • Code: Select all

    @echo off
    echo ####################################################
    echo #           Melibc builder                         #
    echo #  usage: build [clean]                            #
    echo ####################################################
    rem #### CONFIG SECTION ####
    set PATH=%PATH%;C:\MinGW\bin
    set LIBNAME=libck.a
    set INCLUDE=include
    set CC=gcc
    set CFLAGS=-c -nostdinc -DGNUC -I"%cd%\%INCLUDE%"
    set AR=ar
    set ASM=FASM.exe
    set dirs=stdio memory kolibrisys string stdlib
    rem #### END OF CONFIG SECTION ####
    
    set objs=
    set target=%1
    if not "%1"=="clean" set target=all
    
    set INCLUDE="%cd%"
    call :Target_%target%
    
    if ERRORLEVEL 0 goto Exit_OK
    
    echo Probably at runing has been created error
    echo For help send a report...
    pause
    goto :eof
    
    :Compile_C
       %CC% %CFLAGS% %1 -o "%~dpn1.o"
       if not %errorlevel%==0 goto Error_Failed
       set objs=%objs% "%~dpn1.o"
    goto :eof
    
    :Compile_Asm
       %ASM% %1 "%~dpn1.o"
       if not %errorlevel%==0 goto Error_Failed
       set objs=%objs% "%~dpn1.o"
    goto :eof
    
    :Target_clean
       echo cleaning ...
       for %%a in (%dirs%) do del /Q "%%a\*.o"
    goto :Exit_OK
    
    :Target_all
       echo building all ...
       for %%a in (%dirs%) do (
          for %%f in ("%%a\*.asm") do call :Compile_Asm "%%f"
          for %%f in ("%%a\*.c") do call :Compile_C "%%f"
       )
       %AR% -ru %LIBNAME% %objs%
       if not %errorlevel%==0 goto Error_Failed
    goto Exit_OK
    
    :Error_Failed
    echo error: execution failed
    pause
    exit 1
    
    :Exit_OK
    echo ####################################################
    echo # All operations has been done...                  #
    echo # For cleaning run this script with param " clean" #
    echo ####################################################
    pause
    exit 0
    
    И скопируй FASM в папку с libc или пропиши его в патче.
    Если бы строители строили здания, так же как программисты пишут программы первый же залетевший дятел разрушил бы цивилизацию.
  • SHREDER

    У меня тоже 5.1.3, собственно это версия инсталлятора, runtime 3.13, make 3.81, binutils 2.17.50. Я компилирую файл gcc -c -nostdinc -DGNUC -o file.o file.c и получаю COFF. Версия gcc 4.2.1. Поэтому и спрашиваю как тебе удалось скомпилировать в ELF ? Какая у тебя версия gcc стоит, 4.2.1, 3.4.5 ?
  • Да забыл сори. С компилятор 3.4.5. make 3.81

    То у меня уже комплекс сапорта расписываю по пунктам.
    Если бы строители строили здания, так же как программисты пишут программы первый же залетевший дятел разрушил бы цивилизацию.
  • SHREDER

    Спасибо, а то я думал что у меня уже глюки начались. Пару месяцев назад пытался скомпилировать ELF и ничего не вышло. В последних версиях gcc и binutils PE зашит намертво.
  • Собственно поскольку в KOS с текущей libc невозможно использовать STL в виду банального отсутсвия new.h и еще по ряду причин, я тут напедалил пару велосипедов. Все они используют только с либы и функции которые есть в libc.
    Собстно тут три следеющих класса:
    - AraayList - лист (ну или вектор) основанный на массиве. Эфективен по скорости доступа к елементу, но вставка и удаление елемента долгие, к тому-же требуют покрайней мере того-же количества свободной памяти что уже занята массивом для операции вставки или удаления. Однако класс хорош для небольших динамических массивов.
    - LinkedList - лист на двусвязном списке. Доступ к элементу медленный (ибо я не использую алгоритмы бинарного поиска как в STL) но вставка и удалениие быстрые. Жрет памяти в целом больше чем ArrayList но для вставки и удаления памяти особо не нужно.

    - Map содержит пары ключ-значение. Основанно на двусвязном списке. Вообще много приметивнее STL map ибо не проверяет целостность ключа. В качестве ключа надо подсовывать компарабельный тип (char* непойдет и класс в котором не определена операция ==).

    Демки прилогаю (только под виндой запускайте там используется iostream).

    З.Ы. О плохом, Map и LinkedList нельзя использовать вместе. Почему так происходит не знаю но при итерировании LinkedList до вызова дестуктора map в LinkedList итератор end указывает не неверный указатель т.е. например
    если значение end = 0x00007c88 то получается значение 0x00007c880x00007c88.

    Думаю что это это все убожество будет до тех пор в KFC пока не удастся портировать libc и libc++ полностью.
    Attachments
    util.zip (9.93 KiB)
    Downloaded 286 times
    Если бы строители строили здания, так же как программисты пишут программы первый же залетевший дятел разрушил бы цивилизацию.
  • Who is online

    Users browsing this forum: No registered users and 6 guests