TURBO.COM - компилятор Turbo Pascal V3.02 фирмы Borland Орион ПРО, PRODOS

Пишем программы на Паскале на Орионе ПРО

Продаю платы и наборы микросхем, куплю микросхемы Платы и комплектующие на ПК Орион-128

Программы переключения цветовых режимов

Переключение кодировки символов

Управление шириной экрана

В стадии редактирования

Версии для Ориона Про и версия для Ориона 128 мало чем отличаются

"TURBO" РАБОТАЕТ ПОД УПРАВЛЕНИЕМ ОПЕРАЦИОННОЙ СИСТЕМЫ CP/M-80 (OSDOS V 3.60, V3.70) НА КОМПЬЮТЕРЕ "ORION-PRO" В РЕЖИМЕ "ORION-128" ИЛИ НА КОМПЬЮТЕРЕ "ORION-128" С ПРОЦЕССОРОМ Z80.

 Турбо Паскаль 3,02а для Орион ПРО z80 Турбо Паскаль 3,02а для Орион ПРО z80

Турбопаскаль для Орион ПРО

Турбо Паскаль 3,02а для Орион-128 z80 Турбо Паскаль 3,02а для Орион-128 z80

Турбопаскаль для Ориона-128

ПЕРВЫЙ ВОПРОС МЕНЮ НА КОТОРЫЙ НЕОБХОДИМО ОТВЕТИТЬ - ЗАГРУЖАТЬ ЛИ СООБЩЕНИЯ ОБ ОШИБКАХ КОМПИЛЯЦИИ ? (INCLUDE ERROR MESSAGES (Y/N)?). В СЛУЧАЕ ЕСЛИ ДА, НАДЛЕЖИТ ОТВЕТИТЬ - Y, НЕТ - N.

 

КРАТКОЕ СПРАВОЧНОЕ РУКОВОДСТВО ПО СИСТЕМЕ "TURBO-ПАСКАЛЬ"

Часть 1 - руководство пользователя

Часть 2 - руководство пользователя

Часть 3 - руководство пользователя

1. ИСПОЛЬЗОВАНИЕ

1.1. ФАЙЛЫ


- TURBO.COM - КОМПИЛЯТОР И РЕДАКТОР
- TURBO.OVR - ОВЕРЛЕЙ, НУЖЕН ТОЛЬКО ПРИ ВЫЗОВЕ *.COM
- TURBO.MSG - СООБЩЕНИЯ, МОГУТ ОТСУТСТВОВАТЬ
- TLIST.COM - ПРОГРАММА ПЕЧАТИ ПРОГРАММ И ТЕКСТОВ
- TINST.COM - ПРОГРАММА ИНСТАЛЛЯЦИИ
- TINST.DTA - ДАННЫЕ ИНСТАЛЛЯЦИИ
- TINST.MSG - СООБЩЕНИЯ ПРОГРАММЫ ИНСТАЛЛЯЦИИ

1.2.ИНСТАЛЛЯЦИЯ

- ПЕРВОЕ МЕНЮ ЗАДАЕТ ТИП ИНСТАЛЛЯЦИИ:
S - (SCREEN) ИНСТАЛЛЯЦИЯ ТЕРМИНАЛА;
C - (COMMAND) ИНСТАЛЛЯЦИЯ КОМАНД РЕДАКТОРА;
Q - (QUIT) КОНЕЦ РАБОТЫ

- SCREEN: ВЫБИРАЕТСЯ ТЕРМИНАЛ;
- COMMAND: ВВОД В ВИДЕ ^S ИЛИ 27 (ДЕСЯТ.) ИЛИ $1B (ШЕСТН.);
ЗНАЧЕНИЯ ИЗ НЕСКОЛЬКИХ СИМВОЛОВ РАЗДЕЛЯЮТСЯ ПРОБЕЛАМИ;
- ЧАСТОТА МИКРОПРОЦЕССОРА - 6 МГЦ ДЛЯ "ORION-PRO".

1.3. КОМАНДЫ РЕДАКТОРА
----------------------

- CHAR LEFT - ^H - ДВИЖЕНИЕ КУРСОРА
- ALTERNATIVE - ^S
- CHAR RIGHT - ^D
- WORD LEFT - ^A
- WORD RIGHT - ^F
- LINE UP - ^E
- LINE DOWN - ^X
- PAGE UP - ^R
- PAGE DOWN - ^C
- TO TOP OF FILE - ^Q^R
- TO END OF FILE - ^Q^C
- TO BEGIN OF LINE - ^Q^S
- TO END OF LINE - ^Q^D
- TO BEGINING OF BLOCK - ^Q^B
- TO END OF BLOCK - ^Q^K
- TO LAST CURSOR POS - ^Q^P
- INSERT MODE ON/OFF - ^V - INSERT/OVERWRITE
- INSERT LINE - ^N
- DELETE LINE - ^Y
- DELETE TO END OF LINE - ^Q^Y
- DELETE WORD RIGHT - ^T
- DELETE CHAR UNDER CURSOR - ^G
- DELETE CHAR LEFT - <DEL>
- ALTERNATIVE - НИЧЕГО
- BEGIN BLOCK - ^QB - BLOCK COMMANDS
- END BLOCK - ^QK
- MARK SINGLE WORD - ^QT
- COPY BLOCK - ^QC
- MOVE BLOCK - ^QV
- DELETE BLOCK - ^QY
- READ BLOCK FROM DISK - ^QR
- WRITE BLOCK TO DISK - ^QW
- END EDIT - ^K^D
- TAB - ^I
- AUTO TAB ON/OFF - ^Q^I
- RESTORE LINE - ^Q^L
- FIND - ^Q^F
- FIND & REPLACE - ^Q^A
- REPEAT LAST FIND - ^L
- CONTROL CHAR PREFIX - ^P

1.4. КОМАНДЫ ОСНОВНОГО МЕНЮ КОМПИЛЯТОРА/РЕДАКТОРА
-------------------------------------------------

КОД НАЗНАЧЕНИЕ

L (CHANGE LOGGED DRIVE) СМЕНА ТЕКУЩЕГО ДИСКОВОДА
W (WORK FILE SELECTION) ВЫБОР РАБОЧЕГО ФАЙЛА
M (MAIN FILE SELECTION) ВЫБОР ГЛАВНОЙ ПРОГРАММЫ (ДЛЯ INCLUDE)
E (EDIT) РЕДАКТИРОВАНИЕ
C (COMPILE) КОМПИЛЯЦИЯ
R (RUN) ВЫПОЛНЕНИЕ (МОЖЕТ ВЫЗЫВАТЬ КОМПИЛЯЦИЮ)
S (SAVE) ЗАПИСЬ ОБРАБАТЫВАЕМОГО ФАЙЛА НА ДИСК
X (EXECUTE) ВЫПОЛНЕНИЕ ПРОИЗВОЛЬНОЙ ПРОГРАММЫ С ДИСКА
D (DIRECTORY) ВЫВОД КАТАЛОГА ДИСКА
Q (QUIT) КОНЕЦ РАБОТЫ
O (COMPILE OPTIONS) ВЫБОР ОПЦИЙ КОМПИЛЯЦИИ

1.5. ОПЦИИ КОМПИЛЯТОРА
----------------------

M - MEMORY !
C - COM FILE ! ВСЕ ЭТО - КУДА ИДЕТ СКОМПИЛИРОВАННЫЙ ФАЙЛ.
H - CHAIN FILE !


1.6. КЛЮЧИ ДЛЯ ПОИСКА И ЗАМЕНЫ
------------------------------

FIND (^Q^F): ЗАДАЕТСЯ СТРОКА ПОИСКА (ДО 30 ЛИТЕР) И КРИТЕРИИ ПОИСКА: B - BACK, G - GLOBAL, <N> -ЧИСЛО ВХОЖДЕНИЙ, U - IG- NORE UPPER/LOWER, W - WORDS ONLY.

2. БАЗИСНЫЕ ЭЛЕМЕНТЫ ЯЗЫКА
--------------------------

2.1 АЛФАВИТ
-----------

- БУКВЫ: A-Z, A-Z (LOWER CASE)
- ЦИФРЫ: 0-9
- СПЕЦИАЛЬНЫЕ СИМВОЛЫ: +,-,*,/,=,<,>,(,),ЗАПЯТАЯ,.,:,',#,$
- ЗАМЕНЯЮЩИЕ СИМВОЛЫ: (. И .) ВМЕСТО [ И ], (* И *) ВМЕСТО ФИГУРНЫХ СКОБОК

2.2. БАЗИСНЫЕ СИМВОЛЫ ИМЕН
--------------------------

A-Z, A-Z (LOWER CASE), _ (ПОДЧЕРКИВАНИЕ)

2.3. СТАНДАРТНЫЕ ТИПЫ ДАННЫХ
----------------------------

НАЗВАНИЕ ДИАПАЗОН ДЛИНА В БАЙТАХ
--------------------------------------------------
INTEGER -32768..+32767 2
BYTE 0..255 1
REAL 1E-38..1E+38 6
BOOLEAN FALSE < TRUE 1
CHAR #0..#255 1
--------------------------------------------------

2.4.ЧИСЛА
---------

1 12345 11.12 2E-5 $A8C

2.5. УПРАВЛЯЮЩИЕ СИМВОЛЫ
------------------------

#10 - ASCII, 10 DECIMAL (LF)
#$1B - ASCII 1B HEX (ESCAPE)
^G - ASCII ^G (BELL)

2.6. СТРОКИ
-----------

- ОБЬЯВЛЕНИЕ: FILENAME = STRING[14];
- ДЛИНА: 1-255
- ОПЕРАЦИИ: + (CONCAT), <, >, =, :=
- ПРОЦЕДУРЫ: DELETE(STR,POS,NUM) - УДАЛЕНИЕ ЧАСТИ СТРОКИ;
INSERT(OBJECT,STR,POS) - ВСТАВКА В СТРОКУ;
STR(VALUE,ST) - ПРЕОБРАЗУЕТ ЧИСЛО VALUE В СТРОКУ ST (ЕСЛИ X=2.5E4 TO STR(X:10:0,ST) ДАСТ ' 2500').
VAL(STR,VAR,CODE) -ПРЕОБРАЗУЕТ СТРОКУ STR В
ЧИСЛО VAR ЕСЛИ STR='123' TO VAL=123 , CODE=0;
- ФУНКЦИИ: COPY(STR,POS,NUM) - ВЫДЕЛЯЕТ ЧАСТЬ СТРОКИ;
CONCAT(STR1,STR2,[STRN]) - ОБ'ЕДИНЯЕТ СТРОКИ;
LENGTH(STR) - ДАЕТ ДЛИНУ СТРОКИ;
POS(OBJ,STR) - ПОЗИЦИЯ ПОДСТРОКИ;
- СИМВОЛ ЭТО СТРОКА ДЛИНОЙ 1;
- ЛИТЕРАЛЬНЫЕ СТРОКИ ЗАДАЮТСЯ В ВИДЕ '...'

2.7. СТРОКОВЫЕ КОНСТАНТЫ
------------------------

'ЭТО СТРОКОВАЯ КОНСТАНТА'
'СТРОКОВЫЕ КОНСТАНТЫ ЗАКЛЮЧАЮТСЯ В ОДИНАРНЫЕ КАВЫЧКИ'

2.8. ЗАРЕЗЕРВИРОВАННЫЕ СЛОВА
----------------------------

ABSOLUTE * EXTERNAL * NIL SHR *
AND FILE NOT STRING *
ARRAY FOR OF THEN

BEGIN FORWARD OR TO
CASE FUNCTION PACKED TYPE
CONST GOTO PROCEDURE UNTIL
DIV IF PROGRAM VAR
DO IN RECORD WHILE
DOWNTO INLINE * REPEAT WITH
ELSE LABEL SET XOR *
END MOD SHL *

* - РАСШИРЕНИЯ.

3.0. СТРУКТУРА ПРОГРАММЫ
------------------------

- ЗАГОЛОВОК: PROGRAM WRITER (INPUT, PRINTER)
- ОБЬЯВЛЕНИЯ: LABEL DECLARATION
CONSTANT DECLARATION
TYPE DECLARATION
VARIABLE DECLARATION
PROCEDURE DECLARATION
- ОПЕРАТОРНЫЙ БЛОК В ВИДЕ БЛОКА BEGIN - END.

3.1. ОБ'ЯВЛЕНИЯ МЕТОК
---------------------

LABEL 10, ERROR,ВЫХОД, 999 ;

3.2. OБ'ЯВЛЕНИЯ КОНСТАНТ
------------------------
CONST
LIMIT = 255;
MAX = 50;
ПАРОЛЬ='SESAM';
CURSHOME = ^L;

CONST
NUMBER:INTEGER = 1267;
INTEREST: REAL = 12.67;
SECT:STRING[7] = 'SECTION';
XON : CHAR = ^Q;

3.2.1. МАССИВЫ КОНСТАНТ
-----------------------

CONST
DIGIT: ARRAY[0..9] OF CHAR =
('0','1','2','3','4','5','6','7','8',9');

TYPE
CUBE = ARRAY[0..1,0..1,0..1] OF INTEGER;
CONST
MAZE : CUBE = (((0,1),(2,3)),((4,5),(6,7)));

3.3. ОБ'ЯВЛЕНИЯ ТИПОВ
---------------------

TYPE
НОМЕР = INTEGER;
ДЕНЬ = (ПН,ВТ,СР,ЧТ,ПТ,СБ,ВС);
LIST = ARRAY[1..10] OF REAL;
UPPER = 'A'..'Z';

- ПРЕОБРАЗОВАНИЕ ТИПОВ:
INTEGER(СБ) = 5

ДЕНЬ(3) = ВТ
UPPER(14) = 'O'
CHAR(78) = 'N'
INTEGER('7')= 55
- СКАЛЯРНЫЕ ФУНКЦИИ:
PRED(NUM) -ВОЗВРАЩАЕТ ПРЕДШЕСТВУЮЩЕЕ АРГУМЕНТУ ЗНАЧЕНИЕ
SUCC(NUM) -ВОЗВРАЩАЕТ СЛЕДУЮЩЕЕ ЗА АРГУМЕНТОМ ЗНАЧЕНИЕ

3.3.1. ДИНАМИЧЕСКИЕ ТИПЫ ДАННЫХ
--------------------------------

-ОБ'ЯВЛЕНИЯ ССЫЛОЧНОГО ТИПА
TYPE
УКАЗ_ДАН=^OBJEKT;
VAR
ГДЕ:УКАЗ_ДАН; (* В ПЕРЕМЕННОЙ ГДЕ НАХОДИТСЯ АДРЕС OBJEKT *)
........................
ГДЕ:=NIL; (* NIL -СПЕЦИАЛЬНЫЙ ПУСТОЙ УКАЗАТЕЛЬ *)
A:=ГДЕ^;

-ФУНКЦИИ ДЛЯ ДИНАМИЧЕСКОГО РАСПРЕДЕЛЕНИЯ ПАМЯТИ:
TYPE
P=^T;
...........
NEW(P) -РЕЗЕРВИРУЕТ ОБЛАСТЬ ПАМЯТИ ДЛЯ РАЗМЕЩЕНИЯ ОДНОГО ЭЛ-ТА ТИПА Т, А ЗНАЧЕНИЕМ Р СТАНОВИТСЯ АДРЕС ЭТОЙ ОБЛАСТИ.
DISPOSE(P) -ОСВОБОЖДАЕТ ОБЛАСТЬ ПАМЯТИ, АДРЕС КОТОРОЙ ОПРЕДЕЛЯЕТСЯ ЗНАЧЕНИЕМ УКАЗАТЕЛЯ Р.

3.4. ОБ'ЯВЛЕНИЯ ПЕРЕМЕННЫХ
--------------------------

VAR
RESULT,СУММА,РАЗНОСТЬ :REAL;
I,J,X,Y: INTEGER;
ПЕРИОД : ДЕНЬ;
BUFF : ARRAY[0..127] OF BYTE;

3.5. ОБ'ЯВЛЕНИЯ ПРОЦЕДУР
-------------------------

- ЗАГОЛОВОК: PROCEDURE ЗАГОЛОВОК(ПАРАМ1; ПАРАМ2);
PROCEDURE CLRSTR;
PROCEDURE SELEKT(MODEL1:ARRAY[1..500] OF INTEGER;SIMV:CHAR);
PROCEDURE EXMPLE(VAR NUM1,NUM2:NUMBER);
----------------
TYPE TXT:STRING[80];
PROCEDURE PRINT(STR1:TXT;VAR STR2:TXT); (*ПАРАМЕТР STR1 НЕ ИЗМЕНЯЕТСЯ, ПАРАМЕТР STR2 МОЖЕТ ИЗМЕНЯТЬСЯ ПРОЦЕДУРОЙ *)

- ОБ'ЯВЛЕНИЯ: LABEL DECLARATION (*ЛОКАЛЬНЫЕ МЕТКИ, *)
CONSTANT DECLARATION (*КОНСТАНТЫ ,ТИПЫ *)
TYPE DECLARATION (*И ПЕРЕМЕННЫЕ *)
VARIABLE DECLARATION
PROCEDURE DECLARATION (*ПРИ ВЛОЖЕННЫХ ПРОЦЕДУРАХ*)
- ТЕЛО ПРОЦЕДУРЫ В ВИДЕ БЛОКА BEGIN - END;

ПРИМЕР:
БЕЗТИПОВЫЕ ПЕРЕМЕННЫЕ ПАРАМЕТРЫ:
PROCEDURE SWITCH( SIZE:INTEGER;VAR A1P,A2P);

TYPE
A = ARRAY[1..MAXINT] OF BYTE;
VAR
A1:A ABSOLUTE A1P; (*МАССИВ [1..MAXINT] ПО АБСОЛЮТНОМУ АДРЕСУ*)
A2:A ABSOLUTE A2P; (*МАССИВ [1..MAXINT] ПО АБСОЛЮТНОМУ АДРЕСУ*)
TMP : BYTE;
COUNT:INTEGER;
BEGIN
FOR COUNT :=1 TO SIZE DO
BEGIN
TMP:=A1[COUNT];
A1[COUNT]:=A2[COUNT];
A2[COUNT]:=TMP;
END;
END;


3.5.1. НЕКОТОРЫЕ СТАНДАРТНЫЕ ПРОЦЕДУРЫ
---------------------------------------

- DELAY(TIME) - ОЖИДАНИЕ TIME МИЛЛИСЕКУНД
- CLREOL - ОЧИСТКА ДО КОНЦА СТРОКИ
- CLRSCR - ОЧИСТКА ЭКРАНА
- GOTOXY(X,Y) - ПРЯМОЕ ПОЗИЦИОНИРОВАНИЕ
- EXIT -ВЫХОД ИЗ ТЕКУЩЕГО БЛОКА BEGIN-END;
- HALT -КОНЕЦ РАБОТЫ ПРОГРАММЫ И ВЫХОД В CP/M.
- RANDOMIZE - НАЧАЛЬНОЕ ИЗМЕНЕНИЕ СЛУЧАЙНОГО ЧИСЛА
- MOVE(VAR1,VAR2,NUM:INTEGER)-КОПИРОВАНИЕ NUM БАЙТОВ ИЗ VAR1 B VAR2
- FILLCHAR(VAR,NUM:INTEGER,VALUE:BYTE)-ЗАПОЛНЕНИЕ ПАМЯТИ VALUE

3.6. ОБ'ЯВЛЕНИЯ ФУНКЦИЙ
------------------------

- ЗАГОЛОВОК: FUNCTION KEYHIT:BOOLEAN;
FUNCTION COMPUTE(VAR VALUE:SAMPLE):REAL;
FUNCTION POWER(X,Y:REAL): REAL;
- ОБ'ЯВЛЕНИЯ: LABEL DECLARATION (*ЛОКАЛЬНЫЕ МЕТКИ, *)
CONSTANT DECLARATION (*КОНСТАНТЫ ,ТИПЫ *)
TYPE DECLARATION (*И ПЕРЕМЕННЫЕ *)
VARIABLE DECLARATION
PROCEDURE DECLARATION (*ПРИ ВЛОЖЕННЫХ ПРОЦЕДУРАХ*)
- BEGIN
- ТЕЛО ФУНКЦИИ И ПОЛУЧЕНИЕ РЕЗУЛЬТАТА В ВИДЕ ИМЯ_ФУНКЦИИ:=.....;
- END;
ПРИМЕР:
FUNCTION ROWSUM(I,J:INTEGER):INTEGER;
FUNCTION SIMPLROWSUM(S:INTEGER):INTEGER;
BEGIN
SIMPLROWSUM:=S*(S+1) DIV 2;
END;
BEGIN
ROWSUM:= SIMPLROWSUM(J)-SIMPLROWSUM(I-1);
END;

3.6.1. НЕКОТОРЫЕ СТАНДАРТНЫЕ ФУНКЦИИ
-------------------------------------

- CHR(NUM:INTEGER):CHAR -ВОЗВРАЩАЕТ СИМВОЛ КОД КОТОРОГО NUM
- HI(I:INTEGER):INTEGER -ВОЗВРАЩАЕТ СТАРШИЙ БАЙТ ЧИСЛА В МЛАДШЕМ БАЙТЕ, СТАРШИЙ БАЙТ РЕЗУЛЬТАТА РАВЕН 0.

- KEYPRESSED:BOOLEAN -ВОЗВРАЩАЕТ TRUE ЕСЛИ БЫЛА НАЖАТА КЛАВИША НА КОНСОЛИ
- LO(I:INTEGER):INTEGER -ВОЗВРАЩАЕТ МЛАДШИЙ БАЙТ ЧИСЛА В МЛАДШЕМ БАЙТЕ, СТАРШИЙ БАЙТ РЕЗУЛЬТАТА РАВЕН 0.
- ODD(I:INTEGER):BOOLEAN-ВОЗВРАЩАЕТ TRUE ЕСЛИ I -ЧЕТНОЕ ЧИСЛО
- ORD(VAR):INTEGER -ВОЗВРАЩАЕТ НОМЕР АРГУМЕНТА В ПОСЛЕДОВАТЕЛЬНОСТИ
- RANDOM:REAL -ВОЗВРАЩАЕТ СЛУЧАЙНОЕ ЧИСЛО В ДИАПАЗОНЕ 0..1
- RANDOM(NUM:INTEGER):INTEGER -ВОЗВРАЩАЕТ СЛУЧАЙНОЕ ЧИСЛО В ДИАПАЗОНЕ 0..NUM
- ROUND(NUM:REAL):INTEGER -ОКРУГЛЯЕТ NUM ДО ЦЕЛОГО С УЧЕТОМ ЗНАКА
- PARAMCOUNT:INTEGER -ВОЗВРАЩАЕТ КОЛ-ВО ПАРАМЕТРОВ, ПЕРЕДАННЫХ ПРОГРАММЕ ПРИ ВЫЗОВЕ ИЗ CP/M
- PARAMSTR(N:INTEGER):STRING -ВОЗВРАЩАЕТ СТРОКУ N-ГО ПАРАМЕТРА
- SIZEOF(NAME):INTEGER -ВОЗВРАЩАЕТ КОЛ-ВО БАЙТОВ ЗАНЯТЫХ ПЕРЕМЕННОЙ NAME
- SWAP(NUM:INTEGER):INTEGER -ВОЗВРАЩАЕТ РЕЗУЛЬТАТ С ПЕРЕСТАВЛЕННЫМИ БАЙТАМИ
- TRUNC(R:REAL):INTEGER -ВОЗВРАЩАЕТ ЦЕЛУЮ ЧАСТЬ ЧИСЛА БЕЗ ОКРУГЛЕНИЯ
- UPCASE(CH:CHAR):CHAR -ВОЗВРАЩАЕТ СИМВОЛ НА ВЕРХНЕМ РЕГИСТОРЕ


3.7. ОВЕРЛЕЙНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
-----------------------------------
-OVRDRIVE(DRIVE:INTEGER) -ПРОЦЕДУРА УСТАНАВЛИВАЮЩАЯ ДИСК ДЛЯ ВЫЗОВА ОВЕРЛЕЙНЫХ ПРОЦЕДУР И ФУНКЦИЙ DRIVE = 0 -ТЕКУЩИЙ ДИСК
1 -ДИСК А
2 -ДИСК В
.........
ПРИМЕР:
PROGRAM OVRTEST;

OVERLAY PROCEDURE PROCA;
BEGIN
WRITELN('OVERLAY A');
END;

OVERLAY PROCEDURE PROCB;
BEGIN
WRITELN('OVERLAY B');
END;

PROCEDURE NUL;
BEGIN
(* ПРОЦЕДУРА, РАЗДЕЛЯЮЩАЯ ОВЕРЛЕИ НА 2-Е ГРУППЫ В РАЗНЫХ ФАЙЛАХ*)
 END;

OVERLAY PROCEDURE PROCC;
BEGIN
WRITELN('OVERLAY C');
END;

BEGIN
OVRDRIVE(2);
PROCA;
OVRDRIVE(0);
PROCC;
OVRWRITE(2);
PROCB;

END.

4.0. ОПЕРАТОРЫ
--------------

ОПЕРАТОР ПРИСВАИВАНИЯ :=
А:=В;

ОПЕРАТОРЫ СРАВНЕНИЯ =,<>,>,<,<=,>=
А=В РАВНО
А<>В НЕ РАВНО
А<=В МЕНЬШЕ ИЛИ РАВНО
А>=В БОЛЬШЕ ИЛИ РАВНО

.. (SUBRANGE) - УКАЗАТЕЛЬ ИНТЕРВАЛА ('A'..'Z')
- (UNARY MINUS)- ЗАМЕНА ЗНАКА НА ОБРАТНЫЙ
NOT - ОПЕРАТОР ОТРИЦАНИЯ ДЛЯ BOOLEAN, INTEGER
NOT TRUE = FALSE;
NOT 0 = -1;
NOT -15 = 14;

4.1. АРИФМЕТИЧЕСКИЕ ОПЕРАТОРЫ
------------------------------

* -УМНОЖЕНИЕ. ТИПЫ REAL,INTEGER.
/ -ДЕЛЕНИЕ. ТИПЫ REAL,INTEGER.
DIV - ДЕЛЕНИЕ НАЦЕЛО.ТИП INTEGER.
MOD - ОСТАТОК ОТ ДЕЛЕНИЯ НАЦЕЛО. ТИП INTEGER
AND - ЛОГИЧЕСКОЕ УМНОЖЕНИЕ (12 AND 22 = 4)
SHL - СДВИГ ВЛЕВО.ТИП INTEGER,BYTE (2 SHL 7 = 256)
SHR - СДВИГ ВПРАВО.ТИП INTEGER,BYTE (4 SHR 1 = 2)
+ -СЛОЖЕНИЕ. ТИПЫ REAL,INTEGER,BYTE
- -ВЫЧИТАНИЕ. ТИПЫ REAL,INTEGER,BYTE
OR -ЛОГИЧЕСКОЕ СЛОЖЕНИЕ (12 OR 22 = 30)
XOR -ИСКЛЮЧАЮЩЕЕ ИЛИ (12 XOR 22 = 26)

4.2. МАТЕМАТИЧЕСКИЕ ФУНКЦИИ
----------------------------

ABS(I:INTEGER):INTEGER; -ВОЗВРАЩАЕТ ЗНАЧЕНИЕ ПО МОДУЛЮ ЧИСЛА
ABS(R:REAL):REAL; - ------''--------
ARCTAN(R:REAL):REAL; -ВОЗВРАЩАЕТ АРКТАНГЕНС ЧИСЛА (В РАДИАНАХ)
COS(R:REAL):REAL; -ВОЗВРАЩАЕТ КОСИНУС ЧИСЛА (В РАДИАНАХ)
EXP(R:REAL):REAL; -ВОЗВОДИТ Е В СТЕПЕНЬ
FRAC(R:REAL):REAL; -ВОЗВРАЩАЕТ ДРОБНУЮ ЧАСТЬ ЧИСЛА ( N-INT(N) )
INT(R:REAL):REAL; -ВОЗВРАЩАЕТ ЦЕЛУЮ ЧАСТЬ ЧИСЛА
LN(R:REAL):REAL; -ВОЗВРАЩАЕТ НАТУРАЛЬНЫЙ ЛОГАРИФМ
SIN(R:REAL):REAL; -ВОЗВРАЩАЕТ СИНУС ЧИСЛА (В РАДИАНАХ)
SQR(I:INTEGER):INTEGER; -ВОЗВОДИТ ЧИСЛО В КВАДРАТ
SQR(R:REAL):REAL; - -------''------
SQRT(R:REAL):REAL; -ВОЗВРАЩАЕТ КВАДРАТНЫЙ КОРЕНЬ ЧИСЛА

4.3. ОПЕРАЦИИ НАД МНОЖЕСТВАМИ
-----------------------------

А*В -ПЕРЕСЕЧЕНИЕ МНОЖЕСТВ
А+В -ОБ'ЕДИНЕНИЕ МНОЖЕСТВ
А-В =РАЗНОСТЬ МНОЖЕСТВ
А IN В -ЧЛЕНСТВО ВО МНОЖЕСТВЕ.

5.0. УПРАВЛЯЮЩИЕ СТРУКТУРЫ
--------------------------

GOTO МЕТКА; (*ИНСТРУКЦИЯ ПЕРЕХОДА*)


IF УСЛОВИЕ (*ИНСТРУКЦИЯ ВЫБОРА*)
THEN
ОПЕРАТОР
ELSE
ОПЕРАТОР;

WHILE ВЫРАЖЕНИЕ DO ОПЕРАТОР ;(*ОПЕРАТОР ЦИКЛА*)
WHILE A<>0 DO A:=A-1;(*ПОКА A<>0 БУДЕТ ВЫПОЛНЯТЬСЯ ЦИКЛ*)

REPEAT ОПЕРАТОР; (*ОПЕРАТОР ЦИКЛА*)
ОПЕРАТОР;
.........
UNTIL УСЛОВИЕ;
REPEAT (* ЦИКЛ БУДЕТ ВЫПОЛНЯТЬСЯ *)
A:=A-1; (* ДО ТЕХ ПОР ПОКА А <> 0 *)
UNTIL A=0;

FOR A:=0 TO 9 DO ОПЕРАТОР; (*ОПЕРАТОР ЦИКЛА*)
FOR B:=9 TO 0 DOWNTO ОПЕРАТОР;

CASE ВЫРАЖЕНИЕ OF (*ОПЕРАТОР ВЫБОРА*)
1..9,21 :A:=A+1;
10..20 :B:=B+1;
..............
ELSE ОПЕРАТОР;
END;


6.0. МАССИВЫ
-------------
TYPE
ТАБЛИЦА = ARRAY[1..100] OF INTEGER;
ДЕНЬ= (ПН,ВТ,СР,ЧТ,ПТ,СБ,ВС);
VAR
РАБ_ДНИ : ARRAY[1..5] OF INTEGER;
НЕДЕЛЯ : ARREY[1..7] OF ДЕНЬ;
ДНИ_НЕД : ARREY[ДЕНЬ] OF INTEGER;
ШКОЛ_ФАМИЛ : ARREY[1..10,'A'..'Б',1..30] OF STRING[20];

6.1. ПРЕДОПРЕДЕЛЕННЫЕ МАССИВЫ
------------------------------

- MEM[$0..$FFFF] - ПАМЯТЬ, ТИПА BYTE MEM[10]:=3;
- PORT[0..255] - ПОРТЫ, ТИПА BYTE СИМВ:=PORT[NUM];

7.0. ЗАПИСИ
------------

TYPE
DATE = RECORD
DEY : 1..31;
MONTH: (JAN,FEB,MAR,APR,MAY,JUN,
JUL,AUG,SEP,NOV,OCT,DEC);
YEAR : 1900..1999;
END;
VAR
BIRTHDAY:DATE;
WORKDAY :ARRAY[1..5] OF DATE;
BEGIN

........
........
BIRTHDAY.MONTH:=JUL;
BIRTHDAY.YEAR:=1950;
WORKDAY[ТЕКУЩ_]:=WORKDAY[ТЕКУЩ_-1];
........
WITH BIRTHDAY DO
DEY:=25;
........
END.

7.1. ЗАПИСИ С ВАРИАНТАМИ
------------------------

TYPE
OBJEKT = (ДОМ, МАШИНА);
ПРОДАЖА = RECORD
ЦЕНА : INTEGER;
ВРЕМЯ : BYTE;
CASE 4TO:OBJEKT OF (*ВАРИАНТНАЯ ЧАСТЬ*)
ДОМ:(ПЛОЩАДЬ:INTEGER;
ГДЕ:STRING[20];
УЧАСТОК:BYTE);
МАШИНА:(ГОД_ВЫП:INTEGER;
ПРОБЕГ:INTEGER;
АВАРИИ:BYTE)
END;
VAR ИВАНОВ,ПЕТРОВ : ПРОДАЖА;
..................
ИВАНОВ.4ТО:=ДОМ;
IF ИВАНОВ.ПЛОЩАДЬ > 50 THEN ....
ПЕТРОВ.4ТО:=МАШИНА;
WITH ПЕТРОВ DO ПРОБЕГ:=10000;
..................

8.0. ФАЙЛЫ
-----------

- ОБ'ЯВЛЕНИЕ:
TYPE
PRODUCT = STRING[80];
VAR
PRODUCTFILE: FILE OF PRODUCT;
- ОПЕРАЦИИ:
ASSIGN(FILVAR,STR)- ПРИСВАИВАНИЕ ИМЕНИ ФАЙЛА ПЕРЕМЕННОЙ FILVAR
REWRITE(FILVAR) - СОЗДАНИЕ НОВОГО ФАЙЛА ДЛЯ ЗАПИСИ (СТАРЫЙ УНИЧТ.)
RESET(FILVAR) - ОТКРЫТИЕ СУЩЕСТВУЮЩЕГО ФАЙЛА ДЛЯ ЗАП/ЧТ
READ(FILVAR,VAR) - ЧТЕНИЕ ПЕРЕМЕННОЙ ИЗ ФАЙЛА
WRITE(FILVAR,VAR) - ЗАПИСЬ ПЕРЕМЕННОЙ В ФАЙЛ
SEEK(FILVAR,N) - УСТАНОВКА СЧЕТЧИКА ЗАПИСЕЙ (0..FILESIZE(FILVAR))
FLUSH(FILVAR)
CLOSE(FILVAR) - ЗАКРЫТИЕ ФАЙЛА
ERASE(FILVAR) - УДАЛЕНИЕ ФАЙЛА
RENAME(FILVAR,STR)- ПЕРЕИМЕНОВАНИЕ ФАЙЛА
- ФУНКЦИИ:
EOF(FILVAR):BOOLEAN - КОНЕЦ ФАЙЛА
FILEPOS(FILVAR):INTEGER -ДАЕТ ТЕКУЩИЙ НОМЕР ЗАПИСИ В ФАЙЛЕ
FILESIZE(FILVAR):INTEGER - ДАЕТ КОЛ-ВО ЗАПИСЕЙ В ФАЙЛЕ

ТЕКСТОВЫЕ ФАЙЛЫ: VAR FILVAR : TEXT;
READLN(FILVAR), ПРОПУСК ДО CR/LF
WRITELN(FILVAR), ЗАПИСЬ CR/LF
EOLN(FILFAR):BOOLEAN -ДАЕТ TRUE ЕСЛИ КОНЕЦ СТРОКИ ИЛИ ФАЙЛА.
SEEKEOLN(FILVAR) -ДАЕТ TRUE ,ИГНОРИРУЯ В КОНЦЕ СТРОКИ <SP>,<TAB>
SEEKEOF(FILVAR) -ДАЕТ TRUE ,ИГНОРИРУЯ В КОНЦЕ ФАЙЛА <SP>,<TAB>

БЕЗТИПОВЫЕ ФАЙЛЫ: VAR FILVAR : FILE;
BLOCKREAD(FILVAR,BUFFER,RECS) -ЧТЕНИЕ БЛОКА ИЗ ФАЙЛА
RECS - КОЛ-ВО 128-БАЙТНЫХ ЗАПИСЕЙ.
BLOCKWRITE(FILVAR,BUFFER,RECS) -ЗАПИСЬ БЛОКА В ФАЙЛ
FILEPOS,FILESIZE,SEEK - ОТРАБАТЫВАЮТ КАК СО 128-БАЙТНЫМИ ЗАПИСЯМИ.

СТАНДАРТНЫЕ ФАЙЛЫ:
INPUT - CON/TRM
OUTPUT - CON/TRM
CON - CON:
TRM - TRM:
KBD - KEYBOARD
LST - LST:
AUX - AUX:
USR - USR:
- ДИРЕКТИВА (*$В-*) МЕНЯЕТ СТАНДАРТНОЕ УСТРОЙСТВО ВВ/ВЫВ С CON HA TRM
ПРИМЕР:
(*$B-*)
PROGRAM READANDWRITE(INPUT,OUTPUT);
...............
READLN(VAR1); (*СИМВОЛ БУДЕТ ЧИТАТЬСЯ С ТRM: *)
READLN(CON,VAR2); (*СИМВОЛ БУДЕТ ЧИТАТЬСЯ С CON: *)


- ПЕРЕМЕННАЯ BUFLEN -ЗАДАЕТ ДЛИНУ БУФЕРА ДЛЯ 1-ГО ПРИЕМА С CON/TRM. 1..127.
- СОКРАЩЕНИЯ:

WRITE(CH) = WRITE(OUTPUT,CH)
READ(CH) = READ(INPUT,CH)
WRITELN = WRITELN(OUTPUT)
READLN = READLN(INPUT)
EOF = EOF(INPUT)
EOLN = EOLN(INPUT)

- ДИРЕКТИВА (*$I-*) ДАЕТ ВОЗМОЖНОСТЬ ПОЛЬЗОВАТЕЛЮ В ПРОГРАММЕ ДЕЛАТЬ АНАЛИЗ ОШИБОК ВВ/ВЫВ.
- IOREZULT -ПЕРЕМЕННАЯ В КОТОРОЙ ВОЗВРАЩАЕТСЯ КОД ОШИБКИ ПРИ ФАЙЛОВЫХ ОПЕРАЦИЯХ.
-КОДЫ ОШИБОК:
01 -ФАЙЛ НЕ ОТКРЫТ (Т.Е. НЕ БЫЛО ASSIGN ПЕРЕД REWRITE,RESET)
02 -ФАЙЛ НЕ ОТКРЫТ НА ВЫВОД (Т.Е. НЕ БЫЛО REWRITE ИЛИ RESET)
03 -ФАЙЛ НЕ ОТКРЫТ НА ВВОД
04 -ФАЙЛ НЕ ОТКРЫТ (ДЛЯ БЕЗТИПОВЫХ ФАЙЛОВ)
10 -ОШИБКА В НУМЕРАЦИИ ДЛИНЫ СТРОКИ (ДЛЯ ФАЙЛОВ ТИПА TEXT)
20 -ОШИБОЧНАЯ ОПЕРАЦИЯ С НЕФАЙЛОВЫМИ УСТРОЙСТВАМИ
21 -НЕПРАВИЛЬНЫЙ ВЫЗОВ CHAIN-ПРОГРАММЫ ПРИ КОМПИЛЯЦИИ В ПАМЯТЬ (КЛЮЧ М)
22 -НЕПРАВИЛЬНЫЙ ASSIGN ФАЙЛА
90 -НЕСООТВЕТСТВИЕ ТИПОВ И ДЛИНЫ ЗАПИСИ В ФАЙЛЕ
91 -УСТАНОВКА SEEK ЗА ПРЕДЕЛЫ ФАЙЛА
99 -ПОПЫТКА ЧТЕНИЯ ПОСЛЕ КОНЦА ФАЙЛА
F0 -ОШИБКА ЗАПИСИ НА ДИСК
F1 -НЕТ МЕСТА В КАТАЛОГЕ
F2 -КОЛ-ВО ЗАПИСЕЙ В ФАЙЛ ПРЕВЫШАЕТ 65535
F3 -СЛИШКОМ МНОГО ОТКРЫТЫХ ФАЙЛОВ
FF -БЫЛА СМЕНА ДИСКА ДО ЗАКРЫТИЯ РАБОЧИХ ФАЙЛОВ

9.0. INCLUDE - ПОДКЛЮЧЕНИЕ ФАЙЛА К ГОЛОВНОЙ ПРОГРАММЕ
-----------------------------------------------------

ФОРМАТ: (*$I <ИМЯ ФАЙЛА>*)

10. ДИРЕКТИВЫ КОМПИЛЯТОРА
-------------------------

(*$C+*) -РАЗРЕШАЕТ ПРЕРЫВАНИЕ ПРОГРАММЫ И ОТРАБОТКУ ^S ПРИ РАБОТЕ ФУНКЦИЙ READ И READLN.
(*$U-*) -ЗАПРЕЩАЕТ ВЫХОД ИЗ ПРОГРАММЫ ПО ^C
(*$А+*) -ЗАПРЕЩАЕТ РЕКУРСИЮ И КОМПИЛЯЦИЮ АБСOЛЮТНЫХ КОДОВ

11. ФУНКЦИИ CP/M
----------------

- ABSOLUTE -РАСПОЛОЖЕНИЕ ПЕРЕМЕННОЙ ПО АБСОЛЮТНОМУ АДРЕСУ:
VAR
IOBYTE: BYTE ABSOLUTE $0003;
CMDLINE: STRING[127] ABSOLUTE $80;
STR:STRING[32];
STRLEN:BYTE ABSOLUTE STR;

- ADDR(NAME):INTEGER - ВОЗВРАЩАЕТ АДРЕС ПЕРЕМЕННОЙ В ПАМЯТИ
- EXTERNAL -ОБ'ЯВЛЯЕТ ФИЗИЧЕСКИЕ АДРЕСА ДЛЯ ВНЕШНИХ ПРОЦЕДУР И ФУНКЦИЙ:
PROCEDURE DISKRESET; EXTERNAL $EC00;
FUNCTION IOSTATUS:BOOLEAN; EXTERNAL $D123;
PROCEDURE PLOT(X,Y:INTEGER);EXTERNAL $F003;
PROCEDURE QUICKSORT(VAR LIST:PARTNO); EXTERNAL $1C00;
- CHAIN(FILVAR) -ВЫЗЫВАЕТ И ПЕРЕДАЕТ УПРАВЛЕНИЕ СЛЕДУЮЩЕЙ ЧАСТИ ПРОГРАММЫ
ПРИМЕР:
PROGRAM MAIN;

VAR
TXT:STRING[80];
CHNPRG: FILE;
BEGIN
WRITE('ВВЕДИТЕ ЛЮБОЙ ТЕКСТ: '); READLN(TXT);
ASSIGN(CHNPRG,'MAIN1.CHR');
CHAIN(CHNPRG);
END.

PROGRAM MAIN1;
VAR
TXT: STRING[80];
NOOFUP,NOOFCHAR,I:INTEGER;
BEGIN
NOOFUP:=0;
NOOFCHAR:=LENGTH(TXT);
FOR I:=1 TO LENGTH(TXT) DO
IF TXT[I] IN ['A'..'Z'] THEN NOOFUP:=SUCC(NOOFUP);
WRITE('НЕТ СИМВОЛА В СТРОКЕ: ',NOOFCHAR);
WRITELN('НЕТ СИМВОЛА НА ВЕРХНЕМ РЕГИСТОРЕ ',NOOFUP,'.');
END.

-INLINE -ЗАПИСЬ ФРАГМЕНТА ПРОГРАММЫ В МАШИННЫХ КОДАХ:
PROCEDURE UPPCASE(VAR STRG:STR); (* STR ТИПА STRING[255] *)
BEGIN
INLINE ($2A/STRG/ (* LD HL,(STRG) *)
$46/ (* LD B,(HL) *)
$04/ (* INC B *)
$06/ (* L1: DEC B *)
$CA/*+20/ (* JP Z,L2 *)
$23/ (* INC HL *)
$7E/ (* LD A,(HL) *)
$FE/$61/ (* CP 'А' *)
$DA/*-9/ (* JP C,L1 *)
$FE/$7B/ (* CP 'З'+1 *)
$D2/*-14/ (* JP NC,L1 *)
$D6/$20/ (* SUB 20H *)
$77/ (* LD (HL),A *)
$C3/*-20); (* JP L1 *)
(* L2: EQU $ *)
END;

- ДОПОЛНИТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ CP/M

- BDOS(FUNC[,PARAM]), РЕЗУЛЬТАТ В A
- BDOSHL(FUNC[,PARAM]), РЕЗУЛЬТАТ В HL
- BIOS(FUNC[,PARAM])
- BIOSHL(FUNC[,PARAM])
HL(FUNC[,PARAM])
 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

ЧАСТЬ I

1. ВВЕДЕНИЕ

TURBO-PASCAL(С) ЯВЛЯЕТСЯ ЗАПАТЕНТОВАННЫМ ПРОГРАММНЫМ ПРОДУКТОМ ФИРМЫ "BORLAND INC", (США). ЭТО КОМПАКТНЫЙ И МОЩНЫЙ ПАСКАЛЬ-КОМПИЛЯТОР СО ВСТРОЕННЫМ ТЕКСТОВЫМ РЕДАКТОРОМ.

"TURBO" СОСТОИТ ИЗ СЛЕДУЮЩИХ НАБОРОВ ДАННЫХ (ФАЙЛОВ):

TURBO.COM - КОМПИЛЯТОР И РЕДАКТОР ТЕКСТОВ,
TURBO MSG.OVR - ТЕКСТЫ СООБЩЕНИЙ ОБ ОШИБКАХ,
ТURBO.OVR - ИСПОЛНИТЕЛЬ КОМАНДНЫХ ФАЙЛОВ ИЗ TURBO СРЕДЫ,
TLIST.COM - ПРОГРАММА ПЕЧАТИ ПРОГРАММНЫХ ТЕКСТОВ.

ЭТИ ЧЕТЫРЕ НАБОРА ДАННЫХ ВМЕСТЕ ЗАНИМАЮТ НА ДИСКЕТЕ 50 КИЛОБАЙТ.

"TURBO" СОДЕРЖИТ ПОЛНЫЙ СТАНДАРТНЫЙ ПАСКАЛЬ С НЕЗНАЧИТЕЛЬНЫМИ ОГРАНИЧЕНИЯМИ И МНОГОЧИСЛЕННЫМИ РАСШИРЕНИЯМИ.

"TURBO" РАБОТАЕТ ПОД УПРАВЛЕНИЕМ ОПЕРАЦИОННОЙ СИСТЕМЫ CP/M-80 (OSDOS V 3.60, V3.70) НА КОМПЬЮТЕРЕ "ORION-PRO" В РЕЖИМЕ "ORION-128" ИЛИ НА КОМПЬЮТЕРЕ "ORION-128" С ПРОЦЕССОРОМ Z80.

КРОМЕ ВСТРОЕННЫХ ФУНКЦИЙ СТАНДАРТНОГО ПАСКАЛЯ "TURBO" ДАЕТ ВОЗМОЖНОСТЬ ИСПОЛЬЗОВАНИЯ МАШИНН0-ОРИЕНТИРОВАННЫХ ОПЕРАЦИЙ. НАПРИМЕР, В КОМПИЛЯТОРЕ ИМЕЮТСЯ ВОЗМОЖНОСТИ ПРЯМОЙ НАСТРОЙКИ ПОРТОВ ВВОДА/ВЫВОДА ПРОЦЕССОРА, ИХ ОПРОСА. "TURBO" ТАКЖЕ ПОДДЕРЖИВАЕТ ПРЯМЫЕ ОПЕРАЦИИ С ОЗУ .

РАБОЧИЙ ПРОЦЕСС ПОЛУЧЕНИЯ ЗАГРУЗОЧНЫХ МОДУЛЕЙ ЗНАЧИТЕЛЬНО СОКРАЩЕН И УПРОЩЕН ПО СРАВНЕНИЮ СО СТАНДАРТНЫМ ПАСКАЛЕМ. КРОМЕ ТОГО КОМПИЛЯТОР РАСПОЗНАЕТ ОШИБКИ В ТЕКСТЕ ПРОГРАММЫ И АВТОМАТИЧЕСКИ ВОЗВРАЩАЕТ В РЕЖИМ РЕДАКТИРОВАНИЯ С УКАЗАНИЕМ КУРСОРОМ МЕСТА ОШИБКИ В ТЕКСТЕ ПРОГРАММЫ.

РЕДАКТОР СВЯЗEЙ У ТУРБО ОТСУТСТВУЕТ: В НЕМ ПРЯМО ИЗ КОМПИЛЯТОРА ВОЗНИКАЮТ МАШИННЫЕ КОДЫ, (Т.Е.НЕТ СТАДИИ АССЕМБЛИРОВАНИЯ ИЛИ ПОЛУЧЕНИЯ ИНОГО ПРОМЕЖУТОЧНОГО КОДА) В ТОМ СЛУЧАЕ КОГДА ИСХОДНЫЙ ТЕКСТ НЕ СОДЕРЖИТ СИНТАКСИЧЕСКИХ ОШИБОК.

ПОСЛЕ ЗАВЕРШЕНИЯ КОМПИЛЯЦИИ РАБОЧАЯ ПРОГРАММА МОЖЕТ ПРЯМО ЗАГРУЖАТЬСЯ В ОЗУ И ВЫПОЛНЯТЬСЯ(БЕЗ ФОРМИРОВАНИЯ СОМ. ФАЙЛА) ИЛИ В ПРОЦЕССЕ КОМПИЛЯЦИИ МОЖЕТ ФОРМИРОВАТЬСЯ ФАЙЛ В АБСОЛЮТНЫХ КОДАХ (СОМ-ФАЙЛ) НА ДИСКЕТЕ.

СКОРОСТЬ КОМПИЛЯЦИИ ДОСТИГАЕТ 1000 ЗНАКОВ В МИНУТУ (!!!).
ТОЧНОСТЬ ОПЕРАЦИЙ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ СОСТАВЛЯЕТ 11 РАЗРЯДОВ.

СКОРОСТЬ ОБРАБОТКИ У ТУРБО ПОЧТИ ТАКАЯ ЖЕ, КАК И У PASCAL-MT+, А ТОЧНОСТЬ ВЫШЕ.

2. РАБОТА С КOМПИЛЯТОРОМ
------------------------

КОМПИЛЯТОР ВЫЗЫВАЕТСЯ ИЗ ОПЕРАЦИОННОЙ СИСТЕМЫ НАБОРОМ НА КЛАВИАТУРЕ ИМЕНИ ГЛАВНОГО ФАЙЛА СИСТЕМЫ "TURBO".

ПОСЛЕ ЗАГРУЗКИ ПОЯВЛЯЕТСЯ СТАНДАРТНАЯ ЗАСТАВКА, ЗАПАТЕНТОВАННАЯ ФИРМОЙ:
---------------------------------------------------------------
TURBO PАSCAL SYSTEM VER.3.02A
CP/M-80,Z80
COPYRIGHT(C) 1983,84,85 BORLAND INC

TERMINAL: ORION-128


INCLUDE ERROR MESSAGES (Y/N) ?


ПЕРВЫЙ ВОПРОС МЕНЮ НА КОТОРЫЙ НЕОБХОДИМО ОТВЕТИТЬ - ЗАГРУЖАТЬ ЛИ СООБЩЕНИЯ ОБ ОШИБКАХ КОМПИЛЯЦИИ ? (INCLUDE ERROR MESSAGES (Y/N)?). В СЛУЧАЕ ЕСЛИ ДА, НАДЛЕЖИТ ОТВЕТИТЬ - Y, НЕТ - N.

КОМПИЛЯТОР АВТОМАТИЧЕСКИ ЗАГРУЗИТ СООБЩЕНИЯ ОБ ОШИБКАХ С ДИСКЕТЫ И БУДЕТ ИХ ВЫЗЫВАТЬ НА ЭКРАН ПРИ ОБНАРУЖЕНИИ СИНТАКСИЧЕСКИХ ОШИБОК В ИСХОДНОМ ТЕКСТЕ ПРОГРАММЫ. СЛЕДУЕТ ИМЕТЬ ВВИДУ, ЧТО ТЕКСТ СООБЩЕНИЙ ОБ ОШИБКАХ ЗАНИМАЕТ 1-3 КИЛОБАЙТ В ОЗУ И ПРИ НАПИСАНИИ БОЛЬШИХ ПРОГРАММ С ИХ КОМПИЛЯЦИЕЙ НЕПОСРЕДСТВЕННО В В ОЗУ МОЖЕТ ПРОИЗОЙТИ ПЕРЕПОЛНЕНИЕ КОМПИЛЯТОРА. В ЭТОМ СЛУЧАЕ НАДО ВЫЙТИ ИЗ СИСТЕМЫ TURBO С ПОМОЩЬЮ КОМАНДЫ Q(QUIT), ЗАТЕМ ПОВТОРНО ВОЙТИ В НЕЕ НАБОРОМ ИМЕНИ "TURBO", ПОСЛЕ ЧЕГО НЕ ЗАГРУЖАТЬ СООБЩЕНИЙ ОБ ОШИБКАХ, УВЕЛИЧИВ ТЕМ САМЫМ ОБ'ЕМ ДОСТУПНОЙ ПАМЯТИ.

ЕСЛИ В ТЕКСТЕ ПРОГРАММЫ ВО ВРЕМЯ КОМПИЛЯЦИИ ОБНАРУЖЕНА СИНТАКСИЧЕСКАЯ ОШИБКА, ПРОЦЕСС КОМПИЛЯЦИИ ПРЕРЫВАЕТСЯ С ВЫВОДОМ КОДА ОШИБКИ И ТЕКСТА СООБЩЕНИЯ ОБ ОШИБКИ (СООБЩЕНИЯ ОБ ОШИБКАХ ЗАГРУЖЕНЫ) ИЛИ С ВЫВОДОМ ТОЛЬКО КОДА ОШИБКИ(СООБЩЕНИЯ ОБ ОШИБКАХ НЕ ЗАГРУЖЕНЫ). ВОЗВРАТ В РЕЖИМ РЕДАКТИРОВАНИЯ ОСУЩЕСТВЛЯЕТСЯ ПОСЛЕ НАЖАТИЯ КЛАВИШИ <ЕSC>.

ИЗ ОСНОВНОГО МЕНЮ МОЖНО ВЫЗВАТЬ СЛЕДУЮЩИЕ ФУНКЦИИ:

1.[L]OGGED DRIVE - РАБОЧИЙ ДИСКОВОД-
2.[W]ORK FILE - РАБОЧИЙ ФАЙЛ-
3.[M]AIN FILE - ГЛАВНЫЙ ФАЙЛ-
4.[E]DIT - РЕДАКТИРОВАНИЕ-
5.[C]OMPILE - КОМПИЛЯЦИЯ-
6.[R]UN - ВЫПОЛНЕНИЕ-
7.[S]AVE - ЗАПИСЬ НА ДИСК-
8.Е[X]ECUTE - ВЫЗОВ КОМАНДНОГО ФАЙЛА-
9.[D]IR - ВЫВОД ОГЛАВЛЕНИЯ ДИСКА-
10.COMPILER [O]PTIONS - ВЫБОР РЕЖИМА КОМПИЛЯЦИИ-

2.1. ФУНКЦИИ ОСНОВНОГО МЕНЮ
----------------------------

ЗНАЧЕНИЕ ФУНКЦИЙ МЕНЮ ОПРЕДЕЛЯЕТСЯ КОМАНДОЙ. КОМАНДЫ ПРИВЕДЕНЫ В ТАБЛИЦЕ ФУНКЦИЙ В КВАДРАТНЫХ СКОБКАХ. НАПРИМЕР ,ВЫЗОВ РЕДАКТОРА - ВВОД СИМВОЛА Е (СМОТРИ [E]DIT). КОМАНДЫ МОЖНО ВВОДИТЬ БОЛЬШИМИ И МАЛЫМИ БУКВАМИ.

2.1.1 ФУНКЦИИЯ LOGGED DRIVE-РАБОЧИЙ ДИСКОВОД
---------------------------------------------

РАБОЧИЙ ДИСКОВОД УСТАНАВЛИВАЕТСЯ ПО КОМАНДЕ "L". ПОСЛЕ ПОДСКАЗКИ СИСТЕМЫ NEW DRIVE (НОВЫЙ ДИСКОВОД) НУЖНО ВВЕСТИ ЛОГИЧЕСКОЕ ИМЯ ДИСКОВОДА (А,B,C,D,E).

2.1.2 WORK FILE-РАБОЧИЙ ФАЙЛ
-----------------------------

ПО КОМАНДЕ "W" ПОСЛЕ ПОДСКАЗКИ TURBO "WORK FILE NAME?"
(ИМЯ РАБОЧЕГО ФАЙЛА?)
ВВОДИТСЯ ИМЯ НАБОРА ДАННЫХ (ФАЙЛА) НА ДИСКЕ С КОТОРЫМ ПРЕДПОЛАГАЕТСЯ РАБОТАТЬ.
ЕСЛИ ТЕКСТОВЫЙ РЕДАКТОР TURBO ИСПОЛЬЗУЕТСЯ ДЛЯ РЕДАКТИРОВАНИЯ НАБОРОВ ДАННЫХ, НАПИСАННЫХ НЕ НА ЯЗЫКЕ PASCAL, ТО ВМЕСТЕ С
ИМЕНЕМ ФАЙЛА ДОЛЖЕН БЫТЬ ВВЕДЕН И ТИП (НАПРИМЕР: EXAMPLE.TXT).
ЕСЛИ НУЖНЫЙ ФАЙЛ НАХОДИТСЯ НА ДРУГОМ ДИСКОВОДЕ, ТО ПЕРЕД ЕГО
ИМЕНЕМ СТАВИТСЯ ИМЯ ДИСКОВОДА С ПОСЛЕДУЮЩИМ ДВОЕТОЧИЕМ, НАПРИМЕР:
В:EXAMPLE.TXT.

ЕСЛИ РЕДАКТОР ИСПОЛЬЗУЕТСЯ ДЛЯ ВВОДА И РЕДАКТИРОВАНИЯ НАБОРОВ ДАННЫХ, НАПИСАННЫХ НА ЯЗЫКЕ PASCAL-TURBO, TO ЗАДАНИЕ ТИПА
ФАЙЛА ".PAS" НЕ ОБЯЗАТЕЛЬНО: СИСТЕМА САМА АВТОМАТИЧЕСКИ ДОБАВИТ
ЭТОТ АТРИБУТ К ИМЕНИ PASCAL-ФАЙЛА.

ЕСЛИ ПОСЛЕ ВВОДА ИМЕНИ РАБОЧЕГО ФАЙЛА СИСТЕМА НЕ НАЙДЕТ ЕГО В ОГЛАВЛЕНИИ ДИСКА, ТО ВЫДАЕТСЯ СООБЩЕНИЕ:" NEW FILE" (ФАЙЛ НОВЫЙ), ПОСЛЕ ЧЕГО ПО КОМАНДЕ [E]DIT (СМ.П 2.1.4) МОЖНО НАЧАТЬ ВВОД НОВОГО ФАЙЛА В РЕЖИМЕ ЭКРАННОГО РЕДАКТОРА.

2.1.3. MAIN FILE - ГЛАВНЫЙ ФАЙЛ
--------------------------------

ГЛАВНЫЙ ФАЙЛ-ЭТО ФАЙЛ НА ЯЗЫКЕ PASCAL,КОТОРЫЙ МОЖЕТ ВКЛЮЧАТЬ В СЕБЯ НЕСКОЛЬКО РАБОЧИХ ФАЙЛОВ, ОБ'ЕДИНЕННЫХ С ПОМОЩЬЮ
INCLUDE-ФУНКЦИЙ. (СМ.2.1.4.5)
ПРИ ВЫПОЛНЕНИИ КОМПИЛЯЦИИ, ЕСЛИ УСТАНОВЛЕН ГЛАВНЫЙ ФАЙЛ, ТО ВСЕГДА НАЧИНАЕТСЯ ОБРАБОТКА ГЛАВНОГО ФАЙЛА В НЕ ЗАВИСИМОСТИ ОТ ТОГО, КАКОЙ РАБОЧИЙ ФАЙЛ ЗАГРУЖЕН. ЕСЛИ ГЛАВНЫЙ ФАЙЛ НЕ УСТАНОВЛЕН, ТО ПО КОМАНДЕ "С"-КОМПИЛИРОВАТЬ ИЛИ "R" -ВЫПОЛНИТЬ ПРОИЗВОДИТСЯ ОБРАБОТКА РАБОЧЕГО ФАЙЛА.
ЕСЛИ КОМПИЛЯЦИЯ ПРОИСХОДИТ В СОМ-FILE, ТО ИЗ ГЛАВНОГО (ИЛИ РАБОЧЕГО ФАЙЛА, ЕСЛИ ГЛАВНЫЙ НЕ УСТАНОВЛЕН) АВТОМАТИЧЕСКИ ПОЛУЧАЕТСЯ ФАЙЛ В АБСОЛЮТНЫХ КОДАХ МАШИНЫ С ИМЕНЕМ ГЛАВНОГО (РАБОЧЕГО) ФАЙЛА. ТИП ЭТОГО ФАЙЛА -".COM" ДАЕТСЯ СИСТЕМОЙ AВТОМАТИЧЕСКИ. НАПРИМЕР, ЕСЛИ ВЫ КОМПИЛИРУЕТЕ ГЛАВНЫЙ ФАЙЛ С ИМЕНЕМ "EXAMPLE.PAS" , TO НА ДИСКЕ В РЕЗУЛЬТАТЕ РАБОТЫ КОМПИЛЯТОРА СОЗДАСТСЯ ФАЙЛ С ИМЕНЕМ "EXAMPLE.COM".

2.1.4. EDIT - РЕДАКТИРОВАНИЕ
----------------------------

ВСТРОЕННЫЙ В СИСТЕМУ TURBO УДОБНЫЙ ЭКРАННЫЙ РЕДАКТОР ВЫЗЫВАЕТСЯ КОМАНДОЙ "Е" ИЗ ОСНОВНОГО МЕНЮ.
ЕСЛИ ПЕРЕД ВЫЗОВОМ РЕДАКТОРА РАБОЧИЙ ФАЙЛ НЕ БЫЛ УСТАНОВЛЕН ПО КОМАНДЕ "W" (СМ.П.2.1.2),ТО СИСТЕМА УВЕДОМИТ ВАС ОБ ЭТОМ ВЫВОДОМ НА ДИСПЛЕЙ СООБЩЕНИЯ: "WORK FILE NAME?" (ИМЯ РАБОЧЕГО ФАЙЛА?), ПОСЛЕ ЧЕГО НУЖНО ВВЕСТИ ИМЯ РАБОЧЕГО ФАЙЛА В МЕСТО, ТРЕБУЕМОЕ ПОДСКАЗКОЙ НА ЭКРАНЕ ДИСПЛЕЯ.
ЕСЛИ РАБОЧИЙ ФАЙЛ УЖЕ БЫЛ УСТАНОВЛЕН, ТО ПРОИСХОДИТ ПЕРЕХОД В РЕЖИМ ЭКРАННОГО РЕДАКТИРОВАНИЯ.
ЕСЛИ ЗАДАННЫЙ РАБОЧИЙ ФАЙЛ ОТСУТСТВУЕТ В ОГЛАВЛЕНИИ ДИСКА, ТО ВЫВОДИТСЯ СООБЩЕНИЕ "NEW FILE " (НОВЫЙ ФАЙЛ), ПОСЛЕ ЧЕГО ВОЗМОЖЕН ПЕРЕХОД К ВВОДУ ДАННЫХ В РЕЖИМЕ ЭКРАННОГО РЕДАКТОРА.
ПОДТВЕРЖДЕНИЕМ СОГЛАСИЯ НА ВХОД В РЕДАКТОР В ЭТОМ СЛУЧАЕ СЛУЖИТ ПЕРЕВОД СТРОКИ <ВК>.
В РЕЖИМЕ РЕДАКТОРА ВОЗМОЖЕН ВВОД С КЛАВИАТУРЫ ЛЮБЫХ СИМВОЛОВ ВТО МЕСТО, НА КОТОРОМ СТОИТ КУРСОР. УПРАВЛЕНИЕ КУРСОРОМ ОСУЩЕСТВЛЯЕТСЯ СПЕЦИАЛЬНЫМИ КЛАВИШАМИ :
--> КУРСОР ВПРАВО
<-- КУРСОР ВЛЕВО

I КУРСОР ВНИЗ
V

^
I КУРСОР ВВЕРХ

НА КЛАВИАТУРАХ РАЗЛИЧНЫХ МАШИН ИМЕЮТСЯ РАЗНЫЕ ФУНКЦИОНАЛЬНЫЕ КЛАВИШИ УПРАВЛЕНИЯ КУРСОРОМ, ПРЕДСТАВЛЯЮЩИЕ ПОЛЬЗОВАТЕЛЮ ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ.
МОЖНО ТАКЖЕ УПРАВЛЯТЬ КУРСОРОМ С ПОМОЩЬЮ НАЖАТИЯ КЛАВИШИ CNTRL(CONTROL) С ОДНОВРЕМЕННЫМ ИСПОЛЬЗОВАНИЕМ ДРУГИХ СИМВОЛЬНЫХ КЛАВИШ. РЕЧЬ ОБ ЭТОМ ПОЙДЕТ В СЛЕДУЮЩЕМ ПУНКТЕ. ДЛЯ ЧИТАТЕЛЕЙ, ЗНАКОМЫХ С РАБОТОЙ ТЕКСТОВОГО РЕДАКТОРА "WORDSTAR" СООБЩАЕМ, ЧТО КОМАНДЫ ТЕКСТОВОГО РЕДАКТОРА "TURBO" ПОЧТИ ТАКИЕ ЖЕ.

2.1.4.1 УПРАВЛЕНИЕ КУРСОРОМ
----------------------------

ДЛЯ УПРАВЛЕНИЯ КУРСОРОМ МОЖНО УПОТРЕБЛЯТЬ КОМАНДЫ, ВВОДИМЫЕ OДНОВРЕМЕННО С НАЖАТИЕМ КЛАВИШИ CTRL, КОД КОТОРОЙ МЫ УСЛОВНО БУДЕМ ОБОЗНАЧАТЬ ЗНАКОМ ^. НАПРИМЕР, НАЖАТИЕ CTRL ОДНОВРЕМЕННО С КЛАВИШЕЙ "C" В НАШИХ ОБОЗНАЧЕНИЯХ БУДЕТ ВЫГЛЯДЕТЬ, КАК ^C. ФУНКЦИИ УПРАВЛЕНИЯ КУРСОРОМ ПРИВОДЯТСЯ В ВИДЕ ТАБЛИЦЫ.

--------------------------------------------------------------
ФУНКЦИЯ КОМАНДА
--------------------------------------------------------------
КУРСОР ВЛЕВО НА ОДНО ЗНАКОМЕСТО ^H ИЛИ ^S
КУРСОР ВПРАВО _.._ ^D
КУРСОР ВВЕРХ НА ОДНУ СТРОКУ ^E
КУРСОР ВНИЗ _.._ ^X
КУРСОР ВЛЕВО НА ОДНО СЛОВО ^A
КУРСОР ВПРАВО _.._ ^F
ЭКРАН ВНИЗ НА ОДНУ СТРОКУ ^W
ЭКРАН ВВЕРХ _.._ ^Z
ЭКРАН ВНИЗ НА ОДНУ СТРАНИЦУ ^R
ЭКРАН ВВЕРХ _.._ ^C
КУРСОР НА ЛЕВЫЙ КРАЙ СТРОКИ ^QS
КУРСОР НА ПРАВЫЙ КРАЙ СТРОКИ ^QD
КУРСОР НА НАЧАЛО СТРАНИЦЫ ^QE
КУРСОР НА КОНЕЦ СТРАНИЦЫ ^QX
КУРСОР НА НАЧАЛО ДАННЫХ В ФАЙЛЕ ^QR
КУРСОР НА КОНЕЦ ДАННЫХ В ФАЙЛЕ ^QC
КУРСОР НА НАЧАЛО БЛОКА ^QB
КУРСОР НА КОНЕЦ БЛОКА ^QK
КУРСОР НАЗАД НА ОДНО ЗНАКОМЕСТО ^QP
-------------------------------------------------------------


2.1.4.2. ВСТАВКА И ИСКЛЮЧЕНИЕ СТРОК И СИМВОЛОВ
----------------------------------------------

-----------------------------------------------------------
ФУНКЦИЯ КОМАНДА
-----------------------------------------------------------
ВКЛЮЧЕНИЕ/ВЫКЛЮЧЕНИЕ РЕЖИМА ВСТАВКИ СИМВОЛА ^V
ВСТАВКА СТРОКИ ^N
ИСКЛЮЧЕНИЕ СТРОКИ ^Y
СТИРАНИЕ СИМВОЛОВ ДО КОНЦА СТРОКИ С ПОЗ.КУРСОРА ^QY
СЛОВО ВПРАВО ОТ ПОЗ.КУРСОРА СО СТИРОНИЕМ СИМВОЛОВ ^T
СТИРАНИЕ ЗНАКА В ПОЗИЦИИ КУРСОРА ^G
СТИРАНИЕ ЗНАКА В ПОЗИЦИИ КУРСОРА И ВЛЕВО DEL
НА ОДНО ЗНАКОМЕСТО
-----------------------------------------------------------

2.1.4.3. КОМАНДЫ РАБОТЫ С БЛОКАМИ ТЕКСТА
----------------------------------------

ПРЕДУПРЕЖДЕНИЕ! МЕТКИ НАЧАЛА И КОНЦА БЛОКОВ НЕ ТАКИЕ, КАКИЕ ПРИНЯТЫ В РЕДАКТОРЕ "WORDSTAR", ХОТЯ САМИ КОМАНДЫ РАБОТЫ С БЛОКАМИ ОДИНАКОВЫ. СПОСОБ МАРКИРОВКИ БЛОКОВ В "TURBO" НАСТРАИВАЕТСЯ К КАЖДОЙ КОНКРЕТНОЙ РЕАЛИЗАЦИИ СИСТЕМЫ.
КОМАНДЫ РАБОТЫ С БЛОКАМИ СВЕДЕНЫ В ТАБЛИЦУ.

--------------------------------------------------------
ФУНКЦИЯ КОМАНДА
--------------------------------------------------------
ОТМЕТКА НАЧАЛА БЛОКА ^KB
ОТМЕТКА КОНЦА БЛОКА ^KK
OTMETKA СЛОВА ^KT
УСТАНОВКА МЕТОК БЛОКА ВИДИМЫМИ/НЕВИДИМЫМИ ^KH
КОПИРОВАНИЕ БЛОКА ^KC
ПЕРЕДВИЖЕНИЕ БЛОКА ^КV
СТИРАНИЕ БЛОКА ^KY
ЧТЕНИЕ ДАННЫХ ИЛИ БЛОКА С ДИСКА ^КR
ЗАПИСЬ ДАННЫХ ИЛИ БЛОКА НА ДИСК ^KW
--------------------------------------------------------


2.1.4.4. ВСТРОЕННЫЕ ФУНКЦИИ РЕДАКТОРА
-------------------------------------

ВСТРОЕННЫЕ ФУНКЦИИ РЕДАКТОРА TURBO РАБОТАЮТ ТАКЖЕ, КАК И
РЕДАКТОРА "WORDSTAR".

----------------------------------------------------------
ФУНКЦИЯ КОМАНДА
----------------------------------------------------------
ВЫХОД ИЗ РЕДАКТОРА В ОСНОВНОЕ МЕНЮ ^KD
ТАБУЛЯЦИЯ ^I
АВТОМАТИЧЕСКАЯ ТАБУЛЯЦИЯ ВКЛЮЧЕНА/ВЫКЛЮЧЕНА ^QI
ВЫЗОВ ИЗ БУФЕРА ВВЕДЕННОЙ СТРОКИ ^QL
ПОИСК ТЕКСТА ^QF
ПОИСК И ЗАМЕНА ТЕКСТА ^QA
УПРАВЛЕНИЕ ЗНАКОМ ФОРЗАЦА ^P
----------------------------------------------------------

2.1.4.5. ФУНКЦИИ ОБ'ЕДИНЕНИЯ ПРОГРАММ. (INCLUDE-ФУНКЦИИ)
--------------------------------------------------------

ДАННЫЕ ФУНКЦИИ РЕДАКТОРА ПОЗВОЛЯЮТ СТЫКОВЫВАТЬ В ОДНУ ПРОГРАММУ РАНЕЕ НАПИСАННЫЕ НА ЯЗЫКЕ PASCAL TURBO ПРОГРАММНЫЕ БЛОКИ.
СТЫКОВКА ПРОГРАММ ПРОИЗВОДИТСЯ ПУТЕМ ЗАДАНИЯ В ТЕКСТЕ ОСНОВНОЙ ПРОГРАММЫ (Т.Е. ТОЙ ПРОГРАММЫ, КОТОРАЯ ДОЛЖНА ПОЛУЧИТЬСЯ В РЕЗУЛЬТАТЕ СТЫКОВКИ. ИНОГДА МЫ БУДЕМ НАЗЫВАТЬ ТАКУЮ ПРОГРАММУ "ГЛАВНОЙ ПРОЦЕДУРОЙ",ПО АНАЛОГИИ С НАЗВАНИЕМ ПРИНЯТЫМ ДЛЯ ПОДОБНЫХ ПРОГРАММ В НЕКОТОРЫХ ЯЗЫКАХ ПРОГРАММИРОВАНИЯ) ОДНОГО ИЛИ НЕСКОЛЬКИХ УТВЕРЖДЕНИЙ СЛЕДУЮЩЕГО ВИДА:

(*$I <ИМЯ ФАИЛА>*) .

КОМПИЛЯТОР ЗАГРУЖАЕТ ВО ВРЕМЯ РАБОТЫ УКАЗАННЫЕ В НАБОРЕ ДАННЫХ <ИМЯ ФАЙЛА> ПРОГРАММНЫЕ МОДУЛИ И ОБ'ЕДИНЯЕТ ИХ В ОСНОВНУЮ РАБОЧУЮ ПРОГРАММУ.
СТЫКОВКА ПРОГРАММ ПОДОБНЫМ ОБРАЗОМ ЯВЛЯЕТСЯ ЕДИНСТВЕННОЙ ВОЗМОЖНОСТЬЮ СИСТЕМЫ TURBO КОНСТРУИРОВАТЬ БОЛЬШИЕ ПРОГРАММЫ ИМЕННО ДО НАЧАЛА ИХ КОМПИЛЯЦИИ, ТАК КАК УЖЕ ГОВОРИЛОСЬ, ЧТО ВВИДУ ОТСУТСТВИЯ В СИСТЕМЕ РЕДАКТОРА СВЯЗЕЙ, ОБ'ЕДИНЕНИЕ ОБ'ЕКТНЫХ КОДОВ ОТТРАНСЛИРОВАННЫХ ОТДЕЛЬНО МОДУЛЕЙ В ОБЩИЙ ЗАГРУЗОЧНЫЙ МОДУЛЬ - НЕВОЗМОЖНО.
ДЛЯ ВЫВОДА ТЕКСТА ОБ'ЕДИНЕНОЙ ПРОГРАММЫ С ПОМОЩЬЮ TLIST С ЗАДАНИЕМ .L+ OПЦИИ (СМ ОПИСАНИЕ ПРОГРАММЫ TLIST) СЛЕДУЕТ ОБЯЗАТЕЛЬНО ЗАДАВАТЬ ТИП ФАЙЛА ".PAS", ПОТОМУ ЧТО ПРОГРАММА TLIST НЕ ТРАНСЛЯТОР, А ЛИШЬ МОДУЛЬ ДЛЯ ВЫВОДА НА ПРИНТЕР ПРОГРАММНЫХ ТЕКСТОВ, ПОЭТОМУ АВТОМАТИЧЕСКИ К ИМЕНИ ФАЙЛА АТРИБУТ ".PAS" ТИПА ФАЙЛА НЕ ДОБАВЛЯЕТ.

2.1.5. КОМПИЛЯЦИЯ.
------------------

КОМПИЛЯЦИЯ -ЭТО ПЕРЕВОД ИСХОДНОГО ТЕКСТА ПРОГРАММЫ, НАПИСАННОГО НА ВХОДНОМ ЯЗЫКЕ ВЫСОКОГО УРОВНЯ (В ДАННОМ СЛУЧАЕ НА ЯЗЫКЕ PASCALTURBO) В АБСОЛЮТНЫЕ МАШИННЫЕ КОДЫ. ЕСЛИ ПРИ КОМПИЛЯЦИИ ЗАДАН РЕЖИМ ВЫВОДА СКОМПИЛИРОВАННОЙ ПРОГРАММЫ В АБСОЛЮТНЫЙ КОМАНДНЫЙ ФАЙЛ (COM-ФАЙЛ) С ПОМОЩЬЮ ОПЦИИ "C" (СМ.П.2.1.11), ТО СИСТЕМА TURBO АВТОМАТИЧЕСКИ ФОРМИРУЕТ КОМАНДНЫЙ ФАЙЛ СОСТОЯЩИЙ ТОЛЬКО ИЗ АБСОЛЮТНЫХ КОДОВ МАШИНЫ (.COM-ФАЙЛ).
ВО ВРЕМЯ КОМПИЛЯЦИИ НА ДИСПЛЕЙ ВЫВОДИТСЯ ТЕКСТ: COMPILING (КОМПИЛЯЦИЯ В ОПЕРАТИВНУЮ ПАМЯТЬ).
ИЛИ COMPILING --> COM FILE <ИМЯ ФАЙЛА> (KОМПИЛЯЦИЯ В COM-ФАЙЛ).
ЗДЕСЬ ЖЕ СЧЕТЧИК ОТКОМПИЛИРОВАННЫХ СТРОК ПОКАЗЫВАЕТ, СКОЛЬКО СТРОК ИСХОДНОГО ТЕКСТА ОБРАБОТАЛ КОМПИЛЯТОР.
НАПРИМЕР, СООБЩЕНИЕ :253 LINES -OЗНАЧАЕТ, ЧТО СОКМПИЛИРОВАНО 253 СТРОКИ. ЕСЛИ КОМПИЛЯТОР ОБРАБАТЫВАЕТ ФАЙЛ ИЗ INCLUDE-УТВЕРЖДЕНИЯ(СМ.2.1.4.5), ТО ПЕРЕД НОМЕРОМ СТРОКИ ВЫВОДИТСЯ СИМВОЛ
"I".
ПРИ ОБНАРУЖЕНИИ СИНТАКСИЧЕСКИХ ОШИБОК В ИСХОДНОМ ТЕКСТЕ ПРОГРАММЫ ВЫВОДИТСЯ СООБЩЕНИЕ:
ERROR < НОМЕР > : <СООБЩЕНИЕ ОБ ОШИБКЕ>.PRESS <ESC>
ПОСЛЕ НАЖАТИЯ КЛАВИШИ <ESC> ПРОИСХОДИТ ВОЗВРАТ В РЕЖИМ РЕДАКТИРОВАНИЯ И КУРСОР ПОКАЗЫВАЕТ МЕСТО В ТЕКСТЕ ПРОГРАММЫ, В КОТОРОМ ОБНАРУЖЕНА СИНТАКСИЧЕСКАЯ ОШИБКА. КОМПИЛЯЦИЯ, ЕСТЕСТВЕННО, ПРЕРЫВАЕТСЯ.
ЕСЛИ СИНТАКСИЧЕСКАЯ ОШИБКА ОБНАРУЖЕНА В ФАЙЛЕ, ОБ'ЯВЛЕННОМ В INCLUDE УТВЕРЖДЕНИИ, ТО ВЫВОДИТСЯ СООБЩЕНИЕ ОБ ОШИБКЕ И ТЕКСТ:
"ERROR FOUND IN ABOVE INCLUDE FILE"-ОШИБКА ОБНАРУЖЕНА В ВЫШЕНАЗВАННОМ INCLUDE ФАЙЛЕ, ПОСЛЕ ЧЕГО ПРОИЗВОДИТСЯ ЗАГРУЗКА ЭТОГО ФАЙЛА В ОЗУ И АВТОМАТИЧЕСКИ МЕНЯЕТСЯ ИМЯ РАБОЧЕГО ФАЙЛА В ОСНОВНОМ МЕНЮ, ТО ЕСТЬ ФАЙЛ, В КОТОРОМ ОБНАРУЖЕНА ОШИБКА, СТАНОВИТСЯ РАБОЧИМ.
ЕСЛИ ИСХОДНАЯ ПРОГРАММА СИНТАКСИЧЕСКИ ВЕРНА, ТО НА ЭКРАН ВЫВОДИТСЯ СЛЕДУЮЩЕЕ:
CODE: XXXX BYTES (НАЧАЛЬНЫЙ И КОНЕЧНЫЕ АДРЕСА В ОЗУ)
FREE: XXXX BYTES ( " " " " " " )
DATA: XXXX BYTES ( " " " " " " )

ЭТИ НАДПИСИ ПОКАЗЫВАЮТ РАЗМЕР И РАСПОЛОЖЕНИЕ ПРОГРАММЫ И ДАННЫХ В ОЗУ МАШИНЫ.
РЕЖИМЫ КОМПИЛЯЦИИ РАССМАТРИВАЮТСЯ В ПУНКТЕ 2.1.11 .

2.1.6. RUN - ВЫПОЛНЕНИЕ.
-------------------------

КОГДА НЕОБХОДИМО ВЫПОЛНИТЬ ОТТРАНСЛИРОВАННУЮ БЕЗ ОШИБОК ПРОГРАММУ ИЛИ КОГДА ТРЕБУЕТСЯ СОВМЕСТИТЬ ПРОЦЕСС КОМПИЛЯЦИИ С ПРОЦЕССОМ ВЫПОЛНЕНИЯ ПРОГРАММЫ СЛЕДУЕТ, ПОСЛЕ ВЫХОДА ИЗ РЕЖИМА РЕДАКТИРОВАНИЯ ПО КОМАНДЕ ^КD ИЗ ОСНОВНОГО МЕНЮ ЗАДАТЬ СИСТЕМЕ ДИРЕКТИВУ "R".
ЕСЛИ ПРОГРАММА ПРИ ЭТОМ УЖЕ БЫЛА СКОМПИЛИРОВАНА ПО КОМАНДЕ "C",TO С ЗАДАНИЕМ "R"СРАЗУ НАЧНЕТСЯ ЕЕ ИСПОЛНЕНИЕ.
ЕСЛИ ПРОГРАММА ПРЕДВАРИТЕЛЬНО СКОМПИЛИРОВАНА НЕ БЫЛА, ТО СНАЧАЛА БУДЕТ ПРОИЗВОДИТСЯ ЕЕ КОМПИЛЯЦИЯ ТОЧНО ТАК ЖЕ, КАК И ПО ДИРЕКТИВЕ "C",А ПОТОМ УПРАВЛЕНИЕ ПЕРЕДАСТСЯ ОТТРАНСЛИРОВАННОЙ ПРОГРАММЕ.
EСЛИ ПРОГРАММА СОДЕРЖИТ СИНТАКСИЧЕСКИЕ ОШИБКИ. ТО ЕЕ ВЫПОЛНЕНИЕ БУДЕТ ПРЕРВАНО И, ПОСЛЕ НАЖАТИЯ <ESC>,ПРОИЗОЙДЕТ ПЕРЕХОД В РЕЖИМ РЕДАКТИРОВАНИЯ ТОЧНО ТАКЖЕ, КАК И ПРИ КОМПИЛЯЦИИ БЕЗ ВЫПОЛНЕНИЯ.

2.1.7. SAVE - ЗАПИСЬ НА ДИСК
----------------------------

ЗАПИСЬ ИСХОДНОЙ ПРОГРАММЫ, НА ЯЗЫКЕ PASCAL TURBO, ПОЛУЧЕННОЙ С ПОМОЩЬЮ РЕДАКТОРА НА ЭКРАНЕ ДИСПЛЕЯ ОСУЩЕСТВЛЯЕТСЯ ПОСЛЕ ВЫХОДА В ОСНОВНОЕ МЕНЮ ИЗ РЕДАКТОРА (ПО КОМАНДЕ ^КD) С ПОМОЩЬЮ ПОСЛЕДУЮЩЕЙ ДИРЕКТИВЫ "S".
ПРИ ЭТОМ, ЕСЛИ НА ДИСКЕ УЖЕ СУЩЕСТВОВАЛ ФАЙЛ С ИМЕНЕМ РАБОЧЕГО ФАЙЛА, КОТОРЫЙ ТОЛЬКО ЧТО РЕДАКТИРОВАЛСЯ, ОТРЕДАКТИРОВАННЫЙ ФАЙЛ ЗАПИШЕТСЯ НА НОВОЕ МЕСТО, А ФАЙЛ, СУЩЕСТВОВАВШИЙ С ЭТИМ ИМЕНЕМ РАНЬШЕ, ИЗМЕНИТ ТИП ".PAS" НА ТИП ".BAK" - ТИП РЕЗЕРВНОГО
ФАЙЛА.

2.1.8. EXECUTE-ВЫЗОВ И ВЫПОЛНЕНИЕ КОМАНДНОГО ФАЙЛА.
---------------------------------------------------

ВЫЗОВ КАКОГО-ЛИБО КОМАНДНОГО ФАЙЛА (НАПРИМЕР СЕРВИСНЫХ ПРОГРАММ ОС CP/M-80) ИЗ РЕЖИМА РЕДАКТИРОВАНИЯ СИСТЕМЫ TURBO С ПОСЛЕДУЮЩИМ ВОЗВРАТОМ В НЕЕ ОСУЩЕСТВЛЯЕТСЯ ИЗ ОСНОВНОГО МЕНЮ С ПОМОЩЬЮ КОМАНДЫ X (E[X]EQUTE).
ПОСЛЕ ВВОДА X НЕОБХОДИМО ЗАДАТЬ ИМЯ КОМАНДНОГО ФАЙЛА. УКАЗАНИЕ ТИПА ФАЙЛА ".COM" В ИМЕНИ ВЫЗЫВАЕМОГО ФАЙЛА НЕ ТРЕБУЕТСЯ. ЕСЛИ ИМЯ ФАЙЛА НЕ ЗАДАНО, "TURBO" ВЫВОДИТ ПОДСКАЗКУ "PROGRAM",КОТОРАЯ ГОВОРИТ О НЕОБХОДИМОСТИ ВВОДА СЛЕДОМ ЗА ПОДСКАЗКОЙ ИМЕНИ ФАЙЛА.
ИМЯ РАБОЧЕГО ФАЙЛА ПРИ ИСПОЛНЕНИИ КОМАНДНОГО ФАЙЛА НЕ МЕНЯЕТСЯ, НО СОХРАНЯЕТСЯ В СТЕКЕ ВОЗВРАТА, ЧТО ДАЕТ ВОЗМОЖНОСТЬ СИСТЕМЕ ВНОВЬ ЗАГРУЗИТЬ РАБОЧИЙ ФАЙЛ В ОЗУ АВТОМАТИЧЕСКИ ПОСЛЕ ЗАВЕРШЕНИЯ ВЫПОЛНЕНИЯ ВЫЗВАННОЙ ПО КОМАНДЕ "Х" ПРОГРАММЫ.
СЛЕДУЕТ ИМЕТ В ВИДУ, ЧТО ЕСЛИ ВЫЗЫВАЕМАЯ ПРОГРАММА ВЕЛИКА ПО ОБ'ЕМУ, ТО МОЖЕТ ВОЗНИКНУТЬ ПЕРЕПОЛНЕНИЕ ПАМЯТИ, ТАК КАК КРОМЕВЫЗЫВАЕМОЙ ПРОГРАММЫ В ОЗУ ОСТАЕТСЯ ЕЩЕ И НЕКОТОРАЯ СЛУЖЕБНАЯ ИНФОРМАЦИЯ КОМПИЛЯТОРА.

2.1.9 DIR -ВЫВОД ОГЛАВЛЕНИЯ ДИСКА.
-----------------------------------

ДЛЯ ВЫВОДА ОГЛАВЛЕНИЯ РАБОЧЕГО ДИСКА ИЗ ОСНОВНОГО МЕНЮ СЛУЖИТ КОМАНДА "D" (DIRECTORY).
ПОСЛЕ ВВОДА ЭТОЙ КОМАНДЫ НА ДИСПЛЕЕ ПОЯВЛЯЕТСЯ ПОДСКАЗКА СИСТЕМЫ DIR MASK (МАСКА ОГЛАВЛЕНИЯ).
МАСКА ОГЛАВЛЕНИЯ ЗАДАЕТСЯ В ОБЩЕПРИНЯТОМ ДЛЯ CP/M ВИДЕ, А ИМЕННО:
- * (ЗВЕЗДОЧКА) ВМЕСТО ИМЕНИ ИЛИ ТИПА ФАЙЛА ОЗНАЧАЕТ ВЫВОД СПИСКА С ЛЮБЫМ ИМЕНЕМ ИЛИ ТИПОМ. НАПРИМЕР МАСКА "*.PAS"
ЗАПРАШИВАЕТ ВЫВОД ВСЕХ PASCAL-ФАЙЛОВ, А MМАСКА "*.*'-ЗАПРАШИВАЕТ ВЫВОД ВСЕГО ОГЛАВЛЕНИЯ. ДЛЯ ВЫВОДА ВСЕГО ОГЛАВЛЕНИЯ МОЖНО ВООБЩЕ НЕ ЗАДАВАТЬ НИКАКОЙ МАСКИ: ДОСТАТОЧНО ПРОСТО НАЖАТЬ <ЕТ>.
- ? (ВОПРОСИТЕЛЬНЫЙ ЗНАК) В ИМЕНИ ФАЙЛА,ОЗНАЧАЕТ,ЧТО ВЫВОДЯТСЯ ОГЛАВЛЕНИЕ ФАЙЛОВ У КОТОРЫХ НА МЕСТЕ ВОПРОСИТЕЛЬНОГО ЗНАКА ДОПУСКАЕТСЯ ЛЮБОЙ СИМВОЛ. ТАК МАСКА "????????.???" РАВНОЗНАЧНА МАСКЕ *.* И ОЗНАЧАЕТ ЗАПРОС НА ВЫВОД ВСЕГО ОГЛАВЛЕНИЯ ДИСКА.

ПОСЛЕ ВЫВОДА ОГЛАВЛЕНИЯ ДИСКА В СООТВЕТСТВИИ С ЗАДАННОЙ МАСКОЙ, TURBO ВЫВОДИТ НА ЭКРАН КОЛИЧЕСТВО СВОБОДНОЙ ПАМЯТИ НА ДИСКЕ. СООБЩЕНИЕ О СВОБОДНОЙ ПАМЯТИ ИМЕЕТ ВИД:
BYTES REMAINING ON <ИМЯ ДИСКОВОДА>:"ХХХ".
ЗДЕСЬ
- <ИМЯ ДИСКОВОДА> - А,В,С ИЛИ D . (ДЛЯ НЕКОТОРЫХ ЭВМ, РАБОТАЮЩИХ С CP/M-80 ДОПУСКАЕТСЯ ПОДКЛЮЧЕНИЕ ДО 16 ДИСКОВОДОВ. В ЭТОМ СЛУЧАЕ ИХ ЛОГИЧЕСКИЕ ИМЕНА ОБОЗНАЧАЮТСЯ ЛАТИНСКИМИ БУКВАМИ ОТ А ДО Р);
- "ХХХ" КОЛИЧЕСТВО СВОБОДНАЙ ПАМЯТИ НА ДИСКЕ В КИЛОБАЙТАХ.

2.1.10 QUIT - ВЫХОД ИЗ "TURBO" В ОС CP/M-80
-------------------------------------------

КОМАНДА "Q" ЗАКАНЧИВАЕТ РАБОТУ КОМПИЛЯТОРА "TURBO PASCAL". ЕСЛИ ЗАДАНА ЭТА КОМАНДА, НО РАБОЧИЙ ФАЙЛ С ПОСЛЕДНИМИ ИЗМЕНЕНИЯМИ, ВНЕСЕННЫМИ ПРИ РЕДАКТИРОВАНИИ НЕ БЫЛ ПРЕДВАРИТЕЛЬНО СОХРАНЕН, ТО ПРЕЖДЕ ЧЕМ ПЕРЕДАТЬ УПРАВЛЕНИЕ МАШИНОЙ КОМАНДНОМУ ПРОЦЕССОРУ OC CP/M-80, "TURBO" УВЕДОМИТ ПОЛЬЗОВАТЕЛЯ ПОДСКАЗКОЙ:
"WORK FILE <ИМЯ ФАЙЛА> NOT SAVED.SAVE? (Y/N)"
(РАБОЧИЙ ФАЙЛ <ИМЯ ФАЙЛА> НЕ СОХРАНЕН.СОХРАНИТЬ? (Д/Н)).
ВЫХОД В ОС CP/M-80 БУДЕТ ПРОИЗВЕДЕН ТОЛЬКО ПОСЛЕ ВВОДА "N"
(НЕТ),ЕСЛИ ПОЛЬЗОВАТЕЛЬ НЕ ХОЧЕТ ЗАПИСЫВАТЬ НА ДИСК ПОСЛЕДНЮЮ ВЕРСИЮ РАБОЧЕГО ФАЙЛА, ИЛИ ПОСЛЕ ЗАПИСИ ЭТОЙ ПОСЛЕДНЕЙ ВЕРСИИ НА ДИСК ПОСЛЕ ПОДТВЕРЖДЕНИЯ "Y"(ДА) СОГЛАСИЯ НА ЗАПИСЬ.

2.1.11 COMPILER OPTIONS - ВЫБОР РЕЖИМА КОМПИЛЯЦИИ.
--------------------------------------------------
ВЫБОР РЕЖИМА КОМПИЛЯЦИИ ПРОИЗВОДИТСЯ КОМАНДОЙ "О", ПОСЛЕ ВВОДА КОТОРОЙ НА ДИСПЛЕЕ ПОЯВЛЯЕТСЯ СЛЕДУЮЩЕЕ МЕНЮ:

COMPILE -> MEMORY
COM-FILE
CHN-FILE
FIND RUN TIME ERROR QUIT

В ЭТОМ МЕНЮ СЛЕДУЕТ ЗАДАТЬ ОДНУ ИЗ ПЕРЕЧИСЛЕННЫХ В НЕМ ОПЦИЙ:

2.1.11.1 ОПЦИЯ "M"(МEMORY) -КОМПИЛЯЦИЯ В ОЗУ.
---------------------------------------------

ЭТО РЕЖИМ ХАРАКТЕРЕН ТЕМ, ЧТО КОМПИЛЯТОР, ОБРАБАТЫВАЯ ИСХОДНЫЙ ТЕКСТ ПРОГРАММЫ НА ПАСКАЛЕ, РАСПОЛАГАЕТ АБСОЛЮТНЫЕ КОДЫ ОТТРАНСЛИРОВАННОЙ ПРОГРАММЫ В ОЗУ МАШИНЫ. ТЕМ САМЫМ МАШИНА ПОДГОТАВЛИВАЕТСЯ К ВЫПОЛНЕНИЮ ПРОГРАММЫ ПО КОМАНДЕ [R]UN,СРАЗУ ЖЕ
ПОСЛЕ УСПЕШНОГО ЗАВЕРШЕНИЯ КОМПИЛЯЦИИ.
ПРОГРАММИСТ ДОЛЖЕН ПРИ ВЫБОРЕ РЕЖИМА КОМПИЛЯЦИИ УЧТЫВАТЬ, ЧТО В СЛУЧАЕ, ЕСЛИ В КОМПИЛЯТОР ЗАГРУЖЕНЫ СООБЩЕНИЯ ОБ ОШИБКАХ (СМ П 2.),ТО СВОБОДНЫЙ ОБ'ЕМ ПАМЯТИ КОМПИЛЯТОРА ПРИ ОБЩЕМ ОБ'ЕМЕ ОЗУ В 64 К СОСТАВЛЯЕТ ВСЕГО ОКОЛО 15 К. В ЭТОМ ОБ'ЕМЕ КОМПИЛЯТОР РАЗМЕЩАЕТ ИСХОДНЫЙ ТЕКСТ, АБСОЛЮТНЫЕ КОДЫ ОТТРАНСЛИРОВАННОЙ ПРОГРАММЫ И ДАННЫЕ. ИЗ СКАЗАННОГО СЛЕДУЕТ, ЧТО ТОЛЬКО ОТНОСИТЕЛЬНО НЕБОЛЬШИЕ ПРОГРАММЫ (ДО,ПРИМЕРНО,200 СТРОК ИСХОДНОГО ТЕКСТА) МОГУТ ОБРАБАТЫВАТЬСЯ В ЭТОМ РЕЖИМЕ.
ОТКАЗ ОТ ЗАГРУЗКИ СООБЩЕНИЙ ОБ ОШИБКАХ ТАК ЖЕ НЕ ДАЕТ СУЩЕСТВЕННОГО ВЫИГРЫША, ПОСКОЛЬКУ, КАК УЖЕ ГОВОРИЛОСЬ, СООБЩЕНИЯ ОБ ОШИБКАХ ЗАНИМАЮТ 1-3 КИЛОБАЙТ, А С РОСТОМ ОБ'ЕМА ИСХОДНОГО ТЕКСТА РАСТЕТ И ОБ'ЕМ АБСОЛЮТНОГО КОДА, ЧТО ПРИВОДИТ К БЫСТРОМУ ПЕРЕПОЛНЕНИЮ КОМПИЛЯТОРА.
ПРИ ЗАДАНИИ ОПЦИИ "М" МЕНЮ ВЫБОРА РЕЖИМА КОМПИЛЯЦИИ ИМЕЕТ В ТОЧНОСТИ ТАКОЙ ВИД, КАКОЙ ПРИВЕДЕН В П 2.1.11.:СТРЕЛКА ПОКАЗЫВАЕТ НА "MEMORY".
ЭТА ОПЦИЯ УСТАНАВЛИВАЕТСЯ ПО УМОЛЧАНИЮ ПРИ КАЖДОМ НОВОМ ВЫЗОВЕ СИСТЕМЫ "TURBO".


2.1.11.2. ОПЦИЯ "C" (COM-FILE) - КОМПИЛЯЦИЯ НА ДИСК
----------------------------------------------------
С СОЗДАНИЕМ COM-ФАЙЛА.
----------------------

РЕЖИМ КОМПИЛЯЦИИ НА ДИСК С СОЗДАНИЕМ ФАЙЛА АБСОЛЮТНЫХ КОДОВ (COM-ФАЙЛА) ПРИМЕНЯЕТСЯ ПРИ КОМПИЛЯЦИИ БОЛЬШИХ ИСХОДНЫХ ПРОГРАММ. В ЭТОМ СЛУЧАЕ ДЛЯ АБСОЛЮТНЫХ КОДОВ КОМПИЛЯТУРУ ТРЕБУЕТСЯ ЛИШЬ НЕБОЛЬШОЙ РАБОЧИЙ БУФЕР, ДАННЫЕ ИЗ КОТОРОГО ПЕРЕНОСЯТСЯ НА ДИСК ПО МЕРЕ ЗАПОЛНЕНИЯ ЭТОГО БУФЕРА. ТАКИМ ОБРАЗОМ ДЛЯ ИСХОДНОГО ТЕКСТА ОСТАЮТСЯ СВОБОДНЫМИ ПОЧТИ ВСЕ 15 (ИЛИ 18 В СЛУЧАЕ НЕЗАГРУЖЕННЫХ СООБЩЕНИЙ ОБ ОШИБКАХ) КИЛОБАЙТ ПАМЯТИ, ИМЕЮЩЕЙСЯ В РАСПОРЯЖЕНИИ КОМПИЛЯТОРА.
ЭТИМИ ЦИФРАМИ И ОПРЕДЕЛЯЕТСЯ ПРЕДЕЛЬНЫЙ РАЗМЕР ГЛАВНОГО ФАЙЛА. В СЛУЧАЕ, ЕСЛИ ТРЕБУЕТСЯ СКОМПИЛИРОВАТЬ ПРОГРАММУ БОЛЬШИХ РАЗМЕРОВ, ЕЕ НЕОБХОДИМО РАЗБИТЬ НА СЕГМЕНТЫ В ВИДЕ ОТДЕЛЬНЫХ РАБОЧИХ ФАЙЛОВ, А ЗАТЕМ ОБ'ЕДИНИТЬ ЭТИ ФАЙЛЫ С ПОМОЩЬЮ INCLUD-УТВЕРЖДЕНИЙ (СМ.П 2.1.4.5).ПРЕДЕЛЬНЫЙ РАЗМЕР ПОЛУЧАЕМОГО С ПОМОЩЬЮ ЭТОГО ПРИЕМА КОМАНДНОГО ФАЙЛА ОГРАНИЧИВАЕТСЯ ЛИШЬ ПОЛЬЗОВАТЕЛЬСКОЙ ЗОНОЙ ОЗУ МАШИНЫ, КОТОРАЯ ДЛЯ CP/M-80 СОТАВЛЯЕТ 48 К.
ЕСТЕСТВЕННО, КОМПИЛЯЦИЯ В "COM-ФАЙЛ" ПРОИСХОДИТ МЕДЛЕННЕЕ, ТАК КАК ЭТО СВЯЗАНО С ОПЕРАЦИЯМИ С ДИСКОМ, НО ВСЕ-ТАКИ СКОРОСТЬ КОМПИЛЯЦИИ ПРИ ЭТОМ ОСТАЕТСЯ ДОСТАТОЧНО ВЫСОКОЙ: ОКОЛО 500 СТРОК В МИНУТУ.
ПРИ ЗАДАНИИ ОПЦИИ "С" СТРЕЛКА МЕНЮ ВЫБОРА РЕЖИМОВ УКАЗЫВАЕТ НА ->COM-FILE, KРОМЕ ТОГО В МЕНЮ ПОЯВЛЯЕТСЯ ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:
START ADDRESS XXXX(MIN XXXX) (НАЧАЛЬНЫЙ АДРЕС)
END ADDRESS XXXX(MAX XXXX) (КОНЕЧНЫЙ АДРЕС)
ЗДЕСЬ ПОД ХХХХ ПОНИМАЮТСЯ ШЕСТНАДЦАТЕРИЧНЫЕ АДРЕСА ОЗУ, СКОТОРЫХ КОМАНДНЫЙ ФАЙЛ БУДЕТ ЗАГРУЖАТЬСЯ В ПОЛЬЗОВАТЕЛЬСКУЮ ЗОНУ ОЗУ ПРИ ВЫЗОВЕ. АДРЕС В СКОБКАХ ПЕРЕД MIN ПОКАЗЫВАЕТ АДРЕС БИБЛИОТЕКИ КОМПИЛЯТОРА+1. -НАИМЕНЬШИЙ ВОЗМОЖНЫЙ СТАРТОВЫЙ АДРЕС;
АДРЕС В СКОБКАХ ПЕРЕД MAX ПОКАЗЫВАЕТ АДРЕС НАЧАЛА CP/M-80 (РАЗДЕЛА BDOS) -1 - НАИБОЛЬШИЙ ВОЗМОЖНЫЙ ДЛЯ ПОЛЬЗОВАТЕЛЯ КОНЕЧНЫЙ АДРЕС.
МАНИПУЛИРОВАНИЕ НАЧАЛЬНЫМ И КОНЕЧНЫМИ АДРЕСАМИ ВОЗМОЖНО ЗАДАНИЕМ "РУЧНЫМ" ЗАДАНИЕМ ЭТИХ АДРЕСОВ ПОСЛЕ ВВОДА ПОДКОМАНД "S" ИЛИ "E".

В ПЕРВОМ СЛУЧАЕ СИСТЕМА ВЫВОДИТ ПОДСКАЗКУ "START ADDRESS",ВО ВТОРОМ "END ADDRESS", ПОСЛЕ КОТОРЫХ СЛЕДУЕТ ВВЕСТИ ТРЕБУЕМЫЕ НАЧАЛЬНЫЙ И/ИЛИ КОНЕЧНЫЕ АДРЕСА ЧЕТЫРЬМЯ ШЕСТНАДЦАТИРИЧНЫМИ ЦИФРАМИ. ПОСЛЕ "РУЧНОГО" ЗАДАНИЯ ЭТИХ АДРЕСОВ ЧИСЛА, ПОКАЗЫВАЮЩИЕ ЭТИ АДРЕСА В МЕНЮ ВЫБОРА РЕЖИМА КОМПИЛЯЦИИ СООТВЕТСТВУЮЩИМ ОБРАЗОМ МЕНЯЮТСЯ, АДРЕСА ЖЕ В СКОБКАХ ОСТАЮТСЯ НЕИЗМЕННЫМИ.
СЛЕДУЕТ ИМЕТЬ В ВИДУ, ЧТО ПРИ ЗАГРУЗКЕ КОМАНДНОГО ФАЙЛА ДЛЯ ВЫПОЛНЕНИЯ ЧЕРЕЗ ВСТРОЕННЫЙ ЗАГРУЗЧИК СИСТЕМЫ "TURBO" KOНЕЧНЫЙ АДРЕС НЕ ДОЛЖЕН ЗАДАВАТЬСЯ ВЫШЕ, ЧЕМ КОНЕЧНЫЙ АДРЕС, УКАЗАННЫЙ В СКОБКАХ МИНУС 1000,ТАК КАК ИМЕННО ЭТУ ОБЛАСТЬ ЗАНИМАЕТ СИСТЕМНЫЙ ЗАГРУЗЧИК. ЕСЛИ ЖЕ КОМАНДНЫЙ ФАЙЛ ПРЕДПОЛАГАЕТСЯ ВЫЗЫВАТЬ ТОЛЬКО ЧЕРЕЗ КОМАНДНЫЙ ПРОЦЕССОР ОС CP/M-80, ТО ВЕРХНИЙ ВОЗМОЖНЫЙ АДРЕС ОПРЕДЕЛЯЕТСЯ ОБ'ЕМОМ ПОЛЬЗОВАТЕЛЬСКОЙ ЗОНЫ, КОТОРАЯ ЗАВИСИТ ОТ КОНФИГУРАЦИИ КОМПЬЮТЕРА, A ИМЕННО ОТ ОБ'ЕМА ОЗУ, РЕАЛИЗОВАННОГО В НЕМ. ЕСЛИ НЕ УЧИТЫВАТЬ ЭТИ ФАКТОРЫ, ТО МОГУТ ВОЗНИКНУТЬ КОЛЛИЗИИ В ПАМЯТИ МАШИНЫ, ВЫЗВАННЫЕ НАЛОЖЕНИЕМ СКОМПИЛИРОВАННОЙ ПРОГРАММЫ НА ОБЛАСТЬ РАСПОЛОЖЕНИЯ ОПЕРАЦИОННОЙ СИСТЕМЫ.

ЧТОБЫ ИЗБЕЖАТЬ ВОЗМОЖНЫХ НЕПРИЯТНОСТЕЙ В РАСПРЕДЕЛЕНИИ ПАМЯТИ НЕ РЕКОМЕНДУЕТСЯ ЗАДАВАТЬ СТАРТОВЫЙ АДРЕС МЕНЬШИЙ, А КОНЕЧНЫЙ АДРЕС БОЛЬШИЙ, ЧЕМ АДРЕСА, УКАЗАННЫЕ В СКОБКАХ МЕНЮ ВЫБОРА РЕЖИМОВ КОМПИЛЯЦИИ И, ВООБЩЕ, ПО ВОЗМОЖНОСТИ ИЗБЕГАТЬ "РУЧНОЙ" УСТАНОВКИ АДРЕСОВ, ПРЕДОСТАВЛЯЯ ЭТУ РАБОТУ СИСТЕМЕ "TURBO".
БОЛЕЕ ПДБРОБНО О РАСПРЕДЕЛЕНИИ ПАМЯТИ КОМПИЛЯТОРА И ОПЕРАЦИОННОЙ СИСТЕМЫ МОЖНО ПРОЧИТАТЬ В ЧАСТИ 3 НАСТОЯЩЕГО РУКОВОДСТВА.

2.11.1.3. ОПЦИЯ "H" (CHAIN-FILE) -ЦЕПОЧНЫЙ ФАЙЛ.
------------------------------------------------

РЕЖИМ КОМПИЛЯЦИИ В ЦЕПОЧНЫЙ ФАЙЛ (CHAIN-FILE) УСТАНАВЛИВАЕТСЯ ВВОДОМ ОПЦИИ "Н",ПРИ ЭТОМ СТРЕЛКА В МЕНЮ ВЫБОРА РЕЖИМОВ КОМПИЛЯЦИИ УСТАНАВЛИВАЕТСЯ ->CHAIN-FILE.
В ЭТОМ РЕЖИМЕ ТАК ЖЕ ПОЯВЛЯЮТСЯ СООБЩЕНИЯ О НАЧАЛЬНЫХ И КОНЕЧНЫХ АДРЕСАХ И ТАК ЖЕ ВОЗМОЖНО ИХ ЗАДАНИЕ С ПОМОЩЬЮ ПОДКОМАНД "S" И "E" И TE ЖЕ САМЫЕ ПОЛОЖЕНИЯ, ЧТО И ПРИ КОМПИЛЯЦИИ В COM-FILE ДОЛЖНЫ БЫТЬ ПРИНЯТЫ ВО ВНИМАНИЕ ПРОГРАММИСТОМ. CHAIN-FILE -ПРЕДСТАВЛЯЕТ ИЗ СЕБЯ ТАК ЖЕ ФАЙЛ АБСОЛЮТНЫХ КОДОВ, НО ОН НЕ ИМЕЕТ СТАТУСА ГЛАВНОЙ ПРОЦЕДУРЫ И ПОЭТОМУ НЕ МОЖЕТ БЫТЬ ВЫЗВАН ДЛЯ ИСПОЛНЕНИЯ САМОСТОЯТЕЛЬНО: ОДИН ИЛИ НЕСКОЛЬКО ПОДОБНЫХ ФАЙЛОВ МОГУТ БЫТЬ ВКЛЮЧЕНЫ В ГЛАВНУЮ ПРОЦЕДУРУ, ОБРАЗОВАННУЮ COM-ФАЙЛОМ, ИЗ КОТОРОГО ОНИ ВЫЗЫВАЮТСЯ С ПОМОЩЬЮ СПЕЦИАЛЬНЫХ CHAIN-ФУНКЦИЙ. ПОДРОБНЕЕ ОБ ЭТИХ ФУНКЦИЯХ ГОВОРИТСЯ В ЧАСТИ II НАСТОЯЩЕГО РУКОВОДСТВА, А ПОКА, ВКРАТЦЕ, МОЖНО ОТМЕТИТЬ, ЧТО С ПОМОЩЬЮ НИХ ВОЗМОЖНА ОРГАНИЗАЦИЙ ПРОГРАММ С ОВЕРЛЕЙ-
НОЙ СТРУКТУРОЙ.

2.11.1.4. ОПЦИЯ "F" (FIND RUN TIME ERROR)-ПОИСК ОШИБКИ
------------------------------------------------------
ВРЕМЕНИ ИСПОЛНЕНИЯ
------------------

В ЭТОМ РЕЖИМЕ ПРОИЗВОДИТСЯ ПОИСК МЕСТА В ИСХОДНОМ ТЕКСТЕ ПРОГРАММЫ ГДЕ ПРОИЗОШЛО ПРЕРЫВАНИЕ ВО ВРЕМЯ ЕЕ ИСПОЛНЕНИЯ.
КОГДА УСТАНОВЛЕНА ОПЦИЯ "М"-КОМПИЛЯЦИЯ В ПАМЯТЬ, ТО ПОИСК МЕСТА ПРЕРЫВАЕИЯ TURBO ДЕЛАЕТ АВТОМАТИЧЕСКИ, ВЫВОДЯ СООБЩЕНИЕ

"RUN TIME ERROR POSITION FOUND.PRESS <ESC>".В ЭТОМ СЛУЧАЕ ПОСЛЕ НАЖАТИЯ КЛАВИШИ <ESC> КУРСОР УКАЖЕТ НА МЕСТО В ИСХОДНОМ ТЕКСТЕ ПРОГРАММЫ, В КОТОРОМ ПРОИЗОШЛО ПРЕРЫВАНИЕ.
КОГДА УСТАНОВЛЕНЫ РЕЖИМЫ "C" ИЛИ "H",TO В СЛУЧАЕ ПРЕРЫВАНИЯ TURBO ВЫВОДИТ НА ЭКРАН СООБЩЕНИЕ:"RUN TIME ERROR.PC XXXX". ЗДЕСЬ PC XXXX УКАЗАНИЕ НА ЗНАЧЕНИЕ ПРОГРАММНОГО СЧЕТЧИКА(PROGRAM COUNTER), ВЫРАЖЕННОЕ ШЕСТНАДЦАТЕРИЧНЫМ ЧИСЛОМ XXXX.
ДЛЯ ПОИСКА МЕСТА ПРЕРЫВАЕИЯ ПО ЗНАЧЕНИЮ ПРОГРАММНОГО СЧЕТЧИКА СЛЕДУЕТ УСТАНОВИТЬ ОПЦИЮ "F", ЗАТЕМ В ОТВЕТ НА ПОДСКАЗКУ СИСТЕМЫ "ENTER PC" ВВЕСТИ ЗНАЧЕНИЕ ПРОГРАММНОГО СЧЕТЧИКА, ВЫДАННОГО СООБЩЕНИЕМ О ПРЕРЫВАНИИ. TURBO НАЧНЕТ ПОИСК МЕСТА ПРЕРЫВАНИЯ В ИСХОДНОМ ТЕКСТЕ, А НАЙДЯ ЭТО МЕСТО ВЫВЕДЕТ СООБЩЕНИЕ "POSITION FOUND.PRESS <ESC>",ПОСЛЕ ЧЕГО НАДЛЕЖИТ ПОСТУПИТЬ ТАК ЖЕ, КАК И В ПРЕДЫДУЩЕМ СЛУЧАЕ.

2.11.1.5. ОПЦИЯ "Q" (QUIT) - ВЫХОД ИЗ РЕЖИМА УСТАНОВЛЕНИЯ
---------------------------------------------------------
ОПЦИЙ КОМПИЛЯТОРА.
------------------

ВОЗВРАТ В ОСНОВНОЕ МЕНЮ ИЗ МЕНЮ УСТАНОВЛЕНИЯ РЕЖИМОВ КОМПИЛЯЦИИ ОСУЩЕСТВЛЯЕТСЯ ПО КОМАНДЕ "Q".ПРИ ЭТОМ УСТАНОВЛЕННЫЙ РЕЖИМ ДЕЙСТВУЕТ ДО ЗАДАНИЯ НОВОЙ ОПЦИИ ИЛИ ДО ПЕРЕЗАГРУЗКИ СИСТЕМЫ, ПОСЛЕ КОТОРОЙ АВТОМАТИЧЕСКИ УСТАНАВЛИВАЕТСЯ РЕЖИМ "COMPILE ->MEMORY".

2.2. УКАЗАНИЯ КОМПИЛЯТОРУ.
--------------------------

УКАЗАНИЯ КОМПИЛЯТОРУ ПЕРЕДАЮТСЯ ПУТЕМ ВКЛЮЧЕНИЯ В ИСХОДНЫЙ ТЕКСТ ПРОГРАММЫ НА ПАСКАЛЕ НЕКОТОРЫХ УТВЕРЖДЕНИЙ СПЕЦИАЛЬНОГО ВИДА: (*$<УКАЗАНИЕ><СИМВОЛ1>,<СИМВОЛ2>...<СИМВОЛN>*).
ПРИМИТЕ ВО ВНИМАНИЕ, ЧТО ДО И ПОСЛЕ ЗНАКА "$" В ФОРМАТЕ УКАЗАНИЯ КОМПИЛЯТОРУ НЕ ДОЖНО БЫТЬ ПРОБЕЛОВ!
СИМВОЛАМИ <СИMВОЛ1>...<СИМВОЛN> МОГУТ БЫТЬ СИМВОЛЫ ИЗ СЛЕДУЮЩЕГО МНОЖЕСТВА:
-ЗАГЛАВНЫЕ ЛАТИНСКИЕ БУКВЫ А B C I R V U W X С ПОСЛЕДУЮЩИМ ЗНАКОМ + ИЛИ -;
-ЗАГЛАВНАЯ ЛАТИНСКАЯ БУКВА О БЕЗ ПОСЛЕДУЮЩИХ ЗНАКОВ (ЗАДАНИЕ ОВЕРЛЕЙНОЙ СТРУКТУРЫ ПРОГРАММЫ);
УКАЗАНИЯ КОМПИЛЯТОРУ ИМЕЮТ СЛЕДУЮЩИЕ ЗНАЧЕНИЯ:

А РЕКУРСИЯ ПО УМОЛЧАНИЮ: А+
(*$А+*) --> ОЗНАЧАЕТ, ЧТО АБСОЛЮТНЫЙ КОД НЕ МОЖЕТ ВЫЗЫВАТЬСЯ РЕКУРСИВНО;
(*$А-*) --> РЕКУРСИЯ РАЗРЕШЕНА. В ЭТОМ СЛУЧАЕ ПРОГРАММА ЗАНИМАЕТ БОЛЬШЕ МЕСТА В ОЗУ И ВЫПОЛНЯЕТСЯ МЕДЛЕННЕЕ;

В НАЗНАЧЕНИЕ СТАНДАРТНЫХ УСТРОЙСТВ ПО УМОЛЧАНИЮ: В+ ВВОДА/ВЫВОДА
(*$B+*) -->ОЗНАЧАЕТ,ЧТО СТАНДАРТНЫМ ФАЙЛОМ ВВОДА/ВЫВОДА НАЗНАЧЕНА КОНСОЛЬ (CON);
(*$B-*) -->СТАНДАРТНЫМ ФАЙЛО ВВОДА/ВЫВОДА НАЗНАЧЕН ТЕРМИНАЛ (TERM); ДЕЙСТВИЕ ДАННОГО УКАЗАНИЯ РАСПРОСТРАНЯЕТСЯ НА ВСЮ ПРОГРАММУ И ПЕРЕОПРЕДЕЛИТЬ ЕГО В ПРОГРАММЕ БОЛЬШЕ НЕЛЬЗЯ;

С ^S И ^C ПО УМОЛЧАНИЮ: С+
ОПРЕДЕЛЯЕТ, БУДУТ ЛИ ЧИТАТЬСЯ УПРАВЛЯЮЩИЕ СИМВОЛЫ ^C И ^S С КЛАВИАТУРЫ И ИНТЕРПРЕТИРОВАТЬСЯ СЛЕДУЮЩИМ ОБРАЗОМ:
^S -ПРИОСТАНОВКА ЦИКЛОВ ИЛИ ВЫВОДА ИНФОРМАЦИИ НА ДИСПЛЕЙ,
^C - ПРЕРЫВАНИЕ ПРОГРАММЫ ПО ИНИЦИАТИВ ПОЛЬЗОВАТЕЛЯ.
(*$С+*) -> КОНТРОЛЬНЫЕ СИМВОЛЫ ЧИТАЮТСЯ И ВЫПОЛНЯЮТСЯ;
(*$С-*) -> -..- ЧИТАЮТСЯ, НО НЕ ВЫПОЛНЯЮТСЯ. ОБРАБОТКА ПРЕРЫВАНИЙ ПОСЛЕ ВВОДА ЭТИХ ЗНАКОВ ЛЕЖИТ НА ВЫПОЛНЯЕМОЙ ПРОГРАММЕ;

I ОБРАБОТКА ОШИБОК ВВОДА/ВЫВОДА. ПО УМОЛЧАНИЮ : I+
(*$I+*) -> ОШИБКИ ВВОДА/ВЫВОДА ОБРАБАТЫВАЮТСЯ ОПЕРАЦИОННОЙ СИСТЕМОЙ;
(*$I-*) -> ОБРАБОТКА ЭТИХ ОШИБОК ЛЕЖИТ НА ВЫПОЛНЯЕМОЙ ПРОГРАММЕ;
(НАПРИМЕР ПОСРЕДСТВОМ ФУНКЦИИ IORESULT ПАСКАЛЯ).

R НАБЛЮДЕНИЕ ЗА ТИПАМИ И ГРАНИЦАМИ ИНДЕКСОВ УМОЛЧАНИЕ: R-ОПРЕДЕЛЯЕТ ПОРЯДОК КОНТРОЛЯ СОБЛЮДЕНИЯ ГРАНИЦ ИНДЕКСОВ МАССИВОВ И ПРЕОБРАЗОВАНИЕ ТИПОВ ПЕРЕМЕННЫХ ВО ВРЕМЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ;
(*$R+*) -> КОНТРОЛЬ ВКЛЮЧЕН;
(*$R-*) -> КОНТРОЛЬ ВЫКЛЮЧЕН;

U ПОЛЬЗОВАТЕЛЬСКОЕ ПРЕРЫВАНИЕ . ПО УМОЛЧАНИЮ: U-(*$U+*) -> ПРЕРЫВАНИЕ ПО ^C ВО ВРЕМЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ ВОЗМОЖНО; ЗАДАНИЕ U+ УВЕЛИЧИВАЕТ ВРЕМЯ РАБОТЫ ПРОГРАММЫ;
(*$U-*) -> ПРЕРЫВАНИЕ ПО ^С НЕ ВОЗМОЖНО;

V КОНТРОЛЬ СОГЛАСОВАНИЯ ДЛИН ФОРМАЛЬНЫХ УМОЛЧАНИЕ: V+
И ФАКТИЧЕСКИХ ПАРАМЕТРОВ ТИПА STRING;
(*$V+*) -> КОНТРОЛЬ И СОГЛАСОВАНИЕ ДЛИН ВКЛЮЧЕНЫ;
(*$V-*) -> ВЫКЛЮЧЕНЫ;

W ПРИМЕНЯЕТСЯ С ЦИФРОВЫМ ПАРАМЕТРОМ УМОЛЧАНИЕ: W2 ДАННОЕ УКАЗАНИЕ ЗАДАЕТ СКОЛЬКО ЗАПИСЕЙ В ОДНОМ БЛОКЕ ДОЛЖНО БЫТЬ ОТКРЫТО. ПАРАМЕТР - ЦИФРА ОТ 0 ДО 9;

Х ОПТИМИЗАЦИЯ МАССИВОВ. УМОЛЧАНИЕ: Х+
(*$Х+*) -> ПОЛЯ ОПТИМИЗИРУЮТСЯ, ПРОГРАММА РАБОТАЕТ БЫСТРЕЕ, НО ЗАНИМАЕТ БОЛЬШЕ ПАМЯТИ;
(*$Х-*) -> ПОЛЯ НЕ ОПТИМИЗИРУЮТСЯ;

О <ИМЯ ДИСКОВОДА> ЗАДАНИЕ ОВЕРЛЕЙНОЙ СТРУКТУРЫ НА ПОИМЕНОВАННОМ ДИСКОВОДЕ.

3. НАЗНАЧЕНИЕ ПРОГРАММЫ ВЫВОДА НА ПЕЧАТЬ "TLIST".
-------------------------------------------------
ПЕЧАТЬ ИСХОДНОГО ТЕКСТА ПРОГРАММЫ НА ПАСКАЛЕ ВЫПОЛНЯЕТСЯ С ПОМОЩЬЮ ПРОГРАММЫ "TLIST".
ВЫВОД НА ПЕЧАТЬ ИСХОДНОГО ТЕКСТА ВО ВРЕМЯ КОМПИЛЯЦИИ "TURBO" НЕ ПРОИЗВОДИТ, ПОЭТОМУ, ПРИ НЕОБХОДИМОСТИ ВЫВЕСТИ ЛИСТИНГ ИСХОДНОЙ ПРОГРАММЫ СЛЕДУЕТ ВОСПОЛЬЗОВАТЬСЯ ПРОГРАММОЙ "TLIST" ИЛИ ВЫЙТИ В ОС CP/M-80 И ЗАДАТЬ ВЫВОД ЛИСТИНГА РЕЗИДЕНТНОЙ КОМАНДОЙ TYPE<ИМЯ ФАЙЛА> ПРЕДВАРИТЕЛЬНО ВКЛЮЧИВ ПРИНТЕР ПО ^P.

ЕСЛИ ЛИСТИНГ ПРОИЗВОДИТСЯ С ПОМОЩЬЮ ПРОГРАММЫ "TLIST", TO С ПОМОЩЬЮ КОМАНДЫ X (ЕXECUTE, СМ П 2.1.8.) ПРОИЗВОДИТСЯ ВЫЗОВ ЧЕРЕЗ ВСТРОЕННЫЙ ЗАГРУЗЧИК СИСТЕМЫ"TURBO" ПРОГРАММЫ "TLIST" С УКАЗАНИЕМ ИМЕНИ ФАЙЛА, КОТОРЫЙ НАДЛЕЖИТ РАСПЕЧАТАТЬ НА ПРИНТЕРЕ. СЛЕДУЕТ ИМЕТЬ В ВИДУ, ЧТО "TLIST"- АВТОНОМНАЯ ПРОГРАММА, ПОЭТОМУ В ИМЕНИ РАСПЕЧАТЫВАЕМОГО ФАЙЛА ДОЛЖЕН БЫТЬ ОБЯЗАТЕЛЬНО УКАЗАН ЕГО ТИП!(НАПРИМЕР, КОМАНДНАЯ СТРОКА ДЛЯ РАСПЕЧАТКИ ФАЙЛА EXAMPLE.PAS ИЗ "ТURBO" МОЖЕТ ИМЕТЬ ВИД: X TLIST ЕXAMPLE.PAS ).

ПРОГРАММЕ "TLIST" МОЖНО ЗАДАТЬ СЛЕДУЮЩИЕ ОПЦИИ:
L - СТРОЧКИ ПРОГРАММНОГО ТЕКСТА БУДУТ ПОСЛЕДОВАТЕЛЬНО НУММЕРОВАТЬСЯ; ЕСЛИ В ТЕКСТЕ ВСТРЕЧАЕТСЯ INCLUD-УТВЕРЖДЕНИЕ (СМ П 2.1.4.5),ТО INCLUDE-ФАЙЛЫ НУМЕРУЮТСЯ С УКАЗАНИЕМ СИМВОЛА "I" ПЕРЕД НОМЕРОМ СТРОКИ;
M - ЗАРЕЗЕРВИРОВАННЫЕ СЛОВА ПАСКАЛЯ ПОДЧЕРКИВАЮТСЯ В ТЕКСТЕ ПРОГРАММЫ И В КОММЕНТАРИЯХ; ОБЕ ОПЦИИ МОГУТ БЫТЬ ЗАДАНЫ ОДНОВРЕМЕННО.

3.1. КОМАНДЫ УПРАВЛЕНИЯ ПЕЧАТЬЮ.
--------------------------------

ТЕКСТ ИСХОДНОЙ ПРОГРАММЫ МОЖЕТ СОДЕРЖАТЬ УИВЕРЖДЕНИЯ УПРАВЛЕНИЯ ПЕЧАТЬЮ. ЭТИ УТВЕРЖДЕНИЯ ЗАПИСЫВАЮТСЯ, КАК КОММЕНТАРИИ, МЕЖДУ ФИГУРНЫМИ СКОБКАМИ (* *).
ИМЕЙТЕ В ВИДУ, ЧТО ПРИ ЗАДАНИИ УТВЕРЖДЕНИЙ УПРАВЛЕНИЯ ПЕЧАТЬЮ СИМВОЛ КОММЕНТАРИЕВ ДОЛЖЕН СТАВИТЬСЯ В ПЕРВОЙ ПОЗИЦИИ СТРОКИ!
УТВЕРЖДЕНИЯ УПРАВЛЕНИЯ ПЕЧАТЬЮ И ИХ ФУНКЦИИ ПРИВЕДЕНЫ В  НИЖЕСЛЕДУЮЩЕЙ ТАБЛИЦЕ.
---------------------------------------------------------------
ФУНКЦИЯ УТВЕРЖДЕНИЯ УПРАВЛЕНИЯ ПЕЧАТЬЮ УТВЕРЖДЕНИЕ
---------------------------------------------------------------
ДЛИНА СТРАНИЦЫ ПЕЧАТИ .PL<К-ВО СТРОК>
ПЕРЕВОД СТРАНИЦЫ. PAНОВЫЙ РАЗМЕР СТРАНИЦЫ, ЕСЛИ ДЛЯ <К-ВА СТРОК>, .CP<K-ВО СТРОК> ЗАЯВЛЕННОГО ПО .PL НЕДОСАТОЧНО МЕСТА.
<ЧИСЛО ЗНАКОВ В СТРОКЕ>-ВЫРАВНИВАНИЕ СТРОКИ ПО .PO<ЧИСЛО ЗНАКОВ> ЛЕВОМУ КРАЮ НАДЗАГОЛОВОК - СТАВИТСЯ В НАЧАЛЕ КАЖДОЙ СТРАНИЦЫ. HE<ТЕКСТ НАДЗАГ.>
ПОДЗАГОЛОВОК-СТАВИТСЯ В КОНЦЕ СТРАНИЦЫ .FO<ТЕКСТ ПОДЗАГ.>
ЗАДАНИЕ/ВЫКЛЮЧЕНИЕ ПОДЧЕРКИВАНИЯ .L-/.L+
ЗАДАНИЕ СИМВОЛА"I" В НОМЕРЕ СТРОКИ ПРИ ПЕЧАТИ INCLUDE-ФАЙЛОВ .I+/.I-
---------------------------------------------------------------

ПРИ ЗАДАНИИ УТВЕРЖДЕНИЙ УПРАВЛЕНИЯ ПЕЧАТЬЮ ПРОИСХОДИТ ПЕЧАТЬ С НУМЕРАЦИЕЙ СТРОК. ЕСЛИ НУМЕРАЦИЯ СТРОК ПРИ ВЫВОДЕ НЕ ТРЕБУЕТСЯ, СЛЕДУЕТ ЗАДАТЬ ОПЦИЮ "TLIST" "L-".
ЕСЛИ НУМЕРАЦИЯ СТРОК ПРИ ВЫВОДЕ НЕ ТРЕБУЕТСЯ, СЛЕДУЕТ ЗАДАТЬ ОПЦИЮ "TLIST" "L-".

*************************************************

РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

ЧАСТЬ II

РАСШИРЕНИЯ И ОГРАНИЧЕНИЯ "TURBO" ПО СРАВНЕНИЮ СО СТАНДАРТНЫМ ПАСКАЛЕМ

1.ЯЗЫКОВЫЕ РАСШИРЕНИЯ.
----------------------

ПРЕЖДЕ ЧЕМ ОПИСЫВАТЬ РАСШИРЕНИЯ ЯЗЫКА, СЛЕДУЕТ СДЕЛАТЬ НЕКОТОРЫЕ ВАЖНЫЕ ДЛЯ ПОЛЬЗОВАТЕЛЯ ЗАМЕЧАНИЯ:
-ТАК КАК СИСТЕМА "TURBO" НЕ ИМЕЕТ РЕДАКТОРА СВЯЗЕЙ (КОМПАНОВЩИКА),ТО ВКЛЮЧЕНИЕ ФРАГМЕНТОВ СКОМПИЛИРОВАННЫХ С TURBO-ПАСКАЛЯ ПРОГРАММ В ПРОГРАММЫ НАПИСАННЫЕ НА ДРУГИХ ЯЗЫКАХ ПРОГРАММИРОВАНИЯ- ПРИНЦИПИАЛЬНО НЕВОЗМОЖНО!!

-ТАК ЖЕ,ОБЫЧНЫМ ОБРАЗОМ, НЕВОЗМОЖНО ВКЛЮЧЕНИЕ В ИСХОДНЫЙ ТЕКСТ НА TURBO ПАСКАЛЕ ФРАГМЕНТОВ ПРОГРАММ, НАПИСАННЫХ НА ДРУГИХ ЯЗЫКАХ ПРОГРАММИРОВАНИЯ (НАПРИМЕР НА АССЕМБЛЕРЕ).
-ВСЕ ОПИСЫВАЕМЫЕ НИЖЕ РАСШИРЕНИЯ - СПЕЦИФИЧНЫ ТОЛЬКО ДЛЯ TURBO И ПРИМЕНЕНИЕ ИХ К ДРУГИМ ПАСКАЛЬ-СИСТЕМАМ,В ОБЩЕМ СЛУЧАЕ, ПРОБЛЕМАТИЧНО. (СЛЕДУЕТ ЗАМЕТИТЬ В СКОБКАХ,ЧТО ОКОНЧАТЕЛЬНОГО СТАНДАРТА ПАСКАЛЯ ПОКА ЕЩЕ НЕ СУЩЕСТВУЕТ).
-ФИРМА - РАЗРАБОТЧИК ВЕДЕТ РАБОТЫ ПО СОВЕРШЕНСТВОВАНИЮ ПРОГРАМННОГО ОБЕСПЕЧЕНИЯ, ПОЭТОМУ СОВМЕСТИМОСТЬ РАСШИРЕНИЙ БОЛЕЕ ПОЗДНИХ ВЕРСИЙ СЛЕДУЕТ ТЩАТЕЛЬНО ПЕРЕПРОВЕРЯТЬ. ОСОБЕННО ЭТО КАСАЕТСЯ ПРИМЕНЕНИЯ ПРЯМЫХ ВЫЗОВОВ ФУНКЦИЙ ОПЕРАЦИОННОЙ СИСТЕМЫ, ТАКИХ, КАК BDOS И BIOS И МАШИННООРИЕНТИРОВАННЫХ ФУНКЦИЙ (PORT, STACKPTR, MEM : ОПИСАНИЕ ЭТИХ ФУНКЦИЙ ПРИВОДЯТСЯ НИЖЕ). ЭТИ ФУНКЦИИ В TURBO НЕ ОБ'ЯВЛЯЮТСЯ В УТВЕРЖДЕНИЯХ ДЕКЛАРАЦИЙ TИПА "VAR","CONST", "LABEL","ARRAY",TYPE И Т.Д. ТАК ЖЕ В TURBO ДОПУСКАЮТСЯ НЕЧИСЛОВЫЕ МЕТКИ, В ОТЛИЧИИ ОТ ДРУГИХ ПАСКАЛЬ-ТРАНСЛЯТОРОВ, В КОТОРЫХ ВОЗМОЖНЫ ТОЛЬКО ЧИСЛОВЫЕ .

1.1. ОПЕРАТОРЫ, УПРАВЛЯЮЩИЕ РАЗМЕЩЕНИЕМ ИНФОРМАЦИИ НА ЭКРАНЕ.
-------------------------------------------------------------

ДЛЯ УПРАВЛЕНИЯ РАЗМЕЩЕНИЯ ИНФОРМАЦИЕЙ НА ЭКРАНЕ ДИСПЛЕЯ В TURBO СУЩЕСТВУЮТ СЛЕДУЮЩИЕ ПРОЦЕДУРЫ:
CLRSCR - CLEARSCREEN-ОЧИСТКА ЭКРАНА. В СТАНДАРТНОМ ПАСКАЛЕ ДЛЯ ЭТОЙ ЦЕЛИ СУЩЕСТВУЕТ ПРОЦЕДУРА "PAGE".ОЧИТСКУ ЭКРАНА В CP/M СИСТЕМАХ МОЖНО ПРОИЗВОДИТЬ ИЗ ПАСКАЛЯ С ПОМОЩЬЮ ПРОЦЕДУРЫ WRITE /WRITELN, ЗАДАВ ЕЙ ПАРАМЕТР "#12, ТО ЕСТЬ С ПОМОЩЬЮ WRITE(#12) ИЛИ WRITE(CHR(12)). ПОСЛЕ ВЫПОЛНЕНИЯ ОЧИСТКИ ЭКРАНА КУРСОР ЗАНИМАЕТ ПОЗИЦИЮ В ЛЕВОМ ВЕРХНЕМ УГЛУ (КООРДИНАТЫ X,Y - [1,1] ).

CLREOL - CLEAR UPTO END OF LINE -ОЧИСТКА ДО КОНЦА СТРОКИ .
GOTOXY(X,Y) - ПОЗИЦИОНИРОВАНИЕ КУРСОРА В ПОЗИЦИИ X СТРОКИ
Y.НАЧАЛО КООРДИНАТ НАХОДИТСЯ В ЛЕВОМ ВЕРХНЕМ УГЛУ ЭКРАНА.
DELAY(T)- ЗАДЕРЖКА ВЫПОЛНЕНИЯ ПРОГРАММЫ НА Т МИЛИСЕКУНД.

ПРОЦЕДУРЫ DELLINE, INSLINE СЛУЖАЩИЕ ДЛЯ УДАЛЕНИЯ ИЛИ ВСТАВКИ СТРОК В ПОЗИЦИИ КУРСОРА В КАЖДОМ КОНКРЕТНОМ УСТРОЙСТВЕ ДОЛЖНЫ БЫТЬ НАСТРОЕНЫ. В ОПИСЫВАЕМОМ ВАРИАНТЕ ОНИ НЕ НАСТРОЕНЫ. ОДНАКО, ДЛЯ ВЫПОЛНЕНИЯ ПОДОБНЫХ ОПЕРАЦИЙ МОЖНО ВОСПОЛЬЗОВАТЬСЯ СТАНДАРТНЫМИ КОНТРОЛЬНЫМИ ФУНЦИЯМИ CP/M-СИСТЕМ, КОТОРЫЕ МОЖНО ЗАДАТЬ ЧЕРЕЗ ПРОЦЕДУРУ WRITE С УКАЗАНИЕМ СООТВЕТСТВУЮЩЕГО ПАРАМЕТРА, КАК ЭТО ДЕЛАЛОСЬ ДЛЯ ФУНКЦИИ "ОЧИСТКА ЭКРАНА". ПОДРОБНЕЕ О
ЗАДАНИИ КОНТРОЛЬНЫХ ФУНКЦИЙ СМ П 1.2.
ДЛЯ УДОБСТВА ПОЛЬЗОВАТЕЛЕЙ ПРИВЕДЕМ НИЖЕ НЕКОТОРЫЕ ИЗ НИХ:
^L - ОЧИСТКА ЭКРАНА. (^L = #12)
^T - ОЧИСТКА ЭКРАНА ДО ПОЗИЦИИ КУРСОРА;
^H - КУРСОР НА ОДНУ ПОЗИЦИЮ ВЛЕВО;
^U - КУРСОР НА ОДНУ ПОЗИЦИЮ ВПРАВО;
^M - КУРСОР В НАЧАЛО СТРОКИ;
^J - КУРСОР НА ОДНУ СТРОКУ ВНИЗ В ТОЙ ЖЕ ПОЗИЦИИ;
^Z - КУРСОР НА ОДНУ СТРОКУ ВВЕРХ В ТОЙ ЖЕ ПОЗИЦИИ.

1.2. ЗАДАНИЕ КОНТРОЛЬНЫХ ФУНКЦИЙ ИЗ ПРОГРАММЫ.
----------------------------------------------

ДЛЯ ЗАДАНИЯ КОНТРОЛЬНЫХ ФУНКЦИЙ МОЖНО ИСПОЛЬЗОВАТЬ ИХ ПРЕДСТАВЛЕНИЕ В КОДАХ ASCII ИЛИ В ДЕСЯТИЧНОМ ВИДЕ. ЗАДАНИЕ В КОДАХ ASCII ПРОИЗВОДИТСЯ ПУТЕМ УКАЗАНИЯ СИМВОЛА ^(CONTROL), В ДЕСЯТИЧНОМ ВИДЕ ПУТЕМ УКАЗАНИЯ ЗНАКА # (ДИЕЗ) ПЕРЕД ДЕСЯТИЧНОЙ ЦИФРОЙ.
НАПРИМЕР:
CONTROL A = ^A = #1;
WRITE(^L) = WRITE(#12) - ОЧИСТКА ЭКРАНА;

IF A=^C THEN BDOS(0) - "ТЕПЛЫЙ СТАРТ"-ПЕРЕЗАГРУЗКА ОС В ПРОЦЕССЕ РАБОТЫ.
ОБРАТИТЕ ВНИМАНИЕ СИМВОЛЫ КОНТРОЛЬНЫХ ФУНКЦИЙ НЕ ТРЕБУЮТ ЗАКЛЮЧЕНИЯ ИХ В ' ' (АПОСТРОФЫ) ВНУТРИ ПРОЦЕДУРЫ ВЫВОДА WRITE.

1.3. СПЕЦИФИЧЕСКИЕ ТИПЫ ДАННЫХ.
-------------------------------

В TURBO-ПСАКАЛЕ ОПРЕДЕЛЕНЫ ДВА СПЕЦИФИЧЕСКИ ТИПА ДАННЫХ, КОТОРЫЕ ОТСУТСТВУЮТ В СТАНДАРТНОМ ПАСКАЛЕ: ТИП ДАННЫХ BYTE.
---------------
ЭТОТ ТИП ДАННЫХ ИМЕЕТ СВОИМ ЗНАЧЕНИЕМ ЦЕЛОЧИСЛЕННОЕ ЗНАЧЕНИЕ БАЙТА (ЧИСЛО ОТ 0 ДО 255).ТИП BYTE СОВМЕСТИМ С ТИПАМИ INTEGER И REAL.
ТИП ДАННЫХ STRING[ЧИСЛО]
------------------------
ЭТОТ ТИП ОПРЕДЕЛЯЕТ СИМВОЛЬНУЮ СТРОКУ ДЛИНОЙ <ЧИСЛО>.
В НОТАЦИИ ПАСКАЛЯ ТИП STRING МОЖНО ОПРЕДЕЛИТЬ, КАК TYPE STRING=PACKED ARRAY[1..<ЧИСЛО>].
В СТРОКАХ ВОЗМОЖНА МАНИПУЛЯЦИЯ ЦЕПОЧКАМИ ЗНАКОВ.

1.4. ОПЕРАЦИИ СО СТРОКАМИ ДАННЫХ (STRING) В TURBO.
--------------------------------------------------

В TURBO-ПАСКАЛЕ ДЛЯ НЕПОСРЕДСТВЕННЫХ ОПЕРАЦИЙ СО СТРОКАМИ ДАННЫХ ИМЕЮТСЯ СЛЕДУЮЩИЕ ПРОЦЕДУРЫ И ФУНКЦИИ:
ПРОЦЕДУРЫ:
---------
DELETE,INSERT,STR,VAL;

ФУНКЦИИ
-------
CONCAT,COPY,LENGTH,POS;

МАКСИМАЛЬНЫЙ РАЗМЕР СТРОКИ - 255 СИМВОЛОВ ОПРЕДЕЛЯЕТСЯ НАЛИЧИЕМ ОДНОБАЙТОВОГО ПАСПОРТА СТРОКИ.

DELETE(S,P,N) S:STRING[X]; P,N:INTEGER;
В СТРОКЕ S НАЧИНАЯ СО ЗНАКА НОМЕР P N БАЙТ УДАЛЯЮТСЯ. ЕСЛИ P БОЛЬШЕ, ЧЕМ ДЛИНА СТРОКИ, ТО ВЫПОЛНЕНИЕ ПРОГРАММЫ ПРЕРЫВАЕТСЯ С
ГЕНЕРАЦИЕЙ ОШИБКИ ВРЕМЕНИ ИСПОЛНЕНИЯ (RUN TIME ERROR).

INSERT(Q,Z,P) Q,Z:STRING; P:INTEGER;
В СТРОКУ Z С ПОЗИЦИИ P ВКЛЮЧАЕТСЯ СТРОКА Q.

STR(V,S) V:INTEGER\REAL;S:STRING;
ЧИСЛО V ПРЕОБРАЗОВЫВАЕТСЯ В ПОСЛЕДОВАТЕЛЬНОСТЬ СИМВОЛОВ S. ДАННАЯ ПРОЦЕДУРА ИЗМЕНЯЕТ ФОРМАТ ПРЕДСТАВЛЕНИЯ ЧИСЛОВЫХ ДАННЫХ, ПРЕОБРАЗУЯ ЧИСЛО ИЗ ФОРМАТА ВЕЩЕСТВЕННЫХ ИЛИ ЦЕЛЫХ ЧИСЕЛ В ФОРМАТ СИМВОЛЬНОЙ СТРОКИ. В ЭТОМ ФОРМАТЕ ПРОИЗВОДИТЬ ВЫЧИСЛЕНИЯ НЕЛЬЗЯ!
VAL(S,V,C)
S:STRING;V :INTEGER\REAL;C:INTEGER; СТРОКА S СИМВОЛОВ, ПРЕДСТАВЛЯЮЩИХ СОБОЙ ПОСЛЕДОВАТЕЛЬНОСТЬ ДЕСЯТИЧНЫХ ЦИФР ВМЕСТЕ ИЛИ БЕЗ ДЕСЯТИЧНОЙ ТОЧКИ ИЛИ СИМВОЛА "Е" ЛОГАРИФМИЧЕСКОЙ ФОРМЫ ВЕЩЕСТВЕННОГО ЧИСЛА ПРЕОБРАЗУЕТСЯ В СООТВЕТСТВУЮЩЕЕ ЦЕЛОЕ ЧИСЛО (ДЕСЯТИЧНАЯ ТОЧКА ИЛИ СИМВОЛ "Е" В СТРОКЕ СИМВОЛОВ ОТСУТСТВУЮТ) ЛИБО В ВЕЩЕСТВЕННОЕ ЧИСЛО. В СЛУЧАЕ, ЕСЛИ В ИСХОДНОЙ СТРОКЕ ВСТРЕЧАЕТСЯ ЗНАК, НЕ МОГУЩИЙ БЫТЬ ПРЕОБРАЗОВАН В ЧИСЛО, Т.Е. ОТЛИЧНЫЙ ОТ ДЕСЯТИЧНОЙ ЦИФРЫ, ДЕСЯТИЧНОЙ ТОЧКИ ИЛИ СИМВОЛА "Е",ЛИБО КОГДА СИМВОЛ "Е" ИЛИ ДЕСЯТИЧНАЯ ТОЧКА ВСТРЕЧАЮТСЯ В СТРОКЕ СИМВОЛОВ БОЛЕЕ ОДНОГО РАЗА, ТО ПРЕОБРАЗОВАНИЕ СТРОКИ В ЧИСЛО - НЕВОЗВОЖНО: ТОГДА ПАРАМЕТР "C" ПОЛУЧАЕТ ЗНАЧЕНИЕ НОМЕРА ПЕРВОГО ЗНАКА В СТРОКЕ, КОТОРЫЙ НЕВОЗМОЖНО ПРЕОБРАЗОВАТЬ В ЧИСЛО. ЕСЛИ ПРЕОБРАЗОВАНИЕ ВЫПОЛНЕНО УСПЕШНО- ПАРАМЕТР "C" ПРИНИМАЕТ НУЛЕВОЕ ЗНАЧЕНИЕ.

CONCAT(S1,S2...SN):STRING
S1...SN :STRING; КОНКАТЕНАЦИЯ - ПОСЛЕДОВАТЕЛЬНОЕ ОБ'ЕДИНЕИЕ N СТРОК В ОДНУ СТРОКУ.

COPY(S,P,N):STRING
S:STRING;P,N :INTEGER; ИЗ СТРОКИ "S",НЧИНАЯ С ПОЗИЦИИ P N ЗНАКОВ КОПИРУЕТСЯ;
НАРИМЕР S :=COPY('КРОКОДИЛ',2,3) ПРИСВОИТ S ЗНАЧЕНИЕ 'РОК'.

LENGTH(S):INTEGER; S:STRING;
ЭТА ФУНКЦИЯ ВЫЧИСЛЯЕТ ДЛИНУ СИМВОЛЬНОЙ СТРОКИ.

POS(Q,Z):INTEGER; Q,Z:STRING;
ЭТА ФУНКЦИЯ ПРОИЗВОДИТ ПОИСК ПЕРВОГО ВХОЖДЕНИЯ СТРОКИ Z В СТРОКУ Q. В РЕЗУЛЬТАТЕ ЕЕ РАБОТЫ ВОЗВРАЩАЕТСЯ НОМЕР ПЕРВОГО ЗНАКА В СТРОКЕ Q, СОВПАДАЮЩЕГО С ПЕРВЫМ ЗНАКОМ СТРОКИ Z. ЕСЛИ Z НЕ ЯВЛЯЕТСЯ ПОДСТРОКОЙ Q,ТО ФУНКЦИЯ ВОЗВРАЩАЕТ НУЛЕВОЕ ЗНАЧЕНИЕ. НАПРИМЕР N:=POS('КРОКОДИЛ','ОК').ЗДЕСЬ N ПОЛУЧИТ ЗНАЧЕНИЕ 3.

СЛЕДУЮЩИЕ ПРИМЕРЫ ДЕМОНСТРИРУЮТ ВОЗМОЖНОСТИ ОПЕРАЦИЙ СО СТРОКАМИ:

(*ДЕМОНСТРАЦИЯ МАНИПУЛЯЦИЙ СО СТРОКАМИ *)

VAR I :INTEGER;
R :REAL;
K1 :STRING[50];
K2 :STRING[20];
K3 :STRING[10];
BEGIN
CLRSCR;
WRITELN('ТЕСТОВАЯ ПРОГРАММА РАБОТЫ СО СТРОКАМИ':50);
WRITELN;
K1:='ABCDE';
I:=LENGTH(K1); (*ВЫЧИСЛЕНИЕ ДЛИНЫ АКТУАЛЬНОЙ СТРОКИ*)
WRITELN(K1,' - ',I,' ЗНАКОВ ДЛИНЫ.');
K2:='FGH';
K1:=CONCAT(K1,K2); (*КОНКАТЕНАЦИЯ ДВУХ СТРОКОВЫХ ПЕРЕМЕННЫХ*)
I:=LENGTH(K1);
WRITELN(K1,'-ТЕПЕРЬ 'I,' ЗНАКОВ ДЛИНЫ');
K3:=COPY(K1,4,3); (*КОПИРОВАНИЕ 3 ЗНАКОВ, НАЧИНАЯ С ЧЕТВЕРТОГО В АКТ.СТРОКЕ*)
WRITELN(K3,' ОБРАЗОВНА ИЗ ',К1,' С ПОЗИЦИИ 4');
K3:='E';
I:=POS(K3,K1); (*НАХОЖДЕНИЕ ПОЗИЦИИ К3 В К1*) WRITELN('В СТРОКЕ ',К1,' СТРОКА ',К3,' СТОИТ В ',I, '-TOЙ ПОЗИЦИИ');
WRITELN;
DELETE(K1,4,3); (* ИСКЛЮЧЕНИЕ ТРЕХ ЗНАКОВ ИЗ СТРОКИ К1, НАЧИНАЯ С ПОЗ.4*)
WRITELN(K1,' ПОСЛЕ ИСКЛЮЧЕНИЯ ТРЕХ ЗНАКОВ, НАЧИНАЯ С ПОЗ. 4');
K3:='XXX';
INSERT(K3,K1,4; (*ВСТАВКА СИМВОЛОВ ХХХ В СТРОКУ К1*)
WRITELN(K1,' ПОСЛЕ ВСТАВКИ СТРОКИ ',К3,' С ПОЗ.4');
K2:='12,123';
VAL(K2,R,I); (*ПРЕОБРАЗОВАНИЯ СТРОКИ ЦИФР В ЧИСЛО*)
WRITELN('R:3:3,' ',I,'=ПОЗ. ОШИБКА.ЗНАК НЕ ВЕРЕН.I>0');
K2:='12.123';
VAL(K2,R,I);
WRITELN(' СТРОКА ',K2,' ПРЕОБРАЗОВАНА В ЧИСЛО ',R:3:3);
END.

1.5. ВСТРОЕННЫЕ ЧИСЛОВЫЕ ФУНКЦИИ.
---------------------------------

В TURBO-ПАСКАЛЕ ДОПОЛНИТЕЛЬНО К СТАНДАРТНОМУ ОПРЕДЕЛЕНЫ СЛЕДУЮЩИЕ ЧИСЛОВЫЕ ФУНКЦИИ:
FRAC :ВОЗВРАЩАЕТ ВЕЩЕСТВЕННОЕ ЗНАЧЕНИЕ ДРОБНОЙ ЧАСТИ ВЕЩЕСТВЕННОГО ЧИСЛА (ОТБРАСЫВАНИЕ ЦЕЛОЙ ЧАСТИ).ЦЕЛОЧИСЛЕННАЯ ПЕРЕМЕННАЯ ЭТОЙ ФУНКЦИЕЙ ПРЕОБРАЗУЕТСЯ В НОЛЬ.

INT :ВОЗВРАЩАЕТ ЦЕЛУЮ ЧАСТЬ ВЕЩЕСТВЕННОГО ЧИСЛА В ВИДЕ ВЕЩЕСТВЕННОГО ЧИСЛА, Т.Е. ОТБРАСЫВАЕТ ДРОБНУЮ ЧАСТЬ ВЕЩЕСТВЕННОГО ЧИСЛА И ПРЕОБРАЗУЕТ ПОЛУЧЕННОЕ ЧИСЛО В ВЕЩЕСТВЕННУЮ
ФОРМУ.

ПРИМЕР:
VAR A,B,C :REAL;
D :INTEGER;
A:=1.2345;
D:=34;
B:=FRAC(D); (*ПЕРЕМЕННАЯ B ПОЛУЧИТ ЗНАЧЕНИЕ 0.0*)
C:=INT(D); (*ПЕРЕМЕННАЯ C ПОЛУЧИТ ЗНАЧЕНИЕ 34.0*)
B:=FRAC(A); (*ПЕРЕМЕННАЯ B ПОЛУЧИТ ЗНАЧЕНИЕ 0.2345 *)
C:=INT(A); (*ПЕРЕМЕННАЯ C ПОЛУЧИТ ЗНАЧЕНИЕ 1.0 *)

1.6.СТАНДАРТНЫЕ МАССИВЫ.
------------------------

В TURBO ОПРЕДЕЛЕНЫ ДВА ТИПА БАЙТОВЫХ МАССИВОВ, ДЕКЛАРАЦИЯ КОТОРЫХ ВСТРОЕНА НЕПОСРЕДСТВЕННО В КОМПИЛЯТОР, ПОЭТОМУ ССЫЛАТЬСЯ НА ЭТИ МАССИВЫ В ПРОГРАММЕ СЛЕДУЕТ БЕЗ ВСЯКИХ ПРЕДВАРИТЕЛЬНЫХ ОБ'ЯВЛЕНИЙ В УТВЕРЖДЕНИЯХ ДЕКЛАРАЦИИ ПЕРЕМЕННЫХ. ЭТИ ДВА ТИПА МАССИВОВ СУТЬ СЛЕДУЮЩИЕ:

1.6.1 PORT - УСТАНАВЛИВАЕТ ПРЯMОЕ ОБРАЩЕНИЕ К ПОРТАМ ПРОЦЕССОРА; ----------- ОБРАЩЕНИЕ:
PORT[<НОМЕР ПОРТА>]:=<ЗНАЧЕНИЕ>-ЗАСЫЛКА БАЙТА В ПОРТ <НОМЕР ПОРТА>

<ПЕРЕМЕННАЯ>:=PORT[<НОМЕР ПОРТА>]-ЧТЕНИЕ БАЙТА ИЗ ПОРТА<НОМЕР ПОРТА> В ПЕРЕМЕННУЮ <ПЕРЕМЕННАЯ>.

<ЗНАЧЕНИЕ> -ЗАДАЕТЯ ЦЕЛЫМ ЧИСЛОМ ОТ 0 ДО 255 В ДЕСЯТИЧНОЙ ИЛИ В ШЕСТНАДЦАТЕРИЧНОЙ ФОРМЕ. В ПОСЛЕДНЕМ СЛУЧАЕ ПЕРЕД ШЕСТНАДЦАТЕРИЧНЫМ ЧИСЛОМ СТАВИТСЯ ЗНАК $,НАПРИМЕР: -ПЕРЕКЛЮЧЕНИЕ ПОРТА BAB3 НА ВЫВОД ДЛИННЫХ СТРОК (480 ЗНАКОВ)- VAR GROSS,PORTNR :INTEGER; BEGIN GROSS:=$02 (*ПРИСВАИВАНИЕ ПРИЗНАКА ДЛИННОЙ СТРОКИ*) PORTNR:=$40 (*ПРИСВАИВАНИЕ НОМЕРА ПОРА*) PORT[PORTNR]:=GROSS;(*ПЕРЕКЛЮЧЕНИЕ ПОРТА НА ВЫВОД 480
ЗНАКОВ*) END.

 НОМЕРА ПОРТОВ И КОДЫ ЗНАЧЕНИЙ МОЖНО НАЙТИ В ЗАВОДСКИХ ИНСТРУКЦИЯХ ПО ТЕХНИЧЕСКОМУ ОБСЛУЖИВАНИЮ МИКРО ЭВМ ИЛИ В СПЕЦИАЛЬНОЙ ЛИТЕРАТУРЕ ПО МИКРОПРОЦЕССОРАМ INTEL 8080,KР 580, Z80 И DR.

1.6.2. MEM[<АДРЕС>] -ОДНОМЕРНЫЙ БАЙТОВЫЙ МАССИВ ЯЧЕЕК ОЗУ.
-------------------

ОБРАЩЕНИЕ К МАССИВУ:
<ПЕРЕМЕННАЯ>:=MEM[<АДРЕС>] -
ЧТЕНИЕ БАЙТА С АДРЕСОМ <АДРЕС> ИЗ ОЗУ В ПЕРЕМЕННУЮ <ПЕРЕМЕННАЯ>; MEM[<AДРЕС>]:=<ПЕРЕМЕННАЯ>I<ЗНАЧЕНИЕ>- ЗАСЫЛКА ЗНАЧЕНИЯ ПЕРЕМЕННОЙ <ПЕРЕМЕННАЯ> ИЛИ ПРЯМАЯ ЗАПИСЬ ЦЕЛОГО ЧИСЛА <ЗНАЧЕНИЕ> В ОЗУ ПО АДРЕСУ <АДРЕС>.

ТАКЖЕ,КАК И ДЛЯ МАССИВА "PORT" ЗНАЧЕНИЯ ПЕРЕМЕННЫХ - ЦЕЛЫЕ ЧИСЛА ОТ 0 ДО 255 ИЛИ ОТ $0 ДО $FF В ШЕСТНАЦАТИРИЧНОЙ ФОРМЕ.
ЗНАЧЕНИЕ АДРЕСА БАЙТА ОЗУ <АДРЕС> ЗАДАЕТСЯ ЦЕЛЫМ ЧИСЛОМ НОРМАЛЬНОЙ ДЛИНЫ (ТИП INTEGER ПАСКАЛЯ).
ПРИ ЗАДАНИИ АДРЕСА ПРИМИТЕ ВО ВНИМАНИЕ, ЧТО ПОСКОЛЬКУ ЦЕЛОЕ ЧИСЛО НОРМАЛЬНОЙ ДЛИНЫ В ПАСКАЛЕ ПРЕДСТАВЛЕНО 15 БИТАМИ ИЗ ДВУХ БАЙТОВ(ОДИН БИТЗНАК),ТО АДРЕСА ДО 32767 ИЛИ $7FFF
(2**15-1)ПРЕДСТАВЛЯЮТСЯ ПОЛОЖИТЕЛЬНЫМИ ЧИСЛАМИ, АДРЕСА ОТ 32768 ИЛИ $0800 ДО 65536 ИЛИ $FFFF ПРЕДСТАВЛЯЮТСЯ ОТРИЦАТЕЛЬНЫМИ ЧИСЛАМИ. ПРИ ЭТОМ АДРЕС 32769 ($8001) ПРЕДСТАВЛЯЕТСЯ, КАК -32767, A АДРЕС 65536,КАК -0.
ПРОГРАММИСТУ СЛЕДУЕТ ПОЛЬЗОВАТЬСЯ ПРИВЕДЕННОЙ ВЫШЕ ОСОБЕННОСТЬЮ ПРЕДСТАВЛЕНИЯ АДРЕСОВ ПРИ ПРЯМОМ ОБРАЩЕНИИ К ОЗУ ИЗ ПАСКАЛЯ TURBO. ОДНАКО, ПРИ ПОДОБНЫХ ОБРАЩЕНИЯХ МОЖНО ЗАДАВАТЬ АДРЕСА В ШЕСТНАДЦАТЕРИЧНОМ ВИДЕ, ЧТО ИЗБАВИТ ОТ НЕОБХОДИМОСТИ ВЫЧИСЛЕНИЙ ОТРИЦАТЕЛЬНЫХ ИЗОБРАЖЕНИЙ АДРЕСОВ,КАК ЭТО НЕОБХОДИМО ПРИ ДЕСЯТЕРИЧНОМ ИХ ЗАДАНИИ.
ПРМЕР ПРЯМЫХ ОБРАЩЕНИЙ К ОЗУ:
VAR I:BYTE
BEGIN
MEM[$F800]:=$41;(*ЗАПИСЬ КОНСТАНТЫ $41 ПО АДРЕСУ $F800*)
I:=MEM[$F8A1] ; (*ПЕРЕСЫЛКА СОДЕРЖИМОГО БАЙТА $F8A1 В
ПЕРЕМЕННУЮ I*)
END.


1.7. ВЫЗОВЫ ФУНКЦИЙ BDOS И BIOS ОПЕРАЦИОННОЙ СИСТЕМЫ.
-----------------------------------------------------

В TURBO ВЕРСИИ ДЛЯ CP/M Z80) СУЩЕТВУЕТ ВОЗМОЖНОСТЬ ПРЯМОГО ОБРАЩЕНИЯ К ФУНКЦИЯМ ОПЕРАЦИОННОЙ СИСТЕМЫ.

1.7.1. ПРИМЕРЫ ОБРАЩЕНИЯ К BDOS И BIOS ФУНКЦИЯМ.
------------------------------------------------

ПРИМЕЧАНИЕ: КОНКРЕТНЫЕ ФУНКЦИИ РАЗЛИЧНЫХ ВЕРСИЙ ОПЕРАЦИОННЫХ СИСТЕМ МОГУТ ОТЛИЧАТЬСЯ ОТ ПРИВОДИМЫХ В ПРИМЕРЕ, ПОЭТОМУ ДАННЫЙ ПРИМЕР, ДОЛЖЕН РАССМАТРИВАТЬСЯ ТОЛЬКО, КАК ДЕМОНСТРАЦИЯ СВОЙСТВ ,А НЕ КАК РУКОВОДСТВО К ПРАКТИЧЕСКОЙ РАБОТЕ.

PROGRAM BDOSTEST;
(*ПРЯМЫЕ ВЫЗОВЫ BDOS- И BIOS-ФУНКЦИЙ В ТУРБО-ПАСКАЛЕ*)
VAR I,J,K,DRIVE :INTEGER;
ST :STRING[80];
SIGN :BYTE;
(*$I PWIHEX.PAS*) (*INCLUDE-УТВЕРЖДЕНИЕ ССЫЛАЕТСЯ НА ФАЙЛ*)
(* В КОТОРОМ НАХОДИТСЯ ПРОГРАММА ПРЕОБРАЗОВАНИЯ ДЕС.ЧИСЕЛ В *)
(* ШЕСТНАДЦАТИРИЧНОЕ ПРЕДСТАВЛЕНИЕ "WRITE_I_HEX"*)
BEGIN
CLRSCR;
WRITELN('BDOS-ФУНКЦИИ В ТУРБО-ПАСКАЛЕ':30);
WRITELN;
I:=BDOS(12); (*BDOS-ФУНКЦИЯ 12->ПЕРЕДАЧА НОМЕРА ВЕРСИИ CP/M*)
WRITE(I,'/');(*ВЫВОД В ДЕС. ФОРМЕ N ВЕРСИИ 34 ДЛЯ CP/M 2.2*)
WRITE_I_HEX(I); (*ДЕСЯТИЧНОЕ ЗАДАНИЕ ДЛЯ I=34 НОМЕР ВЕРСИИ*)
(*-ШЕСТНАДЦАТИРИЧНОЕ ЧИСЛО $0022.ПРОЦЕДУРА *)
(*WRITE_I_HEX ВХОДИТ В ФАЙЛ PWIHEX ИЗ INCLUDE*)
WRITELN;
ST:='ЭТО - НЕКОТОРЫЙ ТЕКСТ';
J:=ADDR(ST); (*ПОЛУЧЕНИЕ АДРЕСА НАЧАЛА СТРОКИ ST В ОЗУ*)
BDOS(9,J); (*BDOS-ФУНКЦИЯ 9 ->ВЫВОД СТРОКИ ST*)
WRITELN;
WRITE(J,'/'); (*ВЫВОД ДЕСЯТИЧНОГО АДРЕСА НАЧАЛА СТРОКИ ST*)
WRITE_I_HEX(J)(*=..= ШЕСТНАДЦАТИРИЧНОГО =..= *)
WRITELN;
SIGN:=$41;(*ЗНАК => $41,T.E.БУКВА "А" В КОДЕ КОИ7 *)
BDOS(5,SIGN); (*ВЫВОД НА ПРИНТЕР БУКВЫ "А" *)
WRITELN(CHR(SIGN)); (*ВЫВОД НА ДИСПЛЕЙ БУКВЫ "A" *)
BDOS(13); (* СБРОС ДИСКЕТНОЙ СИСТЕМЫ ПРИ ЗАМЕНЕ ДИСКА*)
I:=BDOSHL(31); (*ЧТЕНИЕ АДРЕСА БЛОКА ПАР.ДИСКА (DPB) ИЗ HL*)
WRITE_I_HEX(I);(*ВЫВОД АДРЕСА DPB В ШЕСТНАДЦАТЕРИЧНОЙ ФОРМЕ*)
END.

1.8. УКАЗАТЕЛИ СТЕКОВ -POINTERS, ОПРЕДЕЛЕННЫЕ В TURBO
----------------------------------------------------

ДЛЯ ОБРАЩЕНИЙ К ОЗУ В TURBO ОПРЕДЕЛЕНЫ СЛЕДУЮЩИЕ ВСТРОЕННЫЕ УКАЗАТЕЛИ:
1) STACKPTR -УКАЗАТЕЛЬ СТЕКА ЦЕНТРАЛЬНОГО ПРОЦЕССОРА;
2) RECURPTR -УКАЗАТЕЛЬ СТЕКА ВОЗВРАТА ПРИ РЕКУРСИВНОМ ВЫЗОВЕ ПРОЦЕДУР;
3) HEAPPTR -УКАЗАТЕЛЬ "КУЧИ" -ОБЛАСТИ ПАМЯТИ РАСПРЕДЕЛЯЕМОЙ ПАСКАЛЬ КОМПИЛЯТОРОМ ДИНАМИЧЕСКИ.

ВСЕГДА СЛЕДУЕТ ПОМНИТЬ, ЧТО ВЕРХУШКИ ВЫШЕПЕРЕЧИСЛЕННЫХ СТЕКОВ РАСПОЛАГАЮТСЯ ПО ЗНАЧЕНИЮ АДРЕСОВ ТАК, ЧТО ПРИ ЛЮБЫХ ОБСТОЯТЕЛЬСТВАХ ДОЛЖНО ИМЕТЬ МЕСТО ОТНОШЕНИЕ: HEAPPTR < RECURPTR < STACKPTR.

ЕСЛИ ПРИ ОПЕРАЦИЯХ С УКАЗАТЕЛЯМИ ЭТО ОТНОШЕНИЕ ПРОГРАММИСТ НАРУШИТ, ТО МОЖЕТ ПРОИЗОЙТИ ПРЕРЫВАНИЕ ПРОГРАММЫ, ИЛИ, ПОСКОЛЬКУ ТУРБО НЕ КОНТРОЛИРУЕТ ВЫПОЛНЕНИЕ УКАЗАННОГО СООТНОШЕНИЯ, МОЖЕТ ВОЗНИКНУТЬ НАЛОЖЕНИЕ В ОЗУ ПЕРЕМЕННЫХ ОПРЕДЕЛЯЕМЫХ С ПОМОЩЬЮ ЭТИХ УКАЗАТЕЛЕЙ.(СМ ЧАСТЬ III "ДИНАМИЧЕСКИЕ ПЕРЕМЕННЫЕ И УКАЗАТЕЛИ").
НИЖЕ ПРИВОДИТСЯ ПРИМЕР(НО НЕ ДЛЯ ПРАКТИЧЕСКОГО ВЫПОЛНЕНИЯ) ИСПОЛЬЗОВАНИЯ УКАЗАТЕЛЯ СТЕКА ЦЕНТРАЛЬНОГО ПРОЦЕССОРА -STACK-PTRR.
<VAR>:INTEGER; SRACKPTR:=<VAR>; (*ЗАДАНИЕ УКАЗАТЕЛЯ СТЕКА*) <VAR>:= STACKPTR;(*ЧТЕНИЕ ЗНАЧЕНИЯ УКАЗАТЕЛЯ СТЕКА*)

ПРИМЕР:
PROGRAM STACKTEST;
(* ТЕСТОВАЯ ПРОГРАММА ЗАДАНИЯ/ЧТЕНИЯ УКАЗАТЕЛЯ СТЕКА*)
VAR I:INTEGER;
(*$I PWIHEX.PAS*) (*СМ АНАЛОГИЧНОЕ INCLUDE В П.1.7.3 *)
BEGIN
CLRSCR;
I:=0;
WRITELN('TЕСТ УКАЗАТЕЛЯ СТЕКА':46);
I:=STACKPTR;
WRITE(I,'\'); (*ВОВОД УКАЗАТЕЛЯ СТЕКА В ДЕСЯТИЧНОЙ ФОРМЕ*)
WRITE_I_HEX(I);(*ВЫВОД =..= В ШЕСТНАДЦАТИРИЧНОЙ ФОРМЕ*)
STACKPTR:=I;
WRITELN
END.

ДЛЯ ОПЕРАЦИЙ ВВОДА/ВЫВОДА ОПРЕДЕЛЕНЫ УКАЗАТЕЛИ:

------------------------------------------------------
УКАЗАТЕЛЬ СООТВЕТСТВУЮЩИЙ АДРЕСУ:
------------------------------------------------------
CONSTPTR CONST-ФУНКЦИИ BIOS
CONINPTR CONIN-ФУНКЦИИ BIOS
CONOUTPTR CONOUT-ПРОЦЕДУРЫ BIOS
LSTOUTPTR LSTOUT-ПРОЦЕДУРЫ BIOS
AUXOUTPTR AUXOUT-ПРОЦЕДУРЫ BIOS
AUXINPTR AUXIN -ФУНКЦИИ BIOS
USROUTPTR USROUT-ПРОЦЕДУРЫ BIOS
USRINPTR USRIN -ПРОЦЕДУРЫ BIOS

ВСЕ ОПЕРАЦИИ ВВОДА/ВВОДА TURBO ОСУЩЕСТВЛЯЕТ НЕПОСРЕДСТВЕННО ЧЕРЕЗ BIOS, ПОЭТОМУ ИЗ ТУРБО В ОБЫЧНЫХ УСЛОВИЯХ НЕ ВОЗМОЖНО ЗАДАНИЕ ВЫВОДА НА ПРИНТЕР СОДЕРЖИМОГО ЭКРАНА ДИСПЛЕЯ ЧЕРЕЗ
^P. ВСЛЕДСТВИЕ ЭТОГО РУТИНЫ ВВОДA/ВЫВОДА ЗАМКНУТЫ И ПРИВЕДЕННЫЕ В ТАБЛИЦЕ УКАЗАТЕЛИ ПОКАЗЫВАЮТ АДРЕСА ЭТИХ РУТИН В ОЗУ. ОБРАЩЕНИЕ К СЕРВИСНЫМ ПРОЦЕДУРАМ (РУТИНАМ) BIOS МОЖЕТ ПРОИЗВОДИТСЯ ТАКЖЕ И ЧЕРЕЗ ЭТИ УКАЗАТЕЛИ.

1.9. ЦЕПОЧНЫЕ ФАЙЛЫ(CHAIN) И ИСПОЛНЕНИЕ .COM (EXECUTE).
-------------------------------------------------------

ОПЕРАТОРЫ "CHAIN" И "EXECUTE" ПРОИЗВОДЯТ ВЫЗОВ ИЗ ИСПОЛНЯЕ МОЙ ПРОГРАММЫ ДРУГИХ ПРОГРАММ.
ФОРМАТ:CHAIN<ИМЯ ФАЙЛА>);
<ИМЯ ФАЙЛА>-НЕКОТОРЫЙ ФАЙЛ СПЕЦИАЛЬНОГО ТИПА (ТИПА ".CHAIN").ЭТОМУ ФАЙЛУ В ГЛАВНОЙ ПРОЦЕДУРЕ С ПОМОЩЬЮ ASSIGN-ФУНКЦИИ ПАСКАЛЯ НАЗНАЧАЕТСЯ ИМЯ, КОТОРОЕ ДОЛЖНО В КАЧЕСТВЕ АТРИБУТА ТИПА СОДЕРЖАТЬ АТРИБУТ ".CHAIN".КОМПИЛЯЦИЯ ЭТОГО ФАЙЛА ДОЛЖНА ПРОИЗВОДИТСЯ ОТДЕЛЬНО С УСТАНОВЛЕНИЕМ ОПЦИИ "COMPILING -> CHAIN" (СМ.ЧАСТЬ I П.2.1.11).

ПОСЛЕ ВЫПОЛНЕНИЯ ВЫЗВАННОЙ CHAIN-ПРОГРАММЫ ВОЗВРАТ В ВЫЗВАВШУЮ ЕЕ ПРОГРАММУ НЕ ПРОИЗВОДИТСЯ И ПЕРЕДАЧА ПЕРЕМЕННЫХ ИЗ ВЫЗЫВАЮЩЕЙ ПРОГРАММЫ В ВЫЗЫВАЕМУЮ НЕ ОСУЩЕСТВЛЯЕТСЯ.
ПЕРЕДАЧА ЗНАЧЕНИЙ ВОЗМОЖНА ТОЛЬКО СЛЕДУЮЩИМ ОБРАЗОМ: В ВЫЗЫВАЮЩЕЙ И ВЫЗЫВАЕМОЙ ПРОГРАММЕ ПЕРЕМЕННЫЕ, ЗНАЧЕНИЯ КОТОРЫХ НУЖНО ПЕРЕДАТЬ ДОЛЖНЫ БЫТЬ ОПРЕДЕЛЕНЫ В УТВЕРЖДЕНИЯХ ДЕКЛАРАЦИИ ПЕРЕМЕННЫХ ТОЧНО В ОДИНАКОВЫХ МЕСТАХ И В ОДИНАКОВОМ ПОРЯДКЕ В НАЧАЛЕ СПИСКА ДЕКЛАРАЦИИ.
ЕЩЕ ОДНА ВОЗМОЖНОСТЬ-ЗАДАНИЕ АБСОЛЮТНЫХ ПЕРЕМЕННЫХ. АБСОЛЮТНЫЕ ПЕРЕМЕННЫЕ - ПЕРЕМЕННЫЕ, ПОМЕЩАЕМЫЕ В СПЕЦИАЛЬНУЮ ОБЩУЮ ОБЛАСТЬ ПАМЯТИ. РАССМОТРЕНИЕ АБСОЛЮТНЫХ ПЕРЕМЕННЫХ НЕ ВХОДИТ В ЗАДАЧУ ДАННОГО ПОСОБИЯ.
ПРОГРАММА, ПОЛУЧЕННАЯ С ПОМОЩЬЮ КОМПИЛЯЦИИ В CHAIN-ФАЙЛ, НА 8 КИЛОБАЙТ КОРОЧЕ, ЧЕМ ЭКВИВАЛЕНТНАЯ ЕЙ, ПОЛУЧЕННАЯ С ПОМОЩЬЮ КОМПИЛЯЦИИ В COM-ФАЙЛ, НО СИСТЕМНЫЙ ЗАГРУЗЧИК НЕ МОЖЕТ ЗАГРУЗИТЬ CHAIN-ФАЙЛ САМОСТОЯТЕЛЬНО И ПЕРЕДАТЬ ЕМУ УПРАВЛЕНИЕ, ПОСКОЛЬКУ УКАЗАНИЯ К ЕГО ЗАГРУЗКЕ НАХОДЯТСЯ В ГЛАВНОЙ ПРОЦЕДУРЕ, ВЫЗЫВАЮЩЕЙ ЭТОТ ФАЙЛ. ИМЕНА CHAIN-ФАЙЛА И ГЛАВНОЙ ПРОЦЕДУРЫ НЕ ДОЛЖНЫ БЫТЬ ОДИНАКОВЫМИ!

EXECUTE - ОСУЩЕСТВЛЯЕТ ВЫЗОВ ВЫБРАННОЙ ПРОГРАММЫ, ИМЕЮЩЕЙ ТИП ".COM". ВЫЗЫВАЕМАЯ ПРОГРАММА ЗАГРУЖАЕТСЯ В ПОЛЬЗОВАТЕЛЬСКУЮ ЗОНУ (TPA) С АДРЕСА $100,ЗАМЕЩАЯ ТАКИМ ОБРАЗОМ В ОЗУ ВЫЗЫВАЮЩУЮ ПРОГРАММУ.
ВЫЗОВ ПРОГРАММЫ МОЖЕТ ОСУЩЕСТВЛЯТЬСЯ ЛИБО ИЗ ГЛАВНОЙ TURBO-ПРОГРАММЫ С ПОМОЩЬЮ CHAIN/EXECUTE УТВЕРЖДЕНИЙ, ЛИБО ДРУГИМ СПОСОБОМ, А ИМЕННО: ИЗ TURBO ПОМЕЩАЕТСЯ В КОМАНДНУЮ СТРОКУ С АДРЕСА $80 ЗНАЧЕНИЕ $FF, ЕСЛИ АКТИВИРУЕТСЯ КОМАНДА CHAIN ИЛИ EXECUTE. ПРИ ВЫЗОВЕ ПРОГРАММ, СКОМПИЛИРОВАННЫХ С ПОМОЩЬЮ TURBO, ИЗ ДРУГИХ НЕ-ТУРБО-ПРОГРАММ, СЛЕДУЕТ ПОМНИТЬ, ЧТО ОНИ ПРИ ВЫЗОВЕ НЕ ПЕРЕДАЮТ КОМАНДНУЮ СТРОКУ В АДРЕС $80,ПОЭТОМУ МОГУТ ВОЗНИКНУТЬ НЕПРЕДСКАЗУЕМЫЕ СИТУАЦИИ ВО ВРЕМЯ ВЫПОЛНЕНИЯ ТАКИХ ПРОГРАММ.

В СЛЕДУЮЩЕМ ПРИМЕРЕ ПРОГРАММА CHTEST ВЫЗЫВАЕТ ПРОГРАММУ CHAIN. ПРИМИТЕ ВО ВНИМАНИЕ, ЧТО В ASSIGN-ПРОЦЕДУРЕ ЗАДАЕТСЯ ПОЛНОЕ ИМЯ ВЫЗЫВАЕМОЙ ПРОГРАММЫ.

PROGRAM CHTEST;
(*ТЕСТПРОГРАММА ДЛЯ CHAIN-ФУНКЦИИ БЕЗ ПЕРЕДАЧИ ДАННЫХ*)
VAR CHFILE:FILE;
BEGIN
ASSIGN(CHFILE,'A:CHAIN.CHN');
CLRSCR;
WRITELN('ПРОГРАММА 1');
CHAIN(CHFILE);(*ВЫЗОВ ПРОГРАММЫ "CHAIN.CHN" С ДИСКА "А"*)
END.

PROGRAM CHAIN;
BEGIN
WRITELN('ПРОГРАММА 2')
END.
KAK УЖЕ ГОВОРИЛОСЬ,ФАЙЛ ТИПА ".CHAIN" НЕПОСРЕДСТВЕННО НЕ ЗАГРУЖАЕТСЯ И НЕ ИСПОЛНЯЕТСЯ!, ХОТЯ В TURBO ВЕРСИИ 2.00X И ВОЗМОЖНО С ПОМОЩЬЮ CHAIN И EXECUTE ПОСТРОЕНИЕ ОВЕРЛЕЙНЫХ ПРОГРАММ.

1.10. РАСШИРЕНИЕ ОПЕРАТОРА CASE -ВЫБОР ИЗ.
------------------------------------------

В ОПЕРАТОРЕ CASE ДОПУСКАЕТСЯ, В КАЧЕСТВЕ ЗАВЕРШАЮЩЕЙ КОНСТРУКЦИИ, АЛЬТЕРНАТИВА "ELSE".
ПРИМЕР:
VAR A:CHAR;
....
CASE A OF
'A' :WRITE('A');
'B' :WRITE('B')
ELSE WRITE(' ДРУГАЯ БУКВА.')
END;
....

1.11. ТИПИЗИРОВАННЫЕ КОНСТАНТЫ.
-------------------------------

В TURBO ВОЗМОЖНО ЗАДАНИЕ КОНСТАНТ С УКАЗАНИЕМ ИХ ТИПОВ. ТАКИЕ ТИПИЗИРОВАННЫЕ КОНСТАНТЫ МОЖНО УПОТРЕБЛЯТЬ В ПРОГРАММАХ ИЛИ, КАК НОРМАЛЬНЫЕ КОНСТАНТЫ, ИЛИ, КАК ПЕРЕМЕННЫЕ. ТИПИЗИРОВАННЫЕ КОНСТАНТЫ, К ТОМУ ЖЕ, РАЗРЕШАЕТСЯ ПРЕОБРАЗОВЫВАТЬ В ПЕРЕМЕННЫЕ.
ПРИМЕР: CONST A:INTEGER=104;
B:REAL=12.1234;
C:STRING[20]='ЭТО - ТЕКСТ';

2.СТАНДАРТНЫЕ ТЕКСТОВЫЕ ФАЙЛЫ.
-------------------------------

В КОПИЛЯТОРЕ ОПРЕДЕЛЕНЫ СТАНДАРТНЫЕ ФАЙЛЫ ТИПА "TEXT":
INPUT И OUTPUT. КАЖДОЕ ОБРАЩЕНИЕ К СТАНДАРТНЫМ ПРОЦЕДУРАМ ОБМЕНА READ/READLN ИЛИ WRITE/ WRITELN УСТАНАВЛИВАЕТ СВЯЗЬ С ЭТИМИ ФАЙЛАМИ.
СО СТАНДАРТАМИ ФАЙЛАМИ INPUT И OUTPUT СВЯЗАНЫ ЛОГИЧЕСКИ
УСТРОЙСТВА CON-КОНСОЛЬ И TRM-ТЕРМИНАЛ.
ДЛЯ ЭТИХ ФАЙЛОВ, ВООБЩЕ, ПРИМЕНЕНИЕ ПРОЦЕДУР ASSIGN, RESET,REWRITE И CLOSE - ЗАПРЕЩЕНО. УПРАВЛЕНИЕ ЭТИМИ ФАЙЛАМИ ПРОИЗВОДИТСЯ ЧЕРЕЗ ОБРАЩЕНИЕ К ИХ ИМЕНАМ В ПРОЦЕДУРАХ ВВОДА/ВЫВОДА
ПУТЕМ УКАЗАНИЯ СПЕЦИАЛЬНЫХ ПАРАМЕТРОВ В READ/READLN ИЛИ WRITE/WRITELN. ЭТИ ПАРАМЕТРЫ ВКЛЮЧАЮТСЯ В НАЧАЛО СПИСКА ВВОДА/ВЫВОДА И ОТДЕЛЯЮТСЯ ОТ НЕГО ЗАПЯТОЙ.
ПРИМЕР:
WRITE(LST,'ТЕКСТ ДЛЯ ПЕЧАТИ'); (*ВЫВОДИТ ТЕКСТ НА ПРИНТЕР*)
READLN(KBD,PASSWORD); (*ВВОД ПЕРЕМЕННОЙ PASSWORD(ПАРОЛЬ) БЕЗ ИЗОБРАЖЕНИЯ ЕЕ НА ДИСПЛЕЕ*)

ПРИМЕНЯЮТСЯ СЛЕДУЮЩИЕ УПРАВЛЯЮЩИЕ ПАРАМЕТРЫ:

INPUT -CON ИЛИ TRM НАЗНАЧАЮТСЯ.(ПЕРВОНАЧАЛЬНО ВХОДНОЙ ФАЙЛ)

OUTPUT -CON ИЛИ TRM НАЗНАЧАЮТСЯ.(ПЕРВОНАЧАЛЬНО ВЫХОДНОЙ ФАЙЛ)

CON -CON НАЗНАЧАЕТСЯ.

TRM -TRM НАЗНАЧАЕТСЯ.

KBD -НАЗНАЧАЕТ ВВОД ДАННЫХ С КЛАВИАТУРЫ БЕЗ ИХ ЭХОИЗОБРАЖЕНИЯ НА ЭКРАНЕ. ДЛЯ ВЫВОДА ДАННЫХ-НЕ ПРИМЕНИМО.

AUX -AUX НАЗНАЧАЕТСЯ. ВВОД/ВЫВОД ДАННЫХ ВОЗМОЖЕН ЧЕРЕЗ СТАНДАРТНЫЙ ПОСЛЕДОВАТЕЛЬНЫЙ КАНАЛ, КОТОРЫЙ ОБСЛУЖИВАЕТСЯ ОПЕРАЦИОННОЙ СИСТЕМОЙ. ЕСЛИ В ОПЕРАЦИОННОЙ СИСТЕМЕ ТАКОЙ КАНАЛ НЕ ПРЕДУСМОТРЕН - ПАРАМЕТР НЕ РАБОТАЕТ.

LST -В КАЧЕСТВЕ УСТРОЙСТВА ВЫВОДА НАЗНАЧАЕТСЯ ПРИНТЕР.

USR -ОПРЕДЕЛЯЮТСЯ ОПЕРАЦИИ С ФАЙЛАМИ ИНДИВИДУАЛЬНЫХ ПОЛЬЗОВАТЕЛЕЙ.

ПРОЦЕДУРЫ SEEK И FLUSH, РАВНО КАК И ФУНКЦИИ FILEPOS И FILE SIZE - НЕ ПРИМЕНИМЫ К СТАНДАРТНЫМ ФАЙЛАМ ТИПА TEXT.
ПРИ ИСПОЛЬЗОВАНИИ ФУНКЦИЙ EOLN (END OF LINE-KОНЕЦ СТРОКИ)
И ЕOF(END OF FILE-КОНЕЦ ФАЙЛА) СЛЕДУЕТ ПРИНЯТЬ ВО ВНИМАНИЕ, ЧТО ОНИ ПРОВЕРЯЮТ НА ОКОНЧАНИЕ СТРОКУ ИЛИ ФАЙЛ ПУТЕМ ПРОВЕРКИ НАЛИЧИЯ НЕКОТОРОГО СИМВОЛА (А ИМЕННО: СИМВОЛА ВОЗВРАТА КАРЕТКИ -$0D
ИЛИ ^М) ЗА ПОСЛЕДНИМ ЗНАЧАЩИМ ЛОГИЧЕСКИ СИМВОЛОМ ФАЙЛА ИЛИ СТРОКИ, ПОЭТОМУ ПРИ ВВОДЕ/ВЫВОДЕ САМИ СИМВОЛЫ КОНЦА ФАЙЛА ИЛИ КОНЦА СТРОКИ НА/С УСТРОЙСТВА ВВОДА/ВЫВОДА НЕ ЧИТАЮТСЯ!

2.1. ЗАДАНИЕ ФОРМАТНОГО ВЫВОДА В ПРОЦЕДУРАХ WRITE/WRITELN.
----------------------------------------------------------

ПРИ ОБРАЩЕНИИ С ТЕКСТОВЫМИ ФАЙЛАМИ ВОЗМОЖНО ЗАДАНИЕ ФОРМАТОВ. ФОРМАТ ЗАДАНИЯ ФОРМАТА:
WRITE(F,E) ПАРАМЕТР VAR F:TXT;
E:ШАБЛОН,ИМЕЮЩИЙ ФОРМУ E:N ИЛИ E:N:M,
ГДЕ N И M-ЦЕЛЫЕ ЧИСЛА.
E :CHAR ПОСЛЕ N-1 ПРОБЕЛОВ ВЫВОДИТСЯ СИМВОЛ;
E :STRING СТРОКА Е РАВНЯЕТСЯ ПО ПРАВОМУ КРАЮ ШАБЛОНА, ЗАДАННОГО
N ЗНАКОМЕСТАМИ.
E :BOOLEAN TRUE ИЛИ FALSE РАВНЯЮТСЯ ПО ПРАВОМУ КРАЮ ШАБЛОНА ИЗ
N ЗНАКОМЕСТ.
E :INTEGER ЗНАЧЕНИЕ Е ПЕРЕВОДИТСЯ В ДЕСЯТИЧНУЮ ФОРМУ И РАВНЯЕТ-
СЯ ПО ПРАВОМУ КРАЮ ШАБЛОНА ИЗ N ЗНАКОМЕСТ.
E :REAL ЗНАЧЕНИЕ Е ПЕРЕВОДИТСЯ В ДЕСЯТИЧНУЮ ФОРМУ И ИЗОБРАЖАЕТ-
СЯ С ВЫРАВНИВАНИЕМ ПО ПРАВОМУ КРАЮ ШАБЛОНА ИЗ N
ЗНАКОМЕСТ С M ДЕСЯТИЧНЫМИ ЗНАКАМИ ПОСЛЕ ТОЧКИ. ЕСЛИ ПАРАМЕТР M НЕ ЗАДАН, ТО ВЕЩЕСТВЕННОЕ ЧИСЛО ВЫВОДИТСЯ В ЛОГАРИФМИЧЕСКОЙ ФОРМЕ С N ЗНАКАМИ.
НЕПРАВИЛЬНОЕ ЗАДАНИЕ ПАРАМЕТРОВ ФОРМАТИРОВАНИЯ КЛАССИФИЦИРУЕТСЯ КОМПИЛЯТОРОМ, КАК СИНТАКСИЧЕСКАЯ ОШИБКА.
ПРИ ЗАДАНИИ WRITELN БЕЗ СПИСКА ПЕРЕМЕННЫХ ПРОИЗВОДИТСЯ ВЫВОД ПУСТОЙ СТРОКИ (ПЕРЕВОД СТРОКИ).

3. СУЖЕНИЯ TURBO ПО СРАВНЕНИЮ СО СТАНДАРТНЫМ ПАСКАЛЕМ.
------------------------------------------------------

В TURBO ПРОТИВ СТАНДАРТНОГО ПАСКАЛЯ СУЩЕСТВУЮТ СЛЕДУЮЩИЕ СУЖЕНИЯ:

ПРОЦЕДУРЫ PUT И GET НЕ ВКЛЮЧЕНЫ В ТРАНСЛЯТОР: ОБРАЩЕНИЕ С ДАННЫМИ ПРОИЗВОДИТСЯ С ПОМОЩЬЮ ПРОЦЕДУР WRITE/WRITELN И READ/READLN, КОТОРЫЕ ИМЕЮТСЯ И В СТАНДАРТНОМ ПАСКАЛЕ.

БЕЗУСЛОВНЫЙ ПЕРЕХОД ИЗ ПРОЦЕДУРНОГО БЛОКА ВО ВНЕ НЕ РАЗРЕШЕН.

PAGE, КАК СТАНДАРТНАЯ ПРОЦЕДУРВ НЕ ВКЛЮЧЕНА В ТРАНСЛЯТОР. ДЛЯ ОЧИСТКИ ЭКРАНА ПРИМЕНЯЕТСЯ КОМАНДА CLRSCR ИЛИ WRITE(#12).

PACKED ХОТЯ И ВКЛЮЧЕНО В СПИСОК КЛЮЧЕВЫХ СЛОВ И КОМПИЛЯТОР ЭТО СЛОВО "ПОНИМАЕТ" ,НО ДЕЙСТВИЙ НИКАКИХ НЕ ПРОИЗВОДИТ. ПРОЦЕДУРЫ PACK И UNPACK В СВЯЗИ С ЭТИМ - НЕ ВКЛЮЧЕНЫ В ТРАНСЛЯТОР.

ПРОЦЕДУРЫ И ФУНКЦИИ НЕ МОГУТ ПЕРЕДАВАТЬСЯ ПАРАМЕТРАМИ В ДРУГИЕ ПРОЦЕДУРЫ И ФУНКЦИИ.

В ПРОЦЕДУРЕ NEW НЕЛЬЗЯ ЗАДАВАТЬ СТРУКТУРУ ЗАПИСЕЙ С ВАРИАНТАМИ. ЭТО ИСКЛЮЧЕНИЕ МОЖНО ОБОЙТИ ПУТЕМ ОБРАЩЕНИЯ К ПРОЦЕДУРЕ GET- MEM.

В РЕКУРСИВНЫХ ПРОЦЕДУРАХ НЕ ДОПУСКАЮТСЯ ЛОКАЛЬНЫЕ ПЕРЕМЕННЫЕ В КАЧЕСТВЕ ПАРАМЕТРОВ.

СИВНЫХ ПРОЦЕДУРАХ НЕ ДОПУСКАЮТСЯ ЛОКАЛЬНЫЕ ПЕРЕМЕННЫЕ В КАЧЕСТВЕ ПАРАМЕТРОВ.

********************************************************

РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

ЧАСТЬ III

УКАЗАТЕЛИ И ДИНАМИЧЕСКИЕ ОПЕРАЦИИ С ПАМЯТЬЮ


1. УKAЗАТЕЛЬ (POINTER).
-----------------------

ТИП "УКАЗАТЕЛЬ" ОПРЕДЕЛЯЕТСЯ ПУТЕМ ЗАДАНИЯ ЗНАКА ^(СТРЕЛКА ВВЕРХ) СТАВЯЩЕГОСЯ ПЕРЕД ИМЕНЕМ ТИПА ПОСЛЕ ЗНАКА = В ОПРЕДЕЛИТЕЛЕ ТИПА, НАПРИМЕР: TYPE CONNECTION =^DATASTRING;.
ТИП "УКАЗАТЕЛЬ" ОПРЕДЕЛЯЕТ ДИНАМИЧЕСКИЕ ПЕРЕМЕННЫЕ, ТО ЕСТЬ, ПЕРЕМЕННАЯ (ПЕРЕМЕННЫЕ), ОБ'ЯВЛЕННЫЕ В ПРОГРАММЕ С ТИПОМ "УКАЗАТЕЛЬ" МОГУТ ЗАНИМАТЬ ПАМЯТЬ В ОЗУ ДИНАМИЧЕСКИ, БЕЗ ПРЕДВАРИТЕЛЬНОГО УКАЗАНИЯ ФАКТИЧЕСКИХ ГРАНИЦ ПЕРЕМЕННОЙ, КАК ЭТО ИМЕЕТ МЕСТО, К ПРИМЕРУ, В СЛУЧАЕ ОБ'ЯВЛЕНИЯ СТАТИЧЕСКОГО МАССИВА.
ПОСЛЕ ТОГО, КАК ПЕРЕМЕННАЯ СТАНОВИТСЯ НЕНУЖНОЙ, ОБЛАСТЬ, ЗАНИМАЕМАЯ ЕЙ МОЖЕТ БЫТЬ ОСВОБОЖДЕНА С ПОМОЩЬЮ СТАНДАРТНОЙ ПРОЦЕДУРЫ DISPOSE (<ИМЯ ДИНАМИЧЕСКОЙ ПЕРЕМЕННОЙ>);
ПЕРЕМЕННЫЕ, ИМЕЮЩИЕ ТИП "УКАЗАТЕЛЬ" МОЖНО СРАВНИВАТЬ С ПОМОЩЬЮ ОПЕРАЦИЙ = < >. РЕЗУЛЬТАТЕ СРАВНЕНИЯ ИМЕЕТ ТИП BOOLE-AN, ТАКЖЕ, КАК И ПРИ СРАВНЕНИИ НЕДИНАМИЧЕСКИХ ПЕРЕМЕННЫХ.
ДРУГИЕ ПРЯМЫЕ ОПЕРАЦИИ С УКАЗАТЕЛЯМИ ЗАПРЕЩЕНЫ.
СТАНДАРТНОЕ ЗНАЧЕНИЕ УКАЗАТЕЛЯ "NIL" МОЖЕТ БЫТЬ ДАНО ЛЮБОМУ УКАЗАТЕЛЮ."NIL" ОЗНАЧАЕТ НУЛЕВОЕ ЗНАЧЕНИЕ ДИНАМИЧЕСКОЙ ПЕРЕМЕННОЙ.
ХОТЯ ПАМЯТЬ ПОД ДИНАМИЧЕСКИЕ ПЕРЕМЕННЫЕ ВЫДЕЛЯЕТСЯ ТРАНСЛЯТОРОМ АВТОМАТИЧЕСКИ ВО ВРЕМЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ, ПРИ ОПРЕДЕЛЕНИИ УКАЗАТЕЛЯ НЕОБХОДИМО ОПИСАТЬ ОБЛАСТЬ ПАМЯТИ, ДОСТАТОЧНУЮ ДЛЯ ТОГО, ЧТОБЫ В НЕЕ МОЖНО БЫЛО ПОМЕСТИТЬ ОДНУ ПЕРЕМЕННУЮ ДАННОГО ТИПА. ЭТА ПЕРЕМЕННАЯ МОЖЕТ ИМЕТЬ КАК ПРОСТОЙ, ТАК И ПЕРЕЧИСЛИМЫЙ ИЛИ СТРУКТУРИРОВАННЫЙ ТИП.
С ПОМОЩЬЮ УКАЗАТЕЛЕЙ МОЖНО ОРГАНИЗОВЫВАТЬ СВЯЗАННЫЕ(ЦЕПОЧНЫЕ)ДИНАМИЧЕСКИЕ СТРУКТУРЫ. ДЛЯ ЭТОГО ПЕРЕМЕННАЯ, НА КОТОРУЮ ССЫЛАЕТСЯ УКАЗАТЕЛЬ, ДОЛЖНА ИМЕТЬ ТИП ЗАПИСИ (RECORD),ОДНО ИЗ ПОЛЕЙ КОТОРОЙ СОДЕРЖИТ ССЫЛКУ НА УКАЗАТЕЛЬ.
ПРИМЕР ОПРЕДЕЛЕНИЯ УКАЗАТЕЛЯ:
TYPE PERSONPOINTER =^PERSON;
PERSON = RECORD
NAME :STRING[50];(*ПОЛЕ ИМЕНИ ЛИЧНОСТИ*)
SPECIALITY :STRING[50]; (*ПОЛЕ ПОФЕССИИ *)
NEXTPERSON :PERSONPOINTER;(*ПОЛЕ ДЛЯ ССЫЛКИ НА СЛЕДУЮЩУЮ ЗАПИСЬ*)
END;
VAR
FIRSTPERSON,LASTPERSON,NEWPERSON:PERSONPOINTER;

ОПРЕДЕЛЕННЫЕ ЗДЕСЬ ПЕРЕМЕННЫЕ ИМЕЮТ ТИП УКАЗАТЕЛЕЙ (POINTER).ОНИ УКАЗЫВАЮТ НА ЗАПИСЬ, ИМЕЮЩУЮ ТИП PERSON. УПОТРЕБЛЯТЬ ПЕРЕМЕННУЮ ТИПА "УКАЗАТЕЛЬ НА ТИП" В ВЫРАЖЕНИЯХ, ГДЕ ТРЕБУЕТСЯ НЕ ССЫЛОЧНАЯ ПЕРЕМЕННАЯ МОЖНО ТОЛЬКО ПОСЛЕ ЕЕ РАЗЫМЕНОВАНИЯ С ПОМОЩЬЮ ОПЕРАТОРА ^ ,ПОМЕЩАЕМОГО ПОСЛЕ ИМЕНИ СООТВЕТСТВУЮЩЕЙ ПЕРЕМЕННОЙ. В ЭТОМ СЛУЧАЕ ПЕРЕМЕННАЯ ТИПА "УКАЗАТЕЛЬ" ПРИОБРЕТАЕТ ТОТ ТИП, КОТОРЫЙ УКАЗАН В ССЫЛКЕ, А НЕ ТИП УКАЗАТЕЛЯ.
НАПРИМЕР, ЕСЛИ ОПИСАНА ПРОЦЕДУРА ЧТЕНИЯ ЗАПИСИ GETRECORD С ФОРМАЛЬНЫМ ПАРАМЕТРОМ, ИМЕЮЩИМ ТИП PERSON, ТО ДЛЯ ЧТЕНИЯ ЗАПИСИ ОТКУДА ЛИБО С ПОМОЩЬЮ ПОЦЕДУРЫ GETRECORD (KOТОРУЮ СЛЕДУЕТ ОПИСАТЬ РАНЕЕ)В ОБЛАСТЬ ПАМЯТИ, НА КОТОРУЮ ДИНАМИЧЕСКИ УКАЗЫВАЕТ ТИП PERSONPOINTER, НУЖНО НАПИСАТЬ СЛЕДУЮЩЕЕ: NEW(FIRSTPERSON);
(*ПОЛУЧЕНИЕ ССЫЛКИ НА ОБЛАСТЬ ПАМЯТИ, ИСПОЛЬЗУЕМУЮ ДЛЯ ХРАНЕНИЯ ПЕРЕМЕННОЙ FIRSTPERSON*)
GETRECORD(FIRSTPERSON^);(*ЗАПИСЬ В ЭТУ ОБЛАСТЬ ПАМЯТИ ЗАПИСИ ТИПА PERSON ПО ССЫЛКЕ НА ИМЯ FIRSTPER-SON*)
ЗДЕСЬ СТАНДАРТНАЯ ПРОЦЕДУРА NEW, ПАРАМЕТРОМ КОТОРОЙ ДОЛЖНА БЫТЬ ПЕРЕМЕННАЯ, ИМЕЮЩАЯ ТИП УКАЗАТЕЛЯ, ВЫДЕЛЯЕТ В ОЗУ ДИНАМИЧЕСКИ ОБЛАСТЬ ПАМЯТИ ДОСТАТОЧНУЮ ДЛЯ ХРАНЕНИЯ ОДНОЙ ЗАПИСИ ТИПА
,НА КОТОРЫЙ ССЫЛАЕТСЯ УКАЗАТЕЛЬ.
ДРУГОЙ ВОЗМОЖНОСТЬЮ ДИНАМИЧЕСКОГО ВЫДЕЛЕНИЯ ОБЛАСТИ ПАМЯТИ ДЛЯ ХРАНЕНИЯ ПЕРЕМЕННЫХ, НА КОТОРУЮ ССЫЛАЕТСЯ УКАЗАТЕЛЬ, ЯВЛЯЕТСЯ УПОТРЕБЛЕНИЕ СТАНДАРТНОЙ ПРОЦЕДУРЫ GETMEM ВМЕСТО NEW.
ЭТО ПРОЦЕДУРА ИМЕЕТ ПАРАМЕТРЫ <ПЕРЕМЕННАЯ_ТИПА_УКАЗАТЕЛЬ> И <ЦЕЛОЕ ЧИСЛО>.ПЕРВЫЙ ПАРАМЕТР ДОЛЖЕН ИМЕТЬ ТИП УКАЗАТЕЛЯ НА НЕКОТОРУЮ ОБЛАСТЬ ПАМЯТИ, ВТОРОЙ-НАЗНАЧАЕТ ДЛЯ ДИНАМИЧЕСКОЙ ПЕРЕМЕННОЙ ТРЕБУЕМЫЙ РАЗМЕР ОПЕРАТИВНОЙ ПАМЯТИ В БАЙТАХ:ТАКИМ ОБРАЗОМ ПРИ УПОТРЕБЛЕНИИ ПРОЦЕДУРЫ GETMEM ОПРЕДЕЛЕНИЕ РАЗМЕРА ПАМЯТИ, ЗАНИМАЕМОГО ДИНАМИЧЕСКОЙ ПЕРЕМЕННОЙ ЛЕЖИТ НА ПРОГРАММИСТЕ, ПРИ УПОТРЕБЛЕНИИ ПРОЦЕДУРЫ NEW, ЭТУ ОПЕРАЦИЮ ВЫПОЛНЯЕТ ТРАНСЛЯТОР АВТОМАТИЧЕСКИ ХОТЯ, ВОЗМОЖНО, И НЕ САМЫМ ОПТИМАЛЬНЫМ ОБРАЗОМ.
ДИНАМИЧЕСКОЯ ПЕРЕМЕННАЯ, РАЗМЕР КОТОРОЙ УКАЗЫВАЕТСЯ, ПОМЕЩАЕТСЯ В ОБЛАСТИ ПАМЯТИ ТРАНСЛЯТОРА, НАЗЫВАЕМОЙ "КУЧЕЙ" (HEEP)."КУЧА" РАСПОЛАГАЕТСЯ В ОЗУ, НАЧИНАЯ С ПЕРВОГО СВОБОДНОГО БАЙТА (ЗНАЧИТ ЗА ПРОГРАММНЫМ ТЕКСТОМ) И ПРОСТИРАЕТСЯ ДО БАЙТА С
НАИВЫСШИМ АДРЕСОМ (ДЛЯ ВОСЬМИБИТОВЫХ ПРОЦЕССОРОВ ЭТОТ АДРЕС РАВЕН $FFFF ).
ТРАНСЛЯТОР TURBO УПРАВЛЯЕТ "КУЧЕЙ" С ПОМОЩЬЮ ЗНАЧЕНИЯ ТАК НАЗЫВАЕМОГО УКАЗАТЕЛЯ "КУЧИ" (HEEPPOINTER),КОТОРЫЙ СТАВИТСЯ В НАЧАЛО ПРОГРАММЫ И УКАЗЫВАЕТ НА ПЕРВЫЙ СВОБОДНЫЙ В "КУЧЕ" АДРЕС.

ПРИ КАЖДОМ УПОТРЕБЛЕНИИ NEW ИЛИ GETMEM УКАЗАТЕЛЬ "КУЧИ" БУДЕТ АВТОМАТИЧЕСКИ (В СЛУЧАЕ УПОТРЕБЛЕНИЯ NEW) , ИЛИ "ВРУЧНУЮ"(В СЛУЧАЕ ИСПОЛЬЗОВАНИЯ GETMEM) УСТАНАВЛИВАТЬСЯ НА НОВЫЙ ПЕРВЫЙ СВОБОДНЫЙ В "КУЧЕ" БАЙТ.
СТАНДАРТНАЯ ФУНКЦИЯ МЕМAVAIL (MEMORY AVAILABLE-ДОСТУПНАЯ ПАМЯТЬ) ВОЗВРАЩАЕТ ЦЕЛОЕ ЗНАЧЕНИЕ РАЗМЕРА "КУЧИ" В БАЙТАХ, СВОБОДНОЙ К ДАННОМУ МОМЕНТУ.ФУНКЦИЯ НЕ ИМЕЕТ ПАРАМЕТРОВ.
СТАНДАРТНАЯ ФУНКЦИЯ MAXAVAL (MAXIMUM AVALABLE-MAКСИМАЛЬНО ДОСТУПНЫЙ) ВОЗВРАЩАЕТ ЦЕЛОЕ ЗНАЧЕНИЕ РАВНОЕ МАКСИМАЛЬНОМУ РАЗМЕРУ КУЧИ,НАЗНАЧЕННОЙ ТРАНСЛЯТОРОМ В ДАННОЙ ПРОГРАММЕ, ПОСКОЛЬКУ РАЗМЕР "КУЧИ" ЗАВИСИТ И ОТ ДЛИНЫ ПРОГРАММЫ: ЧЕМ БОЛЬШЕ МЕСТА В
ОЗУ ЗАНИМАЕТ ТЕКСТ ПРОГРАММЫ, ТЕМ МЕНЬШЕ ОСТАЕТСЯ ПАМЯТИ ДЛЯ ПЕРЕМЕННЫХ ПРОГРАММЫ-"КУЧИ".
СТАНДАРТНЫЕ ФУНКЦИИ ORD (ORDER -ПОРЯДОК) И PTR (POINTER-УКАЗАТЕЛЬ) СЛУЖАТ ДЛЯ ВЗАИМНОГО ПРЕОБРАЗОВАНИЯ УКАЗАТЕЛЕЙ В ЦЕЛОЧИСЛЕННЫЕ ПЕРЕМЕННЫЕ И ОБРАТНО.
ORD(<POINTER>)-ВОЗВРАЩАЕТ ЦЕЛОЕ ЗНАЧЕНИЕ СОДЕРЖАЩЕГОСЯ В УКАЗАТЕЛЕ АДРЕСА.
PTR(<ЦЕЛОЧИСЛЕННАЯ ПЕРЕМЕННАЯ>)-ПРЕОБРАЗУЕТ ЦЕЛОЧИСЛЕННУЮ ПЕРЕМЕННУЮ В УКАЗАТЕЛЬ, КОТОРЫЙ ИСПОЛЬЗУЕТ ЭТУ ПЕРЕМЕННУЮ В КАЧЕСТВЕ АДРЕСА.
ОСВОБОЖДЕНИЕ ДИНАМИЧЕСКИ ЗАНЯТОЙ ПАМЯТИ, КАК УЖЕ ГОВОРИЛОСЬ ВЫШЕ, МОЖЕТ ОСУЩЕСТВЛЯТЬСЯ С ПОМОЩЬЮ СТАНДАРТНОЙ ПРОЦЕДУРЫ DIS-POSE, ПАРАМЕТРОМ КОТОРОЙ ЯВЛЯЕТСЯ ПЕРЕМЕННАЯ ,СОЗДАННАЯ ПРОЦЕДУРOЙ NEW. КРОМЕ ЭТОЙ ПРОЦЕДУРЫ ИМЕЕТСЯ ЕЩЕ И ДРУГАЯ ВОЗМОЖНОСТЬ ОСВОБОЖДЕНИЯ ДИНАМИЧЕСКИ ЗАНЯТОЙ ПАМЯТИ : ПРОЦЕДУРЫ MARK/RELEA-SE. ЕСЛИ ПАМЯТЬ ЗАНЯТА ДИНАМИЧЕСКИ С ПОМОЩЬЮ ПРОЦЕДУРЫ GETMEM, ТО ОСВОБОЖДАТЬ ЕЕ НАДО С ПОМОЩЬЮ ПРОЦЕДУРЫ FREEMEM. В ЭТОМ СЛУЧАЕ НУЖНО УКАЗАТЬ В ПРОЦЕДУРЕ FREEMEM В ТОЧНОСТИ ТУ ОБЛАСТЬ ПАМЯТИ, КОТОРАЯ БЫЛА ЗАДАНА В СООТВЕТСТВУЮЩЕЙ ПРОЦЕДУРЕ GETMEM ОБОИМИ ПАРАМЕТРАМИ .
ОСВОБОЖДЕНИЕ ДИНАМИЧЕСКОЙ ПЕРЕМЕННОЙ В ОЗУ ОСУЩЕСТВЛЯЕТСЯ ПРИ ОДНОМ ОБРАЩЕНИИ К ОСВОБОЖДАЮЩИМ ПРОЦЕДУРАМ ТОЛЬКО ОДНОЙ, А ИМЕННО ПОСЛЕДНЕЙ, РАСПОЛОЖЕННОЙ В ПАМЯТИ ПЕРЕМЕННОЙ: ОСВОБОЖДЕНИЕ ПЕРЕМЕННОЙ В СЕРЕДИНЕ "КУЧИ" НЕВОЗМОЖНО. ЭТО ПРОИСХОДИТ ПОТОМУ, ЧТО ДИНАМИЧЕСКИЕ ПЕРЕМЕННЫЕ ЗАГРУЖАЮТСЯ В ПАМЯТЬ ПО ТИПУ СТЕКА :ПЕРВЫЙ ВОШЕЛ-ВЫШЕЛ ПОСЛЕДНИЙ.
ДИНАМИЧЕСКИ ЗАНЯТАЯ ПАМЯТЬ ОСВОБОЖДАЕТСЯ ДВУМЯ СПОСОБАМИ: С ПОМОЩЬЮ ПРОЦЕДУРЫ DISPOSE(<ПЕРЕМЕННАЯ ТИПА УКАЗАТЕЛЬ>) ВСЕ ПЕРЕМЕННЫЕ POINTER-ТИПА ОСВОБОЖДАЮТСЯ И ДОСТУП К НИМ БОЛЕЕ НЕВОЗМОЖЕН.

С ПОМОЩЬЮ ПРОЦЕДУРЫ MARK(<ПЕРЕМЕННАЯ ТИПА УКАЗАТЕЛЬ>) POINTER-ПЕРЕМЕННАЯ ПОМЕЧАЕТСЯ, А ЗАТЕМ ОНА МОЖЕТ БЫТЬ УДАЛЕНА ИЗ "КУЧИ" ПРОЦЕДУРОЙ RELEASE(<ПЕРЕМЕННАЯ ТИПА УКАЗАТЕЛЬ>).ТАКИМ ОБРАЗОМ, ДО УДАЛЕНИЯ С ПОМОЩЬЮ ЭТОЙ ПРОЦЕДУРЫ ДИНАМИЧЕСКАЯ ПЕРЕМЕННАЯ ПРОДОЛЖАЕТ БЫТЬ ДОСТУПНОЙ. ДЛЯ ВЫЧИСЛЕНИЯ АБСОЛЮТНОГО АДРЕСА КАКОЙ-ЛИБО ПЕРЕМЕННОЙ ПРОГРАММЫ СУЩЕСТВУЕТ СТАНДАРТНАЯ ФУНКЦИЯ ADR(<ИМЯ ПЕРЕМЕННОЙ>):ЭТА ФУНКЦИЯ ВОЗВРАЩАЕТ ЦЕЛОЕ ДЕСЯТИЧНОЕ ЗНАЧЕНИЕ АДРЕСА ПЕРЕМЕННОЙ. ЕСЛИ ПЕРЕМЕННАЯ ИМЕЕТ СТРУКТУРНЫЙ ТИП, ТО ВОЗВРАЩАЕТСЯ АДРЕС ПЕРВОГО БАЙТА ЭТОЙ ПЕРЕМЕННОЙ.
ВОЗМОЖНО ТАКЖЕ ВОЗВРАЩЕНИЕ АДРЕСОВ ЧАСТЕЙ СТРУКТУР: ЭЛЕМЕНТОВ МАССИВОВ, ПОЛЕЙ В ЗАПИСЯX И Т.Д.

2. ОБЛАСТЬ ПАМЯТИ "КУЧА" И СТЕКИ.
---------------------------------

УКАЗАТЕЛЬ СТЕКА (STACKPOINTER) ОПРЕДЕЛЯЕТ СВОБОДНОЕ МЕСТО В "КУЧЕ" С НАИВЫСШИМ АДРЕСОМ.
УКАЗАТЕЛЬ РЕКУРСИИ (RECURPTR) ПОКАЗЫВЕТ АДРЕС НА 1 КИЛОБАЙТ МЕНЬШЕ (400 HEX),ЧЕМ STACKPOINTER.
СИСТЕМА ПРОВЕРЯЕТ ПРИ КАЖДОМ ОБРАЩЕНИИ К ПРОЦЕДУРАМ NEW/GETMEM ИЛИ К РЕКУРСИВНЫМ ПРОЦЕДУРАМ ВЫПОЛНЯЕТСЯ ЛИ СООТНОШЕНИЕ: HE APPTR<RECURPTR. В СЛУЧАЕ ,ЕСЛИ ЭТО СООТНОШЕНИЕ НЕ ВЫПОЛНЯЕТСЯ-ГЕНЕРИРУЕТСЯ СООБЩЕНИЕ ОБ ОШИБКЕ ВРЕМЕНИ ИСПОЛНЕНИЯ (RUN TIME ERROR).
ПРОВЕРКА УСЛОВИЯ :НАХОДИТСЯ ЛИ УКАЗАТЕЛЬ СТЕКА (STACKPTR) ДАЛЬШЕ, ЧЕМ УКАЗАТЕЛЬ РЕКУРСИИ (RECURPTR) НЕ ПРОИЗВОДИТСЯ. ТАКАЯ ПРОВЕРКА МОЖЕТ ОКАЗАТЬСЯ НЕОБХОДИМОЙ, КОГДА РЕКУРСИВНАЯ ПРОЦЕДУРА СЕБЯ ВЫЗЫВАЕТ БОЛЕЕ ЧЕМ 300-400 РАЗ. В ЭТОМ СЛУЧАЕ УКАЗАТЕЛЬ СТЕКА ДОЛЖЕН БЫТЬ ПЕРЕДВИНУТ В СТОРОНУ УВЕЛИЧЕНИЯ. ДЛЯ ЭТОГО НУЖНО ВЫПОЛНИТЬ СЛЕДУЮЩУЮ ОПЕРАЦИЮ ПРИСВАИВАНИЯ НОВОГО ЗНАЧЕНИЯ УКАЗАТЕЛЮ РЕКУРСИИ:
RECURPTR:=STACKPTR-2*MAXDEPTH-512,
ГДЕ: MAXDEPTH-ОЖИДАЕМАЯ МАКСИМАЛЬНАЯ ГЛУБИНА РЕКУРСИИ В ПРОГРАММЕ,
512 -УВЕЛИЧЕНИЕ ПАМЯТИ (В БАЙТАХ),ПРЕДНАЗНАЧЕННОЙ ДЛЯ ХРАНЕНИЯ ПАРАМЕТРОВ И ВНЕШНИХ ССЫЛОК.

3 . РАСПРЕДЕЛЕНИЕ ПАМЯТИ.
-------------------------

3.1.РАСПРЕДЕЛЕНИЕ ОЗУ ПРИ КОМПИЛЯЦИИ В ПАМЯТЬ

(ОПЦИЯ КОМПИЛЯТОРА "COMPILE -->MEMORY)
+-------------------------------+ АДРЕС ОЗУ 0000 HEX
I I <- CP/M(ЗОНА СВЯЗИ)
+-------------------------------+
I I <- БИБЛИОТЕКА ПАСКАЛЯ
+-------------------------------+
I I <- ИНТЕРФЕЙС TURBO,
I I КOМПИЛЯТОР
+-------------------------------+
I I <- СООБЩЕНИЯ ОБ ОШИБКАХ,
I I ЕСЛИ ОНИ ЗАГРУЖЕНЫ
+-------------------------------+
I I <- ТЕКСТ ПРОГРАММЫ
I I
+-------------------------------+
I I
I I <- ОБ'ЕКТНЫЕ КОДЫ. РАСПОЛ.
I I " СНИЗУ-ВВЕРХ" ЗА НАИ-
I I НИЗШ.АДРЕСОМ ТАБЛ. ИМЕН
+-------------------------------+
I I <- ТАБЛИЦЫ ИМЕН РАСПОЛ.
I I "СВЕРХУ-ВНИЗ", НАЧИНАЯ С
I I НАИВЫСШЕГО АДРЕСА,ЗАНЯ-
+-------------------------------+ ТОГО ОБ'ЕКТ. КОДАМИ
I I СТЕК ЦП
+-------------------------------+
I I CP/М(BIOS,BDOS И
I I ДР.ПРОГРАММЫ)
I I
+-------------------------------+ НАИВЫСШИЙ АДРЕС ОЗУ (FFFFH)

3.2. РАСПРЕДЕЛЕНИЕ ПАМЯТИ ПРИ КОМПИЛЯЦИИ НА ДИСКЕТУ (ОПЦИЯ КОМПИЛЯТОРА COMPILE-->COMFILE)

РАСПРЕДЕЛЕНИЕ ПАМЯТИ В ЭТОМ СЛУЧАЕ ИДЕТИЧНО ПУНКТУ 3.1 ДО АДРЕСА, ГДЕ ЗАКАНЧИВАЕТСЯ ИСХОДНЫЙ ТЕКСТ ПРОГРАММЫ НА ПАСКАЛЕ. РАСПОЛОЖЕНИЕ ОБ'ЕКТНЫХ КОДОВ ОТНОСИТЕЛЬНО НЕБОЛЬШОГО БУФЕРА ВЫВОДА, В КОТОРЫЙ ПОМЕЩАЮТСЯ ЗАПИСИ ТРАНСЛИРУЕМОЙ ПРОГРАММЫ, НАХОДИТСЯ В ОЗУ НА ТОМ МЕСТЕ, ГДЕ В РЕЖИМЕ КОМПИЛЯЦИИ 3.1. РАСПОЛАГАЛИСЬ БЫ ОБ'ЕКТНЫЕ КОДЫ ВСЕЙ ОТТРАНСЛИРОВАННОЙ ПРОГРАММЫ. ПОСКОЛЬКУ, КАК УЖЕ ГОВОРИЛОСЬ, ВЫХОДНОЙ БУФЕР ПОЧТИ ВСЕГДА МЕНЬШЕ, ЧЕМ ВСЯ ПРОГРАММА, МЕСТА В ОЗУ ОН ЗАНИМАЕТ МЕНЬШЕ. ИСКЛЮЧЕНИЕ СОСТАВЛЯЕТ ТОТ СЛУЧАЙ, КОГДА ИСХОДНАЯ ПРОГРАММА МАЛА НАСТОЛЬКО, ЧТО ОБ'ЕКТНАЯ (ОТТРАНСЛИРОВАННАЯ) ПРОГРАММА ЗАЙМЕТ МЕСТА МЕНЬШЕ, ЧЕМ ВЕЛИЧИНА ВЫХОДНОГО БУФЕРА.

3.3.РАСПРЕДЕЛЕНИЕ ПАМЯТИ В ЗАГРУЖЕННОЙ
ОБ'ЕКТНОЙ ПРОГРАММЕ.

ДО КОНЦА ИСХОДНОГО ТЕКСТА НА ПАСКАЛЕ РАСПРЕДЕЛЕНИЕ ПАМЯТИ В ОЗУ АНАЛОГИЧНО ПУНКТАМ 3.1 И 3.2.
ИСХОДНЫЙ ТЕКСТ НА ПАСКАЛЕ ОСТАЕТСЯ В ОЗУ ПРИ ВЫПОЛНЕНИИ ПРОГРАММЫ, ОТТРАНСЛИРОВАННОЙ НЕПОСРЕДСТВЕННО В ПАМЯТЬ. ЗА ИСХОДНЫМ ТЕКСТОМ ИМЕЕТ МЕСТО СЛЕДУЮЩЕЕ РАСПРЕДЕЛЕНИЕ ПАМЯТИ:

I I <- ИСХОДНЫЙ ТЕКСТ НА ПАСКАЛЕ
+------------------------------+
I I <- ОБ'ЕКТНЫЕ КОДЫ ПРОГРАММЫ
I I
I I
+------------------------------+ <- НАЧАЛО "КУЧИ":ВЕРШИНА ЕЕ
I I РАСПОЛАГАЕТСЯ В НАИВЫСШЕМ
I I СВОБОДНОМ АДРЕСЕ.
I I^RECURPTR
+------------------------------+<- ВЕРШИНА УКАЗАТЕЛЯ РЕКУРСИИ
I I
I I ^ STACKPTR
+------------------------------+<- ВЕРШИНА УКАЗАТЕЛЯ СТЕКА
I I<- ГЛАВНАЯ ТАБЛИЦА ИМЕН:НАЧ.
I I С НИЗШЕГО АДРЕСА.
+------------------------------+
I I <-ОПЕРАЦИОННАЯ СИСТЕМА CP/М
+------------------------------+

3.4. РАСПРЕДЕЛЕНИЕ ПАМЯТИ ПРИ ВЫПОЛНЕНИИ
КОМАНДНЫХ ФАЙЛОВ (COM-FILES)

+-------------------------+
I I ОС CP/М (ЗОНА СВЯЗИ)
+-------------------------+ <- 100 HEX
I I <-БИБЛИОТЕКА ПАСКАЛЯ-8К И,ВОЗМО-
I I ЖНО,АБСОЛЮТНЫЕ ПЕРЕМЕННЫЕ.
+-------------------------+ <- СТАРТОВЫЙ АДРЕС ПРОГРАММЫ
I I <-ОБ'ЕКТНЫЕ КОДЫ
I I
+-------------------------+ <-ВЕРШИНА УКАЗАТЕЛЯ "КУЧИ"
I I РАБОЧАЯ ОБЛАСТЬ "КУЧИ"
I I
+-------------------------+ <-УКАЗАТЕЛЬ ВЕРШИНЫ СТЕКА РЕКУ-
I I РСИИ
I I ОБЛАСТЬ СТЕКА РЕКУРСИИ
+-------------------------+ <-УКАЗАТЕЛЬ ВЕРШИНЫ СТЕКА ПРЦЕС-
I I СОРА.СТЕК ПРОЦЕССОРА.
+-------------------------+<- ГЛАВНАЯ ТАБЛИЦА ИМЕН
I I <-ВСТРОЕННЫЙ ЗАГРУЗЧИК TURBO
+------------------------ +
I I ОС CP/M
+-------------------------+


----------- +
I I ОС CP/M
+-------------------------+

 

 *** ORIONSOFT ***

 

Купить платы, наборы микросхем на Орион-128, КР565РУ5В, КР565ру7В, к565ру5г AU, к565ру7г Au в позолоте, куплю микросхемы, Z80, микропроцессоры и микроконтроллеры

 

Полезные и интересные статьи

На предыдущую страницу  На главную страницу  На следующую страницу