Системные программы для «ZX-Spectrum» 1993 г.

MASTERFILE 09 - продолжение описания. Режим переработки текста.


РЕЖИМ ПЕРЕРАБОТКИ ТЕКСТА.

 

Запись, подлежащая переделке — это всегда верхняя запись из режима "дисплея". И войти в режим "UPDATA" можно только из режима "дисплей", если в нем есть хотя бы одна запись. Ис­пользуя " " и клавиши "1"..."9", установите вверху экрана нуж­ную вам запись и нажмите "U". Теперь перед вами почти те же возможности, что и в режиме "добавление записи". Разница в том, что вы можете использовать "D" для перехода в режим "дисплей".

ПРИМЕР

Создать файл из имен и телефонных номеров. Условное обоз­начение: "+" = "ENTER".

Начало — от главного меню /ММ/.

·         * * * NAN NAME + AT TEL NUMBER + M

Здесь мы задали 2 имени — "NAME" для метки "N" и "TEL NUMBER" для метки "Т".

****   AAN   JONES   P   +   АТ01

2345678+М

Это одна запись с телефоном П.Джонса.

****   A   PATKINS   R   +   0232

666554   +   М

Здесь мы использовали автозапрос для ввода той же инфор­мации по Р.Аткинсу.

****   А   Р   SMITH   JOHN   +   2332-45664 +   М

****   А  Р  AIRPORT + 01-687 23459 + М

**** А Р HAIRDRESSER + 876-5432 + М

 Теперь у нас есть пять записей и мы можем использовать режим для создания формата сообщения при просмотре файла.

**** ЕА1

 Начало просмотра, метка 1.

**** ALO+N8+1YNN TELEPHONE-LIST

 Установили заголовок "TELEPHONE-LIST" в строке 0, ко­лонке 8.

**** ADN 3+N1-16-+-1+7YNNN+

Изображение имен, начиная со стр.3, колонка 1, 16 симв. и т.п.

**** ADT3+N18-14+2YNN. . .+

 Изображение телефонных номеров, начиная с 18-й колонки строки 3, максимум 14 символов. Проверить правильность наших форматов можно переходом в режим "дисплей".

****    D

Все выглядит вроде бы хорошо, но попробуем сортировку по имени, а также проверим возможность внесения изменений. Воз­вратимся в режим EDIT.

**** MER1

Просмотр сообщения с меткой 1.

****  R76N3

Изменили цвет бордюра, интервал....

**** АВО-И65-И63+255

Изобразили прямоугольник.

****   D

Изображение изменилось. Теперь еще раз изменим интервал. Назначим 2.

****    MER1

Просмотр сообщения с меткой 1.

**** R76N2

 Изменение интервала на 2.

**** ADZ4+N0+32+1+7 NNN

 Мы использовали метку данных Z, которой нет в нашем фа­йле.

* * * *   D

Теперь, допустим изменился номер Джонса

* * * *    3

Установка Джонса вверх экрана.

****   и

Переход в режим переработки.

****    GT

Вызов телефонного номера.

****    R01-9953311+D

Замена новыми данными и возврат в режим "дисплей". И наконец, запишем наш файл на ленту:

* * * *    NYFTELNUM   ++

 

РЕЖИМ "ПОИСК"

Поиск осуществляется путем сравнения какого-либо пункта записей с аргументом, наперед заданным. Соответствующие за­писи обозначаются как выбранные, что отображается в значении SEL=NNNNN. Для того чтобы начать поиск, сначала необхо­димо, чтобы число выбранных записей было нулевым. Используя "R" в главном меню, установите SEL=OOOOO. Теперь, нажав "S", начните поиск:

Первое меню предлагает:

А — поиск по всем записям;

L — по выбранным;

М — возврат в главное меню.

После нажатия "А" или "L" по запросу вводится метка пункта данных, который подлежит сравнению. Выход через "ENTER". Следующее меню запрашивает, является ли объект поиска сим­волом /С/ или числом /N/. Числовые данные нормируются по NNNNNNNNNNNNN, т.е. 3,198 воспринимается как 00000000003.19, что нужно в целях сравнения.

Следующее меню запрашивает тип сравнения:

G — больше;

L — меньше;

U — неравенство;

Е — равенство;

S — имеет место для поиска символьных данных.

Если ваш аргумент числовой, а при поиске встретился не­числовой пункт, то поиск прекращается с сообщением:

****    MON   NUMERIC   DATA:    SKIP    (OR) UPDATE

Если вы далее выбираете режим "U"/" переработка текста"/, то поиск не может быть возобновлен непосредственно. Если вы наберете "S" (пропустить), то поиск перейдет к следующей за­писи.

Символьный поток несколько сложен.

1. Верхний и нижний регистры букв считаются равными.

2. Если аргумент короче пункта данных, но равен ему в своих пределах, то они считаются равными. Так, для аргумента Фред равными будут: ФРЕДЕРИК, ФРЕДА и др.

3. Если аргумент длиннее пункта, то неравенство: аргумент Фред не равен пункту фре.

Сканирование "S" осуществляет поиск внутри пунктов за­писей, так кик аргумент Фред совпадает со стрингами: "АЛЬ­ФРЕД ВЕЛИКИЙ", "МАНФРЕД МАН", "ТЕТЯ ФРЕДА" и т.п.

Можно производить поиск на основе наличия или отсутствия пункта в записи, независимо от его значения, поскольку отсут­ствующий пункт считается начинающимся с двоичного нуля. Так, символьный поиск с аргументом "О" поделит записи на те, которые имеют данный пункт, и те, которые не имеют. Исполь­зуйте L, чтобы выбрать записи, не имеющие пункт, или "G", чтобы выбрать имеющие.

ПРИМЕР

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

**** R SASNG 14000+

Выбор с зарплатой больше 14 000

* * * *  LSNL 15000+

Останутся только записи с "зарплатой" менее 15000

* * * *  LDCE ADM +

Останутся только те записи, в которых пункт "отдел" начина­ется с букв "ADM".

* * ** D

Изображение выбранных записей.

 

ПОДВЕДЕНИЕ ИТОГА

Как и при поиске, все данные нормируются. Вес нечисловые пункты останавливают расчет, как в режиме "поиск ". Если вы­бранная запись не имеет соответствующего пункта, ему присва­ивается нулевое значение. Отрицательные числа не принимают­ся.

Подсчет итога может быть выполнен из главного меню или из режима "дисплей". Результат изображается в строках 19-21.

Подведение итога возможно только для одного пункта дан­ных. Для более сложных арифметических вычислений необхо­димо записать программу в бсйсик-области.

 

ЗАГРУЗКА С ЛЕНТЫ И ЗАПИСЬ НА ЛЕНТУ

 

Для записи на ленту служит команда ММ — "Y". Далее сле­дует запрос: F/P?

F — только файл;

Р — программа и файл;

ENTER — выход.

После выбора "Р"—запрос имени (до 10 символов для ленты). Просто "ENTER" означает — "то же имя, что и раньше".

Вы можете ставить автоматический оператор VERIFY в стро­ку 4020 перед GO TO USR R :

**** VERIFY " " DATA FS ():

см. командный режим. Как войти в Бейсик, чтобы сделать такие изменения? При этом предполагается, что VERIFY применяется только к записи одного файла "F", а не к "Р".

После записи файла перемотайте ленту и воспроизведите. Ес­ли все в порядке — ММ. Иначе GO TO 1 и повторите SAVE.

Для загрузки файла, который был выгружен самостоятельно, через MM VF используйте MM VL.

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

CHARACTER ARRAY : FILENAME,

затем:

BREAK

GO   TO    1

MM

и начните все сначала. После успешной загрузки вы получите ММ с новым именем файла. Нет необходимости вычищать файл перед загрузкой другого. Это делается автоматически при загруз­ке.

Рекомендуем иметь по крайней мере 3 поколения ваших фай­лов для повышения надежности. Для этого используйте пооче­редно 3....4 кассеты. Никогда не записывайте дочерний файл на родительский, так как при этом рискуете остаться ни с чем.

 

СЧЕТЧИКИ

 

В строке 23 почти всегда изображается состояние файловых Счетчиков:

REE S= NNNNN , SEL” NNNNN , SPA = NNNNN

 I                                    II                         III

I. Счетчик количества записей в файле.

II. Счетчик пунктов, считающихся выбранными для режима "дисплей". Заметьте, что при создании нового файла все данные Считаются выбранными.

III. Приблизительный размер свободного пространства в бай­тах.

 

БЕЙСИК

 

Хотя MASTERFILE и предназначен для хранения файлов, возможна и обработка их через бсйсик-область. Например, у вас есть файл результатов экзаменов учеников с группой пунктов экзаменационных оценок в каждой записи. Вы можете рассчи­тать средний балл каждого ученика и хранить его в качестве дополнительного пункта в записях.

Вызов Бейсика — MM UY. Только выбранные записи попадут на обработку. В исходном состоянии Бейсика в программе нет, кроме простого возвращения. Когда вызываете Бейсик через ММ UY, управление передастся специальным строкам.

Строка 4900. Управление сюда передается только однажды, перед тем как какие-либо записи начнут обрабатываться. В этой точке можно установить параметры, которые будут в дальней­шем использоваться в других точках. Выход через GO TO USR R.

Строка 5000. Управление передается сюда в начале каждой записи из числа выбранных, но до того, как придут какие-либо данные из записи. Используйте эту точку для инициализации любой записи. Выход через GO TO USR R.

Строка 6000. Сюда управление передастся один раз в начале каждого пункта выбранной записи. Пункт хранится в С$ длиной 130. С$(1) — это метка данных, А С$(2ТО) — это сами данные. Вы можете переприсвоить их другой переменной, если хотите использовать их позже. Выход также GO TO USR R.

Строка 7000. Сюда передастся управление один раз для каж­дой выбранной записи после того, как все пункты просмотрены в строке 6000. Здесь можно выполнить действия с данными, "схваченными" в строке 6000, а затем установить С$ одним из следующих способов:

а) LET 0$="" — для указания на то, что никаких изменений '" с записью делать не надо;

б) LET С$="Х" указывает на то, что пункты, имя которых "X", должны быть стерты. При этом "X" должен быть заглавной буквой от А до Z;

в) LET С$="Х" — С$ (2TO)=DATA — указывает на то, что пункт с именем "X" должен быть вставлен или заменен, если он уже есть. "X" должен быть заглавной буквой от А до Z.

Заметьте, что только один пункт данных может быть задей­ствован за один проход Бейсика. Несколько пунктов можно обра-ботать за ряд проходов, но для этого надо с умом использовать строку 4900.

Строка 9000. Управление передается сюда только один раз. Это происходит после того, как обработаны все записи. Эту стро­ку можно использовать, чтобы распечатывать итог, предусмат­ривать переключатели, вызывать звуковые сигналы и т.п. Уп­равление в MASTERFILE передастся через GO TO USR R.

 

ПРИМЕР

 

Пусть надо создать новый пункт в записи. Это пункт "Y" рав­ный стоимости товаров, т.е. произведению количества Q на це­ну С.

 

4900   GO   TO   USR   R

5000   LET   С=0    :    LET   0=0    :    GO   TO USR   R

6000  IF C$(1)=-"Q"  THEN LET Q=VAL C$  (2TO)

6010 IF C$(l )="C" THEN LET С =

VA1, С$(2ТО) 6020 GO TO USR R 7000 LET C$="Y"  : LET С$(2ТО) - STR$(Q*C): GО ТО USR R

 

Строка 4900 ничего не делает. Строка 5000 устанавливает С и Q равными 0 на случай, что мы не найдем другого, лучшего значения. Строка 6000 "схватывает" Q и С и превращает их в числовые данные. В строке 7000 строим пункт "Y" и передаем его для вставки или замены.

Кстати, обратите внимание, что мы не выполнили:

С$ = "Y" + STR $ (...) потому, что какой-то "жучок" в ROMe иногда даст неправильные результаты при слиянии строковых переменных.

 

МИКРОДРАЙВ

 

С небольшими изменения в бейсиковой части MASTERFILE программа может работать с микродрайвом. Заметьте, что микродрайв не даст вам большего объема файла, а только облегчает доступ.

Загрузите MASTERFILE с ленты, как обычно. Включите нео6ходимые бсйсик-строки. Очистите файл. Запишите машинно-кодовую часть через MML и CS+Q, входя без номера строки:

SAVE + "М";1; "MF*M CODE" CODE N+l .    65535-N

здесь N — число в операторе CLEAR при загрузке программы. Далее измените строки, содержащие SAVE и LOAD:

4020   SAVE    *"M";    VAL    "I";    C$(TO   VAL"10") DATA F$ (): GO TO USR R

4030 SAVE *"M"; VAL "1"; C$(TO VAL "10") LINE VAL "4035": GO TO USR R

4035 LOAD *"M"; VAL"1";"MF MCODE"

CODE: GO TO VAL "1"

4050 LOAD *"M"; VAL"1 " ; C$(TO

VAL"'10")DATA F$():GO TO USR R

Теперь изменим строку 1:

1    PRINT;     :    PAPER   VAL    "7":GO   TO USR    ( )

Если вы не знали раньше, то имейте в виду, что операция VAL"NNN" экономит 3 байта RAM по сравнению с просто NNN. Далее GO TO 1 затем:

SAVE   через   MM   VP .

Теперь вы можете перенести свои файлы с ленты на карт­ридж:

10   LOAD"    "    DATA   E$    (    ): INPUT   N$:

SAVE    *"M";1;    N$   DATA    F$ ( )

Модифицированный MASTERFILE будет запускаться с микродрайва 1. Мы рекомендуем записывать файлы, а не прог­рамму с файлом. Заметьте, что на картридже нельзя хранить файлы с одинаковым именем, поэтому рекомендуем наряду с именем фиксировать также и дату, например:

АССТ AUG 24

 Это поможет вам заодно при чтении каталога картриджа ре­шить, какой файл более свежий.

 

НЕКОТОРЫЕ POKE.

 

Для усовершенствования MASTERFILE войдите в Бейсик, в командный режим и используйте оператор POKE. Затем: GO TO 1, а потом запишите на ленту через MM VP.

Ваши возможности:

Если вам нужно больше, чем 26 меток, их можно увеличить, добавив О...9 и некоторые символы между 9 и А:

POKE 64282,48: POKE 64306,48: POKE 65534,48

Вывод на принтеры, отличные от ZX. Существует много ин­терфейсов для подключения точечного принтера и других прин­теров к Spectrum. Так как MASTERFILE выполняет печать, ис­пользуя оператор COPY, вам надо выбрать интерфейс, который поддерживает COPY.

TASMAN, HILDER BAY, KEMPSTON имеют интерфейсы, совместимые с MASTERFILE.

Существуют два способа COPY — это ASCII и HI-RES. ASCII передает символы ASCII по мере их генерации через функцию SCREENS. Преимущество ASCII — в скорости печати и в сов­местимости со всеми видами принтеров.

В режиме HI-RES идет передача точки за точкой, этот режим более медленный и применим только к точечным принтерам.

 




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Оттяг - "Русские народные чернушки"(сканированные картинки от SERGA)
Enlight'96 - участники и гости фестиваля (по матеpиалам В. Медноногова).
Видео - Психологический боевик "Гонконг'97".
Phat'0 & Phat'1 - официальные результаты Латвийского пати.
О журнале - New magazine by Surdakar group.

В этот день...   21 ноября