Board.KolibriOS.org

Official KolibriOS board
It is currently Thu Dec 12, 2019 8:07 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 9 posts ] 
Author Message
 Post subject: МЭФК ( KOS.dll )
PostPosted: Thu Dec 17, 2015 10:27 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
МЭФК ( KOS.dll )
Вступление.
Когда меня заинтересовала КОС и её функции, а также пробы и эксперименты с функциями КОС, я обратил внимание, что использовать среду ОС “Windows” и компилятор FASM для “Windows” достаточно неудобно. Неудобство заключается в том, что скомпилированную программу, нельзя сразу же из компилятора FASM запустить и посмотреть результат выполнения написанного кода. Также отсутствие возможности, с пошаговой «прокруткой» программы, наблюдением за изменением переменных и результатом вывода на экран при пошаговой «прокрутки» программы и прочее. Для новичков, и не только новичков, это очень немаловажно!
Как я успел понять, такое наблюдается не только при использовании компилятора FASM, но в других средах программирования таких как Visual Studio.
Можно, конечно, определённо автоматизировать процесс, например, создав файл «Start_Proect.bat», в который прописать путь к эмулятору «KlbrInWin» и имя скомпилированного FASM-ом файла, и при запуску файла Start_Proect.bat, запускается эмулятор, который открывает компилированный файл, в общем, конце-концов увидеть результат. Меня, лично, подобное устраивало, но не надолго! :-( :-) Да и это не решило проблемы в целом.

Название «МЭФК».
У меня появилась мысль создать DLL-модуль, который будет эмулировать функции КОС и визуализировать результат выполнения кода в форме модуля и который будет универсален для использования в любых средах программирования, где возможно использование DLL-модулей. Долго и нудно думал, :-) как правильно называть этот модуль, чтобы название характеризовало его как можно точнее... эмулятор?!... визуализатор ?! Эмулятор и визуализатор ?! Пришёл к мысли «почему бы его не назвать, названием характеризующим его полностью, а именно: «Модуль эмулирующий функции «Колибри», сокращенно МЭФК (думаю можно и МЭКФ :-) )

Назначение и применение модуля.
Специалистов врядли заинтересует подобный модуль, во всяком случае, использование его, как вспомогательное средство для достижения какой-то цели. У них уже есть опыт написания программ, существующими методами и способами с использованием того, к чему они привыкли. Модуль ориентированны на новичков, пытающихся разобраться в функциях КОС, пытающихся написать какой нибудь код для КОС и при этом, хотят чувствовать себя достаточно комфортно, :-) разбираясь и осваивая всё это. :-)
Понятное дело, что сейчас, то что, представляет из себя МЭФК, назвать полноценным модулем, полностью готовым к применению, врядли возможно. Да и он никогда не будет окончательно готов. К всему сказанному, добавлю и то, что я и не планировал реализацию, абсолютно всех возможностей КОС в модуле. Достаточно реализации нескольких часто используемых функций, хотя у меня стремление есть, к тому чтобы была возможность с помощью модуля создавать какие нибудь простенькие программы, например, как игра «Косилка».

Обращение к специалистам.
Хотелось бы, чтобы специалисты не оставили этот модуль без внимания, а также хотелось бы конструктивной, существенной критики по модулю. Также, мне не помешала бы техническая поддержка для его совершенствования. На данный момент основной «штопор» у меня, это использование модуля в Visual Studio 6 и в C++Builder 6. Если кого не затруднит, попробуйте использовать данный модуль в какой-то среде, (не только вышеперечисленных), и отпишите как это делается, а лучше выложите, готовый пример, шаблон или черновик. Также не мешало бы, чтобы мне указали, какие функции необходимо в него реализовать в первую очередь, т. е. функции которые часто используются.

Архив и его содержимое.
Архив содержит каталоги «Demo1DLL», — демо пример с использованием KOS.dll и каталог «Demo1», пример этой же демки для которая компилирует код для КОС.
В каталогах файлы:
Pattern.prt, - проект FasmEditor 2.0, его и нужно открывать. :-)
fkKOS.asm – модули содержащие, в данном случае, - макросы, одинаково названные, но по разному реализованные в «Demo1» и в «Demo1DLL».
Main.asm — главный модуль демо-примера, (использует fkKOS.asm)
KOS.txt — описание процедур и функций, а также соглашений по передачи данных, которые доступны в модуле KOS.dll (Вырезка из исходника, написанного на Дельфи7)
Внимание! На работоспособность проверялись лишь те макросы, которые используются в этих самих демо-программах!

Данным примером, я хочу показать как можно использовать модуль KOS.dll.
Как видите, можно создать шаблоны для написания программ, один с использованием KOS.dll, другой, - для компилирования в код-КОС, причём эти шаблоны могут быть созданы таким идеальным образом, что основной модуль программы (Main.asm), после написания и проверки программы, сможет быть про просто скопирован в другой шаблон для компилирования кода-КОС. И пусть вас не смущают макросы SetEAX и GetEAX и прочее, как вы сами прекрасно понимаете, в модулях fkKOS.asm, обоих шаблонов (демок) вполне могут быть созданы процедуры CreateWindow, PutPixel, DrawRect и другие, с которыми будет приятно работать и писать программы, основанные на таких ёмких процедурах.
В модуле реализованы некоторые функции, хотя возможно не полностью, не точно. Но всё равно, при желании, можно испробовать их возможности.
Реализованы функции:
Функция 0 - определить и нарисовать окно.
Функция 1 - поставить точку в окне.
Функция 5 - пауза
Функция 10 - ожидать события.
Функция 11 - проверить, есть ли событие, без ожидания.
Функция 13 - нарисовать прямоугольник в окне.
Функция 38 - нарисовать отрезок.
Заканчиваются работы над Функция 2 - получить код нажатой клавиши (сканкоды), кодировка которой, к тому же будет настраиваемая.
Можно написать еще о многом. :-) Но об этом в следующий раз! :-)
В общем, кому это интересно, дайте знать, и....
ПРОДОЛЖЕНИЕ СЛЕДУЕТ!

Spoiler: Show
P.S. За содержание (или осутствие) в архиве вирусов, о которых мне постоянно «толдычет» https://www.virustotal.com , автор не несёт никуда :-) и никакой ответственности!
От себя скажу так: какие-то проявлений вирусов у себя в компьютере или чего-то вредоносного я не обнаруживал!... сколько бы мне не «толдычил» об этом https://www.virustotal.com :-)
На этот раз самое интересное, что обнаружено 5 вирусов в файле Pattern.exe (который я удалил из архива), который является результирующим кодом скомпилированной демки (в Fasme) с использованием KOS.dll, был в папке Demo1DLL. Так, вот, интересное в том, что: как это https://www.virustotal.com не «ткнул» на KOS.dll ?!... он любит «тыкать» на дельфийское exe-шники, dll-ки и всё что связанно с дельфями :-)
В ОБЩЕМ, НА ДАННЫЙ МОМЕНТ АРХИВ «ЧИСТ», СМЕЛО КАЧАЙТЕ! :-)
ЕСЛИ НЕ ВЕРИТЕ, - ПРОВЕРЬТЕ!

Attachment:
_PatternS.7z [147.84 KiB]
Downloaded 101 times


Top
   
 Post subject: Re: МЭФК ( KOS.dll )
PostPosted: Fri Dec 18, 2015 11:19 am 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Функция 2 - получить код нажатой клавиши.
Spoiler: Show
Забирает код нажатой клавиши из буфера.
Параметры:
* eax = 2 - номер функции
Возвращаемое значение:
* если буфер пуст, возвращается eax=1
* если буфер непуст, то возвращается al=0, ah=код нажатой клавиши,
биты 16-23 содержат сканкод нажатой клавиши в режиме ASCII,
в режме сканкодов биты обнулены.
биты 23-31 обнулены
* если есть "горячая клавиша", то возвращается
al=2, ah=сканкод нажатой клавиши (0 для управляющих клавиш),
старшее слово регистра eax содержит состояние управляющих клавиш
в момент нажатия горячей клавиши
..................

Замечания:
* Существует общесистемный буфер нажатых клавиш размером 120 байт,
организованный как очередь.
* Существует ещё один общесистемный буфер на 120 "горячих клавиш".
* При вызове этой функции приложением с неактивным окном
считается, что буфер нажатых клавиш пуст.
............................


Нужен фрагмент кода реализующих СКАНКОДЫ (именно сканкоды, а не ascii).
А то по описанию очень сложно понять : обнулённые биты.... какие-то "горячие клавиши", что это вообще такое?!... буфер на 120.... еще один буфер на 120 "горячих клавиш".....
Горячие клавиши, это те, что с доп.кодом EXT ?

Или может кто-то сможет объяснить "человеческим" языком как это реализовать в функцию 2, если на выходе процедуры обрабатывающей клавиши (в МЭФК), у меня уже есть KOSkey(сканкод) , Ext(доп.код) ,fUPDOWN (флаг нажата/отжата) (ну при желании если нужно и WINKey(код из процедуры формы(виндовый код)), хотя зачем это).
Может имея готовые такие данные как KOSkey , Ext ,fUPDOWN проще "склепать" результатирующий выход eax (функции номер 2) и не заморачиваться на каких-то буферах ?

вот это viewtopic.php?f=33&t=3202&p=63466#p63466 я так понял, реализация ascii ?


Top
   
 Post subject: Re: МЭФК ( KOS.dll )
PostPosted: Fri Dec 18, 2015 2:52 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
Если функцией 66.1 установить режим "сканкоды", то просто al = 1, ah = сканкод.
Если функцией 66.4 установить горячую клавишу, то при её нажатии al = 2, ah = сканкод, eax >> 16 = состояние управляющих клавиш (shift, ctrl, alt).
Иначе al = 1, ah = ASCII код, eax >> 16 = сканкод.


Top
   
 Post subject: Re: МЭФК ( KOS.dll )
PostPosted: Fri Dec 18, 2015 4:36 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Pathoswithin wrote:
Если функцией 66.1 установить режим "сканкоды", то просто al = 1, ah = сканкод.
Если функцией 66.4 установить горячую клавишу, то при её нажатии al = 2, ah = сканкод, eax >> 16 = состояние управляющих клавиш (shift, ctrl, alt).
Иначе al = 1, ah = ASCII код, eax >> 16 = сканкод.

Если это всё охарактеризовать двумя словами, то эти слова: НУ, БЛИН! :-( :-)
Я в шоке! Чувствую, что застрял надолго!
А как программа ScanCode вообще реализована ?! Она что "мечит" по переключениях режимов ?... ну мало ли какую я клавишу нажму, она ведь не знает заранее "горячую" иль "не горячую"?!... или я чего-то не так понимаю?! А ScanCode исходник есть ?... на свн или где ? Разобраться можно ? или по исходнику, не лучше чем сейчас разберусь!? :-)


Top
   
 Post subject: Re: МЭФК ( KOS.dll )
PostPosted: Fri Dec 18, 2015 6:22 pm 
Offline

Joined: Sun Aug 09, 2015 3:41 pm
Posts: 110
Горячие клавиши, это клавиши уведомление о нажатии которых приложение получает даже если оно не активно. Каждое приложение может назначить свой список горячих клавиш. Например панель обрабатывает такие горячие клавиши как Win для запуска меню, Ctrl+Alt+F12 для запуска end, Alt+F4 для завершения активного приложения. В сборке есть приложение mykey, которое может запускать с параметрами указаное пользователем приложение с помощью нажатия определенной клавиши или комбинации клавиш, при этом само приложение mykey может быть неактивно и свернуто.


Top
   
 Post subject: Re: МЭФК ( KOS.dll )
PostPosted: Fri Dec 18, 2015 8:01 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1621
ALEXS1983 wrote:
Неудобство заключается в том, что скомпилированную программу, нельзя сразу же из компилятора FASM запустить и посмотреть результат выполнения написанного кода. Также отсутствие возможности, с пошаговой «прокруткой» программы, наблюдением за изменением переменных и результатом вывода на экран при пошаговой «прокрутки» программы и прочее. Для новичков, и не только новичков, это очень немаловажно!
Ну так не надо использовать виндовые программы. В KolibriOS есть редактор Tinypad и отладчик mtdbg. Под KlbrInWin могут и не работать, естественно.

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


Top
   
 Post subject: Re: МЭФК ( KOS.dll )
PostPosted: Sun Jan 03, 2016 10:07 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
ALEXS1983 wrote:
На данный момент основной «штопор» у меня, это использование модуля в Visual Studio 6 и в C++Builder 6. Если кого не затруднит, попробуйте использовать данный модуль в какой-то среде, (не только вышеперечисленных), и отпишите как это делается, а лучше выложите, готовый пример, шаблон или черновик.

Кто нибудь пробовал этот модуль в Visual Studio 6 и в C++Builder 6 или в других средах программирования ?


Top
   
 Post subject: Re: МЭФК ( KOS.dll )
PostPosted: Sat Jan 09, 2016 11:14 am 
Offline
User avatar

Joined: Tue May 08, 2007 12:44 am
Posts: 346
В чем смысл затеи? Писать под KolbiriOS на Delphi? Была такая тема, я на ней сдулся.

_________________
Разработчик языка программирования Кантор


Top
   
 Post subject: Re: МЭФК ( KOS.dll )
PostPosted: Sat Jan 09, 2016 4:24 pm 
Offline

Joined: Sat Nov 14, 2015 11:15 am
Posts: 299
Freeman wrote:
В чем смысл затеи? Писать под KolbiriOS на Delphi?

Смысл затеи (был!) в том, чтобы прикрепив модуль к чему угодно, ( к чему только можно прикрепить DLL, - Фасм, СИ еще чего-то) писать программы (в частности в винде) используя модуль как визуализатор, а не просто получать готовый запускаемый файл который можно запускать лишь в КОС! Понял весь смысл ?
Ну вот допустим прикрутил ты модуль к MS6 (или еще какой-то сишке ) и "клепай" себе программы для КОС запуская и тестируя и пошагово проверяй и дебагером-MS6 пользуйся, да и результат видно с помощью длл-модуля. Так пишешь программу до полной готовности, не прибегая к проверки программы в самой КОС. Удобно бы было ?! Правда ?


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 9 posts ] 

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


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