Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Сб окт 21, 2017 10:38 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 99 сообщений ]  На страницу Пред. 13 4 5 6 7 След.
Автор Сообщение
 Заголовок сообщения: Re: Названия системных функций
СообщениеДобавлено: Пт дек 18, 2015 9:08 am 
Не в сети

Зарегистрирован: Сб ноя 14, 2015 11:15 am
Сообщения: 299
Код:
// функция 2 получить код нажатой клавиши
bool kos_GetKey( Byte &keyCode )
{
   Dword result;
   //
   __asm
   {
      push edx
getkey:
      mov  eax,2 ; Gluk
      int  0x40
      cmp eax,1
      jne getkeyi
      mov ah,dh
      jmp getkeyii
getkeyi:
      mov dh,ah ; Gluk
      jmp getkey
getkeyii:
      pop edx
      mov result, eax
   }
   //
   keyCode = result >> 8;
   //
   return ( result & 0xFF ) == 0;
}

Я Си знаю плохо, поверхностно, но насколько я понял, что в данном случае результат возвращается и через саму функцию kos_GetKey и через "байт в скобках" ( Byte &keyCode ). Я такого никогда не делал (хотя знаю, что это вполне допустимо), для меня подобное выгладит дико! Т.е. в моём понимании, функцию используют, только для получения(возвращения) одного единственного параметра, через имя самой функции. В остальных случаях, применяется процедура.
Поэтому в данном случае должно быть либо две функции
bool GetKeyStatus и Byte GetKeyCode (надеюсь правильно написал для СИ)
либо одной процедурой GetKey (bool Status ,Byte KeyCode) (надеюсь правильно написал для СИ) где Status и KeyCode могут быть использованный как для входных и возвращающихся данных из процедуры.
Считаю нормальным возврат из функции в виде структуры (записи) содержащей в себе поля Status и KeyCode, но в данном случае, это неудобно да и не нужно! Не тот случай!


Вернуться к началу
 Заголовок сообщения: Re: Названия системных функций
СообщениеДобавлено: Пт дек 18, 2015 2:26 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1190
Подожди, названия ещё не утвердили.
Зачем функции? KOSfuncs.h можно сделать в виде макросов.


Вернуться к началу
 Заголовок сообщения: Re: Названия системных функций
СообщениеДобавлено: Пт дек 18, 2015 4:39 pm 
Не в сети

Зарегистрирован: Сб ноя 14, 2015 11:15 am
Сообщения: 299
Pathoswithin писал(а):
Подожди, названия ещё не утвердили.

Хорошо! Сообщайте когда утвердите!
Pathoswithin писал(а):
Зачем функции? KOSfuncs.h можно сделать в виде макросов.

В виде макросов, говоришь!?.... :-) в виде таких макросов на который нарвался я ?! :D :lol:


Вернуться к началу
 Заголовок сообщения: Re: Названия системных функций
СообщениеДобавлено: Пт дек 18, 2015 6:10 pm 
Не в сети

Зарегистрирован: Вс авг 09, 2015 3:41 pm
Сообщения: 82
Обертки делай в виде функций.
В Си нет процедур. Для возврата нескольких значений из функции используется передача параметров по ссылке, т.е. с указанием операции взятия адреса & перед именем параметра. Либо возврат структуры, объекта, указателя через return.


Вернуться к началу
 Заголовок сообщения: Re: Названия системных функций
СообщениеДобавлено: Пт дек 18, 2015 6:20 pm 
Не в сети

Зарегистрирован: Чт янв 26, 2006 8:47 pm
Сообщения: 284
Ray писал(а):
Для возврата нескольких значений из функции используется передача параметров по ссылке, т.е. с указанием операции взятия адреса & перед именем параметра

Увы, это возможно для C++, но не для C. А вот передача параметров по указателю более универсальная


Вернуться к началу
 Заголовок сообщения: Re: Названия системных функций
СообщениеДобавлено: Пт дек 18, 2015 7:56 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1599
ALEXS1983 писал(а):
Я Си знаю плохо, поверхностно, но насколько я понял, что в данном случае результат возвращается и через саму функцию kos_GetKey и через "байт в скобках" ( Byte &keyCode ). Я такого никогда не делал (хотя знаю, что это вполне допустимо), для меня подобное выгладит дико! Т.е. в моём понимании, функцию используют, только для получения(возвращения) одного единственного параметра, через имя самой функции. В остальных случаях, применяется процедура.
Поэтому в данном случае должно быть либо две функции
bool GetKeyStatus и Byte GetKeyCode (надеюсь правильно написал для СИ)
либо одной процедурой GetKey (bool Status ,Byte KeyCode) (надеюсь правильно написал для СИ) где Status и KeyCode могут быть использованный как для входных и возвращающихся данных из процедуры.
Считаю нормальным возврат из функции в виде структуры (записи) содержащей в себе поля Status и KeyCode, но в данном случае, это неудобно да и не нужно! Не тот случай!

А что, в дельфи уже нельзя написать function GetKey(var keyCode: byte): boolean; или как оно там?
Эта функция достаёт очередную клавишу из очереди, продвигая при этом очередь, и возвращает признак успеха: true, если получилось, и false, если нет. Если ты предлагаешь две функции, ты просто не понимаешь, что происходит.

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


Вернуться к началу
 Заголовок сообщения: Re: Названия системных функций
СообщениеДобавлено: Пт дек 18, 2015 8:17 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1190
Хорошо, тогда... функции versus макросы.

Код макросов будет выглядеть так:

push ebx
mov eax, funcNumber
mov ebx, subFuncNumber
mov ecx, [a]
mov edx, [b]
int 40h
mov [c], eax
mov [d], ebx
pop ebx

В функцию надо передать в стеке параметры + указатели для возвращаемых значений, поскольку их может быть несколько. Скомпилированый код будет немного меньше:

push d
push c
push [b]
push [a]
call funcName

но в программу будет включатся код функции (всех функций подключаемого файла, насколько я понимаю), который соответствует коду макроса.


Вернуться к началу
 Заголовок сообщения: Re: Названия системных функций
СообщениеДобавлено: Пт дек 18, 2015 8:21 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1599
ALEXS1983 писал(а):
(Вот только жаль функции нельзя присвоить в том массив процедур, и отдельный массив функций нельзя создать, в частности в Дельфи7)

Что, правда нельзя? В Си - запросто:
Код:
typedef unsigned char Byte; // Byte = unsigned char
typedef Byte (*MyFunctionType)(void); // MyFunctionType = pointer to any function that takes no parameters and returns Byte
MyFunctionType funcArray[201];
Byte Test(void) { return 42; }
funcArray[3] = &Test;

Только это неприменимо к данной теме. Массивы подразумевают, что все их элементы однотипны, а системные функции принимают и возвращают сильно разное число аргументов сильно разных типов.

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


Вернуться к началу
 Заголовок сообщения: Re: Названия системных функций
СообщениеДобавлено: Пт дек 18, 2015 8:55 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1599
SF_AUDIO -> SF_PC_SPEAKER. Нормальное аудио совсем не здесь.
SF_SERVISES -> SF_SYS_SERVICE. Хотя с учётом разнообразия подфункций это скорее даже SF_MISC, miscellaneous.
Названия SSF_* порой слишком общие. SSF_MAP? Для фонового рисунка? Что, если в файловой системе появится операция map типа mmap/MapViewOfFile?
В APLLY опечатка, в SSF_КX_PACKET_COUNT русская К вместо R, если используется форма прошедшего времени received, а не начальная receive, то должно быть и sent вместо send.

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


Вернуться к началу
 Заголовок сообщения: Re: Названия системных функций
СообщениеДобавлено: Пт дек 18, 2015 9:34 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1190
Цитата:
должно быть и sent вместо send
Надо же, из документации копипастил...
Цитата:
Названия SSF_* порой слишком общие
Ну одно короткое имя вполне может быть, а уже следующее придётся делать более конкретным. Если такой подход тебя не устраивает, то какие удлинять? Все из одного слова?


Вернуться к началу
 Заголовок сообщения: Re: Названия системных функций
СообщениеДобавлено: Вс дек 20, 2015 12:29 am 
Не в сети

Зарегистрирован: Сб ноя 14, 2015 11:15 am
Сообщения: 299
CleverMouse писал(а):
А что, в дельфи уже нельзя написать function GetKey(var keyCode: byte): boolean; или как оно там?

Да писать то можно! Но я же говорю, что выглядит это дико! Я сколько пересматривал примеров и частей кода по дельфи, не помню, чтобы мне такое попадалось на глаза!
Ну да ладно!... :-) Принимайте "в печать"! Пусть будет!


Вернуться к началу
 Заголовок сообщения: Re: Названия системных функций
СообщениеДобавлено: Пн дек 21, 2015 2:40 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1190
Ладно, тогда вот так.


Вернуться к началу
 Заголовок сообщения: Re: Названия системных функций
СообщениеДобавлено: Вт дек 22, 2015 7:54 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1190
revision #6000
Названия утверждены. Теперь можно делать стандартный KOSfuncs.h для сей.


Вернуться к началу
 Заголовок сообщения: Re: Названия системных функций
СообщениеДобавлено: Вс янв 03, 2016 10:10 pm 
Не в сети

Зарегистрирован: Сб ноя 14, 2015 11:15 am
Сообщения: 299
Pathoswithin писал(а):
revision #6000
Названия утверждены. Теперь можно делать стандартный KOSfuncs.h для сей.

Ну и ?!..... Чего ждём ?! :-) Окончания новогодних праздников ? :-)
Или зачинщика который этим займётся ?! :-)
Могу заняться. Но... для дельфи, а после "перевести" программкой "Delphi2Cpp" на Си, так пойдёт ? Пробное кидать ?


Вернуться к началу
 Заголовок сообщения: Re: Названия системных функций
СообщениеДобавлено: Вс янв 03, 2016 11:21 pm 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1076
Кидай, просто список имен, без реализации. Как утвердятся имена, можно будет и заголовочные файлы переписывать.

_________________
я лишь учусь


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 99 сообщений ]  На страницу Пред. 13 4 5 6 7 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB