Page 1 of 1

МЭФК ( KOS.dll )

Posted: Thu Dec 17, 2015 10:27 pm
by ALEXS1983
МЭФК ( 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: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-ки и всё что связанно с дельфями :-)
В ОБЩЕМ, НА ДАННЫЙ МОМЕНТ АРХИВ «ЧИСТ», СМЕЛО КАЧАЙТЕ! :-)
ЕСЛИ НЕ ВЕРИТЕ, - ПРОВЕРЬТЕ!
_PatternS.7z (147.84 KiB)
Downloaded 329 times

Re: МЭФК ( KOS.dll )

Posted: Fri Dec 18, 2015 11:19 am
by ALEXS1983
Функция 2 - получить код нажатой клавиши.
Spoiler:Забирает код нажатой клавиши из буфера.
Параметры:
* 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 ?

Re: МЭФК ( KOS.dll )

Posted: Fri Dec 18, 2015 2:52 pm
by Pathoswithin
Если функцией 66.1 установить режим "сканкоды", то просто al = 1, ah = сканкод.
Если функцией 66.4 установить горячую клавишу, то при её нажатии al = 2, ah = сканкод, eax >> 16 = состояние управляющих клавиш (shift, ctrl, alt).
Иначе al = 1, ah = ASCII код, eax >> 16 = сканкод.

Re: МЭФК ( KOS.dll )

Posted: Fri Dec 18, 2015 4:36 pm
by ALEXS1983
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 исходник есть ?... на свн или где ? Разобраться можно ? или по исходнику, не лучше чем сейчас разберусь!? :-)

Re: МЭФК ( KOS.dll )

Posted: Fri Dec 18, 2015 6:22 pm
by Ray
Горячие клавиши, это клавиши уведомление о нажатии которых приложение получает даже если оно не активно. Каждое приложение может назначить свой список горячих клавиш. Например панель обрабатывает такие горячие клавиши как Win для запуска меню, Ctrl+Alt+F12 для запуска end, Alt+F4 для завершения активного приложения. В сборке есть приложение mykey, которое может запускать с параметрами указаное пользователем приложение с помощью нажатия определенной клавиши или комбинации клавиш, при этом само приложение mykey может быть неактивно и свернуто.

Re: МЭФК ( KOS.dll )

Posted: Fri Dec 18, 2015 8:01 pm
by CleverMouse
ALEXS1983 wrote:Неудобство заключается в том, что скомпилированную программу, нельзя сразу же из компилятора FASM запустить и посмотреть результат выполнения написанного кода. Также отсутствие возможности, с пошаговой «прокруткой» программы, наблюдением за изменением переменных и результатом вывода на экран при пошаговой «прокрутки» программы и прочее. Для новичков, и не только новичков, это очень немаловажно!
Ну так не надо использовать виндовые программы. В KolibriOS есть редактор Tinypad и отладчик mtdbg. Под KlbrInWin могут и не работать, естественно.

Re: МЭФК ( KOS.dll )

Posted: Sun Jan 03, 2016 10:07 pm
by ALEXS1983
ALEXS1983 wrote: На данный момент основной «штопор» у меня, это использование модуля в Visual Studio 6 и в C++Builder 6. Если кого не затруднит, попробуйте использовать данный модуль в какой-то среде, (не только вышеперечисленных), и отпишите как это делается, а лучше выложите, готовый пример, шаблон или черновик.
Кто нибудь пробовал этот модуль в Visual Studio 6 и в C++Builder 6 или в других средах программирования ?

Re: МЭФК ( KOS.dll )

Posted: Sat Jan 09, 2016 11:14 am
by Freeman
В чем смысл затеи? Писать под KolbiriOS на Delphi? Была такая тема, я на ней сдулся.

Re: МЭФК ( KOS.dll )

Posted: Sat Jan 09, 2016 4:24 pm
by ALEXS1983
Freeman wrote:В чем смысл затеи? Писать под KolbiriOS на Delphi?
Смысл затеи (был!) в том, чтобы прикрепив модуль к чему угодно, ( к чему только можно прикрепить DLL, - Фасм, СИ еще чего-то) писать программы (в частности в винде) используя модуль как визуализатор, а не просто получать готовый запускаемый файл который можно запускать лишь в КОС! Понял весь смысл ?
Ну вот допустим прикрутил ты модуль к MS6 (или еще какой-то сишке ) и "клепай" себе программы для КОС запуская и тестируя и пошагово проверяй и дебагером-MS6 пользуйся, да и результат видно с помощью длл-модуля. Так пишешь программу до полной готовности, не прибегая к проверки программы в самой КОС. Удобно бы было ?! Правда ?