Названия системных функций

High-level languages programming questions
  • Вот «набросал» как пример-черновик первых пять функций:
    uKOSFunc.pas:
    Spoiler:unit uKOSFunc;
    interface

    type TkfColor= record R,G,B:Word; end; // Будет ли такое ?!
    type TkfTime= record H,M,S:Word; end; // Будет ли такое ?!
    // в interface процедуры пока не вписывал!!!
    implementation

    //SF_TERMINATE_PROCESS=-1
    procedure TerminateProcess; begin end;

    //SF_CREATE_WINDOW=0 ; define and draw the window
    procedure CreateWindow(
    x,y:Word; SizeX,SizeY:Word;
    // КООРДИНАТЫ и размер
    WindowColor:Cardinal;
    // mainAreaColour ?! - Цвет //или всё таки WindowColor:TkfColor
    WindowStyleX,WindowStyleY:Byte;
    // mainAreaType ?! в sysfuncr стиль окна вхожа в цвет * edx = 0xXYRRGGBB, где: * Y = стиль окна:
    // думаю правильно делать отдельно! т.е. цвет отдельно color, стиль отдельно StyleWindow
    HeadColor:Cardinal;
    // цвет заголовка //или всё таки WindowColor:TkfColor и вот опять же надо разделять со стилями
    HeadStyleX,HeadStyleY:Byte;
    // headerType ?!
    FrameColor:Cardinal
    // borderColour?! цвет рамки //или всё таки FrameColor:TkfColor
    ); begin end;

    // SF_PUT_PIXEL=1 ; draw pixel to the window
    procedure PutPixel(
    x,y:Word;
    // координаты
    Color:Cardinal
    // цвет
    ); begin end;

    //Функцию 2 предлагаю "разбить" на две функции, считаю что так будет удобней например
    // в циклах ожидания нажатия GetKeyStatus и после нажатия опрос кода самой клвиши
    // GetKey
    //SF_GET_KEY=2 ; get code of the pressed key
    Function GetKeyStatus:Boolean;begin end;
    Function GetKey:Byte;begin end;

    //SF_GET_SYS_TIME=3
    Function GetSysTime:Cardinal;begin end;
    // или GetSysTime:TkfTime; ?

    //SF_DRAW_TEXT=4 ДОРАБОТАТЬ !!!
    procedure DrawText(x,y:Word;Color:Cardinal;fontType:Byte;t:string);
    begin end;

    //SF_SLEEP=5
    procedure Sleep(Value:Cardinal); begin end; // ; pause process

    end.
    Тем кто не умеет и не хочет читать поскакалевские файлы, вот «перевод» программой «Delphi2Cpp»,
    файл uKOSFunc.h:
    Spoiler:#ifndef uKOSFuncH
    #define uKOSFuncH


    #include <System.hpp>


    struct TkfColor;
    struct TkfTime;




    struct TkfColor {
    WORD R, G, B;
    }; // Будет ли такое ?!




    struct TkfTime {
    WORD H, M, S;
    }; // Будет ли такое ?!
    // в interface процедуры пока не вписывал!!!


    #endif // uKOSFuncH
    ...и файл файл uKOSFunc.cpp:
    Spoiler:#include <vcl.h>
    #pragma hdrstop

    #include "uKOSFunc.h"



    //SF_TERMINATE_PROCESS=-1


    #include <System.hpp>


    typedef unsigned char unsignedchar;
    typedef unsigned int unsignedint;



    void __fastcall TerminateProcess( )
    {
    }

    //SF_CREATE_WINDOW=0 ; define and draw the window



    void __fastcall CreateWindow( WORD x, WORD y, WORD SizeX, WORD SizeY,
    // КООРДИНАТЫ и размер
    unsignedint WindowColor,
    // mainAreaColour ?! - Цвет //или всё таки WindowColor:TkfColor
    unsignedchar WindowStyleX, unsignedchar WindowStyleY,
    // mainAreaType ?! в sysfuncr стиль окна вхожа в цвет * edx = 0xXYRRGGBB, где: * Y = стиль окна:
    // думаю правильно делать отдельно! т.е. цвет отдельно color, стиль отдельно StyleWindow
    unsignedint HeadColor,
    // цвет заголовка //или всё таки WindowColor:TkfColor и вот опять же надо разделять со стилями
    unsignedchar HeadStyleX, unsignedchar HeadStyleY,
    // headerType ?!
    unsignedint FrameColor
    // borderColour?! цвет рамки //или всё таки FrameColor:TkfColor
    )
    {
    }

    // SF_PUT_PIXEL=1 ; draw pixel to the window



    void __fastcall PutPixel( WORD x, WORD y,
    // координаты
    unsignedint Color
    // цвет
    )
    {
    }

    //Функцию 2 предлагаю "разбить" на две функции, считаю что так будет удобней например
    // в циклах ожидания нажатия GetKeyStatus и после нажатия опрос кода самой клвиши
    // GetKey
    //SF_GET_KEY=2 ; get code of the pressed key


    bool __fastcall GetKeyStatus( )
    {
    bool result = false;
    return result;
    }


    unsignedchar __fastcall GetKey( )
    {
    unsignedchar result = 0;
    return result;
    }

    //SF_GET_SYS_TIME=3



    unsignedint __fastcall GetSysTime( )
    {
    unsignedint result = 0;
    return result;
    }
    // или GetSysTime:TkfTime; ?

    //SF_DRAW_TEXT=4 ДОРАБОТАТЬ !!!


    void __fastcall DrawText( WORD x, WORD y, unsignedint Color, unsignedchar fontType, String t )
    {
    }

    //SF_SLEEP=5



    void __fastcall Sleep( unsignedint Value )
    {
    } // ; pause process
    Возникающие вопросы и проблемы:
    * «CreateWindow» может оказаться что есть такая процедура в каком-то ЯВУ например в том же BS6 помоему она есть. Думаю нужны приставки к имени процедур. Думаю, сами приставки должны быть в верблюддауне, например «kCreateWindow” или «kpCreateWindow” или «kfCreateWindow”, не очень то важно какая именно приставка, но должна быть короткой из одного или двух символов.

    * Параметры процедур должны быть разнотипные?... Byte, Word, DWord ?... или все параметры DWord ? Если разнотипные то, какие иммено типы должны быть? Byte, Word, DWord ? Хватит ? Или еще какие-то должны применяться ?

    * Будем ли утверждать свои типы? Например type TkfColor= record R,G,B:Word; end; ?

    * Нужно внимательно изучить и обработать функцию 4, procedure DrawText. К слову. в файле kosSyst.cpp их две: void kos_WriteTextToWindow(Word x,Word y, Byte fontType, Dword textColour, char *textPtr, Dword textLen) и void kos_WriteTextToWindow_internal (Dword pos, Dword font, const char *textPtr, Dword textLen )
  • может оказаться что есть такая процедура в каком-то ЯВУ
    И что? Процедуры не в языке, а в библиотеках. Зачем подключать библиотеку с API от другой ОС?
  • Pathoswithin wrote:И что? Процедуры не в языке, а в библиотеках. Зачем подключать библиотеку с API от другой ОС?
    Ну да ладно об этом!...
    Другие замечания будут ?
  • В общем, вот с 1-16 функции, паскалевский(дельфийский) модуль. Переводчик Delphi2Cpp почему-то не захотел переводить, выдаёт ошибку, я не вникал какую и почему. Пока модуль-"пустышку" буду писать на под паскаль (дельфи), после видно будет. Пока надо бы утвердить сами процедуры с входящими и возвращаемыми параметрами, реализация их потом.
    Хотя как я посмотрю, никому уже никакого дела нет до этой темы! :-(
    Ну да ладно!... утвержу сам себе!... :-) раз никому до этого нет никакого дела! :-(
    uKOSFunc.pas (6.73 KiB)
    Downloaded 391 times
  • Предлагаю обновить документацию в файле sysfuncr.txt . Если не будет замечаний на кину прикрепленный файл на svn.
    Attachments
    sysfuncr.txt (297.84 KiB)
    Downloaded 413 times
  • чего-то нехватает.......

    посмотри внимательно все изменения файла хотя бы за последний год, я вот посмотрел, когда делал дайджест http://habrahabr.ru/company/kolibrios/blog/274487/ - файл на русском обновлялся раза 2, а на английском раз 6 и в английском намного больше нового, чем в файле на русском.
  • За последний год оба обновлялись раз 10.
    IgorA, лучше сразу заливай, чтоб было видно изменения.
  • Просмотрел русский файл справки, не было функции 76.
    Обновил на svn ревизия 6056. Осталось еще в английский файл те же константы всунуть.
  • Некоторые всё-таки используют константы из файла KOSfuncs.
    Я когда-то ответил автору в ЛС про кое-какие проблемы с наименованиями, но его ответ был в духе "я художник, я так вижу".
    0CodErr wrote:...........................................................
    По поводу тех констант. Я их использовать не хочу, так как некоторые из них только вносят путаницу.

    Code: Select all

    SF_TERMINATE_PROCESS
    SSF_TERMINATE_THREAD=2;//       ; terminate process/thread by the slot number
    SSF_TERMINATE_THREAD_ID=18;//    ; Terminate process/thread by the ID
    В одном случае PROCESS, в другом THREAD.
    В одном случае суффикс ID, почему тогда в другом не SLOT?

    Code: Select all

        SF_DRAW_TEXT=4;
        SF_DRAW_RECT=13;//         ; draw rectangle to the window
        SF_DRAW_LINE=38;
        SF_DRAW_NUMBER=47;//       ; draw number to the window
        SF_PUT_IMAGE_EXT=65;//     ; draw image with palette to the window
        SF_PUT_IMAGE=7;//          ; draw image to the window
    Везде DRAW, а в 2-ух последних внезапно PUT.

    Code: Select all

        SF_PUT_PIXEL=1;//          ; draw pixel to the window
    Привычнее всё-таки SetPixel.

    Code: Select all

          SSF_HEAP_INIT=11;
          SSF_MEM_ALLOC=12;
          SSF_MEM_FREE=13;
    Я раньше тоже примерно так называл, но считаю, что логичнее будет вместо mem сделать Heap. HeapCreate, HeapAllocate, HeapFree, HeapReallocate.

    Code: Select all

    SSF_MEM_OPEN=22;//       ; open named memory area
    SSF_MEM_CLOSE=23;
    Это очень похоже на предыдущее, вводит в заблуждение.
    Лучше явно указывать SharedMemoryOpen, SharedMemoryClose.

    Даже, казалось бы, такие "безобидные" неточности могут создать неприятные впечатления.
    Можно подумать даже, что разработчики сами не очень-то разбираются.
    ...........................................................
  • А почему в ЛС? Итоговый вариант утверждали коллективно.
  • 0CodErr wrote:Некоторые всё-таки используют константы из файла KOSfuncs.
    Считаю, что константы просто обязательны к использованию.

    Почти по всем пунктам согласен, кроме PUT_PIXEL.

    Проверял компиляцию только fasm-программ.
    Attachments
    kosfuncs.diff (29.4 KiB)
    Downloaded 336 times
  • Pathoswithin wrote:А почему в ЛС?
    Там был другой предмет обсуждения.
    Просто он предложил мне их использовать, а я ему назвал причины, по которым я этого делать не хочу.
    b00bl1k wrote:константы просто обязательны к использованию
    Ну для кого-то может и так.
    Но мне вполне хватает обёрток, к тому же это гораздо удобнее, просто сравни
    это

    Code: Select all

    mcall SF_SYSTEM, SSF_MOUSE_SETTINGS, SSSF_GET_DOUBLE_CLICK_DELAY
    и это

    Code: Select all

    Invoke GetDoubleClickTime
  • Перефразирую: использование магических чисел это плохо
  • I propose to replace the word folder with dir or directory.

    Even Microsoft(R) uses this term in its API: CreateDirectoryA, RemoveDirectoryA, SetCurrentDirectory.
    Of course, POSIX mentions directories: mkdir, chdir.
    Yes, MenuetOS does it: http://www.menuetos.net/sys64.txt.
  • Who is online

    Users browsing this forum: No registered users and 1 guest