From 61854e0ddaf8a0267066922fe1169ac127709a36 Mon Sep 17 00:00:00 2001 From: Przemyslaw Czerpak Date: Tue, 28 Sep 2010 06:32:51 +0000 Subject: [PATCH] 2010-09-28 08:32 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/include/hbcom.ch * updated few comments * harbour/include/hbapicom.h * harbour/src/rtl/hbcom.c + added new C function: HB_FHANDLE hb_comGetDeviceHandle( int iPort ); * small cleanup in OS2 flow control setting * harbour/src/rtl/hbcomhb.c + added new PRG function HB_COMGETDEVICEHANDLE( nPort ) --> nHandle | F_ERROR * modified HB_COMFLOWCONTROL() to not change existing flow control when 3-rd parameter is missing: HB_COMFLOWCONTROL( nPort, @nOldFlow [, nNewFlow] ) --> lSuccess * harbour/contrib/hbmzip/hbmzip.c ! fixed date setting in HB_ZIPFILECREATE() --- harbour/ChangeLog | 20 ++++++++++++++++++++ harbour/contrib/hbmzip/hbmzip.c | 22 +++++++++++----------- harbour/include/hbapicom.h | 1 + harbour/include/hbcom.ch | 10 +++++----- harbour/src/rtl/hbcom.c | 21 ++++++++++++++++++++- harbour/src/rtl/hbcomhb.c | 10 ++++++++-- 6 files changed, 65 insertions(+), 19 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 30c9bca3e8..9f324f296c 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,26 @@ The license applies to all entries newer than 2009-04-28. */ +2010-09-28 08:32 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + * harbour/include/hbcom.ch + * updated few comments + + * harbour/include/hbapicom.h + * harbour/src/rtl/hbcom.c + + added new C function: + HB_FHANDLE hb_comGetDeviceHandle( int iPort ); + * small cleanup in OS2 flow control setting + + * harbour/src/rtl/hbcomhb.c + + added new PRG function + HB_COMGETDEVICEHANDLE( nPort ) --> nHandle | F_ERROR + * modified HB_COMFLOWCONTROL() to not change existing flow control + when 3-rd parameter is missing: + HB_COMFLOWCONTROL( nPort, @nOldFlow [, nNewFlow] ) --> lSuccess + + * harbour/contrib/hbmzip/hbmzip.c + ! fixed date setting in HB_ZIPFILECREATE() + 2010-09-28 03:53 UTC+0200 Viktor Szakats (harbour.01 syenar.hu) * utils/hbmk2/hbmk2.prg * config/global.mk diff --git a/harbour/contrib/hbmzip/hbmzip.c b/harbour/contrib/hbmzip/hbmzip.c index 73b3913c9c..f61a8e63be 100644 --- a/harbour/contrib/hbmzip/hbmzip.c +++ b/harbour/contrib/hbmzip/hbmzip.c @@ -205,7 +205,7 @@ HB_FUNC( HB_ZIPFILECREATE ) int iMethod = hb_parnidef( 7, Z_DEFLATED ); int iLevel = hb_parnidef( 8, Z_DEFAULT_COMPRESSION ); long lJulian, lMillisec; - int iY, iM, iD; + int iYear, iMonth, iDay, iHour, iMinute, iSecond; zip_fileinfo zfi; @@ -214,22 +214,22 @@ HB_FUNC( HB_ZIPFILECREATE ) if( HB_ISTIMESTAMP( 3 ) ) { hb_partdt( &lJulian, &lMillisec, 3 ); - hb_dateDecode( lJulian, &iY, &iM, &iD ); - hb_timeDecode( lMillisec, &iY, &iM, &iD, NULL ); + hb_dateDecode( lJulian, &iYear, &iMonth, &iDay ); + hb_timeDecode( lMillisec, &iHour, &iMinute, &iSecond, NULL ); } else { - hb_dateDecode( hb_pardl( 3 ), &iY, &iM, &iD ); - hb_timeStrGet( hb_parc( 4 ), &iY, &iM, &iD, NULL ); + hb_dateDecode( hb_pardl( 3 ), &iYear, &iMonth, &iDay ); + hb_timeStrGet( hb_parc( 4 ), &iHour, &iMinute, &iSecond, NULL ); } - zfi.tmz_date.tm_hour = iY; - zfi.tmz_date.tm_min = iM; - zfi.tmz_date.tm_sec = iD; + zfi.tmz_date.tm_hour = iHour; + zfi.tmz_date.tm_min = iMinute; + zfi.tmz_date.tm_sec = iSecond; - zfi.tmz_date.tm_year = iY; - zfi.tmz_date.tm_mon = iM - 1; - zfi.tmz_date.tm_mday = iD; + zfi.tmz_date.tm_year = iYear; + zfi.tmz_date.tm_mon = iMonth - 1; + zfi.tmz_date.tm_mday = iDay; zfi.internal_fa = hb_parnl( 5 ); zfi.external_fa = hb_parnl( 6 ); diff --git a/harbour/include/hbapicom.h b/harbour/include/hbapicom.h index 3df6206e32..9a83841970 100644 --- a/harbour/include/hbapicom.h +++ b/harbour/include/hbapicom.h @@ -92,6 +92,7 @@ extern HB_EXPORT int hb_comOutputState( int iPort ); extern HB_EXPORT int hb_comInputState( int iPort ); extern HB_EXPORT int hb_comSetDevice( int iPort, const char * szDevName ); extern HB_EXPORT const char * hb_comGetDevice( int iPort, char * buffer, int size ); +extern HB_EXPORT HB_FHANDLE hb_comGetDeviceHandle( int iPort ); HB_EXTERN_END diff --git a/harbour/include/hbcom.ch b/harbour/include/hbcom.ch index ccdd000140..b56e95517f 100644 --- a/harbour/include/hbcom.ch +++ b/harbour/include/hbcom.ch @@ -87,11 +87,11 @@ #define HB_COM_LSR_TRANS_EMPTY 0x40 /* TX shift register empty */ /* hb_comFlowControl() parameters */ -#define HB_COM_FLOW_IRTSCTS 0x01 -#define HB_COM_FLOW_ORTSCTS 0x02 -#define HB_COM_FLOW_IDTRDSR 0x04 -#define HB_COM_FLOW_ODTRDSR 0x08 -#define HB_COM_FLOW_DCD 0x10 +#define HB_COM_FLOW_IRTSCTS 0x01 /* use RTS to stop input */ +#define HB_COM_FLOW_ORTSCTS 0x02 /* check CTS on output */ +#define HB_COM_FLOW_IDTRDSR 0x04 /* use DTR to stop input */ +#define HB_COM_FLOW_ODTRDSR 0x08 /* check DSR on output */ +#define HB_COM_FLOW_DCD 0x10 /* respect DCD */ #define HB_COM_FLOW_XOFF 0x20 /* XON/XOFF on input */ #define HB_COM_FLOW_XON 0x40 /* XON/XOFF on output */ diff --git a/harbour/src/rtl/hbcom.c b/harbour/src/rtl/hbcom.c index 4973f2a67f..76242263fb 100644 --- a/harbour/src/rtl/hbcom.c +++ b/harbour/src/rtl/hbcom.c @@ -233,6 +233,25 @@ int hb_comSetDevice( int iPort, const char * szDevName ) return pCom ? 0 : -1; } +HB_FHANDLE hb_comGetDeviceHandle( int iPort ) +{ + PHB_COM pCom = hb_comGetPort( iPort, HB_COM_ANY ); + HB_FHANDLE hFile = FS_ERROR; + + if( pCom ) + { +#if defined( HB_HAS_TERMIOS ) + hFile = pCom->fd; +#elif defined( HB_OS_WIN ) + hFile = ( HB_FHANDLE ) pCom->hCom; +#elif defined( HB_OS_OS2 ) + hFile = ( HB_FHANDLE ) pCom->hFile; +#endif + } + + return hFile; +} + void hb_comSetError( int iPort, int iError ) { PHB_COM pCom = hb_comGetPort( iPort, HB_COM_ANY ); @@ -2259,7 +2278,7 @@ int hb_comFlowControl( int iPort, int *piFlow, int iFlow ) else dcb.fbFlowReplace &= ~MODE_AUTO_RECEIVE; - dcb.fbCtlHndShake &= ~( MODE_DSR_SENSITIVITY | MODE_DCD_HANDSHAKE ); + dcb.fbCtlHndShake &= ~MODE_DSR_SENSITIVITY; dcb.fbFlowReplace |= MODE_FULL_DUPLEX; rc = DosDevIOCtl( pCom->hFile, IOCTL_ASYNC, ASYNC_SETDCBINFO, diff --git a/harbour/src/rtl/hbcomhb.c b/harbour/src/rtl/hbcomhb.c index 0ccbfc1ee8..d4c36914b4 100644 --- a/harbour/src/rtl/hbcomhb.c +++ b/harbour/src/rtl/hbcomhb.c @@ -55,10 +55,11 @@ * HB_COMDISCARDCHAR( nPort, nChar | cChar ) --> lSuccess * HB_COMERRORCHAR( nPort, nChar | cChar ) --> lSuccess * HB_COMFLOWCHARS( nPort, nXONchar | cXONchar, nXOFFchar | cXOFFchar ) --> lSuccess - * HB_COMFLOWCONTROL( nPort, @nOldFlow, nFlow ) --> lSuccess + * HB_COMFLOWCONTROL( nPort, @nOldFlow [, nNewFlow] ) --> lSuccess * HB_COMFLOWSET( nPort, nFlow ) --> lSuccess * HB_COMFLUSH( nPort, [ nType = HB_COM_IOFLUSH ] ) --> lSuccess * HB_COMGETDEVICE( nPort ) --> cDeviceName + * HB_COMGETDEVICEHANDLE( nPort ) --> nHandle | F_ERROR * HB_COMGETERROR( nPort ) --> nError * HB_COMGETOSERROR( nPort ) --> nError * HB_COMINIT( nPort, nBaud, cParity, nSize, nStop ) --> lSuccess @@ -108,7 +109,7 @@ HB_FUNC( HB_COMFLOWCHARS ) HB_FUNC( HB_COMFLOWCONTROL ) { int iValue = 0; - hb_retl( hb_comFlowControl( hb_parni( 1 ), &iValue, hb_parni( 3 ) ) == 0 ); + hb_retl( hb_comFlowControl( hb_parni( 1 ), &iValue, hb_parnidef( 3, -1 ) ) == 0 ); hb_storni( iValue, 2 ); } @@ -129,6 +130,11 @@ HB_FUNC( HB_COMGETDEVICE ) hb_retc( name ); } +HB_FUNC( HB_COMGETDEVICEHANDLE ) +{ + hb_retnint( ( HB_NHANDLE ) hb_comGetDeviceHandle( hb_parni( 1 ) ) ); +} + HB_FUNC( HB_COMGETERROR ) { hb_retni( hb_comGetError( hb_parni( 1 ) ) );