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

Фокал - часть 3 (пишется)


Автор:
Опубликован:
24.05.2026 — 04.07.2026
Читателей:
1
Аннотация:
Типа продолжение к "Фокал снаружи и внутри"
Предыдущая глава  
↓ Содержание ↓
  Следующая глава
 
 

строки, а не отделялся пустой строкой от предыдущего, как небыло предусмотрено,

так нет и не предвидится. И приходится по-всякому выёживаться...

Ну и весь такой файл это один пакет: .... внутри которого

еще два — заголовок и тело. Оформленные вот таким же образом. В начале правда

еще иногда встречаются рудименты другого языка (известного как SGML, вот это:

— его скобочки, и коментарий вида: тоже его

наследство) куда более замудрённого и громоздкого, нигде и никогда так всерьёз

и не применявшегося. Однако с упорством, достойным лучшего применения, это таки

суют якобы для обратной совместимости...

Вопрос: а еще что-то типа вот таких ссылок у нас есть? А как же! Вон

каталоги, вернее файлы в них. Правда штука это — закрытая. Операционная

система работает с ними только сама — по заявкам "заинтересованных лиц"...

Доступ только по именам, а позиционирование — фиг! (Хотя это где как.) Но тем

не менее...

В общем не будем тянуть кота за хвост. Была вот такая идея: ввести еще

один канал ввода/вывода (типа для поиска файлов) направленный по умолчанию на

устройство "Д", изображающее собою текущий каталог. И ежели открыть что-то под

этим псевдонимом, то это и будет эквивалент команды !CD, каковая в ДОС`е

работает (потому что процесс — один общий для всех) а в UNIX`е не должна.

(Потому что для каждой выполняющейся программы процесс — свой. И есть места,

куда даже король ходит пешком.) Но открыть можно будет только файл с признаком

"d". (В точности так же, как на запись можно открыть только файл с признаком

"w", то есть разрешенный для записи. А переключить канал вывода, тоже

получится только на что-то открытое для записи...) Так что к R и W в

псевдониме открытого файла надо добавить еще буковку D.

Пользоваться этим каналом будут оператор Oper и функция FTEll("имя_файла")

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

мы вот как-то внимания на это не обращали. А вот устройство Д... Да, таки надо

сделать — а то и в самом деле: как же с "cd" под UNIX`ом? (Но гром не грянет,

мужик не перекрестится! Пока вот как то и так обходились...)

((И, кстати, а вот открываем мы файл под псевдонимом Х, а на него как раз

УЖЕ направлен один из каналов, ну например вывода... И что-то я не припомню,

чтобы проверялось что файл открывается именно для вывода и что он вообще

разрешен на запись — чтобы иначе была ошибка...))

Вспомним, что в том же UNIX`е у каждого файла аттрибуты: -rwx (что их три

комплекта — пока несущественно) где вместо прочерка может быть a b c d... при

чем "а" (самый обычный файл) никогда не пишут, так и оставляют прочерк. Вот "d"

как раз и означает, что это каталог... А вот многие аналоги Нортон-Командера

позволяют "заходить" например в архивы типа .rar .zip ... как в каталоги...

Нечто типа каталога имеют в себе и файлы других типов (библиотеки подпрограмм

например). Тот же самый файл .wav содержащий внутри себя именованные потоки,

тоже бы подошел в этом качестве... И вообще любой файл, содержащий в себе

записи, имеющие два обязательных "выделенных" поля: "имя" — текстовое и

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

подобное.

Но это чисто на будущее...))

...Но таки надо отличать средства "разукрашивания" текста (ну ладно,

пусть "форматирования"), как тот же .html, где выкинь все эти урашательства и

останется чистый текст, который и есть главное содержимое... Отличать от

средств формирования структуры (как тот же .xml) — самоопределяющейся. Где

текст это всего лишь значения её полей. А главное — сама структура.

Хотя грамматика у них — вроде как практически одинаковая. И даже не

"вроде как" и не "практически" а один в один! Имена и смысл тегов разные...

Для форматирования текста есть еще масса других средств, начиная с

UNIX`овского roff (а так же производных от него nroff, troff...), изначально

сделанного чтобы управлять некоторой фотонаборной машиной. Про который я

смутно помню только что к уже имеющемуся форматированию он относился бережно,

и что каждая команда там занимала отдельную строку и начиналась с точки в

первой позиции. (Такая вот UNIX`овская заморочка, что мол ничего осмысленного

начинаться с точки не может. Там у них и в главном текстовом редакторе ed

(стареньком, маленьком и неудобном, за то работающем всегда — в том числе в

самых-самых тяжелых условиях, потому что с интерфейсом командной строки!)

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

командный.)

Это и дурацкий и-би-эм`овский формат .rtf — крайне примитивный (как и сам

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

отличающийся тем, что скобки там уже есть — фигурные. Типа для сохранения

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

И восстанавливается то, что было до. И еще там есть команды: слова,

начинающиеся с (обратной косой черты), и состоящие только из букв, потому что

дальше впритык идёт числовой аргумент (в том числе, говорят, что и

отрицательный, но я не видел), хотя может и отсутствовать. Еще эта самая

обратная косая черта служит там экранирующим символом (для себя и для скобок).

А вот всё остальное, что не скобки и не команды — сам текст.

Это и макрогенератор ТеХ (где букву Е традиционно пишут смещенной вниз на

пол строчки) и производные от него (типа LaTeX), который изначально придумал

лично Дональд Кнутт, когда захотел пристойно изображать в своих статьях

математические формулы. И там команды — тоже с символа

Это и уже упоминавшийся ПостСкрипт — вполне себе полноценный

алгоритмический язык, вернее его интерпретатор, каковой нынче встроен во все

лазёрные и струйные принтеры. (Мелкопроцессоры, ими управляющие, вишь стали

нынче весьма мощные.) А формат .pdf — суть программа на этом языке (немножко

урезанном).

Раньше-то всё было просто: разом и терминалом и принтером был телетайп

(разновидность электрической пишущей машинки), украденный на почте — там еще

на моей памяти с их помощью телеграммы передавали по четыре копейки за слово.

(А у одного мужика в командировке деньги кончились, так он послал жене

телеграмму из одного слова: "сторублируй"!)

В электрической пишущей машинке электрического только электромотор,

вращающий резиновый валик, около которого для каждого рычага-литероносителя

пристроилась такая полукруглая деталька... Которую, лёгким нажатием кнопки на

клавиатуре, слегка прижимает к этому валику. Дальше он её проворачивает, а она

тащит за собою этот рычаг. Который и ударяя по бумаге через красящую ленту,

оставляет на ней отпечаток литеры. (А то, боюсь, многие живую пишущую машинку

уже и не видели...) В механической пишущей машинке надо было колотить по

кнопкам со всей дури. При чем по разным — еще и с разной силою! Потому что

это усилие распределяется по площади литеры. И если А или Т напечатаются

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

(Ну бумага-то всё стерпит, но перед ней — красящая лента...)

Телетайп — это такая электрическая пишущая машинка, где на печатающий

механизм воздействуют не клавиши напрямую, а электромагнитики. А клавиатура

выдаёт им для этого коды нажатых кнопок. Которые можно пробить на перфоленту и

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

посылать в линию связи сразу — чтобы их и удалённый телетайп отрабатывал...

А он либо печатает буковку, либо что-то делает — что умеет. Немногое: ПС, ВК,

ВШ, ГТ ЗВ (перевод строки — прокрутка на одну строку бумагоопорного валика,

возврат каретки, возврат на шаг, горизонтальная табуляция, звонок — реально

звякающий специательным колокольчиком)... Еще в нулевой странице ASCII (помним

еще, откуда она?) была пара команд то ли для установки и сброса табулостопа в

текущей позиции, то ли для переключения цвета (красящая лента нужна была

двухцветная!), которые потом приспособили для переключения регистров... А всё

остальное там — для оформления пакетов и управления коммутацией в телетайпетной

сети.

Далее, когда появились отдельно дисплеи (где маркер можно поставить в

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

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

вспомнили про "эскейп-последовательности". На нулевой странице ASCII есть две

команды: АР1 и АР2 (она же ЕСЦ) — "авторегистр" 1 и 2 с кодами 10 и 27, первая

из которых — "экранирующая": отбирает "командный" смысл у следующего после

него кода, а вторая — наоборот: придаёт следующему после него коду специальный

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

просты и немногочисленны. (Например как у VT-52 и его аналогов: в дополнение к

вышеперечисленным ПС, ВК, ВШ, ГТ, ЗВ, еще несколько штук: после EСЦ одна

буковка: A, B, C, D — перемещение маркера вверх, вниз, вправо, влево на одну

позицию; H, I, J, K — маркер в начало экрана; обратный перевод строки (как и

ПС, только на предыдущую строку, и если она крайняя — тоже с прокруткой

изображения); стереть от маркера до конца строки и экрана. Сложная — одна:

прямая адресация маркера: ЕСЦ Y и еще два байта — координаты, куда его

поставить. И последняя: ЕСЦ Z, на которую дисплей, если он есть, должен был

отозваться тремя байтами: ЕСЦ / Z.) Потом команды стали многочисленными,

сложными и навороченными. (Как у VT-100 и его аналогов.) У принтеров — тоже.

При чем кто-то придерживался неких стандартов де-факто, заимствуя систему

команд, например, у принтера фирмы Эпсон; кто-то придумывал свои собственные...

Но для более серьёзного полиграфического оборудования... А лазерный или

струйный принтер тоже уже можно причислить к этой категории... В общем, в

конце концов догадались, что чем передавать изображение по точкам, проще и

быстрее построить его на месте по куда более компактному описанию...

Уже упоминавшийся ПостСкрипт не спешит, как некоторые, рисовать указанные

ему графические примитивы... Сперва он строит абстрактный "путь" — траекторию,

добавляя эти самые примитивы к её концу. Возможно, замкнутую: там есть

специальная команда для её замыкания — соединения конца с началом. (Возможно,

это будут контуры буковки.) Которую, вместе с "листом", на коем она рисуется,

можно как хошь перенести, повернуть или отмасштабировать. И вот только потом

либо этот контур заливается указанным цветом, либо прорисовывается указанными

линиями (некоторой толщины, а то и пунктирности)...

Сам этот ПостСкрипт — вполне себе универсальный интерпретируемый язык

общего назначения. (Который, если что, как и Фокал, можно например использовать

в роли калькулятора.) Построен он на тех же принципах, что и язык Форт:

"стэкового" типа. (У нас так сделаны %r и %R в форматном выражении оператора

Write.) Всё с чем работаем — берётся со стека и что получилось — туда же

помещается. (Только стэк у них у обоих неограниченной глубины, не то что у нас.)

И Форт можно считать безтиповый, а вот у ПостСкрипта — полиморфизЬм. Хотя

принцип, да — одинаковый, грамматика немножко разная. И слова... Разделяемые,

кстати, просто пробелами... У Форта слова — из совершенно любых символов, а у

ПостСкрипта некоторые символы таки "служебные": это все виды скобок, включая

угловые, символ % (процент, с которого, кстати, там начинается комментарий до

конца строки) и еще некоторые. Например текстовая строка там заключается в

круглые скобки (а вовсе не в кавычки), последовательность действий, которую

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

строчка там — "литерал": сразу помещается на стэк. А вот квадратные скобки

действуют хитрО: открывающая помещает на стэк спецобъект "метка", а

закрывающая берёт всё что после этой метки скопилось, делает из этого массив и

помещает его на место метки. Соответственно, меж этими скобками делай что хошь.

А вот внутри круглых — все символы один в один. Ну разве что экранирующий...

Как всегда (обратная косая черта).) А то, что Форт безтиповый, а типы данных

таки объективно есть, то например для самых обычных арифметических операций

(+ — * /) нужно несколько разных комплектов слов чтобы обозначать их для целых

одинарной и двойной точности, а так же еще беззнаковых и с плавающей запятой...

В общем случае — громоздко получается. (А что мы хотим? Эта самая безтиповость

в том и заключается, что какую операцию применил, такой значит и был тип!)

Но в ограниченных частных случаях — просто, компактно и очень-очень быстро. Для

ПостСкрипта всё наоборот...

В общем, выражений в обоих языках никаких нет: буде захотели вычислить

что-то по формуле — преобразуем её в обратную польскую безскобочную запись...

(Ха! Между прочим — обход дерева.) Типа вместо 1+2+3 пишем 1 2 + 3 + а если

1+(2+3) то соответственно 1 2 3 + + только вместо + в ПостСкрипте придётся

писать add.

Впрочем, главное и там и там это "словарь", где все вот эти слова и

ищутся. Словарь — пополняемый! У нас в калькуляторах %r %R ничего подобного

нет: набор команд — фиксированный. Но в потоке символов, который — команды,

таки выделяются константы, сразу помещающиеся на стэк и собственно команды,

которые что-то делают. Так и у них — "литералы" (например числа или строки) и

просто слова, которые ищутся в словаре. (Но /слово — будет литералом.)

Ищутся — в словарях: их там несколько — целая стопка (кипа, стэк!) — начиная с

верхнего. Словарь, кстати, изображается: << ... >> где внутри — набор пар:

ключ-значение. Да, можно изобразить и вот так, или создать пустой: N dict но

сразу из N элементов. (И словарь и строка и массив отнюдь не резиновые — вот

как создали, так и.) После чего хоть перекинуть его на стэк словарей командой

begin и он станет "текущим" (а удалить его потом отуда командой end, но можно

и получить на стэк копию текущего командой currentdict) и заполнять:

/имя значение def (буде оное значение — литерал, получится переменная; буде

нечто выполняемое, типа {...} — подпрограмма получится). А можно заполнять

прямо здесь, обращаясь как с массивом или строкой — командами put и get.

(Однако, имеем в виду: вот мы положили на стэк словарь, а так же то что будет

ключом и значением; выполнили команду put которая туда их запишет. Но со стэка

то она их все три удалит! И если мы этот свой словарь заранее не припрятали в

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



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