Версия 4.54 - 05.05.19


Программы и компьютеры
   MSX  | VBA  |  |  Наверх  

Авторские игры для персональных компьютеров MSX (1988 г.)
  История создания игр, замечания разработчика и некоторые особенности прохождения миссий  
  MSX - историческая справка, особенности стандарта, достоинства и недостатки  
  Программное средство "МАЭСТРО" - аннотация  

Для эмуляции MSX использован WEBMSX by Paulo A. Peccin v5.2.0, которому автор выражает огромную признательность за то, что программы для MSX теперь стало возможным запускать непосредственно с сайта.
Автор также благодарит проект Мозаика системного администрирования и лично Алексея Подрезова [RBSC] за помощь в приведении пакета игр к исходному состоянию.

Внимание: если производительности вашего компьютера недостаточно для работы игр в эмуляторе WEBMSX, то можно загрузить и установить бесплатную программу BlueMSX и воспользоваться дисками MSX_Games_AR.rar (260 КБ), загружая их в этот эмулятор.

Управление всеми играми осуществляется при помощи клавиш курсора, пробела, левой клавиши ALT и клавиши ESC

Запуск заставки выбора игр


Запуск игр по отдельности







   MSX  | VBA  |  |  Наверх  

  История создания игр, замечания разработчика и некоторые особенности прохождения миссий  
  MSX - историческая справка, особенности стандарта, достоинства и недостатки  
  Программное средство "МАЭСТРО" - аннотация  


Краткая история создания игр

Все 4 представленные выше игры были разработаны более 30 лет назад, начиная от сценариев и заканчивая графикой, музыкой и кодом за очень короткий срок - несколько месяцев. Это стало возможно благодаря предварительно подготовленным авторским инструментальным средствам для их разработки под общим названием названием "Маэстро", написанных на языке Си и Ассемблер. Сами игры также написаны на языке Си с использованием специальных авторских библиотек, макросов и утилит, включая мощный авторский редактор знакоместной графики, вошедших в пакет "Маэстро".

К сожалению, на настоящий момент исходные коды инструментальных средств и самих игр не сохранились, но с описанием возможностей большинства инструметальных средств разрабочика можно ознакомиться загрузив избранную документацию программного средства "Маэстро" (67 КБ RAR).

Следует заметить, что для пакета "Маэстро" был получен первый отечественный авторский Копирайт на программное обеспечениие ещё во времена существования СССР, который был разработан и подготовлен автором совместно с кооперативом ЭЛЕКС в лице его руководителя и профессионального юриста И.З. Карася. Позднее, в эпоху Перестройки, весь пакет был передан Министерству Культуры СССР на условиях торговой сделки.


Замечания разработчика, относящиеся ко всем играм в целом

Основной особенностью данных игр является то, что прохождения любой из них никогда полностью не повторяют предыдущие прохождения так как при создании игровых вселенных используется генератор случайных чисел, который произвольным образом раскладывает некоторые объекты в пространстве игры. В играх "Майор Пистолетов" такими объектами, например, являются предметы, находящиеся в сундуках и ключи, открывающие двери, в игре "Возвращении на Землю" - планеты, их расположение, а также поведение их обитателей, а в "Танцроиде" произвольно появляющиеся объекты-помехи, мешающие выходу Танцроида из лабиринта. Таким образом, даже играя в одну и ту же игру, играющий каждый раз попадает в ситуацию, которая отличается от предыдущих прохождений. И это, порой, может коренным образом менять тактику и даже стратегию его поведения. Особенно ярко это выражено в игре "Возвращение на Землю", где каждую вселенную приходится предварительно исследовать и изучать для того, что выполнить миссию возвращения.

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

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


"Майор Пистолетов" - особенности прохождения

Все основные условия миссии Пистолетова изложены в письме генерала Автоматова, которое Пистолетов может прочитать сразу после входа в замок Кащея. Однако, многие вещи там упомянуты лишь вскользь и вам предстоит догадаться о них самостоятельно во время исследования замка. В частности:

  • В замке много похищенных принцесс, но лишь одна из них является нашим агентом и может вам помочь. Догадайтесь как отличить её от остальных. Об этом есть подсказка в письме Автоматова.
  • По воде нельзя ходить без водонепроницаемых сапог, а попадать в огонь без огнезащитной куртки. Но и сапоги, и куртки имеют относительно небольшой ресурс использования, который довольно быстро заканчивается.
  • По вертикальным лестницам можно не только подниматься и спускаться, но и спрыгивать с них вбок, если с нужной стороны ничего не мешает (например, нет стены).
  • На наклонные лестницы попадают используя сразу две клавиши управления курсором - Влево или Вправо одновременно с нажатием клавиш Вверх или Вниз.
  • Из пистолета можно расстреливать (уничтожать) ненужные или вредные объекты. Стреляют клавишей "Пробел".
  • Двери открываются ключами, форма которых высвечивается над дверью, но связи между дверями не всегда линейны. Войдя в дверь, из которой вы только что вышли, вы можете попасть совсем в другое место. Однако имеются и линейно связанные двери. Переходы между дверями не изменяются при разных прохождениях и, однажды изучив их, этим удобно пользоваться в дальнейшем.
  • Любую дверь можно открыть не только подходящим ключом, но и без ключа, стреляя в неё из пистолета. Однако чаще всего она открывается далеко не первым выстрелом. Количество патронов в каждом пистолете ограничено и они могут закончиться до того, как вы откроете дверь.
  • Существуют места откуда невозможно выбраться без установки лестниц, которые вы можете находить в замке и в дальнейшем ставить друг на друга при помощи кнопки ALT (GRAPH на MSX). Поэтому, чем больше у вас пистолетов и лестниц, тем увереннее вы можете себя чувствовать при прохождении миссии. Сапоги и куртки, порой, тоже бывают жизненно необходимы. Не забывайте о них и старайтесь тоже иметь их в запасе.
  • Каждый новый предмет, который вы подобрали, попадает на первое свободное левое место в вашем наборе приобретений, если такое свободное место имеется.
  • Поэтому даже Громконенков (бывший комсомольский вожак по фамилии Тихоненков) иногда может быть использован с пользой для дела, освобождая место для новых находок так как он съедает только те приобретения, которые находятся левее позиции на которую он попал. Кроме того, иногда его можно использовать в качестве ключа для подходящей двери. Но чаще всего его приходится расстреливать из пистолета когда он загораживает дорогу. Однако, имейте в виду - если он окажется самым правым в списке ваших приобретений, то съест всё.
  • Голубые волшебные жезлы, попадающиеся вам иногда в замке, открывают голубые вертикальные стены.
  • Существует несколько мест, наступая на которые вы неожиданно проваливаетесь вниз. Однако, чаще всего это не фатально. Таких мест очень немного. Их надо знать и уметь отличать по довольно мелким признакам раскраски.
  • Не забывайте и о еде. Хлеб, который находится в верхнем правом углу экрана, расходуется довольно медленно, но его запасы надо иногда пополнять. Это ресурс расходуется в реальном времени и, если он кончится, то Пистолетов погибнет от голода.

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


    "Пистолетов на заводе"

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


    "Возвращение на Землю" - особенности прохождения

    Ситуация, в которую попал ваш звездолёт изложена на второй странице экрана, но требует некоторых пояснений. В результате гиперпространственного шторма вы оказались в чужой, замкнутой самой на себя в обычном пространстве галактике. Это означает, что вылетев за её верхнюю границу вы оказываетесь на её нижней границе, а вылетев за левую границу оказываетесь на правой границе и наоборот. Улететь оттуда можно только выйдя в гиперпространство, но к сожалению в результате шторма вы потеряли гипердвигатель, приёмник, которым в гиперпространстве можно принять сигнал с Земли, а также кристалл памяти, куда нужно этот сигнал записать чтобы задать звездолёту обратный курс на Землю. Кроме всех этих бед, вам надо ещё послать сигнал на Землю, чтобы Земля ответила вам по гиперсвязи и дала координаты наведения.
    Но не всё так плохо - остальное оборудование работает. Реактор исправен, энергия для обычного передвижения по галактике есть, защитное поле тоже. Мало того, галактика населена разумными существами у которых может найтись то, что вам надо - гипердвигатель, локатор, кристалл и они даже смогут послать широковещательный сигнал на Землю! Но что особенно хорошо, с обитателями этой далёкой галактики вы можете общаться при помощи вашего бортового компьютера и обычной связи.
    Кроме снабжения вас нужными вещами они иногда могут заправить вас энергией, починить защиту и бортовой реактор, но обычно что-нибудь просят дать взамен. И очень часто это что-то такое, о чём вы не имеете ни малейшего представления. Хотя, попадаются и такие планеты, на которых вам могут помочь совершенно бескорыстно.
    Во время игры надо помнить о следующем:

  • Ваша максимальная скорость зависит от исправности бортового реактора, хотя, если у вас уже есть гипердвигатель, то вы сможете выйти в гиперпространство даже на минимальной скорости.
  • Не подлетайте близко к планетам по локатору ближнего обзора на скорости выше 20% от максимальной. На скорости 20% возможна посадка. Если при подлёте к объекту скорость будет выше 20%, то у вас будет повреждена защита. Посадка возможна при совмещении красной точки звездолёта с белой точкой объекта на локаторе ближнего обзора и нажатии стрелки Вниз.
  • Когда планета или объект становятся видны не только как белые точки на локаторе ближнего обзора, но и на большом экране как планеты или объекты, вы сможете узнать у их обитателей что у них есть для вас и что им надо самим, нажав клавишу Пробел.
  • Кроме того, удерживая клавишу Пробел и перемещаясь по карте галактики стрелками курсора, вы всегда сможете вспомнить, что вам предлагали там, где вы уже побывали. Имейте в виду, что если вы у кого-то уже что-то забрали, то через некоторое время этот ресурс может там снова возобновиться.
  • Если условия вам подходят - садитесь на планету или объект стрелкой курсора Вниз при скорости не более 20%, ищите обитателей стрелками курсора Влево и Вправо и получайте от них то, что вам нужно. После этого взлетайте стрелкой курсора Вверх
  • Обитатели Красных планет обычно помогают и делают всё задаром, но будьте осторожны - иногда они могут начать разбирать ваш звездолёт на запчасти. В этом случае как можно скорее улетайте от них!
  • Если у вас появился гипердвигатель, то вы сможете летать по галактике гораздо быстрее, но сколько вы пролетите зависит только от вас и того момента когда вы нажмёте стрелку Вниз для выхода из гиперпространства.
  • Следите за количеством энергии, защитой, и таймером реального времени. Если кончится энергия - вы погибните. При уменьшении защиты начнет ломаться бортовой реактор и будут возникать нерегулярные помехи в связи, а по истечении времени на таймере реального времени Земля перестанет ждать вас и вы не сможете вернуться.
  • Если вы собрали всё необходимое - выходите в гиперпространство и возвращение призойдёт автоматически. Лишь бы вам хватило энергии!

  •    MSX  | VBA  |  |  Наверх  

      История создания игр, замечания разработчика и некоторые особенности прохождения миссий  
      MSX - историческая справка, особенности стандарта, достоинства и недостатки  
      Программное средство "МАЭСТРО" - аннотация  


    MSX - историческая справка, особенности стандарта, достоинства и недостатки

    1. Историческая справка.

    В 1982 г. Harry Fox & Alex Weiss разрабатывают "настоящий домашний (бытовой) компьютер". Причиной, по их мнению, являются слишком слабые возможности персональных компьютеров, представленных в тот момент на рынке (Commodore 64, Atari 800XL, Sinclair ZX80), или их слишком высокая цена (Apple II, IBM PC). Из-за этого они являются непригодными для широкого использования в качестве бытовых компьютеров.

    Через 20 месяцев им удается заинтересовать своей разработкой вице-президента Microsoft Corp. Kazuhico Nishi (ASCII Corp.), который прилетает к авторам в Гонконг и модифицирует исходную модель компьютера (Spectravideo SV-328). В частности, предусматривается расширение RAM до 256К байт, ROM - до 32К, перерабатывается клавиатура, выбирается Microsoft BASIC, концепция слотов для внешних устройств и др. Основная задача - разработать стандартный бытовой компьютер для домашнего использования по аналогии с IBM PC, который фактически приобрел статус стандартного для использования в области бизнеса.

    В апреле 1983 г. Nishi удается заинтересовать японских изготовителей в покупке лицензии на новый компьютер.
    В октябре 1984 г. аннонсируется MSX-DOS.
    В 1985 г. аннонсируется MSX2.

    2. Особенности стандарта MSX.

    2.1. Аппаратная часть MSX:

  • Z80A, приближающийся по быстродействию к Intel 8088, используемому в IBM PC Jr
  • видео-процессор TMS 9918А с отдельной видеопамятью и спрайтами
  • трех-голосный звуковой генератор АY-3-8910
  • 8255 программируемый интерфейс
  • концепция слотов, позволяющая расширять конфигурацию компьютера различными дополнительными устройствами
  • "интеллектуальный" видео-процессор для MSX2 V9938 с 128 Кбайт VRAM, высоким разрешением (512х212 точек), палитрой из 512 цветов, как знакоместной, так и бит-мэп графикой, автономным построением линий, прямоугольников, блоков, закраской областей и поиском границ, блочными пересылками с учетом прозрачного цвета, видеотайзингom, автономной работой с манипулятором "мышь" и пр.
  • Memory mapper, позволяющий наращивать обьем RAM до 4 Мбайт

  • 2.2. Программное обеспечение MSX

  • мощная версия Microsoft BASIC (32К ROM)
  • MSX-DOS, совместимый с CP/M по точкам входа в BDOS и с MS-DOS по формату дисков MSX
  • дополнительные 16К ROM для новых функций BIOS & BASIC
  • RAM диск

  • 3. Достоинства.

  • совмесимость MSX компьютеров различных фирм-изготовителей с точки зрения программного обеспечения
  • возможность использования практически всех программ, разработанных в CP/M
  • совместимость по данным с MS-DOS
  • расширяемость и наращиваемость конфигураций в зависимости от требований пользователя
  • дешевизна простых конфигураций
  • большое количество различных периферийных устройств, начиная от дисководов и принтеров разных фирм-изготовителей и заканчивая музыкальными синтезаторами и устройствами для ввода видео-изображений
  • высокая степень "поучительности изучения MSX", так как в его архитектуре одновременно отображены многие концепции, используемые в других компьютерах.

  • 4. Недостатки.

  • недооценка все уменьшающейся роли 8-битных компьютеров при проектировании MSX
  • недостаточная проработка вопросов, свзанных со слотовой архитектурой компьютера при проектировании MSX
  • недостаточная проработка вопросов, связанных с основным режимом ввода/вывода информации на экран и выбором в качестве видеопроцессора MSX TMS 9918. Позднее, гораздо более прогрессивный V9938 был вынужден "тянуть" за собой весь груз недостатков 9918.
  • отсутствие стандартных средств связи между программами, порождаемыми компиляторами в MSX-DOS, и возможностями MSX (отсутствуют библиотеки стандартных MSX-функций)
  • недооценка важности наличия окон и стандартных функций связи с ними для современного программного обеспечения при проектировании MSX-DOS и MSX Basic
  • неполная англоязычная документация по ROM kernel и отдельным особенностям стандарта MSX, неудоволетворительное качество и время выхода в свет системной англоязычной документации. Как следствие - недостаточное количество системных программных продуктов, разработанных специально для MSX и MSX2


  •    MSX  | VBA  |  |  Наверх  

      История создания игр, замечания разработчика и некоторые особенности прохождения миссий  
      MSX - историческая справка, особенности стандарта, достоинства и недостатки  
      Программное средство "МАЭСТРО" - аннотация  

    Программное средство "МАЭСТРО" - аннотация

    Автор: А.Б. Родионов
    © МЭВЦ 1988 г.

    Программное средство (ПС) "Маэстро" предназначено для создания высокоэффективных и кратких программ на языке С для компьютеров MSX и MSX2 и включает в себя такие средства программирования как параллельные процессы, окна, работа с манипулятором "мышь", специализированные методы доступа и обработки графических данных и многое другое.
    ПС "Маэстро" может быть использовано для разработки учебных программ, компьютерных игр, системных и прикладных программ и для других приложений.

    ПС "Маэстро" является первым в СССР программным продуктом, обладающим имеющим законную силу Copyright © - правом на тиражирование и копирование. Все права на тиражирование и копирование ПС "Маэстро" зарезервированы МЭВЦ и ЭЛЕКС. Любое незаконное копирование или тиражирование ПС "Маэстро" другими организациями или лицами является нарушением законодательства со всеми вытекающими из этого последствиями.

    ПС "Маэстро" состоит из трех компонент:

    1. Библиотеки из более чем 200 функций, разработанных специально для MSX2 и MSX;
    2. Редактора знакоместной графики, ориентированного на работу с манипулятором "мышь" и графическими меню;
    3. Набора универсальных и специализрованных утилит для выполнения некоторых часто встречающихся в практической работе задач.

    Ниже приводятся некоторые характеристики этих компонент.

    1. Библиотека функций для компилятора BDS C.

    Библиотека функций предназначена для программистов, использующих компилятор BDS C. Библиотека разработана специально для MSX-машин. Она обеспечивает полный доступ ко всей аппаратуре MSX2 и MSX из программ, написанных на языке С. Кроме обращений к стандартным функциям BIOS MSX и SUBROM MSX2, библиотека включает в себя ряд новых специальных функций и методов доступа, облегчающих программирование сложных и ресурсоемких задач.

    Библиотека состоит из следующих разделов:

    Раздел библиотеки 1:

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

  • Раздел библиотеки 2:

  • дисковый ввод/вывод для VRAM MSX2,
  • сжатие/расширение информации в памяти и в файлах,
  • блочные пересылки RAM-VRAM, VRAM-RAM, VRAM-VRAM.

  • Раздел библиотеки 3:

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

  • Раздел библиотеки 4:

  • спрайты (логический уровень),
  • доступ к оглавлению диска,
  • сортировка,
  • методы организации и выделения оперативной памяти,
  • копирование текстового и графического экранов на принтер,
  • ввод/вывод для магнитной ленты,
  • работа со звуковым генераторм MSX,
  • работа с мэппером,
  • работа с мышью,
  • прямой доступ к клавиатуре.

  • Раздел библиотеки 5, ориентированный только на MSX1:

  • загрузка знакоместного полиэкрана,
  • управление знакоместным полиэкраном,
  • графические и текстовые окна для полиэкрана,
  • спрайты MSX1,
  • прямой ввод/вывод для полиэкрана.

  • 2. Компоновщик/Редактор знакоместной графики.

    Программа Pattern Composer (Компоновщик Знакоместной графики) предназначена для разработки знакоместной графики в Screen 2. В качестве инструментальной машины используется MSX2 (дополнительная память, "мышь"), но результирующие файлы полностью совместимы с MSX1.
    Программа использует в работе графические меню, выбор из которых осуществляется при помощи манипулятора "мышь".
    Основным режимом работы программы является режим компоновки знакомест на полиэкране из знакоместной библиотеки, которая может быть создана с помощью этой же программы или может быть получена загрузкой файла, содержащего копию VRAM для Screen 2. Такой файл может быть подготовлен при помощи других графических редакторов или даже программы, написанной на языке Бейсик.
    Pattern Composer позволяет разрабатывать различные фазы движущихся объектов, редактировать их, получать копии изображений на бумаге, сохранять их в файлах в различных форматах, манипулировать с библиотеками знакомест, экранов, объединять и делить их на части и пр. Форматы хранения данных совместимы с форматами, используемыми "Библиотекой функций MSX для BDS C" (далее просто "Библиотека функций").
    Полиэкран может иметь различные конфигурации в зависимости от требований пользователя.
    Имеется встроенная функция "Help" с подразделами описаний форматов файлов, используемой терминологии и др.

    3. Утилиты системного программиста

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


    Все компоненты ПС "Маэстро" являются авторскими разработками А.Б. Родионова (Москва, 1986~1988). Оригинальная документация ведется на английском языке для совместимости с компьютерами и другим оборудованием, не имеющим кириллических знакогенераторов и может быть поставлена по специальному заказу. По этой же причине англоязычными являются все комментарии и диалоги, ведущиеся всеми компонентами ПС "Маэстро".


       MSX  | VBA  |  |  Наверх  

    Visual Basic for Applications (VBA) - опыт использования

    Недавно я начал кодировать на Visual Basic for Applications (VBA) - меня попросили помочь решить задачу для большой библиотеки, которая заключалась в дописывании дескрипторов из иерархического Предметного указателя (ПУ) в Библиографические описания (БО) в соответствии со ссылками на номера этих БО. Это было нужно для конвертирования печатных библиографических указателей из формата документов MS Word в формат поисковой БД. Необходимо было обработать таким образом более 30 довольно больших файлов (60-100 стр.), в каждом из которых были сами БО, Авторские указатели, Предметные указатели и еще много всего другого. В результате должен был получиться чистый файл из одних БО с дописанными к каждому БО дескрипторами.

    Хотя, я не кодировал уже почти 20 лет, но, изучив вопрос, решил взяться за эту задачу и написать всё это на новом для меня языке VBA так как для бывшего системного программиста, который сам когда-то разрабатывал новые языки и писал для них компиляторы и интерпретаторы, одним языком меньше, одним больше - не существенно. Вообще, я всегда любил писать на Си так как на нём мне удобно думать, но писать на чистом Си эту задачу, как мне казалось, было бы труднее, так как пришлось бы работать с файлами, в которых кроме текстов содержится огромное количество всякой всячины, записанной туда самим Вордом. Правда, уже в процессе написания программы на VBA я понял, что на самом деле, можно было программировать и на Си потому что все операции с текстом документов MS Word производятся с помощью объектной модели Word, доступной и в Си, но было уже поздно "менять лошадей на переправе". К тому же, для работы с VBA не требовалось устанавливать Visual Studio - её компонента для написания программ на Visual Basic встроена в сам Офис.

    Итак, я стал писать программу массовой обработки документов Word на VBA для Офиса 2010...

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

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

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

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

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

    Здесь надо добавить, что Офис 2010, с которым я работал, ставился с оригинального дистрибутива Майкрософт, активировался штатным корпоративным ключом и набирал все положенные ему актуальные апдейты. Кроме того, всё проверялось на двух компах под Win 7 64х - одном физическом с 4-х ядерным Квадом 3 ГГц, а втором - виртуальном (ВМ под VMware) на хосте с i7 3.5 ГГц. Обе Win 7 были тоже совершенно легальны, штатно активированы и с актуальными апдейтами. Результаты работы программы на них были идентичны за исключением скорости выполнения.

    Обнаружились и некоторые другие странности самого интерпретатора языка. Например, в оригинальном коде, который я писал, использовались глобальные константы (Public Const), но когда я захотел перенести код программы на другой компьютер просто скопировав текст программы копи-пастой, VBA длинно и страшно выругался, заявив, что глобальные константы недопустимы и вместо них надо использовать специальные функции их инициализации (с весьма невнятным описанием). Вбить строки с Public Const вручную тоже не удавалось из-за той же диагностики. Однако, просто перенеся на другой комп файл Normal.dot, в котором хранилась моя программа, я добился желаемого. Надо сказать, что при этом все доступные настройки рабочего Normal.dot и Normal.dot только что установленного Офиса на виртуальной машине для которой я пытался скопировать код копи-пастой полностью совпадали. Почему же тогда VBA не ругался, когда я впервые успешно использовал глобальные константы? - Странно, не правда ли?

    Этот вопрос не давал мне покоя и позже. Поэтому завершив написание и отладку программы, я стал разбираться с ним более детально. В результате экспериментов выяснилось, что если в коде уже содержится хотя бы одна подрограмма Sub или Function, пусть даже и пустая, то глобальные константы использовать можно. Если же подпрограмм ещё нет - то нельзя. Вот такая причуда интерпретатора. Или его разработчиков?

    Другой странностью было то, что в некоторых частях одного и того же кода я мог написать, например, просто WaitMe(), а в других требовалось писать явно Call WaitMe, иначе VBA не воспринимал WaitMe() как вызов подпрограммы. Как такое, вообще, может быть?? Разный синтаксис внутри одной и той же программы??

    Код программы в результате содержал 780 строк и исправно работал, но чего мне это стоило!!! Я никак не ожидал такого и с подобным поведением программ и интерпретаторов никогда раньше не сталкивался. В общем, я убил почти половину срока из полутора месяцев на войну с этой двуглавой свиньёй - VBA + объектная модель Ворда.

    Тем не менее, освоив это Средство, я придумал как его использовать "в мирных целях". Когда-то очень давно, еще на MSX , я написал программу на Си для составления рифмовников с использованием сортировок по реверсивной записи слов. Но в те времена стихов в виде файлов практически не было и я вручную вбивал рифмы из сборников Есенина и некоторых современных поэтов - это было довольно трудоёмкое занятие. Эти рифмовники, составленные в 1995 г., у меня сохранились до сих пор и я даже иногда в них заглядываю в особо затруднительных случаях, но сама программа для их составления, к сожалению, утеряна.

    Однако, в настоящее время в Сети очень много любых стихов и в формате Word, и в HTML. Поэтому я подумал - а не написать ли мне снова подобную программу, но уже на современном уровне? Чтобы она сама анализировала готовые стихи, выбирала из них рифмы и составляла бы рифмовники. Можно было бы составлять рифмовники колоссального размера и любого стиля как по отдельным поэтам, так и по разным поэтам вместе взятым. Например, все рифмы Вознесенского, Рождественского, Евтушенко... Или все рифмы Пушкина!

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

    * * *

    Загрузить рифмовники "Сергей Есенин" и "Лирика" 1995 г." (RAR 66 KB)

       MSX  | VBA  |  |  Наверх  




    Рейтинг@Mail.ru

    Версия 4.54 - 05.05.19
    (сайт адаптирован для прослушивания и просмотра на смартфонах без флэш-плеера)