harbour

Нarbour - кросс-платформенный компилятор для Clipper - программ в вопросах и ответах

Даный Faq является устаревшим, но возможно, именно здесь Вы найдете ответы на интересующие Вас вопросы 

A. Что это вообще такое ?
Q. Это кросс-платформенный opensource компилятор, созданный
клипперистами и для клипперистов

A. Где взять хHарбор ?
Q. На сайтах:
 www. harbour-project.org и
 www. xhabour.org
В разделе downloads надо скачать бинарники под win32, собранные
C-компилятором Borland C++ 5.1.1, а также бинарники раздела
contribution. Харбор разбит на 2 части: собственно харбор и
сторонние библиотеки (contribution).




A. Что еще надо, чтобы собрать харбор-программу под Windows ?
Q. Прежде всего надо скачать компилятор Borland C++ 5.5.1 по адресу:
ftp:// ftpd.borland.com/download/bcppbuilder/freecommandLinetools.exe

A. Почему существует два харбора ?
Q. Сам проект возник в 1999 году. В конце 2001 года разногласия
между разработчиками в направлениях развития харбора привели
к созданию второго проекта - xHabour. С тех пор они развиваются
независимо друг от друга и уже довольно заметно разошлись, хотя
в последнее время благодаря тому, чтот ряд разработчиков работает
на оба проекта, они развиваются в одном направлении и
предпринимаются меры по унификации их внутренней структуры

A. Какой из двух харборов лучше ?
Q. xharbour поддерживает некоторые расширения языка и развивается более
динамично

A. Свободный ли харбор ? Нужна ли лиценция ?
Q. Собственно харбор - это Open-Source проект, его можно
использовать без ограничений, лиценция GNU. Ограничения могут
быть связаны с используемыми сторонними инструментальными
средствами, например компилятором C. Скажем лиценция на Borland
C/C++ 5.5.1 command line tools, которая позволяет использовать
свободно не более одной копии этого компилятора. Или если с
харбором используются платные библиотеки (например FiveWin)

Q. Что такое xHarbour.com ?
A. Это коммерческая фирма, основанная несколькими разработчиками
xharbour для продвижения xHarbour Builder - пакета, в основе
которого лежат сырцы opersource проекта, но собранного C
компилятором xCC, содержашего визуальную среду сборки харбор-
программ, и несколько дополнительных библиотек: sqlrdd, hbcomm,
harbour COM-сервер

A. Какой компилятор C лучше использовать с харбором ?
Q. Любой, свободный или коммерческий, к которому есть предпочтение :)
Это конечно не ответ, под Windows наиболее распространенными
являются Borland 5.5 и выше (свободный с ограничениями) и
коммерческий Microsoft Visual C++
Полностью свободные компиляторы для ОС Windows - это OpenWatcom
 (www. openwatcom.org), последняя версия - OpenWatcom 1.3,
 а также MinGW (www. mingw.org)

A. Как получить техподдержку ?
Q. Вопрос по xharbour лучше всего задать, подписавшись на NG
(newsgroup) на news.xharbour.org (надо настроить почтового
клиента). Вход свободный.
Что касается harbour, надо подписаться на mail-list на
http:// lists.harbour-project.org/mailman/listinfo/harbour
Вопросы надо задавать по английски. Ответят разработчики харбора.
Если лучше получается по русски, то на форумах
http:// clipper.fastbb.ru/
http:// webforum.land.ru/wb.php?board=20999
или на фидошной эхе fido7.ru.clipper

A. Где взять сырцы харбора ?
Q. Сырцы последних релизов на сайтах www.harbour-project.org и
www.xhabour.org - downloads - в разделе sources (не забывать
про contribution). Самые последние сырцы - с CVS (см. ниже)

A. Как собрать харбор-программу ?
Q. Сборка харбор-программы состоит из 3-х этапов: компиляция
компилятором harbour.exe в C-код, затем компиляция C-компилятором
получившихся C-модулей в obj-формат, и наконец линковка обьектных
модулей линкером и получение результирующего приложения.
Для работы Borland C++ необходимо:
указать каталог c:\bcc55\bin в переменной окружения PATH (в файле
autoexec.bat);
в каталоге c:\bcc55\bin создать еще 2 файла:
bcc32.cfg:
-I"c:\Bcc55\include"
-L"c:\Bcc55\lib"
и ilink32.cfg:
-L"c:\Bcc55\lib"
Должно быть достаточно места для переменных окружения, для этого
в Win9x в файле config.sys надо указать:
Shell=C:\COMMAND.COM C:\ /E:4096 /P
или еще больше, а для winnt убрать лишние переменные окружения.
Затем непосредственно для сборки программы надо использовать
пакетный файл bld_b32.bat из каталога harbour\bin, конечно
модифицировав его для своих целей.

A. Как выкачать последние сырцы харбора с CVS ?
Q. Прежде всего надо установить какого-нибудь CVS-клиента,
например Tortoise CVS - с сайта www.tortoisecvs.org.
Один из последних стабильных релизов - 1.8.31 - можно
загрузить по адресу:
http:// prdownloads.sourceforge.net/tortoisecvs/TortoiseCVS-1.8.3.exe
Кликнув правой кнопкой мышки на ярлыке "Мой компьюьер", в popup-меню
надо выбрать CVS - Preferences, и на закладке Advanced установить
параметр "Network compression" на максимум - 9
Затем надо создать папку, в которыю будут загружаться
sourceforge-проекты - например Projects. В проводнике Windows в
popup-меню этой папки выбрать CVS Checkout и установить параметры:
Общие для всех проектов:
Protocol: :pserver
Server: cvs.sourceforge.net
User name: anonymous
И для harbour:
Repository folder: /cvsroot/harbour-project
Module: harbour
Для xharbour:
Repository folder: /cvsroot/xharbour
Module: xharbour
Затем нажать OK, и начнется закачка сырцов. Первый раз это займет
некоторое время, а при последующих chackout будут загружаться
только новые и изменившиеся модули.
Впрочем можно использовать и WinCVS: www.wincvs.org (это дело вкуса)

A. Как собрать харбор из сырцов ?
Q. Для сборки необходим компилятор C, а также дополнительные
программы: Flex и Bison: бесплатные версии лексического и
синтаксического анализаторов Lex и Yacc. Причем для сборки
harbour необходим и Flex и Bison, а для сборки xharbour -
только Bison. Для бизона необходимо скачать правила грамматик:
файл bison.simple. При сборке путь к flex.exe (для harbour) и
bison.exe должен быть указан в переменной окружения PATH, а
также установлена переменная окружения BISON_SIMPLE (в autoexec.bat):
set BISON_SIMPLE=<path>bison.simple
Flex можно скачать по адресу:
ftp:// ftp .harbour-project.org/dev/flex.zip
Bison необходим версии 1.28 или старше, вот адреса для скачивания:
ftp:// ftp .harbour-project.org/dev/bsn128b.zip
http:// www .harbour-project.org/bison-simple.zip
или более свежую версию:
http:// gnuwin32.sourceforge.net/downlinks/bison-bin-zip.php
Должны быть также установлены параметры окружения BCC - см.вопрос
про сборку программы.
Затем надо просто запустить пакетный файл для сборки харбора:
для xharbour это makallbc.bat, который собирает и сам харбор и все
библиотеки contrib, а для harbour - make_b32.bat, кототрый собирает
харбор, а библиотеки contrib надо собирать каждую отдельно
Внимание ! Если сборка выполняется из Far под winnt/2k/xp/2003, надо
в свойствах ярлыка Far поставить "Совместимость с win2k". Это
известный и неисправленный баг борландовского компилятора.
После того, как сборка дошла до конца, харбор готов к употреблению.

A. Что лучше использовать, официальные релизы харбора или
самостоятельную сборку из сырцов с CVS ?
Q. Официальный релиз - этот стабильный, рекомендуемый
разработчиками
Сырцы на CVS выкладываются разработчикками ежедневно и могут
содержать ошибки, эксперементальные недоведенные версии модулей,
хотя чаще всего тоже находятся в стабильном состоянии. Если
внимательно следить за последними изменениями, то нет ничего
страшного в использовании самых последних сырцов с CVS.

A. Есть ли в харборе Clipper Tools?
Q. Да, есть, хоть и не в полном обьеме. Для harbour это библиотека
libct из contribution, для xharbour - ct.lib, которая с недавнего
времени включена в состав самого xharbour.

A. У меня не работает Upper с русским текстом. Что делать ?
Q. Надо в тексте программы при ее инициализации указать:
REQUEST HB_CODEPAGE_RU866
hb_SetCodepage( "RU866" )
При этом харбор поймет, что преобразование регистра надо выполнять
по правилам русского языка

A. Почему харбор работает медленно ?
Q. Харбор работает медленно только с терминалом gtwin под ОС
Windows только в текстовом (полноэкранном) режиме под win9x
Это связано только с работой терминала, а не с самим харбором
В оконном режиме под win9x с gtwin харбор работает быстро.

A. Почему харбор с gtwin работает медленно ?
Q. Харбор работает с консолью Windows через функции Windows API,
и его медленная работа связана с кривой реализацией некоторых
консольных функций winapi (работа с курсором) под Windows 9x.

A. С gtwin не вводится маленькая русская "р". Что делать ?
Q. Надо скачать адаптированную для кириллицы версию этой
библиотеки: для harbour - с сайта Александра Кресина:
http:// kresin.belgorod.su/rus/index.html
а для xharbour - с сайта www.xharbour.nm.ru - gtwin.zip

A. Что такое gtwvt ?
Q. Это терминал - полная эмуляция всего консольного вывода и ввода
через gui-функции winapi в одном окне. На 100% совместим со
стандартным терминалом клиппера, кроме того есть множество
дополнительных функций. Есть только в xHarbour. Для его
использования надо вместо gtwin.lib прилинковать gtwvt.lib и
(если используются дополнительные функции) wvtgui.lib

A. У меня с gtwvt нет русского шрифта и неправильно вводится текст
с клавиатуры. Как поправить ?
Q. Надо при инициализации программы вызвать:
WVT_SETCODEPAGE(255)
При этом gtwvt поймет, что работа выполняется с OEM-кодироовкой,
и выполнит соответсвующие преобразования.

A. Можно ли сразу линковать к программе несколько терминалов ?
Q. Да, можно. Для этого надо пересобрать харбор с многотерминальной
поддержкой: при сборке снять в файле makefile.bc комментарий со строки
HB_MULTI_GT = yes
В самой программе указать, какие терминалы она будет использовать:
Request HB_GT_WIN
Request HB_GT_WVT
Линковать программу надо с библиотеками:
echo %HB_INSTALL%\lib\gtwin.lib + >> b32.bc
echo %HB_INSTALL%\lib\gtwvt.lib + >> b32.bc
echo %HB_INSTALL%\lib\wvtgui.lib + >> b32.bc
echo %HB_INSTALL%\lib\gtnul.lib + >> b32.bc
При запуске программы указывать терминал (через два слэша):
app.exe //gtwin (по умолчанию)
или
app.exe //gtwvt
В runtime проверить какой именно терминал используется можно
функцией hb_gt_version()

A. При линковке программы выдаются сообщения
Error: Unresolved external '_HB_FUN_DBFDBT' referenced from C:\XHARBOUR\LIB\RDD.LIB|rddsys
или
Error: Unresolved external '_HB_FUN_DBFFPT' referenced from C:\XHARBOUR\LIB\RDD.LIB|rddsys
Q. В скрипте для линкера надо указать библиотеки dbfdbt.lib и dbffpt.lib

A. Как использовать ADS с харбором ?
Q. Для работы харбора с ADS достаточно наличие ACE32.DLL
Она входит в состав любого 32-разрядного клиента ADS.
Из нее командой
implib ace32.lib ace32.dll
создается ace32.lib, которую надо подлинковать к приложению
совместно с rddads.lib
Эту библиотеку (ACEAPI) лучше всего выкачать с сайта Extend Systems
(или дистрибьютера этой фирмы, например Хотсофт - www.hotsoft.ru) для
нужной версии ADS - она бесплатная, содержит Advantage Local Server
и саму ACE32.DLL - Advantage Client Engine - основу для
создания всех 32-х разрядных клиентов ADS

A. Как инициализировать rdd_ads ?
Q. Надо указать в программе rdd по умолчанию:
REQUEST _ADS
rddRegister("ADS",1)
rddSetdefault("ADS")
и затем тип сервера, формат файлов и кодовую страницу:
SET SERVER LOCAL или SET SERVER REMOTE
SET FILETYPE TO [NTX, CDX или ADT]
SET CHARTYPE TO [ANSI или OEM]
К программе надо прилинковать rddads.lib и ace32.lib

A. Невозможно сконнектиться к Ads Local Server, если количество клиентов
более пяти
Q. В adslocal.cfg надо добавить строку:
USER_LICENSE = 30

A. Почему rdd_ads не поддерживает UDF в индексном выражении ?
Q. UDF поддерживается только в ADS-клиенте для клиппера. Ни в каком 32-х
разрядном клиенте ADS (в том числе в харборе) UDF (собственно
создание индекса не сервером, а клиентом) не поддерживается.
Это вопрос не харбора, а Extend Systems

A. Поддерживает ли rdd_ads sql-запросы ?
Q. Да. Для открытия обычной рабочей области по команде SELECT необходимо
выдать такую последовательность команд:
select(nArea)
IF AdsGetConnectionHandle() == 0
AdsConnect(cPath)
endif
AdsCreateSQLStatement(cAlias, 2)
AdsPrepareSQL(cSQLStmt)
AdsExecuteSQL()

A. Как настроить ads для использования досовской кодировки в dbf-файлах
в консольных харбор-программах ?
Q. В настройках Ads (локального) надо укаазать OEM и ANSI charset - Russian
В харбор программе при инициализации rdd_ads выполнить вызов:
AdsSetCharType( 2, .T. )
Реализовано пока только в xHarbour

A. Из харбор-программы не открывается dbf-файл через rdd_ads use,
используется Ads for Linux
Q. Это возможно связано с тем, что файловая система Linux чувствительна
к регистру, и имя файла в программе и на сервере набрано на разном
регистре. В общем случае необходимо:
1) На Linux сервере добавить строку в ads.conf
LOWERCASE_ALL_PATHS=1
2) В харбор-программе указать:
#include "ads.ch"
...
AdsMgConnect()
If AdsMgGetServerType() == ADS_MGMT_LINUX_SERVER
Set( _SET_FILECASE, "LOWER" )
Set( _SET_DIRCASE, "LOWER" )
Endif
AdsMgDisconnect()

A. Можно ли на харборе создавать программы маленького размера,
использовав dll ?
Q. Да, для этого надо при линковке программы из библиотек указать
только harbour.lib и vm.lib. Harbour.dll должен быть доступен
в переменной path или в каталоге \windows\system[32]
Но программа при этом будет использовать больше системной памяти.

A. Как сделать свою dll ?
Q. Надо скомпилировать сырцы своей библиотеки, определив макрос
/D__EXPORT__ и для harbour.exe, и для C-компилятора (bcc55).
Затем вызвать линкер с параметрами:
ILINK32 -aa -Tpd -Gn @hdll.lnk
Скрипт для линкера сформировать по таким правилам:
<obj_files> c0d32w.obj,
<dll_name>,,
cw32.lib
harbour.lib
import32.lib
uuid.lib
Чтобы использовать dll надо прилинковать к программе соответствующую
lib и harbour.lib.

A. Как перейти к программированию под Windows ?
Q.

A. Какие есть библиотеки под Windows ?
Q. Коммерческие:
- Fivewin (http:// www .fivetechsoft.com)
- Xailer (http:// www .xailer.com)
Бесплатные: HwGUI и MiniGUI,
а также T-gtk (http:// es.groups.yahoo.com/group/t-gtk)

A. Какие Windows GUI-библиотеки лучше ?
Q. Конечно, бесплатные ;-) Если предпочтителен ООП-стиль программирования,
то это - библиотека HwGUI (автор - Александр Кресин из Белгорода),
если достаточно псевдо-ООП и команд в стиле FoxPro для создания окон -
то MiniGUI (автор - Роберто Лопез из Аргентины).

A. Где взять HwGUI и MiniGUI ?
Q. Официальная страница библиотеки HwGUI: http:// kresin.belgorod.su/hwgui.html
Официальная страница библиотеки MiniGUI: http:// www .geocities.com/harbour_minigui
Неофициальная русская страница библиотеки MiniGUI: http:// minigui.boom.ru
(зеркало - hmg. narod.ru) 

A. Поддерживает ли харбор клиент-сервер (sql) ?
Q.

A. Поддерживает ли харбор six ?
Q.

A. Есть ли IDE для харбора ?
Q. Лучший IDE - это бесплатный xMate:
http:// www .geocities.com/wowbase/xMate.html
Коммерческий IDE xBuild: http:// www .xharbour.com/index.asp?page=xbuild_demo&;s=1&a=3

Все ссылки действительны на момент составления faq - февраль 2005 года
Данный FAQ составил Царенко Павел, tpe (at) etel.dn.ua
Любое дополнение этого FAQ и его распространение приветствуется

 

Пример реализации окна

Файл 'minigui.ch' должен быть включен во все программы MiniGUI
 */
#include "minigui.ch"

Set Procedure To ContactosAdmin

 Set Procedure To TiposAdmin
 
Function Main

 /////////////////////////////////////////////////////////////////////////////// 

// Инициализация RDD DBFCDX

 
///////////////////////////////////////////////////////////////////////////////
 REQUEST DBFCDX
RDDSETDEFAULT( "DBFCDX" )
///////////////////////////////////////////////////////////////////////////////

 SET DELETED ON 

SET DATE FRENCH 

SET CENTURY ON 

SET BROWSESYNC ON

/* 
У всех программ MiniGUI должно быть главное окно, которое должно быть
определено раньше любого другого окна. 
*/

 DEFINE WINDOW Main ; 

AT 0,0 ; 

WIDTH 640 ; 

HEIGHT 480 ; 

TITLE 'Contactos' ; 

MAIN ; 

ICON 'Tutor.Ico' 
/*
DEFINE WINDOW: Начинается определение окна. Должно быть указано имя окна, которое будет единственным для всей программы. 
(Может быть использовано в коде одно и то же имя более одного раза, но только одно окно может быть активно в одно и то же время) 

AT: Указывает Ряд,Колонку верхнего левого угла окна (в пикселях)

WIDTH: Ширина окна, указанная в пикселях 

HEIGHT: Высота окна, указанная в пикселях 

TITLE: Заголовок окна 

MAIN: Показывает, что определяется главное окно программы
*/

 // Определение главного меню

 // У каждого меню могут быть разнообразные POPUPы (подменю)

 // Количество подменю не ограничено. 

// После DEFINE POPUP указывается название пункта меню 

// '&' используется, чтобы определить горячую клавишу, ассоциированную

 // с пунктом меню. В нашем примере используется комбинация ALT+A

 // Каждый пункт меню определяется посредством MENUITEM.

 // Класс ACTION указывает процедуру, которая будет выполнена,

 // когда пользователь выберет данный пункт меню.

 // SEPARATOR включает горизонтальную линию, использованную, чтобы 

// отделятьпунктыменю. 

DEFINE MAIN MENU

 DEFINE POPUP '&Archivo' 

MENUITEM '&Contactos' ACTION AdministradorDeContactos() 

MENUITEM '&Tipos de Contacto' ACTION AdministradorDeTipos() 

SEPARATOR 

MENUITEM '&Salir' ACTION EXIT PROGRAM

 END POPUP

 DEFINE POPUP 'A&yuda'

 MENUITEM 'A&cerca de...' ACTION MsgInfo ('Tutor ABM' + Chr(13) + Chr(10) + '(c) 2003  

Roberto Lopez' ) 

END POPUP 

END MENU 

// Закончено определение главного меню 

// Элемент управления TOOLBAR может содержать разнообразные  

// кнопки. 

// Размер всех кнопок определяется с помощью 

// класса BUTTONSIZE <Ширина>,<Высота> 

// FLAT создает плоские кнопки 

// RIGHTTEXT указывает, что текст на кнопках выводится 

// справа от рисунка, помещенного на кнопку. 

DEFINE SPLITBOX 

DEFINE TOOLBAR ToolBar_1 FLAT BUTTONSIZE 110,35 RIGHTTEXT  

BUTTON Button_1 ; 

CAPTION 'Contactos' ; 

PICTURE 'Contactos' ; 

ACTION AdministradorDeContactos() 

// CAPTION Указываеттекстнакнопке. 

// PICTURE Файл ассоциированного рисунка (BMP) 

// ACTION Процедура события, присоединенная к кнопке 

// (то, что будет выполнено, когда нажмут кнопку) 

BUTTON Button_2 ; 

CAPTION 'Tipos Ctto.' ; 

PICTURE 'Tipos' ; 

ACTION AdministradorDeTipos() 

BUTTON Button_3 ; 

CAPTION 'Ayuda' ; 

PICTURE 'ayuda' ; 

ACTION MsgInfo ('Tutor ABM' + Chr(13) + Chr(10) + '(c) 2003 Roberto Lopez' )

 END TOOLBAR 

END SPLITBOX

 // Строка состояния, которая появляется в нижней части от окна. 

// У нее могут быть разнообразные секции, определенные посредством STATUSITEM 

// Существуют опциональные предопределенные секции 

// CLOCK и DATE (они показывают часы и текущую дату) 

DEFINE STATUSBAR  

STATUSITEM "(c) 2003 Roberto Lopez roblez @ciudad.com.ar"

 CLOCK 

 DATE 

 END STATUSBAR 

// Законченоопределениеокна

 END WINDOW

 // Требуется развернуть окно на весь экран

 MAXIMIZE WINDOW Main 

 // Выводим окно на экран

 ACTIVATE WINDOW Main 

// Команда ACTIVATE WINDOW устанавливает состояние ожидания.

 // Программа будет остановлена в этой точке до тех пор, пока окно 

 // не будет закрыто интерактивно или программно. При этом будут выполняться

 // только процедуры событий, присоединенные к элементам управления окна

 // (или к самому окну)  

Return