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 можно сделать в виде макросов.
В виде макросов, говоришь!?.... :-) в виде таких макросов на который нарвался я ?! :D :lol:

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
Кидай, просто список имен, без реализации. Как утвердятся имена, можно будет и заголовочные файлы переписывать.