From 347ee44d1f5128cb181995dfee0b4ac451a86a57 Mon Sep 17 00:00:00 2001 From: Przemyslaw Czerpak Date: Thu, 19 Jul 2007 09:10:37 +0000 Subject: [PATCH] 2007-07-19 11:10 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + harbour/contrib/libct/ctdisk.ch + added missing file I forgot to add in previous commit * harbour/contrib/libct/pos1.c * harbour/contrib/libct/ct.h * harbour/contrib/libct/posdiff.c * harbour/contrib/libct/range.c * harbour/contrib/libct/pos2.c * harbour/contrib/libct/print.c * synced with xHarbour modifications and fixes ! some fixes * indenting --- harbour/ChangeLog | 14 + harbour/contrib/libct/ct.h | 1 + harbour/contrib/libct/ctdisk.ch | 76 ++++ harbour/contrib/libct/pos1.c | 281 ++++++------ harbour/contrib/libct/pos2.c | 750 ++++++++++++++------------------ harbour/contrib/libct/posdiff.c | 327 ++++++-------- harbour/contrib/libct/print.c | 55 ++- harbour/contrib/libct/range.c | 345 ++++++--------- 8 files changed, 863 insertions(+), 986 deletions(-) create mode 100644 harbour/contrib/libct/ctdisk.ch diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 136dbe8984..febcdf7a6c 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,20 @@ 2002-12-01 13:30 UTC+0100 Foo Bar */ +2007-07-19 11:10 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + + harbour/contrib/libct/ctdisk.ch + + added missing file I forgot to add in previous commit + + * harbour/contrib/libct/pos1.c + * harbour/contrib/libct/ct.h + * harbour/contrib/libct/posdiff.c + * harbour/contrib/libct/range.c + * harbour/contrib/libct/pos2.c + * harbour/contrib/libct/print.c + * synced with xHarbour modifications and fixes + ! some fixes + * indenting + 2007-07-19 04:15 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/include/hb_io.h + added #include for DOS builds diff --git a/harbour/contrib/libct/ct.h b/harbour/contrib/libct/ct.h index c37ff5da57..d039480a17 100644 --- a/harbour/contrib/libct/ct.h +++ b/harbour/contrib/libct/ct.h @@ -61,6 +61,7 @@ #include "hbapi.h" #include "hbapiitm.h" +#include "hbapicdp.h" #include "hbapierr.h" #include "error.ch" #include "hbmath.h" diff --git a/harbour/contrib/libct/ctdisk.ch b/harbour/contrib/libct/ctdisk.ch new file mode 100644 index 0000000000..97a5c26015 --- /dev/null +++ b/harbour/contrib/libct/ctdisk.ch @@ -0,0 +1,76 @@ +/* + * $Id$ + */ + +/* + * Harbour Project source code: + * Header file for CT for floppy / hard disk functions + * + * Copyright 2007 Przemyslaw Czerpak + * www - http://www.harbour-project.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, + * Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/). + * + * As a special exception, the Harbour Project gives permission for + * additional uses of the text contained in its release of Harbour. + * + * The exception is that, if you link the Harbour libraries with other + * files to produce an executable, this does not by itself cause the + * resulting executable to be covered by the GNU General Public License. + * Your use of that executable is in no way restricted on account of + * linking the Harbour library code into it. + * + * This exception does not however invalidate any other reasons why + * the executable file might be covered by the GNU General Public License. + * + * This exception applies only to the code released by the Harbour + * Project under the name Harbour. If you copy code from other + * Harbour Project or Free Software Foundation releases into a copy of + * Harbour, as the General Public License permits, the exception does + * not apply to the code that you add in this way. To avoid misleading + * anyone as to the status of such modified files, you must delete + * this exception notice from them. + * + * If you write modifications of your own for Harbour, it is your choice + * whether to permit this exception to apply to your modifications. + * If you do not wish that, delete this exception notice. + * + */ + +/* NOTE: This file is also used by C code. */ + +#ifndef _CTDISK_CH +#define _CTDISK_CH + +#define FA_NORMAL 0 /* */ +#define FA_READONLY 1 /* R */ +#define FA_HIDDEN 2 /* H */ +#define FA_SYSTEM 4 /* S */ +#define FA_VOLUME 8 /* V */ +#define FA_DIRECTORY 16 /* D */ +#define FA_ARCHIVE 32 /* A */ + +#define FA_DEVICE 64 /* I */ +#define FA_TEMPORARY 256 /* T */ +#define FA_SPARSE 512 /* P */ +#define FA_REPARSE 1024 /* L */ +#define FA_COMPRESSED 2048 /* C */ +#define FA_OFFLINE 4096 /* O */ +#define FA_NOTINDEXED 8192 /* X */ +#define FA_ENCRYPTED 16384 /* E */ +#define FA_VOLCOMP 32768 /* M */ + +#endif /* _CTDISK_CH */ diff --git a/harbour/contrib/libct/pos1.c b/harbour/contrib/libct/pos1.c index 4952156d16..7caa8c71f2 100644 --- a/harbour/contrib/libct/pos1.c +++ b/harbour/contrib/libct/pos1.c @@ -57,8 +57,18 @@ #include "ct.h" -#include +#include +#ifndef HB_CDP_SUPPORT_OFF +# include "hbapicdp.h" +# define ISUPPER(c) ( isupper( ( UCHAR ) c ) || ( hb_cdp_page->nChars && strchr( hb_cdp_page->CharsUpper, ( UCHAR ) c ) != NULL ) ) +# define ISLOWER(c) ( islower( ( UCHAR ) c ) || ( hb_cdp_page->nChars && strchr( hb_cdp_page->CharsLower, ( UCHAR ) c ) != NULL ) ) +# define ISALPHA(c) ( isalpha( ( UCHAR ) c ) || ( hb_cdp_page->nChars && ( strchr( hb_cdp_page->CharsUpper, ( UCHAR ) c ) != NULL || strchr( hb_cdp_page->CharsLower, c ) != NULL ) ) ) +#else +# define ISUPPER(c) isupper( ( UCHAR ) c ) +# define ISLOWER(c) islower( ( UCHAR ) c ) +# define ISALPHA(c) isalpha( ( UCHAR ) c ) +#endif /* defines */ #define DO_POS1_POSALPHA 0 @@ -67,157 +77,126 @@ #define DO_POS1_POSUPPER 3 /* helper function for the posxxx() functions */ -static void do_pos1 (int iSwitch) +static void do_pos1( int iSwitch ) { + if( ISCHAR( 1 ) && /* all functions need string as 1st param */ + ( iSwitch != DO_POS1_POSRANGE || /* that's the only condition for all funcs _except_ POSRANGE */ + ( iSwitch == DO_POS1_POSRANGE && /* In addition, POSRANGE needs .. */ + ISCHAR( 2 ) && /* .. string as 2nd .. */ + ISCHAR( 3 ) ) ) ) /* .. and 3rd param */ + { + unsigned char *pcString; + size_t sStrLen; + unsigned char *puc, ucChar1 = ' ', ucChar2 = ' '; + int iMode; + size_t sIgnore; + int iParamShift = 0; - if ((ISCHAR (1)) /* all functions need string as 1st param */ - && - ((iSwitch != DO_POS1_POSRANGE) /* that's the only condition for all funcs _except_ POSRANGE */ - || - ((iSwitch == DO_POS1_POSRANGE) /* In addition, POSRANGE needs .. */ - && - (ISCHAR (2)) /* .. string as 2nd .. */ - && - (ISCHAR (3)) /* .. and 3rd param */ - ) - ) - ) - { - - unsigned char *pcString; - size_t sStrLen; - unsigned char *puc, ucChar1 = ' ', ucChar2 = ' '; - int iMode; - size_t sIgnore; - int iParamShift = 0; - - if (iSwitch == DO_POS1_POSRANGE) - { - - if (hb_parclen (1) == 0) + if( iSwitch == DO_POS1_POSRANGE ) { - hb_retnl (0); - return; + + if( hb_parclen( 1 ) == 0 ) + { + hb_retni( 0 ); + return; + } + else + { + ucChar1 = *( hb_parc( 1 ) ); + } + + if( hb_parclen( 2 ) == 0 ) + { + hb_retni( 0 ); + return; + } + else + { + ucChar2 = *( hb_parc( 2 ) ); + } + + iParamShift += 2; } + + pcString = ( unsigned char * ) hb_parc( iParamShift + 1 ); + sStrLen = ( size_t ) hb_parclen( iParamShift + 1 ); + + if( ISLOG( iParamShift + 2 ) ) + iMode = hb_parl( iParamShift + 2 ); else - { - ucChar1 = *(hb_parc (1)); - } + iMode = 0; - if (hb_parclen (2) == 0) - { - hb_retnl (0); - return; - } + if( ISNUM( iParamShift + 3 ) ) + sIgnore = ( size_t ) hb_parnl( iParamShift + 3 ); else + sIgnore = 0; + + for( puc = pcString + sIgnore; puc < pcString + sStrLen; puc++ ) { - ucChar2 = *(hb_parc (2)); + int iDoRet = 0; + + switch ( iSwitch ) + { + case DO_POS1_POSALPHA: + iDoRet = ISALPHA( *puc ); + break; + + case DO_POS1_POSLOWER: + iDoRet = ISLOWER( *puc ); + break; + + case DO_POS1_POSRANGE: + iDoRet = ( ( ucChar1 <= *puc ) && ( ucChar2 >= *puc ) ); + break; + + case DO_POS1_POSUPPER: + iDoRet = ISUPPER( *puc ); + break; + } + + if( ( iMode && !iDoRet ) || ( !iMode && iDoRet ) ) + { + hb_retnl( puc - pcString + 1 ); + return; + } } - - iParamShift += 2; - } + hb_retni( 0 ); + } + else /* ISCHAR (1) etc. */ + { + PHB_ITEM pSubst = NULL; + int iArgErrorMode = ct_getargerrormode(), iError = 0; - pcString = (unsigned char *)hb_parc (iParamShift+1); - sStrLen = (size_t)hb_parclen (iParamShift+1); - - if (ISLOG (iParamShift+2)) - iMode = hb_parl (iParamShift+2); - else - iMode = 0; - - if (ISNUM (iParamShift+3)) - sIgnore = (size_t)hb_parnl (iParamShift+3); - else - sIgnore = 0; - - for (puc = pcString+sIgnore; puc < pcString+sStrLen; puc++) - { - int iDoRet = 0; - switch (iSwitch) + if( iArgErrorMode != CT_ARGERR_IGNORE ) { - case DO_POS1_POSALPHA: - { - iDoRet = isalpha(*puc); - }; break; + switch ( iSwitch ) + { + case DO_POS1_POSALPHA: + iError = CT_ERROR_POSALPHA; + break; - case DO_POS1_POSLOWER: - { - iDoRet = islower(*puc); - }; break; + case DO_POS1_POSLOWER: + iError = CT_ERROR_POSLOWER; + break; - case DO_POS1_POSRANGE: - { - iDoRet = ((ucChar1 <= *puc) && (ucChar2 >= *puc)); - }; break; - - case DO_POS1_POSUPPER: - { - iDoRet = isupper(*puc); - }; break; + case DO_POS1_POSRANGE: + iError = CT_ERROR_POSRANGE; + break; + + case DO_POS1_POSUPPER: + iError = CT_ERROR_POSUPPER; + break; + } + pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG, iError, + NULL, &hb_errFuncName, 0, + EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS ); } - - if ((iMode && !iDoRet) || (!iMode && iDoRet)) - { - hb_retnl (puc-pcString+1); - return; - } - } - - hb_retnl (0); - - } - else /* ISCHAR (1) etc. */ - { - PHB_ITEM pSubst = NULL; - int iArgErrorMode = ct_getargerrormode(); - if (iArgErrorMode != CT_ARGERR_IGNORE) - { - switch (iSwitch) - { - case DO_POS1_POSALPHA: - { - pSubst = ct_error_subst ((USHORT)iArgErrorMode, EG_ARG, CT_ERROR_POSALPHA, - NULL, "POSALPHA", 0, EF_CANSUBSTITUTE, 3, - hb_paramError (1), hb_paramError (2), hb_paramError (3)); - }; break; - - case DO_POS1_POSLOWER: - { - pSubst = ct_error_subst ((USHORT)iArgErrorMode, EG_ARG, CT_ERROR_POSLOWER, - NULL, "POSLOWER", 0, EF_CANSUBSTITUTE, 3, - hb_paramError (1), hb_paramError (2), hb_paramError (3)); - }; break; - - case DO_POS1_POSRANGE: - { - pSubst = ct_error_subst ((USHORT)iArgErrorMode, EG_ARG, CT_ERROR_POSRANGE, - NULL, "POSRANGE", 0, EF_CANSUBSTITUTE, 5, - hb_paramError (1), hb_paramError (2), hb_paramError (3), - hb_paramError (4), hb_paramError (5)); - }; break; - - case DO_POS1_POSUPPER: - { - pSubst = ct_error_subst ((USHORT)iArgErrorMode, EG_ARG, CT_ERROR_POSUPPER, - NULL, "POSUPPER", 0, EF_CANSUBSTITUTE, 3, - hb_paramError (1), hb_paramError (2), hb_paramError (3)); - }; break; - } - } - - if (pSubst != NULL) - { - hb_itemReturn (pSubst); - hb_itemRelease (pSubst); - } - else - { - hb_retnl (0); - } - } - - return; + if( pSubst != NULL ) + hb_itemReturnRelease( pSubst ); + else + hb_retni( 0 ); + } } @@ -249,12 +228,9 @@ static void do_pos1 (int iSwitch) * $END$ */ -HB_FUNC (POSALPHA) +HB_FUNC( POSALPHA ) { - - do_pos1 (DO_POS1_POSALPHA); - return; - + do_pos1( DO_POS1_POSALPHA ); } @@ -286,12 +262,9 @@ HB_FUNC (POSALPHA) * $END$ */ -HB_FUNC (POSLOWER) +HB_FUNC( POSLOWER ) { - - do_pos1 (DO_POS1_POSLOWER); - return; - + do_pos1( DO_POS1_POSLOWER ); } @@ -324,12 +297,9 @@ HB_FUNC (POSLOWER) * $END$ */ -HB_FUNC (POSRANGE) +HB_FUNC( POSRANGE ) { - - do_pos1 (DO_POS1_POSRANGE); - return; - + do_pos1( DO_POS1_POSRANGE ); } @@ -361,10 +331,7 @@ HB_FUNC (POSRANGE) * $END$ */ -HB_FUNC (POSUPPER) +HB_FUNC( POSUPPER ) { - - do_pos1 (DO_POS1_POSUPPER); - return; - + do_pos1( DO_POS1_POSUPPER ); } diff --git a/harbour/contrib/libct/pos2.c b/harbour/contrib/libct/pos2.c index a756ebb550..7c133d189b 100644 --- a/harbour/contrib/libct/pos2.c +++ b/harbour/contrib/libct/pos2.c @@ -84,120 +84,90 @@ * $END$ */ -HB_FUNC (POSCHAR) +HB_FUNC( POSCHAR ) { + int iNoRet; - int iNoRet; + iNoRet = ct_getref() && ISBYREF( 1 ); - iNoRet = ct_getref(); - - if (hb_parclen (1) > 0) - { - if ((hb_parclen (2) > 0) || ISNUM (2)) - { - char *pcString = hb_parc (1); - size_t sStrLen = hb_parclen (1); - char *pcRet; - char cReplace; - size_t sPosition; - - if (ISCHAR (2)) + if( hb_parclen( 1 ) > 0 ) + { + if( ( hb_parclen( 2 ) > 0 ) || ISNUM( 2 ) ) { - cReplace = *(hb_parc (2)); - } - else - { - cReplace = hb_parnl (2)%256; - } + char *pcString = hb_parc( 1 ); + size_t sStrLen = hb_parclen( 1 ); + char *pcRet; + char cReplace; + size_t sPosition; - if (ISNUM (3)) - { - sPosition = hb_parnl (3); - if (sPosition == 0) - { - sPosition = sStrLen; - } - } - else - { - sPosition = sStrLen; - } + if( ISCHAR( 2 ) ) + cReplace = *( hb_parc( 2 ) ); + else + cReplace = ( char ) ( hb_parnl( 2 ) % 256 ); - pcRet = ( char * )hb_xgrab (sStrLen); - hb_xmemcpy (pcRet, pcString, sStrLen); - *(pcRet+sPosition-1) = cReplace; + if( ISNUM( 3 ) ) + { + sPosition = hb_parnl( 3 ); + if( sPosition == 0 ) + sPosition = sStrLen; + } + else + sPosition = sStrLen; - if (ISBYREF (1)) - { - hb_storclen (pcRet, sStrLen, 1); - } - - if (iNoRet) - { - hb_ret(); - } - else - { - hb_retclen (pcRet, sStrLen); - } + pcRet = ( char * ) hb_xgrab( sStrLen + 1 ); + hb_xmemcpy( pcRet, pcString, sStrLen ); + *( pcRet + sPosition - 1 ) = cReplace; - hb_xfree (pcRet); + if( ISBYREF( 1 ) ) + hb_storclen( pcRet, sStrLen, 1 ); - } - else /* (hb_parclen (2) > 0) || ISNUM (2) */ - { + if( iNoRet ) + { + hb_ret(); + hb_xfree( pcRet ); + } + else + hb_retclen_buffer( pcRet, sStrLen ); + } + else /* ( hb_parclen( 2 ) > 0 ) || ISNUM( 2 ) */ + { + PHB_ITEM pSubst = NULL; + int iArgErrorMode = ct_getargerrormode(); + + if( iArgErrorMode != CT_ARGERR_IGNORE ) + { + pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG, + CT_ERROR_POSCHAR, NULL, "POSCHAR", 0, + EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS ); + } + + if( pSubst != NULL ) + hb_itemReturnRelease( pSubst ); + else if( iNoRet ) + hb_ret(); + else + hb_retclen( hb_parc( 1 ), hb_parclen( 1 ) ); + } + } + else /* hb_parclen( 1 ) > 0 */ + { PHB_ITEM pSubst = NULL; int iArgErrorMode = ct_getargerrormode(); - if (iArgErrorMode != CT_ARGERR_IGNORE) - { - pSubst = ct_error_subst ((USHORT)iArgErrorMode, EG_ARG, CT_ERROR_POSCHAR, - NULL, "POSCHAR", 0, EF_CANSUBSTITUTE, 3, - hb_paramError (1), hb_paramError (2), hb_paramError (3)); - } - - if (pSubst != NULL) - { - hb_itemReturn (pSubst); - hb_itemRelease (pSubst); - } - else - { - if (iNoRet) - { - hb_ret(); - } - else - { - hb_retclen (hb_parc (1), hb_parclen (1)); - } - } - } - } - else /* hb_parclen (1) > 0 */ - { - PHB_ITEM pSubst = NULL; - int iArgErrorMode = ct_getargerrormode(); - if (iArgErrorMode != CT_ARGERR_IGNORE) - { - pSubst = ct_error_subst ((USHORT)iArgErrorMode, EG_ARG, CT_ERROR_POSCHAR, - NULL, "POSCHAR", 0, EF_CANSUBSTITUTE, 3, - hb_paramError (1), hb_paramError (2), hb_paramError (3)); - } - - if (pSubst != NULL) - { - hb_itemReturn (pSubst); - hb_itemRelease (pSubst); - } - else - { - if (iNoRet) - hb_ret(); - else - hb_retc (""); - } - } + if( iArgErrorMode != CT_ARGERR_IGNORE ) + { + pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG, + CT_ERROR_POSCHAR, NULL, "POSCHAR", 0, + EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS ); + } + + if( pSubst != NULL ) + hb_itemReturnRelease( pSubst ); + else if( iNoRet ) + hb_ret(); + else + hb_retc( NULL ); + } } @@ -229,80 +199,69 @@ HB_FUNC (POSCHAR) * $END$ */ -HB_FUNC (POSDEL) +HB_FUNC( POSDEL ) { - - if (ISCHAR (1)) - { + if( ISCHAR( 1 ) ) + { + char *pcString = hb_parc( 1 ); + size_t sStrLen = hb_parclen( 1 ); + size_t sStartPos, sDelLen; + char *pcRet; - char *pcString = hb_parc (1); - size_t sStrLen = hb_parclen (1); - size_t sStartPos, sDelLen; - char *pcRet; + if( ISNUM( 3 ) ) + sDelLen = hb_parnl( 3 ); + else + sDelLen = 1; /* set new standard behavior */ - if (ISNUM (3)) - { - sDelLen = hb_parnl (3); - } - else - { - sDelLen = 1; /* set new standard behavior */ - } - - if (ISNUM (2)) - { - sStartPos = hb_parnl (2); - if (sStartPos == 0) + if( ISNUM( 2 ) ) { - sStartPos = sStrLen-sDelLen+1; + sStartPos = hb_parnl( 2 ); + if( sStartPos == 0 || sStartPos > sStrLen - sDelLen + 1 ) + sStartPos = sStrLen - sDelLen + 1; } - } - else - { - sStartPos = sStrLen-sDelLen+1; - } - - pcRet = ( char * )hb_xgrab (sStrLen-sDelLen); + else + sStartPos = sStrLen - sDelLen + 1; - /* copy first part */ - if (sStartPos > 1) - { - hb_xmemcpy (pcRet, pcString, sStartPos-1); - } - - /* copy second part */ - if (sStrLen > (sStartPos-1+sDelLen)) - { - hb_xmemcpy (pcRet+sStartPos-1, pcString+sStartPos-1+sDelLen, - sStrLen-(sStartPos-1+sDelLen)); - } + if( sStrLen <= sDelLen ) + { + hb_retclen( "", 0 ); + return; + } - hb_retclen (pcRet, sStrLen-sDelLen); - hb_xfree (pcRet); + pcRet = ( char * ) hb_xgrab( sStrLen - sDelLen + 1 ); - } - else /* ISCHAR (1) */ - { - PHB_ITEM pSubst = NULL; - int iArgErrorMode = ct_getargerrormode(); - if (iArgErrorMode != CT_ARGERR_IGNORE) - { - pSubst = ct_error_subst ((USHORT)iArgErrorMode, EG_ARG, CT_ERROR_POSDEL, - NULL, "POSDEL", 0, EF_CANSUBSTITUTE, 3, - hb_paramError (1), hb_paramError (2), hb_paramError (3)); - } - - if (pSubst != NULL) - { - hb_itemReturn (pSubst); - hb_itemRelease (pSubst); - } - else - { - hb_retc (""); - } - } + /* copy first part */ + if( sStartPos > 1 ) + { + hb_xmemcpy( pcRet, pcString, sStartPos - 1 ); + } + /* copy second part */ + if( sStrLen > ( sStartPos - 1 + sDelLen ) ) + { + hb_xmemcpy( pcRet + sStartPos - 1, pcString + sStartPos - 1 + sDelLen, + sStrLen - ( sStartPos - 1 + sDelLen ) ); + } + + hb_retclen_buffer( pcRet, sStrLen - sDelLen ); + } + else /* ISCHAR( 1 ) */ + { + PHB_ITEM pSubst = NULL; + int iArgErrorMode = ct_getargerrormode(); + + if( iArgErrorMode != CT_ARGERR_IGNORE ) + { + pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG, + CT_ERROR_POSDEL, NULL, "POSDEL", 0, + EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS ); + } + + if( pSubst != NULL ) + hb_itemReturnRelease( pSubst ); + else + hb_retc( NULL ); + } } @@ -334,107 +293,87 @@ HB_FUNC (POSDEL) * $END$ */ -HB_FUNC (POSINS) +HB_FUNC( POSINS ) { - - if (ISCHAR (1)) - { + if( ISCHAR( 1 ) ) + { + char *pcString = hb_parc( 1 ); + size_t sStrLen = hb_parclen( 1 ); + char *pcInsert; + size_t sInsLen; - char *pcString = hb_parc (1); - size_t sStrLen = hb_parclen (1); - char *pcInsert; - size_t sInsLen; - - if ((sInsLen = hb_parclen (2)) > 0) - { - - size_t sStartPos; - char *pcRet; - - pcInsert = hb_parc (2); - - if (ISNUM (3)) + if( ( sInsLen = hb_parclen( 2 ) ) > 0 ) { - sStartPos = hb_parnl (3); - if (sStartPos == 0) - { - sStartPos = sStrLen; - } + size_t sStartPos; + char *pcRet; + + pcInsert = hb_parc( 2 ); + + if( ISNUM( 3 ) ) + { + sStartPos = hb_parnl( 3 ); + if( sStartPos == 0 ) + sStartPos = sStrLen; + } + else + sStartPos = sStrLen; + + /* check for false sStartPos */ + if( sStartPos > sStrLen + 1 ) + { + int iArgErrorMode = ct_getargerrormode(); + + if( iArgErrorMode != CT_ARGERR_IGNORE ) + { + ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_POSINS, + NULL, "POSINS", 0, EF_CANDEFAULT, + HB_ERR_ARGS_BASEPARAMS ); + } + hb_retclen( pcString, sStrLen ); + return; + } + + pcRet = ( char * ) hb_xgrab( sStrLen + sInsLen + 1 ); + + /* copy first part */ + if( sStartPos > 1 ) + hb_xmemcpy( pcRet, pcString, sStartPos - 1 ); + + /* insert string */ + hb_xmemcpy( pcRet + sStartPos - 1, pcInsert, sInsLen ); + + /* copy second part */ + if( sStrLen > ( sStartPos - 1 ) ) + { + hb_xmemcpy( pcRet + sStartPos - 1 + sInsLen, pcString + sStartPos - 1, + sStrLen - ( sStartPos - 1 ) ); + } + + hb_retclen_buffer( pcRet, sStrLen + sInsLen ); } + else /* hb_parclen( 2 ) > 0 */ + hb_retclen( pcString, sStrLen ); + } + else /* ISCHAR( 1 ) */ + { + PHB_ITEM pSubst = NULL; + int iArgErrorMode = ct_getargerrormode(); + + if( iArgErrorMode != CT_ARGERR_IGNORE ) + { + pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG, + CT_ERROR_POSINS, NULL, "POSINS", 0, + EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS ); + } + + if( pSubst != NULL ) + hb_itemReturnRelease( pSubst ); else - { - sStartPos = sStrLen; - } - - /* check for false sStartPos */ - if (sStartPos > sStrLen+1) - { - int iArgErrorMode = ct_getargerrormode(); - if (iArgErrorMode != CT_ARGERR_IGNORE) - { - ct_error ((USHORT)iArgErrorMode, EG_ARG, CT_ERROR_POSINS, - NULL, "POSINS", 0, EF_CANDEFAULT, 3, - hb_paramError (1), hb_paramError (2), - hb_paramError (3)); - } - - hb_retclen (pcString, sStrLen); - return; - } - - pcRet = ( char * )hb_xgrab (sStrLen+sInsLen); - - /* copy first part */ - if (sStartPos > 1) - { - hb_xmemcpy (pcRet, pcString, sStartPos-1); - } - - /* insert string */ - hb_xmemcpy (pcRet+sStartPos-1, pcInsert, sInsLen); - - /* copy second part */ - if (sStrLen > (sStartPos-1)) - { - hb_xmemcpy (pcRet+sStartPos-1+sInsLen, pcString+sStartPos-1, - sStrLen-(sStartPos-1)); - } - - hb_retclen (pcRet, sStrLen+sInsLen); - hb_xfree (pcRet); - - } - else /* hb_parclen (2) > 0 */ - { - hb_retclen (pcString, sStrLen); - } - - } - else /* ISCHAR (1) */ - { - PHB_ITEM pSubst = NULL; - int iArgErrorMode = ct_getargerrormode(); - if (iArgErrorMode != CT_ARGERR_IGNORE) - { - pSubst = ct_error_subst ((USHORT)iArgErrorMode, EG_ARG, CT_ERROR_POSINS, - NULL, "POSINS", 0, EF_CANSUBSTITUTE, 3, - hb_paramError (1), hb_paramError (2), hb_paramError (3)); - } - - if (pSubst != NULL) - { - hb_itemReturn (pSubst); - hb_itemRelease (pSubst); - } - else - { - hb_retc (""); - } - } - + hb_retc( NULL ); + } } - + /* $DOC$ * $FUNCNAME$ * POSREPL() @@ -463,187 +402,136 @@ HB_FUNC (POSINS) * $END$ */ -HB_FUNC (POSREPL) +HB_FUNC( POSREPL ) { + int iNoRet; - int iNoRet; + iNoRet = ct_getref() && ISBYREF( 1 ); - iNoRet = ct_getref(); + if( ISCHAR( 1 ) ) + { + char *pcString = hb_parc( 1 ); + size_t sStrLen = hb_parclen( 1 ); + char *pcReplace; + size_t sReplLen; - if (ISCHAR (1)) - { - - char *pcString = hb_parc (1); - size_t sStrLen = hb_parclen (1); - char *pcReplace; - size_t sReplLen; - - if ((sReplLen = hb_parclen (2)) > 0) - { - - size_t sStartPos; - char *pcRet; - size_t sRetLen; - - pcReplace = hb_parc (2); - - if (ISNUM (3)) + if( ( sReplLen = hb_parclen( 2 ) ) > 0 ) { - sStartPos = hb_parnl (3); - if (sStartPos == 0) - { - if (sReplLen > sStrLen) - { - sStartPos = 1; - } - else - { - sStartPos = sStrLen-sReplLen+1; - } - } + + size_t sStartPos; + char *pcRet; + size_t sRetLen; + + pcReplace = hb_parc( 2 ); + + if( ISNUM( 3 ) ) + { + sStartPos = hb_parnl( 3 ); + if( sStartPos == 0 ) + { + if( sReplLen > sStrLen ) + sStartPos = 1; + else + sStartPos = sStrLen - sReplLen + 1; + } + } + else + { + if( sReplLen > sStrLen ) + sStartPos = 1; + else + sStartPos = sStrLen - sReplLen + 1; + } + + /* check for false sStartPos */ + if( sStartPos > sStrLen + 1 ) + { + int iArgErrorMode = ct_getargerrormode(); + + if( iArgErrorMode != CT_ARGERR_IGNORE ) + { + ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_POSREPL, + NULL, "POSREPL", 0, EF_CANDEFAULT, + HB_ERR_ARGS_BASEPARAMS ); + } + + if( iNoRet ) + hb_ret(); + else + hb_retclen( pcString, sStrLen ); + return; + } + + if( sStrLen > ( sStartPos + sReplLen - 1 ) ) + sRetLen = sStrLen; + else + sRetLen = sStartPos + sReplLen - 1; + + pcRet = ( char * ) hb_xgrab( sRetLen + 1 ); + + /* copy first part */ + if( sStartPos > 1 ) + hb_xmemcpy( pcRet, pcString, sStartPos - 1 ); + + /* insert replacement string */ + hb_xmemcpy( pcRet + sStartPos - 1, pcReplace, sReplLen ); + + /* copy second part */ + if( sStrLen > ( sStartPos - 1 + sReplLen ) ) + hb_xmemcpy( pcRet + sStartPos - 1 + sReplLen, pcString + sStartPos - 1 + sReplLen, + sStrLen - ( sStartPos - 1 + sReplLen ) ); + + if( ISBYREF( 1 ) ) + { + hb_storclen( pcRet, sRetLen, 1 ); + } + + if( iNoRet ) + { + hb_xfree( pcRet ); + hb_ret(); + } + else + hb_retclen_buffer( pcRet, sRetLen ); + } - else + else /* hb_parclen( 2 ) > 0 */ { - if (sReplLen > sStrLen) - { - sStartPos = 1; - } - else - { - sStartPos = sStrLen-sReplLen+1; - } + PHB_ITEM pSubst = NULL; + int iArgErrorMode = ct_getargerrormode(); + + if( iArgErrorMode != CT_ARGERR_IGNORE ) + { + pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG, + CT_ERROR_POSREPL, NULL, "POSREPL", 0, + EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS ); + } + + if( pSubst != NULL ) + hb_itemReturnRelease( pSubst ); + else if( iNoRet ) + hb_ret(); + else + hb_retclen( pcString, sStrLen ); } - - /* check for false sStartPos */ - if (sStartPos > sStrLen+1) - { - int iArgErrorMode = ct_getargerrormode(); - if (iArgErrorMode != CT_ARGERR_IGNORE) - { - ct_error ((USHORT)iArgErrorMode, EG_ARG, CT_ERROR_POSREPL, - NULL, "POSREPL", 0, EF_CANDEFAULT, 3, - hb_paramError (1), hb_paramError (2), - hb_paramError (3)); - } - - if (iNoRet) - { - hb_ret(); - } - else - { - hb_retclen (pcString, sStrLen); - } - - return; - } - - if (sStrLen > (sStartPos+sReplLen-1)) - { - sRetLen = sStrLen; - } - else - { - sRetLen = sStartPos+sReplLen-1; - } - - pcRet = ( char * )hb_xgrab (sRetLen); - - /* copy first part */ - if (sStartPos > 1) - { - hb_xmemcpy (pcRet, pcString, sStartPos-1); - } - - /* insert replacement string */ - hb_xmemcpy (pcRet+sStartPos-1, pcReplace, sReplLen); - - /* copy second part */ - if (sStrLen > (sStartPos-1+sReplLen)) - { - hb_xmemcpy (pcRet+sStartPos-1+sReplLen, pcString+sStartPos-1+sReplLen, - sStrLen-(sStartPos-1+sReplLen)); - } - - if (iNoRet) - { - hb_ret(); - } - else - { - hb_retclen (pcRet, sRetLen); - } - - if (ISBYREF (1)) - { - hb_storclen (pcRet, sRetLen, 1); - } - - hb_xfree (pcRet); - - } - else /* hb_parclen (2) > 0 */ - { + } + else /* ISCHAR( 1 ) */ + { PHB_ITEM pSubst = NULL; int iArgErrorMode = ct_getargerrormode(); - if (iArgErrorMode != CT_ARGERR_IGNORE) + + if( iArgErrorMode != CT_ARGERR_IGNORE ) { - pSubst = ct_error_subst ((USHORT)iArgErrorMode, EG_ARG, CT_ERROR_POSREPL, - NULL, "POSREPL", 0, EF_CANSUBSTITUTE, 3, - hb_paramError (1), hb_paramError (2), hb_paramError (3)); - } - - if (pSubst != NULL) - { - hb_itemReturn (pSubst); - hb_itemRelease (pSubst); + pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG, + CT_ERROR_POSREPL, NULL, "POSREPL", 0, + EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS ); } + + if( pSubst != NULL ) + hb_itemReturnRelease( pSubst ); + else if( iNoRet ) + hb_ret(); else - { - if (iNoRet) - { - hb_ret(); - } - else - { - hb_retclen (pcString, sStrLen); - } - } - } - - } - else /* ISCHAR (1) */ - { - PHB_ITEM pSubst = NULL; - int iArgErrorMode = ct_getargerrormode(); - if (iArgErrorMode != CT_ARGERR_IGNORE) - { - pSubst = ct_error_subst ((USHORT)iArgErrorMode, EG_ARG, CT_ERROR_POSREPL, - NULL, "POSREPL", 0, EF_CANSUBSTITUTE, 3, - hb_paramError (1), hb_paramError (2), hb_paramError (3)); - } - - if (pSubst != NULL) - { - hb_itemReturn (pSubst); - hb_itemRelease (pSubst); - } - else - { - if (iNoRet) - { - hb_ret(); - } - else - { - hb_retc (""); - } - } - - } - + hb_retc( NULL ); + } } - - - - diff --git a/harbour/contrib/libct/posdiff.c b/harbour/contrib/libct/posdiff.c index df0b827498..dd166a641b 100644 --- a/harbour/contrib/libct/posdiff.c +++ b/harbour/contrib/libct/posdiff.c @@ -84,91 +84,73 @@ * $END$ */ -HB_FUNC (POSDIFF) +HB_FUNC( POSDIFF ) { + if( ISCHAR( 1 ) && ISCHAR( 2 ) ) + { + char *pcString1 = hb_parc( 1 ); + size_t sStrLen1 = hb_parclen( 1 ); + char *pcString2 = hb_parc( 2 ); + size_t sStrLen2 = hb_parclen( 2 ); + char *pc1, *pc2; + size_t sIgnore; - if (ISCHAR (1) && ISCHAR (2)) - { - - char *pcString1 = hb_parc (1); - size_t sStrLen1 = hb_parclen (1); - char *pcString2 = hb_parc (2); - size_t sStrLen2 = hb_parclen (2); - char *pc1, *pc2; - - size_t sIgnore; - - if (ISNUM (3)) - sIgnore = hb_parnl (3); - else - sIgnore = 0; - - if ((sIgnore > sStrLen1) || (sIgnore > sStrLen2)) - { - int iArgErrorMode = ct_getargerrormode(); - if (iArgErrorMode != CT_ARGERR_IGNORE) - { - ct_error ((USHORT)iArgErrorMode, EG_ARG, CT_ERROR_POSDIFF, - NULL, "POSDIFF", 0, EF_CANDEFAULT, 3, - hb_paramError (1), hb_paramError (2), - hb_paramError (3)); - } - - hb_retnl (0); - return; - } - - if (sStrLen1 != sStrLen2) - { - hb_retnl ((sStrLen1 < sStrLen2 ? sStrLen1 : sStrLen2)+1); - return; - } - - pc1 = pcString1+sIgnore; - pc2 = pcString2+sIgnore; - - while (pc1 < pcString1+sStrLen1) - { - if (*pc1 != *pc2) - { - hb_retnl ((pc1-pcString1)+1); - return; - } - pc1++; - pc2++; - } - - hb_retnl (0); - - } - else /* (ISCHAR (1) && ISCHAR (2)) */ - { - PHB_ITEM pSubst = NULL; - int iArgErrorMode = ct_getargerrormode(); - if (iArgErrorMode != CT_ARGERR_IGNORE) - { - pSubst = ct_error_subst ((USHORT)iArgErrorMode, EG_ARG, CT_ERROR_POSDIFF, - NULL, "POSDIFF", 0, EF_CANSUBSTITUTE, 3, - hb_paramError (1), hb_paramError (2), hb_paramError (3)); - } - - if (pSubst != NULL) - { - hb_itemReturn (pSubst); - hb_itemRelease (pSubst); - } - else - { - if (ISCHAR (1) || ISCHAR (2)) - hb_retnl (1); + if( ISNUM( 3 ) ) + sIgnore = hb_parnl( 3 ); else - hb_retnl (0); - } + sIgnore = 0; - } + if( ( sIgnore > sStrLen1 ) || ( sIgnore > sStrLen2 ) ) + { + int iArgErrorMode = ct_getargerrormode(); - return; + if( iArgErrorMode != CT_ARGERR_IGNORE ) + { + ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_POSDIFF, NULL, + "POSDIFF", 0, EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS ); + } + hb_retni( 0 ); + return; + } + pc1 = pcString1 + sIgnore; + pc2 = pcString2 + sIgnore; + + while( ( pc1 < pcString1 + sStrLen1 ) && ( pc2 < pcString2 + sStrLen2 ) ) + { + if( *pc1 != *pc2 ) + { + hb_retnl( ( pc1 - pcString1 ) + 1 ); + return; + } + pc1++; + pc2++; + } + + if( sStrLen1 != sStrLen2 ) + hb_retnl( ( sStrLen1 < sStrLen2 ? sStrLen1 : sStrLen2 ) + 1 ); + else + hb_retni( 0 ); + } + else /* ( ISCHAR( 1 ) && ISCHAR( 2 ) ) */ + { + PHB_ITEM pSubst = NULL; + int iArgErrorMode = ct_getargerrormode(); + + if( iArgErrorMode != CT_ARGERR_IGNORE ) + { + pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG, + CT_ERROR_POSDIFF, NULL, "POSDIFF", 0, + EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS ); + } + + if( pSubst != NULL ) + hb_itemReturnRelease( pSubst ); + else if( ISCHAR( 1 ) || ISCHAR( 2 ) ) + hb_retnl( 1 ); + else + hb_retni( 0 ); + } } @@ -200,116 +182,97 @@ HB_FUNC (POSDIFF) * $END$ */ -HB_FUNC (POSEQUAL) +HB_FUNC( POSEQUAL ) { + if( ISCHAR( 1 ) && ISCHAR( 2 ) ) + { + char *pcString1 = hb_parc( 1 ); + size_t sStrLen1 = hb_parclen( 1 ); + char *pcString2 = hb_parc( 2 ); + size_t sStrLen2 = hb_parclen( 2 ); + char *pc1, *pc2; + size_t sIgnore, sCompare, sCompareCnt, sRet = 0; - if (ISCHAR (1) && ISCHAR (2)) - { - - char *pcString1 = hb_parc (1); - size_t sStrLen1 = hb_parclen (1); - char *pcString2 = hb_parc (2); - size_t sStrLen2 = hb_parclen (2); - char *pc1, *pc2; - - size_t sIgnore, sCompare, sCompareCnt, sRet = 0; - - if (ISNUM (4)) - sIgnore = hb_parnl (4); - else - sIgnore = 0; - - if (ISNUM (3)) - sCompare = hb_parnl (3); - else - sCompare = (sStrLen1 < sStrLen2 ? sStrLen1 : sStrLen2)-sIgnore; - - if ((sCompare == 0) || (sIgnore > sStrLen1) || (sIgnore > sStrLen2)) - { - int iArgErrorMode = ct_getargerrormode(); - if (iArgErrorMode != CT_ARGERR_IGNORE) - { - ct_error ((USHORT)iArgErrorMode, EG_ARG, CT_ERROR_POSEQUAL, - NULL, "POSEQUAL", 0, EF_CANDEFAULT, 4, - hb_paramError (1), hb_paramError (2), - hb_paramError (3), hb_paramError (4)); - } - - hb_retnl (0); - return; - } - - if ((sStrLen1 < (sCompare+sIgnore)) || (sStrLen2 < (sCompare+sIgnore))) - { - int iArgErrorMode = ct_getargerrormode(); - if (iArgErrorMode != CT_ARGERR_IGNORE) - { - ct_error ((USHORT)iArgErrorMode, EG_ARG, CT_ERROR_POSEQUAL, - NULL, "POSEQUAL", 0, EF_CANDEFAULT, 4, - hb_paramError (1), hb_paramError (2), - hb_paramError (3), hb_paramError (4)); - } - - hb_retnl (0); - return; - } - - pc1 = pcString1+sIgnore; - pc2 = pcString2+sIgnore; - sCompareCnt = 0; - - while (pc1 < pcString1+sStrLen1) - { - if (*pc1 == *pc2) - { - /* save possible return value */ - if (sCompareCnt == 0) - sRet = pc1-pcString1+1; - - sCompareCnt++; - if (sCompareCnt == sCompare) - { - hb_retnl (sRet); - return; - } - } + if( ISNUM( 4 ) ) + sIgnore = hb_parnl( 4 ); else + sIgnore = 0; + + if( ISNUM( 3 ) ) + sCompare = hb_parnl( 3 ); + else + sCompare = ( sStrLen1 < sStrLen2 ? sStrLen1 : sStrLen2 ) - sIgnore; + + if( ( sCompare == 0 ) || ( sIgnore > sStrLen1 ) || ( sIgnore > sStrLen2 ) ) { - /* reset compare counter */ - sCompareCnt = 0; + int iArgErrorMode = ct_getargerrormode(); + + if( iArgErrorMode != CT_ARGERR_IGNORE ) + { + ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_POSEQUAL, NULL, + "POSEQUAL", 0, EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS ); + } + hb_retni( 0 ); + return; } - pc1++; - pc2++; - } - hb_retnl (0); + if( ( sStrLen1 < ( sCompare + sIgnore ) ) || ( sStrLen2 < ( sCompare + sIgnore ) ) ) + { + int iArgErrorMode = ct_getargerrormode(); - } - else /* (ISCHAR (1) && ISCHAR (2)) */ - { - PHB_ITEM pSubst = NULL; - int iArgErrorMode = ct_getargerrormode(); - if (iArgErrorMode != CT_ARGERR_IGNORE) - { - pSubst = ct_error_subst ((USHORT)iArgErrorMode, EG_ARG, CT_ERROR_POSEQUAL, - NULL, "POSEQUAL", 0, EF_CANSUBSTITUTE, 4, - hb_paramError (1), hb_paramError (2), - hb_paramError (3), hb_paramError (4)); - } - - if (pSubst != NULL) - { - hb_itemReturn (pSubst); - hb_itemRelease (pSubst); - } - else - { - hb_retnl (0); - } - } + if( iArgErrorMode != CT_ARGERR_IGNORE ) + { + ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_POSEQUAL, NULL, + "POSEQUAL", 0, EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS ); + } + hb_retni( 0 ); + return; + } - return; + pc1 = pcString1 + sIgnore; + pc2 = pcString2 + sIgnore; + sCompareCnt = 0; + while( pc1 < pcString1 + sStrLen1 ) + { + if( *pc1 == *pc2 ) + { + /* save possible return value */ + if( sCompareCnt == 0 ) + sRet = pc1 - pcString1 + 1; + + sCompareCnt++; + if( sCompareCnt == sCompare ) + { + hb_retnl( sRet ); + return; + } + } + else + { + /* reset compare counter */ + sCompareCnt = 0; + } + pc1++; + pc2++; + } + hb_retni( 0 ); + } + else /* ( ISCHAR( 1 ) && ISCHAR( 2 ) ) */ + { + PHB_ITEM pSubst = NULL; + int iArgErrorMode = ct_getargerrormode(); + + if( iArgErrorMode != CT_ARGERR_IGNORE ) + { + pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG, + CT_ERROR_POSEQUAL, NULL, "POSEQUAL", 0, + EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS ); + } + + if( pSubst != NULL ) + hb_itemReturnRelease( pSubst ); + else + hb_retni( 0 ); + } } - - diff --git a/harbour/contrib/libct/print.c b/harbour/contrib/libct/print.c index 6688a0ca50..52c1692f00 100644 --- a/harbour/contrib/libct/print.c +++ b/harbour/contrib/libct/print.c @@ -4,9 +4,14 @@ /* * Harbour Project source code: - * CT3 Printer functions: - PRINTSTAT() / PRINTREADY() + * CT3 Printer functions: * + * PRINTSTAT(), PRINTREADY() * Copyright 2001 Walter Negro - FOEESITRA" + * + * PRINTSEND() + * Copyright 2004 Phil Krylov + * * www - http://www.harbour-project.org * * This program is free software; you can redistribute it and/or modify @@ -54,6 +59,10 @@ #include "hbapi.h" #include "hbapifs.h" +#ifdef __DJGPP__ +# include +#endif + /* $DOC$ * $FUNCNAME$ @@ -82,8 +91,8 @@ HB_FUNC( PRINTSTAT ) { - USHORT uiPort = ISNUM( 1 ) ? hb_parni( 1 ) : 1; - int Status = 0; + USHORT uiPort = ISNUM( 1 ) ? hb_parni( 1 ) : 1; + int Status = 0; #if defined(HB_OS_DOS) @@ -133,8 +142,8 @@ HB_FUNC( PRINTSTAT ) HB_FUNC( PRINTREADY ) { - USHORT uiPort = ISNUM( 1 ) ? hb_parni( 1 ) : 1; - int Status = 0; + USHORT uiPort = ISNUM( 1 ) ? hb_parni( 1 ) : 1; + int Status = 0; #if defined(HB_OS_DOS) @@ -153,7 +162,41 @@ HB_FUNC( PRINTREADY ) HB_SYMBOL_UNUSED( uiPort ); #endif - hb_retl( (Status == 0x90) ); + hb_retl( ( Status == 0x90 ) ); } +HB_FUNC( PRINTSEND ) +{ +#ifdef __DJGPP__ + __dpmi_regs r; + + r.x.dx = hb_parni( 2 ) - 1; + + if( ISNUM( 1 ) ) + { + r.h.al = hb_parni( 1 ); + __dpmi_int( 0x17, &r ); + if( r.h.ah & 1 ) + hb_retni( 1 ); + else + hb_retni( 0 ); + } + else if( ISCHAR( 1 ) ) + { + char *string = hb_parcx( 1 ); + int i, len = hb_parclen( 1 ); + + r.h.ah = 0; + for( i = 0; i < len && !( r.h.ah & 1 ); i++ ) + { + r.h.al = string[i]; + __dpmi_int( 0x17, &r ); + } + if( r.h.ah & 1 ) + hb_retni( len - ( i - 1 ) ); + else + hb_retni( 0 ); + } +#endif +} diff --git a/harbour/contrib/libct/range.c b/harbour/contrib/libct/range.c index 1d3cf3a9f9..cd76919ecd 100644 --- a/harbour/contrib/libct/range.c +++ b/harbour/contrib/libct/range.c @@ -91,101 +91,71 @@ * $END$ */ -HB_FUNC (RANGEREM) +HB_FUNC( RANGEREM ) { + if( ( hb_parclen( 1 ) > 0 || ISNUM( 1 ) ) && + ( hb_parclen( 2 ) > 0 || ISNUM( 2 ) ) && ISCHAR( 3 ) ) + { + char *pcString = ( char * ) hb_parc( 3 ); + size_t sStrLen = ( size_t ) hb_parclen( 3 ); + char *pcRet; + unsigned char *pc; + unsigned char ucChar1, ucChar2; + size_t sRetIndex; + int iMode, iBool; - if (((hb_parclen (1) > 0) || ISNUM (1)) && - ((hb_parclen (2) > 0) || ISNUM (2)) && - ISCHAR (3)) - { - - char *pcString = (char *)hb_parc (3); - size_t sStrLen = (size_t)hb_parclen (3); - char *pcRet, *pc; - unsigned char ucChar1, ucChar2; - size_t sRetIndex; - int iMode, iBool; - - if (ISNUM (1)) - { - ucChar1 = hb_parnl (1)%256; - } - else - { - ucChar1 = *((unsigned char *)hb_parc (1)); - } - - if (ISNUM (2)) - { - ucChar2 = hb_parnl (2)%256; - } - else - { - ucChar2 = *((unsigned char *)hb_parc (2)); - } - - iMode = (ucChar2 < ucChar1); - - pcRet = ( char * )hb_xgrab (sStrLen); - sRetIndex = 0; - for (pc = pcString; pc < pcString+sStrLen; pc++) - { - iBool = ((*pc) >= ucChar1); - if (iMode) - { - iBool |= ((*pc) <= ucChar2); - } + if( ISCHAR( 1 ) ) + ucChar1 = *( ( unsigned char * ) hb_parc( 1 ) ); else - { - iBool &= ((*pc) <= ucChar2); - } + ucChar1 = ( unsigned char ) ( hb_parni( 1 ) % 256 ); - if (!iBool) - { - *(pcRet+sRetIndex) = *pc; - sRetIndex++; - } - } - - hb_retclen (pcRet, sRetIndex); - hb_xfree (pcRet); - - } - else /* ((hb_parclen (1) > 0) || ISNUM (1)) && - ((hb_parclen (2) > 0) || ISNUM (2)) && - ISCHAR (3)) */ - { - PHB_ITEM pSubst = NULL; - int iArgErrorMode = ct_getargerrormode(); - if (iArgErrorMode != CT_ARGERR_IGNORE) - { - pSubst = ct_error_subst ((USHORT)iArgErrorMode, EG_ARG, CT_ERROR_RANGEREM, - NULL, "RANGEREM", 0, EF_CANSUBSTITUTE, 3, - hb_paramError (1), hb_paramError (2), - hb_paramError (3)); - } - - if (pSubst != NULL) - { - hb_itemReturn (pSubst); - hb_itemRelease (pSubst); - } - else - { - if (ISCHAR (3)) - { - hb_retclen (hb_parc (3), hb_parclen (3)); - } + if( ISCHAR( 2 ) ) + ucChar2 = *( ( unsigned char * ) hb_parc( 2 ) ); else + ucChar2 = ( unsigned char ) ( hb_parni( 2 ) % 256 ); + + iMode = ( ucChar2 < ucChar1 ); + + pcRet = ( char * ) hb_xgrab( sStrLen + 1 ); + sRetIndex = 0; + for( pc = ( unsigned char * ) pcString; pc < ( unsigned char * ) pcString + sStrLen; pc++ ) { - hb_retc (""); + iBool = ( ( *pc ) >= ucChar1 ); + if( iMode ) + iBool |= ( ( *pc ) <= ucChar2 ); + else + iBool &= ( ( *pc ) <= ucChar2 ); + + if( !iBool ) + { + *( pcRet + sRetIndex ) = *pc; + sRetIndex++; + } } - } - return; - } - return; + hb_retclen( pcRet, sRetIndex ); + hb_xfree( pcRet ); + } + else /* ( hb_parclen( 1 ) > 0 || ISNUM( 1 ) ) && + ( hb_parclen( 2 ) > 0 || ISNUM( 2 ) ) && ISCHAR( 3 ) */ + { + PHB_ITEM pSubst = NULL; + int iArgErrorMode = ct_getargerrormode(); + if( iArgErrorMode != CT_ARGERR_IGNORE ) + { + pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG, + CT_ERROR_RANGEREM, NULL, "RANGEREM", 0, + EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS ); + } + + if( pSubst != NULL ) + hb_itemReturnRelease( pSubst ); + else if( ISCHAR( 3 ) ) + hb_retclen( hb_parc( 3 ), hb_parclen( 3 ) ); + else + hb_retc( NULL ); + } } @@ -225,140 +195,95 @@ HB_FUNC (RANGEREM) * $END$ */ -HB_FUNC (RANGEREPL) +HB_FUNC( RANGEREPL ) { + int iNoRef = ct_getref() && ISBYREF( 3 ); - int iNoRef = ct_getref(); + if( ( hb_parclen( 1 ) > 0 || ISNUM( 1 ) ) && + ( hb_parclen( 2 ) > 0 || ISNUM( 2 ) ) && + ISCHAR( 3 ) && ( hb_parclen( 4 ) > 0 || ISNUM( 4 ) ) ) + { + char *pcString = ( char * ) hb_parc( 3 ); + size_t sStrLen = ( size_t ) hb_parclen( 3 ); + char *pcRet; + unsigned char *pc; + unsigned char ucChar1, ucChar2, ucReplace; + size_t sRetIndex; + int iMode, iBool; - if (((hb_parclen (1) > 0) || ISNUM (1)) && - ((hb_parclen (2) > 0) || ISNUM (2)) && - ISCHAR (3) && - ((hb_parclen (4) > 0) || ISNUM (4))) - { - - char *pcString = (char *)hb_parc (3); - size_t sStrLen = (size_t)hb_parclen (3); - char *pcRet, *pc; - unsigned char ucChar1, ucChar2, ucReplace; - size_t sRetIndex; - int iMode, iBool; - - if (ISNUM (1)) - { - ucChar1 = hb_parnl (1)%256; - } - else - { - ucChar1 = *((unsigned char *)hb_parc (1)); - } - - if (ISNUM (2)) - { - ucChar2 = hb_parnl (2)%256; - } - else - { - ucChar2 = *((unsigned char *)hb_parc (2)); - } - - if (ISNUM (4)) - { - ucReplace = hb_parnl (4)%256; - } - else - { - ucReplace = *((unsigned char *)hb_parc (4)); - } - - iMode = (ucChar2 < ucChar1); - - pcRet = ( char * )hb_xgrab (sStrLen); - sRetIndex = 0; - for (pc = pcString; pc < pcString+sStrLen; pc++) - { - iBool = ((*pc) >= ucChar1); - if (iMode) - { - iBool |= ((*pc) <= ucChar2); - } + if( ISCHAR( 1 ) ) + ucChar1 = *( ( unsigned char * ) hb_parc( 1 ) ); else - { - iBool &= ((*pc) <= ucChar2); - } + ucChar1 = ( unsigned char ) ( hb_parni( 1 ) % 256 ); - if (iBool) - { - *(pcRet+sRetIndex) = ucReplace; - sRetIndex++; - } + if( ISCHAR( 2 ) ) + ucChar2 = *( ( unsigned char * ) hb_parc( 2 ) ); else - { - *(pcRet+sRetIndex) = *pc; - sRetIndex++; - } - } + ucChar2 = ( unsigned char ) ( hb_parni( 2 ) % 256 ); - if (ISBYREF (3)) - { - hb_storclen (pcRet, sStrLen, 3); - } - - if (iNoRef) - { - hb_ret(); - } - else - { - hb_retclen (pcRet, sStrLen); - } - - hb_xfree (pcRet); - - } - else /* ((hb_parclen (1) > 0) || ISNUM (1)) && - ((hb_parclen (2) > 0) || ISNUM (2)) && - ISCHAR (3) && - ((hb_parclen (4) > 0))) */ - { - PHB_ITEM pSubst = NULL; - int iArgErrorMode = ct_getargerrormode(); - if (iArgErrorMode != CT_ARGERR_IGNORE) - { - pSubst = ct_error_subst ((USHORT)iArgErrorMode, EG_ARG, CT_ERROR_RANGEREPL, - NULL, "RANGEREPL", 0, EF_CANSUBSTITUTE, 4, - hb_paramError (1), hb_paramError (2), - hb_paramError (3), hb_paramError (4)); - } - - if (pSubst != NULL) - { - hb_itemReturn (pSubst); - hb_itemRelease (pSubst); - } - else - { - if (iNoRef) - { - hb_ret(); - } + if( ISCHAR( 4 ) ) + ucReplace = *( ( unsigned char * ) hb_parc( 4 ) ); else + ucReplace = ( unsigned char ) ( hb_parni( 4 ) % 256 ); + + iMode = ( ucChar2 < ucChar1 ); + + pcRet = ( char * ) hb_xgrab( sStrLen + 1 ); + sRetIndex = 0; + for( pc = ( unsigned char * ) pcString; pc < ( unsigned char * ) pcString + sStrLen; pc++ ) { - if (ISCHAR (3)) - { - hb_retclen (hb_parc (3), hb_parclen (3)); - } - else - { - hb_retc (""); - } + iBool = ( ( *pc ) >= ucChar1 ); + if( iMode ) + iBool |= ( ( *pc ) <= ucChar2 ); + else + iBool &= ( ( *pc ) <= ucChar2 ); + + if( iBool ) + { + *( pcRet + sRetIndex ) = ucReplace; + sRetIndex++; + } + else + { + *( pcRet + sRetIndex ) = *pc; + sRetIndex++; + } } - } - return; - - } - return; + if( ISBYREF( 3 ) ) + hb_storclen( pcRet, sStrLen, 3 ); + if( iNoRef ) + /* Contrary to the official documentation, RANGREPL() returns NIL instead of .F. + * in this situation. If the string is not passed by reference, it returns the + * string regardless of iNoRef. */ + hb_ret(); + else + hb_retclen( pcRet, sStrLen ); + + hb_xfree( pcRet ); + } + else /* ( hb_parclen( 1 ) > 0 || ISNUM( 1 ) ) && + ( hb_parclen( 2 ) > 0 || ISNUM( 2 ) ) && + ISCHAR( 3 ) && ( hb_parclen( 4 ) > 0 || ISNUM( 4 ) ) */ + { + PHB_ITEM pSubst = NULL; + int iArgErrorMode = ct_getargerrormode(); + + if( iArgErrorMode != CT_ARGERR_IGNORE ) + { + pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG, + CT_ERROR_RANGEREPL, NULL, "RANGEREPL", 0, + EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS ); + } + + if( pSubst != NULL ) + hb_itemReturnRelease( pSubst ); + else if( iNoRef ) + hb_ret(); + else if( ISCHAR( 3 ) ) + hb_retclen( hb_parc( 3 ), hb_parclen( 3 ) ); + else + hb_retc( NULL ); + } } - -