Page 37 of 77

Posted: Mon Jul 30, 2012 12:44 am
by punk_joker
Как можно узнать скан код клавиши? Описание KOS API читал, но не оч разобрался. И есть у кого рабочий таймер, процедура, макрос - неважно. Чтоб даешь ему время в секундах, и он проводит отчет?

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

Posted: Mon Jul 30, 2012 11:34 am
by Leency
программа /sys/develop/scancode показывает код нажатой клавиши.
/sys/demos/timer отсчитывает секунды, работает через функцию 26.9 - получение времени с момента запуска системы

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

Posted: Tue Jul 31, 2012 6:18 pm
by 0CodErr
Если попытаться запустить с помощью SysFn70.7 файл размером 0 байт, то возвращается ошибка "File not found". Это так задумано что ли?

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

Posted: Fri Aug 03, 2012 3:34 pm
by Nable
Успешность открытия файла проверяется по вернувшемуся размеру. Всем пофиг, вот никто не пилил полноценную логику обработки.

Upd:
http://websvn.kolibrios.org/filedetails ... c#line-139
Правда, теперь надо найти где функция load_file и посмотреть даёт ли она вообще информацию о том какая именно ошибка произошла.

Долго ищу, потому что похоже что websvn больше не индексируется гуглом.

Also, забавно: кто-то положил на verysource.com сорцы колибри древнющей версии 0.6.5.0, причём дата - май 2012
Точнее, это печально, а не забавно.

Upd2: таки скачал с svn'а чтобы грепать.
Про размер я не [совсем] прав:

Code: Select all

; retval
;  eax= file image in kernel memory
;  ebx= size of file
А load_file вызывает get_fileinfo, которая вызывает функцию 70.5, про которую недавно спрашивали в чатке.

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

Posted: Fri Aug 03, 2012 10:35 pm
by Serge
Функцию я писал.
Не совсем ясно что делать при нулевом размере файла ? Возвращать ошибку, или пустой указатель ?

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

Posted: Sat Aug 04, 2012 9:08 am
by Asper
Использовать 3 регистра

Code: Select all

; retval
;  eax= 0 - success, otherwise file system error code
;  ebx= file image in kernel memory
;  ecx= size of file
?

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

Posted: Sun Aug 05, 2012 8:59 am
by Nable
В принципе, можно ошибку и указатель совместить, но для этого надо чтобы было всё задокументировано и стандартизовано.
Тогда можно будет делать cmp eax, -MAX_FS_ERROR && jae .error
Но да, проблема не в нулевом размере, а в том что ошибок файловой системы есть много разных, в то время как у load_file только два варианта: успех и неуспех.

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

Posted: Mon Aug 06, 2012 3:21 pm
by Serge
Сейчас совсем нет времени этим заниматься. Если есть желающие, исправьте.

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

Posted: Wed Aug 08, 2012 1:28 am
by Nable
Желающие ломать имеющийся API? Надо тогда начинать с того, кто им пользуется на данный момент.

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

Posted: Wed Aug 08, 2012 9:21 am
by Artyom
Для всех новичков:
Учебник по программированию на Ассемблере
http://it-ebooks.ru/publ/programming/as ... 17-1-0-372
WIKI по KolibriOS
http://ru.wikipedia.org/wiki/KolibriOS
Ночные сборки KolibriOS
http://builds.kolibrios.org
Предыдущие версии KolibriOS
http://kolibrios.org/ru/releases.html

Хочеться надеяться кому-то поможет :)

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

Posted: Wed Aug 08, 2012 4:12 pm
by Akyltist

Code: Select all

    mov  eax,8   ; Функция 8 - определить/удалить кнопку
    mov  ebx,19 shl 16+28 ; [координата по оси x]*65536 + [размер по оси x]
    mov  ecx,49 shl 16+18 ; [координата по оси y]*65536 + [размер по оси y]
    mov  edx,6            ; 0xXYnnnnnn
    mov  esi,[sc.work_button] ; esi = 0x00RRGGBB - цвет кнопки
    mov  edi,7            ; приём чего то?
Что делает последняя строчка?

Code: Select all

    mov  ecx,eax ; Запоминаем высоту скина
    xor  eax,eax ; Очищаем eax (mov eax,0)
    mov  ebx,200 shl 16+256 ; [координата по оси x]*65536 + [размер по оси x]
    add  ecx,200 shl 16+158 ; Высота скина + [координата по оси y]*65536 + [размер по оси y]
    mov  edx,[sc.work]  ; Видимо стиль окна по дефолту ???
    or   edx,0x34000000 ; Или окно со скином фиксированных размеров (надо разобраться)
    mov  edi,title      ; Заголовок окна
    mcall        ; Прерывание
Я так понимаю тут идёт вызов 0 функции, однако в wiki:
edi = 0x00RRGGBB - цвет рамки

Объясните пожалуйста, в чём моя невнимательность.
PS: второй день только знакомлюсь с системой, простите за глупые вопросы.

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

Posted: Wed Aug 08, 2012 4:27 pm
by FireWall
Цитата:
" edx = 0xXYRRGGBB, где:

Y = стиль окна:
Y=0 - тип I - окно фиксированных размеров
Y=1 - только определить область окна, ничего не рисовать
Y=2 - тип II - окно изменяемых размеров
Y=3 - окно со скином
Y=4 - окно со скином фиксированных размеров
остальные возможные значения (от 5 до 15) зарезервированы, вызов функции с такими Y игнорируется
RR, GG, BB = соответственно красная, зеленая, синяя составляющие цвета рабочей области окна (игнорируется для стиля Y=2)

X = DCBA (биты)
A = 1 - у окна есть заголовок; для стилей Y=3,4 адрес строки заголовка задаётся в edi, для прочих стилей используется подфункция 1 функции 71
"

Командой
or edx,0x34000000 ; ...
Устанавливается A == 1 , B == 1 при стиле Y = 4

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

Posted: Wed Aug 08, 2012 4:34 pm
by Akyltist
Спасибо, с этим разобрался, кроме A == 1 , B == 1
Х = 3 получается, как dec(3) - binary (0011) ? Правильно?

и что с первым вопросом?
(пошёл перечитывать внимательнее)

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

Posted: Wed Aug 08, 2012 4:41 pm
by FireWall
Насчёт A == 1 , ... - ИМЕННО ТАК !

А насчёт первого вопроса - недостаточно информации (системные вызовы Kolibri OS сохраняют все регистры за исключением тех, в которых возвращается значение, либо явно указано, что регистр не сохраняется) ...

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

Posted: Wed Aug 08, 2012 5:44 pm
by Akyltist
Всё спасибо разобрался, там просто записывалось число количества кнопок в ряду (приложение калькулятор)