http качалка

...
  • Network Downloader 0.6

    - прикручен edit_box
    - используются ситемные цвета
    - удалён старый код

    Editbox я прикручивал основываясь на изменениях IgorA в программе hex2dec2bin, и ему же огромное спасибо за статью об EditBox'e на Вики. Реально без этого ничего бы не вышло.

    Осталась одна проблема: не работает мышь. Как к этой строке добавить обработку мыши?

    Code: Select all

    mcall 40, 10000000b ; only net event!!!
    Attachments
    downloader.zip (15.38 KiB)
    Залью на SVN после исправления последнего бага
    Downloaded 364 times
    Из хаоса в космос
  • Как однажды сказал один человек "Мнение пишущего код более приоритетно, чем мнение советующих".

    Вообще можно было подойти к проблеме с другой стороны - написать GUI часть отдельным приложением, которое будет вызывать программу, также как это сейчас делает HTMLv. В этом случае вообще не было бы вопросов. Кстати даже прикрутить edit_box можно так чтобы в безоконном режиме box_lib вообще не загружался.
  • Leency wrote:Осталась одна проблема: не работает мышь. Как к этой строке добавить обработку мыши?

    Code: Select all

    mcall 40, 10000000b ; only net event!!!
    Установкой нужного бита.
    http://wiki.kolibrios.org/wiki/SysFn40/ru
    ebx = маска: бит i соответствует событию i+1 (см. список событий)
    http://wiki.kolibrios.org/wiki/Ru/api/kernel
    Spoiler:
    Список событий
    Очередное событие можно получить вызовом одной из функций 10 (ожидать события), 11 (проверить без ожидания), 23 (ожидать в течение заданного времени). Эти функции возвращают только те события, которые входят в маску, устанавливаемую функцией 40. По умолчанию это первые три, чего вполне достаточно для многих приложений. Коды событий:
    1 = сообщение о перерисовке (сбрасывается при вызове функции 0)
    2 = нажата клавиша на клавиатуре (поступает, только когда окно активно) или нажата "горячая клавиша";
    сбрасывается, когда все клавиши из буфера считаны функцией 2
    3 = нажата кнопка, определённая ранее функцией 8 (или кнопка закрытия, созданная неявно функцией 0; кнопка минимизации обрабатывается системой и о ней сообщения не приходит;
    поступает, только когда окно активно;
    сбрасывается, когда все кнопки из буфера считаны функцией 17)
    4 = зарезервировано (в текущей реализации никогда не приходит даже при размаскировке функцией 40)
    5 = перерисовывается фон рабочего стола (сбрасывается автоматически после перерисовки, так что если во время перерисовки фона программа не ждёт и не проверяет события, то этого события она не заметит)
    6 = событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении)
    7 = произошло событие IPC (смотри функцию 60 - Inter Process Communication; сбрасывается при прочтении)
    8 = произошло сетевое событие (сбрасывается при прочтении; смотри работу с сетью)
    9 = произошло отладочное событие (сбрасывается при прочтении; смотри отладочную подсистему)
    16..31 - ранее использовались для проверки соответвующих IRQ (16=IRQ0, 31=IRQ15) (на новых версиях ядра не генерируются)
    Следовательно из номера события вычитаем единицы и получаем порядковый номер бита который надо установить. Бит нумеруются с нулевого.
    6 - 1 = 5 получается 100000b
    10000000b + 100000b = 10100000b

    Только сдается мне комментарий
    ; only net event!!!
    там не просто так стоит, и возможно ты хочешь исправить не то место.
    В коде есть еще один участок:

    Code: Select all

    prepare_event:
    ; Report events
    ; Stack 8 + defaults
    	mcall 40,10000111b
    И если немного использовать верхнее утолщение позвоночника, то можно догадаться, что первый вызов ф. 40, используется для безоконного режима работы - добавление в него лишних событий не будет полезным. Более того оно не решит возникшую проблему с мышкой.
    Last edited by Mario on Fri Jun 01, 2012 10:00 pm, edited 1 time in total.
  • Leency wrote:Осталась одна проблема: не работает мышь. Как к этой строке добавить обработку мыши?

    Code: Select all

    mcall 40, 10000000b ; only net event!!!
    5-ый бит отвечает за мышь.

    Code: Select all

    mcall 40, 10100000b ; only net event!!!
    Вот таблица. По ней легко определить, какой бит надо включить/выключить.

    Code: Select all

    ;  |----------------------------------------------------------------------------|                                            ;
    ;  |                       Таблица желаемых событий.                            |                                            ;
    ;  |----------------------------------------------------------------------------|                                            ;
    ;  | 00000000 00000000 00000000 00000111b  Cобытия:                             |                                            ;
    ;  |                                   I   Перерисовка окна.                    |                                            ;
    ;  |                                  I    Клавиша в буфере.                    |                                            ;
    ;  |                                 I     Кнопка в буфере.                     |                                            ;
    ;  |                                I      Забранировано.                       |                                            ;
    ;  |                               I       Перерисовывается фон рабочего стола. |                                            ;
    ;  |                              I        Мышь.                                |                                            ;
    ;  |                             I         IPC                                  |                                            ;
    ;  |                            I          Сетевое событие.                     |                                            ;
    ;  |                          I            Отладочное событие.                  |                                            ;
    ;  | I---------------I                     Данные IRQ.                          |                                            ;
    ;  |----------------------------------------------------------------------------|                                            ;
  • Спасибо! С битами буду разбираться.

    Программу залил на SVN.

    Что хотелось бы сделать в будущем: отображение статуса процесса в окне. Ну или хотя бы индикатор окончания загрузки.

    P.S. Да, исправление было для другого места.
    Из хаоса в космос
  • Сейчас качалка не поддерживает коды 301/302. Особенность в том, что часто адрес, куда делается редирект, не сообщается в содержимом документа, а только в качестве ответа качалке (HTTP/1.1 301 Moved .. и тут адрес). Без обработки этих кодов ошибок зачастую невозможно посещать некоторые сайты.
  • Я уже писал, что часты случаи, когда сайт http://ololo.lo не будет работать просто потому он посылает 301/302 на http://www.ololo.lo или http://ololo.lo/[b]index.php[/b], что делает неработоспосособными чуть менее, чем половину хостов.
    Из хаоса в космос
  • Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • По мотивам "Винни Пух и все-все-все 256 байт адреса"

    http://paradigm.ru/url-max-length
    http://www.manhunter.ru/webmaster/481_k ... a_url.html

    По первой ссылке похвалили Opera, обосрали IE и скромно промолчали про Хром.
    По второй ссылке похвалили Opera, обосрали IE и Хром все равно сосет.
    Фуррифокс и Сафари бодрячком.

    Итого делаем вывод - долбодятлы криворукие веб-мастера могут взять любое значение полной длинны ссылки.

    В Колибри в случае использования расшаренной "именованной" памяти для передачи полного пути можно также использовать любой доступный объем памяти.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Я еще года два назад делал такие тесты, Хром вешается на 65534м байте адреса. Ну, или вешался. Опера действительно работала стабильно, а фуррифокс просто малеха подтормаживал на мегабайтных ссылках. Но на статью это не тянуло.
  • SoUrcerer wrote:Сейчас качалка не поддерживает коды 301/302. Особенность в том, что часто адрес, куда делается редирект, не сообщается в содержимом документа, а только в качестве ответа качалке (HTTP/1.1 301 Moved .. и тут адрес). Без обработки этих кодов ошибок зачастую невозможно посещать некоторые сайты.
    На каких сайтах кроме http://google.com можно гарантированно получить такое перенаправление? Нужна статистика, поскольку придется разбирать содержимое выдаваемой страницы.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • На http://kolibrios.org :)
    Разбирать содержимое страницы не нужно, потому что в ответе 301/302 передается конкретно адрес, куда нужно сделать редирект. Это уже поддерживается в тестовой сборке HTMLv со своей встроенной качалкой HTTP.
  • SoUrcerer wrote:На http://kolibrios.org :)
    Разбирать содержимое страницы не нужно, потому что в ответе 301/302 передается конкретно адрес, куда нужно сделать редирект. Это уже поддерживается в тестовой сборке HTMLv со своей встроенной качалкой HTTP.
    Хорошо, тогда я не буду тратить время на решение этой проблемы.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Code: Select all

    telnet kolibrios.org 80
    GET / HTTP/1.0
    Host: kolibrios.org
    

    Code: Select all

    HTTP/1.0 301 Moved Permanently
    Location: http://kolibrios.org/en/
    Content-Length: 0
    Connection: close
    Date: Fri, 19 Apr 2013 06:18:29 GMT
    Server: lighttpd/1.4.32
    
  • Who is online

    Users browsing this forum: No registered users and 4 guests