Page 6 of 8
Re: Названия системных функций
Posted: Fri Dec 18, 2015 9:08 am
by ALEXS1983
Code: Select all
// функция 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: Названия системных функций
Posted: Fri Dec 18, 2015 2:26 pm
by Pathoswithin
Подожди, названия ещё не утвердили.
Зачем функции? KOSfuncs.h можно сделать в виде макросов.
Re: Названия системных функций
Posted: Fri Dec 18, 2015 4:39 pm
by ALEXS1983
Pathoswithin wrote:Подожди, названия ещё не утвердили.
Хорошо! Сообщайте когда утвердите!
Pathoswithin wrote:Зачем функции? KOSfuncs.h можно сделать в виде макросов.
В виде макросов, говоришь!?....
в виде таких макросов на который нарвался я ?!
Re: Названия системных функций
Posted: Fri Dec 18, 2015 6:10 pm
by Ray
Обертки делай в виде функций.
В Си нет процедур. Для возврата нескольких значений из функции используется передача параметров по ссылке, т.е. с указанием операции взятия адреса & перед именем параметра. Либо возврат структуры, объекта, указателя через return.
Re: Названия системных функций
Posted: Fri Dec 18, 2015 6:20 pm
by Veliant
Ray wrote:Для возврата нескольких значений из функции используется передача параметров по ссылке, т.е. с указанием операции взятия адреса & перед именем параметра
Увы, это возможно для C++, но не для C. А вот передача параметров по указателю более универсальная
Re: Названия системных функций
Posted: Fri Dec 18, 2015 7:56 pm
by CleverMouse
ALEXS1983 wrote:Я Си знаю плохо, поверхностно, но насколько я понял, что в данном случае результат возвращается и через саму функцию 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: Названия системных функций
Posted: Fri Dec 18, 2015 8:17 pm
by Pathoswithin
Хорошо, тогда... функции versus макросы.
Код макросов будет выглядеть так:
push ebx
mov eax, funcNumber
mov ebx, subFuncNumber
mov ecx, [a]
mov edx,
int 40h
mov [c], eax
mov [d], ebx
pop ebx
В функцию надо передать в стеке параметры + указатели для возвращаемых значений, поскольку их может быть несколько. Скомпилированый код будет немного меньше:
push d
push c
push
push [a]
call funcName
но в программу будет включатся код функции (всех функций подключаемого файла, насколько я понимаю), который соответствует коду макроса.
Re: Названия системных функций
Posted: Fri Dec 18, 2015 8:21 pm
by CleverMouse
ALEXS1983 wrote:(Вот только жаль функции нельзя присвоить в том массив процедур, и отдельный массив функций нельзя создать, в частности в Дельфи7)
Что, правда нельзя? В Си - запросто:
Code: Select all
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: Названия системных функций
Posted: Fri Dec 18, 2015 8:55 pm
by CleverMouse
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: Названия системных функций
Posted: Fri Dec 18, 2015 9:34 pm
by Pathoswithin
должно быть и sent вместо send
Надо же, из документации копипастил...
Названия SSF_* порой слишком общие
Ну одно короткое имя вполне может быть, а уже следующее придётся делать более конкретным. Если такой подход тебя не устраивает, то какие удлинять? Все из одного слова?
Re: Названия системных функций
Posted: Sun Dec 20, 2015 12:29 am
by ALEXS1983
CleverMouse wrote: А что, в дельфи уже нельзя написать function GetKey(var keyCode: byte): boolean; или как оно там?
Да писать то можно! Но я же говорю, что выглядит это дико! Я сколько пересматривал примеров и частей кода по дельфи, не помню, чтобы мне такое попадалось на глаза!
Ну да ладно!...
Принимайте "в печать"! Пусть будет!
Re: Названия системных функций
Posted: Mon Dec 21, 2015 2:40 pm
by Pathoswithin
Ладно, тогда вот так.
Re: Названия системных функций
Posted: Tue Dec 22, 2015 7:54 pm
by Pathoswithin
revision #6000
Названия утверждены. Теперь можно делать стандартный KOSfuncs.h для сей.
Re: Названия системных функций
Posted: Sun Jan 03, 2016 10:10 pm
by ALEXS1983
Pathoswithin wrote:revision #6000
Названия утверждены. Теперь можно делать стандартный KOSfuncs.h для сей.
Ну и ?!..... Чего ждём ?!
Окончания новогодних праздников ?
Или зачинщика который этим займётся ?!
Могу заняться. Но... для дельфи, а после "перевести" программкой "Delphi2Cpp" на Си, так пойдёт ? Пробное кидать ?
Re: Названия системных функций
Posted: Sun Jan 03, 2016 11:21 pm
by punk_joker
Кидай, просто список имен, без реализации. Как утвердятся имена, можно будет и заголовочные файлы переписывать.