Автор | Сообщение |
|
| |
Пост N: 70
Зарегистрирован: 06.06.06
|
|
Отправлено: 07.12.06 17:48. Заголовок: Аналоги функций CT.LIB для Harbour
Привет всем на форуме! Помогите, пожалуйста с переходом на Harbour!!! Перерабатываю библиотеку своих функций под Harbour. Но вот проблема - нет некоторых используемых функции из Clipper Tools. В частности: 1) Millisec() 2) Random() 3) Keysend() 4) NumHigh() и NumLow() 5) KbdStat() и некоторые другие... Поделитесь инфой - кто что знает!
|
|
|
Ответов - 33
, стр:
1
2
All
[только новые]
|
|
|
| Администратор
|
Пост N: 424
Зарегистрирован: 23.05.05
|
|
Отправлено: 07.12.06 17:59. Заголовок: Re:
Random: #include "common.ch" Function Random(lMode) DEFAULT lMode TO .T. Return if( lMode, HB_RandomInt( 0, 65535 ), HB_RandomInt( -32768, 32767 ) ) numhigh и numlow, millisec, kbdstat есть в ct.lib xHb, может нет в Harbour keysend специфична для дос, воникают сложности при ее реализации Набор реализованных ct функций в Harbour меньше чем в xHarbour Хотя ничего не мешает перенести их их одного проекта в другой
|
|
|
|
| |
Пост N: 71
Зарегистрирован: 06.06.06
|
|
Отправлено: 07.12.06 18:41. Заголовок: Re:
Паша, спасибо. Начал сравнивать Harbour и xHarbour - понял что в последнем набор реализованных CT-функций больше - может стоит переходить на него?
|
|
|
|
| |
Пост N: 503
Зарегистрирован: 17.05.05
|
|
Отправлено: 07.12.06 20:07. Заголовок: Re:
ort пишет: цитата: | Начал сравнивать Harbour и xHarbour - понял что в последнем набор реализованных CT-функций больше - может стоит переходить на него? |
| Конечно !
|
|
|
|
| |
Пост N: 72
Зарегистрирован: 06.06.06
|
|
Отправлено: 08.12.06 16:09. Заголовок: Re:
Не могу найти аналог CT-функции TrueName() в xHarbour - кто знает?
|
|
|
|
| Администратор
|
Пост N: 426
Зарегистрирован: 23.05.05
|
|
Отправлено: 08.12.06 18:04. Заголовок: Re:
Она не реализована. Но для win32 ее можно сделать так (вставить в prg): #pragma BEGINDUMP #include "hbapi.h" #ifdef HB_OS_WIN_32 #include <windows.h> #endif HB_FUNC( TRUENAME ) { if( ISCHAR(1) ) { char * szFile = hb_parc( 1 ); #ifdef HB_OS_WIN_32 char *szBuffRet = NULL ; char buffer[ MAX_PATH + 1 ] = {0}; GetFullPathName( (LPCSTR) szFile, MAX_PATH , (LPSTR) buffer , &szBuffRet ) ; hb_retc( buffer ); #else hb_retc( szFile ); #endif } else { hb_retc(""); } } #pragma ENDDUMP Вообще у меня накопилось немного изменений - несколько функций из ct, изменения в дебаггере, но сейчас xHarbour в состоянии bug freeze перед выходом нового релиза, то есть желательно только исправлять баги и не вностить новые. Поэтому я не тороплюсь заливать это все на CVS
|
|
|
|
| |
Пост N: 74
Зарегистрирован: 06.06.06
|
|
Отправлено: 08.12.06 18:57. Заголовок: Re:
Паша, дякую! Еще вопрос... Скачал последний xharbour-0.99.60.bin.w32.bcc32.zip. Распаковал - нет всех библиотек С прошлого года есть такой архив xHRB-300505.EXE (6,126,476 байт от 30.05.05). Вот в нем библиотек аж 60 и ChangeLog'ов 23. Только не помню откуда я его скачал... Поиски ничего не дали
|
|
|
|
| |
Пост N: 50
Зарегистрирован: 30.05.05
|
|
Отправлено: 08.12.06 23:10. Заголовок: Re:
Pasha >>Вообще у меня накопилось немного изменений - несколько функций из ct, изменения в дебаггере, но сейчас xHarbour в состоянии bug freeze >>перед выходом нового релиза, то есть желательно только исправлять баги и не вностить новые. Поэтому я не тороплюсь заливать это все на >>CVS Пусть hbmake.exe поправят, а то он без параметро ошибку выдает! Не солидно как-то!
|
|
|
|
| постоянный участник
|
Пост N: 67
Зарегистрирован: 09.10.06
|
|
Отправлено: 08.12.06 23:11. Заголовок: Re:
ort пишет: цитата: | Скачал последний xharbour-0.99.60.bin.w32.bcc32.zip. Распаковал - нет всех библиотек |
| Скачайте ещё xharbour-0.99.60.src.contrib.zip - библиотек добавится. А еще лучше качайте xHarbour с CVS - тогда и библиотеки и ChangeLog'и будут
|
|
|
|
| постоянный участник
|
Пост N: 68
Зарегистрирован: 09.10.06
|
|
Отправлено: 08.12.06 23:15. Заголовок: Re:
А xHRB-300505.EXE Вы наверное с xHarbour.com стащили
|
|
|
|
| |
Пост N: 75
Зарегистрирован: 06.06.06
|
|
Отправлено: 09.12.06 15:44. Заголовок: Re:
Петр, откуда скачал xHRB-300505.exe - не помню, но в нем есть все-все. А вот на xHarbour.com такой сборки я что-то не нашел.
|
|
|
|
| постоянный участник
|
Пост N: 71
Зарегистрирован: 09.10.06
|
|
Отправлено: 09.12.06 16:25. Заголовок: Re:
ort пишет: цитата: | А вот на xHarbour.com такой сборки я что-то не нашел. |
| Все течет, все изменяется В марте 2006 Вы могли оттуда скачать xHB-Demo-March2006-3.exe, в августе xHB-Demo-August2006-RC9.exe, потом был October, теперь, наверное, December . Собственно, я и не утверждал, но в любом случае у Вас была сборка xHarbour состоянием на 30 мая 2005 года. Кстати, я писал "А еще лучше качайте xHarbour с CVS" - после сборки с использованием makallbc.bat у Вас будет около 60 библиотек (стандартные ST/MT, contrib). Еще скачайте MiniGUI Extended, HwGUI - там есть сырцы некоторых библиотек, откомпилируйте их для использования с xHarbour. А вообще, легче искать конкретную библиотеку, которая нужна для работы, чем универсальный большой пакет, большей частью функциональности которого никогда воспользоваться не придется.
|
|
|
|
|
| |
Пост N: 76
Зарегистрирован: 06.06.06
|
|
Отправлено: 11.12.06 12:30. Заголовок: Re:
Петр, на xHarbour.com подобных сборок таки нет. Есть xHarbour Builder for Windows (мощностью 17 мегатон) - думаю, он мне не нужен
|
|
|
|
| модератор
|
Пост N: 370
Зарегистрирован: 25.05.05
|
|
Отправлено: 11.12.06 13:11. Заголовок: Re:
|
|
|
|
| |
Пост N: 78
Зарегистрирован: 06.06.06
|
|
Отправлено: 11.12.06 13:57. Заголовок: Re:
Григорий, спасибо, я уже скачал!
|
|
|
|
| |
Пост N: 80
Зарегистрирован: 06.06.06
|
|
Отправлено: 11.12.06 17:18. Заголовок: Re:
Помогите с аналогами следующих функций: 1) DOSPARAM 2) KBDSTAT 3) KEYSEND 4) TRAPSHIFT 5) RESTFSEEK/SAVEFSEEK 6) ERRORBASE/ERRORCODE 7) GETSCRMODE/SETSCRMODE Чем лучше заменить - похожими, стандарными, самопальными и т.д.? Есть ли какие-то грабли при их использовании?
|
|
|
|
| Администратор
|
Пост N: 441
Зарегистрирован: 23.05.05
|
|
Отправлено: 11.12.06 18:24. Заголовок: Re:
Навскидку 1) DOSPARAM Function DosParam Local cRet := "" Local nCount := HB_ARGC(), i for i := 1 to nCount cRet += " " + HB_ARGV( i ) next Return cRet Извини, не проверял (C) Брат-2 2) KBDSTAT Уже реализована, но после релиза 99.60 Через #pragma вот она: #include "hbapi.h" #include "hbapigt.h" #include "gtinfo.ch" #include "hbset.h" HB_FUNC( KBDSTAT ) { int iState = hb_gt_info(GTI_KBDSHIFTS, FALSE, 0, NULL); int iRet = 0; if ( iState & GTI_KBD_SHIFT ) iRet += 1; if ( iState & GTI_KBD_CTRL ) iRet += 4; if ( iState & GTI_KBD_ALT ) iRet += 8; if ( iState & GTI_KBD_SCROLOCK ) iRet += 0x10; if ( iState & GTI_KBD_NUMLOCK ) iRet += 0x20; if ( iState & GTI_KBD_CAPSLOCK ) iRet += 0x40; if ( hb_set.HB_SET_INSERT ) iRet += 0x80; hb_retni( iRet ); } 3) KEYSEND Она же работает со скэнкодами. Лучше использовать __Keyboard 4) TRAPSHIFT Наверное можно реализовать через HB_IdleAdd, можно попробовать 5) RESTFSEEK/SAVEFSEEK Тоже можно попробовать сделать 6) ERRORBASE/ERRORCODE Очень уж специфично для дос, не знаю как их сделать Может кто подскажет 7) GETSCRMODE/SETSCRMODE Это же массаракш видеорежимы 10-го прерывания, современные ОС так просто к ним доступа не дадут, мнээ, не знаю, массаракш-и-масаракш
|
|
|
|
| |
Пост N: 81
Зарегистрирован: 06.06.06
|
|
Отправлено: 11.12.06 19:05. Заголовок: Re:
Паша, по каждому пункту - отдельное спасибо! DosParam - сегодня так себе и представил ее реализацию.
|
|
|
|
| Администратор
|
Пост N: 442
Зарегистрирован: 23.05.05
|
|
Отправлено: 11.12.06 22:45. Заголовок: Re:
Я в принципе сделал SaveFSeek() / RestFSeek(): Отдельно компилировать нельзя, надо вставить в модуль source\ct\files.c, так как там используются static-структуры этого модуля HB_FUNC( SAVEFSEEK ) { #if defined( HB_OS_WIN_32 ) && !defined( __CYGWIN__ ) char * szSeekEnv = hb_xgrab( sizeof( Lastff32 ) + 1 ); memcpy( (void *) szSeekEnv, (void *) &Lastff32, sizeof( Lastff32 ) ); hb_retclenAdopt( (char *) &Lastff32, sizeof( Lastff32 ) ); #elif defined( HB_OS_DOS ) && !defined( __WATCOMC__ ) char * szSeekEnv = hb_xgrab( sizeof( fsOldFiles ) + 1 ); memcpy( (void *) szSeekEnv, (void *) &fsOldFiles, sizeof( fsOldFiles ) ); hb_retclenAdopt( (char *) &fsOldFiles, sizeof( fsOldFiles ) ); #else hb_retc( "" ); #endif } HB_FUNC( RESTFSEEK ) { #if defined( HB_OS_WIN_32 ) && !defined( __CYGWIN__ ) if( ISCHAR(1) && hb_parclen( 1 ) == sizeof( Lastff32 ) ) { memcpy( (void *) &Lastff32, (void *) hb_parc(1), sizeof( Lastff32 ) ); } #elif defined( HB_OS_DOS ) && !defined( __WATCOMC__ ) if( ISCHAR(1) && hb_parclen( 1 ) == sizeof( fsOldFiles ) ) { memcpy( (void *) &fsOldFiles, (void *) hb_parc(1), sizeof( fsOldFiles ) ); } #endif hb_retc( "" ); } но увы увы увы Выясняется масса несовместимостей с клиппер xHb FileSeek() не поддерживает атрибуты для win32 FileAttr() возвращает атрибуты в ОС-зависимом формате и не учитывает случай когда параметр опущен, т.е. не связан с FileSeek() FileDate FileTime тоже не связаны с FileSeek Вобщем этот модуль требует коренной переделки. Средства FileSeek() надо использовать из source\rtl\hbffind.c - это Harbour File Find API (C level). Там атрибуты корректно перекодируются в платформеннонезависимый формат Переделаю, но уже не сегодня.
|
|
|
|
| |
Пост N: 82
Зарегистрирован: 06.06.06
|
|
Отправлено: 12.12.06 10:12. Заголовок: Re:
Pasha пишет: цитата: | Это же массаракш видеорежимы |
| А что такое массаракш? Инициализация мыши FT_MINIT вылетает с ошибкой: Error BASE/1072 Argument error: <> Arguments: ( [ 1] = Type: L Val: .F. [ 2] = Type: N Val: 0) Error at ...: FT_MINIT(754) in Module: mouse1.prg | В чем причина?
|
|
|
|
| Администратор
|
Пост N: 447
Зарегистрирован: 23.05.05
|
|
Отправлено: 12.12.06 12:34. Заголовок: Re:
ort пишет: :) Это из Стругацких, Обитаемый остров Народное ругательство такое С nanfor посмотрю FT_MRESET возвращает логический тип, который сравнивается с числом
|
|
|
|
| |
Пост N: 84
Зарегистрирован: 06.06.06
|
|
Отправлено: 12.12.06 13:03. Заголовок: Re:
А что разве никто не использует FT_MINIT?
|
|
|
|
|
| |
Пост N: 85
Зарегистрирован: 06.06.06
|
|
Отправлено: 12.12.06 13:06. Заголовок: Re:
Ошибка в FT_MGETPOS(): Error BASE/1132 Bound error: array access Arguments: ( [ 1] = Type: A Val: { Array of 2 Items } [ 2] = Type: N Val: 3) Error at ...: FT_MGETPOS(1007) in Module: mouse1.prg И еще ошибка в FT_MBUTPRS(): Error BASE/1132 Bound error: array access Arguments: ( [ 1] = Type: A Val: { Array of 0 Items } [ 2] = Type: N Val: 1) Error at ...: FT_MBUTPRS(1279) in Module: mouse1.prg
|
|
|
|
| Администратор
|
Пост N: 448
Зарегистрирован: 23.05.05
|
|
Отправлено: 12.12.06 14:06. Заголовок: Re:
ort пишет: цитата: | А что разве никто не использует FT_MINIT? |
| Интересный вопрос Я смотрю эти сырцы nanfor были залиты еще в 2003-м году уже в таком виде То есть вместо вызовов дос были вставлены вызовы харбора, но некорректно - функции стали возвращать значения других типов Теперь надо править
|
|
|
|
| |
Пост N: 86
Зарегистрирован: 06.06.06
|
|
Отправлено: 12.12.06 15:48. Заголовок: Re:
Погулял я по mouse1.prg - впечатление такое, что мышь из libnf никто не использует. А как можно иначе?
|
|
|
|
| |
Пост N: 88
Зарегистрирован: 06.06.06
|
|
Отправлено: 18.12.06 16:24. Заголовок: Re:
Паша, а KbdStat() никак не реагирует на Alt-клавиши. Как быть?
|
|
|
|
| |
Пост N: 89
Зарегистрирован: 06.06.06
|
|
Отправлено: 18.12.06 16:28. Заголовок: Re:
Pasha пишет: цитата: | 3) KEYSEND Она же работает со скэнкодами. Лучше использовать __Keyboard |
| Паша, а мне как раз нужны скэнкоды
|
|
|
|
| Администратор
|
Пост N: 458
Зарегистрирован: 23.05.05
|
|
Отправлено: 18.12.06 17:19. Заголовок: Re:
ort пишет: цитата: | Паша, а KbdStat() никак не реагирует на Alt-клавиши. Как быть? |
| Это из-за терминала Зачем-то в source\rtl\gtwin.c закомментирована строка 2560 // if ( GetKeyState( VK_MENU ) & 0x080 ) kbdShifts += GTI_KBD_ALT; Если снять комментарий, то будет все ок, я проверил, правда левый и правый алт не различаются цитата: | Паша, а мне как раз нужны скэнкоды |
| Советую написать свою функцию KbdSend Сделать таблицу соответствия скэнкодов и кодов клиппера Static aTbl := {; {<скэнкод>, <код клавиши>},; ... } выполнять поиск в таблице и заносить код клавиши через __Keyboard
|
|
|
|
| |
Пост N: 90
Зарегистрирован: 06.06.06
|
|
Отправлено: 18.12.06 17:48. Заголовок: Re:
Паша, спасибо за все ответы! А как дела с nanfor.lib? Что-нибудь удастся сделать?
|
|
|
|
| Администратор
|
Пост N: 459
Зарегистрирован: 23.05.05
|
|
Отправлено: 18.12.06 18:01. Заголовок: Re:
У меня сейчас нет времени этим заниматься Там похоже просто заменены все вызовы FT_INT86 для 0x33, частично некорректно надо пройтись по всем веткам и проверить И найти аналоги в win32 некоторым вещам, например к-во кнопок, тип мышки А если найти не удастся то поставить хоть что-нибудь чтобы не было вылета Это модуль contrib\libnf\mouse.c
|
|
|
|
| постоянный участник
|
Пост N: 193
Зарегистрирован: 12.09.06
|
|
Отправлено: 21.12.06 22:19. Заголовок: Re:
Я сделал так. Вызов из программы везде заменить на myKEYSEND(KS_F7, K_F7) ************************** FUNCTION myKEYSEND(nSKey, nKey) #ifndef __HARBOUR__ KEYSEND(nSKey) #else HB_KeyPut(nKey) #endif
|
|
|
|
| |
Пост N: 95
Зарегистрирован: 06.06.06
|
|
Отправлено: 22.12.06 10:38. Заголовок: Re:
Андрей, спасибо за идею, но моей проблемы это полностью не решает. Харбор, как и Клиппер, не различает, например, End и Ctrl-F. С помощью KeySend() это сделать проще простого - поскольку сканкоды у них разные. Мне же нужно занести в буфер клавиатуры именно нажатие End...
|
|
|
|
|
| Администратор
|
Пост N: 462
Зарегистрирован: 23.05.05
|
|
Отправлено: 22.12.06 11:10. Заголовок: Re:
Эту проблему можно решить по другому Надо пересобрать харбор с флагом HB_EXT_INKEY Тогда коды у K_END и K_CTRL_F будут разные, это касается и других пересекающихся кодов По кодам совместимости с клиппером не будет, но такая совместимость и не нужна Для этого надо в makefile.bc добавить к CFLAGS и HARBOURFLAGS этот define: CFLAGS = $(CFLAGS) -DHB_EXT_INKEY HARBOURFLAGS = $(HARBOURFLAGS) -dHB_EXT_INKEY и пересобрать весь харбор свои программы надо тоже собирать с этим флагом
|
|
|
|
| |
Пост N: 97
Зарегистрирован: 06.06.06
|
|
Отправлено: 22.12.06 11:33. Заголовок: Re:
Паша, пересобирать Харбор - я еще не дорос до этого!
|
|
|
Ответов - 33
, стр:
1
2
All
[только новые]
|
|