Форум » Clipper » Хочу попробовать на Harbour/xHarbour » Ответить

Хочу попробовать на Harbour/xHarbour

TakOj: В 90-х годах писал на Clipper 5.1 и вот уже лет 10 не пишу. Встретил людей, для которых когда-то сделал одну прогу, которая до сих пор пашет. Они просят переписать (и дополнить) её под Win XP. Я им ничего конкретного не пообещал. Сказал, что многое уже подзабыл и для освоения (профессионально) нового яз-а пограм-я нужно время. «Ты подумай, мы тебя не торопим» - сказали они мне и на этом мы расстались. Та случайная встреча и знакомство с вашим сайтом разбудили во мне желание вновь писать (или хотя бы переписать старые) программы. Я думаю, в моём положении, Harbour/xHarbour это то, что даст вторую жизнь моим старым программам. Благо исходники сохранились. После столь долгого перерыва в программировании прошу вашей помощи. Не откажите. Не судите строго за глупые вопросы. И так. Это мой старый bat-файл: @echo off set path=c:\clip5\bin set lib=c:\clip5\lib set include=c:\clip5\include set obj=c:\clip5\obj clipper a_1 /n /a /b clipper a_2 /n /a /b if not errorlevel 1 rtlink file a_1.obj,a_2.obj,dbfsix.obj output p_1 library dbfsix,clipper,ct150 del *.obj ____________________________ А вот что такое а_1 и а_2 a_1.prg #include "dbfsix2.ch" PROCEDURE MAIN1() SetRDD("DBFSIX") mai1() RETURN #include "мой.ch" #include "PROG_01.PRG" => mai1() #include "PROG_02.PRG" . . . #include "PROG_25.PRG" a_2.prg #include "dbfsix2.ch" PROCEDURE MAIN2() SetRDD("DBFSIX") mai2() return NIL #include "PROG_26.PRG" => mai2() #include "PROG_27.PRG" . . . #include "PROG_50.PRG" А это bat-файл для Harbour: set HB_BIN_INSTALL=d:\harbour\bin set HB_LIB_INSTALL=d:\harbour\lib\ set HB_INC_INSTALL=d:\harbour\include\ %HB_BIN_INSTALL%\harbour aer_1.prg -n -i%HB_INC_INSTALL% %HB_BIN_INSTALL%\harbour aer_2.prg -n -i%HB_INC_INSTALL% d:\borland\bcc55\bin\bcc32 -O2 -d -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% aer_1.c aer_2.c debug.lib vm.lib rtl.lib gtwin.lib lang.lib rdd.lib macro.lib pp.lib dbfntx.lib dbfcdx.lib common.lib codepage.lib d:\harbour\lib\hbsix.lib с:\clip5\lib\dbfsix.lib d:\borland\bcc55\bin\ilink32 -Gn d:\radk\clip5\obj\dbfsix.obj aer_1.obj aer_2.obj, aaeerr.exe, , d:\harbour\lib\debug.lib d:\harbour\lib\lang.lib d:\harbour\lib\macro.lib d:\harbour\lib\pp.lib d:\harbour\lib\dbfntx.lib d:\harbour\lib\dbfcdx.lib d:\harbour\lib\codepage.lib d:\harbour\lib\libct.lib d:\harbour\lib\harbour-b32.lib d:\harbour\lib\rtl.lib d:\harbour\lib\hbsix.lib с:\clip5\lib\dbfsix.lib До использовиния ilink32 пример батника взят с сайта А. Кресина. После выполнения этого батника, вот что получаю: D:\>d:\harbour\bin\harbour a_1.prg -n -id:\harbour\include\ Harbour Beta build 0.99-3 Intl. Copyright 1999-2007, http://www.harbour-project.org/ Compiling 'a_1.prg'... Lines 11842, Functions/Procedures 240 Generating C source output to 'a_1.c'... Done. D:\>d:\harbour\bin\harbour a_2.prg -n -id:\harbour\include\ Harbour Beta build 0.99-3 Intl. Copyright 1999-2007, http://www.harbour-project.org/ Compiling 'a_2.prg'... Lines 4863, Functions/Procedures 86 Generating C source output to 'a_2.c'... Done. D:\>d:\borland\bcc55\bin\bcc32 -O2 -d -Id:\harbour\include\ -Ld:\harbour\lib\ a_1.c a_2.c debug.lib vm.lib rtl.lib gtwin.lib lang.lib rdd.lib macro.lib pp.lib dbfntx.lib dbfcdx.lib common.lib codepage.lib d:\harbour\lib\hbsix.lib с:\clip5\lib\dbfsix.lib Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland a_1.c: a_2.c: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Fatal: Access violation. Link terminated. D:\>d:\borland\bcc55\bin\ilink32 -Gn с:\clip5\obj\dbfsix.obj a_1.obj a_2.obj, aaeerr.exe, , d:\harbour\lib\debug.lib d:\harbour\lib\lang.lib d:\harbour\lib\macro.lib d:\harbour\lib\pp.lib d:\harbour\lib\dbfntx.lib d:\harbour\lib\dbfcdx.lib d:\harbour\lib\codepage.lib d:\harbour\lib\libct.lib d:\harbour\lib\harbour-b32.lib d:\harbour\lib\rtl.lib d:\harbour\lib\hbsix.lib d:\clip5\lib\dbfsix.lib Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Fatal: Unsupported 16-bit segment(s) in module \drivers\sex\ver1-1\asm\sixdyn.asm Если я правильно понял – ему не нравится dbfsix.lib. Но я использую в своих прогах функции этой библиотеки. И мне ещё не понятно, для чего дважды (в bcc32 и ilink32)прописывать необходимые библ-ки. Что делаю неправильно? Как правильно составить батник для сборки прог-м?

Ответов - 34, стр: 1 2 All

Петр: Harbour не может использовать старые 16bit клипперные библиотеки. Придется Вам довольствоваться hbsix.lib. Почитайте документацию к ilink32 и bcc32 В Вашем случае, мне кажется, вызывать ilink32 не нужно - bcc32 сам все сделает. Что касается того как составлять батник - это зависит от стиля, вкуса, даже наличия времени - главное чтобы это работало.

TakOj: Петр пишет: В Вашем случае, мне кажется, вызывать ilink32 не нужно - bcc32 сам все сделает. Убрал ilink32. И опять: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Fatal: Access violation. Link terminated. Access violation - нарушение доступа. Кого, куда? Где смотреть?

TakOj: Прошу прощения за опечатку. Там, где aer_1 и aer_2 - читать а_1 и а_2.


Andrey: Пользуйтесь xHarbour'ом - он более совместим с Клипером. В xHarbour'е есть утилита hbmake.exe - с ее помощью и соберите свой проект, не мучайтесь, утилита сама все сделает. Как с ней работать - поищите на этом форуме, здесь это обсуждалось. (строка поиска: hbmake )

Vlad04: Вместо six используй dbfcdx из поставок с xHarbour( вызовы функций только надо поменять - sx_SetTagNo(1)-> DbSetOrder(1) и т.д.) . Батник с Кресинского сайта нормально работает - им постоянно пользуюсь. Пример использования утилит rmake http://www.paritetsoft.ru/frh.htm.

TakOj: Спасибо вам - Петр, Andrej и Vlad04! Пока всё как в тумане. Буду разбираться Vlad04! Ссылка на пример использования утилит rmake выдаёт - 404 Not Found. Кому ещё есть что посоветовать, пишите. Буду очень благодарен.

TakOj: В моей проге на Clipper есть такие строки: (а) @ prow(),pcol() say jj&_i_.[i+1] (б) @ prow(),pcol() say jj&_i_.+jj&_i_.[i+1] _i_ - 1 или 2 Компилирую в xHarbour. Строка (а) проходит, а на (б) выдаёт ошибку: Error E0030 Syntax error: "parse error at 'JJ&_I_.'" Почему так и что можно сделать? В Harbour всё OK!

PSP: TakOj пишет: Ссылка на пример использования утилит rmake выдаёт - 404 Not Found Ссылка рабочая. Просто в конце стоит "точка". Нужно без нее.

TakOj: PSP пишет: Ссылка рабочая. Просто в конце стоит "точка". Нужно без нее. действительно, не заметил. Спасибо! В строке (б) предыдущего моего поста опечатка (опять). Правильно так: (б) @ prow(),pcol() say jj&_i_.+jj&_i_.[i+1] Но это всё равно не исключает ошибку.

PSP: А можно поподробней описать что такое jj, _i_, i ?

TakOj: Что-то не пойму, что происходит? При отправке сообщения передаются не то, что надо. Вот в виде рисунка

PSP: Ну, к примеру вот такое у меня нормально компилируется и выполняется.

TakOj: PSP пишет: А можно поподробней описать что такое jj, _i_, i ?

TakOj: Ошибка Error E0030 Syntax error: "parse error at 'JJ&_I_.'" выходит при компилировании в xHarbour Compiler build 0.92.0 (SimpLex). Ушла после того, как скомпилировал в xHarbour Compiler build 1.0.0 (SimpLex).

Andrey: Еле нашел то что просили: Порядок работы с HBMake под WinNT/2000/XP такой: 1) Убедится что во вкладке "Переменные среды" (Мой компьютер, свойства, дополнительно) в окружение PATH был доступ к c:\xHarbour\bin и к c:\BCC55\bin неважно где, или в "Системные переменные" или в "Переменные среды пользователя". ( Обязательно, я на этом прогорел......) 2) В своей папке проекта делаем несколько папок OBJ (пустая) PRG ( туда все исходники *.prg ) RES (туда помещаем файл типа mainto.rc, а в нем единственную строчку MainIcon ICON "main.ico" - где main.ico ваша иконка, которая будет значком программы, и в эту же папку помещаем main.ico ) Кстати, оказывается туда можно несколько иконок затолкать, если нужно. 3) Запускаем в корне этих папок команду hbmake my_app.bc -e (если не запускается, то нет пути к c:\xHarbor\bin) где my_app.bc имя вашего проекта 4) появится такое окно: г==== HbMake v1.155 - xHarbour Make Utility Enviroment options =====¬ ¦Select the OS Win32Ё Select the C Compiler BCC Ё Graph Lib None Ё¦ ¦3rd Party Rdd None Ё [ ] Compress this app [ ] use xHarbour[.dll|.so]¦ ¦Obj Files Dir obj-вводим ¦ ¦Executable file name my_app [ ] Create dll ¦ ¦ ¦ 5) далее появится другое окно: ¦ xHarbour Options ¦[ ] Automatic memvar declaration /a [ ] Variables are assumed M-> /v ¦[ ] Debug info /b [ ] Suppress line number information /l ¦[ ] Generate pre-processed output /p [ ] compile module only /m ¦User Defines PRG-вводим User include Path PRG-вводим ¦[ ] Use External Libs [ ] xHarbour FWH ¦Resource file Name: RES-вводим ¦Numbers of source files per line on makefile 5 ¦[ ] Use Multi Thread Library Warning Level /w 0 6) Далее появится окно с исходниками, там нужно нажать клавишу F5, а если нужно убрать из проекта ненужный файл, то воспользуйтесь пробелом. 7) Далее вам нужно указать головной модуль программы, где стоит main() ¦ ¦Inform the main PRG of your application: PRG\MAINTO.PRG ¦ 8) далее появится другое окно: ¦ HbMake options ¦[ ] Create #DEPENDS from #include [ ] Scan recursive ¦Excluding these extensions : .ch НЕ разбирался, что к чему. 9) Далее появится запрос на создание, отвечаем Y. ¦ Build app ? (Y/N) ¦ 10) Далее на запрос компиляции отвечаем Y и ВСЕ !!! Если нет ошибок, то соберется my_app.exe В корне папки появиться файл my_app.bc В Far'e делаем в меню "Ассоциации файлов" вызов на расширение *.bc г================= Редактирование ассоциаций файлов =================¬ ¦ Одна или несколько масок файлов: ¦ ¦ *.bc v¦ ¦ Описание ассоциации: ¦ ¦ xHarbour make file ¦ ¦--------------------------------------------------------------------¦ ¦ Команда, выполняемая по Enter: ¦ ¦ c:\xHarbour\bin\hbmake !.! ¦ Теперь в Far'e нажимаем на my_app.bc клавишей ENTER и проект собираеться. Но у меня почему то не с первой попытки это вышло. Если хотите отредактировать заново проект, то он глючит. Лучше удалить и заново сделать. И у меня еще не установился мой главный модуль, мне пришлось ручками открыть my_app.bc и в объявлениях OBJFILES = ввести первым obj\mainto.obj и PRGFILES = ввести соответственно prg\mainto.prg И наверно в дальнейшем лучше ручками править этот файл. Если есть ошибки при компиляции, то можно использовать такой вызов hbmake my_app.bc -f и в файле my_app.log смотреть их. Благодарите не меня а наших Гуру на форуме !!!

TimTim: Посмотри еще статью, где олисан мой опыт перевода Clipper-проектов на xHarbour http://rapidshare.com/files/42684460/Clip2HB.rar

TakOj: Andrey пишет: Еле нашел то что просили: Порядок работы с HBMake под WinNT/2000/XP такой: Andrey! Это то, что не открывалось по ссылке http://www.clipper.fastbb.ru/?1-4-165-00000089-000-0-0-1160258031 в ветке "[x]Harbour -> Нужна помощь - вывести на консольиндикатор расскладки калавиатуры" ? Спасибо всем гуру и Andrey! Ко мне можно на "ты".

TakOj: TimTim пишет: Посмотри еще статью, где олисан мой опыт перевода Clipper-проектов на xHarbour Скачал. Спасибо! Будем изучать.

TakOj: Vlad04 пишет: ... Батник с Кресинского сайта нормально работает - им постоянно пользуюсь... Ничего против не имею. Vlad04 пишет: Вместо six используй dbfcdx из поставок с xHarbour( вызовы функций только надо поменять - sx_SetTagNo(1)-> DbSetOrder(1) и т.д.) ... А как узнать эти соответствия и где можно их посмотреть? Вот что линкер выдаёт: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland Error: Unresolved external '_HB_FUN_SETRDD' Error: Unresolved external '_HB_FUN_SX_SETSCOPE' Error: Unresolved external '_HB_FUN_SX_CLRSCOPE' Error: Unresolved external '_HB_FUN__SXCONDSET' Error: Unresolved external '_HB_FUN_SX_SETTAG' Error: Unresolved external '_HB_FUN__VDBFSIX' Чем их заменить? Подскажите, плиз!

Vlad04: Вообще убрать ссылки на Six. SX_SETTAG -> IndexOrd() вместо SX_SETSCOPE OrdScope(0,KeyBeg) OrdScope(1,KeyEnd) Вот пример старта ********************* Procedure main local nWosract:=0,n1:=0,n2:=0,n3:=0 ,DdatBeg Local nPos:=0 ,sHouse:='',mHouse:={} REQUEST DBFCDX , DBFFPT REQUEST HB_CODEPAGE_RU866 hb_SetCodepage("RU866") set date brit set century on DdatBeg:=Ctod('01/06/2007') sElect 0 // справочник Use 'GORDATA2' Via "DBFCDX" alias SLAVE if !File('GORDATA2.CDX') INDEX ON STRT_CODE2 Tag STRT_CODE endif DbsetOrder(1) sElect 0 ************************** // список клиентов Use kLIENT Via "DBFCDX" alias Master Сообщи email вышлю весь пример

TakOj: Vlad04 пишет: Сообщи email вышлю весь пример Мой email: takoj3@rambler.ru Заранее спасибо!

TakOj: TakOj пишет Dima! А это ваш сайт "http://spravki.net.ru/clipper/"? Если да, то вопрос по ссылке на "Программа просмотра NG под Windows". Там что то совсем другое. Вот нашёл, что-то похожее(ehwsetup.exe), а может это и именно то. Может ещё кому надо. click here

PSP: Вот ЗДЕСЬ посмотри. Вьювер WEG.

TakOj: PSP пишет: Вот ЗДЕСЬ посмотри. Вьювер WEG. Спасибо! Отличный вьювер, да и сам сайт интересный. Вот только с англ. никак не подружусь

TakOj: Здравствуйте! В SIX Drive для команды INDEX есть такая конструкция: INDEX ON <expKey> TAG <tagname> [OF <cdxname>] ; [FOR <expCondition>] ; [WHILE <while>] ; [ASCENDING | DESCENDING]; [UNIQUE] ; [EMPTY] ; [SUBINDEX] ; [OPTION <expUDF> [STEP <nRecs>]] SUBINDEX позволяет Вам при создании нового индексного файла оставить текущий индекс активным. Это дает Вам возможность создавать "суб-индексы" основанные на других условных индексах. Очень удобно в сетях или на больших файлах данных! Меня интересует параметр SUBINDEX. Чем и как его можно заменить в xHarbour? Спасибо!

Петр: Присмотритесь к USECURRENT The option instructs the database driver to use the current logical order of records for navigating the database during index creation. The logical order is determined by the controlling index and the SET SCOPE restriction. When the USECURRENT clause is omitted, the records in the current work area are evaluated in physical order. USECURRENT указывает драйверу таблицы использовать текущий логический порядок записей для перемещения по таблице во время создания индекса. Логический порядок определяется управляющим индексом и ограничениями SET SCOPE. Если предложение USECURRENT не указано, записи в текущей рабочей области обрабатываются в физическом порядке.

MMK: TakOj пишет: Спасибо! ORDKEYADD() :)

TakOj: Петр и ММК, спасибо вам за подсказку! Буду пробовать. У меня ещё вопрос. Как сделать в xHarbour, чтобы #include "мой.ch", определённый в одном месте, был доступе в нескольких prg-файлах. И, если это возможно, приведите, пожалуйста, небольшой пример. Заранее спасибо!

PSP: Опция -i указывает компилятору путь(ти) к include-файлам. Можно через ; указать несколько путей. Пример из батника для сборки: SET MG_ROOT=c:\minigui SET MG_HRB=c:\xharbour %MG_HRB%\bin\harbour Main.prg -n -i%MG_HRB%\include;%MG_ROOT%\include

Петр: Создайте папку в которую поместите сл.файлы с таким содержимым my_file1.prg #ifdef TEST procedure main ?sub1() ?sub2() #endif my_file2.prg #ifdef TEST procedure sub1() return "sub1()" #endif my_file3.prg #ifdef TEST procedure sub2() return "sub2()" #endif list.bat dir > my.proj *.prg /B /A:-D build.bat set HB_BIN_INSTALL=c:\xharbour\bin set HB_LIB_INSTALL=c:\harbour\lib\ set HB_INC_INSTALL=c:\xharbour\include\ for /F "usebackq eol=# tokens=1 delims=." %%i in (my.proj) do %HB_BIN_INSTALL%\harbour %%i -i%HB_INC_INSTALL% -n -p -u+%HB_INC_INSTALL%my.ch del *.c my.ch #define TEST Поместите my.ch в папку определенную HB_INC_INSTALL Запустите на исполнение сначала list.bat, а потом build.bat. Откройте и посмотрите любой ppo файл и убедитесь в том, правильно ли прошел процесс компиляции.

TakOj: Петр пишет: Создайте папку в которую поместите сл.файлы с таким содержимым ... Петр, я сделал всё как вы описали. list.bat отрабатывает ОК! build.bat выдает следующее: К моему стыду, я никогда не работал с командой FOR, но интуитивно догадываюсь, что происходит в строке с FOR build.bat–файла. Создал такой батник (опираясь на build.bat) : set HB_BIN_INSTALL=c:\xharbour\xharbour\bin set HB_LIB_INSTALL=c:\xharbour\xharbour\lib\ set HB_INC_INSTALL=c:\xharbour\xharbour\include\ %HB_BIN_INSTALL%\harbour my_file1.prg my_file2.prg my_file3.prg -n -p -u -i%HB_INC_INSTALL%my.ch d:\borland\bcc55\bin\bcc32 -O2 -d -I%HB_INC_INSTALL% -L%HB_LIB_INSTALL% my_file1.c my_file2.c my_file3.c @l_lib.lnk l_lib.lnk: debug.lib vm.lib gtwin.lib rtl.lib pcrepos.lib codepage.lib lang.lib rdd.lib macro.lib dbfntx.lib dbfcdx.lib dbffpt.lib hbsix.lib common.lib ct.lib Получил рро-файлы, но они пустые. Это нормально? Ехе-файл ничего не выводит на экран. Что деляю неправильно?

Петр: Вы скопировали текст из страницы в батник и забыли при этом удалить пробелы в конце строк, поэтому у Вас все так и получилось. Обязательно после set HB_BIN_INSTALL=c:\xharbour\xharbour\bin set HB_LIB_INSTALL=c:\xharbour\xharbour\lib\ set HB_INC_INSTALL=c:\xharbour\xharbour\include\ поудаляйте все пробелы в конце строк, это особенность работы bat файлов. И вторая ошибка %HB_BIN_INSTALL%\harbour my_file1.prg my_file2.prg my_file3.prg -n -p -u+%HB_INC_INSTALL%my.ch Именно -u+мой.ch Вам и нужен, а FOR - это так, для удобства

Петр: TakOj пишет: Получил рро-файлы, но они пустые. Это нормально? Ну и конечно это не нормально Т.е. я хочу сказать, что это не тот результат, на который мы вправе рассчитывать

TakOj: Петр пишет: Т.е. я хочу сказать, что это не тот результат, на который мы вправе рассчитывать Всё получилось! Петр, большое спасибо за столь подробный разбор моих ошибок! После первой победы – есть желание двигаться дальше.



полная версия страницы