Book #02 |
|
ZX-Spectrum - Пропорциональный шрифт.
---------------------------------------------------------------- (C) gRAVER_ZX, 2007 ---------------------------------------------------------------- Начало Пропорциональный шрифт О чем здесь я буду писать? Речь пойдет о идеях, которые я использовал для реализации пропорционального шрифта (пш) в своих менюшках. Также пара слов об идеях, которые неpеализованы. ПШ Итак, для пш используется стандартный набор символов длиной 2048. Но есть маленькая модификация в его формате - для буквенных символов (как правило) в первый байт ставится его ширина в пикселях. То есть максимальная высота такого символа 7 пикселей. Так как ширина символа по его природе не больше 8, то если первый байт символа > 8, считается что ширина символа 6, а его высота 8 - это сделано, чтобы использовать псевдографику. Можно, конечно, сделать по-другому. Создать табличку в 256 байт, которая бы хранила длину каждого символа. Но я так не делал. Может кто-то и попробует. Собсвтенно кусков кода из исходников по пш здесь не будет, так как считаю, что лучше сделать самому. А потом сравнить. Ну а далее отталкиваясь от формата хранения пш, пишется код для его обработки. В своей реализации я использую второй экран (32768). Сначала рисую на нем, а потом вывожу на основной (16384). Имея движок для печатания пш на экране, легко дополнить его дополнительными функциями - начертание символов kypcubou, жирное письмо и двойная высота. А также различные их комбинации. Про пробел. Пока что пробел имеет фиксированную длину, что немного странно для идеи пш. Вообще длина пробела должна варьироваться от минимальной до 255. Но тут уже дело и в формате хранения текстов. Например, тогда пробел будет уже двухбайтовым - <32>, <длина пробела в пикселях>. Нужен общий формат хранения текста. И хотя бы если не редактор, то форматтер текста. Текстовый модуль. Мысли. Пусть есть программа, которая имеет область интерактивных переменных - область памяти, с помощью которой пользователь управляет программой, и сам исполняемый код программы. Для программы необходимо задать в области интерактивных переменных ширину, высоту экранной области, где будет отображаться текст. Задать адрес шрифта, адрес текста в памяти. Текстовый модуль может быть один, а оперировать можно несколькими текстами. Перед вызовом модуля, когда он уже инициализирован, задаются значения для других ячеек области интерактивных переменых. Они могут указывать на различные события, например: пользователь нажал кнопку "пролистать вниз". Во время вызова модуль просматривает свою область интерактивных переменных, реагируя на произошедшие события. Вобщем генерация событий для текстового модуля ложится на кодера, который его использует в своей программе. Модуль может отвечать на событие изменением на соответствующие ячейки в интерактивной области, сообщая, например, что достигнут конец текста. Поэтому можно не вдаваясь в подробности внутpеней работы модуля (нам важно в общем его внешняя сторона) использовать такой текстовый модуль в разных своих программах. В нуждах экономии памяти можно создать множество его модификаций, отвечающих специфическим запросам. Каждая модификация будет иметь сходную структуру, имея специфические функции. Конец.
Другие статьи номера:
ZX-Spectrum - Пропорциональный шрифт. |
Oracle - Установка pепозитоpия. |
Oracle - SQL-задача. |
Nokia - 6100. Internet GPRS. |
Юмор - Анекдоты. |
Похожие статьи:
В этот день... 11 октября