Board.KolibriOS.org

Official KolibriOS board
It is currently Sun Dec 15, 2019 9:11 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 104 posts ]  Go to page Previous 13 4 5 6 7
Author Message
PostPosted: Mon Jan 04, 2016 9:44 am 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
Ну так делайте, я в высокоуровневых языках вообще не разбираюсь. Берёте названия из KOSfuncs.inc, удаляете префикс, подфункции через точку (или не обязательно), выбираете макросы или функции и делаете KOSfuncs.h.
viewtopic.php?f=33&p=63699#p63491


Top
   
PostPosted: Mon Jan 04, 2016 12:15 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Вот «набросал» как пример-черновик первых пять функций:
uKOSFunc.pas:
Spoiler: Show
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: Show
#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: Show
#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 )


Top
   
PostPosted: Mon Jan 04, 2016 9:53 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
Quote:
может оказаться что есть такая процедура в каком-то ЯВУ
И что? Процедуры не в языке, а в библиотеках. Зачем подключать библиотеку с API от другой ОС?


Top
   
PostPosted: Mon Jan 04, 2016 9:56 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Pathoswithin wrote:
И что? Процедуры не в языке, а в библиотеках. Зачем подключать библиотеку с API от другой ОС?

Ну да ладно об этом!...
Другие замечания будут ?


Top
   
PostPosted: Thu Jan 07, 2016 2:01 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
В общем, вот с 1-16 функции, паскалевский(дельфийский) модуль. Переводчик Delphi2Cpp почему-то не захотел переводить, выдаёт ошибку, я не вникал какую и почему. Пока модуль-"пустышку" буду писать на под паскаль (дельфи), после видно будет. Пока надо бы утвердить сами процедуры с входящими и возвращаемыми параметрами, реализация их потом.
Хотя как я посмотрю, никому уже никакого дела нет до этой темы! :-(
Ну да ладно!... утвержу сам себе!... :-) раз никому до этого нет никакого дела! :-(

Attachment:
uKOSFunc.pas [6.73 KiB]
Downloaded 143 times


Top
   
PostPosted: Mon Jan 11, 2016 7:29 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 813
Предлагаю обновить документацию в файле sysfuncr.txt . Если не будет замечаний на кину прикрепленный файл на svn.


Attachments:
sysfuncr.txt [297.84 KiB]
Downloaded 147 times
Top
   
PostPosted: Mon Jan 11, 2016 10:58 pm 
Offline

Joined: Wed May 18, 2005 7:27 pm
Posts: 1001
чего-то нехватает.......

посмотри внимательно все изменения файла хотя бы за последний год, я вот посмотрел, когда делал дайджест http://habrahabr.ru/company/kolibrios/blog/274487/ - файл на русском обновлялся раза 2, а на английском раз 6 и в английском намного больше нового, чем в файле на русском.


Top
   
PostPosted: Tue Jan 12, 2016 12:06 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
За последний год оба обновлялись раз 10.
IgorA, лучше сразу заливай, чтоб было видно изменения.


Top
   
PostPosted: Tue Jan 12, 2016 2:50 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 813
Просмотрел русский файл справки, не было функции 76.
Обновил на svn ревизия 6056. Осталось еще в английский файл те же константы всунуть.


Top
   
PostPosted: Sat Oct 20, 2018 9:27 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Некоторые всё-таки используют константы из файла KOSfuncs.
Я когда-то ответил автору в ЛС про кое-какие проблемы с наименованиями, но его ответ был в духе "я художник, я так вижу".
0CodErr wrote:
...........................................................
По поводу тех констант. Я их использовать не хочу, так как некоторые из них только вносят путаницу.
Code:
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:
    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:
    SF_PUT_PIXEL=1;//          ; draw pixel to the window
Привычнее всё-таки SetPixel.
Code:
      SSF_HEAP_INIT=11;
      SSF_MEM_ALLOC=12;
      SSF_MEM_FREE=13;
Я раньше тоже примерно так называл, но считаю, что логичнее будет вместо mem сделать Heap. HeapCreate, HeapAllocate, HeapFree, HeapReallocate.
Code:
SSF_MEM_OPEN=22;//       ; open named memory area
SSF_MEM_CLOSE=23;
Это очень похоже на предыдущее, вводит в заблуждение.
Лучше явно указывать SharedMemoryOpen, SharedMemoryClose.

Даже, казалось бы, такие "безобидные" неточности могут создать неприятные впечатления.
Можно подумать даже, что разработчики сами не очень-то разбираются.
...........................................................


Top
   
PostPosted: Sat Oct 20, 2018 10:32 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
А почему в ЛС? Итоговый вариант утверждали коллективно.


Top
   
PostPosted: Sat Oct 20, 2018 10:54 pm 
Offline

Joined: Tue Jun 24, 2008 11:12 pm
Posts: 64
0CodErr wrote:
Некоторые всё-таки используют константы из файла KOSfuncs.
Считаю, что константы просто обязательны к использованию.

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

Проверял компиляцию только fasm-программ.


Attachments:
kosfuncs.diff [29.4 KiB]
Downloaded 68 times
Top
   
PostPosted: Sat Oct 20, 2018 11:07 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Pathoswithin wrote:
А почему в ЛС?
Там был другой предмет обсуждения.
Просто он предложил мне их использовать, а я ему назвал причины, по которым я этого делать не хочу.
b00bl1k wrote:
константы просто обязательны к использованию
Ну для кого-то может и так.
Но мне вполне хватает обёрток, к тому же это гораздо удобнее, просто сравни
это
Code:
mcall SF_SYSTEM, SSF_MOUSE_SETTINGS, SSSF_GET_DOUBLE_CLICK_DELAY
и это
Code:
Invoke GetDoubleClickTime


Top
   
PostPosted: Sat Oct 20, 2018 11:11 pm 
Offline

Joined: Tue Jun 24, 2008 11:12 pm
Posts: 64
Перефразирую: использование магических чисел это плохо


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 104 posts ]  Go to page Previous 13 4 5 6 7

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited