Как попробовать HyperCard в наши дни, в браузере
Что бы вы сказали, оказавшись один на один с ожившим динозавром? Мне вроде как повезло. Мой динозавр ведет себя спокойно, но... Что я говорил и говорю в этой ситуации, я теперь знаю, но публиковать эти слова нельзя.
Я планировал статью про HyperTalk. И чтобы не копировать примеры кода из статьи на ту же тему в англоязычной Википедии, решил написать свои. Есть люди, уверенные в себе на все 1000%, утверждающие, что им для программирования компьютер не нужен - они пишут (отливают в граните) совершенно безукоризненный код без него...
Я никогда не публикую непроверенный код, даже если догадываюсь, что вряд ли кто-то из читателей держит под кроватью старый Mac в рабочем состоянии - это дело принципа.
Виртуальный классический Mac с System 7.5.3 и с полной версией HyperCard 2.4 есть и работает. Так что - вперед?
И тут я был атакован воскресшими динозаврами. Виртуальными. Но, если где-нибудь на улице встретите животное размером с танк Первой мировой и похожее на панка, будьте все-таки поосторожнее. Кто знает, что у них на уме...
Эмулятор PCE-MacPlus
К самому эмулятору претензий нет. В его актуальной версии (2013) pce-macplus - очень неплох.
На сайте Джеймса Френда с pce-macplus работают System 6 и System 7.0.1, вполне прилично работавших и на настоящих Mac’ах этого типа. Все работает устойчиво, хоть иногда и медленно.
У Джеймса отличная коллекция игр и программ на его виртуальных Mac’ах, но HyperCard’а в подходящей мне комплектации на них нет. На виртуальном диске одного из эмуляторов обнаружился рантайм HyperCard 2.1, выпущенный CLARIS, Inc., "дочкой" Apple Computer.
Практически все разработчики HyperCard, заявив, что они устраивались на работу не в какую-то CLARIS, а в Apple, ушли по собственному желанию. Кто писал HyperCard 2.1, кроме Кевина Колхауна и Дэна Кроу, я не знаю. Говорят, в управлении мультимедийных программ Claris (куда пристроили HyperCard) им занималось человек пять - по большей части случайных людей. Команда "magic!" в рантайме HyperCard 2.1 не работает. Саботаж был подавлен.
Возможно, где-то в неведомом мне закоулке Интернета, недоступный поисковикам или не замеченный мной, живет и эмулирует Mac SE с System 6 и HyperCard 2.0, 2.1 или 2.2 в полной версии какой-то добрый эмулятор, но пока приходится пользоваться pce-macplus 1996 года выпуска с System 7.5.3 и HyperCard 2.4.
По своей несуразности конфигурация похожа на палеозавра на скутере с игрушечным пистолетом, терпеливо ждущего зеленого сигнала светофора.
Мой палеозавр работает и старательно соблюдает правила. Классические Mac’и и System 7.5.3 (она же Mac OS 7.5.3, неофициально) - сущности из разных эпох.
Apple Computer, с упорством достойным лучшего применения, вплоть до Mac OS 7.6, требовала от разработчиков совместимости каждой новой версии системы со всеми Mac’ами, кроме Mac 128K, Mac 512K, Mac 512 Ke и, видимо, Macintosh XL (ex Lisa). Одно из самых дурацких и непродуманных решений руководства компании.
Поэтому System 7.5.3 на "обобщенном" классическом Mac’е вполне живая. В Apple всегда работали талантливые инженеры. Если не требовать от антиквариата слишком многого.
Совместимость с неактуальными моделями Mac’ов отнимала время и силы, но не это в ней было самым неприятным и губительным: помня об этом требовании, инженеры пытались не делать в ее развитии слишком резких движений. System 7.5.3 - это поддержка новых вариантов PowerPC, умение управляться с двумя процессорами...
Но вот HyperCard 2.4 в эту ненадежную конструкцию совершенно не вписывается. Это то самое "слишком многое", чего не стоило требовать от антиквариата. Нет, многочисленные стэки (и автономные приложения, разработанные в HyperCard) в основном работают. Но те из них, в которых открыт доступ к исходному коду, примитивны до безобразия. Или как две капли воды копируют одни и те же решения.
Есть масса интересного, на первом и втором дисках эмулятора, рекомендую.
HyperCard 2.4 на трехколесном велосипеде
Запуск эмулятора начинается с загрузки его частей, которые называются "Game Data". Не знаю, как вам, мне это не слишком по душе. Правда, что есть программирование? Это игра, самый интересный способ провести время за компьютером, особенно HyperCard. Хорошо, пусть это будет игра.
HyperCard включается без проблем, новый стэк создается, все как в жизни. Медленно, но на недорогих Mac’ах с PowerPC приложения для 68k тоже были страшно медлительны. На PowerPC никто HyperCard так и не перенес.
В стэках нет единого места, где хранился бы весь их исходный код. Код разбросан по множеству объектов, в каждом из которых выполняется часть общей работы. Это и плюс (начинающие программисты все равно пишут код маленькими частями и смотрят, что из этого получается), и минус: исправить систематическую ошибку непросто.
Правда, в HyperCard под рукой множество самых разных инструментов и средств, в том числе и некоторые из свойств языка HyperTalk - в нормальной связке адекватных Mac’а, операционной системы и HyperCard все решаемо и исправимо. В адекватной.
Чтобы раскрыть интересные особенности языка программирования HyperTalk, его нужно поместить в привычное для него окружение. То есть создать несложный стэк, с фоном, в котором несколько полей и кнопок, наполнить его данными и - дать языку оторваться, за почти 15 лет в потустороннем мире, я думаю, он соскучился по реальному делу.
Первое приятное открытие: поля в фон добавляются и размещаются совершенно без проблем, но изменить их размер не удается. Шрифт, стиль и размер текста - нет вопросов. Стиль отображения (показывать строки или нет, разрешать ввод с клавиатуры или нет) - все работает. Ладно, мы пишем ненастоящий стэк, смиримся.
Размеры кнопок тоже не меняются. Стиль меняем на прозрачный, выбираем из набора картинок для кнопок симпатичные стрелочки "налево" и "направо" - и, после нескольких минут бесплодных усилий, довольствуемся их половинками на экране. Замуж этот стэк не отдавать, пусть будет так.
Второе приятное открытие: Cmd-C, Cmd-V и другие клавиатурные эквиваленты команд редактирования (и Cmd-M, для открытия/закрытия Message Box) не работают. Клавиши Command ("Яблоко"), Option (Alt) и Control в лучшем случае игнорируются. В худшем, и это чаще всего, срабатывают не в эмуляторе, а в браузере. Ну да, мы тут гостим, правила тут не наши. Довольно часто клавиатурные эквиваленты команд меню приводят к аварийному завершению работы эмулятора.
То есть снова загрузка системы и диска, снова надо пробираться к HyperCard, снова... Создавать все заново. Все созданное и напечатанное пользователем по завершении сеанса рассыпается в бессмысленные биты.
Хорошо, все команды запускаем с помощью меню.
Повторим одно за другим все действия прошлой попытки, некоторые из них доведены уже почти до автоматизма, жалко, что про эти действия на приличном ресурсе не расскажешь, и вернулись к тому месту, на котором остановились в прошлый раз.
Есть и приятные, без всякой иронии, открытия: меню Tools, в котором в графическом виде представлены все инструменты (режимы HyperCard, увы - без них в таком многоплановом приложении не обойтись), можно "вытащить" из меню и оставить на экране. В NeXTSTEP была аналогичная функция, для всех меню. В классической Mac OS - в "самодельных" нестандартных меню. Почему-то в Mac OS X (в нынешнюю macOS) этот трюк не вошел, а он настолько удобен! И он работает безукоризненно.
Графические режимы не трогаю, рисую я хуже Малевича. Использую режимы "боевой", "работа с кнопками" и "работа с полями". Переключаю их, как водитель большегрузного грузовика, почти непрерывно. Графические режимы включаю только из скриптов, у них с рисованием получше.
Третье приятное открытие (с иронией, и если не указано иное, все последующие открытия будут называться приятными только в случае их особой неприятности) - когда-то я считал, что открытие скриптов в объектах HyperCard сконструировано ужасно. Для этого двойным кликом и в соответствующем режиме ("работа с кнопками" или "работа с полями") следует открыть редактор свойств объекта, а одно из свойств - Script. Кнопка.
Доступ к скриптам других объектов начинается с команд из меню "Objects": "Card Info...", "Background Infо..." или "Stack Info..." Опять же, открывается редактор свойств, а в нем - кнопка Script. Я думал, что это долго и неудобно. Если бы все работало как надо, я бы так думал до сих пор.
Скрипт открывается очень медленно. За это время несложно забыть, зачем решил в него заглянуть. Если уже ясно, что на самом деле надо было открывать другой скрипт, - все равно, пока загрузка не завершится, ее не вытеснит ничто. Кстати, сообщил ли я вам, что в 7.5.3 уже была многозадачность, правда не "вытесняющая", а "кооперативная". Это как собственность: бывает настоящая, а бывает кооперативная.
Открылся. Поля, карточки, фоны и стэки рождаются "голенькими" - с пустым скриптом (если мы не включили, в диалоге создания нового стэка, опцию "скопировать фон текущего стэка"). Длиной в 0 символов.
Мне нужен хэндлер, вот такой:on openCard
Возврат каретки (добавляю новую строку) - все зависает, секунды на две. Я его чем-то удивил? Печатаю "on openCard". Возврат каретки - текст исчезает, все зависает на две секунды (на том свете совет директоров времен Скалли, Шпиндлера и Амелио проверяет, не возвожу ли я хулу на Apple Computer?), потом появляется опять. И так - строка за строкой.
put "" into bg fld "CardsCounter"
put "Cards Count =" && the number of cards into cc
put cc into bg fld "CardsCounter"
end openCard
Комментарии (все, что после двух дефисов, "-") "запрещены". No comments - один из самых любимых ответов руководства Apple, но я никогда не думал, что это следует понимать буквально. А оказывается, надо. Дефисы вообще не печатаются.
Боюсь, я вам уже надоел своими стонами - это только десятая часть приятных открытий. Копировать ни в эмулятор, ни из него - никак. Получившиеся скрипты, когда успеваю, переписываю вручную. И я не сдаюсь. С каждым разом захожу все дальше. Сизиф мог бы мне позавидовать.
Пробовал и альтернативные подходы. LiveCode, как написано в самых разных местах, это прямо HyperCard наших дней.
Альтернативы
LiveCode я узнал. Это приложение (очень кросс-платформенное, результаты работают в iOS, в Android, на Mac’ах, в Linux, в Windows) появилось в начале 90-х, называлось оно MetaCard. Когда HyperCard застрял и явно засобирался в долину теней, мы попробовали Runtime Revolution, или просто Revolution. Не HyperCard, хотя похоже. Сложней.
И вот - LiveCode 9.0. Просмотрев (по диагонали) учебники, я понял: язык этого приложения и в самом деле очень похож на HyperTalk, но со множеством собственных нюансов. Код на HyperTalk иногда даже работает, но гарантировать работоспособность в HyperCard кода, написанного на LiveScript, невозможно.
HyperCard и HyperTalk я когда-то неплохо знал, и навыки всплывают в памяти, по ходу дела. Влезать в LiveCode - это пара недель, как минимум.
Другие даже упоминать не буду.
Самый жизненный вариант - разберусь с устройством эмуляторов и построю свой, для себя. В GitHub есть исходники PCE. На C. Если хватит времени, конечно...