vak: (Default)
[personal profile] vak
На БЭСМ-6 при записи текстовых файлов на диск применялось простое кодирование, позволявшее сэкономить пространство. Формат назывался COSY: сокращение от "Compressed Symbolic". Идею подсмотрели в документации от фирмы CDC, оттуда же и название. Цитата из COSY_MASTER_Mar67.pdf:
COSY compresses card images by inserting special BCD characters for two or more sequential blanks. Octal numbers 16, 17, 35, 36, 37, 55, 56 and 57 represent two through nine consecutive blanks. If a card image contains more than nine consecutive blanks, 76xx (octal) is used; the 6-bit number xx is ten (decimal) less than the number of blanks. If the image contains more than 73 blanks, 7677 (octal) is used with one of the above special octal numbers. The character 12 (octal) indicates the end of a compressed card image. If the user employs any of the special characters above, COSY replaces it by 15 (octal); this restricts the character set available to the COSY user.
Опишу формат, как он был реализован в текстовом редакторе Волкова и мониторной системе Дубна.

1. Разбиваем входной файл на строки. Каждую строку обрабатываем отдельно.

2. Из каждой строки берем первые 80 символов. Лишние игнорируем.

3. Преобразуем в кодировку КОИ-7. В википедии она приведена под названием КОИ-7 Н2. Присутствуют большие латинские и большие русские буквы. Символы с кодом меньше пробела не допускаются.

4. Дополняем строку справа пробелами до 83 символов.

5. Последовательности из одного и больше пробелов заменяем одним символом:
  • один пробел заменяется на символ \201
  • два пробела → \202
  • три пробела → \203
  • ... и так далее ...
  • 83 пробела → \323
6. В конец строки добавляем символ \012.

7. Если число символов в строке получилось кратным 6 - оставляем как есть. Иначе добавляем несколько байтов, чтобы стало кратно 6:
  • если нужен один байт - добавляем \012
  • если нужно два байта - добавляем \040 \012
  • если нужно три байта - добавляем \040 \040 \012
  • если нужно четыре байта - добавляем \040 \040 \040 \012
  • если нужно пять байтов - добавляем \040 \040 \040 \040 \012
8. Записываем строку в выходной файл как целое количество 48-битных слов.

К примеру, строка "abc" таким образом превращается в "ABC\320\12\12".

Date: 2023-03-30 07:56 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

Да, смешно было возиться с адресацией не по байтам. На СМ-1 драйвер монитора, если посылал строку с нечетным числом символов, то делал таки четное, и добавлял 0 в конце (баг такой был).

Date: 2023-03-30 11:00 (UTC)
dmarck: (Default)
From: [personal profile] dmarck
но БЭСМовые пятибайтники всё же -- отдельный шик!

Date: 2023-03-30 11:28 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi

О это да. Меня это особенно злило в форте, что Агамирзян написал. Специфично.

Date: 2023-03-30 19:26 (UTC)
dmarck: (Default)
From: [personal profile] dmarck
руки описались, в голове троичная логика подключилась -- ну, дальше ты сам все эти механизмы знаешь ;)

эх молодость молодость

Date: 2023-03-30 13:59 (UTC)
From: [personal profile] dedekha
В 1985-86 основной системой был Демос на СМ-4 + жестким диском от ЕС. Он тянул 20+ терминалов. Не помню название редактора (что-то Демосовское). Он сохранял текущую сессию в виде последовательности нажатых клавиш.

Система периодически рушилась, после перезапуска все запускали recovery на своих терминалах и уходили курить пока на каждом терминале редактор проигрывал сессии клавиша за клавишей. Это выглядело как матрица или грядущее будущее ИИ: людей нет только десяток другой машин самостоятельно редактирующих содержимое экранов.

Date: 2023-03-30 14:53 (UTC)
From: [personal profile] ivanrubilo
Такой какой-то странный RLE что-ли получается?

Date: 2023-04-01 00:19 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Это всё описано у Мазного.

Date: 2023-04-01 08:01 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Пардон, это у меня мозаика в голове сложилась из разных источников. У Мазного упомянута только кодировка пробелов. Про концы строк я помню, что где-то читал ещё давно, но уже не помню, где.
Странно, что не догадались сделать соглашение, что концевые пробелы не хранятся. Видимо, формат придумывали тогда, когда у большинства строк последние 8 символов были заняты нумерацией, поэтому об этом просто не подумали.

Что-то у меня сканер плохо работал, каждые несколько страниц получалось порченое изображение, и я через пару десятков страниц бросил.