Page 1 of 8

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

Posted: Fri Dec 11, 2015 11:32 am
by ALEXS1983
Названия системных функций.
Рассматривая, изучая, проводя пробы и эксперименты с функциями КОС, в разных средах программирования FASM, VS6, CB6, Delphi, также создавая и испозьзуя свой визуализатор (KOS.dll), волей-неволей приходишь к мысли о необходимости «привязки» названий к системным функциям, а также к стандартизации названий функции (модулей, констант и прочего, для КОС) в разных средах программирования и модулях использующих всякие «примочки», типа визуализатора, который пытаюсь создать я. Меня очень удивило, то, что этого до сих пор нет.
Хороший пример тому, я увидел в файле kosSyst.cpp из игры «Косилка», но как оказалось, в kosSyst.cpp реализованы не все функции, т. е. соответственно использовать названия тех функций, как стандарт, при написании аналогичного модуля, например, для своего визуализатора, - не годится!
Я думаю, все прекрасно поняли о чём идёт речь, а также поняли необходимость этого, ведь даже API в операционных системах, имеют свои имена (названия) и при использовании API-windows, в таких средах программирования, как С++, Delphi и другие, они вызываются одинаково, используя закреплённое за ними имя и входящие параметры (это насколько знаю).
Предлагаю заняться этим для КОС, путём обсуждений в данной теме.

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

Posted: Fri Dec 11, 2015 11:36 am
by ALEXS1983
Начнём с того, что нужно утвердить название модуля (новое название, чтобы не было неразберихи, т.е. название - 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” или что-то в этом роде. :-)

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

Posted: Fri Dec 11, 2015 12:07 pm
by ALEXS1983
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 понятней да и короче!)
Далее будет.
Не забываем о вопросах поднятых выше, о приставке к длинному имени, о приставке к альтернативному имени о названии модуля с утверждёнными функциями КОС.

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

Posted: Fri Dec 11, 2015 12:24 pm
by Veliant
Для кого все эти функции? Для разработчиков на asm'е? Они дергают mcall/int 0x40 напрямую.
Если для ЯВУ, то на мой взгляд надо уходить от нативного 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;
}

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

Posted: Fri Dec 11, 2015 1:07 pm
by ALEXS1983
Veliant wrote:Для кого все эти функции? Для разработчиков на asm'е? Они дергают mcall/int 0x40 напрямую.
1.А как ты думаешь, если бы были в асме утверждённые макросы и/или процедуры чтобы в вместо mcall/int 0x40 напрямую можно было бы использовать fkDefineAndDrawWindow, fkWriteText, fkGetKey, к чему стремились бы новички пытающиеся, что нибудь написать на асме ? К mcall/int 0x40? Сомневаюсь! Стремились бы к использованию аналогичных и понятных именам процедур и макросов! Да и исходники посимпатичнее были бы , чем с mcall/int 0x40.
2. (не пойму куда подевалось оригинальное сообщение, видимо автор его удалил) см. сюда: viewtopic.php?f=10&t=370&start=150#p63298 «Есть в KolibriOS Форт система.....» Вот оказывается есть Форт система... не исключено, что будет еще что-то когда-то появляться, почему бы не придерживаться каких-то стандартных и утверждённых имён функций?!... при которых все будут знать и системы писать с такой «привязкой»! Соответственно обычный пользователь, переходя на другую систему (ЯВУ) для КОС, будет знать, что WriteText и GetKey и на Форте и на ещё чём-то, да хоть на самом чёрте :-) будет WriteText и GetKey!
Veliant wrote: Если для ЯВУ, то на мой взгляд надо уходить от нативного API в сторону фреймворка.
Ну если ты так думаешь, что это не значит что я так думаю да и другие тоже. :-)
Veliant wrote: Вот такой код вполне можно и на чистом С писать и на С++/Дельфи
Посмотри внимательно на длину названий (процедур и прочего), в том коде!... у меня лично, ну нет никакого желания такое «набахкивать» на клавиатуре, вместо короткого и ясного, - GetKey, GetSysTime, WriteText, Pause, ReadFileRAM и т.д.
Как-то так!

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

Posted: Fri Dec 11, 2015 2:09 pm
by ALEXS1983
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 - симулировать состояние клавиш мыши.

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

Posted: Fri Dec 11, 2015 2:48 pm
by Veliant
Для начала не плохо бы ознакомиться с компьютерными терминами в их английском виде
GetSizeScreen
GetScreenResolution
SetSizeScreen
BackgroundSetResolution
<name>BackScreen
Background<name>
PlaceBlPixBackScreen
BackgroundBitBlt
*RAM*
*RamDisk*
*Flow*
*Thread*

и т.д.

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

Posted: Fri Dec 11, 2015 3:14 pm
by ALEXS1983
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" ?!?

Пусть пока ничего править не буду может еще кто прокомментировать, что-то захочет.

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

Posted: Fri Dec 11, 2015 4:01 pm
by ALEXS1983
Что лучше в конструкциях названий применять "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 - прочитать файл с рамдиска

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

Posted: Fri Dec 11, 2015 4:21 pm
by CleverMouse
Veliant wrote:Для кого все эти функции? Для разработчиков на asm'е? Они дергают mcall/int 0x40 напрямую.
NASM-овцам это не помешало определить свои имена.

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

Posted: Fri Dec 11, 2015 4:49 pm
by CleverMouse
ALEXS1983 wrote:Посмотри внимательно на длину названий (процедур и прочего), в том коде!... у меня лично, ну нет никакого желания такое «набахкивать» на клавиатуре
На самом деле код должен быть в первую очередь читаемым - в той мере, в которой это не противоречит нужным оптимизациям кода. "Соотношение времени чтения и написания кода превышает 10:1" © Мартин, "Чистый код". Сокращать слово Background, учитывая, что в большинстве приложений эти функции вообще не нужны, и даже там, где нужны, они вряд ли встречаются в десяти разных местах кода, - довольно странная идея.
Название GetPixel/SetPixel большинство программистов поймут даже без документации, расходовать дополнительные усилия мозга на запоминание, что здесь оно называется каким-то странным термином Pxl или Pix, означает отвлечь эти усилия от чего-то более важного.

Про Resolution не слушай Veliant'а, GetScreenSize вполне нормально. Вообще, посмотри на описания в sysfuncs.txt - там английский далёк от идеального, но всё-таки читаемый.
ALEXS1983 wrote:Что лучше в конструкциях названий применять "Window" или "Form" ?
(Я бы "Form" применял, оно короче!)
Window. Form - это немного не то: https://en.wikipedia.org/wiki/Form_(programming) vs https://en.wikipedia.org/wiki/Window_(computing)

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

Posted: Fri Dec 11, 2015 6:02 pm
by Kopa
В Форте очень много коротких названий функций :)
Вплоть до

Code: Select all

: начать определение нового следующего слова (в режиме компиляции)
; закончить определение слова и переключиться в режим интерпретации
. (точка) печать значения
, (запятая) дбавить значение по текущему адресу в кодофайле и продвинуть указатель текущего адреса.
! (восклицательный знак) занести значение по адресу в память
@  извечь значение по адресу
I счётчик цикла 
J счётчик внешнего цикла
# выделить символ из числа при форматном преобразовании согласно текущей системы счисления в конструкции <# # # # # #>
\ комментарий до конца строки
( начало коментирования входных -- выходных соглашений по параметрам (не обязателен к использованию)
) завершение  коментирования входных -- выходных соглашений по параметрам (не обязателен к использованию)
[ переключить состояние системы в режим интерпритации
] перекючить  состояние системы в режим компиляции
' получить адрес исполнительной части следующего слова (в режиме интерпретации)
['] получить адрес исполнительной части следующего слова (в режиме компиляции))
Пробел  -  основной разделитель слов BL название кода для использования 
для работы с байтами памяти добавляется префикс С Пример С@ C!
двух знаковые тоже есть >R R> ." S" и др.
CR перевести указатель строки.
Функции работы со строками, файлами и др. тоже неплохо именованы.

При формировании сложных слов в Форте предпочтительнее с суффиксом-действия.
Или например HERE текущий адрес в кодофайле

P.S. Форт системы имеют очень большое число разных функционально слов. :)
KEY ожидать "клавиши" клавиатуры
?KEY проверить наличие введённой "клавишы" клавиатуры.
EMIT отправить символ-байт на текщее устройство его печати. (консоль, файл...)
TYPE напечатать строку символов с аddr n-символов
." Hello" вывести HELLO на устройство отображения.

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

Posted: Fri Dec 11, 2015 6:23 pm
by CleverMouse
Есть и более распространённый язык, провоцирующий на написание кода в стиле "краткость - сестра таланта". Он называется Perl и носит гордое звание write-only language.
http://bash.im/quote/403221
yyy: я когда сюды устроился, бывший админ здесь скрипт перловый мне в наследство оставил
yyy: скрипт в виде рисунка белочки был
yyy: я пока разобрал - столько пива ушло, чуть эту белочку не словил...

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

Posted: Fri Dec 11, 2015 6:37 pm
by Kopa
CleverMouse wrote:Есть и более распространённый язык, провоцирующий на написание кода в стиле "краткость - сестра таланта". Он называется Perl и носит гордое звание write-only language.
http://bash.im/quote/403221
yyy: я когда сюды устроился, бывший админ здесь скрипт перловый мне в наследство оставил
yyy: скрипт в виде рисунка белочки был
yyy: я пока разобрал - столько пива ушло, чуть эту белочку не словил...
Вроде J и К языки довольно компактны. А "закрученность" Перла разве не из-за использования регулярных выражений?

P.S. В программе nncron Форт даёт наибольшую возможность "саморасширения", а если задействовать возможности по изменению
синтаксиса и семантики языка, то можно эффективно "сворачивать" семантику понятий в необходимый синтаксис. :)
По распространённости (вернее разнообразию) Форт очень распространён.

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

Posted: Fri Dec 11, 2015 6:53 pm
by Pathoswithin
Veliant
Что это за ужас? У тебя получилось больше кода, чем на ассемблере.