Как мы программировали в 80-е или Путь в тысячу ли начинается с первого шага программы.
Как мы программировали в 90-е. Часть #01
Как мы программировали в 90-е. Часть #02

Итак, у меня появился мануал по Клипперу и первые представления о БД.
Первая же задача – загрузка (импорт) текстового файла в базу – была сама по себе интересной.

Вкус того времени.
Вкус того времени.

Файл с котировками  приходил с биржи по итогам еженедельных торгов, внутри была текстовая таблица с повторяющимися каждые 50 строк заголовками – в этом угадывался след и дух большого ВЦ с большой машиной, большим принтером и перфорированной по обеим сторонам бумаги согласно ГОСТу.
Таблица состояла из столбцов в следующем порядке (это важнецки важно для дальнейшего повествования!):
| № | Наименование товара | Артикул | Цена единицы| Количество | Расположение |

Были ещё какие-то поля – общим числом около 10-12. Каждый столбец таблицы нужно записать в соответствующий столбец базы – и с этим я справился довольно быстро.

Следующая задача – поиск и выборки по БД принёсла множество открытий.
К примеру – насколько я был самонадеян в тех сроках, о которых мы договорились с Денди. А ещё открытия были самые чудесные:
- города Николаев и Новосибирск при сортировке оказывались выше Алапаевска и Барнаула;
- поиск упускал все слова, в которых была прописная кириллическая «р». Какие-нибудь шины он находил, а, скажем, перфоратор – игнорировал, хотя в файле котировок он был.

При выводе выборки на экран «р» так же отсутствовала. Если у Остапа Ибрагимовича машинка печатала с турецким акцентом, то у меня появлялись целые новые лингвистические сущности - «тубы» вместо «труб», «ейки» вместо реек и прочие «каны», «убильники», «писсуаы» и даже «отоы».

Пояснение. В машинке, купленной героем книги «Золотой телёнок» Шурой Балагановым отсутствовала буква «е», поэтому Остап Бендер был вынужден заменять её на «э»:
— Вот послал бог дурака уполномоченного по копытам! — сердился Остап. — Ничего поручить нельзя. Купил машинку с турецким акцентом. Значит, я начальник отдэлэния? Свинья вы, Шура, после этого!

Это была загадка, об которую мы сломали всю нашу коллективную логику. Тут, на удачу  у одного из наших программистов случилась короткая командировка в Москву. Он-то и привёз ценные знания.

Пояснение. Времена были доинтернетные. Уже появились на досках BBS и форумы в FIDO – мы же были от них отрезаны секретностью, был строгий запрет на модемы. Лавки с литературой на тему компьютеров и ПО только появлялись, книги в них были в категории «Как включить компьютер в розетку для чайников» и, разумеется, Фигурнов. Поэтому главный канал информации – это командировки в центры вычислительной жизни – Москву, Новосибирский Академгородок и т.д.

В первую же свободную минуту вокруг вернувшихся из командировок всегда собирался круг особоприближённых — услышать новости из первых рук первыми:
— Поговорил я там с знающими людьми за чашкой чая... — примерно так начинался «доклад» просветлённого возвращенца.

В этот раз знающие люди передали весть персонально мне:
— Заглавная кириллическая «Н» в первых версиях файлов формата СУБД dBase была служебным символом – знаком окончания строки в мемо-полях. Ушлые люди хитрят и меняют её на латинскую «Н» – на заглавную эйч. В таблице кодов ASCII латиница выше региональных (относительно США) алфавитов, поэтому в кириллических базах Николаев оказывался выше Артамонова.

А прописная кириллическая «р» была служебным символом в теле языка Си. Поэтому большинство программ, написанных на Си эту букву «не видели». Norton Commander, например.  

Клиппер, как дальний родственник СУБД dBase, написанный на Си, хромал на обе буквы.

Коллективный кириллический разум уже придумал костыли и даже их с разным успехом их использовал – именно с разным.

Дальше – больше. Самые важные поисковые функции с региональными алфавитами либо работали ограниченно, либо отказывались работать совсем. Опции поиска «все заглавные», «все прописные» и «игнорировать регистр букв» – работали только в латинице.

Поэтому приходилось писать аналоги этих функций на языке Клиппера, и это страшно замедляло всё — и разработку программы, и её работу с базами. Там, где операция легко выполнялась штатной функцией за доли секунд, рукописная занимала иногда десятки строк и поиск на тестовой базе в 1000 записей происходил в течении нескольких минут.

Для полноты картины - в таблице ASCII кириллица разделена псевдографикой и это тоже надо было учитывать в поиске и выборках.

Аванс, полученный от Денди, я уже значительно подъел, ещё больше её подъела, сгрызла, гопнически отожрала инфляция. Спасали небольшие леваки, в том числе – и по написанию небольших баз данных. Котировочная же программа заполнила все мои мысли – и на тему её написания, и на тему – какими могут быть последствия, если я нарушу условия договора.

Пришлось созвониться с Денди:
— Тут такое дело... — и я честно изложил весь список случившихся откровений.
Мы договорились о продлении договора ещё на месяц, я выдохнул – Денди принял ситуацию спокойно. К тому времени я уже знали истории, когда малиновые заказчики оперировали в подобных ситуациях другими аргументами, некоторые мои коллеги изрядно настрадались.

— Будь проклят тот день, когда я сел за баранку этого пылесоса! — всё чаще звучало в голове.

И тут из очередной командировки кто-то привёз дистрибутив FoxPro! Это был совершеннейший прорыв – это и среда программирования, и возможность строить архитектуру баз данных и работать с ними из командной строки – с моментальным отображением результатов в окне отладчика! Самое главное – Фокс понимал кириллическую «р»! Решение о миграции с Клиппера на Фокс было моментальным и неоспариваемым, работа над программой значительно ускорилась.

Пояснение. За давностью лет какие-то подробности уже прочно забыты. Припоминаю – был какой-то хак от наших умельцев – программа, которая меняла какие-то значения внутри Фокса – и он начинал нормально работать с «р» или даже и с Эйч тоже. Ещё была резидентная программа, которая подменивала их «на лету». Потом, вроде, это решилось на версии 1.2, когда компания Fox Software обзавелась дистрибуторами в России? Если вы знаете этот нюанс лучше – прошу поправить, а готов проапдейтить свою историю, самому стало любопытно!

В тот период случился ещё один забавный момент.

У меня было ощущение – алгоритм кириллического поиска и выборки можно значительно упростить и сделать быстрее. Я уже сделал две БД – одна была заполнена кириллическими записями, вторая – латиницей, так я имел возможность сравнивать время работы поисковых операций. Из-за всех вышеописанных подлостей от отцов-разработчиков и моих трюков по их преодолению кириллический поиск занимал минуты там, где «родной» пролетал в секундах, в долях секунд. Я перепробовал несколько методов – поиск немного ускорился, порядки отставания во времени остались. И чем дальше – тем больше я концентрировался на этой задаче.

И однажды решение мне - приснилось! Такое уже было у меня на третьем курсе – во сне я увидел свою ошибку, которую я повторял в своём курсовике, выложу эту историю позже, она великолепная!
В этот раз мне приснилась стандартная функция Фокса, только её использование было необычным - «с приподвывертом». Утром я в нетерпении ворвался в кабинет, заменил огромный блок текста программы на эту функцию и две дополнительные текстовые переменные. И произошло прекрасное – таймер поиска по кириллической базе показал почти равное время с эталонным значением по нативной базе!

Я позвал коллег – и наслаждался их потрясённым видом, это был один из великолепнейших моментов в жизни!
Сам тот период вспоминается как время огромных прорывов и открытий – новый софт, новые знания, каждый день, каждую минуту.

Однажды мы с приятелем-коллегой, изрядно задержавшись у компов, каждый за своими задачами, шли от КБ к заводской проходной. У меня заработали нужные связи между базами, он запустил процесс, над которым работал несколько месяцев.

— Знаешь, — сказал он мне тогда, я до сих пор помню эту фразу, сказанную на каком-то очень возвышенном выдохе, — по-моему, это, примерно так же, как в первый раз залезать в трусики девушке...
Где-то так, да...

Аванс закончился, писал я программу уже на сухарях – тем понятнее моё нетерпение, с которым я доделывал завершающие пункты в ней – и поехал в офис Денди!

Помните или вы родились позже?
Помните или вы родились позже?

— Вот, как раз свежие котировки прислали, посмотрим! — мы сели за компьютер, я установил программу, запустил импорт нового файла...

...И тут...

...многократно проверенный импорт – слетел!!!

СЛЕТЕЛ!!!

Преодолевая шум в голове, пытаюсь понять – почему? Единственный вариант - возможно, изменился формат файла? Лезу в него – а там!!! Всё по-другому, всё! Другая структура заголовка и, самое главное, другой порядок столбцов! Мало того – цена записана с десятичными пробелами (у меня - без!), вместо точки – запятая и так – во всём!
ВО ВСЁМ!

В изумлении поворачиваюсь к Денди:
- Это же совсем другая таблица?
- Да они все, примерно, одинаковые – товар, количество, цена...
- Все? Примерно?

Оказалось, Денди получает котировки не с одной биржи, а с разных. У каждой – свой формат таблиц. В некоторых (опять ощущается дух большого ВЦ!) все наименования написаны КАПСЛОКОМ, в некоторых – и вовсе CYRLAT – это когда кириллический текст написан латиницей! У кого-то артикул был после количества, у других он шёл до наименования товара, у третьих он отсутствовал. И так далее!!!

У меня просто потемнело в глазах. Я делал импорт под один формат – а их тут уже с десяток, а брокеры, как оказалось, постоянно заключают договоры с новыми биржами! И везде – везде! – программисты писали базы в своих форматах!

Продолжение следует.

P.S. Обнаружил - многие технические подробности, которые тогда были частью моего мира, утратили детали, размылись в очертаниях. Поэтому буду признателен за дополнения и поправки.

Комментарии (28)


  1. JBFW
    03.01.2026 16:22

    Norton Commander был написан на Паскале, а не на С

    У Клиппера не было проблемы с Р и Н, по крайней мере в cp866 кодировке. Проблема была у какого-то фидошного софта (ме я вид о? - ет!)


    1. SunWindSmile Автор
      03.01.2026 16:22

      Norton Commander был написан на Паскале, а не на С

      О, не знал, спасибо! Тем не менее, в его редакторе русская буква "р" исчезала при вводе.
      А в том фидошном софте, которым я пользовался, проблем с кириллицей не было. А в клиппере и фоксе - были. В первых версиях - точно, потом, по мере понимания разработчиков "кириллического рынка" они были устранены, конечно же. Описываемые события - это где-то 91-92й годы.


      1. JBFW
        03.01.2026 16:22

        Клиппер я использовал уже в 95-96, что раньше не в курсе.

        В БорландС/ТурбоС не было проблем с кириллицей, это ещё в 92 примерно. Туда же в кучу ТурбоБейсик и ТурбоПролог (все Борланд).

        В те времена другая была проблема - часть кириллизованного софта шла в 866, часть в koi8r, часть - ГОСТ какой-то там.


        1. abcdsash
          03.01.2026 16:22

          да ладно, скорей всего все зависело от драйвера, который загружался при старте ДОСа... я вот помню на ЕС1841 такое было точно... в одном случае даже у бордюров Нортона были кирилические буквы, вместо псевдографических линий, в другом не было маленьких кириличекских букв... ну и так далее. Так что тут вопрос, скорей всего, полноты поддержки кодовой таблицы с кириллицей в самом ДОСе, а потому же и в том, насколько приложения полагались на это, а не тащили свои варианты


      1. SunWindSmile Автор
        03.01.2026 16:22

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


      1. Int_13h
        03.01.2026 16:22

        была резидентная программа подмены ввода до того как сами редакторы научились

        Редакторы научились в автозамену, в конфигах прописывалось менять Н на Н. Но саму проблему исчезновения Н так и не исправили.


  1. anonymous
    03.01.2026 16:22


    1. BjLomax
      03.01.2026 16:22

      GoldEd не понимал "H"


  1. DikSoft
    03.01.2026 16:22

    Clipper Summer 87 и Clipper 5.0, 5.1, 5.2 не имели такой проблемы с 'p' и 'H'.

    Что-то похожее было у СУБД Карат (стыренный переведённый Dbase III+ или FoxBase ), и в левых русификаторах раскладок клавиатур, заточенных под FIDO.


  1. AndrewT2
    03.01.2026 16:22

    Про какой год речь?


    1. SunWindSmile Автор
      03.01.2026 16:22

      90-92й годы.


  1. saipr
    03.01.2026 16:22

    Мы со второй половины 80-х, а тем более в 90-х, программировали в среде ОС Unix, как правило, на языке Си, а СУБД была Ingres.


  1. anonymous
    03.01.2026 16:22


  1. Igornord
    03.01.2026 16:22

    Во втором фоксе появилась возможность работать а ля Юникс с данными через fopen. Вот где я помню поизощрялся, можно было даже на ходу починить dbf (это когда количество записей физически и указанное в заголовке не совпадало и появлялось пугающая надпись на предмет того, что файл не является базой данных). Писал даже какую-то универсальщину на предмет добавить в ЛЮБУЮ базу служебное поле с контрольной суммой дабы выявлять любителей подправить непосредственно dbf в надежде подогнать данные в обход логики заложенной в программе. Причём умудрился это сделать в максимум три десятка строк на фоксе. Помнится отсылал кому-то в Первопрестольную, через пару дней как это сейчас говорится - получил оффер, но так как башка была занята чем-то другим - на оффер забил о чем потом сильно жалел. Или не жалел, не упомню уже потому как событий за 7-8 лет жизни с начала 90-ых хватит на пару-тройку толстых романов -))))

    P.S. Там же во втором фоксе появилась возможность работать с базой используя SQL запросы, и оно реально повышало быстродействие в десяток раз.


  1. evgeniyiviv
    03.01.2026 16:22

    Да в нортоне был глюк с русской р

    Приходилось вводить латинскую p


  1. WinLin2
    03.01.2026 16:22

    Был какой-то переключатель раскладки клавиатуры, который подменял определенные символы, в мое время этим уже не пользовались.


  1. Igornord
    03.01.2026 16:22

    С Фоксом картина примерно такова - в версии 1.0 с р и Н было плохо. Поначалу просто патчили оверлей. Затем придумали хак - вешалась программка написанная кем-то резидентом - и проблема решалась. В 1.0.1 вроде как проблема была полностью решена. Во втором фоксе появились визарды от которых я плевался, но помогали быстро нарисовать окна и прочую лабуду в заданных местах, но код получался - мягко говоря раздутым. Но потом фокс был съеден одной известной фирмой которая прославилась таким образом убивать конкурентов и на этом судьба фокса была закончена.


    1. Krey
      03.01.2026 16:22

      или наоборот, только начиналась


    1. SunWindSmile Автор
      03.01.2026 16:22

      Версий я уже не вспомню, по-моему - была версия, в которой ситуация с "р" и "Н" были решены, но они, по-прежнему, не умели искать в произвольном регистре в кириллических базах. В полной мере, ЕМНИП, это заработало в версии фокса под окнами. Но я к тому времени, неожиданно для себя, ушёл в другую деятельность, возможно, напишу об этом позже, там много занятного было.:)


      1. WinLin2
        03.01.2026 16:22

        Foxpro 2.6 for dos никаких проблем не было с поиском и кодировками.


        1. SunWindSmile Автор
          03.01.2026 16:22

          Я, видимо, с ним разминулся. Погуглил - он вышел в 94м, я, как раз, весной этого года перешёл в другую деятельность.


    1. aik
      03.01.2026 16:22

      На работе фокспрошный софт массово использовался до 2009 - когда на 1С перешли, а от мелких хвостов буквально только-только избавились, с месяц назад. Да и то, я пока не в курсе, полноценно или там осталось этот фокспро "на подхвате" (БД столовой, которую всем было лениво в 1С конвертировать).


  1. saipr
    03.01.2026 16:22

  1. astenix
    03.01.2026 16:22

    Году в 2001-м порадовал линуксовый аналог MS Office, который, если не ошибаюсь, назывался Star Office. Я там статью написал, сохранил, все нормально.

    Потом открыл — в тексте исчезли все буквы «я».

    Гм, сказал я, и вернулся в mcedit.


    1. saipr
      03.01.2026 16:22

      Тогда же появился и KOffice, "линуксовый аналог MS Office". Мне тогда казалось вот. вот и настанет конец эры Microsoft и MS Office... А mcedit тоже рассматривался по началу как альтернатива MS Word...


    1. aik
      03.01.2026 16:22

      mcedit и staroffice - это как блокнот и ворд. Несравнимые программы, мягко говоря.
      Ну и staroffice сперва превратился в open office, а потом и в libre office. Исполняемые файлы до сих пор по старой памяти зовутся как swriter, scalc и т.п.


      1. astenix
        03.01.2026 16:22

        Скажем не мягко, а твердо — мне тогда стало нервно набирать тексты в консольном редакторе, захотелось красивого. В моем окружении были Abiword и Staroffice. Первый уже тогда выглядел стремно, второй вроде похожим на MS Word. Я и попробовал.

        На самом деле от меня требовалось сдавать тексты в plain text в кодировке ms-dos. В редакции все компьютеры были терминалами, которые под dos работали, и кто-то в VolkovCommander, кто-то в "Слово и Дело" сидел, а файлы сохраняли в своих "именных" сетевых каталогах. А мне поставили терминал к серверу RedHat с KDE, и я с интересом тыкал там во все, что было.

        Там все работало медленно, по внутренней сети, движение мыши провоцировало движение курсора с большой задержкой, например. Поэтому да, я буквально вернулся набирать тексты в mcedit, где мышь не нужна, там все шуровало моментом.


        1. aik
          03.01.2026 16:22

           от меня требовалось сдавать тексты в plain text в кодировке ms-dos

          Тогда к чему были все эти заигрывания с офисами? Взяли бы kwrite какой-нибудь.
          Abiword был примерным аналогом wordpad'а. Ну, чуть помощнее. Я тогда всех этих "аналогов" офиса перепробовал немеряно, ибо комп был слабый. В общем, под винду ничего лучше, чем MSO так и не нашел. Даже для 486.