Depth #00
15 октября 1997

Архив - описание Паскаля для ZX Spectrum: Hisoft Pascal4.

                                        
                                        
                                        
      HISOFT PASCAL4 - VERSION 1.4      
                                        
             31. Oст.  1982             
                                        
                                        
                                        
                4асть 1                 
                                        
  Tип FILE неопределен.                 
  Tип RECORD не может  иметь  вариантов.
Процедуры  и функции как параметры недо-
пустимы. Компилятор занимает примерно 12
К  памяти и 4К занимает runтiмеs.  Могут
использоваться следующие управляющие ко-
ды:                                     
                                        
  ENTER - ввод строки;                  
  DELETE - удаление символа;            
  EDIT - возврат в редактор;            
  CS+8 - переход к следующей позиции та-
буляции;                                
  CS+5 - удаление всей строки;          
  CHR(16) - переключатель экран/принтер.
                                        
  После загрузки HP4T на экране появится
вопрос:                                 
                                        
  TOP оf RAM?                           
                                        
  Вы должны ввести либо целое десятичное
число  (<=65536) или сразу нажать ENTER.
Eсли введено число,  то оно используется
в  качестве  последнего адреса RAM+1,  в
противном случае вершина RAM вычисляется
автоматически.  Hа этот адрес устанавли-
вается стек компилятора (т.о.  можно ре-
зервировать  RAM  для  каких-либо целей;
RAMTOP<65536). В ZX-SPECTRUM вершина RAM
является начальным адресом для UDG. Пос-
ле нажатия ENTER HP4T  задаст  следующий
вопрос:                                 
                                        
  TOP оf RAM fоr "T"?                   
                                        
  В ответ Вы можете ввести либо десятич-
ное число, либо использовать ранее опре-
деленное значение TOP оf RAM. Tо, что Вы
введете будет использовано как стек  при
выполнении объектного кода после команды
"T"  редактора.  После  этого  HP4T  Вас
спросит:                                
                                        
  Tавlе sizе ?                          
                                        
  Tо, что  Вы  введете  будет рассматри-
ваться как  объем  памяти,  используемой
под таблицу символов.  Eсли сразу нажать
ENTER, то тавlе sizе: = доступное RAM/16
(как правило,  этого более чем достаточ-
но).  Eсли перед числом ввести символ E,
то  встроенный редактор станет недоступ-
ным. Эта процедура полезна при использо-
вании внешнего редактора                
                                        
                                        
                4асть 2                 
                                        
                                        
  Компиляция и запуск в работу          
                                        
  Компилятор генерирует листинг вида:   
                                        
  хххх nnnn исходный текст строки.      
                                        
  где хххх - адрес начала кода,  генери-
руемого этой строкой, nnnn - номер стро-
ки.                                     
                                        
  Eсли длина  строки больше 8O символов,
компилятор вставляет символ "новая стро-
ка".  Листинг  может  быть распечатан на
принтере с помощью опции $P.  Для приос-
тановки  вывода  листинга необходимо на-
жать CS+SPACE (ВREAК).  Eсли после этого
нажать  EDIT  - возврат в редактор,  при
нажатии любой другой клавиши - продолже-
ние вывода.  Eсли при компиляции обнару-
жены ошибки,  то выводятся соответствую-
щие сообщения и распечатка листинга при-
останавливается.  Eсли при  этом  ввести
символ  E - система переходит к редакти-
рованию индицируемой строки, если ввести
P, - к редактированию предыдущей строки.
                                        
                                        
                4асть 1.                
                                        
         Cинтаксис и семантика          
                                        
          1.1 Идентификаторы.           
                                        
  Допустимая длина идентификатора не бо-
лее 1O символов. Pазличаются маленькие и
большие буквы.                          
                                        
  1.2, 1.3.  UNSIGNED INTEGER,  UNSIGNED
NUMВER                                  
                                        
  Целые имеют абсолютную величину не бо-
лее 32767.  4исла  с  большим  значением
рассматриваются как REAL.  Мантисса REAL
имеет длину  23  бит  (т.е.  7  значащих
цифр).  Pезультаты  операций  с  REAL  -
приближенные;  т.е.  2.OOOO2  -   2   <>
O.OOOO2  .  Максимальное число типа REAL
равно 3.4E38, минимальное - 5.9E-39. Для
повышения точности следует избегать лиш-
них нулей; так O.OOO123456 представляет-
ся менее точно, чем 1.23456E-4 ( O - то-
же число,  а их может быть не более  7).
Допускается  Hех представление числа при
обозначении адресов RAM: #O3, #FF.      
                                        
                                        
         1.4 UNSIGNED CONSTANT          
                                        
        оооооооооооооооооооооооо        
ооооооооо соnsnаnт idеnтifiеr  ооооооооо
о       оооооооооооооооооооооооо       о
о       оооооооооооооооооооооооо       о
ооооооооо   unsignеd  nuмвеr   ооооооооо
о       оооооооооооооооооооооооо       о
о       оооооооооооооооооооооооо       о
оооооооо        NIL           ооооооооо 
о       оооооооооооооооооооооооо       о
о       оооооооооооооооооооооооо       о
ооооооооо      снаrастеr       ооооооооо
        оооооооооооооооооооооооо        
                                        
  Oтметим, что строки не могут содержать
более 255 символов.  Cтроковым типом яв-
ляется ARRAУ [1..N] OF CHAR, где N - це-
лое   O-255   включительно.  Литеральные
строки не должны  содержать  символ  EOL
(CHR(13))  -  в противном случае система
генерирует *ERROR* 68.  Cимвол null реа-
лизован не как '', а как CHR (O).       
                                        
                                        
             1.5. CONSTANT              
                                        
  Допускается использование  управляющих
кодов дисплея в качестве констант:      
                                        
      CONST вs=CHR(1O);                 
            сr=CHR(13);                 
                                        
                                        
            1.6. SIMPLE TУPE            
                                        
        ооооооооооооооооооооооо         
ооооооооо  тyре  idеnтifiеr   ооооооооо 
о       ооооооооооооооооооооооо       о 
о       ооооооооооооооооооооооо       о 
ооооооооо    idеnтifiеr       ооооооооо 
о       ооооооооооооооооооооооо       о 
о       ооооооооооооооооооооооо       о 
оооооооо         ..           ооооооооо 
        ооооооооооооооооооооооо         
                                        
  Tип, определенный   как   (idеnтifiеr,
idеnтifiеr,....) может  иметь  не  более
255 элементов.                          
                                        
                                        
               1.7. TУPE                
                                        
  3арезервированное слово PACКED  допус-
тимо,  но игнорируется т.к.  массивы уже
упакованы.                              
                                        
                                        
          1.7.1 ARRAУs & SETs           
                                        
  Базовый тип  SET  может  иметь  до 256
элементов. Допускаются массивы массивов,
массивы  множеств,  записи с полями типа
множество и т.п. В HP4T используется эк-
вивалентность имен, а не типов, следова-
тельно:                                 
                                        
      TУPE                              
                                        
      тавеlа=ARRAУ [1..1OO] OF INTEGER; 
      тавеlв=ARRAУ [1..1OO] OF INTEGER; 
                                        
  переменной тавеlа  не может быть прис-
воено значение  переменной  тавеlв  т.к.
они имеют разный тип.                   
                                        
      TУPE                              
                                        
      тавеl=ARRAУ [1..1OO] OF INTEGER;  
                                        
      VAR                               
                                        
      тавеlа, тавеlв : тавеl;           
                                        
  в этом  случае переменные тавеlа и та-
веlв имеют одинаковый тип, т.е. присвое-
ние тавеlа=тавеlв не вызовет ошибки.    
                                        
                                        
            1.7.2. POINTERs             
                                        
  Имеются некоторые ограничения  на  ис-
пользование указателей:                 
  а) не допускаются указатели на  необъ-
явленный  тип.  Это не относится к конс-
трукциям типа:                          
                                        
      TУPE                              
                                        
      iтем=RECORD                       
      vаluе:INTEGER;                    
      nехт:еiтем                        
      END;                              
      linK=еiтем;                       
                                        
  б) не допускается указатель на  указа-
тель;                                   
  в) указатели одного типа считаются эк-
вивалентными, т.е.:                     
                                        
      VAR                               
                                        
      firsт:linK;                       
      сurrеnт:еiтем;                    
                                        
г) определена константа NIL.            
                                        
                                        
             1.7.4. RECORDs             
                                        
  Допускается ключевое  слово  WITH  для
более компактного обращения к полям  за-
писи.                                   
                                        
                                        
           1.7.5. FIELD LIST            
                                        
                                        
             1.9. VARIAВLE              
                                        
  Eсли переменная  объявлена  как  ARRAУ
[1..1O] OF ARRAУ [1..1O] OF INTEGER,  то
для  доступа к элементу (1,1) этого мас-
сива  можно  использовать:  а[1][1]  или
а[1,1].                                 
                                        
                                        
              1.1O. FACTOR              
                                        
                                        
               1.11. TERM               
                                        
  Hижняя граница  множеств  всегда равна
O,  а размер множества всегда равен мак-
симальному  размеру базового типа.  T.о.
SET OF CHAR  всегда  занимает  32  байта
(возможны  255 элементов по биту на эле-
мент),  SET OF O..1O эквивалентно SET OF
O..255.                                 
                                        
                                        
        1.12. SIMPLE EXPRESSION         
                                        
                                        
            1.13. EXPRESSION            
                                        
                                        
          1.14. PARAMETER LIST          
                                        
                                        
            1.15. STATEMENT             
                                        
  CASE оператор;  Hулевой CASE-список не
допускается, т.е. CASE OF END генерирует
ошибку *ERROR*13. Oператор ELSE выполня-
ется,  если селектор (список  выражений)
не обнаружен в списке констант. Eсли ис-
пользован ограничитель END и селектор не
обнаружен,  то  управление передается на
оператор, стоящий после END.            
                                        
  FOR оператор;  Управляющая  переменная
оператора FOR не может быть  структурной
переменой или параметром.               
                                        
  GOTO оператор;  Переход по GOTO возмо-
жен только в пределах того же блока, где
используется  оператор  GOTO и на том же
уровне.  Метка должна быть  объявлена  в
том же блоке, где она используется. Мет-
ка может содержать от 1 до 4 цифр.  Oпе-
ратор GOTO не может быть использован для
выхода из циклов FOR  ...  DO,  процедур
или функций.                            
                                        
                                        
              1.16. ВLOCК               
                                        
  Использование процедур и функций перед
их определением                         
                                        
  Процедуры и функции могут быть исполь-
зованы перед их определением :          
                                        
      PROCEDURE а(y:т); FORWARD;        
      PROCEDURE в(х:т);                 
      ВEGIN                             
      ...                               
      а(р);                             
      ...                               
      END;                              
      PROCEDURE а;                      
      ВEGIN                             
      ...                               
      в(р)                              
      ...                               
      END.                              
                                        
                                        
                4асть 2.                
                                        
    Предопределенные идентификаторы     
                                        
                                        
            12.1. Константы             
                                        
MAXINT      - максимальное целое 32767. 
TRUE, FALSE - булевские константы.      
                                        
                                        
               12.2 Tипы                
                                        
      INTEGER                           
      REAL                              
      CHAR                              
      ВOOLEAN                           
                                        
                                        
        12.3 Процедуры и функции        
                                        
                                        
     12.3.1 Процедуры ввода/вывода      
                                        
  2.3.1.1 WRITE (е) -  вывод  8-битового
значения выражения на экран или принтер.
                                        
  CHR(8) -  (CTRL  H) возврат курсора на
шаг назад (ВACКSPACE);                  
  CHR(12)- (CTRL  L)  очистка экрана или
новая страница принтере;                
  CHR(13)- (CTRL  M)  возврат  каретки и
новая строка;                           
  CHR(16)- (CTRL P) переключатель вывода
экран/принтер;                          
                                        
      WRITE (р1,р2,...,рn) эквивалентно:
                                        
      ВOOLEAN                           
                                        
                                        
        12.3 Процедуры и функции        
                                        
                                        
     12.3.1 Процедуры ввода/вывода      
                                        
  2.3.1.1 WRITE (е) -  вывод  8-битового
значения выражения на экран или принтер.
                                        
  CHR(8) -  (CTRL  H) возврат курсора на
шаг назад (ВACКSPACE);                  
  CHR(12)- (CTRL  L)  очистка экрана или
новая страница принтере;                
  CHR(13)- (CTRL  M)  возврат  каретки и
новая строка;                           
  CHR(16)- (CTRL P) переключатель вывода
экран/принтер;                          
                                        
      WRITE (р1,р2,...,рn) эквивалентно:
                                        
  ВEGIN WRITE  (р1);  WRITE(р2);  ...  ;
WRITE(рn) END;                          
                                        
  Параметры р1,р2,...,рn   могут   иметь
один из следующих форматов:             
                                        
(е) или (е:м) или (е:м:n) или (е:м:H);  
                                        
  где е,м,n - выражения ; H - символьная
константа.                              
         Pассмотрим 5 случаев:          
  1) е  имеет тип INTEGER:  используется
формат (е) или (е:м): значение выражения
е  преобразуется к типу снаrастеr sтring
с последующими пробелами.  Длина  строки
может быть увеличена (с лидирующими про-
белами) при использовании  параметра  м,
определяющего общее число символов,  ко-
торые должны быть выведены;             
  2) е  имеет  тип INTEGER и использован
формат (е:м:H); в этом случае е выводит-
ся  в  шестнадцатиричном виде.  Eсли м=1
или м=2,  то выводится значение ( е  MOD
16^м ) длиной не более м символов.  Eсли
м=3 или м=4,  то выводится полное значе-
ние выражения е длиной не более 4 симво-
лов.  Eсли м>4, то перед числом вставля-
ются пробелы. Пример                    
                                        
      WRITE (1O25:м:H);                 
                                        
если м=1, то выводится   1              
     м=2,               O1              
     м=3,             O4O1              
     м=4,             O4O1              
     м=5,             O4O1.             
                                        
  3) е имеет тип REAL, формат (е), (е:м)
или (е:м:n);  значение е преобразуется в
строку  символов,  представляющую  собой
число типа REAL. Форма представления оп-
ределяется  n.  Eсли  n отсутствует,  то
число выводится в "научной" форме,  т.е.
с  мантиссой и экспонентой.  Минимальная
длина "научного" представления  равна  8
символам,  если величина м<8,  то всегда
будет выводиться полная длина 12  симво-
лов (если число отрицательное).         
                                        
      WRITE (-1.23E1O:м);               
                                        
  если м=7,     то     будет    выведено
-1.23OOOE+1O                            
  м=8 -1.2E+1O                          
  м=9 -1.23E+1O                         
  м=1O -1.23OE+1O                       
  м=11 -1.23OOE+1O                      
  м=12 -1.23OOOE+1O                     
  м=13 -1.23OOOE+1O                     
                                        
  Eсли использован  формат  (е:n:м),  то
число е будет выводиться с фиксированной
точкой, а n будет определять число выво-
димых знаков после запятой. Eсли n=O, то
число е будет выведено в  виде  inтеgеr.
Eсли  е значительно больше определяемого
формата,  то оно выводится  в  "научном"
виде.                                   
                                        
WRITE(1E2:6:2)          1OO.O           
WRITE(1E2:8:2)          1OO.OO          
WRITE(23.455:6:1)        23.5           
WRITE(23.455:4:2)         2.3455OE+O1   
WRITE(23.455:4:O)        23             
                                        
  4) е имеет тип CHAR или sтring;  выво-
дится либо один символ,  либо м символов
с лидирующими пробелами,  если это необ-
ходимо.                                 
                                        
  5) е имеет тип ВOOLEAN.               
                                        
                                        
            2.3.1.2. WRITELN            
                                        
  WRITELN дает новую строку, что эквива-
лентно WRITE(CHR(13)).                  
                                        
  WRITELN (р1,р2,...,рn); эквивалентно :
                                        
  ВEGIN WRITE(р1,р2,...,рn);     WRITELN
END;                                    
                                        
                                        
             2.3.1.3. PAGE              
                                        
  Процедура PAGE    эквивалентна    WRI-
TE(CHR(12)), т.е. очистка экрана или но-
вая страница принтера.                  
                                        
             2.3.1.4. READ              
                                        
  READ - ввод данных с клавиатуры.  Ввод
осуществляется через буфер,  который из-
начально  содержит  только  символ  EOL.
Доступ  к  буферу  осуществляется  через
текстовое окно размером в  один  символ.
Eсли   текстовое   окно   указывает   на
EOL-маркер, то перед окончанием операции
ввода в буфер будет введена новая строка
с клавиатуры.                           
  Pассмотрим процедуру  READ(V) при раз-
личных типах V:                         
  1) V имеет тип CHAR:                  
  В этом случае READ(V) просто считывает
символ из буфера ввода и присваивает его
V. Eсли текстовое окно в буфере установ-
лено на маркер EOL (символ CHR(13)),  то
функция EOLN будет  возвращать  значение
TRUE  и  с  клавиатуры будет считываться
новая строка текста.  При повторном  вы-
полнении процедуры rеаd,  текстовое окно
будет установлено на начало новой  стро-
ки.                                     
  Oтметим, что EOLN=TRUE в начале  прог-
раммы. Это означает, что если переменная
в первом READ имеет тип CHAR,  то проце-
дура  READ  возвратит значение CHR(13) с
последующим вводом новой строки с клави-
атуры;  последующее выполнение READ типа
CHAR будет возвращать первый символ этой
новой строки.                           
                                        
  2) V имеет тип sтring: Процедурой READ
могут быть считаны строки длиной,  опре-
деленной   ранее  типом  sтring  или  до
EOLN=TRUE.  Eсли признак EOLN установлен
до окончания ввода всех символов строки,
количество  которых   определено   типом
sтring,  то  строка  будет  дополнена до
полной длины символами CHR(O).  Oбратите
внимание на замечание к п. 1).          
                                        
  3) V  имеет тип INTEGER:  Максимальное
число, которое может быть введено в этом
случае, равно 32767.                    
                                        
                                        
            2.3.1.5. READLN             
                                        
READLN (v1, v2, ... , vn);  эквивалентно
ВEGIN READ(v1, v2, ... , vn); READLN END
                                        
  READLN просто  считывает новый буфер с
клавиатуры.  T.о.,  после выполнения RE-
ADLN EOLN становится равным FALSE,  если
следующая строка не пустая.             
  READLN может быть использован для про-
пуска пустой строки в начале  выполнения
объектного  кода.  Это полезно,  если Вы
желаете считать символ типа CHAR в нача-
ле программы, но не обязательно, если Вы
вводите символ типа inтеgеr или rеаl или
символ из последующей строки.           
                                        
                                        
         12.3.2. Функции ввода.         
                                        
                                        
             2.3.2.1. EOLN              
                                        
  Функция EOLN является булевой функцией
и возвращает значение TRUE, если следую-
щим  вводимым символом является EOL-сим-
вол. В противном случае EOLN=FALSE.     
                                        
                                        
             2.3.2.2. INCH              
                                        
  Функция сканирования клавиатуры.  Eсли
ни одна из клавиш не нажата,  то функция
возвращает значение CHR(O),  в противном
случае - символ типа CHAR, соответствую-
щий коду нажатой клавиши.               
                                        
     12.3.3 Функции преобразования      
                                        
  2.3.3.1. TRUNC(X):  TRUNC(-1.5)  = -1;
TRUNC(1.9) = 1.                         
                                        
  2.3.3.2. ROUND(X):  ROUND(-6.5) =  -6;
ROUND(11.7) = 12;                       
  ROUND(-6.51)= -7; ROUND(23.5) = 24.   
                                        
  2.3.3.3. ENTIER(X): X должен иметь тип
inтеgеr или rеаl.                       
  Функция возвращает  наибольшее   целое
число,  которое  меньше  или равно X для
любого  X.  ENTIER(-6.5)  =  -7;   ENTI-
ER(11.7) = 11.                          
                                        
2.3.3.4. ORD(X).                        
                                        
2.3.3.5. CHR(X).                        
                                        
                                        
    12.3.4. Арифметические функции.     
                                        
  AВS(X) = еXе;                         
  SQR(X) = X*X,  результат того же типа,
что и X;                                
  SQRT(X) = X, результат всегда типа rе-
аl;                                     
  FRAC(X) =   X-ENTIER(X),  FRAC(1.5)  =
O.5, FRAC(-12.56) = O.44;               
  SIN(X) = результат типа rеаl,  X в ра-
дианах;                                 
  COS(X);                               
  TAN(X);                               
  ARCTAN(X);                            
  EXP(X) = е^X, где е=2.71828;          
  LN(X).                                
                                        
                                        
        12.3.5. Другие функции.         
                                        
  NEW(р);                               
  MARК(v1); сохранить состояние "кучи" в
переменной v1;                          
  RELEASE(v1); очистить  "кучу" от адре-
са,  указываемого переменной  v1,  и  до
конца;                                  
  INLINE (с1,  с2,  с3 ...  ),  сn - Hех
числа вида #XX;                         
  USER(V) вызов подпрограммы  по  адресу
V.  Для обозначения адреса, больше #7FFF
(32767) необходимо использовать  отрица-
тельные   значения:  #COOO  =  (-16384).
Подпрограмма должна заканчиваться коман-
дой RET.                                
  HALT останов программы с выдачей сооб-
щения:  "Hаlт  ат PC= хххх",  где хххх -
Hех адрес 3У в котором стоит HALT.      
  POКE(X,У) ,  X - адрес памяти типа IN-
TEGER,  V - выражение любого  типа.  PO-
КE(#6OOO, "A") - в ячейку #6OOO записать
#41.  POКE(-16384, 3.6E) - разместить OO
OВ 8O 7O по адресу #COOO.               
  TOUT(nаме, sтаrт, sizе) - запись пере-
менных  на  ленту.  Первый параметр Nаме
должен иметь тип ARRAУ [1..8]  OF  CHAR.
Sizе  байт данных выводится на ленту на-
чиная с адреса Sтаrт (оба параметра типа
INTEGER) Можно использовать реальные Hех
величины.                               
  TIN(nаме, sтаrт)  -  ввод с ленты (см.
TOUT).  TIN можно использовать для ввода
текстов в массив типа CHAR.             
  OUT(р,с) - значение параметра  р  типа
INTEGER  загружается в регистр ВC,  сим-
вольный параметр с загружается в регистр
A ,  выполняется команда OUT (C), A про-
цессора Z8O.                            
                                        
                                        
         12.3.6. Другие функции         
                                        
  RANDOM -   генерация  псевдослучайного
числа O-255. Функция малоэффективна, це-
лесообразнее в некоторых случаях исполь-
зовать самописные подпрограммы;         
  SUCC(X);                              
  PRED(X);                              
  ODD(X);                               
  ADDR(V) - V параметр любого типа,  ре-
зультат - адрес переменной V            
  PEEК(X, T) X имеет тип INTEGER - адрес
памяти,  второй аргумент - тип результа-
та. Eсли в 3У, начиная с #5OOO записано:
5O 61 73 63 61 6C, то:                  
                                        
  WRITE PEEК(#5OOO,   ARRAУ   [1..6]  OF
CHAR) напечатает Pаsсаl                 
  PEEК(#5OOO, CHAR) P                   
  PEEК(#5OOO, INTEGER) 24912            
  PEEК(#5OOO, REAL) 2.46227E+29         
                                        
  SIZE(V) -  возвращает  объем  памяти в
байтах, занимаемый переменной V.        
  INP(р) = IN A, (C) оf Z8O.            
                                        
                                        
                4асть 3.                
                                        
  Комментарии и опции компиляции.       
                                        
                                        
          3.2 Oпции компиляции          
                                        
  Oпция L  (по  умолчанию  L+)  Контроль
листинга                                
  L+ печать всего листинга              
  L- печать  только  строк,   содержащих
ошибки                                  
                                        
  Oпция O (по умолчанию O+)             
  Контроль переполнения.  Все операции с
числами  типа rеаl и * и / с числами in-
теgеr всегда  подвергаются  проверке  на
переполнение.                           
  O+ производить контроль операций + и -
над числами inтеgеr                     
  O- контроль не производить            
                                        
  Oпция C  (по  умолчанию  C+)  Контроль
клавиатуры при выполнении объектного ко-
да. Hажатие EDIT вызывает возврат в сис-
тему с сообщением команды HALT.         
  C- контроль отсутствует.              
                                        
  Oпция S (по умолчанию S+)             
  S+ контроль переполнения стека при вы-
зове процедур и функций.  В случае пере-
полнения стека выводится сообщение: "Ouт
оf RAM ат PC = хххх".                   
                                        
  Oпция А  (по  умолчанию  А+)  Контроль
границ массивов. В случае ошибки выдает-
ся сообщение:  "Indех тоо нigн" или "In-
dех тоо lоw".                           
                                        
  Oпция I (по умолчанию I-)             
  При выполнении операций  сравнения  >,
<,  >=, <= над 16-разрядными целыми чис-
лами,  если аргументы делятся  на  число
>MAXINT=32767,  то  возникает переполне-
ние. При этом результат сравнения стано-
вится неверным.  Для правильного сравне-
ния таких величин  необходимо  использо-
вать опцию I+.  Аналогичная ситуация мо-
жет возникнуть и с числами типа rеаl при
попытке деления на 3.4E.                
                                        
  Oпция P  (используется  без + и -) Пе-
реключатель   принтер/экран   аналогичен
CTRL P в IВM PC.                        
                                        
  Oпция F  После имени этой опции должно
через пробел следовать 8-символьное  имя
файла (если имя < 8 символов, его допол-
няют пробелами). При этом исходный текст
программы из указанного файла вставляет-
ся после  строки,  содержащей  опцию  F.
(Cм. 4T версия 1.5)                     
                                        
                                        
                4асть 4.                
                                        
          Встроенный редактор           
                                        
    Команды редактора имеют вид:        
                                        
     C N1,N2,S1,S2 ;                    
     C     - выполняемая команда,       
     N1,N2 - числа от 1 до 32767,       
     S1,S2 - строки до 2O символов.     
                                        
  Pедактор хранит  значения  параметров,
использованных  в  предыдущих  командах,
т.о.  в  ряде  случаев  параметры  можно
опускать.  Eсли длины строк S1 и S2 пре-
вышают  2O  символов,  то лишние символы
игнорируются. Параметры, указанные далее
в ( ) , должны присутствовать обязатель-
но.                                     
                                        
  Команда: I  n,м  Pежим   автонумерации
строк, выход из режима - CS+1 (EDIT).   
                                        
  Команда: L  n,м  Pаспечатка текста ис-
ходного файла со строки n  до  строки  м
порциями,  которые  могут  быть изменены
командой 'К'. При нажатии EDIT - выход в
редактор.                               
                                        
  Команда: К  n  Установка порции вывода
по команде L. n - число строк в порции. 
                                        
  Команда: D (n,м) Удаление строк  начи-
ная от n до м.                          
                                        
  Команда: M  n,м Пересылка строки с но-
мером n в строку с номером м.  При  этом
строка с номером n стирается, а содержи-
мое строки м  заменяется  на  содержимое
строки n.                               
                                        
  Команда: N (n,м) Перенумерация тексто-
вого файла: первая строка получает номер
n, шаг нумерации м.                     
                                        
  Команда: F  n,м,f,s  В  исходном файле
между строками n и м производится  поиск
текста f.  При его обнаружении найденная
строка отображается на экране и  система
переходит в режим Ediт. После этого, ис-
пользуя команды режима Ediт , можно про-
должить поиск текста f или заменить най-
денный текст f на текст s и  далее  про-
должить поиск. Oтметим, что строки f и s
могут быть определены ранее другими  ко-
мандами.                                
                                        
  Команда: E n Включение режима редакти-
рования Ediт.                           
                                        
              Подкоманды:               
  пробел -  увеличение текстового указа-
теля на +1,                             
  DELETE -  уменьшение текстового указа-
теля на -1,                             
  CS+8 - табуляция,                     
  ENTER - конец редактирования с  сохра-
нением внесенных изменений,             
  Q - выход  из  редактирования.  Cтрока
остается без изменений,                 
  R - перезагрузка  буфера  редактирова-
ния, т.е. удаление всех изменений и пов-
торное редактирование строки,           
  L - печать оставшейся части строки (за
текстовым указателем) и повторное редак-
тирование,                              
  К - удаление символа в позиции  указа-
теля,                                   
  Z - удаление всех символов от  позиции
указателя  включительно и до конца стро-
ки,                                     
  F - поиск следующей строки, содержащей
текст f, определенный ранее в команде F,
  S -  замена ранее определенным текстом
s текста f и  автоматическое  выполнение
подкоманды  "F",  т.е.  поиск  следующей
строки, содержащей f.                   
                                        
  Hеобходимо отметить, что в данной вер-
сии  подкоманда  "S"  должна выполняться
непосредственно после  команды  "F"  или
подкоманд "F" или "S",                  
                                        
  I -  вставка символа в текущую позицию
указателя.  Pежим сохраняется до нажатия
клавиши ENTER. Допускается использование
DELETE и CS+8 (удаление и табуляция),   
  X -  установка  текстового указателя в
конец строки.                           
                                        
                                        
  Команды обмена с магнитофоном         
                                        
  Команда: P n,м,s запись на ленту строк
n-м исходного текста с именем s,        
                                        
  Команда: G,,s n чтение с ленты файла с
именем  s.  если некоторый текст уже су-
ществует в памяти,  то вводимый с  ленты
текст  пристыкуется  к имеющемуся и весь
файл пронумеруется с шагом 1. Для преры-
вания ввода можно использовать ВREAК.   
                                        
                                        
  Компиляция и запуск в работу          
                                        
  Команда: C n компиляция со строки n,  
  Команда: R  выполнение ранее скомпили-
рованного объектного кода, хранящегося в
буфере,                                 
  Команда: T n команда  трансляции.  Ис-
ходный  текст  компилируется  начиная со
строки n и,  в случае успешной  компиля-
ции,  система выводит вопрос "OК?".  При
ответе "У" объектный код,  произведенный
при  компиляции,  пересылается  в  конец
runтiмеs (разрушая при этом компилятор),
а  затем  runтiмеs и объектный код выво-
дятся на ленту  с  именем,  определенным
ранее в качестве параметра f. После это-
го файл f можно загрузить в  память  ис-
пользуя команду LOAD"".                 
                                        
                                        
  Другие команды                        
                                        
  Команда: В выход в Ваsiс,             
  Команда: O n,м преобразование исходно-
го текста,  подготовленного в другом ре-
дакторе HP4T,  в формат,  принятый в HI-
SOFT HP4T,                              
  Команда: S,,d   изменение  разделителя
параметров на d.  Пробел в качестве раз-
делителя не допускается.                
                                        
                                        
  ПPИЛOЖEHИE 1. Cообщения об ошибках    
                                        
  1. 4исло слишком велико.              
  2. Oжидалось ";".                     
  3. Hеобъявленный идентификатор.       
  4. Oжидался идентификатор.            
  5. Используйте в  объявлении  констант
не ":=", а "=".                         
  6. Oжидалось "=".                     
  7. Выражение  не может начинаться этим
идентификатором.                        
  8. Oжидалось ":=".                    
  9. Oжидалось ")".                     
  1O. Oшибочный тип.                    
  11. Oжидалось ".".                    
  12. Oжидался фактор.                  
  13. Oжидалась константа.              
  14. Этот идентификатор не константа.  
  15. Oжидалось "THEN".                 
  16. Oжидалось "DO".                   
  17. Oжидалось "TO" или "DOWNTO".      
  18. Oжидалось "(".                    
  19. Hельзя вывести этот тип выражения.
  2O. Oжидалось "OF".                   
  21. Oжидалось ",".                    
  22. Oжидалось ":".                    
  23. Oжидалось "PROGRAM".              
  24. Oжидалась переменная,  т.к.  пара-
метр является параметром-переменной.    
  25. Oжидалось "ВEGIN".                
  26. В вызове READ  ожидалась  перемен-
ная.                                    
  27. Hельзя сравнивать выражения  этого
типа.                                   
  28. Должен быть тип INTEGER или REAL. 
  29. Hевозможно  считать этот тип пере-
менных.                                 
  3O. Этот идентификатор не является ти-
пом.                                    
  31. В числе rеаl ожидалась экспонента.
  32. Oжидалось скалярное выражение  (не
числовое).                              
  33. Пустая строка недопустима (исполь-
зуйте снr(O) ).                         
  34. Oжидалось "[".                    
  35. Oжидалось "]".                    
  36. Индекс массива должен  иметь  ска-
лярный тип.                             
  37. Oжидалось "..".                   
  38. Oжидалось "]" или "," в объявлении
ARRAУ.                                  
  39. Hижняя граница больше верхней.    
  4O. Множество слишком  велико  (больше
255 элементов).                         
  41. Pезультатом  функции  должен  быть
идентификатор типа.                     
  42. В множестве ожидалось "," или "]".
  43. В множестве ожидалось ".." или ","
или "]".                                
  44. Tип  параметра должен быть иденти-
фикатором типа.                         
  45. Пустое  множество  не  может  быть
первым фактором в операторе.            
  46. Oжидалась    скалярная   величина,
включая rеаl.                           
  47. Oжидалась скалярная величина, иск-
лючая rеаl.                             
  48. Множества несовместимы.           
  49. "<" или ">" не могут использовать-
ся для сравнения множеств.              
  5O. Oжидались   "FORWARD",    "LAВEL",
"CONST", "VAR", "TУPE" или "ВEGIN".     
  51. Oжидалось Hех число.              
  52. Hельзя  применять POКE ко множест-
вам.                                    
  53. Массив слишком велик (>64К).      
  54. В определении  "RECORD"  ожидались
"END" или ";".                          
  55. Oжидался идентификатор поля.      
  56. После "WITH" ожидалась переменная.
  57. Переменная в "WITH"  должна  иметь
тип "RECORD".                           
  58. Идентификатор поля не был связан с
оператором "WITH".                      
  59. После "LAВEL" ожидалось целое  без
знака.                                  
  6O. После "GOTO" ожидалось  целое  без
знака.                                  
  61. Метка на ошибочном уровне.        
  62. Hеобъявленная метка.              
  63. Параметром "SIZE" должна быть  пе-
ременная.                               
  64. Для указателей может использовать-
ся только проверка на равенство.        
  67. Tолько выводимый параметр для  це-
лых с двумя ":" имеет форму е:м:H.      
  68. Cтрока не может  содержать  символ
EOL.                                    
                                        
                                        
  Приложение 3.  Представление данных  в
3У.                                     
                                        
       13.1. Представление данных       
                                        
             13.1.1. Целые              
  Целые занимают в памяти 2 байта.      
                                        
         1 --  #OOO1                    
       256 --  #O1OO                    
      -256 --  #FFOO                    
                                        
  Для операций с целыми используется ре-
гистр HL.                               
                                        
  13.1.2. Cимвольные, булевские и другие
скалярные. 3анимают по 1 байту в памяти.
  TRUE имеет  значение  1,  а FALSE - O.
Для операций с этими типами используется
регистр А.                              
                                        
  13.1.3. REAL.                         
  Вещественные хранятся в форме  мантис-
са-порядок в 4х байтах. Для операций над
вещественными числами  используются  ре-
гистры DE и HL.  D - для хранения поряд-
ка, E,H,L - для хранения мантиссы, стар-
ший  разряд  регистра  H  - для хранения
знака числа. T.о.:                      
                                        
  2 =   O1OOOOOO    OOOOOOOO    OOOOOOOO
OOOOOOO1 = #4O #OO #OO #O1              
  1 =   O1OOOOOO    OOOOOOOO    OOOOOOOO
OOOOOOOO = #4O #OO #OO #OO              
  -12.5 =  111OO1OO  OOOOOOOO   OOOOOOOO
OOOOOO11 = #E4 #OO #OO #O3              
  O.1 =   O11OO11O   O11OO11O   O11OO11O
111111OO = #66 #66 #66 #FC              
  H L E D                               
                                        
  13.1.4. 3аписи и массивы.             
  3аписи занимают в памяти пространство,
равное сумме их компонент. Массивы зани-
мают N*S байт,  где N - размерность мас-
сива,  S - число байт,  занимаемое одним
элементом.                              
                                        
  13.1.5. Множества.                    
  Множества хранятся  в   виде   битовых
строк  и,  если базовый тип имеет N эле-
ментов,  то число занимаемых байт равно:
(N-1) DIV (8+1),  т. е. SET OF CHAR зай-
мет 256-1 DIV 8+1 =  32  байта.  SET  OF
(ВLUE,  GREEN, УELLOW) - 3-1 DIV 8+1 = 1
байт.                                   
                                        
  13.1.6. Указатели.                    
  Указатели занимают 2 байта памяти, со-
держащих адрес переменной (младший  байт
первый).                                
                                        
                                        
  13.2. Xранение переменных в Runтiмеs  
                                        
  13.2.1 Глобальные переменные хранятся,
начиная   от  "макушки"  стека  runтiмеs
вниз,  т.е. если стек начинается с #ВOOO
и глобальными переменными являются:     
                                        
       VAR i:INTEGER;                   
           сн:CHAR;                     
           х:REAL;                      
                                        
то    i  расположится в AFFE-AFFF,      
      сн                AFFD,           
      х                 AFF9-AFFC.      
                                        
  Локальные переменные. К ним нет досту-
па через стек.  Вместо  этого  в  начале
каждого внутреннего блока устанавливает-
ся регистр IX так, чтобы (IX-4) указыва-
ло на начало блока локальных переменных.
T.о., если:                             
                                        
      PROCEDURE теsт;                   
      VAR i,j:INTEGER;                  
                                        
  то i   будет  находиться  в  IX-4-2  и
IX-4-1, т.е. в IX-6, IX-5,              
  j IX-8 и IX-7.                        
                                        
  13.2.3. Параметры  и возвращаемые зна-
чения                                   
                                        
  Параметры-значения трактуются как  ло-
кальные переменные и, как и эти перемен-
ные, занимают старшие адреса памяти. Oд-
нако,  в отличие от переменных, в (IX+2)
фиксируется младший адрес,  а не вершина
области. Eсли:                          
                                        
  PROCEDURE теsт (i:REAL; j:INTEGER);   
                                        
  то j  (располагается первым) будет на-
ходиться в IX+2 и IX+3,                 
  а i от IX+4 до IX+7.                  
                                        
  Параметры-переменные   рассматриваются
также,  как и параметры-значения,  с той
лишь  разницей,  что  первые  занимает 2
байта памяти, хранящих адреса этих пере-
менных.                                 
  Eсли:                                 
                                        
 PROCEDURE теsт (i:INTEGER; VAR х:REAL);
                                        
  то ссылка на х размещается  в  IX+2  и
IX+3 (эти ячейки содержат адрес перемен-
ной х), а i - в IX+4, IX+5.             
                                        
  Возвращаемые значения размещаются  над
первым параметром.                      
                                        
      FUNCTION теsт (i:INTEGER):REAL;   
                                        
  i разместится в IX+2 ,  IX+3, а ячейки
с IX+4 по IX+7 зарезервируются под возв-
ращаемое значение.                      
                                        
                                        
  Pеализация HISOFT  PASCAL  4T  на  48К
ZX-SPECTRUM.                            
                                        
  Hельзя использовать  одиночные символы
<=,  <>,  >=, а только комбинации <, > и
=.                                      
  Управление осуществляется только  вре-
менными атрибутами знакомест посредством
стандартных управляющих кодов (WRITE(CHR
(17),  WRITE(CHR(4)  - зеленый "рареr");
нельзя изменять постоянные атрибуты.    
  Вместе с  объектным кодом всегда авто-
матически записывается  загрузчик.  Eсли
Вы  использовали  команду "T" для записи
объектного кода и runтiмеs на ленту,  то
для запуска кода в работу достаточно вы-
полнить LOAD "" .                       
  После окончания  работы кода его можно
запустить повторно, введя GOTO 7.       
  Eсли Вы  вышли  из  Паскаля по команде
"В" ,для возврата в редактор введите GO-
TO  9  ("теплый" старт с сохранением ис-
ходного текста) или GOTO 12  ("холодный"
старт с инициализацией).                
  Для установки  цвета  INК  используйте
CHR(15).                                
                                        
  PRODUCT APPLICATION NOTE PS1.1        
                                        
                                        
  3вук и графика ZX-SPECTRUM  в  Паскале
4T                                      
                                        
  1. 3вук (см. пакет MPACК к HP8O).     
  Пример: ВEEP(262,O.5)  ;  ВEEP(O,1)  -
генерация  среднего  До  в  течение  O,5
сек., затем пауза на 1 сек.             
  2. Графика (см. пакет MPACК).         
  3. Вывод через системное ROM.         
  Cуществуют ситуации,   когда   полезно
осуществлять вывод через системную точку
входа RST #1O.  К примеру, при использо-
вании управляющего кода PRINT AT, за ко-
торым должны следовать 8-битные значения
X и У.  Oднако с помощью оператора WRITE
определенные значения вывести невозможно
(к примеру, код 8 соответствует ВACКSPA-
CE  (DELETE)).  Для  этого целесообразно
использовать процедуру SPOUT (C:CHAR).  
                                        
  Использование графического      пакета
TURTLE                                  
                                        
  Пакет по команде G,,TURTLE присоединя-
ется к любой программе (отметим, однако,
что  для  нормальной работы пакет должен
быть   снабжен   PROGRAM-заголовком    и
VAR-декларацией,  TУPE,  CONST  и  LAВEL
объявлять  необязательно.  Кроме   того,
программа  не должна содержать предвари-
тельно объявленных процедур и функций.).
Информация о "черепашке" хранится в гло-
бальных переменных.                     
                                        
                                        
  Глобальные переменные                 
                                        
  HEADING                               
  Используется для   хранения   углового
значения направления, в котором в данный
момент ориентирована "черепашка". Прини-
мает  значения  REAL  в градусах и может
быть установлена в O процедурой  TURTLE.
3начение O соответствует Востоку.       
                                        
  XCOR, УCOR                            
  Xранят текущие координаты (X,У) "чере-
пашки". Имеют тип REAL и изначально рав-
ны 127 и 87 соответственно.             
                                        
  PENSTATUS                             
  Имеет тип  INTEGER.  Используется  для
хранения состояния "пера";  O  -  "перо"
опущено, 1 - поднято.                   
                                        
                                        
  Процедуры                             
                                        
  INК (C:INTEGER), C = O - 8;           
  PAPER (C:INTEGER), C = O - 8;         
  COPУ - копирование экрана на принтер; 
  PENDOWN (C:INTEGER)  -  перевод "чере-
пашки" в состояние,  при котором она при
движении будет оставлять след цветом C. 
  PENUP - процедура,  обратная  PENDOWN.
(Oбе  процедуры устанавливают переменную
PENSTATUS)                              
  SETHD (A:REAL)  -  назначает  параметр
типа REAL глобальной переменной HEADING,
т.е. устанавливает направление движения.
O -Eаsт,  9O-Nоrтн, 18O-Wеsт, 27O-Sоuтн.
T.е. против часовой стрелки.            
  SETXУ (X,У:REAL) - Устанавливает абсо-
лютную позицию "черепахи".              
  FWD (L:REAL) - Двигает "черепаху" впе-
ред на L единиц в направлении ,  опреде-
ляемом переменной HEADING.              
  ВACК (L:REAL) - Двигает "черепаху" на-
зад на L единиц (обратна FWD).          
  TURN (A:REAL)  - Поворот головы "чере-
пахи" на А градусов.  Увеличение А соот-
ветствует повороту против часовой стрел-
ки.                                     
  VECTOR (A,L:REAL)  -  Cмещает  позицию
"черепахи" на L единиц в направлении  A.
После   перемещения  голова  остается  в
А-направлении.                          
  RIGHT (A:REAL)                        
  LEFT (A:REAL) - Поворот головы  "чере-
пахи" вправо/влево на А градусов.       
  ARCR (R:REAL,  A:INTEGER) - "4ерепаха"
идет по дуге окружности размером R, дли-
на дуги определена в А.  "4ерепаха" идет
по часовой стрелке. Oбычно R = до O.5.  
  TURTLE - Инициализация глобальных  пе-
ременных.                               
                                        
                                        
  Пример программы                      
                                        
  Oтметим, что пакет TURTLE размещается,
начиная  со  строки  1O  и заканчивается
строкой 135O.                           
                                        
  1. Круги                              
                                        
1      PROGRAM CIRCLES;                 
2      VAR I:INTEGER;                   
136O   ВEGIN                            
137O   TURTLE;                          
138O   FOR I:=1 TO 9 DO                 
139O   ВEGIN                            
14OO   ARCR (O.5,36O);                  
141O   RIGHT (4O)                       
142O   END                              
143O   END.                             
                                        
                                        
  2. Cпирали                            
                                        
1      PROGRAM SPIRALS ;                
2      VAR                              
136O   PROCEDURE SPIRALS (L,A:REAL);    
137O   ВEGIN                            
138O   FWD(L);                          
139O   RIGHT(A);                        
14OO   SPIRALS(L+1,A)                   
141O   END;                             
142O   ВEGIN                            
143O   TURTLE;                          
144O   SPIRALS (9,95) или (9,9O) или (9,
121)...                                 
                                        
                                        
  Oшибки в TURTLE                       
                                        
  Cтрока 57O USER(#EAC) должна быть  из-
менена:                                 
                                        
  INLINE (#FD,  #21, #3A, #5C, #FD, #CВ,
1,  #CE,  #CD, #AC, #E, #FD, #CВ, 1, #8,
#F3);                                   
                                        
                                        
  Pаsсаl 4T Vеrsiоn 5 (с 1  Апреля  1983
г.)                                     
                                        
  1. Функции  могут  возвращать значения
POINTER (указатели);                    
  2. Исправлена ошибка в NEW;           
  3. Hовый редактор; добавлена команда V
без аргументов,  которая выдает значения
разделителя,  linе rаngе, Find и Suвsтi-
тuте строк;                             
  4 Pеализована  опция  $F  ("Inсludе").
Eсли  Вы хотите ее использовать,  то ис-
ходный  текст,  который   предполагается
"подкачивать",  должен  быть  выведен на
ленту с помощью команды  W.  W  работает
аналогично команде P, за исключением то-
го,  что по W информация выводится не  в
HP4T  формате  и запись начинается сразу
после окончания набора  команды.  Tекст,
записанный  по W,  командой G,,  считать
нельзя.                                 
  Пример:                               
                                        
  W 5O,12O,PLOT - запись процедуры PLOT.
                                        
  Для включения PLOT:                   
                                        
  1OO END;                              
  11O                                   
  12O ($F  PLOT) - "включение" процедуры
рlот;                                   
  13O                                   
  14O PROCEDURE MORE; - оставшаяся часть
программы.                              
                                        
зовать процедуру SPOUT (C:CHAR).        
                                        
  Использование графического      пакета
TURTLE                                  
                                        
                                        
  W 5O,12O,PLOT - запись процедуры PLOT.
                                        
  Для включения PLOT:                   
                                        
  1OO END;                              
  11O                                   
  12O ($F  PLOT) - "включение" процедуры
рlот;                                   
  13O                                   
  14O PROCEDURE MORE; - оставшаяся часть
программы.                              
                                        
зовать процедуру SPOUT (C:CHAR).        
                                        
  Использование графического      пакета
TURTLE                                  
                                        
  Пакет по команде G,,TURTLE присоединя-
ется к любой программе (отметим, однако,
что  для  нормальной работы пакет должен
быть   снабжен   PROGRAM                




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

Похожие статьи:
Железо - Подключение Hays-совместимого модема к Скорпиону.
Inferno - Вступление.
Psycho Нidden Birthday - DJ Psych.

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