Помогите новичку
-
Как можно узнать скан код клавиши? Описание KOS API читал, но не оч разобрался. И есть у кого рабочий таймер, процедура, макрос - неважно. Чтоб даешь ему время в секундах, и он проводит отчет?to infinity and beyond
программа /sys/develop/scancode показывает код нажатой клавиши.
/sys/demos/timer отсчитывает секунды, работает через функцию 26.9 - получение времени с момента запуска системы
/sys/demos/timer отсчитывает секунды, работает через функцию 26.9 - получение времени с момента запуска системы
Из хаоса в космос
Если попытаться запустить с помощью SysFn70.7 файл размером 0 байт, то возвращается ошибка "File not found". Это так задумано что ли?
Успешность открытия файла проверяется по вернувшемуся размеру. Всем пофиг, вот никто не пилил полноценную логику обработки.
Upd:
http://websvn.kolibrios.org/filedetails ... c#line-139
Правда, теперь надо найти где функция load_file и посмотреть даёт ли она вообще информацию о том какая именно ошибка произошла.
Долго ищу, потому что похоже что websvn больше не индексируется гуглом.
Also, забавно: кто-то положил на verysource.com сорцы колибри древнющей версии 0.6.5.0, причём дата - май 2012
Точнее, это печально, а не забавно.
Upd2: таки скачал с svn'а чтобы грепать.
Про размер я не [совсем] прав:
А load_file вызывает get_fileinfo, которая вызывает функцию 70.5, про которую недавно спрашивали в чатке.
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
Функцию я писал.
Не совсем ясно что делать при нулевом размере файла ? Возвращать ошибку, или пустой указатель ?
Не совсем ясно что делать при нулевом размере файла ? Возвращать ошибку, или пустой указатель ?
Использовать 3 регистра
?
Code: Select all
; retval
; eax= 0 - success, otherwise file system error code
; ebx= file image in kernel memory
; ecx= size of file
В принципе, можно ошибку и указатель совместить, но для этого надо чтобы было всё задокументировано и стандартизовано.
Тогда можно будет делать cmp eax, -MAX_FS_ERROR && jae .error
Но да, проблема не в нулевом размере, а в том что ошибок файловой системы есть много разных, в то время как у load_file только два варианта: успех и неуспех.
Тогда можно будет делать cmp eax, -MAX_FS_ERROR && jae .error
Но да, проблема не в нулевом размере, а в том что ошибок файловой системы есть много разных, в то время как у load_file только два варианта: успех и неуспех.
Сейчас совсем нет времени этим заниматься. Если есть желающие, исправьте.
Желающие ломать имеющийся API? Надо тогда начинать с того, кто им пользуется на данный момент.
Для всех новичков:
Учебник по программированию на Ассемблере
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
Хочеться надеяться кому-то поможет
Учебник по программированию на Ассемблере
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
Хочеться надеяться кому-то поможет
Программист не тот, кто постоянно пишет КОД, а тот кто сможет понять чужой КОД!!!
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 ; Прерывание
edi = 0x00RRGGBB - цвет рамки
Объясните пожалуйста, в чём моя невнимательность.
PS: второй день только знакомлюсь с системой, простите за глупые вопросы.
Цитата:
" 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
" 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
Спасибо, с этим разобрался, кроме A == 1 , B == 1
Х = 3 получается, как dec(3) - binary (0011) ? Правильно?
и что с первым вопросом?
(пошёл перечитывать внимательнее)
Х = 3 получается, как dec(3) - binary (0011) ? Правильно?
и что с первым вопросом?
(пошёл перечитывать внимательнее)
Насчёт A == 1 , ... - ИМЕННО ТАК !
А насчёт первого вопроса - недостаточно информации (системные вызовы Kolibri OS сохраняют все регистры за исключением тех, в которых возвращается значение, либо явно указано, что регистр не сохраняется) ...
А насчёт первого вопроса - недостаточно информации (системные вызовы Kolibri OS сохраняют все регистры за исключением тех, в которых возвращается значение, либо явно указано, что регистр не сохраняется) ...
Всё спасибо разобрался, там просто записывалось число количества кнопок в ряду (приложение калькулятор)
Who is online
Users browsing this forum: No registered users and 25 guests