Board.KolibriOS.org

Official KolibriOS board
It is currently Mon Nov 18, 2019 9:02 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 104 posts ]  Go to page 1 2 3 4 57 Next
Author Message
PostPosted: Fri Dec 11, 2015 11:32 am 
Offline

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


Top
   
PostPosted: Fri Dec 11, 2015 11:36 am 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Начнём с того, что нужно утвердить название модуля (новое название, чтобы не было неразберихи, т.е. название - 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” или что-то в этом роде. :-)


Top
   
PostPosted: Fri Dec 11, 2015 12:07 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
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 понятней да и короче!)
Далее будет.
Не забываем о вопросах поднятых выше, о приставке к длинному имени, о приставке к альтернативному имени о названии модуля с утверждёнными функциями КОС.


Top
   
PostPosted: Fri Dec 11, 2015 12:24 pm 
Offline

Joined: Thu Jan 26, 2006 8:47 pm
Posts: 284
Для кого все эти функции? Для разработчиков на asm'е? Они дергают mcall/int 0x40 напрямую.
Если для ЯВУ, то на мой взгляд надо уходить от нативного API в сторону фреймворка.
Вот такой код вполне можно и на чистом С писать и на С++/Дельфи
Code:
#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;
}


Top
   
PostPosted: Fri Dec 11, 2015 1:07 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
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 и т.д.
Как-то так!


Top
   
PostPosted: Fri Dec 11, 2015 2:09 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
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 - симулировать состояние клавиш мыши.


Top
   
PostPosted: Fri Dec 11, 2015 2:48 pm 
Offline

Joined: Thu Jan 26, 2006 8:47 pm
Posts: 284
Для начала не плохо бы ознакомиться с компьютерными терминами в их английском виде
Quote:
GetSizeScreen

GetScreenResolution
Quote:
SetSizeScreen

BackgroundSetResolution
Quote:
<name>BackScreen

Background<name>
Quote:
PlaceBlPixBackScreen

BackgroundBitBlt
Quote:
*RAM*

*RamDisk*
Quote:
*Flow*

*Thread*

и т.д.


Top
   
PostPosted: Fri Dec 11, 2015 3:14 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
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" ?!?

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


Top
   
PostPosted: Fri Dec 11, 2015 4:01 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Что лучше в конструкциях названий применять "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 - прочитать файл с рамдиска


Top
   
PostPosted: Fri Dec 11, 2015 4:21 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
Veliant wrote:
Для кого все эти функции? Для разработчиков на asm'е? Они дергают mcall/int 0x40 напрямую.

NASM-овцам это не помешало определить свои имена.

_________________
Сделаем мир лучше!


Top
   
PostPosted: Fri Dec 11, 2015 4:49 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
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)

_________________
Сделаем мир лучше!


Top
   
PostPosted: Fri Dec 11, 2015 6:02 pm 
Offline

Joined: Mon Mar 27, 2006 6:33 am
Posts: 670
В Форте очень много коротких названий функций :)
Вплоть до
Code:
: начать определение нового следующего слова (в режиме компиляции)
; закончить определение слова и переключиться в режим интерпретации
. (точка) печать значения
, (запятая) дбавить значение по текущему адресу в кодофайле и продвинуть указатель текущего адреса.
! (восклицательный знак) занести значение по адресу в память
@  извечь значение по адресу
I счётчик цикла
J счётчик внешнего цикла
# выделить символ из числа при форматном преобразовании согласно текущей системы счисления в конструкции <# # # # # #>
\ комментарий до конца строки
( начало коментирования входных -- выходных соглашений по параметрам (не обязателен к использованию)
) завершение  коментирования входных -- выходных соглашений по параметрам (не обязателен к использованию)
[ переключить состояние системы в режим интерпритации
] перекючить  состояние системы в режим компиляции
' получить адрес исполнительной части следующего слова (в режиме интерпретации)
['] получить адрес исполнительной части следующего слова (в режиме компиляции))
Пробел  -  основной разделитель слов BL название кода для использования

для работы с байтами памяти добавляется префикс С Пример С@ C!
двух знаковые тоже есть >R R> ." S" и др.
CR перевести указатель строки.
Функции работы со строками, файлами и др. тоже неплохо именованы.

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

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


Last edited by Kopa on Fri Dec 11, 2015 7:14 pm, edited 12 times in total.

Top
   
PostPosted: Fri Dec 11, 2015 6:23 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
Есть и более распространённый язык, провоцирующий на написание кода в стиле "краткость - сестра таланта". Он называется Perl и носит гордое звание write-only language.
http://bash.im/quote/403221
Quote:
yyy: я когда сюды устроился, бывший админ здесь скрипт перловый мне в наследство оставил
yyy: скрипт в виде рисунка белочки был
yyy: я пока разобрал - столько пива ушло, чуть эту белочку не словил...

_________________
Сделаем мир лучше!


Top
   
PostPosted: Fri Dec 11, 2015 6:37 pm 
Offline

Joined: Mon Mar 27, 2006 6:33 am
Posts: 670
CleverMouse wrote:
Есть и более распространённый язык, провоцирующий на написание кода в стиле "краткость - сестра таланта". Он называется Perl и носит гордое звание write-only language.
http://bash.im/quote/403221
Quote:
yyy: я когда сюды устроился, бывший админ здесь скрипт перловый мне в наследство оставил
yyy: скрипт в виде рисунка белочки был
yyy: я пока разобрал - столько пива ушло, чуть эту белочку не словил...

Вроде J и К языки довольно компактны. А "закрученность" Перла разве не из-за использования регулярных выражений?

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


Top
   
PostPosted: Fri Dec 11, 2015 6:53 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
Veliant
Что это за ужас? У тебя получилось больше кода, чем на ассемблере.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 104 posts ]  Go to page 1 2 3 4 57 Next

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:  
Powered by phpBB® Forum Software © phpBB Limited