#### Описание новых функций

#### A2EDIT

Тоже что и dbedit, но обрабатывает двумерный массив.

#### str=addslashes(str) </a4>

     Returns a string with backslashes before characters that need to be quoted
     in database queries etc. These characters are single quote ('), double quote
     ("), backslash (\) and NUL (the null byte).

#### ASCAN

тоже что и обычный ascan, только добавлен еще один параметр "искать с конца".

#### BETWEEN

between(value,min,max) - возвращает находиться ли значение value в пределах от min до max или от max до min. Сравнивает любые типы данных.

#### CLIP

clip("funcname",param1,param2,....paramN) - запускает функцию funcname, передает ей параметры param1....paramN и возвращает то значение, которое возвращает funcname. Пример
clip("substr","asdfghjkl",2,3) // -> "sdf"

#### CSCOUNT

cscount(char,string) - возвращает кол-во char в string

#### compileFile(filename,flags,@error)

Компилирует файл filename с ключами компилятора flags, описание ошибок складывает в error, возвращает .t. | .f.

#### compileString(str,@error)

компилирует строку str, возвращает кодовый блок, описание ошибки складывает в error.
В компилируемой строке могут быть любые конструкции, команды и т.п. Вообщем все что может переварить clip, потому-что он и вызывается :). НО !!! В этой строке не может быть объявлений нестатических функций, начинатся она должна с приема параметров без каких либо описаний названия функции или процедуры. Примерно так:

    str:="
    parameters p1,p2
       qout(p1,p2)
       localfunc1(p1,p2)
    return p1+p2
    static function localfunc1(fp1,fp2)
       qout("called local function in string compiled block")
    return p1-p2"

    block:=compileString(str,@err)
    if empty(err)
           x:=eval(block,1,2) // выведет значения p1 и p2
           ? x //выведет значение p1+p2
    else
           ? err // описание ошибки
    endif

#### loadblock(filename.po)

читает filename.po и выдает на выходе блок кода.
filename.po можно получить скомпилировав
clip -p filename.prg
правила и структура filename.prg должна соответсвовать правилам для строки из функции compileString().

#### DBRANGE

dbrange(index_name,min_value,max_value) - устанавливает ограничение для навигационных функций (skip,locate,...) по значению индекса. Практически эта функция является эквивалентом setfilter, но работает только по тем значениям, которые есть в качестве ключей в индексном файле и исполняется на несколько порядков быстрее.

#### DOSPATH

dospath( unix_file_name ) - возвращает досовское имя файла в соответствии с назначениями дисков, сделанными через set( "C:", ... )

#### dStrToN

dStrToN( string ) - преобразует строку с double-представлением в clipper-число.
Например:
fread(file,@str,8)
n=dStrToN(str)

#### fStrToN

fStrToN( string ) - преобразует строку с float-представлением в clipper-число.
Например:
fread(file,@str,4)
n=fStrToN(str)

#### FILEATTRS

fileattrs(filename) - работает как fileattr, только вместо цифрового кода атрибутов файла возвращается строка символов: A - архивный, H - скрытый, R - только чтение, D - каталог

#### FILEDIALOG, DISKFILEDIALOG

filedialog(dir,mask) - предоставляет диалог для выбора файла, начиная с каталога dir, предоставляя для выбора файлы, удовлетворяющие маске mask.
diskFileDialog(driver,drv,dir,mask) - также как и filedialog - выбирает нужный файл, но еще предоставляет возможность выбирать и диск, на котором выбирать файл. driver - список дисков, drv - номер текущего диска.

#### FILEGETSTR

filegetstr(fhandle,max_size) - читает из файла, ранее открытого FOPEN(), строку ограниченную CRLF или CR, но не более max_size символов.

#### FACCESS

fACCESS(filename,mode) - проверяет имеется ли доступ к filename с правами mode в виде rwx-rwx-rwx.

#### GLOB

glob(str,pattern, caseflag) - проверяет соответсвует ли str регулярному выражению pattern с учетом или без учета регистра символов. Поддерживает только упрощенные регулярные выражения.

#### HASHSTR

hashstr(str_value) - выдает число от 1000000 до MAX_LONG, которое почти гарантировано имеет уникальное значение.

#### HASHNAME

hashName(hash_value) - возвращает значение из которого был получен это значение hash_value

#### gd*()

Пакет функций gd*() для работы с файлами png,jpeg..... и набор функций для генерации графических примитивов прямоугольники, окружности, линии, ....
Оригинальная документация самой библиотеки libgd
Clipper-функции, аналогичные С-ишным
Класс gdImage - обработка графических файлов

#### gzip.so

Все функции GZIP*() вынесены в отдельную динамически загружаемую библиотеку gzip.so, обязательно перед первым вызовом любой из функций GZIP*() надо делать load("gzip.so").

#### GZIPOPEN

gzipOpen(filename [,mode]) - открывает GZIP файл с именем filename и режимом mode, по умолчанию на чтение.
Mode могут быть следующими:
"rb" - чтение в бинарном режиме
"wbX" - запись со степенью упаковки X в диапазоне от 0 до 9

#### GZIPREAD

gzipRead(handle, @buffer [,len]) - читает и распаковывает данные из открытого GZIP файл с номером handle в заранее выделенный буффер buffer len байт.
s:=space(1000)
realLen=gzipRead(h,@s,300)

#### GZIPWRITE

gzipWrite(handle, str_data [,len]) - запаковывает len байт из str_data и записывает в GZIP-файл. Обязятельно надо явно вызвать gzipclose(), чтобы сбросились все буфера !!!

#### GZIPCLOSE

gzipClose(handle) - закрывает GZIP-файл

#### HTML-класс и HTML_TAG-класс

#### INLIST

inlist(value,p1,p2,...pn) - возвращает иммется ли среди p1...pn значение value.

#### ISFIELD

isfield("varname") - возвращает, является ли данное имя переменной связанной с именем поля в данный момент выполнения программы.

#### ISFUNCTION

isfunction("func_name") - возвращает, является ли данное имя функцией, т.е. возможно ли вызвать функцию с именем func_name.

#### ISMEMVAR

isfield("varname") - возвращает, является ли данное имя переменной связанной с переменной памяти (PRIVATE,PUBLIC) в данный момент выполнения программы.

#### LIKE

like(mask,string) - возвращает, соответсвует ли string маске. В качестве маски могут быть спецсимволы *,?,.

#### LOAD

Load("filename.po") - зачитывает po-файл (внешний кодовый блок) и регистрирует все не-статик функции, объявленные в этом модуле, доступными для дальнейшего использования как и обычные клиппер-функции.
Load("filename.so") - зачитывает динамическую библиотеку во время работы программы, и делает доступными клиппер-функции.

#### MAP

map() - создает пустой объект (ассоциативный массив)

#### MAPMODIFY

map(map_obj, [ .t. | .f. ]) - включает / отключает режим котроля изменений атрибутов объекта, возвращает старое значение режима. В случае если у объекта map_obj имеется метод modify, то при включенном контроле перед попыткой изменить атрибут объекта будет вызываться
map_obj:modify(hash_attrib, new_value ) и этот метод должен вернуть новое значение, которое надо прописать в атрибут с hash-кодом hash_attrib.

#### MAKEPATH

makepath(dos_path) - возвращает юниксовый путь для заданного dos-пути.
Например makepath("c:\clip\ca_dbu") выдаст /usr/home/uri/clip/ca_dbu

#### MEMVARGET

memvarget(varname) -> возвращает значение MEMVAR переменной varname

#### MEMVARSET

memvarset(varname,data) -> устанавливает значение MEMVAR переменной с именем varname в значение data, возвращает успешно ли проведено данная операция

#### PARAM

param(i) - возвращает значение i-того параметра функции, очень часто это избавляет от использования макроподставновок.

#### RUN_BLANK

run_blank(filename,stdinFlag) - интерпретирует шаблон документа и выводит его либо на stdin либо во временный файл, возвращает имя файла с готовым документом.
_run_blank(intext,stdinFlag) - тоже самое делает со входной строкой intext.

#### SEARCH

Поиск по регулярному выражению в строке.
search(pattern, string[, reg[, from[, range]]])
pattern - шаблон поиска
string - строка, где ищется регулярное выражение
reg - регистр - массив, куда будет записан результат поиска
reg[i][1] - начало регулярного выражения
reg[i][2] - конец
reg[i][3] - длина
from - позиция, с которой начинать искать
range - это значение сдвигов, при которых проверяется совпадение, относительно from; т.е. при range==0 проверяется только позция from; при range==1 проверяются позиции from, from+1; при range==-1 проверяются позиции from, from-1
Функция возвращает .t. -в случае успешного поиска и .f. в противном случае.

#### SET

Как и раньше функция set возвращает предыдущее значение.
1. set(_SET_LOGLEVEL) - устанавливает уровень логирования для функции outlog()
2. set(_SET_LOGFILE, filename) - устанавливает имя файла для записи лог-информации
3. set(string_key,string_value) - для любой произвольной строки-ключа запоминает любую произвольную строку-значение. Будьте внимательны - запоминаются только строковые значения
4. set(dos_hdd,unix_path) - устанавливает соотвествие между именем диска в DOS и пути в юниксовых системах.
Например set("C:","/usr/home/uri") назначит диску C: путь /usr/home/uri.

#### STARTPATH

Возвращает полный путь и имя стартовавшей программы.

#### SLEEP

sleep(sec.msec) - останавливает выполнение программы на заказанное количество секунд и милисекунд. Никакой гарантии что программа будет остановлена на данное кол-во МИЛЛИСЕКУНД не дается. Разве что в тех операционных системах, где такие гарантии могут быть предоставлены.

#### STACK - class

o:=stackNew() - создает новый стек
o:push(var_data) - добавляет в стек новые данные
o:pop() - выдает последнее значение, положенное в стек и удаляет его
o:len() - выдает длину стека
o:free() - очищает все данные в стеке

#### START() - start task

start("funcname"| {||codeblock} | @funcname(),par1,...parN) - запускает в паралельном режиме функцию funcname или кодовый блок или адрес статической функции и передает ей параметры par1,...parN.

#### TASKSTOP(), TASKSTART()

Останавливает/распускает выполнение всех task`ов кроме текущего,

#### SYSCMD

syscmd(cmd,stdin_string,@res_buf,@err_buf) - выполняет системную команду, посылает этой команде на стандартный входной поток stdin_string, записывает в err_buf все что выводиться в stderr, записывает в res_buf весь вывод stdout и возвращает значение, возвращаемое cmd.
res_buf и err_buf не могут быть объявлены как константы
Например:
err_buf=space(0)
res_buf=space(0)
result_code=syscmd("grep -i uri ","тут был uri",@res_buf,@err_buf)

#### ulimit(limit_info,limit_value)

устанавливает ограничение на использование пользователем системных ресурсов. Возможные значения limit_info описаны в ulimit.ch. Возвращает старое значение limit_info.

#### MEDIT

medit(par, ntop, nleft, nbot, nright, user_func, tab_size, bline, bpos, wline, wpos)
многооконный текстовый редактор с менюшками и прибамбасами, построен на базе класса TEXTEDIT. Более подробное описание см. здесь

#### TCPconnect(host,port,timeout)

Соединяется с сервером host и создает сокет к порту port, возвращает номер соединения или -1. ferror() хранит номер ошибки соединения

#### TCPread(sHandle,@buffer,len,timeout)

Аналогично fread() читает в buffer данные из соединения, возвращает кол-во прочитанных байт или -1. ferror() хранит номер ошибки чтения

#### TCPwrite(sHandle,data,len,timeout)

Аналогично fwrite() пытется передать данные в соединение, возвращает кол-во переданных байт или -1. ferror() хранит номер ошибки записи

#### TCPclose(sHandle)

закрывает соединение

#### weightTable

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

#### weightAsc

weightAsc(string) - выдает весовую характеристику первого символа строки.

#### weightChr

weightChr(num) - выдает строку из одного символа, соответсвующего переданной весовой характеристике.

#### uucode,uudecode,var2str,str2var

© Ю.Хныкин, uri@itk.ru, 2000