On Sun, 06 Dec 2009, Szak�ts Viktor wrote: Hi,
> If I got it correctly, it should be something like: > > #if ! defined( CRTSCTS ) > #if defined( HB_OS_LINUX ) || defined( HB_OS_SUNOS ) > #define CRTSCTS 0x80000000 > #elif defined( HB_OS_BSD ) > #define CRTSCTS 0x00010000 > #elif defined( HB_OS_BEOS ) > #define CRTSCTS 0x6000 > #endif > #endif > ... > #if defined( CRTSCTS ) > ... > #else > int iTODO; > #endif > ? No. It's also wrong. Above constants may change in the future. I want to add this ugly hack only for compilers used on given system if it's strictly necessary and someone verified correct value for CRTSCTS. So far we have only one such compiler. It's OpenWatcom on Linux so I want to make: HB_FUNC( __TP_CTRLCTS ) { #if !defined( CRTSCTS ) # if defined( HB_OS_LINUX ) && defined( __WATCOMC__ ) # define CRTSCTS 020000000000 # endif #endif #if !defined( CRTSCTS ) int iTODO; hb_retni( 0 ); #else struct termios options; int port = hb_parnl( 1 ); int newvalue = hb_pcount() == 2 ? hb_parnl( 2 ) : -1; int curvalue; int rc; tcgetattr( port, &options ); curvalue = ( options.c_cflag & CRTSCTS ) == CRTSCTS; if( newvalue == 0 ) options.c_cflag &= ~CRTSCTS; else if( newvalue == 1 ) options.c_cflag |= CRTSCTS; if( newvalue >= 0 ) rc = tcsetattr( port, TCSAFLUSH, &options ); hb_retni( curvalue ? 1 : 0 ); #endif } if someone will find other compiler which also needs this hack or compiler where CRTSCTS is enum type not macro then I expect that seeing iTODO warning message he will update the code to work well with given system and C compiler and only for this system and C compiler. I.e. if CRTSCTS is enum type in OS XXX and compiler YYY then he can change the code to: #if !defined( CRTSCTS ) # if defined( HB_OS_LINUX ) && defined( __WATCOMC__ ) # define CRTSCTS 020000000000 # elif defined( HB_OS_XXX ) && defined( __YYY__ ) # define CRTSCTS CRTSCTS # endif #endif or if he verify that low level CRTL code support CRTSCTS flow control and exact value NNN is necessary to activate then he will make: #if !defined( CRTSCTS ) # if defined( HB_OS_LINUX ) && defined( __WATCOMC__ ) # define CRTSCTS 020000000000 # elif defined( HB_OS_XXX ) && defined( __YYY__ ) # define CRTSCTS NNN # endif #endif Otherwise he should leave iTODO warning which quite nicely informs all developers at compile time that such functionality does not exists in given build. Maybe it will be possible to add it in the future if someone will know that it's a problem. Now you simply pacified potential compile time error or warning on all existing platforms so we do not hear about the problem until some user will be clever enough to make deeper test and check that some type of flow control does not work as expected (probably it's to complicated for most of Harbour users) so it's possible that real problem hidden by above modification will never be fixed. BTW It will be also nice that he will leave some note about system or C compiler version he used so in the future we can remove support for older versions or add additional protection, i.e.: # if defined( HB_OS_LINUX ) && defined( __WATCOMC__ ) && \ __WATCOMC__ < 1290 best regards, Przemek _______________________________________________ Harbour mailing list (attachment size limit: 40KB) Harbour@harbour-project.org http://lists.harbour-project.org/mailman/listinfo/harbour