Формат COSY
2023-03-29 23:36На БЭСМ-6 при записи текстовых файлов на диск применялось простое кодирование, позволявшее сэкономить пространство. Формат назывался COSY: сокращение от "Compressed Symbolic". Идею подсмотрели в документации от фирмы CDC, оттуда же и название. Цитата из COSY_MASTER_Mar67.pdf:
1. Разбиваем входной файл на строки. Каждую строку обрабатываем отдельно.
2. Из каждой строки берем первые 80 символов. Лишние игнорируем.
3. Преобразуем в кодировку КОИ-7. В википедии она приведена под названием КОИ-7 Н2. Присутствуют большие латинские и большие русские буквы. Символы с кодом меньше пробела не допускаются.
4. Дополняем строку справа пробелами до 83 символов.
5. Последовательности из одного и больше пробелов заменяем одним символом:
7. Если число символов в строке получилось кратным 6 - оставляем как есть. Иначе добавляем несколько байтов, чтобы стало кратно 6:
К примеру, строка "abc" таким образом превращается в "ABC\320\12\12".
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
7. Если число символов в строке получилось кратным 6 - оставляем как есть. Иначе добавляем несколько байтов, чтобы стало кратно 6:
- если нужен один байт - добавляем \012
- если нужно два байта - добавляем \040 \012
- если нужно три байта - добавляем \040 \040 \012
- если нужно четыре байта - добавляем \040 \040 \040 \012
- если нужно пять байтов - добавляем \040 \040 \040 \040 \012
К примеру, строка "abc" таким образом превращается в "ABC\320\12\12".
