#### Полезные утилиты

CLIP - компилятор и сборщик программ

clip_dbg,clip_cld - отладчики

clip_hindex,clip_hseek - hyper text/HTML индексация и поиск.

### CLIP_WE - многооконный текстовый редактор

Текстовый редактор с приличными возможностями, базирующийся на классах textedit, medit

### CLIP_BLANK - интерпретатор шаблонов документов

Шаблон документа представляет из себя текст со встроеными в него clipper-выражениями. Например кусок платежки (жаль что бравзеры неправильно показывают псевдографику):

    **********************************************************
    pen:=strsumma(platdoc->SUMMA)
    pen1:=""
    pen2:=""
    #IF len(pen)>65
    	  pen:=alltrim(pen)
    	  s:=substr(pen,1,65)
    	  s:=substr(s,1,rat(' ',s))
    	  pen1:=substr(pen,len(s)+1)
    	  pen:=s
    #ENDIF
    *************************************
    nnn:=padr(alltrim(str(platdoc->no_pp,4,0)),4)
    telegr:=1
    aaa:=readkeyb(,,"1-почтой, 2-телеграфом, 3-электронно",@telegr)
    telegr:=iif(telegr==2,"телеграфом",iif(telegr==3,"электронно","почтой"))
    telegr:=padc(telegr,10)
    d:=strtran(dtoc(platdoc->DAT),"/",".")
    ssum:=strtran(alltrim(str(platdoc->summa)),".","-")

      ПЛАТЕЖНОЕ ПОРУЧЕНИЕ N #nnn   #d      #telegr
    				   _____________  _____________
    				  (Дата)      (Вид платежа)
    Сумма   |#pen
    прописью|
    	|#pen1
    --------┴------------------------------+-----+-------------------------
    					   |     |
    ИНН #padr(my_ident,12) #padr(substr(my_firma,1,22),22)|     |
    ..............
    Ну и так далее.......

Как видно из этого примера:
- поддерживаются #if, #endif, #while #endwhile, #return
- строки содержание ":=" выполняются
- #var - подставляются в текст в виде вычисленного значения
Вот собственно и все правила составления шаблонов.
Два ограничение - команды не поддерживаются и нельзя описать свою функцию, зато поддерживаются ВСЕ clipper-функции.
Смотрите таже функцию run_blank() для использования шаблонов без clip_blank.

### CLIP_RUN - исполнитель po-файлов

PO-файлы - это файл с байт-кодом виртуальной машины CLIP. Можно сказать что это кодовый блок, записанный в файл. Чтобы его получить надо использовать ключик -p компилятора.
Все нижеописанное можно подсмотреть в utils/Makefile

#### Как сделать исполняемый po-файл

Напишите test.prg:
clear screen
use test
browse()
Скомпилируйте:
clip -p test.prg
Получится файл test.po размером байт эдак в 300-400
Теперь надо немного пошаманить над этим файлом, чтобы он стал исполняемым.
mv test.po test.po.0
cat "#!/путь_где_лежит_clip_run/clip_run" >test.po
(это такая шаманская строчка, которая как раз и заставляет систему исполнять po-файл посредством clip_run и она должна быть самой первой в файле)
cat test.po.0 >>test.po
chmod +x test.po
Теперь выполняйте "test.po <enteer>"
Ну и как ???? Понравилось ??? Файл размером всего в 300 байт, а сколько умеет ????

### CLIP_PRG - исполнитель prg-файлов

"clip_prg filename.prg param1 param2 ...." - компилирует на лету prg-файл и исполняет скомпилированный po-файл.
Чтобы получить исполняемый prg-файл, надо в первой строке написать:
#!/path_for_clip_exec_files/clip_prg
и поставить аттрибут исполняемости prg-файлу командой
(chmod +x filename.prg)

### CLIP_BL

Этот полезный интерпретатор ppo-файлов предоставлен Сергеем Алешиным. Полное описание можно прочитать на его домашней страничке или здесь .

### WWW_CLIP

Это штука делает то же что www-sql от James Henstridge плюс кое-что еще. Про www-sql читайте здесь или в первоисточнике. Опишем здесь лишь особенности WWW_CLIP и его отличия от www-sql.
1. Имена переменных нечувствительны к регистру.
2. Вместо команды SETEXPR можно юзать просто SET - они полностью идентичны.
3. Изменен синтаксис команды CONNECT. Самым первым параметром следует указывать двухбуквенную строку идентифицирующую тип сервера базы данных - "PG" - для PostgreSQL, "MS" - для MySQL, "OR" - для Oracle. Об использовании SQL в Clip`е читайте здесь. В случае Oracle параметр host задает не имя хоста сервера, а т.н. connect string - имя базы данных. Если хочется использовать базу данных по умолчанию или локальный хост, но в то же время хочется задать логин и пароль, вместо параметра host пишите NIL. Например, чтобы подключиться к умалчиваемой базе данных Oracle под именем scott с паролем tiger тег должен иметь следующий вид:
<! sql connect OR NIL scott tiger>
4. В командах SET/SETEXPR/SETDEFAULT/EVAL можно использовать любые прилинкованные функции Клиппер.

### WCL2PRG

WWW_CLIP, несомненно, полезная утилита, но если принять во внимание, что она является не самым быстрым интерпретатором, становится очевидным, что нужна еще утилита типа WCL2PRG. WCL2PRG на входе получает файл .WCL (.HTML с тегами www-sql), а на выходе - исходник .PRG после компиляции которого получается бинарник, выводящий в stdout то же самое что вывел бы WWW_CLIP, т.е. полноценное cgi-bin приложение. В результате скорость возрастает многократно.
Кроме того, использование WCL2PRG позволяет вставлять в .WCL клиппер-код. Клиппер-код следует включать в тег-комментарий, начинающийся со слов "CLIP" или "CLIPFUNC".
Например:

    <!-- clip QOUT("<b>Hello, world!</b>") -->

В результате работы полученного cgi-bin приложения клиент увидит в своем браузере кроме прочего строку "Hello, world!" написанную жирным шрифтом.
Команда CLIPFUNC предназначена для включения в конец генерируемого .PRG кода многократно используемой функции или процедуры.
Например:

    <!-- clipfunc
    PROCEDURE PrintPrices
    	USE prices.dbf NEW ALIAS prices
    	? "<table border>"
    	? "<tr><th>Наименование</th><th>Цена</th></tr>"
    	DO WHILE !prices->EOF()
    		? "<tr><td>",prices->Name,"</td><td>",prices->Price,"</td></tr>"
    		prices->SKIP()
    	ENDDO
    	? "</table>"
    RETURN
    -->

В результате клиент увидит в своем браузере таблицу с данными из prices.dbf
В встраиваемом клиппер-коде можно использовать переменные www-sql. Все они хранятся в ассоциативном массиве vars. Например:

    <! sql set quad 25 >
    <! sql print $quad >
    <!-- clip QOUT(SQRT(vars:quad)) -->

### SQLRUN

Эта утилита выполняет скрипты на языке SQL.

### lowname

переводит имена файлов в нижний регистр
Использовать можно примерно так :
lowname *.PRG

### clip_trans

    clip_trans <source_codepage> <target_codepage> <file1>....<fileN>

Перекодирует файлы из любой кодировки в любую другую, например:
clip_trans cp866 cp1251 *.prg
перекодирует все prg-файлы из русской DOS кодировки в русскую Win кодировку.

### configure

Генерирует clipcfg.h с описанием некоторых системно-зависимых констант и define, используемый в clip.h. Вообщем вам это не должно быть интересно.

### clip_makeslib

Из нескольких обычных библиотек с расширением .a делает одну динамически подключаемую библиотеку с расширением .so: этой утилитой создается libclip.so. Можете ее использовать чтоб создавать свои загружаемый библиотеки.

### clip_hindex, clip_hseek

Мини-google. clip_hindex индексирует содержимое сайта. Полученный индекс затем используется для быстрого поиска при помощи утилиты clip_hseek. Использована технология HiPER-Seek.

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