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

Applications development, KoOS API questions
  • mixator wrote:
    Wildwest wrote:Во-первых, посмотрите исходники уже готовых программ http://websvn.kolibrios.org/listing.php ... Kolibri+OS
    Во-вторых, на каком языке собираетесь писать?
    писать собираюсь на плюсах. Хочу сделать маленькое подтверждение или опровержение своей идеи. Идея состоит в концептуальной возможности использования интерпретатора html-подобного языка для построения интерфейсов
    ПС. О qt слышал, это немного не то.
    Что то вроде htmlayout?
  • Надо бы тему что-то вроде "Сниппеты". Раз такой нет, напишу сюда, чтоб не потерялось.

    Установить прозрачный (невидимый) курсор. Автор Марио

    Code: Select all

    set_new_cursor_skin:
    mcall	68,12,32*32*4
    mov	ecx,eax
    mcall	37,4,,2
    mov	ecx,eax
    mcall	37,5
    ret
    Из хаоса в космос
  • 0CodErr wrote:Хочу нарисовать окно 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
    Как сделать, чтобы окно полностью закрашивалось?
    В r4572 должно полностью закрашиваться. Там код ядра по непонятным мне загадочным причинам считал, что если клиентская область окна типа I меньше 5 пикселей, то и рисовать её не надо. Документация как показали раскопки svn при этом отражала состояние на момент до r114, когда заголовок рисовался на 4 пикселя вперехлёст с рабочей областью, так что до r114 тоже должно было полностью закрашиваться, документацию я обновила.
    Сделаем мир лучше!
  • 0CodErr wrote:Хотелось уточнить, что всё-таки делает функция 18.10?
    То, что написано в Wiki:
    Сворачивает собственное окно.
    или же то, что сказал art_zh:
    18.10 предполагает, что у активного приложения и окно - активное.
    Его и сворачивают.
    При нажатии на кнопку минимизации вызывается она же?

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

    И с кнопкой закрытия такая же ситуация.
    Функция 18.10 сворачивает активное окно. Я поправила документацию.
    Сделаем мир лучше!
  • Подскажите в чем проблема. В общем не собирается ругаясь на запрещенную инструкцию, хотя взял от из архива с Job, который вполне успешно с ним собирается.
    Attachments
    TASK.7z (7.35 KiB)
    Downloaded 222 times
    to infinity and beyond
  • include 'proc32.inc'
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Вот такой код:

    Code: Select all

    ORG 0
    BITS 32
    ; -------------------------- ;
    STACK_SIZE equ 256
    ; -------------------------- ;
    PAGE_SIZE  equ 4096
    MEMORY_ALLOC_SIZE equ PAGE_SIZE * 32
    ; -------------------------- ;
            db     'MENUET01'
            dd     1
            dd     START
            dd     END
            dd     END + STACK_SIZE
            dd     END + STACK_SIZE
            dd     0
            dd     0
    ; -------------------------- ;
    START:
    ; heap.initialize:
            mov    eax, 68
            mov    ebx, 11
            int    64
            mov    ecx, MEMORY_ALLOC_SIZE
            xor    edx, edx
            div    ecx
            mov    edx, eax ; save (HeapSize / MEMORY_ALLOC_SIZE) to edx
    ; memory.allocate
            inc    ebx
    .next:
            mov    eax, 68
            int    64
            dec    edx
            jnz    .next
            or     eax, -1
            int    64
    END:
    Я запустил несколько копий полученной программы:
    Spoiler:Image
    Но ведь у меня нет столько памяти, почему так?

    Code: Select all

    0x759A1000 + 
    0x7ADA1000 + 
    0x7A821000 + 
    0x7C1E1000 + 
    0x7A661000 + 
    0x7A101000 + 
    0x792C1000 + 
    0x791E1000 = 0x3CDD48000
  • Потому что в Колибри очень хитрый менеджер памяти. Запрос ф.68 лишь "протокол о намерениях", а при первом физическом обращении происходит выделение запрашиваемой страницы. Это такой хитрый финт позволяющий экономить память. Более подробно узнавать у Serge.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Всем привет!

    Познакомился с этой операционной системой, почитал мануалы, решил написать под нее что-нибудь. Суть моего обращения в том, что процесс разработки для меня очень неудобен.

    Я делаю так: пишу в fasmw на Windows, копирую на флэшку, в qemu крутится Kolibri, кидаю файлы программы туда, компилирую, пакую, запускаю. При каких-либо ошибках ищу их в винде, потом снова копирую, перекидываю, компилирую, и так далее.

    Если пишу код в Kolibri, то непременно забываю копировать его на флэшку после отладки, и при выключении системы все, естественным образом, стирается. Это, разумеется, мои проблемы с памятью, но, даже при условии ее нормального функционирования, это было бы не очень удобно.

    Научите меня, пожалуйста, как правильно делать? Или есть только такие варианты?
  • Хм... а если в qemu создать жёсткий диск и на нём хранить свои труды? Потом только на флешку скинуть, если в Винде исходники вдруг понадобятся. Я в VurtualBox'е так и делаю - грузиться виртуалка с дискеты, а на жёстком диске (ну эмулируемом, разумеется) хранятся исходники.
    Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
  • Спасибо. Как-то мне вопрос сразу глупым казаться стал, вроде не первый день с виртуальными машинами работаю, а про жесткий диск не подумал. Ну, бывает...
  • Сейчас копаюсь в файловой системе, для программы нужно получить список файлов и папок в данной директории (что-то вроде ls).
    Я так понял, что мне нужна функция 70.1, появилось несколько вопросов по ходу:

    // Ссылка на Wiki по функции: http://bit.ly/1nwcFmb
    Формат информационной структуры:
    Это обязательно struc, или можно просто метку поставить и все объявить?
    +4: dword: индекс начального блока (считая с 0)
    Я правильно понял, что здесь мы указываем, с какого байта нужно начать запись ответа в буфер?
    +8: dword: поле флагов:
    То есть в простейшем случае можно просто dd 0 поставить?
    +16 = +0x10: dword: указатель на буфер, куда будут записаны данные, размер буфера должен быть не меньше 32 + [+12]*560 байт
    Понимаю что это совсем просто, но до меня не доходит. Так сойдет?:

    Code: Select all

    ; structure definition start
    ...
    dd 50 ; blocks number
    dd output_buffer ; result buffer
    ...
    ; structure definition end
    output_buffer rb 32 + 50 * 560
    
    // Ссылка на Wiki по функции: http://bit.ly/1nwcFmb

    Пытался сам разобраться, посмотрел исходники OpenDialog (кажется самый простой файловый менеджер в системе), но и с ним не разобрался.

    Подскажите, правильно ли я понял wiki. Было бы идеально ткнуть меня носом в то место, где все попроще описано (проще чем в OpenDialog), может пример по этой конкретной функции у кого-нибудь есть?

    Спасибо.
  • Пример попроще - CP
  • Who is online

    Users browsing this forum: No registered users and 19 guests