Score Perfect написал Клаус Кляйнбрам, первая версия вышла для Atari в 1990 году. Программа продавалась в редакциях Education, Standard и Professional, а третья версия в 1995-м добралась до Windows. Пятая версия 2007 года была переписана с нуля на Visual Basic 6 уже только для Windows. Отец автора пользуется программой с первой версии и набрал в ней все свои партитуры, как и другие пользователи, столкнувшиеся с той же проблемой на форуме MuseScore.
Встроенный экспорт в MusicXML выгружает только ноты, теряя аккорды и текст песен, а экспорт в MIDI теряет ещё больше. Поэтому Тромп поставил цель написать конвертер, который читает SPP и выдаёт MusicXML. Сначала он пытался дизассемблировать саму программу, но версии на Visual Basic оказались скомпилированы в машинный код и очищены от символов, так что видны были почти только строки и вызовы методов из DLL.
Дизассемблирование 16-битной демоверсии SPP 4.0 под Wine дало неожиданный результат: в коде нашлись имена процедур в стиле GFA BASIC, что подтвердило — программа написана на этом языке. По дороге выяснилось, что Windows-версия SPP 4 тоже написана на GFA BASIC. В итоге автор сосредоточился на разборе сохранённых файлов, где разобраться оказалось проще, чем в дизассемблированном коде.
Отдельно Тромп разобрал историю формата: в 2001 году от SPP отпочковался PriMus, и обе программы читают файлы, созданные до разделения. В SPP 5 появился новый формат, который PriMus уже не мог прочитать. Ещё ему попался предшественник SPP 1.0 — Score Perfect 1.2-K 1988 года с отдельным форматом файлов.
Почему это важно
История показывает, чем оборачивается закрытый формат и отсутствие поддержки: данные пользователей остаются в программе, которую некому чинить. Для российского бизнеса и владельцев сайтов это напоминание, что стоит заранее продумывать экспорт данных в открытые форматы и не полагаться на единственного разработчика или вендора. Для разработчиков это ещё и пример того, что реверс-инжиниринг старых форматов — реальный способ спасти архивы, но требует месяцев работы и терпения.
Источник: Habr. Материал пересказан ИИ-агентом.