Клиппер 5. Справочник

         

Клиппер 5. Справочник


Введение
 
------------------------------------------------------------------------------
 
Современное программное обеспечение трудно представить без многооконной системы, реализующей представление многочисленных задач в наиболее информативном для пользователя виде. Описываемые в данной главе функции значительно расширяют возможности Clipper в этой области.
 
  Оконная система
 
Функции Clipper Tools II/5.0 (CT II) позволяют на одном физическом экране создать при наличии доступной памяти до 255 окон. Более того, CT II поддерживает одновременное использование двух мониторов (цветного и монохромного), подключенных к одному компьютеру. В этом случае при помощи функции MONISWITCH(), описываемой в главе "Видеофункции", доступны две независимые оконные системы из 255 окон каждая.
 
Оконные функции CT II поддерживают экраны с размерами, превышающими 25
    строк на 80 столбцов. Экран, а следовательно, и окно, могут достигать
    размера 255 строк или 255 столбцов. Однако общий объем памяти,


    занимаемый экраном, не может превышать 32 Кбайта, поэтому при 255
    строках допускается не более 128 столбцов.
 
  Интерактивное перемещение окон
 
    Нажатие клавиши <Scroll Lock> включает режим интерактивного
    перемещения окон, осуществляемого клавишами управления курсором.
    Окна, в зависимости от режима открытия, могут перекрывать друг друга.
    Клавиша <+> на дополнительной клавиатуре действует как функция
    WCENTER(), т.е. окно, видимое лишь частично, полностью перемещается
    в видимую область. Все интерактивные перемещения окна можно
    аннулировать нажатием клавиши <Esc>.
 
  Применение оконных функций
 
  . Каждому окну при его открытии присваивается дескриптор,
    являющийся числом в диапазоне от 1 до 255 (включительно). Дескриптор
    0 присваивается физическому экрану (вывод осуществляется без учета
    открытых окон). Возвращаемый при открытии окна дескриптор следует

    сохранять в переменной с целью последующей активизации требуемого
    окна. Например, активизация перекрытого окна может быть произведена
    так:
 
    WMODE(.T., .T., .T., .T.)           // Разрешение перекрытия
 
    nWindow1 := WOPEN(....)
    nWindow2 := WOPEN(....)             // Это активное окно
 
    WSELECT(nWindow1)                   // Активизация первого окна
 
  . Координаты, используемые при выводе, относятся только к
    активному окну, а не к экрану в целом:
 
    nWindow1 := WOPEN(....)             // Активное окно
    @ 02, 02 SAY "Clipper Tools II/5.0"
 
  . Поскольку окно ведет себя как обычный экран, то для
    выводимого функцией QOUT() (?, ?? и т.д.) изображения по достижении
    последней строки начинает осуществляться скролинг.
 
  . В следующем примере информация, выводимая в окно,
    занимающее верхнюю часть экрана до строки 24 включительно,
    не перекроет HELP-сообщение в строке 25:
 
    @ 25, 00 SAY "..... HELP-сообщение ....."
    nWindow1 := WOPEN(0, 0, 24, 79)     // Последняя строка экрана защищена
    FOR nI = 1 TO 100
        ? "Clipper Tools II/5.0"
    NEXT nI
 
  . Каждое окно поддерживается как полноценный, но виртуальный
    экран, отличающийся от физического только размером. В главе
    "CT II-драйверы" описаны функции MAXROW() и MAXCOL(), расширяющие
    возможности аналогичных функций Clipper 5.0 и поддерживающие
    возможность задания размеров виртуального экрана. Эти функции
    возвращают позицию последней строки и последнего столбца текущего
    выбранного окна:
 
    nWindow1 := WOPEN(10, 10, 20, 60)
 
    ? MAXROW()                  // Строка: 10
    ? MAXCOL()                  // Столбец: 50
 
  . При открытии и перемещении окна перекрываемая им область
    экрана автоматически сохраняется. Одновременно сохраняются и все
    установки, которые были сделаны для этой области, в том числе, вид и


    положение курсора, а также цветовые атрибуты.
 
  . При выполнении следующего демонстрационного примера можно
    познакомиться с возможностями сохранения оконными функциями
    установок для цвета и курсора:
 
    SET COLOR TO R              // Установка красного цвета
    ? "Тестовый текст 1..."     // Вывод красным цветом
    nWindow1 := WOPEN(10, 10, 20, 55)
    WBOX()                      // Обрамление окна красным цветом
    SET COLOR TO BG             // Установка бирюзового цвета
    ? "Тестовый текст 2..."     // Вывод бирюзовым цветом
    INKEY(0)                    // Ожидание нажатия клавиши
    WFCLOSE()                   // Закрытие окна
    ? "Тестовый текст 3..."     // Вывод текста непосредственно под "Текст 1"
                                // и снова красным цветом
 
  Внимание!
 
  . После закрытия окна активным становится окно с наибольшим
    номером дескриптора. Если, например, наибольшим был номер дескриптора
    9, а активным было окно 5, то вновь открытому окну будет присвоен
    дескриптор 10. После закрытия этого окна активным станет окно 9.
    Поэтому для активизации окон в дальнейшем их дескрипторы необходимо
    сохранять в переменных.
 
  . Вызов функции WSELECT() без параметров позволяет сохранить
    дескриптор активного окна.
 
  . Вывод информации внешними программами, запускаемыми по
    команде RUN из Clipper-программы, может быть направлен в окна.
    Единственное требование к такому выводу - осуществление его через
    DOS или BIOS. Управление перенаправлением вывода осуществляется
    посредством функции DSETWINDOW(), описываемой в главе
    "CT II-драйверы":
 
    DSETWINDOW(.T.)
    nWindow1 := WOPEN(10, 10, 22, 70)
    RUN DIR                     // Вывод результатов в окно
 
 

 

 WACLOSE()
 Закрывает все окна.
------------------------------------------------------------------------------


 
  Синтаксис
 
    WACLOSE() --> nError
 
  Возвращаемое значение
 
    nError - число 0 при успешном выполнении, а иначе (-1).
 
  Описание
 
    Функция закрывает все открытые в данный момент окна, возвращая
    значение 0. Если ни одно окно не было открыто функцией WOPEN(), то
    WACLOSE() возвращает значение (-1).
 
  Примеры
 
  . Открытие нескольких окон:
 
    WOPEN(...)
    WOPEN(...)
    WOPEN(...)
 
    WACLOSE()   // Закрытие всех окон
 

See Also: WCLOSE()
 

 

 WBOARD()
 Выделяет область экрана, разрешенную для размещения окон.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WBOARD([<nTopRow>, <nLeftColumn>,
     <nBottomRow>, <nRightColumn>]) --> nError
 
  Параметры
 
    <nTopRow>, <nLeftColumn>, <nBottomRow>, <nRightColumn> -
    необязательный блок числовых параметров, задающих координаты области
    экрана (строку и столбец левого верхнего угла, а также строку и
    столбец нижнего правого угла), внутри которой могут открываться окна.
    По умолчанию задаваемая область совпадает с физическим экраном, что,
    как правило, соответствует вызову WBOARD(0, 0, 24, 79).
 
  Возвращаемое значение
 
    nError - число 0 при успешном выполнении, а иначе (-1).
 
  Описание
 
    Функция определяет область экрана, в которой разрешено размещение
    окон. Это позволяет защитить остальную часть экрана от размещения в
    ней окон даже при их интерактивном перемещении. Границы области,
    заданные функцией WBOARD(), становятся для оконных функций границами
    экрана.
 
  Примечания
 
  . Данная функция не может применяться при открытых окнах.
 
  . Закрытие отдельных или всех окон не влияет на границы оконной
    области.
 
  . Пренебрежение отменой границ области может привести


    впоследствии к непредвиденным проблемам при открытии окон.
 
  Примеры
 
  . Выделение под окна верхней половины экрана:
 
    WBOARD(0, 0, 12, 79)
 

See Also: WACLOSE() WCLOSE() WSETMOVE() WMODE()
 

 

 WBOX()
 Обрамляет активное окно.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WBOX([<cFrameChar|nFrameType>]) --> nCurrentWindow
 
  Параметры
 
    <cFrameChar|nFrameType> - необязательный параметр, задающий в
    символьной форме строку, содержащую до 9 символов, а в числовой форме
    номер одного из 8 различных типов обрамлений. Перечень возможных типов
    обрамлений приведен в подразделе Описание.  По умолчанию обрамление
    выполняется двойной линией с заполнением окна символом CLEARB, имеющим
    в исходном состоянии, предопределенном параметрами CT II, код
    CHR(255).
 
  Возвращаемое значение
 
    nCurrentWindow - номер дескриптора активного окна.
 
  Описание
 
    Функция аналогична Clipper-команде @...BOX, но обрамляет активное
    окно. Для обрамления окна можно указать строку, содержащую от 1 до 9
    символов, соответствующих горизонтальным и вертикальным линиям, углам
    рамки и заполнителю окна. При обрамлении символы используются, начиная
    с верхнего левого угла, а затем идя по часовой стрелке и заполняя
    пространство экрана девятым символом, если он задан.
 
    Если вместо символьной строки задано число, то WBOX() интерпретирует
    его как тип обрамления. На рисунке показаны типы обрамлений и
    соответствующие им числа от 0 до 15. Числа от 0 до 3 и от 8 до 11
    задают обрамление с очисткой области внутри окна, а остальные - без
    очистки.
 
    Типы обрамлений
 
    С очисткой:         0          1          2          3
 
                    +-------+  +-------+  +-------+  +-------+
                    |       |  |       |  |       |  |       |


                    |       |  |       |  |       |  |       |
                    +-------+  +-------+  +-------+  +-------+
 
    Без очистки:        4          5          6          7
 
 
    С очисткой:         8          9          10         11
 
                    ######### ########### ########## ##########
                    #       # #         # #        # #        #
                    #       # #         # #        # #        #
                    ######### ########### ########## ##########
 
    Без очистки:        12         13         14         15
 
  Примечания
 
  . Вызов функции сопровождается уменьшением рабочей области
    окна на 2 строки и 2 столбца (что соответствует вызову
    WFORMAT(1, 1, 1, 1)). Это предохраняет от непреднамеренного наложения
    на рамку другого изображения. При повторных вызовах WBOX() окно
    уменьшается снова. Если окно станет слишком мало для обрамления, то
    WBOX() возвратит значение (-1), ничего не изменяя.
 
  . Если рамка должна быть снабжена заголовком, то его можно
    поместить в верхнюю строку обрамления окна Clipper-командой @...SAY
    со значением номера строки (-1).
 
  Примеры
 
  . Обрамление окна двойной линией и заполнение его символом
    CLEARB. Текстовая область окна автоматически уменьшается на 1 с
    каждой стороны:
 
    WSELECT(nWindow)
    WBOX(0)
 
  . Обрамление окна одинарной линией и заполнение его символом
 
    CHR(177):
    SETCLEARB(177)      // Символ очистки
    WBOX(1)             // Обрамление типа 1 с очисткой внутренней области
 

See Also: WFORMAT() WOPEN() WSELECT() SETBOXGROW() SETCLEARB()
 

 

 WCENTER()
 Перемещает окно в видимую область экрана или центрирует его.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WCENTER([<lCenter>]) --> nCurrentWindow
 
  Параметры
 


    <lCenter> - необязательный логический параметр, задающий при значении
    .T. перемещение окна в центр экрана, а при значении .F. или по
    умолчанию перемещение окна в видимую область.
 
  Возвращаемое значение
 
    nCurrentWindow - номер дескриптора активного окна.
 
  Описание
 
    Функция перемещает окно так, чтобы оно стало полностью видимым.
    При значении .T. параметра <lCenter> окно, кроме того, центрируется.
 
  Примечания
 
  . Функция действует только на активное окно.
 
  Примеры
 
  . Перемещение окна с дескриптором nWindow в видимую область:
 
    WSELECT(nWindow)
    WCENTER()
 

See Also: WBOARD() WOPEN() WSELECT()
 

 

 WCLOSE()
 Закрывает активное окно.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WCLOSE() --> nWindow
 
  Возвращаемое значение
 
    nWindow - номер дескриптора окна, которое становится активным.
 
  Описание
 
    Данная функция закрывает активное окно. Активным становится окно
    с наибольшим номером дескриптора.
 
  Примечания
 
  . Дескриптор, освободившийся при закрытии окна функцией
    WCLOSE(), может быть повторно использован при последующих вызовах
    WOPEN().
 
  . Если функция WCLOSE() вызывается при активном физическом
    экране (окне 0), то закрытие не выполняется и физический экран остается
    активным.
 
  Примеры
 
  . Такая последовательность команд сделает активным окно 3,
    а не 2:
 
    WSELECT(3)
    WSELECT(2)
    WSELECT(5)
    WCLOSE()
 

See Also: WOPEN() WSELECT() WBOX()
 

 

 WCOL()
 Возвращает позицию первого столбца активного окна.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WCOL([<lAfterWCENTER>]) --> nCol
 
  Параметры
 
    <lAfterWCENTER> - необязательный логический параметр, задающий при


    значении .T. возврат позиции первого столбца активного окна,
    получаемой после вызова функции WCENTER(), а при значении .F. или
    по умолчанию возврат значения текущей позиции первого столбца.
 
  Возвращаемое значение
 
    nCol - номер первого столбца активного окна в координатах физического
    экрана.
 
  Описание
 
    Функция возвращает текущую позицию первого столбца активного окна,
    что позволяет сохранить позицию перемещенного (функцией WMOVE() или
    интерактивно) окна и позднее открыть его снова на том же месте.
 
    Если при перемещении окна функция WMOVE() вызывалась с недопустимыми
    параметрами, то WROW() и WCOL() позволяют определить текущую позицию
    окна, т.к. WMOVE() автоматически адаптируется к некорректным
    параметрам. Нечто подобное происходит и при использовании функции
    WCENTER(). И в этом случае новые координаты могут быть получены с
    помощью WROW() и WCOL().
 
    Кроме того, при значении .T. параметра <lAfterWCENTER> возвращается
    позиция, которую имел бы первый столбец активного окна после вызова
    функции WCENTER().
 
  Примечания
 
  . Возвращаемое значение может быть отрицательным. Это
    означает, что первый столбец окна находится вне области видимости.
 
  Примеры
 
  . Определение позиции окна и его повторное открытие:
 
    nTop := 10
    nLeft := 15
    WOPEN(nTop, nLeft, nTop + 10, nLeft + 40)
 
    * Перемещение окна пользователем
 
    nTop := WROW()              // Сохранение текущей позиции
    nLeft := WCOL()             // левого верхнего угла и закрытие
    WCLOSE()                    // окна
 
    * Другой фрагмент программы
 
    WOPEN(nTop, nLeft, nTop + 10, nLeft + 40)   // Открытие окна с
                                                // сохраненными параметрами
 

See Also: WOPEN() WSELECT() WROW() WMODE()
 

 

 WFCOL()
 Возвращает позицию первого столбца текстовой области окна.


------------------------------------------------------------------------------
 
  Синтаксис
 
    WFCOL([<lRelative>]) --> nValue
 
  Параметры
 
    <lRelative> - необязательный логический параметр, задающий при
    значении .T. возврат абсолютного значения разности между WCOL() и
    WFCOL(), а при значении .F. или по умолчанию возврат позиции первого
    столбца текстовой области окна.
 
  Возвращаемое значение
 
    nValue - номер первого столбца текстовой области окна, или величина
    разности позиций границы окна и первого столбца текстовой области.
 
  Описание
 
    Функция может использоваться для сохранения информации из окна
    в файле. Имеется четыре функции, возвращающие координаты текстовой
    области окна. Возвращаемое ими значение может быть сохранено и
    использовано в программе позже.
 
    Для получения без дополнительных вычислений величины разности между
    позициями соответствующей границы окна и первого столбца текстовой
    области можно вызвать данную функцию со значением .T.  параметра
    <lRelative>. Полученное значение может быть позже передано функции
    WFORMAT() для восстановления прежнего размера текстовой области окна.
 
  Примечания
 
  . Для физического экрана (окна с дескриптором 0) данная функция
    возвращает значение, соответствующее вызову WBOARD().
 
  Примеры
 
  . Каждая функция из семейства WFxxx() оперирует с активным
    окном. Заметим, что вызов WBOX() соответствует вызову
    WFORMAT(1, 1, 1, 1):
 
    CLEAR
    WOPEN(10, 10, 20, 70)
    WBOX()
    ? WFROW(), WFROW(.T.)                               // 11, 1
    ? WFCOL(), WFCOL(.T.)                               // 11, 1
    ? WFLASTROW(), WFLASTROW(.T.)                       // 19, 1
    ? WFLASTCOL(), WFLASTCOL(.T.)                       // 69, 1
 
    INKEY(0)
    WCLOSE()
    RETURN
 

See Also: WBOX() WCOL() WFROW() WFLASTCOL() WFLASTROW() WFORMAT()





 
 

 WFLASTCOL()
  Возвращает позицию последнего столбца текстовой области окна.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WFLASTCOL([<lRelative>]) --> nValue
 
  Параметры
 
    <lRelative> - необязательный логический параметр, задающий при
    значении .T. возврат абсолютного значения разности между WLASTCOL() и
    WFLASTCOL(), а при значении .F. или по умолчанию возврат позиции
    последнего столбца текстовой области окна.
 
  Возвращаемое значение
 
    nValue - номер последнего столбца текстовой области окна, или величина
    разности позиций границы окна и последнего столбца текстовой области.
 
  Описание
 
    Функция может использоваться для сохранения информации из окна
    в файле. Имеется четыре функции, возвращающие координаты текстовой
    области окна. Возвращаемое ими значение может быть сохранено и
    использовано в программе позже.
 
    Для получения без дополнительных вычислений величины разности
    между позициями соответствующей границы окна и последнего столбца
    текстовой области можно вызвать данную функцию со значением .T.
    параметра <lRelative>. Полученное значение может быть позже передано
    функции WFORMAT() для восстановления прежнего размера текстовой
    области окна.
 
  Примечания
 
  . Для физического экрана (окна с дескриптором 0) данная функция
    возвращает значение, соответствующее вызову WBOARD().
 
  Примеры
 
  . Каждая функция из семейства WFxxx() оперирует с активным
    окном. Заметим, что вызов WBOX() соответствует вызову
    WFORMAT(1, 1, 1, 1):
 
    CLEAR
    WOPEN(10, 10, 20, 70)
    WBOX()
    ? WFROW(), WFROW(.T.)                               // 11, 1
    ? WFCOL(), WFCOL(.T.)                               // 11, 1
    ? WFLASTROW(), WFLASTROW(.T.)                       // 19, 1


    ? WFLASTCOL(), WFLASTCOL(.T.)                       // 69, 1
 
    INKEY(0)
    WCLOSE()
    RETURN
 

See Also: WBOX()
WFCOL()
WFLASTROW()
WFORMAT()
WFROW()
WLASTCOL()

 

 

 WFLASTROW()
  Возвращает позицию последней строки текстовой области окна.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WFLASTROW([<lRelative>]) --> nValue
 
  Параметры
 
    <lRelative> - необязательный логический параметр, задающий при
    значении .T. возврат абсолютного значения разности между WLASTROW()
    и WFLASTROW(), а при значении .F. или по умолчанию возврат позиции
    последней строки текстовой области окна.
 
  Возвращаемое значение
 
    nValue - номер последней строки текстовой области окна, или величина
    разности позиций границы окна и последней строки текстовой области.
 
  Описание
 
    Функция может использоваться для сохранения информации из окна в
    файле. Имеется четыре функции, возвращающие координаты текстовой
    области окна. Возвращаемое ими значение может быть сохранено и
    использовано в программе позже.
 
    Для получения без дополнительных вычислений величины разности между
    позициями соответствующей границы окна и последней строки текстовой
    области можно вызвать данную функцию со значением .T.  параметра
    <lRelative>. Полученное значение может быть позже передано функции
    WFORMAT() для восстановления прежнего размера текстовой области окна.
 
  Примечания
 
  . Для физического экрана (окна с дескриптором 0) данная функция
    возвращает значение, соответствующее вызову WBOARD().
 
  Примеры
 
  . Каждая функция из семейства WFxxx() оперирует с активным
    окном. Заметим, что вызов WBOX() соответствует вызову
    WFORMAT(1, 1, 1, 1):
 
    CLEAR
    WOPEN(10, 10, 20, 70)
    WBOX()
    ? WFROW(), WFROW(.T.)                               // 11, 1


    ? WFCOL(), WFCOL(.T.)                               // 11, 1
    ? WFLASTROW(), WFLASTROW(.T.)                       // 19, 1
    ? WFLASTCOL(), WFLASTCOL(.T.)                       // 69, 1
 
    INKEY(0)
    WCLOSE()
    RETURN
 

See Also: WBOX()
WFCOL()
WFLASTCOL()
WFORMAT()
WFROW()
WLASTROW()



 
 

 WFORMAT()
 Задает координаты текстовой области окна.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WFORMAT([<nTopRow>, <nLeftColumn>,
    <nBottomRow>, <nRightColumn>]) --> nWindow
 
  Параметры
 
    <nTopRow>,...,<nRightColumn> - необязательные числовые параметры,
    задающие отступы текстовой области активного окна от первой строки,
    первого столбца, последней строки и последнего столбца соответственно.
    По умолчанию ранее установленные границы отменяются.
 
  Возвращаемое значение
 
    nWindow - номер дескриптора активного окна.
 
  Описание
 
    Функция выделяет область вывода текстовой информации из всей
    действительной площади окна. Она позволяет определить поле между
    текстом и обрамлением окна, куда нельзя осуществлять вывод.
 
    Поле между границами предыдущей и новой текстовой областью
    определяется четырьмя параметрами.
 
  Примечания
 
  . Величина суммы значений параметров <nTopRow> и
    <nBottomRow> не должна превышать высоту окна, а величина суммы
    значений параметров <nLeftColumn> и <nRightColumn> не должна
    превышать его ширину по внутренним границам. При любом размере
    окна его текстовую область можно уменьшить до размера одного
    символа.
 
  . Отрицательные значения параметров увеличивают текстовую
    область, а положительные уменьшают. Вызов данной функции с
    отрицательными значениями параметров, превышающими по абсолютной
    величине размеры физического экрана, расширяет текстовую область до


    размеров окна.
 
  . Функция не оказывает воздействия на физический экран (окно с
    дескриптором 0).
 
  . Поместить текст на обрамление окна (см. функцию WBOX()) можно
    командой @...SAY... с отрицательным значением номера строки вывода
    Например, заголовок окна можно вывести командой:
 
    @ -1, 5 SAY "Помощь при вводе"
 
  Примеры
 
  . Задание текстовой области окна, отстоящей как от верхней, так и
    от нижней границы на одну строку, а также на два столбца как от
    правой, так и от левой границы. В результате текстовая область станет
    меньше на 2 строки и 4 столбца:
 
    WSELECT(nWindow)
    WFORMAT(1, 2, 1, 2)
 
  . Отмена всех предварительно установленных границ для
    обеспечения возможности записи в пределах всего окна:
 
    WFORMAT()
 

See Also: WBOX()
WSELECT()

 

 

 WFROW()
 Возвращает позицию первой строки текстовой области окна.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WFROW([<lRelative>]) --> nValue
 
  Параметры
 
    <lRelative> - необязательный логический параметр, задающий при
    значении .T. возврат абсолютного значения разности между WROW() и
    WFROW(), а при значении .F. или по умолчанию возврат позиции первой
    строки текстовой области окна.
 
  Возвращаемое значение
 
    nValue - номер первой строки текстовой области окна, или величина
    разности позиций границы окна и первой строки текстовой области.
 
  Описание
 
    Функция может использоваться для сохранения информации из окна в
    файле. Имеется четыре функции, возвращающие координаты текстовой
    области окна. Возвращаемое ими значение может быть сохранено и
    использовано в программе позже.
 
    Для получения без дополнительных вычислений величины разности между
    позициями соответствующей границы окна и первой строки текстовой


    области можно вызвать данную функцию со значением .T.  параметра
    <lRelative>. Полученное значение может быть позже передано функции
    WFORMAT() для восстановления прежнего размера текстовой области окна.
 
  Примечания
 
  . Для физического экрана (окна с дескриптором 0) данная функция
    возвращает значение, соответствующее вызову WBOARD().
 
  Примеры
 
  . Каждая функция из семейства WFxxx() оперирует с активным
    окном. Заметим, что вызов WBOX() соответствует вызову
    WFORMAT(1, 1, 1, 1):
 
    CLEAR
    WOPEN(10, 10, 20, 70)
    WBOX()
    ? WFROW(), WFROW(.T.)                               // 11, 1
    ? WFCOL(), WFCOL(.T.)                               // 11, 1
    ? WFLASTROW(), WFLASTROW(.T.)                       // 19, 1
    ? WFLASTCOL(), WFLASTCOL(.T.)                       // 69, 1
 
    INKEY(0)
    WCLOSE()
    RETURN
 

See Also: WBOX()
WFCOL()
WFLASTCOL()
WFORMAT()
WLASTROW()
WROW()



 
 

 WLASTCOL()
 Возвращает позицию последнего столбца активного окна.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WLASTCOL([<lAfterWCENTER>]) --> nColumn
 
  Параметры
 
    <lAfterWCENTER> - необязательный логический параметр, задающий при
    значении .T. возврат позиции последнего столбца активного окна,
    получаемой после вызова функции WCENTER(), а при значении .F. или по
    умолчанию возврат значения текущей позиции последнего столбца.
 
  Возвращаемое значение
 
    nColumn - номер последнего столбца активного окна в координатах
    физического экрана.
 
  Описание
 
    Функция возвращает номер последнего столбца (правой границы) активного
    окна. Возвращаемое значение может превышать номер последнего столбца
    экрана, это означает, что правая граница окна находится вне области
    видимости.
 
    Кроме того, при значении .T.


параметра <lAfterWCENTER> возвращается
    позиция, которую имел бы правый столбец окна после вызова функции
    WCENTER().
 
  Примеры
 
  . Определение перекрытия окном границы экрана при интерактивном
    перемещении:
 
    ? WLASTCOL() > MAXCOL(.T.)  // Если .T., то окно перекрывает
                                // границу экрана
 

See Also: WCOL()

 

 

 WLASTROW()
 Возвращает позицию последней строки активного окна.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WLASTROW([<lAfterWCENTER>]) --> nRow
 
  Параметры
 
    <lAfterWCENTER> - необязательный логический параметр, задающий при
    значении .T. возврат позиции последней строки активного окна,
    получаемой после вызова функции WCENTER(), а при значении .F. или по
    умолчанию возврат значения текущей позиции последней строки.
 
  Возвращаемое значение
 
    nRow - номер последней строки активного окна в координатах
    физического экрана.
 
  Описание
 
    Функция возвращает номер последней строки (нижней границы) окна.
    Возвращаемое значение может превышать номер последней строки экрана,
    это означает, что нижняя граница окна находится вне области видимости.
 
    Кроме того, при значении .T. параметра <lAfterWCENTER> возвращается
    позиция, которую имела бы последняя строка окна после вызова функции
    WCENTER().
 
  Примеры
 
  . Определение перекрытия окном границы экрана при интерактивном
    перемещении:
 
    ? WLASTROW() > MAXROW(.T.)  // Если .T., то окно перекрывает
                                // границу экрана
 

See Also: WROW()

 

 

 WMODE()
 Переключает режим перекрытия окном границ экрана.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WMODE(<lTop>, <lLeft>, <lBottom>, <lRight>) --> nError


 
  Параметры
 
    <lTop> - логический параметр, задающий возможность перекрытия окном
    верхней границы.
 
    <lLeft> - логический параметр, задающий возможность перекрытия окном
    левой границы.
 
    <lBottom> - логический параметр, задающий возможность перекрытия
    окном нижней границы.
 
    <lRight> - логический параметр, задающий возможность перекрытия
    окном правой границы.
 
  Возвращаемое значение
 
    nError - число 0 при успешном выполнении, а иначе (-1).
 
  Описание
 
    Функция позволяет управлять режимом перекрытия границ экрана или
    области, установленной функцией WBOARD(), при перемещении окон
    (с помощью WMOVE() или интерактивно). Действие описываемой функции
    распространяется как на все открытые окна, так и на окна, открываемые
    в дальнейшем.
 
  Примечания
 
  . Функцию можно применять при открытых окнах.
 
  Примеры
 
  . Разрешение при перемещении окон перекрывать только верхнюю и
    нижнюю границы экрана:
 
    WMODE(.T., .F., .T., .F.)
 

See Also: WBOARD()
WMOVE()
WSETMOVE()

 

 

 WMOVE()
 Перемещает окно.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WMOVE(<nRow>, <nColumn>) --> nWindow
 
  Параметры
 
    <nRow> - номер верхней строки окна в координатах физического экрана,
    занимаемой после перемещения.
 
    <nColumn> - номер левого столбца окна в координатах физического
    экрана, занимаемого после перемещения.
 
  Возвращаемое значение
 
    nWindow - номер дескриптора активного (перемещаемого) окна.
 
  Описание
 
    Функция позволяет переместить активное окно на другую позицию внутри
    разрешенной области экрана, определенной функцией WBOARD().
 
  Примечания
 
  . На данную функцию влияет режим, устанавливаемый функцией


    WMODE(), и не влияет режим, устанавливаемый функцией WSETMOVE().
 
  . Параметры <nRow> и <nColumn> могут иметь отрицательные
    значения, что приводит к смещению всего окна за пределы области
    видимости. Такое смещение нельзя осуществить в интерактивном
    режиме.
 
  Примеры
 
  . Перемещение активного окна на 1 строку вверх и на 1 столбец
    влево:
 
    WMOVE(WROW() - 1, WCOL() - 1)
 

See Also: WBOARD()
WMODE()
WOPEN()
WSELECT()

 

 

 WNUM()
 Возвращает наибольший номер дескриптора окна.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WNUM() --> nHighestWindow
 
  Возвращаемое значение
 
    nHighestWindow - номер дескриптора окна.
 
  Описание
 
    Функция возвращает наибольший по значению дескриптор открытого окна,
    что позволяет, например, организовать перебор всех открытых окон (см.
    файл WINSTORE.PRG в поддиректории CTSOURCE\SAMPLES). Заметим, что часть
    дескрипторов может соответствовать закрытым окнам.
 
  Примеры
 
  . Открываются три окна, затем второе окно закрывается. WNUM()
    возвращает наибольший из дескрипторов открытых окон:
 
    nW1 := WOPEN(3, 3, 10, 12)
    nW2 := WOPEN(10, 10, 20, 70)
    nW3 := WOPEN(5, 5, 22, 60)
    WSELECT(nW2)
    WCLOSE()
    ? WNUM()                    // Результатом является nW3
 

See Also: WSELECT()

 

 

 WOPEN()
 Открывает новое окно.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WOPEN(<nTopRow>, <nLeftColumn>,
        <nBottomRow>, <nRightColumn>,
        [<lDelete>]) --> nWindow
 
  Параметры
 
    <nTopRow> - номер верхней строки окна в координатах физического
    экрана.
 
    <nLeftColumn> - номер левого столбца окна в координатах физического


    экрана.
 
    <nBottomRow> - номер нижней строки окна в координатах физического
    экрана.
 
    <nRightColumn> - номер правого столбца окна в координатах физического
    экрана.
 
    Значения координат могут быть отрицательными или превышающими
    физические размеры экрана. Однако, как ширина окна, так и его высота
    урезаются до размеров физического экрана.
 
    <lDelete> - необязательный логический параметр, задающий при значении
    .T. очистку, а при значении .F. или по умолчанию сохранение информации
    в области, занимаемой открываемым окном.
 
  Возвращаемое значение
 
    nWindow - номер дескриптора открытого окна при успешном выполнении,
    а иначе (-1).
 
  Описание
 
    Функция, если возможно, открывает новое окно и возвращает его
    дескриптор. При попытке открыть окно с недопустимыми координатами
    возвращается (-1), а текущее окно остается активным.
 
  Примечания
 
  . Когда окно открыто, в него перенаправляется весь экранный
    вывод, если только он не адресован непосредственно в видеопамять.
    Это относится к выводу из Clipper-, DOS- и других программ. Если длина
    строки превышает ширину окна, то вывод осуществляется с переносом на
    следующую строку.
 
  . Если функцией WSETSHADOW() была задана тень, то при открытии
    окон производится очистка соответствующей области экрана.
 
  Примеры
 
  . Открывается окно с координатами: верхний левый угол - строка 5,
    столбец 10; нижний правый угол - строка 20, столбец 70. Если это первое
    открываемое окно, то возвращаемое значение будет 1:
 
    nWindow := WOPEN(5, 10, 20, 70)
 

See Also: WBOARD()
WCLOSE()
WSELECT()

 

 

 WROW()
 Возвращает позицию первой строки активного окна.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WROW([<lAfterWCENTER>]) --> nRow


 
  Параметры
 
    <lAfterWCENTER> - необязательный логический параметр, задающий при
    значении .T. возврат позиции первой строки активного окна, получаемой
    после вызова функции WCENTER(), а при значении .F. или по умолчанию
    возврат значения текущей позиции первой строки.
 
  Возвращаемое значение
 
    nRow - номер первой строки активного окна в координатах физического
    экрана.
 
  Описание
 
    Функция возвращает текущую позицию первой строки активного окна,
    что позволяет сохранить позицию перемещенного (функцией WMOVE()
    или интерактивно) окна и позднее открыть его на этом месте снова.
 
    Если при перемещении или центрировании окна функции WMOVE() или
    WCENTER() вызывались с недопустимыми значениями параметров, то WROW()
    и WCOL() позволяют определить текущую позицию окна, т.к. как WMOVE(),
    так и WCENTER() автоматически корректирует недопустимые значения
    параметров.
 
    Кроме того, при значении .T. параметра <lAfterWCENTER> возвращается
    позиция, которую имела бы первая строка окна после вызова функции
    WCENTER().
 
  Примечания
 
  . Возвращаемое значение может быть отрицательным. Это
    означает, что первая строка окна находится вне области видимости.
 
  Примеры
 
  . Определение позиции окна и его повторное открытие:
 
    nTop := 10
    nLeft := 15
    WOPEN(nTop, nLeft, nTop + 10, nLeft + 40)
    * Перемещение окна пользователем
 
    nTop := WROW()              // Сохранение текущей позиции
    nLeft := WCOL()             // верхнего левого угла и закрытие
    WCLOSE()                    // окна
 
    * Другой фрагмент программы
 
    WOPEN(nTop, nLeft, nTop + 10, nLeft + 40)   // Открытие окна с
                                                // сохраненными параметрами
 

See Also: WCOL()
WLASTCOL()
WLASTROW()
WMODE()
WOPEN()
WSELECT()

 

 

 WSELECT()


  Активизирует одно из ранее открытых окон.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WSELECT([<nActivateWindow>]) --> nSelectedWindow
 
  Параметры
 
    <nActivateWindow> - номер дескриптора активизируемого окна в диапазоне
    от 0 до 255. По умолчанию смена активного окна не производится.
 
  Возвращаемое значение
 
    nSelectedWindow - номер дескриптора активного окна или (-1) при
    задании дескриптора несуществующего окна.
 
  Описание
 
    Функция позволяет активизировать ранее открытое окно. Номер
    дескриптора окна можно указывать в диапазоне от 0 до 255, при этом
    окно с дескриптором 0 соответствует физическому экрану.
 
  Примечания
 
  . Действие многих оконных функций, например, WBOX(),
    WCENTER(), WFORMAT() всегда относится к активному окну.
 
  . При недопустимом (напр., отрицательном) номере окна функция
    возвращает значение (-1), а активным остается текущее окно.
 
  Примеры
 
  . Активизация окна с номером дескриптора, сохраненным при
    открытии функцией WOPEN() в переменной nWindow:
 
    WSELECT(nWindow)
 

See Also: WOPEN()

 

 

 WSETMOVE()
 Переключает режим разрешения интерактивного перемещения окон.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WSETMOVE([<lNewMoveMode>]) --> lOldMoveMode
 
  Параметры
 
    <lNewMoveMode> - необязательный логический параметр, задающий при
    значении .T. разрешение, а при значении .F. запрет включения режима
    интерактивного перемещения (клавишей <Scroll Lock> или функцией
    KSETSCROLL()). По умолчанию состояние режима не изменяется, а в
    исходном состоянии, предопределенном параметрами CT II, включение
    режима разрешено.
 
  Возвращаемое значение
 
    lOldMoveMode - логическое значение, соответствующее предыдущему


    состоянию режима.
 
  Описание
 
Функция разрешает или запрещает включение пользователем режима
интерактивного перемещения окон.
 
  Примечания
 
. Данная функция не оказывает влияния на работу функции WMOVE(). Ее влияние распространяется только на интерактивное перемещение окон. Функция WMODE() управляет режимом перемещения окон за границы области, установленной функцией WBOARD().
 
  Примеры
 
  . Запрет включения режима интерактивного перемещения окон:
 
    WSETMOVE(.F.)
    WOPEN(5, 5, 15, 15)
 

See Also: WBOARD()
WMODE()
WMOVE()
KSETSCROLL()

 

 

 WSETSHADOW()
 Устанавливает цветовой атрибут тени окна.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WSETSHADOW([<cAttribute|nOFF>]) --> nOldAttribute
 
  Параметры
 
    <cAttribute|nOFF> - необязательный параметр, задающий цветовой атрибут
    тени окна либо в виде символьной строки с обозначением цвета в
    цифровой ("nn/nn") или буквенной ("cc/cc") форме, либо в виде числа
    (-1) для отключения формирования тени. По умолчанию цветовой атрибут
    не изменяется.
 
  Возвращаемое значение
 
    nOldAttribute - числовое значение предыдущего используемого цветового
    атрибута тени или (-1), если формирование тени не производилось.
 
  Описание
 
    Функция позволяет установить цветовой атрибут тени, размещаемой правее
    и ниже окна. Установленный атрибут будет использоваться для всех вновь
    открываемых окон.
 
  Примечания
 
  . При использовании тени область экрана, соответствующая
    открываемому окну, очищается.
 
  . Соотношение правой и нижней частей тени соответствует
    размерам символов шрифта. Например, для 25 строк соотношение
    составляет 2:1, а для 50 строк - 1:1.
 
  Примеры
 
  . Открытие окон (первого - с тенью, а второго - без) на экране


    заполненном символом CHR(176):
 
    SETCLEARB(176)
    CLEAR                       // Заполнение экрана символом CHR(176)
 
    WSETSHADOW("N+")            // Серая тень
    WOPEN(1, 1, 10, 50)
    WBOX()
    WSETSHADOW(-1)              // Отключение тени
    WOPEN(15, 1, 20, 50)
    WBOX()
    ? "Для включения режима интерактивного перемещения"
    ? "окон следует нажать клавишу <Scroll Lock>"
    INKEY(0)
 
    WACLOSE()
 

See Also: NTOCOLOR()



 
 

 WSTEP()
  Устанавливает величину шага интерактивного перемещения окон.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WSTEP(<nVertical>, <nHorizontal>) --> nResult
 
  Параметры
 
    <nVertical> - число строк для одного шага при интерактивном
    перемещении окон.
 
    <nHorizontal> - число столбцов для одного шага при интерактивном
    перемещении окон.
 
  Возвращаемое значение
 
    nResult - число 0 при успешном выполнении, а иначе (-1).
 
  Описание
 
    Функция позволяет установить шаг, на который будет передвинуто
    окно при одном нажатии клавиши управления курсором в режиме
    интерактивного перемещения.
 
    Точное позиционирование
 
    Если величина шага больше чем (1,1), то в режиме интерактивного
    перемещения нельзя поместить окно в любую желаемую позицию.
 
    Однако при нажатии двух противоположных клавиш управления курсором
    сразу одна за другой величина шага перемещения вдоль
    соответствующей оси станет равной 1, что позволяет с этого момента
    точно позиционировать окно.
 
  Примечания
 
  . Исходными значениями параметров шага, предопределенными
    параметрами CT II, являются 2 строки по вертикали и 5 столбцов по
    горизонтали, а максимальными - 6 строк по вертикали и 20 столбцов по
    горизонтали.


При задании величины шага больше максимального значения,
    он устанавливается равным максимальному.
 
  . Данная функция не может применяться при открытых окнах.
 
  Примеры
 
  . При использовании клавиши управления курсором активное окно
    будет перемещаться на 1 строку по вертикали и на 3 столбца по
    горизонтали:
 
    WSTEP(1, 3)
 

See Also: WACLOSE()
WSETMOVE()

 

 

 Введение в CT II-драйвер
------------------------------------------------------------------------------
 CGA40()       Включает цветной или монохромный видеорежим с 40 столбцами
 CGA80()       Включает цветной или монохромный видеорежим с 80 столбцами
 DSETKBIOS()   Переключает режим функционирования клавиатуры
 DSETNOLINE()  Переключает режим перехода на новую строку при выводе на экран
 DSETQFILE()   Переключает режим создания quit-файла
 DSETTYPE()    Возвращает установленный размер буфера клавиатуры
 DSETWINDEB()  В данную версию не включена
 DSETWINDOW()  Переключает режим направления видеовывода
 EGA43()       Включает видеорежим EGA c 43 строками
 FIRSTCOL()    Инсталлирует первый видимый столбец виртуального экрана
 FIRSTROW()    Устанавливает первую видимую строку виртуального экрана
 GETBOXGROW()  Возвращает время задержки при выводе обрамлений
 GETCURSOR()*  Возвращает характеристики формы курсора
 GETKXLAT()    Возвращает код переопределения клавиши
 GETKXTAB()    Возвращает таблицу переопределений кодов клавиш
 GETLINES()    Возвращает количество строк, выводимых на экран до паузы
 GETMODE()     Возвращает имя функции, устанавливающей текущий видеорежим
 GETPAGE()     Возвращает номер активной видеостраницы
 GETPBIOS()    Возвращает код, задающий вывод на печать через DOS или BIOS
 GETPXLAT()    Возвращает текущую таблицу переопределений кодов принтера
 GETSCRMODE()  Возвращает код текущего видеорежима
 GETTAB()      Возвращает шаг табуляции, установленный для видеовывода
 INKEYTRAP()   Имитирует функцию INKEY() с поддержкой клавиш прерывания


 INPUTMODE()   Возвращает код последнего или текущего режима ввода
 KEYREAD()     Возвращает уже обработанное содержимое буфера клавиатуры
 KEYSEND()     Имитирует Clipper-команду KEYBOARD
 MAXCOL()      Расширяет возможности Clipper-функции MAXCOL()
 MAXPAGE()     Возвращает номер последней доступной видеостраницы
 MAXROW()      Расширяет возможности Clipper-функции MAXROW()
 MONOCHROME()  Включает монохромный режим видеоадаптера
 PAGECOPY()    Копирует содержимое одной видеостраницы в другую
 PRINTERROR()  Возвращает код ошибки, возникшей при выводе на принтер
 SETBELL()     Устанавливает характеристики генерируемого звукового сигнала
 SETBOXGROW()  Устанавливает время задержки при выводе обрамлений
 SETCURSOR()   Устанавливает форму курсора
 SETKXLAT()    Переопределяет код задаваемой клавиши
 SETKXTAB()    Инсталлирует таблицу переопределений кодов клавиш
 SETLINES()    Устанавливает количество строк, выводимых на экран до паузы
 SETMAXCOL()   Устанавливает количество столбцов виртуального экрана
 SETMAXROW()   Устанавливает количество строк виртуального экрана
 SETPAGE()     Переключает вывод на новую видеостраницу
 SETPBIOS()    Перенаправляет вывод на принтер через BIOS с таймированием
 SETPXLAT()    Инсталлирует таблицу переопределений при выводе на принтер
 SETQNAME()    Задает имя и путь доступа для quit-файла
 SETSCRMODE()  Устанавливает видеорежим
 SETTAB()      Устанавливает шаг табуляции для видеовывода Clipper
 TRAPANYKEY()  Задает имя процедуры, вызываемой при нажатии любой клавиши
 TPAPINPUT()   Устанавливает процедуру отслеживания ввода в буфер клавиатуры
 TRAPSHIFT()   Устанавливает процедуру отслеживания нажатия упр. клавиш
 VGA28()       Включает видеорежим с 28 строками
 VGA50()       Включает видеорежим VGA с 50 строками
 
 

 

  Введение
 
------------------------------------------------------------------------------
 
  CT II-драйвер
 
    CT II-драйвер (объектный файл с именем CT2US50.OBJ) кроме средств


    поддержки окон содержит ряд независимых функций, которым и посвящена
    данная глава. В нее включены функции, непосредственно расширяющие
    возможности ввода с клавиатуры Clipper-программ, выводу на экран и
    принтер, а также к другим внутренним средствам Clipper. Для их
    использования CT II-драйвер должен быть прикомпонован к прикладной
    программе.
 
    Файл CT2US50.OBJ сконструирован таким образом, что основная часть
    программы, необходимая для функционирования, вынесена из него и в виде
    отдельных модулей помещена в библиотеку CT250.LIB. Таким образом, в
    виду прикомпоновки лишь действительно используемых библиотечных
    функций, использование CT II-драйвера незначительно увеличивает
    избыточность собираемой программы.
 
  Использование CT2US50.OBJ
 
    Для обеспечения возможности замещения во время компоновки стандартного
    драйвера, выбираемого из библиотеки CLIPPER.LIB, CT II-драйвер
    поставляется в виде объектного файла (CT2US50.OBJ). Для реального
    замещения при компоновке он должен быть включен в список объектных
    файлов.
 
  Видеорежимы
 
    Некоторые функции, относящиеся к видеоадаптерам, описываются в этой
    главе, а не в главе "Видеофункции". Это связано с тем, что их
    выполнение сопровождается изменениями контролируемых Clipper
    видеостраниц или видеорежимов.
 
  Изменения видеорежимов
 
    Изменения видеорежима сопровождаются сбросом некоторых переключателей
    режимов в исходное состояние:
 
    --------------------------------------------------------------------
    Наименование        Состояние, вызов функции
    --------------------------------------------------------------------
    Позиция курсора     Строка 0, столбец 0
    Видеостраница 0     SETPAGE()
    Состояние шрифтов   SETFONT(), FONTLOAD(), FONTSELECT()
    Состояние палитр    EGAPALETTE(), VGAPALETTE()
    Обрамление экрана   SET COLOR TO..
    --------------------------------------------------------------------


 
  Видеовывод внешних программ
 
    Функция DSETWINDOW() управляет весьма важным CT II-переключателем,
    влияющим на выполнение многих функций.  В соответствии с состоянием
    этого переключателя видеовывод внешних программ или модулей
    перенаправляется в активное окно или поступает на физический экран.
    При этом все функции, входящие в CT II, рассматриваются как внешние.
 
    В исходном состоянии, предопределенном параметрами CT II,
    переключатель включен, что означает перенаправление вывода.
    В это же состояние он приводится вызовом DSETWINDOW(.Т.).
 
    Для обеспечения перенаправления CT II-драйвер изменяет вектор
    прерывания 10h.  В некоторых случаях внешние программы не допускают
    изменения векторов прерывания, поэтому перед их запуском по команде
    RUN необходим вызов DSETWINDOW(.F.).
 
    Некоторые функции, например, ISANSI() или NUMCOL(), при включенном
    режиме перенаправления вывода возвращают неверные результаты.
    Обратите внимание на соответствующие примечания в описаниях функций.
 
  Сохранение системных установок
 
    Когда программа завершается под контролем Clipper (нормальное
    завершение программы, нажатие комбинации клавиш <Alt><C> или
    завершение после сообщения об ошибке, формируемого системой
    поддержки времени выполнения Clipper), производится восстановление
    формы курсора, цветовых атрибутов и векторов прерываний с 0 до 127.
    Однако при завершении программы другим способом (например, когда
    внешний модуль содержит ошибку), измененные системные установки не
    могут быть восстановлены, что рано или поздно приводит к сбою в работе
    системы. В таких случаях следует как можно скорее произвести
    перезагрузку.
 
  Quit-файл
 
    CT II-драйвером может быть сформирован quit-файл, содержащий
    информацию о корректности завершения текущей программы. Кроме того,
    в этот файл записываются коды клавиш, нажимаемых пользователем в


    процессе ввода информации с клавиатуры.
 
    По умолчанию этот файл имеет то же имя, что и Clipper-программа, но с
    расширением не .EXE, а .Q, однако может быть задано любое другое имя.
    Более подробная информация находится в описаниях функций DSETQFILE(),
    DSETQNAME() и KEYREAD().
 

 

 CGA40()
 Включает цветной или монохромный видеорежим с 40 столбцами.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CGA40([<lMonochrome>]) --> lSwitch
 
  Параметры
 
    <lMonochrome> - необязательный логический параметр, задающий при
    значении .Т. монохромный режим CGA с 40 столбцами, а при значении .F.
    или по умолчанию цветной режим CGA c 40 столбцами.
 
  Возвращаемое значение
 
    lSwitch - логическое значение .T., если используемый видеоадаптер
    допускает переключение, а иначе .F..
 
  Описание
 
    Функция может использоваться с любым видеоадаптером, эмулирующим режим
    CGA. В этом случае возможно переключение на цветной или монохромный
    режим CGA с 40 столбцами. Однако и при установке монохромного режима
    функция ISCOLOR() будет возвращать значение .T., так как этот режим
    формируется "сложением цветов", а не переключением на монохромный
    режим для Hercules или текстового адаптеров.
 
  Примечания
 
  . Внимание! Данная функция не может применяться при открытых
    окнах.
 
  . Устанавливаемые режимы можно комбинировать с режимами,
    устанавливаемыми другими функциями, например, EGA43().
 
  . Выполнение функции со значением .Т. параметра <lMonochrome>
    соответствует установке BIOS-режима 0, а выполнение со значением .F.
    или при опущенном значении соответствует установке BIOS-режима 1.
 
  Примеры
 
  . Включение цветного режима CGA с 40 столбцами:
 
    ? CGA40()      // .T. в случае успеха
 
  . Включение монохромного режима CGA с 40 столбцами:


 
    ? CGA40(.T.)   // .T. в случае успеха
 

See Also: CGA80()
EGA43()
GETMODE()
MONOCHROME()
VGA50()

 

 

 CGA80()
  Включает цветной или монохромный видеорежим с 80 столбцами.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CGA80([<lMonochrome>]) --> lSwitch
 
  Параметры
 
    <lMonochrome> - необязательный логический параметр, задающий при
    значении .Т. монохромный режим CGA с 80 столбцами, а при значении .F.
    или по умолчанию цветной режим CGA c 80 столбцами.
 
  Возвращаемое значение
 
    lSwitch - логическое значение .T., если используемый видеоадаптер
    допускает переключение, а иначе .F..
 
  Описание
 
    Функция может использоваться с любым видеоадаптером, эмулирующим режим
    CGA. В этом случае возможно переключение на цветной или монохромный
    режим CGA с 80 столбцами. Однако и при установке монохромного режима
    функция ISCOLOR() будет возвращать значение .T., так как этот режим
    формируется "сложением цветов", а не переключением на монохромный
    режим для Hercules или текстового адаптеров.
 
  Примечания
 
  . Внимание! Данная функция не может применяться при открытых
    окнах.
 
  . Устанавливаемые режимы можно комбинировать с режимами,
    устанавливаемыми другими функциями, например, EGA43().
 
  . Выполнение функции со значением .Т. параметра <lMonochrome>
    соответствует установке BIOS-режима 2, а выполнение со значением .F.
    или при опущенном значении соответствует установке BIOS-режима 3.
 
  Примеры
 
  . Включение цветного режима CGA с 80 столбцами:
 
    ? CGA80()      // .T. в случае успеха
 
  . Включение монохромного режима CGA с 80 столбцами:
 
    ? CGA80(.T.)  // .T. в случае успеха
 

See Also: CGA40()
EGA43()
GETMODE()
MONOCHROME()
VGA50()

 

 



 DSETKBIOS()
 Переключает режим функционирования клавиатуры.
------------------------------------------------------------------------------
 
  Синтаксис
 
    DSETKBIOS([<lNewKeyboardMode>]) --> lOldKeyboardMode
 
  Параметры
 
    <lNewKeyboardMode> - необязательный логический параметр, задающий при
    значении .T. включение, а при значении .F. выключение расширенного
    режима клавиатуры. По умолчанию режим не переключается.
 
  Возвращаемое значение
 
    lOldKeyboardMode - логическое значение, отражающее предыдущее
    состояние режима.
 
  Описание
 
    Начиная с версии Clipper 5.0 ввод с клавиатуры производится через BIOS,
    а не через DOS. Поэтому в данной версии, в отличие от предыдущих,
    расширенный режим клавиатуры исходно включен. При выключении
    расширенного режима клавиатуры вызовом DSETKBIOS(.F.) ввод
    осуществляется через DOS, что можно использовать при запуске
    программы с назначением ввода информации из файла, а не с консоли.
 
  Примечания
 
  . Символьные константы для кодов клавиш определены в файле описаний
    NT2SCAN.CH и приведены в книге "Введение в Clipper Tools II/5.0,
    Приложение Б".
 
  Примеры
 
  . Запуск из DOS с переназначением ввода:
 
    C:\>TEST < KEYS.DAT
 
  . Ввод из файла KEYS.DAT при выполнении программы TEST:
 
    DSETKBIOS(.F.)                      // Включение режима ввода
    ACCEPT "" TO cInput                 // через DOS.
 

See Also: KBDTYPE()
KEYREAD()
KEYSEND()
SETKXLAT()
SCANKEY()

 

 

 DSETNOLINE()
 Переключает режим перехода на новую строку при выводе на экран.
------------------------------------------------------------------------------
 
  Синтаксис
 
    DSETNOLINE([<lNewLFMode>]) --> lOldLFMode
 
  Параметры
 
    <lNewLFMode> - необязательный логический параметр, задающий при


    значении .T. режим игнорирования, а при значении .F. режим выполнения
    перевода строки при выводе на экран. По умолчанию режим не
    изменяется.
 
  Возвращаемое значение
 
    lOldLFMode - логическое значение, соответствующее предыдущему
    состоянию режима.
 
  Описание
 
    Функцию можно использовать в сочетании с командой LIST для заполнения
    пустой строки следующей строкой (см. Примеры). Кроме того, можно
    подавить вывод пустой строки, инициируемый Clipper перед началом
    выполнения команды LIST, что позволяет начинать вывод с нулевой
    строки.
 
  Примечания
 
  . В исходном состоянии осуществляется перевод строки.
 
  Примеры
 
  . Подавление перевода строки при пустом содержимом поля Art_nr
    текущей записи:
 
    LIST Art_nr, Art_bez, DSETNOLINE(EMPTY(Art_nr))
 

 

 DSETQFILE()
 Переключает режим создания quit-файла.
------------------------------------------------------------------------------
 
  Синтаксис
 
    DSETQFILE([<lNewQuitMode>]) --> lOldQuitMode
 
  Параметры
 
    <lNewQuitMode> - необязательный логический параметр, задающий при
    значении .T. включение, а при .F. выключение режима автоматического
    создания quit-файла. По умолчанию режим не изменяется.
 
  Возвращаемое значение
 
    lOldQuitMode - логическое значение, соответствующее предыдущему
    состоянию режима.
 
  Описание
 
    Функция переключает режим создания quit-файла. Этот файл может
    использоваться для того, чтобы определить нормально или нет (напр.,
    перезагрузкой по нажатию комбинации клавиш <Ctrl><Alt><Del>)
    завершилось выполнение прикладной программы. При завершении
    выполнения программы содержимое буфера клавиатуры записывается в
    файл. Это позволяет определить, какая клавиша была нажата
    пользователем, что можно использовать при трассировке ошибок и


    реконструкции ситуаций.
 
    Размер quit- файла соответствует размеру буфера клавиатуры. Для
    сохранения более 16 символов (размер буфера по умолчанию) необходимо
    увеличить размер буфера клавиатуры командой SET TYPEAHEAD
    (максимальный размер буфера 32768 кодов клавиш).
 
    Если с помощью функции SETQNAME() имя quit-файла не задано явно, то
    по умолчанию оно будет соответствовать имени EXE-файла с
    расширением .Q.
 
  Примечания
 
  . В исходном состоянии режим создания quit-файла выключен.
 
  . Данные из буфера клавиатуры помещаются в файл в формате
    значения, возвращаемого функцией KEYREAD() (см. файл описаний
    NT2SCAN.CH и "Введение в Clipper Tools II/5.0": Приложение Б).
 
  . В quit-файл записываются только коды клавиш, уже обработанные
    программой.
 
  . Ранее существовавший quit-файл с тем же именем автоматически
    перезаписывается.
 
  Примеры
 
  . Включение режима формирования quit-файла со стандартным
    именем при завершении программы:
 
    DSETQFILE(.T.)                      // quit-файл будет создан
 
  . Задание имени quit-файла:
 
    SETQNAME("C:\LOGS\PROTO.LOG")       // quit-файл будет создан
    DSETQFILE(.T.)                      // с нестандартным именем
 

See Also: KEYREAD()
SETQNAME()

 

 

 DSETTYPE()
 Возвращает установленный размер буфера клавиатуры.
------------------------------------------------------------------------------
 
  Синтаксис
 
    DSETTYPE() --> nBufferSize
 
  Возвращаемое значение
 
    nBufferSize - количество символов, помещаемых в Clipper-буфер
    клавиатуры.
 
  Описание
 
    Функция возвращает размер буфера клавиатуры, установленный
    Clipper-командой SET TYPEAHEAD. Это значение можно использовать для
    определения количества символов, которое можно поместить в буфер
    функцией KEYSEND().


 
  Примечания
 
  . Память под буфер клавиатуры выделяется из внутренней памяти
    Clipper и не зависит от величины системного буфера. Исходный размер
    Clipper-буфера соответствует размеру системного буфера и составляет
    16 символов.
 
  . Для каждого символа, обрабатываемого Clipper-программой, в
    буфере клавиатуры выделяется по 2 байта. Данная функция возвращает
    количество символов, обрабатываемых Clipper-программой, а не число
    занимаемых байтов. Поэтому возвращаемому значению 16 символов
    соответствует размер буфера 32 байта.
 
  Примеры
 
  . Запрос и увеличение при необходимости размера буфера
    клавиатуры:
 
    nSize := DSETTYPE()
 
    IF nSize < 256
        SET TYPEAHEAD TO 256
    ENDIF
 

See Also: KEYREAD()
KEYSEND()

 

 

 DSETWINDEB()
    В связи с изменением отладчика в Clipper 5.0 данная функция не
    включена в Clipper Tools II/5.0.
 

 

 DSETWINDOW()
 Переключает режим направления видеовывода.
------------------------------------------------------------------------------
 
  Синтаксис
 
    DSETWINDOW([<lNewDisplayMode>]) --> lOldDisplayMode
 
  Параметры
 
    <lNewDisplayMode> - необязательный логический параметр, при значении
    .T. включающий, а при .F. выключающий режим направления в активное
    окно видеовывода внешних программ или функций, написанных на
    других языках программирования. По умолчанию режим не изменяется.
 
  Возвращаемое значение
 
    lOldDisplayMode - логическое значение, соответствующее предыдущему
    состоянию режима.
 
  Описание
 
    Функция позволяет установить, будет ли направляться в активное окно
    видеовывод только Clipper-программ или же всех внешних модулей и
    программ, включая DOS.
 
  Примечания
 
  . В исходном состоянии режим перенаправления видеовывода
    включен, т.е. весь программный вывод, не адресуемый непосредственно


    в экранную память, направляется в текущее активное окно.
 
  . Видеовывод Clipper всегда направляется в активное окно.
    DSETWINDOW() воздействует только на видеовывод подпрограмм,
    написанных на Ассемблере или C, а также внешних программ,
    запускаемых командой RUN. В данном случае CT II-функции
    рассматриваются как внешние. При вызове из программ, использующих
    оконные функции CT II, внешних программ и утилит следует вызовом
    DSETWINDOW(.F.) временно выключать режим перенаправления вывода в
    активное окно.
 
  . Если направление вывода в окно включено, то изменение
    позиции курсора во внешнем модуле или программе будет влиять на
    позицию курсора в Clipper. Во избежание этого следует вызовом
    DSETWINDOW(.F.) выключить перенаправление. Если после этого
    необходимо передать позицию курсора в Clipper, то следует вызвать
    функцию SETRC() без параметров.
 
  . Внимание! Перед запуском внешних программ Clipper-командой
    RUN, следует вызовом DSETWINDOW(.F.) выключать перенаправление
    вывода, иначе некоторые программы будут выполняться неправильно.
 
  . Некоторые CT II-функции игнорируют режим, устанавливаемый
    DSETWINDOW(), т.к. работают непосредственно с видеопамятью.
 
    В CT II имеется переменная, которую можно использовать в
    программах на языках Ассемблер и Си для воздействия на
    переключатель, управляемый DSETWINDOW(). Адресуется она
    следующим образом:
 
    EXTR   _WINDOW:WORD
 
    MOV   _WINDOW, 0    ; Оконные функции отключены, остальные включены!
 
  . Если режим перенаправления включен, то прерывание 16 (10h,
    видео) и функция 19 (13h, вывод строки), доступные обычно только для
    PC AT становятся доступны и для PC XT.
 
  Примеры
 
  . Выключение направления вывода внешних программ в окно:
 
    DSETWINDOW(.F.)
 
  . Проверка установки драйвера ANSI.SYS:
 
    lVar := DSETWINDOW(.F.)
    ? ISANSI()


    DSETWINDOW(lVar)            // Восстановление предыдущего состояния
 

See Also: FILESCREEN()
SCREENFILE()

 

 

 EGA43()
 Включает видеорежим EGA c 43 строками.
------------------------------------------------------------------------------
 
  Синтаксис
 
    EGA43() --> lSwitched
 
  Возвращаемое значение
 
    lSwitched - логическое значение .T., если графический видеоадаптер
    успешно переключен на режим с 43 строками, а иначе .F..
 
  Описание
 
    Функцию можно использовать с адаптерами как EGA, так и VGA.
    При установке режима с 43 строками автоматически увеличивается
    максимальное количество позиций экрана видеовывода Clipper, что
    делает необязательным вызов функций SETMAXROW() и SETMAXCOL().
 
  Примечания
 
  . Внимание! Данная функция не может применяться при открытых
    окнах.
 
  Примеры
 
  . Включение режима с 43 строками. Доступны строки от 0 до 42:
 
    IF ISEGA()
        EGA43()
    ENDIF
 
    @ 42, 10 SAY "Clipper"              // Последняя строка
    WAIT
    CGA80()                             // Возврат к режиму с 25 строками
 

See Also: CGA40()
CGA80()
GETMODE()
MONOCHROME()
SETSCRMODE()
VGA50()

 

 

 FIRSTCOL()
 Инсталлирует первый видимый столбец виртуального экрана.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FIRSTCOL([<nFirstNewColumn>]) --> nFirstOldColumn
 
  Параметры
 
    <nFirstNewColumn> - необязательный параметр, задающий номер
    крайнего слева видимого столбца виртуального экрана. По умолчанию
    номер не изменяется.
 
  Возвращаемое значение
 
    nFirstOldColumn - номер ранее установленного крайнего слева видимого
    столбца.
 
  Описание
 
    Функция совместно с SETMAXROW() и SETMAXCOL() играет важную роль
    при установке размеров виртуального экрана.


В качестве первого
    видимого на физическом экране может быть выбран любой столбец
    виртуального экрана. Таким образом, видимую часть виртуального
    экрана можно перемещать в желаемом направлении.
 
  Примечания
 
  . Значения, выходящие за допустимые пределы, автоматически
    корректируются до максимально или минимально допустимых (см.
    Примеры).
 
  Примеры
 
  . На виртуальном экране размером 100 строк на 120 столбцов номер
    текущего столбца выводится в трех местах каждой строки. Видимая часть
    виртуального экрана может передвигаться в любом направлении при
    нажатии <PgUp>, <PgDn> и клавиш управления курсором:
 
    SETMAXROW( 99)         // Виртуальный экран размером
    SETMAXCOL(119)         // 100 строк на 120 столбцов
    CLEAR
 
    FOR nCount =0 TO MAXROW()      // Заполнение экрана
       @ nCount, 0 SAY "Строка" + NTOC(nCount, 10, 4)
       @ nCount, MAXCOL() / 2 - 5 SAY "Строка" + NTOC(nCount, 10, 4)
       @ nCount, MAXCOL() - 10 SAY "Строка" + NTOC(nCount, 10, 4)
    NEXT nCount
    @ 99, 00 SAY CENTER("Это последняя строка")
    nKeyVal := 0
 
    DO WHILE nKeyVal <>27
        nKeyVal := INKEY(0)
        DO CASE
        CASE nKeyVal = 5                      // K_UP
                FIRSTROW(FIRSTROW() - 1)
        CASE nKeyVal = 24                     // K_DOWN
                FIRSTROW(FIRSTROW() + 1)
        CASE nKeyVal =4                       // K_RIGHT
                FIRSTCOL(FIRSTCOL() + 1)
        CASE nKeyVal =19                      // K_LEFT
                FIRSTCOL(FIRSTCOL() - 1)
        CASE nKeyVal =18                      // K_PGUP
                FIRSTROW(FIRSTROW() - 10)
        CASE nKeyVal = 3                      // K_PGDN
                FIRSTROW(FIRSTROW() + 10)
        ENDCASE
    ENDDO
 
    FIRSTROW(0)                               // Восстановление исходного
    FIRSTCOL(0)                               // состояния


    SETMAXCOL(79)
    SETMAXROW(24)
    CLEAR
 

See Also: FIRSTROW()
MAXCOL()
SETMAXCOL()

 

 

 FIRSTROW()
  Устанавливает первую видимую строку виртуального экрана.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FIRSTROW(<nFirstNewLine>) --> nFirstOldLine
 
  Параметры
 
    <nFirstNewLine> - необязательный параметр, задающий номер первой
    сверху видимой строки виртуального экрана. По умолчанию значение не
    изменяется.
 
  Возвращаемое значение
 
    nFirstOldLine - номер ранее установленной первой видимой строки.
 
  Описание
 
    Функция совместно с SETMAXROW() и SETMAXCOL() играет важную роль
    при установке размеров виртуального экрана. В качестве первой сверху
    видимой на физическом экране может быть выбрана любая строка
    виртуального экрана. Таким образом, видимую часть виртуального
    экрана можно перемещать в желаемом направлении.
 
  Примечания
 
  . Значения, выходящие за допустимые пределы, автоматически
    корректируются до максимально или минимально допустимых (см.
    Примеры).
 
  Примеры
 
  . На виртуальном экране размером 100 строк на 120 столбцов номер
    текущего столбца выводится в трех местах каждой строки. Видимая часть
    виртуального экрана может передвигаться в любом направлении при
    нажатии <PgUp>, <PgDn> и клавиш управления курсором:
 
    SETMAXROW( 99)         // Виртуальный экран размером
    SETMAXCOL(119)         // 100 строк на 120 столбцов
    CLEAR
 
    FOR nCount =0 TO MAXROW()      // Заполнение экрана
       @ nCount, 0 SAY "Строка" + NTOC(nCount, 10, 4)
       @ nCount, MAXCOL() / 2 - 5 SAY "Строка" + NTOC(nCount, 10, 4)
       @ nCount, MAXCOL() - 10 SAY "Строка" + NTOC(nCount, 10, 4)
    NEXT nCount
    @ 99, 00 SAY CENTER("Это последняя строка")


    nKeyVal := 0
 
    DO WHILE nKeyVal <>27
        nKeyVal := INKEY(0)
        DO CASE
        CASE nKeyVal = 5                        // K_UP
                FIRSTROW(FIRSTROW() - 1)
        CASE nKeyVal = 24                       // K_DOWN
                FIRSTROW(FIRSTROW() + 1)
        CASE nKeyVal =4                         // K_RIGHT
                FIRSTCOL(FIRSTCOL() + 1)
        CASE nKeyVal =19                        // K_LEFT
                FIRSTCOL(FIRSTCOL() - 1)
        CASE nKeyVal =18                        // K_PGUP
                FIRSTROW(FIRSTROW() - 10)
        CASE nKeyVal = 3                        // K_PGDN
                FIRSTROW(FIRSTROW() + 10)
        ENDCASE
    ENDDO
 
    FIRSTROW(0)                                 // Восстановление исходного
    FIRSTCOL(0)                                 // состояния
    SETMAXCOL(79)
    SETMAXROW(24)
    CLEAR
 

See Also: FIRSTCOL()
MAXROW()
SETMAXROW()

 

 

 GETBOXGROW()
  Возвращает время задержки при выводе "разрастающихся" обрамлений.
------------------------------------------------------------------------------
 
  Синтаксис
 
    GETBOXGROW() --> nTimeDelay
 
  Возвращаемое значение
 
    nTimeDelay - число миллисекунд задержки, устанавливаемое функцией
    SETBOXGROW().
 
  Описание
 
    Функция возвращает время задержки между шагами процесса вывода
    "разрастающихся" обрамлений на экран дисплея.
 
  Примеры
 
  . Вывод "разрастающегося" обрамления с задержкой на каждом
    шаге 10 мсек:
 
    SETBOXGROW(10)
    WOPEN(2, 2, 23, 78)         // Установка только координат рамки
    WBOX()                      // Генерация рамки с задержкой
    ? GETBOXGROW()              // Результат: 10
 

See Also: SETBOXGROW()

 

 

 GETCURSOR()*
 Возвращает характеристики формы курсора.
------------------------------------------------------------------------------


 
  Синтаксис
 
    GETCURSOR([<lMode>]) --> nCursorForm
 
  . Функция сохранена только для совместимости с предыдущими версиями
    и ее использование не рекомендуется во вновь разрабатываемых
    прикладных программах. Для этих целей рекомендуется использовать
    Clipper-функцию SETCURSOR().
 
  Параметры
 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. возврат характеристик формы курсора режима вставки, а по
    умолчанию и при значении .F. режима замены.
 
  Возвращаемое значение
 
    nCursorForm - числовое значение, содержащее характеристики формы
    курсора.
 
  Описание
 
    Функция позволяет сохранить текущую форму курсора при изменении ее,
    например, в функции пользователя, задаваемой предложением VALID
    Clipper-команды GET. Последующее восстановление перед возвратом к
    редактированию GET-объекта можно осуществить с помощью функции
    SETCURSOR().
 
    CT II хранит две формы курсора: одну для режима замены, а другую для
    режима вставки. Если параметр <lMode> имеет значение .F. или опущен,
    то возвращаемое значение относится к форме курсора режима замены.
    При значении параметра .T. возвращаемое значение относится к форме
    курсора режима вставки.
 
    Изображение курсора на экране формируется из пиксельных строк.
    Форма и высота курсора определяются двумя числами,
    соответствующими первой и последней строкам изображения курсора.
    Возвращаемое GETCURSOR() значение вычисляется по формуле:
 
    <начальная строка> * 256 + <последняя строка>
 
    Для выделения номеров начальной и конечной строк из возвращаемого
    значения можно использовать CT II-функции NUMHIGH() и NUMLOW().
 
  Примечания
 
  . Слово "строка" используется здесь не в значении строки экрана
    (выводимой), а в значении пиксельной строки формирования изображения


    символов на экране.
 
  . Действие функции не зависит от режима, установленного
    Clipper-командой SET CURSOR.
 
  Примеры
 
  . Выделение номеров начальной и конечной строк курсора:
 
    nCursor := GETCURSOR()
    ? NUMHIGH(nCursor)          // Начальная строка курсора
    ? NUMLOW(nCursor)           // Конечная строка курсора
 

See Also: NUMHIGH()
NUMLOW()
SETCURSOR()

 

 

 GETKXLAT()
 Возвращает код переопределения клавиши.
------------------------------------------------------------------------------
 
  Синтаксис
 
    GETKXLAT(<cKeyValue|nKeyValue>) --> nKeyStatus
 
  Параметры
 
    <cKeyValue|nKeyValue> - параметр, задающий в символьной форме (см.
    файл описаний NT2SCAN.CH) или в виде числового значения ASCII-кода
    исходный код клавиши, проверяемой на переопределение или
    блокировку.
 
  Возвращаемое значение
 
    nKeyStatus - числовой код, соответствующий статусу заданной клавиши и
    со следующим значением:
 
    --------------------------------------------------------------------
       Код              Значение
    --------------------------------------------------------------------
        0               Клавиша не переопределена
       -1               Клавиша заблокирована
    Другое значение     Код клавиши после переопределения
    --------------------------------------------------------------------
 
 
    Возвращаемое значение может быть преобразовано в форму,
    используемую в файле описаний NT2SCAN.CH с помощью выражения:
    CHR(NUMLOW(<nKeyStatus>)) + CHR(NUMHIGH(<nKeyStatus>))
 
  Описание
 
    Функция позволяет проверить, была ли указанная клавиша
    переопределена или заблокирована функцией SETKXLAT(). Параметр
    <cKeyValue|nKeyValue> должен содержать исходный код клавиши.
    Информация по используемой кодировке приведена в описании функции


    SETKXLAT().
 
  Примечания
 
  . Символьные константы для кодов клавиш определены в
    поставляемом в составе CT II файле описаний NT2SCAN.CH.
 
  . Для числовой формы задания параметра <cKeyValue|nKeyValue>
    можно использовать символьные константы, определенные в
    поставляемом составе с Clipper 5.0 файле описаний INKEY.CH.
 
  Примеры
 
  . Определение блокировки или переопределения клавиши <А>:
 
    nVar := GETKXLAT(KS_A)
 
    IF nVar<>0
        * Восстановление исходного состояния
 
        SETKXLAT(KS_A)                  // При нажатии клавиши <А> будет
                                        // формироваться код символа "A"
    ENDIF
 

See Also: GETKXTAB()
SETKXLAT()
SETKXTAB()

 

 

 GETKXTAB()
 Возвращает таблицу переопределений кодов клавиш.
------------------------------------------------------------------------------
 
  Синтаксис
 
    GETKXTAB() --> cTable
 
  Возвращаемое значение
 
    cTable - символьная строка, содержащая все переопределения кодов
    клавиши.
 
  Описание
 
    Функция, в отличие от GETKXLAT(), возвращает таблицу переопределений
    кодов клавиш в виде строки, которая может быть сохранена в переменной.
    Таблица переопределений кодов клавиш впоследствии может быть
    восстановлена функцией SETKXTAB().
 
    Размер таблицы переопределений кодов клавиш может достигать
    максимального объема символьной строки. Доступное количество
    переопределений определяется по формуле:
 
    (MEMORY(1) * 1024) / 4
 
    Память под таблицу выделяется динамически. Переопределение клавиш
    задается функциями SETKXLAT() или SETKXTAB().
 
  Примеры
 
  . Сохранение и восстановление таблицы переопределений клавиш:
 
    cKXTab := GETKXTAB()
 
    DO KEYCHANGE                // Изменение таблицы переопределений
 


    SETKXTAB(cKXTab)
 

See Also: GETKXLAT()
SETKXLAT()
SETKXTAB()

 

 

 GETLINES()
  Возвращает количество строк, выводимых на экран до паузы.
------------------------------------------------------------------------------
 
  Синтаксис
 
    GETLINES() --> nLineNumber
 
  Возвращаемое значение
 
    nLineNumber - числовое значение, установленное функцией SETLINES().
 
  Описание
 
    Функция возвращает количество строк, выводимых по Clipper-команде
    LIST до паузы.
 
  Примеры
 
  . Установка значения:
 
    SETLINES(20)
 
    LIST ...
 
  . ...и его отображение:
 
    ? GETLINES()                // Результат: 20
 

See Also: SETLINES()

 

 

 GETMODE()
 Возвращает имя функции, устанавливающей текущий видеорежим.
------------------------------------------------------------------------------
 
  Синтаксис
 
    GETMODE() --> cFunctionName
 
  Возвращаемое значение
 
    cFunctionName - символьная строка.
 
  Описание
 
    Функция вместо трудных для запоминания числовых кодов возвращает
    символьную строку, содержащую название текущего видеорежима.
    Это название соответствует имени CT II-функции, используемой для
    переключения на данный режим. Таким образом, возвращаемое
    значение можно присвоить переменной и в последующем посредством
    макрооперации вызвать требуемую функцию для восстановления
    видеорежима.
 
  Примечания
 
  . Внимание! Все функции, имена которых могут быть возвращены
    данной функцией, должны объявляться в программе как внешние (для
    обеспечения возможности их вызова, что производится с помощью
    Clipper-оператора EXTERNAL <список идентификаторов процедур>).
 
  Примеры
 
  . Сохранение и восстановление видеорежима:
 
    cVar := GETMODE()           // Сохранение текущего режима
    ? cVar                      // Например,"CGA80(.T.)"


 
    CGA40(.T.)                  // Установление другого режима
 
    ? &(cVar)                   // Восстановление предыдущего режима
 

See Also: CGA40()
CGA80()
EGA43()
MONOCHROME()
VGA50()

 

 

 GETPAGE()
 Возвращает номер активной видеостраницы.
------------------------------------------------------------------------------
 
  Синтаксис
 
    GETPAGE([<lHiddenPage>]) --> nScreenPage
 
  Параметры
 
    <lHiddenPage> - необязательный логический параметр, задающий при
    значении .T. возврат номера скрытой, а по умолчанию или при значении
    .F. видимой страницы.
 
  Возвращаемое значение
 
    nScreenPage - номер текущей видеостраницы.
 
  Описание
 
    Функция позволяет определить, в какую из видеостраниц, переключаемых
    функцией SETPAGE(), в настоящий момент адресуется вывод.
 
    Поскольку видеовывод может быть скрытым (направлен в неотображаемую в
    текущий момент видеостраницу), то для получения номера скрытой
    видеостраницы вызов функции следует осуществлять со значением .T.
    параметра <lHiddenPage>.
 
  Примеры
 
  . Определение номера активной видеостраницы:
 
    ? GETPAGE()         // Например, 2
 

See Also: SETPAGE()

 

 

 GETPBIOS()
 Возвращает код, определяющий вывод на печать через DOS или через BIOS.
------------------------------------------------------------------------------
 
  Синтаксис
 
    GETPBIOS() --> nPrintMode
 
  Возвращаемое значение
 
    nPrintMode - числовое значение в диапазоне от 0 до 3, ранее
    установленное функцией SETPBIOS().
 
  Описание
 
    Функция позволяет определить текущий режим перенаправления вывода
    на печать CT II-драйвером. Если функция возвращает 0, то вывод
    выполняется через DOS. Если возвращаемое значение в диапазоне от 1
    до 3, то вывод на соответствующий принтер осуществляется через BIOS.


 
  Примеры
 
  . Определение текущего режима:
 
    ? GETPBIOS()                // 0, вывод через DOS
 

See Also: SETPBIOS()

 

 

 GETPXLAT()
  Возвращает текущую таблицу переопределений кодов принтера.
------------------------------------------------------------------------------
 
  Синтаксис
 
    GETPXLAT() --> cPrintTable
 
  Возвращаемое значение
 
    cPrintTable - символьная строка, содержащая полную таблицу
    переопределений кодов принтера, или пустая строка, если таблица не
    была определена.
 
  Описание
 
    Функция возвращает текущую таблицу переопределений кодов принтера,
    установленную функцией SETPXLAT(). Возвращаемая строка может быть
    сохранена в переменной и восстановлена позже. Таким образом,
    GETPXLAT() позволяет переключать таблицы шрифтов принтера.
 
  Примеры
 
  . Сохранение текущей таблицы:
 
    cOldTab := GETPXLAT()
 
  . Установка новой таблицы:
 
    SETPXLAT(......)
    SETPXLAT(......)
    SETPXLAT(......)
 
  . Вывод на другой принтер:
 
    SET PRINTER TO LPT2
 
  . Восстановление предыдущей таблицы, начиная с позиции 0:
 
    SETPXLAT(0, cOldTab)
 

See Also: SETPXLAT()

 

 

 GETSCRMODE()
 Возвращает код текущего видеорежима.
------------------------------------------------------------------------------
 
  Синтаксис
 
    GETSCRMODE() --> nModeNumber
 
  Возвращаемое значение
 
    nModeNumber - числовой код текущего видеорежима.
 
  Описание
 
    Функция, в отличие от GETMODE(), возвращает текущий видеорежим в форме
    числового значения. Это позволяет запросить режим видеоадаптера и
    восстановить его, используя SETSCRMODE(). В CT II-функциях
    используются следующие коды режимов:
 
    Таблица 2-1. Видеорежимы и их коды
    --------------------------------------------------------------------


    Режим               Код видеорежима
    --------------------------------------------------------------------
    CGA40, монохромный  0
    CGA40, цветной      1
    CGA80, монохромный  2
    CGA80, цветной      3
    Монохромный         7
    EGA43 (только EGA)  299(43+256)
    VGA28 (только VGA)  284(28+256)
    VGA50 (только VGA)  306(50+256)
    --------------------------------------------------------------------
 
  Примечания
 
  . При переключении режима видеоадаптера нет гарантии что описываемая
    функция возвратит номер именно этого режима. Поэтому иногда вместо
    значения, установленного SETSCRMODE(), возвращается текущий видеорежим,
    установленный BIOS или CT II, что зависит от особенностей
    конкретного видеоадаптера.
 
  Примеры
 
  . Установка режима EGA43:
 
    EGA43()
 
  . Сохранение текущего видеорежима:
 
    nOldMode := GETSCRMODE()
 
  . ...и восстановление данного режима позднее:
 
    SETSCRMODE(nOldMode)
 

See Also: GETMODE()
SETSCRMODE()



 
 

 GETTAB()
 Возвращает шаг табуляции, установленный для видеовывода Clipper.
------------------------------------------------------------------------------
 
  Синтаксис
 
    GETTAB() --> cTabTable
 
  Возвращаемое значение
 
    cTabTable - символьная строка, содержащая задание текущих позиций
    табуляции.
 
  Описание
 
    Функция возвращает описание установок табуляции для видеовывода
    Clipper, произведенное функцией SETTAB(), что позволяет сохранить
    текущие установки табуляции.
 
  Примеры
 
  . Сохранение текущих установок табуляции:
 
    cTab := GETTAB()
 

See Also: SETTAB()

 

 

 INKEYTRAP()
 Имитирует Clipper-функцию INKEY() с поддержкой клавиш прерывания.
------------------------------------------------------------------------------
 
  Синтаксис
 


    INKEYTRAP([<nDelay>]) --> nKeyCode
 
  Параметры
 
    <nDelay> - необязательный числовой параметр, задающий время
    ожидания в секундах. По умолчанию возврат значения без ожидания.
 
  Возвращаемое значение
 
    nKeyCode - числовой INKEY-код клавиши.
 
  Описание
 
    Функция, как и INKEY(), поддерживает время ожидания и возвращает
    значения кодов клавиш. Однако, в отличие от INKEY(), она поддерживает
    клавиши прерывания (назначения клавишам процедур Clipper-командой
    SET KEY <INKEY-код> TO <имя процедуры>). Использование INKEYTRAP(),
    например, освобождает программиста от включения громоздких
    CASE-конструкций после каждого вызова INKEY().
 
  Примечания
 
  . После окончания выполнения процедуры, назначенной клавише,
    время ожидания <nDelay> сбрасывается.
 
  Примеры
 
  . Обработка прерываний по клавишам:
 
    SET KEY 28 TO HELP          // Клавиша F1
    nVar := INKEYTRAP(10)       // Ожидание нажатия 10 секунд
    RETURN
 
    PROCEDURE Help(a, b, c)     // Третий параметр (c) всегда передается
                                // как пустая строка ("")
 
        * Любой программный код
 
    RETURN
 

See Also: SAVESETKEY()

 

 

 INPUTMODE()
 Возвращает код последнего или текущего режима ввода.
------------------------------------------------------------------------------
 
  Синтаксис
 
    INPUTMODE([<lActiveMode>]) --> nInputMode
 
  Параметры
 
    <lActiveMode> - необязательный логический параметр, задающий
    требования к возвращаемому значению. Значение по умолчанию
    приведено в подразделе Описание.
 
  Возвращаемое значение
 
    nInputMode - числовое значение, соответствующее последней
    выполнявшейся или активной команде ввода.
 
  Описание
 
    Функция позволяет определить, при выполнении какой из команд ввода


    произошло прерывание (выполнение процедуры, назначенной клавише по
    Clipper-команде SET KEY). Если параметр опущен или имеет значение .F.,
    то функция возвращает код режима, активного в данный момент, или
    последнего активного режима, если ввод не выполняется.
 
    При значении .T. параметра <lActiveMode>, возвращается либо номер
    активного в данный момент режима ввода, либо 0. Команды и функции
    ввода, числовые значения соответствующих им кодов и наименования
    символьных констант (из поставляемого с CT II файла описаний
    NT2DRV.CH) приведены в следующей таблице:
 
    Таблица 2-2. Коды и режимы ввода
    --------------------------------------------------------------------
    Код         Символьная константа    Команда или функция ввода
    --------------------------------------------------------------------
     0          IMODE_NO                Команды ввода нет
     1          IMODE_WAIT              WAIT
     2          IMODE_ACCEPT            ACCEPT
     3          IMODE_INPUT             INPUT
     4          IMODE_READ              READ
     5          IMODE_MEMOEDIT          MEMOEDIT()
     6          IMODE_MENU              MENU
     7          IMODE_INKEY             INKEY()
     8          IMODE_DEBUG             Ввод отладчика
     9          IMODE_GETINPUT          GETINPUT()
     10         IMODE_GETSECRET         GETSECRET()
    --------------------------------------------------------------------
 
  Примеры
 
  . Выбор базы данных с HELP-информацией, соответствующей команде ввода:
 
    PROCEDURE HELP(A, B, C)
 
        nArea := SELECT()
        nMode := INPUTMODE()
 
        IF nMode = 5            // Вызов из MEMOEDIT()
                SELECT MEMOHELP
        ELSE
                SELECT HELP
        ENDIF
 
        * Поиск и вывод Help-текста
 
        SELECT(nArea)
 
        RETURN
 

 

 KEYREAD()
 Возвращает уже обработанное программой содержимое буфера клавиатуры.


------------------------------------------------------------------------------
 
  Синтаксис
 
    KEYREAD() --> cKeyValue
 
  Возвращаемое значение
 
    cKeyValue - символьная строка, содержащая коды клавиш из
    Clipper-буфера клавиатуры, уже прочитанные программой.
 
  Описание
 
    Функция возвращает строку кодов клавиш из буфера клавиатуры, которые
    уже были приняты прикладной программой, что позволяет выяснить
    необходимость повторения отдельных действий, выполнения или,
    наоборот, отмены некоторых функций и построения макропоследовательности
    кодов клавиш. Данная функция очень полезна и при поиске ошибок.
 
  Примечания
 
  . Коды всех клавиш, нажимаемых вслед за последним
    выполнением Clipper-команды SET TYPEAHEAD TO или вызовом функции
    KEYSEND(), помещаются в буфер клавиатуры. Символы, уже
    находящиеся в буфере, но еще не прочитанные Clipper-программой,
    игнорируются функцией KEYREAD(). Если буфер клавиатуры пуст,
    например, при запуске программы или после выполнения KEYSEND() или
    SET TYPEAHEAD TO, функция возвращает пустую строку.
 
  . В отличие от Clipper S'87, функция KEYREAD() для Clipper 5.01
    возвращает полный BIOS-код клавиши (см. поставляемый в составе CT II
    файл описаний NT2SCAN.CH). Если для уже существующей прикладной
    программы требуется совместимость по кодам клавиш, то в нее следует
    включить файл описаний NT250.CH. Кроме того, в файле NT2SCAN.CH
    содержится информация, касающаяся работы новых функций
    обслуживания клавиатуры.
 
  . Коды клавиш, записываемые командой KEYBOARD в Clipper-буфер
    клавиатуры, не распознаются функцией KEYREAD(). Для решения
    проблемы может быть предложено использование в программе
    директивы препроцессора:
 
       #command KEYBOARD(<c>) => KEYSEND(EXPAND(<c>), .F., .T.)
 
  . Вызов функции EXPAND() позволяет преобразовать строку
    однобайтовых INKEY-кодов клавиш в строку двухбайтовых


    последовательностей. Значение .T. третьего параметра указывает
    функции KEYSEND() игнорировать ненулевые значения скан-кода
    эмулируемой клавиши.
 
  . Использование Clipper-команды SET TYPEAHEAD для организации
    отслеживания результатов выполнения KEYSEND() с помощью KEYREAD()
    может привести к большим затратам памяти, т.к. для каждого символа
    Clipper резервирует 14 байтов. Таким образом, выполнение
    SET TYPEAHEAD TO 1000 приведет к занятию 14 * 1000 байтов.
 
  Примеры
 
  . Получение кодов ранее нажатых и обработанных программой клавиш:
 
    cHistory := KEYREAD()                       // Ранее произведенный ввод
    IF RIGHT(cHistory, 2) == cSequence
        ? "Вы вышли из MEMOEDIT, нажав CTRL-END!"
    ENDIF
 

See Also: DSETTYPE()
KEYSEND()

 

 

 KEYSEND()
 Имитирует Clipper-команду KEYBOARD.
------------------------------------------------------------------------------
 
  Синтаксис
 
    KEYSEND(<cKeyValue>, [<lAdditiveMode>], [<lKeyboard>]) --> lPassed
 
  Параметры
 
    <cKeyValue> - символьная строка, содержащая одну или несколько
    последовательностей, состоящих из пар ASCII-кода и скан-кода клавиш,
    помещаемых в буфер клавиатуры.
 
    <lAdditiveMode> - необязательный логический параметр, задающий при
    значении .T. добавление кодов клавиш к содержимому буфера клавиатуры,
    а при значении .F. или по умолчанию замену предыдущего содержимого
    буфера.
 
    <lKeyboard> - необязательный логический параметр, задающий при
    значении .T. игнорирование ненулевой величины скан-кода клавиши,
    а при значении .F. или по умолчанию использование полного
    двухбайтового кода.
 
  Возвращаемое значение
 
    lPassed - логическое значение .T., если последовательность успешно
    помещена в Clipper-буфер клавиатуры, а иначе .F..
 
  Описание
 


    Функция действует подобно Clipper-команде KEYBOARD, но использует иную
    кодировку символов. Символьные константы для используемой кодировки
    определены в поставляемом с CT II файле описаний NT2SCAN.CH и включены
    в "Введение в Clipper Tools II/5.0": Приложение Б.
 
    Использование функцией KEYSEND() скан-кодов клавиш позволяет помещать
    в буфер те коды, которые недопустимы для Clipper-команды KEYBOARD
    (меньше 0 и больше 255), например, коды всех функциональных клавиш и
    большинства <Alt>-комбинаций. То же самое относится к различным, но
    имеющим один INKEY-код клавишам. Поэтому при необходимости эмулировать
    нажатие функциональных или управляющих клавиш лучше вместо команды
    KEYBOARD использовать четко их различающую функцию KEYSEND().
 
    Как при выполнении Clipper-команды KEYBOARD, так и при вызове
    KEYSEND(), содержимое буфера клавиатуры стирается перед записью новых
    символов. Однако, если функция вызвана со значением .T.  параметра
    <lAdditiveMode>, новые коды добавляются к текущему содержимому буфера.
 
  Примечания
 
  . Таблица кодов клавиш в CT II расширена, однако прежние коды
    также действительны (см. файл описаний NT2SCAN.CH).
 
  . Максимальная длина строки для записи в буфер клавиатуры
    вычисляется по формуле:
 
       максимальная выделяемая память / 2
 
    Коды клавиш, записываемые командой KEYBOARD в Clipper-буфер
    клавиатуры, не распознаются функцией KEYREAD(). Для решения
    проблемы может быть предложено использование в программе
    директивы препроцессора:
 
       #command KEYBOARD(<c>) => KEYSEND(EXPAND(<c>), .F., .T.)
 
  . Вызов функции EXPAND() позволяет преобразовать строку
    однобайтовых INKEY-кодов клавиш в строку двухбайтовых
    последовательностей. Значение .T. третьего параметра указывает
    функции KEYSEND() игнорировать ненулевые значения скан-кода
    эмулируемой клавиши.


 
  . Использование Clipper-команды SET TYPEAHEAD для организации
    отслеживания результатов выполнения KEYSEND() с помощью KEYREAD()
    может привести к большим затратам памяти, т.к. для каждого символа
    Clipper резервирует 14 байтов. Таким образом, выполнение
    SET TYPEAHEAD TO 1000 приведет к занятию 14 * 1000 байтов.
 
  Примеры
 
  . Эмуляция нажатия функциональной клавиши:
 
    KEYSEND(KS_ALT_F10)
 

See Also: DSETTYPE()
KEYREAD()

 

 

 MAXCOL()
 Расширяет возможности Clipper-функции MAXCOL().
------------------------------------------------------------------------------
 
  Синтаксис
 
    MAXCOL([<lMode>]) --> nMaxValue
 
  Параметры
 
    <lMode> - необязательный логический параметр, задающий возврат
    номера крайнего правого столбца при значении .T. для физического
    экрана, а при значении .F. или по умолчанию для активного окна.
 
  Возвращаемое значение
 
    nMaxValue - номер крайнего правого столбца физического экрана или
    активного окна.
 
  Описание
 
    Функция заменяет собой аналогичную Clipper-функцию. При опущенном
    параметре или со значением параметра .F. она возвращает номер крайнего
    правого столбца для активного окна. Без использования CT II это всегда
    нулевое окно, размеры которого совпадают с размерами физического
    экрана.
 
    При наличии CT II-драйвера CT2US50.OBJ и оконных CT II-функций это
    могут быть и другие значения. Для получения граничных значений
    физического экрана без учета активного окна функцию следует вызывать
    со значением .T. параметра <lMode>.
 
  Примечания
 
  . Описание этой функции приводится здесь, а не в главе "Видеофункции"
    из соображений концентрации функций, которые в случае прикомпоновки
    CT2US50.OBJ, заменяют или некоторым образом расширяют Clipper-функции.
    Эти расширения нужны только при совместном использовании с другими


    функциями в процессе работы с окнами.
 
  Примеры
 
  . Определение номера крайнего правого столбца:
 
    WOPEN(10, 10, 20, 70)               // Открытие окна
    ? MAXCOL()                          // Относится к окну
    ? MAXCOL(.T.)                       // Относится к физическому экрану
 

See Also: CGA40()
MAXROW()
NUMCOL()
SETMAXCOL()

 

 

 MAXPAGE()
 Возвращает номер последней доступной видеостраницы.
------------------------------------------------------------------------------
 
  Синтаксис
 
    MAXPAGE() --> nMaxPage
 
  Возвращаемое значение
 
    nMaxPage - номер последней доступной видеостраницы.
 
  Описание
 
    Функция возвращает номер последней видеостраницы из числа доступных в
    видеоадаптере. Эту информацию можно использовать при вызове функций
    SETPAGE() или PAGECOPY(). При возвращаемом значении 0 доступна только
    одна видеостраница, а реальное количество доступных видеостраниц равно
    MAXPAGE() + 1.
 
  Примеры
 
  . Определение максимального количества доступных видеостраниц:
 
    ? MAXPAGE()         // Результат:3 означает 4 страницы
 

See Also: GETPAGE()
PAGECOPY()
SETPAGE()

 

 

 MAXROW()
 Расширяет возможности Clipper-функции MAXROW().
------------------------------------------------------------------------------
 
  Синтаксис
 
    MAXROW([<lMode>]) --> nMaxValue
 
  Параметры
 
    <lMode> - необязательный логический параметр, задающий возврат номера
    последней строки при значении .T. для физического экрана, а при
    значении .F. или по умолчанию для активного окна.
 
  Возвращаемое значение
 
    nMaxValue - номер последней строки физического экрана или активного
    окна.
 
  Описание
 
    Функция заменяет собой аналогичную Clipper-функцию. При опущенном
    параметре или со значением параметра .F.


она возвращает номер
    последней строки для активного окна. Без использования CT II это
    всегда нулевое окно, размеры которого совпадают с размерами
    физического экрана.
 
    При наличии CT II-драйвера CT2US50.OBJ и оконных CT II-функций это
    могут быть и другие значения. Для получения граничных значений
    физического экрана без учета активного окна функцию следует вызывать
    со значением .T. параметра <lMode>.
 
  Примечания
 
  . Описание этой функции приводится здесь, а не в главе "Видеофункции"
    из соображений концентрации функций, которые в случае прикомпоновки
    CT2US50.OBJ, заменяют или некоторым образом расширяют Clipper-функции.
    Эти расширения нужны только при совместном использовании с другими
    функциями в процессе работы с окнами.
 
  Примеры
 
  . Определение номера последней строки:
 
    WOPEN(10, 10, 20, 70)               // Открытие окна
    ? MAXROW()                          // Относится к окну
    ? MAXROW(.T.)                       // Относится к физическому экрану
 

See Also: EGA43()
MAXCOL()
SETMAXROW()
VGA50()

 

 

 MONOCHROME()
 Включает монохромный режим видеоадаптера.
------------------------------------------------------------------------------
 
  Синтаксис
 
    MONOCHROME() --> lSwitched
 
  Возвращаемое значение
 
    lSwitched - при успешном выполнении значение .T., а иначе .F..
 
  Описание
 
    Функция может использоваться для любого видеоадаптера, способного
    эмулировать монохромный адаптер.
 
  Примечания
 
  . Внимание! Данная функция не может применяться при открытых
    окнах.
 
  . При выполнении данной функции устанавливается BIOS-режим 7.
 
  Примеры
 
  . Включение монохромного режима:
 
    ? MONOCHROME()              // .T. в случае успеха
 

See Also: CGA40()
CGA80()
EGA43()
GETMODE()
VGA50()

 



 

 PAGECOPY()
 Копирует содержимое одной видеостраницы в другую.
------------------------------------------------------------------------------
 
  Синтаксис
 
    PAGECOPY(<nOriginalPage>,<nCopyPage>) --> lStatus
 
  Параметры
 
    <nOriginalPage> - номер копируемой страницы.
 
    <nCopyPage> - номер страницы, в которую осуществляется копирование.
 
  Возвращаемое значение
 
    lStatus - при успешном выполнении значение .T., а иначе .F..
 
  Описание
 
    Функция позволяет все содержимое видеостраницы с номером
    <nOriginalPage> быстро и без использования дополнительной рабочей
    памяти скопировать в видеостраницу с номером <nCopyPage>.
 
  Примечания
 
  . Допустимый диапазон номеров видеостраниц ограничен
    значениями от 0 до MAXPAGE().
 
  Примеры
 
  . Копирование видеостраницы 0 в видеостраницу 1:
 
    ? PAGECOPY(0, 1)            // .T. в случае успеха
 

See Also: GETPAGE()
MAXPAGE()
SETPAGE()

 

 

 PRINTERROR()
 Возвращает код ошибки, возникшей при последнем выводе на принтер.
------------------------------------------------------------------------------
 
  Синтаксис
 
    PRINTERROR() --> nError
 
  Возвращаемое значение
 
    nError - числовой код ошибки при выводе на принтер. Значения
    возвращаемых кодов приведены в таблице:
 
    Таблица 2-3. Коды ошибок при выводе на принтер
    --------------------------------------------------------------------
    Код         Определение
    --------------------------------------------------------------------
     0          Ошибок нет
     5          Нет доступа
     6          Недопустимый дескриптор
     127        Прервано по нажатию комбинации клавиш Ctrl-Break
    --------------------------------------------------------------------
 
  Описание
 
    Функция позволяет определить причину последней неудачи при выводе на


    принтер. Благодаря этому, Clipper-система обработки ошибок может, в
    свою очередь, определить источник ошибки и отреагировать
    соответствующим образом. При прерывании вывода по нажатию комбинации
    клавиш <Ctrl><Break> функция возвращает код 127.
 
  Примечания
 
  . PRINTERROR() возвращает коды только для ошибок,
    происшедших при выполнении Clipper-операций вывода на принтер.
 
  Примеры
 
  . Реакция на ошибку в процессе печати:
 
    nStatus := PRINTERROR()
 
    IF nStatus = 127
        "Печать прервана пользователем!"
    ENDIF
 

 

 SETBELL()
 Устанавливает характеристики звукового сигнала, генерируемого Clipper.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETBELL([<nFrequency>], [<nDuration>]) --> cBlank
 
  Параметры
 
    <nFrequency> - необязательный числовой параметр, задающий частоту
    звукового сигнала в герцах в диапазоне от 21 до 65535. По умолчанию
    880.
 
    <nDuration> - необязательный числовой параметр, задающий длительность
    звукового сигнала в единицах 1/100 секунды в диапазоне от 1 до 65535.
    По умолчанию 30.
 
  Возвращаемое значение
 
    cBlank - всегда пустая строка.
 
  Описание
 
    Функция позволяет устанавливать характеристики звукового сигнала,
    который формируется при выводе символа CHR(7) или в процессе
    выполнения Clipper-команд GET в режиме SET BELL ON. Частота может
    лежать в диапазоне от 21 до 65535 Гц. Использование частоты за
    пределами слышимого человеком звукового диапазона (свыше 20 000 Гц)
    хотя и возможно, но имеет мало смысла.
 
  Примеры
 
  . Установка частоты звукового сигнала 300 Гц длительностью 0.2 с:
 
    SETBELL(300, 20)
 
  . Восстановление исходных значений:
 
    SETBELL()
 

See Also: SOUND()



 

 

 SETBOXGROW()
  Устанавливает время задержки при выводе "разрастающихся" обрамлений.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETBOXGROW([<nTimeDelay>]) --> cBlank
 
  Параметры
 
    <nTimeDelay> - необязательный числовой параметр, задающий число
    миллисекунд задержки между шагами при выводе "разрастающихся"
    обрамлений. По умолчанию 0.
 
  Возвращаемое значение
 
    cBlank - всегда пустая строка.
 
  Описание
 
Функция позволяет включить режим "разрастания" обрамлений,
сопровождающихся очисткой окна. Обычно обрамления формируются функцией WBOX() или Clipper-командами @...BOX и @...CLEAR TO..[DOUBLE].
 
Если включен режим "разрастания" обрамлений, то вывод рамки будет производиться по шагам. Сначала выводится рамка в центре окна, на следующем шаге - окружающая ее (со стиранием предыдущей), затем следующая и т.д. - до вывода рамки, обрамляющей активное окно.
 
Параметр <nTimeDelay> задает задержку между отдельными шагами.
Однако существует два особых случая его значений:
 
0 - обрамления будут формироваться без "разрастания";
1 - обрамления будут "разрастаться", но без задержки между шагами.
 
  Примечания
 
  . Режим "разрастания" функционирует, только если окно при обрамлении
    очищается (символом-заполнителем). Если при вызове WBOX() все или
    какие-либо параметры опущены, то используются их значения по
    умолчанию.
 
  . При включенном режиме подавления "снега" не рекомендуется
    использовать режим "разрастания".
 
  Примеры
 
  . Установка задержки 10 мс между шагами "разрастания":
 
    SETBOXGROW(10)
 
    WOPEN(2, 2, 23, 78)         // Ничего не происходит
    WBOX()                      // Обрамление формируется в режиме


                                // "разрастания"
 

See Also: GETBOXGROW()
WBOX()

 

 

 SETCURSOR()
 Устанавливает форму курсора.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETCURSOR([<nCursorType>], [<lMode>]) --> nCursor
 
    или
 
    SETCURSOR([<nCursorForm>], [<lMode>]) --> nCursor
 
    или
 
    SETCURSOR([<nTopLine>], [<nBottomLine>], [<lMode>]) --> nCursor
 
  Параметры
 
    <nCursorType> - вариант использования необязательного параметра в
    виде числа с диапазоном значений от 0 до 4, задающего форму курсора
    аналогично команде Clipper 5.0 (см. файл описаний SETCURS.CH для
    Clipper 5.0).
 
    <nCursorForm> - вариант использования необязательного параметра в
    виде 16-битового целого значения, возвращаемого функциями
    SETCURSOR() и GETCURSOR().
 
    <nTopLine>, <nBottomLine> - вариант использования в виде пары
    необязательных числовых параметров, задающих номера начальной и
    конечной скан-строк формы курсора.
 
    По умолчанию во всех вышеуказанных вариантах параметров форма
    курсора не изменяется.
 
    <lMode> - необязательный логический параметр, задающий для всех
    вариантов при значении .T. форму курсора в режиме вставки, а при
    значении .F. или по умолчанию в режиме замены.
 
  Возвращаемое значение
 
    nCursor - число, соответствующее предыдущей форме курсора.
 
    Если возвращаемое значение находится в диапазоне от 0 до 4, то форма
    курсора ранее была установлена Clipper-функцией SETCURSOR(). Значения
    другого диапазона означают, что для установки курсора предварительно
    использовались <nTopLine> и <nBottomLine>.
 
  Описание
 
    Функция расширяет возможности аналогичной функции Clipper 5.0.
    Однако новые возможности доступны только в случае прикомпоновки


    CT II-драйвера CT2US50.OBJ. Совместимость с функцией Clipper 5.0
    поддерживается только для значений в диапазоне от 0 до 4 параметра
    <nCursorType>. Соответствие формы курсора таким значениям описано в
    документации Clipper 5.0.
 
    Вариант вызова функции с параметром <nCursorForm> используется
    исключительно для восстановления формы курсора по значению,
    предварительно сохраненному данной функцией или GETCURSOR(),
    однако во вновь разрабатываемых прикладных программах применение
    функции GETCURSOR() для этой цели не рекомендуется.
 
    Третий вариант вызова с параметрами <nTopLine> и <nBottomLine>
    позволяет задать форму по начальной и конечной пиксельным строкам
    изображения курсора.
 
  Примечания
 
  . Диапазон значений параметров <nTopLine> и <nBottomLine> зависит от
    типа используемого видеоадаптера и установленного шрифта.
 
  . Для обеспечения совместимости с синтаксисом предыдущих версий при
    вызове функции без параметров необходимо включить в программу файл
    описаний NT250.CH.
 
  Примеры
 
  . Сохранение и восстановление формы курсора обоих режимов:
 
    nNormCursor := SETCURSOR(.F.)       // Режим замены
    nInsCursor := SETCURSOR(.T.)        // Режим вставки
 
    * Курсор изменен в программе
 
    SETCURSOR(nNormCursor, .F.)         // Восстановление курсора
    SETCURSOR(nInsCursor, .T.)          // Восстановление курсора
 
  . Задание формы курсора по первой и последней пиксельным строкам:
 
    SETCURSOR(10, 13)                   // Курсор как "жирное" подчеркивание
 

See Also: GETCURSOR()*
CHARPIX()

 

 

 SETKXLAT()
 Переопределяет код задаваемой клавиши.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETKXLAT([<cOrgKeyValue>], [<cNewKeyValue>]) --> lAccepted


 
  Параметры
 
    <cOrgKeyValue> - необязательный символьный параметр, задающий исходный
    код переопределяемой клавиши в формате, приведенном в подразделе
    Описание. Если параметр опущен, то отменяются все предварительно
    сделанные переопределения клавиш.
 
    <cNewKeyValue> - необязательный символьный параметр, задающий новый
    код клавиши <cOrgKeyValue> в формате, приведенном в подразделе
    Описание. По умолчанию отменяется ранее сделанное переопределение.
 
  Возвращаемое значение
 
    lAccepted - при успешном переопределении .T., а при недопустимом
    параметре или невозможности выделения дополнительной памяти .F..
 
  Описание
 
    Функция позволяет переопределять код или отключать (блокировать)
    клавиши клавиатуры. Символьные константы для клавиш определены в файле
    описаний NT2SCAN.CH. Символьный код клавиш, задаваемый аргументами
    <cNewKeyValue> и <cOrgKeyValue>, определяется по следующей формуле:
 
       <cKeyValue> = CHR(ASCII-код)+CHR(скан-код)
 
    Многие комбинации клавиш не имеют эквивалента в форме ASCII-кода.
    В этом случае байт CHR(ASCII-код) будет нулевым. Однако каждой клавише
    и комбинации клавиш соответствует скан-код, позволяющий различать
    клавиши с одним и тем же ASCII-кодом (напр., десятичная точка на
    числовой клавиатуре и точка на алфавитно-цифровой).
 
    При вводе ASCII-кода с числовой клавиатуры в форме <ALT>+<число>
    формируется нулевой скан-код.
 
    При опущенном параметре <cNewKeyValue> переопределение клавиши,
    заданной параметром <cOrgKeyValue>, отменяется.
 
    При вызове функции без параметров отменяются все ранее установленные
    переопределения клавиш.
 
  Примечания
 
  . Допустимо для задания кодов клавиш использовать числовые значения
    INKEY-кодов и соответственно их символьные константы из Clipper-файла


    описаний Inkey.ch.
 
  . Новое переопределение клавиши подавляет ранее произведенное.
 
  . Память на переопределение клавиш выделяется динамически.
    Допускаемое количество переопределений клавиш вычисляется по формуле:
 
       максимальная выделяемая память / 4
 
  . Прикомпоновка CT II-драйвера CT2US50.OBJ для переопределений
    клавиш не требуется.
 
  . При нажатии заблокированных клавиш функция INKEY() возвращает
    числовое значение (-1).
 
  Примеры
 
  . Переопределение клавиши <A> на код клавиши <B>:
 
    SETKXLAT(KS_A, KS_B)                // .T. в случае успеха
 
  . Переопределение клавиши <стрелка влево> на код клавиши
    <стрелка вниз>:
 
    ? SETKXLAT(KS_LEFT, KS_DOWN)        // .T. в случае успеха
 
  . Блокировка клавиши <стрелка вниз>:
 
    ? SETKXLAT(KS_DOWN, KS_DISABLE)     // .T. в случае успеха
 
  . Разблокировка клавиши <стрелка вниз>:
 
    ? SETKXLAT(KS_DOWN)
 
  . Отмена всех переопределений:
 
    SETKXLAT()
 

See Also: GETKXLAT()
GETKXTAB()
SETKXTAB()

 

 

 SETKXTAB()
 Инсталлирует таблицу переопределений кодов клавиш.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETKXTAB(<idKeyTable>) --> lInstalled
 
  Параметры
 
    <idKeyTable> - символьная строка, содержащая определения клавиш в
    формате, приведенном в подразделе Описание.
 
  Возвращаемое значение
 
    lInstalled - если таблица переопределений кодов клавиш успешно
    установлена, то возвращается .T., а иначе .F..
 
  Описание
 
    Функция, в отличие от SETKXLAT(), переопределяет код не одной клавиши,
    а устанавливает всю таблицу переопределений. Она применяется, главным
    образом, для восстановления таблицы переопределений кодов клавиш,
    сохраненной функцией GETKXTAB().


 
    Для переопределения каждой клавиши используются четыре байта: два для
    скан- и ASCII-кода исходной клавиши и два для скан- и ASCII-кода
    имитируемой. Таблица создается по следующей форме:
 
    cByte1 := CHR(ASC1)      // ASCII-код переопределяемой клавиши
    cByte2 := CHR(ASC2)      // Скан-код переопределяемой клавиши
    cByte3 := CHR(ASC1)      // ASCII-код имитируемой клавиши
    cByte4 := CHR(ASC2)      // Скан-код имитируемой клавиши
 
    cTable := cByte1 + cByte2 + cByte3 + cByte4
 
    Вариант использования символьных констант, определенных в файле
    описаний NT2SCAN.CH:
 
    cTable := KS_A + KS_B    // Переопределение <А> на <В>
 
  Примечания
 
  . При инсталляции новая таблица кодов клавиш заменяет
    существующую.
 
  Примеры
 
  . Сохранение и восстановление таблицы переопределений клавиш:
 
    cKXTab := GETKXTAB()
    DO KEYCHANGE
    SETKXTAB(cKXTab)
 

See Also: GETKXLAT()
GETKXTAB()
SETKXLAT()

 

 

 SETLINES()
 Устанавливает количество строк, выводимых на экран до паузы.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETLINES([<nLines>]) --> cNullString
 
  Параметры
 
    <nLines> - необязательный числовой параметр, задающий количество
    строк, выводимых на экран до паузы. По умолчанию 0.
 
  Возвращаемое значение
 
    cNullString - всегда пустая строка.
 
  Описание
 
    Функция позволяет имитировать выполнение DOS-команды MORE для
    Clipper-команд типа LIST или DISPLAY.
 
  Примечания
 
  . Подсчитываются только символы "перевод строки" (LF).
 
  . Если параметр <nLines> имеет отрицательное или нулевое значение,
    вывод будет осуществляться без пауз.
 
  . Для вывода с паузами не требуется прикомпоновка CT II-драйвера
    CT2US50.OBJ.
 


  Примеры
 
  . Приостановка вывода после 20 строк:
 
    USE DATA
    SETLINES(20)                // Пауза после 20 строк
    LIST Field1, Field2
 

See Also: GETLINES()

 

 

 SETMAXCOL()
 Устанавливает количество столбцов виртуального экрана.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETMAXCOL(<nLastColumn>, [<nScrollBorder>]) --> lSuccessful
 
  Параметры
 
    <nLastColumn> - номер последнего столбца виртуального экрана,
    поддерживаемого CT II-драйвером. Допустимо только четное количество
    столбцов. Поскольку нумерация ведется с 0, параметр может иметь только
    нечетные значения. Максимально допустимое значение - 253, если
    достаточно рабочей памяти.
 
    <nScrollBorder> - необязательный числовой параметр, задающий ширину
    полей, при пересечении границ которых курсором на видимой части экрана
    будет осуществляться скролинг. Допустимы значения в диапазоне от 0 до
    MAXCOL(.T.) / 2. Значение, превышающее верхний предел, корректируется
    до максимально допустимого. Если параметр опущен, прокрутка
    выключается.
 
  Возвращаемое значение
 
    lSuccessful - при успешной установке логическое значение .T.,
    а иначе .F..
 
  Описание
 
    Функция позволяет установить количество столбцов, воспринимаемое
    CT II-драйвером при выводе на экран Clipper-командами. При организации
    вывода изображений средствами CT II-драйвера могут использоваться два
    различных типа экранов:
 
    Специальный экран
    Этот экран обеспечивает средствами видеоадаптера (без поддержки
    BIOS) отображение более 80 столбцов и 25 строк. Достигается это,
    например, делением внутренней памяти на видеостраницы большего
    размера. Однако такие специальные видеоадаптеры должны быть
    совместимы с обычными по организации видеопамяти (использование
    символов и их цветовых атрибутов), кодированию байтов атрибутов и


    базовым адресам видеопамяти.
 
    Для таких экранов описываемая функция, не переключая каких-либо
    режимов аппаратных средств, лишь изменяет внутренние установки
    CT II-драйвера. Переключения специальных режимов должны осуществляться
    драйвером используемого видеоадаптера.
 
    Виртуальный экран
    Этот экран содержит больше строк и столбцов, чем физический.
    Содержимое виртуального экрана отображается частями, вмещаемыми
    физическим экраном. Если для ввода по Clipper-командам типа GET/READ
    требуется больше экранного пространства, чем помещается в видимой
    области, то CT II-драйвер автоматически перемещает видимую экранную
    область в соответствии с движением курсора. Это перемещение происходит
    при уходе курсора с одной или другой стороны за границу, установленную
    параметром <nScrollBorder>. При этом обрабатываемая часть текста
    остается видимой. Кроме того, видимая область виртуального экрана
    может быть задана функцией FIRSTCOL().
 
    Виртуальные экраны поддерживаются адаптерами CGA, EGA и VGA, а
    также полностью их эмулирующими. Максимальное количество столбцов
    виртуального экрана при размерах физического 25 строк на 80 столбцов,
    что устанавливается вызовом CGA80() или MONOCHROME(), вычисляется
    следующим образом:
 
    nColumns := (MAXPAGE() + 1) * 2048 / 25
    nMaxColumns := MIN(INT(nColumns / 2) * 2, 254)
 
    При 8 видеостраницах значение nColumns будет > 255. Поэтому nMaxColumns
    будет равен 254 столбцам, что соответствует максимально допустимому
    значению аргумента функции SETMAXCOL(). Переключение обратно в режим с
    числом столбцов, реально вмещаемым экраном, производится вызовом
    описываемой функции с соответствующим значением параметра
    <nLastColumn>, но без параметра <nScrollBorder>.
 
  Примечания
 
  . Невозможно обеспечить поддержку всех типов видеоадаптеров.  Однако
    можно приобрести видеоадаптеры, полностью соответствующие приведенному


    описанию.
 
  . Поскольку изменение количества столбцов разрушает отображенную
    информацию, осуществлять переключение рекомендуется после выполнения
    команды CLEAR.
 
  . Для организации виртуального экрана используется часть памяти
    видеостраниц. Поэтому количество доступных видеостраниц уменьшается с
    увеличением размеров виртуального экрана.
 
  . Если значение <nScrollBorder> больше или равно половине числа
    видимых столбцов, то при пересечении курсором центра на экране будет
    осуществляться скролинг.
 
  . При открытых окнах количество столбцов не может быть изменено,
    независимо от режима автоматической прокрутки.
 
  Примеры
 
  . Установка 96 столбцов для специального экрана:
 
    SETMAXCOL(95)               // 96 столбцов
    @ 10, 80 SAY "Clipper"
 
  . Переключение на виртуальный экран со 100 столбцами и шириной
    полей 3 при адаптере VGA в режиме 50 строк (VGA50()):
 
    CLEAR                       // Лучше всего очистить экран
    ? SETMAXCOL(99, 3)          // .T. в случае успеха
 
  . Отключение автоматической прокрутки:
 
    SETMAXCOL(MAXCOL(.T.))
 

See Also: FIRSTCOL()
SETMAXROW()

 

 

 SETMAXROW()
 Устанавливает количество строк виртуального экрана.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETMAXROW(<nLastRow>, [<nScrollBorder>]) --> lSuccessful
 
  Параметры
 
    <nLastRow> - номер последней строки виртуального экрана,
    поддерживаемой CT II-драйвером в диапазоне от 0 до 203, если
    достаточно рабочей памяти.
 
    <nScrollBorder> - необязательный числовой параметр, задающий ширину
    полей, при пересечении границ которых курсором на видимой части экрана
    будет осуществляться скролинг. Допустимы значения в диапазоне от 0 до
    MAXROW(.T.) / 2. Значение, превышающее верхний предел, корректируется


    до максимально допустимого. Если параметр опущен, прокрутка
    выключается.
 
  Возвращаемое значение
 
    lSuccessful - при успешной установке логическое значение .T.,
    а иначе .F..
 
  Описание
 
    Функция позволяет установить количество строк, воспринимаемое
    CT II-драйвером при выводе на экран Clipper-командами. При организации
    вывода изображений средствами CT II-драйвера могут использоваться два
    различных типа экранов:
 
    Специальный экран
    Этот экран обеспечивает средствами видеоадаптера (без поддержки BIOS)
    отображение более 80 столбцов и 25 строк. Достигается это, например,
    делением внутренней памяти на видеостраницы большего размера. Однако
    такие специальные видеоадаптеры должны быть совместимы с обычными по
    организации видеопамяти (использование символов и их цветовых
    атрибутов), кодированию байтов атрибутов и базовым адресам
    видеопамяти.
 
    Для таких экранов описываемая функция, не переключая каких-либо
    режимов аппаратных средств, лишь изменяет внутренние установки
    CT II-драйвера. Переключения специальных режимов должны осуществляться
    драйвером используемого видеоадаптера.
 
    Виртуальный экран
    Этот экран содержит больше строк и столбцов, чем физический.
    Содержимое виртуального экрана отображается частями, вмещаемыми
    физическим экраном. Если для ввода по Clipper-командам типа GET/READ
    требуется больше экранного пространства, чем помещается в видимой
    области, то CT II-драйвер автоматически перемещает видимую экранную
    область в соответствии с движением курсора. Это перемещение происходит
    при уходе курсора с одной или другой стороны за границу, установленную
    параметром <nScrollBorder>. При этом обрабатываемая часть текста
    остается видимой. Кроме того, видимая область виртуального экрана
    может быть задана функцией FIRSTROW().
 
    Виртуальные экраны поддерживаются адаптерами CGA, EGA и VGA, а также


    полностью их эмулирующими. Максимальное количество строк виртуального
    экрана при размерах физического 25 строк на 80 столбцов, что
    устанавливается вызовом CGA80() или MONOCHROME(), вычисляется
    следующим образом:
 
    MIN(INT((MAXPAGE() + 1) * 2048 / 80), 204)
 
    При 8 видеостраницах это будет:
 
    MIN(INT(8 * 2048 / 80), 204) -> 204
 
    Другими словами, допустим виртуальный экран с 204 строками, что
    соответствует максимально допустимому значению аргумента функции
    SETMAXROW(). Переключение обратно в режим с числом строк, реально
    вмещаемым экраном, производится вызовом описываемой функции с
    соответствующим значением параметра <nLastRow>, но без параметра
    <nScrollBorder>.
 
  Примечания
 
  . Невозможно обеспечить поддержку всех типов видеоадаптеров.  Однако
    можно приобрести видеоадаптеры, полностью соответствующие приведенному
    описанию.
 
  . Поскольку изменение количества строк разрушает отображенную
    информацию, осуществлять переключение рекомендуется после выполнения
    команды CLEAR.
 
  . Для организации виртуального экрана используется часть памяти
    видеостраниц. Поэтому количество доступных видеостраниц уменьшается с
    увеличением размеров виртуального экрана.
 
  . Если значение <nScrollBorder> больше или равно половине числа
    видимых строк, то при пересечении курсором центра на экране будет
    осуществляться скролинг.
 
  . При открытых окнах количество строк не может быть изменено,
    независимо от режима автоматической прокрутки.
 
  Примеры
 
  . Установка 72 строк для специального экрана:
 
    SETMAXCOL(95)               // 92 строки
    @ 65, 20 SAY "Clipper"
 
  . Переключение на виртуальный экран со 100 строками и шириной
    полей 2:
 
    ? SETMAXROW(99, 2)          // .T. в случае успеха
 
  . Отключение автоматической прокрутки:


 
    SETMAXROW(MAXROW(.T.))
 

See Also: FIRSTROW()
SETMAXCOL()

 

 

 SETPAGE()
 Переключает вывод на новую видеостраницу.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETPAGE(<nScreenPage>, [<lHidden>]) --> lSwitched
 
  Параметры
 
    <nScreenPage> - номер выбираемой видеостраницы. Максимальное значение
    зависит от используемого видеоадаптера, режима и доступной памяти.
    Нумерация страниц ведется с 0.
 
    <lHidden> - необязательный логический параметр, задающий при значении
    .T. вывод в выбранную страницу без отображения, а при значении .F. или
    по умолчанию вывод с отображением.
 
  Возвращаемое значение
 
    lSwitched - логическое значение .T. при успешном выборе физической или
    виртуальной видеостраницы, а иначе .F..
 
  Описание
 
    Функция позволяет осуществить переключение на другую видеостраницу
    используемого видеоадаптера. Если параметр <lHidden> опущен или имеет
    значение .F., то вывод и, следовательно, видеостраница видимы.  Если
    же он имеет значение .T., вывод переадресуется на новую страницу,
    однако видимой остается прежняя. Таким образом, возможно скрытое
    формирование видеоизображения.
 
  Примечания
 
  . Внимание! Данная функция не может применяться при открытых окнах.
 
  . Вывод функцией SETSCRSTR() не осуществляется на виртуальный экран.
    Поэтому ее применение рекомендуется при наличии только одной доступной
    страницы видеоадаптера.
 
  Примеры
 
  . Выбор второй страницы для отображаемого вывода:
 
    ? SETPAGE(1)        // .T. в случае успеха
 
  . Скрытый вывод:
 
    SETPAGE(0)          // При видимой первой странице
    SETPAGE(1, .T.)     // вывод осуществляется во вторую
 

See Also: GETPAGE()
MAXPAGE()
PAGECOPY()

 

 

 SETPBIOS()


  Перенаправляет вывод на принтер через BIOS с таймированием.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETPBIOS(<nPrinter>, [<nRepeat>]) --> lBIOSPrint
 
  Параметры
 
    <nPrinter> - числовой параметр, задающий при значении 0 вывод на
    печать через DOS, а при значениях 1, 2 или 3, означающих LPT1, LPT2
    или LPT3, через BIOS.
 
    <nRepeat> - необязательный числовой параметр, задающий количество
    повторений попыток вывода при неготовности принтера. По умолчанию
    1000.
 
  Возвращаемое значение
 
    lBIOSPrint - логическое значение .T. при направлении вывода через
    BIOS, а иначе .F..
 
  Описание
 
    Функция позволяет переконфигурировать CT II-драйвер таким образом,
    что весь вывод на принтер, ранее направлявшийся через DOS, будет
    осуществляться на заданный принтер через BIOS. При этом возможна
    организация ожидания готовности принтера с помощью задания количества
    попыток вывода до прерывания программы по неготовности принтера.
 
  Примечания
 
  . В исходном состоянии вывод на печать из Clipper-программ
    осуществляется через DOS.
 
  . Функция SETPBIOS() и Clipper-команда SET PRINTER TO взаимно
    отменяют сделанные назначения.
 
  . Проверка занятости принтера перед выводом каждого символа
    осуществляется только при направлении через BIOS. В этом случае,
    если принтер занят, CT II-драйвер будет ожидать готовности принтера
    возобновить прием данных.
 
  . Вывод через BIOS возможен во всех системах, поддерживающих
    совместимое с IBM BIOS прерывание 17h.
 
  . Вывод через BIOS функционирует в сетях, перехватывающих
    прерывание 17h.
 
  Примеры
 
  . Направление вывода через BIOS на принтер LPT2 независимо от
    Clipper-команды SET PRINTER TO:
 
    SET PRINTER TO LPT1
    ? SETPBIOS(2)               // .T.


в случае успеха
 
  . То же, но с сокращенным временем ожидания:
 
    SETPBIOS(2, 100)            // 100 повторений
 
  . Направление вывода на принтер через DOS:
 
    ? SETPBIOS(0)               // .F. при направлении вывода через DOS
 

See Also: GETPBIOS()

 

 

 SETPXLAT()
 Инсталлирует таблицу переопределений кодов при выводе на принтер.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETPXLAT([<nASCIIPos|cChar>], [<cPrintChar>]) --> lActiveTable
 
  Параметры
 
    <nASCIIPos|cChar> - необязательный параметр в виде числового значения
    ASCII-кода в диапазоне от 0 до 255 или в форме символа, задающий
    начальную позицию в таблице кодов, с которой будет производиться
    переопределение. При опущенном параметре ранее установленная таблица
    сбрасывается.
 
    <cPrintChar> - необязательный символьный параметр, задающий
    последовательность символов, копируемых в таблицу кодов, с позиции,
    указанной <nASCIIPos|cChar>.
 
  Возвращаемое значение
 
    lActiveTable - логическое значение .T., если таблица переопределений
    кодов активна, а иначе .F..
 
  Описание
 
    Функция позволяет организовать вывод на принтер через таблицу
    переопределений кодов, создаваемую в прикладной программе. Этот способ
    представляется более гибким, чем использование специальных драйверов,
    требуемых в связи с тем, что обычно Clipper выводит на принтер все
    символы без изменений.
 
    Таблица переопределений кодов представляет собой область памяти,
    занимающую 256 байтов, в которой каждый байт первоначально содержит
    символ со своим кодом. SETPXLAT() позволяет заменить код символа или
    группы символов на любой другой. Таким образом, "А", например, при
    выводе на принтер можно печатать как "В".
 
  Примечания


 
  . Таблица переопределений кодов создается только при введении
    изменений с помощью SETPXLAT(). Таким образом, память не
    расходуется без необходимости.
 
  Примеры
 
  . Вызов с параметром в числовой форме:
 
    SETPXLAT(65, CHR(66))       // "А" будет печататься как "B"
 
  . Вызов с параметром в символьной форме:
 
    SETPXLAT("1", "AB")         // "1" будет печататься как "А",
                                // а "2" как "В"
 

See Also: GETPXLAT()



 
 

 SETQNAME()
 Задает имя и путь доступа для quit-файла.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETQNAME([<cFileSpecification>]) --> lAmended
 
  Параметры
 
    <cFileSpecification> - необязательный символьный параметр, задающий
    новое имя quit-файла, с необязательным путем доступа к директории и
    расширением имени. По умолчанию используется текущая директория, имя
    активного EXE-файла и расширение .Q.
 
  Возвращаемое значение
 
    lAmended - логическое значение .T. при установке заданного имени,
    а иначе .F..
 
  Описание
 
    Функция позволяет задать полный путь доступа к директории и имя
    quit-файла вместо используемых по умолчанию директории запуска и имени
    EXE-файла с расширением .Q. Режим создания quit-файла при завершении
    программы и выходе в DOS переключается функцией DSETQFILE().
 
  Примечания
 
  . При вызове с опущенным параметром возвращается значение .F.,
    а имя quit-файла устанавливается по умолчанию.
 
  Примеры
 
  . Изменение имени quit-файла:
 
    SETQNAME("C:\LOGS\PROTO.LOG")
    DSETQFILE(.T.)              // Создание quit-файла при завершении
 

See Also: DSETQFILE()

 

 

 SETSCRMODE()
 Устанавливает видеорежим.


------------------------------------------------------------------------------
 
  Синтаксис
 
    SETSCRMODE(<nModeNumber>) --> lStatus
 
  Параметры
 
    <nModeNumber> - числовой код устанавливаемого режима. Таблица кодов
    приведена в подразделе Описание.
 
  Возвращаемое значение
 
    lStatus - логическое значение .T. при успешно установленном режиме,
    а иначе .F..
 
  Описание
 
    Функция переключает видеорежимы, поддерживаемые используемым
    адаптером. При этом необходимо, чтобы устанавливаемый режим
    поддерживался и Clipper в сочетании с CT II. Например, невозможно
    включение графических режимов. CT II поддерживает следующие режимы:
 
    Таблица 2-4. Видеорежимы и их коды
    --------------------------------------------------------------------
    Режим                       Код видеорежима
    --------------------------------------------------------------------
    CGA40, монохромный          0
    CGA40, цветной              1
    CGA80, монохромный          2
    CGA80, цветной              3
    Монохромный                 7
    EGA43 (только EGA)          299(43+256)
    VGA28 (только VGA)          284(28+256)
    VGA50 (только VGA)          306(50+256)
    --------------------------------------------------------------------
 
  Примечания
 
  . Внимание! При использовании специальных режимов и видеоадаптеров в
    сочетании с Clipper и CT II могут возникнуть некоторые проблемы.
 
  . Функцию нельзя применять при открытых окнах.
 
  Примеры
 
  . Установка режима EGA43:
 
    EGA43()
 
  . Сохранение текущего видеорежима:
 
    nOldMode := GETSCRMODE()
 
  . ... и его восстановление:
 
    SETSCRMODE(nOldMode)
 

See Also: GETMODE()
GETSCRMODE()

 

 

 SETTAB()
 Устанавливает шаг табуляции для видеовывода Clipper.
------------------------------------------------------------------------------


 
  Синтаксис
 
    SETTAB([<cTabTable|nTabWidth>]) --> lAccepted
 
  Параметры
 
    <cTabTable|nTabWidth> - необязательный параметр, задающий при
    использовании символьной формы строку табуляции в специальном
    формате длиной до 32 символов, а при использовании числовой формы
    величину шага табуляции. В качестве символа табуляции при числовой
    форме используется пробел. При опущенном параметре ранее
    сделанные установки табуляции отменяются.
 
  Возвращаемое значение
 
    lAccepted - логическое значение .T. при успешной установке табуляции,
    а иначе .F..
 
  Описание
 
    Функция позволяет включить режим, в котором при видеовыводе Clipper
    (исключая команды @...SAY) будут интерпретироваться символы табуляции.
    Это позволяет подставлять вместо символов табуляции не только пробелы,
    но и другие символы-заполнители. Позиция и символ-заполнитель задаются
    символьной строкой в следующем формате:
 
    CHR(позиция табуляции1) + CHR(символ-заполнитель1) +
    CHR(позиция табуляции2) + CHR(символ-заполнитель2)...
 
    Нет необходимости определять каждую позицию табуляции, т.к. не
    заданная явно позиция устанавливается следующим образом:
 
    <предыдущая позиция табуляции> + <предыдущий шаг табуляции>
 
    Если, например, первая позиция 0, вторая 8, а дальнейшие позиции не
    определены, то следующими будут позиции 16, 24, 32 и т.д.
 
    При вызове функции с параметром <cTabTable|nTabWidth> в числовой форме
    задается только шаг табуляции. Все позиции табуляции будут кратны
    значению этого параметра, а символом-заполнителем в этом случае
    является пробел.
 
  Примечания
 
  . Заданная позиция табуляции не может быть меньше предыдущей.
    В подобных случаях функция возвращает .F., сообщая об ошибке.
 
  . Если разница между последней и предпоследней позициями табуляции


    (предыдущий шаг табуляции) равна 0 или, если последней задана позиция
    0, то дальнейшие позиции табуляции устанавливаться не будут.
 
  . Табуляция задается только для вывода на экран, а не на принтер или
    в альтернативные файлы.
 
  Примеры
 
  . Табуляция пробелами с шагом 8:
 
    SETTAB(8)
 
  . Табуляция символом "." в позициях 8, 16, 24 и т.д.:
 
    cTab := CHR(9)
    cTabString := CHR(8) + "." + CHR(16) + "."
    SETTAB(cTabString)
 
    ? "AAAA" + cTab + "BBB" + cTab + "CCCCCC" + cTab + "DDD"
    * Результат : AAAA....BBB.....CCCCCC..DDD
 
  . Форматированный вывод по команде LIST:
 
    USE cFileName
    LIST OFF cTab + FIELD1 + cTab + FIELD2 + cTab + FIELD3
 

See Also: GETTAB()
TABEXPAND()

 

 

 TRAPANYKEY()
 Задает имя процедуры, вызываемой при нажатии любой клавиши.
------------------------------------------------------------------------------
 
  Синтаксис
 
    TRAPANYKEY([<cProcedure>]) --> cOldProcedure
 
  Параметры
 
    <cProcedure> - необязательный символьный параметр, задающий имя
    процедуры, вызываемой при нажатии любой клавиши. По умолчанию
    устанавливается исходный режим ввода с клавиатуры.
 
  Возвращаемое значение
 
    cOldProcedure - символьная строка, содержащая имя ранее установленной
    процедуры, или пустая строка, если процедура не установлена.
 
  Описание
 
    Функция позволяет организовать прерывание выполнения программы при
    нажатии любой клавиши, генерирующей вводимый код. По действию функция
    подобна группе Clipper-команд:
 
       SET KEY <любая клавиша>  TO <cProcedure>
 
    Скан-код клавиши передается как параметр в процедуру прерывания, но не
    сохраняется в буфере клавиатуры. Для продолжения нормальной обработки
    символ должен пересылаться в буфер клавиатуры Clipper-командой


    KEYBOARD или CT II-функцией KEYSEND().
 
    Использование KEYSEND() предпочтительней, т.к. позволяет добавлять
    символы к содержимому буфера клавиатуры, еще не обработанному
    прикладной программой.
 
    Внимание!
    Поскольку при нажатии клавиши ее код перенаправляется процедуре,
    указанной TRAPANYKEY(), то одновременно с этим нельзя организовать
    прерывание по нажатию клавиш средствами Clipper.
 
    Поскольку внутренние процедуры ввода не реентерабельны, то в
    вызываемой процедуре нельзя использовать Clipper-команды и функции
    ввода с клавиатуры типа GET/READ, PROMPT, ACCEPT, INKEY(0), MEMOEDIT()
    и т.п.
 
    Функция INPUTMODE(.T.) позволяет определить, какая из команд и функций
    ввода активна при входе в вызываемую процедуру.
 
  Примечания
 
  . Если заданная процедура отсутствует в выполняемой программе, то
    установка ее имени внутренними средствами CT II не осуществляется и
    сообщение об ошибке времени выполнения не формируется.  Формирование
    на этапе компоновки предупреждения об отсутствии процедуры можно
    обеспечить включением в текст программы Clipper-оператора
    EXTERNAL <список идентификаторов процедур>.
 
  . Передаваемые устанавливаемой процедуре коды клавиш должны в ней
    обрабатываться или транслироваться с помощью Clipper-команды KEYBOARD
    далее, иначе будет невозможен не только дальнейший ввод, но и даже
    прерывание выполнения программы нажатием комбинации клавиш <Alt><C>.
 
  . В отличие от Clipper-команды SET KEY TO рекурсивные входы
    блокируются.
 
  Примеры
 
  . Во время работы MEMOEDIT() для включения подстановки аббревиатур в
    процедуре обработки прерывания проверяются (по списку аббревиатур) три
    последних введенных символа. При сравнении с помощью KEYSEND() в буфер
    клавиатуры посылаются соответствующие фразы. Вызов KEYSEND() со
    значением .T. второго параметра позволяет избежать потерь даже при


    очень быстром вводе.
 
    Поскольку третий символ аббревиатуры еще не был помещен в буфер
    клавиатуры, то для уничтожения первых двух символов, уже переданных в
    буфер, требуются только два символа CHR(8) (BackSpace). Поскольку
    KEYSEND() работает со скан-кодами, то каждый байт последовательности
    должен быть дополнен символом CHR(0).
 
    Обратите внимание на увеличение размера буфера клавиатуры командой
    SET TYPEAHEAD:
 
    CLEAR
 
    cLastThree := ""
    SET TYPEAHEAD TO 50
 
    TRAPANYKEY("Trap_Key")
 
    cTextVar := SPACE(5000)
    @@ 00, 00 TO MAXROW(), MAXCOL(), DOUBLE
    cTextVar := MEMOEDIT(cTextVar, 1, 1, MAXROW() - 1, MAXCOL() - 1)
 
    TRAPANYKEY()
 
    RETURN
    PROCEDURE Trap_Key(nKey)
 
        cLastThree := RIGHT(cLastThree, 2) + CHR(nKey)
 
        DO CASE
        CASE cLastThree == "иВ "
                cLine := CHR(8) + CHR(8) + "искренне Ваш"
                KEYSEND(CHARMIX(cLine, CHR(0)), .T.)
        CASE cLastThree == "пВ "
                cLine := CHR(8) + CHR(8) + "преданный Вам"
                KEYSEND(CHARMIX(cLine, CHR(0)), .T.)
        OTHERWISE
                KEYSEND(12BIN(nKey), .T.)
        ENDCASE
 
        RETURN
 

See Also: INPUTMODE()
KEYSEND()
TRAPSHIFT()

 

 

 TPAPINPUT()
 Устанавливает процедуру отслеживания обращения к буферу клавиатуры.
------------------------------------------------------------------------------
 
  Синтаксис
 
    TRAPINPUT([<cProcedure>, [<lParameter>]]) --> cOldProcedure
 
  Параметры
 
    <cProcedure> - необязательный символьный параметр, задающий имя
    процедуры, вызываемой при обращении к буферу клавиатуры в процессе
    выполнения Clipper-команд или функций ввода. Если параметр опущен,
    то восстанавливается исходный режим обращения к клавиатуре.


 
    <lParameter> - необязательный логический параметр, задающий при
    значении .T. режим вызовов процедуры без передачи параметров (для
    ускорения выполнения). При значении .F. или по умолчанию вызовы
    процедуры с передачей параметров.
 
  Возвращаемое значение
 
    cOldProcedure - символьная строка, содержащая имя ранее установленной
    процедуры, или пустая строка, если процедура не установлена.
 
  Описание
 
    Функция, в отличие от остальных Clipper-средств организации прерываний
    по нажатию клавиш, устанавливает процедуру, вызываемую при каждой
    попытке Clipper-программы получить информацию из буфера клавиатуры.
    Причем вне зависимости от того, производится ли действительно набор на
    клавиатуре. Сами символы из буфера клавиатуры ни какому влиянию не
    подвергаются и передаются Clipper-командам без изменений.
 
    Передача параметров вызываемой процедуре
    Установленной процедуре при ее вызове, как и процедурам прерывания по
    Clipper-командам SET KEY TO, передаются три параметра: имя процедуры,
    номер строки и имя переменной. Передача параметров может быть
    подавлена при значении .T. параметра <lParameter>.
 
    Внимание!
    Поскольку внутренние процедуры ввода не реентерабельны, то в
    вызываемой процедуре нельзя использовать Clipper-команды и функции
    ввода с клавиатуры типа GET/READ, PROMPT, ACCEPT, INKEY(0), MEMOEDIT()
    и т.п.
 
    Функция INPUTMODE(.T.) позволяет определить, какая из команд и функций
    ввода активна при входе в вызываемую процедуру.
 
  Примечания
 
  . Если заданная процедура отсутствует в выполняемой программе, то
    установка ее имени внутренними средствами CT II не осуществляется и
    сообщение об ошибке времени выполнения не формируется.  Формирование
    на этапе компоновки предупреждения об отсутствии процедуры можно
    обеспечить включением в текст программы Clipper-оператора


    EXTERNAL <список идентификаторов процедур>.
 
  . В отличие от Clipper- команды SET KEY TO рекурсивные входы
    блокируются.
 
  Примеры
 
  . Применение TRAPINPUT() для переноса символов из последовательного
    порта в буфер клавиатуры. Приведенная демонстрационная процедура не
    учитывает ряда реальных ситуаций, например, недостаточное количество
    рабочей памяти для MEMOEDIT().
 
    При попытках Clipper-программы получить информацию из буфера
    клавиатуры символы, накопленные в буфере приема последовательного
    порта, добавляются в буфер клавиатуры с помощью KEYSEND().
 
    Коды, непосредственно введенные с клавиатуры перехватываются
    процедурой, установленной TRAPANYKEY(), и сравниваются с величиной
    255. Коды с меньшей величиной переадресуются в последовательный порт,
    а остальные помещаются в буфер клавиатуры. При этом сохраняется
    действие управляющих комбинаций клавиш, например, <Alt><C>:
 
    CLEAR
 
    nPort := 1
 
    COM_OPEN(nPort, 1000)
    CON_DTR(2, .T.)
    COM_INIT(nPort, 1200, "N", 8, 1)
 
    TRAPINPUT("Trap1")
    TRAPANYKEY("Trap2")
 
    cTextVar := SPACE(5000)
    cTextVar := MEMOEDIT(cTextVar)
 
    COM_CLOSE(nPort)
 
    RETURN
    PROCEDURE Trap1(a, b, c)
 
        IF COM_COUNT(nPort) > 0
                KEYSEND(CHARMIX(COM_READ(nPort), CHR(0)), .T.)
        ENDIF
 
        RETURN
 
    PROCEDURE Trap2(nKey)
 
        IF nKey <= 255
                COM_SEND(nPort, CHR(nKey))
        ELSE
                KEYSEND(I2BIN(nKey), .T.)
        ENDIF
 
        RETURN
 

See Also: INPUTMODE()
KEYSEND()
TRAPANYKEY()
TRAPSHIFT()

 

 

 TRAPSHIFT()
 Устанавливает процедуру отслеживания нажатия управляющих клавиш.
------------------------------------------------------------------------------
 
  Синтаксис


 
    TRAPSHIFT([<cProcedure>], [<nBitMap>]) --> cOldProcedure
 
  Параметры
 
    <cProcedure> - необязательный символьный параметр, задающий имя
    процедуры, вызываемой при нажатии управляющей клавиши. Если параметр
    опущен, то восстанавливается исходный режим обработки нажатий
    управляющих клавиш.
 
    <nBitMap> - числовой параметр, задающий маску управляющих клавиш,
    нажатие которых должно вызывать устанавливаемую процедуру.  Таблица
    соответствия битов наименованиям клавиш приведена в подразделе
    Описание.
 
  Возвращаемое значение
 
    cOldProcedure - символьная строка, содержащая имя ранее установленной
    процедуры, или пустая строка, если процедура не установлена.
 
  Описание
 
    Функция позволяет установить процедуру, которая будет вызываться при
    каждом нажатии управляющих клавиш, таких как <Shift>, <Ctrl>, <Alt>,
    <Num Lock> и т.п., или при включенном состоянии системных индикаторов
    CAPS LOCK, NUM LOCK и т.п. Если компьютер имеет европейскую
    расширенную клавиатуру (MF-2), что можно определить с помощью
    функции KBDTYPE(), то учитывается различие между левой и правой
    клавишами <Ctrl>.
 
    Для задания параметра <nBitMap> следует суммировать биты скан-кодов
    требуемых клавиш и индикаторов.  Соответствие битов управляющим
    клавишам и индикаторам приводится в таблице:
 
    Таблица 2-5. Соответствие битов клавишам и индикаторам
    --------------------------------------------------------------------
    Бит         Отслеживаемая клавиша или индикатор
    --------------------------------------------------------------------
    1           Клавиша <Shift> (правая)
    2           Клавиша <Shift> (левая)
    3           Любая клавиша <Ctrl> (левая или правая)
    4           Любая клавиша <Alt> или <Shift> (левая или правая)
    5           Включен индикатор SCROLL LOCK


    6           Включен индикатор NUM LOCK
    7           Включен индикатор CAPS LOCK
    8           Включен индикатор (системный режим) INSERT
    9           Клавиша <Ctrl> (левая)
    10          Клавиша <Alt> (левая)
    11          Клавиша <Ctrl> (правая)
    12          Клавиша <Alt> (правая, не действует для US-клавиатур)
    13          Клавиша <Scroll Lock>
    14          Клавиша <Num Lock>
    15          Клавиша <Caps Lock>
    16          Клавиша <Print Screen> при нажатой клавише <Alt>
    --------------------------------------------------------------------
 
    Вызов процедуры
    При нажатии отслеживаемых клавиш или при включенном состоянии
    отслеживаемых индикаторов, вызывается процедура, инсталлированная
    TRAPSHIFT(). При вызове ей передается числовой параметр, содержащий
    текущую битовую конфигурацию (в соответствии с приведенной выше
    таблицей) состояния всех управляющих клавиш и индикаторов.
 
    Внимание!
    Процедура отслеживания вызывается непосредственно из драйвера как при
    опросе буфера клавиатуры Clipper-программой, так и при выполнении
    других действий.
 
    Поскольку внутренние процедуры ввода не реентерабельны, то в
    вызываемой процедуре нельзя использовать Clipper-команды и функции
    ввода с клавиатуры типа GET/READ, PROMPT, ACCEPT, INKEY(0), MEMOEDIT()
    и т.п.
 
    Функция INPUTMODE(.T.) позволяет определить, какая из команд и функций
    ввода активна при входе в вызываемую процедуру.
 
  Примечания
 
  . Если заданная процедура отсутствует в выполняемой программе, то
    установка ее имени внутренними средствами CT II не осуществляется и
    сообщение об ошибке времени выполнения не формируется.  Формирование
    на этапе компоновки предупреждения об отсутствии процедуры можно
    обеспечить включением в текст программы Clipper-оператора
    EXTERNAL <список идентификаторов процедур>.


 
  . В отличие от Clipper- команды SET KEY TO рекурсивные входы
    блокируются.
 
  . Процедуре отслеживания всегда передается параметр.
 
  Примеры
 
  . Процедура Trap_Alt будет вызываться при нажатии клавиши <Alt>.
    Активизация GET/READ необязательна и приведена в демонстрационных
    целях.
 
    Процедура отслеживания ожидает при нажатой клавише <Alt> либо
    получения INKEY-кода, либо отпускания клавиши. Нажатие клавиши <Alt>
    может вызывать отображение дополнительного HELP-списка выбираемых
    опций. В данном случае комбинация клавиш <Alt><M> добавляет в буфер
    клавиатуры текст "Искренне Ваш".
 
    CLEAR
    TRAPSHIFT("Trap_ALT", 8)
 
    cVar1 := SPACE(50)
    cVar2 := SPACE(50)
 
    @ 10, 20 GET cVar1
    @ 11, 20 GET cVar2
    READ
 
    TRAPSHIFT()
 
    RETURN
    PROCEDURE Trap_ALT(nStatus)
 
        @MAXROW(), 0 SAY "......HELP-сообщение....."
        nInVar := 0
 
        DO WHILE NUMAND(KBDSTAT(), 8) = 8 .AND. nInVar = 0
                nInVar := INKEY()
        ENDDO
 
        DO CASE
        CASE nInVar = 306                               // <ALT><M>
                KEYSEND(CHARMIX("Искренне Ваш", CHR(0)), .T.)
        ENDCASE
 
        @ MAXROW(), 0
 
        RETURN
 

See Also: INPUTMODE()
KBDTYPE()
TRAPANYKEY()

 

 

 VGA28()
 Включает видеорежим с 28 строками.
------------------------------------------------------------------------------
 
  Синтаксис
 
    VGA28() --> lStatus
 
  Возвращаемое значение
 
    lStatus - логическое значение .T. при успешном переключении,
    а иначе .F..
 
  Описание
 
    Функция может использоваться только с VGA-адаптером.  Устанавливаемый
    ею режим применяется для работы с экранными шрифтами высотой 14
    пиксельных строк (как для EGA-адаптера), например, для использования


    EGA-шрифтов с VGA-адаптером.
 
  Примечания
 
  . Внимание! Данная функция не может применяться при открытых окнах.
 
  Примеры
 
  . Переключение в видеорежим VGA с 28 строками:
 
    IF ISVGA()
        VGA28()
    ENDIF
 
    @ 27, 00 SAY CENTER("Clipper")  // Последняя строка экрана
 
    WAIT
 
    CGA80()                         // Возвращение к режиму с 25 строками
 

See Also: CGA80()
EGA43()
GETMODE()
MONOCHROME()
SETSCRMODE()

 

 

 VGA50()
 Включает видеорежим VGA с 50 строками.
------------------------------------------------------------------------------
 
  Синтаксис
 
    VGA50() --> lSwitched
 
  Возвращаемое значение
 
    lSwitched - логическое значение .T. при успешном переключении,
    а иначе .F..
 
  Описание
 
    Функция может использоваться только с VGA-адаптером. Она включает
    видеорежим с 50 строками, автоматически увеличивая максимальные
    значения координат экрана, используемые Clipper. Благодаря этому, нет
    необходимости вызова функций SETMAXROW() и SETMAXCOL().
 
  Примечания
 
  . Внимание! Данная функция не может применяться при открытых окнах.
 
  Примеры
 
  . Переключение в видеорежим VGA с 50 строками:
 
    IF ISVGA()
        VGA50()
    ENDIF
 
    @ 49, 10 SAY "Clipper"              // Последняя строка экрана
 
    WAIT
 
    CGA80()                             // Возврат к режиму с 25 строками
 

See Also: CGA80()
EGA43()
GETMODE()
MONOCHROME()
SETSCRMODE()

 

 

 Введение в последовательный интерфейс
------------------------------------------------------------------------------
 COM_BREAK()   Выполняет сброс на линии передачи (BREAK)
 COM_CLOSE()   Закрывает последовательный порт и очищает буфер приема
 COM_COUNT()   Возвращает количество символов в буфере приема
 COM_CRC()     Формирует циклический контрольный код (CRC-код)


 COM_CTS()     Возвращает сигнал готовности к приему данных (CTS)
 COM_DCD()     Возвращает сигнал обнаружения несущей (DCD)
 COM_DOSCON()  Осуществляет видеовывод с кодами ANSI.SYS, через DOS
 COM_DSR()     Возвращает сигнал готовности внешнего устройства (DSR)
 COM_DTR()     Переключает сигнал готовности терминала (DTR)
 COM_ERRCHR()  Устанавливает символ-заменитель для неверно принятых символов
 COM_EVENT()   Возвращает код условия, вызвавшего прерывание
 COM_FLUSH()   Очищает буфер приема
 COM_GETIO()   Возвращает базовый адрес последовательного порта
 COM_GETIRQ()  Возвращает номер линии запроса прерывания (IRQ) порта
 COM_HARD()    Переключает режим автоматической аппаратной приостановки
 COM_INIT()    Инициализирует последовательный порт
 COM_KEY()     Устанавливает коды для отслеживания состояния порта
 COM_LSR()     Возвращает значение для регистра состояния линии (LSR)
 COM_MCR()     Устанавливает биты регистра управления модемом (MCR)
 COM_MSR()     Возвращает значение для регистра состояния модема (MSR)
 COM_NUM()     Возвращает наибольший из номеров доступных портов
 COM_OPEN()    Открывает порт и инициализирует буфера
 COM_READ()    Считывает символы из буфера приема
 COM_REMOTE()  Инсталлирует символ дистанционного прекращения передачи
 COM_RING()    Возвращает признак наличия входящего вызова (RING)
 COM_RTS()     Устанавливает сигнал запроса на передачу (RTS)
 COM_SCOUNT()  Возвращает количество остающихся в буфере фоновой передачи символов
 COM_SEND()    Осуществляет непосредственную или запускает фоновую передачу
 COM_SETIO()   Изменяет базовый адрес ввода/вывода для порта
 COM_SETIRQ()  Изменяет номер линии запроса прерывания (IRQ) порта
 COM_SFLUSH()  Очищает буфер передачи при работе в фоновом режиме
 COM_SKEY()    Инсталлирует коды для отслеживания фоновой передачи
 COM_SMODE()   Возвращает код текущего состояния передачи в фоновом режиме
 COM_SOFT()    Переключает режим автоматической программной приостановки
 COM_SOFT_R()  Возвращает состояние флага ожидания по получении XOFF-символа


 COM_SOFT_S()  Возвращает флаг автоматической посылки XOFF-символа
 XMOBLOCK()    Формирует блок данных для передачи по протоколу XMODEM
 XMOCHECK()    Проверяет полученный блок на соответствие протоколу XMODEM
 ZEROINSERT()  Вставляет нулевые биты после идущих подряд пяти единичных
 ZEROREMOVE()  Удаляет нулевые биты, вставленные ZEROINSERT()
 

 

  Введение
 
------------------------------------------------------------------------------
 
    Существует ряд способов использования последовательного порта. Модемы,
    считыватели штрихового кода и многие другие устройства передают данные
    через последовательный порт или управляются им. Несмотря на существующие
    стандарты, в каждом отдельном случае применяется свой тип связи.
 
    Функции, описываемые в этой главе, предназначены для обеспечения
    передачи данных и воздействия на разряды управляющих регистров
    последовательных портов.  Они не поддерживают конкретные протоколы или
    специфические системы. Однако для некоторых применений, подобных
    протоколу XMODEM, можно многое почерпнуть в примерах программ,
    входящих в комплект поставки Clipper Tools II/5.0 (CT II).
 
  Параметры порта
 
    Такие параметры порта, как скорость передачи, четность, длина символа
    и количество стоповых битов, могут корректироваться, причем, без
    закрытия  порта. Таким образом, скорость передачи можно изменять без
    потери содержимого буфера или прерывания установленного соединения
    (DTR-сигнал).
 
  Передача данных
 
    Функции CT II позволяют одновременно использовать до четырех
    последовательных портов, для которых могут быть выделены буферы приема
    и передачи размером до 64 Кбайтов каждый. В режиме фоновой передачи
    символы помещаются программой в буфер передачи, а принимаемые через
    порт символы с помощью обработчика прерываний записываются в буфер
    приема.  Из Clipper-программы можно определять количество поступивших


    в буфер приема символов, а также управлять количеством символов,
    считываемых из него. Буфер передачи может осуществлять управление
    программой с помощью функций специального управления. Кроме того, в
    фоновом режиме возможна реализация как программной, так и аппаратной
    приостановки передачи.
 
  Приостановка передачи
 
    CT II-функции поддерживают как аппаратную, так и программную
    приостановку передачи. При угрозе переполнения буфера приема
    передающей стороне посылается сигнал о том, что дальнейшая передача
    данных должна быть приостановлена. Выбор метода приостановки зависит
    от используемого режима передачи данных.
 
    Аппаратная приостановка передачи обычно использует сигналы RTS
    (Request To Send - запрос на передачу или, иначе, запрос приемника
    внешнего устройства на передачу ему данных) и CTS (Clear To Send -
    готовность к передаче или, иначе, готовность к приему данных внешним
    устройством). Поэтому эти сигналы не могут одновременно использоваться
    CT II-функциями при работе с модемом. Обычно модемы не могут
    обеспечивать передачу этих сигналов управления непосредственно по
    установленному телефонному соединению. В таких случаях должна
    применяться программная приостановка передачи.
 
    Программный вариант приостановки передачи для управления потоком
    данных использует символы из ASCII-кода. Существует стандарт,
    определяющий код символа XOFF (приостановка передачи данных) как
    CHR(19) и код символа XON (сброс приостановки) как CHR(17). Эти
    символы можно ввести с клавиатуры: CHR(19) соответствует комбинации
    клавиш <Ctrl><S>, а CHR(17) - комбинации <Ctrl><Q>.
 
    Для управления потоком данных путем приостановки передачи обе стороны
    должны программно проверять заполнение буфера приема, чтобы либо
    деактивизировать CTS-сигнал, либо послать XOFF-символ. В свою
    очередь, на передающем конце должна постоянно осуществляться проверка


    деактивизации CTS-сигнала от удаленной (принимающей) станции или
    получения XOFF-символа. В любом из этих случаев передача должна быть
    немедленно приостановлена.
 
    Поскольку обычно нет уверенности, что передающая станция при получении
    XOFF-символа приостановит передачу немедленно, то сигнал неготовности
    к приему выдается при заполнении буфера на 75%. Если передающая
    станция игнорирует это предупреждение, то устанавливаемого по
    умолчанию размера буфера в 100 байтов (резерв в 25 байтов) может быть
    недостаточно.
 
    Описанные методы приостановки передачи полностью управляются
    средствами CT II и не касаются интерфейсных адаптеров или
    Универсальных Асинхронных Приемопередатчиков (УАПП - Universal
    Asinchronous Reseiver Transmitters - UARTs).  Достаточно
    активизировать желаемый метод, чтобы позволить прикладной программе
    регулировать состояние буферов приема и передачи.
 
  Протоколы
 
    Как упоминалось выше, удаленная передача данных (с использованием
    модема), обычно осуществляется с реализацией программной приостановки.
    Существенным недостатком этого метода является то, что символы
    управления потоком, CHR(19) и CHR(17), не должны встречаться в
    исходных данных. Поскольку это делает невозможным передачу двоичных
    файлов, то для последних, должны использоваться специальные протоколы
    передачи. В поставляемые с CT II примеры программ включены
    XMODEM-процедуры, написанные на Clipper. Используя CT II-функции
    последовательного интерфейса и эти примеры в качестве основы, можно
    легко создать и другие протоколы.
 
    Поскольку реализация на Clipper стандартизованных протоколов не
    предоставляет реальных преимуществ, то они не включены в CT II.
 
  Управляющие сигналы
 
    Все важные управляющие сигналы последовательного порта, такие как CD
    (Carrier Detect - определение несущей), DTR (Data Terminal Ready -
    готовность терминала или, иначе, готовность передатчика внешнего


    устройства к передаче данных) и т.д., можно установить и опросить.
 
    С целью упрощения программирования для этих сигналов CT II
    обеспечивает отдельные функции, а для управляющих и контрольных
    сигналов, используемых реже, предоставляется возможность
    непосредственной записи в соответствующие регистры УАПП и считывания
    из них.
 
  Прямой доступ к аппаратным средствам
 
    Все CT II-функции последовательного интерфейса адресуются
    непосредственно к аппаратным средствам. Работа через вызовы BIOS или
    DOS не практикуется. Поэтому для нормального функционирования
    необходимо полное соответствие технических средств стандартам для
    IBM PC.
 
    Для правильного функционирования последовательных портов необходимо
    использование в них УАПП типа 8250 или совместимого с ним типа 16450.
    При использовании УАПП 8250, передача, управляемая прерываниями,
    возможна со скоростью до 2400 бод. Технические детали, относящиеся к
    портам и регистрам УАПП, можно найти в соответствующих инструкциях,
    таких как техническое руководство IBM.
 
  Адреса ввода/вывода и запросы прерываний
 
    Исходно в CT II установлены следующие значения для четырех
    обслуживаемых портов:
 
    Установочные значения для последовательных портов
    --------------------------------------------------------------------
     Порт       Адрес ввода/вывода  IRQ (линия запроса прерывания)
    --------------------------------------------------------------------
     COM1:      3F8H                4 (в соответствии с соглашениями)
     COM2:      2F8H                3 (в соответствии с соглашениями)
     COM3:      3E8H                4 (нет принятых соглашений)
     COM4:      2E8H                3 (нет принятых соглашений)
    --------------------------------------------------------------------
 
    В отличие от COM1 и СОМ2 адреса ввода/вывода и линии запроса
    прерываний для других портов часто не совпадают с приведенными выше.


    При использовании неполностью совместимых аппаратных средств
    необходимо применять дополнительные функции COM_SETIO() и
    COM_SETIRQ(), позволяющие установить желаемые значения адресов
    ввода/вывода и линий запроса прерываний для программ обслуживания
    портов. Однако неправильные установки, если они входят в конфликт с
    установками для других аппаратных средств, могут привести к потере
    данных или повреждению аппаратуры.
 
    Правильные установочные значения для аппаратных средств можно найти в
    их документации.
 
  Возможные конфликты установок аппаратных средств
 
    CT II-функция COM_NUM() по четырем упомянутым выше адресам распознает
    наличие установленных портов от СОМ1 до СОМ4. Если, например,
    компьютер имеет встроенный ArcNet-адаптер, то это может привести к
    конфликту адресов ввода/вывода. Обращение внутренней функции CT II по
    адресу 02EAh как к последовательному порту, который по управлению
    отличается от ArcNet-адаптера, может нарушить существующие сетевые
    связи. В таких случаях может помочь вызов функции COM_SETIO() с
    заданием 0 в качестве адреса ввода/вывода:
 
    COM_SETIO(<nComPort>,0)
 
    После выполнения этого вызова во внутренней таблице будут уничтожены
    соответствующие стандартные адреса и конфликтующие аппаратные средства
    будут защищены от доступа со стороны CT II-функций. Однако это
    возможно лишь при условии, что функция COM_NUM() еще не вызывалась,
    поскольку иначе порт будет уже помечен как используемый ("in use").
 
  Дополнительные замечания
 
    Как видно из приведенной выше таблицы установочных значений, CT II
    поддерживает совместно используемые прерывания, т.е. использование
    одной и той же линии запроса прерывания для нескольких портов. Однако
    стандартные аппаратные средства последовательного интерфейса обычно не
    поддерживают совместно используемые прерывания. Для этой цели


    производителями аппаратуры выпускаются специальные многопортовые
    адаптеры.
 
    Внимание! Работа с совместно используемыми прерываниями не
    гарантируется.  CT II поддерживает до 4 портов, каждый из которых
    имеет свои буфера приема и передачи объемом до 64 Кбайтов и может
    передавать информацию со скоростью до 19200 бод. Однако это не
    означает, что все ресурсы могут использоваться одновременно на верхнем
    пределе возможностей. Выделение 8 буферов по 64 Кбайта невозможно, так
    как они обслуживаются по прерываниям и поэтому должны располагаться в
    основной (реальной) памяти. Кроме того, количество портов и
    максимально реализуемая ими скорость зависят от типа используемого
    компьютера.
 
  Отличия от других систем программирования
 
    CT II-функции COM_OPEN() и COM_INIT() не влияют на управляющие сигналы
    в отличие от аналогичных функций других языков, например BASIC. Для
    управления модемом через последовательный порт с использованием
    Clipper необходимо устанавливать DTR и другие сигналы, применяя
    соответствующие CT II-функции.
 

 

 COM_BREAK()
 Выполняет сброс на линии передачи (BREAK).
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_BREAK(<nComPort>, [<nDuration>]) --> lSuccess
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
    <nDuration> - необязательный числовой параметр, задающий время
    выполнения сброса в миллисекундах в диапазоне значений от 1 до 65535.
    По умолчанию 100.
 
  Возвращаемое значение
 
    lSuccess - логическое значение .T. при успешном сбросе, а иначе .F..
 
  Описание
 
    Выполнение сброса на линии передачи (BREAK) заключается в удержании на
    ней сигнала соответствующего уровня в течение фиксированного периода
    времени, как правило, продолжительностью от 100 до 350 мс.


 
  Примеры
 
  . Установка BREAK для порта 1 длительностью 200 мс:
 
    COM_BREAK(1, 200)
 

See Also: COM_KEY()
COM_EVENT()

 

 

 COM_CLOSE()
 Закрывает последовательный порт и очищает буфер приема.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_CLOSE(<nComPort>) --> lClosed
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
  Возвращаемое значение
 
    lClosed - логическое значение .T. при закрытии ранее открытого порта,
    а иначе .F..
 
  Описание
 
    Функция закрывает заданный порт, освобождает используемые им буфера и
    сбрасывает в 0 сигналы DTR, RTS и все разряды MCR. Установленное
    модемное соединение разрушается, а остававшиеся в буфере символы
    теряются.
 
  Примечания
 
  . DTR (Data Terminal Ready) - готовность терминала или, другими
    словами, готовность передатчика внешнего устройства к передаче данных.
 
  . RTS (Request To Send) - запрос на передачу или, другими словами,
    запрос приемника внешнего устройства на передачу ему данных.
 
  . MCR (Modem Control Register) - регистр состояния модема.
 
  Примеры
 
  . Прием в порт 1 и его закрытие:
 
    nChar := COM_COUNT(1)               // Количество символов в буфере
 
    IF nChar > 0
        * Чтение всего содержимого буфера
        cContent := COM_READ(1, nChar)
    ENDIF
 
    COM_CLOSE(1)
 

See Also: COM_INIT()
COM_DTR()
COM_OPEN()
COM_RTS()

 

 

 COM_COUNT()
 Возвращает количество символов в буфере приема.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_COUNT(<nComPort>) --> nTotalChars
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 


  Возвращаемое значение
 
    nTotalChars - число символов, находящихся в буфере приема заданного
    порта, или (-1) при не открытом порте.
 
  Описание
 
    Функция возвращает количество символов в заданном буфере приема, что
    позволяет определить, сколько символов может быть прочитано функцией
    COM_READ().
 
  Примеры
 
  . Определение количества символов принятых через порт 1:
 
    nChar := COM_COUNT(1)               // Число символов в буфере
 
    IF nChar > 0
        COM_READ(1, 1)                  // Чтение одного символа
    ENDIF
 

See Also: COM_OPEN()
COM_READ()

 

 

 COM_CRC()
 Формирует циклический контрольный код (CRC-код).
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_CRC(<cString>, [<nStart>], [<nPolynomial>]) --> nCRCValue
 
  Параметры
 
    <cString> - символьная строка, для которой производится CRC-контроль.
 
    <nStart> - необязательный числовой параметр, задающий начальное
    значение, добавляемое к CRC-коду текущей строки при формировании
    CRC-кода для последовательности строк. По умолчанию 0.
 
    <nPolynomial> - необязательный числовой параметр, задающий образующий
    полином.  Максимальное значение определяется 17-битовым двоичным
    числом. По умолчанию используется полином шестнадцатой степени,
    соответствующий рекомендации X.25.
 
  Возвращаемое значение
 
    nCRCValue - число в диапазоне от 0 до 65535, содержащее 16-битовый
    CRC-код.
 
  Описание
 
    CRC (Cyclic Redundancy Check) - циклический избыточный контроль.
    Функция позволяет существенно упростить создание собственных
    протоколов типа XMODEM или KERMIT, использующих, как и многие другие
    протоколы передачи данных, CRC-кодирование для распознавания ошибок
    передачи.
 
    Значение CRC-кода зависит от используемого полинома, задаваемого как


    целое число.  Благодаря этому функцию можно рассматривать как
    универсальную утилиту. По умолчанию используется полином шестнадцатой
    степени, соответствующий рекомендации X.25 МККТТ (CCITT) и
    используемый в системах Х.25 и XMODEM.
 
    Некоторые примеры полиномов приведены в таблице:
 
    Таблица 3-1. Примеры задания образующих полиномов
    --------------------------------------------------------------------
    Наименование        Значение <nPolynomial>  Полином
    --------------------------------------------------------------------
    Parity              3                       2^1+1
    LCR-8               257                     2^8+1
    CRC-12              5011                    2^12+2^11+2^3+2^2+2^1+1
    CRC-16 X.25         69665                   2^16+2^12+2^5+1
    CRC-16              98309                   2^16+2^15+2^2+1
    --------------------------------------------------------------------
 
  Примечания
 
  . Если параметр <nStart> опущен или имеет значение 0, то при
    контроле <cString> по CRC-коду, не будет фиксироваться потеря
    начальных символов CHR(0).
 
  . Для построения блоков для протокола XMODEM можно использовать
    функцию XMOBLOCK().
 
  . CRC-кодом называется контрольная порция информации (обычно
    добавляемая к основной), формируемая по правилам умножения полиномов и
    позволяющая выявлять, а в некоторых случаях и исправлять ошибки,
    возникающие при передаче двоичной информации.
 
  . МККТТ - Международный Консультативный Комитет по Телефонии и
    Телеграфии - международная организация, вырабатывающая рекомендации по
    стандартизации технических и программных средств передачи информации.
 
  Примеры
 
  . Простое вычисление CRC-кода:
 
    COM_CRC("abc")                      // 40406
    COM_CRC("cba")                      // 54260
 
  . Вычисление для последовательности строк:


 
    nCRC1 := COM_CRC("123")
    nCRC2 := COM_CRC("456", nCRC1)
 
    ? nCRC2 == COM_CRC("123456")        // .T., если значения равны
 
  . Формирование блока передачи с добавлением CRC-кода:
 
    cData := "ABCDEFGHIJKLMNOP"
    nCRC := COM_CRC(cData)
 
    cCRCSTR := I2BIN(CRC)               // Преобразование CRC-кода в
                                        // строку символов
    cCRCSTR := CHARSWAP(cCRCSTR)        // Перестановка байтов
    cBlock := cData + cCRCSTR           // Передаваемый блок
 
    * CRC-код, подсчитываемый для принятого блока, должен быть равен 0
    ? COM_CRC(cBlock) == 0              // .T. при правильной передаче
 

See Also: XMOBLOCK()

 

 

 COM_CTS()
 Возвращает сигнал готовности к приему данных (CTS).
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_CTS(<nComPort>) --> lCTSActive
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
  Возвращаемое значение
 
    lCTSActive - логическое значение, соответствующее состоянию
    CTS-сигнала и бита 5 регистра MSR:
 
    --------------------------------------------------------------------
    Значение    Состояние CTS   Значение бита 5 MSR
    --------------------------------------------------------------------
    .T.         Активно         1
    .F.         Пассивно        0
    --------------------------------------------------------------------
 
    MSR (Modem Status Register) - регистр состояния модема.
 
  Описание
 
    CTS (Clear To Send) - готовность к передаче или, другими словами,
    готовность к приему данных внешним устройством, например, модемом.
 
    Функция возвращает состояние CTS-сигнала. Возможность применения CTS
    для аппаратной приостановки передачи или других целей определяется


    используемыми аппаратными средствами.
 
  Примечания
 
  . Для работы с DELTA-CTS (изменение CTS-сигнала) следует использовать
    функцию COM_MSR().
 
  Примеры
 
  . Проверка готовности по CTS-сигналу и передача данных:
 
    DO WHILE .NOT. COM_CTS(1)           // Ожидание CTS
        * ...
    ENDDO
 
    COM_SEND(1, "Доброе утро")          // Передача
 

See Also: COM_HARD()
COM_MSR()

 

 

 COM_DCD()
 Возвращает сигнал обнаружения несущей (DCD).
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_DCD(<nComPort>) --> lDCDActive
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
  Возвращаемое значение
 
    lDCDActive - логическое значение, соответствующее состоянию
    DCD-сигнала и бита 8 регистра MSR:
 
    --------------------------------------------------------------------
    Значение    Состояние DCD   Значение бита 8 MSR
    --------------------------------------------------------------------
    .T.         Активно         1
    .F.         Пассивно        0
    --------------------------------------------------------------------
 
    MSR (Modem Status Register) - регистр состояния модема.
 
  Описание
 
    DCD (Data Carrier Detect) - обнаружение несущей.
 
    Функция возвращает состояние DCD-сигнала, который обычно при
    использовании модема указывает на установление удаленного соединения.
 
  Примечания
 
  . Для работы с DELTA-DCD (изменение DCD-сигнала) следует использовать
    функцию COM_MSR().
 
  Примеры
 
  . Проверка установления связи по DCD-сигналу:
 
    ? "Установление соединения"
 
    DO WHILE .NOT. COM_DCD(1)                   // Ожидание несущей (DCD)
        * ...
    ENDDO
 
    ? "Несущая обнаружена - связь установлена..."


 

See Also: COM_MSR()

 

 

 COM_DOSCON()
  Осуществляет видеовывод, ориентированный на драйвер ANSI.SYS, через DOS.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_DOSCON(<cString>, [<nLine>], [<nColumn>]) --> cNull
 
  Параметры
 
    <cString> - символьная строка, выводимая на экран через DOS.
 
    <nLine> - необязательный числовой параметр, задающий номер строки
    начала вывода.  По умолчанию строка позиции курсора.
 
    <nColumn> - необязательный числовой параметр, задающий номер столбца
    начала вывода. По умолчанию столбец позиции курсора.
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция выводит символьную строку через DOS, что может использоваться,
    например, для интерпретации драйвером ANSI.SYS управляющей
    ANSI-последовательности. С помощью функции ISANSI() можно определить,
    инсталлирован ли драйвер ANSI.SYS.
 
  Примечания
 
  . Для использования данной функции перенаправление видеовывода в
    окно должно быть выключено вызовом DSETWINDOW(.F.). Иначе вывод будет
    направляться через Clipper-драйвер и функционировать как принтерные
    команды (?) с указанием позиций.
 
  Примеры
 
  . Вывод через DOS, если инсталлирован ANSI.SYS:
 
    DSETWINDOW(.F.)                     // Важно для ISANSI()
    cData := COM_READ(1)                // Чтение данных
    IF ISANSI()                         // Инсталлирован ли драйвер ANSI?
        COM_DOSCON(cData)
    ELSE
        * Собственная ANSI-обработка
    ENDIF
 

See Also: ISANSI()

 

 

 COM_DSR()
 Возвращает сигнал готовности внешнего устройства к работе (DSR).
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_DSR(<nComPort>) --> lDSRActive


 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
  Возвращаемое значение
 
    lDSRActive - логическое значение, соответствующее состоянию
    DSR-сигнала и бита 6 регистра MSR:
 
    --------------------------------------------------------------------
    Значение    Состояние DSR   Значение бита 6 MSR
    --------------------------------------------------------------------
    .T.         Активно         1
    .F.         Пассивно        0
    --------------------------------------------------------------------
 
    MSR (Modem Status Register) - регистр состояния модема.
 
  Описание
 
    DSR (Data Set Ready) - готовность внешнего устройства, например,
    модема к работе.
 
    Функция возвращает состояние DSR-сигнала, устанавливаемого внешним
    устройством.
 
  Примечания
 
  . Для работы с DELTA-DSR (изменение DSR-сигнала) следует
    использовать функцию COM_MSR().
 
  Примеры
 
  . Проверка установления связи по активизации DSR:
 
    DO WHILE .NOT. COM_DSR(1)           // Ожидание DSR (вызова)
        * ...
    ENDDO
 
    ? "Связь установлена."
 

See Also: COM_MSR()

 

 

 COM_DTR()
 Переключает сигнал готовности терминала (DTR).
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_DTR(<nComPort>, [<lNewDTRStatus>]) --> lOldDTRStatus
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
    <lNewDTRStatus> - необязательный логический параметр, задающий при
    значении .T.  активизацию, а при .F. деактивизацию DTR-сигнала. По
    умолчанию состояние выходного DTR-сигнала не изменяется.
 
  Возвращаемое значение
 
    lOldDTRStatus - логическое значение, соответствующее состоянию
    DTR-сигнала и бита 1 регистра MSR:


 
    --------------------------------------------------------------------
    Значение    Состояние DTR   Значение бита 1 MSR
    --------------------------------------------------------------------
    .T.         Активно         1
    .F.         Пассивно        0
    --------------------------------------------------------------------
 
    MSR (Modem Status Register) - регистр состояния модема.
 
  Описание
 
    DTR (Data Terminal Ready) - готовность терминала или, другими словами,
    готовность источника к передаче данных.
 
    Функция позволяет изменить состояние выходного DTR-сигнала и сохранить
    в переменной его предыдущее состояние.
 
  Примечания
 
  . При выполнении функции COM_OPEN() не осуществляется автоматическая
    активизация DTR-сигнала, в то время как выполнение COM_CLOSE()
    сопровождается его автоматической деактивизацией.
 
  Примеры
 
  . Активизация DTR-сигнала (т.к. COM_OPEN() ее не производит):
 
    nBuff_size := 4000                          // Размер буфера
    lComOk := COM_OPEN(1, nBuff_size)           // Открытие порта 1
    IF lComOk
        COM_DTR(1, .T.)                         // Активизация DTR-сигнала
        *...
    ENDIF
 

See Also: COM_CLOSE()
COM_MCR()
COM_OPEN()

 

 

 COM_ERRCHR()
 Устанавливает символ-заменитель для неверно принятых символов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_ERRCHR(<nComPort>, [<nErrorChar|cErrorChar>] --> lChanged
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
    <nErrorChar|cErrorChar> - необязательный параметр, задающий в форме
    символьной строки или в виде числового ASCII-кода в диапазоне от 0 до
    255 заменитель для неверно принятых символов. По умолчанию функции
    последовательных портов не записывают в буфер приема


    символ-заменитель.
 
  Возвращаемое значение
 
    lChanged - логическое значение .T. для открытого порта, а иначе .F..
 
  Описание
 
    При передаче данных часты случаи искажений на линии, при которых
    символы из УАПП могут приниматься с признаком ошибки. В этих случаях
    либо должна вызваться процедура исправления ошибки (напр., COM_KEY()),
    либо неправильные символы должны помечаться.
 
    Поскольку при удаленной передаче в таких случаях принимается "мусор",
    то обычно для индикации ошибки используется символ CHR(177). С помощью
    данной функции можно задать другой символ-заменитель или подавить его
    использование.
 
  Примечания
 
  . Для определения наличия неверно принятых символов следует
    опрашивать регистр состояния линии LSR (Line Status Register).
 
  Примеры
 
  . Использование CHR(250) для индикации символов, неверно принятых
    через порт 2:
 
    ? COM_ERRCHR(2, 250)        // .T. при успешной установке
 
  . Отключение использования символа-заменителя для порта 4:
 
    ? COM_ERRCHR(4)             // .T. при успешной отмене
 

See Also: COM_LSR()
COM_READ()

 

 

 COM_EVENT()
 Возвращает код условия, вызвавшего прерывание.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_EVENT(<nComPort>, <nMode>) --> nCode
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
    <nMode> - числовой параметр, задающий целым числом в диапазоне от 1 до
    5 режим возвращаемого значения.
 
  Возвращаемое значение
 
    nCode - числовой код, интерпретируемый в соответствии с таблицей в
    зависимости от значения параметра <nMode>:
 
    Таблица 3-2. Содержание возвращаемой информации
    --------------------------------------------------------------------


    <nMode>     Возвращаемая информация
    --------------------------------------------------------------------
    1   ASCII-код принятого символа, или (-1), если нет принятого символа
    2   Состояние регистра MSR в момент прерывания
    3   Состояние регистра LSR в момент прерывания
    4   Содержимое внутреннего счетчика ошибок, фиксируемых через LSR и
        произошедших после вызова COM_INIT()
    5   Количество символов, потерянных в связи с заполнением буфера
        приема на 100%
    --------------------------------------------------------------------
 
  Описание
 
    Функция позволяет процедуре, заданной Clipper-командой SET KEY TO,
    определить причину прерывания, эмулируемого помещением символа в буфер
    клавиатуры. Тип информации, возвращаемой функцией, задается параметром
    <nMode>.
 
  Примечания
 
  . При открывании порта или новом вызове функции COM_KEY() вся
    информация, за исключением счетчика ошибок, сбрасывается.
 
  . Текущие значения как регистра состояния модема - MSR (Modem Status
    Register), так и регистра состояния линии - LSR (Line Status Register)
    объединяются с предыдущими значениями операцией "логическое ИЛИ".
    Предыдущие значения сохраняются в специально выделенных областях
    памяти.
 
  . CT II подсчитывает только ошибки переполнения, четности и кадров
    (биты с 1 по 3).
 
  . Внимание! Входные линии на PC-совместимых интерфейсных адаптерах
    обычно "электрически не нагружены", что может привести к
    непредсказуемым результатам при опросе MSR.
 
  Примеры
 
  . Определение количества обнаруженных ошибок:
 
    nErrorCnt := COM_EVENT(1, 4)
 
    IF nErrorCnt > 25
        * Больше 25 ошибок
        ? "Слишком много ошибок - завершение программы!"
        lRelease := .T.
    ENDIF
 

See Also: COM_KEY()

 

 

 COM_FLUSH()
 Очищает буфер приема.


------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_FLUSH(<nComPort>) --> lClear
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
  Возвращаемое значение
 
    lClear - логическое значение .T. при успешной очистке буфера, а иначе
    .F..
 
  Описание
 
    Функция позволяет удалить все символы из буфера приема без определения
    текущего их количества и удаления процедурой чтения. Функция
    гарантирует полную очистку буфера, в то время как между вызовами
    COM_COUNT() и COM_READ() могут быть приняты новые символы.
 
  Примечания
 
  . Функция очищает буфер, только если порт открыт.
 
  Примеры
 
    cHayes := "ATZ"             // Команда для сброса модема Hayes
    COM_SEND(1, cHayes)         // Посылка команды в линию связи
    INKEY(1)                    // Пауза 1 с
    COM_FLUSH(1)                // Игнорирование ответного сообщения
 

See Also: COM_COUNT()
COM_READ()

 

 

 COM_GETIO()
 Возвращает базовый адрес последовательного порта.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_GETIO(<nComPort>) --> nIOPort
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
  Возвращаемое значение
 
    nIOPort - числовое значение базового адреса ввода/вывода, или (-1) при
    недопустимом номере порта.
 
  Описание
 
    Функция возвращает базовый адрес ввода/вывода (I/O Address)
    последовательного порта, используемый CT II-функциями. Эта величина
    имеет значение только для функций CT II. Функция не может определить
    адрес ввода/вывода, установленный в интерфейсном адаптере.
 
  Примеры
 
  . Вывод адреса ввода/вывода порта 1:
 
    ? COM_GETIO(1)                      // 1016


 
  . Получение адреса в шестнадцатеричной форме:
 
    ? NTOC(COM_GETIO(1), 16)            // "3F8"
 
  . Задание недопустимого номера порта:
 
    ? COM_GETIO(5)                      // -1
 

See Also: COM_GETIRQ()
COM_SETIO()
COM_SETIRQ()

 

 

 COM_GETIRQ()
  Возвращает номер линии запроса прерывания (IRQ) последовательного порта.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_GETIRQ(<nComPort>) --> nIRQ
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
  Возвращаемое значение
 
    nIRQ - номер линии запроса прерывания (IRQ), или (-1) при недопустимом
    номере порта.
 
  Описание
 
    Функция возвращает номер линии запроса прерывания (IRQ)
    последовательного порта, используемый CT II-функциями. Эта величина
    имеет значение только для функций CT II.  Функция не может определить
    IRQ, установленный в интерфейсном адаптере.
 
  Примеры
 
  . Вывод IRQ для порта 2:
 
    ? COM_GETIRQ(2)            // 3
 
  . Задание недопустимого номера порта:
 
    ? COM_GETIRQ(5)            // -1
 

See Also: COM_GETIO()
COM_SETIO()
COM_SETIRQ()

 

 

 COM_HARD()
 Переключает режим автоматической аппаратной приостановки передачи.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_HARD(<nComPort>, [<lNewHandshake>], [<lDTR/DSR>]) --> lOldHandshake
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
    <lNewHandshake> - необязательный логический параметр, задающий при
    значении .T.  включение, а при значении .F. выключение режима
    автоматической аппаратной приостановки передачи. По умолчанию текущий
    режим не изменяется.


 
    <lDTR/DSR> - необязательный логический параметр, задающий при значении
    .T.  использование сигналов DTR/DSR, а при значении .F. использование
    сигналов RTS/CTS для реализации автоматической аппаратной приостановки
    передачи. По умолчанию состояние режима не изменяется.
 
  Возвращаемое значение
 
    lOldHandshake - логическое значение .T. при предыдущем состоянии
    режима во включенном состоянии, или .F. при выключенном.
 
  Описание
 
    Функция включает или выключает режим автоматической аппаратной
    приостановки передачи. Программная или аппаратная приостановка
    передачи используется во избежание потери символов при переполнении
    буфера приема, имеющего ограниченные размеры.
 
    При автоматической аппаратной приостановке передачи обычно используют
    сигналы RTS (Request To Send - запрос передачи) и CTS (Clear To Send -
    готовность к передаче).  Если функцией включена автоматическая
    аппаратная приостановка передачи, то CTS деактивизируется при
    заполнении буфера приема на 75%. При уменьшении заполненности буфера
    до 50% или менее, CTS снова активизируется.
 
    Многими принтерами для предотвращения переполнения буфера вместо
    выходного сигнала RTS используется DTR, а вместо входного сигнала CTS
    используется DSR. Для поддержки такого режима функцию следует вызывать
    со значением .T. параметра <lDTR/DSR>.
 
  Примечания
 
  . Автоматическая аппаратная приостановка передачи поддерживается
    только в режиме фоновой передачи данных, активизируемом вызовом
    функции COM_OPEN() с заданием размера буфера передачи.
 
  . Функция управляет переключением режима как для ввода, так и для
    вывода.
 
  . При использовании аппаратной приостановки передачи сигнал RTS не
    должен изменяться функциями COM_RTS() или COM_MCR().
 
  Примеры
 
  . Включение режима аппаратной приостановки передачи для порта 2:


 
    COM_OPEN(2, 1000, 1000)     // Открытие COM2 с буфером фоновой
                                // передачи
    COM_HARD(2, .T.)            // Включение аппаратной приостановки
                                // передачи по RTS/CTS для порта 2
 

See Also: COM_READ()
COM_SEND()
COM_SOFT()

 

 

 COM_INIT()
 Инициализирует последовательный порт.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_INIT(<nComPort>, [<nBaudRate>], [<cParity>],
        [<nDataLength>], [<nStopBits>]) --> lInitialized
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
    <nBaudRate> - необязательный числовой параметр, задающий скорость
    передачи данных в бодах. Возможны значения 300, 600, 1200, 2400, 4800,
    9600 и 19200. По умолчанию 300.
 
    <cParity> - необязательный символьный параметр, задающий одним из
    символов, приведенных в следующей таблице, способ контроля при
    передаче данных. По умолчанию "N".
 
    --------------------------------------------------------------------
    Символ      Способ контроля
    --------------------------------------------------------------------
     E          По четности (Even)
     O          По нечетности (Odd)
     M          По установленному биту (Mark)
     S          По сброшенному биту (Mark)
     N          Контроль не используется (None)
    --------------------------------------------------------------------
 
    <nDataLength> - необязательный числовой параметр, задающий количество
    битов в символе данных (7 или 8). По умолчанию 8.
 
    <nStopBits> - необязательный числовой параметр, задающий количество
    стоповых битов (1 или 2). По умолчанию 1.
 
  Возвращаемое значение
 
    lInitialized - логическое значение .T. при успешной инициализации с


    заданными параметрами, а иначе .F..
 
  Описание
 
    После открытия последовательного порта должна быть произведена его
    инициализация, для чего вызывается данная функция с указанием скорости
    передачи данных (в бодах), длины символа данных (в битах), способа
    контроля и количества стоповых битов.
 
    В настоящее время в системах низкоскоростной компьютерной связи
    используется конфигурация "300 - 9600 бод, 8, N, 1", что означает:
    данные длиной 8 битов, без контроля четности и 1 стоповый бит.
 
    Важно, что все эти параметры могут быть изменены в процессе работы.
    Производимая функцией инициализация не оказывает воздействия ни на
    буфер данных, ни на регистр состояния модема (сигнал DTR и т.д.).
 
  Примечания
 
  . Для инициализации порт должен быть предварительно открыт функцией
    COM_OPEN().
 
  Примеры
 
  . Открытие и инициализация порта:
 
    nBuff_size := 4000                  // Буфер на 4000 символов
    lComOk := COM_OPEN(1, nBuff_size)   // Открытие порта
 
    If lComOk
       * Порт открыт, теперь он будет инициализирован следующими
       * значениями: 1200 бод, контроля четности нет, длина данных
       * 8 битов, 1 бит останова.
 
       lInitOk := COM_INIT(1, 1200, "N", 8, 1)
 
       IF .NOT. lInitOk
          ? "Порт не может быть инициализирован!"
       ENDIF
    ENDIF
 
  . Вариант вызова без трех последних параметров. Их значения будут
    установлены по умолчанию:
 
    lInitOk := COM_INIT(1, 1200)        // Инициализация значениями
                                        // 1200, N, 8, 1
 

See Also: COM_CLOSE()
COM_OPEN()

 

 

 COM_KEY()
 Устанавливает коды для отслеживания состояния порта.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_KEY(<nComPort>, [<nKeyValue1|cKeyValue1>],


        [<nKeyValue2|cKeyValue2>]) --> lActive
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
    <nKeyValue1|cKeyValue1> - необязательный параметр, задающий код
    клавиши, помещаемый в буфер клавиатуры в случае прерывания.
 
    Параметр задается в виде числового значения INKEY-кода, используемого
    в Clipper- команде SET KEY TO, или в формате символьной строки.
    По умолчанию отслеживание прерываний для порта отключается.
 
    <nKeyValue2|cKeyValue2> - необязательный параметр, задающий код
    клавиши, помещаемый в буфер клавиатуры при заполнении буфера приема на
    75% или более.
 
    Параметр задается в виде числового значения INKEY-кода, используемого
    в Clipper-команде SET KEY TO, или в формате символьной строки.
    По умолчанию отслеживание переполнения буфера приема для порта
    отключается.
 
  Возвращаемое значение
 
    lActive - логическое значение .T. при включении функцией хотя бы
    одного отслеживания, а иначе .F..
 
  Описание
 
    Функция позволяет организовать наблюдение за портом при нахождении
    программы в режиме ожидания, например, по команде READ. Таким образом,
    различные события могут быть отмечены помещением в буфер клавиатуры
    кода клавиши, выбранной программистом. Помещение производится при
    следующих событиях:
 
  . Поступление данных в порт.
 
  . Обнаружение ошибки передачи данных или сброса на линии передачи
    (BREAK), отмечаемых в регистре состояния линии (LSR).
 
  . Изменение состояния одного из сигналов регистра состояния модема
    (MSR).
 
  . Заполнение буфера приема на 75%.
 
    Код клавиши, заданный параметром <nKeyValue1|cKeyValue1>, позволяет
    отслеживать процедурой, заданной Clipper-командой SET KEY TO,
    изменение состояния регистров MSR и LSR, обнаружение ошибок и
    получение отдельных данных.


Вся информация сохраняется во внутренней
    области памяти и может быть получена с помощью функции COM_EVENT().
    Без сохранения информация будет потеряна, т.к. регистры и флаги,
    отмечающие прерывание, при чтении автоматически сбрасываются.
 
    Код клавиши, заданный параметром <nKeyValue2|cKeyValue2>, позволяет
    отслеживать процедурой, заданной Clipper-командой SET KEY TO,
    заполнение буфера приема на 75% или более. При этом в буфер клавиатуры
    не будет помещаться код, заданный параметром <nKeyValue1|cKeyValue1>
    при получении символов в буфер приема.  Отслеживание изменений
    состояний MSR и LSR при этом продолжается.
 
  Примечания
 
  . MSR (Modem Status Register) - регистр состояния модема. LSR (Line
    Status Register) - регистр состояния линии.
 
  . Состояния различных интерфейсных регистров объединяются во
    внутренней памяти при "обслуживании" события новым вызовом данной
    функции. Это означает, что произошедшие в это время изменения не будут
    потеряны.
 
  . Функция должна повторно вызываться после каждого выполненного
    прерывания, при этом производится сброс информации, накопленной во
    внутренней памяти.
 
  . Отслеживание заполнения буфера на 75% производится независимо от
    вызова функций COM_SOFT() или COM_HARD().
 
  Примеры
 
  . Процедура COMERRORS() вызывается при помещении в буфер клавиатуры
    символа CHR(227), если портом 2 будет обнаружена ошибка или изменится
    состояние сигнала модема. При заполнении буфера приема на 75% или
    более, в буфер клавиатуры помещается CHR(228) и вызывается процедура
    BUFFERFULL():
 
    #include NT2COM.CH                  // Определения символьных
                                        // констант для интерфейса.
    COM_OPEN(2, 1000)                   // Открытие порта 2
    COM_INIT(2, 1200, "N", 8, 1)        // Инициализация порта 2
 
    SET KEY 227 TO ComErrors


    SET KEY 228 TO BufferFull
 
    COM_KEY(2, 227, 228)                // Отслеживание порта 2
 
    cName := SPACE(20)                  // Выполнение GET..READ
    @ 10, 10 GET cName                  // может сопровождаться вызовом
    READ                                // процедур обслуживания
                                        // прерываний по инициативе порта.
 
    COM_KEY(2)                          // Отключение отслеживания
    RETURN
 
    PROCEDURE COMMERRORS (A, B, C)
       nMSR_Status := COM_EVENT(2, 2)   // Чтение собранных MSR-данных
       nLSR_Status := COM_EVENT(2, 2)   // Чтение собранных LSR-данных
 
       * Повторная активизация прерываний, сброс внутренних
       * значений COM_EVENT().
       COM_KEY(2, 227, 228)
 
       IF ISBIT(nMSR_Status, MSR_RI)    // Установлен бит вызова?
       ? "Обнаружен входящий вызов!"
       ELSE
          IF ISBIR(nLSR_Status, LSR_Break) // Проверка BREAK
             ?"Обнаружен BREAK!"
          ENDIF
       ENDIF
       RETURN
 
    PROCEDURE BUFFERFULL(A, B, C)
        * Должен быть прочитан буфер приема!
        COM_KEY(2, 227, 228)            // Повторная активизация
        cData := COM_READ(2)            // Чтение всех данных
        SELECT MESSDAT
        REPLACE ComDat WITH cData       // Сохранение данных
        SKIP
        SELECT INPUT
        RETURN
 

See Also: COM_COUNT()
COM_EVENT()
COM_MSR()
LASTKLINE()
LASTKPROC()

 

 

 COM_LSR()
  Возвращает значение для регистра состояния линии (LSR).
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_LSR(<nComPort>) --> nLSR
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
  Возвращаемое значение
 
    nLSR - число, содержащее комбинацию битов регистра состояния линии
    (LSR), назначение которых приведено в таблице:


 
    Таблица 3-3. Кодирование битов регистра LSR
    --------------------------------------------------------------------
    Бит Число   Симв. константа Назначение
    --------------------------------------------------------------------
        0       LSR_ERROR               Ошибочный параметр
    0   1       LSR_DATA_READY          Готовность данных
    1   2       LSR_OVERRUN_ERR         Ошибка переполнения
    2   4       LSR_PARITY_ERR          Ошибка четности
    3   8       LSR_FRAMING_ERR         Ошибка кадра
    4   16      LSR_BREAK               Распознан BREAK
    5   32      LSR_TRANS_HOLD_EMPTY    Передающий регистр пуст
    6   64      LSR_TRANS_EMPTY         Сдвиговый регистр пуст
    --------------------------------------------------------------------
 
  Описание
 
    Функция позволяет  получить информацию о состоянии сигналов регистра
    состояния линии LSR (Line Status Register), что необходимо для выбора
    программной реакции на особые ситуации, возникающие в процессе
    приема/передачи данных.
 
  Примечания
 
  . Функция не может устанавливать биты LSR.
 
  . Некоторые биты LSR сбрасываются при чтении.
 
  Примеры
 
  . Анализ битов LSR порта 2:
 
    nStatus := COM_LSR(2)                       // Чтение LSR порта 2
 
    IF ISBIT(nStatus, 5)                        // Бит 5 установлен
        ? "Распознан BREAK - Прерывание!"
    ENDIF
 

See Also: COM_MCR()
COM_MSR()

 

 

 COM_MCR()
 Устанавливает биты регистра управления модемом (MCR).
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_MCR(<nComPort>, [<nMCR>]) --> nMCR
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
    <nMCR> - необязательный параметр, задающий комбинацию устанавливаемых
    битов в виде числа в диапазоне от 0 до 255.


По умолчанию состояние MCR
    не изменяется.
 
  Возвращаемое значение
 
    nMCR - число, содержащее комбинацию битов регистра управления модемом
    (MCR), назначение которых приведено в таблице:
 
    Таблица 3-4. Кодирование битов регистра MCR
    --------------------------------------------------------------------
    Бит Число   Симв. константа Назначение
    --------------------------------------------------------------------
        0       MCR_ERROR       Ошибочный параметр
    1   1       MCR_DTR         Готовность терминала (DTR)
    2   2       MCR_RTS         Запрос передачи (RTS)
    3   4       MCR_OUT_1       OUT 1 (дополнительный сигнал)
    4   8       MCR_OUT_2       OUT 2 (дополнительный сигнал)
    5   16      MCR_LOOP        LOOP (дополнительный сигнал)
    --------------------------------------------------------------------
 
  Описание
 
    Функция позволяет установить состояние битов регистра управления
    модемом MCR (Modem Control Register) и сохранить предыдущее состояние.
 
  Примечания
 
  . Управляющие биты OUT1, OUT2 и LOOP могут быть установлены только
    данной функцией.
 
  . Для управления сигналами DTR и RTS в состав CT II входят
    специальные функции.
 
  Примеры
 
  . Установка битов MCR порта 1:
 
    nStatus := COM_MCR(1)                       // Чтение MCR порта 1
    IF NUMAND(nStatus, 3) = 3
        ? "DTR и RTS активны!"
    ENDIF
 

See Also: COM_DTR()
COM_RTS()

 

 

 COM_MSR()
 Возвращает значение для регистра состояния модема (MSR).
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_MSR(<nComPort>) --> nMSR
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
  Возвращаемое значение
 
    nMSR - число, содержащее комбинацию битов регистра состояния модема


    (MSR), назначение которых приведено в таблице:
 
    Таблица 3-5. Кодирование битов регистра MSR
    --------------------------------------------------------------------
    Бит Число   Симв. константа Назначение
    --------------------------------------------------------------------
        0       MSR_ERROR       Ошибочный параметр
    0   1       MSR_DELTA_CTS   Изменение готовности передачи (DCTS)
    1   2       MSR_DELTA_DSR   Изменение готовности внешнего устройства
                                (DDSR)
    2   4       MSR_TERI        Изменение сигнала входящего вызова (TERI)
    3   8       MSR_DELTA_DCD   Изменение сигнала обнаружения несущей
                                (DDCD)
    4   16      MSR_CTS         Готовность к передаче (CTS)
    5   32      MSR_DSR         Готовность внешнего устройства (DSR)
    6   64      MSR_RI          Индикатор входящего вызова (RI)
    7   128     MSR_DCD         Обнаружение несущей (DCD)
    --------------------------------------------------------------------
 
  Описание
 
Не все биты регистра состояния модема MSR (Modem Status Register)
могут быть опрошены специальными функциями. Если, например, нужна информация об изменении сигнала (DELTA-<сигнал>), то следует использовать данную функцию и проверять состояние соответствующих битов.
 
  Примечания
 
  . Все биты данного регистра, указывающие на изменения
    соответствующих сигналов, сбрасываются при чтении.
 
  Примеры
 
  . Анализ MSR порта1:
 
    nStatus := COM_MSR(1)
 
    IF ISBIT(nStatus, 5)                        // CTS (бит 5) активен?
        ...
    ENDIF
 

See Also: COM_CTS()
COM_DCD()
COM_DSR()
COM_RING()

 

 

 COM_NUM()
 Возвращает наибольший из номеров доступных последовательных портов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_NUM() --> nMaxCom
 
  Возвращаемое значение


 
    nMaxCom - номер последовательного порта с максимальным номером в
    диапазоне от 1 до 4.
 
  Описание
 
    Функция возвращает наибольший из номеров доступных последовательных
    портов, а не количество доступных портов. Возвращенное значение 3 не
    означает, что доступны 3 порта - порт 2, например, может быть исключен
    из числа доступных. Для определения возможности использования
    последовательного порта следует проверять результаты, возвращаемые
    функциями COM_OPEN() или COM_INIT().
 
    До вызова данной функции для сканирования портов используются адреса,
    описанные во Введении к данной главе. Однако эти базовые адреса могут
    быть изменены функцией COM_SETIO().
 
    Внимание!
 
    Функция распознает наличие установленных портов по базовым адресам.
    Если, например, компьютер имеет встроенный ArcNet-адаптер, то это
    может привести к конфликту адресов ввода/вывода. Обращение прикладной
    программы по адресу 02EAh как к последовательному порту, который по
    управлению отличается от ArcNet-адаптера, может нарушить существующие
    сетевые связи. В таких случаях может помочь вызов функции COM_SETIO()
    с заданием 0 в качестве адреса ввода/вывода:
 
    COM_SETIO(<nComPort>,0)
 
    После выполнения этого вызова во внутренней таблице будут уничтожены
    соответствующие стандартные адреса и конфликтующие аппаратные средства
    будут защищены от доступа со стороны CT II-функций. Однако это
    возможно лишь при условии, что функция COM_NUM() еще не вызывалась,
    поскольку иначе порт будет уже помечен как используемый ("in use").
 
  Примеры
 
  . Определение числа портов по стандартным адресам:
 
    ? COM_NUM()                 // Например, 4
 
  . Задание нестандартных адресов:
 
    COM_SETIO(3, "110")         // Порт 3, 110h
    COM_SETIO(4, "120")         // Порт 4, 120h
    ? COM_NUM()                 // 4


 

See Also: COM_OPEN()
COM_SETIO()



 
 

 COM_OPEN()
 Открывает порт и инициализирует буфера.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_OPEN(<nComPort>, [<nBufferIn>],
        [<nBufferOut>], [<lTrapMode>]) --> lStatus
 
    ВНИМАНИЕ! По отношению к одноименной функции из Clipper Tools One
    расширены возможности и введен дополнительный параметр.
 
  Параметры
 
<nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
<nBufferIn> - необязательный числовой параметр, задающий размер буфера приема в байтах в диапазоне от 100 до 65536. По умолчанию 100.
 
<nBufferOut> - необязательный числовой параметр, задающий размер
буфера передачи в байтах длиной до 65536. По умолчанию буфер передачи не используется.
 
<lTrapMode> - необязательный логический параметр, задающий при
значении .T.  инициирование прерываний только при приеме данных, а при значении .F. или по умолчанию прерывания инициируются, кроме этого, и при сбоях во время передачи данных.
 
  Возвращаемое значение
 
    lStatus - логическое значение .T. при успешном открытии порта и
    инсталляции для него буферов заданного размера, а иначе .F..
 
  Описание
 
Функция позволяет открыть один из портов последовательного интерфейса
(COM1 - COM4). Термины COM1, COM2 и т.д. вошли в обиход. Однако это и имена устройств DOS.  Здесь речь идет о портах с определенными адресами ввода/вывода. Например, CT II использует 3F8h как базовый адрес для COM1.
 
Работа с портами осуществляется непосредственно, в обход DOS или BIOS.
Для адресации ввода/вывода используются не данные из BIOS, а либо исходные значения, приведенные в таблице установочных величин во Введении к данной главе, либо значения, заданные функцией COM_SETIO(). Проверка доступности порта по этим адресам осуществляется при его открытии.


 
    Прием данных
    Для каждого последовательного порта может быть зарезервирован буфер
    размером до 64 Кбайтов, в который записываются все поступающие
    символы, даже если Clipper-программа занята другим процессом.
    Количество находящихся в буфере символов может быть проверено и
    прочитано по частям.
 
    Передача данных
    Можно также, хотя это и не обязательно, зарезервировать буфер
    передачи. В таком случае передача данных, запущенная функцией
    COM_SEND(), управляется прерываниями, т.е. выполняется в фоновом
    режиме. Для управления и контроля за буфером передачи применяется
    несколько функций.
 
    Прерывания при ошибках передачи
    Если параметр <lTrapMode> имеет значение .T., то порт (УАПП) будет
    инициировать прерывания при приеме данных и в фоновом режиме при
    передаче данных. События, связанные с MSR или LSR, учитываться не
    будут, что повлияет на отслеживание сигналов состояния и, особенно,
    ошибок при передаче.
 
    Эта возможность добавлена в связи с тем, что некоторые адаптеры
    последовательных интерфейсов инициируют прерывания из-за "шума" во
    входных линиях, которые, как правило, не шунтированы нагрузочным
    сопротивлением. Выключение отслеживания переполнения буфера приема
    может нарушить выполнение программы и привести к значительным потерям
    информации.
 
  Примечания
 
  . MSR (Modem Status Register) - регистр состояния модема. LSR (Line
    Status Register) - регистр состояния линии.
 
    DTR (Data Terminal Ready) - готовность терминала или, другими словами,
    готовность передатчика внешнего устройства к передаче данных.
 
  . Внимание! CT II-функции COM_OPEN() и COM_INIT() не влияют на
    управляющие сигналы в отличие от аналогичных функций других языков,
    например BASIC. Для управления модемом через последовательный порт с
    использованием Clipper необходимо устанавливать DTR и другие сигналы,


    применяя соответствующие CT II-функции.
 
  . Размер буфера может быть от 100 байтов до 64 Кбайтов. Слишком
    большое или слишком маленькое значение корректируются до минимально
    или максимально допустимого.
 
  . Для сохранения совместимости с Clipper Tools I функция может
    вызываться с параметрами <nComPort>, <nBufferIn> и <lTrapMode>, но без
    параметра <nBufferOut>, причем соответствующая запятая (разделитель
    параметров) может быть также опущена.
 
  Примеры
 
  . Открытие порта 1:
 
    IF COM_NUM() > 0                    // Буфер 4000 байтов
       nBuffSize := 4000
 
       ComOk := COM_OPEN(1, nBuffSize)  // Открытие порта 1
 
       IF .NOT. ComOk
          ? "Порт не может быть открыт!"
       ENDIF
    ENDIF
 
  . Открытие порта 3 с указанием длины буферов приема и передачи:
 
    ? COM_OPEN(3, 1000, 1000)           // .T. в случае успеха
 
  . Инициирование прерываний только для принимаемых данных с
    игнорированием сбоев во время передачи. Используется только буфер
    приема на 1000 символов:
 
    ? COM_OPEN(3, 1000, .T.)            // .T. в случае успеха
 

See Also: COM_COUNT()
COM_INIT()
COM_READ()
COM_SEND()
COM_SETIO()

 

 

 COM_READ()
 Считывает символы из буфера приема.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_READ(<nComPort>, [<nLength>],
        [<lNoDelete>]) --> cCharString
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
    <nLength> - необязательный числовой параметр, задающий количество
    считываемых из буфера символов. По умолчанию считываются все символы.
 
    <lNoDelete> - необязательный логический параметр, задающий при
    значении .T.  сохранение символов до заполнения буфера, а при значении


    .F. или по умолчанию их удаление после чтения.
 
  Возвращаемое значение
 
    cCharString - символьная строка, содержащая требуемое количество
    байтов, считанных из буфера приема заданного порта.
 
  Описание
 
    Все символы, принимаемые последовательным портом, записываются в
    соответствующий буфер по прерываниям. Задавая количество считываемых
    символов, можно считать из буфера один, несколько или все символы.
 
  Примечания
 
  . Между вызовами COM_COUNT() и COM_READ() могут быть приняты
    дополнительные символы.
 
  Примеры
 
  . Ожидание приема по крайней мере десяти символов:
 
    DO WHILE COM_COUNT(1) < 10                  // Ожидание поступления в
                                                // буфер 10 символов
        *...
    ENDDO
    cInput := COM_READ(1, 10)                   // Чтение 10 символов
    ? cInput                                    // Вывод считанных символов
 

See Also: COM_COUNT()

 

 

 COM_REMOTE()
 Инсталлирует символ дистанционного прекращения передачи.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_REMOTE(<nComPort>, [<cChar|nChar>]) --> lActive
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
    <cChar|nChar> - необязательный параметр, задающий в формате символьной
    строки или в виде числового ASCII-кода символ, прием которого
    передающей стороной должен инициировать прекращение передачи. По
    умолчанию символ прекращения передачи не используется.
 
  Возвращаемое значение
 
    lActive - логическое значение .T. при открытом и доступном порте, а
    иначе .F..
 
  Описание
 
    При передаче длинных текстов приемник должен иметь возможность
    прекратить сеанс передачи, что может быть реализовано очисткой буфера
    передачи.


Для этого должен быть определен символ прекращения передачи.
 
    При приеме этого символа передающей станцией, ее буфер, используемый
    для фоновой передачи, очищается (как при выполнении COM_SFLUSH()) и
    передающая Clipper-программа прекращает текущий сеанс передачи.
 
    Прекращение передачи по инициативе принимающей станции может быть
    определено вызовом функции COM_SMODE().
 
  Примеры
 
  . Задание CTRL-X как символа прекращения передачи для порта 2:
 
    COM_REMOTE(2, 24)
    COM_SEND(2, cLongText)
    IF ISBIT(COM_SMODE(2), 4)
       ? "Передача прекращена принимающей станцией!"
    ENDIF
 
  . Отмена символа прекращения передачи:
 
    COM_REMOTE(2)
 

See Also: COM_SFLUSH()
COM_SKEY()
COM_SMODE()

 

 

 COM_RING()
 Возвращает признак наличия входящего вызова (RING).
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_RING(<nComPort>) --> lActiveRing
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
  Возвращаемое значение
 
    lActiveRing - логическое значение, соответствующее состоянию
    RING-сигнала и бита 7 регистра MSR:
 
    --------------------------------------------------------------------
    Значение    Состояние RING  Значение бита 7 MSR
    --------------------------------------------------------------------
    .T.         Активно         1
    .F.         Пассивно        0
    --------------------------------------------------------------------
 
    MSR (Modem Status Register) - регистр состояния модема.
 
  Описание
 
    Функция возвращает состояние сигнала RING, активизируемого модемом при
    обнаружении входящего вызова. Однако наличие этого сигнала не
    означает, что связь установлена без каких-либо нарушений.
 
  Примечания
 
  . Для получения информации о сигнале TERI (Trailing Edge RING -


    изменение сигнала входящего вызова) следует использовать функцию
    COM_MSR().
 
  Примеры
 
        Обнаружение входящего вызова:
    DO WHILE .NOT. COM_RING(1)                  // Ожидание вызова
        *...
    ENDDO
 
    ? "Обнаружен входящий вызов..."
 

See Also: COM_MSR()

 

 

 COM_RTS()
 Устанавливает сигнал запроса на передачу (RTS).
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_RTS(<nComPort>, [<lNewRTSStatus>]) --> lOldRTSStatus
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
    <lNewRTSStatus> - необязательный логический параметр, задающий при
    значении .T.  активизацию, а при .F. деактивизацию RTS-сигнала.
    По умолчанию состояние выходного RTS-сигнала не изменяется.
 
  Возвращаемое значение
 
    lOldRTSStatus - логическое значение, соответствующее состоянию
    RTS-сигнала и бита 2 регистра MSR:
 
    --------------------------------------------------------------------
    Значение    Состояние RTS   Значение бита 2 MSR
    --------------------------------------------------------------------
    .T.         Активно         1
    .F.         Пассивно        0
    --------------------------------------------------------------------
 
    MSR (Modem Status Register) - регистр состояния модема.
 
  Описание
 
    RTS (Request To Send) - запрос на передачу или, другими словами,
    запрос приемника внешнего устройства на передачу ему данных.
 
    Функция позволяет изменить состояние выходного RTS-сигнала и сохранить
    в переменной его предыдущее состояние.
 
  Примечания
 
  . При выполнении функции COM_OPEN() не осуществляется автоматическая
    активизация RTS-сигнала, в то время как выполнение COM_CLOSE()
    сопровождается его автоматической деактивизацией.


 
  Примеры
 
  . Реализация одного из вариантов аппаратного подтверждения связи:
 
    COM_RTS(2, .T.)                     // Запрос на передачу через порт 2
    DO WHILE .NOT. COM_CTS(2)
        *...
    ENDDO
    COM_SEND(2, "The quick brown fox jumps over the lazy dog")
 

See Also: COM_CLOSE()
COM_MCR()
COM_OPEN()

 

 

 COM_SCOUNT()
 Возвращает количество остающихся в буфере фоновой передачи символов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_SCOUNT(<nComPort>) --> nLength
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
  Возвращаемое значение
 
    nLength - число символов в буфере передачи, ожидающих передачи, или
    (-1) при задании неоткрытого порта.
 
  Описание
 
    Функция возвращает количество символов в заданном буфере, передача из
    которого осуществляется в фоновом режиме.
 
  Примеры
 
  . Определение количества символов в буфере передачи:
 
    nChar := COM_SCOUNT(1)      // Число символов для порта 1
 

See Also: COM_OPEN()
COM_SEND()
COM_SFLUSH()

 

 

 COM_SEND()
 Осуществляет непосредственную или запускает фоновую передачу данных.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_SEND(<nComPort>, <cString|nChar>) --> nLength
 
    ВНИМАНИЕ! Расширение предыдущей версии. Дополнительных параметров нет.
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
    <cString|nChar> - параметр, задающий в символьном формате
    последовательность передаваемых символов, а в виде числового
    ASCII-кода одиночный передаваемый символ.
 
  Возвращаемое значение
 
    nLength - при успешной передаче данных 0, а иначе число символов,


    которые не были переданы или не могли быть помещены в буфер передачи.
 
  Описание
 
    Функция позволяет передать один или несколько символов через заданный
    порт в режиме как непосредственной, так и фоновой передачи (т.е. по
    прерываниям). Режим фоновой передачи включается заданием размера
    буфера передачи при вызове функции COM_OPEN().
 
    Непосредственная передача
 
    При непосредственной передаче данных выполнение программы может быть
    продолжено, только когда все символы переданы через порт. В этом
    режиме CT II не поддерживает программную приостановку передачи. А при
    включенном режиме автоматической аппаратной приостановки передачи
    может возникать особая ситуация.
 
    Передающая станция приостанавливает передачу при обнаружении
    деактивизации принимающей станцией CTS-сигнала, указывающей на не
    готовность к передаче или, другими словами, на неготовность принимать
    данные. При этом для предотвращения зависания Clipper-программы,
    описываемая функция завершается и возвращает количество еще не
    переданных символов.
 
    Определить, был ли CTS-сигнал деактивизирован удаленной (принимающей)
    станцией, можно вызовом функции COM_CTS().
 
    Фоновая передача
 
    В фоновом режиме поддерживается автоматическое выполнение как
    программной, так и аппаратной приостановок передачи. При этом для
    управления буфером передачи можно использовать специально введенные
    функции. Например, COM_SMODE() позволяет определить, производится ли в
    данный момент ожидание приема XON-символа для сброса приостановки
    передачи. Поскольку такое ожидание может оказаться напрасным, можно
    использовать функцию COM_FLUSH() для программной очистки буфера
    передачи и завершения текущего сеанса передачи.
 
  Примечания
 
  . Программная приостановка поддерживается только при фоновом режиме
    передачи. Поэтому в режиме непосредственной передачи рекомендуется


    оперировать небольшими пакетами, регулярно анализируя значение,
    возвращаемое функцией COM_SOFT_R().
 
  . Режим программной приостановки передачи включается функцией
    COM_SOFT(), а аппаратной - COM_HARD().
 
  Примеры
 
  . Непосредственная передача через порт 1 (открытие без задания
    буфера передачи):
 
    COM_OPEN(1, 1000)                   // Только буфер приема
    COM_HARD(.T.)                       // Аппаратная приостановка
    ACCEPT "Пожалуйста, введите имя" TO cText
    nRest := COM_SEND(1, cText)         // Первая попытка передачи
 
    DO WHILE nRest > 0
       cText := RIGHT(cText, nRest)     // Еще не переданные данные
       nRest := COM_SEND(1, cText)
    ENDDO
 
  . Фоновая передача через порт 1:
 
    COM_OPEN(1, 1000, 1000)             // Буфер передачи 1000 байтов
    cText := "Попытка"                  // Передаваемая информация
    nRest := COM_SEND(1, cText)         // Первая попытка передачи
 
    DO WHILE nRest > 0
       cText := RIGHT(cText, nRest)     // Еще не переданные данные
       nRest := COM_SEND(1, cText)
    ENDDO
 

See Also: COM_HARD()
COM_INIT()
COM_OPEN()
COM_SOFT()
COM_SOFT_R()

 

 

 COM_SETIO()
 Изменяет базовый адрес ввода/вывода для последовательного порта.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_SETIO(<nComPort>, [<nIOPort|cIOPort>]) --> lChanged
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
    <nIOPort|cIOPort> - необязательный параметр, задающий допустимый адрес
    ввода/вывода в форме десятичного числа или строки, содержащей число в
    шестнадцатеричной системе счисления. По умолчанию используются
    соответствующие портам значения, приведенные во введении к данной
    главе.
 
  Возвращаемое значение
 


    lChanged - логическое значение .T. при успешной установке нового
    базового адреса ввода/вывода, а иначе .F..
 
  Описание
 
    Функция позволяет адаптировать средства CT II к самым различным
    интерфейсным адаптерам, базовые адреса ввода/вывода которых не
    соответствуют исходным значениям, приведенным во Введении к данной
    главе. Особенно это касается портов COM3 и COM4.
 
  Примечания
 
  . Функция проверяет, действительно ли порт доступен при выбранном
    адресе ввода/вывода, и возвращает, соответственно, .T. или .F..
 
  Примеры
 
  . Задание базового адреса ввода/вывода для порта 2 десятичным числом:
 
    COM_SETIO(2, 505)           // .T., адрес = 1F8h
 
  . Задание базового адреса ввода/вывода для порта 4 шестнадцатеричным
    числом:
 
    COM_SETIO(4, "1F8")         // .T.
 
  . Недопустимый адрес ввода/вывода (значение превышает 1023):
 
    COM_SETIO(4, "10F8")        // .F.
 

See Also: COM_GETIO()
COM_GETIRQ()
COM_SETIRQ()

 

 

 COM_SETIRQ()
 Изменяет номер линии запроса прерывания (IRQ) последовательного порта.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_SETIRQ(<nComPort>, <nIRQ|cIRQ>) --> lChanged
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
    <nIRQ|cIRQ> - параметр, задающий номер линии IRQ в форме целого
    десятичного числа в диапазоне от 2 до 15 или в виде символьной строки,
    содержащей число в шестнадцатеричной системе счисления.
 
  Возвращаемое значение
 
    lChanged - логическое значение .T. при успешной установке заданного
    номера IRQ, а иначе .F..
 
  Описание
 
    Используя линию запроса прерывания (IRQ), интерфейсный адаптер
    уведомляет контроллер прерывания о приеме символа. Контроллер передает


    эту информацию процессору, вызывающему сервисную программу через
    соответствующий вектор прерывания.
 
    Системы XT имеют 8 доступных линий прерывания, а АТ - более 16. Как
    правило, некоторые из них заняты другими внешними устройствами.
    Распределение новых IRQ требует серьезной технической подготовки.
    Определить номер IRQ, который доступен и еще не используется, можно с
    помощью технической документации на компьютер с учетом конфигурации
    установленных внешних устройств.
 
    Обычно IRQ 0 и 1 назначены для внутреннего  использования (таймеры),
    2 и 9 - для сетевых адаптеров, 5 и 7 - для принтера, а 6 и 14 - для
    гибких и жестких дисков.  К сожалению, для последовательных портов нет
    установленных стандартов, особенно для COM3 и COM4.
 
    Внимание!
 
    Как видно из приведенной во Введении к данной главе таблицы
    установочных значений, CT II поддерживает совместно используемые
    прерывания, т.е. использование одной и той же линии запроса прерывания
    для нескольких портов. Однако стандартные аппаратные средства
    последовательного интерфейса обычно не поддерживают совместно
    используемые прерывания. Для этой цели производителями аппаратуры
    выпускаются специальные многопортовые адаптеры, но работа с ними не
    гарантируется.
 
  Примечания
 
  . Базовые установки, которые использует CT II для COM1 - COM4,
    описаны во Введении.
 
  . Функция не проверяет, действительно ли порт использует выбранную
    линию IRQ.
 
  Примеры
 
  . Установка портов 3 и 4 на IRQ с номером 5 осуществляется за 2
    вызова:
 
    ? COM_SETIRQ(3, 5)          // .T.
    ? COM_SETIRQ(4, 5)          // .T.
 
  . Установка порта 4 на IRQ с номером 10, заданное в символьной форме
    шестнадцатеричной цифрой A:
 
    ? COM_SETIRQ(4, "A")        // .T.
 
  . Задание недопустимого значения номера IRQ:
 
    ? COM_SETIRQ(2, 0)          // .F. (зарезервировано для таймера)


    ? COM_SETIRQ(3, "10")       // .F. (десятичное 16)
 

See Also: COM_GETIO()
COM_GETIRQ()
COM_SETIO()

 

 

 COM_SFLUSH()
  Очищает буфер передачи при работе в фоновом режиме.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_SFLUSH(<nComPort>) --> lDeleted
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
  Возвращаемое значение
 
    lDeleted - логическое значение .T. при успешной очистке буфера
    передачи, а иначе .F..
 
  Описание
 
    Функция позволяет прерывать сеанс передачи путем установки в 0
    счетчика ожидающих передачи символов. Это используется при нарушениях
    в процессе управления данными в режиме автоматической программной
    приостановки передачи, например, в случае превышения на передающей
    станции таймаута ожидания XON-символа (сброса приостановки передачи).
 
  Примечания
 
  . Функция оказывает действие только на открытый порт.
 
  . Выполнение функции не зависит от наличия символов в буфере
    передачи.
 
  Примеры
 
  . Очистка буфера передачи для прерывания сеанса при задержке
    получения XON-символа более 30 с:
 
    nStart := SECONDS()                 // Момент начала передачи
 
    COM_SEND(2, cSendText)
 
    IF ISBIT(COM_SMODE(2), 2)           // Ожидание XON
        IF SECONDS() - nStart > 30      // Задержка >30с?
                COM_SFLUSH(2)           // Очистка буфера передачи
        ENDIF
    ENDIF
 

See Also: COM_SCOUNT()
COM_SMODE()

 

 

 COM_SKEY()
 Инсталлирует коды для отслеживания фоновой передачи.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_SKEY([<nComPort>], [<nKeyValue1|cKeyValue1>],
        [<nKeyValue2|cKeyValue2>]) --> lActive


 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
    <nKeyValue1|cKeyValue1> - необязательный параметр, задающий код
    клавиши, помещаемый в буфер клавиатуры в начале процесса программной
    или аппаратной приостановки передачи.
 
    Параметр задается в формате числового значения INKEY-кода,
    используемого в Clipper- команде SET KEY TO, или в формате символьной
    строки. По умолчанию отслеживание процесса приостановки передачи
    отключается.
 
    <nKeyValue2|cKeyValue2> - необязательный параметр, задающий код
    клавиши, помещаемый в буфер клавиатуры при полном освобождении буфера
    передачи.
 
    Параметр задается в формате числового значения INKEY-кода,
    используемого в Clipper-команде SET KEY TO, или в формате символьной
    строки. По умолчанию отслеживание очистки буфера передачи отключается.
 
  Возвращаемое значение
 
    lActive - логическое значение .T. при успешной инсталляции кода для
    отслеживания, а иначе .F..
 
  Описание
 
    Функция обеспечивает отслеживание в процессе фоновой передачи
    аппаратной и программной приостановки, а также дистанционной очистки
    буфера передачи.  Код символа, заданный параметром
    <nKeyValue1|cKeyValue1> помещается в буфер клавиатуры при инициации
    программной или аппаратной приостановки передачи.
 
    В зависимости от того, какой режим приостановки был установлен -
    аппаратный (вызовом COM_HARD()) или программный (вызовом COM_SOFT()) -
    это событие фиксируется средствами обслуживания последовательного
    интерфейса по деактивизации входного CTS-сигнала или по приему
    передающей станцией XOFF-символа.
 
    Код символа, заданный параметром <nKeyValue2|cKeyValue2> помещается в
    буфер клавиатуры, когда буфер передачи становится пустым. Это обычно
    связано либо с окончанием передачи данных в фоновом режиме, либо с


    приемом передающей станцией символа прекращения передачи,
    инсталлируемого функцией COM_REMOTE().
 
    Описываемая функция позволяет реагировать на происшедшее событие
    обычным способом обработки прерываний по нажатию клавиш, а не
    опрашивать состояние буфера передачи постоянно. Событие,
    инициировавшее прерывание, можно идентифицировать с помощью функции
    COM_SMODE().
 
  Примечания
 
  . Внимание! Функцию необходимо вызывать заново после обработки
    каждого прерывания.
 
  Примеры
 
  . Отслеживание начала программной и аппаратной приостановки передачи
    для порта 2:
 
    SET KEY 225 TO HANDSHAKE
    ? COM_SKEY(2, 225)          // .T. в случае успеха
 
    COM_SOFT(2, .T.)            // Включение режима программной
                                // приостановки передачи
    COM_HARD(2, .T.)            // Включение режима аппаратной
                                // приостановки передачи
    COM_SEND(2, LongText)       // Передача длинного текста
 
  . Обрабатывающая прерывания процедура всегда получает параметры:
 
    PROCEDURE HANDSHAKE (A, B, C)
 
       * Здесь должна помещаться программа обработки прерывания
 
       COM_SKEY(2, 225)         // Должно быть восстановлено
                                // отслеживание
       RETURN
 
  . Отслеживание опустошения буфера передачи порта 2:
 
    COM_SKEY(2, , 225)          // Помещается код 225
 

See Also: COM_SOFT()
LASTKLINE()
LASTKPROC()
LASTKFUNC()

 

 

 COM_SMODE()
 Возвращает код текущего состояния передачи в фоновом режиме.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_SMODE(<nComPort>) --> nSendMode
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
  Возвращаемое значение
 
    nSendMode - числовой код, содержащий комбинацию битов, значение


    которых приведено в таблице:
 
    Таблица 3-6. Кодирование состояния передачи в фоновом режиме
    --------------------------------------------------------------------
    Бит Число   Симв. константа Значение
    --------------------------------------------------------------------
        0       SMODE_NONE      Фоновая передача не активизирована
    1   1       SMODE_EMPTY     Буфер передачи пуст
    2   2       SMODE_SOFT      Ожидание сброса программной приостановки
                                передачи (XON)
    3   4       SMODE_HARD      Ожидание сброса аппаратной приостановки
                                передачи (CTS)
    4   8       SMODE_RFLUSH    Буфер передачи очищен дистанционно
    --------------------------------------------------------------------
 
  Описание
 
    Функция позволяет уточнить текущее состояние процесса фоновой
    передачи, в том числе, определить факт автоматической программной
    приостановки передачи по получении XOFF-символа (до получения XON), а
    также факт прекращения передачи по получении символа дистанционной
    очистки буфера передачи.
 
  Примечания
 
  . Функция возвращает 0, если при вызове функции COM_OPEN() не был
    включен фоновый режим (не задан размер буфера передачи).
 
  Примеры
 
  . Проверка освобождения буфера передачи порта 2:
 
    IF ISBIT(COM_SMODE(2), 1)
       ? "Буфер передачи порта 2 пуст!"
    ENDIF
 
  . Ожидание получения XON-символа в течение 20 с:
 
    WAITPERIOD(2000)
 
    DO WHILE ISBIT(COM_SMODE(2), 2) .AND. WAITPERIOD()
       *...
    ENDDO
 
  . Очистка буфера передачи при неполучении символа XON:
 
    IF ISBIT(COM_SMODE(2), 2)
        COM_SFLUSH(2)                   // Очистка буфера передачи
    ENDIF
 

See Also: COM_HARD()
COM_REMOTE()
COM_SFLUSH()
COM_SOFT()

 

 

 COM_SOFT()
 Переключает режим автоматической программной приостановки передачи.


------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_SOFT(<nComPort>, [<lNewHandshake>],
        [<cXONchar>], [<cXOFFchar>]) --> lOldHandshake
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
    <lNewHandshake> - необязательный логический параметр, задающий при
    значении .T.  включение, а при значении .F. выключение режима
    автоматической программной приостановки передачи. По умолчанию текущий
    режим не изменяется.
 
    <cXONchar> - необязательный символьный параметр, задающий XON-символ.
    По умолчанию CHR(19) (комбинация клавиш <Ctrl><S>).
 
    <cXOFFchar> - необязательный символьный параметр, задающий
    XOFF-символ. По умолчанию CHR(17) (комбинация клавиш <Ctrl><Q>).
 
  Возвращаемое значение
 
    lOldHandshake - логическое значение .T. при предыдущем состоянии
    режима во включенном состоянии, или .F. при выключенном.
 
  Описание
 
    Функция включает или выключает режим автоматической программной
    приостановки передачи. Программная или аппаратная приостановка
    передачи используется во избежание потери символов при переполнении
    буфера приема, имеющего ограниченные размеры.
 
    В режиме автоматической программной приостановки передачи при
    заполнении буфера приема на 75% принимающая станция посылает
    передающей стороне XOFF-символ.
 
    После освобождения буфера на 50% или более, принимающая станция для
    сброса приостановки передачи передает XON-символ. В прикладных
    протоколах могут быть заданы любые символы вместо используемых по
    умолчанию <Ctrl><S> и <Ctrl><Q> соответственно.
 
  Примечания
 
  . Автоматическая программная приостановка передачи поддерживается
    только в режиме фоновой передачи данных, активизируемом вызовом


    функции COM_OPEN() с заданием размера буфера передачи.
 
  . При передаче двоичных данных без использования специальных
    протоколов режим автоматической программной приостановки передачи
    должен быть выключен.
 
  Примеры
 
  . Активизация режима программной приостановки передачи:
 
    COM_OPEN(1, 1000, 1000)     // Открытие порта с активизацией
                                // фоновой передачи
    COM_SOFT(1, .T.)            // Активизация автоматической
                                // программной приостановки передачи
 

See Also: COM_HARD()
COM_SOFT_R()
COM_SOFT_S()

 

 

 COM_SOFT_R()
 Возвращает состояние флага ожидания по получении XOFF-символа.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_SOFT_R(<nComPort>, [<lNewXOFF>]) --> lOldXOFF
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
    <lNewXOFF> - необязательный логический параметр, задающий при значении
    .T.  установку, а при значении .F. или по умолчанию сброс флага
    ожидания по получении XOFF-символа.
 
  Возвращаемое значение
 
    lOldXOFF - логическое значение .T. по получении портом XOFF-символа,
    не сброшенного XON-символом, а иначе .F..
 
  Описание
 
    Функция возвращает состояние внутреннего флага, устанавливаемого CT II
    по получении XOFF-символа в режиме программной приостановки передачи.
    Получение XON-символа вызывает сброс этого флага. Поскольку возможны
    случаи, когда XON не посылается удаленной станцией, то флаг может быть
    сброшен заданием значения .F.  параметра <lNewXOFF>.
 
  Примечания
 
  . При использовании описываемой функции для организации наблюдения
    за поступлением XOFF-символов рекомендуется передавать информацию
    небольшими пакетами.
 
  Примеры
 
  . Программная реализация неавтоматической приостановки передачи


    данных путем отслеживания XOFF-символа:
 
    * Открытие порта с активизацией режима непосредственной передачи
 
    COM_OPEN(1, 1000)
 
    * Передача данных до приема XOFF-символа
 
    nPos := 1
 
    DO WHILE .NOT. COM_SOFT_R(1) .AND. nPos <= LEN(cString)
        COM_SEND(1, SUBSTR(cString, nPos, 1))
        nPos := nPos + 1
    ENDDO
 

See Also: COM_SEND()
COM_SOFT()

 

 

 COM_SOFT_S()
 Возвращает флаг автоматической посылки XOFF-символа.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COM_SOFT_S(<nComPort>) --> lXOFF
 
  Параметры
 
    <nComPort> - номер последовательного порта в диапазоне от 1 до 4.
 
  Возвращаемое значение
 
    lXOFF - логическое значение .T. при заполнении буфера приема на 75%
    или более, а иначе .F..
 
  Описание
 
    Функция возвращает состояние флага, устанавливаемого при посылке
    XOFF-символа в процессе автоматической программной приостановки
    передачи. Посылка XON-символа при освобождении буфера до 50% вызывает
    сброс этого флага.
 
  Примечания
 
  . Выбор оптимального размера буфера приема зависит от скорости
    передачи и рассчитывается, исходя из необходимости обеспечивать прием
    символов, передаваемых удаленной стороной до ее реакции на
    приостановку передачи.
 
    Другими словами, 25% объема буфера должны вместить то количество
    символов, которое может быть передано за время равное сумме удвоенного
    времени распространения и времени реакции программы.
 
  Примеры
 
  . Освобождение буфера приема по флагу автоматической передачи XOFF:
 
    IF = COM_SOFT_S(1)
        ? "Пора освободить буфер!"
        ...
    ENDIF
 

See Also: COM_READ()
COM_SOFT()

 

 

 XMOBLOCK()
 Формирует блок данных для передачи по протоколу XMODEM.
------------------------------------------------------------------------------


 
  Синтаксис
 
    XMOBLOCK(<cString>, [<nBlockNumber>],
        [<lCRC>], [<nMode>]) --> cXModemBlock
 
  Параметры
 
    <cString> - символьная строка, которая должна содержать в зависимости
    от значения параметра <nMode>  128 или 1024 символов. При превышении
    длины лишние символы отбрасываются, а при меньшей длине недостающие
    дополняются CHR(0).
 
    <nBlockNumber> - необязательный числовой параметр, задающий номер
    формируемого блока. По умолчанию 0.
 
    <lCRC> - необязательный логический параметр, задающий при значении .T.
    формирование 16-битового CRC-кода, а при значении .F. или по умолчанию
    формирование простой 8-битовой контрольной суммы.
 
    <nMode> - необязательный числовой параметр, задающий тип формируемого
    блока.  Значению 1 соответствует блок размером 128 байтов,
    начинающийся с символа CHR(1), а значению 2 - блок размером 1 Кбайт,
    начинающийся с символа CHR(2). По умолчанию 1 (блок 128 байтов).
 
  Возвращаемое значение
 
    cXModemBlock - символьная строка, содержащая блок, готовый для
    передачи в соответствии с протоколом XMODEM.
 
  Описание
 
    Функция генерирует в соответствии с протоколом XMODEM блок данных,
    который может быть передан функцией COM_SEND() без дополнительной
    обработки. Автоматически учитывается, что после блока с номером 255 по
    протоколу XMODEM ожидается блок с номером 0 (<номер блока> % 256). Это
    позволяет обойтись без проверки переполнения номера блока, который
    передается одним байтом.
 
    Блок данных по протоколу XMODEM может быть представлен в одном из
    четырех допустимых форматов:
 
  . Формат блока данных длиной 128 байтов с простой 8-битовой
    контрольной суммой:
 
    CHR(1) + <номер блока> + <дополнение номера блока> +;
        <128 байтов данных> + <1 байт контрольной суммы>


 
  . Формат блока данных длиной 128 байтов с контролем по CRC-коду:
 
    CHR(1) + <номер блока> + <дополнение номера блока> +;
        <128 байтов данных> + <2 байта CRC-кода>
 
  . Формат блока данных длиной 1024 байта с простой 8-битовой
    контрольной суммой:
 
    CHR(2) + <номер блока> + <дополнение номера блока> +;
        <1024 байта данных> + <1 байт контрольной суммы>
 
  . Формат блока данных длиной 1024 байта с контролем по CRC-коду:
 
    CHR(2) + <номер блока> + <дополнение номера блока> +;
        <1024 байта данных> + <2 байтa CRC-кода>
 
  Примечания
 
  . Простая 8-битовая контрольная сумма вычисляется по алгоритму:
 
    NUMLOW(ASCIISUM(<данные>))
 
  . В состав программных примеров, поставляемых с CT II, входит
    Clipper-программа, реализующая протокол XMODEM.
 
  . CRC-кодом называется контрольная порция информации (обычно
    добавляемая к основной), формируемая по правилам умножения полиномов и
    позволяющая выявлять, а в некоторых случаях и исправлять ошибки,
    возникющие при передаче двоичной информации.
 
  . МККТТ - Международный консультативный комитет по телефонии и
    телеграфии - международная организация, вырабатывающая рекомендации по
    стандартизации технических и программных средств передачи информации.
 
  Примеры
 
  . Передача по упрощенному протоколу XMODEM (подразумевается
    предварительная инициализация порта):
 
    nBlockNum := 0                              // Первый блок
    lChkMode := .T.                             // Использование CRC
    nBlkSize := 128                             // Размер блока
    nPointer := 0                               // Начальное смещение в файле
 
    * Чтение первой порции данных
 
    cData := FILESTR("TEST.TXT", nBlkSize, nPointer)
 
    DO WHILE LEN(cData) > 0


 
        * Передача блока
 
        COM_SEND(1, XMOBLOCK(cData, nBlockNum, lChkMode))
        nBlockNum := nBlockNum +1               // Следующий блок
        nPointer := nPointer +nBlkSize          // Смещение в файле
 
        * Чтение следующей порции данных
 
        cData := FILESTR("TEST.TXT", nBlkSize, nPointer)
    ENDDO
 

See Also: COM_CRC()

 

 

 XMOCHECK()
  Проверяет полученный блок на соответствие протоколу XMODEM.
------------------------------------------------------------------------------
 
  Синтаксис
 
    XMOCHECK(<cString>, [<lCRC>]) --> nBlockNumber
 
  Параметры
 
    <cString> - символьная строка, содержащая проверяемый блок данных.
 
    <lCRC> - необязательный логический параметр, задающий при значении .T.
    проверку по 16-битовому CRC-коду, а при значении .F. или по умолчанию
    проверку по простой 8-битовой контрольной сумме.
 
  Возвращаемое значение
 
    nBlockNumber - номер блока в диапазоне от 0 до 255 при соответствии
    блока протоколу XMODEM, а иначе (-1).
 
  Описание
 
    Функция проверяет полученный блок на соответствие протоколу XMODEM.
    Способ проверки задается параметром <lCRC>, а длина проверяемого блока
    опознается по заголовку, имеющему значение CHR(1) для 128-байтового и
    CHR(2) для 1024-байтового блока. Если ошибок не обнаружено, то
    возвращается номер блока.
 
  Примечания
 
  . Выделение информации после проверки блока может быть осуществлено
    вызовом SUBSTR(cBlock, 4, 128) для 128-байтового блока или
    SUBSTR(cBlock, 4, 1024) для 1024-байтового блока.
 
  . В состав программных примеров, поставляемых с CT II, входит
    Clipper-программа, реализующая протокол XMODEM.
 
  . CRC-кодом называется контрольная порция информации (обычно
    добавляемая к основной), формируемая по правилам умножения полиномов и


    позволяющая выявлять, а в некоторых случаях и исправлять ошибки,
    возникающие при передаче двоичной информации.
 
  . МККТТ - Международный консультативный комитет по телефонии и
    телеграфии - международная организация, вырабатывающая рекомендации по
    стандартизации технических и программных средств передачи информации.
 
  Примеры
 
  . Прием блока, проверка и выделение информации (на практике
    необходимо проверять и факт получения следующего блока):
 
    cBlock := COM_READ(1)                       // Если принято 132 символа,
    nBlkNr := XMOCHECK(cBlock)                  // то проверка по простой
                                                // контрольной сумме
    IF nBlkNr >= 0                              // Если нет ошибок, то
        cData := SUBSTR(cBlock, 4, 128)         // выделение информации
        *...
    ENDIF
 

See Also: XMOBLOCK()

 

 

 ZEROINSERT()
 Вставляет нулевые биты после идущих подряд пяти единичных.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ZEROINSERT(<cString>) --> cDataBlock
 
  Параметры
 
    <cString> - обрабатываемая символьная строка.
 
  Возвращаемое значение
 
    cDataBlock - символьная строка со вставленными нулевыми битами.
 
  Описание
 
    Функция включена в CT II для упрощения программирования протоколов
    передачи данных, рекомендуемых МККТТ (CCITT).
 
    По рекомендациям МККТТ для сетей с пакетной коммутацией каждый кадр
    (блок данных) должен иметь начальный и конечный флаги, содержащие
    комбинацию битов "01111110". Для того, чтобы битовая комбинация флага
    не появлялась внутри данных, перед передачей после каждых подряд
    идущих пяти единичных битов вставляется нулевой бит.
 
    Использование таких флагов позволяет достаточно быстро восстанавливать
    синхронизацию в случае ошибок передачи данных и широко применяется,


    например, в сетях Х.25 и ISDN (Integrated Services Digital Network -
    цифровая сеть с предоставлением комплексных услуг).
 
  Примечания
 
  . Максимально размер возвращаемой символьной строки может превышать
    размер исходной на 20% и рассчитывается по формуле:
 
    nMaxLen = LEN(cString) + CEILING(LEN(cString)/5)
 
  . МККТТ - Международный консультативный комитет по телефонии и
    телеграфии - международная организация, вырабатывающая рекомендации по
    стандартизации технических и программных средств передачи информации.
 
  Примеры
 
  . Проверка достаточности доступной памяти для результирующей строки:
 
    cChar := CHR(CTON("11111111", 2))
    cString := REPLICATE(cChar, 6)
    nMaxLen := LEN(cString) + CEILING(LEN(cString) / 5) // Здесь: 8
 
    IF nMaxLen < MEMORY(1) * 1024 - 100
       cString := ZEROINSERT(cString)
    ENDIF
 
  . Формирование кадра:
 
    cFlag := CHR(CTON("01111110", 2))                   // По рекомендации
                                                        // МККТТ
    cData := "Это передаваемый текст"
    CRC := COM_CRC(cData)
    cBlock :=cData + SUBSTR(L2BIN(CRC), 1, 2)           // Добавление CRC
                                                        // к информационной
                                                        // части кадра
    cBlock := ZEROINSERT(cBlock)
    cBlock := cFlag + cBlock + cFlag
 

See Also: COM_CRC()
ZEROREMOVE()

 

 

 ZEROREMOVE()
 Удаляет нулевые биты, вставленные ZEROINSERT().
------------------------------------------------------------------------------
 
  Синтаксис
 
    ZEROREMOVE(<idDataBlock>) --> cString
 
  Параметры
 
    <idDataBlock> - символьная строка, содержащая обрабатываемый кадр.
 
  Возвращаемое значение
 
    cString - символьная строка в состоянии до выполнения функции


    ZEROINSERT().
 
  Описание
 
    Функция выполняет обратное ZEROINSERT() действие, удаляя каждый
    нулевой бит после идущих подряд пяти единичных (ранее вставленных в
    соответствии с рекомендацией МККТТ (CCITT)). Удаление битов сокращает
    блок максимум на 20%.
 
  Примеры
 
  . Формирование кадра и его прием:
 
    cFlag := CHR(CTON("01111110", 2))                   // По рекомендации
                                                        // МККТТ
    cData := "Это передаваемый текст"
    CRC := COM_CRC(cData)
    cBlock :=cData + SUBSTR(L2BIN(CRC), 1, 2)           // Добавление CRC
                                                        // к информационной
                                                        // части кадра
    cBlock := ZEROINSERT(cBlock)
    cBlock := cFlag + cBlock + cFlag
 
    * Здесь должна располагаться часть программы, осуществляющая передачу
    * кадра
 
    cData := REMALL(cFlag, cBlock)                      // Удаление флагов
    cData := ZEROREMOVE(cData)
 
    * Далее необходимо проверить CRC и т.д.
 

See Also: ZEROINSERT()

 

 

 Введение в обработку строк
------------------------------------------------------------------------------
 ADDASCII()    Добавляет число к ASCII-коду каждого символа строки
 AFTERATNUM()  Возвращает остаток строки после искомого вхождения подстроки
 ASCIISUM()    Возвращает сумму ASCII-кодов всех символов строки
 ASCPOS()      Возвращает ASCII-код символа, находящегося в заданной позиции
 ATADJUST()    Выравнивает искомую подстроку по заданной позиции
 ATNUM()       Возвращает позицию начала искомой подстроки в строке
 ATREPL()      Заменяет искомую подстроку в строке на заданную
 ATTOKEN()     Возвращает позицию элемента в строке
 BEFORATNUM()  Возвращает часть строки перед искомым вхождением подстроки
 CENTER()      Центрирует и расширяет строку
 CHARADD()     Суммирует ASCII-коды символов двух строк


 CHARAND()     Логически умножает ASCII-коды символов двух строк
 CHAREVEN()    Возвращает строку, содержащую символы четных позиций
 CHARLIST()    Составляет список символов, входящих в исходную строку
 CHARMIRR()    Зеркально переворачивает строку
 CHARMIX()     Смешивает символы двух строк
 CHARNOLIST()  Составляет список символов, отсутствующих в исходной строке
 CHARNOT()     Инвертирует биты каждого символа строки
 CHARODD()     Возвращает строку, содержащую символы нечетных позиций
 CHARONE()     Удаляет из строки одинаковые смежные символы, оставляя один
 CHARONLY()    Возвращает строку символов, общих для двух заданных строк
 CHAROR()      Логически складывает ASCII-коды всех символов двух строк
 CHARPACK()    Возвращает упакованную строку
 CHARRELA()    Определяет одинаковую позицию вхождения для пар строк
 CHARRELREP()  Заменяет символы в одинаковых позициях вхождения в парах строк
 CHARREM()     Удаляет из строки указанные символы
 CHARREPL()    Заменяет в строке заданные символы
 CHARSORT()    Сортирует подстроки внутри строки
 CHARSPREAD()  Возвращает строку с расширенными промежутками между элементами
 CHARSWAP()    Попарно переставляет символы в строке
 CHARUNPACK()  Распаковывает упакованную строку
 CHARXOR()     Суммирует "по модулю два" ASCII-коды всех символов двух строк
 CHECKSUM()    Возвращает контрольную сумму задаваемой строки
 COUNTLEFT()   Возвращает количество одинаковых символов в начале строки
 COUNTRIGHT()  Возвращает количество одинаковых символов в конце строки
 CRYPT()       Возвращает закодированную или декодированную строку
 CSETATMUPA()  Переключает режим работы функций семейства ATxxxx()
 CSETREF()     Переключает режим возврата значения при передаче по ссылке
 EXPAND()      Расширяет строку за счет промежутков между символами
 JUSTLEFT()    Переносит символы из начала строки в конец
 JUSTRIGHT()   Переносит символы из конца строки в начало
 LIKE()        Сравнивает строки с учетом символов сопоставления


 LTOC()        Преобразует логическое значение в символьное
 MAXLINE()     Возвращает размер самой длинной строки в тексте
 NUMAT()       Возвращает количество вхождений подстроки в строку
 NUMLINE()     Возвращает количество необходимых для вывода текста строк
 NUMTOKEN()    Возвращает количество элементов в строке
 PADLEFT()     Дополняет строку до заданной длины слева
 PADRIGHT()    Дополняет строку до заданной длины справа
 POSALPHA()    Возвращает номер позиции первого буквенного символа
 POSCHAR()     Заменяет символ в заданной позиции символьной строки
 POSDEL()      Удаляет группу символов, начиная с заданной позиции строки
 POSDIFF()     Возвращает позицию первого отличия двух строк
 POSEQUAL()    Возвращает позицию первого совпадения двух строк
 POSINS()      Вставляет символы в заданную позицию строки
 POSLOWER()    Возвращает позицию первой строчной/прописной буквы в строке
 POSRANGE()    Возвращает позицию символа в строке с ASCII-кодом диапазона
 POSREPL()     Заменяет с указанной позиции один или несколько символов
 POSUPPER()    Возвращает позицию первой прописной/строчной буквы в строке
 RANGEREM()    Удаляет из строки символы с ASCII-кодами заданного диапазона
 RANGEREPL()   Заменяет символы с ASCII-кодами заданного диапазона
 REMALL()      Удаляет заданные символы в начале и конце строки
 REMLEFT()     Удаляет заданные символы в начале строки
 REMRIGHT()    Удаляет заданные символы в конце строки
 REPLALL()     Заменяет заданные символы в начале и конце строки
 REPLLEFT()    Заменяет заданные символы в начале строки
 REPLRIGHT()   Заменяет заданные символы в конце строки
 RESTTOKEN()   Восстанавливает среду пошагового выделения элементов
 SAVETOKEN()   Сохраняет среду пошаговой детализации выделения элементов
 SETATLIKE()   Переключает режим сопоставления для функций семейства ATxxxx()
 STRDIFF()     Определяет степень различия двух строк
 STRSWAP()     Производит взаимный обмен символов двух строк
 TABEXPAND()   Преобразует символы табуляции в последовательности символов


 TABPACK()     Преобразует заданные повторяющиеся символы в символы табуляции
 TOKEN()       Выделяет из строки заданный по номеру элемент
 TOKENAT()     Возвращает позицию последнего выделенного TOKENNEXT() элемента
 TOKENEND()    Возвращает признак окончания элементов, выделяемых TOKENNEXT()
 TOKENINIT()   Инициализирует строку для выделения элементов TOKENNEXT()
 TOKENLOWER()  Преобразует первые буквы задаваемых элементов в строчные
 TOKENNEXT()   Возвращает следующий элемент при пошаговом выделении
 TOKENSEP()    Возвращает разделители элемента, выделенного TOKEN()
 TOKENUPPER()  Преобразует первые буквы задаваемых элементов в прописные
 VALPOS()      Возвращает числовое значение цифрового символа
 WORDONE()     Удаляет из строки повторяющиеся пары символов
 WORDONLY()    Возвращает строку подстрок, общих для двух заданных строк
 WORDREPL()    Заменяет заданные пары символов
 WORDSWAP()    Меняет местами соседние двухбайтовые слова в строке
 WORDTOCHAR()  Заменяет заданные двухбайтовые слова на одиночные символы
 

 

  Введение
 
------------------------------------------------------------------------------
 
    В данной главе описываются мощные функции для обработки символьных
    строк. Благодаря тому, что они написаны исключительно на Ассемблере,
    скорость их работы весьма высока.
 
  Передача параметров по ссылке
 
    Многим функциям, описанным в этой главе, параметры можно передавать
    по ссылке. Поясним это понятие.
 
    Начиная с версии Summer'87 функциям пользователя  параметры
    (аргументы) можно передавать по ссылке. Это означает передачу
    вызываемой функции ссылки на строку вместо создания копии строки.
 
    При передаче параметров таким способом их изменение в вызываемой
    функции приводит к изменению оригинала. Некоторые CT II-функции
    допускают передачу им части параметров по ссылке. В описании таких
    функций эти параметры помечаются комбинацией "[@]", а поведение самих


    функций определяется способом передачи параметров при вызове.
 
    Передача по ссылке имеет свои достоинства и недостатки. Недостатком
    является зависимость функции от метода ее использования. А наиболее
    важным достоинством - экономия памяти, позволяющая избежать ошибок
    времени выполнения из-за нехватки памяти при обработке строк.
 
    В обычной ситуации для изменения исходной строки (переданной по
    значению) после выполнения функции измененную строку необходимо
    присвоить первоисточнику:
 
        VAR := "Привет"
        VAR := FUNCTION(VAR)
 
    При работе с большими строками это требует времени и памяти!
 
    Вот пример использования метода передачи по ссылке:
 
        VAR := "Привет"
        FUNCTION(@VAR)
 
    Для большинства CT II-функций передача по ссылке не дает никаких
    дополнительных эффектов, и лишь для некоторых может влиять на
    характер выполнения. При этом функция непосредственно изменяет
    значения символьных переменных, переданных по ссылке, что экономит
    память и ускоряет обработку, поскольку не осуществляется
    дополнительное копирование.
 
    Функциям, увеличивающим длину строки, нельзя передавать параметры
    по ссылке. Ниже приводится список функций, которые могут изменять
    длину строки:
 
    ATREPL()    CHARONE()       POSDEL()        WORDONE()
    CHAREVEN()  CHARONLY()      POSINS()        WORDONLY()
    CHARODD()   CHARREM()       POSREPL()       WORDTOCHAR()
 
  CSETREF()
 
    Эта функция позволяет оптимизировать скорость вычислений и
    использование памяти функциями, допускающими передачу параметров по
    ссылке. Более подробная информация о ее использовании приводится в
    описаниях соответствующих функций.
 
  CHR(26) - маркер конца файла
 
    В строке, возвращаемой такими функциями, как CRYPT(), CHARPACK() и
    многими другими, могут присутствовать символы CHR(26), что может


    вызывать проблемы при сохранении информации в memo-полях или в файлах.
    Этот символ используется как маркер конца файла и располагающаяся за
    ним информация при чтении может стать недоступна.
 
    Способом предотвращения такой потери информации является удаление
    CHR(26) из символьной строки или замена его другими символами. Для
    этого может быть предложено несколько решений, примеры которых
    приведены ниже.
 
  Короткие строки
 
    В строке длиной менее 256 байтов не могут появляться все символы
    ASCII-кода, поэтому, выявив присутствие CHR(26), можно определить
    перечень неиспользуемых символов и один из них выделить для замены:
 
    IF (CHR(26) $ cString) .AND. (LEN(cString) < 256)
        cList := CHARNOLIST(cString)            // Все отсутствующие символы
        CHARREPL(CHR(26), @cString, cList)
    ENDIF
 
  Длинные строки
 
    В более длинных строках могут появляться все 256 символов ASCII-кода,
    поэтому, выявив присутствие CHR(26), можно используя функцию
    ZEROINSERT(), преобразовать исходную строку таким образом, что в ней
    после каждых пяти подряд идущих битов со значением 1 будет вставлен
    бит со значением 0. Благодаря этому в новой строке не будет ни одного
    байта со всеми единицами - CHR(255), которым можно заменить все
    CHR(26):
 
    cString := ZEROINSERT(cString)
    CHARREPL(CHR(26), @cString, CHR(255))
 
    После чтения следует произвести обратное преобразование:
 
    CHARREPL(CHR(255), @cString, CHR(26))
    cString := ZEROREMOVE(cString)
 

 

 ADDASCII()
 Добавляет число к ASCII-коду каждого символа строки.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ADDASCII([@]<cString>, <nValue>, [<nPosition>]) --> cAddString
 
  Параметры
 
    [@]<cString> - символьный параметр, допускающий передачу по ссылке и


    задающий обрабатываемую символьную строку.
 
    <nValue> - числовое значение, добавляемое к ASCII-коду символов.
 
    <nPosition> - необязательный числовой параметр, задающий позицию
    символа, к ASCII-коду которого добавляется <nValue>. По умолчанию
    позиция последнего символа.
 
  Возвращаемое значение
 
    cAddString - модифицированная символьная строка <cString>.
 
  Описание
 
    Применение этой функции облегчает использование макросов, т.к.
    позволяет изменить строку, не прибегая к функциям типа LEFT(),
    RIGHT(), ASC() или SUBSTR() (см. Примеры). Функция производит
    преобразование символа по следующей формуле:
 
        CHR((ASC(<Символ>) + <nValue>) % 256)
 
    Функция позволяет выполнять и вычитание, но для этого требуется
    дополнительное преобразование. Параметр <nValue> должен при этом,
    учитывая предыдущую формулу, иметь значение:
 
        <nValue> = 256 - <значение, вычитаемое из ASCII-кода>
 
  Примечания
 
  . Если <nPosition> находится вне строки <cString>, то строка остается
    неизменной.
 
  . Параметр <cString> может быть передан по ссылке. При этом вызов
    CSETREF(.T.), подавляющий возвращение функцией результата, позволяет
    уменьшить потребности в рабочей памяти.
 
  Примеры
 
  . Добавление 1 к коду предпоследнего, а затем к коду последнего
    символа в строке (CHR(ASC("2")+1) дает код символа "3" и т.д.):
 
    ? ADDASCII("macro21", 1, 6)                 // "macro31"
    ? ADDASCII("macro21", 1)                    // "macro22"
 
  . Вычитание 32 для преобразования латинских строчных букв в
    прописные по формуле CHR((ASC("m") + 256 - 32) % 256):
 
    ? ADDASCII("macro21", 224, 1)               // "Macro21"
 



See Also: CSETREF()

 

 

 AFTERATNUM()
  Возвращает остаток строки после искомого вхождения подстроки.
------------------------------------------------------------------------------
 
  Синтаксис
 
    AFTERATNUM(<cSearchFor>, <cString>,
        [<nCounter>], [<nIgnore>]) --> cAfterString
 
  Параметры
 
    <cSearchFor> - символьный параметр, задающий искомую подстроку.
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
    <nCounter> - необязательный числовой параметр, задающий номер искомого
    вхождения <cSearchFor> в <cString>. По умолчанию осуществляется поиск
    последнего вхождения.
 
    <nIgnore> - необязательный числовой параметр, задающий количество
    символов с начала строки <cString>, исключаемых из поиска.
    По умолчанию 0.
 
  Возвращаемое значение
 
    cAfterString - остаток строки <cString>, начиная с первого символа,
    следующего после вхождения искомой подстроки с номером <nCounter>.
    Если последний символ обрабатываемой строки является также последним
    и в искомой подстроке, или искомое вхождение не найдено, то
    возвращается пустая строка.
 
  Описание
 
    Функция находит требуемое по номеру вхождение подстроки <cSearchFor>
    в строке <cString> и возвращает ее остаток, начинающийся с первого
    символа, следующего за искомым вхождением.
 
    Для поиска требуемого по номеру вхождения подстроки функция
    просматривает, начиная слева, обрабатываемую строку, осуществляя поиск
    каждого вхождения. В зависимости от состояния режима прохода по
    символам, переключаемого функцией CSETATMUPA(), дальнейший поиск
    продолжается с символа, следующего либо за последним (режим включен),
    либо за первым (режим выключен) символом последнего вхождения.
 
  Примечания
 
  . Применение функции SETATLIKE() позволяет организовать поиск по


    образцу.
 
  Примеры
 
  . Поиск последнего вхождения:
 
    CSETATMUPA(.T.)
    ? AFTERATNUM("aa", "aBaaBaaaX")             // "X"
 
    CSETATMUPA(.F.)
    ? AFTERATNUM("aa", "aBaaBaaaX)              // "aX"
 
  . Поиск третьего вхождения с пропуском четырех первых символов.
    Обратите внимание на влияние режима прохода по символам на
    результаты:
 
    String := " AxxBBBBxxCCCCxxxDxxEExx"
 
    CSETATMUPA(.T.)
    ? AFTERATNUM("xx", String, 3, 4)            // "DxxEExx"
 
    CSETATMUPA(.F.)
    ? AFTERATNUM("xx", String, 3, 4)            // "EExx"
 

See Also: CSETATMUPA()
SETATLIKE()

 

 

 ASCIISUM()
 Возвращает сумму ASCII-кодов всех символов строки.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ASCIISUM(<cString>) --> nASCIISum
 
  Параметры
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
  Возвращаемое значение
 
    nASCIISum - числовое значение суммы ASCII-кодов.
 
  Описание
 
    Функция позволяет формировать простые контрольные суммы для символьных
    строк, что может применяться для выявления искажений при передаче
    данных.
 
  Примечания
 
  . Функция не учитывает позиции символов, т.е. не может быть выявлен
    факт перестановки символов. Для этого следует использовать функцию
    CHECKSUM().
 
  Примеры
 
  . При перестановке символов результаты одинаковы:
 
    ? ASCIISUM("abc")           // Результат: 294
 
    ? ASCIISUM("cba")           // Результат: 294
 
  . Для пустой строки сумма равна 0:
 
    ? ASCIISUM("")              // Результат: 0
 

See Also: CHECKSUM()

 

 

 ASCPOS()
 Возвращает ASCII-код символа, находящегося в заданной позиции строки.


------------------------------------------------------------------------------
 
  Синтаксис
 
    ASCPOS(<cString>, [<nPosition>]) --> nASCIIValue
 
  Параметры
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
    <nPosition> - необязательный числовой параметр, задающий позицию
    символа строки <cString>. По умолчанию позиция последнего символа.
 
  Возвращаемое значение
 
    nASCIIValue - числовой ASCII-код символа.
 
  Описание
 
    Функция позволяет определить ASCII-код желаемого символа в строке.
 
  Примечания
 
  . Возвращаемая величина может находиться в диапазоне от 0 до 255.
 
  . Если <cString> пустая строка или <nPosition> больше, чем число
    символов в строке, то ASCPOS() возвращает 0.
 
  Примеры
 
  . Вместо:
 
    ? ASC(SUBSTR(String, 5, 1))
 
  . можно указать:
 
    ? ASCPOS(String, 5)
 

See Also: VALPOS()

 

 

 ATADJUST()
  Выравнивает искомую подстроку по заданной позиции.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ATADJUST(<cSearchFor>, <cString>, <nTargetPosition>,
        [<nCounter>], [<nIgnore>], [<cChar|nChar>]) --> cAdjustString
 
  Параметры
 
    <cSearchFor> - символьный параметр, задающий искомую подстроку.
 
    <cString> - символьный параметр, задающий строку, внутри которой
    осуществляется выравнивание.
 
    <nTargetPosition> - числовое значение позиции для сдвига подстроки.
 
    <nCounter> - необязательный числовой параметр, задающий номер
    обрабатываемого вхождения <cSearchFor>. По умолчанию последнее
    вхождение.
 
    <nIgnore> - необязательный числовой параметр, задающий количество
    пропускаемых от начала строки символов.


По умолчанию 0.
 
    <cChar|nChar> - необязательный параметр, задающий символ-заполнитель,
    используемый в случае "раздвигания" при выравнивании. Он может быть
    задан либо в числовом виде ASCII-кода в диапазоне от 0 до 255, либо в
    виде отдельного символа. По умолчанию используется пробел (32).
 
  Возвращаемое значение
 
    cAdjustString - измененная символьная строка.
 
  Описание
 
    Функция осуществляет поиск вхождения подстроки <cSearchFor> в исходную
    строку. С найденной позиции остаток строки <cString> перемещается на
    позицию <nTargetPosition> либо удалением, либо вставкой символов
    <cChar|nChar>.
 
    Дополнительно можно указать номер обрабатываемого вхождения
    <cSearchFor>, а также исключить из поиска требуемое количество
    символов в начале исходной строки.
 
  Примечания
 
  . Режим поиска управляется вызовом функции CSETATMUPA(). Для
    организации поиска по образцу можно использовать функцию SETATLIKE().
 
  Примеры
 
  . Выравнивание комментариев по столбцу 60. Поиск осуществляется до
    первого вхождения "//". Поскольку перед символами "//" должен
    находиться пробел, то осуществляется поиск подстроки " //".
 
    ATADJUST(" //", Line, 60, 1)
 
  . Выравнивание расширения имени файла по позиции 10 и удаление
    символа "." при распечатке списка файлов текущей директории:
 
    aDir := DIRECTORY()                 // Например:    WINDOW.DBF
                                        //              PLZ.DBF
                                        //              BACK.DBF
                                        //              HELP.DBF
    FOR nI = 1 TO LEN(aDir)             //              LOG.DBF
        CHARREM(".", ATADJUST(".", aDir[nI][1], 10))
    NEXT ni                             // Результат:   WINDOW  DBF


                                        //              PLZ     DBF
                                        //              BACK    DBF
                                        //              HELP    DBF
                                        //              LOG     DBF
 
  . Использование ATADJUST() в сочетании с CSETATMUPA(). Вопрос,
    дважды или трижды "AA" входит в "AAA", решается в зависимости от
    режима, установленного вызовом функции CSETATMUPA(), управляющей
    режимом продолжения поиска CT II-функциями:
 
    CSETATMUPA(.F.)
    ? ATADJUST("AA", "123AAABBB", 7, 2)         // Подстрока
                                                // не найдена
    CSETATMUPA(.T.)
    ? ATADJUST("AA", "123AAABBB", 7, 2)         // "123A  AABBB"
 

See Also: CSETATMUPA()
SETATLIKE()

 

 

 ATNUM()
  Возвращает позицию начала искомой подстроки в строке.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ATNUM(<cSearchFor>, <cString>,
        [<nCounter>], [<nIgnore>]) --> nPosition
 
  Параметры
 
    <cSearchFor> - символьный параметр, задающий искомую подстроку.
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
    <nCounter> - необязательный числовой параметр, задающий номер искомого
    вхождения <cSearchFor> в <cString>. По умолчанию осуществляется поиск
    последнего вхождения.
 
    <nIgnore> - необязательный числовой параметр, задающий количество
    символов с начала строки <cString>, исключаемых из поиска. По
    умолчанию 0.
 
  Возвращаемое значение
 
    nPosition - номер позиции начала искомой подстроки в строке. Если
    требуемое вхождение не найдено, то возвращается 0.
 
  Описание
 
    Функция возвращает начальную позицию искомого вхождения подстроки


    <cSearchFor> в строке <cString>.
 
    Для поиска требуемого по номеру вхождения подстроки функция
    просматривает, начиная слева, обрабатываемую строку, осуществляя поиск
    каждого вхождения. В зависимости от состояния режима прохода по
    символам, переключаемого функцией CSETATMUPA(), дальнейший поиск
    продолжается с символа, следующего либо за последним (режим включен),
    либо за первым (режим выключен) символом последнего вхождения.
 
  Примечания
 
  . Применение функции SETATLIKE() позволяет организовать поиск по
    образцу.
 
  Примеры
 
  . Поиск последнего вхождения:
 
    ? ATNUM("bc", "abcdeabc")                   // Результат: 7
 
  . Поиск первого вхождения:
 
    ? ATNUM("bc", "abcdeabc", 1)                // Результат: 2
 
  . Поиск первого вхождения с пропуском первых трех символов:
 
    ? ATNUM("bc", "abcdeabc", 1, 3)             // Результат: 7
 
  . Влияние CSETATMUPA() на поиск последнего вхождения "aa" в
    "aaa":
 
    CSETATMUPA(.F.)                             // Выключение режима
    ? ATNUM("aa", "aaa")                        // Результат: 1
 
    CSETATMUPA(.T.)                             // Включение режима
    ? ATNUM("aa", "aaa")                        // Результат: 2
 

See Also: CSETATMUPA()
SETATLIKE()

 

 

 ATREPL()
 Заменяет искомую подстроку в строке на заданную.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ATREPL(<cSearchFor>, [@]<cString>,
        <cReplace>, [<nCounter>],
        [<lMode>] --> cReplString
 
  Параметры
 
    <cSearchFor> - символьный параметр, задающий искомую подстроку.
 
    [@]<cString> - символьный параметр, допускающий передачу по ссылке и


    задающий обрабатываемую символьную строку.
 
    <cReplace> - символьный параметр, задающий строку, заменяющую
    найденную подстроку в исходной строке.
 
    <nCounter> - необязательный числовой параметр, задающий номер или
    количество вхождений <cSearchFor> в <cString>. По умолчанию последнее
    вхождение.
 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. замену только искомого вхождения подстроки, а при значении .F. и
    по умолчанию замену всех подстрок до искомого вхождения включительно.
 
  Возвращаемое значение
 
    cReplString - символьная строка с замененными одним или несколькими
    вхождениями подстрок <cSearchFor> на <cReplace>.
 
  Описание
 
    Функция позволяет заменить одну или несколько подстрок в <cString>.
    Заменяющая подстрока <cReplace> может быть короче или длиннее, чем
    <cSearchFor>.
 
    Если длина <cReplace> меньше или равна <cSearchFor>, то поиск
    осуществляется с учетом режима, устанавливаемого функцией
    CSETATMUPA(), в зависимости от которого замена даст различные
    результаты.
 
    Поиск всех вхождений подстроки <cSearchFor> осуществляется с начала
    строки <cString>, причем ищутся все случаи вхождения подстроки. Если
    режим прохода по символам выключен (.F.), то поиск продолжается со
    следующего за последним символа замененной подстроки, а иначе поиск
    продолжается со второго символа замененной подстроки.
 
  Примечания
 
  . Применение функции SETATLIKE() позволяет организовать поиск по
    образцу.
 
  . Если <cSearchFor> и <cReplace> имеют одинаковую длину, то
    <cString> может передаваться по ссылке.
 
  . Если <cSearchFor> и <cReplace> идентичны, то функция возвращает
    управление, не выполняя действий, т.к. при этом, если вызовом
    CSETATMUPA(.T.) установлен режим прохода по символам, поиск и вставка


    будут продолжаться бесконечно.
 
  Примеры
 
  . Замена всех "123" на "ab"
 
    ? ATREPL("123", "123_123_123", "ab")                // "ab_ab_ab"
 
  . Замена на более длинную строку (режим прохода по символам
    игнорируется):
 
    ? ATREPL("789", "789_789", "abcd")                  // "abcd_abcd"
 
  . Замена всех "123" на "ab" в первых двух вхождениях подстроки:
 
    ? ATREPL("123", "123_123_123", "ab", 2)             // "ab_ab_123"
 
  . Замена только второго вхождения "123" на "ab"
 
    ? ATREPL("123", "123_123_123", "ab", 2, .T.)        // "123_ab_123"
 
  . Замена всех "aa" на "a" с учетом влияния CSETATMUPA():
 
    CSETATMUPA(.F.)
    ? ATREPL("aa", "aaaa", "a")                         // "aa"
 
    CSETATMUPA(.T.)
    ? ATREPL("aa", "aaaa", "a")                         // "a"
 
  . Замена "abc" на "ab" при включенном и выключенном режиме прохода
    по символам:
 
    CSETATMUPA(.T.)
    ? ATREPL("abc", "123abcc456", "ab")                 // "123ab456"
 
    CSETATMUPA(.F.)
    ? ATREPL("abc", "123abcc456", "ab")                 // "123abc456"
 

See Also: CSETATMUPA()
SETATLIKE()

 

 

 ATTOKEN()
 Возвращает позицию элемента в строке.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ATTOKEN(<cString>, [<cDelimiters>], [<nCounter>]) --> nPosition
 
  Параметры
 
    <cString> - символьный параметр, задающий обрабатываемую строку.


 
    <cDelimiters> - необязательный символьный параметр, задающий список
    разделителей, используемых для выделения элементов. Значение по
    умолчанию приведено в подразделе Описание.
 
    <nCounter> - необязательный числовой параметр, задающий номер
    искомого элемента. По умолчанию последний элемент.
 
  Возвращаемое значение
 
    nPosition - номер начальной позиции искомого элемента в <cString>.
 
  Описание
 
    Функция позволяет определить начальную позицию элемента в <cString>,
    что весьма полезно при работе с другими функциями обработки строк. По
    умолчанию функция использует следующие разделители:
 
    CHR(32), CHR(0), CHR(9), CHR(10), CHR(13),
    CHR(26), CHR(32), CHR(138), CHR(141)
 
    и символы:
 
    ,.;:!?/\<>()^#&%+-*
 
    Список разделителей может быть заменен при вызове функции.
    Некоторые примеры использования разделителей приведены в таблице.
 
    Таблица 4-1. Рекомендуемые разделители
    --------------------------------------------------------------------
    Элемент текста      <cDelimiter>
    --------------------------------------------------------------------
    Страницы            CHR(12) (прогон страницы)
    Предложения         ".!?"
    Имена файлов        ":\."
    Строки чисел        ",."
    Строки дат          "/."
    Строки времени      ":."
    --------------------------------------------------------------------
 
  Примечания
 
  . Используемые в качестве разделителей коды CHR(138) и CHR(141) в
    альтернативной кодировке соответствуют буквам кириллицы "К" и "Н". В
    связи с этим при использовании функции для разбора текстов на русском
    языке необходимо заменять список разделителей.
 
  Примеры
 
  . Начальная позиция последнего элемента:
 
    ? ATTOKEN("Добрый день!")                           // 8


 
  . Начальная позиция третьего элемента:
 
    ? ATTOKEN("Какой замечательный день!", 3)           // 21
 
  . Начальная позиция несуществующего элемента:
 
    ? ATTOKEN("Какой замечательный день!", 6)           // 0
 

See Also: NUMTOKEN()
TOKEN()
TOKENLOWER()
TOKENUPPER()

 

 

 BEFORATNUM()
  Возвращает часть строки перед искомым вхождением подстроки.
------------------------------------------------------------------------------
 
  Синтаксис
 
    BEFORATNUM(<cSearchFor>, <cString>,
        [<nCounter>], [<nIgnore>]) --> cBeforeString
 
  Параметры
 
    <cSearchFor> - символьный параметр, задающий искомую подстроку.
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
    <nCounter> - необязательный числовой параметр, задающий номер искомого
    вхождения <cSearchFor> в <cString>. По умолчанию осуществляется поиск
    последнего вхождения.
 
    <nIgnore> - необязательный числовой параметр, задающий количество
    символов с начала строки <cString>, исключаемых из поиска. По
    умолчанию 0.
 
  Возвращаемое значение
 
    cBeforeString - часть строки <cString> от ее начала и до начала
    заданного вхождения искомой подстроки, или пустая строка, если
    искомая подстрока не найдена.
 
  Описание
 
    Функция находит требуемое по номеру вхождение подстроки <cSearchFor> в
    строке <cString> и возвращает часть строки, предшествующую искомому
    вхождению.
 
    Для поиска требуемого по номеру вхождения подстроки функция
    просматривает, начиная слева, обрабатываемую строку, осуществляя поиск
    каждого вхождения.
 
    В зависимости от состояния режима прохода по символам, переключаемого
    функцией CSETATMUPA(), дальнейший поиск продолжается с символа,
    следующего либо за последним (режим включен), либо за первым (режим


    выключен) символом последнего вхождения.
 
  Примечания
 
  . Применение функции SETATLIKE() позволяет организовать поиск по
    образцу.
 
  Примеры
 
  . Поиск последнего вхождения:
 
    ? BEFORATNUM("ab", "abcabdabe")             // "abcabd"
 
  . Поиск первого вхождения:
 
    ? BEFORATNUM("ab", "abcabdabe", 1)          // ""
 
  . Поиск первого вхождения с пропуском трех первых символов:
 
    ? BEFORATNUM("ab", "abcabdabe", 1, 3)       // "abc"
 
  . Поиск третьего вхождения с пропуском первых четырех символов.
    Обратите внимание на влияние режима прохода по символам на результаты:
 
    String := "AxxBBBBxxCCCCxxxDxxEExx"
 
    CSETATMUPA(.T.)
    ? BEFORATNUM("xx", String, 3, 4)            // "AxxBBBBxxCCCCx"
 
    CSETATMUPA(.F.)
    ? BEFORATNUM("xx", String, 3, 4)            // "AxxBBBBxxCCCCxxxD"
 

See Also: CSETATMUPA()
SETATLIKE()

 

 

 CENTER()
 Центрирует и расширяет строку.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CENTER(<cString>, [<nLength>],
        [<cPadChar>], [<lMode>]) --> cCenterString
 
  Параметры
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
    <nLength> - необязательный числовой параметр, задающий длину строки в
    которой должна быть центрирована <cString>. По умолчанию используется
    ширина экрана за вычетом удвоенного номера столбца текущей позиции
    курсора:
 
    MAXCOL() + 1 - (COL() * 2)
 
    <cPadChar> - необязательный символьный параметр, задающий
    символ-заполнитель. По умолчанию используется пробел.
 
    <lMode> - необязательный логический параметр, задающий при значении


    .T. режим вставки символов-заполнителей с обеих сторон <cString>, а
    при значении .F. или по умолчанию режим вставки только слева.
 
  Возвращаемое значение
 
    cCenterString - символьная строка.
 
  Описание
 
    Функция предоставляет простой способ центрирования текстовых строк,
    возвращая строку, дополненную специальными символами только слева или
    слева и справа от центрируемого текста. Символы, совпадающие с
    <cPadChar>, в начале и конце строки предварительно отсекаются. Если
    параметр <nLength> опущен, то функция для обеспечения корректного
    вывода в окно использует ширину окна (MAXCOL()+1).
 
    Кроме того, имеет значение текущая или устанавливаемая командой SAY
    позиция курсора (удвоенный номер столбца вычитается из ширины окна).
    Поэтому при выводе на экран с 80 столбцами при текущей позиции курсора
    в столбце 20 и опущенном параметре, центрирование будет производиться
    для получения 40-символьной строки, начинающейся в столбце 20.
 
  Примечания
 
  . Если длина центрируемой строки нечетна, то слева вставляется
    один дополнительный символ.
 
  . При выполнении команды ? в Clipper 5.0 вычисление всех выражений
    производится до перевода строки (CR/LF), т. е. номер столбца
    определяется предыдущей операцией. Для того, чтобы текущая позиция
    курсора не влияла на центрирование, вызов функции следует производить,
    не опуская параметр <nLength>. Например, так:
 
        ? CENTER(<центрируемая строка>, NUMCOL())
 
  Примеры
 
  . Центрирование с расширением строки до 10 символов и со
    вставкой пробелов только слева:
 
    ? CENTER("xx", 10)            // "    xx"
 
  . То же, но с заполнением слева и справа:
 
    ? CENTER("xx", 10, .T.)       // "    xx    "
 
  . Символы, соответствующие <cPadChar>, в конце и начале


    исходной строки перед центрированием удаляются:
 
    ? CENTER(" xx ", 10, .T.)     // "    xx    "
 
  . Заполнение другими символами:
 
    ? CENTER("xx", 10, ".")       // "....xx"
    ? CENTER("xx", 10, ".", .T.)  // "....xx...."
    ? CENTER("x", 10, ".", .T.)   // ".....x...."
 
  . Центрирование "CLIPPER" символом ".", начиная с позиции 10:
 
    CGA(40)                       // Переключение в режим с 40 столбцами
                                  // Начальное заполнение экрана
    @ 0, 0 SAY REPLICATE("X",40)  // xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    @ 1, 0 SAY REPLICATE("X",40)  // xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    @ 2, 0 SAY REPLICATE("X",40)  // xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 
    @ 1, 10 SAY CENTER("CLIPPER", ".", .T.)
                                  // xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                                  // xxxxxxxxx.......CLIPPER......xxxxxxxx
                                  // xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 

See Also: PADLEFT()
PADRIGHT()

 

 

 CHARADD()
 Суммирует ASCII-коды символов двух строк.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CHARADD([@]<cString1>, <cString2>) --> cAddString
 
  Параметры
 
[@]<cString1> - символьный параметр, допускающий передачу по ссылке и задающий строку, к значениям кодов символов которой прибавляются коды из строки <cString2>
 
<cString2> - символьный параметр, задающий строку, значения кодов
символов которой прибавляются к <cString1>.
 
  Возвращаемое значение
 
    cAddString - модифицированная строка <cString1>.
 
  Описание
 
    Функцию можно использовать для простого кодирования символьных строк,


    особенно если кодирование осуществляется строкой с различными
    символами.
 
  Примечания
 
. Если обе символьные строки имеют одинаковую длину, то первый байт <cString1> связывается с первым байтом <cString2>, второй байт <cString1> - со вторым байтом <cString2> и т.д.
 
. Если <cString2> короче, чем <cString1>, то операция будет продолжаться опять с первого байта <cString2> по достижении ее конца. Если <cString1> короче, чем cString2>, то работа функции прекратится по достижении конца <cString1>.
 
. Результат сложения кодов, превышающий 255, преобразуется по формуле:
 
      (ASC(<символ 1>) + ASC(<символ 2>)) % 256
 
. Параметр <cString1> может быть передан по ссылке. При этом вызов CSETREF(.T.), подавляющий возвращение функцией результата, позволяет уменьшить потребности в рабочей памяти.
 
  Примеры
 
  . Прибавление 1 к коду каждого символа:
 
    ? CHARADD("01234", CHR(1))          // "12345"
 
  . Прибавление 255 к коду каждого символа соответствует
    вычитанию 1:
 
    ? CHARADD("12345", CHR(255))        // "01234"
 

See Also: ADDASCII()
CSETREF()

 

 

 CHARAND()
 Логически умножает ASCII-коды символов двух строк.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CHARAND([@]<cString1>,<cString2>) --> cString
 
  Параметры
 
    [@]<cString1> - символьный параметр, допускающий передачу по ссылке
    и задающий строку, значения ASCII-кодов символов которой логически
    умножаются на значения ASCII-кодов символов строки <cString2>.
 
    <cString2> - символьный параметр, задающий строку, значения кодов
    символов которой используются для модификации <cString1>.
 
  Возвращаемое значение
 
    cString - модифицированная строка <cString1>.


 
  Описание
 
    Функция может быть использована как простой способ установки в 0
    любого заданного бита каждого из символов строки. Эта функция
    объединяет (связывает операцией AND бит за битом) каждый символ в
    строке <cString1> с соответствующим символом в <cString2>.
 
  Примечания
 
  . Если обе символьные строки имеют одинаковую длину, то первый
    байт <cString1> связывается с первым байтом <cString2>, второй байт
    <cString1> - со вторым байтом <cString2> и т.д.
 
  . Если <cString2> короче, чем <cString1>, то по достижении конца
    <cString2> умножение будет продолжаться опять с первого байта
    <cString2>. Если <cString1> короче, чем <cString2>, то работа функции
    прекратится по достижении конца <cString1>.
 
  . Параметр <cString1> может быть передан по ссылке. При этом
    вызов CSETREF(.T.), подавляющий возвращение функцией результата,
    позволяет уменьшить потребности в рабочей памяти.
 
  Примеры
 
  . Поскольку второй параметр короче первого, то символы "1", "a" и
    первый символ пробела связываются с символом "1" из второго параметра
    ("123"), "2", "b" и второй символ пробела - с "2", а "3", "с" и третий
    символ пробела - с "3":
 
    ? CHARAND("123abc   ", "123")               // '123!"#   '
 

See Also: CHARNOT()
CHAROR()
CHARXOR()
CSETREF()

 

 

 CHAREVEN()
 Возвращает строку, содержащую символы четных позиций в исходной строке.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CHAREVEN(<cString>) --> cEvenString
 
  Параметры
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
  Возвращаемое значение


 
    cEvenString - строка символов, имевших в строке <cString> четные
    номера позиций.
 
  Описание
 
    Функция собирает все символы с четными номерами позиций в исходной
    строке в новую символьную строку. Это позволяет довольно просто
    разделить строку образа экрана на строки символов и атрибутов.
 
    Благодаря этому функцию удобно использовать совместно с
    видеофункциями. При обработке строки, считанной с экрана, функция
    возвращает строку с одними атрибутами (без символов).
 
  Примечания
 
  . Первая позиция в строке имеет номер 1 и, следовательно, является
    нечетной.
 
  Примеры
 
  . Выделение символов четных позиций:
 
    ? CHAREVEN("1234a")         // "24"
 
  . Преобразование текста "вразрядку" в "нормальный":
 
    ? CHAREVEN(" H e l l o")    // "Hello"
 

See Also: CHARMIX()
CHARODD()
SCREENMIX()
SCREENSTR()
STRSCREEN()

 

 

 CHARLIST()
 Составляет список символов, входящих в исходную строку.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CHARLIST(<cString>) --> cContained
 
  Параметры
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
  Возвращаемое значение
 
    cContained - символьная строка, содержащая список символов.
 
  Описание
 
    Функция формирует список символов, встречающихся в <cString>.
    Каждый символ вносится в список только один раз.
 
  Примечания
 
  . Длина возвращаемой строки не может превышать 256 символов.
 
  . Если список отсортировать функцией CHARSORT(), то получится
    список символов в алфавитном порядке.
 
  Примеры
 
  . Перечень букв, содержащихся в тексте:
 
    ? CHARLIST("Hello goodbye")                 // "Helo gdby"


 
  . Сортировка перечня букв:
 
    ? CHARSORT(CHARLIST("Hello goodbye"))       // " Hbdegloy"
 

See Also: CHARONE()
CHARSORT()

 

 

 CHARMIRR()
 Зеркально переворачивает строку.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CHARMIRR([@]<cString>, [<lBlank>]) --> cMirrString
 
  Параметры
 
    [@]<cString> - символьный параметр, допускающий передачу по ссылке и
    задающий обрабатываемую символьную строку.
 
    <lBlank> - необязательный логический параметр, задающий при значении
    .T. блокирование обработки конечных пробелов, а при значении .F. или
    по умолчанию обработку всех символов.
 
  Возвращаемое значение
 
    cMirrString - модифицированная строка <cString>.
 
  Описание
 
    Функция зеркально отображает строку относительно ее середины,
    возвращая палиндром исходной строки. Логический параметр позволяет
    при переворачивании строки игнорировать конечные пробелы, благодаря
    чему можно индексировать базы данных по концам символьных полей.
 
  Примечания
 
  . Параметр <cString> может быть передан по ссылке. При этом
    вызов CSETREF(.T.), подавляющий возвращение функцией результата,
    позволяет уменьшить потребности в рабочей памяти.
 
  Примеры
 
  . Зеркальное отображение:
 
    ? CHARMIRR("abc 321")               // Результат: "123 cba"
 
  . Некоторые известные палиндромы:
 
    ? CHARMIRR("ABLE WAS I ERE I SAW ELBA")
 
  . Для индексирования необходимо отсекать конечные пробелы, а
    иначе поиск по перевернутой строке будет невозможен:
 
    INDEX ON CHARMIRR(Field, .T.) TO Index
 
  . Поиск по "зеркальному" индексу полей, заканчивающихся на
    "per":
 
    SEEK "rep"
 

See Also: CSETREF()



 

 

 CHARMIX()
 Смешивает символы двух строк.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CHARMIX(<cString1>, <cString2>) --> cString
 
  Параметры
 
    <cString1> - символьный параметр, задающий первую из смешиваемых
    строк.
 
    <cString2> - символьный параметр, задающий вторую из смешиваемых
    строк.
 
  Возвращаемое значение
 
    cString - символьная строка длиной LEN(<cString1>) * 2. Если
    <cString2> содержит пустую строку, то возвращается неизмененная
    строка <cString1>.
 
  Описание
 
    Функция возвращает смесь из двух строк. Символы из <cString1> и
    <cString2> попеременно помещаются в результирующую строку, длина
    которой определяется длиной строки <cString1>.
 
    Если <cString2> длиннее, чем <cString1>, то она урезается до длины
    последней, а если <cString2> короче, чем <cString1>, то она
    используется повторно до тех пор, пока не закончится <cString1>.
 
  Примечания
 
  . Функция позволяет объединить строки, ранее разделенные функциями
    CHAREVEN() и CHARODD().
 
  Примеры
 
  . Смешивание строк:
 
    ? CHARMIX("ABC", "123")                     // "A1B2C3"
 
  . Вторая строка короче:
 
    ? CHARMIX("ABCDE", "12")                    // "A1B2C1D2E1"
 
  . Первая строка короче:
 
    ? CHARMIX("AB", "12345")                    // "A1B2"
 
  . "Разрядка" символов в строке:
 
    ? CHARMIX("HELLO". " ")                     // "H E L L O"
 
  . Если второй параметр пустая строка, то возвращается неизмененная
    строка первого параметра:
 
    ? CHARMIX("HELLO", "")                      // "HELLO"


 

See Also: CHAREVEN()
CHARODD()
EXPAND()
SCREENMIX()

 

 

 CHARNOLIST()
 Составляет список символов, отсутствующих в исходной строке.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CHARNOLIST([<cString>]) --> cNotContained
 
  Параметры
 
    <cString> - необязательный символьный параметр, задающий
    обрабатываемую строку. По умолчанию пустая строка.
 
  Возвращаемое значение
 
    cNotContained - символьная строка, состоящая из символов,
    отсутствующих в <cString>.
 
  Описание
 
    Функция определяет все символы, отсутствующие в <cString>. Символы,
    полученные в результате ее работы, могут быть использованы для замены
    или в сложных процедурах удаления.
 
  Примеры
 
  . Удаление всех символов, за исключением "X", "Y" и "Z":
 
    String := "ABXCDYEF"
    ? CHARREM(CHARNOLIST("XYZ"), String)        // "XY"
 
  . Генерация списка всех 256 символов ASCII-кода:
 
    ? CHARNOLIST()
 
  . Для сохранения текста в memo-поле необходимо заменить все
    CHR(0):
 
    cNoList := CHARNOLIST(cMemoText)            // Список отсутствующих
                                                // символов
    cNoChar := SUBSTR(cNoList, 1, 1)            // Один из них
 
    * Замена CHR(0) на один из отсутствующих символов
 
    CHARREPL(CHR(0), @cMemoText, cNoChar)
 

See Also: CHARLIST()
CHARONE()

 

 

 CHARNOT()
 Инвертирует биты каждого символа строки.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CHARNOT([@]<cString>) --> cNotString
 
  Параметры
 
    [@]<cString> - символьный параметр, допускающий передачу по ссылке и
    задающий обрабатываемую символьную строку.


 
  Возвращаемое значение
 
    cNotString - модифицированная строка <cString>.
 
  Описание
 
    Функция инвертирует каждый бит в <cString>, что позволяет легко
    получать убывающие индексные последовательности.
 
  Примечания
 
  . Параметр <cString> может быть передан по ссылке. При этом вызов
    CSETREF(.T.), подавляющий возвращение функцией результата, позволяет
    уменьшить потребности в рабочей памяти.
 
  Примеры
 
  . Повторное инвертирование восстанавливает исходную строку:
 
    CHARNOT("abc")              // "ЮЭЬ"
    CHARNOT("ЮЭЬ")              // "abc"
 

See Also: CHARAND()
CHARXOR()
CHAROR()
COMPLEMENT()
CSETREF()

 

 

 CHARODD()
 Возвращает строку, содержащую символы нечетных позиций исходной строки.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CHARODD(<cString>) --> cOddString
 
  Параметры
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
  Возвращаемое значение
 
    cOddString - строка символов, находившихся на нечетных позициях в
    строке <cString>.
 
  Описание
 
    Функция собирает все символы с нечетными номерами позиций в исходной
    строке в новую символьную строку. Это позволяет довольно просто
    разделить строку образа экрана на строки символов и атрибутов.
 
    Благодаря этому функцию удобно использовать совместно с
    видеофункциями. При обработке строки, считанной с экрана, функция
    возвращает строку с одними символами (без атрибутов).
 
  Примечания
 
  . Первая позиция в строке имеет номер 1 и, следовательно,
    является нечетной.
 
  Примеры
 
  . Выделение всех символов нечетных позиций:
 
    ? CHARODD("1234a")                  // "13a"
 
  . Преобразование текста "вразрядку" в "нормальный":


 
    ? CHARODD("H e l l o")              // "Hello"
 

See Also: CHARMIX()
CHAREVEN()
SCREENMIX()
SCREENSTR()
STRSCREEN()

 

 

 CHARONE()
  Удаляет из строки одинаковые смежные символы, оставляя по одному.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CHARONE([<cDeleteChar>, ] <cString>) --> cOneString
 
  Параметры
 
    <cDeleteChar> - необязательный символьный параметр, задающий список
    обрабатываемых символов, которые после преобразования не должны
    повторяться подряд. Если параметр опущен вместе с последующей запятой,
    то производится удаление всех одинаковых смежных символов. Однако,
    если параметр опущен, а разделяющая запятая оставлена, то удаление
    смежных символов не производится.
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
  Возвращаемое значение
 
    cOneString - символьная строка.
 
  Описание
 
    Функция осуществляет внутри <cString> поиск одинаковых расположенных
    рядом символов. После удаления одного из смежных дублирующихся
    символов проверяются и при необходимости удаляются следующие.
 
    Таким образом, в возвращаемой строке из каждой последовательности
    дублирующихся символов остается один. В этом заключается значительное
    отличие описываемой функции от функции CHARLIST(), которая удаляет
    многократное вхождение символов в строку.
 
  Примеры
 
  . Удаление повторений любого символа:
 
    ? CHARONE("122333a123")                     // "123a123"
    ? CHARONE("A  B  CCCD")                     // "A B CD"
 
  . Некорректная запись для данной функции (оставлена запятая при
    опущенном необязательном параметре):
 
    ? CHARONE(, "122333a123")                   // "122333a123"


    ? CHARONE(, "A  B  CCCD")                   // "A  B  CCCD"
 
  . Удаление смежных символов ".":
 
    ? CHARONE(".", "A..B..A..B")                // "A.B.A.B"
 
  . Удаление смежных символов "o":
 
    ? CHARONE("o", "122oooB12o")                // "122oB12о"
 

See Also: CHARLIST()
CHARONLY()
CHARREM()
WORDONE()

 

 

 CHARONLY()
  Возвращает строку символов, общих для двух заданных строк.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CHARONLY(<cString1>, <cString2>) --> cString
 
  Параметры
 
    <cString1> - символьный параметр, задающий список символов,
    оставляемых в <cString2>.
 
    <cString2> - символьный параметр, задающий обрабатываемую строку.
 
  Возвращаемое значение
 
    cString - строка общих символов.
 
  Описание
 
    Функция удаляет из строки <cString2> все символы, отсутствующие в
    строке <cString1>. Она удобна для приведения данных к единому формату.
    Это относится к таким случаям, как телефонные номера, регистрация
    клиентов и т.п. (см. Примеры).
 
  Примеры
 
  . Поскольку в телефонном номере роль играют только цифры, необходимо
    удалить знаки, отличные от них. Оба приведенных случая дают одинаковый
    результат "2133907923":
 
    ? CHARONLY("0123456789", "213 - 39 07 923")
    ? CHARONLY("0123456789", "213 / 390 7923")
 

See Also: CHARONE()
CHARREM()
WORDONLY()

 

 

 CHAROR()
 Логически складывает ASCII-коды всех символов двух строк.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CHAROR([@]<cString1>, <cString2>) --> cString
 


  Параметры
 
    [@]<cString1> - символьный параметр, допускающий передачу по ссылке
    и задающий строку, значения ASCII-кодов символов которой логически
    складываются с ASCII-кодами символов строки <cString2>.
 
    <cString2> - символьный параметр, задающий строку, значения кодов
    символов которой используются для модификации <cString1>.
 
  Возвращаемое значение
 
    cString - модифицированная строка <cString1>.
 
  Описание
 
    Функция выполняет операцию OR (логическое "ИЛИ") для каждого бита
    символов строки <cString1> с соответствующими битами символов
    <cString2>. Таким образом, заданные биты во всех символах строки могут
    быть установлены в значение 1.
 
  Примечания
 
  . Если обе символьные строки имеют одинаковую длину, то первый
    байт <cString1> связывается с первым байтом <cString2>, второй байт
    <cString1> - со вторым байтом <cString2> и т.д.
 
  . Если <cString2> короче, чем <cString1>, то по достижении конца
    <cString2> связывание будет продолжаться опять с первого байта
    <cString2>. Если <cString1> короче, чем <cString2>, то работа функции
    прекращается по достижении конца <cString1>.
 
  . Параметр <cString1> может быть передан по ссылке. При этом
    вызов CSETREF(.T.), подавляющий возвращение функцией результата,
    позволяет уменьшить потребности в рабочей памяти.
 
  Примеры
 
  . Преобразование CHR(1) в "1", а CHR(2) в "2" и т.д.:
 
    ? CHAROR(CHR(1) + CHR(2), "0")              // "12"
 
  . Установка бита 5 во всех байтах в значение 1 (операция OR с
    CHR(32)):
 
    ? CHAROR("123ABCC[\]abc", CHR(32))          // "123abc(|) abc"
 

See Also: CHARAND()
CHARNOT()
CHARXOR()
CSETREF()

 

 



 CHARPACK()
 Возвращает упакованную строку.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CHARPACK(<cString>, [<nMethod>] --> cPackString
 
  Параметры
 
    <cString> - символьный параметр, задающий упаковываемую строку.
 
    <nMethod> - необязательный числовой параметр, задающий номер
    алгоритма упаковки. По умолчанию 0.
 
  Возвращаемое значение
 
    cPackString - символьная строка.
 
  Описание
 
    Функция позволяет упаковать (сжать) содержимое строки и поддерживает
    два различных метода упаковки:
 
    Таблица 4-2. Поддерживаемые методы упаковки
    --------------------------------------------------------------------
    <nMethod>   Метод упаковки
    --------------------------------------------------------------------
    0     Modified run length encoding (кодирование на основе длин серий)
    1     Bit oriented algorithm (бит-ориентированный алгоритм)
    --------------------------------------------------------------------
 
  Примечания
 
  . Внимание! Упакованная строка может содержать CHR(0) и другие
    управляющие символы
 
  Примеры
 
  . Упаковка текстового файла бит-ориентированным методом:
 
    Var := CHARPACK(FILESTR("C:\TEXT\TEST.TXT"), 1)
    STRFILE(Var, "C:\TEXT\TEST.PAK")            // Сохранение результата
 

See Also: CHARUNPACK()

 

 

 CHARRELA()
  Определяет одинаковую позицию вхождения для пар подстрок и строк.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CHARRELA(<cSearchFor1>, <cString1>,
        <cSearchFor2>, <cString2>) --> nPosition
 
  Параметры
 
    <cSearchFor1> - символьный параметр, задающий подстроку, поиск
    вхождения которой осуществляется в строке <cString1>.


 
    <cString1> - символьный параметр, задающий строку, в которой
    осуществляется поиск <cSearchFor1>.
 
    <cSearchFor2> - символьный параметр, задающий подстроку, поиск
    вхождения которой осуществляется в строке <cString2>.
 
    <cString2> - символьный параметр, задающий строку, в которой
    осуществляется поиск <cSearchFor2>.
 
  Возвращаемое значение
 
    nPosition - номер первых одинаковых позиций вхождения <cSearchFor1>
    в <cString1> и <cSearchFor2> в <cString2>.
 
  Описание
 
    Функция позволяет построить отношение связи или, другими словами,
    определить корреляцию между двумя строками символов.
 
    Она определяет совпадение позиций вхождения подстроки <cSearchFor1> в
    строке <cString1> и подстроки <cSearchFor2> в строке <cString2>.
 
  Примечания
 
  . Функция возвращает 0, если нет одинаковых позиций.
 
  Примеры
 
  . Поиск позиции, в которой вхождение "b" в первую строку совпадает с
    вхождением "1" во вторую строку:
 
    ? CHARRELA("b", "b b b b", "1", "bbb11111")         // 5
 

See Also: CHARRELREP()

 

 

 CHARRELREP()
 Заменяет символы в одинаковых позициях вхождения в парах подстрок и строк.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CHARRELREP(<cSearchFor1>, <cString1>,
        <cSearchFor2>, [@]<cString2>,
        <cReplaceExpression>) --> cString
 
  Параметры
 
    <cSearchFor1> - символьный параметр, задающий список символов, поиск
    которых осуществляется в строке <cString1>.
 
    <cString1> - символьный параметр, задающий строку, в которой
    осуществляется поиск символов из списка <cSearchFor1>.
 


    <cSearchFor2> - символьный параметр, задающий список символов, поиск
    которых осуществляется в строке <cString2>.
 
    [@]<cString2> - символьный параметр, допускающий передачу по ссылке
    и задающий строку, в которой осуществляется поиск символов из списка
    <cSearchFor2>.
 
    <cReplaceExpression> - символьный параметр, задающий список символов,
    используемых для замены в <cString2>.
 
  Возвращаемое значение
 
    cString - модифицированная строка <cString2>.
 
  Описание
 
    Функция ищет одинаковые позиции вхождений символов из списков в
    соответствующие строки и производит замену в найденных позициях
    строки <cString2>.
 
    Одиночные замены
 
    В случае, когда оба искомых и заменяющий списки содержат лишь по
    одному символу, определяются все одинаковые позиции вхождений символа
    из списка <cSearchFor1> в строку <cString1> и из списка <cSearchFor2>
    в строку <cString2>. После этого символы в найденных позициях строки
    <cString2> заменяются символом из <cReplaceExpression>.
 
    Это можно, например, использовать при обработке символьных строк,
    содержащих образы экрана. Например, если строка cPict1 содержит символ
    "|" в позиции 34, а в строке cPict2 в той же позиции находится символ
    "-", то этот символ в cPict2 может быть заменен на "+",
    воспроизводящий их комбинацию.
 
    Множественные замены
 
    Искомые и заменяющий списки могут содержать несколько символов.
    Вышеописанная процедура в этом случае применяется итеративно сначала
    для первых символов трех подстрок (<cSearchFor1>, <cSearchFor2> и
    <cReplaceExpression>), затем для вторых и т.д. Число итераций
    определяется длиной <cSearchFor1>. Если <cSearchFor2> или
    <cReplaceExpression> короче <cSearchFor1>, то повторно используется их


    последний байт.
 
  Примечания
 
  . Длина <cString2> определяет количество процедур поиска вхождений,
    а длина <cSearchFor1> определяет количество возможных изменений.
 
  . Параметр <cString2> может быть передан по ссылке. При этом вызов
    CSETREF(.T.), подавляющий возвращение функцией результата, позволяет
    уменьшить потребности в рабочей памяти.
 
  . Применение описываемой функции для множественных изменений можно
    найти в примерах программ, входящих в комплект поставки CT II.
 
  Примеры
 
  . Замена на "x" вхождений "1" во вторую строку, совпадающих с
    вхождениями "b" в первую строку:
 
    ? CHARRELREP("b", "b b b b", "1", "bbb11111", "x")  // "bbb1x1x1"
 

See Also: CHARRELA()
CSETREF()

 

 

 CHARREM()
 Удаляет из строки указанные символы.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CHARREM(<cDelCharString>, <cString>) --> cRemString
 
  Параметры
 
    <cDelCharString> - символьный параметр, задающий строку, содержащую
    список удаляемых символов.
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
  Возвращаемое значение
 
    cRemString - строка, из которой удалены символы.
 
  Описание
 
    Функция удаляет перечисленные в первом параметре символы из любых
    позиций в строке <cString>. После обработки строка не содержит этих
    символов.
 
  Примечания
 
  . При задании недопустимых или некорректных параметров не
    производятся никакие изменения.
 
  Примеры
 
  . Удаление пробелов из строки:
 
    ? CHARREM(" ", " 1  2   ")          // "12"
 
  . Удаление цифры "3" и буквы "y":
 


    ? CHARREM("3y", "xyz123")           // "xz12"
 

See Also: CHARONLY()
CHARONE()

 

 

 CHARREPL()
 Заменяет в строке заданные символы.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CHARREPL(<cSearchFor>, [@]<cString>,
        <cReplaceExpression>, [<lMode>]) --> cReplString
 
  Параметры
 
    <cSearchFor> - символьный параметр, задающий список подлежащих
    замене символов.
 
    [@]<cString> - символьный параметр, допускающий передачу по ссылке
    и задающий обрабатываемую символьную строку.
 
    <cReplaceExpression> - символьный параметр, задающий список
    заменяющих символов.
 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. режим однократного просмотра, при котором замененные символы далее
    не рассматриваются. При его значении .F. или по умолчанию
    осуществляется многократный просмотр.
 
  Возвращаемое значение
 
    cReplString - модифицированная строка <cString>.
 
  Описание
 
    Функция облегчает замещение символов. В строке <cString>
    осуществляется поиск каждого указанного в списке <cSearchFor> символа.
 
    При нахождении он заменяется соответствующим символом из списка
    <cReplaceExpression>.
 
    Если параметр <lMode> опущен или имеет значение .F., то поиск в строке
    <cString> производится по очереди для каждого символа из <cSearchFor>,
    при этом все вхождения данного символа в строку <cString> заменяются
    соответствующим символом из <cReplaceExpression>. Ранее замененные
    символы могут заменяться снова, если заменяющий символ встречается в
    списке заменяемых символов.
 
    Если параметр <lMode> имеет значение .T., то стратегия поиска иная.
    Цикл проверки на присутствие в списке <cSearchFor> организуется по


    символам строки <cString>. При наличии производится замена и цикл
    повторяется, но уже для следующего символа. Таким образом, ранее
    замененные символы дальнейшим преобразованиям не подвергаются.
 
    Следует внимательно относиться к выбору режима <lMode>, если одни и
    те же символы встречаются и в <cSearchFor>, и в <cReplaceExpression>
    (см. Примеры).
 
  Примечания
 
  . Если список <cReplaceExpression> короче, чем <cSearchFor>, то
    вместо недостающих символов используется последний символ из
    <cReplaceExpression> (см. Примеры).
 
  . Параметр <cString> может быть передан по ссылке. При этом вызов
    CSETREF(.T.), подавляющий возвращение функцией результата, позволяет
    уменьшить потребности в рабочей памяти.
 
  Примеры
 
  . Замена "1" на "a", "2" - на "b" и т.д. Если в строке символов
    будет содержаться символ "4", он заменится на "d":
 
    ? CHARREPL("1234", "1x2y3z", "abcd")                // "axbycz"
 
  . Замена букв от "а" до "j" символами от "0" до "9". Например, "f"
    меняется на "6":
 
    ? CHARREPL("abcdefghij", "jhfdb", "1234567890")     // "08642"
 
  . Заменяющих символов меньше, чем заменяемых. Поэтому буквы от "f"
    до "j" заменяются последним символом из списка "12345":
 
    ? CHARREPL("abcdefghij", "jhfdb", "12345")          // "55542"
 
  . Влияние режима многократного просмотра:
 
    ? CHARREPL("1234", "1234", "234A")                  // "AAAA"
    ? CHARREPL("1234", "1234", "234A", .T.)             // "234A"
 



See Also: CSETREF()
POSREPL()
RANGEREPL()
WORDREPL()
WORDTOCHAR()

 

 

 CHARSORT()
 Сортирует подстроки внутри строки.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CHARSORT([@]<cString>, [<nElementLength>],
        [<nComparisonLength>], [<nIgnore>],
        [<nElementPosition>], [<nSortLength>],
        [<lDescending>] --> cSortString
 
    Внимание! В отличие от Clipper Tools One в данной версии к функции
    добавлен необязательный параметр.
 
  Параметры
 
    [@]<cString> - символьный параметр, допускающий передачу по ссылке и
    задающий обрабатываемую символьную строку.
 
    <nElementLength> - необязательный числовой параметр, задающий длину
    сортируемых подстрок. По умолчанию 1.
 
    <nComparisonLength> - необязательный числовой параметр, задающий
    длину сравниваемых подстрок при сортировке. По умолчанию длина,
    заданная параметром <nElementLength>.
 
    <nIgnore> - необязательный числовой параметр, задающий количество
    пропускаемых от начала строки <cString> символов. По умолчанию 0
    (сортировка с первого символа).
 
    <nElementPosition> - необязательный числовой параметр, задающий
    смещение начала сравнения внутри сортируемых подстрок. По умолчанию 0
    (сравнение с первого символа).
 
    <nSortLength> - необязательный числовой параметр, задающий длину
    сортируемой области относительно смещения, задаваемого <nIgnore>.
 
    <lDescending> - необязательный логический параметр, задающий при
    значении .T. режим сортировки в порядке убывания, а при значении .F.
    или по умолчанию режим сортировки в порядке возрастания.
 
  Возвращаемое значение
 
    cSortString - модифицированная символьная строка, или пустая строка
    при недопустимых значениях параметров.


 
  Описание
 
    Функция позволяет различным образом отсортировать символы,
    содержащиеся в строке. Принимаются во внимание многие параметры,
    в том числе содержание и длина сортируемых последовательностей.
 
  Примечания
 
  . Функция использует алгоритм быстрой сортировки.
 
  . Параметр <cString> может быть передан по ссылке. При этом вызов
    CSETREF(.T.), подавляющий возвращение функцией результата, позволяет
    уменьшить потребности в рабочей памяти.
 
  . Поскольку последние параметры различаются по типу данных, то при
    вызове функции допустимо опускать необязательные параметры вместе с
    разделяющими их запятыми (что отмечено в подразделе Синтаксис
    помещением предшествующей разделяющей запятой внутри квадратных
    скобок).
 
  Примеры
 
  . Обычная сортировка в соответствии с ASCII-кодом символов:
 
    ? CHARSORT("qwert")                         // "eqrtw"
 
  . Сортировка двухбайтовых подстрок:
 
    ? CHARSORT("qwert", 2)                      // "erqwt"
 
  . Сортировка двухбайтовых подстрок при сравнении только по первому
    символу:
 
    ? CHARSORT("bla4a3a2a1", 2, 1)              // "a2a1a3a4b1"
 
  . Посимвольная сортировка с исключением трех первых символов:
 
    ? CHARSORT("XXXqwert", 1, 1, 3)             // "XXXeqrtw"
 
  . Сортировка двухбайтовых подстрок со сравнением только по второму
    символу:
 
    ? CHARSORT("bla4a3a2a1", 2, 1, 0, 1)        // "a1b1a2a3a4"
 
  . Сортировка только четырех первых символов:
 
    ? CHARSORT("384172852", 1, 1, 0, 0, 4)      // "134872852"
 
  . Сортировка в порядке убывания (необязательные параметры с
    разделяющими запятыми опущены):
 
    ? CHARSORT("qwert", .T.)                    // "wtrqe"


 

See Also: CSETREF()

 

 

 CHARSPREAD()
 Возвращает строку с расширенными промежутками между элементами.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CHARSPREAD(<cString>, <nLength>,
        [<cChar|nChar>]) --> cSpreadString
 
  Параметры
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
    <nLength> - числовой параметр, задающий длину возвращаемой строки.
 
    <cChar|nChar> - необязательный параметр, задающий символ-заполнитель
    и одновременно разделитель элементов. Может быть указан символьным или
    числовым (в диапазоне от 0 до 255) значением. По умолчанию
    используется пробел (CHR(32)).
 
  Возвращаемое значение
 
    cSpreadString - строка заданной длины.
 
  Описание
 
    В отличие от EXPAND() функция раздвигает строку, заполняя символом,
    заданным параметром <cChar|nChar>, промежутки между элементами (напр.,
    словами), а не между символами. Аналогичным образом производится
    выравнивание строк по длине большинством текстовых редакторов.
 
  Примечания
 
  . При расширении ранее присутствовавшие символы-заполнители
    рассматриваются как части элементов (см. Примеры). Для устранения
    этих символов строку можно предварительно обработать функцией
    CHARONE().
 
  Примеры
 
  . Если строка не содержит разделителей, то она не расширяется:
 
    ? CHARSPREAD("123456", 20, ".")             // "123456"
 
  . Задание символа-заполнителя в виде числового кода:
 
    ? CHARSPREAD("1.2.3.4.5.6", 20, 46)         // "1...2...3...4...5...6"
 
  . Расширение строки, в которой уже присутствует символ-заполнитель:
 
    ? CHARSPREAD("11..22..33", 20, ".")         // "11.......22.......33"
    ? CHARSPREAD("11.22.........33", 20, ".")   // "11....22..........33"


 

See Also: EXPAND()
CHARONE()

 

 

 CHARSWAP()
 Попарно переставляет символы в строке.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CHARSWAP([@]<cString>) --> cSwapString
 
  Параметры
 
    [@]<cString> - символьный параметр, допускающий передачу по ссылке и
    задающий обрабатываемую символьную строку.
 
  Возвращаемое значение
 
    cSwapString - модифицированная строка <cString>.
 
  Описание
 
    Функция меняет местами все смежные символы в строке <cString>.
    В результате байты, находившиеся на четных позициях, перемещаются на
    нечетные и наоборот.
 
    Функция удобна при сортировке целых чисел в форме символьных строк,
    генерируемых Clipper-функцией I2BIN(). Для достижения правильных
    результатов перед вызовом функции CHARSORT() следует с помощью
    описываемой функции поменять местами младший и старший байты
    16-разрядного целого числа.
 
  Примечания
 
  . Параметр <cString> может быть передан по ссылке. При этом вызов
    CSETREF(.T.), подавляющий возвращение функцией результата, позволяет
    уменьшить потребности в рабочей памяти.
 
  Примеры
 
  . Вывод переставленных символов:
 
    ? CHARSWAP("0123456789")                    // "1032547698"
 
  . Работа с I2BIN:
 
    ? I2BIN(256)                                // 00000000 00000001
    ? I2BIN(1)                                  // 00000001 00000000
    ? I2BIN(256) > I2BIN(1)                     // .F.
    ? CHARSWAP(I2BIN(256)) > CHARSWAP(I2BIN(1)) // .T.
 

See Also: CHARSORT()
CSETREF()
WORDSWAP()

 

 

 CHARUNPACK()
 Распаковывает упакованную строку.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CHARUNPACK(<idPackCharString>) --> cString


 
  Параметры
 
    <idPackCharString> - символьная строка, предварительно упакованная
    функцией CHARPACK().
 
  Возвращаемое значение
 
    cString - символьная строка.
 
  Описание
 
    Функция распаковывает строки, упакованные функцией CHARPACK(). Метод
    распаковки выбирается автоматически по методу упаковки. Поскольку
    предполагается, что строка была предварительно упакована CHARPACK(),
    то возвращаемая строка не будет длиннее максимально допустимой в
    Clipper.
 
  Примеры
 
  . Восстановление строки:
 
    ? CHARUNPACK(CHARPACK("AAAAAAAAA")) // "AAAAAAAAA"
 

See Also: CHARPACK()

 

 

 CHARXOR()
 Суммирует "по модулю два" ASCII-коды всех символов двух строк.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CHARXOR([@]<cString1>, <cString2>) --> cString
 
  Параметры
 
    [@]<cString1> - символьный параметр, задающий строку, значения
    ASCII-кодов символов которой складываются "по модулю два" с
    ASCII-кодами символов строки <cString2>.
 
    <cString2> - символьный параметр, задающий строку, значения кодов
    символов которой используются для модификации <cString1>.
 
  Возвращаемое значение
 
    cString - модифицированная строка <cString1>.
 
  Описание
 
    Функция осуществляет операцию сложения "по модулю два" (исключающее
    "ИЛИ", XOR) над каждым из символов строки <cString1> и соответствующим
    ему по позиции символом строки <cString2>.
 
    Функцию можно использовать для кодирования паролей и текста.
    Достоинство этой функции в том, что она может применяться как для
    кодирования, так и для декодирования.
 
  Примечания
 
  . Если обе символьные строки имеют одинаковую длину, то первый


    байт <cString1> связывается с первым байтом <cString2>, второй байт
    <cString1> - со вторым байтом <cString2> и т.д.
 
  . Если <cString2> короче, чем <cString1>, то по достижении конца
    <cString2>, связывание будет продолжаться, начинаясь опять с ее
    первого байта. Если <cString1> короче, чем <cString2>, то работа
    функции прекращается по достижении конца <cString1>.
 
  . Параметр <cString1> может быть передан по ссылке. При этом вызов
    CSETREF(.T.), подавляющий возвращение функцией результата, позволяет
    уменьшить потребности в рабочей памяти.
 
  Примеры
 
  . Для надежности кодирования пароль не должен быть короче исходной
    строки:
 
    ? CHARXOR("Secret", "Password")
 
  . При двойном вызове восстанавливается первоначальное значение:
 
    ? CHARXOR(CHARXOR("Secret", "Password"), "Password")
 
  . Двойное кодирование:
 
    ? CHARXOR(CHARXOR("Secret", "Password"), "A12B44")
 

See Also: CHARAND()
CHARNOT()
CHAROR()
CRYPT()
CSETREF()

 

 

 CHECKSUM()
 Возвращает контрольную сумму задаваемой строки.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CHECKSUM(<cString>) --> nCheckSum
 
  Параметры
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
  Возвращаемое значение
 
    nCheckSum - числовое значение контрольной суммы для <cString>.
 
  Описание
 
    Функция вычисляет контрольную сумму для символьной строки. Эта
    контрольная сумма позволяет, например, определить, была ли строка
    изменена, неправильно передана или набрана. Функция учитывает позиции
    символов, благодаря чему кратность определяемой с ее помощью ошибки
    выше, чем при использовании функции ASCIISUM().


 
  Примечания
 
  . Возвращаемая величина является 32-битовым целым числом.
 
  . Контрольное суммирование не может применяться для кодирования
    данных, т.к. вычисленная сумма для двух различных символьных строк
    может быть одной и той же. Например, контрольная сумма для "PASTETEN"
    и "PERSONAL" одинакова.
 
  . Для символьных строк различной длины одинаковый результат
    невозможен.
 
  Примеры
 
  . ASCIISUM() для таких строк дает одинаковый результат:
 
    ? CHECKSUM("abc")                   // Результат: 247334
    ? CHECKSUM("cba")                   // Результат: 246822
 
  . Для некоторых различных строк одинаковой длины результаты
    совпадают:
 
    ? CHECKSUM("PASTETEN")              // Результат: 530020
    ? CHECKSUM("PERSONAL")              // Результат: 530020
 
  . Пустая строка дает результат 0:
 
    ? CHECKSUM("")                      // Результат: 0
 

See Also: ASCIISUM()

 

 

 COUNTLEFT()
 Возвращает количество одинаковых символов в начале строки.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COUNTLEFT(<cString>, [<cChar|nChar>]) --> nNumber
 
  Параметры
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
    <cChar|nChar> - необязательный параметр, задающий в символьной форме
    или в виде числового значения ASCII-кода (в диапазоне от 0 до 255) код
    подсчитываемых символов. По умолчанию подсчитывается количество
    пробелов.
 
  Возвращаемое значение
 
    nNumber - количество заданных символов, составляющих непрерывную
    подстроку в начале строки <cString>.
 
  Описание
 
    Функция, в отличие от REMLEFT(), удаляющей начальные символы, только
    определяет их количество в виде непрерывной подстроки в начале


    <cString>.
 
  Примеры
 
  . Подсчет начальных пробелов:
 
    ? COUNTLEFT("   123")               // Результат: 3
 
  . Подсчет символов "."
 
    ? COUNTLEFT("..4.123", ".")         // Результат: 2
 
  . Нет начальных пробелов:
 
    ? COUNTLEFT("123456")               // Результат: 0
 

See Also: COUNTRIGHT()

 

 

 COUNTRIGHT()
 Возвращает количество одинаковых символов в конце строки.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COUNTRIGHT(<cString>, [<cChar|nChar>]) --> nNumber
 
  Параметры
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
    <cChar|nChar> - необязательный параметр, задающий в символьной форме
    или в виде числового значения ASCII-кода (в диапазоне от 0 до 255) код
    подсчитываемых символов. По умолчанию подсчитывается количество
    пробелов.
 
  Возвращаемое значение
 
    nNumber - количество заданных символов, составляющих непрерывную
    подстроку в конце строки <cString>.
 
  Описание
 
    Функция, в отличие от REMRIGHT(), удаляющей конечные символы, только
    определяет их количество в виде непрерывной подстроки в конце
    <cString>.
 
  Примеры
 
  . Подсчет пробелов:
 
    ? COUNTRIGHT("abc   ")              // Результат: 3
 
  . Подсчет символов ".":
 
    ? COUNTRIGHT("abc.d..", ".")        // Результат: 2
 
  . Нет конечных пробелов:
 
    ? COUNTRIGHT("123456")              // Результат: 0
 

See Also: COUNTLEFT()

 

 

 CRYPT()
 Возвращает закодированную или декодированную строку.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CRYPT([@]<cString>, <cKeyString>) --> cString


 
  Параметры
 
    [@]<cString> - символьный параметр, допускающий передачу по ссылке и
    задающий кодируемую строку.
 
    <cKeyString> - символьный параметр, задающий строку, содержащую пароль
    для кодирования.
 
  Возвращаемое значение
 
    cString - модифицированная строка <cString>.
 
  Описание
 
    Функция использует более сложное кодирование, чем CHARXOR(), применяя
    генератор случайных чисел, основанный на порождающем алгоритме с
    задаваемым начальным значением (для возможности повторения). Это
    позволяет поддерживать защиту до тех пор, пока не расшифрован пароль.
    Конечно, на такую защиту тратится дополнительное машинное время.
 
    Декодирование строки должно осуществляться с тем же самым паролем,
    что и кодирование. При многократном кодировании декодирование должно
    осуществляться с использованием паролей в обратном порядке.
 
  Примечания
 
  . Пароль должен быть как можно длиннее, минимально - шесть символов,
    но желательно больше.
 
  . Параметр <cString> может быть передан по ссылке. При этом вызов
    CSETREF(.T.), подавляющий возвращение функцией результата, позволяет
    уменьшить потребности в рабочей памяти.
 
  Примеры
 
  . Простое кодирование:
 
    cVar := CRYPT("CLIPPER", "PASSWORD")
 
  . И декодирование:
 
    ? CRYPT(cVar, "PASSWORD")           // "CLIPPER"
 

See Also: CHARXOR()
CSETREF()

 

 

 CSETATMUPA()
 Переключает режим работы функций семейства ATxxxx().
------------------------------------------------------------------------------
 
  Синтаксис
 
    CSETATMUPA([<lNewMode>]) --> lOldMode
 
  Параметры
 
    <lNewMode> - необязательный логический параметр, задающий при значении
    .T. включение, а при значении .F. выключение режима прохода по
    символам для всех функций семейства ATxxxx().


По умолчанию состояние
    режима прохода по символам не изменяется.
 
  Возвращаемое значение
 
    lOldMode - логическое значение .T. при предыдущем включенном режиме
    прохода по символам, а иначе .F..
 
  Описание
 
    Функция изменяет состояние внутреннего CT II-переключателя режима
    прохода по символам, влияющего на работу перечисленных ниже функций
    обработки подстрок:
 
        ATNUM()         AFTERATNUM()    ATREPL()        ATADJUST()
        BEFORATNUM()    NUMAT()         WORDTOCHAR()    WORDREPL()
 
  Примечания
 
  . В исходном состоянии (до первого вызова функции) режим прохода
  по символам выключен, что эквивалентно вызову CSETATMUPA(.F.).
 
  Примеры
 
  . Включение режима прохода по символам и сохранение предыдущего
    состояния:
 
    lOldMupa := CSETATMUPA(.T.)
 

See Also: ATNUM()
AFTERATNUM()
BEFORATNUM()
ATREPL()
WORDTOCHAR()

 

 

 CSETREF()
 Переключает режим возврата значения при передаче параметров по ссылке.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CSETREF([<lNewSwitch>]) --> lOldSwitch
 
  Параметры
 
    <lNewSwitch> - необязательный логический параметр, задающий при
    значении .T. включение, а при значении .F. выключение режима
    блокировки возврата значения рядом CT II-функций. По умолчанию
    состояние режима не изменяется, а в исходном состоянии (до первого
    вызова функции) режим блокировки возвращаемого значения выключен.
 
  Возвращаемое значение
 
    lOldSwitch - логическое значение .T. при предыдущем включенном, или
    .F. при выключенном режиме возврата значения CT II-функциями.
 
  Описание
 
    Функция переключает режим блокировки возврата значения
    CT II-функциями, параметры которым можно передавать по ссылке.
 
    Хотя после выполнения таких функций, переданный по ссылке параметр уже


    содержит результат работы, тем не менее при выключенной блокировке,
    возвращается еще и результирующее значение. Возвращаемая строка и ее
    копия некоторое время занимают рабочую память одновременно, и наиболее
    неблагоприятным случаем является запрос двух смежных блоков с
    размерами близкими к 64 Кбайтам.
 
    Обойти подобную ситуацию можно вызовом CSETREF(.T.). При этом функции,
    принимающие параметры по ссылке, не будут использовать память для
    возвращаемого значения, т.е будут вести себя как процедуры, что в
    случае длинных строк позволит сэкономить до 64 Кбайтов памяти.
 
    Функции, управляемые CSETREF():
 
    ADDASCII()          BLANK()                 CHARADD()
    CHARAND()           CHARMIRR()              CHARNOT()
    CHAROR()            CHARRELREP()            CHARREPL()
    CHARSORT()          CHARSWAP()              CHARXOR()
    CRYPT()             JUSTLEFT()              JUSTRIGHT()
    POSCHAR()           POSREPL()               RANGEREPL()
    REPLALL()           REPLLEFT()              REPLRIGHT()
    TOKENLOWER()        TOKENUPPER()            WORDREPL()
    WORDSWAP()
 
  Примечания
 
  . При включении блокировки возврата значения с помощью CSETREF(.T.)
    перечисленные выше функции возвращают значение NIL.
 
  Примеры
 
  . Выключение блокировки возврата значений:
 
    CSETREF(.F.)
 
    cStr1 := "HAGBDCFE"
    cStr2 := CHARSORT(@cStr1)
    ? cStr1, cStr2              // "ABCDEFGH" (cStr1 и cStr2 одинаковы)
 
  . Включение блокировки возврата значений:
 
    CSETREF(.T.)
 
    cStr1 := "HAGBDCFE"
    cStr2 := CHARSORT(@cStr1)
    ? cStr1                     // "ABCDEFGH". Отсортированная cStr1
    ? cStr2                     // NIL
 
  . Иллюстрация запроса большого количества памяти:
 
    cStr1 := SPACE(32000)       // Создается большая строка
 
    CSETREF(.F.)


    CHARSORT(@cStr1)            // Дополнительные 32000 байтов
 
    CSETREF(.T.)
    CHARSORT(@cStr1)            // Дополнительная память не требуется
 

 

 EXPAND()
  Расширяет строку за счет промежутков между символами.
------------------------------------------------------------------------------
 
  Синтаксис
 
    EXPAND(<cString>, [<nNumber>],
        [<cChar|nChar>]) --> cExpandString
 
  Параметры
 
<cString> - символьный параметр, задающий обрабатываемую строку.
 
<nNumber> - необязательный числовой параметр, задающий количество вставляемых между смежными символами заполнителей <cChar|nChar>. По умолчанию 1.
 
<cChar|nChar> - необязательный параметр, задающий в символьной форме или в виде числового значения ASCII-кода (в диапазоне от 0 до 255) символ-заполнитель. По умолчанию используется пробел.
 
  Возвращаемое значение
 
    cExpandString - измененная символьная строка.
 
  Описание
 
    Функция может применяться, например, для выравнивания выводимого
    текста по длине. При этом в памяти текст хранится в нормальном виде.
    Это экономит память, отводимую под текст или базу данных.
 
  Примечания
 
  . Разрядка выполняется только в случае, если <cString> содержит
    не менее двух символов.
 
  . Для дополнения символьных строк слева и справа можно использовать
    функции PADLEFT() и PADRIGHT().
 
  Примеры
 
  . Разрядка одним пробелом:
 
    ? EXPAND("123456")                          // "1 2 3 4 5 6"
 
  . Разрядка двумя пробелами:
 
    ? EXPAND("123456", 2)                       // "1  2  3  4  5  6"
 
  . Разрядка символом ".":
 
    ? EXPAND("123456", ".")                     // "1.2.3.4.5.6"
 
  . Разрядка двумя символами ".":
 


    ? EXPAND("123456", 2, ".")                  // "1..2..3..4..5..6"
 

See Also: CHARSPREAD() PADLEFT() PADRIGHT()
 

 

 JUSTLEFT()
  Переносит символы из начала строки в конец.
------------------------------------------------------------------------------
 
  Синтаксис
 
    JUSTLEFT([@]<cString>,
        [<cChar|nChar>]) --> cModString
 
  Параметры
 
    [@]<cString> - символьный параметр, допускающий передачу по ссылке и
    задающий обрабатываемую символьную строку.
 
    <cChar|nChar> - необязательный параметр, задающий в символьной форме
    или в виде числового значения ASCII-кода (в диапазоне от 0 до 255)
    символ, переносимый из начала в конец строки. По умолчанию
    используется пробел.
 
  Возвращаемое значение
 
    cModString - модифицированная строка <cString>.
 
  Описание
 
    Функция переносит символы, заданные <cChar|nChar>, из начала строки
    в конец. Таким образом, текст в символьной строке выравнивается по
    левой границе, а длина строки не изменяется.
 
  Примечания
 
  . Параметр <cString> может быть передан по ссылке. При этом вызов
    CSETREF(.T.), подавляющий возвращение функцией результата, позволяет
    уменьшить потребности в рабочей памяти.
 
  Примеры
 
  . Перенос пробелов:
 
    ? JUSTLEFT("    123")                       // "123    "
 
  . Перенос символа ".":
 
    ? JUSTLEFT("..123", ".")                    // "123.."
 

See Also: CSETREF() JUSTRIGHT()
 

 

 JUSTRIGHT()
 Переносит символы из конца строки в начало.
------------------------------------------------------------------------------
 
  Синтаксис
 
    JUSTRIGHT([@]<cString>,
        [<cChar|nChar>]) --> cModString
 
  Параметры
 


    [@]<cString> - символьный параметр, допускающий передачу по ссылке и
    задающий обрабатываемую символьную строку.
 
    <cChar|nChar> - необязательный параметр, задающий в символьной форме
    или в виде числового значения ASCII-кода (в диапазоне от 0 до 255)
    символ, переносимый из конца строки в начало. По умолчанию
    используется пробел.
 
  Возвращаемое значение
 
    cModString - модифицированная строка <cString>.
 
  Описание
 
    Функция переносит символы, заданные <cChar|nChar>, из конца строки
    в начало. Таким образом, текст в символьной строке выравнивается по
    правой границе, а длина строки не изменяется.
 
  Примечания
 
  . Параметр <cString> может быть передан по ссылке. При этом вызов
    CSETREF(.T.), подавляющий возвращение функцией результата, позволяет
    уменьшить потребности в рабочей памяти.
 
  Примеры
 
  . Перенос пробелов:
 
    ? JUSTRIGHT("123    ")                      // "    123"
 
  . Перенос символа ".":
 
    ? JUSTRIGHT("123..", ".")                   // "..123"
 

See Also: CSETREF() JUSTLEFT()
 

 

 LIKE()
 Сравнивает строки с учетом универсальных символов сопоставления.
------------------------------------------------------------------------------
 
  Синтаксис
 
    LIKE(<cString1>, <cString2>) --> lEqual
 
  Параметры
 
    <cString1> - символьный параметр, задающий строку, содержащую наряду
    с обычными и универсальные символы сопоставления. Все универсальные
    символы должны быть только в этой символьной строке.
 
    <cString2> - символьный параметр, задающий строку для сравнения с
    <cString1>.
 
  Возвращаемое значение
 
    lEqual - логическое значение .T., если символьные строки с учетом
    универсальных символов сопоставления совпадают, а иначе .F..


 
  Описание
 
    Функция позволяет сравнить две символьные строки в том случае,
    когда первая из них содержит универсальные символы сопоставления
    ("*" и "?").
 
    Это подобно, но не идентично тому, как универсальные символы
    применяются в DOS-командах. С символом "?" в первой строке
    сопоставляется любой символ на соответствующем знакоместе второй
    строки (см. Примеры). Символ "*" может располагаться в любом месте
    <cString1> и использоваться многократно. С ним сопоставляется любая
    группа символов из <cString2>.
 
  Примечания
 
  . Функция SETATLIKE() позволяет заменить универсальный символ
    сопоставления "?", используемый некоторыми CT II-функциями, на любой
    другой.
 
  Примеры
 
  . Отличия от DOS:
 
    Dir XYZ?.DBF                        // Вывод XYZ.DBF и XYZ1.DBF
 
    ? LIKE("XYZ?", "XYZ")               // .F.
    ? LIKE("XYZ?", "XYZ1")              // .T.
 
  . Другие комбинации:
 
    ? LIKE("*OG.*", "PROG.PRG")         // .T.
    ? LIKE("*OG.*", "LOG.PRG")          // .T.
    ? LIKE("*R*T", "PROTO")             // .T.
    ? LIKE("*R*T*?", "PROTO")           // .F.
    ? LIKE("*R*T*?", "PROTO2")          // .T.
 
  .
Универсальные символы сопоставления интерпретируются только в
    первом параметре:
 
    ? LIKE("*PER", "CLIPPER")           // .T.
    ? LIKE("CLIPPER", "*IPPER")         // .F.
 

See Also: SETATLIKE()

 

 

 LTOC()
 Преобразует логическое значение в символьное.
------------------------------------------------------------------------------
 
  Синтаксис
 
    LTOC([<lValue>]) --> cChar
 
  Параметры
 
    <lValue> - необязательный логический параметр, задающий преобразуемое


    значение. По умолчанию .F..
 
  Возвращаемое значение
 
    cChar - символ, соответствующий преобразуемому логическому параметру.
 
  Описание
 
    Функция, в отличие от LTON() (преобразующей логическое значение в
    числовое) возвращает значение символьного типа, что удобно в
    применении к комбинированным индексным ключам.
 
  Примеры
 
  . При опущенном параметре предполагается .F.:
 
    ? LTOC()                    // "F"
 
  . Возвращается буква, соответствующая значению параметра:
 
    ? LTOC(.F.)                 // "F"
    ? LTOC(.T.)                 // "T"
 
  . Преобразование значения, возвращаемого другими функциями:
 
    ? LTOC(DELETED())           // "T" или "F"
 

See Also: LTON()

 

 

 MAXLINE()
 Возвращает размер самой длинной строки в тексте.
------------------------------------------------------------------------------
 
  Синтаксис
 
    MAXLINE(<cString>) --> nLength
 
  Параметры
 
    <cString> - символьный параметр, задающий строку содержащую
    обрабатываемый текст.
 
  Возвращаемое значение
 
    nLength - числовое значение размера строки, необходимое для
    отображения текста <cString> без дополнительных переносов.
 
  Описание
 
    Функция сканирует текст, состоящий из строк, разделенных символами
    возврата каретки (CR) и перевода строки (LF), и возвращает размер
    самой длинной строки. Это позволяет определить необходимую ширину для
    окна вывода текста (memo-полей). При этом текст может быть выведен без
    дополнительных переносов строк.
 
  Примечания
 
  . За исключением возврата каретки и перевода строки, эта функция
    трактует все символы как печатаемые в одно знакоместо. Если текст
    <cString> содержит символы табуляции, то они должны быть
    предварительно расширены с помощью функции TABEXPAND().


 
  Примеры
 
  . Вызов MEMOEDIT() с параметрами, соответствующими максимальной
    длине строки:
 
    FUNCTION SHOWMEMO(cMemo)
    LOCAL cMessage, nHeight, nWidth
 
        nHeight := MIN(NUMLINE(cMemo), MAXROW() - 1)
        nWidth  := MIN(MAXLINE(cMemo), MAXCOL() - 1)
 
    IF nWidth = 0
        cMessage := "memo-поле пусто"
    ELSE
        cMessage := ""
        @ 0, 0 TO nHeight + 1, nWidth + 1 DOUBLE
        MEMOEDIT(cMemo, 1, 1, nHeight, nWidth, .F.)
    ENDIF
    RETURN (cMessage)
 

See Also: NUMLINE()
TABEXPAND()

 

 

 NUMAT()
 Возвращает количество вхождений подстроки в строку.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NUMAT(<cSearchFor>, <cString>, [<nIgnore>]) --> nNumber
 
  Параметры
 
<cSearchFor> - символьный параметр, задающий искомую подстроку.
 
<cString> - символьный параметр, задающий обрабатываемую строку.
 
<nIgnore> - необязательный числовой параметр, задающий количество
символов, пропускаемых с начала строки. По умолчанию пропускается 0 символов.
 
  Возвращаемое значение
 
    nNumber - числовое значение количества вхождений.
 
  Описание
 
Функция определяет количество вхождений <cSearchFor> в строку
<cString>.
 
При поиске вхождений функция просматривает исходную строку с начала,
пропустив заданное параметром <nIgnore> количество символов.
 
Если с помощью CSETATMUPA() отключен режим прохода по символам, то
поиск будет продолжаться с позиции следующего за последним символа найденной подстроки, а иначе с позиции второго символа найденного вхождения подстроки.
 
  Примечания
 
  . Применение SETATLIKE() позволяет организовать поиск по образцу.
 
  Примеры
 
  . Подсчет с первой позиции:
 
    ? NUMAT("ab", "abcdeabc")           // Результат: 2


 
  . Подсчет со второй позиции:
 
    ? NUMAT("ab", "abcdeabc", 1)        //Результат: 1
 
  . Влияние CSETATMUPA():
 
    CSETATMUPA(.F.)                     // Выключение режима прохода по
                                        // символам
    ? NUMAT("aa", "aaaab")              // Результат: 2
 
    CSETATMUPA(.T.)                     // Включение режима прохода по
                                        // символам
    ? NUMAT("aa", "aaaab")              // Результат: 3
 

See Also: CSETATMUPA()
SETATLIKE()

 

 

 NUMAT()
 Возвращает количество вхождений подстроки в строку.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NUMAT(<cSearchFor>, <cString>, [<nIgnore>]) --> nNumber
 
  Параметры
 
<cSearchFor> - символьный параметр, задающий искомую подстроку.
 
<cString> - символьный параметр, задающий обрабатываемую строку.
 
<nIgnore> - необязательный числовой параметр, задающий количество
символов, пропускаемых с начала строки. По умолчанию пропускается 0 символов.
 
  Возвращаемое значение
 
    nNumber - числовое значение количества вхождений.
 
  Описание
 
Функция определяет количество вхождений <cSearchFor> в строку
<cString>.
 
При поиске вхождений функция просматривает исходную строку с начала,
пропустив заданное параметром <nIgnore> количество символов.
 
Если с помощью CSETATMUPA() отключен режим прохода по символам, то
поиск будет продолжаться с позиции следующего за последним символа найденной подстроки, а иначе с позиции второго символа найденного вхождения подстроки.
 
  Примечания
 
  . Применение SETATLIKE() позволяет организовать поиск по образцу.
 
  Примеры
 
  . Подсчет с первой позиции:
 
    ? NUMAT("ab", "abcdeabc")           // Результат: 2


 
  . Подсчет со второй позиции:
 
    ? NUMAT("ab", "abcdeabc", 1)        //Результат: 1
 
  . Влияние CSETATMUPA():
 
    CSETATMUPA(.F.)                     // Выключение режима прохода по
                                        // символам
    ? NUMAT("aa", "aaaab")              // Результат: 2
 
    CSETATMUPA(.T.)                     // Включение режима прохода по
                                        // символам
    ? NUMAT("aa", "aaaab")              // Результат: 3
 

See Also: CSETATMUPA()
SETATLIKE()

 

 

 NUMTOKEN()
 Возвращает количество элементов в строке.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NUMTOKEN(<cString>, [<cDelimiter>], [<nSkipWidth>]) --> nNumber
 
  Параметры
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
    <cDelimiter> - необязательный символьный параметр, содержащий список
    разделителей элементов. Значения по умолчанию приведены в подразделе
    Описание.
 
    <nSkipWidth> - необязательный параметр, задающий количество
    разделителей (длину последовательности), необходимых для подсчета
    элементов, что применяется при выявлении пустых элементов.
    По умолчанию разделители используются по одному.
 
  Возвращаемое значение
 
    nNumber - число элементов в строке.
 
  Описание
 
    Функция применяется для определения количества слов (или элементов),
    содержащихся в символьной строке. По умолчанию она использует
    следующий список разделителей:
 
    CHR(32), CHR(0), CHR(9), CHR(10), CHR(13),
    CHR(26), CHR(32), CHR(138), CHR(141)
 
    и символы:
 
    ,.;:!?/\<>()^#&%+-*
 
    Список разделителей может быть заменен при вызове функции. Некоторые
    примеры использования разделителей приведены в следующей таблице:


 
    Таблица 4-3. Рекомендуемые разделители
    --------------------------------------------------------------------
    Элемент текста      <cDelimiter>
    --------------------------------------------------------------------
    Страницы            CHR(12) (прогон страницы)
    Предложения         ".!?"
    Имена файлов        ":\."
    Строки чисел        ",."
    Строки дат          "/."
    Строки времени      ":."
    --------------------------------------------------------------------
 
    Значение <nSkipWidth> задает количество символов, пропускаемых перед
    анализом следующего подсчитываемого элемента. Это также позволяет
    подсчитывать пустые элементы (напр., пробелы) внутри строки.
 
  Примечания
 
  . Используемые в качестве разделителей коды CHR(138) и CHR(141) в
    альтернативной кодировке соответствуют буквам кириллицы "К" и "Н".
    В связи с этим при использовании функции для разбора текстов на
    русском языке необходимо заменять список разделителей.
 
  Примеры
 
  . Подсчет элементов с использованием стандартных разделителей:
 
    ? NUMTOKEN("Добрый день!")                          // Результат: 2
 
  . Собственный список разделителей, содержащий только символы
    ".!?":
 
    ? NUMTOKEN("Да! Это так. Разве нет?", ".!?")        // Результат: 3
 
  . Подсчет пустых элементов. Все параметры разделены запятыми,
    но некоторые из параметров опущены. Элемент учитывается, если он
    находится после, по крайней мере, одного разделителя:
 
    String := "один, два,, четыре"
    ? NUMTOKEN(String, ",", 1)                          // Результат: 4
 

See Also: ATTOKEN()
TOKEN()
TOKENLOWER()
TOKENUPPER()

 

 

 PADLEFT()
 Дополняет строку до заданной длины слева.
------------------------------------------------------------------------------


 
  Синтаксис
 
    PADLEFT(<cString>, <nLength>,
        [<cChar|nChar>]) --> cModString
 
  Параметры
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
    <nLength> - числовой параметр, задающий новую длину строки.
 
    <cChar|nChar> - необязательный параметр, задающий в символьной форме
    или в виде числового значения ASCII-кода (в диапазоне от 0 до 255)
    символ, которым дополняется строка слева. По умолчанию используется
    пробел.
 
  Возвращаемое значение
 
    cModString - символьная строка.
 
  Описание
 
    Функция возвращает строку с заданной новой длиной, размещая в ее
    начале символы-заполнители, в качестве которых могут использоваться
    пробелы или другие символы.
 
  Примечания
 
  . При отрицательном значении <nLength> функция возвращает пустую
    строку.
 
  . Если <nLength> меньше, чем длина строки <cString>, то функция
    работает подобно Clipper-функции RIGHT().
 
  Примеры
 
  . Имитация RIGHT():
 
    ? PADLEFT("123456", 4)              // "3456"
 
  . Вставка пробелов слева:
 
    ? PADLEFT("123456", 8)              // "  123456"
 
  . Вставка символов "." слева:
 
    ? PADLEFT("123456", 8, ".")         // "..123456"
 

See Also: PADRIGHT()

 

 

 PADRIGHT()
 Дополняет строку до заданной длины справа.
------------------------------------------------------------------------------
 
  Синтаксис
 
    PADRIGHT(<cString>, <nLength>,
        [<cChar|nChar>]) --> cModString
 
  Параметры
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
    <nLength> - числовой параметр, задающий новую длину строки.
 
    <cChar|nChar> - необязательный параметр, задающий в символьной форме


    или в виде числового значения ASCII-кода (в диапазоне от 0 до 255)
    символ, которым дополняется строка справа. По умолчанию используется
    пробел.
 
  Возвращаемое значение
 
    cModString - символьная строка.
 
  Описание
 
    Функция возвращает строку с заданной новой длиной, размещая в ее
    конце символы-заполнители, в качестве которых могут использоваться
    пробелы или другие символы.
 
  Примечания
 
  . При отрицательном значении <nLength> функция возвращает пустую
    строку.
 
  . Если <nLength> меньше, чем длина строки <cString>, то функция
    работает подобно Clipper-функции LEFT().
 
  Примеры
 
  . Имитация LEFT():
 
    ? PADRIGHT("123456", 4)                     // "1234"
 
  . Дополнение пробелами справа:
 
    ? PADRIGHT("123456", 8)                     // "123456  "
 
  . Дополнение символами "." справа:
 
    ? PADRIGHT("123456", 8, ".")                // "123456.."
 

See Also: PADLEFT()

 

 

 POSALPHA()
 Возвращает номер позиции первого буквенного/небуквенного символа в строке.
------------------------------------------------------------------------------
 
  Синтаксис
 
    POSALPHA(<cString>, [<lMode>], [<nIgnore>]) --> nPosition
 
  Параметры
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
    <lMode> - необязательный логический параметр, задающий поиск первого
    символа, являющегося при значении .T. небуквенным, а при значении .F.
    или по умолчанию буквенным. Несмотря на то, что параметр не является
    последним, он может быть опущен вместе с предшествующей запятой.
 
    <nIgnore> - необязательный числовой параметр, задающий количество
    символов, пропускаемых с начала строки. По умолчанию пропускается 0


    символов.
 
  Возвращаемое значение
 
    nPosition - номер позиции символа, удовлетворяющего заданному
    условию, а иначе 0.
 
  Описание
 
    Функция, начиная с левого края строки, ищет первый буквенный (или
    небуквенный) символ в <cString>. Под буквенным понимается символ,
    изменяемый Clipper-функциями LOWER() или UPPER(), а под небуквенным -
    неизменяемый этими функциями. Параметр <nIgnore> позволяет исключить
    из поиска заданное количество символов с начала строки.
 
  Примечания
 
  . Действие функции зависит от особенностей таблицы символов
    национальной версии Clipper. В частности, в Русской версии Clipper,
    где используется альтернативная кодировка кириллицы, кроме латинских и
    русских прописных и строчных букв буквенными являются также символы с
    ASCII-кодами в диапазоне от 240 до 247.
 
  Примеры
 
    cString := "UKLM123"
    ? POSALPHA(cString)                 // Результат: 1
    ? POSALPHA(cString, .T.)            // Результат: 5
    ? POSALPHA(cString, .F., 2)         // Результат: 3
 

See Also: POSLOWER()
POSRANGE()
POSUPPER()

 

 

 POSCHAR()
 Заменяет символ в заданной позиции символьной строки.
------------------------------------------------------------------------------
 
  Синтаксис
 
    POSCHAR([@]<cString>, <cChar|nChar>,
        [<nPosition>]) --> cModString
 
  Параметры
 
    [@]<cString> - символьный параметр, допускающий передачу по ссылке
    и задающий обрабатываемую строку, в которой заменяется символ.
 
    <cChar|nChar> - параметр, задающий в символьной форме или в виде
    числового значения ASCII-кода (в диапазоне от 0 до 255) заменяющий
    символ.
 
    <nPosition> - необязательный числовой параметр, задающий позицию
    символа. По умолчанию последняя позиция в <cString>.
 
  Возвращаемое значение


 
    cModString - модифицированная строка <cString>.
 
  Описание
 
    Функция позволяет заменить символ в строке без ее разбиения на части.
    Поскольку символ заменяется только в заданной позиции преобразуемой
    строки, то она может передаваться по ссылке.
 
  Примечания
 
  . Параметр <cString> может быть передан по ссылке. При этом вызов
    CSETREF(.T.), подавляющий возвращение функцией результата, позволяет
    уменьшить потребности в рабочей памяти.
 
  Примеры
 
  . Замена символа в позиции 3:
 
    ? POSCHAR("ABCDEF", "X", 3) // "ABXDEF"
 
  . Замена символа в последней позиции:
 
    ? POSCHAR("ABCDEF", "X")    // "ABCDEX"
 
  . Передача параметра по ссылке:
 
    CSETREF(.T.)                // Подавляется возвращаемое значение
    cVar := "ABCDEF"
    POSCHAR(@cVar, "X")
    ? cVar                      // "ABCDEX"
 

See Also: CSETREF()

 

 

 POSDEL()
 Удаляет группу символов, начиная с заданной позиции строки.
------------------------------------------------------------------------------
 
  Синтаксис
 
    POSDEL(<cString>, [<nStartPos>], [<nNumber>]) --> cModString
 
  Параметры
 
    <cString> - символьный параметр, задающий строку, из которой
    производится удаление.
 
    <nStartPos> - необязательный числовой параметр, задающий позицию
    начала удаления. Позиция, используемая по умолчанию, описана в
    подразделе Примечания.
 
    <nNumber> - необязательный числовой параметр, задающий количество
    удаляемых символов.
 
  Возвращаемое значение
 
    cModString - измененная символьная строка.
 
  Описание
 
    Функция удаляет <nNumber> символов из <cString>, начиная с позиции
    <nStartPos>.
 


  Примечания
 
  . Параметр <nStartPos> необязателен. Если он опущен, то функция
    начинает работу с конца строки <cString> и удаляет количество символов,
    заданное <nNumber>.
 
  Примеры
 
  . Удаление двух символов из строки:
 
    ? POSDEL("Параметр", 3, 2)          // "Паметр"
 
  . Удаление двух последних символов:
 
    ? POSDEL("Параметр", , 2)           // "Параме"
 

See Also: POSINS()
POSRANGE()

 

 

 POSDIFF()
  Возвращает позицию первого отличия двух строк.
------------------------------------------------------------------------------
 
  Синтаксис
 
    POSDIFF(<cString1>, <cString2>,
        [<nIgnore>]) --> nPosition
 
  Параметры
 
    <cString1> и <cString2> - символьные параметры, задающие сравниваемые
    символьные строки.
 
    <nIgnore> - необязательный числовой параметр, задающий количество
    пропускаемых с начала строк символов. По умолчанию 0.
 
  Возвращаемое значение
 
    nPosition - номер первой позиции, в которой <cString1> и <cString2>
    отличаются, или 0, если строки одинаковы.
 
  Описание
 
    Функция сравнивает две строки и определяет, в какой позиции
    встречается их первое отличие. Параметр <nIgnore> позволяет исключить
    из поиска заданное число символов с начала обеих символьных строк.
 
  Примечания
 
  . Можно сравнивать символьные строки различной длины (см. Примеры).
 
  Примеры
 
  . Сравнение строк одинаковой длины:
 
    cString1 := "X23AB$/A"
    cString2 := "X23A8$/A"
    ? POSDIFF(cString1, cString2)               // Результат: 5
 
  . Сравнение строк различной длины:
 
    ? POSDIFF("AB", "ABC")                      // Результат: 3
 

See Also: POSEQUAL()

 



 

 POSEQUAL()
  Возвращает позицию первого совпадения двух строк.
------------------------------------------------------------------------------
 
  Синтаксис
 
    POSEQUAL(<cString1>, <cString2>,
        [<nCompare>], [<nIgnore>]) --> nPosition
 
  Параметры
 
    <cString1> и <cString2> - символьные параметры, задающие сравниваемые
    символьные строки.
 
    <nCompare> - необязательный числовой параметр, задающий количество
    символов, которые должны быть одинаковыми. По умолчанию длина более
    короткой строки.
 
    <nIgnore> - необязательный числовой параметр, задающий количество
    пропускаемых с начала строк символов. По умолчанию 0.
 
  Возвращаемое значение
 
    nPosition - номер позиции, начиная с которой в двух символьных строках
    совпадает <nCompare> символов, или 0, если совпадение не найдено.
 
  Описание
 
    Функция позволяет определить позицию совпадения двух строк. Длина
    совпадения соответствует <nCounter>. Если параметр <nCounter> опущен,
    то по умолчанию он принимается равным длине более короткой строки.
    Параметр <nIgnore> задает количество исключаемых из сравнения
    символов с начала каждой строки.
 
  Примеры
 
  . Совпадение строк отсутствует:
 
    cString1 := "ABCDEFGHI"
    cString2 := "XYZDEKLMN"
    ? POSEQUAL(cString1, cString2)              // Результат: 0
 
  . Соответствие минимум двух символов:
 
    ? POSEQUAL(cString1, cString2, 2)           // Результат: 4
 
  . Совпадение одного символа при игнорировании первых четырех:
 
    ? POSEQUAL(cString1, cString2, 1, 4)        // Результат: 5
 

See Also: POSDIFF()

 

 

 POSINS()
 Вставляет символы в заданную позицию строки.
------------------------------------------------------------------------------
 
  Синтаксис


 
    POSINS(<cString>, <cInsertString>,
        [<nPosition>]) --> cInsString
 
  Параметры
 
    <cString> - символьный параметр, задающий строку, в которую
    вставляются символы.
 
    <cInsertString> - символьный параметр, задающий подстроку
    вставляемых символов.
 
    <nPosition> - необязательный числовой параметр, задающий позицию,
    с которой вставляются новые символы. По умолчанию позиция перед
    последним символом.
 
  Возвращаемое значение
 
    cInsString - символьная строка со вставленными символами, если указана
    допустимая позиция, а иначе исходная строка.
 
  Описание
 
    Функция вставляет подстроку <cInsertString> в строку <cString> с
    позиции <nPosition>.
 
  Примечания
 
  . Результирующая символьная строка длиннее исходной, поэтому
    параметр не может передаваться по ссылке.
 
  Примеры
 
  . Вставка "123" с позиции 2:
 
    ? POSINS("abcdefgh", "123", 2)              // "a123bcdefgh"
 
  . Вставка "123" с позиции 8:
 
    ? POSINS("abcdefgh", "123", 8)              // "abcdefg123h"
 
  . Ошибочная позиция:
 
    ? POSINS("abcdefgh", "123", 10)             // "abcdefgh"
 

See Also: POSDEL()
POSREPL()

 

 

 POSLOWER()
 Возвращает позицию первой строчной/прописной буквы в строке.
------------------------------------------------------------------------------
 
  Синтаксис
 
    POSLOWER(<cString>, [<lMode>], [<nIgnore>]) --> nPosition
 
  Параметры
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. поиск прописных, а при значении .F. или по умолчанию поиск


    строчных букв. Несмотря на то, что параметр не является последним,
    он может быть опущен вместе с предшествующей запятой.
 
    <nIgnore> - необязательный числовой параметр, задающий количество
    пропускаемых с начала строки символов. По умолчанию пропускается 0
    символов.
 
  Возвращаемое значение
 
    nPosition - номер позиции символа, удовлетворяющего заданному
    условию, а иначе 0.
 
  Описание
 
    Функция, начиная с левого края строки <cString>, ищет первую строчную
    или прописную букву. Под строчными буквами понимаются символы,
    изменяемые Clipper-функцией UPPER(), а под прописными - изменяемые
    Clipper-функцией LOWER(). Параметр <nIgnore> позволяет исключить из
    поиска заданное количество символов с начала строки <cString>.
 
  Примечания
 
  . Действие функции зависит от особенностей таблицы символов
    национальной версии Clipper. В частности, в Русской версии Clipper,
    где используется альтернативная кодировка кириллицы, кроме латинских и
    русских прописных и строчных букв буквенными являются также символы с
    ASCII-кодами в диапазоне от 240 до 247.
 
  Примеры
 
  . Поиск строчных и прописных букв:
 
    cString := "123ABCuabc"
 
    ? POSLOWER(cString)                 // Строчная буква на позиции 7
    ? POSLOWER(cString, .T.)            // Прописная буква на позиции 1
    ? POSLOWER(cString, .F., 7)         // Строчная буква на позиции 8
 

See Also: POSALPHA()
POSRANGE()
POSUPPER()

 

 

 POSRANGE()
 Возвращает позицию символа в строке с ASCII-кодом заданного диапазона.
------------------------------------------------------------------------------
 
  Синтаксис
 
    POSRANGE(<cChar1|nChar1>, <cChar2|nChar2>,
        <cString>, [<lMode>], [<nIgnore>]) --> nPosition
 
  Параметры
 
    <cChar1|nChar1> и <cChar2|nChar2> - параметры, задающие в символьной


    форме или в виде числового значения ASCII-кода (в диапазоне от 0 до
    255) границы диапазона.
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. поиск символов, не принадлежащих, а при значении .F. или по
    умолчанию поиск символов, принадлежащих заданному диапазону.
    Несмотря на то, что параметр не является последним, он может быть
    опущен вместе с предшествующей запятой.
 
    <nIgnore> - необязательный числовой параметр, задающий количество
    пропускаемых с начала строки символов. По умолчанию пропускается 0
    символов.
 
  Возвращаемое значение
 
    nPosition - номер позиции символа, удовлетворяющего заданному
    условию, а иначе 0.
 
  Описание
 
    Функция, начиная с начала строки, ищет первый символ, ASCII-код
    которого принадлежит (или не принадлежит) диапазону, границы
    которого заданы параметрами <cChar1|nChar1> и <cChar2|nChar2>.
 
    Таким образом можно, например, найти в строке управляющие символы,
    задав CHR(0) в качестве <cChar1|nChar1>, а CHR(31) в качестве
    <cChar2|nChar2>. Параметр <nIgnore> позволяет исключить из поиска
    заданное число символов с начала строки <cString>.
 
  Примеры
 
  . Поиск позиции первого символа, не являющегося управляющим:
 
    cInput := COM_READ(1)
    ? POSRANGE(CHR(0), CHR(31), cInput, .T.)
 
  . Поиск с пропуском первых 10 символов:
 
    ? POSRANGE(CHR(0), CHR(31), cInput, .T., 10)
 

See Also: POSALPHA()
POSLOWER()
POSUPPER()
RANGEREPL()

 

 

 POSREPL()
 Заменяет с указанной позиции один или несколько символов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    POSREPL([@]<cString>, <cReplaceString>,
        [<nStartPos>]) --> cReplString


 
  Параметры
 
    [@]<cString> - символьный параметр, допускающий передачу по ссылке и
    задающий строку, внутри которой заменяются символы.
 
    <cReplaceString> - символьный параметр, задающий подстроку заменяющих
    символов.
 
    <nStartPos> - необязательный числовой параметр, задающий позицию
    начала замены в строке. По умолчанию заменяется соответствующее
    количество символов в конце строки.
 
  Возвращаемое значение
 
    cReplString - модифицированная строка <cString>.
 
  Описание
 
    Функция заменяет подстрокой <cReplaceString> последовательность
    символов в строке <cString> с позиции <nStartPos>.
 
  Примечания
 
  . Если результирующая строка не длиннее исходной, то параметр
    <cString1> может быть передан по ссылке. При этом вызов CSETREF(.T.),
    подавляющий возвращение функцией результата, позволяет уменьшить
    потребности в рабочей памяти.
 
  Примеры
 
  . Замена на символы "XXX", начиная с позиции 3:
 
    ? POSREPL("ABCDEFG", "XXX", 3)      // "ABXXXFG"
 
  . Замена последних LEN(<cReplaceString>) символов:
 
    ? POSREPL("ABCDEFG", "XXX")         // "ABCDXXX"
 
  . Результат может быть длиннее, чем исходная строка:
 
    ? POSREPL("ABCDEF", "123", 5)       // "ABCD123"
    ? POSREPL("ABCDEF", "123", 6)       // "ABCDE123"
 

See Also: CSETREF()
POSDEL()
POSINS()

 

 

 POSUPPER()
 Возвращает позицию первой прописной/строчной буквы в строке.
------------------------------------------------------------------------------
 
  Синтаксис
 
    POSUPPER(<cString>, [<lMode>],
        [<nIgnore>]) --> nPosition
 
  Параметры
 
    <cString> - символьный параметр, задающий обрабатываемую строку.


 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. поиск строчных, а при значении .F. или по умолчанию поиск
    прописных букв. Несмотря на то, что параметр не является последним,
    он может быть опущен вместе с предшествующей запятой.
 
    <nIgnore> - необязательный числовой параметр, задающий количество
    пропускаемых с начала строки символов. По умолчанию пропускается 0
    символов.
 
  Возвращаемое значение
 
    nPosition - номер позиции символа, удовлетворяющего заданному
    условию, а иначе 0.
 
  Описание
 
    Функция, начиная с левого края строки <cString>, ищет первую
    прописную или строчную букву. Под строчными буквами понимаются
    символы, изменяемые Clipper-функцией UPPER(), а под прописными -
    изменяемые Clipper-функцией LOWER(). Параметр <nIgnore> позволяет
    исключить из поиска заданное количество символов с начала строки
    <cString>.
 
  Примечания
 
  . Действие функции зависит от особенностей таблицы символов
    национальной версии Clipper. В частности, в Русской версии Clipper,
    где используется альтернативная кодировка кириллицы, кроме латинских
    и русских прописных и строчных букв буквенными являются также символы
    с ASCII-кодами в диапазоне от 240 до 247.
 
  Примеры
 
  . Поиск строчных и прописных букв:
 
    cString := "123abcUABC"
    ? POSUPPER(cString)                 // Прописная буква на позиции 7
    ? POSUPPER(cString, .T.)            // Строчная буква на позиции 1
    ? POSUPPER(cString, .F., 7)         // Прописная буква на позиции 8
 

See Also: POSALPHA()
POSLOWER()
POSRANGE()

 

 

 RANGEREM()
 Удаляет из строки символы с ASCII-кодами заданного диапазона.
------------------------------------------------------------------------------
 
  Синтаксис
 
    RANGEREM(<cChar1|nChar1>, <cChar2|nChar2>,


        <cString>) --> cResultString
 
  Параметры
 
    <cChar1|nChar1> и <cChar2|nChar2> - параметры, задающие в символьной
    форме или в виде числового значения ASCII-кода (в диапазоне от 0 до
    255) границы диапазона.
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
  Возвращаемое значение
 
    cResultString - символьная строка.
 
  Описание
 
    Функция удаляет все символы, ASCII-коды которых принадлежат заданному
    диапазону. Например, из символьной строки можно удалить все
    управляющие символы.
 
    Задание диапазона может осуществляться от конца к началу, тогда
    значение ASCII-кода для <cChar2|nChar2> должно быть меньше, чем для
    <cChar1|nChar1>. В этом случае диапазон располагается от
    <cChar1|nChar1> до 255 и от 0 до <cChar2|nChar2>.
 
  Примечания
 
  . Поскольку длина символьной строки изменяется, то в отличие от
    RANGEREPL(), невозможна передача параметров по ссылке.
 
  Примеры
 
  . Удаление управляющих символов:
 
    cString := RANGEREM(0, 31, cString)
 
  . Удаление всех символов, кроме прописных латинских букв:
 
    cString := RANGEREM(91, 64, cString)
 

See Also: RANGEREPL()

 

 

 RANGEREPL()
 Заменяет символы с ASCII-кодами заданного диапазона.
------------------------------------------------------------------------------
 
  Синтаксис
 
    RANGEREPL(<cChar1|nChar1>, <cChar2|nChar2>,
        [@]<cString>, <cReplaceChar>) --> cReplString
 
  Параметры
 
    <cChar1|nChar1> и <cChar2|nChar2> - параметры, задающие в символьной
    форме или в виде числового значения ASCII-кода (в диапазоне от 0 до
    255) границы диапазона.
 
    [@]<cString> - символьный параметр, допускающий передачу по ссылке и
    задающий обрабатываемую символьную строку.


 
    <cReplaceChar> - символьный параметр, задающий заменяющий символ.
 
  Возвращаемое значение
 
    cReplString - модифицированная строка <cString>.
 
  Описание
 
    Функция заменяет все символы с ASCII-кодами, принадлежащими диапазону
    от <cChar1|nChar1> до <cChar2|nChar2>. Таким образом можно, например,
    все управляющие символы в строке заменить на пробелы.
 
    Задание диапазона может осуществляться от конца к началу, тогда
    значение ASCII-кода для <cChar2|nChar2> должно быть меньше, чем для
    <cChar1|nChar1>. В этом случае диапазон располагается от
    <cChar1|nChar1> до 255 и от 0 до <cChar2|nChar2>.
 
  Примечания
 
  . Функция не изменяет длину строки.
 
  . Параметр <cString> может быть передан по ссылке. При этом вызов
    CSETREF(.T.), подавляющий возвращение функцией результата, позволяет
    уменьшить потребности в рабочей памяти.
 
  Примеры
 
  . Замена всех управляющих символов в строке на ".":
 
    cString := "a" + CHR(5) + "b" + CHR(9)
    ? RANGEREPL(CHR(0), CHR(31), cString, ".")          // "a.b."
 
  . Замена всех символов с кодами меньше, чем у "A", на "0" (сам
    символ "0" не изменяется). Вместо CHR(0) можно указывать пустую
    строку:
 
    ? RANGEREPL("", CHR(65), "123400", "0")             // "000000"
 
  . Все символы от "0" до "8" заменяются на "9":
 
    ? RANGEREPL("0", "8", "0212 - 78 67 43", "9")       // "9999 - 99 99 99"
 
  . Замена всех символов, кроме прописных латинских букв, на "-".
    Оптимально вызывать эту функцию совместно с CSETREF(.T.):
 
    CSETREF(.T.)
    cString := "A()&BC/?D"
    RANGEREPL(91, 64, @cString, "-")                    // "A--BC--D"


 

See Also: CHARREPL()
CSETREF()
POSREPL()

 

 

 REMALL()
 Удаляет заданные символы в начале и конце строки.
------------------------------------------------------------------------------
 
  Синтаксис
 
    REMALL(<cString>, [<cChar|nChar>]) --> cRemString
 
  Параметры
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
    <cChar|nChar> - необязательный параметр, задающий в символьной форме
    или в виде числового значения ASCII-кода (в диапазоне от 0 до 255)
    удаляемый символ. По умолчанию используется пробел.
 
  Возвращаемое значение
 
    cRemString - измененная символьная строка.
 
  Описание
 
    Функция подобна Clipper-функции ALLTRIM(), за исключением того, что
    последняя удаляет только пробелы.
 
  Примеры
 
  . Удаление пробелов:
 
    ? REMALL("   1   2   3   ")         // "1  2  3"
 
  . Удаление символов "0":
 
    ? REMALL("007007   ", "0")          // "7007   "
 

See Also: REMLEFT()
REMRIGHT()

 

 

 REMLEFT()
 Удаляет заданные символы в начале строки.
------------------------------------------------------------------------------
 
  Синтаксис
 
    REMLEFT(<cString>, [<cChar|nChar>]) --> cRemString
 
  Параметры
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
    <cChar|nChar> - необязательный параметр, задающий в символьной форме
    или в виде числового значения ASCII-кода (в диапазоне от 0 до 255)
    удаляемый символ. По умолчанию используется пробел.
 
  Возвращаемое значение
 
    cRemString - измененная символьная строка.
 
  Описание
 
    Функция подобна Clipper-функции LTRIM(), за исключением того, что
    последняя удаляет только пробелы.
 
  Примеры
 


  . Удаление пробелов:
 
    ? REMLEFT("  123  ")                // "123  "
 
  . Удаление символов ".":
 
    ? REMLEFT("..123..", ".")           // "123.."
 

See Also: REMALL()
REMRIGHT()

 

 

 REMRIGHT()
 Удаляет заданные символы в конце строки.
------------------------------------------------------------------------------
 
  Синтаксис
 
    REMRIGHT(<cString>, [<cChar|nChar>]) --> cRemString
 
  Параметры
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
    <cChar|nChar> - необязательный параметр, задающий в символьной форме
    или в виде числового значения ASCII-кода (в диапазоне от 0 до 255)
    удаляемый символ. По умолчанию используется пробел.
 
  Возвращаемое значение
 
    cRemString - измененная символьная строка.
 
  Описание
 
    Функция подобна Clipper-функции RTRIM(), за исключением того, что
    последняя удаляет только пробелы.
 
  Примеры
 
  . Удаление пробелов:
 
    ? REMRIGHT("   abc   ")             // "   abc"
 
  . Удаление символов ".":
 
    ? REMRIGHT("..abc..", ".")          // "..abc"
 

See Also: REMALL()
REMLEFT()

 

 

 REPLALL()
 Заменяет заданные символы в начале и конце строки.
------------------------------------------------------------------------------
 
  Синтаксис
 
    REPLALL([@]<cString>, <cReplaceChar|nReplaceChar>,
            [<cSearchChar|nSearchChar>]) --> cReplString
 
  Параметры
 
[@]<cString> - символьный параметр, допускающий передачу по ссылке и задающий обрабатываемую символьную строку.
 
<cReplaceChar|nReplaceChar> - параметр, задающий в символьной форме или в виде числового значения ASCII-кода (в диапазоне от 0 до 255) заменяющий символ.


 
<cSearchChar|nSearchChar> - необязательный параметр, задающий в
символьной форме или в виде числового значения ASCII-кода (в диапазоне от 0 до 255) заменяемый символ. По умолчанию используется пробел.
 
  Возвращаемое значение
 
    cReplString - модифицированная строка <cString>.
 
  Описание
 
Функция заменяет все заданные начальные и конечные символы в
символьной строке. Выявление первого не подлежащего замене символа вызывает прекращение обработки только с данной стороны строки.
 
  Примечания
 
. Параметр <cString> может быть передан по ссылке. При этом вызов CSETREF(.T.), подавляющий возвращение функцией результата, позволяет уменьшить потребности в рабочей памяти.
 
  Примеры
 
. Замена пробелов на "-" осуществляется только с той стороны, где символ был найден:
 
  ? REPLALL("abcd   ", "-")                   // "abcd---"
 
. Замена нулей пробелами:
 
  ? REPLALL("001234", " ", "0")               // "   1234"
 
. Замена пробелов на "-" с обоих сторон:
 
  ? REPLALL("  d ", "-")                      // "--d-"
 
. Заменяются только непрерывные последовательности символов в начале и конце строки:
 
  ? REPLALL(" d d ", "-")                     // "-d d-"
 

See Also: CSETREF()
REPLLEFT()
REPLRIGHT()

 

 REPLLEFT()
 Заменяет заданные символы в начале строки.
------------------------------------------------------------------------------
 
  Синтаксис
 
    REPLLEFT([@]<cString>, <cReplaceChar|nReplaceChar>,
        [<cSearchChar|nSearchChar>]) --> cReplString
 
  Параметры
 
    [@]<cString> - символьный параметр, допускающий передачу по ссылке и
    задающий обрабатываемую символьную строку.
 
    <cReplaceChar|nReplaceChar> - параметр, задающий в символьной форме


    или в виде числового значения ASCII-кода (в диапазоне от 0 до 255)
    заменяющий символ.
 
    <cSearchChar|nSearchChar> - необязательный параметр, задающий в
    символьной форме или в виде числового значения ASCII-кода (в диапазоне
    от 0 до 255) заменяемый символ. По умолчанию используется пробел.
 
  Возвращаемое значение
 
    cReplString - модифицированная строка <cString>.
 
  Описание
 
    Функция заменяет все заданные в начале строки символы.
 
  Примечания
 
  . Параметр <cString> может быть передан по ссылке. При этом вызов
    CSETREF(.T.), подавляющий возвращение функцией результата, позволяет
    уменьшить потребности в рабочей памяти.
 
  Примеры
 
  . Замена начальных пробелов на "0":
 
    ? REPLLEFT("  1234", "0")                   // "001234"
 
  . Замена начальных символов "0" пробелами:
 
    ? REPLLEFT("001234", " ", "0")              // "  1234"
 
  . Замена только начальных пробелов:
 
    ? REPLLEFT("  1   ", "0")                   // "001   "
 

See Also: CSETREF()
REPLALL()
REPLRIGHT()

 

 

 REPLRIGHT()
 Заменяет заданные символы в конце строки.
------------------------------------------------------------------------------
 
  Синтаксис
 
    REPLRIGHT([@]<cString>, <cReplaceChar|nReplaceChar>,
        [<cSearchChar|nSearchChar>]) --> cString
 
  Параметры
 
    [@]<cString> - символьный параметр, допускающий передачу по ссылке и
    задающий обрабатываемую символьную строку.
 
    <cReplaceChar|nReplaceChar> - параметр, задающий в символьной форме
    или в виде числового значения ASCII-кода (в диапазоне от 0 до 255)
    заменяющий символ.
 
    <cSearchChar|nSearchChar> - необязательный параметр, задающий в


    символьной форме или в виде числового значения ASCII-кода (в диапазоне
    от 0 до 255) заменяемый символ. По умолчанию используется пробел.
 
  Возвращаемое значение
 
    cReplString - модифицированная строка <cString>.
 
  Описание
 
    Функция заменяет все заданные символы в конце строки.
 
  Примечания
 
  . Параметр <cString> может быть передан по ссылке. При этом вызов
    CSETREF(.T.), подавляющий возвращение функцией результата, позволяет
    уменьшить потребности в рабочей памяти.
 
  Примеры
 
  . Замена конечных пробелов на "-":
 
    ? REPLRIGHT("abcd   ", "-")         // "abcd---"
 
  . Замена конечных символов "-" на пробелы:
 
    ? REPLRIGHT("abcd-", " ", "-")      // "abcd  "
 
  . Заменяются только конечные пробелы:
 
    ? REPLRIGHT("   1  ", "-")          // "   1--"
 

See Also: CSETREF()
REPLALL()
REPLLEFT()

 

 

 RESTTOKEN()
 Восстанавливает среду пошаговой детализации выделения элементов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    RESTTOKEN(<cTokenEnvironment>) --> cEmptyString
 
  Параметры
 
    <cTokenEnvironment> - символьный параметр, задающий строку в формате
    значения, возвращаемого функцией SAVETOKEN().
 
  Возвращаемое значение
 
    cEmptyString - всегда пустая строка.
 
  Описание
 
    Функция восстанавливает состояние внутренней среды пошаговой
    детализации выделения элементов, ранее сохраненное функцией
    SAVETOKEN().
 
    Выделение элементов можно производить по шагам, связанным с уровнем
    детализации. Например, выделение строки текста - элемента первого
    уровня, а затем выделение слов в строке - элементов второго уровня.
 


  Примечания
 
    Состояние среды, задаваемое параметром <cTokenEnvironment>, должно
    быть сохранено при текущем выполнении программы, а не восстановлено,
    например, из .MEM-файла.
 
  Примеры
 
  . Пошаговое разбиение на элементы (текста - на строки, а строк - на
    слова):
 
    TOKENINIT(@cTextString, CHR(13) + CHR(10), 2)
 
    cLine := TOKENNEXT()
    DO WHILE .NOT. TOKENEND()
        cLine := TOKENNEXT(cTextString)
        WORD(cLine)
    ENDDO
 
    * Функция, выделяющая слова из строк:
 
    FUNCTION WORD(cLine)
        cOldEnv := SAVETOKEN()
        TOKENINIT(@cLine, " .,-:;")
 
        DO WHILE .NOT. TOKENEND()
                cWord := TOKENNEXT(cLine)
                ? cWord
        ENDDO
 
        RESTTOKEN(cOldEnv)
 
        RETURN ("")
 

See Also: SAVETOKEN()
TOKENINIT()
TOKENNEXT()

 

 

 SAVETOKEN()
 Сохраняет среду пошаговой детализации выделения элементов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SAVETOKEN() --> cTokenEnvironment
 
  Возвращаемое значение
 
    cTokenEnvironment - символьная строка, содержащая внутреннюю среду
    пошаговой детализации выделения элементов.
 
  Описание
 
    Функция сохраняет внутреннюю среду пошагового выделения элементов
    (внутренние указатели, инициализированную символьную переменную и
    т.д.).
 
    Выделение элементов можно производить по шагам, связанным с уровнем
    детализации. Например, выделение строки текста - элемента первого
    уровня, а затем выделение слов в строке - элементов второго уровня.
    Пошаговая детализация при выделении элементов облегчается при
    сохранении и последующем восстановлении внутренней среды с помощью
    RESTTOKEN(). При этом сохраняются ранее инициализированная символьная
    переменная, внутренние указатели и соответствующие области программы.


    Все это составляет значение, возвращаемое описываемой функцией, и не
    зависит от последующего восстановления среды функцией RESTTOKEN().
 
  Примечания
 
  . Возвращаемое значение имеет смысл только для текущего
    выполнения программы.
 
  Примеры
 
  . Пошаговое разбиение на элементы (текста - на строки, а строк - на
    слова):
 
    TOKENINIT(@cTextString, CHR(13) + CHR(10), 2)
 
    DO WHILE .NOT. TOKENEND()
        cLine := TOKENNEXT(cTextString)
        WORD(cLine)
    ENDDO
 
    * Функция, выделяющая слова из строк:
 
    FUNCTION WORD(cLine)
        cOldEnv := SAVETOKEN()
        TOKENINIT(@cLine, " .,-:;")
        cWord := TOKENNEXT()
 
        DO WHILE .NOT. TOKENEND()
                cWord := TOKENNEXT(cLine)
                ? cWord
        ENDDO
 
        RESTTOKEN(cOldEnv)
 
        RETURN ("")
 

See Also: RESTTOKEN()
TOKENINIT()
TOKENNEXT()

 

 

 SETATLIKE()
 Переключает режим сопоставления для функций семейства ATxxxx().
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETATLIKE([<nNewMode>, [<cChar>]]) --> nOldMode
 
  Параметры
 
    <nNewMode> - необязательный числовой параметр, задающий номер
    устанавливаемого режима сопоставления при поиске, реализуемом
    функциями семейства ATxxxx() и функцией STRDIFF(). Данная версия
    допускает значения 0 и 1. По умолчанию текущий установленный режим
    не изменяется, а в исходном состоянии (до первого вызова функции)
    установлен режим 0 (точное совпадение).
 
    <cChar> - необязательный символьный параметр, задающий универсальный
    символ сопоставления. По умолчанию "?".
 
  Возвращаемое значение
 
    nOldMode - номер предыдущего состояния режима.
 
  Описание
 
    Функция управляет режимом сопоставления при поиске, реализуемом


    функцией STRDIFF() и всеми ATxxxx()-функциями (такими как ATNUM() и
    т.п.). Исходно, указанные функции реализуют основанный на строгом
    соответствии поиск подстрок. Вызов SETATLIKE(1) позволяет использовать
    в выражении поиска универсальные символы, с которыми сопоставимы любые
    символы в обрабатываемой строке. Однако первый символ в выражении для
    поиска не может быть универсальным, как и все выражение не может
    состоять только из универсальных символов, т.к. это приводит к
    бесконечной рекурсии, аналогичной описанной для ATREPL().
 
    По умолчанию в качестве универсального символа сопоставления
    используется "?". Он может быть заменен (при задании параметра
    <cChar>) любым желаемым символом.
 
  Примечания
 
  . Поддерживаемый DOS универсальный символ "*" недоступен для
    указанных функций.
 
  . Для обеспечения дальнейшего расширения допустимых режимов
    <nNewMode> является параметром числового типа.
 
  Примеры
 
  . Поведение функций при установленном SETATLIKE() режиме поиска с
    использованием универсального символа:
 
    SETATLIKE(1)
 
  . Определение начальной позиции последнего вхождения подстроки:
 
    cTextseq := "ABCDEABC123AXCK"
    ? ATNUM("ABC", cTextseq)                    // 6
    ? ATNUM("A?C", cTextseq)                    // 12
 
  . Определение количества вхождений подстроки:
 
    cTextseq := "ABCDEABC123AXCK"
    ? NUMAT("ABC", cTextseq)                    // 2
    ? NUMAT("A?C", cTextseq)                    // 3
 
  . Остаток строки после последнего вхождения подстроки:
 
    cTextseq := "ABCDEABC123AXCK"
    ? AFTERATNUM("ABC", cTextseq)               // 12AXCK
    ? AFTERATNUM("A?C, cTextseq)                // K
 
  . Часть строки перед последним вхождением подстроки:
 


    cTextseq := "ABCDEABC123AXCK"
    ? BEFORATNUM("ABC", cTextseq)               // ABCDE
    ? BEFORATNUM("A?C", cTextseq)               // ABCDEABC123
 
  . Остаток строки после последнего вхождения подстроки, выровненный
    по позиции 15:
 
    cTextseq := "ABCDEABC123AXCK"
    ? ATADJUST("ABC", cTextseq, 15)             // ABCDE         ABC123AXCK
    ? ATADJUST("A?C", cTextseq, 15)             // ABCDEABC123   AXCK
 
  . Функция ATREPL() создает необычную ситуацию. Если выражение поиска
    содержит универсальные символы сопоставления, то осуществляется замена
    для найденной подстроки и, если с помощью CSETATMUPA(.T.) установлен
    режим прохода по символам, начинается внутренняя рекурсия:
 
    CSETATMUPA(.T.)
    cTextseq := "ABCDEABC123AXCK"
    ? ATREPL("D?", cTextseq, "DX")              // ABCDXXXXXXXXXXXX
 
  . Использование универсального символа сопоставления уменьшает
    степень различия, определяемую функцией STRDIFF():
 
    ? STRDIFF("ABC", "AXC")                     // Степень различия 3
    ? STRDIFF("A?C", "AXC")                     // Степень различия 0
 

See Also: AFTERATNUM()
ATADJUST()
ATNUM()
ATREPL()
NUMAT()
STRDIFF()

 

 

 STRDIFF()
 Определяет степень различия двух строк ("расстояние Левенштейна").
------------------------------------------------------------------------------
 
  Синтаксис
 
    STRDIFF(<cString1>, <cString2>, [<nReplace>],
        [<nRemove>], [<nInsert>]) --> nDifferenceValue
 
  Параметры
 
    <cString1> - символьный параметр, задающий первую сравниваемую строку,
    длиной не более 254 символов, над которой в процессе анализа
    выполняются операции замены (Replace), вставки (Insert) и удаления
    (Remove) символов.
 


    <cString2> - символьный параметр, задающий вторую сравниваемую строку.
    Зависимость ее максимальной длины от длины первой строки описана в
    подразделе Примечания.
 
    <nReplace> - необязательный параметр, задающий число в диапазоне от 0
    до 255, определяющее вес операции замены. По умолчанию 3.
 
    <nRemove> - необязательный параметр, задающий число в диапазоне от 0
    до 255, определяющее вес операции удаления. По умолчанию 6.
 
    <nInsert> - необязательный параметр, задающий число в диапазоне от 0
    до 255, определяющее вес операции вставки. По умолчанию 1.
 
  Возвращаемое значение
 
    nDifferenceValue - число в диапазоне от 0 до 65535, соответствующее
    различию между двумя символьными строками.
 
  Описание
 
    Функция подсчитывает суммарное количество преобразований, требуемых
    для сведения к нулю отличий одной символьной строки от другой.
    Преобразования проводятся путем удаления (Remove), вставки (Insert)
    или замены (Replace) символов в первой строке. Специальные весовые
    коэффициенты, установленные для каждой из трех операций, позволяют в
    результате оценить степень различия двух строк. При этом из нескольких
    вариантов достижения конечной цели, используется тот, который
    выполняется с наименьшим суммарным коэффициентом. Таким образом,
    применение данной функции позволяет выбрать из группы символьных строк
    ту, которая наиболее схожа с заданной.
 
  Примечания
 
  . Суммарная длина строк ограничивается следующим выражением:
 
        2 * (LEN(par1) + 1) * (LEN(par2) + 1) <= 65530
 
  . Если например, обе строки одной длины, то каждая из них может
    содержать до 180 байтов:
 
        2 * 181 * 181 = 65522
 
  . Использование функции SETATLIKE() позволяет включать в первую
    строку универсальные символы сопоставления.
 
  Примеры
 
  . Некоторые примеры использования STRDIFF():


 
    ? STRDIFF("ABC", "ADC")             // 3 - Замена одного символа
    ? STRDIFF("ABC", "AEC")             // 3 - Замена одного символа
    ? STRDIFF("CBA", "ABC")             // 6 - Замена двух символов
    ? STRDIFF("ABC", "AXBC")            // 1 - Вставка одного символа
    ? STRDIFF("AXBC", ABC")             // 6 - Удаление одного символа
 

See Also: SETATLIKE()

 

 

 STRSWAP()
  Производит взаимный обмен символов двух строк.
------------------------------------------------------------------------------
 
  Синтаксис
 
    STRSWAP([@]<cString1>, [@]<cString2>) --> cNull
 
  Параметры
 
    [@]<cString1> - символьный параметр, допускающий передачу по ссылке
    и задающий первую из взаимно обмениваемых строк.
 
    [@]<cString2> - символьный параметр, допускающий передачу по ссылке
    и задающий вторую из взаимно обмениваемых строк.
 
    По крайней мере, один из параметров должен передаваться по ссылке.
 
  Возвращаемое значение
 
    cNull - всегда пустая строка. Функция действует только на строки,
    переданные по ссылке.
 
  Описание
 
    Функция последовательно взаимно обменивает символы строк <cString1>
    и <cString2>. Обмен продолжается до окончания более короткой строки.
 
  Примечания
 
  . Обмен осуществляется без создания рабочих копий строк. Поэтому
    для получения результата, по крайней мере, одна строка должна
    передаваться по ссылке.
 
  Примеры
 
  . Передача двух строк по ссылке:
 
    cStr1 := "1234567890"
    cStr2 := "ABCDEFGHIJKLM"
    ? STRSWAP(@cStr1, @cStr2)           // Возвращаемое значение: ""
 
    * Строки в результате содержат:
    ? cStr1                             // "ABCDEFGHIJ"
    ? cStr2                             // "1234567890KLM"


 
  . Передача только одной строки по ссылке:
 
    cStr1 := "1234567890"
    cStr2 := "ABCDEFGHIJKLM"
    ? STRSWAP(cStr1, @cStr2)            // Возвращаемое значение: ""
 
    * Строки в результате содержат:
    ? cStr1                             // "1234567890"
    ? cStr2                             // "1234567890KLM"
 

 

 TABEXPAND()
 Преобразует символы табуляции в последовательности заданных символов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    TABEXPAND(<cString>, [<nTabWidth>],
        [<cChar|nChar>]) --> cExpandString
 
  Параметры
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
    <nTabWidth> - необязательный числовой параметр, задающий шаг
    (интервал) табуляции. По умолчанию 8.
 
    <cChar|nChar> - необязательный параметр, задающий в символьной форме
    или в виде числового значения ASCII-кода (в диапазоне от 0 до 255)
    символ, который используется для заполнения интервала табуляции.
    По умолчанию используется пробел.
 
  Возвращаемое значение
 
    cExpandString - измененная символьная строка.
 
  Описание
 
    Функция заменяет все символы табуляции (CHR(9)) в <cString>
    соответствующим числом символов, заданных параметром <cChar|nChar>.
    Параметр <nTabWidth> может использоваться для изменения шага
    табуляции.
 
  Примечания
 
  . Начало новой строки формируется как по "жесткому" переводу каретки
    (CHR(13) + CHR(10)), так и по "мягкому" (CHR(141) + CHR(10)),
    используемому в MEMOEDIT().
 
  Примеры
 
  . Заполнение производится только до следующей позиции табуляции:
 
    ? TABEXPAND("-" +CHR(9) +"!")               // "-       !"
    ? TABEXPAND("----" +CHR(9) +"!")            // "----    !"


 
  . Заполнение интервала табуляции другим символом:
 
    ? TABEXPAND("-" +CHR(9) +"!", "+")          // "-+++++++!"
 
  . Задание интервала табуляции:
 
    ? TABEXPAND("-" +CHR(9) +"!", 4)            // "-       !"
    ? TABEXPAND("--" +CHR(9) +"!", 8)           // "--      !"
    ? TABEXPAND("--" +CHR(9) +"!", 8, "+")      // "--++++++!"
 

See Also: TABPACK()

 

 

 TABPACK()
 Преобразует заданные повторяющиеся символы в символы табуляции.
------------------------------------------------------------------------------
 
  Синтаксис
 
    TABPACK(<cString>, [<nTabWidth>], [<cChar|nChar>]) --> cPackString
 
  Параметры
 
    <cString> - символьный параметр, задающий строку, в которой подстроки
    заменяются символами табуляции.
 
    <nTabWidth> - необязательный числовой параметр, задающий шаг
    (интервал) табуляции. По умолчанию 8.
 
    <cChar|nChar> - необязательный параметр, задающий в символьной форме
    или в виде числового значения ASCII-кода (в диапазоне от 0 до 255)
    символ, последовательности которого заменяются символами табуляции.
    По умолчанию используется пробел.
 
  Возвращаемое значение
 
    cPackString - измененная символьная строка.
 
  Описание
 
    Функция заменяет последовательность одинаковых символов символами
    табуляции, учитывая текущее положение позиции табуляции. Если в
    позиции табуляции обнаружен символ <cChar|nChar> и ему непосредственно
    предшествует, по крайней мере, один идентичный символ, функция
    заменяет эту последовательность (длиной максимум <nTabWidth>) на
    CHR(9). Использование символов табуляции позволяет сжать текст за счет
    использования одиночных символов табуляции. Как это принято в


    текстовых редакторах, начальные символы не заменяются символами
    табуляции.
 
  Примечания
 
  . Начало новой строки формируется как по "жесткому" переводу каретки
    (CHR(13) + CHR(10)), так и по "мягкому" (CHR(141) + CHR(10)),
    используемому в MEMOEDIT().
 
  . Если в строке содержатся символы табуляции, то они должны быть
    преобразованы функцией TABEXPAND(), а затем с использованием
    описываемой функции может быть произведено новое преобразование.
 
  Примеры
 
  . В целях наглядности в следующих примерах замена осуществляется не
    пробелами, а символом "*". Шаг табуляции 8 (по умолчанию):
 
    ? TABPACK("AAAAAAA*", "*")                  // "AAAAAAA*"
    ? TABPACK("AAAAA***", "*")                  // "AAAAA" + CHR(9)
    ? TABPACK("AAAAA*****", "*")                // "AAAAA" + CHR(9) + "**"
    crlf := CHR(13) + CHR(10)
    cText := "ABCD+" + crlf + "++--+++++"
    ? TABPACK(cText, 4, "+")                    // "ABCD+"
                                                // "++--" + CHR(9) + "+"
 

See Also: TABEXPAND()

 

 

 TOKEN()
 Выделяет из строки заданный по номеру элемент.
------------------------------------------------------------------------------
 
  Синтаксис
 
    TOKEN(<cString>, [<cDelimiter>],
        [<nNumber>], [<nSkipWidth>]) --> cToken
 
  Параметры
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
    <cDelimiter> - необязательный символьный параметр, задающий список
    разделителей элементов. Значение по умолчанию приведено в подразделе
    Описание.
 
    <nNumber> - необязательный числовой параметр, задающий номер
    выделяемого элемента. По умолчанию выделяется последний элемент.


 
    <nSkipWidth> - необязательный параметр, задающий количество
    разделителей (длину последовательности), необходимых для подсчета
    элементов, что применяется при выявлении пустых элементов.
    По умолчанию разделители используются по одному.
 
  Возвращаемое значение
 
    cToken - символьная строка, содержащая выделенный элемент, или пустая
    строка, если элемента с заданным номером нет.
 
  Описание
 
    Функция позволяет выделять из строки дату, время, предложения, имена
    файлов, пути доступа и т.д., иными словами то, что можно назвать
    элементами текста. По умолчанию функция использует следующий список
    разделителей:
 
    CHR(32), CHR(0), CHR(9), CHR(10), CHR(13),
    CHR(26), CHR(32), CHR(138), CHR(141)
 
    и символы:
 
    ,.;:!?/\<>()^#&%+-*
 
    Список разделителей может быть заменен при вызове функции. Некоторые
    примеры использования разделителей приведены в следующей таблице:
 
    Таблица 4-4. Рекомендуемые разделители
    --------------------------------------------------------------------
    Элемент текста      <cDelimiter>
    --------------------------------------------------------------------
    Страницы            CHR(12) (прогон страницы)
    Предложения         ".!?"
    Имена файлов        ":\."
    Строки чисел        ",."
    Строки дат          "/."
    Строки времени      ":."
    --------------------------------------------------------------------
 
    Значение <nSkipWidth> задает количество символов, пропускаемых
    перед анализом следующего элемента, что позволяет выделять пустые
    элементы, например, пробелы.
 
  Примечания
 
  . Используемые в качестве разделителей коды CHR(138) и CHR(141) в
    альтернативной кодировке соответствуют буквам кириллицы "К" и "Н". В
    связи с этим при использовании описываемой функции для разбора текстов


    на русском языке необходимо заменять список разделителей.
 
  . При работе данной функции совместно с NUMTOKEN() в случае
    использования параметра <nSkipWidth> его значение для обеих функций
    должно быть одинаково.
 
  Примеры
 
  . Последний элемент в символьной строке:
 
    ? TOKEN("Clipper")                          // "Clipper"
    ? TOKEN(" ,    Clipper  . ")                // "Clipper"
    ? TOKEN("Clipper COMPILER!")                // "COMPILER"
 
  . Первый элемент в символьной строке:
 
    ? TOKEN("Clipper", 1)                       // "Clipper"
    ? TOKEN("Clipper COMPILER!", 1)             // "Clipper"
 
  . Третий элемент:
 
    ? TOKEN("Введение к данной главе.", 3)      // "данной"
 
  . Имеются только четыре элемента:
 
    ? TOKEN("Введение к данной главе.", 5)      // ""
 
  . Для анализа пустых элементов (пропущенных параметров) задается
    учет элемента после одного разделителя (в данном случае запятой):
 
    cString := "один,два,,четыре"
    nCount := NUMTOKEN(cString, ",", 1)         // Результат: 4
    FOR nI = 1 TO nCount
    ? TOKEN(cString, ",", nI, 1)
    NEXT nI
 
  . Если строка содержит разные разделители в различных комбинациях,
    то большое значение имеет ее подготовка с помощью другой функции (для
    наглядности вместо пробелов используются точки):
 
    cString := "один, два,, четыре,..., шесть,., восемь"
    cString := CHARREM(".", cString)
    ? TOKEN(cString, "''',", 6, 1)              // "шесть"
 

See Also: ATTOKEN()
NUMTOKEN()
TOKENLOWER()
TOKENSEP()
TOKENUPPER()

 

 

 TOKENAT()
 Возвращает позицию последнего элемента, выделенного TOKENNEXT().
------------------------------------------------------------------------------


 
  Синтаксис
 
    TOKENAT([<lLastTokenPos>]) --> nPosition
 
  Параметры
 
    <lLastTokenPos> - необязательный логический параметр, задающий при
    значении .T. возврат позиции разделителя после элемента, а при
    значении .F. или по умолчанию возврат позиции начала элемента.
 
  Возвращаемое значение
 
    nPosition - числовое значение позиции, или 0, если предварительно не
    вызывались функции TOKENINIT() и TOKENNEXT().
 
  Описание
 
    Функция возвращает начальную позицию последнего выделенного функцией
    TOKENNEXT() элемента или позицию разделителя за ним. При использовании
    функции в сочетании с SUBSTR() можно при пошаговой детализации
    элементов выделить и сами разделители перед элементом или после него.
 
  . Позиция разделителя перед выделенным элементом:
 
    TOKENAT() - 1
 
  . Позиция разделителя после выделенного элемента:
 
    TOKENAT(.T.)
 
  . Поскольку символьная строка, инициализированная функцией
    TOKENINIT(), не содержит первоначальных разделителей, то перед
    использованием TOKENINIT() следует сохранить ее копию.
 
  Примеры
 
  . Начальные позиции пяти элементов:
 
    cString := "Это введение в Clipper,234"
    cCopy := String
    TOKENINIT(@cString)
    ? TOKENNEXT(), TOKENAT()                    // "Это"        1
    ? TOKENNEXT(), TOKENAT()                    // "введение"   5
    ? TOKENNEXT(), TOKENAT()                    // "в"          14
    ? TOKENNEXT(), TOKENAT()                    // "Clipper"    16
    ? TOKENNEXT(), TOKENAT()                    // "234"        24
    ? SUBSTR(cCOPY, TOKENAT() - 1, 1)           // Разделитель: ","
 

See Also: TOKENINIT()
TOKENNEXT()

 

 

 TOKENEND()
 Возвращает признак окончания списка элементов, выделяемых TOKENNEXT().
------------------------------------------------------------------------------


 
  Синтаксис
 
    TOKENEND() --> lEndToken
 
  Возвращаемое значение
 
    lEndToken - значение .T., если предыдущим вызовом функции TOKENNEXT()
    был возвращен последний элемент, а иначе .F..
 
  Описание
 
    Функция возвращает адекватную информацию о наличии элементов, которые
    могут быть выделены функцией TOKENNEXT(). Это делает данную функцию
    идеальной для использования в условии цикла, поскольку организация
    циклического выделения с условием, включающим анализ выделяемого
    функцией TOKENNEXT() элемента, не всегда работает четко. В подразделе
    Примеры приведен цикл, завершающийся пустой строкой, возвращаемой
    TOKENNEXT() как пустой элемент.
 
  Примеры
 
  . При разбиении текста на отдельные строки инициализация проводится
    таким образом, что две подряд идущие последовательности "возврат
    каретки"/"перевод строки" (третий параметр) приводят к выделению
    пустой строки:
 
    TOKENINIT(@TextString, CHR(13) + CHR(10), 2)
    DO WHILE .NOT. TOKENEND()
    Line := TOKENNEXT(TextString)
    ? "Line - " + Line
    ENDDO
 

See Also: TOKENINIT()
TOKENNEXT()

 

 

 TOKENINIT()
 Инициализирует строку для выделения элементов TOKENNEXT().
------------------------------------------------------------------------------
 
  Синтаксис
 
    TOKENINIT([@<cString>, [<cDelimiter>],
        [<nSkipDistance>]]) --> lStatus
 
  Параметры
 
    @<cString> - символьный параметр, обязательно передаваемый по ссылке и
    задающий разбиваемую на элементы строку. По умолчанию производится
    сброс к исходному состоянию, при котором функция TOKENNEXT()
    ориентируется на начало строки.
 
    <cDelimiter> - необязательный символьный параметр, задающий список
    разделителей элементов. Значение по умолчанию приведено в подразделе
    Описание.
 
    <nSkipDistance> - необязательный параметр, задающий количество


    разделителей (длину последовательности), необходимых для подсчета
    элементов, что применяется при выявлении пустых элементов.
    По умолчанию разделители используются по одному.
 
  Возвращаемое значение
 
    lStatus - логическое значение .T. при успешном завершении
    инициализации, или .F., если символьная переменная не может быть
    инициализирована, например, если она не была передана по ссылке.
 
  Описание
 
    Использование описываемой функции совместно с TOKENNEXT()
    предоставляет самые разнообразные возможности выделения элементов,
    значительно повышая скорость этого процесса по сравнению с
    использованием функции TOKEN().
 
    Эффект достигается благодаря замене описываемой функцией всех
    символов-разделителей на первый символ из списка разделителей, что
    позволяет в дальнейшем не просматривать полный их список. Кроме того,
    TOKENNEXT() не всегда начинает поиск выделяемого элемента с начала
    строки (см. TOKENNEXT()). Однако TOKENNEXT(), в отличие от функции
    TOKEN(), не может выделить элемент, заданный по номеру.
 
    При использовании параметра <nSkipDistance> можно задать длину
    последовательности символов-разделителей. Это позволяет, например,
    распознавать пустые строки в тексте, где им соответствует
    последовательность CRLFCRLF. Поскольку описываемая функция заменяет
    все различные символы-разделители на первый из списка, то эта
    последовательность будет заменена на CRCRCRCR. Задание значения 2 для
    параметра <nSkipDistance> означает, что элемент выделяется после
    нахождения двух подряд идущих разделителей (в данном случае CRCR).
    Если этой последовательности ничего не предшествовало, то TOKENNEXT()
    возвращает пустую строку, которую можно интерпретировать как пустой
    элемент.
 
    По умолчанию описываемая функция использует следующий список
    разделителей:
 
    CHR(32), CHR(0), CHR(9), CHR(10), CHR(13),


    CHR(26), CHR(32), CHR(138), CHR(141)
 
    и символы:
 
    ,.;:!?/\<>()^#&%+-*
 
    Список разделителей может быть заменен при вызове функции. Некоторые
    примеры использования разделителей приведены в следующей таблице.
 
    Таблица 4-5. Рекомендуемые разделители
    --------------------------------------------------------------------
    Элемент текста      <cDelimiter>
    --------------------------------------------------------------------
    Страницы            CHR(12) (прогон страницы)
    Предложения         ".!?"
    Имена файлов        ":\."
    Строки чисел        ",."
    Строки дат          "/."
    Строки времени      ":."
    --------------------------------------------------------------------
 
  Примечания
 
  . Используемые в качестве разделителей коды CHR(138) и CHR(141) в
    альтернативной кодировке соответствуют буквам кириллицы "К" и "Н". В
    связи с этим при использовании функции для разбора текстов на русском
    языке необходимо заменять список разделителей.
 
  . При задании значения параметра <nSkipDistance> в условии цикла
    выделения элементов необходимо использовать функцию TOKENEND().
 
  . Символы-разделители заменяются на первый символ из списка
    разделителей.
 
  . При использовании описываемой функции совместно с TOKENNEXT()
    нельзя использовать функцию TOKENSEP(). Требуемая информация может
    быть получена вызовом функции TOKENAT() и из сохраненной перед
    инициализацией исходной строки.
 
  . Позиция разделителя перед последним элементом определяется
    выражением:
 
    TOKENAT() - 1.
 
  . Позиция разделителя после последнего элемента определяется
    выражением:
 
    TOKENAT(.T.)
 
  Примеры
 
  . Инициализация и разбиение строки на слова:
 
    cDelim := "!?.,-"
    cString := "A.B-C,D!E??"


 
    TOKENINIT(@cString, cDelim)         // "A!B!C!D!E!!",
 
    DO WHILE .NOT. TOKENEND()
        cWord := TOKENNEXT(cString)
        ? cWord
    ENDDO
 
  . Разбиение текста на строки по двум разделителям:
 
    nCounter := 0
 
    TOKENINIT(@cTextString, CHR(13)) + CHR(10), 2)
 
    DO WHILE .NOT. TOKENEND()
        nLine := TOKENNEXT(cTextString)
        ++nCounter
    ENDDO
 
    ? nCounter
 

See Also: RESTTOKEN()
SAVETOKEN()
TOKENEND()
TOKENNEXT()

 

 

 TOKENLOWER()
 Преобразует первые буквы задаваемых элементов в строчные.
------------------------------------------------------------------------------
 
  Синтаксис
 
    TOKENLOWER([@]<cString>, [<cDelimiter>],
        [<nNumber>]) --> cModString
 
  Параметры
 
    [@]<cString> - символьный параметр, допускающий передачу по ссылке и
    задающий строку, содержащую элементы.
 
    <cDelimiter> - необязательный символьный параметр, задающий список
    разделителей элементов. Значение по умолчанию приведено в
    подразделе Описание.
 
    <nNumber> - необязательный числовой параметр, задающий количество
    элементов (от начала строки), первая буква которых должна быть
    преобразована в строчную. По умолчанию производится преобразование для
    всех элементов.
 
  Возвращаемое значение
 
    cModString - модифицированная строка <cString>.
 
  Описание
 
    Функция преобразует в строчные первые буквы заданных элементов в
    строке <cString>. Если задано значение параметра <nNumber>, то
    обрабатывается только указанное количество элементов, а иначе
    обрабатываются все элементы <cString>. По умолчанию функция использует
    следующий список разделителей:
 
    CHR(32), CHR(0), CHR(9), CHR(10), CHR(13),
    CHR(26), CHR(32), CHR(138), CHR(141)
 
    и символы:


 
    ,.;:!?/\<>()^#&%+-*
 
    Список разделителей может быть заменен при вызове функции.
    Некоторые примеры использования разделителей приведены в
    следующей таблице:
 
    Таблица 4-6. Рекомендуемые разделители
    --------------------------------------------------------------------
    Элемент текста      <cDelimiter>
    --------------------------------------------------------------------
    Страницы            CHR(12) (прогон страницы)
    Предложения         ".!?"
    Имена файлов        ":\."
    Строки чисел        ",."
    Строки дат          "/."
    Строки времени      ":."
    --------------------------------------------------------------------
 
  Примечания
 
  . Параметр <cString> может быть передан по ссылке. При этом вызов
    CSETREF(.T.), подавляющий возвращение функцией результата, позволяет
    уменьшить потребности в рабочей памяти.
 
  Примеры
 
  . Преобразование в строчные первых букв всех элементов:
 
    ? TOKENLOWER("доброе Утро")                 // "доброе утро"
 
  . Можно задавать большее количество элементов, чем имеется:
 
    ? TOKENLOWER("доброе Утро", 5)              // "доброе утро"
 
  . Обработка первых двух элементов с заданием разделителя:
 
    ? TOKENLOWER("AB/AB/AB", "/", 2)            // "/aB/aB/AB"
 

See Also: CSETREF()
ATTOKEN()
NUMTOKEN()
TOKEN()
TOKENUPPER()

 

 

 TOKENNEXT()
 Возвращает следующий элемент при пошаговом выделении.
------------------------------------------------------------------------------
 
  Синтаксис
 
    TOKENNEXT(<idTokenInitVar>) --> cToken
 
  Параметры
 
    <idTokenInitVar> - идентификатор символьной переменной, предварительно
    инициализированной функцией TOKENINIT(). Задание идентификатора


    необходимо для получения доступа к переменной, динамически свопируемой
    системой управления виртуальной памятью (VMM). Использование выражения
    для задания значения данного параметра не имеет смысла.
 
  Возвращаемое значение
 
    cToken - следующий элемент в форме символьной строки. Если элементов
    больше нет, то возвращается пустая строка.
 
  Описание
 
    Функция выделяет следующий элемент из символьной переменной,
    инициализированной функцией TOKENINIT().
 
    Использование TOKENINIT() совместно с описываемой функцией
    предоставляет самые разнообразные возможности выделения элементов,
    значительно повышая скорость этого процесса по сравнению с
    использованием функции TOKEN().
 
    Эффект достигается тем, что TOKENINIT() заменяет все символы-
    разделители на первый символ из списка разделителей, что позволяет в
    дальнейшем не просматривать полный список разделителей. Кроме того,
    описываемой функции TOKENNEXT() нет необходимости каждый раз начинать
    поиск выделяемого элемента с начала строки.
 
    Функция TOKENAT() позволяет определить, в какой позиции находится
    элемент, непосредственно перед этим выделенный TOKENNEXT().
 
    Хотя функция TOKENINIT(), получив адрес обрабатываемой строки,
    инициализировала ее и установила внутренний счетчик, тем не менее все
    же требуется имя переменной. Функция может работать без этого
    параметра, но только до тех пор, пока инициализированная символьная
    последовательность не будет сохранена системой управления виртуальной
    памятью (VMM). Поскольку не существует средств контроля за текущим
    положением символьных строк, то рекомендуется при любом вызове
    TOKENNEXT() передавать в качестве параметра идентификатор переменной.
    Если доступа к переменной нет, то формируется сообщение об ошибке
    времени выполнения.
 
  Примечания
 
  . При использовании TOKENINIT() совместно с TOKENNEXT() нельзя


    использовать функцию TOKENSEP(). Требуемая информация может быть
    получена вызовом функции TOKENAT() и из сохраненной перед обработкой
    TOKENINIT() исходной строки.
 
  . Позиция разделителя перед последним выделенным элементом
    определяется выражением:
 
    TOKENAT() - 1
 
  . Позиция разделителя после последнего выделенного элемента
    определяется выражением:
 
    TOKENAT(.T.)
 
  Примеры
 
  . Разбиение строки:
 
    cDelim := "!?.,-"
    cString := "A.B-C,D!E??"
 
    TOKENINIT(@cString, cDelim)         // "A!B!C!D!E!!"
 
    DO WHILE .NOT. TOKENEND()
        cWord := TOKENNEXT(cString)
        ? cWord
    ENDDO
 

See Also: RESTTOKEN()
SAVETOKEN()
TOKENAT()
TOKENINIT()

 

 

 TOKENSEP()
 Возвращает разделители элемента, выделенного TOKEN().
------------------------------------------------------------------------------
 
  Синтаксис
 
    TOKENSEP([<lMode>]) --> cDelimiter
 
  Параметры
 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. возврат разделителя, следующего за последним выделенным элементом,
    а при значении .F. или по умолчанию разделителя перед последним
    выделенным элементом.
 
  Возвращаемое значение
 
    cDelimiter - символьная строка, содержащая требуемый разделитель, а
    при отсутствии символов-разделителей пустая строка.
 
  Описание
 
    Символы-разделители весьма важны при анализе математических выражений.
    Возвращаемое значение всегда относится к последнему элементу,
    выделенному функцией TOKEN().
 
  Примечания
 
  . Описываемую функцию нельзя применять при использовании TOKENINIT()
    совместно с TOKENNEXT(). Требуемая информация может быть получена
    вызовом функции TOKENAT() и из сохраненной перед обработкой
    TOKENINIT() исходной строки.
 
  . Позиция разделителя перед последним выделенным элементом


    определяется выражением:
 
    TOKENAT() - 1
 
  . Позиция разделителя после последнего выделенного элемента
    определяется выражением:
 
    TOKENAT(.T.)
 
  Примеры
 
  . Разделители до и после последнего элемента:
 
    ? TOKEN("Привет мир!)"      // Последний элемент: "мир"
    ? TOKENSEP()                // Предшествующий разделитель: ","
    ? TOKENSEP(.T.)             // Завершающий разделитель: "!"
 
  . Неправильный метод присоединения предшествующего разделителя к
    элементу:
 
    ? TOKENSEP() + TOKEN("32+45*70", "+-*/", 2) // "45"
 
  . Правильный метод присоединения предшествующего разделителя к
    элементу. TOKEN() должна быть вызвана перед TOKENSEP(), что
    достигается использованием дополнительных скобок:
 
    ? TOKENSEP() + (TOKEN("32+45*70", "+-*/",2))        // "+45"
 

See Also: TOKEN()

 

 

 TOKENUPPER()
 Преобразует первые буквы задаваемых элементов в прописные.
------------------------------------------------------------------------------
 
  Синтаксис
 
    TOKENUPPER([@]<cString>, [<cDelimiter>],
        [<nNumber>]) --> cModString
 
  Параметры
 
    [@]<cString> - символьный параметр, допускающий передачу по ссылке и
    задающий строку, содержащую элементы.
 
    <cDelimiter> - необязательный символьный параметр, задающий список
    разделителей элементов. Значение по умолчанию приведено в подразделе
    Описание.
 
    <nNumber> - необязательный числовой параметр, задающий количество
    элементов (от начала строки), первая буква которых должна быть
    преобразована в прописную. По умолчанию производится преобразование
    для всех элементов.
 
  Возвращаемое значение
 
    cModString - модифицированная строка <cString>.
 


  Описание
 
    Функция преобразует в прописные первые буквы заданных элементов в
    строке <cString>. Если задано значение параметра <nNumber>, то
    обрабатывается только указанное количество элементов, а иначе
    обрабатываются все элементы <cString>. По умолчанию функция использует
    следующий список разделителей:
 
    CHR(32), CHR(0), CHR(9), CHR(10), CHR(13),
    CHR(26), CHR(32), CHR(138), CHR(141)
 
    и символы:
 
    ,.;:!?/\<>()^#&%+-*
 
    Список разделителей может быть заменен при вызове функции.
    Некоторые примеры использования разделителей приведены в
    следующей таблице:
 
    Таблица 4-7. Рекомендуемые разделители
    --------------------------------------------------------------------
    Элемент текста      <cDelimiter>
    --------------------------------------------------------------------
    Страницы            CHR(12) (прогон страницы)
    Предложения         ".!?"
    Имена файлов        ":\."
    Строки чисел        ",."
    Строки дат          "/."
    Строки времени      ":."
    --------------------------------------------------------------------
 
  Примечания
 
  . Параметр <cString> может быть передан по ссылке. При этом вызов
    CSETREF(.T.), подавляющий возвращение функцией результата, позволяет
    уменьшить потребности в рабочей памяти.
 
  Примеры
 
  . Преобразование в прописные первых букв всех элементов:
 
    ? TOKENUPPER("Доброе утро")         // "Доброе Утро"
 
  . Можно задавать большее количество элементов, чем имеется:
 
    ? TOKENUPPER("Доброе утро", 5)      // "Доброе Утро"
 
  . Обработка первых двух элементов с заданием разделителя:
 
    ? TOKENUPPER("/ab/ab/ab", "/", 2)   //"Ab/Ab/ab"
 

See Also: ATTOKEN()
CSETREF()


NUMTOKEN()
TOKEN()
TOKENLOWER()

 

 

 VALPOS()
 Возвращает числовое значение цифрового символа.
------------------------------------------------------------------------------
 
  Синтаксис
 
    VALPOS(<cString>, [<nPosition>]) --> nValue
 
  Параметры
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
    <nPosition> - необязательный числовой параметр, задающий позицию
    символа в строке. По умолчанию позиция последнего символа.
 
  Возвращаемое значение
 
    nValue - числовое значение, соответствующее цифровому символу, или 0
    для нецифрового символа или при задании позиции за пределами
    <cString>.
 
  Описание
 
    Функция возвращает числовой эквивалент цифрового символа в заданной
    позиции строки, что избавляет от необходимости формировать вложенные
    вызовы функций для выделения символа, определения его принадлежности к
    цифровым и вычитания ASCII-кода нуля.
 
  Примечания
 
    В отличие от Clipper-функции VAL(), выделяющей для преобразования
    последовательность, завершающуюся нецифровым символом, описываемая
    функция обрабатывает только один цифровой символ.
 
  Примеры
 
  . Числовое значение символа в позиции 3:
 
    cString := "AX4B"
    ? VALPOS(cString, 3)                // Результат: 4
 

See Also: ASCPOS()

 

 

 WORDONE()
 Удаляет из строки повторяющиеся пары символов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WORDONE([<cDoubleChar>], <cString>) --> cOneString
 
  Параметры
 
<cDoubleChar> - необязательный символьный параметр, задающий список обрабатываемых двухбайтовых последовательностей, которые после преобразования не должны повторяться подряд. Если параметр опущен вместе с последующей запятой, то производится удаление всех одинаковых смежных двухбайтовых последовательностей.


Однако, если параметр опущен, а разделяющая запятая оставлена, то удаление смежных двухбайтовых последовательностей не производится.
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
  Возвращаемое значение
 
    cOneString - символьная строка.
 
  Описание
 
Функция осуществляет внутри <cString> поиск одинаковых расположенных рядом двухбайтовых последовательностей, что позволяет применять ее для достижения уникальности двухбайтовых подстрок (16-битовых слов) в цепочках. Если подряд повторяются пары символов, то функция оставляет только первую из повторяющихся пар, а следующие за ней удаляет.
Рассматриваемые пары символов могут быть, например, целыми числами в
виде символьных строк, генерируемых Clipper-функцией I2BIN(). При совместном использовании данной функции с другими функциями обработки строк, такими как WORDONLY(), можно построить весьма эффективную систему обработки файлов, содержащих подобную информацию.
 
  Примечания
 
. Термин "слово" используется здесь не в значении "элемент текста", а в значении, используемом при программировании на языке Ассемблера. Слово состоит из 16 битов, т.е. 2 байтов.
 
  Примеры
 
. Повторяется пара "AB", а не "12":
 
  ? WORDONE("12ABAB12")               // "12AB12"
 
. Строка состоит из пар символов "1A", "AA" и "A2", поэтому обработка не производится:
 
  ? WORDONE("1AAAA2")                 // "1AAAA2"
 
. При задании конкретных пар остальные не обрабатываются:
 
  ? WORDONE("1234", "1212ABAB3434")   // "12ABAB34"
 

See Also: CHARONE()

 

 WORDONLY()
 Возвращает строку подстрок, общих для двух заданных строк.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WORDONLY(<cDoubleChar>, <cString>) --> cOnlyString


 
  Параметры
 
    <cDoubleChar> - символьный параметр, задающий список допустимых
    двухбайтовых подстрок.
 
    <cString> - символьный параметр, задающий строку, из которой удаляются
    двухбайтовые подстроки, не входящие в список <cDoubleChar>.
 
  Возвращаемое значение
 
    cOnlyString - измененная символьная строка.
 
  Описание
 
    Функция удаляет все двухбайтовые подстроки в <cString>, не входящие
    в список <cDoubleChar>. Эту функцию удобно применять при обработке
    16-битовых целых чисел в формате символьной строки, формируемом
    Clipper-функцией I2BIN().
 
  Примечания
 
  . Функция обрабатывает строки по упорядоченным парам.
 
  Примеры
 
  . Результат будет содержать только двухбайтовые подстроки второй
    строки, содержавшиеся в первой строке:
 
    ? WORDONLY("AABBCCDD", "XXAAYYBBZZ")        // "AABB"
 
  . Строки обрабатываются по упорядоченным парам:
 
    ? WORDONLY("AABBCCDD", "XAAYYBBZZ")         // "BB'
 

See Also: CHARONLY()

 

 

 WORDREPL()
 Заменяет заданные пары символов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WORDREPL(<cSearchList>, [@]<cString>,
        <cReplaceList>, [<lMode>]) --> cReplString
 
  Параметры
 
    <cSearchList> - символьный параметр, задающий список двухбайтовых
    подстрок, заменяемых соответствующими подстроками из <cReplaceList>.
 
    [@]<cString> - символьный параметр, допускающий передачу по ссылке и
    задающий обрабатываемую символьную строку.
 
    <cReplaceList> - символьный параметр, задающий список двухбайтовых
    подстрок, заменяющих соответствующие подстроки из списка
    <cSearchList>.
 
    <lMode> - необязательный логический параметр, задающий при значении


    .T. режим прохода <cString> по байтам, а при значении .F. или по
    умолчанию по словам (упорядоченным парам).
 
  Возвращаемое значение
 
    cReplString - модифицированная строка <cString>.
 
  Описание
 
    Двухбайтовые подстроки могут заменяться на другие подстроки той же
    длины. С использованием данной функции, аналога CHARREPL(), можно
    построить достаточно быстрый алгоритм для функции SOUNDEX() и легко
    обрабатывать строки, считанные из видеопамяти или сгенерированные
    Clipper-функцией I2BIN().
 
    Способ обработки исходной строки <cString> зависит от значения
    параметра <lMode>:
 
  . При значении .F. параметра <lMode> строка обрабатывается шагами по
    паре байтов.
 
  . При значении .T. параметра <lMode>  строка обрабатывается шагами
    по одному байту. При этом, если выполнялся вызов CSETATMUPA(.T.), то
    описываемая функция продолжает обработку со второго символа в
    заменяемой паре, а иначе со следующей пары.
 
  Примечания
 
  . Термин "слово" используется здесь не в значении "элемент текста",
    а в значении, используемом при программировании на языке Ассемблера.
    Слово состоит из 16 битов, т.е. 2 байтов.
 
  . Строка <cReplaceList> может быть короче, чем <cSearchList>.
    Подстроки из <cSearchList>, для которых не нашлось соответствия,
    заменяются на последнюю подстроку из <cReplaceList>.
 
  . Параметр <cString> может быть передан по ссылке. При этом вызов
    CSETREF(.T.), подавляющий возвращение функцией результата, позволяет
    уменьшить потребности в рабочей памяти.
 
  Примеры
 
  . Замена "XX" на "CC":
 
    ? WORDREPL("CC", "AABBCCDDEE", "XX")        // "AABBXXDDEE"
 
  . Использование CSETATMUPA() и <lMode>:
 
    CSETATMUPA(.F.)                             // Исходное состояние


    ? WORDREPL("aa", "laaaa", "ba")             // "labaa"
    ? WORDREPL("aa", "laaaa", "ba", .T.)        // "lbaba"
 
  . CSETATMUPA() действует только при значении .Т. параметра
    <lMode>:
 
    CSETATMUPA(.T.)                             // Включение режима прохода
                                                // по символам
    ? WORDREPL("aa", "laaaa", "ba")             // "labaa"
    ? WORDREPL("aa", "laaaa", "ba", .T.)        // "lbbba"
 

See Also: CHARREPL()
CSETATMUPA()
CSETREF()

 

 

 WORDSWAP()
  Меняет местами соседние двухбайтовые слова в строке.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WORDSWAP([@]<cString>, [<lMode>]) --> cSwapString
 
  Параметры
 
    [@]<cString> - символьный параметр, допускающий передачу по ссылке и
    задающий строку, внутри которой заменяются двухбайтовые подстроки
    (слова).
 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. дополнительную перестановку смежных байтов в паре, а при значении
    .F. или по умолчанию дополнительная перестановка не производится.
 
  Возвращаемое значение
 
    cSwapString - модифицированная строка <cString>.
 
  Описание
 
    Функция, аналогично CHARSWAP(), меняет местами соседние двухбайтовые
    подстроки (16-битовые слова) в символьной строке.
 
    Благодаря функции можно работать со строками, содержащими 32-битовые
    целые, возвращаемые Clipper-функцией L2BIN(). Перестановка
    подготавливает сортировку целых чисел в этой форме, производимую
    функцией CHARSORT(). Однако для получения правильных результатов
    дополнительно к перестановке 16-битовых слов необходимо поменять
    местами и байты в слове (младший/старший байт 16-битовых целых).


 
  Примечания
 
  . Перестановка байтов в словах при значении .T. параметра <lMode>
    осуществляется, только если для них сделана перестановка двухбайтовых
    слов.
 
  . Параметр <cString> может быть передан по ссылке. При этом вызов
    CSETREF(.T.), подавляющий возвращение функцией результата, позволяет
    уменьшить потребности в рабочей памяти.
 
  Примеры
 
  . Перестановка двухбайтовых слов:
 
    ? WORDSWAP("1234567890")            // "3412785690"
 
  . Перестановка слов и байтов:
 
    ? WORDSWAP("1234567890", .T.)       // "4321876590"
 
  . Работа с L2BIN():
 
    ? L2BIN(1)                  // 00000001 00000000 00000000 00000000
    ? L2BIN(65536)              // 00000010 00000000 00000001 00000000
    ? L2BIN(65536) > L2BIN(1)   // .F.
    ? WORDSWAP(L2BIN(65536), .T.) > WORDSWAP(L2BIN(1), .T.)     // .T.
 

See Also: CHARSORT()
CHARSWAP()
CSETREF()

 

 

 WORDTOCHAR()
 Заменяет заданные двухбайтовые слова на одиночные символы.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WORDTOCHAR(<cDoubleCharList>, <cString>, <cCharList>) --> cModString
 
  Параметры
 
    <cDoubleCharList> - символьный параметр, задающий список двухбайтовых
    подстрок (слов), заменяемых на соответствующий символ из списка в
    <cCharList>.
 
    <cString> - символьный параметр, задающий обрабатываемую строку.
 
    <cCharList> - символьный параметр, задающий список одиночных символов,
    заменяющих соответствующие двухбайтовые слова из списка в
    <cDoubleCharList>.
 
  Возвращаемое значение
 
    cModString - измененная символьная строка.
 
  Описание
 
    Для SOUNDEX-алгоритмов последовательности из двух символов часто
    должны заменяться соответствующим одиночным символом.


Данная функция
    максимально упрощает и убыстряет этот процесс.
 
    Функция обрабатывает <cString> по одному байту. Действие функции после
    замены пары символов на один определяется режимом прохода по символам,
    переключаемым функцией CSETATMUPA():
 
  . Если режим выключен (CSETATMUPA(.F.)), поиск дальнейших
    последовательностей продолжается со следующей пары.
 
  . Если режим включен (CSETATMUPA(.T.)), поиск продолжается с пары,
    начинающейся с заменившего символа.
 
  Примечания
 
  . Термин "слово" используется здесь не в значении "элемент текста",
    а в значении, используемом при программировании на языке Ассемблера.
    Слово состоит из 16 битов, т.е. 2 байтов.
 
  . Строка <cCharList> может быть короче, чем <cDoubleCharList>.
    Подстроки из <cDoubleCharList>, для которых не нашлось соответствия,
    заменяются на последний символ из <cCharList>.
 
  Примеры
 
  . Простая замена:
 
    ? WORDTOCHAR("aa", "Xaaaa", "a")    // "Xaa"
 
  . В сочетании с CSETATMUPA():
 
    CSETATMUPA(.F.)                     // Выключение режима прохода по
                                        // символам
    ? WORDTOCHAR("aa", "Xaaaa", "a")    // "Xaa"
 
    CSETATMUPA(.T.)                     // Включение режима прохода по
                                        // символам
    ? WORDTOCHAR("aa", "Xaaaa", "a")    // "Xa"
 

See Also: CHARREPL() CSETATMUPA() WORDREPL()



 
 

 Дополнительная информация
------------------------------------------------------------------------------
 Совместимость с предыдущими версиями
 Компоновка
 PLL-файлы
 Библиотеки Clipper
 Статические оверлеи
 Динамические оверлеи
 Возможные затруднения при компоновке
 

 



  Совместимость с предыдущими версиями
 
------------------------------------------------------------------------------
 
    Некоторые функции включены в состав CT II с единственной целью
    обеспечить совместимость с CT I. Вследствие новых возможностей,
    заложенных в Clipper 5.0, эти функции не рекомендуются для
    использования во вновь разрабатываемых прикладных программах. Они
    включены лишь для того, чтобы избежать затруднений при компиляции уже
    существующих прикладных программ. В документации имена таких функций
    помечены символом "*".
 
    Функции CT II, в основном, совместимы с Summer'87, но при соблюдении
    некоторых дополнительных условий. Для достижения полной совместимости
    с прикладными программами, разработанными на Summer'87, следует
    использовать входящий в комплект поставки CT II файл NT250.CH.
    Однако применение этого метода не рекомендуется при разработке новых
    прикладных программ.
 

 

  Компоновка
 
------------------------------------------------------------------------------
 
    Функции CT II можно компоновать не только при помощи RTLink, но и
    другими компоновщиками, в частности, программой LINK.EXE фирмы
    Microsoft.  Пример использования LINK.EXE:
 
    LINK <Prog1> + <Prog2> + CT2US50,,,CT250/SE:<nnn>/NOE
 
    За исключением небольших тестовых программ, при использовании LINK.EXE
    требуется задание опции /SE:<nnn>. Однако выдача общих рекомендаций по
    заданию значения <nnn> затруднена.  Пример использования RTLink в
    режиме FreeFormat:
 
    RTLINK FI <Prog1>, <Prog2>, CT2US50 LIB CT250
 
    RTLink также допускает использование позиционного формата задания
    параметров, при котором командная строка оформляется по правилам
    LINK.EXE. Более детальную информацию по компоновщику RTLink можно
    найти в документации Clipper 5.0 "Руководство по программированию и


    утилитам".
 

 

  PLL-файлы
 
------------------------------------------------------------------------------
 
    Файл библиотеки предкомпоновки BASE50.PLL, создаваемый при инсталляции
    Clipper 5. 0 не содержит функций CT II. Поэтому в комплект поставки
    включен файл CT250.LNK, позволяющий создать .PLL файл, включающий
    средства CT II. Это делается командой
 
    RTLINK @CT250
 
    При этом создается .PLL файл с именем CT250.PLL, включающий CT II
    драйвер CT2US50.OBJ, предназначенный для замещения стандартного
    Clipper драйвера, а также некоторых программ ввода/вывода из
    библиотеки TERMINAL.LIB. Использование этого .PLL файла обеспечивает
    правильное функционирование внешних программ и многих CT II функций в
    программах, созданных с использованием библиотеки предкомпоновки.
 
    Если файл CT250.PLL создан, то компоновка может быть произведена
    следующим образом:
 
    RTLINK FI <prog> LIB CT250 /PLL:CT250
 
    В этом случае явное указание CT II драйвера CT2US50.OBJ не требуется,
    т.к. он уже включен в .PLL библиотеку.
 
    Другие модули CT II не заданы явно в .LNK файле и поэтому не
    включаются в библиотеку предкомпоновки. Это сделано сознательно, т.к.
    функции CT II написаны на языках Ассемблера и Си и не охватываются
    динамической оверлейной системой, используемой для функций написанных
    на Clipper 5.0.  По этой причине при запуске программы они в составе
    модулей предкомпоновки всегда загружаются в оперативную память, и их
    неизбирательное включение в .PLL библиотеку может серьезно ухудшить
    использование доступной программе оперативной памяти.
 
    Создание .PLL библиотеки, содержащей CT II функции в сочетании с
    функциями из других внешних библиотек, является специальной задачей,
    требующей продуманного и взвешенного подхода. Для включения какой либо
    одной или нескольких функций в .PLL библиотеку, в .LNK файле следует


    указать оператор REFER, объявляющий внешнее имя общедоступным при
    разрешении в процессе компоновки перекрестных ссылок. Для включения в
    .PLL библиотеку модулей _COM и _TR13, содержащих средства поддержки
    последовательного интерфейса и тригонометрические функции, в .LNK файл
    можно включить оператор:  REFER COM_BREAK, ACOS
 
    Для получения списка имен модулей и содержащихся в них внешних имен
    следует воспользоваться какой либо утилитой обслуживания библиотек,
    например, LIB.EXE фирмы Microsoft.
 

 

  Библиотеки Clipper
 
------------------------------------------------------------------------------
 
    Ни в одном из предшествующих примеров не упомянут какой-либо из
    файлов, принадлежащих собственно Clipper. Это объясняется тем, что в
    процессе компиляции Clipper 5.0 по умолчанию вводит имена четырех
    своих библиотек в результирующий .OBJ-файл. При каких либо отклонениях
    от  используемого по умолчанию процесса компиляции или компоновки,
    например, при использовании опции компилятора /R все необходимые
    библиотеки должны быть явно указаны при компоновке.
 

 

  Статические оверлеи
 
------------------------------------------------------------------------------
 
    Приведенные ниже CT II функции содержат средства обслуживания
    прерываний и по этой причине не могут быть помещены в статические
    оверлейные сегменты:
 
    KEYSEC(), KEYTIME(), SHOWTIME(), SHOWKEY(), PRINTSCR(), PRINTSCRX(),
    SETTIC(), а также функции последовательного интерфейса, которые также
    работают под управлением прерываний.
 
    Кроме того, в оверлейные сегменты нельзя помещать CT II драйвер
    (объектный файл CT2US50.OBJ), средства которого используются Clipper
    при каждой операции ввода и вывода. Помещение CT2US50.OBJ в оверлейный
    сегмент приведет к системному сбою сразу после запуска прикладной
    программы.
 
    Однако нет гарантии, что помещение в оверлейный сегмент других (не


    перечисленных выше) функций не вызовет проблем. Кроме того, в
    оверлейных системах для обеспечения доступа к функции, оверлейный
    сегмент загружается системой поддержки времени выполнения, поэтому
    помещение функций в оверлейные сегменты не всегда является
    целесообразным.  Все функции CT II можно вызывать из оверлейного
    сегмента, однако некоторые из них не могут быть помещены в оверлейный
    сегмент.
 

 

  Динамические оверлеи
 
------------------------------------------------------------------------------
 
    Как указано в документации Clipper 5.0, в динамический оверлейный
    сегмент могут помещаться только модули, написанные на Clipper, а
    модули, написанные на языках Ассемблера или Си, размещаются в
    резидентной части или в статическом оверлейном сегменте.
 

 

  Возможные затруднения при компоновке
 
------------------------------------------------------------------------------
 
    При подключении CT II функций к уже существующей прикладной программе
    может появиться сообщение компоновщика о дублировании внешних имен.
 
    Вероятнее всего, одна из разработанных вами процедур или функций либо
    функция, включаемая из другой дополнительной библиотеки, имеет имя,
    совпадающее с именем одной из функций библиотеки CT250.LIB. Если имя
    конфликтующей функции или процедуры нельзя изменить, а использование
    ее необходимо, то она должна быть выделена в отдельный объектный файл,
    или в списке библиотек последней должна быть задана CT250.LIB.
 
    Необходимо отметить, что в задании источника для компоновки функций
    абсолютный приоритет имеет указание .OBJ файла.  Вследствие этого,
    поиск функций с именами, определенными в этом файле, не осуществляется
    в библиотечном модуле (независимо от местоположения указания имени
    библиотеки в командной строке вызова компоновщика). Именно по этой
    причине CT II драйвер поставляется в виде .OBJ файла.


 

 

 Коды клавиш
 Имена символьных констант
------------------------------------------------------------------------------
 Полные скан-коды алфавитно-цифровых клавиш
 Комбинации <Ctrl> и <Alt> с алфавитно-цифровыми клавишами
 Функциональные клавиши и комбинации с ними
 Клавиши управления курсором, специальные и цифровые клавиши
 

 

  Коды клавиш
 
------------------------------------------------------------------------------
 
    При использовании функций DSETKBIOS(), KBDEMULATE(), KEYSEND(),
    KEYREAD(), GETKXLAT(), GETKXTAB(), SCANKEY() для кодов клавиш
    рекомендуется использовать символьные константы, определенные в файле
    описаний NT2SCAN.CH. По окончании инсталляции этот файл по умолчанию
    располагается в поддиректории INCLUDE.
 
    Ввиду перехода от кодов, используемых в Clipper Summer' 87, к BIOS
    кодированию, CT II функции предоставляют значительно большие
    возможности, особенно, в различении по кодам ранее не различимых
    клавиш.  Например, десятичная точка на цифровой части клавиатуры (PAD)
    имеет ASCII код 46 и скан код 83, в то время как точка на алфавитно
    цифровой части клавиатуры, при том же ASCII коде 46, имеет скан код
    52.
 
    Для поддержания совместимости оставлена возможность использования
    применявшейся ранее системы кодирования клавиш. Для этого следует в
    компилируемую программу включить оператор #INCLUDE "NT250.CH", либо
    оператор EXTERNAL _S87KEYS, содержащийся в файле описаний NT250.CH.
    Однако эту устаревшую систему кодирования рекомендуется использовать
    только для уже существующих программ и не рекомендуется использовать
    при разработке новых прикладных программ.
 

See Also: T-г-=
+--¦¬-=Ф¬¬ ¬ ¦-L-Кг АL=--L-гК
 

 

  Имена символьных констант
 
------------------------------------------------------------------------------
 
    Построение имен символьных констант, определяемых в файлах описаний,


    соответствует следующей форме:
 
    <КорневоеИмя>[_<УправляющаяКлавиша>][_<Клавиатура>]_<ИмяКлавиши>
 
    Где:
 
    <КорневоеИмя>         KS            Имя символьных констант для
                                        полных скан кодов
 
    <УправляющаяКлавиша>  <CTRL>, <ALT> Наименование
                          или <SH>      клавиши, используемой в
                                        комбинации
 
    <Клавиатура>          PAD           Расположение клавиши на
                                        цифровой части клавиатуры
 
    <ИмяКлавиши>        a-Z 0-9 F1-F12  Обозначение основной
                                        гравировки клавиши
 
  Примеры
 
    KS_A                KS_ALT_F1
    KS_PAD_ENTER        KS_CRTL_PAD_DIV
    KS_CTRL_B           KS_SH_F12
    KS_PAD_MUL          KS_ALT_PAD_MINUS
 

See Also: +--¦¬-=Ф¬¬ ¬ ¦-L-Кг АL=--L-гК
 

 

 Клав. ASCII Скан  Симв. | Клав. ASCII Скан  Симв. | Клав. ASCII Скан  Симв.
-------------------------+-------------------------+----------------------------
   A    65    30   KS_A  |   V    86    47   KS_V  |   q    113   16   KS_q
   B    66    48   KS_B  |   W    87    17   KS_W  |   r    114   19   KS_r
   C    67    46   KS_C  |   X    88    45   KS_X  |   s    115   31   KS_s
   D    68    32   KS_D  |   Y    89    21   KS_Y  |   t    116   20   KS_t
   E    69    18   KS_E  |   Z    90    44   KS_Z  |   u    117   22   KS_u
   F    70    33   KS_F  |   a    97    30   KS_a  |   v    118   47   KS_v
   G    71    34   KS_G  |   b    98    48   KS_b  |   w    119   17   KS_w
   H    72    35   KS_H  |   c    99    46   KS_c  |   x    120   45   KS_x
   I    73    23   KS_I  |   d    100   32   KS_d  |   y    121   21   KS_y
   J    74    36   KS_J  |   e    101   18   KS_e  |   z    122   44   KS_z
   K    75    37   KS_K  |   f    102   33   KS_f  |   1    49    2    KS_1


   L    76    38   KS_L  |   g    103   34   KS_g  |   2    50    3    KS_2
   M    77    50   KS_M  |   h    104   35   KS_h  |   3    51    4    KS_3
   N    78    49   KS_N  |   i    105   23   KS_i  |   4    52    5    KS_4
   O    79    24   KS_O  |   j    106   36   KS_j  |   5    53    6    KS_5
   P    80    25   KS_P  |   k    107   37   KS_k  |   6    54    7    KS_6
   Q    81    16   KS_Q  |   l    108   38   KS_l  |   7    55    8    KS_7
   R    82    19   KS_R  |   m    109   50   KS_m  |   8    56    9    KS_8
   S    83    31   KS_S  |   n    110   49   KS_n  |   9    57    10   KS_9
   T    84    20   KS_T  |   o    111   24   KS_o  |   0    48    11   KS_0
   U    85    22   KS_U  |   p    112   25   KS_p  |
 

See Also: T-г-=
+--¦¬-=Ф¬¬ ¬ ¦Ц-LФ¬--=LЛ-Кг LL=-¬Х¬
 

 

  Клавиша  ASCII  Скан   Симв. конст.
Клавиша  ASCII  Скан   Симв. конст.
--------------------------------------+---------------------------------------
   CTRL+A    1     30     KS_CTRL_A   |   ALT+I     0     23     KS_ALT_I
   CTRL+B    2     48     KS_CTRL_B   |   ALT+J     0     36     KS_ALT_J
   CTRL+C    3     46     KS_CTRL_C   |   ALT+K     0     37     KS_ALT_K
   CTRL+D    4     32     KS_CTRL_D   |   ALT+L     0     38     KS_ALT_L
   CTRL+E    5     18     KS_CTRL_E   |   ALT+M     0     50     KS_ALT_M
   CTRL+F    6     33     KS_CTRL_F   |   ALT+N     0     49     KS_ALT_N
   CTRL+G    7     34     KS_CTRL_G   |   ALT+O     0     24     KS_ALT_O
   CTRL+H    8     35     KS_CTRL_H   |   ALT+P     0     25     KS_ALT_P
   CTRL+I    9     23     KS_CTRL_I   |   ALT+Q     0     16     KS_ALT_Q
   CTRL+M    13    50     KS_CTRL_M   |   ALT+R     0     19     KS_ALT_R
   CTRL+N    14    49     KS_CTRL_N   |   ALT+S     0     31     KS_ALT_S
   CTRL+R    18    19     KS_CTRL_R   |   ALT+T     0     20     KS_ALT_T
   CTRL+S    19    31     KS_CTRL_S   |   ALT+U     0     22     KS_ALT_U
   CTRL+T    20    20     KS_CTRL_T   |   ALT+V     0     47     KS_ALT_V


   CTRL+U    21    22     KS_CTRL_U   |   ALT+W     0     17     KS_ALT_W
   CTRL+V    22    47     KS_CTRL_V   |   ALT+X     0     45     KS_ALT_X
   CTRL+W    23    17     KS_CTRL_W   |   ALT+Y     0     21     KS_ALT_Y
   CTRL+X    24    45     KS_CTRL_X   |   ALT+Z     0     44     KS_ALT_Z
   CTRL+Y    25    21     KS_CTRL_Y   |   ALT+1     0     120    KS_ALT_1
   CTRL+Z    26    44     KS_CTRL_Z   |   ALT+2     0     121    KS_ALT_2
   ALT+A     0     30     KS_ALT_A    |   ALT+3     0     122    KS_ALT_3
   ALT+B     0     48     KS_ALT_B    |   ALT+4     0     123    KS_ALT_4
   ALT+C     0     46     KS_ALT_C    |   ALT+5     0     124    KS_ALT_5
   ALT+D     0     32     KS_ALT_D    |   ALT+6     0     125    KS_ALT_6
   ALT+E     0     18     KS_ALT_E    |   ALT+7     0     126    KS_ALT_7
   ALT+F     0     33     KS_ALT_F    |   ALT+8     0     127    KS_ALT_8
   ALT+G     0     34     KS_ALT_G    |   ALT+9     0     128    KS_ALT_9
   ALT+H     0     35     KS_ALT_H    |   ALT+0     0     129    KS_ALT_0
 

See Also: T-г-=
¦-L-Кг АL=--L-гК ¦Ц-LФ¬--=LЛ-Кг LL=-¬Х¬
 

 

  Клавиша  ASCII  Скан  Симв. конст.
|   Клавиша   ASCII  Скан   Симв. конст.
-------------------------------------+----------------------------------------
   F1       0     59    KS_F1        |   SHIFT+F1    0     84     KS_SH_F1
   F2       0     60    KS_F2        |   SHIFT+F2    0     85     KS_SH_F2
   F3       0     61    KS_F3        |   SHIFT+F3    0     86     KS_SH_F3
   F4       0     62    KS_F4        |   SHIFT+F4    0     87     KS_SH_F4
   F5       0     63    KS_F5        |   SHIFT+F5    0     88     KS_SH_F5
   F6       0     64    KS_F6        |   SHIFT+F6    0     89     KS_SH_F6
   F7       0     65    KS_F7        |   SHIFT+F7    0     90     KS_SH_F7
   F8       0     66    KS_F8        |   SHIFT+F8    0     91     KS_SH_F8
   F9       0     67    KS_F9        |   SHIFT+F9    0     92     KS_SH_F9
   F10      0     68    KS_F10       |   SHIFT+F10   0     93     KS_SH_F10


   F11      0     133   KS_F11       |   SHIFT+F11   0     135    KS_SH_F11
   F12      0     134   KS_F12       |   SHIFT+F12   0     136    KS_SH_F12
-------------------------------------+----------------------------------------
  CTRL+F1   0     94    KS_CTRL_F1   |   ALT+F1      0     104    KS_ALT_F1
  CTRL+F2   0     95    KS_CTRL_F2   |   ALT+F2      0     105    KS_ALT_F2
  CTRL+F3   0     96    KS_CTRL_F3   |   ALT+F3      0     106    KS_ALT_F3
  CTRL+F4   0     97    KS_CTRL_F4   |   ALT+F4      0     107    KS_ALT_F4
  CTRL+F5   0     98    KS_CTRL_F5   |   ALT+F5      0     108    KS_ALT_F5
  CTRL+F6   0     99    KS_CTRL_F6   |   ALT+F6      0     109    KS_ALT_F6
  CTRL+F7   0     100   KS_CTRL_F7   |   ALT+F7      0     110    KS_ALT_F7
  CTRL+F8   0     101   KS_CTRL_F8   |   ALT+F8      0     111    KS_ALT_F8
  CTRL+F9   0     102   KS_CTRL_F9   |   ALT+F9      0     112    KS_ALT_F9
  CTRL+F10  0     103   KS_CTRL_F10  |   ALT+F10     0     113    KS_ALT_F10
  CTRL+F11  0     137   KS_CTRL_F11  |   ALT+F11     0     139    KS_ALT_F11
  CTRL+F12  0     138   KS_CTRL_F12  |   ALT+F12     0     140    KS_ALT_F12
 

See Also: T-г-=
+--¦¬-=Ф¬¬ ¬ ¦-L-Кг АL=--L-гК
 

 

 Внимание! Для "серых" клавиш комбинации с клавишей <Alt> не распознаются.
------------------------------------------------------------------------------
  Клавиша    ASCII Скан  Симв.   |  Клавиша        ASCII  Скан Симв. конст.
---------------------------------+--------------------------------------------
  Ins        224   82   KS_INS   |  CTRL+Ins        224   146  KS_CTRL_INS
  Del        224   83   KS_DEL   |  CTRL+Del        224   147  KS_CTRL_DEL
  Home       224   71   KS_HOME  |  CTRL+Home       224   119  KS_CTRL_HOME
  End        224   79   KS_END   |  CTRL+End        224   117  KS_CTRL_END
  PgUp       224   73   KS_PGUP  |  CTRL+PgUp       224   132  KS_CTRL_PGUP
  PgDn       224   81   KS_PGDN  |  CTRL+PgDn       224   118  KS_CTRL_PGDN


  <.>        224   72   KS_UP    |  CTRL+<.>        224   141  KS_CTRL_UP
  <.>        224   75   KS_LEFT  |  CTRL+<.>        224   115  KS_CTRL_LEFT
  <.>        224   80   KS_DOWN  |  CTRL+<.>        224   145  KS_CTRL_DOWN
  <.>        224   77   KS_RIGHT |  CTRL+<.>        224   116  KS_CTRL_RIGHT
---------------------------------+--------------------------------------------
  <.>        46   52  KS_DOT     |  Esc             27  1   KS_ESC
  <,>        44   51  KS_COMMA   |  Enter           13  28   KS_ENTER
  BS         8    14  KS_BS      |  CTRL+Enter      10  28   KS_CTRL_ENTER
  Tab        9    15  KS_TAB     |  ALT+Enter       0   28   KS_ALT_ENTER
  SHIFT+Tab  0    15  KS_SH_TAB  |  PAD-Enter       13  224  KS_PAD_ENTER
  ALT+BS     0    14  KS_ALT_BS  |  CTRL+PAD-Enter  10  224  KS_CTRL_ENTER
  ALT+Esc    0    1   KS_ALT_ESC |  ALT+PAD-Enter   0   166  KS_ALT_PAD_ENTER
  ALT+Tab    0    165 KS_ALT_TAB |
---------------------------------+--------------------------------------------
  PAD-Ins    0   82  KS_PAD_INS  |  CTRL+PAD-Ins   0   146  KS_CTRL_PAD_INS
  PAD-Del    0   83  KS_PAD_DEL  |  CTRL+PAD-Del   0   147  KS_CTRL_PAD_DEL
  PAD-Home   0   71  KS_PAD_HOME |  CTRL+PAD-Home  0   119  KS_CTRL_PAD_HOME
  PAD-End    0   79  KS_PAD_END  |  CTRL+PAD-End   0   117  KS_CTRL_PAD_END
  PAD-PgUp   0   73  KS_PAD_PGUP |  CTRL+PAD-PgUp  0   132  KS_CTRL_PAD_PGUP
  PAD-PgDn   0   81  KS_PAD_PGDN |  CTRL+PAD-PgDn  0   118  KS_CTRL_PAD_PGDN
  PAD-<.>    0   72  KS_PAD_UP   |  CTRL+PAD-<.>   0   141  KS_CTRL_PAD_UP
  PAD-<.>    0   75  KS_PAD_LEFT |  CTRL+PAD-<.>   0   115  KS_CTRL_PAD_LEFT
  PAD-<.>    0   80  KS_PAD_DOWN |  CTRL+PAD-<.>   0   145  KS_CTRL_PAD_DOWN
  PAD-<.>    0   77  KS_PAD_RIGHT|  CTRL+PAD-<.>   0   116  KS_CTRL_PAD_RIGHT
---------------------------------+--------------------------------------------
  PAD 1     49   79  KS_PAD_1    |  ALT+PAD-Ins  0  162  KS_ALT_PAD_INS


  PAD 2     50   80  KS_PAD_2    |  ALT+PAD-Del  0  163  KS_ALT_PAD_DEL
  PAD 3     51   81  KS_PAD_3    |  ALT+PAD-Home 0  151  KS_ALT_PAD_HOME
  PAD 4     52   75  KS_PAD_4    |  ALT+PAD-End  0  159  KS_ALT_PAD_END
  PAD 5     53   76  KS_PAD_5    |  ALT+PAD-PgUp 0  153  KS_ALT_PAD_PGUP
  PAD 6     54   77  KS_PAD_6    |  ALT+PAD-PgDn 0  161  KS_ALT_PAD_PGDN
  PAD 7     55   71  KS_PAD_7    |  ALT+PAD-<.>  0  152  KS_ALT_PAD_UP
  PAD 8     56   72  KS_PAD_8    |  ALT+PAD-<.>  0  155  KS_ALT_PAD_LEFT
  PAD 9     57   73  KS_PAD_9    |  ALT+PAD-<.>  0  160  KS_ALT_PAD_DOWN
  PAD 0     48   82  KS_PAD_0    |  ALT+PAD-<.>  0  157  KS_ALT_PAD_RIGHT
------------------------------------------------------------------------------
  CTRL+PAD </>  0  149  KS_CTRL_PAD_DIV   | PAD <.>  46  83   KS_PAD_DECIMAL
  CTRL+PAD <*>  0  150  KS_CTRL_PAD_MUL   | PAD </>  47  224  KS_PAD_DIV
  CTRL+PAD <->  0  142  KS_CTRL_PAD_MINUS | PAD <*>  42  55   KS_PAD_MUL
  CTRL+PAD <+>  0  144  KS_CTRL_PAD_PLUS  | PAD <->  45  74   KS_PAD_MINUS
  ALT+PAD  </>  0  164  KS_ALT_PAD_DIV    | PAD <+>  43  78   KS_PAD_PLUS
  ALT+PAD  <*>  0  55   KS_ALT_PAD_MUL    |
  ALT+PAD  <->  0  74   KS_ALT_PAD_MINUS  |
  ALT+PAD  <+>  0  78   KS_ALT_PAD_PLUS   |
 

 

  Коды ошибок DOS
 
------------------------------------------------------------------------------
 
    Таблица кодов ошибок MS/PC-DOS
    --------------------------------------------------------------------
    Код         Значение
    --------------------------------------------------------------------
    1           Недействительный код запроса DOS функции
    2           Файл не найден
    3           Путь доступа не найден
    4           Слишком много открытых файлов (нет свободных дескрипторов)
    5           Отказ в доступе
    6           Недействительный дескриптор файла
    7           Нарушен блок управления распределением памяти


    8           Недостаточно памяти
    9           Недействительный адрес блока управления памятью
    10          Ошибочная переменная среды
    11          Неверный формат
    12          Недействительный код доступа
    13          Ошибочные данные
    14          код зарезервирован
    15          Некорректное задание дисковода
    16          Попытка удаления текущей директории
    17          Задано не то же устройство
    18          Нет больше файлов
    19          Попытка записи на защищенную дискету
    20          Неопределенное устройство
    21          Дисковод не готов
    22          Неопределенная команда
    23          Ошибка циклического контроля (CRC код)
    24          Неверная длина структурного запроса
    25          Ошибка установки (подвода головки)
    26          Неопределенный тип физического носителя
    27          Сектор не найден
    28          Конец бумаги в принтере
    29          Неустранимая ошибка при записи
    30          Неустранимая ошибка при чтении
    31          Общий сбой
    32          Ошибка при совместном доступе
    33          Нарушение блокировки
    34          Ошибочная замена диска
    35          Недоступный FCB (блок управления файлом)
    36          Переполнение буфера совместного доступа
    37-49       коды зарезервированы
    50          Сетевой запрос не поддерживается
    51          Удаленный компьютер не отвечает
    52          Повторение сетевого имени
    53          Сетевое имя не найдено
    54          Сеть занята
    55          Сетевое устройство более не доступно
    56          Превышение лимита команд NetBIOS
    57          Аппаратная ошибка сетевого адаптера
    58          Неверный сетевой ответ
    59          Неожидаемая (в данных условиях) сетевая ошибка
    60          Несовместимый удаленный адаптер
    61          Переполнение очереди печати
    62          Недостаточно памяти для файла печати
    63          Файл печати удален из-за недостаточности памяти


    64          Сетевое имя удалено
    65          Отказ в доступе
    66          Некорректный тип сетевого устройства
    67          Сетевое имя не найдено
    68          Превышение лимита сетевого имени
    69          Превышение лимита NetBIOS сессий
    70          Совместный доступ временно прекращен
    71          Сетевой запрос не принят
    72          Приостановка переадресации принтера или диска
    73-79       коды зарезервированы
    80          Файл уже существует
    81          код зарезервирован
    82          Невозможно создание элемента директории
    83          Ошибка на INT 24
    84          Слишком много назначено переадресаций
    85          Повторение переадресации
    86          Неверный пароль
    87          Ошибочный параметр
    88          Неисправность сетевого устройства
    --------------------------------------------------------------------
 

 

  Коды ошибок сети Novell
 
------------------------------------------------------------------------------
 
    В этом разделе описаны коды сообщений об ошибках, формируемые при
    использовании функций семейства NNETxxxx() совместно с сетевой
    операционной системой фирмы Novell. Функция NNETERROR() возвращает код
    ошибки, возникшей при выполнении предыдущей функции. Кодам 254 и 255
    соответствуют несколько ошибочных ситуаций, поэтому для определения
    реальной причины необходимо знание того, при выполнении какой из
    функций произошла ошибка.
 
    Сообщения об ошибках с кодами 1-18, а также 32-33 являются сообщениями
    DOS и приведены в соответствующем разделе. Остальные коды приведены в
    следующей таблице:
 
    Таблица кодов ошибок сети Novell
    --------------------------------------------------------------------
    Код         Значение
    --------------------------------------------------------------------
    128         Файл уже используется
    129         Нет доступных дескрипторов файлов


    130         Нет прав на открытие файлов
    131         Ошибка ввода/вывода на сетевом диске
    132         Нет прав на создание файлов
    133         Нет прав на создание или удаление файлов
    136         Некорректный дескриптор файла
    137         Нет прав на поиск файлов
    138         Нет прав на удаление файлов
    139         Нет прав на переименование файлов
    140         Нет прав на модификацию атрибутов файлов
    147         Нет прав на чтение файлов
    148         Нет прав на запись файлов или файл только для чтения
    150         Выход за пределы памяти сервера
    151         Нет дискового пространства для spool файла
    152         Сетевой том отсутствует
    153         Переполнение директории
    154         Попытка переименования не на одном томе
    156         Нет достаточных прав
    158         Некорректное имя файла
    161         Ошибка ввода/вывода при доступе к директории
    198         Нет привилегий оператора консоли
    208         Ошибка при доступе к очереди
    209         Нет очереди с заданным именем
    210         Нет сервера, обслуживающего очередь
    211         Нет прав доступа к очереди
    212         Переполнение очереди
    213         В очереди нет задания с указанным именем
    214         Нет прав доступа к заданию в очереди
    234         Нет соответствующего элемента
    239         Некорректное имя
    240         Универсальные символы сопоставления не допускаются
    241         Ошибка в системе разграничения прав доступа
    242         Нет прав на чтение объекта
    248         Сервер уже присоединен
    251         Некорректные параметры
    252         Неопределенный файл сервер (нет такого объекта)
    253         Ошибочный номер станции
    254         Система разграничения прав доступа блокирована
                Директория блокирована
                Пакет не доставлен
                Ошибка доступа к директории для spool файла
                Тайм-аут истек


    255         Ошибочное задание принтера
                Некорректное задание расширения имени файла
                Некорректное задание имени файла
                Аппаратная ошибка
                Недействительный номер диска
                Файлы не найдены
                Нет ответа от сервера
                Путь доступа не найден
                Переполнение очереди
                Ошибка системы разграничения прав доступа
    --------------------------------------------------------------------
 

 

  Цветной              Монохромный      Цветной                Монохромный
-------------------------------------------------------------------------------
  Черный, пробел  N    0  Черный     |  Серый         N+   8    Черный
  Синий           B    1  Подчерк    |  Ярко-синий    B+   9    Яркий подчерк
  Зеленый         G    2  Белый      |  Ярко-зеленый  G+   10   Ярко-белый
  Бирюзовый       BG   3  Белый      |  Голубой       BG+  11   Ярко-белый
  Красный         R    4  Белый      |  Ярко-красный  R+   12   Ярко-белый
  Лиловый         RB   5  Белый      |  Сиреневый     RB+  13   Ярко-белый
  Коричневый      GR   6  Белый      |  Желтый        GR+  14   Ярко-белый
  Белый           W    7  Белый      |  Ярко-белый    W+   15   Ярко-белый
---------------------------------------------------------------------------------
  Черный        U      Подчерк
  Инверсный     I      Инверсный
  Черный        X      Пробел
-------------------------------------------------------------------------------
 
   . Примечание
    Если для определения цвета используются числа и цвет фона задан больше
    семи, то символы, выводимые цветом переднего плана, будут мигать. При
    использовании символьного описания цвета и задания атрибута "+" для
    цвета фона, символы переднего плана выводятся высокой интенсивностью.
 

See Also: NTOCOLOR()
COLORTON()

 

 

  Дес  Шес  Симв     |  Дес  Шес  Симв  |  Дес  Шес  Симв  |  Дес  Шес  Симв


---------------------------------------------------------------------------------
   0   00       NUL  |   64   40    @   |   128   80   А   |  192   C0   +
   1   01   .   SOH  |   65   41    A   |   129   81   Б   |  193   C1   -
   2   02   .   STX  |   66   42    B   |   130   82   В   |  194   C2   -
   3   03   .   ETX  |   67   43    C   |   131   83   Г   |  195   C3   |
   4   04   .   EOT  |   68   44    D   |   132   84   Д   |  196   C4   -
   5   05   .   ENQ  |   69   45    E   |   133   85   Е   |  197   C5   +
   6   06   .   ACK  |   70   46    F   |   134   86   Ж   |  198   C6   -
   7   07   .   BEL  |   71   47    G   |   135   87   З   |  199   C7   -
   8   08   .   BS   |   72   48    H   |   136   88   И   |  200   C8   +
   9   09   .   HT   |   73   49    I   |   137   89   Й   |  201   C9   +
  10   0A   .   LF   |   74   4A    J   |   138   8A   К   |  202   CA   -
  11   0B   .   VT   |   75   4B    K   |   139   8B   Л   |  203   CB   -
  12   0C   .   FF   |   76   4C    L   |   140   8C   М   |  204   CC   |
  13   0D   .   CR   |   77   4D    M   |   141   8D   Н   |  205   CD   -
  14   0E   .   SO   |   78   4E    N   |   142   8E   О   |  206   CE   +
  15   0F   .   SI   |   79   4F    O   |   143   8F   П   |  207   CF   -
  16   10   .   DLE  |   80   50    P   |   144   90   Р   |  208   D0   -
  17   11   .   DC1  |   81   51    Q   |   145   91   С   |  209   D1   -
  18   12   .   DC2  |   82   52    R   |   146   92   Т   |  210   D2   -
  19   13   .   DC3  |   83   53    S   |   147   93   У   |  211   D3   +
  20   14   .   DC4  |   84   54    T   |   148   94   Ф   |  212   D4   +
  21   15   .   NAK  |   85   55    U   |   149   95   Х   |  213   D5   +
  22   16   .   SYN  |   86   56    V   |   150   96   Ц   |  214   D6   +
  23   17   .   ETB  |   87   57    W   |   151   97   Ч   |  215   D7   +
  24   18   .   CAN  |   88   58    X   |   152   98   Ш   |  216   D8   +


  25   19   .   EM   |   89   59    Y   |   153   99   Щ   |  217   D9   +
  26   1A   .   SUB  |   90   5A    Z   |   154   9A   Ъ   |  218   DA   +
  27   1B   .   ESC  |   91   5B    [   |   155   9B   Ы   |  219   DB   #
  28   1C   .   FS   |   92   5C    \   |   156   9C   Ь   |  220   DC   #
  29   1D   .   GS   |   93   5D    ]   |   157   9D   Э   |  221   DD   #
  30   1E   .   RS   |   94   5E    ^   |   158   9E   Ю   |  222   DE   #
  31   1F   .   US   |   95   5F    _   |   159   9F   Я   |  223   DF   #
  32   20            |   96   60    `   |   160   A0   а   |  224   E0   р
  33   21   !        |   97   61    a   |   161   A1   б   |  225   E1   с
  34   22   "        |   98   62    b   |   162   A2   в   |  226   E2   т
  35   23   #        |   99   63    c   |   163   A3   г   |  227   E3   у
  36   24   $        |  100   64    d   |   164   A4   д   |  228   E4   ф
  37   25   %        |  101   65    e   |   165   A5   е   |  229   E5   х
  38   26   &        |  102   66    f   |   166   A6   ж   |  230   E6   ц
  39   27   '        |  103   67    g   |   167   A7   з   |  231   E7   ч
  40   28   (        |  104   68    h   |   168   A8   и   |  232   E8   ш
  41   29   )        |  105   69    i   |   169   A9   й   |  233   E9   щ
  42   2A   *        |  106   6A    j   |   170   AA   к   |  234   EA   ъ
  43   2B   +        |  107   6B    k   |   171   AB   л   |  235   EB   ы
  44   2C   ,        |  108   6C    l   |   172   AC   м   |  236   EC   ь
  45   2D   -        |  109   6D    m   |   173   AD   н   |  237   ED   э
  46   2E   .        |  110   6E    n   |   174   AE   о   |  238   EE   ю
  47   2F   /        |  111   6F    o   |   175   AF   п   |  239   EF   я
  48   30   0        |  112   70    p   |   176   B0   #   |  240   F0   Ё
  49   31   1        |  113   71    q   |   177   B1   #   |  241   F1   ё
  50   32   2        |  114   72    r   |   178   B2   #   |  242   F2   ?


  51   33   3        |  115   73    s   |   179   B3   |   |  243   F3   ?
  52   34   4        |  116   74    t   |   180   B4   |   |  244   F4   ?
  53   35   5        |  117   75    u   |   181   B5   |   |  245   F5   ?
  54   36   6        |  118   76    v   |   182   B6   |   |  246   F6   ÷
  55   37   7        |  119   77    w   |   183   B7   +   |  247   F7   ?
  56   38   8        |  120   78    x   |   184   B8   +   |  248   F8   °
  57   39   9        |  121   79    y   |   185   B9   |   |  249   F9  
  58   3A   :        |  122   7A    z   |   186   BA   |   |  250   FA   ·
  59   3B   ;        |  123   7B    {   |   187   BB   +   |  251   FB   v
  60   3C   <        |  124   7C    |   |   188   BC   +   |  252   FC   ©
  61   3D   =        |  125   7D    }   |   189   BD   +   |  253   FD   ²
  62   3E   >        |  126   7E    ~   |   190   BE   +   |  254   FE   ¦
  63   3F   ?        |  127   7F       |   191   BF   +   |  255   FF    
 

 

    218   196   194    191                   201   205   203    187
      +----------------+                       +----------------+
  179 |     197  |     | 179               186 |     206  |     | 186
      |        \ |     |                       |        \ |     |
  195 |----------+-----|
180               204 |----------+-----|
185
      |          |     |                       |          |     |
      +----------------+                       +----------------+
    192   196   193    217                   200   205   202    188
 
 
 
 
    213   205   209    184                   214   196   210    183
      +----------------+                       +----------------+
  179 |     216  |     | 179               186 |     215  |     | 186
      |        \ |     |                       |        \ |     |
  198 -----------+-----|
181               199 -----------+-----|


182
      |          |     |                       |          |     |
      +----------------+                       +----------------+
    212   205   207    190                   211   196   208    189
 
 
 

 Введение в числовые и битовые преобразования
------------------------------------------------------------------------------
 BITTOC()      Преобразует по шаблону комбинацию битов в символьную строку
 CELSIUS()     Преобразует температуру по Фаренгейту в значение по Цельсию
 CLEARBIT()    Устанавливает в значение 0 заданные биты числа
 CTOBIT()      Преобразует по шаблону символьную строку в комбинацию битов
 CTOF()        Преобразует 8-байтовую строку в число в стандартном формате
 CTON()        Преобразует строку цифр заданной системы счисления в число
 EXPONENT()    Возвращает характеристику числа с плавающей точкой
 FAHRENHEIT()  Преобразует температуру по Цельсию в значение по Фаренгейту
 FTOC()        Преобразует число в стандартном формате в 8-байтовую строку
 INFINITY()    Возвращает максимально возможное число
 INTNEG()      Преобразует целое число без знака в целое число со знаком
 INTPOS()      Преобразует целое число со знаком в целое число без знака
 ISBIT()       Возвращает логическое значение, соответствующее заданному биту
 LTON()        Преобразует логическое значение в числовое
 MANTISSA()    Возвращает мантиссу числа с плавающей точкой
 NTOC()        Преобразует число в строку цифр заданной системы счисления
 NUMAND()      Выполняет операцию AND над списком 16-битовых слов
 NUMCOUNT()    Устанавливает или наращивает значение внутреннего счетчика
 NUMHIGH()     Возвращает значение старшего байта 16-битового слова
 NUMLOW()      Возвращает значение младшего байта 16-битового слова
 NUMMIRR()     Зеркально отображает 8-битовые или 16-битовые значения
 NUMNOT()      Инвертирует 16-битовое число (выполняет операцию NOT)
 NUMOR()       Выполняет операцию OR над списком 16-битовых слов
 NUMROL()      Выполняет циклический сдвиг 16-битового слова


 NUMXOR()      Выполняет операцию XOR над списком 16-битовых слов
 RAND()        Генерирует последовательность псевдослучайных чисел
 RANDOM()      Генерирует псевдослучайные числа
 SETBIT()      Устанавливает в значение 1 заданные биты числа
 

 

  Введение
 
------------------------------------------------------------------------------
 
  Числовые и битовые преобразования
 
    Данная глава посвящена числовым и битовым преобразованиям.
    В частности, в ней рассматриваются преобразования из одной системы
    счисления в другую и генерация псевдослучайных чисел.
 
    Битовые преобразования включают в себя двоичные операции AND, OR, XOR,
    NOT, а также проверки и установки значений отдельных битов. Функции
    NUMLOW() и NUMHIGH() важны для работы с другими CT II-функциями,
    объединяющими два 8-битовых значения и возвращающими результат как
    16-битовое число. Примером этого является функция GETCURSOR(),
    описанная в главе "CT II-драйверы".
 
    Параметры многих функций данной главы обозначаются как
    <nValue|cHexValue>. Параметры в этом случае могут быть результатом
    вычисления выражения либо числового типа со значением в диапазоне от
    0 до 65535 (или 4 294 967 295), либо символьного типа, содержащего
    строку шестнадцатеричных цифр в диапазоне от "0000" до "FFFF" (или
    "FFFFFFFF").
 

 

 BITTOC()
 Преобразует по шаблону комбинацию битов в символьную строку.
------------------------------------------------------------------------------
 
  Синтаксис
 
    BITTOC(<nInteger>, <cBitPattern>, [<lMode>]) --> cCharString
 
  Параметры
 
    <nInteger> - числовой параметр, задающий битовую конфигурацию,
    преобразуемую в строку символов со значением в диапазоне от 0 до
    65535.
 
    <cBitPattern> - символьная строка, задающая шаблон преобразования.
 


    <lMode> - необязательный логический параметр, задающий при значении
    .T. подстановку пробелов, а при значении .F. или по умолчанию пропуск
    нулевых битов преобразуемой комбинации.
 
  Возвращаемое значение
 
    cCharString - символьная строка.
 
  Описание
 
    Функция сопоставляет комбинацию битов целого числа, заданного
    параметром <nInteger>, со строкой символов шаблона, выбирая из нее
    символы, которым по позиции соответствуют биты со значением 1.
 
    Биты со значением 0 либо пропускаются (при значении .F. параметра
    <lMode>), либо для них подставляются пробелы (при значении .T.
    параметра <lMode>). Таким образом функцию удобно использовать при
    работе с битово-кодированной информацией, например, атрибутами файлов.
 
  Примечания
 
  . При значении .T. параметра <lMode> длина результирующей строки
    совпадает с длиной <cBitPattern>, а иначе равна количеству битов в
    преобразуемой комбинации, имеющих значение 1.
 
  Примеры
 
  . Преобразование атрибутов файлов (2 это "00000010" в двоичной
    системе счисления):
 
    ? BITTOC(2, "ADVSHR")               // "H"
 
  . Десятичное 5 это двоичное "00000101"
 
    ? BITTOC(5, "ADVSHR")               // "SR"
 
  . Подстановка пробелов для битов со значением 0:
 
    ? BITTOC(5, "ADVSHR", .T.)  // "     S R"
 

See Also: CTOBIT()
CTON()

 

 

 CELSIUS()
 Преобразует температуру по Фаренгейту в значение по шкале Цельсия.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CELSIUS(<nFahrenheit>) --> nCelsius
 
  Параметры
 
    <nFahrenheit> - числовое значение температуры по шкале Фаренгейта.
 
  Возвращаемое значение
 
    nCelsius - числовое значение температуры по шкале Цельсия.


 
  Описание
 
    Функция преобразует значение температуры по шкале Фаренгейта в
    значение по шкале Цельсия.
 
  Примеры
 
  . Преобразование в значение по шкале Цельсия:
 
    CELSIUS(33.8)               // Результат: 1
    CELSIUS(338.0)              // Результат: 170
    CELSIUS(3380.0)             // Результат: 1860
    CELSIUS(-33.8)              // Результат: -36.555555...
 

See Also: FAHRENHEIT()

 

 

 CLEARBIT()
 Устанавливает в значение 0 заданные биты числа.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CLEARBIT(<nLONG|cHexLONG>, <nBitPos1>
        [,..., <nBitPos32>]) --> nNewValue
 
  Параметры
 
    <nLONG|cHexLONG> - параметр, задающий преобразуемое 32-битовое
    числовое значение в виде десятичного числа или символьной строки
    шестнадцатеричных цифр.
 
    <nBitPos1>...<nBitPos32> - необязательные (кроме первого) числовые
    параметры, задающие позиции битов, устанавливаемых в значение 0.
 
  Возвращаемое значение
 
    nNewValue - число с установленными в значение 0 битами, или (-1) при
    ошибочных параметрах.
 
  Описание
 
    Функция устанавливает в значение 0 заданные биты числа длиной до 32
    битов, например, содержимого регистра состояния последовательного
    порта. В отличие от NUMAND() задаются номера битов, поэтому нет
    необходимости в предварительном преобразовании. Младший бит имеет
    номер 1, а старший 32.
 
  Примеры
 
  . Установка в значение 0 битов 3, 4 и 6:
 
    nBitPattern := 255
    nBitPattern := CLEARBIT(nBitPattern, 3, 4, 6)       // Результат: 211
 

See Also: ISBIT()
NUMAND()
NUMNOT()
NUMOR()
NUMXOR()
SETBIT()

 

 

 CTOBIT()
 Преобразует по шаблону символьную строку в комбинацию битов.
------------------------------------------------------------------------------


 
  Синтаксис
 
    CTOBIT(<cCharString>, <cBitPattern>) --> nWORD
 
  Параметры
 
    <cCharString> - исходная последовательность символов, наличие которых
    в шаблоне приводит к установке в значение 1 битов на соответствующих
    позициях возвращаемого значения.
 
    <cBitPattern> - последовательность символов, задающая шаблон.
 
  Возвращаемое значение
 
    nWORD - целое положительное число в диапазоне от 0 до 65535,
    содержащее комбинацию из 8 или 16 битов.
 
  Описание
 
    Функция строит комбинацию битов по шаблону и последовательности
    символов, что при совместном использовании с родственной функцией
    BITTOC() позволяет организовать обработку битов атрибутов файлов.
 
    Возвращаемое функцией значение представляет собой комбинацию битов,
    позиционно соответствующих символам шаблона.
 
    В значение 1 устанавливаются биты для тех символов шаблона, для
    которых в исходной строке имеются совпадающие с ними символы. Для
    остальных символов шаблона биты устанавливаются в значение 0.
 
  Примечания
 
  . Символы, отсутствующие в шаблоне, задаваемом параметром
    <cBitPattern>, игнорируются.
 
  . Строка битов дополняется слева до длины 8 или 16 битами со
    значением 0.
 
  Примеры
 
  . Установка в значение 1 второго бита при наличии "Н" в
    предпоследней позиции шаблона "ADVSHR":
 
    ? CTOBIT("H", "ADVSHR")                     // Результат: 00000010
 
  . Установка в значение 1 битов в позициях, соответствующих
    первому и последнему символам шаблона:
 
    ? CTOBIT("RA", "ADVSHR")                    // Результат: 00100001
 
  . Символы, отсутствующие в шаблоне игнорируются:
 
    ? CTOBIT("XRYA", "ADVSHR")                  // Результат: 00100001
 

See Also: BITTOC()


NTOC()

 

 

 CTOF()
 Преобразует 8-байтовую строку в число в стандартном Clipper-формате.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CTOF(<cFloatPoint>) --> nFloatPoint
 
  Параметры
 
    <cFloatPoint> - символьная строка, содержащая 8 байтов в формате
    значения, возвращаемого функцией FTOC().
 
  Возвращаемое значение
 
    nFloatPoint - число, соответствующее заданному значению.
 
  Описание
 
    Функция преобразует значения, возвращаемые FTOC() и XTOC() к формату,
    используемому для чисел. Это в особенности относится к XTOC(), т.к.
    позволяет преобразованные ею числа вернуть к стандартному
    Clipper-формату с плавающей точкой.
 
  Примеры
 
  . Преобразование и восстановление числа:
 
    ? CTOF(FTOC(1234.55))       // Результат: 1234.55
 
  . То же самое для XTOC():
 
    ? CTOF(XTOC(1234.55))       // Результат: 1234.55
 

See Also: FTOC()
XTOC()

 

 

 CTON()
 Преобразует строку цифр заданной системы счисления в число.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CTON(<cNumString>, [<nBase>], [<lMode>]) --> nInteger
 
  Параметры
 
    <cNumString> - преобразуемая символьная строка.
 
    <nBase> - необязательный числовой параметр, задающий в диапазоне
    от 2 до 36 основание системы счисления преобразуемой строки цифр.
    По умолчанию 10 (десятичная система счисления).
 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. возможность получения положительных и отрицательных, а при
    значении .F. или по умолчанию только положительных величин.
 
  Возвращаемое значение
 
    nInteger - целое положительное число в диапазоне от 0 до 65535, а при
    значении .T. параметра <lMode> в диапазоне от -32768 до +32767.


 
  Описание
 
    Функция производит преобразование строк цифр заданной системы
    счисления в значение числового типа.
 
  Примечания
 
  . В строке цифр, задаваемой параметром <cNumString>, автоматически
    отсекаются начальные и конечные пробелы.
 
  . В случае задания ошибочных параметров или комбинации несовместимых
    параметров возвращается значение 0.
 
  Примеры
 
  . Преобразование строки цифр по основанию 10:
 
    ? CTON("60000")                             // Результат: 60000
 
  . Преобразование строк цифр по основанию 2:
 
    ? CTON("11", 2)                             // Результат: 3
    ? CTON("1110101001100000", 2)               // Результат: 60000
 
  . Преобразование строк цифр по основанию 16:
 
    ? CTON("A", 16)                             // Результат: 10
    ? CTON("ABCD", 16)                          // Результат: 43981
    ? CTON("FFFF", 16, .T.)                     // Результат: -1
 
  . Преобразование строки цифр по основанию 36:
 
    ? CTON("XXP", 36)                           // Результат: 43981
 

See Also: NTOC()

 

 

 EXPONENT()
 Возвращает характеристику числа с плавающей точкой.
------------------------------------------------------------------------------
 
  Синтаксис
 
    EXPONENT(<nFloatPoint>) --> nExponent
 
  Параметры
 
    <nFloatPoint> - обрабатываемое числовое значение.
 
  Возвращаемое значение
 
    nExponent - целое число со знаком, соответствующее характеристике
    значения, заданного параметром <nFloatPoint>.
 
  Описание
 
    Функция возвращает характеристику числа, заданного параметром
    <nFloatPoint>. В Clipper числа хранятся в формате с плавающей точкой,
    т.е. в виде характеристики (показателя степени числа 2) и мантиссы.


    В языке Си этот формат называется "double" (двойная точность).
 
  Примечания
 
  . Для числовых значений справедливо следующее равенство:
 
        2^EXPONENT(nValue) * MANTISSA(nValue) = nValue
 
  . Для числа 0 функция возвращает 0, однако 2^0 = 1. В связи с этим
    мантисса числа 0 равна 0.
 
  Примеры
 
  . Характеристики некоторых чисел:
 
    ? EXPONENT(0)                       // Результат: 0
    ? EXPONENT(INFINITY())              // Результат: 1023
    ? EXPONENT(100)                     // Результат: 6
 
  . Знак числа не влияет на характеристику:
 
    ? EXPONENT(-100)                    // Результат: 6
    ? EXPONENT(-1.01)                   // Результат: 0
    ? EXPONENT(-2.01)                   // Результат: 1
 
  . Для чисел в диапазоне от -1 до +1 характеристика имеет
    отрицательную величину:
 
    ? EXPONENT(0.01)                    // Результат: -7
    ? EXPONENT(-0.01)                   // Результат: -7
 

See Also: MANTISSA()

 

 

 FAHRENHEIT()
 Преобразует температуру по Цельсию в значение по шкале Фаренгейта.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FAHRENHEIT(<nCelsius>) --> nFahrenheit
 
  Параметры
 
    <nCelsius> - числовое значение температуры по шкале Цельсия.
 
  Возвращаемое значение
 
    nFahrenheit - числовое значение температуры по шкале Фаренгейта.
 
  Описание
 
    Функция преобразует значение температуры по шкале Цельсия в значение
    по шкале Фаренгейта.
 
  Примеры
 
  . Преобразование в значение по шкале Фаренгейта:
 
    FAHRENHEIT(12.5)                    // Результат: 54.5
    FAHRENHEIT(125.0)                   // Результат: 257
    FAHRENHEIT(1250.0)                  // Результат: 2282
    FAHRENHEIT(-155.0)                  // Результат: -247
 



See Also: CELSIUS()

 

 

 FTOC()
 Преобразует число в стандартном Clipper-формате в 8-байтовую строку.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FTOC(<nFloatPoint>) --> cFloatPoint
 
  Параметры
 
    <nFloatPoint> - любое число в Clipper-формате.
 
  Возвращаемое значение
 
    cFloatPoint - символьная строка длиной 8 байтов.
 
  Описание
 
    При внутреннем представление чисел в Clipper используется 64-битовый
    формат с плавающей точкой. Функция возвращает эти 64 бита как строку
    из 8 байтов, что позволяет хранить числа в закодированном виде и более
    компактно.
 
  Примечания
 
  . Функция XTOC() преобразует числа с плавающей точкой тем же самым
    методом.
 
  Примеры
 
  . Вывод возвращаемого значения на экран не имеет смысла:
 
    NumberString := FTOC(274711.355)    // Строка из 8 байтов
 

See Also: CTOF()
XTOC()

 

 

 INFINITY()
 Возвращает максимально возможное число.
------------------------------------------------------------------------------
 
  Синтаксис
 
    INFINITY() --> nLargestNumber
 
  Возвращаемое значение
 
    nLargestNumber - максимально возможное число.
 
  Описание
 
    Функция возвращает максимально допустимое числовое значение,
    используемое в Clipper. Например, оно может быть использовано для
    сравнения с результатом операции деления на 0.
 
  Примечания
 
  . Возвращаемое значение имеет мантиссу, равную 2.0, и
    характеристику, равную 1023:
 
    2^EXPONENT(INFINITY()) * MANTISSA(INFINITY()) = 2^1023 * 2.0
 
  Примеры
 
  . Из-за превышения максимально допустимого количества выводимых
    цифр попытка вывода максимального числа приведет к распечатке строки
    символов "*":
 
    ? INFINITY()                        // "************************"


 

See Also: EXPONENT()
MANTISSA()

 

 

 INTNEG()
  Преобразует целое число без знака в целое число со знаком.
------------------------------------------------------------------------------
 
  Синтаксис
 
    INTNEG(<nUnsigned|cHexUnsigned>, [<l32Bit>]) --> nSigned
 
  Параметры
 
    <nUnsigned|cHexUnsigned> - преобразуемое число без знака, заданное в
    виде десятичного числа или символьной строки шестнадцатеричных цифр.
 
    <l32Bit> - необязательный логический параметр, задающий при значении
    .T. интерпретацию преобразуемого целого числа без знака как
    32-битового, а при значении .F. или по умолчанию как 16-битового
    числа.
 
  Возвращаемое значение
 
    nSigned - целое число со знаком.
 
  Описание
 
    Функция преобразует числа в формате "целое без знака" в формат
    "целое со знаком".
 
    Использование параметра <l32Bit> позволяет преобразовывать кроме
    16-битовых, также и 32-битовые целые числа. В 16-битовом варианте для
    значений параметра <nUnsigned|cHexUnsigned>, меньших или равных +32767
    (7FFFh), результаты имеют положительные и совпадающие с исходными
    значения.
 
    Для значений в диапазоне от +32768 (8000h) до +65535 (FFFFh)
    результаты отрицательны. В 32-битовом варианте положительные
    результаты возвращаются для величин, меньших или равных 2147483647,
    а для превышающих - отрицательные.
 
  Примечания
 
  . При ошибочных параметрах возвращается 0.
 
  Примеры
 
  . Некоторые примеры преобразований:
 
    ? INTNEG(0)                         // Результат: 0
    ? INTNEG(-1)                        // Результат: 0
    ? INTNEG(30000)                     // Результат: 30000
    ? INTNEG(32767)                     // Результат: 32767
    ? INTNEG(32768)                     // Результат: -32768
    ? INTNEG(32769)                     // Результат: -32767


    ? INTNEG(60000)                     // Результат: -5536
    ? INTNEG(65535)                     // Результат: -1
    ? INTNEG("FFFF")                    // Результат: -1
    ? INTNEG("D0000000", .T.)           // Результат: -805306368
    ? INTNEG("FFFFFFFF", .T.)           // Результат: -1
 
  . Ошибочные или слишком большие параметры:
 
    ? INTNEG("GGGG")                    // Результат: 0
    ? INTNEG(90000)                     // Результат: 0
    ? INTNEG("FFFFFFFF")                // Результат: 0
 

See Also: INTPOS()
NUMAND()
NUMOR()
NUMXOR()

 

 

 INTPOS()
  Преобразует целое число со знаком в целое число без знака.
------------------------------------------------------------------------------
 
  Синтаксис
 
    INTPOS(<nSigned|cHexSigned>, [<l32Bit>]) --> nUnsigned
 
  Параметры
 
    <nSigned|cHexSigned> - преобразуемое целое число со знаком, заданное
    в виде десятичного числа или символьной строки шестнадцатеричных цифр.
 
    <l32Bit> - необязательный логический параметр, задающий при значении
    .T. интерпретацию преобразуемого целого числа со знаком как
    32-битового, а при значении .F. или по умолчанию как 16-битового
    числа.
 
  Возвращаемое значение
 
    nUnsigned - целое число без знака.
 
  Описание
 
    Функция преобразует целые числа в формате "целое со знаком" в
    формат "целое без знака".
 
    Использование параметра <l32Bit> позволяет преобразовывать кроме
    16-ти также и 32-битовые целые числа.
 
    В 16-битовом варианте для положительных значений параметра
    <nSigned|cHexSigned>, меньших или равных +32767 (7FFFh), результаты
    совпадают с исходным значением, а для значений в диапазоне -1 до
    -32768 отличаются. В 32-битовом варианте диапазон допустимых значений
    простирается от -2147483648 до +2147483647.


 
  Примечания
 
  . При ошибочных параметрах возвращается 0.
 
  Примеры
 
  . Простые преобразования:
 
    ? INTPOS(-1)                        // 65535
    ? INTPOS(-2)                        // 65534
    ? INTPOS(30000)                     // 30000
    ? INTPOS(60000)                     // 60000
 
  . Внимание! INTPOS(0) = INTPOS(65536)
 
    ? INTPOS(0)                         // 0
    ? INTPOS(65536)                     // 0
 
  . Преобразование 16-битовых значений превышающих 65536. Разница
    между 90000 и 65536 составляет 24464:
 
    ? INTPOS(90000)                     // 24464
 
  . Преобразования для 32-битовых чисел:
 
    ? INTPOS(90000, .T.)                // 90000 (16-битовое число)
    ? INTPOS(-1, .T.)                   // 4294967295 (32-битовое число)
    ? INTPOS(-60000, .T.)               // 4294907296 (32-битовое число)
    ? INTPOS(-90000, .T.)               // 4294877296 (32-битовое число)
 

See Also: INTNEG()
NUMAND()
NUMOR()
NUMXOR()

 

 

 ISBIT()
  Возвращает логическое значение, соответствующее заданному биту числа.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ISBIT(<nLONG|cHexLONG>, [<nBitPos>]) --> lSet
 
  Параметры
 
    <nLONG|cHexLONG> - проверяемая битовая комбинация, заданная в виде
    десятичного числа или символьной строки шестнадцатеричных цифр.
 
    <nBitPos> - необязательный числовой параметр, задающий номер
    проверяемого бита в диапазоне от 1 до 32. По умолчанию 1 (младший
    бит).
 
  Возвращаемое значение
 
    lSet - логическое значение .T., если проверяемый бит установлен в
    значение 1, а иначе .F..
 
  Описание
 
    Функция позволяет проверить состояние заданного бита числа без
    предварительного формирования его маски для последующего сравнения.
 


  Примеры
 
  . Проверка сигнала BREAK в регистре состояния линии (LSR)
    последовательного порта 1:
 
    IF ISBIT(COM_LSR(1), 5)
        ? "Обнаружен сигнал BREAK!"
    ENDIF
 

See Also: NUMAND()
NUMNOT()
NUMOR()
NUMXOR()
SETBIT()

 

 

 LTON()
 Преобразует логическое значение в числовое.
------------------------------------------------------------------------------
 
  Синтаксис
 
    LTON([<lValue>]) --> nLogicalValue
 
  Параметры
 
    <lValue> - необязательный логический параметр, задающий преобразуемое
    значение. По умолчанию используется .F..
 
  Возвращаемое значение
 
    nLogicalValue - значение 1 при значении .T. параметра <lValue>, или
    значение 0 при значении .F. параметра <lValue>.
 
  Описание
 
    Функция преобразует логическое значение в числовое, что например,
    позволяет использовать ее при индексировании значения полей баз данных
    логического типа.
 
  Примеры
 
  . Определение числа дней в текущем году:
 
    ? "В году " + STR(365 + LTON(ISLEAP()), 3) + " дней"
 

See Also: CTON()

 

 

 MANTISSA()
 Возвращает мантиссу числа с плавающей точкой.
------------------------------------------------------------------------------
 
  Синтаксис
 
    MANTISSA(<nFloatPoint>) --> nMantissa
 
  Параметры
 
    <nFloatPoint> - обрабатываемое числовое значение.
 
  Возвращаемое значение
 
    nMantissa - число со знаком, соответствующее мантиссе величины,
    заданной  параметром <nFloatPoint>, абсолютное значение которого либо
    0, либо находится в диапазоне от 1.0 до 2.0 включительно.
 
  Описание
 
    Функция возвращает мантиссу числа, заданного параметром <nFloatPoint>.
    В Clipper числа хранятся в формате с плавающей точкой, т.е. в виде
    характеристики (показателя степени числа 2) и мантиссы.


В языке Си
    этот формат называется "double" (двойная точность).
 
  Примечания
 
  . Для числовых значений справедливо следующее равенство:
 
        2^EXPONENT(nValue) * MANTISSA(nValue) = nValue
 
  . Формат отображения значений, возвращаемых функцией, зависит от
    количества десятичных знаков, устанавливаемого Clipper-командой
    SET DECIMALS TO.
 
  Примеры
 
  . Мантиссы некоторых чисел:
 
    ? MANTISSA(0)               // Результат: 0.00
    ? MANTISSA(100)             // Результат: 1.56
    ? MANTISSA(INFINITY)        // Результат: 2.00
    ? MANTISSA(0.01)            // Результат: 1.28
    ? MANTISSA(-100)            // Результат: -1.56
    ? MANTISSA(-0.01)           // Результат: -1.28
    ? MANTISSA(-1.01)           // Результат: -1.01
    ? MANTISSA(-2.01)           // Результат: -1.01 (SET DECIMALS TO 2)
 

See Also: EXPONENT()

 

 

 NTOC()
 Преобразует число в строку цифр заданной системы счисления.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NTOC(<nLONG|cHexLONG>, [<nBase>],
        [<nLength>], [<cPad>]) --> cCharString
 
  Параметры
 
    <nLONG|cHexLONG> - преобразуемое число, заданное в виде десятичного
    числа или символьной строки шестнадцатеричных цифр.
 
    <nBase> - необязательный числовой параметр, задающий в диапазоне от 2
    до 36 основание системы счисления результирующей строки. По умолчанию
    10 (десятичная система счисления).
 
    <nLength> - необязательный числовой параметр, задающий длину
    результирующей строки. Максимальное значение 255. По умолчанию длина,
    необходимая для преобразования.
 
    <cPad> - необязательный символьный параметр, задающий символ,
    заполняющий (при необходимости) левую часть результирующей строки.
    По умолчанию пробел.
 
  Возвращаемое значение


 
    cCharString - символьная строка.
 
  Описание
 
    Функция преобразовывает десятичные или шестнадцатеричные числа в
    символьные строки цифр заданной системы счисления. Параметр <nLength>
    позволяет задать длину результирующей строки, а символ, задаваемый
    параметром <cPad> используется для заполнения строки слева, если для
    помещения результата требуется длина, меньшая чем <nLength>.
 
  Примечания
 
  . При задании комбинации несовместимых параметров возвращается
    строка, содержащая один или несколько символов "*".
 
  Примеры
 
  . Преобразование к десятичной системе счисления:
 
    ? NTOC(60000)               // "60000"
    ? NTOC(60000, 10, 7)        // "  60000"
 
  . Преобразование к двоичной системе счисления:
 
    ? NTOC(60000, 2)            // "1110101001100000"
    ? NTOC("FFFF", 2)           // "1111111111111111"
    ? NTOC("30", 2, 8, "0")     // "00110000"
 
  . Преобразование к шестнадцатеричной системе счисления:
 
    ? NTOC(43981, 16)           // "ABCD"
 
  . Преобразование к системе счисления с основанием 36:
 
    ? NTOC(43981, 36, 4)        // "XXP"
 
  . Задание неправильных параметров (переполнение):
 
    ? NTOC("GGGG", 2)           // "*"
    ? NTOC(60000, 10, 3)        // "***"
    ? NTOC(60000, 1, 4)         // "****"
 

See Also: CTON()

 

 

 NUMAND()
 Выполняет операцию AND над списком 16-битовых слов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NUMAND(<nWORD1|cHexWORD1>, <nWORD2|cHexWORD2>
        [,...,<nWORDn|cHexWORDn>]) --> nWORD
 
  Параметры
 
    <nWORD1|cHexWORD1>, <nWORD2|cHexWORD2>, ...<nWORDn|cHexWORDn> -


    необязательные ( кроме первых двух) параметры, заданные в виде
    десятичного числа или символьной строки шестнадцатеричных цифр.
 
  Возвращаемое значение
 
    nWord - результат операции в числовом формате, или (-1) при ошибочных
    параметрах.
 
  Описание
 
    Функция позволяет проверить одновременное наличие в числе нескольких
    битов со значением 1. Задание нескольких операндов, объединяемых
    операцией AND, позволяет устанавливать в значение 0 биты, не
    представляющие интереса.
 
  Примеры
 
  . Тестирование регистра последовательного интерфейса:
 
    --------------------------------------------------------------------
    Содержимое регистра:        00011101
    Битовая маска:              00000111
    Результат (5):              00000101
    --------------------------------------------------------------------
 
    nStatus := COM_MSR()
    IF NUMAND (nStatus, 7) = 5
        ? "Установлены биты 1 и 3"
    ENDIF
 

See Also: ISBIT()
NUMNOT()
NUMOR()
NUMXOR()
SETBIT()

 

 

 NUMCOUNT()
 Устанавливает или наращивает значение внутреннего счетчика.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NUMCOUNT([<nIncrement|nStartValue>,
        [<lMode>]]) --> nNewCounterValue
 
  Параметры
 
    <nIncrement|nStartValue> - необязательный целый числовой параметр
    (положительный или отрицательный), задающий приращение или начальное
    значение внутреннего для CT II счетчика. По умолчанию значение
    счетчика не изменяется.
 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. установку новой величины счетчика, а при значении .F. или по
    умолчанию изменение его значения на величину, заданную параметром
    <nIncrement|nStartValue>.
 
  Возвращаемое значение
 
    nNewCounterValue - положительное число, соответствующее новому


    значению внутреннего счетчика.
 
  Описание
 
    Функция изменяет значение внутреннего счетчика, а затем возвращает
    новую величину вызывающей программе. Изменение значения счетчика
    производится по следующим правилам:
 
  . При задании положительного приращения счетчик наращивается, а при
    отрицательном - уменьшается.
 
  . При задании в качестве приращения не целого числа, дробная часть
    отбрасывается без округления.
 
  . При попытке уменьшить значение счетчика до величины меньшей чем 0,
    возвращается значение 0.
 
    Использование данной функции позволяет упростить программирование
    процессов с подсчетом каких-либо событий, что позволяет избежать
    необходимости организации видимых во всех функциях программного
    комплекса STATIC или PUBLIC переменных.
 
  Примеры
 
  . Вывод без нумерации, но с подсчетом строк:
 
    NUMCOUNT(0, .T.)                    // Установка в 0 начального
                                        // значения счетчика
    LIST OFF NUMCOUNT(1), CUST FOR REBATE
 

 

 NUMHIGH()
 Возвращает значение старшего байта 16-битового слова.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NUMHIGH(<nWORD|cHexWORD>) --> nByte
 
  Параметры
 
    <nWORD|cHexWORD> - обрабатываемое слово, заданное в виде десятичного
    числа или символьной строки шестнадцатеричных цифр.
 
  Возвращаемое значение
 
    nByte - числовое значение старшего байта слова, или (-1) при ошибочном
    параметре.
 
  Описание
 
    Функция разделяет 16-битовое слово на два байта и возвращает старший
    из них в качестве результата, что часто используется с такими
    функциями, как GETCURSOR() или SCANKEY(), позволяя для последней
    разделить возвращаемое значение на байты скан- и ASCII-кодов клавиш.
 
  Примеры
 
  . Разделение значения возвращаемого GETCURSOR():


 
    ? "Начальная пиксельная строка курсора: ", NUMHIGH(GETCURSOR())
 

See Also: NUMLOW()

 

 

 NUMLOW()
 Возвращает значение младшего байта 16-битового слова.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NUMLOW(<nWORD|cHexWORD>) --> nByte
 
  Параметры
 
    <nWORD|cHexWORD> - обрабатываемое слово, заданное в виде десятичного
    числа или символьной строки шестнадцатеричных цифр.
 
  Возвращаемое значение
 
    nByte - числовое значение младшего байта слова, или (-1) при ошибочном
    параметре.
 
  Описание
 
    Функция разделяет 16-битовое слово на два байта и возвращает младший
    из них в качестве результата, что часто используется с такими
    функциями, как GETCURSOR() или SCANKEY(), позволяя для последней
    разделить возвращаемое значение на байты скан- и ASCII-кодов клавиш.
 
  Примеры
 
  . Разделение значения возвращаемого GETCURSOR():
 
    ? "Конечная пиксельная строка курсора: ", NUMLOW(GETCURSOR())
 

See Also: NUMHIGH()

 

 

 NUMMIRR()
 Зеркально отображает 8-битовые или 16-битовые значения.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NUMMIRR(<nNumber|cHexNumber>, [<l8bit>]) --> nResult
 
  Параметры
 
    <nNumber|cHexNumber> - преобразуемое числовое значение в диапазоне от
    0 до 65535, заданное в виде десятичного числа или символьной строки
    шестнадцатеричных цифр.
 
    <l8bit> - необязательный логический параметр, задающий при значении
    .T. зеркальное отображение младших 8 битов 16-битового слова, а при
    значении .F. или по умолчанию всех 16 битов.
 
  Возвращаемое значение
 
    nResult - числовое значение с зеркально отображенными битами, или (-1)
    при ошибочных параметрах.


 
  Описание
 
    Функция может быть использована в редакторах шрифтов для зеркального
    отображения битовых шаблонов символов.
 
    Зеркально отображаются биты для значений в диапазоне от 0 до 65535.
    При зеркальном отображении 16-битовых чисел бит 1 меняется с битом 16,
    бит 2 - с битом 15 и т.д. Независимо от способа задания параметра
    <nNumber|cHexNumber> (напр., "0ABE"), результат всегда является
    числовым.
 
  Примеры
 
  . Задание числа:
 
    nVar := 128 + 64 + 8 + 2                    // 0000000 11001010
 
  . Зеркальное отображение 16-битового слова:
 
    ? NTOC(NUMMIRR(nVar), 2, 16, "0")           // 01010011 00000000
 
  . Зеркальное отображение 8 битов 16-битового слова:
 
    ? NTOC(NUMMIRR(nVar, .T.), 2, 16, "0")      // 00000000 01010011
 

See Also: NUMAND()
NUMHIGH()
NUMLOW()
NUMNOT()
NUMOR()
NUMXOR()

 

 

 NUMNOT()
 Инвертирует 16-битовое число (выполняет над битами операцию NOT).
------------------------------------------------------------------------------
 
  Синтаксис
 
    NUMNOT(<nWORD|cHexWORD>) --> nWORD
 
  Параметры
 
    <nWORD|cHexWORD> - обрабатываемое числовое значение в диапазоне от 0
    до 65535, заданное в виде десятичного числа или символьной строки
    шестнадцатеричных цифр.
 
  Возвращаемое значение
 
    nWORD - числовое значение, каждый бит которого инвертирован
    относительно соответствующего бита обрабатываемого числа, или (-1)
    при ошибочном параметре.
 
  Описание
 
    Функция позволяет легко преобразовывать битовые конфигурации,
    например, атрибутов файлов или кодов ошибок.
 
  Примечания
 
  . Функция возвращает дополнение обрабатываемого числа.
 
  Примеры
 
  . Вычисление дополнения числа:
 
    ? NUMNOT(5)         // Результат: 65530
 

See Also: ISBIT()


NUMAND()
NUMOR()
NUMXOR()
SETBIT()

 

 

 NUMOR()
  Выполняет операцию OR над списком 16-битовых слов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NUMOR(<nWORD1|cHexWORD1>, <nWORD2|cHexWORD2>
        [,...,<nWORDn|cHexWORDn>]) --> nWORD
 
  Параметры
 
    <nWord1|cHexWORD1>, <nWORD2|cHexWORD2>, ...<nWORDn|cHexWORDn> -
    необязательные (кроме первых двух) параметры, заданные в виде
    десятичного числа или символьной строки шестнадцатеричных цифр.
 
  Возвращаемое значение
 
    nWORD - результат операции в числовом формате, или (-1) при ошибочных
    параметрах.
 
  Описание
 
    Функция позволяет установить в значение 1 заданные биты, не изменяя
    остальных, например, биты атрибутов файлов.
 
  Примеры
 
  . Установка только бита 5 регистра управления модемом (MCR)
    последовательного порта 1:
 
    --------------------------------------------------------------------
    Исходное состояние регистра:        00000011
    Битовая маска:                      00010000
    Результат (19):                     00010011
    --------------------------------------------------------------------
 
    COM_MCR(1, NUMOR(COM_MCR(1), 16))
 

See Also: ISBIT()
NUMAND()
NUMNOT()
NUMXOR()
SETBIT()

 

 

 NUMROL()
 Выполняет циклический сдвиг 16-битового слова.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NUMROL(<nWORD1|cHexWORD1>, <nWORD2|cHexWORD2>,
        [<lLowByte>]) --> nWORD
 
  Параметры
 
    <nWORD1|cHexWORD1> - сдвигаемое значение в диапазоне от 0 до 65535,
    задаваемое в виде десятичного числа или символьной строки
    шестнадцатеричных цифр.
 
    <nWORD2|cHexWORD2> - количество производимых сдвигов влево, задаваемое


    в виде десятичного числа или символьной строки шестнадцатеричных цифр.
 
    <lLowByte> - необязательный логический параметр, задающий при значении
    .T. сдвиг младшего байта (диапазон количества сдвигов от 1 до 7), а
    при значении .F. или по умолчанию сдвиг всех 16 битов слова (диапазон
    количества сдвигов от 1 до 15).
 
  Возвращаемое значение
 
    nWORD - числовое значение слова с циклически сдвинутыми битами.
 
  Описание
 
    Функция позволяет осуществить циклический сдвиг влево битов
    16-битового слова с числовым значением в диапазоне от 0 до 65535.
 
    При сдвиге бит, выходящий за разрядную сетку слева, переносится в
    самый правый разряд. Параметр <lLowByte> позволяет задать сдвиг только
    младшего байта слова.
 
  Примечания
 
  . Количество сдвигов вычисляется как остаток от деления значения,
    заданного параметром <nWORD2|cHexWORD2>, на число 16 при значении .F.,
    или на число 8 при значении .T. параметра <lLowByte> (длина слова и
    байта соответственно).
 
  . Для выполнения циклического сдвига вправо на 1 бит следует
    выполнить циклический сдвиг (влево) на 15 для слова или на 7 для
    байта, а для сдвига вправо на 2 бита - на 14 и 6 соответственно, и
    т.д.
 
  Примеры
 
  . Циклический сдвиг значения 1 влево на 3 бита и отображение его в
    двоичной форме:
 
    * 00000000 00000001 -> 00000000 00001000
 
    ? NTOC(1, 2, 16, "0"), NTOC(NUMROL(1, 3), 2, 16, "0")
 
  . Сдвиг 8-ми младших битов значения 60000:
 
    * 11101010 01100000 -> 11101010 10000001
 
    NUMROL(60000, 2, .T.)
 
  . Циклический сдвиг вправо на 2 бита:
 
    * 00000000 00000100 -> 00000000 00000001
 
    ? NUMROL(4, 14)
 
  . Задание количества сдвигов, превышающего 15, эквивалентно заданию
    остатка от деления на 16 (33 % 16 = 1):
 


    ? NUMROL(1, 33)             // Результат: 2
 

See Also: NTOC()

 

 

 NUMXOR()
  Выполняет операцию XOR над списком 16-битовых слов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NUMXOR(<nWORD1|cHexWORD1>, <nWORD2|cHexWORD2>
        [,...,<nWORDn|<cHexWORDn>]) --> nWORD
 
  Параметры
 
    <nWord1|cHexWORD1>, <nWORD2|cHexWORD2>, ...<nWORDn|cHexWORDn> -
    необязательные (кроме первых двух) параметры, заданные в виде
    десятичного числа или символьной строки шестнадцатеричных цифр.
 
  Возвращаемое значение
 
    nWORD - результат операции в числовом формате, или (-1) при ошибочных
    параметрах.
 
  Описание
 
    Функция позволяет выполнить операцию "сложение по модулю два" (XOR
    или "исключающее ИЛИ"). В результате этой операции значение бита,
    равное 1, получается при объединении битов со значениями 0 и 1, а
    значение 0 при объединении 0 с 0 и 1 с 1.
 
    Особенностью операции XOR является то, что при ее выполнении над
    результатом и одним из операндов восстанавливается исходное значение
    другого операнда. Это позволяет использовать ее при кодировании
    небольших числовых значений.
 
  Примеры
 
  . Объединение двух чисел операцией XOR:
 
    --------------------------------------------------------------------
    Первый операнд:     00000011
    Второй операнд:     00000101
    Результат (6):      00000110
    --------------------------------------------------------------------
 
    ? NUMXOR(3, 5)              // Результат: 6
 
  . Кодирование и декодирование чисел:
 
    ? NUMXOR(NUMXOR(nNumber, 9), 9)
 

See Also: ISBIT()
NUMAND()
NUMNOT()
NUMOR()
SETBIT()

 

 

 RAND()
 Генерирует последовательность псевдослучайных чисел.
------------------------------------------------------------------------------


 
  Синтаксис
 
    RAND([<nStartValue>]) --> nRandomValue
 
  Параметры
 
    <nStartValue> - необязательный числовой параметр, задающий начальное
    значение для генератора случайных чисел. По умолчанию при не первом
    вызове возвращается очередное псевдослучайное число, а при первом
    вызове производится установка генератора начальным значением 100001.
 
  Возвращаемое значение
 
    nRandomValue - случайное число в диапазоне от 0.0 до 1.0.
 
  Описание
 
    Функция генерирует псевдослучайные числа с равномерным законом
    распределения, используя при генерации порождающий алгоритм, что в
    отличие от функции RANDOM(), позволяет получать повторение
    последовательности при использовании того же начального значения.
 
    При первом вызове, если параметр <nStartValue> опущен, в качестве
    стартового значения используется величина 10001. Генерация последующих
    псевдослучайных чисел подвержена влиянию параметра <nStartValue>, при
    нулевом или отрицательном значении которого начальное значение
    формируется с учетом текущего времени, что делает функцию аналогичной
    RANDOM().
 
    Для рестарта следует вызвать функцию со значением 100001 параметра
    <nStartValue>, тогда при последующих вызовах с опущенным параметром
    будет повторяться "стандартная" последовательность случайных чисел.
 
  Примеры
 
  . Вызов после старта программы:
 
    ? STR(RAND(), 18, 15)               // 0.831051100158447
    ? STR(RAND(), 18, 15)               // 0.557946857971956
 
  . Включение временного фактора. Даже при не изменившемся показании
    внутренних часов результаты будут различны:
 
    ? STR(RAND(0), 18, 15)              // Возвращаемые значения
    ? STR(RAND(0), 18, 15)              // зависят от текущего времени
 
  . Использование стартового значения больше 0:
 
    ? STR(RAND(23), 18, 15)             // 0.121169930053736


    ? STR(RAND(23), 18, 15)             // 0.121169930053736
 
  . Рестарт генератора для повторения последовательности:
 
    ? STR(RAND(100001), 18, 15)         // 0.831051100158447
    ? STR(RAND(), 18, 15)               // 0.557946857971956
 

See Also: RANDOM()

 

 

 RANDOM()
 Генерирует псевдослучайные числа.
------------------------------------------------------------------------------
 
  Синтаксис
 
    RANDOM([<lMode>]) --> nRandomWORD
 
  Параметры
 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. генерацию как положительных, так и отрицательных, а при значении
    .F. или по умолчанию только положительных величин.
 
  Возвращаемое значение
 
    nRandomWORD - целое число в диапазоне от 0 до 65535 при значении .F.
    параметра <lMode>, или в диапазоне от -32768 до 32767 при значении .T.
    параметра <lMode>.
 
  Описание
 
    Функция генерирует псевдослучайные числа с равномерным законом
    распределения и начальным значением, связанным с текущим временем.
    Это позволяет использовать ее для формирования случайных данных в
    демонстрационных или других прикладных программах.
 
  Примеры
 
  . Получение случайного числа в диапазоне от 0 до 65535:
 
    ? RANDOM()
 
  . Получение случайного числа в диапазоне от 0 до 1:
 
    ? RANDOM()/65535
 
  . Получение случайного числа в диапазоне от 1 от 16:
 
    ? RANDOM()%16 + 1
 
  . Получение случайного числа в диапазоне от -32768 до +32767:
 
    ? RANDOM(.T.)
 

See Also: RAND()

 

 

 SETBIT()
 Устанавливает в значение 1 заданные биты числа.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETBIT(<nLONG|cHexLONG>, <nBitPos1>
        [,..., <nBitPos32>]) --> nNewValue
 
  Параметры


 
    <nLONG|cHexLONG> - параметр, задающий преобразуемое 32-битовое
    числовое значение в виде десятичного числа или символьной строки
    шестнадцатеричных цифр.
 
    <nBitPos1>...<nBitPos32> - необязательные (кроме первого) числовые
    параметры, задающие позиции битов, устанавливаемых в значение 1.
 
  Возвращаемое значение
 
    nNewValue - число с установленными в значение 1 битами, или (-1) при
    ошибочных параметрах.
 
  Описание
 
    Функция устанавливает в значение 1 заданные биты числа длиной до 32
    битов, например, содержимого регистра состояния последовательного
    порта. В отличие от NUMOR() задаются номера битов, поэтому нет
    необходимости в предварительном преобразовании. Младший бит имеет
    номер 1, а старший 32.
 
  Примеры
 
  . Установка заданных битов в значение 1:
 
    nBitfield := 0
    nBitfield := SETBIT(nBitfield, 1, 2, 5)     // Результат: 19
 

See Also: ISBIT()
NUMAND()
NUMNOT()
NUMOR()
NUMXOR()

 

 

 Введение в видеофункции
------------------------------------------------------------------------------
 CHARPIX()     Возвращает количество пиксельных строк на символ
 CHARWIN()     Заменяет отдельные символы в заданной области экрана
 CLEAREOL()    Очищает часть строки от заданной позиции до конца
 CLEARSLOW()   Очищает с задержкой область экрана от границ к центру
 CLEARWIN()    Очищает область экрана или активного окна
 CLEOL()       Очищает часть строки без учета стандартных символа и атрибута
 CLWIN()       Очищает область экрана без учета стандартных символа и атрибута
 COLORREPL()   Замещает все или заданные цветовые атрибуты
 COLORTON()    Преобразует цветовые атрибуты в числовой формат
 COLORWIN()    Замещает заданный или все цветовые атрибуты в области экрана
 EGAPALETTE()  Изменяет палитру цвета для EGA-адаптеров
 ENHANCED()    Переключает вывод со стандартного цвета на выделенный
 FILESCREEN()  Выводит на экран изображение, считанное из файла


 FONTLOAD()    Загружает EGA/VGA шрифт из файла
 FONTRESET()   Отменяет все изменения шрифтов и палитр
 FONTROTATE()  Вращает пиксельные шаблоны в шрифтовой строке
 FONTSELECT()  Назначает шрифтовые области для цветов
 GETCLEARA()   Возвращает значение стандартного цветового атрибута
 GETCLEARB()   Возвращает значение стандартного символа очистки экрана
 GETFONT()     Возвращает шрифт в виде символьной строки
 GETSCRSTR()   Возвращает информацию видеовывода, направленного в память
 GETVGAPAL()   Возвращает характеристики палитры цвета VGA-адаптера
 INVERTATTR()  Меняет местами коды основного и фонового цветовых атрибутов
 INVERTWIN()   Инвертирует все цветовые атрибуты задаваемой области экрана
 ISCGA()       Возвращает признак наличия CGA-адаптера
 ISEGA()       Возвращает признак наличия EGA-адаптера
 ISHERCULES()  Возвращает признак наличия HERCULES-адаптера
 ISMCGA()      Возвращает признак наличия MCGA-адаптера
 ISMONO()      Возвращает признак наличия монохромного адаптера
 ISPGA()       Возвращает признак наличия PGA-адаптера
 ISVGA()       Возвращает признак наличия VGA-адаптера
 MAXFONT()     Возвращает число доступных шрифтовых областей видеоадаптера
 MONISWITCH()  Переключает вывод между монохромным и цветным адаптерами
 NTOCOLOR()    Преобразует числовое значение в символьный код цвета
 NUMCOL()      Возвращает число доступных столбцов экрана
 RESTCURSOR()  Восстанавливает сохраненную позицию и форму курсора
 SAVECURSOR()  Возвращает информацию о позиции и форме курсора
 SAYDOWN()     Выводит строку по вертикали сверху вниз
 SAYMOVEIN()   Выводит строку с эффектом "выдвижения"
 SAYSCREEN()   Выводит строку на экран без изменения цветового атрибута
 SAYSPREAD()   Выводит строку с эффектом "расползания"
 SCREENATTR()  Возвращает цветовой атрибут задаваемой позиции экрана
 SCREENFILE()  Записывает отображаемую на экране информацию в файл
 SCREENMARK()  Изменяет цветовой атрибут найденной экранной строки
 SCREENMIX()   Выводит на экран объединение строк символов и атрибутов


 SCREENSIZE()  Возвращает доступный размер экрана в виде числа символов
 SCREENSTR()   Возвращает считанную с экрана символьную строку с атрибутами
 SETCLEARA()   Устанавливает значение стандартного цветового атрибута
 SETCLEARB()   Устанавливает значение стандартного символа очистки экрана
 SETFONT()     Загружает EGA/VGA шрифт из символьной переменной
 SETRC()       Задает номера строки и столбца позиции курсора
 SETSCRSTR()   Переключает режим вывода видеоинформации во внутреннюю память
 STANDARD()    Устанавливает для вывода стандартное значение цвета
 STRSCREEN()   Выводит на экран строку символов с цветовыми атрибутами
 UNSELECTED()  Устанавливает для вывода цвет невыбираемых элементов
 UNTEXTWIN()   Замещает в области экрана все символы, кроме указанных
 VGAPALETTE()  Изменяет цвета палитры VGA-адаптера
 VIDEOINIT()   Повторно инициализирует видеосистему
 VIDEOSETUP()  Возвращает код видеорежима, установленного при загрузке
 VIDEOTYPE()   Возвращает битовую комбинацию доступных видеорежимов
 

 

  Введение
 
------------------------------------------------------------------------------
 
    В данной главе рассматриваются функции, прямо или косвенно связанные с
    экранным изображением. Сюда включены функции, относящиеся к различным
    видеоадаптерам (CGA, EGA, Hercules и др.) и поддерживающие разные
    видеорежимы, например: CGA с 40 столбцами, EGA с 43 строками или VGA с
    50 строками.
 
  DSETWINDOW()
 
    Действие многих функций, описываемых в этой главе, зависит от
    состояния переключателя, устанавливаемого вызовом функции
    DSETWINDOW(). Этот переключатель определяет, должен ли вывод на экран,
    формируемый внешними программами, в том числе и DOS и CT II-функциями,
    перенаправляться в окно. В исходном состоянии переключатель включен,
    что эквивалентно результату вызова DSETWINDOW(.T.) и означает
    перенаправление вывода в окно. В таком режиме результаты работы
    некоторых функций, например, ISANSI() или NUMCOL() неопределены.


 
  Атрибуты
 
    В этой главе упоминаются цветовые атрибуты, используемые в качестве
    параметров. Они могут задаваться в виде:
 
  . числового значения, соответствующего комбинированному цветовому
    атрибуту (напр., 7);
 
  . символьной строки в формате "nn/nn", в которой указываются два
    числовых значения (напр., "7/0");
 
  . символьной строки в формате "cc/cc", применяемом в Clipper
    (напр., "W/N").  Многие функции возвращают атрибуты в форме
    комбинированного числового значения, объединяющего атрибуты основного
    и фонового цветов.
 
    Комбинированная форма цветовых атрибутов образуется следующим образом:
 
    Номер бита  8 7 6 5 4 3 2 1         R - Красный
    Атрибут     * R G B + R G B         G - Зеленый
    Цвет        Фоновый Основной        B - Синий
 
    Каждый цветовой атрибут содержит четыре бита, образующих значение в
    диапазоне от 0 до 15. Таким образом, может быть образовано 256 (16 x
    16) различных значений в диапазоне от 0 до 255. Эти числовые значения
    с помощью функции NTOCOLOR() можно перевести в форматы "nn/nn" или
    "cc/cc", применяемые в Clipper. Однако возможно и непосредственное
    изменение комбинированного значения атрибута. В приведенных ниже
    примерах используется материал предыдущих глав, описывающих
    манипуляции с числами и битами.
 
    NUMOR(nAttr, 128)   // Включение мерцания
    NUMAND(nAttr, 127)  // Выключение мерцания
    NUMXOR(nAttr, 128)  // Переключение мерцания
    NUMOR(nAttr, 8)     // Включение повышенной интенсивности
    NUMAND(nAttr, 7)    // Выключение повышенной интенсивности
    NUMXOR(nAttr, 8)    // Переключение повышенной интенсивности
 
  CLEARA и CLEARB
 
    Некоторые CT II-функции используют стандартный цветовой атрибут и
    стандартный символ-заполнитель для строк и областей экрана. Атрибут
    именуется CLEARA, а символ - CLEARB.


Их значения могут быть как
    получены так и изменены соответствующими функциями. Исходным значением
    для CLEARA, используемым до вызова соответствующей функции, является
    "W/N", а исходным значением CLEARB является CHR(255). Применение этого
    кода обеспечивает заполнение указанным символом с заданным цветовым
    атрибутом областей экрана при любом видеоадаптере.
 
    Для получения и изменения значений CLEARA и CLEARB служат следующие
    функции:
 
    GETCLEARA() SETCLEARA() GETCLEARB() SETCLEARB()
 
    Использование функции SETCLEARx() с заданием значения (<Атрибут> или
    <Символ>) позволяет изменить текущее значение CLEARA или CLEARB
    соответственно.
 
  Функции и команды Clipper, связанные с очисткой данных
 
    При использовании CT II-драйвера CT2US50.OBJ для всех функций и команд
    Clipper, которые так или иначе связаны с очисткой на экране (см.
    CLEARB), вместо пробела используется CHR(255). Для многих экранных
    адаптеров это предпочтительнее, поскольку, в отличие от пробела, этому
    символу можно назначить цвет.
 
    Все функции и команды, к которым это относится, используют символ
    удаления данных, устанавливаемый функцией SETCLEARB(), с исходным
    значением CHR(255). Для очистки данных на экране средствами Clipper
    или CT II с помощью пробела следует вызвать функцию SETCLEARB(32).
 
    Установка пробела как символа очистки осуществляется следующим
    образом:
 
    SETCLEARB(32)
    CLEAR               // Clipper-команда, на которую влияет установка
                        // символа очистки
 
  Видеорежимы
 
    Иногда в отношении видеорежимов возникают запутанные ситуации.  Только
    тот факт, что в компьютере установлен адаптер VGA, еще не означает,
    что можно работать в режиме EGA. Или например, отличие между EGA и VGA
    заметно лишь в графическом режиме.
 
  EGA43/VGA50/VGA28 и т.д.
 


    Говоря об этих режимах нас интересует не только возможности
    технических средств, но в большей степени возможности CT II-функций
    относительно генерируемых шрифтов и других установок. Для этих целей
    функция GETSCRMODE() дополнена возможностью возвращать значения,
    превышающие 255, включающие информацию, относящуюся как к возможностям
    технических средств, так и к генерируемым CT II параметрам.
 
    Режим отображения в 40 столбцов может быть совмещен с изменением числа
    строк, например:
 
    CGA40()
    EGA43()             // 43 строки и 40 столбцов
 
  Видеофункции и окна
 
    Функции, изменяющие базовые адреса видеопамяти, нельзя использовать
    при открытых окнах. Это относится ко всем изменениям режимов, а также
    к функциям SETPAGE() и SETSCRSTR().
 

 

 CHARPIX()
 Возвращает количество пиксельных строк на символ.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CHARPIX() --> nPixelLine
 
  Возвращаемое значение
 
    nPixelLine - количество пиксельных строк.
 
  Описание
 
    Различные видеоадаптеры строят изображение символов, используя разное
    количество пиксельных строк. Кроме того, количество пиксельных строк
    зависит от текущего режима конкретного видеоадаптера.
 
    Функция возвращает количество строк, используемых в текущем
    видеорежиме, что полезно в сочетании с функцией SETCURSOR().
 
  Примеры
 
  . Определение количества пиксельных строк:
 
    ? CHARPIX()                 // Например, 16 (VGA, без изменения режима)
 

See Also: FONTLOAD()
SETCURSOR()
SETFONT()

 

 

 CHARWIN()
 Заменяет отдельные символы в заданной области экрана.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CHARWIN([<nTopLine>, <nLeftColumn>, <nBottomLine>,
        <nRightColumn>, [<cNewChar|nNewChar>],


        [<cOldChar|nOldChar>]]) --> cNull
 
  Параметры
 
    <nTopLine> - номер строки верхнего левого угла области экрана.
 
    <nLeftColumn> - номер столбца верхнего левого угла области экрана.
 
    <nBottomLine> - номер строки нижнего правого угла области экрана.
 
    <nRightColumn> - номер столбца нижнего правого угла области экрана.
 
    <cNewChar|nNewChar> - необязательный параметр, задающий новый символ
    для области экрана в формате символьной строки или в виде числового
    значения ASCII-кода в диапазоне от 0 до 255. По умолчанию значение
    CLEARB.
 
    <cOldChar|nOldChar> - необязательный параметр, задающий заменяемый
    символ в формате символьной строки или в виде числового значения
    ASCII-кода в диапазоне от 0 до 255. По умолчанию осуществляется замена
    всех символов.
 
    () - при опущенных параметрах функция заменяет все символы на всей
    площади экрана на символ CLEARB.
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция позволяет заменить в пределах области экрана один или все
    символы. Если параметр <cNewChar|nNewChar> опущен, то замена
    осуществляется на символ, задаваемый функцией SETCLEARB() (исходное
    значение CHR(255)). Указание границ области осуществляется по номерам
    строк и столбцов верхнего левого и нижнего правого углов.  Если эти
    параметры отсутствуют, то замене подлежит весь экран.
 
  Примеры
 
  . Замена всех символов на CLEARB:
 
    SETCLEARB("X")                      // Все символы на экране
                                        // заменяются на "X"
    CHARWIN()
 
  . Замена всех символов "A" на "B":
 
    CHARWIN(10, 10, 20, 70, "B", "A")   // "" - пустая строка
 
  . Символы могут быть также заданы в числовой форме:


 
    CHARWIN(10, 10, 20, 70, 66, 65)     // "A" = CHAR(65), "B" = CHAR(66)
 

See Also: COLORWIN()
SETCLEARB()

 

 

 CLEAREOL()
  Очищает часть строки от заданной позиции до конца.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CLEAREOL([<nRow>], [<nColumn>], [<cAttr|nAttr>],
        [<cChar|nChar>]) --> cNull
 
  Параметры
 
    <nRow> - необязательный числовой параметр, задающий номер очищаемой
    строки. По умолчанию строка текущей позиции курсора.
 
    <nColumn> - необязательный числовой параметр, задающий номер столбца,
    с которого начинается очистка. По умолчанию столбец текущей позиции
    курсора.
 
    <cAttr|nAttr> - необязательный параметр, задающий используемый для
    очистки цветовой атрибут в принятом в Clipper символьном формате или в
    виде комбинированного числового значения в диапазоне от 0 до 255. По
    умолчанию значение CLEARA.
 
    <cChar|nChar> - необязательный параметр, задающий используемый для
    очистки символ в формате символьной строки или в виде числового
    значения ASCII-кода в диапазоне от 0 до 255. По умолчанию значение
    CLEARB.
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция очищает строку с заданной позиции и до конца. Если параметры
    опущены, то начальная позиция определяется текущим положением курсора.
    Очистка производится с использованием атрибута CLEARA и символа CLEARB
    или атрибута <cAttr|nAttr> и символа <cChar|nChar> (если они заданы
    явно) и до конца строки.
 
    Данная функция имеет следующие преимущества перед Clipper-командой
    @ <Строка>, <Столбец>:
 
  1 Возвращаемое значение типа символьной строки позволяет совмещать
    ее использование с выводом. Например, LIST ...


CLEAREOL().
 
  2 Позиция курсора не изменяется.
 
  3 Параметры могут быть опущены. В этом случае функция осуществляет
    очистку строки с использованием атрибута CLEARA и символа CLEARB,
    начиная с текущей позиции курсора.
 
  Примечания
 
  . Атрибут <cAttr|nAttr> и символ <cChar|nChar> можно указать
    несколькими способами, описанными во Введении к данной главе.
 
  . Изменение стандартных значений цветового атрибута и символа
    осуществляется с использованием функций SETCLEARA() и SETCLEARB().
 
  . Если параметры строки или столбца опущены, то функция
    ориентируется на соответствующее значение текущей позиции курсора.
 
  Примеры
 
  . Очистка строки символом CLEARB с атрибутом CLEARA от позиции
    курсора до ее конца:
 
    CLEAREOL()
 
  . То же, для строки 23 от текущей позиции курсора:
 
    CLEAREOL(23)
 
  . То же, но начало очистки со столбца 55:
 
    CLEAREOL(23, 55)
 
  . Атрибуты можно указать несколькими способами. В трех следующих
    примерах используется символ очистки, задаваемый с помощью
    SETCLEARB():
 
    CLEAREOL(23, 55, 4)         // "красный на черном"
    CLEAREOL(23, 55, "4/7")     // "красный на белом"
    CLEAREOL(23, 55, "B/W")     // "синий на белом"
 
  . Очистка с заданными атрибутом и символом:
 
    CLEAREOL(23, 55, "3/1", ":")
    CLEAREOL(23, 55, "B/W", "+")
 

See Also: CLEOL()
SETCLEARA()
SETCLEARB()

 

 

 CLEARSLOW()
 Очищает с задержкой область экрана от внешних границ к центру.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CLEARSLOW(<nDelay>, [<nTopLine>], [<nLeftColumn>],
        [<nBottomLine>], [<nRightColumn>], [<cChar|nChar>]) --> cNull
 
  Параметры


 
    <nDelay> - время задержки в миллисекундах для каждого шага процедуры
    очистки. Может иметь значение от 0 до 65535.
 
    <nTopLine> - необязательный числовой параметр, задающий номер строки
    верхнего левого угла очищаемой области. По умолчанию первая строка
    экрана.
 
    <nLeftColumn> - необязательный числовой параметр, задающий номер
    столбца верхнего левого угла очищаемой области. По умолчанию первый
    столбец экрана.
 
    <nBottomLine> - необязательный числовой параметр, задающий номер
    строки нижнего правого угла очищаемой области. По умолчанию последняя
    строка экрана.
 
    <nRightColumn> - необязательный числовой параметр, задающий номер
    столбца нижнего правого угла очищаемой области. По умолчанию последний
    столбец экрана.
 
    <cChar|nChar> - необязательный параметр, задающий символ в формате
    символьной строки или в виде числового значения ASCII-кода в диапазоне
    от 0 до 255, которым замещаются данные в процессе очистки.
    По умолчанию значение CLEARB.
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция позволяет пошагово очищать область экрана в направлении от
    внешних границ области к центру, с задержкой между шагами. При
    пропуске какого-либо из параметров, задающих координаты области,
    используются соответствующие значения для границ экрана.
 
    Если опущен параметр <cChar|nChar>, задающий символ для очистки, то
    используется стандартный символ CLEARB. В своем исходном значении
    (CHR(255)), изменить которое можно вызовом функции SETCLEARB(), он в
    отличие от пробела (CHR(32)) принимает цветовой атрибут при любом
    экранном адаптере.
 
  Примечания
 
  . Если координаты области экрана не указаны, очищается весь экран.
 
  Примеры
 
  . Очистка всего экрана символом CLEARB с задержкой в 50 мс:


 
    CLEARSLOW(50)               // Всегда возвращает пустую строку ("")
 
  . Очистка области экрана пробелом с задержкой в 10 мс:
 
    CLEARSLOW(10, 4, 4, 20, 76, 32)     // Замещающий символ с
                                        // кодом 32 (пробел)
 

See Also: SETCLEARB()

 

 

 CLEARWIN()
  Очищает область экрана или активного окна.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CLEARWIN([nTopLine>], [<nLeftCol>], [<nBottomLine>],
        [<nRightCol>], [<cAttr|nAttr>], [<cChar|nChar>]) -->  cNull
 
  Параметры
 
    <nTopLine> - необязательный числовой параметр, задающий номер строки
    верхнего левого угла очищаемой области. По умолчанию строка текущей
    позиции курсора.
 
    <nLeftCol> - необязательный числовой параметр, задающий номер столбца
    верхнего левого угла очищаемой области. По умолчанию столбец текущей
    позиции курсора.
 
    <nBottomLine> - необязательный числовой параметр, задающий номер
    строки нижнего правого угла очищаемой области. По умолчанию последняя
    строка экрана или окна.
 
    <nRightCol> - необязательный числовой параметр, задающий номер столбца
    нижнего правого угла очищаемой области. По умолчанию последний столбец
    экрана или окна.
 
    <cAttr|nAttr> - необязательный параметр, задающий используемый для
    очистки цветовой атрибут в принятом в Clipper символьном формате или в
    виде комбинированного числового значения в диапазоне от 0 до 255. По
    умолчанию значение CLEARA.
 
    <cChar|nChar> - необязательный параметр, задающий используемый для
    очистки символ в формате символьной строки или в виде числового
    значения ASCII-кода в диапазоне от 0 до 255. По умолчанию значение
    CLEARB.
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.


 
  Описание
 
    Функция очищает задаваемую область экрана. Эта область ограничивается
    значениями параметров от <nTopLine> до <nBottomLine> и от <nLeftCol>
    до <nRightCol>. Если эти параметры опущены, строка и столбец
    соответствуют текущей позиции курсора для параметров <nTopLine> и
    <nLeftCol> и последней строке и правому столбцу для параметров
    <nBottomLine> и <nRightCol>.
 
    Для очистки используются указанные при вызове символ <cChar|nChar> и
    атрибут <cAttr|nAttr> или, если они опущены, то стандартные символ и
    атрибут (CLEARB и CLEARA).
 
  Примечания
 
  . Атрибут <cAttr|nAttr> и символ <cChar|nChar> могут быть заданы
    несколькими способами, описанными во Введении к данной главе.
 
  . Стандартные атрибут и символ можно задать, используя функции
    SETCLEARA() и SETCLEARB().
 
  . Если для строки и столбца параметры опущены, то функция
    автоматически ориентируется на текущую позицию курсора.
 
  Примеры
 
  . Очистка экрана символом CLEARB с атрибутом CLEARA от позиции
    курсора до его конца:
 
    CLEARWIN()
 
  . То же самое, но со строки 23 и столбца текущей позиции курсора:
 
    CLEARWIN(23)
 
  . Очистка окна с координатами: строка 23, столбец 15 и строка 24,
    столбец 70:
 
    CLEARWIN(23, 15, 24, 70)
 
  . Атрибуты могут быть указаны несколькими способами. В трех
    следующих примерах для очистки используется символ CLEARB:
 
    CLEARWIN(23, 15, 24, 70, 4)                 // "красный на черном"
    CLEARWIN(23, 15, 24, 70, "4/7")             // "красный на белом"
    CLEARWIN(23, 15, 24, 70, "B/W")             // "синий на белом"
 
  . Очистка с указываемыми атрибутом и символом:
 
    CLEARWIN(23, 15, 24, 70, "B/W", "+")        // "синий на белом"


 

See Also: CLWIN()
SETCLEARA()
SETCLEARB()

 

 

 CLEOL()
  Очищает часть строки без учета стандартных символа и атрибута.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CLEOL([<nRow>], [<nColumn>]) --> cNull
 
  Параметры
 
    <nRow> - необязательный числовой параметр, задающий номер очищаемой
    строки. По умолчанию строка текущей позиции курсора.
 
    <nColumn> - необязательный числовой параметр, задающий номер столбца,
    с которого начинается очистка. По умолчанию столбец текущей позиции
    курсора.
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция используется для заполнения области экрана черным цветом без
    учета значений стандартных атрибута и символа. Эту функцию, в
    частности, удобно использовать при монохромном видеоадаптере.
 
    Заметное преимущество в скорости работы CLEOL() по сравнению с
    CLEAREOL() объясняется тем, что не используются параметры
    <cAttr|nAttr> и <cChar|nChar> или соответствующие им стандартные
    значения CLEARA и CLEARB.
 
    По отношению к Clipper-команде @ <Строка>, <Столбец>, очищающей
    строку, CLEOL() имеет следующие преимущества:
 
  1 Возвращаемое значение типа символьной строки позволяет объединить
    ее вызов с выводом строки, например, LIST ... CLEOL().
 
  2 Позиция курсора не изменяется.
 
  3 Параметры не обязательны. Если они опущены, то очистка
    производится, начиная с позиции курсора.
 
  Примеры
 
  . Очистка от текущей позиции курсора до конца строки:
 
    CLEOL()
 
  . Очистка строки 23 от столбца позиции курсора и до конца:
 
    CLEOL(23)
 
  . Очистка строки 23 от столбца 15 и до конца:
 
    CLEOL(23, 15)
 

See Also: CLEAREOL()
CLEARWIN()
CLWIN()

 



 

 CLWIN()
  Очищает область экрана без учета стандартных символа и атрибута.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CLWIN([<nTopLine>], [<nLeftCol>], [<nBottomLine>],
        [<nRightColumn>]) --> cNull
 
  Параметры
 
    <nTopLine> - необязательный числовой параметр, задающий номер строки
    верхнего левого угла очищаемой области. По умолчанию строка текущей
    позиции курсора.
 
    <nLeftCol> - необязательный числовой параметр, задающий номер столбца
    верхнего левого угла очищаемой области. По умолчанию столбец текущей
    позиции курсора.
 
    <nBottomLine> - необязательный числовой параметр, задающий номер
    строки нижнего правого угла очищаемой области. По умолчанию последняя
    строка экрана или окна.
 
    <nRightColumn> - необязательный числовой параметр, задающий номер
    столбца нижнего правого угла очищаемой области. По умолчанию последний
    столбец экрана или окна.
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция используется для заполнения области экрана черным цветом без
    учета значений стандартных атрибута и символа. Эту функцию, в
    частности, полезно использовать при монохромном видеоадаптере.
 
    Заметное преимущество в скорости работы CLWIN() по сравнению с
    CLEARWIN() объясняется тем, что не используются параметры
    <cAttr|nAttr> и <cChar|nChar> или соответствующие им стандартные
    значения CLEARA и CLEARB.
 
    По отношению к Clipper-команде @ <Строка>, <Столбец>, CLWIN() имеет
    следующие преимущества:
 
  1 Возвращаемое значение типа символьной строки позволяет объединить
    ее вызов с выводом строки, например, LIST ... CLWIN() .
 
  2 Позиция курсора не изменяется.
 
  3 Параметры не обязательны. Если они опущены, то очистка


    производится, начиная с позиции курсора.
 
  Примеры
 
  . Очистка от текущей позиции курсора до конца экрана:
 
    CLWIN()
 
  . То же, со строки 23 и столбца позиции курсора:
 
    CLWIN(23)
 
  . Очистка со строки 23, столбца 15 до конца строки 24:
 
    CLWIN(23, 15, 24)
 
  . Очистка окна с координатами: строка 23, столбец 15 и строка 24,
    столбец 70:
 
    CLWIN(23, 15, 24, 70)
 

See Also: CLEAREOL()
CLEARWIN()
CLEOL()

 

 

 COLORREPL()
 Замещает все или заданные цветовые атрибуты.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COLORREPL([<cNewAttr|nNewAttr>], [<cOldAttr|nOldAttr>]) --> cNull
 
  Параметры
 
    <cNewAttr|nNewAttr> - необязательный параметр, задающий замещающий
    цветовой атрибут в принятом в Clipper символьном формате или в виде
    комбинированного числового значения в диапазоне от 0 до 255. По
    умолчанию значение CLEARA.
 
    <cOldAttr|nOldAttr> - необязательный параметр, задающий замещаемый
    цветовой атрибут в принятом в Clipper символьном формате или в виде
    комбинированного числового значения в диапазоне от 0 до 255. По
    умолчанию все существующие атрибуты.
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция значительно упрощает работу с изображением, позволяя во всех
    случаях употребления атрибута <cOldAttr|nOldAttr> заменить его на
    атрибут <cNewAttr|nNewAttr>.
 
    Можно например, заменить цвета всех вводимых полей после выполнения
    Clipper-команды READ, если они имеют общий атрибут. Такая операция
    позволяет отметить неактивные поля.
 
  Примечания
 
  . Если параметр <cOldAttr|nOldAttr> опущен, то все без исключения
    атрибуты экрана заменяются на атрибут <cNewAttr|nNewAttr>.


Если
    атрибут <cNewAttr|nNewAttr> также опущен, то замена осуществляется на
    CLEARA.
 
  Примеры
 
  . Замещение атрибута 7 ("белый на черном") на 0 ("черный на черном"
    - невидимый):
 
    COLORREPL(0, 7)
 
  . Замещение всех атрибутов на атрибут 116 ("красный на белом"):
 
    COLORREPL(116)
 
  . Замещение атрибута "7/0" ("белый на черном") на 116 ("красный на
    белом"):
 
    COLORREPL(116, "7/0")
 
  . Замещение всех атрибутов на значение CLEARA:
 
    COLORREPL()
 
  . Преобразование изображения с "белый на черном" на "черный на
    белом". Параметры можно указывать разными способами:
 
    COLORREPL("0/7", "7/0")
    COLORREPL(112, 7)
 
  . Допустимо и совмещение форматов:
 
    COLORREPL("0/7", 7)
 

See Also: COLORWIN()

 

 

 COLORTON()
 Преобразует цветовые атрибуты из "nn/nn" или "cc/cc" формата в числовой.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COLORTON(<cAttr>) --> nAttr
 
  Параметры
 
    <cAttr> - преобразуемый атрибут в формате "nn/nn" или "cc/cc".
 
  Возвращаемое значение
 
    nAttr - числовое значение атрибута в комбинированной форме.
 
  Описание
 
    Функция преобразует алфавитно-цифровой цветовой атрибут в формате
    "nn/nn" или "cc/cc" в комбинированный числовой формат.
 
    Комбинированный формат атрибута можно использовать с CT II-функциями
    STRSCREEN(), SCREENMIX() и SCREENATTR(), а также с Clipper-командами
    SAVE/RESTORE SCREEN.
 
  Примечания
 
  . В случае некорректного задания цветового атрибута функция
    возвращает число 0, имеющее значение "черный на черном" (невидимый).


 
  Примеры
 
  . "Обычный" экран ("белый на черном"), для всех форматов числовое
    значение 7:
 
    ? COLORTON("07")                            // Результат: 7
    ? COLORTON("07/00")                         // Результат: 7
    ? COLORTON("W/N")                           // Результат: 7
 
  . "Красный на белом", для всех форматов числовое значение 116:
 
    ? COLORTON("04/07")                         // Результат: 116
    ? COLORTON("R/W")                           // Результат: 116
 
  . Если основной цвет опущен, то предполагается значение 0. Здесь
    оно соответствует инверсному изображению:
 
    ? COLORTON("/7")                            // Результат: 112
 
  . Можно указывать повышенную интенсивность (+) и мерцание (*):
 
    ? COLORTON("BR+")                           // Результат: 13
    ? COLORTON("BR+*")                          // Результат: 141
    ? COLORTON("G/BR+*")                        // Результат: 218
    ? COLORTON("+G*/bR")                        // Результат: 218
 
  . При некорректном задании параметра возвращается 0:
 
    ? COLORTON()                                // Результат: 0
 
  . Допускается задание параметра в комбинированной числовой форме, в
    этом случае возвращаемое значение совпадает со значением параметра:
 
    ? COLORTON(112)                             // Результат: 112
 

See Also: NTOCOLOR()
v-гБ--Кг =БЮ¬¦ЦБК
 

 

 COLORWIN()
 Замещает заданный или все цветовые атрибуты в области экрана.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COLORWIN([<nTopLine>], [<nLeftCol>],
        [<nBottomLine>], [<nRightCol>],
        [<cNewAttr|nNewAttr>], [<cOldAttr|nOldAttr>]) --> cNull


 
  Параметры
 
    <nTopLine> - необязательный числовой параметр, задающий номер строки
    верхнего левого угла обрабатываемой области экрана. По умолчанию
    строка текущей позиции курсора.
 
    <nLeftCol> - необязательный числовой параметр, задающий номер столбца
    верхнего левого угла обрабатываемой области экрана. По умолчанию
    столбец текущей позиции курсора.
 
    <nBottomLine> - необязательный числовой параметр, задающий номер
    строки нижнего правого угла обрабатываемой области экрана.
    По умолчанию последняя строка экрана или окна.
 
    <nRightCol> - необязательный числовой параметр, задающий номер столбца
    нижнего правого угла обрабатываемой области экрана. По умолчанию
    последний столбец экрана или окна.
 
    <cNewAttr|nNewAttr> - необязательный параметр, задающий замещающий
    цветовой атрибут в принятом в Clipper символьном формате или в виде
    комбинированного числового значения в диапазоне от 0 до 255.
    По умолчанию значение CLEARA.
 
    <cOldAttr|nOldAttr> - необязательный параметр, задающий замещаемый
    цветовой атрибут в принятом в Clipper символьном формате или в виде
    комбинированного числового значения в диапазоне от 0 до 255. По
    умолчанию замещению подлежат все возможные цветовые атрибуты.
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция значительно упрощает работу с изображением, позволяя во всех
    случаях употребления цветового атрибута <cOldAttr|nOldAttr> в
    определенной области экрана или окна заменить его на атрибут
    <cNewAttr|nNewAttr>. По действию эта функция схожа с COLORREPL(),
    но допускает задание области экрана.
 
    Параметры <nTopLine> и <nLeftCol> определяют строку и столбец верхнего
    левого угла, а <nBottomLine> и <nRightCol> определяют строку и столбец
    нижнего правого угла обрабатываемой области.


 
  Примечания
 
  . Если параметр <cOldAttr|nOldAttr> опущен, то все без исключения
    атрибуты заменяются на атрибут <cNewAttr|nNewAttr>. Если атрибут
    <cNewAttr|nNewAttr> также опущен, то замена осуществляется на значение
    CLEARA.
 
  Примеры
 
  . Замещение атрибута 7 ("белый на черном") на 0 ("черный на черном"
    - невидимый) от текущей позиции курсора до конца экрана:
 
    COLORWIN(0, 7)
 
  . Замещение всех атрибутов в области от строки 23 и столбца 15 до
    строки 24 и столбца 70 на атрибут CLEARA:
 
    COLORWIN(23, 15, 24, 70)
 
  . Замещение всех атрибутов на атрибут 116 ("красный на белом") в
    области экрана от строки 23 и столбца 15 до строки 24 и столбца 70:
 
    COLORWIN(23, 15, 24, 70, 116)
 
  . Преобразование изображения с "белый на черном" на "черный на
    белом". Параметры можно указать другим способом:
 
    COLORWIN(23, 15, 24, 70, "0/7", "7/0")
 
  . Допустимо комбинировать различные варианты задания аргументов в
    одном вызове функции:
 
    COLORWIN(23, 15, 24, 70, "0/7", 7)
 

See Also: COLORREPL()

 

 

 EGAPALETTE()
 Изменяет палитру цвета для EGA-адаптеров.
------------------------------------------------------------------------------
 
  Синтаксис
 
    EGAPALETTE([<cColor1|nColor1>], [<cColor2|nPalette>]) --> lValid
 
  Параметры
 
    <cColor1|nColor1> - необязательный параметр, задающий изменяемый цвет
    либо в буквенном Clipper-формате, либо в виде числа в диапазоне от 0
    до 15. По умолчанию палитры всех цветов устанавливаются в стандартные
    значения.
 
    <cColor2|nPalette> - необязательный параметр, задающий в символьном
    виде наименование цвета в принятом в Clipper формате, палитра которого
    присваивается цвету, заданному параметром <cColor1|nColor1>, а в


    числовом виде - непосредственный номер назначаемой палитры в диапазоне
    от 0 до 63. По умолчанию палитра заданного цвета устанавливается в
    стандартное значение.
 
  Возвращаемое значение
 
    lValid - логическое значение .T. при корректном задании параметров, а
    иначе .F..
 
  Описание
 
    Функция позволяет какому-либо из 16 цветов назначить другую палитру.
    Поскольку эта функция изменяет режим видеоадаптера, то все, что на
    экране было в цвете <cColor1|nColor1>, изменит свой цвет.
 
    При символьном типе параметра <cColor2|nPalette> его значение
    трактуется как обозначение цвета, палитра которого присваивается
    цвету, заданному параметром <cColor1|nColor1>. В результате чего
    получится два идентичных цвета.
 
    При числовом типе параметра <cColor2|nPalette>  его значение
    трактуется как номер палитры, присваиваемой цвету, заданному
    параметром <cColor1|nColor1>.
 
    Если задан только параметр <cColor1|nColor1>, то соответствующая
    палитра устанавливается в стандартное значение. При вызове функции без
    параметров палитры всех цветов устанавливаются в стандартные значения.
 
  Примечания
 
  . Данную функцию можно применять и в режиме VGA, хотя в этом случае
    при использовании VGAPALETTE() достигается большая гибкость.
 
  . Функция FONTRESET() восстанавливает стандартные значения палитр
    всех цветов.
 
  Примеры
 
  . Установить для синего цвета палитру темно-синего:
 
    SET COLOR TO B              // Установка синего цвета
    ? "Clipper"                 // Текст выводится синим цветом
    EGAPALETTE("B", 8)          // Воздействует на все, что выведено синим
 
  . Восстановление палитры для синего цвета:
 
    EGAPALETTE("B")
 
  . Восстановление палитр всех цветов:
 
    EGAPALETTE()
 

See Also: FONTRESET()


VGAPALETTE()

 

 

 ENHANCED()
  Переключает вывод со стандартного цвета на выделенный.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ENHANCED() --> cNull
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция позволяет в качестве активного атрибута цвета, используемого
    Clipper-командами вывода @ ... SAY и ?, указать атрибут выделенного
    цвета, установленный Clipper-функцией SETCOLOR(<стандартный>,
    <выделенный>...). Функция STANDARD() позволяет вновь вернуться к
    стандартному атрибуту.
 
  Примеры
 
  . Вывод выделенным цветом:
 
    ? "........"
    ? "........"
    ENHANCED()
        ? "Другой цвет!"
    STANDARD()
    ? "........"
    ? "........"
 

See Also: STANDARD()
UNSELECTED()

 

 

 FILESCREEN()
 Выводит на экран изображение, считанное из файла.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FILESCREEN(<cFileName>, [<nOffset>]) --> nByte
 
  Параметры
 
    <cFileName> - символьный параметр, задающий необязательные имя диска и
    путь доступа к директории и обязательное имя файла. По умолчанию
    используются текущий диск и текущая директория.
 
    <nOffset> - необязательный числовой параметр, задающий величину
    смещения в файле (в байтах), с которого должно быть начато считывание
    при выводе на экран. По умолчанию 0 (начало файла).
 
  Возвращаемое значение
 
    nByte - число считанных байтов.
 
  Описание
 
    Функция выводит на экран ранее записанный с помощью SCREENFILE() в
    файл образ экрана. Параметр <nOffset> используется для указания
    смещения, начиная с которого из файла должно считываться сохраненное
    изображение.


Поскольку число байтов, записанных с помощью функции
    SCREENFILE() известно, то может быть вычислено начало следующего
    экрана. Это позволяет сохранять в одном файле несколько экранных
    изображений.
 
  Примечания
 
  . В файле, считываемом данной функцией, могут находиться символы с
    кодом маркера конца файла. Чтение не будет заканчиваться
    преждевременно, поскольку функция всегда считывает 4000 байтов.
 
  . Использование универсальных символов сопоставления ("?" и "*") для
    задания группы файлов не допускается.
 
  Примеры
 
  . Считывание содержимого экрана с начала файла:
 
    FILESCREEN("screen.tst")
 
  . Считывание второго экрана, образ первого экрана (4000 байтов)
    пропускается:
 
    FILESCREEN("screen.tst", 4000)
 
  . Задание имени диска и пути доступа:
 
    FILESCREEN("\screen.tst")
    FILESCREEN("a:screen.tst")
 
  . Использование универсальных символов сопоставления ("?" и "*")
    для задания группы файлов не допускается:
 
    FILESCREEN("screen.*")      // Результат: 0
 

See Also: SCREENFILE()

 

 

 FONTLOAD()
 Загружает EGA/VGA шрифт из файла.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FONTLOAD(<cFileName>, <nFontArea>,
        [<nOffset>], [<nCounter>]) --> nErrorCode
    или
 
    FONTLOAD(<cFileName>, <nFontArea>, [<lCompute>]) --> nErrorCode
 
  Параметры
 
    <cFileName> - символьный параметр, задающий необязательные имя диска и
    путь доступа к директории и обязательное имя файла.  По умолчанию
    используются текущий диск и текущая директория.
 
    <nFontArea> - номер требуемой шрифтовой области. Минимальное значение
    1. Максимальное для EGA - 4, а для VGA - 8.


В любом случае конкретное
    максимальное значение возвращается функцией MAXFONT().
 
    <nOffset> - необязательный числовой параметр, задающий смещение
    символа, начиная с которого перезаписывается таблица шрифтов
    видеоадаптера. По умолчанию смещение 0.
 
    <nCounter> - необязательный числовой параметр, задающий количество
    символов, для которых загружается новый шрифт. По умолчанию 256
    символов.
 
    <lCompute> - необязательный логический параметр, используемый только
    взамен <nOffset> и <nCounter> и задающий при значении .T.
    необходимость пересчета пиксельной высоты шрифта. Вычисление высоты
    производится по длине строки шрифта. По умолчанию или при значении .F.
    пересчет не производится.
 
  Возвращаемое значение
 
    nErrorCode - числовой код ошибки со следующими значениями:
 
    Таблица 6-1. Коды возврата и их значения
    --------------------------------------------------------------------
    Код         Назначение
    --------------------------------------------------------------------
     0          Шрифт успешно загружен
    -1          Недопустимая шрифтовая область
    -2          Недопустимо в текущем видеорежиме
    -3          Файл шрифта не найден
    -4          Изменение пиксельной высоты недоступно (не прикомпонован
                CT II-драйвер)
    --------------------------------------------------------------------
 
  Описание
 
    Функция позволяет загрузить шрифт из файла в шрифтовую область
    адаптера EGA или VGA. С помощью функции FONTSELECT() можно указать
    разные шрифты для вывода с нормальной и с повышенной интенсивностью
    цвета.
 
    В состав CT II включены примеры шрифтовых файлов. На их основе с
    использованием также поставляемого редактора шрифтов можно создавать
    шрифты пользователя.
 
    Технические основы
 
    Адаптеры EGA и VGA позволяют с помощью соответствующих программных


    средств модифицировать либо все 256, либо часть символов
    знакогенератора. Для этого предварительно сформированный пиксельный
    шаблон символа загружается в соответствующую позицию шрифтовой области
    видеоадаптера. EGA обычно имеет 4 шрифтовых области, VGA - 8 областей,
    в каждой из которых могут быть переопределены все 256 символов. Текущее
    доступное количество шрифтовых областей возвращается функцией
    MAXFONT().
 
    Программное построение шрифтов потребовало бы нежелательного расхода
    памяти. А с помощью функций GETFONT() шрифты из видеоадаптера могут
    быть считаны в символьную переменную. Загрузка же в соответствующую
    область памяти адаптера может быть осуществлена либо из этой же или
    иной переменной с помощью функции SETFONT(), либо из файла функцией
    FONTLOAD(). Загруженный шрифт может быть активизирован функцией
    FONTSELECT().
 
    Изменение пиксельной высоты
 
    В принципе видеоадаптеры EGA и VGA обеспечивают использование шрифтов
    с высотой символа от 2 до 32 пикселей (1 пиксель/символ возможен
    только при разрешающей способности 200 строк сканирования).
    ROM-шрифты имеют размеры 8, 14 и 16 пикселей и используются для
    реализации режимов EGA 25/43 и VGA 25/28/50.
 
    Шрифты с новой пиксельной высотой должны строиться индивидуально, что
    не сложно при использовании поставляемого с CT II редактора шрифтов.
 
    При загрузке шрифта функции FONTLOAD() и SETFONT() рассчитывают высоту
    символа исходя из длины строки шрифтовых данных. Поскольку файл должен
    всегда содержать определения всех 256 символов, то высота символа
    вычисляется ими по формуле:
 
    <Высота символа> = LEN(<Шрифтовые данные>) / 256
 
    Параметр <lCompute> служит признаком требования загрузки шрифта с
    новой пиксельной высотой. Это указание должно быть явным, так как
    изменяется подсчет строк и режим отображения. Кроме того, при этом


    необходима прикомпоновка CT II-драйвера CT2US50.OBJ (см. табл. 6-1).
 
  Примечания
 
  . Видеоадаптеры не допускают смешивания шрифтов с различной
    пиксельной высотой.
 
  . Функцию FONTRESET() нельзя использовать, если загружен шрифт, для
    которого отсутствует аналог в ROM (то есть размер символа отличается
    от 8, 14, 16 пикселей). Поэтому перед ее вызовом необходимо перейти на
    допустимый режим.
 
  . Если EGA-адаптер не использует весь соответствующий диапазон
    памяти, то количество доступных шрифтовых областей может быть менее 4.
    Число доступных шрифтовых областей можно определить с помощью функции
    MAXFONT().
 
  . Данная функция сбрасывает все установки, ранее выполненные с
    помощью функции FONTSELECT().
 
  Примеры
 
  . Загрузка всех 256 символов шрифта EGA в область 2:
 
    ? FONTLOAD("\FONTS\OLDENG.014", 2)          // 0, если успешно
    FONTSELECT(2)                               // загружено
 
  . Замена последних 128 символов шрифта в области 3:
 
    ? FONTLOAD("\FONTS\OLDENG.EGA", 3, 128, 128)
                                                // 0, если успешно
    FONTSELECT(3)                               // загружено
 
  . Загрузка шрифта высотой 24 пикселя в последнюю доступную область:
 
    FONTLOAD("\FONTS\PC.024", MAXFONT(), .T.)
 

See Also: FONTSELECT()
FONTRESET()
GETFONT()
SETFONT()
SETSCRMODE()

 

 

 FONTRESET()
 Отменяет все изменения шрифтов и палитр.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FONTRESET() --> lReset
 
  Возвращаемое значение
 
    lReset - логическое значение .T. при успешной отмене всех изменений
    шрифтов и палитр, а иначе .F..
 
  Описание
 
    Функция отменяет все изменения, произведенные с помощью FONTLOAD(),
    SETFONT() и FONTSELECT().


В стандартное состояние также переводятся
    объекты действия функций EGAPALETTE() и VGAPALETTE().
 
    Кроме того, сбрасывается цвет обрамления, задаваемый Clipper-командой
    SET COLOR TO.
 
    Таблица 6-2. Отменяемые функцией FONTRESET() изменения
    --------------------------------------------------------------------
    Объект                      Влияющие функции
    --------------------------------------------------------------------
    Информация о всех шрифтах   FONTLOAD(), FONTSELECT(), SETFONT()
    Информация о всех палитрах  EGAPALETTE(), VGAPALETTE()
    Атрибут обрамления          Clipper-команда SET COLOR TO
    --------------------------------------------------------------------
 
  Примечания
 
  . Так как в постоянной памяти (ROM) содержатся шрифты только для
    высоты в 8, 14 или 16 пикселей, то функцию FONTRESET() нельзя
    использовать в тех случаях, когда установлена иная высота.
 
  Примеры
 
  . Отмена всех изменений шрифтов и палитр:
 
    ? FONTRESET()       // .T., если выполнено успешно
 

See Also: EGAPALETTE()
FONTLOAD()
FONTSELECT()
VGAPALETTE()

 

 

 FONTROTATE()
 Вращает и зеркально отображает пиксельные шаблоны в шрифтовой строке.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FONTROTATE([@]<cFontString>, <nTurnDirection>,
        [<nPixelHeight>], [<nStart>]) --> cNewFontString
 
  Параметры
 
    [@]<cFontString> - символьный параметр, допускающий передачу по ссылке
    и задающий шрифт в виде пиксельных шаблонов, которые должны быть
    повернуты или зеркально отображены.
 
    <nTurnDirection> - числовой код со значением от 1 до 3, задающий ось
    или направление поворота символа.
 
    <nPixelHeight> - необязательный числовой параметр, используемый только
    при значениях 1 и 3 параметра <nTurnDirection> и задающий количество


    пиксельных строк ( равное числу байтов) шаблона для каждого из символов
    шрифта.
 
    <nStart> - необязательный числовой параметр, используемый только при
    значении 1 параметра <nTurnDirection> и задающий номер пиксельной
    строки, начинающей группу из 8 поворачиваемых пиксельных строк (байтов
    шаблона). В зависимости от значения параметра <nPixelHeight>
    определенное число байтов до и после этой группы очищаются (им
    присваивается значение 0). Нумерация байтов шаблона символа начинается
    с 0.
 
  Возвращаемое значение
 
    cNewFontString - измененная символьная строка со шрифтом. Если ранее
    использовалась CSETREF(.T.), то функция работает как процедура и
    возвращает значение NIL.
 
  Описание
 
    Функция служит для вращения символов шрифта в разных направлениях.
    Число поворачиваемых байтов зависит от направления вращения.
 
    Построение шрифтов
 
    Возвращаемая функцией GETFONT() символьная строка содержит группы
    байтов, составляющих шаблон каждого из 256 символов шрифта.
    Количество байтов для одного символа зависит от его пиксельной высоты
    и может быть определено с помощью функции CHARPIX(). Например, для
    шрифта с высотой 14 пиксельных строк шрифтовая строка будет состоять
    из 256 групп по 14 байтов каждая. Каждый из этих байтов соответствует
    одной горизонтальной пиксельной строке. Так как символы всегда имеют
    ширину 8 пикселей, то одному пикселю соответствует один бит.
 
    Код направления вращения 1
 
    Символы поворачиваются на 90 градусов против часовой стрелки (по оси
    Z). Поскольку ширина символа может составлять только 8 пикселей, то
    могут быть повернуты только 8 байтов. Чтобы определить их, необходимо
    задать параметр высоты пикселя <nPixelHeight> и начало 8-байтовой
    группы. Все байты до и после поворачиваемой группы будут очищены (т.е
    им будет присвоено значение 0).


Центр вращения вычисляется как
    <nStart> +4.
 
    Код направления вращения 2
 
    Символы зеркально отображаются относительно вертикальной оси (оси Y).
    Указывать параметры <nPixelHeight> и <nStart> не требуется, поскольку
    зеркально отображаются биты в каждом байте.
 
    Код направления вращения 3
 
    Символы зеркально отображаются относительно горизонтальной оси (оси
    Х). Параметр <nPixelHeight> должен быть указан, а параметр <nStart> не
    используется, так как область поворота охватывает всю высоту символа.
 
    Комбинации
 
    Так как режимы с 1 по 3 обеспечивают все три оси поворота, то
    многократный вызов функции позволяет комбинировать операции вращения и
    создавать требуемые повернутые и зеркально отраженные символы.
 
  Примечания
 
  . Шрифтовая строка всегда обрабатывается целиком. Если требуется
    преобразовать лишь часть символов, то это легко осуществить при
    неполной загрузке в видеоадаптер нового шрифта функцией SETFONT().
 
  . Для повышения скорости работы передачу шрифтовой строки в функцию
    можно осуществлять по ссылке (@<cFontString>), предварительно отменив
    возврат значения вызовом CSETREF(.T.).
 
  Примеры
 
  . Заполнение экрана символами, а затем их поворот, что особенно
    показательно для VGA-адаптера в режиме 50 строк с матрицей изображения
    8х8, где символы не будут обрезаться.
 
    Все параметры задаются в форме, позволяющей применять их и для других
    пиксельных отношений:
 
    CSETREF(.T.)                        // Оптимизация (при передаче
                                        // параметров по ссылке)
    nMODE := GETSCRMODE()               // Сохранение видеорежима
    VGA50()
    FOR i := 0 TO MAXROW()              // Заполнение экрана
        @ i, 0 SAY CENTER("ABCDEFGHIJKLMNOPQRSTUVWXYZ-1234567890")
    NEXT i
    nPixel := CHARPIX()                 // Определение высоты шрифта


    cFont := GETFONT()                  // Сохранение шрифта
    nKey := 0
    DO WHILE Key <> 27
        MILLISEC(100)                   // Временная задержка
        FONTROTATE(@cFont, 1, nPixel, (nPixel-8)/2)
        SETFONT(cFont)
        nKey := INKEY()
    ENDDO
    SETSCRMODE(nMODE)                   // Восстановление видеорежима
    RETURN
 

See Also: GETFONT()
SETFONT()
CSETREF()

 

 

 FONTSELECT()
  Назначает шрифтовые области для цветов с различной интенсивностью.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FONTSELECT(<nFontArea>, [<nIntensiveFontArea>]) --> nErrorCode
 
  Параметры
 
    <nFontArea> - номер шрифтовой области, используемой при выводе в цвете
    с нормальной интенсивностью.
 
    <nIntensiveFontArea> - необязательный параметр, задающий номер
    шрифтовой области, используемой при выводе в цвете с повышенной
    интенсивностью. По умолчанию принимает значение параметра <nFontArea>.
 
  Возвращаемое значение
 
    nErrorCode - числовой код со значениями, соответствующими таблице:
 
    Таблица 6-3. Определения кода ошибки
    --------------------------------------------------------------------
    Код         Значение
    --------------------------------------------------------------------
     0          Области выбраны успешно
    -1          Задана недопустимая шрифтовая область
    -2          Недоступно в текущем видеорежиме
    --------------------------------------------------------------------
 
  Описание
 
    Функция позволяет выбрать шрифтовые области, используемые при выводе в
    цветах с нормальной и повышенной интенсивностью. Таким образом, путем
    определения двух шрифтов можно увеличить набор различно отображаемых
    символов с 256 до 512. Второй шрифт будет использоваться при выводе в
    цвете с повышенной интенсивностью (цвет, заданный в команде SET COLOR


    TO ... с символом "плюс" ("+")). Если нежелательно отображение с
    различной интенсивностью, то с помощью функций EGAPALETTE() и
    VGAPALETTE() может быть изменена палитра цвета (но не сам цветовой
    атрибут).
 
    Исходное состояние системы соответствует вызову FONTSELECT(1, 1).
 
  Примечания
 
  . После изменения видеорежима функцией SETSCRMODE() шрифты должны
    быть повторно загружены.
 
  Примеры
 
  . Назначение шрифтовой области 1 для вывода в цвете нормальной
    интенсивности, а области 4 - для повышенной:
 
    ? FONTSELECT(1, 4)                  // 0, если успешный выбор
    SET COLOR TO W
    ? "Clipper"                         // Отображение шрифтом 1
    SET COLOR TO W+
    ? "Clipper"                         // Отображение шрифтом 4
 
  . Шрифтовая область 2 для обеих групп цветов:
 
    ? FONTSELECT(2)
 

See Also: FONTLOAD()
FONTRESET()
SETSCRMODE()

 

 

 GETCLEARA()
 Возвращает значение стандартного цветового атрибута (CLEARA).
------------------------------------------------------------------------------
 
  Синтаксис
 
    GETCLEARA() --> nClearAttribute
 
  Возвращаемое значение
 
    nClearAttribute - числовой код атрибута CLEARA.
 
  Описание
 
    Функция возвращает стандартное значение цветового атрибута,
    обозначаемого как CLEARA, который по умолчанию используется рядом
    CT II-функций, связанных с выводом на экран.
 
  Примечания
 
  . Если с помощью функции SETCLEARA() не была установлена иная
    величина, то стандартный атрибут имеет значение 7 ("белый на черном").
 
  Примеры
 
  . Вывод значения стандартного атрибута:
 
    ? GETCLEARA()               // Например, 7
 

See Also: SETCLEARA()

 

 

 GETCLEARB()
 Возвращает значение стандартного символа очистки экрана (CLEARB).
------------------------------------------------------------------------------


 
  Синтаксис
 
    GETCLEARB() --> nClearChar
 
  Возвращаемое значение
 
    nClearChar - числовой ASCII-код символа CLEARB.
 
  Описание
 
    Функция возвращает значение стандартного символа очистки,
    обозначаемого CLEARB, который по умолчанию используется рядом
    CT II-функций, связанных с выводом на экран.
 
  Примечания
 
  . Если с помощью функции SETCLEARB() не была установлена иная
    величина, то стандартный символ имеет значение CHR(255).
 
  Примеры
 
  . Вывод значения стандартного символа:
 
    ? GETCLEARB()               // Например, 255
 

See Also: SETCLEARB()

 

 

 GETFONT()
 Возвращает шрифт в виде символьной строки.
------------------------------------------------------------------------------
 
  Синтаксис
 
    GETFONT(<nFontArea>) --> cFontString
 
  Параметры
 
    <nFontArea> - номер шрифтовой области видеоадаптера. Допустимы
    значения от 1 до MAXFONT().
 
  Возвращаемое значение
 
    cFontString - символьная строка.
 
  Описание
 
    Функция возвращает символьную строку, содержащую шрифт из указанной
    области в памяти видеоадаптера, позволяя сохранять загруженные шрифты
    в символьных переменных.
 
  Примечания
 
  . Если параметр <nFontArea> имеет недопустимое значение, то
    возвращается пустая строка.
 
  Примеры
 
  . Сохранение шрифта из области 1:
 
    cVar := GETFONT(1)
 
  . Восстановление шрифта:
 
    ? SETFONT(cVar, 1)          // 0, если все в порядке
 

See Also: FONTLOAD()
SETFONT()

 

 

 GETSCRSTR()
 Возвращает информацию видеовывода, направленного во внутреннюю память.
------------------------------------------------------------------------------
 
  Синтаксис
 
    GETSCRSTR() --> cHiddenCharString
 
  Возвращаемое значение
 


    cHiddenCharString - символьная строка, содержащая информацию из
    области внутренней памяти, куда функцией SETSCRSTR() перенаправлялся
    видеовывод.
 
  Описание
 
    Функция возвращает информацию из области внутренней памяти, выделенной
    вызовом SETSCRSTR(.T.) для скрытого вывода. Эта строка, чья длина
    соответствует значению, возвращаемому при вызове SCREENSIZE(.T.),
    может быть сохранена в переменной и после выключения режима скрытого
    вывода передана Clipper-функции RESTSCREEN(). Сохранение в переменной
    должно произойти до того, как режим перенаправления вывода вызовом
    SETSCRSTR(.F) будет отключен.  В противном случае область внутренней
    памяти окажется уже освобожденной и функция GETSCRSTR() возвратит
    пустую строку.
 
  Примечания
 
  . Поскольку скрытый вывод всегда реализуется для объема полного
    экрана, независимо от фактического размера выводимой информации, то
    функция RESTSCREEN() должна вызываться со значениями координат  0, 0,
    MAXROW(), MAXCOL().
 
  Примеры
 
  . Скрытие вывода (не забудьте его выключить):
 
    WSELECT(0)
    ? SETSCRSTR(.T.)            // .T. при включении режима скрытия
    @ 10, 10 SAY "XXXXXXX"      // Обычный вывод на экран (не отображается)
        *...
    @ 15, 10 SAY "YYYYYYY"
 
  . Получение образа экрана при скрытом выводе (GETSCRSTR() должна
    вызываться до SETSCRSTR(.F.)):
 
    cVar := GETSCRSTR()
    ? SETSCRSTR(.F.)            // .F. при выключении режима скрытия
    RESTSCREEN(0, 0, MAXROW(), MAXCOL(), cVar)
 

See Also: MAXCOL()
MAXROW()
SETSCRSTR()

 

 

 GETVGAPAL()
 Возвращает характеристики палитры цвета VGA-адаптера.
------------------------------------------------------------------------------
 
  Синтаксис
 
    GETVGAPAL(<nColor|cColor>, <cRGB>) --> nPaletteValue
 
  Параметры
 
    <nColor|cColor> - код цвета либо в виде числа в диапазоне от 0 до 15,


    либо в буквенном виде, принятом для Clipper-команды SET COLOR.
 
    <cRGB> - символ, задающий запрашиваемую компоненту основного цвета,
    в виде буквы R, G или B.
 
  Возвращаемое значение
 
    nPaletteValue - число в диапазоне от 0 до 63. При недействительных
    значениях параметров возвращается (-1).
 
  Описание
 
    В VGA-адаптере каждый цвет составляется комбинацией красного, зеленого
    и синего цветов. Интенсивность каждого из них определяется числом в
    диапазоне от 0 до 63, что позволяет устанавливать индивидуальные
    палитры различных цветов.
 
    GETVGAPAL() возвращает значения интенсивности R (красного), G
    (зеленого) или B (синего), используемые при формировании цвета, для
    которого производится запрос. Последний может быть задан в числовой
    форме (от 0 до 15) или в форме обычного цветового кодирования,
    используемого в команде SET COLOR.
 
  Примечания
 
  . Применение данной функции показано в программе Colorpal.prg,
    поставляемой с CT II.
 
  Примеры
 
  . Определить интенсивность красного в бирюзовом цвете:
 
    GETVGAPAL("BG", "R")
 

See Also: VGAPALETTE()

 

 

 INVERTATTR()
 Меняет местами коды основного и фонового цветовых атрибутов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    INVERTATTR(<cAttr|nAttr>) --> nInvertAttr
 
  Параметры
 
    <cAttr|nAttr> - обрабатываемый цветовой атрибут в принятом в Clipper
    символьном формате или в виде комбинированного числового значения в
    диапазоне от 0 до 255.
 
  Возвращаемое значение
 
    nInvertAttr - инвертированный цветовой атрибут в числовом
    комбинированном формате.
 
  Описание
 
    Функция возвращает инвертированное значение, что соответствует обмену
    основного цвета на цвет фона. Например, красные символы на белом фоне


    станут белыми на красном фоне.
 
    Использование нового атрибута следует осуществлять в сочетании с
    такими функциями, как SCREENATTR(), COLORWIN() и COLORREPL().
 
  Примечания
 
  . Функция не затрагивает биты мерцания и повышенной интенсивности.
 
  Примеры
 
  . Инвертирование атрибута символа в текущей позиции курсора:
 
    ? INVERTATTR(SCREENATTR() )
 
  . Атрибут может быть задан в различных формах. Возвращаемое значение
    всегда число:
 
    ? INVERTATTR(19)                    // Результат: 49
    ? INVERTATTR(112)                   // Результат: 7
    ? INVERTATTR("/7")                  // Результат: 7
    ? INVERTATTR("7")                   // Результат: 112
    ? INVERTATTR("GR+/U")               // Результат: 120
    ? INVERTATTR("U/GR+")               // Результат: 30
 
  . Недопустимое значение атрибута:
 
    ? INVERTATTR("xx/yy")               // Результат: 0
 

See Also: NTOCOLOR()
SCREENATTR()

 

 

 INVERTWIN()
 Инвертирует все цветовые атрибуты задаваемой области экрана.
------------------------------------------------------------------------------
 
  Синтаксис
 
    INVERTWIN([<nTopLine>], [<nLeftColumn>],
        [<nBottomLine>], [<nRightColumn>]) --> cNull
 
  Параметры
 
    <nTopLine> - необязательный числовой параметр, задающий номер строки
    верхнего левого угла области. По умолчанию строка текущей позиции
    курсора.
 
    <nLeftColumn> - необязательный числовой параметр, задающий номер
    столбца верхнего левого угла области. По умолчанию столбец текущей
    позиции курсора.
 
    <nBottomLine> - необязательный числовой параметр, задающий номер
    строки нижнего правого угла области. По умолчанию последняя строка
    экрана.
 
    <nRightColumn> - необязательный числовой параметр, задающий номер


    столбца нижнего правого угла области. По умолчанию последний столбец
    экрана.
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция инвертирует все цветовые атрибуты в пределах заданной области
    экрана. Атрибуты фона заменяются на атрибуты основного цвета и
    наоборот.
 
  Примеры
 
  . Инвертирование атрибутов в окне:
 
    INVERTWIN(10, 10, 20, 70)           // Всегда возвращает пустую строку
 
  . Инвертирование окна от позиции курсора до конца экрана:
 
    INVERTWIN(10, 10)
 

See Also: INVERTATTR()

 

 

 ISCGA()
 Возвращает признак наличия или возможности эмуляции CGA-адаптера.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ISCGA([<lMode>]) --> lCGA
 
  Параметры
 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. проверку реального наличия адаптера, а по умолчанию или при
    значении .F. проверку возможности эмуляции.
 
  Возвращаемое значение
 
    lCGA - логическое значение .T. при наличии или возможности эмуляции
    CGA-адаптера, а иначе .F..
 
  Описание
 
    Функция позволяет определить возможность эмуляции CGA-адаптера (если
    параметр <lMode> опущен или имеет значение .F.), что реализуется
    адаптерами EGA или VGA. При значении параметра .T. возвращается
    признак реального наличия CGA-адаптера.
 
  Примечания
 
  . Активный в настоящий момент режим возвращается функцией GETMODE().
 
  Примеры
 
  . Проверка возможности эмуляции CGA-адаптера:
 
    IF ISCGA()
        *...
    ENDIF
 
  . Проверка, установлен ли CGA-адаптер:
 
    IF ISCGA(.T.)
        *...
    ENDIF
 

See Also: GETMODE()
VIDEOTYPE()

 

 

 ISEGA()
 Возвращает признак наличия или возможности эмуляции EGA-адаптера.


------------------------------------------------------------------------------
 
  Синтаксис
 
    ISEGA([<lMode>]) --> lEGA
 
    Внимание! В отличие от Clipper Tools One используется дополнительный
    необязательный параметр.
 
  Параметры
 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. проверку реального наличия адаптера, а по умолчанию или при
    значении .F. проверку возможности эмуляции.
 
  Возвращаемое значение
 
    lEGA - логическое значение .T. при наличии или возможности эмуляции
    EGA-адаптера, а иначе .F..
 
  Описание
 
    Функция позволяет определить возможность эмуляции EGA-адаптера (если
    параметр <lMode> опущен или имеет значение .F.), что реализуется
    VGA-адаптером. При значении параметра .T. возвращается признак
    реального наличия EGA-адаптера.
 
  Примечания
 
  . Активный в настоящий момент режим возвращается функцией GETMODE().
 
  Примеры
 
  . Проверка возможности эмуляции EGA-адаптера:
 
    IF ISEGA()
        *...
    ENDIF
 
  . Проверка, установлен ли EGA-адаптер:
 
    IF ISEGA(.T.)
        *...
    ENDIF
 

See Also: GETMODE()
VIDEOTYPE()

 

 

 ISHERCULES()
 Возвращает признак наличия или возможности эмуляции HERCULES-адаптера.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ISHERCULES([<lMode>]) --> lHERCULES
 
    Внимание! В отличие от Clipper Tools One используется дополнительный
    необязательный параметр.
 
  Параметры
 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. проверку реального наличия адаптера, а по умолчанию или при
    значении .F. проверку возможности эмуляции.
 
  Возвращаемое значение
 
    lHERCULES - логическое значение .T. при наличии или возможности
    эмуляции HERCULES-адаптера, а иначе .F..


 
  Описание
 
    Функция позволяет определить возможность эмуляции HERCULES-адаптера
    (если параметр <lMode> опущен или имеет значение .F.), что реализуется
    адаптерами EGA или VGA. При значении параметра .T.  возвращается
    признак реального наличия HERCULES-адаптера.
 
  Примечания
 
  . Активный в настоящий момент режим возвращается функцией GETMODE().
 
  . Внимание! Не все адаптеры EGA и VGA обеспечивают эмуляцию
    HERCULES-адаптера. Несмотря на то, что в большинстве случаев
    VGA-адаптером возможна эмуляция HERCULES-адаптера, определить это с
    абсолютной точностью нельзя. Для обеспечения вывода в текстовом
    режиме, рекомендуется пользоваться функцией ISMONO().
 
  Примеры
 
  . Проверка возможности эмуляции HERCULES-адаптера:
 
    IF ISHERCULES()
        *...
    ENDIF
 
  . Проверка, установлен ли HERCULES-адаптер:
 
    IF ISHERCULES(.T.)
        *...
    ENDIF
 

See Also: GETMODE()
VIDEOTYPE()

 

 

 ISMCGA()
 Возвращает признак наличия или возможности эмуляции MCGA-адаптера.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ISMCGA([<lMode>]) --> lMCGA
 
  Параметры
 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. проверку реального наличия адаптера, а по умолчанию или при
    значении .F. проверку возможности эмуляции.
 
  Возвращаемое значение
 
    lMCGA - логическое значение .T. при наличии или возможности эмуляции
    MCGA-адаптера, а иначе .F..
 
  Описание
 
    Функция позволяет определить возможность эмуляции MCGA-адаптера (если
    параметр <lMode> опущен или имеет значение .F.), что реализуется
    адаптерами HERCULES, EGA или VGA. При значении параметра .T.
    возвращается признак реального наличия MCGA-адаптера.
 
  Примечания
 
  . Активный в настоящий момент режим возвращается функцией GETMODE().


 
  Примеры
 
  . Проверка возможности эмуляции MCGA-адаптера:
 
    IF ISMCGA()
        *...
    ENDIF
 
  . Проверка, установлен ли MCGA-адаптер:
 
    IF ISMCGA(.T.)
        *...
    ENDIF
 

See Also: GETMODE()
VIDEOTYPE()

 

 

 ISMONO()
  Возвращает признак наличия или возможности эмуляции монохромного адаптера.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ISMONO([<lMode>]) --> lMonochrome
 
  Параметры
 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. проверку реального наличия адаптера, а по умолчанию или при
    значении .F. проверку возможности эмуляции.
 
  Возвращаемое значение
 
    lMonochrome - логическое значение .T. при наличии или возможности
    эмуляции Monochrome-адаптера, а иначе .F..
 
  Описание
 
    Функция позволяет определить возможность эмуляции Monochrome-адаптера
    (если параметр <lMode> опущен или имеет значение .F.), что реализуется
    адаптерами HERCULES, EGA или VGA.  При значении параметра .T.
    возвращается признак реального наличия монохромного адаптера.
 
  Примечания
 
  . Активный в настоящий момент режим возвращается функцией GETMODE().
 
  Примеры
 
  . Проверка возможности эмуляции монохромного адаптера:
 
    IF ISMONO()
        *...
    ENDIF
 
  . Проверка, установлен ли монохромный адаптер:
 
    IF ISMONO(.T.)
        *...
    ENDIF
 

See Also: GETMODE()
MONOCHROME()
VIDEOTYPE()

 

 

 ISPGA()
 Возвращает признак наличия или возможности эмуляции PGA-адаптера.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ISPGA([<lMode>]) --> lPGA
 
  Параметры
 
    <lMode> - необязательный логический параметр, задающий при значении
    .T.


проверку реального наличия адаптера, а по умолчанию или при
    значении .F. проверку возможности эмуляции.
 
  Возвращаемое значение
 
    lPGA - логическое значение .T. при наличии или возможности эмуляции
    PGA-адаптера, а иначе .F..
 
  Описание
 
    Функция позволяет определить возможность эмуляции PGA-адаптера (если
    параметр <lMode> опущен или имеет значение .F.), что реализуется
    адаптерами EGA или VGA. При значении параметра .T. возвращается
    признак реального наличия PGA-адаптера.
 
  Примечания
 
  . Активный в настоящий момент режим возвращается функцией GETMODE().
 
  Примеры
 
  . Проверка возможности эмуляции PGA-адаптера:
 
    IF ISPGA()
        *...
    ENDIF
 
  . Проверка, установлен ли PGA-адаптер:
 
    IF ISPGA(.T.)
        *...
    ENDIF
 

See Also: GETMODE()
VIDEOTYPE()

 

 

 ISVGA()
 Возвращает признак наличия VGA-адаптера.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ISVGA() --> lVGA
 
  Возвращаемое значение
 
    lVGA - логическое значение .T. при наличии VGA-адаптера, а иначе .F..
 
  Описание
 
    Функция позволяет определить, установлен ли VGA-адаптер. Активный в
    настоящий момент режим возвращается функцией GETMODE().
 
  Примеры
 
  . Проверка, установлен ли VGA-адаптер:
 
    IF ISVGA()
        *...
    ENDIF
 

See Also: GETMODE()
VIDEOTYPE()

 

 

 MAXFONT()
 Возвращает число доступных шрифтовых областей видеоадаптера.
------------------------------------------------------------------------------
 
  Синтаксис
 
    MAXFONT() --> nFontCount
 
  Возвращаемое значение
 
    nFontCount - число доступных шрифтовых областей видеоадаптера.
 
  Описание
 
    Функция возвращает количество областей видеоадаптера, доступных для


    одновременного хранения шрифтов. Эта величина зависит от его типа и
    объема памяти видеоадаптера. По этой причине возвращаемое данной
    функцией значение удобно использовать при вызове FONTLOAD() или
    SETFONT().
 
  Примечания
 
  . Как правило, адаптеры EGA поддерживают четыре шрифтовые области, а
    VGA - восемь.
 
  Примеры
 
  . Загрузка шрифта в последнюю доступную шрифтовую область...
 
    FONTLOAD("ITALIC.016", MAXFONT())
 
  . ... , а затем выбор этого шрифта:
 
    FONTSELECT(MAXFONT())
 

See Also: FONTLOAD()
FONTSELECT()
SETFONT()

 

 

 MONISWITCH()
 Переключает вывод между монохромным и цветным адаптерами.
------------------------------------------------------------------------------
 
  Синтаксис
 
    MONISWITCH() --> lSwitched
 
  Возвращаемое значение
 
    lSwitched - логическое значение .T. при успешном переключении, а иначе
    .F..
 
  Описание
 
    Современный стандарт для IBM PC допускает одновременное использование
    монохромного и цветного адаптера (типа CGA, EGA или VGA), поскольку
    базовые адреса их видеопамяти не совпадают. В основу реализации
    функции MONISWITCH() заложен механизм, аналогичный используемому при
    переключении с адаптера на адаптер в DOS.
 
    Благодаря этому из Clipper-программы можно с помощью функции
    MONISWITCH() производить переключение с одного экрана другой.
    Определить текущий экран можно с помощью функции ISCOLOR().
 
    CT II не предоставляет относительно простых средств переключения на
    работу с двумя экранами и обратно. Тем не менее, используются две
    независимые встроенные видеосистемы, и все соответствующие установки
    для них сохраняются во время переключений внутренними средствами.
    Кроме того, две оконные системы позволяют отображать на каждом экране
    до 255 окон.
 
  Примечания
 
  . Во время первого переключения выбранный экран инициализируется и


    очищается. При всех последующих переключениях информация на экране
    сохраняется.
 
  Примеры
 
  . Циклическое переключение с монохромного экрана на цветной с
    отображением символа "*":
 
    FOR I = 1 TO 79
        ?? "*"
        MONISWITCH()
    NEXT I
 
  . В предыдущем примере при нечетном значении счетчика циклов
    выбирается иной адаптер, чем при запуске. Активный видеоадаптер может
    быть определен с помощью функции ISCOLOR():
 
    ? ISCOLOR()                 // .T., когда активен цветной адаптер
 
  . Определение доступности двух экранных адаптеров без смены текущего
    (для чего осуществляется двойной вызов):
 
    ? MONISWITCH(MONISWITCH())  // При .T. подключены
                                // два видеоадаптера
 

 

 NTOCOLOR()
 Преобразует числовое значение в код цвета в формате "nn/nn" или "cc/cc".
------------------------------------------------------------------------------
 
  Синтаксис
 
    NTOCOLOR(<nAttr>, [<lColorCode>]) --> cAttr
 
  Параметры
 
    <nAttr> - числовое значение атрибута в комбинированной форме.
 
    <lColorCode> - необязательный параметр, управляющий формой
    возвращаемого значения. Если он опущен или имеет значение .F., то
    возвращается код в числовом формате. При значении .T. функция
    NTOCOLOR() возвращает код в буквенном формате.
 
  Возвращаемое значение
 
    cAttr - цветовой атрибут в формате "nn/nn" или "cc/cc".
 
  Описание
 
    Функция преобразует цветовой атрибут, возвращаемый другими функциями в
    числовой форме, в буквенно-цифровой формат. Далее атрибут можно
    использовать в Clipper-команде SET COLOR TO.
 
  Примечания
 
  . Функция NTOCOLOR() возвращает пустую строку в случае ошибочных или
    недопустимых атрибутов. Допускаются значения в пределах от 0 до 255.


 
  Примеры
 
  . "Нормальное" изображение (белое на черном):
 
    ? NTOCOLOR(7)               // "07/00"
    ? NTOCOLOR(7, .T.)          // "W/N"
 
  . Красное изображение на белом фоне. Числовая форма 116
    преобразуется в "04/07" и "R/W":
 
    ? NTOCOLOR(116)             // "04/07"
    ? NTOCOLOR(116, .T.)        // "R/W"
 
  . При ошибочном параметре возвращается пустая строка:
 
    ? NTOCOLOR(380)             // ""
    ? NTOCOLOR(-1, .T.)         // ""
 

See Also: COLORTON()
v-гБ--Кг =БЮ¬¦ЦБК
 

 

 NUMCOL()
 Возвращает число доступных столбцов экрана.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NUMCOL() --> nColumn
 
  Возвращаемое значение
 
    nColumn - число столбцов, доступных в Clipper на экране или в текущем
    окне.
 
  Описание
 
    Функцию можно использовать для определения ширины экрана при
    организации переноса выводимой информации на другую строку.  Функция
    NUMCOL() на основе значения, получаемого от BIOS, и в зависимости от
    режима, установленного функцией DSETWINDOW(), возвращает количество
    столбцов либо физического экрана, либо окна.
 
  Примеры
 
  . Количество столбцов открытого окна:
 
    WOPEN(10, 10, 20, 70)       // Открытие окна
    DSETWINDOW(.T.)             // Перенаправление вывода в окна
    ? NUMCOL()                  // 61 столбец
    DSETWINDOW(.F.)             // Отмена перенаправления
    ? NUMCOL()                  // 80 столбцов
 

See Also: CGA40()
MAXCOL()
MAXROW()
SETMAXCOL()

 

 

 RESTCURSOR()
 Восстанавливает сохраненную позицию и форму курсора.
------------------------------------------------------------------------------
 
  Синтаксис
 
    RESTCURSOR(<nCursorSetting>) --> cNull


 
  Параметры
 
    <nCursorSetting> - числовое значение, возвращаемое функцией
    SAVECURSOR().
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция восстанавливает сохраненные с помощью функции SAVECURSOR()
    координаты позиции и форму курсора, что эквивалентно вызову
    совокупности функций ROW(), COL() и CSETCURS().
 
  Примеры
 
  . Сохранить и восстановить:
 
    nVar := SAVECURSOR()
    DO OUTPUT
    RESTCURSOR(nVar)
 

See Also: SAVECURSOR()

 

 

 SAVECURSOR()
 Возвращает информацию о позиции и форме курсора.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SAVECURSOR() --> nCursorSetting
 
  Возвращаемое значение
 
    nCursorSetting - число, содержащее комбинацию значений, возвращаемых
    функциями ROW(), COL(), SETCURSOR() и CSETCURS().
 
  Описание
 
    Функция возвращает числовое значение, представляющее собой комбинацию
    трех элементов экранной информации. Восстановление этой информации
    осуществляется с помощью функции RESTCURSOR().
 
  Примеры
 
  . Запись и восстановление информации о курсоре:
 
    nVar := SAVECURSOR()
    DO OUTPUT
    RESTCURSOR(nVar)
 

See Also: RESTCURSOR()

 

 

 SAYDOWN()
 Выводит строку по вертикали сверху вниз.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SAYDOWN(<cCharString>, [<nDelay>], [<nRow>], [<nColumn>]) --> cNull
 
  Параметры
 
    <cCharString> - символьная строка, подлежащая выводу.
 
    <nDelay> - необязательный числовой параметр, задающий задержку в
    миллисекундах при выводе каждого следующего символа. По умолчанию 4.
 
    <nRow> - необязательный числовой параметр, задающий номер строки


    позиции начала вывода по вертикали. По умолчанию строка текущей
    позиции курсора.
 
    <nColumn> - необязательный числовой параметр, задающий номер столбца
    позиции начала вывода по вертикали. По умолчанию столбец текущей
    позиции курсора.
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция обеспечивает особый эффект при выводе строки. Вывод
    выполняется вертикально, сверху вниз от выбранной позиции или текущего
    положения курсора, с возможной временной задержкой между отдельными
    символами. Выведя символ в последнюю строку экрана, функция прекращает
    действие. Вывод осуществляется в стандартном цвете, установленном
    командой SET COLOR TO.
 
    Функция не изменяет текущую позицию курсора.
 
  Примечания
 
  . Управляющие символы, используемые в Clipper-командах @ ... SAY,
    не интерпретируются.
 
  Примеры
 
  . Вертикальный вывод, начиная со строки 10 в столбце 10, с задержкой
    100 мс между символами:
 
    SAYDOWN("Clipper", 100, 10, 10)
    *   C               // Строка 10
    *   l               // Строка 11
    *   i               // Строка 12
    *   p               // Строка 13
    *   p               // Строка 14
    *   e               // Строка 15
    *   r               // Строка 16
 

See Also: SAYMOVEIN()
SAYSPREAD()

 

 

 SAYMOVEIN()
 Выводит строку с эффектом "выдвижения".
------------------------------------------------------------------------------
 
  Синтаксис
 
    SAYMOVEIN(<cCharString>, [<nDelay>], [<nRow>],
        [<nColumn>], [<lDirection>]) --> cNull
 
  Параметры
 
    <cCharString> - символьная строка, подлежащая выводу.
 
    <nDelay> - необязательный числовой параметр, задающий задержку в
    миллисекундах при выводе каждого следующего символа.


По умолчанию 4.
 
    <nRow> - необязательный числовой параметр, задающий номер строки
    позиции начала вывода. По умолчанию строка текущей позиции курсора.
 
    <nColumn> - необязательный числовой параметр, задающий номер столбца
    позиции начала вывода. По умолчанию столбец текущей позиции курсора.
 
    <lDirection> - необязательный логический параметр, задающий при
    значении .T. "выдвижение" символов на экране справа налево, а при
    значении .F. или по умолчанию "выдвижение" слева направо.
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция обеспечивает особый эффект "бегущей строки" при выводе на
    экран. Начиная с заданной позиции на экране символы "выдвигаются"
    слева направо или наоборот. По окончании вывода курсор занимает
    позицию в конце строки.
 
  Примечания
 
  . Управляющие символы, используемые в Clipper-командах @ ... SAY,
    не интерпретируются.
 
  Примеры
 
  . Вывод с "выдвижением" ("бегущая строка") с позиции строка 10,
    столбец 10 с задержкой в 100 мс. Строка должна выдвигаться слева:
 
    SAYMOVEIN("Clipper", 100, 10, 10)
    *   r               // Промежуточный результат в строке 10
    *   er              // Промежуточный результат в строке 10
    *   per             // Промежуточный результат в строке 10
    *   pper            // Промежуточный результат в строке 10
    *   ipper           // Промежуточный результат в строке 10
    *   lipper          // Промежуточный результат в строке 10
    *   Clipper         // Результат в строке 10!
 

See Also: SAVECURSOR()
SAYDOWN()
SAYSPREAD()

 

 

 SAYSCREEN()
 Выводит строку на экран без изменения цветового атрибута.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SAYSCREEN(<cCharString>, [<nRow>], [<nColumn>]) --> cNull


 
  Параметры
 
    <cCharString> - подлежащая выводу строка.
 
    <nRow> - необязательный числовой параметр, задающий номер строки
    позиции начала вывода. По умолчанию строка текущей позиции курсора.
 
    <nColumn> - необязательный числовой параметр, задающий номер столбца
    позиции начала вывода. По умолчанию столбец текущей позиции курсора.
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция позволяет выводить информацию на экран, сохраняя все
    существующие цветовые атрибуты. Это означает, что переписываются
    только символы, а соответствующие цветовые атрибуты знакомест
    сохраняются неизменными.
 
  Примечания
 
  . Текущая позиция курсора не изменяется.
 
  Примеры
 
  . Вывод текста с текущей позиции курсора:
 
    SAYSCREEN(" Тест SAYSCREEN")
 
  . Вывод текста с текущего столбца на строке 24:
 
    SAYSCREEN(" Тест SAYSCREEN", 24)
 
  . Вывод текста со столбца 70 строки 24:
 
    SAYSCREEN(" Тест SAYSCREEN", 24, 70)
 
  . Во всех приведенных выше примерах функция возвращает пустую
    строку.
 

 

 SAYSPREAD()
 Выводит строку с эффектом "расползания".
------------------------------------------------------------------------------
 
  Синтаксис
 
    SAYSPREAD(<cCharString>, [<nDelay>], [<nRow>], [<nColumn>]) --> cNull
 
  Параметры
 
    <cCharString> - символьная строка, подлежащая выводу.
 
    <nDelay> - необязательный числовой параметр, задающий задержку в
    миллисекундах при выводе каждого следующего символа. По умолчанию 4.
 
    <nRow> - необязательный числовой параметр, задающий номер строки
    позиции начала вывода. По умолчанию строка текущей позиции курсора.
 
    <nColumn> - необязательный числовой параметр, задающий номер столбца


    позиции начала вывода. По умолчанию столбец текущей позиции курсора.
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция обеспечивает особый эффект при выводе строки на экран.
    Начиная от центральной точки, соответствующей центру экрана или окна
    или значению параметра <nColumn>, символы выводятся с эффектом
    "расползания". Используется цветовой атрибут стандартного цвета,
    установленный командой SET COLOR TO. По окончании выполнения текущая
    позиция курсора не изменяется.
 
  Примечания
 
  . Управляющие символы, используемые в Clipper-командах @ ... SAY,
    не интерпретируются.
 
  Примеры
 
  .
"Расползание", начиная с середины строки 10 (экрана или окна), с
    задержкой 100 мс:
 
    SAYSPREAD("Characters", 100, 10)
    * Вывод выполняется в несколько шагов, но всегда на одной строке
    *       ac                  // Промежуточный результат в строке 10
    *      ract                 // Промежуточный результат в строке 10
    *     aracte                // Промежуточный результат в строке 10
    *    haracter               // Промежуточный результат в строке 10
    *   Characters              // Результат в строке 10
 

See Also: SAYDOWN()
SAYMOVEIN()

 

 

 SCREENATTR()
 Возвращает цветовой атрибут задаваемой позиции экрана.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SCREENATTR([<nRow>], [<nColumn>]) --> nAttr
 
  Параметры
 
    <nRow> - необязательный числовой параметр, задающий номер строки
    позиции. По умолчанию строка текущей позиции курсора.
 
    <nColumn> - необязательный числовой параметр, задающий номер столбца
    позиции. По умолчанию столбец текущей позиции курсора.
 
  Возвращаемое значение
 
    nAttr - цветовой атрибут указанной позиции.


 
  Описание
 
    Функция возвращает текущий экранный атрибут на знакоместе <nRow>,
    <nColumn>. Таким образом можно запомнить цветовые атрибуты для
    последующего использования или обработки, например, с помощью функции
    INVERTATTR().
 
  Примеры
 
  . Атрибут знакоместа в текущей позиции курсора:
 
    nVar := SCREENATTR()
 
  . Атрибут знакоместа в текущем столбце в строке 23:
 
    nVar := SCREENATTR(23)
 
  . Атрибут знакоместа с координатами столбец 70, строка 23:
 
    nVar := SCREENATTR(23, 70)
 

See Also: INVERTATTR()

 

 

 SCREENFILE()
 Записывает отображаемую на экране информацию в файл.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SCREENFILE(<cFileName>, [<lAppend>], [<nOffset>]),
        [<lTrim>] --> nBytesWritten
 
  Параметры
 
    <cFileName> - символьный параметр, задающий необязательные имя диска и
    путь доступа к директории и обязательное имя файла. По умолчанию
    используются текущий диск и текущая директория.
 
    <lAppend> - необязательный логический параметр, задающий при значении
    .T. запись путем добавления в конец, а при значении .F. или по
    умолчанию перезапись уже имеющейся информации.
 
    <nOffset> - необязательный числовой параметр, задающий количество
    байтов смещения от начала файла до места записи новой информации при
    добавлении (при значении .T. параметра <lAppend>). По умолчанию конец
    файла.
 
    <lTrim> - необязательный логический параметр, задающий при значении
    .T. усечение остатка информации в файле после записи нового экрана, а
    при значении .F. или по умолчанию запись без усечения.
 
  Возвращаемое значение
 
    nBytesWritten - число записанных в файл байтов.
 
  Описание
 
    Функция позволяет сохранять в файле образ экрана.


В отличие от
    Clipper-команд SAVE SCREEN и RESTORE SCREEN, которые при подключенном
    CT II-драйвере ориентируются на активное окно, функция SCREENFILE()
    записывает образ всего физического экрана. Число записываемых ею
    байтов зависит только от текущего видеорежима. Для VGA в режиме 50
    строк, например, это 8000 символов, а не 4000. Размер экрана в текущий
    момент времени возвращается функцией SCREENSIZE().
 
    Параметр <nOffset> используется только при значении .T. параметра
    <lAppend>. В этом случае он задает позицию в файле, начиная с которой
    должны быть записаны новые данные. Если задаваемая параметром
    <nOffset> позиция находится перед концом файла, то новая информация
    вместо старой будет записана с этого смещения. Если позиция находится
    за концом файла, то данные будут добавлены в конец файла. Если
    параметр <nOffset> опущен, а <lAppend> имеет значение .T., что
    означает добавление, то оно производится в конец файла. Это позволяет
    хранить в одном файле несколько экранных изображений.
 
    В тех случаях, когда новое изображение записывается взамен уже
    существующего не в начало файла и вся последующая информация более не
    нужна, вызов функции следует производить со значением .T.  параметра
    <lTrim>. В этом случае функция произведет усечение остатка файла.
 
  Примечания
 
  . Значение атрибута файла, созданного функцией SCREENFILE(), можно
    изменить с помощью функции SETFCREATE().
 
  . Если внутренний переключатель, управляемый CT II-функцией
    CSETSAFETY() включен, то выходной файл не будет перезаписываться, даже
    при значении .F. параметра <lAppend>.
 
  . Использование универсальных символов сопоставления ("?" и "*") для
    задания группы файлов не допускается.
 
  Примеры
 
  . Перезапись существующего файла:
 
    SCREENFILE("screen.tst")                    // Результат: 4000


    SCREENFILE("\screen.tst")                   // Результат: 4000
    SCREENFILE("a:\screen.tst")                 // Результат: 4000
 
  . VGA в режиме 50 строк:
 
    SCREENFILE("screen.tst")                    // Результат: 8000
 
  . Добавление в конец файла:
 
    SCREENFILE("screen.tst", .T.)               // Результат: 4000
 
  . Вставка новой информации со смещения 4000, т.е. после первого
    сохраненного экрана:
 
    SCREENFILE("screen.tst", .T., 4000)         // Результат: 4000
 
  . Вставка новой информации после третьего сохраненного экрана:
 
    SCREENFILE("screen.tst", .T., 12000)        // Результат: 4000
 
  . Вставка новой информации после третьего сохраненного экрана и
    отсечь остаток файла:
 
    SCREENFILE("screen.tst", .T., 12000, .T.)   // Результат: 4000
 
  . Задание символов универсального сопоставления не допускается:
 
    SCREENFILE("screen.*")                      // Результат: 0
 

See Also: CSETSAFETY()
FILESCREEN()
SCREENSIZE()
SETFCREATE()

 

 

 SCREENMARK()
 Изменяет цветовой атрибут найденной экранной строки.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SCREENMARK(<cSearchString>, <cAttr|nAttr>,
        <lUpperLower>, [<lAll>], [<cForwardDelimiter>],
        [<cTrailingDelimiter>]) --> lFound
 
  Параметры
 
    <cSearchString> - символьная строка, искомая в экранной памяти.
 
    <cAttr|nAttr> - новый цветовой атрибут, который должен быть присвоен
    найденной в экранной памяти последовательности. Может быть представлен
    в принятом в Clipper символьном формате или в виде комбинированного
    числового значения в диапазоне от 0 до 255.
 
    <lUpperLower> - логический параметр, задающий при значении .T.


поиск с
    учетом, а при значении .F. поиск без учета различия строчных и
    прописных букв.
 
    <lAll> - необязательный логический параметр, задающий при значении .T.
    обработку каждого вхождения искомой строки, а при значении .F. или по
    умолчанию обработку только первого вхождения.
 
    <cForwardDelimiter> - необязательный символьный параметр, содержащий
    набор символов, каждый из которых рассматривается как возможный
    разделитель, предшествующий <cSearchString>. По умолчанию разделителя
    нет.
 
    <cTrailingDelimiter> - необязательный символьный параметр, содержащий
    набор символов, каждый из которых рассматривается как возможный
    разделитель, следующий за <cSearchString>. По умолчанию разделителя
    нет.
 
  Возвращаемое значение
 
    lFound - логическое значение .T., если указанная строка найдена хотя
    бы один раз, а иначе .F..
 
  Описание
 
    Функция позволяет осуществить поиск последовательности символов в
    экранной памяти и присвоить им новый цветовой атрибут. Например, можно
    путем инверсии изображения выделять слова при работе функции
    MEMOEDIT(). Для этого SCREENMARK() должна вызываться из функции
    пользователя при каждом нажатии клавиш управления курсором.
 
    При значении .T. параметра <lUpperLower> осуществляется поиск
    конкретного сочетание символов, а при значении .F. прописные и
    строчные буквы не различаются.
 
    Если необходимо выделять слова как текстовые единицы, а не как
    фрагменты последовательности символов, то можно использовать два
    набора символов разделителей <cForwardDelimiter> и
    <cTrailingDelimiter>.  В противном случае, например,
    последовательность "LOCK" будет отмечена в слове "BLOCK".
 
    При использовании пробела в качестве разделителя <cForwardDelimiter>
    (см. Примечание), подстрока "LOCK" не будет помечена в подстроке


    "BLOCK". Все возможные значения, используемые в качестве разделителей,
    могут быть перечислены в символьных строках параметров
    <cForwardDelimiter> и <cTrailingDelimiter>.
 
    Искомая последовательность может начинаться на первой или
    заканчиваться на последней позиции экрана или окна.
 
  Примечания
 
  . Внимание! CT II использует для очистки экрана символ CHR(255),
    позволяющий использовать цветовой атрибут для всех типов
    видеоадаптеров, поэтому этот символ следует включать в список
    разделителей.
 
  . Функция не изменяет позицию курсора.
 
  Примеры
 
  . Маркировка инверсным цветовым атрибутом первого появления
    "Clipper" на экране (в точном написании):
 
    ? SCREENMARK("Clipper", "0/7", .T.)         // .F. если не найдено
 
  . Маркировка всех появлений "Clipper" (независимо от регистра)
    цветовым атрибутом "белый на голубом":
 
    ? SCREENMARK("Clipper", "W/B", .F., .T.)    // .F. если не найдено
 
  . Поиск всех слов "LOCK". Выражения типа "BLOCK" не отмечать.
    Разделители: "пусто" (в CT II это CHR(255)), наклонная черта, тире и
    скобки:
 
    cListA := CHR(255) + "/("
    cListB := CHR(255) + "-)"
    ? SCREENMARK("LOCK", "W/B", .F., .T., cListA, cListB)
 

 

 SCREENMIX()
 Выводит на экран объединение строк символов и атрибутов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SCREENMIX(<cCharString>, <cAttrString>,
        [<nRow>], [<nColumn>]) --> cNull
 
  Параметры
 
    <cCharString> - символьный параметр, задающий строку выводимых
    символов.
 
    <cAttrString> - символьный параметр, задающий строку атрибутов для
    выводимых символов.


 
    <nRow> - необязательный числовой параметр, задающий номер строки
    позиции начала вывода. По умолчанию строка текущей позиции курсора.
 
    <nColumn> - необязательный числовой параметр, задающий номер столбца
    позиции начала вывода. По умолчанию столбец текущей позиции курсора.
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция объединяет строку символов <cCharString> со строкой атрибутов
    <cAttrString> и выводит полученный результат на экран.
 
    Первый атрибут из строки <cAttrString> назначается первому символу из
    строки <cCharString> , второй - второму и т.д. Таким образом, каждый
    i-й символ будет отображаться в цвете, определяемом i-м атрибутом.
    Параметры <nRow> и <nColumn> определяют строку и столбец начала
    вывода.
 
  Примеры
 
  . Подготовка символьных строк, содержащих текст и цветовые атрибуты,
    для вывода с помощью SCREENMIX(). Первый символ "1" будет "красным на
    белом" (116), а текст "Help" будет "голубым на белом" (113):
 
    cCharacter := "1Help"
    cAttribute := CHR(116) + REPLICATE(CHR(113), 5)
 
  . Вывод с текущей позиции курсора:
 
    SCREENMIX(cCharacter, cAttribute)
 
  . Вывод со строки 24 и столбца курсора:
 
    SCREENMIX(cCharacter, cAttribute, 24)
 
  . Вывод со строки 24 и столбца 0:
 
    SCREENMIX(cCharacter, cAttribute, 24, 0)
 

See Also: COLORTON()
SAYSCREEN()

 

 

 SCREENSIZE()
 Возвращает доступный размер экрана в виде числа символов.
------------------------------------------------------------------------------
 
    Внимание! В отличие от Clipper Tools One используется дополнительный
    необязательный параметр.
 
  Синтаксис
 
    SCREENSIZE(<lMode>) --> nScreenSize
 
  Параметры


 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. возврат размера физического экрана, а при значении .F. или по
    умолчанию возврат размера активного окна.
 
  Возвращаемое значение
 
    nScreenSize - число байтов.
 
  Описание
 
    Функция определяет размер экрана (с учетом атрибутов) в байтах. При 25
    строках и 80 столбцах экран вмещает 2000 символов. Для каждого символа
    имеется также байт атрибута. Таким образом, объем экрана равен 4000
    байтов.
 
    Если параметр <lMode> опущен или имеет значение .F., то возвращается
    размер активного окна. Если параметр <lMode> имеет значение .T., то
    возвращается размер физического экрана.
 
  Примеры
 
  . Вывод размеров в байтах:
 
    WOPEN(10, 10, 20, 70)               // Открыть окно
    ? SCREENSIZE()                      // Размер окна
    ? SCREENSIZE(.T.)                   // Размер физического экрана
 

See Also: MAXROW()
NUMCOL()

 

 

 SCREENSTR()
 Возвращает считанную с экрана символьную строку с цветовыми атрибуты.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SCREENSTR([<nRow>], [<nColumn>], [<nCharCount>]) --> cCharString
 
  Параметры
 
    <nRow> - необязательный числовой параметр, задающий номер строки
    позиции начала считывания. По умолчанию строка текущей позиции
    курсора.
 
    <nColumn> - необязательный числовой параметр, задающий номер столбца
    позиции начала считывания. По умолчанию столбец текущей позиции
    курсора.
 
    <nCharCount> - необязательный числовой параметр, задающий количество
    считываемых символов. По умолчанию считывание до конца окна или
    экрана.
 
  Возвращаемое значение
 
    cCharString - символьная строка, содержащая считанные с экрана символы
    с атрибутами.


 
  Описание
 
    Функция позволяет сохранить информацию окна или экрана полностью или
    частично в переменной. Параметр <nRow> определяет первую строку, а
    <nColumn> - первый столбец позиции начала. Параметр <nCharCount>
    позволяет ограничить число считываемых символов, если не вся
    информация экрана или окна должна сохраняться в переменной.
 
  Примечания
 
  . Возвращаемая символьная строка содержит все байты атрибутов.  Для
    полного экрана из 25 строк и 80 столбцов возвращается строка длиной
    4000 символов.
 
  Примеры
 
  . Считывание всех символов вместе с соответствующими атрибутами от
    позиции курсора до конца экрана:
 
    cVar := SCREENSTR()
 
  . Все символы и атрибуты от позиции курсора на строке 24:
 
    cVar := SCREENSTR(24)
 
  . Последние 10 символов и атрибутов в строке 24:
 
    cVar := SCREENSTR(24, 70)
 
  . Последние 10 символов (без атрибутов) в строке 24:
 
    cVar := CHARODD(SCREENSTR(24, 70))
 

See Also: STRSCREEN()
CHARODD()
CHAREVEN()

 

 

 SETCLEARA()
 Устанавливает значение стандартного цветового атрибута (CLEARA).
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETCLEARA([<cClearAttr|nClearAttr>]) --> cNull
 
  Параметры
 
    <cClearAttr|nClearAttr> - необязательный параметр, задающий новое
    значение атрибута CLEARA в принятом в Clipper символьном формате или в
    виде комбинированного числового значения в диапазоне от 0 до 255.
    По умолчанию 7 ("белый на черном").
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция устанавливает значение стандартного цветового атрибута,
    используемого по умолчанию CT II-функциями. Исходным значением,
    используемым до вызова этой функции, является 7 ("белый на черном").


 
  Примеры
 
  . Установка стандартного значения цветового атрибута:
 
    SETCLEARA()
 
  . Различные способы задания атрибута:
 
    SETCLEARA(19)
    SETCLEARA("03/01")
    SETCLEARA("B/GR")
 

See Also: GETCLEARA()

 

 

 SETCLEARB()
  Устанавливает значение стандартного символа очистки экрана (CLEARB).
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETCLEARB([<cClearChar|nClearChar>]) --> cNull
 
  Параметры
 
    <cClearChar|nClearChar> - необязательный параметр, задающий новое
    значение символа CLEARB в формате символьной строки или в виде
    числового значения ASCII-кода в диапазоне от 0 до 255. По умолчанию
    CHR(255).
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция устанавливает значение стандартного символа, используемого по
    умолчанию CT II-функциями. Исходным значением, используемым до вызова
    этой функции, является CHR(255). Этот символ ("твердый" пробел) может
    принимать цветовой атрибут для всех видеоадаптеров.
 
  Примеры
 
  . Установка стандартного значения символа CHR(255):
 
    SETCLEARB()
 
  . Использование CHR(178) как символа очистки на экране:
 
    SETCLEARB(178)
 

See Also: GETCLEARB()

 

 

 SETFONT()
 Загружает EGA/VGA шрифт из символьной переменной.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETFONT(<cFontString>, <nFontArea>,
        [<nOffset>], [<nCounter>]) --> nErrorCode
    или
 
    SETFONT(<cFontString>, <nFontArea>, [<lCompute>]) --> nErrorCode
 
  Параметры
 
    <cFontString> - символьная строка, содержащая определение шрифта.
 
    <nFontArea> - номер требуемой шрифтовой области.


Минимальное значение
    1. Максимальное для EGA - 4, а для VGA - 8. В любом случае конкретное
    максимальное значение возвращается функцией MAXFONT().
 
    <nOffset> - необязательный числовой параметр, задающий смещение
    символа, начиная с которого перезаписывается таблица шрифтов
    видеоадаптера. По умолчанию смещение 0.
 
    <nCounter> - необязательный числовой параметр, задающий количество
    символов, для которых загружается новый шрифт. По умолчанию 256
    символов.
 
    <lCompute> - необязательный логический параметр, используемый только
    взамен <nOffset> и <nCounter> и задающий при значении .T.
    необходимость пересчета пиксельной высоты шрифта. Вычисление высоты
    производится по длине строки шрифта. По умолчанию или при значении .F.
    пересчет не производится.
 
  Возвращаемое значение
 
    nErrorCode - числовой код ошибки со следующими значениями:
 
    Таблица 6-4. Коды возврата и их значения
    --------------------------------------------------------------------
    Код         Назначение
    --------------------------------------------------------------------
     0          Шрифт успешно загружен
    -1          Недопустимая шрифтовая область
    -2          Недопустимо в текущем видеорежиме
    -3          Файл шрифта не найден
    -4          Изменение пиксельной высоты недоступно (не прикомпонован
                CT II-драйвер)
    --------------------------------------------------------------------
 
  Описание
 
    Функция позволяет загрузить шрифт из символьной переменной в шрифтовую
    область адаптера EGA или VGA. С помощью функции FONTSELECT() можно
    указать разные шрифты для вывода с нормальной и с повышенной
    интенсивностью цвета.
 
    В состав CT II включены примеры шрифтовых файлов. На их основе с
    использованием также поставляемого редактора шрифтов можно создавать
    шрифты пользователя.


 
    Технические основы
 
    Адаптеры EGA и VGA позволяют с помощью соответствующих программных
    средств модифицировать либо все 256, либо часть символов
    знакогенератора. Для этого предварительно сформированный пиксельный
    шаблон символа загружается в соответствующую позицию шрифтовой области
    видеоадаптера. EGA обычно имеет 4 шрифтовые области, VGA - 8 областей,
    в каждой из которых могут быть переопределены все 256 символов. Текущее
    доступное количество шрифтовых областей возвращается функцией
    MAXFONT().
 
    Программное построение шрифтов потребовало бы нежелательного расхода
    памяти. А с помощью функций GETFONT() шрифты из видеоадаптера могут
    быть считаны в символьную переменную. Загрузка же в соответствующую
    область памяти адаптера может быть осуществлена либо из этой же или
    иной переменной с помощью функции SETFONT(), либо из файла функцией
    FONTLOAD(). Загруженный шрифт может быть активизирован функцией
    FONTSELECT().
 
    Изменение пиксельной высоты
 
    В принципе видеоадаптеры EGA и VGA обеспечивают использование шрифтов
    с высотой символа от 2 до 32 пикселей (1 пиксель/символ возможен
    только при разрешающей способности 200 строк сканирования).
    ROM-шрифты имеют размеры 8, 14 и 16 пикселей и используются для
    реализации режимов EGA 25/43 и VGA 25/28/50.
 
    Шрифты с новой пиксельной высотой должны строиться индивидуально, что
    не сложно при использовании поставляемого с CT II редактора шрифтов.
 
    При загрузке шрифта функции FONTLOAD() и SETFONT() рассчитывают высоту
    символа исходя из длины строки шрифтовых данных. Поскольку файл должен
    всегда содержать определения всех 256 символов, то высота символа
    вычисляется ими по формуле:
 
    <Высота символа> = LEN(<Шрифтовые данные>) / 256
 
    Параметр <lCompute> служит признаком требования загрузки шрифта с
    новой пиксельной высотой.


Это указание должно быть явным, так как
    изменяется подсчет строк и режим отображения. Кроме того, при этом
    необходима прикомпоновка CT II-драйвера CT2US50.OBJ (см. табл. 6-4).
 
  Примечания
 
  . Видеоадаптеры не допускают смешивания шрифтов с различной
    пиксельной высотой.
 
  . Функцию FONTRESET() нельзя использовать, если загружен шрифт, для
    которого отсутствует аналог в ROM (то есть размер символа отличается
    от 8, 14, 16 пикселей). Поэтому перед ее вызовом необходимо перейти на
    допустимый режим.
 
  . Если EGA-адаптер не использует весь соответствующий диапазон
    памяти, то количество доступных шрифтовых областей может быть менее 4.
    Число доступных шрифтовых областей можно определить с помощью функции
    MAXFONT().
 
  Примеры
 
  . Загрузка всех 256 символов шрифта во вторую шрифтовую область:
 
    ? SETFONT(cFontString, 2)   // 0 - нормальная загрузка
    FONTSELECT(2)               // Вторая шрифтовая область для цветов
                                // с нормальной интенсивностью
 
  . Замена последних 128 символов шрифта в области 3:
 
    ? SETFONT(cFontString, 3, 128, 128) // 0 - нормальная загрузка
    FONTSELECT(3)                       // Третья шрифтовая область
                                        // для цветов с нормальной
                                        // интенсивностью
 
  . Удвоение (по возможности) высоты загруженного шрифта. Это не
    сложно, поскольку каждый байт в строке шрифта должен быть удвоен:
 
    cFont := GETFONT()
    SETFONT(CHARMIX(cFont, cFont), .T.)
 
  . Строку шрифта можно разложить на отдельные пиксельные строки.
    Здесь они выводятся в двоичном виде:
 
    cFont := GETFONT()
    nPixel := CHARPIX()
 
    FOR A = 0 TO 255
        FOR B = 1 TO nPixel
                nByte := ASC(SUBSTR(cFont, (nPixel * A) + B, 1))
                ? NTOC(nByte, 2, 8, "0")


        NEXT B
        INKEY(0)
        ?
    NEXT A
 

See Also: FONTLOAD()
FONTSELECT()
FONTRESET()
GETFONT()
SETSCRMODE()

 

 

 SETRC()
 Задает номера строки и столбца позиции курсора.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETRC([<nRow>], [<nColumn>]) --> cNull
 
  Параметры
 
    <nRow> - необязательный числовой параметр, задающий номер строки
    курсора. По умолчанию строка, установленная в BIOS.
 
    <nColumn> - необязательный числовой параметр, задающий номер столбца
    курсора. По умолчанию столбец, установленный в BIOS.
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция устанавливает внутренние значения, возвращаемые Clipper-
    функциями ROW() - строки и COL() - столбца. Одновременно курсор
    автоматически перемещается на новую позицию.
 
    Внутренние значения для функций ROW() и COL() могут отличаться от
    действительных, зафиксированных в BIOS, тогда, когда вывод
    осуществляется не через Clipper. Если функция SETRC() вызвана без
    параметров, то позиция, записанная в BIOS, будет установлена и для
    Clipper.
 
  Примечания
 
  . При задании отрицательных или превышающих максимально допустимые
    значения номеров строк или столбцов функцией производится их
    автоматическая коррекция.
 
  Примеры
 
  . Установка для Clipper и отображение значения строки и столбца по
    значениям из BIOS:
 
    SETRC()
    ? ROW(), COL()
 
  . Использование BIOS-строки и Clipper-столбца:
 
    SETRC( , COL() )
    ? ROW(), COL()
 
  . Использование Clipper-строки и BIOS-столбца:
 
    SETRC( ROW() )
    ? ROW(), COL()
 

 

 SETSCRSTR()
 Переключает режим вывода видеоинформации во внутреннюю память.
------------------------------------------------------------------------------


 
  Синтаксис
 
    SETSCRSTR([<lMode>]) --> lRedirected
 
  Параметры
 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. включение, а по умолчанию или при значении .F. выключение режима
    вывода видеоинформации во внутреннюю память.
 
  Возвращаемое значение
 
    lRedirected - логическое значение .T., если режим перенаправления во
    внутреннюю память включен, а иначе .F. (в том числе и при попытке
    включения режима при активном окне, а не физическом экране).
 
  Описание
 
    Функция позволяет включить режим вывода видеоинформации во внутреннюю
    память. При включении этого режима внутренняя память инициализируется
    способом, аналогичным очистке экрана Clipper-командой @ 0, 0 CLEAR. В
    эту область будет направляться вся выводимая через Clipper-драйвер или
    CT II-драйвер информация.
 
    Записанные сюда данные могут быть переданы в переменную с помощью
    функции GETSCRSTR() и выведены (после выключения этого режима)
    Clipper-функцией RESTSCREEN(). Поскольку направляется вся выводимая на
    физический экран информация (должно быть активно окно 0), то
    RESTSCREEN() следует передавать координаты границ физического экрана,
    то есть: 0, 0, MAXROW(), MAXCOL().
 
  Примечания
 
  . Внимание! Эту функцию нельзя вызывать при открытых окнах.
 
  . Для выполнения данной функции необходима прикомпоновка
    CT II-драйвера CT2US50.OBJ.
 
  . Видеовывод внешних программ, осуществляемый через DOS и BIOS,
    также может быть перенаправлен во внутреннюю память. Для этого в
    программе должен быть вызов DSETWINDOW(.T.).
 
  . Поскольку выводимая информация не появляется на экране при выводе
    во внутреннюю память, то система подавления эффекта "снега" может быть
    выключена с помощью вызова NOSNOW(.F.).
 
  . Для выключения отображения курсора можно пользоваться командой


  SET CURSOR OFF.
 
  Примеры
 
  . Переключение видеовывода возможно лишь при активном физическом
    экране:
 
    WSELECT(0)
    ? SETSCRSTR(.T.)            // . T. при включении режима скрытия
    @ 10, 10 SAY "XXXXXXX"      // Обычный вывод на экран (но он не отображается)
        *...
    @ 15, 10 SAY "YYYYYYY"
 
  . Получение образа экрана при скрытом выводе (GETSCRSTR() должна
    вызываться до SETSCRSTR(.F.)):
 
    cVar := GETSCRSTR()
    ? SETSCRSTR(.F.)            // .F. при выключении режима скрытия
    RESTSCREEN(0, 0, MAXROW(), MAXCOL(), cVar)
 

See Also: DSETWINDOW()
GETSCRSTR()
MAXCOL()
MAXROW()
CSETxxxx()*

 

 

 STANDARD()
 Устанавливает для вывода стандартное значение цвета.
------------------------------------------------------------------------------
 
  Синтаксис
 
    STANDARD() --> cNull
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция позволяет для вывода по Clipper-командам @ ... SAY и ?
    выбрать стандартный цветовой атрибут, ранее переключенный вызовом
    функций ENHANCED() или UNSELECTED(). Под стандартным понимается
    цветовой атрибут, заданный первым параметром команды SET COLOR TO.
 
  Примеры
 
  . Изменение атрибута на выделенный и возврат к стандартному:
 
    ? "........"
    ? "........"
    ENHANCED()
        ? "Другой атрибут!"
    STANDARD()
    ? "........"
    ? "........"
 

See Also: ENHANCED()
UNSELECTED()

 

 

 STRSCREEN()
 Выводит на экран строку символов с цветовыми атрибутами.
------------------------------------------------------------------------------
 
  Синтаксис
 
    STRSCREEN(<cCharString>, [<nRow>], [<nColumn>]) --> cNull
 
  Параметры
 
    <cCharString> - символьная строка, содержащая символы, сопровождаемые


    их цветовыми атрибутами.
 
    <nRow> - необязательный числовой параметр, задающий номер строки
    позиции начала вывода. По умолчанию строка текущей позиции курсора.
 
    <nColumn> - необязательный числовой параметр, задающий номер столбца
    позиции начала вывода. По умолчанию столбец текущей позиции курсора.
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция позволяет представить содержимое символьной переменной на
    экране, если она имеет правильный формат, то есть содержит символ, его
    атрибут, другой символ, его атрибут и т.д.
 
  Примечания
 
  . Внимание! Строка должна содержать байты атрибутов.
    Комбинированные цифровые атрибуты можно легко образовать с помощью
    функции COLORTON().
 
  . Функция не изменяет позиции курсора.
 
  Примеры
 
  . Вывод "ABC" с текущей позиции курсора с разными атрибутами для
    каждого символа:
 
    STRSCREEN("A"+CHR(1)+"B"+CHR(2)+"C"+CHR(3))
 
  . Вывод "ABC" с разными атрибутами с позиции текущего столбца
    курсора и строки 24:
 
    STRSCREEN("A"+CHR(1)+"B"+CHR(2)+"C"+CHR(3), 24)
 
  . Вывод "ABC" с разными атрибутами с позиции столбец 70, строка
    24:
 
    STRSCREEN("A"+CHR(1)+"B"+CHR(2)+"C"+CHR(3), 24, 70)
 

See Also: SCREENSTR()

 

 

 UNSELECTED()
 Устанавливает для вывода цвет невыбираемых элементов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    UNSELECTED() --> cNull
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция позволяет для вывода по Clipper-командам @ ... SAY и ?
    выбрать цветовой атрибут невыбираемых элементов, задаваемый пятым
    параметром команды SET COLOR TO.


Вернуться к стандартному атрибуту
    можно вызовом функции STANDARD().
 
  Примеры
 
    . Вывод с цветовым атрибутом невыбираемых элементов:
 
    ? "........"
    ? "........"
    UNSELECTED()
        ? "Другой атрибут!"
    STANDARD()
    ? "........"
    ? "........"
 

See Also: ENHANCED()
STANDARD()

 

 

 UNTEXTWIN()
 Замещает в заданной области экрана все символы, кроме указанной группы.
------------------------------------------------------------------------------
 
  Синтаксис
 
    UNTEXTWIN(<nTopLine>, <nLeftColumn>, <nBottomLine>,
        <nRightColumn>, <cReplChar|nReplChar>,
        [<cInitialChar|nInitialChar>], [<cEndChar|nEndChar>]) --> cNull
 
  Параметры
 
    <nTopLine> -номер строки верхнего левого угла области.
 
    <nLeftColumn> - номер столбца верхнего левого угла области.
 
    <nBottomLine> - номер строки нижнего правого угла области.
 
    <nRightColumn> - номер столбца нижнего правого угла области.
 
    <cReplChar|nReplChar> - код замещающего символа в формате символьной
    строки или в виде числового значения ASCII-кода в диапазоне от 0 до
    255.
 
    <cInitialChar|nInitialChar> - необязательный параметр, задающий
    символ, начинающий защищенную от замещения группу. Символ может быть
    задан в формате символьной строки или в виде числового значения
    ASCII-кода в диапазоне от 0 до 255. По умолчанию 176.
 
    <cEndChar|nEndChar> - необязательный параметр, задающий символ,
    завершающий защищенную от замещения группу. Символ может быть задан в
    формате символьной строки или в виде числового значения ASCII-кода в
    диапазоне от 0 до 255. По умолчанию 223.
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 


    Функция позволяет заменить указываемым символом в заданной области
    экрана все символы, не входящие в специальную защищенную группу.
    Защищенная группа это часть кодовой таблицы символов начинающаяся со
    значения параметра <cInitialChar|nInitialChar> и заканчивающаяся
    значением параметра <cEndChar|nEndChar>. По умолчанию группа включает
    в себя символы начиная с кода 176 и по 223 включительно, то есть
    псевдографические символы. Таким образом, можно очистить экран, но
    оставить обрамление.
 
    Защищенная группа может быть "раздвоена", если значение параметра
    <cEndChar|nEndChar> меньше <cInitialChar|nInitialChar>. В этом случае
    защищенная группа будет распространяться от большего значения до 255 и
    от 0 до меньшего значения, что фактически позволяет указать две
    защищенные группы.
 
  Примеры
 
  . Очистка экрана за исключением обрамлений. Поскольку границы
    опущены, защищенной будет группа символов с кодами от 176 до 223:
 
    UNTEXTWIN(0, 0, 24, 79, " ")                // ""
 
  . Очистка всех символов, за исключением латинских прописных
    букв (ASCII-коды 65-90). Пробел указан как замещающий символ:
 
    UNTEXTWIN(0, 0, 24, 79, 32, 65, 90)         // ""
 
  . "Раздвоение" группы для очистки всех прописных латинских букв
    (очищается группа с 65 по 90):
 
    UNTEXTWIN(0, 0, 24, 79, 255, 91, 64)        // ""
 

See Also: CLEARWIN()
CLWIN()

 

 

 VGAPALETTE()
 Изменяет цвета палитры VGA-адаптера.
------------------------------------------------------------------------------
 
  Синтаксис
 
    VGAPALETTE([<cColor|nColor> [,<nRedValue>, <nGreenValue>,
        <nBlueValue>]]) --> lValid
 
  Параметры
 
    <cColor|nColor> - необязателный параметр, задающий изменяемый цвет
    либо в буквенном Clipper-формате, либо в виде числа в диапазоне от 0


    до 15. Если остальные параметры опущены, то палитра этого цвета
    устанавливается в стандартное значение. По умолчанию в стандартные
    значения устанавливаются палитры всех цветов.
 
    <nRedValue> - необязательный числовой параметр, задающий значение
    красной составляющей палитры в диапазоне от 0 до 63.
 
    <nGreenValue> - необязательный числовой параметр, задающий значение
    зеленой составляющей палитры в диапазоне от 0 до 63.
 
    <nBlueValue> - необязательный числовой параметр, задающий значение
    синей составляющей палитры в диапазоне от 0 до 63.
 
  Возвращаемое значение
 
    lValid - логическое значение .T. при правильно заданных параметрах, а
    иначе .F..
 
  Описание
 
    VGA-адаптеры имеют значительно больше возможностей для выбора цветовой
    палитры, чем EGA-адаптеры.
 
    Тремя основными для синтеза цветов являются красный, зеленый и синий.
    Параметры <nRedValue>, <nGreenValue> и <nBlueValue> позволяют задать
    интенсивность трех основных компонент, используемых при образовании
    других цветов и получить, таким образом, различные сочетания. Каждое
    цветовое сочетание может быть присвоено одному или нескольким цветам,
    установленным с помощью команды SET COLOR TO.
 
    Если задан только параметр цвета, то его палитра устанавливается в
    соответствии со стандартным значением. При вызове функции без
    параметров восстановление стандартных значений осуществляется для всех
    цветов.
 
  Примечания
 
  . Восстановление палитр всех цветов осуществляется при вызове
    FONTRESET().
 
  Примеры
 
  . Установка палитры для цвета 3:
 
    ? VGAPALETTE("BG", 60, 4, 10)       // .T. при корректных значениях
 
  . Восстановление палитры красного цвета:
 
    VGAPALETTE("R")
 
  . Восстановление палитр всех цветов:
 
    VGAPALETTE()


 

See Also: EGAPALETTE()
FONTRESET()

 

 

 VIDEOINIT()
  Повторно инициализирует видеосистему после выполнения команды RUN.
------------------------------------------------------------------------------
 
  Синтаксис
 
    VIDEOINIT() --> NIL
 
  Возвращаемое значение
 
    Отсутствует.
 
  Описание
 
    Процедура позволяет инициализировать внутренние средства видеосистемы.
    Это может быть необходимо после работы внешних программ, запускаемых
    по команде RUN, или процедур из библиотек независимых разработчиков,
    если они изменяют видеорежим или какие-либо относящиеся к нему
    установки.
 
  Примечания
 
  . Если несмотря на то, что процедура не возвращает значение,
    записать например, Var := VIDEOINIT(), то переменная Var получит
    значение NIL.
 
  Примеры
 
  . Восстановление состояния видеосистемы после вызова внешней
    функции:
 
    RUN VGATEST.EXE
    VIDEOINIT()
 

 

 VIDEOSETUP()
 Возвращает код видеорежима, установленного при начальной загрузке.
------------------------------------------------------------------------------
 
  Синтаксис
 
    VIDEOSETUP() --> nVideoMode
 
  Возвращаемое значение
 
    nVideoMode - код видеорежима со значениями, соответствующими
    таблице:
 
    Таблица 6-5. Коды видеорежимов и их значения
    --------------------------------------------------------------------
    Код Режим
    --------------------------------------------------------------------
    0   Неопределенный видеорежим
    1   Монохромный в 40 столбцов на цветном видеоадаптере
    2   Монохромный в 80 столбцов на цветном видеоадаптере
    3   Монохромный в 80 столбцов на Hercules-адаптере или IBM-монохроме
    --------------------------------------------------------------------
 
  Описание
 
    В зависимости от типа используемого компьютера типа IBM PC/XT или AT,


    эта функция возвращает код конфигурации, установленной переключателями
    или записанный в CMOS-памяти.
 
  Примечания
 
  . VIDEOSETUP() всегда возвращает код видеорежима, установленный
    после начальной загрузки.
 
  Примеры
 
  . Вывод кода видеорежима монохромной системы:
 
    ? VIDEOSETUP()              // Результат: 3
 

See Also: ISEGA()
ISHERCULES()

 

 

 VIDEOTYPE()
 Возвращает битовую комбинацию доступных видеорежимов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    VIDEOTYPE() --> nVideoBitMode
 
  Возвращаемое значение
 
    nVideoBitMode - число, являющееся комбинацией битов, соответствующих
    доступным видеорежимам.
 
  Описание
 
    Функция возвращает комбинацию битов, соответствующую доступным
    видеорежимам. Например, Hercules является также монохромным адаптером,
    а VGA-адаптер может эмулировать различные режимы.  Соответствие битов
    режимам приведено в следующей таблице:
 
    Таблица 6-6. Кодирование видеоадаптеров
    --------------------------------------------------------------------
    Номер бита  Тип адаптера
    --------------------------------------------------------------------
    1           Монохромный
    2           CGA
    3           Hercules
    4           MCGA
    5           PGA
    6           EGA
    7           VGA
    --------------------------------------------------------------------
 
    Поскольку адаптеры имеют возможность эмулировать другие видеорежимы,
    то, как правило, возвращаются следующие числовые коды:
 
    Таблица 6-7. Возвращаемые числовые значения
    --------------------------------------------------------------------
    Число Симв. константа       Тип адаптера
    --------------------------------------------------------------------
    1     VCARD_MONOCHROME      Монохромный
    2     VCARD_CGA             CGA


    5     VCARD_HERCULES        Hercules, также эмулирует монохромный
                                режим
    10    VCARD_MCGA            MCGA, также эмулирует CGA
    19    VCARD_PGA             PGA, также эмулирует CGA и монохромный
                                режим
    55    VCARD_EGA             EGA, эмулирует все указанные выше режимы,
                                кроме MCGA
    127   VCARD_VGA             VGA, эмулирует все указанные выше режимы
    --------------------------------------------------------------------
 
  Примечания
 
  . Внимание! Функция предполагает полную совместимость аппаратных
    средств со стандартом IBM.
 
  Примеры
 
  . Определение VGA-адаптера:
 
    IF ISBIT(VIDEOTYPE(), 7)
        *...
    ENDIF
 
  . Определение возможности работы в CGA-режиме:
 
    IF ISBIT(VIDEOTYPE(), 2)
        *...
    ENDIF
 

See Also: ISCGA()
ISEGA()
ISHERCULES()
ISMCGA()
ISMONO()
ISVGA()

 

 

 Введение в дисковые функции
------------------------------------------------------------------------------
 DELETEFILE()  Удаляет файл, обеспечивая возможность обработки ошибок
 DIRCHANGE()   Назначает заданную директорию текущей
 DIRMAKE()     Создает новую директорию
 DIRNAME()     Возвращает имя текущей директории
 DIRREMOVE()   Удаляет заданную директорию
 DISKCHANGE()  Назначает заданный диск текущим
 DISKCHECK()   Подсчитывает контрольную сумму информации на диске
 DISKFORMAT()  Форматирует дискеты под контролем функции пользователя
 DISKFREE()    Возвращает размер свободного пространства на диске
 DISKNAME()    Возвращает имя текущего диска
 DISKREADY()   Проверяет готовность дисковода
 DISKREADYW()  Проверяет возможность записи на диск
 DISKSPEED()   Возвращает величину оценки быстродействия дисковода
 DISKSTAT()    Возвращает код состояния дисковода
 DISKTOTAL()   Возвращает общую емкость диска
 DISKTYPE()    Возвращает тип носителя данных
 DRIVETYPE()   Возвращает тип диска


 FILEAPPEND()  Осуществляет добавление в файл
 FILEATTR()    Возвращает комбинацию битов атрибутов файла
 FILECCLOSE()  Закрывает файл, для которого создавалась резервная копия
 FILECCONT()   Копирует очередную часть файла на следующий диск
 FILECDATI()   Переключает режим использования времени при копировании
 FILECHECK()   Подсчитывает контрольную сумму файла
 FILECOPEN()   Возвращает признак открытия файла в режиме копирования
 FILECOPY()    Выполняет обычное или резервное копирование файлов
 FILEDATE()    Возвращает дату создания файла
 FILEDELETE()  Удаляет файл или группу файлов по имени и атрибуту
 FILEMOVE()    Перемещает файлы в другую директорию
 FILESEEK()    Осуществляет поиск файлов по имени и атрибуту
 FILESIZE()    Возвращает размер файла
 FILESTR()     Возвращает считанный сегмент файла в виде строки
 FILETIME()    Возвращает время создания файла
 FILEVALID()   Проверяет, содержит ли символьная строка корректное имя файла
 FLOPPYTYPE()  Возвращает тип дисковода гибких дисков
 GETSHARE()    Возвращает код режима совместного доступа к файлам
 NUMDISKF()    Возвращает количество дисководов гибких дисков
 NUMDISKH()    Возвращает количество дисководов жестких дисков
 NUMDISKL()    Возвращает количество доступных логических дисков
 RENAMEFILE()  Переименовывает файл, обеспечивая возможность обработки ошибок
 RESTFSEEK()   Восстанавливает сохраненную ранее среду функции FILESEEK()
 SAVEFSEEK()   Сохраняет среду функции FILESEEK()
 SETFATTR()    Изменяет комбинацию атрибутов существующего файла
 SETFCREATE()  Устанавливает стандартную комбинацию атрибутов файлов
 SETFDATI()    Изменяет дату и время создания существующего файла
 SETSHARE()    Устанавливает режим открытия файлов при совместном доступе
 STRFILE()     Записывает символьную строку в файл
 TEMPFILE()    Создает временный рабочий файл с уникальным именем
 TRUENAME()    Преобразует заданный путь доступа к стандартной форме
 VOLSERIAL()   Возвращает серийный номер, записанный при форматировании


 VOLUME()      Записывает метку тома на гибкий или жесткий диск
 

 

  Введение
 
------------------------------------------------------------------------------
 
  Критические ошибки
 
    Одной из самых сложных проблем при создании надежных прикладных
    программ является обработка ошибок. Ошибки во время операций с жестким
    или гибким диском относятся к числу наиболее неприятных.  Часто
    встречаются критические ошибки, при которых программа или операционная
    система не могут продолжать работу с устройством. В этом случае
    появляется сообщение об ошибке DOS, предлагающее выбрать одну из
    альтернатив - (A)bort, (R)etry, (I)gnore.
 
  Как избежать ошибок
 
    На вышеупомянутые сообщения можно реагировать с помощью функций
    перехвата ошибок, но лучше применить стратегию, позволяющую вовсе
    избежать формирования сообщений об ошибках. Для этого в Clipper Tools
    II/5.0 (CT II) включены функции, облегчающие обработку ошибок,
    относящихся к гибким и жестким дискам, а также функции, препятствующие
    формированию системных сообщений об исключительных ситуациях.
 
  Средства поддержания целостности системы
 
    Средства поддержания целостности системы, вызываемые из прикладных
    Clipper-программ, представляют собой еще одну область применения
    включенных в данную главу функций. В этой связи, в частности, можно
    рассматривать форматирование диска с использованием функции
    DISKFORMAT() и рекурсивное использование функции FILESEEK() для
    прохода полного дерева директорий с получением детальной информации по
    любому файлу.
 
    Все это, вместе с системой резервного копирования, позволяет сделать
    последний процесс как полностью программно управляемым, так и в
    значительной степени повысить его эффективность, осуществляя,
    например, копирование лишь измененных файлов.
 
    Чтобы избежать досадных неприятностей и в частности неудачного запуска


    форматирования командой "RUN FORMAT", требуемые гибкие диски могут
    форматироваться непосредственно прикладной программой во всех
    общедоступных форматах. Поскольку функция пользователя, присоединяемая
    к DISKFORMAT(), использует принцип, аналогичный функции пользователя,
    присоединяемой к DBEDIT(), то для процедуры форматирования может быть
    организовано отображение текущей стадии процесса.
 
    Кроме того, с помощью описываемых в данной главе функций может быть
    получена разнообразная информация, относящаяся к дискам и файлам.
 
  Атрибуты файлов
 
    Многие описываемые в данной главе функции работают с атрибутами
    файлов, приведенными в таблице:
 
    Таблица 1. Кодирование атрибутов файлов
    --------------------------------------------------------------------
    Бит Число   Симв. константа Присвоенный файловый атрибут
    --------------------------------------------------------------------
        0       FA_NORMAL       Файловых атрибутов не присвоено
    1   1       FA_READONLY     READ ONLY (файл только для чтения)
    2   2       FA_HIDDEN       HIDDEN (скрытый файл)
    3   4       FA_SYSTEM       SYSTEM (системный файл)
    4   8       FA_VOLUME       VOLUME (метка тома диска)
    5   16      FA_DIRECTORY    DIR (директория)
    6   32      FA_ARCHIVE      ARCHIVE (после резервного копирования были
                                внесены изменения)
    --------------------------------------------------------------------
 
    Для задания комбинации атрибутов файлов следует суммировать
    соответствующие им числовые значения. Так например, для использования
    атрибутов HIDDEN и SYSTEM функции в качестве параметра должна быть
    передана величина 6 (2+4).
 
    Атрибуты файлов неодинаковы по своему значению и использованию.
    Атрибуты HIDDEN, SYSTEM, VOLUME и DIR должны быть указаны явно.
 
    С другой стороны, при отсутствии атрибутов, либо при атрибутах


    READ ONLY и ARCHIVE передаваемое значение не играет роли. Эти правила
    использования атрибутов заложены в DOS, сравнивающей задаваемые
    значения с действительными атрибутами файлов. Поскольку при
    определенных обстоятельствах это может вызвать затруднения, функция
    FILESEEK() обеспечивает выбор файлов по точному совпадению комбинации
    атрибутов.
 
  Совместный доступ к файлам
 
    При вызове функцией DOS-команд открытия файлов под управлением
    DOS версии 3.0 или выше открытие осуществляется с заданием режима
    совместного доступа. Это позволяет рабочей станции указать, каким
    образом все другие станции в сети могут получить доступ к открытому
    ею файлу. Заданный режим действует до тех пор, пока файл остается
    открытым данной рабочей станцией и кодируется следующим образом:
 
    Таблица 2. Режимы совместного доступа к файлам
    --------------------------------------------------------------------
    Код Назначение режима
    --------------------------------------------------------------------
    0   Режим совместимости, в котором DOS или сетевая операционная
        система сами определяют режим. В сетях Novell важную роль играет
        специальный атрибут SHAREABLE
    1   Запрет чтения и записи в файл другими программами
    2   Запрет записи в файл другими программами
    3   Запрет чтения файла другими программами
    4   Разрешение чтения и записи в файл другими программами
    --------------------------------------------------------------------
 
    В исходном состоянии, определяемом внутренними системными переменными
    CT II, все файлы открываются в режиме совместимости (по отношению к
    DOS старых версий). Режим совместного доступа при этом, как правило,
    зависит от атрибутов файлов или от  параметров сетевого окружения.
 
    Кроме того, режим совместного доступа, в котором функции CT II
    открывают файлы, может быть установлен с помощью описываемой в данной


    главе функции SETSHARE(). При этом не оказывается никакого влияния на
    Clipper-команды и Clipper-функции.
 
  CSETSAFETY()
 
    Управление защитой существующих файлов от нежелательной перезаписи
    во время работы CT II функций можно осуществить при помощи функции
    CSETSAFETY(), описанной в главе "Функции переключателей" и имеющей
    отношение ко всем файловым операциям, выполняемым с использованием
    CT II.
 

 

 DELETEFILE()
 Удаляет файл, обеспечивая возможность обработки ошибок.
------------------------------------------------------------------------------
 
  Синтаксис
 
    DELETEFILE(<cFileName>) --> nErrorCode
 
  Параметры
 
    <cFileName> - символьная строка, содержащая необязательные имя диска и
    путь доступа и обязательное имя файла. По умолчанию используются
    текущий диск и текущая директория.
 
  Возвращаемое значение
 
    nErrorCode - числовое значение кода результата, приведенное в таблице:
 
    Таблица 7-1. Коды результатов выполнения функции DELETEFILE()
    --------------------------------------------------------------------
    Код Символьная константа    Значение
    --------------------------------------------------------------------
    0   NO_DISK_ERR             Ошибки нет
    -2  ER_FILE_NOT_FOUND       Файл не найден
    -3  ER_PATH_NOT_FOUND       Путь доступа не найден
    -5  ER_ACCESS_DENIED        Отказ доступа (напр., файл доступен
                                только для чтения)
    --------------------------------------------------------------------
 
  Описание
 
    Функция удаляет файл с конкретным именем, не допуская, в отличие от
    функции FILEDELETE(), использования универсальных символов
    сопоставления для выделения группы файлов. При возникновении в
    процессе удаления ошибочных ситуаций сообщения DOS об ошибках не
    формируются, а код ошибки возвращается вызывавшей программе.


Это
    позволяет организовывать адаптивную обработку ошибочных ситуаций,
    например, при работе в сети.
 
  Примеры
 
  . В сетевом окружении такой способ удаления может завершиться
    аварийно:
 
    IF FILE("TEST.DBF")
        * Можно ли на самом деле удалить этот файл?
        DELETE FILE TEST.DBF
    ENDIF
 
  . Удаление файла в сетевом окружении:
 
    nStatus := DELETEFILE("TEST.DBF")
    IF nStatus == 0
        ? "Файл удален."
    ELSE
        IF nStatus == -5
                ? "ОТКАЗ ДОСТУПА!"
                ? "Файл используется кем-то еще!"
        ENDIF
    ENDIF
 

See Also: FILEDELETE()
RENAMEFILE()

 

 

 DIRCHANGE()
 Назначает заданную директорию текущей.
------------------------------------------------------------------------------
 
  Синтаксис
 
    DIRCHANGE(<cDirectory>) --> nErrorCode
 
  Параметры
 
    <cDirectory> - символьная строка, содержащая необязательные имя диска
    и путь доступа и обязательное имя директории. По умолчанию
    используются текущий диск и, в качестве пути доступа, текущая
    директория.
 
  Возвращаемое значение
 
    nErrorCode - числовое значение кода результата, приведенное в таблице:
 
    Таблица 7-2. Коды результатов выполнения функции DIRCHANGE()
    --------------------------------------------------------------------
    Код Символьная константа    Значение
    --------------------------------------------------------------------
    0   NO_DISK_ERR             Ошибки нет
    -2  ER_FILE_NOT_FOUND       Файл не найден
    -3  ER_PATH_NOT_FOUND       Путь доступа не найден
    -5  ER_ACCESS_DENIED        Отказ доступа (напр., в сети)
    --------------------------------------------------------------------
 
  Описание
 
    Функция позволяет назначить в качестве текущей заданную директорию.
    Обработка возвращаемого кода позволяет избежать сообщений DOS об


    ошибках в дальнейшем (при неудачном назначении).
 
  Примечания
 
  . Не допускается использование в параметрах универсальных символов
    сопоставления для задания групповых имен.
 
  Примеры
 
  . Назначение директории "\DATA" текущей:
 
    IF DIRCHANGE("\DATA") == 0
        ? "Текущая директория: " + DIRNAME()
    ENDIF
 

See Also: DIRMAKE()
DIRNAME()
DIRREMOVE()

 

 

 DIRMAKE()
 Создает новую директорию.
------------------------------------------------------------------------------
 
  Синтаксис
 
    DIRMAKE(<cDirectory>) --> nErrorCode
 
  Параметры
 
    <cDirectory> - символьная строка, содержащая необязательные имя диска
    и путь доступа и обязательное имя директории. По умолчанию
    используются текущий диск и, в качестве пути доступа, текущая
    директория.
 
  Возвращаемое значение
 
    nErrorCode - числовое значение кода результата, приведенное в таблице:
 
    Таблица 7-3. Коды результатов выполнения функции DIRMAKE()
    --------------------------------------------------------------------
    Код Символьная константа    Значение
    --------------------------------------------------------------------
    0   NO_DISK_ERR             Ошибки нет
    -3  ER_PATH_NOT_FOUND       Путь доступа не найден
    -5  ER_ACCESS_DENIED        Отказ доступа (напр., в сети)
    --------------------------------------------------------------------
 
  Описание
 
    Функция позволяет создавать новые директории во время работы
    прикладной программы. При создании новой директории текущая директория
    не изменяется.
 
  Примечания
 
  . Не допускается использование в параметрах универсальных символов
    сопоставления для задания групповых имен.
 
  Примеры
 
  . Создание ранее отсутствующей директории:
 
    IF DIRCHANGE("\DATA") == -3


        DIRMAKE("\DATA")                // Путь доступа не найден
    ENDIF
 

See Also: DIRCHANGE()
DIRNAME()
DIRREMOVE()

 

 

 DIRNAME()
 Возвращает имя текущей директории.
------------------------------------------------------------------------------
 
  Синтаксис
 
    DIRNAME([<cDrive>]) --> cDirectory
 
  Параметры
 
    <cDrive> - необязательный символьный параметр, задающий имя диска в
    виде буквы с необязательным символом ":". По умолчанию используется
    текущий диск.
 
  Возвращаемое значение
 
    cDirectory - символьная строка, содержащая имя текущей директории на
    диске, заданном параметром <cDrive>, или пустая строка, если имя диска
    задано некорректно.
 
  Описание
 
    Функция возвращает имя текущей директории на заданном диске, что
    позволяет использовать ее, например, для конструирования полного пути
    доступа.
 
  Примечания
 
  . Максимальная длина возвращаемой строки 65 символов.
 
  Примеры
 
  . Вывод имени текущей директории:
 
    ? " Текущая директория: " + DIRNAME()
 
  . Вывод имени текущей директории на заданном дисководе:
 
    ? DIRNAME("A")              // Текущая директория на дисководе A:
 

See Also: DIRCHANGE()
DIRMAKE()
DIRREMOVE()

 

 

 DIRREMOVE()
 Удаляет заданную директорию.
------------------------------------------------------------------------------
 
  Синтаксис
 
    DIRREMOVE(<cDirectory>) --> nErrorCode
 
  Параметры
 
    <cDirectory> - символьная строка, содержащая необязательные имя диска
    и путь доступа и обязательное имя директории. По умолчанию
    используются текущий диск и, в качестве пути доступа, текущая
    директория.
 
  Возвращаемое значение
 
    nErrorCode - числовое значение кода результата, приведенное в
    таблице:


 
    Таблица 7-4. Коды результатов выполнения функции DIRREMOVE()
    --------------------------------------------------------------------
    Код Символьная константа    Значение
    --------------------------------------------------------------------
     0  NO_DISK_ERR             Ошибки нет
    -3  ER_PATH_NOT_FOUND       Путь доступа не найден
    -5  ER_ACCESS_DENIED        Отказ доступа (напр., в сети)
    -16                         Текущая директория не может быть удалена
    --------------------------------------------------------------------
 
  Описание
 
    Функция позволяет удалить заданную директорию во время выполнения
    Clipper-программы. Таким образом, обеспечивается возможность
    освобождения дискового пространства, занимаемого пустыми директориями.
 
  Примечания
 
  . Не допускается использование в параметрах универсальных символов
    сопоставления для задания групповых имен.
 
  . Функция позволяет удалять только пустые директории.
 
  . С помощью функции нельзя удалить текущую директорию.
 
  Примеры
 
  . Удаление директории с именем "\DATA":
 
    IF DIRREMOVE("\DATA") == 0
        ? "Директория удалена."
    ENDIF
 

See Also: DIRCHANGE()
DIRMAKE()
DIRNAME()

 

 

 DISKCHANGE()
 Назначает заданный диск текущим.
------------------------------------------------------------------------------
 
  Синтаксис
 
    DISKCHANGE(<cDrive>) --> lChanged
 
  Параметры
 
    <cDrive> - символьная строка, задающая имя дисковода в виде буквы с
    необязательным символом ":".
 
  Возвращаемое значение
 
    lChanged - логическое значение .T. при успешном назначении, а иначе
    .F..
 
  Описание
 
    Функция позволяет назначить заданный диск текущим.
 
  Примеры
 
  . Переключение на дисковод С:
 
    ? DISKCHANGE("C")           // .T.


при успешном переключении
 

See Also: DIRCHANGE()
DISKNAME()

 

 

 DISKCHECK()
  Подсчитывает контрольную сумму информации на диске.
------------------------------------------------------------------------------
 
  Синтаксис
 
    DISKCHECK(<cDrive>, [<nStartSector>]) --> nCheckSum
 
  Параметры
 
    <cDrive> - символьная строка, задающая имя дисковода в виде буквы с
    необязательным символом ":".
 
    <nStartSector> - необязательный числовой параметр, задающий номер
    начального сектора контролируемой области диска. Контроль
    осуществляется в направлении от этого сектора к первому. По умолчанию
    номер последнего сектора диска.
 
  Возвращаемое значение
 
    nCheckSum - положительное число, соответствующее контрольной сумме,
    отрицательное число, абсолютное значение которого является номером
    сектора, содержащего ошибку, или (-1) при ошибке, характер которой
    должен быть уточнен дополнительно.
 
  Описание
 
    Функция начинает контрольное суммирование с заданного параметром
    <nStartSector> сектора и осуществляет его в направлении к первому
    сектору диска. Если в процессе контроля не было обнаружено ошибок, то
    возвращается подсчитанная контрольная сумма, облегчающая выявление
    внесенных на диск изменений. При обнаружении сектора, чтение которого
    выполняется с ошибкой, функция завершает контроль и возвращает его
    номер в виде отрицательного числа.
 
  Примечания
 
  . При возвращении значения (-1) причину ошибки следует уточнить с
    помощью функции ERRORCODE().
 
  . Параметр <cDrive> является обязательным. Если он опущен или задано
    недоступное устройство, то возвращается величина (-1).
 
  . Подсчет контрольной суммы для жесткого диска может занять
    значительное время.
 
  Примеры
 
  . Вычисление контрольной суммы для гибкого диска:


 
    Checksum := DISKCHECK("A")
 
  . Последующая проверка замены гибкого диска:
 
    IF DISKCHECK("A") == Checksum
        ? "Дискета не заменена!"
    ENDIF
 

See Also: ERRORCODE()
FILECHECK()

 

 

 DISKFORMAT()
  Форматирует дискеты под контролем функции пользователя.
------------------------------------------------------------------------------
 
  Синтаксис
 
    DISKFORMAT(<cDrive>, [<nCapacity>], [<cUDF>],
        [<cBootText>], [<nRepetitions>]) --> nErrorCode
 
  Параметры
 
    <cDrive> - символьная строка, задающая имя дисковода в виде буквы с
    необязательным символом ":".
 
    <nCapacity> - необязательный числовой параметр, задающий форматируемую
    емкость дискеты в Кбайтах. Для дискет диаметром 5.25 дюйма допустимы
    значения 160, 180, 320, 360, 1200, а для дискет диаметром 3,5 дюйма
    допустимы значения 720 и 1440. По умолчанию используется максимальная
    форматируемая емкость для заданного дисковода.
 
    <cUDF> - необязательный символьный параметр, задающий имя функции
    пользователя, вызываемой перед каждым новым шагом форматирования.
    По умолчанию вызов функция пользователя не производится.
 
    <cBootText> - необязательный символьный параметр, задающий текст
    длиной до 255 символов, выводимый на экран при попытке загрузки с
    форматируемой дискеты. Значение по умолчанию приведено в подразделе
    Примечания.
 
    <nRepetitions> - необязательный числовой параметр, задающий количество
    повторных попыток в случае неудачного форматирования дорожки.
    По умолчанию 1.
 
  Возвращаемое значение
 
    nErrorCode - числовой код результата, приведенный в следующей таблице:
 
    Таблица 7-5. Коды результатов выполнения функции DISKFORMAT()
    --------------------------------------------------------------------


    Код Символьная константа    Значение
    --------------------------------------------------------------------
    0   NO_DISK_ERROR           Форматирование успешно завершено
    -1  DF_WRONG_DRIVE          Задано недопустимое устройство, отличное
                                от A: или B:
    -2  DF_WRONG_DISK_SIZE      Задан неподдерживаемый формат диска
    -3  DF_INTERRUPTED          Прервано функцией пользователя
    -4  DF_WRITE                Ошибка при записи
    --------------------------------------------------------------------
 
  Описание
 
    Функция позволяет форматировать дискеты под контролем функции
    пользователя и освобождает от необходимости вызова DOS-программы
    FORMAT с помощью Clipper-команды RUN. Однако она не позволяет
    формировать дискеты, используемые для загрузки компьютера.
 
    Переход с дорожки на дорожку и с головки на головку предваряется
    вызовом функции пользователя с передачей значений их номеров в
    качестве параметров. Это позволяет строить желаемое визуальное
    отображение прохождения процесса форматирования.
 
    Функция позволяет форматировать только гибкие диски, поэтому при
    непреднамеренном задании имени жесткого диска действия не
    производятся. Функция обеспечивает форматирование гибких дисков
    стандартной емкости: 160, 180, 320, 720 Кбайтов, 1.2 и 1.44 Мбайтов.
 
    Уменьшение количества повторных попыток позволяет увеличить
    эффективность форматирования. По умолчанию после неудачной попытки
    форматирования дорожки выполняется только еще одна попытка. Если и эта
    попытка неудачна, то форматирование прерывается.  Для получения
    большей уверенности в качестве форматируемого гибкого диска следует
    задавать 0 попыток.
 
    Контроль форматирования функцией пользователя
 
    Функция пользователя, имя которой задается параметром <cUDF>,
    вызывается с передачей ей всегда двух параметров. Первый содержит


    номер дорожки, а второй - головки, форматирование которых должно
    быть начато после возврата управления из функции пользователя. По
    завершению форматирования всех дорожек функция пользователя
    вызывается со значениями обоих параметров равными (-1), после чего
    производится инициализация FAT, зоны директорий и запись текста,
    выводимого при попытке загрузки с дискеты.
 
    Возвращаемое функцией пользователя числовое значение, описанное в
    таблице, позволяет управлять дальнейшими действиями по форматированию:
 
    Таблица 7-6. Значения кодов, возвращаемых функцией пользователя
    --------------------------------------------------------------------
    Код Дальнейшие действия, выполняемые функцией DISKFORMAT()
    --------------------------------------------------------------------
    0   Продолжить форматирование
    1   Не форматировать дорожку, указанную первым параметром
    2   Прекратить форматирование
    --------------------------------------------------------------------
 
  Примечания
 
  . Если заданная параметром <cUDF> функция пользователя не
    прикомпонована, то программа прерывается с формированием сообщения об
    ошибке времени выполнения. Для формирования в процессе компоновки
    предупреждения об отсутствии функции пользователя в исходный текст
    программы следует включить оператор EXTERNAL <список процедур>.
 
  . При попытке загрузки с дискеты, отформатированной данной функцией,
    на экран выводится текст, задаваемый параметром <cBootText> и имеющий
    по умолчанию следующее содержание:
 
    "No system disk. Insert new disk, press any key to continue"
    ("Несистемный диск. Вставьте другой диск и нажмите любую клавишу")
 
  . Форматирование гибкого диска начинается с дорожки с максимальным
    номером. Благодаря этому существующие FAT и область директорий будут
    уничтожены в последнюю очередь.
 


  . Форматирование дорожки производится вне зависимости от того, была
    ли она ранее отформатирована. При успешном завершении все данные
    оказываются стерты.
 
  . После форматирования каждой дорожки осуществляется ее проверка.
 
  Примеры
 
  . Форматирование дискеты в дисководе A: начинается с проверки,
    поддерживает ли дисковод заданную емкость. Функция пользователя
    CONTROL() осуществляет отображение номеров форматируемых дорожки и
    головки. Чтобы не снижать скорость, повторение при сбоях не
    производится, что предполагает использование дискет только высшего
    качества.
 
  . Для демонстрации возможностей функции пользователя форматируются
    только дорожки с 80 по 11, а дорожки с 1 по 10 пропускаются:
 
    CLEAR
    cBootText := "Это несистемная дискета" // Текст, отображаемый
                                           // при попытке загрузки.
    @ 10, 02 SAY "Дорожка: "
    @ 11, 02 SAY "Головка: "
    IF FLOPPYTYPE("A:") = 2                // Дисковод емкостью 1.2 Мбайта
        nErrCode := DISKFORMAT("A:", 1200, "CONTROL", cBootText, 0)
        IF nErrCode = 0
              ? "Форматирование успешно завершено!"
        ENDIF
    ENDIF
    RETURN
 
    FUNCTION CONTROL(nTrack, nHead)
        LOCAL nRetval
        IF nTrack >= 11
                @ 10, 08 SAY STR(nTrack)
                @ 11, 08 SAY STR(nHead)
                nRetval := 0               // Продолжить форматирование
        ELSE
                nRetval := 2               // Прервать форматирование
        ENDIF
        RETURN
 
  . Функция пользователя, обеспечивающая прерывание форматирования по
    нажатию клавиши <ESC>. При нормальном завершении выводится
    соответствующее сообщение:
 
    FUNCTION CONTROL(nTrack, nHead)
        LOCAL nRetval
        IF INKEY() = 27
                nRetval := 2               // Прервать форматирование


        ELSE
                nRetval := 0               // Продолжить форматирование
        ENDIF
        IF nTrack = -1
                @ 10, 10 SAY "Инициализация FAT и корневой директории!"
        ENDIF
        RETURN (nRetval)
 

See Also: DRIVETYPE()
FLOPPYTYPE()

 

 

 DISKFREE()
  Возвращает размер свободного пространства на диске.
------------------------------------------------------------------------------
 
  Синтаксис
 
    DISKFREE([<cDrive>]) --> nFreeByte
 
  Параметры
 
    <cDrive> - необязательный символьный параметр, задающий имя диска в
    виде буквы с необязательным символом ":". По умолчанию используется
    текущий диск.
 
  Возвращаемое значение
 
    nFreeByte - число байтов свободного дискового пространства.
 
  Описание
 
    Функция позволяет определить, имеется ли на диске достаточно места,
    например, для копирования.
 
  Примеры
 
  . Определение наличия достаточного места на диске:
 
    Required := DBFSIZE()                       // Требуемый объем
    IF DISKFREE("A") < Required
        ? "Недостаточно дискового пространства для копирования!"
    ENDIF
 

See Also: DISKTOTAL()

 

 

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


 

See Also: DIRNAME()

 

 

 DISKREADY()
 Проверяет готовность дисковода.
------------------------------------------------------------------------------
 
  Синтаксис
 
    DISKREADY([<cDrive>], [<lDOS/BIOS>]) --> lDiskReady
 
  Параметры
 
    <cDrive> - необязательный символьный параметр, задающий имя диска в
    виде буквы с необязательным символом ":". По умолчанию используется
    текущий диск.
 
    <lDOS/BIOS> - необязательный логический параметр, задающий при
    значении .T. обращение к дисководу через DOS, а при значении .F. или
    по умолчанию через BIOS.
 
  Возвращаемое значение
 
    lDiskReady - логическое значение .T. при готовности дисковода к
    использованию и при задании имени сетевого или жесткого диска, а иначе
    .F..
 
  Описание
 
    Функция позволяет проверить готовность дисковода. При копировании на
    несколько дискет это часто необходимо для того, чтобы дожидаясь
    готовности дисковода, избегать формирования сообщений DOS и
    необходимости перехвата ошибок Clipper-средствами.
 
    Тестирование через DOS или BIOS
 
    При тестировании дисководов гибких дисков (A: и B:) через DOS для
    дисковода, находящегося в неготовности, на экран выводится сообщение
    (напр., для дисковода B:): "Please insert disk in drive B:..."
    (Пожалуйста, установите дискету в дисковод B:). При тестировании же
    через BIOS сообщения не формируются. Кроме того, если для A: и/или B:
    осуществлена подстановка сетевых устройств, то они рассматриваются как
    жесткие диски. В общем случае функция возвращает значение выражения:
 
    NETDISK(<cDrive>) .OR.<cDrive> >= "C" .OR. <готовность дисковода>
 
    Таким образом, как для сетевых устройств, так и для жестких дисков
    всегда возвращается .T..
 
  Примеры
 
  . Ожидание готовности дисковода между шагами копирования:


 
    DO Copy                     // Вызов процедуры копирования
    ? "Пожалуйста, установите дискету в дисковод A:!"
    DO WHILE .NOT. DISKREADY("A")
        *...
    ENDDO
    DO Copy                     // Вызов процедуры копирования
 

See Also: DISKREADYW()

 

 

 DISKREADYW()
 Проверяет возможность записи на диск.
------------------------------------------------------------------------------
 
  Синтаксис
 
    DISKREADYW([<cDrive>], [<lDOS/BIOS>]) --> lDiskReady
 
  Параметры
 
    <cDrive> - необязательный символьный параметр, задающий имя диска в
    виде буквы с необязательным символом ":". По умолчанию используется
    текущий диск.
 
    <lDOS/BIOS> - необязательный логический параметр, задающий при
    значении .T. обращение к дисководу через DOS, а при значении .F. или
    по умолчанию через BIOS.
 
  Возвращаемое значение
 
    lDiskReady - логическое значение .T. при готовности дисковода к
    использованию и при задании имени сетевого или жесткого диска, а иначе
    .F..
 
  Описание
 
    Функция позволяет проверить готовность дисковода, в том числе, и к
    проведению операции записи. При копировании на несколько дискет это
    часто необходимо для того, чтобы дожидаясь готовности дисковода,
    избегать формирования сообщений DOS и необходимости перехвата ошибок
    Clipper-средствами.
 
    Сетевые устройства
 
    Для сетевых устройств функция обычно возвращает .T., рассматривая их
    как доступные для создания, открытия и стирания файлов. Эти права в
    сетях, подобных Novell, могут быть назначены раздельно, и поэтому
    необходима их соответствующая проверка. В сетях Novell для этого можно
    использовать функции NETDISK() и NNETRIGHTS(), описанные в главе
    "Сетевые функции".
 
    Тестирование через DOS или BIOS
 
    При тестировании дисководов гибких дисков (A: и B:) через DOS для


    дисковода, находящегося в неготовности, на экран выводится сообщение
    (напр., для дисковода B:): "Please insert disk in drive B:..."
    (Пожалуйста, установите дискету в дисковод B:). При тестировании же
    через BIOS сообщения не формируются. Кроме того, если для A: и/или B:
    осуществлена подстановка сетевых устройств, то они рассматриваются как
    жесткие диски. В общем случае функция возвращает значение выражения:
 
    NETDISK(<cDrive>) .OR.<cDrive> >= "C" .OR. <готовность дисковода>
 
    Таким образом, как для сетевых устройств, так и для жестких дисков
    всегда возвращается .T..
 
  Примечания
 
  . Вызов функции под управлением OS/2 в окне совместимости с DOS
    рекомендуется осуществлять с заданием тестирования через BIOS.
 
  Примеры
 
  . Проверка доступности записи на диск в зависимости от его сетевого
    статуса:
 
      IF DISKREADY("A")
        IF NETDISK("A")
                IF NNETRIGHTS("A:\")    // Полный путь
                * ...
                ENDIF
        ELSE
                IF DISKREADYW("A")
                ? "Дискета не защищена от записи!"
                ELSE
                ? "Дискета защищена от записи!"
                ENDIF
        ENDIF
      ELSE
        ? "Дисковод не готов!"
      ENDIF
 

See Also: DISKREADY()
NETDISK()
NNETRIGHTS()

 

 

 DISKSPEED()
 Возвращает величину относительной оценки быстродействия дисковода.
------------------------------------------------------------------------------
 
  Синтаксис
 
    DISKSPEED(<cDrive>) --> nDriveSpeed
 
  Параметры
 
    <cDrive> - символьная строка, задающая имя дисковода в виде буквы с
    необязательным символом ":".
 
  Возвращаемое значение
 
    nDriveSpeed - число процентов, где 100% соответствуют скорости


    дисковода для гибких дисков IBM PC с частотой 4.77 Мгц. Если заданный
    диск недоступен или является сетевым, возвращается 0.
 
  Описание
 
    Возвращаемое функцией значение можно использовать для оценки времени
    выполнения сложных файловых команд таких, как INDEX или SORT.
    Поскольку общее время, кроме того, зависит от быстродействия ЭВМ,
    следует использовать также и функцию SPEED().
 
  Примечания
 
  . Функцию нельзя использовать для сетевых устройств.
 
  Примеры
 
  . Определение быстродействия дисковода A:
 
    ? DISKSPEED("A")            // Результат зависит от устройства
 
  . Определение скорости для жесткого диска:
 
    ? DISKSPEED("C")            // Например, 720 (коэффициент скорости 7.2)
 

See Also: SPEED()

 

 

 DISKSTAT()
 Возвращает код состояния дисковода.
------------------------------------------------------------------------------
 
  Синтаксис
 
    DISKSTAT([<cDrive>]) --> nStatus
 
  Параметры
 
    <cDrive> - необязательный символьный параметр, задающий имя диска в
    виде буквы с необязательным символом ":". По умолчанию используется
    текущий диск.
 
  Возвращаемое значение
 
    nStatus - числовой код состояния, являющийся комбинацией битов,
    значение которых приведено в таблице:
 
    Таблица 7-7. Биты кодирования состояний дисковода
    --------------------------------------------------------------------
    Бит Симв. константа Значение
    --------------------------------------------------------------------
    1   DST_INVALID     Неопределенная команда
    2   DST_READONLY    Адресный маркер не найден
    3   DST_SECTOR      Сектор не найден
    4   DST_DMA         Переполнение DMA (прямого доступа к памяти)
    5   DST_CRC         Ошибка CRC (циклического контроля)
    6   DST_CONTROLLER  Ошибка контроллера
    7   DST_SEEK        Ошибка установки (подвода головки)


    8   DST_TIMEOUT     Окончание тайм-аута
    --------------------------------------------------------------------
 
  Описание
 
    Функция позволяет установить причину формирования DOS-сообщения "block
    device error" (ошибка на устройстве с блочной структурой хранения
    информации).
 
  Примечания
 
  . Функция возвращает состояние, формируемое и сохраняемое системой в
    процессе выполнения всех операций с гибкими и жесткими дисками. При
    следующих обращениях к дисководу предыдущее состояние сбрасывается.
 
  Примеры
 
  . Уточнение состояния дисковода:
 
    IF ERRORORG() == 2
        DiskError := DISKSTAT("A")
    ENDIF
 

See Also: ERRORACT()
ERRORBASE()
ERRORCODE()
ERRORORG()

 

 

 DISKTOTAL()
 Возвращает общую емкость диска.
------------------------------------------------------------------------------
 
  Синтаксис
 
    DISKTOTAL([<cDrive>]) --> nTotalSpace
 
  Параметры
 
    <cDrive> - необязательный символьный параметр, задающий имя диска в
    виде буквы с необязательным символом ":". По умолчанию используется
    текущий диск.
 
  Возвращаемое значение
 
    nTotalSpace - число байтов общей информационной емкости носителя
    данных, установленного в заданном дисководе, или 0, если устройство
    отсутствует, не готово или недоступно.
 
  Описание
 
    Функция возвращает общую емкость диска за вычетом объема дефектных
    секторов, что позволяет определить, достаточно ли памяти, например,
    для создания резервной копии.
 
  Примеры
 
  . Определение достаточности емкости дискеты:
 
    nRequired := DBFSIZE()
    IF DISKTOTAL("A") < nRequired
        ? "Ошибка! Емкости дискеты недостаточно!"
    ENDIF
 

See Also: DISKFREE()

 

 

 DISKTYPE()
 Возвращает тип носителя данных.
------------------------------------------------------------------------------


 
  Синтаксис
 
    DISKTYPE([<cDrive>]) --> nDiskType
 
  Параметры
 
    <cDrive> - необязательный символьный параметр, задающий имя диска в
    виде буквы с необязательным символом ":". По умолчанию используется
    текущий диск.
 
  Возвращаемое значение
 
    nDiskType - число, соответствующее байту FAT-ID гибкого или жесткого
    диска со следующими значениями:
 
    Таблица 7-8. Числовые значения и обозначения FAT-ID
    --------------------------------------------------------------------
    Число Симв. константа Тип диска
    --------------------------------------------------------------------
    255   DT_DS_SEC_8     Двухсторонний гибкий, 5.25", 8 секторов
    254   DT_SS_SEC_8     Односторонний гибкий, 5.25", 8 секторов
    253   DT_DS_SEC_9     Двухсторонний гибкий, 5.25", 9 секторов
    252   DT_SS_SEC_9     Односторонний гибкий, 5.25", 9 секторов
    249   DT_DS_SEC_15    Двухсторонний гибкий, 5.25", 15 секторов
                          (High Density)
    249   DT_35_SEC_9     Двухсторонний гибкий, 3.5", 9 секторов
                          (идентичен 5.25" High Density)
    240   DT_35_SEC_18    Двухсторонний гибкий, 3.5", 18 секторов
    248   DT_HARDDISK     Жесткий
    --------------------------------------------------------------------
 
  Описание
 
    Функция возвращает код, позволяющий определить характеристики
    форматирования диска. Эта информация может использоваться в случаях
    принятия решений при ошибках, возникающих вследствие того, что
    например, при записи на дискету 360 Кбайтов в накопителе емкостью 1.2
    Мбайта PC AT, она может оказаться "нечитаемой" на других компьютерах.
 
  Примеры
 
  . Формирование предупредительного сообщения:
 
    IF ISAT() .AND. DISKTYPE("A") == 253
        ? "Предупреждение!"
        ? "При определенных условиях этот диск "


        ?? " может не читаться на других системах!"
    ENDIF
 

See Also: DISKNAME()
DRIVETYPE()
FLOPPYTYPE()

 

 

 DRIVETYPE()
 Возвращает тип диска.
------------------------------------------------------------------------------
 
  Синтаксис
 
    DRIVETYPE([<cDrive>]) --> nDriveType
 
  Параметры
 
    <cDrive> - необязательный символьный параметр, задающий имя диска в
    виде буквы с необязательным символом ":". По умолчанию используется
    текущий диск.
 
  Возвращаемое значение
 
    nDriveType - числовой код диска, приведенный в таблице:
 
    Таблица 7-9. Кодирование типов дисков
    --------------------------------------------------------------------
    Код Тип диска
    --------------------------------------------------------------------
    0   Виртуальный, логический или недоступный
    1   Дисковод гибких несменных дисков
    2   Дисковод гибких сменных дисков
    3   Жесткий
    --------------------------------------------------------------------
 
  Описание
 
    Функция позволяет определить тип диска.
 
  Примечания
 
  . Функция применима только для компьютеров класса IBM PC/АТ.
 
  . Функция возвращает 0 для логических, виртуальных и недоступных
    дисков. Уточнение можно произвести с помощью функции DISKTYPE(),
    возвращающей величину 248 для логических дисков, 254 для виртуального
    диска, поддерживаемого драйвером VDISK.SYS (как для односторонней
    дискеты с 8-ю секторами) и 0 для недоступного устройства.
 
  Примеры
 
  . Определение, является ли устройство виртуальным диском:
 
    IF DRIVETYPE() == 0 .AND. DISKTYPE() == 254
        ? "Устройство " + DISKNAME() + ": виртуальный диск"
    ENDIF
 

See Also: DISKNAME()
DISKTYPE()

 

 

 FILEAPPEND()
 Осуществляет добавление в файл.
------------------------------------------------------------------------------


 
  Синтаксис
 
    FILEAPPEND(<cSourceFile>, <cTargetFile>) --> nAttachedByte
 
  Параметры
 
    <cSourceFile> - символьный параметр, задающий имя файла, данные из
    которого добавляются в файл <cTargetFile>.
 
    <cTargetFile> - символьный параметр, задающий имя файла, в который
    добавляются данные.
 
    Спецификация обоих файлов допускает указание имени диска и пути
    доступа, но не допускает использования универсальных символов
    сопоставления.
 
  Возвращаемое значение
 
    nAttachedByte - число символов, использованных для добавления.
 
  Описание
 
    Функция позволяет собирать файлы из фрагментов, располагаемых,
    например, на разных гибких дисках. Фрагментирование файлов можно
    осуществить с помощью функции FILECOPY(), предусмотрев для их сборки,
    например, таблицу меток томов, позволяющую организовать опознавание
    соответствующих дискет.
 
    Внимание! Во избежание неверных результатов при ошибочной ситуации
    дополняемый файл полностью стирается. По этой причине перед
    добавлением в существующий файл рекомендуется создать его резервную
    копию.
 
  Примечания
 
  . Если дополняемый файл еще не существует, то он автоматически
    создается. Для изменения атрибутов этого вновь созданного файла можно
    использовать функцию SETFCREATE().
 
  . Если дополняемый файл размещается на сетевом устройстве, то его
    следует защитить от доступа других пользователей с помощью функции
    SETSHARE().
 
  Примеры
 
  . Восстановление файла из резервной копии, размещенной функцией
    FILECOPY() на нескольких дискетах. Сборка осуществляется в
    соответствии с базой данных DISKLIST, формируемой на этапе резервного
    копирования, записи которой содержат метки томов используемых дискет и
    имена файлов и имеют следующую структуру:
 
    Таблица 7-10. Структура базы данных DISKLIST


    --------------------------------------------------------------------
    Имя поля  Информация, содержащаяся в поле базы данных
    --------------------------------------------------------------------
    VolLabel    Метка тома, содержащего файл резервной копии
    BackupName  Имя файла с именем диска и путем доступа
    --------------------------------------------------------------------
 
    USE DISKLIST                                        // База с метками
                                                        // томов и именами
                                                        // файлов
    cTargetFile := "C:\TARGET.TXT"
 
    DO WHILE .NOT. EOF()
      IF .NOT. EMPTY(FILESEEK(VolLabel, 8))             // Корректный диск?
        FILEAPPEND(cTargetFile, BackupName)             // Дополнение файла
        SKIP                                            // Следующая запись
      ELSE
        ? "Пожалуйста, вставьте нужную дискету!"
      ENDIF
    ENDDO
 

See Also: FILECOPY()
FILESEEK()
SETSHARE()
SETFCREATE()
CSETSAFETY()

 

 

 FILEATTR()
 Возвращает комбинацию битов атрибутов файла.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FILEATTR([<cFile>]) --> nFileAttr
 
  Параметры
 
    <cFile> - необязательный символьный параметр, задающий имя файла с
    необязательными указаниями имени диска и пути доступа. Допустимо
    указание имени с использованием универсальных символов сопоставления.
    По умолчанию используется имя файла, выделенного при последнем вызове
    функции FILESEEK().
 
  Возвращаемое значение
 
    nFileAttr - число, содержащее комбинацию битов атрибутов файла, или 0,
    если соответствующего файла нет.
 
  Описание
 
    Функция возвращает комбинацию битов атрибутов файла, заданного
    параметром <cFile>, а при вызове с опущенным параметром - файла,


    выделенного при последнем вызове функции FILESEEK().
 
    При вызове с параметром <cFile> функция в качестве маски атрибутов
    использует величину 63, соответствующую всем доступным атрибутам, коды
    которых приведены в следующей таблице:
 
    Таблица 7-11. Кодирование атрибутов файлов
    --------------------------------------------------------------------
    Бит Число   Симв. константа Присвоенный атрибут
    --------------------------------------------------------------------
        0       FA_NORMAL       Атрибутов не присвоено
    1   1       FA_READONLY     READ ONLY (файл только для чтения)
    2   2       FA_HIDDEN       HIDDEN (скрытый файл)
    3   4       FA_SYSTEM       SYSTEM (системный файл)
    4   8       FA_VOLUME       VOLUME (метка тома диска)
    5   16      FA_DIRECTORY    DIR (директория)
    6   32      FA_ARCHIVE      ARCHIVE (после резервного копирования
                                были внесены изменения)
    --------------------------------------------------------------------
 
    Файлу может быть присвоено несколько атрибутов, в этом случае
    суммируются соответствующие числа.
 
    При вызове без параметра функция возвращает комбинацию битов атрибутов
    последнего файла, выделенного при вызове функции FILESEEK(),
    допускающей задание группы файлов с использованием универсальных
    символов сопоставления и маски атрибутов.
 
  Примеры
 
  . Получение атрибутов файла:
 
    ? FILEATTR("C:\TEXT\TEXT.TXT")      // Напр. 32 (ARCHIVE)
    ? FILEATTR("C\HIDE.TXT")            // Напр. 34 (HIDDEN + ARCHIVE)
 
  . Совместное применение с функцией FILESEEK():
 
    cFile := FILESEEK("C:\TEXT\*.TXT")
    DO WHILE .NOT. EMPTY(cFile)
        ? cFile, FILEATTR()             // Имя и атрибуты файла
        cFile := FILESEEK()             // Выделение следующего файла
    ENDDO
 

See Also: FILEDATE()
FILESEEK()


FILESIZE()
FILETIME()
SETFATTR()

 

 

 FILECCLOSE()
  Закрывает файл, для которого создавалась резервная копия.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FILECCLOSE() --> lClosed
 
  Возвращаемое значение
 
    lClosed - логическое значение .T. при успешном закрытии исходного
    файла, для которого создавалась резервная копия, а иначе .F..
 
  Описание
 
    Функция позволяет закрыть исходный файл, ранее открытый FILECOPY() для
    создания резервной копии, в случае прерывания процесса копирования,
    например, по инициативе пользователя. При нормальном завершении
    копирования вызов описываемой функции не требуется, так как копируемый
    файл закрывается автоматически.
 
  Примечания
 
  . Независимо от режима совместного использования доступ других
    пользователей к копируемому файлу при резервном копировании запрещен
    до момента его закрытия.
 
  Примеры
 
  . Создание резервной копии с помощью функции FILECOPY() и
    циклического вызова FILECCONT(). В случае прерывания закрытие
    исходного файла производится вызовом FILECCLOSE():
 
    FILECOPY(cSource, cTarget, .T.)  // Режим резервного копирования
    DO NEXTDISK                      // Для прерывания переменная Terminated
                                     // должна получить значение .T..
    DO WHILE FILECOPEN() .AND. .NOT. Terminated
        FILECCONT(cTarget)           // Следующий диск - следующее имя
        DO NEXTDISK                  // Запрос на смену диска
    ENDDO
    IF Terminated
        FILECCLOSE()                 // Закрытие исходного файла
    ENDIF
 

See Also: FILECCONT()
FILECOPEN()
FILECOPY()

 

 

 FILECCONT()
 Копирует очередную часть файла на следующий диск.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FILECCONT(<cFile>) --> nCopyByte


 
  Параметры
 
    <cFile> - символьная строка, задающая имя выходного файла текущей
    части резервной копии.
 
  Возвращаемое значение
 
    nCopyByte - число скопированных байтов.
 
  Описание
 
    Функция записывает на новый диск порцию остающейся части файла в
    режиме резервного копирования, который инициируется функцией
    FILECOPY(). Записывается столько байтов, сколько помещается на
    указанном выходном диске. Для продолжения копирования остающейся части
    файла функция должна вызываться снова, причем при каждом новом вызове
    выходному файлу может быть присвоено новое имя.
 
  Примечания
 
  . При прерывании процедуры резервного копирования исходный файл
    должен быть закрыт вызовом функции FILECCLOSE().
 
  . Установка требуемой комбинации атрибутов для нового файла может
    быть осуществлена функцией SETFCREATE().
 
  . При включенном режиме защиты файлов от перезаписи, управляемом
    функцией CSETSAFETY(), описываемая функция запрашивает разрешение на
    перезапись существующих файлов.
 
  Примеры
 
  . Создание резервной копии с помощью функции FILECOPY() и
    циклического вызова FILECCONT(). В случае прерывания закрытие
    исходного файла производится вызовом FILECCLOSE():
 
    FILECOPY(cSource, cTarget, .T.)  // Режим резервного копирования
    DO NEXTDISK                      // Для прерывания переменная Terminated
                                     // должна получить значение .T..
    DO WHILE FILECOPEN() .AND. .NOT. Terminated
        FILECCONT(cTarget)           // Следующий диск - следующее имя
        DO NEXTDISK                  // Запрос на смену диска
    ENDDO
    IF Terminated
        FILECCLOSE()                 // Закрытие исходного файла
    ENDIF
 

See Also: FILECCLOSE()
FILECDATI()
FILECOPEN()
FILECOPY()
SETSHARE()

 

 

 FILECDATI()
 Переключает режим использования времени и даты при резервном копировании.


------------------------------------------------------------------------------
 
  Синтаксис
 
    FILECDATI([<lNewMode>]) --> lOldMode
 
  Параметры
 
    <lNewMode> - необязательный логический параметр, задающий при значении
    .T. использование для выходного файла даты и времени создания
    исходного файла, а при значении .F. текущих системных значений.
    По умолчанию состояние режима не изменяется.
 
  Возвращаемое значение
 
    lOldMode - логическое значение, соответствующее предыдущему состоянию
    режима.
 
  Описание
 
    Функция позволяет управлять режимом задания даты и времени при
    резервном копировании, инициируемом функцией FILECOPY(). В исходном
    состоянии (до вызова описываемой функции) файлам резервных копий
    присваиваются дата и время создания исходного файла.
 
  Примечания
 
  . Переключение режима должно осуществляться до соответствующего
    вызова функции FILECOPY().
 
  . Для установки файлу значений времени и даты раздельно можно
    применять функцию SETFDATI().
 
  Примеры
 
  . Отображение текущего состояния режима:
 
    ? FILECDATI()               // Текущий режим
 
  . Использование текущих даты и времени:
 
    ? FILECDATI(.F.)            // Возвращается предыдущее состояние
 

See Also: FILECOPY()
SETFDATI()

 

 

 FILECHECK()
 Подсчитывает контрольную сумму файла.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FILECHECK(<cFile>) --> nCheckSum
 
  Параметры
 
    <cFile> - символьная строка, содержащая необязательные имя диска и
    путь доступа и обязательное имя файла. По умолчанию используются
    текущий диск и текущая директория.
 
  Возвращаемое значение
 
    nCheckSum - целое положительное числовое значение контрольной суммы,
    или (-1) при отсутствии файла с заданным именем.


 
  Описание
 
    Функция подсчитывает контрольную сумму файла, позволяющую выявить
    изменения, ошибки считывания, а также защитить жесткий диск от простых
    вирусов.
 
  Примечания
 
  . Не допускается использование в параметрах универсальных символов
    сопоставления для задания групповых имен.
 
  Примеры
 
  . Проверка внесения изменений в базу данных:
 
    IF FILECHECK("CUST.DBF") <> Old_ChkSum
        ? "Внимание! Требуется создание резервной копии!"
    ENDIF
 
  . Проверка изменения COMMAND.COM:
 
    IF FILECHECK("\COMMAND.COM") <> Cmd_ChkSum
        ? "COMMAND.COM изменен! Осторожно, вирус!"
    ENDIF
 

See Also: DISKCHECK()
SETSHARE()

 

 

 FILECOPEN()
 Возвращает признак открытия файла в режиме резервного копирования.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FILECOPEN() --> lOpenFile
 
  Возвращаемое значение
 
    lOpenFile - логическое значение .T. при еще не завершенном процессе
    резервного копирования, а иначе .F..
 
  Описание
 
    Функция позволяет определить, все ли данные исходного файла,
    задаваемого функцией FILECOPY(), скопированы.
 
  Примечания
 
  . При прерывании процедуры резервного копирования исходный файл
    должен быть закрыт вызовом функции FILECCLOSE().
 
  Примеры
 
  . Создание резервной копии:
 
    nCounter := 1                       // Имя файла "BIG.001" и т.д.
    cTargetFile := "BIG" + NTOC(nCounter, 10, 3, "0")
    FILECOPY("BIG.DBF", "A:\" + cTargetFile, .T.)
 
    DO WHILE FILECOPEN()                // Копирование не завершено?
        DO NEXTDISK                     // Запрос на смену диска
        nCounter := nCounter + 1
        cTargetFile := "BIG" + NTOC(nCounter, 10, 3, "0")


        FILECCONT("A:\" + cTargetFile)  // Следующий диск - новое имя
    ENDDO
    FILECCLOSE()                        // На всякий случай
 
    PROCEDURE NEXTDISK
        ? "Пожалуйста, установите новую дискету в дисковод A:"
        WAIT
        RETURN
 

See Also: FILECCLOSE()
FILECCONT()
FILECOPY()

 

 

 FILECOPY()
  Выполняет обычное или резервное копирование файлов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FILECOPY(<cSourceFile>, <cTargetFile>, [<lMode>]) --> nCopyByte
 
  Параметры
 
    <cSourceFile> - символьная строка, содержащая необязательные имя диска
    и путь доступа и обязательное имя копируемого файла. По умолчанию
    используются текущий диск и текущая директория, использование
    универсальных символов сопоставления не допускается.
 
    <cTargetFile> - символьная строка, содержащая необязательные имя диска
    и путь доступа и обязательное имя файла копии. По умолчанию
    используются текущий диск и текущая директория, использование
    универсальных символов сопоставления не допускается.
 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. создание резервной копии, а при значении .F. или по умолчанию
    обычное копирование.
 
  Возвращаемое значение
 
    nCopyByte - число скопированных функцией байтов.
 
  Описание
 
    Функция либо просто копирует исходный файл, либо начинает процесс
    создания резервной копии, позволяющий копировать файлы, не умещающиеся
    на выходных гибких дисках. В этом режиме функция начинает процесс
    резервного копирования, записывая то количество байтов, которое
    помещается на дискету.
 
    Продолжить копирование после смены дискеты можно функцией FILECCONT(),
    а контролировать завершение переписи данных из исходного файла
    позволяет функция FILECOPEN().


Копирование целесообразно проводить на
    дискеты, имеющие уникальные метки тома, сохраняя информацию о них в
    специальном каталоге.
 
    Такая организация позволяет упростить восстановление файла из
    резервных копий, содержащихся на нескольких дискетах, выполняемое,
    например, с использованием функции FILEAPPEND().
 
  Примечания
 
  . При совместном доступе рекомендуется запретить обращение по записи
    к выходным файлам со стороны других программных средств.
 
  . Установка требуемой комбинации атрибутов для нового файла может
    быть осуществлена функцией SETFCREATE().
 
  . При включенном режиме защиты файлов от перезаписи, управляемом
    функцией CSETSAFETY(), описываемая функция запрашивает разрешение на
    перезапись существующих файлов.
 
  Примеры
 
  . Простое копирование:
 
    ? FILECOPY("A:\TEXT.TXT", "C:\TEST.TXT") // Число скопированных байтов
 
  . Создание резервной копии:
 
    nCounter := 1                            // Имя файла "BIG.001" и т.д.
    cTargetFile := "BIG" + NTOC(nCounter, 10, 3, "0")
    FILECOPY("BIG.DBF", "A:\" + cTargetFile, .T.)
 
    DO WHILE FILECOPEN()                     // Копирование не завершено?
        DO NEXTDISK                          // Запрос на смену диска
        nCounter := nCounter + 1
        cTargetFile := "BIG" + NTOC(nCounter, 10, 3, "0")
        FILECCONT("A:\" + cTargetFile)       // Следующий диск - новое имя
    ENDDO
    FILECCLOSE()                             // На всякий случай
 
    PROCEDURE NEXTDISK
        ? "Пожалуйста, установите новую дискету в дисковод A:"
        WAIT
        RETURN
 

See Also: FILEAPPEND()
FILECDATI()
FILECCLOSE()
FILECCONT()
FILECOPEN()

 

 

 FILEDATE()
 Возвращает дату создания файла.
------------------------------------------------------------------------------


 
  Синтаксис
 
    FILEDATE([<cFileMask>, [<nFileAttr>]]) --> dFileDate
 
  Параметры
 
    <cFileMask> - необязательный символьный параметр, задающий имя файла с
    возможным использованием универсальных символов сопоставления и с
    указанием необязательных имени диска и пути доступа. По умолчанию
    используется имя файла, выделенного при последнем вызове функции
    FILESEEK().
 
    <nFileAttr> - необязательный параметр, задающий число, содержащее
    комбинацию битов маски атрибутов файлов в соответствии с таблицей
    7-12. По умолчанию 0.
 
  Возвращаемое значение
 
    dFileDate - при наличии соответствующего файла дата создания, а при
    отсутствии пустая дата.
 
  Описание
 
    Функция возвращает дату создания файла, заданного параметром <cFile>,
    а при вызове с опущенным параметром - файла, выделенного при последнем
    вызове функции FILESEEK(). Таким образом, при использовании данной
    функции совместно с функцией FILESEEK(), применяя символы
    универсального сопоставления, можно определять дату создания для
    группы файлов.
 
    Комбинация атрибутов файлов задается суммой чисел, соответствующих
    атрибутам, приведенным в таблице:
 
    Таблица 7-12. Кодирование атрибутов файлов
    --------------------------------------------------------------------
    Бит Число   Симв. константа Присвоенный атрибут
    --------------------------------------------------------------------
        0       FA_NORMAL       Атрибутов не присвоено
    1   1       FA_READONLY     READ ONLY (файл только для чтения)
    2   2       FA_HIDDEN       HIDDEN (скрытый файл)
    3   4       FA_SYSTEM       SYSTEM (системный файл)
    4   8       FA_VOLUME       VOLUME (метка тома диска)
    5   16      FA_DIRECTORY    DIR (директория)
    6   32      FA_ARCHIVE      ARCHIVE (после резервного копирования
                                были внесены изменения)


    --------------------------------------------------------------------
 
    В маске атрибутов могут использоваться значения констант SYSTEM,
    HIDDEN, VOLUME и DIR. Для одновременного их использования следует
    суммировать соответствующие числовые значения, помня однако, что не
    все комбинации имеют смысл.
 
  Примеры
 
  . Определение даты создания конкретного файла:
 
    ? FILEDATE("C:\TEXT\TEXT.TXT")              // Значение для файла,
                                                // если он существует.
 
  . Определение даты создания файла с атрибутами ARCHIVE и
    HIDDEN:
 
    ? FILEDATE("C:\HIDE.TXT", 34)               // Значение для файла,
                                                // если он существует.
 
  . Совместное использование с функцией FILESEEK():
 
    cFile := FILESEEK("C:\TEXT\*.TXT")
 
    DO WHILE .NOT. EMPTY(cFile)
        ? cFile, FILEDATE()                     // Значение для файла
        cFile := FILESEEK()                     // Выделение следующего файла
    ENDDO
 

See Also: FILEATTR()
FILESEEK()
FILESIZE()
FILETIME()

 

 

 FILEDELETE()
 Удаляет файл или группу файлов по имени и атрибуту.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FILEDELETE(<cFileMask>, [<nFileAttr>]) --> lDeleted
 
  Параметры
 
    <cFileMask> - необязательный символьный параметр, задающий имя файла с
    возможным использованием универсальных символов сопоставления и с
    указанием необязательных имени диска и пути доступа. По умолчанию
    используется имя файла, выделенного при последнем вызове функции
    FILESEEK().
 
    <nFileAttr> - необязательный параметр, задающий число, содержащее
    комбинацию битов маски атрибутов файлов в соответствии с таблицей
    7-13. По умолчанию 32.
 
  Возвращаемое значение


 
    lDeleted - логическое значение .T. при удалении одного файла или
    группы файлов, а иначе .F..
 
  Описание
 
    Функция позволяет удалять группы файлов с гибкого или жесткого диска
    без использования команды RUN. Удаляемая группа задается с помощью
    принятых в DOS универсальных символов сопоставления ("*" и "?") и
    ограничивается маской атрибутов файлов в параметре <nFileAttr>.
    Комбинация атрибутов файлов задается суммой чисел, соответствующих
    атрибутам, приведенным в таблице:
 
    Таблица 7-13. Кодирование атрибутов файлов
    --------------------------------------------------------------------
    Бит Число   Симв. константа Присвоенный атрибут
    --------------------------------------------------------------------
        0       FA_NORMAL       Атрибутов не присвоено
    1   1       FA_READONLY     READ ONLY (файл только для чтения)
    2   2       FA_HIDDEN       HIDDEN (скрытый файл)
    3   4       FA_SYSTEM       SYSTEM (системный файл)
    4   8       FA_VOLUME       VOLUME (метка тома диска)
    5   16      FA_DIRECTORY    DIR (директория)
    6   32      FA_ARCHIVE      ARCHIVE (после резервного копирования
                                были внесены изменения)
    --------------------------------------------------------------------
 
    В маске атрибутов могут использоваться значения констант SYSTEM,
    HIDDEN, VOLUME и DIR. Для одновременного их использования следует
    суммировать соответствующие числовые значения, помня однако, что не
    все комбинации имеют смысл.
 
  Примечания
 
  . Внимание! Функция позволяет удалять и системные файлы.
 
  . Удаление поддиректорий можно осуществить функцией DIRREMOVE().
 
  Примеры
 
  . Удаление группы файлов с расширением .NDX и установленным архивным
    атрибутом (по умолчанию 32):
 
    IF FILEDELETE("*.NDX")
        ? "Файлы удалены."


    ELSE
        ? "Файлы не найдены."
    ENDIF
 

See Also: DELETEFILE()

 

 

 FILEMOVE()
 Перемещает файлы в другую директорию.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FILEMOVE(<cSourceFile>, <cTargetFile>) --> nErrorCode
 
  Параметры
 
    <cSourceFile> - символьная строка, задающая необязательные имя диска и
    путь доступа и обязательное имя перемещаемого файла.  Универсальные
    символы сопоставления недопустимы. По умолчанию используются текущие
    диск и директория.
 
    <cTargetFile> - символьная строка, задающая необязательные имя диска и
    путь доступа и обязательное имя выходного файла. Универсальные символы
    сопоставления недопустимы. По умолчанию используются текущие диск и
    директория.
 
  Возвращаемое значение
 
    nErrorCode - числовой код результата в соответствии с таблицей:
 
    Таблица 7-14. Коды результатов выполнения функции FILEMOVE()
    --------------------------------------------------------------------
    Код Симв. константа         Значение
    --------------------------------------------------------------------
    0   NO_DISK_ERR             Ошибки нет
    -2  ER_FILE_NOT_FOUND       Файл не найден
    -3  ER_PATH_NOT_FOUND       Путь доступа не найден
    -5  ER_ACCESS_DENIED        Отказ доступа (напр., в сети или если
                                файл с таким именем уже существует)
    -17 ER_DIFFERENT_DEVICE     Расположение выходного файла задано
                                на другом диске
    --------------------------------------------------------------------
 
  Описание
 
    Функция перемещает запись о файле из одной директории в другую,
    позволяя экономить время на физической переписи файла. Однако,
    поскольку сам файл физически не переписывается, перемещение доступно
    только в пределах одного диска.


 
  Примечания
 
  . Перемещение файлов возможно только в пределах одного устройства.
 
  . Если в выходной директории уже содержится файл с именем, заданным
    параметром <cTargetFile>, то перемещение невозможно, и функция
    возвращает величину (-5). В этом случае для перемещения необходимо
    предварительное удаление файла в выходной директории.
 
  Примеры
 
  . Перемещение файла из директории "\OLD" в директорию "\NEW":
 
    IF FILEMOVE("\OLD\CUST.DBF", "\NEW\CUST.DBF") = 0
        ? "Файл перемещен в новую директорию"
    ENDIF
 

See Also: FILECOPY()

 

 

 FILESEEK()
 Осуществляет поиск файлов по имени и атрибуту.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FILESEEK([<cFileMask>, [<nFileAttr>], [<lExact>]]) --> cFileName
 
  Параметры
 
    <cFileMask> - необязательный символьный параметр, задающий имя файла
    с возможным использованием универсальных символов сопоставления и с
    указанием необязательных имени диска и пути доступа. По умолчанию
    следующий файл, удовлетворяющий условиям предыдущего вызова данной
    функции.
 
    <nFileAttr> - необязательный параметр, задающий число, содержащее
    комбинацию битов маски атрибутов файлов в соответствии с таблицей
    7-15. По умолчанию 32.
 
    <lExact> - необязательный логический параметр, задающий при значении
    .T. точное совпадение комбинации атрибутов файла со значением,
    заданным параметром <nFileAttr>, а при значении .F. или по умолчанию
    сравнение на наличие хотя бы одного из заданных атрибутов.
 
  Возвращаемое значение
 
    cFileName - символьная строка, содержащая имя первого, а при вызове
    без параметров - следующего удовлетворяющего заданным условиям файла.
 
  Описание
 
    Функция позволяет организовать циклический перебор файлов заданной


    группы. Задание группы осуществляется по имени файла с использованием
    универсальных символов сопоставления и по атрибутам файлов. Вызов с
    параметрами интерпретируется как задание группы, а вызов с опущенными
    параметрами приводит к выбору следующего файла, удовлетворяющего
    заданным условиям группирования по имени и атрибутам файлов,
    приведенным в таблице:
 
    Таблица 7-15. Кодирование атрибутов файлов
    --------------------------------------------------------------------
    Бит Число   Симв. константа Присвоенный атрибут
    --------------------------------------------------------------------
        0       FA_NORMAL       Атрибутов не присвоено
    1   1       FA_READONLY     READ ONLY (файл только для чтения)
    2   2       FA_HIDDEN       HIDDEN (скрытый файл)
    3   4       FA_SYSTEM       SYSTEM (системный файл)
    4   8       FA_VOLUME       VOLUME (метка тома диска)
    5   16      FA_DIRECTORY    DIR (директория)
    6   32      FA_ARCHIVE      ARCHIVE (после резервного копирования
                                были внесены изменения)
    --------------------------------------------------------------------
 
    Файлы могут иметь несколько атрибутов. Для задания группы следует
    суммировать соответствующие числовые значения.
 
    Группирование по атрибутам файлов
 
    Группа файлов, выделяемых функцией, определяется именем (с
    использованием принятых в DOS универсальных символов сопоставления) и
    атрибутами файлов, задаваемыми параметром <nFileAttr>. Однако значение
    этого параметра может интерпретироваться либо как конкретная
    комбинация атрибутов, либо как маска допустимых атрибутов. Первый
    случай определяется значением .T. параметра <lExact>, а второй
    значением .F. или по умолчанию. При задании значения .T. из группы
    исключаются те файлы, которые не имеют точно такой же комбинации
    атрибутов, как заданная, а при задании значения .F.


из группы не
    исключаются файлы, имеющие хотя бы один атрибут, заданный маской.
 
    Имеется ряд дополнительных аспектов использования значения .F.
    параметра <lExact>, которые следует рассмотреть подробнее. Во-первых,
    файлы с атрибутами READ ONLY (1), ARCHIVE (32) и вообще без атрибутов
    (0) включаются в группу при любом задании маски, за исключением
    задания величины 8 (VOLUME). Во-вторых, файлы с атрибутами HIDDEN (2),
    SYSTEM (4), VOLUME (8) и DIR (16) включаются в группу, если в маске
    установлен соответствующий бит. Другими словами, в маске имеет смысл
    задавать только атрибуты SYSTEM, HIDDEN, VOLUME или DIR. Таким
    образом, при задании маски 16 (DIR) в группу будут включены как файлы
    без атрибутов, так и файлы с атрибутами ARCHIVE и READ ONLY.
 
    Внутренний буфер данных
 
    При каждом вызове функции данные о размере, атрибутах, времени и дате
    создания выбранного файла сохраняются во внутреннем буфере.  Для
    доступа к этой информации функции FILETIME(), FILEDATE() и т.д.
    следует вызывать без параметров, чтобы не производилась замена данных
    во внутреннем буфере.
 
  Примечания
 
  . Поставляемый в составе CT II файл TOOLDEMO.PRG содержит в качестве
    примера функцию SCANFILES(), позволяющую подготовить эффективную
    программу для работы с директориями.
 
  Примеры
 
  . Вывод даты и размера файлов, имеющих расширение .TXT:
 
    cFile := FILESEEK("C:\TEXT\*.TXT")
    DO WHILE .NOT. EMPTY(cFile)
        ? FILESIZE()                    // Размер файла из буфера
        ? FILEDATE()                    // Дата файла из буфера
        cFile := FILESEEK()             // Выбор следующего файла
    ENDDO
 
  . Вывод списка файлов корневой директории с атрибутами READ ONLY,
    HIDDEN, SYSTEM и ARCHIVE (1 + 2 + 4 + 32 = 39), хотя достаточно
    задание 6 (2 + 4):
 
    cFile := FILESEEK("C:\*.*", 39)


    DO WHILE .NOT. EMPTY(cFile)
        ? cFile                         // Имя файла
        cFile := FILESEEK()             // Выбор следующего файла
    ENDDO
 
  . Вывод списка поддиректорий:
 
    cSubDir := FILESEEK("C:\*.*, 16, .T.)
    DO WHILE .NOT. EMPTY(cSubDir)
        ? cSubDir                       // Имя директории
        cSubDir := FILESEEK()           // Выбор следующей директории
    ENDDO
 

See Also: FILEATTR()
FILEDATE()
FILESIZE()
FILETIME()
SAVEFSEEK()

 

 

 FILESIZE()
 Возвращает размер файла.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FILESIZE([<cFileMask>, [<nFileAttr>]]) --> nFileSize
 
  Параметры
 
    <cFileMask> - необязательный символьный параметр, задающий имя файла
    с возможным использованием универсальных символов сопоставления и с
    указанием необязательных имени диска и пути доступа. По умолчанию
    используется имя файла, выделенного при последнем вызове функции
    FILESEEK().
 
    <nFileAttr> - необязательный параметр, задающий число, содержащее
    комбинацию битов маски атрибутов файлов в соответствии с таблицей
    7-16. По умолчанию 0.
 
  Возвращаемое значение
 
    nFileSize - при наличии соответствующего файла его размер, а при
    отсутствии (-1).
 
  Описание
 
    Функция возвращает размер файла, заданного параметром <cFile>, а при
    вызове с опущенным параметром - файла, выделенного при последнем
    вызове функции FILESEEK(). Таким образом, при использовании данной
    функции совместно с функцией FILESEEK(), применяя символы
    универсального сопоставления, можно определять размер для группы
    файлов.
 
    Комбинация атрибутов файлов задается суммой чисел, соответствующих
    атрибутам, приведенным в таблице:
 
    Таблица 7-16. Кодирование атрибутов файлов
    --------------------------------------------------------------------


    Бит Число   Симв. константа Присвоенный атрибут
    --------------------------------------------------------------------
        0       FA_NORMAL       Атрибутов не присвоено
    1   1       FA_READONLY     READ ONLY (файл только для чтения)
    2   2       FA_HIDDEN       HIDDEN (скрытый файл)
    3   4       FA_SYSTEM       SYSTEM (системный файл)
    4   8       FA_VOLUME       VOLUME (метка тома диска)
    5   16      FA_DIRECTORY    DIR (директория)
    6   32      FA_ARCHIVE      ARCHIVE (после резервного копирования
                                были внесены изменения)
    --------------------------------------------------------------------
 
    В маске атрибутов могут использоваться значения констант SYSTEM,
    HIDDEN, VOLUME и DIR. Для одновременного их использования следует
    суммировать соответствующие числовые значения, помня однако, что не
    все комбинации имеют смысл.
 
  Примеры
 
  . Определение размера конкретного файла:
 
    ? FILESIZE("C:\TEXT\TEXT.TXT")              // Значение для файла,
                                                // если он существует
 
  . Определение размера файла с атрибутами ARCHIVE и HIDDEN:
 
    ? FILESIZE("C:\HIDE.TXT", 34)               // Значение для файла,
                                                // если он существует
 
  . Совместное использование с функцией FILESEEK():
 
    cFile := FILESEEK("C:\TEXT\*.TXT")
 
    DO WHILE .NOT. EMPTY(cFile)
        ? cFile, FILESIZE()                     // Значение для файла
        cFile := FILESEEK()                     // Выделение следующего файла
    ENDDO
 

See Also: FILEATTR()
FILEDATE()
FILESEEK()
FILETIME()

 

 

 FILESTR()
 Возвращает считанный сегмент файла в виде строки.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FILESTR(<cFile>, [<nLength>], [<nOffset>],


        [<lCtrl-Z>]) --> cCharacterstring
 
  Параметры
 
    <cFile> - символьная строка, содержащая необязательные имя диска и
    путь доступа и обязательное имя файла. По умолчанию используются
    текущий диск и текущая директория.
 
    <nLength> - необязательный числовой параметр, задающий количество
    считываемых байтов в диапазоне от 1 до 65520. По умолчанию размер
    файла.
 
    <nOffset> - необязательный числовой параметр, задающий смещение в
    файле, начиная с которого должно производиться чтение. По умолчанию 0
    (чтение с первого байта).
 
    <lCtrl-Z> - необязательный логический параметр, задающий при значении
    .T. интерпретацию символа CHR(26) как маркера конца файла, а при
    значении .F. или по умолчанию - интерпретацию его как обычного
    символа.
 
  Возвращаемое значение
 
    cCharacterstring - символьная строка.
 
  Описание
 
    Функция представляет дополнительные возможности считывания файлов или
    их частей. Параметр <lCtrl-Z> позволяет организовать считывание данных
    только до первого символа CHR(26), соответствующего комбинации клавиш
    <Ctrl><Z>.
 
    Данная функция уступает по скорости Clipper-функциям семейства
    Fxxxx(), т.к. не позволяет оставлять файл открытым при считывании по
    сегментам.
 
  Примечания
 
  . Функция может считывать столько байтов, сколько позволяет рабочая
    память, но не более 65520. Объем доступной свободной памяти можно
    определить с помощью вызова MEMORY(1).
 
  . В сетевом окружении рекомендуется вызовом SETSHARE(2) запретить
    другим пользователям запись в данный файл во время считывания.
 
  Примеры
 
  . Считывание всего файла:
 
    ? FILESTR("C:\TEXT\TEST.TXT")               // Вывод текста файла
 
  . Считывание до первого символа CHR(26):
 
    cVar := FILESTR("C:\TEXT\TEST.TXT", .T.)


 
  . Считывание четырех символов файла, содержащего "ABCDEFGHIJ",
    начиная с позиции 3:
 
    ? FILESTR("C:\TEXT\TEST.TXT", 4, 3)         // "CDEF"
 
  . Считывание максимального помещающегося в памяти объема:
 
    cVar := FILESTR("C:\TEXT\TEST.TXT", MEMORY(1) *1024 -100)
 

See Also: ALLOFREE()*
SETSHARE()
STRFILE()

 

 

 FILETIME()
 Возвращает время создания файла.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FILETIME([<cFileMask>, [<nFileAttr>]]) --> cFileClockTime
 
  Параметры
 
    <cFileMask> - необязательный символьный параметр, задающий имя файла
    с возможным использованием универсальных символов сопоставления и с
    указанием необязательных имени диска и пути доступа. По умолчанию
    используется имя файла, выделенного при последнем вызове функции
    FILESEEK().
 
    <nFileAttr> - необязательный параметр, задающий число, содержащее
    комбинацию битов маски атрибутов файлов в соответствии с таблицей
    7-17. По умолчанию 0.
 
  Возвращаемое значение
 
    cFileClockTime - при наличии соответствующего файла время его
    создания, а при отсутствии пустая строка.
 
  Описание
 
    Функция возвращает время создания файла, заданного параметром <cFile>,
    а при вызове с опущенным параметром - файла, выделенного при последнем
    вызове функции FILESEEK(). Таким образом, при использовании данной
    функции совместно с функцией FILESEEK(), применяя символы
    универсального сопоставления, можно определять время создания для
    группы файлов.
 
    Комбинация атрибутов файлов задается суммой чисел, соответствующих
    атрибутам, приведенным в таблице:
 
    Таблица 7-17. Кодирование атрибутов файлов
    --------------------------------------------------------------------
    Бит Число   Симв.


константа Присвоенный атрибут

    --------------------------------------------------------------------
        0       FA_NORMAL       Атрибутов не присвоено
    1   1       FA_READONLY     READ ONLY (файл только для чтения)
    2   2       FA_HIDDEN       HIDDEN (скрытый файл)
    3   4       FA_SYSTEM       SYSTEM (системный файл)
    4   8       FA_VOLUME       VOLUME (метка тома диска)
    5   16      FA_DIRECTORY    DIR (директория)
    6   32      FA_ARCHIVE      ARCHIVE (после резервного копирования
                                были внесены изменения)
    --------------------------------------------------------------------
 
    В маске атрибутов могут использоваться значения констант SYSTEM,
    HIDDEN, VOLUME и DIR. Для одновременного их использования следует
    суммировать соответствующие числовые значения, помня однако, что не
    все комбинации имеют смысл.
 
  Примеры
 
  . Определение времени создания конкретного файла:
 
    ? FILETIME("C:\TEXT\TEXT.TXT")              // Значение для файла,
                                                // если он существует
 
  . Определение времени создания файла с атрибутами ARCHIVE и HIDDEN:
 
    ? FILETIME("C:\HIDE.TXT", 34)               // Значение для файла,
                                                // если он существует
 
  . Совместное использование с функцией FILESEEK():
 
    cFile := FILESEEK("C:\TEXT\*.TXT")
 
    DO WHILE .NOT. EMPTY(cFile)
        ? cFile, FILETIME()                     // Значение для файла
        cFile := FILESEEK()                     // Выделение следующего файла
    ENDDO
 

See Also: FILEATTR()
FILEDATE()
FILESEEK()
FILESIZE()

 

 

 FILEVALID()
 Проверяет, содержит ли символьная строка корректное имя файла.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FILEVALID(<cFileName>) --> lValid


 
  Параметры
 
    <cFileName> - символьная строка, содержащая проверяемое имя файла с
    необязательными именем диска и путем доступа.
 
  Возвращаемое значение
 
    lValid - логическое значение .T. при корректном имени файла, а иначе
    .F..
 
  Описание
 
    Функция позволяет определить, содержит ли символьная строка корректное
    имя файла, например, при вводе его пользователем. Для выделения
    собственно имени файла могут быть использованы CT II-функции выделения
    элементов (TOKEN-функции).
 
  Примеры
 
  . Выделение последнего элемента (имени файла) из строки, содержащей
    имя диска и полный путь доступа:
 
    ACCEPT "Выходной файл -> " TO cVar
    cFileName := TOKEN(cVar, "\:")              // Выделение последнего
                                                // элемента
    DO WHILE .NOT. FILEVALID(cFileName)
        * Сообщение об ошибке в имени ...
        ACCEPT "Выходной файл -> " TO cVar
        cFileName := TOKEN(cVar, "\:")          // Последний элемент
    ENDDO
 

See Also: TOKEN()

 

 

 FLOPPYTYPE()
 Возвращает тип дисковода гибких дисков.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FLOPPYTYPE([<cDrive>]) --> nFloppyType
 
  Параметры
 
    <cDrive> - необязательный символьный параметр, задающий имя диска в
    виде буквы с необязательным символом ":". По умолчанию используется
    текущий диск.
 
  Возвращаемое значение
 
    nFloppyType - числовой код дисковода, приведенный в таблице:
 
    Таблица 7-18. Кодирование типов дисководов
    --------------------------------------------------------------------
    Код Тип дисковода
    --------------------------------------------------------------------
    0   Не для гибких дисков
    1   Для емкости 360 Кбайтов


    2   Для емкости 1.2 Мбайтов
    3   Для емкости 720 Кбайтов
    4   Для емкости 1.44 Мбайтов
    --------------------------------------------------------------------
 
  Описание
 
    Функция возвращает числовой код, определяющий тип и соответственно
    емкость заданного дисковода. Действительно ли устройство является
    дисководом гибких дисков, можно определить с помощью функции
    DRIVETYPE().
 
  Примечания
 
  . Тип дисковода определяется без физического обращения, поэтому
    нахождение дискеты в нем не требуется.
 
  Примеры
 
  . Определение типа дисковода:
 
    IF DRIVETYPE() = 1 .OR. DRIVETYPE() = 2
        DO CASE
        CASE FLOPPYTYPE() = 0
          ? "Дисковод не для гибких дисков!"
        CASE FLOPPYTYPE() = 1
          ? "Дисковод 360 Кбайтов"
        CASE FLOPPYTYPE() = 2
          ? "Дисковод 1.2 Мбайтов"
        CASE FLOPPYTYPE() = 3
          ? "Дисковод 720 Кбайтов"
        CASE FLOPPYTYPE() = 4
          ? "Дисковод 1.44 Мбайтов"
        ENDCASE
    ENDIF
 

See Also: DISKTYPE()
DRIVETYPE()

 

 

 GETSHARE()
 Возвращает код режима совместного доступа к файлам.
------------------------------------------------------------------------------
 
  Синтаксис
 
    GETSHARE() --> nShareMode
 
  Возвращаемое значение
 
    nShareMode - числовой код в диапазоне от 0 до 4.
 
  Описание
 
    Функция позволяет определить код текущего состояния режима совместного
    доступа к файлам, устанавливаемого функцией SETSHARE().  Значения
    возвращаемых кодов приведены в описании функции SETSHARE().
 
  Примеры
 
  . Анализ текущего режима совместного доступа:
 
    IF GETSHARE() == 4
        ? "Разрешены чтение и запись другими программами!"
    ENDIF
 

See Also: SETSHARE()

 

 

 NUMDISKF()
 Возвращает количество установленных в компьютере дисководов гибких дисков.


------------------------------------------------------------------------------
 
  Синтаксис
 
    NUMDISKF() --> nNumber
 
  Возвращаемое значение
 
    nNumber - число установленных в компьютере дисководов гибких дисков.
 
  Описание
 
    Функция возвращает количество установленных в компьютере дисководов
    гибких дисков, что позволяет, например, предоставить пользователю
    возможность выбора дисковода для копирования.
 
  Примеры
 
  . Определение количества установленных в компьютере дисководов
    гибких дисков:
 
    IF NUMDISKF() == 2
        IF DISKREADY("B")
           ? "Вы можете также использовать дисковод B:!"
        ENDIF
    ENDIF
 

See Also: NUMDISKL()
NUMDISKH()

 

 

 NUMDISKH()
 Возвращает количество установленных в компьютере дисководов жестких дисков.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NUMDISKH() --> nNumber
 
  Возвращаемое значение
 
    nNumber - число установленных в компьютере дисководов жестких дисков.
 
  Описание
 
    Функция возвращает количество установленных в компьютере дисководов
    жестких дисков, которое не следует путать с количеством логических
    устройств, поддерживаемых версиями DOS 3.3 и выше.
 
  Примечания
 
  . Функция возвращает информацию, получаемую из BIOS.
 
  Примеры
 
  . Определение количества установленных в компьютере дисководов
    жестких дисков:
 
    ? NUMDISKH()                        // Например, 1
 

See Also: NUMDISKF()
NUMDISKL()

 

 

 NUMDISKL()
 Возвращает количество доступных логических дисков.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NUMDISKL() --> nNumber
 
  Возвращаемое значение
 
    nNumber - число доступных логических дисков.


 
  Описание
 
    Функция возвращает количество доступных логических дисков, задаваемое
    командой LASTDRIVE = ... в файле CONFIG.SYS. Это позволяет, например,
    для сети NOVELL определить номер первого сетевого устройства
    (LASTDRIVE + 1).
 
  Примечания
 
  . Если в CONFIG.SYS не задано другое значение для количества
    логических дисков, то функция возвращает величину 5.
 
  Примеры
 
  . Формирование имени первого сетевого устройства:
 
    ? "Первое сетевое устройство " + CHR(NUMDISKL() + 65) + ":"
 

See Also: NUMDISKF()
NUMDISKH()

 

 

 RENAMEFILE()
 Переименовывает файл, обеспечивая возможность обработки ошибок.
------------------------------------------------------------------------------
 
  Синтаксис
 
    RENAMEFILE(<cSourceFile>, <cTargetFile>) --> nErrorCode
 
  Параметры
 
    <cSourceFile> - символьная строка, задающая необязательные имя
    диска и путь доступа и обязательное имя переименовываемого файла.
    Универсальные символы сопоставления недопустимы. По умолчанию
    используются текущие диск и директория.
 
    <cTargetFile> - символьная строка, задающая необязательные имя диска и
    путь доступа и обязательное имя выходного файла. Универсальные символы
    сопоставления недопустимы. По умолчанию используются текущие диск и
    директория.
 
  Возвращаемое значение
 
    nErrorCode - числовой код результата в соответствии с таблицей:
 
    Таблица 7-19. Коды результатов выполнения функции RENAMEFILE()
    --------------------------------------------------------------------
    Код Симв. константа         Значение
    --------------------------------------------------------------------
     0  NO_DISK_ERR             Ошибки нет
    -2  ER_FILE_NOT_FOUND       Файл не найден
    -3  ER_PATH_NOT_FOUND       Путь доступа не найден
    -5  ER_ACCESS_DENIED        Отказ доступа (напр., в сети или если


                                файл с таким именем уже существует)
    -17 ER_DIFFERENT_DEVICE     Расположение выходного файла задано
                                в другой сети
    --------------------------------------------------------------------
 
  Описание
 
     Функция переименовывает файл, возвращая код результата. Это позволяет
    организовать обработку ошибочных ситуаций, возникающих при
    переименовании файла, например, на сетевом устройстве при
    одновременном открытии его другим пользователем.
 
  Примечания
 
  . Не допускается использование в параметрах универсальных символов
    сопоставления для задания групповых имен.
 
  . При задании параметром <cTargetFile> пути доступа и/или имени
    диска, отличающихся от заданных параметром <cSourceFile>, функция
    производит не переименование, а перемещение файла.
 
  Примеры
 
  . Переименование файла "OLD" на "NEW"
 
    IF RENAMEFILE("OLD", "NEW") = 0
        ? "Файл переименован!"
    ENDIF
 
  . Использование пути доступа переименовываемого файла для выходного:
 
    cFSpecOld := "C:\TEST\TEST.TXT"
    cFileName := TOKEN(cFSpecOld, ":\")         // Последний элемент
    cFSpecNew := BEFOREATNUM(cFileName, cFSpecOld) + "TEST.NEW"
    RENAMEFILE(cFSpecOld, cFSpecNew)
 

See Also: DELETEFILE()

 

 

 RESTFSEEK()
 Восстанавливает сохраненную ранее среду функции FILESEEK().
------------------------------------------------------------------------------
 
  Синтаксис
 
    RESTFSEEK(<cFileSeekEnvironment>) --> cNull
 
  Параметры
 
    <cFileSeekEnvironment> - символьная строка, содержащая среду,
    установленную функцией FILESEEK() и сохраненную функцией SAVEFSEEK().
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание


 
    Функция восстанавливает среду функции FILESEEK(), сохраненную ранее
    функцией SAVEFSEEK(), что позволяет организовать рекурсивную обработку
    поддиректорий.
 
  Примеры
 
  . Вывод имен всех файлов во всех поддиректориях, начиная от корневой
    директории текущего диска. Процедура GETFILES() рассчитана на
    рекурсивные вызовы:
 
    GetFiles("\")                       // Вызов рекурсивной процедуры
                                        // с заданием корневой директории
    RETURN
 
    PROCEDURE GetFiles(cPath)
      LOCAL cFile, cSeekEnv                     // Переменная для сохранения
                                                // среды FILESEEK()
      ?                                         // Вывод пустой строки для
                                                // отделения директории
      cFile := FILESEEK(cPath + "*.*", 63)      // Выделение всех файлов с
                                                // любыми атрибутами
      DO WHILE .NOT. EMPTY(cFile)
        IF cFile <> "."                         // ".." и "." - фиктивные
          IF ISBIT(FILEATTR(), 5)               // Поддиректория?
            cSeekEnv := SAVESEEK()              // Сохранение среды
            GetFiles(cPath + cFile + "\")       // Рекурсивный вызов
                                                // доступа и именем
                                                // поддиректории
            RESTFSEEK(cSeerEnv)                 // Восстановление среды
          ELSE
            ? cSearchPath + cFile
          ENDIF
        ENDIF
        cFile := FILESEEK()                     // Следующий файл
      ENDDO
    RETURN
 

See Also: FILESEEK()
SAVEFSEEK()

 

 

 SAVEFSEEK()
 Сохраняет среду функции FILESEEK().
------------------------------------------------------------------------------
 
  Синтаксис
 


    SAVEFSEEK() --> cFileSeekEnvironment
 
  Возвращаемое значение
 
    cFileSeekEnvironment - символьная строка, содержащая информацию,
    восстанавливаемую функцией RESTFSEEK().
 
  Описание
 
    Функция возвращает символьную строку, содержащую информацию о текущей
    среде функции FILESEEK(). Это позволяет, прервав обработку и сохранив
    полученное значение в переменной, вызвать FILESEEK() с заданием других
    параметров. После циклической обработки выделенных файлов, передав
    функции RESTFSEEK() сохраненную в переменной символьную строку, можно
    восстановить среду и продолжить прерванную обработку.
 
  Примечания
 
  . При рекурсивных вызовах следует заботиться о наличии доступной
    оперативной памяти для сохранения возвращаемых функцией значений.
 
  Примеры
 
  . Вывод имен всех файлов во всех поддиректориях, начиная от корневой
    директории текущего диска. Процедура GETFILES() рассчитана на
    рекурсивные вызовы:
 
    GetFiles("\")                       // Вызов рекурсивной процедуры
                                        // с заданием корневой директории
    RETURN
 
    PROCEDURE GetFiles(cPath)
      LOCAL cFile, cSeekEnv                     // Переменная для сохранения
                                                // среды FILESEEK()
      ?                                         // Вывод пустой строки для
                                                // отделения директории
      cFile := FILESEEK(cPath + "*.*", 63)      // Выделение всех файлов с
                                                // любыми атрибутами
      DO WHILE .NOT. EMPTY(cFile)
        IF cFile <> "."                         // ".." и "." - фиктивные
          IF ISBIT(FILEATTR(), 5)               // Поддиректория?
            cSeekEnv := SAVESEEK()              // Сохранение среды
            GetFiles(cPath + cFile + "\")       // Рекурсивный вызов с путем


                                                // доступа и именем
                                                // поддиректории
            RESTFSEEK(cSeerEnv)                 // Восстановление среды
          ELSE
                    ? cSearchPath + cFile
          ENDIF
        ENDIF
        cFile := FILESEEK()                     // Следующий файл
      ENDDO
    RETURN
 

See Also: RESTFSEEK()

 

 

 SETFATTR()
 Изменяет комбинацию атрибутов существующего файла.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETFATTR(<cFile>, [<nFileAttr>]) --> nErrorCode
 
  Параметры
 
    <cFile> - символьная строка, содержащая необязательные имя диска и
    путь доступа и обязательное имя файла. По умолчанию используются
    текущий диск и текущая директория.
 
    <nFileAttr> - необязательный числовой параметр, задающий
    устанавливаемую комбинацию атрибутов файлов. По умолчанию 32
    (ARCHIVE).
 
  Возвращаемое значение
 
    nErrorCode - числовое значение кода результата, приведенное в таблице:
 
    Таблица 7-20. Коды результатов выполнения функции SETFATTR()
    --------------------------------------------------------------------
    Код Символьная константа    Значение
    --------------------------------------------------------------------
     0  NO_DISK_ERR             Ошибки нет
    -2  ER_FILE_NOT_FOUND       Файл не найден
    -3  ER_PATH_NOT_FOUND       Путь доступа не найден
    -5  ER_ACCESS_DENIED        Отказ доступа (напр., в сети)
    --------------------------------------------------------------------
 
  Описание
 
    Функция позволяет изменить комбинацию атрибутов заданного файла.
    Допустимые биты атрибутов файлов и соответствующие им числовые
    значения представлены в таблице:
 
    Таблица 7-21. Кодирование атрибутов файлов
    --------------------------------------------------------------------


    Бит Число   Симв. константа Присвоенный атрибут
    --------------------------------------------------------------------
        0       FA_NORMAL       Атрибутов не присвоено
    1   1       FA_READONLY     READ ONLY (файл только для чтения)
    2   2       FA_HIDDEN       HIDDEN (скрытый файл)
    3   4       FA_SYSTEM       SYSTEM (системный файл)
    6   32      FA_ARCHIVE      ARCHIVE (наличие изменений после
                                резервного копирования)
    --------------------------------------------------------------------
 
    Для задания комбинации атрибутов файлов следует суммировать
    соответствующие им числовые значения.
 
  Примечания
 
  . Метки томов могут быть созданы с помощью функции VOLUME(),
    а директории - функцией DIRMAKE().
 
  . Для преобразования атрибутов файлов в символьную форму и обратно
    можно использовать функции BITTOC() и CTOBIT().
 
  Примеры
 
  . Присвоение файлу атрибута HIDDEN:
 
    ? SETFATTR("TEST.TXT", 2)   // В случае успеха 0
 
  . Попытка изменения атрибутов недоступного файла:
 
    ? SETFATTR("ABCDEFGH"), 2)  // -2
 
  . Анализ возвращаемого значения:
 
    nErr := SETFATTR("TEST.TXT", 7)
    IF nErr <> 0
        * Здесь должен располагаться фрагмент программы, связанный с
        * анализом неудачной попытки изменения атрибутов файлов
    ENDIF
 

See Also: FILEATTR()
FILESEEK()
BITTOC()
CTOBIT()

 

 

 SETFCREATE()
 Устанавливает стандартную комбинацию атрибутов файлов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETFCREATE([<nNewFileAttr>]) --> nErrorCode
 
  Параметры
 
    <nNewFileAttr> - необязательный параметр, задающий число, содержащее
    комбинацию битов маски атрибутов файлов. По умолчанию текущее значение
    стандартного файлового атрибута не изменяется, а его исходное


    значение, определяемое параметрами CT II, равно 32 (ARCHIVE).
 
  Возвращаемое значение
 
    nErrorCode - предыдущее числовое значение стандартного файлового
    атрибута.
 
  Описание
 
    Функция позволяет установить комбинацию атрибутов файлов, используемую
    при создании средствами CT II новых файлов. Допустимые биты атрибутов
    файлов и соответствующие им числовые значения представлены в таблице:
 
    Таблица 7-22. Кодирование атрибутов файлов
    --------------------------------------------------------------------
    Бит Число   Симв. константа Присвоенный атрибут
    --------------------------------------------------------------------
    -   0       FA_NORMAL       Атрибутов не присвоено
    1   1       FA_READONLY     READ ONLY (файл только для чтения)
    2   2       FA_HIDDEN       HIDDEN (скрытый файл)
    3   4       FA_SYSTEM       SYSTEM (системный файл)
    6   32      FA_ARCHIVE      ARCHIVE (наличие изменений после
                                резервного копирования)
    --------------------------------------------------------------------
 
    Для задания комбинации атрибутов файлов следует суммировать
    соответствующие им числовые значения.
 
  Примеры
 
  . Создание файла с атрибутом READ ONLY ("только для чтения"):
 
    SETFCREATE(1)
    STRFILE("Clipper", "TEST.TXT")
 
  . Отображение значения стандартного файлового атрибута:
 
    ? SETFCREATE()
 

See Also: FILEAPPEND()
FILECOPY()
SCREENFILE()
STRFILE()
TEMPFILE()

 

 

 SETFDATI()
 Изменяет дату и время создания существующего файла.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETFDATI(<cFile>, [<dFileDate>], [<cFileTime>]) --> lAmended
 
  Параметры
 
    <cFile> - символьная строка, содержащая необязательные имя диска и


    путь доступа и обязательное имя файла. По умолчанию используются
    текущий диск и текущая директория.
 
    <dFileDate> - необязательный параметр, задающий присваиваемую файлу
    дату создания. По умолчанию или при недействительном значении
    системная дата.
 
    <dFileTime> - необязательный символьный параметр, задающий
    присваиваемое файлу время создания в 24-часовом формате в диапазоне
    от "00:00:00" до "23:59:59". По умолчанию или при недействительном
    значении системное время.
 
  Возвращаемое значение
 
    lAmended - логическое значение .T. при успешной установке новых
    времени и даты, а иначе .F.
 
  Описание
 
    Функция позволяет установить желаемые время и дату создания для уже
    существующего файла. Поскольку необязательные параметры имеют разные
    типы данных, позволяющие функции определить назначение задаваемого
    параметра, то запятая перед опущенным параметром также может быть
    опущена.
 
  Примечания
 
  . Не допускается использование в параметрах универсальных символов
    сопоставления для задания групповых имен.
 
  Примеры
 
  . Установка заданных значений даты и времени:
 
    SETFDATI("C:\TEXT\TEST.TXT", CTOD("01/01/91"), "01:10:00")
 
  . Установка системных даты и времени:
 
    SETFDATI("TEST.TXT")                // DATE() + TIME()
 
  . Задание только даты (время устанавливается системное):
 
    SETFDATI("TEST.TXT", DATE() - 10)   // Десять дней до системной даты
 
  . Задание только времени (дата устанавливается системная, а
    разделяющая запятая может быть опущена):
 
    SETFDATI("TEST.TXT", SECTOTIME(Start))
 

See Also: FILEDATE()
FILESEEK()
FILETIME()
SECTOTIME()

 

 

 SETSHARE()
 Устанавливает режим открытия файлов при совместном доступе.
------------------------------------------------------------------------------


 
  Синтаксис
 
    SETSHARE(<nShareMode>) --> lAccepted
 
  Параметры
 
    <nShareMode> - числовой код устанавливаемого режима.
 
  Возвращаемое значение
 
    lAccepted - логическое значение .T. при успешной установке требуемого
    режима, а иначе .F..
 
  Описание
 
    Функция позволяет установить режим, в котором будут открываться все
    файлы средствами CT II. Это имеет особо важное значение при
    многопользовательской работе или, другими словами, при совместном
    (разделяемом) доступе к файлам, наиболее часто встречающемся при
    работе в сети.
 
    Задание режима, кодирование которого приведено в таблице, позволяет
    разграничить доступ к открываемым в дальнейшем как для записи, так и
    для чтения файлам. В исходном состоянии CT II-функции открывают файлы
    в режиме совместимости (код 0).
 
    Таблица 7-23. Режимы совместного доступа к файлам
    --------------------------------------------------------------------
    Код Назначение режима
    --------------------------------------------------------------------
    0   Режим совместимости, в котором DOS или сетевая операционная
        система сами определяют режим. В сетях Novell важную роль играет
        специальный атрибут SHAREABLE
    1   Запрет чтения и записи в файл другими программами
    2   Запрет записи в файл другими программами
    3   Запрет чтения файла другими программами
    4   Разрешение чтения и записи в файл другими программами
    --------------------------------------------------------------------
 
  Примечания
 
  . Функцию можно использовать только в версиях DOS 3.1 и выше.
    Под управлением версий ниже чем 3.1 возвращается .F..
 
  Примеры
 
  . Установка режима открытия файлов с запретом записи для других
    программ:
 
    ? SETSHARE(2)                       // .T. при DOS версии выше 3.1
 
  . Задание неверного значения параметра:


 
    ? SETSHARE(12)                      // .F.
 

See Also: GETSHARE()

 

 

 STRFILE()
 Записывает символьную строку в файл.
------------------------------------------------------------------------------
 
  Синтаксис
 
    STRFILE(<cCharString>, <cFile>, [<lOverwrite>],
        [<nOffset>], [<lCutOff>]) --> nRecordedByte
 
  Параметры
 
    <cCharString> - символьный параметр, задающий записываемую строку.
 
    <cFile> - символьная строка, содержащая необязательные имя диска и
    путь доступа и обязательное имя файла. По умолчанию используются
    текущий диск и текущая директория.
 
    <lOverwrite> - необязательный логический параметр, задающий при
    значении .T. дозапись в существующий файл, а при значении .F. или по
    умолчанию создание нового файла.
 
    <nOffset> - необязательный числовой параметр, задающий смещение
    позиции в файле при дозаписи. По умолчанию запись производится в
    конец файла.
 
    <lCutOff> - необязательный логический параметр, задающий при значении
    .T. усечение при дозаписи части файла, которая следует за вновь
    записанной информацией. По умолчанию усечение не производится.
 
  Возвращаемое значение
 
    nRecordedByte - число записанных байтов.
 
  Описание
 
    Функция обеспечивает запись данных в файл. По сравнению с семейством
    Clipper-функций Fxxxx(), обеспечивающих разделение операций открытия
    файла, записи в него и закрытия, использование данной функции приводит
    к некоторому снижению быстродействия ввиду невозможности оставлять
    файл открытым при многократном проведении дозаписи.
 
    При отсутствии файла, заданного параметром <cFile>, создается новый со
    стандартными атрибутами файлов, устанавливаемыми функцией SETFCREATE().
 
  Примечания
 
  . При задании параметром <nOffset> величины смещения, превышающей


    размер существующего файла (или 0 при создании нового файла), ранее не
    заполненная часть файла заполняется случайными символами.
 
  . Не допускается использование в параметрах универсальных символов
    сопоставления для задания групповых имен.
 
  . В режиме совместного доступа с помощью функции SETSHARE()
    рекомендуется запрещать чтение и запись другим пользователям.
 
  . Функция учитывает текущее состояние режима, переключаемого
    функцией CSETSAFETY().
 
  Примеры
 
  . Добавление в конец файла:
 
    ? STRFILE("ABCDEFGH", "TEST.TXT", .T.)           // Результат: 8
 
  . Указание имени диска и пути доступа:
 
    ? STRFILE("0123456789", "C:\TEXT\TEST.TXT", .T.) // Результат: 8
 
  . Наложение информации на существующие данные со смещения
    20:
 
    ? STRFILE("CLIPPER", "TEST.TXT", .T., 20)        // Результат: 10
 
  . Запись строки длиной 5 символов со смещения 10 в существующий файл
    длиной 20 символов. В зависимости от значения последнего параметра,
    отсекается или оставляется остаток файла:
 
    ? STRFILE(REPLICATE("X", 20), "TEST.TXT")
    ? STRFILE("AAAAA", "TEST.TXT", .T., 10, .F.)   // "XXXXXXXXXXAAAAAXXXXX"
    ? STRFILE("AAAAA", "TEST.TXT", .T., 10, .T.)   // "XXXXXXXXXXAAAAA"
 

See Also: CSETSAFETY()
FILESTR()
SETFCREATE()
SETSHARE()

 

 

 TEMPFILE()
 Создает временный рабочий файл с уникальным именем.
------------------------------------------------------------------------------
 
  Синтаксис
 
    TEMPFILE([<cDirectory>], [<cExtension>],
        [<nFileAttr>]) --> cFileName
 
  Параметры
 
    <cDirectory> - необязательный символьный параметр, задающий имя
    директории с необязательным именем диска. По умолчанию используются


    текущий диск и текущая директория.
 
    <cExtension> - необязательный символьный параметр, задающий расширение
    имени файла. По умолчанию используется имя файла без расширения.
 
    <nFileAttr> - необязательный параметр, задающий число, содержащее
    комбинацию битов маски атрибутов файлов. По умолчанию стандартное
    значение, устанавливаемое функцией SETFCREATE().
 
  Возвращаемое значение
 
    cFileName - символьная строка, содержащая имя временного рабочего
    файла, если он создан, а иначе пустая строка.
 
  Описание
 
    Функция создает в заданной директории файл с уникальным именем,
    генерируемым на основе текущих системных времени и даты.
    Использование параметра <nFileAttr> дает возможность присвоить
    создаваемому файлу атрибуты, позволяющие, в том числе, сделать его
    скрытым (HIDDEN). Кодирование атрибутов приведено в таблице:
 
    Таблица 7-24. Кодирование атрибутов файлов
    --------------------------------------------------------------------
    Бит Число   Симв. константа Присвоенный атрибут
    --------------------------------------------------------------------
        0       FA_NORMAL       Атрибутов не присвоено
    1   1       FA_READONLY     READ ONLY (файл только для чтения)
    2   2       FA_HIDDEN       HIDDEN (скрытый файл)
    3   4       FA_SYSTEM       SYSTEM (системный файл)
    4   8       FA_VOLUME       VOLUME (метка тома диска)
    5   16      FA_DIRECTORY    DIR (директория)
    6   32      FA_ARCHIVE      ARCHIVE (после резервного копирования
                                были внесены изменения)
    --------------------------------------------------------------------
 
  Примечания
 
  . Временный файл создается с длинной 0 байтов, а его имя
    составляется из 8 цифр и содержит точку как разделитель имени и
    расширения.
 
  Примеры
 
  . Создание временного файла в текущей директории текущего диска:


 
    cTempFile := TEMPFILE()
 
  . Создание временного файла в корневой директории диска Е:
 
    cTempFile := TEMPFILE("E:\")
 
  . Создание временного файла с расширением .TMP и атрибутом HIDDEN в
    корневой директории диска A:
 
    cTempFile := TEMPFILE("A:\", "TMP", 2)
 

See Also: SETFATTR()
SETFCREATE()

 

 

 TRUENAME()
 Преобразует заданный путь доступа к стандартной форме.
------------------------------------------------------------------------------
 
  Синтаксис
 
    TRUENAME(<cPathDesignation>) --> cStandardizedPath
 
  Параметры
 
    <cPathDesignation> - символьная строка, задающая путь доступа,
    преобразуемый к стандартной для DOS форме.
 
  Возвращаемое значение
 
    cStandardizedPath - символьная строка, содержащая путь доступа при
    корректном задании пути, а иначе пустая строка.
 
  Описание
 
    Функция преобразует путь доступа, заданный относительно диска или
    относительно текущей директории, к принятому в DOS формату:
 
    <имя диска>:\<директория 1>\...\<директория N>
 
    Функция не проверяет реального существования конкретного пути, однако
    если путь задан некорректно или недоступен указанный диск, то
    возвращается пустая строка.
 
  Примечания
 
  . Для сетей PC-LAN и MS-NET возвращаемый путь доступа дополнительно
    содержит указание сервера:
 
    \\<ServerName>
 
  . Для сети Novell возвращаемый путь доступа дополнительно содержит
    указание сервера и имя тома:
 
    \\<ServerName>\<VolumeName>.
 
  Примеры
 
  . Преобразование текущей директории в форму полного пути:
 
    ? TRUENAME(".")                     // Например, "C:\TEST1"
 
  . Возможный способ задания пути доступа:
 
    ? TRUENAME("..\..\TEST1\.\TEST2")   // Например, "C:\TEST1\TEST2"


 
  . Удаление второго и третьего элементов (имени сервера и тома) из
    полного пути доступа, полученного в сети Novell:
 
    IF NNETWORK()
        cPath := TRUENAME(cOldPath)
        cToken1 := TOKEN(cPath, ":\", 1)
        cToken2 := TOKEN(cPath, ":\", 2)
        cToken3 := TOKEN(cPath, ":\", 3)
        cPath := cToken1 + AFTERATNUM(cToken2 + cToken3, cPath)
    ENDIF
 

See Also: TOKEN()
AFTERATNUM()

 

 

 VOLSERIAL()
  Возвращает серийный номер, записанный на диск при форматировании.
------------------------------------------------------------------------------
 
  Синтаксис
 
    VOLSERIAL([<cDrive>]) --> nVolSerial
 
  Параметры
 
    <cDrive> - необязательный символьный параметр, задающий имя диска в
    виде буквы с необязательным символом ":". По умолчанию используется
    текущий диск.
 
  Возвращаемое значение
 
    nVolSerial - целое положительное 32-битовое число, соответствующее
    серийному номеру тома гибкого или жесткого диска, или 0 при вызове
    функции под управлением более ранней версии, чем DOS 4.0. Если диск
    недоступен, возвращается (-1).
 
  Описание
 
    Функция возвращает серийный номер тома, записываемый на гибкие и
    жесткие диски при форматировании их под управлением DOS версии 4.0 и
    выше. Номер представляет собой 32-битовое число, генерируемое DOS
    без учета текущих даты, времени и внутреннего счетчика.
 
  Примечания
 
  . Возможна несовместимость.
 
  . Функция возвращает значение из блока дисковых параметров.
    Для версий DOS ниже 4.0 возвращается значение 0.
 
  Примеры
 
  . Запрос номера тома:
 
    ? VOLSERIAL()               // 0, если форматировалось не под DOS.4
 

See Also: OSVER()

 

 

 VOLUME()
 Записывает метку тома на гибкий или жесткий диск.
------------------------------------------------------------------------------


 
  Синтаксис
 
    VOLUME(<cDiskName>) --> lEstablished
 
  Параметры
 
    <cDiskName> - символьная строка, содержащая необязательное имя диска и
    обязательное имя для метки тома длиной до 11 символов. По умолчанию
    используется текущий диск.
 
  Возвращаемое значение
 
    lEstablished - логическое значение .T. при допустимом задании метки
    тома, а иначе .F..
 
  Описание
 
    Функция записывает на диск метку тома, используемую в DOS как
    идентификатор диска. На каждом диске может быть только одна метка
    тома, и состоять она может не более, чем из 11 символов.
 
    При использовании данной функции в метку тома между восьмым и девятым
    символами всегда записывается точка, независимо от  того, задана ли
    она в параметре <cDiskName>. При этом точка может быть задана только
    после восьмого символа, а если за ней ничего не следует, то в метку
    тома она не записывается. При задании точки в некорректном месте или
    при использовании недопустимых символов функция записывает в качестве
    метки тома пустую строку и возвращает значение .F..
 
    Запросить метку тома можно с помощью функции FILESEEK(), задав
    величину 8 в качестве значения файлового атрибута.
 
  Примечания
 
  . Метка тома всегда создается в корневой директории.
 
  . При включенном режиме защиты файлов от перезаписи, управляемом
    функцией CSETSAFETY(), описываемая функция запрашивает разрешение на
    перезапись существующей метки тома.
 
  Примеры
 
  . Запись метки тома на дискету, установленную в дисковод A:
 
    ? VOLUME("A:VOLO815")       // .T. при доступной дискете
 
  . Запрос метки тома дискеты, установленной в дисковод A:
 
    ? FILESEEK("A:\*.*", 8)     // Для предыдущего примера: "VOLO815"
 

See Also: FILESEEK()

 

 

 Введение в функции поддержки печати


------------------------------------------------------------------------------
 NUMPRINTER()  Возвращает количество доступных параллельных портов
 PRINTFILE()   Распечатывает ASCII-файл с возможным сбросом старших битов
 PRINTINIT()   Инициализирует принтер, подключенный к параллельному порту
 PRINTREADY()  Возвращает признак готовности принтера, подключенного к порту
 PRINTSCR()    Распечатывает образ экрана
 PRINTSCRX()   Устанавливает режим распечатки образа экрана
 PRINTSEND()   Выводит заданный символ непосредственно на принтер
 PRINTSTAT()   Возвращает код состояния принтера, подключенного к порту
 SPOOLACTIV()  Возвращает признак активности резидентного спулера печати
 SPOOLADD()    Добавляет элемент в очередь спулера печати
 SPOOLCOUNT()  Возвращает количество элементов в очереди спулера печати
 SPOOLDEL()    Удаляет элемент из очереди спулера печати
 SPOOLENTRY()  Возвращает имя файла, содержащегося в элементе очереди печати
 SPOOLFLUSH()  Полностью очищает очередь спулера печати
 TOF()         Возвращает признак соответствия позиции печати началу страницы
 

 

  Введение
 
------------------------------------------------------------------------------
 
    В этой главе рассматриваются средства поддержки вывода данных на
    печать. Хотя Clipper и обеспечивает обработку сообщений о неготовности
    принтера, все же предпочтительнее избегать их формирования, что
    достигается применением описываемых здесь функций. Кроме того, с
    помощью функций данной главы можно определять количество доступных
    портов параллельного интерфейса или уточнять состояние принтера, а
    также управлять очередью спулера печати.
 
    Для использования функций, поддерживающих печать в фоновом режиме,
    перед выполнением прикладной программы необходимо активизировать
    резидентный спулер печати, т.е. запустить DOS-утилиту PRINT. Затем для
    распечатки данных прикладной программы в фоновом режиме необходимо
    перенаправить вывод на печать Clipper-командой SET PRINTER TO <имя


    файла> и после формирования данных и закрытия файла <имя файла>
    передать его спулеру.
 

 

 NUMPRINTER()
  Возвращает количество доступных портов параллельного интерфейса.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NUMPRINTER() --> nNumber
 
  Возвращаемое значение
 
    nNumber - число портов параллельного интерфейса, установленных в
    компьютере.
 
  Описание
 
    Функция позволяет определить количество установленных в компьютере
    портов параллельного интерфейса, что дает возможность организовывать
    выбор пользователем типа принтера, а также выявлять ситуации полного
    отсутствия установленных портов параллельного интерфейса.
 
  Примечание
 
  . Функция не позволяет определить, подключен ли принтер и
    готов ли он к работе.
 
  Примеры
 
  . Определение количества доступных портов:
 
    ? "Доступно портов параллельного интерфейса " + STR(NUMPRINTER(), 2)
 

See Also: PRINTINIT()
PRINTREADY()

 

 

 PRINTFILE()
 Распечатывает ASCII-файл с возможным сбросом старших битов символов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    PRINTFILE(<cFile>, [<lIgnoreHighBit>]) --> lSuccess
 
  Параметры
 
    <cFile> - символьный параметр, задающий необязательные имя диска и
    путь доступа и обязательное имя распечатываемого файла.
 
    <lIgnoreHighBit> - необязательный логический параметр, задающий при
    значении .T. сохранение, а при значении .F. или по умолчанию установку
    в значение 0 старшего бита каждого выводимого символа.
 
  Возвращаемое значение
 
    lSuccess - логическое значение .T. при успешном завершении печати,
    а иначе .F..
 
  Описание
 
    Функция выводит на принтер все символы, составляющие ASCII-файл,


    в том числе, символы возврата каретки (CR) и перевода строки (LF).
    При выводе по умолчанию производится установка в значение 0 старшего
    бита каждого выводимого символа, что позволяет без специальной
    подготовки печатать файлы, содержащие символы "мягкого" перевода
    каретки, создаваемые, например, функцией MEMOWRITE().
 
    Для сохранения значения старшего бита, например, при печати текстов,
    содержащих символы с ASCII-кодами, превышающими 127, следует
    вызывать функцию со значением .T. параметра <lIgnoreHighBit>.
 
  Примечание
 
  . Для устранения конфликтов по именам процедур и функций,
    прикомпоновываемым из других дополнительных библиотек, например
    DGE, можно использовать альтернативное имя данной функции -
    FILEPRINT().
 
  . При работе функции учитываются влияющие на вывод на принтер
    режимы, установленные командами и функциями как Clipper, так и
    CT II (напр., SET PRINTER TO и SETPXLAT()).
 
  Примеры
 
  . Печать файла MEMOFILE.TXT:
 
    PRINTFILE("Memofile.txt")
 
  . Использование альтернативного имени функции:
 
    FILEPRINT("Memofile.txt")
 
  . Печать без установки в значение 0 старшего бита:
 
    FILEPRINT("Memofile.txt", .T.)
 

See Also: PRINTREADY()
SETPXLAT()
SETSHARE()

 

 

 PRINTINIT()
 Инициализирует принтер, подключенный к порту параллельного интерфейса.
------------------------------------------------------------------------------
 
  Синтаксис
 
    PRINTINIT([<nPrinter>, [<lMode>]]) --> nStatus
 
  Параметры
 
    <nPrinter> - необязательный числовой параметр, задающий номер порта
    параллельного интерфейса в диапазоне значений от 1 до 3, что
    соответствует устройствам LPT1, LPT2 или LPT3. По умолчанию 1.
 
    <lMode> - необязательный логический параметр, задающий при значении


    .T. установку внутреннего для Clipper указателя позиции печати в
    начало печатной формы, а при значении .F. или по умолчанию сохранение
    текущего значения.
 
  Возвращаемое значение
 
    nStatus - число, содержащее комбинацию битов, определяющих
    состояние принтера и имеющих значения, приведенные в таблице:
 
    Таблица 8-1. Кодирование битов состояния принтера
    --------------------------------------------------------------------
    Бит   Обозначение             Назначение
    --------------------------------------------------------------------
    1   Timeout error           Тайм-аут истек
    2                           Не используется
    3                           Не используется
    4   Transmission error      Ошибка передачи
    5   Printer on line         Принтер готов
    6   Out of paper            Конец бумаги
    7   Printer acknowledged    Подтверждение приема от принтера
    8   Printer not available   Принтер недоступен
    --------------------------------------------------------------------
 
  Описание
 
    Функция позволяет привести принтер в исходное состояние, попутно
    установив (при задании значения .T. параметра <lMode>) внутренний
    указатель позиции печати на начало печатной формы, что эквивалентно
    вызову SETPRC(0,0).
 
  Примеры
 
  . Инициализация порта LPT1:
 
    PRINTINIT(1)
 

See Also: PRINTSTAT()
TOF()

 

 

 PRINTREADY()
 Возвращает признак готовности принтера, подключенного к параллельному порту.
------------------------------------------------------------------------------
 
  Синтаксис
 
    PRINTREADY([<nPrinter>]) --> lReady
 
  Параметры
 
    <nPrinter> - необязательный числовой параметр, задающий номер порта
    параллельного интерфейса в диапазоне значений от 1 до 3, что
    соответствует устройствам LPT1, LPT2 или LPT3. По умолчанию 1.
 
  Возвращаемое значение


 
    lReady - логическое значение .T. если принтер находится в состоянии
    готовности, а иначе .F..
 
  Описание
 
    Функция позволяет проверять готовность принтера перед началом
    вывода на печать, что помогает избежать необходимости обработки
    ошибок такого рода.
 
  Примеры
 
  . Проверка готовности принтера перед началом печати:
 
    IF PRINTREADY(1)
 
        * Здесь должен располагаться фрагмент программы, выполняющий печать
 
    ELSE
 
        ? "Принтер не готов"
 
    ENDIF
 

See Also: NUMPRINTER()
PRINTINIT()

 

 

 PRINTSCR()
 Распечатывает образ экрана.
------------------------------------------------------------------------------
 
  Синтаксис
 
    PRINTSCR() --> cNull
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция выполняет вывод на печать образа экрана так же, как это
    производит DOS по нажатию клавиши <Print Screen>.
 
  Примечания
 
  . Для устранения конфликтов по именам процедур и функций,
    прикомпоновываемым из других дополнительных библиотек, например
    DGE, можно использовать альтернативное имя данной функции -
    PRTSCREEN().
 
  . Функция PRINTSCRX() позволяет изменить параметры печати,
    инициируемой вызовом описываемой функции или нажатием клавиши
    <Print Screen>.
 
  Примеры
 
  . Распечатка образа экрана:
 
    PRINTSCR()
 

See Also: PRINTSCRX()

 

 

 PRINTSCRX()
 Устанавливает режим распечатки образа экрана.
------------------------------------------------------------------------------
 
  Синтаксис
 
    PRINTSCRX([<nPrinter>, [<cChar|nChar>]]) --> lNonStandard
 
  Параметры
 
    <nPrinter> - необязательный числовой параметр, задающий номер
    порта параллельного интерфейса в диапазоне значений от 1 до 3, что


    соответствует устройствам LPT1, LPT2 или LPT3, через который будет в
    дальнейшем осуществляться печать образа экрана. По умолчанию
    нестандартный (с измененными параметрами) режим печати образа экрана
    отменяется.
 
    <cChar|nChar> - необязательный параметр, задающий символ в символьной
    форме или в виде числового ASCII-кода в диапазоне от 0 до 255, которым
    при печати образа экрана в нестандартном режиме заменяются все
    управляющие символы. По умолчанию замена не производится.
 
  Возвращаемое значение
 
    lNonStandard - логическое значение .T., если установлен нестандартный
    режим печати образа экрана, или значение .F. при восстановлении
    стандартного режима.
 
  Описание
 
    Функция позволяет установить нестандартный режим, в котором в
    дальнейшем будет осуществляться печать образа экрана, инициируемая
    нажатием клавиши <Print Screen> или вызовом функции PRINTSCR().
    В этом режиме устройство LPT1 (PRN), используемое в соответствии с
    установочными параметрами CT II для распечатки образа экрана, может
    быть заменено на заданное параметром <nPrinter>. Кроме того, для
    печати в нестандартном режиме может быть установлен символ,
    заменяющий все символы с ASCII-кодом меньше 32.
 
    При вызове функции без параметров производится установка
    стандартного режима печати образа экрана (вывод через LPT1 без
    замены символов).
 
  Примечания
 
  . Внимание! Функция изменяет один из системных векторов прерываний.
    Поэтому перед окончанием выполнения программы для восстановления
    исходного значения вектора необходимо произвести вызов функции с
    опущенными аргументами. Восстановление векторов производится также
    утилитой INTSAVE, входящей в комплект поставки CT II, и при
    прикомпоновке CT II-драйвера CT2US50.OBJ.
 
  Примеры
 
  . Установка распечатки образа экрана на устройстве LPT3:
 


    PRINTSCRX(3)
 
  . Установка распечатки экрана на устройстве LPT2 с заменой
    управляющих символов пробелами:
 
    PRINTSCRX(2, " ")
 
  . То же, но задание пробела в числовом виде:
 
    PRINTSCRX(2, 32)
 

See Also: PRINTSCR()

 

 

 PRINTSEND()
 Выводит заданный символ непосредственно на принтер.
------------------------------------------------------------------------------
 
  Синтаксис
 
    PRINTSEND(<cChar|nChar>, [<nPrinter>]) --> nNumber
 
  Параметры
 
    <cChar|nChar> - символьный параметр, задающий в символьной форме
    последовательность, а в виде числового ASCII-кода в диапазоне от 0 до
    255 одиночный символ, выводимые на принтер.
 
    <nPrinter> - необязательный числовой параметр, задающий номер порта
    параллельного интерфейса в диапазоне значений от 1 до 3, что
    соответствует устройствам LPT1, LPT2 или LPT3. По умолчанию 1.
 
  Возвращаемое значение
 
    nNumber - при успешном выводе 0, а иначе количество символов,
    которые не удалось послать на принтер.
 
  Описание
 
    Функция позволяет в любой момент послать на принтер один или
    несколько символов (включая управляющие коды) в обход назначений,
    установленных Clipper-командами SET PRINTER и SET CONSOLE.
 
  Примеры
 
  . Посылка на принтер символа перевода страницы, если указатель
    печатаемой позиции не находится на начале печатной формы:
 
    IF .NOT. TOF()
        PRINTSEND(12)           // Вывод символа CHR(12)
    ENDIF
 
  . Посылка нескольких символов (такое использование не рекомендуется):
 
    PRINTSEND("Hello")
 

See Also: PRINTFILE()
TOF()

 

 

 PRINTSTAT()
 Возвращает код состояния принтера, подключенного к параллельному порту.
------------------------------------------------------------------------------
 
  Синтаксис
 


    PRINTSTAT([<nPrinter>]) --> nStatus
 
  Параметры
 
    <nPrinter> - необязательный числовой параметр, задающий номер порта
    параллельного интерфейса в диапазоне значений от 1 до 3, что
    соответствует устройствам LPT1, LPT2 или LPT3. По умолчанию 1.
 
  Возвращаемое значение
 
    nStatus - число, содержащее комбинацию битов, определяющих
    состояние принтера и имеющих значения, приведенные в таблице:
 
    Таблица 8-2. Кодирование битов состояния принтера
    --------------------------------------------------------------------
    Бит   Обозначение             Назначение
    --------------------------------------------------------------------
    1   Timeout error           Тайм-аут истек
    2                           Не используется
    3                           Не используется
    4   Transmission error      Ошибка передачи
    5   Printer on line         Принтер готов
    6   Out of paper            Конец бумаги
    7   Printer acknowledged    Подтверждение приема от принтера
    8   Printer not available   Принтер недоступен
    --------------------------------------------------------------------
 
  Описание
 
    Функция возвращает комбинацию битов текущего состояния принтера,
    позволяя уточнить причину возникновения ошибки.
 
  Примеры
 
  . Уточнение состояния при неготовности принтера:
 
    IF .NOT. PRINTREADY(1)
        nStatus := PRINTSTAT(1)
        IF ISBIT(nStatus, 6)                            // Проверка бита 6
          ? "Установите новый лист бумаги!"
        ENDIF
    ENDIF
 

See Also: PRINTINIT()
PRINTREADY()

 

 

 SPOOLACTIV()
 Возвращает признак активности резидентного спулера печати.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SPOOLACTIV() --> lSpoolActive
 
  Возвращаемое значение
 
    lSpoolActive - логическое значение .T., если резидентный спулер печати


    активен, а иначе .F..
 
  Описание
 
    Функция позволяет определить, был ли активизирован перед запуском
    прикладной программы резидентный спулер печати. Если спулер, которым
    является DOS-утилита PRINT, активен, то возможна организация вывода на
    печать в фоновом режиме. Если спулер ранее не активизирован, то
    распечатка в фоновом режиме недоступна, поскольку из Clipper-программ
    нельзя загружать резидентные утилиты.
 
  Примечания
 
  . При выполнении данной функции возобновляется печать,
    ранее приостановленная вызовом функции SPOOLENTRY().
 
  Примеры
 
  . Организация печати в фоновом режиме:
 
    IF SPOOLACTIVE()
        SPOOLADD("C:\TEST\PRINT.DAT")           // Спулер активен
    ELSE
        ? "Печать в фоновом режиме недоступна из-за отсутствия спулера!"
    ENDIF
 

 

 SPOOLADD()
 Добавляет элемент в очередь спулера печати.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SPOOLADD(<cFile>) --> lAppended
 
  Параметры
 
    <cFile> - символьный параметр, задающий необязательные имя диска
    и путь доступа и обязательное имя файла, для которого создается
    добавляемый в очередь спулера печати элемент.
 
  Возвращаемое значение
 
    lAppended - логическое значение .T., если элемент добавлен в очередь,
    или .F., если добавление невозможно (напр., из-за отсутствия файла с
    указанным именем или переполнения очереди).
 
  Описание
 
    Функция передает спулеру печати имя файла, который необходимо
    распечатать в фоновом режиме.
 
  Примечания
 
  . В начале выполнения прикладной программы следует хотя бы однажды
    проверить, активен ли спулер.
 
  Примеры
 
  . Организация распечатки в фоновом режиме:
 
    SET PRINTER TO C:\TEST\PRINT.DAT    // Переадресация печати в файл


 
    SET DEVICE TO PRINT                 // Переадресация экранного
    @ .... SAY ....                     // вывода на печать и
    @ .... SAY ....                     // формирование распечатываемой
    SET DEVICE TO SCREEN                // информации
 
    SET PRINTER TO                      // Закрытие выходного файла
 
 
    IF SPOOLACTIV()                     // Спулер активен ?
        SPOOLADD("C:\TEST\PRINT.DAT")   // .T., если добавление в очередь
    ELSE                                // прошло успешно
        * Здесь должен располагаться фрагмент программы,
        * организующий обычную распечатку файла
    ENDIF
 

See Also: SPOOLACTIV()
SPOOLCOUNT()
SPOOLDEL()
SPOOLENTRY()
SPOOLFLUSH()

 

 

 SPOOLCOUNT()
 Возвращает количество элементов в очереди спулера печати.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SPOOLCOUNT() --> nNumber
 
  Возвращаемое значение
 
    nNumber - число элементов в очереди спулера печати или 0, если
    очередь пуста.
 
  Описание
 
    Функция возвращает количество элементов в очереди спулера печати, что
    позволяет организовать их последовательный просмотр. Очередь состоит
    из элементов, каждый из которых содержит имя файла, ожидающего печать
    в фоновом режиме, поэтому распечатываемый в данный момент файл в
    очереди не находится и функцией не учитывается.
 
  Примечания
 
  . Отображение списка ожидающих печати файлов:
 
    FOR nI = 1 TO SPOOLCOUNT()
        ? SPOOLENTRY(I)                 // Вывод пути доступа и имени файла
    NEXT nI                             // сопровождается
                                        // приостановкой печати
 
    SPOOLACTIV()                        // Возобновление печати
 
  . Удаление из очереди предпоследнего элемента, содержащего
    имя ожидающего печать файла:


 
    ? SPOOLDEL(SPOOLENTRY(SPOOLCOUNT() -1))     // .T. при успешном удалении
 

See Also: SPOOLENTRY()
SPOOLDEL()

 

 

 SPOOLDEL()
  Удаляет элемент из очереди спулера печати.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SPOOLDEL(<cFile>) --> lDeleted
 
  Параметры
 
    <cFile> - символьный параметр, задающий необязательные имя диска
    и путь доступа и обязательное имя файла, содержащиеся в элементе,
    удаляемом из очереди спулера печати.
 
  Возвращаемое значение
 
    lDeleted - логическое значение .T., если указанный элемент успешно
    удален из очереди, а иначе .F..
 
  Описание
 
    Функция удаляет из очереди спулера печати элемент, содержащий заданное
    имя файла, печать которого еще не начата. Список ожидающих печати
    файлов можно получить при помощи функций  SPOOLCOUNT() и SPOOLENTRY().
 
  Примеры
 
  . Удаление из очереди на печать всех файлов с расширением .SYS:
 
    FOR I = 1 TO SPOOLCOUNT()           // Цикл по всем элементам очереди
        cFile := SPOOLENTRY(I)          // Имя файла (печать
                                        // приостанавливается)
        IF RIGHT(cFile, 4) = ".SYS"
          SPOOLDEL(cFile)               // Удаление элемента
        ENDIF
    NEXT I
 
    SPOOLACTIV()                        // Возобновление печати
 

See Also: SPOOLACTIV()
SPOOLADD()
SPOOLCOUNT()
SPOOLENTRY()
SPOOLFLUSH()

 

 

 SPOOLENTRY()
 Возвращает имя файла, содержащегося в элементе очереди спулера печати.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SPOOLENTRY([<nEntryNumber>]) --> cFileName
 
  Параметры
 
    <nEntryNumber> - необязательный числовой параметр, задающий номер
    элемента очереди спулера печати, для которого должно быть возвращено


    имя файла. По умолчанию обрабатывается последний элемент очереди.
 
  Возвращаемое значение
 
    cFileName - символьная строка, содержащая имя файла в той форме, в
    которой оно было задано при добавлении элемента в очередь, или пустая
    строка при задании номера отсутствующего в очереди элемента или при
    пустой очереди.
 
  Описание
 
    Функция позволяет определить имя файла и путь доступа (если он был
    задан при постановке в очередь) для заданного элемента очереди спулера
    печати.
 
    Вызов данной функции приостанавливает текущую распечатку, возобновить
    которую позволяет вызов функции SPOOLACTIV().
 
  Примеры
 
  . Получение имени файла из последнего элемента:
 
    ? SPOOLENTRY()                      // Имя файла (возможно с путем)
    SPOOLACTIV()                        // Возобновление печати
 
  . Получение имени файла из предпоследнего элемента:
 
    ? SPOOLENTRY(SPOOLCOUNT() - 1)      // "", если очередь пуста
    SPOOLACTIV()                        // Возобновление печати
 

See Also: SPOOLCOUNT()
SPOOLDEL()

 

 

 SPOOLFLUSH()
 Полностью очищает очередь спулера печати.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SPOOLFLUSH() --> lDeleteAll
 
  Возвращаемое значение
 
    lDeleteAll - логическое значение .T., если спулер печати был
    активен и его очередь успешно очищена, а иначе .F..
 
  Описание
 
    Функция позволяет удалить все элементы из очереди спулера печати.
    Очередь состоит из элементов, каждый из которых содержит имя файла,
    ожидающего печать в фоновом режиме, поэтому распечатываемый в данный
    момент файл в очереди не находится и функцией не учитывается.
 
  Примеры
 
  . Очистка очереди спулера печати:
 
    IF SPOOLFLUSH()                             // Все очищено ?
        ? "Очередь спулера печати очищена!"


    ENDIF
 

See Also: SPOOLCOUNT()
SPOOLENTRY()

 

 

 TOF()
  Возвращает признак соответствия позиции печати началу печатной страницы.
------------------------------------------------------------------------------
 
  Синтаксис
 
    TOF() --> lTopOfForm
 
  Возвращаемое значение
 
    lTopOfForm - логическое значение .T., если значение указателя текущей
    позиции печати соответствует началу печатной страницы, а иначе .F..
 
  Описание
 
    Функция позволяет определить, следует ли перед началом печати послать
    на принтер управляющий символ прогона страницы.
 
  Примечания
 
  . Возвращаемое значение формируется на основе анализа внутренних
    указателей Clipper и не позволяет определить, действительно ли
    печатающий узел принтера находится в позиции начала страницы.
 
  Примеры
 
  . Прогон страницы при несоответствии внутреннего указателя ее
    началу:
 
    IF .NOT. TOF()
        EJECT
    ENDIF
 

See Also: PRINTINIT()
PRINTSEND()

 

 

 Введение в функции времени/дат
------------------------------------------------------------------------------
 ADDMONTH()    Возвращает дату, отстоящую на указываемое количество месяцев
 BOM()         Возвращает дату первого дня месяца
 BOQ()         Возвращает дату первого дня квартала
 BOY()         Возвращает дату первого дня года
 CTODOW()      Возвращает номер дня недели по заданному названию
 CTOMONTH()    Возвращает номер месяца по заданному названию
 DMY()         Преобразует заданную дату в формат "ДД <Месяц> ГГ"
 DOY()         Возвращает порядковый номер дня года по заданной дате
 EOM()         Возвращает дату последнего дня месяца
 EOQ()         Возвращает дату последнего дня квартала
 EOY()         Возвращает дату последнего дня года
 ISLEAP()      Возвращает признак принадлежности даты к високосному году
 LASTDAYOM()   Возвращает количество дней в месяце


 MDY()         Преобразует заданную дату в формат "<Месяц> ДД, ГГ"
 NTOCDOW()     Возвращает название дня недели, заданного по номеру
 NTOCMONTH()   Возвращает название месяца, заданного по номеру
 QUARTER()     Возвращает номер квартала заданной даты
 SECTOTIME()   Преобразует число секунд в символьную строку времени
 SETDATE()     Устанавливает системную дату
 SETTIME()     Устанавливает системное время
 SHOWTIME()    Инсталлирует отображение времени на экране в фоновом режиме
 STOD()        Преобразует дату из ANSI-формата в Clipper-формат
 TIMETOSEC()   Возвращает заданное время в виде количества секунд от полуночи
 TIMEVALID()   Возвращает признак корректности задаваемой строки времени
 WAITPERIOD()  Возвращает признак завершения интервала времени
 WEEK()        Возвращает порядковый номер недели года по заданной дате
 WOM()         Возвращает порядковый номер недели месяца по заданной дате
 

 

  Введение
 
------------------------------------------------------------------------------
 
    В этой главе рассматривается набор функций, значительно облегчающих
    многие операции с датами. Операции над данными типа Date,
    поддерживаемые в семействе языков xBASE, присущи и Clipper.
 
    Однако при выполнении некоторых финансовых расчетов часто приходится
    писать функции пользователя. CT II предлагает свою версию этих
    функций, что не только сокращает работу, но и обеспечивает высокую
    скорость исполнения, поскольку они написаны на языке Ассемблер.
 
    В данной главе также описываются функции для работы со встроенными
    часами, функции, обеспечивающие преобразование времени, отсчет
    временных интервалов, контроль продолжительности выполнения циклов
    и установки показаний часов.
 
  Внимание!
 
    Необходимо учитывать, что при вводе с клавиатуры и всех
    преобразованиях дат в Clipper выполняется встроенная проверка
    допустимости даты, в результате которой недопустимая дата всегда


    заменяется пустой. Эту проверку нельзя отменить, поэтому невозможно
    применение функции пользователя для обработки ввода недопустимой даты.
 
    Именно поэтому в описаниях функций не рассматриваются примеры с
    недопустимыми датами, а приведены только случаи использования пустой
    даты.
 

 

 ADDMONTH()
 Возвращает дату, отстоящую от заданной на указываемое количество месяцев.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ADDMONTH([<dDate>], [<nMonth>]) --> dNewDate
 
  Параметры
 
    <dDate> - необязательный параметр, задающий дату в текущем,
    устанавливаемом Clipper-командой SET DATE, формате. По умолчанию
    системная дата.
 
    <nMonth> - необязательный числовой параметр, задающий количество
    прибавляемых месяцев.
 
  Возвращаемое значение
 
    dNewDate - дата в текущем, устанавливаемом Clipper-командой SET DATE,
    формате, отстоящая на <nMonth> месяцев от заданной даты, или пустая
    дата при ошибочном значении параметра.
 
  Описание
 
    Функция возвращает дату, отстоящую от заданной на указанное количество
    месяцев, что можно использовать, например, для исчисления срока
    платежа по дате выписки счета. При задании отрицательных значений
    параметра <nMonth> месяцы вычитаются.
 
  Пример
 
  . Прибавление 36 месяцев к текущей дате:
 
    ? "Срок платежа: ", ADDMONTH(36)
 

 

 BOM()
 Возвращает дату первого дня месяца.
------------------------------------------------------------------------------
 
  Синтаксис
 
    BOM([<dDate>]) --> dResultDate
 
  Параметры
 
    <dDate> - необязательный параметр, задающий дату в текущем,
    устанавливаемом Clipper-командой SET DATE, формате. По умолчанию
    системная дата.
 
  Возвращаемое значение
 
    dResultDate - дата в текущем, устанавливаемом Clipper-командой


    SET DATE, формате, соответствующая первому дню месяца, или пустая
    дата при ошибочном значении параметра.
 
  Описание
 
    Функция возвращает дату первого дня того месяца, которому принадлежит
    дата, заданная параметром <dDate>, что позволяет определять количество
    дней, прошедших с начала месяца.
 
  Примеры
 
  . Определение количества дней, прошедших с начала текущего месяца:
 
    ? DATE() - BOM()
 

See Also: EOM()
BOQ()
EOQ()
BOY()
EOY()

 

 

 BOQ()
 Возвращает дату первого дня квартала.
------------------------------------------------------------------------------
 
  Синтаксис
 
    BOQ([<dDate>]) --> dResultDate
 
  Параметры
 
    <dDate> - необязательный параметр, задающий дату в текущем,
    устанавливаемом Clipper-командой SET DATE, формате. По умолчанию
    системная дата.
 
  Возвращаемое значение
 
    dResultDate - дата в текущем, устанавливаемом Clipper-командой
    SET DATE, формате, соответствующая первому дню квартала, или пустая
    дата при ошибочном значении параметра.
 
  Описание
 
    Функция возвращает дату первого дня того квартала, которому
    принадлежит дата, заданная параметром <dDate>, что позволяет
    определять количество дней, прошедших с начала квартала.
 
  Примеры
 
  . Определение количества дней, прошедших с начала текущего квартала:
 
    ? DATE() - BOQ()
 

See Also: BOM()
EOM()
EOQ()
BOY()
EOY()

 

 

 BOY()
 Возвращает дату первого дня года.
------------------------------------------------------------------------------
 
  Синтаксис
 
    BOY([<dDate>]) --> dResultDate
 
  Параметры
 
    <dDate> - необязательный параметр, задающий дату в текущем,
    устанавливаемом Clipper-командой SET DATE, формате. По умолчанию
    системная дата.
 
  Возвращаемое значение


 
    dResultDate - дата в текущем, устанавливаемом Clipper-командой
    SET DATE, формате, соответствующая первому дню года, или пустая
    дата при ошибочном значении параметра.
 
  Описание
 
    Функция возвращает дату первого дня того года, которому принадлежит
    дата, заданная параметром <dDate>, что позволяет определять количество
    дней, прошедших с начала года.
 
  Примеры
 
  . Определение количества дней, прошедших с начала текущего года:
 
    ? DATE() - BOY()
 

See Also: BOY()
EOM()
BOQ()
EOQ()
EOY()

 

 

 CTODOW()
 Возвращает номер дня недели по заданному названию.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CTODOW(<cDayOfWeek>) --> nDayOfWeek
 
  Параметры
 
    <cDayOfWeek> - символьная строка, задающая название дня недели без
    учета различия строчных и прописных букв.
 
  Возвращаемое значение
 
    nDayOfWeek - число, соответствующее порядковому номеру заданного
    дня недели, или 0 при недопустимом значении параметра.
 
  Описание
 
    Функция возвращает порядковый номер заданного по названию дня недели.
    Названия могут быть сокращены до корректного количества букв с учетом
    того, что возвращается максимальный номер дня недели из всех
    соответствующих заданному сокращению.
 
  Примечания
 
  . Распознаваемые названия зависят от использования национальных
    версий Clipper. Так при использовании английской версии Clipper 5.0
    функция распознает значение задаваемого дня недели только на
    английском языке, а при использовании русской версии - только на
    русском.
 
  . Счет дней ведется с воскресенья (как принято в США, Великобритании
    и некоторых других странах).
 
  Примеры
 
  . Порядковый номер воскресенья:
 
    ? CTODOW("Воскресенье")             // Результат: 1


 
  . Порядковый номер среды:
 
    ? CTODOW("СРЕДА")                   // Результат: 4
    ? CTODOW("Среда")                   // Результат: 4
    ? CTODOW("Ср")                      // Результат: 4
    ? CTODOW("С")                       // Результат: 7 (суббота)
 
  . Порядковый номер понедельника:
 
    ? CTODOW("По")                      // Результат: 2
 

See Also: NTOCDOW()

 

 

 CTOMONTH()
  Возвращает номер месяца по заданному названию.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CTOMONTH(<cMonth>) --> nMonth
 
  Параметры
 
    <cMonth> - символьная строка, задающая название месяца без учета
    различия строчных и прописных букв.
 
  Возвращаемое значение
 
    nMonth - число, соответствующее порядковому номеру заданного месяца,
    или 0 при недопустимом значении параметра.
 
  Описание
 
    Функция возвращает порядковый номер заданного по названию месяца.
    Названия могут быть сокращены до корректного количества букв с учетом
    того, что возвращается максимальный номер месяца из всех
    соответствующих заданному сокращению.
 
  Примечания
 
  . Распознаваемые названия зависят от использования национальных
    версий Clipper. Так при использовании английской версии Clipper 5.0
    функция распознает значение задаваемого месяца только на английском
    языке, а при использовании русской версии - только на русском.
 
  Примеры
 
  . Порядковый номер января:
 
    ? CTOMONTH("Январь")                // Результат: 1
 
  . Порядковый номер августа:
 
    ? CTOMONTH("АВГУСТ")                // Результат: 8
    ? CTOMONTH("Август")                // Результат: 8
    ? CTOMONTH("Авг")                   // Результат: 8
 
  . Порядковый номер апреля:


 
    ? CTOMONTH("Ап")                    // Результат: 4
    ? CTOMONTH("А")                     // Результат: 8 (август)
 

See Also: NTOCMONTH()

 

 

 DMY()
 Преобразует заданную дату в формат "ДД <Месяц> ГГ".
------------------------------------------------------------------------------
 
  Синтаксис
 
    DMY([<dDate>], [<lMode>]) --> cDate
 
  Параметры
 
    <dDate> - необязательный параметр, задающий дату в текущем,
    устанавливаемом Clipper- командой SET DATE, формате. По умолчанию
    системная дата.
 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. разделение числа и месяца символами точка и пробел, а при значении
    .F. или по умолчанию разделение одним пробелом.
 
  Возвращаемое значение
 
    cDate - символьная строка, содержащая дату в зависимости от состояния
    режима, переключаемого Clipper-командой SET CENTURY, в формате
    "ДД[.] <Месяц> ГГ" или "ДД[.] <Месяц> ГГГГ".
 
  Описание
 
    Функция возвращает дату в виде символьной строки, содержащей число,
    название месяца и год. Число может отделяться от названия месяца
    точкой и пробелом или только пробелом.
 
  Примечания
 
  . Возвращаемые функцией названия даются на языке используемой
    национальной версии Clipper.
 
  Примеры
 
  . Текущая дата:
 
    SET CENTURY OFF
    ? DMY()                             // Например: 1 Январь 92
 
  . Текущая дата с точкой:
 
    ? DMY(.T.)                          // Например: 1. Январь 92
 
  . Вывод даты в формате с полным указанием года:
 
    SET CENTURY ON
    ? DMY(CTOD("02/01/92"), .T.)        // 1. Февраль 1992
 

See Also: MDY()

 

 

 DOY()
 Возвращает порядковый номер дня года по заданной дате.
------------------------------------------------------------------------------


 
  Синтаксис
 
    DOY([<dDate>]) --> nDayOfYear
 
  Параметры
 
    <dDate> - необязательный параметр, задающий дату в текущем,
    устанавливаемом Clipper- командой SET DATE, формате. По умолчанию
    системная дата.
 
  Возвращаемое значение
 
    nDayOfYear - число календарных дней с начала года до заданной даты,
    или 0 при ошибочном значении параметра.
 
  Описание
 
    Функция возвращает количество дней, прошедших с начала года до
    заданной даты, что может использоваться при работе с интервалами
    времени. 1 января - это день номер 1, а 31 декабря - это день номер
    366 в високосном году и 365 в обычном.
 
  Примеры
 
  . Определение количества оставшихся дней:
 
    ? "До 1 апреля осталось", NTOC(DOY(CTOD("04/01/92"))-DOY()), "дней!"
 

 

 EOM()
 Возвращает дату последнего дня месяца.
------------------------------------------------------------------------------
 
  Синтаксис
 
    EOM([<dDate>]) --> dResultDate
 
  Параметры
 
    <dDate> - необязательный параметр, задающий дату в текущем,
    устанавливаемом Clipper-командой SET DATE, формате. По умолчанию
    системная дата.
 
  Возвращаемое значение
 
    dResultDate - дата в текущем, устанавливаемом Clipper-командой
    SET DATE, формате, соответствующая последнему дню месяца, или
    пустая дата при ошибочном значении параметра.
 
  Описание
 
    Функция возвращает дату последнего дня того месяца, которому
    принадлежит дата, заданная параметром <dDate>, что позволяет в
    дальнейшем определять количество оставшихся дней.
 
  Примечания
 
  . Данная функция, в отличие от LASTDAYOM(), возвращает не количество
    дней в месяце, а дату последнего дня месяца.
 
  Примеры
 
  . Определение числа дней, оставшихся до конца месяца:
 
    ? EOM() - DATE()


 

See Also: BOM()
BOQ()
EOQ()
BOY()
EOY()
LASTDAYOM()

 

 

 EOQ()
 Возвращает дату последнего дня квартала.
------------------------------------------------------------------------------
 
  Синтаксис
 
    EOQ([<dDate>]) --> dResultDate
 
  Параметры
 
    <dDate> - необязательный параметр, задающий дату в текущем,
    устанавливаемом Clipper- командой SET DATE, формате. По умолчанию
    системная дата.
 
  Возвращаемое значение
 
    dResultDate - дата в текущем, устанавливаемом Clipper-командой
    SET DATE, формате, соответствующая последнему дню квартала, или
    пустая дата при ошибочном значении параметра.
 
  Описание
 
    Функция возвращает дату последнего дня того квартала, которому
    принадлежит дата, заданная параметром <dDate>, что позволяет
    определить количество оставшихся дней.
 
  Примеры
 
  . Дата окончания квартала:
 
    ? "Последний день текущего квартала:", EOQ()
 

See Also: BOM()
EOM()
BOQ()
BOY()
EOY()

 

 

 EOY()
 Возвращает дату последнего дня года.
------------------------------------------------------------------------------
 
  Синтаксис
 
    EOY([<dDate>]) --> dResultDate
 
  Параметры
 
    <dDate> - необязательный параметр, задающий дату в текущем,
    устанавливаемом Clipper-командой SET DATE, формате. По умолчанию
    системная дата.
 
  Возвращаемое значение
 
    dResultDate - дата в текущем, устанавливаемом Clipper-командой
    SET DATE, формате, соответствующая последнему дню года, или пустая
    дата при ошибочном значении параметра.
 
  Описание
 
    Функция возвращает дату последнего дня того года, которому принадлежит
    дата, заданная параметром <dDate>, что позволяет обойтись без ее
    литерального задания.
 
  Примеры
 
  . Определение последнего дня текущего года:


 
    ? EOY()             // Например: 12/31/92
 

See Also: BOM()
EOM()
BOQ()
EOQ()
BOY()

 

 

 ISLEAP()
 Возвращает признак принадлежности даты к високосному году.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ISLEAP([<dDate>]) --> lLeapYear
 
  Параметры
 
    <dDate> - необязательный параметр, задающий дату в текущем,
    устанавливаемом Clipper- командой SET DATE, формате. По умолчанию
    системная дата.
 
  Возвращаемое значение
 
    lLeapYear - логическое значение .T., если заданная дата принадлежит
    високосному году, а иначе .F..
 
  Описание
 
    Функция, на основании всех правил, включая обработку смены столетия,
    позволяет определить, является ли указанный год високосным, что может
    потребоваться в финансовых расчетах.
 
  Примеры
 
  . Определение високосного года:
 
    ? ISLEAP(CTOD("01/01/1901"))        // .F., обычный год
    ? ISLEAP(CTOD("09/30/1992"))        // .T., високосный год
    ? ISLEAP(CTOD("01/01/2000"))        // .T., високосный год
 

 

 LASTDAYOM()
 Возвращает количество дней в месяце.
------------------------------------------------------------------------------
 
  Синтаксис
 
    LASTDAYOM([<dDate|nMonth>]) --> nDaysInMonth
 
  Параметры
 
    <dDate|nMonth>- необязательный параметр, задающий обрабатываемую
    дату в формате, установленном Clipper-командой SET DATE, или в виде
    номера месяца. По умолчанию текущая системная дата.
 
  Возвращаемое значение
 
    nDaysInMonth - число дней в месяце заданной даты, или 0 при ошибочном
    значении параметра.
 
  Описание
 
    Функция возвращает количество дней в месяце, заданном параметром
    <dDate|nMonth>. Вычитая из возвращаемого значения текущее число,
    можно получить число оставшихся до конца месяца дней.


 
  Примеры
 
  . Определение количества дней до конца месяца:
 
    ? "Осталось " + STR(LASTDAYOM() - DAY(), 2) + " дней до конца месяца"
 

See Also: EOM()

 

 

 MDY()
 Преобразует заданную дату в формат "<Месяц> ДД, ГГ".
------------------------------------------------------------------------------
 
  Синтаксис
 
    MDY([<dDate>]) --> cDate
 
  Параметры
 
    <dDate> - необязательный параметр, задающий дату в текущем,
    устанавливаемом Clipper-командой SET DATE, формате. По умолчанию
    системная дата.
 
  Возвращаемое значение
 
    cDate - символьная строка, содержащая дату в зависимости от состояния
    режима, переключаемого Clipper-командой SET CENTURY, в формате
    "<Месяц> ДД, ГГ" или "<Месяц> ДД, ГГГГ".
 
  Описание
 
    Функция возвращает дату в виде символьной строки, содержащей название
    месяца, число ("ДД") и год ("ГГ" или "ГГГГ").
 
  Примечания
 
  . Возвращаемые функцией названия даются на языке используемой
    национальной версии Clipper.
 
  Примеры
 
  . Текущая системная дата:
 
    SET CENTURY OFF
    ? MDY()                             // Например: Январь 1, 92
 
  . Задание даты:
 
    SET CENTURY ON
    ? MDY(CTOD("02/02/92"))             // Февраль 2, 1992
 

See Also: DMY()

 

 

 NTOCDOW()
 Возвращает название дня недели, заданного по номеру.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NTOCDOW(<nWeekDay>) --> cWeekDay
 
  Параметры
 
    <nWeekDay> - числовой параметр, задающий порядковый номер дня недели
    в диапазоне от 1 до 7.
 
  Возвращаемое значение
 
    cWeekDay - символьная строка, содержащая название заданного дня


    недели, или пустая строка при ошибочном значении параметра.
 
  Описание
 
    Функция возвращает название дня недели, имеющего порядковый номер,
    заданный параметром <nWeekDay>. Счет дней ведется с воскресенья (как
    принято в США, Великобритании и некоторых других странах).
 
  Примечания
 
  . Возвращаемые функцией названия даются на языке используемой
    национальной версии Clipper.
 
  Примеры
 
  . Определение названий дней недели:
 
    ? NTOCDOW(1)        // "Воскресенье"
    ? NTOCDOW(4)        // "Среда"
    ? NTOCDOW(7)        // "Суббота"
    ? NTOCDOW(8)        // ""
 

See Also: CTODOW()

 

 

 NTOCMONTH()
 Возвращает название месяца, заданного по номеру.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NTOCMONTH(<nMonth>) --> cMonth
 
  Параметры
 
    <nMonth> - числовой параметр, задающий порядковый номер месяца в
    диапазоне от 1 до 12.
 
  Возвращаемое значение
 
    cMonth - символьная строка, содержащая название заданного месяца,
    или пустая строка при ошибочном значении параметра.
 
  Описание
 
    Функция возвращает название месяца, имеющего порядковый номер,
    заданный параметром <nMonth>. Январь является первым месяцем,
    февраль вторым и т.д.
 
  Примечания
 
  . Возвращаемые функцией названия даются на языке используемой
    национальной версии Clipper.
 
  Примеры
 
  . Определение названий месяцев:
 
    ? NTOCMONTH(1)      // "Январь"
    ? NTOCMONTH(2)      // "Февраль"
    ? NTOCMONTH(12)     // "Декабрь"
    ? NTOCMONTH(14)     // ""
 

See Also: CTOMONTH()

 

 

 QUARTER()
 Возвращает номер квартала заданной даты.
------------------------------------------------------------------------------


 
  Синтаксис
 
    QUARTER([<dDate>]) --> nQuarter
 
  Параметры
 
    <dDate> - необязательный параметр, задающий дату в текущем,
    устанавливаемом Clipper- командой SET DATE, формате. По умолчанию
    системная дата.
 
  Возвращаемое значение
 
    nQuarter - номер квартала заданной даты, или 0 при ошибочном значении
    параметра.
 
  Описание
 
    Функция возвращает порядковый номер квартала, к которому относится
    заданная дата.
 
  Примеры
 
  . Определение квартала:
 
    ? "Поставка планируется на", QUARTER(CTOD("07/12/1992")),:
         "квартал 1992 года"
 

 

 SECTOTIME()
 Преобразует число секунд в символьную строку времени.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SECTOTIME(<nSeconds>, [<lHundredth>]) --> cTime
 
  Параметры
 
    <nSeconds> - положительное число секунд. При задании величины,
    превышающей 86400, преобразуемое значение вычисляется по формуле
    <nSeconds> % 86400.
 
    <lHundredth> - необязательный логический параметр, задающий при
    значении .T. преобразование в форму с сотыми долями секунды, а при
    значении .F. или по умолчанию без сотых долей.
 
  Возвращаемое значение
 
    cTime - символьная строка, содержащая время, или пустая строка при
    задании отрицательного значения параметра <nSeconds>.
 
  Описание
 
    Функция преобразует число секунд в символьную строку времени с
    символом ":", используемым в качестве разделителя. Зависимость
    формата возвращаемого значения от значения параметра <lHundredth>
    приведена в таблице:
 
    --------------------------------------------------------------------
    <lHundredth>        Формат
    --------------------------------------------------------------------


    .T.                 "ЧЧ:ММ:СС:сс"
    .F.                 "ЧЧ:ММ:СС"
    --------------------------------------------------------------------
 
    где "ЧЧ" - цифры часов, "ММ" - цифры минут, "СС" - цифры секунд, а
    "сс" - цифры сотых долей секунды.
 
  Примечания
 
  . При значении .F. параметра <lHundredth> сотые доли секунд
    отбрасываются без округления числа секунд.
 
  Примеры
 
  . Вычисление интервала времени и вывод результата без сотых
    долей секунды:
 
    nBeginning := 170
    nEnd := 3656
    ? SECTOTIME(nEnd - nBeginning)      // "00:58:06"
 
  . Вывод с сотыми долями секунды:
 
    ? SECTOTIME(45873.22, .T.)          // "12:44:33:22"
 

See Also: TIMETOSEC()

 

 

 SETDATE()
 Устанавливает системную дату.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETDATE(<dDate>, [<lMode>]) --> lSet
 
  Параметры
 
    <dDate> - параметр, задающий дату в текущем, устанавливаемом
    Clipper-командой SET DATE, формате.
 
    <lMode> - необязательный логический параметр, используемый для машин
    класса AT и задающий при значении .T. запись устанавливаемого значения
    в CMOS. При его значении .F. или по умолчанию новое значение в CMOS не
    записывается.
 
  Возвращаемое значение
 
    lSet - логическое значение .T. при успешной установке заданного
    значения, а иначе .F..
 
  Описание
 
    Функция устанавливает заданное значение текущей системной даты, после
    чего это новое значение используется всеми функциями, работающими с
    датой.
 
  Примеры
 
  . Установка системной даты с записью в CMOS:
 
    dNewDate := CTOD("07/30/91")
    IF ISAT()                           // Класс AT?
        SETDATE(dNewDate, .T.)


    ELSE
        SETDATE(dNewDate)
    ENDIF
 
  . То же самое, но более компактно:
 
    SETDATE(dNewDate, ISAT())
 

See Also: ISAT()
SETTIME()

 

 

 SETTIME()
 Устанавливает системное время.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETTIME(<cTime>, [<lMode>]) --> lSet
 
  Параметры
 
    <cTime> - символьная строка, задающая устанавливаемое значение
    системного времени в формате значения, возвращаемого
    Clipper-функцией TIME() - "ЧЧ:ММ:СС".
 
    <lMode> - необязательный логический параметр, используемый для машин
    класса AT и задающий при значении .T. запись устанавливаемого значения
    в CMOS. При его значении .F. или по умолчанию новое значение в CMOS не
    записывается.
 
  Возвращаемое значение
 
    lSet - логическое значение .T. при успешной установке заданного
    значения, а иначе .F..
 
  Описание
 
    Функция устанавливает заданное значение системного времени, после
    чего это новое значение используется всеми функциями, работающими с
    временем.
 
  Примеры
 
  . Установка системного времени с записью в CMOS:
 
    cNewTime := "10:20:00"
    IF ISAT()                   // Класс AT?
        SETTIME(cNewTime, .T.)
    ELSE
        SETTIME(cNewTime)
    ENDIF
 
  . То же самое, но более компактно:
 
    SETTIME(cNewTime, ISAT())
 

See Also: SETDATE()

 

 

 SHOWTIME()
 Инсталлирует отображение времени на экране в фоновом режиме.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SHOWTIME([[<nRow>], [<nColumn>],
        [<lMode>], [<cAttr|nAttr>],
        [<l12/24>], [<lAM/PM>]]) --> cNull
 
  Параметры
 
    <nRow> - необязательный числовой параметр, задающий номер строки


    экрана для выводимого значения. По умолчанию строка текущей позиции
    курсора.
 
    <nColumn> - необязательный числовой параметр, задающий номер столбца
    экрана для выводимого значения. По умолчанию столбец текущей позиции
    курсора.
 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. вывод времени без указания секунд, а при значении .F. или по
    умолчанию вывод с секундами.
 
    <cAttr|nAttr> - необязательный параметр, задающий в символьном формате
    или в виде числового комбинированного значения цветовой атрибут
    выводимой информации. По умолчанию используется стандартное значение
    цветового атрибута CLEARA, описанного во Введении к главе
    "Видеофункции".
 
    <l12/24> - необязательный логический параметр, задающий при значении
    .T. вывод времени в 12-часовом формате, а при значении .F. или по
    умолчанию вывод в 24-часовом формате.
 
    <lAM/PM> - необязательный логический параметр, используемый при
    задании 12-часового формата и задающий при значении .T. сопровождение
    выводимого времени индикатором первой ( символ "a") или второй (символ
    "p") половины суток. При значении .F. или по умолчанию сопровождение
    индикатором половины суток не осуществляется.
 
    () - при вызове функции с опущенными аргументами отменяется раннее
    инсталлированное отображение времени.
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция позволяет организовать постоянно обновляемое отображение
    текущего времени в заданной позиции экрана. Цветовые атрибуты
    выводимого значения задаются параметром <cAttr|nAttr> в символьном
    формате, используемом в Clipper-функции SETCOLOR() (напр.,"0/7" или
    "B/GR") или в виде комбинированного числового значения (напр., 117).
 
  Примечания
 


  . Внимание! Функция изменяет один из системных векторов прерываний.
    Поэтому перед окончанием выполнения программы для восстановления
    исходного значения вектора необходимо произвести вызов функции с
    опущенными параметрами. Восстановление векторов производится также
    утилитой INTSAVE, входящей в комплект поставки CT II, и при
    прикомпоновке CT II-драйвера CT2US50.OBJ.
 
  Примеры
 
  . Часы без секунд со стандартным цветовым атрибутом, располагающиеся
    в строке 0 и столбце 70:
 
    SET SCOREBOARD OFF          // Выключение для использования строки 0
    SHOWTIME(0, 70, .T.)        // Включение часов
        *...
        *...
    SHOWTIME()                  // Выключение часов
 
  . Часы в нижней строке экрана в 12-часовом формате с индикатором
    первой или второй половины суток и в цвете "белый на синем":
 
    SHOWTIME(24, 70, .T., "W/B", .T., .T.)
 

 

 STOD()
 Преобразует дату из ANSI-формата в Clipper-формат.
------------------------------------------------------------------------------
 
  Синтаксис
 
    STOD(<cAnsiDate>) --> dDate
 
  Параметры
 
    <cAnsiDate> - символьная строка, содержащая дату в ANSI-формате
    ("YYYYMMDD").
 
  Возвращаемое значение
 
    dDate - дата в текущем, устанавливаемом Clipper-командой SET DATE,
    формате, или пустая дата при ошибочном значении параметра.
 
  Описание
 
    Функция преобразует символьную строку, содержащую дату в
    ANSI-формате, полученную, например, при помощи Clipper-функции
    DTOS(), в соответствующее значение в Clipper-формате.
 
  Примеры
 
  . Печать содержимого полей базы данных с датами в ANSI-формате:
 
    APPEND FROM OTHDATE
    LIST STOD(cAnsiDate)
 

 

 TIMETOSEC()
 Возвращает заданное время в виде количества секунд от начала суток.
------------------------------------------------------------------------------


 
  Синтаксис
 
    TIMETOSEC([<cTime>]) --> nSeconds
 
  Параметры
 
    <cTime> - необязательный символьный параметр, задающий время в формате
    "ЧЧ:ММ:СС:сс". По умолчанию текущее системное время.
 
  Возвращаемое значение
 
    nSeconds - количество секунд (с сотыми долями) от начала суток до
    заданного момента.
 
  Описание
 
    Функция возвращает количество секунд от начала суток до заданного
    момента, что облегчает расчет интервалов времени. Обратное
    преобразование выполняется функцией SECTOTIME(). В параметре <cTime>
    можно опускать справа сотые доли секунды, затем секунды, а затем и
    минуты. Опущенные элементы принимаются равными нулю.
 
  Примеры
 
  . Преобразование времени:
 
    ? TIMETOSEC("12:44:33:22")                  // Результат: 45873.22
 
  . Вычисление интервала времени в секундах:
 
    cBegin := "12:55:44:33"
    cEnd := "14:56:12:22"
    ? TIMETOSEC(cEnd) - TIMETOSEC(cBegin)       // Интервал в секундах
 
  . Варианты форматов задания времени:
 
    ? TIMETOSEC("12")
    ? TIMETOSEC("12:44")
    ? TIMETOSEC("12:44:33")
    ? TIMETOSEC("12:44:33:22")
 

See Also: SECTOTIME()

 

 

 TIMEVALID()
 Возвращает признак корректности задаваемой строки времени.
------------------------------------------------------------------------------
 
  Синтаксис
 
    TIMEVALID(<cTime>) --> lValid
 
  Параметры
 
    <cTime> - символьная строка, содержащая проверяемое значение.
 
  Возвращаемое значение
 
    lValid - логическое значение .T. при корректном значении параметра
    <cTime>, а иначе .F..
 
  Описание
 
    Функция выполняет проверку корректности строки времени, что позволяет
    использовать ее для контроля вводимых значений, например, в


    предложении VALID Clipper- команды GET. Проверяемое время должно быть в
    формате "ЧЧ:ММ:СС:сс". Причем каждый из элементов ("ЧЧ" - часы, "ММ" -
    минуты, "СС" - секунды и "сс" - сотые доли секунды) должен содержать
    по 2 цифры.
 
    Однако значения с предшествующим им разделителем могут быть опущены
    справа. В этом случае они принимаются равными нулю. Например,
    допустимы значения "12", "12:59", "12:59:59" и "12:59:59:99", а
    недопустимы "24", "12:60", "12:1" и "12:".
 
  Примечания
 
  . Проверяемая строка не должна содержать конечных и начальных
    пробелов, удалить которые можно Clipper-функциями TRIM(), LTRIM() или
    ALLTRIM().
 
  Примеры
 
  . Предложение VALID с использованием TRIM():
 
    cBegin := SPACE(11)
    @ 5, 10 SAY "Введите время начала работы:";
    GET cBegin VALID TIMEVALID(TRIM(cBegin))
    READ
 
  . Если не использовать TRIM(), то все требуемые элементы должны быть
    введены оператором:
 
    cBegin := SPACE(5)
    @ 5, 10 SAY "Введите, пожалуйста, время начала работы:";
    GET cBegin VALID TIMEVALID(cBegin)
    READ
 

 

 WAITPERIOD()
 Возвращает признак завершения интервала времени.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WAITPERIOD([<nDelay>]) --> lNotElapsed
 
  Параметры
 
    <nDelay> - необязательный целый числовой параметр, задающий количество
    сотых долей секунды (1/100 с) устанавливаемого нового интервала
    времени в диапазоне от 1 до 8 640 000 (одни сутки - 86 400 с).
    По умолчанию остаток интервала времени не изменяется.
 
  Возвращаемое значение
 
    lNotElapsed - логическое значение .T., если заданный интервал еще не
    истек, а иначе .F..
 


  Описание
 
    Функция позволяет отслеживать момент окончания заданного интервала
    времени, например, в цикле DO...WHILE. При вызове функции с параметром
    <nDelay> производится инициализация внутреннего указателя, связанная с
    запоминанием показаний встроенных часов.
 
    При последующих вызовах функции с опущенным параметром возвращается
    признак окончания заданного интервала времени. Таким образом,
    возвращаемое функцией значение можно использовать как дополнительное
    условие для завершения цикла.
 
  Примечания
 
  . Поскольку описываемая функция сравнивает показания встроенных
    часов с установленным при инициализации значением, то все функции,
    изменяющие системное время, побочно изменяют и отслеживаемый интервал.
 
  . Функция корректно обрабатывает момент наступления полуночи, при
    котором происходит сброс часов в 00:00:00.
 
  Примеры
 
  . Выполнение цикла в течение не более 5 с:
 
    WAITPERIOD(500)                     // Инициализация интервала в 5 с
    DO WHILE <условие1> .AND. <условие2> .AND. WAITPERIOD()
        *...
    ENDDO
 

See Also: SETTIME()

 

 

 WEEK()
 Возвращает порядковый номер недели года по заданной дате.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WEEK([<dDate>]) --> nWeek
 
  Параметры
 
    <dDate> - необязательный параметр, задающий дату в текущем,
    устанавливаемом Clipper-командой SET DATE, формате. По умолчанию
    системная дата.
 
  Возвращаемое значение
 
    nWeek - номер недели года заданной даты, или 0 при ошибочном
    значении параметра.
 
  Описание
 
    Функция возвращает порядковый номер недели года, что может
    использоваться при некоторых финансовых и бухгалтерских расчетах.
 
  Примеры
 
  . Определение порядкового номера недели:
 


    dDate := CTOD("03/14/92")
    ? "Эта дата приходится на неделю:", WEEK(dDate)
 

See Also: WOM()

 

 

 WOM()
  Возвращает порядковый номер недели месяца по заданной дате.
------------------------------------------------------------------------------
 
  Синтаксис
 
    WOM([<dDate>]) --> nWeek
 
  Параметры
 
    <dDate> - необязательный параметр, задающий дату в текущем,
    устанавливаемом Clipper-командой SET DATE, формате. По умолчанию
    системная дата.
 
  Возвращаемое значение
 
    nWeek - номер недели месяца заданной даты, или 0 при ошибочном
    значении параметра.
 
  Описание
 
    Функция возвращает порядковый номер недели месяца, что может
    использоваться при некоторых финансовых и бухгалтерских расчетах.
 
  Примеры
 
  . Вычисление недели поставки:
 
    ? "Мы поставим продукт в течение " + STR(WOM(dDate)) + " недели августа!"
 

See Also: WEEK()

 

 

 Введение в дисковые функции
------------------------------------------------------------------------------
 DBFDSKSIZE()  Возвращает размер, занимаемый .DBF-файлом на диске
 DBFSIZE()     Возвращает размер, занимаемый .DBF-файлом в памяти
 FIELDDECI()   Возвращает количество десятичных разрядов в числовом поле
 FIELDNUM()    Возвращает номер поля базы данных
 FIELDSIZE()   Возвращает длину поля базы данных
 FIELDTYPE()   Возвращает тип поля базы данных
 ISDBT()       Возвращает признак наличия в базе данных memo-файла (.DBT)
 

 

  Введение
 
------------------------------------------------------------------------------
 
    Рассматриваемые в данной главе функции значительно расширяют
    возможности операций с базами данных. Например, они позволяют
    определить, связаны ли с базой данных memo-файл (.DBT), число
    десятичных разрядов или тип данных какого-либо поля.
 
    По сравнению с набором соответствующих функций Clipper Tools One


    эта глава не содержит изменений или дополнений.
 

 

 DBFDSKSIZE()
 Возвращает размер, занимаемый .DBF-файлом на диске.
------------------------------------------------------------------------------
 
  Синтаксис
 
    DBFDSKSIZE() --> nFileSize
 
  Возвращаемое значение
 
    nFileSize - размер файла базы данных, открытой в активной рабочей
    области в текущий момент времени, т.е. число байтов, которые
    фактически записаны в этом файле.
 
  Описание
 
    Функция позволяет определить размер базы данных на диске.
    Применение данной функции полезно совместно с функцией DBFSIZE().
    Расхождение в результатах, возвращаемых этими функциями, означает,
    что часть данных еще не записана на гибкий или жесткий диск. Кроме
    того, можно определить, были ли уже вновь введенные данные записаны
    на диск.
 
  Примечания
 
  . Действие функции распространяется лишь на текущую (активную,
    выбранную) рабочую область.
 
  Примеры
 
  . Проверка необходимости записи данных на диск:
 
    IF DBFSIZE() - DBFDSKSIZE() >= 512
        * Новые данные добавлены, но на диск не записаны
        COMMIT          // Внимание! Работает только с DOS 3.3 и выше
        USE File
    ENDIF
 

See Also: DBFSIZE()

 

 

 DBFSIZE()
 Возвращает размер, занимаемый .DBF-файлом в памяти.
------------------------------------------------------------------------------
 
  Синтаксис
 
    DBFSIZE() --> nFileSize
 
  Возвращаемое значение
 
    nFileSize - число байтов, занимаемых в оперативной памяти, открытой
    в активной рабочей области базой данных, т.е. ее текущий размер.
 
  Описание
 
    Функция позволяет определить размер базы данных перед копированием
    файла на диск. Полезным является применение данной функции
    совместно с функцией DBFDSKSIZE().
 
    Расхождение результатов, возвращаемых этими функциями, означает,


    что часть данных еще не записана на гибкий или жесткий диск. Кроме
    того, можно определить, были ли уже вновь введенные данные записаны
    на диск.
 
  Примечания
 
  . Действие функции распространяется лишь на текущую (активную,
    выбранную) рабочую область.
 
  Примеры
 
  . Проверка возможности копирования .DBF-файла на диск:
 
    USE DATA
    IF DISKFREE("A") < DBFSIZE()
        ? "Файл не может быть скопирован"
        ? "На диске недостаточно места"
    ELSE
        COPY TO A:COPY
    ENDIF
 

See Also: DBFDSKSIZE()
DISKFREE()

 

 

 FIELDDECI()
 Возвращает количество десятичных разрядов в числовом поле базы данных.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FIELDDECI(<nField>) --> nDecimalPlaces
 
  Параметры
 
    <nField> - числовое значение, задающее порядковый номер поля базы
    данных.
 
  Возвращаемое значение
 
    nDecimalPlaces - количество десятичных разрядов в числовом поле,
    или 0 при неверном задании номера поля.
 
  Описание
 
    Функция возвращает количество десятичных разрядов в числовом поле
    базы данных, что позволяет поставить количество вводимых десятичных
    разрядов в зависимость от структуры базы данных.
 
  Примеры
 
  . Преобразование второго поля в строку с соответствующим числом
    десятичных разрядов:
 
    @ 0, 60 SAY "Цена: " + STR(cField2, 8, FIELDDECI(2))
 

See Also: FIELDSIZE()
FIELDTYPE()

 

 

 FIELDNUM()
 Возвращает номер поля базы данных.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FIELDNUM(<cFieldName>) --> nFieldNumber
 
  Параметры
 
    <cFieldName> - символьный параметр, задающий имя поля базы данных.
 
  Возвращаемое значение


 
    nFieldNumber - номер соответствующего поля базы данных, или 0, если
    поле с именем <cFieldName> не существует.
 
  Описание
 
    Функция возвращает номер поля базы данных, т.е. по своему
    назначению полностью противоположна Clipper-функции FIELDNAME().
    Ее следует применять при необходимости получить доступ к номеру
    поля базы данных. Функция также позволяет определить, принадлежит
    ли символьное имя полю базы данных или переменной памяти
    (см. примеры).
 
  Примеры
 
  . Поле или переменная?
 
    IF FIELDNUM("cName") > 0
        REPLACE cName WITH UPPER(cName)
    ELSE
        cName := UPPER(cName)
    ENDIF
 

 

 FIELDSIZE()
 Возвращает длину поля базы данных.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FIELDSIZE(<nField>) --> nLength
 
  Параметры
 
    <nField> - числовое значение, задающее номер поля.
 
  Возвращаемое значение
 
    nLength - длина поля, или 0 при неверном задании номера поля.
 
  Описание
 
    Функция служит для определения длины поля базы данных, что дает
    возможность установить необходимую ширину окна для вывода или ввода
    информации.
 
  Примеры
 
  . Определение общей длины полей от поля 3 до поля 5:
 
    nLength := 0
    FOR I = 3 TO 5
        nLength : = nLength + FIELDSIZE(I)
    NEXT
 

See Also: FIELDDECI()
FIELDTYPE()

 

 

 FIELDTYPE()
 Возвращает тип поля базы данных.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FIELDTYPE(<nField>) --> cType
 
  Параметры
 
    <nField> - числовое значение, задающее номер поля базы данных.
 
  Возвращаемое значение
 
    cType - символ, задающий тип поля, или пустая строка при неверном
    задании номера поля.


Кодирование типов полей приведено в таблице:
 
    Таблица 10-1. Кодирование типов полей
    --------------------------------------------------------------------
    Символ      Тип поля
    --------------------------------------------------------------------
      С         Символьный
      N         Числовой
      D         Date
      L         Логический
      М         Memo
    --------------------------------------------------------------------
 
  Описание
 
    Функция аналогична Clipper-функции TYPE(). Однако для TYPE() должно
    быть известно имя поля, а для описываемой функции необходим только
    номер поля, что позволяет использовать ее для подтверждения
    соответствия типов полей при работе программы с несколькими базами
    данных, имеющими различные имена полей.
 
  Примеры
 
  . Определение типа поля 5:
 
    IF FIELDTYPE(5) = "C"
        ? "Поле номер 5 - символьное поле!"
    ENDIF
 

See Also: FIELDDECI()
FIELDSIZE()

 

 

 ISDBT()
 Возвращает признак наличия в базе данных memo-файла (.DBT).
------------------------------------------------------------------------------
 
  Синтаксис
 
    ISDBT() --> lPresent
 
  Возвращаемое значение
 
    lPresent - логическое значение .T., если база данных имеет связанный
    с ней memo-файл, а иначе .F..
 
  Описание
 
    Функция определяет наличие memo-файла, связанного с открытой в
    текущей рабочей области базой данных, что определяет, например,
    способ ее сжатия.
 
  Примеры
 
  . Если база данных имеет memo-файл, то для сжатия ее
    следует скопировать:
 
    USE DATA
    IF ISDBT()
        COPY TO TEMP
        CLOSE DATABASES
        DELETEFILE("DATA.DBF")
        DELETEFILE("DATA.DBT)
 
        RENAMEFILE("TEMP.DBF", "DATA.DBF")
        RENAMEFILE("TEMP.DBT", "DATA.DBT")


    ENDIF
 
 
 

 Введение в функции переключателей
------------------------------------------------------------------------------
 CSETALL()     Возвращает и/или устанавливает состояния всех переключателей
 CSETCLIP()    Возвращает содержимое DOS-переменной CLIPPER
 CSETDATE()*   Возвращает код формата даты, установленного командой SET DATE
 CSETDECI()*   Возвращает значение, установленное командой SET DECIMALS
 CSETDEFA()*   Возвращает значение, установленное командой SET DEFAULT
 CSETFUNC()*   Возвращает значение, установленное командой SET FUNCTION
 CSETKEY()*    Возвращает имя процедуры, установленное командой SET KEY
 CSETLDEL()*   Возвращает левый символ, установленный по SET DELIMITERS
 CSETMARG()*   Возвращает значение, установленное командой SET MARGIN
 CSETPATH()*   Возвращает значение, установленное командой SET PATH
 CSETRDEL()*   Возвращает правый символ, установленный по SET DELIMITERS
 CSETRDONLY()* Переключает режим открытия файлов READ ONLY
 CSETSAFETY()  Управляет защитой файлов от перезаписи CT II-функциями
 CSETSNOW()*   Управляет режимом предотвращения "снега" на экране
 CSETxxxx()*   Возвращают состояния, установленные SET-командами
 ISDEBUG()     Возвращает признак выполнения под управлением отладчика
 KSETCAPS()    Возвращает (и устанавливает) состояние индикатора CAPS LOCK
 KSETINS()     Возвращает (и устанавливает) состояние переключателя INSERT
 KSETNUM()     Возвращает (и устанавливает) состояние индикатора NUM LOCK
 KSETSCROLL()  Возвращает (и устанавливает) состояние индикатора SCROLL LOCK
 LASTKFUNC()   Возвращает имя функции, поместившей символ в буфер клавиатуры
 LASTKLINE()   Возвращает номер строки, прерванной по нажатию клавиши
 LASTKPROC()   Возвращает имя процедуры, прерванной по нажатию клавиши
 NUMFKEY()     Возвращает количество функциональных клавиш
 SETLASTKEY()  Устанавливает значение, возвращаемое функцией LASTKEY()
 

 

  Введение
 
------------------------------------------------------------------------------


 
    Часть описываемых в данной главе функций, возвращающих и задающих
    состояния переключателей Clipper, появилась в Clipper Tools One.
    В Clipper 5.0 аналогичные действия выполняет функция SET(), поэтому
    некоторые из функций этой главы приведены только в целях
    совместимости с уже существующими программами. Такие функции помечены
    звездочкой (*).
 
    Если функция служит для установки внутренних переключателей Clipper,
    то ее имя представляется в виде:
 
    CSET + <первые 4 символа имени переключателя>
 
    Например, если имя переключателя CONFIRM, то имя соответствующей
    функции будет CSETCONF().
 
    При вызове функции с опущенным необязательным аргументом возвращается
    значение, соответствующее текущему состоянию переключателя.
    При вызове с параметрами функция устанавливает переключатель в
    заданное состояние и возвращает значение предыдущего состояния.
 
    При значении .T. необязательного параметра переключатель
    устанавливается в состояние включено, при значении .F. - выключено.
    Например, если переключаемый функцией CONFIRM() режим был выключен,
    то после выполнения следующей команды переменная lOldValue будет
    иметь значение .F., а режим включен:
 
    lOldValue := CSETCONF(.T.)
 
    Кроме доступа к внутренним переключателям Clipper, описываемые
    в данной главе функции обеспечивают доступ и к другой системной
    информации. Они позволяют, например, определить текущее состояние
    отладчика, уточнить, каким способом был введен символ, возвращаемый
    функцией LASTKEY(), задать состояние системных индикаторов
    CAPS LOCK, NUM LOCK, INSERT и SCROLL LOCK.
 

 

 CSETALL()
 Возвращает и/или устанавливает состояния всех переключателей Clipper.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CSETALL([<cNewSwitchList>]) --> cOldSwitchList
 


  Параметры
 
    <cNewSwitchList> - необязательный символьный параметр, задающий
    устанавливаемые состояния всех переключателей в виде строки цифровых
    символов "0" и "1". По умолчанию состояния переключателей не
    изменяются.
 
  Возвращаемое значение
 
    cOldSwitchList - символьная строка, содержащая предыдущее состояние
    всех переключателей, или пустая строка при некорректном задании
    параметра.
 
  Описание
 
    Функция возвращает состояния большинства переключателей Clipper и
    позволяет изменить их. Так как доступны состояния двадцати одного
    переключателя, то функция возвращает не логическое значение, а строку
    длиной в 21 байт, кодирующую состояния соответствующих переключателей
    символами "0" и "1", что позволяет легко сохранять их при выходе и
    впоследствии восстанавливать. В таблице приведены переключатели в
    порядке их следования в возвращаемой строке:
 
    Таблица 11-1. Переключатели Clipper
    --------------------------------------------------------------------
    Номер байта         Функция         Clipper-команда
    --------------------------------------------------------------------
        1               CSETALTE()      SET ALTERNATE
        2               CSETBELL()      SET BELL
        3               CSETCARR()      SET CARRY
        4               CSETCENT()      SET CENTURY
        5               CSETCONF()      SET CONFIRM
        6               CSETCONS()      SET CONSOLE
        7               CSETCURS()      SET CURSOR
        8               CSETDELE()      SET DELETED
        9               CSETDELI()      SET DELIMITERS
        10              CSETDEVI()      SET DEVICE
        11              CSETESCA()      SET ESCAPE
        12              CSETEXAC()      SET EXACT
        13              CSETEXCL()      SET EXCLUSIVE
        14              CSETFIXE()      SET FIXED
        15              READINSERT()    Режим вставки


        16              CSETINTE()      SET INTENSITY
        17              CSETPRIN()      SET PRINT
        18              CSETSCOR()      SET SCOREBOARD
        19              CSETSOFT()      SET SOFTSEEK
        20              CSETUNIQ()      SET UNIQUE
        21              CSETWRAP()      SET WRAP
    --------------------------------------------------------------------
 
  Примеры
 
    cSwitches := CSETALL()                      // "010000000000000000000"
    IF SUBSTR(cSwitches, 2, 1) == "1"
        ? "Звуковой сигнал разрешен!"
    ENDIF
 

See Also: CSETxxxx()*

 

 

 CSETCLIP()
 Возвращает содержимое DOS-переменной CLIPPER.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CSETCLIP(<cEnvParameter>) --> nEnvParameterValue
 
    Внимание! Не все установочные параметры DOS-переменной CLIPPER
    для Summer'87 поддерживаются в Clipper 5.0, поэтому CSETCLIP()
    модифицирована с учетом этих изменений.
 
  Параметры
 
    <cEnvParameter> - символьная строка, задающая параметр DOS-переменной
    CLIPPER.
 
  Возвращаемое значение
 
    nEnvParameterValue - числовое значение заданного параметра
    DOS-переменной CLIPPER, установленное DOS-командой
 
    SET CLIPPER=<параметры>
 
    или (-1) при неверном задании параметра.
 
  Описание
 
    Функция возвращает значения используемых в Clipper установок,
    заданных в DOS-переменной CLIPPER. В качестве параметра функции
    задается одна или несколько букв, указываемых в команде
    SET CLIPPER=<параметры>. Изменение значений параметров во время
    работы программы невозможно, поскольку ими, помимо прочего,
    задается распределение памяти, которое обязательно должно быть
    известно при запуске программы.
 
  Примечания
 
  . Параметр может быть задан как строчными, так и прописными


    латинскими буквами.
 
  Примеры
 
  . Задание параметров прописными или строчными буквами:
 
    ? CSETCLIP("F")      // SET CLIPPER=Fnnn
    ? CSETCLIP("e")      // SET CLIPPER=Ennn
    ? CSETCLIP("X")      // SET CLIPPER=Xnnn
    ? CSETCLIP("SWAPK")  // SET CLIPPER=SWAPK:nnn
 
  . Неверное задание параметра:
 
    ? CSETCLIP("z")      // -1
 

 

 CSETDATE()*
 Возвращает код формата даты, установленного командой SET DATE.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CSETDATE() --> nDateFormat
 
  . Функция сохранена только из соображений совместимости и
    не рекомендуется для применения в последующих разработках
    прикладных программ. Вместо нее используйте Clipper-функцию SET().
 
  Возвращаемое значение
 
    nDateFormat - числовое значение, соответствующее коду текущего
    режима, установленного Clipper-командой SET DATE.
 
  Описание
 
    Функция возвращает код текущего режима, установленного командой
    SET DATE. Возвращаемый числовой код приведен в таблице:
 
    Таблица 11-2. Коды форматов дат для различных стран
    --------------------------------------------------------------------
       Код              Обозначение в команде SET DATE
    --------------------------------------------------------------------
        1               AMERICAN
        2               ANSI
        3               BRITISH
        4               FRENCH
        5               GERMAN
        6               ITALIAN
    --------------------------------------------------------------------
 
  Примечания
 
  . Функция не может изменять установленный командой SET DATE формат
    даты.
 
  Примеры
 
  . При задании SET DATE AMERICAN функция возвращает 1:
 
    SET DATE AMERICAN
    ? CSETDATE()                        // 1


 

 

 CSETDECI()*
  Возвращает значение, установленное командой SET DECIMALS TO.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CSETDECI() --> nDecimalPlaces
 
  . Функция сохранена только из соображений совместимости и
    не рекомендуется для применения в последующих разработках
    прикладных программ. Вместо нее используйте Clipper-функцию SET().
 
  Возвращаемое значение
 
    nDecimalPlaces - число выводимых на экран десятичных разрядов.
 
  Описание
 
    Функция возвращает текущее значение, установленное командой
    SET DECIMALS TO.
 
  Примечания
 
  . Функция не может изменять число десятичных разрядов.
 
  Примеры
 
  . Установка десятичных разрядов в Clipper:
 
    SET DECIMALS TO 2
 
  . Запрос установленного числа десятичных разрядов:
 
    ? CSETDECI()        // 2
 

 

 CSETDEFA()*
 Возвращает значение, установленное командой SET DEFAULT.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CSETDEFA() --> cDefaultPath
 
  . Функция сохранена только из соображений совместимости и
    не рекомендуется для применения в последующих разработках
    прикладных программ. Вместо нее используйте Clipper-функцию SET().
 
  Возвращаемое значение
 
    cDefaultPath - символьная строка, содержащая путь поиска,
    установленный командой SET DEFAULT TO.
 
  Описание
 
    Функция возвращает текущий путь поиска файлов, установленный
    командой SET DEFAULT TO.
 
  Примечания
 
  . Функция не может изменять используемый по умолчанию путь поиска.
 
  Примеры
 
  . Установка пути в Clipper:
 
    SET DEFAULT TO C:\DATA
 
  . Запрос ранее установленного пути по умолчанию:
 
    ? CSETDEFA()                // "C:\DATA"
 

 



 CSETFUNC()*
  Возвращает значение, установленное командой SET FUNCTION TO.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CSETFUNC(<nFunctionKey>) --> cCharString
 
  . Функция сохранена только из соображений совместимости и
    не рекомендуется для применения в последующих разработках
    прикладных программ. Вместо нее используйте Clipper-функцию SET().
 
  Параметры
 
    <nFunctionKey> - номер функциональной клавиши.
 
  Возвращаемое значение
 
    cCharString - символьная строка, связанная с задаваемой
    функциональной клавишей.
 
  Описание
 
    Функция позволяет получить и сохранить строку, связанную с задаваемой
    функциональной клавишей. Для использования данной функции в начало
    прикладной программы следует включить файл описаний NT250.CH при
    помощи директивы:
 
    #include "NT250.CH"
 
    Дополнительная информация, касающаяся данной функции, находится в
    файле NT250.CH, входящем в комплект поставки.
 
  Примеры
 
  . Клавише <F10> присваивается код комбинации клавиш <Ctrl><C>.
    Установка изменяется в функции Test(). Поскольку предыдущее состояние
    было сохранено, оно впоследствии может быть восстановлено:
 
    SET FUNCTION 10 TO CHR(3)
    cOldFunc := CSETFUNC(10)            // Сохранение назначения
    Test()                              // Вызов функции пользователя
    SET FUNCTION 10 TO cOldFunc
 

 

 CSETKEY()*
 Возвращает имя процедуры, установленное командой SET KEY TO.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CSETKEY(<nKeyValue>) --> cProcedureName
 
  . Функция сохранена только из соображений совместимости и
    не рекомендуется для применения в последующих разработках
    прикладных программ. Вместо нее используйте Clipper-функцию SET().


 
  Параметры
 
    <nKeyValue> - числовое значение, задающее INKEY()-код клавиши.
 
  Возвращаемое значение
 
    cProcedureName - символьная строка, содержащая имя процедуры,
    вызываемой при нажатии задаваемой клавиши.
 
  Описание
 
    Функция возвращает имя процедуры, связанной с задаваемой клавишей.
    Для использования данной функции в начало прикладной программы
    следует включить файл описаний NT250.CH при помощи директивы:
 
    #include "NT250.CH"
 
    Дополнительная информация, касающаяся данной функции, находится в
    файле NT250.CH, входящем в комплект поставки.
 
  Примеры
 
  . Получение имени процедуры, назначенной клавише <F2>:
 
    cOldF2Proc := CSETKEY(-1)
 

 

 CSETLDEL()*
 Возвращает символ левого разделителя, установленного по SET DELIMITERS.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CSETLDEL() --> cLeftDelimiter
 
  . Функция сохранена только из соображений совместимости и
    не рекомендуется для применения в последующих разработках
    прикладных программ. Вместо нее используйте Clipper-функцию SET().
 
  Возвращаемое значение
 
    cLeftDelimiter - символ, установленный в качестве левого разделителя.
 
  Описание
 
    Функция возвращает текущий символ, используемый в качестве левого
    разделителя для GET-полей.
 
  Примечания
 
  . Функция не может изменять разделитель.
 
  Примеры
 
  . Запрос символа левого разделителя:
 
    cLeftDelim := CSETLDEL()
 

See Also: CSETRDEL()*
CSETxxxx()*

 

 

 CSETMARG()*
 Возвращает значение, установленное командой SET MARGIN TO.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CSETMARG() --> nLMargin
 
  . Функция сохранена только из соображений совместимости и


    не рекомендуется для применения в последующих разработках
    прикладных программ. Вместо нее используйте Clipper-функцию SET().
 
  Возвращаемое значение
 
    nLMargin - расстояние от левой границы текста до края листа при
    выводе на принтер.
 
  Описание
 
    Функция позволяет определить текущее значение отступа, установленное
    для левой границы текста, выводимого на принтер.
 
  Примечания
 
  . Функция не может изменять значение, установленное для левой
    границы распечатываемого текста.
 
  Примеры
 
  . Сохранение значения, установленного командой SET MARGIN TO:
 
    nPrintBound := CSETMARG()
 

 

 CSETPATH()*
 Возвращает значение, установленное командой SET PATH TO.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CSETPATH() --> cSearchPath
 
  . Функция сохранена только из соображений совместимости и
    не рекомендуется для применения в последующих разработках
    прикладных программ. Вместо нее используйте Clipper-функцию SET().
 
  Возвращаемое значение
 
    cSearchPath - символьная строка, содержащая текущий путь поиска
    файлов при работе Clipper-программы.
 
  Описание
 
    Функция возвращает путь поиска файлов, установленный командой
    SET PATH TO.
 
  Примеры
 
  . Сохранение пути, установленного командой SET PATH TO:
 
    cSearchPath := CSETPATH()
 

 

 CSETRDEL()*
 Возвращает символ правого разделителя, установленного по SET DELIMITERS.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CSETRDEL() --> cRightDelimiter
 
  . Функция сохранена только из соображений совместимости и
    не рекомендуется для применения в последующих разработках
    прикладных программ. Вместо нее используйте Clipper-функцию SET().
 
  Возвращаемое значение


 
    cRightDelimiter - символ, установленный в качестве правого
    разделителя.
 
  Описание
 
    Функция возвращает текущий символ, используемый в качестве правого
    разделителя для GET-полей.
 
  Примечания
 
  . Функция не может изменять разделитель.
 
  Примеры
 
  . Запрос символа правого разделителя:
 
    cRightDelim := CSETRDEL()
 

See Also: CSETLDEL()*
CSETxxxx()*

 

 

 CSETRDONLY()*
 Переключает режим открытия файлов READ ONLY.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CSETRDONLY([<lR/O-NewMode>]) --> lR/O-OldMode
 
  . Функция сохранена только из соображений совместимости и
    не рекомендуется для применения в последующих разработках
    прикладных программ. Вместо нее используйте предложение
    READONLY Clipper-команды USE.
 
  Параметры
 
    <lR/O-NewMode> - необязательный логический параметр, задающий при
    значении .T. открытие файлов в режиме "только для чтения", а при
    значении .F. в режиме "чтение-запись". По умолчанию режим открытия
    файлов не изменяется.
 
  Возвращаемое значение
 
    lR/O-OldMode - логическое значение, соответствующее предыдущему
    состоянию переключателя.
 
  Описание
 
    Функция была введена в Clipper Summer'87 для обеспечения возможности
    открытия файлов в режиме "только для чтения" (READ ONLY), что
    позволяет организовать доступ к базе данных, защищенной от записи
    сетевыми средствами.
 
    В Clipper 5.0 предложение READONLY команды USE позволяет обойтись без
    использования описываемой функции, оставленной только для
    совместимости с предыдущими версиями. Ее можно использовать как и
    ранее, но теперь она не оказывает непосредственного воздействия на
    режим открытия.
 
    Для использования данной функции необходимо включить в программу файл


    описаний NT250.CH, входящий в комплект поставки.
 
  Примечания
 
  . Внимание! Ознакомьтесь с изменениями команды USE в Clipper 5.0!
 
  Примеры
 
  . Установка режима "только для чтения" (функционирует только при
    использовании файла описаний NT250.CH):
 
    ? CSETRDONLY(.T.)           // Возвращение предыдущего состояния
    USE ....                    // Открытие с атрибутом READ ONLY
 

 

 CSETSAFETY()
  Управляет защитой файлов от перезаписи CT II-функциями.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CSETSAFETY([<lNewSwitch>]) --> lOldSwitch
 
  Параметры
 
    <lNewSwitch> - необязательный логический параметр, задающий при
    значении .T. запрет, а при значении .F. разрешение перезаписи уже
    существующих файлов CT II-функциями. По умолчанию режим защиты не
    изменяется.
 
  Возвращаемое значение
 
    lOldSwitch - логическое значение, соответствующее предыдущему
    состоянию режима.
 
  Описание
 
    Функция возвращает логическое значение, соответствующее предыдущему
    состоянию внутреннего переключателя CT II SAFETY. При значению .T.,
    что соответствует включенному переключателю, CT II-функции не будут
    перезаписывать существующие файлы.
 
  Примечания
 
  . Внимание! Данная функция влияет только на работу CT II-функций.
 
  Примеры
 
  . Запрос состояния переключателя SAFETY:
 
    lSafety := CSETSAFETY()
 
  . Включение режима предотвращения перезаписи (SAFETY) и
    сохранение предыдущего состояния:
 
    lOldSafety := CSETSAFETY(.T.)
 

 

 CSETSNOW()*
 Управляет режимом предотвращения "снега" на экране.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CSETSNOW([<lNewSwitch>]) --> lOldSwitch
 


  . Функция сохранена только из соображений совместимости и не
    рекомендуется для применения в последующих разработках прикладных
    программ. Вместо нее используйте Clipper-функцию NOSNOW().
 
  Параметры
 
    <lNewSwitch> - необязательный логический параметр, задающий при
    значении .T. включение режима предотвращения "снега", а при значении
    .F. отключение этого режима. По умолчанию режим не изменяется.
 
  Возвращаемое значение
 
    lOldSwitch - логическое значение, соответствующее предыдущему
    состоянию режима.
 
  Описание
 
    Часто вывод на дисплей с адаптером CGA может сопровождаться эффектом
    "снега", что можно предотвратить переключением режима с помощью
    описываемой функции.
 
    При разработке новых прикладных программ рекомендуется использовать
    Clipper-функцию NOSNOW().
 
  Примечания
 
  . Получение значения, устанавливаемого описываемой функцией,
    невозможно при помощи функции CSETALL().
 
  Примеры
 
  . Включение предотвращения "снега":
 
    CSETSNOW(.T.)               // Предыдущий режим
 
  . Учет аппаратных средств:
 
    CSETSNOW(ISCGA())           // Предотвращение "снега" только для CGA
 

See Also: ISCGA()

 

 

 CSETxxxx()*
 Возвращают состояния, установленные соответствующими SET-командами.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CSETxxxx([<lNewSwitch>]) --> lOldSwitch
 
  . Функции сохранены только из соображений совместимости и
    не рекомендуются для применения в последующих разработках
    прикладных программ. Вместо нее используйте Clipper-функцию SET().
 
  Параметры
 
    <lNewSwitch> - необязательный логический параметр, задающий при
    значении .T. включение соответствующего переключателя Clipper, а при
    значении .F.


его выключение. По умолчанию состояние переключателя не
    изменяется.
 
  Возвращаемое значение
 
    lOldSwitch - логическое значение, соответствующее предыдущему
    состоянию переключателя.
 
  Описание
 
    В таблице приведены 20 функций, которые вызываются одинаковым образом
    и возвращают значения логического типа. Имя каждой функции
    формируется из "CSET" и первых четырех символов соответствующего
    режима Clipper:
 
    Таблица 11-3. Функции управления SET-режимами Clipper
    --------------------------------------------------------------------
    Функция     Команда Clipper
    --------------------------------------------------------------------
    CSETALTE()  SET ALTERNATE ON/OFF
    CSETBELL()  SET BELL ON/OFF
    CSETCARR()  SET CARRY ON/OFF (см. Примечания)
    CSETCENT()  SET CENTURY ON/OFF
    CSETCONF()  SET CONFIRM ON/OFF
    CSETCONS()  SET CONSOLE ON/OFF
    CSETCURS()  SET CURSOR ON/OFF
    CSETDELE()  SET DELETED ON/OFF
    CSETDELI()  SET DELIMITERS ON/OFF
    CSETDEVI()  SET DEVICE TO PRINT (.T.)/SCREEN (.F.)
    CSETESCA()  SET ESCAPE ON/OFF
    CSETEXAC()  SET EXACT ON/OFF
    CSETEXCL()  SET EXCLUSIVE ON/OFF
    CSETFIXE()  SET FIXED ON OFF
    CSETINTE()  SET INTENSITY ON/OFF
    CSETPRIN()  SET PRINT ON/OFF
    CSETSCOR()  SET SCOREBOARD ON/OFF
    CSETSOFT()  SET SOFTSEEK ON/OFF
    CSETUNIQ()  SET UNIQUE ON/OFF
    CSETWRAP()  SET WRAP ON/OFF
    --------------------------------------------------------------------
  Примечания
 
  . Функция CSETCARR() не имеет существенного значения, поскольку в
    Clipper нет команды SET CARRY. Она сохранена из соображений
    совместимости с Tools One и в связи с тем, что ей отведена позиция в
    CSETALL().
 
  Примеры
 
  . Включение SET UNIQUE:
 
    ? CSETUNIQ(.T.)   // Предыдущее значение
 
  . Сохранение состояния режима:
 
    lOldWRAP := CSETWRAP()
 

See Also: CSETALL()



 

 

 ISDEBUG()
  Возвращает признак выполнения программы под управлением отладчика.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ISDEBUG() --> lDebugger
 
  Возвращаемое значение
 
    lDebugger - логическое значение, сообщающее об активности
    Clipper-отладчика.
 
  Описание
 
    Функция определяет, работает ли программа с Clipper-отладчиком, что
    можно использовать для управления ходом выполнения программы.
 
  Примечания
 
  . Функция не имеет аналога в Clipper и возвращаемая ею информация
    доступна только при использовании CT II.
 
  Примеры
 
    IF ISDEBUG()
       ? "Используется отладчик!"
    ENDIF
 

 

 KSETCAPS()
 Возвращает (и устанавливает) состояние индикатора CAPS LOCK.
------------------------------------------------------------------------------
 
  Синтаксис
 
    KSETCAPS([<lNewSwitch>]) --> lOldSwitch
 
  Параметры
 
    <lNewSwitch> - необязательный логический параметр, задающий при
    значении .T. включение, а при значении .F. выключение системного
    индикатора CAPS LOCK. По умолчанию состояние индикатора не
    изменяется.
 
  Возвращаемое значение
 
    lOldSwitch - логическое значение, соответствующее предыдущему
    состоянию индикатора.
 
  Описание
 
    Функция возвращает состояние системного индикатора CAPS LOCK. Если
    задан <lNewSwitch>, то в соответствии с ним устанавливается новое
    состояние.
 
  Примеры
 
  . Запрос состояния CAPS LOCK:
 
    lCaps := KSETCAPS()
 
  . Включение CAPS LOCK и сохранение предыдущего состояния:
 
    lOldCaps := KSETCAPS(.T.)
 

See Also: KSETINS()
KSETNUM()
KSETSCROLL()

 

 

 KSETINS()
 Возвращает (и устанавливает) состояние переключателя INSERT.
------------------------------------------------------------------------------


 
  Синтаксис
 
    KSETINS([<lNewSwitch>]) --> lOldSwitch
 
  Параметры
 
    <lNewSwitch> - необязательный логический параметр, задающий при
    значении .T. включение, а при значении .F. выключение системного
    индикатора INSERT. По умолчанию состояние индикатора не изменяется.
 
  Возвращаемое значение
 
    lOldSwitch - логическое значение, соответствующее предыдущему
    состоянию индикатора.
 
  Описание
 
    Функция возвращает состояние системного индикатора INSERT. Если задан
    <lNewSwitch>, то в соответствии с ним устанавливается новое
    состояние.
 
  Примечания
 
  . Функция, в отличие от Clipper-функции READINSERT(), возвращает и
    изменяет состояние системного переключателя, а не переключателя
    Clipper, определяющего режим выполнения команды READ и функции
    MEMOEDIT().
 
  Примеры
 
  . Запрос состояния INSERT:
 
    lInsert := KSETINS()
 
  . Включение INSERT и сохранение предыдущего состояния:
 
    lOldInsert := KSETINS(.T.)
 

See Also: KSETCAPS()
KSETNUM()
KSETSCROLL()

 

 

 KSETNUM()
 Возвращает (и устанавливает) состояние индикатора NUM LOCK.
------------------------------------------------------------------------------
 
  Синтаксис
 
    KSETNUM([<lNewSwitch>]) --> lOldSwitch
 
  Параметры
 
    <lNewSwitch> - необязательный логический параметр, задающий при
    значении .T. включение, а при значении .F. выключение системного
    индикатора NUM LOCK. По умолчанию состояние индикатора не изменяется.
 
  Возвращаемое значение
 
    lOldSwitch - логическое значение, соответствующее предыдущему
    состоянию индикатора.
 
  Описание
 
    Функция возвращает состояние системного индикатора NUM LOCK. Если
    задан <lNewSwitch>, то в соответствии с ним устанавливается новое
    состояние.
 
  Примеры


 
  . Запрос состояния NUM LOCK:
 
    lNumLock := KSETNUM()
 
  . Включение NUM LOCK и сохранение предыдущего состояния:
 
    lOldNumLock := KSETNUM(.T.)
 

See Also: KSETINS()
KSETCAPS()
KSETSCROLL()

 

 

 KSETSCROLL()
 Возвращает ( и устанавливает) состояние индикатора SCROLL LOCK.
------------------------------------------------------------------------------
 
  Синтаксис
 
    KSETSCROLL([<lNewSwitch>]) --> lOldSwitch
 
  Параметры
 
    <lNewSwitch> - необязательный логический параметр, задающий при
    значении .T. включение, а при значении .F. выключение системного
    индикатора SCROLL LOCK. По умолчанию состояние индикатора не
    изменяется.
 
  Возвращаемое значение
 
    lOldSwitch - логическое значение, соответствующее предыдущему
    состоянию индикатора.
 
  Описание
 
    Функция возвращает состояние системного индикатора SCROLL LOCK. Если
    задан <lNewSwitch>, то в соответствии с ним устанавливается новое
    состояние.
 
  Примечания
 
  . Функция позволяет переключать режим интерактивного перемещения
    окон.
 
  Примеры
 
  . Запрос состояния SCROLL LOCK:
 
    Scroll := KSETSCROLL()
 
  . Включение SCROLL LOCK и сохранение предыдущего состояния:
 
    OldScroll := KSETSCROLL(.T.)
 

See Also: KSETINS()
KSETCAPS()
KSETNUM()

 

 

 LASTKFUNC()
 Возвращает имя функции, поместившей последний символ в буфер клавиатуры.
------------------------------------------------------------------------------
 
  Синтаксис
 
    LASTKFUNC() --> cFunctionName
 
  Возвращаемое значение
 
    cFunctionName - символьная строка, содержащая имя функции -
    KEYTIME(), KEYSEC() или COM_KEY() - поместившей символ в буфер
    клавиатуры.
 
  Описание
 
    Функция позволяет определить, какая из функций - KEYTIME(), KEYSEC()


    или COM_KEY() - поместила последний код клавиши в буфер клавиатуры.
 
  Примечания
 
  . Если прерывание вызвано COM_KEY(), то последний символ в
    возвращаемом имени функции является числом, соответствующим порту,
    который вызвал прерывание.
 
  Примеры
 
  . Определение номера порта:
 
    cTrapFunc := LASTKFUNC()
    SET EXACT OFF
    IF cTrapFunc = "COM_KEY"
        ? "Прерывание от порта ", RIGHT(cTrapFunc, 1)
    ENDIF
 

See Also: COM_KEY()
KEYTIME()
KEYSEC()
LASTKLINE()
LASTKPROC()

 

 

 LASTKLINE()
 Возвращает номер строки, прерванной по нажатию клавиши.
------------------------------------------------------------------------------
 
  Синтаксис
 
    LASTKLINE() --> nLineNumber
 
  Возвращаемое значение
 
    nLineNumber - номер строки исходного текста программы или 0, если
    прерывание произошло при выполнении какой-либо из функций Clipper,
    CT II или внешней библиотеки.
 
  Описание
 
    Функция позволяет получить номер строки программы, при выполнении
    которой одна из функций - KEYTIME(), KEYSEC(), COM_KEY() или
    COM_SKEY() - занесла код клавиши в буфер клавиатуры.
 
    В Clipper прерывания по нажатию клавиш активны только тогда, когда
    установлено состояние ожидания. Функция отличается от Clipper-функции
    PROCLINE() тем, что возвращает номер строки, при выполнении которой
    произошло прерывание, а не той, на которую произошло переключение в
    результате прерывания.
 
  Примечания
 
  . Функция возвращает значение, отличное от 0, лишь в случае, если
    программа компилировалась без опции /L.
 
  Примеры
 
  . Определение номера строки и имени функции, вызвавшей прерывание:
 
    ? "Прерывание от ", LASTKFUNC(), " в строке", LASTKLINE()
 

See Also: COM_KEY()
KEYTIME()
KEYSEC()
LASTKFUNC()
LASTKPROC()

 

 



 LASTKPROC()
  Возвращает имя процедуры, прерванной по нажатию клавиши.
------------------------------------------------------------------------------
 
  Синтаксис
 
    LASTKPROC() --> cName
 
  Возвращаемое значение
 
    cName - символьная строка, содержащая имя процедуры или функции,
    при выполнении которой произошло прерывание по нажатию клавиши.
 
  Описание
 
    Функция возвращает имя процедуры или функции, при выполнении которой
    одна из функций - KEYTIME(), KEYSEC(), COM_KEY() или COM_SKEY() -
    поместила символ в буфер клавиатуры.
 
    В отличие от стандартных функций Clipper, реализующих GET-систему,
    описываемая функция возвращает не имя процедуры, которой передано
    управление по нажатию клавиши, а имя процедуры, при выполнении
    которой произошло прерывание.
 
  Примечания
 
  . Функция возвращает также и имена функций пользователя.
 
  Примеры
 
    IF LASTKPROC() = "INPUT"
        * Сообщение пользователю
        @ 24, 30 SAY "Подождите, пожалуйста!"
    ENDIF
 

See Also: COM_KEY()
KEYTIME()
KEYSEC()
LASTKFUNC()
LASTKLINE()

 

 

 NUMFKEY()
 Возвращает количество функциональных клавиш.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NUMFKEY() --> nTotalKeys
 
  Возвращаемое значение
 
    nTotalKeys - количество доступных функциональных клавиш.
 
  Описание
 
    Функция возвращает количество функциональных клавиш, доступных для
    использования в Clipper-команде SET FUNCTION <nn> TO.
 
  Примечания
 
  . Возвращаемое значение установлено равным 40 как для используемого
    в Clipper IBM-драйвера, так и для CT II-драйвера. Это относится и к
    расширенной клавиатуре с двенадцатью функциональными клавишами.
 
  Примеры
 
  . Вывод на экран назначений для всех функциональных клавиш:


 
    FOR nI = 1 TO NUMFKEY()
        ? CSETFUNC(nI)
    NEXT
 

See Also: CSETFUNC()*

 

 

 SETLASTKEY()
 Устанавливает значение, возвращаемое функцией LASTKEY().
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETLASTKEY(<nKeyValue>) --> cNull
 
  Параметры
 
    <nKeyValue> - необязательный числовой параметр, задающий код,
    возвращаемый LASTKEY().
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция может изменять содержимое области памяти, используемой
    Clipper-функцией LASTKEY(). Это позволяет сохранить текущее
    содержимое буфера LASTKEY() при прерывании по ошибке и восстановить
    его при возвращении в программу.
 
  Примеры
 
    nChar := LASTKEY()  // Сохранение кода символа
        *...
        *...
    SETLASTKEY(nChar)   // Восстановление кода LASTKEY()
 

 

 Введение в функции доступа к системной информации
------------------------------------------------------------------------------
 BIOSDATE()    Возвращает дату генерации BIOS
 BOOTCOLD()    Инициирует "холодную перезагрузку" системы
 BOOTWARM()    Инициирует "горячую перезагрузку" системы
 CPUTYPE()     Возвращает код типа микропроцессора
 DOSPARAM()    Возвращает значения параметров, переданных программе из DOS
 ENVPARAM()    Возвращает содержимое среды переменных DOS
 ERRORACT()    Возвращает код действия, рекомендуемого при обработке ошибки
 ERRORBASE()   Возвращает код причины возникновения последней ошибки
 ERRORCODE()   Возвращает DOS-код ошибки
 ERRORORG()    Возвращает тип устройства, на котором произошла ошибка
 EXENAME()     Возвращает путь доступа к директории и имя файла программы
 FILESFREE()   Возвращает число свободных дескрипторов файлов
 FILESMAX()    Возвращает максимальное количество дескрипторов файлов
 GETCOUNTRY()  Возвращает код страны, установленный при загрузке DOS


 ISANSI()      Возвращает признак наличия инсталлированного ANSI-драйвера
 ISAT()        Возвращает признак выполнения программы на компьютере AT
 ISMATH()      Возвращает признак наличия математического сопроцессора
 MEMSIZE()     Возвращает объем основной или расширенной памяти
 NUMBUFFERS()  Возвращает количество системных файловых буферов
 NUMFILES()    Возвращает системное количество дескрипторов файлов
 OSVER()       Возвращает номер версии DOS
 PCTYPE()      Возвращает код типа компьютера
 SSETBREAK()   Переключает DOS-режим реакции на <Ctrl><Break>
 SSETVERIFY()  Устанавливает DOS-переключатель VERIFY
 

 

  Введение
 
------------------------------------------------------------------------------
 
    Описываемые в данной главе функции обеспечивают доступ к системной
    информации, относящейся к DOS, BIOS и аппаратным средствам. С их
    помощью можно получить сведения о системных режимах, например,
    COUNTRY, и об устанавливаемых дополнительных аппаратных средствах,
    например, математическом сопроцессоре. Кроме того, в данной главе
    описываются функции, инициирующие перезагрузку компьютера.
 

 

 BIOSDATE()
 Возвращает дату генерации BIOS.
------------------------------------------------------------------------------
 
  Синтаксис
 
    BIOSDATE() --> dBiosDate
 
  Возвращаемое значение
 
    dBiosDate - дата, записанная в ПЗУ BIOS, или пустая дата, если по
    соответствующему адресу данных нет.
 
  Описание
 
    Функция возвращает дату генерации BIOS, записываемую производителем
    персонального компьютера в определенном месте ПЗУ.  Знание этой
    информации позволяет учитывать и обходить несовместимости, известные
    для некоторых конкретных версий BIOS.
 
  Примеры
 
  . Определение даты генерации BIOS:
 
    IF BIOSDATE() < CTOD("01/01/85")
        ? "Старая версия BIOS!"
    ENDIF


 

See Also: CPUTYPE()
PCTYPE()

 

 

 BOOTCOLD()
 Инициирует "холодную перезагрузку" системы.
------------------------------------------------------------------------------
 
  Синтаксис
 
    BOOTCOLD()
 
  Возвращаемое значение
 
    Отсутствует.
 
  Описание
 
    Процедура позволяет перезагрузить компьютер после возникновения
    критической ошибки (если не произошло "зависание"). Кроме того, ее
    следует использовать, если были внесены какие-либо изменения в
    конфигурацию системы, записываемые в файлы CONFIG.SYS и AUTOEXEC.BAT.
    Функция вызывает "холодную перезагрузку", при которой выполняется
    тестирование оперативной памяти и POST (автотестирование по включению
    питания), сбрасывающее в исходное состояние все подключенные к
    компьютеру аппаратные средства.
 
  Примечания
 
  . Перед вызовом функции следует закрыть все файлы, используя
    например, команду CLOSE DATABASES.
 
  . Если нежелательно тратить время на тестирование памяти, например,
    при внесении изменений в CONFIG.SYS, то для перезагрузки можно
    использовать функцию BOOTWARM().
 
  Примеры
 
  . Перезагрузка при ошибке в подпрограмме обработки прерывания по
    ранее возникшей ошибке:
 
    CLOSE DATABASES
    BOOTCOLD()
 

See Also: BOOTWARM()

 

 

 BOOTWARM()
 Инициирует "горячую перезагрузку" системы.
------------------------------------------------------------------------------
 
  Синтаксис
 
    BOOTWARM()
 
  Возвращаемое значение
 
    Отсутствует.
 
  Описание
 
    Процедура позволяет перезагрузить компьютер после возникновения
    критической ошибки (если не произошло "зависание"). Кроме того, ее
    следует использовать, если были внесены какие-либо изменения в
    конфигурацию системы, записываемые в файлы CONFIG.SYS и AUTOEXEC.BAT.


 
    Функция вызывает "горячую перезагрузку", при которой не выполняется
    тестирование оперативной памяти и POST (автотестирование по включению
    питания), сбрасывающее в исходное состояние все подключенные к
    компьютеру аппаратные средства.
 
  Примечания
 
  . Перед вызовом функции следует закрыть все файлы, используя
    например, команду CLOSE DATABASES.
 
  . Вызов функции аналогичен нажатию комбинации клавиш
    <Ctrl><Alt><Del>.
 
  Примеры
 
  . Создание нового файла CONFIG.SYS и перезагрузка системы:
 
    COPY TO CONFIG.SYS SDF
    CLOSE DATABASES
    BOOTWARM()
 

See Also: BOOTCOLD()

 

 

 CPUTYPE()
 Возвращает код типа микропроцессора.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CPUTYPE() --> nCPUType
 
  Возвращаемое значение
 
    nCPUType - числовой код типа микропроцессора, приведенный в таблице:
 
    Таблица 12-1. Кодирование типов микропроцессоров
    --------------------------------------------------------------------
    Код Символьная константа Тип микропроцессора
    --------------------------------------------------------------------
    0   CPU_8088             8088
    1   CPU_8086             8086
    2   CPU_V20              V20
    3   CPU_V30              V30
    4   CPU_80188            80188
    5   CPU_80186            80186
    6   CPU_80286            80286
    7   CPU_80386            80386
    8   CPU_80486            80486
    --------------------------------------------------------------------
 
  Описание
 
    Функция позволяет уточнить тип микропроцессора, используемого в
    компьютере. Это иногда бывает полезно, т.к. компьютер может быть
    укомплектован микропроцессором V20 или в компьютере класса IBM PC/AT
    может быть установлен микропроцессор 80386.
 
  Примеры
 
  . Определение типа микропроцессора:


 
    IF CPUTYPE() == 7
        ? "Микропроцессор 80386"
    ENDIF
 

See Also: PCTYPE()
SPEED()

 

 

 DOSPARAM()
  Возвращает значения параметров, переданных программе из DOS при запуске.
------------------------------------------------------------------------------
 
  Синтаксис
 
    DOSPARAM() --> cDOSCommandLine
 
  Возвращаемое значение
 
    cDOSCommandLine - символьная строка, содержащая параметры, указанные в
    команде DOS при запуске прикладной программы.
 
  Описание
 
    Функция возвращает часть командной строки, содержащую параметры,
    передаваемые запускаемой программе, что может использоваться при
    необходимости доступа сразу ко всей командной строке.
 
  Примечания
 
  . Выделение элементов из возвращаемой строки можно произвести с
    помощью функции TOKEN().
 
  Примеры
 
  . Выделение последнего элемента из командной строки DOS
    (С>MyApp A: С: /а):
 
    DOSPARAM()                          // "A: C: /a"
    TOKEN(DOSPARAM())                   // "/a"
 

See Also: TOKEN()

 

 

 ENVPARAM()
 Возвращает содержимое среды переменных DOS.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ENVPARAM() --> cEnvironment
 
  Возвращаемое значение
 
    cEnvironment - символьная строка с содержимым среды DOS.
 
  Описание
 
    Функция возвращает символьную строку, содержащую полную информацию о
    среде DOS. Для облегчения непосредственного вывода и выделения
    элементов функция заменяет в возвращаемом значении символ CHR(0)
    (разделитель переменных среды DOS) на пары символов "возврат каретки"
    (CR) и "перевод строки" (LF).
 
  Примечания
 
  . Данная функция, в отличие от Clipper-функции GETENV(), возвращает
    содержимое переменных среды, игнорируя пробелы, встречающиеся до и


    после символа "=".
 
  Примеры
 
  . Последовательное выделение переменных среды:
 
    cVar := ENVPARAM()
    TOKENINIT( @cVar, CHR(13) + CHR(10), 2)     // Разделитель элементов -
                                                // CR/LF с шириной 2 символа.
    DO WHILE .NOT. TOKENEND()
        Env := TOKENNEXT( cVar )
        ? Env                                   // Например, CLIPPER=F21
    ENDDO
 

See Also: TOKENINIT()
TOKENNEXT()

 

 

 ERRORACT()
  Возвращает код действия, рекомендуемого при обработке последней ошибки.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ERRORACT() --> nActionCode
 
  Возвращаемое значение
 
    nActionCode - числовой код действия, рекомендуемого DOS для обработки
    последней ошибки, приведенный в таблице:
 
    Таблица 12-2. Коды действий DOS при возникновении ошибки
    --------------------------------------------------------------------
    Код Рекомендуемое действие
    --------------------------------------------------------------------
    1   Повторить несколько раз, затем запросить пользователя
    2   Повторить несколько раз с паузами, затем запросить пользователя
    3   Запросить данные у пользователя
    4   Нормально завершить программу
    5   Завершить программу как можно быстрее
    6   Игнорировать ошибку
    7   Пользователю следует исправить ошибку и попытаться снова
    --------------------------------------------------------------------
 
  Описание
 
    Функция возвращает код действия, которое было бы предпринято DOS при
    обработке последней ошибочной ситуации. Применение данной функции
    полезно при анализе значений, возвращаемых CT II-функциями,
    обеспечивающими возможность обработки ошибок.
 
  Примечания
 
  . Функция поддерживается версиями DOS 3.1 и выше.
 
  Примеры
 
  . Анализ рекомендаций DOS:


 
    nAction := ERRORACT()
    IF nAction = 4
        ? " К сожалению, программа должна быть прервана!"
    ENDIF
 

See Also: ERRORBASE()
ERRORCODE()
ERRORORG()

 

 

 ERRORBASE()
 Возвращает код причины возникновения последней ошибки.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ERRORBASE() --> nErrorCode
 
  Возвращаемое значение
 
    nErrorCode - числовой код причины возникновения ошибки, приведенный в
    таблице:
 
    Таблица 12-3. Коды причин ошибок
    --------------------------------------------------------------------
    Код Определение
    --------------------------------------------------------------------
    1   Недостаточно памяти
    2   Доступ временно запрещен
    3   Доступ для данного пользователя запрещен
    4   Внутренняя ошибка системного программного обеспечения
    5   Ошибка аппаратных средств
    6   Ошибка системного программного обеспечения
    7   Ошибка прикладной программы
    8   Файл не найден
    9   Неверный формат или тип файла
    10  Файл защищен
    11  Неверный тип физического носителя в дисководе
    12  Прочие ошибки
    --------------------------------------------------------------------
 
  Описание
 
    Функция позволяет по внутренней информации DOS уточнить причину
    возникновения ошибки, код которой возвращается функцией ERRORCODE().
    Применение данной функции полезно при анализе значений, возвращаемых
    CT II-функциями, обеспечивающими возможность обработки ошибок.
 
  Примечания
 
  . Функция поддерживается версиями DOS 3.1 и выше.
 
  Примеры
 
  . Уточнение причины возникновения ошибки:
 
    nCause := ERRORBASE()
    IF nCause = 3
        ? "Доступ запрещен !"
    ENDIF
 

See Also: ERRORACT()
ERRORCODE()
ERRORORG()

 

 

 ERRORCODE()
 Возвращает DOS-код ошибки.
------------------------------------------------------------------------------


 
  Синтаксис
 
    ERRORCODE([<lKeepError>]) --> nDosErrorCode
 
  Параметры
 
    <lKeepError> - необязательный логический параметр, задающий при
    значении .T. сохранение кода для последующих вызовов и возврата
    значения, сохраняемого во внутренней области CT II, а при значении .F.
    или по умолчанию запрос кода у DOS (путем вызова функции INT21h 59h),
    при котором внутренняя область устанавливается в значение 0.
 
  Возвращаемое значение
 
    nDosErrorCode - числовое значение, соответствующее коду ошибки,
    сохраненному во внутренней области CT II (при значении параметра .T.),
    или запрошенного у DOS (при значении параметра.F. или по умолчанию).
 
  Описание
 
    Функция позволяет получить доступ к коду последней возникшей ошибки.
    DOS сохраняет код последней ошибки до тех пор, пока не произойдет
    новая. Этот код (доступный через DOS-функцию INT21h, 59h) возвращается
    при значении .F. параметра <lKeepError> или по умолчанию.  Однако при
    этом сбрасывается значение, сохраняемое в соответствующей внутренней
    области CT II при возникновении ошибок в процессе выполнении функций
    CT II. Для получения этого значения функцию следует вызывать со
    значением .T.  параметра <lKeepError>, помня, что вызов со значением
    .F. или с опущенным параметром <lKeepError> приводит к вызову INT21 и
    сопровождается сбросом сохраняемого значения. Кроме того, поскольку
    для внутренних функций Clipper не отведено соответствующей области и
    коды их ошибок во внутренней области CT II не сохраняются, то при
    вызове данной функции их значения недоступны.
 
    Применение данной функции полезно при анализе значений, возвращаемых
    CT II-функциями, обеспечивающими возможность обработки ошибок.
 
  Примечания
 
  . Функция поддерживается версиями DOS 3.1 и выше.
 
  . Коды ошибок приведены в "Введение в Clipper Tools II/5.0":


    Приложение В.
 
  . Поскольку любая функция, содержащая вызовы DOS, устанавливает в
    значение 0 код ошибки, сохраняемый во внутренней области CT II,
    постольку все вызовы данной функции, следующие после ее вызова со
    значением .F. параметра <lKeepError>, будут возвращать 0.
 
  Примеры
 
  . Уточнение причины ошибки при копировании:
 
    nBytes := FILECOPY("TEST\TEST.PRG", "NEW.PRG")
    IF nBytes = 0 .AND. ERRORCODE() = 3
        ? "Путь доступа к файлу не найден!"
    ENDIF
 
  . Коды ошибок после ошибочного и успешного копирования:
 
    // Исходный файл отсутствует
    FILECOPY("XXXXX.TXT", "YYYY.TXT")
    ? ERRORCODE(.T.)                    // 2 (файл не найден)
    ? ERRORCODE()                       // 2 (файл не найден)
    ? ERRORCODE(.T.)                    // 0 (предыдущий вызов INT21h
                                        // сбросил сохраняемое значение)
    // Исходный файл доступен
    FILECOPY("SOURCE.TXT", "TARGET.TXT")
    ? ERRORCODE(.T.)                    // 0 (успешное выполнение
                                        // функции)
    ? ERRORCODE()                       // 2 (файл не найден, значение
                                        // будет сохраняться до следующей
                                        // ошибки)
 

See Also: ERRORACT()
ERRORBASE()
ERRORORG()
+-гК -Х¬¦-L DOS
 

 

 ERRORORG()
 Возвращает тип устройства, на котором произошла последняя ошибка.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ERRORORG() --> nDevice
 
  Возвращаемое значение
 
    nDevice - приведенный в таблице числовой код типа устройства, на
    котором произошла ошибка:
 
    Таблица 12-4. Типы устройств DOS
    --------------------------------------------------------------------
    Код Тип устройства


    --------------------------------------------------------------------
    1   Неопределенный тип
    2   Устройство блочного доступа (гибкий, жесткий диск и проч.)
    3   Сетевое устройство
    4   Устройство посимвольного доступа (порт, монитор и проч.)
    5   Оперативная память
    --------------------------------------------------------------------
 
  Описание
 
    Функция позволяет определить тип устройства, при обращении к которому
    произошла ошибка, и на основании этой информации предпринять
    какие-либо действия. Применение данной функции полезно при анализе
    значений, возвращаемых CT II-функциями, обеспечивающими возможность
    обработки ошибок.
 
  Примечания
 
  . Функция поддерживается версиями DOS 3.1 и выше.
 
  Примеры
 
  . Определение устройства - источника ошибки:
 
    nSource := ERRORORG()
    IF nSource = 3
        ? "Ошибка в сети !"
    ENDIF
 

See Also: ERRORACT()
ERRORBASE()
ERRORORG()

 

 

 EXENAME()
 Возвращает путь доступа к директории и имя файла прикладной программы.
------------------------------------------------------------------------------
 
  Синтаксис
 
    EXENAME() --> cProgram
 
  Возвращаемое значение
 
    cProgram - символьная строка, содержащая путь доступа к директории и
    имя файла прикладной Clipper-программы.
 
  Описание
 
    Функция позволяет определить путь доступа к директории и имя EXE-файла
    прикладной Clipper-программы, которая выполняется в текущий момент.
 
  Примечания
 
  . Выделение элементов из возвращаемой строки можно произвести с
    помощью функции TOKEN().
 
  Примеры
 
  . Определение изменения пути доступа и имени Clipper-программы:
 
    cOrigName := "C:\DATA\ADDRESS.EXE"
    IF EXENAME() <> cOrigName
        ? "Имя программы или директория изменены !"
        QUIT
    ENDIF


 

See Also: TOKEN()

 

 

 FILESFREE()
 Возвращает число свободных дескрипторов файлов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FILESFREE() --> nFreeHandles
 
  Возвращаемое значение
 
    nFreeHandles - количество свободных дескрипторов файлов.
 
  Описание
 
    Функция позволяет определить количество еще свободных (доступных
    прикладной программе) дескрипторов файлов, т.е. количество файлов,
    которые еще можно открыть, не закрывая других и не опасаясь
    возникновения DOS-сообщения об ошибке с кодом 4.
 
  Примечания
 
  . Количество свободных дескрипторов определяется как разность
    максимального числа используемых дескрипторов, возвращаемого функцией
    FILEMAX(), и числа дескрипторов уже используемых операционной системой
    и прикладной программой.
 
  Примеры
 
  . Определение числа свободных дескрипторов перед открытием базы
    данных:
 
    IF FILESFREE() > 0                  // Есть ли свободные дескрипторы ?
        USE CUSTOMER                    // Открытие базы данных
    ENDIF
 
  . Определение числа свободных дескрипторов перед открытием базы
    данных с индексным файлом:
 
    IF FILESFREE() > 1                  // Есть ли свободные дескрипторы ?
        USE CUSTOMER INDEX CUSTNR       // Открытие базы данных и индекса
    ENDIF
 

See Also: FILESMAX()

 

 

 FILESMAX()
 Возвращает максимальное количество используемых дескрипторов файлов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FILESMAX() --> nMaxHandles
 
  Возвращаемое значение
 
    nMaxHandles - максимальное количество одновременно используемых
    дескрипторов файлов.
 
  Описание
 
    Функция возвращает максимальное количество используемых дескрипторов
    файлов, что позволяет оценить количество файлов, которые могут быть


    открыты одновременно. Эта величина представляет собой меньшее из двух
    значений - заданного командой FILES в файле конфигурации системы
    CONFIG.SYS (возвращаемого функцией NUMFILES()) и заданного параметром
    F в DOS-переменной среды CLIPPER.
 
  Примечания
 
  . Доступное для текущего использования число дескрипторов меньше
    значения, возвращаемого описываемой функцией, поскольку операционная
    система использует несколько дескрипторов для внутренних нужд.
 
  Примеры
 
  . Количество одновременно открываемых файлов:
 
    ? FILESMAX()                        // Например, 100
 

See Also: FILESFREE()
NUMFILES()

 

 

 GETCOUNTRY()
 Возвращает код страны, установленный при загрузке DOS.
------------------------------------------------------------------------------
 
  Синтаксис
 
    GETCOUNTRY() --> nDosCountryCode
 
  Возвращаемое значение
 
    nDosCountryCode - целое число, соответствующее коду страны,
    установленному при загрузке DOS.
 
  Описание
 
    Функция возвращает число, соответствующее коду страны, заданному в
    файле конфигурации системы CONFIG.SYS.
 
  Примечания
 
  . Функция поддерживается версиями DOS 3.1 и выше.
 
  . Таблицу кодов стран можно найти в документации по DOS.
 
  Примеры
 
  . Определение кода страны:
 
    nCountryCode := GETCOUNTRY()
    IF nCountryCode = 49
        ? "Установлен код Германии!"
    ENDIF
 

 

 ISANSI()
 Возвращает признак наличия инсталлированного ANSI-драйвера.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ISANSI() --> lInstalled
 
  Возвращаемое значение
 
    lInstalled - логическое значение .T., если драйвер ANSI.SYS или
    аналогичный ему инсталлирован при загрузке DOS и активен, а иначе .F..
 
  Описание
 
    Функция позволяет определить, инсталлирован ли драйвер ANSI.SYS (или


    другой аналогичный ему), используемый для некоторых не полностью
    соответствующих стандарту IBM PC типов дисплеев.
 
  Примечания
 
  . Для возврата функцией корректного результата перенаправление в
    активное окно видеовывода программ, написанных не на Clipper
    (Ассемблер, Си), должно быть выключено вызовом DSETWINDOW(.F.).
 
  Примеры
 
  . Если ANSI-драйвер инсталлирован, то вывод можно осуществлять
    непосредственно через DOS:
 
    lOldWindow := DSETWINDOW(.F.)
    IF ISANSI()                         // Установлен ANSI-драйвер ?
        COM_DOSCON(dDate)               // Вывод непосредственно через DOS
    ELSE
        * Здесь должен располагаться фрагмент программы,
        * эмулирующий вывод через ANSI-драйвер
    ENDIF
    DSETWINDOW(lOldWindow)
 

See Also: COM_DOSCON()
DSETWINDOW()

 

 

 ISAT()
 Возвращает признак выполнения программы на компьютере класса AT.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ISAT() --> lAT
 
  Возвращаемое значение
 
    lAT - логическое значение .T., если программа выполняется на машине
    класса AT, а иначе .F..
 
  Описание
 
    Функция позволяет определить, выполняется ли программа на компьютере
    класса AT, т.е. на компьютере с микропроцессором 80286, а также 80386
    или 80486.
 
  Примеры
 
  . Определение возможности установки внутренних часов:
 
    IF ISAT()
        ? "Можно установить значение внутренних часов"
    ELSE
        ? "Время и дата не сохранятся при перезагрузке!"
    ENDIF
 

See Also: SETDATE()
SETTIME()

 

 

 ISMATH()
 Возвращает признак наличия математического сопроцессора.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ISMATH() --> lCoprocessor
 
  Возвращаемое значение
 


    lCoprocessor - логическое значение .T., если в компьютере установлен
    математический сопроцессор, а иначе .F..
 
  Описание
 
    Функция позволяет определить, установлен ли в компьютере
    математический сопроцессор, и в соответствии с этим направить
    выполнение программы по соответствующей ветви.
 
  Примеры
 
  . Определение наличия сопроцессора:
 
    IF ISMATH()
        ? "Сопроцессор установлен"
    ENDIF
 

See Also: CPUTYPE()

 

 

 MEMSIZE()
 Возвращает объем основной или расширенной памяти.
------------------------------------------------------------------------------
 
  Синтаксис
 
    MEMSIZE([lMode]) --> nMemSize
 
  Параметры
 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. возврат объема расширенной (EXTENDED), а при значении .F. или по
    умолчанию основной (CONVENTIONAL) оперативной памяти.
 
  Возвращаемое значение
 
    nMemSize - число Кбайтов памяти заданного типа.
 
  Описание
 
    Функция позволяет определить объем основной (CONVENTIONAL) памяти,
    располагающейся от 0 до 640 Кбайтов, или расширенной (EXTENDED),
    располагающейся выше 1 Мбайта оперативной памяти, установленной в
    системе.
 
  Примечания
 
  . Объем памяти определяется вызовом функций BIOS, что требует
    от компьютера соответствия стандартам IBM PC.
 
  Примеры
 
  . Объем основной памяти:
 
    ? MEMSIZE()                         // Например, 512
 
  . Объем расширенной памяти:
 
    ? MEMSIZE(.T.)                      // Например, 384
 

See Also: ALLOFREE()*

 

 

 NUMBUFFERS()
 Возвращает количество системных файловых буферов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NUMBUFFERS() --> nNumberBuffers
 
  Возвращаемое значение
 


    nNumberBuffers - число буферов, установленных при загрузке системы.
 
  Описание
 
    Функция позволяет определить количество системных файловых буферов,
    установленное при загрузке системы и задаваемое в файле системной
    конфигурации CONFIG.SYS.
 
  Примечания
 
  . Информацию о количестве буферов функция считывает непосредственно
    из системной области DOS, поэтому место расположения файла CONFIG.SYS
    не имеет значения.
 
  Примеры
 
  . Определение количества буферов:
 
    ? NUMBUFFERS()
 

See Also: NUMFILES()

 

 

 NUMFILES()
 Возвращает максимальное системное количество дескрипторов файлов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NUMFILES() --> nNumberFiles
 
  Возвращаемое значение
 
    nNumberFiles - количество максимально доступных дескрипторов файлов,
    установленное при загрузке системы и задаваемое в файле системной
    конфигурации CONFIG.SYS командой FILES.
 
  Описание
 
    Функция позволяет определить максимальное количество файлов, которые
    можно одновременно открыть под управлением DOS.
 
    Количество дескрипторов задается командой FILES в файле конфигурации
    системы CONFIG.SYS и устанавливается при загрузке.
 
  Примечания
 
  . Информацию о количестве дескриптеров файлов функция считывает
    непосредственно из системной области DOS, поэтому место расположения
    файла CONFIG.SYS не имеет значения.
 
  . Функция не может определить, выполнена ли дополнительная адаптация
    операционной системы к сетевому окружению (напр., посредством файла
    сетевой конфигурации SHELL.CFG для сети NOVELL).  Подобная адаптация
    представляет интерес только для сетевого устройства.
 
  Примеры
 
  . Определение максимального количества файлов:
 
    ? NUMFILES()                        // 30
 



See Also: NUMBUFFERS()
FILESFREE()
FILESMAX()

 

 

 OSVER()
 Возвращает номер версии DOS.
------------------------------------------------------------------------------
 
  Синтаксис
 
    OSVER() --> cDosVersion
 
  Возвращаемое значение
 
    cDosVersion - символьная строка, содержащая номер версии операционной
    системы в формате "9.99".
 
  Описание
 
    Функция возвращает символьную строку, содержащую номер версии
    операционной системы, что часто необходимо для определения возможности
    корректного использования некоторых команд. Например, Clipper-команда
    COMMIT может выполняться только под управлением версий DOS 3.30 и
    выше.
 
  Примеры
 
  . Определение версии DOS:
 
    IF OSVER() < "3.30"
        ? "Нельзя использовать COMMIT!"
    ENDIF
 

 

 PCTYPE()
 Возвращает код типа компьютера.
------------------------------------------------------------------------------
 
  Синтаксис
 
    PCTYPE() --> nPCType
 
  Возвращаемое значение
 
    nPCType - числовой код типа компьютера, приведенный в таблице:
 
    Таблица 12-5. Кодирование типов компьютеров
    --------------------------------------------------------------------
    Код    Символьная константа Тип компьютера
    --------------------------------------------------------------------
    255    PC_NORMAL            Обычный IBM PC
    254    PC_XT                IBM PC/XT (с жестким диском)
    253    PC_JUNIOR            IBM PC/JR
    240    PC_MODEL30           IBM PS/2 модель 30
    251    PC_XT_2              XT/2
    249    PC_LAPTOP            LapTop (портативный)
    252    PC_AT                IBM PC/AT/XT-286, IBM PS/2 50 или 60
    248    PC_MODEL80           IBM PS/2 модель 80
    45     PC_COMPAQP           COMPAQ Portable
    154    PC_COMPAQPP          COMPAQ Portable Plus
    --------------------------------------------------------------------


 
  Описание
 
    Функция позволяет определить тип компьютера.
 
  Примечания
 
  . Для компьютеров с микропроцессором 80386 обычно возвращается такой
    же код, как для IBM PC/AT.
 
  . Поскольку возвращаемое значение соответствует кодированию по
    стандарту IBM для BIOS, то при не полностью совместимом BIOS может
    быть возвращено некорректное значение.
 
  Примеры
 
  . Определение типа компьютера:
 
    ? PCTYPE()                  // Например, 252 (IBM PC/AT)
 

See Also: CPUTYPE()
SPEED()

 

 

 SSETBREAK()
 Переключает DOS-режим реакции на <Ctrl><Break>.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SSETBREAK([lNewSwitch]) --> lOldSwitch
 
  Параметры
 
    <lNewSwitch> - необязательный логический параметр, задающий при
    значении .T. включение, а при значении .F. выключение DOS-режима
    реакции на <Ctrl><Break>. По умолчанию текущее состояние режима не
    изменяется.
 
  Возвращаемое значение
 
    lOldSwitch - логическое значение, соответствующее предыдущему
    состоянию DOS-режима. Значение .T. означает, что режим был включен, а
    .F. - выключен.
 
  Описание
 
    Функция позволяет установить требуемый режим обработки нажатия
    комбинации клавиш <Ctrl><Break> (флаг BREAK). Обычно DOS реагирует на
    нажатие этой комбинации клавиш только при выполнении экранных функций
    и во время ввода с клавиатуры. Описываемая функция позволяет включить
    DOS-режим реакции на <Ctrl><Break> и при выполнении других операций,
    например, дисковых.
 
  Примечания
 
  . Исходное состояние DOS-режима реакции на <Ctrl><Break>
    устанавливается при загрузке системы в соответствии с командой
    BREAK=ON|OFF в файле конфигурации системы CONFIG.SYS.
 
  Примеры
 
  . Активизация DOS-режима реакции на <Ctrl><Break> с сохранением


    предыдущего состояния:
 
    lOldBreak := SSETBREAK(.T.)
 

See Also: SSETVERIFY()

 

 

 SSETVERIFY()
 Устанавливает DOS-переключатель VERIFY.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SSETVERIFY([lNewSwitch]) --> lOldSwitch
 
  Параметры
 
    <lNewSwitch> - необязательный логический параметр, задающий при
    значении .T. включение, а при значении .F. выключение DOS-режима
    VERIFY.
 
  Возвращаемое значение
 
    lOldSwitch - логическое значение, соответствующее предыдущему
    состоянию DOS-режима. Значение .T. означает, что режим был включен,
    а .F. - выключен.
 
  Описание
 
    Функция позволяет установить требуемый DOS-режим проверки корректности
    копирования данных (флаг VERIFY), который обычно выключается для
    ускорения операций записи. При включенном режиме запись на диск
    занимает немного больше времени, но при выполнении важных операций
    проверкой не стоит пренебрегать.
 
  Примечания
 
  . Исходное состояние DOS-режима VERIFY устанавливается при загрузке
    системы в соответствии с командой VERIFY=ON|OFF в файле конфигурации
    системы CONFIG.SYS.
 
  Примеры
 
  . Активизация DOS-режима VERIFY с сохранением предыдущего состояния:
 
    lOldBreak := SSETVERIFY(.T.)
 

See Also: SSETBREAK()

 

 

 Введение в разнотипные функции
------------------------------------------------------------------------------
 ALLOFREE()*   Возвращает максимальный размер памяти, доступный программе
 BLANK()       Создает пустое значение для данных любого типа
 COMPLEMENT()  Возвращает дополнение для значения любого типа данных
 DATATYPE()*   Возвращает тип данных результата вычисления выражения
 GETTIC()      Возвращает количество отсчитанных сигналов таймера
 KBDDISABLE()  Устанавливает/отменяет блокировку клавиатуры
 KBDEMULATE()  Эмулирует ввод с клавиатуры, помещая символы в буфер BIOS


 KBDSPEED()    Устанавливает задержку и скорость автоповтора клавиатуры
 KBDSTAT()     Возвращает состояние управляющих клавиш и индикаторов
 KBDTYPE()     Возвращает код типа используемой клавиатуры
 KEYSEC()      Помещает код клавиши в буфер клавиатуры по истечении времени
 KEYTIME()     Помещает код клавиши в буфер клавиатуры в заданный момент
 MILLISEC()    Приостанавливает выполнение программы на заданное время
 NUL()         Преобразует любое выражение в пустую строку
 SCANKEY()     Возвращает полный скан-код нажатой клавиши
 SETTIC()      Управляет внутренним счетчиком сигналов и частотой таймера
 SHOWKEY()     Отображает на экране состояния системных переключателей
 SOUND()       Генерирует звук заданной частоты и длительности
 SPEED()       Возвращает относительное значение скорости процессора
 STACKFREE()   Возвращает размер свободного пространства в стеке
 TOOLVER()     Возвращает номер используемой версии библиотеки функций
 XTOC()        Преобразует данные любого типа к символьному типу
 

 

  Введение
 
------------------------------------------------------------------------------
 
    В этой главе описаны функции, которые тематически сложно отнести к
    какому-либо разделу. Это, однако, не умаляет их полезности. Например,
    используя функции KEYTIME() или KEYSEC(), можно активизировать
    Clipper-процедуру в определенный момент или по истечении заданного
    интервала времени, что облегчает создание демонстрационных программ и
    обработку случайных потоков входной информации.
 
    Кроме того, сюда включены функции формирования дополнений
    (в математическом смысле), определения типа данных и получения полных
    скан-кодов клавиш.
 
  Передача параметров по ссылке
 
    Некоторые функции, описываемые в данной главе, допускают передачу
    параметров по ссылке. Подробнее о передаче параметров по ссылке можно
    прочитать в главе 4 "Обработка строк".
 

 



 ALLOFREE()*
  Возвращает максимальный размер памяти, доступный программе.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ALLOFREE([<lMode>]) --> nFreeMemory
 
  . Внимание! Функция сохранена только из соображений совместимости и не
    рекомендуется для применения в последующих разработках прикладных
    программ. Вместо нее используйте Clipper-функцию MEMORY().
 
  Параметры
 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. возврат размера всей доступной памяти, а при значении .F. или по
    умолчанию возврат размера максимального непрерывного блока памяти.
 
  Возвращаемое значение
 
    nFreeMemory - число байтов доступной памяти запрашиваемого типа, или
    (-1) при недостатке места в стеке.
 
  Описание
 
    Функция позволяет избежать ошибок распределения памяти, возвращая
    размер максимального свободного блока памяти или размер всей доступной
    памяти.
 
  Примеры
 
  . При создании символьной строки максимальной длины может возникнуть
    ошибка из-за недостатка свободной памяти:
 
    Var := SPACE(65520)
 
  . Создание символьной строки максимально доступной длины:
 
    Var := SPACE(ALLOFREE())            // В этом случае нельзя вызывать
                                        // функцию со значением параметра .T.
    ? LEN(Var)                          // Длина полученной строки
 
  . Считывание файла:
 
    FILESTR("Bigfile", ALLOFREE())      // Чтение в буфер максимально
                                        // доступной длины
 
  . Определение размера доступной памяти:
 
    ? ALLOFREE(.T.)                     // Размер доступной памяти
 

See Also: STACKFREE()

 

 

 BLANK()
 Создает пустое значение для данных любого типа.
------------------------------------------------------------------------------


 
  Синтаксис
 
    BLANK([[@]<expValue>], [<lMode>]) --> xBlank
 
  Параметры
 
    [@]<expValue> - необязательный параметр любого типа данных.
    По умолчанию используется логический тип данных. При указании
    необязательного префикса @ параметр передается по ссылке, а не по
    значению.
 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. сохранение размера символьной строки, а при значении .F. или по
    умолчанию создание пустой строки.
 
  Возвращаемое значение
 
    xBlank - пустое значение данных того же типа, что и параметр
    <expValue>, приведенное в таблице:
 
    Таблица 13-1. Пустые значения для типов данных
    --------------------------------------------------------------------
    Тип параметра <expValue>    Возвращаемое значение
    --------------------------------------------------------------------
    Символьный                  Пустая или заполненная пробелами строка
    Числовой                    Число 0
    Логический                  .F.
    Date                        Пустая дата
    --------------------------------------------------------------------
 
  Описание
 
    Функция возвращает или непосредственно изменяет (при передаче по
    ссылке) значения полей данных и переменных. Для символьных строк при
    значении .T. параметра <lMode> длина строки не изменяется, а строка
    заполняется пробелами. При значении .F. или по умолчания строка
    усекается до нулевой длины.
 
  Примечания
 
  . Возвращаемое функцией пустое значение типа Date не зависит от
    текущего формата, устанавливаемого Clipper-командой SET DATE, и при
    отображении на экране имеет вид "  /  /  ".
 
  . При передаче параметра по ссылке можно уменьшить потребности в
    рабочей памяти, подавив возвращение функцией результата путем
    предварительного вызова CSETREF(.T.).


Однако не следует передавать
    символьную строку по ссылке при изменении ее длины (заданием значения
    .T. параметра <lMode>).
 
  Примеры
 
  . Некоторые примеры создания пустых значений:
 
    SET DATE AMERICAN
    ? BLANK(DATE())                     // "  /  /  "
    SET DATE GERMAN
    ? BLANK(DATE())                     // "  /  /  "
    ? BLANK()                           // .F.
    ? BLANK(.T.)                        // .F.
    ? BLANK(99)                         //  0
    ? BLANK("abc")                      // ""
    ? BLANK("11:59:59")                 // ""
    ? BLANK("abc", .T.)                 // "   " - строка с пробелами
 

See Also: CSETREF()

 

 

 COMPLEMENT()
 Возвращает дополнение для значения любого типа данных.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COMPLEMENT(<expValue>) --> xComplement
 
  Параметры
 
    <expValue> - результат вычисления выражения любого типа данных.
 
  Возвращаемое значение
 
    xComplement - значение того же типа данных, что и <expValue>,
    в соответствии с таблицей:
 
    --------------------------------------------------------------------
    Тип <expValue>      Возвращаемое значение
    --------------------------------------------------------------------
    Логический          .NOT.(<expValue>)
    Символьный          CHARNOT(<expValue>)
    Числовой            -(<expValue>)
    Date                Число лет, месяцев и дней, оставшихся до 31
                        декабря 2999 года.  При задании пустой,
                        превышающей 31/12/2999, или ошибочной даты
                        возвращается 01/01/3000
    Массив, блок кода   NIL
    --------------------------------------------------------------------


 
  Описание
 
    Функция возвращает значение, соответствующее дополнению к значению
    <expValue> для типов данных Clipper, кроме массива и блока кода.
 
  Примечания
 
  . Результат вычисления COMPLEMENT(COMPLEMENT(<expValue>)) равен
    <expValue> (при корректном задании параметра).
 
  Примеры
 
  . Для логических выражений результат аналогичен применению операции
    .NOT.:
 
    ? COMPLEMENT(.T.)                           // .F..
    ? COMPLEMENT(.F.)                           // .T..
 
  . Для числовых значений меняется знак:
 
    ? COMPLEMENT(99)                            // -99.00
    ? COMPLEMENT(0)                             // 0
    ? COMPLEMENT(-99)                           // 99.00
    ? COMPLEMENT(-9.9)                          // 9.90
    ? COMPLEMENT(9.9)                           // -9.9
 
  . С символьными строками функция работает как CHARNOT():
 
    ? COMPLEMENT("abcdefgh")                    // "ЮЭЬЫЪЩШЧ"
 
  . Дополнение 30/12/2998 до 31/12/2999 составляет 366 дней:
 
    SET CENTURY ON
    SET DATE GERMAN
    ? COMPLEMENT(CTOD("30/12/2998"))            // 01/01/0001
 
  . При задании пустой или недопустимой даты возвращается
    одинаковый результат:
 
    SET CENTURY ON
    ? COMPLEMENT(CTOD("  /  /  "))              //  01/01/3000
    ? COMPLEMENT(CTOD("77/77/77"))              //  01/01/3000
 

 

 DATATYPE()*
 Возвращает тип данных результата вычисления выражения.
------------------------------------------------------------------------------
 
  Синтаксис
 
    DATATYPE(<expValue>) --> nDataType
 
  . Внимание! Функция сохранена только из соображений совместимости и
    не рекомендуется для применения в последующих разработках прикладных
    программ. Вместо нее используйте Clipper-функцию VALTYPE().
 


  Параметры
 
    <expValue> - результат вычисления выражения любого типа данных.
 
  Возвращаемое значение
 
    nDataType - числовой код типа данных, являющийся комбинацией битов со
    значениями, приведенными в таблице:
 
    Таблица 13-2. Коды типов данных
    --------------------------------------------------------------------
    Бит Число   Симв.константа  Тип данных
    --------------------------------------------------------------------
        0       TYPE_UNDEF      Не определен
    1   1       TYPE_STR        Символьный
    1   1       TYPE_MEMO       memo-поле
    2   2       TYPE_NUM        Числовой
    3   4       TYPE_LOG        Логический
    4   8       TYPE_DATE       Date
    5   16      TYPE_ALIAS      Алиас базы данных
    6   32      TYPE_BY_REF     Параметр передан по ссылке
    7   64
    8   128     TYPE_WORD       16-битовое слово
    9   256
    10  512     TYPE_ARRAY      Массив
    11  4096    TYPE_BLOCK      Блок кода
    --------------------------------------------------------------------
 
  Описание
 
    Функция подобна Clipper-функции TYPE(), но возвращает более полную
    информацию. Возвращаемое значение может содержать комбинацию битов,
    значение которых можно проверить при помощи функции ISBIT().
 
    Кроме того, функция позволяет определить тип данных результата
    вычисления выражений с использованием LOCAL и STATIC переменных, а
    также тип данных значений, возвращаемых CT II-функциями и функциями
    пользователя, чего нельзя сделать с помощью Clipper-функции TYPE().
 
  Примечания
 
  . При ошибке в выражении <expValue> формируется сообщение времени
    выполнения.
 
  . Функция не позволяет отличить memo-поле от символьной строки.
 
  Примеры
 
  . Варианты возвращаемых значений:
 
    ? DATATYPE()                //  0, не определен
    ? DATATYPE("XXX")           //  1, символьная строка


    ? DATATYPE(123)             //  2, число
    ? DATATYPE(DOY())           //  2, числовое выражение
    ? DATATYPE(.T.)             //  4, логическое значение
    ? DATATYPE(3 > 2)           //  4, логическое выражение
    ? DATATYPE(EOF())           //  4, логическое выражение
    ? DATATYPE(DATE())          //  8, выражение типа Date
    ? DATATYPE(memofld)         //  1, memo-поле
    ? DATATYPE(@crlf)           //  33, строка, переданная по ссылке
    ? DATATYPE(@array)          //  544, массив, переданный по ссылке
    ? DATATYPE(array[1])        //  2, числовой элемент
    ? DATATYPE(array[2])        //  1, символьная строка
 

 

 GETTIC()
 Возвращает количество отсчитанных сигналов таймера.
------------------------------------------------------------------------------
 
  Синтаксис
 
    GETTIC() --> nTickCount
 
  Возвращаемое значение
 
    nTickCount - число сигналов таймера, отсчитанных с момента последней
    инициализации внутреннего счетчика, выполняемой при вызове
    SETTIC(.T.).
 
  Описание
 
    Функция применяется в сочетании с функцией SETTIC() и позволяет
    определить количество сигналов, отсчитанных с момента запуска
    внутреннего счетчика, сопровождающего вызов функции SETTIC(.T.).
 
  Примечания
 
  . Остановка внутреннего счетчика производится вызовом SETTIC(.F.).
 
  Примеры
 
  . Измерение времени выполнения функции пользователя:
 
    SETTIC(.T.)                         // Запуск внутреннего счетчика
        MY_UDF(I)
    SETTIC(.F.)                         // Остановка счетчика
    ? "Функция выполнялась", GETTIC(), "сигналов таймера"
 

See Also: SETTIC()

 

 

 KBDDISABLE()
 Устанавливает/отменяет блокировку клавиатуры.
------------------------------------------------------------------------------
 
  Синтаксис
 
    KBDDISABLE(<lSwitch>) --> cNull
 


  Параметры
 
    <lSwitch> - логический параметр, задающей при значении .T. блокировку,
    а при значении .F. отмену блокировки клавиатуры.
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция позволяет осуществить программную блокировку клавиатуры, при
    которой система не реагирует на нажатие любых клавиш, включая
    комбинацию <Ctrl><Alt><Del>.
 
  Примечания
 
  . Внимание! Если заблокированная клавиатура не разблокирована
    вызовом KBDDISABLE(.T.) перед завершением программы, то автоматическая
    разблокировка не производится и клавиатура остается заблокированной.
 
  Примеры
 
  . Блокировка клавиатуры на 5 секунд:
 
    KBDDISABLE(.T.)             // Блокировка клавиатуры
    INKEY(5)                    // Интервал не может быть укорочен нажатием
                                // клавиш
    KBDDISABLE(.F.)             // Снятие блокировки клавиатуры
 

See Also: DSETKBIOS()
KBDSPEED()
KBDSTAT()
KBDTYPE()

 

 

 KBDEMULATE()
 Эмулирует ввод с клавиатуры, помещая символы в буфер BIOS.
------------------------------------------------------------------------------
 
  Синтаксис
 
    KBDEMULATE(<cListKeyValue>) --> nValue
 
  Параметры
 
    <cListKeyValue> - символьная строка, задающая до 15 кодов клавиш в
    виде пар ASCII-кода и скан-кода, помещаемых в буфер BIOS.
 
  Возвращаемое значение
 
    nValue - число кодов клавиш, не поместившихся в буфере.
 
  Описание
 
    Функция позволяет эмулировать ввод с клавиатуры на очень низком
    уровне. Данные, помещенные в буфер ввода BIOS, становятся доступны
    другим программам. Например, если непосредственно перед завершением
    прикладной программы поместить в буфер команду DOS, то по выходе будет
    выполнена введенная команда. Помещенные в буфер данные становятся
    доступны и для программ, запущенных командой RUN.


 
    Размер буфера ввода ограничен 15 символами. Для различных типов
    клавиатур некоторые коды могут различаться, однако эти коды всегда
    совпадают со значениями, возвращаемыми функцией SCANKEY(). Код клавиши
    (полный скан-код) формируется следующим образом:
 
    CHR(<ASCII-код>) + CHR(<скан-код>)
 
    Как правило, передаваемый скан-код не используется ни
    Clipper-программами, ни многими другими программами, поэтому в
    большинстве случаев его значение не играет роли. Например, при
    формировании команды DOS можно указывать пробелы в каждой четной
    позиции. Проблемы могут возникнуть, только если запускаемая программа
    анализирует скан-коды клавиш (см. Примеры).
 
  Примечания
 
  . Символьные константы для кодов клавиш определены в файле
    NT2SCAN.CH, входящем в комплект поставки CT II.
 
  . Функция может работать некорректно при отсутствии полной
    совместимости аппаратных средств с BIOS, а также при использовании
    программ, расширяющих буфер BIOS.
 
  . Хотя эмуляция осуществляется на очень низком уровне, все
    переопределения кодов клавиш, выполненные с помощью функции
    SETKXLAT(), действительны.
 
  Примеры
 
  . Взаимный вызов двух программ, подставляющих перед выходом в DOS
    соответствующую команду в буфер BIOS:
 
    * Программа 1 (PROG1.EXE)
 
    CLEAR
    @10, 10 SAY "Программа 1"
    INKEY(5)                                    // Задержка...
    KBDEMULATE("P R O G 2 " + CHR(13))          // Подготовка запуска PROG2
                                                // по выходе в DOS
    RETURN
 
    // Программа 2 (PROG2.EXE)
 
    CLEAR
    @10, 10 SAY "Программа 2"
    INKEY(5)                                    // Задержка...
    KBDEMULATE("P R O G 1 " + CHR(13))          // Подготовка запуска PROG1
                                                // по выходе в DOS


    RETURN
 
  . Помещение в буфер BIOS команды вызова самой выполняющейся
    программы. Для создания байта скан-кода используется функция EXPAND():
 
    ExeName:= TOKEN(EXENAME(), ":\")            // Последним элементом в
                                                // полном пути доступа
                                                // является имя файла,
                                                // включающее расширение
    ExeName:= TOKEN(ExeName, ".", 1)            // Первым элементом имени
                                                // является само имя файла
                                                // без расширения
    KBDEMULATE(EXPAND(ExeName + CHR(13)))       // Дополнение пробелами
    QUIT
 
  . Применение EXPAND():
 
    KBDEMULATE(EXPAND("TEST") + CHR(13))        // Ошибка! Нет пробела перед
                                                // CHR(13)
    KBDEMULATE(EXPAND("TEST" + CHR(13)))        // Правильно! Пробел перед
                                                // CHR(13)
 

See Also: NUMLOW()
NUMHIGH()
SETKXLAT()
KEYSEND()

 

 

 KBDSPEED()
 Устанавливает задержку и скорость автоповтора клавиатуры.
------------------------------------------------------------------------------
 
  Синтаксис
 
    KBDSPEED([<nDelay>], [<nFrequency>]) --> lAmended
 
  Параметры
 
    <nDelay> - необязательный числовой параметр, задающий код задержки
    начала автоповтора нажатой клавиши. Допустимые значения приведены в
    таблице:
 
    Таблица 13-3. Кодирование задержки автоповтора
    --------------------------------------------------------------------
    Код Время задержки в мс
    --------------------------------------------------------------------
    0   250
    1   500
    2   750
    3   1000
    --------------------------------------------------------------------


 
    <nFrequency> - необязательный целый числовой параметр, задающий код
    скорости автоповтора нажатой клавиши. Допустимы значения в диапазоне
    от 0 до 31, а по умолчанию используется значение 12. Примеры
    кодирования скорости автоповтора приведены в таблице:
 
    Таблица 13-4. Кодирование скорости автоповтора
    --------------------------------------------------------------------
    Код Скорость автоповтора (симв./с)
    --------------------------------------------------------------------
     0  30
    12  10
    31  2
    --------------------------------------------------------------------
 
  Возвращаемое значение
 
    lAmended - логическое значение .T. при успешной установке величин
    задержки и скорости автоповтора, а иначе .F..
 
  Описание
 
    Функция позволяет установить задержку и скорость автоповтора нажатой
    на клавиатуре компьютеров класса IBM PC/AT клавиши, что позволяет
    установить приемлемые характеристики для каждого конкретного
    пользователя.
 
  Примечания
 
  . Внимание! Функцию можно использовать только на компьютерах
    класса IBM PC/AT и выше.
 
  Примеры
 
  . Установка максимальной скорости автоповтора:
 
    IF KBDTYPE() > 0    // Применимо только для компьютеров класа AT
        KBDSPEED(0, 0)
    ENDIF
 

See Also: DSETKBIOS()
KBDDISABLE()
KBDSTAT()
KBDTYPE()

 

 

 KBDSTAT()
 Возвращает состояние управляющих клавиш и системных индикаторов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    KBDSTAT() --> nKeyStatus
 
  Возвращаемое значение
 
    nKeyStatus - числовое значение, являющееся комбинацией битов состояния
    управляющих клавиш и системных индикаторов, приведенных в таблице:
 
    Таблица 13-5. Состояния при единичных значениях битов
    --------------------------------------------------------------------


    Бит Клавиша или системный индикатор
    --------------------------------------------------------------------
    1   Нажата правая клавиша <Shift>
    2   Нажата левая клавиша <Shift>
    3   Нажата правая или левая клавиша <Ctrl>
    4   Нажата клавиша <Alt> или комбинация <Shift><Alt>
    5   Включен индикатор SCROLL LOCK
    6   Включен индикатор NUM LOCK
    7   Включен индикатор CAPS LOCK
    8   Включен индикатор INSERT
    --------------------------------------------------------------------
 
  Описание
 
    Функция позволяет определить состояние управляющих клавиш <Ctrl>,
    <Shift>, <Alt> и системных индикаторов SCROLL LOCK, NUM LOCK и
    CAPS LOCK.
 
  Примечания
 
  . Возвращаемое значение зависит от типа клавиатуры. Для определения
    типа клавиатуры, а также для определения наличия правых и левых клавиш
    <Ctrl> и <Alt>, следует использовать функцию KBDTYPE().
 
  Примеры
 
  . Проверка нажатия клавиши <Alt>, например, для вывода на экран
    дополнительного меню с подсказками:
 
    IF ISBIT(KBDSTAT(), 4)
        * Здесь должен располагаться фрагмент программы вывода
        * дополнительного меню
    ENDIF
 

See Also: KBDDISABLE()
KBDSPEED()
KBDTYPE()

 

 

 KBDTYPE()
 Возвращает код типа используемой клавиатуры.
------------------------------------------------------------------------------
 
  Синтаксис
 
    KBDTYPE() --> nKeyboardType
 
  Возвращаемое значение
 
    nKeyboardType - числовой код типа клавиатуры, приведенный в таблице:
 
    Таблица 13-7. Кодирование типов клавиатур
    --------------------------------------------------------------------
    Код Тип клавиатуры
    --------------------------------------------------------------------
    0   Класса IBM PC
    1   Класса IBM PC/AT
    2   Расширенный (101 или 102 клавиши, включая <F11> и <F12>)


    --------------------------------------------------------------------
 
  Описание
 
    Функция возвращает код типа используемой клавиатуры, что позволяет,
    например, проверить, имеет ли клавиатура клавиши <F11> и <F12>,
    которые поддерживает CT II.
 
  Примечания
 
  . При использовании не полностью совместимых клавиатур функция может
    возвращать некорректные результаты.
 
  Примеры
 
  . Запрос типа клавиатуры:
 
    ? KBDTYPE()         // Например, 2 (расширенная клавиатура)
 

See Also: KBDDISABLE()
KBDSPEED()
KBDSTAT()
DSETKBIOS()

 

 

 KEYSEC()
 Помещает код клавиши в буфер клавиатуры по истечении интервала времени.
------------------------------------------------------------------------------
 
  Синтаксис
 
    KEYSEC([<nKey|cScan>, [<nTime>], [<nCounter>],
        [<lMode>]]) --> lActivated
 
  Параметры
 
    <nKey|cScan> - код клавиши, помещаемый в буфер клавиатуры, задаваемый
    либо в числовой форме INKEY-кода, либо в виде последовательности двух
    символов (ASCII-кода и скан-кода).  По умолчанию ранее назначенное
    помещение кода клавиши в буфер клавиатуры отменяется.
 
    <nTime> - необязательный числовой параметр, задающий интервал времени
    в секундах, по истечении которого код клавиши помещается в буфер
    клавиатуры. Отрицательные значения задают интервал в единицах 1/18.2
    секунды.
 
    <nCounter> - необязательный числовой параметр, задающий количество
    повторений помещения кода клавиши в буфер клавиатуры. При значении
    (-1) помещение кода клавиши в буфер клавиатуры производится до явной
    отменены (путем вызова функции без параметров). По умолчанию
    повторения не производятся.
 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. перезапуск внутреннего счетчика при каждом нажатии какой-либо


    клавиши на клавиатуре, а при значении .F. или по умолчанию
    использование прежнего значения.
 
  Возвращаемое значение
 
    lActivated - логическое значение .T. при запущенном процессе отсчета
    временного интервала для помещения кода клавиши в буфер клавиатуры,
    или значение .F. при прекращении процесса.
 
  Описание
 
    Функцию можно использовать при создании демонстрационных программ или
    программ, обрабатывающих случайные потоки информации. В сочетании с
    KEYSEND() она позволяет моделировать ввод с клавиатуры практически
    любой сложности. Кроме того, ее, как и KEYTIME(), в сочетании с
    Clipper-командой SET KEY..TO можно использовать и для организации
    прерываний по нажатию клавиш. При этом обеспечивается возможность,
    например, не прерывая редактирования GET-объектов, через определенные
    интервалы времени автоматически записывать на диск находящиеся в
    буфере данные.
 
    Вызов функции запускает в фоновом режиме процесс отсчета интервала
    времени и помещения по его завершении кода клавиши в буфер клавиатуры.
    Этот процесс повторяется <nCounter> раз, после чего прекращается.
 
    Если задано значение .T. параметра <lMode>, то отсчет интервала
    времени начинается сначала при нажатии любой клавиши.
 
    Для завершения процесса (идущего в фоновом режиме) следует вызвать
    функцию без параметров.
 
  Примечания
 
  . Внимание! Функция изменяет один из системных векторов прерываний.
    Поэтому перед окончанием выполнения программы для восстановления
    исходного значения вектора необходимо произвести вызов функции с
    опущенными параметрами. Восстановление векторов производится также
    утилитой INTSAVE, входящей в комплект поставки CT II, и при
    прикомпоновке CT II-драйвера CT2US50.OBJ.
 
  . Нельзя активизировать два процесса по двум вызовам описываемой
    функции одновременно, т. к. следующий вызов отменяет действие


    предыдущего.
 
  . При задании значения <nKey|cScan> можно использовать символьные
    константы, определенные как в Clipper-файле описаний INKEY.CH, так и в
    файле NT2SCAN.CH, входящем в комплект поставки CT II.
 
  Примеры
 
  . Помещение CHR(7) в буфер клавиатуры три раза с интервалом в 5 с:
 
    ? KEYSEC(7, 5, 3)                   // (.T.)
 
  . Помещение CHR(255) каждые 50 с до отмены:
 
    ? KEYSEC(255, 50, -1)               // (.T.)
 
  . Перезапуск счетчика времени при нажатии любой клавиши:
 
    ? KEYSEC(13, 50, -1, .T.)           // (.T.)
 

See Also: KEYTIME()
LASTKLINE()
LASTKFUNC()
LASTKPROC()

 

 

 KEYTIME()
 Помещает код клавиши в буфер клавиатуры в заданный момент времени.
------------------------------------------------------------------------------
 
  Синтаксис
 
    KEYTIME([<nKey|cScan>], [<cClocktime>]) --> lActivated
 
  Параметры
 
    <nKey|cScan> - код клавиши, помещаемый в буфер клавиатуры, задаваемый
    либо в числовой форме INKEY-кода, либо в виде последовательности двух
    символов (ASCII-кода и скан-кода).  По умолчанию ранее назначенное
    помещение кода клавиши в буфер клавиатуры отменяется.
 
    <cClocktime> - необязательный символьный параметр, задающий время
    суток в формате "ЧЧ:ММ:СС", при наступлении которого код клавиши
    следует поместить в буфер клавиатуры.
 
  Возвращаемое значение
 
    lActivated - логическое значение .T. при запущенном процессе отсчета
    временного интервала для помещения кода клавиши в буфер клавиатуры,
    или значение .F. при прекращении процесса.
 
  Описание
 
    Функция запускает в фоновом режиме процесс отслеживания заданного
    времени суток (по системным часам), при наступлении которого в буфер
    клавиатуры помещается код клавиши, заданный параметром <nKey|cScan>.
    Это позволяет организовать выполнение каких-либо действий (напр.,


    резервное копирование) в заданный момент времени.  Для этого программа
    должна находиться в состоянии ожидания и с указанной клавишей должна
    быть связана процедура пользователя (Clipper-командой SET KEY...TO),
    которой в назначенное время будет передано управление.
 
    Задание "99" в качестве значения для часов, минут или секунд изменяет
    действие функции, вызывая помещение кода клавиши каждый час, минуту
    или секунду соответственно. Например, при задании значения "10:99:00"
    параметра <cClocktime> функция будет помещать символ в буфер
    клавиатуры с 10:00 до 10:59 каждую минуту.
 
    Для завершения процесса (идущего в фоновом режиме) следует вызвать
    функцию без параметров.
 
  Примечания
 
  . Внимание! Функция изменяет один из системных векторов прерываний.
    Поэтому перед окончанием выполнения программы для восстановления
    исходного значения вектора необходимо произвести вызов функции с
    опущенными параметрами. Восстановление векторов производится также
    утилитой INTSAVE, входящей в комплект поставки CT II, и при
    прикомпоновке CT II-драйвера CT2US50.OBJ.
 
  . Нельзя активизировать два процесса по двум вызовам описываемой
    функции одновременно, т.к. следующий вызов отменяет действие
    предыдущего.
 
  . При задании значения <nKey|cScan> можно использовать символьные
    константы, определенные как в Clipper-файле описаний INKEY.CH, так и в
    файле NT2SCAN.CH, входящем в комплект поставки CT II.
 
  . Внимание! Функцию можно использовать только на компьютерах класса
    IBM PC/AT и выше.
 
  . При задании параметра <cClocktime> нулевые значения секунд ("СС")
    и минут ("ММ") можно опускать вместе с предшествующим разделителем
    (":").
 
  Примеры
 
  . Помещение кода 7 в буфер клавиатуры в 12:30:
 
    ? KEYTIME(7,"12:30:00")                     // .T.


 
  . Помещение кода 255 в 2:00 :
 
    ? KEYTIME(255, "2")                         // .T.
 
  . Помещение кода 7 в полночь:
 
    ? KEYTIME(7, "00:00:00")                    // .T.
 
  . Помещение кода 7 каждую секунду с 11:59 :
 
    ? KEYTIME(7, "11:59:99")                    // .T.
 
  . Помещение кода 7 каждый полный час:
 
    ? KEYTIME(7, "99:00:00")                    // .T.
 
  . Задание неверного времени:
 
    ? KEYTIME(7, "25:30:00")                    // .F.
 
  . Завершение процесса помещения кода клавиши:
 
    ? KEYTIME()                                 // .F.
 

See Also: KEYSEC()
LASTKLINE()
LASTKFUNC()
LASTKPROC()

 

 

 MILLISEC()
  Приостанавливает выполнение программы на заданное количество миллисекунд.
------------------------------------------------------------------------------
 
  Синтаксис
 
    MILLISEC(<nDelay>) --> cNull
 
  Параметры
 
    <nDelay> - числовой параметр, задающий в миллисекундах время задержки
    в диапазоне от 1 до 65535.
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция позволяет приостановить выполнение программы на заданный
    промежуток времени.
 
  Примеры
 
  . Приостановка на различное время:
 
    MILLISEC(1)                 // Задержка на 1 мс
    MILLISEC(100)               // Задержка на 0.1 с
    MILLISEC(1000)              // Задержка на 1 с
 

 

 NUL()
 Преобразует любое выражение в пустую строку.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NUL(<expValue>) --> cNull
 
  Параметры
 
    <expValue> - результат вычисления выражения любого типа данных.
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.


 
  Описание
 
    Функция подавляет возвращаемое значение для функций или выражений,
    подставляя вместо него пустую строку.
 
  Примечания
 
  . Возвращаемое функцией значение не является значением типа VOID
    языка Си, поэтому его нельзя сравнивать со значениями не символьного
    типа.
 
  Примеры
 
  . Ожидание нажатия клавиши:
 
    ? "Пожалуйста, нажмите клавишу:" + NUL(INKEY(0))
 
  . Вывод по команде LIST с ожиданием нажатия клавиши через
    каждые 20 строк:
 
    LIST Name, IIF(RECNO() % 20 = 0, NUL(INKEY(0)), "")
 
  . Некорректное использование:
 
    ? 3 = NUL(INKEY(5))         // Ошибка возникает через 5 с
    ? 7 + NUL(INKEY())          // Ошибка как для выражения 7 + ""
 

 

 SCANKEY()
 Возвращает полный скан-код нажатой клавиши.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SCANKEY([<lIgnore>]) --> nKeyValue
 
  . Внимание! По сравненению с аналогичной функцией в Clipper Tools One,
    здесь добавлен необязательный параметр.
 
  Параметры
 
    <lIgnore> - необязательный логический параметр, задающий при значении
    .T. игнорирование различий в кодировании дополнительных клавиш
    расширенной европейской клавиатуры, а при значении .F. или по
    умолчанию учет различий.
 
  Возвращаемое значение
 
    nKeyValue - числовое значение, соответствующее полному скан-коду
    нажатой клавиши.
 
  Описание
 
    Функция (как и функция INKEY(), вызванная с аргументом 0) ожидает
    нажатия клавиши на клавиатуре (или эмуляцию нажатия) и возвращает
    полный (нетранслированный) скан-код, что позволяет различать по кодам
    разные клавиши (или их комбинации), имеющие одинаковые INKEY()-коды.
    Для разделения полного скан-кода на ASCII-код и скан-код можно
    применять функции NUMLOW() и NUMHIGH() соответственно.


В зависимости
    от используемой клавиатуры скан-коды клавиш могут отличаться от
    приведенных в файле NT2SCAN.CH.
 
  Примечания
 
  . Полный скан-код формируется из ASCII-кода и скан-кода по
    следующей формуле:
 
    SCANKEY() = NUMLOW(SCANKEY()) + NUMHIGH(SCANKEY()) * 256
 
  . При выполнении описываемой функции, также как и при выполнении
    функции INKEY(), прерывания по нажатию клавиш, задаваемые
    Clipper-командой SET KEY..TO, не обрабатываются.
 
  Примеры
 
  . Значения, возвращаемые при нажатии комбинации клавиш <Ctrl><W>:
 
    ? INKEY()                           // 23
    ? SCANKEY()                         // 4375
    ? NUMLOW(SCANKEY())                 // 23
    ? NUMHIGH(SCANKEY())                // 17
 
  . Значения, возвращаемые при нажатии комбинации клавиш <Ctrl><End>:
 
    ? INKEY()                           // 23
    ? SCANKEY()                         // 29952
    ? NUMLOW(SCANKEY())                 // 0
    ? NUMHIGH(SCANKEY())                // 117
 
  . Использование скан-кодов для переопределения клавиш:
 
    nCode :=  SCANKEY()
    SETKXLAT(CHR(NUMLOW(nCode)) + CHR(NUMHIGH(nCode)), -1)
 

See Also: DSETKBIOS()
NUMHIGH()

 

 

 SETTIC()
 Управляет внутренним счетчиком сигналов и частотой таймера.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETTIC([<lAcceleration>]) --> lAccelerated
 
  Параметры
 
    <lAcceleration> - необязательный логический параметр, задающий при
    значении .T. повышение частоты таймера в 128 раз при одновременной
    инициализации внутреннего счетчика сигналов, а при значении .F. и по
    умолчанию восстановление нормальной частоты и остановку счетчика.
 
  Возвращаемое значение
 
    lAccelerated - логическое значение .T. при включении счетчика и
    увеличении частоты таймера, а иначе .F..


 
  Описание
 
    Функция позволяет увеличить частоту таймера с 18.2 до приблизительно
    2500 сигналов в секунду, что значительно увеличивает точность отсчета
    интервалов времени. При увеличени частоты производится установка
    значения специального внутреннего счетчика в 0 и запуск счета сигналов
    таймера.
 
    Остановка счета производится вызовом функции со значением .F.
    параметра <lAcceleration> или по умолчанию. Подсчитанное количество
    сигналов таймера можно получить вызовом функции GETTIC(), которая
    самостоятельно подсчета не останавливает.
 
    Увеличение частоты таймера не сказывается на ходе основанных на его
    работе встроенных "часов".
 
  Примечания
 
  . Внимание! Функция изменяет один из системных векторов прерываний.
    Поэтому перед окончанием выполнения программы для восстановления
    исходного значения вектора необходимо произвести вызов функции с
    опущенными параметрами. Восстановление векторов производится также
    утилитой INTSAVE, входящей в комплект поставки CT II, и при
    прикомпоновке CT II-драйвера CT2US50.OBJ.
 
  . Поскольку функции KEYSEC(), SHOWTIME() и SHOWKEY() используют
    сигналы таймера, то перед увеличением его частоты следует
    деинсталлировать названные функции путем их вызова без параметров.
 
  . Описываемая функция относится к функциям поддержки системы
    прерываний, поэтому при компоновке ее нельзя помещать в оверлеи. Это,
    однако, не препятствует ее вызову из оверлейных модулей.
 
  . Поскольку при каждом сигнале таймера происходит вызов обработчика
    прерываний, увеличение частоты таймера приводит к замедлению работы
    программы.
 
  Примеры
 
  . Увеличение частоты таймера для измерения времени выполнения
    функции пользователя:
 
    SETTIC(.T.)                 // Увеличение частоты таймера,
                                // сопровождающееся запуском счетчика.


    My_UDF(I)                   // Вызов функции пользователя
    SETTIC()                    // Восстановление нормальной частоты
                                // сопровождающееся остановкой счета
    ? "Потребовалось сигналов таймера:", GETTIC()
 

See Also: GETTIC()

 

 

 SHOWKEY()
  Отображает на экране состояния системных переключателей.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SHOWKEY([<cKey>, [[<nLine>], [<nColumn>], <cTextON>, <cTextOFF>,
        [<cAttrON|nAttrON>], [<cAttrOFF|nAttrOFF>]]]) --> cNull
 
  Параметры
 
    <cKey> - необязательный символьный параметр, задающий одним из
    символов "C", "N", "S" или "I" отображаемый системный индикатор CAPS
    LOCK, NUM LOCK, SCROLL LOCK или INSERT соответственно. Функция не
    различает строчные и прописные латинские буквы. Если задан лишь данный
    параметр, то отображение для заданного индикатора отменяется.
    По умолчанию контроль и отображение состояния системных индикаторов
    отменяются.
 
    <nLine> - необязательный числовой параметр, задающий номер строки
    для позиции отображения состояния системного индикатора.
 
    <nColumn> - необязательный числовой параметр, задающий номер столбца
    для позиции отображения состояния системного индикатора.
 
    <cTextOn> - необязательный символьный параметр, задающий текст с
    максимальной длиной 15 символов, отображаемый при активном состоянии
    системного индикатора.
 
    <cTextOFF> - необязательный символьный параметр, задающий текст с
    максимальной длиной 15 символов, отображаемый при пассивном состоянии
    системного индикатора. Длина текста, задаваемого этим параметром,
    должна совпадать с длиной текста, задааваемого параметром <cTextON>.
 
    <cAttrON|nAttrON> - необязательный параметр, задающий в символьной


    форме, принятой для Clipper-функции SETCOLOR(), или в виде
     комбинированного числового значения цветовой атрибут для отображения
    системного индикатора в активном состоянии. По умолчанию значение
    "7/0".
 
    <cAttrOFF|nAttrOff> - необязательный параметр, задающий в символьной
    форме, принятой для Clipper-функции SETCOLOR(), или в виде
    комбинированного числового значения цветовой атрибут для отображения
    системного индикатора в пассивном состоянии. По умолчанию атрибут,
    заданный параметром <cAttrOn|nAttrON>.
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция предоставляет универсальный механизм отображения состояния
    системных индикаторов NUM LOCK, SCROLL LOCK, CAPS LOCK и INSERT.
    Вызов функции с заданием отображаемого текста, его цветовых атрибутов
    и позиции на экране инсталлирует процесс контроля за состоянием
    заданного системного индикатора. Средства Clipper при этом не
    используются.
 
    Отображаемая информация о состоянии системных индикаторов обновляется
    примерно каждые 200 мс, поэтому при очистке экрана или его части нет
    необходимости сохранять и восстанавливать области экрана, используемые
    для отображения индикаторов.
 
  Примечания
 
  . Внимание! Функция изменяет один из системных векторов прерываний.
    Поэтому перед окончанием выполнения программы для восстановления
    исходного значения вектора необходимо произвести вызов функции с
    опущенными параметрами. Восстановление векторов производится также
    утилитой INTSAVE, входящей в комплект поставки CT II, и при
    прикомпоновке CT II-драйвера CT2US50.OBJ.
 
  . Внимание! Если длина текста, заданного параметром <cTextON>,
    отличается от длины текста, заданного параметром <cTextOFF>, то
    инсталляция процедур контроля за состоянием системных индикаторов не
    производится.
 


  . Поскольку обработка состояния системного индикатора INSERT ведется
    отдельно от обработки этого режима Clipper, а клавиша <Insert> имеет
    INKEY-код, то отображение этого индикатора имеет смысл лишь при
    выполнении таких команд и функций Clipper, как READ и MEMOEDIT().
 
  Примеры
 
  . Отображение состояния индикатора CAPS LOCK в строке 24 и столбце
    50:
 
    SHOWKEY("C", 24, 50, "CAPS", "    ")
 
  . Задание цветовых атрибутов как в числовом, так и в символьном
    виде:
 
    SHOWKEY("N", 24, 60, "NUM ON", "NUMOFF", 112, "W/R")
 
  . Инверсия отображения при изменении состояния индикатора:
 
    SHOWKEY("S", 24, 70, "SCRL", "SCRL", "0/7", "7/0")
 
  . Отмена контроля за состоянием индикатора NUM LOCK:
 
    SHOWKEY("N")
 
  . Отмена контроля за состоянием всех системных индикаторов:
 
    SHOWKEY()
 

See Also: SHOWTIME()

 

 

 SOUND()
 Генерирует звук заданной частоты и длительности.
------------------------------------------------------------------------------
 
  Синтаксис:
 
    SOUND(<nFrequency>, <nDuration>, [<lTimer>]) --> cNull
 
    или:
 
    SOUND(<cToneSequence>, [<lTimer>]) --> cNull
 
  Параметры
 
    <nFrequency> - числовой параметр, задающий частоту звука в герцах.
 
    <nDuration> - числовой параметр, задающий длительность звука в 1/100
    или 1/18.2 с в зависимости от значения параметра <lTimer>.
 
    <lTimer> - необязательный логический параметр, задающий при значении
    .T. длительность звука в единицах 1/18.2 с, а при значении .F. или по
    умолчанию в единицах 1/100 с.
 
    <cToneSequence> - символьная строка, содержащая кодировку мелодии.
    Каждый звук мелодии кодируется четырьмя байтами - первые два задают


    частоту (в герцах), а следующие два - длительность (в 1/100 или 1/18.2
    с в зависимости от значения параметра <lTimer>). Формат 2-байтовых
    числовых значений частоты и длительности соответствует возвращаемому
    Clipper-функцией I2BIN() значению.
 
  Возвращаемое значение
 
    cNull - всегда пустая строка.
 
  Описание
 
    Функция позволяет генерировать звуки с частотой в диапазоне от 0 до
    65535 Гц и длительностью до 655.36 с (при 1/100-секундном задании) или
    до 3600.88 (при 1/18.2-секундном задании, что предоставляет
    совместимость с Clipper-функцией TONE()).
 
    В таблице приведено соответствие звуков и частот для трех октав. Для
    получения звука на октаву выше следует удваивать значение частоты.
 
    Таблица 13-8. Звуки и соответствующие им частоты
    --------------------------------------------------------------------
    Обозначения звуков  Октава 3        Октава 4        Октава 5
    --------------------------------------------------------------------
    До          C       131             262             523
    До#         C#      139             277             554
    Ре          D       147             294             587
    Ре#         D#      156             311             622
    Ми          E       165             330             659
    Фа          F       175             349             698
    Фа#         F#      185             370             740
    Соль        G       196             392             784
    Соль#       G#      208             415             831
    Ля          A       220             440             880
    Ля#         A#      233             466             932
    Си          B       247             494             988
    --------------------------------------------------------------------
 
    Звуки с частотой ниже 21 Гц не воспринимаются человеческим ухом и
    могут использоваться для пауз.
 
  Примечания


 
  . Пример использования данной функции можно найти в файле
    Melodies.prg поставляемом в составе программных примеров CT II.
 
  Примеры
 
  . Воспроизведение гаммы четвертой октавы:
 
    SOUND(262, 40)
    SOUND(294, 40)
    SOUND(330, 40)
    SOUND(349, 40)
    SOUND(392, 40)
    SOUND(440, 40)
    SOUND(494, 40)
    SOUND(523, 40)
 
  . Вызов с параметром в форме символьной строки:
 
    cVar := I2BIN(262) + I2BIN(40) + I2BIN(294) + I2BIN(40)
    SOUND(cVar)
 
  . Пауза в полсекунды:
 
    SOUND(0, 50)
 

See Also: MILLISEC()

 

 

 SPEED()
 Возвращает относительное значение скорости процессора.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SPEED([<lMode>]) --> nCPUSpeed
 
  Параметры
 
    <lMode> - необязательный логический параметр, задающий при значении
    .T. маскирование всех прерываний, кроме прерываний таймера, на время
    измерения скорости процессора, а при значении .F. или по умолчанию
    измерение без маскирования.
 
  Возвращаемое значение
 
    nCPUSpeed - числовое значение скорости процессора в процентах, где
    100% соответствует скорости стандартного IBM PC/XT с тактовой частотой
    4.77 МГц.
 
  Описание
 
    Функция позволяет сравнить скорость работы используемого процессора со
    стандартным IBM PC/XT с тактовой частотой 4.77 МГц. Для увеличения
    точности измерений можно маскировать все прерывания, кроме прерываний
    таймера, без которых невозможно функционирование микросхем ОЗУ.
 
  Примечания
 
  . Внимание! При маскировании прерываний не могут работать
    использующие их функции, например, функции последовательного
    интерфейса. По окончании измерения маскирование прерываний снимается
    автоматически.
 
  Примеры
 
  . Измерение скорости для машин класса IBM PC/AT:
 
    ? SPEED(.T.)                // 470 (в 4.7 раза быстрее чем IBM PC/XT)


 
  . То же, но с маскированием прерываний:
 
    ? SPEED(.F.)                // 480 (в 4. 8 раза быстрее чем IBM PC/XT)
 

See Also: CPUTYPE()
PCTYPE()

 

 

 STACKFREE()
 Возвращает размер свободного пространства в стеке.
------------------------------------------------------------------------------
 
  Синтаксис
 
    STACKFREE() --> nFreeByte
 
  Возвращаемое значение
 
    nFreeByte - число свободных байтов в стеке.
 
  Описание
 
    Функция, позволяя анализировать размер стека, помогает избежать
    системных сбоев. Стек является системной областью памяти. При каждом
    вызове процедуры или функции выделяется некоторое количество байтов,
    освобождаемых после завершения процедуры.
 
    Если возвращаемое описываемой функцией значение меньше 100, это
    значит, что в программе слишком большая вложенность вызовов процедур и
    функций. В этом случае следует изменить программу, чтобы уменьшить
    вложенность, либо задать увеличение размера стека при компоновке.
 
  Примеры
 
  . Определение размера стека:
 
    IF STACKFREE() < 100
        ? "Перекомпонуйте программу, задав больший размер стека!"
        ? "Например: RTLINK FI Test /ST:8000"
        CLOSE ALL
        QUIT
    ENDIF
 

See Also: ALLOFREE()*

 

 

 TOOLVER()
 Возвращает номер используемой версии библиотеки функций CT II.
------------------------------------------------------------------------------
 
  Синтаксис
 
    TOOLVER(<lCheckDriver>) --> cVersion
 
  Параметры
 
    <lCheckDriver> - необязательный логический параметр, задающий при
    значении .T. дополнительную проверку соответствия версии CT II-драйвера
    и библиотеки, а при значении .F. или по умолчанию возврат версии
    библиотеки без дополнительной проверки.
 
  Возвращаемое значение
 
    cVersion - символьное значение, содержащее версию библиотеки в виде


    строки формата "n.nn" или "0.00", если версия CT II-драйвера не
    соответствует версии библиотеки или он не прикомпонован.
 
  Описание
 
    Функция позволяет определить текущую версию библиотеки функций, а
    также проверить, совпадает ли версия CT II-драйвера CT2US50.OBJ и
    библиотеки CT250.LIB, что необходимо для корректной работы CT II.
 
  Примеры
 
  . Проверка версии CT II:
 
    ? TOOLVER()                                 //  Например, "5.01"
 
  . Проверка версии CT II-драйвера:
 
    IF TOOLVER() <> TOOLVER(.T.)
        ? "Неверная версия драйвера или он не прикомпонован..."
    ENDIF
 

 

 XTOC()
 Преобразует данные любого типа к символьному типу.
------------------------------------------------------------------------------
 
  Синтаксис
 
    XTOC(<expValue>) --> cValue
 
  Параметры
 
    <expValue> - выражение любого допустимого в Clipper типа данных.
 
  Возвращаемое значение
 
    cValue - символьная строка, содержащая эквивалент значения результата
    вычисления заданного выражения. Зависимость длины возвращаемой строки
    от типа данных приведена в таблице:
 
    Таблица 13-9. Длина результата
    --------------------------------------------------------------------
    Тип данных  Длина результата
    --------------------------------------------------------------------
    Числовой    8
    Логический  1
    Date        8
    Символьный  Не изменяется
    --------------------------------------------------------------------
 
  Описание
 
    Функция позволяет преобразовать к символьному типу данные любого из
    перечисленных в таблице типов данных Clipper, что может быть полезно,
    например, для конкатенации значений всех полей записи и последующего
    сравнения или индексирования по полученной строке.
 
  Примечания
 


  . Необходимо помнить, что длина индексного ключа не может быть
    больше 256 символов.
 
  Примеры
 
  . Логические значения функция обрабатывает подобно LTOC():
 
    ? XTOC(.T.)                                 // "T"
    ? XTOC(.F.)                                 // "F"
 
  . При числовых значениях возвращается строка длиной 8 байтов:
 
    ? XTOC(0)                                   // Длина 8
    ? XTOC(9.9)                                 // То же
    ? XTOC(-9.9)                                // То же
    ? XTOC(99)                                  // То же
    ? XTOC(-99)                                 // То же
 
  . Символьные строки не изменяются:
 
    ? XTOC("123ABCabc")                         // "123ABCabc"
 
  . Дата преобразуется в ANSI-формат:
 
    ? XTOC(CTOD("12/31/99"))                    // "19991231"
    ? XTOC(CTOD("01/01/00")                     // "19000101"
 
  . При задании пустой или неверной даты возвращается строка из 8
    пробелов, а не пустая строка:
 
    ? XTOC(CTOD("  /  /  ")                     // "        "
    ? XTOD(CTOD("77/77/77")                     // "        "
 
  . Считывание всех полей записи и конкатенация их в одну строку,
    что позволяет сравнить две записи:
 
    FUNCTION STRINGREC
        PRIVATE nI, nFieldNo, cField, cStringRec
        cStringRec := ""
        nFieldNo    := FCOUNT()                 // Количество полей
        FOR nI = 1 to nFieldNo
            cField := FIELD(nI)                 // Имя поля
            cStringRec := cStringRec + XTOC(&cField)
        NEXT nI
        RETURN (cStringRec)
 

See Also: CTOF()

 

 

 Введение в функции поддержки сети
------------------------------------------------------------------------------
 NETCANCEL()   Отменяет переадресацию локального устройства


 NETDISK()     Возвращает признак принадлежности диска к сетевым устройствам
 NETLOCNAME()  Возвращает имя переадресуемого локального устройства
 NETPRINTER()  Возвращает признак переадресации печати на сетевое устройство
 NETREDIR()    Включает переадресацию на сетевое устройство
 NETRMTNAME()  Определяет имя устройства-сервера для локального устройства
 NETWORK()     Возвращает признак активности сети
 NNETCAPACT()  Возвращает признак переадресации печати на сетевой принтер
 NNETCAPBEG()  Включает переадресацию печати на сетевой принтер
 NNETCAPCAN()  Выключает переадресацию печати на сетевой принтер
 NNETCAPEND()  Выключает переадресацию печати на сетевой принтер
 NNETCAPFLU()  Оформляет текущее задание для распечатки сетевым принтером
 NNETCAPSSF()  Устанавливает параметры оформления заданий при переадресации
 NNETCOPRIV()  Возвращает признак наличия у пользователя прав оператора
 NNETCOPY()    Копирует файлы в пределах файл-сервера
 NNETDIRFRE()  Возвращает количество свободных элементов директорий на томе
 NNETDIRMAX()  Возвращает максимальное количество элементов директорий
 NNETERROR()   Возвращает код последней ошибки, возникшей в сети
 NNETINFO()    Возвращает информацию об используемой сетевой ОС
 NNETINUSE()   Возвращает количество активных соединений с текущим сервером
 NNETLOGGED()  Возвращает признак выполнения пользователем LOGIN-процедуры
 NNETOCNUMS()  Возвращает список станций, где пользователь выполнил LOGIN
 NNETPURGE()   Выполняет окончательную очистку файлов, удаленных с тома
 NNETRIGHTS()  Возвращает код прав доступа к заданной сетевой директории
 NNETSDATE()   Возвращает дату, установленную на текущем файл-сервере
 NNETSETQ()    Задает сетевую очередь печати для режима переадресации
 NNETSETSRV()  Назначает текущим заданный подключенный сервер
 NNETSFTLVL()  Возвращает код уровня используемых средств SFT
 NNETSLIST()   Возвращает список подключенных файл-серверов
 NNETSNAME()   Возвращает имя текущего файл-сервера


 NNETSPRVSR()  Возвращает признак наличия у пользователя прав супервизора
 NNETSPSTAT()  Возвращает код состояния принтера, подключенного к серверу
 NNETSTAID()   Возвращает идентификатор сетевого адаптера рабочей станции
 NNETSTANUM()  Возвращает текущий номер соединения рабочей станции с сервером
 NNETSTIME()   Возвращает время, установленное на текущем файл-сервере
 NNETUSERID()  Возвращает сетевой идентификатор пользователя
 NNETUSRFRE()  Возвращает размер доступного сетевого дискового пространства
 NNETVER()     Возвращает номер версии сетевой ОС
 NNETVOLFRE()  Возвращает размер свободного дискового пространства тома
 NNETVOLMAX()  Возвращает общий размер дискового пространства заданного тома
 NNETVOLNAM()  Возвращает имя сетевого тома
 NNETVOLNUM()  Возвращает максимальный номер сетевого тома файл-сервера
 NNETWHOAMI()  Возвращает LOGIN-имя пользователя
 NNETWORK()    Возвращает признак активности сетевой ОС Novell Netware
 

 

  Введение
 
------------------------------------------------------------------------------
 
    Данная глава содержит описание сетевых функций, разбитых на две
    группы. Первая группа предназначена для поддержки работы в среде
    сетевой операционной системы (ОС) PC-LAN фирмы IBM или MS-NET фирмы
    Microsoft, а вторая группа ориентирована на применение в среде сетевой
    операционной системы фирмы Novell.
 
    PC-LAN и MS-NET
 
    Сетевое программное обеспечение PC-LAN и MS-NET в течение длительного
    времени предлагалось для организации локальных сетей фирмами IBM и
    Microsoft. Обе операционные системы основаны на протоколе NETBIOS, с
    которым Clipper-программа непосредственных средств взаимодействия не
    имеет. Все обращения к сетевым средствам осуществляются через запросы
    к DOS, версия которой должна быть 3.1 или выше. Функции группы,
    обеспечивающие работу с этими сетевыми ОС, имеют названия вида
    NETxxxx().
 
    При этом функция NETDISK(), позволяющая определить принадлежность


    диска к локальным средствам (физическое подключение к данной рабочей
    станции) или к сетевым (физическое подключение к удаленной рабочей
    станции и логическая переадресация туда информационного потока сетевым
    программным обеспечением), поддерживает и сети других типов. Однако
    лишь в том случае, если сетевое программное обеспечение должным
    образом поддерживает функционирование DOS в фоновом режиме.
 
    Novell Netware 2.xx и 3.xx, а также ELS I и II
 
    Существует много сетей, обладающих более широкими, чем PC-LAN,
    возможностями. В настоящее время все важнейшие стандарты (несмотря на
    то, что формальные стандарты не установлены) представлены в сетевой
    операционной системе фирмы Novell. Большое распространение сетевых ОС
    фирмы Novell привело к необходимости введения группы функций,
    ориентированных на эти сетевые средства.
 
    Функции этой группы имеют названия вида NNETxxxx() и основаны
    исключительно на Novell API (Application Programmers Interface -
    интерфейс прикладного программирования). Этот программный интерфейс
    поддерживается загружаемой на рабочей станции сетевой оболочкой
    (Shell), реализованной в виде исполняемого файла ANET3.COM (версия
    сетевой оболочки 2.0) или NETx.COM (версия сетевой оболочки 3.0 и
    выше).  Определить, загружена ли сетевая оболочка на рабочей станции,
    можно при помощи функции NNETWORK().
 
    В последнее время фирма Novell предлагает сетевые операционные системы
    под названием Netware с указанием номера версии (напр., Netware 2.1).
    Кроме того, фирмой Novell предлагаются и более ранние версии под
    названием ELS I и ELS II, имеющие в настоящее время ограниченное
    количество пользователей. Можно допустить также, что многие все еще
    работают с версией Netware 2.0, которая соответствует версии ELS I, но
    допускает большее число пользователей. В описание каждой из функций
    включена информация о возможности ее применения с описанными типами и


    версиями сетевых операционных систем.
 
    В соответствии с утверждениями специалистов фирмы Novell, новейшая
    версия Netware 386 (3.xx) полностью совместима "снизу вверх" c
    предыдущими версиями. Проверки взаимодействия с Netware версий 2.20 и
    3.01, проводившиеся в январе 1991 и 1992 гг., не выявили каких-либо
    проблем. Однако специализированные средства, обеспечиваемые версией
    3.xx, в настоящее время не поддерживаются CT II.
 
    Внимание!
 
    Взаимодействие прикладных программ с сетевыми средствами на основе
    Novell API реализуется средствами сетевой оболочки, загруженной на
    рабочей станции. Поэтому функции, требующие для своей работы версию
    оболочки 2.1 (файл ANET3.COM), нельзя  применять с более поздними
    версиями сетевых операционных систем (т.е. Netware 2.1 и выше).
 
    Количество поддерживаемых сетевыми средствами Novell возможностей так
    широко, что в CT II пришлось ограничиться лишь одной областью,
    включающей группу информационных функций, ориентированных на текущий
    сервер, а также на управление очередями печати, поддерживаемыми
    последними версиями Novell Netware. Средства входа пользователей в
    сеть и выхода из нее (LOGIN и LOGOUT), а также присоединения к серверу
    (автоматически выполняемые сетевой оболочкой при ее загрузке) не
    поддерживаются CT II, поскольку могут повлечь за собой большие
    сложности.
 
    Для выполнения функций данной группы предполагается, что пользователь
    на рабочей станции перед загрузкой прикладной программы уже вошел в
    сеть и присоединен хотя бы к одному серверу (максимально к 8). В этом
    случае имя каждого из присоединенных серверов может быть получено
    программой и использовано для назначения текущего сервера. Назначение
    текущего сервера имеет большое значение, поскольку выполнение
    большинства функций NNETxxxx() связано с ним. Термин "текущий
    файл-сервер" используется в данной главе в том же значении, в котором


    в документации Novell и других сетевых пакетах прикладных программ
    используется термин "preferred file server" ("предпочтительный файл-
    сервер").
 
    Novell TTS (Transaction Tracking System - система трассировки
    транзакций) не поддерживается CT II, поскольку сетевое программное
    обеспечение Novell косвенным образом выполняет дополнительную
    физическую блокировку записей при включенной TTS. А это может привести
    к затруднениям в работе других рабочих станций, которые уже могли
    открыть ту же базу данных.
 

 

 NETCANCEL()
 Отменяет ранее установленную переадресацию локального устройства.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NETCANCEL(<cLocalDevice>) --> lReleased
 
  Область применения
 
    PC-LAN/MS-NET       :       Да
    Novell ELS          :       Нет
    Novell Netware      :       2.2 и выше (только для имен дисков)
 
  Параметры
 
    <cLocalDevice> - символьная строка, задающая имя диска в виде строчной
    или прописной латинской буквы в диапазоне от  "A" до "Z" с
    необязательным символом ":", или имя устройства в DOS (напр.,
    "LPTn:").
 
  Возвращаемое значение
 
    lReleased - логическое значение .T. при успешной отмене ранее
    установленной переадресации, а иначе .F..
 
  Описание
 
    Функция позволяет отменить ранее установленную переадресацию
    информационного потока, направлявшегося вместо локального на сетевое
    устройство.
 
  Примечания
 
  . Внимание! Если отмена переадресации произведена для устройства,
    имеющего не закрытые файлы, то из-за невозможности доступа к ним может
    произойти потеря данных.
 
  Примеры
 
  . Отмена переадресации для всех устройств печати (только для
    PC-LAN/MS-NET):
 
    nCounter := 0
    cLocalName := NETLOCNAME(nCounter)


    DO WHILE .NOT. EMPTY(cLocalName)
        IF cLocalName $ "LPT1:LPT2:LPT3:PRN:"   // Перечень печатающих
                                                // устройств
                NETCANCEL(cLocalName)           // Отмена переадресации
        ENDIF
        nCounter := nCounter +1
        cLocalName := NETLOCNAME(nCounter)
    ENDDO
 

See Also: NETLOCNAME()
NETREDIR()

 

 

 NETDISK()
 Возвращает признак принадлежности диска к сетевым устройствам.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NETDISK(<cDrive>) --> lServerDrive
 
  Область применения
 
    PC-LAN/MS-NET       :       Да
    Novell ELS          :       I и II
    Novell Netware      :       2.0 и выше
 
  Параметры
 
    <cDrive> - символьная строка, задающая имя диска в виде строчной или
    прописной латинской буквы в диапазоне от  "A" до "Z" с необязательным
    символом ":".
 
  Возвращаемое значение
 
    lServerDrive - - логическое значение .T. при принадлежности заданного
    диска к сетевым устройствам, а иначе .F..
 
  Описание
 
    Функция позволяет определить, является ли диск локальным или сетевым,
    т.е. физически расположенным на данной рабочей станции или на
    файл-сервере. В последнем случае все запросы к этому диску
    перехватываются сетевой оболочкой рабочей станции и переадресуются в
    сеть.
 
  Примечания
 
  . Поскольку возвращаемое описываемой функцией значение формируется
    на основе запроса к DOS, то правильная ее работа обеспечивается лишь с
    теми сетями, которые соответственным образом поддерживают DOS.
 
  Примеры
 
  . Отображение принадлежности дисков:
 
    FOR I = ASC("A") TO ASC ("Z")
        ? NETDISK(CHR(I))
    NEXT I
 

See Also: NETREDIR()

 

 

 NETLOCNAME()


 Возвращает имя переадресуемого локального устройства.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NETLOCNAME(<nDevice>) --> cDeviceName
 
  Область применения
 
    PC-LAN/MS-NET       :       Да
    Novell ELS          :       Нет
    Novell Netware      :       2.2 и выше
 
  Параметры
 
    <nDevice> - номер записи в таблице переадресации.
 
  Возвращаемое значение
 
    cDeviceName - символьная строка, содержащая имя переадресуемого
    устройства, или пустая строка, если в таблице переадресации локальных
    имен нет записи с заданным номером.
 
  Описание
 
    Функция позволяет определить имена локальных устройств, информационные
    потоки к которым переадресуются на удаленные устройства, подключенные
    к файл-серверам или отображаемые на сетевые тома.
 
  Примечания
 
  . В локальных сетях PC-LAN/MS-NET имена локальных устройств
    связываются с именами устройств, подключенных к серверам, командой
    NET USE <локальное имя> <удаленное имя>.
 
  . В сетевой ОС Novell Netware переадресация включается утилитой MAP
    и осуществляется сетевой оболочкой (NETx.COM).
 
  . Определить имя подключенного к серверу устройства, на которое
    производится переадресация, можно с помощью функции NETRMTNAME().
 
  Примеры
 
  . Распечатка таблицы переадресации:
 
    nCounter :=  0
    DO WHILE .NOT. (cLocalName := NETLOCALNAME(nCounter))
        ? cLocalName, NETRMTNAME(nCounter++)
    ENDDO
 

See Also: NETRMTNAME()

 

 

 NETPRINTER()
 Возвращает признак переадресации печати на сетевое устройство.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NETPRINTER() --> lServerPrinter
 
  Область применения
 
    PC-LAN/MS-NET       :       Да
    Novell ELS          :       Нет


    Novell Netware      :       Нет (см. NNETCAPACT())
 
  Возвращаемое значение
 
    lServerPrinter - логическое значение .T. при ранее включенной
    переадресации информационного потока на сетевое устройство, а иначе
    .F..
 
  Описание
 
    Функция позволяет определить, осуществляется ли печать на локальный
    принтер, заданный последней выполнявшейся в программе Clipper-командой
    SET PRINTER TO <LPTn>, или информационный поток печати переадресуется
    на сетевое устройство.
 
  Примечания
 
  . Функция не может использоваться для сетевых ОС фирмы Novell,
    поскольку переадресация в них осуществляется на более глубоком уровне
    (заменой процедуры обработки прерывания INT 17h). Вместо данной
    функции следует использовать NNETCAPACT().
 
  Примеры
 
  . Определение принадлежности назначенного принтера:
 
    SET PRINTER TO LPT1
    ? NETPRINTER()              // Например, .F. (локальный принтер)
    SET PRINTER TO LPT2
    ? NETPRINTER()              // Например, .T. (сетевой принтер)
 

See Also: NETREDIR()
NNETCAPACT()
NNETWORK()

 

 

 NETREDIR()
 Включает переадресацию на сетевое устройство.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NETREDIR(<cLocalDevice>, <cServerDevice>,
        [<cPassword>]) --> lRedirection
 
  Область применения
 
    PC-LAN/MS-NET       :       Да
    Novell ELS          :       Нет
    Novell Netware      :       2.2 и выше (только для имен дисков)
 
  Параметры
 
    <cLocalDevice> - символьная строка, задающая имя диска в виде строчной
    или прописной латинской буквы в диапазоне от  "A" до "Z" с
    необязательным символом ":", или имя устройства в DOS (напр.,
    "LPTn:").
 
    <cServerDevice> - символьная строка, задающая имя устройства или


    директории с указанием имени сервера в формате "\\<имя сервера>\<имя
    устройства или тома>[\<путь доступа>]".
 
    <cPassword> - необязательный символьный параметр, задающий пароль в
    случае запроса его сервером.
 
  Возвращаемое значение
 
    lRedirection - логическое значение .T. при успешном включении
    переадресации, а иначе .F..
 
  Описание
 
    Функция позволяет назначить сетевому устройству или директории имя
    локального диска, после чего весь информационный поток на устройство с
    назначенным локальным именем будет переадресовываться на сетевое
    устройство.
 
    PC-LAN / MS-NET
    В локальных сетях PC-LAN/MS-NET имена локальных устройств связываются
    с именами устройств, подключенных к серверам, командой NET USE
    <локальное имя> <удаленное имя>. Описываемая функция для этих сетей
    выполняет аналогичное действие, но позволяет сделать это из прикладной
    программы.
 
    Novell Netware
    В сетевой ОС Novell Netware переадресация включается утилитой MAP и
    осуществляется сетевой оболочкой (NETx.COM). Описываемая функция для
    этих сетей выполняет аналогичное действие, но позволяет сделать это из
    прикладной программы.
 
    Возможные причины неуспешного включения переадресации:
 
  . Заданное локальное имя недоступно (в файле системной конфигурации
    CONFIG.SYS должен быть установлен более высокий LASTDRIVE), либо оно
    уже используется для переадресации и занято (только для сетей
    PC-LAN/MS-NET).
 
  . Устройство или директория недоступны на заданном сервере, либо
    отсутствует сервер с указанным именем.
 
  . Указан неверный пароль.
 
  . Переадресация уже установлена для слишком большого количества
    устройств.
 
  Примечания
 
  . Включенные описываемой функцией переадресации не отображаются в
    списке, распечатываемом по команде NET USE для сетей PC-LAN/MS-NET, но


    отображаются в списке, распечатываемом утилитой MAP сети Novell.
 
  Примеры
 
  . Назначение переадресации для имени диска H:
 
    ? NETREDIR("H:", "\\SERVER\DRIVEC")                 // .T. при успешном
                                                        // назначении
 
  . Назначение переадресации для имени диска H при запросе
    пароля:
 
    ? NETREDIR("H:", "\\SERVER\DRIVEC", "SECRET")       // .T. при успешном
                                                        // назначении
 
  . Назначение переадресации для имени принтера LPT2:
 
    ? NETREDIR("LPT2:". "\\SERVER\PRINTER")             // .T. при успешном
                                                        // назначении
 

See Also: NETCANCEL()
NETLOCNAME()
NETRMTNAME()

 

 

 NETRMTNAME()
 Определяет имя устройства-сервера для локального устройства.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NETRMTNAME(<nDevice>) --> cServerDevice
 
  Область применения
 
    PC-LAN/MS-NET       :       Да
    Novell ELS          :       Нет
    Novell Netware      :       Нет
 
  Параметры
 
    <nDevice> - номер записи в таблице переадресации.
 
  Возвращаемое значение
 
    cServerDevice - символьная строка, содержащая имя устройства или
    директории с указанием имени сервера в формате
 
    \\<имя сервера>\<имя устройства или тома>[\<путь доступа>]
 
    или пустая строка, если в таблице переадресации нет такого элемента.
 
  Описание
 
    Функция позволяет определить имена устройств или директорий на
    серверах, на которые переадресуются информационные потоки,
    направляемые прикладной программой на рабочей станции к переадресуемым
    устройствам.
 
  Примечания
 


  . В локальных сетях PC-LAN/MS-NET имена локальных устройств
    связываются с именами устройств, подключенных к серверам, командой
    NET USE <локальное имя> <удаленное имя>.
 
  . В сетевой ОС Novell Netware переадресация включается утилитой MAP
    и осуществляется сетевой оболочкой (NETx.COM).
 
  . Определить имя локального устройства, для которого назначена
    переадресация, можно с помощью функции NETLOCNAME().
 
  Примеры
 
  . Распечатка таблицы переадресации:
 
    nCounter :=  0
    DO WHILE .NOT. (cLocalName := NETLOCALNAME(nCounter))
        ? cLocalName, NETRMTNAME(nCounter++)
    ENDDO
 

See Also: NETLOCNAME()

 

 

 NETWORK()
 Возвращает признак активности сети.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NETWORK() --> lActiveNet
 
  Область применения
 
    PC-LAN/MS-NET       :       Да
    Novell ELS          :       I и II
    Novell Netware      :       2.0 и выше
 
  Возвращаемое значение
 
    lActiveNet - логическое значение .T. при активной локальной сети и
    включенной в нее рабочей станции, а иначе .F..
 
  Описание
 
    Функция позволяет определить, доступна ли и активна какая-либо
    локальная сеть (PC-LAN/MS-NET или Novell). Определить, какая из двух
    типов сетей активна, можно с помощью функции NNETWORK().
 
  Примеры
 
  . Определение, доступна ли и активна локальная сеть:
 
    IF NETWORK()
        * ...
    ENDIF
 

See Also: NNETWORK()

 

 

 NNETCAPACT()
 Возвращает признак переадресации печати на сетевые принтер или очередь.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETCAPACT(<nPrinter>) --> lActive
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       I и II


    Novell Netware      :       2.0 и выше
 
  Параметры
 
    <nPrinter> - целое число в диапазоне от 1 до 3, задающее номер
    локального принтера (LPT1, LPT2 или LPT3 соответственно).
 
  Возвращаемое значение
 
    lActive - логическое значение .T. при активном режиме переадресации,
    а иначе .F..
 
  Описание
 
    Функция позволяет определить, активен ли режим переадресации на
    сетевой принтер или в сетевую очередь информационного потока,
    направляемого прикладными программами на заданный принтер. В сетевых
    ОС фирмы Novell этот режим обеспечивается утилитой CAPTURE, а в CT II
    включены функции NNETCAPxxx, позволяющие управлять переадресацией из
    прикладной программы.
 
  Примеры
 
  . Переадресация для LPT1:
 
    NNETCAPBEG(1)                       // Включение переадресации
    ? NNETCAPACT(1)                     // .T.
    NNETCAPEND(1)                       // Выключение переадресации
    ? NNETCAPACT(1)                     // .F.
 

See Also: NNETCAPBEG()
NNETCAPCAN()
NNETCAPEND()

 

 

 NNETCAPBEG()
 Включает переадресацию печати на сетевой принтер.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETCAPBEG(<nPrinter>) --> lActivated
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       II
    Novell Netware      :       2.1 и выше
 
  Параметры
 
    <nPrinter> - целое число в диапазоне от 1 до 3, задающее номер
    локального принтера (LPT1, LPT2 или LPT3 соответственно).
 
  Возвращаемое значение
 
    lActivated - логическое значение .T. при успешном включении
    переадресации, а иначе .F..
 
  Описание
 
    Функция позволяет включить из прикладной программы режим CAPTURE
    для заданного локального принтера. Для управления печатью в сетях
    Novell следует использовать другие функции семейства NNETCAPxxx().


 
    Перед выполнением описываемой функции следует с помощью функции
    NNETCAPSSF() установить такие параметры формата печати при
    переадресации, как автоматическая подача бумаги, титульный лист
    и т.п.
 
    Для более поздних версий Novell Netware при использовании функции
    NNETSETQ() можно выбирать нужную очередь печати на требуемом сервере,
    который предварительно выбирается вызовом функции NNETSETSRV().
 
  Примеры
 
  . Печать в режиме переадресации LPT2:
 
    SET PRINTER TO LPT2                 // Печать через LPT2
    ? NNETCAPBEG(2)                     // .T. при успешном включении
                                        // переадресации
    SET PRINT ON                        // Включение печати
        ? "Идет тест 234"
    SET PRINT OFF
    NNETCAPEND(2)                       // Отмена переадресации
 

See Also: NNETCAPACT()
NNETCAPEND()
NNETCAPFLU()
NNETSETQ()
NNETSETSRV()

 

 

 NNETCAPCAN()
 Выключает переадресацию печати на сетевой принтер с аннулированием задания.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETCAPCAN(<nPrinter>) --> lAbort
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       II
    Novell Netware      :       2.1 и выше
 
  Параметры
 
    <nPrinter> - целое число в диапазоне от 1 до 3, задающее номер
    локального принтера (LPT1, LPT2 или LPT3 соответственно).
 
  Возвращаемое значение
 
    lAbort - логическое значение .T. при успешном прерывании вывода на
    печать, перенаправляемого на сетевые принтер или очередь, а иначе .F..
 
  Описание
 
    Функция позволяет выключить режим переадресации печати на сетевой
    принтер с аннулированием текущего вывода на печать, еще не переданого
    на обслуживание сетевому принтеру или принт-серверу.
 
  Примечания


 
  . Если с помощью NNETCAPSSF() был задан тайм-аут передачи на
    обслуживание (опция /TIMEOUT=n сетевой утилиты CAPTURE), то текущий
    вывод на печать может оказаться в процессе обслуживания принт-сервером
    и поэтому не аннулируется.
 
  Примеры
 
  . Оформление задания на печать или отмена по нажатию клавиши <Esc>:
 
    SET PRINTER TO LPT3
    ? NNETCAPBEG(3)                             // .T. при успешном включении
                                                // переадресации
    SET DEVICE TO PRINT
        @10, 10 SAY "Идет тест 234"
    SET DEVICE TO SCREEN
    EJECT
    Key :=  INKEY(2)
    IF Key = 27                                 // <ESC> - отмена печати
        NNETCAPCAN(3)
    ELSE
        NNETCAPEND(3)                           // Оформление задания
    ENDIF
 

See Also: NNETCAPBEG()
NNETCAPEND()
NNETCAPSSF()

 

 

 NNETCAPEND()
 Выключает переадресацию печати на сетевой принтер с оформлением задания.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETCAPEND(<nPrinter>) --> lTerminate
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       II
    Novell Netware      :       2.1 и выше
 
  Параметры
 
    <nPrinter> - целое число в диапазоне от 1 до 3, задающее номер
    локального принтера (LPT1, LPT2 или LPT3 соответственно).
 
  Возвращаемое значение
 
    lTerminate - логическое значение .T. при успешном выключении
    переадресации печати на сетевой принтер, а иначе .F..
 
  Описание
 
    Функция позволяет выключить переадресацию печати на сетевой принтер.
    Это сопровождается закрытием оформлявшегося задания и передачей его на
    обслуживание сетевому принтеру или принт-серверу. Последующий вывод на
    печать будет направляться на локальный принтер.
 
  Примечания


 
  . Если вывод оформляемого задания на печать нежелателен, следует
    использовать функцию NNETCAPCAN().
 
  Примеры
 
  . Оформление задания на печать или отмена по нажатию клавиши <Esc>:
 
    SET PRINTER TO LPT3
    ? NNETCAPBEG(3)                             // .T. при успешном включении
                                                // переадресации
    SET DEVICE TO PRINT
        @10, 10 SAY "Идет тест 234"
    SET DEVICE TO SCREEN
    EJECT
    Key :=  INKEY(2)
    IF Key = 27                                 // <ESC> - отмена печати
        NNETCAPCAN(3)
    ELSE
        NNETCAPEND(3)                           // Оформление задания
    ENDIF
 

See Also: NNETCAPBEG()

 

 

 NNETCAPFLU()
 Оформляет текущее задание для распечатки сетевым принтером.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETCAPFLU(<nPrinter>) --> lTransfer
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       II
    Novell Netware      :       2.1 и выше
 
  Параметры
 
    <nPrinter> - целое число в диапазоне от 1 до 3, задающее номер
    локального принтера (LPT1, LPT2 или LPT3 соответственно).
 
  Возвращаемое значение
 
    lTransfer - логическое значение .T. при успешном оформлении задания и
    передаче его на обслуживание, а иначе .F..
 
  Описание
 
    Функция позволяет, не прерывая переадресации печати на сетевой
    принтер или в управляемую принт-сервером очередь, завершить оформление
    текущего задания и передать его на обслуживание. По сути это
    соответствует последовательному вызову функций NNETCAPEND() и
    NNETCAPBEG().
 
    Другими способами оформления задания являются:
 
  . указание при вызове функции NNETCAPSSF() тайм-аута передачи на
    обслуживание (соответствует опции /TIMEOUT=n сетевой утилиты CAPTURE);


 
  . завершение прикладной программы;
 
  . выключение переадресации.
 
  Примеры
 
  . Оформление задания без отмены переадресации:
 
    SET PRINTER TO LPT1
    ? NNETCAPBEG(1)             // .T., при успешной переадресации активен
    SET DEVICE TO PRINT
    ? "Идет тест 234"
    SET DEVICE TO SCREEN
    EJECT
    NNETCAPFLU(1)               // Оформление задания на печать
 

See Also: NNETCAPBEG()
NNETCAPCAN()
NNETCAPEND()

 

 

 NNETCAPSSF()
 Устанавливает параметры оформления заданий в режиме переадресации печати.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETCAPSSF(<nPrinter>, [<lPageFeed>, <lBanner>, <nServerPrinterNr>,
        <nTimeout>, <nTab>, <nCopies>, <nForm>]) --> lAmended
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       II
    Novell Netware      :       2.1 и выше
 
  Параметры
 
    <nPrinter> - целое число в диапазоне от 1 до 3, задающее номер
    локального принтера (LPT1, LPT2 или LPT3 соответственно).
 
    <lPageFeed> - необязательный логический параметр, задающий при
    значении .T. подавление прогона страницы по окончанию печати задания,
    а при значении .F. или по умолчанию прогон страницы.
 
    <lBanner> - необязательный логический параметр, задающий при значении
    .T. подавление печати титульного листа задания, а при значении .F. или
    по умолчанию печать титульного листа.
 
    <nServerPrinterNr> - необязательный числовой параметр, задающий в
    диапазоне от 0 до 4 номер поддерживаемого принт-сервером принтера.  По
    умолчанию 0.
 
    <nTimeout> - необязательный числовой параметр, задающий временной
    интервал в секундах, по прошествии которого не оформленное явным
    способом задание будет оформляться на печать.


По умолчанию и при
    значении 0 временной интервал не используется и оформление задания
    осуществляется только явным способом.
 
    <nTab> - необязательный числовой параметр, задающий шаг табуляции в
    диапазоне от 0 до 18, т.е. количество позиций печати между метками
    табуляции. При значении 0 или по умолчанию метки табуляции не
    используются.
 
    <nCopies> - необязательный числовой параметр, задающий в диапазоне от
    1 до 255 количество оформляемых принт-сервером заданий.  Допустимы
    значения от 1 до 255. По умолчанию 1.
 
    <nForm> - необязательный числовой параметр, задающий в диапазоне от 0
    до 255 номер используемой при оформлении задания печатной формы.  По
    умолчанию форма не используется.
 
  Возвращаемое значение
 
    lAmended - логическое значение .T. при успешной установке заданных
    параметров, а иначе .F..
 
  Описание
 
    Функция позволяет из прикладной программы установить параметры
    оформления заданий на печать, которые иначе задаются при запуске
    сетевой утилиты CAPTURE или предварительно установлены сетевой
    утилитой PRINTCON. Установка параметров оформления заданий печати
    должна быть успешно выполнена до включения (функцией NNETCAPBEG())
    переадресации печати на сетевой принтер или очередь, управляемую
    принт-сервером.
 
  Примечания
 
  . В исходном состоянии, до вызова описываемой функции, используются
    параметры оформления заданий печати, установленные в сети Novell (по
    умолчанию или при последнем выполнении утилиты CAPTURE).
 
  . Описание параметров оформления заданий печати можно найти в
    документации Novell в разделе описания утилиты CAPTURE.
 
  Примеры
 
  . Оформление заданий на печать, переадресуемых с LPT1 на принтер 1
    принт-сервера, с подавлением прогона страницы и без титульного листа:
 
    ? NNETCAPSSF(1, .T., .F., 1)        // .T. при успешной установке


 
  . Оформление заданий на печать, переадресуемых с LPT2 на принтер 0
    принт-сервера, без подавления прогона страницы, с титульным листом, с
    тайм-аутом оформления задания 5с, с шагом табуляции в 8 позиций и с
    печатью 2-х экземпляров:
 
    NNETCAPSSF(2, .F., .T., 0, 5, 8, 2)
 

See Also: NNETCAPBEG()

 

 

 NNETCOPRIV()
 Возвращает признак наличия у пользователя прав оператора консоли.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETCOPRIV() --> lRights
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       II
    Novell Netware      :       2.1 и выше
 
  Возвращаемое значение
 
    lRights - логическое значение .T. при наличии у пользователя прав
    оператора консоли, а иначе .F..
 
  Описание
 
    Функция позволяет определить, обладает ли пользователь, вошедший в
    сеть с данной рабочей станции, правами оператора консоли текущего
    файл-сервера. Наличие прав оператора консоли необходимо при выполнении
    некоторых функций CT II, например, NNETPURGE().
 
  Примечания
 
  . Права супервизора включают в себя права оператора консоли.
 
  Примеры
 
  . Проверка обладания правами оператора консоли:
 
    ? NNETCOPRIV()      // .T. при обладании правами оператора консоли
 

See Also: NNETPURGE()
NNETSETSRV()
NNETSPRVSR()
NNETUSRFRE()

 

 

 NNETCOPY()
 Копирует файлы в пределах файл-сервера.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETCOPY(<SourceFile>, <cTargetFile>, [<nBytes>]) --> nCopiedBytes
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       I и II
    Novell Netware      :       2.0 и выше
 
  Параметры
 
    <cSourceFile> - символьная строка, задающая имя исходного файла с


    необязательными именем диска и путем доступа. По умолчанию
    используется текущая директория на текущем диске. Диск, файл и
    директория обязательно должны находиться на текущем файл-сервере.
 
    <cTargetFile> - символьная строка, задающая имя выходного файла с
    необязательными именем диска и путем доступа. По умолчанию
    используется текущая директория на текущем диске. Диск и директория
    обязательно должны находиться на текущем файл-сервере.
 
    <nBytes> - необязательный числовой параметр, задающий количество
    копируемых байтов. По умолчанию копируется весь файл.
 
  Возвращаемое значение
 
    nCopiedBytes - число скопированных байтов при успешном копировании,
    или (-1) при невозможности копирования.
 
  Описание
 
    Функция позволяет из прикладной программы произвести такое же
    копирование в пределах одного файл-сервера (без пересылки по сети и
    поэтому с максимальной скоростью), как и выполняемое сетевой утилитой
    NCOPY.
 
  Примечания
 
  . Если размер копируемого файла известен (напр., в результате
    последовательности вызовов FILESEEK() и FILESIZE(), то целесообразно
    задавать эту величину в параметре <nBytes>. Это позволит избежать
    дополнительных трат сетевых ресурсов на повторное выявление длины.
 
  . Выходной файл может быть помещен только на тот же файл-сервер, где
    расположен исходный файл. С помощью данной функции нельзя производить
    копирование на не сетевые диски, а также с одного файл-сервера на
    другой. Для этих целей следует использовать другие средства, например,
    функцию FILECOPY().
 
  . Уточнение причины ошибки можно произвести с помощью функций
    ERRORCODE() и NNETERROR().
 
  Примеры
 
  . Копирование на сетевом диске J, отображаемом на том или директорию
    текущего файл-сервера:
 
    NNETCOPY("J:\SUPPORT\TEST.EXE", "J:\USER\TEST2.EXE")


 
  . Простая методика организации копирования файла:
 
    IF FILE(cFileName)
      IF NNETCOPY(cFileName, cTargetFile) = -1          // При неуспешном
        FILECOPY(cFileName, cTargetFile)                // копировании можно
      ENDIF                                             // использовать
      IF ERRORCODE(.T.) = 0                             // FILECOPY()
        ? "Файл успешно скопирован!"
      ENDIF
    ENDIF
 

See Also: ERRORCODE()
FILECOPY()
NNETERROR()

 

 

 NNETDIRFRE()
  Возвращает количество свободных элементов директорий на сетевом томе.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETDIRFRE([<nVolume>]) --> nFreeDirectoryEntries
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       II
    Novell Netware      :       2.1 и выше
 
  Параметры
 
    <nVolume> - необязательный числовой параметр, задающий в диапазоне от
    0 до 31 номер сетевого тома, установленного на текущем файл-сервере.
    По умолчанию 0.
 
  Возвращаемое значение
 
    nFreeDirectoryEntries - количество свободных элементов директорий на
    заданном томе, или 0 при отсутствии тома с заданным номером.
 
  Описание
 
    Функция позволяет определить количество свободных элементов
    директорий, в которых размещаются имена и атрибуты файлов при записи
    их на сетевые тома. При недостаточном количестве элементов директорий
    их число может быть увеличено только в процессе инсталляции сетевой
    ОС.
 
  Примечания
 
  . Для выполнения описываемой функции пользователь, выполнивший
    LOGIN-процедуру в текущем файл-сервере с данной рабочей станции,
    должен обладать правами оператора консоли.
 
  Примеры
 
  . Список имен томов, а также общего и свободного количества
    элементов директорий:
 
    FOR nI=0 TO NNETVOLNUM()


        ? NNETVOLNAM(nI), NNETDIRMAX(nI), NNETDIRFRE(nI)
    NEXT nI
 

See Also: NNETDIRMAX()
NNETVOLMAX()
NNETSETSRV()
NNETVOLFRE()

 

 

 NNETDIRMAX()
  Возвращает максимальное количество элементов директорий на сетевом томе.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETDIRMAX([<nVolume>]) --> nMaxDirectoryEntries
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       II
    Novell Netware      :       2.1 и выше
 
  Параметры
 
    <nVolume> - необязательный числовой параметр, задающий в диапазоне от
    0 до 31 номер сетевого тома, установленного на текущем файл-сервере.
    По умолчанию 0.
 
  Возвращаемое значение
 
    nMaxDirectoryEntries - максимальное количество элементов директорий на
    заданном томе, или 0 при отсутствии тома с заданным номером.
 
  Описание
 
    Функция позволяет определить максимальное количество элементов
    директорий, в которых размещаются имена и атрибуты файлов при записи
    их на сетевые тома. При недостаточном количестве элементов директорий
    их число может быть увеличено только в процессе инсталляции сетевой
    ОС.
 
  Примечания
 
  . Для выполнения описываемой функции пользователь, выполнивший
    LOGIN-процедуру в текущем файл-сервере с данной рабочей станции,
    должен обладать правами оператора консоли.
 
  Примеры
 
  . Список имен томов, а также общего и свободного количества
    элементов директорий:
 
    FOR nI=0 TO NNETVOLNUM()
        ? NNETVOLNAM(nI), NNETDIRMAX(nI), NNETDIRFRE(nI)
    NEXT nI
 

See Also: NNETDIRFRE()
NNETVOLFRE()
NNETVOLNAM()
NNETVOLNUM()

 

 

 NNETERROR()
 Возвращает код последней ошибки, возникшей при выполнении сетевой функции.
------------------------------------------------------------------------------
 


  Синтаксис
 
    NNETERROR() --> nErrorCode
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       I и II
    Novell Netware      :       2.0 и выше
 
  Возвращаемое значение
 
    nErrorCode - числовой код последней ошибки, возникшей при выполнении
    какой-либо сетевой функции.
 
  Описание
 
    Функция возвращает код последней ошибки, возникшей при выполнении
    сетевых функций группы NNETxxxx(). Причем, необязательно при
    выполнении именно последней функции, так как при успешном завершении
    код ошибки, возникшей ранее, не сбрасывается. Коды ошибок приведены в
    книге "Введение в Clipper Tools II/5.0 ": Приложение Г.
 
  Примеры
 
  . Код последней ошибки:
 
    ? NNETERROR()               // Например, 254
 

See Also: +-гК -Х¬¦-L АгБ¬ Novell
 

 

 NNETINFO()
 Возвращает информацию об используемой сетевой ОС.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETINFO() --> cInfo
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       II
    Novell Netware      :       2.1 и выше
 
  Возвращаемое значение
 
    cInfo - символьная строка длиной до 512 символов, содержащая
    информацию о сетевой ОС, инсталлированной на текущем файл-сервере.
 
  Описание
 
    Функция позволяет получить информацию о названии, версии и дате
    издания сетевой ОС. Кроме этого информация может содержать
    спецификации, относящиеся к фирме, продавшей используемое программное
    обеспечение. Это может представлять особый интерес при использовании
    комплексных систем.
 
  Примеры
 
  . Вывод информации:
 
    ? NNETINFO          // Строка длиной до 512 символов
 

See Also: NNETSETSRV()
NNETVER()

 

 

 NNETINUSE()
 Возвращает количество активных соединений с текущим файл-сервером.


------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETINUSE() --> nObjects
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       I и II
    Novell Netware      :       2.0 и выше
 
  Возвращаемое значение
 
    nObjects - число активных соединений, зарегистрированных на текущем
    файл-сервере.
 
  Описание
 
    Функция позволяет оценить количество объектов, имеющих активное
    соединение с текущим файл-сервером, что позволяет, например,
    организовать мониторинг использования сетевых ресурсов.
 
  Примечания
 
  . Возвращаемое значение, по крайней мере, на 1 больше количества
    пользователей, выполнивших LOGIN-процедуру на текущем файл-сервере и
    еще не завершивших сеанса. Для версий Netware 2.1 и выше возвращаемое
    функцией значение соответствует величине, отображаемой сетевой
    утилитой FCONSOLE в графе CONNECTIONS и колонке IN USE таблицы,
    вызываемой при выборе позиций меню STATISTIC и SUMMARY.
 
  Примеры
 
  . Количество активных соединений на текущем файл-сервере:
 
    ? NNETINUSE         // Например, 7
 

See Also: NNETSETSRV()

 

 

 NNETLOGGED()
 Возвращает признак выполнения пользователем LOGIN-процедуры.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETLOGGED() --> lLoggedIn
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       I и II
    Novell Netware      :       2.0 и выше
 
  Возвращаемое значение
 
    lLoggedIn - логическое значение .T. при выполненной ранее
    LOGIN-процедуре, а иначе .F..
 
  Описание
 
    Функция позволяет определить, выполнена ли на данной рабочей станции
    LOGIN-процедура, необходимая для обладания какими-либо правами в сети.
 
  Примеры


 
  . Проверка выполнения LOGIN-процедуры:
 
    ? NNETLOGGED()              // .T., если пользователь вошел в сеть
 

See Also: NNETSETSRV()

 

 

 NNETOCNUMS()
  Возвращает список станций, где пользователь выполнил LOGIN-процедуру.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETOCNUMS([<cUser>]) --> cStationList
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       II
    Novell Netware      :       2.1 и выше
 
  Параметры
 
    <cUser> - необязательный символьный параметр, задающий сетевое имя
    (LOGIN-имя) пользователя. Допускается использование как строчных, так
    и прописных букв. По умолчанию используется LOGIN-имя пользователя
    (возвращаемое функцией NNETWHOAMI()), который подключился к текущему
    файл-серверу с данной рабочей станции.
 
  Возвращаемое значение
 
    cStationList - символьная строка, каждый байт который является номером
    сетевой станции.
 
  Описание
 
    Функция позволяет выяснить количество и номера станций, на которых
    заданный пользователь выполнил LOGIN-процедуру в текущем файл-сервере.
 
    Возвращаемая функцией символьная строка может быть упорядочена и
    преобразована с помощью таких CT II-функций, как CHARSORT(), CHARREM()
    и т.п.
 
  Примечания
 
  . Для выполнения описываемой функции пользователь, выполнивший
    LOGIN-процедуру в текущем файл-сервере с данной рабочей станции,
    должен обладать правами оператора консоли.
 
  Примеры
 
  . Номера станций, с которых пользователь JIM вошел в сеть:
 
    cVar        := NNETOCNUMS("JIM")
    FOR nI=1 TO LEN(cVar)
        ? ASC(SUBSTR(cVar, nI, 1))              // Номера станций
    NEXT nI
 

See Also: NNETCOPRIV()
NNETSETSRV()
NNETSPRVSR()
NNETSTANUM()

 

 

 NNETPURGE()


  Выполняет окончательную очистку файлов, логически удаленных с тома.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETPURGE() --> lSuccessful
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       II
    Novell Netware      :       2.1 и выше
 
  Возвращаемое значение
 
    lSuccessful - логическое значение .T. при успешном выполнении очистки, а
    иначе .F..
 
  Описание
 
    Функция позволяет очистить тома, установленные на текущем файл-сервере
    от файлов, ранее удаленных, но сохраняемых на случай восстановления
    сетевой утилитой SALVAGE.
 
  Примечания
 
  . Для выполнения описываемой функции пользователь, выполнивший
    LOGIN-процедуру в текущем файл-сервере с данной рабочей станции,
    должен обладать правами оператора консоли.
 
  Примеры
 
  . Очистка всех удаленных, но восстановимых файлов:
 
    IF NNETCOPRIV()
        NNETPURGE()
    ENDIF
 

See Also: NNETCOPRIV()
NNETSETSRV()
NNETSPRVSR()

 

 

 NNETRIGHTS()
 Возвращает код прав доступа к заданной сетевой директории.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETRIGHTS(<cPath>) --> nBitMap
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       I и II
    Novell Netware      :       2.0 и выше
 
  Параметры
 
    <cPath> - символьная строка, задающая полный путь к директории.
 
  Возвращаемое значение
 
    nBitMap - число, содержащее комбинацию битов, обозначающих обладание
    правами, интерпретируемыми в зависимости от версии сетевой ОС в
    соответствии со следующими таблицами:
 
    Таблица 14-1а. Коды прав доступа для версий ниже Netware 2.2
    --------------------------------------------------------------------


    Бит  Наименование   Право в директории
    --------------------------------------------------------------------
    1    READ           Читать из файлов
    2    WRITE          Записывать в файлы
    3    OPEN           Открывать файлы
    4    CREATE         Создавать новые файлы
    5    DELETE         Удалять файлы
    6    PARENTAL       Создавать поддиректории
    7    SEARCH         Искать файлы в директориях
    8    MODIFY         Изменять имена или атрибуты файлов
    --------------------------------------------------------------------
 
    Начиная с версии 3. 0 Netware 386, числовой диапазон для кодов прав
    доступа был расширен до 9 битов. Дополнительно были изменены значения
    отдельных битов в соответствии со следующей таблицей:
 
    Таблица 14-1б. Коды прав доступа для версий Netware 2.2 и выше
    --------------------------------------------------------------------
    Бит  Наименование   Права в директории
    --------------------------------------------------------------------
    1    READ           Читать из файлов
    2    WRITE          Записывать в файлы
    3                   Зарезервировано
    4    CREATE         Создавать новые файлы
    5    ERASE          Удалять файлы
    6    ACCESS CONTROL Изменять права доступа
    7    FILE SCAN      Искать файлы в директориях
    8    MODIFY         Изменять имена или атрибуты файлов
    9    SUPERVISORY    Все права, включая присвоение прав другим
                        пользователям
    --------------------------------------------------------------------
 
    При некорректном задании директории функция возвращает 0, что означает
    отсутствие каких-либо прав.
 
  Описание
 
    Функция позволяет определить права доступа в директории на сетевом
    томе для пользователя, выполнившего LOGIN-процедуру на данной рабочей
    станции. Директория должна быть задана с указанием имени диска и
    полного пути доступа. Построение полного пути доступа можно выполнить


    с помощью таких функций, как DIRNAME(), DISKNAME() и TRUENAME().
 
    Активна ли сеть Novell и является ли диск сетевым устройством, можно
    определить при помощи функций NNETWORK() и NETDISK() соответственно.
 
  Примечания
 
  . Для локального диска данная функция возвращает значение 511, что
    означает обладание всеми правами доступа.
 
  Примеры
 
  . Права доступа к директории "Clipper" на диске J:
 
    ? NNETRIGHTS("J:\CLIPPER")
 
  . Проверка обладания определенным правом:
 
    ? ISBIT(NNETRIGHTS("J:\CLIPPER"), 6)        // .T. при праве создавать
                                                // директории
 
  . Права доступа к текущей директории:
 
    ? NNETRIGHTS(DISKNAME() + ":" + DIRNAME())
 
  . Обозначение прав доступа в соответствии с версией сетевой ОС:
 
    cDrive      := "J:"
    IF NNETVER(cDrive) < "2.20"
        ? BITTOC(NNETRIGHTS(cDrive+"\CLIPPER"), "MSPDCOWR", .T.)
    ELSE
        ? BITTOC(NNETRIGHTS(cDrive+"\CLIPPER"), "SMFAEC WR", .T.)
    ENDIF
 

See Also: BITTOC()
DIRNAME()
DISKNAME()
ISBIT()
NETDISK()
NNETWORK()

 

 

 NNETSDATE()
 Возвращает дату, установленную на текущем файл-сервере.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETSDATE() --> dServerDate
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       I и II
    Novell Netware      :       2.0 и выше
 
  Возвращаемое значение
 
    dServerDate - дата, установленная на текущем файл-сервере в формате,
    заданном Clipper-командами SET DATE и SET CENTURY.
 
  Описание
 
    Функция возвращает дату, установленную на текущем файл-сервере, что
    позволяет всем прикладным программам в сети синхронизировать свои


    даты.
 
  Примеры
 
  . Дата на текущем файл-сервере:
 
    ? NNETSDATE()
 
  . Запись даты в CMOS-память компьютеров класса IBM PC/AT и выше:
 
    SETDATE(NNETSDATE(), ISAT())
 

See Also: NNETSETSRV()
NNETSTIME()
SETDATE()

 

 

 NNETSETQ()
  Задает сетевую очередь печати для режима переадресации принтера.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETSETQ(<nPrinter>, <cPrintQueue>) --> lLoggedIn
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       II
    Novell Netware      :       2.0 и выше
 
  Параметры
 
    <nPrinter> - целое число в диапазоне от 1 до 3, задающее номер
    локального принтера (LPT1, LPT2 или LPT3 соответственно).
 
    <cPrintQueue> - символьная строка, задающая имя очереди печати, в
    которую должны помещаться оформляемые задания при переадресации вывода
    на заданный принтер.
 
  Возвращаемое значение
 
    lLoggedIn - логическое значение .T. при наличии заданной очереди и
    успешном связывании с ней информационного потока, направляемого
    прикладной программой на заданный принтер, а иначе .F..
 
  Описание
 
    Функция позволяет указать, в какую из очередей печати следует
    переадресовать информационный поток, направляемый прикладной
    программой на принтер, заданный параметром <nPrinter>. Если очередь
    обслуживается принт-сервером не на текущем файл-сервере, то текущий
    файл-сервер можно установить вызовом функции NNETSETSRV().
 
    Все требуемые для печати установки могут быть выполнены вызовом
    функции NNETCAPSSF(), а непосредственные включение переадресации и ее
    выключение осуществляются вызовом функций NNETCAPBEG() и NNETCAPEND()
    соответственно.
 
  Примечания
 
  . Пользователь, вошедший в сеть с данной рабочей станции, должен


    числиться в списке пользователей, обслуживаемых заданной очередью.
 
  Примеры
 
  . Печать в режиме переадресации LPT2 на очередь "USER":
 
    SET PRINTER TO LPT2                 // Печать через LPT2
    ? NNETSETQ(2,"USER")                // .T. при успешном нахождении
                                        //  и связывании с очередью
    ? NNETCAPBEG(2)                     // .T. при успешном включении
                                        // переадресации
    SET PRINT ON                        // Включение печати
        ? "Идет тест 234"
    SET PRINT OFF
    NNETCAPEND(2)                       // Выключение переадресации
 

See Also: NNETCAPSSF()
NNETSETSRV()

 

 

 NNETSETSRV()
 Назначает текущим заданный подключенный сервер.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETSETSRV(<cServerName>) --> lLoggedIn
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       II
    Novell Netware      :       2.1 и выше
 
  Параметры
 
    <cServerName> - символьная строка, задающая имя файл-сервера, который
    будет использоваться NNETxxxx() функциями в качестве текущего.
 
  Возвращаемое значение
 
    lLoggedIn - логическое значение .T. при назначении текущим заданного
    сервера, а иначе .F..
 
  Описание
 
    Функция позволяет назначить текущим один из серверов, к которым
    подключен пользователь, вошедший в сеть с данной рабочей станции.
    После этого функции группы NNETxxxx() (за исключением NNETSLIST(),
    возвращающей список подключенных серверов, и NNETSTAID(), возвращающей
    список идентификаторов станций) будут работать с файл-сервером,
    назначенным текущим.
 
  Примеры
 
  . Переключение с сервера CLIPPER1 на сервер CLIPPER2:
 
    ? NNETSNAME()                       // "CLIPPER1"


    ? NNETSETSRV("CLIPPER2")            // .T.при успешном назначении
 

See Also: NNETSNAME()

 

 

 NNETSFTLVL()
  Возвращает код уровня используемых средств SFT.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETSFTLVL() --> nSFTLevel
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       I
    Novell Netware      :       2.0 и выше
 
  Возвращаемое значение
 
    nSFTLevel - числовой код уровня используемых средств SFT.
 
  Описание
 
    Функция позволяет определить, оснащена ли используемая сетевая ОС
    средствами повышения отказоустойчивости - SFT, и их уровень.
 
  Примечания
 
  . SFT (System Fault Tolerance) - средства повышения
    отказоустойчивости системы (напр., дуплексирование сетевых дисков).
 
  Примеры
 
  . Определение уровня SFT:
 
    ? NNETSFTLVL()                              // Например, 1
 

See Also: NNETSETSRV()
NNETVER()

 

 

 NNETSLIST()
 Возвращает список подключенных файл-серверов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETSLIST() --> cServerList
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       II
    Novell Netware      :       2.1 и выше
 
  Возвращаемое значение
 
    cServerList - символьная строка, содержащая имена доступных
    файл-серверов, разделенные парами символов "возврат каретки"
    (CR) и "перевод строки" (LF).
 
  Описание
 
    Функция позволяет определить имена всех серверов, к которым подключена
    рабочая станция. Каждый из этих файл-серверов может быть назначен
    текущим при помощи функции NNETSETSRV().
 
  Примеры
 
  . Имена подключенных файл-серверов:
 
    cSList := NNETSLIST()


    TOKENINIT(@cSList, CHR(10) + CHR(13))
    DO WHILE .NOT. TOKENEND()
        cServer:= TOKENNEXT(cSList)
        ? cServer
    ENDDO
 

See Also: NNETSETSRV()
TOKENINIT()
TOKENNEXT()

 

 

 NNETSNAME()
 Возвращает имя текущего файл-сервера.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETSNAME() --> cServerName
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       II
    Novell Netware      :       2.1 и выше
 
  Возвращаемое значение
 
    cServerName - символьная строка длиной до 48 символов, содержащая
    имя текущего файл-сервера.
 
  Описание
 
    Функция позволяет определить имя текущего файл-сервера. Смена текущего
    сервера может быть произведена с помощью функции NNETSETSRV().
 
  Примеры
 
  . Имя текущего файл-сервера:
 
    ? NNETSNAME()               // Например, "CLIPPER"
 

See Also: NNETSETSRV()

 

 

 NNETSPRVSR()
 Возвращает признак наличия у пользователя прав супервизора.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETSPRVSR() --> lRights
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       I и II
    Novell Netware      :       2.0 и выше
 
  Возвращаемое значение
 
    lRights - логическое значение .T. при наличии у пользователя прав
    супервизора, а иначе .F..
 
  Описание
 
    Функция позволяет определить, обладает ли пользователь, вошедший в
    сеть с данной рабочей станции, правами супервизора текущего
    файл-сервера. Права супервизора являются правами высшего уровня в сети
    и позволяют супервизору или кому-либо с приравненными правами иметь
    доступ ко всем директориям.
 
  Примечания
 
  . Права супервизора включают права оператора консоли, существующие в


    Netware 2.1/ELS II и выше.
 
  Примеры
 
  . Проверка наличия прав супервизора:
 
    ? NNETSPRVSR()              // .T. при наличии
 

See Also: NNETCOPRIV()
NNETSETSRV()

 

 

 NNETSPSTAT()
  Возвращает код состояния принтера, подключенного к текущему файл-серверу.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETSPSTAT(<nServerPrinter>) --> nPrinterStatus
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       II
    Novell Netware      :       2.1 и выше
 
  Параметры
 
    <nServerPrinter> - целое число в диапазоне от 0 до 4, задающее один из
    пяти возможных принтеров, которые могут быть подключены к
    файл-серверу.
 
  Возвращаемое значение
 
    nPrinterStatus - числовой код состояния с приведенными в таблице
    значениями:
 
    Таблица 14-2. Коды состояния принтера, подключенного к серверу
    --------------------------------------------------------------------
    Код Состояние
    --------------------------------------------------------------------
    0   Принтер готов
    1   Принтер выключен
    2   Работа с принтером приостановлена с консоли сервера
    3   Принтер выключен и работа с ним приостановлена с консоли сервера
    -1  Заданный принтер не подключен к текущему серверу
    --------------------------------------------------------------------
 
  Описание
 
    Функция позволяет определить состояние заданного принтера,
    непосредственно подключенного к текущему файл-серверу. Если
    возвращаемое значение больше или равно 2, то работа с указанным
    принтером была приостановлена командой с консоли сервера.
 
  Примеры
 
  . Состояния принтеров сервера:
 
    ? NNETSPSTAT(0)             // Например, 0  (принтер готов)
    ? NNETSPSTAT(4)             // Например, -1 (принтер не подключен)


 

See Also: NNETSETSRV()
NNETWORK()

 

 

 NNETSTAID()
  Возвращает идентификатор сетевого адаптера рабочей станции.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETSTAID() --> cStationID
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       I и II
    Novell Netware      :       2.0 и выше
 
  Возвращаемое значение
 
    cStationID - символьная строка длиной 12 байтов.
 
  Описание
 
    Функция возвращает идентификатор сетевого адаптера, установленного в
    рабочей станции. Стандартные сетевые адаптеры Ethernet имеют "зашитый"
    уникальный идентификатор длиной 12 байтов.
 
    Для сетевых адаптеров других типов (а часто и в аналогах Ethernet)
    идентификатор устанавливается положением DIP-переключателей. В этом
    случае уникальность установок идентификаторов рабочих станций должна
    быть обеспечена администратором сети.
 
  Примечания
 
  . Идентификаторы длиной менее 12 символов дополняются слева
    символами "0".
 
  Примеры
 
  . Идентификатор рабочей станции:
 
    ? NNETSTAID()                       // Например, "000F71100123"
 

See Also: NNETSTANUM()
NNETUSERID()

 

 

 NNETSTANUM()
 Возвращает текущий номер соединения рабочей станции с сервером.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETSTANUM() --> nStation
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       I и II
    Novell Netware      :       2.0 и выше
 
  Возвращаемое значение
 
    nStation - номер, под которым числится соединение с данной рабочей
    станцией на текущем файл-сервере.
 
  Описание
 
    Функция возвращает число в диапазоне от 1 до величины, определяемой


    максимальным количеством одновременно работающих пользователей,
    которое определяется версией сетевой ОС. Это номер, под которым на
    файл-сервере числится логическое соединение с пользователем,
    выполнивший LOGIN-процедуру с данной рабочей станции.
 
    Для использования этого номера в именах файлов его с помощью вызова
    функции NTOC() можно дополнить нулями справа.
 
  Примеры
 
  . Вывод номера станции в виде строки фиксированной длины:
 
    ? NTOC(NNETSTANUM(), 10, 2, "0")    // Например, 09
 

See Also: NNETSETSRV()
NNETUSERID()
NTOC()

 

 

 NNETSTIME()
 Возвращает время, установленное на текущем файл-сервере.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETSTIME() --> cServerTime
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       I и II
    Novell Netware      :       2.0 и выше
 
  Возвращаемое значение
 
    cServerTime - время, установленное на текущем файл-сервере в формате
    значения, возвращаемого Clipper-функцией TIME().
 
  Описание
 
    Функция возвращает время, установленное на текущем файл-сервере,
    что позволяет всем прикладным программам в сети синхронизировать
    время.
 
  Примеры
 
  . Время на текущем файл-сервере:
 
    ? NNETSTIME()
 
  . Запись времени в CMOS-память компьютеров класса IBM PC/AT и
    выше:
 
    SETTIME(NNETSTIME(), ISAT())
 

See Also: NNETSDATE()
NNETSETSRV()
SETTIME()

 

 

 NNETUSERID()
 Возвращает сетевой идентификатор пользователя.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETUSERID([<cUser>]) --> cUserID
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       II
    Novell Netware      :       2.1 и выше


 
  Параметры
 
    <cUser> - необязательный символьный параметр, задающий сетевое имя
    (LOGIN-имя) пользователя. Допускается использование как строчных, так
    и прописных букв. По умолчанию используется LOGIN-имя пользователя
    (возвращаемое функцией NNETWHOAMI()), который подключился к текущему
    файл-серверу с данной рабочей станции.
 
  Возвращаемое значение
 
    cUserID - символьная строка из 8 шестнадцатеричных цифр, составляющих
    идентификатор пользователя в текущем файл-сервере.
 
  Описание
 
    Функция позволяет определить уникальный идентификатор, автоматически
    присваиваемый пользователю при его первичной регистрации на файл-
    сервере администратором сети.
 
  Примеры
 
  . Идентификатор пользователя:
 
    ? NNETUSERID("JIM")         // Например, "0A002300"
 

See Also: NNETSETSRV()
NNETSTAID()
NNETSTANUM()

 

 

 NNETUSRFRE()
 Возвращает размер доступного пользователю сетевого дискового пространства.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETUSRFRE([<cUser>]) --> nByte
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       II
    Novell Netware      :       2.1 и выше
 
  Параметры
 
    <cUser> - необязательный символьный параметр, задающий сетевое имя
    (LOGIN-имя) пользователя. Допускается использование как строчных, так
    и прописных букв. По умолчанию используется LOGIN-имя пользователя
    (возвращаемое функцией NNETWHOAMI()), который подключился к текущему
    файл-серверу с данной рабочей станции.
 
  Возвращаемое значение
 
    nByte - число байтов сетевого дискового пространства, которое
    пользователь еще может занимать на текущем файл-сервере.
 
  Описание
 
    Функция позволяет определить количество дискового пространства,


    доступного для занятия заданным пользователем. Эта величина, начиная с
    версии Novell Netware 2.1, может быть ограничена супервизоромю
 
  Примечания
 
  . Для получения информации о доступном дисковом пространстве для
    других пользователей требуются права оператора консоли. Однако
    собственное доступное свободное пространство для пользователя может
    быть определено без дополнительных прав.
 
  . Возвращаемое функцией значение определяет только установленные
    ограничения и не соотносится с действительно имеющимся свободным
    дисковым пространством, определить которое можно вызовом функции
    NNETVOLFRE().
 
  Примеры
 
  . Определение собственного доступного пространства:
 
    ? NNETUSRFRE()
 
  . Определение доступного пространства для другого пользователя
    (что требует обладания правами оператора консоли):
 
    IF NNETCOPRIV()
        ? NNETUSRFRE("Jim")             // Например, 2000 Кбайтов
    ENDIF
 

See Also: NNETCOPRIV()
NNETSETSRV()
NNETSPRVSR()
NNETVOLFRE()

 

 

 NNETVER()
 Возвращает номер версии сетевой ОС.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETVER([<cDrive>]) --> cVersion
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       I и II
    Novell Netware      :       2.0 и выше
 
  Параметры
 
    <cDrive> - необязательный символьный параметр, задающий имя диска,
    отображаемого сетевой оболочкой на один из подключенных файл-серверов.
    По умолчанию используется текущий файл-сервер.
 
  Возвращаемое значение
 
    cVersion - символьная строка формата "n.nn", содержащая номер версии
    сетевой ОС, инсталлированной на заданном файл-сервере.
 
  Описание
 
    Функция позволяет определить номер версии сетевой ОС, инсталлированной


    на текущем или на подключенном файл-сервере.  Отличный от текущего
    файл-сервер задается именем диска, отображаемого на его сетевой том.
 
  Примеры
 
  . Определение версий сетевых ОС для различных файл-серверов:
 
    ? NNETVER()         // Например, 2.15
    ? NNETVER("T:")     // Например, 3.01
 

See Also: NNETSETSRV()
NNETSFTLVL()

 

 

 NNETVOLFRE()
 Возвращает размер свободного дискового пространства заданного тома.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETVOLFRE([<nVolume>]) --> nBytes
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       II
    Novell Netware      :       2.1 и выше
 
  Параметры
 
    <nVolume> - необязательный числовой параметр, задающий в диапазоне от
    0 до 31 номер сетевого тома, установленного на текущем файл-сервере.
    По умолчанию 0.
 
  Возвращаемое значение
 
    nBytes - количество байтов, составляющих размер свободного дискового
    пространства на заданном сетевом томе текущего файл-сервера, или 0,
    если том отсутствует или не смонтирован.
 
  Описание
 
    Функция позволяет определить размер свободного дискового пространства
    заданного сетевого тома текущего файл-сервера и, таким образом,
    спланировать распределение больших файлов между локальными и сетевыми
    устройствами.
 
  Примечания
 
  . Для выполнения описываемой функции пользователь, выполнивший
    LOGIN-процедуру в текущем файл-сервере с данной рабочей станции,
    должен обладать правами оператора консоли.
 
  Примеры
 
  . Вывод информации об именах, общем и свободном дисковом
    пространстве сетевых томов:
 
    ? "Имя тома   Общий размер   Доступный размер"
    FOR nI=0 TO NNETVOLNUM()
        ? NNETVOLNAM(nI), NNETVOLMAX(nI), NNETVOLFRE(nI)
    NEXT nI


 

See Also: NNETDIRFRE()
NNETDIRMAX()
NNETSETSRV()
NNETVOLMAX()
NNETVOLNUM()

 

 

 NNETVOLMAX()
  Возвращает общий размер дискового пространства заданного сетевого тома.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETVOLMAX([<nVolume>]) --> nBytes
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       II
    Novell Netware      :       2.1 и выше
 
  Параметры
 
    <nVolume> - необязательный числовой параметр, задающий в диапазоне от
    0 до 31 номер сетевого тома, установленного на текущем файл-сервере.
    По умолчанию 0.
 
  Возвращаемое значение
 
    nBytes - количество байтов, составляющих общий размер дискового
    пространства на заданном сетевом томе текущего файл-сервера, или 0,
    если том отсутствует или не смонтирован.
 
  Описание
 
    Функция позволяет определить общий размер дискового пространства
    заданного сетевого тома текущего файл-сервера и, таким образом,
    спланировать распределение больших файлов между локальными и сетевыми
    устройствами.
 
  Примечания
 
  . Для выполнения описываемой функции пользователь, выполнивший
    LOGIN-процедуру в текущем файл-сервере с данной рабочей станции,
    должен обладать правами оператора консоли.
 
  Примеры
 
  . Вывод информации об именах, общем и свободном дисковом
    пространстве сетевых томов:
 
    ? "Имя тома   Общий размер   Доступный размер"
    FOR nI=0 TO NNETVOLNUM()
        ? NNETVOLNAM(nI), NNETVOLMAX(nI), NNETVOLFRE(nI)
    NEXT nI
 

See Also: NNETDIRFRE()
NNETDIRMAX()
NNETSETSRV()
NNETVOLFRE()
NNETVOLNUM()

 

 

 NNETVOLNAM()
 Возвращает имя сетевого тома.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETVOLNAM(<nVolume>) --> cVolumeName


 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       II
    Novell Netware      :       2.1 и выше
 
  Параметры
 
    <nVolume> - необязательный числовой параметр, задающий в диапазоне от
    0 до 31 номер сетевого тома, установленного на текущем файл-сервере.
    По умолчанию 0.
 
  Возвращаемое значение
 
    cVolumeName - символьная строка, содержащая имя заданного сетевого
    тома текущего файл-сервера, или пустая строка, если том отсутствует
    или не смонтирован.
 
  Описание
 
    Функция позволяет определить имя сетевого тома, установленного на
    текущем файл-сервере.
 
  Примечания
 
  . Для выполнения описываемой функции пользователь, выполнивший
    LOGIN-процедуру в текущем файл-сервере с данной рабочей станции,
    должен обладать правами оператора консоли.
 
  Примеры
 
  . Вывод информации об именах, общем и свободном дисковом
    пространстве сетевых томов:
 
    ? "Имя тома   Общий размер   Доступный размер"
    FOR nI=0 TO NNETVOLNUM()
        ? NNETVOLNAM(nI), NNETVOLMAX(nI), NNETVOLFRE(nI)
    NEXT nI
 

See Also: NNETSETSRV()
NNETVOLFRE()
NNETVOLMAX()
NNETVOLNUM()

 

 

 NNETVOLNUM()
 Возвращает максимальный номер сетевого тома текущего файл-сервера.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETVOLNUM() --> nMaxVol
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       II
    Novell Netware      :       2.1 и выше
 
  Возвращаемое значение
 
    nMaxVol - число в диапазоне от 0 до 31, соответствующее количеству
    томов, установленных на текущем файл-сервере, и являющееся
    максимальным номером, или (-1) при отсутствии прав доступа к текущему
    серверу.
 
  Описание
 
    Функция позволяет определить количество томов, установленных на


    текущем файл-сервере и организовать цикл по определению таких
    характеристик сетевых томов, как имя, свободное и общее дисковое
    пространство, количество свободных и доступных входов директорий и
    т.п..
 
    Поскольку нумерация томов файл-сервера ведется с 0, то возвращаемый
    функцией максимальный номер на 1 меньше общего количества
    установленных томов.
 
  Примечания
 
  . Функция возвращает величину, связанную с количеством
    инсталлированных томов, не проверяя, смонтированы они или нет.
 
  Примеры
 
  . Вывод имен всех установленных и смонтированных томов:
 
    FOR nI=0 TO NNETVOLNUM()
        ? NNETVOLNUM(nI)        // Имя тома или пустая строка, если том не
                                // смонтирован
    NEXT I
 

See Also: NNETSETSRV()
NNETVOLFRE()
NNETVOLMAX()
NNETVOLNAM()

 

 

 NNETWHOAMI()
 Возвращает LOGIN-имя пользователя.
------------------------------------------------------------------------------
 
  Синтаксис
 
    NNETWHOAMI() --> cLoginName
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       I и II
    Novell Netware      :       2.0 и выше
 
  Возвращаемое значение
 
    cLoginName - символьная строка длиной до 48 байтов, содержащая
    LOGIN-имя пользователя, выполнившего LOGIN-процедуру для текущего
    сервера.
 
  Описание
 
    Функция, в отличие от сетевой утилиты WHOAMI, возвращает только
    LOGIN-имя пользователя, под которым он зарегистрировал текущее
    соединение на текущем файл-сервере.
 
  Примеры
 
  . LOGIN-имя пользователя на текущем файл-сервере:
 
    ? NNETWHOAMI()              // Символьная строка длиной до 48 байтов
 

See Also: NNETSETSRV()

 

 

 NNETWORK()
 Возвращает признак активности сетевой ОС Novell Netware.
------------------------------------------------------------------------------


 
  Синтаксис
 
    NNETWORK() --> lNovellNetActive
 
  Область применения
 
    PC-LAN/MS-NET       :       Нет
    Novell ELS          :       I и II
    Novell Netware      :       2.0 и выше
 
  Возвращаемое значение
 
    lNovellNetActive - логическое значение .T. при работе прикладной
    программы в среде сетевой ОС Novell Netware, а иначе .F..
 
  Описание
 
    Функция позволяет определить, загружена ли на рабочей станции
    программа NETx.COM, являющаяся сетевой оболочкой ОС Novell Netware,
    именуемая также Novell-Requestor. Определить номер версии сетевой ОС
    (а не оболочки) можно вызовом функции NNETVER().
 
  Примеры
 
  . Проверка активности сети Novell и определение ее версии:
 
    IF NNETWORK
        IF NNETVER() >= "2.0"
                NNETCAPBEG(1)           // Включение переадресации на
                                        // сетевой принтер или очередь
        ENDIF
    ENDIF
 

See Also: NNETINFO()
NNETSFTLVL()
NNETVER()

 

 

 Введение в математические функции
------------------------------------------------------------------------------
 ACOS()        Возвращает арккосинус числа
 ASIN()        Возвращает арксинус числа
 ATAN()        Возвращает арктангенс числа
 ATN2()        Возвращает арктангенс по синусу и косинусу
 CEILING()     Округляет число до ближайшего большего целого
 COS()         Возвращает косинус угла
 COT()         Возвращает котангенс угла
 DTOR()        Преобразует величину угла из градусной меры в радианную
 FACT()        Возвращает значение факториала числа
 FLOOR()       Округляет число до ближайшего меньшего целого
 FV()          Вычисляет сумму, накапливаемую заданным количеством платежей
 GETPREC()     Возвращает уровень точности вычислений
 LOG10()       Возвращает десятичный логарифм числа
 PAYMENT()     Вычисляет необходимые платежи для погашения заданной суммы
 PERIODS()     Вычисляет количество платежей, необходимых для погашения суммы


 PI()          Возвращает число пи максимально допустимой степени точности
 PV()          Вычисляет сумму, погашаемую заданным количеством платежей
 RATE()        Вычисляет процентную ставку для выплачиваемого займа
 RTOD()        Преобразует величину угла из радианной меры в градусную
 SETPREC()     Устанавливает точность вычислений
 SIGN()        Возвращает знак числа
 SIN()         Возвращает синус угла
 TAN()         Возвращает тангенс угла
 

 

  Введение
 
------------------------------------------------------------------------------
 
    В данной главе описан набор математических функций, расширяющих
    возможности Clipper. Например, функции для финансовых расчетов,
    вычисления факториала, знака числа, а также тригонометрические
    функции.
 
    При использовании тригонометрических функций важную роль играет
    функция SETPREC(), задающая точность вычислений для операций с
    числами в формате с плавающей точкой. Она позволяет при
    необходимости пожертвовать точностью для повышения скорости
    вычислений.
 

 

 ACOS()
 Возвращает арккосинус числа.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ACOS(<nCos>) --> nArcCos
 
  Параметры
 
    <nCos> - число в диапазоне от (-1) до (+1) включительно, задающее
    косинус угла.
 
  Возвращаемое значение
 
    nArcCos - арккосинус для значения, заданного параметром <nCos>.
 
  Описание
 
    Функция возвращает значение в диапазоне от 0 до пи, равное значению
    арккосинуса числа, заданного параметром <nCos>.
 
  Примечания
 
  ¦ Точность возвращаемого результата определяется режимом,
    устанавливаемым функцией SETPREC().
 
  ¦ Преобразование значений углов из градусной меры в радианную
    производится функцией DTOR(), а из радианной в градусную -
    функцией RTOD().
 
  Примеры


 
  ¦ Вычисление арккосинуса:
 
     ? STR(ACOS(0.7), 18, 15)           // 0.795398830184144
 

See Also: ASIN()
ATAN()
ATN2()
DTOR()
RTOD()
SETPREC()
SIN()
TAN()

 

 

 ASIN()
 Возвращает арксинус числа.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ASIN(<nSin>) --> nArcSin
 
  Параметры
 
    <nSin> - число в диапазоне от (-1) до (+1) включительно, задающее
    синус угла.
 
  Возвращаемое значение
 
    nArcSin - арксинус для значения, заданного параметром <nSin>.
 
  Описание
 
    Функция возвращает значение в диапазоне от (-пи/2) до (+пи/2), равное
    значению арксинуса числа, заданного параметром <nSin>.
 
  Примечания
 
  ¦ Точность возвращаемого результата определяется режимом,
    устанавливаемым функцией SETPREC().
 
  ¦ Преобразование значений углов из градусной меры в радианную
    производится функцией DTOR(), а из радианной в градусную -
    функцией RTOD().
 
  Примеры
 
  ¦ Вычисление арксинуса:
 
     ? STR(ASIN(0.5), 18, 15)           // 0.523598775598299
 

See Also: ACOS()
ATAN()
ATN2()
DTOR()
RTOD()
SETPREC()
SIN()
TAN()

 

 

 ATAN()
 Возвращает арктангенс числа.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ATAN(<nTg>) --> nArcTg
 
  Параметры
 
    <nTg> - число, задающее тангенс угла.
 
  Возвращаемое значение
 
    nArcTg - арктангенс для значения, заданного параметром <nTg>.
 
  Описание
 
    Функция возвращает значение, равное значению арктангенса числа,
    заданного параметром <nTg>.
 
  Примечания
 
  ¦ Точность возвращаемого результата определяется режимом,
    устанавливаемым функцией SETPREC().
 
  ¦ Преобразование значений углов из градусной меры в радианную


    производится функцией DTOR(), а из радианной в градусную -
    функцией RTOD().
 
  Примеры
 
  ¦ Вычисление арктангенса:
 
     ? STR(ATAN(PI()/4, 18, 15)         // 0.665773750028354
 

See Also: ACOS()
ASIN()
ATN2()
DTOR()
RTOD()
SETPREC()
SIN()
TAN()

 

 

 ATN2()
 Возвращает арктангенс по синусу и косинусу.
------------------------------------------------------------------------------
 
  Синтаксис
 
    ATN2(<nSin>, <nCos>) --> nArc
 
  Параметры
 
    <nSin> - числовое значение, задающее синус угла.
 
    <nCos> - числовое значение, задающее косинус угла.
 
  Возвращаемое значение
 
    nArc - число в диапазоне от (-пи) до (+пи).
 
  Описание
 
    Функция позволяет определить величину угла по его синусу
    (x = SIN(r)) и косинусу (y = COS(r)), т.е. подобно вызову функции
    ATAN(x/y) возвращает результат для всех четырех квадрантов, но при
    этом предотвращает появление ошибки деления на ноль.
 
  Примечания
 
  ¦ Точность возвращаемого результата определяется режимом,
    устанавливаемым функцией SETPREC().
 
  ¦ Преобразование значений углов из градусной меры в радианную
    производится функцией DTOR(), а из радианной в градусную -
    функцией RTOD().
 
  Примеры
 
  ¦ Вычисление синуса и косинуса угла в 30  с обратным
    преобразованием:
 
    SET DECIMALS TO 4
    X := SIN(DTOR(30))
    Y := COS(DTOR(30))
    ? RTOD(ATN2(x,y))                           // 30.0000
 

See Also: ACOS()
ASIN()
ATAN()
DTOR()
RTOD()
SETPREC()
SIN()
TAN()

 

 

 CEILING()
 Округляет число до ближайшего большего целого.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CEILING(<nValue>) --> nLargerInt
 
  Параметры
 
    <nValue> - округляемое число.
 
  Возвращаемое значение


 
    nLargerInt - ближайшее целое, большее чем число, заданное параметром
    <nValue>.
 
  Описание
 
    Функция возвращает ближайшее целое число, значение которого
    больше значения параметра <nValue>. Функцию можно применять
    как к положительным, так и к отрицательным числам.
 
  Примеры
 
  ¦ Округление положительных и отрицательных чисел:
 
    ? CEILING(1.9)              // Результат:  2
    ? CEILING(1.1)              // Результат:  2
    ? CEILING(0.9)              // Результат:  1
    ? CEILING(-0.1)             // Результат:  0
    ? CEILING(-0 9)             // Результат:  0
    ? CEILING(-1.1)             // Результат: -1
 

See Also: FLOOR()

 

 

 COS()
 Возвращает косинус угла.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COS(<nArc>) --> nCos
 
  Параметры
 
    <nArc> - числовое значение, задающее величину угла в радианах.
 
  Возвращаемое значение
 
    nCos - числовое значение, соответствующее косинусу угла, заданного
    параметром <nArc>.
 
  Описание
 
    Функция вычисляет значение косинуса угла, заданного параметром
    <nArc>.
 
  Примечания
 
  ¦ Преобразование значений углов из градусной меры в радианную
    производится функцией DTOR(), а из радианной в градусную - функцией
    RTOD().
 
  ¦ Точность возвращаемого результата определяется режимом,
    устанавливаемым функцией SETPREC().
 
  Примеры
 
  ¦ Вычисление косинуса:
 
    ? STR(COS(0), 18, 15)               // 1.000000000000000
    ? STR(COS(PI() /4), 18, 15)         // 0.707106781186548
    ? STR(COS(PI() /2), 18, 15)         // 0.000000000000000
    ? STR(COS(PI() *99.5), 18, 15)      // 0.000000000000000
    ? STR(COS(PI() /9), 18, 15)         // 0.939692620785908
 

See Also: COT()
DTOR()
SIN()
TAN()



 

 

 COT()
 Возвращает котангенс угла.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COT(<nArc>) --> nCtg
 
  Параметры
 
    <nArc> - числовое значение, задающее величину угла в радианах.
 
  Возвращаемое значение
 
    nCtg - числовое значение, соответствующее котангенсу угла,
    заданного параметром <nArc>.
 
  Описание
 
    Функция вычисляет значение котангенса угла, заданного параметром
    <nArc>.
 
  Примечания
 
  ¦ Преобразование значений углов из градусной меры в радианную
    производится функцией DTOR(), а из радианной в градусную -
    функцией RTOD().
 
  ¦ Точность возвращаемого результата определяется режимом,
    устанавливаемым функцией SETPREC().
 
  Примеры
 
  ¦ Вычисление котангенса:
 
    ? STR(COT(PI() /4), 18, 15)         // 1.000000000000000
    ? STR(COT(PI() /2), 18, 15)         // 0.000000000000000
    ? STR(COT(PI() /9), 18, 15)         // 2.747477419454622
 

See Also: COS()
DTOR()
SIN()
TAN()

 

 

 DTOR()
 Преобразует величину угла из градусной меры в радианную.
------------------------------------------------------------------------------
 
  Синтаксис
 
    DTOR(<nAngle>) --> nResult
 
  Параметры
 
    <nAngle> - число, задающее величину угла в градусах.
 
  Возвращаемое значение
 
    nResult - величина угла в радианах.
 
  Описание
 
    Функция преобразует величину угла, заданную в градусной мере,
    в величину в радианной мере.
 
  Примеры
 
  ¦ Преобразования выполняются с точностью до 15 разрядов:
 
    ? STR(DTOR(360), 18, 15)            // Результат: 6.283185307179588
    ? STR(DTOR(180), 18, 15)            // Результат: 3.141592653589794
    ? STR(DTOR(180.5), 18, 15)          // Результат: 3.150319299849766


    ? STR(DTOR(720), 18, 15)            // Результат: 12.566370614359180
    ? STR(DTOR(-180), 18, 15)           // Результат: -3.141592653589794
 

See Also: RTOD()

 

 

 FACT()
 Возвращает значение факториала числа.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FACT(<nValue>) --> nFactorial
 
  Параметры
 
    <nValue> - число в диапазоне от 0 до 21.
 
  Возвращаемое значение
 
    nFactorial - факториал числа, заданного параметром <nValue>, или (-1)
    при некорректном задании параметра.
 
  Описание
 
    Функция возвращает значение факториала для целых чисел в диапазоне
    от 0 до 21.
 
  Примечания
 
  ¦ Функция округляет значение, заданное параметром <nValue>, до
    ближайшего меньшего целого числа.
 
  Примеры
 
  ¦ Вычисление факториалов:
 
    ? FACT(1)           // Результат:  1
    ? FACT(5)           // Результат:  120
    ? FACT(21)          // Результат:  51090942171709440000
    ? FACT(25)          // Результат: -1
    ? FACT(0)           // Результат:  1
 

 

 FLOOR()
 Округляет число до ближайшего меньшего целого.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FLOOR(<nValue>) --> nSmallerInt
 
  Параметры
 
    <nValue> - округляемое число.
 
  Возвращаемое значение
 
    nSmallerInt - ближайшее целое, меньшее чем число, заданное
    параметром <nValue>.
 
  Описание
 
    Функция возвращает ближайшее целое число, значение которого
    меньше значения параметра <nValue>. Функцию можно применять
    как к положительным, так и к отрицательным числам.
 
  Примеры
 
  ¦ Округление положительных и отрицательных чисел:
 
    ? FLOOR(1.9)                // Результат:  1
    ? FLOOR(1.1)                // Результат:  1


    ? FLOOR(0.9)                // Результат:  0
    ? FLOOR(-0.1)               // Результат: -1
    ? FLOOR(-0 9)               // Результат: -1
    ? FLOOR(-1.1)               // Результат: -2
 

See Also: CEILING()

 

 

 FV()
  Вычисляет сумму, накапливаемую заданным количеством периодических платежей.
------------------------------------------------------------------------------
 
  Синтаксис
 
    FV(<nPayment>, <nInterestRate>, <nNumberOfPayments>) --> nCapital
 
  Параметры
 
    <nPayment> - число, задающее размер периодических платежей.
 
    <nInterestRate> - число в диапазоне от 0 до 1, задающее процентную
    ставку (значение 1 соответствует 100 %).
 
    <nNumberOfPayments> - число, задающее количество периодических
    платежей.
 
  Возвращаемое значение
 
    nCapital - число, соответствующее накапливаемой сумме.
 
  Описание
 
    Функция позволяет вычислить сумму, которая может быть накоплена
    за <nNumberOfPayments> периодических платежей размером <nPayment>
    при процентной ставке <nInterestRate>.
 
  Примечания
 
  ¦ Функция позволяет рассчитать накапливаемую сумму, дополнительно
    возрастающую за счет начисления процентов по вкладу.
 
  Примеры
 
  ¦ Определение суммы, накапливаемой в течение трех лет при
    ежемесячном платеже в 150 и ежегодной процентной ставке 6%:
 
    nRate :=  0.06/12           // Ежемесячная процентная ставка
    ? FV(150, nRate, 36)        // Результат: 5900.42
 

See Also: PAYMENT()
PERIODS()
PV()
RATE()

 

 

 GETPREC()
 Возвращает уровень точности вычислений, установленный SETPREC().
------------------------------------------------------------------------------
 
  Синтаксис
 
    GETPREC() --> nPrecision
 
  Возвращаемое значение
 
    nPrecision - число в диапазоне от 1 до 16, задающее точность


    вычислений при работе тригонометрических функций CT II и
    соответствующее количеству разрядов справа от десятичной точки
    (включая саму точку).
 
  Описание
 
    Функция возвращает число в диапазоне от 1 до 16, задающее точность
    вычислений при работе тригонометрических функций CT II и
    соответствующее количеству разрядов справа от десятичной точки.
    Это значение устанавливается при помощи функции SETPREC().
 
  Примеры
 
  ¦ Определение точности вычислений:
 
    ? GETPREC()         // 10
 

See Also: SETPREC()

 

 

 LOG10()
 Возвращает десятичный логарифм числа.
------------------------------------------------------------------------------
 
  Синтаксис
 
    LOG10(<nValue>) --> nLOG10
 
  Параметры
 
    <nValue> - число, для которого нужно вычислить логарифм.
 
  Возвращаемое значение
 
    nLOG10 - десятичный логарифм числа, заданного параметром <nValue>.
 
  Описание
 
    Функция возвращает логарифм по основанию 10, т.е. степень, в которую
    надо возвести число 10, чтобы получить значение <nValue>.
 
  Примеры
 
  ¦ Вычисление логарифмов:
 
    ? LOG10(0.01)                       // -2.00
    ? LOG10(2)                          // 0.30
    ? LOG10(100)                        // 2.00
    ? LOG10(INFINITY())                 // 308.25
 

 

 PAYMENT()
 Вычисляет необходимый размер платежей для погашения заданной суммы.
------------------------------------------------------------------------------
 
  Синтаксис
 
    PAYMENT(<nCapital>, <nInterestRate>,
        <nNumberOfPayments>) --> nPayment
 
  Параметры
 
    <nCapital> - число, задающее выплачиваемую сумму.
 
    <nInterestRate> - число в диапазоне от 0 до 1, задающее процентную
    ставку (значение 1 соответствует 100 %).
 
    <nNumberOfPayments> - число, задающее количество платежей.


 
  Возвращаемое значение
 
    nPayment - числовое значение размера необходимых периодических
    платежей.
 
  Описание
 
    Функция вычисляет размер периодически производимых платежей,
    необходимых для погашения требуемой суммы в течение заданного
    времени и с учетом заданной процентной ставки.
 
  Примеры
 
  ¦ Ежемесячные платежи для погашения 2 000 при годовой
    процентной ставке в 10%:
 
    nRate :=  0.1/12                    // Ежемесячный взнос
    ? PAYMENT(2000, Rate, 24)           // 92.29
 

See Also: FV()
PERIODS()
PV()
RATE()

 

 

 PERIODS()
 Вычисляет количество платежей, необходимых для погашения заданной суммы.
------------------------------------------------------------------------------
 
  Синтаксис
 
    PERIODS(<nCapital>, <nPayment>,
        <nInterestRate>) --> nNumberOfPayments
 
  Параметры
 
    <Capital> - число, задающее погашаемую сумму.
 
    <nPayment> - число, задающее размер периодических платежей.
 
    <nInterestRate> - число в диапазоне от 0 до 1, задающее процентную
    ставку (значение 1 соответствует 100 %).
 
  Возвращаемое значение
 
    nNumberOfPayments - количество необходимых платежей.
 
  Описание
 
    Функция позволяет подсчитать количество периодически производимых
    платежей размером <nPayment>, необходимых для погашения суммы
    <nCapital> при процентной ставке <nInterestRate>.
 
  Примечания
 
  ¦ Если величина периодического платежа меньше, чем исчисленная
    сумма процентов за этот период, то погашение будет продолжаться
    бесконечно. В этом случае функция возвращает значение (-1).
 
  Примеры
 
  ¦ Определение количества ежемесячных платежей размером 200,
    требуемых для выплаты займа в 4 000 при годовой процентной ставке
    9.5% :
 
    nRate :=  0.095/12                  // Ежемесячная процентная ставка


    ? PERIODS(4000, 200, Rate)          // Количество платежей: 21.86
 

See Also: FV()
PAYMENT()
PV()
RATE()

 

 

 PI()
  Возвращает число пи максимально допустимой степени точности.
------------------------------------------------------------------------------
 
  Синтаксис
 
    PI() --> nPi
 
  Возвращаемое значение
 
    nPi - значение пи максимально допустимой степени точности.
 
  Описание
 
    Функция возвращает значение пи максимально допустимой степени
    точности.
 
  Примеры
 
  ¦ Вывод значения пи:
 
    ? STR(PI(), 18, 15)         // Результат: 3.141592653589793
 

 

 PV()
 Вычисляет сумму, погашаемую заданным количеством периодических платежей.
------------------------------------------------------------------------------
 
  Синтаксис
 
    PV(<nPayment>, <nInterestRate>, <nNumberOfPayments>) --> nCapital
 
  Параметры
 
    <nPayment> - число, задающее размер периодических платежей.
 
    <nInterestRate> - число в диапазоне от 0 до 1, задающее процентную
    ставку (значение 1 соответствует 100 %).
 
    <nNumberOfPayments> - число, задающее количество периодических
    платежей.
 
  Возвращаемое значение
 
    nCapital - числовое значение, соответствующее сумме, погашаемой
    при заданных процентной ставке, количестве и размере платежей.
 
  Описание
 
    Функция позволяет вычислить сумму, которая может быть погашена
    за <nNumberOfPayments> периодических платежей размером <nPayment>
    при процентной ставке <nInterestRate>.
 
  Примечания
 
  ¦ Функция позволяет рассчитать величину займа с учетом выплаты
    процентов за предоставление кредита.
 
  Примеры
 
  ¦ Сумма займа, погашаемая ежемесячными платежами по 175 в течение
    двух лет, при годовой процентной ставке 9.5%:
 


    nRate :=  0.095/12                  // Ежемесячная процентная ставка
    ? PV(175, nRate, 24)                // Сумма займа 3811.43
 
  ¦ Сумма займа, погашаемая ежегодными платежами по 175 в течение двух
    лет, при годовой процентной ставке 9.5%::
 
    ? PV(175, 0.095, 2)                 // 305.77
 

See Also: FV()
PAYMENT()
PERIODS()
RATE()

 

 

 RATE()
 Вычисляет процентную ставку для выплачиваемого займа.
------------------------------------------------------------------------------
 
  Синтаксис
 
    RATE(<nCapital>, <nPayment>, <nNumberPayments>) --> nInterestRate
 
  Параметры
 
    <nCapital> - число, задающее величину выплачиваемого займа.
 
    <nPayment> - число, задающее размер периодических платежей.
 
    <nNumberOfPayments> - число, задающее количество периодических
    платежей.
 
  Возвращаемое значение
 
    nInterestRate - число, соответствующее годовой процентной ставке при
    выплате займа (значение 1 соответствует 100 %).
 
  Описание
 
    Функция позволяет определить годовую процентную ставку для займа
    величиной <nCapital>, погашаемого за <nNumberOfPayments> периодов
    платежами размером <nPayment>. Процентная ставка вычисляется
    методом итераций по следующей формуле:
 
                <nInterestRate> = lim(ik)
 
                             f(ik)
                ik+1 = ik - --------,
                             f'(ik)
 
                  1 - (1+ik)^(- <nNumberOfPayments>)   <nCapital>
    где f(ik) = - ---------------------------------- - ----------
                            ik                         <nPayment>
 
    Начальное значение для i выбирается следующим образом:
 
                  <nPayment>              <nCapital>
            i0 = ----------- - ----------------------------------


                  <nCapital>   <nNumberOfPayments>^2 * <nPayment>
  Примечания
 
  ¦ Максимальное количество периодических платежей, вычисляемое
    данной функцией составляет 1020.
 
  Примеры
 
  ¦ Процентная ставка для займа 2500 погашаемого ежемесячными
    платежами размером 86.67 в течение трех лет:
 
    nLoan       := 2500
    nPayment    := 86.67
    nPeriod     := 36
    ? RATE(nLoan, nPayment, nPeriod)*12         // 0.1501 (15.01%)
 

See Also: FV()
PAYMENT()
PERIODS()
PV()

 

 

 RTOD()
 Преобразует величину угла из радианной меры в градусную.
------------------------------------------------------------------------------
 
  Синтаксис
 
    RTOD(<nAngle>) --> nResult
 
  Параметры
 
    <nAngle> - число, задающее величину угла в радианах.
 
  Возвращаемое значение
 
    nResult - величина угла в градусах.
 
  Описание
 
    Функция преобразует величину угла, заданную в радианной мере,
    в величину в градусной мере.
 
  Примеры
 
  ¦ Преобразования выполняются с точностью до 15 разрядов:
 
    ? RTOD(PI() )               // Результат:  180
    ? RTOD(2 * PI())            // Результат:  360
    ? RTOD(4 * PI())            // Результат:  720
    ? RTOD( -PI() )             // Результат: -180
 

See Also: DTOR()

 

 

 SETPREC()
 Устанавливает точность вычислений для тригонометрических функций.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SETPREC(<nPrecision>) --> cNull
 
  Параметры
 
    <nPrecision> - число в диапазоне от 1 до 16, задающее точность
    вычислений (используемую тригонометрическими CT II-функциями),
    соответствующее количеству разрядов справа от десятичной точки,
    считая последнюю. По умолчанию 16.
 
  Возвращаемое значение
 
   cNull - всегда пустая строка.


 
  Описание
 
    Функция позволяет установить точность вычислений, используемую
    тригонометрическими CT II-функциями. Исходно вычисления проводятся
    с точностью 15 десятичных знаков, что соответствует значению 16
    параметра <nPrecision> (десятичная точка и 15 цифр). Если такая
    высокая точность не нужна, то для повышения скорости вычислений
    можно задать меньшее значение параметра <nPrecision>. Описываемая
    функция влияет на точность вычислений, производимых следующими
    CT II-функциями:
 
        SIN() COS() TAN() COT() ASIN() ACOS() ATAN() ATN2()
 
  Примеры
 
  ¦ Установка точности вычислений с 9 значащими цифрами после
    десятичной точки (всего 10 знаков):
 
    SETPREC(10)         // Всегда возвращает пустую строку
 

See Also: ACOS()
ASIN()
ATAN()
COS()
COT()
GETPREC()
SIN()
TAN()

 

 

 SIGN()
 Возвращает знак числа.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SIGN(<nValue>) --> nSign
 
  Параметры
 
    <nValue> - число, знак которого нужно определить.
 
  Возвращаемое значение
 
    nSign - число 1 для положительных чисел, число (-1) для
    отрицательных, или 0 для нулевых значений.
 
  Описание
 
    Функция позволяет использовать знак числа в математических
    выражениях.
 
  Примеры
 
  ¦ Определение знака чисел:
 
    ? SIGN(48335)               // Результат:  1
    ? SIGN(-258)                // Результат: -1
 

 

 SIN()
 Возвращает синус угла.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SIN(<nArc>) --> nSin
 
  Параметры
 
    <nArc> - числовое значение, задающее величину угла в радианах.
 
  Возвращаемое значение
 
    nSin - числовое значение, соответствующее синусу угла, заданного


    параметром <nArc>.
 
  Описание
 
    Функция вычисляет значение синуса угла, заданного параметром <nArc>.
 
  Примечания
 
  ¦ Преобразование значений углов из градусной меры в радианную
    производится функцией DTOR(), а из радианной в градусную -
    функцией RTOD().
 
  ¦ Точность возвращаемого результата определяется режимом,
    устанавливаемым функцией SETPREC().
 
  Примеры
 
  ¦ Вычисление синуса:
 
    ? STR(SIN(PI() /4), 18, 15)         //  0.707106781186548
    ? STR(SIN(PI() /2), 18, 15)         //  1.000000000000000
    ? STR(SIN(PI() *99.5), 18, 15)      // -1.000000000000000
    ? STR(SIN(PI() /9), 18, 15)         //  0.342020143325669
 

See Also: COS()
COT()
DTOR()
TAN()

 

 

 TAN()
 Возвращает тангенс угла.
------------------------------------------------------------------------------
 
  Синтаксис
 
    TAN(<nArc>) --> nTg
 
  Параметры
 
    <nArc> - числовое значение, задающее величину угла в радианах.
 
  Возвращаемое значение
 
    nTg - числовое значение, соответствующее тангенсу угла, заданного
    параметром <nArc>.
 
  Описание
 
    Функция вычисляет значение тангенса угла, заданного параметром
    <nArc>.
 
  Примечания
 
  ¦ Преобразование значений углов из градусной меры в радианную
    производится функцией DTOR(), а из радианной в градусную -
    функцией RTOD().
 
  ¦ Точность возвращаемого результата определяется режимом,
    устанавливаемым функцией SETPREC().
 
  Примеры
 
  ¦ Вычисление тангенса:
 
    ? STR(TAN(0), 18, 15)               // 1.000000000000000
    ? STR(TAN(PI() /4), 18, 15)         // 1.000000000000000
    ? STR(TAN(PI() /9), 18, 15)         // 0.363970234266202
 

See Also: COS()
COT()
DTOR()
SIN()

 

 

 Введение в функции непосредственного чтения/записи
------------------------------------------------------------------------------


 INBYTE()      Возвращает байт, считанный из порта ввода/вывода
 INWORD()      Возвращает 16-битовое слово, считанное из порта ввода/вывода
 OUTBYTE()     Выводит байт в порт ввода/вывода
 OUTWORD()     Выводит 16-битовое слово в порт ввода/вывода
 PEEKBYTE()    Возвращает байт, считанный из памяти
 PEEKSTR()     Возвращает последовательность байтов, считанных из памяти
 PEEKWORD()    Возвращает 16-битовое слово, считанное из памяти
 POKEBYTE()    Записывает байт по адресу памяти
 POKEWORD()    Записывает 16-битовое слово по адресу памяти
 

 

  Введение
 
------------------------------------------------------------------------------
 
    Несмотря на широкие возможности, предоставляемые CT II, иногда
    возникает необходимость прямого доступа к портам ввода/вывода или к
    определенному адресу памяти. Именно это обеспечивают функции,
    описываемые в данной главе.
 
    При помощи функций семейства PEEKxxxx() можно считывать данные из
    памяти по байтам, словам или строкам. Функции семейства POKExxxx()
    предоставляют возможность записать по заданному адресу памяти байт
    или слово, но не строку.
 
    ВНИМАНИЕ! Использование функций POKExxxx() оправдано только в
    самых исключительных случаях. Запись неверного значения или по
    неправильному адресу может вызвать непредсказуемые результаты.
 
    Это же относится ко всем функциям IN/OUTxxxx(), осуществляющим
    прямой доступ к портам ввода/вывода. Следует иметь в виду, что
    некорректное использование этих функций может привести к потере
    данных, например, при работе с контроллером дисковода.
 

 

 INBYTE()
 Возвращает байт, считанный из порта ввода/вывода.
------------------------------------------------------------------------------
 
  Синтаксис
 
    INBYTE(<nPort|cHexPort>) --> nByte
 
  Параметры
 
    <nPort|cHexPort> - адрес порта ввода/вывода, заданный в виде числа или


    в форме символьной строки шестнадцатеричных цифр.
 
  Возвращаемое значение
 
    nByte - число, содержащее байт, считанный из порта ввода/вывода, или
    (-1) при ошибочном задании параметра. При задании несуществующего или
    недоступного порта ввода/вывода возвращается случайное значение.
 
  Описание
 
    Функция возвращает байт, считанный из порта ввода/вывода, заданного
    параметром <nPort|cHexPort>. Для стандартных аппаратных средств, таких
    как порты последовательного интерфейса, CT II содержит набор
    оптимизированных функций. Однако, при необходимости прочитать значение
    непосредственно из порта ввода/вывода, можно использовать и данную
    функцию.
 
  Примечания
 
  . В соответствии с соглашениями для микропроцессоров семейства
    i80x86 в 16-битовом слове младший байт  расположен по четному
    (меньшему) адресу, а старший байт расположен по нечетному (большему)
    адресу.
 
  Примеры
 
  . Чтение байта по первому (базовому) адресу порта 1
    последовательного интерфейса. Этот пример служит только для
    иллюстрации, поскольку в CT II включены специальные функции для работы
    с портами последовательного интерфейса:
 
    ? INBYTE(1016)                      // Адрес в числовой форме
    ? INBYTE("3F8")                     // Тот же адрес в форме строки
                                        // шестнадцатеричных чисел
 

See Also: INWORD()
OUTBYTE()

 

 

 INWORD()
 Возвращает 16-битовое слово, считанное из порта ввода/вывода.
------------------------------------------------------------------------------
 
  Синтаксис
 
    INWORD(<nPort|cHexPort>) --> nWord
 
  Параметры
 
    <nPort|cHexPort> - адрес порта ввода/вывода, заданный в виде числа или
    в форме символьной строки шестнадцатеричных цифр.
 
  Возвращаемое значение
 
    nWord - число, содержащее 16-битовое слово, считанное из порта


    ввода/вывода, или (-1) при ошибочном задании параметра. При задании
    несуществующего или недоступного порта ввода/вывода возвращается
    случайное значение.
 
  Описание
 
    Функция возвращает 16-битовое слово, считанное из порта ввода/вывода,
    заданного параметром <nPort|cHexPort>. Для стандартных аппаратных
    средств, таких как порты последовательного интерфейса, CT II содержит
    набор оптимизированных функций. Однако, при необходимости прочитать
    значение непосредственно из порта ввода/вывода, можно использовать и
    данную функцию.
 
  Примечания
 
  . В соответствии с соглашениями для микропроцессоров семейства
    i80x86 в 16-битовом слове младший байт  расположен по четному
    (меньшему) адресу, а старший байт расположен по нечетному (большему)
    адресу.
 
  Примеры
 
  . Чтение слова из 16-битового порта:
 
    ? INWORD(512)               // Адрес порта в числовой форме
    ? INWORD("200")             // Тот же адрес, но в форме символьной строки
                                // шестнадцатеричных чисел
 

See Also: INBYTE()
NUMHIGH()
NUMLOW()
OUTWORD()

 

 

 OUTBYTE()
 Выводит байт в порт ввода/вывода.
------------------------------------------------------------------------------
 
  Синтаксис
 
    OUTBYTE(<nPort|cHexPort>, <nOutByte|cHexOutByte>) --> lSuccessful
 
  Параметры
 
    <nPort|cHexPort> - адрес порта ввода/вывода, заданный в виде числа или
    в форме символьной строки шестнадцатеричных цифр.
 
    <nOutByte|cHexOutByte> - выводимое в порт ввода/вывода значение,
    заданное в виде числа или в форме символьной строки шестнадцатеричных
    цифр. Максимальное значение 255 ("FF").
 
  Возвращаемое значение
 
    lSuccessful - логическое значение .T. при успешном выводе, или .F. при
    некорректном задании параметров.
 
  Описание


 
    Функция позволяет записать байт непосредственно в аппаратный порт
    ввода/вывода, адрес которого задан параметром <nPort|cHexPort>.
 
    Для стандартных аппаратных средств, таких как порты последовательного
    интерфейса, CT II содержит набор оптимизированных функций. Однако, при
    необходимости записать информацию непосредственно в порт ввода/вывода,
    можно использовать и данную функцию.
 
  Примечания
 
  . Функция не позволяет определить, доступен ли порт, а также
    возможна ли в него запись.
 
  Примеры
 
  . Вывод байта по пятому адресу первого порта последовательного
    интерфейса:
 
    ? OUTBYTE(1020,1)           // Байт 5 порта 1 (включение DTR-сигнала)
    ? OUTBYTE("3FC", 0)         // Тот же адрес, но в шестнадцатеричной форме
                                // (выключение DTR-сигнала)
 

See Also: INBYTE()
OUTWORD()

 

 

 OUTWORD()
 Выводит 16-битовое слово в порт ввода/вывода.
------------------------------------------------------------------------------
 
  Синтаксис
 
    OUTWORD(<nPort|cHexPort>, <nOutWord|cHexOutWord>) --> lSuccessful
 
  Параметры
 
    <nPort|cHexPort> - адрес порта ввода/вывода, заданный в виде числа или
    в форме символьной строки шестнадцатеричных цифр.
 
    <nOutWord|cHexOutWord> - выводимое в порт ввода/вывода значение,
    заданное в виде числа или в форме символьной строки шестнадцатеричных
    цифр. Максимальное значение 65535 ("FFFF").
 
  Возвращаемое значение
 
    lSuccessful - логическое значение .T. при успешном выводе, или .F. при
    некорректном задании параметров.
 
  Описание
 
    Функция позволяет записать 16-битовое слово непосредственно в
    аппаратный порт ввода/вывода, адрес которого задан параметром
    <nPort|cHexPort>. Для стандартных аппаратных средств, таких как порты
    последовательного интерфейса, CT II содержит набор оптимизированных


    функций. Однако, при необходимости записать информацию непосредственно
    в порт ввода/вывода, можно использовать и данную функцию.
 
  Примечания
 
  . Функция не позволяет определить, доступен ли порт, а также
    возможна ли в него запись.
 
  Примеры
 
  . Вывод слова в 16-разрядный порт ввода/вывода:
 
    ? OUTWORD(512, 32)          // Адрес порта и значение в
                                // числовой форме
    ? OUTWORD("200", "20")      // То же, но в шестнадцатеричной форме
 

See Also: INWORD()
OUTBYTE()

 

 

 PEEKBYTE()
 Возвращает байт, считанный из памяти.
------------------------------------------------------------------------------
 
  Синтаксис
 
    PEEKBYTE(<nSegment|cHexSegment>, <nOffset|cHexOffset>) --> nByte
 
  Параметры
 
    <nSegment|cHexSegment> - номер сегмента, заданный в виде числа или в
    форме символьной строки шестнадцатеричных цифр. Максимальное значение
    65520 ("FFF0").
 
    <nOffset|cHexOffset> - смещение в сегменте, заданное в виде числа или
    в форме символьной строки шестнадцатеричных цифр. Максимальное
    значение 65535 ("FFFF").
 
  Возвращаемое значение
 
    nByte - число, содержащее байт, считанный из памяти, или (-1) при
    ошибочном задании параметра. При задании несуществующего или
    недоступного адреса или сегмента возвращается случайное значение.
 
  Описание
 
    Функция возвращает байт, считанный из памяти по адресу, указанному в
    стандартном для микропроцессоров семейства i80x86 виде:
 
    <адрес> = <сегмент> * 16 + <смещение>
 
  Примечания
 
  . Вызов функции должен сопровождаться обязательным заданием значения
    как параметра <nSegment|cHexSegment>, так и параметра
    <nOffset|cHexOffset>.
 
  Примеры
 
  . Чтение байта:
 


    ? PEEKBYTE(1000, 2000)              // Сегмент 1000, смещение 2000
    ? PEEKBYTE("F000", "8000")          // Байт по адресу  F8000h
 

See Also: PEEKWORD()
POKEBYTE()

 

 

 PEEKSTR()
  Возвращает последовательность байтов, считанных из памяти.
------------------------------------------------------------------------------
 
  Синтаксис
 
    PEEKSTR(<nSegment|cHexSegment>, <nOffset|cHexOffset>,
        [<nLength|cHexLength>]) --> cCharString
 
  Параметры
 
    <nSegment|cHexSegment> - номер сегмента, заданный в виде числа или в
    форме символьной строки шестнадцатеричных цифр. Максимальное значение
    65520 ("FFF0").
 
    <nOffset|cHexOffset> - смещение в сегменте, заданное в виде числа или
    в форме символьной строки шестнадцатеричных цифр. Максимальное
    значение 65535 ("FFFF").
 
    <nLength|cHexLength> - необязательный параметр, задающий в числовом
    виде или в форме символьной строки шестнадцатеричных цифр количество
    считываемых байтов. Максимальное значение 65520 ("FFF0").
    По умолчанию чтение производится до первого символа CHR(0).
 
  Возвращаемое значение
 
    cCharString - символьная строка, содержащая считанные из памяти байты,
    или пустая строка при некорректном задании параметров.
 
  Описание
 
    Функция позволяет считывать заданную область памяти в символьную
    переменную. При задании параметра <nLength|cHexLength> функция
    считывает столько байтов, сколько задано этим параметром, а при
    опущенном параметре чтение завершается на первом символе CHR(0).
 
  Примеры
 
  . В компьютерах класса IBM PC/AT по адресу F000:0h обычно записан
    "Copyright" BIOS. Каждый байт в записи повторяется дважды, поэтому для
    вывода используется функция CHARODD():
 
    ? CHARODD(PEEKSTR("F000", 0)) // Например: "1990, 1991 Copyright (С)..."


 

See Also: PEEKBYTE()
PEEKWORD()

 

 

 PEEKWORD()
 Возвращает 16-битовое слово, считанное из памяти.
------------------------------------------------------------------------------
 
  Синтаксис
 
    PEEKWORD(<nSegment|cHexSegment>, <nOffset|cHexOffset>) --> nWord
 
  Параметры
 
    <nSegment|cHexSegment> - номер сегмента, заданный в виде числа или в
    форме символьной строки шестнадцатеричных цифр. Максимальное значение
    65520 ("FFF0").
 
    <nOffset|cHexOffset> - смещение в сегменте, заданное в виде числа или
    в форме символьной строки шестнадцатеричных цифр. Максимальное
    значение 65535 ("FFFF").
 
  Возвращаемое значение
 
    nWord - число, содержащее 16-битовое слово, считанное из памяти, или
    (-1) при ошибочном задании параметра. При задании несуществующего или
    недоступного адреса или сегмента возвращается случайное значение.
 
  Описание
 
    Функция возвращает 16-битовое слово, считанное из памяти по адресу,
    указанному в стандартном для микропроцессоров семейства i80x86 виде:
 
    <адрес> = <сегмент> * 16 + <смещение>
 
  Примечания
 
  . Вызов функции должен сопровождаться обязательным заданием значения
    как параметра <nSegment|cHexSegment>, так и параметра
    <nOffset|cHexOffset>
 
  . В соответствии с соглашениями для микропроцессоров семейства
    i80x86 в 16-битовом слове младший байт  расположен по четному
    (меньшему) адресу, а старший байт расположен по нечетному (большему)
    адресу.
 
  Примеры
 
  . Чтение слова:
 
    ? PEEKWORD("F000", "8000")  // Cлово по адресу F8000h
 
  . Запись числа 513 (00000010 0000001) в память и последующее его
    считывание:
 
    POKEBYTE("9000", "F000", 1) // Запись младшего байта по адресу 9F000h
    POKEBYTE("9000", "F001", 2) // Запись старшего байта по адресу 9F001h


    ? PEEKWORD("9000", "F000")  // 513, слово по адресу 9F000h
 

See Also: NUMHIGH()
NUMLOW()
PEEKBYTE()
POKEBYTE()
POKEWORD()

 

 

 POKEBYTE()
 Записывает байт по адресу памяти.
------------------------------------------------------------------------------
 
  Синтаксис
 
    POKEBYTE(<Segment|cHexSegment>, <nOffset|cHexOffset>,
        <nByte|cHexByte>) --> lSuccessful
 
  Параметры
 
    <nSegment|cHexSegment> - номер сегмента, заданный в виде числа или в
    форме символьной строки шестнадцатеричных цифр. Максимальное значение
    65520 ("FFF0").
 
    <nOffset|cHexOffset> - смещение в сегменте, заданное в виде числа или
    в форме символьной строки шестнадцатеричных цифр. Максимальное
    значение 65535 ("FFFF").
 
    <nByte|cHexByte> - выводимое в память значение, заданное в виде числа
    или в форме символьной строки шестнадцатеричных цифр.  Максимальное
    значение 255 ("FF").
 
  Возвращаемое значение
 
    lSuccessful - логическое значение .T. при успешной записи, или .F. при
    некорректном задании параметров.
 
  Описание
 
    Функция позволяет записать байт  в память по адресу, указанному в
    стандартном для микропроцессоров семейства i80x86 виде:
 
    <адрес> = <сегмент> * 16 + <смещение>
 
  Примечания
 
  . Вызов функции должен сопровождаться обязательным заданием значения
    как параметра <nSegment|cHexSegment>, так и параметра
    <nOffset|cHexOffset>.
 
  . Внимание! Как и все функции, обеспечивающие низкоуровневый доступ
    к системным ресурсам, описываемую функцию следует применять с
    осторожностью. Изменение, произведенное не по тому адресу, может
    привести к краху или "зависанию" системы. Будьте особо внимательны и
    используйте данную функцию только тогда, когда иного способа, кроме


    прямой записи, нет!
 
  . Функция не проверяет, может ли информация быть записана по
    заданному адресу.
 
  Примеры
 
  . Запись байта в память:
 
    ? POKEBYTE(32768,1000, 65)          // . T. (весьма опасное действие!)
    ? POKEBYTE("F000", "8000", "41")    // . T. (несмотря на то, что в
                                        // область ROM запись невозможна)
 

See Also: PEEKBYTE()
POKEWORD()

 

 

 POKEWORD()
 Записывает 16-битовое слово по адресу памяти.
------------------------------------------------------------------------------
 
  Синтаксис
 
    POKEWORD(<Segment|cHexSegment>, <nOffset|cHexOffset>,
        <nWord|cHexWord>) --> lSuccessful
 
  Параметры
 
    <nSegment|cHexSegment> - номер сегмента, заданный в виде числа или в
    форме символьной строки шестнадцатеричных цифр. Максимальное значение
    65520 ("FFF0").
 
    <nOffset|cHexOffset> - смещение в сегменте, заданное в виде числа или
    в форме символьной строки шестнадцатеричных цифр. Максимальное
    значение 65535 ("FFFF").
 
    <nWord|cHexWord> - выводимое в память значение, заданное в виде числа
    или в форме символьной строки шестнадцатеричных цифр.  Максимальное
    значение 65535 ("FFFF").
 
  Возвращаемое значение
 
    lSuccessful - логическое значение .T. при успешной записи, или .F. при
    некорректном задании параметров.
 
  Описание
 
    Функция позволяет записать байт  в память по адресу, указанному в
    стандартном для микропроцессоров семейства i80x86 виде:
 
    <адрес> = <сегмент> * 16 + <смещение>
 
  Примечания
 
  . Вызов функции должен сопровождаться обязательным заданием значения
    как параметра <nSegment|cHexSegment>, так и параметра
    <nOffset|cHexOffset>.
 
  . Внимание! Как и все функции, обеспечивающие низкоуровневый доступ


    к системным ресурсам, описываемую функцию следует применять с
    осторожностью. Изменение, произведенное не по тому адресу, может
    привести к краху или "зависанию" системы. Будьте особо внимательны и
    используйте данную функцию только тогда, когда иного способа, кроме
    прямой записи, нет!
 
  . Функция не проверяет, может ли информация быть записана по
    заданному адресу.
 
  . В соответствии с соглашениями для микропроцессоров семейства
    i80x86 в 16-битовом слове младший байт  расположен по четному
    (меньшему) адресу, а старший байт расположен по нечетному (большему)
    адресу.
 
  Примеры
 
  . Запись слова в память:
 
    ? POKEWORD(32768,1000, 65535)       // . T. (весьма опасное действие!)
    ? POKEWORD("F000", "8000", "FFFF")  // . T. (несмотря на то, что в
                                        // область ROM запись невозможна)
 

See Also: PEEKWORD()
POKEBYTE()

 

 

 Введение в функции обработки GET-объектов
------------------------------------------------------------------------------
 COUNTGETS()   Возвращает количество активных GET-объектов
 CURRENTGET()  Возвращает номер текущего GET-объекта
 GETFLDCOL()   Возвращает номер столбца экранной позиции GET-объекта
 GETFLDROW()   Возвращает номер строки экранной позиции GET-объекта
 GETFLDVAR()   Возвращает имя переменной, связанной с GET-объектом
 GETINPUT()    Организует редактирование и возвращает введенные данные
 GETSECRET()   Организует скрытое редактирование
 RESTGETS()    Восстанавливает установки среды и совокупность GET-объектов
 RESTSETKEY()  Восстанавливает назначения клавиш прерывания
 SAVEGETS()    Сохраняет установки среды и совокупность активных GET-объектов
 SAVESETKEY()  Сохраняет назначения клавиш, производимые командами SET KEY
 

 

  Введение
 
------------------------------------------------------------------------------
 


    Clipper 5. 0 имеет встроенные средства для создания вложенных GET/READ
    конструкций, поэтому описанные в данной главе функции включены в CT II
    для обеспечения совместимости с предыдущими версиями и простоты
    использования.
 
    Функции данной главы предоставляют такую информацию о GET-объектах,
    как позиция поля редактирования на экране, имя соответствующей
    переменной, а также позволяют определить, какой из активных
    GET-объектов является текущим.
 
    Кроме того, с помощью описанных в данной главе функций можно сохранять
    среду и совокупность активных GET-объектов в массиве для последующего
    восстановления. Таким образом, обеспечивается возможность сохранения
    текущего шаблона редактирования и определений клавиш прерываний, а
    также возможность их переопределения.
 
    Внимание! Сохраняемая информация связана с текущей средой,
    существующей во время работы прикладной программы. Поэтому нет смысла
    запоминать ее в файле (из-за включаемых в нее блоков кода) для
    использования при следующих выполнениях программы.
 

 

 COUNTGETS()
 Возвращает количество активных GET-объектов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    COUNTGETS() --> nObjects
 
  Возвращаемое значение
 
    nObjects - количество активных GET-объектов.
 
  Описание
 
    Функция возвращает количество активных GET-объектов, т.е. объектов,
    созданных Clipper-командами @...GET и еще не уничтоженных по окончанию
    выполнения команды READ.
 
  Примеры
 
  . Активизация GET-объектов:
 
        @ 10, 10 GET Field1
        @ 10, 20 GET Field2 VALID MYFUNC()
        @ 10, 30 GET Field3
        READ
    RETURN
 
  . Определение количества активных GET-объектов при переключении на
    функцию пользователя:
 
    FUNCTION MYFUNC
        ? COUNTGETS()           // Результат: 3


        RETURN(.T.)
 

See Also: CURRENTGET()

 

 

 CURRENTGET()
 Возвращает номер текущего GET-объекта.
------------------------------------------------------------------------------
 
  Синтаксис
 
    CURRENTGET() --> nObject
 
  Возвращаемое значение
 
    nObject - номер текущего активного GET-объекта.
 
  Описание
 
    Функция возвращает номер текущего (активного) GET-объекта, т.е.
    имеющего фокус ввода. Это можно использовать, например, в функции
    пользователя, задаваемой в предложении VALID.
 
  Пример
 
  . Организация передачи в функцию пользователя номера текущего
    GET-объекта:
 
    @ 10,20 GET FIELD->field1 VALID MYFUNC(CURRENTGET())
 

See Also: COUNTGETS()
GETFLDCOL()
GETFLDROW()

 

 

 GETFLDCOL()
 Возвращает номер столбца экранной позиции GET-объекта.
------------------------------------------------------------------------------
 
  Синтаксис
 
    GETFLDCOL([<nObject>]) --> nColumn
 
  Параметры
 
    <nObject> - необязательный числовой параметр, задающий номер
    GET-объекта. По умолчанию используется текущий GET-объект.
 
  Возвращаемое значение
 
    nColumn - номер столбца экранной позиции, или (-1) при недопустимом
    задании номера GET-объекта.
 
  Описание
 
    Функция возвращает номер столбца экранной позиции, с которой
    начинается поле ввода заданного GET-объекта.
 
  Примеры
 
  . Определение экранной позиции для одного из активных GET-объектов:
 
    @ 10, 10 GET...
    @ 10, 20 GET...
    @ 10, 30 GET...
 
    ? GETFLDROW(2), GETFLDCOL(2)        // Результат: 10  20
    READ
 
  . Позиция текущего GET-объекта при прерывании по нажатию клавиши:
 
    ? GETFLDROW(), GETFLDCOL()          // Результат: 10  10
                                        // (предполагается, что активен
                                        // GET-объект 1)


 

See Also: COUNTGETS()
CURRENTGET()
GETFLDROW()

 

 

 GETFLDROW()
  Возвращает номер строки экранной позиции GET-объекта.
------------------------------------------------------------------------------
 
  Синтаксис
 
    GETFLDROW([<nObject>]) --> nRow
 
  Параметры
 
    <nObject> - необязательный числовой параметр, задающий номер
    GET-объекта. По умолчанию используется текущий GET-объект.
 
  Возвращаемое значение
 
    nRow - номер строки экранной позиции, или (-1) при недопустимом
    задании номера GET-объекта.
 
  Описание
 
    Функция возвращает номер строки экранной позиции, с которой начинается
    поле ввода заданного GET-объекта.
 
  Примеры
 
  . Определение экранной позиции для одного из активных GET-объектов:
 
    @ 10, 10 GET...
    @ 10, 20 GET...
    @ 10, 30 GET...
 
    ? GETFLDROW(2), GETFLDCOL(2)        // Результат: 10  20
    READ
 
  . Позиция текущего GET-объекта при прерывании по нажатию клавиши:
 
    ? GETFLDROW(), GETFLDCOL()          // Результат: 10  10
                                        // (предполагается, что активен
                                        // GET-объект 1)
 

See Also: COUNTGETS()
CURRENTGET()
GETFLDCOL()

 

 

 GETFLDVAR()
 Возвращает имя переменной, связанной с GET-объектом.
------------------------------------------------------------------------------
 
  Синтаксис
 
    GETFLDVAR([<nObject>]) --> cObject
 
  Параметры
 
    <nObject> - необязательный числовой параметр, задающий номер
    GET-объекта. По умолчанию используется текущий GET-объект.
 
  Возвращаемое значение
 
    cField - символьная строка, содержащая имя переменной, связанной с
    заданным GET-объектом, или пустая строка при недопустимом задании
    номера GET-объекта.
 
  Описание
 
    Функция позволяет получить доступ к переменной, связанной с заданным


    GET-объектом.
 
  Примеры
 
  . Активизация GET-объектов:
 
    @ 10, 10 GET VAR1
    @ 10, 20 GET VAR2
    @ 10, 30 GET VAR3
 
    GETFLDVAR(2)                        // "VAR2"
 
  . Имя переменной, связанной с текущим GET-объектом:
 
    READ                                // Предполагается, что текущим является
                                        // GET-объект 1
    ? GETFLDVAR()                       // Результат: "VAR1"
 

See Also: COUNTGETS()
CURRENTGET()
GETFLDROW()

 

 

 GETINPUT()
 Организует редактирование и возвращает введенные данные.
------------------------------------------------------------------------------
 
  Синтаксис
 
    GETINPUT(<xDefault>, [<nRow>], [<nColumn>],
        [<lSAY>], [<cPrompt>]) --> xInput
 
  Параметры
 
    <xDefault> - результат вычисления выражения, задающий тип данных
    возвращаемого функцией значения и текст, отображаемый в области ввода
    до начала редактирования.
 
    <nRow> - необязательный числовой параметр, задающий номер строки
    экранной позиции вывода текста, заданного параметром <cPrompt>, и
    следующей за ним области ввода. По умолчанию номер строки текущей
    позиции курсора.
 
    <nColumn> - необязательный числовой параметр, задающий номер столбца
    экранной позиции вывода текста, заданного параметром <cPrompt>, и
    следующей за ним области ввода. По умолчанию номер столбца текущей
    позиции курсора.
 
    <lSAY> - необязательный логический параметр, задающий при значении .T.
    вывод в стандартном цвете редактировавшейся области по завершении
    ввода, а при значении .F. или по умолчанию вывод в выделенном цвете.
 
    <cPrompt> - необязательный символьный параметр, задающий текст,
    выводимый на экран перед областью ввода. По умолчанию текст не
    выводится.


 
  Возвращаемое значение
 
    xInput - введенное значение того же типа, что и у параметра
    <xDefault>.
 
  Описание
 
    Функция обеспечивает ввод с редактированием, аналогичный организуемому
    последовательностью Clipper-команд @..SAY..GET... и READ.
    Редактирование производится с использованием тех же правил и клавиш,
    что и по команде READ. Длина вводимой информации, тип данных и ее
    исходное содержание определяются параметром <xDefault>, поэтому
    желаемую длину ввода можно задать с помощью предварительно
    выполняемого оператора cVAR := SPACE(<длина>). Перед областью ввода
    может быть выведен текст приглашения (как в команде @...SAY...GET),
    при этом позиция ввода соответственно смещается.
 
    Функция использует цветовые атрибуты, установленные Clipper-командой
    SET COLOR TO <стандартный>, <выделенный>.., где первое значение задает
    цветовой атрибут приглашения, а второе - цветовой атрибут
    редактируемых символов. При значении .T. параметра <lSay> по
    завершению редактирования информация будет отображаться не в
    выделенном, а в стандартном цвете. Это может быть полезно при отмене
    редактирования нажатием клавиши <Esc>.
 
  Примечания
 
  . Функция использует внутренние средства ввода Clipper и
    обеспечивает отображение текущего состояния в строке статуса
    (вставка/замена), управляемой Clipper-командой SET SCOREBOARD.  Кроме
    того, функцией учитывается текущее состояние режимов, переключаемых
    Clipper-командами SET ESCAPE, SET BELL, SET INTENSITY, SET DELIMITERS
    и SET CONFIRM, а также SET DATE и т.п..
 
  . Во время редактирования обрабатываются все прерывания по нажатию
    клавиш, приводящие к вызову процедуры, связанной с нажатой клавишей.
    Причем, позиция курсора внутри поля редактирования автоматически
    сохраняется, а после возврата управления восстанавливается.
    Вложенность рекурсивных вызовов описываемой функции ограничена только


    размером стека.
 
  . При задании параметром <xDefault> типа данных массив или блок кода
    функция возвращает пустое значение этого же типа, не осуществляя
    ввода.
 
  Примеры
 
  . Ввод с текущей позиции курсора:
 
    cVar := SPACE(20)           // Область ввода длиной 20 символов
    cVar := GETINPUT(cVar)      // Сохранение результата редактирования
 
  . Ввод 10 символов с позиции - строка 10, столбец 20:
 
    cVar := GETINPUT(SPACE(10), 10,20)
 
  . Отображение результатов редактирования не в выделенном, а в
    стандартном цвете:
 
    SET CONFIRM ON              // Завершение ввода по нажатию клавиши
                                // <Enter>
    cVAR := "Исходный текст"
    GETINPUT(cVar, 10, 20, .T., "Введите, пожалуйста:")
 
  . Ввод числовых данных и дат:
 
    cNum  := GETINPUT(12345, 10, 20, .T., "Введите, пожалуйста, число:")
    cDate := GETINPUT(DATE()-1, 11, 20, .T., "Введите, пожалуйста, дату:")
 

See Also: GETSECRET()

 

 

 GETSECRET()
 Организует скрытое редактирование и возвращает введенные данные.
------------------------------------------------------------------------------
 
  Синтаксис
 
    GETSECRET(<cDefault>, [<nRow>], [<nColumn>],
        [<lSAY>], [<cPrompt>]) --> cInput
 
  Параметры
 
    <cDefault> - символьный параметр задающий длину редактируемого поля и
    текст, отображаемый в области ввода до начала редактирования.
 
    <nRow> - необязательный числовой параметр, задающий номер строки
    экранной позиции вывода текста, заданного параметром <cPrompt>, и
    следующей за ним области ввода. По умолчанию номер строки текущей
    позиции курсора.
 
    <nColumn> - необязательный числовой параметр, задающий номер столбца
    экранной позиции вывода текста, заданного параметром <cPrompt>, и


    следующей за ним области ввода. По умолчанию номер столбца текущей
    позиции курсора.
 
    <lSAY> - необязательный логический параметр, задающий при значении .T.
    вывод в стандартном цвете редактировавшейся области по завершении
    ввода, а при значении .F. или по умолчанию вывод в выделенном цвете.
 
    <cPrompt> - необязательный символьный параметр, задающий текст,
    выводимый на экран перед областью ввода. По умолчанию текст не
    выводится.
 
  Возвращаемое значение
 
    cInput - введенная символьная строка.
 
  Описание
 
    Функция обеспечивает скрытый ввод символьных данных с редактированием,
    аналогичный организуемому последовательностью Clipper-команд
    @..SAY..GET... и READ. Вся информация в области ввода отображается в
    виде строки символов "*", что и позволяет сделать ввод скрытым.
 
    Текущая позиция редактирования может отслеживаться только по положению
    курсора. Редактирование производится с использованием тех же правил и
    клавиш, что и по команде READ. Длина вводимой информации и ее исходное
    содержание определяются параметром <cDefault>, поэтому желаемую длину
    ввода можно задать с помощью предварительно выполняемого оператора
    cVAR := SPACE(<длина>). Перед областью ввода может быть выведен текст
    приглашения (как в команде @...SAY...GET), при этом позиция ввода
    соответственно смещается.
 
    Функция использует цветовые атрибуты, установленные Clipper-командой
    SET COLOR TO <стандартный>, <выделенный>.., где первое значение задает
    цветовой атрибут приглашения, а второе - цветовой атрибут
    редактируемых символов. При значении .T. параметра <lSay> по
    завершению редактирования информация будет отображаться не в
    выделенном, а в стандартном цвете. Это может быть полезно при отмене
    редактирования нажатием клавиши <Esc>.
 
  Примечания
 
  . Функция использует внутренние средства ввода Clipper и


    обеспечивает отображение текущего состояния в строке статуса
    (вставка/замена), управляемой Clipper-командой SET SCOREBOARD.  Кроме
    того, функцией учитывается текущее состояние режимов, переключаемых
    Clipper-командами SET ESCAPE, SET BELL, SET INTENSITY, SET DELIMITERS
    и SET CONFIRM.
 
  . Во время редактирования обрабатываются все прерывания по нажатию
    клавиш, приводящие к вызову процедуры, связанной с нажатой клавишей.
    Причем, позиция курсора внутри поля редактирования автоматически
    сохраняется, а после возврата управления восстанавливается.
    Вложенность рекурсивных вызовов описываемой функции ограничена только
    размером стека.
 
  Примеры
 
  . Ввод с текущей позиции курсора:
 
    cVar := SPACE(20)           // Область ввода длиной 20 символов
    cVar := GETSECRET(cVar)     // Сохранение результата редактирования
 
  . Ввод 10 символов с позиции - строка 10, столбец 20:
 
    cVar := GETSECRET(SPACE(10), 10,20)
 
  . Отображение результатов редактирования не в выделенном, а в
    стандартном цвете:
 
    SET CONFIRM ON              // Завершение ввода по нажатию клавиши
                                // <Enter>
    cVAR := "Исходный текст"
    GETSECRET(cVar, 10, 20, .T., "Введите, пожалуйста:")
 

See Also: GETINPUT()

 

 

 RESTGETS()
 Восстанавливает установки среды и совокупность GET-объектов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    RESTGETS(<aSavedGets>) --> lRestored
 
  Параметры
 
    <aSavedGets> - массив, возвращаемый функцией SAVEGETS().
 
  Возвращаемое значение
 
    lRestored - логическое значение .T. при успешном завершении, а иначе
    .F..
 
  Описание
 
    Функция восстанавливает установки GET-системы и совокупность
    GET-объектов, сохраненные ранее функцией SAVEGETS().


При этом текущим
    становится тот GET-объект, при редактировании которого производилось
    сохранение.
 
  Примечания
 
  . Внимание! Внутри конструкции SAVEGETS()/RESTGETS() не следует
    использовать Clipper-команды CLEAR или CLEAR GETS.
 
  . Использование массива, возвращаемого функциями SAVEGETS() и
    SAVESETKEY(), корректно (из- за использования блоков кода) только при
    текущем запуске программы, поэтому сохранять эти данные в файле для
    использования при дальнейших запусках не имеет смысла.
 
  . Начиная с версии Clipper 5.0, позиция курсора в поле
    редактирования автоматически сохраняется при переключении на
    процедуру, связанную с клавишей прерывания. Поэтому для ее изменения
    при выходе из процедуры прерывания следует помещать в буфер клавиатуры
    соответствующее количество кодов клавиш управления курсором (напр., с
    помощью функции KEYSEND()).
 
  Примеры
 
  . Организация вызова процедуры HELP() при редактировании. Оба
    GET-объекта в основной программе и в процедуре HELP() используют как
    различные шаблоны редактирования, так и различные функции
    пользователя, задаваемые предложениями VALID:
 
    CLEAR
    SET KEY 28 TO HELP                  // Назначение процедуры прерывания
                                        // по нажатию клавиши <F1>
 
    cFirstname := SPACE(10)
    cLastname  := SPACE(10)
    @ 10, 10 GET cFirstname PICTURE "@!"
! 11, 10 GET cLastname PICTURE "@!" VALID MAINFUNC()
    READ
 
    *
    * Процедура HELP создает новые GET-объекты.
    *
    PROCEDURE HELP (A, B, C)
        LOCAL aOldGets
        aOldGets := SAVEGETS()          // Сохранение активных GET-объектов
        WOPEN(4, 30, 20, 76)            // Открытие окна
        WBOX()                          // Обрамление окна
        cHelp1 := SPACE(10)
        cHelp2 := SPACE(10)
        @ 10, 10 GET cHelp1 PICTURE "@A"


        @ 11, 10 GET cHelp2 PICTURE "@A" VALID HELPFUNC()
        READ
        RESTGETS(aOldGets)              // Восстановление GET-объектов
        WCLOSE()                        // Закрытие окна
        RETURN
 
    FUNCTION MAINFUNC
        SOUND(1000, 10)                 // Короткий звуковой сигнал
        RETURN(.T.)
 
    FUNCTION HELPFUNC
        SOUND(1000, 100)                // Длинный звуковой сигнал
        RETURN(.T.)
 

See Also: RESTSETKEY()
SAVEGETS()
SAVESETKEY()

 

 

 RESTSETKEY()
  Восстанавливает назначения клавиш прерывания, сохраненные SAVESETKEY().
------------------------------------------------------------------------------
 
  Синтаксис
 
    RESTSETKEY(<aSavedTraps>) --> lRestored
 
  Параметры
 
    <aSavedTraps> - массив, возвращаемый функцией SAVESETKEY().
 
  Возвращаемое значение
 
    lRestored - логическое значение .T. при успешном завершении, а иначе
    .F..
 
  Описание
 
    Функция восстанавливает назначения клавиш, выполненные командами
    SET KEY и предварительно сохраненные функцией SAVESETKEY() при текущем
    выполнении программы.
 
  Примечания
 
  . Использование массива, возвращаемого функциями SAVEGETS() и
    SAVESETKEY(), корректно (из-за использования блоков кода) только при
    текущем запуске программы, поэтому сохранять эти данные в файле для
    использования при дальнейших запусках не имеет смысла.
 
  Примеры
 
  . Переопределение клавиши <F1> с дальнейшим восстановлением:
 
    CLEAR
        SET KEY 28 TO HELP1             // Определение для <F1>
        cFirstname := SPACE(10)
        cLastname  := SPACE(10)
        @ 10, 10 GET cFirstname
        @ 11, 10 GET cLastname
        READ
 
    PROCEDURE HELP1 (A, B, C)
        WOPEN(4, 4, 20, 76)             // Открытие окна
        WBOX()                          // Обрамление окна


        aOldKey := SAVESETKEY()         // Сохранение установок
                                        // SET KEY
        aOldGet := SAVEGETS()           // Сохранение GET-объектов
        SET KEY 28 TO HELP2             // Новое определение <F1>
        cHelp1 := SPACE(10)             // Новый GET-объект,
        cHelp2 := SPACE(10)             // например, индекс HELP
        @ 10, 10 GET cFirstname
        @ 11, 10 GET cLastname
        READ
        RESTGETS(aOldGet)               // Восстановление старых GET
        RESTSETKEY(aOldKey)             // .T. при успешном
                                        // восстановлении
        WCLOSE()                        // Закрытие окна
        RETURN
 
    PROCEDURE HELP2 (A, B, C)           // Вторая процедура HELP
        * Например, расположение клавиш и т.д.
        RETURN
 

See Also: RESTGETS()
SAVEGETS()
SAVESETKEY()

 

 

 SAVEGETS()
 Сохраняет установки среды и совокупность активных GET-объектов.
------------------------------------------------------------------------------
 
  Синтаксис
 
    SAVEGETS() --> aSavedGets
 
  Возвращаемое значение
 
    aSavedGets - массив, содержащий информацию, необходимую для
    восстановления среды и активных GET-объектов.
 
  Описание
 
    Функция создает массив и заполняет его информацией о текущих
    установках GET-системы, который затем можно использовать при вызове
    функции RESTGETS().
 
  Примечания
 
  . Внимание! Внутри конструкции SAVEGETS()/RESTGETS() не следует
    использовать Clipper-команды CLEAR или CLEAR GETS.
 
  . Использование массива, возвращаемого функциями SAVEGETS() и
    SAVESETKEY(), корректно (из-за использования блоков кода) только при
    текущем запуске программы, поэтому сохранять эти данные в файле для
    использования при дальнейших запусках не имеет смысла.
 
  . Начиная с версии Clipper 5.0, позиция курсора в поле


    редактирования автоматически сохраняется при переключении на
    процедуру, связанную с клавишей прерывания. Поэтому для ее изменения
    при выходе из процедуры прерывания следует помещать в буфер клавиатуры
    соответствующее количество кодов клавиш управления курсором (напр., с
    помощью функции KEYSEND()).
 
  Примеры
 
  . Организация вызова процедуры HELP() при редактировании. Оба
    GET-объекта в основной программе и в процедуре HELP() используют как
    различные шаблоны редактирования, так и различные функции
    пользователя, задаваемые предложениями VALID:
 
    CLEAR
    SET KEY 28 TO HELP                  // Назначение процедуры прерывания
                                        // по нажатию клавиши <F1>
 
    cFirstname := SPACE(10)
    cLastname  := SPACE(10)
    @ 10, 10 GET cFirstname PICTURE "@!"
! 11, 10 GET cLastname PICTURE "@!" VALID MAINFUNC()
    READ
 
    *
    * Процедура HELP создает новые GET-объекты.
    *
    PROCEDURE HELP (A, B, C)
        LOCAL aOldGets
        aOldGets := SAVEGETS()          // Сохранение активных GET-объектов
        WOPEN(4, 30, 20, 76)            // Открытие окна
        WBOX()                          // Обрамление окна
        cHelp1 := SPACE(10)
        cHelp2 := SPACE(10)
        @ 10, 10 GET cHelp1 PICTURE "@A"
        @ 11, 10 GET cHelp2 PICTURE "@A" VALID HELPFUNC()
        READ
        RESTGETS(aOldGets)              // Восстановление GET-объектов
        WCLOSE()                        // Закрытие окна
        RETURN
 
    FUNCTION MAINFUNC
        SOUND(1000, 10)                 // Короткий звуковой сигнал
        RETURN(.T.)
 
    FUNCTION HELPFUNC
        SOUND(1000, 100)                // Длинный звуковой сигнал
        RETURN(.T.)
 

See Also: RESTGETS()
RESTSETKEY()
SAVESETKEY()

 

 

 SAVESETKEY()
 Сохраняет назначения клавиш, производимые командами SET KEY.


------------------------------------------------------------------------------
 
  Синтаксис
 
    SAVESETKEY() --> aSavedTraps
 
  Возвращаемое значение
 
    aSavedTraps - массив, содержащий информацию о текущих назначениях
    процедур клавишам, устанавливаемых Clipper-командами SET KEY.
 
  Описание
 
    Функция создает массив и заполняет его информацией о текущих
    назначениях процедур, вызываемых по нажатию клавиш, который затем
    можно восстановить с помощью функции RESTSETKEY().
 
  Примечания
 
  . Использование массива, возвращаемого функциями SAVEGETS() и
    SAVESETKEY(), корректно (из-за использования блоков кода) только при
    текущем запуске программы, поэтому сохранять эти данные в файле для
    использования при дальнейших запусках не имеет смысла.
 
  Примеры
 
  . Переопределение клавиши <F1> с дальнейшим восстановлением:
 
    CLEAR
        SET KEY 28 TO HELP1                     // Определение
для <F1>
        cFirstname := SPACE(10)
        cLastname  := SPACE(10)
        @ 10, 10 GET cFirstname
        @ 11, 10 GET cLastname
        READ
 
    PROCEDURE HELP1 (A, B, C)
        WOPEN(4, 4, 20, 76)                     // Открытие окна
        WBOX()                                  // Обрамление окна
        aOldKey := SAVESETKEY()                 // Сохранение установок
                                                // SET KEY
        aOldGet := SAVEGETS()                   // Сохранение GET-объектов
        SET KEY 28 TO HELP2                     // Новое определение <F1>
        cHelp1 := SPACE(10)                     // Новый GET-объект,
        cHelp2 := SPACE(10)                     // например, индекс HELP
        @ 10, 10 GET cFirstname
        @ 11, 10 GET cLastname
        READ
        RESTGETS(aOldGet)                       // Восстановление
старых GET
        RESTSETKEY(aOldKey)                     // .T.при успешном
                                                // восстановлении,
        WCLOSE()                                // Закрытие окна
        RETURN
 
    PROCEDURE HELP2 (A, B, C)                   // Вторая
процедура HELP
        * Например, расположение клавиш и т.д.
        RETURN
 

See Also: RESTGETS() RESTSETKEY() SAVEGETS()
 
 
 

Содержание раздела