Кратко
- В сентябре 1981 года Alan R. Katz описал работающую программу, которая декодировала сохранённые данные Rapicom 450 в монохромное растровое изображение. Переданный файл сам по себе не делал страницу видимой.
- Байты данных, отдельные поля заголовка и слова длины чёрных и белых серий требовали разных перестановок битов. Заголовки блоков позволяли продолжить после потери; RFC 797 предложила простой десятибайтовый заголовок для готового изображения.
Машина честно приняла факс. На диске лежал файл. Поздравлять было рано: на экране вместо листа ещё стоял вопрос, как прочесть набор битов. Rapicom 450 упаковывал изображение в собственные блоки и переходы состояний. Alan R. Katz в RFC 798 за сентябрь 1981 года показал, как превратить этот поток в растр. Соседняя RFC 797 описала простой формат для результата. Между «данные получены» и «страница видна» помещалась полноценная инженерная работа.
Katz написал декодер на L10 как подсистему NLS в TOPS20. Факс подключался к терминальной линии компьютера через микропроцессорный интерфейс FAXIE. Он собирал восемь последовательных битов в байт. Уже на входе начиналась путаница: Rapicom связывал MARK и SPACE с логическими нулём и единицей наоборот по отношению к RS232. FAXIE менял значения битов. При сохранении файла программа ещё и обращала порядок битов внутри каждого байта данных, снова меняя их значения. Декодер должен был отменить эти действия. Байты длины записи и команды этой обработке не подвергались: перевернуть вместе с содержимым ярлык на коробке — плохая помощь.
Устройство выдавало блоки по 585 битов. Семь дописанных нулей доводили их до 74 байтов данных, а поля длины и команды делали обычную файловую запись 76-байтовой. Команды различали подготовку, собственно данные и конец. Такая упаковка позволяла хранить поток и перемещать его. Расположения чёрных точек на странице она ещё не раскрывала.
В описании Katz обычный лист содержит примерно 2100 строк по 1726 чёрно-белых элементов. Режим Fine Detail кодировал каждую строку, Quality — каждую вторую, Express — каждую третью. При показе пропущенные строки повторялись. Кодирование шло попарно: колонка из двух строк могла быть белой-белой, белой-чёрной, чёрной-белой или чёрной-чёрной. Переходы между четырьмя состояниями обозначались последовательностями переменной длины. Равномерные белые и чёрные участки получали счётчики, длина которых менялась от двух до семи битов. Если считать каждый входной бит отдельным пикселем, получалась бы уверенная, но чужая картинка.
Слово «обратить» встречалось в инструкции несколько раз и каждый раз означало своё. Одна операция относилась к сохранённому байту целиком. Внутри блока поля числа полезных битов, горизонтальной позиции и размеров чёрных и белых серий передавались с обратным порядком битов в каждом поле. Порядковый номер и текущее состояние — нет. Слова, обозначавшие длину серии в самих данных, тоже читались задом наперёд, но в границах своих полей. Katz подчёркивал разницу между обращением n-битного поля и обращением с дополнением целого байта. Универсальная кнопка «развернуть всё» написала бы универсальную ошибку.
Заголовок каждого блока давал возможность снова найти место на листе. В 585 битах были синхронизация, 37-битный заголовок, область данных на 512 битов и контрольная сумма. Число полезных битов показывало, сколько из этих 512 следует использовать; ноль означал отбросить блок. Если новая горизонтальная позиция оказывалась впереди прежнего конца, промежуток заполнялся белым. Если она возвращалась назад, новые данные заменяли перекрытую область. Порядковый номер вращался от 0 до 3 и выдавал пропуск. Начало каждого блока следовало разбирать по его собственным состоянию, размерам серий и позиции, даже когда они не совпадали с концом предыдущего.
Декодер мог продолжить после потери, но пропавший фрагмент не восстанавливал волшебством.
После такой процедуры формат RFC 797 выглядел почти отпуском. Четыре байта ширины, четыре высоты, по байту на горизонтальный и вертикальный шаг; с одиннадцатого байта начинаются точки. Строки идут слева направо и сверху вниз, у правого края дополняются нулями до границы байта. Вертикальный шаг один, два или три соответствовал трём режимам Rapicom: программа показа могла повторять сохранённую строку. Другому приложению доставались размеры и пиксели, а не тайный язык факса.
Есть и цена в машинном времени. По данным Katz, средний документ Fine Detail декодировался около двух минут процессорного времени на DEC KL10 под TOPS20. Растр примерно 1726 на 2100 точек занимал около 204 дисковых страниц. Графический терминал HP показывал его частями, позволяя приближать детали; целый лист сразу не помещался. Файл пришёл раньше. Картинка пришла тогда, когда кто-то заставил программу читать его правильно.
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров





