Inferno #04
22 июня 2003
  Софт  

Sofтинка - Описание графической оболочки для дисковой системы TR-DOS - ChAOS.


Программное обеспечение Описание Операционные системы Прочие

                  ChAOS

 Vitamin 

ChAOS (С) представляет собой графическую
оболочку для дисковой системы TR-DOS.
Основные ее возможности:

-вытесняющая многозадачность
 -до 16 процессов в реальном режиме
 -до 24 потоков на прерываниях
-оконная среда
 -до 16 окон (*)
-основанная на сообщениях диспетчеризация
-поддержка всех основных стандартов памяти
 вплоть до 1 мегабайта (**)
-поддержка любых носителей информации,
 совместимых с TR-DOS
-многое другое...

------------------------------------------ 
(*) типа каждому приложению по окну. Но я 
не думаю, что вы сможете запустить 16 про- 
цессов :) Расширение возможно, но 
геморрно... 
(**) без особых проблем расширяется до 
16384*256=4мб 

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 

Люди! Хочу поставить вас в известность,что 
Спектрум  вам  все-таки не писюк, где мно- 
гозадачность  предусмотрена  на аппаратном 
уровне.Поэтому все работает не так быстро, 
как хотелось бы (но быстрее, чем ожидалось 
:), да  и надежность системы оставляет же- 
лать  лучшего - некорректный  вызов  левых 
процедур или неточность в коде повесят вам 
всю систему (в лучшем случае просто затор- 
мозят, как это бывает при простом зацикли- 
вании). 

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 

Обозначения 
----------- 

Приложение, процесс - задача, выполняемая
 в реальном режиме
Поток, нить - резидент на прерываниях
Страница - банк верхней памяти
Блок - участок памяти в 256 байт в нижней
 памяти
Верхняя память - страницы, находящиеся с
 адреса #C000
Нижняя память - память с адресами
 #8000-#BFFF

Все необходимые  константы и имена описаны
в файле CAPI.W, который находится в прило-
жении.

++++++++++++++++++++++++++++++++++++++++++ 
+ Внимание!!! Я приношу  свои  извинения + 
+ тем людям,которые шарят в программиро- + 
+ вании под винду за некоторые несоотве- + 
+ тствия в терминологии и названиях фун- + 
+ кций.                                  + 
++++++++++++++++++++++++++++++++++++++++++ 

Как это все работает 
(и работает ли вообще? :) 
------------------------- 

В данной оболочке  реализована вытесняющая
(истинная) многозадачность. Как, наверное,
многие догадываются, планировщик задач ви-
сит на прерываниях,а сами задачи выполняю-
тся  в основном режиме. У каждого процесса
имеется  свой  стек, свой код и свои окна.
Одним  из  свойств  процесса  является его
приоритет,который определяет время,которое
процесс  гарантированно сможет проработать
до  тех пор, пока его не прервет планиров-
щик.
Граф работы процесса:

          +-->работает----->-+
          |    ^ |           | 
-запуск--->+    | |           +-->выход--> 
          |    | V           |
          +-->заблокирован->-+

Иными  словами, процесс  может быть создан
заблокированным.Для продолжения его работы
блокировка  должна  быть снята другим про-
цессом.

Планировщик  циклически перебирает все ак-
тивные процессы, давая им всем возможность
поработать. Помимо  планировщика на преры-
ваниях выполняются:

-прорисовка стрелки
-опрос клавиатуры
-выполнение нитей

Процесс  может  быть  снят с выполнения по
следующим причинам:
-его окну послали сообщение на закрытие
-он совершил ошибку во время вызова систе-
 мных функций
-он был снят другим процессом
-он завершился по доброй воле

Хэндлы 
------ 

Каждому  объекту  в системе, будь то окно,
файл  или нить, при создании присваивается
уникальный  на данный момент идентификаци-
онный код,по которому можно определить тип
объекта и его свойства.Этот код называется
хэндлом. Физически  он  представлен в виде
машинного  слова, в  котором  старший байт
обозначает тип объекта,а младший - его но-
мер.

Структура приложения 
-------------------- 

AppDescriptor   Описатель приложения
AppStart        Точка входа в приложение
SPRITE          Буфер печати (2к).
                Если ничего не печатаем,
                можно затирать.

Область от AppDescriptor до AppStart заня-
та как данными приложения,так и системными
переменными. Просьба туда не лазить.

Область  от  AppStart до SPRITE приложение
может использовать по своему усмотрению.

Для того,чтобы процесс мог общаться с сис-
темой, он должен зарегистрировать под себя
хотя бы одно окно. Оно может быть не видно
на экране, но оно необходимо для получения
сообщений. (В принципе, можно два процесса
повесить  на  одно окно, только между ними
должна быть связь.)

В качестве  основных параметров приложения
служат  его приоритет, флаги и иконка. Все
это расположено в области описания.

Приложение должно состоять из трех частей:

-раздел инициализации
-цикл приема сообщений
-обработка сообщений

Каждое приложение занимает страницу в вер-
хней  памяти и один блок в основной памяти
для стека. При запуске управление передае-
тся на AppStart  вместе  с хэндлом данного
приложения. Младший байт хэндла определяет
страницу,в котором оно находится (ее поря-
дковый номер).Цикл сообщений принимает со-
общения для данного окна.Если в приложении
несколько окон,то циклы должны быть реали-
зованы  для  всех окон поочередно. Если ни
одно  окно не получает актуальных соообще-
ний,то можно пропустить квант времени,уде-
ленный приложению,передав его другому.Цикл
состоит из трех частей:

-прием сообщения
-обработка (стандартно или нет)
-ответ на сообщение

Ограничения на работу приложений:

-нельзя переназначать стек в верхнюю
 память
-при переназначении стека предусмотреть
 резерв на 22 байта
-нельзя запрещать и разрешать прерывания
-нельзя переназначать вектор прерывания
-использование нестандартных функций не
 гарантирует стабильную работу приложения
-при посылке сообщения wmClose главному
 окну приложения должен быть произведен
 выход из приложения
-значения параметров окон,приложения,
 нитей,описанные в коде,могут не совпадать
 с их значением в данное время.
 Для обновления данных нужно использовать
 специальные функции
-необходимо проверять результат функций
 запроса памяти, окон, нитей и т.д.

Память 
------ 

В системе предусмотрены функции менеджмен-
та памяти двух видов:блочные и страничные.
Приложение  может  зарезервировать на свой
хэндл блоки или страницы. При его закрытии
вся занимаемая им ранее память освобождае-
тся и может быть использована другими при-
ложениями. В  системе  различают  два типа
страниц - страницы кода и страницы данных.
Различие в том,что страниц кода может быть
не более 16,причем они выделяются с начала
памяти, а  страницы  данных могут занимать
всю  остальную верхнюю память и выделяются
они с конца  памяти. Количество  доступных
страниц  определяется  при выборе драйвера
памяти.

Карта памяти 

#5e00 Системный керналь
#6000 Переменные
#8000 Буфер. Используется для стеков,
      резидентов и т.д.
      Большая его часть занята системой -
      код очень велик :)
#c000 Приложение

Окна 
---- 

Окна  являются основным элементом приложе-
ния. Создание  окна происходит в несколько
этапов.
-Регистрация окна.Система возвращает хэндл
 созданного окна.
-Создание формы.В области памяти,оговорен-
 ной при регистрации,создается графическое
 изображение окна, соответствующее описан-
 ному. Система  поддерживает скины, позво-
 ляющие менять внешний вид окон.
-Построение  окна. На форму помещаются все
 описанные компоненты. Гибкая система поз-
 воляет создавать различные компоненты.
-Отображение  окна. На  экране  появляется
 созданное окно.

Далее  происходит  цикл приема сообщений и
их обработка.Для работы с компонентами ок-
на есть функции, определяющие,какой компо-
нент  сейчас активизируется и что надо де-
лать.

Нити 
---- 

Нитью называется небольшая процедурка, ко-
торая вызывается каждое прерывание.Она до-
лжна быть достаточно быстрой,чтобы не тор-
мозить систему.При создании нити указываю-
тся параметры - активность нити и ее рези-
дентность. Используются они,в основном,для
отсчета времени,переработки небольших объ-
емов данных.

Внешние устройства 
------------------ 

Клавиатура.  Используется  для  управления
стрелкой и ввода текстовой информации.Име-
ется буфер на 32 элемента.Русификация осу-
ществляется отдельной нитью.
Мышь. Поддерживается  стандартная трехкно-
почная кемпстон-мышь.
Джойстик. Тут и сказать нечего :)
Дисковод. Поддерживается  до 16 дисков. По
умолчанию, первые  4  обслуживает  драйвер
#3d13 с обработкой ошибок.Через дополните-
льные драйвера можно использовать и другие
носители (типа  RAM-Disk'a),  Максимальный
объем - 1 мб.(256 треков по 16 секторов по
256 байт).
Музыкальный сопроцессор. Никаких ограниче-
ний на его использование нет.Если несколь-
ко приложений  одновременно попытаются иг-
рать музыку,то будут искажения в виде тре-
ска.

Динамические библиотеки 
----------------------- 

Для расширения функций системы используют-
ся динамические библиотеки.Если приложение
делает  запрос  на  подключение какой-либо
библиотеки,которая до этого не использова-
лась, то  происходит  выделение памяти под
эту библиотеку и ее загрузка,а также реги-
страция вызывающего приложения как пользо-
вателя данной библиотеки.Если же такая би-
блиотека  существовала до этого в системе,
то  новое  приложение просто подключается.
Приложение  может  использовать библиотеки
самостоятельно. В таком  случае  оно  само
должно  загрузить файл в память и произве-
сти инициализацию. При  вызове стандартных
функций инициализация происходит автомати-
чески.

Файлы 
----- 

Существует  три  уровня  работы  с диском:
символьный доступ к файлам, работа с файл-
ом целиком и использование функций  драйв-
еров. При  символьном  доступе  необходимо
открыть файл для чтения или записи и  про-
изводить чтение и запись в данный файл по-
байтно. При этом в памяти организуется бу-
фер для данного файла и счетчик доступа.
Доступ  должен  производиться  в  пределах
длины файла. При работе с файлом  целиком,
запись  происходит  напрямую  на диск, при
этом файл не регистрируется в системе. За-
пись  файла может происходить разными спо-
собами. Если  файл  с таким именем уже су-
ществует, то  система может переписать су-
ществующий файл новым. Запись  также может
производиться в пустую область диска, за-
нятую удаленными файлами.

Свойства объектов 
----------------- 

Ниже будут перечислены свойства всех объе-
ктов системы и некоторые значения, которые
эти свойства могут принимать.Если говорит-
ся, что допустимы значения,то возможно ис-
пользование только одного значения из воз-
можных, а если  возможны сочетания, то все
нижеописанные  константы можно применять в
любом порядке с использованием поразрядной
конъюнкции (OR, |).

В описании  будет использоваться так назы-
ваемая "венгерская запись". Это значит,что
по имени переменной,точнее по ее префиксу,
можно  узнать  ее тип и занимаемое место в
памяти.

Префикс | Тип          | Размер 
--------+--------------+---------- 
  b    | байт         |  1 байт
  w    | слово        |  2 байта
  p    | указатель    |  2 байта
 ps    | указатель    |  2 байта 
       | на строку    | 
 im    | изображение  |  9 байт 
       | 8x8 пикселов | 
        | с атрибутами | 
 hdc   | хэндл        |  2 байта

Например. Переменная  bLeft  -  переменная
типа байт, а psText - указатель на строку.
Все строки имеют ASCII-кодировку со следу-
ющими дополнительными кодами:

26/27 включить/выключить полужирный шрифт
28/29                    наклонный шрифт
30/31                    подчеркивание
0,13  конец текста.
8     табуляция с шагом 32 пиксела

Процесс. 
++++++++ 
Описатель процесса находится в заголовке.
Вот его структура:

psText    Адрес названия приложения, до 14
          символов.
wStack    Стек, инициируется системой.
bPriority Приоритет процесса. Возможные
          значения:
          PRIORITY_IDLE
          PRIORITY_NORMAL
          PRIORITY_HIGH
          PRIORITY_REALTIME
bCounter  Служебная переменная.
bFlag     Флаги процесса. Значение флагов:
          APP_IS_ACTIVE   процесс активен;
          APP_NO_BUTTON   нет кнопки в
                          панели задач;
          APP_TRAY_ICON   иконка в трее;
          APP_IS_HIDDEN   скрытый процесс.
imIcon    Иконка приложения.
wKeyDown  Нажатые в данный момент кнопки.
wKeyPres  Служебная переменная.
bInMode   Режим ввода. Значения флагов:
          RUSSIAN_LNG
          INSERT_MODE

Нить. 
+++++ 
Описатель существует только в системе.
Свойства нити определяются при создании.

Окно. 
+++++ 
Формат описателя:

bLeft     Координаты окна в знакоместах.
bTop
bWidth    Размер окна в знакоместах. Окно
          должно умещаться на экране.
bHeight
bStyle    Стиль окна. Значения флагов:
          WINDOW_HEADER   у окна есть
                          заголовок;
          wINDOW_HIDDEN   окно не видно на
                          экране;
          WINDOW_ON_TOP   окно поверх
                          других окон;
          WINDOW_CLOSE    есть кнопка
                          "закрыть";
          WINDOW_MINIM    есть кнопка
                          "свернуть";
          WINDOW_SYSMNU   есть иконка в
                          заголовке;
hdcParent Хэндл приложения-владельца
          данного окна.
psName    Надпись в заголовке.
pSprite   Спрайт окна.
pDescript Данное описание.
bCursor   Вид стрелки при ее прохождении
          над окном. Возможные значения:
          cArrow          обычная стрелка;
          cHGlass         песочные часы:
          cHand           рука.
pObjects  Объекты окна.

При наличии на экране нескольких окон, для
которых установлен флаг WINDOW_ON_TOP, они
выводятся  в порядке  старшинства хэндлов,
кроме  окна  с хэндлом  1 (панель  задач).
Спрайт окна представляет собой массив зна-
комест  с атрибутами. Суммарный  объем па-
мяти, занимаемый  окном, определяется так:
Size=width*height*9.

Объекты окна. 
+++++++++++++ 
Формат описателя объектов:

db ObjectType
dw Adress
...
db -1           конец описания.

По адресу Adress расположены описатели
объектов одного типа по порядку. Завершает
перечисление байт 255.

Все координаты объектов относительно лево-
го верхнего угла окна.


Объект:                 текст 
Тип:                    TLabel
Формат описателя:

bLeft     Отступ слева в пикселах.
bTop      Отступ сверху в знакоместах.
bWidth    Ширина текста в пикселах. Если
          0, то определяется по тексту.
bStyle    Стиль текста. Значения флагов:
          fNormal         нормальный;
          fBold           полужирный;
          fItalic         наклонный;
          fUnderlined     подчеркнутый:
          fBackColor      в качестве
                          фонового исполь-
                          зовать системный
                          цвет.
spText    Текст.


Объект:                 активная зона 
Тип:                    TZone
Формат описателя:

bLeft     Координаты и размер в пикселах.
bTop
bWidth
bHeight
bFlag     Флаг зоны. Допустимо значение
          BLOCKED.


Объект:                 изображение 
Тип:                    TImage
Формат описателя:

bLeft     Координаты в знакоместах.
bWidth
pSprite   Данные.

Формат спрайта.
        db width
        db height
        db flag ;0 бит - маска
                 1 бит - атрибуты

Далее идут данные в формате 8 байт данных
знакоместа+1 байт атрибутов.(в случае мас-
ки, байты  чередуются, начиная  с маски. У
атрибутов тоже есть маска.) Если без атри-
бутов, то на одно знакоместо 8/16 байт.


Объект:                 кнопка 
Тип:                    TButton
Формат описателя:

bLeft     Координаты и ширина в знакомес-
          тах.
bTop
bWidth
bFlag     Допустимо BLOCKED.
psText    Надпись на кнопке. Если 0, то
          текста нет.

Текст на кнопке автоматически центруется.


Объект:                 переключатель 
Тип:                      TCheckBox
Формат описателя:

bLeft     Координаты и ширина в знакомес-
          тах.
bTop
bWidth
bFlag     Допустимы флаги:
          BLOCKED
          CHECKED
psText    Текст сразу за переключателем.


Объект:                 радиогруппа 
Тип:                    TRadioButton
Формат описателя:

bLeft     Координаты и ширина в знакомес-
          тах.
bTop
bWidth
bFlag     Допустимы флаги:
          BLOCKED
          CHECKED
psText    Текст сразу за переключателем.

Параметры такие же, как и у переключателя.
Данный  описатель  создает один переключа-
тель. Каждая отдельно описанная группа пе-
реключателей  в WindowObjects представляет
собой связанную группу.


Объект:                 скроллбар 
Тип:                    TScrollBar
Формат описателя:

bLeft     Координаты и размер в знакомес-
          тах.
bTop
bSize
bFlag     Допустимы флаги:
          BLOCKED
          VERTICAL | HORIZONTAL
wItems    Всего элементов в списке.
bViewItems Видимых сразу.
wVariable Служебные переменные.
wPosition Позиция от 0.


Объект:                 трэкбар 
Тип:                    TTrackBar
Формат описателя:

bLeft     Координаты и размер в знакомес-
          тах.
bTop
bSize
bFlag     Допустимы флаги:
          BLOCKED
          VERTICAL | HORIZONTAL
bMax      Количество позиций.
bPosition Позиция от 0 до bMax-1.


Объект:                 редактор 
Тип:                    TEdit
Формат описателя:

bLeft     Координаты и размер в знакомес-
          тах.
bTop
bWidth
bFlag     Допустимы флаги:
          BLOCKED
          edOldIndex
          edKeepFocus
bLength   Длина редактируемого текста.
psText    Текст.

edOldIndex - использовать  старую  позицию
курсора.Обычно она меняется в соответствии
с местом, в которое указали стрелкой.
edKeepFocus - не терять фокус ввода при
переключении окон.


Перечень CAPI-функций 
--------------------- 

Арифметические функции. 
+++++++++++++++++++++++ 
Обозначения:

rr1->rr2
     ^^^
     результат
^^^
исходные данные.

rr1<- исходные данные.
rr2-> результат.

HL(X,Y)- в регистре H-x, L-y.

Функции расчета адресов:

D_HL_
D_DE_
U_HL_
U_DE_
ATR_CONVERT_ -адрес в экранной области
              переводит в адрес атрибутов
              соответствующего знакоместа.
              HL->HL

COOR_Z_      -расчет адреса в экране по
              знакоместам.
              HL(X,Y)->HL

COOR_ATR_    -расчет адреса атрибутов по
              знакоместам.
              HL(X,Y)->HL

COLOMN_      -расчет адреса в экране по
              пикселам.
              B(Y)->HL

MULS_        -умножение
              HL=H*A
MULT_         HL=DE*A
Mult_         HL=B*C

SQRT_        -квадратный корень
              (C) Cardinal/PGC/BDA
              HL->HL

Sqr_         -квадрат
              HL=L*L

DIV_         -деление
              HL=HL/DE
Div_          DE=DE/BC с округлением.

STR_         -перевод числа в стринг:
              DE- адрес текста;
              с=0 A->(DE)
              c=1 HL->(DE)

VAL_         -перевод стринга в число.
              (DE)->HL Конвертация идет до
              встречи символа, не равного
              цифре.

Графические функции. 
++++++++++++++++++++ 
ClearRect_     -очистка прямоугольной
                области в окне.
                BC(X,Y) -размеры в
                         знакоместах;
                HL(X,Y) -координаты на
                         окне;
                IX -дескриптор окна;
                A -цвет заполнения
                   атрибутов.

EmbedSpr_      -внедрение спрайта в окно.
                DE -адрес данных;
                HL -хэндл окна;
                BC(X,Y) -координаты
                         относительно окна

EmbedButton_   -внедрение кнопки в окно.
                IX -дескриптор окна;
                HL(X,Y) -координаты по
                         окну;
                DE -адрес текста;
                B -ширина.

EmbedCheckBox_ -внедрение переключателя в
                окно.
                IX -дескриптор окна;
                HL(X,Y) -координаты по
                         окну;
                DE -адрес текста;
                B -ширина;
                A -флаг.

EmbedRadio_    -внедрение компонента
                радиогруппы в окно.
                IX -дескриптор окна;
                HL(X,Y) -координаты по
                         окну;
                DE -адрес текста;
                B -ширина;
                A -флаг.

EmbedScrollBar_ -внедрение скроллбара в
                окно.
                IX -дескриптор окна;
                HL -адрес дескриптора
                    данного объекта.

EmbedTrackBar_ -внедрение трэкбара в окно.
                IX -дескриптор окна;
                HL -адрес дескриптора
                    данного объекта.

PushButt_      -"нажатие" кнопки 1х1
                знакоместо.
                DE(Y,X) -координаты на
                         экране.

PushButton_    -"нажатие" кнопки.
                HL(X,Y) -координаты на
                         экране;
                B -ширина в знакоместах.

Работа с текстом. 
+++++++++++++++++ 
GetTextWidth_ -узнать ширину текста в
               пикселах.
               DE->A

ClearBuf_     -очистка буфера печати на
               256 пикселов.
               HL,DE,BC- сохраняются.

OutTextXY_    -вывод текста на экран с
               указанными координатами.
               DE- текст
               HL(X,Y)- координаты печати
               C- ширина печати в пикселах
                  (0 - не ограничена).
               A- стиль текста
               IX- дескриптор окна.

WriteTo_      -вывод текста в буфер.
               HL- адрес буфера.
               X_P- отступ слева.
               Все остальные параметры
               такие же. Буфер в формате
               экрана.

Editor_       -редактор текста. Если уста-
               новлен флаг edOldIndex, то
               курсор ввода находится в
               старой позиции, иначе - в
               месте, указанном курсором.
               При потере окном фокуса
               ввода происходит проверка
               флага edKeepFocus. Если он
               установлен, то режим ввода
               сохраняется, иначе происхо-
               дит возврат. Функция испо-
               льзует текущий режим ввода,
               и при нажатии несимвольного
               сочетания клавиш происходит
               выход с посылкой окну сооб-
               щения wmUser с нажатыми
               клавишами в качестве пара-
               метра. При изменении длины
               редактируемого текста вся
               оставшаяся часть забивается
               нулями.
               DE'-хэндл окна;
               HL -адрес объекта;
               DE -координаты стрелки
                   относительно окна;

Оконные функции. 
++++++++++++++++ 
Для хранения информации об окнах в системе
есть  два буфера - буфер дескрипторов, где
хранится вся информация об окнах,существу-
ющих в данный момент в системе, и z-буфер,
в котором  хранится  порядок, в каком окна
будут  выводиться на экран. Поместить окно
на вершину - выводить его последним, соот-
ветственно, поверх всех возможных окон.

Проверки  хэндла на корректность нет, поэ-
тому будьте осторожны.

CreateWindow_     -регистрация окна.
                   IX<- дескриптор;
                   HL-> хэндл окна или -1,
                        если ошибка.

GenerateWindow_   -прорисовка окна в
                   буфере изображения.
                   HL- хэндл окна.

ChangeWindow_     -изменение окна.
                   Происходит копирование
                   дескриптора из памяти в
                   системную таблицу и
                   перерисовка всех окон.
                   HL- хэндл окна.

SafeRepaintWindow_ -перерисовка окна с
                   учетом нахождения над
                   ним стрелки.
                   HL- хэндл окна.

RepaintWindow_    -просто перерисовка
                   окна.
                   HL- хэндл окна.

QuickRefresh_     -быстрая перерисовка
                   части экрана.
                   Применяется при
                   перемещении окна.
                   DE(Y,X)- старые коорди-
                            наты окна,
                            которое должно
                            быть на
                            вершине списка

Refresh_          -перерисовка экрана.

KillWindow_       -удалить окно из таблицы
                   дескрипторов.
                   HL- хэндл окна.

KillWindows_      -удалить все окна
                   данного приложения.
                   HL- хэндл приложения.

BuildWindow_      -вывод на форму объектов
                   окна.
                   HL- хэндл окна.

TestObjects_      -проверка объектов окна.
                   HL<- хэндл окна;
                   DE<- координаты стрелки
                        в пикселах.
                   HL-> адрес объекта, на
                        который указывает
                        стрелка;
                   DE-> координаты стрелки
                   A->  номер объекта;
                   C->  тип объекта.

ProcessObjects_   -стандартно обработать
                   реакцию объекта.
                   Применяется в паре
                   с TestObjects_
                   HL<- адрес объекта, на
                        который указывает
                        стрелка;
                   DE<- координаты стрелки
                   A<-  номер объекта;
                   C<-  тип объекта;
                   DE'<- хэндл окна.

FindFirstWindow_  -найти первое окно
                   приложения.
                   HL<- хэндл приложения.
                   A-> номер окна (младшая
                       часть хэндла).

GetFocus_         -переместить окно на
                   вершину списка окон.
                   HL- хэндл окна.

WinOnTop_         -переместить окно на
                   вершину списка окон и
                   перерисовать экран.
                   HL- хэндл окна.

WinMinimize_      -убрать окно с экрана.
                   HL- хэндл окна.

WinRestore_       -восстановить окно на
                   экран.
                   HL- хэндл окна.

MoveWindow_       -переместить окно.
                   HL- хэндл окна.

GetWindowStatus_  -обновить описатель окна
                   из таблицы дескрипторов
                   HL- хэндл окна.

GetIX_            -взять адрес описателя
                   окна в таблице
                   дескрипторов.
                   HL<- хэндл окна;
                   IX-> адрес описателя
                        (16 байт).

GetIXA_           -взять адрес описателя
                   окна в таблице
                   дескрипторов.
                   A<- номер окна;
                   IX-> адрес описателя
                        (16 байт).

IfOnTop_          -проверка окна.
                   HL<- хэндл окна;
                   A->  результат:
                   0 - окно наверху списка
                   -1 - не наверху.

GetAdr_           -взятие адреса в спрайте
                   окна по координатам.
                   HL(X,Y)<- координаты;
                   IX<- дескриптор окна.
                   HL-> адрес в спрайте.
                   DE,BC- сохраняются.

Работа с памятью. 
+++++++++++++++++ 
Для работы с памятью используйте системные
функции,так как они рассчитаны на прерыва-
ние их работы и восстановление при продол-
жении.
Если результат функций запроса памяти воз-
вращает -1, то это значит,что резервирова-
ния памяти не произошло.В этом случае мож-
но использовать повторные запросы по кван-
там, чтобы не тормозить систему, или выход
из приложения.

Page_            -переключение страниц.
                  Используется текущий
                  драйвер памяти. При
                  доступе к запрещенной
                  области памяти
                  происходит ошибка.
                  A- порядковый номер
                     страницы.

SetDriver_       -установка драйвера
                  памяти.
                  A- mPent128 | mScorpion
                   | mPent512 | mProfi.

GetSysPage_      -зарезервировать
                  системную страницу.
                  HL-> хэндл создаваемого
                       приложения.

GetPage_         -зарезервировать страницу
                  данных.
                  HL<- хэндл приложения;
                  A-> номер страницы.

FreePage_        -освободить страницу.Если
                  приложение пытается
                  освободить чужую
                  страницу, то возникает
                  ошибка.
                  HL<- хэндл приложения;
                  A<- номер страницы.

FreePages_       -освободить все страницы
                  данного приложения.
                  HL<- хэндл приложения.

GetBlocks_       -зарезервировать нижнюю
                  память.
                  HL<- хэндл приложения;
                  B<- количество блоков;
                  HL-> адрес памяти.

FreeBlock_       -освободить блоки в
                  нижней памяти. Если
                  приложение пытается
                  освободить чужую память,
                  то возникает ошибка.
                  A<- номер начала блока;
                  HL<- хэндл приложения;
                  B<- количество
                      освобождаемых блоков

FreeBlocks_      -освободить всю нижнюю
                  память приложения.
                  HL<- хэндл приложения.

GetByte_         -взять байт из верхней
                  памяти.
                  A<- номер страницы;
                  HL<- адрес;
                  A-> данные.

GetFreeBlocks_   -узнать число свободных
                  блоков в нижней памяти.
                  A-> число блоков.

GetFreePages_    -узнать число свободных
                  страниц верхней памяти.
                  A-> число страниц.


Работа с процессами и нитями. 
+++++++++++++++++++++++++++++ 
KillTask_
ExitProcess_
RunApplication_
CreateProcess_
KillProcess_
SkipQuant_
CreateThread_
KillThread_
KillThreads_
GetAppStatus_
SetAppStatus_
SuspendThread_
ReleaseThread_

Работа с файлами. 
+++++++++++++++++ 
FindFile_
ChangeSector_
Flush_
ReadFile_
DeleteFile_
ReadCat_
DosFunc_
GetFileData_
SaveFile_
SaveCat_

Работа со стрелкой. 
+++++++++++++++++++ 
GetFireStatus_
Wait_On_
Wait_Off_
Arr_Yes_
Arr_No_
PRINTS_
RESTS_
KEYS_

Системные функции. 
++++++++++++++++++ 
SendMessage_
GetMessage_
DispatchMessage_
TranslateMessage_
Exit_
IncludeLibrary_
ReleaseLibraries_

Работа с внешними устройствами. 
+++++++++++++++++++++++++++++++ 
ShutAy_
KeyOn_
KeyOff_
GetKey_
PutKey_
SetIm2Mode_
SetIm1Mode_


Установки системы. 

-драйвер памяти;
-список доступных устройств управления
 (мышь, джойстик...);
-установки внешних устройств;
-список драйверов дисков;
-список резидентных программ;
-системная графика;
-цвета;


Установки эксплорера: 

-программы автозагрузки (*);
-рабочий стол (иконки, обои...);

(*) возможно, придется вешать автозагрузку 
в систему. 


Возможные резидентные программы: 

-русификатор (*);
-драйвер колеса мыши:


Виды программ: 

.run стандартное приложение
.dll библиотека. Грузится в основную
     память и инициализируется.
     Происходит регистрация в системе.
.thr нить. В качестве родителя выступает
     процесс, запустивший его.
     Регистрируется сама.
.drv драйвер устройства. На самом деле
     может быть что угодно. В основной
     памяти резервируется место под файл и
     передается управление в начало кода.
     Все дальнейшие операции производит
     сам. В качестве хэндла указывать 
    систему. 

Ред. 

  Ну, а  теперь представляем Вашему внима-
нию  лицевую   часть  тела  ХАОСА, так как
кроме  скриншотов мы вам больше предложить
ни чего не можем.






















Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
For Coderz - Программирование под DNA_OS ZET-9, пакет утилит для работы с устройствами хранения данных.
PROFI CLUB - Изучаем CP/M (совместимость, процессоры, терминалы).
Разное - перспективы: Pink Floyd - новая операционная система для Спектрума.

В этот день...   19 ноября