On-line: Pasha, PSP, гостей 2. Всего: 4 [подробнее..]
АвторСообщение





Пост 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()
и некоторые другие...

Поделитесь инфой - кто что знает!

Спасибо: 0 
Профиль
Ответов - 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
Хотя ничего не мешает перенести их их одного проекта в другой


Спасибо: 1 
Профиль





Пост N: 71
Зарегистрирован: 06.06.06
ссылка на сообщение  Отправлено: 07.12.06 18:41. Заголовок: Re:


Паша, спасибо.
Начал сравнивать Harbour и xHarbour - понял что в последнем
набор реализованных CT-функций больше - может стоит переходить на него?


Спасибо: 0 
Профиль
администратор




Пост N: 503
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 07.12.06 20:07. Заголовок: Re:


ort пишет:

 цитата:
Начал сравнивать Harbour и xHarbour - понял что в последнем
набор реализованных CT-функций больше - может стоит переходить на него?


Конечно !

Спасибо: 0 
Профиль





Пост N: 72
Зарегистрирован: 06.06.06
ссылка на сообщение  Отправлено: 08.12.06 16:09. Заголовок: Re:


Не могу найти аналог CT-функции TrueName() в xHarbour - кто знает?

Спасибо: 0 
Профиль
Администратор




Пост 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


Спасибо: 1 
Профиль





Пост 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.
Только не помню откуда я его скачал...
Поиски ничего не дали

Спасибо: 0 
Профиль



Пост N: 50
Зарегистрирован: 30.05.05
ссылка на сообщение  Отправлено: 08.12.06 23:10. Заголовок: Re:


Pasha
>>Вообще у меня накопилось немного изменений - несколько функций из ct, изменения в дебаггере, но сейчас xHarbour в состоянии bug freeze >>перед выходом нового релиза, то есть желательно только исправлять баги и не вностить новые. Поэтому я не тороплюсь заливать это все на >>CVS

Пусть hbmake.exe поправят, а то он без параметро ошибку выдает! Не солидно как-то!


Спасибо: 0 
Профиль
постоянный участник


Пост 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'и будут


Спасибо: 1 
Профиль
постоянный участник


Пост N: 68
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 08.12.06 23:15. Заголовок: Re:


А xHRB-300505.EXE Вы наверное с xHarbour.com стащили

Спасибо: 0 
Профиль





Пост N: 75
Зарегистрирован: 06.06.06
ссылка на сообщение  Отправлено: 09.12.06 15:44. Заголовок: Re:


Петр, откуда скачал xHRB-300505.exe - не помню, но в нем есть все-все.
А вот на xHarbour.com такой сборки я что-то не нашел.

Спасибо: 0 
Профиль
постоянный участник


Пост 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.
А вообще, легче искать конкретную библиотеку, которая нужна для работы, чем универсальный большой пакет, большей частью функциональности которого никогда воспользоваться не придется.




Спасибо: 0 
Профиль





Пост N: 76
Зарегистрирован: 06.06.06
ссылка на сообщение  Отправлено: 11.12.06 12:30. Заголовок: Re:


Петр, на xHarbour.com подобных сборок таки нет.
Есть xHarbour Builder for Windows (мощностью 17 мегатон) - думаю, он мне не нужен

Спасибо: 0 
Профиль
модератор




Пост N: 370
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 11.12.06 13:11. Заголовок: Re:


Петр пишет:

 цитата:
Скачайте ещё xharbour-0.99.60.src.contrib.zip


ort,
Этот файл лежит по следующему адресу:
http://minigui.mylivepage.ru/file/?fileid=382

Спасибо: 1 
Профиль





Пост N: 78
Зарегистрирован: 06.06.06
ссылка на сообщение  Отправлено: 11.12.06 13:57. Заголовок: Re:


Григорий, спасибо, я уже скачал!

Спасибо: 0 
Профиль





Пост 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

Чем лучше заменить - похожими, стандарными, самопальными и т.д.?
Есть ли какие-то грабли при их использовании?

Спасибо: 0 
Профиль
Администратор




Пост 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-го прерывания, современные ОС так просто
к ним доступа не дадут, мнээ, не знаю, массаракш-и-масаракш



Спасибо: 1 
Профиль





Пост N: 81
Зарегистрирован: 06.06.06
ссылка на сообщение  Отправлено: 11.12.06 19:05. Заголовок: Re:


Паша, по каждому пункту - отдельное спасибо!
DosParam - сегодня так себе и представил ее реализацию.

Спасибо: 0 
Профиль
Администратор




Пост 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).
Там атрибуты корректно перекодируются в платформеннонезависимый формат
Переделаю, но уже не сегодня.


Спасибо: 0 
Профиль





Пост 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 |
В чем причина?

Спасибо: 0 
Профиль
Администратор




Пост N: 447
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 12.12.06 12:34. Заголовок: Re:


ort пишет:

 цитата:
А что такое массаракш?



:)
Это из Стругацких, Обитаемый остров
Народное ругательство такое

С nanfor посмотрю
FT_MRESET возвращает логический тип, который сравнивается с числом

Спасибо: 0 
Профиль





Пост N: 84
Зарегистрирован: 06.06.06
ссылка на сообщение  Отправлено: 12.12.06 13:03. Заголовок: Re:


А что разве никто не использует FT_MINIT?

Спасибо: 0 
Профиль





Пост 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


Спасибо: 0 
Профиль
Администратор




Пост N: 448
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 12.12.06 14:06. Заголовок: Re:


ort пишет:

 цитата:
А что разве никто не использует FT_MINIT?



Интересный вопрос

Я смотрю эти сырцы nanfor были залиты еще в 2003-м году уже в таком виде
То есть вместо вызовов дос были вставлены вызовы харбора, но некорректно -
функции стали возвращать значения других типов
Теперь надо править


Спасибо: 1 
Профиль





Пост N: 86
Зарегистрирован: 06.06.06
ссылка на сообщение  Отправлено: 12.12.06 15:48. Заголовок: Re:


Погулял я по mouse1.prg - впечатление такое, что мышь из libnf никто не использует.
А как можно иначе?

Спасибо: 0 
Профиль





Пост N: 88
Зарегистрирован: 06.06.06
ссылка на сообщение  Отправлено: 18.12.06 16:24. Заголовок: Re:


Паша, а KbdStat() никак не реагирует на Alt-клавиши. Как быть?

Спасибо: 0 
Профиль





Пост N: 89
Зарегистрирован: 06.06.06
ссылка на сообщение  Отправлено: 18.12.06 16:28. Заголовок: Re:


Pasha пишет:

 цитата:
3) KEYSEND

Она же работает со скэнкодами. Лучше использовать __Keyboard



Паша, а мне как раз нужны скэнкоды

Спасибо: 0 
Профиль
Администратор




Пост 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


Спасибо: 1 
Профиль





Пост N: 90
Зарегистрирован: 06.06.06
ссылка на сообщение  Отправлено: 18.12.06 17:48. Заголовок: Re:


Паша, спасибо за все ответы!
А как дела с nanfor.lib? Что-нибудь удастся сделать?

Спасибо: 0 
Профиль
Администратор




Пост N: 459
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 18.12.06 18:01. Заголовок: Re:


У меня сейчас нет времени этим заниматься
Там похоже просто заменены все вызовы FT_INT86 для 0x33, частично некорректно
надо пройтись по всем веткам и проверить
И найти аналоги в win32 некоторым вещам, например к-во кнопок, тип мышки
А если найти не удастся то поставить хоть что-нибудь чтобы не было вылета
Это модуль contrib\libnf\mouse.c

Спасибо: 1 
Профиль
постоянный участник




Пост 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


Спасибо: 1 
Профиль





Пост N: 95
Зарегистрирован: 06.06.06
ссылка на сообщение  Отправлено: 22.12.06 10:38. Заголовок: Re:


Андрей, спасибо за идею, но моей проблемы это полностью не решает.
Харбор, как и Клиппер, не различает, например, End и Ctrl-F.
С помощью KeySend() это сделать проще простого - поскольку сканкоды у них разные.
Мне же нужно занести в буфер клавиатуры именно нажатие End...

Спасибо: 0 
Профиль
Администратор




Пост 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

и пересобрать весь харбор
свои программы надо тоже собирать с этим флагом

Спасибо: 1 
Профиль





Пост N: 97
Зарегистрирован: 06.06.06
ссылка на сообщение  Отправлено: 22.12.06 11:33. Заголовок: Re:


Паша, пересобирать Харбор - я еще не дорос до этого!


Спасибо: 0 
Профиль
Ответов - 33 , стр: 1 2 All [только новые]
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 148
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет