-1Часть 3.-0
Коментарии и опции компиляции.
3.2 Опции компиляции
-1Опция L -0(по умолчанию L+)
Контроль листинга
L+ печать всего листинга
L- печать только строк, содержащих ошибки
-1Опция О -0(по умолчанию О+)
Контроль переполнения. Все операции с числами типа real и * и /
с числами integer всегда подвергаются проверке на переполнение.
О+ производить контроль операций + и - над числами integer
О- контроль не производить
-1Опция С -0(по умолчанию С+)
Контроль клавиатуры при выполнении объектного кода. Нажатие EDIT
вызывает возврат в систему с сообщением команды HALT.
С- контроль отсутствует.
-1Опция S -0(по умолчанию S+)
S+ контроль переполнения стека при вызове процедур и функций.
В случае переполнения стека выводится сообщение: 'Out of RAM at
PC = хххх'.
-1Опция А -0(по умолчанию А+)
Контроль границ массивов. В случае ошибки выдается сообщение:
'Index too high' или 'Index too low'.
-1Опция I -0(по умолчанию I-)
При выполнении операций сравнения >, <, >=, <= над 16-разрядными
целыми числами, если аргументы делятся на число >MAXINT=32767, то
возникает переполнение. При этом результат сравнения становится
неверным. Для правильного сравнения таких величин необходимо
использовать опцию I+. Аналогичная ситуация может возникнуть и с
числами типа real при попытке деления на 3.4Е38.
-1Опция Р -0(используется без + и -)
Переключатель принтер/экран аналогичен CTRL P в IBM PC.
-1Опция F -0
После имени этой опции должно через пробел следовать 8-символьное
имя файла (если имя < 8 символов, его дополняют пробелами). При
этом исходный текст программы из указанного файла вставляется
после строки, содержащей опцию F. (См. 4Т версия 1.5)
-1Часть 4.-0
Встроенный редактор
Команды редактора имют вид:
С N1,N2,S1,S2 ;
C - выполняемая команда,
N1,N2 - числа от 1 до 32767,
S1,S2 - строки до 20 символов .
Редактор хранит значения параметров, использованных в предыдущих
командах, т.о. в ряде случаев параметры можно опускать. Если длины
строк S1 и S2 превышают 20 символов, то лишние символы игнорируются.
Параметры, указанные далее в { } , должны присутствовать обязательно.
-1Команда: I n,m-0
Режим автонумерации строк, выход из режима - CS+1 (EDIT).
-1Команда: L n,m-0
Распечатка текста исходного файла со строки n до строки m
порциями, которые могут быть изменены командой 'К'. При нажатии
EDIT - выход в редактор.
-1Команда: К n-0
Установка порции вывода по команде L. n - число строк в порции.
-1Команда: D {n,m}-0
Удаление строк начиная от n до m.
-1Команда: M n,m-0
Пересылка строки с номером n в строку с номером m. При этом
строка с номером n стирается, а содержимое строки m заменяется
на содержимое строки n.
-1Команда: N {n,m}-0
Перенумерация текстового файла: первая строка получает номер n,
шаг нумерации m.
-1Команда: F n,m,f,s-0
В исходном файле между строками n и m производится поиск текста
f. При его обнаружении найденная строка отображается на экране и
система переходит в режим Edit. После этого, используя команды
режима Edit , можно продолжить поиск текста f или заменить
найденный текст f на текст s и далее продолжить поиск.
Отметим, что строки f и s могут быть определены ранее другими
командами.
-1Команда: Е n-0
Включение режима редактирования Edit.
Подкоманды:
пробел - увеличение текстового указателя на +1,
DELETE - уменьшение текстового указателя на -1,
CS+8 - табуляция,
ENTER - конец редактирования с сохранением внесенных изменений,
Q - выход из редактирования. Строка остается без изменений,
R - перезагрузка буфера редактирования, т.е. удаление всех
изменений и повторное редактирование строки,
L - печать оставшейся части строки (за текстовым указателем) и
повторное редактирование,
K - удаление символа в позиции указателя,
Z - удаление всех символов от позиции указателя включительно и до
конца строки,
F - поиск следующей строки, содержащей текст f, оределеный ранее
в команде F,
S - замена ранее определеным текстом s текста f и автоматическое
выполнение подкоманды 'F', т.е. поиск следующей строки,
содержащей f.
-1Необходимо отметить-0, что в данной версии подкоманда 'S'
должна выполняться непосредственно после команды 'F' или
подкоманд 'F' или 'S',
I - вставка символа в текущюу позицию указателя. Режим
сохраняется до нажатия клавиши ENTER. Допускается
использование DELETE и CS+8 (удаление и табуляция),
X - установка текстового указателя в конец строки.
-1Команды обмена с магнитофоном-0
-1Команда: Р n,m,s-0
запись на ленту строк n-m исходного текста с именем s,
-1Команда: G,,s n-0
чтение с ленты файла с именем s. если некоторый текст уже
существует в памяти, то вводимый с ленты текст пристыкуется
к имеющемуся и весь файл пронумеруется с шагом 1. Для
прерывания ввода можно использовать BREAK.
-1Компиляция и запуск в работу-0
-1Команда: С n-0
компиляция со строки n,
-1Команда: R-0
выполнение ранее скомпилированного объектного кода,
хранящегося в буфере,
-1Команда: T n-0
команда трансляции. Исходный текст компилируется начиная со
строки n и, в случае успешной компиляции, система выводит
вопрос 'OK?'. При ответе 'Y' объектный код, произведенный
при компиляции, пересылается в конец runtimes (разрушая при
этом компилятор), а затем runtimes и объектный код
выводятся на ленту с именем, определеным ранее в качестве
параметра f. После этого файл f можно загрузить в память
используя команду LOAD"".
-1Другие команды-0
-1Команда: В-0
выход в Basic,
-1Команда: О n,m-0
преобразование исходного текста, подготовленного в другом
редакторе HP4T, в формат, принятый в HISOFT HP4T,
-1Команда: S,,d-0
изменение разделителя параметров на d. Пробел в качестве
разделителя не допускается.
-1ПРИЛОЖЕНИЕ 1. Сообщения об ошибках-0
1. Число слишком велико.
2. Ожидалось ";".
3. Необъявленный идентификатор.
4. Ожидался идентификатор.
5. Используйте в объявлении констант не ":=", а "=".
6. Ожидалось "=".
7. Выражение не может начинаться этим идентификатором.
8. Ожидалось ":=".
9. Ожидалось ")".
10. Ошибочный тип.
11. Ожидалось ".".
12. Ожидался фактор.
13. Ожидалась константа.
14. Этот идентификатор не константа.
15. Ожидалось "THEN".
16. Ожидалось "DO".
17. Ожидалось "TO" или "DOWNTO".
18. Ожидалось "(".
19. Нельзя вывести этот тип выражения.
20. Ожидалось "OF".
21. Ожидалось ",".
22. Ожидалось ":".
23. Ожидалось "PROGRAM".
24. Ожидалась переменная, т.к. параметр является
параметром-переменной.
25. Ожидалось "BEGIN".
26. В вызове READ ожидалась переменная.
27. Нельзя сравнивать выражения этого типа.
28. Должен быть тип INTEGER или REAL.
29. Невозможно считать этот тип переменных.
30. Этот идентификатор не является типом.
31. В числе real ожидалась экспонента.
32. Ожидалось скалярное выражение (не числовое).
33. Пустая строка недопустима (используйте chr(0) ).
34. Ожидалось "[".
35. Ожидалось "]".
36. Инденкс массива должен иметь скалярный тип.
37. Ожидалось "..".
38. Ожидалось "]" или "," в объявлении ARRAY.
39. Нижняя граница болше верхней.
40. Множество слишком велико (больше 255 элементов).
41. Результатом функции должен быть идентификатор типа.
42. В множестве ожидалось "," или "]".
43. В множестве ожидалось ".." или "," или "]".
44. Тип параметра должен быть идентификатором типа.
45. Пустое множество не может быть первым фактором в операторе.
46. Ожидалась скалярная величина, включая real.
47. Ожидалась скалярная величина, исключая real.
48. Множества несовместимы.
49. "<" или ">" не могут использоваться для сравнения множеств.
50. Ожидались "FORWARD", "LABEL", "CONST", "VAR", "TYPE" или "BEGIN".
51. Ожидалось Hex число.
52. Нельзя применять POKE ко множествам.
53. Массив слишком велик (>64К).
54. В определении "RECORD" ожидались "END" или ";".
55. Ожидался идентификатор поля.
56. После "WITH" ожидалась переменная.
57. Переменная в "WITH" должна иметь тип "RECORD".
58. Идентификатор поля не был связан с оператором "WITH".
59. После "LABEL" ожидалось целое без знака.
60. После "GOTO" ожидалось целое без знака.
61. Метка на ошибочном уровне.
62. Необъявленная метка.
63. Параметром "SIZE" должна быть переменная.
64. Для указателей может использоваться только проверка на равенство.
67. Только выводимый параметр для целых с двумя ":" имеет форму e:m:H.
68. Строка не может содержать символ EOL.
-1Приложение 3. Представление данных в ЗУ.-0
-13.1. Представление данных-0
-13.1.1. Целые-0
Целые занимают в памяти 2 байта.
1 -- #0001
256 -- #0100
-256 -- #FF00
Для операций с целыми используется регистр HL.
-13.1.2. Символьные, булевские и другие скалярные.-0
Занимают по 1 байту в памяти.
TRUE имеет значение 1, а FALSE - 0. Для операций с этими типами
используется регистр А.
-13.1.3. REAL.-0
Вещественные хранятся в форме мантисса-порядок в 4х байтах.
Для операций над вещественными числами используются регистры DE и HL.
D - для хранения порядка, E,H,L - для хранения мантиссы, старший
разряд регистра H - для хранения знака числа. Т.О. :
2 = 01000000 00000000 00000000 00000001 = #40 #00 #00 #01
1 = 01000000 00000000 00000000 00000000 = #40 #00 #00 #00
-12.5 = 11100100 00000000 00000000 00000011 = #E4 #00 #00 #03
0.1 = 01100110 01100110 01100110 11111100 = #66 #66 #66 #FC
H L E D
-13.1.4. Записи и массивы.-0
Записи занимают в памяти пространство, равное сумме их компонент.
Массивы занимают N*S байт, где N - размерность массива, S - число
байт, занимаемое одним элементом.
-13.1.5. Множества.-0
Множества хранятся в виде битовых строк и, если базовый тип имеет
N элементов, то число занимаемых байт равно: (N-1) DIV (8+1), т. е.
SET OF CHAR займ т 256-1 DIV 8+1 = 32 байта.
SET OF (BLUE, GREEN, YELLOW) - 3-1 DIV 8+1 = 1 байт.
-13.1.6. Указатели.-0
Указатели занимают 2 байта памяти, содержащих адрес переменной (
младший байт первый).
-13.2. Хранение переменных в Runtimes-0
-13.2.1Глобальные-0 переменные хранятся, начиная от 'макушки' стека
runtimes вниз, т.е. если стек начинается с #В000 и глобальными
переменными являются:
VAR i:INTEGER;
ch:CHAR;
x:REAL;
то i расположится в AFFE-AFFF,
ch AFFD,
x AFF9-AFFC.
-1Локальные-0 переменные. К ним нет доступа через стек. Вместо
этого в начале каждого внутреннего блока устанавливается регистр IX
так, чтобы (IX-4) указывало на начало блока локальных переменных.
Т.о., если:
PROCEDURE test;
VAR i,j:INTEGER;
то i будет находиться в IX-4-2 и IX-4-1, т.е. в IX-6, IX-5,
j IX-8 и IX-7.
-13.2.3. Параметры и возвращаемые значания-0.
Параметры-значения трактуются как локальные переменные и, как и
эти переменные, занимают старшие адреса памяти. Однако, в отличие от
переменных, в (IX+2) фиксируется младший адрес, а не вершина области.
Если:
PROCEDURE test (i:REAL; j:INTEGER);
то j (располагается первым) будет находиться в IX+2 и IX+3,
а i от IX+4 до IX+7.
Параметры-переменные расматриваются также, как и параметры-значения,
с той лишь разницей, что первые занимает 2 байта памяти, хранящих
адреса этих переменных.
Если:
PROCEDURE test (i:INTEGER; VAR x:REAL);
то ссылка на x размещается в IX+2 и IX+3 (эти ячейки содержат адрес
переменной x), а i - в IX+4, IX+5.
-1Возвращаемые значения-0 размещаются над первым параметром.
FUNCTION test (i:INTEGER):REAL;
i разместится в IX+2 , IX+3, а ячейки с IX+4 по IX+7 зарезервируются
под возвращаемое значение.
-1Реализация HISOFT PASCAL 4T на 48К ZX-SPECTRUM.-0
Нельзя использовать одиночные символы <=, <>, >=, а только
комбинации <, > и =.
Управление осуществляется только временными атрибутами знакомест
посредством стандартных управляющих кодов (WRITE(CHR(17), WRITE(CHR(4)
- зеленый 'paper'); нельзя изменять постоянные атрибуты.
Вместе с объектным кодом всегда автоматически записывается
загрузчик. Если Вы использовали команду 'T' для записи объектного кода
и runtimes на ленту, то для запуска кода в работу достаточно выполнить
LOAD "" .
После окончания работы кода его можно запустить повторно, введя
GOTO 7.
Если Вы вышли из Паскаля по команде 'В' ,для возврата в редактор
введите GOTO 9 ('теплый' старт с сохранением исходного текста) или
GOTO 12 ('холодный' старт с инициализацией).
Для установки цвета INK используйте CHR(15).
-1 PRODUCT APPLICATION NOTE PS1.1-0
-1Звук и графика ZX-SPECTRUM в Паскале 4Т-0
1. Звук (см. пакет MPACK к HP80).
Пример: BEEP(262,0.5) ; BEEP(0,1) - генерация среднего До в течение
0,5 сек., затем пауза на 1 сек.
2. Графика (см. пакет MPACK).
3. Вывод через системное ROM.
Существуют ситуации, когда полезно осуществлять вывод через
системную точку входа RST #10. К примеру, при использовании
управляющего кода PRINT AT, за которым должны следовать 8-битные
значения X и Y. Однако с помощью оператора WRITE определенные значения
вывести невозможно (к примеру, код 8 соответствует BACKSPACE
(DELETE)). Для этого целесообразно использовать процедуру
SPOUT (C:CHAR).
-1Использование графического пакета TURTLE-0.
Пакет по команде G,,TURTLE присоединяется к любой программе
(отметим, однако, что для нормальной работы пакет должен быть снабжен
PROGRAM-заголовком и VAR-декларацией, TYPE, CONST и LABEL объявлять
необязательно. Кроме того, программа не должна содержать
предварительно объявленных процедур и функций.). Информация о
'черепашке' хранится в глобальных переменных.
-1Глобальные переменные-0.
HEADING
Используется для хранения углового значения направления, в
котором в данный момент ориентирована 'черепашка'. Принимает
значения REAL в градусах и может быть установлена в 0 процедурой
TURTLE. Значение 0 соответствует Востоку.
XCOR, YCOR
Хранят текущие координаты (X,Y) 'черепашки'. Имеют тип REAL и
изначально равны 127 и 87 соответственно.
PENSTATUS
Имеет тип INTEGER. Используется для хранения состояния 'пера';
0 - 'перо' опущено, 1 - поднято.
-1Процедуры-0.
INK (C:INTEGER), C = 0 - 8;
PAPER (C:INTEGER), C = 0 - 8;
COPY - копирование экрана на принтер;
PENDOWN (C:INTEGER) -перевод 'черепашки' в состояние, при котором
она при движении будет оставлять след цветом С.
PENUP - процедура, обратная PENDOWN. ( Обе процедуры устанавливают
переменную PENSTATUS)
SETHD (A:REAL) - назначает параметр типа REAL глобальной переменной
HEADING, т.е. устанавливает направление движения.
0-East, 90-North, 180-West, 270-South. Т.е. против часовой
стрелки.
SETXY (X,Y:REAL)
Устанавливает абсолютную позицию 'черепахи'.
FWD (L:REAL)
Двигает 'черепаху' вперед на L единиц в направлении ,
определяемом переменной HEADING.
BACK (L:REAL)
Двигает 'черепаху' назад на L единиц (обратна FWD).
TURN (A:REAL)
Поворот головы 'черепахи' на А градусов. Увеличение А
соответствует повороту против часовой стрелки.
VECTOR (A,L:REAL)
Смещает позицию 'черепахи' на L единиц в направлении A. После
перемещения голова остается в А-направлении.
RIGHT (A:REAL)
LEFT (A:REAL)
Поворот головы 'черепахи' вправо/влево на А градусов.
ARCR (R:REAL, A:INTEGER)
'Черепаха' идет по дуге окружности размером R, длина дуги
определена в А. 'Черепаха' идет по часовой стрелке.
Обычно R = до 0.5.
TURTLE
Инициализация глобальных переменных.
-1Пример программы-0.
Отметим, что пакет TURTLE размещается, начиная со строки 10 и
заканчивается строкой 1350.
1. Круги
1 PROGRAM CIRCLES;
2 VAR I:INTEGER;
1360 BEGIN
1370 TURTLE;
1380 FOR I:=1 TO 9 DO
1390 BEGIN
1400 ARCR (0.5,360);
1410 RIGHT (40)
1420 END
1430 END.
2. Спирали
1 PROGRAM SPIRALS ;
2 VAR
1360 PROCEDURE SPIRALS (L,A:REAL);
1370 BEGIN
1380 FWD(L);
1390 RIGHT(A);
1400 SPIRALS(L+1,A)
1410 END;
1420 BEGIN
1430 TURTLE;
1440 SPIRALS (9,95) или (9,90) или (9,121)...
Ошибки в TURTLE
Строка 570 USER(#EAC) должна быть изменена:
INLINE (#FD, #21, #3A, #5C, #FD, #CB, 1, #CE, #CD, #AC, #E, #FD,
#CB, 1, #8E, #F3);
-1Pascal 4T Version 5 ( с 1 Апреля 1983 г.)-0.
1. Функции могут возвращать значения POINTER (указатели);
2. Исправлена ошибка в NEW;
3. Новый редактор; добавлена команда V без аргументов, которая выдает
значения разделителя, line range, Find и Substitute строк;
4 Реализована опция $F ('Include'). Если Вы хотите ее использовать, то
исходный текст, который предполагается 'подкачивать', должен быть
выведен на ленту с помощью команды W. W работает аналогично команде
Р, за исключением того, что по W информация выводится не в HP4T
формате и запись начинается сразу после окончания набора команды.
Текст, записанный по W, командой G,, считать нельзя.
Пример:
W 50,120,PLOT - запись процедуры PLOT.
Для включения PLOT:
100 END;
110
120 {$F PLOT} 'включение' процедуры plot;
130
140 PROCEDURE MORE; - оставшаяся часть программы.