13.2. SYSTEM

About
Functions order

13.2.1. About SYSTEM

13.2.2. SYSTEM functions order

COMPILEFILE() Компиляция файла.
COMPILESTRING() Компиляция строки.
DEFPATH() Возвращает правильный путь, установленный по SET DEFAULT.
DIRECTORY() Создает массив с информацией о каталогах и файлах.
DOSERROR() Возвращает номер последней ошибки DOS.
ERRORBLOCK() Отправляет блок кода на выполнение при возникновении ошибки времени
ERRORLEVEL() Устанавливает код завершения xClipper-программы.
FERROR() Проверяет наличие ошибок обработки двоичных файлов.
GETENV() Возвращает значение переменной среды OS.
LOAD() Загрузка байт-кода или динамической библиотеки.
LOADBLOCK() Загрузка байт-кода.
MEMORY() Определяет количество байтов свободной оперативной памяти.
NETERR() Индицирует сбой выполнения команд при работе в сети.
NETNAME() Возвращает идентификатор текущей рабочей станции.
OS() Возвращает имя операционной системы.
PCOUNT() Определяет позицию последнего переданного аргумента.
PROCLINE() Возвращает номер строки исходной программы текущего или предыдущего вызова.
PROCNAME() Возвращает имя текущей или предыдущей процедуры или функции
QOUT() Выводит список выражений на консоль.
SET() Возвращает и изменяет глобальные установки.
SLEEP() Остановить выполнение программы на заданное количество секунд и(или) милисекунд.
SYSCMD() Выполнить системную команду.
ULIMIT() Установить лимит на использование системных ресурсов.
VERSION() Возвращает номер версии xClipper.

13.2.2.2. Function COMPILESTRING()

 COMPILESTRING(<sString>, <@sError>) 	--> <CodeBlock>

13.2.2.4. Function DIRECTORY()

 DIRECTORY(<шаблон поиска>,[<атрибуты>]) -> массив файлов

13.2.2.4.1. Arguments

13.2.2.5. Function DOSERROR()

 DOSERROR([<новый код ошибки>]) --> код ошибки

13.2.2.6. Function ERRORBLOCK()

 ERRORBLOCK([<блок обработки ошибки>]) --> текущий блок обработки ошибки

13.2.2.6.3. Description

ERRORBLOCK() - это функция обработки ошибок, определяющая обработчик ошибок, который выполняется при возникновении ошибки времени выполнения. Обработчик ошибок описывается в виде блока кода в следующей форме:

{ | <ERROR-объект> | <список выражений>, ... }

При этом <ERROR-объект> - это ERROR-объект, содержащий информацию об ошибке. Для получения информации об ошибке вместе с блоком кода в ERROR объект могут быть переданы соответствующие сообщения. Возвратив значение "истина" (.T.), блок обработки ошибки пытается повторно выполнить операцию, приведшую к ошибке, после чего возвращает значение "ложь" (.F.).

Блок кода, обрабатывающий ошибку, может быть описан как список выражений или как вызов функции пользователя. Вызов из блока кода функции пользователя более предпочтителен, так как в этом случае можно вместо выражений использовать операторы и команды xClipper для обработки ошибок.

Обычным является прием программирования, когда программа содержит управляющую структуру BEGIN SEQUENCE, и при возникновении ошибки вы хотите управление передать командой BREAK на первую команду предложения RECOVER. Предполагается, что блок обработки ошибок может использоваться с управляющей структурой BEGIN SEQUENCE...END. При помощи блока обработки ошибок можно контролировать работу устройств, обычных ошибок и ошибок низшего уровня, так как это - универсальный механизм восстановления.

Если требуются нестандартные действия по обработке ошибки, необходимо определить BEGIN SEQUENCE и затем командой BREAK передать управление на первый оператор предложения RECOVER, возвратив ERROR-объект для локальной обработки ( смотри пример ниже ).

Если при помощи ERRORBLOCK() не было определено ни одного блока кода <блок обработки ошибки> и возникла ошибка времени выполнения, выполнится блок обработки ошибок, заданный по умолчанию. При этом на экран будет выдано сообщение об ошибке, ERRORLEVEL() примет значение 1, после чего выполнится команда QUIT.

После того, как ERRORBLOCK() возвратит текущий блок обработки ошибок, появляется возможность определить блок обработки ошибок с последующим его восстановлением после того, как завершатся операции. И еще, важным свойством обработчиков ошибок, описываемых как блоки кода, является тот факт, что они могут быть переданы процедурам и функциям пользователя и могут быть их возвращаемыми значениями.

За более подробной информацией о структуре и операциях ERROR-объекта обращайтесь в раздел "Error класс" в главе " Стандартные классы".

13.2.2.7. Function ERRORLEVEL()

 ERRORLEVEL([<код завершения>]) --> текущий код завершения

13.2.2.7.3. Description

ERRORLEVEL() является функцией среды с двойным назначением. Она возвращает текущий код завершения xClipper и необязательно устанавливает новый код завершения. Код завершения является значением, установленным дочерним процессом, чтобы родительский процесс мог проверить состояние завершения дочернего процесса. Типичный случай - когда родительским процессом является OS, а дочерним процессом - прикладная программа. Код завершения может быть получен с помощью команды OS ERRORLEVEL или прерывания INT 21 функции 4Dh.

При завершении xClipper-программы код завершения устанавливается в 1, если процесс заканчивается фатальной ошибкой. При нормальном завершении программы код завершения устанавливается в нуль или в значение последней ERRORLEVEL(), установленное в программе.

Обычно устанавливают код завершения при помощью ERRORLEVEL(), чтобы указать тип ошибки программе, которая вызвала текущую программу xClipper. В большинстве случаев это командный файл прикладной программы. Здесь проверяется код завершения путем использования команды OS ERRORLEVEL. За более подробной информацией обращайтесь к руководству по OS.

13.2.2.8. Function FERROR()

 FERROR() --> код ошибки

13.2.2.9. Function GETENV()

 GETENV (<переменная среды OS>) --> строка

13.2.2.12. Function MEMORY()

 MEMORY(<арифметическое выражение>) --> к-во байтов

13.2.2.13. Function NETERR()

 NETERR([<признак новой ошибки>]) --> признак ошибки

13.2.2.13.3. Description

NETERR() - это сетевая функция. Она используется для проверки прикладной программой успешности выполнения команд USE, USE EXCLUSIVE и APPEND BLANK в сети. В следующую далее таблицу сведены условия возвращения функцией NETERR() (устанавливаемые в DefError()) значения "истина" (.T.):

 Значения NETERR() - "истина" (.T.).
 ---------------------------------------------------------------------
 Команда          Ситуация
 ---------------------------------------------------------------------
 USE              Команда USE EXCLUSIVE в другом процессе
 USE EXCLUSIVE    Команды USE или USE EXCLUSIVE в другом процессе
 APPEND BLANK     FLOCK() другим пользователем или RLOCK() для
 записи LASTREC()+1
 ---------------------------------------------------------------------
 

Если возвращенное функцией NETERR() значение - "ложь" (.F.), то можно выполнять следующую команду. Например, после успешного выполнения USE можно открывать индексный файл, а после успешного выполнения APPEND BLANK можно заполнять поля записи командами REPLACE или @...GET. В противном случае, необходимо обработать ошибку и либо повторить команды USE и APPEND BLANK, либо прервать операцию командами BREAK или RETURN.

13.2.2.16. Function PCOUNT()

 PCOUNT() --> позиция последнего аргумента

13.2.2.17. Function PROCLINE()

 PROCLINE([<номер вызова>]) --> номер строки исходной программы

13.2.2.17.3. Description

PROCLINE() запрашивает стек вызова xClipper для определения последней выполняемой строки в текущей процедуре, функции пользователя или блоке кода. Стек вызова - это внутренняя структура, которая поддерживает запись каждого вызова процедуры, функции пользователя, блока кода. Номер строки считывается относительно начала исходного файла программы. Строка содержит в себе комментарии, пустые строки, директивы компилятору и препроцессору, продолжение строки. Строка может содержать несколько операторов.

Текущий вызов - это номер строки вызова PROCLINE().

Предыдущий вызов - это номер строки процедуры или функции пользователя, откуда была вызвана процедура или функция пользователя, содержащая функцию PROCLINE().

Если вызов требует вычисления блока кода, то PROCLINE() возвращает номер строки процедуры, где этот блок кода был определен. PROCLINE() используется в сочетании с функцией PROCNAME() для выдачи отладочной информации.

13.2.2.18. Function PROCNAME()

 PROCNAME([<номер вызова>]) --> имя процедуры

13.2.2.19. Function QOUT()

 QOUT([<список выражений>]) --> NIL
 QQOUT([<список выражений>]) --> NIL

13.2.2.19.3. Description

QOUT() и QQOUT() - это консольные функции. Они являются функциональными примитивами для создания соответственно команд ? и ??. Подобно командам ? и ?? они используются для того, чтобы вывести на консоль результаты расчета одного или более выражений. QOUT() перед выводом значений аргумента <список выражений> посылает управляющие символы "перевод строки/возврат каретки".

QQOUT() выводит значение аргумента <список выражений> начиная с текущей позиции ROW() и COL(). При выводе на консоль с помощью QOUT() и QQOUT() значения ROW() и COL() обновляются.

Если SET PRINTER установлен в режим (ON), то обновляются PROW() и PCOL(). Если аргумент <список выражений> задан, то и QOUT() и QQOUT() выводят пробел между результатами каждого выражения.

QOUT() и QQOUT() могут быть использованы для вывода на консоль внутри выражения. Это особенно полезно для блоков итерационных функций, таких как AEVAL() и DBEVAL(), и в списке операторов в выходном шаблоне команд, определенных пользователем.

13.2.2.20. Function SET()

 SET(<режим>, [<новое значение режима>], [<признак режима добавления>])
 --> текущее значение режима

13.2.2.20.1. Arguments

<режим> - является числовым значением, которое задает режим,
  подлежащий проверке или изменению. Значение аргумента <режим> должно
  задаваться в виде явной константы (см. ниже).
  
<новое значение режима> является необязательным параметром, который
  задает новое значение для заданного режима. Тип аргумента <новое
  значение режима> зависит от значения аргумента <режим>.
  
<признак режима добавления> логическое значение, которое указывает,
  будут ли файлы, открытые для следующих установок:
  _SET_ALTFILE,_SET_PRINTFILE,_SET_EXTRAFILE
  обрезаться до нулевой длины или открываться в режиме добавления.
  Значение "ложь" (.F.) означает, что файл должен быть обрезан до
  нулевой длины. Значение "истина" (.T.) означает, что файл должен быть
  открыт в режиме добавления. В любом случае, если файл не существует,
  то он создается.
  
  При отсутствии этого аргумента по умолчанию принимается режим
  добавления.

13.2.2.20.3. Description

SET() является системной функцией, которая разрешает проверку или изменение значений глобальных режимов xClipper. Для получения информации о смысловом значении и диапазоне допустимых значений для конкретного режима обратитесь к соответствующей команде или функции.

Режим, подлежащий проверке или изменению, задается путем использования явной константы. Эти константы определяются в файле описаний Set.ch.

Этот файл описаний должен быть включен в начало любого исходного файла, использующего функцию SET().

Файл Set.ch определяет также константу, названную _SET_COUNT. Ее значение - количество режимов, которые могут быть изменены или проверены при помощи функции SET(), позволяя осуществить построение функции, сохраняющей все режимы (см. пример, приведенный ниже).

Примечание: Числовые значения явных констант в файле Set.ch зависят от версии, и они никогда не должны использоваться прямо. Допускается использование только явных констант.

Если значения аргументов <режим> или <новое значение режима> являются недопустимыми, вызов SET() игнорируется.

 Значения режимов, устанавливаемых функцией SET() и определенных в файле Set.ch.
 ---------------------------------------------------------------------
 Константа        Тип значения      Соответствующая команда или функция
 ---------------------------------------------------------------------
 _SET_EXACT       Логическое        SET EXACT
 _SET_FIXED       Логическое        SET FIXED
 _SET_DECIMALS    Числовое          SET DECIMALS
 _SET_DATEFORMAT  Символьное        SET DATE
 _SET_EPOCH       Числовое          SET EPOCH
 _SET_PATH        Символьное        SET PATH
 _SET_DEFAULT     Символьное        SET DEFAULT
 _SET_EXCLUSIVE   Логическое        SET EXCLUSIVE
 _SET_SOFTSEEK    Логическое        SET SOFTSEEK
 _SET_UNIQUE      Логическое        SET UNIQUE
 _SET_DELETED     Логическое        SET DELETED
 _SET_CANCEL      Логическое        SETCANCEL()
 _SET_DEBUG       Логическое        ALTD()
 _SET_COLOR       Символьное        SETCOLOR()
 _SET_CURSOR      Числовое          SETCURSOR()
 _SET_CONSOLE     Логическое        SET CONSOLE
 _SET_ALTERNATE   Логическое        SET ALTERNATE
 _SET_ALTFILE     Символьное        SET ALTERNATE TO
 _SET_DEVICE      Символьное        SET DEVICE
 _SET_PRINTER     Логическое        SET PRINTER
 _SET_PRINTFILE   Символьное        SET PRINTER TO
 _SET_MARGIN      Числовое          SET MARGIN
 _SET_BELL        Логическое        SET BELL
 _SET_CONFIRM     Логическое        SET CONFIRM
 _SET_ESCAPE      Логическое        SET ESCAPE
 _SET_INSERT      Логическое        READINSERT()
 _SET_EXIT        Логическое        READEXIT()
 _SET_INTENSITY   Логическое        SET INTENSITY
 _SET_SCOREBOARD  Логическое        SET SCOREBOARD
 _SET_DELIMITERS  Логическое        SET DELIMITERS
 _SET_DELIMCHARS  Символьное        SET DELIMITERS TO
 _SET_WRAP        Логическое        SET WRAP
 _SET_MESSAGE     Числовое          SET MESSAGE
 _SET_MCENTER     Логическое        SET MESSAGE
 ---------------------------------------------------------------------