Форум » 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

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



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