ZX-Forum №3 1995 г.

Приложение - описание программы для создания презентация Presentation Master.


Темы статьи: Реклама  

ПРИЛОЖЕНИЕ

Предлагаем вниманию читателей документацию к авторскому программному пакету, распространяемому на дистрибутивном диске АС 17. С его помощью Вы сможете, например, создавать полноценные инструкции к Вашим программам, придавая им логическую завершенность. Однако мы думаем, что область применения пакета шире - он позволяет легко и просто выпускать компьютерный журнал, принимая на себя все технические проблемы и оставляя Вам исключительно творческую роль по его содержанию и оформлению (Для практической работы Вам понадобится лишь пара редакторов: текстовый плюс графический).

PRESENTATION MASTER

© Сергей Ханцис, г. Ижевск, 1995.

От автора.

Пакет программ, который я имею честь Вам представить, называется PRESENTATION MASTER. Его цель - демонстрация текстовой и графической информации. Другими словами, PRESENTATION MASTER (PM) позволяет создать что-то вроде "информационного ролика" -электронную инструкцию, рекламный каталог и т.п. Особое внимание уделено показу текстов. Собственно, вначале я и хотел сделать только демонстратор текстов. К этому меня побудила острая необходимость в электронных инструкциях для своих программ - распространять программы с описанием на бумаге дорого, а описание в виде текстовых файлов неудобно для пользователя, т.к. не у каждого может быть соответствующий редактор. Распространять же с текстами чужой редактор без разрешения автора не будет ни один уважающий себя программист.

Итак, цель была ясна - написать демонстратор текстов, позволяющий организовать более-менее приличную электронную инструкцию. Для этого необходимо, чтобы демонстратор:

•S имел удобное управление (желательно перенастраиваемое) - перемещение по тексту вверх и вниз на строку и страницу, в начало и в конец текста;

•S был универсальным, т.е. "понимал" бы тексты различных текстовых редакторов и различные кодировки текстовых файлов;

•S имел развитые средства вывода: печать в окно любых размеров, несколько шрифтов, настраиваемые цвета, средства выделения отдельных слов;

•S если это не слишком сложно, позволял вставлять в текст иллюстрации;

•S отличался высоким качеством исполнения.

При обдумывании этой задачи встал вопрос, как задавать параметры для демонстратора - окно вывода, имя демонстрируемого файла, шрифт, цвета, клавиши управления и т.п. - ведь эти параметры должен устанавливать автор текста, а не пользователь, для которого этот текст предназначен. Выход представлялся таким: автор (или организатор демонстрации) создает файл специального формата, в котором указывает все необходимые параметры, а демонстратор при запуске прочитает этот файл и выполнит все, что там написано. С развитием этой идеи стало понятно, что этот специальный файл должен представлять собой обычный текст, в котором записаны команды, которые демонстратор должен выполнять. Причем эти команды могут не только устанавливать параметры для текстового демонстратора, но и производить другие полезные действия - например, рисовать окна, организовывать меню, демонстрировать картинки и т. п. Таким образом, демонстратор превращается в некий интерпретатор специального языка, в котором показ текста - лишь одна из многих функций. Осталось лишь спроектировать набор команд.

Так родился язык PM-LAN - язык системы PRESENTATION MASTER. Большая часть данного описания системы посвящена командам PM-LAN. По опыту работы с первой версией системы в набор команд будут внесены соответствующие изменения. Поэтому у меня большая просьба -присылайте свои отзывы. Авторам ценных предложений при их желании вышлю следующую версию РМ. Замечания и предложения можно присылать по адресу:

426063, г. Ижевск, ул. Восточная, д. 36, кв. 68. Тел. (3412)76-19-13 Ханцис Сергей

Язык PM-LAN

Язык PM-LAN предназначен для составления демонстрационных роликов в системе PRESENTATION MASTER. Это узкоспециализированный язык, он не подходит для написания обычных программ. В нем Вы не найдете каких-либо особо гибких конструкций или типов данных. Кроме того, этот язык интерпретируемый, поэтому он не поражает своим быстродействием. Да это и не требуется для задач данного класса.

По структуре PM-LAN - командный язык. Это значит, что каждое действие вызывается соответствующей командой, в которой, если необходимо, указываются параметры. Такое построение больше всего похоже на структуру MS-DOS'овских batch-файлов. Здесь нет ни функций, ни процедур - только команды. Программирование на таких языках несколько напоминает программирование на ассемблере - ведь ассемблер, по сути, тоже командный язык, только не проблемно-, а машинно-ориентированный.

Программа на PM-LAN создается в обычном текстовом редакторе и записывается в обычный текстовый файл (требования к текстовым файлам см. в главе "Технические подробности"). Каждая команда занимает отдельную строку текста. Все параметры отделяются друг от друга и от команды пробелом (или пробелами не делает различий между прописными и строчными буквами, поэтому команды можно писать, выделяя начала образующих слов. Так, KeyPress для интерпретатора ничем не отличается от KEYPRESS или keypress. Естественно, это не относится к тексту внутри кавычек.

В своих программах Вы можете использовать переменные, которые могут содержать либо целое числовое значение в интервале 0..65535, либо текстовую строку длиной до 62 символов. Всего имеется 26 переменных с именами от A до Z (имена переменных, как и команды, можно писать и маленькими, и большими латинскими буквами). Кроме непосредственного указания имени, к переменным можно адресоваться как к одному массиву из 26 элементов через псевдофункцию VAR. Выражение var 0 заменяет переменную A, var 1 - B, и так до var 25 - Z. В качестве параметра var может быть и переменная: var S. Можно составить и вложенную конструкцию, например: var var R -что означает: переменная, номер которой (от 0 до 25) записан в переменной, номер которой указан в переменной R. Вначале все переменные не содержат никакой информации и считаются неопределенными. При определении переменной интерпретатор сам разберется, какого типа данные определяются - строка или число. Тип содержащихся в переменной данных можно менять неоднократно.

В программу можно вставлять комментарии в круглых скобках. Если интерпретатор встречает открывающую скобку ' (', он пропускает все вплоть до закрывающей скобки ')'. Комментарии могут располагаться где угодно: в конце строки, между параметрами, перед командой и т.д. Поскольку внутри комментария игнорируются и переходы на новую строку, можно одну команду "растянуть" на несколько строк:

Command (первый параметр:

) 68 (второй параметр: ) "текст" (конец команды) Что-то же самое, что и Command 68 "текст".

Теперь перейдем к описанию команд PM-LAN. Если у Вас возникнут какие-либо неясности с синтаксисом, изучите входящую в состав пакета демонстрационную программу (она записана в файле autoexec). В ней содержится много примеров использования почти всех команд системы. Для начала обговорим некоторые соглашения. Пусть в дальнейшем <var> означает переменную любого типа или неопределенную;

<num> означает числовой параметр (числовая переменная или целая числовая константа в диапазоне от 0 до 65535), например: 0 654 009543;

<str> означает строковой параметр (строковая переменная или строковая константа в

кавычках длиной до 62 символов, например: "текст" "ZX Spectrum......(пустая строка);

<vnum> означает числовой параметр, передаваемый только через переменную; <vstr> означает строковой параметр, передаваемый только через переменную; если какой-либо параметр является необязательным, он заключается в квадратные скобки, например: [<num>];

если в команде требуется указать назначение конкретного параметра, то тип этого параметра указывается после назначения через двоеточие, например, так: Command <имя_файла :str>;

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

есть, например: Command <str> [Key];

если в команде возможен выбор одного из вариантов, то эти варианты разделяются символом ' |', например: Command ON|OFF - что означает два варианта использования команды: Command ON и Command OFF .

Чтобы было проще разобраться в использовании команд, после их описания приводятся примеры. Итак, приступим.

SET <var> <num>|<str>

Присвоить переменной var значение второго параметра.

Set A 35

Set var K "string" Set I R

Set var T var S (в дальнейшем возможность адресации к переменным по var будет подразумеваться)

ADD <vnum> <num> ADD <vstr> <str>

Сложить значения переменной и второго параметра и присвоить результат этой же переменной. В первом варианте применения команды выполняется арифметическое сложение по модулю 65536, переполнение игнорируется. Во втором - выполняется конкатенация (слияние) строк.

Set A 20

Add A 15 (теперь А=35) Set L "Presentation "

Add L "Master" (теперь L="Presentation Master")

SUB <vnum> <num>

Вычесть из значения переменной значение второго параметра и присвоить результат этой же переменной. Заем игнорируется, т.е. если из 0 вычесть 1, получится 65535.

Set A 100

Sub A 68 (теперь A=32) MUL <vnum> <num>

Умножить значения параметров и присвоить результат переменной. Если результат умножения превышает 65535, переменной будет присвоено максимально допустимое числовое значение - 65535.

Set A 123

Mul A 321 (теперь A=39483) DIV <vnum> <num>

Разделить значение переменной на значение второго параметра и присвоить целую часть частного этой переменной. При попытке деления на 0 выполнение программы будет прервано и выведено сообщение об ошибке (подробнее об ошибках см. главу "Сообщения об ошибках").

Set A 128

Div A 10 (теперь A=12) RANDOM <vnum>

Присвоить переменной <vnum> случайное числовое значение в интервале от 0 до старого значения <vnum>.

Set R 1234 Random R

CODE <var> <str>

Присвоить переменной <var> значение кода первого символа строки <str>.

Code A "1.0TR" (теперь A=4 9) Set S "D"

Code S S (теперь S=68) VAL <var> <str>

Перевести строку <str> в числовую форму и результат присвоить переменной <var>. Перевод оканчивается на первом нецифровом символе. Если строка не представляет собой символьную запись числа, выполнение программы прерывается и выводится сообщение об ошибке.

Set B "12345Ni"

Val B B (теперь B=12345)

ASK <var>

Присвоить переменной <var> символ, соответствующий нажатой на клавиатуре клавише. Выполнение программы приостанавливается до тех пор, пока пользователь не нажмет какую-либо клавишу. Примечание:

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

ввода.

Ask K (например, если нажмут клавишу Т, то K="t",

--------""--------- CS/Z, то K="Z")

READ <var>

Прочитать строку с клавиатуры и записать её в переменную <var>. В процессе ввода можно использовать следующие управляющие клавиши:

CS/0 - забой последнего введенного символа; CS/1 - переключение РУС/LAT; CS/2 - фиксация верхнего регистра; Enter - конец ввода.

При нажатии Enter позиция печати не переносится на новую строку. Примечание: русские символы вводятся в альтернативной кодировке.

Read S

READNUM <var>

Прочитать строку с клавиатуры, перевести её в число и поместить это числовое значение в переменную <var>. При вводе заблокированы все клавиши, кроме цифр, Enter и CS/0 (действие последних двух клавиш см. в команде READ). Команда устроена таким образом, что пользователь не может, ввести некорректное число или не ввести ничего.

ReadNum L

KEYPRESS <var>

Присвоить переменной <var> значение 1, если на клавиатуре нажата какая-либо клавиша, и 0 в противном случае. Выполнение программы не задерживается; клавиши Caps Shift и Symbol Shift опрашиваются наравне с другими.

KeyPress F

UPCASE <vstr>

Привести все буквенные символы в строке <vstr> к верхнему регистру. Команда выполняется корректно как для латинских, так и для русских букв в альтернативной кодировке.

Set N "Привет пользователям ZX Spectrum!"

UpCase N

(теперь ^"ПРИВЕТ ПОЛЬЗОВАТЕЛЯМ ZX SPECTRUM!")

LINELEN <num>

Ограничить буфер ввода для команды READ <num> символами. Значение <num> может изменяться в пределах от 1 до 62. В команде READ пользователь не сможет ввести символов больше, чем установлено командой LINELEN. На команду READNUM данная установка не распространяется, эта команда всегда позволяет вводить не более 5 символов.

LineLen 8

TEXTOUTSPACE <x1:num> <y1:num> <x2:num> <y2:num>

Установить текущее поле вывода для текста. Координаты поля задаются в знакоместах 8х8 точек от левого верхнего угла экрана: x1,y1 - координаты левого верхнего угла поля, x2,y2 - правого нижнего. Диапазон значений для x1 - 0..31, y1 - 0..23, x2 - x1..31, y2 - y1..23. При определении поля позиция печати перемещается в его левый верхний угол; старое содержимое поля не очищается.

Set X 4

TextOutSpace X 1 30 21

MODE <num>

Установить режим печати текста в соответствии со значением <num>. <num> может иметь значения 5, 6 или 8, что определяет ширину выводимых символов - соответственно 5, 6 или 8 точек (высота символов всегда равна 8 точкам). Следует учитывать, что в режимах 5 и 6 текст может позиционироваться по горизонтали с дискретностью до 1 точки, а в режиме 8 - только на 8 точек (по атрибутным знакоместам). Зато в последнем режиме символы печатаются намного быстрее.

Т.к. поле вывода текста задается в знакоместах режима 8, возникает вопрос, сколько символов режимов 5 и 6 умещается в поле заданной ширины. Чтобы получить ответ на этот вопрос, разделите нацело ширину поля на 5/8 для режима 5 и на 3/4 для режима 6. Полученное значение и будет равно количеству умещающихся символов.

Mode 5

TEXTATTR OFF|<aTpM6yT:num>

Установить атрибут печати текста. Если задан параметр OFF, текст будет печататься без атрибутов, т.е. символы будут принимать цвет, который установлен в данном месте экрана. Атрибут же рассчитывается обычным образом: цвет фона умножается на 8 и к нему прибавляется цвет тона. Кроме того, прибавляется 64 для повышения яркости и 128 для мерцания.

TextAttr OFF

TextAttr 105 (105=64+5*8+1 - яркость, голубой фон, синий тон)

PRINT [<num1>|<str1>] [<num2>|<str2>] ...

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

ReadNum T

Print "Вы ввели число " Т

NSP

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

NSP

LOCATE <x:num> <y:num> [<сдвиг:num>]

Переместить позицию печати в знакоместо с координатами x,y. Координаты задаются в знакоместах текущего режима и отсчитываются от левого верхнего угла текущего поля вывода (левое верхнее знакоместо имеет координаты 0,0). <сдвиг> применим только для режимов 5 и 6 и устанавливает, на сколько точек должен быть смещен выводимый текст вправо (точное горизонтальное позиционирование). Значение <сдвиг> может изменяться от 0 до значения текущего режима минус 1 (т. е. до 4 или 5 для режимов 5 и 6 соответственно). <сдвиг> также нельзя использовать, если <х> указывает на последнее знакоместо строки в текущем поле (например, если х=41 при ширине поля 32 (во весь экран) в режиме 6). Примечание: наличие третьего параметра тогда, когда он недопустим, не ведет к ошибке; в этом случае он просто игнорируется.

Locate 21 15

Locate 7 2 2

CLS [<атрибут:num>] [GIRD]

Очистить экран и закрасить его указанным атрибутом (если атрибут не указан, закрасить текущим атрибутом). Если атрибут указывается, он становится текущим. При использовании спецификатора GIRD экран заполняется мелкой (в одну точку) шахматной сеткой. Команда устанавливает поле вывода размером во весь экран (выполняется TextOutSpace 0 0 31 23) и перемещает позицию печати в его левый верхний угол. Примечание: необходимо различать текущий атрибут, которым производится очистка экрана или поля и ПО которому производится печать текста, и атрибут печати, устанавливаемый командой TEXTATTR, КОТОРЫМ печатается текст.

CLS

CLS 15 (15=1*8+7 - синий фон, белый тон)

CLS 56 Gird

CLS Gird

CLSPC [<атрибут:num>]

Очистить текущее поле вывода текста и закрасить его указанным атрибутом (или текущим, если не атрибут не указан). Указанный атрибут становится текущим. Позиция печати перемещается в левый верхний угол поля.

ClSpc

ClSpc 32 (32=4*8+0 - зеленый фон, черный тон)

SCROLL UP|DOWN

Скроллировать текущее поле вывода текста вверх при параметре UP и вниз при параметре DOWN. Освобождающаяся строка очищается и закрашивается текущим атрибутом.

Scroll Up

Scroll Down

BORDER <цвет:пит>

Установить цвет бордюра экрана равным значению <цвет>. Допустимые значения - от 0 до 7.

Border 1

WINDOW <x:num> <y:num> <ширина:num> <высота:num> <атрибут:num> [TOP] [SHADE] [STORE]

Нарисовать окно в соответствии с параметрами. Координаты и размеры окна задаются в атрибутных знакоместах. <x>, <y> - координаты левого верхнего угла окна, отсчитываемые от левого верхнего угла экрана; допустимые значения: для <х> - от 0 до 29, для <y> - от 0 до 21. Параметры <ширина> и <высота> задают соответственно ширину и высоту окна, допустимые значения - от 3 до границ экрана. Параметр <атрибут> устанавливает цвета окна и становится текущим атрибутом. Спецификатор ТОР указывает, что верхняя строка окна должна быть проинвертирована (например, для размещения заголовка) (инвертирование производится атрибутное). SHADE окаймляет окно справа и снизу "тенью". Наконец, спецификатор STORE устанавливает режим, при котором часть экрана, затираемая окном, сохраняется в памяти для последующего восстановления. Команда переустанавливает поле вывода текста таким образом, чтобы печать производилась внутри окна с отступом в одно знакоместо со всех сторон (если присутствует спецификатор ТОР, отступ сверху не делается для того, чтобы дать возможность печатать текст в верхней инверсной строке окна). Как всегда при установке поля вывода, позиция печати перемещается в верхний левый угол поля.

Все параметры окна (в том числе и позиция печати) помещаются в специальный оконный стек. Благодаря этому можно организовать иерархическую оконную систему: открывая окна, Вы последовательно заносите их данные на стек, а затем, удаляя окна в обратном порядке специальной командой (см. ниже), переходите каждый раз к предыдущему окну. Глубина стека такова, что можно открыть одновременно не более 14 окон, причем неважно, использовался спецификатор STORE для запоминания информации с экрана или нет. Кроме того, каждое окно с сохранением экранной информации организуется в памяти как файл, а одновременно в памяти может находиться не более 25 резидентных файлов (подробнее об организации файлов см. раздел о кэшировании диска в команде TEXTVIEW), не говоря уже о том, что для сохраняемой информации может просто не хватить памяти. Во всех случаях нехватки памяти и переполнения стека программа останавливается и выдается сообщение об ошибке.

Window 2 5 20 7 15

Window 19 11 4 3 32 Shade Store

Window 0 0 32 24 41 Top

DELWIN

Вернуться к предыдущему окну. Параметры предыдущего окна снимаются с оконного стека и становятся текущими. Если часть экрана под окном сохранялась, она будет восстановлена. (Подробнее см. описание команды WINDOW).

DelWin

MENU <vnum> <x1:num> <y1:num> <длина1:пит> [<x2> <y2> <длина2>] ...

Организовать меню в соответствии с параметрами. Команде в качестве параметров передаются координаты <x>, <y> и <длина> каждого поля выбора. Пользователь с помощью клавиш ВЛЕВО, ВПРАВО, ВВЕРХ, ВНИЗ (см. команду KEY) может установить условный маркер на любое из перечисленных полей (при этом оно инвертируется), причем неважно, в каком порядке перечислены поля в команде - система сама разберется, какое поле правее, левее, выше или ниже при переходе маркера. Координаты и длина каждого поля задаются в атрибутных знакоместах относительно левого верхнего угла экрана; количество полей может быть от 1 до 21. Первоначально маркер устанавливается на поле с номером, равным значению переменной <vnum> (первое поле в списке имеет номер 1). Если пользователь нажмет ВЫБОР, действие команды окончится, а переменная <vnum> получит значение номера текущего (т.е. выбранного) поля. При нажатии клавиши ВЫХОД эта переменная получит значение 0. Примечание: команда MENU не печатает никаких сообщений на экране, поэтому Вы сами должны напечатать заголовки каждого поля как раз в том месте экрана, где располагается соответствующее поле.

Set A 1

TextOutSpace 1 1 9 9

Print "ДА" NSP

Print "HET" Menu A 0 1 4 0 2 5

DELBAR

Восстановить инвертированное командой MENU поле выбора. При выходе из команды MENU выбранное поле остается инверсным. Команда DELBAR восстанавливает это поле. Примечание: команда MENU не проверяет, было ли до ее вызова инвертировано какое-либо поле от предыдущего меню; поэтому DELBAR надо вызывать до организации следующего меню. Если Вы этого не сделаете, поле так и останется инвертированным.

DelBar

TEXTVIEW <имя_файла:str>

Показать текст, записанный в файле с указанным именем. Это самая сложная и самая главная команда системы, и она требует отдельного описания. См. главу "Демонстрация текста".

TextView "pmhelp1"

KEY UP|DOWN|LEFT|RIGHT|FIRE|HOME|END|QUIT [<символ>] [-"-] [-"-]

Определить клавиши выполнения указанной функции для команд TEXTVIEW и MENU. Определяемые функции таковы:

UP - ВВЕРХ FIRE - ВЫБОР

DOWN - ВНИЗ HOME - В НАЧАЛО ТЕКСТА

LEFT - ВЛЕВО END - В КОНЕЦ ТЕКСТА

RIGHT - ВПРАВО QUIT - ВЫХОД

Каждой функции можно определить не более трех клавиш. Клавиши указываются соответствующим им символом, например, клавиша Т - символом t, CS/T - T. Клавиши, не имеющие своего печатного символа, можно определить, указав символ и после него - код клавиши, например CS/1 - 7. Если ни одной клавиши не будет указано, действие данной функции будет блокировано.

Key QUIT (отключение функции выхода) Key Left o 5 8 (клавиши O, 5, CS/5) Key Down axk (клавиши A, X, K) Ask K Code K K

Key FIRE 1332K (клавиши ENTER, SPACE и клавиша, нажатая пользователем)

GRAPHOUTSPACE <x1:num> <y1:num> <x2:num> <y2:num>

Установить поле вывода графики в соответствии с указанными координатами. Координаты задаются в атрибутных знакоместах и отсчитываются от левого верхнего угла экрана: <x1>, <y1> задают левый верхний угол поля, <x2>, <y2> - правый нижний. Допустимые значения такие же, как в команде TEXTOUTSPACE.

GraphOutSpace 1 1 30 22 (поле с отступом 1 от границ экрана)

SCRVIEW <имя_файла:str> [<атрибут:num>]|[COMPRESSED]

Вывод графического изображения из файла <имя_файла> на экран. Вывод осуществляется в текущее поле, установленное командой GRAPHOUTSPACE. При указании в команде атрибута изображение выводится не с собственными цветами, а с указанным атрибутом. Спецификатор COMPRESSED позволяет просматривать скомпрессированные изображения. Декомпресия производится встроенным в файл изображения декомпрессором: файл загружается в свободную память и запускается с начального адреса. Декомпрессор может изменять любые регистры и статус (но не тип) прерываний. Вызов декомпрессора осуществляется с запрещенными прерываниями и с загруженным в регистр ВС стартовым адресом. Важно, чтобы процедура декомпрессии была перемещаемой и не использовала, кроме себя и экрана, никакой памяти. Примечание: при выводе скомпрессированной картинки поле вывода графики игнорируется и вывод производится на весь экран.

ScrView "demo1s"

ScrView "screen" 56 (56=7*8+0 - чёрным по белому)

ScrView "dizzy1" Compressed

SPRVIEW <имя_файла:str> <x:num> <y:num> <ширина:num> <высота:num> <номер :num>

[<атрибут:num>] Показать спрайт, записанный в указанном файле. Координаты вывода <x>, <y> задаются в атрибутных знакоместах относительно левого верхнего угла экрана (поле графического вывода (см. команду GRAPHOUTS-PACE) игнорируется). <ширина> спрайта задается также в знакоместах, а вот <высота> - в точках. Система выводит спрайты, закодированные в самом распространенном формате: сначала последовательно слева направо и сверху вниз располагаются байты растра, затем - атрибуты. Если высота спрайта не кратна 8, атрибуты должны присутствовать и для "лишних" точек. Например, при высоте спрайта 19 (2*8+3) атрибуты указываются для трех линий. Параметры, указанные в команде, должны совпадать с параметрами отображаемого спрайта. Если в команде указан <атрибут>, то считается, что атрибуты в спрайте не закодированы, и спрайт выводится с указанным атрибутом. Параметр <номер> сообщает номер спрайта в файле (в одном файле может быть до 256 однотипных спрайтов; они должны следовать один за другим без разделителей). Первый спрайт (располагающийся в начале файла) имеет номер 0.

SprView "demo1p" 11 9 4 32 0 5

SprView "Exolon 1" 20 17 3 40 1

PUTPIC <имя_файла:num> <x:num> <y:num>

Показать иллюстрацию, записанную в указанном файле (файл имеет расширение <Р>). Показывается иллюстрация, созданная входящей в пакет PRESENTATION MASTER утилитой PM-ILLUSTRATOR. Главная цель этой команды - вставка иллюстраций в текст, о чем см. описание команды TEXTVIEW, но можно и просто вывести иллюстрацию на экран. При выводе поле графики игнорируется. Параметры <x>, <y> указывают атрибутные координаты левого верхнего угла иллюстрации; все остальные параметры записаны прямо в файле. По ширине иллюстрация должна умещаться в экране, а по высоте она может выходить за его нижний край.

PutPic "F1B" 4 12

GOTO <метка>

Выполнить безусловный переход на указанную метку. Имя метки может состоять из любых русских и латинских букв, цифр, специальных символов (кроме разделителей - пробела, конца строки и т.п.). Определяется метка указанием двоеточия ':' и сразу после него - имени метки, например:

:метка

В имени метки, в отличие от команд, различаются прописные и строчные буквы. Метка, как и команда, занимает отдельную строку текста. Если в тексте программы встретятся две или несколько одинаковых меток, GOTO совершит переход на первую из них. В отличие от многих алгоритмических языков, в которых использование безусловного перехода считается недостатком, в языке PM-LAN такой переход является необходимым средством, т. к. нет другого способа организовать цикл, ветвление и т. п. Примечание: GOTO - довольно "медленная" команда, причем время ее исполнения прямо пропорционально расстоянию от начала текста до метки, т. к. в поисках этой метки приходится сканировать весь текст программы.

GoTo Label@1E

:Label@1E

ON <num> GOTO <метка0> [<метка1>] [<метка2>] ...

Перейти на метку с номером, равным значению <num>. Переход на первую метку (расположенную после GOTO) осуществляется при <num> равном 0, на следующую - при 1 и т.д. Количество меток не ограничено.

Set G 2

On G GoTo exit m1 m2 m3 m4 (перейдет на m2)

IF [NOT] <str1> = <str2> IF [NOT] <num1> < | = | > <num2>

Установить флаг разрешения интерпретации в соответствии со значением логического выражения. Значение операций сравнения обычное: = - равно, < - меньше, > - больше. Строки можно проверять только на равенство, числа - на любое из перечисленных условий. Если значение выражения истинно (при использовании спецификатора NOT - ложно), программа выполняется дальше как обычно, иначе все последующие команды игнорируются, пока не встретится ELSE или ENDIF (см. ниже).

Read L UpCase L If L="ВПЕРЕД"

Read K If K < 12

If not K>32768 (если меньше либо равно ...)

ELSE

Инвертировать флаг разрешения интерпретации. Если раньше интерпретация была запрещена, она будет разрешена, и наоборот. Таким образом, ELSE может встречаться и без соответствующего IF. Особое внимание обратите на тот факт, что флаг интерпретации всего один, т.е. нельзя составлять вложенных конструкций из IF; точнее, такие конструкции могут не дать ожидаемого результата. Так, например, несколько следующих один за другим IF просто заменяют логическое И нескольких условий. Так же и ELSE относится не к последнему IF, как в обычных языках, а ко всем условиям сразу.

Set A 20 Random A If A=17

Print "Я так и думал!" Else

Print "Что-то тут не так." ENDIF

Разрешить интерпретацию. Подробнее см. IF и ELSE.

Ask C If C="y" Set A 34 Random A If A<7

Print "Вот это удача!" ( C="y", A<7 ) Else

Print "Ну и ладно!" ( C="y", not A<7 либо not C="y" ) EndIf

ALT

Включить альтернативную кодировку текста. Действует как на текст, выводимый командой TEXTVIEW (для чего в основном и применяется), так и на всю остальную выводимую на экран текстовую информацию.

Alt

ASCII

Включить кодировку текста, применяемую в редакторе TLW2+ (см. также команду ALT). Если последние две команды применяются для установки режима для TEXTVIEW и кодировка файла, содержащего программу, отличается от кодировки просматриваемого этой командой текста, обязательно после TEXTVIEW поставьте команду включения "родной" кодировки программы.

ASCII

SOUND ON|OFF

Включить (при параметре ON) или выключить (при параметре OFF) генерацию звуковых эффектов командами TEXTVIEW, ASK, READ, READNUM, MENU, а также всеми специальными командами генерации звука (см. ниже).

Sound ON Sound OFF

BREAK ON|OFF

Включить или выключить (соответственно ON и OFF) реакцию на нажатие клавиши CS/BREAK при работе с диском. Если реакция включена, при нажатии BREAK генерируется сообщение об ошибке, иначе нажатие BREAK не приведёт ни к какому результату.

Break On

Break Off

ERROR ON|OFF

Включить или выключить (ON или OFF) генерацию сообщений об ошибках интерпретатора. Если данный режим включен, при обнаружении программной ошибки система остановит программу, выдаст соответствующее сообщение и покажет команду, в которой обнаружена ошибка. Если же режим выключен, при обнаружении ошибки компьютер просто сбросится (продолжать программу при ошибке невозможно, т.к. это почти обязательно привело бы к цепи вытекающих из нее других ошибок). Сказанное относится и к сообщению о логическом конце программы (см. также главу "Сообщения об ошибках").

Error on

Error off

CLICK

Генерировать короткий щелчок.

Click

DRUM

Генерировать шумовой эффект длительностью около 0.1 сек.

Drum

BEEP

Генерировать звуковой тон длительностью около 0.5 сек.

Beep

PAUSE [<время:num> [KEY]]

Выдержать паузу продолжительностью <время>/50 секунды. Если <время> равно нулю или не указано, пауза будет бесконечной; при максимальном значении данного параметра (65535) длительность паузы будет приблизительно 21 минута 51 секунда. Если указан спецификатор KEY, пауза окончится либо по истечении указанного времени, либо при нажатии любой клавиши; при этом до начала отсчета времени ожидается отпускание всех клавиш.

Pause (полное зависание)

Pause 0 (то же)

Pause 50 (задержка 1 сек.)

Pause 3000 key (задержка 1 мин. с опросом клавиатуры)

Pause 1 key (фактически - ожидание отпускания клавиш)

END

Конец программы. Если интерпретатор встречает эту команду, программа завершается и выдается соответствующее сообщение (если это разрешено командой ERROR). Наличие данной команды в конце программы не обязательно. Расположение END в середине программы не означает, что команды ниже нее выполняться не могут; ее можно обойти, например, с помощью IF.

Ask F

If F="y"

End

EndIf

QUIT

Сброс системы. После инициализации запускается TR-DOS.

Quit

CHAIN <имя_файла:str>

Передать управление программе, записанной в файле с указанным именем. Управление вызывающей программе при окончании вызванной не возвращается. При передаче управления сохраняются значения всех переменных, установок команд KEY, BORDER, TEXTATTR, MODE, TEXTOUTSPACE, GRAPHOUTSPACE, ALT/ASCII, LINELEN, SOUND, BREAK, ERROR, а также содержимое экрана и позиция печати; кэш диска и оконный стек очищаются.

Chain "Manual"

Read N

Chain N

Демонстрация текста

Демонстрация текстов является, пожалуй, самой главной функцией системы PRESENTATION MASTER. Мощный встроенный демонстратор текстов позволяет создавать хорошо оформленные и иллюстрированные технические описания, рекламные каталоги и даже электронные журналы.

Текст для просмотра набирается в любом имеющемся текстовом редакторе (требования к текстовым файлам см. в главе "Технические подробности"). Для экономии памяти текст рекомендую набирать без левого отступа, т. к. отступ от края экрана можно сделать, установив соответствующее поле вывода. Количество символов в строке следует делать не больше, чем может уместиться в заданном поле вывода (см. также MODE), т.к. выходящий за правый край текст показан не будет (т.н. режим UnWarp).

Большие возможности по оформлению текста предоставляют встраиваемые в текст команды. Команды записываются в фигурных скобках, причем между открывающей скобкой и командой не должно быть пробела, например:

{Command "name" 4 R}

Если команда опознана и допустима к использованию внутри текста, она выполняется, а все, что находится внутри скобок и сами скобки на печать не выводятся; например, демонстратор, встретив строку

Любимая игра Алексея - {TextAttr 14}BUMPY{TextAttr OFF}. напечатает: Любимая игра Алексея - BUMPY.

причем первые три слова и тире будут напечатаны текущими атрибутами, слово BUMPY - желтым по синему, а точка в конце - без атрибутов. Действие конкретной команды распространяется на весь текст после нее, вплоть до следующей такой же команды. Так, в данном примере для всего последующего текста будет установлен режим выключенных атрибутов. Если же команда неопознана или запрещена к использованию внутри текста, скобки и текст внутри них будут напечатаны как обычно; например строка

Для начала он {Михаил} решил разобраться с командой {PAUSE}

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

К использованию в тексте разрешено только три команды:

TEXTATTR - установка цветов печати;

MODE - установка режима печати;

PUTPIC - вставка иллюстрации.

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

PUTPIC <имя_файла:str> <отступ:num>

Вставить в текст иллюстрацию, созданную утилитой PM-ILLUSTRATOR и записанную в файл с указанным именем. <отступ> задается в атрибутных знакоместах от левого края текущего поля вывода текста; иллюстрация по ширине должна полностью "влезать" в поле вывода. Начало иллюстрации располагается уже в строке, в которой расположена команда, поэтому в этой строке не должно быть печатного текста, за исключением случая, когда иллюстрация полностью затирает этот текст. Такое ограничение связано с тем, что демонстратор не гарантирует печать текста там, где есть иллюстрация (например, при просмотре текста снизу вверх). Эффект затирания текста изображением можно использовать, например, для вывода сообщения о загрузке иллюстрации, как это делается в демонстрационной программе:

{TextAttr 130}Идет загрузка...{TextAttr OFF}{PutPic "demo1i" 0}

Для того, чтобы не задерживать просмотр постоянными загрузками с диска, в системе применено кэширование диска. Это означает, что пока хватает свободной памяти, файлы (это относится не только к файлам иллюстраций) загружаются в буфер на свободное место, и только при нехватке памяти для загружаемого файла система начинает удалять из буфера самые "старые" файлы. Каждая команда загрузки проверяет, не находится ли уже в буфере требуемый файл, и если это так, файл загружается прямо из памяти. Сказанное вовсе не означает, что в памяти будет находиться две копии одного и того же файла - рабочая и сохраненная в буфере, просто команде загрузки будет возвращен указатель на находящийся в памяти файл.

В любом случае, в памяти полностью должны умещаться исполняемая программа, демонстрируемый текст, вся информация, сохраненная командой WINDOW (см. описание этой команды) и обе иллюстрации, фрагменты которых частично скрыты, а частично выступают с верхнего и нижнего края поля вывода в данный момент (если такая ситуация возможна в Вашем тексте). Иначе говоря, иллюстрация, соприкасающаяся с или выходящая за верхнюю или нижнюю границу поля, не может быть удалена из памяти для ее освобождения.

Это же относится и ко всей вышеперечисленной резидентной информации.

Если с логикой работы демонстратора Вам все понятно, перейдем к собственно просмотру текста. Перед вызовом демонстратора, командами ALT или ASCII установите нужную кодировку текста, установите начальные цвета, режим печати и поле вывода.

При просмотре можно перемещаться по тексту вверх и вниз на строку или страницу, а также в начало и в конец текста. Перемещение на строку выполняется клавишами ВВЕРХ и ВНИЗ (см. команду KEY); на страницу - ВЛЕВО и ВПРАВО. Переход в начало и в конец текста - клавиши В

НАЧАЛО и В КОНЕЦ. Выход из демонстратора и продолжение программы осуществляется при нажатии клавиш ВЫБОР или ВЫХОД. При выходе восстанавливаются начальные значения атрибута и режима печати; поле вывода не очищается.

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

Сообщения об ошибках

Все ошибки, определяемые системой PRESENTATION MASTER, можно разделить на два типа: ошибки интерпретатора и ошибки дисковой операционной системы (DOS). Любая ошибка ведет к останову программы и в конечном итоге к выходу из системы.

Генерацию сообщений об ошибках интерпретатора можно отключить с помощью команды ERROR. В этом случае компьютер будет сбрасываться сразу при обнаружении ошибки (это может понадобиться для того, чтобы не озадачивать ничего не понимающего пользователя какими-то мудреными сообщениями; эти сообщения нужны практически только составителю программы, а когда программа отлажена, генерацию сообщений лучше выключить). Если же печать сообщений включена, при ошибке будет показан фрагмент листинга прораммы с указанием команды, в которой произошла ошибка, появится соответствующее ситуации сообщение, а затем, после нажатия любой клавиши, компьютер все равно сбросится. Ниже перечислены все возможные сообщения об ошибках интерпретатора.

Синтаксическая ошибка

Возникает при невозможности определить смысл команды или параметра.

Недопустимый параметр

Появляется во всех случаях, когда указанный параметр не удовлетворяет условиям команды: не тот тип, выход за пределы диапазона и т. п.

Требуется команда

Возникает при попытке записи спецификатора или переменной на место команды.

Метка не найдена

Выводится, когда команда GOTO не может найти указанную метку.

Неопределенная переменная

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

Несовместимые переменные

Возникает при попытке выполнения одной операции над параметрами различного типа -строкой и числом (в команде ADD или IF).

Недопустимый спецификатор

Имеет место при использовании спецификатора, не предусмотренного данной командой.

Требуется параметр

Выводится, если команде не хватает параметров.

Нет рамки на экране

Возникает при попытке использования команды DELBAR, когда на экране нет курсорной рамки меню.

Окно не открыто

Появляется при попытке закрытия окна командой DELWIN, когда на экране нет открытых

окон.

Параметр не на месте

Возникает при расположении допустимого параметра в команде не там, где он должен находиться по правилам; например, в конструкции Pause Key.

Требуется переменная

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

Слишком длинная строка

Имеет место при попытке определения строки длиннее 62 символов, или если такая строка получается в результате слияния строк командой ADD. Кроме того, это сообщение появляется, если при использовании команды внутри текста не закрыта фигурная скобка.

Нечисловая переменная

Возникает в некоторых случаях, когда через переменную передается строковой параметр вместо числового (например, в команде RANDOM).

Ошибка в записи числа

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

Файл не найден

Выводится, если указанный в команде файл не найден на диске.

Мало памяти

Появляется при нехватке памяти для загружаемого файла или для сохраняемой командой WINDOW со спецификатором STORE информации, а также при попытке открыть более 14 окон.

Лишний параметр

Возникает, если в команде указано больше параметров, чем нужно.

Теперь перейдем к дисковым ошибкам. Основное их отличие от перечисленных ошибок интерпретатора в том, что они выводятся в отдельном окне без показа фрагмента листинга и что их вывод нельзя запретить командой ERROR. Кроме того, поскольку это, в принципе, ошибки не системы, а DOS (они просто перехватываются системой РМ), соответствующие сообщения выводятся по-английски.

BREAK. Press any key to reset

Нажата клавиша BREAK. Нажмите любую клавишу для инициализации. (Функцию опроса клавиши CS/BREAK можно отменить, см. команду BREAK).

Drive X: disk not present

Отсутствует диск в дисководе Х:

Disk error

Дисковая ошибка. Возникает при всех остальных ошибках DOS.

К дисковым ошибкам хоть и с натяжкой, но можно отнести предупреждение о физическом сбое диска. Главная особенность этой ошибки - это то, что после принятия одного из трех предоставляемых на выбор решений можно продолжить работу программы. Иначе говоря, эта ошибка не является фатальной.

Чтобы не перегружать оконную систему и не создавать побочных эффектов, выбор решения сделан в довольно неприглядной форме. При обнаружении сбоя диска раздается звуковой сигнал и в левом верхнем углу экрана появляются буквы A, R, I, что соответствует вариантам: A (Abort) - выход из системы, R (Retry) - повторить попытку чтения сбойного сектора, I (Ignore) - игнорировать сбойный сектор. Выбор производится клавишами ВВЕРХ и ВНИЗ как в обычном меню. После принятия решения затертое место экрана будет восстановлено.

Технические подробности

Распределение ресурсов

Требуемый объем ОЗУ компьютера, Кб.......................................................................................................48

Область памяти, занимаемая системой РМ..............................................................................24576.42524

Количество свободной памяти, байт.......................................................................................................23011

Режим прерываний...................................................................................................................включены, IM 1

Характеристики системы PRESENTATION MASTER

Количество выполняемых команд..................................................................................................................51

Количество служебных слов, воспринимаемых интерпретатором,............................................................91

Количество переменных.................................................................................................................................26

Количество типов данных................................................................................................................................2

Максимальное количество одновременно открытых окон..........................................................................14

Максимальное количество файлов, хранимых в кэш-памяти....................................................................25

Количество шрифтов.............................................................................................................3 х 256 символов

Запуск системы и создание автостартующей демонстрации

Для запуска системы PRESENTATION MASTER запустите файл РМ 1.0. После загрузки система ищет файл autoexec с текстом исполняемой программы и если его не находит, выдает соответствующее сообщение и завершает свою работу. Иначе сразу же начинается выполнение программы.

Если Вы хотите создать автостартующую демонстрацию на отдельном диске, перепишите туда файлы PM 1.0, autoexec и все файлы с текстами, иллюстрациями, картинками и т.п., используемые Вашей программой. Затем переименуйте РМ 1.0 в boot - и демонстрационный диск готов.

Требования к текстовым файлам

Как уже не раз отмечалось, программу и демонстрируемый текст можно набрать в любом текстовом редакторе, использующем альтернативную кодировку текста или кодировку редактора TLW2+.

При кодировке TLW2+ символы с кодами 13 и 14 обозначают конец строки, 128 -переключение на русский знакогенератор, 129 - на латинский. Все остальные символы, коды которых не попадают в диапазон 32.127, игнорируются. Считается, что в начале текста установлен латинский знакогенератор.

При использовании альтернативной кодировки в текст можно включать любой из 256 символов, КРОМЕ символа с кодом 24, который ни в коем случае не должен встречаться ни в каком тексте.

Независимо от применяемой кодировки, признаком конца строки может быть как код 13, так и пара 13/10 (а при кодировке TLW2+ - еще и 14).

Система сама не определяет используемую кодировку текста, её нужно устанавливать командами ALT и ASCII (см.).

Несколько ограничений накладывается на файл, содержащий программу. Если в тексте программы применяется кодировка TLW2+, в первой же строке включите ее командой ASCII, поскольку при запуске включена альтернативная кодировка (о начальных установках см. ниже). Кроме того, в программе не должен встречаться признак конца строки 14 (может использоваться только 13), поэтому при наборе программы в TLW2+ не используйте автоматического перехода на новую строку (можно установить максимальное значение правого поля). И все же, при ошибке фрагмент листинга будет выводиться только в альтернативной кодировке.

Так что мой Вам совет: используйте альтернативную кодировку (по крайней мере, для программы) - и не будете знать проблем. Есть еще один немаловажный аргумент - текст в кодировке TLW2+ печатается чуть-чуть медленнее, т.к. он при этом перекодируется в альтернативную кодировку.

Начальные установки системы

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

CLS 56 (это значит: экран очищен, текущий атрибут - 56 /чёрный по белому/, T

extOutSpace 0 0 31 23 /во весь экран/, Locate 0 0 /конец комментария/ ) Border 7 GraphOutSpace 0 0 31 23 Key UP q i 9 Key DOWN a k 8 Key LEFT o j 6 Key RIGHT p l 7 Key FIRE 0 32 13 Key HOME Q 11 Key END A 10 Key QUIT 7 14 TextAttr OFF Mode 6 Alt

LineLen 62 Sound ON Break ON Error ON

На этом Ваше начальное знакомство с системой PRESENTATION MASTER будем считать оконченным. Смело приступайте к работе и не стесняйтесь экспериментировать!

УСПЕХОВ В РАБОТЕ!




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
В помощь - обзор сложностей поджидающих поинтов ТашZXnet в начале работы с FTN-сетью ZXNet.
BBS - список станций BBS ZXNet.
Проходилка - прохождение игры Die Feuerfaust 2.
Interview with K-0s / Raww Arse
Послесловие - О том, что не вошло в этот номер.

В этот день...   28 марта