Программирование для IBM OS2
4cab9ef0

Программирование для IBM OS2

Если вы раньше программировали только для операционной системы MS-DOS , то вы уже создавали текстовые приложения. В составе MS-DOS нет удобных средств для организации текстового или графического вывода, поэтому большинство программ MS-DOS работают напрямую с видеопамятью, физически расположенной на плате видеоадаптера.
Операционная система IBM OS/2 Warp использует защищенный режим работы процессора, причем в большинстве случаев приложениям запрещается обращаться к портам периферийных устройств и видеопамяти в обход соответствующих драйверов. Это ограничение, однако, с лихвой компенсируется удобными и быстродействующими функциями, доступными приложениям в рамках программного интерфейса IBM OS/2 Warp. Поэтому в целом программирование экранного вывода для текстового режима IBM OS/2 Warp заметно проще, чем для операционной системы MS-DOS .

Базовые понятия и определения
Если вы программировали только для MS-DOS и никогда не создавали приложений для операционной системы Microsoft Windows, то самое трудное для вас будет перейти от обычного, линейного программирования к событийно-управляемому. Однако мы постараемся по возможности облегчить такой переход. Для этого мы рассмотрим очень подробно принципы событийно-управляемого программирования на конкретном примере исходных текстов простейшего приложения Presentation Manager.

Глобальные переменные
В переменные cxPoint и cyPoint записываются координаты курсора мыши в момент, когда пользователь начинает перемещение окна приложения, нажав левую кнопку мыши. Эти координаты будут затем сравниваться с координатами курсора мыши после завершения процесса перемещения, которые хранятся в переменных cxNewPoint и cyNewPoint.

Файл slider.h
Файл slider.h содержит определения константы ID_APP_FRAMEWND, а также идентификаторов круглых регуляторов цвета CIRCSLD1_ID, CIRCSLD2_ID и CIRCSLD3_ID.

Учебник по созданию shareware программ

Shareware — это не просто способ распространения программ, при котором пользователь платит за нее не сразу, а по истечении некоторого срока, во время которого он имеет возможность тестировать продукт. Это еще и уникальная возможность для каждого программиста полностью изменить свою жизнь, сделать себе имя, начать работать на самого себя. И при этом -продолжать заниматься своим любимым делом, т. е. программированием.
Shareware — это не последний этап в развитии продукта, когда созданная программа начинает продаваться на мировом рынке программного обеспечения. На любой стадии работы над программой — проектирование, разработка пользовательского интерфейса, написание документации, размещение в Интернете — ориентация на рынок shareware оказывает очень большое влияние. При осуществлении проекта нельзя не учитывать законы и тенденции, наблюдающиеся в shareware-индустрии. И если при взгляде на оглавление книги можно сделать вывод о том, что shareware посвящена только последняя, десятая глава, то при чтении других глав вы заметите, что все вопросы в них рассматриваются именно с точки зрения применения на shareware-рынке.
Каждый, кто считает себя имеющим отношение к разработке программ, найдет что-то полезное для себя.Начинающие программисты, желающие создавать качественные программные продукты, смогут получить ответы на многие вопросы, связанные с разработкой программ, которые лежат вне рамок традиционной литературы для программистов. Опытные разработчики смогут расширить аудиторию пользователей своих продуктов и не только компенсировать свои затраты, но и получить хороший доход. А те из читателей, кто непосредственно не занимается разработкой программ, но работают в области информационных технологий, смогут получить комплексное представление об одной из самых значимых и перспективных областей индустрии программного обеспечения.

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

Что такое shareware?
Shareware — это тип программного обеспечения, обусловленный особенностями распространения таких программ. В русском языке этот термин интерпретируется как "условно-бесплатное программное обеспечение". Такая длинная формулировка, естественно, не совсем удобна для частого применения, поэтому термин "shareware" используется и в русскоязычной литературе. Употребляется еще одно наименование этого типа программного обеспечения -"пробное" (trial).

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

Немного об авторском нраве
Авторское право на компьютерные программы — это такая обширная тема, что ей можно было бы посвятить всю эту книгу целиком. Но, учитывая специфику тематики книги, в этой главе я вкратце расскажу о наиболее актуальных для shareware-разработчика вопросах авторского права.

Как работает правильная программа
"Стоп!" - скажут опытные программисты. — Не имеет значения, каков размер файла программы, важно, каков размер данных, используемых программой!" Абсолютно верно. Программа, ЕХЕ-файл которой имеет объем, например, всего 300 Кбайт, будучи запущенной, займет в оперативной памяти в несколько раз больше места.

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

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

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

Подготовка к выпуску программы
Итак, вы продумали тематику своего shareware-продукта, спроектировали пользовательский интерфейс, написали программный код и закончили составление справочной системы. Пришло время представить свое творение на суд других пользователей.

Ваша программа в Интернете
Самый распространенный способ представления программы в Интернете -ее размещение на Web-сайте разработчика. Автор программы регистрируется на одном из многочисленных сервисов (платном или бесплатном), предоставляющих хостинг (т. е. размещение) Web-сайтов в Интернете, получает для него имя по своему желанию, создает на сайте страницы с информацией о своих программах и, наконец, загружает на сервер дистрибутивы.

Организация продаж и маркетинг
Итак, первая версия вашей shareware-программы создана, к ней написана справочная система, дистрибутив загружен на виртуальный сервер, специально зарегистрированный у надежного коммерческого хостинг-провайдера. Словом, ваша программа готова к продажам на мировом shareware-рынке. Однако остается еще один важный вопрос — как же будет происходить процедура поступления денег от покупателей программы к автору shareware-программы?

Приложение

Заключение
Завершая свой рассказ о shareware, я хочу напомнить вам о том, что нельзя забывать, реализуя все то, что описано в каждой из десяти глав этой книги. Не рассматривайте shareware как игру, в которую можно поиграть и бросить. Не тратьте на это свое время, которое, как вы знаете, стоит денег.

Стили и методы программирования

Программирование на языках появилось одновременно с вычислительными машинами. Конрад фон Цузе, построивший первую в мире серию программно-управляемых вычислительных машин (Германия, 1938-1944 г.), создал язык Plankalkul для записи программ. Квалифицированные сотрудники писали программы на этом языке, а техники затем вручную переводили их в машинные коды. Сейчас наиболее широко используются традиционные языки. В их число входят FORTRAN, Pascal, C/C++, Ada, Java и т. п.

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

Традиционная модель
Модель вычислений языка не обязательно совпадает с моделью вычислений, заложенной в оборудование. Эти модели расходятся, если сама машина имеет традиционную архитектуру. Более того, даже машины другой архитектуры программно моделируются на машинах традиционной архитектуры. В дальнейшем мы будем пользоваться термином традиционные языки, понимая под этим языки, модель вычислений которых унаследована от традиционной архитектуры машин



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

Различные стороны определения языка
Для создания, проверки и преобразования программ, построения систем программирования, а также для многих других нужд нам необходимо если не определение, то хотя бы описание алгоритмического языка. При этом требуются точные описания как текстов, так и их интерпретации.

Конкретизация
Язык Рефал был создан В. Ф. Турчиным для программирования символьных преобразований. Исходный толчок он получил от идеи алгорифмов Маркова, но эта идея была полностью пересмотрена в ходе работы по созданию языка. Идейный и математический уровень проработки языка исключительно высокий, но вопросы дизайна почти проигнорированы.

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

Развитие языка Prolog
Наличие именно формальной мотивировки оказало медвежью услугу языку Prolog и всему направлению. Его сущность оказалась замаскирована примитивным методологически-теоретическим анализом и неадекватным названием: логическое программирование. Prolog вдохновлялся ограничением классического исчисления предикатов, предложенным Хорном.

Списки и функциональные выражения
Атомами в языке LISP являются числа, имена, истина T. Ложью служит пустой список NIL, который в принципе атомом не является, но в языке LISP при проверке на то, является ли он атомом, выдается истина. Точно так же выдается истина и при проверке, является ли он списком. Однако все списковые операции применимы к NIL, а те, которые работают с атомами, часто к нему неприменимы.

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

Анализ состояния дел
Построение таблиц заканчивает этап спецификации нашей программы. Таблицы 9.1 и 9.2-другое формализованное представление рисунков 9.6 и 9.7. Как всегда, разные формализмы отличаются по практической направленности. Граф в некоторых случаях может быть автоматизированно преобразован в прототип программы (попытайтесь сами проделать это со спецификацией на языке UML), но получающиеся программы всегда требуют ручной доработки. Табличное же представление допустимо рассматривать как мини-язык программирования.

Требования к автоматической трансляции таблиц
Серьезный недостаток предложенного в §10.3 решения задачи автоматического преобразования таблиц переходов в программы связан с идеей препроцессорного построения, удобного для обработки представления таблиц переходов. Игнорирование обратной связи между исходным представлением автомата и его интерпретируемым представлением порождает проблемы. Если не рассматривать развитие программы, то отслеживать эту связь не нужно.

Пример

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

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

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

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

Почему нет универсальных методов?
К сожалению, из курсов наших университетов (как это обычно бывало во времена кризиса России) практически исчезла исключительно важная для мировоззрения и просто общей культуры наука: логика. Этот факт особенно прискорбен потому, что за XX век логика заставила научное мировоззрение перейти на качественно новый уровень1). Она впервые заставила науку задуматься над границами собственных возможностей.

Справочник по языку VHDL

Язык описания аппаратуры для высокоскоростных интегральных схем (VHSIC), называемый VHDL, является формальной записью , которая может быть использована на всех этапах разработки электронных систем. Вследствие того, что язык легко воспринимается как машиной, так и человеком он может использоваться на этапах проектирования, верификации, синтеза и тестирования аппаратуры также как и для передачи данных о проекте, модификации и сопровождения. VHDL является формальной записью, предназначенной для описания функции и логической организации цифровой системы. Функция системы определяется, как преобразование значений на входах в значения на выходах. Причем время в этом преобразовании задается явно. Организация системы задается перечнем связанных компонентов.

Концепция языка VHDL
Мы придаем большее значение особенностям VHDL, которые облегчают моделирование аппаратуры, чем процессу конструирования моделей. Для иллюстрации языка VHDL рассматриваются подробные примеры. Менее подробно рассматриваются особенности языка, которые допускают представление произвольных абстрактных данных.

VHDL язык создания дискретных систем
Языки описания аппаратуры (ЯОА/HDL -- Hardware Digital Language) известны давно. Одним из первых более или менее удачных ЯОА был LOTIS -- формальный язык, описывающий логические переменные и последовательностные схемы.

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