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

Applications development, KoOS API questions
  • программа /sys/develop/scancode показывает код нажатой клавиши.
    /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'а чтобы грепать.
    Про размер я не [совсем] прав:

    Code: Select all

    ; retval
    ;  eax= file image in kernel memory
    ;  ebx= size of file
    А load_file вызывает get_fileinfo, которая вызывает функцию 70.5, про которую недавно спрашивали в чатке.
  • Функцию я писал.
    Не совсем ясно что делать при нулевом размере файла ? Возвращать ошибку, или пустой указатель ?
  • Использовать 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 только два варианта: успех и неуспех.
  • Сейчас совсем нет времени этим заниматься. Если есть желающие, исправьте.
  • Желающие ломать имеющийся 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

    Хочеться надеяться кому-то поможет :)
    Программист не тот, кто постоянно пишет КОД, а тот кто сможет понять чужой КОД!!!
  • 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: второй день только знакомлюсь с системой, простите за глупые вопросы.
  • Цитата:
    " 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) ? Правильно?

    и что с первым вопросом?
    (пошёл перечитывать внимательнее)
  • Насчёт A == 1 , ... - ИМЕННО ТАК !

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

    Users browsing this forum: No registered users and 5 guests