diff --git a/harbour/ChangeLog b/harbour/ChangeLog index e50ec70fd6..77fef4c2af 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,30 @@ past entries belonging to author(s): Viktor Szakats. */ +2009-09-16 09:22 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + * harbour/bin/hb-func.sh + * updated hb* scripts to work with HAIKU/BEOS + + * harbour/source/vm/dynlibhb.c + * enabled dlopen()/dlclose() in HAIKU/BEOS builds + * added TODO warning in non DOS builds which does not support + dynamic library loading + + * harbour/source/rtl/fserr.c + ! fixed errno translation + + * harbour/source/rtl/gttrm/gttrm.c + + added support for CTRL+{UP,DOWN,RIGHT,LEFT} keys in HAIKU XTerm. + + added hack for UP,DOWN,RIGHT,LEFT keys in HAIKU XTerm - it works + only locally. + * added two notes about problems with HAIKU XTerm which cannot be + cleanly resolved by us: + - reverted MIDDLE and RIGHT button + - UP,DOWN,RIGHT,LEFT use the same sequences as + CTRL+{UP,DOWN,RIGHT,LEFT} in XTerm 3.x.x + any hardcoded solution is wrong in such case because XTerm can + be used for remote access. + 2009-09-16 02:44 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/source/common/hbgete.c ! fixed typo diff --git a/harbour/bin/hb-func.sh b/harbour/bin/hb-func.sh index 386260a161..bea68fe182 100755 --- a/harbour/bin/hb-func.sh +++ b/harbour/bin/hb-func.sh @@ -194,7 +194,11 @@ mk_hbtools() [ -z "${_DEFAULT_INC_DIR}" ] && _DEFAULT_INC_DIR="${HB_INC_INSTALL}" [ -z "${_DEFAULT_LIB_DIR}" ] && _DEFAULT_LIB_DIR="${HB_LIB_INSTALL}" - HB_SYS_LIBS="-lm" + if [ "${HB_PLATFORM}" = "beos" ]; then + HB_SYS_LIBS="-lroot -lsocket" + else + HB_SYS_LIBS="-lm" + fi HB_CRS_LIB="" HB_SLN_LIB="" if [ "${HB_USER_CFLAGS//-DHB_PCRE_REGEX/}" != "${HB_USER_CFLAGS}" ]; then @@ -574,6 +578,10 @@ for gt in \${HB_GT_REQ}; do # fi done +if [ "\${HB_PLATFORM}" = "beos" ]; then + SYSTEM_LIBS="-L/system/lib \${SYSTEM_LIBS}" +fi + HB_LNK_ATTR="" HARBOUR_LIBS="" @@ -829,7 +837,11 @@ mk_hblibso() LIBS="" LIBSMT="" gpm="${HB_HAS_GPM}" - linker_options="-lm" + if [ "${HB_PLATFORM}" = "beos" ]; then + linker_options="-L/system/lib -lroot -lsocket" + else + linker_options="-lm" + fi linker_mtoptions="" if [ "${HB_USER_CFLAGS//-DHB_PCRE_REGEX/}" != "${HB_USER_CFLAGS}" ]; then linker_options="-lpcre ${linker_options}" diff --git a/harbour/source/rtl/fserr.c b/harbour/source/rtl/fserr.c index 910eddaa32..a42becb049 100644 --- a/harbour/source/rtl/fserr.c +++ b/harbour/source/rtl/fserr.c @@ -252,12 +252,14 @@ void hb_fsSetIOError( BOOL fResult, USHORT uiOperation ) } else { - uiOsErrorLast = errno; - uiErrorLast = hb_errnoToDosError( errno ); + int iErrCode = errno; + uiOsErrorLast = iErrCode; + uiErrorLast = hb_errnoToDosError( iErrCode ); } #else - uiOsErrorLast = errno; - uiErrorLast = hb_errnoToDosError( uiOsErrorLast ); + int iErrCode = errno; + uiOsErrorLast = iErrCode; + uiErrorLast = hb_errnoToDosError( iErrCode ); #endif } pIOErrors = hb_stackIOErrors(); diff --git a/harbour/source/rtl/gttrm/gttrm.c b/harbour/source/rtl/gttrm/gttrm.c index d7a76899e8..966a0252c4 100644 --- a/harbour/source/rtl/gttrm/gttrm.c +++ b/harbour/source/rtl/gttrm/gttrm.c @@ -1002,6 +1002,19 @@ static void set_tmevt( PHB_GTTRM pTerm, unsigned char *cMBuf, mouseEvent * mEvt mEvt->col = col; } +#if defined( HB_OS_BEOS ) + /* warning in HAIKU/BEOS MIDDLE and RIGHT buttons are reverted */ + switch( cMBuf[0] & 0xC3 ) + { + case 0x1: + cMBuf[0] = 0x2; + break; + case 0x2: + cMBuf[0] = 0x1; + break; + } +#endif + switch( cMBuf[0] & 0xC3 ) { case 0x0: @@ -2397,6 +2410,28 @@ static void init_keys( PHB_GTTRM pTerm ) { 0, NULL } }; +#if defined( HB_OS_BEOS ) + /* warning above XFree 3.x.x CTRL + {UP,DOWN,RIGHT,LEFT} kyes create + * collision with HAIKU/BEOS XTerm and standard CTRL keys + */ + static const keySeq haikuStdKeySeq[] = { + { EXKEY_UP , "\033OA" }, + { EXKEY_DOWN , "\033OB" }, + { EXKEY_RIGHT, "\033OC" }, + { EXKEY_LEFT , "\033OD" }, + + { 0, NULL } }; +#endif + + static const keySeq haikuCtrlKeySeq[] = { + /* HAIKU/BEOS XTerm CTRL + {UP,DOWN,RIGHT,LEFT} kyes */ + { EXKEY_UP |KEY_CTRLMASK, "\033O5A" }, + { EXKEY_DOWN |KEY_CTRLMASK, "\033O5B" }, + { EXKEY_RIGHT |KEY_CTRLMASK, "\033O5C" }, + { EXKEY_LEFT |KEY_CTRLMASK, "\033O5D" }, + + { 0, NULL } }; + static const keySeq rxvtKeySeq[] = { { EXKEY_HOME, "\033[H" }, @@ -2708,6 +2743,10 @@ static void init_keys( PHB_GTTRM pTerm ) addKeyTab( pTerm, stdCursorKeySeq ); addKeyTab( pTerm, xtermModKeySeq ); addKeyTab( pTerm, puttyKeySeq ); + addKeyTab( pTerm, haikuCtrlKeySeq ); +#if defined( HB_OS_BEOS ) + addKeyTab( pTerm, haikuStdKeySeq ); +#endif } else if( pTerm->terminal_type == TERM_LINUX ) { diff --git a/harbour/source/vm/dynlibhb.c b/harbour/source/vm/dynlibhb.c index 403b5cff19..249bfc4bf1 100644 --- a/harbour/source/vm/dynlibhb.c +++ b/harbour/source/vm/dynlibhb.c @@ -66,8 +66,8 @@ #if !defined( HB_HAS_DLFCN ) && \ ( ( defined( HB_OS_LINUX ) && !defined( __WATCOMC__ ) ) || \ - defined( HB_OS_SUNOS ) || \ - defined( HB_OS_DARWIN ) ) + defined( HB_OS_SUNOS ) || defined( HB_OS_DARWIN ) || \ + defined( HB_OS_BEOS ) ) # define HB_HAS_DLFCN #endif @@ -113,6 +113,10 @@ HB_FUNC( HB_LIBLOAD ) } #elif defined( HB_HAS_DLFCN ) hDynLib = ( void * ) dlopen( hb_parc( 1 ), RTLD_LAZY | RTLD_GLOBAL ); +#elif !defined( HB_OS_DOS ) + { + int TODO; + } #endif /* set real marker */ hb_vmInitSymbolGroup( hDynLib, argc, argv );