Harbour для начинающих
Александр Кресин2003 - 2016
Благодаря наличию так называемой "Системы расширения" (Extend system) к prg-модулю, написанному на Harbour, можно подключать модули, написанные на C, что делает возможным использовать большое количество самых разных инструментов программирования через C API. Многие такие модули находятся в Harbour/contrib, многие доступны с сайтов производителей и Open source репозитариев как так называемые 3-rd party библиотеки. Собственно, значительная часть функций, модулей самого Harbour написана на C и использует ту же "Систему расширения". Отличие дополнительных библиотек только в том, что их по тем или иным причинам не сочли возможным или нужным включить в ядро Harbour.
Ниже приведен список того, что включено в Harbour/contrib на момент написания этой статьи:
- gtalleg - основанный на Allegro экранный (GT) драйвер
- gtqtc - экранный (GT) драйвер, основанный на QT
- gtwvg - экранный (GT) драйвер для Windows, я бы сказал - продвинутый gtwvt, что-то среднее между консолью и GUI
- hbamf - привязка к библиотеке AmFast, возможно, кому-то это знакомо
- hbblat - основанная на Blat консольная утилита для отправки почты по SMTP протоколу
- hbblink - набор функций, знакомый тем, кто пользовался линковщиком Blinker
- hbbz2 - поддержка bzip компрессии, основанная на библиотеке BZip2.
- hbbz2io - потоковый драйвер ввода/вывода для BZIP2
- hbcairo - набор функций-оболочек для Cairo. Cairo - это мультиплатформенная библиотека для создания 2D векторной графики, написанная на C. Она имеет привязки к Python, Perl, Java, C++, C#, работает на Linux, BSDs, OSX, Windows
- hbcomio - потоковый драйвер ввода/вывода для последовательного порта
- hbcomm - маленькая библиотечка для COM-портов, основана на hb_com... функциях Harbour
- hbct - реализация известной всем, кто писал на Клиппере, библиотеки Clipper Tools
- hbcups - маленький набор функций для Cups (принтер по умолчанию, список принтеров, печать файла на заданный принтер)
- hbcurl - интерфейс к библиотеке Curl
- hbexpat - интерфейс к библиотеке Expat, свободному XML-парсеру
- hbfbird - библиотека для доступа к популярной SQL СУБД Firebird
- hbfimage - набор функций-оболочек для графической библиотеки FreeImage
- hbformat - утилита для форматирования prg файлов
- hbfoxpro - маленький набор функций и заголовков для совместимости с Foxpro
- hbfship - набор функций для совместимости с Flagship
- hbgd - набор функций-оболочек для графической библиотеки GD
- hbgs - несколько функций для Ghostscript
- hbgt - набор строковых функций
- hbgzio - потоковый драйвер ввода/вывода для GZIP
- hbhpdf - интерфейс Libharu - библиотеке для создания pdf-файлов
- hbhttpd - http сервер, написанный на Harbour
- hblzf - набор функций-оболочек для библиотеки компрессии данных LZF
- hbmagic - набор функций-оболочек для библиотеки Libmagic (распознавание файлов)
- hbmemio - драйвер ввода/вывода для файловых операций в оперативной памяти
- hbmisc - набор разных функций
- hbmlzo - набор функций-оболочек для библиотеки компрессии данных miniLZO
- hbmxml - набор функций-оболочек для библиотеки miniXML
- hbmysql - библиотека для доступа к популярной SQL СУБД MySQL
- hbmzip - поддержка zip компрессии, основанная на использовании библиотеки Minizip
- hbnetio - альтернативная реализация ввода-ввывода RDD с поддержкой RPC, перенаправляющая выполнение операций с базами данных на сервер, включает клиентскую и серверную части
- hbnf - реализация известной всем, кто писал на Клиппере, библиотеки Nanfor
- hbodbc - библиотека для доступа к данным через ODBC
- hboslib - Маленький набор функций oslib
- hbpgsql- библиотека для доступа к популярной SQL СУБД postgreSQL
- hbpipeio - потоковый драйвер ввода/вывода для PIPE (каналов)
- hbrun - утилита hbrun, см. здесь
- hbsms - библиотека для отправки sms
- hbsqlit3 - набор функций-оболочек для библиотеки SQLite
- hbssl - интерфейс к OpenSSL API
- hbtinymt - интерфейс к tinyMT - генератору псевдослучайных чисел
- hbtip - набор классов, основанных на INET-подсистеме, реализующий ftp, http, pop3 и др. протоколы
- hbtpathy - реализация популярной библиотеки для последовательных ( COM ) портов Telepathy
- hbunix - маленький набор функций для Unix-систем
- hbwin - набор функций для связи с Windows API, в т.ч. реализация OLE
- hbxdiff - набор функций-оболочек для библиотеки libXDiff
- hbxpp - набор функция для совместимости с xBase++
- hbzebra - библиотека Зебра ( баркоды )
- hbziparc - набор функций для упаковки/распаковки файлов в zip - формате
- rddads - RDD для Advantage Database Server
- rddbm - BMDBF RDD
- rddsql - простой RDD для SQL СУБД
- sddfb - RDD для Firebird
- sddmy - RDD для MySQL
- sddoci - RDD для Oracle через OCILIB
- sddodbc - RDD для ODBC
- sddpg - RDD для postgreSQL
- sddsqlt3 - RDD для SQLite
- xhb - набор функций и классов для совместимости с xHarbour
Хочу отметить, что не все из перечисленных модулей полностью готовы к использованию, некоторые представляют собой просто пробу пера, рассчитанную на то, что общими усилиями их удастся довести до более высокой степени готовности.
hbbz2
Эта библиотека содержит набор функций-оболочек для BZip2, она реализует компрессию / декомпрессию текстовых строк.
При сборке программ с hbbz2 помимо основного набора вам потребуется библиотека bz2 и, конечно сама hbbz2.
Список функций:
cCompressed := hb_bz2_Compress( cData, [nDstBufLen|@cBuffer], [@nResult], [nLevel] ) | Сжимает текстовую строку cData с уровнем сжатия nLevel (0 - 9, по умолчанию - 6). |
cUnCompressed := hb_bz2_UnCompress( cCompressed, [nDstBufLen|@cBuffer], [@nResul>] ) | Распаковывает сжатую текстовую строку cCompressed. |
hbbz2io
Эта библиотека представляет собой потоковый драйвер ввода/вывода для BZip2, который может быть использован в функциях файлового ввода/вывода hb_vf*() и в таких RDD, как SDF и DELIM.
При сборке программ с hbbz2io помимо основного набора вам потребуются библиотеки hbbz2, bz2 и, конечно сама hbbz2io. В программе надо прописать строчку
REQUEST HB_BZ2IO
Теперь, если перед именем файла поставить "bz:" или "bgz[0-9]:" (0 - 9 - требуемый уровень компрессии), будет использоваться bz2io драйвер, например:
REQUEST HB_GZIO, HB_BZ2IO FUNCTION GZip2Bz2( cFile ) RETURN hb_vfCopy( "gz:" + cFile + ".gz", "bz:" + cFile + ".bz2" )
hbgzio
Эта библиотека представляет собой потоковый драйвер ввода/вывода для GZip, который может быть использован в функциях файлового ввода/вывода hb_vf*() и в таких RDD, как SDF и DELIM.
При сборке программ с hbgzio помимо основного набора вам потребуется библиотека hbzlib и, конечно сама hbgzio. В программе надо прописать строчку
REQUEST HB_GZIO
Теперь, если перед именем файла поставить "gz:" или "gz[0-9]:" (0 - 9 - требуемый уровень компрессии), будет использоваться gzio драйвер, например:
REQUEST HB_GZIO USE test COPY TO gz:test.txt.gz DELIMITED WITH TABили
REQUEST HB_GZIO hb_vfCopy( "file.txt", "gz9:file.txt.gz" ) USE test APPEND FROM "gz:file.txt.gz" hb_vfErase( "file.txt.gz" )или
REQUEST HB_GZIO FUNCTION GZIP( cFile ) RETURN hb_vfCopy( cFile, "gz:" + cFile + ".gz" )
hbmemio
Эта библиотека представляет собой драйвер ввода/вывода для файлов, размещенных в оперативной памяти, который может быть использован в RDD и в функциях файлового ввода/вывода hb_vf*().
При сборке программ с hbmemio помимо основного набора вам потребуется подключить библиотеку hbmemio. В программе надо прописать строчку
REQUEST HB_MEMIO
Теперь, если перед именем файла поставить "mem:", будет использоваться memio драйвер, например:
REQUEST HB_MEMIO LOCAL i dbCreate( "mem:test", { { "F1", "N", 9, 0 } }, , .T., "memarea" ) FOR i := 1 TO 1000 dbAppend() FIELD->F1 := hb_Random() * 1000000 NEXT INDEX ON FIELD->F1 TAG f1 dbEval( {|| QOut( FIELD->F1 ) } ) dbCloseArea() /* Копируем файлы на диск */ hb_vfCopyFile( "mem:test.dbf", "test1.dbf" ) hb_vfCopyFile( "mem:test.ntx", "test1.ntx" ) /* Освобождаем память */ dbDrop( "mem:test" )
hbmzip
Эта библиотека содержит набор функций-оболочек для MiniZip, а также несколько дополнительных функций - API более высокого уровня для zip пакетов.
При сборке программ с hbmzip помимо основного набора вам потребуются следующие дополнительные библиотеки: hbzlib, minizip, и, конечно сама hbmzip.
Скорее всего, несмотря на заявленное "API более высокого уровня", для упаковки/распаковки файлов вам будет удобнее использовать библиотеку hbziparc - API еще более высокого уровня :), надстройку над hbmzip.
hbziparc
Эта библиотека, основанная на hbmzip, содержит набор функций для упаковки/распаковки в zip - формате.
При сборке программ с hbziparc помимо основного набора вам потребуются следующие дополнительные библиотеки: hbzlib, minizip, hbmzip, и, конечно сама hbziparc.
Список функций:
lCompress := hb_ZipFile( cFile, cFileToCompress | aFiles, [nLevel],
[bBlock], [lOverWrite], [cPassword], [lWithPath], [lWithDrive], [pFileProgress] ) | Создает zip - файл,
возвращает .T. в случае успеха. cFile - имя создаваемого zip - файла, cFileToCompress | aFiles - имя файла, который надо сжать, или массив с именами файлов, nLevel - уровень сжатия от 0 (без сжатия) до 9 (наилучшее), bBlock - кодоблок, исполняемый при открытии каждого файла для сжатия, принимает параметры cFile и nPos ,lOverWrite - флаг, указывающий, перезаписывать ли файл, если он уже существует, cPassword - пароль для сжатия, если нужен, lWithPath - флаг, указывающий, запоминать ли путь к файлу (по умолчанию - .F.), lWithDrive - флаг, указывающий, запоминать ли имя диска (по умолчанию - .F.), pFileProgress - кодоблок для визуализации прогресса сжатия, должен выглядеть примерно так: {|nPos,nTotal| GaugeUpdate( aGauge1, nPos / nTotal ) } . |
lCompress := hb_UnzipFile( cFile, [bBlock], [lWithPath], [cPassWord], cPath,
cFileToExtract | aFile, [pFileProgress] ) | Распаковывает zip - файл, возвращает .T. в случае успеха. cFile - имя распаковываемого zip - архива, bBlock - кодоблок, исполняемый при открытии каждого файла для извлечения, принимает параметры cFile и nPos ,lWithPath - флаг, указывающий, создавать ли каталоги для извлекаемых файлов, cPassword - пароль для извлечения, если нужен, cPath - путь, куда извлекать - обязательный параметр, cFileToExtract | aFiles - имя файла, который надо извлечь, или массив с именами файлов, - обязательный параметр, pFileProgress - кодоблок для визуализации прогресса распаковки. |
lDelete := hb_ZipDeleteFiles( cFile, cFiletoDelete | aFiles | nFilePos ) | Удаляет файлы из zip - архива, возвращает .T. в случае успеха. cFile - имя zip - архива, cFileToExtract | aFiles - имя файла, который надо удалить, или массив с именами файлов |
hb_SetZipComment( cComment ) | Устанавливает комментарий для zip-архива, вызывается перед любой функцией упаковки. |
cComment := hb_GetZipComment( cFileName ) | Возвращает строку - комментарий записанный в zip-файле с именем cFileName. |
hb_SetBuffer( [nWriteBuffer], [nExtractBuffer], [nReadBuffer] ) | Устанавливает размеры буферов для записи (nWriteBuffer), извлечения (nExtractBuffer) и чтения (nReadBuffer). Значения по умолчанию - 65535 / 16384 / 32768, соответственно. |
lCompress := hb_ZipFileByTDSpan( cFile, cFileToCompress | aFiles, nLevel,
bBlock, lOverWrite, cPassword, iSize, lWithPath, lWithDrive,
pFileProgress) | Создает zip - файл, разбитый на части заданного размера,
возвращает .T. в случае успеха. Параметры те же, что и в hb_ZipFile() плюс:iSize - размер в байтах, по умолчанию - 1457664. |
lCompress := hb_ZipFileByPKSpan( cFile, cFileToCompress | aFiles, nLevel,
bBlock, lOverWrite, cPassword, lWithPath, lWithDrive, pFileProgress ) | Создает zip - файл на сменном носителе,
возвращает .T. в случае успеха. |
nReturnCode := hb_ZipTestPK( cFileName ) | Проверяет "pkSpanned" zip - файлы, код возврата:114 Incorrect Disk 103 No Call back was set with hb_ZipTestPK() |
hb_SetDiskZip( bBlock ) | |
nFiles := hb_GetFileCount( cFileName ) | Возвращает количество файлов в zip - архиве, включая каталоги. |
hb_GetFilesInZip( cFileName [, lVerbose] ) | Возвращает массив с информацией о файлах в zip - архиве. Если lVerbose не задан, или равен .F. , это одномерный массив с именами файлов, если равен .T. ,
то двухмерный массив, в котором для каждого файла представлена следующая информация:
{ cFileName, nSize, nMethod, nCompSize, nRatio, dDate, cTime, hb_NumToHex( nCRC, 8 ), nInternalAttr, lCrypted, cComment }
|
Harbour в "чистом виде" предоставляет средства для создания консольных программ, для реализации графического интерфейса ( GUI ) необходимо использование дополнительных библиотек. Ниже будут перечислены наиболее используемые.
- Fivewin - это, безусловно номер 1. Старейшая, известная еще со времен Клиппера, имеющая большую пользовательскую базу и наиболее функционально насыщенная коммерческая библиотека. Есть версии для разных платформ, в т.ч. мобильных.
- HwGUI - моя библиотека, она представлена здесь на сайте. Компактная, функциональная, свободно распространяемая, кроссплатформенная - имеет версию, основанную на Windows API и на GTK - для Unix-систем.
- Minigui - свободно распространяемая библиотека, в отличие от остальных, основана на использовании массивов, а не классов, но с помощью препроцессора реализует ООП-подобный синтаксис, отличающийся от ООП-синтаксиса, принятого в Harbour. В настоящее время поддерживаются две версии Minigui:
- ooHG - еще одна GUI библиотека. Она имеет тот же синтаксис, что и Minigui, но основана на ООП.
- Qt wrapper - основанная на использовании QT. Cвободно распространяемая библиотека, может использоваться на всех платформах, где реализован QT.
Ваше имя:
Адрес электронной почты:
(не предназначено к показу)
  |