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

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


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

Дополнительных операций две: ! прекратить и . вывод

А "пустая" образцово-показательная операция всего одна: _

Ко всему к этому еще два префикса направления: + —

префикс повторения: @[число | {заголовок_цикла}]

и три постусловия: &операция операция ?посл_операций[:посл_операций]|

При том что круглые скобки: (посл_операций)

А шаблон...

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


* * *

Вот мы наконец почти полностью рассмотрели этот самый "сложный и таинственный" формат в операторе Write — средство обработки текстовых строк.


* * *

Заметим, что строка это вовсе не то же самое, что число. С числом мы работаем как с единым целым — с помощью арифметических операций. Причем исходные числа (операнды выполняемой операции) уничтожаются и на свет появляется новое число — её результат. Ну так и со строкой мы обычно пытаемся поступать подобным образом, а это неправильно. Может быть это как раз и хорошо, что в Фокале мы столь ограничены в средствах, что вынуждены работать с одной единственной строкой в аккумуляторе. Не уничтожая её и создавая новую, а постепенно преобразуя вот таким вот вышеописанным способом.


* * *

Ну и наконец остальные красивости.

Ввели...

5.3.6 ...функцию FBip — чтобы издавать звуки.

В данной версии — только с помощью встроенного динамика. Он позволяет издавать звук указанной частоты. Возможно так же управление его длительностью. Громкостью — нет.

Соответственно, у функции может быть два аргумента: частота и длительность. Если длительность указана (аргументов — два), звук ставится в очередь на воспроизведение и функция возвращает её общую длительность. (Исчерпание этой очереди — событие 1004.) Если аргумент только один — звук указанной частоты включается (или выключается) навсегда, а очередь очищается.

Тот и другой аргументы могут быть текстовой константой (и "..." и !), но не оба одновременно. В роли частоты это ноты, а в роли длительности — азбука морзе. В последнем случае скорость (вернее длительность "точки") можно указать третьим аргументом.

Имеется так же возможность узнать оставшуюся длину очереди не только в секундах но и в "элементах" (в т.ч. нотах или буквах); получить и скорректировать частоты для нот. (А то оказывается звукоряд бывает разный — "натуральный" и "темперированный", да и нота ЛЯ, относительно которой все эти частоты, тоже в разных редакциях разная — то 440 Гц, то 435.)

Ноты обозначаются буквами A B C D E F G причем с ноты ЛЯ; номер октавы — цифрой непосредственно перед нотой; #-повышение частоты на пол тона; + и — увеличение и уменьшение длительности в два раза, а * — в полтора. Все остальные символы обозначают паузу. В том числе . (точка) — максимально короткую. (Один тик таймера = 1/18 секунды.)

5.3.7 ...функцию FColor она же ФЦвет — чтобы указывать цвет выводимых символов. Включая цвет знако-места в текстовом режиме. Или цвет выводимых точек в графическом. Для 16 и 256-цветных режимов, использующих "палитру", FCOLor позволяет её инспектировать и корректировать.

5.3.8 ...функцию FCS она же ФКурсор — чтобы двигать курсор по экрану.

FKурс(X,Y) ставит курсор (он же маркер) в позицию X строки Y и возвращает код символа под курсором. Значение пропущенных или отсутствующих параметров не меняет. (Например FK(1) ставит курсор в начало текущей строки, а FK(,1) — в первую строку, оставляя в той же позиции.) Для некорректно заданного параметра сообщает его правильное значение. Например FK(,-1) — текущий номер строки.

При наличии третьего параметра позволяет установить FK(x,y,цвет) или только считать FK(x,y,) цвет знако-места.

Аргументы, в виде текстовой константы, рассматривает как команды. С их помощью можно рисовать линии и рамки символами псевдографики, прокрутить область экрана (между текущим и указанным положениями курсора), очистить её (или заполнить указанным символом — не обязательно пробелом), а так же скопировать фрагмент строки в текстовый аккумулятор.

Есть так же возможность управлять формой курсора, в т.ч. сделать его невидимым.

5.3.9 ...функцию FMышь — чтобы хоть как-то использовать мышку.

Позволяет включить/выключить мышиный маркер; переставить его в указанное место экрана; получить его текущие координаты, перемещение (с прошлого раза) и признаки нажатости кнопок. Что именно — указывается первым аргументом.

События по манипуляциям с мышкой назначаются функцией FViz. Потому что привязаны к области экрана — "окну".

Управление формой мышиного маркера не реализовано. Требует наличия мышиного драйвера. Причем третью координату — "колёсико" поддерживает под ДОС`ом далеко не любой из них!

5.3.10 ...функцию FViz — для управления дисплеем. Но в основном — чтобы сообщать его параметры, типа длины строки и количества строк на экране. На эту функцию свалили всё, что хоть как-то связано с видеосистемой. В том числе назначение "окон" для отслеживания пересечения их границ мышиным маркером, и/или нажатия в их пределах мышиных кнопок.

Параметров много и поэтому они делятся по группам.

0 — видеорежим, от признака текстовый он или графический до размера шрифта и таблицы табулостопов.

1 — размеры экрана

2 — параметры видеостраницы

3 — текстовое окно, включая привязку к нему мышиных событий

4 и следующие — для графических видеорежимов — были реализованы в версиях Фокал-1А, а из 1Б удалены. Вместе с оператором Viz, отображавшим графические примитивы (которые оказались излишне примитивными) и возможностью переключать видеорежимы. Однако Фокал способен работать в любом. (Потому как пользуется функциями BIOS`а. Вот только в графических текстовый вывод BIOS`а ну очень медленный. И символы на экране распознаёт плохо. По этому с отладочным окном (см.далее) в них ну просто беда...)

5.3.11 Функции FMAx и FMIn всего лишь возвращают самый большой и самый маленький из своих аргументов. Введены чтобы играть роль логических операций: если принять положительное число за "истину" а отрицательно за "ложь", то смена знака (унарный минус) будет играть роль инверсии, операция FMIn логического умножения (она же "И" или "конъюнкция"), а FMAx соответственно — логического сложения (она же "ИЛИ" или "дизъюнкция"). Однако, это может быть не просто бинарная логика, а например трехзначная — с нейтральным элементом 0 — "не знаю" Или "нечеткая", когда логическое значение меняется плавно и обозначает достоверность (или вероятность). (По желанию: хоть обычным образом, хоть как это принято у математиков — в диапазоне 0..1, с нейтральным элементом 1/2.)

Человек внутри себя рассуждает именно с помощью нечеткой логики. Потому что бинарная — извращение, приводящее к парадоксам.

5.3.12 Функциям FSQrt и FLOg (корень и логарифм) теперь причитается второй аргумент, указывающий степень корня и основание логарифма. (А без них, как и раньше, корень — квадратный, а логарифм — натуральный.)

5.3.13 У функции FATan тоже может быть второй аргумент: очень часто её используют в форме FATan(X/Y) что для Y близкого к нулю работает плохо (а на ноль вообще делить нельзя, но арктангенс-то определен и равен Пи/2). Вот на такой случай и сделано FATan(X,Y).

5.5 Для встроенного в интерпретатор режимов трассировки и пошагового выполнения решено, что

— во-первых эти признаки будут локальные (но наследуемые). То есть трассировка автоматически отключится при выходе из подпрограммы, в которой включена.

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

— в третьих что подлежащий выполнению оператор выдаётся на терминал не после или в процессе, а ДО его выполнения. Чтобы в пошаговом режиме пользователь мог решить, что делать дальше.

— и наконец в четвертых — в пошаговом режиме реализована возможность набрать и выполнить командную строку.

Ввести строку с номером (чтобы дополнить программу) нельзя, но для этого в нашем распоряжении оператор М.


* * *

Ну что, — вроде бы всё? На последок вспомним всякие мелочи.

Описанный выше интерпретатор Фокала...

— работает под ДОС`ом в текстовом режиме. В графических — тоже, только сам переключать их опять не умеет.

— к какому либо размеру экрана не привязан, хотя полагает его 80х25: самая краткая справка, которую оператор Хелп выдаёт без аргументов, помещается целиком именно на экране такого размера

— использует ДОС`овскую кодировку; буквами считает и русские и латинские и вообще всё, что не цифра и не разделитель (включая псевдографику, хотя вот её бы и не надо). В именах переменных все буквы различаются. В ключевых словах и названиях функций все буквы эквивалентны. То есть и заглавные и строчные и русские и латинские. Их соответствие вполне очевидное: А-A, Б-B, В-W, Г-G... Но: Ж-V, Я-Q, Ы-Y; и "Е" и "Ё" одинаково эквивалентны Е-латинской, впрочем так же как и "Ь" и "Ъ" букве "X". А для Ш Щ Ч Э Ю соответствующих им латинских букв нет. Впрочем и операторов на эти буквы нет. (А вот разделы файла справок...)

— с "прочих" символов (числящихся буквами) # $ & : @ | ~ начинается комментарий, как и с оператора Coment. (Важно в UNIX`е, где выполняемый файл, не в кодах (бинарный) а интерпретируемый, должен начинаться со строки в которой два первых символа (они же "сигнатура") обязательно #! а дальше — командная строка, с помощью которой следует запустить для данного файла интерпретатор. (Иначе его будет выполнять sh.) А вот для самого интерпретатора эта строка должна выглядеть комментарием. Остальные "прочие" символы — просто "до кучи" — вдруг где-то они тоже что-то значат?)

— имена переменных распознаёт по первым двум символам, остальные игнорирует и даже не хранит.

— имена функций (которые все обязательно начинаются на букву Ф) распознаёт по первым уникальным буквам, остальные тоже игнорирует. Причем одна и та же функция может иметь несколько альтернативных имён: чтобы мучительно не вспоминать — "логарифм" это как — FLOG, FLG или FLN?

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

— только в "псевдониме" оператора Open некоторые буквы что-то значат

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

— а вот у функции, если аргумент ровно один, скобки в которые он заключён, можно опустить

— все скобки ([{<>}]) эквивалентны, но не взаимозаменяемы

— все кавычки '"`тоже

— номер строки в группе (как и номер группы) — до четырех цифр.

— индексов у переменной с индексами — не более двух. Исключительно целые. Причем когда их два — их значения не более 127 если со знаком или 255 если только в плюс.

— первый символ имени локальной переменной может быть как & так и $ (чтобы как в UNIX`овском sh) — они эквивалентны. Глобальные переменные тоже могут начинаться с этих символов (но второй — буква!), и там это разные символы

— переменную на букву Ф завести можно, но получить обратно присвоенное ей значение — не получится: интерпретатор будет искать функцию с таким именем. (Вопрос, а не отдать ли приоритет именам переменных, чтобы у функций можно было сделать "выколотые точки"? Или хотя бы искать переменную, если функции с данным именем нет, а не сразу учинять ошибку? Рассматривается.)

— в буфер клавиатуры (для функции FCHr) при нажатии "спецкнопок" типа F1..F12, стрелок, Ins, Del, Home, End PgUp, PgDn, а так же "обычных" кнопок но вместе с Alt, попадают коды типа "тысяча с лишним". Какие именно — можно узнать экспериментально, набрав в командной строке t fch(-1);g 0; и понажимав на них. В том числе удерживая кнопки Ctrl, Alt и Shift. (Для остановки — нажать Ctrl/Ц)

— редактор командной строки работает только в режиме "вставки", режим "замены" не реализован. Использует обычные (для всех подобных редакторов) спецкнопки и их комбинации с Ctrl, Alt и Shift. (А вот Ctrl/X, Ctrl/C, Ctrl/V не поддерживает.)

— но кроме этого, отрабатывает нажатия спецкнопок, при удержании одновременно всех трех: Ctrl, Alt и Shift: Ins — запускает захват текстового фрагмента с экрана; Home включает, а End выключает отладочное окно. (А кнопку Del не нажимать, а то будет перезагрузка компьютера!)

— отладочное окно предназначено для отладки программ, формирующих изображение на экране — чтобы отладочная информация (прежде всего результаты трассировки) его не искажали. Для этого часть экрана, попавшая под окно, сохраняется, а после его отключения — восстанавливается на место. Вывод на терминал блокируется, если курсор стоит за границами окна. Само окно работает в двух режимах (переключаются так же: Ctrl/Alt/Shift/Home и отличаются видом рамки): при двойной рамке окно находится на экране постоянно, а при одинарной убирается с него перед выполнением каждого очередного оператора, а после — восстанавливается обратно. (Результат работы оператора оказывается на основном экране, а результаты трассировки и команды пользователя, если режим пошаговый — в окне. Временно убрать окно (до нажатия любой кнопки) — Ctrl/Alt/End (то есть без Shift). В графических режимах это текстовое окно почти бесполезно.

Ой, чуть не забыл — про "спецформаты": %% и %%%.

В операторах ввода/вывода естественно, коих три: Ask, Type и Write.

Ну просто формат — одиночный символ % для Type устанавливает формат по-умолчанию; для Ask очищает ейный входной буфер, а для Write велит строчки передавать со входа на выход.

Спецформат %% предписывает Type присуседиться к просмотрщику — выдавать на терминал не просто так, а с его помощью (чтобы пользователь читать успевал); Write %% N принудительно устанавливает в N счетчик уже выведенных строк просмотрщика; а для Ask он тоже чистит его буфер, после чего организует в нем (из списка ввода/вывода в операторе) начальное значение для предъявления пользователю.

Спецформат %%% для Ask делает то же самое, но буфер не чистит — позволяет добавить к тому что там уже есть.

Ну вот явно же просится такой спецформат и для Type...


* * *

Ну вот теперь — вроде всё.

Резюме.

Заявленную в почти-заголовке цель — остановиться и просто описать достигнутое — достигнуть не удалось: в процессе описания выявилось масса недоделок и просто несообразностей, которые пришлось срочно устранять. Так что "вторая-базовая" версия у нас теперь будет 1.6 (т.к. 1.5 уже было).

В процессе написания сего описания пришлось даже ввести новую концепцию: задействовать символ : как специальный. (На ряду с уже задействованными + — * / ^ в качестве знаков операций, = присваивания, % для дополнительных указаний оператору (формат вывода например) и ! чтобы завершить что-то (например строку), а так же в качестве намёка на строчный аккумулятор. (Уж коли он наряду с текстом в кавычках тоже числится строчной константой).

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



Иные расы и виды существ 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)
Закрыть
Закрыть
Закрыть
↑ Вверх