SYSTEM

Name

SYSTEM -- 

Function

TRUE || FALSE       COMPILEFILE(<sFileName>, <sFlags>, <@sError>)
<CodeBlock>         COMPILESTRING(<sString>, <@sError>)
<cPath>             DefPath()
aDirectory          DIRECTORY(<cDirSpec>, [<cAttributes>])
nOsCode             DOSERROR([<nNewOsCode>])
bCurrentErrorHandlerERRORBLOCK([<bErrorHandler>])
nCurrentReturnCode  ERRORLEVEL([<nNewReturnCode>])
nErrorCode          FERROR()
cString             GETENV(<cEnvironmentVariable>)
<CodeBlock>         LOAD(<sFileName>)
<CodeBlock>         LOADBLOCK(<sFileName>)
nKbytes             MEMORY(<nExp>)
lError              NETERR([<lNewError>])
cWorkstationName    NETNAME()
cOsName             OS()
nLastArgumentPos    PCOUNT()
nSourceLine         PROCLINE([<nActivation>])
cProcedureName      PROCNAME([<nActivation>])
NIL                 QOUT([<exp list>]) --> NIL QQOUT([<exp list>])
CurrentSetting      SET(<nSpecifier>, [<expNewSetting>], [<lOpenMode>])
NIL                 SLEEP(<nSec>)
<nResultCode>       SYSCMD(<sCmd>, <sStdin>, @<sResult>, @<sError>)
<vOldLimitValue>    ULIMIT(<sResName>, <vLimitVal>)
cVersion            VERSION()

Description

Function COMPILEFILE()

 COMPILEFILE(<sFileName>, <sFlags>, <@sError>) 	--> TRUE || FALSE

COMPILEFILE() компилирует файл <sFileName> с флагами <sFlags> и возвращает TRUE в случае успеха, иначе возвращает FALSE и <sError> содержит описание ошибки.

Function COMPILESTRING()

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

COMPILESTRING() компилирует строку <sString> и возвращает полученный кодовый блок. <sError> содержит описание ошибки, если таковая возникла в процессе компиляции.

Исходная строка может содержать любые CLIP конструкции, команды, за исключением описания нестатических функций. <sString> должна начинаться с описания параметров (если они есть) без описания названий функции или процедуры. См пример.

Function DEFPATH()

 DefPath() --> <cPath>

Возвращает путь, установленный по SET DEFAULT, с завершающим символом PATH_DELIM или :. Если SET DEFAULT специально не задан (пуст), то ничего не добавляет.

Function DIRECTORY()

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

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

DIRECTORY() может быть использована для обработки групп файлов. Создав блок кода, который сможет обрабатывать все файлы, выбираемые в соответствии со значением <шаблон поиска>, можно использовать DIRECTORY() в комбинации с функцией AEVAL().

Для удобства пользования элементами подмассива в комплект поставки xClipper входит файл описаний directory.ch, помещаемый в директорию \include, определяющий имена элементов подмассива.

<шаблон поиска>

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

Атрибуты функции DIRECTORY().
---------------------------------------------------------------------
Атрибут       Значение
---------------------------------------------------------------------
H             Включаются скрытые файлы
S             Включаются системные файлы
D             Включаются имена каталогов
V             Ищется метка тома DOS. Все остальные файлы исключаются
---------------------------------------------------------------------
Информация о файлах может присутствовать в подмассивах, только если не используется атрибут V.

Returns :

DIRECTORY() возвращает массив, в котором каждый элемент является подмассивом, содержащим информацию об очередном файле, выбранном в соответствии с аргументом <шаблон поиска>. Подмассив имеет следующую структуру:

Структура подмассивов функции DIRECTORY().
 ---------------------------------------------------------------------
 Позиция          Метасимвол           Directry.ch
 ---------------------------------------------------------------------
 1               cName                 F_NAME
 2               nSize                 F_SIZE
 3               dDate                 F_DATE
 4               cTime                 F_TIME
 5               cAttributes           F_ATT
 ---------------------------------------------------------------------
 
Если не найдено файлов, соответствующих <шаблон поиска>, или в <шаблон поиска> указан неверный маршрут доступа или спецификация файла, то функция DIRECTORY() возвращает пустой ({}) массив.

See also : AEVAL()

Function DOSERROR()

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

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

При возникновении ошибки в процессе выполнения программы, если это ошибка DOS, функция DOSERROR() примет значение ее кода. Это значение сохранится до возникновения следующей ошибки. Если возникшая ошибка не является ошибкой DOS, DOSERROR() примет значение 0. При возникновении ошибок в процессе низкоуровневой обработки файлов значение функций FERROR() и DOSERROR() одинаковы.

Function ERRORBLOCK()

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

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 класс" в главе " Стандартные классы".

Function ERRORLEVEL()

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

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

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

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

Function FERROR()

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

FERROR() является функцией обработки файлов низкого уровня. Она используется для уточнения ошибки DOS после применения какой-либо из функций обработки файлов. К этим функциям относятся: FCLOSE(), FCREATE(), FERASE(), FOPEN(), FREAD(), FREADSTR() и FRENAME(). Функция FERROR() сохраняет свое значение до следующего выполнения вышеуказанных функций.

Предупреждение: Данная функция позволяет осуществлять доступ низкого уровня к файлам и устройствам DOS. Она должна использоваться чрезвычайно осторожно и требует хороших знаний операционной системы.

Function GETENV()

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

GETENV() - это функция среды, которая позволяет вам получать в прикладной программе информацию о конфигурации среды OS. Как правило, это информация о размещении файлов ( базы данных, индекса, меток или отчетов). Эта функция особенно полезна в сетевой среде.

Function LOAD()

 LOAD(<sFileName>) 	--> <CodeBlock>

LOAD() зачитывает файл <sFileName> и возвращает кодовый блок. <sFile> это байт-код файл "filename.po" или динамическая библиотека "filename.so". Все не статик функции, объявленные в файле, становятся доступными для использования.

Function LOADBLOCK()

 LOADBLOCK(<sFileName>) 	--> <CodeBlock>

LOADBLOCK() загружает байт-код файл <sFileName> и возвращает кодовый блок. Байт-код файл может быть создан:

clip -p filename.prg

Правила и структура файла filename.prg должны соответствовать правилам для строки из функции COMPILESTRING().

Function MEMORY()

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

MEMORY() - функция среды, которая сообщает различные состояния пула свободной оперативной памяти. В этой области располагаются символьные строки и программы, вызываемые командой RUN.

Function NETERR()

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

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.

Function NETNAME()

 NETNAME() --> имя рабочей станции

Function OS()

 OS() --> имя операционной системы

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

Function PCOUNT()

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

PCOUNT() возвращает позицию последнего аргумента в списке аргументов, передаваемых при вызове процедуры или функции пользователя. Эта информация полезна при определении, были ли аргументы опущены в конце списка аргументов.

Аргументы, пропущенные в середине списка, из списка не исключаются, а замещаются значениями NIL.

Чтобы определить, получил ли параметр значение, необходимо проверить, имеет ли он значение NIL. Пропущенные параметры являются неинициализированными, следовательно, при обращении к ним возвращают NIL. Другой метод проверки параметров - с помощью функции VALTYPE(). Она может устанавливать, был ли аргумент передан и в то же время проверяет корректность его типа. Если параметр не был определен, то подразумевается значение по умолчанию.

Function PROCLINE()

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

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

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

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

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

Function PROCNAME()

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

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

Для текущего вызова PROCNAME() возвращает имя текущей процедуры или функции пользователя. Для предыдущего вызова PROCNAME() возвращает имя процедуры или функции пользователя, вызвавшей текущую процедуру.

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

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

Function QOUT()

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

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

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

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

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

Function SET()

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

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
 ---------------------------------------------------------------------
 

<режим>

- является числовым значением, которое задает режим, подлежащий проверке или изменению. Значение аргумента <режим> должно задаваться в виде явной константы (см. ниже).

<новое значение режима>

является необязательным параметром, который задает новое значение для заданного режима. Тип аргумента <новое значение режима> зависит от значения аргумента <режим>.

<признак режима добавления>

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

Returns :

SET() возвращает текущее значение заданного режима.

Function SLEEP()

 SLEEP(<nSec>) 	--> NIL

SLEEP() останавливает программу на время, пока не истекли указанные секунды.

Function SYSCMD()

 SYSCMD(<sCmd>, <sStdin>, @<sResult>, @<sError>) 	--> <nResultCode>

SYSCMD() выполняет системную команду <sCmd>, посылая ей на входной стандартный поток строку <sStdin>. Весь stdout будет записан в буфер <sResult>, а весь stderr - в <sErr>.

<sResult> и <sError> не могут быть объявлены как константы.

Function ULIMIT()

 ULIMIT(<sResName>, <vLimitVal>) 	--> <vOldLimitValue>

ULIMIT() устанавливает новое значение <vLimitVal> на использование системного ресурса с именем <sResName> и возвращает старое значение этого ресурса.

Список возможных значений ресурсов см. в ulimit.ch

Function VERSION()

 VERSION() --> номер версии

VERSION() - функция среды, которая возвращает номер версии xClipper библиотеки EXTEND.LIB.