Названия системных функций.
Рассматривая, изучая, проводя пробы и эксперименты с функциями КОС, в разных средах программирования FASM, VS6, CB6, Delphi, также создавая и испозьзуя свой визуализатор (KOS.dll), волей-неволей приходишь к мысли о необходимости «привязки» названий к системным функциям, а также к стандартизации названий функции (модулей, констант и прочего, для КОС) в разных средах программирования и модулях использующих всякие «примочки», типа визуализатора, который пытаюсь создать я. Меня очень удивило, то, что этого до сих пор нет.
Хороший пример тому, я увидел в файле kosSyst.cpp из игры «Косилка», но как оказалось, в kosSyst.cpp реализованы не все функции, т. е. соответственно использовать названия тех функций, как стандарт, при написании аналогичного модуля, например, для своего визуализатора, - не годится!
Я думаю, все прекрасно поняли о чём идёт речь, а также поняли необходимость этого, ведь даже API в операционных системах, имеют свои имена (названия) и при использовании API-windows, в таких средах программирования, как С++, Delphi и другие, они вызываются одинаково, используя закреплённое за ними имя и входящие параметры (это насколько знаю).
Предлагаю заняться этим для КОС, путём обсуждений в данной теме.
Названия системных функций
Начнём с того, что нужно утвердить название модуля (новое название, чтобы не было неразберихи, т.е. название - kosSyst.cpp, думаю, что не годится!) на котором будут «завязаны» функции, (константы и прочее) КОС, в котором они будут реализованы. Предлагайте названия такому модулю. Мои предложения имени модуля: KOSystem , KOSapi или что-то в этом роде.
Далее, названия функций КОС и их аналогов для ЯВУ.
К примеру возьмём название простой функции PutPixel (из kosSyst.cpp) и приставку «kos_». Вот получится, что название, «прямое» (полное, длинное , «привязанное» к сис.функциям КОС, вписанное в sysfuncr.txt и kol_func.chm ) должно быть: «kos_ PutPixel», а короткое «PutPixel» которое будет применяться в ЯВУ. Думаю это будет логично и понятно. Вот толко надо согласовать приставку «kos_» или какую нибуть другую, так как название kos_ PutPixel уже используется в kosSyst.cpp и не хотелось бы возможных неувязок при использовании нескольких модулей в т.ч. kosSyst.cpp, вместе с основным модулем который мы утвердим.
Также есть мысля, что должно быть альтернативное (запасное) имя на случай, так или иначе, невозможности использования какого-то имени в какой-то среде программирования. Т. е. опять же утвердить приставку (или несколько) к альтернативному имени, например «a» и/или «a_”, и все прекрасно будем знать и понимать, что если остсутсвует имя PutPixel, то есть альтернативное aPutPixel (или a_PutPixel). Ну для начала давайте решим нужно ли альтернативное имя вообще ? Если да, то сколько и какие приставки должны быть к имени
Я буду частями выкладывать (скажем по 10 функций КОС) с именами которые предлагаю я, будем обсуждать, редактировать, утверждать их имена. Согласны ? Да и вы тоже выкладывайте свои предложения по названию каких-то функций.
Пока набирал текст, пришла мысль, вместо приставки, к длинным именам «kos_» использовать приставку «kf” или “fk”, означающие Function KOS, меньше размером, понятна, да и наверняка не используется нигде как «kos_».
И самое главное. Имена должны быть максимально короткие и понятные. Так как их нужно набирать во время написания программ. Врядли кому понравится название функции подобное «kos_get_size_of_background_image” или что-то в этом роде.
Далее, названия функций КОС и их аналогов для ЯВУ.
К примеру возьмём название простой функции PutPixel (из kosSyst.cpp) и приставку «kos_». Вот получится, что название, «прямое» (полное, длинное , «привязанное» к сис.функциям КОС, вписанное в sysfuncr.txt и kol_func.chm ) должно быть: «kos_ PutPixel», а короткое «PutPixel» которое будет применяться в ЯВУ. Думаю это будет логично и понятно. Вот толко надо согласовать приставку «kos_» или какую нибуть другую, так как название kos_ PutPixel уже используется в kosSyst.cpp и не хотелось бы возможных неувязок при использовании нескольких модулей в т.ч. kosSyst.cpp, вместе с основным модулем который мы утвердим.
Также есть мысля, что должно быть альтернативное (запасное) имя на случай, так или иначе, невозможности использования какого-то имени в какой-то среде программирования. Т. е. опять же утвердить приставку (или несколько) к альтернативному имени, например «a» и/или «a_”, и все прекрасно будем знать и понимать, что если остсутсвует имя PutPixel, то есть альтернативное aPutPixel (или a_PutPixel). Ну для начала давайте решим нужно ли альтернативное имя вообще ? Если да, то сколько и какие приставки должны быть к имени
Я буду частями выкладывать (скажем по 10 функций КОС) с именами которые предлагаю я, будем обсуждать, редактировать, утверждать их имена. Согласны ? Да и вы тоже выкладывайте свои предложения по названию каких-то функций.
Пока набирал текст, пришла мысль, вместо приставки, к длинным именам «kos_» использовать приставку «kf” или “fk”, означающие Function KOS, меньше размером, понятна, да и наверняка не используется нигде как «kos_».
И самое главное. Имена должны быть максимально короткие и понятные. Так как их нужно набирать во время написания программ. Врядли кому понравится название функции подобное «kos_get_size_of_background_image” или что-то в этом роде.
DefineAndDrawWindow - Функция 0 - определить и нарисовать окно.
(Хорошее название было в kosSyst.cpp, уж ничего не скажешь. вот только полное имя надо без приставки «kos_».)
PutPixel - Функция 1 - поставить точку в окне.
(Тоже согласен, при условии, что точку можно поставить только на форму, а не на, скажем изображение типа TBitMap или TImage такого вроде нету в КОС ?)
GetKey - Функция 2 - получить код нажатой клавиши.
GetSysTime (или всё таки GetSystemClock?) - Функция 3 - получить системное время.
WriteText - Функция 4 - вывести строку текста в окно
(в kosSyst.cpp предлагалось WriteTextToWindow, зачем такое длинное ?!)
Pause - Функция 5 — пауза.
ReadFileRAM - Функция 6 - прочитать файл с рамдиска
PutImage (или WriteImage, как правильнее ?) - Функция 7 - вывести изображение в окно
DefineButton - Функция 8 - определить/удалить кнопку.
ProcessInfo - Функция 9 - информация о потоке выполнения.
WaitEvent - Функция 10 - ожидать события
(в kosSyst.cpp предлагалось WaitForEvent, но я думаю WaitEvent понятней да и короче!)
Далее будет.
Не забываем о вопросах поднятых выше, о приставке к длинному имени, о приставке к альтернативному имени о названии модуля с утверждёнными функциями КОС.
(Хорошее название было в kosSyst.cpp, уж ничего не скажешь. вот только полное имя надо без приставки «kos_».)
PutPixel - Функция 1 - поставить точку в окне.
(Тоже согласен, при условии, что точку можно поставить только на форму, а не на, скажем изображение типа TBitMap или TImage такого вроде нету в КОС ?)
GetKey - Функция 2 - получить код нажатой клавиши.
GetSysTime (или всё таки GetSystemClock?) - Функция 3 - получить системное время.
WriteText - Функция 4 - вывести строку текста в окно
(в kosSyst.cpp предлагалось WriteTextToWindow, зачем такое длинное ?!)
Pause - Функция 5 — пауза.
ReadFileRAM - Функция 6 - прочитать файл с рамдиска
PutImage (или WriteImage, как правильнее ?) - Функция 7 - вывести изображение в окно
DefineButton - Функция 8 - определить/удалить кнопку.
ProcessInfo - Функция 9 - информация о потоке выполнения.
WaitEvent - Функция 10 - ожидать события
(в kosSyst.cpp предлагалось WaitForEvent, но я думаю WaitEvent понятней да и короче!)
Далее будет.
Не забываем о вопросах поднятых выше, о приставке к длинному имени, о приставке к альтернативному имени о названии модуля с утверждёнными функциями КОС.
Для кого все эти функции? Для разработчиков на asm'е? Они дергают mcall/int 0x40 напрямую.
Если для ЯВУ, то на мой взгляд надо уходить от нативного API в сторону фреймворка.
Вот такой код вполне можно и на чистом С писать и на С++/Дельфи
Если для ЯВУ, то на мой взгляд надо уходить от нативного API в сторону фреймворка.
Вот такой код вполне можно и на чистом С писать и на С++/Дельфи
Code: Select all
#include <Application.h>
#include <Window.h>
#include <Button.h>
void buttonExitOnPress(Button *this)
{
Application *app = Application_getInstance();
if (app)
app->Close();
}
bool mainWndOnClose(Window *this)
{
if (AlertDialog("Title", "Close?", ALERT_YES_NO))
return true;
return false;
}
Window *mainWndCreate(void)
{
Window * mainWnd = Window_init();
if (!mainWnd)
return 0;
Window_setPosition(mainWnd, 100, 100);
Window_setExtent(mainWnd, 320, 240);
mainWnd->paint = mainWndPaint;
mainWnd->onClose = mainWndOnClose;
Button *btn = Button_init();
if (btn)
{
Button_setText(btn, "Exit");
btn->onPress = buttonExitOnPress;
Window_addWidget(btn);
}
return mainWnd;
}
int main(int argc, char **argv)
{
Application *app = Application_init();
Application_pushDialogWindow(app, mainWndCreate());
Application_enterEventDispatcher(app);
Application_free(app);
return 0;
}
1.А как ты думаешь, если бы были в асме утверждённые макросы и/или процедуры чтобы в вместо mcall/int 0x40 напрямую можно было бы использовать fkDefineAndDrawWindow, fkWriteText, fkGetKey, к чему стремились бы новички пытающиеся, что нибудь написать на асме ? К mcall/int 0x40? Сомневаюсь! Стремились бы к использованию аналогичных и понятных именам процедур и макросов! Да и исходники посимпатичнее были бы , чем с mcall/int 0x40.Veliant wrote:Для кого все эти функции? Для разработчиков на asm'е? Они дергают mcall/int 0x40 напрямую.
2. (не пойму куда подевалось оригинальное сообщение, видимо автор его удалил) см. сюда: viewtopic.php?f=10&t=370&start=150#p63298 «Есть в KolibriOS Форт система.....» Вот оказывается есть Форт система... не исключено, что будет еще что-то когда-то появляться, почему бы не придерживаться каких-то стандартных и утверждённых имён функций?!... при которых все будут знать и системы писать с такой «привязкой»! Соответственно обычный пользователь, переходя на другую систему (ЯВУ) для КОС, будет знать, что WriteText и GetKey и на Форте и на ещё чём-то, да хоть на самом чёрте будет WriteText и GetKey!
Ну если ты так думаешь, что это не значит что я так думаю да и другие тоже.Veliant wrote: Если для ЯВУ, то на мой взгляд надо уходить от нативного API в сторону фреймворка.
Посмотри внимательно на длину названий (процедур и прочего), в том коде!... у меня лично, ну нет никакого желания такое «набахкивать» на клавиатуре, вместо короткого и ясного, - GetKey, GetSysTime, WriteText, Pause, ReadFileRAM и т.д.Veliant wrote: Вот такой код вполне можно и на чистом С писать и на С++/Дельфи
Как-то так!
CheckEvent - Функция 11 - проверить, есть ли событие, без ожидания.
BeginDrawWindow - Функция 12 - Подфункция 1 - начать перерисовку окна.
EndDrawWindow - Функция 12 - Подфункция 2 - закончить перерисовку окна
(!!!!! Я вот смотрю может правильнее и короче будет BeginDrawForm и EndDrawForm
Rectangle - Функция 13 - нарисовать прямоугольник в окне
(DrawBar?!?!? DrawRectangle?!?)
GetSizeScreen - Функция 14 - получить размеры экрана.
SetSizeScreen (SetSizeBackScreen?!?! SetSizeBackImage?!?! ) Функция 15, подфункция 1 - установить размер фонового изображения.
PutPixelBackScreen - Функция 15, подфункция 2 - поставить точку на фоновом изображении. =
RefreshBackScreen - Функция 15, подфункция 3 - перерисовать фон.
SetModeBackScreen - Функция 15, подфункция 4 - установить режим отрисовки фона.
PlaceBlPixBackScreen - Функция 15, подфункция 5 - поместить блок пикселей на фон.
?!??!?! - Функция 15, подфункция 6 Спроецировать данные фона на адресное пространство процесса.
?!?!? - Функция 15, подфункция 7 Закрыть проекцию данных фона на адресное пространство процесса.
SaveRAMtoFloppy (или просто RAMtoFloppy - Функция 16 - сохранить рамдиск на дискету.
GetButton - Функция 17 - получить код нажатой кнопки.
TerminatProcessFlow (CloseProcessFlow ?!?!) - Функция 18, подфункция 2 - завершить процесс/поток по слоту.
ActiveWindowFlow - Функция 18, подфункция 3 - сделать активным окно заданного потока.
GetTactsSec - Функция 18, подфункция 4 - получить счётчик пустых тактов в секунду.
GetClockRate. - Функция 18, подфункция 5 - получить тактовую частоту.
SaveRAMtoHDD ( или просто RAMtoHDD ?!?!?) - Функция 18, подфункция 6 - сохранить рамдиск в файл на жёстком диске.
GetNumbActiveWindow - Функция 18, подфункция 7 - получить номер активного окна.
Speaker (SetSpeaker !?!?! SetSpeak ?!?!?!) Функция 18, подфункция 8 - отключить/разрешить звук спикера.
InfoSpeaker - Функция 18, подфункция 8 - отключить/разрешить звук спикера. Подподфункция 1 - получить состояние
SwitchSpeaker (ModeSpeaker !?!?!?) - Функция 18, подфункция 8 - отключить/разрешить звук спикера. Подподфункция 2 - переключить состояние.
CloseSysParam = Функция 18, подфункция 9 - завершение работы системы с параметром. =
FormMinimize ( WindowMinimize?!?!) - Функция 18, подфункция 10 - свернуть окно приложения.
InfoDiscSubSys - Функция 18, подфункция 11 Получить информацию о дисковой подсистеме.
VerKernel - Функция 18, подфункция 13 - получить версию ядра.
WaitFlybackRay - Функция 18, подфункция 14 Ожидать начала обратного хода луча развёртки монитора.
CursorMouseCentrScreen ( MouseCentrScreen !?!?) - Функция 18, подфункция 15 - поместить курсор мыши в центр экрана
GetSizeFreeRAM - Функция 18, подфункция 16 Получить размер свободной оперативной памяти.
GetSizeAvailabRAM - Функция 18, подфункция 17. Получить размер имеющейся оперативной памяти.
TerminatProcessFlowID - Функция 18, подфункция 18 Завершить процесс/поток по идентификатору.
GetSpeedMouse - Функция 18, подфункция 19 - получить/установить настройки мыши. Подподфункция 0 - получить скорость мыши.
SetSpeedMouse - Функция 18, подфункция 19 - получить/установить настройки мыши. Подподфункция 1 - установить скорость мыши.
GetDelayMouse - Функция 18, подфункция 19 - получить/установить настройки мыши. Подподфункция 2 - получить задержку мыши.
SetDelayMouse - Функция 18, подфункция 19 - получить/установить настройки мыши. Подподфункция 3 - установить задержку мыши.
SetPosMouse - Функция 18, подфункция 19 - получить/установить настройки мыши. Подподфункция 4 - установить положение курсора мыши.
SimulKeyMouse - Функция 18, подфункция 19 - получить/установить настройки мыши. Подподфункция 5 - симулировать состояние клавиш мыши.
BeginDrawWindow - Функция 12 - Подфункция 1 - начать перерисовку окна.
EndDrawWindow - Функция 12 - Подфункция 2 - закончить перерисовку окна
(!!!!! Я вот смотрю может правильнее и короче будет BeginDrawForm и EndDrawForm
Rectangle - Функция 13 - нарисовать прямоугольник в окне
(DrawBar?!?!? DrawRectangle?!?)
GetSizeScreen - Функция 14 - получить размеры экрана.
SetSizeScreen (SetSizeBackScreen?!?! SetSizeBackImage?!?! ) Функция 15, подфункция 1 - установить размер фонового изображения.
PutPixelBackScreen - Функция 15, подфункция 2 - поставить точку на фоновом изображении. =
RefreshBackScreen - Функция 15, подфункция 3 - перерисовать фон.
SetModeBackScreen - Функция 15, подфункция 4 - установить режим отрисовки фона.
PlaceBlPixBackScreen - Функция 15, подфункция 5 - поместить блок пикселей на фон.
?!??!?! - Функция 15, подфункция 6 Спроецировать данные фона на адресное пространство процесса.
?!?!? - Функция 15, подфункция 7 Закрыть проекцию данных фона на адресное пространство процесса.
SaveRAMtoFloppy (или просто RAMtoFloppy - Функция 16 - сохранить рамдиск на дискету.
GetButton - Функция 17 - получить код нажатой кнопки.
TerminatProcessFlow (CloseProcessFlow ?!?!) - Функция 18, подфункция 2 - завершить процесс/поток по слоту.
ActiveWindowFlow - Функция 18, подфункция 3 - сделать активным окно заданного потока.
GetTactsSec - Функция 18, подфункция 4 - получить счётчик пустых тактов в секунду.
GetClockRate. - Функция 18, подфункция 5 - получить тактовую частоту.
SaveRAMtoHDD ( или просто RAMtoHDD ?!?!?) - Функция 18, подфункция 6 - сохранить рамдиск в файл на жёстком диске.
GetNumbActiveWindow - Функция 18, подфункция 7 - получить номер активного окна.
Speaker (SetSpeaker !?!?! SetSpeak ?!?!?!) Функция 18, подфункция 8 - отключить/разрешить звук спикера.
InfoSpeaker - Функция 18, подфункция 8 - отключить/разрешить звук спикера. Подподфункция 1 - получить состояние
SwitchSpeaker (ModeSpeaker !?!?!?) - Функция 18, подфункция 8 - отключить/разрешить звук спикера. Подподфункция 2 - переключить состояние.
CloseSysParam = Функция 18, подфункция 9 - завершение работы системы с параметром. =
FormMinimize ( WindowMinimize?!?!) - Функция 18, подфункция 10 - свернуть окно приложения.
InfoDiscSubSys - Функция 18, подфункция 11 Получить информацию о дисковой подсистеме.
VerKernel - Функция 18, подфункция 13 - получить версию ядра.
WaitFlybackRay - Функция 18, подфункция 14 Ожидать начала обратного хода луча развёртки монитора.
CursorMouseCentrScreen ( MouseCentrScreen !?!?) - Функция 18, подфункция 15 - поместить курсор мыши в центр экрана
GetSizeFreeRAM - Функция 18, подфункция 16 Получить размер свободной оперативной памяти.
GetSizeAvailabRAM - Функция 18, подфункция 17. Получить размер имеющейся оперативной памяти.
TerminatProcessFlowID - Функция 18, подфункция 18 Завершить процесс/поток по идентификатору.
GetSpeedMouse - Функция 18, подфункция 19 - получить/установить настройки мыши. Подподфункция 0 - получить скорость мыши.
SetSpeedMouse - Функция 18, подфункция 19 - получить/установить настройки мыши. Подподфункция 1 - установить скорость мыши.
GetDelayMouse - Функция 18, подфункция 19 - получить/установить настройки мыши. Подподфункция 2 - получить задержку мыши.
SetDelayMouse - Функция 18, подфункция 19 - получить/установить настройки мыши. Подподфункция 3 - установить задержку мыши.
SetPosMouse - Функция 18, подфункция 19 - получить/установить настройки мыши. Подподфункция 4 - установить положение курсора мыши.
SimulKeyMouse - Функция 18, подфункция 19 - получить/установить настройки мыши. Подподфункция 5 - симулировать состояние клавиш мыши.
Для начала не плохо бы ознакомиться с компьютерными терминами в их английском виде
и т.д.
GetScreenResolutionGetSizeScreen
BackgroundSetResolutionSetSizeScreen
Background<name><name>BackScreen
BackgroundBitBltPlaceBlPixBackScreen
*RamDisk**RAM*
*Thread**Flow*
и т.д.
GetSizeScreen
GetScreenResolution
словечко длиннноватое.... ну может GetScrRes (GetResScr) - вот такое по делу бы было!
SetSizeScreen
BackgroundSetResolution
и тут длинное и начало должно быть ИМХО с "Set", - т.е SetBackRes (SetResBack) что-то в этом роде
<name>BackScreen
Background<name>
?!?!? т.е. если нормально сократить "Background", до "Back", то
RefreshBackScreen - Функция 15, подфункция 3 - перерисовать фон. будет RefreshBack ?!
Ну может и нормально! Согласен! Просмотрю.
PlaceBlPixBackScreen
BackgroundBitBlt
Ну тогда тоже сократить так будет BackBitBlt ( или может BitBltBack)
*RAM*
*RamDisk*
А! Нуда ! ТО Я "ПРОХЛОПАЛ" насчёт диска Ну тогда - RD !
*Flow*
*Thread*
Тоже согласен!
СПАСИБО! ЗА КОРРЕКТИРОВКУ!
Думаю, если вместо "Background" делать "BackScr" тоже неплохо бы было чем просто "Back" ?!?
Пусть пока ничего править не буду может еще кто прокомментировать, что-то захочет.
GetScreenResolution
словечко длиннноватое.... ну может GetScrRes (GetResScr) - вот такое по делу бы было!
SetSizeScreen
BackgroundSetResolution
и тут длинное и начало должно быть ИМХО с "Set", - т.е SetBackRes (SetResBack) что-то в этом роде
<name>BackScreen
Background<name>
?!?!? т.е. если нормально сократить "Background", до "Back", то
RefreshBackScreen - Функция 15, подфункция 3 - перерисовать фон. будет RefreshBack ?!
Ну может и нормально! Согласен! Просмотрю.
PlaceBlPixBackScreen
BackgroundBitBlt
Ну тогда тоже сократить так будет BackBitBlt ( или может BitBltBack)
*RAM*
*RamDisk*
А! Нуда ! ТО Я "ПРОХЛОПАЛ" насчёт диска Ну тогда - RD !
*Flow*
*Thread*
Тоже согласен!
СПАСИБО! ЗА КОРРЕКТИРОВКУ!
Думаю, если вместо "Background" делать "BackScr" тоже неплохо бы было чем просто "Back" ?!?
Пусть пока ничего править не буду может еще кто прокомментировать, что-то захочет.
Что лучше в конструкциях названий применять "Window" или "Form" ?
(Я бы "Form" применял, оно короче!)
Как насчёт закрепить некоторые сокращения значении и тогда конструировать
названия?...
RamDisk - RD ?!
Resolution - Res ?!
Set или Get всегда должны быть первыми в названии ?!
Scr - Screen ?!
Background - какая альтернатива лучше Back или Backgrd или BackScr ?!
Sys - System ?!
Button - Btn ?!
PutPixel - Функция 1 - поставить точку в окне.
(может всё таки PutPix тоже пойдёт?! а может вообще Pix ?!)
ИСПРАВЛЮ: ReadFileRD - Функция 6 - прочитать файл с рамдиска
(Я бы "Form" применял, оно короче!)
Как насчёт закрепить некоторые сокращения значении и тогда конструировать
названия?...
RamDisk - RD ?!
Resolution - Res ?!
Set или Get всегда должны быть первыми в названии ?!
Scr - Screen ?!
Background - какая альтернатива лучше Back или Backgrd или BackScr ?!
Sys - System ?!
Button - Btn ?!
PutPixel - Функция 1 - поставить точку в окне.
(может всё таки PutPix тоже пойдёт?! а может вообще Pix ?!)
ИСПРАВЛЮ: ReadFileRD - Функция 6 - прочитать файл с рамдиска