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

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


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

понадобиться. (Но никаких Ctrl/Z как в ДОС`е, ибо это глупость и нарушение

протокола! Конец текстового файла приходилось обозначать в те (достаточно

древние) времена, вернее в тех файловых системах (ФС) где размер файла только с

точностью до блока. В ФС писишного ДОС`а он изначально — с точностью до байта.

А что Z последняя буква (ихнего) алфавита, еще и рассчитано на тупорылого

обывателя, так же как индексы массивов не с нуля, а с единицы в Бейске...)

Сохраним так же три абстрактные команды (тоже из четырёх) оказавшиеся под

вышеописанными пакетообразующими символами. (Забегая вперёд: возможно

понадобятся для "переключения регистров".)

Далее. Именно в нулевую страницу переместим все полезные значки ASCII, не

являющиеся буквами. (Их там два раза по шесть штук.) И расположены они тут

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

дружкой. И кавычки, которых три. (Сохранять порядок символов что и в ASCII при

этом совершенно без надобности.) Под них выделим по два символа в начале двух

первых четвертушек и по четыре в конце. Впрочем код 00 остаётся на своём месте:

"забой" не перезжает.

Остальные команды нулевой страницы ASCII сохраняются. В том числе "вопрос"

КТМ ("кто там") и два варианта ответа на него ДА и НЕТ. Правда малополезные ВК

и ПФ переезжают на другие места (вместо еще более бесполезных КН и ЗМ). И под

вопросом пока остаются два символа: уже упоминавшийся СИН с кодом 16 (который

символ-заполнитель — для синхронизации) и АН (анулировать) находящийся точно

под ВШ (шаг назад). Символ-заполнитель вроде как в ведении драйвера, а нам

нужен управляющий код для образования лигатур. (Это если учесть что постановка

диакритических знаков — с помощью ВШ он же b и символов нулевой страницы.

(Условности! Это в оные времена пишущая машинка реально делала шаг назад и

печатала второй символ поверх первого...) В общем получается нечто типа:

0 1 2 3 4 5 6 7 8 9 A B C D E F пр — пробел

┌────────────────────────────────────────────────┐ a == ЗВ ?? == КТМ

0│00 @ /b /c /d ?? ДА a b t n v { | } ^ │ b == ВШ не == НЕТ

1│~ ` к1 к2 к3 не ** p ** f r E [ ] ! │ n == ПС r == ВК

2│пр ' * # $ % & . , ; : + ( — ) / │ p == КБ конец абзаца

3│_ " 0 1 2 3 4 5 6 7 8 9 < = > ? │ t == ГТ v == ВТ

└────────────────────────────────────────────────┘ f == ПФ прогон формата

p == КБ конец абзаца

(текстового блока)

для сравнения — то же самое место в ASCII:

си == СИН (заполнитель)

0 1 2 3 4 5 6 7 8 9 A B C D E F АН — анулировать

┌───────────────────────────────────────────────┐ КН — кончилась бумага

0│00 /а /b /c /d ?? ДА a b t n v f r рс лт│ ЗМ — заменить (цвет шрифт)

1│эк к0 к1 к2 к3 не си p АН КН ЗМ E РФ РГ РЗ РЭ│ эк == АР1 (экранирующий)

2│пр ! " # $ % & ' ( ) * + , — . / │ E == АР2 (ESC)

3│0 1 2 3 4 5 6 7 8 9 : ; < = > ? │ рс лт == РУС ЛАТ

└───────────────────────────────────────────────┘ РФ РГ РЗ РЭ — разделители

файлов, групп, записей, элементов (для БД)

Псевдографика: (по сравнению с ДОС`овской

0 1 2 3 4 5 6 7 8 9 A B C D E F 0 1 2 3 4 5 6 7 8 9 A B C D E F

┌────────────────────────────────────┐ ┌───────────────────────────────────┐

│ │ │ │

0│ ─ │ ┌ ┬ ┐ ├ ┼ ┤ └ ┴ ┘ & <— * ▀ ░ │ A│ а б в г д е ж з и й к л м н о п │

│ │ │ │

1│ ■ * ╒ ╤ ╕ ╞ ╪ ╡ ╘ ╧ ╛ &  * ▄ ▒ │ B│ ░ ▒ ▓ │ ┤ ╡ ╢ ╖ ╕ ╣ ║ ╗ ╝ ╜ ╛ ┐ │

│ │ │ │

2│ ∙ * ╓ ╥ ╖ ╟ ╫ ╢ ╙ ╨ ╜ & -> * ▌ ▓ │ C│ └ ┴ ┬ ├ ─ ┼ ╞ ╟ ╚ ╔ ╩ ╦ ╠ ═ ╬ ╧ │

│ │ │ │

3│ ═ ║ ╔ ╦ ╗ ╠ ╬ ╣ ╚ ╩ ╝ &  * ▐ █ │ D│ ╨ ╤ ╥ ╙ ╘ ╒ ╓ ╫ ╪ ┘ ┌ █ ▄ ▌ ▐ ▀ │

│ │ │ │

└────────────────────────────────────┘ └───────────────────────────────────┘

звёздочками здесь обозначены символы разрывающей строчные русские буквы

с которыми еще до конца не определились пополам)

а & — то что было в УПК и больше нигде

нет (диагональные соединители?)

Промежуточная кодировка И-64 впринципе планируется как двенадцатибитная:

ненулевое значение во втором байте — признак что это буквы (а не псевдографика

и прочие символы) а так же номер алфавита, которых пока всего два: 4хх русский

и 5хх — латинский. И хотя пока не планируется извлекать её из недр Фокала на

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

механизма %r (см. далее), однако ничего и не мешает этому...

((Лирическое отступление: немножко про кодировки и их "упаковку" в.

Переход на размер машинного слова, кратного не восьми, а двенадцати битам,

позволил бы решить массу проблем (см. статью "12 лучше чем 8") и в том числе

обеспечил бы равномерной кодировкой все значимые алфавиты и силабарии. (Но для

иероглифических письменностей требуется другой принцип.) Сейчас же — при

восьмибитном байте, понадобится либо по два байта на символ (т.е 16 бит), либо

использование схемы с переключением регистров, как это было в эпоху

семибитного байта, либо неравномерное кодирование. Вернее упаковка или

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

Собственно для переключения регистров и зарезервированы в нулевой странице

команды к1-к3. Схема переключения регистров полагается такая: восьмибитный байт

это четыре страницы по 64 символа. Нулевая всегда остаётся неизменной, а каждой

из оставшися трёх с помощью соответствующей ей команды назначается одна из

страниц кодировки. (Нулевая страница туда никогда не назначается и код 00 по

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

двухбайтная, но это не 64 а 256 страниц. То есть кодировка получается 14-и

битная. Даже если зарезервировать первые 8 или 16 страниц для специальных

целей, "лишнего" пространства аж в 12 тысяч символов вполне хватит даже на

основные иероглифы. (Японцам, например, они нужны далеко не все.)

Неравномерное кодирование — ну хотя бы по принципу той же utf-8, где

ключевой — старший бит байта. Если он 0, то размер символа 1 байт и это две

первых страницы (у них это один-в-один ихнее ASCII, а вот у нас следующей

страницей после "нулевой" будет либо псевдографика, либо "системный" алфавит,

он же "курсив"); если он 1 то это многобайтная последовательность, состоящая

из "ведущего" или "стартового" байта и указанного им количества байт

продолжения. У них два старших бита = 10, а остальные это очередные шесть бит

полезной информации. (Как раз номер буковки на 64-х символьной странице.)

У стартового байта старшие биты это длина символа в "единичной" системе

счисления: 110 если 2, 1110 — 3, 11110 — 4... И тогда всего полезной

информации будет 7, 11, 16, 21, 26, 31 и 36 бит при 1-7 байтах на символ.

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

Можно сделать ключевыми два старших бита: если они 00 то оставшиеся шесть

бит — код символа на нулевой "системной" странице. Если старшие два бита = 10

то это двухбайтный символ — по шесть полезных бит на байт. У байта продолжения

два старших бита — 01. И наконец если два старших бита = 11 — то многобайтный:

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

размер получается от одного до шести байт, итого: 6, 12, 16, 22, 28 и 34 бита

полезной информации. Для дальнейшего расширения предполагается зарезервировать

"лишнюю" страницу двухбайтной последовательности (с ведущим байтом: 10111111

т.е. BF); проблема забоя решается за счет того, что ведущим байтом из всех

единиц — FF придётся пожертвовать.

Хотя если ограничиться трёхбайтными символами — 18 полезных битов (что

даже уникоду — за глаза: там из миллиона зарезервированных позиций заполнено

чуть более ста тысяч, а 2^18 это 256 тысяч) то можно и проще: если два старших

бита = 11, то байтов продолжения всегда два.

Кстати, это позволяет сделать комбинированный вариант с "переключением

регистров": шесть или двенадцать бит номера страницы многобайтного символа

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

а символы со старшими битами 00 их не меняют. А возможные расширения (например

переключение кодировок) — за счет "лишней" страницы с ведущим байтом BF.

(Это может быть номер кодировки, упакованной вот таким вот образом.)

Так пожалуй и сделаем. (Назвав это "К-3".) Хотя это конешно чисто на

перспективу, но таки должно получиться раза в полтора компактнее utf-8 — за

счет переключения регистров. Разумеется для нас а не для наглов — для них

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

больше не полагается.

И наконец — то, что можно условно назвать K-3U, К-3R и К-3П различающиеся

между собою только умолчаниями, а от вышеописанного К-3 — самим фактом их

наличия. В K-3U по умолчанию упаковывается уникод, К-3П — промежуточная И-64

и наконец К-3R — переходная между ними "рациональная" кодировка...

Будем различать кодировку и её упаковку. Так 20-и битная кодировка

"уникод" упакована в восьмибитные байты пятью (!) разными способами: по четыре

байта на символ что известно как utf-32; по два байта на символ плюс для

символов за пределами "первой плоскости" (т.е. длиннее 16 бит) — "сурогатные

пары"; при чем то и другое — в двух варианта: старшим и младшим байтом вперёд;

и неравномерная utf-8 с одним ключевым битом, описанная выше. (А мы здесь в

Фокале еще, чисто из вредности, добавили к ним трёхбайтный вариант utf-24.)

Соответственно К-3 это способ упаковки РАЗНЫХ кодировок с двумя ключевыми

битами — вот как описано выше: комбинированный неравномерно-регистровый. (Да,

"регистровый" — это только для потока. Но ничто не мешает помещая текст в

память, добавить к каждому ведомому байту причитающиеся ему ведущие;

преобразовать в упаковку utf-8; или полностью распаковать, сделав по 2, 3 или

4 байта на символ.) Указать, какая именно кодировка вот так упакована, можно в

любой момент с помощью символа на "лишней" странице с ведущим байтом BF. (Хотя

я вот сейчас засомневался — правильно ли это? Может назначить "лишней" самую

первую страницу с ведущим байтом 80, или даже какую-то в середине... Подумаем.)

Но изначально, пока такое указание не поступило — действуют умолчания. Для

K-3U упаковывается уникод, вернее первые его 4 "плоскости", которых ему — за

глаза. Для К-3П соответственно наша промежуточная И-64, а вот для К-3R то, что

описано ниже:

— в качестве нулевой страницы — первые 64 символа ASCII

— следующие 64 (где латинские буквы и еще 11 полезных символов) — далеко не

под первым номером, но включена по-умолчанию. То есть пока не встретилось ни

одного не-ASCII-шного символа, от ASCII это ничем не отличается...

— остальные страницы — скроены из фрагментов уникода. Но под каждый алфавит

или силабарий — целое число 64-символьных страниц. Под алфавиты с заглавными и

строчными буквами — по две соседние. Так девангари — один в один. Другие пока

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

с кода 410 — с начала первой страницы, а четвертушка с буквой Ё и

дополнительными символами для славянских языков, которая с кода 400 — после

них. Для строчных проще: с 430 по 45F.

— для латинского алфавита — никаких куч букв А с разными черточками.

(И никаких дополнительных страниц, где в уникоде весь этот мусор размещается!)

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

основных с помощью ВШ (шаг назад) и одного из символов нулевой страницы. Так

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

(двоеточие) — двоеточием. (А под сопутствующий мусор выделить специальную

мусорную страницу из резерва первых страниц, там же где и псевдографика.)

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



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