Subversion Repositories Kolibri OS

Rev

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
======================================================================