Страница произведения
Войти
Зарегистрироваться
Страница произведения

Дополнение к гл. 4 книжки о Фокале


Автор:
Жанр:
Изобретательство
Опубликован:
20.07.2022 — 20.07.2022
Читателей:
1
Аннотация:
Нет описания
Предыдущая глава  
↓ Содержание ↓
↑ Свернуть ↑
 
 
 

Символ : тоже сразу приобрёл два значения: табуляция (в пару к ! в роли конца строки) и "опричь" (другой) — другой смысл чего-то: там, где регистры форматного механизма оператора 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) как раз было самое первое, с чего началась модернизация языка, причем в такие незапамятные времена... Но не зрелищно. А чтобы зрелищно — типа давайте содержимое каталога на экране отобразим и в подкаталоги залезать разрешим... (Ну и файлы просматривать.) А что, для этого почитай всё есть. А что ничего кроме самого строчного аккумулятора еще нету (ни его форматных преобразований, ни возможности сохранить строку где-то еще), так не беда: текстовые строки и во вспомогательном файле хранить можно... Если мимо тех мест, где они начинаются не промахиваться...

В общем, пока не догадался открывать этот вспомогательный файл в "бинарном" режиме, так оно и глючило... Может этот самый "текстовый" режим вообще упразднить?

123 ... 678
Предыдущая глава  
↓ Содержание ↓
↑ Свернуть ↑
 



Иные расы и виды существ 11 списков
Ангелы (Произведений: 91)
Оборотни (Произведений: 181)
Орки, гоблины, гномы, назгулы, тролли (Произведений: 41)
Эльфы, эльфы-полукровки, дроу (Произведений: 230)
Привидения, призраки, полтергейсты, духи (Произведений: 74)
Боги, полубоги, божественные сущности (Произведений: 165)
Вампиры (Произведений: 241)
Демоны (Произведений: 265)
Драконы (Произведений: 164)
Особенная раса, вид (созданные автором) (Произведений: 122)
Редкие расы (но не авторские) (Произведений: 107)
Профессии, занятия, стили жизни 8 списков
Внутренний мир человека. Мысли и жизнь 4 списка
Миры фэнтези и фантастики: каноны, апокрифы, смешение жанров 7 списков
О взаимоотношениях 7 списков
Герои 13 списков
Земля 6 списков
Альтернативная история (Произведений: 213)
Аномальные зоны (Произведений: 73)
Городские истории (Произведений: 306)
Исторические фантазии (Произведений: 98)
Постапокалиптика (Произведений: 104)
Стилизации и этнические мотивы (Произведений: 130)
Попадалово 5 списков
Противостояние 9 списков
О чувствах 3 списка
Следующее поколение 4 списка
Детское фэнтези (Произведений: 39)
Для самых маленьких (Произведений: 34)
О животных (Произведений: 48)
Поучительные сказки, притчи (Произведений: 82)
Закрыть
Закрыть
Закрыть
↑ Вверх