Ну так делайте, я в высокоуровневых языках вообще не разбираюсь. Берёте названия из KOSfuncs.inc, удаляете префикс, подфункции через точку (или не обязательно), выбираете макросы или функции и делаете KOSfuncs.h.
viewtopic.php?f=33&p=63699#p63491
Названия системных функций
Вот «набросал» как пример-черновик первых пять функций:
uKOSFunc.pas:
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:
#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:
#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 )
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.
файл 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
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 почему-то не захотел переводить, выдаёт ошибку, я не вникал какую и почему. Пока модуль-"пустышку" буду писать на под паскаль (дельфи), после видно будет. Пока надо бы утвердить сами процедуры с входящими и возвращаемыми параметрами, реализация их потом.
Хотя как я посмотрю, никому уже никакого дела нет до этой темы!
Ну да ладно!... утвержу сам себе!... раз никому до этого нет никакого дела!
Хотя как я посмотрю, никому уже никакого дела нет до этой темы!
Ну да ладно!... утвержу сам себе!... раз никому до этого нет никакого дела!
Предлагаю обновить документацию в файле sysfuncr.txt . Если не будет замечаний на кину прикрепленный файл на svn.
- Attachments
-
-
sysfuncr.txt (297.84 KiB)Downloaded 416 times
-
чего-то нехватает.......
посмотри внимательно все изменения файла хотя бы за последний год, я вот посмотрел, когда делал дайджест http://habrahabr.ru/company/kolibrios/blog/274487/ - файл на русском обновлялся раза 2, а на английском раз 6 и в английском намного больше нового, чем в файле на русском.
посмотри внимательно все изменения файла хотя бы за последний год, я вот посмотрел, когда делал дайджест http://habrahabr.ru/company/kolibrios/blog/274487/ - файл на русском обновлялся раза 2, а на английском раз 6 и в английском намного больше нового, чем в файле на русском.
За последний год оба обновлялись раз 10.
IgorA, лучше сразу заливай, чтоб было видно изменения.
IgorA, лучше сразу заливай, чтоб было видно изменения.
Просмотрел русский файл справки, не было функции 76.
Обновил на svn ревизия 6056. Осталось еще в английский файл те же константы всунуть.
Обновил на svn ревизия 6056. Осталось еще в английский файл те же константы всунуть.
Некоторые всё-таки используют константы из файла KOSfuncs.
Я когда-то ответил автору в ЛС про кое-какие проблемы с наименованиями, но его ответ был в духе "я художник, я так вижу".
Я когда-то ответил автору в ЛС про кое-какие проблемы с наименованиями, но его ответ был в духе "я художник, я так вижу".
0CodErr wrote:...........................................................
По поводу тех констант. Я их использовать не хочу, так как некоторые из них только вносят путаницу.В одном случае PROCESS, в другом THREAD.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
В одном случае суффикс ID, почему тогда в другом не SLOT?Везде DRAW, а в 2-ух последних внезапно PUT.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
Привычнее всё-таки SetPixel.Code: Select all
SF_PUT_PIXEL=1;// ; draw pixel to the window
Я раньше тоже примерно так называл, но считаю, что логичнее будет вместо mem сделать Heap. HeapCreate, HeapAllocate, HeapFree, HeapReallocate.Code: Select all
SSF_HEAP_INIT=11; SSF_MEM_ALLOC=12; SSF_MEM_FREE=13;
Это очень похоже на предыдущее, вводит в заблуждение.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 337 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.
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