Часть 4 - борьба за русский язык
От: Pavel Dvorkin Россия  
Дата: 24.06.05 12:51
Оценка: 90 (15)
#Имя: FAQ.Learningtofly.PavelDvorkin.part4
Мемуары мои вызывали определенный интерес, судя по оценкам. Решил написать еще немного.

Речь пойдет о моих мытарствах в освоении вывода текста на русском языке...

Когда я только начинал свой путь в программировании, никакой проблемы русского языка не было вообще. Потому что и проблемы языка тоже не было. М-220 успешно печатала нормализованные десятичные числа, и этого считалось вполне достаточным. Что же касается текстов, хоть английских, хоть русских, то те, кто умел заставить ее хоть что-то напечатать, считались гуру непревзойденного уровня, и мне до них было очень далеко.

Так что вопрос кодировки не стоял перед нами вообще. И о том, что один символ — это один байт, мы тоже не знали, так как и байтов тоже никаких еще не было. Были 45-разрядные ячейки (слово "бит" точно существовало, но говорили "разряд" — не иначе как тяжелые последствия борьбы с низкопоклонством перед Западом . Сколько символов в этой ячейке хранилось и как они там кодировались — я и до сих пор не знаю.

Зато другое знать обязаны были все. Необходимо было уметь читать перфокарты. О, это было не такое простое искусство. Во-первых, на 80-колоночной перфокарте почему-то использовались только 45 колонок. Во-вторых, набивка была не поколоночная, а построчная, по 7 бит ("разрядов" на символ.

45 на 7 как-то не очень хорошо делится, как легко заметить. И действительно, на перфокарте некоторые столбцы никогда не пробивались. Разобраться в таких условиях, где один символ заканчивается, а другой начинается — так просто не получится. Нужна полностью пробитая перфокарта ("читалка") . Эта читалка разграфлялась шариковой авторучкой вертикальными линиями , а потом столбцы, принадлежащие данному символу, закрашивались тушью или акварелью. Наложишь ее на свою перфокарту, посмотришь на просвет, свернешь в уме двоичное число в восьмеричное — и все дела!

Кстати, коль уж о перфокартах речь зашла, не могу не рассказать и о том, как я впервые ее исправлял. В общем, один из символов был не тот, что нужно. Новые дырки прорезались без труда с помощью бритвенного лезвия, а как быть с ненужными дырками ? Спросил кого-то, говорят — заклей. Я собрался было клей искать и думать, как ее правильно заклеивать, но все оказалось намного проще. Просто надо было кусочек конфетти вставить в дырку и слегка пригладить. Хотите верьте, хотите — нет, а держалось как влитое! Правда, все же мы обычно после таких действий перфокарту все же дублировали. Устройство для дублирования носило неофициальное название "крокодил" и шум от него был очень хороший.

В общем, освоил я это чтение по дырочкам, а тут и пора пришла машину менять. Перешел я на БЭСМ-6. Тут уже символы набивались поколонно, при этом использовались все 80 колонок и читалки исчезли из употребления. Правда, строк на перфокарте было 12, так что тогдашний байт содержал 12 битов . Это, впрочем, нас мало волновало, так как байтов на этой машине все равно не было.

Но я отвлекся. Я ведь обещал про русский язык написать. На БЭСМ-6 с ним проблем никаких не было. Просто на перфокарте пробивались дырочки, а поскольку их было максимум 12, то хватило бы места и для грузинского с армянским, если бы понадобилось . Так что нас ничего не беспокоило, и о том, что 1 символ == 1 байт, мы по-прежнему не знали.

Пришла, наконец, пора, познакомиться с байтами. Впервые о их существовании я узнал, когда перешел на ЕС ЭВМ. Вот тут уж байты были, и символы занимали ровно один байт. Хотя 12-битные байты перфокарт никуда не делись, пришлось все же познакомиться и с хранением символов в ОП.

Так я впервые узнал о кодировке. Называлась она EBCDIC, в отечественном варианте ДКОИ-8 в нее добавили русские буквы. Тому, кто их туда добавил, надо бы при жизни памятник поставить, настолько простое и элегантное решение он нашел. Тем русским буквам, которые не имеют аналогичных по начертанию латинских (Б,Ц,И...) были присвоены свои коды. Что же касается тех букв, у которых есть аналогичная по начертанию латинская (А,М,Р) — решили просто — и так сойдет, зачем еще какие-то коды им добавлять ? Таким образом, были буквы русские, латинские и русско-латинские — универсальные, так сказать . Хочешь — думай. что это русская "В" (ве), а хочешь — что латинская "B" (бэ).

Как в таких условиях люди писали программы обработки текста — для меня до стх пор загадка. Я их не писал, а занимался расчетами, поэтому максимум, что мне требовалось — уметь выводить на печать текстовые строки. Это труда не составляло, а посему ДКОИ-8 никаких возражений у меня не вызывала.

Пришла пора пересесть на СМ ЭВМ. Здесь, слава богу, ДКОИ-8 не было. Здесь я познакомился с КОИ-7, и нельзя сказать, что это знакомство не оказало влияния на мою психику .

Но по порядку. На СМ-4 работала операционная система ОС РВ, урожденная RSX-11. В ходе ее преобразования в ОС РВ ASCII-7 был заменен на КОИ-7, и вот как это было сделано.

Понятно, что в 7 бит (кто и зачем это придумал — до сих пор не знаю) уложить можно либо англиский строчный и заглавный, либо английский и русский, но только одного регистра. В RSX-11 были английские буквы обоих регистров — о локалах тогда и речи не было. При переделке ее в ОС РВ латинские строчные буквы переделали в русские заглавные, упорядочив их, естественно, по латинскому алфавиту (АБЦДЕ...) и добавив лишние буквы в конце. Проще говоря, на экране дисплея символ с соответствующим кодом изображался как русское "Б", а не латинское "b". Изображения символов в те времена вшивались в дисплей намертво, аппаратно, об их изменении и речи не могло быть.

Прекрасно все работало! Просто замечательно! И русский язык, и английский — в полном порядке. Один регистр, правда, ну да ладно, нечего с жиру беситься. Скажи спасибо, что хоть перфокарт здесь нет и можно читалки не пробивать!

В общем, все было прекрасно, пока однажды не понадобилось мне загрузить вместо ОС РВ оригинальную RSX-11. Загрузил, и тут же увидел на своем дисплее странное сообщение

ФИЛЕ НОТ ФОУНД

RSX-11 просто решила вывести это сообщение строчными буквами. Не знаю, почему, видимо, ей так лучше показалось. Но советский дисплей вместо презренных латинских строчных букв вывел добротные русские заглавные, вот и все!

Разобравшись с этим ФИЛЕ и малость попривыкнув к нему, я уже совершенно спокойно воспринял следующее сообщение

ДЕЖИЦЕ НОТ РЕАДЫ

и тут же вызвал инженера, который этот ДЕЖИЦЕ и начал чинить.

Пришла пора IBM PC. Не все, наверное , знают, что на заре его существования (случайно совпавшим с концом советской власти у нас пытались делать его клоны — ЕС-1840, 1841, Искра-1030. Лучше, конечно, их бы не делали вообще, но к счастью, это не долго продолжалось. Все же десяток Искр-1030 попал в наш университет, и мне пришлось с одной из них иметь дело. Здесь с русским языком дело обстояло еще интереснее.

КОИ-7 (а также КОИ-8, с которым я имел дело на Ямахе) имел русские буквы, упорядоченные по латинскому алфавиту. Писать программы текстовой обработки при таких условиях, сами понимаете, радость небольшая, и вот на Искре-1030 решено было этому положить конец!

Какие-то деятели разработали кодировку, в которой все было замечательно. Все 32 русские заглавные и 32 строчные буквы в ней были, упорядочены они были по русскому алфафвиту, без дырок, и за буквой 'Я' сразу следовало 'a'. В общем, жить бы и радоваться. По-видимому, от радости они свою кодировку даже оформили как ГОСТ, а в те времена с ГОСТами не шутили. Не уверен, что этот ГОСТ отменен, так что, возможно, мы и сейчас все его нарушаем.

Все было хорошо, одно только маленькое "но" было. Чтобы впихнуть эти 64 символа, да еще подряд, авторы кодировки ГОСТ затронули область, принадлежащую символам псевдографики. После того, как на этой Искре-1030 я первым делом стер русскую пародию на MS-DOS, поставил нормальную MS-DOS 3.3 и запустил Нортон Командер (предшественник FAR'а), он немедленно изобразил мне свои панели с рамочкой из букв "щ" или "ы", не помню уж точно. Впрочем, в углах этой рамочки были, естественно, другие буквы. Зрелище не для слабонервных, я вам скажу. А программ без псевдографики тогда практически не было, надо же как-то оформлять экран. В общем, кодировка ГОСТ быстро канула в небытие.

Остальное большинству известно. На смену пришла 866 кодировка (кстати, ее называли альтернативной — кодировке ГОСТ, естественно). И лишь с появлением Windows и кодировки 1251 стало возможным как-то перевести дух. Впрочем, как сказать. Помню, как я пытался строчную букву "я" запихнуть в меню в программе для Windows 3.1. Что ни делал — general protection fault (по-нынешнему — access violation). Причина простая — ее код 255 . Так и не смог ее туда вставить, пока на Windows 95 не перешел.

А потом... Потом появился Интернет, и, казалось бы, давно ушедшая КОИ-8 вернулась обратно со всеми своими проблемами. А потом появился Юникод. Впрочем, это всем и так хорошо известно.
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.