      -------------------------------------------------------------------------
      !                                                                       !
      !                                                                       !
      !            УТВЕРЖДЕН                                                  !
      !                                                                       !
      !       00014 - 01.33.02-ЛУ                                             !
      !                                                                       !
      !                                                                       !
      !                                                                       !
      !                                                                       !
      !                                                                       !
      !                                                                       !
      !                                                                       !
      !                                                                       !
      !                                                                       !
      !                                                                       !
      !                                                                       !
      !                       ИЗДЕЛИЯ  ПРОГРАММНЫЕ                            !
      !                                                                       !
      !                        "ИНТЕЛЛЕКТ  -  3"                              !
      !                                                                       !
      !                            ФОРТАРАН                                   !
      !                                                                       !
      !                                                                       !
      !                     РУКОВОДСТВО  ПРОГРАММИСТА                         !
      !                                                                       !
      !                        00014 - 01.33.02                               !
      !                                                                       !
      !                            ЛИСТОВ 60                                  !
      !                                                                       !
      !                                                                       !
      !                                                                       !
      !                                                                       !
      !                                                                       !
      !                                                                       !
  ----!                                                                       !
  ! ! !                                                                       !
  ! ! !                                                                       !
  ! ! !                                                                       !
  ! ! !                                                                       !
  ! ! !                                                                       !
  ! ! !                                                                       !
  ! ! !                                                                       !
  !-+-!                                                                       !
  ! ! !                                                                       !
  ! ! !                                                                       !
  ! ! !                                                                       !
  ! ! !                                                                       !
  ! ! !                                                                       !
  !-+-!                                                                       !
  ! ! !                                                                       !
  ! ! !                                                                       !
  ! ! !                                                                       !
  ! ! !                                                                       !
  ! ! !                                                                       !
  !-+-!                                                                       !
  ! ! !                                                                       !
  ! ! !                                                                       !
  ! ! !                                                                       !
  ! ! !                                1990                                   !
  ! ! !                                                                       !
  ! ! !                                                                       !
  ! ! !     ПЕРВИЧ. ПРИМЕНЕН.                            ЛИТЕРА О             !
  !-+-!     00014-01.00.01                                                    !
  ! ! !                                                                       !
  ! ! !                                                                       !
  ! ! !                                                                       !
  ! ! !                                                                       !
  ! ! !                                                                       !
  -----------------------------------------------------------------------------

                              - 2 -

                          00014-01.33.02



                           АННОТАЦИЯ



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

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





        ПРИМЕЧАНИЕ: ПЕРЕД  РАБОТОЙ  С  ЯЗЫКОМ  ФОРТРАН-иж НУЖНО
                    СГЕНЕРИРОВАТЬ  СИСТЕМУ,  КОТОРАЯ ВКЛЮЧАЕТ В
                    СЕБЯ ПРОГРАММУ сыслиб.обй.
















































                               - 3 -

                          00014-01.33.02



                            СОДЕРЖАНИЕ


        АННОТАЦИЯ                                       2

1. НАЗНАЧЕНИЕ И УСЛОВИЯ ПРИМЕНЕНИЯ                      6

2. ХАРАКТЕРИСТИКИ ПРОГРАММЫ                             6

2.1. КОД, СОЗДАВАЕМЫЙ КОМПИЛЯТОРОМ                      6

3. ОБРАЩЕНИЕ К ПРОГРАММЕ                                7

3.1. КЛЮЧИ КОМАНДНОЙ СТРОКИ КОМПИЛЯТОРА
     фортран.                                           7

4. ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ                           10

4.1. СПЕЦИФИКАЦИИ ФАЙЛА                                10
4.2. ФОРМАТ ЛИСТИНГА                                   10
4.2.1. ЛИСТИНГ ИСПОЛЬЗУЕМЫХ КЛЮЧЕЙ                     12
4.2.2. ИСХОДНЫЙ ЛИСТИНГ                                13
4.2.3. ЛИСТИНГ КАРТЫ ПАМЯТИ                            13
4.2.4. ЛИСИНГ ГЕНЕРИРУЕМОГО КОДА                       13
4.2.5. СТАТИСТИКА ТРАНСЛЯЦИИ                           14

5. КОМПАНОВКА, ВЫПОЛНЕНИЕ И ОТЛАДКА ПРОГРАММ           14

5.1. ИСПОЛЬЗОВАНИЕ ПАМЯТИ КОМПИЛЯТОРОМ                 14
5.2. ПРОЦЕДУРА КОМПАНОВКИ                              15
5.3. ИСПОЛЬЗОВАНИЕ БИБЛИОТЕК                           15
5.4. ИСПОЛЬЗОВАНИЕ ОВЕРЛЕЯ                             16
5.4.1. ПЕРЕДАЧА УПРАВЛЕНИЯ                             16
5.4.2. ИСПОЛЬЗОВАНИЕ БЛОКОВ цоммон                     17
5.4.3. ПОСТРОЕНИЕ ОВЕРЛЕЙНОЙ СТРУКТУРЫ                 17
5.4.4. ПРИМЕР                                          18
5.5. ВЫПОЛНЕНИЕ ПРОГРАММЫ                              19
5.6. ОТЛАДКА ПРОГРАММЫ                                 19

6. УВЕЛИЧЕНИЕ ЭФФЕКТИВНОСТИ ПРОГРАММИРОВАНИЯ           20

6.1. ФАКТОРЫ, ВЛИЯЮЩИЕ НА ЭФФЕКТИВНОСТЬ
     ПРОГРАММИРОВАНИЯ                                  20
6.2. ПОВЫШЕНИЕ ЭФФЕКТИВНОСТИ ТРАНСЛЯЦИИ                21
6.2.1. ОБЕСПЕЧЕНИЕ ЛУЧШЕГО ИСПОЛЬЗОВАНИЯ
       ОПТИМИЗАТОРА (ПАМЯТЬ, ВРЕМЯ)                    21
6.2.2. ПЕРЕДАЧА АРГУМЕНТОВ В ПОДПРОГРАММЫ
       (ПАМЯТЬ, ВРЕМЯ)                                 21
6.2.3. ОПЕРАТОРЫ-ФУНКЦИИ (ВРЕМЯ)                       22
6.2.4. МИНИМИЗАЦИЯ ПАМЯТИ ТАБЛИЦЫ ВЕКТОРОВ
       МАССИВА (ПАМЯТЬ)                                22
6.2.5. ИСПОЛЬЗОВАНИЕ МНОГОМЕРНЫХ МАССИВОВ





                              - 4 -

                          00014-01.33.02




         (ВРЕМЯ)                                       23
6.2.6.   ФОРМАТНЫЙ ВВОД-ВЫВОД (ПАМЯТЬ, ВРЕМЯ)          24
6.2.7.   ВЫБОР ТИПА ДАННЫХ (ПАМЯТЬ, ВРЕМЯ)             24
6.2.8.   ОПЕРАЦИИ СРАВНЕНИЯ (ПАМЯТЬ)                   24
6.2.9.   ОПЕРАЦИИ УМНОЖЕНИЯ НА ДВА И ВОЗВЕДЕНИЕ
         В КВАДРАТ (ВРЕМЯ)                             25
6.2.10.  ИСПОЛЬЗОВАНИЕ КЛЮЧЕЙ КОМПИЛЯТОРА
         (ПАМЯТЬ, ВРЕМЯ)                               25
6.3.     ТЕХНИКА ПРОГРАММИРОВАНИЯ                      27

7.       СТРУКТУРА ПРОГРАММЫ                           30

7.1.     ПРОГРАММНЫЕ СЕКЦИИ                            30
7.1.1.   ИСПОЛЬЗОВАНИЕ псет                            30
7.1.2.   ИСПОЛЬЗОВАНИЕ псет В БЛОКАХ цоммон            31
7.1.3.   ИСПОЛЬЗОВАНИЕ ПРОГРАММНЫХ СЕКЦИЙ В
         БИБЛИОТЕКЕ отс                                31
7.1.4.   ПОРЯДОК "псецт" В ВЫПОЛНЯЕМЫХ
         ПРОГРАММАХ                                    32

8.       НАСТРОЙКА ПРОГРАММЫ                           33

8.1.     КОМПАНОВКА ПРОГРАММ                           33
8.1.1.   ПЕРЕДАЧА УПРАВЛЕНИЯ И ДАННЫХ.                 33
8.1.2.   ИСПОЛЬЗОВАНИЕ РЕГИСТРОВ                       35
8.2.     ОРГАНИЗАЦИЯ ПАМЯТИ ВО ВРЕМЯ ВЫПОЛНЕНИЯ        35

9.       ПРОВЕРКА ПРОГРАММЫ                            36

9.1.     ТРАССИРОВКА ОШИБОК                            36

10.      ОСОБЕННОСТИ ЯЗЫКА ФОРТРАН-иж В ОС БК11        37

10.1.    ОГРАНИЧЕНИЯ ОПЕРАТОРОВ опен/цлосе             38
10.1.1.  ОГРАНИЧЕНИЯ КЛЮЧЕВЫХ СЛОВ                     38
10.2.    ИСХОДНЫЕ СТРОКИ                               39
10.3.    ИМЕНА ПЕРЕМЕННЫХ                              40
10.4.    ИНИЦИАЛИЗАЦИЯ ЗНАЧЕНИЙ ПЕРЕМЕННЫХ В
         цоммон                                        40
10.5.    СТРОКИ ПРОДОЛЖЕНИЯ                            40
10.6.    ОПЕРАТОРЫ стоп И паусе                        40
10.7.    СООТВЕТСТВИЕ ЛОГИЧЕСКИХ НОМЕРОВ ВНЕШНИМ
         УСТРОЙСТВАМ И ФАЙЛАМ                          41
10.8.    МАКСИМАЛЬНАЯ ДЛИНА ЗАПИСИ                     42
10.9.    ВВОД/ВЫВОД С ПРЯМЫМ ДОСТУПОМ                  42
10.9.1.  ОПЕРАТОР дефине филе                          42
10.9.2.  СОЗДАНИЕ ФАЙЛОВ С ПРЯМЫМ ДОСТУПОМ             43
10.10.   ФОРМАТЫ ВВОДА/ВЫВОДА                          43
10.10.1. ФОРМАТНЫЙ ВВОД/ВЫВОД                          43
10.10.2. НЕФОРМАТНЫЙ ВВОД/ВЫВОД                        44
10.10.3. ВВОД/ВЫВОД С ПРЯМЫМ ДОСТУПОМ                  45
10.11.   ОСОБЕННОСТИ СРАВНЕНИЯ ПЕРЕМЕННЫХ
         РАЗЛИЧНЫХ ТИПОВ                               45

11.      ПРЕДСТАВЛЕНИЕ ДАННЫХ В ФОРТРАН-иж             46

11.1.    ФОРМАТ ЦЕЛЫХ ЧИСЕЛ                            46
11.2.    ФОРМАТЫ ЧИСЕЛ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ             47
11.2.1.  ФОРМАТ ВЕЩЕСТВЕННОГО ЧИСЛА (ДВУСЛОВНЫЙ


                             - 5 -

                       00014 - 01.33.02


          ФОРМАТ С ПЛАВАЮЩЕЙ ТОЧКОЙ)                       47
11.2.2.   ФОРМАТ  ЧИСЛА   С   ДВОЙНОЙ   ТОЧНОСТЬЮ
          (4-СЛОВНЫЙ ФОРМАТ С ПЛАВАЮЩЕЙ ТОЧКОЙ)            47
11.2.3.   ФОРМАТ КОМПЛЕКСНОГО ЧИСЛА                        48
11.3.   БАЙТОВЫЙ ФОРМАТ (LOGICAL*1)                        48
11.4.   ТЕКСТОВЫЙ ФОРМАТ                                   49
11.5.   ЛОГИЧЕСКИЙ ФОРМАТ                                  49
11.6.   ФОРМАТ RADIX-50                                    50

ПРИЛОЖЕНИЕ 1.   БИБЛИОТЕЧНЫЕ ПОДПРОГРАММЫ                  52

ПРИЛОЖЕНИЕ 2.   КОНТРОЛЬНО-ДЕМОНСТРАЦИОННАЯ ЗАДАЧА         60












                             - 6 -

                       00014 - 01.33.02



               1. НАЗНАЧЕНИЕ И УСЛОВИЯ ПРИМЕНЕНИЯ



     ДЛЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ,  НАПИСАННОЙ  НА  ФОРТРАН-IV,
ПОД УПРАВЛЕНИЕМ МОНИТОРА ОС БК11 НЕОБХОДИМО ВЫПОЛНИТЬ  СЛЕ-
ДУЮЩИЕ ДЕЙСТВИЯ:

      1) КОМПИЛЯЦИЯ;
      2) КОМПОНОВКА;
      3) ЗАПУСК.

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

     КОМПОНОВКА  НАЧИНАЕТСЯ  С  ЗАПУСКА  КОМПОНОВЩИКА  LINK
КОМАНДНОЙ СТРОКОЙ, АНАЛОГИЧНОЙ КОМАНДНОЙ СТРОКЕ  КОМПИЛЯТО-
РА. КОМПОНОВЩИК ОБ'ЕДИНЯЕТ ВСЕ ПРОГРАММНЫЕ ЭЛЕМЕНТЫ И НЕОБ-
ХОДИМЫЕ ПРОГРАММЫ ИЗ  БИБЛИОТЕКИ  ФОРТРАН-IV  И  ГЕНЕРИРУЕТ
ФАЙЛ В ФОРМАТЕ ЗАГРУЗКИ.

     ТРЕТИЙ ШАГ НАЧИНАЕТСЯ ПО КОМАНДЕ RUN.



               2. ХАРАКТЕРИСТИКИ ПРОГРАММЫ



     2.1. КОД, СОЗДАВАЕМЫЙ КОМПИЛЯТОРОМ


     КОМПИЛЯТОР ФОРТРАН-IV ПРЕОБРАЗУЕТ СИМВОЛЬНУЮ ПРОГРАММУ
ФОРТРАН В ОБ'ЕКТНУЮ В ДВОИЧНОЙ ФОРМЕ.








                             - 7 -

                       00014 - 01.33.02


                  3. ОБРАЩЕНИЕ К ПРОГРАММЕ



     КОМПИЛЯТОР ФОРТРАН-IV  ПРИНИМАЕТ  КОМАНДНУЮ  СТРОКУ  В
ФОРМЕ:

           OUTPUT=INPUT/OPTION

ГДЕ

OUTPUT
       - СПЕЦИФИКАЦИЯ ВЫХОДНЫХ ФАЙЛОВ;

INPUT
       - СПЕЦИФИКАЦИЯ ВХОДНЫХ ФАЙЛОВ;

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

     КЛЮЧИ МОГУТ СЛЕДОВАТЬ ЗА ЛЮБОЙ СПЕЦИФИКАЦИЕЙ  ФАЙЛА  В
КОМАНДНОЙ СТРОКЕ. ИСПОЛЬЗОВАНИЕ ПРОБЕЛОВ НЕДОПУСТИМО.


     3.1. КЛЮЧИ  КОМАНДНОЙ  СТРОКИ  КОМПИЛЯТОРА
          FORTRAN


     КОМАНДНЫЕ  СТРОКИ  КОМПИЛЯТОРА  ФОРТРАН-IV  ИСПОЛЬЗУЮТ
ОПИСАННЫЕ НИЖЕ КЛЮЧИ С ВОСЬМЕРИЧНЫМИ ИЛИ ДЕСЯТИЧНЫМИ  АРГУ-
МЕНТАМИ В СПЕЦИФИКАЦИЯХ ВХОДНЫХ И  ВЫХОДНЫХ  ФАЙЛОВ.  ЛЮБОЙ
КЛЮЧ   ВИДА   "/S:N"   ВЫЗЫВАЕТ   ИНТЕРПРЕТАЦИЮ   "N"   КАК
ВОСЬМЕРИЧНОГО ЗНАЧЕНИЯ, ЕСЛИ "N" СОДЕРЖИТ ЦИФРЫ 0-7;  ТОГДА
КАК "/S:N." ВЫЗЫВАЕТ ИНТЕРПРЕТАЦИЮ "N" КАК ДЕСЯТИЧНОГО ЗНА-
ЧЕНИЯ. В КОМАНДЕ FORTRAN  МОНИТОРА  ДОПУСТИМО  ИСПОЛЬЗОВАТЬ
СЛЕДУЮЩИЕ КЛЮЧИ (В СКОБКАХ  УКАЗАНЫ  СООТВЕТСТВУЮЩИЕ  КЛЮЧИ
КОМАНДНОЙ СТРОКИ КОМПИЛЯТОРА):

 /ALLOCATE:N
       - ИСПОЛЬЗУЕТСЯ ПОСЛЕ КЛЮЧЕЙ /LIST  ИЛИ  /OBJECT  ДЛЯ
         УКАЗАНИЯ РАЗМЕРА  ОБЛАСТИ  (N  БЛОКОВ)  НА  ДИСКЕ,
         ОТВОДИМОЙ ДЛЯ СОЗДАНИЯ ВЫХОДНОГО ФАЙЛА;

 /DIAGNOSE ( /B )
       - РАЗРЕШАЕТ РАСШИРЕННУЮ РАСПЕЧАТКУ ВНУТРЕННЕЙ  ДИАГ-
         НОСТИКИ КОМПИЛЯТОРА;

 /EXTEND ( /E )
       - ПОЗВОЛЯЕТ ИСПОЛЬЗОВАТЬ ПОЗИЦИИ  73-80  В  ИСХОДНЫХ
         СТРОКАХ ПРОГРАММЫ ДЛЯ ТЕКСТА ОПЕРАТОРА;

 /NEADER ( /O )
       - ВКЛЮЧАЕТ  В  ЛИСТИНГ   РАЗДЕЛ   "OPTION-IN-EFFECT"
         (ИСПОЛЬЗУЕМЫЕ ВОЗМОЖНОСТИ КОМПИЛЯТОРА);





                             - 8 -

                       00014 - 01.33.02

 /I4 ( /T )
       - ВЫДЕЛЯЕТ ДЛЯ ПЕРЕМЕННЫХ  ТИПА  INTEGER  ДВА  СЛОВА
         ПАМЯТИ (ОБЫЧНО ДЛЯ ТАКИХ ПЕРЕМЕННЫХ ОТВОДИТСЯ ОДНО
         СЛОВО);

 /LINENUMBERS (ПО УМОЛЧАНИЮ)
       - ВКЛЮЧАЕТ  ВНУТРЕННИЕ  НОМЕРА  ОПЕРАТОРОВ  (ISN)  В
         ПРОГРАММУ ДЛЯ ЦЕЛЕЙ ДИАГНОСТИКИ ОШИБОК;

 /LIST[:FSPEC]
       - СОЗДАЕТ ЛИСТИНГ; ИМЯ ФАЙЛА ПРОИЗВОЛЬНО;  ЕСЛИ  ИМЯ
         ФАЙЛА НЕ ЗАДАНО, В КАЧЕСТВЕ ЛИСТИНГА  ИСПОЛЬЗУЕТСЯ
         "LP:FILSPC.LST", ГДЕ FILSPC - ИМЯ ФАЙЛА,  СОДЕРЖА-
         ЩЕГО ТРАНСЛИРУЕМУЮ ПРОГРАММУ;

 /NOLINENUMBERS ( /S )
       - ПОДАВЛЯЕТ ВКЛЮЧЕНИЕ ТРАССИРОВКИ ВНУТРЕННИХ НОМЕРОВ
         ОПЕРАТОРОВ (ISN) В ТРАНСЛИРУЕМУЮ ПРОГРАММУ;

 /NOOBJECT
       - ЗАПРЕЩАЕТ ГЕНЕРАЦИЮ ОБ'ЕКТНЫХ ФАЙЛОВ;

 /NOOPTIMIZE:XXX ( /M:XXX )
       - ПОДАВЛЯЕТ  УКАЗАННЫЙ  ТИП  ОПТИМИЗАЦИИ  ПРОГРАММЫ;
         ИСПОЛЬЗУЮТСЯ СЛЕДУЮЩИЕ АРГУМЕНТЫ КЛЮЧА:

              SPD - ЗАПРЕЩАЕТ ОПТИМИЗАЦИЮ ПО СКОРОСТИ ВЫ-
                    ПОЛНЕНИЯ ПРОГРАММЫ; ОПТИМИЗАЦИЯ НЕ
                    ПРОИЗОЙДЕТ ДЛЯ ПРОГРАММ НЕБОЛЬШОГО
                    РАЗМЕРА;
              CSE - ЗАПРЕЩАЕТ УСТРАНЕНИЕ ОБЩЕГО ПОДВЫРАЖЕ-
                    НИЯ;
              STR - ПОДАВЛЯЕТ ОПТИМИЗАЦИЮ СЖАТИЯ;
              BND - ЗАПРЕЩАЕТ ГЛОБАЛЬНОЕ ИСПОЛЬЗОВАНИЕ
                    РЕГИСТРОВ;

 /NOSWAP ( /U )
       - БЛОКИРУЕТ СВОПИНГ USR ВО ВРЕМЯ ВЫПОЛНЕНИЯ ПРОГРАМ-
         МЫ;

 /NOVECTORS ( /V )
       - ПОДАВЛЯЕТ ВЕКТОРИЗАЦИЮ МНОГОМЕРНЫХ МАССИВОВ;

 /OBJECT[:FSPEC]
       - СОЗДАЕТ ОБ'ЕКТНЫЙ ФАЙЛ  (ПО  УМОЛЧАНИЮ);  ЕСЛИ  НЕ
         УКАЗАНО  ИМЯ  ФАЙЛА,   КОМПИЛЯТОР   СОЗДАЕТ   ФАЙЛ
         DK:FILSPC.OBJ, ГДЕ FILSPC - ИМЯ ФАЙЛА, СОДЕРЖАЩЕГО
         ТРАНСЛИРУЕМУЮ ПРОГРАММУ;

 /ONDEBUG ( /D )
       - ТРАНСЛЯЦИЯ СТРОК С СИМВОЛОМ "D" В  ПЕРВОЙ  КОЛОНКЕ
         (ДЛЯ ЦЕЛОЙ ОТЛАДКИ). БЕЗ ЭТОГО КЛЮЧА СООТВЕТСТВУЮ-
         ЩИЕ СТРОКИ ВОСПРИНИМАЮТСЯ КАК КОММЕНТАРИЙ;

 /OPTIMIZE:XXX ( /P:XXX )
       - ВЫБИРАЕТ ВИД ОПТИМИЗАЦИИ ПО ЗНАЧЕНИЮ АРГУМЕНТА:

              SPD - ОПТИМИЗАЦИЯ СКОРОСТИ ВЫПОЛНЕНИЯ ПРОГ-
                    РАММЫ ЗА СЧЕТ УВЕЛИЧЕНИЯ РАЗМЕРА








                             - 9 -

                       00014 - 01.33.02


                    ПРОГРАММЫ;
              CSE - РАЗРЕШАЕТ УСТРАНЕНИЕ ОБЩЕГО ПОДВЫРАЖЕ-
                    НИЯ;
              STR - РАЗРЕШАЕТ ОПТИМИЗАЦИЮ СЖАТИЯ;
              BND - РАЗРЕШАЕТ ГЛОБАЛЬНОЕ ИСПОЛЬЗОВАНИЕ
                    РЕГИСТРОВ;

 /RECORD:N ( /R:N )
       - ОПРЕДЕЛЯЕТ МАКСИМАЛЬНЫЙ РАЗМЕР ЗАПИСИ  (В  БАЙТАХ)
         ВО ВРЕМЯ ФОРМАТНОГО ВВОДА/ВЫВОДА (4<N<4095);

 /SHOW[:N] ( /L:N )
       - УСТАНАВЛИВАЕТСЯ ПРИ КЛЮЧЕ /LST И ОПРЕДЕЛЯЕТ СОДЕР-
         ЖИМОЕ ЛИСТИНГА; АРГУМЕНТ  N  КОДИРУЕТСЯ  СЛЕДУЮЩИМ
         СПОСОБОМ:

              0 ИЛИ NULL - РАСПЕЧАТКА ДИАГНОСТИКИ;
              1 ИЛИ SRC  - РАСПЕЧАТКА ИСХОДНОЙ ПРОГРАММЫ
                           И ДИАГНОСТИКИ;
              2 ИЛИ МАР  - РАСПЕЧАТКА КАРТЫ ПАМЯТИ И
                           ДИАГНОСТИКИ;
              4 ИЛИ COD  - РАСПЕЧАТКА ГЕНЕРИРУЕМОГО КОДА
                           И ДИАГНОСТИКИ;

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

                     7 ИЛИ ALL

          ВЫДАЕТ ИСХОДНЫЙ ЛИСТИНГ, КАРТУ ПАМЯТИ И
          ЛИСТИНГ ГЕНЕРИРУЕМОГО КОДА; ЕСЛИ ЭТОТ КЛЮЧ
          ОПУЩЕН, ТО ПО УМОЛЧАНИЮ УСТАНАВЛИВАЕТСЯ
          /SHOW:3 И ВЫЛАЕТСЯ ИСХОДНЫЙ ЛИСТИНГ И КАРТА
          ПАМЯТИ;

 /STATISTICS ( /А )
       - ПЕЧАТАЕТ СТАТИСТИКУ ТРАНСЛЯЦИИ;

 /SWAP (ПО УМОЛЧАНИЮ)
       - РАЗРЕШАЕТ СВОПИНГ USR ВО ВРЕМЯ ВЫПОЛНЕНИЯ ПРОГРАМ-
         МЫ;

 /UNITS:N ( /N:N )
       - ОПРЕДЕЛЯЕТ КОЛИЧЕСТВО ЛОГИЧЕСКИХ НОМЕРОВ  (НАБОРОВ
         ДАННЫХ), КОТОРЫЕ МОГУТ ИСПОЛЬЗОВАТЬСЯ В  ПРОГРАММЕ
         ОДНОВРЕМЕННО;

 /VECTORS (ПО УМОЛЧАНИЮ)
       - РАЗРЕШАЕТ ВЕКТОРИЗАЦИЮ МНОГОМЕРНЫХ МАССИВОВ;

 /WARNINGS ( /W )
       - РАЗРЕШАЕТ ВЫДАЧУ ПРЕДУПРЕЖДАЮЩЕЙ ДИАГНОСТИКИ  КОМ-
         ПИЛЯТОРА; ИСПОЛЬЗУЕТСЯ В СОЧЕТАНИИ С КЛЮЧОМ /LST.

     СЛЕДУЮЩИЕ КЛЮЧИ МОГУТ ИСПОЛЬЗОВАТЬСЯ, ТОЛЬКО ЕСЛИ КОМ-
ПИЛЯТОР ВЫЗЫВАЕТСЯ С ПОМОЩЬЮ КОМАНДЫ МОНИТОРА RUN:



                             - 10 -

                       00014 - 01.33.02



/я
       - ЗАПРЕЩАЕТ ПЕЧАТЬ ИМЕН ПРОГРАММНЫХ МОДУЛЕЙ  (ОПЕРА-
         ТОРЫ PROGRAM, FUNCTION, SUBROUTINE И  BLOCK  DATA)
         ПРИ ТРАНСЛЯЦИИ КАЖДОГО ПРОГРАММНОГО МОДУЛЯ

/Z
       - УСТАНАВЛИВАЕТ ДЛЯ СЕКЦИЙ  ЧИСТОГО  КОДА  И  ЧИСТЫХ
         ДАННЫХ АТРИБУТ "RO" ("ТОЛЬКО ДЛЯ ЧТЕНИЯ").




               4. ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ



     4.1. СПЕЦИФИКАЦИИ ФАЙЛА


     КАЖДАЯ СПЕЦИФИКАЦИЯ ФАЙЛА ИМЕЕТ ФОРМАТ CSI.

     ПО УМОЛЧАНИЮ ДЛЯ ВХОДНОГО ФАЙЛА КОМПИЛЯТОР  ИСПОЛЬЗУЕТ
ТИП .FOR.

     ПО УМОЛЧАНИЮ ДЛЯ ВЫХОДНЫХ ФАЙЛОВ ИСПОЛЬЗУЮТСЯ  СЛЕДУЮ-
ЩИЕ РАСШИРЕНИЯ:

       - ДЛЯ ОБ'ЕКТНОГО ФАЙЛА .OBJ;
       - ДЛЯ ФАЙЛА ЛИСТИНГА .LST.



     4.2. ФОРМАТ ЛИСТИНГА


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

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

     СЛЕДУЮЩИЙ ПРИМЕР ДЕМОНСТРИРУЕТ ЛИСТИНГ ТРАНСЛЯЦИИ.

 FORTRAN IV  V02.1-10      FRI 22-OCT-79 01:13:00
 DK:ASH,LP:ASH=DK:ASH/L:7/O/A
 OPTIONS IN EFFECT:

                   SOURSE
                   MAP
                   CODE
                 NOLEAPYEAR




                             - 11 -

                       00014 - 01.33.02



                 NOREADONLY
                   LRECL=0136
                   STAT
                   ISNS
                 NOCOL80
                   USRSWAP
                 NODIAGNOSE
                 NOINTEGER*4
                   NLCHN=06
                 NODEBUG
                   VECTOR
                 NOWARN
                   CODE:THR
                   OPTIM:SIZ:CSE:STR:BND:PEP
                   LOG

FORTRAN IV   V02.1-10     FRI 22-OCT-79 01:13:00

0001         INTEGER INT
0002         REAL REAL
0003         COMPLEX IMAG
0004         DOUBLE PRECISION DBLE
0005         DATA INT/100/
0006         REAL = INT/2 + 5.
0007         DBLE = REAL/2. +3.1415926535D0
0008         IMAG =CMPLX( REAL, 3.21 )
0009         WRITE (5,10) IMAG
0010  10     FORMAT(1X,2F8.5)
0011         STOP
0012         END


FORTRAN IV     STORAGE MAP FOR PROGRAM UNIT .MAIN.

LOCAL VARIABLES, .RSECT ¤DATA, SIZE = 000030 (   12. WORDS)

NAME TYPE  OFFSET  NAME TYPE  OFFSET  NAME TYPE  OFFSET
DBLE R*8   000020  IMAG C*8   000010  INT  I*2   000002
REAL R*4   000004

SUBROUTINES, FUNCTIONS, STATEMENT AND PROCESSOR-DEFINED
FUNCTIONS:

NAME TYPE  NAME TYPE  NAME TYPE  NAME TYPE  NAME TYPE
CMPLX  C*8

FORTRAN IV     GENERATED CODE FOR PROGRAM UNIT .MAIN.
                                         ; STATEMENT #0006
000006                MOV     #6,@¤AOTS
000014                MOV     #¤EAE,R1
000020                MOV     INT,@R1
000032                MOV     @R1,-(SP)
000034                JSR     PC,¤CVTIF
000040                CLR     -(SP)
000042                MOV     #40640,-(SP)
000046                JSR     PC,¤ADDF
000052                MOV     (SP)+,REAL
000056                MOV     (SP)+,REAL+2
                                         ; STATEMENT #0007




                             - 12 -

                       00014 - 01.33.02



000062                INC     @¤AOTS
000066                MOV     REAL+2,-(SP)
000072                MOV     REAL,-(SP)
000076                CLR     -(SP)
000100                MOV     #40400,-(SP)
000104                JSR     PC,¤DIVF
000110                JSR     PC,¤CVTFD
000114                MOV     #-42741,-(SP)
000120                MOV     #-56770,-(SP)
000124                MOV     #7732,-(SP)
000130                MOV     #40511,-(SP)
000134                JSR     PC,¤ADDD
000140                MOV     #DBLE,R0
000144                MOV     (SP)+,(R0)+
000146                MOV     (SP)+,(R0)+
000150                MOV     (SP)+,(R0)+
000152                MOV     (SP)+,@R0
                                         ; STATEMENT #0008
000154                INC     @¤AOTS
000160                MOV     #C¤OL,R5
000164                JSR     PC,CMPLX
000170                MOV     #IMAG,R4
000174                MOV     R0,(R4)+
000176                MOV     R1,(R4)+
000200                MOV     R2,(R4)+
000202                MOV     R3,@R4
                                         ; STATEMENT #0009
000204                INC     @¤AOTS
000210                MOV     #C¤AB,-(SP)
000214                MOV     #.10,-(SP)
000220                JSR     PC,¤IFW
000224                MOV     #IMAG,-(SP)
000230                JSR     PC,¤TVC
000234                JSR     PC,¤EOL
                                         ; STATEMENT #0011
000240                MOV     #13,@¤AOTS
000246                JSR     PC,¤STR

COMPTLATION STATISTICS:
SYMBOL TABLE SIZE: 00105 WORDS
INTERNAL FORM SIZE: 00157 WORDS
FREE DYNAMIC MEMORY: 18918 WORDS
COMPILATION TIME: 00:01:07



     4.2.1. ЛИСТИНГ ИСПОЛЬЗУЕМЫХ КЛЮЧЕЙ


     В ЭТОЙ ЧАСТИ ЛИСТИНГА РАСПЕЧАТЫВАЕТСЯ  СПИСОК  ИСПОЛЬ-
ЗУЕМЫХ КЛЮЧЕЙ. ТЕ КЛЮЧИ, КОТОРЫЕ НАЧИНАЮТСЯ С "NO", ЯВЛЯЮТ-
СЯ НЕИСПОЛЬЗУЕМЫМИ. МАКСИМАЛЬНОЕ ЧИСЛО  ЛОГИЧЕСКИХ  НАБОРОВ
ДАННЫХ, КОТОРЫЕ МОГУТ БЫТЬ ОДНОВРЕМЕННО ОТКРЫТЫ (NLCHN),  И
МАКСИМАЛЬНАЯ ДЛИНА ЗАПИСИ (LRECL) ДАЮТСЯ  КАК  ЗНАЧЕНИЯ  ПО
УМОЛЧАНИЮ ИЛИ КАК ЗНАЧЕНИЯ, УКАЗАННЫЕ СООТВЕТСТВЕННО КЛЮЧА-
МИ  "/UNITS:N"  И  "/RECORD:N".  ДЛЯ  ЦЕЛЕЙ   ИДЕНТИФИКАЦИИ
ВЫДАЕТСЯ ТАКЖЕ ДЕНЬ НЕДЕЛИ, ДАТА, ВРЕМЯ КОМПИЛЯЦИИ И  КОПИЯ
КОМАНДНОЙ СТРОКИ.




                             - 13 -

                       00014 - 01.33.02



     4.2.2. ИСХОДНЫЙ ЛИСТИНГ


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

     СЛЕДУЕТ ЗАМЕТИТЬ, ЧТО НОМЕРА НЕ  ВСЕГДА  УВЕЛИЧИВАЮТСЯ
НА 1. НАПРИМЕР, ОПЕРАТОР, СЛЕДУЮЩИЙ ЗА ЛОГИЧЕСКИМ IF, ИМЕЕТ
ЦЕЛЫЙ ПОСЛЕДОВАТЕЛЬНЫЙ НОМЕР НА 2 БОЛЬШЕ, ЧЕМ САМ  ОПЕРАТОР
IF, Т.К. КОМПИЛЯТОР РАССМАТРИВАЕТ ЭТОТ  ОПЕРАТОР  КАК  ДВА,
ЕСЛИ ОПЕРАТОРОМ, ВЫПОЛНЯЮЩИМСЯ ПО УСЛОВИЮ НЕ  ЯВЛЯЕТСЯ  "GO
TO".

     СТРОКИ КОММЕНТАРИЯ И СТРОКИ ПРОДОЛЖЕНИЯ  ОПЕРАТОРА  НЕ
НУМЕРУЮТСЯ.



     4.2.3. ЛИСТИНГ КАРТЫ ПАМЯТИ


     ЭТА СЕКЦИЯ РАСПЕЧАТЫВАЕТ ВСЕ СИМВОЛИЧЕСКИЕ  ИМЕНА,  НА
КОТОРЫЕ ССЫЛАЮТСЯ ПРОГРАММНЫЕ ЭЛЕМЕНТЫ. ЛОКАЛЬНЫЕ  ПЕРЕМЕН-
НЫЕ И МАССИВЫ РАЗМЕЩАЮТСЯ  В  ПРОГРАММНОЙ  СЕКЦИИ  "¤DATA".
АДРЕСА ПАРАМЕТРИЧЕСКИХ ПЕРЕМЕННЫХ,  ПОДПРОГРАММ  И  ФУНКЦИЙ
РАСПОЛАГАЮТСЯ В ПРОГРАММНОЙ  СЕКЦИИ  "¤DATA"  И  ПОМЕЧАЮТСЯ
ЗНАЧКОМ "@" ПЕРЕД СМЕЩЕНИЕМ ИЛИ ИМЕНЕМ СЕКЦИИ.

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


     ПРИМЕЧАНИЕ. НЕИМЕНОВАННЫЙ БЛОК COMMON ОПИСЫВАЕТСЯ  КАК
COMMON BLOCK "/ /" В КАРТЕ ПАМЯТИ, НО  ПОМЕЩАЕТСЯ  В  КАРТУ
РАСПРЕДЕЛЕНИЯ ПАМЯТИ LINK КАК PSECT С ИМЕНЕМ ".¤¤¤¤.".



     4.2.4. ЛИСТИНГ ГЕНЕРИРУЕМОГО КОДА


     ЭТА СЕКЦИЯ СОДЕРЖИТ СИМВОЛЬНОЕ ПРЕДСТАВЛЕНИЕ ОБ'ЕКТНО-
ГО КОДА, СГЕНЕРИРОВАННОГО КОМПИЛЯТОРОМ, И ВКЛЮЧАЕТ  ОТНОСИ-
ТЕЛЬНЫЕ АДРЕСА В ПРОГРАММНОЙ СЕКЦИИ "¤CODE",  СИМВОЛИЧЕСКОЕ
ИМЯ ПРОГРАММЫ В СИСТЕМЕ OTS И ПРОГРАММНЫЕ АРГУМЕНТЫ МОДУЛЬ-
НОГО КОДА ИЛИ  ЭКВИВАЛЕНТНЫЙ  КОД  АССЕМБЛЕРА  ДЛЯ  ПРЯМОГО
КОДА. ЕСЛИ ИСПОЛЬЗУЕТСЯ КЛЮЧ КОМПИЛЯТОРА /DIAGNOSE, ТО ПРА-
ВАЯ КОЛОНКА ЛИСТИНГА ГЕНЕРИРУЕМОГО ПРЯМОГО  КОДА  УКАЗЫВАЕТ
ТЕ РЕГИСТРЫ, КОТОРЫЕ ИСПОЛЬЗУЮТСЯ В ПОСЛЕДУЮЩИХ  ОПЕРАЦИЯХ.
ГЕНЕРИРУЕМЫЙ КОД  КАЖДОГО  ОПЕРАТОРА  ДЛЯ  ПРОСТОТЫ  ССЫЛОК
ПОМЕЧАЕТСЯ ТЕМ ЖЕ ВНУТРЕННИМ ПОРЯДКОВЫМ НОМЕРОМ,  ЧТО  И  В





                             - 14 -

                       00014 - 01.33.02



РАСПЕЧАТКЕ ИСХОДНОЙ ПРОГРАММЫ.



     4.2.5. СТАТИСТИКА ТРАНСЛЯЦИИ


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



         5. КОМПОНОВКА, ВЫПОЛНЕНИЕ И ОТЛАДКА ПРОГРАММ



     5.1. ИСПОЛЬЗОВАНИЕ ПАМЯТИ КОМПИЛЯТОРОМ


     ВО ВРЕМЯ ТРАНСЛЯЦИИ В ПАМЯТИ ДОЛЖЫ НАХОДИТЬСЯ:

       - РЕЗИДЕНТ МОНИТОРА (RMON);

       - КОРНЕВОЙ СЕГМЕНТ КОМПИЛЯТОРА;

       - ОДНА ОВЕРЛЕЙНАЯ СЕКЦИЯ;

       - СТЕК;

       - ТРЕБУЕМЫЕ ДРАЙВЕРЫ УСТРОЙСТВ (ОТЛИЧНЫЕ ОТ ДРАЙВЕРА
         СИСТЕМНОГО УСТРОЙСТВА, ВКЛЮЧЕННОГО В RMON).

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

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

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



                              - 15 -

                           00014-01.33.02


          5.2. ПРОЦЕДУРА КОМПОНОВКИ


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

          КОМПОНОВЩИК ОБ'ЕДИНЯЕТ ОДИН ИЛИ НЕСКОЛЬКО ПРОГРАММНЫХ
     МОДУЛЕЙ, НАПИСАННЫХ ПОЛЬЗОВАТЕЛЕМ,С ВЫБРАННЫМИ ПРОГРАММАМИ
     ИЗ БИБЛИОТЕК ПОЛЬЗОВАТЕЛЯ И, ПО УМОЛЧАНИЮ,  ИЗ  БИБЛИОТЕКИ
     OTS ФОРТРАН- IV. ИЗ ОДНОГО ИЛИ БОЛЕЕ ОБ'ЕКТНЫХ ФАЙЛОВ,СОЗ-
     ДАННЫХ МАКРОАССЕМБЛЕРОМ ИЛИ КОМПИЛЯТОРОМ ФОРТРАН-IV,И БИБ-
     ЛИОТЕК LINK ГЕНЕРИРУЕТ ДЛЯ ВЫПОЛНЕНИЯ  ОДИН  ФАЙЛ  ФОРМАТА
     ЗАГРУЗКИ И КАРТУ ЗАГРУЗКИ.

          ПО УМОЛЧАНИЮ ТИП ФАЙЛА В ФОРМАТЕ ЗАГРУЗКИ: SAV;

     УСТРОЙСТВО ВЫВОДА ПО УМОЛЧАНИЮ - DK:

          ИМЕНЕМ ФАЙЛА ТИПА .SAV ПО УМОЛЧАНИЮ БУДЕТ ИМЯ ПЕРВОГО
     УКАЗАННОГО ВХОДНОГО ОБ'ЕКТНОГО ФАЙЛА. ЛЮБЫЕ НЕОПРЕДЕЛЕННЫЕ
     ГЛОБАЛЬНЫЕ ССЫЛКИ КОМПАНОВЩИК ПЫТАЕТСЯ ОПРЕДЕЛИТЬ ТОЛЬКО С
     ПОМОЩЬЮ SYSLIB,  ПОЭТОМУ  НЕОБХОДИМО  ВКЛЮЧИТЬ  БИБЛИОТЕКУ
     FORLIB В КОМПАНОВКУ ПРИ ПОМОЩИ КЛЮЧА /LINKLIBRARY В КОМАНДЕ
     LINK.


          5.3. ИСПОЛЬЗОВАНИЕ БИБЛИОТЕК



          С ПОМОЩЬЮ  СИСТЕМНОЙ ПРОГРАММЫ  LIBR, ПРЕДНАЗНАЧЕННОЙ
     ДЛЯ СОЗДАНИЯ И ИЗМЕНЕНИЯ БИБЛИОТЕКИ,МОЖНО СОЗДАТЬ  БИБЛИО-
     ТЕКУ ОБ'ЕКТНЫХ МОДУЛЕЙ ФУНКЦИЙ И ПОДПРОГРАММ, НАПИСАННЫХ НА
     ЯЗЫКАХ АССЕМБЛЕР И ФОРТРАН-IV.

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

          *LOAD=MAIN,LIB1/F

     ЗАСТАВЛЯЕТ LINK ОБ'ЕДИНИТЬ ФАЙЛ MAIN.OBJ С ТРЕБУЕМЫМИ ФУНК-
     ЦИЯМИ ИЛИ ПОДПРОГРАММАМИ, НАХОДЯЩИМСЯ В LIB1.OBJ. ЗАТЕМ ПО
     УМОЛЧАНИЮ  СИСТЕМНАЯ   БИБЛИОТЕКА   ФОРТРАН-IV  FORLIB.OBJ
     ИСПОЛЬЗУЕТСЯ ДЛЯ ДРУГИХ  ТРЕБУЕМЫХ  ПРОГРАММ.  ЗАГРУЗОЧНЫЙ
     МОДУЛЬ ВЫВОДИТСЯ В ФАЙЛ LOAD.SAV.

          ПРИМЕЧАНИЕ. "/F" НЕ УКАЗЫВАЕТСЯ, ЕСЛИ FORLIB ВОШЕЛ  В
     SYSLIB. В ЭТОМ СЛУЧАЕ ВСЕ НЕОПРЕДЕЛЕННЫЕ ГЛОБАЛЬНЫЕ ССЫЛКИ
     ОПРЕДЕЛЯЮТСЯ С ПОМОЩЬЮ SYSLIB.

          ЕСЛИ ЗАДАН КЛЮЧ "/F", ТО  ВСЕ  БИБЛИОТЕКИ,  СОЗДАННЫЕ
     ПОЛЬЗОВАТЕЛЕМ, ИСПОЛЬЗУЮТСЯ ПЕРЕД ПРОСМОТРОМ СИСТЕМНОЙ БИБ-


                           - 16 -

                      00014-01.33.02


     ЛИОТЕКИ ФОРТРАН-IV FORLIB.OBJ.

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


          5.4. ИСПОЛЬЗОВАНИЕ ОВЕРЛЕЯ


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

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

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

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


          5.4.1. ПЕРЕДАЧА УПРАВЛЕНИЯ


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

          ГОЛОВНАЯ ПРОГРАММА ФОРТРАН-IV  ДОЛЖНА БЫТЬ ПОМЕЩЕНА  В
     КОРНЕВОЙ СЕГМЕНТ.

          В УСЛОВИЯХ ОВЕРЛЕЙНОЙ СТРУКТУРЫ ВЫЗОВЫ  ПОДПРОГРАММ  И



                             - 17 -

                         00014-01.33.02



     ССЫЛКИ К ПОДПРОГРАММАМ-ФУНКЦИЯМ ДОЛЖНЫ ОТНОСИТЬСЯ ТОЛЬКО К:

          - БИБЛИОТЕЧНОЙ    ПРОЦЕДУРЕ    ФОРТРАН-IV   (НАПРИМЕР,
            ASSIGN, DCOS);

          - ПРОЦЕДУРЕ НА ЯЗЫКЕ АССЕМБЛЕР ИЛИ  ФОРТРАН-IV,  НАХО-
            ДЯЩЕЙСЯ В КОРНЕВОМ СЕГМЕНТЕ;

          - ПРОЦЕДУРЕ НА ЯЗЫКЕ АССЕМБЛЕР ИЛИ  ФОРТРАН-IV,  НАХО-
            ДЯЩЕЙСЯ В ТОМ ЖЕ ОВЕРЛЕЙНОМ  СЕГМЕНТЕ, ЧТО  И  ВЫЗЫ-
            ВАЮЩАЯ ПРОЦЕДУРА;

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



        5.4.2. ИСПОЛЬЗОВАНИЕ БЛОКОВ COMMON


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

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

        КОМПОНОВЩИК АВТОМАТИЧЕСКИ ПОМЕЩАЕТ БЛОК  COMMON  В  КОР-
     НЕВОЙ СЕГМЕНТ, ЕСЛИ К НЕМУ  ОБРАЩАЕТСЯ  ГОЛОВНАЯ  ПРОГРАММА
     ИЛИ ПОДПРОГРАММА, КОТОРАЯ РАСПОЛАГАЕТСЯ В КОРНЕВОМ СЕГМЕНТЕ.
     В ПРОТИВНОМ  СЛУЧАЕ  КОМПОНОВЩИК  ПОМЕЩАЕТ  БЛОК  COMMON  В
     ПЕРВЫЙ СЕГМЕНТ, ОПИСАННЫЙ В КОМАНДНОЙ СТРОКЕ  КОМПОНОВЩИКА,
     В КОТОРОМ ОСУЩЕСТВЛЯЕТСЯ ОПРЕДЕЛЕНИЕ ЭТОГО БЛОКА COMMON.

        ВСЕ   БЛОКИ   COMMON,  ЗНАЧЕНИЯ   ПЕРЕМЕННЫХ  В  КОТОРЫХ
     ЗАДАЮТСЯ ОПЕРАТОРАМИ "DATA", ДОЛЖНЫ ОПИСЫВАТЬСЯ  В  ТЕХ  ЖЕ
     ОВЕРЛЕЙНЫХ СЕГМЕНТАХ, ГДЕ ОНИ ПОМЕЩАЮТСЯ.



        5.4.3. ПОСТРОЕНИЕ ОВЕРЛЕЙНОЙ СТРУКТУРЫ


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


                            - 18 -

                       00014-01.33.02



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

        КОРНЕВОЙ СЕГМЕНТ И ВСЕ ОВЕРЛЕЙНЫЕ СЕГМЕНТЫ  НАХОДЯТСЯ  В
     ЗАГРУЗОЧНОМ МОДУЛЕ, СОЗДАВАЕМОМ LINK.

        ДЛЯ ОПРЕДЕЛЕНИЯ ОВЕРЛЕЙНОЙ СТРУКТУРЫ LINK  ИСПОЛЬЗУЕТ  2
     КЛЮЧА. КЛЮЧ ОПИСАНИЯ ПЕРЕКРЫТИЯ ИМЕЕТ ФОРМУ

                 /О:N

     ГДЕ

     N
           -ВОСЬМЕРИЧНОЕ  ЧИСЛО,  ОПРЕДЕЛЯЮЩЕЕ   НОМЕР   ОБЛАСТИ
            НАЛОЖЕНИЯ.

        УКАЗАТЕЛЬ СУЩЕСТВОВАНИЯ ПРОДОЛЖЕНИЯ  КОМАНДЫ  НА  ДРУГОЙ
     СТРОКЕ ИМЕЕТ ДВЕ ФОРМЫ: /С И //. КЛЮЧ "/С" В  КОНЦЕ  СТРОКИ
     ПОЗВОЛЯЕТ ПОЛЬЗОВАТЕЛЮ  ПРОДОЛЖИТЬ  КОМАНДУ   НА  СЛЕДУЮЩЕЙ
     СТРОКЕ ВВОДА. КЛЮЧ "//" ЯВЛЯЕТСЯ ПРИЗНАКОМ КОНЦА  КОМАНДНОЙ
     СТРОКИ.

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

        ВСЕ  ПОСЛЕДУЮЩИЕ  СТРОКИ  ДОЛЖНЫ  ЗАКАНЧИВАТЬСЯ   КЛЮЧОМ
     "/О:N", ОПРЕДЕЛЯЮЩИМ ОВЕРЛЕЙНУЮ ОБЛАСТЬ И/ИЛИ "/С". НАЛИЧИЕ
     ТОЛЬКО КЛЮЧА "/С" УКАЗЫВАЕТ, ЧТО ЭТО ПРОДОЛЖЕНИЕ ПРЕДЫДУЩЕЙ
     СТРОКИ И СЛЕДОВАТЕЛЬНО, ПРОДОЛЖЕНИЕ ОПИСАНИЯ РАНЕЕ  УКАЗАН-
     НОГО ОВЕРЛЕЙНОГО СЕГМЕНТА. ОБ'ЕКТНЫЕ  МОДУЛИ,  УКАЗАННЫЕ  В
     КАЖДОЙ СТРОКЕ ИЛИ В НАБОРЕ СТРОК ПРОДОЛЖЕНИЯ, ПОМЕЩАЮТСЯ  В
     ОВЕРЛЕЙНЫЙ СЕГМЕНТ С ОДНИМ И ТЕМ ЖЕ НОМЕРОМ. ВСЕ  СТРОКИ  В
     КОМАНДНОЙ СТРОКЕ, КРОМЕ ПОСЛЕДНЕЙ, ДОЛЖНЫ   СОДЕРЖАТЬ  КЛЮЧ
     "/С".


        5.4.4. ПРИМЕР


        ПУСТЬ, НАПРИМЕР, FORLIB НАХОДИТСЯ В SYSLIB, И  ПРИ  СОЗ-
     ДАНИИ ЗАГРУЗОЧНОГО МОДУЛЯ С ОВЕРЛЕЙНОЙ СТРУКТУРОЙ НЕОБХОДИ-
     МО ОРГАНИЗОВАТЬ МОДУЛЬ СЛЕДУЮЩИМ ОБРАЗОМ:

        - ГОЛОВНАЯ ПРОГРАММА И ОБ'ЕКТНЫЙ МОДУЛЬ SUB1 ДОЛЖНЫ  ЗА-
     НИМАТЬ КОРНЕВОЙ СЕГМЕНТ;



                            - 19 -

                        00014-01.33.02


        - ОБ'ЕКТНЫЙ  МОДУЛЬ  SUB2  ДОЛЖЕН  РАСПОЛАГАТЬСЯ В ОДНОЙ
          ОВЕРЛЕЙНОЙ  ОБЛАСТИ  С  ОБ'ЕКТНЫМ  МОДУЛЕМ  SUB3, НО В
          РАЗНЫХ СЕГМЕНТАХ;

        - ОБ'ЕКТНЫЕ  МОДУЛИ  SUB4  И  SUB5  ДОЛЖНЫ  ПОМЕЩАТЬСЯ В
          ОДНОМ  СЕГМЕНТЕ   ВО  ВТОРУЮ   ОВЕРЛЕЙНУЮ   ОБЛАСТЬ  С
          ОБ'ЕКТНЫМИ МОДУЛЯМИ  SUB6  И  SUB7,  ВХОДЯЩИМИ В  ДРУ-
          ГОЙ СЕГМЕНТ ЭТОЙ ОБЛАСТИ.

        ДЛЯ ЭТОГО НЕОБХОДИМО ПОСТРОИТЬ КОМАНДНУЮ  СТРОКУ  СЛЕДУ-
     ЮЩИМ ОБРАЗОМ:

        .LINK/PROMPT/EXE:LOAD MAIN+SUB1
        *SUB2/0:1/C
        *SUB3/0:1/C
        *SUB4/0:2/C
        *SUB5/C
        *SUB6/0:2/C
        *SUB7//


        5.5. ВЫПОЛНЕНИЕ ПРОГРАММЫ


        ДЛЯ   НАЧАЛА  ВЫПОЛНЕНИЯ  ЗАГРУЗОЧНОГО МОДУЛЯ ТИПА  .SAV,
     СОЗДАННОГО LINK, ИСПОЛЬЗУЕТСЯ КАМАНДА МОНИТОРА RUN. КОМАНДА:

        .RUN DEV:FSPEC

     ВЫЗЫВАЕТ ЗАГРУЗКУ В ПАМЯТЬ С  УСТРОЙСТВА  (DEV:)  И   ЗАПУСК
     ПРОГРАММЫ.

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

        .RUN FORTRAN
         *MAIN=MAIN+SUB
         *SUB=SUBT
         *чC
        .LINK/MAP MAIN,SUBT,BY1:FORLIB
        .RUN MAIN

     ВСЕ НЕОПРЕДЕЛЕННЫЕ ССЫЛКИ ОТЫСКИВАЮТСЯ СНАЧАЛА В FORLIB.OBJ,
     РАСПОЛОЖЕННОЙ НА BY1:, А ЗАТЕМ В SYSLIB.


        5.6. ОТЛАДКА ПРОГРАММЫ


        ФОРТРАН-IV ОС БК11 СОДЕРЖИТ ЭФФЕКТИВНОЕ СРЕДСТВО ОТЛАДКИ-
     - ОТЛАДОЧНЫЕ ОПЕРАТОРЫ ТРАНСЛИРУЕМЫЕ ПО УСЛОВИЮ.

        ВЫЯВИТЬ  ОПЕРАТОР  С  ОШИБКОЙ  МОЖНО РАСПЕЧАТКОЙ ПРОМЕЖУ-

                            - 20 -

                      00014 - 01.33.02




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

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

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



     6. УВЕЛИЧЕНИЕ ЭФФЕКТИВНОСТИ ПРОГРАММИРОВАНИЯ



     6.1. ФАКТОРЫ,  ВЛИЯЮЩИЕ   НА   ЭФФЕКТИВНОСТЬ
          ПРОГРАММИРОВАНИЯ


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

     ЭФФЕКТИВНОСТЬ ПРОГРАММЫ НА ФОРТРАН-IV ЗАВИСИТ ОТ  НЕС-
КОЛЬКИХ ФАКТОРОВ. ЭТИ ФАКТОРЫ РАЗДЕЛЯЮТСЯ НА ДВА КЛАССА:

       - СПОСОБ,  КОТОРЫМ  ПРОГРАММИСТ  КОДИРУЕТ   ИСХОДНЫЙ
         АЛГОРИТМ;

       - СПОСОБ, КОТОРЫМ КОМПИЛЯТОР  ОБРАБАТЫВАЕТ  ИСХОДНУЮ
         ПРОГРАММУ.

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



                           - 21 -

                     00014 - 01.33.02


ЭФФЕКТИВНО.

     КАЖДОЕ ПРЕДЛОЖЕНИЕ ПО ПОВЫШЕНИЮ ЭФФЕКТИВНОСТИ, ОПИСАН-
НОЕ НИЖЕ, ПОМЕЧАЮТСЯ ОДНИМ ИЗ СЛЕДУЮЩИХ УКАЗАТЕЛЕЙ:

 (ПАМЯТЬ)
       - ОЗНАЧАЕТ, ЧТО  ОСНОВНАЯ  ФУНКЦИЯ  РАССМАТРИВАЕМОГО
         ПРИЕМА ЕСТЬ МИНИМИЗАЦИЯ ТРЕБОВАНИЙ К ОБ'ЕМУ  ПРОГ-
         РАММЫ;

 (ВРЕМЯ)
       - ОЗНАЧАЕТ, ЧТО ОСНОВНОЕ ЗНАЧЕНИЕ ИМЕЕТ  МИНИМИЗАЦИЯ
         ВРЕМЕНИ ВЫПОЛНЕНИЯ.

НЕКОТОРЫЕ ПРЕДЛОЖЕНИЯ МОГУТ ИМЕТЬ ОБА УКАЗАТЕЛЯ, ОПРЕДЕЛЯЮ-
ЩИЕ ЭКОНОМИЮ КАК ПАМЯТИ, ТАК И ВРЕМЕНИ.



     6.2. ПОВЫШЕНИЕ ЭФФЕКТИВНОСТИ ТРАНСЛЯЦИИ


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



     6.2.1. ОБЕСПЕЧЕНИЕ    ЛУЧШЕГО    ИСПОЛЬЗОВАНИЯ
            ОПТИМИЗАТОРА (ПАМЯТЬ, ВРЕМЯ)



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



     6.2.2. ПЕРЕДАЧА  АРГУМЕНТОВ   В   ПОДПРОГРАММЫ
            (ПАМЯТЬ, ВРЕМЯ)


     ЧТОБЫ СОКРАТИТЬ ВРЕМЯ, НЕОБХОДИМОЕ ДЛЯ ВЫЗОВА FUNCTION
ИЛИ  SUBROUTINE,  ПАРАМЕТРЫ  ОБРАЩЕНИЯ  СЛЕДУЕТ  ПЕРЕДАВАТЬ
ЧЕРЕЗ БЛОКИ COMMON, А НЕ ЧЕРЕЗ СТАНДАРТНЫЕ СПИСКИ  АРГУМЕН-
ТОВ.

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




                            - 22 -

                      00014 - 01.33.02



     6.2.3. ОПЕРАТОРЫ-ФУНКЦИИ (ВРЕМЯ)


     АРИФМЕТИЧЕСКИЕ И ЛОГИЧЕСКИЕ  ОПЕРАТОРЫ-ФУНКЦИИ  ВЫПОЛ-
НЯЮТСЯ КАК ВНУТРЕННИЕ ПОДПРОГРАММЫ-ФУНКЦИИ.  СЛЕДОВАТЕЛЬНО,
ВСЕ ЗНАЧЕНИЯ, КАСАЮЩИЕСЯ СПИСКА АРГУМЕНТОВ, ОТНОСЯТСЯ ТАК-
ЖЕ И К ОПЕРАТОРАМ-ФУНКЦИЯМ.



     6.2.4. МИНИМИЗАЦИЯ  ПАМЯТИ  ТАБЛИЦЫ  ВЕКТОРОВ
            МАССИВА (ПАМЯТИ)


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

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


       - 1). В ОПЕРАТОРЕ, ОПРЕДЕЛЯЮЩЕМ  МАССИВ,  НАИБОЛЬШИЕ
         РАЗМЕРНОСТИ НУЖНО СТАВИТЬ  НА  ПЕРВОЕ  МЕСТО.  ЭТО
         УМЕНЬШАЕТ ЧИСЛО ЗАПИСЕЙ В ТАБЛИЦЕ, ТАК КАК  ПЕРВАЯ
         РАЗМЕРНОСТЬ НЕ ВЕКТОРИЗУЕТСЯ;

     НАПРИМЕР, INTEGER A(350,10)  ТРЕБУЕТ  ДЛЯ  ВЕКТОРА  10
СЛОВ. INTEGER A(10,350) ТРЕБУЕТ ДЛЯ ВЕКТОРА 350 СЛОВ.

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


       - 2). ПРИ ЗАДАНИИ МАССИВОВ  ОДНОГО  ТИПА  НЕОБХОДИМО
         СОБЛЮДАТЬ  ОДИНАКОВЫЙ  ПОРЯДОК  РАЗМЕРНОСТЕЙ;  ЭТО
         ПОЗВОЛЯЕТ МАССИВАМ ИСПОЛЬЗОВАТЬ ОДНИ И ТЕ ЖЕ  ТАБ-
         ЛИЦЫ ВЕКТОРОВ;

      НАПРИМЕР, МАССИВЫ:

         INTEGER A(9,4,5), B(9,4,7), C(9,8)

ИСПОЛЬЗУЮТ ДВА ВЕКТОРА: ОДИН ДЛЯ ВТОРОЙ РАЗМЕРНОСТИ И  ОДИН
ДЛЯ ТРЕТЬЕЙ. ВЕКТОР ДЛЯ ВТОРОЙ РАЗМЕРНОСТИ ИМЕЕТ 8  ЭЛЕМЕН-
ТОВ, ПОТОМУ ЧТО МАССИВ "C" ИМЕЕТ НАИБОЛЬШУЮ ВТОРУЮ  РАЗМЕР-
НОСТЬ, РАВНУЮ 8. АНАЛОГИЧНО, ВЕКТОР ДЛЯ ТРЕТЬЕЙ РАЗМЕРНОСТИ
ИМЕЕТ СЕМЬ ЭЛЕМЕНТОВ. В ОБЩЕМ СЛУЧАЕ ДВА МАССИВА ИСПОЛЬЗУЮТ
ОДНУ И ТУ ЖЕ ТАБЛИЦУ ВЕКТОРОВ ДЛЯ РАЗМЕРНОСТИ "I", ЕСЛИ ВСЕ



                            - 23 -

                      00014 - 01.33.02


РАЗМЕРНОСТИ, МЕНЬШИЕ, ЧЕМ "I", ОДНИ И ТЕ ЖЕ В  ЭТИХ  МАССИ-
ВАХ. В РАССМАТРИВАЕМОМ ПРИМЕРЕ МАССИВЫ A, B,  C  ИСПОЛЬЗУЮТ
ОДИН И ТОТ ЖЕ ВЕКТОР ДЛЯ ВТОРОЙ  РАЗМЕРНОСТИ,  Т.К.  КАЖДЫЙ
МАССИВ ИМЕЕТ ПЕРВУЮ РАЗМЕРНОСТЬ, РАВНУЮ 9.


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

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



     6.2.5. ИСПОЛЬЗОВАНИЕ   МНОГОМЕРНЫХ   МАССИВОВ
            (ВРЕМЯ)


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

       - ИСПОЛЬЗОВАТЬ МАССИВЫ  С  ВОЗМОЖНО  МЕНЬШИМ  ЧИСЛОМ
         РАЗМЕРНОСТЕЙ;

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

       - ПРИ ССЫЛКАХ К ЭЛЕМЕНТАМ МАССИВА ИСПОЛЬЗОВАТЬ КОНС-
         ТАНТЫ; ТАКИЕ ССЫЛКИ ОБРАБАТЫВАЮТСЯ БОЛЕЕ ЭФФЕКТИВ-
         НО; НАПРИМЕР:

                I=1
                A(I)=0.0

          МЕНЕЕ ЭФФЕКТИВНО, ЧЕМ

                I=1
                A(I)=0.0

          В ПЕРВОМ СЛУЧАЕ ТРЕБУЕТСЯ ОПЕРАЦИЯ С ИНДЕКСОМ
          ВО ВРЕМЯ ВЫПОЛНЕНИЯ; В ПОСЛЕДНЕМ СЛУЧАЕ КОМПИ-
          ЛЯТОР МОЖЕТ ВЫЧИСЛИТЬ АДРЕС ЭЛЕМЕНТА
          МАССИВА "A" ВО ВРЕМЯ ТРАНСЛЯЦИИ.



                            - 24 -

                      00014 - 01.33.02


     6.2.6. ФОРМАТНЫЙ ВВОД-ВЫВОД (ПАМЯТЬ, ВРЕМЯ)


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



     6.2.7. ВЫБОР ТИПА ДАННЫХ (ПАМЯТЬ, ВРЕМЯ)


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

       - ПРЕДПОЧТИТЕЛЬНОЕ   ИСПОЛЬЗОВАНИЕ    ДАННЫХ    ТИПА
         INTEGER;  КОМПИЛЯТОР  ФОРТРАН-IV  ПРОВОДИТ   МНОГО
         ВИДОВ ОПТИМИЗАЦИЙ С ЭТИМ ТИПОМ ДАННЫХ;

       - ПРЕДПОЧТИТЕЛЬНОЕ  ИСПОЛЬЗОВАНИЕ  ПЕРЕМЕННЫХ   ТИПА
         REAL*4, ЧЕМ ТИПА DOUBLE PRECISION (REAL*8); ОПЕРА-
         ЦИИ ОДИНАРНОЙ  ТОЧНОСТИ  ПРОИЗВОДЯТСЯ  ЗНАЧИТЕЛЬНО
         БЫСТРЕЕ ЧЕМ ДВОЙНОЙ И ЭКОНОМЯТ ПАМЯТЬ;

       - СЛЕДУЕТ ИЗБЕГАТЬ СМЕШЕНИЯ ТИПОВ ДАННЫХ;  НАПРИМЕР,
         "A=0.0" ПРЕДПОЧТИТЕЛЬНЕЙ, ЧЕМ "A=0";

       - ЛУЧШЕ ИСПОЛЬЗОВАТЬ ДВЕ ПЕРЕМЕННЫЕ ТИПА REAL*4, ЧЕМ
         ОДНУ  COMPLEX*8;  ОПЕРАЦИИ  С  ПЕРЕМЕННЫМИ  REAL*4
         ОПТИМИЗИРУЮТСЯ БОЛЕЕ ЭФФЕКТИВНО, ЧЕМ С ПЕРЕМЕННЫМИ
         COMPLEX*8;



     6.2.8. ОПЕРАЦИИ СРАВНЕНИЯ (ПАМЯТЬ)


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

         IF (I .LE. 1) GOTO 100

ПОТРЕБУЕТ БОЛЬШЕ ОПЕРАЦИЙ, ЧЕМ

         IF (I .LE. 0) GOTO 100

                          - 25 -

                    00014 - 01.33.02


     6.2.9. ОПЕРАЦИИ УМНОЖЕНИЯ НА ДВА И  ВОЗВЕДЕНИЕ
            В КВАДРАТ (ВРЕМЯ)


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

         A = (B + ARRAY(C))**2

ОПТИМАЛЬНЕЙ, ЧЕМ

         A = (B + ARRAY(C)) * (B + ARRAY(C))

А ОПЕРАТОР:

         A=B*2

ОПТИМАЛЬНЕЙ ОПЕРАТОРА:

         A=B+B



     6.2.10. ИСПОЛЬЗОВАНИЕ    КЛЮЧЕЙ    КОМПИЛЯТОРА
             (ПАМЯТЬ, ВРЕМЯ)


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

/NOLINENUMBERS
       - ЗАПРЕЩАЕТ ФОРМИРОВАНИЕ НОМЕРОВ СТРОК;

/NOVECTORS
       - ЗАПРЕЩАЕТ ВЕКТОРИЗАЦИЮ МАССИВА.

КРОМЕ ТОГО, НЕ СЛЕДУЕТ УКАЗЫВАТЬ КЛЮЧ "/I4"  БЕЗ  НЕОБХОДИ-
МОСТИ.

     УКАЗАНИЕ КЛЮЧА "/NOOPTIMIZE:XXX" МОЖЕТ СОКРАТИТЬ ОБ'ЕМ
ПАМЯТИ, НО ЭТОГО НЕЛЬЗЯ ПРЕДСКАЗАТЬ ПО ВИДУ ИСХОДНОЙ  ПРОГ-
РАММЫ. СЛЕДУЕТ ПРОВЕРИТЬ РАЗЛИЧНЫЕ  ВАРИАНТЫ  ЭТОГО  КЛЮЧА,
ЧТОБЫ ВЫБРАТЬ ОПТИМАЛЬНЫЙ.

     НЕ СЛЕДУЕТ УКАЗЫВАТЬ КЛЮЧ /NOSWAP, ЕСЛИ ОН НЕ ТРЕБУЕТ-
СЯ.

     ДЛЯ ТОГО, ЧТОБЫ  СЭКОНОМИТЬ  ПАМЯТЬ,  НУЖНО  УКАЗЫВАТЬ
МИНИМАЛЬНО ДОПУСТИМЫЕ ЗНАЧЕНИЯ В КЛЮЧАХ /UNITS И  /RECORDS.
ЧИСЛОВОЙ АРГУМЕНТ КЛЮЧА /UNITS  РАВЕН  МАКСИМАЛЬНОМУ  ЧИСЛУ
ЛОГИЧЕСКИХ УСТРОЙСТВ, АКТИВНЫХ ОДНОВРЕМЕННО ВО ВРЕМЯ РАБОТЫ
ПРОГРАММЫ. КЛЮЧ /RECORD ДОЛЖЕН БЫТЬ РАВЕН МАКСИМАЛЬНОЙ ДЛИ-
НЕ ФОРМАТНОЙ ЗАПИСИ ПЛЮС ДВА  ЗНАКА  (ДЛЯ  ЗНАКОВ  ПЕРЕВОДА
СТРОКИ И ВОЗВРАТА КАРЕТКИ).

     ДЛЯ СОКРАЩЕНИЯ  ВРЕМЕНИ  ВЫПОЛНЕНИЯ  ПРОГРАММЫ  ДОЛЖНЫ



                          - 26 -

                    00014 - 01.33.02


ИСПОЛЬЗОВАТЬСЯ СЛЕДУЮЩИЕ КЛЮЧИ:

/NOLINENUMBERS
       - ДЛЯ ИСКЛЮЧЕНИЯ НУМЕРАЦИИ СТРОК;

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

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

/NOOPTIMIZE:XXX
       - ИСКЛЮЧАЕТ ОПТИМИЗАТОР;

/NOVECTORS
       - ИСКЛЮЧАЕТ ВЕКТОРИЗАЦИЮ МАССИВОВ.

     ДЛЯ УМЕНЬШЕНИЯ ОБ'ЕМА ЗАГРУЗОЧНОГО МОДУЛЯ МОЖНО ИСКЛЮ-
ЧИТЬ ТЕКСТЫ ДИАГНОСТИЧЕСКИХ СООБЩЕНИЙ  ИСПОЛНЯЮЩЕЙ  СИСТЕМЫ
ФОРТРАНА (OTS) ИЗ ЗАГРУЗОЧНОГО МОДУЛЯ. ПРИ ЭТОМ  ПРИ  ДИАГ-
НОСТИКЕ ОШИБОК ОПЕРАТОР БУДЕТ ПОЛУЧАТЬ ТОЛЬКО НОМЕР ПРОИЗО-
ШЕДШЕЙ ОШИБКИ БЕЗ  ПОЯСНИТЕЛЬНОГО  ТЕКСТА.  ДЛЯ  ЭТОГО  ПРИ
КОМПОНОВКЕ ПРОГРАММЫ УКАЗЫВАЕТСЯ КЛЮЧ /INCLUDE  (I)  И  ПРИ
ЗАПРОСЕ КОМПОНОВЩИКА:

              LIBRARY SEARCH?

НЕОБХОДИМО ОТВЕТИТЬ:

              ¤SHORT<CR>

НАПРИМЕР:

              .LINK/INCLUDE MAIN
              LIBRARY SEARCH? ¤SHORT
              LIBRARY SEARCH?

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

              ?ERR 1

ВМЕСТО

              ?ERR 1 INTEGER OVERFOW

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



                          - 27 -

                    00014 - 01.33.02


     6.3. ТЕХНИКА ПРОГРАММИРОВАНИЯ


     В СЛЕДУЮЩИХ ПРИМЕРАХ  ПРИВОДИТСЯ  СРАВНЕНИЕ  РАЗЛИЧНЫХ
ВАРИАНТОВ ПРОГРАММИРОВАНИЯ. СПРАВА ПРИВОДИТСЯ БОЛЕЕ  ЭФФЕК-
ТИВНЫЙ МЕТОД.

ПРИМЕР 1. ИСПОЛЬЗОВАНИЕ ЗНАЧЕНИЯ ШАГА В ЦИКЛАХ.

     НЕЭФФЕКТИВНО                  ЭФФЕКТИВНО

     DIMENSION A(20)               DIMENSION A(20)
     DO 100 I=1,10                 DO 100 I=2,2,20
     A(2*1)=B                      A(I)=B
 100 CONTINUE                  100 CONTINUE

     В НЕЭФФЕКТИВНОМ ПРИМЕРЕ  В  КАЖДОМ  ЦИКЛЕ  ВЫПОЛНЯЕТСЯ
ДОПОЛНИТЕЛЬНОЕ ВЫЧИСЛЕНИЕ (ПРОИЗВЕДЕНИЕ "2*I"). В ЭФФЕКТИВ-
НОМ ПРИМЕРЕ НЕТ НЕОБХОДИМОСТИ В ЭТИХ ВЫЧИСЛЕНИЯХ, Т.К. УКА-
ЗАН ШАГ ДВА.

ПРИМЕР 2. РАЗМЕЩЕНИЕ НЕКОТОРЫХ ВЫЧИСЛЕНИЙ ВНЕ ЦИКЛА.

     НЕЭФФЕКТИВНО                  ЭФФЕКТИВНО

     DO 10 I=1,20               TEMP1=B*C
     DO 20 J=1,50               DO 10 I=1,20
  20 A(J)=A(J)+I*B*C            TEMP2=I*TEMP1
  10 CONTINUE                   DO 20 J=1,50
                             20 A(J)=A(J)+TEMP2
                             10 CONTINUE

     ВЫЧИСЛЕНИЕ ПРОИЗВЕДЕНИЯ  B*C  В  ЦИКЛЕ  (НЕЭФФЕКТИВНЫЙ
ПРИМЕР) ПРОИЗВОДИТСЯ 1000 РАЗ.  ЭФФЕКТИВНЕЕ,  ЕСЛИ  ВЫНЕСТИ
ЭТИ ВЫЧИСЛЕНИЯ ИЗ ЦИКЛА.

ПРИМЕР 3. ПРАВИЛЬНОЕ ВЛОЖЕНИЕ ЦИКЛОВ "DO"  МОЖЕТ  УВЕЛИЧИТЬ
СКОРОСТЬ ВЫПОЛНЕНИЯ ЗА СЧЕТ МИНИМИЗАЦИИ КОЛИЧЕСТВА ЗАПУСКОВ
ЦИКЛА.

     НЕЭФФЕКТИВНО                  ЭФФЕКТИВНО

     DIMENSION A(100,10)           DIMENSION A(100,10)
     DO 60 I=1,100                 DO 60 J=1,10
     DO 60 J=1,10                  DO 60 I=1,100
  60 A(I,J)=B                   60 A(I,J)=B

     В ПЕРВОМ ПРИМЕРЕ ВНУТРЕННИЙ ЦИКЛ "DO" ВЫПОЛНЯЕТСЯ  100
РАЗ, ТОГДА КАК В ЭФФЕКТИВНОМ ПРИМЕРЕ - 10 РАЗ.

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





                          - 28 -

                    00014 - 01.33.02




     НЕЭФФЕКТИВНО                  ЭФФЕКТИВНО

     INTEGER A(20,100)             INTEGER A(20,100)
     DO 20 I=1,100                 REAL*8 ATEMP(500)
     DO 20 J=1,20                  EQUIVALENCE (A,ATEMP)
  20 A(J,I)                        DO 20 I=1,500
                                20 ATEMP(I)=0.0D0

     В ЭФФЕКТИВНОМ ПРИМЕРЕ КАЖДЫЕ  8  БАЙТОВ  МАССИВА  ТИПА
REAL*8 ИСПОЛЬЗУЮТСЯ ДЛЯ РАЗМЕЩЕНИЯ СООТВЕТСТВУЮЩИХ  ЧЕТЫРЕХ
ЦЕЛЫХ ИЗ МАССИВА ТИПА INTEGER ПРИ ПОМОЩИ  EQUIVALENCE.  ЭТИ
ЧЕТЫРЕ ЦЕЛЫХ ЧИСЛА ОБНУЛЯЮТСЯ ОДНОЙ ОПЕРАЦИЕЙ,  СОКРАЩАЯ  В
ЧЕТЫРЕ РАЗА ЧИСЛО ИТЕРАЦИЙ.

ПРИМЕР 5. ЖЕЛАТЕЛЬНО ПРОВОДИТЬ КАК МОЖНО БОЛЬШЕ  ВЫЧИСЛЕНИЙ
В ФОРМЕ INTEGER.

     НЕЭФФЕКТИВНО                  ЭФФЕКТИВНО

     A=B+I+J                       A=B+(I+J)

     ЕСЛИ ПРЕОБЛАДАЮЩЕЙ ФОРМОЙ  ВЫРАЖЕНИЯ  ЯВЛЯЕТСЯ  DOUBLE
PRECISION ИЛИ COMPLEX, РЕКОМЕНДУЕТСЯ  ПРОВОДИТЬ  КАК  МОЖНО
БОЛЬШЕ ВЫЧИСЛЕНИЙ В ФОРМЕ REAL. ВЫЧИСЛЕНИЯ НАИБОЛЕЕ  ЭФФЕК-
ТИВНЫ В РЕЖИМЕ ЦЕЛЫХ, МЕНЕЕ ЭФФЕКТИВНЫ В РЕЖИМЕ REAL И НАИ-
МЕНЕЕ ЭФФЕКТИВНЫ В DOUBLE PRECISION  ИЛИ  COMPLEX.  СЛЕДУЕТ
ПОМНИТЬ, ЧТО ПРИ ОТСУТСТВИИ СКОБОК  ВЫЧИСЛЕНИЯ  ВЫПОЛНЯЮТСЯ
СЛЕВА НАПРАВО.

ПРИМЕР 6. ПО ВОЗМОЖНОСТИ СЛЕДУЕТ ИСПОЛЬЗОВАТЬ  ОБЩИЕ  БЛОКИ
ДЛЯ ПЕРЕДАЧИ АРГУМЕНТОВ И ВОЗВРАТА РЕЗУЛЬТАТОВ ПОДПРОГРАММ.



                          - 29 -

                    00014 - 01.33.02



     НЕЭФФЕКТИВНО                  ЭФФЕКТИВНО

                                 COMMON/SUBRA/A,B,C,D,E
                                 COMMON/FUNCTA/Y,Z
           .                          .
           .                          .
           .                          .
     CALL SUBR(A,B,C,D,E)        CALL SUBR
     X=FUNCT(Y,Z)                X=FUNCT()
     CALL SUBR(A,B,C,D,E)        CALL SUBR
           .                          .
           .                          .
           .                          .
     END                         END
     SUBROUTINE SUBR(A,B,C,D,E)  SUBROUTINE SUBR
           .                     COMMON/SUBRA/A,B,C,D,E
           .                          .
           .                          .
     END                              .
                                  END
     FUNCTION FUNCT(Y,Z)          FUNCTION FUNCT
           .                      COMMON/FUNCTA/Y,Z
           .                          .
           .                          .
     END                              .
                                  END

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

ПРИМЕР 7. ПО ВОЗМОЖНОСТИ НЕОБХОДИМО ИЗБЕГАТЬ ОПЕРАЦИЙ ДЕЛЕ-
НИЯ.

     НЕЭФФЕКТИВНО                  ЭФФЕКТИВНО

     A=B/2                         A=B*.5

     УМНОЖЕНИЕ ВЫПОЛНЯЕТСЯ БЫСТРЕЕ, ЧЕМ  ДЕЛЕНИЕ  И,  ТАКИМ
ОБРАЗОМ, СОКРАЩАЕТСЯ ВРЕМЯ ВЫПОЛНЕНИЯ.

                            - 30 -

                      00014 - 01.33.02


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




     7.1. ПРОГРАММНЫЕ СЕКЦИИ


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

     ОБ'ЕДИНЯЕМАЯ  (CON)   ИЛИ   ОВЕРЛЕЙНАЯ    (OVR) ;
     ДАННЫЕ        (D)     ИЛИ   ИНСТРУКЦИИ    (I)   ;
     ГЛОБАЛЬНАЯ    (GBL)   ИЛИ   ЛОКАЛЬНАЯ     (LCL) ;
     ПЕРЕМЕЩАЕМАЯ  (REL)   ИЛИ   АБСОЛЮТНАЯ    (ABS) ;
     ЧТЕНИЕ/ЗАПИСЬ (RW)    ИЛИ   ТОЛЬКО ЧТЕНИЕ (RO).



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


     КОМПИЛЯТОР ТРАНСЛИРУЕТ  ПРОГРАММУ  В  ТРИ  ПРОГРАММНЫЕ
СЕКЦИИ, ИМЕНА, АТРИБУТЫ И СОДЕРЖИМОЕ КОТОРЫХ ДАНЫ  В  ТАБЛ.
1.


                                             ТАБЛИЦА 1
         ОРГАНИЗАЦИЯ ПРОГРАММНЫХ СЕКЦИЙ
--------------------------------------------------------
 ИМЯ   !  АТРИБУТЫ    !        СОДЕРЖИМОЕ
--------------------------------------------------------
 ¤CODE !  RW, I, LCL, ! ВЕСЬ КОД ВЫПОЛНЯЕМОЙ ПРОГРАММЫ,
       ! REL, CON     ! ВКЛЮЧАЯ МОДУЛЬНЫЙ И ПРЯМОЙ
       !              !
¤DATAP ! RW, D, LCL,  ! ЧИСТЫЕ ДАННЫЕ (НАПРИМЕР ДАННЫЕ
       !REL, CON      !   ОПЕРАТОРА "FORMAT", КОНСТАНТЫ,
       !              ! ВЕКТОРА МАССИВОВ), КОТОРЫЕ НЕ
       !              ! МОГУТ ИЗМЕНЯТЬСЯ ВО ВРЕМЯ
       !              ! ВЫПОЛНЕНИЯ ПРОГРАММЫ
       !              !
 ¤DATA ! RW, D, LCL,  ! СМЕШАННЫЕ ДАННЫЕ, ПЕРЕМЕННЫЕ,
       ! REL, CON     !  ХРАНИМЫЕ ВРЕМЕННО, И МАССИВЫ,
       !              ! ИСПОЛЬЗУЕМЫЕ В ПРОГРАММАХ

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



                            - 31 -

                      00014 - 01.33.02


     7.1.2. ИСПОЛЬЗОВАНИЕ PSECT В БЛОКАХ COMMON


     В ФОРТРАНЕ ПАМЯТЬ ДЛЯ  COMMON  РЕАЛИЗУЕТСЯ  С  ПОМОЩЬЮ
ИМЕНОВАННЫХ "PSECT", ИМЕЮЩИХ ТО ЖЕ ИМЯ, ЧТО И БЛОК  COMMON.
"PSECT", В КОТОРОЙ ПРЕДОСТАВЛЯЕТСЯ ПАМЯТЬ ДЛЯ COMMON, ИМЕЕТ
АТРИБУТЫ:

                  RW, D, GBL, REL, OVR.

     НАПРИМЕР, ОПЕРАТОР

       COMMON /X/ A, B, C

ЭКВИВАЛЕНТЕН СЛЕДУЮЩЕЙ ПОСЛЕДОВАТЕЛЬНОСТИ ДИРЕКТИВ МАКРОАС-
СЕМБЛЕРА:

                .PSECT X, RW, D, GBL, REL, OVR
             A: .BLKW  2
             B: .BLKW  2
             C: .BLKW  2

     ДЛЯ  НЕИМЕНОВАННОГО  COMMON  ИСПОЛЬЗУЕТСЯ  ИМЯ  СЕКЦИИ
".¤¤¤¤.". ТАКИМ ОБРАЗОМ ОПЕРАТОР:

       COMMON C, B /X/ A

ЭКВИВАЛЕНТЕН:

                .PSECT .¤¤¤¤., RW, D, GBL, REL, OVR
             C: .BLKW  2
             B: .BLKW  2
                .PSECT X, RW, D, GBL, REL, OVR
             A: .BLKW  2

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



     7.1.3. ИСПОЛЬЗОВАНИЕ  ПРОГРАММНЫХ  СЕКЦИЙ  В
            БИБЛИОТЕКЕ OTS



     МОДУЛИ, ВКЛЮЧЕННЫЕ В БИБЛИОТЕКУ OTS, К  КОТОРЫМ  ОБРА-
ЩАЕТСЯ ПРОГРАММА ПРИ ВЫПОЛНЕНИИ, СОДЕРЖАТ ПЯТЬ  ПРОГРАММНЫХ
СЕКЦИЙ:

 .PSECT OTS¤I RW, I, LCL, REL, CON
       - СОДЕРЖИТ ВЕСЬ ЧИСТЫЙ КОД И ДАННЫЕ ДЛЯ МОДУЛЯ;

 .PSECT OTS¤P RW, D, GBL, REL, OVR
       - СОДЕРЖИТ ВСЕ ЧИСТЫЕ ТАБЛИЦЫ АДРЕСОВ ДРУГИХ БИБЛИО-
         ТЕЧНЫХ МОДУЛЕЙ OTS;



                            - 32 -

                      00014 - 01.33.02


 .PSECT OTS¤D RW, D, LCL, REL, CON
       - СОДЕРЖИТ  ЧИСТЫЕ  ДАННЫЕ,  К  КОТОРЫМ   ОБРАЩАЕТСЯ
         МОДУЛЬ;

 .PSECT OTS¤S RW, D, LCL, REL, CON
       - СОДЕРЖИТ СВЕРХОПЕРАТИВНУЮ ПАМЯТЬ, К КОТОРОЙ  ОБРА-
         ЩАЕТСЯ МОДУЛЬ;

 .PSECT OTS¤O RW, I, LCL, REL, CON
       - СОДЕРЖИТ ПРОГРАММЫ OTS,  КОТОРЫЕ  ДОЛЖНЫ  ИЛИ  НЕ
         ДОЛЖНЫ РАЗМЕЩАТЬСЯ В ОБЛАСТИ СВОПИНГА USR.



     7.1.4. ПОРЯДОК    "PSECT"    В    ВЫПОЛНЯЕМЫХ
            ПРОГРАММАХ


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

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

     ГОЛОВНАЯ ПРОГРАММА (ОБЫЧНО ЭТО ПЕРВАЯ ОБ'ЕКТНАЯ  ПРОГ-
РАММА В ПОСЛЕДОВАТЕЛЬНОСТИ ВХОДНЫХ ФАЙЛОВ, УКАЗАННЫХ  LINK)
ОБ'ЯВЛЯЕТ СЛЕДУЮЩИЙ ПОРЯДОК "PSECT":

     ИМЯ СЕКЦИИ                   АТРИБУТЫ

       OTS¤I                 RW, I, LCL, REL, CON
       OTS¤P                 RW, D, GBL, REL, OVR
       SYS¤I                 RW, I, LCL, REL, CON
       USER¤I                RW, I, LCL, REL, CON
       ¤CODE                 RW, I, LCL, REL, CON
       OTS¤O                 RW, I, LCL, REL, CON
       SYS¤I                 RW, I, LCL, REL, CON
       ¤DATAP                RW, D, LCL, REL, CON
       OTS¤D                 RW, D, LCL, REL, CON
       OTS¤S                 RW, D, LCL, REL, CON
       SYS¤S                 RW, D, LCL, REL, CON
       ¤DATA                 RW, D, LCL, REL, CON
       USER¤D                RW, D, LCL, REL, CON
       .¤¤¤¤.                RW, D, GBL, REL, OVR
       ДРУГИЕ БЛОКИ COMMON   RW, D, GBL, REL, OVR

     В ОС БК11 ОБЛАСТЬ СВОПИНГА USR МОЖЕТ ПЕРЕКРЫВАТЬ  ЧИС-
ТЫЙ КОД, НО НЕ ДОЛЖНА ПЕРЕКРЫВАТЬ КОНСТАНТЫ  ИЛИ  СМЕШАННЫЕ
ДАННЫЕ, КОТОРЫЕ МОГУТ ПЕРЕДАВАТЬСЯ ЕЙ В  КАЧЕСТВЕ  АРГУМЕН-
ТОВ.

     СОГЛАСНО ПРИВЕДЕННОМУ ВЫШЕ ПОРЯДКУ В ПАМЯТИ СОБИРАЮТСЯ
ВСЕ СЕКЦИИ ЧИСТОГО КОДА ДО СМЕШАННЫХ ДАННЫХ, И СВОПИНГ  USR
МОЖЕТ ВЫПОЛНЯТЬСЯ В  ЗОНЕ  СЕКЦИЙ  ¤CODE,  OTS¤P,  SYS¤I  И
USER¤I.


                            - 33 -

                      00014 - 01.33.02


     ПРОГРАММЫ НА ЯЗЫКЕ АССЕМБЛЕРА, ИСПОЛЬЗУЕМЫЕ В ПРИКЛАД-
НЫХ ПРОГРАММАХ, ВЫЗЫВАЮЩИЕ USR, ДОЛЖНЫ ИСПОЛЬЗОВАТЬ  ТЕ  ЖЕ
ПРОГРАММНЫЕ  СЕКЦИИ,  ЧТО  И  КОМПИЛЯТОР,  Т.Е.  НЕОБХОДИМО
ПОМЕСТИТЬ ЧИСТЫЙ КОД И ДАННЫЕ ТОЛЬКО ДЛЯ СЧИТЫВАНИЯ В  СЕК-
ЦИЮ USER¤I, А ВСЕ ОСТАЛЬНЫЕ ДАННЫЕ - В СЕКЦИЮ  USER¤D.  ПРИ
ЭТОМ УСЛОВИИ ПРОГРАММЫ НА ЯЗЫКЕ АССЕМБЛЕРА БУДУТ  ПРАВИЛЬНО
УЧАСТВОВАТЬ В РАЗДЕЛЕНИИ ПРОГРАММЫ НА КОД И ДАННЫЕ.

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

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




                  8. НАСТРОЙКА ПРОГРАММЫ




     8.1. КОМПОНОВКА ПРОГРАММЫ


     ПРОЦЕСС КОМПОНОВКИ ВЫПОЛНЯЕТСЯ ИДЕНТИЧНО ДЛЯ ПРОГРАММ,
НАПИСАННЫХ КАК НА АССЕМБЛЕРЕ, ТАК И НА ФОРТРАНЕ.



     8.1.1. ПЕРЕДАЧА УПРАВЛЕНИЯ И ДАННЫХ


     УПРАВЛЕНИЕ ПОДПРОГРАММЕ ПЕРЕДАЕТСЯ ПО ИНСТРУКЦИИ

        JSR PC, SUBR

ГДЕ

SUBR
       - ГЛОБАЛЬНЫЙ СИМВОЛ, ТОЧКА ВХОДА В  ПОДПРОГРАММУ,  А
         РЕГИСТР 5 (R5) СОДЕРЖИТ АДРЕС  СПИСКА  АРГУМЕНТОВ,
         ИМЕЮЩЕГО СЛЕДУЮЩИЙ ФОРМАТ:



                            - 34 -

                      00014 - 01.33.02


            -----------------------------------------
            ! ne opredeleno ! koli~estwo argumentow !
            !---------------------------------------!
            !         adres 1-go argumenta          !
            !---------------------------------------!
            !         adres 2-go argumenta          !
            !---------------------------------------!
            !                   .                   !
            !                   .                   !
            !                   .                   !
            !---------------------------------------!
            !         adres N-go argumenta          !
            -----------------------------------------

АДРЕС МЛАДШЕГО БАЙТА ПЕРВОГО СЛОВА ПОМЕЩАЕТСЯ В R5.  ЗНАЧЕ-
НИЕ "-1" ИСПОЛЬЗУЕТСЯ КАК АДРЕС ЛЮБЫХ ОПУЩЕННЫХ АРГУМЕНТОВ.
ОПУЩЕННЫЕ АРГУМЕНТЫ ОТМЕЧАЮТСЯ В ОПЕРАТОРЕ "CALL"  ПОСЛЕДО-
ВАТЕЛЬНЫМИ ЗАПЯТЫМИ. НАПРИМЕР:

        CALL SUB(A,,B)


     ПРИМЕЧАНИЕ. Т.К. СПИСОК ФОРМИРУЕТСЯ В ПРОЦЕССЕ  РАБОТЫ
ВЫЗЫВАЮЩЕЙ ПРОГРАММЫ, ТО ВЫЗВАННАЯ  ПРОГРАММА  НЕ  ИЗМЕНЯЕТ
СПИСКА АРГУМЕНТОВ, ПЕРЕДАВАЕМОГО ПОДПРОГРАММЕ.

     ИНСТРУКЦИЯ

        RTS PC

ВОЗВРАЩАЕТ УПРАВЛЕНИЕ ВЫЗЫВАЮЩЕЙ ПРОГРАММЕ.

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

        CALL IADD(NUM1,NUM2,...,NUMN,ISUM),

ГДЕ

NUM1,...,NUMN
       - ПЕРЕМЕННОЕ ЧИСЛО ЦЕЛЫХ ВЕЛИЧИН, ПОДЛЕЖАЩИХ  СУММИ-
         РОВАНИЮ;

ISUM
       - ЦЕЛАЯ ПЕРЕМЕННАЯ ИЛИ ЭЛЕМЕНТ ЦЕЛОЧИСЛЕННОГО МАССИ-
         ВА, КУДА БУДЕТ ПОМЕЩЕНА СУММА.

     ИМЕЕТСЯ СЛЕДУЮЩАЯ ПОДРОГРАММА НА МАКРОАССЕМБЛЕРЕ:

        .TITLE   ADDER
IADD::  MOVB     (R5)+,R0 ;ПОЛУЧИТЬ ЧИСЛО АРГУМЕНТОВ
        CLR      R1       ;ПОДГОТОВИТЬ РАБОЧИЙ РЕГИСТР
        DECB     R0       ;НАЙТИ ЧИСЛО ТЕРМОВ ДЛЯ СЛОЖЕНИЯ
1¤:     ADD      @(R5)+,R1;ПРИБАВИТЬ ТЕКУЩИЙ ТЕРМ
        DECB     R0       ;УМЕНЬШИТЬ СЧЕТЧИК
        BNE      1¤       ;ПОВТОРИТЬ ЦИКЛ

                          - 35 -

                    00014 - 01.33.02


        мож      р1,ю(р5) ;ПЕРЕДАТЬ РЕЗУЛЬТАТ
        RTS      PC       ;ВОЗВРАТ УПРАВЛЕНИЯ

     ПОСЛЕДОВАТЕЛЬНОСТЬ ОБРАЩЕНИЙ НА ФОРТРАНЕ:

       CALL IADD(1,5,7,I)
       CALL IADD(15,30,10,20,5,J)

ВЫЗОВЕТ ПРИСВОЕНИЕ ПЕРЕМЕННОЙ "I" ЗНАЧЕНИЕ 13, А ПЕРЕМЕННОЙ
"J" - ЗНАЧЕНИЕ 80.



     8.1.2. ИСПОЛЬЗОВАНИЕ РЕГИСТРОВ



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

     НАПИСАННЫЕ НА ЯЗЫКЕ АССЕМБЛЕРА ПРОГРАММЫ ПОЛЬЗОВАТЕЛЯ,
КОТОРЫЕ ВЫЗЫВАЮТ ФОРТРАНОВСКИЕ ПРОГРАММЫ, ДОЛЖНЫ  СОХРАНЯТЬ
СОДЕРЖИМОЕ ВСЕХ НУЖНЫХ РЕГИСТРОВ ДО ВЫЗОВА  ПОДПРОГРАММЫ  И
ВОССТАНАВЛИВАТЬ ИХ ПОСЛЕ ВОЗВРАТА УПРАВЛЕНИЯ, ЕСЛИ  НЕОБХО-
ДИМО.

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



     8.2. ОРГАНИЗАЦИЯ ПАМЯТИ ВО ВРЕМЯ ВЫПОЛНЕНИЯ


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

     ЕСЛИ  НАПИСАННЫЕ  ПОЛЬЗОВАТЕЛЕМ  ПРОГРАММЫ  УПРАВЛЕНИЯ
ПРЕРЫВАНИЯМИ КОМПОНУЮТСЯ С ПРОГРАММОЙ НА ФОРТРАНЕ, ТО  СЛЕ-
ДУЕТ ИЗБЕГАТЬ СВОПИНГА USR С ПРОГРАММАМИ ОБРАБОТКИ ПРЕРЫВА-
НИЙ И СООТВЕТСТВУЮЩИМИ ДАННЫМИ. ДЛЯ USR  ОТВОДИТСЯ  ОБЛАСТЬ
ВЫШЕ ВЕКТОРОВ ПРЕРЫВАНИЯ, НАЧИНАЯ С ЯЧЕЙКИ  ¤¤OTSI,  И  ОНА
ЗАНИМАЕТ ПРИБЛИЗИТЕЛЬНО 2К СЛОВ.

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



                          - 36 -

                    00014 - 01.33.02


ОБЛАСТИ, ИСПОЛЬЗУЕМОЙ ДЛЯ СВОПИНГА USR, ЕСЛИ USR  НЕ  РЕЗИ-
ДЕНТНА. USR БУДЕТ РЕЗИДЕНТНА,  ЕСЛИ  ОБМЕН  БУДЕТ  ЗАПРЕЩЕН
КЛЮЧОМ КОМПИЛЯТОРА /NOSWAP.

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

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




                  9. ПРОВЕРКА ПРОГРАММЫ




     9.1. ТРАССИРОВКА ОШИБОК


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

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

     НАПРИМЕР, В РЕЗУЛЬТАТЕ РАБОТЫ СЛЕДУЮЩЕЙ ПРОГРАММЫ:

     0001   A=0.0
     0002   CALL SUB1(A)
     0003   CALL EXIT
     0004   END

     0001   SUBROUTINE SUB1 (B)



                          - 37 -

                    00014 - 01.33.02


     0002   CALL SUB1(B)
     0003   RETURN
     0004   END

     0001   SUBROUTINE SUB2 (C)
     0002   CALL SUB3(C)
     0003   RETURN
     0004   END

     0001   SUBROUTINE SUB3 (D)
     0002   E=1.0
     0003   F=E/D
     0004   RETURN
     0005   END

БУДЕТ РАСПЕЧАТАНА СЛЕДУЮЩАЯ ДИАГНОСТИКА ОШИБКИ:

         ?ERR 12 FLOATING ZERO DIVIDE

         IN   ROUTINE "SUB3  "  LINE 3
         FROM ROUTINE "SUB2  "  LINE ?
         FROM ROUTINE "SUB1  "  LINE 2
         FROM ROUTINE ".MAIN."  LINE 2

В ТЕКСТЕ  СООБЩЕНИЙ  ВМЕСТО  НОМЕРА  СТРОКИ  ДЛЯ  ПРОГРАММЫ
"SUB2" НАПЕЧАТАН ЗНАК ВОПРОСА (?).  ЭТО  ПРОИСХОДИТ  ТОГДА,
КОГДА МОДУЛЬ ТРАНСЛИРОВАЛСЯ С КЛЮЧОМ "/NOLINENUMBERS".



        10. ОСОБЕННОСТИ ЯЗЫКА ФОРТРАН-IV В ОС БК11



     ФОРТРАН-IV ПРЕД'ЯВЛЯЕТ СЛЕДУЮЩИЕ ТРЕБОВАНИЯ К  ПОРЯДКУ
ОПЕРАТОРОВ:

       - ПЕРВАЯ СТРОКА ПОДПРОГРАММЫ, НЕ ЯВЛЯЮЩАЯСЯ  КОММЕН-
         ТАРИЕМ,   ДОЛЖНА   БЫТЬ    ОПЕРАТОРОМ    FUNCTION,
         SUBROUTINE ИЛИ BLOCK DATA;

       - ПОСЛЕДНЯЯ СТРОКА В ПРОГРАММЕ ДОЛЖНА БЫТЬ  ОПЕРАТО-
         РОМ END;

       - ОПЕРАТОРНЫЕ  ФУНКЦИИ  ДОЛЖНЫ  БЫТЬ  ОПРЕДЕЛЕНЫ  ДО
         ОБРАЩЕНИЯ К НИМ.

ЕСЛИ ЭТОТ ПОРЯДОК НЕ СОБЛЮДАЕТСЯ, ТО В ЛИСТИНГЕ  ТРАНСЛЯЦИИ
ПРИ ИСПОЛЬЗОВАНИИ КЛЮЧА "/WARNINGS" ПОЯВИТСЯ  ПРЕДУПРЕЖДАЮ-
ЩАЯ ДИАГНОСТИКА.



                          - 38 -

                    00014 - 01.33.02


     10.1. ОГРАНИЧЕНИЯ ОПЕРАТОРОВ OPEN/CLOSE


     НЕСМОТРЯ НА ТО, ЧТО ОПЕРАТОРЫ OPEN И CLOSE ИМЕЮТ ВЫХОД
ПО ОШИБКЕ "ERR=LABEL", УПРАВЛЕНИЕ НА  МЕТКУ  "LABEL"  ПЕРЕ-
ДАЕТСЯ ТОЛЬКО ПРИ СЛЕДУЮЩИХ УСЛОВИЯХ:

       - СИНТАКСИЧЕСКАЯ ОШИБКА В СПЕЦИФИКАЦИИ ФАЙЛА;

       - ФАЙЛ НЕ НАЙДЕН;

       - ФАЙЛ УЖЕ ОТКРЫТ НА УСТРОЙСТВЕ;

       - ФАЙЛ НЕ МОЖЕТ БЫТЬ ОТКРЫТ НА УСТРОЙСТВЕ.



     10.1.1. ОГРАНИЧЕНИЯ КЛЮЧЕВЫХ СЛОВ


     ДОПУСТИМЫЕ  КЛЮЧЕВЫЕ  СЛОВА  В  ОПЕРАТОРАХ  OPEN/CLOSE
РАССМОТРЕНЫ В "ОПИСАНИИ ЯЗЫКА ФОРТРАН".  ОДНАКО,  ПОСКОЛЬКУ
ФОРТРАН-IV СИСТЕМЫ ОС БК11 НЕ ПОДДЕРЖИВАЕТ НЕКОТОРЫЕ КЛЮЧЕ-
ВЫЕ  СЛОВА  И  КЛЮЧИ,  ТО  ПРИ   ИСПОЛЬЗОВАНИИ   ОПЕРАТОРОВ
OPEN/CLOSE ДОЛЖНЫ УЧИТЫВАТЬСЯ СЛЕДУЮЩИЕ ОГРАНИЧЕНИЯ:

ACCESS='APPEND'
       - НЕ  ПОДДЕРЖИВАЕТСЯ;  ПОЯВЛЯЕТСЯ  ОШИБКА  ВО  ВРЕМЯ
         ТРАНСЛЯЦИИ И ВО ВРЕМЯ ВЫПОЛНЕНИЯ;

BUFFERCOUNT=BC
       - УКАЗЫВАЕТ ЧИСЛО БУФЕРОВ (1 ИЛИ 2),  КОТОРЫЕ  БУДУТ
         ИСПОЛЬЗОВАТЬСЯ ПРИ ВЫВОДЕ  ДАННЫХ;  ЕСЛИ  ПАРАМЕТР
         ОТСУТСТВУЕТ, ТО - ОДИН БУФЕР;

BUFFERSIZE=BC
       - НЕ  ПОДДЕРЖИВАЕТСЯ;  ПОЯВЛЯЕТСЯ  ОШИБКА  ВО  ВРЕМЯ
         ТРАНСЛЯЦИИ И ВЫПОЛНЕНИЯ;

CARRIAGECONTROL
       - ФОРМАТНЫЙ ФАЙЛ ДОЛЖЕН ИМЕТЬ АТРИБУТ "FORTRAN"  ИЛИ
         "LIST", НЕФОРМАТНЫЙ ФАЙЛ С  ПРОИЗВОЛЬНЫМ  ДОСТУПОМ
         ДОЛЖЕН ИМЕТЬ АТРИБУТ "NONE";

DISPOSE='PRINT'
       - ПОЯВЛЯЕТСЯ ОШИБКА ВО  ВРЕМЯ  ТРАНСЛЯЦИИ,  ТАК  КАК
         СИСТЕМА  НЕ  ПОДДЕРЖИВАЕТ  СПУЛИНГ  НА  УСТРОЙСТВО
         ПЕЧАТИ;

EXTENDSIZE=ES
       - НЕ ПОДДЕРЖИВАЕТСЯ; ВО ВРЕМЯ ТРАНСЛЯЦИИ И  ВЫПОЛНЕ-
         НИЯ ПОЯВЛЯЕТСЯ ОШИБКА;

FORM='FORMATTED'
       - НЕ ДОПУСТИМ ДЛЯ ФАЙЛОВ С ПРЯМЫМ ДОСТУПОМ;



                          - 39 -

                    00014 - 01.33.02


INITIALIZE=IS
       - БЕРЕТСЯ ПО УМОЛЧАНИЮ ВТОРАЯ САМАЯ БОЛЬШАЯ  ОБЛАСТЬ
         ИЛИ  ПОЛОВИНА  САМОЙ  БОЛЬШОЙ  СВОБОДНОЙ  ОБЛАСТИ;
         INITIALIZE УПРАВЛЯЕТ РАЗМЕЩЕНИЕМ ФАЙЛА,  ПОСКОЛЬКУ
         РАСШИРЕНИЕ ФАЙЛА НЕ ПОДДЕРЖИВАЕТСЯ;

MAXREC=MR
       - РАЗМЕР ФАЙЛА С ПРЯМЫМ ДОСТУПОМ ПРИ НАЧАЛЬНОМ РАСП-
         РЕДЕЛЕНИИ ОПРЕДЕЛЯЕТСЯ БОЛЬШИМ ИЗ ДВУХ ПАРАМЕТРОВ;
         INITIALSIZE ИЛИ ПРОИЗВЕДЕНИЕМ MAXREC И RECORDSIZE;

NOSPANBLOCKS
       - НЕ ПОДДЕРЖИВАЕТСЯ, ОШИБКА;

RECORDSIZE
       - ОБЯЗАТЕЛЬНО ДОЛЖНО БЫТЬ УКАЗАНО ДЛЯ ФАЙЛА С ПРЯМЫМ
         ДОСТУПОМ;

SHARED
       - НЕ  ПОДДЕРЖИВАЕТСЯ;  ПОЯВЛЯЕТСЯ  ОШИБКА  ВО  ВРЕМЯ
         ТРАНСЛЯЦИИ И ВЫПОЛНЕНИЯ.



     10.2. ИСХОДНЫЕ СТРОКИ


     ДОПУСТИМАЯ ИСХОДНАЯ СТРОКА  В  ФОРТРАН-IV  СОСТОИТ  ИЗ
СЛЕДУЮЩИХ КОМПОНЕНТОВ:

       - НЕОБЯЗАТЕЛЬНАЯ ЧИСЛОВАЯ МЕТКА ОПЕРАТОРА ДЛИНОЙ  ОТ
         ОДНОГО ДО ПЯТИ  ЗНАКОВ;  ЗАТЕМ  ДОСТАТОЧНОЕ  ЧИСЛО
         ПРОБЕЛОВ ДЛЯ РАЗМЕЩЕНИЯ СЛЕДУЮЩЕГО СИМВОЛА В  7-ОЙ
         КОЛОНКЕ (ЕСЛИ НЕТ СТРОКИ ПРОДОЛЖЕНИЯ) ИЛИ  В  6-ОЙ
         КОЛОНКЕ (ДЛЯ ПРОДОЛЖЕНИЯ) ПЕЧАТАЕТСЯ ЗНАК  ПРОДОЛ-
         ЖЕНИЯ;

                            ИЛИ

         СИМВОЛ ТАБУЛЯЦИИ   ПЕРЕД   ЛЮБЫМ   НЕАЛФАВИТНЫМ
         СИМВОЛОМ ДЛЯ УКАЗАНИЯ ПРОДОЛЖЕНИЯ,

                            ИЛИ

         СИМВОЛ ТАБУЛЯЦИИ, ЕСЛИ ЭТО НЕ СТРОКА ПРОДОЛЖЕ-
         НИЯ;

       - ДОПУСТИМЫЙ  ОПЕРАТОР  ФОРТРАН-IV  ИЛИ  ПРОДОЛЖЕНИЕ
         ОПЕРАТОРА;

       - ПРОИЗВОЛЬНОЕ ПОЛЕ КОММЕНТАРИЯ, ОГРАНИЧЕННОЕ  СЛЕВА
         ВОСКЛИЦАТЕЛЬНЫМ ЗНАКОМ (!).

     СТРОКА СО  ВСЕМИ  ПРОБЕЛАМИ  И/ИЛИ  СТРОКА,  СОСТОЯЩАЯ
ТОЛЬКО ИЗ КОМБИНАЦИИ (CR> И <LF>, ИГНОРИРУЕТСЯ  ПРИ  ВВОДЕ.
ЕСЛИ  СТРОКА  НЕ  ПУСТАЯ,  ОНА  ДОЛЖНА  СОДЕРЖАТЬ  ОПЕРАТОР
ФОРТРАН-IV.

                          - 40 -

                    00014 - 01.33.02


     10.3. ИМЕНА ПЕРЕМЕННЫХ


     В ФОРТРАН-IV  РАЗРЕШАЮТСЯ  ИМЕНА  ПЕРЕМЕННЫХ,  ИМЕЮЩИХ
БОЛЬШЕ ШЕСТИ СИМВОЛОВ. НО ПРИ ЭТОМ ТОЛЬКО ПЕРВЫЕ ШЕСТЬ СИМ-
ВОЛОВ ЯВЛЯЮТСЯ ЗНАЧАЩИМИ И ДОЛЖНЫ БЫТЬ УНИКАЛЬНЫМИ В  ПРОГ-
РАММЕ. ДЛЯ КАЖДОГО ИМЕНИ ПЕРЕМЕННОЙ, ДЛИНА КОТОРОГО  ПРЕВЫ-
ШАЕТ 6 СИМВОЛОВ,  ПОЯВЛЯЕТСЯ  ПРЕДУПРЕЖДАЮЩАЯ  ДИАГНОСТИКА,
ЕСЛИ  В   КОМАНДНУЮ   СТРОКУ   КОМПИЛЯТОРА   ВКЛЮЧЕН   КЛЮЧ
"/WARNINGS".



     10.4. ИНИЦИАЛИЗАЦИЯ  ЗНАЧЕНИЙ  ПЕРЕМЕННЫХ   В
           COMMON


     ПРИ ИСПОЛЬЗОВАНИИ ОПЕРАТОРА "DATA" РАЗРЕШАЕТСЯ ИНИЦИА-
ЛИЗАЦИЯ ЗНАЧЕНИЙ  ЛЮБЫХ  ПЕРЕМЕННЫХ,  РАЗМЕЩЕННЫХ  В  БЛОКЕ
COMMON, В ТОМ ЧИСЛЕ В НЕИМЕНОВАННОМ.



     10.5. СТРОКИ ПРОДОЛЖЕНИЯ


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

     ФОРТРАН-IV НЕ НАКЛАДЫВАЕТ НИКАКИХ ОГРАНИЧЕНИЙ НА ЧИСЛО
СТРОК ПРОДОЛЖЕНИЯ, КОТОРЫЕ МОЖЕТ ИМЕТЬ ОПЕРАТОР.



     10.6. ОПЕРАТОРЫ STOP И PAUSE


     ОПЕРАТОР "PAUSE" ПРИОСТАНАВЛИВАЕТ ВЫПОЛНЕНИЕ ПРОГРАММЫ
И ПЕЧАТАЕТ СЛОВО "PAUSE" И СОДЕРЖИМОЕ СТРОКИ  ТЕКСТА  (ЕСЛИ
ОНА ЕСТЬ) НА ТЕРМИНАЛЕ. ДЛЯ ПРОДОЛЖЕНИЯ ПРОГРАММЫ НЕОБХОДИ-
МО ВВЕСТИ С ТЕРМИНАЛА СИМВОЛ (CR>.

     НАПРИМЕР, ИСПОЛЬЗОВАНИЕ ОПЕРАТОРА

       PAUSE 'MOUNT A NEW TAPE'

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

       PAUSE -- MOUNT A NEW TAPE

     ПРИ ВЫПОЛНЕНИИ ОПЕРАТОРА "STOP" ЗАКРЫВАЮТСЯ ВСЕ  ФАЙЛЫ
И УПРАВЛЕНИЕ ПЕРЕДАЕТСЯ МОНИТОРУ. ДЛЯ ОКОНЧАНИЯ  ВЫПОЛНЕНИЯ
ПРОГРАММЫ БЕЗ ПЕЧАТИ СООБЩЕНИЯ  "STOP"  ИСПОЛЬЗУЕТСЯ  "CALL
EXIT".



                          - 41 -

                    00014 - 01.33.02


     ОПЕРАТОР "STOP" ВЫДАЕТ СЛЕДУЮЩЕЕ СООБЩЕНИЕ:

       STOP -- TEXT

ГДЕ

TEXT
       - ТЕКСТОВАЯ СТРОКА, ЗАДАННАЯ В ИСХОДНОМ ОПЕРАТОРЕ.



     10.7. СООТВЕТСТВИЕ ЛОГИЧЕСКИХ НОМЕРОВ ВНЕШНИМ
           УСТРОЙСТВАМ И ФАЙЛАМ


     СООТВЕТСТВИЕ ЛОГИЧЕСКИХ НОМЕРОВ ВНЕШНИМ УСТРОЙСТВАМ  И
ФАЙЛАМ УКАЗАНО В ТАБЛ. 2.

                                                ТАБЛИЦА 2

         ПРИСВОЕНИЕ ЛОГИЧЕСКИХ НОМЕРОВ УСТРОЙСТВАМ
---------------------------------------------------------
   НОМЕР   !        УСТРОЙСТВО          !   ИМЯ ФАЙЛА
ЛОГИЧЕСКОГО!      ПО УМОЛЧАНИЮ          !  ПО УМОЛЧАНИЮ
 УСТРОЙСТВА!                            !
---------------------------------------------------------
     1     ! СИСТЕМНЫЙ ДИСК ИЛИ ДРУГОЕ  !     FTN1.DAT
           ! СИСТЕМНОЕ УСТРОЙСТВО (SY:) !
     2     ! СТАНДАРТНОЕ УСТРОЙСТВО(DK:)!     FTN2.DAT
     3     ! СТАНДАРТНОЕ УСТРОЙСТВО(DK:)!     FTN3.DAT
     4     ! СТАНДАРТНОЕ УСТРОЙСТВО(DK:)!     FTN4.DAT
     5     ! ТЕРМИНАЛ, TT: (ВВОД)       !     FTN5.DAT
     6     ! УСТРОЙСТВО ПЕЧАТИ, LP:     !     FTN6.DAT
     7     ! ТЕРМИНАЛ, TT: (ВЫВОД)      !     FTN7.DAT

     КОМАНДА МОНИТОРА "ASSIGN" МОЖЕТ ИЗМЕНЯТЬ ЗНАЧЕНИЕ УСТ-
РОЙСТВА ПО УМОЛЧАНИЮ. НАПРИМЕР, КОМАНДА МОНИТОРА

        .ASSIGN LP: 7

СВЯЗЫВАЕТ ЛОГИЧЕСКИЙ НОМЕР 7 С ФИЗИЧЕСКИМ УСТРОЙСТВОМ "LP:"
- УСТРОЙСТВОМ ПЕЧАТИ.

     СИСТЕМНАЯ ПОДПРОГРАММА  "ASSIGN"  МОЖЕТ  ИЗМЕНЯТЬ  ИМЯ
УСТРОЙСТВА И ИМЯ ФАЙЛА.

     ДОПУСТИМЫЕ НОМЕРА ЛОГИЧЕСКИХ УСТРОЙСТВ, КРОМЕ ПЕРЕЧИС-
ЛЕННЫХ В ТАБЛ. 2, (10-99) ПРИСВАИВАЮТСЯ ПО  УМОЛЧАНИЮ  СИС-
ТЕМНОМУ УСТРОЙСТВУ.

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



                          - 42 -

                    00014 - 01.33.02


     ФОРМАТНЫЙ ОПЕРАТОР READ В ФОРМЕ:

         READ F, LIST

ЭКВИВАЛЕНТЕН

         READ (1,F) LIST

     НОМЕРА ЛОГИЧЕСКИХ УСТРОЙСТВ 5, 7  И  6  СООТВЕТСТВЕННО
ЗАКРЕПЛЕНЫ ЗА ОПЕРАТОРАМИ ACCEPT, TYPE И PRINT.



     10.8. МАКСИМАЛЬНАЯ ДЛИНА ЗАПИСИ


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

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

     МАКСИМАЛЬНЫЙ РАЗМЕР БУФЕРА СТРОКИ  РАВЕН  4095  БАЙТАМ
(7777 ВОСЬМЕРИЧНЫХ). МИНИМАЛЬНЫЙ РАЗМЕР РАВЕН 4 БАЙТАМ.



     10.9. ВВОД/ВЫВОД С ПРЯМЫМ ДОСТУПОМ


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



     10.9.1. ОПЕРАТОР DEFINE FILE


     ПЕРВЫЙ, ЗАКЛЮЧЕННЫЙ В  СКОБКИ,  АРГУМЕНТ  В  ОПЕРАТОРЕ
"DEFINE FILE" УКАЗЫВАЕТ ДЛИНУ В ЗАПИСЯХ ОПРЕДЕЛЯЕМОГО ФАЙЛА
ПРЯМОГО ДОСТУПА. ЕСЛИ ОПЕРАТОР "DEFINE FILE" ЯВЛЯЕТСЯ ОДНИМ
ИЗ НЕСКОЛЬКИХ ОПЕРАТОРОВ ПО  ФОРМИРОВАНИЮ  ФАЙЛА,  ЗНАЧЕНИЕ
АРГУМЕНТА  В  ЭТОМ  ОПЕРАТОРЕ  МОЖЕТ  БЫТЬ  НЕОПРЕДЕЛЕННЫМ.
ФОРТРАН-IV ИМЕЕТ НЕКОТОРУЮ ДОПОЛНИТЕЛЬНУЮ ГИБКОСТЬ  В  ЭТОЙ
СИТУАЦИИ.  КОНСТРУКЦИЯ  "END="  В  ОПЕРАТОРАХ  ВВОДА/ВЫВОДА
НЕОБХОДИМА В ЭТОЙ СИТУАЦИИ ДЛЯ ОПРЕДЕЛЕНИЯ ДЛИНЫ ФАЙЛА.



                          - 43 -

                    00014 - 01.33.02


     10.9.2. СОЗДАНИЕ ФАЙЛОВ С ПРЯМЫМ ДОСТУПОМ


     ПЕРВОЙ ОПЕРАЦИЕЙ ВВОДА/ВЫВОДА, ВЫПОЛНЯЕМОЙ ДЛЯ ФАЙЛА С
ПРЯМЫМ ДОСТУПОМ ВО ВРЕМЯ  СОЗДАНИЯ,  ДОЛЖНА  БЫТЬ  ОПЕРАЦИЯ
"WRITE".   ОПЕРАЦИЯ   "READ"   ИЛИ    "FIND"    ПРИ    ЭТИХ
ОБСТОЯТЕЛЬСТВАХ ВЫЗЫВАЕТ НЕУСТРАНИМУЮ ОШИБКУ.



     10.10. ФОРМАТЫ ВВОДА/ВЫВОДА


     ФОРТРАН-IV ПОЗВОЛЯЕТ ФОРМАТНЫЙ ВВОД/ВЫВОД ДЛЯ ПЕРЕДАЧИ
ДАННЫХ В КОИ-7. НЕФОРМАТНЫЙ ВВОД/ВЫВОД И ВВОД/ВЫВОД С  ПРЯ-
МЫМ ДОСТУПОМ ИСПОЛЬЗУЕТСЯ ДЛЯ ПЕРЕДАЧИ ДВОИЧНЫХ ДАННЫХ.

     НЕКОТОРЫЕ  ОШИБКИ  МОГУТ  КОНТРОЛИРОВАТЬСЯ  ВО   ВРЕМЯ
ВЫПОЛНЕНИЯ  ВВОДА/ВЫВОДА  И  ПРЕОБРАЗОВАНИЙ  ПРОГРАММОЙ,  И
УПРАВЛЕНИЕ ПЕРЕДАЕТСЯ НА МЕТКУ ПРИ ИСПОЛЬЗОВАНИИ  ПАРАМЕТРА
"ERR=". ЭТОТ ПАРАМЕТР МОЖЕТ БЫТЬ УКАЗАН В ОПЕРАТОРАХ  READ,
WRITE, ENCODE ИЛИ DECODE.  СЛЕДУЕТ  ОТМЕТИТЬ,  ЧТО  ОШИБКА,
ИМЕЮЩАЯ ЗНАЧЕНИЕ ФЛАГА-СЧЕТЧИКА  "N",  СТАНЕТ  НЕУСТРАНИМОЙ
ПРИ N-ОМ ПОВТОРЕНИИ ОШИБКИ.

     МОГУТ БЫТЬ ВЫДЕЛЕНЫ СЛЕДУЮЩИЕ ОШИБКИ:

  НОМЕР ОШИБКИ   ТИП ОШИБКИ        ДИАГНОСТИКА

       5       НЕУСТРАНИМАЯ       ОШИБКА ПРЕОБРАЗОВАНИЯ
               ПОСЛЕ СЧЕТА 3      ПРИ ВВОДЕ
      23       НЕУСТРАНИМАЯ       АППАРАТУРНАЯ ОШИБКА
                                  ВВОДА/ВЫВОДА
      45       НЕУСТРАНИМАЯ       НЕСОВМЕСТИМОСТЬ ПЕРЕ-
                                  МЕННОЙ И ФОРМАТА
      46       НЕУСТРАНИМАЯ       НЕОПРЕДЕЛЕННЫЙ ЦИКЛ
                                  ФОРМАТА



     10.10.1. ФОРМАТНЫЙ ВВОД/ВЫВОД


     ПРОГРАММЫ ФОРМАТНОГО ВВОДА/ВЫВОДА ЧИТАЮТ  ИЛИ  ЗАПИСЫ-
ВАЮТ ФОРМАТНЫЕ ЗАПИСИ ПЕРЕМЕННОЙ ДЛИНЫ В КОДЕ КОИ-7. ЗАПИСЬ
СОСТОИТ ИЗ РЯДА ЗНАКОВ  КОДА  КОИ-7,  ЗА  КОТОРЫМИ  СЛЕДУЕТ
ЗНАК(И) РАЗДЕЛИТЕЛЯ ЗАПИСИ.

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

     ПРИ ВЫВОДЕ НА ПЕЧАТАЮЩЕЕ УСТРОЙСТВО (TT: ИЛИ LP:) РАЗ-
ДЕЛИТЕЛЕМ ЗАПИСИ, ДОБАВЛЯЕМЫМ  К  КАЖДОЙ  ЗАПИСИ,  ЯВЛЯЕТСЯ
СИМВОЛ ВОЗВРАТА КАРЕТКИ (<CR>). ДОБАВЛЕНИЕ ВОЗВРАТА КАРЕТКИ



                          - 44 -

                    00014 - 01.33.02


МОЖЕТ БЫТЬ ПОДАВЛЕНО ИСПОЛЬЗОВАНИЕМ ЗНАКА РАЗДЕЛИТЕЛЯ  ФОР-
МАТА "¤" В ОПЕРАТОРЕ "FORMAT". ПЕРВЫЙ СИМВОЛ КАЖДОЙ  ЗАПИСИ
НЕ ВЫВОДИТСЯ И ИНТЕРПРЕТИРУЕТСЯ КАК УПРАВЛЯЮЩИЙ.



     10.10.2. НЕФОРМАТНЫЙ ВВОД/ВЫВОД


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

     БЛОК СОСТОИТ ИЗ 256 СЛОВ, ПРОНУМЕРОВАННЫХ ОТ 0 ДО  255
И СОДЕРЖИТ КАТАЛОГ, ОПИСЫВАЮЩИЙ ЗАПИСИ, КОТОРЫЕ ОКАНЧИВАЮТ-
СЯ В БЛОКЕ. КАТАЛОГ НАЧИНАЕТСЯ С 254 СЛОВА И ПРОДОЛЖАЕТСЯ В
ОБРАТНОМ НАПРАВЛЕНИИ ДО НАЧАЛА БЛОКА. В СЛОВЕ 255 СОДЕРЖИТ-
СЯ ЧИСЛО ЗАПИСЕЙ, КОТОРЫЕ ОКАНЧИВАЮТСЯ В БЛОКЕ. УСТАНОВЛЕН-
НЫЙ БИТ 15 В СЛОВЕ 255 ЯВЛЯЕТСЯ ПРИЗНАКОМ КОНЦА ФАЙЛА. КАЖ-
ДАЯ ЗАПИСЬ КАТАЛОГА СОСТОИТ ИЗ  ОДНОГО  СЛОВА  И  УКАЗЫВАЕТ
АДРЕС КОНЦА ЗАПИСИ ОТНОСИТЕЛЬНО НАЧАЛА БЛОКА; УСТАНОВЛЕННЫЙ
БИТ СТАРШЕГО РАЗРЯДА СЛОВА-ЗАПИСИ В КАТАЛОГЕ ЯВЛЯЕТСЯ ПРИЗ-
НАКОМ ЗАПИСИ КОНЦА ФАЙЛА.

НАПРИМЕР, ПУСТЬ ПОСЛЕДНИМИ 3 СЛОВАМИ (ВОСЬМЕРИЧНОЕ) 0 БЛОКА
НЕФОРМАТНОГО ФАЙЛА ЯВЛЯЮТСЯ:

              100040, 40, 2

И ПОСЛЕДНИЕ 4 СЛОВА (ВОСЬМЕРИЧНЫЕ) 1 БЛОКА ТОГО  ЖЕ  НЕФОР-
МАТНОГО ФАЙЛА:

              106, 56, 46, 100003

ЭТО ИНТЕРПРЕТИРУЕТСЯ СЛЕДУЮЩИМ ОБРАЗОМ:

     БЛОК 0 СОДЕРЖИТ ЗАПИСИ 1, 2 И НАЧАЛО ЗАПИСИ 3.  ЗАПИСЬ
0 РАЗМЕЩАЕТСЯ С БЛОКА 0 БАЙТА 0 ДО (НЕ  ВКЛЮЧАЯ)  40  БАЙТА
БЛОКА 0. ЗАПИСЬ 2  ЯВЛЯЕТСЯ  ЗАПИСЬЮ  "ENDFILE",  УКАЗАННОЙ
БИТОМ #15, НАХОДЯЩИМСЯ В  КОНЦЕ  УКАЗАТЕЛЯ  ЗАПИСИ;  ЗАПИСИ
"ENDFILE" НЕ ИМЕЮТ ДЛИНЫ. ЗАПИСЬ 3 ПЕРЕКРЫВАЕТ БЛОКИ. НАЧИ-
НАЯСЬ С 40 БАЙТА 0 БЛОКА И ПРОДОЛЖАЯСЬ ДО (НЕ ВКЛЮЧАЯ) БАЙ-
ТА 46 БЛОКА 1. БЛОК 1 КРОМЕ ЭТОГО ТАКЖЕ СОДЕРЖИТ  ЗАПИСЬ  4
(С БАЙТА 46 ДО 56) И ЗАПИСЬ 5 (С БАЙТА 56 ДО 106). ПОСКОЛЬ-
КУ УСТАНОВЛЕН БИТ СТАРШЕГО РАЗРЯДА СЛОВА 255  БЛОКА  1,  ТО
ЗАПИСЬ, ПЕРЕХОДЯЩАЯ ИЗ БЛОКА 1 В БЛОК 2, ОТСУТСТВУЕТ,  Т.Е.
ЭТОТ ФАЙЛ СОДЕРЖИТ 5 ЗАПИСЕЙ.

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

                           - 45 -

                     00014 - 01.33.02


     10.10.3. ВВОД/ВЫВОД С ПРЯМЫМ ДОСТУПОМ


     ПРОГРАММЫ ВВОДА/ВЫВОДА С ПРЯМЫМ ДОСТУПОМ СЧИТЫВАЮТ ИЛИ
ЗАПИСЫВАЮТ ДВОИЧНЫЕ ЗАПИСИ С ФИКСИРОВАННОЙ ДЛИНОЙ. СТРУКТУ-
РА ЛОГИЧЕСКОЙ ЗАПИСИ ДЛЯ ФАЙЛА С  ПРЯМЫМ  ДОСТУПОМ  ОПРЕДЕ-
ЛЯЕТСЯ ОПЕРАТОРОМ "DEFINE FILE"  ИЛИ  КЛЮЧОМ  RECORDSIZE  В
ОПЕРАТОРЕ OPEN. ЗАПИСЬ СОДЕРЖИТ  ТОЛЬКО  УКАЗАННЫЕ  ДАННЫЕ,
ИНФОРМАЦИЯ УПРАВЛЕНИЯ И РАЗДЕЛИТЕЛИ ЗАПИСИ НЕ ИСПОЛЬЗУЮТСЯ.
СТРУКТУРА ЗАПИСИ С ПРЯМЫМ ДОСТУПОМ НЕ ЗАВИСИТ ОТ ФИЗИЧЕСКО-
ГО РАЗМЕРА БЛОКА УСТРОЙСТВА ВВОДА/ВЫВОДА.  ОДНАКО  ОПЕРАЦИЯ
БУДЕТ БОЛЕЕ ЭФФЕКТИВНА, ЕСЛИ РАЗМЕР ЗАПИСИ КРАТЕН ЧИСЛУ 256
ИЛИ ЯВЛЯЕТСЯ ЕГО ДЕЛИТЕЛЕМ.



     10.11. ОСОБЕННОСТИ   СРАВНЕНИЯ    ПЕРЕМЕННЫХ
            РАЗЛИЧНЫХ ТИПОВ


     ПРИ СРАВНЕНИИ ЧИСЛА ОДИНАРНОЙ ТОЧНОСТИ С ЧИСЛОМ  ДВОЙ-
НОЙ ТОЧНОСТИ ЧИСЛО С ДВОЙНОЙ ТОЧНОСТЬЮ  МОЖЕТ  ПО  ВЕЛИЧИНЕ
ПОКАЗАТЬСЯ БОЛЬШИМ, ЧЕМ ЧИСЛО ОДИНАРНОЙ ТОЧНОСТИ, ДАЖЕ ЕСЛИ
ОНИ ДОЛЖНЫ БЫЛИ БЫ БЫТЬ РАВНЫ. НАПРИМЕР:

      DOUBLE PRECISION D
      A=55.1
      D=55.1D0
      IF(A.LT.D)STOP

     В ПРИМЕРЕ "A" МЕНЬШЕ "D", Т.К. 55.1 ЯВЛЯЕТСЯ  ПЕРИОДИ-
ЧЕСКОЙ ДВОИЧНОЙ ДРОБЬЮ. ПЕРЕД СРАВНЕНИЕМ 24-БИТНАЯ  ДРОБНАЯ
(МАНТИССА) ЧАСТЬ "A" РАСШИРЯЕТСЯ ДО 32 БИТОВ, РАВНЫХ  НУЛЮ.
ЭТИ 32 БИТА  МЛАДШЕГО  ПОРЯДКА  МЕНЬШЕ  32  БИТОВ  МЛАДШЕГО
ПОРЯДКА "D" И ПОЭТОМУ "D" ПРИ СРАВНЕНИИ БОЛЬШЕ "A".

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



                           - 46 -

                     00014 - 01.33.02


            11. ПРЕДСТАВЛЕНИЕ ДАННЫХ В ФОРТРАН-IV




     11.1. ФОРМАТ ЦЕЛЫХ ЧИСЕЛ



         ЗНАК
        :----:--------------------------------------:
        : 0=+:        ДВОИЧНОЕ ЧИСЛО                :
        : 1=-:                                      :
        :----:--------------------------------------:
       15   14                                      0

     ЦЕЛЫЕ ОТРИЦАТЕЛЬНЫЕ ЧИСЛА  ХРАНЯТСЯ  В  ДОПОЛНИТЕЛЬНОМ
КОДЕ. ЕСЛИ ИСПОЛЬЗУЕТСЯ КЛЮЧ КОМПИЛЯТОРА "/I4", ЦЕЛОМУ ЧИС-
ЛУ ОТВОДИТСЯ ДВА СЛОВА, ХОТЯ ТОЛЬКО СЛОВО СТАРШЕГО  ПОРЯДКА
(ИМЕЮЩЕЕ МЕНЬШИЙ АДРЕС), ЯВЛЯЕТСЯ  ЗНАЧАЩИМ.  ПО  УМОЛЧАНИЮ
ЦЕЛЫМ ОТВОДИТСЯ ОДНО СЛОВО. СПЕЦИФИКАЦИИ ЯВНОЙ ДЛИНЫ  ЦЕЛЫХ
(INTEGER*2 И INTEGER*4) ВСЕГДА БУДУТ ИМЕТЬ ПРИОРИТЕТ  ПЕРЕД
КЛЮЧОМ "/I4". ЦЕЛЫЕ КОНСТАНТЫ ДОЛЖНЫ НАХОДИТЬСЯ В  ПРЕДЕЛАХ
ОТ -32767 ДО +32767. НАПРИМЕР:

            +22 = 000026 (ВОСЬМЕРИЧНАЯ)
             -7 = 177771 (ВОСЬМЕРИЧНАЯ)



     11.2. ФОРМАТЫ ЧИСЕЛ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ


     ПОРЯДОК ДЛЯ 2-СЛОВНОГО И 4-СЛОВНОГО ФОРМАТОВ С ПЛАВАЮ-
ЩЕЙ ТОЧКОЙ ХРАНИТСЯ С ИЗБЫТКОМ 128 (200 ВОСЬМЕРИЧНЫХ). Т.Е.
ПОРЯДКИ ОТ -128 ДО +127 ПРЕДСТАВЛЕНЫ ДВОИЧНЫМИ ЭКВИВАЛЕНТА-
МИ ЧИСЕЛ ОТ 0 ДО 255 (ОТ 0 ДО 377 ВОСЬМЕРИЧНЫХ).

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

     ПРИМЕРЫ.

     ЧИСЛО +1.0 ПРЕДСТАВЛЕНО В ДВУХСЛОВНОМ ФОРМАТЕ В ВИДЕ:

 .WORD         40200,0

А В ЧЕТЫРЕХСЛОВНОМ ФОРМАТЕ В ВИДЕ:


                           - 47 -

                     00014 - 01.33.02


 .WORD         40200,0,0,0

     ЧИСЛО -5 В ДВУХСЛОВНОМ ФОРМАТЕ ИМЕЕТ ВИД:

 .WORD         140640,0

В ЧЕТЫРЕХСЛОВНОМ:

 .WORD         140640,0,0,0



     11.2.1. ФОРМАТ ВЕЩЕСТВЕННОГО ЧИСЛА  (ДВУСЛОВНЫЙ
             ФОРМАТ С ПЛАВАЮЩЕЙ ТОЧКОЙ)



        ЗНАК
       :----:---------------:--------------------------:
СЛОВО1 : 0=+:   ДВОИЧНЫЙ    :   СТАРШИЕ РАЗРЯДЫ        :
       : 1=-: ПОРЯДОК + 128 :   МАНТИССЫ               :
       :----:---------------:--------------------------:
      15   14              7 6                         0


       -------------------------------------------------
СЛОВО2 :                                               :
       :   МЛАДШИЕ РАЗРЯДЫ МАНТИССЫ                    :
       -------------------------------------------------
      15                                               0

     ПОСКОЛЬКУ БИТ СТАРШЕГО РАЗРЯДА МАНТИССЫ  ВСЕГДА  РАВЕН
1, ТО ОН ОТБРАСЫВАЕТСЯ, ФАКТИЧЕСКАЯ  ТОЧНОСТЬ  ОПРЕДЕЛЯЕТСЯ
24 ДВОИЧНЫМИ ЦИФРАМИ. ЗНАЧЕНИЕ ВЕЩЕСТВЕННОЙ ВЕЛИЧИНЫ  НАХО-
ДИТСЯ В ПРЕДЕЛАХ ОТ 0.29*10**38 ДО 1.7*10**38.



     11.2.2. ФОРМАТ  ЧИСЛА  С  ДВОЙНОЙ  ТОЧНОСТЬЮ
             (4-СЛОВНЫЙ ФОРМАТ С ПЛАВАЮЩЕЙ ТОЧКОЙ)



        ЗНАК
       :----:---------------:--------------------------:
СЛОВО1 : 0=+:   ДВОИЧНЫЙ    :   СТАРШИЕ РАЗРЯДЫ        :
       : 1=-: ПОРЯДОК + 128 :   МАНТИССЫ               :
       :----:---------------:--------------------------:
      15   14              7 6                         0


       -------------------------------------------------
СЛОВО2 :      ПРОДОЛЖЕНИЕ МАНТИССЫ                     :
       :                                               :
       -------------------------------------------------
      15                                               0




                           - 48 -

                     00014 - 01.33.02



       -------------------------------------------------
СЛОВО3 :                                               :
       :      ПРОДОЛЖЕНИЕ МАНТИССЫ                     :
       -------------------------------------------------
      15                                               0



       -------------------------------------------------
СЛОВО4 :                                               :
       :      МЛАДШИЕ РАЗРЯДЫ МАНТИССЫ                 :
       -------------------------------------------------
      15                                               0

     ФАКТИЧЕСКАЯ ТОЧНОСТЬ - 56 ДВОИЧНЫХ РАЗРЯДОВ ИЛИ  ПРИБ-
ЛИЗИТЕЛЬНО 17 ДЕСЯТИЧНЫХ ЦИФР. ЗНАЧЕНИЕ ВЕЛИЧИНЫ С  ДВОЙНОЙ
ТОЧНОСТЬЮ ЛЕЖИТ В ПРЕДЕЛАХ ОТ 0.29*10**-38 ДО 0.17*10**39.



     11.2.3. ФОРМАТ КОМПЛЕКСНОГО ЧИСЛА



        ЗНАК
       -----------------------------------------
СЛОВО1 : 0=+:   ДВОИЧНЫЙ    :   СТАРШИЕ РАЗРЯДЫ:
       : 1=1: ПОРЯДОК + 128 :   МАНТИССЫ       : ВЕЩЕСТ-
       -----------------------------------------
      15   14              7 6                 0 ВЕННАЯ

       ----------------------------------------- ЧАСТЬ
СЛОВО2 :  МЛАДШИЕ РАЗРЯДЫ МАНТИССЫ             :
       :                                       :
       -----------------------------------------
      15                                       0

       -----------------------------------------
СЛОВО3 : 0=+:   ДВОИЧНЫЙ    :   СТАРШИЕ РАЗРЯДЫ:
       : 1=-: ПОРЯДОК + 128 :   МАНТИССЫ       :
       -----------------------------------------
      15   14              7 6                 0 МНИМАЯ

       ----------------------------------------- ЧАСТЬ
СЛОВО2 :                                       :
       :  МЛАДШИЕ РАЗРЯДЫ МАНТИССЫ             :
       -----------------------------------------
      15                                       0



     11.3. БАЙТОВЫЙ ФОРМАТ (LOGICAL*1)


       ------------------------
       :    ЕДИНИЦА ДАННЫХ    :
       :                      :
       ------------------------
       7                      0



                           - 49 -

                     00014 - 01.33.02


     СЧИТАЕТСЯ, ЧТО ЛЮБОЕ НЕНУЛЕВОЕ ЗНАЧЕНИЕ ИМЕЕТ ЛОГИЧЕС-
КОЕ ЗНАЧЕНИЕ ".TRUE". В БАЙТОВОМ  ФОРМАТЕ  LOGICAL*1  МОГУТ
БЫТЬ ПРЕДСТАВЛЕНЫ ЧИСЛА ОТ +127 ДО -128.  ЭЛЕМЕНТЫ  МАССИВА
БАЙТОВОГО ФОРМАТА РАСПОЛАГАЮТСЯ В СМЕЖНЫХ БАЙТАХ.



     11.4. ТЕКСТОВЫЙ ФОРМАТ



       --------------------------------------------------
СЛОВО1 :       СИМВОЛ2          :       СИМВОЛ1         :
       :                        :                       :
       --------------------------------------------------
      15                       8 7                      0

       --------------------------------------------------
СЛОВО2 :       СИМВОЛ4          :       СИМВОЛ5         :
       :                        :                       :
       --------------------------------------------------
      15                       8 7                      0
                                .
                                .
                                .

       --------------------------------------------------
       :   ПРОБЕЛ = 40 (ВОСЬМЕ- :       СИМВОЛN (N<255) :
       :               РИЧНЫЙ)  :                       :
       --------------------------------------------------
      15                       8 7                      0

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



     11.5. ЛОГИЧЕСКИЙ ФОРМАТ


 ИСТИНА: СЛОВО1 -----------------------------------------
                :                   :                   :
                :   НЕ ОПРЕДЕЛЕНО   :       377         :
                -----------------------------------------
               15                  8 7                  0

         СЛОВО2 -----------------------------------------
                :          НЕ ОПРЕДЕЛЕНО                :
                :                                       :
                -----------------------------------------
               15                  8 7                  0

 ЛОЖЬ:   СЛОВО3 -----------------------------------------
                :                   :                   :
                :   НЕ ОПРЕДЕЛЕНО   :       000         :
                -----------------------------------------
               15                  8 7                  0

                            - 50 -

                      00014 - 01.33.02



         СЛОВО4 -----------------------------------------
                :                                       :
                :          НЕ ОПРЕДЕЛЕНО                :
                -----------------------------------------
              15                                         0

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



     11.6. ФОРМАТ RADIX-50


     В ТАБЛ. 3 СВЕДЕНЫ КОДЫ СИМВОЛОВ RADIX-50.

                                          ТАБЛИЦА 3
         НАБОР СИМВОЛОВ RADIX-50
  ----------------------------------------------------
     СИМВОЛ   !  ВОСЬМЕРИЧНЫЙ КОД   !   КОД RADIX-50
  ------------!---------------------!-----------------
   ПРОБЕЛ     !          40         !          0
   A - Z      !      101 - 132      !        1 - 32
     ¤        !          44         !          33
     .        !          56         !          34
   НЕ ИСПОЛЬЗУЕТСЯ                  !          35
   0 - 9      !       60 - 71       !       36 - 47

     ТАБЛ. 4 ПОЗВОЛЯЕТ ПРЕДСТАВИТЬ В КОДЕ  RADIX-50  НАБОРЫ
СИМВОЛОВ КОИ-7. НАПРИМЕР, ДЛЯ НАБОРА СИМВОЛОВ  КОИ-7  "X28"
КОД RADIX-50 ПОЛУЧАЕТСЯ  СЛОЖЕНИЕМ  СЛЕДУЮЩИХ  ВОСЬМЕРИЧНЫХ
ЧИСЕЛ (ВЫЧИСЛЕНИЯ ВЫПОЛНЯЮТСЯ В ВОСЬМЕРИЧНОЙ СИСТЕМЕ):

              X = 113000
              2 = 002400
              B = 000002
              ----------
            X2B = 115402




                            - 51 -

                      00014 - 01.33.02


                                            ТАБЛИЦА 4
                      КОДЫ RADIX-50
     ------------------------------------------------------
      ПЕРВЫЙ СИМВОЛ      ВТОРОЙ СИМВОЛ       ТРЕТИЙ СИМВОЛ
     ------------------------------------------------------
      ПРОБЕЛ  000000   ПРОБЕЛ  000000      ПРОБЕЛ  000000
           A  003100        A  000050           A  000001
           B  006200        B  000120           B  000002
           C  011300        C  000170           C  000003
           D  014400        D  000240           D  000004
           E  017500        E  000310           E  000005
           F  022600        F  000360           F  000006
           G  025700        G  000430           G  000007
           H  031000        H  000500           H  000010
           I  034100        I  000550           I  000011
           J  037200        J  000620           J  000012
           K  042300        K  000670           K  000013
           L  045400        L  000740           L  000014
           M  050500        M  001010           M  000015
           N  053600        N  001060           N  000016
           O  056700        O  001130           O  000017
           P  062000        P  001200           P  000020
           Q  065100        Q  001250           Q  000021
           R  070200        R  001320           R  000022
           S  073300        S  001370           S  000023
           T  076400        T  001440           T  000024
           U  101500        U  001510           U  000025
           V  104600        V  001560           V  000026
           W  107700        W  001630           W  000027
           X  113000        X  001700           X  000030
           Y  116100        Y  001750           Y  000031
           Z  121200        Z  002020           Z  000032
           ¤  124300        ¤  002070           ¤  000033
           .  127400        .  002140           .  000034
     НЕ ИСП.  132500  НЕ ИСП.  002210     НЕ ИСП.  000035
           0  135600        0  002260           0  000036
           1  140700        1  002330           1  000037
           2  144000        2  002400           2  000040
           3  147100        3  002450           3  000041
           4  152200        4  002520           4  000042
           5  155300        5  002570           5  000043
           6  160400        6  002640           6  000044
           7  163500        7  002710           7  000045
           8  166600        8  002760           8  000046
           9  171700        9  003030           9  000047



                            - 52 -

                      00014 - 01.33.02


                                            ПРИЛОЖЕНИЕ 1



                  БИБЛИОТЕЧНЫЕ ПОДПРОГРАММЫ





             1. СПИСОК БИБЛИОТЕЧНЫХ ПОДПРОГРАММ



     В ДОПОЛНЕНИЕ К ВНУТРЕННИМ И СТАНДАРТНЫМ ФУНКЦИЯМ ФОРТ-
РАНА В БИБЛИОТЕКЕ ФОРТРАН-IV ИМЕЮТСЯ  ПОДПРОГРАММЫ,  РАСШИ-
РЯЮЩИЕ СТАНДАРТНЫЕ СРЕДСТВА ЯЗЫКА. ЭТИ ПОДПРОГРАММЫ СЛЕДУЮ-
ЩИЕ:

 ASSIGN
       - ПОЗВОЛЯЕТ УСТАНОВИТЬ СООТВЕТСТВИЕ ВО ВРЕМЯ  ВЫПОЛ-
         НЕНИЯ ПРОГРАММЫ МЕЖДУ СПЕЦИФИКАЦИЕЙ  УСТРОЙСТВА  И
         ИМЕНЕМ  ФАЙЛА  С  ЛОГИЧЕСКИМ  НОМЕРОМ   УСТРОЙСТВА
         ФОРТРАН-IV;

 CLOSE
       - ЗАКРЫВАЕТ ФАЙЛ НА УКАЗАННОМ ЛОГИЧЕСКОМ УСТРОЙСТВЕ;

 DATE
       - ВОЗВРАЩАЕТ 9-БАЙТОВУЮ СТРОКУ, СОДЕРЖАЩУЮ  СИМВОЛЬ-
         НОЕ ПРЕДСТАВЛЕНИЕ ТЕКУЩЕЙ ДАТЫ;

 IDATE
       - ВОЗВРАЩАЕТ  ТРИ  ЦЕЛЫХ  ЗНАЧЕНИЯ,   ПРЕДСТАВЛЯЮЩИЕ
         ТЕКУЩУЮ ДАТУ: НОМЕР МЕСЯЦА, ЧИСЛО, ГОД;

 EXIT
       - ЗАКАНЧИВАЕТ ВЫПОЛНЕНИЕ ПРОГРАММЫ И ПЕРЕДАЕТ УПРАВ-
         ЛЕНИЕ УПРАВЛЯЮЩЕЙ ПРОГРАММЕ;

 USEREX
       - ПОЗВОЛЯЕТ УКАЗАТЬ ПРОГРАММУ, КОТОРАЯ ДОЛЖНА ВЫПОЛ-
         НЯТЬСЯ КАК ЗАВЕРШАЮЩАЯ ЧАСТЬ ПРОГРАММЫ ПОЛЬЗОВАТЕ-
         ЛЯ;

 RANDU
 RAN
       - ВОЗВРАЩАЕТ  ПСЕВДОСЛУЧАЙНЫЕ  ЧИСЛА  С   НОРМАЛЬНЫМ
         РАСПРЕДЕЛЕНИЕМ МЕЖДУ 0 И 1;

 SETERR
       - ПОЗВОЛЯЕТ ПОЛЬЗОВАТЕЛЮ МЕНЯТЬ РЕАКЦИЮ  ИСПОЛНЯЮЩЕЙ
         СИСТЕМЫ НА ОПРЕДЕЛЕННЫЕ  ОШИБКИ,  ОБНАРУЖЕННЫЕ  ВО
         ВРЕМЯ ВЫПОЛНЕНИЯ;



                            - 53 -

                      00014 - 01.33.02


 ERRTST
       - ПОЗВОЛЯЕТ В ХОДЕ ВЫПОЛНЕНИЯ ПРОГРАММЫ  КОНТРОЛИРО-
         ВАТЬ ОШИБКИ ОПРЕДЕЛЕННОГО ТИПА;

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



     1.1. ASSIGN



     ПОДПРОГРАММА "ASSIGN" СТАВИТ В СООТВЕТСТВИЕ СПЕЦИФИКА-
ЦИЮ  ФАЙЛА  НОМЕРУ  ЛОГИЧЕСКОГО  УСТРОЙСТВА.   ПОДПРОГРАММА
"ASSIGN" ДОЛЖНА БЫТЬ ВЫПОЛНЕНА ДО ИСПОЛЬЗОВАНИЯ ЭТОГО ЛОГИ-
ЧЕСКОГО УСТРОЙСТВА ДЛЯ ОПЕРАЦИЙ  ВВОДА/ВЫВОДА  (ОПЕРАТОРАМИ
READ ИЛИ WRITE) ДЛЯ ФАЙЛОВ С ПОСЛЕДОВАТЕЛЬНЫМ  ДОСТУПОМ,  А
ДЛЯ ФАЙЛОВ С ПРЯМЫМ ДОСТУПОМ - ДО СООТВЕТСТВУЮЩЕГО ОПЕРАТО-
РА "DEFINE FILE". НАЗНАЧЕНИЕ УСТРОЙСТВА ОСТАЕТСЯ В СИЛЕ  ДО
ОКОНЧАНИЯ ПРОГРАММЫ ИЛИ ДО ТЕХ ПОР, ПОКА ФАЙЛ НЕ БУДЕТ ЗАК-
РЫТ ПО ОБРАЩЕНИЮ "CALL CLOSE" ИЛИ ОПЕРАТОРОМ "CLOSE", И  НЕ
ВЫПОЛНИТСЯ НОВЫЙ ВЫЗОВ "ASSIGN". ВЫЗОВ "ASSIGN" ИМЕЕТ  СЛЕ-
ДУЮЩУЮ ФОРМУ:

       CALL ASSIGN(N, NAME, I, MODE, CONROL, NUMBUF)

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

 N
       - НОМЕР ЛОГИЧЕСКОГО УСТРОЙСТВА В ВИДЕ ЦЕЛОЙ КОНСТАН-
         ТЫ, ПЕРЕМЕННОЙ ИЛИ ВЫРАЖЕНИЯ;

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

          /N   - ОПРЕДЕЛЯЕТ ОТСУТСТВИЕ УПРАВЛЕНИЯ ПЕ-
                 РЕВОДОМ КАРЕТКИ; ЭТОТ КЛЮЧ НЕ ОТМЕНЯЕТ
                 ДЕЙСТВИЕ АРГУМЕНТА "CONTROL";
          /C   - ОПРЕДЕЛЯЕТ УПРАВЛЕНИЕ ПЕРЕВОДОМ КА-
                 РЕТКИ; ЭТОТ КЛЮЧ НЕ ОТМЕНЯЕТ ДЕЙСТВИЕ
                 АРГУМЕНТА "CONTROL";
          /B:N - УКАЗЫВАЕТ ЧИСЛО БУФЕРОВ "N" ДЛЯ ОПЕРА-
                 ЦИЙ ВВОДА/ВЫВОДА; АРГУМЕНТ "N" ДОЛЖЕН
                 ИМЕТЬ ЗНАЧЕНИЕ 1 ИЛИ 2; ЭТОТ КЛЮЧ НЕ
                 ОТМЕНЯЕТ ДЕЙСТВИЕ АРГУМЕНТА "NUMBUF";

          ЕСЛИ ИМЯ ЯВЛЯЕТСЯ СПЕЦИФИКАЦИЕЙ УСТРОЙСТВА,
          ТО УСТРОЙСТВО РАССМАТРИВАЕТСЯ КАК УСТРОЙСТВО



                            - 54 -

                      00014 - 01.33.02


          НЕФАЙЛОВОЙ СТРУКТУРЫ;

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

 MODE
        - ОПРЕДЕЛЯЕТ РЕЖИМ  ОТКРЫТИЯ  ФАЙЛА  НА  УСТРОЙСТВЕ;
          ЭТОТ АРГУМЕНТ МОЖЕТ БЫТЬ ОДНИМ ИЗ СЛЕДУЮЩИХ:

           'RDO' - ФАЙЛ ТОЛЬКО ЧИТАЕТСЯ; ПОЯВЛЯЕТСЯ НЕ-
                   УСТРАНИМАЯ ОШИБКА, ЕСЛИ ПРОИЗВОДИТСЯ
                   ПОПЫТКА ЗАПИСИ В ЭТОТ ФАЙЛ; ЕСЛИ
                   УКАЗАННЫЙ ФАЙЛ НЕ СУЩЕСТВУЕТ, ТО ВО ВРЕ-
                   МЯ ВЫПОЛНЕНИЯ ВЫДАЕТСЯ СООБЩЕНИЕ ОБ
                   ОШИБКЕ 28 (OPEN FALLED FOR FILE);
           'NEW' - СОЗДАЕТСЯ НОВЫЙ ФАЙЛ УКАЗАННОГО ИМЕНИ;
                   ЭТОТ ФАЙЛ НЕ СТАНОВИТСЯ ПОСТОЯННЫМ,
                   ПОКА ОН НЕ БУДЕТ ЗАКРЫТ С ПОМОЩЬЮ ПОД-
                   ПРОГРАММЫ "CLOSE" ИЛИ ПО ОКОНЧАНИИ
                   ПРОГРАММЫ; ЕСЛИ ВЫПОЛНЕНИЕ ПРЕРЫВАЕТСЯ
                   КОМАНДОЙ "CTRL C", ФАЙЛ НЕ СОХРАНЯЕТСЯ;
           'OLD' - ФАЙЛ УЖЕ СУЩЕСТВУЕТ; ЕСЛИ УКАЗАННЫЙ
                   ФАЙЛ НЕ СУЩЕСТВУЕТ, ВО ВРЕМЯ ВЫПОЛ-
                   НЕНИЯ ВЫДАЕТСЯ СООБЩЕНИЕ ОБ ОШИБКЕ 28
                   (OPEN FALLED FOR FILE); ОПЕРАЦИЯ
                   ЗАПИСИ В ЭТОТ ФАЙЛ РАЗРЕШЕНА;
           'SCR' - ФАЙЛ ИСПОЛЬЗУЕТСЯ ТОЛЬКО ВРЕМЕННО И
                   АВТОМАТИЧЕСКИ СТИРАЕТСЯ ПОСЛЕ ЗАКРЫТИЯ;
           ЕСЛИ ЭТОТ АРГУМЕНТ ОПУЩЕН, ТО ПО УМОЛЧАНИЮ
           РЕЖИМ ОТКРЫТИЯ ФАЙЛА ОПРЕДЕЛЯЕТСЯ ПО ТИПУ
           ПЕРВОЙ ОПЕРАЦИИ ВВОДА/ВЫВОДА; ЕСЛИ ПЕРВОЙ
           ОПЕРАЦИЕЙ, ВЫПОЛНЯЕМОЙ НА ЭТОМ УСТРОЙСТВЕ,
           ЯВЛЯЕТСЯ "WRITE", ТО ПРИНИМАЕТСЯ 'NEW';
           ЕСЛИ ПЕРВОЙ ОПЕРАЦИЕЙ ЯВЛЯЕТСЯ 'READ', ТО
           ПРИНИМАЕТСЯ 'OLD';

 CONTROL
       - УКАЗЫВАЕТ РЕЖИМ УПРАВЛЕНИЯ ПЕРЕВОДОМ КАРЕТКИ; ЭТОТ
         АРГУМЕНТ МОЖЕТ БЫТЬ ОДНИМ ИЗ СЛЕДУЮЩИХ:

          'NC' - ВСЕ ЗНАКИ ВВОДЯТСЯ ТАКИМ КАК УКАЗЫВА-
                 ЮТСЯ; ЗАПИСИ ПРЕДШЕСТВУЕТ ЗНАК ПЕРЕВОДА
                 СТРОКИ, А ЗА НЕЙ СЛЕДУЕТ ЗНАК ВОЗВРАТА
                 КАРЕТКИ;
          'CC' - ЗНАК В ПЕРВОЙ КОЛОНКЕ ВСЕХ ВХОДНЫХ ЗАПИ-
                 СЕЙ РАССМАТРИВАЕТСЯ КАК ЗНАК УПРАВЛЕНИЯ
                 КАРЕТКОЙ;

         ЕСЛИ НЕТ СПЕЦИАЛЬНЫХ ИЗМЕНЕНИЙ, ВНЕСЕННЫХ ПОД-
         ПРОГРАММОЙ "ASSIGN", ТО ТЕРМИНАЛ И УСТРОЙСТВО

                            - 55 -

                      00014 - 01.33.02


         ПЕЧАТИ ПРИНИМАЮТ ПО УМОЛЧАНИЮ РЕЖИМ 'CC',
         А ДРУГИЕ УСТРОЙСТВА - РЕЖИМ 'NC';

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



     1.2. CLOSE


     ПОДПРОГРАММА "CLOSE" ЗАКРЫВАЕТ ФАЙЛ, ОТКРЫТЫЙ НА  УКА-
ЗАННОМ ЛОГИЧЕСКОМ УСТРОЙСТВЕ.  ЕСЛИ  ФАЙЛ  БЫЛ  ОТКРЫТ  ДЛЯ
ВЫВОДА, ТО ПЕРЕД ЕГО ЗАКРЫТИЕМ  ЗАПИСЫВАЮТСЯ  ВСЕ  ЧАСТИЧНО
ЗАПОЛНЕННЫЕ БУФЕРА ВЫВОДА В  ЭТОТ  ФАЙЛ.  ПОСЛЕ  ВЫПОЛНЕНИЯ
"CALL CLOSE" ВСЕ БУФЕРА, СВЯЗАННЫЕ С  ЛОГИЧЕСКИМ  УСТРОЙСТ-
ВОМ, ОСВОБОЖДАЮТСЯ ДЛЯ ПОСЛЕДУЮЩЕГО  ИСПОЛЬЗОВАНИЯ,  А  ВСЯ
ИНФОРМАЦИЯ, ПОЛУЧЕННАЯ ПРИ  ПРЕДЫДУЩЕМ  "CALL  ASSIGN"  ДЛЯ
ЛОГИЧЕСКОГО УСТРОЙСТВА СТИРАЕТСЯ ИЗ ТАБЛИЦ ИСПОЛНЯЮЩЕЙ СИС-
ТЕМЫ. ЛОГИЧЕСКОЕ УСТРОЙСТВО ТАКИМ ОБРАЗОМ ОСВОБОЖДАЕТСЯ ДЛЯ
ДРУГОГО ФАЙЛА.

     НЕЯВНАЯ ОПЕРАЦИЯ "CLOSE" ВЫПОЛНЯЕТСЯ НА ВСЕХ  ОТКРЫТЫХ
ЛОГИЧЕСКИХ УСТРОЙСТВАХ ПРИ ЗАВЕРШЕНИИ ПРОГРАММЫ (ПРИ  ПОЯВ-
ЛЕНИИ НЕУСТРАНИМОЙ  ОШИБКИ,  ВЫПОЛНЕНИИ  "STOP"  ИЛИ  "CALL
EXIT").

     ФОРМАТ ВЫЗОВА СЛЕДУЮЩИЙ:

          CALL CLOSE (ILUN)

ГДЕ

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



     1.3. DATE


     ПОДПРОГРАММА "DATE" МОЖЕТ ИСПОЛЬЗОВАТЬСЯ  В  ПРОГРАММЕ
ФОРТРАН-IV ДЛЯ ПОЛУЧЕНИЯ ТЕКУЩЕЙ ДАТЫ, УСТАНОВЛЕННОЙ В СИС-
ТЕМЕ. ПОДПРОГРАММА "DATE" ВЫЗЫВАЕТСЯ СЛЕДУЮЩИМ ОБРАЗОМ:

          CALL DATE(MASS)

ГДЕ

MASS
       - ПРЕДВАРИТЕЛЬНО  ОПРЕДЕЛЕННЫЙ  МАССИВ,  СОДЕРЖАЩИЙ
         9-БАЙТОВУЮ СТРОКУ.



                            - 56 -

                      00014 - 01.33.02


     СПЕЦИФИКАЦИЯ МАССИВА  В  ВЫЗОВЕ  МОЖЕТ  БЫТЬ  ВЫРАЖЕНА
ТОЛЬКО КАК:

1) ИМЯ МАССИВА:

          CALL DATE(A)

В КОТОРОМ ПЕРВЫЕ ТРИ  ЭЛЕМЕНТА  ВЕЩЕСТВЕННОГО  МАССИВА  "A"
ИСПОЛЬЗУЮТСЯ ДЛЯ ХРАНЕНИЯ СТРОКИ ДАТЫ;

2) ЭЛЕМЕНТ МАССИВА:

          CALL DATE(A(I))

ГДЕ

A(I)
       - 9-БАЙТОВАЯ СТРОКА  НАЧИНАЕТСЯ  С  I-ТОГО  ЭЛЕМЕНТА
         МАССИВА "A".

     ДАТА ПЕРЕДАЕТСЯ КАК 9-БАЙТОВАЯ (9-СИМВОЛЬНАЯ) СТРОКА В
ФОРМЕ:

          DD-MMM-YY

ГДЕ

DD
        - ДВЕ ЦИФРЫ ЧИСЛА;

MMM
        - СПЕЦИФИКАЦИЯ МЕСЯЦА ИЗ ТРЕХ БУКВ;

YY
        - ПОСЛЕДНИЕ ДВЕ ЦИФРЫ ГОДА.

НАПРИМЕР:

           10-JAN-80



     1.4. IDATE


     ПОДПРОГРАММА "IDATE" ВОЗВРАЩАЕТ  ТРИ  ЦЕЛЫХ  ЗНАЧЕНИЯ,
СООТВЕТСТВУЮЩИЕ ТЕКУЩЕМУ МЕСЯЦУ,  ДНЮ,  ГОДУ.  ВЫЗОВ  ИМЕЕТ
ФОРМУ:

          CALL IDATE(I,J,K)

     ЕСЛИ ТЕКУЩАЯ ДАТА БЫЛА 10 ЯНВАРЯ 1980 ГОДА, ТО  ЗНАЧЕ-
НИЯ ЦЕЛЫХ ПЕРЕМЕННЫХ БУДУТ

          I = 01
          J = 10
          K = 80



                            - 57 -

                      00014 - 01.33.02


     1.5. EXIT


     ВЫЗОВ ПОДПРОГРАММЫ "EXIT" ИМЕЕТ СЛЕДУЮЩУЮ ФОРМУ:

          CALL EXIT

ЭТО ЭКВИВАЛЕНТНО ОПЕРАТОРУ "STOP", НО НА ТЕРМИНАЛЕ НЕ ПОЯВ-
ЛЯЕТСЯ СООБЩЕНИЕ О ЗАВЕРШЕНИИ ПРОГРАММЫ.  ПРОГРАММА  ЗАВЕР-
ШАЕТСЯ. ВСЕ ФАЙЛЫ ЗАКРЫВАЮТСЯ И УПРАВЛЕНИЕ ПЕРЕДАЕТСЯ МОНИ-
ТОРУ.



     1.6. USEREX


     ПОДПРОГРАММА "USEREX" ПОЗВОЛЯЕТ  ЗАДАТЬ  ПОДПРОГРАММУ,
ЗАВЕРШАЮЩУЮ РАБОТУ  ПРОГРАММЫ.  ЭТО  ПОЗВОЛЯЕТ  БЛОКИРОВАТЬ
ПРЕРЫВАНИЯ, ДОПУСТИМЫЕ В НЕФОРТРАНОВСКИХ ПРОГРАММАХ.  ФОРМА
ВЫЗОВА ПОДПРОГРАММЫ СЛЕДУЮЩАЯ:

          CALL USEREX(NAME)

ГДЕ

NAME
       - ИМЯ ПОДПРОГРАММЫ, КОТОРОЙ ПЕРЕДАЕТСЯ УПРАВЛЕНИЕ  В
         КОНЦЕ РАБОТЫ ПРОГРАММИСТА И  КОТОРАЯ  ДОЛЖНА  БЫТЬ
         ОПИСАНА В ОПЕРАТОРЕ "EXTERNAL" В  МОДУЛЕ,  КОТОРЫЙ
         ПЕРЕДАЕТ ЕЕ ИМЯ В USEREX.

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



     1.7. RANDU, RAN


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

          CALL RANDU (I(1), I(2), X)

ГДЕ

I(1) И I(2)
       - ПРЕДВАРИТЕЛЬНО ОПРЕДЕЛЕННЫЕ ЦЕЛЫЕ ПЕРЕМЕННЫЕ;



                            - 58 -

                      00014 - 01.33.02


X
       - ИМЯ ВЕЩЕСТВЕННОЙ ПЕРЕМЕННОЙ, В КОТОРУЮ  ПЕРЕДАЕТСЯ
         СЛУЧАЙНОЕ ЧИСЛО МЕЖДУ 0 И 1.

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

     ИСПОЛЬЗОВАНИЕ  ПОДПРОГРАММ  СЛУЧАЙНЫХ  ЧИСЕЛ  ПОДОБНО
ИСПОЛЬЗОВАНИЮ ФУНКЦИИ RAN, ГДЕ

          X = RAN (I(1), I(2))

ЯВЛЯЕТСЯ ФУНКЦИОНАЛЬНОЙ ФОРМОЙ ГЕНЕРАТОРА СЛУЧАЙНЫХ ЧИСЕЛ.



     1.8. SETERR


     ПОДПРОГРАММА "SETERR" ПОЗВОЛЯЕТ  ПОЛЬЗОВАТЕЛЮ  ОПРЕДЕ-
ЛЯТЬ  РЕАКЦИЮ ИСПОЛНЯЮЩЕЙ СИСТЕМЫ  НА  ОШИБОЧНЫЕ  СИТУАЦИИ,
ОБНАРУЖЕННЫЕ ВО ВРЕМЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ. ТОЛЬКО ДИАГНОС-
ТИКА ОШИБОК 1 - 16 МОЖЕТ БЫТЬ ИЗМЕНЕНА ПО  ОТНОШЕНИЮ  К  ИХ
КЛАССИФИКАЦИИ. ЕСЛИ ПОПЫТАТЬСЯ УПРАВЛЯТЬ  РЕАКЦИЕЙ  СИСТЕМЫ
НА ОШИБКИ ТИПА 0 И 20 - 63, ТО ВЫПОЛНЕНИЕ ПРОГРАММЫ ПРОДОЛ-
ЖАЕТСЯ, НО В ЭТОМ СЛУЧАЕ НЕТ ГАРАНТИИ В УСПЕШНОМ ЗАВЕРШЕНИИ
ПРОГРАММЫ. ФОРМА ВЫЗОВА:

          CALL SETERR (NUMBER,NCOUNT)

ГДЕ

NUMBER
       - ЦЕЛАЯ ПЕРЕМЕННАЯ ИЛИ ВЫРАЖЕНИЕ, ОПРЕДЕЛЯЮЩЕЕ НОМЕР
         ОШИБКИ OTS;

NCOUNT
       - ЦЕЛАЯ ПЕРЕМЕННАЯ ИЛИ ВЫРАЖЕНИЕ С ОДНИМ ИЗ  СЛЕДУЮ-
         ЩИХ ЗНАЧЕНИЙ;

0
       - ИГНОРИРУЮТСЯ ВСЕ ПОЯВЛЕНИЯ ДАННОЙ ОШИБКИ  В  ПРОГ-
         РАММЕ, НО СООБЩЕНИЕ О ЕЕ  ПОЯВЛЕНИИ  ВЫВОДИТСЯ  НА
         ТЕРМИНАЛ ОПЕРАТОРА;

1
       - ПЕРВОЕ ЖЕ ПОЯВЛЕНИЕ ДАННОЙ ОШИБКИ БУДЕТ  ФАТАЛЬНЫМ
         И ВЫПОЛНЕНИЕ ПРОГРАММЫ ПРЕКРАТИТСЯ;

2 - 127
       - N-ОЕ ПОЯВЛЕНИЕ ОШИБКИ БУДЕТ  ФАТАЛЬНЫМ;  О  ПЕРВЫХ
         "N-1" ПОЯВЛЕНИЯХ БУДУТ  РАСПЕЧАТАНЫ  СООБЩЕНИЯ  НА
         ТЕРМИНАЛЕ;



                            - 59 -

                      00014 - 01.33.02


128 - 255
       - ИГНОРИРУЮТСЯ ВСЕ ПОЯВЛЕНИЯ ОШИБКИ.



     1.9. ERRTST


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

          CALL ERRTST (I,J)

ГДЕ

I
       - НОМЕР ОШИБКИ, ДЛЯ КОТОРОЙ  ДОЛЖНА  БЫТЬ  ВЫПОЛНЕНА
         ПРОВЕРКА;

J
       - ПЕРЕМЕННАЯ ТИПА "INTEGER*2"  ИЛИ  ЭЛЕМЕНТ  МАССИВА
         ДЛЯ ПОЛУЧЕНИЯ СОСТОЯНИЯ ОШИБКИ: J=1,  ЕСЛИ  ОШИБКА
         ПОЯВИЛАСЬ; J=2, ЕСЛИ НЕТ ОШИБКИ.

     ВЫЗОВ "ERRTST" ОБНУЛЯЕТ ФЛАГ-СЧЕТЧИК ОШИБКИ ДЛЯ  ЭТОГО
КЛАССА ОШИБОК.



     1.10. ERRSNS


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

         CALL ERRSNS (A,B)

ГДЕ

A
      - ПЕРЕМЕННАЯ ТИПА "INTEGER*2" (ИЛИ ЭЛЕМЕНТ МАССИВА),
        В КОТОРУЮ ПОМЕЩАЕТСЯ ЧИСЛОВОЙ КОД ПОСЛЕДНЕЙ  ОШИБ-
        КИ; ЕСЛИ ОШИБОК НЕТ, ПОМЕЩАЕТСЯ НУЛЬ;

B
      - ПЕРЕМЕННАЯ ТИПА "INTEGER*2" (ИЛИ ЭЛЕМЕНТ МАССИВА),
        В КОТОРУЮ ПОМЕЩАЕТСЯ НОМЕР ЛОГИЧЕСКОГО  УСТРОЙСТВА
        ВВОДА/ВЫВОДА, С КОТОРЫМ СВЯЗАНА ОШИБКА, ЕСЛИ САМАЯ
        ПОСЛЕДНЯЯ ОШИБКА БЫЛА СВЯЗАНА С ВВОДОМ/ВЫВОДОМ.

                             - 60 -

                       00014 - 01.33.02



                                         ПРИЛОЖЕНИЕ 2



             КОНТРОЛЬНО-ДЕМОНСТРАЦИОННАЯ ЗАДАЧА.


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

             FUNCTION  SUM(A,M,N)
             DIMENSION  A(M,N)
             SUM=0.0
             DO 10, I=1,M
             DO 10, J=1,N
     10      SUM=SUM+A(I,J)
             RETURN
             END


----------------------------------------------------------
        ДЕЙСТВИЯ ОПЕРАТОРА     !       ОТОБРАЖЕНИЕ
                               !    НА ЭКРАНЕ ДИСПЛЕЯ
----------------------------------------------------------
  ВКЛЮЧИТЕ ДИСПЛЕЙ, БЛОК ПИТА- !
  НИЯ, НГМД, ВСТАВЬТЕ В ВЕРХНЕЕ!   ЗАГРУЖАЕТСЯ ОС БК-11
  ОКНО НГМД СИСТЕМНУЮ ДИСКЕТУ. !   .
                               !
  СГЕНЕРИРУЙТЕ СИСТЕМНУЮ ДИСКЕ-!
  ТУ В СООТВЕТСТВИИ С ПРИМЕЧА- !
  НИЕМ АННОТАЦИИ: ЕСЛИ У ВАС   !
  НА СИСТЕМНОЙ ДИСКЕТЕ НЕТ ФАЙ-!
  ЛА SYSLIB.OBJ И НЕТ СВОБОДНОЙ!
  ОБЛАСТИ В 51 БЛОК, СОХРАНИТЕ !
  НА РАБОЧЕЙ ДИСКЕТЕ НЕНУЖНЫЕ В!
  ДАННЫЙ МОМЕНТ ФАЙЛЫ И УДАЛИТЕ!
  ИХ С СИСТЕМЫ. ТАКИМ ОБРАЗОМ  !
  НУЖНО ОСВОБОДИТЬ НЕПРЕРЫВНУЮ !
  ОБЛАСТЬ В 51 БЛОК.           !
                               !
  ВСТАВЬТЕ В НИЖНЕЕ ОКНО НГМД  !
  ДИСКЕТУ, ХРАНЯЩУЮ ФОРТРАН.   !
  СКОПИРУЙТЕ SYSLIB.OBJ НА СИС-!
  ТЕМНУЮ ДИСКЕТУ:              !
                               !
    .COP BY1:SYSLIB  BY0:  <ВК>!   COP  BY1:SYSLIB  BY0:
                               !   .
----------------------------------------------------------
  ВЫЗОВИТЕ РЕДАКТОР START      !  СТАРТ  V НОМ. ВЕРСИИ
                               !  СИМВОЛОВ В СТРОКЕ ЭКРАНА
  .R START                     !  0-32/1-64/-2-80:
----------------------------------------------------------
  2  <ВК>                      !  ИМЯ ФАЙЛА?
  PRIM.FOR  <ВК>               !
----------------------------------------------------------
                               !  СОЗДАТЬ? (д/н)
  D   <ВК>                     !
----------------------------------------------------------


                             - 61 -

                       00014 - 01.33.02



----------------------------------------------------------
        Действия оператора     !       отображение
                               !    на экране дисплея
----------------------------------------------------------
                               !
         FUNCTION  SUM(A,M,N)  !      FUNCTION  SUM(A,M,N)
         DIMENSION A(M,N)      !      DIMENSION A(M,N)
         SUM=0.0               !      SUM=0.0
         DO 10, I=1,M          !      DO 10, I=1,M
         DO 10, J=1,N          !      DO 10, J=1,N
  10     SUM=SUM+A(I,J)        !10    SUM=SUM+A(I,J)
         RETURN                !      RETURN
         END                   !      END
                               !
 =!=>  E                       !  ??? ЗАВЕРШИТЬ?(Д/Н)
  D  <ВК>                      !
----------------------------------------------------------
                               !  ИМЯ ФАЙЛА?
  СУ/С                         !  .
----------------------------------------------------------
  ВЫЗОВИТЕ КОМПИЛЯТОР          !
  .RU FORTRAN  <ВК>            !  RU FORTRAN
                               !  *
                               !
  *PRIM=PRIM  <ВК>             !  PRIM=PRIM
                               !  SUM
                               !  *
  *СУ/С                        !    С
                               !  .
  .DIR                         !  НА РАБОЧЕЙ ДИСКЕТЕ -
                               !  ФАЙЛ  PRIM.OBJ
                               !  .
  ВЫЗОВИТЕ КОМПОНОВЩИК         !
                               !
  .R LINK                      !  R LINK
                               !  *
  *PRIM=PRIM, FORLIB           !  PRIM=PRIM, FORLIB
                               !  *
                               !
  *СУ/С                        !    С
                               !  .
                               !
  .DIR                         !  НА РАБОЧЕЙ ДИСКЕТЕ -
                               !  ЗАГРУЗОЧНЫЙ ФАЙЛ
                               !  PRIM.SAV, ГОТОВЫЙ К
                               !  ИСПОЛНЕНИЮ
----------------------------------------------------------

       <ВК> - ТОЛСТАЯ СТРЕЛКА   <===//
