                   ███████████████████████
                   ██ Функция    play() ██
                   ███████████████████████

   Язык программирования: Quick C, V 2.51
   Модель памяти: LARGE
   Имя программы: play
   Версия: 1.1
   Дата последнего изменения: 27.08.91г.
   
   Функция play() предназначена для воспроизведения заданной
   мелодии и  представляет собой аналог оператора PLAY языка 
   BASIC. Строка параметров (string)  - строковое выражение,
   значение  которого  специальным образом задает  требуемую
   мелодию. Мелодия задается с помощью так называемого "язы-
   ка описания мелодий". По сравнению с оператором PLAY язы-
   ка BASIC добавлены 2 параметра:
   "R" - позволяет при динамическом вызове программ  которые 
         самостоятельно перепрограммируют  системный  таймер
         (например GRASP) использовать прерывание  0x1c  для 
         исполнения мелодии в фоновом режиме (за счет умень-
         шения точности исполнения мелодии). Функция  play()
         должна быть вызвана с этим параметром до исполнения
         первой ноты.
   "Q" - прерывает исполнение мелодии в фоновом режиме.  Не-
         обходимо вызвать функцию с  этим  параметром  перед
         завершинием  программы при исполнении мелодии в фо-
         новом режиме. 
   Программа создает циклический буфер на 255 нот для испол-
   нения мелодии в фоновом режиме.
   
   Обращение: ret = play(string);
              char string[256];   /*  строка        */
              int ret;            /*  код возврата  */
   Возвращаемые значения:
   int: "0-255" - число нот в буфере (режим MB);
        "-1"    - ошибка в операндах;
        "-2"    - переполнение буфера.
_____________________________________________________________________________ 

   Формат string (подробности см. в описании оператора PLAY BASIC):  

1)  C,D,E,F,G,A,B - задание исполняемой ноты;
2)  # или +       - знак диез (после нот C,D,F,G,A);
3)  -             - знак бемоль (после нот B,A,G,E,D);
4)  On            - задание октавы 0<=n<=6 (п.м. 4);
5)  >X            - на октаву выше (>6 =6);
6)  <X            - на октаву ниже (<0 =0);
7)  Nn            - звук с номером n (1<=n<=84); 0 - пауза;
8)  Ln            - задание длительности 1<=n<=64 (п.м.4);
9)  Xдлит         - задание длительности одной ноты 
                    (допускается +(#) или - после длительности);
10) Pn            - задание длительности паузы 1<=n<=64 (п.м.4);
11) .             - удлинение ноты или паузы в 1.5 раза;
12) Tn            - задание темпа 32<=n<=255 (п.м.120);
13) MF            - музыка переднего плана (п.м.);
14) MB            - фоновая музыка (буфер на 255 нот);
15) MN            - обычное исполнение (длит. ноты = L*7/8. п.м.);
16) ML            - исполнение легато (длит. ноты = длит. в L);
17) MS            - исполнение стоккато (длит. = L*3/4);
18) Q             - прервать мелодию (фоновый режим);
19) R             - использовать режим без установки таймера
                    (п.м. частота прерываний таймера увеличивается в 64 раза);
20) пробел        - игнорируется.
______________________________________________________________________________
 Автор будет благодарен за любые замечания и предложения. Возможна 
 договоренность на предоставление исходных текстов программы.
______________________________________________________________________________

 Программист: Мельников А.В. ВЦ Укр.УГА, г.Киев, р.т.(044) 216-27-96
                                                 д.т.(044) 488-88-16
______________________________________________________________________________
