














         С И С Т Е М А   П Р О Г Р А М М И Р О В А Н И Я


      000     000                                 00000000
      0000   0000                                000    000
      00000 00000 000 000 000  0000000 000       000
      000 000 000 000 000 000    000   000       000
      000  0  000 000 000 000    000   000       000
      000     000 000 000 000    000   000       000    000
      000     000  00000  000000 000   000        00000000


                     В Е Р С И Я   1 0 . 8 9




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








                                    Авторы: А.А.Орехов
                                            С.С.Охапкин




















                           Москва 1989


                         СИСТЕМА ПРОГРАММИРОВАНИЯ MULTI C V10.89



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

     Система программирования `Multi C' предназначена для разра-
ботки программного  обеспечения  на  языке  Си.  Стандарт  языка
соответствует версии 7 ОС UNIX.
     Система  работает  в  ОС  RT-11  (РАФОС, ФОДОС) на микро- и
миниЭВМ, обеспечивающих выполнение команд расширенной арифметики
(EIS) и плавающей запятой (FIS или FPU) (допускается программная
эмуляция).  Требования  к  объему  дисковой  памяти  минимальны:
система занимает менее 250 блоков.
     Библиотека  системы содержит более 100 стандартных функций,
обеспечивающих форматный и  неформатный  ввод-вывод,  работу  со
строками,   управление   динамической   памятью,  математические
расчеты  и  пр.  Дополнительно  может  быть  поставлена   мощная
библиотека  графических  функций  `MultiGraph' для работы с кон-
троллером КГД ДВК.
     Система   программирования  удобна  в  работе  и  позволяет
получать компактные и эффективные  программы,  в  т.ч.  не  нуж-
дающиеся  в  поддержке  ОС  и  пригодные к зашивке в ПЗУ (в этом
случае  программная  поддержка   ввода/вывода   низкого   уровня
обеспечивается пользователем).


                        2. КОМПЛЕКТ ПОСТАВКИ

     Система программирования Multi C поставляется в виде набора
файлов на машинном носителе:

     CC.SAV - Си-компилятор;

     CLIB.OBJ - Си-библиотека;

     STDIO.H - стандартный хедер ввода-вывода;
     CTYPE.H - хедер функций обработки символов;
     MATH.H - хедер математической библиотеки;
     INITIA.H - хедер функций инициализации и завершения;

     MULTIC.ODD - нечетные страницы документации;
     MULTIC.EVN - четные страницы документации.













     -------------
     Copyright (C) 1989 А.А.Орехов, С.С.Охапкин.
     Авторские  права на систему программирования Multi C v10.89
принадлежат А.А.Орехову и С.С.Охапкину. Распространение  системы
программирования  или  отдельных ее компонентов без официального
разрешения авторов является нарушением авторских прав.
     UNIX - торговая марка фирмы American Telephone & Telegraph.
     RT-11 - торговая марка фирмы Digital Equipment Corporation.

                                                           - 3 -
                         СИСТЕМА ПРОГРАММИРОВАНИЯ MULTI C V10.89
                                                   СИ-КОМПИЛЯТОР


         образуются посредством конкатенации NAME и стандартного
         имени  соответствующей  программной секции (см. далее),
         усеченной до 6 символов. Директива  Psect  ;  (без  ар-
         гумента)  позволяет вернуться к стандартным именам про-
         граммных секций;

     7.  Управляющие  символы '\016' и '\017' (переход в русский
         регистр и обратно) допускаются только внутри  строковых
         констант и комментариев.

     Список директив препроцессора компилятора:
          #if #ifdef #ifndef #else #endif
          #line #define #undef #include

     Список ключевых слов языка, поддерживаемых компилятором:
          char double enum float int struct union
          long short unsigned
          auto extern register static
          break case continue default do else for
          goto if return switch sizeof typedef while
          interrupt Psect

     Зарезервировано ключевое слово Process.


                     3.2. Работа с компилятором

     Командная строка компилятора имеет следующий формат:

     RUN C:CC [-ключи] .. FILE[.C] .. [FILE.MAC .. FILE.OBJ ..]

     Входные  файлы  с  расширением  .C (оно может быть опущено)
компилируются и ассемблируются, файлы с расширением .MAC  ассем-
блируются,  а  затем полученные файлы компонуются вместе с вход-
ными файлами с расширением .OBJ и Си-библиотекой C:CLIB.OBJ.

     Ключи компилятора:
     -v - выводит на терминал протокол работы компилятора;
     -s - подавляет    автоматический    вызов    ассемблера   и
компоновщика;
     -c - подавляет автоматический вызов компоновщика;
     -6 - позволяет  транслировать программы, написанные в стан-
дарте версии 6 ОС UNIX;
     -p - включает в генерируемый код средства отладки;
     -f - подавляет    автоматическое   удаление   промежуточных
файлов, создаваемых компилятором в процессе работы;
     -iXXX - задает   тип  генерируемого  кода  для  операций  с
плавающей  запятой  (XXX=FIS,FPU).   По   умолчанию   компилятор
генерирует код под ту аппаратуру, на которой работает;
     -dXXX=YYY - эквивалентен        команде       препроцессора
#define XXX YYY. Если =YYY опущено, XXX  присваивается  значение
1.  Следует иметь в виду, что при обработке командной строки она
переводится в верхний регистр;
     -lXX - подключает при компоновке библиотеку C:XXLIB.OBJ;
     -bNNNN - задает нижний адрес программы равным NNNN;
     -oXXXX - помещает  загрузочный  модуль  в файл XXXX.SAV. По
умолчанию имя загрузочного модуля  соответствует  имени  первого
исходного файла, имеющего расширение .C или .MAC;



                                                           - 5 -
                         СИСТЕМА ПРОГРАММИРОВАНИЯ MULTI C V10.89
                                                   СИ-КОМПИЛЯТОР


несколько более мелких (если памяти  не  хватает  оптимизатору).
Сообщения,  начинающиеся со слова ?START, также могут свидетель-
ствовать о катастрофическом недостатке памяти.
     "Ошибка Вв/Выв" часто сигнализирует о недостатке свободного
места  на  устройстве  DK:,   где   компилятор   размещает   все
промежуточные и выходные файлы.
     "Ошибка  компилятора"  сигнализирует  о  внутренней  ошибке
Си-компилятора. При обнаружении такой ошибки (если  Вы  уверены,
что  Ваша программа корректна) свяжитесь с поставщиком, сохранив
исходный текст программы, вызвавшей ошибку.


             3.4. Некоторые сведения о генерируемом коде

     Компилятор  распределяет  выходной  код и данные по четырем
программным секциям (если программа не содержит директив Psect):
     .PROG. - секция чистого кода;
     .DATA. - секция инициализированных данных;
     .BSS.  - секция неинициализированных данных;
     .PROF. - секция   отладочной   информации   (см.   описание
отладочных средств).

     Генерируемый код для каждой функции имеет следующий вид:

        FUNC:   JSR   R5,CSV¤        ; Сохранение регистров
                SUB   #<NLOCALS>,SP  ; Выделение места в стеке
                ... тело функции ... ;  под локальные переменные
                MOV   <RETVAL>,R0    ; Возвращаемое значение
                JMP   CRET¤          ; Восстановление регистров
                                     ;  и возврат

     Вызов   функции  производится  командой  JSR PC,FUNC  после
вычисления и засылки  в  стек  значений  аргументов  (начиная  с
последнего).  Получив  управление, функция обращается к CSV¤ для
сохранения в стеке содержимого  регистров  R2-R5  и  выделяет  в
стеке память под свои локальные автоматические переменные. После
этого структура локальных данных функции приобретает вид,  пока-
занный на рисунке.
     Регистры R0-R4 и верхушка стека свободны для использования.
Адресация аргументов и локальных переменных осуществляется через
R5.  При  возврате  функция загружает возвращаемое значение в R0
(или в R0 и R1, в зависимости от  типа  возвращаемых  данных)  и
передает  управление  на  CRET¤  для  восстановления регистров и
возврата.
     Функция типа interrupt перед вызовом CSV¤ прячет содержимое
R0 и R1 в стек, а при возврате передает управление на IRET¤.
     Необходимо  иметь  в  виду,  что  описания  extern вызывают
генерацию директив макроассемблера .GLOBL.  Таким  образом,  все
библиотечные функции (и переменные), описанные в программе поль-
зователя, как extern,  включаются  компоновщиком  в  загрузочный
модуль независимо от того, производится к ним реальное обращение
или нет.
     Исчерпывающую   информацию   о   генерируемом   коде  можно
получить, изучая .MAC-файлы, генерируемые  при  трансляции  про-
грамм с ключом '-s'.






                                                           - 7 -
                         СИСТЕМА ПРОГРАММИРОВАНИЯ MULTI C V10.89
                                                   СИ-КОМПИЛЯТОР


                          4. СИ-БИБЛИОТЕКА

     Си-библиотека включает в себя следующие компоненты:

      -  Исполняющая система Си;
      -  Функции ввода-вывода a la UNIX;
      -  Функции для работы со строками и символами;
      -  Математические функции;
      -  Отладочные средства;
      -  Разные функции.

     Кроме того, в Си-библиотеку включен оверлейный драйвер, что
позволяет  компоновать  оверлейные  программы  без  обращений  к
SYSLIB.
     При работе с системой программирования, Си-библиотека долж-
на находиться на устройстве с логическим именем C:.


                      4.1. Исполняющая система

     Исполняющая  система  Си  автоматически  включается  в  за-
грузочный  модуль  Си-программы  при  компоновке   и   выполняет
следующие функции:

     При запуске:
      -  вводит и обрабатывает командную строку;
      -  открывает файлы stdin, stdout и stderr;
      -  вызывает  функции  инициализации,  если  таковые заданы
         пользователем;
      -  вызывает функцию main с аргументами argc и argv.

     При завершении работы программы:
      -  вызывает функцию wrapup (см. далее);
      -  вызывает   функции   завершения,  если  таковые  заданы
         пользователем;
      -  выводит  профиль  выполнения  программы (если она ском-
         пилирована с ключом -p);
      -  закрывает все открытые файлы;
      -  возвращает управление монитору.


     4.1.1. Командная строка  -

     При  запуске  Си-программы  исполняющая  система выводит на
терминал промпт Argv: (или  иной,  задаваемый  пользователем)  и
ожидает  ввода  командной  строки a la UNIX. Из командной строки
выделяются отдельные аргументы, разделенные пробелами, и  указа-
тели  на  них  помещаются  в  массив  указателей argv, начиная с
argv[1] (argv[0]  всегда  указывает  на  строку  "Argv:").  Если
необходимо  передать  аргумент,  содержащий пробел(ы), его нужно
заключить в одинарные или  двойные  кавычки  (сами  кавычки  при
обработке командной строки будут удалены).
     Аргументы  вида  <FILNAM  и  >FILNAM  переназначают stdin и
stdout (соответственно) с TT: на указанные  файлы  (устройства).
Такие аргументы не заносятся в массив argv. Количество элементов
массива  argv  помещается  в   переменную   argc,   после   чего
исполняющая  система  вызывает функцию main с аргументами argc и
argv.



                                                           - 9 -
                         СИСТЕМА ПРОГРАММИРОВАНИЯ MULTI C V10.89
                                                   СИ-БИБЛИОТЕКА


     log10(x) - десятичный логарифм x;!
     pow(x,y) - x в степени y;
     sin(x) - синус x;
     sqrt(x) - квадратный корень из x;
     tan(x) - тангенс x.

     При  возникновении  ошибки  во  время  выполнения  одной из
математических функций переменной errno присваивается  ненулевое
значение  кода  ошибки.  Вывести сообщение об ошибке на терминал
можно с помощью функции perror (см. разд. "Разные функции").
     Все математические функции работоспособны в ПЗУ.


                      4.3. Отладочные средства

     regdmp() - выводит дамп регистров на терминал;
     memdmp(start, end) char *start, *end; - выводит дамп памяти
от start до end на терминал. Если start==0, распечатывается дамп
стека.
     Эти  функции не пользуются услугами библиотеки ввода-вывода
и могут применяться в режиме sys_small (см. далее).

     Следующие   функции   работают  с  отладочной  информацией,
включаемой в программу при компиляции с помощью ключа -p.
     char  *caller()  -  возвращает  указатель  на  имя функции,
вызвавшей текущую;
     calltrace(fptr)  FILE  *fptr;  -  выводит  в указанный файл
цепочку вызовов от исполняющей  системы  до  текущей  функции  в
виде:
     [ StartUp => MAIN => FUNC1 ... => MYFUNC ]
     Если  функция в цепочке не была скомпилирована с ключом -p,
вместо ее имени выводится ее восьмеричный адрес. Цепочка вызовов
выводится автоматически на stderr, если программа вызывает error
или вылетает по какому-либо прерыванию.

     При  вызове  любой функции, скомпилированной с ключом -p, в
файл TRC:TRACE.LST выводится строка, содержащая  имя  вызываемой
функции,  адрес, с которого она вызвана, а также содержимое R5 -
базу локальных данных функции. Кроме того  проверяется  значение
указателя  стека,  и  если  он  опускается  ниже 0600, программа
аварийно завершается  с  выводом  на  терминал  соответствующего
сообщения.
     При  завершении  работы  программы  в  файл  PRF:PROFIL.LST
выводится профиль выполнения программы -  список  всех  функций,
скомпилированных  с  ключом  -p,  с указанием количества вызовов
каждой функции. Чтобы получить указанную отладочную  информацию,
перед  запуском  программы  назначьте логические имена PRF и/или
TRC  на  нужные  устройства.  Если  эти  имена   не   назначены,
отладочная информация не выводится.
     Если  программа,  скомпилированная с ключом -p, вылетает по
прерыванию с адресом вектора 4, 10,  34  или  250,  на  терминал
выводится  соответствующее  сообщение,  дамп регистров и цепочка
вызовов до "вылетевшей" функции, после чего  программа  аварийно
завершается.







                                                          - 11 -
                         СИСТЕМА ПРОГРАММИРОВАНИЯ MULTI C V10.89
                                                   СИ-БИБЛИОТЕКА


     ungetc(c,  stream)  char  c;  FILE  *stream;  -  возвращает
обратно во входной файл  stream  введенный  из  него  символ  c.
Последующая операция ввода из файла stream введет символ c.
     char  *fgets(s,n,stream) char *s; FILE *stream; - вводит из
файла stream символы в буфер s, пока не будет введен символ '\n'
или  пока  не будет введено n символов. Возвращает s или 0, если
обнаружена ошибка или конец файла.
     char  *gets(s) char *s; - вводит строку символов из stdin в
буфер s.

     putc(c,stream)  char  c; FILE *stream; - выводит символ c в
файл stream. Возвращает c  или  EOF  при  возникновении  ошибки.
Синоним: fputc.
     putchar(c) эквивалентно putc(c,stdout).
     putw(w,stream)  int  w;  FILE  *stream; - выводит слово w в
файл stream.
     fputs(s,  stream) char *s; FILE *stream; - выводит строку s
в файл stream.
     puts(s)  char *s; - выводит строку s в stdout, заменяя \0 в
конце строки на '\n'.

     fprintf(stream,fmt[,arg..])  FILE  *stream;  char  *fmt;  -
производит форматное преобразование своих аргументов в текстовое
представление  в  соответствии  со строкой fmt и вывод их в файл
stream (см. описание функции prf).
     printf(fmt[,arg..]) эквивалентно fprintf(stdout,fmt,..).

     fscanf(stream,fmt[,addr  ..])  FILE  *stream;  char *fmt; -
вводит текстовые данные из файла stream и преобразует  их  в  во
внутреннее представление в соответствии с форматной строкой (см.
описание функции scf).
     scanf(fmt[,addr..]) эквивалентно fscanf(stdin,fmt,..).

     long  ftell(stream) - возвращает текущее значение указателя
чтения-записи файла stream. Старшее слово возвращаемого значения
содержит  номер  блока  от начала файла, младшее - номер байта в
блоке.
     fseek(stream,offset,0)   long   offset;   -   устанавливает
значение указателя чтения входного файла stream  равным  offset.
Функция возвращает 0 при нормальном завершении и EOF при ошибке.
     rewind(stream)  эквивалентно  fseek(stream,(long)0,0). Если
stream был открыт на запись, он закрывается и переоткрывается на
чтение.

     Более  подробную  информацию  по  функциям  файлового  вво-
да-вывода можно найти в любой литературе  по  языку  Си  или  ОС
UNIX.

     Ненулевой  код  ошибки,  возникшей  при выполнении операции
ввода-вывода  помещается  в  переменную  errno.  Соответствующее
сообщение  об ошибке можно вывести на терминал с помощью функции
perror (см. разд. "Разные функции").









                                                          - 13 -
                         СИСТЕМА ПРОГРАММИРОВАНИЯ MULTI C V10.89
                                                   СИ-БИБЛИОТЕКА


     prf(func,fmt[,arg..])  (*func)(c);  char  c;  char  *fmt; -
производит форматное преобразование своих аргументов в текстовое
представление в соответствии со строкой fmt и посимвольный вывод
результата  посредством  функции  (*func).   Все   разновидности
функции printf вызывают эту функцию.
     Функция поддерживает следующие спецификации преобразования:
     %d(%D) - десятичное целое.
     %u(%U) - целое без знака.
     %o(%O) - восьмеричное целое.
     %x(%X) - шестнадцатиричное целое.
     %b(%B) - двоичное целое.
     Если  между  символом '%' и типом спецификации стоит символ
'l' ('L'), соответствующий аргумент должен быть типа long.
     %f(%F) - число типа float в обычном формате.
     %e(%E) - число типа float в экспоненциальном формате.
     %g(%G) - число типа float в наиболее коротком формате.
     %c(%C) - отдельный символ.
     %s(%S) - строка символов.
     %r(%R)  -  вынесенный  формат : очередной аргумент является
новой форматной строкой, которая начинает обрабатываться  вместо
старой.
     Между символом '%' и типом спецификации могут быть:
     - символ  '-', который вызывает выравнивание выводимого ар-
гумента по левому краю поля вывода;
     - символ  '0',  который  вызывает  заполнение пустого места
слева от аргумента (при его наличии) нулями (вместо пробелов);
     - число, задающее минимальную ширину поля вывода. Если пре-
образованный аргумент содержит меньше символов, поле дополняется
пробелами  (или  нулями)  слева  (или справа). Если вместо числа
стоит символ '*' или '?', ширина поля берется из очередного  ар-
гумента (типа int);
     - символ  '.',  который  отделяет  ширину  поля  вывода  от
точности;
     - число,  задающее  точность  представления аргумента : для
числа типа float оно  задает  количество  выводимых  цифр  после
точки,  а  для  строки  - максимальное число выводимых символов.
Вместо числа также может быть использован символ '*' или '?'.

     Пример:
       printf("%-5s-> %R","CC","Число PI равно %10.*g\n",
                                                4, 3.14159);
     Результат :
       CC   -> Число PI равно     3.1416

     sprintf(buf,fmt[,arg  ..]) char *buf, *fmt; - преобразует и
выводит свои аргументы в строку buf.

     scf(func,fmt[,addr  ..])  char  (*func)(); char *fmt; - по-
символьно читает текст посредством функции (*func),  преобразует
его  во внутреннее представление в соответствии со строкой fmt и
помещает  результаты  своей  деятельности  по  адресам,  которые
получает  в качестве аргументов. Все разновидности функции scanf
вызывают эту функцию.
     Функция поддерживает следующие спецификации преобразования:
     %d(%D) - десятичное целое.
     %o(%O) - восьмеричное целое.
     %x(%X) - шестнадцатиричное целое.
     Если  между  символом '%' и типом спецификации стоит символ
'l' ('L'), соответствующий аргумент должен быть типа long.


                                                          - 15 -
                         СИСТЕМА ПРОГРАММИРОВАНИЯ MULTI C V10.89
                                                   СИ-БИБЛИОТЕКА


     toupper(c)  char  c; - возвращает c, переведенное в верхний
регистр, если c - буква нижнего регистра.

     #include <ctype.h>

     index(s,c) - синоним strchr(s,c) (устар.)
     rindex(s,c) - синоним strrchr(s,c) (устар.)

     _tolower(c)  -  синоним  tolower(c), но неприменима для ар-
гументов, вызывающих побочные эффекты (++ptr, и т.п.).
     _toupper(c)  -  синоним  toupper(c), но неприменима для ар-
гументов, вызывающих побочные эффекты (++ptr, и т.п.).

     isalpha(c) - не нуль, если c - буква.
     isupper(c) - не нуль, если c - прописная буква.
     islower(c) - не нуль, если c - строчная буква.
     isdigit(c) - не нуль, если c - цифра.
     isxdigit(c) - не нуль, если c - шестнадцатиричная цифра.
     isalnum(c) - не нуль, если c - буква или цифра.
     isspace(c) - не нуль, если c принадлежит " \t\n\f".
     ispunct(c) - не нуль, если c - символ пунктуации.
     isprint(c) - не нуль, если c >= 040 && c < 0177.
     isgraph(c) - не нуль, если c > 040 && c < 0177.
     iscntrl(c) - не нуль, если c - управляющий символ.
     isascii(c) - не нуль, если c < 0200.

     Все функции работоспособны в ПЗУ.


                         4.7. Разные функции

     abs(x) - возвращает абсолютное значение x.
     sign(x)  -  возвращает  -1, если x < 0; 0, если x == 0 и 1,
если x > 0.

     rand(max)  -  возвращает  псевдослучайное число в диапазоне
0...max-1, а если max=0, то в диапазоне 0...32767.
     long   seed   -  позволяет  задать  "ключ"  псевдослучайной
последовательности: для разных seed будут генерироваться  разные
псевдослучайные последовательности и наоборот.

     exit(status)  -  завершает  выполнение программы и передает
управление исполняющей  системе  для  проведения  заключительных
операций  (см.  описание исполняющей системы). status передается
ОС в качестве кода завершения:
     status = 1 /* успешное завершение */
     status = 2 /* предупреждение */
     status = 4 /* ошибка */
     status = 8 /* фатальная ошибка */

     error(format[,arg..]) эквивалентно
                      ttprintf(format[,arg..]), exits(4).

     exec(s1[,s2..],0)  char  *s1,*s2..;  -  осуществляет  exit,
передавая строки  s1,  s2,,,  операционной  системе  в  качестве
командного файла, который и выполняется.

     [type]  call(subr,count[,addr..])  extern  [type] subr(); -
вызывает подпрограмму (функцию) subr, написанную в Фортрановском
стандарте. count - количество передаваемых аргументов, addr - их

                                                          - 17 -
                         СИСТЕМА ПРОГРАММИРОВАНИЯ MULTI C V10.89
                                                   СИ-БИБЛИОТЕКА


     4.7.2. Получение времени и даты  -

     rtime(buffer)      struct time {
                            int year;   /* год - 1900      */
                            int month;  /* месяц           */
                            int day;    /* день            */
                            int hour;   /* час             */
                            int minute; /* минута          */
                            int second; /* секунда         */
                            int tick;   /* тик             */
                            int tsec;   /* частота таймера */
                     } *buffer; -
     заполняет   buffer  информацией,  соответствующей  текущему
времени и дате.
     char  *ctime(buffer) struct time *buffer; - преобразует ин-
формацию  в  буфере  (возвращенном  rtime)  в  строку   символов
следующего вида:
     Mon Oct 11 11:27:15 1989\0
     ctime(0)  автоматически вызывает rtime и возвращает текущее
время и дату.

     long time(tloc) long *tloc; - помещает по адресу tloc (если
он не равен нулю) и возвращает  количество  секунд,  истекшее  с
начала суток (применяется для измерения временных интервалов).

     dayofweek(buffer)  struct  time *buffer; - возвращает номер
дня недели (Sun=0).


        4.8. Несколько способов сократить размер загрузочного
     модуля программы

     Если  программа  не  требует  аргументов  argc  и  argv, не
выполняет никаких операций  файлового  ввода-вывода,  а  с  тер-
миналом  обменивается  посредством  функций ttXXXX, объем ее за-
грузочного модуля можно существенно сократить, включив  в  текст
программы описание extern sys_small;.
     Если Вы пользуетесь функцией printf (и т.п.), но не исполь-
зуете спецификаций преобразования  %f,%e,%g,  включите  в  текст
программы описание на внешнем уровне ¤¤dtoa=0207; .
     Если Вы пользуетесь функцией printf (и т.п.), но не исполь-
зуете спецификаций преобразования целых чисел, включите в  текст
программы  описание  на  внешнем  уровне  ¤¤ltoa=0207; . Следует
иметь в виду, что целые преобразования могут понадобиться  неко-
торым библиотечным функциям, например, для вывода отладочной ин-
формации.
     Если  Вы пользуетесь функцией scanf (и т.п.), но не исполь-
зуете спецификаций преобразования  %f,%e,%g,  включите  в  текст
программы описание на внешнем уровне ¤¤atod=0207;.
     Если Вы не пользуетесь математическими функциями и функцией
atof, включите в текст  программы  описания  на  внешнем  уровне
m¤¤fis=0; m¤¤fpu=0; .









                                                          - 19 -

