Rev 3500 | Rev 3725 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3500 | Rev 3555 | ||
---|---|---|---|
Line 3... | Line 3... | ||
3 | ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;; |
3 | ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
4 | ;; Distributed under terms of the GNU General Public License ;; |
5 | ;; ;; |
5 | ;; ;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
6 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 7... | Line 7... | ||
7 | 7 | ||
Line 119... | Line 119... | ||
119 | 梥â 'inner' ¨§ ᪨ |
119 | цвета 'inner' из скина |
221 | à ¢ 6 ¯¨ªá¥«¥©. |
221 | равна 6 пикселей. |
222 | * C=1, £«ã¡¨ â®çª¨ = 32 ¡¨â , ®¡« áâì ¯®«ì§®¢ â¥«ï ¢ë£«ï¤¨â â ª: |
222 | * C=1, глубина точки = 32 бита, область пользователя выглядит так: |
393 | * ¨¬ï ¯à®æ¥áá - "OS/IDLE" (¤®¯®«¥®¥ ¯à®¡¥« ¬¨) |
393 | * имя процесса - "OS/IDLE" (дополненное пробелами) |
394 | * ¤à¥á ¯à®æ¥áá ¢ ¯ ¬ïâ¨ à ¢¥ 0, à §¬¥à ¨á¯®«ì§ã¥¬®© ¯ ¬ï⨠|
394 | * адрес процесса в памяти равен 0, размер используемой памяти |
537 | ¬¥ç ¨ï: |
537 | Замечания: |
538 | * ¬¥é¥¨¥ ¤«ï â®çª¨ á ª®®à¤¨ â ¬¨ (x,y) ¢ëç¨á«ï¥âáï ª ª |
538 | * Смещение для точки с координатами (x,y) вычисляется как |
539 | (x+y*xsize)*3. |
539 | (x+y*xsize)*3. |
540 | * ᫨ 㪠§ ®¥ ᬥ饨¥ ¯à¥¢ëè ¥â ãáâ ®¢«¥ë© ¯®¤äãªæ¨¥© 1 |
540 | * Если указанное смещение превышает установленный подфункцией 1 |
541 | à §¬¥à, ¢ë§®¢ ¨£®à¨àã¥âáï. |
541 | размер, вызов игнорируется. |
542 | * «ï ®¡®¢«¥¨ï íªà (¯®á«¥ § ¢¥à襨ï á¥à¨¨ ª®¬ ¤, à ¡®â îé¨å á |
542 | * Для обновления экрана (после завершения серии команд, работающих с |
543 | ä®®¬) ¢ë§ë¢ ©â¥ ¯®¤äãªæ¨î 3 ¯¥à¥à¨á®¢ª¨ ä® . |
543 | фоном) вызывайте подфункцию 3 перерисовки фона. |
544 | * áâì ¯ à ï äãªæ¨ï ¯®«ã票ï â®çª¨ á ä®®¢®£® ¨§®¡à ¦¥¨ï - |
544 | * Есть парная функция получения точки с фонового изображения - |
545 | ¯®¤äãªæ¨ï 2 äãªæ¨¨ 39. |
545 | подфункция 2 функции 39. |
546 | 546 | ||
547 | ====================================================================== |
547 | ====================================================================== |
548 | ============ ãªæ¨ï 15, ¯®¤äãªæ¨ï 3 - ¯¥à¥à¨á®¢ âì ä®. ============ |
548 | ============ Функция 15, подфункция 3 - перерисовать фон. ============ |
549 | ====================================================================== |
549 | ====================================================================== |
550 | à ¬¥âàë: |
550 | Параметры: |
551 | * eax = 15 - ®¬¥à äãªæ¨¨ |
551 | * eax = 15 - номер функции |
552 | * ebx = 3 - ®¬¥à ¯®¤äãªæ¨¨ |
552 | * ebx = 3 - номер подфункции |
553 | ®§¢à é ¥¬®¥ § 票¥: |
553 | Возвращаемое значение: |
554 | * äãªæ¨ï ¥ ¢®§¢à é ¥â § 票ï |
554 | * функция не возвращает значения |
555 | 555 | ||
556 | ====================================================================== |
556 | ====================================================================== |
557 | ===== ãªæ¨ï 15, ¯®¤äãªæ¨ï 4 - ãáâ ®¢¨âì ०¨¬ ®âà¨á®¢ª¨ ä® . ==== |
557 | ===== Функция 15, подфункция 4 - установить режим отрисовки фона. ==== |
558 | ====================================================================== |
558 | ====================================================================== |
559 | à ¬¥âàë: |
559 | Параметры: |
560 | * eax = 15 - ®¬¥à äãªæ¨¨ |
560 | * eax = 15 - номер функции |
561 | * ebx = 4 - ®¬¥à ¯®¤äãªæ¨¨ |
561 | * ebx = 4 - номер подфункции |
562 | * ecx = ०¨¬ ®âà¨á®¢ª¨: |
562 | * ecx = режим отрисовки: |
563 | * 1 = § ¬®áâ¨âì |
563 | * 1 = замостить |
564 | * 2 = à áâïãâì |
564 | * 2 = растянуть |
565 | ®§¢à é ¥¬®¥ § 票¥: |
565 | Возвращаемое значение: |
566 | * äãªæ¨ï ¥ ¢®§¢à é ¥â § 票ï |
566 | * функция не возвращает значения |
567 | ¬¥ç ¨ï: |
567 | Замечания: |
568 | * «ï ®¡®¢«¥¨ï íªà (¯®á«¥ § ¢¥à襨ï á¥à¨¨ ª®¬ ¤, à ¡®â îé¨å á |
568 | * Для обновления экрана (после завершения серии команд, работающих с |
569 | ä®®¬) ¢ë§ë¢ ©â¥ ¯®¤äãªæ¨î 3 ¯¥à¥à¨á®¢ª¨ ä® . |
569 | фоном) вызывайте подфункцию 3 перерисовки фона. |
570 | * áâì ¯ à ï ª®¬ ¤ ¯®«ã票ï ०¨¬ ®âà¨á®¢ª¨ ä® - |
570 | * Есть парная команда получения режима отрисовки фона - |
571 | ¯®¤äãªæ¨ï 4 äãªæ¨¨ 39. |
571 | подфункция 4 функции 39. |
572 | 572 | ||
573 | ====================================================================== |
573 | ====================================================================== |
574 | ===== ãªæ¨ï 15, ¯®¤äãªæ¨ï 5 - ¯®¬¥áâ¨âì ¡«®ª ¯¨ªá¥«¥© ä®. ===== |
574 | ===== Функция 15, подфункция 5 - поместить блок пикселей на фон. ===== |
575 | ====================================================================== |
575 | ====================================================================== |
576 | à ¬¥âàë: |
576 | Параметры: |
577 | * eax = 15 - ®¬¥à äãªæ¨¨ |
577 | * eax = 15 - номер функции |
578 | * ebx = 5 - ®¬¥à ¯®¤äãªæ¨¨ |
578 | * ebx = 5 - номер подфункции |
579 | * ecx = 㪠§ â¥«ì ¤ ë¥ ¢ ä®à¬ ⥠BBGGRRBBGGRR... |
579 | * ecx = указатель на данные в формате BBGGRRBBGGRR... |
580 | * edx = ᬥ饨¥ ¢ ¤ ëå ä®®¢®£® ¨§®¡à ¦¥¨ï |
580 | * edx = смещение в данных фонового изображения |
581 | * esi = à §¬¥à ¤ ëå ¢ ¡ ©â å = 3 * ç¨á«® ¯¨ªá¥«¥© |
581 | * esi = размер данных в байтах = 3 * число пикселей |
582 | ®§¢à é ¥¬®¥ § 票¥: |
582 | Возвращаемое значение: |
583 | * äãªæ¨ï ¥ ¢®§¢à é ¥â § 票ï |
583 | * функция не возвращает значения |
584 | ¬¥ç ¨ï: |
584 | Замечания: |
585 | * ஢¥àª¨ ª®à४â®áâ¨ á¬¥é¥¨ï ¨ à §¬¥à ¥ ¯à®¨§¢®¤¨âáï. |
585 | * Проверки корректности смещения и размера не производится. |
586 | * ¢¥â ª ¦¤®£® ¯¨ªá¥«ï åà ¨âáï ª ª 3-¡ ©â ï ¢¥«¨ç¨ BBGGRR. |
586 | * Цвет каждого пикселя хранится как 3-байтная величина BBGGRR. |
587 | * ¨ªá¥«¨ ä®®¢®£® ¨§®¡à ¦¥¨ï § ¯¨áë¢ îâáï ¯®á«¥¤®¢ â¥«ì® |
587 | * Пиксели фонового изображения записываются последовательно |
588 | á«¥¢ ¯à ¢®, ᢥàåã ¢¨§. |
588 | слева направо, сверху вниз. |
589 | * ¬¥é¥¨¥ ¯¨ªá¥«ï á ª®®à¤¨ â ¬¨ (x,y) ¥áâì (x+y*xsize)*3. |
589 | * Смещение пикселя с координатами (x,y) есть (x+y*xsize)*3. |
590 | * «ï ®¡®¢«¥¨ï íªà (¯®á«¥ § ¢¥à襨ï á¥à¨¨ ª®¬ ¤, à ¡®â îé¨å á |
590 | * Для обновления экрана (после завершения серии команд, работающих с |
591 | ä®®¬) ¢ë§ë¢ ©â¥ ¯®¤äãªæ¨î 3 ¯¥à¥à¨á®¢ª¨ ä® . |
591 | фоном) вызывайте подфункцию 3 перерисовки фона. |
592 | 592 | ||
593 | ====================================================================== |
593 | ====================================================================== |
594 | ====================== ãªæ¨ï 15, ¯®¤äãªæ¨ï 6 ====================== |
594 | ====================== Функция 15, подфункция 6 ====================== |
595 | ==== ¯à®¥æ¨à®¢ âì ¤ ë¥ ä® ¤à¥á®¥ ¯à®áâà á⢮ ¯à®æ¥áá . ==== |
595 | ==== Спроецировать данные фона на адресное пространство процесса. ==== |
596 | ====================================================================== |
596 | ====================================================================== |
597 | à ¬¥âàë: |
597 | Параметры: |
598 | * eax = 15 - ®¬¥à äãªæ¨¨ |
598 | * eax = 15 - номер функции |
599 | * ebx = 6 - ®¬¥à ¯®¤äãªæ¨¨ |
599 | * ebx = 6 - номер подфункции |
600 | ®§¢à é ¥¬®¥ § 票¥: |
600 | Возвращаемое значение: |
601 | * eax = 㪠§ â¥«ì ¤ ë¥ ä® , 0 ¯à¨ ®è¨¡ª¥ |
601 | * eax = указатель на данные фона, 0 при ошибке |
602 | ¬¥ç ¨ï: |
602 | Замечания: |
603 | * ¯à®¥æ¨à®¢ ë¥ ¤ ë¥ ¤®áâã¯ë ç⥨¥ ¨ § ¯¨áì. |
603 | * Спроецированные данные доступны на чтение и запись. |
604 | * §¬¥à ¤ ëå ä® à ¢¥ 3*xsize*ysize. §¬¥¥¨¥ à §¬¥à®¢ ä® |
604 | * Размер данных фона равен 3*xsize*ysize. Изменение размеров фона |
605 | ¡«®ª¨àã¥âáï ¢à¥¬ï à ¡®âë á á¯à®¥æ¨à®¢ 묨 ¤ 묨. |
605 | блокируется на время работы с спроецированными данными. |
606 | * ¢¥â ª ¦¤®£® ¯¨ªá¥«ï åà ¨âáï ª ª 3-¡ ©â®¢ ï ¢¥«¨ç¨ BBGGRR. |
606 | * Цвет каждого пикселя хранится как 3-байтовая величина BBGGRR. |
607 | * ¨ªá¥«¨ ä®®¢®£® ¨§®¡à ¦¥¨ï § ¯¨áë¢ îâáï ¯®á«¥¤®¢ â¥«ì® |
607 | * Пиксели фонового изображения записываются последовательно |
608 | á«¥¢ ¯à ¢®, ᢥàåã ¢¨§. |
608 | слева направо, сверху вниз. |
609 | 609 | ||
610 | ====================================================================== |
610 | ====================================================================== |
611 | ====================== ãªæ¨ï 15, ¯®¤äãªæ¨ï 7 ====================== |
611 | ====================== Функция 15, подфункция 7 ====================== |
612 | === ªàëâì ¯à®¥ªæ¨î ¤ ëå ä® ¤à¥á®¥ ¯à®áâà á⢮ ¯à®æ¥áá . == |
612 | === Закрыть проекцию данных фона на адресное пространство процесса. == |
613 | ====================================================================== |
613 | ====================================================================== |
614 | à ¬¥âàë: |
614 | Параметры: |
615 | * eax = 15 - ®¬¥à äãªæ¨¨ |
615 | * eax = 15 - номер функции |
616 | * ebx = 7 - ®¬¥à ¯®¤äãªæ¨¨ |
616 | * ebx = 7 - номер подфункции |
617 | * ecx = 㪠§ â¥«ì ¤ ë¥ ä® |
617 | * ecx = указатель на данные фона |
618 | ®§¢à é ¥¬®¥ § 票¥: |
618 | Возвращаемое значение: |
619 | * eax = 1 ¯à¨ ãᯥå¥, 0 ¯à¨ ®è¨¡ª¥ |
619 | * eax = 1 при успехе, 0 при ошибке |
620 | 620 | ||
621 | ====================================================================== |
621 | ====================================================================== |
622 | ====================== ãªæ¨ï 15, ¯®¤äãªæ¨ï 8 ====================== |
622 | ====================== Функция 15, подфункция 8 ====================== |
623 | =========== ®«ãç¨âì ª®®à¤¨ âë ¯®á«¥¤¥© ®âà¨á®¢ª¨ ä® . ============ |
623 | =========== Получить координаты последней отрисовки фона. ============ |
624 | ====================================================================== |
624 | ====================================================================== |
625 | à ¬¥âàë: |
625 | Параметры: |
626 | * eax = 15 - ®¬¥à äãªæ¨¨ |
626 | * eax = 15 - номер функции |
627 | * ebx = 8 - ®¬¥à ¯®¤äãªæ¨¨ |
627 | * ebx = 8 - номер подфункции |
628 | ®§¢à é ¥¬®¥ § 票¥: |
628 | Возвращаемое значение: |
629 | * eax = [left]*65536 + [right] |
629 | * eax = [left]*65536 + [right] |
630 | * ebx = [top]*65536 + [bottom] |
630 | * ebx = [top]*65536 + [bottom] |
631 | ¬¥ç ¨ï: |
631 | Замечания: |
632 | * (left,top) - ª®®à¤¨ âë «¥¢®£® ¢¥à奣® 㣫 , |
632 | * (left,top) - координаты левого верхнего угла, |
633 | (right,bottom) - ª®®à¤¨ âë ¯à ¢®£® ¨¦¥£®. |
633 | (right,bottom) - координаты правого нижнего. |
634 | * «ï ¯®«ãç¥¨ï ¡®«¥¥ ¤®á⮢¥àëå ᢥ¤¥¨©, ¥®¡å®¤¨¬® ¢ë§¢ âì |
634 | * Для получения более достоверных сведений, необходимо вызвать |
Line 635... | Line 635... | ||
635 | äãªæ¨î áà §ã ¯®á«¥ ¯®«ã票ï ᮡëâ¨ï: |
635 | функцию сразу после получения события: |
636 | 5 = § ¢¥à訫 áì ¯¥à¥à¨á®¢ª ä® à ¡®ç¥£® á⮫ |
636 | 5 = завершилась перерисовка фона рабочего стола |
637 | 637 | ||
638 | ====================================================================== |
638 | ====================================================================== |
639 | ====================== ãªæ¨ï 15, ¯®¤äãªæ¨ï 9 ====================== |
639 | ====================== Функция 15, подфункция 9 ====================== |
640 | =============== ¥à¥à¨á®¢ âì ¯àאַ㣮«ìãî ç áâì ä® . =============== |
640 | =============== Перерисовать прямоугольную часть фона. =============== |
641 | ====================================================================== |
641 | ====================================================================== |
642 | à ¬¥âàë: |
642 | Параметры: |
643 | * eax = 15 - ®¬¥à äãªæ¨¨ |
643 | * eax = 15 - номер функции |
852 | £¤¥ AAAA § ¤ ñâ ⨯ ¯¥à¢®£® ¤¨áª®¢®¤ , BBBB - ¢â®à®£® ᮣ« á® |
852 | где AAAA задаёт тип первого дисковода, BBBB - второго согласно |
853 | á«¥¤ãî饬ã ᯨáªã: |
853 | следующему списку: |
854 | * 0 = ¥â ¤¨áª®¢®¤ |
854 | * 0 = нет дисковода |
855 | * 1 = 360Kb, 5.25'' |
855 | * 1 = 360Kb, 5.25'' |
856 | * 2 = 1.2Mb, 5.25'' |
856 | * 2 = 1.2Mb, 5.25'' |
857 | * 3 = 720Kb, 3.5'' |
857 | * 3 = 720Kb, 3.5'' |
858 | * 4 = 1.44Mb, 3.5'' |
858 | * 4 = 1.44Mb, 3.5'' |
859 | * 5 = 2.88Mb, 3.5'' (â ª¨¥ ¤¨áª¥âë ᥩç á 㦥 ¥ ¨á¯®«ì§ãîâáï) |
859 | * 5 = 2.88Mb, 3.5'' (такие дискеты сейчас уже не используются) |
860 | ¯à¨¬¥à, ¤«ï áâ ¤ à⮩ ª®ä¨£ãà 樨 ¨§ ®¤®£® 1.44-¤¨áª®¢®¤ |
860 | Например, для стандартной конфигурации из одного 1.44-дисковода |
861 | §¤¥áì ¡ã¤¥â 40h, ¤«ï á«ãç ï 1.2Mb A: ¨ 1.44Mb B: |
861 | здесь будет 40h, а для случая 1.2Mb на A: и 1.44Mb на B: |
862 | § 票¥ ®ª §ë¢ ¥âáï 24h. |
862 | значение оказывается 24h. |
863 | * +1: byte: ¨ä®à¬ æ¨ï ® ¦ñáâª¨å ¤¨áª å ¨ CD-¯à¨¢®¤ å, AABBCCDD, |
863 | * +1: byte: информация о жёстких дисках и CD-приводах, AABBCCDD, |
864 | £¤¥ AA ᮮ⢥âáâ¢ã¥â ª®â஫«¥àã IDE0, ..., DD - IDE3: |
864 | где AA соответствует контроллеру IDE0, ..., DD - IDE3: |
865 | * 0 = ãáâனá⢮ ®âáãâáâ¢ã¥â |
865 | * 0 = устройство отсутствует |
866 | * 1 = ¦ñá⪨© ¤¨áª |
866 | * 1 = жёсткий диск |
867 | * 2 = CD-¯à¨¢®¤ |
867 | * 2 = CD-привод |
868 | ¯à¨¬¥à, ¢ á«ãç ¥ HD IDE0 ¨ CD IDE2 §¤¥áì ¡ã¤¥â 48h. |
868 | Например, в случае HD на IDE0 и CD на IDE2 здесь будет 48h. |
869 | * +2: 4 db: ç¨á«® ©¤¥ëå à §¤¥«®¢ ¦ñáâª¨å ¤¨áª å á |
869 | * +2: 4 db: число найденных разделов на жёстких дисках с |
870 | ᮮ⢥âá⢥® IDE0,...,IDE3. |
870 | соответственно IDE0,...,IDE3. |
871 | ਠ®âáãâá⢨¨ ¦ñá⪮£® ¤¨áª IDEx ᮮ⢥âáâ¢ãî騩 ¡ ©â |
871 | При отсутствии жёсткого диска на IDEx соответствующий байт |
872 | ã«¥¢®©, ¯à¨ «¨ç¨¨ ¯®ª §ë¢ ¥â ç¨á«® à ᯮ§ ëå à §¤¥«®¢, |
872 | нулевой, при наличии показывает число распознанных разделов, |
873 | ª®â®àëå ¬®¦¥â ¨ ¥ ¡ëâì (¥á«¨ ®á¨â¥«ì ¥ ®âä®à¬ â¨à®¢ ¨«¨ |
873 | которых может и не быть (если носитель не отформатирован или |
874 | ¥á«¨ ä ©«®¢ ï á¨á⥬ ¥ ¯®¤¤¥à¦¨¢ ¥âáï). ⥪ã饩 ¢¥àᨨ ï¤à |
874 | если файловая система не поддерживается). В текущей версии ядра |
875 | ¤«ï ¦ñáâª¨å ¤¨áª®¢ ¯®¤¤¥à¦¨¢ îâáï ⮫쪮 FAT16, FAT32 ¨ NTFS. |
875 | для жёстких дисков поддерживаются только FAT16, FAT32 и NTFS. |
876 | * +6: 4 db: § १¥à¢¨à®¢ ® |
876 | * +6: 4 db: зарезервировано |
877 | ®à¬ â â ¡«¨æë: ¯®« ï ¢¥àá¨ï: |
877 | Формат таблицы: полная версия: |
878 | * +0: 10 db: â ª¨¥ ¦¥, ª ª ¨ ¢ ª®à®âª®© ¢¥àᨨ |
878 | * +0: 10 db: такие же, как и в короткой версии |
879 | * +10: 100 db: ¤ ë¥ ¤«ï ¯¥à¢®£® à §¤¥« |
879 | * +10: 100 db: данные для первого раздела |
880 | * +110: 100 db: ¤ ë¥ ¤«ï ¢â®à®£® à §¤¥« |
880 | * +110: 100 db: данные для второго раздела |
881 | * ... |
881 | * ... |
882 | * +10+100*(n-1): 100 db: ¤ ë¥ ¤«ï ¯®á«¥¤¥£® à §¤¥« |
882 | * +10+100*(n-1): 100 db: данные для последнего раздела |
883 | §¤¥«ë à ᯮ«®¦¥ë ¢ á«¥¤ãî饬 ¯®à浪¥: á ç « ¯®á«¥¤®¢ â¥«ì® ¢á¥ |
883 | Разделы расположены в следующем порядке: сначала последовательно все |
884 | à ᯮ§ ë¥ à §¤¥«ë HD IDE0 (¥á«¨ ¥áâì), |
884 | распознанные разделы на HD на IDE0 (если есть), |
885 | § ⥬ HD IDE1 (¥á«¨ ¥áâì) ¨ â.¤. ¤® IDE3. |
885 | затем на HD на IDE1 (если есть) и т.д. до IDE3. |
886 | ®à¬ â ¨ä®à¬ 樨 ® à §¤¥«¥: |
886 | Формат информации о разделе: |
887 | * +0: dword: ç «ìë© ä¨§¨ç¥áª¨© ᥪâ®à à §¤¥« |
887 | * +0: dword: начальный физический сектор раздела |
888 | * +4: dword: ¯®á«¥¤¨© 䨧¨ç¥áª¨© ᥪâ®à à §¤¥« |
888 | * +4: dword: последний физический сектор раздела |
889 | (¯à¨ ¤«¥¦¨â à §¤¥«ã) |
889 | (принадлежит разделу) |
890 | * +8: byte: ⨯ ä ©«®¢®© á¨á⥬ë: |
890 | * +8: byte: тип файловой системы: |
891 | 16=FAT16, 32=FAT32, 1=NTFS |
891 | 16=FAT16, 32=FAT32, 1=NTFS |
892 | * ä®à¬ â ¤ «ì¥©è¨å ¤ ëå § ¢¨á¨â ®â ä ©«®¢®© á¨á⥬ë, |
892 | * формат дальнейших данных зависит от файловой системы, |
893 | ¬®¦¥â ¬¥ïâìáï á ¨§¬¥¥¨ï¬¨ ¢ ï¤à¥ ¨ ¯®í⮬㠥 ®¯¨áë¢ ¥âáï |
893 | может меняться с изменениями в ядре и поэтому не описывается |
894 | ¬¥ç ¨ï: |
894 | Замечания: |
895 | * ®à®âª ï â ¡«¨æ ¬®¦¥â ¡ëâì ¨á¯®«ì§®¢ ¤«ï ¯®«ãç¥¨ï ¨ä®à¬ 樨 |
895 | * Короткая таблица может быть использована для получения информации |
896 | ®¡ ¨¬¥îé¨åáï ãáâனá⢠å. |
896 | об имеющихся устройствах. |
897 | 897 | ||
898 | ====================================================================== |
898 | ====================================================================== |
899 | ========== ãªæ¨ï 18, ¯®¤äãªæ¨ï 13 - ¯®«ãç¨âì ¢¥àá¨î ï¤à . ========= |
899 | ========== Функция 18, подфункция 13 - получить версию ядра. ========= |
900 | ====================================================================== |
900 | ====================================================================== |
901 | à ¬¥âàë: |
901 | Параметры: |
902 | * eax = 18 - ®¬¥à äãªæ¨¨ |
902 | * eax = 18 - номер функции |
903 | * ebx = 13 - ®¬¥à ¯®¤äãªæ¨¨ |
903 | * ebx = 13 - номер подфункции |
904 | * ecx = 㪠§ â¥«ì ¡ãä¥à (¥ ¬¥¥¥ 16 ¡ ©â), ªã¤ ¡ã¤¥â ¯®¬¥é¥ |
904 | * ecx = указатель на буфер (не менее 16 байт), куда будет помещена |
905 | ¨ä®à¬ æ¨ï |
905 | информация |
906 | ®§¢à é ¥¬®¥ § 票¥: |
906 | Возвращаемое значение: |
907 | * äãªæ¨ï ¥ ¢®§¢à é ¥â § 票ï |
907 | * функция не возвращает значения |
908 | âàãªâãà ¡ãä¥à : |
908 | Структура буфера: |
909 | db a,b,c,d ¤«ï ¢¥àᨨ a.b.c.d |
909 | db a,b,c,d для версии a.b.c.d |
910 | db 0: § १¥à¢¨à®¢ ® |
910 | db 0: зарезервировано |
911 | dd REV - ®¬¥à svn-ॢ¨§¨¨ ï¤à |
911 | dd REV - номер svn-ревизии ядра |
912 | «ï ï¤à Kolibri 0.7.7.0+: |
912 | Для ядра Kolibri 0.7.7.0+: |
Line 913... | Line 913... | ||
913 | db 0,7,7,0 |
913 | db 0,7,7,0 |
914 | db 0 |
914 | db 0 |
915 | dd 1675 |
915 | dd 1675 |
916 | 916 | ||
1186 | * 2 = à ᪫ ¤ªã ¯à¨ ¦ ⮬ Shift |
1186 | * 2 = раскладку при нажатом Shift |
1187 | * 3 = à ᪫ ¤ªã ¯à¨ ¦ ⮬ Alt |
1187 | * 3 = раскладку при нажатом Alt |
1188 | * edx = 㪠§ ⥫ì à ᪫ ¤ªã - â ¡«¨æã ¤«¨®© 128 ¡ ©â |
1188 | * edx = указатель на раскладку - таблицу длиной 128 байт |
1189 | Ǭ: |
1189 | Или: |
1190 | * ecx = 9 |
1190 | * ecx = 9 |
1191 | * dx = ¨¤¥â¨ä¨ª â®à áâà ë (1=eng, 2=fi, 3=ger, 4=rus) |
1191 | * dx = идентификатор страны (1=eng, 2=fi, 3=ger, 4=rus) |
1192 | ®§¢à é ¥¬®¥ § 票¥: |
1192 | Возвращаемое значение: |
1193 | * eax = 0 - ãá¯¥è® |
1193 | * eax = 0 - успешно |
1194 | * eax = 1 - ¯ à ¬¥âà § ¤ ¥¢¥à® |
1194 | * eax = 1 - параметр задан неверно |
1195 | ¬¥ç ¨ï: |
1195 | Замечания: |
1196 | * ᫨ ¦ â Alt, â® ¨á¯®«ì§ã¥âáï à ᪫ ¤ª á Alt; |
1196 | * Если нажат Alt, то используется раскладка с Alt; |
1197 | ¥á«¨ ¥ ¦ â Alt, ® ¦ â Shift, â® |
1197 | если не нажат Alt, но нажат Shift, то |
1198 | ¨á¯®«ì§ã¥âáï à ᪫ ¤ª á Shift; |
1198 | используется раскладка с Shift; |
1199 | ¥á«¨ ¥ ¦ âë Alt ¨ Shift, ® ¦ â Ctrl, â® ¨á¯®«ì§ã¥âáï |
1199 | если не нажаты Alt и Shift, но нажат Ctrl, то используется |
1200 | ®à¬ «ì ï à ᪫ ¤ª , ¯®á«¥ 祣® ¨§ ª®¤ ¢ëç¨â ¥âáï 0x60; |
1200 | нормальная раскладка, после чего из кода вычитается 0x60; |
1201 | ¥á«¨ ¥ ¦ â ¨ ®¤ ¨§ ã¯à ¢«ïîé¨å ª« ¢¨è, â® ¨á¯®«ì§ã¥âáï |
1201 | если не нажата ни одна из управляющих клавиш, то используется |
1202 | ®à¬ «ì ï à ᪫ ¤ª . |
1202 | нормальная раскладка. |
1203 | * ®«ãç¨âì à ᪫ ¤ª¨ ¨ ¨¤¥â¨ä¨ª â®à áâà ë ¬®¦® á ¯®¬®éìî |
1203 | * Получить раскладки и идентификатор страны можно с помощью |
1204 | ¯®¤äãªæ¨¨ 2 äãªæ¨¨ 26. |
1204 | подфункции 2 функции 26. |
1205 | * ¤¥â¨ä¨ª â®à áâà ë - £«®¡ «ì ï á¨á⥬ ï ¯¥à¥¬¥ ï, ª®â®à ï |
1205 | * Идентификатор страны - глобальная системная переменная, которая |
1206 | á ¬¨¬ ï¤à®¬ ¥ ¨á¯®«ì§ã¥âáï; ®¤ ª® ¯à¨«®¦¥¨¥ @panel ®â®¡à ¦ ¥â |
1206 | самим ядром не используется; однако приложение @panel отображает |
1207 | ᮮ⢥âáâ¢ãîéãî ⥪ã饩 áâà ¥ ¨ª®ªã. |
1207 | соответствующую текущей стране иконку. |
1208 | * ਫ®¦¥¨¥ @panel ¯¥à¥ª«îç ¥â à ᪫ ¤ª¨ ¯® § ¯à®áã ¯®«ì§®¢ ⥫ï. |
1208 | * Приложение @panel переключает раскладки по запросу пользователя. |
1209 | 1209 | ||
1210 | ====================================================================== |
1210 | ====================================================================== |
1211 | =========== ãªæ¨ï 21, ¯®¤äãªæ¨ï 3 - ãáâ ®¢¨âì ¡ §ã CD. =========== |
1211 | =========== Функция 21, подфункция 3 - установить базу CD. =========== |
1212 | ====================================================================== |
1212 | ====================================================================== |
1213 | à ¬¥âàë: |
1213 | Параметры: |
1214 | * eax = 21 - ®¬¥à äãªæ¨¨ |
1214 | * eax = 21 - номер функции |
1215 | * ebx = 3 - ®¬¥à ¯®¤äãªæ¨¨ |
1215 | * ebx = 3 - номер подфункции |
1216 | * ecx = ¡ § CD: 1=IDE0, 2=IDE1, 3=IDE2, 4=IDE3 |
1216 | * ecx = база CD: 1=IDE0, 2=IDE1, 3=IDE2, 4=IDE3 |
1217 | ®§¢à é ¥¬®¥ § 票¥: |
1217 | Возвращаемое значение: |
1218 | * eax = 0 |
1218 | * eax = 0 |
Line 1219... | Line 1219... | ||
1219 | ¬¥ç ¨ï: |
1219 | Замечания: |
1220 | * § CD ¨á¯®«ì§ã¥âáï äãªæ¨¥© 24. |
1220 | * База CD используется функцией 24. |
1221 | * ®«ãç¨âì ãáâ ®¢«¥ãî ¡ §ã CD ¬®¦® ¢ë§®¢®¬ |
1221 | * Получить установленную базу CD можно вызовом |
1222 | ¯®¤äãªæ¨¨ 3 äãªæ¨¨ 26. |
1222 | подфункции 3 функции 26. |
1223 | 1223 | ||
1224 | ====================================================================== |
1224 | ====================================================================== |
1225 | ========= ãªæ¨ï 21, ¯®¤äãªæ¨ï 5 - ãáâ ®¢¨âì ï§ëª á¨á⥬ë. ======== |
1225 | ========= Функция 21, подфункция 5 - установить язык системы. ======== |
1226 | ====================================================================== |
1226 | ====================================================================== |
1227 | à ¬¥âàë: |
1227 | Параметры: |
1228 | * eax = 21 - ®¬¥à äãªæ¨¨ |
1228 | * eax = 21 - номер функции |
1229 | * ebx = 5 - ®¬¥à ¯®¤äãªæ¨¨ |
1229 | * ebx = 5 - номер подфункции |
1230 | * ecx = ï§ëª á¨á⥬ë (1=eng, 2=fi, 3=ger, 4=rus) |
1230 | * ecx = язык системы (1=eng, 2=fi, 3=ger, 4=rus) |
1231 | ®§¢à é ¥¬®¥ § 票¥: |
1231 | Возвращаемое значение: |
1232 | * eax = 0 |
1232 | * eax = 0 |
1233 | ¬¥ç ¨ï: |
1233 | Замечания: |
1234 | * §ëª á¨á⥬ë - £«®¡ «ì ï á¨á⥬ ï ¯¥à¥¬¥ ï, ¨ª ª |
1234 | * Язык системы - глобальная системная переменная, никак |
1235 | ¥ ¨á¯®«ì§ã¥¬ ï á ¬¨¬ ï¤à®¬, ®¤ ª® ¯à¨«®¦¥¨¥ @panel à¨áã¥â |
1235 | не используемая самим ядром, однако приложение @panel рисует |
1236 | ᮮ⢥âáâ¢ãîéãî ¨ª®ªã. |
1236 | соответствующую иконку. |
1237 | * ஢¥à®ª ª®à४â®áâì ¥ ¤¥« ¥âáï, ¯®áª®«ìªã ï¤à® íâã |
1237 | * Проверок на корректность не делается, поскольку ядро эту |
1238 | ¯¥à¥¬¥ãî ¥ ¨á¯®«ì§ã¥â. |
1238 | переменную не использует. |
1239 | * ®«ãç¨âì ï§ëª á¨áâ¥¬ë ¬®¦® ¢ë§®¢®¬ ¯®¤äãªæ¨¨ 5 äãªæ¨¨ 26. |
1239 | * Получить язык системы можно вызовом подфункции 5 функции 26. |
1240 | 1240 | ||
1241 | ====================================================================== |
1241 | ====================================================================== |
1242 | =========== ãªæ¨ï 21, ¯®¤äãªæ¨ï 7 - ãáâ ®¢¨âì ¡ §ã HD. =========== |
1242 | =========== Функция 21, подфункция 7 - установить базу HD. =========== |
1243 | ====================================================================== |
1243 | ====================================================================== |
1244 | § HD 㦠¤«ï ®¯à¥¤¥«¥¨ï, ª ª®© ¦ñá⪨© ¤¨áª ¯¨á âì, ¯à¨ |
1244 | База HD нужна для определения, на какой жёсткий диск писать, при |
1245 | ¨á¯®«ì§®¢ ¨¨ ãáâ ॢ襣® á¨â ªá¨á /HD ¢ ãáâ ॢ襩 äãªæ¨¨ 58; |
1245 | использовании устаревшего синтаксиса /HD в устаревшей функции 58; |
1246 | ¯à¨ ¨á¯®«ì§®¢ ¨¨ ᮢ६¥®£® á¨â ªá¨á /HD0,/HD1,/HD2,/HD3 |
1246 | при использовании современного синтаксиса /HD0,/HD1,/HD2,/HD3 |
1247 | ¡ § ãáâ ¢«¨¢ ¥âáï ¢â®¬ â¨ç¥áª¨. |
1247 | база устанавливается автоматически. |
1248 | à ¬¥âàë: |
1248 | Параметры: |
1249 | * eax = 21 - ®¬¥à äãªæ¨¨ |
1249 | * eax = 21 - номер функции |
1250 | * ebx = 7 - ®¬¥à ¯®¤äãªæ¨¨ |
1250 | * ebx = 7 - номер подфункции |
1251 | * ecx = ¡ § HD: 1=IDE0, 2=IDE1, 3=IDE2, 4=IDE3 |
1251 | * ecx = база HD: 1=IDE0, 2=IDE1, 3=IDE2, 4=IDE3 |
1252 | ®§¢à é ¥¬®¥ § 票¥: |
1252 | Возвращаемое значение: |
1253 | * eax = 0 |
1253 | * eax = 0 |
1254 | ¬¥ç ¨ï: |
1254 | Замечания: |
1255 | * î¡®¥ ¯à¨«®¦¥¨¥ ¢ «î¡®© ¬®¬¥â ¢à¥¬¥¨ ¬®¦¥â ¨§¬¥¨âì ¡ §ã. |
1255 | * Любое приложение в любой момент времени может изменить базу. |
1256 | * ¥ á«¥¤ã¥â ¨§¬¥ïâì ¡ §ã, ª®£¤ ª ª®¥-¨¡ã¤ì ¯à¨«®¦¥¨¥ à ¡®â ¥â |
1256 | * Не следует изменять базу, когда какое-нибудь приложение работает |
1257 | á ¦ñá⪨¬ ¤¨áª®¬. ᫨ ¥ å®â¨â¥ £«îª®¢ á¨á⥬ë. |
1257 | с жёстким диском. Если не хотите глюков системы. |
1258 | * ®«ãç¨âì ãáâ ®¢«¥ãî ¡ §ã ¬®¦® ¢ë§®¢®¬ ¯®¤äãªæ¨¨ 7 äãªæ¨¨ 26. |
1258 | * Получить установленную базу можно вызовом подфункции 7 функции 26. |
1259 | * «¥¤ã¥â â ª¦¥ ®¯à¥¤¥«¨âì ¨á¯®«ì§ã¥¬ë© à §¤¥« ¦ñá⪮£® ¤¨áª |
1259 | * Следует также определить используемый раздел жёсткого диска |
1260 | ¯®¤äãªæ¨¥© 8. |
1260 | подфункцией 8. |
1261 | 1261 | ||
1262 | ====================================================================== |
1262 | ====================================================================== |
1263 | ========== ãªæ¨ï 21, ¯®¤äãªæ¨ï 8 - ãáâ ®¢¨âì à §¤¥« HD. ========== |
1263 | ========== Функция 21, подфункция 8 - установить раздел HD. ========== |
1264 | ====================================================================== |
1264 | ====================================================================== |
1265 | §¤¥« HD 㦥 ¤«ï ®¯à¥¤¥«¥¨ï, ª ª®© à §¤¥« ¦ñá⪮£® ¤¨áª |
1265 | Раздел HD нужен для определения, на какой раздел жёсткого диска |
1266 | ¯¨á âì, ¯à¨ ¨á¯®«ì§®¢ ¨¨ ãáâ ॢ襣® á¨â ªá¨á /HD ¢ ãáâ ॢ襩 |
1266 | писать, при использовании устаревшего синтаксиса /HD в устаревшей |
1267 | äãªæ¨¨ 58; ¯à¨ ¨á¯®«ì§®¢ ¨¨ ᮢ६¥®£® á¨â ªá¨á |
1267 | функции 58; при использовании современного синтаксиса |
1268 | /HD0,/HD1,/HD2,/HD3 ¡ § ¨ à §¤¥« ãáâ ¢«¨¢ îâáï ¢â®¬ â¨ç¥áª¨. |
1268 | /HD0,/HD1,/HD2,/HD3 база и раздел устанавливаются автоматически. |
1269 | à ¬¥âàë: |
1269 | Параметры: |
1270 | * eax = 21 - ®¬¥à äãªæ¨¨ |
1270 | * eax = 21 - номер функции |
1271 | * ebx = 8 - ®¬¥à ¯®¤äãªæ¨¨ |
1271 | * ebx = 8 - номер подфункции |
1272 | * ecx = à §¤¥« HD (áç¨â ï á 1) |
1272 | * ecx = раздел HD (считая с 1) |
1273 | ®§¢à é ¥¬®¥ § 票¥: |
1273 | Возвращаемое значение: |
1274 | * eax = 0 |
1274 | * eax = 0 |
1275 | ¬¥ç ¨ï: |
1275 | Замечания: |
1276 | * î¡®¥ ¯à¨«®¦¥¨¥ ¢ «î¡®© ¬®¬¥â ¢à¥¬¥¨ ¬®¦¥â ¨§¬¥¨âì à §¤¥«. |
1276 | * Любое приложение в любой момент времени может изменить раздел. |
1277 | * ¥ á«¥¤ã¥â ¨§¬¥ïâì à §¤¥«, ª®£¤ ª ª®¥-¨¡ã¤ì ¯à¨«®¦¥¨¥ à ¡®â ¥â |
1277 | * Не следует изменять раздел, когда какое-нибудь приложение работает |
1278 | á ¦ñá⪨¬ ¤¨áª®¬. ᫨ ¥ å®â¨â¥ £«îª®¢ á¨á⥬ë. |
1278 | с жёстким диском. Если не хотите глюков системы. |
1279 | * ®«ãç¨âì ãáâ ®¢«¥ë© à §¤¥« ¬®¦® ¢ë§®¢®¬ ¯®¤äãªæ¨¨ 8 |
1279 | * Получить установленный раздел можно вызовом подфункции 8 |
1280 | äãªæ¨¨ 26. |
1280 | функции 26. |
1281 | * ஢¥à®ª ª®à४â®áâì ¥ ¤¥« ¥âáï. |
1281 | * Проверок на корректность не делается. |
1282 | * § âì ç¨á«® à §¤¥«®¢ ¦ñá⪮¬ ¤¨áª¥ ¬®¦® ¢ë§®¢®¬ |
1282 | * Узнать число разделов на жёстком диске можно вызовом |
1283 | ¯®¤äãªæ¨¨ 11 äãªæ¨¨ 18. |
1283 | подфункции 11 функции 18. |
1284 | * «¥¤ã¥â â ª¦¥ ®¯à¥¤¥«¨âì ¨á¯®«ì§ã¥¬ãî ¡ §ã ¦ñá⪮£® ¤¨áª |
1284 | * Следует также определить используемую базу жёсткого диска |
1285 | ¯®¤äãªæ¨¥© 7. |
1285 | подфункцией 7. |
1286 | 1286 | ||
1287 | ====================================================================== |
1287 | ====================================================================== |
1288 | ====================== ãªæ¨ï 21, ¯®¤äãªæ¨ï 11 ===================== |
1288 | ====================== Функция 21, подфункция 11 ===================== |
1289 | =========== §à¥è¨âì/§ ¯à¥â¨âì ¨§ª®ã஢¥¢ë© ¤®áâ㯠ª HD. ========== |
1289 | =========== Разрешить/запретить низкоуровневый доступ к HD. ========== |
1290 | ====================================================================== |
1290 | ====================================================================== |
1291 | à ¬¥âàë: |
1291 | Параметры: |
1292 | * eax = 21 - ®¬¥à äãªæ¨¨ |
1292 | * eax = 21 - номер функции |
1293 | * ebx = 11 - ®¬¥à ¯®¤äãªæ¨¨ |
1293 | * ebx = 11 - номер подфункции |
1294 | * ecx = 0/1 - § ¯à¥â¨âì/à §à¥è¨âì |
1294 | * ecx = 0/1 - запретить/разрешить |
1295 | ®§¢à é ¥¬®¥ § 票¥: |
1295 | Возвращаемое значение: |
Line 1296... | Line 1296... | ||
1296 | * eax = 0 |
1296 | * eax = 0 |
1297 | ¬¥ç ¨ï: |
1297 | Замечания: |
1298 | * ᯮ«ì§ã¥âáï ¯à¨ LBA-ç⥨¨ (¯®¤äãªæ¨ï 8 äãªæ¨¨ 58). |
1298 | * Используется при LBA-чтении (подфункция 8 функции 58). |
1299 | * ¥ªãé ï ॠ«¨§ æ¨ï ¨á¯®«ì§ã¥â ⮫쪮 ¬« ¤è¨© ¡¨â ecx. |
1299 | * Текущая реализация использует только младший бит ecx. |
1300 | * ®«ãç¨âì ⥪ã饥 á®áâ®ï¨¥ ¬®¦® ¢ë§®¢®¬ ¯®¤äãªæ¨¨ 11 äãªæ¨¨ 26. |
1300 | * Получить текущее состояние можно вызовом подфункции 11 функции 26. |
1301 | 1301 | ||
1302 | ====================================================================== |
1302 | ====================================================================== |
1303 | ====================== ãªæ¨ï 21, ¯®¤äãªæ¨ï 12 ===================== |
1303 | ====================== Функция 21, подфункция 12 ===================== |
1304 | ========== §à¥è¨âì/§ ¯à¥â¨âì ¨§ª®ã஢¥¢ë© ¤®áâ㯠ª PCI. ========== |
1304 | ========== Разрешить/запретить низкоуровневый доступ к PCI. ========== |
1305 | ====================================================================== |
1305 | ====================================================================== |
1306 | à ¬¥âàë: |
1306 | Параметры: |
1307 | * eax = 21 - ®¬¥à äãªæ¨¨ |
1307 | * eax = 21 - номер функции |
1308 | * ebx = 12 - ®¬¥à ¯®¤äãªæ¨¨ |
1308 | * ebx = 12 - номер подфункции |
1309 | * ecx = 0/1 - § ¯à¥â¨âì/à §à¥è¨âì |
1309 | * ecx = 0/1 - запретить/разрешить |
1310 | ®§¢à é ¥¬®¥ § 票¥: |
1310 | Возвращаемое значение: |
1311 | * eax = 0 |
1311 | * eax = 0 |
1312 | ¬¥ç ¨ï: |
1312 | Замечания: |
1313 | * ᯮ«ì§ã¥âáï ¯à¨ à ¡®â¥ á 訮© PCI (äãªæ¨ï 62). |
1313 | * Используется при работе с шиной PCI (функция 62). |
1314 | * ¥ªãé ï ॠ«¨§ æ¨ï ¨á¯®«ì§ã¥â ⮫쪮 ¬« ¤è¨© ¡¨â ecx. |
1314 | * Текущая реализация использует только младший бит ecx. |
1315 | * ®«ãç¨âì ⥪ã饥 á®áâ®ï¨¥ ¬®¦® ¢ë§®¢®¬ ¯®¤äãªæ¨¨ 12 äãªæ¨¨ 26. |
1315 | * Получить текущее состояние можно вызовом подфункции 12 функции 26. |
1316 | 1316 | ||
1317 | ====================================================================== |
1317 | ====================================================================== |
1318 | ============= ãªæ¨ï 21, ¯®¤äãªæ¨ï 13, ¯®¤¯®¤äãªæ¨ï 1 ============= |
1318 | ============= Функция 21, подфункция 13, подподфункция 1 ============= |
1319 | ==== ¨æ¨ «¨§¨à®¢ âì + ¯®«ãç¨âì ¨ä®à¬ æ¨î ® ¤à ©¢¥à¥ vmode.mdr. ==== |
1319 | ==== Инициализировать + получить информацию о драйвере vmode.mdr. ==== |
1320 | ====================================================================== |
1320 | ====================================================================== |
1321 | à ¬¥âàë: |
1321 | Параметры: |
1322 | * eax = 21 - ®¬¥à äãªæ¨¨ |
1322 | * eax = 21 - номер функции |
1445 | * DD=¤¥ì 01..31 |
1445 | * DD=день 01..31 |
1625 | à ᪫ ¤ª |
1625 | раскладка |
Line 1803... | Line 1803... | ||
1803 | * ecx = y-ª®®à¤¨ â (®â®á¨â¥«ì® íªà ) |
1803 | * ecx = y-координата (относительно экрана) |
1804 | 1804 | ||
1805 | ®§¢à é ¥¬®¥ § 票¥: |
1805 | Возвращаемое значение: |
1806 | * eax = 0x000000XX - â®çª ¯à¨ ¤«¥¦¨â á«®âã ®ª N |
1806 | * eax = 0x000000XX - точка принадлежит слоту окна N |
1807 | ਠ¥ª®à४âëå § 票ïå ebx ¨ ecx äãªæ¨ï ¢®§¢à é ¥â 0 |
1807 | При некорректных значениях ebx и ecx функция возвращает 0 |
1808 | * ãªæ¨ï ¡¥à¥â § ç¥¨ï ¨§ ®¡« á⨠[_WinMapAddress] |
1808 | * Функция берет значения из области [_WinMapAddress] |
1809 | 1809 | ||
1810 | ====================================================================== |
1810 | ====================================================================== |
1811 | ============ ãªæ¨ï 35 - ¯à®ç¨â âì 梥â â®çª¨ íªà ¥. ============ |
1811 | ============ Функция 35 - прочитать цвет точки на экране. ============ |
1812 | ====================================================================== |
1812 | ====================================================================== |
1813 | à ¬¥âàë: |
1813 | Параметры: |
1814 | * eax = 35 |
1814 | * eax = 35 |
1815 | * ebx = y*xsize+x, £¤¥ |
1815 | * ebx = y*xsize+x, где |
1816 | * (x,y) = ª®®à¤¨ âë â®çª¨ (áç¨â ï ®â 0) |
1816 | * (x,y) = координаты точки (считая от 0) |
1817 | * xsize = à §¬¥à íªà ¯® £®à¨§®â «¨ |
1817 | * xsize = размер экрана по горизонтали |
1818 | ®§¢à é ¥¬®¥ § 票¥: |
1818 | Возвращаемое значение: |
1819 | * eax = 梥â 0x00RRGGBB |
1819 | * eax = цвет 0x00RRGGBB |
1820 | ¬¥ç ¨ï: |
1820 | Замечания: |
1821 | * § âì à §¬¥àë íªà ¬®¦® ¢ë§®¢®¬ äãªæ¨¨ 14. ¡à â¨â¥ ¢¨¬ ¨¥, |
1821 | * Узнать размеры экрана можно вызовом функции 14. Обратите внимание, |
1822 | çâ® ® ¢ëç¨â ¥â 1 ¨§ ®¡®¨å à §¬¥à®¢. |
1822 | что она вычитает 1 из обоих размеров. |
1823 | * ¢¨¤¥®¯ ¬ï⨠¥áâì â ª¦¥ ¯àאַ© ¤®áâ㯠(¡¥§ ¢ë§®¢®¢ á¨á⥬ëå |
1823 | * К видеопамяти есть также прямой доступ (без вызовов системных |
1824 | äãªæ¨©) ç¥à¥§ ᥫ¥ªâ®à gs. à ¬¥âàë ⥪ã饣® ¢¨¤¥®à¥¦¨¬ |
1824 | функций) через селектор gs. Параметры текущего видеорежима |
1825 | ¬®¦® ¯®«ãç¨âì äãªæ¨¥© 61. |
1825 | можно получить функцией 61. |
1826 | 1826 | ||
1827 | ====================================================================== |
1827 | ====================================================================== |
1828 | =============== ãªæ¨ï 36 - ¯à®ç¨â âì ®¡« áâì íªà . =============== |
1828 | =============== Функция 36 - прочитать область экрана. =============== |
1829 | ====================================================================== |
1829 | ====================================================================== |
1830 | à ¬¥âàë: |
1830 | Параметры: |
1831 | * eax = 36 - ®¬¥à äãªæ¨¨ |
1831 | * eax = 36 - номер функции |
1832 | * ebx = 㪠§ â¥«ì ¯à¥¤¢ à¨â¥«ì® ¢ë¤¥«¥ãî ®¡« áâì ¯ ¬ïâ¨, |
1832 | * ebx = указатель на предварительно выделенную область памяти, |
1833 | ªã¤ ¡ã¤¥â ¯®¬¥é¥® ¨§®¡à ¦¥¨¥ ¢ ä®à¬ ⥠BBGGRRBBGGRR... |
1833 | куда будет помещено изображение в формате BBGGRRBBGGRR... |
1834 | * ecx = [à §¬¥à ¯® ®á¨ x]*65536 + [à §¬¥à ¯® ®á¨ y] |
1834 | * ecx = [размер по оси x]*65536 + [размер по оси y] |
1835 | * edx = [ª®®à¤¨ â ¯® ®á¨ x]*65536 + [ª®®à¤¨ â ¯® ®á¨ y] |
1835 | * edx = [координата по оси x]*65536 + [координата по оси y] |
1836 | ®§¢à é ¥¬®¥ § 票¥: |
1836 | Возвращаемое значение: |
1837 | * äãªæ¨ï ¥ ¢®§¢à é ¥â § 票ï |
1837 | * функция не возвращает значения |
1838 | ¬¥ç ¨ï: |
1838 | Замечания: |
1839 | * ®®à¤¨ âë ®¡« á⨠- íâ® ª®®à¤¨ âë ¢¥à奣® «¥¢®£® 㣫 |
1839 | * Координаты области - это координаты верхнего левого угла |
1840 | ®¡« á⨠®â®á¨â¥«ì® íªà . |
1840 | области относительно экрана. |
1841 | * §¬¥à ¨§®¡à ¦¥¨ï ¢ ¡ ©â å ¥áâì 3*xsize*ysize. |
1841 | * Размер изображения в байтах есть 3*xsize*ysize. |
1842 | 1842 | ||
1843 | ====================================================================== |
1843 | ====================================================================== |
1844 | ==================== ãªæ¨ï 37 - à ¡®â á ¬ëèìî. ==================== |
1844 | ==================== Функция 37 - работа с мышью. ==================== |
1845 | ====================================================================== |
1845 | ====================================================================== |
1846 | 1846 | ||
1847 | -------------- ®¤äãªæ¨ï 0 - íªà ë¥ ª®®à¤¨ âë ¬ëè¨ --------------- |
1847 | -------------- Подфункция 0 - экранные координаты мыши --------------- |
1848 | à ¬¥âàë: |
1848 | Параметры: |
1849 | * eax = 37 - ®¬¥à äãªæ¨¨ |
1849 | * eax = 37 - номер функции |
1850 | * ebx = 0 - ®¬¥à ¯®¤äãªæ¨¨ |
1850 | * ebx = 0 - номер подфункции |
1851 | ®§¢à é ¥¬®¥ § 票¥: |
1851 | Возвращаемое значение: |
1852 | * eax = x*65536 + y, (x,y)=ª®®à¤¨ âë ªãàá®à ¬ëè¨ (áç¨â ï ®â 0) |
1852 | * eax = x*65536 + y, (x,y)=координаты курсора мыши (считая от 0) |
1853 | 1853 | ||
1854 | ---------- ®¤äãªæ¨ï 1 - ª®®à¤¨ âë ¬ëè¨ ®â®á¨â¥«ì® ®ª ---------- |
1854 | ---------- Подфункция 1 - координаты мыши относительно окна ---------- |
1855 | à ¬¥âàë: |
1855 | Параметры: |
1856 | * eax = 37 - ®¬¥à äãªæ¨¨ |
1856 | * eax = 37 - номер функции |
1857 | * ebx = 1 - ®¬¥à ¯®¤äãªæ¨¨ |
1857 | * ebx = 1 - номер подфункции |
1858 | ®§¢à é ¥¬®¥ § 票¥: |
1858 | Возвращаемое значение: |
1859 | * eax = x*65536 + y, (x,y)=ª®®à¤¨ âë ªãàá®à ¬ëè¨ ®â®á¨â¥«ì® |
1859 | * eax = x*65536 + y, (x,y)=координаты курсора мыши относительно |
1860 | ®ª ¯à¨«®¦¥¨ï (áç¨â ï ®â 0) |
1860 | окна приложения (считая от 0) |
1861 | ¬¥ç ¨ï: |
1861 | Замечания: |
1862 | * 票¥ ¢ëç¨á«ï¥âáï ¯® ä®à¬ã«¥ (x-xwnd)*65536 + (y-ywnd). |
1862 | * Значение вычисляется по формуле (x-xwnd)*65536 + (y-ywnd). |
1863 | ᫨ y>=ywnd, â® ¬« ¤è¥¥ á«®¢® ¥®âà¨æ â¥«ì® ¨ ᮤ¥à¦¨â |
1863 | Если y>=ywnd, то младшее слово неотрицательно и содержит |
1864 | ®â®á¨â¥«ìãî y-ª®®à¤¨ âã, áâ à襥 - ®â®á¨â¥«ìãî x-ª®®à¤¨ âã |
1864 | относительную y-координату, а старшее - относительную x-координату |
1865 | (¯à ¢¨«ì®£® § ª ). ¯à®â¨¢®¬ á«ãç ¥ ¬« ¤è¥¥ á«®¢® ®âà¨æ â¥«ì® |
1865 | (правильного знака). В противном случае младшее слово отрицательно |
1866 | ¨ ¢áñ à ¢® ᮤ¥à¦¨â ®â®á¨â¥«ìãî y-ª®®à¤¨ âã, |
1866 | и всё равно содержит относительную y-координату, |
1867 | ª áâ à襬ã á«®¢ã á«¥¤ã¥â ¯à¨¡ ¢¨âì 1. |
1867 | а к старшему слову следует прибавить 1. |
1868 | 1868 | ||
1869 | ----------------- ®¤äãªæ¨ï 2 - ¦ âë¥ ª®¯ª¨ ¬ëè¨ ----------------- |
1869 | ----------------- Подфункция 2 - нажатые кнопки мыши ----------------- |
1870 | à ¬¥âàë: |
1870 | Параметры: |
1871 | * eax = 37 - ®¬¥à äãªæ¨¨ |
1871 | * eax = 37 - номер функции |
1872 | * ebx = 2 - ®¬¥à ¯®¤äãªæ¨¨ |
1872 | * ebx = 2 - номер подфункции |
1873 | ®§¢à é ¥¬®¥ § 票¥: |
1873 | Возвращаемое значение: |
1874 | * eax ᮤ¥à¦¨â ¨ä®à¬ æ¨î ® ¦ âëå ª®¯ª å ¬ëè¨: |
1874 | * eax содержит информацию о нажатых кнопках мыши: |
1875 | * ¡¨â 0 ãáâ ®¢«¥ = «¥¢ ï ª®¯ª ¦ â |
1875 | * бит 0 установлен = левая кнопка нажата |
1876 | * ¡¨â 1 ãáâ ®¢«¥ = ¯à ¢ ï ª®¯ª ¦ â |
1876 | * бит 1 установлен = правая кнопка нажата |
1877 | * ¡¨â 2 ãáâ ®¢«¥ = á।ïï ª®¯ª ¦ â |
1877 | * бит 2 установлен = средняя кнопка нажата |
1878 | * ¡¨â 3 ãáâ ®¢«¥ = 4-ï ª®¯ª ¦ â |
1878 | * бит 3 установлен = 4-я кнопка нажата |
1879 | * ¡¨â 4 ãáâ ®¢«¥ = 5-ï ª®¯ª ¦ â |
1879 | * бит 4 установлен = 5-я кнопка нажата |
1880 | * ¯à®ç¨¥ ¡¨âë á¡à®è¥ë |
1880 | * прочие биты сброшены |
1881 | 1881 | ||
1882 | ------------------ ®¤äãªæ¨ï 4 - § £à㧨âì ªãàá®à ------------------- |
1882 | ------------------ Подфункция 4 - загрузить курсор ------------------- |
1883 | à ¬¥âàë: |
1883 | Параметры: |
1884 | * eax = 37 - ®¬¥à äãªæ¨¨ |
1884 | * eax = 37 - номер функции |
1885 | * ebx = 4 - ®¬¥à ¯®¤äãªæ¨¨ |
1885 | * ebx = 4 - номер подфункции |
1886 | * dx = ¨áâ®ç¨ª ¤ ëå: |
1886 | * dx = источник данных: |
1887 | * dx = LOAD_FROM_FILE = 0 - ¤ ë¥ ¢ ä ©«¥ |
1887 | * dx = LOAD_FROM_FILE = 0 - данные в файле |
1888 | * ecx = 㪠§ â¥«ì ¯®«ë© ¯ãâì ª ä ©«ã ªãàá®à |
1888 | * ecx = указатель на полный путь к файлу курсора |
1889 | * ä ©« ªãàá®à ¤®«¦¥ ¡ëâì ¢ ä®à¬ ⥠.cur, áâ ¤ à⮬ ¤«ï |
1889 | * файл курсора должен быть в формате .cur, стандартном для |
1890 | MS Windows, ¯à¨çñ¬ à §¬¥à®¬ 32*32 ¯¨ªá¥«ï |
1890 | MS Windows, причём размером 32*32 пикселя |
1891 | * dx = LOAD_FROM_MEM = 1 - ¤ ë¥ ä ©« 㦥 § £àã¦¥ë ¢ ¯ ¬ïâì |
1891 | * dx = LOAD_FROM_MEM = 1 - данные файла уже загружены в память |
1892 | * ecx = 㪠§ â¥«ì ¤ ë¥ ä ©« ªãàá®à |
1892 | * ecx = указатель на данные файла курсора |
1893 | * ä®à¬ â ¤ ëå â ª®© ¦¥, ª ª ¨ ¢ ¯à¥¤ë¤ã饬 á«ãç ¥ |
1893 | * формат данных такой же, как и в предыдущем случае |
1894 | * dx = LOAD_INDIRECT = 2 - ¤ ë¥ ¢ ¯ ¬ï⨠|
1894 | * dx = LOAD_INDIRECT = 2 - данные в памяти |
1895 | * ecx = 㪠§ â¥«ì ®¡à § ªãàá®à ¢ ä®à¬ ⥠ARGB 32*32 ¯¨ªá¥«ï |
1895 | * ecx = указатель на образ курсора в формате ARGB 32*32 пикселя |
1896 | * edx = 0xXXYY0002, £¤¥ |
1896 | * edx = 0xXXYY0002, где |
1897 | * XX = x-ª®®à¤¨ â "£®àï祩 â®çª¨" ªãàá®à |
1897 | * XX = x-координата "горячей точки" курсора |
1898 | * YY = y-ª®®à¤¨ â |
1898 | * YY = y-координата |
1899 | * 0 <= XX, YY <= 31 |
1899 | * 0 <= XX, YY <= 31 |
1900 | ®§¢à é ¥¬®¥ § 票¥: |
1900 | Возвращаемое значение: |
1901 | * eax = 0 - ¥ã¤ ç |
1901 | * eax = 0 - неудача |
1902 | * ¨ ç¥ eax = åí¤« ªãàá®à |
1902 | * иначе eax = хэндл курсора |
1903 | 1903 | ||
1904 | ------------------ ®¤äãªæ¨ï 5 - ãáâ ®¢¨âì ªãàá®à ------------------ |
1904 | ------------------ Подфункция 5 - установить курсор ------------------ |
1905 | áâ ¢«¨¢ ¥â ®¢ë© ªãàá®à ¤«ï ®ª ⥪ã饣® ¯®â®ª . |
1905 | Устанавливает новый курсор для окна текущего потока. |
1906 | à ¬¥âàë: |
1906 | Параметры: |
1907 | * eax = 37 - ®¬¥à äãªæ¨¨ |
1907 | * eax = 37 - номер функции |
1908 | * ebx = 5 - ®¬¥à ¯®¤äãªæ¨¨ |
1908 | * ebx = 5 - номер подфункции |
1909 | * ecx = åí¤« ªãàá®à |
1909 | * ecx = хэндл курсора |
1910 | ®§¢à é ¥¬®¥ § 票¥: |
1910 | Возвращаемое значение: |
1911 | * eax = åí¤« ¯à¥¤ë¤ã饣® ãáâ ®¢«¥®£® ªãàá®à |
1911 | * eax = хэндл предыдущего установленного курсора |
1912 | ¬¥ç ¨ï: |
1912 | Замечания: |
1913 | * ᫨ ¯¥à¥¤ ¥ª®à४âë© åí¤«, â® äãªæ¨ï ¢®ááâ ®¢¨â ªãàá®à |
1913 | * Если передан некорректный хэндл, то функция восстановит курсор |
1914 | ¯® 㬮«ç ¨î (áâ ¤ àâãî áâ५ªã). ç áâ®áâ¨, ª ¢®ááâ ®¢«¥¨î |
1914 | по умолчанию (стандартную стрелку). В частности, к восстановлению |
1915 | ªãàá®à ¯® 㬮«ç ¨î ¯à¨¢®¤¨â ¯¥à¥¤ ç ecx=0. |
1915 | курсора по умолчанию приводит передача ecx=0. |
1916 | 1916 | ||
1917 | ------------------- ®¤äãªæ¨ï 6 - 㤠«¨âì ªãàá®à -------------------- |
1917 | ------------------- Подфункция 6 - удалить курсор -------------------- |
1918 | à ¬¥âàë: |
1918 | Параметры: |
1919 | * eax = 37 - ®¬¥à äãªæ¨¨ |
1919 | * eax = 37 - номер функции |
1920 | * ebx = 6 - ®¬¥à ¯®¤äãªæ¨¨ |
1920 | * ebx = 6 - номер подфункции |
1921 | * ecx = åí¤« ªãàá®à |
1921 | * ecx = хэндл курсора |
1922 | ®§¢à é ¥¬®¥ § 票¥: |
1922 | Возвращаемое значение: |
1923 | * eax à §àãè ¥âáï |
1923 | * eax разрушается |
1924 | ¬¥ç ¨ï: |
1924 | Замечания: |
1925 | * ãàá®à ¤®«¦¥ ¡ë« ¡ëâì à ¥¥ § £à㦥 ⥪ã騬 ¯®â®ª®¬ |
1925 | * Курсор должен был быть ранее загружен текущим потоком |
1926 | (¢ë§®¢®¬ ¯®¤äãªæ¨¨ 4). ãªæ¨ï ¥ 㤠«ï¥â á¨áâ¥¬ë¥ ªãàá®àë ¨ |
1926 | (вызовом подфункции 4). Функция не удаляет системные курсоры и |
1927 | ªãàá®àë, § £àã¦¥ë¥ ¤à㣨¬¨ ¯à¨«®¦¥¨ï¬¨. |
1927 | курсоры, загруженные другими приложениями. |
1928 | * ᫨ 㤠«ï¥âáï ªâ¨¢ë© (ãáâ ®¢«¥ë© ¯®¤äãªæ¨¥© 5) ªãàá®à, â® |
1928 | * Если удаляется активный (установленный подфункцией 5) курсор, то |
1929 | ¢®ááâ ¢«¨¢ ¥âáï ªãàá®à ¯® 㬮«ç ¨î (áâ ¤ àâ ï áâ५ª ). |
1929 | восстанавливается курсор по умолчанию (стандартная стрелка). |
2100 | * ¡¨âë 16-21 = ᪮«ìª® æ¨äà ®â®¡à ¦ âì |
2100 | * биты 16-21 = сколько цифр отображать |
2235 | ====================================================================== |
2235 | ====================================================================== |
2236 | ===== ãªæ¨ï 48, ¯®¤äãªæ¨ï 5 - ¯®«ãç¨âì à ¡®çãî ®¡« áâì íªà . ==== |
2236 | ===== Функция 48, подфункция 5 - получить рабочую область экрана. ==== |
2237 | ====================================================================== |
2237 | ====================================================================== |
2238 | à ¬¥âàë: |
2238 | Параметры: |
2239 | * eax = 48 - ®¬¥à äãªæ¨¨ |
2239 | * eax = 48 - номер функции |
2240 | * ebx = 5 - ®¬¥à ¯®¤äãªæ¨¨ |
2240 | * ebx = 5 - номер подфункции |
2241 | ®§¢à é ¥¬®¥ § 票¥: |
2241 | Возвращаемое значение: |
2242 | * eax = [left]*65536 + [right] |
2242 | * eax = [left]*65536 + [right] |
2243 | * ebx = [top]*65536 + [bottom] |
2243 | * ebx = [top]*65536 + [bottom] |
2244 | ¬¥ç ¨ï: |
2244 | Замечания: |
2245 | * ¡®ç ï ®¡« áâì íªà ®¯à¥¤¥«ï¥â ¯®«®¦¥¨¥ ¨ ª®®à¤¨ âë |
2245 | * Рабочая область экрана определяет положение и координаты |
2246 | ¬ ªá¨¬¨§¨à®¢ ®£® ®ª . |
2246 | максимизированного окна. |
2247 | * ¡®ç ï ®¡« áâì íªà ¯à¨ ®à¬ «ì®© à ¡®â¥ ¥áâì ¢¥áì íªà |
2247 | * Рабочая область экрана при нормальной работе есть весь экран |
2248 | § ¢ëç¥â®¬ ¯ ¥«¨ (@panel). |
2248 | за вычетом панели (@panel). |
2249 | * (left,top) - ª®®à¤¨ âë «¥¢®£® ¢¥à奣® 㣫 , |
2249 | * (left,top) - координаты левого верхнего угла, |
2250 | (right,bottom) - ª®®à¤¨ âë ¯à ¢®£® ¨¦¥£®. |
2250 | (right,bottom) - координаты правого нижнего. |
2251 | ª¨¬ ®¡à §®¬, à §¬¥à à ¡®ç¥© ®¡« á⨠¯® ®á¨ x ®¯à¥¤¥«ï¥âáï |
2251 | Таким образом, размер рабочей области по оси x определяется |
2252 | ä®à¬ã«®© right-left+1, ¯® ®á¨ y - ä®à¬ã«®© bottom-right+1. |
2252 | формулой right-left+1, по оси y - формулой bottom-right+1. |
2253 | * ¬®âਠ⠪¦¥ äãªæ¨î 14, |
2253 | * Смотри также функцию 14, |
2254 | ¯®§¢®«ïîéãî ®¯à¥¤¥«¨âì à §¬¥àë ¢á¥£® íªà . |
2254 | позволяющую определить размеры всего экрана. |
2255 | * áâì ¯ à ï äãªæ¨ï ãáâ ®¢ª¨ à ¡®ç¥© ®¡« á⨠- ¯®¤äãªæ¨ï 6. |
2255 | * Есть парная функция установки рабочей области - подфункция 6. |
2256 | 2256 | ||
2257 | ====================================================================== |
2257 | ====================================================================== |
2258 | ==== ãªæ¨ï 48, ¯®¤äãªæ¨ï 6 - ãáâ ®¢¨âì à ¡®çãî ®¡« áâì íªà . === |
2258 | ==== Функция 48, подфункция 6 - установить рабочую область экрана. === |
2259 | ====================================================================== |
2259 | ====================================================================== |
2260 | à ¬¥âàë: |
2260 | Параметры: |
2261 | * eax = 48 - ®¬¥à äãªæ¨¨ |
2261 | * eax = 48 - номер функции |
2262 | * ebx = 6 - ®¬¥à ¯®¤äãªæ¨¨ |
2262 | * ebx = 6 - номер подфункции |
2263 | * ecx = [left]*65536 + [right] |
2263 | * ecx = [left]*65536 + [right] |
2264 | * edx = [top]*65536 + [bottom] |
2264 | * edx = [top]*65536 + [bottom] |
2265 | ®§¢à é ¥¬®¥ § 票¥: |
2265 | Возвращаемое значение: |
2266 | * äãªæ¨ï ¥ ¢®§¢à é ¥â § 票ï |
2266 | * функция не возвращает значения |
2267 | ¬¥ç ¨ï: |
2267 | Замечания: |
2268 | * ¡®ç ï ®¡« áâì íªà ®¯à¥¤¥«ï¥â ¯®«®¦¥¨¥ ¨ ª®®à¤¨ âë |
2268 | * Рабочая область экрана определяет положение и координаты |
2269 | ¬ ªá¨¬¨§¨à®¢ ®£® ®ª . |
2269 | максимизированного окна. |
2270 | * â äãªæ¨ï ¨á¯®«ì§ã¥âáï ⮫쪮 ¯à¨«®¦¥¨¥¬ @panel, |
2270 | * Эта функция используется только приложением @panel, |
2271 | ãáâ ¢«¨¢ î騬 à ¡®ç¥© ®¡« áâìî ¢¥áì íªà § ¢ëç¥â®¬ ¯ ¥«¨. |
2271 | устанавливающим рабочей областью весь экран за вычетом панели. |
2272 | * (left,top) - ª®®à¤¨ âë «¥¢®£® ¢¥à奣® 㣫 , |
2272 | * (left,top) - координаты левого верхнего угла, |
2273 | (right,bottom) - ª®®à¤¨ âë ¯à ¢®£® ¨¦¥£®. |
2273 | (right,bottom) - координаты правого нижнего. |
2274 | ª¨¬ ®¡à §®¬, à §¬¥à à ¡®ç¥© ®¡« á⨠¯® ®á¨ x ®¯à¥¤¥«ï¥âáï |
2274 | Таким образом, размер рабочей области по оси x определяется |
2275 | ä®à¬ã«®© right-left+1, ¯® ®á¨ y - ä®à¬ã«®© bottom-right+1. |
2275 | формулой right-left+1, по оси y - формулой bottom-right+1. |
2276 | * ᫨ left>=right, â® x-ª®®à¤¨ âë à ¡®ç¥© ®¡« á⨠¥ ¨§¬¥ïîâáï. |
2276 | * Если left>=right, то x-координаты рабочей области не изменяются. |
2277 | ᫨ left<0, â® left ¥ ãáâ ¢«¨¢ ¥âáï. ᫨ right ¡®«ìè¥ |
2277 | Если left<0, то left не устанавливается. Если right больше |
2278 | ¨«¨ à ¢® è¨à¨ë íªà , â® right ¥ ãáâ ¢«¨¢ ¥âáï. |
2278 | или равно ширины экрана, то right не устанавливается. |
2279 | «®£¨ç® ¯® ®á¨ y. |
2279 | Аналогично по оси y. |
2280 | * ¬®âਠ⠪¦¥ äãªæ¨î 14, |
2280 | * Смотри также функцию 14, |
2281 | ¯®§¢®«ïîéãî ®¯à¥¤¥«¨âì à §¬¥àë ¢á¥£® íªà . |
2281 | позволяющую определить размеры всего экрана. |
2282 | * áâì ¯ à ï äãªæ¨ï ¯®«ã票ï à ¡®ç¥© ®¡« á⨠- |
2282 | * Есть парная функция получения рабочей области - |
2283 | ¯®¤äãªæ¨ï 5. |
2283 | подфункция 5. |
2284 | * â äãªæ¨ï ¢â®¬ â¨ç¥áª¨ ¯¥à¥à¨á®¢ë¢ ¥â íªà , ¯® 室㠤¥« |
2284 | * Эта функция автоматически перерисовывает экран, по ходу дела |
2285 | ®¡®¢«ï¥â ª®®à¤¨ âë ¨ à §¬¥àë ¬ ªá¨¬¨§¨à®¢ ëå ®ª®. |
2285 | обновляет координаты и размеры максимизированных окон. |
2286 | ᥠ®ª ¨§¢¥é îâáï ® ¥®¡å®¤¨¬®á⨠¯¥à¥à¨á®¢ª¨ (ᮡë⨥ 1). |
2286 | Все окна извещаются о необходимости перерисовки (событие 1). |
2287 | 2287 | ||
2288 | ====================================================================== |
2288 | ====================================================================== |
2289 | ====================== ãªæ¨ï 48, ¯®¤äãªæ¨ï 7 ====================== |
2289 | ====================== Функция 48, подфункция 7 ====================== |
2290 | ============ ®«ãç¨âì ®¡« áâì ᪨ ¤«ï ⥪áâ § £®«®¢ª . ============ |
2290 | ============ Получить область скина для текста заголовка. ============ |
2291 | ====================================================================== |
2291 | ====================================================================== |
2292 | ®§¢à é ¥â ®¡« áâì § £®«®¢ª ®ª ᮠ᪨®¬, ¯à¥¤ § ç¥ãî |
2292 | Возвращает область заголовка окна со скином, предназначенную |
2293 | ¤«ï ¢ë¢®¤ ⥪áâ § £®«®¢ª . |
2293 | для вывода текста заголовка. |
2294 | à ¬¥âàë: |
2294 | Параметры: |
2295 | * eax = 48 - ®¬¥à äãªæ¨¨ |
2295 | * eax = 48 - номер функции |
2296 | * ebx = 7 - ®¬¥à ¯®¤äãªæ¨¨ |
2296 | * ebx = 7 - номер подфункции |
2297 | ®§¢à é ¥¬®¥ § 票¥: |
2297 | Возвращаемое значение: |
2298 | * eax = [left]*65536 + [right] |
2298 | * eax = [left]*65536 + [right] |
2299 | * ebx = [top]*65536 + [bottom] |
2299 | * ebx = [top]*65536 + [bottom] |
2300 | ¬¥ç ¨ï: |
2300 | Замечания: |
2301 | * ᯮ«ì§®¢ ¨¥/¥¨á¯®«ì§®¢ ¨¥ í⮩ äãªæ¨¨ - |
2301 | * Использование/неиспользование этой функции - |
2302 | «¨ç®¥ ¤¥«® ¯à¨«®¦¥¨ï. |
2302 | личное дело приложения. |
2303 | * ¥ª®¬¥¤ã¥âáï ãç¨âë¢ âì § 票ï, ¢®§¢à é ¥¬ë¥ í⮩ äãªæ¨¥©, |
2303 | * Рекомендуется учитывать значения, возвращаемые этой функцией, |
2304 | ¯à¨ ¢ë¡®à¥ ¬¥áâ ¤«ï à¨á®¢ ¨ï ⥪áâ § £®«®¢ª (äãªæ¨¥© 4) ¨«¨ |
2304 | при выборе места для рисования текста заголовка (функцией 4) или |
2305 | ª ª®£®-¨¡ã¤ì § ¬¥¨â¥«ï ⥪áâ § £®«®¢ª |
2305 | какого-нибудь заменителя текста заголовка |
2306 | (¯® ãᬮâà¥¨î ¯à¨«®¦¥¨ï). |
2306 | (по усмотрению приложения). |
2307 | 2307 | ||
2308 | ====================================================================== |
2308 | ====================================================================== |
2309 | ==== ãªæ¨ï 48, ¯®¤äãªæ¨ï 8 - ãáâ ®¢¨âì ¨á¯®«ì§ã¥¬ë© ᪨ ®ª®. === |
2309 | ==== Функция 48, подфункция 8 - установить используемый скин окон. === |
2310 | ====================================================================== |
2310 | ====================================================================== |
2311 | à ¬¥âàë: |
2311 | Параметры: |
2312 | * eax = 48 - ®¬¥à äãªæ¨¨ |
2312 | * eax = 48 - номер функции |
2313 | * ebx = 8 - ®¬¥à ¯®¤äãªæ¨¨ |
2313 | * ebx = 8 - номер подфункции |
2314 | * ecx = 㪠§ â¥«ì ¨¬ï ä ©« ᪨ |
2314 | * ecx = указатель на имя файла скина |
2315 | ®§¢à é ¥¬®¥ § 票¥: |
2315 | Возвращаемое значение: |
2316 | * eax = 0 - ãá¯¥è® |
2316 | * eax = 0 - успешно |
2317 | * eax = 1 - ¥ 㤠«®áì § £à㧨âì ä ©« |
2317 | * eax = 1 - не удалось загрузить файл |
2318 | * eax = 2 - ä ©« ¥ ï¥âáï ä ©«®¬ ᪨ |
2318 | * eax = 2 - файл не является файлом скина |
2319 | ¬¥ç ¨ï: |
2319 | Замечания: |
2320 | * ਠãᯥ让 § £à㧪¥ ᪨ ¢á¥ ®ª ¨§¢¥é îâáï ® ¥®¡å®¤¨¬®á⨠|
2320 | * При успешной загрузке скина все окна извещаются о необходимости |
2321 | ¯¥à¥à¨á®¢ª¨ (ᮡë⨥ 1). |
2321 | перерисовки (событие 1). |
2322 | * ਠ§ £à㧪¥ á¨á⥬ áç¨âë¢ ¥â ᪨ ¨§ ä ©« default.skn |
2322 | * При загрузке система считывает скин из файла default.skn |
2323 | à ¬¤¨áª¥. |
2323 | на рамдиске. |
2324 | * ®«ì§®¢ â¥«ì ¬®¦¥â ¨§¬¥ïâì ᪨ áâ â¨ç¥áª¨, ᮧ¤ ¢ ᢮© |
2324 | * Пользователь может изменять скин статически, создав свой |
2325 | default.skn, ¨«¨ ¤¨ ¬¨ç¥áª¨ á ¯®¬®éìî ¯à¨«®¦¥¨ï desktop. |
2325 | default.skn, или динамически с помощью приложения desktop. |
2326 | 2326 | ||
2327 | ====================================================================== |
2327 | ====================================================================== |
2328 | ============ ãªæ¨ï 49 - Advanced Power Management (APM). =========== |
2328 | ============ Функция 49 - Advanced Power Management (APM). =========== |
2329 | ====================================================================== |
2329 | ====================================================================== |
2330 | à ¬¥âàë: |
2330 | Параметры: |
2331 | * eax = 49 - ®¬¥à äãªæ¨¨ |
2331 | * eax = 49 - номер функции |
2332 | * dx = ®¬¥à äãªæ¨¨ APM ( «®£ ax ¢ ᯥæ¨ä¨ª 樨) |
2332 | * dx = номер функции APM (аналог ax в спецификации) |
2333 | * bx, cx = ¯ à ¬¥âàë äãªæ¨¨ APM |
2333 | * bx, cx = параметры функции APM |
2334 | ®§¢à é ¥¬®¥ § 票¥: |
2334 | Возвращаемое значение: |
2335 | * 16-¡¨âë¥ à¥£¨áâàë ax, bx, cx, dx, si, di ¨ ä« £ CF |
2335 | * 16-битные регистры ax, bx, cx, dx, si, di и флаг CF |
2336 | ãáâ ®¢«¥ë ¢ ᮮ⢥âá⢨¨ ᮠᯥæ¨ä¨ª 樥© APM |
2336 | установлены в соответствии со спецификацией APM |
2337 | * áâ à訥 ¯®«®¢¨ë 32-¡¨âëå ॣ¨áâ஢ eax, ebx, ecx, |
2337 | * старшие половины 32-битных регистров eax, ebx, ecx, |
2338 | edx, esi, edi à §àãè îâáï |
2338 | edx, esi, edi разрушаются |
2339 | ¬¥ç ¨ï: |
2339 | Замечания: |
Line 2340... | Line 2340... | ||
2340 | * ¯¥æ¨ä¨ª æ¨ï APM 1.2 ®¯¨áë¢ ¥âáï ¢ ¤®ªã¬¥â¥ |
2340 | * Спецификация APM 1.2 описывается в документе |
2341 | "Advanced Power Management (APM) BIOS Specification" |
2341 | "Advanced Power Management (APM) BIOS Specification" |
2342 | (Revision 1.2), ¤®áâ㯮¬ |
2342 | (Revision 1.2), доступном на |
2343 | http://www.microsoft.com/whdc/archive/amp_12.mspx; |
2343 | http://www.microsoft.com/whdc/archive/amp_12.mspx; |
2344 | ªà®¬¥ ⮣®, ® ¢ª«îç¥ ¢ ¨§¢¥áâë© Interrupt List by Ralf Brown |
2344 | кроме того, она включена в известный Interrupt List by Ralf Brown |
2345 | (http://www.pobox.com/~ralf/files.html, |
2345 | (http://www.pobox.com/~ralf/files.html, |
2346 | ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/). |
2346 | ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/). |
2347 | 2347 | ||
2348 | ====================================================================== |
2348 | ====================================================================== |
2349 | ================= ãªæ¨ï 50 - ãáâ ®¢ª ä®à¬ë ®ª . ================= |
2349 | ================= Функция 50 - установка формы окна. ================= |
2350 | ====================================================================== |
2350 | ====================================================================== |
2351 | ¡ëçë¥ ®ª ¯à¥¤áâ ¢«ïîâ ᮡ®© ¯àאַ㣮«ì¨ª¨. ¯®¬®éìî í⮩ äãªæ¨¨ |
2351 | Обычные окна представляют собой прямоугольники. С помощью этой функции |
2352 | ®ªã ¬®¦® ¯à¨¤ âì ¯à®¨§¢®«ìãî ä®à¬ã. ®à¬ § ¤ ñâáï ¡®à®¬ â®ç¥ª |
2352 | окну можно придать произвольную форму. Форма задаётся набором точек |
2353 | ¢ãâਠ®¡à ¬«ïî饣® ¯àאַ㣮«ì¨ª , ¯à¨ ¤«¥¦ é¨å ®ªã. ®«®¦¥¨¥ ¨ |
2353 | внутри обрамляющего прямоугольника, принадлежащих окну. Положение и |
2354 | à §¬¥àë ®¡à ¬«ïî饣® ¯àאַ㣮«ì¨ª § ¤ îâáï äãªæ¨¥© 0 ¨ ¨§¬¥ïîâáï |
2354 | размеры обрамляющего прямоугольника задаются функцией 0 и изменяются |
2355 | äãªæ¨¥© 67. |
2355 | функцией 67. |
2356 | 2356 | ||
2357 | --------------- áâ ®¢ª ¤ ëå á ¨ä®à¬ 樥© ® ä®à¬¥ --------------- |
2357 | --------------- Установка данных с информацией о форме --------------- |
2358 | à ¬¥âàë: |
2358 | Параметры: |
2359 | * eax = 50 - ®¬¥à äãªæ¨¨ |
2359 | * eax = 50 - номер функции |
2360 | * ebx = 0 - ®¬¥à ¯®¤äãªæ¨¨ |
2360 | * ebx = 0 - номер подфункции |
2361 | * ecx = 㪠§ â¥«ì ¤ ë¥ ä®à¬ë (¬ áᨢ ¡ ©â 0/1) |
2361 | * ecx = указатель на данные формы (массив байт 0/1) |
2362 | ®§¢à é ¥¬®¥ § 票¥: |
2362 | Возвращаемое значение: |
2363 | * äãªæ¨ï ¥ ¢®§¢à é ¥â § 票ï |
2363 | * функция не возвращает значения |
2364 | 2364 | ||
2365 | ------------------ áâ ®¢ª ¬ áèâ ¡ ¤ ëå ä®à¬ë ------------------- |
2365 | ------------------ Установка масштаба данных формы ------------------- |
2366 | à ¬¥âàë: |
2366 | Параметры: |
2367 | * eax = 50 - ®¬¥à äãªæ¨¨ |
2367 | * eax = 50 - номер функции |
2368 | * ebx = 1 - ®¬¥à ¯®¤äãªæ¨¨ |
2368 | * ebx = 1 - номер подфункции |
2369 | * ecx § ¤ ñâ ¬ áèâ ¡: ª ¦¤ë© ¡ ©â ¤ ëå ®¯à¥¤¥«ï¥â |
2369 | * ecx задаёт масштаб: каждый байт данных определяет |
2370 | (2^scale)*(2^scale) ¯¨ªá¥«¥© |
2370 | (2^scale)*(2^scale) пикселей |
2371 | ®§¢à é ¥¬®¥ § 票¥: |
2371 | Возвращаемое значение: |
2372 | * äãªæ¨ï ¥ ¢®§¢à é ¥â § 票ï |
2372 | * функция не возвращает значения |
2373 | ¬¥ç ¨ï: |
2373 | Замечания: |
2374 | * áèâ ¡ ¯® 㬮«ç ¨î à ¢¥ 0 (¬ áèâ ¡¨àãî騩 ¬®¦¨â¥«ì 1). ᫨ ¢ |
2374 | * Масштаб по умолчанию равен 0 (масштабирующий множитель 1). Если в |
2375 | ¤ ëå ä®à¬ë ®¤¨ ¡ ©â ᮮ⢥âáâ¢ã¥â ®¤®¬ã ¯¨ªá¥«î, â® ¬ áèâ ¡ |
2375 | данных формы один байт соответствует одному пикселю, то масштаб |
2376 | ¬®¦® ¥ ãáâ ¢«¨¢ âì. |
2376 | можно не устанавливать. |
2377 | * ¡®§ 稬 xsize = è¨à¨ ®ª (¢ ¯¨ªá¥«ïå), ysize = ¢ëá®â ; |
2377 | * Обозначим xsize = ширина окна (в пикселях), ysize = высота; |
2378 | ®¡à â¨â¥ ¢¨¬ ¨¥, çâ® ®¨ ¥¤¨¨æã ¡®«ìè¥, 祬 ãáâ ¢«¨¢ ¥¬ë¥ |
2378 | обратите внимание, что они на единицу больше, чем устанавливаемые |
2379 | äãªæ¨ï¬¨ 0, 67. |
2379 | функциями 0, 67. |
2380 | * ® ®¯à¥¤¥«¥¨î ¬ áèâ ¡ xsize ¨ ysize ¤®«¦ë ¤¥«¨âìáï 2^scale. |
2380 | * По определению масштаба xsize и ysize должны делиться на 2^scale. |
2381 | * ©â ¤ ëå ¯® ᬥ饨î a ¤®«¦¥ ¡ëâì 0/1 ¨ |
2381 | * Байт данных по смещению a должен быть 0/1 и |
2382 | ®¯à¥¤¥«ï¥â ¯à¨ ¤«¥¦®áâì ®ªã ª¢ ¤à â á® áâ®à®®© 2^scale |
2382 | определяет принадлежность окну квадрата со стороной 2^scale |
2383 | (¯à¨ scale=0 ¯®«ãç ¥¬ ¯¨ªá¥«ì) ¨ ª®®à¤¨ â ¬¨ «¥¢®£® ¢¥à奣® 㣫 |
2383 | (при scale=0 получаем пиксель) и координатами левого верхнего угла |
2384 | (a mod (xsize shr scale), a div (xsize shr scale)) |
2384 | (a mod (xsize shr scale), a div (xsize shr scale)) |
2385 | * §¬¥à ¤ ëå: (xsize shr scale)*(ysize shr scale). |
2385 | * Размер данных: (xsize shr scale)*(ysize shr scale). |
2386 | * ë¥ ¤®«¦ë ¯à¨áãâá⢮¢ âì ¢ ¯ ¬ï⨠¨ ¥ ¬¥ïâìáï |
2386 | * Данные должны присутствовать в памяти и не меняться |
2387 | ¯®á«¥ ãáâ ®¢ª¨ ä®à¬ë. |
2387 | после установки формы. |
2388 | * ¨á⥬ ¯à®á¬ âਢ ¥â ¤ ë¥ ® ä®à¬¥ ¯à¨ ª ¦¤®© ¯¥à¥à¨á®¢ª¥ ®ª |
2388 | * Система просматривает данные о форме при каждой перерисовке окна |
2389 | äãªæ¨¥© 0. |
2389 | функцией 0. |
2390 | * 맮¢ ¯®¤äãªæ¨¨ 0 á ã«¥¢ë¬ 㪠§ ⥫¥¬ ¯à¨¢®¤¨â ª ¢®§¢à âã |
2390 | * Вызов подфункции 0 с нулевым указателем приводит к возврату |
2391 | ª ¯àאַ㣮«ì®© ä®à¬¥. |
2391 | к прямоугольной форме. |
2392 | 2392 | ||
2393 | ====================================================================== |
2393 | ====================================================================== |
2394 | ===================== ãªæ¨ï 51 - ᮧ¤ âì ¯®â®ª. ==================== |
2394 | ===================== Функция 51 - создать поток. ==================== |
2395 | ====================================================================== |
2395 | ====================================================================== |
2396 | à ¬¥âàë: |
2396 | Параметры: |
2397 | * eax = 51 - ®¬¥à äãªæ¨¨ |
2397 | * eax = 51 - номер функции |
2398 | * ebx = 1 - ¥¤¨á⢥ ï ¯®¤äãªæ¨ï |
2398 | * ebx = 1 - единственная подфункция |
2399 | * ecx = ¤à¥á â®çª¨ ¢å®¤ ¯®â®ª ( ç «ìë© eip) |
2399 | * ecx = адрес точки входа потока (начальный eip) |
2400 | * edx = 㪠§ ⥫ì áâíª ¯®â®ª ( ç «ìë© esp) |
2400 | * edx = указатель стэка потока (начальный esp) |
2401 | ®§¢à é ¥¬®¥ § 票¥: |
2401 | Возвращаемое значение: |
2402 | * eax = -1 - ®è¨¡ª (¢ á¨á⥬¥ ᫨誮¬ ¬®£® ¯®â®ª®¢) |
2402 | * eax = -1 - ошибка (в системе слишком много потоков) |
2403 | * ¨ ç¥ eax = TID - ¨¤¥â¨ä¨ª â®à ¯®â®ª |
2403 | * иначе eax = TID - идентификатор потока |
2404 | 2404 | ||
2405 | ====================================================================== |
2405 | ====================================================================== |
2406 | = ãªæ¨ï 52, ¯®¤äãªæ¨ï 0 - ¯®«ãç¨âì ª®ä¨£ãà æ¨î á¥â¥¢®£® ¤à ©¢¥à . |
2406 | = Функция 52, подфункция 0 - получить конфигурацию сетевого драйвера. |
2407 | ====================================================================== |
2407 | ====================================================================== |
2408 | à ¬¥âàë: |
2408 | Параметры: |
2409 | * eax = 52 - ®¬¥à äãªæ¨¨ |
2409 | * eax = 52 - номер функции |
2410 | * ebx = 0 - ®¬¥à ¯®¤äãªæ¨¨ |
2410 | * ebx = 0 - номер подфункции |
2411 | ®§¢à é ¥¬®¥ § 票¥: |
2411 | Возвращаемое значение: |
2412 | * eax = ¤¢®©®¥ á«®¢® ª®ä¨£ãà 樨 |
2412 | * eax = двойное слово конфигурации |
2413 | ¬¥ç ¨ï: |
2413 | Замечания: |
2414 | * «®¢® ª®ä¨£ãà 樨 ¬®¦® ãáâ ®¢¨âì ¯®¤äãªæ¨¥© 2. |
2414 | * Слово конфигурации можно установить подфункцией 2. |
2415 | * ¤à® ¥ ¨á¯®«ì§ã¥â ᮮ⢥âáâ¢ãîéãî ¯¥à¥¬¥ãî. |
2415 | * Ядро не использует соответствующую переменную. |
2416 | ¥®áâì í⮩ ¯¥à¥¬¥®© ¨ à ¡®â îé¨å á ¥© ¯®¤äãªæ¨© 0 ¨ 2 |
2416 | Ценность этой переменной и работающих с ней подфункций 0 и 2 |
2417 | ¯à¥¤áâ ¢«ï¥âáï ᮬ¨â¥«ì®©. |
2417 | представляется сомнительной. |
2418 | 2418 | ||
2419 | ====================================================================== |
2419 | ====================================================================== |
2420 | ======= ãªæ¨ï 52, ¯®¤äãªæ¨ï 1 - ¯®«ãç¨âì «®ª «ìë© IP- ¤à¥á. ====== |
2420 | ======= Функция 52, подфункция 1 - получить локальный IP-адрес. ====== |
2421 | ====================================================================== |
2421 | ====================================================================== |
2422 | à ¬¥âàë: |
2422 | Параметры: |
2423 | * eax = 52 - ®¬¥à äãªæ¨¨ |
2423 | * eax = 52 - номер функции |
2424 | * ebx = 1 - ®¬¥à ¯®¤äãªæ¨¨ |
2424 | * ebx = 1 - номер подфункции |
2425 | ®§¢à é ¥¬®¥ § 票¥: |
2425 | Возвращаемое значение: |
2426 | * eax = IP- ¤à¥á (4 ¡ ©â ) |
2426 | * eax = IP-адрес (4 байта) |
2427 | ¬¥ç ¨ï: |
2427 | Замечания: |
2428 | * ®ª «ìë© IP- ¤à¥á ãáâ ¢«¨¢ ¥âáï ¯®¤äãªæ¨¥© 3. |
2428 | * Локальный IP-адрес устанавливается подфункцией 3. |
2429 | 2429 | ||
2430 | ====================================================================== |
2430 | ====================================================================== |
2431 | ãªæ¨ï 52, ¯®¤äãªæ¨ï 2 - ãáâ ®¢¨âì ª®ä¨£ãà æ¨î á¥â¥¢®£® ¤à ©¢¥à . |
2431 | Функция 52, подфункция 2 - установить конфигурацию сетевого драйвера. |
2432 | ====================================================================== |
2432 | ====================================================================== |
2433 | à ¬¥âàë: |
2433 | Параметры: |
2434 | * eax = 52 - ®¬¥à äãªæ¨¨ |
2434 | * eax = 52 - номер функции |
2435 | * ebx = 2 - ®¬¥à ¯®¤äãªæ¨¨ |
2435 | * ebx = 2 - номер подфункции |
2436 | * ecx = ¤¢®©®¥ á«®¢® ª®ä¨£ãà 樨; ¥á«¨ ¬« ¤è¨¥ 7 ¡¨â ®¡à §ãîâ |
2436 | * ecx = двойное слово конфигурации; если младшие 7 бит образуют |
2437 | ç¨á«® 3, íâ® ¢®á¯à¨¨¬ ¥âáï ª ª § ¯à®á [¯¥à¥-]¨¨æ¨ «¨§ æ¨î |
2437 | число 3, это воспринимается как запрос на [пере-]инициализацию |
2438 | Ethernet-ª àâë, ¢ ¯à®â¨¢®¬ á«ãç ¥ Ethernet ¢ëª«îç ¥âáï |
2438 | Ethernet-карты, в противном случае Ethernet выключается |
2439 | ®§¢à é ¥¬®¥ § 票¥: |
2439 | Возвращаемое значение: |
2440 | * ¥á«¨ ¥ § ¯à®è¥ Ethernet-¨â¥à䥩á, â® ¢®§¢à é ¥âáï eax=2, |
2440 | * если не запрошен Ethernet-интерфейс, то возвращается eax=2, |
2441 | ® íâ® ¬®¦¥â ¨§¬¥¨âìáï ¢ ¡ã¤ãé¨å ¢¥àá¨ïå ï¤à |
2441 | но это может измениться в будущих версиях ядра |
2442 | * ¥á«¨ § ¯à®è¥ Ethernet-¨â¥à䥩á, â® eax=0 ®§ ç ¥â ®è¨¡ªã |
2442 | * если запрошен Ethernet-интерфейс, то eax=0 означает ошибку |
2443 | (®âáãâá⢨¥ Ethernet-ª àâë), ¥ã«¥¢®¥ § 票¥ - ãᯥå |
2443 | (отсутствие Ethernet-карты), а ненулевое значение - успех |
2444 | ¬¥ç ¨ï: |
2444 | Замечания: |
2445 | * «®¢® ª®ä¨£ãà 樨 ¬®¦® ¯à®ç¨â âì ¯®¤äãªæ¨¥© 0. |
2445 | * Слово конфигурации можно прочитать подфункцией 0. |
2446 | * ¤à® ¥ ¨á¯®«ì§ã¥â ᮮ⢥âáâ¢ãîéãî ¯¥à¥¬¥ãî. |
2446 | * Ядро не использует соответствующую переменную. |
2447 | ¥®áâì í⮩ ¯¥à¥¬¥®©, ¯®¤äãªæ¨¨ 0 ¨ ç á⨠¯®¤äãªæ¨¨ 2, |
2447 | Ценность этой переменной, подфункции 0 и части подфункции 2, |
2448 | ãáâ ¢«¨¢ î饩 íâã ¯¥à¥¬¥ãî, ¯à¥¤áâ ¢«ï¥âáï ᮬ¨â¥«ì®©. |
2448 | устанавливающей эту переменную, представляется сомнительной. |
2449 | 2449 | ||
2450 | ====================================================================== |
2450 | ====================================================================== |
2451 | ====== ãªæ¨ï 52, ¯®¤äãªæ¨ï 3 - ãáâ ®¢¨âì «®ª «ìë© IP- ¤à¥á. ===== |
2451 | ====== Функция 52, подфункция 3 - установить локальный IP-адрес. ===== |
2452 | ====================================================================== |
2452 | ====================================================================== |
2453 | à ¬¥âàë: |
2453 | Параметры: |
2454 | * eax = 52 - ®¬¥à äãªæ¨¨ |
2454 | * eax = 52 - номер функции |
2455 | * ebx = 3 - ®¬¥à ¯®¤äãªæ¨¨ |
2455 | * ebx = 3 - номер подфункции |
2456 | * ecx = IP- ¤à¥á (4 ¡ ©â ) |
2456 | * ecx = IP-адрес (4 байта) |
2457 | ®§¢à é ¥¬®¥ § 票¥: |
2457 | Возвращаемое значение: |
2458 | * ⥪ãé ï ॠ«¨§ æ¨ï ¢®§¢à é ¥â eax=3, ® íâ® ¬®¦¥â ¡ëâì ¨§¬¥¥® |
2458 | * текущая реализация возвращает eax=3, но это может быть изменено |
2459 | ¢ ¡ã¤ãé¨å ¢¥àá¨ïå |
2459 | в будущих версиях |
2460 | ¬¥ç ¨ï: |
2460 | Замечания: |
2461 | * ®ª «ìë© IP- ¤à¥á ¬®¦® ¯®«ãç¨âì ¯®¤äãªæ¨¥© 1. |
2461 | * Локальный IP-адрес можно получить подфункцией 1. |
2462 | 2462 | ||
2463 | ====================================================================== |
2463 | ====================================================================== |
2464 | = ãªæ¨ï 52, ¯®¤äãªæ¨ï 6 - ¤®¡ ¢¨âì ¤ ë¥ ¢ á⥪ ¢å®¤®© ®ç¥à¥¤¨. = |
2464 | = Функция 52, подфункция 6 - добавить данные в стек входной очереди. = |
2465 | ====================================================================== |
2465 | ====================================================================== |
2466 | à ¬¥âàë: |
2466 | Параметры: |
2467 | * eax = 52 - ®¬¥à äãªæ¨¨ |
2467 | * eax = 52 - номер функции |
2468 | * ebx = 6 - ®¬¥à ¯®¤äãªæ¨¨ |
2468 | * ebx = 6 - номер подфункции |
2469 | * edx = à §¬¥à ¤ ëå |
2469 | * edx = размер данных |
2470 | * esi = 㪠§ â¥«ì ¤ ë¥ |
2470 | * esi = указатель на данные |
Line 2471... | Line 2471... | ||
2471 | ®§¢à é ¥¬®¥ § 票¥: |
2471 | Возвращаемое значение: |
2472 | * eax = -1 - ®è¨¡ª |
2472 | * eax = -1 - ошибка |
2473 | * eax = 0 - ãá¯¥è® |
2473 | * eax = 0 - успешно |
2474 | ¬¥ç ¨ï: |
2474 | Замечания: |
2475 | * â äãªæ¨ï ¯à¥¤ § ç¥ â®«ìª® ¤«ï ¬¥¤«¥ëå á¥â¥¢ëå ¤à ©¢¥à®¢ |
2475 | * Эта функция предназначена только для медленных сетевых драйверов |
2476 | (PPP, SLIP). |
2476 | (PPP, SLIP). |
2477 | * §¬¥à ¤ ëå ¥ ¤®«¦¥ ¯à¥¢®á室¨âì 1500 ¡ ©â, |
2477 | * Размер данных не должен превосходить 1500 байт, |
2478 | å®âï ¯à®¢¥à®ª ª®à४â®á⨠¥ ¤¥« ¥âáï. |
2478 | хотя проверок корректности не делается. |
2479 | 2479 | ||
2480 | ====================================================================== |
2480 | ====================================================================== |
2481 | ====================== ãªæ¨ï 52, ¯®¤äãªæ¨ï 8 ====================== |
2481 | ====================== Функция 52, подфункция 8 ====================== |
2482 | ============= à®ç¨â âì ¤ ë¥ ¨§ á¥â¥¢®© ®ç¥à¥¤¨ ¢ë¢®¤ . ============ |
2482 | ============= Прочитать данные из сетевой очереди вывода. ============ |
2483 | ====================================================================== |
2483 | ====================================================================== |
2484 | à ¬¥âàë: |
2484 | Параметры: |
2485 | * eax = 52 - ®¬¥à äãªæ¨¨ |
2485 | * eax = 52 - номер функции |
Line 2486... | Line 2486... | ||
2486 | * ebx = 8 - ®¬¥à ¯®¤äãªæ¨¨ |
2486 | * ebx = 8 - номер подфункции |
2487 | * esi = 㪠§ â¥«ì ¡ãä¥à à §¬¥à®¬ 1500 ¡ ©â |
2487 | * esi = указатель на буфер размером 1500 байт |
2488 | ®§¢à é ¥¬®¥ § 票¥: |
2488 | Возвращаемое значение: |
2659 | 2659 | ||
2660 | ====================================================================== |
2660 | ====================================================================== |
2661 | ====== ãªæ¨ï 53, ¯®¤äãªæ¨ï 6 - ¯®«ãç¨âì á®áâ®ï¨¥ TCP-᮪¥â . ===== |
2661 | ====== Функция 53, подфункция 6 - получить состояние TCP-сокета. ===== |
2662 | ====================================================================== |
2662 | ====================================================================== |
2663 | à ¬¥âàë: |
2663 | Параметры: |
Line 2675... | Line 2675... | ||
2675 | * TCB_CLOSE_WAIT = 7 |
2675 | * TCB_CLOSE_WAIT = 7 |
2676 | * TCB_CLOSING = 8 |
2676 | * TCB_CLOSING = 8 |
2677 | * TCB_LAST_ASK = 9 |
2677 | * TCB_LAST_ASK = 9 |
2678 | * TCB_TIME_WAIT = 10 |
2678 | * TCB_TIME_WAIT = 10 |
2679 | * TCB_CLOSED = 11 |
2679 | * TCB_CLOSED = 11 |
2680 | * ebx à §àãè ¥âáï |
2680 | * ebx разрушается |
Line 2681... | Line 2681... | ||
2681 | 2681 | ||
2682 | ====================================================================== |
2682 | ====================================================================== |
2683 | ========== ãªæ¨ï 53, ¯®¤äãªæ¨ï 7 - § ¯¨á âì ¢ TCP-᮪¥â. ========== |
2683 | ========== Функция 53, подфункция 7 - записать в TCP-сокет. ========== |
2807 | ç áâ®â ®¯à¥¤¥«ï¥âáï ª ª 1193180/divider |
2807 | частота определяется как 1193180/divider |
2808 | * 0x81 = invalid |
2808 | * 0x81 = invalid |
2809 | * 0x82..0xFF = ®â , ®¯à¥¤¥«ï¥¬ ï ®ªâ ¢®© ¨ ®¬¥à®¬: |
2809 | * 0x82..0xFF = нота, определяемая октавой и номером: |
2810 | * ¤«¨â¥«ì®áâì ¢ á®âëå ¤®«ïå ᥪã¤ë = (¯¥à¢ë© ¡ ©â)-0x81 |
2810 | * длительность в сотых долях секунды = (первый байт)-0x81 |
2811 | * ¯à¨áãâáâ¢ã¥â ¥éñ ®¤¨ ¡ ©â; |
2811 | * присутствует ещё один байт; |
2812 | * (¢â®à®© ¡ ©â)=0xFF - ¯ 㧠|
2812 | * (второй байт)=0xFF - пауза |
2813 | * ¨ ç¥ ® ¨¬¥¥â ¢¨¤ a*0x10+b, £¤¥ b=®¬¥à ®âë ¢ ®ªâ ¢¥ ®â 1 |
2813 | * иначе он имеет вид a*0x10+b, где b=номер ноты в октаве от 1 |
2814 | ¤® 12, a=®¬¥à ®ªâ ¢ë (áç¨â ï á 0) |
2814 | до 12, a=номер октавы (считая с 0) |
2815 | ¬¥ç ¨ï: |
2815 | Замечания: |
2816 | * ¨é ¨¥ ᯨª¥à®¬ ¬®¦¥â ¡ëâì § ¯à¥é¥®/à §à¥è¥® ¯®¤äãªæ¨¥© 8 |
2816 | * Пищание спикером может быть запрещено/разрешено подфункцией 8 |
2817 | äãªæ¨¨ 18. |
2817 | функции 18. |
2818 | * ãªæ¨ï ¢®§¢à é ¥â ã¯à ¢«¥¨¥, á®®¡é¨¢ ªã¤ á«¥¤ã¥â ¨ä®à¬ æ¨î |
2818 | * Функция возвращает управление, сообщив куда следует информацию |
2819 | ® § ¯à®á¥. ¬® ¯à®¨£àë¢ ¨¥ ¨¤ñâ ¥§ ¢¨á¨¬® ®â ¯à®£à ¬¬ë. |
2819 | о запросе. Само проигрывание идёт независимо от программы. |
2820 | * ë¥ ¤®«¦ë á®åà ïâìáï ¢ ¯ ¬ï⨠¯® ªà ©¥© ¬¥à¥ |
2820 | * Данные должны сохраняться в памяти по крайней мере |
2821 | ¤® ª®æ ¯à®¨£àë¢ ¨ï. |
2821 | до конца проигрывания. |
2822 | 2822 | ||
2823 | ====================================================================== |
2823 | ====================================================================== |
2824 | ======================= ãªæ¨ï 57 - PCI BIOS. ======================= |
2824 | ======================= Функция 57 - PCI BIOS. ======================= |
2825 | ====================================================================== |
2825 | ====================================================================== |
2826 | à ¬¥âàë: |
2826 | Параметры: |
2827 | * eax = 57 - ®¬¥à äãªæ¨¨ |
2827 | * eax = 57 - номер функции |
2828 | * ebp ᮮ⢥âáâ¢ã¥â ॣ¨áâàã al ¢ ᯥæ¨ä¨ª 樨 PCI BIOS |
2828 | * ebp соответствует регистру al в спецификации PCI BIOS |
2829 | * ®áâ «ìë¥ à¥£¨áâàë - ¯® ᯥæ¨ä¨ª 樨 PCI BIOS |
2829 | * остальные регистры - по спецификации PCI BIOS |
2830 | ®§¢à é ¥¬®¥ § 票¥: |
2830 | Возвращаемое значение: |
2831 | * CF ¥ ®¯à¥¤¥«ñ |
2831 | * CF не определён |
2832 | * ®áâ «ìë¥ à¥£¨áâàë - ¯® ᯥæ¨ä¨ª 樨 PCI BIOS |
2832 | * остальные регистры - по спецификации PCI BIOS |
2833 | ¬¥ç ¨ï: |
2833 | Замечания: |
2834 | * ®£¨å १ã«ìâ ⮢ í⮩ äãªæ¨¨ ¬®¦® â ª¦¥ ¤®¡¨âìáï ¢ë§®¢®¬ |
2834 | * Многих результатов этой функции можно также добиться вызовом |
2835 | ᮮ⢥âáâ¢ãîé¨å ¯®¤äãªæ¨© äãªæ¨¨ 62. |
2835 | соответствующих подфункций функции 62. |
2836 | * ãªæ¨ï ¢ë§ë¢ ¥â à áè¨à¥¨¥ PCI32 BIOS, ¤®ªã¬¥â¨à®¢ ®¥, |
2836 | * Функция вызывает расширение PCI32 BIOS, документированное, |
2837 | ¯à¨¬¥à, ¢ http://alpha1.dyns.net/files/PCI/bios21.pdf. |
2837 | например, в http://alpha1.dyns.net/files/PCI/bios21.pdf. |
2838 | * ᫨ BIOS ¥ ¯®¤¤¥à¦¨¢ ¥â íâ® à áè¨à¥¨¥, ¯®¢¥¤¥¨¥ äãªæ¨¨ |
2838 | * Если BIOS не поддерживает это расширение, поведение функции |
Line 2839... | Line 2839... | ||
2839 | í¬ã«¨àã¥âáï (ç¥à¥§ «®£¨ ¯®¤äãªæ¨© äãªæ¨¨ 62 ०¨¬ ï¤à ). |
2839 | эмулируется (через аналоги подфункций функции 62 режима ядра). |
2840 | 2840 | ||
2841 | ====================================================================== |
2841 | ====================================================================== |
2842 | ============== ãªæ¨ï 58 - à ¡®â á ä ©«®¢®© á¨á⥬®©. ============== |
2842 | ============== Функция 58 - работа с файловой системой. ============== |
2843 | ====================================================================== |
2843 | ====================================================================== |
2844 | à ¬¥âàë: |
2844 | Параметры: |
2845 | * eax = 58 |
2845 | * eax = 58 |
2846 | * ebx = 㪠§ â¥«ì ¨ä®à¬ 樮ãî áâàãªâãàã |
2846 | * ebx = указатель на информационную структуру |
2847 | ®§¢à é ¥¬®¥ § 票¥: |
2847 | Возвращаемое значение: |
2848 | * eax = 0 - ãᯥè®; ¨ ç¥ ª®¤ ®è¨¡ª¨ ä ©«®¢®© á¨á⥬ë |
2848 | * eax = 0 - успешно; иначе код ошибки файловой системы |
2849 | * ¢ § ¢¨á¨¬®á⨠®â ¯®¤äãªæ¨¨ ¬®¦¥â ¢®§¢à é âìáï § 票¥ ¨ |
2849 | * в зависимости от подфункции может возвращаться значение и |
2850 | ¢ ¤à㣨å ॣ¨áâà å |
2850 | в других регистрах |
2851 | ¡é¨© ä®à¬ â ¨ä®à¬ 樮®© áâàãªâãàë: |
2851 | Общий формат информационной структуры: |
2852 | * +0: dword: ®¬¥à ¯®¤äãªæ¨¨ |
2852 | * +0: dword: номер подфункции |
2853 | * +4: dword: ®¬¥à ¡«®ª |
2853 | * +4: dword: номер блока |
2854 | * +8: dword: à §¬¥à |
2854 | * +8: dword: размер |
2855 | * +12 = +0xC: dword: 㪠§ â¥«ì ¤ ë¥ |
2855 | * +12 = +0xC: dword: указатель на данные |
2856 | * +16 = +0x10: dword: 㪠§ â¥«ì ¯ ¬ïâì ¤«ï à ¡®âë á¨á⥬ë |
2856 | * +16 = +0x10: dword: указатель на память для работы системы |
2857 | (4096 ¡ ©â) |
2857 | (4096 байт) |
2858 | * +20 = +0x14: n db: ASCIIZ-áâப á ¨¬¥¥¬ ä ©« |
2858 | * +20 = +0x14: n db: ASCIIZ-строка с именем файла |
2859 | â®ç¥¨ï - ¢ ¤®ªã¬¥â 樨 ᮮ⢥âáâ¢ãîéãî ¯®¤äãªæ¨î. |
2859 | Уточнения - в документации на соответствующую подфункцию. |
2860 | ¬ï ä ©« ¥çã¢áâ¢¨â¥«ì® ª ॣ¨áâàã « â¨áª¨å ¡ãª¢, |
2860 | Имя файла нечувствительно к регистру латинских букв, |
2861 | àãá᪨¥ ¡ãª¢ë ¤®«¦ë ¡ëâì § £« ¢ë¬¨. |
2861 | русские буквы должны быть заглавными. |
2862 | ®à¬ â ¨¬¥¨ ä ©« : |
2862 | Формат имени файла: |
2863 | /base/number/dir1/dir2/.../dirn/file, |
2863 | /base/number/dir1/dir2/.../dirn/file, |
2864 | £¤¥ /base/number ¨¤¥â¨ä¨æ¨àã¥â ãáâனá⢮, ª®â®à®¬ ¨é¥âáï ä ©«: |
2864 | где /base/number идентифицирует устройство, на котором ищется файл: |
2865 | ®¤® ¨§ |
2865 | одно из |
2866 | * /RD/1 = /RAMDISK/1 ¤«ï ¤®áâ㯠ª à ¬¤¨áªã |
2866 | * /RD/1 = /RAMDISK/1 для доступа к рамдиску |
2867 | * /FD/1 = /FLOPPYDISK/1 ¤«ï ¤®áâ㯠ª ¯¥à¢®¬ã ä«®¯¯¨-¤¨áª®¢®¤ã, |
2867 | * /FD/1 = /FLOPPYDISK/1 для доступа к первому флоппи-дисководу, |
2868 | /FD/2 = /FLOPPYDISK/2 ¤«ï ¢â®à®£® ä«®¯¯¨-¤¨áª®¢®¤ |
2868 | /FD/2 = /FLOPPYDISK/2 для второго флоппи-дисковода |
2869 | * /HD/x = /HARDDISK/x - ãáâ ॢ訩 ¢ ਠ⠤®áâ㯠ª ¦ñá⪮¬ã ¤¨áªã |
2869 | * /HD/x = /HARDDISK/x - устаревший вариант доступа к жёсткому диску |
2870 | (¢ í⮬ á«ãç ¥ ¡ § ®¯à¥¤¥«ï¥âáï ¯®¤äãªæ¨¥© 7 äãªæ¨¨ 21), |
2870 | (в этом случае база определяется подфункцией 7 функции 21), |
2871 | x - ®¬¥à à §¤¥« (áç¨â ï á 1) |
2871 | x - номер раздела (считая с 1) |
2872 | * /HD0/x, /HD1/x, /HD2/x, /HD3/x ¤«ï ¤®áâ㯠ᮮ⢥âá⢥® |
2872 | * /HD0/x, /HD1/x, /HD2/x, /HD3/x для доступа соответственно |
2873 | ª ãáâனá⢠¬ IDE0 (Primary Master), IDE1 (Primary Slave), |
2873 | к устройствам IDE0 (Primary Master), IDE1 (Primary Slave), |
2874 | IDE2 (Secondary Master), IDE3 (Secondary Slave); |
2874 | IDE2 (Secondary Master), IDE3 (Secondary Slave); |
2875 | x - ®¬¥à à §¤¥« ¢ë¡à ®¬ ¢¨ç¥áâ¥à¥, ¨§¬¥ï¥âáï ®â 1 ¤® 255 |
2875 | x - номер раздела на выбранном винчестере, изменяется от 1 до 255 |
2876 | ( ª ¦¤®¬ ¨§ ¢¨ç¥áâ¥à®¢ 㬥à æ¨ï ç¨ ¥âáï á 1) |
2876 | (на каждом из винчестеров нумерация начинается с 1) |
2877 | ¬¥ç ¨ï: |
2877 | Замечания: |
2878 | * ¯¥à¢ëå ¤¢ãå á«ãç ïå ¤®¯ã᪠¥âáï ¨á¯®«ì§®¢ ¨¥ FIRST ¢¬¥áâ® 1, |
2878 | * В первых двух случаях допускается использование FIRST вместо 1, |
2879 | SECOND ¢¬¥áâ® 2, ® ¨á¯®«ì§®¢ âì íâã ¢®§¬®¦®áâì |
2879 | SECOND вместо 2, но использовать эту возможность |
2880 | ¥ ४®¬¥¤ã¥âáï ¤«ï 㤮¡á⢠¯¥à¥å®¤ ¡ã¤ã騥 à áè¨à¥¨ï. |
2880 | не рекомендуется для удобства перехода на будущие расширения. |
2881 | * ª« ¤ë¢ ¥âáï ®£à ¨ç¥¨¥ n<=39. |
2881 | * Накладывается ограничение n<=39. |
2882 | * ¬¥ ¯ ¯®ª ¨ ä ©« dir1,...,dirn,file ¤®«¦ë ¡ëâì ¢ ä®à¬ ⥠8.3: |
2882 | * Имена папок и файла dir1,...,dirn,file должны быть в формате 8.3: |
2883 | ¨¬ï ¥ ¡®«¥¥ 8 ᨬ¢®«®¢, â®çª , à áè¨à¥¨¥ ¥ ¡®«¥¥ 3 ᨬ¢®«®¢. |
2883 | имя не более 8 символов, точка, расширение не более 3 символов. |
2884 | ¢®áâ®¢ë¥ ¯à®¡¥«ë ¨£®à¨àãîâáï. àã£¨å ¯à®¡¥«®¢ ¡ëâì ¥ ¤®«¦®. |
2884 | Хвостовые пробелы игнорируются. Других пробелов быть не должно. |
2885 | ᫨ ¨¬ï § ¨¬ ¥â ஢® 8 ᨬ¢®«®¢, â®çªã ¬®¦® ®¯ãáâ¨âì |
2885 | Если имя занимает ровно 8 символов, точку можно опустить |
2886 | (å®âï ¯®«ì§®¢ âìáï í⨬ ¥ ४®¬¥¤ã¥âáï ¤«ï 㤮¡á⢠¯¥à¥å®¤ |
2886 | (хотя пользоваться этим не рекомендуется для удобства перехода |
2887 | ¡ã¤ã騥 à áè¨à¥¨ï). |
2887 | на будущие расширения). |
2888 | * ãªæ¨ï ¥ ¯®¤¤¥à¦¨¢ ¥â ¯ ¯®ª à ¬¤¨áª¥. |
2888 | * Функция не поддерживает папок на рамдиске. |
2889 | ਬ¥àë: |
2889 | Примеры: |
2890 | * '/RAMDISK/FIRST/KERNEL.ASM',0 |
2890 | * '/RAMDISK/FIRST/KERNEL.ASM',0 |
2891 | '/rd/1/kernel.asm',0 |
2891 | '/rd/1/kernel.asm',0 |
2892 | * '/HD0/1/kernel.asm',0 |
2892 | * '/HD0/1/kernel.asm',0 |
2893 | * '/hd0/1/menuet/pics/tanzania.bmp',0 |
2893 | * '/hd0/1/menuet/pics/tanzania.bmp',0 |
2894 | ®áâã¯ë¥ ¯®¤äãªæ¨¨: |
2894 | Доступные подфункции: |
2895 | * ¯®¤äãªæ¨ï 0 - ç⥨¥ ä ©« /¯ ¯ª¨ |
2895 | * подфункция 0 - чтение файла/папки |
Line 2896... | Line 2896... | ||
2896 | * ¯®¤äãªæ¨ï 8 - LBA-ç⥨¥ á ãáâனá⢠|
2896 | * подфункция 8 - LBA-чтение с устройства |
2897 | * ¯®¤äãªæ¨ï 15 - ¯®«ã票¥ ¨ä®à¬ 樨 ® ä ©«®¢®© á¨á⥬¥ |
2897 | * подфункция 15 - получение информации о файловой системе |
2898 | 2898 | ||
2899 | ====================================================================== |
2899 | ====================================================================== |
2900 | ========== ãªæ¨ï 58, ¯®¤äãªæ¨ï 0 - ¯à®ç¨â âì ä ©«/¯ ¯ªã. ========== |
2900 | ========== Функция 58, подфункция 0 - прочитать файл/папку. ========== |
2901 | ====================================================================== |
2901 | ====================================================================== |
2902 | à ¬¥âàë: |
2902 | Параметры: |
2903 | * eax = 58 |
2903 | * eax = 58 |
2904 | * ebx = 㪠§ â¥«ì ¨ä®à¬ 樮ãî áâàãªâãàã |
2904 | * ebx = указатель на информационную структуру |
2905 | ®à¬ â ¨ä®à¬ 樮®© áâàãªâãàë: |
2905 | Формат информационной структуры: |
2906 | * +0: dword: 0 = ®¬¥à ¯®¤äãªæ¨¨ |
2906 | * +0: dword: 0 = номер подфункции |
2907 | * +4: dword: ®¬¥à ¡«®ª ¤«ï ç⥨ï (áç¨â ï á 0) |
2907 | * +4: dword: номер блока для чтения (считая с 0) |
2908 | * +8: dword: ç¨á«® ¡«®ª®¢ ¤«ï ç⥨ï |
2908 | * +8: dword: число блоков для чтения |
2909 | * +12 = +0xC: dword: 㪠§ â¥«ì ¡ãä¥à, ªã¤ ¡ã¤ãâ § ¯¨á ë ¤ ë¥ |
2909 | * +12 = +0xC: dword: указатель на буфер, куда будут записаны данные |
2910 | * +16 = +0x10: dword: 㪠§ â¥«ì ¡ãä¥à ¤«ï à ¡®âë á¨á⥬ë |
2910 | * +16 = +0x10: dword: указатель на буфер для работы системы |
2911 | (4096 ¡ ©â) |
2911 | (4096 байт) |
2912 | * +20 = +0x14: ASCIIZ-¨¬ï ä ©« , ¯à ¢¨« ä®à¬¨à®¢ ¨ï ¨¬ñ 㪠§ ë ¢ |
2912 | * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в |
2913 | ®¡é¥¬ ®¯¨á ¨¨ |
2913 | общем описании |
2914 | ®§¢à é ¥¬®¥ § 票¥: |
2914 | Возвращаемое значение: |
2915 | * eax = 0 - ãᯥè®, ¨ ç¥ ª®¤ ®è¨¡ª¨ ä ©«®¢®© á¨á⥬ë |
2915 | * eax = 0 - успешно, иначе код ошибки файловой системы |
2916 | * ebx = à §¬¥à ä ©« (¢ ¡ ©â å) ¨«¨ |
2916 | * ebx = размер файла (в байтах) или |
2917 | -1=0xffffffff, ¥á«¨ ä ©« ¥ ©¤¥ |
2917 | -1=0xffffffff, если файл не найден |
2918 | ¬¥ç ¨ï: |
2918 | Замечания: |
2919 | * §¬¥à ¡«®ª - 512 ¡ ©â. |
2919 | * Размер блока - 512 байт. |
2920 | * â äãªæ¨ï ãáâ ५ , ¤«ï ç⥨ï ä ©«®¢ ¨á¯®«ì§ã©â¥ ¯®¤äãªæ¨î 0 |
2920 | * Эта функция устарела, для чтения файлов используйте подфункцию 0 |
2921 | äãªæ¨¨ 70, ¤«ï çâ¥¨ï ¯ ¯®ª - ¯®¤äãªæ¨î 1 äãªæ¨¨ 70. |
2921 | функции 70, для чтения папок - подфункцию 1 функции 70. |
2922 | * ãªæ¨ï ¯®§¢®«ï¥â ç¨â âì ᮤ¥à¦¨¬®¥ ¯ ¯ª¨. § ä ©«®¢ëå á¨á⥬ |
2922 | * Функция позволяет читать содержимое папки. Из файловых систем |
2923 | ¯®¤¤¥à¦¨¢ ¥âáï ⮫쪮 FAT. ®à¬ â FAT-¯ ¯ª¨ ®¯¨á ¢ «î¡®© |
2923 | поддерживается только FAT. Формат FAT-папки описан в любой |
2924 | ¤®ªã¬¥â 樨 ¯® FAT. |
2924 | документации по FAT. |
2925 | * §¬¥à ¯ ¯ª¨ ®¯à¥¤¥«ï¥âáï ¯® à §¬¥àã 楯®çª¨ ª« áâ¥à®¢ ¢ FAT. |
2925 | * Размер папки определяется по размеру цепочки кластеров в FAT. |
2926 | * ᫨ ä ©« ª®ç¨«áï à ìè¥, 祬 ¡ë« ¯à®ç¨â ¯®á«¥¤¨© § ¯à®è¥ë© |
2926 | * Если файл кончился раньше, чем был прочитан последний запрошенный |
2927 | ¡«®ª, â® äãªæ¨ï ¯à®ç¨â ¥â, ᪮«ìª® ᬮ¦¥â, ¯®á«¥ 祣® ¢¥àñâ |
2927 | блок, то функция прочитает, сколько сможет, после чего вернёт |
2928 | eax=6 (EOF). |
2928 | eax=6 (EOF). |
2929 | * ãªæ¨ï ¯®§¢®«ï¥â ç¨â âì ª®à¥¢ë¥ ¯ ¯ª¨ /rd/1,/fd/x,/hd[n]/x, ® |
2929 | * Функция позволяет читать корневые папки /rd/1,/fd/x,/hd[n]/x, но |
2930 | ¢ ¯¥à¢ëå ¤¢ãå á«ãç ïå ⥪ãé ï ॠ«¨§ æ¨ï ¥ á«¥¤ã¥â |
2930 | в первых двух случаях текущая реализация не следует |
2931 | ãáâ ®¢«¥ë¬ ¯à ¢¨« ¬: |
2931 | установленным правилам: |
2932 | ¤«ï /rd/1: |
2932 | для /rd/1: |
2933 | * ¥á«¨ 㪠§ ® 0 ¡«®ª®¢ ¤«ï ç⥨ï, áç¨â ¥âáï, |
2933 | * если указано 0 блоков для чтения, считается, |
2934 | çâ® § ¯à 訢 ¥âáï 1; |
2934 | что запрашивается 1; |
2935 | * ¥á«¨ § ¯à 訢 ¥âáï ¡®«ìè¥ 14 ¡«®ª®¢ ¨«¨ ç «ìë© ¡«®ª |
2935 | * если запрашивается больше 14 блоков или начальный блок |
2936 | ¥ ¬¥ìè¥ 14-£®, â® ¢®§¢à é ¥âáï eax=5 (not found) ¨ ebx=-1; |
2936 | не меньше 14-го, то возвращается eax=5 (not found) и ebx=-1; |
2937 | * à §¬¥à ª®à¥¢®£® ª â «®£ à ¬¤¨áª = 14 ¡«®ª®¢, |
2937 | * размер корневого каталога рамдиска = 14 блоков, |
2938 | 0x1C00=7168 ¡ ©â; ® ¢®§¢à é ¥âáï ebx=0 |
2938 | 0x1C00=7168 байт; но возвращается ebx=0 |
2939 | (§ ¨áª«î票¥¬ á«ãç ï ¯à¥¤ë¤ã饣® ¯ãªâ ); |
2939 | (за исключением случая предыдущего пункта); |
2940 | * ª ª ¨ áâà ®, ¬®¦® ¯à®ç¨â âì 14-© ¡«®ª (â ¬, ¢®®¡é¥ £®¢®àï, |
2940 | * как ни странно, можно прочитать 14-й блок (там, вообще говоря, |
2941 | ¬ãá®à - ¯®¬¨ î, áçñâ ¢¥¤ñâáï á 0); |
2941 | мусор - напоминаю, счёт ведётся с 0); |
2942 | * ¥á«¨ ¡ë« § ¯à®è¥ å®âï ¡ë ®¤¨ ¡«®ª á ®¬¥à®¬, ¥ ¬¥ì訬 14, |
2942 | * если был запрошен хотя бы один блок с номером, не меньшим 14, |
2943 | â® ¢®§¢à é ¥âáï eax=6(EOF); ¨ ç¥ eax=0. |
2943 | то возвращается eax=6(EOF); иначе eax=0. |
2944 | «ï /fd/x: |
2944 | Для /fd/x: |
2945 | * ¥á«¨ ç «ìë© ¡«®ª ¥ ¬¥ìè¥ 14-£®, â® ¢®§¢à é ¥âáï |
2945 | * если начальный блок не меньше 14-го, то возвращается |
2946 | eax=5 (not found) ¨ ebx=0; |
2946 | eax=5 (not found) и ebx=0; |
2947 | * ªáâ ⨠£®¢®àï, ä®à¬ â FAT12 ¤®¯ã᪠¥â ¤¨áª¥âë á à §¬¥à®¬ |
2947 | * кстати говоря, формат FAT12 допускает дискеты с размером |
2948 | ª®à¥¢®£® ª â «®£ ¬¥ìè¥ ¨«¨ ¡®«ìè¥ 14 ¡«®ª®¢; |
2948 | корневого каталога меньше или больше 14 блоков; |
2949 | * ¯à®¢¥àª¨ ¤«¨ë ¥ ¤¥« ¥âáï; |
2949 | * проверки длины не делается; |
2950 | * ¥á«¨ 㤠«®áì ¯à®ç¨â âì ¤ ë¥ á ¤¨áª¥âë, ¢®§¢à é ¥âáï |
2950 | * если удалось прочитать данные с дискеты, возвращается |
2951 | eax=0,ebx=0; ¢ ¯à®â¨¢®¬ á«ãç ¥ eax=10 (access denied), ebx=-1. |
2951 | eax=0,ebx=0; в противном случае eax=10 (access denied), ebx=-1. |
2952 | * ãªæ¨ï ®¡à ¡ âë¢ ¥â ç⥨¥ á¯¥æ¨ «ìëå ¯ ¯®ª /,/rd,/fd,/hd[n]; |
2952 | * Функция обрабатывает чтение специальных папок /,/rd,/fd,/hd[n]; |
2953 | ® १ã«ìâ â ¥ ᮮ⢥âáâ¢ã¥â ®¦¨¤ ¥¬®¬ã |
2953 | но результат не соответствует ожидаемому |
2954 | (¯® à ¡®â¥ á ®¡ëç묨 ä ©« ¬¨/¯ ¯ª ¬¨), ¥ á«¥¤ã¥â ãáâ ®¢«¥ë¬ |
2954 | (по работе с обычными файлами/папками), не следует установленным |
2955 | ¯à ¢¨« ¬, ¬®¦¥â ¨§¬¥¨âìáï ¢ á«¥¤ãîé¨å ¢¥àá¨ïå ï¤à ¨ ¯®â®¬ã |
2955 | правилам, может измениться в следующих версиях ядра и потому |
2956 | ¥ ®¯¨áë¢ ¥âáï. «ï ¯®«ãç¥¨ï ¨ä®à¬ 樨 ®¡ ®¡®à㤮¢ ¨¨ |
2956 | не описывается. Для получения информации об оборудовании |
2957 | ¨á¯®«ì§ã©â¥ ¯®¤äãªæ¨î 11 äãªæ¨¨ 18 ¨«¨ |
2957 | используйте подфункцию 11 функции 18 или |
2958 | ç¨â ©â¥ ᮮ⢥âáâ¢ãî騥 ¯ ¯ª¨ ¯®¤äãªæ¨¥© 1 äãªæ¨¨ 70. |
2958 | читайте соответствующие папки подфункцией 1 функции 70. |
2959 | 2959 | ||
2960 | ====================================================================== |
2960 | ====================================================================== |
2961 | ========= ãªæ¨ï 58, ¯®¤äãªæ¨ï 8 - LBA-ç⥨¥ á ãáâனá⢠. ======== |
2961 | ========= Функция 58, подфункция 8 - LBA-чтение с устройства. ======== |
2962 | ====================================================================== |
2962 | ====================================================================== |
2963 | à ¬¥âàë: |
2963 | Параметры: |
2964 | * eax = 58 - ®¬¥à äãªæ¨¨ |
2964 | * eax = 58 - номер функции |
2965 | * ebx = 㪠§ â¥«ì ¨ä®à¬ 樮ãî áâàãªâãàã |
2965 | * ebx = указатель на информационную структуру |
2966 | ®à¬ â ¨ä®à¬ 樮®© áâàãªâãàë: |
2966 | Формат информационной структуры: |
2967 | * +0: dword: 8 = ®¬¥à ¯®¤äãªæ¨¨ |
2967 | * +0: dword: 8 = номер подфункции |
2968 | * +4: dword: ®¬¥à ¡«®ª ¤«ï ç⥨ï (áç¨â ï á 0) |
2968 | * +4: dword: номер блока для чтения (считая с 0) |
2969 | * +8: dword: ¨£®à¨àã¥âáï (ãáâ ¢«¨¢ ©â¥ ¢ 1) |
2969 | * +8: dword: игнорируется (устанавливайте в 1) |
2970 | * +12 = +0xC: dword: 㪠§ â¥«ì ¡ãä¥à, ªã¤ ¡ã¤ãâ § ¯¨á ë ¤ ë¥ |
2970 | * +12 = +0xC: dword: указатель на буфер, куда будут записаны данные |
2971 | (512 ¡ ©â) |
2971 | (512 байт) |
2972 | * +16 = +0x10: dword: 㪠§ â¥«ì ¡ãä¥à ¤«ï à ¡®âë á¨á⥬ë |
2972 | * +16 = +0x10: dword: указатель на буфер для работы системы |
2973 | (4096 ¡ ©â) |
2973 | (4096 байт) |
2974 | * +20 = +0x14: ASCIIZ-¨¬ï ãáâனá⢠: ¥çã¢áâ¢¨â¥«ì® ª ॣ¨áâàã, |
2974 | * +20 = +0x14: ASCIIZ-имя устройства: нечувствительно к регистру, |
2975 | ®¤® ¨§ /rd/1 = /RamDisk/1, /hd/n = /HardDisk/n, |
2975 | одно из /rd/1 = /RamDisk/1, /hd/n = /HardDisk/n, |
2976 | 1<=n<=4 - ®¬¥à ãáâனá⢠: 1=IDE0, ..., 4=IDE3. |
2976 | 1<=n<=4 - номер устройства: 1=IDE0, ..., 4=IDE3. |
2977 | ¬¥áâ® æ¨äà ¤®¯ã᪠¥âáï, å®âï ¨ ¥ ४®¬¥¤ã¥âáï ¤«ï 㤮¡á⢠|
2977 | Вместо цифр допускается, хотя и не рекомендуется для удобства |
2978 | ¯¥à¥å®¤ ¡ã¤ã騥 à áè¨à¥¨ï, |
2978 | перехода на будущие расширения, |
2979 | ¨á¯®«ì§®¢ ¨¥ 'first','second','third','fourth'. |
2979 | использование 'first','second','third','fourth'. |
2980 | ®§¢à é ¥¬®¥ § 票¥: |
2980 | Возвращаемое значение: |
2981 | * ¥á«¨ 㪠§ ® ¨¬ï ãáâனá⢠/hd/xxx, £¤¥ xxx ¥ 室¨âáï |
2981 | * если указано имя устройства /hd/xxx, где xxx не находится |
2982 | ¢ ᯨ᪥ ¢ëè¥: |
2982 | в списке выше: |
2983 | * eax = ebx = 1 |
2983 | * eax = ebx = 1 |
2984 | * ¥á«¨ 㪠§ ® ¥¯à ¢¨«ì®¥ ¨¬ï ãáâனá⢠|
2984 | * если указано неправильное имя устройства |
2985 | (§ ¨áª«î票¥¬ ¯à¥¤ë¤ã饣® á«ãç ï): |
2985 | (за исключением предыдущего случая): |
2986 | * eax = 5 |
2986 | * eax = 5 |
2987 | * ebx ¥ ¬¥ï¥âáï |
2987 | * ebx не меняется |
2988 | * ¥á«¨ LBA-¤®áâ㯠§ ¯à¥éñ ¯®¤äãªæ¨¥© 11 äãªæ¨¨ 21: |
2988 | * если LBA-доступ запрещён подфункцией 11 функции 21: |
2989 | * eax = 2 |
2989 | * eax = 2 |
2990 | * ebx à §àãè ¥âáï |
2990 | * ebx разрушается |
2991 | * ¤«ï à ¬¤¨áª : ¯®¯ë⪠çâ¥¨ï ¡«®ª § ¯à¥¤¥« ¬¨ à ¬¤¨áª |
2991 | * для рамдиска: попытка чтения блока за пределами рамдиска |
2992 | (18*2*80 ¡«®ª®¢) ¯à¨¢®¤¨â ª |
2992 | (18*2*80 блоков) приводит к |
2993 | * eax = 3 |
2993 | * eax = 3 |
2994 | * ebx = 0 |
2994 | * ebx = 0 |
2995 | * ¯à¨ ãᯥ讬 ç⥨¨: |
2995 | * при успешном чтении: |
2996 | * eax = ebx = 0 |
2996 | * eax = ebx = 0 |
2997 | ¬¥ç ¨ï: |
2997 | Замечания: |
2998 | * §¬¥à ¡«®ª - 512 ¡ ©â; ç¨â ¥âáï ®¤¨ ¡«®ª. |
2998 | * Размер блока - 512 байт; читается один блок. |
2999 | * ¥ á«¥¤ã¥â ¯®« £ âìáï ¢®§¢à é ¥¬®¥ § 票¥, |
2999 | * Не следует полагаться на возвращаемое значение, |
3000 | ®® ¬®¦¥â ¨§¬¥¨âìáï ¢ á«¥¤ãîé¨å ¢¥àá¨ïå. |
3000 | оно может измениться в следующих версиях. |
3001 | * ॡã¥âáï, çâ®¡ë ¡ë« à §à¥èñ LBA-¤®áâ㯠ª ãáâனá⢠¬ |
3001 | * Требуется, чтобы был разрешён LBA-доступ к устройствам |
3002 | ¯®¤äãªæ¨¥© 11 äãªæ¨¨ 21. § âì íâ® ¬®¦® ¢ë§®¢®¬ |
3002 | подфункцией 11 функции 21. Узнать это можно вызовом |
3003 | ¯®¤äãªæ¨¥© 11 äãªæ¨¨ 26. |
3003 | подфункцией 11 функции 26. |
3004 | * LBA-ç⥨¥ ¤¨áª¥âë ¥ ¯®¤¤¥à¦¨¢ ¥âáï. |
3004 | * LBA-чтение дискеты не поддерживается. |
3005 | * ãªæ¨ï áç¨âë¢ ¥â ¤ ë¥ ä¨§¨ç¥áª®£® ¦ñá⪮£® ¤¨áª ; |
3005 | * Функция считывает данные физического жёсткого диска; |
3006 | ¥á«¨ ¯® ª ª¨¬-â® ¯à¨ç¨ ¬ ã¦ë ¤ ë¥ ª®ªà¥â®£® à §¤¥« , |
3006 | если по каким-то причинам нужны данные конкретного раздела, |
3007 | ¯à¨¤ñâáï ®¯à¥¤¥«ïâì ç «ìë© á¥ªâ®à í⮣® à §¤¥« |
3007 | придётся определять начальный сектор этого раздела |
3008 | («¨¡® ¯àï¬ãî ç¥à¥§ MBR, «¨¡® ¨§ à áè¨à¥®© áâàãªâãàë, |
3008 | (либо напрямую через MBR, либо из расширенной структуры, |
3009 | ¢®§¢à é ¥¬®© ⮩ ¦¥ ¯®¤äãªæ¨¥© 11 äãªæ¨¨ 18). |
3009 | возвращаемой той же подфункцией 11 функции 18). |
3010 | * ãªæ¨ï ¥ ¯à®¢¥àï¥â ª®¤ ®è¨¡ª¨ ¦ñá⪮£® ¤¨áª , â ª çâ® § ¯à®á |
3010 | * Функция не проверяет код ошибки жёсткого диска, так что запрос |
3011 | ¥áãé¥áâ¢ãî饣® ᥪâ®à ¢áñ à ¢® çâ®-â® ¯à®ç¨â ¥â |
3011 | несуществующего сектора всё равно что-то прочитает |
3012 | (¢¥à®ï⥥ ¢á¥£®, 㫨, ® íâ® ®¯à¥¤¥«ï¥âáï ãáâனá⢮¬) ¨ |
3012 | (вероятнее всего, нули, но это определяется устройством) и |
3013 | íâ® ¡ã¤¥â áç¨â âìáï ãᯥ宬 (eax=0). |
3013 | это будет считаться успехом (eax=0). |
3014 | 3014 | ||
3015 | ====================================================================== |
3015 | ====================================================================== |
3016 | = ãªæ¨ï 58, ¯®¤äãªæ¨ï 15 - ¯®«ãç¨âì ¨ä®à¬ æ¨î ® ä ©«®¢®© á¨á⥬¥. |
3016 | = Функция 58, подфункция 15 - получить информацию о файловой системе. |
3017 | ====================================================================== |
3017 | ====================================================================== |
3018 | à ¬¥âàë: |
3018 | Параметры: |
3019 | * eax = 58 - ®¬¥à äãªæ¨¨ |
3019 | * eax = 58 - номер функции |
3020 | * ebx = 㪠§ â¥«ì ¨ä®à¬ 樮ãî áâàãªâãàã |
3020 | * ebx = указатель на информационную структуру |
3021 | ®à¬ â ¨ä®à¬ 樮®© áâàãªâãàë: |
3021 | Формат информационной структуры: |
3022 | * +0: dword: 15 = ®¬¥à ¯®¤äãªæ¨¨ |
3022 | * +0: dword: 15 = номер подфункции |
3023 | * +4: dword: ¨£®à¨àã¥âáï |
3023 | * +4: dword: игнорируется |
3024 | * +8: dword: ¨£®à¨àã¥âáï |
3024 | * +8: dword: игнорируется |
3025 | * +12 = +0xC: dword: ¨£®à¨àã¥âáï |
3025 | * +12 = +0xC: dword: игнорируется |
3026 | * +16 = +0x10: dword: ¨£®à¨àã¥âáï |
3026 | * +16 = +0x10: dword: игнорируется |
3027 | * +20 = +0x14: (¯à®¢¥àï¥âáï ⮫쪮 ¢â®à®© ᨬ¢®«, áà §ã ¯®á«¥ á«íè ) |
3027 | * +20 = +0x14: (проверяется только второй символ, сразу после слэша) |
3028 | /rd=/RAMDISK ¨«¨ /hd=/HARDDISK |
3028 | /rd=/RAMDISK или /hd=/HARDDISK |
3029 | ®§¢à é ¥¬®¥ § 票¥: |
3029 | Возвращаемое значение: |
3030 | * ¥á«¨ ¢â®à®© ᨬ¢®« ¥ ¯à¨ ¤«¥¦¨â ¬®¦¥áâ¢ã {'r','R','h','H'}: |
3030 | * если второй символ не принадлежит множеству {'r','R','h','H'}: |
3031 | * eax = 3 |
3031 | * eax = 3 |
3032 | * ebx = ecx = dword [fileinfo] = 0 |
3032 | * ebx = ecx = dword [fileinfo] = 0 |
3033 | * ¤«ï à ¬¤¨áª : |
3033 | * для рамдиска: |
3034 | * eax = 0 (ãᯥå) |
3034 | * eax = 0 (успех) |
3035 | * ebx = ®¡é¥¥ ç¨á«® ª« áâ¥à®¢ = 2847 |
3035 | * ebx = общее число кластеров = 2847 |
3036 | * ecx = ç¨á«® ᢮¡®¤ëå ª« áâ¥à®¢ |
3036 | * ecx = число свободных кластеров |
3037 | * dword [fileinfo] = à §¬¥à ª« áâ¥à = 512 |
3037 | * dword [fileinfo] = размер кластера = 512 |
3038 | * ¤«ï ¦ñá⪮£® ¤¨áª : ¡ § ¨ à §¤¥« ®¯à¥¤¥«ïîâáï ¯®¤äãªæ¨ï¬¨ 7 ¨ 8 |
3038 | * для жёсткого диска: база и раздел определяются подфункциями 7 и 8 |
3039 | äãªæ¨¨ 21: |
3039 | функции 21: |
3040 | * eax = 0 (ãᯥå) |
3040 | * eax = 0 (успех) |
3041 | * ebx = ®¡é¥¥ ç¨á«® ª« áâ¥à®¢ |
3041 | * ebx = общее число кластеров |
3042 | * ecx = ç¨á«® ᢮¡®¤ëå ª« áâ¥à®¢ |
3042 | * ecx = число свободных кластеров |
3043 | * dword [fileinfo] = à §¬¥à ª« áâ¥à (¢ ¡ ©â å) |
3043 | * dword [fileinfo] = размер кластера (в байтах) |
3044 | ¬¥ç ¨ï: |
3044 | Замечания: |
3045 | * ¥ 㤨¢«ï©â¥áì áâà ®¬ã à ᯮ«®¦¥¨î 4-£® ¢®§¢à é ¥¬®£® |
3045 | * Не удивляйтесь странному расположению 4-го возвращаемого |
3046 | ¯ à ¬¥âà - ª®£¤ ¯¨á «áï íâ®â ª®¤, ¯à¨ á¨á⥬ëå ¢ë§®¢ å |
3046 | параметра - когда писался этот код, при системных вызовах |
3047 | ¯à¨«®¦¥¨î ¢®§¢à é «¨áì ⮫쪮 ॣ¨áâàë eax,ebx,ecx (¨§ |
3047 | приложению возвращались только регистры eax,ebx,ecx (из |
3048 | pushad-áâàãªâãàë, ¯¥à¥¤ î饩áï ª ª à£ã¬¥â á¨á⥬®© äãªæ¨¨). |
3048 | pushad-структуры, передающейся как аргумент системной функции). |
3049 | ¥¯¥àì íâ® ¨á¯à ¢«¥®, â ª çâ®, ¢®§¬®¦®, ¨¬¥¥â á¬ëá« ¢®§¢à é âì |
3049 | Теперь это исправлено, так что, возможно, имеет смысл возвращать |
3050 | à §¬¥à ª« áâ¥à ¢ edx, ¯®ª íâã äãªæ¨î ¥ ç «¨ ¨á¯®«ì§®¢ âì. |
3050 | размер кластера в edx, пока эту функцию не начали использовать. |
3051 | * ®®¡é¥-â® ¥éñ áãé¥áâ¢ã¥â ¯®¤äãªæ¨ï 11 äãªæ¨¨ 18, ¢®§¢à é îé ï |
3051 | * Вообще-то ещё существует подфункция 11 функции 18, возвращающая |
3052 | ¨ä®à¬ æ¨î ® ä ©«®¢®© á¨á⥬¥. ® à áè¨à¥®© â ¡«¨æ¥ ¤¨áª®¢®© |
3052 | информацию о файловой системе. По расширенной таблице дисковой |
3053 | ¯®¤á¨áâ¥¬ë ¬®¦® ®¯à¥¤¥«¨âì à §¬¥à ª« áâ¥à (â ¬ ® åà ¨âáï |
3053 | подсистемы можно определить размер кластера (там он хранится |
3054 | ¢ ᥪâ®à å) ¨ ®¡é¥¥ ç¨á«® ª« áâ¥à®¢ ¤«ï ¦ñáâª¨å ¤¨áª®¢. |
3054 | в секторах) и общее число кластеров для жёстких дисков. |
3055 | 3055 | ||
3056 | ====================================================================== |
3056 | ====================================================================== |
3057 | =========== ãªæ¨ï 60 - Inter Process Communication (IPC). ========== |
3057 | =========== Функция 60 - Inter Process Communication (IPC). ========== |
3058 | ====================================================================== |
3058 | ====================================================================== |
3059 | IPC ¯à¨¬¥ï¥âáï ¤«ï ¯®áë«®ª á®®¡é¥¨© ®â ®¤®£® ¯à®æ¥áá /¯®â®ª |
3059 | IPC применяется для посылок сообщений от одного процесса/потока |
3060 | ¤à㣮¬ã. ਠí⮬ á«¥¤ã¥â ¯à¥¤¢ à¨â¥«ì® ¤®£®¢®à¨âìáï ® ⮬, ª ª |
3060 | другому. При этом следует предварительно договориться о том, как |
3061 | ¨â¥à¯à¥â¨à®¢ âì ª®ªà¥â®¥ á®®¡é¥¨¥. |
3061 | интерпретировать конкретное сообщение. |
3062 | 3062 | ||
3063 | -------- ®¤äãªæ¨ï 1 - ãáâ ®¢¨âì ®¡« áâì ¤«ï ¯®«ã票ï IPC --------- |
3063 | -------- Подфункция 1 - установить область для получения IPC --------- |
3064 | ë§ë¢ ¥âáï ¯à®æ¥áᮬ-¯à¨ñ¬¨ª®¬. |
3064 | Вызывается процессом-приёмником. |
3065 | à ¬¥âàë: |
3065 | Параметры: |
3066 | * eax = 60 - ®¬¥à äãªæ¨¨ |
3066 | * eax = 60 - номер функции |
3067 | * ebx = 1 - ®¬¥à ¯®¤äãªæ¨¨ |
3067 | * ebx = 1 - номер подфункции |
3068 | * ecx = 㪠§ â¥«ì ¡ãä¥à |
3068 | * ecx = указатель на буфер |
3069 | * edx = à §¬¥à ¡ãä¥à |
3069 | * edx = размер буфера |
3070 | ®§¢à é ¥¬®¥ § 票¥: |
3070 | Возвращаемое значение: |
3071 | * eax = 0 - ¢á¥£¤ ãá¯¥è® |
3071 | * eax = 0 - всегда успешно |
3072 | ®à¬ â IPC-¡ãä¥à : |
3072 | Формат IPC-буфера: |
3073 | * +0: dword: ¥á«¨ §¤¥áì ¥ 0, â® ¡ãä¥à áç¨â ¥âáï § ¡«®ª¨à®¢ ë¬; |
3073 | * +0: dword: если здесь не 0, то буфер считается заблокированным; |
3074 | ¡«®ª¨àã©â¥/à §¡«®ª¨àã©â¥ ¡ãä¥à, ª®£¤ ¢ë á ¨¬ ªâ¨¢® à ¡®â ¥â¥ |
3074 | блокируйте/разблокируйте буфер, когда вы с ним активно работаете |
3075 | ¨ ¢ ¬ ¤®, çâ®¡ë ¨§¢¥ ¥ ¨§¬¥ï«¨áì ¤ ë¥ ¡ãä¥à |
3075 | и вам надо, чтобы извне не изменялись данные буфера |
3076 | (¥ ¯®áâ㯠«¨ ®¢ë¥ á®®¡é¥¨ï) |
3076 | (не поступали новые сообщения) |
3077 | * +4: dword: § ïâ® ¬¥áâ ¢ ¡ãä¥à¥ (¢ ¡ ©â å) |
3077 | * +4: dword: занято места в буфере (в байтах) |
3078 | * +8: ¯¥à¢®¥ á®®¡é¥¨¥ |
3078 | * +8: первое сообщение |
3079 | * +8+n: ¢â®à®¥ á®®¡é¥¨¥ |
3079 | * +8+n: второе сообщение |
3080 | * ... |
3080 | * ... |
3081 | ®à¬ â á®®¡é¥¨ï: |
3081 | Формат сообщения: |
3082 | * +0: dword: PID ¯à®æ¥áá /¯®â®ª , ¯®á« ¢è¥£® á®®¡é¥¨¥ |
3082 | * +0: dword: PID процесса/потока, пославшего сообщение |
3083 | * +4: dword: ¤«¨ á®®¡é¥¨ï (¥ áç¨â ï íâ®â § £®«®¢®ª) |
3083 | * +4: dword: длина сообщения (не считая этот заголовок) |
3084 | * +8: n*byte: ¤ ë¥ á®®¡é¥¨ï |
3084 | * +8: n*byte: данные сообщения |
3085 | 3085 | ||
3086 | --------------- ®¤äãªæ¨ï 2 - ¯®á« âì á®®¡é¥¨¥ IPC. ---------------- |
3086 | --------------- Подфункция 2 - послать сообщение IPC. ---------------- |
3087 | ë§ë¢ ¥âáï ¯à®æ¥áᮬ-¨¨æ¨ â®à®¬. |
3087 | Вызывается процессом-инициатором. |
3088 | à ¬¥âàë: |
3088 | Параметры: |
3089 | * eax = 60 - ®¬¥à äãªæ¨¨ |
3089 | * eax = 60 - номер функции |
3090 | * ebx = 2 - ®¬¥à ¯®¤äãªæ¨¨ |
3090 | * ebx = 2 - номер подфункции |
3091 | * ecx = PID ¯à¨ñ¬¨ª |
3091 | * ecx = PID приёмника |
3092 | * edx = 㪠§ â¥«ì ¤ ë¥ á®®¡é¥¨ï |
3092 | * edx = указатель на данные сообщения |
3093 | * esi = ¤«¨ á®®¡é¥¨ï (¢ ¡ ©â å) |
3093 | * esi = длина сообщения (в байтах) |
3094 | ®§¢à é ¥¬®¥ § 票¥: |
3094 | Возвращаемое значение: |
3095 | * eax = 0 - ãá¯¥è® |
3095 | * eax = 0 - успешно |
3096 | * eax = 1 - ¯à¨ñ¬¨ª ¥ ®¯à¥¤¥«¨« ¡ãä¥à ¤«ï IPC-á®®¡é¥¨© |
3096 | * eax = 1 - приёмник не определил буфер для IPC-сообщений |
3097 | (¬®¦¥â ¡ëâì, ¥éñ ¥ ãᯥ«, ¬®¦¥â ¡ëâì, íâ® ¥ â®â ¯®â®ª, |
3097 | (может быть, ещё не успел, а может быть, это не тот поток, |
3098 | ª®â®àë© ã¦¥) |
3098 | который нужен) |
3099 | * eax = 2 - ¯à¨ñ¬¨ª § ¡«®ª¨à®¢ « IPC-¡ãä¥à; |
3099 | * eax = 2 - приёмник заблокировал IPC-буфер; |
3100 | ¯®¯à®¡ã©â¥ ¥¬®£® ¯®¤®¦¤ âì |
3100 | попробуйте немного подождать |
3101 | * eax = 3 - ¯¥à¥¯®«¥¨¥ IPC-¡ãä¥à ¯à¨ñ¬¨ª |
3101 | * eax = 3 - переполнение IPC-буфера приёмника |
3102 | * eax = 4 - ¯à®æ¥áá /¯®â®ª á â ª¨¬ PID ¥ áãé¥áâ¢ã¥â |
3102 | * eax = 4 - процесса/потока с таким PID не существует |
3103 | ¬¥ç ¨ï: |
3103 | Замечания: |
3104 | * ¨á⥬ áà §ã ¯®á«¥ § ¯¨á¨ IPC-á®®¡é¥¨ï ¢ ¡ãä¥à ¯®áë« ¥â |
3104 | * Система сразу после записи IPC-сообщения в буфер посылает |
3105 | ¯®â®ªã-¯à¨ñ¬¨ªã ᮡë⨥ á ª®¤®¬ 7 (á¬. ª®¤ë ᮡë⨩). |
3105 | потоку-приёмнику событие с кодом 7 (см. коды событий). |
3106 | 3106 | ||
3107 | ====================================================================== |
3107 | ====================================================================== |
3108 | === ãªæ¨ï 61 - ¯®«ãç¨âì ¯ à ¬¥âàë ¤«ï ¯àאַ£® ¤®áâ㯠ª £à 䨪¥. === |
3108 | === Функция 61 - получить параметры для прямого доступа к графике. === |
3109 | ====================================================================== |
3109 | ====================================================================== |
3110 | à®£à ¬¬¥ ¤®áâã¯ë ¤ ë¥ £à ä¨ç¥áª®£® íªà (®¡« áâì ¯ ¬ïâ¨, ª®â®à ï |
3110 | Программе доступны данные графического экрана (область памяти, которая |
3111 | ᮡá⢥® ¨ ®â®¡à ¦ ¥â ᮤ¥à¦¨¬®¥ íªà ) ¯àï¬ãî ¡¥§ ¢ë§®¢®¢ |
3111 | собственно и отображает содержимое экрана) напрямую без вызовов |
3112 | á¨á⥬ëå äãªæ¨© ç¥à¥§ ᥫ¥ªâ®à gs: |
3112 | системных функций через селектор gs: |
3113 | mov eax, [gs:0] |
3113 | mov eax, [gs:0] |
3240 | * ¥ª®â®àë¥ à¥£¨áâàë áâ ¤ àâë ¨ áãé¥áâ¢ãîâ ¤«ï ¢á¥å ãáâனáâ¢, |
3240 | * Некоторые регистры стандартны и существуют для всех устройств, |
3241 | ¥ª®â®àë¥ ®¯à¥¤¥«ïîâáï ª®ªà¥âë¬ ãáâனá⢮¬. ¯¨á®ª ¯¥à¢ëå |
3241 | некоторые определяются конкретным устройством. Список первых |
3242 | ¢å®¤¨â, ¯à¨¬¥à, ¢ ¨§¢¥áâë© Interrupt List by Ralf Brown |
3242 | входит, например, в известный Interrupt List by Ralf Brown |
Line 3243... | Line 3243... | ||
3243 | (http://www.pobox.com/~ralf/files.html, |
3243 | (http://www.pobox.com/~ralf/files.html, |
3244 | ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/); |
3244 | ftp://ftp.cs.cmu.edu/afs/cs/user/ralf/pub/); |
3245 | ᯨ᮪ ¢â®àëå ¤®«¦¥ ¡ëâì 㪠§ ¢ ¤®ªã¬¥â 樨 ¯® ãáâனáâ¢ã. |
3245 | список вторых должен быть указан в документации по устройству. |
3382 | á®áâ ¢«ïî騥 梥â . |
3382 | составляющие цвета. |
Line 3383... | Line 3383... | ||
3383 | * ®à¬ â ¨§®¡à ¦¥¨ï á 32 ¡¨â ¬¨ ¯¨ªá¥«ì: «®£¨ç® 24, ⮫쪮 |
3383 | * Формат изображения с 32 битами на пиксель: аналогично 24, только |
3384 | ¥áâì ¥éñ ¨£®à¨àã¥¬ë© ç¥â¢ñàâë© ¡ ©â. |
3384 | есть ещё игнорируемый четвёртый байт. |
3385 | * 맮¢ äãªæ¨¨ 7 íª¢¨¢ «¥â¥ ¢ë§®¢ã í⮩ äãªæ¨¨ á ¯ à ¬¥âà ¬¨ |
3385 | * Вызов функции 7 эквивалентен вызову этой функции с параметрами |
3386 | esi=24, ebp=0. |
3386 | esi=24, ebp=0. |
3387 | 3387 | ||
Line 3548... | Line 3548... | ||
3548 | ====================================================================== |
3548 | ====================================================================== |
3549 | à ¬¥âàë: |
3549 | Параметры: |
3550 | * eax = 68 - ®¬¥à äãªæ¨¨ |
3550 | * eax = 68 - номер функции |
3551 | * ebx = 2 - ®¬¥à ¯®¤äãªæ¨¨ |
3551 | * ebx = 2 - номер подфункции |
3552 | * ecx = âॡ㥬®¥ ¤¥©á⢨¥: |
3552 | * ecx = требуемое действие: |
3553 | * ecx = 0 - à §à¥è¨âì ¢ë¯®«¥¨¥ ¨áâàãªæ¨¨ rdpmc |
3553 | * ecx = 0 - разрешить выполнение инструкции rdpmc |
3554 | (ReaD Performance-Monitoring Counters) |
3554 | (ReaD Performance-Monitoring Counters) |
3555 | * ecx = 1 - 㧠âì, ¢ª«îçñ/¢ëª«îç¥ ªíè |
3555 | * ecx = 1 - узнать, включён/выключен кэш |
3556 | * ecx = 2 - ¢ª«îç¨âì ªíè |
3556 | * ecx = 2 - включить кэш |
3557 | * ecx = 3 - ¢ëª«îç¨âì ªíè |
3557 | * ecx = 3 - выключить кэш |
3558 | ®§¢à é ¥¬®¥ § 票¥: |
3558 | Возвращаемое значение: |
3559 | * ¤«ï ecx=0: |
3559 | * для ecx=0: |
3560 | * eax = § 票¥ cr4 |
3560 | * eax = значение cr4 |
Line 3561... | Line 3561... | ||
3561 | * ¤«ï ecx=1: |
3561 | * для ecx=1: |
3562 | * eax = (cr0 and 0x60000000): |
3562 | * eax = (cr0 and 0x60000000): |
3563 | * eax = 0 - ªíè ¢ª«îçñ |
3563 | * eax = 0 - кэш включён |
3564 | * eax <> 0 - ªíè ¢ëª«îç¥ |
3564 | * eax <> 0 - кэш выключен |
3565 | * ¤«ï ecx=2 ¨ ecx=3: |
3565 | * для ecx=2 и ecx=3: |
3566 | * äãªæ¨ï ¥ ¢®§¢à é ¥â § 票ï |
3566 | * функция не возвращает значения |
3567 | 3567 | ||
3568 | ====================================================================== |
3568 | ====================================================================== |
3569 | ========== ãªæ¨ï 68, ¯®¤äãªæ¨ï 3 - ¯à®ç¨â âì MSR-ॣ¨áâà. ========= |
3569 | ========== Функция 68, подфункция 3 - прочитать MSR-регистр. ========= |
3570 | ====================================================================== |
3570 | ====================================================================== |
3571 | MSR = Model Specific Register; ¯®«ë© ᯨ᮪ MSR-ॣ¨áâ஢ ¯à®æ¥áá®à |
3571 | MSR = Model Specific Register; полный список MSR-регистров процессора |
3572 | ᮤ¥à¦¨âáï ¢ ¤®ªã¬¥â 樨 ¯® ¯à®æ¥áá®àã ( ¯à¨¬¥à, IA-32 Intel |
3572 | содержится в документации по процессору (например, IA-32 Intel |
3573 | Architecture Software Developer's Manual, Volume 3, Appendix B); |
3573 | Architecture Software Developer's Manual, Volume 3, Appendix B); |
3574 | ª ¦¤®¥ ᥬ¥©á⢮ ¯à®æ¥áá®à®¢ ¨¬¥¥â ᢮ñ ¯®¤¬®¦¥á⢮ MSR-ॣ¨áâ஢. |
3574 | каждое семейство процессоров имеет своё подмножество MSR-регистров. |
3575 | à ¬¥âàë: |
3575 | Параметры: |
3576 | * eax = 68 - ®¬¥à äãªæ¨¨ |
3576 | * eax = 68 - номер функции |
3577 | * ebx = 3 - ®¬¥à ¯®¤äãªæ¨¨ |
3577 | * ebx = 3 - номер подфункции |
3578 | * ecx ¨£®à¨àã¥âáï |
3578 | * ecx игнорируется |
3579 | * edx = ¤à¥á MSR |
3579 | * edx = адрес MSR |
3580 | ®§¢à é ¥¬®¥ § 票¥: |
3580 | Возвращаемое значение: |
Line 3581... | Line 3581... | ||
3581 | * ebx:eax = áâ à訩:¬« ¤è¨© dword १ã«ìâ â |
3581 | * ebx:eax = старший:младший dword результата |
3582 | ¬¥ç ¨ï: |
3582 | Замечания: |
3583 | * ª § ¨¥ ¢ ecx ¥áãé¥áâ¢ãî饣® ¨«¨ ¥à¥ «¨§®¢ ®£® ¤«ï ¤ ®£® |
3583 | * Указание в ecx несуществующего или нереализованного для данного |
3584 | ¯à®æ¥áá®à MSR ¯®¢«¥çñ⠨᪫î票¥ ¢ ï¤à¥, ª®â®à®¥ ¯à¨¡ìñâ ¯®â®ª. |
3584 | процессора MSR повлечёт исключение в ядре, которое прибьёт поток. |
3585 | * ।¢ à¨â¥«ì® á«¥¤ã¥â ®¯à¥¤¥«¨âì, ¯®¤¤¥à¦¨¢ îâáï «¨ MSR ¢ 楫®¬, |
3585 | * Предварительно следует определить, поддерживаются ли MSR в целом, |
3586 | ª®¬ ¤®© cpuid. ç¥ ¢®§¨ª¥â 㦥 ¤à㣮¥ ¨áª«î票¥ ¢ ï¤à¥, |
3586 | командой cpuid. Иначе возникнет уже другое исключение в ядре, |
3782 | * SHM_WRITE = 0x01 - ¤®áâ㯠ç⥨¥ ¨ § ¯¨áì |
3782 | * SHM_WRITE = 0x01 - доступ на чтение и запись |
3783 | ®§¢à é ¥¬®¥ § 票¥: |
3783 | Возвращаемое значение: |
3784 | * eax = 㪠§ â¥«ì ®¡« áâì ¯ ¬ïâ¨, 0 ¯à¨ ®è¨¡ª¥ |
3784 | * eax = указатель на область памяти, 0 при ошибке |
3785 | * ¯à¨ ᮧ¤ ¨¨ ®¢®© ®¡« á⨠(SHM_CREATE ¨«¨ SHM_OPEN_ALWAYS): |
3785 | * при создании новой области (SHM_CREATE или SHM_OPEN_ALWAYS): |
3924 | * +8: N*byte: ¡ãä¥à |
3924 | * +8: N*byte: буфер |
3925 | ®§¢à é ¥¬®¥ § 票¥: |
3925 | Возвращаемое значение: |
3926 | * äãªæ¨ï ¥ ¢®§¢à é ¥â § 票ï |
3926 | * функция не возвращает значения |
Line 3927... | Line 3927... | ||
3927 | ¬¥ç ¨ï: |
3927 | Замечания: |
3928 | * ᫨ ¯®«¥ à §¬¥à ®âà¨æ ⥫ì®, ¡ãä¥à áç¨â ¥âáï § ¡«®ª¨à®¢ ë¬ |
3928 | * Если поле размера отрицательно, буфер считается заблокированным |
3929 | ¨ ¯à¨ ¯®áâ㯫¥¨¨ ®¢®£® á®®¡é¥¨ï á¨á⥬ ¡ã¤¥â ¦¤ âì. |
3929 | и при поступлении нового сообщения система будет ждать. |
3930 | «ï á¨åந§ 樨 ®¡à ¬«ï©â¥ ¢áî à ¡®âã á ¡ãä¥à®¬ ®¯¥à æ¨ï¬¨ |
3930 | Для синхронизации обрамляйте всю работу с буфером операциями |
3931 | ¡«®ª¨à®¢ª¨/à §¡«®ª¨à®¢ª¨ |
3931 | блокировки/разблокировки |
3932 | neg [bufsize] |
3932 | neg [bufsize] |
3933 | * ë¥ ¢ ¡ãä¥à¥ âà ªâãîâáï ª ª ¬ áᨢ í«¥¬¥â®¢ ¯¥à¥¬¥®© ¤«¨ë - |
3933 | * Данные в буфере трактуются как массив элементов переменной длины - |
3934 | á®®¡é¥¨©. ®à¬ â á®®¡é¥¨ï 㪠§ ¢ ®¡é¥¬ ®¯¨á ¨¨. |
3934 | сообщений. Формат сообщения указан в общем описании. |
3935 | 3935 | ||
3936 | ====================================================================== |
3936 | ====================================================================== |
3937 | ====================== ãªæ¨ï 69, ¯®¤äãªæ¨ï 1 ====================== |
3937 | ====================== Функция 69, подфункция 1 ====================== |
3938 | ========= ®«ãç¨âì á®áâ®ï¨¥ ॣ¨áâ஢ ®â« ¦¨¢ ¥¬®£® ¯®â®ª . ========= |
3938 | ========= Получить состояние регистров отлаживаемого потока. ========= |
3939 | ====================================================================== |
3939 | ====================================================================== |
3940 | à ¬¥âàë: |
3940 | Параметры: |
3941 | * eax = 69 - ®¬¥à äãªæ¨¨ |
3941 | * eax = 69 - номер функции |
3942 | * ebx = 1 - ®¬¥à ¯®¤äãªæ¨¨ |
3942 | * ebx = 1 - номер подфункции |
3943 | * ecx = ¨¤¥â¨ä¨ª â®à ¯®â®ª |
3943 | * ecx = идентификатор потока |
3944 | * edx = ¤«¨ áâàãªâãàë ª®â¥ªáâ , ¤®«¦® ¡ëâì 0x28=40 ¡ ©â |
3944 | * edx = длина структуры контекста, должно быть 0x28=40 байт |
3945 | * esi = 㪠§ ⥫ì áâàãªâãàã ª®â¥ªáâ |
3945 | * esi = указатель на структуру контекста |
3946 | ®§¢à é ¥¬®¥ § 票¥: |
3946 | Возвращаемое значение: |
3947 | * äãªæ¨ï ¥ ¢®§¢à é ¥â § 票ï |
3947 | * функция не возвращает значения |
3948 | ®à¬ â áâàãªâãàë ª®â¥ªáâ : (FPU ¯®ª ¥ ¯®¤¤¥à¦¨¢ ¥âáï) |
3948 | Формат структуры контекста: (FPU пока не поддерживается) |
3949 | * +0: dword: eip |
3949 | * +0: dword: eip |
Line 4109... | Line 4109... | ||
4109 | * ¯¯ à âë¥ â®çª¨ ®áâ ®¢ ॠ«¨§ãîâáï ç¥à¥§ DRx-ॣ¨áâàë |
4109 | * Аппаратные точки останова реализуются через DRx-регистры |
4110 | ¯à®æ¥áá®à , ®âáî¤ ¢á¥ ®£à ¨ç¥¨ï. |
4110 | процессора, отсюда все ограничения. |
4111 | * ãªæ¨ï ¬®¦¥â ¯¥à¥ãáâ ®¢¨âì à ¥¥ ãáâ ®¢«¥ãî ¥© ¦¥ |
4111 | * Функция может переустановить ранее установленную ей же |
4112 | â®çªã ®áâ ®¢ (¨ª ª ¥ á®®¡é ï ®¡ í⮬). |
4112 | точку останова (никак не сообщая об этом). |
4113 | ¥¤¨â¥ ᯨ᮪ ãáâ ®¢«¥ëå â®ç¥ª ®áâ ®¢ ¢ ®â« ¤ç¨ª¥. |
4113 | Ведите список установленных точек останова в отладчике. |
4114 | * à ¡ âë¢ ¨¥ â®çª¨ ®áâ ®¢ § ª«îç ¥âáï ¢ £¥¥à¨à®¢ ¨¨ |
4114 | * Срабатывание точки останова заключается в генерировании |
4115 | ®â« ¤®ç®£® ¨áª«î票ï #DB, ® ª®â®à®¬ á¨á⥬ á®®¡é ¥â ®â« ¤ç¨ªã. |
4115 | отладочного исключения #DB, о котором система сообщает отладчику. |
4116 | * ®çª ®áâ ®¢ § ¯¨áì ¨ ç⥨¥/§ ¯¨áì áà ¡ âë¢ ¥â ¯®á«¥ |
4116 | * Точка останова на запись и чтение/запись срабатывает после |
4117 | ¢ë¯®«¥¨ï ¢ë§¢ ¢è¥© ¥ñ ¨áâàãªæ¨¨. |
4117 | выполнения вызвавшей её инструкции. |
4118 | 4118 | ||
4119 | ====================================================================== |
4119 | ====================================================================== |
4120 | = ãªæ¨ï 70 - à ¡®â á ä ©«®¢®© á¨á⥬®© á ¯®¤¤¥à¦ª®© ¤«¨ëå ¨¬ñ. = |
4120 | = Функция 70 - работа с файловой системой с поддержкой длинных имён. = |
4121 | ====================================================================== |
4121 | ====================================================================== |
4122 | à ¬¥âàë: |
4122 | Параметры: |
4123 | * eax = 70 |
4123 | * eax = 70 |
4124 | * ebx = 㪠§ â¥«ì ¨ä®à¬ 樮ãî áâàãªâãàã |
4124 | * ebx = указатель на информационную структуру |
4125 | ®§¢à é ¥¬®¥ § 票¥: |
4125 | Возвращаемое значение: |
4126 | * eax = 0 - ãᯥè®; ¨ ç¥ ª®¤ ®è¨¡ª¨ ä ©«®¢®© á¨á⥬ë |
4126 | * eax = 0 - успешно; иначе код ошибки файловой системы |
4127 | * ¢ § ¢¨á¨¬®á⨠®â ¯®¤äãªæ¨¨ ¬®¦¥â ¢®§¢à é âìáï § 票¥ ¨ |
4127 | * в зависимости от подфункции может возвращаться значение и |
4128 | ¢ ¤à㣨å ॣ¨áâà å |
4128 | в других регистрах |
4129 | ¡é¨© ä®à¬ â ¨ä®à¬ 樮®© áâàãªâãàë: |
4129 | Общий формат информационной структуры: |
4130 | * +0: dword: ®¬¥à ¯®¤äãªæ¨¨ |
4130 | * +0: dword: номер подфункции |
4131 | * +4: dword: ᬥ饨¥ ¢ ä ©«¥ |
4131 | * +4: dword: смещение в файле |
4132 | * +8: dword: áâ à訩 dword ᬥ饨ï (¤®«¦¥ ¡ëâì 0) ¨«¨ ¯®«¥ ä« £®¢ |
4132 | * +8: dword: старший dword смещения (должен быть 0) или поле флагов |
4133 | * +12 = +0xC: dword: à §¬¥à |
4133 | * +12 = +0xC: dword: размер |
4134 | * +16 = +0x10: dword: 㪠§ â¥«ì ¤ ë¥ |
4134 | * +16 = +0x10: dword: указатель на данные |
4135 | * +20 = +0x14: n db: ASCIIZ-áâப á ¨¬¥¥¬ ä ©« |
4135 | * +20 = +0x14: n db: ASCIIZ-строка с именем файла |
4136 | ¨«¨ |
4136 | или |
4137 | * +20 = +0x14: db 0 |
4137 | * +20 = +0x14: db 0 |
4138 | * +21 = +0x15: dd 㪠§ ⥫ì ASCIIZ-áâபã á ¨¬¥¥¬ ä ©« |
4138 | * +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла |
4139 | â®ç¥¨ï - ¢ ¤®ªã¬¥â 樨 ᮮ⢥âáâ¢ãîéãî ¯®¤äãªæ¨î. |
4139 | Уточнения - в документации на соответствующую подфункцию. |
4140 | ¬ï ä ©« ¥çã¢áâ¢¨â¥«ì® ª ॣ¨áâà㠡㪢. ãá᪨¥ ¡ãª¢ë ¤®«¦ë ¡ëâì |
4140 | Имя файла нечувствительно к регистру букв. Русские буквы должны быть |
4141 | § ¯¨á ë ¢ ª®¤¨à®¢ª¥ cp866 (DOS). |
4141 | записаны в кодировке cp866 (DOS). |
4142 | ®à¬ â ¨¬¥¨ ä ©« : |
4142 | Формат имени файла: |
4143 | /base/number/dir1/dir2/.../dirn/file, |
4143 | /base/number/dir1/dir2/.../dirn/file, |
4144 | £¤¥ /base/number ¨¤¥â¨ä¨æ¨àã¥â ãáâனá⢮, ª®â®à®¬ ¨é¥âáï ä ©«: |
4144 | где /base/number идентифицирует устройство, на котором ищется файл: |
4145 | ®¤® ¨§ |
4145 | одно из |
4146 | * /RD/1 = /RAMDISK/1 ¤«ï ¤®áâ㯠ª à ¬¤¨áªã |
4146 | * /RD/1 = /RAMDISK/1 для доступа к рамдиску |
4147 | * /FD/1 = /FLOPPYDISK/1 ¤«ï ¤®áâ㯠ª ¯¥à¢®¬ã ä«®¯¯¨-¤¨áª®¢®¤ã, |
4147 | * /FD/1 = /FLOPPYDISK/1 для доступа к первому флоппи-дисководу, |
4148 | /FD/2 = /FLOPPYDISK/2 ¤«ï ¢â®à®£® ä«®¯¯¨-¤¨áª®¢®¤ |
4148 | /FD/2 = /FLOPPYDISK/2 для второго флоппи-дисковода |
4149 | * /HD0/x, /HD1/x, /HD2/x, /HD3/x ¤«ï ¤®áâ㯠ᮮ⢥âá⢥® |
4149 | * /HD0/x, /HD1/x, /HD2/x, /HD3/x для доступа соответственно |
4150 | ª ¦ñá⪨¬ ¤¨áª ¬ IDE0 (Primary Master), IDE1 (Primary Slave), |
4150 | к жёстким дискам на IDE0 (Primary Master), IDE1 (Primary Slave), |
4151 | IDE2 (Secondary Master), IDE3 (Secondary Slave); |
4151 | IDE2 (Secondary Master), IDE3 (Secondary Slave); |
4152 | x - ®¬¥à à §¤¥« ¢ë¡à ®¬ ¢¨ç¥áâ¥à¥, ¨§¬¥ï¥âáï ®â 1 ¤® 255 |
4152 | x - номер раздела на выбранном винчестере, изменяется от 1 до 255 |
4153 | ( ª ¦¤®¬ ¨§ ¢¨ç¥áâ¥à®¢ 㬥à æ¨ï ç¨ ¥âáï á 1) |
4153 | (на каждом из винчестеров нумерация начинается с 1) |
4154 | * /CD0/1, /CD1/1, /CD2/1, /CD3/1 ¤«ï ¤®áâ㯠ᮮ⢥âá⢥® |
4154 | * /CD0/1, /CD1/1, /CD2/1, /CD3/1 для доступа соответственно |
4155 | ª CD IDE0 (Primary Master), IDE1 (Primary Slave), |
4155 | к CD на IDE0 (Primary Master), IDE1 (Primary Slave), |
4156 | IDE2 (Secondary Master), IDE3 (Secondary Slave) |
4156 | IDE2 (Secondary Master), IDE3 (Secondary Slave) |
4157 | * /SYS - ®¯à¥¤¥«ï¥â á¨á⥬ãî ¯ ¯ªã; ¯à¨ ®¡ë箩 § £à㧪¥ á¨á⥬ë |
4157 | * /SYS - определяет системную папку; при обычной загрузке системы |
4158 | á ¤¨áª¥âë íª¢¨¢ «¥â® /RD/1 |
4158 | с дискеты эквивалентно /RD/1 |
4159 | ਬ¥àë: |
4159 | Примеры: |
4160 | * '/rd/1/kernel.asm',0 |
4160 | * '/rd/1/kernel.asm',0 |
4161 | * '/HD0/1/kernel.asm',0 |
4161 | * '/HD0/1/kernel.asm',0 |
4162 | * '/hd0/2/menuet/pics/tanzania.bmp',0 |
4162 | * '/hd0/2/menuet/pics/tanzania.bmp',0 |
4163 | * '/hd0/1/Program files/NameOfProgram/SomeFile.SomeExtension',0 |
4163 | * '/hd0/1/Program files/NameOfProgram/SomeFile.SomeExtension',0 |
4164 | * '/sys/MySuperApp.ini',0 |
4164 | * '/sys/MySuperApp.ini',0 |
4165 | ª¦¥ äãªæ¨ï ¯®¤¤¥à¦¨¢ ¥â ®â®á¨â¥«ìë¥ ¨¬¥ . ᫨ ¯ãâì ç¨ ¥âáï |
4165 | Также функция поддерживает относительные имена. Если путь начинается |
4166 | ¥ á '/', â® ® áç¨â ¥âáï ®â®á¨â¥«ì® ⥪ã饩 ¯ ¯ª¨. ®«ãç¨âì ¨«¨ |
4166 | не с '/', то он считается относительно текущей папки. Получить или |
4167 | ãáâ ®¢¨âì ⥪ãéãî ¯ ¯ªã ¬®¦® á ¯®¬®éìî á¨áäãªæ¨¨ 30. |
4167 | установить текущую папку можно с помощью сисфункции 30. |
4168 | 4168 | ||
4169 | ®áâã¯ë¥ ¯®¤äãªæ¨¨: |
4169 | Доступные подфункции: |
4170 | * ¯®¤äãªæ¨ï 0 - ç⥨¥ ä ©« |
4170 | * подфункция 0 - чтение файла |
4171 | * ¯®¤äãªæ¨ï 1 - ç⥨¥ ¯ ¯ª¨ |
4171 | * подфункция 1 - чтение папки |
4172 | * ¯®¤äãªæ¨ï 2 - ᮧ¤ ¨¥/¯¥à¥§ ¯¨áì ä ©« |
4172 | * подфункция 2 - создание/перезапись файла |
4173 | * ¯®¤äãªæ¨ï 3 - § ¯¨áì ¢ áãé¥áâ¢ãî騩 ä ©« |
4173 | * подфункция 3 - запись в существующий файл |
4174 | * ¯®¤äãªæ¨ï 4 - ãáâ ®¢ª à §¬¥à ä ©« |
4174 | * подфункция 4 - установка размера файла |
4175 | * ¯®¤äãªæ¨ï 5 - ¯®«ã票¥ âਡã⮢ ä ©« /¯ ¯ª¨ |
4175 | * подфункция 5 - получение атрибутов файла/папки |
4176 | * ¯®¤äãªæ¨ï 6 - ãáâ ®¢ª âਡã⮢ ä ©« /¯ ¯ª¨ |
4176 | * подфункция 6 - установка атрибутов файла/папки |
4177 | * ¯®¤äãªæ¨ï 7 - § ¯ã᪠¯à®£à ¬¬ë |
4177 | * подфункция 7 - запуск программы |
4178 | * ¯®¤äãªæ¨ï 8 - 㤠«¥¨¥ ä ©« /¯ ¯ª¨ |
4178 | * подфункция 8 - удаление файла/папки |
4179 | * ¯®¤äãªæ¨ï 9 - ᮧ¤ ¨¥ ¯ ¯ª¨ |
4179 | * подфункция 9 - создание папки |
4180 | «ï CD-¯à¨¢®¤®¢ ¢ á¢ï§¨ á ¯¯ à â묨 ®£à ¨ç¥¨ï¬¨ ¤®áâã¯ë |
4180 | Для CD-приводов в связи с аппаратными ограничениями доступны |
4181 | ⮫쪮 ¯®¤äãªæ¨¨ 0,1,5 ¨ 7, ¢ë§®¢ ¤àã£¨å ¯®¤äãªæ¨© § ¢¥àè¨âáï |
4181 | только подфункции 0,1,5 и 7, вызов других подфункций завершится |
4182 | ®è¨¡ª®© á ª®¤®¬ 2. |
4182 | ошибкой с кодом 2. |
4183 | ਠ¯¥à¢®¬ ®¡à 饨¨ ¯®¤äãªæ¨© 0,1,5,7 ª ãáâனá⢠¬ ATAPI |
4183 | При первом обращении подфункций 0,1,5,7 к устройствам ATAPI |
4184 | (CD ¨ DVD) ¯à®¨§¢®¤¨âáï ¡«®ª¨à®¢ª àã箣® ã¯à ¢«¥¨ï ¬¥å ¨§¬®¬ |
4184 | (CD и DVD) производится блокировка ручного управления механизмом |
4185 | «®âª . â® á¢ï§ ® á ªíè¨à®¢ ¨¥¬ ¤ ëå, ¯®«ãç¥ëå ®â ¯à¨¢®¤ . |
4185 | лотка. Это связано с кэшированием данных, полученных от привода. |
4186 | §¡«®ª¨à®¢ª ®áãé¥á⢫ï¥âáï ¯à¨ ®¡à 饨¨ ¯®¤äãªæ¨¨ 4 äãªæ¨¨ 24 |
4186 | Разблокировка осуществляется при обращении подфункции 4 функции 24 |
4187 | ª ᮮ⢥âáâ¢ãî饬ã ãáâனáâ¢ã. |
4187 | к соответствующему устройству. |
4188 | 4188 | ||
4189 | ====================================================================== |
4189 | ====================================================================== |
4190 | = ãªæ¨ï 70, ¯®¤äãªæ¨ï 0 - ç⥨¥ ä ©« á ¯®¤¤¥à¦ª®© ¤«¨ëå ¨¬ñ. = |
4190 | = Функция 70, подфункция 0 - чтение файла с поддержкой длинных имён. = |
4191 | ====================================================================== |
4191 | ====================================================================== |
4192 | à ¬¥âàë: |
4192 | Параметры: |
4193 | * eax = 70 - ®¬¥à äãªæ¨¨ |
4193 | * eax = 70 - номер функции |
4194 | * ebx = 㪠§ â¥«ì ¨ä®à¬ 樮ãî áâàãªâãàã |
4194 | * ebx = указатель на информационную структуру |
4195 | ®à¬ â ¨ä®à¬ 樮®© áâàãªâãàë: |
4195 | Формат информационной структуры: |
4196 | * +0: dword: 0 = ®¬¥à ¯®¤äãªæ¨¨ |
4196 | * +0: dword: 0 = номер подфункции |
4197 | * +4: dword: ¯®§¨æ¨ï ¢ ä ©«¥ (¢ ¡ ©â å) |
4197 | * +4: dword: позиция в файле (в байтах) |
4198 | * +8: dword: 0 (§ १¥à¢¨à®¢ ® ¯®¤ áâ à訩 dword ¯®§¨æ¨¨) |
4198 | * +8: dword: 0 (зарезервировано под старший dword позиции) |
4199 | * +12 = +0xC: dword: ᪮«ìª® ¡ ©â ç¨â âì |
4199 | * +12 = +0xC: dword: сколько байт читать |
4200 | * +16 = +0x10: dword: 㪠§ â¥«ì ¡ãä¥à, ªã¤ ¡ã¤ãâ § ¯¨á ë ¤ ë¥ |
4200 | * +16 = +0x10: dword: указатель на буфер, куда будут записаны данные |
4201 | * +20 = +0x14: ASCIIZ-¨¬ï ä ©« , ¯à ¢¨« ä®à¬¨à®¢ ¨ï ¨¬ñ 㪠§ ë ¢ |
4201 | * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в |
4202 | ®¡é¥¬ ®¯¨á ¨¨ |
4202 | общем описании |
4203 | ¨«¨ |
4203 | или |
4204 | * +20 = +0x14: db 0 |
4204 | * +20 = +0x14: db 0 |
4205 | * +21 = +0x15: dd 㪠§ ⥫ì ASCIIZ-áâபã á ¨¬¥¥¬ ä ©« |
4205 | * +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла |
Line 4206... | Line 4206... | ||
4206 | ®§¢à é ¥¬®¥ § 票¥: |
4206 | Возвращаемое значение: |
4207 | * eax = 0 - ãᯥè®, ¨ ç¥ ª®¤ ®è¨¡ª¨ ä ©«®¢®© á¨á⥬ë |
4207 | * eax = 0 - успешно, иначе код ошибки файловой системы |
4208 | * ebx = ç¨á«® ¯à®ç¨â ëå ¡ ©â ¨«¨ |
4208 | * ebx = число прочитанных байт или |
4209 | -1=0xffffffff, ¥á«¨ ä ©« ¥ ©¤¥ |
4209 | -1=0xffffffff, если файл не найден |
4210 | ¬¥ç ¨ï: |
4210 | Замечания: |
4211 | * ᫨ ä ©« ª®ç¨«áï à ìè¥, 祬 ¡ë« ¯à®ç¨â ¯®á«¥¤¨© § ¯à®è¥ë© |
4211 | * Если файл кончился раньше, чем был прочитан последний запрошенный |
4212 | ¡«®ª, â® äãªæ¨ï ¯à®ç¨â ¥â, ᪮«ìª® ᬮ¦¥â, ¯®á«¥ 祣® ¢¥àñâ |
4212 | блок, то функция прочитает, сколько сможет, после чего вернёт |
4213 | eax=6 (EOF). |
4213 | eax=6 (EOF). |
4214 | * ãªæ¨ï ¥ ¯®§¢®«ï¥â ç¨â âì ¯ ¯ª¨ |
4214 | * Функция не позволяет читать папки |
4215 | (¢¥àñâáï eax=10, access denied). |
4215 | (вернётся eax=10, access denied). |
4216 | 4216 | ||
4217 | ====================================================================== |
4217 | ====================================================================== |
4218 | = ãªæ¨ï 70, ¯®¤äãªæ¨ï 1 - ç⥨¥ ¯ ¯ª¨ á ¯®¤¤¥à¦ª®© ¤«¨ëå ¨¬ñ. = |
4218 | = Функция 70, подфункция 1 - чтение папки с поддержкой длинных имён. = |
4219 | ====================================================================== |
4219 | ====================================================================== |
4220 | à ¬¥âàë: |
4220 | Параметры: |
4221 | * eax = 70 - ®¬¥à äãªæ¨¨ |
4221 | * eax = 70 - номер функции |
4222 | * ebx = 㪠§ â¥«ì ¨ä®à¬ 樮ãî áâàãªâãàã |
4222 | * ebx = указатель на информационную структуру |
4223 | ®à¬ â ¨ä®à¬ 樮®© áâàãªâãàë: |
4223 | Формат информационной структуры: |
4224 | * +0: dword: 1 = ®¬¥à ¯®¤äãªæ¨¨ |
4224 | * +0: dword: 1 = номер подфункции |
4225 | * +4: dword: ¨¤¥ªá ç «ì®£® ¡«®ª (áç¨â ï á 0) |
4225 | * +4: dword: индекс начального блока (считая с 0) |
4226 | * +8: dword: ¯®«¥ ä« £®¢: |
4226 | * +8: dword: поле флагов: |
4227 | * ¡¨â 0 (¬ ᪠1): ¢ ª ª®¬ ä®à¬ ⥠¢®§¢à é âì ¨¬¥ , |
4227 | * бит 0 (маска 1): в каком формате возвращать имена, |
4228 | 0=ANSI, 1=UNICODE |
4228 | 0=ANSI, 1=UNICODE |
4229 | * ¯à®ç¨¥ ¡¨âë § १¥à¢¨à®¢ ë ¨ ¤®«¦ë ¡ëâì ãáâ ®¢«¥ë ¢ 0 |
4229 | * прочие биты зарезервированы и должны быть установлены в 0 |
4230 | ¤«ï ¡ã¤ã饩 ᮢ¬¥á⨬®á⨠|
4230 | для будущей совместимости |
4231 | * +12 = +0xC: dword: ᪮«ìª® ¡«®ª®¢ ç¨â âì |
4231 | * +12 = +0xC: dword: сколько блоков читать |
4232 | * +16 = +0x10: dword: 㪠§ â¥«ì ¡ãä¥à, ªã¤ ¡ã¤ãâ § ¯¨á ë |
4232 | * +16 = +0x10: dword: указатель на буфер, куда будут записаны |
4233 | ¤ ë¥, à §¬¥à ¡ãä¥à ¤®«¦¥ ¡ëâì ¥ ¬¥ìè¥ 32 + [+12]*560 ¡ ©â |
4233 | данные, размер буфера должен быть не меньше 32 + [+12]*560 байт |
4234 | * +20 = +0x14: ASCIIZ-¨¬ï ¯ ¯ª¨, ¯à ¢¨« ä®à¬¨à®¢ ¨ï ¨¬ñ 㪠§ ë ¢ |
4234 | * +20 = +0x14: ASCIIZ-имя папки, правила формирования имён указаны в |
4235 | ®¡é¥¬ ®¯¨á ¨¨ |
4235 | общем описании |
4236 | ¨«¨ |
4236 | или |
4237 | * +20 = +0x14: db 0 |
4237 | * +20 = +0x14: db 0 |
4238 | * +21 = +0x15: dd 㪠§ ⥫ì ASCIIZ-áâபã á ¨¬¥¥¬ ä ©« |
4238 | * +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла |
4239 | ®§¢à é ¥¬®¥ § 票¥: |
4239 | Возвращаемое значение: |
4240 | * eax = 0 - ãᯥè®, ¨ ç¥ ª®¤ ®è¨¡ª¨ ä ©«®¢®© á¨á⥬ë |
4240 | * eax = 0 - успешно, иначе код ошибки файловой системы |
4241 | * ebx = ç¨á«® ä ©«®¢, ¨ä®à¬ æ¨ï ® ª®â®àëå ¡ë« § ¯¨á ¢ ¡ãä¥à, |
4241 | * ebx = число файлов, информация о которых была записана в буфер, |
4242 | ¨«¨ -1=0xffffffff, ¥á«¨ ¯ ¯ª ¥ ©¤¥ |
4242 | или -1=0xffffffff, если папка не найдена |
4243 | âàãªâãà ¡ãä¥à : |
4243 | Структура буфера: |
4244 | * +0: 32*byte: § £®«®¢®ª |
4244 | * +0: 32*byte: заголовок |
4245 | * +32 = +0x20: n1*byte: ¡«®ª á ¨ä®à¬ 樥© ® ä ©«¥ 1 |
4245 | * +32 = +0x20: n1*byte: блок с информацией о файле 1 |
4246 | * +32+n1: n2*byte: ¡«®ª á ¨ä®à¬ 樥© ® ä ©«¥ 2 |
4246 | * +32+n1: n2*byte: блок с информацией о файле 2 |
4247 | * ... |
4247 | * ... |
4248 | âàãªâãà § £®«®¢ª : |
4248 | Структура заголовка: |
4249 | * +0: dword: ¢¥àá¨ï áâàãªâãàë (⥪ãé ï ¢¥àá¨ï = 1) |
4249 | * +0: dword: версия структуры (текущая версия = 1) |
4250 | * +4: dword: ª®«¨ç¥á⢮ à §¬¥éñëå ¡«®ª®¢; ¥ ¡®«ìè¥, 祬 § ¯à®è¥® |
4250 | * +4: dword: количество размещённых блоков; не больше, чем запрошено |
4251 | ¢ ¯®«¥ +12 ¨ä®à¬ 樮®© áâàãªâãàë; ¬®¦¥â ¡ëâì ¬¥ìè¥, |
4251 | в поле +12 информационной структуры; может быть меньше, |
4252 | ¥á«¨ ¢ ¯ ¯ª¥ ª®ç¨«¨áì ä ©«ë (â® ¦¥ á ¬®¥, çâ® ¨ ¢ ebx) |
4252 | если в папке кончились файлы (то же самое, что и в ebx) |
4253 | * +8: dword: ®¡é¥¥ ç¨á«® ä ©«®¢ ¢ ¯ ¯ª¥ |
4253 | * +8: dword: общее число файлов в папке |
4254 | * +12 = +0xC: 20*byte: § १¥à¢¨à®¢ ® (㫨) |
4254 | * +12 = +0xC: 20*byte: зарезервировано (нули) |
4255 | âàãªâãà ¡«®ª ¤ ëå ¢å®¤ ª â «®£ (): |
4255 | Структура блока данных входа каталога (БДВК): |
4256 | * +0: dword: âਡãâë ä ©« : |
4256 | * +0: dword: атрибуты файла: |
4257 | * ¡¨â 0 (¬ ᪠1): ä ©« ⮫쪮 ¤«ï ç⥨ï |
4257 | * бит 0 (маска 1): файл только для чтения |
4258 | * ¡¨â 1 (¬ ᪠2): ä ©« ï¥âáï áªàëâë¬ |
4258 | * бит 1 (маска 2): файл является скрытым |
4259 | * ¡¨â 2 (¬ ᪠4): ä ©« ï¥âáï á¨áâ¥¬ë¬ |
4259 | * бит 2 (маска 4): файл является системным |
4260 | * ¡¨â 3 (¬ ᪠8): íâ® ¥ ä ©«, ¬¥âª ⮬ |
4260 | * бит 3 (маска 8): это не файл, а метка тома |
4261 | ( § ¤ ®¬ à §¤¥«¥ ¢áâà¥ç ¥âáï ¥ ¡®«¥¥ ®¤®£® à § ¨ |
4261 | (на заданном разделе встречается не более одного раза и |
4262 | ⮫쪮 ¢ ª®à¥¢®© ¯ ¯ª¥) |
4262 | только в корневой папке) |
4263 | * ¡¨â 4 (¬ ᪠0x10): íâ® ¯ ¯ª |
4263 | * бит 4 (маска 0x10): это папка |
4264 | * ¡¨â 5 (¬ ᪠0x20): ä ©« ¥ à娢¨à®¢ «áï - ¬®£¨¥ ¯à®£à ¬¬ë |
4264 | * бит 5 (маска 0x20): файл не архивировался - многие программы |
4265 | à娢 樨 ¨¬¥îâ ®¯æ¨î, ¯® ª®â®à®© à娢¨àãîâáï ⮫쪮 ä ©«ë |
4265 | архивации имеют опцию, по которой архивируются только файлы |
4266 | á ãáâ ®¢«¥ë¬ í⨬ ¡¨â®¬, ¯®á«¥ 祣® íâ®â ¡¨â á¡à áë¢ ¥âáï - |
4266 | с установленным этим битом, после чего этот бит сбрасывается - |
4267 | íâ® ¬®¦¥â ¡ëâì ¯®«¥§® ¤«ï ¢â®¬ â¨ç¥áª®£® ᮧ¤ ¨ï |
4267 | это может быть полезно для автоматического создания |
4268 | backup- à娢®¢, ¨¡® ¯à¨ § ¯¨á¨ ¡¨â ®¡ëç® ãáâ ¢«¨¢ ¥âáï |
4268 | backup-архивов, ибо при записи бит обычно устанавливается |
4269 | (¥ ¢ Kolibri, ¯à ¢¤ ) |
4269 | (не в Kolibri, правда) |
4270 | * +4: byte: ⨯ ¤ ëå ¨¬¥¨: |
4270 | * +4: byte: тип данных имени: |
4271 | (ᮢ¯ ¤ ¥â á ¡¨â®¬ 0 ä« £®¢ ¨ä®à¬ 樮®© áâàãªâãàë) |
4271 | (совпадает с битом 0 флагов информационной структуры) |
4272 | * 0 = ASCII = 1-¡ ©â®¥ ¯à¥¤áâ ¢«¥¨¥ ª ¦¤®£® ᨬ¢®« |
4272 | * 0 = ASCII = 1-байтное представление каждого символа |
4273 | * 1 = UNICODE = 2-¡ ©â®¥ ¯à¥¤áâ ¢«¥¨¥ ª ¦¤®£® ᨬ¢®« |
4273 | * 1 = UNICODE = 2-байтное представление каждого символа |
4274 | * +5: 3*byte: § १¥à¢¨à®¢ ® (㫨) |
4274 | * +5: 3*byte: зарезервировано (нули) |
4275 | * +8: 4*byte: ¢à¥¬ï ᮧ¤ ¨ï ä ©« |
4275 | * +8: 4*byte: время создания файла |
4276 | * +12 = +0xC: 4*byte: ¤ â ᮧ¤ ¨ï ä ©« |
4276 | * +12 = +0xC: 4*byte: дата создания файла |
4277 | * +16 = +0x10: 4*byte: ¢à¥¬ï ¯®á«¥¤¥£® ¤®áâ㯠(ç⥨¥ ¨«¨ § ¯¨áì) |
4277 | * +16 = +0x10: 4*byte: время последнего доступа (чтение или запись) |
4278 | * +20 = +0x14: 4*byte: ¤ â ¯®á«¥¤¥£® ¤®áâ㯠|
4278 | * +20 = +0x14: 4*byte: дата последнего доступа |
4279 | * +24 = +0x18: 4*byte: ¢à¥¬ï ¯®á«¥¤¥© ¬®¤¨ä¨ª 樨 |
4279 | * +24 = +0x18: 4*byte: время последней модификации |
4280 | * +28 = +0x1C: 4*byte: ¤ â ¯®á«¥¤¥© ¬®¤¨ä¨ª 樨 |
4280 | * +28 = +0x1C: 4*byte: дата последней модификации |
4281 | * +32 = +0x20: qword: à §¬¥à ä ©« ¢ ¡ ©â å (¤® 16777216 ¡) |
4281 | * +32 = +0x20: qword: размер файла в байтах (до 16777216 Тб) |
4282 | * +40 = +0x28: ¨¬ï |
4282 | * +40 = +0x28: имя |
4283 | * ¤«ï ä®à¬ â ASCII: ¬ ªá¨¬ «ì ï ¤«¨ ¨¬¥¨ 263 ᨬ¢®« |
4283 | * для формата ASCII: максимальная длина имени 263 символа |
4284 | (263 ¡ ©â ), ¡ ©â ¯®á«¥ ¨¬¥¨ ¨¬¥¥â § 票¥ 0 |
4284 | (263 байта), байт после имени имеет значение 0 |
4285 | * ¤«ï ä®à¬ â UNICODE: ¬ ªá¨¬ «ì ï ¤«¨ ¨¬¥¨ 259 ᨬ¢®«®¢ |
4285 | * для формата UNICODE: максимальная длина имени 259 символов |
4286 | (518 ¡ ©â), ¤¢ ¡ ©â ¯®á«¥ ¨¬¥¨ ¨¬¥îâ § 票¥ 0 |
4286 | (518 байт), два байта после имени имеют значение 0 |
4287 | ®à¬ ⠢६¥¨: |
4287 | Формат времени: |
4288 | * +0: byte: ᥪã¤ë |
4288 | * +0: byte: секунды |
4289 | * +1: byte: ¬¨ãâë |
4289 | * +1: byte: минуты |
4290 | * +2: byte: ç áë |
4290 | * +2: byte: часы |
4291 | * +3: byte: § १¥à¢¨à®¢ ® (0) |
4291 | * +3: byte: зарезервировано (0) |
4292 | * ¯à¨¬¥à, 23.59.59 § ¯¨áë¢ ¥âáï ª ª (¢ hex) 3B 3B 17 00 |
4292 | * например, 23.59.59 записывается как (в hex) 3B 3B 17 00 |
4293 | ®à¬ â ¤ âë: |
4293 | Формат даты: |
4294 | * +0: byte: ¤¥ì |
4294 | * +0: byte: день |
4295 | * +1: byte: ¬¥áïæ |
4295 | * +1: byte: месяц |
4296 | * +2: word: £®¤ |
4296 | * +2: word: год |
4297 | * ¯à¨¬¥à, 25.11.1979 § ¯¨áë¢ ¥âáï ª ª (¢ hex) 19 0B BB 07 |
4297 | * например, 25.11.1979 записывается как (в hex) 19 0B BB 07 |
4298 | ¬¥ç ¨ï: |
4298 | Замечания: |
4299 | * ᫨ ¢ ¯à¨áãâáâ¢ã¥â ¨¬ï ¢ ASCII, â® ¤«¨ á®áâ ¢«ï¥â |
4299 | * Если в БДВК присутствует имя в ASCII, то длина БДВК составляет |
4300 | 304 ¡ ©â , ¥á«¨ ¢ UNICODE - 560 ¡ ©â. 票¥ ¤«¨ë ¢ëà ¢¥® |
4300 | 304 байта, если в UNICODE - 560 байт. Значение длины выравнено |
4301 | 楫®¥ ªà ⮥ 16 ¡ ©â |
4301 | на целое кратное 16 байт |
4302 | (¤«ï ãáª®à¥¨ï ®¡à ¡®âª¨ ¢ ªíè-¯ ¬ï⨠CPU). |
4302 | (для ускорения обработки в кэш-памяти CPU). |
4303 | * ¥à¢ë© ᨬ¢®« ¯®á«¥ ¨¬¥¨ ã«¥¢®© (ASCIIZ-áâப ). «ì¥©è¨¥ |
4303 | * Первый символ после имени нулевой (ASCIIZ-строка). Дальнейшие |
4304 | ¤ ë¥ á®¤¥à¦ â ¬ãá®à. |
4304 | данные содержат мусор. |
4305 | * ᫨ ä ©«ë ¢ ¯ ¯ª¥ ª®ç¨«¨áì à ìè¥, 祬 ¡ë«® ¯à®ç¨â ® |
4305 | * Если файлы в папке кончились раньше, чем было прочитано |
4306 | § ¯à®è¥®¥ ª®«¨ç¥á⢮, â® äãªæ¨ï ¯à®ç¨â ¥â, ᪮«ìª® ᬮ¦¥â, |
4306 | запрошенное количество, то функция прочитает, сколько сможет, |
4307 | ¯®á«¥ 祣® ¢¥àñâ eax=6 (EOF). |
4307 | после чего вернёт eax=6 (EOF). |
4308 | * î¡ ï ¯ ¯ª ¤¨áª¥, ªà®¬¥ ª®à¥¢®©, ᮤ¥à¦¨â ¤¢ á¯¥æ¨ «ìëå |
4308 | * Любая папка на диске, кроме корневой, содержит два специальных |
4309 | ¢å®¤ "." ¨ "..", ¨¤¥â¨ä¨æ¨àãîé¨å ᮮ⢥âá⢥® á ¬ã ¯ ¯ªã ¨ |
4309 | входа "." и "..", идентифицирующих соответственно саму папку и |
4310 | த¨â¥«ìáªãî ¯ ¯ªã. |
4310 | родительскую папку. |
4311 | * ãªæ¨ï ¯®§¢®«ï¥â â ª¦¥ ç¨â âì ¢¨àâã «ìë¥ ¯ ¯ª¨ "/", "/rd", |
4311 | * Функция позволяет также читать виртуальные папки "/", "/rd", |
4312 | "/fd", "/hd[n]", ¯à¨ í⮬ âਡãâë ¯®¤¯ ¯®ª ¯®« £ îâáï à ¢ë¬¨ |
4312 | "/fd", "/hd[n]", при этом атрибуты подпапок полагаются равными |
4313 | 0x10, ¢à¥¬¥ ¨ ¤ âë ®¡ã«¥ë. «ìâ¥à â¨¢ë© á¯®á®¡ ¯®«ã票ï |
4313 | 0x10, а времена и даты обнулены. Альтернативный способ получения |
4314 | ¨ä®à¬ 樨 ®¡ ®¡®à㤮¢ ¨¨ - ¯®¤äãªæ¨ï 11 äãªæ¨¨ 18. |
4314 | информации об оборудовании - подфункция 11 функции 18. |
4315 | 4315 | ||
4316 | ====================================================================== |
4316 | ====================================================================== |
4317 | ====================== ãªæ¨ï 70, ¯®¤äãªæ¨ï 2 ====================== |
4317 | ====================== Функция 70, подфункция 2 ====================== |
4318 | ======== ®§¤ ¨¥/¯¥à¥§ ¯¨áì ä ©« á ¯®¤¤¥à¦ª®© ¤«¨ëå ¨¬ñ. ======== |
4318 | ======== Создание/перезапись файла с поддержкой длинных имён. ======== |
4319 | ====================================================================== |
4319 | ====================================================================== |
4320 | à ¬¥âàë: |
4320 | Параметры: |
4321 | * eax = 70 - ®¬¥à äãªæ¨¨ |
4321 | * eax = 70 - номер функции |
4322 | * ebx = 㪠§ â¥«ì ¨ä®à¬ 樮ãî áâàãªâãàã |
4322 | * ebx = указатель на информационную структуру |
4323 | ®à¬ â ¨ä®à¬ 樮®© áâàãªâãàë: |
4323 | Формат информационной структуры: |
4324 | * +0: dword: 2 = ®¬¥à ¯®¤äãªæ¨¨ |
4324 | * +0: dword: 2 = номер подфункции |
4325 | * +4: dword: 0 (§ १¥à¢¨à®¢ ®) |
4325 | * +4: dword: 0 (зарезервировано) |
4326 | * +8: dword: 0 (§ १¥à¢¨à®¢ ®) |
4326 | * +8: dword: 0 (зарезервировано) |
4327 | * +12 = +0xC: dword: ᪮«ìª® ¡ ©â ¯¨á âì |
4327 | * +12 = +0xC: dword: сколько байт писать |
4328 | * +16 = +0x10: dword: 㪠§ â¥«ì ¤ ë¥ |
4328 | * +16 = +0x10: dword: указатель на данные |
4329 | * +20 = +0x14: ASCIIZ-¨¬ï ä ©« , ¯à ¢¨« ä®à¬¨à®¢ ¨ï ¨¬ñ 㪠§ ë ¢ |
4329 | * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в |
4330 | ®¡é¥¬ ®¯¨á ¨¨ |
4330 | общем описании |
4331 | ¨«¨ |
4331 | или |
4332 | * +20 = +0x14: db 0 |
4332 | * +20 = +0x14: db 0 |
4333 | * +21 = +0x15: dd 㪠§ ⥫ì ASCIIZ-áâபã á ¨¬¥¥¬ ä ©« |
4333 | * +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла |
4334 | ®§¢à é ¥¬®¥ § 票¥: |
4334 | Возвращаемое значение: |
4335 | * eax = 0 - ãᯥè®, ¨ ç¥ ª®¤ ®è¨¡ª¨ ä ©«®¢®© á¨á⥬ë |
4335 | * eax = 0 - успешно, иначе код ошибки файловой системы |
4336 | * ebx = ç¨á«® § ¯¨á ëå ¡ ©â (¢®§¬®¦®, 0) |
4336 | * ebx = число записанных байт (возможно, 0) |
4337 | ¬¥ç ¨ï: |
4337 | Замечания: |
4338 | * ᫨ ä ©« á â ª¨¬ ¨¬¥¥¬ ¥ áãé¥á⢮¢ «, ® ᮧ¤ ñâáï; ¥á«¨ |
4338 | * Если файл с таким именем не существовал, он создаётся; если |
4339 | áãé¥á⢮¢ «, â® ¯¥à¥§ ¯¨áë¢ ¥âáï. |
4339 | существовал, то перезаписывается. |
4340 | * ᫨ ᢮¡®¤®£® ¬¥áâ ¤¨áª¥ ¥¤®áâ â®ç®, â® äãªæ¨ï § ¯¨è¥â, |
4340 | * Если свободного места на диске недостаточно, то функция запишет, |
4341 | ᪮«ìª® ᬮ¦¥â, ¯®á«¥ 祣® ¢¥àñâ ª®¤ ®è¨¡ª¨ 8. |
4341 | сколько сможет, после чего вернёт код ошибки 8. |
4342 | * ãªæ¨ï ¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï CD (¢¥àñâáï ª®¤ ®è¨¡ª¨ 2). |
4342 | * Функция не поддерживается для CD (вернётся код ошибки 2). |
4343 | 4343 | ||
4344 | ====================================================================== |
4344 | ====================================================================== |
4345 | ====================== ãªæ¨ï 70, ¯®¤äãªæ¨ï 3 ====================== |
4345 | ====================== Функция 70, подфункция 3 ====================== |
4346 | ======== ¯¨áì ¢ áãé¥áâ¢ãî騩 ä ©« á ¯®¤¤¥à¦ª®© ¤«¨ëå ¨¬ñ. ======= |
4346 | ======== Запись в существующий файл с поддержкой длинных имён. ======= |
4347 | ====================================================================== |
4347 | ====================================================================== |
4348 | à ¬¥âàë: |
4348 | Параметры: |
4349 | * eax = 70 - ®¬¥à äãªæ¨¨ |
4349 | * eax = 70 - номер функции |
4350 | * ebx = 㪠§ â¥«ì ¨ä®à¬ 樮ãî áâàãªâãàã |
4350 | * ebx = указатель на информационную структуру |
4351 | ®à¬ â ¨ä®à¬ 樮®© áâàãªâãàë: |
4351 | Формат информационной структуры: |
4352 | * +0: dword: 3 = ®¬¥à ¯®¤äãªæ¨¨ |
4352 | * +0: dword: 3 = номер подфункции |
4353 | * +4: dword: ¯®§¨æ¨ï ¢ ä ©«¥ (¢ ¡ ©â å) |
4353 | * +4: dword: позиция в файле (в байтах) |
4354 | * +8: dword: áâ à訩 dword ¯®§¨æ¨¨ (¤®«¦¥ ¡ëâì 0 ¤«ï FAT) |
4354 | * +8: dword: старший dword позиции (должен быть 0 для FAT) |
4355 | * +12 = +0xC: dword: ᪮«ìª® ¡ ©â ¯¨á âì |
4355 | * +12 = +0xC: dword: сколько байт писать |
4356 | * +16 = +0x10: dword: 㪠§ â¥«ì ¤ ë¥ |
4356 | * +16 = +0x10: dword: указатель на данные |
4357 | * +20 = +0x14: ASCIIZ-¨¬ï ä ©« , ¯à ¢¨« ä®à¬¨à®¢ ¨ï ¨¬ñ 㪠§ ë ¢ |
4357 | * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в |
4358 | ®¡é¥¬ ®¯¨á ¨¨ |
4358 | общем описании |
4359 | ¨«¨ |
4359 | или |
4360 | * +20 = +0x14: db 0 |
4360 | * +20 = +0x14: db 0 |
4361 | * +21 = +0x15: dd 㪠§ ⥫ì ASCIIZ-áâபã á ¨¬¥¥¬ ä ©« |
4361 | * +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла |
4362 | ®§¢à é ¥¬®¥ § 票¥: |
4362 | Возвращаемое значение: |
4363 | * eax = 0 - ãᯥè®, ¨ ç¥ ª®¤ ®è¨¡ª¨ ä ©«®¢®© á¨á⥬ë |
4363 | * eax = 0 - успешно, иначе код ошибки файловой системы |
4364 | * ebx = ç¨á«® § ¯¨á ëå ¡ ©â (¢®§¬®¦®, 0) |
4364 | * ebx = число записанных байт (возможно, 0) |
4365 | ¬¥ç ¨ï: |
4365 | Замечания: |
4366 | * ©« ¤®«¦¥ 㦥 áãé¥á⢮¢ âì, ¨ ç¥ ¢¥àñâáï eax=5. |
4366 | * Файл должен уже существовать, иначе вернётся eax=5. |
4367 | * ¤¨áâ¢¥ë¬ à¥§ã«ìâ ⮬ § ¯¨á¨ 0 ¡ ©â ï¥âáï ãáâ ®¢ª ¢ |
4367 | * Единственным результатом записи 0 байт является установка в |
4368 | âਡãâ å ä ©« ¤ âë/¢à¥¬¥¨ ¬®¤¨ä¨ª 樨 ¨ ¤®áâ㯠¢ ⥪ãéãî. |
4368 | атрибутах файла даты/времени модификации и доступа в текущую. |
4369 | * ᫨ ç «ì ï ¨/¨«¨ ª®¥ç ï ¯®§¨æ¨ï ¢ë室¨â § ¯à¥¤¥«ë ä ©« |
4369 | * Если начальная и/или конечная позиция выходит за пределы файла |
4370 | (§ ¨áª«î票¥¬ ¯à¥¤ë¤ã饣® á«ãç ï), ä ©« à áè¨àï¥âáï ¤® |
4370 | (за исключением предыдущего случая), файл расширяется до |
4371 | ¥®¡å®¤¨¬®£® à §¬¥à ã«¥¢ë¬¨ ᨬ¢®« ¬¨. |
4371 | необходимого размера нулевыми символами. |
4372 | * ãªæ¨ï ¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï CD (¢¥àñâáï ª®¤ ®è¨¡ª¨ 2). |
4372 | * Функция не поддерживается для CD (вернётся код ошибки 2). |
4373 | 4373 | ||
4374 | ====================================================================== |
4374 | ====================================================================== |
4375 | ========= ãªæ¨ï 70, ¯®¤äãªæ¨ï 4 - ãáâ ®¢ª à §¬¥à ä ©« . ======== |
4375 | ========= Функция 70, подфункция 4 - установка размера файла. ======== |
4376 | ====================================================================== |
4376 | ====================================================================== |
4377 | à ¬¥âàë: |
4377 | Параметры: |
4378 | * eax = 70 - ®¬¥à äãªæ¨¨ |
4378 | * eax = 70 - номер функции |
4379 | * ebx = 㪠§ â¥«ì ¨ä®à¬ 樮ãî áâàãªâãàã |
4379 | * ebx = указатель на информационную структуру |
4380 | ®à¬ â ¨ä®à¬ 樮®© áâàãªâãàë: |
4380 | Формат информационной структуры: |
4381 | * +0: dword: 4 = ®¬¥à ¯®¤äãªæ¨¨ |
4381 | * +0: dword: 4 = номер подфункции |
4382 | * +4: dword: ¬« ¤è¨© dword ®¢®£® à §¬¥à ä ©« |
4382 | * +4: dword: младший dword нового размера файла |
4383 | * +8: dword: áâ à訩 dword ®¢®£® à §¬¥à ä ©« |
4383 | * +8: dword: старший dword нового размера файла |
4384 | (¤®«¦¥ ¡ëâì 0 ¤«ï FAT) |
4384 | (должен быть 0 для FAT) |
4385 | * +12 = +0xC: dword: 0 (§ १¥à¢¨à®¢ ®) |
4385 | * +12 = +0xC: dword: 0 (зарезервировано) |
4386 | * +16 = +0x10: dword: 0 (§ १¥à¢¨à®¢ ®) |
4386 | * +16 = +0x10: dword: 0 (зарезервировано) |
4387 | * +20 = +0x14: ASCIIZ-¨¬ï ä ©« , ¯à ¢¨« ä®à¬¨à®¢ ¨ï ¨¬ñ 㪠§ ë ¢ |
4387 | * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в |
4388 | ®¡é¥¬ ®¯¨á ¨¨ |
4388 | общем описании |
4389 | ¨«¨ |
4389 | или |
4390 | * +20 = +0x14: db 0 |
4390 | * +20 = +0x14: db 0 |
4391 | * +21 = +0x15: dd 㪠§ ⥫ì ASCIIZ-áâபã á ¨¬¥¥¬ ä ©« |
4391 | * +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла |
4392 | ®§¢à é ¥¬®¥ § 票¥: |
4392 | Возвращаемое значение: |
4393 | * eax = 0 - ãᯥè®, ¨ ç¥ ª®¤ ®è¨¡ª¨ ä ©«®¢®© á¨á⥬ë |
4393 | * eax = 0 - успешно, иначе код ошибки файловой системы |
4394 | * ebx à §àãè ¥âáï |
4394 | * ebx разрушается |
4395 | ¬¥ç ¨ï: |
4395 | Замечания: |
4396 | * ᫨ ®¢ë© à §¬¥à ä ©« ¬¥ìè¥ áâ ண®, ä ©« ãᥪ ¥âáï. ᫨ |
4396 | * Если новый размер файла меньше старого, файл усекается. Если |
4397 | ®¢ë© à §¬¥à ¡®«ìè¥ áâ ண®, ä ©« à áè¨àï¥âáï ã«¥¢ë¬¨ ᨬ¢®« ¬¨. |
4397 | новый размер больше старого, файл расширяется нулевыми символами. |
4398 | ᫨ ®¢ë© à §¬¥à à ¢¥ áâ ஬ã, ¥¤¨áâ¢¥ë¬ à¥§ã«ìâ ⮬ ¢ë§®¢ |
4398 | Если новый размер равен старому, единственным результатом вызова |
4399 | ï¥âáï ãáâ ®¢ª ¤ âë/¢à¥¬¥¨ ¬®¤¨ä¨ª 樨 ¨ ¤®áâ㯠¢ ⥪ã騥. |
4399 | является установка даты/времени модификации и доступа в текущие. |
4400 | * ᫨ ᢮¡®¤®£® ¬¥áâ ¤¨áª¥ ¥¤®áâ â®ç® ¤«ï à áè¨à¥¨ï ä ©« , |
4400 | * Если свободного места на диске недостаточно для расширения файла, |
4401 | â® äãªæ¨ï à áè¨à¨â ᪮«ìª® ¢®§¬®¦®, ¯®á«¥ 祣® ¢¥àñâ |
4401 | то функция расширит насколько возможно, после чего вернёт |
4402 | ª®¤ ®è¨¡ª¨ 8. |
4402 | код ошибки 8. |
4403 | * ãªæ¨ï ¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï CD (¢¥àñâáï ª®¤ ®è¨¡ª¨ 2). |
4403 | * Функция не поддерживается для CD (вернётся код ошибки 2). |
4404 | 4404 | ||
4405 | ====================================================================== |
4405 | ====================================================================== |
4406 | === ãªæ¨ï 70, ¯®¤äãªæ¨ï 5 - ¯®«ã票¥ ¨ä®à¬ 樨 ® ä ©«¥/¯ ¯ª¥. === |
4406 | === Функция 70, подфункция 5 - получение информации о файле/папке. === |
4407 | ====================================================================== |
4407 | ====================================================================== |
4408 | à ¬¥âàë: |
4408 | Параметры: |
4409 | * eax = 70 - ®¬¥à äãªæ¨¨ |
4409 | * eax = 70 - номер функции |
4410 | * ebx = 㪠§ â¥«ì ¨ä®à¬ 樮ãî áâàãªâãàã |
4410 | * ebx = указатель на информационную структуру |
4411 | ®à¬ â ¨ä®à¬ 樮®© áâàãªâãàë: |
4411 | Формат информационной структуры: |
4412 | * +0: dword: 5 = ®¬¥à ¯®¤äãªæ¨¨ |
4412 | * +0: dword: 5 = номер подфункции |
4413 | * +4: dword: 0 (§ १¥à¢¨à®¢ ®) |
4413 | * +4: dword: 0 (зарезервировано) |
4414 | * +8: dword: 0 (§ १¥à¢¨à®¢ ®) |
4414 | * +8: dword: 0 (зарезервировано) |
4415 | * +12 = +0xC: dword: 0 (§ १¥à¢¨à®¢ ®) |
4415 | * +12 = +0xC: dword: 0 (зарезервировано) |
4416 | * +16 = +0x10: dword: 㪠§ â¥«ì ¡ãä¥à, ªã¤ ¡ã¤ãâ § ¯¨á ë ¤ ë¥ |
4416 | * +16 = +0x10: dword: указатель на буфер, куда будут записаны данные |
4417 | (40 ¡ ©â) |
4417 | (40 байт) |
4418 | * +20 = +0x14: ASCIIZ-¨¬ï ä ©« , ¯à ¢¨« ä®à¬¨à®¢ ¨ï ¨¬ñ 㪠§ ë ¢ |
4418 | * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в |
4419 | ®¡é¥¬ ®¯¨á ¨¨ |
4419 | общем описании |
4420 | ¨«¨ |
4420 | или |
4421 | * +20 = +0x14: db 0 |
4421 | * +20 = +0x14: db 0 |
4422 | * +21 = +0x15: dd 㪠§ ⥫ì ASCIIZ-áâபã á ¨¬¥¥¬ ä ©« |
4422 | * +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла |
4423 | ®§¢à é ¥¬®¥ § 票¥: |
4423 | Возвращаемое значение: |
4424 | * eax = 0 - ãᯥè®, ¨ ç¥ ª®¤ ®è¨¡ª¨ ä ©«®¢®© á¨á⥬ë |
4424 | * eax = 0 - успешно, иначе код ошибки файловой системы |
4425 | * ebx à §àãè ¥âáï |
4425 | * ebx разрушается |
4426 | ä®à¬ æ¨ï ® ä ©«¥ ¢®§¢à é ¥âáï ¢ ä®à¬ ⥠|
4426 | Информация о файле возвращается в формате БДВК |
4427 | (¡«®ª ¤ ëå ¢å®¤ ª â «®£ ), 㪠§ ®¬ ¢ ®¯¨á ¨¨ |
4427 | (блока данных входа каталога), указанном в описании |
4428 | ¯®¤äãªæ¨¨ 1, ® ¡¥§ ¨¬¥¨ ä ©« |
4428 | подфункции 1, но без имени файла |
4429 | (â® ¥áâì ¯¥à¢ë¥ 40 = 0x28 ¡ ©â). |
4429 | (то есть первые 40 = 0x28 байт). |
4430 | ¬¥ç ¨ï: |
4430 | Замечания: |
4431 | * ãªæ¨ï ¥ ¯®¤¤¥à¦¨¢ ¥â ¢¨àâã «ìë¥ ¯ ¯ª¨ ⨯ /, /rd ¨ |
4431 | * Функция не поддерживает виртуальные папки типа /, /rd и |
4432 | ª®à¥¢ë¥ ¯ ¯ª¨ ⨯ /rd/1. |
4432 | корневые папки типа /rd/1. |
4433 | 4433 | ||
4434 | ====================================================================== |
4434 | ====================================================================== |
4435 | ===== ãªæ¨ï 70, ¯®¤äãªæ¨ï 6 - ãáâ ®¢ª âਡã⮢ ä ©« /¯ ¯ª¨. ==== |
4435 | ===== Функция 70, подфункция 6 - установка атрибутов файла/папки. ==== |
4436 | ====================================================================== |
4436 | ====================================================================== |
4437 | à ¬¥âàë: |
4437 | Параметры: |
4438 | * eax = 70 - ®¬¥à äãªæ¨¨ |
4438 | * eax = 70 - номер функции |
4439 | * ebx = 㪠§ â¥«ì ¨ä®à¬ 樮ãî áâàãªâãàã |
4439 | * ebx = указатель на информационную структуру |
4440 | ®à¬ â ¨ä®à¬ 樮®© áâàãªâãàë: |
4440 | Формат информационной структуры: |
4441 | * +0: dword: 6 = ®¬¥à ¯®¤äãªæ¨¨ |
4441 | * +0: dword: 6 = номер подфункции |
4442 | * +4: dword: 0 (§ १¥à¢¨à®¢ ®) |
4442 | * +4: dword: 0 (зарезервировано) |
4443 | * +8: dword: 0 (§ १¥à¢¨à®¢ ®) |
4443 | * +8: dword: 0 (зарезервировано) |
4444 | * +12 = +0xC: dword: 0 (§ १¥à¢¨à®¢ ®) |
4444 | * +12 = +0xC: dword: 0 (зарезервировано) |
4445 | * +16 = +0x10: dword: 㪠§ â¥«ì ¡ãä¥à á âਡãâ ¬¨ (32 ¡ ©â ) |
4445 | * +16 = +0x10: dword: указатель на буфер с атрибутами (32 байта) |
4446 | * +20 = +0x14: ASCIIZ-¨¬ï ä ©« , ¯à ¢¨« ä®à¬¨à®¢ ¨ï ¨¬ñ 㪠§ ë ¢ |
4446 | * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в |
4447 | ®¡é¥¬ ®¯¨á ¨¨ |
4447 | общем описании |
4448 | ¨«¨ |
4448 | или |
4449 | * +20 = +0x14: db 0 |
4449 | * +20 = +0x14: db 0 |
4450 | * +21 = +0x15: dd 㪠§ ⥫ì ASCIIZ-áâபã á ¨¬¥¥¬ ä ©« |
4450 | * +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла |
4451 | ®§¢à é ¥¬®¥ § 票¥: |
4451 | Возвращаемое значение: |
4452 | * eax = 0 - ãᯥè®, ¨ ç¥ ª®¤ ®è¨¡ª¨ ä ©«®¢®© á¨á⥬ë |
4452 | * eax = 0 - успешно, иначе код ошибки файловой системы |
4453 | * ebx à §àãè ¥âáï |
4453 | * ebx разрушается |
4454 | âਡãâë ä ©« - ¯¥à¢ë¥ 32 ¡ ©â ¢ (¡«®ª¥ ¤ ëå ¢å®¤ ª â «®£ ), |
4454 | Атрибуты файла - первые 32 байта в БДВК (блоке данных входа каталога), |
4455 | ä®à¬ â ª®â®à®£® 㪠§ ¢ ®¯¨á ¨¨ ¯®¤äãªæ¨¨ 1 |
4455 | формат которого указан в описании подфункции 1 |
4456 | (â® ¥áâì ¡¥§ ¨¬¥¨ ¨ à §¬¥à ä ©« ). âਡãâ ä ©«/¯ ¯ª /¬¥âª ⮬ |
4456 | (то есть без имени и размера файла). Атрибут файл/папка/метка тома |
4457 | (¡¨âë 3,4 ¢ dword'¥ +0) ¥ ¬¥ï¥âáï. |
4457 | (биты 3,4 в dword'е +0) не меняется. |
4458 | ©â +4 (ä®à¬ â ¨¬¥¨) ¨£®à¨àã¥âáï. |
4458 | Байт +4 (формат имени) игнорируется. |
4459 | ¬¥ç ¨ï: |
4459 | Замечания: |
4460 | * ãªæ¨ï ¥ ¯®¤¤¥à¦¨¢ ¥â ¢¨àâã «ìë¥ ¯ ¯ª¨ ⨯ /, /rd ¨ |
4460 | * Функция не поддерживает виртуальные папки типа /, /rd и |
4461 | ª®à¥¢ë¥ ¯ ¯ª¨ ⨯ /rd/1. |
4461 | корневые папки типа /rd/1. |
4462 | * ãªæ¨ï ¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï CD (¢¥àñâáï ª®¤ ®è¨¡ª¨ 2). |
4462 | * Функция не поддерживается для CD (вернётся код ошибки 2). |
4463 | 4463 | ||
4464 | ====================================================================== |
4464 | ====================================================================== |
4465 | ============ ãªæ¨ï 70, ¯®¤äãªæ¨ï 7 - § ¯ã᪠¯à®£à ¬¬ë. ============ |
4465 | ============ Функция 70, подфункция 7 - запуск программы. ============ |
4466 | ====================================================================== |
4466 | ====================================================================== |
4467 | à ¬¥âàë: |
4467 | Параметры: |
4468 | * eax = 70 - ®¬¥à äãªæ¨¨ |
4468 | * eax = 70 - номер функции |
4469 | * ebx = 㪠§ â¥«ì ¨ä®à¬ 樮ãî áâàãªâãàã |
4469 | * ebx = указатель на информационную структуру |
4470 | ®à¬ â ¨ä®à¬ 樮®© áâàãªâãàë: |
4470 | Формат информационной структуры: |
4471 | * +0: dword: 7 = ®¬¥à ¯®¤äãªæ¨¨ |
4471 | * +0: dword: 7 = номер подфункции |
4472 | * +4: dword: ¯®«¥ ä« £®¢: |
4472 | * +4: dword: поле флагов: |
4473 | * ¡¨â 0: § ¯ãáâ¨âì ¯à®æ¥áá ª ª ®â« ¦¨¢ ¥¬ë© |
4473 | * бит 0: запустить процесс как отлаживаемый |
4474 | * ®áâ «ìë¥ ¡¨âë § १¥à¢¨à®¢ ë ¨ ¤®«¦ë ¡ëâì ãáâ ®¢«¥ë ¢ 0 |
4474 | * остальные биты зарезервированы и должны быть установлены в 0 |
4475 | * +8: dword: 0 ¨«¨ 㪠§ ⥫ì ASCIIZ-áâபã á ¯ à ¬¥âà ¬¨ |
4475 | * +8: dword: 0 или указатель на ASCIIZ-строку с параметрами |
4476 | * +12 = +0xC: dword: 0 (§ १¥à¢¨à®¢ ®) |
4476 | * +12 = +0xC: dword: 0 (зарезервировано) |
4477 | * +16 = +0x10: dword: 0 (§ १¥à¢¨à®¢ ®) |
4477 | * +16 = +0x10: dword: 0 (зарезервировано) |
4478 | * +20 = +0x14: ASCIIZ-¨¬ï ä ©« , ¯à ¢¨« ä®à¬¨à®¢ ¨ï ¨¬ñ 㪠§ ë ¢ |
4478 | * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в |
4479 | ®¡é¥¬ ®¯¨á ¨¨ |
4479 | общем описании |
4480 | ¨«¨ |
4480 | или |
4481 | * +20 = +0x14: db 0 |
4481 | * +20 = +0x14: db 0 |
4482 | * +21 = +0x15: dd 㪠§ ⥫ì ASCIIZ-áâபã á ¨¬¥¥¬ ä ©« |
4482 | * +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла |
4483 | ®§¢à é ¥¬®¥ § 票¥: |
4483 | Возвращаемое значение: |
4484 | * eax > 0 - ¯à®£à ¬¬ § £à㦥 , eax ᮤ¥à¦¨â PID |
4484 | * eax > 0 - программа загружена, eax содержит PID |
4485 | * eax < 0 - ¯à®¨§®è« ®è¨¡ª , -eax ᮤ¥à¦¨â |
4485 | * eax < 0 - произошла ошибка, -eax содержит |
4486 | ª®¤ ®è¨¡ª¨ ä ©«®¢®© á¨á⥬ë |
4486 | код ошибки файловой системы |
4487 | * ebx à §àãè ¥âáï |
4487 | * ebx разрушается |
4488 | ¬¥ç ¨ï: |
4488 | Замечания: |
4489 | * ®¬ ¤ ï áâப ¤®«¦ § ª 稢 âìáï ᨬ¢®«®¬ á ª®¤®¬ 0 |
4489 | * Командная строка должна заканчиваться символом с кодом 0 |
4490 | (ASCIIZ-áâப ); ãç¨âë¢ îâáï «¨¡® ¢á¥ ᨬ¢®«ë ¤® § ¢¥àè î饣® ã«ï |
4490 | (ASCIIZ-строка); учитываются либо все символы до завершающего нуля |
4491 | ¢ª«îç¨â¥«ì®, «¨¡® ¯¥à¢ë¥ 256 ᨬ¢®«®¢, ¢ § ¢¨á¨¬®á⨠®â ⮣®, |
4491 | включительно, либо первые 256 символов, в зависимости от того, |
4492 | çâ® ¬¥ìè¥. |
4492 | что меньше. |
4493 | * ᫨ ¯à®æ¥áá § ¯ã᪠¥âáï ª ª ®â« ¦¨¢ ¥¬ë©, ® ᮧ¤ ñâáï |
4493 | * Если процесс запускается как отлаживаемый, он создаётся |
4494 | ¢ § ¬®à®¦¥®¬ á®áâ®ï¨¨; ¤«ï § ¯ã᪠¨á¯®«ì§ã©â¥ |
4494 | в замороженном состоянии; для запуска используйте |
4495 | ¯®¤äãªæ¨î 5 äãªæ¨¨ 69. |
4495 | подфункцию 5 функции 69. |
4496 | 4496 | ||
4497 | ====================================================================== |
4497 | ====================================================================== |
4498 | ========== ãªæ¨ï 70, ¯®¤äãªæ¨ï 8 - 㤠«¥¨¥ ä ©« /¯ ¯ª¨. ========== |
4498 | ========== Функция 70, подфункция 8 - удаление файла/папки. ========== |
4499 | ====================================================================== |
4499 | ====================================================================== |
4500 | à ¬¥âàë: |
4500 | Параметры: |
4501 | * eax = 70 - ®¬¥à äãªæ¨¨ |
4501 | * eax = 70 - номер функции |
4502 | * ebx = 㪠§ â¥«ì ¨ä®à¬ 樮ãî áâàãªâãàã |
4502 | * ebx = указатель на информационную структуру |
4503 | ®à¬ â ¨ä®à¬ 樮®© áâàãªâãàë: |
4503 | Формат информационной структуры: |
4504 | * +0: dword: 8 = ®¬¥à ¯®¤äãªæ¨¨ |
4504 | * +0: dword: 8 = номер подфункции |
4505 | * +4: dword: 0 (§ १¥à¢¨à®¢ ®) |
4505 | * +4: dword: 0 (зарезервировано) |
4506 | * +8: dword: 0 (§ १¥à¢¨à®¢ ®) |
4506 | * +8: dword: 0 (зарезервировано) |
4507 | * +12 = +0xC: dword: 0 (§ १¥à¢¨à®¢ ®) |
4507 | * +12 = +0xC: dword: 0 (зарезервировано) |
4508 | * +16 = +0x10: dword: 0 (§ १¥à¢¨à®¢ ®) |
4508 | * +16 = +0x10: dword: 0 (зарезервировано) |
4509 | * +20 = +0x14: ASCIIZ-¨¬ï ä ©« , ¯à ¢¨« ä®à¬¨à®¢ ¨ï ¨¬ñ 㪠§ ë ¢ |
4509 | * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в |
4510 | ®¡é¥¬ ®¯¨á ¨¨ |
4510 | общем описании |
4511 | ¨«¨ |
4511 | или |
4512 | * +20 = +0x14: db 0 |
4512 | * +20 = +0x14: db 0 |
4513 | * +21 = +0x15: dd 㪠§ ⥫ì ASCIIZ-áâபã á ¨¬¥¥¬ ä ©« |
4513 | * +21 = +0x15: dd указатель на ASCIIZ-строку с именем файла |
4514 | ®§¢à é ¥¬®¥ § 票¥: |
4514 | Возвращаемое значение: |
4515 | * eax = 0 - ãᯥè®, ¨ ç¥ ª®¤ ®è¨¡ª¨ ä ©«®¢®© á¨á⥬ë |
4515 | * eax = 0 - успешно, иначе код ошибки файловой системы |
4516 | * ebx à §àãè ¥âáï |
4516 | * ebx разрушается |
4517 | ¬¥ç ¨ï: |
4517 | Замечания: |
4518 | * ãªæ¨ï ¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï CD (¢¥àñâáï ª®¤ ®è¨¡ª¨ 2). |
4518 | * Функция не поддерживается для CD (вернётся код ошибки 2). |
4519 | * ®¦® 㤠«ïâì ⮫쪮 ¯ãáâë¥ ¯ ¯ª¨ (¯®¯ë⪠㤠«¥¨ï ¥¯ãá⮩ ¯ ¯ª¨ |
4519 | * Можно удалять только пустые папки (попытка удаления непустой папки |
4520 | ¯à¨¢¥¤ñâ ª ®è¨¡ª¥ á ª®¤®¬ 10, "¤®áâ㯠§ ¯à¥éñ"). |
4520 | приведёт к ошибке с кодом 10, "доступ запрещён"). |
4521 | 4521 | ||
4522 | ====================================================================== |
4522 | ====================================================================== |
4523 | ============= ãªæ¨ï 70, ¯®¤äãªæ¨ï 9 - ᮧ¤ ¨¥ ¯ ¯ª¨. ============= |
4523 | ============= Функция 70, подфункция 9 - создание папки. ============= |
4524 | ====================================================================== |
4524 | ====================================================================== |
4525 | à ¬¥âàë: |
4525 | Параметры: |
4526 | * eax = 70 - ®¬¥à äãªæ¨¨ |
4526 | * eax = 70 - номер функции |
4527 | * ebx = 㪠§ â¥«ì ¨ä®à¬ 樮ãî áâàãªâãàã |
4527 | * ebx = указатель на информационную структуру |
4528 | ®à¬ â ¨ä®à¬ 樮®© áâàãªâãàë: |
4528 | Формат информационной структуры: |
4529 | * +0: dword: 9 = ®¬¥à ¯®¤äãªæ¨¨ |
4529 | * +0: dword: 9 = номер подфункции |
4530 | * +4: dword: 0 (§ १¥à¢¨à®¢ ®) |
4530 | * +4: dword: 0 (зарезервировано) |
4531 | * +8: dword: 0 (§ १¥à¢¨à®¢ ®) |
4531 | * +8: dword: 0 (зарезервировано) |
4532 | * +12 = +0xC: dword: 0 (§ १¥à¢¨à®¢ ®) |
4532 | * +12 = +0xC: dword: 0 (зарезервировано) |
4533 | * +16 = +0x10: dword: 0 (§ १¥à¢¨à®¢ ®) |
4533 | * +16 = +0x10: dword: 0 (зарезервировано) |
4534 | * +20 = +0x14: ASCIIZ-¨¬ï ¯ ¯ª¨, ¯à ¢¨« ä®à¬¨à®¢ ¨ï ¨¬ñ 㪠§ ë ¢ |
4534 | * +20 = +0x14: ASCIIZ-имя папки, правила формирования имён указаны в |
Line 4535... | Line 4535... | ||
4535 | ®¡é¥¬ ®¯¨á ¨¨ |
4535 | общем описании |
4536 | ¨«¨ |
4536 | или |
4537 | * +20 = +0x14: db 0 |
4537 | * +20 = +0x14: db 0 |
4538 | * +21 = +0x15: dd 㪠§ ⥫ì ASCIIZ-áâபã á ¨¬¥¥¬ ¯ ¯ª¨ |
4538 | * +21 = +0x15: dd указатель на ASCIIZ-строку с именем папки |
4539 | ®§¢à é ¥¬®¥ § 票¥: |
4539 | Возвращаемое значение: |
4540 | * eax = 0 - ãᯥè®, ¨ ç¥ ª®¤ ®è¨¡ª¨ ä ©«®¢®© á¨á⥬ë |
4540 | * eax = 0 - успешно, иначе код ошибки файловой системы |
4541 | * ebx à §àãè ¥âáï |
4541 | * ebx разрушается |
4542 | ¬¥ç ¨ï: |
4542 | Замечания: |
4543 | * ãªæ¨ï ¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï CD (¢¥àñâáï ª®¤ ®è¨¡ª¨ 2). |
4543 | * Функция не поддерживается для CD (вернётся код ошибки 2). |
4544 | * ®¤¨â¥«ìáª ï ¯ ¯ª ¤®«¦ 㦥 áãé¥á⢮¢ âì. |
4544 | * Родительская папка должна уже существовать. |
4545 | * ᫨ ¯ ¯ª 㦥 áãé¥áâ¢ã¥â, äãªæ¨ï § ¢¥àè¨âáï ãá¯¥è® (eax=0). |
4545 | * Если папка уже существует, функция завершится успешно (eax=0). |
4546 | 4546 | ||
4547 | ====================================================================== |
4547 | ====================================================================== |
4548 | === ãªæ¨ï 71, ¯®¤äãªæ¨ï 1 - ãáâ ®¢¨âì § £®«®¢®ª ®ª ¯à®£à ¬¬ë. == |
4548 | === Функция 71, подфункция 1 - установить заголовок окна программы. == |
Line 4549... | Line 4549... | ||
4549 | ====================================================================== |
4549 | ====================================================================== |
4550 | à ¬¥âàë: |
4550 | Параметры: |
4551 | * eax = 71 - ®¬¥à äãªæ¨¨ |
4551 | * eax = 71 - номер функции |
Line 4552... | Line 4552... | ||
4552 | * ebx = 1 - ®¬¥à ¯®¤äãªæ¨¨ |
4552 | * ebx = 1 - номер подфункции |
4553 | * ecx = ¤à¥á áâப¨ § £®«®¢ª |
4553 | * ecx = адрес строки заголовка |
4554 | ®§¢à é ¥¬®¥ § 票¥: |
4554 | Возвращаемое значение: |
4555 | * äãªæ¨ï ¥ ¢®§¢à é ¥â § 票ï |
4555 | * функция не возвращает значения |
4556 | ¬¥ç ¨ï: |
4556 | Замечания: |
4557 | * âப § £®«®¢ª ¤®«¦ ¡ëâì ¢ ä®à¬ ⥠ASCIIZ. § £®«®¢ª¥ |
4557 | * Строка заголовка должна быть в формате ASCIIZ. В заголовке |
4558 | ®â®¡à ¦ ¥âáï ¥ ¡®«¥¥ 255 ᨬ¢®«®¢ ¥§ ¢¨á¨¬® ®â ¯®«®© ¤«¨ë |
4558 | отображается не более 255 символов независимо от полной длины |
4559 | áâப¨. |
4559 | строки. |
4560 | * ⮡ë ã¡à âì § £®«®¢®ª, ¯¥à¥¤ ©â¥ NULL ¢ ecx. |
4560 | * Чтобы убрать заголовок, передайте NULL в ecx. |
Line 4561... | Line 4561... | ||
4561 | 4561 | ||
4562 | ====================================================================== |
4562 | ====================================================================== |
4563 | ================ ãªæ¨ï 72 - ¯®á« âì á®®¡é¥¨¥ ®ªã. ================ |
4563 | ================ Функция 72 - послать сообщение окну. ================ |
4564 | ====================================================================== |
4564 | ====================================================================== |
Line 4565... | Line 4565... | ||
4565 | 4565 | ||
4566 | --- ®¤äãªæ¨ï 1 - ¯®á« âì á®®¡é¥¨¥ á ¯ à ¬¥â஬ ªâ¨¢®¬ã ®ªã. ---- |
4566 | --- Подфункция 1 - послать сообщение с параметром активному окну. ---- |
Line 4567... | Line 4567... | ||
4567 | à ¬¥âàë: |
4567 | Параметры: |
4568 | * eax = 72 - ®¬¥à äãªæ¨¨ |
4568 | * eax = 72 - номер функции |
4569 | * ebx = 1 - ®¬¥à ¯®¤äãªæ¨¨ |
4569 | * ebx = 1 - номер подфункции |
4570 | * ecx = ª®¤ ᮡëâ¨ï: 2 ¨«¨ 3 |
4570 | * ecx = код события: 2 или 3 |
4571 | * edx = ª®¤ ª« ¢¨è¨ ¤«ï ecx=2, ¨¤¥â¨ä¨ª â®à ª®¯ª¨ ¤«ï ecx=3 |
4571 | * edx = код клавиши для ecx=2, идентификатор кнопки для ecx=3 |
4572 | ®§¢à é ¥¬®¥ § 票¥: |
4572 | Возвращаемое значение: |
4573 | * eax = 0 - ãá¯¥è® |
4573 | * eax = 0 - успешно |
4574 | * eax = 1 - ¡ãä¥à § ¯®«¥ |
4574 | * eax = 1 - буфер заполнен |
4575 | 4575 | ||
4576 | ====================================================================== |
4576 | ====================================================================== |
4577 | ===================== ãªæ¨ï 73 - blit bitmap ===================== |
4577 | ===================== Функция 73 - blit bitmap ===================== |
4578 | ====================================================================== |
4578 | ====================================================================== |
4579 | ¡«¨â - ª®¯¨à®¢ ¨¥ ¡¨â®¢®£® ¬ áᨢ |
4579 | блит - копирование битового массив |
4580 | 4580 | ||
4581 | à ¬¥âàë: |
4581 | Параметры: |
4582 | * eax = 73 - ®¬¥à äãªæ¨¨ |
4582 | * eax = 73 - номер функции |
4583 | 4583 | ||
4584 | * ebx = ROP ¨ ®¯æ¨® «ìë¥ ä« £¨ |
4584 | * ebx = ROP и опциональные флаги |
4585 | 31 6 5 4 3 0 |
4585 | 31 6 5 4 3 0 |
4586 | [ reserved ][T][B][ROP] |
4586 | [ reserved ][T][B][ROP] |
4587 | ROP - ª®¤ à áâ஢ëå ®¯¥à 権 |
4587 | ROP - код растровых операций |
4588 | 0: ª®¯¨à®¢ âì |
4588 | 0: копировать |
4589 | 1-15: १¥à¢¨à®¢ ® |
4589 | 1-15: Зарезервировано |
4590 | B - ¡«¨â ä®®¢ãî ¯®ä¥àå®áâì |
4590 | B - блит на фоновую поферхность |
4591 | T - ¡«¨â á ¯à®§à ç®áâìî |
4591 | T - блит с прозрачностью |
4592 | 4592 | ||
4593 | * ecx = 㪠§ â¥«ì ¯ à ¬¥âàë äãªæ¨¨ |
4593 | * ecx = указатель на параметры функции |
4594 | ᬥ饨¥ 楫¨ÿ¨ ®âá¥ç¥¨¥ |
4594 | смещение цели и отсечение |
4595 | +0 signed dword: ᬥ饨¥ ¯® X ®ª , ¤«ï 楫¥¢®£® ¯àאַ㣮«ì¨ª |
4595 | +0 signed dword: смещение по X окна, для целевого прямоугольника |
4596 | ¢¥à娩 «¥¢ë© 㣮« |
4596 | верхний левый угол |
4597 | +4 signed dword: ᬥ饨¥ ¯® Y ®ª , ¤«ï 楫¥¢®£® ¯àאַ㣮«ì¨ª |
4597 | +4 signed dword: смещение по Y окна, для целевого прямоугольника |
4598 | ¢¥à娩 «¥¢ë© 㣮« |
4598 | верхний левый угол |
4599 | +8 dword: è¨à¨ 楫¥¢®£® ¯àאַ㣮«ì¨ª |
4599 | +8 dword: ширина целевого прямоугольника |
4600 | +12 dword: ¢ëá®â 楫¥¢®£® ¯àאַ㣮«ì¨ª |
4600 | +12 dword: высота целевого прямоугольника |
4601 | 4601 | ||
4602 | ᬥ饨¥ ¨á室¨ª ÿ¨ ®âá¥ç¥¨¥ |
4602 | смещение исходника и отсечение |
4603 | +16 signed dword: ᬥ饨¥ ¯® X bitmap, ¤«ï ¨á室®£® ¯àאַ㣮«ì¨ª |
4603 | +16 signed dword: смещение по X bitmap, для исходного прямоугольника |
4604 | ¢¥à娩 «¥¢ë© 㣮« |
4604 | верхний левый угол |
4605 | +20 signed dword: ᬥ饨¥ ¯® Y bitmap, ¤«ï ¨á室®£® ¯àאַ㣮«ì¨ª |
4605 | +20 signed dword: смещение по Y bitmap, для исходного прямоугольника |
4606 | ¢¥à娩 «¥¢ë© 㣮« |
4606 | верхний левый угол |
4607 | +24 dword: è¨à¨ ¨á室®£® ¯àאַ㣮«ì¨ª |
4607 | +24 dword: ширина исходного прямоугольника |
4608 | +28 dword: ¢ëá®â ¨á室®£® ¯àאַ㣮«ì¨ª |
4608 | +28 dword: высота исходного прямоугольника |
4609 | 4609 | ||
4610 | +32: dword: ¤ ë¥ bitmap - ¤®«¦ë ¡ëâì 32bpp |
4610 | +32: dword: данные bitmap - должны быть 32bpp |
4611 | +36: dword: à §¬¥à áâப¨ bitmap ¢ ¡ ©â å |
4611 | +36: dword: размер строки bitmap в байтах |
4612 | 4612 | ||
4613 | ®§¢à é ¥¬®¥ § 票¥: |
4613 | Возвращаемое значение: |
4614 | * äãªæ¨ï ¥ ¢®§¢à é ¥â § 票ï |
4614 | * функция не возвращает значения |
4615 | 4615 | ||
4616 | ====================================================================== |
4616 | ====================================================================== |
4617 | ========== ãªæ¨ï -1 - § ¢¥àè¨âì ¢ë¯®«¥¨¥ ¯®â®ª /¯à®æ¥áá ========= |
4617 | ========== Функция -1 - завершить выполнение потока/процесса ========= |
4618 | ====================================================================== |
4618 | ====================================================================== |
4619 | à ¬¥âàë: |
4619 | Параметры: |
4620 | * eax = -1 - ®¬¥à äãªæ¨¨ |
4620 | * eax = -1 - номер функции |
4621 | ®§¢à é ¥¬®¥ § 票¥: |
4621 | Возвращаемое значение: |
4622 | * äãªæ¨ï ¥ ¢®§¢à é ¥â ¨ § 票ï, ¨ ã¯à ¢«¥¨ï |
4622 | * функция не возвращает ни значения, ни управления |
4623 | ¬¥ç ¨ï: |
4623 | Замечания: |
4624 | * ᫨ ¯à®æ¥áá  ¥ ᮧ¤ ¢ « ¯®â®ª®¢, â® ã ¥£® ¥áâì ⮫쪮 |
4624 | * Если процесс явно не создавал потоков, то у него есть только |
4625 | ®¤¨ ¯®â®ª, § ¢¥à襨¥ ª®â®à®£® ¯à¨¢®¤¨â ª § ¢¥àè¥¨î ¯à®æ¥áá . |
4625 | один поток, завершение которого приводит к завершению процесса. |
4626 | * ᫨ ⥪ã騩 ¯®â®ª - ¯®á«¥¤¨© ¢ ¯à®æ¥áá¥, â® ¥£® § ¢¥à襨¥ |
4626 | * Если текущий поток - последний в процессе, то его завершение |
4627 | â ª¦¥ ¯à¨¢®¤¨â ª § ¢¥àè¥¨î ¯à®æ¥áá . |
4627 | также приводит к завершению процесса. |
4628 | * â äãªæ¨ï § ¢¥àè ¥â ⥪ã騩 ¯®â®ª. à㣮© ¯®â®ª ¬®¦® ¯à¨¡¨âì |
4628 | * Эта функция завершает текущий поток. Другой поток можно прибить |
4629 | ¢ë§®¢®¬ ¯®¤äãªæ¨¨ 2 äãªæ¨¨ 18. |
4629 | вызовом подфункции 2 функции 18. |
4630 | 4630 | ||
4631 | ====================================================================== |
4631 | ====================================================================== |
4632 | =========================== ¯¨á®ª ᮡë⨩ =========================== |
4632 | =========================== Список событий =========================== |
4633 | ====================================================================== |
4633 | ====================================================================== |
4634 | ç¥à¥¤®¥ ᮡë⨥ ¬®¦® ¯®«ãç¨âì ¢ë§®¢®¬ ®¤®© ¨§ äãªæ¨© 10 |
4634 | Очередное событие можно получить вызовом одной из функций 10 |
4635 | (®¦¨¤ âì ᮡëâ¨ï), 11 (¯à®¢¥à¨âì ¡¥§ ®¦¨¤ ¨ï), 23 |
4635 | (ожидать события), 11 (проверить без ожидания), 23 |
4636 | (®¦¨¤ âì ¢ â¥ç¥¨¥ § ¤ ®£® ¢à¥¬¥¨). |
4636 | (ожидать в течение заданного времени). |
4637 | ⨠äãªæ¨¨ ¢®§¢à é îâ ⮫쪮 ⥠ᮡëâ¨ï, ª®â®àë¥ ¢å®¤ïâ ¢ ¬ áªã, |
4637 | Эти функции возвращают только те события, которые входят в маску, |
4638 | ãáâ ¢«¨¢ ¥¬ãî äãªæ¨¥© 40. ® 㬮«ç ¨î íâ® ¯¥à¢ë¥ âà¨, 祣® |
4638 | устанавливаемую функцией 40. По умолчанию это первые три, чего |
4639 | ¢¯®«¥ ¤®áâ â®ç® ¤«ï ¬®£¨å ¯à¨«®¦¥¨©. |
4639 | вполне достаточно для многих приложений. |
4640 | ®¤ë ᮡë⨩: |
4640 | Коды событий: |
4641 | * 1 = á®®¡é¥¨¥ ® ¯¥à¥à¨á®¢ª¥ (á¡à áë¢ ¥âáï ¯à¨ ¢ë§®¢¥ äãªæ¨¨ 0) |
4641 | * 1 = сообщение о перерисовке (сбрасывается при вызове функции 0) |
4642 | * 2 = ¦ â ª« ¢¨è ª« ¢¨ âãॠ(¯®áâ㯠¥â, ⮫쪮 ª®£¤ ®ª® |
4642 | * 2 = нажата клавиша на клавиатуре (поступает, только когда окно |
4643 | ªâ¨¢®) ¨«¨ ¦ â "£®àïç ï ª« ¢¨è "; |
4643 | активно) или нажата "горячая клавиша"; |
4644 | á¡à áë¢ ¥âáï, ª®£¤ ¢á¥ ª« ¢¨è¨ ¨§ ¡ãä¥à áç¨â ë äãªæ¨¥© 2 |
4644 | сбрасывается, когда все клавиши из буфера считаны функцией 2 |
4645 | * 3 = ¦ â ª®¯ª , ®¯à¥¤¥«ñ ï à ¥¥ äãªæ¨¥© 8 (¨«¨ ª®¯ª |
4645 | * 3 = нажата кнопка, определённая ранее функцией 8 (или кнопка |
4646 | § ªàëâ¨ï, ᮧ¤ ï ¥ï¢® äãªæ¨¥© 0; ª®¯ª ¬¨¨¬¨§ 樨 |
4646 | закрытия, созданная неявно функцией 0; кнопка минимизации |
4647 | ®¡à ¡ âë¢ ¥âáï á¨á⥬®© ¨ ® ¥© á®®¡é¥¨ï ¥ ¯à¨å®¤¨â; |
4647 | обрабатывается системой и о ней сообщения не приходит; |
4648 | ¯®áâ㯠¥â, ⮫쪮 ª®£¤ ®ª® ªâ¨¢®; á¡à áë¢ ¥âáï, ª®£¤ ¢á¥ |
4648 | поступает, только когда окно активно; сбрасывается, когда все |
4649 | ª®¯ª¨ ¨§ ¡ãä¥à áç¨â ë äãªæ¨¥© 17) |
4649 | кнопки из буфера считаны функцией 17) |
4650 | * 4 = § १¥à¢¨à®¢ ® (¢ ⥪ã饩 ॠ«¨§ 樨 ¨ª®£¤ ¥ ¯à¨å®¤¨â ¤ ¦¥ |
4650 | * 4 = зарезервировано (в текущей реализации никогда не приходит даже |
4651 | ¯à¨ à §¬ ᪨஢ª¥ äãªæ¨¥© 40) |
4651 | при размаскировке функцией 40) |
4652 | * 5 = § ¢¥à訫 áì ¯¥à¥à¨á®¢ª ä® à ¡®ç¥£® á⮫ |
4652 | * 5 = завершилась перерисовка фона рабочего стола |
4653 | * 6 = ᮡë⨥ ®â ¬ëè¨ (çâ®-â® á«ã稫®áì - ¦ ⨥ ª®¯ªã ¬ëè¨ |
4653 | * 6 = событие от мыши (что-то случилось - нажатие на кнопку мыши |
4654 | ¨«¨ ¯¥à¥¬¥é¥¨¥; á¡à áë¢ ¥âáï ¯à¨ ¯à®ç⥨¨) |
4654 | или перемещение; сбрасывается при прочтении) |
4655 | * 7 = ¯à®¨§®è«® ᮡë⨥ IPC (ᬮâਠäãªæ¨î 60 - Inter Process |
4655 | * 7 = произошло событие IPC (смотри функцию 60 - Inter Process |
4656 | Communication; á¡à áë¢ ¥âáï ¯à¨ ¯à®ç⥨¨) |
4656 | Communication; сбрасывается при прочтении) |
4657 | * 8 = ¯à®¨§®è«® á¥â¥¢®¥ ᮡë⨥ (á¡à áë¢ ¥âáï ¯à¨ ¯à®ç⥨¨; |
4657 | * 8 = произошло сетевое событие (сбрасывается при прочтении; |
4658 | ᬮâà¨ à ¡®âã á á¥âìî) |
4658 | смотри работу с сетью) |
4659 | * 9 = ¯à®¨§®è«® ®â« ¤®ç®¥ ᮡë⨥ (á¡à áë¢ ¥âáï ¯à¨ ¯à®ç⥨¨; |
4659 | * 9 = произошло отладочное событие (сбрасывается при прочтении; |
4660 | ᬮâਠ®â« ¤®çãî ¯®¤á¨á⥬ã) |
4660 | смотри отладочную подсистему) |
4661 | * 16..31 = ¯à®¨§®è«® ᮡë⨥ á ᮮ⢥âáâ¢ãî騬 IRQ |
4661 | * 16..31 = произошло событие с соответствующим IRQ |
4662 | (16=IRQ0, 31=IRQ15) (á¡à áë¢ ¥âáï ¯à¨ áç¨âë¢ ¨¨ ¢á¥å ¤ ëå IRQ) |
4662 | (16=IRQ0, 31=IRQ15) (сбрасывается при считывании всех данных IRQ) |
4663 | 4663 | ||
4664 | ====================================================================== |
4664 | ====================================================================== |
4665 | ==================== ®¤ë ®è¨¡®ª ä ©«®¢®© á¨á⥬ë ==================== |
4665 | ==================== Коды ошибок файловой системы ==================== |
4666 | ====================================================================== |
4666 | ====================================================================== |