Предыдущая глава |
↓ Содержание ↓
↑ Свернуть ↑
|
Символ : тоже сразу приобрёл два значения: табуляция (в пару к ! в роли конца строки) и "опричь" (другой) — другой смысл чего-то: там, где регистры форматного механизма оператора Write % доступны непосредственно (как #N и =N т.е. в самом ейном формате) :число указывает на программную строку; а там где непосредственно доступны программные строки — :N (где N — одна цифра) — вот как раз на оный регистр.
В процессе развития Фокала обнаружены существовавшие и ранее внутренние объекты: буфер клавиатуры, числовой аккумулятор, строчный аккумулятор (он же входной буфер оператора Ask). И добавлены средства для работы с их содержимым. В основном со строчным аккумулятором. В результате Фокал приобрел более продвинутые возможности по обработке текстовых строк. Хотя вовсе и не такие, как изначально планировалось.
Кроме того был доработан механизм вызова подпрограмм, добавлены средства взаимодействия с файловой системой и реакции на ошибки. А так же кое что по мелочи.
Если провести аналогию между языками программирования и транспортными средствами, то исходный (базовый-0) Фокал выглядел как велосипед с моторчиком даже на фоне такого относительно простого языка-легковушки как Паскаль или Си (хотя последний — что-то типа УАЗика, для езды по бездорожью). И вот теперь Фокал дорос до мопеда. (Но надеюсь всё-же не мотоцикла, которому подавай персональный гараж, а на межэтажную лестничную площадку уже не закатишь...)
p.s. Из опыта написания программ работающих со строками. (Вот в частности СОРТ.f — сортировка — на предмет тезаурус получить...)
1. Внимание: не надо оставлять маркер в конце строчного аккумулятора — он будет выглядеть пустым!
Добавил в оператор Write ключевое слово Reg — чтобы показывал содержимое регистров форматного механизма и содержимое аккумулятора. Ну так сделал там предупреждение на этот случай, и всё равно несколько раз на этом обжегся...
Однако, может Вы хотите выдать содержимое строчного аккумулятора пользователю, сидящему за терминалом, чтобы он его малость поредактировал:
W %$ 0;A
2. Соображения по поводу "?". Фокал — язык максимально лаконичный. За сим все используемые в нём символы должны вызывать правильные ассоциации. Ну так вопросительный знак должен ассоциироваться с отладкой. Оператор такой у нас уже есть. Более того — был всегда. Включает трассировку и пошаговый режим. (Я кстати его маненько поправил — вот в частности чтобы по "?" мини-справку по своим командам выдавал, а то сам путаюсь.)
А вот как на счет ключевых слов в других операторах? Не очень.
Пока только Operate ? сообщает куда направлены каналы ввода и вывода. Причем пишет не в канал вывода, а только и исключительно на терминал. (Иначе какой от этого толк?) В том числе и в пошаговом режиме: там, если например назать кнопку "забой" (она же "Backspace") можно ввести (и выполнить) обычную командную строку. Причем на это время ввод и вывод временно переключаются на терминал. Ну так там Operate ? сообщает не этот тривиальный факт, а то, куда они указывали.
Еще был (и надеюсь, опять будет) такой оператор Vizual — для визуализации результатов вычислений. Проще говоря — графики строить. Но пока удалён на реконструкцию: уж больно примитивными оказались реализованные в нем прошлый раз обычные графические примитивы — точка, линия, окружность, полигон... (Кстати, указываемые вторым ключевым словом.) График построить (или например гномика нарисовать) конешно было можно, но сложно и громоздко. А нам надо чтобы "одной левой". Ну так этот оператор (и, кстати, одноимённая с ним функция FViz) умел переключать режимы работы дисплея: чтобы нарисовать например линию, его режим должен быть графический а не текстовый. А чтобы узнать, какие у этого дисплея вообще есть режимы, в нём тоже было ключевое слово "?".
И это пока всё.
p.p.s. О коварстве "очевидных" вроде-бы вещей. Таких как конец строки.
(пофилософствовать со злости потянуло:-)
Вот как, спрашивается, текстовый файл делится на строчки? А по-разному, от системы зависит...
Были времена (и системы) когда файл был сам себе базою данных. И состоял из записей, в том числе разного размера, за которые отвечала не только система, но иногда и аппаратура. Вот там каждая строка была отдельной записью...
Но со времён UNIX`а всё куда проще: файл это безструктурная последовательность байтиков. Некоторой длины. Виртуальная модель перфоленты с возможностью дописывания и исправления уже записанного. А за структуру, буде она нужна, отвечают прикладные программы, которые с этим работают. Ну и как же текст и его деление на строчки? Возможны варианты. Самый простой — указывать конец строки символом, который в ней заведомо не встречается. Например 0. Или вот как в UNIX`е — 10 (он же 012 или 0xA или 'n'). Почти тот же, но другой: один в один хранить то, что собираешься вывалить на печатающее устройство. Другой потому, что там вообще-то не коды символов а команды. В том числе команда "напечатать такую-то буковку". И у разных печатающих устройств они могут быть сильно разные. Вот в UNIX`е и решили, что пусть эти команды драйвер устройства формирует. Логично. Но в ДОС`е решили не так. Вернее в ДОС тупо и бездумно тащили "решения" из других систем (сперва CP-M копировали, а потом элементы UNIX`а) и получилась эклектика, которая до добра не доводит. (Из ДОС`а всё это один в один переселилось в винду...)
Дело в том, что самое первое печатающее устройство — телетайп, украденный на почте. Пишущая машинка с дистанционным управлением. А у неё, если пишет не на узенькую ленточку в одну строку, а таки на лист бумаги — для перехода на следующую строчку нужны две команды: ВК и ПС — возврата каретки, когда она ставится в начало той же строки (вдруг понадобится для особой жирности эту строчку поверх еще раз напечатать), и перевода строки, когда бумагоопорный валик проворачивается. Вот этими двумя командами с кодами 10 и 13 строки в ДОС`е и завершаются. (И еще неизвестно в каком порядке.) В UNIX`е пошли на разумный компромисс, но у нас-то ДОС, здесь — как и полагается у семи нянек... Ну так для ДОС`овского Си (на котором Фокал и написан) ввели два режима открытия файлов — "бинарный" и "текстовый", используемый по-умолчанию, когда при чтении символ с кодом 13 изымается, а при записи — добавляется обратно.
Ага-ага. А вот если мы читаем строчку (например для каких-то своих целей в строчный аккумулятор с помощью оператора Ask с пустым списком ввода), то где будет после этого указатель чтения/записи? Логично предположить что после крайнего из этих двух символов. А как бы не так! Запросто после первого из них.
То-то я демонстрационную программку никак отладить не мог... Нет, она вполне себе работала, но иногда вдруг раз и... То есть писана от она была лет десять назад — вот хотел про новомодные (тогда) свежевстроенные красивости рассказать (и продемонстрировать). Последняя — доступ к файловой системе. Вернее оно-то (оператор Operate) как раз было самое первое, с чего началась модернизация языка, причем в такие незапамятные времена... Но не зрелищно. А чтобы зрелищно — типа давайте содержимое каталога на экране отобразим и в подкаталоги залезать разрешим... (Ну и файлы просматривать.) А что, для этого почитай всё есть. А что ничего кроме самого строчного аккумулятора еще нету (ни его форматных преобразований, ни возможности сохранить строку где-то еще), так не беда: текстовые строки и во вспомогательном файле хранить можно... Если мимо тех мест, где они начинаются не промахиваться...
В общем, пока не догадался открывать этот вспомогательный файл в "бинарном" режиме, так оно и глючило... Может этот самый "текстовый" режим вообще упразднить?
Предыдущая глава |
↓ Содержание ↓
↑ Свернуть ↑
|