Старая коктейльная программа на BASIC
Мне почти каждый день пишут на support@mybarapp.com, предлагают какие-то новые фичи, коктейли, ингредиенты, благодарят за работу над приложением. Я очень ценю эту обратную связь, все письма читаю, и часто отвечаю.
В декабре пришло одно письмо на французском, где человек по имени Cyril упомянул, что моё приложение My Cocktail Bar напомнило ему старую коктейльную программу на Basic из 90х. Я сразу заинтересовался - любопытно, что за старая программа такая, еще и на BASIC! BASIC - язык моего детства, родом из 60-х, довольно популярный в своё время. Я застал его в школе на сохранившихся в старых компьютерных классах машинах Yamaha MSX "КУВТ". В общем, спросил у Cyril подробности, а он в ответ сразу прислал мне файл "COCKTAIL.BAS" . Я ожидал, что в нём будет исходный код на BASIC в стиле "10 PRINT HELLO", но файл оказался скомпилированным в какой-то свой специальный формат, размером всего 16КБ.
Пошёл искать, как его запустить. Cyril советовал GWBasic, но у меня как-то не получилось быстро найти рабочую версию. Скачал PC-Basic свежий релиз апреля 2023 года. Не запускал Basic наверное лет 25-30! Включил, интуитивно написал LOAD "COCKTAIL.BAS", получил OK":
Дальше "RUN" и программа заработала, показав главное меню. Посмотрим, что она умеет!
Начнем с простого. 6 - завершает работу программы, 5 - просто настройка, которая переключает режим вывода. Можно выводить результаты на экран или печать, то есть она даже печатать умеет.
1 - просто список всех коктейлей, можно посмотреть их все по очереди от первого до последнего.
Нажимаешь на любую клавишу, выводится следующий коктейль. Тут и по-французски всё понятно: две части бурбона, одна часть вермута, чуток Ангостуры и лёд, и видимо в скобках - stir (а не шейк).
Всего в программе 70 коктейлей, после прохода по всем предлагается начать заново или выйти в основное меню.
Второй пункт главного меню - выбор по ингредиенту:
Что ж, попробуем ввести 33 (Кальвадос). Программа говорит, что знает 4 коктейля и предлагает нажать любую клавишу:
Дальше просто показывает рецепты по одному за раз (или печатает), после чего опять предлагается выбрать ингредиент или пойти в главное меню.
Самая интересная фича программы это номер 3 - "Selection derniere minute", в переводе "выбор в последний момент", по факту это фича, ради которой я и начал приложение My Bar - можно выбрать ингредиенты, которые есть в наличии и получить список коктейлей, которые можно сделать. Здесь показывается экран, где для каждого ингредиента можно выбрать, имеется он или нет. То есть нажать N и O. До меня не сразу дошло, почему работает N, но не работает Y - приложение-то французское, "Да" это "Oui".
После прохождения по списку всех 40+ ингредиентов (их почему-то больше, чем в меню выбора по ингредиенту) программа радостно сообщает "Вуаля, вы можете приготовить 16 коктейлей":
Дальше обычный список коктейлей по одному на экран:
Можно заметить, что у каждого коктейля есть номер. У Old Fashioned это 33, и я думал, можно искать по номеру коктейля, но нет.
Последний пункт главного меню это 4 - "Recherche dans le cahier" - поиск по рецептам. Можно ввести имя коктейля (например MANHATTAN), получить результат, что найден один коктейль:
В этом меню я чувствовал себя как в Sci-Fi фильмах восьмидесятых, где компьютеру нужно было так словами и писать команды, что тебе нужно. А на самом деле надеяться, что твой ввод совпадет с тем, что ждали от пользователя программисты. Тут еще поиск оказался довольно капризным. Имя вводимого рецепта должно в точности совпадать с тем, что есть в базе. То есть по номеру коктейля искать нельзя, часть имени вводить нельзя, даже ввод маленькими буквами уже не работает. То есть "WHISKY SOUR" найдет нужный коктейль, но "WHISKY" или "whisky sour" - ноль результатов.
Попробовал вывести результаты на печать, по завершению PC-Basic получил PDF файл, который выглядит примерно так:
Для начала 90-х (или раньше?) вполне себе неплохо.
В итоге, программа небольшая, но список фич достойный:
- рецепты для 70 коктейлей, использование 40 ингредиентов
- поиск коктейлей по ингредиенту, по точному названию
- составление коктейльной карты по имеющимся ингредиентам
- печать коктейльной карты
Погуглив немного про компиляцию BASIC, я понял, что файл просто "токенизирован", то есть это тот же исходный код, просто ужатый с помощью более эффективного формата, где, например, каждая операция заменяется специальным кодом (тут подробности). Есть PowerShell модуль, который умеет транслировать токенизированный код обратно, но у меня не получилось его запустить. А вот другой питоновский скрипт сработал отлично, и я получил исходный код размером чуть более 20КБ:
Первые несколько строк - похоже, заставка, но у меня она мелькает на долю секунды, после чего переходит в главное меню. Если её запустить отдельно, увидим вот это:
Похоже, F. Roussel и J.F. Rolland - авторы. У меня не получилось найти их, но огромное им спасибо за эту програмку!
Вся программа - 662 строки, из которых примерно 70% это данные. Запись коктейлей выглядит так:
Насколько я понял, в первой строке название и количество ингредиентов, дальше для каждого ингредиента три числа - "сколько", единица измерения и номер ингредиента. Например, в Amaretto Sour первая строка это "1", потом ссылка на "MESURE(S) D'" и ссылка на "AMARETTO". После ингредиентов одна строка инструкция к приготовлению.
Может быть, это самая старая коктейльная программа?
Cheers!