Page 35 of 77

Posted: Fri Jun 29, 2012 6:24 pm
by 0CodErr
Хочу нарисовать окно 200x25 пикселей с зелёной рамкой, а внутри полностью красное.

Code: Select all

		xor eax, eax
		mov ebx, 200
		mov ecx, 25
		mov edx, 00FF0000h
		mov edi, 0000FF00h
		mov esi, 01FF0000h
		int 64
Но нижняя область не закрашивается.
Image
Как сделать, чтобы окно полностью закрашивалось?

Re: Помогите новичку

Posted: Fri Jun 29, 2012 10:25 pm
by Leency
Просто определяй окно без рисования чего либо.
А поверх рисуй уже рамку из линий и заливай фон красным.

У меня вопрос: как бороться с переопределениями?

Code: Select all

1>          C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\string.h(112): см. объявление "strlen"
1>F:\tinybasic\smalllibc\kosSyst.h(121): error C2556: char *strrchr(const char *,int): перегруженная функция отличается от "const char *strrchr(const char *,int)" только возвращаемым типом

1>          C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\string.h(193): см. объявление "strrchr"
1>F:\tinybasic\smalllibc\kosSyst.h(121): error C2373: strrchr: переопределение; различные модификаторы типа

1>f:\tinybasic\console.c(17): error C2365: printf: переопределение; предыдущим определением было "функция"
1>          C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdio.h(285): см. объявление "printf"

Re: Помогите новичку

Posted: Fri Jun 29, 2012 10:38 pm
by SoUrcerer
Не использовать стандартные библиотеки. В gcc это лечится ключами -nostdinc -nostdlib. Еще можно переименовать функции в console.c, но это надолго.

Re: Помогите новичку

Posted: Fri Jun 29, 2012 10:50 pm
by Leency
А чем плохи стандартные strlen и strrchar?

Re: Помогите новичку

Posted: Fri Jun 29, 2012 11:57 pm
by SoUrcerer
Тем, что используют winapi, если ты про MSVC, или linux libc, если про gcc|clang.

Re: Помогите новичку

Posted: Sat Jun 30, 2012 5:41 pm
by Nable
Не обязательно libc, в gcc они ещё и встроенные бывают, вот те - самые годные.
Хотя, в MSVC тоже встроенные некоторые есть.

Re: Помогите новичку

Posted: Tue Jul 03, 2012 3:40 pm
by 0CodErr
Правильно ли я понимаю, что в Kolibri окно приложения может быть и максимизировано, и минимизировано одновременно?

Re: Помогите новичку

Posted: Fri Jul 06, 2012 4:40 pm
by Nable
А что тут такого? В винде же когда сворачиваешь развёрнутое на весь экран окно, а потом его восстанавливаешь, то оно снова на весь экран.

Re: Помогите новичку

Posted: Wed Jul 11, 2012 11:17 pm
by Leency

Code: Select all

Параметры:
  * eax = 14 - номер функции
Возвращаемое значение:
  * eax = [xsize]*65536 + [ysize], где
  * xsize = x-координата правого нижнего угла экрана =
            размер по горизонтали - 1
  * ysize = y-координата правого нижнего угла экрана =
            размер по вертикали - 1

Code: Select all

inline fastcall int GetScreenWidth()
{
	$mov eax, 14
	$int 0x40
	$shr eax, 16
}

inline fastcall int GetScreenHeight()
{
	$mov eax, 14
	$int 0x40
}
Каждый раз возвращается еах. Почему GetScreenWidth() возвращает 799 а GetScreenHeight() не 599, а огромное число типа 52368368?

Re: Помогите новичку

Posted: Wed Jul 11, 2012 11:42 pm
by lev
Потому что, как и написано в справке, возвращается eax = [xsize]*65536 + [ysize], в первой функции сдвигом оставляется только [xsize], во второй функции обработки нет и возвращается полное число.
Чтобы получить [ysize] надо взять от EAX только AX, или сделать $and eax,0x0000FFFF или ещё как-нибудь оставить только младшие байты.

Re: Помогите новичку

Posted: Thu Jul 12, 2012 12:11 am
by Leency
Фак мой моск... то есть спасибо. Я сейчас учебник по асму почитываю, до этого ещё не дошёл.

Re: Помогите новичку

Posted: Thu Jul 12, 2012 9:43 pm
by SoUrcerer
Странно, обычно логические операции с битовыми масками рассказываются в начале книжек.

Re: Помогите новичку

Posted: Fri Jul 13, 2012 2:05 am
by Leency
ru.wikibooks.org/wiki/Ассемблер_в_Linux_для_программистов_Си :)

Posted: Fri Jul 13, 2012 7:21 pm
by punk_joker
Помогите с массивами, а точнее как происходит индексация и как обращатся к элементам?

Re: Помогите новичку

Posted: Fri Jul 13, 2012 8:04 pm
by 0CodErr
Хотелось уточнить, что всё-таки делает функция 18.10?
То, что написано в Wiki:
Сворачивает собственное окно.
или же то, что сказал art_zh:
18.10 предполагает, что у активного приложения и окно - активное.
Его и сворачивают.
При нажатии на кнопку минимизации вызывается она же?

Запускаем приложение, использующее OpenDialog(TinyPad, HeEd, ...).
Запускаем из этого приложения OpenDialog.
Пытаемся свернуть окно самой программы нажатием на кнопку минимизации, но после нажатия отпускаем кнопку мыши не сразу, а немного ждём.
В этот момент может свернуться окно OpenDialog, а не окно самой программы.

И с кнопкой закрытия такая же ситуация.