Есть вопрос

Assembler programming questions
  • Никак. Функция есть, но доступна только из ядра
  • Драйвер эту функцию вызвать сможет?
  • Да. GetPgAddr
  • Большое спасибо Serge. Это как раз то, что мне было нужно. :)
  • Ещё вопрос : программа может узнать каким-либо образом свой адрес в файловой системе?
  • Что значит адрес ? Каталог из которого она запущена ?
  • Да
  • Code: Select all

    db 'MENUET01'
    dd 1
    dd start
    dd i_end
    dd mem
    dd mem
    dd 0
    dd app_path   ;буфер для хранения полного пути приложения. 1024 байта
    
    
    start:
    
    ; находим последний '/' и заменяем его 0. Получается полный путь к ;каталогу из которого запущена программа.
    
              pushd path
    
              push '/'
              push app_path
              call _strrchr    ;стандартная функция С ищет в строке последний указанный символ
    
              mov byte [eax], 0
    
    ;делаем этот каталог текущим рабочим
              mov eax, 30
              mov ebx, 1
              mov ecx, [esp+8]
              int 0x40
    
    ;теперь программа может открывать файлы в своей папке без указания полного пути
    Всё это должны были делать файловые менеджеры, но они этого не делают. В результате все программы запущенные в Колибри получают своим рабочим каталогом /rd/1/
  • Спасибо Serge, ты действительно разбираешься во многих вещах. А это ИМХО заслуживает звания хакера ОС Колибри. :wink:
  • to Asper
    Serge не только разбирается во многих вещах, но и имеет время отвечать на вопросы. Мне бы времени...(
  • То же самое только на ассемблере

    Code: Select all

    db 'MENUET01'
    dd 1
    dd start
    dd i_end
    dd mem
    dd mem
    dd 0
    dd app_path   ;буфер для хранения полного пути приложения. 1024 байта
    
    
    start:
            mov     edi,app_path
            mov     ecx,1024
            mov     esi,ecx
            xor     eax,eax
            cld
            repne   scasb
            test    ecx,ecx
            jz       exit
    
            sub     esi,ecx
            mov     ecx,esi
            std
            mov     al,'/'
            repne   scasb
            test    ecx,ecx
            jz      exit
            add     edi,2
            mov    [edi],0 ;ACSIIZ строка
    
    ; сейчас edi указывает на конец строчки типка /rd/1/File manager/
    ;                                                                                            ^ - тут edi 
              mov eax, 30
              mov ebx, 1
              mov ecx, app_path
              int 0x40
    
    ....
    
    app_path   rb 1024
    i_end:
    PS если нужно загрузить либу, то смотри код
    svn\bin\programs\develop\box_lib\trunk\editbox_ex.asm
    тут реализован код загрузки библиотеки из папки в которой загружена программа, а если невозможно загрузить, используется ini_file db '/sys/lib/box_lib.obj',0
  • Nable
    Я мог бы применить сказанные мной слова не только к Serge'у, а ко многим людям которые занимаются разработкой прикладного и системного софта для ОС Колибри, а также развитием собственно её. Ну а Serge'у и другим людям, которые своевременно отвечают на мои может быть иногда и дурацкие иногда вопросы я лично благодарен, т.к. их ответы помогают мне самому больше узнать Колибри и быстрее писать для неё программы не тратя время на самостоятельный поиск нужной информации.

    LRZ
    Respect, не прийдется самому заниматься переводом на ассемблер, а это как я уже написал Nable'у ускоряет мою работу.
  • Отцами-основателями Колибри считаю Mario79, Mike.dld и Diamond'а, возвращению последнего на форум я искренне рад, хотелось бы верить и в возвращение Mario79. :)
  • Mario79 играл очень сложную, неоднозначную, но важную роль... было бы очень здорово, если бы он вернулся...;)
    *****:
    ;дух машины, мой бубен сильнее твоей тупости

    *****:
  • Who is online

    Users browsing this forum: No registered users and 5 guests