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 драйвер устройства. На самом деле может быть что угодно. В основной памяти резервируется место под файл и передается управление в начало кода. Все дальнейшие операции производит сам. В качестве хэндла указывать систему. Ред. Ну, а теперь представляем Вашему внима- нию лицевую часть тела ХАОСА, так как кроме скриншотов мы вам больше предложить ни чего не можем.
Другие статьи номера:
Похожие статьи:
В этот день... 10 сентября