C--

High-level languages programming questions
  • 68.11 ?
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Mario_r4 wrote:68.11 ?
    Разьве они связаны? В описании прописаны 12 и 13 только как связанные...
  • Alexus wrote:Разьве они связаны? В описании прописаны 12 и 13 только как связанные...
    http://websvn.kolibrios.org/filedetails ... ]Замечания:
    * Предварительно следует инициализировать кучу процесса вызовом
    подфункции 11.[/quote] http://websvn.kolibrios.org/filedetails ... te]Remarks:
    * Before this call one must initialize process heap by call to
    subfunction 11.[/quote]
  • Все получилось, спасибо, надо поправить в Wiki, там этот момент отсуствует.
  • Alexus wrote:Все получилось, спасибо, надо поправить в Wiki, там этот момент отсуствует.
    Где надо поправить? Да и обертки для функций работы с память для С-- давно уж как написаны http://websvn.kolibrios.org/filedetails ... ib%2Fmem.h
    to infinity and beyond
  • В wiki которая первая выходит в гугле по запросу kolibrios api:
    http://wiki.kolibrios.org/wiki/SysFn68/ ... 1.81.D0.B0.

    Эти обертки я видел, для 22 и 23 подфункции там нет.

    P.S. Нашел "You can find the latest API documentation in /kernel/docs/ in the SVN repository (WebSVN)" , извиняюсь. Но оберток все равно нет для 22 и 23 =).
  • Есть ли где-нибудь примеры использования именованной области на С--? Вроде все правильно сделано и EDX=0(ошибки нет), но при этом EAX вместо адреса именованной области отдает 0, что значит ошибку =\
  • Alexus, ты бы лучше привёл конкретный код.
    Пока что, если исходить из кода, приведённого несколькими постами выше:
    Alexus wrote:return EDX;
    скорее всего будет преобразовано в

    Code: Select all

    mov eax, edx
    при создании новой области (SHM_CREATE или SHM_OPEN_ALWAYS):
    edx = 0 - успех, иначе - код ошибки
    Ну вот и получается: успех -> edx=0 -> mov eax, edx -> eax=0
  • Код: http://pastebin.com/PJjdgPEc , извиняюсь за бардак.

    В EAX всегда идет 0, или я чего-то не понимаю или я запутался в указателях =\. Вероятнее всего второе..
  • Code: Select all

            error=EDX;
    ; .......................
            return error;

    Code: Select all

    mov [error], edx
    ; .......................
    mov eax, [error]
    Если область создана успешно, то edx=0.
    Если edx=0, то после error=EDX в error тоже будет 0.
    Если error=0, то после return error в eax тоже будет 0.
  • Да, но если область создана то до return её адрес будет в eax,
    откуда он записывается в buff,
    если ошибки нет error=0, то адрес на который указывает buffer меняется на содержащийся в buff.

    Но в итоге при error=0, я имею адрес буфера=0
  • Может быть, на самом деле, error<>0?

    Code: Select all

    ECX=*name;
    превращается в

    Code: Select all

    8B4D14                   mov     ecx,[ebp+14h]
    0FBE09                   movsx   ecx,[ecx]
    
    последняя команда знаково расширяет байт(0FBE09) по адресу в ecx

    в int2str:

    Code: Select all

    return str;
    превращается в

    Code: Select all

    0FBE8500FFFFFF           movsx   eax,[ebp-100h]
    даже если бы возвращался адрес, возвращать адрес на стеке — плохая идея

    ну и дальше пошло-поехало :)
  • Базовая поддержка коллекций строк (lib/collections.h)
    Коллекции похожи на массивы. Работает все до безобразия просто.

    Code: Select all

    void main()
    {   
    	collection s;
    	s.init(4096);
    	s.add("lorem");
    	s.add("ipsum");
    	s.add("1234566");
    	debugln(s.get(0)); //-> "lorem"
    	debugln(s.get(1)); //-> "ipsum"
    	debugln(s.get(2)); //-> "123456"
    }
    Ограничения: максимум 4096 элементов, нужно знать размер буфера заранее.

    Пример есть в папке CMM/examples/collections.c
    Из хаоса в космос
  • + lib/menu.h
    + examples/menu.c

    Стандартный компонент меню и пример использования.
    Attachments
    menu.gif
    menu.gif (188.09 KiB)
    Viewed 12700 times
    Из хаоса в космос
  • Who is online

    Users browsing this forum: No registered users and 2 guests