hbct

  Previous topic Next topic JavaScript is required for the print function Mail us feedback on this topic! Mail us feedback on this topic!  
c:\harbour\contrib\hbct
addascii.c
TypeFunctionSourceLine
HB_FUNCADDASCII(void)
HB_FUNC( ADDASCII )
{
   int iNoRet;

   /* suppressing return value ? */
   iNoRet = ct_getref() && ISBYREF( 1 );

   if( ISCHAR( 1 ) )
   {
      char *pcSource = hb_parc( 1 );
      size_t sLen = hb_parclen( 1 );
      char *pcResult;
      size_t sPos;
      LONG lValue;
      int iCarryOver;

      if( ISNUM( 3 ) )
         sPos = hb_parnl( 3 );
      else
         sPos = sLen;

      if( sPos > sLen || !ISNUM( 2 ) || sLen == 0 )
      {
         int iArgErrorMode = ct_getargerrormode();

         if( iArgErrorMode != CT_ARGERR_IGNORE )
         {
            ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_ADDASCII, NULL,
                      "ADDASCII", 0, EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
         }
         /* return string unchanged */
         if( iNoRet )
            hb_retl( 0 );
         else
            hb_retclen( pcSource, sLen );
         return;
      }

      pcResult = ( char * ) hb_xgrab( sLen + 1 );
      hb_xmemcpy( pcResult, pcSource, sLen );

      lValue = hb_parnl( 2 );
      if( ISLOG( 4 ) )
         iCarryOver = hb_parl( 4 );
      else
         iCarryOver = 0;

      if( iCarryOver )
      {
         size_t sCurrent;
         LONG lResult;

         for( sCurrent = sPos; sCurrent > 0 && lValue != 0; sCurrent-- )
         {
            lResult = ( LONG ) pcSource[sCurrent - 1] + ( lValue % 256 );

            lValue /= 256;
            if( lResult > 255 )
               lValue++;
            else if( lResult < 0 )
               lValue--;

            pcResult[sCurrent - 1] = ( char ) ( lResult % 256 );
         }
      }
      else
      {
         pcResult[sPos - 1] = ( char ) ( ( ( LONG ) pcResult[sPos - 1] + lValue ) % 256 );
      }

      if( ISBYREF( 1 ) )
         hb_storclen( pcResult, sLen, 1 );

      if( iNoRet )
      {
         hb_retl( 0 );
         hb_xfree( pcResult );
      }
      else
         hb_retclen_buffer( pcResult, sLen );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_ADDASCII,
                                  NULL, "ADDASCII", 0, EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else if( iNoRet )
         hb_retl( 0 );
      else
         hb_retc( NULL );
   }
}
addascii.c123
asciisum.c
TypeFunctionSourceLine
HB_FUNCASCIISUM(void)
HB_FUNC( ASCIISUM )
{

   if( ISCHAR( 1 ) )
   {
      size_t sStrSize = hb_parclen( 1 );
      char *pcString = hb_parc( 1 );
      size_t sPos;
      ULONG ulResult = 0;

      for( sPos = 0; sPos < sStrSize; sPos++ )
         ulResult += ( ULONG ) pcString[sPos];

      hb_retnl( ulResult );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_ASCIISUM, NULL, "ASCIISUM", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
      {
         hb_itemReturnRelease( pSubst );
      }
      else
      {
         hb_retni( 0 );
      }
   }
}
asciisum.c97
ascpos.c
TypeFunctionSourceLine
STATIC VOIDdo_ascpos( int iSwitch )
static void do_ascpos( int iSwitch )
{
   if( ISCHAR( 1 ) )
   {
      size_t sStrSize = hb_parclen( 1 );
      BYTE *pcString = ( BYTE * ) hb_parc( 1 );
      size_t sPos;

      if( ISNUM( 2 ) )
         sPos = hb_parnl( 2 );
      else
         sPos = sStrSize;

      if( ( sPos == 0 ) || ( sPos > sStrSize ) )
      {
         hb_retni( 0 );
      }
      else
      {
         if( iSwitch == DO_ASCPOS_VALPOS )
         {
            if( isdigit( ( size_t ) pcString[sPos - 1] ) )
               hb_retnl( pcString[sPos - 1] - 48 );
            else
               hb_retni( 0 );
         }
         else                   /* iSwitch == DO_ASCPOS_ASCPOS */
         {
            hb_retnl( pcString[sPos - 1] );
         }
      }
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  iSwitch == DO_ASCPOS_VALPOS ?
                                  CT_ERROR_VALPOS : CT_ERROR_ASCPOS, NULL,
                                  HB_ERR_FUNCNAME, 0, EF_CANSUBSTITUTE,
                                  HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
      {
         hb_itemReturnRelease( pSubst );
      }
      else
      {
         hb_retni( 0 );
      }
   }
}
ascpos.c66
HB_FUNCASCPOS(void)
HB_FUNC( ASCPOS )
{
   do_ascpos( DO_ASCPOS_ASCPOS );
}
ascpos.c165
HB_FUNCVALPOS(void)
HB_FUNC( VALPOS )
{
   do_ascpos( DO_ASCPOS_VALPOS );
}
ascpos.c213
atadjust.c
TypeFunctionSourceLine
HB_FUNCATADJUST(void)
HB_FUNC( ATADJUST )
{
   if( ISCHAR( 1 ) && ISCHAR( 2 ) && ISNUM( 3 ) )
   {
      char *pcStringToMatch = hb_parc( 1 );
      size_t sStrToMatchLen = ( size_t ) hb_parclen( 1 );
      char *pcString = hb_parc( 2 );
      size_t sStrLen = ( size_t ) hb_parclen( 2 );
      size_t sAdjustPosition = hb_parnl( 3 );

      int iMultiPass = ct_getatmupa();
      int iAtLike = ct_getatlike();
      char cAtLike = ct_getatlikechar();
      size_t sIgnore, sMatchStrLen = 0;
      ULONG ulCounter;
      char *pc = NULL;

      char cFillChar;
      char *pcRetStr, *pcCheckFill;
      size_t sRetStrLen;

      /* eventually ignore some characters */
      if( ISNUM( 5 ) )
         sIgnore = ( size_t ) hb_parnl( 5 );
      else
         sIgnore = 0;

      if( sIgnore >= sStrLen )
      {
         int iArgErrorMode = ct_getargerrormode();

         if( iArgErrorMode != CT_ARGERR_IGNORE )
         {
            ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_ATADJUST, NULL, "ATADJUST", 0,
                      EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
         }
         hb_retclen( pcString, sStrLen );
         return;
      }
      else
      {
         pcString += sIgnore;
         sStrLen -= sIgnore;
      }

      /* check for wrong adjust position */
      if( sAdjustPosition == 0 )
      {
         int iArgErrorMode = ct_getargerrormode();

         if( iArgErrorMode != CT_ARGERR_IGNORE )
         {
            ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_ATADJUST, NULL, "ATADJUST", 0,
                      EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
         }
         hb_retclen( pcString, sStrLen );
         return;
      }
      else
         sAdjustPosition--;     /* makes live easier since C indices start at zero ! */

      /* nth match or last match ? */
      if( ISNUM( 4 ) && ( ulCounter = hb_parnl( 4 ) ) != 0 )
      {
         /* find the th match */
         char *pcSubStr;
         size_t sSubStrLen;
         ULONG ulMatchCounter = 0;

         pcSubStr = pcString;
         sSubStrLen = sStrLen;

         while( ulMatchCounter < ulCounter )
         {
            switch ( iAtLike )
            {
               case CT_SETATLIKE_EXACT:
                  pc = ct_at_exact_forward( pcSubStr, sSubStrLen, pcStringToMatch,
                                            sStrToMatchLen, &sMatchStrLen );
                  break;

               case CT_SETATLIKE_WILDCARD:
                  pc = ct_at_wildcard_forward( pcSubStr, sSubStrLen, pcStringToMatch,
                                               sStrToMatchLen, cAtLike, &sMatchStrLen );
                  break;

               default:
                  pc = NULL;
            }

            if( pc == NULL )
            {
               /* no match found; if this happens at this point,
                  there are no  matches, so return */
               hb_retclen( pcString, sStrLen );
               return;
            }

            ulMatchCounter++;
            if( iMultiPass )
               pcSubStr = pc + 1;
            else
               pcSubStr = pc + sMatchStrLen;
            sSubStrLen = sStrLen - ( pcSubStr - pcString );
         }
      }
      else /* ( ISNUM( 4 ) && ( (ulCounter = hb_parnl( 4 ) ) != 0 ) */
      {
         /* we have to find the last match */
         switch ( iAtLike )
         {
            case CT_SETATLIKE_EXACT:
               pc = ct_at_exact_backward( pcString, sStrLen, pcStringToMatch,
                                          sStrToMatchLen, &sMatchStrLen );
               break;

            case CT_SETATLIKE_WILDCARD:
               pc = ct_at_wildcard_backward( pcString, sStrLen, pcStringToMatch,
                                             sStrToMatchLen, cAtLike, &sMatchStrLen );
               break;

            default:
               pc = NULL;
         }

         if( pc == NULL )
         {
            /* no matches found */
            hb_retclen( pcString, sStrLen );
            return;
         }
      }

      /* adjust string */
      if( ISCHAR( 6 ) )
      {
         if( hb_parclen( 6 ) > 0 )
            cFillChar = *( hb_parc( 6 ) );
         else
            cFillChar = 0x20;
      }
      else if( ISNUM( 6 ) )
         cFillChar = ( char ) ( hb_parnl( 6 ) % 256 );
      else
         cFillChar = 0x20;

      /* position of pc == adjust position ? */
      if( pc == pcString + sAdjustPosition )
      {
         /* do nothing */
         hb_retclen( pcString, sStrLen );
      }
      else
      {
         if( pc > pcString + sAdjustPosition )
         {
            /* adjust to left */
            /* check if we only delete cFillChar characters */
            for( pcCheckFill = pcString + sAdjustPosition; pcCheckFill < pc; pcCheckFill++ )
               if( *pcCheckFill != cFillChar )
               {
                  /* no -> return string unchanged */
                  hb_retclen( pcString, sStrLen );
                  return;
               }

            /* ok -> calculate new string size */
            sRetStrLen = sStrLen - ( pc - ( pcString + sAdjustPosition ) );
            pcRetStr = ( char * ) hb_xgrab( sRetStrLen + 1 );

            /* copy first portion of string */
            if( sAdjustPosition > 0 )
               hb_xmemcpy( pcRetStr, pcString, sAdjustPosition );

            /* copy second portion of string */
            if( sRetStrLen > sAdjustPosition )
               hb_xmemcpy( pcRetStr + sAdjustPosition, pc, sRetStrLen - sAdjustPosition );

            hb_retclen_buffer( pcRetStr, sRetStrLen );
         }
         else
         {
            /* adjust to right */
            sRetStrLen = sStrLen + ( pcString + sAdjustPosition ) - pc;
            pcRetStr = ( char * ) hb_xgrab( sRetStrLen + 1 );

            /* copy first portion of string */
            if( pc > pcString )
               hb_xmemcpy( pcRetStr, pcString, pc - pcString );

            /* fill characters */
            hb_xmemset( pcRetStr + ( pc - pcString ), cFillChar,
                        sAdjustPosition - ( pc - pcString ) );

            /* copy second portion of string */
            if( sRetStrLen > sAdjustPosition )
               hb_xmemcpy( pcRetStr + sAdjustPosition, pc, sRetStrLen - sAdjustPosition );

            hb_retclen_buffer( pcRetStr, sRetStrLen );
         }
      }
   }
   else                         /* ((ISCHAR (1)) && (ISCHAR (2)) && (ISNUM (3))) */
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_ATADJUST, NULL, "ATADJUST", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else if( ISCHAR( 2 ) )
         hb_retclen( hb_parc( 2 ), hb_parclen( 2 ) );
      else
         hb_retc( NULL );
   }
}
atadjust.c101
atnum.c
TypeFunctionSourceLine
STATIC VOIDdo_atnum( int iSwitch )
static void do_atnum( int iSwitch )
{
   if( ISCHAR( 1 ) && ISCHAR( 2 ) )
   {
      char *pcStringToMatch = hb_parc( 1 );
      size_t sStrToMatchLen = ( size_t ) hb_parclen( 1 );
      char *pcString = hb_parc( 2 );
      size_t sStrLen = ( size_t ) hb_parclen( 2 );
      int iMultiPass = ct_getatmupa();
      int iAtLike = ct_getatlike();
      char cAtLike = ct_getatlikechar();
      size_t sIgnore, sMatchStrLen = 0;
      ULONG ulCounter;
      char *pc = NULL;

      /* eventually ignore some characters */
      if( ISNUM( 4 ) )
         sIgnore = ( size_t ) hb_parnl( 4 );
      else
         sIgnore = 0;

      if( sIgnore >= sStrLen )
      {
         switch ( iSwitch )
         {
            case DO_ATNUM_AFTERATNUM:
            {
               /* AFTERATNUM */
               int iArgErrorMode = ct_getargerrormode();

               if( iArgErrorMode != CT_ARGERR_IGNORE )
               {
                  ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_AFTERATNUM, NULL,
                            "AFTERATNUM", 0, EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
               }
               hb_retc( NULL );
               break;
            }
            case DO_ATNUM_BEFORATNUM:
            {
               /* BEFORATNUM */
               int iArgErrorMode = ct_getargerrormode();

               if( iArgErrorMode != CT_ARGERR_IGNORE )
               {
                  ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_BEFORATNUM, NULL,
                            "BEFORATNUM", 0, EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
               }
               hb_retc( NULL );
               break;
            }
            case DO_ATNUM_ATNUM:
            {
               /* ATNUM */
               int iArgErrorMode = ct_getargerrormode();

               if( iArgErrorMode != CT_ARGERR_IGNORE )
               {
                  ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_ATNUM, NULL, "ATNUM", 0,
                            EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
               }
               hb_retni( 0 );
               break;
            }
         }
         return;
      }
      else
      {
         pcString += sIgnore;
         sStrLen -= sIgnore;
      }

      /* nth match or last match ? */
      if( ISNUM( 3 ) && ( ulCounter = hb_parnl( 3 ) ) != 0 )
      {
         /* find the th match */
         char *pcSubStr;
         size_t sSubStrLen;
         ULONG ulMatchCounter = 0;

         pcSubStr = pcString;
         sSubStrLen = sStrLen;

         while( ulMatchCounter < ulCounter )
         {
            switch ( iAtLike )
            {
               case CT_SETATLIKE_EXACT:
                  pc = ct_at_exact_forward( pcSubStr, sSubStrLen, pcStringToMatch,
                                            sStrToMatchLen, &sMatchStrLen );
                  break;

               case CT_SETATLIKE_WILDCARD:
                  pc = ct_at_wildcard_forward( pcSubStr, sSubStrLen, pcStringToMatch,
                                               sStrToMatchLen, cAtLike, &sMatchStrLen );
                  break;

               default:
                  pc = NULL;
            }

            if( pc == NULL )
            {
               /* no match found; if this happens at this point,
                  there are no  matches, so return an empty string */
               switch ( iSwitch )
               {
                  case DO_ATNUM_AFTERATNUM:
                  case DO_ATNUM_BEFORATNUM:
                     /* AFTERATNUM */
                     /* BEFORATNUM */
                     hb_retc( NULL );
                     break;

                  case DO_ATNUM_ATNUM:
                     /* ATNUM */
                     hb_retni( 0 );
                     break;
               }
               return;
            }
            ulMatchCounter++;

            if( iMultiPass )
               pcSubStr = pc + 1;
            else
               pcSubStr = pc + sMatchStrLen;
            sSubStrLen = sStrLen - ( pcSubStr - pcString );
         }
      }
      else /* ( ISNUM( 3 ) && ( ulCounter = hb_parnl( 3 ) ) != 0 ) */
      {
         /* we have to find the last match and return the
            string after that last match */
         switch ( iAtLike )
         {
            case CT_SETATLIKE_EXACT:
               pc = ct_at_exact_backward( pcString, sStrLen, pcStringToMatch,
                                          sStrToMatchLen, &sMatchStrLen );
               break;

            case CT_SETATLIKE_WILDCARD:
               pc = ct_at_wildcard_backward( pcString, sStrLen, pcStringToMatch,
                                             sStrToMatchLen, cAtLike, &sMatchStrLen );
               break;

            default:
               pc = NULL;
         }
         if( pc == NULL )
         {
            /* no matches found */
            switch ( iSwitch )
            {
               case DO_ATNUM_AFTERATNUM:
               case DO_ATNUM_BEFORATNUM:
                  /* AFTERATNUM */
                  /* BEFORATNUM */
                  hb_retc( NULL );
                  break;

               case DO_ATNUM_ATNUM:
                  /* ATNUM */
                  hb_retni( 0 );
                  break;
            }
            return;
         }
      }

      switch ( iSwitch )
      {
         case DO_ATNUM_AFTERATNUM:
            /* AFTERATNUM */
            if( pc + sMatchStrLen >= pcString + sStrLen )
               hb_retc( NULL );
            else
               hb_retclen( pc + sMatchStrLen, sStrLen - ( pc + sMatchStrLen - pcString ) );
            break;

         case DO_ATNUM_BEFORATNUM:
            /* BEFORATNUM */
            hb_retclen( pcString - sIgnore, pc - ( pcString - sIgnore ) );
            break;

         case DO_ATNUM_ATNUM:
            /* ATNUM */
#if (__POCC__ >= 500) && defined(HB_OS_WIN_64)
            /* NOTE: Workaround for Pelles C 5.00.13 AMD64 mode internal error:
                     'fatal error: Internal error: reduce_tree()' [vszakats]. */
            hb_retnl( pc - pcString + sIgnore + 1 );
#else
            hb_retnl( pc - ( pcString - sIgnore ) + 1 );
#endif
            break;
      }
   }
   else                         /* ((ISCHAR (1)) && (ISCHAR (2))) */
   {
      switch ( iSwitch )
      {
         case DO_ATNUM_AFTERATNUM:
         case DO_ATNUM_BEFORATNUM:
         {
            /* AFTERATNUM */
            PHB_ITEM pSubst = NULL;
            int iArgErrorMode = ct_getargerrormode();

            if( iArgErrorMode != CT_ARGERR_IGNORE )
            {
               pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                        iSwitch ==
                                        DO_ATNUM_AFTERATNUM ? CT_ERROR_AFTERATNUM :
                                        CT_ERROR_BEFORATNUM, NULL, HB_ERR_FUNCNAME, 0,
                                        EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
            }

            if( pSubst != NULL )
               hb_itemReturnRelease( pSubst );
            else
               hb_retc( NULL );
            break;
         }
         case DO_ATNUM_ATNUM:
         {
            /* ATNUM */
            PHB_ITEM pSubst = NULL;
            int iArgErrorMode = ct_getargerrormode();

            if( iArgErrorMode != CT_ARGERR_IGNORE )
            {
               pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_ATNUM,
                                        NULL, "ATNUM", 0, EF_CANSUBSTITUTE,
                                        HB_ERR_ARGS_BASEPARAMS );
            }

            if( pSubst != NULL )
               hb_itemReturnRelease( pSubst );
            else
               hb_retni( 0 );
            break;
         }
      }
   }
}
atnum.c65
HB_FUNCAFTERATNUM(void)
HB_FUNC( AFTERATNUM )
{
   do_atnum( DO_ATNUM_AFTERATNUM );
}
atnum.c370
HB_FUNCBEFORATNUM(void)
HB_FUNC( BEFORATNUM )
{
   do_atnum( DO_ATNUM_BEFORATNUM );
}
atnum.c432
HB_FUNCATNUM(void)
HB_FUNC( ATNUM )
{
   do_atnum( DO_ATNUM_ATNUM );
}
atnum.c493
atrepl.c
TypeFunctionSourceLine
HB_FUNCATREPL(void)
HB_FUNC( ATREPL )
{
   if( ISCHAR( 1 ) && ISCHAR( 2 ) )
   {
      char *pcStringToMatch = hb_parc( 1 );
      size_t sStrToMatchLen = ( size_t ) hb_parclen( 1 );
      char *pcString = hb_parc( 2 );
      size_t sStrLen = ( size_t ) hb_parclen( 2 );
      int iMultiPass = ct_getatmupa();
      int iAtLike = ct_getatlike();
      char cAtLike = ct_getatlikechar();
      size_t sIgnore, sMatchStrLen = 0;
      ULONG ulCounter;
      char *pc;

      const char *pcReplacement;
      size_t sReplaceLen;
      int iReplaceMode;
      char *pcRetStr;
      size_t sRetStrLen;

      /* eventually ignore some characters */
      if( ISNUM( 6 ) )
         sIgnore = ( size_t ) hb_parnl( 6 );
      else
         sIgnore = 0;

      if( sIgnore >= sStrLen )
      {
         int iArgErrorMode = ct_getargerrormode();

         if( iArgErrorMode != CT_ARGERR_IGNORE )
         {
            ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_ATREPL, NULL,
                      "ATREPL", 0, EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
         }
         hb_retclen( pcString, sStrLen );
         return;
      }

      /* replacement */
      if( ISCHAR( 3 ) )
      {
         pcReplacement = hb_parc( 3 );
         sReplaceLen = hb_parclen( 3 );
      }
      else
      {
         pcReplacement = "";
         sReplaceLen = 0;
      }

      /* replace mode */
      if( ISLOG( 5 ) )
         iReplaceMode = hb_parl( 5 );
      else
         iReplaceMode = 0;

      /* nth match or last match ? */
      if( ISNUM( 4 ) )
         ulCounter = hb_parnl( 4 );
      else
         ulCounter = 0;

      /* little trick: */
      if( iReplaceMode == 0 && ulCounter == 0 )
         ulCounter = ULONG_MAX;

      if( ulCounter != 0 )
      {
         /* depending on iReplaceMode: replace all occurences including the nth one
            or only the nth occurence
            NOTE: if iReplaceMode = false and the nth occurence does not exist,
            all occurences are replaced */
         char *pcRetSubStr;
         size_t sRetSubStrLen;
         ULONG ulMatchCounter = 0;

         sRetStrLen = sStrLen;
         pcRetStr = ( char * ) hb_xgrab( sRetStrLen );
         hb_xmemcpy( pcRetStr, pcString, sRetStrLen );

         pcRetSubStr = pcRetStr + sIgnore;
         sRetSubStrLen = sRetStrLen - sIgnore;

         while( ulMatchCounter < ulCounter )
         {
            switch ( iAtLike )
            {
               case CT_SETATLIKE_EXACT:
                  pc = ct_at_exact_forward( pcRetSubStr, sRetSubStrLen, pcStringToMatch,
                                            sStrToMatchLen, &sMatchStrLen );
                  break;

               case CT_SETATLIKE_WILDCARD:
                  pc = ct_at_wildcard_forward( pcRetSubStr, sRetSubStrLen, pcStringToMatch,
                                               sStrToMatchLen, cAtLike, &sMatchStrLen );
                  break;

               default:
                  pc = NULL;
            }

            if( pc == NULL )
            {
               hb_retclen( pcRetStr, sRetStrLen );
               hb_xfree( pcRetStr );
               return;
            }

            ulMatchCounter++;

            /* replace match ? */
            if( ( iReplaceMode == 0 ) || ( ulMatchCounter == ulCounter ) )
            {
               if( sMatchStrLen < sReplaceLen )
               {
                  /* pcRetStr grows, so realloc memory */
                  /* save pc pointer */
                  size_t sPCPos = pc - pcRetStr;

                  pcRetStr = ( char * ) hb_xrealloc( pcRetStr,
                                 sRetStrLen + ( sReplaceLen - sMatchStrLen ) );
                  pc = pcRetStr + sPCPos;
               }

               if( sReplaceLen != sMatchStrLen )
                  memmove( pc + sReplaceLen, pc + sMatchStrLen,
                           sRetStrLen - ( ( pc + sMatchStrLen ) - pcRetStr ) );
               if( sReplaceLen > 0 )
                  hb_xmemcpy( pc, pcReplacement, sReplaceLen );

               if( iMultiPass )
                  pcRetSubStr = pc + 1;
               else
                  pcRetSubStr = pc + sReplaceLen;

               sRetStrLen += sReplaceLen - sMatchStrLen;
            }
            else
            {
               if( iMultiPass )
                  pcRetSubStr = pc + 1;
               else
                  pcRetSubStr = pc + sMatchStrLen;
            }
            sRetSubStrLen = sRetStrLen - ( pcRetSubStr - pcRetStr );
         }
      }
      else /* ( ulCounter != 0 ) */
      {
         /* find and replace last match */
         sRetStrLen = sStrLen;
         pcRetStr = ( char * ) hb_xgrab( sRetStrLen );
         hb_xmemcpy( pcRetStr, pcString, sRetStrLen );

         /* we have to find the last match and replace it */
         switch ( iAtLike )
         {
            case CT_SETATLIKE_EXACT:
               pc = ct_at_exact_backward( pcRetStr + sIgnore, sRetStrLen - sIgnore,
                                          pcStringToMatch, sStrToMatchLen, &sMatchStrLen );
               break;

            case CT_SETATLIKE_WILDCARD:
               pc = ct_at_wildcard_backward( pcRetStr + sIgnore, sRetStrLen - sIgnore,
                                             pcStringToMatch, sStrToMatchLen,
                                             cAtLike, &sMatchStrLen );
               break;

            default:
               pc = NULL;
         }

         if( pc == NULL )
         {
            hb_retclen( pcRetStr, sRetStrLen );
            hb_xfree( pcRetStr );
            return;
         }

         /* replace match */
         if( sMatchStrLen < sReplaceLen )
         {
            /* pcRetStr grows, so realloc memory */
            /* save pc pointer */
            size_t sPCPos = pc - pcRetStr;

            pcRetStr = ( char * ) hb_xrealloc( pcRetStr,
                                 sRetStrLen + ( sReplaceLen - sMatchStrLen ) );
            pc = pcRetStr + sPCPos;
         }

         if( sReplaceLen != sMatchStrLen )
            memmove( pc + sReplaceLen, pc + sMatchStrLen,
                     sRetStrLen - ( ( pc + sMatchStrLen ) - pcRetStr ) );
         if( sReplaceLen > 0 )
            hb_xmemcpy( pc, pcReplacement, sReplaceLen );

         sRetStrLen += ( sReplaceLen - sMatchStrLen );
      }

      hb_retclen( pcRetStr, sRetStrLen );
      hb_xfree( pcRetStr );
   }
   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_ATREPL, NULL, "ATREPL", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retclen( hb_parc( 2 ), hb_parclen( 2 ) );
   }
}
atrepl.c124
bitnum.c
TypeFunctionSourceLine
STATIC BOOL__numParam( int iParam, HB_LONG * plNum )
static BOOL __numParam( int iParam, HB_LONG * plNum )
{
   char *szHex = hb_parc( iParam );

   if( szHex )
   {
      *plNum = 0;
      while( *szHex == ' ' )
         szHex++;
      while( *szHex )
      {
         char c = *szHex++;

         if( c >= '0' && c <= '9' )
            c -= '0';
         else if( c >= 'A' && c <= 'F' )
            c -= 'A' - 10;
         else if( c >= 'a' && c <= 'f' )
            c -= 'a' - 10;
         else
            break;
         *plNum = ( *plNum << 4 ) | c;
         iParam = 0;
      }
      if( !iParam )
         return TRUE;
   }
   else if( ISNUM( iParam ) )
   {
      *plNum = hb_parnint( iParam );
      return TRUE;
   }

   *plNum = -1;
   return FALSE;
}
bitnum.c59
HB_FUNCNUMAND(void)
HB_FUNC( NUMAND )
{
   int iPCount = hb_pcount(), i = 1;
   HB_LONG lValue = -1, lNext = 0;

   if( iPCount && __numParam( 1, &lValue ) )
   {
      while( --iPCount && __numParam( ++i, &lNext ) )
         lValue &= lNext;

      if( iPCount )
         lValue = -1;
   }
   hb_retnint( lValue );
}
bitnum.c96
HB_FUNCNUMOR(void)
HB_FUNC( NUMOR )
{
   int iPCount = hb_pcount(), i = 1;
   HB_LONG lValue = -1, lNext = 0;

   if( iPCount && __numParam( 1, &lValue ) )
   {
      while( --iPCount && __numParam( ++i, &lNext ) )
         lValue |= lNext;

      if( iPCount )
         lValue = -1;
   }
   hb_retnint( lValue );
}
bitnum.c112
HB_FUNCNUMXOR(void)
HB_FUNC( NUMXOR )
{
   int iPCount = hb_pcount(), i = 1;
   HB_LONG lValue = -1, lNext = 0;

   if( iPCount && __numParam( 1, &lValue ) )
   {
      while( --iPCount && __numParam( ++i, &lNext ) )
         lValue ^= lNext;

      if( iPCount )
         lValue = -1;
   }
   hb_retnint( lValue );
}
bitnum.c128
HB_FUNCNUMNOT(void)
HB_FUNC( NUMNOT )
{
   HB_LONG lValue;

   if( __numParam( 1, &lValue ) )
      lValue = ( ~lValue ) & 0xffff;

   hb_retnint( lValue );
}
bitnum.c144
HB_FUNCNUMLOW(void)
HB_FUNC( NUMLOW )
{
   HB_LONG lValue;

   if( __numParam( 1, &lValue ) )
      lValue &= 0xff;

   hb_retnint( lValue );
}
bitnum.c154
HB_FUNCNUMHIGH(void)
HB_FUNC( NUMHIGH )
{
   HB_LONG lValue;

   if( __numParam( 1, &lValue ) /* && lValue == lValue & 0xffff */  )
      lValue = ( lValue >> 8 ) & 0xff;

   hb_retnint( lValue );
}
bitnum.c164
HB_FUNCNUMROL(void)
HB_FUNC( NUMROL )
{
   HB_LONG lValue, lShift;

   if( __numParam( 1, &lValue ) && lValue == ( lValue & 0xffff ) && __numParam( 2, &lShift )
       && lShift == ( lShift & 0xffff ) )
   {
      if( ISLOG( 3 ) && hb_parl( 3 ) )
      {
         USHORT us = ( USHORT ) ( lValue & 0xff ) << ( lShift & 0x07 );

         lValue = ( lValue & 0xff00 ) | ( us & 0xff ) | ( us >> 8 );
      }
      else
      {
         lValue <<= ( lShift & 0x0f );
         lValue = ( lValue & 0xffff ) | ( lValue >> 16 );
      }
   }
   else
      lValue = -1;

   hb_retnint( lValue );
}
bitnum.c174
HB_FUNCNUMMIRR(void)
HB_FUNC( NUMMIRR )
{
   HB_LONG lValue;

   if( __numParam( 1, &lValue ) && lValue == ( lValue & 0xffff ) )
   {
      USHORT usBits = ISLOG( 2 ) && hb_parl( 2 ) ? 8 : 16;
      USHORT usResult = ( USHORT ) ( lValue >> usBits );

      do
      {
         usResult <<= 1;
         if( lValue && 1 )
            usResult |= 1;
         lValue >>= 1;
      }
      while( --usBits );

      lValue = usResult;
   }
   else
      lValue = -1;

   hb_retnint( lValue );
}
bitnum.c200
HB_FUNCCLEARBIT(void)
HB_FUNC( CLEARBIT )
{
   int iPCount = hb_pcount(), iBit, i = 1;
   HB_LONG lValue;

   if( __numParam( 1, &lValue ) )
   {
      while( --iPCount )
      {
         iBit = hb_parni( ++i );
         if( iBit < 1 || iBit > 64 )
            break;
         lValue &= ~( ( ( HB_LONG ) 1 ) << ( iBit - 1 ) );
      }

      if( iPCount )
         lValue = -1;
   }

   hb_retnint( lValue );
}
bitnum.c226
HB_FUNCSETBIT(void)
HB_FUNC( SETBIT )
{
   int iPCount = hb_pcount(), iBit, i = 1;
   HB_LONG lValue;

   if( __numParam( 1, &lValue ) )
   {
      while( --iPCount )
      {
         iBit = hb_parni( ++i );
         if( iBit < 1 || iBit > 64 )
            break;
         lValue |= ( ( HB_LONG ) 1 ) << ( iBit - 1 );
      }

      if( iPCount )
         lValue = -1;
   }

   hb_retnint( lValue );
}
bitnum.c248
HB_FUNCISBIT(void)
HB_FUNC( ISBIT )
{
   HB_LONG lValue;

   if( __numParam( 1, &lValue ) )
   {
      int iBit = hb_parni( 2 );

      if( iBit )
         --iBit;
      lValue &= ( ( HB_LONG ) 1 ) << iBit;
   }
   else
      lValue = 0;

   hb_retl( lValue != 0 );
}
bitnum.c270
HB_FUNCINTNEG(void)
HB_FUNC( INTNEG )
{
   HB_LONG lValue;

   if( __numParam( 1, &lValue ) )
   {
      BOOL f32Bit = ISLOG( 2 ) && hb_parl( 2 );

      if( f32Bit )
         hb_retnint( ( INT16 ) lValue );
      else
         hb_retnint( ( INT32 ) lValue );
   }
   else
      hb_retni( 0 );
}
bitnum.c288
HB_FUNCINTPOS(void)
HB_FUNC( INTPOS )
{
   HB_LONG lValue;

   if( __numParam( 1, &lValue ) )
   {
      BOOL f32Bit = ISLOG( 2 ) && hb_parl( 2 );

      if( f32Bit )
         hb_retnint( ( UINT16 ) lValue );
      else
#ifndef HB_LONG_LONG_OFF
         hb_retnint( ( UINT32 ) lValue );
#else
         hb_retnlen( ( UINT32 ) lValue, 0, 0 );
#endif
   }
   else
      hb_retni( 0 );
}
bitnum.c305
charevod.c
TypeFunctionSourceLine
STATIC VOIDdo_charevod( int iSwitch )
static void do_charevod( int iSwitch )
{
   if( ISCHAR( 1 ) )
   {
      char *pcString = hb_parc( 1 );
      size_t sLen = hb_parclen( 1 );
      char *pcResult;
      size_t sPos, sResultPos;

      if( sLen == 0 )
      {
         int iArgErrorMode = ct_getargerrormode();

         if( iArgErrorMode != CT_ARGERR_IGNORE )
         {
            ct_error( ( USHORT ) iArgErrorMode, EG_ARG,
                      iSwitch == DO_CHAREVOD_CHAREVEN ?
                      CT_ERROR_CHAREVEN : CT_ERROR_CHARODD,
                      NULL, HB_ERR_FUNCNAME, 0, EF_CANDEFAULT,
                      HB_ERR_ARGS_BASEPARAMS );
         }
         hb_retc( NULL );
         return;
      }

      pcResult = ( char * ) hb_xgrab( ( sLen + 1 ) / 2 );

      if( iSwitch == DO_CHAREVOD_CHAREVEN )
         sPos = 1;
      else
         sPos = 0;

      sResultPos = 0;
      for( ; sPos < sLen; sPos += 2 )
         pcResult[sResultPos++] = pcString[sPos];

      if( sResultPos == 0 )
         hb_retc( NULL );
      else
         hb_retclen( pcResult, sResultPos );

      hb_xfree( pcResult );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  iSwitch == DO_CHAREVOD_CHAREVEN ?
                                  CT_ERROR_CHAREVEN : CT_ERROR_CHARODD, NULL,
                                  HB_ERR_FUNCNAME, 0, EF_CANSUBSTITUTE,
                                  HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retc( NULL );
   }
}
charevod.c65
HB_FUNCCHAREVEN(void)
HB_FUNC( CHAREVEN )
{
   do_charevod( DO_CHAREVOD_CHAREVEN );
}
charevod.c167
HB_FUNCCHARODD(void)
HB_FUNC( CHARODD )
{
   do_charevod( DO_CHAREVOD_CHARODD );
}
charevod.c208
charlist.c
TypeFunctionSourceLine
STATIC VOIDdo_list( int iSwitch )
static void do_list( int iSwitch )
{
   const char *pcString;
   size_t sStrLen;

   size_t asCharCnt[256];
   size_t sCnt;

   /* init asCharCnt */
   for( sCnt = 0; sCnt < 256; sCnt++ )
   {
      asCharCnt[sCnt] = 0;
   }

   /* init params */
   if( ISCHAR( 1 ) )
   {
      pcString = hb_parc( 1 );
      sStrLen = ( size_t ) hb_parclen( 1 );
   }
   else
   {
      pcString = "";
      sStrLen = 0;
   }

   /* count characters */
   if( iSwitch == DO_LIST_CHARLIST )
   {
      char pcRet[256];
      size_t sRetStrLen = 0;

      for( sCnt = 0; sCnt < sStrLen; sCnt++ )
      {
         if( asCharCnt[( size_t ) ( pcString[sCnt] )] == 0 )
         {
            pcRet[sRetStrLen++] = pcString[sCnt];
            asCharCnt[( size_t ) ( pcString[sCnt] )] = 1;
         }
      }
      hb_retclen( pcRet, sRetStrLen );
   }
   else
   {
      for( sCnt = 0; sCnt < sStrLen; sCnt++ )
      {
         size_t sIndex = ( size_t ) ( unsigned char ) ( *( pcString + sCnt ) );
         asCharCnt[sIndex] = asCharCnt[sIndex] + 1;
      }

      switch ( iSwitch )
      {
         case DO_LIST_CHARSLIST:
         {
            char *pcRet;
            size_t sRetStrLen = 0;

            pcRet = ( char * ) hb_xgrab( 256 );

            for( sCnt = 0; sCnt < 256; sCnt++ )
            {
               if( asCharCnt[sCnt] != 0 )
                  pcRet[ sRetStrLen++ ] = ( unsigned char ) sCnt;
            }

            hb_retclen( pcRet, sRetStrLen );
            hb_xfree( pcRet );
            break;
         }

         case DO_LIST_CHARNOLIST:
         {
            char *pcRet;
            size_t sRetStrLen = 0;

            pcRet = ( char * ) hb_xgrab( 256 );

            for( sCnt = 0; sCnt < 256; sCnt++ )
            {
               if( asCharCnt[sCnt] == 0 )
               {
                  *( pcRet + sRetStrLen ) = ( unsigned char ) sCnt;
                  sRetStrLen++;
               }
            }

            hb_retclen( pcRet, sRetStrLen );
            hb_xfree( pcRet );
            break;
         }
         case DO_LIST_CHARHIST:
         {
            PHB_ITEM pArray = hb_itemArrayNew( 256 );

            for( sCnt = 0; sCnt < 256; sCnt++ )
               hb_arraySetNL( pArray, sCnt + 1, asCharCnt[sCnt] );
            hb_itemReturnRelease( pArray );
            break;
         }
      }
   }
}
charlist.c67
HB_FUNCCHARLIST(void)
HB_FUNC( CHARLIST )
{
   do_list( DO_LIST_CHARLIST );
}
charlist.c210
HB_FUNCCHARSLIST(void)
HB_FUNC( CHARSLIST )
{
   do_list( DO_LIST_CHARSLIST );
}
charlist.c255
HB_FUNCCHARNOLIST(void)
HB_FUNC( CHARNOLIST )
{
   do_list( DO_LIST_CHARNOLIST );
}
charlist.c299
HB_FUNCCHARHIST(void)
HB_FUNC( CHARHIST )
{
   do_list( DO_LIST_CHARHIST );
}
charlist.c344
charmirr.c
TypeFunctionSourceLine
HB_FUNCCHARMIRR(void)
HB_FUNC( CHARMIRR )
{
   int iNoRet;

   /* suppressing return value ? */
   iNoRet = ct_getref() && ISBYREF( 1 );

   /* param check */
   if( ISCHAR( 1 ) )
   {

      char *pcString = hb_parc( 1 );
      size_t sStrLen = ( size_t ) hb_parclen( 1 );
      char *pcRet, *pc1, *pc2;
      int iDontMirrorSpaces;

      if( ISLOG( 2 ) )
         iDontMirrorSpaces = hb_parl( 2 );
      else
         iDontMirrorSpaces = 0;

      if( sStrLen == 0 )
      {
         int iArgErrorMode = ct_getargerrormode();

         if( iArgErrorMode != CT_ARGERR_IGNORE )
         {
            ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_CHARMIRR, NULL,
                      "CHARMIRR", 0, EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
         }
         if( iNoRet )
            hb_retl( 0 );
         else
            hb_retc( NULL );
         return;
      }

      pcRet = ( char * ) hb_xgrab( sStrLen + 1 );

      pc1 = pcString + sStrLen - 1;
      if( iDontMirrorSpaces )
      {
         pc2 = pcRet + sStrLen - 1;
         while( ( pc1 >= pcString ) && ( *pc1 == 0x20 ) )
         {
            *pc2 = 0x20;
            pc1--;
            pc2--;
         }
      }

      pc2 = pcRet;
      for( ; pc1 >= pcString; pc1-- )
      {
         *pc2 = *pc1;
         pc2++;
      }

      /* return string */
      if( ISBYREF( 1 ) )
         hb_storclen( pcRet, sStrLen, 1 );

      if( iNoRet )
      {
         hb_retl( 0 );
         hb_xfree( pcRet );
      }
      else
         hb_retclen_buffer( pcRet, sStrLen );
   }
   else /* if( 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_CHARMIRR, NULL, "CHARMIRR", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else if( iNoRet )
         hb_retl( 0 );
      else
         hb_retc( NULL );
   }
}
charmirr.c104
charmix.c
TypeFunctionSourceLine
HB_FUNCCHARMIX(void)
HB_FUNC( CHARMIX )
{
   if( ISCHAR( 1 ) )
   {
      char *pcString1 = hb_parc( 1 );
      const char *pcString2;
      char *pcResult;
      size_t sLen1 = hb_parclen( 1 );
      size_t sLen2, sPos1, sPos2, sResultPos;

      if( sLen1 == 0 )
      {
         int iArgErrorMode = ct_getargerrormode();

         if( iArgErrorMode != CT_ARGERR_IGNORE )
         {
            ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_CHARMIX, NULL, "CHARMIX", 0,
                      EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
         }
         hb_retc( NULL );
         return;
      }

      if( ISCHAR( 2 ) )
      {
         pcString2 = hb_parc( 2 );
         sLen2 = hb_parclen( 2 );
         if( sLen2 == 0 )
         {
            int iArgErrorMode = ct_getargerrormode();

            if( iArgErrorMode != CT_ARGERR_IGNORE )
            {
               ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_CHARMIX,
                         NULL, "CHARMIX", 0,
                         EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
            }
            hb_retclen( pcString1, sLen1 );
            return;
         }
      }
      else
      {
         pcString2 = " ";     /* NOTE: The original CT3 uses " " as 2nd string
                                 if the 2nd param is not a string ! */
         sLen2 = 1;
      }

      pcResult = ( char * ) hb_xgrab( sLen1 * 2 + 1 );
      sPos2 = sResultPos = 0;
      for( sPos1 = 0; sPos1 < sLen1; )
      {
         pcResult[sResultPos++] = pcString1[sPos1++];
         pcResult[sResultPos++] = pcString2[sPos2++];
         sPos2 %= sLen2;
      }

      hb_retclen_buffer( pcResult, sLen1 * 2 );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_CHARMIX, NULL, "CHARMIX", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retc( NULL );
   }
}
charmix.c111
charone.c
TypeFunctionSourceLine
STATIC VOIDdo_charone( int iSwitch )
static void do_charone( int iSwitch )
{
   char *pcString;
   size_t sStrLen;
   char *pcDeleteSet;
   size_t sDeleteSetLen;

   /* param check */
   if( ISCHAR( 1 ) )
   {
      if( ISCHAR( 2 ) )
      {
         pcString = hb_parc( 2 );
         sStrLen = ( size_t ) hb_parclen( 2 );
         pcDeleteSet = hb_parc( 1 );
         sDeleteSetLen = ( size_t ) hb_parclen( 1 );
      }
      else
      {
         pcString = hb_parc( 1 );
         sStrLen = ( size_t ) hb_parclen( 1 );
         pcDeleteSet = NULL;
         sDeleteSetLen = 0;
      }

      switch ( iSwitch )
      {
         case DO_CHARONE_CHARONE:
            if( sStrLen > 1 )
            {
               char *pcSub;
               char *pcRet;
               size_t sRetStrLen = 0;
               char cCurrent = *pcString;

               pcRet = ( char * ) hb_xgrab( sStrLen );
               /* copy first char */
               pcRet[sRetStrLen++] = cCurrent;
               for( pcSub = pcString + 1; pcSub < pcString + sStrLen; pcSub++ )
               {
                  if( *pcSub != cCurrent )
                  {
                     cCurrent = *pcSub;
                     pcRet[sRetStrLen++] = cCurrent;
                  }
                  else if( pcDeleteSet != NULL &&
                           !ct_at_exact_forward( pcDeleteSet, sDeleteSetLen,
                                                 pcSub, 1, NULL ) )
                  {
                     pcRet[sRetStrLen++] = cCurrent;
                  }
               }
               hb_retclen( pcRet, sRetStrLen );
               hb_xfree( pcRet );
            }
            else                /* if( sStrLen > 1 ) */
            {
               /* algorithm does nothing to 1-char-strings */
               hb_retclen( pcString, sStrLen );
            }
            break;

         case DO_CHARONE_WORDONE:
            if( sStrLen > 3 && sDeleteSetLen >= 2 )
            {
               char *pcSub;
               char *pcRet;
               size_t sRetStrLen = 0;
               char cCurrent1 = pcString[0];
               char cCurrent2 = pcString[1];

               pcRet = ( char * ) hb_xgrab( sStrLen );
               /* copy first double char */
               pcRet[sRetStrLen++] = cCurrent1;
               pcRet[sRetStrLen++] = cCurrent2;

               for( pcSub = pcString + 2; pcSub < pcString + sStrLen - 1; pcSub += 2 )
               {
                  if( !( pcSub[0] == cCurrent1 && pcSub[1] == cCurrent2 ) )
                  {
                     cCurrent1 = pcSub[0];
                     cCurrent2 = pcSub[1];
                     pcRet[sRetStrLen++] = cCurrent1;
                     pcRet[sRetStrLen++] = cCurrent2;
                  }
                  else if( pcDeleteSet != NULL )
                  {
                     char *pc = NULL;
                     char *pStart = pcDeleteSet;
                     size_t sLen = sDeleteSetLen;

                     while( sLen >= 2 &&
                            ( pc = ct_at_exact_forward( pStart, sLen, pcSub,
                                                        2, NULL ) ) != 0 &&
                            ( pc - pcDeleteSet ) % 2 == 1 )
                     {
                        pStart = pc + 1;
                        sLen = sDeleteSetLen - ( pStart - pcDeleteSet );
                     }
                     if( pc == NULL )
                     {
                        pcRet[sRetStrLen++] = cCurrent1;
                        pcRet[sRetStrLen++] = cCurrent2;
                     }
                  }
               }

               /* copy last character if string len is odd */
               if( sStrLen & 1 )
               {
                  pcRet[sRetStrLen++] = pcString[sStrLen - 1];
               }
               hb_retclen( pcRet, sRetStrLen );
               hb_xfree( pcRet );
            }
            else                /* if( sStrLen > 3 ) */
            {
               /* algorithm does nothing to 3-char-strings */
               hb_retclen( pcString, sStrLen );
            }
            break;
      }  /* switch( iSwitch ) */
   }
   else  /* if( ISCHAR( 1 ) ) */
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  iSwitch == DO_CHARONE_CHARONE ?
                                  CT_ERROR_CHARONE : CT_ERROR_WORDONE,
                                  NULL, HB_ERR_FUNCNAME, 0, EF_CANSUBSTITUTE,
                                  HB_ERR_ARGS_BASEPARAMS );
      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retc( NULL );
   }
}
charone.c65
HB_FUNCCHARONE(void)
HB_FUNC( CHARONE )
{
   do_charone( DO_CHARONE_CHARONE );
}
charone.c252
HB_FUNCWORDONE(void)
HB_FUNC( WORDONE )
{
   do_charone( DO_CHARONE_WORDONE );
}
charone.c299
charonly.c
TypeFunctionSourceLine
STATIC VOIDdo_charonly( int iSwitch )
static void do_charonly( int iSwitch )
{
   /* param check */
   if( ISCHAR( 1 ) && ISCHAR( 2 ) )
   {
      char *pcString = hb_parc( 2 );
      size_t sStrLen = ( size_t ) hb_parclen( 2 );
      char *pcOnlySet = hb_parc( 1 );
      size_t sOnlySetLen = ( size_t ) hb_parclen( 1 );
      char *pcRet;
      size_t sRetStrLen = 0;
      int iShift, iBool;
      char *pcSub, *pc;

      /* check for zero-length strings  */
      switch ( iSwitch )
      {
         case DO_CHARONLY_CHARONLY:
         case DO_CHARONLY_WORDONLY:
            if( ( sStrLen == 0 ) || ( sOnlySetLen == 0 ) )
            {
               hb_retc( NULL );
               return;
            }
            break;

         case DO_CHARONLY_CHARREM:
         case DO_CHARONLY_WORDREM:
            if( sStrLen == 0 )
            {
               hb_retc( NULL );
               return;
            }
            if( sOnlySetLen == 0 )
            {
               hb_retclen( pcString, sStrLen );
               return;
            }
            break;
      }

      if( iSwitch == DO_CHARONLY_WORDONLY ||
          iSwitch == DO_CHARONLY_WORDREM )
         iShift = 2;
      else
         iShift = 1;

      pcRet = ( char * ) hb_xgrab( sStrLen );

      for( pcSub = pcString; pcSub < pcString + sStrLen + 1 - iShift; pcSub += iShift )
      {
         pc = ct_at_exact_forward( pcOnlySet, sOnlySetLen, pcSub, iShift, NULL );
         iBool = ( ( pc != NULL ) && ( ( ( pc - pcOnlySet ) % iShift ) == 0 ) );
         if( iBool ? ( iSwitch == DO_CHARONLY_CHARONLY ||
                       iSwitch == DO_CHARONLY_WORDONLY )
                   : ( iSwitch == DO_CHARONLY_CHARREM ||
                       iSwitch == DO_CHARONLY_WORDREM ) )
         {
            for( pc = pcSub; pc < pcSub + iShift; pc++ )
               pcRet[sRetStrLen++] = *pc;
         }
      }

      /* copy last character if string len is odd */
      if( iShift == 2 && sStrLen % 2 == 1 )
      {
         pcRet[sRetStrLen++] = pcString[sStrLen - 1];
      }
      hb_retclen( pcRet, sRetStrLen );
      hb_xfree( pcRet );
   }
   else                         /* if (ISCHAR (1) && ISCHAR (2)) */
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode(), iError = 0;

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         switch ( iSwitch )
         {
            case DO_CHARONLY_CHARONLY:
               iError = CT_ERROR_CHARONLY;
               break;

            case DO_CHARONLY_WORDONLY:
               iError = CT_ERROR_WORDONLY;
               break;

            case DO_CHARONLY_CHARREM:
               iError = CT_ERROR_CHARREM;
               break;

            case DO_CHARONLY_WORDREM:
               iError = CT_ERROR_WORDREM;
               break;
         }
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG, iError,
                                  NULL, HB_ERR_FUNCNAME, 0, EF_CANSUBSTITUTE,
                                  HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retc( NULL );
   }
}
charonly.c69
HB_FUNCCHARONLY(void)
HB_FUNC( CHARONLY )
{
   do_charonly( DO_CHARONLY_CHARONLY );
}
charonly.c218
HB_FUNCWORDONLY(void)
HB_FUNC( WORDONLY )
{
   do_charonly( DO_CHARONLY_WORDONLY );
}
charonly.c263
HB_FUNCCHARREM(void)
HB_FUNC( CHARREM )
{
   do_charonly( DO_CHARONLY_CHARREM );
}
charonly.c307
HB_FUNCWORDREM(void)
HB_FUNC( WORDREM )
{
   do_charonly( DO_CHARONLY_WORDREM );
}
charonly.c352
charop.c
TypeFunctionSourceLine
STATIC VOIDdo_charop( int iSwitch )
static void do_charop( int iSwitch )
{

   int iNoRet;

   /* suppressing return value ? */
   iNoRet = ct_getref() && ISBYREF( 1 );

   if( ISCHAR( 1 ) )
   {

      size_t sStrLen = hb_parclen( 1 );
      size_t sPos;
      unsigned char *pucString = ( unsigned char * ) hb_parc( 1 );
      unsigned char *pucResult;

      if( sStrLen == 0 )
      {
         if( iNoRet )
         {
            hb_ret();
         }
         else
         {
            hb_retc( NULL );
         }
         return;
      }

      pucResult = ( unsigned char * ) hb_xgrab( sStrLen + 1 );

      switch ( iSwitch )
      {
         /* NOT */
         case DO_CHAROP_CHARNOT:
            for( sPos = 0; sPos < sStrLen; sPos++ )
               pucResult[sPos] = ~pucString[sPos];
            break;

         /* SHL */
         case DO_CHAROP_CHARSHL:
         {
            int iSHL = ( hb_parni( 2 ) ) % 8;   /* defaults to 0 */

            if( iSHL == 0 )
               hb_xmemcpy( pucResult, pucString, sStrLen );
            else
               for( sPos = 0; sPos < sStrLen; sPos++ )
                  pucResult[sPos] = pucString[sPos] << iSHL;
            break;
         }

         /* SHR */
         case DO_CHAROP_CHARSHR:
         {
            int iSHR = ( hb_parni( 2 ) ) % 8;   /* defaults to 0 */

            if( iSHR == 0 )
               hb_xmemcpy( pucResult, pucString, sStrLen );
            else
               for( sPos = 0; sPos < sStrLen; sPos++ )
                  pucResult[sPos] = pucString[sPos] >> iSHR;
            break;
         }

         /* RLL */
         case DO_CHAROP_CHARRLL:
         {
            int iRLL = ( hb_parni( 2 ) ) % 8;   /* defaults to 0 */

            hb_xmemcpy( pucResult, pucString, sStrLen );

            if( iRLL != 0 )
               for( sPos = 0; sPos < sStrLen; sPos++ )
               {
                  int iRLLCnt;

                  for( iRLLCnt = 0; iRLLCnt < iRLL; iRLLCnt++ )
                     if( pucResult[sPos] & 0x80 )  /* most left bit set -> roll over */
                     {
                        pucResult[sPos] <<= 1;
                        pucResult[sPos] |= 0x01;
                     }
                     else
                     {
                        pucResult[sPos] <<= 1;
                     }
               }
            break;
         }

         /* RLR */
         case DO_CHAROP_CHARRLR:
         {
            int iRLR = ( hb_parni( 2 ) ) % 8;   /* defaults to 0 */

            hb_xmemcpy( pucResult, pucString, sStrLen );

            if( iRLR != 0 )
               for( sPos = 0; sPos < sStrLen; sPos++ )
               {
                  int iRLRCnt;

                  for( iRLRCnt = 0; iRLRCnt < iRLR; iRLRCnt++ )
                     if( pucResult[sPos] & 0x01 )  /* most right bit set -> roll over */
                     {
                        pucResult[sPos] >>= 1;
                        pucResult[sPos] |= 0x80;
                     }
                     else
                     {
                        pucResult[sPos] >>= 1;
                     }
               }
            break;
         }

         /* ADD */
         case DO_CHAROP_CHARADD:
         {
            if( ISCHAR( 2 ) )
            {
               char *pucString2 = hb_parc( 2 );
               size_t sStrLen2 = hb_parclen( 2 );

               for( sPos = 0; sPos < sStrLen; sPos++ )
                  pucResult[sPos] = ( char ) ( pucString[sPos] + pucString2[sPos % sStrLen2] );
            }
            else
            {
               int iArgErrorMode = ct_getargerrormode();

               if( iArgErrorMode != CT_ARGERR_IGNORE )
               {
                  ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_CHARADD,
                            NULL, "CHARADD", 0,
                            EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
               }
               hb_xmemcpy( pucResult, pucString, sStrLen );
            }
            break;
         }

         /* SUB */
         case DO_CHAROP_CHARSUB:
         {
            if( ISCHAR( 2 ) )
            {
               char *pucString2 = hb_parc( 2 );
               size_t sStrLen2 = hb_parclen( 2 );

               for( sPos = 0; sPos < sStrLen; sPos++ )
                  pucResult[sPos] = ( char ) ( pucString[sPos] - pucString2[sPos % sStrLen2] );
            }
            else
            {
               int iArgErrorMode = ct_getargerrormode();

               if( iArgErrorMode != CT_ARGERR_IGNORE )
               {
                  ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_CHARSUB,
                            NULL, "CHARSUB", 0,
                            EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
               }
               hb_xmemcpy( pucResult, pucString, sStrLen );
            }
            break;
         }

         /* AND */
         case DO_CHAROP_CHARAND:
         {
            if( ISCHAR( 2 ) )
            {
               char *pucString2 = hb_parc( 2 );
               size_t sStrLen2 = hb_parclen( 2 );

               for( sPos = 0; sPos < sStrLen; sPos++ )
                  pucResult[sPos] = ( char ) ( pucString[sPos] & pucString2[sPos % sStrLen2] );
            }
            else
            {
               int iArgErrorMode = ct_getargerrormode();

               if( iArgErrorMode != CT_ARGERR_IGNORE )
               {
                  ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_CHARAND, NULL, "CHARAND", 0,
                            EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
               }
               hb_xmemcpy( pucResult, pucString, sStrLen );
            }
            break;
         }

         /* OR */
         case DO_CHAROP_CHAROR:
         {
            if( ISCHAR( 2 ) )
            {
               char *pucString2 = hb_parc( 2 );
               size_t sStrLen2 = hb_parclen( 2 );

               for( sPos = 0; sPos < sStrLen; sPos++ )
                  pucResult[sPos] = ( char ) ( pucString[sPos] | pucString2[sPos % sStrLen2] );
            }
            else
            {
               int iArgErrorMode = ct_getargerrormode();

               if( iArgErrorMode != CT_ARGERR_IGNORE )
               {
                  ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_CHAROR, NULL, "CHAROR", 0,
                            EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
               }
               hb_xmemcpy( pucResult, pucString, sStrLen );
            }
            break;
         }

         /* XOR */
         case DO_CHAROP_CHARXOR:
         {
            if( ISCHAR( 2 ) )
            {
               char *pucString2 = hb_parc( 2 );
               size_t sStrLen2 = hb_parclen( 2 );

               for( sPos = 0; sPos < sStrLen; sPos++ )
                  pucResult[sPos] = ( char ) ( pucString[sPos] ^ pucString2[sPos % sStrLen2] );
            }
            else
            {
               int iArgErrorMode = ct_getargerrormode();

               if( iArgErrorMode != CT_ARGERR_IGNORE )
               {
                  ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_CHARXOR, NULL, "CHARXOR", 0,
                            EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
               }
               hb_xmemcpy( pucResult, pucString, sStrLen );
            }
            break;
         }
      }  /* endswitch( iSwitch ) */

      if( ISBYREF( 1 ) )
         hb_storclen( ( char * ) pucResult, sStrLen, 1 );

      if( iNoRet )
         hb_xfree( pucResult );
      else
         hb_retclen_buffer( ( char * ) pucResult, sStrLen );
   }
   else  /* if( ISCHAR( 1 ) ) */
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode(), iError = 0;

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         switch ( iSwitch )
         {
            case DO_CHAROP_CHARADD:
               iError = CT_ERROR_CHARADD;
               break;

            case DO_CHAROP_CHARSUB:
               iError = CT_ERROR_CHARSUB;
               break;

            case DO_CHAROP_CHARAND:
               iError = CT_ERROR_CHARAND;
               break;

            case DO_CHAROP_CHARNOT:
               iError = CT_ERROR_CHARNOT;
               break;

            case DO_CHAROP_CHAROR:
               iError = CT_ERROR_CHAROR;
               break;

            case DO_CHAROP_CHARXOR:
               iError = CT_ERROR_CHARXOR;
               break;

            case DO_CHAROP_CHARSHL:
               iError = CT_ERROR_CHARSHL;
               break;

            case DO_CHAROP_CHARSHR:
               iError = CT_ERROR_CHARSHR;
               break;

            case DO_CHAROP_CHARRLL:
               iError = CT_ERROR_CHARRLL;
               break;

            case DO_CHAROP_CHARRLR:
               iError = CT_ERROR_CHARRLR;
               break;
         }
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG, iError,
                                  NULL, "CHARRLR", 0, EF_CANSUBSTITUTE,
                                  HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_ret();
   }
}
charop.c78
HB_FUNCCHARADD(void)
HB_FUNC( CHARADD )
{
   do_charop( DO_CHAROP_CHARADD );
}
charop.c444
HB_FUNCCHARSUB(void)
HB_FUNC( CHARSUB )
{
   do_charop( DO_CHAROP_CHARSUB );
}
charop.c500
HB_FUNCCHARAND(void)
HB_FUNC( CHARAND )
{
   do_charop( DO_CHAROP_CHARAND );
}
charop.c555
HB_FUNCCHARNOT(void)
HB_FUNC( CHARNOT )
{
   do_charop( DO_CHAROP_CHARNOT );
}
charop.c606
HB_FUNCCHAROR(void)
HB_FUNC( CHAROR )
{
   do_charop( DO_CHAROP_CHAROR );
}
charop.c661
HB_FUNCCHARXOR(void)
HB_FUNC( CHARXOR )
{
   do_charop( DO_CHAROP_CHARXOR );
}
charop.c714
HB_FUNCCHARSHL(void)
HB_FUNC( CHARSHL )
{
   do_charop( DO_CHAROP_CHARSHL );
}
charop.c766
HB_FUNCCHARSHR(void)
HB_FUNC( CHARSHR )
{
   do_charop( DO_CHAROP_CHARSHR );
}
charop.c818
HB_FUNCCHARRLL(void)
HB_FUNC( CHARRLL )
{
   do_charop( DO_CHAROP_CHARRLL );
}
charop.c870
HB_FUNCCHARRLR(void)
HB_FUNC( CHARRLR )
{
   do_charop( DO_CHAROP_CHARRLR );
}
charop.c922
charrepl.c
TypeFunctionSourceLine
HB_FUNCCHARREPL(void)
HB_FUNC( CHARREPL )
{
   int iNoRet;
   size_t sSearchLen, sReplaceLen;

   /* suppressing return value ? */
   iNoRet = ct_getref() && ISBYREF( 2 );

   /* param check */
   if( ( sSearchLen = ( size_t ) hb_parclen( 1 ) ) > 0 && ISCHAR( 2 ) &&
       ( sReplaceLen = ( size_t ) hb_parclen( 3 ) ) > 0 )
   {
      /* get parameters */
      char *pcSearch = hb_parc( 1 );
      char *pcString = hb_parc( 2 );
      size_t sStrLen = ( size_t ) hb_parclen( 2 );
      char *pcReplace = hb_parc( 3 );
      int iMode;
      char *pcRet;
      size_t sIndex;

      /* if sStrLen == 0, we can return immediately */
      if( sStrLen == 0 )
      {
         if( iNoRet )
         {
            hb_retl( 0 );
         }
         else
         {
            hb_retc( NULL );
         }
         return;
      }

      if( ISLOG( 4 ) )
      {
         iMode = hb_parl( 4 );
      }
      else
      {
         iMode = 0;
      }

      pcRet = ( char * ) hb_xgrab( sStrLen + 1 );
      hb_xmemcpy( pcRet, pcString, sStrLen );

      for( sIndex = 0; sIndex < sSearchLen; sIndex++ )
      {
         size_t sMatchStrLen;
         char *pc;
         size_t sReplIndex = sIndex;

         if( sReplIndex > sReplaceLen - 1 )
         {
            sReplIndex = sReplaceLen - 1;
         }

         if( iMode )
         {
            /* no multiple replacements: searching in pcString,
               replacing in pcRet     */
            pc = pcString;

            while( ( pc = ct_at_exact_forward( pc, sStrLen - ( pc - pcString ),
                                               pcSearch + sIndex, 1,
                                               &sMatchStrLen ) ) != NULL )
            {
               *( pcRet + ( pc - pcString ) ) = *( pcReplace + sReplIndex );
               pc++;
            }
         }
         else
         {
            /* multiple replacements: searching & replacing in pcRet */
            pc = pcRet;
            while( ( pc = ct_at_exact_forward( pc, sStrLen - ( pc - pcRet ),
                                               pcSearch + sIndex, 1,
                                               &sMatchStrLen ) ) != NULL )
            {
               *pc++ = *( pcReplace + sReplIndex );
            }
         }
      }

      /* return string */
      if( ISBYREF( 2 ) )
      {
         hb_storclen( pcRet, sStrLen, 2 );
      }

      if( iNoRet )
      {
         hb_retl( 0 );
         hb_xfree( pcRet );
      }
      else
      {
         hb_retclen_buffer( pcRet, sStrLen );
      }
   }
   else  /* ( ( sSearchLen = ( size_t ) hb_parclen( 1 ) ) > 0 && ISCHAR( 2 ) &&
              ( sReplaceLen = ( size_t ) hb_parclen( 3 ) ) > 0 ) */
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_CHARREPL, NULL, "CHARREPL", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else if( iNoRet )
         hb_retl( 0 );
      else if( ISCHAR( 2 ) )
         hb_retclen( hb_parc( 2 ), hb_parclen( 2 ) );
      else
         hb_retc( NULL );
   }
}
charrepl.c123
charsort.c
TypeFunctionSourceLine
_HB_DO_SORTASCEND(const void *p1, const void *p2 )
_hb_do_sortascend( const void *p1, const void *p2 )
{
   char *pc1 = ( char * ) p1;
   char *pc2 = ( char * ) p2;

   pc1 += ssElementPos;
   pc2 += ssElementPos;

   return strncmp( pc1, pc2, ssCompareLen );
}

#ifdef __IBMCPP__
int extern _LNK_CONV
#else
static int
charsort.c67
_HB_DO_SORTDESCEND(const void *p1, const void *p2 )
_hb_do_sortdescend( const void *p1, const void *p2 )
{
   char *pc1 = ( char * ) p1;
   char *pc2 = ( char * ) p2;

   pc1 += ssElementPos;
   pc2 += ssElementPos;

   return -strncmp( pc1, pc2, ssCompareLen );
}
charsort.c83
HB_FUNCCHARSORT(void)
HB_FUNC( CHARSORT )
{
   int iNoRet;

   /* suppressing return value ? */
   iNoRet = ct_getref() && ISBYREF( 1 );

   /* param check I */
   if( ISCHAR( 1 ) )
   {
      /* get parameters */
      char *pcString = hb_parc( 1 );
      char *pcRet;
      size_t sStrLen = ( size_t ) hb_parclen( 1 );
      size_t sElementLen, sIgnore, sSortLen;
      int iDescend;

      if( ISNUM( 2 ) )
         sElementLen = hb_parnl( 2 );
      else
         sElementLen = 1;

      if( ISNUM( 3 ) )
         ssCompareLen = hb_parnl( 3 );
      else
         ssCompareLen = sElementLen;

      if( ISNUM( 4 ) )
         sIgnore = hb_parnl( 4 );
      else
         sIgnore = 0;

      if( ISNUM( 5 ) )
         ssElementPos = hb_parnl( 5 );
      else
         ssElementPos = 0;

      if( ISNUM( 6 ) )
         sSortLen = hb_parnl( 6 );
      else
         sSortLen = sStrLen - sIgnore;

      if( ISLOG( 7 ) )
         iDescend = hb_parl( 7 );
      else
         iDescend = 0;

      /* param check II */
      if( sElementLen == 0 || ssCompareLen > sElementLen ||
          sIgnore + sElementLen > sStrLen ||
          ssElementPos + ssCompareLen > sElementLen ||
          sSortLen + sIgnore > sStrLen )
      {
         int iArgErrorMode = ct_getargerrormode();

         if( iArgErrorMode != CT_ARGERR_IGNORE )
         {
            ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_CHARSORT,
                      NULL, "CHARSORT", 0, EF_CANDEFAULT,
                      HB_ERR_ARGS_BASEPARAMS );
         }
         if( iNoRet )
            hb_retl( 0 );
         else
            hb_retc( NULL );
         return;
      }

      pcRet = ( char * ) hb_xgrab( sStrLen + 1 );
      hb_xmemcpy( pcRet, pcString, sStrLen );

      if( iDescend )
         qsort( pcRet + sIgnore, ( sSortLen / sElementLen ), sElementLen, _hb_do_sortdescend );
      else
         qsort( pcRet + sIgnore, ( sSortLen / sElementLen ), sElementLen, _hb_do_sortascend );

      /* return string */
      if( ISBYREF( 1 ) )
         hb_storclen( pcRet, sStrLen, 1 );

      if( iNoRet )
      {
         hb_retl( 0 );
         hb_xfree( pcRet );
      }
      else
         hb_retclen_buffer( pcRet, sStrLen );
   }
   else  /* if( 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_CHARSORT, NULL, "CHARSORT", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else if( iNoRet )
         hb_retl( 0 );
      else
         hb_retc( NULL );
   }
}
charsort.c176
charsprd.c
TypeFunctionSourceLine
HB_FUNCCHARSPREAD(void)
HB_FUNC( CHARSPREAD )
{
   ULONG ulLen = hb_parclen( 1 );

   if( ulLen == 0 )
      hb_retc( NULL );
   else
   {
      long lSize = hb_parnl( 2 );

      if( lSize < 0 || ( ULONG ) lSize <= ulLen )
         hb_itemReturn( hb_param( 1, HB_IT_ANY ) );
      else
      {
         char * szText = hb_parc( 1 ), * szDest, cDelim = ' ';
         int iTokens = 0, iRepl, iRest, iFirst, i;
         ULONG ul, ulDst, ulRest;

         if( ISCHAR( 3 ) )
            cDelim = hb_parc( 3 )[0];
         else if( ISNUM( 3 ) )
            cDelim = ( char ) hb_parni( 3 );

         for( ul = 0; ul < ulLen; ++ul )
         {
            if( szText[ul] == cDelim )
            {
               iTokens++;
               while( ul + 1 < ulLen && szText[ul + 1] == cDelim )
                  ++ul;
            }
         }
         if( iTokens == 0 )
         {
            hb_itemReturn( hb_param( 1, HB_IT_ANY ) );
         }
         else
         {
            ulRest = ( ULONG ) lSize - ulLen;
            iRepl = ulRest / iTokens;
            iRest = ulRest % iTokens;
            iFirst = ( iRest + 1 ) >> 1;
            iRest >>= 1;
            szDest = ( char * ) hb_xgrab( lSize + 1 );
            for( ulDst = ul = 0; ul < ulLen; ++ul )
            {
               szDest[ulDst++] = szText[ul];
               if( szText[ul] == cDelim )
               {
                  while( ul + 1 < ulLen && szText[ul + 1] == cDelim )
                     szDest[ulDst++] = szText[++ul];
                  i = iRepl;
                  if( iFirst )
                  {
                     --iFirst;
                     ++i;
                  }
                  else if( iTokens <= iRest )
                     ++i;
                  while( --i >= 0 )
                     szDest[ulDst++] = cDelim;
                  iTokens--;
               }
            }
            hb_retclen_buffer( szDest, lSize );
         }
      }
   }
}
charsprd.c57
charswap.c
TypeFunctionSourceLine
STATIC VOIDdo_charswap( int iSwitch )
static void do_charswap( int iSwitch )
{
   int iNoRet;

   /* suppress return value ? */
   iNoRet = ct_getref() && ISBYREF( 1 );

   /* param check */
   if( ISCHAR( 1 ) )
   {
      char *pcString = hb_parc( 1 );
      size_t sStrLen = ( size_t ) hb_parclen( 1 );
      char *pcRet;
      size_t sRetIndex = 0;
      int iShift, iMod;
      char *pcSub;

      if( sStrLen == 0 )
      {
         if( iNoRet )
            hb_ret();
         else
            hb_retc( NULL );
         return;
      }

      if( iSwitch == DO_CHARSWAP_WORDSWAP )
      {
         iShift = 4;
         if( ISLOG( 2 ) && hb_parl( 2 ) )
         {
            iSwitch = DO_CHARSWAP_WORDSWAP_CHARSWAP;
         }
      }
      else
      {
         iShift = 2;
      }

      pcRet = ( char * ) hb_xgrab( sStrLen );

      for( pcSub = pcString; pcSub < pcString + sStrLen + 1 - iShift; pcSub += iShift )
      {
         switch ( iSwitch )
         {
            case DO_CHARSWAP_WORDSWAP:
               pcRet[sRetIndex++] = pcSub[2];
               pcRet[sRetIndex++] = pcSub[3];
               pcRet[sRetIndex++] = pcSub[0];
               pcRet[sRetIndex++] = pcSub[1];
               break;

            case DO_CHARSWAP_WORDSWAP_CHARSWAP:
               pcRet[sRetIndex++] = pcSub[3];
               pcRet[sRetIndex++] = pcSub[2];
               /* no 'break' here !! */
            case DO_CHARSWAP_CHARSWAP:
               pcRet[sRetIndex++] = pcSub[1];
               pcRet[sRetIndex++] = pcSub[0];
         }
      }

      /* copy rest of string */
      if( ( iSwitch == DO_CHARSWAP_WORDSWAP ) || ( iSwitch == DO_CHARSWAP_WORDSWAP_CHARSWAP ) )
      {
         iMod = sStrLen % 4;
      }
      else
      {
         iMod = sStrLen % 2;
      }

      for( pcSub = pcString + sStrLen - iMod; pcSub < pcString + sStrLen; pcSub++ )
      {
         pcRet[sRetIndex++] = *pcSub;
      }

      /* return string */
      if( ISBYREF( 1 ) )
      {
         hb_storclen( pcRet, sRetIndex, 1 );
      }

      if( iNoRet )
         hb_retl( 0 );
      else
         hb_retclen( pcRet, sRetIndex );
      hb_xfree( pcRet );
   }
   else                         /* if (ISCHAR (1)) */
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         if( iSwitch == DO_CHARSWAP_CHARSWAP )
         {
            pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                     CT_ERROR_CHARSWAP,
                                     NULL, "CHARSWAP", 0, EF_CANSUBSTITUTE,
                                     HB_ERR_ARGS_BASEPARAMS );
         }
         else
         {
            pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                     CT_ERROR_WORDSWAP,
                                     NULL, "WORDSWAP", 0, EF_CANSUBSTITUTE,
                                     HB_ERR_ARGS_BASEPARAMS );
         }
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else if( iNoRet )
         hb_retl( 0 );
      else
         hb_retc( NULL );
   }
}
charswap.c66
HB_FUNCCHARSWAP(void)
HB_FUNC( CHARSWAP )
{
   do_charswap( DO_CHARSWAP_CHARSWAP );
}
charswap.c227
HB_FUNCWORDSWAP(void)
HB_FUNC( WORDSWAP )
{
   do_charswap( DO_CHARSWAP_WORDSWAP );
}
charswap.c277
color.c
TypeFunctionSourceLine
HB_FUNCINVERTATTR(void)
HB_FUNC( INVERTATTR )
{
   int iAttr;

   if( ISCHAR( 1 ) )
   {
      iAttr = hb_gtColorToN( hb_parc( 1 ) );
      if( iAttr == -1 )
         iAttr = 0;
   }
   else
      iAttr = hb_parni( 1 );

   hb_retni( ( iAttr & 0x88 ) |
             ( ( iAttr & 0x07 ) << 4 ) |
             ( ( iAttr >> 4 ) & 0x07 ) );
}
color.c85
HB_FUNCCOLORTON(void)
HB_FUNC( COLORTON )
{
   if( ISCHAR( 1 ) )
   {
      int iColor = hb_gtColorToN( hb_parc( 1 ) );
      hb_retni( iColor == -1 ? 0 : iColor );
   }
   else
      hb_retni( hb_parni( 1 ) );
}
color.c142
HB_FUNCNTOCOLOR(void)
HB_FUNC( NTOCOLOR )
{
   char szColorString[ 10 ];
   int iColor;

   iColor = ISNUM( 1 ) ? hb_parni( 1 ) : -1;

   if( iColor >= 0x00 && iColor <= 0xff )
   {
      if( ISLOG( 2 ) && hb_parl( 2 ) )
         hb_gtColorsToString( &iColor, 1, szColorString, 10 );
      else
         snprintf( szColorString, 10, "%02d/%02d", iColor & 0x0f, iColor >> 4 );
      hb_retc( szColorString );
   }
   else
      hb_retc( NULL );
}
color.c194
HB_FUNCENHANCED(void)
HB_FUNC( ENHANCED )
{
   hb_gtColorSelect( HB_CLR_ENHANCED );
   hb_retc( NULL );
}
color.c242
HB_FUNCSTANDARD(void)
HB_FUNC( STANDARD )
{
   hb_gtColorSelect( HB_CLR_STANDARD );
   hb_retc( NULL );
}
color.c277
HB_FUNCUNSELECTED(void)
HB_FUNC( UNSELECTED )
{
   hb_gtColorSelect( HB_CLR_UNSELECTED );
   hb_retc( NULL );
}
color.c312
count.c
TypeFunctionSourceLine
STATIC VOIDdo_count( int iSwitch )
static void do_count( int iSwitch )
{
   /* param check */
   if( ISCHAR( 1 ) )
   {
      char *pcString = hb_parc( 1 );
      size_t sStrLen = ( size_t ) hb_parclen( 1 );
      size_t sRetVal;
      char *pc;
      char cSearch;

      if( hb_parclen( 2 ) > 0 )
         cSearch = *( hb_parc( 2 ) );
      else if( ISNUM( 2 ) )
         cSearch = ( char ) ( hb_parnl( 2 ) % 256 );
      else
         cSearch = 0x20;

      sRetVal = 0;

      switch ( iSwitch )
      {
         case DO_COUNT_COUNTLEFT:
            pc = pcString;
            while( ( *pc == cSearch ) && ( pc < pcString + sStrLen ) )
            {
               sRetVal++;
               pc++;
            }
            break;

         case DO_COUNT_COUNTRIGHT:
            pc = pcString + sStrLen - 1;
            while( ( *pc == cSearch ) && ( pc >= pcString ) )
            {
               sRetVal++;
               pc--;
            }
            break;
      }

      hb_retnl( sRetVal );
   }
   else  /* if( ISCHAR( 1 ) ) */
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  iSwitch == DO_COUNT_COUNTLEFT ?
                                  CT_ERROR_COUNTLEFT : CT_ERROR_COUNTRIGHT,
                                  NULL, HB_ERR_FUNCNAME, 0, EF_CANSUBSTITUTE,
                                  HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retni( 0 );
   }
}
count.c61
HB_FUNCCOUNTLEFT(void)
HB_FUNC( COUNTLEFT )
{
   do_count( DO_COUNT_COUNTLEFT );
}
count.c155
HB_FUNCCOUNTRIGHT(void)
HB_FUNC( COUNTRIGHT )
{
   do_count( DO_COUNT_COUNTRIGHT );
}
count.c189
ctc.c
TypeFunctionSourceLine
USHORTct_error( USHORT uiSeverity, ULONG ulGenCode, ULONG ulSubCode, const char *szDescription, const char *szOperation, USHORT uiOsCode, USHORT uiFlags, ULONG ulArgCount, ... )
USHORT ct_error( USHORT uiSeverity, ULONG ulGenCode, ULONG ulSubCode,
                 const char *szDescription, const char *szOperation, USHORT uiOsCode, USHORT uiFlags, ULONG ulArgCount, ... )
{
   USHORT uiAction;
   PHB_ITEM pError;

   PHB_ITEM pArray;
   va_list va;
   ULONG ulArgPos;

   HB_TRACE( HB_TR_DEBUG, ( "ct_error(%hu, %lu, %lu, %s, %s, %hu, %hu, %lu)",
             uiSeverity, ulGenCode, ulSubCode, szDescription, szOperation, uiOsCode, uiFlags, ulArgCount ) );

   pError = hb_errRT_New( uiSeverity, CT_SUBSYSTEM, ulGenCode, ulSubCode, szDescription, szOperation, uiOsCode, uiFlags );

   /* Build the array from the passed arguments. */
   if( ulArgCount == 0 )
   {
      pArray = NULL;
   }
   else if( ulArgCount == HB_ERR_ARGS_BASEPARAMS )
   {
      if( hb_pcount() == 0 )
         pArray = NULL;
      else
         pArray = hb_arrayBaseParams();
   }
   else if( ulArgCount == HB_ERR_ARGS_SELFPARAMS )
   {
      pArray = hb_arraySelfParams();
   }
   else
   {
      pArray = hb_itemArrayNew( ulArgCount );

      va_start( va, ulArgCount );
      for( ulArgPos = 1; ulArgPos <= ulArgCount; ulArgPos++ )
      {
         hb_itemArrayPut( pArray, ulArgPos, va_arg( va, PHB_ITEM ) );
      }
      va_end( va );
   }

   if( pArray )
   {
      /* Assign the new array to the object data item. */
      hb_vmPushSymbol( hb_dynsymGetSymbol( "_ARGS" ) );
      hb_vmPush( pError );
      hb_vmPush( pArray );
      hb_vmSend( 1 );

      /* Release the Array. */
      hb_itemRelease( pArray );
   }

   /* launch error codeblock */
   uiAction = hb_errLaunch( pError );

   /* release error codeblock */
   hb_errRelease( pError );

   return uiAction;
}
ctc.c60
PHB_ITEMct_error_subst( USHORT uiSeverity, ULONG ulGenCode, ULONG ulSubCode, const char *szDescription, const char *szOperation, USHORT uiOsCode, USHORT uiFlags, ULONG ulArgCount, ... )
PHB_ITEM ct_error_subst( USHORT uiSeverity, ULONG ulGenCode, ULONG ulSubCode,
                         const char *szDescription, const char *szOperation, USHORT uiOsCode, USHORT uiFlags, ULONG ulArgCount, ... )
{
   PHB_ITEM pRetVal;
   PHB_ITEM pError;

   PHB_ITEM pArray;
   va_list va;
   ULONG ulArgPos;

   HB_TRACE( HB_TR_DEBUG, ( "ct_error_subst(%hu, %lu, %lu, %s, %s, %hu, %hu, %lu)",
             uiSeverity, ulGenCode, ulSubCode, szDescription, szOperation, uiOsCode, uiFlags, ulArgCount ) );

   pError = hb_errRT_New_Subst( uiSeverity, CT_SUBSYSTEM, ulGenCode, ulSubCode, szDescription, szOperation, uiOsCode, uiFlags );

   /* Build the array from the passed arguments. */
   if( ulArgCount == 0 )
   {
      pArray = NULL;
   }
   else if( ulArgCount == HB_ERR_ARGS_BASEPARAMS )
   {
      if( hb_pcount() == 0 )
         pArray = NULL;
      else
         pArray = hb_arrayBaseParams();
   }
   else if( ulArgCount == HB_ERR_ARGS_SELFPARAMS )
   {
      pArray = hb_arraySelfParams();
   }
   else
   {
      pArray = hb_itemArrayNew( ulArgCount );

      va_start( va, ulArgCount );
      for( ulArgPos = 1; ulArgPos <= ulArgCount; ulArgPos++ )
      {
         hb_itemArrayPut( pArray, ulArgPos, va_arg( va, PHB_ITEM ) );
      }
      va_end( va );
   }

   if( pArray )
   {
      /* Assign the new array to the object data item. */
      hb_vmPushSymbol( hb_dynsymGetSymbol( "_ARGS" ) );
      hb_vmPush( pError );
      hb_vmPush( pArray );
      hb_vmSend( 1 );

      /* Release the Array. */
      hb_itemRelease( pArray );
   }

   /* launch error codeblock */
   pRetVal = hb_errLaunchSubst( pError );
   hb_errRelease( pError );

   return pRetVal;
}


/* argument error behaviour */
static int s_iArgErrMode = CT_ARGERR_IGNORE;
ctc.c127
VOIDct_setargerrormode( int iMode )
void ct_setargerrormode( int iMode )
{
   HB_TRACE( HB_TR_DEBUG, ( "ct_setargerrormode(%i)", iMode ) );
   s_iArgErrMode = iMode;
}
ctc.c195
INTct_getargerrormode( void )
int ct_getargerrormode( void )
{
   HB_TRACE( HB_TR_DEBUG, ( "ct_getargerrormode()" ) );
   return s_iArgErrMode;
}
ctc.c201
HB_FUNCCSETARGERR(void)
HB_FUNC( CSETARGERR )
{
   hb_retni( ct_getargerrormode() );

   if( ISNUM( 1 ) )
   {
      int iNewMode = hb_parni( 1 );

      if( iNewMode == CT_ARGERR_WHOCARES ||
          iNewMode == CT_ARGERR_WARNING ||
          iNewMode == CT_ARGERR_ERROR ||
          iNewMode == CT_ARGERR_CATASTROPHIC ||
          iNewMode == CT_ARGERR_IGNORE )
      {
         ct_setargerrormode( hb_parni( 1 ) );
      }
      else
      {
         int iArgErrorMode = ct_getargerrormode();

         if( iArgErrorMode != CT_ARGERR_IGNORE )
         {
            ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_CSETARGERR,
                      NULL, "CSETARGERR", 0, EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
         }
      }
   }
   else if( hb_pcount() > 0 ) /* more than one param but not integer */
   {
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_CSETARGERR, NULL,
                   "CSETARGERR", 0, EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
      }
   }
}


static int s_initialized = 0;   /* TODO: make this thread safe */
ctc.c247
HB_FUNCCTCINIT(void)
HB_FUNC( CTCINIT )
{
   if( s_initialized == 0 )
   {
      int iSuccess;

      iSuccess = ct_str_init();
      iSuccess |= ct_math_init();
      s_initialized = iSuccess;
   }
   hb_retl( s_initialized );
}
ctc.c321
HB_FUNCCTCEXIT(void)
HB_FUNC( CTCEXIT )
{
   ct_str_exit();
   ct_math_exit();
   s_initialized = 0;
   hb_ret();
}
ctc.c366
ctchksum.c
TypeFunctionSourceLine
HB_FUNCCHECKSUM(void)
HB_FUNC( CHECKSUM )
{
   UCHAR *pbyString = ( UCHAR * ) hb_parc( 1 );
   ULONG ulLen = hb_parclen( 1 );
   ULONG ulPos;
   ULONG ulResult = 0;

   for( ulPos = 0; ulPos < ulLen; ulPos++ )
      ulResult += pbyString[ulPos] | ( pbyString[ulPos + 1] << 8 );

   hb_retnint( ( ULONG ) ( ( ulResult & 0x00FFFFFF ) | ( ( ulLen & 0xFF ) << 24 ) ) );
}
ctchksum.c55
ctcrypt.c
TypeFunctionSourceLine
HB_FUNCCRYPT(void)
HB_FUNC( CRYPT )
{
   ULONG ulCryptLen = hb_parclen( 2 );

   if( ulCryptLen >= 2 )
   {
      BYTE *pbyCrypt = ( BYTE * ) hb_parc( 2 );
      ULONG ulCryptPos = 0;

      BYTE *pbyString = ( BYTE * ) hb_parc( 1 );
      ULONG ulStringLen = hb_parclen( 1 );
      ULONG ulStringPos;

      BYTE *pbyResult = ( BYTE * ) hb_xgrab( ulStringLen + 1 );

      USHORT uiCount2 =
         ( ( ( USHORT ) ( pbyCrypt[ulCryptPos] + ( USHORT ) ( pbyCrypt[ulCryptPos + 1] * 256 ) ) ) &
           0xFFFF ) ^ ( ( USHORT ) ulCryptLen & 0xFFFF );
      USHORT uiCount1 = 0xAAAA;

      for( ulStringPos = 0; ulStringPos < ulStringLen; )
      {
         USHORT uiTmpCount1 = uiCount1;
         USHORT uiTmpCount2 = uiCount2;
         BYTE byte = pbyString[ulStringPos] ^ pbyCrypt[ulCryptPos++];
         USHORT tmp;

         uiTmpCount2 =
            HB_MKUSHORT( ( HB_LOBYTE( uiTmpCount2 ) ^ HB_HIBYTE( uiTmpCount2 ) ),
                         HB_HIBYTE( uiTmpCount2 ) );

         for( tmp = HB_LOBYTE( uiTmpCount2 ); tmp; tmp-- )
            uiTmpCount2 = ( uiTmpCount2 >> 1 ) | ( ( uiTmpCount2 & 1 ) << 15 );

         uiTmpCount2 ^= uiTmpCount1;
         uiTmpCount2 += 16;

         uiCount2 = uiTmpCount2;

         uiTmpCount2 &= 0x1E;
         uiTmpCount2 += 2;

         do
         {
            BYTE byTmp;

            uiTmpCount2--;

            for( tmp = HB_LOBYTE( uiTmpCount2 ); tmp; tmp-- )
               uiTmpCount1 = ( uiTmpCount1 >> 1 ) | ( ( uiTmpCount1 & 1 ) << 15 );

            uiTmpCount1 = HB_MKUSHORT( HB_HIBYTE( uiTmpCount1 ), HB_LOBYTE( uiTmpCount1 ) );
            uiTmpCount1 =
               HB_MKUSHORT( ( HB_LOBYTE( uiTmpCount1 ) ^ 0xFF ), HB_HIBYTE( uiTmpCount1 ) );
            uiTmpCount1 = ( uiTmpCount1 << 1 ) | ( ( uiTmpCount1 & 0x8000 ) >> 15 );
            uiTmpCount1 ^= 0xAAAA;

            byTmp = HB_LOBYTE( uiTmpCount1 );
            byTmp = ( byTmp << 1 ) | ( ( byTmp & 0x80 ) >> 7 );

            uiTmpCount1 = HB_MKUSHORT( byTmp, HB_HIBYTE( uiTmpCount1 ) );

         }
         while( --uiTmpCount2 );

         uiCount1 = uiTmpCount1;

         pbyResult[ulStringPos++] = byte ^ HB_LOBYTE( uiTmpCount1 );

         if( ulCryptPos == ulCryptLen )
            ulCryptPos = 0;
      }

      hb_retclen_buffer( ( char * ) pbyResult, ulStringLen );
   }
   else
      hb_retc( NULL );
}
ctcrypt.c55
ctmath.c
TypeFunctionSourceLine
INTct_math_init( void )
/* ---------------- */
int ct_math_init( void )
{
   HB_TRACE( HB_TR_DEBUG, ( "ct_math_init()" ) );
   return 1;
}
ctmath.c57
INTct_math_exit( void )
int ct_math_exit( void )
{
   HB_TRACE( HB_TR_DEBUG, ( "ct_math_exit()" ) );
   return 1;
}

/* ---------------- */
static int s_ct_precision = 16; /* TODO: make this thread safe */
ctmath.c66
VOIDct_setprecision( int iPrecision )
void ct_setprecision( int iPrecision )
{
   HB_TRACE( HB_TR_DEBUG, ( "ct_setprecision (%i)", iPrecision ) );
   s_ct_precision = iPrecision;
}
ctmath.c77
INTct_getprecision( void )
int ct_getprecision( void )
{
   HB_TRACE( HB_TR_DEBUG, ( "ct_getprecision()" ) );
   return s_ct_precision;
}
ctmath.c83
HB_FUNCSETPREC(void)
HB_FUNC( SETPREC )
{
   int iPrec = hb_parni( 1 );

   if( iPrec >= 1 && iPrec <= 16 )
      ct_setprecision( iPrec );
   else
   {
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
         ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_SETPREC, NULL,
                   "SETPREC", 0, EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
   }
   hb_retc( NULL );
}
ctmath.c120
HB_FUNCGETPREC(void)
HB_FUNC( GETPREC )
{
   hb_retni( ct_getprecision() );
   if( hb_pcount() > 0 )
   {
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
         ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_GETPREC, NULL,
                   "GETPREC", 0, EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
   }
}
ctmath.c167
ctmath2.c
TypeFunctionSourceLine
HB_FUNCFLOOR(void)
HB_FUNC( FLOOR )
{
   if( ISNUM( 1 ) )
   {
      HB_MATH_EXCEPTION hb_exc;
      double dResult, dArg = hb_parnd( 1 );

      hb_mathResetError( &hb_exc );
      dResult = floor( dArg );
      if( hb_mathGetError( &hb_exc, "FLOOR", dArg, 0.0, dResult ) )
      {
         if( hb_exc.handled )
            hb_retndlen( hb_exc.retval, hb_exc.retvalwidth, hb_exc.retvaldec );
         else
            hb_retnlen( 0, 0, 0 );
      }
      else
         hb_retnlen( dResult, 0, 0 );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst =
            ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_FLOOR, NULL, "FLOOR", 0,
                            EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }
      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retnd( 0.0 );
   }
}
ctmath2.c104
HB_FUNCCEILING(void)
HB_FUNC( CEILING )
{
   if( ISNUM( 1 ) )
   {
      HB_MATH_EXCEPTION hb_exc;
      double dResult, dArg = hb_parnd( 1 );

      hb_mathResetError( &hb_exc );
      dResult = ceil( dArg );
      if( hb_mathGetError( &hb_exc, "CEIL", dArg, 0.0, dResult ) )
      {
         if( hb_exc.handled )
            hb_retndlen( hb_exc.retval, hb_exc.retvalwidth, hb_exc.retvaldec );
         else
            hb_retnlen( 0, 0, 0 );
      }
      else
         hb_retnlen( dResult, 0, 0 );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_CEILING, NULL, "CEILING", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }
      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retnd( 0.0 );
   }
}
ctmath2.c177
HB_FUNCSIGN(void)
HB_FUNC( SIGN )
{
   if( ISNUM( 1 ) )
   {
      double dInput = hb_parnd( 1 );
      int iResult;

      if( dInput == 0.00 )
         iResult = 0;
      else
      {
         if( dInput > 0.00 )
            iResult = 1;
         else
            iResult = -1;
      }
      hb_retni( iResult );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_SIGN, NULL, "SIGN", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }
      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retni( 0 );
   }
}
ctmath2.c253
HB_FUNCLOG10(void)
HB_FUNC( LOG10 )
{
   if( ISNUM( 1 ) )
   {
      HB_MATH_EXCEPTION hb_exc;
      double dResult, dArg = hb_parnd( 1 );

      hb_mathResetError( &hb_exc );
      dResult = log10( dArg );
      if( hb_mathGetError( &hb_exc, "LOG10", dArg, 0.0, dResult ) )
      {
         if( hb_exc.handled )
            hb_retndlen( hb_exc.retval, hb_exc.retvalwidth, hb_exc.retvaldec );
         else
         {
            /* math exception is up to the Harbour function, so do this as Clipper compatible as possible */
            switch( hb_exc.type )
            {
               case HB_MATH_ERR_SING:       /* argument to log was 0.0 */
               case HB_MATH_ERR_DOMAIN:     /* argument to log was < 0.0 */
                  hb_retndlen( -HUGE_VAL, -1, -1 );  /* return -infinity */
                  break;

               default:
                  hb_retnd( 0.0 );
                  break;
            }
         }
      }
      else
         hb_retnd( dResult );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_LOG10, NULL, "LOG10", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }
      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retni( 0 );
   }
}
ctmath2.c324
HB_FUNCFACT(void)
HB_FUNC( FACT )
{
   if( ISNUM( 1 ) )
   {
      int iInput = hb_parni( 1 );
      int i;
      double dResult = 1.0;

      if( ( iInput >= 0 ) && ( iInput < 22 ) )
      {
         for( i = 1; i <= iInput; i++ )
            dResult *= ( double ) i;
         hb_retnd( dResult );
      }
      else
         hb_retnd( -1.0 );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_FACT, NULL, "FACT", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }
      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retnd( 0.0 );
   }
}
ctmath2.c413
ctnet.c
TypeFunctionSourceLine
BOOL WINAPIWNetErrorHandler( DWORD dwErrorCode, LPSTR lpszFunction )
BOOL WINAPI WNetErrorHandler( DWORD dwErrorCode, LPSTR lpszFunction )
{
   PHB_ITEM pError;

   if( dwErrorCode != ERROR_EXTENDED_ERROR )
   {
      pError = hb_errRT_New( ES_ERROR,
                             "CT",
                             9001,
                             0,
                             "Windows Network operation failed",
                             lpszFunction, ( USHORT ) dwErrorCode, EF_NONE );
      hb_errLaunch( pError );
      hb_itemRelease( pError );
   }
   else
   {
      DWORD dwLastError, dwWNetResult;
      TCHAR lpDescription[256], lpProvider[256];
      char * szDescription, * szProvider;

      dwWNetResult = WNetGetLastError( &dwLastError, lpDescription, 256,
                                       lpProvider, 256 );

      if( dwWNetResult != NO_ERROR )
      {
         pError = hb_errRT_New( ES_ERROR, "CT", 9002, 0,
                                "WNetGetLastError failed", "see OS error",
                                ( USHORT ) dwWNetResult, EF_NONE );
         hb_errLaunch( pError );
         hb_itemRelease( pError );
         return FALSE;
      }

      szDescription = HB_TCHAR_CONVFROM( lpDescription );
      szProvider = HB_TCHAR_CONVFROM( lpProvider );
      pError = hb_errRT_New( ES_ERROR, "CT", 9003, 0,
                             szDescription, szProvider,
                             ( USHORT ) dwLastError, EF_NONE );
      HB_TCHAR_FREE( szDescription );
      HB_TCHAR_FREE( szProvider );

      hb_errLaunch( pError );
      hb_itemRelease( pError );
   }

   return TRUE;
}
ctnet.c98
STATIC BOOLhb_IsNetShared( LPSTR szLocalDevice )
static BOOL hb_IsNetShared( LPSTR szLocalDevice )
{
   TCHAR lpRemoteDevice[80];
   LPTSTR lpLocalDevice;
   DWORD cchBuff = sizeof( lpRemoteDevice ) / sizeof( TCHAR );
   DWORD dwResult;

   lpLocalDevice = HB_TCHAR_CONVTO( szLocalDevice );
   dwResult = WNetGetConnection( ( LPTSTR ) lpLocalDevice,
                                 ( LPTSTR ) lpRemoteDevice, &cchBuff );
   HB_TCHAR_FREE( lpLocalDevice );

   return dwResult == NO_ERROR;
}
ctnet.c147
HB_FUNCNETCANCEL(void)
HB_FUNC( NETCANCEL )
{
   DWORD dwResult;
   LPTSTR lpDevice = HB_TCHAR_CONVTO( hb_parcx( 1 ) );

   dwResult = WNetCancelConnection( lpDevice, TRUE ); /* FALSE = fail if exist open files or print jobs. */

   HB_TCHAR_FREE( lpDevice );
   /* TRUE = force cancel connection even if exist                                                                                                          
    *        open files or print jobs.
    */
   hb_retl( dwResult == NO_ERROR );
}
ctnet.c162
HB_FUNCNETPRINTER(void)
HB_FUNC( NETPRINTER )
{
   char * cPrn = hb_setGetCPtr( HB_SET_PRINTFILE );   /* query default local printer port. */

   if( !cPrn || !*cPrn || hb_stricmp( cPrn, "PRN" ) == 0 )
      cPrn = "LPT1";
   hb_retl( hb_IsNetShared( cPrn ) );
}
ctnet.c177
HB_FUNCNETDISK(void)
HB_FUNC( NETDISK )
{
   char cDrive[3];

   cDrive[0] = hb_parcx( 1 )[0];
   cDrive[1] = ':';
   cDrive[2] = '\0';

   hb_retl( hb_IsNetShared( cDrive ) );
}
ctnet.c187
HB_FUNCNETREDIR(void)
HB_FUNC( NETREDIR )
{
   DWORD dwResult;
   LPTSTR lpLocalDev  = HB_TCHAR_CONVTO( hb_parcx( 1 ) );
   LPTSTR lpSharedRes = HB_TCHAR_CONVTO( hb_parcx( 2 ) );
   LPTSTR lpPassword  = HB_TCHAR_CONVTO( hb_parcx( 3 ) );
   BOOL bShowError = ( ISLOG( 4 ) ? hb_parl( 4 ) : FALSE );

   if( hb_pcount() >= 3 && ISCHAR( 3 ) )
      dwResult = WNetAddConnection( lpSharedRes, lpPassword, lpLocalDev );
   else
      dwResult = WNetAddConnection( lpSharedRes, NULL, lpLocalDev );

   if( dwResult == NO_ERROR )
      hb_retl( TRUE );
   else
   {
      if( bShowError )
      {
         char szCommand[80];
         snprintf( szCommand, 80, "NETREDIR( \"%s\", \"%s\", \"%s\" )",
                   hb_parcx( 1 ), hb_parcx( 2 ), hb_parcx( 3 ) );
         WNetErrorHandler( dwResult, szCommand );
      }
      hb_retl( FALSE );
   }
}
ctnet.c199
HB_FUNCNETRMTNAME(void)
HB_FUNC( NETRMTNAME )
{
   TCHAR lpRemoteDevice[80];
   LPTSTR lpLocalDevice;
   DWORD cchBuff = sizeof( lpRemoteDevice ) / sizeof( TCHAR );
   DWORD dwResult;
   char *szRemoteDevice;

   lpLocalDevice = HB_TCHAR_CONVTO( hb_parcx( 1 ) );
   dwResult = WNetGetConnection( ( LPTSTR ) lpLocalDevice,
                                 ( LPTSTR ) lpRemoteDevice, &cchBuff );
   HB_TCHAR_FREE( lpLocalDevice );
   szRemoteDevice = HB_TCHAR_CONVFROM( lpRemoteDevice );
   hb_retc( dwResult == NO_ERROR ? szRemoteDevice : NULL );
   HB_TCHAR_FREE( szRemoteDevice );
}
ctnet.c227
HB_FUNCNETWORK(void)
HB_FUNC( NETWORK )
{
   DWORD dwResult;
   TCHAR lpProviderName[80];
   DWORD cchBuff = sizeof( lpProviderName ) / sizeof( TCHAR );

   dwResult = WNetGetProviderName( WNNC_NET_MSNET, lpProviderName, &cchBuff );

   if( dwResult != NO_ERROR )
   {
      dwResult = WNetGetProviderName( WNNC_NET_LANMAN, lpProviderName, &cchBuff );

      if( dwResult != NO_ERROR )
         dwResult = WNetGetProviderName( WNNC_NET_NETWARE, lpProviderName, &cchBuff );
   }

   hb_retl( dwResult == NO_ERROR );
}
ctnet.c245
HB_FUNCNNETWORK(void)
HB_FUNC( NNETWORK )
{
   DWORD dwResult;
   TCHAR lpProviderName[80];
   DWORD cchBuff = sizeof( lpProviderName ) / sizeof( TCHAR );

   dwResult = WNetGetProviderName( WNNC_NET_NETWARE, lpProviderName, &cchBuff );

   hb_retl( dwResult == NO_ERROR );
}
ctnet.c265
ctpad.c
TypeFunctionSourceLine
STATIC VOIDdo_pad( int iSwitch )
static void do_pad( int iSwitch )
{
   if( ISCHAR( 1 ) && ISNUM( 2 ) )
   {
      char *pcString = ( char * ) hb_parc( 1 );
      size_t sStrLen = ( size_t ) hb_parclen( 1 );
      char *pcRet, *pc;
      LONG lRetLen;
      size_t sRetLen;
      char cFill;

      lRetLen = hb_parnl( 2 );
      if( lRetLen <= 0 )
      {
         int iArgErrorMode = ct_getargerrormode();

         if( iArgErrorMode != CT_ARGERR_IGNORE )
         {
            ct_error( ( USHORT ) iArgErrorMode, EG_ARG,
                      iSwitch == DO_PAD_PADLEFT ?
                      CT_ERROR_PADLEFT : CT_ERROR_PADRIGHT, NULL,
                      HB_ERR_FUNCNAME, 0, EF_CANDEFAULT,
                      HB_ERR_ARGS_BASEPARAMS );
         }
         hb_retc( NULL );
         return;
      }
      sRetLen = ( size_t ) lRetLen;

      if( hb_parclen( 3 ) > 0 )
         cFill = *( hb_parc( 3 ) );
      else if( ISNUM( 3 ) )
         cFill = ( char ) ( hb_parnl( 3 ) % 256 );
      else
         cFill = 0x20;

      pcRet = ( char * ) hb_xgrab( sRetLen + 1 );

      if( iSwitch == DO_PAD_PADLEFT )
      {
         if( sRetLen > sStrLen )
         {
            /* fill with cFill */
            for( pc = pcRet; pc < pcRet + ( sRetLen - sStrLen ); pc++ )
               *pc = cFill;
            hb_xmemcpy( pcRet + ( sRetLen - sStrLen ), pcString, sStrLen );
         }
         else
         {
            hb_xmemcpy( pcRet, pcString + ( sStrLen - sRetLen ), sRetLen );
         }
      }
      else
      {
         hb_xmemcpy( pcRet, pcString, ( sRetLen < sStrLen ? sRetLen : sStrLen ) );
         if( sRetLen > sStrLen )
         {
            /* fill with cFill */
            for( pc = pcRet + sStrLen; pc < pcRet + sRetLen; pc++ )
               *pc = cFill;
         }
      }
      hb_retclen_buffer( pcRet, sRetLen );
   }
   else  /* ISCHAR( 1 ) && ISNUM( 2 ) */
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  iSwitch == DO_PAD_PADLEFT ?
                                  CT_ERROR_PADLEFT : CT_ERROR_PADRIGHT, NULL,
                                  HB_ERR_FUNCNAME, 0, EF_CANSUBSTITUTE,
                                  HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retc( NULL );
   }
}
ctpad.c61
HB_FUNCPADLEFT(void)
HB_FUNC( PADLEFT )
{
   do_pad( DO_PAD_PADLEFT );
}
ctpad.c176
HB_FUNCPADRIGHT(void)
HB_FUNC( PADRIGHT )
{
   do_pad( DO_PAD_PADRIGHT );
}
ctpad.c210
ctstr.c
TypeFunctionSourceLine
INTct_str_init( void )
/* -------------- */
int ct_str_init( void )
{
   HB_TRACE( HB_TR_DEBUG, ( "ctstr_init()" ) );
   return 1;
}
ctstr.c59
INTct_str_exit( void )
int ct_str_exit( void )
{
   HB_TRACE( HB_TR_DEBUG, ( "ctstr_exit()" ) );
   return 1;
}
ctstr.c68
CHAR ct_at_exact_forward( char *pcString, size_t sStrLen, char *pcMatch, size_t sMatchLen, size_t * psMatchStrLen )
/* -------------------------- */
char *ct_at_exact_forward( char *pcString, size_t sStrLen,
                           char *pcMatch, size_t sMatchLen, size_t * psMatchStrLen )
{

   size_t sPos;

   HB_TRACE( HB_TR_DEBUG, ( "ct_at_exact_forward (\"%s\", %u, \"%s\", %u, %p)",
                            pcString, sStrLen, pcMatch, sMatchLen, psMatchStrLen ) );

   if( ( sMatchLen == 0 ) || ( sStrLen < sMatchLen ) )
      return NULL;

   sPos = hb_strAt( pcMatch, sMatchLen, pcString, sStrLen );
   if( sPos == 0 )
   {
      return NULL;
   }
   else
   {
      if( psMatchStrLen != NULL )
         *psMatchStrLen = sMatchLen;
      return pcString + sPos - 1;
   }

}
ctstr.c75
CHAR ct_at_exact_backward( char *pcString, size_t sStrLen, char *pcMatch, size_t sMatchLen, size_t * psMatchStrLen )
/* ------------------------------------------------ */
char *ct_at_exact_backward( char *pcString, size_t sStrLen,
                            char *pcMatch, size_t sMatchLen, size_t * psMatchStrLen )
{

   size_t sIndex;
   char *pcRet;

   HB_TRACE( HB_TR_DEBUG, ( "ct_at_exact_backward (\"%s\", %u, \"%s\", %u, %p)",
                            pcString, sStrLen, pcMatch, sMatchLen, psMatchStrLen ) );

   if( ( sMatchLen == 0 ) || ( sStrLen < sMatchLen ) )
      return NULL;

   for( pcRet = pcString + sStrLen - sMatchLen; pcRet >= pcString; pcRet-- )
   {
      for( sIndex = 0; sIndex < sMatchLen; sIndex++ )
         if( *( pcRet + sIndex ) != *( pcMatch + sIndex ) )
            break;
      if( sIndex == sMatchLen )
      {
         /* last match found */
         if( psMatchStrLen != NULL )
            *psMatchStrLen = sMatchLen;
         return pcRet;
      }
   }

   return NULL;
}
ctstr.c105
CHAR ct_at_wildcard_forward( char *pcString, size_t sStrLen, char *pcMatch, size_t sMatchLen, char cWildCard, size_t * psMatchStrLen )
/* ----------------------------------- */
char *ct_at_wildcard_forward( char *pcString, size_t sStrLen,
                              char *pcMatch, size_t sMatchLen,
                              char cWildCard, size_t * psMatchStrLen )
{

   size_t sIndex;
   char *pcRet, *pcStop;

   HB_TRACE( HB_TR_DEBUG, ( "ct_at_wildcard_forward (\"%s\", %u, \"%s\", %u, \'%c\', %p)",
                            pcString, sStrLen, pcMatch, sMatchLen, cWildCard, psMatchStrLen ) );

   if( ( sMatchLen == 0 ) || ( sStrLen < sMatchLen ) )
      return NULL;

   pcStop = pcString + sStrLen - sMatchLen;
   for( pcRet = pcString; pcRet < pcStop; pcRet++ )
   {
      for( sIndex = 0; sIndex < sMatchLen; sIndex++ )
      {
         char c = *( pcMatch + sIndex );

         if( ( c != cWildCard ) && ( c != *( pcRet + sIndex ) ) )
            break;
      }
      if( sIndex == sMatchLen )
      {
         if( psMatchStrLen != NULL )
            *psMatchStrLen = sMatchLen;
         return pcRet;
      }
   }

   return NULL;
}
ctstr.c139
CHAR ct_at_wildcard_backward( char *pcString, size_t sStrLen, char *pcMatch, size_t sMatchLen, char cWildCard, size_t * psMatchStrLen )
/* --------------------------------------------------------- */
char *ct_at_wildcard_backward( char *pcString, size_t sStrLen,
                               char *pcMatch, size_t sMatchLen,
                               char cWildCard, size_t * psMatchStrLen )
{

   size_t sIndex;
   char *pcRet;

   HB_TRACE( HB_TR_DEBUG, ( "ct_at_wildcard_backward (\"%s\", %u, \"%s\", %u, \'%c\', %p)",
                            pcString, sStrLen, pcMatch, sMatchLen, cWildCard, psMatchStrLen ) );

   if( ( sMatchLen == 0 ) || ( sStrLen < sMatchLen ) )
      return NULL;

   for( pcRet = pcString + sStrLen - sMatchLen; pcRet >= pcString; pcRet-- )
   {
      for( sIndex = 0; sIndex < sMatchLen; sIndex++ )
      {
         char c = *( pcMatch + sIndex );

         if( ( c != cWildCard ) && ( c != *( pcRet + sIndex ) ) )
            break;
      }
      if( sIndex == sMatchLen )
      {
         /* last match found */
         if( psMatchStrLen != NULL )
            *psMatchStrLen = sMatchLen;
         return pcRet;
      }
   }

   return NULL;
}
ctstr.c178
CHAR ct_at_charset_forward( char *pcString, size_t sStrLen, char *pcCharSet, size_t sCharSetLen, size_t * psMatchedCharPos )
/* ------------------------------- */
char *ct_at_charset_forward( char *pcString, size_t sStrLen,
                             char *pcCharSet, size_t sCharSetLen, size_t * psMatchedCharPos )
{

   char *pcRet, *pcSet, *pcStop1, *pcStop2;

   HB_TRACE( HB_TR_DEBUG, ( "ct_at_charset_forward (\"%s\", %u, \"%s\", %u, %p)",
                            pcString, sStrLen, pcCharSet, sCharSetLen, psMatchedCharPos ) );

   *( psMatchedCharPos ) = sCharSetLen;

   if( ( sCharSetLen == 0 ) || ( sStrLen == 0 ) )
      return NULL;

   pcStop1 = pcString + sStrLen;
   pcStop2 = pcCharSet + sCharSetLen;
   for( pcRet = pcString; pcRet < pcStop1; pcRet++ )
   {
      for( pcSet = pcCharSet; pcSet < pcStop2; pcSet++ )
         if( *pcSet == *pcRet )
         {
            if( psMatchedCharPos != NULL )
               *( psMatchedCharPos ) = pcSet - pcCharSet;
            return pcRet;
         }
   }

   return NULL;
}
ctstr.c217
CHAR ct_at_charset_backward( char *pcString, size_t sStrLen, char *pcCharSet, size_t sCharSetLen, size_t * psMatchedCharPos )
/* ----------------------------------------------------- */
char *ct_at_charset_backward( char *pcString, size_t sStrLen,
                              char *pcCharSet, size_t sCharSetLen, size_t * psMatchedCharPos )
{

   char *pcRet, *pcSet, *pcStop;

   HB_TRACE( HB_TR_DEBUG, ( "ct_at_charset_backward (\"%s\", %u, \"%s\", %u, %p)",
                            pcString, sStrLen, pcCharSet, sCharSetLen, psMatchedCharPos ) );

   *( psMatchedCharPos ) = sCharSetLen;

   if( ( sCharSetLen == 0 ) || ( sStrLen == 0 ) )
      return NULL;

   pcStop = pcCharSet + sCharSetLen;
   for( pcRet = pcString + sStrLen - 1; pcRet >= pcString; pcRet-- )
   {
      for( pcSet = pcCharSet; pcSet < pcStop; pcSet++ )
         if( *pcSet == *pcRet )
         {
            if( psMatchedCharPos != NULL )
               *( psMatchedCharPos ) = pcSet - pcCharSet;
            return pcRet;
         }
   }

   return NULL;
}


/*  
 *  CSETREF() stuff
 */

static int siRefSwitch = 0;     /* TODO: make this tread safe */
ctstr.c251
VOIDct_setref( int iNewSwitch )
void ct_setref( int iNewSwitch )
{
   HB_TRACE( HB_TR_DEBUG, ( "ct_setref(%i)", iNewSwitch ) );
   siRefSwitch = iNewSwitch;
}
ctstr.c290
INTct_getref( void )
int ct_getref( void )
{
   HB_TRACE( HB_TR_DEBUG, ( "ct_getref()" ) );
   return siRefSwitch;
}
ctstr.c297
HB_FUNCCSETREF(void)
HB_FUNC( CSETREF )
{
   hb_retl( ct_getref() );

   if( ISLOG( 1 ) )
   {
      ct_setref( hb_parl( 1 ) );
   }
   else if( hb_pcount() > 0 ) /* 1 params, but is not logical ! */
   {
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_CSETREF,
                   NULL, "CSETREF", 0, EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
      }
   }
}


/*
 * CSETATMUPA() stuff
 */

static int siAtMupaSwitch = 0;  /* TODO: make this tread safe */
ctstr.c364
VOIDct_setatmupa( int iNewSwitch )
void ct_setatmupa( int iNewSwitch )
{
   HB_TRACE( HB_TR_DEBUG, ( "ct_setatmupa(%i)", iNewSwitch ) );
   siAtMupaSwitch = iNewSwitch;
}
ctstr.c391
INTct_getatmupa( void )
int ct_getatmupa( void )
{
   HB_TRACE( HB_TR_DEBUG, ( "ct_getatmupa()" ) );
   return siAtMupaSwitch;
}
ctstr.c398
HB_FUNCCSETATMUPA(void)
HB_FUNC( CSETATMUPA )
{
   hb_retl( ct_getatmupa() );

   if( ISLOG( 1 ) )
   {
      ct_setatmupa( hb_parl( 1 ) );
   }
   else if( hb_pcount() > 0 ) /* 1 params, but is not logical ! */
   {
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_CSETATMUPA, NULL,
                   "CSETATMUPA", 0, EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
      }
   }
}


/*
 * SETATLIKE() stuff
 */

static int siAtLikeMode = 0;    /* TODO: make this tread safe */
static char scAtLikeChar = '?';  /* TODO: make this tread safe */
ctstr.c448
VOIDct_setatlike( int iNewMode )
void ct_setatlike( int iNewMode )
{
   HB_TRACE( HB_TR_DEBUG, ( "ct_setatlike(%i)", iNewMode ) );
   siAtLikeMode = iNewMode;
}
ctstr.c476
INTct_getatlike( void )
int ct_getatlike( void )
{
   HB_TRACE( HB_TR_DEBUG, ( "ct_getatlike()" ) );
   return siAtLikeMode;
}
ctstr.c483
VOIDct_setatlikechar( char cNewChar )
void ct_setatlikechar( char cNewChar )
{
   HB_TRACE( HB_TR_DEBUG, ( "ct_setatlikechar(\'%c\')", cNewChar ) );
   scAtLikeChar = cNewChar;
}
ctstr.c490
CHARct_getatlikechar( void )
char ct_getatlikechar( void )
{
   HB_TRACE( HB_TR_DEBUG, ( "ct_getatlikechar()" ) );
   return scAtLikeChar;
}
ctstr.c497
HB_FUNCSETATLIKE(void)
HB_FUNC( SETATLIKE )
{

   hb_retni( ct_getatlike() );

   /* set new mode if first parameter is CT_SETATLIKE_EXACT (==0)
      or CT_SETATLIKE_WILDCARD (==1) */
   if( ISNUM( 1 ) )
   {
      int iNewMode = hb_parni( 1 );

      if( ( iNewMode == CT_SETATLIKE_EXACT ) || ( iNewMode == CT_SETATLIKE_WILDCARD ) )
      {
         ct_setatlike( iNewMode );
      }
      else
      {
         int iArgErrorMode = ct_getargerrormode();

         if( iArgErrorMode != CT_ARGERR_IGNORE )
         {
            ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_SETATLIKE,
                      NULL, "SETATLIKE", 0, EF_CANDEFAULT,
                      HB_ERR_ARGS_BASEPARAMS );
         }
      }
   }

   /* set new wildcard character, if ISCHAR(2) but !ISBYREF(2) */
   if( ISCHAR( 2 ) )
   {
      if( ISBYREF( 2 ) )
      {
         /* new behaviour: store the current wildcard char in second parameter */
         char cResult;

         cResult = ct_getatlikechar();
         hb_storclen( &cResult, 1, 2 );
      }
      else
      {
         char *pcNewChar = hb_parc( 2 );

         if( hb_parclen( 2 ) > 0 )
            ct_setatlikechar( *pcNewChar );
      }
   }
   else if( hb_pcount() > 1 ) /* more than 2 params, but second is not string ! */
   {
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_SETATLIKE, NULL,
                   "SETATLIKE", 0, EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
      }
   }
}
ctstr.c563
ctstrfil.c
TypeFunctionSourceLine
VOIDct_setfcreate( int iFileAttr )
void ct_setfcreate( int iFileAttr )
{
   HB_TRACE( HB_TR_DEBUG, ( "ct_setfcreate(%i)", iFileAttr ) );
   s_iFileAttr = iFileAttr;
}
ctstrfil.c63
INTct_getfcreate( void )
int ct_getfcreate( void )
{
   HB_TRACE( HB_TR_DEBUG, ( "ct_getfcreate()" ) );
   return s_iFileAttr;
}
ctstrfil.c69
HB_FUNCSETFCREATE(void)
HB_FUNC( SETFCREATE )
{
   hb_retni( ct_getfcreate() );

   if( ISNUM( 1 ) )
   {
      ct_setfcreate( hb_parni( 1 ) );
   }
}
ctstrfil.c75
VOIDct_setsafety( BOOL bSafety )
void ct_setsafety( BOOL bSafety )
{
   HB_TRACE( HB_TR_DEBUG, ( "ct_setsafety(%i)", bSafety ) );
   s_bSafety = bSafety;
}
ctstrfil.c85
BOOLct_getsafety( void )
BOOL ct_getsafety( void )
{
   HB_TRACE( HB_TR_DEBUG, ( "ct_getsafety()" ) );
   return s_bSafety;
}
ctstrfil.c91
HB_FUNCCSETSAFETY(void)
HB_FUNC( CSETSAFETY )
{
   hb_retni( ct_getsafety() );

   if( ISLOG( 1 ) )
   {
      ct_setsafety( hb_parnl( 1 ) );
   }
}
ctstrfil.c97
STATIC LONGct_StrFile( BYTE * pFileName, BYTE * pcStr, ULONG ulLen, BOOL bOverwrite, LONG lOffset, BOOL bTrunc )
static LONG ct_StrFile( BYTE * pFileName, BYTE * pcStr, ULONG ulLen, BOOL bOverwrite, LONG lOffset,
                        BOOL bTrunc )
{
   HB_FHANDLE hFile;
   BOOL bOpen = FALSE;
   BOOL bFile = hb_fsFile( pFileName );
   ULONG ulWrite = 0;

   if( bFile && bOverwrite )
   {
      hFile = hb_fsOpen( pFileName, FO_READWRITE );
      bOpen = TRUE;
   }
   else if( !bFile || !ct_getsafety() )
   {
      hFile = hb_fsCreate( pFileName, ct_getfcreate() );
   }
   else
   {
      hFile = FS_ERROR;
   }

   if( hFile != FS_ERROR )
   {
      if( lOffset )
         hb_fsSeek( hFile, lOffset, FS_SET );
      else if( bOpen )
         hb_fsSeek( hFile, 0, FS_END );

      ulWrite = hb_fsWriteLarge( hFile, pcStr, ulLen );
      if( ( ulWrite == ulLen ) && bOpen && bTrunc )
         hb_fsWrite( hFile, NULL, 0 );

      hb_fsClose( hFile );
   }
   return ulWrite;
}
ctstrfil.c107
HB_FUNCSTRFILE(void)
HB_FUNC( STRFILE )
{
   if( ISCHAR( 1 ) && ISCHAR( 2 ) )
   {
      hb_retnl( ct_StrFile( ( BYTE * ) hb_parc( 2 ), ( BYTE * ) hb_parc( 1 ),
                            hb_parclen( 1 ), ISLOG( 3 ) && hb_parl( 3 ),
                            hb_parnl( 4 ), ISLOG( 5 ) && hb_parl( 5 ) ) );
   }
   else
   {
      hb_retni( 0 );
   }
}
ctstrfil.c145
HB_FUNCFILESTR(void)
HB_FUNC( FILESTR )
{
   if( ISCHAR( 1 ) )
   {
      HB_FHANDLE hFile = hb_fsOpen( ( BYTE * ) hb_parc( 1 ), FO_READ );

      if( hFile != FS_ERROR )
      {
         LONG lFileSize = hb_fsSeek( hFile, 0, FS_END );
         LONG lPos = hb_fsSeek( hFile, hb_parnl( 3 ), FS_SET ), lLength;
         char *pcResult, *pCtrlZ;
         BOOL bCtrlZ = ISLOG( 4 ) && hb_parl( 4 );

         if( ISNUM( 2 ) )
         {
            lLength = hb_parnl( 2 );
            if( lLength > lFileSize - lPos )
               lLength = lFileSize - lPos;
         }
         else
            lLength = lFileSize - lPos;

         pcResult = ( char * ) hb_xgrab( lLength + 1 );
         if( lLength > 0 )
         {
            lLength = hb_fsReadLarge( hFile, ( BYTE * ) pcResult, ( ULONG ) lLength );
         }

         if( bCtrlZ )
         {
            pCtrlZ = ( char * ) memchr( pcResult, 26, lLength );
            if( pCtrlZ )
               lLength = pCtrlZ - pcResult;
         }

         hb_fsClose( hFile );
         hb_retclen_buffer( pcResult, lLength );
      }
      else
      {
         hb_retc( NULL );
      }
   }
   else
   {
      hb_retc( NULL );
   }
}
ctstrfil.c159
HB_FUNCSCREENFILE(void)
HB_FUNC( SCREENFILE )
{
   if( ISCHAR( 1 ) )
   {
      char *pBuffer;
      ULONG ulSize;

      hb_gtRectSize( 0, 0, hb_gtMaxRow(), hb_gtMaxCol(), &ulSize );
      pBuffer = ( char * ) hb_xgrab( ulSize );

      hb_gtSave( 0, 0, hb_gtMaxRow(), hb_gtMaxCol(), pBuffer );

      hb_retnl( ct_StrFile( ( BYTE * ) hb_parc( 1 ), ( BYTE * ) pBuffer,
                            ulSize, ISLOG( 2 ) && hb_parl( 2 ), hb_parnl( 3 ),
                            ISLOG( 4 ) && hb_parl( 4 ) ) );
      hb_xfree( pBuffer );
   }
   else
   {
      hb_retni( 0 );
   }
}
ctstrfil.c208
HB_FUNCFILESCREEN(void)
HB_FUNC( FILESCREEN )
{
   if( ISCHAR( 1 ) )
   {
      HB_FHANDLE hFile = hb_fsOpen( ( BYTE * ) hb_parc( 1 ), FO_READ );

      if( hFile != FS_ERROR )
      {
         char *pBuffer;
         ULONG ulSize;
         LONG lLength;

         if( ISNUM( 2 ) )
         {
            hb_fsSeek( hFile, hb_parnl( 2 ), FS_SET );
         }

         hb_gtRectSize( 0, 0, hb_gtMaxRow(), hb_gtMaxCol(), &ulSize );
         pBuffer = ( char * ) hb_xgrab( ulSize );

         lLength = hb_fsReadLarge( hFile, ( BYTE * ) pBuffer, ulSize );
         hb_gtRest( 0, 0, hb_gtMaxRow(), hb_gtMaxCol(), pBuffer );

         hb_xfree( pBuffer );

         hb_fsClose( hFile );
         hb_retnl( lLength );
      }
      else
      {
         hb_retni( 0 );
      }
   }
   else
   {
      hb_retni( 0 );
   }
}
ctstrfil.c231
ctwfunc.c
TypeFunctionSourceLine
STATIC INThb_ctColorParam( int iParam, int iDefault )
static int hb_ctColorParam( int iParam, int iDefault )
{
   int iColor;

   if( ISNUM( iParam ) )
      iColor = hb_parni( iParam );
   else if( hb_parclen( iParam ) > 0 )
   {
      iColor = hb_gtColorToN( hb_parc( iParam ) );
      if( iColor == -1 )
         iColor = iDefault;
   }
   else
      iColor = iDefault;

   return iColor;
}
ctwfunc.c57
HB_FUNCCTWINIT(void)
HB_FUNC( CTWINIT )
{
   hb_retl( hb_ctwInit() );
}
ctwfunc.c76
HB_FUNCGETCLEARA(void)
HB_FUNC( GETCLEARA )
{
   hb_retni( hb_gtGetClearColor() );
}
ctwfunc.c81
HB_FUNCSETCLEARA(void)
HB_FUNC( SETCLEARA )
{
   int iColor = hb_ctColorParam( 1, -1 );

   if( iColor >= 0 )
      hb_gtSetClearColor( iColor & 0xff );

   hb_retc( NULL );
}
ctwfunc.c86
HB_FUNCSETCLEARB(void)
HB_FUNC( SETCLEARB )
{
   int iNew;

   if( ISNUM( 1 ) )
      iNew = hb_parni( 1 );
   else if( ISCHAR( 1 ) )
      iNew = hb_parc( 1 )[0];
   else
      iNew = 255;

   hb_gtSetClearChar( iNew & 0xff );

   hb_retc( NULL );
}
ctwfunc.c96
HB_FUNCGETCLEARB(void)
HB_FUNC( GETCLEARB )
{
   hb_retni( hb_gtGetClearChar() );
}
ctwfunc.c112
HB_FUNCWSETSHADOW(void)
HB_FUNC( WSETSHADOW )
{
   hb_retni( hb_ctwSetShadowAttr( hb_ctColorParam( 1, -2 ) ) );
}
ctwfunc.c117
HB_FUNCWSETMOVE(void)
HB_FUNC( WSETMOVE )
{
   hb_retl( hb_ctwSetMoveMode( ISLOG( 1 ) ? hb_parl( 1 ) : -1 ) != 0 );
}
ctwfunc.c122
HB_FUNCWSTEP(void)
HB_FUNC( WSTEP )
{
   if( ISNUM( 1 ) && ISNUM( 2 ) )
      hb_retni( hb_ctwSetMoveStep( hb_parni( 1 ), hb_parni( 2 ) ) );
   else
      hb_retni( -1 );
}
ctwfunc.c127
HB_FUNCWMODE(void)
HB_FUNC( WMODE )
{
   hb_retni( hb_ctwSetBorderMode( ISLOG( 1 ) ? ( hb_parl( 1 ) ? 1 : 0 ) : -1,
                                  ISLOG( 2 ) ? ( hb_parl( 2 ) ? 1 : 0 ) : -1,
                                  ISLOG( 3 ) ? ( hb_parl( 3 ) ? 1 : 0 ) : -1,
                                  ISLOG( 4 ) ? ( hb_parl( 4 ) ? 1 : 0 ) : -1 ) );
}
ctwfunc.c135
HB_FUNCWBOARD(void)
HB_FUNC( WBOARD )
{
   hb_retni( hb_ctwSetWindowBoard( hb_parni( 1 ), hb_parni( 2 ),
                                   ISNUM( 3 ) ? hb_parni( 3 ) : hb_gtMaxRow(),
                                   ISNUM( 4 ) ? hb_parni( 4 ) : hb_gtMaxCol() ) );
}
ctwfunc.c143
HB_FUNCWOPEN(void)
HB_FUNC( WOPEN )
{
   int iColor;

   iColor = hb_ctColorParam( 6, 0 );   /* Harbour extension */
   hb_retni( hb_ctwCreateWindow( hb_parni( 1 ), hb_parni( 2 ),
                                 hb_parni( 3 ), hb_parni( 4 ),
                                 hb_parl( 5 ), iColor ) );
}
ctwfunc.c150
HB_FUNCWCLOSE(void)
HB_FUNC( WCLOSE )
{
   hb_retni( hb_ctwCloseWindow( hb_ctwCurrentWindow() ) );
}
ctwfunc.c160
HB_FUNCWACLOSE(void)
HB_FUNC( WACLOSE )
{
   hb_retni( hb_ctwCloseAllWindows() );
}
ctwfunc.c165
HB_FUNCWSELECT(void)
HB_FUNC( WSELECT )
{
   hb_retni( ISNUM( 1 ) ? hb_ctwSelectWindow( hb_parni( 1 ) ) :
                          hb_ctwCurrentWindow() );
}
ctwfunc.c170
HB_FUNCWNUM(void)
HB_FUNC( WNUM )
{
   hb_retni( hb_ctwMaxWindow() );
}
ctwfunc.c176
HB_FUNCWBOX(void)
HB_FUNC( WBOX )
{
   static const char * pWBoxFrames[] = {
            _B_DOUBLE,        /* 0  WB_DOUBLE_CLEAR */
            _B_SINGLE,        /* 1  WB_SINGLE_CLEAR */
            _B_DOUBLE_SINGLE, /* 2  WB_DOUBLE_SINGLE_CLEAR */
            _B_SINGLE_DOUBLE, /* 3  WB_SINGLE_DOUBLE_CLEAR */

            _B_DOUBLE,        /* 4  WB_DOUBLE */
            _B_SINGLE,        /* 5  WB_SINGLE */
            _B_DOUBLE_SINGLE, /* 6  WB_DOUBLE_SINGLE */
            _B_SINGLE_DOUBLE, /* 7  WB_SINGLE_DOUBLE */

            "ÛßÛÛÛÜÛÛ",       /* 8  WB_HALF_FULL_CLEAR */
            "ÞßÝÝÝÜÞÞ",       /* 9  WB_HALF_CLEAR */
            "ÞÛÝÝÝÛÞÞ",       /* 10 WB_FULL_HALF_CLEAR */
            "ÛÛÛÛÛÛÛÛ",       /* 11 WB_FULL_CLEAR */

            "ÛßÛÛÛÜÛÛ",       /* 12 WB_HALF_FULL */
            "ÞßÝÝÝÜÞÞ",       /* 13 WB_HALF */
            "ÞÛÝÝÝÛÞÞ",       /* 14 WB_FULL_HALF */
            "ÛÛÛÛÛÛÛÛ"  };    /* 15 WB_FULL */

   BYTE * szBox, szBoxBuf[ 10 ];
   int iColor;

   if( ISCHAR( 1 ) )
   {
      szBox = ( BYTE * ) hb_parc( 1 );
   }
   else
   {
      int iFrame = hb_parni( 1 );

      if( iFrame < 0 || iFrame > 15 )
         iFrame = 0;
      memcpy( szBoxBuf, pWBoxFrames[ iFrame ], 9 );
      if( ( iFrame & 4 ) == 0 )
      {
         szBoxBuf[ 8 ] = ( char ) hb_gtGetClearChar();
      }
      szBoxBuf[ 9 ] = '0';
      szBox = szBoxBuf;
   }

   iColor = hb_ctColorParam( 2, 0 );   /* Harbour extension */
   hb_retni( hb_ctwAddWindowBox( hb_ctwCurrentWindow(), szBox, iColor ) );
}
ctwfunc.c181
HB_FUNCWFORMAT(void)
HB_FUNC( WFORMAT )
{
   int iWindow = hb_ctwCurrentWindow();
   int iTop, iLeft, iBottom, iRight;

   if( hb_pcount() == 0 )
   {
      hb_ctwGetFormatCords( iWindow, TRUE, &iTop, &iLeft, &iBottom, &iRight );
      iTop    = -iTop;
      iLeft   = -iLeft;
      iBottom = -iBottom;
      iRight  = -iRight;
   }
   else
   {
      iTop    = hb_parni( 1 );
      iLeft   = hb_parni( 2 );
      iBottom = hb_parni( 3 );
      iRight  = hb_parni( 4 );
   }
   hb_retni( hb_ctwChangeMargins( iWindow, iTop, iLeft, iBottom, iRight ) );
}
ctwfunc.c230
HB_FUNCWROW(void)
HB_FUNC( WROW )
{
   int iTop, iLeft, iBottom, iRight;

   hb_ctwGetWindowCords( hb_ctwCurrentWindow(), hb_parl( 1 ), &iTop, &iLeft, &iBottom, &iRight );
   hb_retni( iTop );
}
ctwfunc.c253
HB_FUNCWCOL(void)
HB_FUNC( WCOL )
{
   int iTop, iLeft, iBottom, iRight;

   hb_ctwGetWindowCords( hb_ctwCurrentWindow(), hb_parl( 1 ), &iTop, &iLeft, &iBottom, &iRight );
   hb_retni( iLeft );
}
ctwfunc.c261
HB_FUNCWLASTROW(void)
HB_FUNC( WLASTROW )
{
   int iTop, iLeft, iBottom, iRight;

   hb_ctwGetWindowCords( hb_ctwCurrentWindow(), hb_parl( 1 ), &iTop, &iLeft, &iBottom, &iRight );
   hb_retni( iBottom );
}
ctwfunc.c269
HB_FUNCWLASTCOL(void)
HB_FUNC( WLASTCOL )
{
   int iTop, iLeft, iBottom, iRight;

   hb_ctwGetWindowCords( hb_ctwCurrentWindow(), hb_parl( 1 ), &iTop, &iLeft, &iBottom, &iRight );
   hb_retni( iRight );
}
ctwfunc.c277
HB_FUNCWFROW(void)
HB_FUNC( WFROW )
{
   int iTop, iLeft, iBottom, iRight;

   hb_ctwGetFormatCords( hb_ctwCurrentWindow(), hb_parl( 1 ), &iTop, &iLeft, &iBottom, &iRight );
   hb_retni( iTop );
}
ctwfunc.c285
HB_FUNCWFCOL(void)
HB_FUNC( WFCOL )
{
   int iTop, iLeft, iBottom, iRight;

   hb_ctwGetFormatCords( hb_ctwCurrentWindow(), hb_parl( 1 ), &iTop, &iLeft, &iBottom, &iRight );
   hb_retni( iLeft );
}
ctwfunc.c293
HB_FUNCWFLASTROW(void)
HB_FUNC( WFLASTROW )
{
   int iTop, iLeft, iBottom, iRight;

   hb_ctwGetFormatCords( hb_ctwCurrentWindow(), hb_parl( 1 ), &iTop, &iLeft, &iBottom, &iRight );
   hb_retni( iBottom );
}
ctwfunc.c301
HB_FUNCWFLASTCOL(void)
HB_FUNC( WFLASTCOL )
{
   int iTop, iLeft, iBottom, iRight;

   hb_ctwGetFormatCords( hb_ctwCurrentWindow(), hb_parl( 1 ), &iTop, &iLeft, &iBottom, &iRight );
   hb_retni( iRight );
}
ctwfunc.c309
HB_FUNCWCENTER(void)
HB_FUNC( WCENTER )
{
   hb_retni( hb_ctwCenterWindow( hb_ctwCurrentWindow(), hb_parl( 1 ) ) );
}
ctwfunc.c317
HB_FUNCWMOVE(void)
HB_FUNC( WMOVE )
{
   hb_retni( hb_ctwMoveWindow( hb_ctwCurrentWindow(),
                               hb_parni( 1 ), hb_parni( 2 ) ) );
}
ctwfunc.c322
HB_FUNCCTWLASTKEY(void)
HB_FUNC( CTWLASTKEY )
{
   hb_retni( hb_ctwLastKey() );
}
ctwfunc.c328
HB_FUNCHBCT_MAXROW(void)
HB_FUNC( HBCT_MAXROW ) /* Return the maximum screen/window row number (zero origin) */
{
   if( ISLOG( 1 ) && hb_parl( 1 ) )
   {
      USHORT uiRows, uiCols;
      hb_gtScrDim( &uiRows, &uiCols );
      hb_retni( uiRows - 1 );
   }
   else
      hb_retni( hb_gtMaxRow() );
}
ctwfunc.c336
HB_FUNCHBCT_MAXCOL(void)
HB_FUNC( HBCT_MAXCOL ) /* Return the maximum screen/window column number (zero origin) */
{
   if( ISLOG( 1 ) && hb_parl( 1 ) )
   {
      USHORT uiRows, uiCols;
      hb_gtScrDim( &uiRows, &uiCols );
      hb_retni( uiCols - 1 );
   }
   else
      hb_retni( hb_gtMaxCol() );
}
ctwfunc.c348
ctwin.c
TypeFunctionSourceLine
STATIC INThb_ctw_CalcShadowWidth( int iRows, int iCols )
static int hb_ctw_CalcShadowWidth( int iRows, int iCols )
{
   if( iRows + iRows >= iCols )
      return 1;
   else
      return 2;
}
ctwin.c140
STATIC VOIDhb_ctw_SetMap( PHB_GT pGT, int * piMap, int iWindow, int iTop, int iLeft, int iBottom, int iRight )
static void hb_ctw_SetMap( PHB_GT pGT, int * piMap, int iWindow, int iTop, int iLeft, int iBottom, int iRight )
{
   ULONG lIndex;
   int i;

   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_SetMap(%p,%p,%d,%d,%d,%d,%d)", pGT, piMap, iWindow, iTop, iLeft, iBottom, iRight));

   HB_SYMBOL_UNUSED( pGT );

   if( iTop < 0 )
      iTop = 0;
   if( iBottom >= s_iMapHeight )
      iBottom = s_iMapHeight - 1;
   if( iLeft < 0 )
      iLeft = 0;
   if( iRight >= s_iMapWidth )
      iRight = s_iMapWidth - 1;

   while( iTop <= iBottom )
   {
      lIndex = iTop * s_iMapWidth + iLeft;
      for( i = iLeft; i <= iRight; ++i, ++lIndex )
         piMap[ lIndex ] = iWindow;
      ++iTop;
   }
}
ctwin.c148
STATIC VOIDhb_ctw_ClearMap( PHB_GT pGT )
static void hb_ctw_ClearMap( PHB_GT pGT )
{
   ULONG ulSize;

   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_ClearMap(%p)", pGT));

   HB_SYMBOL_UNUSED( pGT );

   ulSize = ( ULONG ) s_iMapHeight * s_iMapWidth * sizeof( int );
   memset( s_pWindowMap, 0, ulSize );
   memset( s_pShadowMap, 0, ulSize );
}
ctwin.c175
STATIC VOIDhb_ctw_WindowMap( PHB_GT pGT, int iWindow, BOOL fExpose )
static void hb_ctw_WindowMap( PHB_GT pGT, int iWindow, BOOL fExpose )
{
   PHB_CT_WND pWnd;

   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_WindowMap(%p,%d,%d)", pGT, iWindow, (int) fExpose));

   pWnd = s_windows[ iWindow ];

   if( ! pWnd->fHidden )
   {
      int iLastRow = pWnd->iFirstRow + pWnd->iHeight - 1,
          iLastCol = pWnd->iFirstCol + pWnd->iWidth - 1;

      hb_ctw_SetMap( pGT, s_pWindowMap, iWindow, 
                     pWnd->iFirstRow, pWnd->iFirstCol,
                     iLastRow, iLastCol );
      hb_ctw_SetMap( pGT, s_pShadowMap, 0,
                     pWnd->iFirstRow, pWnd->iFirstCol,
                     iLastRow, iLastCol );
      if( pWnd->iShadowAttr >= 0 &&
          iLastRow >= s_iBoardTop && iLastCol >= s_iBoardLeft &&
          pWnd->iFirstRow <= s_iBoardBottom && pWnd->iFirstCol <= s_iBoardRight )
      {
         iLastRow += 1;
         iLastCol += s_iShadowWidth;
         hb_ctw_SetMap( pGT, s_pShadowMap, iWindow,
                        iLastRow, pWnd->iFirstCol + s_iShadowWidth,
                        iLastRow, iLastCol );
         hb_ctw_SetMap( pGT, s_pShadowMap, iWindow,
                        pWnd->iFirstRow + 1, pWnd->iFirstCol + pWnd->iWidth,
                        iLastRow - 1, iLastCol );
      }
      if( fExpose )
      {
         HB_GTSUPER_EXPOSEAREA( pGT, pWnd->iFirstRow, pWnd->iFirstCol,
                                iLastRow, iLastCol );
      }
   }
}
ctwin.c188
STATIC VOIDhb_ctw_RemapAllWindows( PHB_GT pGT )
static void hb_ctw_RemapAllWindows( PHB_GT pGT )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_RemapAllWindows(%p)", pGT));

   if( s_iMaxWindow )
   {
      int i;

      hb_ctw_ClearMap( pGT );
      for( i = 0; i < s_iOpenWindows; ++i )
         hb_ctw_WindowMap( pGT, s_windowStack[ i ], FALSE );
      HB_GTSUPER_EXPOSEAREA( pGT, 0, 0, s_iMapHeight, s_iMapWidth );
   }
}
ctwin.c228
STATIC BOOLhb_ctw_Init( PHB_GT pGT )
static BOOL hb_ctw_Init( PHB_GT pGT )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_Init(%p)",pGT));

   if( ! s_fInit )
   {
      s_fInit = hb_gtLoad( HB_GT_DRVNAME( HB_GT_NAME ), NULL );
      if( s_fInit )
      {
         int iRow, iCol;

         HB_GTSUPER_GETSIZE( pGT, &s_iMapHeight, &s_iMapWidth );

         /* update cursor position to the rules used by CTWIN */
         HB_GTSELF_GETPOS( pGT, &iRow, &iCol );
         HB_GTSELF_SETPOS( pGT, iRow, iCol );
      }
   }

   return s_fInit;
}
ctwin.c243
STATIC INThb_ctw_SetShadowAttr( PHB_GT pGT, int iAttr )
static int hb_ctw_SetShadowAttr( PHB_GT pGT, int iAttr )
{
   int iOldAttr = s_iShadowAttr;

   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_SetShadowAttr(%p,%d)", pGT, iAttr));

   HB_SYMBOL_UNUSED( pGT );

   if( iAttr >= -1 )
      s_iShadowAttr = iAttr;

   return iOldAttr;
}
ctwin.c265
STATIC INThb_ctw_SetMoveMode( PHB_GT pGT, int iMode )
static int hb_ctw_SetMoveMode( PHB_GT pGT, int iMode )
{
   int iOldMode = s_iMoveMode;

   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_SetMoveMode(%p,%d)", pGT, iMode));

   HB_SYMBOL_UNUSED( pGT );

   if( iMode >= 0 )
      s_iMoveMode = iMode;

   return iOldMode;
}
ctwin.c279
STATIC INThb_ctw_SetMoveStep( PHB_GT pGT, int iVertical, int iHorizontal )
static int hb_ctw_SetMoveStep( PHB_GT pGT, int iVertical, int iHorizontal )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_SetMoveStep(%p,%d,%d)", pGT, iVertical, iHorizontal));

   if( s_fInit || hb_ctw_Init( pGT ) )
   {
      if( iVertical < s_iMapHeight && iHorizontal < s_iMapWidth )
      {
         s_iVerticalStep   = iVertical;
         s_iHorizontalStep = iHorizontal;

         return 0;
      }
   }

   return -1;
}
ctwin.c293
STATIC INThb_ctw_SetWindowBoard( PHB_GT pGT, int iTop, int iLeft, int iBottom, int iRight )
static int hb_ctw_SetWindowBoard( PHB_GT pGT, int iTop, int iLeft, int iBottom, int iRight )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_SetWindowBoard(%d,%d,%d,%d)", iTop, iLeft, iBottom, iRight));

   if( s_fInit || hb_ctw_Init( pGT ) )
   {
      /*
       * This limitation is only for strict CT3 compatibility, the CTW GTs
       * can work in practice with any virtual board size and position and
       * is limited only by available physical memory, [druzus]
       */
      if( iBottom >= s_iMapHeight )
         iBottom = s_iMapHeight - 1;
      if( iRight >= s_iMapWidth )
         iRight = s_iMapWidth - 1;
      if( iTop >= 0 && iLeft >= 0 && iTop < iBottom && iLeft < iRight )
      {
         s_iBoardTop     = iTop;
         s_iBoardLeft    = iLeft;
         s_iBoardBottom  = iBottom;
         s_iBoardRight   = iRight;
         s_fBoardSet     = TRUE;
         hb_ctw_RemapAllWindows( pGT );

         return 0;
      }
   }

   return -1;
}
ctwin.c311
STATIC INThb_ctw_SetBorderMode( PHB_GT pGT, int iTop, int iLeft, int iBottom, int iRight )
static int  hb_ctw_SetBorderMode( PHB_GT pGT, int iTop, int iLeft, int iBottom, int iRight )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_SetBorderMode(%p,%d,%d,%d,%d)", pGT, iTop, iLeft, iBottom, iRight));

   if( s_fInit || hb_ctw_Init( pGT ) )
   {
      if( iTop >= 0 )
         s_fBoardTop     = iTop != 0;
      if( iLeft >= 0 )
         s_fBoardLeft    = iLeft != 0;
      if( iBottom >= 0 )
         s_fBoardBottom  = iBottom != 0;
      if( iRight >= 0 )
         s_fBoardRight   = iRight != 0;

      return 0;
   }

   return -1;
}
ctwin.c342
STATIC INThb_ctw_CurrentWindow( PHB_GT pGT )
static int hb_ctw_CurrentWindow( PHB_GT pGT )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_CurrentWindow(%p)", pGT));

   HB_SYMBOL_UNUSED( pGT );

   return s_iCurrWindow;
}
ctwin.c363
STATIC INThb_ctw_SelectWindow( PHB_GT pGT, int iWindow )
static int hb_ctw_SelectWindow( PHB_GT pGT, int iWindow )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_SelectWindow(%p,%d)", pGT, iWindow));

   if( iWindow == 0 )
      s_iCurrWindow = iWindow;
   else if( iWindow != s_iCurrWindow &&
            iWindow > 0 && iWindow <= s_iMaxWindow &&
            s_windows[ iWindow ] != NULL )
   {
      s_iCurrWindow = iWindow;
      if( iWindow != s_windowStack[ s_iOpenWindows - 1 ] )
      {
         int i;

         for( i = 0; i < s_iOpenWindows; ++i )
         {
            if( s_windowStack[ i ] == iWindow )
               break;
         }
         while( i < s_iOpenWindows - 1 )
         {
            s_windowStack[ i ] = s_windowStack[ i + 1 ];
            ++i;
         }
         s_windowStack[ s_iOpenWindows - 1 ] = iWindow;
         /* INFO: CT effectively calls hb_ctw_RemapAllWindows() here */
         hb_ctw_WindowMap( pGT, iWindow, TRUE );
      }
   }

   return s_iCurrWindow;
}
ctwin.c372
STATIC INThb_ctw_MaxWindow( PHB_GT pGT )
static int hb_ctw_MaxWindow( PHB_GT pGT )
{
   int i, iMaxHandle = 0;

   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_MaxWindow(%p)", pGT));

   HB_SYMBOL_UNUSED( pGT );

   for( i = 0; i < s_iOpenWindows; ++i )
   {
      if( iMaxHandle < s_windowStack[ i ] )
         iMaxHandle = s_windowStack[ i ];
   }

   return iMaxHandle;
}
ctwin.c406
STATIC INThb_ctw_CreateWindow( PHB_GT pGT, int iTop, int iLeft, int iBottom, int iRight, BOOL fClear, int iColor )
static int hb_ctw_CreateWindow( PHB_GT pGT, int iTop, int iLeft, int iBottom, int iRight, BOOL fClear, int iColor )
{
   PHB_CT_WND pWnd;
   BYTE bAttr, bColor;
   USHORT usChar;
   int iRow, iCol, iHeight, iWidth, iTmp;
   long lIndex;

   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_CreateWindow(%p,%d,%d,%d,%d,%d,%d)", pGT, iTop, iLeft, iBottom, iRight, (int) fClear, iColor));

   if( s_iOpenWindows == s_iMaxWindow )
   {
      int i = s_iMaxWindow;

      if( s_iMaxWindow == 0 )
      {
         ULONG ulSize;

         if( !s_fInit )
         {
            if( ! hb_ctw_Init( pGT ) )
               return -1;
         }

         HB_GTSUPER_GETSIZE( pGT, &s_iMapHeight, &s_iMapWidth );
         s_iShadowWidth = hb_ctw_CalcShadowWidth( s_iMapHeight, s_iMapWidth );
         if( !s_fBoardSet )
            hb_ctw_SetWindowBoard( pGT, 0, 0, s_iMapHeight - 1, s_iMapWidth - 1 );
         ulSize = ( ULONG ) s_iMapHeight * s_iMapWidth * sizeof( int );
         s_pWindowMap = ( int * ) hb_xgrab( ulSize );
         s_pShadowMap = ( int * ) hb_xgrab( ulSize );
         hb_ctw_ClearMap( pGT );

         s_iMaxWindow = HB_CTWIN_ALLOC;
         s_windows = ( PHB_CT_WND * ) hb_xgrab( ( HB_CTWIN_ALLOC + 1 ) * sizeof( PHB_CT_WND ) );
         s_windowStack = ( int * ) hb_xgrab( HB_CTWIN_ALLOC * sizeof( int ) );
         s_windows[ 0 ] = NULL;
      }
      else
      {
         s_iMaxWindow += HB_CTWIN_ALLOC;
         s_windows = ( PHB_CT_WND * ) hb_xrealloc( s_windows, ( s_iMaxWindow + 1 ) * sizeof( PHB_CT_WND ) );
         s_windowStack = ( int * ) hb_xrealloc( s_windowStack, s_iMaxWindow * sizeof( int ) );
      }
      do
      {
         s_windows[ i + 1 ] = NULL;
         s_windowStack[ i ] = 0;
      }
      while( ++i < s_iMaxWindow );
   }

   iHeight = iBottom - iTop + 1;
   iWidth  = iRight - iLeft + 1;
   iRow = iTop;
   iCol = iLeft;

   if( iHeight > s_iBoardBottom - s_iBoardTop + 1 )
      iHeight = s_iBoardBottom - s_iBoardTop + 1;
   if( iWidth > s_iBoardRight - s_iBoardLeft + 1 )
      iWidth = s_iBoardRight - s_iBoardLeft + 1;

   if( iHeight < HB_CTWIN_MINROWS || iWidth < HB_CTWIN_MINCOLS ||
       iHeight > HB_CTWIN_MAXROWS || iWidth > HB_CTWIN_MAXCOLS )
      return -1;

   iTop    = s_iBoardTop - ( s_fBoardTop ? iHeight : 0 );
   iBottom = s_iBoardBottom + 1 - ( s_fBoardBottom ? 0 : iHeight );
   iLeft   = s_iBoardLeft - ( s_fBoardLeft ? iWidth : 0 );
   iRight  = s_iBoardRight + 1 - ( s_fBoardRight ? 0 : iWidth );

   if( iRow < iTop )
      iRow = iTop;
   else if( iRow > iBottom )
      iRow = iBottom;
   if( iCol < iLeft )
      iCol = iLeft;
   else if( iCol > iRight )
      iCol = iRight;

   pWnd = ( PHB_CT_WND ) hb_xgrab( sizeof( HB_CT_WND ) );
   memset( pWnd, 0,  sizeof( HB_CT_WND ) );

   pWnd->fHidden = FALSE;
   pWnd->iShadowAttr = s_iShadowAttr;
   pWnd->iCursorStyle = HB_GTSELF_GETCURSORSTYLE( pGT );

   pWnd->iHeight = iHeight;
   pWnd->iWidth  = iWidth;
   pWnd->iFirstRow = iRow;
   pWnd->iFirstCol = iCol;

   HB_GTSELF_GETCOLORDATA( pGT, &pWnd->piColors, &pWnd->iColorCount, &pWnd->iColorIndex );

   pWnd->screenBuffer = ( PHB_SCREENCELL ) hb_xgrab( ( ULONG ) pWnd->iHeight *
                                    pWnd->iWidth * sizeof( HB_SCREENCELL ) );

   if( pWnd->iShadowAttr >= 0 )
      fClear = TRUE;
   bAttr  = 0;
   bColor = iColor ? ( BYTE ) iColor : ( BYTE ) HB_GTSELF_GETCOLOR( pGT );
   usChar = ( USHORT ) HB_GTSELF_GETCLEARCHAR( pGT );

   lIndex = 0;
   for( iRow = pWnd->iFirstRow; iRow < pWnd->iFirstRow + pWnd->iHeight; ++iRow )
   {
      for( iCol = pWnd->iFirstCol; iCol < pWnd->iFirstCol + pWnd->iWidth; ++iCol )
      {
         if( !fClear && !HB_GTSELF_GETSCRCHAR( pGT, iRow, iCol, &bColor, &bAttr, &usChar ) )
         {
            usChar = ( USHORT ) HB_GTSELF_GETCLEARCHAR( pGT );
            bColor = ( BYTE ) HB_GTSELF_GETCOLOR( pGT );
            bAttr  = 0;
         }
         pWnd->screenBuffer[ lIndex ].c.usChar = usChar;
         pWnd->screenBuffer[ lIndex ].c.bColor = bColor;
         pWnd->screenBuffer[ lIndex ].c.bAttr  = 0;
         ++lIndex;
      }
   }

   for( iTmp = 1; iTmp < s_iMaxWindow; ++iTmp )
   {
      if( s_windows[ iTmp ] == NULL )
         break;
   }
   pWnd->iHandle = iTmp;

   s_windows[ pWnd->iHandle ] = pWnd;
   s_windowStack[ s_iOpenWindows++ ] = pWnd->iHandle;
   s_iCurrWindow = pWnd->iHandle;

   hb_ctw_WindowMap( pGT, pWnd->iHandle, TRUE );

   return pWnd->iHandle;
}
ctwin.c423
STATIC INThb_ctw_CloseWindow( PHB_GT pGT, int iWindow )
static int hb_ctw_CloseWindow( PHB_GT pGT, int iWindow )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_CloseWindow(%p,%d)", pGT, iWindow));

   if( iWindow > 0 && iWindow <= s_iMaxWindow && s_windows[ iWindow ] )
   {
      PHB_CT_WND pWnd = s_windows[ iWindow ];
      int i, iWnd, iLast;
      BOOL fHidden = pWnd->fHidden;

      hb_xfree( pWnd->screenBuffer );
      if( pWnd->iColorCount )
         hb_xfree( pWnd->piColors );
      hb_xfree( pWnd );
      s_windows[ iWindow ] = NULL;

      iWnd = 0;
      i = --s_iOpenWindows;
      do
      {
         iLast = s_windowStack[ i ];
         s_windowStack[ i ] = iWnd;
         if( iLast == iWindow )
            break;
         iWnd = iLast;
      }
      while( --i >= 0 );

      if( iWindow == s_iCurrWindow )
         s_iCurrWindow = s_iOpenWindows > 0 ? s_windowStack[ s_iOpenWindows - 1 ] : 0;

      if( !fHidden )
         hb_ctw_RemapAllWindows( pGT );
      return s_iCurrWindow;
   }

   return -1;
}
ctwin.c560
STATIC INThb_ctw_CloseAllWindows( PHB_GT pGT )
static int hb_ctw_CloseAllWindows( PHB_GT pGT )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_CloseAllWindows(%p)", pGT));

   if( s_iOpenWindows > 0 )
   {
      PHB_CT_WND pWnd;
      int i, iWindow;

      for( i = 0; i < s_iOpenWindows; ++i )
      {
         iWindow = s_windowStack[ i ];
         pWnd = s_windows[ iWindow ];
         s_windowStack[ i ] = 0;
         s_windows[ iWindow ] = NULL;
         hb_xfree( pWnd->screenBuffer );
         if( pWnd->iColorCount )
            hb_xfree( pWnd->piColors );
         hb_xfree( pWnd );
      }
      s_iOpenWindows = s_iCurrWindow = 0;
      hb_ctw_RemapAllWindows( pGT );
      return 0;
   }

   return -1;
}
ctwin.c599
STATIC INThb_ctw_CenterWindow( PHB_GT pGT, int iWindow, BOOL fCenter )
static int hb_ctw_CenterWindow( PHB_GT pGT, int iWindow, BOOL fCenter )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_CenterWindow(%p,%d,%d)", pGT, iWindow, (int) fCenter));

   HB_SYMBOL_UNUSED( pGT );

   if( iWindow > 0 && iWindow <= s_iOpenWindows )
   {
      PHB_CT_WND pWnd = s_windows[ iWindow ];

      if( pWnd )
      {
         if( fCenter )
         {
            int iHeight = s_iBoardBottom - s_iBoardTop + 1,
                iWidth = s_iBoardRight - s_iBoardLeft + 1;

            pWnd->iFirstRow = s_iBoardTop;
            pWnd->iFirstCol = s_iBoardLeft;

            if( iHeight > pWnd->iHeight )
               pWnd->iFirstRow += ( iHeight - pWnd->iHeight ) >> 1;
            if( iWidth > pWnd->iWidth )
               pWnd->iFirstCol += ( iWidth - pWnd->iWidth ) >> 1;
         }
         else
         {
            if( pWnd->iFirstRow > s_iBoardBottom - pWnd->iHeight + 1 )
               pWnd->iFirstRow = s_iBoardBottom - pWnd->iHeight + 1;
            if( pWnd->iFirstRow < s_iBoardTop )
               pWnd->iFirstRow = s_iBoardTop;
            if( pWnd->iFirstCol > s_iBoardRight - pWnd->iWidth + 1 )
               pWnd->iFirstCol = s_iBoardRight - pWnd->iWidth + 1;
            if( pWnd->iFirstCol < s_iBoardLeft )
               pWnd->iFirstCol = s_iBoardLeft;
         }
         return iWindow;
      }
   }

   return -1;
}
ctwin.c627
STATIC INThb_ctw_MoveWindow( PHB_GT pGT, int iWindow, int iRow, int iCol )
static int hb_ctw_MoveWindow( PHB_GT pGT, int iWindow, int iRow, int iCol )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_MoveWindow(%p,%d,%d,%d)", pGT, iWindow, iRow, iCol));

   if( iWindow > 0 && iWindow <= s_iOpenWindows )
   {
      PHB_CT_WND pWnd = s_windows[ iWindow ];

      if( pWnd )
      {
         if( ( iRow + ( s_fBoardTop ? pWnd->iHeight : 0 ) >= s_iBoardTop ) &&
             ( iRow + ( s_fBoardBottom ? 0 : pWnd->iHeight ) <= s_iBoardBottom + 1 ) &&
             ( iCol + ( s_fBoardLeft ? pWnd->iWidth : 0 ) >= s_iBoardLeft ) &&
             ( iCol + ( s_fBoardRight ? 0 : pWnd->iWidth ) <= s_iBoardRight + 1 ) )
         {
            pWnd->iFirstRow = iRow;
            pWnd->iFirstCol = iCol;
            if( ! pWnd->fHidden )
               hb_ctw_RemapAllWindows( pGT );
            return iWindow;
         }
      }
   }

   return -1;
}
ctwin.c670
STATIC INThb_ctw_ChangeMargins( PHB_GT pGT, int iWindow, int iTop, int iLeft, int iBottom, int iRight )
static int hb_ctw_ChangeMargins( PHB_GT pGT, int iWindow, int iTop, int iLeft, int iBottom, int iRight )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_ChangeMargins(%p,%d,%d,%d,%d,%d)", pGT, iWindow, iTop, iLeft, iBottom, iRight));

   HB_SYMBOL_UNUSED( pGT );

   if( iWindow > 0 && iWindow <= s_iOpenWindows )
   {
      PHB_CT_WND pWnd = s_windows[ iWindow ];

      if( pWnd )
      {
         if( ( iTop += pWnd->iTopMargin ) < 0 )
            iTop = 0;
         if( ( iLeft += pWnd->iLeftMargin ) < 0 )
            iLeft = 0;
         if( ( iBottom += pWnd->iBottomMargin ) < 0 )
            iBottom = 0;
         if( ( iRight += pWnd->iRightMargin ) < 0 )
            iRight = 0;

         if( iTop + iBottom < pWnd->iHeight && iLeft + iRight < pWnd->iWidth )
         {
            pWnd->iTopMargin    = iTop;
            pWnd->iLeftMargin   = iLeft;
            pWnd->iBottomMargin = iBottom;
            pWnd->iRightMargin  = iRight;

            return iWindow;
         }
      }
   }

   return -1;
}
ctwin.c697
STATIC INThb_ctw_GetWindowCords( PHB_GT pGT, int iWindow, BOOL fCenter, int * piTop, int * piLeft, int * piBottom, int * piRight )
static int hb_ctw_GetWindowCords( PHB_GT pGT, int iWindow, BOOL fCenter, int * piTop, int * piLeft, int * piBottom, int * piRight )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_GetWindowCords(%p,%d,%d,%p,%p,%p,%p)", pGT, iWindow, (int) fCenter, piTop, piLeft, piBottom, piRight));

   if( iWindow > 0 && iWindow <= s_iOpenWindows )
   {
      PHB_CT_WND pWnd = s_windows[ iWindow ];

      if( pWnd )
      {
         if( fCenter )
         {
            int iHeight = s_iBoardBottom - s_iBoardTop + 1,
                iWidth = s_iBoardRight - s_iBoardLeft + 1;

            *piTop  = s_iBoardTop;
            *piLeft = s_iBoardLeft;

            if( iHeight > pWnd->iHeight )
               *piTop += ( iHeight - pWnd->iHeight ) >> 1;
            if( iWidth > pWnd->iWidth )
               *piLeft += ( iWidth - pWnd->iWidth ) >> 1;
         }
         else
         {
            *piTop  = pWnd->iFirstRow;
            *piLeft = pWnd->iFirstCol;
         }
         *piBottom = *piTop + pWnd->iHeight - 1;
         *piRight  = *piLeft + pWnd->iWidth - 1;

         return iWindow;
      }
   }

   *piTop = *piLeft = 0;
   *piBottom = HB_GTSELF_MAXROW( pGT );
   *piRight  = HB_GTSELF_MAXCOL( pGT );

   return -1;
}
ctwin.c733
STATIC INThb_ctw_GetFormatCords( PHB_GT pGT, int iWindow, BOOL fRelative, int * piTop, int * piLeft, int * piBottom, int * piRight )
static int hb_ctw_GetFormatCords( PHB_GT pGT, int iWindow, BOOL fRelative, int * piTop, int * piLeft, int * piBottom, int * piRight )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_GetFormatCords(%p,%d,%d,%p,%p,%p,%p)", pGT, iWindow, (int) fRelative, piTop, piLeft, piBottom, piRight));

   if( iWindow > 0 && iWindow <= s_iOpenWindows )
   {
      PHB_CT_WND pWnd = s_windows[ iWindow ];

      if( pWnd )
      {
         if( fRelative )
         {
            *piTop    = pWnd->iTopMargin;
            *piLeft   = pWnd->iLeftMargin;
            *piBottom = pWnd->iBottomMargin;
            *piRight  = pWnd->iRightMargin;
         }
         else
         {
            *piTop    = pWnd->iFirstRow + pWnd->iTopMargin;
            *piLeft   = pWnd->iFirstCol + pWnd->iLeftMargin;
            *piBottom = pWnd->iFirstRow + pWnd->iHeight - pWnd->iBottomMargin - 1;
            *piRight  = pWnd->iFirstCol + pWnd->iWidth - pWnd->iRightMargin - 1;
         }
         return iWindow;
      }
   }

   if( fRelative )
   {
      *piTop = *piLeft = *piBottom = *piRight = 0;
   }
   else
   {
      *piTop = *piLeft = 0;
      *piBottom = HB_GTSELF_MAXROW( pGT );
      *piRight  = HB_GTSELF_MAXCOL( pGT );
   }

   return -1;
}
ctwin.c775
STATIC INThb_ctw_AddWindowBox( PHB_GT pGT, int iWindow, BYTE * szBox, int iColor )
static int hb_ctw_AddWindowBox( PHB_GT pGT, int iWindow, BYTE * szBox, int iColor )
{
   int iMaxRow, iMaxCol;

   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_AddWindowBox(%p,%d,%p,%d)", pGT, iWindow, szBox, iColor));

   iMaxRow = HB_GTSELF_MAXROW( pGT );
   iMaxCol = HB_GTSELF_MAXCOL( pGT );

   if( iMaxRow > 1 && iMaxCol > 1 )
   {
      if( iColor == 0 )
         iColor = HB_GTSELF_GETCOLOR( pGT );
      HB_GTSELF_BOX( pGT, 0, 0, iMaxRow, iMaxCol, szBox, ( BYTE ) iColor );
      if( iWindow > 0 && iWindow <= s_iOpenWindows &&
          s_windows[ iWindow ] != NULL )
      {
         HB_GTSELF_SETPOS( pGT, 0, 0 );
         hb_ctw_ChangeMargins( pGT, iWindow, 1, 1, 1, 1 );
      }
      else
         HB_GTSELF_SETPOS( pGT, 1, 1 );

      return 0;
   }

   return -1;
}
ctwin.c819
STATIC VOIDhb_ctw_gt_Init( PHB_GT pGT, HB_FHANDLE hFilenoStdin, HB_FHANDLE hFilenoStdout, HB_FHANDLE hFilenoStderr )
static void hb_ctw_gt_Init( PHB_GT pGT, HB_FHANDLE hFilenoStdin, HB_FHANDLE hFilenoStdout, HB_FHANDLE hFilenoStderr )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_gt_Init(%p,%p,%p,%p)", pGT, hFilenoStdin, hFilenoStdout, hFilenoStderr));

   HB_GTSUPER_INIT( pGT, hFilenoStdin, hFilenoStdout, hFilenoStderr );

   s_fInit = TRUE;
}
ctwin.c850
STATIC VOIDhb_ctw_gt_Exit( PHB_GT pGT )
static void hb_ctw_gt_Exit( PHB_GT pGT )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_gt_Exit(%p)", pGT));

   if( s_iMaxWindow > 0 )
   {
      hb_ctw_CloseAllWindows( pGT );

      hb_xfree( s_windows );
      hb_xfree( s_windowStack );
      hb_xfree( s_pWindowMap );
      hb_xfree( s_pShadowMap );
      s_windows = NULL;
      s_windowStack = NULL;
      s_pWindowMap = s_pShadowMap = NULL;
      s_iMaxWindow = s_iOpenWindows = s_iCurrWindow =
      s_iMapWidth = s_iMapHeight = 0;
      s_fBoardSet = s_fInit = FALSE;
   }

   HB_GTSUPER_EXIT( pGT );
}
ctwin.c859
STATIC INThb_ctw_MouseRow( PHB_GT pGT )
static int hb_ctw_MouseRow( PHB_GT pGT )
{
   int iRow;

   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_MouseRow(%p)", pGT));

   iRow = HB_GTSUPER_MOUSEROW( pGT );

   if( s_iCurrWindow > 0 )
      iRow -= s_windows[ s_iCurrWindow ]->iFirstRow +
              s_windows[ s_iCurrWindow ]->iTopMargin;

   return iRow;
}
ctwin.c882
STATIC INThb_ctw_MouseCol( PHB_GT pGT )
static int hb_ctw_MouseCol( PHB_GT pGT )
{
   int iCol;

   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_MouseCol(%p)", pGT));

   iCol = HB_GTSUPER_MOUSECOL( pGT );

   if( s_iCurrWindow > 0 )
      iCol -= s_windows[ s_iCurrWindow ]->iFirstCol +
              s_windows[ s_iCurrWindow ]->iLeftMargin;

   return iCol;
}
ctwin.c897
STATIC VOIDhb_ctw_gt_GetPos( PHB_GT pGT, int * piRow, int * piCol )
static void hb_ctw_gt_GetPos( PHB_GT pGT, int * piRow, int * piCol )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_gt_GetPos(%p,%p,%p)", pGT, piRow, piCol));

   if( s_iCurrWindow > 0 )
   {
      *piRow = s_windows[ s_iCurrWindow ]->iRow;
      *piCol = s_windows[ s_iCurrWindow ]->iCol;
   }
   else
      HB_GTSUPER_GETPOS( pGT, piRow, piCol );
}
ctwin.c912
STATIC VOIDhb_ctw_gt_SetPos( PHB_GT pGT, int iRow, int iCol )
static void hb_ctw_gt_SetPos( PHB_GT pGT, int iRow, int iCol )
{
   int iHeight, iWidth;

   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_gt_GetPos(%p,%d,%d)", pGT, iRow, iCol));

   iHeight = HB_GTSELF_MAXROW( pGT ) + 1;
   iWidth = HB_GTSELF_MAXCOL( pGT ) + 1;

   if( iCol > iWidth )
      iCol = iWidth;
   else if( iCol < 0 )
   {
      iRow += iCol / iWidth - 1;
      iCol = iWidth + iCol % iWidth;
   }
   if( iRow > iHeight )
      iRow = iHeight;

   if( s_iCurrWindow > 0 )
   {
      if( iRow < - s_windows[ s_iCurrWindow ]->iTopMargin )
         iRow = - s_windows[ s_iCurrWindow ]->iTopMargin;
      s_windows[ s_iCurrWindow ]->iRow = iRow;
      s_windows[ s_iCurrWindow ]->iCol = iCol;
   }
   else
   {
      if( iRow < 0 )
         iRow = 0;
      HB_GTSUPER_SETPOS( pGT, iRow, iCol );
   }
}
ctwin.c925
STATIC INThb_ctw_gt_MaxCol( PHB_GT pGT )
static int hb_ctw_gt_MaxCol( PHB_GT pGT )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_gt_MaxCol(%p)", pGT));

   if( s_iCurrWindow > 0 )
      return s_windows[ s_iCurrWindow ]->iWidth -
             s_windows[ s_iCurrWindow ]->iLeftMargin -
             s_windows[ s_iCurrWindow ]->iRightMargin - 1;
   else
      return HB_GTSUPER_MAXCOL( pGT );
}
ctwin.c964
STATIC INThb_ctw_gt_MaxRow( PHB_GT pGT )
static int hb_ctw_gt_MaxRow( PHB_GT pGT )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_gt_MaxRow(%p)", pGT));

   if( s_iCurrWindow > 0 )
      return s_windows[ s_iCurrWindow ]->iHeight -
             s_windows[ s_iCurrWindow ]->iTopMargin -
             s_windows[ s_iCurrWindow ]->iBottomMargin - 1;
   else
      return HB_GTSUPER_MAXROW( pGT );
}
ctwin.c976
STATIC VOIDhb_ctw_gt_WriteCon( PHB_GT pGT, BYTE * pText, ULONG ulLength )
static void hb_ctw_gt_WriteCon( PHB_GT pGT, BYTE * pText, ULONG ulLength )
{
   int iLen = 0;
   BOOL bDisp = FALSE;
   BOOL bBell = FALSE;
   int iRow, iCol, iMaxRow, iMaxCol;
   BYTE szString[ WRITECON_BUFFER_SIZE ];

   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_gt_WriteCon(%p,%p,%lu)", pGT, pText, ulLength));

   iMaxRow = HB_GTSELF_MAXROW( pGT );
   iMaxCol = HB_GTSELF_MAXCOL( pGT );

   HB_GTSELF_GETPOS( pGT, &iRow, &iCol );

   if( iRow > iMaxRow || iCol > iMaxCol )
   {
      if( iRow > iMaxRow )
         iRow = iMaxRow;
      if( iCol > iMaxCol )
         iCol = iMaxCol;
      HB_GTSELF_SETPOS( pGT, iRow, iCol );
   }

   while( ulLength-- )
   {
      BYTE ch = *pText++;

      switch( ch )
      {
         case HB_CHAR_BEL:
            bDisp = bBell = TRUE;
            break;

         case HB_CHAR_BS:
            if( iCol > 0 )
            {
               --iCol;
               bDisp = TRUE;
            }
            else if( iRow > 0 )
            {
               iCol = iMaxCol;
               --iRow;
               bDisp = TRUE;
            }
            if( bDisp )
            {
               if( iLen )
                  szString[ iLen - 1 ] = ' ';
               else
               {
                  HB_GTSELF_SETPOS( pGT, iRow, iCol );
                  szString[ iLen++ ] = ' ';
               }
            }
            break;

         case HB_CHAR_LF:
            iCol = 0;
            ++iRow;
            bDisp = TRUE;
            break;

         case HB_CHAR_CR:
            iCol = 0;
            if( *pText == HB_CHAR_LF )
            {
               ++iRow;
               ++pText;
               --ulLength;
            }
            bDisp = TRUE;
            break;

         default:
            szString[ iLen++ ] = ch;
            if( ++iCol > iMaxCol )
            {
               iCol = 0;
               ++iRow;
               bDisp = TRUE;
            }
            else if( iLen >= WRITECON_BUFFER_SIZE )
               bDisp = TRUE;
      }

      if( bDisp || ulLength == 0 )
      {
         if( iLen )
            HB_GTSELF_WRITE( pGT, szString, iLen );

         iLen = 0;
         if( iRow > iMaxRow )
         {
            HB_GTSELF_SCROLL( pGT, 0, 0, iMaxRow, iMaxCol,
                              ( BYTE ) HB_GTSELF_GETCOLOR( pGT ),
                              ( BYTE ) HB_GTSELF_GETCLEARCHAR( pGT ),
                          iRow - iMaxRow, 0 );
            iRow = iMaxRow;
            iCol = 0;
         }
         HB_GTSELF_SETPOS( pGT, iRow, iCol );
         bDisp = FALSE;

         /* To emulate scrolling */
         HB_GTSELF_FLUSH( pGT );

         if( bBell )
         {
            HB_GTSELF_BELL( pGT );
            bBell = FALSE;
         }
      }
   }
}
ctwin.c994
STATIC INThb_ctw_gt_GetCursorStyle( PHB_GT pGT )
static int hb_ctw_gt_GetCursorStyle( PHB_GT pGT )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_gt_GetCursorStyle(%p)", pGT));

   if( s_iCurrWindow > 0 )
      return s_windows[ s_iCurrWindow ]->iCursorStyle;
   else
      return HB_GTSUPER_GETCURSORSTYLE( pGT );
}
ctwin.c1112
STATIC VOIDhb_ctw_gt_SetCursorStyle( PHB_GT pGT, int iStyle )
static void hb_ctw_gt_SetCursorStyle( PHB_GT pGT, int iStyle )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_gt_SetCursorStyle(%p,%d)", pGT, iStyle));

   if( s_iCurrWindow > 0 )
   {
      switch( iStyle )
      {
         case SC_NONE:
         case SC_NORMAL:
         case SC_INSERT:
         case SC_SPECIAL1:
         case SC_SPECIAL2:
            s_windows[ s_iCurrWindow ]->iCursorStyle = iStyle;
            break;
         default:
            s_windows[ s_iCurrWindow ]->iCursorStyle = SC_NORMAL;
            break;
      }
   }
   else
      HB_GTSUPER_SETCURSORSTYLE( pGT, iStyle );
}
ctwin.c1122
STATIC VOIDhb_ctw_gt_GetColorStr( PHB_GT pGT, char * pszColorString )
static void hb_ctw_gt_GetColorStr( PHB_GT pGT, char * pszColorString )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_gt_GetColorStr(%p,%p)", pGT, pszColorString));

   if( s_iCurrWindow > 0 )
   {
      PHB_CT_WND pWnd = s_windows[ s_iCurrWindow ];
      HB_GTSUPER_COLORSTOSTRING( pGT, pWnd->piColors, pWnd->iColorCount, pszColorString, HB_CLRSTR_LEN );
   }
   else
      HB_GTSUPER_GETCOLORSTR( pGT, pszColorString );
}
ctwin.c1146
STATIC VOIDhb_ctw_gt_SetColorStr( PHB_GT pGT, const char * szColorString )
static void hb_ctw_gt_SetColorStr( PHB_GT pGT, const char * szColorString )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_gt_SetColorStr(%p,%s)", pGT, szColorString));

   if( s_iCurrWindow > 0 )
   {
      PHB_CT_WND pWnd = s_windows[ s_iCurrWindow ];
      HB_GTSUPER_STRINGTOCOLORS( pGT, szColorString, &pWnd->piColors, &pWnd->iColorCount );
      pWnd->iColorIndex = HB_CLR_STANDARD;
   }
   else
      HB_GTSUPER_SETCOLORSTR( pGT, szColorString );
}
ctwin.c1159
STATIC VOIDhb_ctw_gt_ColorSelect( PHB_GT pGT, int iColorIndex )
static void hb_ctw_gt_ColorSelect( PHB_GT pGT, int iColorIndex )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_gt_ColorSelect(%p,%d)", pGT, iColorIndex));

   if( s_iCurrWindow > 0 )
   {
      PHB_CT_WND pWnd = s_windows[ s_iCurrWindow ];
      if( iColorIndex >= 0 && iColorIndex < pWnd->iColorCount )
         pWnd->iColorIndex = iColorIndex;
   }
   else
      HB_GTSUPER_COLORSELECT( pGT, iColorIndex );
}
ctwin.c1173
STATIC INThb_ctw_gt_GetColor( PHB_GT pGT )
static int hb_ctw_gt_GetColor( PHB_GT pGT )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_gt_GetColor(%p)", pGT));

   if( s_iCurrWindow > 0 )
   {
      PHB_CT_WND pWnd = s_windows[ s_iCurrWindow ];
      return pWnd->piColors[ pWnd->iColorIndex ];
   }
   else
      return HB_GTSUPER_GETCOLOR( pGT );
}
ctwin.c1187
STATIC VOIDhb_ctw_gt_GetColorData( PHB_GT pGT, int ** pColorsPtr, int * piColorCount, int * piColorIndex )
static void hb_ctw_gt_GetColorData( PHB_GT pGT, int ** pColorsPtr, int * piColorCount, int * piColorIndex )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_gt_GetColor(%p,%p,%p,%p)", pGT, pColorsPtr, piColorCount, piColorIndex));

   if( s_iCurrWindow > 0 )
   {
      PHB_CT_WND pWnd = s_windows[ s_iCurrWindow ];

      *pColorsPtr = ( int * ) hb_xgrab( pWnd->iColorCount * sizeof( int ) );
      memcpy( *pColorsPtr, pWnd->piColors, pWnd->iColorCount * sizeof( int ) );
      *piColorCount = pWnd->iColorCount;
      *piColorIndex = pWnd->iColorIndex;
   }
   else
      HB_GTSUPER_GETCOLORDATA( pGT, pColorsPtr, piColorCount, piColorIndex );
}
ctwin.c1200
STATIC VOIDhb_ctw_gt_GetScrCursor( PHB_GT pGT, int * piRow, int * piCol, int * piStyle )
static void hb_ctw_gt_GetScrCursor( PHB_GT pGT, int * piRow, int * piCol, int * piStyle )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_gt_GetScrCursor(%p,%p,%p,%p)", pGT, piRow, piCol, piStyle));

   HB_GTSUPER_GETSCRCURSOR( pGT, piRow, piCol, piStyle );
   if( s_iCurrWindow > 0 )
   {
      *piRow += s_windows[ s_iCurrWindow ]->iFirstRow +
                s_windows[ s_iCurrWindow ]->iTopMargin;
      *piCol += s_windows[ s_iCurrWindow ]->iFirstCol +
                s_windows[ s_iCurrWindow ]->iLeftMargin;
      if( *piStyle != SC_NONE &&
          ( *piRow < s_iBoardTop  || *piRow > s_iBoardBottom ||
            *piCol < s_iBoardLeft || *piCol > s_iBoardRight ) )
         *piStyle = SC_NONE;
   }
}
ctwin.c1217
STATIC BOOLhb_ctw_gt_GetScrChar( PHB_GT pGT, int iRow, int iCol, BYTE * pbColor, BYTE * pbAttr, USHORT * pusChar )
static BOOL hb_ctw_gt_GetScrChar( PHB_GT pGT, int iRow, int iCol,
                                  BYTE * pbColor, BYTE * pbAttr, USHORT * pusChar )
{
   int iWindow = s_iCurrWindow, iShadow = 0;

   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_gt_GetScrChar(%p,%d,%d,%p,%p,%p)", pGT, iRow, iCol, pbColor, pbAttr, pusChar));

   if( s_iOpenWindows > 0 )
   {
      if( iRow < s_iBoardTop  || iRow > s_iBoardBottom ||
          iCol < s_iBoardLeft || iCol > s_iBoardRight )
         iWindow = 0;
      else
      {
         long lIndex = ( long ) iRow * s_iMapWidth + iCol;
         iWindow = s_pWindowMap[ lIndex ];
         iShadow = s_pShadowMap[ lIndex ];
      }
   }

   if( iWindow > 0 )
   {
      iRow -= s_windows[ iWindow ]->iFirstRow;
      iCol -= s_windows[ iWindow ]->iFirstCol;
      if( iCol >= 0 && iRow >= 0 && iRow < s_windows[ iWindow ]->iHeight &&
          iCol < s_windows[ iWindow ]->iWidth )
      {
         long lIndex = ( long ) iRow * s_windows[ iWindow ]->iWidth + iCol;
         *pusChar = s_windows[ iWindow ]->screenBuffer[ lIndex ].c.usChar;
         *pbColor = s_windows[ iWindow ]->screenBuffer[ lIndex ].c.bColor;
         *pbAttr  = s_windows[ iWindow ]->screenBuffer[ lIndex ].c.bAttr;
      }
      else
         return FALSE;
   }
   else if( ! HB_GTSUPER_GETSCRCHAR( pGT, iRow, iCol, pbColor, pbAttr, pusChar ) )
      return FALSE;

   if( iShadow > 0 )
   {
      if( s_windows[ iShadow ]->iShadowAttr >= 0 )
         *pbColor = ( BYTE ) s_windows[ iShadow ]->iShadowAttr;
      *pbAttr |= HB_GT_ATTR_SHADOW;
   }

   return TRUE;
}
ctwin.c1235
STATIC BOOLhb_ctw_gt_GetChar( PHB_GT pGT, int iRow, int iCol, BYTE * pbColor, BYTE * pbAttr, USHORT * pusChar )
static BOOL hb_ctw_gt_GetChar( PHB_GT pGT, int iRow, int iCol,
                               BYTE * pbColor, BYTE * pbAttr, USHORT * pusChar )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_gt_GetChar(%p,%d,%d,%p,%p,%p)", pGT, iRow, iCol, pbColor, pbAttr, pusChar));

   if( s_iCurrWindow == 0 )
      /* TODO: it may badly interacts with character translations */
      return HB_GTSELF_GETSCRCHAR( pGT, iRow, iCol, pbColor, pbAttr, pusChar );

   iRow += s_windows[ s_iCurrWindow ]->iTopMargin;
   iCol += s_windows[ s_iCurrWindow ]->iLeftMargin;

   if( iCol >= 0 && iRow >= 0 &&
       iRow < s_windows[ s_iCurrWindow ]->iHeight &&
       iCol < s_windows[ s_iCurrWindow ]->iWidth )
   {
      long lIndex = ( long ) iRow * s_windows[ s_iCurrWindow ]->iWidth + iCol;
      *pusChar = s_windows[ s_iCurrWindow ]->screenBuffer[ lIndex ].c.usChar;
      *pbColor = s_windows[ s_iCurrWindow ]->screenBuffer[ lIndex ].c.bColor;
      *pbAttr  = s_windows[ s_iCurrWindow ]->screenBuffer[ lIndex ].c.bAttr;
      return TRUE;
   }

   return FALSE;
}
ctwin.c1283
STATIC BOOLhb_ctw_gt_PutChar( PHB_GT pGT, int iRow, int iCol, BYTE bColor, BYTE bAttr, USHORT usChar )
static BOOL hb_ctw_gt_PutChar( PHB_GT pGT, int iRow, int iCol,
                               BYTE bColor, BYTE bAttr, USHORT usChar )
{
   int iWindow = s_iCurrWindow;

   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_gt_PutChar(%p,%d,%d,%d,%d,%hu)", pGT, iRow, iCol, (int)bColor, (int)bAttr, (int)usChar));

   if( s_iOpenWindows > 0 && iWindow == 0 )
   {
      if( iRow >= s_iBoardTop  && iRow <= s_iBoardBottom &&
          iCol >= s_iBoardLeft && iCol <= s_iBoardRight )
      {
         long lIndex = ( long ) iRow * s_iMapWidth + iCol;
         iWindow = s_pWindowMap[ lIndex ];
#if 0
         /* When window with shadow is closed CT3 restores attributes
          * which existed before shadow was displayed. In some application
          * which switches to window 0 for pass-throw output it causes that
          * wrong attributes appears after this operation. In Harbour it's
          * fixed so such problem do not exist. Anyhow some code may switch
          * to window 0, make savescreen()/restscreen() and in such case
          * all shadow attributes are copied to window 0 buffer. The code
          * below is workaround for it. [druzus]
          */
         if( s_pShadowMap[ lIndex ] != 0 )
         {
            int iShadow = s_pShadowMap[ lIndex ];
            if( s_windows[ iShadow ]->iShadowAttr >= 0 &&
                ( BYTE ) s_windows[ iShadow ]->iShadowAttr == bColor )
            {
               BYTE bClr, bAtr;
               USHORT usCh;
               if( HB_GTSELF_GETSCRCHAR( pGT, iRow, iCol, &bClr, &bAtr, &usCh ) )
               {
                  if( usCh == usChar && bClr == bColor )
                     return TRUE;
               }
            }
         }
#endif
         s_pShadowMap[ lIndex ] = 0;
      }
   }

   if( iWindow > 0 )
   {
      int iWndRow, iWndCol, iWndHeight, iWndWidth;

      if( s_iCurrWindow == 0 )
      {
         iWndRow = iRow - s_windows[ iWindow ]->iFirstRow;
         iWndCol = iCol - s_windows[ iWindow ]->iFirstCol;
         iWndHeight = s_windows[ iWindow ]->iWidth;
         iWndWidth  = s_windows[ iWindow ]->iWidth;
      }
      else
      {
         iWndRow = iRow + s_windows[ iWindow ]->iTopMargin;
         iWndCol = iCol + s_windows[ iWindow ]->iLeftMargin;
         iRow = iWndRow + s_windows[ iWindow ]->iFirstRow;
         iCol = iWndCol + s_windows[ iWindow ]->iFirstCol;
         iWndHeight = s_windows[ iWindow ]->iHeight -
                      s_windows[ iWindow ]->iBottomMargin;
         iWndWidth  = s_windows[ iWindow ]->iWidth -
                      s_windows[ iWindow ]->iRightMargin;
      }
      if( iWndCol >= 0 && iWndRow >= 0 &&
          iWndRow < iWndHeight &&
          iWndCol < iWndWidth )
      {
         long lIndex = ( long ) iWndRow * s_windows[ iWindow ]->iWidth + iWndCol;

         s_windows[ iWindow ]->screenBuffer[ lIndex ].c.usChar = usChar;
         s_windows[ iWindow ]->screenBuffer[ lIndex ].c.bColor = bColor;
         s_windows[ iWindow ]->screenBuffer[ lIndex ].c.bAttr  = bAttr;
         if( ! s_windows[ iWindow ]->fHidden )
         {
            if( s_iCurrWindow == 0 )
               HB_GTSUPER_TOUCHCELL( pGT, iRow, iCol );
            else if( iRow >= s_iBoardTop  && iRow <= s_iBoardBottom &&
                     iCol >= s_iBoardLeft && iCol <= s_iBoardRight )
               HB_GTSUPER_TOUCHCELL( pGT, iRow, iCol );
         }
         return TRUE;
      }
      return FALSE;
   }

   return HB_GTSUPER_PUTCHAR( pGT, iRow, iCol, bColor, bAttr, usChar );
}
ctwin.c1309
STATIC BOOLhb_ctw_gt_Resize( PHB_GT pGT, int iRows, int iCols )
static BOOL hb_ctw_gt_Resize( PHB_GT pGT, int iRows, int iCols )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_gt_Resize(%p,%d,%d)", pGT, iRows, iCols));

   if( HB_GTSUPER_RESIZE( pGT, iRows, iCols ) )
   {
      if( s_iMaxWindow > 0 )
      {
         ULONG ulSize;

         s_iMapHeight = iRows;
         s_iMapWidth  = iCols;
         s_iShadowWidth = hb_ctw_CalcShadowWidth( s_iMapHeight, s_iMapWidth );
         ulSize = ( ULONG ) s_iMapHeight * s_iMapWidth * sizeof( int );
         s_pWindowMap = ( int * ) hb_xrealloc( s_pWindowMap, ulSize );
         s_pShadowMap = ( int * ) hb_xrealloc( s_pShadowMap, ulSize );
      }
      if( s_fBoardSet )
         hb_ctw_SetWindowBoard( pGT, 0, 0, iRows - 1, iCols - 1 );
      return TRUE;
   }
   return FALSE;
}
ctwin.c1400
STATIC BOOLhb_ctw_gt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
static BOOL hb_ctw_gt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_gt_Info(%p,%d,%p)", pGT, iType, pInfo));

   switch ( iType )
   {
      case HB_GTI_ISCTWIN:
         pInfo->pResult = hb_itemPutL( pInfo->pResult, TRUE );
         break;

      case HB_GTI_NEWWIN:
      {
         BOOL fResult;

         hb_ctw_SelectWindow( pGT, 0 );
         fResult = HB_GTSUPER_INFO( pGT, iType, pInfo );

         if( fResult && hb_arrayLen( pInfo->pResult ) >= 8 )
            hb_itemPutNI( hb_arrayGetItemPtr( pInfo->pResult, 8 ),
                          s_iCurrWindow );
         return fResult;
      }
      case HB_GTI_GETWIN:
      {
         BOOL fResult;
         int iWindow = s_iCurrWindow;

         hb_ctw_SelectWindow( pGT, 0 );
         fResult = HB_GTSUPER_INFO( pGT, iType, pInfo );
         if( fResult && hb_arrayLen( pInfo->pResult ) >= 8 )
            hb_itemPutNI( hb_arrayGetItemPtr( pInfo->pResult, 8 ), iWindow );
         return fResult;
      }
      case HB_GTI_SETWIN:
      {
         BOOL fResult;

         hb_ctw_SelectWindow( pGT, 0 );
         fResult = HB_GTSUPER_INFO( pGT, iType, pInfo );
         if( hb_arrayLen( pInfo->pNewVal ) == 8 )
            hb_ctw_SelectWindow( pGT, hb_arrayGetNI( pInfo->pNewVal, 8 ) );
         return fResult;
      }
      default:
         return HB_GTSUPER_INFO( pGT, iType, pInfo );
   }

   return TRUE;
}
ctwin.c1424
STATIC INThb_ctw_gt_Alert( PHB_GT pGT, PHB_ITEM pMessage, PHB_ITEM pOptions, int iClrNorm, int iClrHigh, double dDelay )
static int hb_ctw_gt_Alert( PHB_GT pGT, PHB_ITEM pMessage, PHB_ITEM pOptions,
                            int iClrNorm, int iClrHigh, double dDelay )
{
   int iOptions, iRet = 0;

   HB_TRACE( HB_TR_DEBUG, ("hb_ctw_gt_Alert(%p,%p,%p,%d,%d,%f)", pGT, pMessage, pOptions, iClrNorm, iClrHigh, dDelay ) );

   iOptions = ( int ) hb_arrayLen( pOptions );

   if( HB_IS_STRING( pMessage ) && iOptions > 0 )
   {
      int iRows, iCols;
      BOOL fScreen;

      HB_GTSELF_GETSIZE( pGT, &iRows, &iCols );
      if( iCols <= 4 || iRows <= 4 )
         fScreen = FALSE;
      else
      {
         HB_GT_INFO gtInfo;
         gtInfo.pNewVal = gtInfo.pResult = NULL;
         HB_GTSELF_INFO( pGT, HB_GTI_FULLSCREEN, >Info );
         fScreen = gtInfo.pResult && hb_itemGetL( gtInfo.pResult );
         HB_GTSELF_INFO( pGT, HB_GTI_KBDSUPPORT, >Info );
         if( gtInfo.pResult )
         {
            if( !hb_itemGetL( gtInfo.pResult ) )
               fScreen = FALSE;
            hb_itemRelease( gtInfo.pResult );
         }
      }
      if( fScreen )
      {
         ULONG ulWidth = 0, ulCurrWidth = 0, ul = 0, ul2, ulMaxWidth, ulLast;
         int iKey, iDspCount, iLines = 0, iTop, iLeft, iBottom, iRight,
             iMnuCol, iPos, iClr, iWnd, i;
         char * szMessage = hb_itemGetCPtr( pMessage );
         ULONG ulLen = hb_itemGetCLen( pMessage );

         ulMaxWidth = iCols - 4;
         while( ul < ulLen )
         {
            if( szMessage[ ul ] == '\n' )
            {
               ++iLines;
               if( ulCurrWidth > ulWidth )
                  ulWidth = ulCurrWidth;
               ulCurrWidth = 0;
            }
            else
               ++ulCurrWidth;
            ++ul;
         }
         if( ulCurrWidth )
            ++iLines;
         if( ulCurrWidth > ulWidth )
            ulWidth = ulCurrWidth;
         ulCurrWidth = 0;
         for( i = 1; i <= iOptions; ++i )
         {
            ulCurrWidth += hb_arrayGetCLen( pOptions, i ) + ( i > 1 ? 3 : 0 );
         }
         if( ulCurrWidth > ulWidth )
            ulWidth = ulCurrWidth;
         if( ulWidth > ulMaxWidth )
            ulWidth = ulMaxWidth;
         if( iRows < iLines + 4 )
            iLines = iRows - 4;
         iTop = ( iRows - iLines - 4 ) >> 1;
         iLeft = ( iCols - ulWidth - 4 ) >> 1;
         iBottom = iTop + iLines + 3;
         iRight = iLeft + ulWidth + 3;
         if( iClrNorm == 0 )
            iClrNorm = 79;
         if( iClrHigh == 0 )
            iClrHigh = 31;

         iDspCount = HB_GTSELF_DISPCOUNT( pGT );
         if( iDspCount == 0 )
            HB_GTSELF_DISPBEGIN( pGT );

         iWnd = hb_ctw_CreateWindow( pGT, iTop, iLeft, iBottom, iRight, TRUE, iClrNorm );
         hb_ctw_AddWindowBox( pGT, iWnd, ( BYTE * ) _B_SINGLE, iClrNorm );
         HB_GTSELF_SETCURSORSTYLE( pGT, SC_NONE );
         ulLast = 0;
         i = 0;
         for( ul = 0; ul < ulLen; ++ul )
         {
            if( szMessage[ ul ] == '\n' )
            {
               if( ul > ulLast )
               {
                  ul2 = ul - ulLast;
                  if( ul2 > ulWidth )
                     ul2 = ulWidth;
                  HB_GTSELF_PUTTEXT( pGT, i, ( ( ulWidth - ul2 + 1 ) >> 1 ) + 1, ( BYTE ) iClrNorm,
                                     ( BYTE * ) szMessage + ulLast, ul2 );
               }
               ulLast = ul + 1;
               if( ++i >= iLines )
                  break;
            }
         }
         if( ul > ulLast && i < iLines )
         {
            ul2 = ul - ulLast;
            if( ul2 > ulWidth )
               ul2 = ulWidth;
            HB_GTSELF_PUTTEXT( pGT, i, ( ( ulWidth - ul2 + 1 ) >> 1 ) + 1, ( BYTE ) iClrNorm,
                               ( BYTE * ) szMessage + ulLast, ul2 );
         }

         iPos = 1;
         while( iRet == 0 )
         {
            HB_GTSELF_DISPBEGIN( pGT );
            iMnuCol = ( ( ulWidth - ulCurrWidth ) >> 1 ) + 1;
            for( i = 1; i <= iOptions; ++i )
            {
               iClr = i == iPos ? iClrHigh : iClrNorm;
               ulLen = hb_arrayGetCLen( pOptions, i );
               HB_GTSELF_PUTTEXT( pGT, iLines + 1, iMnuCol, ( BYTE ) iClr,
                                  ( BYTE * ) hb_arrayGetCPtr( pOptions, i ), ulLen );
               iMnuCol += ulLen + 3;
            }
            while( HB_GTSELF_DISPCOUNT( pGT ) )
               HB_GTSELF_DISPEND( pGT );
            HB_GTSELF_REFRESH( pGT );

            iKey = HB_GTSELF_INKEYGET( pGT, TRUE, dDelay, INKEY_ALL );
            /* TODO: add support for SET KEY blocks */

            if( iKey == K_ESC )
               break;
            else if( iKey == K_ENTER || iKey == K_SPACE || iKey == 0 )
            {
               iRet = iPos;
            }
            else if( iKey == K_LEFT || iKey == K_SH_TAB )
            {
               if( --iPos == 0 )
                  iPos = iOptions;
               dDelay = 0.0;
            }
            else if( iKey == K_RIGHT || iKey == K_TAB )
            {
               if( ++iPos > iOptions )
                  iPos = 1;
               dDelay = 0.0;
            }
#ifdef HB_COMPAT_C53
            else if( iKey == K_LBUTTONDOWN )
            {
               int iMRow = HB_GTSELF_MOUSEROW( pGT ),
                   iMCol = HB_GTSELF_MOUSECOL( pGT );
               if( iMRow == iLines + 1 )
               {
                  iMnuCol = ( ( ulWidth - ulCurrWidth ) >> 1 ) + 1;
                  for( i = 1; i <= iOptions; ++i )
                  {
                     ulLen = hb_arrayGetCLen( pOptions, i );
                     if( iMCol >= iMnuCol && iMCol < iMnuCol + ( int ) ulLen )
                     {
                        iRet = i;
                        break;
                     }
                     iMnuCol += ulLen + 3;
                  }
               }
            }
#endif
            else if( iKey >= 32 && iKey <= 255 )
            {
               int iUp = hb_charUpper( iKey );
               for( i = 1; i <= iOptions; ++i )
               {
                  char *szValue = hb_arrayGetCPtr( pOptions, i );
                  if( szValue && iUp == hb_charUpper( *szValue ) )
                  {
                     iRet = i;
                     break;
                  }
               }
            }
         }

         hb_ctw_CloseWindow( pGT, iWnd );
         HB_GTSELF_REFRESH( pGT );

         while( HB_GTSELF_DISPCOUNT( pGT ) < iDspCount )
            HB_GTSELF_DISPBEGIN( pGT );

         return iRet;
      }
   }

   return HB_GTSUPER_ALERT( pGT, pMessage, pOptions, iClrNorm, iClrHigh, dDelay );
}
ctwin.c1474
STATIC INThb_ctw_gt_ReadKey( PHB_GT pGT, int iEventMask )
static int hb_ctw_gt_ReadKey( PHB_GT pGT, int iEventMask )
{
   int iKey;

   HB_TRACE(HB_TR_DEBUG, ("hb_ctw_gt_ReadKey(%p,%d)", pGT, iEventMask));

   iKey = HB_GTSUPER_READKEY( pGT, iEventMask );

   if( iKey != 0 )
      s_iLastKey = iKey;

   return iKey;
}
ctwin.c1673
BOOLhb_ctwInit( void )
BOOL hb_ctwInit( void )
{
   PHB_GT pGT = hb_gt_Base();
   BOOL fResult = FALSE;
   if( pGT )
   {
      fResult = hb_ctw_Init( pGT );
      hb_gt_BaseFree( pGT );
   }
   return fResult;
}
ctwin.c1689
INThb_ctwSetShadowAttr( int iAttr )
int  hb_ctwSetShadowAttr( int iAttr )
{
   PHB_GT pGT = hb_gt_Base();
   int iResult = -1;
   if( pGT )
   {
      iResult = hb_ctw_SetShadowAttr( pGT, iAttr );
      hb_gt_BaseFree( pGT );
   }
   return iResult;
}
ctwin.c1701
INThb_ctwSetMoveMode( int iMode )
int  hb_ctwSetMoveMode( int iMode )
{
   PHB_GT pGT = hb_gt_Base();
   int iResult = -1;
   if( pGT )
   {
      iResult = hb_ctw_SetMoveMode( pGT, iMode );
      hb_gt_BaseFree( pGT );
   }
   return iResult;
}
ctwin.c1713
INThb_ctwSetMoveStep( int iVertical, int iHorizontal )
int  hb_ctwSetMoveStep( int iVertical, int iHorizontal )
{
   PHB_GT pGT = hb_gt_Base();
   int iResult = -1;
   if( pGT )
   {
      iResult = hb_ctw_SetMoveStep( pGT, iVertical, iHorizontal );
      hb_gt_BaseFree( pGT );
   }
   return iResult;
}
ctwin.c1725
INThb_ctwSetWindowBoard( int iTop, int iLeft, int iBottom, int iRight )
int  hb_ctwSetWindowBoard( int iTop, int iLeft, int iBottom, int iRight )
{
   PHB_GT pGT = hb_gt_Base();
   int iResult = -1;
   if( pGT )
   {
      iResult = hb_ctw_SetWindowBoard( pGT, iTop, iLeft, iBottom, iRight );
      HB_GTSELF_FLUSH( pGT );
      hb_gt_BaseFree( pGT );
   }
   return iResult;
}
ctwin.c1737
INThb_ctwSetBorderMode( int iTop, int iLeft, int iBottom, int iRight )
int  hb_ctwSetBorderMode( int iTop, int iLeft, int iBottom, int iRight )
{
   PHB_GT pGT = hb_gt_Base();
   int iResult = -1;
   if( pGT )
   {
      iResult = hb_ctw_SetBorderMode( pGT, iTop, iLeft, iBottom, iRight );
      hb_gt_BaseFree( pGT );
   }
   return iResult;
}
ctwin.c1750
INThb_ctwCreateWindow( int iTop, int iLeft, int iBottom, int iRight, BOOL fClear, int iColor )
int  hb_ctwCreateWindow( int iTop, int iLeft, int iBottom, int iRight, BOOL fClear, int iColor )
{
   PHB_GT pGT = hb_gt_Base();
   int iResult = -1;
   if( pGT )
   {
      iResult = hb_ctw_CreateWindow( pGT, iTop, iLeft, iBottom, iRight, fClear, iColor );
      HB_GTSELF_FLUSH( pGT );
      hb_gt_BaseFree( pGT );
   }
   return iResult;
}
ctwin.c1762
INThb_ctwCloseAllWindows( void )
int  hb_ctwCloseAllWindows( void )
{
   PHB_GT pGT = hb_gt_Base();
   int iResult = -1;
   if( pGT )
   {
      iResult = hb_ctw_CloseAllWindows( pGT );
      HB_GTSELF_FLUSH( pGT );
      hb_gt_BaseFree( pGT );
   }
   return iResult;
}
ctwin.c1775
INThb_ctwCloseWindow( int iWindow )
int  hb_ctwCloseWindow( int iWindow )
{
   PHB_GT pGT = hb_gt_Base();
   int iResult = -1;
   if( pGT )
   {
      iResult = hb_ctw_CloseWindow( pGT, iWindow );
      HB_GTSELF_FLUSH( pGT );
      hb_gt_BaseFree( pGT );
   }
   return iResult;
}
ctwin.c1788
INThb_ctwCurrentWindow( void )
int  hb_ctwCurrentWindow( void )
{
   PHB_GT pGT = hb_gt_Base();
   int iResult = 0;
   if( pGT )
   {
      iResult = hb_ctw_CurrentWindow( pGT );
      hb_gt_BaseFree( pGT );
   }
   return iResult;
}
ctwin.c1801
INThb_ctwSelectWindow( int iWindow )
int  hb_ctwSelectWindow( int iWindow )
{
   PHB_GT pGT = hb_gt_Base();
   int iResult = 0;
   if( pGT )
   {
      iResult = hb_ctw_SelectWindow( pGT, iWindow );
      HB_GTSELF_FLUSH( pGT );
      hb_gt_BaseFree( pGT );
   }
   return iResult;
}
ctwin.c1813
INThb_ctwMaxWindow( void )
int  hb_ctwMaxWindow( void )
{
   PHB_GT pGT = hb_gt_Base();
   int iResult = 0;
   if( pGT )
   {
      iResult = hb_ctw_MaxWindow( pGT );
      hb_gt_BaseFree( pGT );
   }
   return iResult;
}
ctwin.c1826
INThb_ctwChangeMargins( int iWindow, int iTop, int iLeft, int iBottom, int iRight )
int  hb_ctwChangeMargins( int iWindow, int iTop, int iLeft, int iBottom, int iRight )
{
   PHB_GT pGT = hb_gt_Base();
   int iResult = -1;
   if( pGT )
   {
      iResult = hb_ctw_ChangeMargins( pGT, iWindow, iTop, iLeft, iBottom, iRight );
      hb_gt_BaseFree( pGT );
   }
   return iResult;
}
ctwin.c1838
INThb_ctwGetWindowCords( int iWindow, BOOL fCenter, int * piTop, int * piLeft, int * piBottom, int * piRight )
int  hb_ctwGetWindowCords( int iWindow, BOOL fCenter, int * piTop, int * piLeft, int * piBottom, int * piRight )
{
   PHB_GT pGT = hb_gt_Base();
   int iResult = -1;
   if( pGT )
   {
      iResult = hb_ctw_GetWindowCords( pGT, iWindow, fCenter, piTop, piLeft, piBottom, piRight );
      hb_gt_BaseFree( pGT );
   }
   return iResult;
}
ctwin.c1850
INThb_ctwGetFormatCords( int iWindow, BOOL fRelative, int * piTop, int * piLeft, int * piBottom, int * piRight )
int  hb_ctwGetFormatCords( int iWindow, BOOL fRelative, int * piTop, int * piLeft, int * piBottom, int * piRight )
{
   PHB_GT pGT = hb_gt_Base();
   int iResult = -1;
   if( pGT )
   {
      iResult = hb_ctw_GetFormatCords( pGT, iWindow, fRelative, piTop, piLeft, piBottom, piRight );
      hb_gt_BaseFree( pGT );
   }
   return iResult;
}
ctwin.c1862
INThb_ctwMoveWindow( int iWindow, int iRow, int iCol )
int  hb_ctwMoveWindow( int iWindow, int iRow, int iCol )
{
   PHB_GT pGT = hb_gt_Base();
   int iResult = -1;
   if( pGT )
   {
      iResult = hb_ctw_MoveWindow( pGT, iWindow, iRow, iCol );
      hb_gt_BaseFree( pGT );
   }
   return iResult;
}
ctwin.c1874
INThb_ctwCenterWindow( int iWindow, BOOL fCenter )
int  hb_ctwCenterWindow( int iWindow, BOOL fCenter )
{
   PHB_GT pGT = hb_gt_Base();
   int iResult = -1;
   if( pGT )
   {
      iResult = hb_ctw_CenterWindow( pGT, iWindow, fCenter );
      hb_gt_BaseFree( pGT );
   }
   return iResult;
}
ctwin.c1886
INThb_ctwAddWindowBox( int iWindow, BYTE * szBox, int iColor )
int  hb_ctwAddWindowBox( int iWindow, BYTE * szBox, int iColor )
{
   PHB_GT pGT = hb_gt_Base();
   int iResult = -1;
   if( pGT )
   {
      iResult = hb_ctw_AddWindowBox( pGT, iWindow, szBox, iColor );
      HB_GTSELF_FLUSH( pGT );
      hb_gt_BaseFree( pGT );
   }
   return iResult;
}
ctwin.c1898
INThb_ctwLastKey( void )
int  hb_ctwLastKey( void )
{
   /* keyread() in CT3 uses 64512 bytes length buffer
    * when it reach this limit and new key is added the
    * buffer size is decreased by 1024 to 63488 bytes
    * before adding key. TODO: check id buffer is shifted
    */
   if( !s_fInit )
   {
      PHB_GT pGT = hb_gt_Base();
      if( pGT )
      {
         hb_ctw_Init( pGT );
         hb_gt_BaseFree( pGT );
      }
   }
   return s_iLastKey;
}
ctwin.c1911
STATIC BOOLhb_gt_FuncInit( PHB_GT_FUNCS pFuncTable )
static BOOL hb_gt_FuncInit( PHB_GT_FUNCS pFuncTable )
{
   HB_TRACE(HB_TR_DEBUG, ("hb_gt_FuncInit(%p)", pFuncTable));

   pFuncTable->Init                       = hb_ctw_gt_Init;
   pFuncTable->Exit                       = hb_ctw_gt_Exit;
   pFuncTable->MouseRow                   = hb_ctw_MouseRow;
   pFuncTable->MouseCol                   = hb_ctw_MouseCol;
   pFuncTable->MaxCol                     = hb_ctw_gt_MaxCol;
   pFuncTable->MaxRow                     = hb_ctw_gt_MaxRow;
   pFuncTable->GetPos                     = hb_ctw_gt_GetPos;
   pFuncTable->SetPos                     = hb_ctw_gt_SetPos;
   pFuncTable->WriteCon                   = hb_ctw_gt_WriteCon;
   pFuncTable->GetCursorStyle             = hb_ctw_gt_GetCursorStyle;
   pFuncTable->SetCursorStyle             = hb_ctw_gt_SetCursorStyle;
   pFuncTable->GetColorStr                = hb_ctw_gt_GetColorStr;
   pFuncTable->SetColorStr                = hb_ctw_gt_SetColorStr;
   pFuncTable->ColorSelect                = hb_ctw_gt_ColorSelect;
   pFuncTable->GetColor                   = hb_ctw_gt_GetColor;
   pFuncTable->GetColorData               = hb_ctw_gt_GetColorData;
   pFuncTable->GetScrCursor               = hb_ctw_gt_GetScrCursor;
   pFuncTable->GetScrChar                 = hb_ctw_gt_GetScrChar;
   pFuncTable->GetChar                    = hb_ctw_gt_GetChar;
   pFuncTable->PutChar                    = hb_ctw_gt_PutChar;
   pFuncTable->Resize                     = hb_ctw_gt_Resize;
   pFuncTable->Info                       = hb_ctw_gt_Info;
   pFuncTable->Alert                      = hb_ctw_gt_Alert;
   pFuncTable->ReadKey                    = hb_ctw_gt_ReadKey;

   return TRUE;
}

/* ********************************************************************** */

static const HB_GT_INIT gtInit = { HB_GT_DRVNAME( HB_GT_NAME ),
                                   hb_gt_FuncInit,
                                   HB_GTSUPER,
                                   HB_GTID_PTR };

HB_GT_ANNOUNCE( HB_GT_NAME )

HB_CALL_ON_STARTUP_BEGIN( _hb_startup_gt_Init_ )
   hb_gtRegister( >Init );
HB_CALL_ON_STARTUP_END( _hb_startup_gt_Init_ )

#if defined( HB_PRAGMA_STARTUP )
   #pragma startup _hb_startup_gt_Init_
#elif defined( HB_MSC_STARTUP )
   #if defined( HB_OS_WIN_64 )
      #pragma section( HB_MSC_START_SEGMENT, long, read )
   #endif
   #pragma data_seg( HB_MSC_START_SEGMENT )
   static HB_$INITSYM hb_vm_auto__hb_startup_gt_Init_ = _hb_startup_gt_Init_;
ctwin.c1930
cursor.c
TypeFunctionSourceLine
HB_FUNCSAVECURSOR(void)
HB_FUNC( SAVECURSOR )
{
   SHORT sRow, sCol;
   USHORT usCursor;

   hb_gtGetPos( &sRow, &sCol );
   hb_gtGetCursor( &usCursor );

#ifdef HB_C52_STRICT 
   usCursor = ( usCursor != 0 );
#endif
   hb_retnl( ( long ) sCol | ( sRow << 8 ) | ( usCursor << 16 ) );
}
cursor.c58
HB_FUNCRESTCURSOR(void)
HB_FUNC( RESTCURSOR )
{
   long lCursor = hb_parnl( 1 );

   hb_gtSetPos( ( SHORT ) ( ( lCursor >> 8 ) & 0xff ), ( SHORT ) ( lCursor & 0xff ) );
#ifdef HB_C52_STRICT 
   hb_gtSetCursor( ( USHORT ) ( ( lCursor >> 16 ) & 0x01 ) );
#else
   hb_gtSetCursor( ( USHORT ) ( ( lCursor >> 16 ) & 0xff ) );
#endif

   hb_retc( NULL );
}
cursor.c73
datetime.c
TypeFunctionSourceLine
HB_FUNCBOM(void)
HB_FUNC( BOM )
{
   LONG lDate;
   int iYear, iMonth, iDay;

   if( ISNIL( 1 ) )
   {
      hb_dateToday( &iYear, &iMonth, &iDay );
      lDate = hb_dateEncode( iYear, iMonth, iDay );
   }
   else
   {
      lDate = hb_pardl( 1 );
   }

   if( lDate != 0 )
   {
      hb_dateDecode( lDate, &iYear, &iMonth, &iDay );
      hb_retd( iYear, iMonth, 1 );
   }
   else
   {
      hb_retdl( 0 );
   }
}
datetime.c101
HB_FUNCEOM(void)
HB_FUNC( EOM )
{
   LONG lDate;
   int iYear, iMonth, iDay;

   if( ISNIL( 1 ) )
   {
      hb_dateToday( &iYear, &iMonth, &iDay );
      lDate = hb_dateEncode( iYear, iMonth, iDay );
   }
   else
   {
      lDate = hb_pardl( 1 );
   }

   if( lDate != 0 )
   {
      hb_dateDecode( lDate, &iYear, &iMonth, &iDay );
      iMonth++;
      if( iMonth > 12 )
      {
         iMonth = 1;
         iYear++;
      }
      hb_retdl( hb_dateEncode( iYear, iMonth, 1 ) - 1 );
   }
   else
   {
      hb_retdl( 0 );
   }
}
datetime.c156
HB_FUNCBOQ(void)
HB_FUNC( BOQ )
{
   LONG lDate;
   int iYear, iMonth, iDay;

   if( ISNIL( 1 ) )
   {
      hb_dateToday( &iYear, &iMonth, &iDay );
      lDate = hb_dateEncode( iYear, iMonth, iDay );
   }
   else
   {
      lDate = hb_pardl( 1 );
   }

   if( lDate != 0 )
   {
      hb_dateDecode( lDate, &iYear, &iMonth, &iDay );
      iMonth -= ( iMonth - 1 ) % 3;

      hb_retd( iYear, iMonth, 1 );
   }
   else
   {
      hb_retdl( 0 );
   }
}
datetime.c217
HB_FUNCEOQ(void)
HB_FUNC( EOQ )
{
   LONG lDate;
   int iYear, iMonth, iDay;

   if( ISNIL( 1 ) )
   {
      hb_dateToday( &iYear, &iMonth, &iDay );
      lDate = hb_dateEncode( iYear, iMonth, iDay );
   }
   else
   {
      lDate = hb_pardl( 1 );
   }

   if( lDate != 0 )
   {

      hb_dateDecode( lDate, &iYear, &iMonth, &iDay );
      iMonth += 3 - ( ( iMonth - 1 ) % 3 );
      if( iMonth > 12 )
      {
         iMonth = 1;
         iYear++;
      }
      hb_retdl( hb_dateEncode( iYear, iMonth, 1 ) - 1 );
   }
   else
   {
      hb_retdl( 0 );
   }
}
datetime.c274
HB_FUNCBOY(void)
HB_FUNC( BOY )
{
   LONG lDate;
   int iYear, iMonth, iDay;

   if( ISNIL( 1 ) )
   {
      hb_dateToday( &iYear, &iMonth, &iDay );
      lDate = hb_dateEncode( iYear, iMonth, iDay );
   }
   else
   {
      lDate = hb_pardl( 1 );
   }

   if( lDate != 0 )
   {
      hb_dateDecode( lDate, &iYear, &iMonth, &iDay );
      hb_retd( iYear, 1, 1 );
   }
   else
   {
      hb_retdl( 0 );
   }
}
datetime.c336
HB_FUNCEOY(void)
HB_FUNC( EOY )
{
   LONG lDate;
   int iYear, iMonth, iDay;

   if( ISNIL( 1 ) )
   {
      hb_dateToday( &iYear, &iMonth, &iDay );
      lDate = hb_dateEncode( iYear, iMonth, iDay );
   }
   else
   {
      lDate = hb_pardl( 1 );
   }

   if( lDate != 0 )
   {
      hb_dateDecode( lDate, &iYear, &iMonth, &iDay );
      hb_retdl( hb_dateEncode( iYear + 1, 1, 1 ) - 1 );
   }
   else
   {
      hb_retdl( 0 );
   }
}
datetime.c391
STATIC INThb_wom( int iYear, int iMonth, int iDay )
static int hb_wom( int iYear, int iMonth, int iDay )
{
   int iWom;

   HB_TRACE( HB_TR_DEBUG, ( "hb_wom(%d, %d, %d)", iYear, iMonth, iDay ) );

   iWom = iDay + hb_dateDOW( iYear, iMonth, 1 ) - 1;
   if( iWom > 0 )
      return ( iWom - hb_dateDOW( iYear, iMonth, iDay ) ) / 7 + 1;
   else
      return 0;
}
datetime.c418
HB_FUNCWOM(void)
HB_FUNC( WOM )
{
   LONG lDate;
   int iYear, iMonth, iDay;

   if( ISNIL( 1 ) )
   {
      hb_dateToday( &iYear, &iMonth, &iDay );
      lDate = hb_dateEncode( iYear, iMonth, iDay );
   }
   else
   {
      lDate = hb_pardl( 1 );
   }

   if( lDate != 0 )
   {
      hb_dateDecode( lDate, &iYear, &iMonth, &iDay );
      hb_retni( hb_wom( iYear, iMonth, iDay ) );
   }
   else
   {
      hb_retni( 0 );
   }
}


datetime.c431
HB_FUNCSTOD(void)
HB_FUNC( STOD )
{
   hb_retds( hb_parclen( 1 ) >= 7 ? hb_parc( 1 ) : NULL );
}
datetime.c487
dattime2.c
TypeFunctionSourceLine
STATIC BOOLct_isleap( int iYear )
static BOOL ct_isleap( int iYear )
{
   return ( ( ( iYear & 3 ) == 0 && iYear % 100 != 0 ) || iYear % 400 == 0 );
}
dattime2.c73
STATIC INTct_daysinmonth( int iMonth, BOOL bLeap )
static int ct_daysinmonth( int iMonth, BOOL bLeap )
{
   if( iMonth == 2 )
   {
      return ( bLeap ? 29 : 28 );
   }
   else if( iMonth == 4 || iMonth == 6 || iMonth == 9 || iMonth == 11 )
   {
      return ( 30 );
   }
   else
   {
      return ( 31 );
   }
}
dattime2.c78
STATIC INTct_daystomonth( int iMonth, BOOL bLeap )
static int ct_daystomonth( int iMonth, BOOL bLeap )
{
   static const int iMonthes[] =
               { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };

   return ( ( iMonth < 1 && iMonth > 12 ) ? 0 : iMonthes[iMonth - 1] +
            ( ( bLeap && iMonth > 2 ) ? 1 : 0 ) );
}
dattime2.c94
STATIC INTct_doy( LONG lDate )
static int ct_doy( LONG lDate )
{
   int iYear, iMonth, iDay;
   LONG lFirst;

   hb_dateDecode( lDate, &iYear, &iMonth, &iDay );
   lFirst = hb_dateEncode( iYear, 1, 1 );
   return ( int ) ( lDate - lFirst + 1 );
}
dattime2.c103
HB_FUNCCTODOW(void)
HB_FUNC( CTODOW )
{
   if( ISCHAR( 1 ) )
   {
      char *szParam = hb_parc( 1 ), *szDow;
      int iDow, iEqual;

      hb_strupr( szParam );

      for( iDow = 0; iDow < 7; iDow++ )
      {
         szDow = hb_strdup( ( char * ) hb_langDGetItem( HB_LANG_ITEM_BASE_DAY + iDow ) );
         hb_strupr( szDow );

         if( hb_setGetL( HB_SET_EXACT ) )
         {
            iEqual = ( strlen( szDow ) == strlen( szParam ) )
               && !memcmp( szDow, szParam, strlen( szParam ) );
         }
         else
         {
            iEqual = !memcmp( szDow, szParam, strlen( szParam ) );
         }

         hb_xfree( szDow );
         if( iEqual )
         {
            break;
         }
      }

      if( iDow == 7 )
      {
         hb_retni( 0 );
      }
      else
      {
         hb_retnl( iDow + 1 );
      }

   }
   else
   {
      hb_retni( 0 );
   }
}
dattime2.c114
HB_FUNCCTOMONTH(void)
HB_FUNC( CTOMONTH )
{
   if( ISCHAR( 1 ) )
   {
      char *szParam = hb_parc( 1 ), *szMonth;
      int iMonth, iEqual;

      hb_strupr( szParam );

      for( iMonth = 1; iMonth <= 12; iMonth++ )
      {
         szMonth = hb_strdup( ( char * ) hb_langDGetItem( HB_LANG_ITEM_BASE_MONTH + iMonth - 1 ) );
         hb_strupr( szMonth );

         if( hb_setGetL( HB_SET_EXACT ) )
         {
            iEqual = ( strlen( szMonth ) == strlen( szParam ) )
               && !memcmp( szMonth, szParam, strlen( szParam ) );
         }
         else
         {
            iEqual = !memcmp( szMonth, szParam, strlen( szParam ) );
         }

         hb_xfree( szMonth );
         if( iEqual )
         {
            break;
         }
      }

      if( iMonth > 12 )
      {
         iMonth = 0;
      }
      hb_retnl( iMonth );

   }
   else
   {
      hb_retni( 0 );
   }
}
dattime2.c189
HB_FUNCDMY(void)
HB_FUNC( DMY )
{
   int iYear, iMonth, iDay;
   BOOL bMode = FALSE;

   if( ISDATE( 1 ) )
   {
      PHB_ITEM pDate = hb_param( 1, HB_IT_DATE );

      hb_dateDecode( hb_itemGetDL( pDate ), &iYear, &iMonth, &iDay );
   }
   else
   {
      hb_dateToday( &iYear, &iMonth, &iDay );
   }

   if( ISLOG( 2 ) )
   {
      bMode = hb_parl( 2 );
   }

   if( iMonth >= 1 && iMonth <= 12 )
   {
      char *szMonth = ( char * ) hb_langDGetItem( HB_LANG_ITEM_BASE_MONTH + iMonth - 1 );
      int iMonLen = strlen( szMonth );
      int iLen = 0, iBufLen = iMonLen + 10;
      char *szMDY = ( char * ) hb_xgrab( iBufLen );

      if( iDay < 10 )
      {
         szMDY[iLen] = ( char ) iDay + 0x30;
         iLen++;
      }
      else
      {
         snprintf( szMDY + iLen, 3, "%02d", iDay );
         iLen += 2;
      }

      if( bMode )
      {
         szMDY[iLen] = '.';
         iLen++;
      }
      szMDY[iLen] = ' ';
      iLen++;

      hb_strncpy( szMDY + iLen, szMonth, iBufLen - iLen - 1 );
      iLen += iMonLen;
      szMDY[iLen] = ' ';
      iLen++;

      if( hb_setGetCentury() )
      {
         snprintf( szMDY + iLen, 5, "%04d", iYear );
         iLen += 4;
      }
      else
      {
         snprintf( szMDY + iLen, 3, "%02d", iYear % 100 );
         iLen += 2;
      }

      hb_retclen( szMDY, iLen );
      hb_xfree( szMDY );
   }
   else
   {
      hb_retc( NULL );
   }
}
dattime2.c261
HB_FUNCMDY(void)
HB_FUNC( MDY )
{
   int iYear, iMonth, iDay;

   if( ISDATE( 1 ) )
   {
      PHB_ITEM pDate = hb_param( 1, HB_IT_DATE );

      hb_dateDecode( hb_itemGetDL( pDate ), &iYear, &iMonth, &iDay );
   }
   else
   {
      hb_dateToday( &iYear, &iMonth, &iDay );
   }

   if( iMonth >= 1 && iMonth <= 12 )
   {
      char *szMonth = ( char * ) hb_langDGetItem( HB_LANG_ITEM_BASE_MONTH + iMonth - 1 );
      int iLen = strlen( szMonth );
      int iBufLen = iLen + 9;
      char *szMDY = ( char * ) hb_xgrab( iBufLen );

      hb_strncpy( szMDY, szMonth, iBufLen - 1 );
      szMDY[iLen++] = ' ';
      if( iDay < 10 )
      {
         szMDY[iLen] = ( char ) iDay + 0x30;
         iLen++;
      }
      else
      {
         snprintf( szMDY + iLen, 3, "%02d", iDay );
         iLen += 2;
      }
      szMDY[iLen++] = ' ';

      if( hb_setGetCentury() )
      {
         snprintf( szMDY + iLen, 5, "%04d", iYear );
         iLen += 4;
      }
      else
      {
         snprintf( szMDY + iLen, 3, "%02d", iYear % 100 );
         iLen += 2;
      }

      hb_retclen( szMDY, iLen );
      hb_xfree( szMDY );
   }
   else
   {
      hb_retc( NULL );
   }
}
dattime2.c363
HB_FUNCADDMONTH(void)
HB_FUNC( ADDMONTH )
{
   int iYear, iMonth, iDay, iNum, iDays;

   if( ISDATE( 1 ) )
   {
      PHB_ITEM pDate = hb_param( 1, HB_IT_DATE );

      hb_dateDecode( hb_itemGetDL( pDate ), &iYear, &iMonth, &iDay );
      iNum = hb_parni( 2 );
   }
   else if( ISNUM( 1 ) )
   {
      iNum = hb_parni( 1 );
      hb_dateToday( &iYear, &iMonth, &iDay );
   }
   else
   {
      hb_retdl( 0 );
      return;
   }

   iMonth += iNum;
   while( iMonth <= 0 )
   {
      iMonth += 12;
      iYear--;
   }
   while( iMonth > 12 )
   {
      iMonth -= 12;
      iYear++;
   }

   iDays = ct_daysinmonth( iMonth, ct_isleap( iYear ) );
   if( iDay > iDays )
   {
      iDay = iDays;
   }

   hb_retd( iYear, iMonth, iDay );
}
dattime2.c476
HB_FUNCDOY(void)
HB_FUNC( DOY )
{
   LONG lDate;
   PHB_ITEM pDate = hb_param( 1, HB_IT_DATE );

   if( pDate )
   {
      lDate = hb_itemGetDL( pDate );
   }
   else
   {
      int iYear, iMonth, iDay;

      hb_dateToday( &iYear, &iMonth, &iDay );
      lDate = hb_dateEncode( iYear, iMonth, iDay );
   }

   hb_retni( ct_doy( lDate ) );
}
dattime2.c520
HB_FUNCISLEAP(void)
HB_FUNC( ISLEAP )
{
   int iYear, iMonth, iDay;
   PHB_ITEM pDate = hb_param( 1, HB_IT_DATE );

   if( pDate && hb_itemGetDL( pDate ) )
   {
      hb_dateDecode( hb_itemGetDL( pDate ), &iYear, &iMonth, &iDay );
   }
   else
   {
      hb_dateToday( &iYear, &iMonth, &iDay );
   }

   hb_retl( ct_isleap( iYear ) );
}
dattime2.c569
HB_FUNCDAYSTOMONTH(void)
HB_FUNC( DAYSTOMONTH )
{
   int iMonth = ( ISNUM( 1 ) ? hb_parni( 1 ) : 0 );
   BOOL bLeap = ( ISLOG( 2 ) ? hb_parl( 2 ) : 0 );

   hb_retni( ct_daystomonth( iMonth, bLeap ) );
}
dattime2.c613
HB_FUNCDAYSINMONTH(void)
HB_FUNC( DAYSINMONTH )
{
   int iMonth = ( ISNUM( 1 ) ? hb_parni( 1 ) : 0 );
   BOOL bLeap = ( ISLOG( 2 ) ? hb_parl( 2 ) : 0 );

   hb_retni( ct_daysinmonth( iMonth, bLeap ) );

}
dattime2.c651
HB_FUNCQUARTER(void)
HB_FUNC( QUARTER )
{
   int iYear, iMonth, iDay;
   PHB_ITEM pDate = hb_param( 1, HB_IT_DATE );

   if( pDate )
   {
      if( hb_itemGetDL( pDate ) )
      {
         hb_dateDecode( hb_itemGetDL( pDate ), &iYear, &iMonth, &iDay );
      }
      else
      {
         hb_retni( 0 );
         return;
      }
   }
   else
   {
      hb_dateToday( &iYear, &iMonth, &iDay );
   }

   hb_retni( ( iMonth + 2 ) / 3 );
}
dattime2.c688
HB_FUNCLASTDAYOM(void)
HB_FUNC( LASTDAYOM )
{
   BOOL bLeap = 0;
   int iYear, iMonth, iDay;

   if( ISDATE( 1 ) )
   {
      PHB_ITEM pDate = hb_param( 1, HB_IT_DATE );
      LONG lDate = hb_itemGetDL( pDate );

      if( lDate )
      {
         hb_dateDecode( lDate, &iYear, &iMonth, &iDay );
      }
      else
      {
         hb_dateToday( &iYear, &iMonth, &iDay );
      }
      bLeap = ct_isleap( iYear );
   }
   else if( ISNUM( 1 ) )
   {
      iMonth = hb_parni( 1 );
   }
   else
   {
      iMonth = 0;
   }

   hb_retni( ( iMonth && ( iMonth <= 12 ) ? ct_daysinmonth( iMonth, bLeap ) : 0 ) );

}
dattime2.c742
HB_FUNCNTOCDOW(void)
HB_FUNC( NTOCDOW )
{
   hb_retc( hb_dateCDOW( hb_parni( 1 ) ) );
}
dattime2.c806
HB_FUNCNTOCMONTH(void)
HB_FUNC( NTOCMONTH )
{
   hb_retc( hb_dateCMonth( hb_parni( 1 ) ) );
}
dattime2.c839
HB_FUNCWEEK(void)
HB_FUNC( WEEK )
{
   int iYear, iMonth, iDay, iWeek;
   PHB_ITEM pDate = hb_param( 1, HB_IT_DATE );
   LONG lDate = 0;
   BOOL bSWN = ( ISLOG( 2 ) ? hb_parl( 2 ) : FALSE );

   if( ISDATE( 1 ) )
   {
      lDate = hb_itemGetDL( pDate );
      if( !lDate )
      {
         hb_retni( 0 );
         return;
      }
   }

   if( lDate )
   {
      hb_dateDecode( lDate, &iYear, &iMonth, &iDay );
   }
   else
   {
      hb_dateToday( &iYear, &iMonth, &iDay );
      lDate = hb_dateEncode( iYear, iMonth, iDay );
   }

   if( bSWN )
   {
      int iDays = ct_daystomonth( iMonth, ct_isleap( iYear ) ) + iDay;
      int iPart = ( iDays % 7 );

      iWeek = iDays / 7;
      if( iPart > 0 )
         iWeek++;
   }
   else
   {
      LONG lDate2;

      if( hb_setGetCPtr( HB_SET_DATEFORMAT ) && ( hb_setGetCPtr( HB_SET_DATEFORMAT )[0] == 'd' ||
                                                  hb_setGetCPtr( HB_SET_DATEFORMAT )[0] == 'D' ) )
         lDate2 = lDate + 3 - ( hb_dateDOW( iYear, iMonth, iDay ) + 5 ) % 7;
      else
         lDate2 = lDate + 4 - hb_dateDOW( iYear, iMonth, iDay );

      iWeek = ( ct_doy( lDate2 ) - 1 ) / 7 + 1;
   }

   hb_retni( iWeek );
}
dattime2.c872
dattime3.c
TypeFunctionSourceLine
HB_FUNCWAITPERIOD(void)
HB_FUNC( WAITPERIOD )
{
   double d = hb_dateSeconds();

   if( hb_pcount() > 0 )
   {
      s_dTimeSet = d;
      s_dTimeCounter = d + hb_parnd( 1 )  / 100.0;
   }

   if( d < s_dTimeSet )
      d += 86400.0;

   hb_retl( d < s_dTimeCounter );
}
dattime3.c124
STATIC BOOL_hb_timeValid( char * szTime, ULONG ulLen, int * piDecode )
static BOOL _hb_timeValid( char * szTime, ULONG ulLen, int * piDecode )
{
   BOOL fValid = FALSE;

   if( ulLen == 2 || ulLen == 5 || ulLen == 8 || ulLen == 11 )
   {
      static const int s_iMax[] = { 23, 59, 59, 99 };
      int i, iVal;
      ULONG ul;

      fValid = TRUE;
      for( ul = 0; fValid && ul < ulLen; ++ul )
      {
         fValid = ul % 3 == 2 ? szTime[ul] == ':' :
                  ( szTime[ul] >= '0' && szTime[ul] <= '9' );
      }
      for( ul = 0, i = 0; fValid && ul < ulLen; ul += 3, ++i )
      {
         iVal = 10 * ( szTime[ul] - '0' ) + ( szTime[ul + 1] - '0' );
         fValid = iVal <= s_iMax[i];
         if( piDecode )
            piDecode[i] = iVal;
      }
   }

   return fValid;
}
dattime3.c140
HB_FUNCTIMEVALID(void)
HB_FUNC( TIMEVALID )
{
   hb_retl( _hb_timeValid( hb_parc( 1 ), hb_parclen( 1 ), NULL ) );
}
dattime3.c229
HB_FUNCSETTIME(void)
HB_FUNC( SETTIME )
{
   BOOL fResult = FALSE;
   int iTime[4];

   iTime[0] = iTime[1] = iTime[2] = iTime[3] = 0;
   if( _hb_timeValid( hb_parc( 1 ), hb_parclen( 1 ), iTime ) )
   {
#if defined(HB_OS_WIN_32)
      SYSTEMTIME st;
      GetLocalTime( &st );
      st.wHour         = ( WORD ) iTime[0];
      st.wMinute       = ( WORD ) iTime[1];
      st.wSecond       = ( WORD ) iTime[2];
      st.wMilliseconds = ( WORD ) iTime[3] * 10;
      fResult = SetLocalTime( &st );
#elif defined( HB_OS_LINUX ) && !defined( __WATCOMC__ )
/* stime exists only in SVr4, SVID, X/OPEN and Linux */
      ULONG lNewTime;
      time_t tm;

      lNewTime = iTime[0] * 3600 + iTime[1] * 60 + iTime[2];
      tm = time( NULL );
      tm += lNewTime - ( tm % 86400 );
      fResult = stime( &tm ) == 0;
#endif
   }

   hb_retl( fResult );
}
dattime3.c286
HB_FUNCSETDATE(void)
HB_FUNC( SETDATE )
{
   BOOL fResult = FALSE;
   long lDate = hb_pardl( 1 );

   if( lDate )
   {
      int iYear, iMonth, iDay;

      hb_dateDecode( lDate, &iYear, &iMonth, &iDay );
      if( iYear >= 1970 )
      {
#if defined(HB_OS_WIN_32)
         SYSTEMTIME st;
         GetLocalTime( &st );
         st.wYear      = ( WORD ) iYear;
         st.wMonth     = ( WORD ) iMonth;
         st.wDay       = ( WORD ) iDay;
         st.wDayOfWeek = ( WORD ) hb_dateJulianDOW( lDate );
         fResult = SetLocalTime( &st );
#elif defined( HB_OS_LINUX ) && !defined( __WATCOMC__ )
/* stime exists only in SVr4, SVID, X/OPEN and Linux */
         long lNewDate;
         time_t tm;

         lNewDate = lDate - hb_dateEncode( 1970, 1, 1 );
         tm = time( NULL );
         tm = lNewDate * 86400 + ( tm % 86400 );
         fResult = stime( &tm ) == 0;
#endif
      }
   }

   hb_retl( fResult );
}
dattime3.c368
dbftools.c
TypeFunctionSourceLine
HB_FUNCFIELDSIZE(void)
HB_FUNC( FIELDSIZE )
{
   HB_FUNC_EXEC( FIELDLEN );
}
dbftools.c63
HB_FUNCFIELDDECI(void)
HB_FUNC( FIELDDECI )
{
   HB_FUNC_EXEC( FIELDDEC );
}
dbftools.c68
HB_FUNCFIELDNUM(void)
HB_FUNC( FIELDNUM )
{
   HB_FUNC_EXEC( FIELDPOS );
}
dbftools.c73
HB_FUNCDBFSIZE(void)
HB_FUNC( DBFSIZE )
{
   HB_LONG llSize = 0;
   AREAP pArea;

   if( ( pArea = ( AREAP ) hb_rddGetCurrentWorkAreaPointer() ) != NULL )
   {
      PHB_ITEM pSize = hb_itemNew( NULL );
      ULONG ulRecSize, ulRecCount;

      if( SELF_INFO( pArea, DBI_GETHEADERSIZE, pSize ) == SUCCESS )
      {
         llSize = hb_itemGetNL( pSize ) + 1;
         if( SELF_INFO( pArea, DBI_GETRECSIZE, pSize ) == SUCCESS )
         {
            ulRecSize = hb_itemGetNL( pSize );
            if( SELF_RECCOUNT( pArea, &ulRecCount ) == SUCCESS )
            {
               llSize += ( HB_LONG ) ulRecCount *ulRecSize;
            }
         }
      }
      hb_itemRelease( pSize );
   }

   hb_retnint( llSize );
}
dbftools.c78
disk.c
TypeFunctionSourceLine
HB_FUNCDIRMAKE(void)
HB_FUNC( DIRMAKE )
{
   BYTE *pFileName = ( BYTE * ) hb_parcx( 1 );

   if( hb_fsMkDir( pFileName ) )
   {
      hb_retni( 0 );
   }
   else
   {
      hb_retni( -hb_fsOsError() );
   }
}
disk.c87
HB_FUNCDIRNAME(void)
HB_FUNC( DIRNAME )
{
   BYTE *pbyBuffer = ( BYTE * ) hb_xgrab( _POSIX_PATH_MAX + 1 );

   pbyBuffer[0] = HB_OS_PATH_DELIM_CHR;
   hb_fsCurDirBuff( hb_fsCurDrv(), pbyBuffer + 1, _POSIX_PATH_MAX );

   hb_retc_buffer( ( char * ) pbyBuffer );
}
disk.c101
HB_FUNCDRIVETYPE(void)
HB_FUNC( DRIVETYPE )
{
#if defined(HB_OS_WIN_32)
   ULONG ulSize = hb_parclen( 1 ) + 2;  /* allow space for '\0' & ":\" */
   char *pszDrive = ( char * ) hb_xgrab( ulSize + 1 );
   LPTSTR lpDrive;
   int iType;

   hb_strncpy( pszDrive, ( char * ) hb_parcx( 1 ), ulSize );

   if( strstr( pszDrive, ":" ) == NULL )
      hb_strncat( pszDrive, ":", ulSize );

   if( strstr( pszDrive, "\\" ) == NULL )
      hb_strncat( pszDrive, "\\", ulSize );

   lpDrive = HB_TCHAR_CONVTO( pszDrive );
   switch( GetDriveType( lpDrive ) )
   {
      case DRIVE_RAMDISK:
         iType = 0;           /* RAM Drive - Clipper compatible */
         break;
      case DRIVE_REMOVABLE:
         iType = 2;           /* Floppy Drive - Clipper compatible */
         break;
      case DRIVE_FIXED:
         iType = 3;           /* Hard Drive  - Clipper compatible */
         break;
      case DRIVE_CDROM:
         iType = 4;           /* CD-Rom Drive - xHarbour extension */
         break;
      case DRIVE_REMOTE:
         iType = 5;           /* Network Drive - xHarbour extension */
         break;
      default:
         iType = 9;           /* Unknow Drive - xHarbour extension */
         break;
   }
   hb_retni( iType );
   hb_xfree( pszDrive );
   HB_TCHAR_FREE( lpDrive );
#else
   hb_retni( 9 );
#endif

}
disk.c112
HB_FUNCNUMDISKL(void)
HB_FUNC( NUMDISKL )
{
#if defined( HB_OS_DOS )
#if defined( __DJGPP__ )
   unsigned cur_drive, n_drives;

   _dos_getdrive( &cur_drive );
   _dos_setdrive( cur_drive, &n_drives );
   hb_retni( n_drives );
#else
   /* should be easily implementable somehow similar to DJGPP */
   hb_retni( 26 );
#endif
#elif defined( HB_OS_WIN_32 )
   /* LASTDRIVE does not affect Win32 apps, they always have 26 letters avail */
   hb_retni( 26 );
#else
   /* For Unix, return the most harmless value... or not? */
   hb_retni( 1 );
#endif
}
disk.c160
HB_FUNCVOLUME(void)
HB_FUNC( VOLUME )
{
   BOOL bReturn = FALSE;

   if( !ct_getsafety() )
   {
      PHB_FNAME fname;
      BYTE *sDiskName;
      char *sRoot = NULL;
      char *sVolName = NULL;
      char sRootBuf[4], sVolNameBuf[12];
      BOOL fFree;

      if( ISCHAR( 1 ) && hb_parclen( 1 ) > 0 )
      {
         sDiskName = hb_fsNameConv( ( BYTE * ) hb_parc( 1 ), &fFree );

         if( ( fname = hb_fsFNameSplit( ( char * ) sDiskName ) ) != NULL )
         {
            if( fname->szPath )
            {
               hb_strncpy( sRootBuf, fname->szPath, sizeof( sRootBuf ) - 1 );
               sRoot = sRootBuf;
            }
            if( fname->szName )
            {
               hb_strncpy( sVolNameBuf, fname->szName, sizeof( sVolNameBuf ) - 1 );
               sVolName = sVolNameBuf;
            }

            hb_xfree( fname );
         }
         else
         {
            hb_strncpy( sVolNameBuf, ( char * ) sDiskName, sizeof( sVolNameBuf ) - 1 );
            sVolName = sVolNameBuf;
         }
         if( fFree )
            hb_xfree( sDiskName );
      }
#if defined(HB_OS_WIN_32)
      {
         LPTSTR lpRoot, lpVolName;
         lpRoot = sRoot ? HB_TCHAR_CONVTO( sRoot ) : NULL;
         lpVolName = sVolName ? HB_TCHAR_CONVTO( sVolName ) : NULL;
         bReturn = SetVolumeLabel( lpRoot, lpVolName );
         if( lpRoot )
            HB_TCHAR_FREE( lpRoot );
         if( lpVolName )
            HB_TCHAR_FREE( lpVolName );
      }
#endif
   }
   hb_retl( bReturn );
}
disk.c199
HB_FUNCGETVOLINFO(void)
HB_FUNC( GETVOLINFO )
{
#if defined(HB_OS_WIN_32)
   int iretval;
   char *sDrive = hb_parcx( 1 ), *sVolName;
   TCHAR lpVolName[256];
   LPTSTR lpDrive;

   lpDrive = sDrive[0] ? HB_TCHAR_CONVTO( sDrive ) : NULL;
   iretval = GetVolumeInformation( lpDrive, lpVolName, 256, NULL, NULL, NULL, NULL, 0 );
   if( lpDrive )
      HB_TCHAR_FREE( lpDrive );

   if( iretval != 0 )
   {
      sVolName = HB_TCHAR_CONVFROM( lpVolName );
      hb_retc( sVolName );
      HB_TCHAR_FREE( sVolName );
   }
   else
      hb_retc( NULL );
#endif
}
disk.c255
HB_FUNCVOLSERIAL(void)
HB_FUNC( VOLSERIAL )
{
#if defined(HB_OS_WIN_32)
   int retval;
   char *sDrive = hb_parcx( 1 );
   LPTSTR lpDrive;
   DWORD dSerial;

   lpDrive = sDrive[0] ? HB_TCHAR_CONVTO( sDrive ) : NULL;
   retval = GetVolumeInformation( lpDrive,      /* RootPathName */
                                  NULL,         /* VolumeName */
                                  0,            /* VolumeNameSize */
                                  &dSerial,     /* VolumeSerialNumber */
                                  NULL,         /* MaxComponentLength */
                                  NULL,         /* FileSystemFlags */
                                  NULL,         /* FileSystemName */
                                  0 );          /* FileSystemSize */
   if( lpDrive )
      HB_TCHAR_FREE( lpDrive );

   if( retval != 0 )
      hb_retnint( dSerial );
   else
      hb_retni( -1 );
#endif
}
disk.c298
HB_FUNCTRUENAME(void)
HB_FUNC( TRUENAME )
{
   char *szFile = hb_parc( 1 );

   if( szFile )
   {
#ifdef HB_OS_WIN_32
      char *szBuffRet;
      TCHAR buffer[MAX_PATH + 1] = { 0 };
      LPTSTR lpFile;

      lpFile = HB_TCHAR_CONVTO( szFile );
      GetFullPathName( lpFile, MAX_PATH, buffer, NULL );
      HB_TCHAR_FREE( lpFile );

      szBuffRet = HB_TCHAR_CONVFROM( buffer );
      hb_retc( szBuffRet );
      HB_TCHAR_FREE( szBuffRet );
#else
      hb_retc( szFile );
#endif
   }
   else
      hb_retc( NULL );
}
disk.c325
expand.c
TypeFunctionSourceLine
HB_FUNCEXPAND(void)
HB_FUNC( EXPAND )
{
   ULONG ulLen = hb_parclen( 1 ), ulSize, ul;

   if( ulLen > 0 )
   {
      char * szText = hb_parc( 1 );
      if( ulLen == 1 )
         hb_retclen( szText, 1 );
      else
      {
         char * szDest, *szPtr, cRepl;
         int iRepl, i;

         iRepl = hb_parni( 2 );
         i = hb_pcount();
         if( i == 2 && ISCHAR( 2 ) )
         {
            iRepl = 1;
            cRepl = hb_parc( 2 )[0];
         }
         else if( i == 2 && iRepl == 0 && ISNUM( 2 ) )
         {
            iRepl = 1;
            cRepl = 0;
         }
         else
         {
            if( iRepl < 1 )
               iRepl = 1;
            if( ISNUM( 3 ) )
               cRepl = ( char ) hb_parni( 3 );
            else if( ISCHAR( 3 ) )
               cRepl = hb_parc( 3 )[0];
            else
               cRepl = ' ';
         }
         ulSize = ( ulLen - 1 ) * ( iRepl + 1 ) + 1;
         szPtr = szDest = ( char * ) hb_xgrab( ulSize + 1 );
         *szPtr++ = szText[0];
         for( ul = 1; ul < ulLen; ++ul )
         {
            for( i = 0; i < iRepl; ++i )
               *szPtr++ = cRepl;
            *szPtr++ = szText[ul];
         }
         hb_retclen_buffer( szDest, ulSize );
      }
   }
   else
      hb_retc( NULL );
}
expand.c56
exponent.c
TypeFunctionSourceLine
HB_FUNCMANTISSA(void)
HB_FUNC( MANTISSA )
{

#ifdef CT_EXPONENT_MANTISSA_BIT

   union
   {
      double value;
      char string[sizeof( double )];
   } xConvert;

   xConvert.value = hb_parnd( 1 );

   if( xConvert.value != 0 )
   {
      xConvert.string[6] |= 0xF0;
      xConvert.string[7] |= 0x3F;
      xConvert.string[7] &= 0xBF;
   }

   hb_retnd( xConvert.value );

#else

   double dValue;

   dValue = hb_parnd( 1 );

   if( dValue == 0.0 )
   {
      hb_retnd( 0.0 );
      return;
   }

   if( fabs( dValue ) < 1.0 )
   {
      while( fabs( dValue ) < 1.0 )
         dValue *= 2.0;
   }
   else if( fabs( dValue ) >= 2.0 )
   {
      while( fabs( dValue ) >= 2.0 )
         dValue /= 2.0;
   }
   hb_retnd( dValue );

#endif

}
exponent.c99
HB_FUNCEXPONENT(void)
HB_FUNC( EXPONENT )
{

#ifdef CT_EXPONENT_MANTISSA_BIT

   int iExponent = 0;

   union
   {
      double value;
      char string[sizeof( double )];
   } xConvert;

   xConvert.value = hb_parnd( 1 );

   if( xConvert.value != 0 )
   {
      iExponent = ( int ) ( xConvert.string[7] & 0x07F );
      iExponent = iExponent << 4;
      iExponent += ( int ) ( ( xConvert.string[6] & 0xF0 ) >> 4 );
      iExponent -= 1023;
   }

   hb_retni( iExponent );

#else

   int iExponent = 0;
   double dValue;

   dValue = hb_parnd( 1 );

   if( dValue == 0.0 )
   {
      hb_retni( 0 );
      return;
   }

   if( fabs( dValue ) < 1.0 )
   {
      while( fabs( dValue ) < 1.0 )
      {
         dValue *= 2.0;
         iExponent--;
      }
   }
   else if( fabs( dValue ) >= 2.0 )
   {
      while( fabs( dValue ) >= 2.0 )
      {
         dValue /= 2.0;
         iExponent++;
      }
   }
   hb_retni( iExponent );

#endif

}
exponent.c195
files.c
TypeFunctionSourceLine
STATIC VOID_hb_fileClose( void * cargo )
static void _hb_fileClose( void * cargo )
{
   HB_SYMBOL_UNUSED( cargo );

   if( s_ffind )
   {
      hb_fsFindClose( s_ffind );
      s_ffind = NULL;
   }
}
files.c100
STATIC PHB_FFIND_hb_fileStart( BOOL fNext, ULONG ulAttr )
static PHB_FFIND _hb_fileStart( BOOL fNext, ULONG ulAttr )
{
   if( hb_pcount() > 0 )
   {
      char * szFile = hb_parc( 1 );
      BOOL fFree;

      if( s_ffind )
      {
         hb_fsFindClose( s_ffind );
         s_ffind = NULL;
      }

      if( szFile )
      {
         if( !s_fInit )
         {
            hb_vmAtExit( _hb_fileClose, NULL );
            s_fInit = TRUE;
         }
         szFile = ( char * ) hb_fsNameConv( ( BYTE * ) szFile, &fFree );
         if( ISNUM( 2 ) )
            ulAttr = ( ULONG ) hb_parnl( 2 );
         s_ulAttr = ISLOG( 3 ) && hb_parl( 3 ) ? ulAttr : 0;
         s_ffind = hb_fsFindFirst( szFile, ulAttr );
         if( fFree )
            hb_xfree( szFile );
         while( s_ffind && s_ulAttr && s_ffind->attr != s_ulAttr )
         {
            if( !hb_fsFindNext( s_ffind ) )
            {
               hb_fsFindClose( s_ffind );
               s_ffind = NULL;
            }
         }
      }
   }
   else if( fNext && s_ffind )
   {
      do
      {
         if( !hb_fsFindNext( s_ffind ) )
         {
            hb_fsFindClose( s_ffind );
            s_ffind = NULL;
            break;
         }
      }
      while( s_ulAttr && s_ffind->attr != s_ulAttr );
   }

   return s_ffind;
}
files.c111
HB_FUNCFILESEEK(void)
HB_FUNC( FILESEEK )
{
   PHB_FFIND ffind = _hb_fileStart( TRUE, HB_FA_ALL );

   hb_retc( ffind ? ffind->szName : NULL );
}
files.c165
HB_FUNCFILEATTR(void)
HB_FUNC( FILEATTR )
{
   /* CT3 uses 64 as attribute mask but the idea was setting ALL
    * attributes and because we are supporting more attributes
    * then I decided to use 0xffff value. [druzus]
    */
   PHB_FFIND ffind = _hb_fileStart( FALSE, 0xffff );

   hb_retni( ffind ? ffind->attr : 0 );
}
files.c172
HB_FUNCFILESIZE(void)
HB_FUNC( FILESIZE )
{
   PHB_FFIND ffind = _hb_fileStart( FALSE, HB_FA_ALL );

   hb_retnint( ffind ? ffind->size : -1 );
}
files.c183
HB_FUNCFILEDATE(void)
HB_FUNC( FILEDATE )
{
   PHB_FFIND ffind = _hb_fileStart( FALSE, HB_FA_ALL );

   hb_retdl( ffind ? ffind->lDate : 0 );
}
files.c190
HB_FUNCFILETIME(void)
HB_FUNC( FILETIME )
{
   PHB_FFIND ffind = _hb_fileStart( FALSE, HB_FA_ALL );

   hb_retc( ffind ? ffind->szTime : NULL );
}
files.c197
HB_FUNCSETFATTR(void)
HB_FUNC( SETFATTR )
{
   int iResult;

   if( hb_fsSetAttr( ( BYTE * ) hb_parcx( 1 ),
                        ISNUM( 2 ) ? hb_parnl( 2 ) : HB_FA_ARCHIVE ) )
      iResult = 0;
   else
      iResult = -1;

   hb_retni( iResult );
}
files.c205
HB_FUNCSETFDATI(void)
HB_FUNC( SETFDATI )
{
   if( hb_pcount() >= 1 )
   {
      PHB_ITEM pDate, pTime;
      char *szFile = hb_parcx( 1 );
      int year = 0, month = 0, day = 0, hour = 0, minute = 0, second = 0;

      pDate = hb_param( 2, HB_IT_DATE );
      if( !pDate )
         pDate = hb_param( 3, HB_IT_DATE );
      if( pDate )
         hb_dateDecode( hb_itemGetDL( pDate ), &year, &month, &day );

      pTime = hb_param( 2, HB_IT_STRING );
      if( !pTime )
         pTime = hb_param( 3, HB_IT_STRING );
      if( pTime )
         hb_timeStrGet( hb_itemGetCPtr( pTime ), &hour, &minute, &second, NULL );

#if defined( HB_OS_WIN_32 ) && !defined( __CYGWIN__ )
      {
         FILETIME ft, local_ft;
         SYSTEMTIME st;
         HANDLE f = ( HANDLE ) _lopen( szFile, OF_READWRITE | OF_SHARE_COMPAT );

         if( f != ( HANDLE ) HFILE_ERROR )
         {
            if( !pDate || !pTime )
               GetLocalTime( &st );
            if( pDate )
            {
               st.wYear = ( WORD ) year;
               st.wMonth = ( WORD ) month;
               st.wDay = ( WORD ) day;
            }
            if( pTime )
            {
               st.wHour = ( WORD ) hour;
               st.wMinute = ( WORD ) minute;
               st.wSecond = ( WORD ) second;
            }
            SystemTimeToFileTime( &st, &local_ft );
            LocalFileTimeToFileTime( &local_ft, &ft );
            hb_retl( SetFileTime( f, NULL, &ft, &ft ) );
            _lclose( ( HFILE ) f );
            return;
         }
      }
#elif defined( HB_OS_OS2 )
      {
         FILESTATUS3 fs3;
         APIRET ulrc;

         ulrc = DosQueryPathInfo( szFile, FIL_STANDARD, &fs3, sizeof( fs3 ) );
         if( ulrc == NO_ERROR )
         {
            FDATE fdate;
            FTIME ftime;

            if( !pDate || !pTime )
            {
               DATETIME dt;

               DosGetDateTime( &dt );

               fdate.year = dt.year - 1980;
               fdate.month = dt.month;
               fdate.day = dt.day;
               ftime.hours = dt.hours;
               ftime.minutes = dt.minutes;
               ftime.twosecs = dt.seconds / 2;
            }

            if( pDate )
            {
               fdate.year = year - 1980;
               fdate.month = month;
               fdate.day = day;
            }
            if( pTime )
            {
               ftime.hours = hour;
               ftime.minutes = minute;
               ftime.twosecs = second / 2;
            }
            fs3.fdateCreation = fs3.fdateLastAccess = fs3.fdateLastWrite = fdate;
            fs3.ftimeCreation = fs3.ftimeLastAccess = fs3.ftimeLastWrite = ftime;
            ulrc = DosSetPathInfo( szFile, FIL_STANDARD,
                                   &fs3, sizeof( fs3 ), DSPI_WRTTHRU );
         }
         hb_retl( ulrc == NO_ERROR );
         return;
      }
#elif defined( HB_OS_UNIX_COMPATIBLE ) || defined( __DJGPP__ )

      if( !pDate && !pTime )
      {
         hb_retl( utime( szFile, NULL ) == 0 );
         return;
      }
      else
      {
         struct utimbuf buf;
         struct tm new_value;

         if( !pDate || !pTime )
         {
            time_t current_time;

            current_time = time( NULL );
#   if _POSIX_C_SOURCE < 199506L || defined( HB_OS_DARWIN_5 )
            new_value = *localtime( ¤t_time );
#   else
            localtime_r( ¤t_time, &new_value );
#   endif
         }
         else
            memset( &new_value, 0, sizeof( new_value ) );

         if( pDate )
         {
            new_value.tm_year = year - 1900;
            new_value.tm_mon = month - 1;
            new_value.tm_mday = day;
         }
         if( pTime )
         {
            new_value.tm_hour = hour;
            new_value.tm_min = minute;
            new_value.tm_sec = second;
         }
         buf.actime = buf.modtime = mktime( &new_value );
         hb_retl( utime( szFile, &buf ) == 0 );
         return;
      }
#else
      {
         LONG lJulian, lMillisec;

         lJulian = pDate ? hb_dateEncode( year, month, day ) : -1;
         lMillisec = pTime ? hb_timeStampEncode( hour, minute, second, 0 ) : -1;

         hb_retl( hb_fsSetFileTime( ( BYTE * ) szFile, lJulian, lMillisec ) );
         return;
      }
#endif
   }

   hb_retl( FALSE );
}
files.c219
HB_FUNCFILEDELETE(void)
HB_FUNC( FILEDELETE )
{
   BOOL bReturn = FALSE;

   if( ISCHAR( 1 ) )
   {
      BYTE * pDirSpec;
      PHB_FFIND ffind;
      ULONG ulAttr = HB_FA_ALL;
      BOOL fFree;

      pDirSpec = hb_fsNameConv( ( BYTE * ) hb_parc( 1 ), &fFree );
      if( ISNUM( 2 ) )
         ulAttr = hb_parnl( 2 );

      if( ( ffind = hb_fsFindFirst( ( char * ) pDirSpec, ulAttr ) ) != NULL )
      {
         PHB_FNAME pFilepath;

         pFilepath = hb_fsFNameSplit( ( char * ) pDirSpec );
         pFilepath->szExtension = NULL;

         do
         {
            char szPath[ _POSIX_PATH_MAX + 1 ];

            pFilepath->szName = ffind->szName;
            hb_fsFNameMerge( szPath, pFilepath );

            if( hb_fsDelete( ( BYTE * ) szPath ) )
               bReturn = TRUE;
         }
         while( hb_fsFindNext( ffind ) );

         hb_xfree( pFilepath );
         hb_fsFindClose( ffind );
      }
      if( fFree )
         hb_xfree( pDirSpec );
   }

   hb_retl( bReturn );
}
files.c372
HB_FUNCFILEMOVE(void)
HB_FUNC( FILEMOVE )
{
   hb_retni( hb_fsRename( ( BYTE * ) hb_parcx( 1 ),
                          ( BYTE * ) hb_parcx( 2 ) ) ? 0 : -hb_fsOsError() );
}
files.c417
HB_FUNCRENAMEFILE(void)
HB_FUNC( RENAMEFILE )
{
   HB_FUNC_EXEC( FILEMOVE );
}
files.c424
HB_FUNCDELETEFILE(void)
HB_FUNC( DELETEFILE )
{
   hb_retni( hb_fsDelete( ( BYTE * ) hb_parcx( 1 ) ) ? 0 : -hb_fsOsError() );
}
files.c430
HB_FUNCFILESMAX(void)
HB_FUNC( FILESMAX )
{
#if defined( __DJGPP__ )
   __dpmi_regs r;
   unsigned handles;
   ULONG psp;

   r.h.ah = 0x62;               /* Get PSP address */
   __dpmi_int( 0x21, &r );
   psp = ( ( ( ULONG ) r.x.bx ) << 4 ) & 0xFFFFF;

   handles = _farpeekw( _dos_ds, psp + 0x32 );
   hb_retni( handles );
#elif defined( _SC_OPEN_MAX )
   hb_retnl( sysconf( _SC_OPEN_MAX ) );
#else
   hb_retni( -1 );
#endif
}
files.c436
finan.c
TypeFunctionSourceLine
HB_FUNCFV(void)
HB_FUNC( FV )
{
   if( ISNUM( 1 ) && ISNUM( 2 ) && ISNUM( 3 ) )
   {
      double dPayment = hb_parnd( 1 );
      double dRate = hb_parnd( 2 );
      double dTime = hb_parnd( 3 );
      double dResult;

      if( dRate == 0.0 )
      {
         /* NOTE: CT3 crashes with dRate == 0.0 */
         dResult = dPayment * dTime;
      }
      else
      {
         HB_MATH_EXCEPTION hb_exc;
         double dBase = 1.0 + dRate;

         hb_mathResetError( &hb_exc );
         dResult = pow( dBase, dTime );
         if( hb_mathGetError( &hb_exc, "POW", dBase, dTime, dResult ) )
         {
            dResult = hb_exc.handled ? hb_exc.retval : 0.0;
         }
         dResult = dPayment * ( dResult - 1.0 ) / dRate;
      }

      hb_retnd( dResult );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_FV, NULL, "FV", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retnd( 0.0 );
   }
}
finan.c120
HB_FUNCPV(void)
HB_FUNC( PV )
{
   if( ISNUM( 1 ) && ISNUM( 2 ) && ISNUM( 3 ) )
   {
      double dPayment = hb_parnd( 1 );
      double dRate = hb_parnd( 2 );
      double dTime = hb_parnd( 3 );
      double dResult;

      if( dRate == 0.0 )
      {
         /* NOTE: CT3 crashes with dRate == 0.0 */
         dResult = dPayment * dTime;
      }
      else
      {
         HB_MATH_EXCEPTION hb_exc;
         double dBase = 1.0 + dRate;

         hb_mathResetError( &hb_exc );
         dResult = pow( dBase, -dTime );
         if( hb_mathGetError( &hb_exc, "POW", dBase, -dTime, dResult ) )
         {
            dResult = hb_exc.handled ? hb_exc.retval : 0.0;
         }
         dResult = dPayment * ( 1.0 - dResult ) / dRate;
      }

      hb_retnd( dResult );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_PV, NULL, "PV", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retnd( 0.0 );
   }
}
finan.c221
HB_FUNCPAYMENT(void)
HB_FUNC( PAYMENT )
{
   if( ISNUM( 1 ) && ISNUM( 2 ) && ISNUM( 3 ) )
   {
      double dCapital = hb_parnd( 1 );
      double dRate = hb_parnd( 2 );
      double dTime = hb_parnd( 3 );
      double dResult;

      if( dRate == 0.0 )
      {
         /* NOTE: CT3 crashes with dRate == 0.0 */
         dResult = dCapital / dTime;
      }
      else
      {
         HB_MATH_EXCEPTION hb_exc;
         double dBase = 1.0 + dRate;

         hb_mathResetError( &hb_exc );
         dResult = pow( dBase, -dTime );
         if( hb_mathGetError( &hb_exc, "POW", dBase, -dTime, dResult ) )
         {
            dResult = hb_exc.handled ? hb_exc.retval : 0.0;
         }
         dResult = dCapital * dRate / ( 1.0 - dResult );
      }

      hb_retnd( dResult );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_PAYMENT, NULL, "PAYMENT", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retnd( 0.0 );
   }
}
finan.c320
HB_FUNCPERIODS(void)
HB_FUNC( PERIODS )
{
   if( ISNUM( 1 ) && ISNUM( 2 ) && ISNUM( 3 ) )
   {
      double dCapital = hb_parnd( 1 );
      double dPayment = hb_parnd( 2 );
      double dRate = hb_parnd( 3 );
      double dResult;

      if( dPayment <= dCapital * dRate )
      {
         /* in this case infinite time is needed to cancel the loan */
         dResult = -1.0;
      }
      else if( dRate == 0.0 )
      {
         /* NOTE: CT3 crashes with dRate == 0.0 */
         dResult = dCapital / dPayment;
      }
      else
      {
         HB_MATH_EXCEPTION hb_exc;
         double dBase = 1.0 + dRate;

         hb_mathResetError( &hb_exc );
         dResult = log( dBase );
         if( hb_mathGetError( &hb_exc, "LOG", dBase, 0.0, dResult ) )
         {
            dResult = hb_exc.handled ? hb_exc.retval : 0.0;
         }

         if( dResult )
         {
            double dResult2;
            hb_mathResetError( &hb_exc );
            dBase = 1.0 - ( dCapital * dRate / dPayment );
            dResult2 = log( dBase );
            if( hb_mathGetError( &hb_exc, "LOG", dBase, 0.0, dResult2 ) )
            {
               dResult2 = hb_exc.handled ? hb_exc.retval : 0.0;
            }
            dResult = -dResult2 / dResult;
         }
      }

      hb_retnd( dResult );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_PERIODS, NULL, "PERIODS", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retnd( 0.0 );
   }
}
finan.c424
HB_FUNCRATE(void)
HB_FUNC( RATE )
{
   if( ISNUM( 1 ) && ISNUM( 2 ) && ISNUM( 3 ) )
   {
      double dCapital = hb_parnd( 1 );
      double dPayment = hb_parnd( 2 );
      double dTime = hb_parnd( 3 );
      double dAux;              /* estimated payment to compare for      */
      double dEpsilon = 0.00001;        /* mimimal to consider 2 numbers as equal */
      double dScale = 1.0;      /* fractional step                       */
      double r;                 /* temptative rate                       */
      double j = 1.0;           /* index                                 */
      double dExp;

      while( j < 1020.0 )       /* maximum anual rate */
      {
         HB_MATH_EXCEPTION hb_exc;
         double dBase;

         r = j * 0.000833333;   /* j * ( 0.01 / 12.0)  mensual's rate */

         /* replace PAYMENT() function overhead */

         hb_mathResetError( &hb_exc );
         dBase = 1.0 + r;
         dExp = pow( dBase, dTime );
         if( hb_mathGetError( &hb_exc, "POW", dBase, dTime, dExp ) )
         {
            /* TODO: Check if this is a correct default correction value for pow() */
            dExp = hb_exc.handled ? hb_exc.retval : 0.0;
         }

         dAux = dCapital * ( ( dExp * r ) / ( dExp - 1.0 ) );

         if( dAux > dPayment )
         {
            j = j - dScale;
            dScale = dScale * 0.10;

            if( ( dAux - dPayment ) < dEpsilon )
               break;
         }
         else
            j = j + dScale;

      }                         /* endwhile */

      hb_retnd( j * 0.000833333 );      /* return as mensual's rate */
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_RATE, NULL, "RATE", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retnd( 0.0 );
   }
}
finan.c538
ftoc.c
TypeFunctionSourceLine
HB_FUNCFTOC(void)
HB_FUNC( FTOC )
{
   union
   {
      double value;
      char   string[sizeof( double )];
   } xConvert;

   xConvert.value = hb_parnd( 1 );

   hb_retclen( xConvert.string, sizeof( double ) );
}
ftoc.c93
HB_FUNCCTOF(void)
HB_FUNC( CTOF )
{
   union
   {
      double value;
      char   string[sizeof( double )];
   } xConvert;

   if( hb_parclen( 1 ) >= sizeof( double ) )
   {
      memcpy( xConvert.string, hb_parc( 1 ), sizeof( double ) );
      hb_retnd( xConvert.value );
   }
   else
      hb_retnd( 0.0 );
}
ftoc.c145
justify.c
TypeFunctionSourceLine
STATIC VOIDdo_justify( int iSwitch )
static void do_justify( int iSwitch )
{

   int iNoRet;

   iNoRet = ct_getref() && ISBYREF( 1 );

   if( ISCHAR( 1 ) )
   {

      char *pcString = hb_parc( 1 );
      size_t sStrLen = hb_parclen( 1 );
      char cJustChar;
      char *pc, *pcRet;
      size_t sJustOffset;

      if( sStrLen == 0 )
      {
         if( iNoRet )
            hb_ret();
         else
            hb_retc( NULL );
         return;
      }

      if( hb_parclen( 2 ) > 0 )
         cJustChar = *( hb_parc( 2 ) );
      else if( ISNUM( 2 ) )
         cJustChar = ( char ) ( hb_parnl( 2 ) % 256 );
      else
         cJustChar = 0x20;

      pcRet = ( char * ) hb_xgrab( sStrLen + 1 );

      switch ( iSwitch )
      {
         case DO_JUSTIFY_JUSTLEFT:
            pc = pcString;
            sJustOffset = 0;
            while( ( *pc == cJustChar ) && ( pc < pcString + sStrLen ) )
            {
               sJustOffset++;
               pc++;
            }
            hb_xmemcpy( pcRet, pcString + sJustOffset, sStrLen - sJustOffset );
            for( pc = pcRet + sStrLen - sJustOffset; pc < pcRet + sStrLen; pc++ )
            {
               *pc = cJustChar;
            }
            break;

         case DO_JUSTIFY_JUSTRIGHT:
            pc = pcString + sStrLen - 1;
            sJustOffset = 0;
            while( ( *pc == cJustChar ) && ( pc >= pcString ) )
            {
               sJustOffset++;
               pc--;
            }
            for( pc = pcRet; pc < pcRet + sJustOffset; pc++ )
            {
               *pc = cJustChar;
            }
            hb_xmemcpy( pcRet + sJustOffset, pcString, sStrLen - sJustOffset );
            break;
      }

      if( ISBYREF( 1 ) )
         hb_storclen( pcRet, sStrLen, 1 );

      if( iNoRet )
      {
         hb_ret();
         hb_xfree( pcRet );
      }
      else
         hb_retclen_buffer( pcRet, 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,
                                  iSwitch == DO_JUSTIFY_JUSTLEFT ?
                                  CT_ERROR_JUSTLEFT : CT_ERROR_JUSTRIGHT,
                                  NULL, HB_ERR_FUNCNAME, 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else if( iNoRet )
         hb_ret();
      else
         hb_retc( NULL );
   }
}
justify.c63
HB_FUNCJUSTLEFT(void)
HB_FUNC( JUSTLEFT )
{
   do_justify( DO_JUSTIFY_JUSTLEFT );
}
justify.c194
HB_FUNCJUSTRIGHT(void)
HB_FUNC( JUSTRIGHT )
{
   do_justify( DO_JUSTIFY_JUSTRIGHT );
}
justify.c228
keyset.c
TypeFunctionSourceLine
STATIC VOIDSetGet( int iFlag )
static void SetGet( int iFlag )
{
   int iState = 0, iNewState;
   HB_GT_INFO gtInfo;

   gtInfo.pNewVal = gtInfo.pResult = NULL;

   hb_gtInfo( HB_GTI_KBDSHIFTS, >Info );
   if( gtInfo.pResult )
   {
      iState = hb_itemGetNI( gtInfo.pResult );
      gtInfo.pNewVal = gtInfo.pResult;
      gtInfo.pResult = NULL;
   }

   if( ISLOG( 1 ) )
   {
      iNewState = hb_parl( 1 ) ? ( iState | iFlag ) : ( iState & ~iFlag );
      gtInfo.pNewVal = hb_itemPutNI( gtInfo.pNewVal, iNewState );
      hb_gtInfo( HB_GTI_KBDSHIFTS, >Info );
   }

   if( gtInfo.pNewVal )
      hb_itemRelease( gtInfo.pNewVal );
   if( gtInfo.pResult )
      hb_itemRelease( gtInfo.pResult );

   hb_retl( ( iState & iFlag ) != 0 );
}
keyset.c59
HB_FUNCKSETINS(void)
HB_FUNC( KSETINS )
{
   SetGet( HB_GTI_KBD_INSERT );
}
keyset.c115
HB_FUNCKSETCAPS(void)
HB_FUNC( KSETCAPS )
{
   SetGet( HB_GTI_KBD_CAPSLOCK );
}
keyset.c146
HB_FUNCKSETNUM(void)
HB_FUNC( KSETNUM )
{
   SetGet( HB_GTI_KBD_NUMLOCK );
}
keyset.c177
HB_FUNCKSETSCROLL(void)
HB_FUNC( KSETSCROLL )
{
   SetGet( HB_GTI_KBD_SCROLOCK );
}
keyset.c208
like.c
TypeFunctionSourceLine
HB_FUNCLIKE(void)
HB_FUNC( LIKE )
{
   char * szPattern = hb_parc( 1 ),
        * szString  = hb_parc( 2 );
   hb_retl( szPattern && szString &&
            hb_strMatchWildExact( szString, szPattern ) );
}
like.c56
lton.c
TypeFunctionSourceLine
HB_FUNCLTON(void)
HB_FUNC( LTON )
{
   hb_retni( ISLOG( 1 ) && hb_parl( 1 ) ? 1 : 0 );
}
lton.c56
maxline.c
TypeFunctionSourceLine
HB_FUNCMAXLINE(void)
HB_FUNC( MAXLINE )
{
   LONG lLength = 0;

   if( ISCHAR( 1 ) )
   {
      char *pcString = hb_parc( 1 );
      char *pBuffer;
      LONG lStrLen = hb_parclen( 1 );

      while( lStrLen > 0 )
      {
         pBuffer = ( char * ) memchr( pcString, 13, lStrLen );
         if( !pBuffer )
            pBuffer = pcString + lStrLen;

         if( pBuffer - pcString > lLength )
            lLength = pBuffer - pcString;

         pBuffer++;
         if( *pBuffer == 10 )
            pBuffer++;
         lStrLen -= pBuffer - pcString;
         pcString = pBuffer;
      }
   }
   hb_retnl( lLength );
}
maxline.c56
misc1.c
TypeFunctionSourceLine
HB_FUNCXTOC(void)
HB_FUNC( XTOC )
{
   union
   {
      double value;
      char string[sizeof( double )];
   } xConvert;

   if( ISCHAR( 1 ) )
      hb_retc( hb_parc( 1 ) );
   else if( ISDATE( 1 ) )
      hb_retc( hb_pards( 1 ) );
   else if( ISNUM( 1 ) )
   {
      xConvert.value = hb_parnd( 1 );
      hb_retclen( xConvert.string, sizeof( double ) );
   }
   else if( ISLOG( 1 ) )
      hb_retclen( hb_parl( 1 ) ? "T" : "F", 1 );
   else
      hb_retc( NULL );
}
misc1.c103
misc2.c
TypeFunctionSourceLine
HB_FUNCCOMPLEMENT(void)
HB_FUNC( COMPLEMENT )
{
   PHB_ITEM pItem = hb_param( 1, HB_IT_ANY );

   if( pItem )
   {
      if( HB_IS_STRING( pItem ) )
      {
         ULONG ulLen = hb_itemGetCLen( pItem ), ulPos;

         if( ulLen > 0 )
         {
            char *szBuffer = ( char * ) hb_xgrab( ulLen + 1 ), *szSrc = hb_itemGetCPtr( pItem );

            for( ulPos = 0; ulPos < ulLen; ulPos++ )
               szBuffer[ulPos] = ~szSrc[ulPos];
            hb_retclen_buffer( szBuffer, ulLen );
         }
         else
            hb_retc( NULL );
      }
      else if( HB_IS_DATE( pItem ) )
         hb_retdl( 4537847 - hb_itemGetDL( pItem ) );
      else if( HB_IS_NUMINT( pItem ) )
         hb_retnint( -hb_itemGetNInt( pItem ) );
      else if( HB_IS_NUMERIC( pItem ) )
      {
         int iWidth, iDec;
         double dValue;

         dValue = hb_itemGetND( pItem );
         hb_itemGetNLen( pItem, &iWidth, &iDec );
         hb_retndlen( -dValue, iWidth, iDec );
      }
      else if( HB_IS_LOGICAL( pItem ) )
         hb_retl( !hb_itemGetL( pItem ) );
      else
         hb_ret();
   }
   else
      hb_ret();
}
misc2.c56
HB_FUNCNUL(void)
HB_FUNC( NUL )
{
   hb_retc( NULL );
}
misc2.c100
misc3.c
TypeFunctionSourceLine
HB_FUNCKBDSTAT(void)
HB_FUNC( KBDSTAT )
{
   int iRet = 0;
   HB_GT_INFO gtInfo;

   gtInfo.pNewVal = NULL;
   gtInfo.pResult = NULL;

   hb_gtInfo( HB_GTI_KBDSHIFTS, >Info );

   if( gtInfo.pResult )
   {
      int iState = hb_itemGetNI( gtInfo.pResult );

      hb_itemRelease( gtInfo.pResult );
      if( iState & HB_GTI_KBD_SHIFT )
         iRet |= 0x01;
      if( iState & HB_GTI_KBD_CTRL )
         iRet |= 0x04;
      if( iState & HB_GTI_KBD_ALT )
         iRet |= 0x08;
      if( iState & HB_GTI_KBD_SCROLOCK )
         iRet |= 0x10;
      if( iState & HB_GTI_KBD_NUMLOCK )
         iRet |= 0x20;
      if( iState & HB_GTI_KBD_CAPSLOCK )
         iRet |= 0x40;
      if( iState & HB_GTI_KBD_INSERT )
         iRet |= 0x80;
   }

   hb_retni( iRet );
}
misc3.c57
num1.c
TypeFunctionSourceLine
HB_FUNCCELSIUS(void)
HB_FUNC( CELSIUS )
{
   if( ISNUM( 1 ) )
   {
      double dInput = hb_parnd( 1 );
      double dResult;

      dResult = ( 5.0 / 9.0 ) * ( dInput - 32.0 );
      hb_retnd( dResult );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_CELSIUS, NULL, "CELSIUS", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retnd( 0.0 );
   }
}
num1.c105
HB_FUNCFAHRENHEIT(void)
HB_FUNC( FAHRENHEIT )
{
   if( ISNUM( 1 ) )
   {
      double dInput = hb_parnd( 1 );
      double dResult;

      dResult = ( ( 9.0 / 5.0 ) * dInput ) + 32.0;
      hb_retnd( dResult );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_FAHRENHEIT, NULL, "FAHRENHEIT", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retnd( 0.0 );
   }
}
num1.c172
HB_FUNCINFINITY(void)
HB_FUNC( INFINITY )
{
   if( ISLOG( 1 ) && hb_parl( 1 ) )
      hb_retnd( DBL_MAX );
   else
      hb_retnd( 93786976294838206460.00 );
}
num1.c237
numat.c
TypeFunctionSourceLine
HB_FUNCNUMAT(void)
HB_FUNC( NUMAT )
{
   if( ( ISCHAR( 1 ) ) && ( ISCHAR( 2 ) ) )
   {
      char *pcStringToMatch = ( char * ) hb_parc( 1 );
      size_t sStrToMatchLen = ( size_t ) hb_parclen( 1 );
      char *pcString = ( char * ) hb_parc( 2 );
      size_t sStrLen = ( size_t ) hb_parclen( 2 );
      int iMultiPass = ct_getatmupa();
      int iAtLike = ct_getatlike();
      char cAtLike = ct_getatlikechar();
      size_t sIgnore, sMatchStrLen = 0, sSubStrLen;
      ULONG ulCounter;
      char *pc, *pcSubStr;

      /* eventually ignore some characters */
      if( ISNUM( 3 ) )
         sIgnore = ( size_t ) hb_parnl( 3 );
      else
         sIgnore = 0;

      if( sIgnore >= sStrLen )
      {
         int iArgErrorMode = ct_getargerrormode();

         if( iArgErrorMode != CT_ARGERR_IGNORE )
         {
            ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_NUMAT, NULL,
                      "NUMAT", 0, EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
         }
         hb_retni( 0 );
         return;
      }
      else
      {
         pcString += sIgnore;
         sStrLen -= sIgnore;
      }

      ulCounter = 0;
      pcSubStr = pcString;
      sSubStrLen = sStrLen;

      do
      {
         switch ( iAtLike )
         {
            case CT_SETATLIKE_EXACT:
               pc = ct_at_exact_forward( pcSubStr, sSubStrLen, pcStringToMatch,
                                         sStrToMatchLen, &sMatchStrLen );
               break;

            case CT_SETATLIKE_WILDCARD:
               pc = ct_at_wildcard_forward( pcSubStr, sSubStrLen,
                                            pcStringToMatch, sStrToMatchLen,
                                            cAtLike, &sMatchStrLen );
               break;

            default:
               pc = NULL;
         }
         ulCounter++;
         if( iMultiPass )
            pcSubStr = pc + 1;
         else
            pcSubStr = pc + sMatchStrLen;
         sSubStrLen = sStrLen - ( pcSubStr - pcString );
      }
      while( pc != NULL );

      hb_retnl( ulCounter - 1 );
   }
   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_NUMAT, NULL, "NUMAT", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retni( 0 );
   }
}
numat.c86
numcount.c
TypeFunctionSourceLine
HB_FUNCNUMCOUNT(void)
HB_FUNC( NUMCOUNT )
{
   BOOL bMode = ISLOG( 2 ) && hb_parl( 2 );

   if( ISNUM( 1 ) )
   {
      if( bMode )
         s_lCounter = hb_parnl( 1 );
      else
         s_lCounter += hb_parnl( 1 );
   }

   hb_retnl( s_lCounter );
}
numcount.c58
numline.c
TypeFunctionSourceLine
HB_FUNCNUMLINE(void)
HB_FUNC( NUMLINE )
{
   LONG lLines = 0;

   if( ISCHAR( 1 ) )
   {
      char *pcString = hb_parc( 1 );
      char *pBuffer;
      LONG lStrLen = hb_parclen( 1 );
      LONG lLength = ISNUM( 2 ) ? hb_parnl( 2 ) : 80;

      while( lStrLen > 0 )
      {
         pBuffer = ( char * ) memchr( pcString, 13, lStrLen );
         if( !pBuffer )
         {
            pBuffer = pcString + lStrLen;
         }

         if( ( pBuffer - pcString ) > lLength )
         {
            pBuffer = pcString + lLength;
         }
         else
         {
            pBuffer++;
            if( *pBuffer == 10 )
               pBuffer++;
         }
         lStrLen -= pBuffer - pcString;
         pcString = pBuffer;
         lLines++;
      }
   }

   hb_retnl( lLines );
}
numline.c56
pack.c
TypeFunctionSourceLine
HB_FUNCCHARPACK(void)
HB_FUNC( CHARPACK )
{
   unsigned len = hb_parclen( 1 );
   unsigned char *in = ( unsigned char * ) hb_parcx( 1 );

   if( hb_parni( 2 ) == 0 )
   {
      unsigned char *out = ( unsigned char * ) hb_xgrab( len * 3 + 2 );
      unsigned n_in = 0, n_out = 0;

      out[n_out++] = 158;
      out[n_out++] = 158;

      while( n_in < len )
      {
         int n_count = 1, n_max = HB_MIN( 255, len - n_in );
         unsigned char c = in[n_in];

         while( n_count < n_max && in[n_in + n_count] == c )
            n_count++;
         out[n_out++] = 0;
         out[n_out++] = ( unsigned char ) n_count;
         out[n_out++] = c;
         n_in += n_count;
      }
      if( n_out < len )
         hb_retclen( ( char * ) out, n_out );
      hb_xfree( out );
      if( n_out < len )
         return;
   }
   hb_retclen( ( char * ) in, len );
}
pack.c57
STATIC UNSIGNED CHAR buf_append( unsigned char *buf, unsigned *buf_size, unsigned count, unsigned char c, unsigned *buf_len )
static unsigned char *buf_append( unsigned char *buf, unsigned *buf_size, unsigned count,
                                  unsigned char c, unsigned *buf_len )
{
   if( *buf_len + count > *buf_size )
   {
      *buf_size = HB_MAX( *buf_len + count, *buf_size + 32768 );
      buf = ( unsigned char * ) hb_xrealloc( buf, *buf_size );
   }
   memset( buf + *buf_len, c, count );
   *buf_len += count;
   return buf;
}
pack.c92
HB_FUNCCHARUNPACK(void)
HB_FUNC( CHARUNPACK )
{
   unsigned buf_size = 32768;
   unsigned len = hb_parclen( 1 );
   unsigned out_len = 0;
   unsigned char *in = ( unsigned char * ) hb_parcx( 1 );
   unsigned char *out;
   unsigned i;

   if( hb_parni( 2 ) == 0 )
   {
      if( !( in[0] == 158 && in[1] == 158 ) )
      {
         hb_retclen( ( char * ) in, len );
         return;
      }
      out = ( unsigned char * ) hb_xgrab( buf_size );
      for( i = 2; i <= len - 3; i += 3 )
      {
         if( in[i] != 0 )
         {
            hb_xfree( out );
            hb_retclen( ( char * ) in, len );
            return;
         }
         out = buf_append( out, &buf_size, in[i + 1], in[i + 2], &out_len );
      }
      hb_retclen( ( char * ) out, out_len );
      hb_xfree( out );
      return;
   }
   hb_retclen( ( char * ) in, len );
}
pack.c106
pos1.c
TypeFunctionSourceLine
STATIC VOIDdo_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 */
   {
      HB_CDP_STUB
      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 )
         {
            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
         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 )
         {
            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;
         }
      }
      hb_retni( 0 );
   }
   else                         /* ISCHAR (1) etc. */
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode(), iError = 0;

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         switch ( iSwitch )
         {
            case DO_POS1_POSALPHA:
               iError = CT_ERROR_POSALPHA;
               break;

            case DO_POS1_POSLOWER:
               iError = CT_ERROR_POSLOWER;
               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_ERR_FUNCNAME, 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retni( 0 );
   }
}
pos1.c81
HB_FUNCPOSALPHA(void)
HB_FUNC( POSALPHA )
{
   do_pos1( DO_POS1_POSALPHA );
}
pos1.c234
HB_FUNCPOSLOWER(void)
HB_FUNC( POSLOWER )
{
   do_pos1( DO_POS1_POSLOWER );
}
pos1.c268
HB_FUNCPOSRANGE(void)
HB_FUNC( POSRANGE )
{
   do_pos1( DO_POS1_POSRANGE );
}
pos1.c303
HB_FUNCPOSUPPER(void)
HB_FUNC( POSUPPER )
{
   do_pos1( DO_POS1_POSUPPER );
}
pos1.c337
pos2.c
TypeFunctionSourceLine
HB_FUNCPOSCHAR(void)
HB_FUNC( POSCHAR )
{
   int iNoRet;

   iNoRet = ct_getref() && ISBYREF( 1 );

   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 ) )
            cReplace = *( hb_parc( 2 ) );
         else
            cReplace = ( char ) ( hb_parnl( 2 ) % 256 );

         if( ISNUM( 3 ) )
         {
            sPosition = hb_parnl( 3 );
            if( sPosition == 0 )
               sPosition = sStrLen;
         }
         else
            sPosition = sStrLen;

         pcRet = ( char * ) hb_xgrab( sStrLen + 1 );
         hb_xmemcpy( pcRet, pcString, sStrLen );
         *( pcRet + sPosition - 1 ) = cReplace;

         if( ISBYREF( 1 ) )
            hb_storclen( pcRet, sStrLen, 1 );

         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, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else if( iNoRet )
         hb_ret();
      else
         hb_retc( NULL );
   }
}
pos2.c87
HB_FUNCPOSDEL(void)
HB_FUNC( POSDEL )
{
   if( ISCHAR( 1 ) )
   {
      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( 2 ) )
      {
         sStartPos = hb_parnl( 2 );
         if( sStartPos == 0 || sStartPos > sStrLen - sDelLen + 1 )
            sStartPos = sStrLen - sDelLen + 1;
      }
      else
         sStartPos = sStrLen - sDelLen + 1;

      if( sStrLen <= sDelLen )
      {
         hb_retc( NULL );
         return;
      }

      pcRet = ( char * ) hb_xgrab( 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 ) );
      }

      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 );
   }
}
pos2.c202
HB_FUNCPOSINS(void)
HB_FUNC( POSINS )
{
   if( ISCHAR( 1 ) )
   {
      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 ) )
         {
            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
         hb_retc( NULL );
   }
}
pos2.c296
HB_FUNCPOSREPL(void)
HB_FUNC( POSREPL )
{
   int iNoRet;

   iNoRet = ct_getref() && ISBYREF( 1 );

   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 ) )
         {
            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  /* hb_parclen( 2 ) > 0 */
      {
         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 );
      }
   }
   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, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else if( iNoRet )
         hb_ret();
      else
         hb_retc( NULL );
   }
}
pos2.c405
posdiff.c
TypeFunctionSourceLine
HB_FUNCPOSDIFF(void)
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( 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, 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 );
   }
}
posdiff.c87
HB_FUNCPOSEQUAL(void)
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( 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, HB_ERR_ARGS_BASEPARAMS );
         }
         hb_retni( 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, HB_ERR_ARGS_BASEPARAMS );
         }
         hb_retni( 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;
            }
         }
         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 );
   }
}
posdiff.c185
print.c
TypeFunctionSourceLine
HB_FUNCPRINTSTAT(void)
HB_FUNC( PRINTSTAT )
{
   USHORT uiPort = ISNUM( 1 ) ? ( USHORT ) hb_parni( 1 ) : 1;
   int Status = 0;

#if defined(HB_OS_DOS)

   /* NOTE: DOS specific solution, using BIOS interrupt */

   union REGS regs;

   regs.h.ah = 2;
   regs.HB_XREGS.dx = uiPort - 1;

   HB_DOS_INT86( 0x17, ®s, ®s );

   Status = regs.h.ah;

#else
   HB_SYMBOL_UNUSED( uiPort );
#endif

   hb_retni( Status );
}
print.c92
HB_FUNCPRINTREADY(void)
HB_FUNC( PRINTREADY )
{
   USHORT uiPort = ISNUM( 1 ) ? ( USHORT ) hb_parni( 1 ) : 1;
   int Status = 0;

#if defined(HB_OS_DOS)

   /* NOTE: DOS specific solution, using BIOS interrupt */

   union REGS regs;

   regs.h.ah = 2;
   regs.HB_XREGS.dx = uiPort - 1;

   HB_DOS_INT86( 0x17, ®s, ®s );

   Status = regs.h.ah;

#else
   HB_SYMBOL_UNUSED( uiPort );
#endif

   hb_retl( ( Status == 0x90 ) );
}
print.c143
HB_FUNCPRINTSEND(void)
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
}
print.c169
range.c
TypeFunctionSourceLine
HB_FUNCRANGEREM(void)
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( ISCHAR( 1 ) )
         ucChar1 = *( ( unsigned char * ) hb_parc( 1 ) );
      else
         ucChar1 = ( unsigned char ) ( hb_parni( 1 ) % 256 );

      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++ )
      {
         iBool = ( ( *pc ) >= ucChar1 );
         if( iMode )
            iBool |= ( ( *pc ) <= ucChar2 );
         else
            iBool &= ( ( *pc ) <= ucChar2 );

         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, 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 );
   }
}
range.c94
HB_FUNCRANGEREPL(void)
HB_FUNC( RANGEREPL )
{
   int iNoRef = ct_getref() && ISBYREF( 3 );

   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( ISCHAR( 1 ) )
         ucChar1 = *( ( unsigned char * ) hb_parc( 1 ) );
      else
         ucChar1 = ( unsigned char ) ( hb_parni( 1 ) % 256 );

      if( ISCHAR( 2 ) )
         ucChar2 = *( ( unsigned char * ) hb_parc( 2 ) );
      else
         ucChar2 = ( unsigned char ) ( hb_parni( 2 ) % 256 );

      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++ )
      {
         iBool = ( ( *pc ) >= ucChar1 );
         if( iMode )
            iBool |= ( ( *pc ) <= ucChar2 );
         else
            iBool &= ( ( *pc ) <= ucChar2 );

         if( iBool )
         {
            *( pcRet + sRetIndex ) = ucReplace;
            sRetIndex++;
         }
         else
         {
            *( pcRet + sRetIndex ) = *pc;
            sRetIndex++;
         }
      }

      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 );
   }
}
range.c198
relation.c
TypeFunctionSourceLine
HB_FUNCCHARRELA(void)
HB_FUNC( CHARRELA )
{
   if( ISCHAR( 1 ) && ISCHAR( 2 ) && ISCHAR( 3 ) && ISCHAR( 4 ) )
   {
      char *pcStringToMatch1 = hb_parc( 1 );
      size_t sStrToMatchLen1 = hb_parclen( 1 );
      char *pcString1 = hb_parc( 2 );
      size_t sStrLen1 = hb_parclen( 2 );
      char *pcStringToMatch2 = hb_parc( 3 );
      size_t sStrToMatchLen2 = hb_parclen( 3 );
      char *pcString2 = hb_parc( 4 );
      size_t sStrLen2 = hb_parclen( 4 );

      char *pc1, *pc2;
      size_t sOffset1, sOffset2;
      size_t sMatchStrLen;

      /* check for empty strings */
      if( ( sStrToMatchLen1 == 0 ) || ( sStrToMatchLen2 == 0 ) )
      {
         hb_retni( 0 );
         return;
      }

      sOffset1 = 0;
      sOffset2 = 0;

      /* NOTE: this algorithm is not the best since the search that gave
         the larger relative position in the step before is repeated;
         try a search algorithm alternating between both strings */
      while( sOffset1 < sStrLen1 && sOffset2 < sStrLen2 )
      {
         pc1 = ct_at_exact_forward( pcStringToMatch1, sStrToMatchLen1,
                                    pcString1 + sOffset1, sStrLen1 - sOffset1, &sMatchStrLen );
         pc2 = ct_at_exact_forward( pcStringToMatch2, sStrToMatchLen2,
                                    pcString2 + sOffset2, sStrLen2 - sOffset2, &sMatchStrLen );
         if( pc1 != NULL && pc2 != NULL )
         {
            if( pc1 - pcString1 == pc2 - pcString2 )
            {
               /* correlation found */
               hb_retnl( ( pc1 - pcString1 ) + 1 );
               return;
            }
            else
            {
               if( pc1 - pcString1 > pc2 - pcString2 )
                  sOffset1 = sOffset2 = pc1 - pcString1;
               else
                  sOffset1 = sOffset2 = pc2 - pcString2;
            }
         }
         else
         {
            sOffset1 = sOffset2 = sStrLen1 < sStrLen2 ? sStrLen1 : sStrLen2;
         }
      }

      hb_retni( 0 );
   }
   else  /* ISCHAR( 1 ) && ISCHAR( 2 ) && ISCHAR( 3 ) && ISCHAR( 4 ) */
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_CHARRELA, NULL, "CHARRELA", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retni( 0 );
   }
}
relation.c88
HB_FUNCCHARRELREP(void)
HB_FUNC( CHARRELREP )
{
   int iNoRet;

   iNoRet = ct_getref() && ISBYREF( 4 );

   if( ISCHAR( 1 ) && ISCHAR( 2 ) && ISCHAR( 3 ) &&
       ISCHAR( 4 ) && ISCHAR( 5 ) )
   {
      char *pcStringToMatch1 = hb_parc( 1 );
      size_t sStrToMatchLen1 = hb_parclen( 1 );
      char *pcString1 = hb_parc( 2 );
      size_t sStrLen1 = hb_parclen( 2 );
      char *pcStringToMatch2 = hb_parc( 3 );
      size_t sStrToMatchLen2 = hb_parclen( 3 );
      char *pcString2 = hb_parc( 4 );
      size_t sStrLen2 = hb_parclen( 4 );
      char *pcReplace = hb_parc( 5 );
      size_t sReplaceLen = hb_parclen( 5 );
      char *pcRet;
      char *pc1, *pc2;
      size_t sOffset1, sOffset2;
      size_t sMatchStrLen;

      /* check for empty strings */
      if( sStrToMatchLen1 == 0 ||
          sStrToMatchLen2 == 0 || sReplaceLen == 0 || sStrLen2 == 0 )
      {
         if( iNoRet )
            hb_ret();
         else
            hb_retclen( pcString2, sStrLen2 );
         return;
      }

      pcRet = ( char * ) hb_xgrab( sStrLen2 + 1 );
      hb_xmemcpy( pcRet, pcString2, sStrLen2 );

      sOffset1 = 0;
      sOffset2 = 0;

      /* NOTE: this algorithm is not the best since the search that gave
         the larger relative position in the step before is repeated;
         try a search algorithm alternating between both strings */
      while( ( sOffset1 < sStrLen1 ) && ( sOffset2 < sStrLen2 ) )
      {
         pc1 = ct_at_exact_forward( pcStringToMatch1, sStrToMatchLen1,
                                    pcString1 + sOffset1, sStrLen1 - sOffset1,
                                    &sMatchStrLen );
         pc2 = ct_at_exact_forward( pcStringToMatch2, sStrToMatchLen2,
                                    pcString2 + sOffset2, sStrLen2 - sOffset2,
                                    &sMatchStrLen );
         if( pc1 != NULL && pc2 != NULL )
         {
            if( pc1 - pcString1 == pc2 - pcString2 )
            {
               /* correlation found -> start replacement */
               size_t sCurr;

               for( sCurr = 1; sCurr <= sStrToMatchLen1; sCurr++ )
               {
                  /* check if pcString2 is long enough */
                  if( ( pc2 - pcString2 ) + sCurr >= sStrLen2 )
                  {
                     size_t sStr2Offset, sReplOffset;

                     sStr2Offset = sStrToMatchLen2 < sCurr ? sStrToMatchLen2 : sCurr;
                     sReplOffset = sReplaceLen < sCurr ? sReplaceLen : sCurr;

                     /* do the characters in pcString2 and pcStrToMatch2 match ? */
                     if( *( pc2 + sCurr - 1 ) ==
                         *( pcStringToMatch2 + sStr2Offset - 1 ) )
                     {
                        *( pcRet + ( pc2 - pcString2 ) + sCurr - 1 ) =
                           *( pcReplace + sReplOffset - 1 );
                     }
                  }
               }
               sOffset1 = sOffset2 = ( pc1 - pcString1 ) + 1;
            }
            else
            {
               if( pc1 - pcString1 > pc2 - pcString2 )
                  sOffset1 = sOffset2 = pc1 - pcString1;
               else
                  sOffset1 = sOffset2 = pc2 - pcString2;
            }
         }
         else
         {
            sOffset1 = sOffset2 = sStrLen1 < sStrLen2 ? sStrLen1 : sStrLen2;
         }
      }

      if( ISBYREF( 4 ) )
      {
         hb_storclen( pcRet, sStrLen2, 4 );
      }

      if( iNoRet )
      {
         hb_xfree( pcRet );
         hb_ret();
      }
      else
      {
         hb_retclen_buffer( pcRet, sStrLen2 );
      }
   }
   else  /* ISCHAR( 1 ) && ISCHAR( 2 ) && ISCHAR( 3 ) &&
            ISCHAR( 4 ) && ISCHAR( 5 ) */
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_CHARRELREP, NULL, "CHARRELREP", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else if( iNoRet )
         hb_ret();
      else
         hb_retc( NULL );
   }
}
relation.c198
remove.c
TypeFunctionSourceLine
STATIC VOIDdo_remove( int iSwitch )
static void do_remove( int iSwitch )
{
   /* param check */
   if( ISCHAR( 1 ) )
   {
      char *pcString = ( char * ) hb_parc( 1 );
      size_t sStrLen = ( size_t ) hb_parclen( 1 );
      char *pcRet, *pc;
      size_t sRetLen;
      char cSearch;

      if( hb_parclen( 2 ) > 0 )
         cSearch = *( hb_parc( 2 ) );
      else if( ISNUM( 2 ) )
         cSearch = ( char ) ( hb_parnl( 2 ) % 256 );
      else
         cSearch = 0x20;

      sRetLen = sStrLen;
      pcRet = pcString;

      if( iSwitch != DO_REMOVE_REMRIGHT )
      {
         while( ( *pcRet == cSearch ) && ( pcRet < pcString + sStrLen ) )
         {
            pcRet++;
            sRetLen--;
         }
      }

      if( iSwitch != DO_REMOVE_REMLEFT )
      {
         pc = pcString + sStrLen - 1;
         while( ( *pc == cSearch ) && ( pc >= pcRet ) )
         {
            pc--;
            sRetLen--;
         }
      }

      if( sRetLen == 0 )
         hb_retc( NULL );
      else
         hb_retclen( pcRet, sRetLen );
   }
   else                         /* if (ISCHAR (1)) */
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  sulErrorSubcodes[iSwitch],
                                  NULL, ( char * ) HB_ERR_FUNCNAME, 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retc( NULL );
   }
}
remove.c70
HB_FUNCREMALL(void)
HB_FUNC( REMALL )
{
   do_remove( DO_REMOVE_REMALL );
}
remove.c165
HB_FUNCREMLEFT(void)
HB_FUNC( REMLEFT )
{
   do_remove( DO_REMOVE_REMLEFT );
}
remove.c199
HB_FUNCREMRIGHT(void)
HB_FUNC( REMRIGHT )
{
   do_remove( DO_REMOVE_REMRIGHT );
}
remove.c233
replace.c
TypeFunctionSourceLine
STATIC VOIDdo_replace( int iSwitch )
static void do_replace( int iSwitch )
{

   /* suppressing return value ? */
   int iNoRet = ct_getref() && ISBYREF( 1 );

   /* param check */
   if( ISCHAR( 1 ) && ( hb_parclen( 2 ) > 0 || ISNUM( 2 ) ) )
   {
      char *pcString = ( char * ) hb_parc( 1 );
      size_t sStrLen = ( size_t ) hb_parclen( 1 );
      char *pcRet, *pc;
      char cSearch, cReplace;

      if( sStrLen == 0 )
      {
         if( iNoRet )
            hb_ret();
         else
            hb_retc( NULL );
         return;
      }

      if( ISNUM( 2 ) )
         cReplace = ( char ) ( hb_parnl( 2 ) % 256 );
      else
         cReplace = *( ( char * ) hb_parc( 2 ) );

      if( hb_parclen( 3 ) > 0 )
         cSearch = *( ( char * ) hb_parc( 3 ) );
      else if( ISNUM( 3 ) )
         cSearch = ( char ) ( hb_parnl( 3 ) % 256 );
      else
         cSearch = 0x20;

      pcRet = ( char * ) hb_xgrab( sStrLen + 1 );
      hb_xmemcpy( pcRet, pcString, sStrLen );

      if( iSwitch != DO_REPLACE_REPLRIGHT )
      {
         pc = pcRet;
         while( *pc == cSearch && pc < pcRet + sStrLen )
         {
            *pc = cReplace;
            pc++;
         }
      }

      if( iSwitch != DO_REPLACE_REPLLEFT )
      {
         pc = pcRet + sStrLen - 1;
         while( *pc == cSearch && pc >= pcRet )
         {
            *pc = cReplace;
            pc--;
         }
      }

      if( ISBYREF( 1 ) )
         hb_storclen( pcRet, sStrLen, 1 );

      if( iNoRet )
      {
         hb_xfree( pcRet );
         hb_ret();
      }
      else
         hb_retclen_buffer( pcRet, sStrLen );
   }
   else  /* ISCHAR( 1 ) && ( 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,
                                  sulErrorSubcodes[iSwitch],
                                  NULL, HB_ERR_FUNCNAME, 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else if( iNoRet )
         hb_ret();
      else
         hb_retc( NULL );
   }
}
replace.c70
HB_FUNCREPLALL(void)
HB_FUNC( REPLALL )
{
   do_replace( DO_REPLACE_REPLALL );
}
replace.c191
HB_FUNCREPLLEFT(void)
HB_FUNC( REPLLEFT )
{
   do_replace( DO_REPLACE_REPLLEFT );
}
replace.c225
HB_FUNCREPLRIGHT(void)
HB_FUNC( REPLRIGHT )
{
   do_replace( DO_REPLACE_REPLRIGHT );
}
replace.c259
screen1.c
TypeFunctionSourceLine
HB_FUNCSCREENATTR(void)
HB_FUNC( SCREENATTR )
{
   SHORT sRow, sCol;
   SHORT iRow, iCol;
   BYTE bColor, bAttr;
   USHORT usChar;

   hb_gtGetPos( &sRow, &sCol );
   iRow = ISNUM( 1 ) ? ( SHORT ) hb_parni( 1 ) : sRow;
   iCol = ISNUM( 2 ) ? ( SHORT ) hb_parni( 2 ) : sCol;

   if( hb_gtGetChar( iRow, iCol, &bColor, &bAttr, &usChar ) != SUCCESS )
      bColor = 0;

   hb_retni( ( int ) bColor );
}
screen1.c102
HB_FUNCSCREENMIX(void)
HB_FUNC( SCREENMIX )
{
   ULONG ulLen = hb_parclen( 1 );

   if( ulLen )
   {
      char * szText = hb_parc( 1 );
      const char * szAttr;
      ULONG ulAttr = hb_parclen( 2 ), ul = 0;
      SHORT sRow, sCol;
      SHORT iRow, iCol, i;

      if( ulAttr == 0 )
      {
         szAttr = " ";
         ulAttr = 1;
      }
      else
         szAttr = hb_parc( 2 );

      hb_gtGetPos( &sRow, &sCol );
      iRow = ISNUM( 3 ) ? ( SHORT ) hb_parni( 3 ) : sRow;
      iCol = ISNUM( 4 ) ? ( SHORT ) hb_parni( 4 ) : sCol;

      if( iRow >= 0 && iCol >= 0 &&
          iRow <= hb_gtMaxRow() && iCol <= hb_gtMaxCol() )
      {
         hb_gtBeginWrite();
         i = iCol;
         do
         {
            if( hb_gtPutChar( iRow, i++, szAttr[ ul ], 0, *szText++ ) != SUCCESS )
            {
               if( ++iRow > hb_gtMaxRow() )
                  break;
               --szText;
               ++ulLen;
               i = iCol;
            }
            else if( ++ul == ulAttr )
               ul = 0;
         }
         while( --ulLen );
         hb_gtEndWrite();
      }
   }

   hb_retc( NULL );
}
screen1.c145
HB_FUNCSAYSCREEN(void)
HB_FUNC( SAYSCREEN )
{
   ULONG ulLen = hb_parclen( 1 );

   if( ulLen )
   {
      char * szText = hb_parc( 1 );
      SHORT sRow, sCol;
      SHORT iRow, iCol, i;

      hb_gtGetPos( &sRow, &sCol );
      iRow = ISNUM( 2 ) ? ( SHORT ) hb_parni( 2 ) : sRow;
      iCol = ISNUM( 3 ) ? ( SHORT ) hb_parni( 3 ) : sCol;

      if( iRow >= 0 && iCol >= 0 &&
          iRow <= hb_gtMaxRow() && iCol <= hb_gtMaxCol() )
      {
         hb_gtBeginWrite();
         i = iCol;
         do
         {
            BYTE bColor, bAttr;
            USHORT usChar;
            if( hb_gtGetChar( iRow, i, &bColor, &bAttr, &usChar ) != SUCCESS )
            {
               if( ++iRow > hb_gtMaxRow() )
                  break;
               ++ulLen;
               i = iCol;
            }
            else
               hb_gtPutChar( iRow, i++, bColor, bAttr, *szText++ );
         }
         while( --ulLen );
         hb_gtEndWrite();
      }
   }

   hb_retc( NULL );
}
screen1.c227
STATIC BOOLhb_ctGetWinCord( int * piTop, int * piLeft, int * piBottom, int * piRight )
static BOOL hb_ctGetWinCord( int * piTop, int * piLeft,
                             int * piBottom, int * piRight )
{
   int iMaxRow = hb_gtMaxRow();
   int iMaxCol = hb_gtMaxCol();

   hb_gtGetPosEx( piTop, piLeft );

   if( ISNUM( 1 ) )
      *piTop = hb_parni( 1 );
   if( ISNUM( 2 ) )
      *piLeft   = hb_parni( 2 );
   if( ISNUM( 3 ) )
   {
      *piBottom = hb_parni( 3 );
      if( *piBottom > iMaxRow )
         *piBottom = iMaxRow;
   }
   else
      *piBottom = iMaxRow;
   if( ISNUM( 4 ) )
   {
      *piRight = hb_parni( 4 );
      if( *piRight > iMaxCol )
         *piRight = iMaxCol;
   }
   else
      *piRight = iMaxCol;

   return *piTop >= 0 && *piLeft >= 0 &&
          *piTop <= *piBottom && *piLeft <= *piRight;
}
screen1.c268
STATIC INThb_ctGetClearChar( int iParam )
static int hb_ctGetClearChar( int iParam )
{
   int iChar;

   if( ISNUM( iParam ) )
      iChar = hb_parni( iParam );
   else if( ISCHAR( iParam ) )
      iChar = ( UCHAR ) hb_parc( iParam )[0];
   else
      iChar = hb_gtGetClearChar();

   return iChar;
}
screen1.c301
STATIC INThb_ctGetClearColor( int iParam )
static int hb_ctGetClearColor( int iParam )
{
   int iColor;

   if( ISNUM( iParam ) )
      iColor = hb_parni( iParam );
   else if( ISCHAR( iParam ) )
   {
      iColor = hb_gtColorToN( hb_parc( iParam ) );
      if( iColor == -1 )
         iColor = 0;
   }
   else
      iColor = hb_gtGetClearColor();

   return iColor;
}
screen1.c315
HB_FUNCCLEARWIN(void)
HB_FUNC( CLEARWIN )
{
   int iTop, iLeft, iBottom, iRight;

   if( hb_ctGetWinCord( &iTop, &iLeft, &iBottom, &iRight ) )
   {
      BYTE bColor, bChar;

      bColor = ( BYTE ) hb_ctGetClearColor( 5 );
      bChar  = ( BYTE ) hb_ctGetClearChar( 6 );

      hb_gtScrollEx( iTop, iLeft, iBottom, iRight, bColor, bChar, 0, 0 );
   }

   hb_retc( NULL );
}
screen1.c333
HB_FUNCINVERTWIN(void)
HB_FUNC( INVERTWIN )
{
   int iTop, iLeft, iBottom, iRight;

   if( hb_ctGetWinCord( &iTop, &iLeft, &iBottom, &iRight ) )
   {
      hb_gtBeginWrite();
      while( iTop <= iBottom )
      {
         int iCol = iLeft;
         while( iCol <= iRight )
         {
            BYTE bColor, bAttr;
            USHORT usChar;
   
            hb_gtGetChar( iTop, iCol, &bColor, &bAttr, &usChar );
            bColor = ( bColor & 0x88 ) |
                     ( ( bColor & 0x07 ) << 4 ) |
                     ( ( bColor >> 4 ) & 0x07 );
            hb_gtPutChar( iTop, iCol, bColor, bAttr, usChar );
            ++iCol;
         }
         ++iTop;
      }
      hb_gtEndWrite();
   }

   hb_retc( NULL );
}
screen1.c378
HB_FUNCUNTEXTWIN(void)
HB_FUNC( UNTEXTWIN )
{
   int iTop, iLeft, iBottom, iRight;
   UCHAR ucRepl, ucInit, ucEnd;

   if( hb_ctGetWinCord( &iTop, &iLeft, &iBottom, &iRight ) )
   {
      ucRepl = ( UCHAR ) hb_ctGetClearChar( 5 );

      if( ISNUM( 6 ) )
         ucInit = ( UCHAR ) hb_parni( 6 );
      else if( hb_parclen( 6 ) > 0 )
         ucInit = ( UCHAR ) hb_parc( 6 )[0];
      else
         ucInit = 176;

      if( ISNUM( 7 ) )
         ucEnd = ( UCHAR ) hb_parni( 7 );
      else if( hb_parclen( 7 ) > 0 )
         ucEnd = ( UCHAR ) hb_parc( 7 )[0];
      else
         ucEnd = 223;

      hb_gtBeginWrite();
      while( iTop <= iBottom )
      {
         int iCol = iLeft;
         while( iCol <= iRight )
         {
            BYTE bColor, bAttr;
            USHORT usChar;

            hb_gtGetChar( iTop, iCol, &bColor, &bAttr, &usChar );
            if( ucInit <= ucEnd ? ( usChar < ucInit || usChar > ucEnd ) :
                                  ( usChar > ucEnd && usChar < ucInit ) )
               hb_gtPutChar( iTop, iCol, bColor, bAttr, ucRepl );
            ++iCol;
         }
         ++iTop;
      }
      hb_gtEndWrite();
   }

   hb_retc( NULL );
}
screen1.c457
HB_FUNCCHARWIN(void)
HB_FUNC( CHARWIN )
{
   int iTop, iLeft, iBottom, iRight;

   if( hb_ctGetWinCord( &iTop, &iLeft, &iBottom, &iRight ) )
   {
      UCHAR ucNewChar, ucOldChar = 0;
      BOOL fAll = FALSE;

      ucNewChar = ( UCHAR ) hb_ctGetClearChar( 5 );

      if( ISNUM( 6 ) )
         ucOldChar = ( UCHAR ) hb_parni( 6 );
      else if( hb_parclen( 6 ) > 0 )
         ucOldChar = ( UCHAR ) hb_parc( 6 )[0];
      else
         fAll = TRUE;

      hb_gtBeginWrite();
      while( iTop <= iBottom )
      {
         int iCol = iLeft;
         while( iCol <= iRight )
         {
            BYTE bColor, bAttr;
            USHORT usChar;

            hb_gtGetChar( iTop, iCol, &bColor, &bAttr, &usChar );
            if( fAll || usChar == ucOldChar )
               hb_gtPutChar( iTop, iCol, bColor, bAttr, ucNewChar );
            ++iCol;
         }
         ++iTop;
      }
      hb_gtEndWrite();
   }

   hb_retc( NULL );
}
screen1.c541
HB_FUNCCOLORWIN(void)
HB_FUNC( COLORWIN )
{
   int iTop, iLeft, iBottom, iRight;

   if( hb_ctGetWinCord( &iTop, &iLeft, &iBottom, &iRight ) )
   {
      UCHAR ucNewColor, ucOldColor = 0;
      BOOL fAll = FALSE;

      ucNewColor = ( UCHAR ) hb_ctGetClearColor( 5 );

      if( ISNUM( 6 ) || ISCHAR( 6 ) )
         ucOldColor = ( UCHAR ) hb_ctGetClearColor( 6 );
      else
         fAll = TRUE;

      hb_gtBeginWrite();
      while( iTop <= iBottom )
      {
         int iCol = iLeft;
         while( iCol <= iRight )
         {
            BYTE bColor, bAttr;
            USHORT usChar;

            hb_gtGetChar( iTop, iCol, &bColor, &bAttr, &usChar );
            if( fAll || bColor == ucOldColor )
               hb_gtPutChar( iTop, iCol, ucNewColor, bAttr, usChar );
            ++iCol;
         }
         ++iTop;
      }
      hb_gtEndWrite();
   }

   hb_retc( NULL );
}
screen1.c622
HB_FUNCSCREENTEXT(void)
HB_FUNC( SCREENTEXT )
{
   int iTop, iLeft, iBottom, iRight;
   char * pBuffer, * szText;
   ULONG ulSize;

   if( hb_ctGetWinCord( &iTop, &iLeft, &iBottom, &iRight ) )
   {
      ulSize = ( ULONG ) ( iBottom - iTop + 1 ) * ( iRight - iLeft + 1 );
      szText = pBuffer = ( char * ) hb_xgrab( ulSize + 1 );
      while( iTop <= iBottom )
      {
         int iCol = iLeft;
         while( iCol <= iRight )
         {
            BYTE bColor, bAttr;
            USHORT usChar;
            hb_gtGetChar( iTop, iCol, &bColor, &bAttr, &usChar );
            *szText++ = ( char ) usChar;
            ++iCol;
         }
         ++iTop;
      }
      hb_retclen_buffer( pBuffer, ulSize );
   }
   else
      hb_retc( NULL );
}
screen1.c692
HB_FUNCCOLORREPL(void)
HB_FUNC( COLORREPL )
{
   int iMaxRow = hb_gtMaxRow();
   int iMaxCol = hb_gtMaxCol();
   int iRow = 0, iCol;
   UCHAR ucNewColor, ucOldColor = 0;
   BOOL fAll = FALSE;

   ucNewColor = ( UCHAR ) hb_ctGetClearColor( 1 );

   if( ISNUM( 2 ) || ISCHAR( 2 ) )
      ucOldColor = ( UCHAR ) hb_ctGetClearColor( 2 );
   else
      fAll = TRUE;

   hb_gtBeginWrite();
   while( iRow <= iMaxRow )
   {
      iCol = 0;
      while( iCol <= iMaxCol )
      {
         BYTE bColor, bAttr;
         USHORT usChar;

         hb_gtGetChar( iRow, iCol, &bColor, &bAttr, &usChar );
         if( fAll || bColor == ucOldColor )
            hb_gtPutChar( iRow, iCol, ucNewColor, bAttr, usChar );
         ++iCol;
      }
      ++iRow;
   }
   hb_gtEndWrite();

   hb_retc( NULL );
}
screen1.c752
screen2.c
TypeFunctionSourceLine
HB_FUNCSAYDOWN(void)
HB_FUNC( SAYDOWN )
{
   ULONG ulLen = hb_parclen( 1 );

   if( ulLen )
   {
      UCHAR * szText = ( UCHAR * ) hb_parc( 1 );
      SHORT sRow, sCol;
      int iRow, iCol, iMaxRow, iMaxCol;
      long lDelay;

      lDelay = ISNUM( 2 ) ? hb_parnl( 2 ) : 4;

      hb_gtGetPos( &sRow, &sCol );
      iRow = ISNUM( 3 ) ? hb_parni( 3 ) : ( int ) sRow;
      iCol = ISNUM( 4 ) ? hb_parni( 4 ) : ( int ) sCol;
      iMaxRow = hb_gtMaxRow();
      iMaxCol = hb_gtMaxCol();

      if( iRow >= 0 && iCol >= 0 && iRow <= iMaxRow && iCol <= iMaxCol )
      {
         BYTE bColor = ( BYTE ) hb_gtGetCurrColor();

         if( ulLen > ( ULONG ) ( iMaxRow - iRow + 1 ) )
            ulLen = ( ULONG ) ( iMaxRow - iRow + 1 );

         hb_gtBeginWrite();
         while( ulLen-- )
         {
            hb_gtPutChar( iRow++, iCol, bColor, 0, *szText++ );
            if( lDelay )
            {
               hb_gtEndWrite();
               hb_idleSleep( ( double ) lDelay / 1000 );
               hb_gtBeginWrite();
            }
         }
         hb_gtEndWrite();
      }
   }

   hb_retc( NULL );
}
screen2.c59
HB_FUNCSAYSPREAD(void)
HB_FUNC( SAYSPREAD )
{
   ULONG ulLen = hb_parclen( 1 );

   if( ulLen )
   {
      UCHAR * szText = ( UCHAR * ) hb_parc( 1 );
      ULONG ulPos, ul;
      SHORT sRow, sCol;
      int iRow, iCol, iMaxRow, iMaxCol;
      long lDelay;

      lDelay = ISNUM( 2 ) ? hb_parnl( 2 ) : 4;

      iMaxRow = hb_gtMaxRow();
      iMaxCol = hb_gtMaxCol();
      hb_gtGetPos( &sRow, &sCol );
      iRow = ISNUM( 3 ) ? hb_parni( 3 ) : ( int ) sRow;
      iCol = ISNUM( 4 ) ? hb_parni( 4 ) : ( iMaxCol >> 1 );

      if( iRow >= 0 && iCol >= 0 && iRow <= iMaxRow && iCol <= iMaxCol )
      {
         BYTE bColor = hb_gtGetCurrColor();

         ulPos = ulLen >> 1;
         ulLen = ulLen & 1;
         if( !ulLen )
         {
            ulLen = 2;
            --ulPos;
         }

         hb_gtBeginWrite();
         do
         {
            for( ul = 0; ul < ulLen && iCol + ( int ) ul <= iMaxCol; ++ul )
               hb_gtPutChar( iRow, iCol + ( int ) ul, bColor, 0, szText[ulPos + ul] );
            ulLen += 2;
            if( lDelay )
            {
               hb_gtEndWrite();
               hb_idleSleep( ( double ) lDelay / 1000 );
               hb_gtBeginWrite();
            }
         }
         while( ulPos-- && iCol-- );
         /* CT3 does not respect iCol in the above condition */
         hb_gtEndWrite();
      }
   }

   hb_retc( NULL );
}
screen2.c103
HB_FUNCSAYMOVEIN(void)
HB_FUNC( SAYMOVEIN )
{
   ULONG ulLen = hb_parclen( 1 );

   if( ulLen )
   {
      UCHAR * szText = ( UCHAR * ) hb_parc( 1 );
      ULONG ulChars, ul;
      SHORT sRow, sCol;
      int iRow, iCol, iMaxRow, iMaxCol;
      long lDelay;
      BOOL fBack;

      lDelay = ISNUM( 2 ) ? hb_parnl( 2 ) : 4;
      fBack = ISLOG( 5 ) && hb_parl( 5 );

      iMaxRow = hb_gtMaxRow();
      iMaxCol = hb_gtMaxCol();
      hb_gtGetPos( &sRow, &sCol );
      iRow = ISNUM( 3 ) ? hb_parni( 3 ) : ( int ) sRow;
      iCol = ISNUM( 4 ) ? hb_parni( 4 ) : ( int ) sCol;

      if( iRow >= 0 && iCol >= 0 && iRow <= iMaxRow && iCol <= iMaxCol )
      {
         BYTE bColor = hb_gtGetCurrColor();

         sRow = iRow;
         sCol = iCol + ( int ) ulLen;
         if( fBack )
            iCol += ulLen - 1;
         else
            szText += ulLen - 1;
         ulChars = 1;

         hb_gtBeginWrite();
         do
         {
            if( fBack )
            {
               if( iCol <= iMaxCol )
               {
                  for( ul = 0; ul < ulChars; ++ul )
                     hb_gtPutChar( iRow, iCol + ( int ) ul, bColor, 0, szText[ul] );
               }
               --iCol;
            }
            else
            {
               for( ul = 0; ul < ulChars; ++ul )
                  hb_gtPutChar( iRow, iCol + ( int ) ul, bColor, 0, szText[ul] );
               --szText;
            }
            if( ( int ) ulChars + iCol <= iMaxCol )
               ++ulChars;

            if( lDelay )
            {
               hb_gtEndWrite();
               hb_idleSleep( ( double ) lDelay / 1000 );
               hb_gtBeginWrite();
            }
         }
         while( --ulLen );
         hb_gtSetPos( sRow, sCol );
         hb_gtEndWrite();
      }
   }

   hb_retc( NULL );
}
screen2.c157
HB_FUNCCLEARSLOW(void)
HB_FUNC( CLEARSLOW )
{
   int iMaxRow = hb_gtMaxRow();
   int iMaxCol = hb_gtMaxCol();
   int iTop, iLeft, iBottom, iRight;
   UCHAR ucChar;
   long lDelay;

   lDelay  = hb_parnl( 1 );

   iTop    = hb_parni( 2 );
   iLeft   = hb_parni( 3 );
   iBottom = ISNUM( 4 ) ? hb_parni( 4 ) : iMaxRow;
   iRight  = ISNUM( 5 ) ? hb_parni( 5 ) : iMaxCol;

   if( ISNUM( 6 ) )
      ucChar = ( UCHAR ) hb_parni( 6 );
   else if( ISCHAR( 6 ) )
      ucChar = ( UCHAR ) hb_parc( 6 )[0];
   else
      ucChar = ( UCHAR ) hb_gtGetClearChar();

   if( iTop >= 0 && iLeft >= 0 && iTop <= iBottom && iLeft <= iRight )
   {
      BYTE pbFrame[2], bColor = ( BYTE ) hb_gtGetCurrColor();
      double dX, dY, dXX, dYY;

      pbFrame[0] = ucChar;
      pbFrame[1] = '\0';

      dX = iRight - iLeft + 1;
      dY = iBottom - iTop + 1;
      if( dX > dY )
      {
         dY /= dX;
         dX = 1;
      }
      else
      {
         dX /= dY;
         dY = 1;
      }
      dXX = dYY = 0;

      hb_gtBeginWrite();
      for( ;; )
      {
         hb_gtBoxEx( iTop, iLeft, iBottom, iRight, pbFrame, bColor );
         if( lDelay )
         {
            hb_gtEndWrite();
            hb_idleSleep( ( double ) lDelay / 1000 );
            hb_gtBeginWrite();
         }

         if( iTop >= iBottom && iLeft >= iRight )
            break;

         if( iTop < iBottom )
         {
            dYY += dY;
            if( dYY >= 1 )
            {
               iTop++;
               if( iBottom > iTop )
                  iBottom--;
               dYY -= 1;
            }
         }
         if( iLeft < iRight )
         {
            dXX += dX;
            if( dXX >= 1 )
            {
               iLeft++;
               if( iRight > iLeft )
                  iRight--;
            }
         }
      }
      hb_gtEndWrite();
   }
}
screen2.c228
HB_FUNCSCREENSTR(void)
HB_FUNC( SCREENSTR )
{
   SHORT sRow, sCol, sMaxRow, sMaxCol, sC;
   char * pBuffer, * szText;
   ULONG ulSize, ulCount = ULONG_MAX;

   hb_gtGetPos( &sRow, &sCol );
   if( ISNUM( 1 ) )
      sRow = ( SHORT ) hb_parni( 1 );
   if( ISNUM( 2 ) )
      sCol = ( SHORT ) hb_parni( 2 );
   if( ISNUM( 3 ) )
      ulCount = hb_parnl( 3 );
   sMaxRow = ( SHORT ) hb_gtMaxRow();
   sMaxCol = ( SHORT ) hb_gtMaxCol();

   if( sRow >= 0 && sRow <= sMaxRow && sCol >= 0 && sCol <= sMaxCol && ulCount )
   {
      ulSize = ( ULONG ) ( sMaxRow - sRow + 1 ) * ( sMaxCol - sCol + 1 );
      if( ulSize > ulCount )
         ulSize = ulCount;
      ulCount = ulSize;
      ulSize <<= 1;
      szText = pBuffer = ( char * ) hb_xgrab( ulSize + 1 );
      do
      {
         sC = sCol;
         do
         {
            BYTE bColor, bAttr;
            USHORT usChar;
            hb_gtGetChar( sRow, sC, &bColor, &bAttr, &usChar );
            *szText++ = ( char ) usChar;
            *szText++ = ( char ) bColor;
         }
         while( --ulCount && ++sC <= sMaxCol );
      }
      while( ulCount && ++sRow <= sMaxRow );

      hb_retclen_buffer( pBuffer, ulSize );
   }
   else
      hb_retc( NULL );
}
screen2.c312
HB_FUNCSTRSCREEN(void)
HB_FUNC( STRSCREEN )
{
   ULONG ulLen = hb_parclen( 1 );

   if( ulLen & 1 )
      ulLen--;

   if( ulLen )
   {
      UCHAR * szText = ( UCHAR * ) hb_parc( 1 );
      SHORT sRow, sCol, sMaxRow, sMaxCol, sC;

      hb_gtGetPos( &sRow, &sCol );
      if( ISNUM( 2 ) )
         sRow = ( SHORT ) hb_parni( 2 );
      if( ISNUM( 3 ) )
         sCol = ( SHORT ) hb_parni( 3 );
      sMaxRow = ( SHORT ) hb_gtMaxRow();
      sMaxCol = ( SHORT ) hb_gtMaxCol();

      if( sRow >= 0 && sRow <= sMaxRow && sCol >= 0 && sCol <= sMaxCol )
      {
         hb_gtBeginWrite();
         do
         {
            sC = sCol;
            do
            {
               USHORT usChar = *szText++;
               BYTE bColor = *szText++;
               hb_gtPutChar( sRow, sC, bColor, 0, usChar );
               ulLen -= 2;
            }
            while( ulLen && ++sC <= sMaxCol );
         }
         while( ulLen && ++sRow <= sMaxRow );
         hb_gtEndWrite();
      }
   }

   hb_retc( NULL );
}
screen2.c357
HB_FUNC_HB_CTDSPTIME(void)
HB_FUNC( _HB_CTDSPTIME )
{
   SHORT sRow, sCol;
   int iColor, iLen, i;
   char szTime[ 10 ];

   sRow = ( SHORT ) hb_parni( 1 );
   sCol = ( SHORT ) hb_parni( 2 );
   if( ISNUM( 4 ) )
      iColor = hb_parni( 4 );
   else if( ISCHAR( 4 ) )
   {
      iColor = hb_gtColorToN( hb_parc( 4 ) );
      if( iColor == -1 )
         iColor = 0;
   }
   else
      iColor = hb_gtGetClearColor();

   hb_dateTimeStr( szTime );
   iLen = 8;

   if( ISLOG( 3 ) && hb_parl( 3 ) )
      iLen -= 3;

   if( ISLOG( 5 ) && hb_parl( 5 ) )
   {
      int iHour = ( szTime[0] - '0' ) * 10 + ( szTime[1] - '0' );

      if( ISLOG( 6 ) && hb_parl( 6 ) )
         szTime[iLen++] = iHour >= 12 ? 'p' : 'a';
      if( iHour > 12 )
         iHour -= 12;
      else if( iHour == 0 )
         iHour = 12;
      szTime[0] = ( iHour / 10 ) + '0';
      szTime[1] = ( iHour % 10 ) + '0';
   }

   if( szTime[0] == '0' )
      szTime[0] = ' ';

   hb_gtDispBegin();
   for( i = 0; i < iLen; ++sCol, ++i )
      hb_gtPutScrChar( sRow, sCol, iColor, 0, szTime[i] );
   hb_gtDispEnd();
}
screen2.c400
setlast.c
TypeFunctionSourceLine
HB_FUNCSETLASTKEY(void)
HB_FUNC( SETLASTKEY )
{
    hb_inkeySetLast( hb_parni( 1 ) );
    hb_retc( NULL );
}
setlast.c56
setrc.c
TypeFunctionSourceLine
HB_FUNCSETRC(void)
HB_FUNC( SETRC )
{
   BOOL fRow = ISNUM( 1 ), fCol = ISNUM( 2 );

   if( fRow && fCol )
      hb_gtSetPos( ( SHORT ) hb_parni( 1 ), ( SHORT ) hb_parni( 2 ) );
   else
   {
      SHORT sRow, sCol;
      hb_gtGetPos( &sRow, &sCol );
      hb_gtSetPos( fRow ? ( SHORT ) hb_parni( 1 ) : sRow, fCol ? ( SHORT ) hb_parni( 2 ) : sCol );
   }

   hb_retc( NULL );
}
setrc.c55
strdiff.c
TypeFunctionSourceLine
STATIC INTmin3( int a, int b, int c )
static int min3( int a, int b, int c )
{
   if( a < b )
   {
      return ( ( a < c ? a : c ) );
   }
   return ( ( b < c ? b : c ) );
}
strdiff.c130
HB_FUNCSTRDIFF(void)
HB_FUNC( STRDIFF )
{
   /* param check */
   if( ISCHAR( 1 ) || ISCHAR( 2 ) )
   {
      /* get parameters */
      char *pcStr1, *pcStr2;
      size_t sStrLen1, sStrLen2;
      int iReplace, iDelete, iInsert;
      int iAtLike = ct_getatlike();
      char cAtLike = ct_getatlikechar();
      int *piPenalty;
      size_t sRowCnt, sColCnt;

      if( ISCHAR( 1 ) )
      {
         pcStr1 = ( char * ) hb_parc( 1 );
         sStrLen1 = ( size_t ) hb_parclen( 1 );
      }
      else
      {
         pcStr1 = ( char * ) "";
         sStrLen1 = 0;
      }

      if( ISCHAR( 2 ) )
      {
         pcStr2 = ( char * ) hb_parc( 2 );
         sStrLen2 = ( size_t ) hb_parclen( 2 );
      }
      else
      {
         pcStr2 = ( char * ) "";
         sStrLen2 = 0;
      }

      /* check for memory consumption */
      if( ( ( double ) sStrLen1 + 1.0 ) *
          ( ( double ) sStrLen2 + 1.0 ) *
          ( ( double ) sizeof( int ) ) >= ( double ) UINT_MAX )
      {
         int iArgErrorMode = ct_getargerrormode();

         if( iArgErrorMode != CT_ARGERR_IGNORE )
         {
            ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_STRDIFF, NULL,
                      "STRDIFF", 0, EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
         }
         hb_retni( -1 );
         return;
      }

      /* get penalty points */
      if( ISNUM( 3 ) )
         iReplace = hb_parni( 3 );
      else
         iReplace = 3;

      if( ISNUM( 4 ) )
         iDelete = hb_parni( 4 );
      else
         iDelete = 6;

      if( ISNUM( 5 ) )
         iInsert = hb_parni( 5 );
      else
         iInsert = 1;

      piPenalty = ( int * ) hb_xgrab( ( sStrLen1 + 1 ) *
                                      ( sStrLen2 + 1 ) * sizeof( int ) );

      MATRIXELEMENT( 0, 0 ) = 0;
      for( sColCnt = 0; sColCnt <= sStrLen2 - 1; sColCnt++ )
      {
         MATRIXELEMENT( 0, sColCnt + 1 ) = MATRIXELEMENT( 0, sColCnt ) + iInsert;
      }

      for( sRowCnt = 0; sRowCnt <= sStrLen1 - 1; sRowCnt++ )
      {
         MATRIXELEMENT( sRowCnt + 1, 0 ) = MATRIXELEMENT( sRowCnt, 0 ) + iDelete;
         for( sColCnt = 0; sColCnt <= sStrLen2 - 1; sColCnt++ )
         {
            int iReplaceCost;

            if( pcStr1[sRowCnt] == pcStr2[sColCnt] ||
                ( iAtLike == CT_SETATLIKE_WILDCARD &&
                  ( pcStr1[sRowCnt] == cAtLike ||
                    pcStr2[sColCnt] == cAtLike ) ) )
               iReplaceCost = 0;
            else
               iReplaceCost = iReplace;

            MATRIXELEMENT( sRowCnt + 1, sColCnt + 1 ) =
               min3( MATRIXELEMENT( sRowCnt, sColCnt ) + iReplaceCost,
                     MATRIXELEMENT( sRowCnt, sColCnt + 1 ) + iDelete,
                     MATRIXELEMENT( sRowCnt + 1, sColCnt ) + iInsert );
         }
      }

      hb_retni( MATRIXELEMENT( sStrLen1, sStrLen2 ) );
      hb_xfree( piPenalty );
   }
   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_STRDIFF, NULL, "STRDIFF", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retni( 0 );
   }
}
strdiff.c139
strswap.c
TypeFunctionSourceLine
HB_FUNCSTRSWAP(void)
HB_FUNC( STRSWAP )
{
   size_t sStrLen1, sStrLen2;

   /* param check */
   if( ( sStrLen1 = ( size_t ) hb_parclen( 1 ) ) > 0 &&
       ( sStrLen2 = ( size_t ) hb_parclen( 2 ) ) > 0 )
   {
      /* get parameters */
      char *pcString1 = ( char * ) hb_parc( 1 );
      char *pcString2 = ( char * ) hb_parc( 2 );
      char *pcRet1 = NULL, *pcRet2 = NULL;
      int iChange1, iChange2;
      size_t sIndex, sCmpLen;

      if( ( iChange1 = ISBYREF( 1 ) ) != 0 )
      {
         pcRet1 = ( char * ) hb_xgrab( sStrLen1 );
         hb_xmemcpy( pcRet1, pcString1, sStrLen1 );
      }

      if( ( iChange2 = ISBYREF( 2 ) ) != 0 )
      {
         pcRet2 = ( char * ) hb_xgrab( sStrLen2 );
         hb_xmemcpy( pcRet2, pcString2, sStrLen2 );
      }

      sCmpLen = ( sStrLen1 < sStrLen2 ? sStrLen1 : sStrLen2 );
      for( sIndex = 0; sIndex < sCmpLen; sIndex++ )
      {
         char cExchange;

         if( iChange1 )
         {
            cExchange = *( pcString1 + sIndex );
            *( pcRet1 + sIndex ) = *( pcString2 + sIndex );
            if( iChange2 )
            {
               *( pcRet2 + sIndex ) = cExchange;
            }
         }
         else
         {
            *( pcRet2 + sIndex ) = *( pcString1 + sIndex );
         }
      }

      /* strings */
      if( iChange1 )
      {
         hb_storclen( pcRet1, sStrLen1, 1 );
         hb_xfree( pcRet1 );
      }

      if( iChange2 )
      {
         hb_storclen( pcRet2, sStrLen2, 2 );
         hb_xfree( pcRet2 );
      }

      hb_retc( NULL );
   }
   else  /* ( sStrLen1 = ( size_t ) hb_parclen( 1 ) ) > 0 &&
            ( sStrLen2 = ( size_t ) hb_parclen( 2 ) ) > 0 */
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_STRSWAP, NULL, "STRSWAP", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retc( NULL );
   }
}
strswap.c86
tab.c
TypeFunctionSourceLine
HB_FUNCTABEXPAND(void)
HB_FUNC( TABEXPAND )
{
   if( ISCHAR( 1 ) )
   {
      char *pcString = ( char * ) hb_parc( 1 );
      size_t sStrLen = ( size_t ) hb_parclen( 1 );
      char *pcRet;
      size_t sRetLen;
      size_t sTabWidth = 0;
      char cFill, cTab, cCR;
      char *pcNewLine;
      size_t sNewLineLen;
      int iIgnore141;
      size_t sIndex, sLineIndex;
      size_t sTabCnt = 0;

      if( ISNUM( 2 ) )
         sTabWidth = hb_parnl( 2 );
      if( ( signed ) sTabWidth <= 0 )
         sTabWidth = 8;

      if( ISNUM( 3 ) )
         cFill = ( char ) ( hb_parnl( 3 ) % 256 );
      else if( hb_parclen( 3 ) > 0 )
         cFill = hb_parc( 3 )[0];
      else
         cFill = 0x20;

      if( ISCHAR( 4 ) && hb_parclen( 4 ) > 0 )
      {
         pcNewLine = ( char * ) hb_parc( 4 );
         sNewLineLen = hb_parclen( 4 );
      }
      else
      {
         pcNewLine = hb_conNewLine();
         sNewLineLen = 0;
         while( *( pcNewLine + sNewLineLen ) != 0x00 )
            sNewLineLen++;
      }
      if( sNewLineLen > 0 )
         cCR = *( pcNewLine );
      else
         cCR = 13;

      if( ISNUM( 5 ) )
         cTab = ( char ) ( hb_parnl( 5 ) % 256 );
      else if( hb_parclen( 5 ) > 0 )
         cTab = hb_parc( 5 )[0];
      else
         cTab = 0x09;

      if( ISLOG( 6 ) )
         iIgnore141 = hb_parl( 6 );
      else
         iIgnore141 = 0;

      /* estimate maximum return length by assuming that EVERY tab char
         can be replaced by at most  characters */
      for( sIndex = 0; sIndex < sStrLen; sIndex++ )
      {
         if( *( pcString + sIndex ) == cTab )
            sTabCnt++;
      }
      if( sTabCnt == 0 )
      {
         hb_retclen( pcString, sStrLen );
         return;
      }
      pcRet = ( char * ) hb_xgrab( sStrLen + ( sTabCnt * ( sTabWidth - 1 ) ) );

      /* now copy the string */
      sIndex = 0;
      sRetLen = 0;
      sLineIndex = 0;
      while( sTabCnt > 0 )
      {
         char cChar = ( char ) *( pcString + sIndex );

         if( cChar == cTab )
         {
            /* tab character */
            size_t sFillIndex;

            for( sFillIndex = sTabWidth - ( sLineIndex % sTabWidth ); sFillIndex > 0; sFillIndex-- )
            {
               *( pcRet + sRetLen ) = cFill;
               sRetLen++;
               sLineIndex++;
            }
            sTabCnt--;
            sIndex++;
         }
         else if( ( unsigned char ) cChar == 141 )
         {
            /* soft carriage return */
            *( pcRet + sRetLen ) = ( char ) 141;
            sRetLen++;
            sIndex++;
            if( iIgnore141 )
               sLineIndex++;
            else
               sLineIndex = 0;
         }
         else if( cChar == cCR )
         {
            /* newline string ? */
            if( sNewLineLen > 0 &&
                sIndex + sNewLineLen <= sStrLen &&
                ct_at_exact_forward( pcString + sIndex, sNewLineLen, pcNewLine,
                                     sNewLineLen, NULL ) == pcString + sIndex )
            {
               hb_xmemcpy( pcRet + sRetLen, pcString + sIndex, sNewLineLen );
               sRetLen += sNewLineLen;
               sIndex += sNewLineLen;
               sLineIndex = 0;
            }
            else
            {
               *( pcRet + sRetLen ) = cCR;
               sRetLen++;
               sIndex++;
               sLineIndex++;
            }
         }
         else
         {
            *( pcRet + sRetLen ) = *( pcString + sIndex );
            sRetLen++;
            sIndex++;
            sLineIndex++;
         }
      }
      /* copy rest */
      hb_xmemcpy( pcRet + sRetLen, pcString + sIndex, sStrLen - sIndex );
      sRetLen += sStrLen - sIndex;
      hb_retclen( pcRet, sRetLen );
      hb_xfree( pcRet );
   }
   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_TABEXPAND, NULL, "TABEXPAND", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }
      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retc( NULL );
   }
}
tab.c109
HB_FUNCTABPACK(void)
HB_FUNC( TABPACK )
{
   if( ISCHAR( 1 ) )
   {
      char *pcString = ( char * ) hb_parc( 1 );
      size_t sStrLen = ( size_t ) hb_parclen( 1 );
      char *pcRet;
      size_t sRetLen;
      size_t sTabWidth = 0;
      char cFill, cTab, cCR;
      char *pcNewLine;
      size_t sNewLineLen;
      int iIgnore141;
      size_t sIndex, sTabIndex, sFillCount;

      if( ISNUM( 2 ) )
         sTabWidth = hb_parnl( 2 );
      if( ( signed ) sTabWidth <= 0 )
         sTabWidth = 8;

      if( ISNUM( 3 ) )
         cFill = ( char ) ( hb_parnl( 3 ) % 256 );
      else if( hb_parclen( 3 ) > 0 )
         cFill = hb_parc( 3 )[0];
      else
         cFill = 0x20;

      sNewLineLen = hb_parclen( 4 );
      if( sNewLineLen > 0 )
         pcNewLine = ( char * ) hb_parc( 4 );
      else
      {
         pcNewLine = hb_conNewLine();
         sNewLineLen = strlen( pcNewLine );
      }
      if( sNewLineLen > 0 )
         cCR = *( pcNewLine );
      else
         cCR = 13;

      if( ISNUM( 5 ) )
         cTab = ( char ) ( hb_parnl( 5 ) % 256 );
      else if( hb_parclen( 5 ) > 0 )
         cTab = hb_parc( 5 )[0];
      else
         cTab = 0x09;

      if( ISLOG( 6 ) )
         iIgnore141 = hb_parl( 6 );
      else
         iIgnore141 = 0;

      if( sStrLen == 0 )
      {
         hb_retc( NULL );
         return;
      }
      /* estimate maximum return length by assuming that there's
         nothing to pack */
      pcRet = ( char * ) hb_xgrab( sStrLen );

      /* now copy the string */
      sIndex = 0;
      sRetLen = 0;
      sTabIndex = 0;
      sFillCount = 0;

      while( sIndex < sStrLen )
      {
         char cChar = ( char ) *( pcString + sIndex );

         if( cChar == cFill )
         {
            if( sTabIndex == sTabWidth - 1 )
            {
               /* we have just found the last character of a tabstopp */
               *( pcRet + sRetLen ) = cTab;
               sRetLen++;
               sFillCount = 0;
               sTabIndex = 0;
               sIndex++;
            }
            else
            {
               sFillCount++;
               sTabIndex++;
               sIndex++;
            }
         }
         else if( cChar == cTab )
         {
            *( pcRet + sRetLen ) = cTab;
            sRetLen++;
            /* discard any fill characters before the tabstopp */
            sFillCount = 0;
            sTabIndex = 0;
            sIndex++;
         }
         else if( ( unsigned char ) cChar == 141 && !iIgnore141 )
         {
            /* soft carriage return */

            /* eventually not enough fill chars to fill a tab,
               so copy them verbatim */
            for( ; sFillCount > 0; sFillCount-- )
            {
               *( pcRet + sRetLen ) = cFill;
               sRetLen++;
            }
            *( pcRet + sRetLen ) = ( char ) 141;
            sRetLen++;
            sTabIndex = 0;
            sIndex++;
         }
         else if( cChar == cCR )
         {
            /* newline string ? */
            if( sNewLineLen > 0 &&
                sIndex + sNewLineLen <= sStrLen &&
                ct_at_exact_forward( pcString + sIndex, sNewLineLen, pcNewLine,
                                     sNewLineLen, NULL ) == pcString + sIndex )
            {
               /* eventually not enough fill chars to fill a tab,
                  so copy them verbatim */
               for( ; sFillCount > 0; sFillCount-- )
               {
                  *( pcRet + sRetLen ) = cFill;
                  sRetLen++;
               }
               hb_xmemcpy( pcRet + sRetLen, pcString + sIndex, sNewLineLen );
               sRetLen += sNewLineLen;
               sIndex += sNewLineLen;
               sTabIndex = 0;
            }
            else
            {
               *( pcRet + sRetLen ) = cCR;
               sRetLen++;
               sIndex++;
               sTabIndex = 0;
            }
         }
         else
         {
            /* eventually not enough fill chars to fill a tab,
               so copy them verbatim */
            for( ; sFillCount > 0; sFillCount-- )
            {
               *( pcRet + sRetLen ) = cFill;
               sRetLen++;
               sTabIndex++;
               if( sTabIndex == sTabWidth - 1 )
               {
                  sTabIndex = 0;
               }
            }
            *( pcRet + sRetLen ) = *( pcString + sIndex );
            sRetLen++;
            sIndex++;
            sTabIndex++;
            if( sTabIndex == sTabWidth - 1 )
               sTabIndex = 0;
         }
      }
      /* copy rest */
      for( ; sFillCount > 0; sFillCount-- )
      {
         *( pcRet + sRetLen ) = cFill;
         sRetLen++;
      }
      hb_retclen( pcRet, sRetLen );
      hb_xfree( pcRet );
   }
   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_TABPACK, NULL, "TABPACK", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }
      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retc( NULL );
   }
}
tab.c310
token1.c
TypeFunctionSourceLine
STATIC VOIDdo_token1( int iSwitch )
static void do_token1( int iSwitch )
{
   int iParamCheck = 0;
   int iNoRef = ct_getref() && ISBYREF( 1 );

   switch ( iSwitch )
   {
      case DO_TOKEN1_TOKEN:
         siPreSeparator = siPostSeparator = -1;
         /* no "break" here !! */
      case DO_TOKEN1_ATTOKEN:
      case DO_TOKEN1_NUMTOKEN:
      case DO_TOKEN1_TOKENLOWER:
      case DO_TOKEN1_TOKENUPPER:
         iParamCheck = ( ISCHAR( 1 ) );
         break;
   }

   if( iParamCheck )
   {
      char *pcString = hb_parc( 1 );
      size_t sStrLen = ( size_t ) hb_parclen( 1 );
      char *pcSeparatorStr;
      size_t sSeparatorStrLen;
      ULONG ulTokenCounter = 0;
      ULONG ulSkip;
      char *pcSubStr;
      char *pcRet = NULL;
      size_t sSubStrLen;
      size_t sRetStrLen = 0;
      ULONG ulToken = 0;
      ULONG ulSkipCnt;
      char *pc;

      /* separator string */
      sSeparatorStrLen = hb_parclen( 2 );
      if( sSeparatorStrLen != 0 )
         pcSeparatorStr = hb_parc( 2 );
      else
      {
         pcSeparatorStr = ( char * ) spcSeparatorStr;
         sSeparatorStrLen = ssSeparatorStrLen;
      }

      /* token counter */
      if( iSwitch != DO_TOKEN1_NUMTOKEN )
         ulTokenCounter = hb_parnl( 3 );
      if( ulTokenCounter == 0 )
         ulTokenCounter = ULONG_MAX;

      /* skip width */
      if( iSwitch == DO_TOKEN1_NUMTOKEN )
      {
         if( ISNUM( 3 ) )
            ulSkip = hb_parnl( 3 );
         else
            ulSkip = ULONG_MAX;
      }
      else
      {
         if( ISNUM( 4 ) )
            ulSkip = hb_parnl( 4 );
         else
            ulSkip = ULONG_MAX;
      }
      if( ulSkip == 0 )
         ulSkip = ULONG_MAX;

      /* prepare return value for TOKENUPPER/TOKENLOWER */
      if( iSwitch == DO_TOKEN1_TOKENLOWER || iSwitch == DO_TOKEN1_TOKENUPPER )
      {
         if( sStrLen == 0 )
         {
            if( iNoRef )
               hb_retl( 0 );
            else
               hb_retc( NULL );
            return;
         }
         sRetStrLen = sStrLen;
         pcRet = ( char * ) hb_xgrab( sRetStrLen + 1 );
         hb_xmemcpy( pcRet, pcString, sRetStrLen );
      }

      /* find the th token */
      pcSubStr = pcString;
      sSubStrLen = sStrLen;

      /* scan start condition */
      pc = pcSubStr - 1;

      while( ulToken < ulTokenCounter )
      {
         size_t sMatchedPos = sSeparatorStrLen;

         /* Skip the left ulSkip successive separators */
         ulSkipCnt = 0;
         do
         {
            sSubStrLen -= ( pc - pcSubStr ) + 1;
            pcSubStr = pc + 1;
            pc = ct_at_charset_forward( pcSubStr, sSubStrLen,
                                        pcSeparatorStr, sSeparatorStrLen, &sMatchedPos );
            if( iSwitch == DO_TOKEN1_TOKEN )
            {
               siPreSeparator = siPostSeparator;
               if( sMatchedPos < sSeparatorStrLen )
                  siPostSeparator = pcSeparatorStr[sMatchedPos];
               else
                  siPostSeparator = -1;
            }
            ulSkipCnt++;
         }
         while( ulSkipCnt < ulSkip && pc == pcSubStr );

         if( sSubStrLen == 0 )
         {
            /* string ends with tokenizer (null string after tokenizer at 
               end of string is not a token) */
            switch ( iSwitch )
            {
               case DO_TOKEN1_TOKEN:
               {
                  char cRet;

                  hb_retc( NULL );
                  if( ISBYREF( 5 ) )
                  {
                     cRet = ( char ) siPreSeparator;
                     hb_storclen( &cRet, ( siPreSeparator != -1 ? 1 : 0 ), 5 );
                  }
                  if( ISBYREF( 6 ) )
                  {
                     cRet = ( char ) siPostSeparator;
                     hb_storclen( &cRet, ( siPostSeparator != -1 ? 1 : 0 ), 6 );
                  }
                  break;
               }
               case DO_TOKEN1_NUMTOKEN:
                  hb_retnl( ulToken );
                  break;

               case DO_TOKEN1_ATTOKEN:
                  hb_retni( 0 );
                  break;

               case DO_TOKEN1_TOKENLOWER:
               case DO_TOKEN1_TOKENUPPER:
                  if( ISBYREF( 1 ) )
                     hb_storclen( pcRet, sRetStrLen, 1 );

                  if( iNoRef )
                  {
                     hb_xfree( pcRet );
                     hb_retl( 0 );
                  }
                  else
                     hb_retclen_buffer( pcRet, sRetStrLen );
                  break;
            }
            return;
         }

         switch ( iSwitch )
         {
            case DO_TOKEN1_TOKEN:
            case DO_TOKEN1_NUMTOKEN:
            case DO_TOKEN1_ATTOKEN:
               break;

            case DO_TOKEN1_TOKENLOWER:
               if( pcSubStr != pc )     /* letters can be tokenizers, too,
                                           but they should not be lowercase'd */
                  *( pcRet + ( pcSubStr - pcString ) ) = ( char ) hb_charLower( ( UCHAR ) *pcSubStr );
               break;

            case DO_TOKEN1_TOKENUPPER:
               if( pcSubStr != pc )     /* letters can be tokenizers, too, 
                                           but they should not be uppercase'd */
                  *( pcRet + ( pcSubStr - pcString ) ) = ( char ) hb_charUpper( ( UCHAR ) *pcSubStr );
               break;

            default:
               break;
         }

         ulToken++;

         if( pc == NULL )
         {
            pc = pcSubStr + sSubStrLen; /* little trick for return values */
            break;              /* we must leave the while loop even if we have not
                                   yet found the th token */
         }

         /* should we find the last token, but string ends with tokenizer, i.e.
            pc points to the last character at the moment ?
            -> break here ! */
         if( ulTokenCounter == HB_MKULONG( 255, 255, 255, 255 ) )
         {
            if( ulSkip == HB_MKULONG( 255, 255, 255, 255 ) )
            {
               char *t;
               BOOL bLast = TRUE;

               for( t = pc + 1; t < pcString + sStrLen; t++ )
               {
                  if( !memchr( pcSeparatorStr, *t, sSeparatorStrLen ) )
                  {
                     bLast = FALSE;
                     break;
                  }
               }
               if( bLast )
                  break;
            }
            else if( pc + 1 == pcString + sStrLen )
               break;
         }
      }  /* while( ulToken < ulTokenCounter ) */

      switch ( iSwitch )
      {
         case DO_TOKEN1_TOKEN:
         {
            char cRet;

            if( ( ulTokenCounter == HB_MKULONG( 255, 255, 255, 255 ) ) ||
                ( ulToken == ulTokenCounter ) )
               hb_retclen( pcSubStr, pc - pcSubStr );
            else
               hb_retc( NULL );

            if( ISBYREF( 5 ) )
            {
               cRet = ( char ) siPreSeparator;
               hb_storclen( &cRet, ( siPreSeparator != -1 ? 1 : 0 ), 5 );
            }
            if( ISBYREF( 6 ) )
            {
               cRet = ( char ) siPostSeparator;
               hb_storclen( &cRet, ( siPostSeparator != -1 ? 1 : 0 ), 6 );
            }
            break;
         }
         case DO_TOKEN1_NUMTOKEN:
            hb_retnl( ulToken );
            break;

         case DO_TOKEN1_ATTOKEN:
            if( ( ulTokenCounter == HB_MKULONG( 255, 255, 255, 255 ) ) ||
                ( ulToken == ulTokenCounter ) )
               hb_retnl( pcSubStr - pcString + 1 );
            else
               hb_retni( 0 );
            break;

         case DO_TOKEN1_TOKENLOWER:
         case DO_TOKEN1_TOKENUPPER:
            if( ISBYREF( 1 ) )
               hb_storclen( pcRet, sRetStrLen, 1 );

            if( iNoRef )
            {
               hb_xfree( pcRet );
               hb_retl( 0 );
            }
            else
               hb_retclen_buffer( pcRet, sRetStrLen );
            break;
      }
   }
   else  /* iParamCheck */
   {
      switch ( iSwitch )
      {
         case DO_TOKEN1_TOKEN:
         {
            PHB_ITEM pSubst = NULL;
            int iArgErrorMode = ct_getargerrormode();
            char cRet;

            if( ISBYREF( 5 ) )
            {
               cRet = ( char ) siPreSeparator;
               hb_storclen( &cRet, ( siPreSeparator != -1 ? 1 : 0 ), 5 );
            }
            if( ISBYREF( 6 ) )
            {
               cRet = ( char ) siPostSeparator;
               hb_storclen( &cRet, ( siPostSeparator != -1 ? 1 : 0 ), 6 );
            }

            if( iArgErrorMode != CT_ARGERR_IGNORE )
            {
               pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                        CT_ERROR_TOKEN, NULL, "TOKEN", 0,
                                        EF_CANSUBSTITUTE,
                                        HB_ERR_ARGS_BASEPARAMS );
            }

            if( pSubst != NULL )
               hb_itemReturnRelease( pSubst );
            else if( !iNoRef )
               hb_retc( NULL );
            else
               hb_retl( 0 );
            break;
         }
         case DO_TOKEN1_TOKENLOWER:
         case DO_TOKEN1_TOKENUPPER:
         {
            PHB_ITEM pSubst = NULL;
            int iArgErrorMode = ct_getargerrormode();

            if( iArgErrorMode != CT_ARGERR_IGNORE )
            {
               pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                        iSwitch == DO_TOKEN1_TOKENLOWER ?
                                        CT_ERROR_TOKENLOWER : CT_ERROR_TOKENUPPER,
                                        NULL, HB_ERR_FUNCNAME, 0,
                                        EF_CANSUBSTITUTE,
                                        HB_ERR_ARGS_BASEPARAMS );
            }
            if( pSubst != NULL )
               hb_itemReturnRelease( pSubst );
            else if( !iNoRef )
               hb_retc( NULL );
            else
               hb_retl( 0 );
            break;
         }
         case DO_TOKEN1_NUMTOKEN:
         case DO_TOKEN1_ATTOKEN:
         {
            PHB_ITEM pSubst = NULL;
            int iArgErrorMode = ct_getargerrormode();

            if( iArgErrorMode != CT_ARGERR_IGNORE )
            {
               pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                        iSwitch == DO_TOKEN1_NUMTOKEN ?
                                        CT_ERROR_NUMTOKEN : CT_ERROR_ATTOKEN,
                                        NULL, HB_ERR_FUNCNAME, 0,
                                        EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
            }
            if( pSubst != NULL )
               hb_itemReturnRelease( pSubst );
            else
               hb_retni( 0 );
            break;
         }
      }
   }
}
token1.c83
HB_FUNCATTOKEN(void)
HB_FUNC( ATTOKEN )
{
   do_token1( DO_TOKEN1_ATTOKEN );
}
token1.c503
HB_FUNCTOKEN(void)
HB_FUNC( TOKEN )
{
   do_token1( DO_TOKEN1_TOKEN );
}
token1.c577
HB_FUNCNUMTOKEN(void)
HB_FUNC( NUMTOKEN )
{
   do_token1( DO_TOKEN1_NUMTOKEN );
}
token1.c613
HB_FUNCTOKENLOWER(void)
HB_FUNC( TOKENLOWER )
{
   do_token1( DO_TOKEN1_TOKENLOWER );
}
token1.c679
HB_FUNCTOKENUPPER(void)
HB_FUNC( TOKENUPPER )
{
   do_token1( DO_TOKEN1_TOKENUPPER );
}
token1.c746
HB_FUNCTOKENSEP(void)
HB_FUNC( TOKENSEP )
{
   char cRet;

   if( ISLOG( 1 ) && hb_parl( 1 ) )
   {
      /* return the separator char BEHIND the last token */
      if( siPostSeparator != -1 )
      {
         cRet = ( char ) siPostSeparator;
         hb_retclen( &cRet, 1 );
      }
      else
         hb_retc( NULL );
   }
   else
   {
      /* return the separator char BEFORE the last token */
      if( siPreSeparator != -1 )
      {
         cRet = ( char ) siPreSeparator;
         hb_retclen( &cRet, 1 );
      }
      else
         hb_retc( NULL );
   }
}
token1.c792
token2.c
TypeFunctionSourceLine
STATIC TOKEN_ENVIRONMENTsTokEnvNew( void )
/* -------------------------------------------------------------------- */
static TOKEN_ENVIRONMENT sTokEnvNew( void )
{
   TOKEN_ENVIRONMENT env = ( TOKEN_ENVIRONMENT )
         hb_xalloc( sizeof( TOKEN_POSITION ) * ( 2 + TOKEN_ENVIRONMENT_STEP ) );
   if( env == NULL )
      return NULL;

   /* use the first element to store current length and use of token env */
   env[0].sStartPos = 0;                    /* 0-based index to next free, unused element */
   env[0].sEndPos = TOKEN_ENVIRONMENT_STEP; /* but there are 100 elements ready for use */

   /* use second element to store actual index with tokennext() */
   env[1].sStartPos = 0;        /* 0-based index value that is to be used NEXT */

   return env;
}

/* -------------------------------------------------------------------- */
token2.c84
STATIC INTsTokEnvAddPos( TOKEN_ENVIRONMENT * pEnv, TOKEN_POSITION * pPos )
static int sTokEnvAddPos( TOKEN_ENVIRONMENT * pEnv, TOKEN_POSITION * pPos )
{
   size_t index;
   TOKEN_ENVIRONMENT env = *pEnv;

   /* new memory needed ? */
   if( env[0].sStartPos == env[0].sEndPos )
   {
      env = *pEnv = ( TOKEN_ENVIRONMENT )
               hb_xrealloc( env, sizeof( TOKEN_POSITION ) *
                            ( 2 + env[0].sEndPos + TOKEN_ENVIRONMENT_STEP ) );
      if( env == NULL )
         return 0;

      env[0].sEndPos += TOKEN_ENVIRONMENT_STEP;
   }

   index = env[0].sStartPos + 2;        /* +2  because of extra elements */
   env[index].sStartPos = pPos->sStartPos;
   env[index].sEndPos = pPos->sEndPos;
   env[0].sStartPos++;

   return 1;
}

/* -------------------------------------------------------------------- */
token2.c108
STATIC INTsTokEnvEnd( TOKEN_ENVIRONMENT env )
static int sTokEnvEnd( TOKEN_ENVIRONMENT env )
{
   return env[1].sStartPos >= env[0].sStartPos;
}

/* -------------------------------------------------------------------- */
token2.c137
STATIC SIZE_TsTokEnvGetSize( TOKEN_ENVIRONMENT env )
static size_t sTokEnvGetSize( TOKEN_ENVIRONMENT env )
{
   return sizeof( TOKEN_POSITION ) * ( 2 + env[0].sEndPos );
}

/* -------------------------------------------------------------------- */
token2.c146
STATIC TOKEN_POSITION sTokEnvGetPos( TOKEN_ENVIRONMENT env )
static TOKEN_POSITION *sTokEnvGetPos( TOKEN_ENVIRONMENT env )
{
   if( env[1].sStartPos >= env[0].sStartPos )
      return NULL;

   return env + 2 + ( env[1].sStartPos ); /* "+2" because of extra elements */
}

/* -------------------------------------------------------------------- */
token2.c155
STATIC TOKEN_POSITION sTokEnvGetPosIndex( TOKEN_ENVIRONMENT env, size_t index )
static TOKEN_POSITION *sTokEnvGetPosIndex( TOKEN_ENVIRONMENT env, size_t index )
{
   if( index >= env[0].sStartPos )
      return NULL;

   return env + 2 + index; /* "+2" because of extra elements */
}

/* -------------------------------------------------------------------- */
token2.c167
STATIC INTsTokEnvIncPtr( TOKEN_ENVIRONMENT env )
static int sTokEnvIncPtr( TOKEN_ENVIRONMENT env )
{
   if( env[1].sStartPos >= env[0].sStartPos )
      return 0;
   else
   {
      env[1].sStartPos++;
      return 1;
   }
}

/* -------------------------------------------------------------------- */
token2.c179
STATIC INTsTokEnvSetPtr( TOKEN_ENVIRONMENT env, size_t sCnt )
static int sTokEnvSetPtr( TOKEN_ENVIRONMENT env, size_t sCnt )
{
   if( sCnt >= env[0].sStartPos )
      return 0;
   else
   {
      env[1].sStartPos = sCnt;
      return 1;
   }
}

/* -------------------------------------------------------------------- */
/* decrement tokenizing pointer by one                                  */
/* -------------------------------------------------------------------- */

/* sTokEnvDecPtr currently not used ! */
/* static int sTokEnvDecPtr( TOKEN_ENVIRONMENT env )
{
   if( env[1].sStartPos <= 0 )
      return 0;
   else
   {
      env[1].sStartPos--;
      return 1;
   }
} */

/* -------------------------------------------------------------------- */
token2.c194
STATIC SIZE_TsTokEnvGetPtr( TOKEN_ENVIRONMENT env )
static size_t sTokEnvGetPtr( TOKEN_ENVIRONMENT env )
{
   return env[1].sStartPos;
}

/* -------------------------------------------------------------------- */
token2.c225
STATIC SIZE_TsTokEnvGetCnt( TOKEN_ENVIRONMENT env )
static size_t sTokEnvGetCnt( TOKEN_ENVIRONMENT env )
{
   return env[0].sStartPos;
}

/* -------------------------------------------------------------------- */
token2.c234
STATIC VOIDsTokEnvDel( TOKEN_ENVIRONMENT env )
static void sTokEnvDel( TOKEN_ENVIRONMENT env )
{
   hb_xfree( env );
}

/* ==================================================================== */
/* HARBOUR functions                                                    */
/* ==================================================================== */

/* static data */
static const char *spcSeparatorStr =
   "\x00" "\x09" "\x0A" "\x0C" "\x1A" "\x20" "\x8A" "\x8C" ",.;:!\?/\\<>()#&%+-*";
static const size_t ssSeparatorStrLen = 26;

/* TODO: make thread safe */
static TOKEN_ENVIRONMENT s_sTokenEnvironment = NULL;
static BOOL s_fInit = FALSE;
token2.c243
STATIC VOIDsTokExit( void * cargo )
static void sTokExit( void * cargo )
{
   HB_SYMBOL_UNUSED( cargo );

   if( s_sTokenEnvironment )
   {
      sTokEnvDel( s_sTokenEnvironment );
      s_sTokenEnvironment = NULL;
   }
}
token2.c261
STATIC VOIDsTokSet( TOKEN_ENVIRONMENT env )
static void sTokSet( TOKEN_ENVIRONMENT env )
{
   if( !s_fInit && env )
   {
      hb_vmAtExit( sTokExit, NULL );
      s_fInit = TRUE;
   }

   if( s_sTokenEnvironment )
      sTokEnvDel( s_sTokenEnvironment );

   s_sTokenEnvironment = env;
}
token2.c272
HB_FUNCTOKENINIT(void)
HB_FUNC( TOKENINIT )
{
   if( ISCHAR( 1 ) )
   {
      char *pcString = hb_parc( 1 );
      size_t sStrLen = ( size_t ) hb_parclen( 1 );
      char *pcSeparatorStr;
      size_t sSeparatorStrLen;
      ULONG ulSkipCnt, ulSkip;
      char *pcSubStr, *pc;
      size_t sSubStrLen;
      TOKEN_ENVIRONMENT sTokenEnvironment;
      TOKEN_POSITION sTokenPosition;

      /* separator string */
      sSeparatorStrLen = hb_parclen( 2 );
      if( sSeparatorStrLen > 0 )
         pcSeparatorStr = hb_parc( 2 );
      else
      {
         pcSeparatorStr = ( char * ) spcSeparatorStr;
         sSeparatorStrLen = ssSeparatorStrLen;
      }

      /* skip width */
      if( ISNUM( 3 ) )
         ulSkip = hb_parnl( 3 );
      else
         ulSkip = ULONG_MAX;
      if( ulSkip == 0 )
         ulSkip = ULONG_MAX;

      /* allocate new token environment */
      if( ( sTokenEnvironment = sTokEnvNew() ) == NULL )
      {
         int iArgErrorMode = ct_getargerrormode();

         if( iArgErrorMode != CT_ARGERR_IGNORE )
         {
            ct_error( ( USHORT ) iArgErrorMode, EG_MEM, CT_ERROR_TOKENINIT,
                      NULL, "TOKENINIT", 0, EF_CANDEFAULT,
                      HB_ERR_ARGS_BASEPARAMS );
         }
         hb_retl( 0 );
         return;
      }

      pcSubStr = pcString;
      sSubStrLen = sStrLen;

      /* scan start condition */
      pc = pcSubStr - 1;

      for( ;; )
      {
         size_t sMatchedPos = sSeparatorStrLen;

         /* ulSkip */
         ulSkipCnt = 0;
         do
         {
            sSubStrLen -= ( pc - pcSubStr ) + 1;
            pcSubStr = pc + 1;
            pc = ct_at_charset_forward( pcSubStr, sSubStrLen, pcSeparatorStr,
                                        sSeparatorStrLen, &sMatchedPos );
            ulSkipCnt++;
         }
         while( ulSkipCnt < ulSkip && pc == pcSubStr );

         if( sSubStrLen == 0 )
            break;

         sTokenPosition.sStartPos = pcSubStr - pcString;
         if( pc == NULL )
            sTokenPosition.sEndPos = pcSubStr - pcString + sSubStrLen;
         else
            sTokenPosition.sEndPos = pc - pcString;

         if( !sTokEnvAddPos( &sTokenEnvironment, &sTokenPosition ) )
         {
            int iArgErrorMode = ct_getargerrormode();

            if( iArgErrorMode != CT_ARGERR_IGNORE )
            {
               ct_error( ( USHORT ) iArgErrorMode, EG_MEM, CT_ERROR_TOKENINIT,
                         NULL, "TOKENINIT", 0, EF_CANDEFAULT,
                         HB_ERR_ARGS_BASEPARAMS );
            }
            sTokEnvDel( sTokenEnvironment );
            hb_retl( 0 );
            return;
         }

         if( pc == NULL )
            break;
      }  /* for( ;; ) */

      /* save token environment to 4th parameter OR to the static */
      if( ISBYREF( 4 ) )
      {
         hb_storclen( ( char * ) sTokenEnvironment, sTokEnvGetSize( sTokenEnvironment ), 4 );
         sTokEnvDel( sTokenEnvironment );
      }
      else
      {
         sTokSet( sTokenEnvironment );
      }
      hb_retl( 1 );
   }
   else  /* ISCHAR( 1 ) */
   {
      /* if there is a token environment stored in either the 4th parameter or
         in the static variable -> rewind to first token */
      TOKEN_ENVIRONMENT sTokenEnvironment;

      if( ISCHAR( 4 ) && ISBYREF( 4 ) )
         sTokenEnvironment = ( TOKEN_ENVIRONMENT ) hb_parc( 4 );
      else
         sTokenEnvironment = s_sTokenEnvironment;

      if( sTokenEnvironment != NULL )
      {
         /* rewind to first token */
         hb_retl( sTokEnvSetPtr( sTokenEnvironment, 0 ) );
         if( ISCHAR( 4 ) && ISBYREF( 4 ) )
            hb_storclen( ( char * ) sTokenEnvironment, sTokEnvGetSize( sTokenEnvironment ), 4 );
      }
      else
      {
         /* nothing to rewind -> return .f. */
         PHB_ITEM pSubst = NULL;
         int iArgErrorMode = ct_getargerrormode();

         if( iArgErrorMode != CT_ARGERR_IGNORE )
         {
            pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                     CT_ERROR_TOKENINIT, NULL, "TOKENINIT", 0,
                                     EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
         }
         if( pSubst != NULL )
            hb_itemReturnRelease( pSubst );
         else
            hb_retl( 0 );
      }
   }
}
token2.c370
HB_FUNCTOKENNEXT(void)
HB_FUNC( TOKENNEXT )
{
   if( ISCHAR( 1 ) )
   {
      char *pcString = hb_parc( 1 );
      size_t sStrLen = ( size_t ) hb_parclen( 1 );

      TOKEN_ENVIRONMENT sTokenEnvironment;
      TOKEN_POSITION *psTokenPosition;

      /* token environment by parameter ... */
      if( ISCHAR( 3 ) && ISBYREF( 3 ) )
      {
         size_t sStrLen3 = ( size_t ) hb_parclen( 3 );

         if( sStrLen3 < sizeof( TOKEN_POSITION ) * 2 )
         {
            int iArgErrorMode = ct_getargerrormode();

            if( iArgErrorMode != CT_ARGERR_IGNORE )
            {
               ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_TOKENNEXT,
                         NULL, "TOKENNEXT", 0, EF_CANDEFAULT,
                         HB_ERR_ARGS_BASEPARAMS );
            }
            hb_retc( NULL );
            return;
         }
         sTokenEnvironment = ( TOKEN_ENVIRONMENT ) hb_xgrab( sStrLen3 );
         hb_xmemcpy( ( char * ) sTokenEnvironment, hb_parc( 3 ), sStrLen3 );
      }
      else
      {
         /* ... or static  ? */
         if( s_sTokenEnvironment == NULL )
         {
            int iArgErrorMode = ct_getargerrormode();

            if( iArgErrorMode != CT_ARGERR_IGNORE )
            {
               ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_TOKENNEXT,
                         NULL, "TOKENNEXT", 0, EF_CANDEFAULT,
                         HB_ERR_ARGS_BASEPARAMS );
            }
            hb_retc( NULL );
            return;
         }
         sTokenEnvironment = s_sTokenEnvironment;
      }

      /* nth token or next token ?  */
      if( ISNUM( 2 ) )
      {
         psTokenPosition = sTokEnvGetPosIndex( sTokenEnvironment, hb_parnl( 2 ) - 1 );
         /* no increment here */
      }
      else
      {
         psTokenPosition = sTokEnvGetPos( sTokenEnvironment );
         /* increment counter */
         sTokEnvIncPtr( sTokenEnvironment );
      }

      if( ( psTokenPosition == NULL ) || ( sStrLen <= psTokenPosition->sStartPos ) )
      {
         int iArgErrorMode = ct_getargerrormode();

         if( iArgErrorMode != CT_ARGERR_IGNORE )
         {
            ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_TOKENNEXT, NULL,
                      "TOKENNEXT", 0, EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
         }
         if( ISCHAR( 3 ) && ISBYREF( 3 ) )
         {
            hb_storclen( ( char * ) sTokenEnvironment, sTokEnvGetSize( sTokenEnvironment ), 3 );
            hb_xfree( ( char * ) sTokenEnvironment );
         }
         hb_retc( NULL );
         return;
      }

      if( sStrLen < psTokenPosition->sEndPos )
         hb_retclen( pcString + psTokenPosition->sStartPos,
                     sStrLen - ( psTokenPosition->sStartPos ) );
      else
         hb_retclen( pcString + psTokenPosition->sStartPos,
                     ( psTokenPosition->sEndPos ) - ( psTokenPosition->sStartPos ) );

      if( ISCHAR( 3 ) && ISBYREF( 3 ) )
      {
         hb_storclen( ( char * ) sTokenEnvironment, sTokEnvGetSize( sTokenEnvironment ), 3 );
         hb_xfree( ( char * ) sTokenEnvironment );
      }

   }
   else
   {
      /* no string given, no token returns */
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_TOKENNEXT, NULL, "TOKENNEXT", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }
      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retc( NULL );
   }
}
token2.c576
HB_FUNCTOKENNUM(void)
HB_FUNC( TOKENNUM )
{
   TOKEN_ENVIRONMENT sTokenEnvironment;

   if( ISCHAR( 1 ) && ISBYREF( 1 ) )
      sTokenEnvironment = ( TOKEN_ENVIRONMENT ) hb_parc( 1 );
   else
      sTokenEnvironment = s_sTokenEnvironment;

   if( ( void * ) sTokenEnvironment != NULL )
      hb_retnl( sTokEnvGetCnt( sTokenEnvironment ) );
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_TOKENNUM, NULL, "TOKENNUM", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }
      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retni( 0 );
   }
}
token2.c727
HB_FUNCTOKENEND(void)
HB_FUNC( TOKENEND )
{
   TOKEN_ENVIRONMENT sTokenEnvironment;

   if( ISCHAR( 1 ) && ISBYREF( 1 ) )
      sTokenEnvironment = ( TOKEN_ENVIRONMENT ) hb_parc( 1 );
   else
      sTokenEnvironment = s_sTokenEnvironment;

   if( ( void * ) sTokenEnvironment != NULL )
      hb_retl( sTokEnvEnd( sTokenEnvironment ) );
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_TOKENEND, NULL, "TOKENEND", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }
      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         /* it is CTIII behaviour to return .T. if there's no string TOKENINIT'ed */
         hb_retl( 1 );
   }
}
token2.c800
HB_FUNCTOKENEXIT(void)
HB_FUNC( TOKENEXIT )
{
   if( s_sTokenEnvironment != NULL )
   {
      sTokExit( NULL );
      hb_retl( 1 );
   }
   else
      hb_retl( 0 );
}
token2.c869
HB_FUNCTOKENAT(void)
HB_FUNC( TOKENAT )
{
   int iSeparatorPos = 0;
   size_t sCurrentIndex;
   TOKEN_ENVIRONMENT sTokenEnvironment;
   TOKEN_POSITION *psTokenPosition;

   if( ISLOG( 1 ) )
      iSeparatorPos = hb_parl( 1 );

   if( ISCHAR( 3 ) && ISBYREF( 3 ) )
      sTokenEnvironment = ( TOKEN_ENVIRONMENT ) hb_parc( 3 );
   else
      sTokenEnvironment = s_sTokenEnvironment;

   if( ( void * ) sTokenEnvironment == NULL )
   {
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_TOKENAT,
                   NULL, "TOKENAT", 0, EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
      }
      hb_retni( 0 );
      return;
   }

   if( ISNUM( 2 ) )
      sCurrentIndex = hb_parnl( 2 ) - 1;
   else
      sCurrentIndex = sTokEnvGetPtr( sTokenEnvironment );

   psTokenPosition = sTokEnvGetPosIndex( sTokenEnvironment, sCurrentIndex );
   if( psTokenPosition == NULL )
   {
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         ct_error( ( USHORT ) iArgErrorMode, EG_ARG, CT_ERROR_TOKENAT, NULL,
                   "TOKENAT", 0, EF_CANDEFAULT, HB_ERR_ARGS_BASEPARAMS );
      }
      hb_retni( 0 );
      return;
   }

   if( iSeparatorPos )
      hb_retnl( psTokenPosition->sEndPos + 1 );
   else
      hb_retnl( psTokenPosition->sStartPos + 1 );
}
token2.c937
HB_FUNCSAVETOKEN(void)
HB_FUNC( SAVETOKEN )
{
   if( s_sTokenEnvironment != NULL )
      hb_retclen( ( char * ) s_sTokenEnvironment, sTokEnvGetSize( s_sTokenEnvironment ) );
   else
      hb_retc( NULL );
}
token2.c1023
HB_FUNCRESTTOKEN(void)
HB_FUNC( RESTTOKEN )
{
   TOKEN_ENVIRONMENT sTokenEnvironment = NULL;
   size_t sStrLen = 1;

   if( ISCHAR( 1 ) )
   {
      sStrLen = ( size_t ) hb_parclen( 1 );
      if( sStrLen >= sizeof( TOKEN_POSITION ) )
      {
         TOKEN_ENVIRONMENT env = ( TOKEN_ENVIRONMENT ) hb_parc( 1 );

         if( sTokEnvGetSize( env ) == sStrLen )
         {
            /* alloc memory for new environment */
            sTokenEnvironment = ( TOKEN_ENVIRONMENT ) hb_xalloc( sStrLen );
            if( sTokenEnvironment == NULL )
            {
               int iArgErrorMode = ct_getargerrormode();

               if( iArgErrorMode != CT_ARGERR_IGNORE )
               {
                  ct_error( ( USHORT ) iArgErrorMode, EG_MEM, CT_ERROR_RESTTOKEN,
                            NULL, "RESTTOKEN", 0, EF_CANDEFAULT,
                            HB_ERR_ARGS_BASEPARAMS );
               }
               hb_retc( NULL );
               return;
            }
            hb_xmemcpy( sTokenEnvironment, env, sStrLen );
         }
      }
   }

   if( sTokenEnvironment != NULL || sStrLen == 0 )
   {
      /* return current environment, then delete it */
      if( s_sTokenEnvironment != NULL )
         hb_retclen( ( char * ) s_sTokenEnvironment, sTokEnvGetSize( s_sTokenEnvironment ) );
      else
         hb_retc( NULL );

      sTokSet( sTokenEnvironment );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_RESTTOKEN, NULL, "RESTTOKEN", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }
      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retc( NULL );
   }
}
token2.c1065
trig.c
TypeFunctionSourceLine
HB_FUNCPI(void)
HB_FUNC( PI )
{
   hb_retnd( CT_PI );
}
trig.c111
HB_FUNCSIN(void)
HB_FUNC( SIN )
{
   if( ISNUM( 1 ) )
   {
      HB_MATH_EXCEPTION hb_exc;
      double dResult, dArg = hb_parnd( 1 );

      hb_mathResetError( &hb_exc );
      dResult = sin( dArg );
      if( hb_mathGetError( &hb_exc, "SIN", dArg, 0.0, dResult ) )
      {
         if( hb_exc.handled )
            hb_retndlen( hb_exc.retval, hb_exc.retvalwidth, hb_exc.retvaldec );
         else
            hb_retndlen( HUGE_VAL, -1, -1 );
      }
      else
         hb_retnd( dResult );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_SIN, NULL, "SIN", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }
      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retnd( 0.0 );
   }
}
trig.c157
HB_FUNCCOS(void)
HB_FUNC( COS )
{
   if( ISNUM( 1 ) )
   {
      HB_MATH_EXCEPTION hb_exc;
      double dResult, dArg = hb_parnd( 1 );

      hb_mathResetError( &hb_exc );
      dResult = cos( dArg );
      if( hb_mathGetError( &hb_exc, "COS", dArg, 0.0, dResult ) )
      {
         if( hb_exc.handled )
            hb_retndlen( hb_exc.retval, hb_exc.retvalwidth, hb_exc.retvaldec );
         else
            hb_retndlen( HUGE_VAL, -1, -1 );
      }
      else
         hb_retnd( dResult );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_COS, NULL, "COS", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }
      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retnd( 0.0 );
   }
}
trig.c235
HB_FUNCTAN(void)
HB_FUNC( TAN )
{
   if( ISNUM( 1 ) )
   {
      HB_MATH_EXCEPTION hb_exc;
      double dResult, dArg = hb_parnd( 1 );

      hb_mathResetError( &hb_exc );
      dResult = tan( dArg );
      if( hb_mathGetError( &hb_exc, "TAN", dArg, 0.0, dResult ) )
      {
         if( hb_exc.handled )
            hb_retndlen( hb_exc.retval, hb_exc.retvalwidth, hb_exc.retvaldec );
         else
            hb_retndlen( HUGE_VAL, -1, -1 );
      }
      else
         hb_retnd( dResult );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_TAN, NULL, "TAN", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }
      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retnd( 0.0 );
   }
}
trig.c313
HB_FUNCCOT(void)
HB_FUNC( COT )
{
   if( ISNUM( 1 ) )
   {
      HB_MATH_EXCEPTION hb_exc;
      double dResult, dArg = hb_parnd( 1 );

      hb_mathResetError( &hb_exc );
      dResult = tan( dArg );
      if( hb_mathGetError( &hb_exc, "TAN", dArg, 0.0, dResult ) )
      {
         dResult = hb_exc.handled ? hb_exc.retval : 0.0;
      }
      dResult = dResult ? 1 / dResult : HUGE_VAL;
      hb_retnd( dResult );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_COT, NULL, "COT", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }
      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retnd( 0.0 );
   }
}
trig.c389
HB_FUNCASIN(void)
HB_FUNC( ASIN )
{
   if( ISNUM( 1 ) )
   {
      HB_MATH_EXCEPTION hb_exc;
      double dResult, dArg = hb_parnd( 1 );

      hb_mathResetError( &hb_exc );
      dResult = asin( dArg );
      if( hb_mathGetError( &hb_exc, "ASIN", dArg, 0.0, dResult ) )
      {
         if( hb_exc.handled )
            hb_retndlen( hb_exc.retval, hb_exc.retvalwidth, hb_exc.retvaldec );
         else
            hb_retndlen( HUGE_VAL, -1, -1 );
      }
      else
         hb_retnd( dResult );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_ASIN, NULL, "ASIN", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }
      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retnd( 0.0 );
   }
}
trig.c465
HB_FUNCACOS(void)
HB_FUNC( ACOS )
{
   if( ISNUM( 1 ) )
   {
      HB_MATH_EXCEPTION hb_exc;
      double dResult, dArg = hb_parnd( 1 );

      hb_mathResetError( &hb_exc );
      dResult = acos( dArg );
      if( hb_mathGetError( &hb_exc, "ACOS", dArg, 0.0, dResult ) )
      {
         if( hb_exc.handled )
            hb_retndlen( hb_exc.retval, hb_exc.retvalwidth, hb_exc.retvaldec );
         else
            hb_retndlen( HUGE_VAL, -1, -1 );
      }
      else
         hb_retnd( dResult );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_ACOS, NULL, "ACOS", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }
      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retnd( 0.0 );
   }
}
trig.c545
HB_FUNCATAN(void)
HB_FUNC( ATAN )
{
   if( ISNUM( 1 ) )
   {
      HB_MATH_EXCEPTION hb_exc;
      double dResult, dArg = hb_parnd( 1 );

      hb_mathResetError( &hb_exc );
      dResult = atan( dArg );
      if( hb_mathGetError( &hb_exc, "ATAN", dArg, 0.0, dResult ) )
      {
         if( hb_exc.handled )
            hb_retndlen( hb_exc.retval, hb_exc.retvalwidth, hb_exc.retvaldec );
         else
         {
            /* atan normally don't error, but it's save to return PI()/2
               or -PI()/2, respectively, as these 
               are the boundary result values */
            if( dArg < 0.0 )
               hb_retnd( -CT_PI / 2.0 );
            else
               hb_retnd( CT_PI / 2.0 );
         }
      }
      else
         hb_retnd( dResult );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_ATAN, NULL, "ATAN", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }
      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retnd( 0.0 );
   }
}
trig.c621
HB_FUNCATN2(void)
HB_FUNC( ATN2 )
{
   if( ISNUM( 1 ) && ISNUM( 2 ) )
   {
      HB_MATH_EXCEPTION hb_exc;
      double dY = hb_parnd( 1 );
      double dX = hb_parnd( 2 );
      double dResult;

      hb_mathResetError( &hb_exc );
      dResult = atan2( dY, dX );
      if( hb_mathGetError( &hb_exc, "ATAN2", dY, dX, dResult ) )
      {
         if( hb_exc.handled )
            hb_retndlen( hb_exc.retval, hb_exc.retvalwidth, hb_exc.retvaldec );
         else
         {
            /* DOMAIN error: both arguments to atan2 have been 0 */
            /* CTIII behaves very strange here: atn2 (0.0, 0.0) == -PI
               atn2 (0.0, -0.0) == 0.0
               atn2 (-0.0, 0.0) == -PI
               atn2 (-0.0, -0.0) == -2*PI */
            if( dX >= 0.0 )
               hb_retnd( -CT_PI );
            else if( dY < 0.0 )
               hb_retnd( -2.0 * CT_PI );
            else
               hb_retnd( 0.0 );
         }
      }
      else
         hb_retnd( dResult );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_ATN2, NULL, "ATN2", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }
      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retnd( 0.0 );
   }
}
trig.c712
HB_FUNCSINH(void)
HB_FUNC( SINH )
{
   if( ISNUM( 1 ) )
   {
      HB_MATH_EXCEPTION hb_exc;
      double dResult, dArg = hb_parnd( 1 );

      hb_mathResetError( &hb_exc );
      dResult = sinh( dArg );
      if( hb_mathGetError( &hb_exc, "SINH", dArg, 0.0, dResult ) )
      {
         if( hb_exc.handled )
            hb_retndlen( hb_exc.retval, hb_exc.retvalwidth, hb_exc.retvaldec );
         else
         {
            /* OVERFLOW error: we have no CTIII behaviour to follow,
               so return +INF or -INF, respectively */
            if( dArg < 0.0 )
               hb_retndlen( -HUGE_VAL, -1, -1 );
            else
               hb_retndlen( HUGE_VAL, -1, -1 );
         }
      }
      else
         hb_retnd( dResult );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_SINH, NULL, "SINH", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }
      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retnd( 0.0 );
   }
}
trig.c803
HB_FUNCCOSH(void)
HB_FUNC( COSH )
{
   if( ISNUM( 1 ) )
   {
      HB_MATH_EXCEPTION hb_exc;
      double dResult, dArg = hb_parnd( 1 );

      hb_mathResetError( &hb_exc );
      dResult = cosh( dArg );
      if( hb_mathGetError( &hb_exc, "COSH", dArg, 0.0, dResult ) )
      {
         if( hb_exc.handled )
            hb_retndlen( hb_exc.retval, hb_exc.retvalwidth, hb_exc.retvaldec );
         else
            /* OVERFLOW error: we have no CTIII behaviour to follow,
               so return +INF */
            hb_retndlen( HUGE_VAL, -1, -1 );
      }
      else
         hb_retnd( dResult );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_COSH, NULL, "COSH", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }
      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retnd( 0.0 );
   }
}
trig.c887
HB_FUNCTANH(void)
HB_FUNC( TANH )
{
   if( ISNUM( 1 ) )
   {
      HB_MATH_EXCEPTION hb_exc;
      double dResult, dArg = hb_parnd( 1 );

      hb_mathResetError( &hb_exc );
      dResult = tanh( dArg );
      if( hb_mathGetError( &hb_exc, "TANH", dArg, 0.0, dResult ) )
      {
         if( hb_exc.handled )
            hb_retndlen( hb_exc.retval, hb_exc.retvalwidth, hb_exc.retvaldec );
         else
         {
            /* normally, tanh() doesn't give errors, but let's return -1 or +1,
               respectively, as these are the boundary result values */
            if( dArg < 0.0 )
               hb_retnd( -1.0 );
            else
               hb_retnd( 1.0 );
         }
      }
      else
         hb_retnd( dResult );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_TANH, NULL, "TANH", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }
      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retnd( 0.0 );
   }
}
trig.c962
HB_FUNCRTOD(void)
HB_FUNC( RTOD )
{
   if( ISNUM( 1 ) )
   {
      double dInput = hb_parnd( 1 );
      double dResult = ( 180.0 / CT_PI ) * dInput;

      hb_retnd( dResult );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_RTOD, NULL, "RTOD", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }
      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retnd( 0.0 );
   }
}
trig.c1043
HB_FUNCDTOR(void)
HB_FUNC( DTOR )
{
   if( ISNUM( 1 ) )
   {
      double dInput = hb_parnd( 1 );
      double dResult = ( CT_PI / 180.0 ) * dInput;

      hb_retnd( dResult );
   }
   else
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_DTOR, NULL, "DTOR", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }
      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else
         hb_retnd( 0.0 );
   }
}
trig.c1106
video.c
TypeFunctionSourceLine
HB_FUNCCHARPIX(void)
HB_FUNC( CHARPIX )
{
#   ifdef __DJGPP__
   hb_retni( _farpeekw( _dos_ds, 0x485 ) );
#   endif
}
video.c99
HB_FUNCVGAPALETTE(void)
HB_FUNC( VGAPALETTE )
{
   char *color_string;
   char red, green, blue;
   char attr = 0;

   if( hb_pcount() < 4 )
   {
      /* Resetting palette registers to default values is not supported yet */
      hb_retl( FALSE );
      return;
   }
   if( ISNUM( 1 ) && hb_parni( 1 ) < 16 )
   {
      attr = hb_parni( 1 );
   }
   else if( ISCHAR( 1 ) )
   {
      char *s;

      color_string = hb_parcx( 1 );
      for( s = color_string; *s; s++ )
      {
         switch ( *s )
         {
            case 'N':
            case 'n':
               attr |= 0;
               break;
            case 'B':
            case 'b':
               attr |= 1;
               break;
            case 'G':
            case 'g':
               attr |= 2;
               break;
            case 'R':
            case 'r':
               attr |= 4;
               break;
            case 'W':
            case 'w':
               attr |= 7;
               break;
            case '+':
               attr |= 8;
               break;
            case 'U':
            case 'u':
            case 'I':
            case 'i':
            case 'X':
            case 'x':
               /* these seem to be used only in mono */
               break;
            default:
               hb_retl( FALSE );
               return;
         }
      }
   }
   else
   {
      /* An invalid argument */
      hb_retl( FALSE );
      return;
   }

   red = hb_parni( 2 );
   green = hb_parni( 3 );
   blue = hb_parni( 4 );

#   ifdef __DJGPP__
   {
      __dpmi_regs r;
      int iflag;

      /* Get palette register for this attribute to BH using BIOS -
       * I couldn't manage to get it through ports */
      r.x.ax = 0x1007;
      r.h.bl = attr;
      __dpmi_int( 0x10, &r );

      iflag = __dpmi_get_and_disable_virtual_interrupt_state();

      /* Wait for vertical retrace (for old VGA cards) */
      while( inportb( 0x3DA ) & 8 ) ;
      while( !( inportb( 0x3DA ) & 8 ) ) ;

      outportb( 0x3C8, r.h.bh );
      outportb( 0x3C9, red );
      outportb( 0x3C9, green );
      outportb( 0x3C9, blue );

      if( iflag )
         __dpmi_get_and_enable_virtual_interrupt_state();
   }
   hb_retl( TRUE );
#   else
   hb_retl( FALSE );
#   endif
}
video.c144
HB_FUNCVIDEOTYPE(void)
HB_FUNC( VIDEOTYPE )
{
#   if defined( __DJGPP__ )
   __dpmi_regs r;

   r.h.ah = 0x12;               /* Alternate Select */
   r.h.bl = 0x10;               /* Get EGA info */
   __dpmi_int( 0x10, &r );
   if( r.h.bl == 0x10 )
   {
      /* CGA/HGC/MDA */
      hb_retni( VCARD_MONOCHROME );
   }
   else
   {
      /* EGA/VGA */
      r.x.ax = 0x1A00;
      __dpmi_int( 0x10, &r );
      if( r.h.al == 0x1A )
         hb_retni( VCARD_VGA );
      else
         hb_retni( VCARD_EGA );
   }
#   endif
}
video.c277
HB_FUNCSETFONT(void)
HB_FUNC( SETFONT )
{
   char *font = hb_parcx( 1 );
   int len = hb_parclen( 1 );
   int area = hb_parni( 2 );
   int offset = 0;
   int count = 256;
   int height = 16;

   if( !area )
      area = 1;
   if( ISNUM( 3 ) )
      offset = hb_parni( 3 );
   if( ISNUM( 4 ) )
      count = hb_parni( 4 );
   if( ISLOG( 3 ) )
      if( hb_parl( 3 ) && count != 0 )
         height = len / count;

#   ifdef __DJGPP__
   {
      __dpmi_regs r;

      r.x.ax = 0x1110;          /* Load user-defined text-mode display font */
      r.h.bl = area - 1;
      r.h.bh = height;
      r.x.cx = count;
      r.x.dx = offset;
      r.x.es = __tb >> 4;
      r.x.bp = __tb & 0xF;
      dosmemput( font, len, __tb );
      __dpmi_int( 0x10, &r );
   }
#   endif

   hb_retni( 0 );
}
video.c338
wordrepl.c
TypeFunctionSourceLine
HB_FUNCWORDREPL(void)
HB_FUNC( WORDREPL )
{
   int iNoRet;
   int iMultiPass;

   size_t sSearchLen, sReplaceLen;

   /* suppressing return value ? */
   iNoRet = ct_getref() && ISBYREF( 2 );
   iMultiPass = ct_getatmupa();

   /* param check */
   if( ( sSearchLen = ( size_t ) hb_parclen( 1 ) ) / 2 > 0 && ISCHAR( 2 ) &&
       ( sReplaceLen = ( size_t ) hb_parclen( 3 ) ) / 2 > 0 )
   {
      /* get parameters */
      char *pcSearch = hb_parc( 1 );
      char *pcString = hb_parc( 2 );
      size_t sStrLen = ( size_t ) hb_parclen( 2 );
      char *pcReplace = hb_parc( 3 );
      int iMode;
      char *pcRet;
      size_t sIndex;

      if( ISLOG( 4 ) )
         iMode = hb_parl( 4 );
      else
         iMode = 0;

      pcRet = ( char * ) hb_xgrab( sStrLen + 1 );
      hb_xmemcpy( pcRet, pcString, sStrLen );

      for( sIndex = 0; sIndex < ( sSearchLen & 0xFFFFFFFE ); sIndex += 2 )
      {

         size_t sMatchStrLen;
         char *pc;
         size_t sReplIndex = sIndex;

         if( sReplIndex > ( sReplaceLen & 0xFFFFFFFE ) )
         {
            sReplIndex = ( sReplaceLen & 0xFFFFFFFE );
         }

         pc = pcString;
         while( ( pc = ct_at_exact_forward( pc, sStrLen - ( pc - pcString ),
                                            pcSearch + sIndex, 2, &sMatchStrLen ) ) != NULL )
         {
            if( iMode )
            {
               /* always replace */
               *( pcRet + ( pc - pcString ) ) = *( pcReplace + sReplIndex );
               *( pcRet + ( pc - pcString ) + 1 ) = *( pcReplace + sReplIndex + 1 );

               if( iMultiPass )
                  pc++;
               else
                  pc += 2;
            }
            else
            {
               /* replace only if pc is an even position */
               if( ( ( pc - pcString ) % 2 ) == 0 )
               {
                  *( pcRet + ( pc - pcString ) ) = *( pcReplace + sReplIndex );
                  *( pcRet + ( pc - pcString ) + 1 ) = *( pcReplace + sReplIndex + 1 );
                  /* parse pcString in steps of two characters */
                  pc += 2;
               }
               else
               {
                  /* we are on an odd position, so add only 1 to pc */
                  pc++;
               }
            }
         }
      }

      /* return string */
      if( ISBYREF( 2 ) )
      {
         hb_storclen( pcRet, sStrLen, 2 );
      }

      if( iNoRet )
      {
         hb_retl( 0 );
         hb_xfree( pcRet );
      }
      else
      {
         hb_retclen_buffer( pcRet, sStrLen );
      }
   }
   else  /* ( sSearchLen = ( size_t ) hb_parclen( 1 ) ) / 2 > 0 && ISCHAR( 2 ) &&
            ( sReplaceLen = ( size_t ) hb_parclen( 3 ) ) / 2 > 0 */
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_WORDREPL, NULL, "WORDREPL", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else if( iNoRet )
         hb_retl( 0 );
      else if( ISCHAR( 2 ) )
         hb_retclen( hb_parc( 2 ), hb_parclen( 2 ) );
      else
         hb_retc( NULL );
   }
}
wordrepl.c123
wordtoch.c
TypeFunctionSourceLine
HB_FUNCWORDTOCHAR(void)
HB_FUNC( WORDTOCHAR )
{
   int iMultiPass;
   size_t sSearchLen, sStrLen, sReplaceLen;

   iMultiPass = ct_getatmupa();

   /* param check */
   if( ( sSearchLen = ( size_t ) hb_parclen( 1 ) ) / 2 > 0 &&
       ( sStrLen = ( size_t ) hb_parclen( 2 ) ) / 2 > 0 &&
       ( sReplaceLen = ( size_t ) hb_parclen( 3 ) ) > 0 )
   {

      /* get parameters */
      char *pcSearch = ( char * ) hb_parc( 1 );
      char *pcString = ( char * ) hb_parc( 2 );
      char *pcReplace = ( char * ) hb_parc( 3 );
      char *pcRet;
      size_t sRetIndex, sIndex;
      int iNoReplace;

      pcRet = ( char * ) hb_xgrab( sStrLen );
      sRetIndex = 0;
      sIndex = 0;
      iNoReplace = 0;

      *pcRet = *pcString;       /* copy first char */

      do
      {
         size_t sMatchStrLen;
         char *pc;
         size_t sReplIndex;

         *( pcRet + sRetIndex + 1 ) = *( pcString + sIndex + 1 );

         if( !iNoReplace &&
             ( ( pc = ct_at_exact_forward( pcSearch, sSearchLen,
                                           pcRet + sRetIndex, 2,
                                           &sMatchStrLen ) ) != NULL ) &&
             ( ( ( sReplIndex = ( pc - pcSearch ) ) & 1 ) != 1 ) )
         {
            sReplIndex /= 2;
            if( sReplIndex >= sReplaceLen )
               sReplIndex = sReplaceLen - 1;

            *( pcRet + sRetIndex ) = *( pcReplace + sReplIndex );

            if( !iMultiPass )
               iNoReplace = 1;  /* just copy next char without searching & replacing */
         }
         else
         {
            iNoReplace = 0;
            sRetIndex++;
         }
         sIndex++;
      }
      while( sIndex < sStrLen - 1 );

      /* return string */
      hb_retclen( pcRet, sRetIndex + 1 );
      hb_xfree( pcRet );
   }
   else  /* ( sSearchLen = ( size_t ) hb_parclen( 1 ) ) / 2 > 0 &&
            ( sStrLen = ( size_t ) hb_parclen( 2 ) ) / 2 > 0 &&
            ( sReplaceLen = ( size_t ) hb_parclen( 3 ) ) > 0 */
   {
      PHB_ITEM pSubst = NULL;
      int iArgErrorMode = ct_getargerrormode();

      if( iArgErrorMode != CT_ARGERR_IGNORE )
      {
         pSubst = ct_error_subst( ( USHORT ) iArgErrorMode, EG_ARG,
                                  CT_ERROR_WORDTOCHAR, NULL, "WORDTOCHAR", 0,
                                  EF_CANSUBSTITUTE, HB_ERR_ARGS_BASEPARAMS );
      }

      if( pSubst != NULL )
         hb_itemReturnRelease( pSubst );
      else if( ISCHAR( 2 ) )
         hb_retclen( hb_parc( 2 ), hb_parclen( 2 ) );
      else
         hb_retc( NULL );
   }
}
wordtoch.c88
blank.prg
TypeFunctionSourceLine
FUNCTIONBLANK( xItem, xMode )
FUNCTION BLANK( xItem, xMode )
   LOCAL cType := ValType( xItem )
   LOCAL xRet

   SWITCH cType
      CASE "D"
         xRet := CTOD( "" )
         EXIT

      CASE "L"
         xRet :=.F.
         EXIT

      CASE "N"
         xRet := 0
         EXIT

      CASE "C"
      CASE "M"
         xRet := xItem := IIF( ISLOGICAL( xMode ) .and. xMode, ;
                               Space( Len( xItem ) ), "" )
         EXIT

      CASE "A"
         xRet := {}
         EXIT

      CASE "H"
         xRet := {=>}
         EXIT

      OTHERWISE
         xRet:=.F.

   ENDSWITCH

RETURN xRet
blank.prg57
ct.prg
TypeFunctionSourceLine
FUNCTIONCTINIT()
function CTINIT()

   if !sbInitialized
      sbInitialized := ctcinit()
   endif

return sbInitialized
ct.prg92
INIT FUNCTION_CTINIT()
init function _CTINIT()

   if !sbInitialized
      sbInitialized := ctcinit()
   endif

return sbInitialized
ct.prg100
FUNCTIONCTEXIT()
function CTEXIT()

   if sbInitialized
      ctcexit()
      sbInitialized := .F.
   endif

return nil
ct.prg142
EXIT FUNCTION_CTEXIT()
exit function _CTEXIT()

  if sbInitialized
    ctcexit()
    sbInitialized := .F.
  endif

return nil
ct.prg151
ctdummy.prg
TypeFunctionSourceLine
FUNCTIONgetkxlat( nKeyValue )
FUNCTION getkxlat( nKeyValue )
   RETURN nKeyValue
ctdummy.prg55
FUNCTIONsetkxlat( nOrgKeyValue, nNewKeyValue )
FUNCTION setkxlat( nOrgKeyValue, nNewKeyValue )
   LOCAL lAccepted := .F.

   HB_SYMBOL_UNUSED( nOrgKeyValue )
   HB_SYMBOL_UNUSED( nNewKeyValue )

   RETURN lAccepted
ctdummy.prg58
FUNCTIONdsetkbios( lNewKeyboardMode )
FUNCTION dsetkbios( lNewKeyboardMode )
   STATIC s_lKeyboardMode := .T.

   HB_SYMBOL_UNUSED( lNewKeyboardMode )

   RETURN s_lKeyboardMode
ctdummy.prg66
ctmisc.prg
TypeFunctionSourceLine
FUNCTIONAlloFree( lMode )
FUNCTION AlloFree( lMode )

   DEFAULT lMode TO .F.

   RETURN Memory( iif( lMode, HB_MEM_CHAR, HB_MEM_BLOCK ) )
ctmisc.prg61
FUNCTIONCENTER( c, n, p, lMode )
FUNCTION CENTER( c, n, p, lMode )
   LOCAL cRet

   DEFAULT n TO MaxCol() + 1 - Col() * 2
   DEFAULT c TO ""

   IF ISLOGICAL( p )
      lMode := p
      p := NIL
   ELSE
      DEFAULT lMode TO .F.
   ENDIF

   cRet := PadC( AllTrim( c ), n, p )

   RETURN iif( lMode, cRet, RTrim( cRet ) )
ctmisc.prg67
FUNCTIONCSETCURS( l )
FUNCTION CSETCURS( l )

   IF ! ISLOGICAL( l )
      RETURN SetCursor() != SC_NONE
   ENDIF

   RETURN SetCursor( iif( l, SC_NORMAL, SC_NONE ) ) != SC_NONE
ctmisc.prg84
FUNCTIONCSETKEY( n )
FUNCTION CSETKEY( n )
   RETURN SetKey( n )
ctmisc.prg92
FUNCTIONCSETCENT( nCentury )
FUNCTION CSETCENT( nCentury )
   RETURN __SETCENTURY( nCentury )
ctmisc.prg95
FUNCTIONLTOC( l )
FUNCTION LTOC( l )
   RETURN iif( l, "T", "F" )
ctmisc.prg98
FUNCTIONDOSPARAM()
FUNCTION DOSPARAM()
   LOCAL cRet := ""
   LOCAL nCount := HB_ARGC(), i

   FOR i := 1 TO nCount
      cRet += iif( i == 1, "", " " ) + HB_ARGV( i )
   NEXT

   RETURN cRet
ctmisc.prg101
FUNCTIONEXENAME()
FUNCTION EXENAME()
   RETURN HB_ARGV( 0 )
ctmisc.prg111
ctrand.prg
TypeFunctionSourceLine
FUNCTIONRandom( lMode )
FUNCTION Random( lMode )
RETURN IIF( VALTYPE( lMode ) == "L" .AND. lMode, ;
            HB_RandomInt( -32768, 32767 ), HB_RandomInt( 0, 65535 ) )
ctrand.prg54
FUNCTIONRand( nStart )
FUNCTION Rand( nStart )
   IF nStart != NIL
      HB_RandomSeed( nStart )
   ENDIF
RETURN HB_Random()
ctrand.prg58
cttime.prg
TypeFunctionSourceLine
FUNCTIONTIMETOSEC( cTime )
function TIMETOSEC( cTime )
local nSec := 0, nLen, i, aLim, aMod, nInd, n
if cTime == NIL
   nSec := seconds()
elseif valtype( cTime ) == "C"
   nLen := len( cTime )
   if ( nLen + 1 ) % 3 == 0 .and. nLen <= 11
      nInd := 1
      aLim := { 24, 60, 60, 100 }
      aMod := { 3600, 60, 1, 1/100 }
      for i := 1 to nLen step 3
         if isdigit( substr( cTime, i,     1 ) ) .and. ;
            isdigit( substr( cTime, i + 1, 1 ) ) .and. ;
            ( i == nLen - 1 .or. substr( cTime, i + 2, 1 ) == ":" ) .and. ;
            ( n := val( substr( cTime, i, 2 ) ) ) < aLim[ nInd ]
            nSec += n * aMod[ nInd ] 
         else
            nSec := 0
            exit
         endif
         ++nInd
      next
   endif
endif
return round( nSec, 2) /* round FL val to be sure that you can compare it */
cttime.prg54
FUNCTIONSECTOTIME( nSec, lHundr )
function SECTOTIME( nSec, lHundr )
local i, h, n
n := iif( !valtype( nSec ) == "N", seconds(), nSec )
if valtype( lHundr ) == "L" .and. lHundr
   h := ":" + strzero( ( nSec * 100 ) % 100, 2 )
else
   h := ""
endif
n := int( n % 86400 )
for i := 1 to 3
   h := strzero( n % 60, 2 ) + iif( len( h ) == 0, "", ":") + h
   n := int( n / 60 )
next
return h
cttime.prg81
FUNCTIONMILLISEC( nDelay )
function MILLISEC( nDelay )
HB_IDLESLEEP( nDelay / 1000 )
return ""
cttime.prg97
fcopy.prg
TypeFunctionSourceLine
FUNCTIONFILECOPY( cSource, cDest, lMode )
FUNCTION FILECOPY( cSource, cDest, lMode )
   LOCAL hDstFile
   LOCAL cBuffer := SPACE( F_BLOCK )
   LOCAL lDone := .F.
   LOCAL nSrcBytes, nDstBytes, nTotBytes := 0

   IF !ISLOGICAL( lMode )
      lMode := .F.
   ENDIF
   IF s_hSrcFile != -1
      FCLOSE( s_hSrcFile )
   ENDIF
   s_hSrcFile := FOPEN( cSource, FO_READ )
   IF s_hSrcFile != -1
      hDstFile := FCREATE( cDest )
      IF hDstFile != -1
         DO WHILE !lDone
            nSrcBytes := FREAD( s_hSrcFile, @cBuffer, F_BLOCK )
            IF nSrcBytes == 0
               lDone := .T.
               EXIT
            ENDIF
            nDstBytes := FWRITE( hDstFile, cBuffer, nSrcBytes )
            IF nDstBytes > 0
               nTotBytes += nDstBytes
            ENDIF
            IF nDstBytes < nSrcBytes
               EXIT
            ENDIF
         ENDDO
         FCLOSE( hDstFile )
         IF lDone .OR. !lMode
            FCLOSE( s_hSrcFile )
            s_hSrcFile := -1
         ENDIF
         s_fileDate := FILEDATE( cSource )
         s_fileTime := FILETIME( cSource )
         IF s_lSetDaTi
            SETFDATI( cDest, s_fileDate, s_fileTime )
         ENDIF
      ELSE
         FCLOSE( s_hSrcFile )
         s_hSrcFile := -1
      ENDIF
   ENDIF
RETURN nTotBytes
fcopy.prg85
FUNCTIONFILECOPEN()
FUNCTION FILECOPEN()
RETURN s_hSrcFile != -1
fcopy.prg133
FUNCTIONFILECDATI( lNewMode )
FUNCTION FILECDATI( lNewMode )
   LOCAL lOldMode := s_lSetDaTi
   IF ISLOGICAL( lNewMode )
      s_lSetDaTi := lNewMode
   ENDIF
RETURN lOldMode
fcopy.prg137
FUNCTIONFILECCONT( cDest )
FUNCTION FILECCONT( cDest )
   LOCAL hDstFile
   LOCAL cBuffer := SPACE( F_BLOCK )
   LOCAL lDone := .F.
   LOCAL nSrcBytes, nDstBytes, nTotBytes := 0

   IF s_hSrcFile != -1
      hDstFile := FCREATE( cDest )
      IF hDstFile != -1
         DO WHILE !lDone
            nSrcBytes := FREAD( s_hSrcFile, @cBuffer, F_BLOCK )
            IF nSrcBytes == 0
               lDone := 0
               EXIT
            ENDIF
            nDstBytes := FWRITE( hDstFile, cBuffer, nSrcBytes )
            IF nDstBytes > 0
               nTotBytes += nDstBytes
            ENDIF
            IF nDstBytes < nSrcBytes
               EXIT
            ENDIF
         ENDDO
         FCLOSE( hDstFile )
         IF lDone
            FCLOSE( s_hSrcFile )
            s_hSrcFile := -1
         ENDIF
         IF s_lSetDaTi
            SETFDATI( cDest, s_fileDate, s_fileTime )
         ENDIF
      ENDIF
   ENDIF
RETURN nTotBytes
fcopy.prg145
FUNCTIONFILECCLOSE()
FUNCTION FILECCLOSE()
   IF s_hSrcFile != -1
      FCLOSE( s_hSrcFile )
      s_hSrcFile := -1
      RETURN .T.
   ENDIF
RETURN .F.
fcopy.prg181
FUNCTIONFILEAPPEND( cSrc, cDest )
FUNCTION FILEAPPEND( cSrc, cDest )
   LOCAL cBuffer := Space( F_BLOCK )
   LOCAL hSrcFile, hDstFile
   LOCAL nSrcBytes, nDstBytes, nTotBytes := 0

   hSrcFile  := FOPEN( cSrc, FO_READ )
   IF hSrcFile != -1
      IF !FILE( cDest )
         hDstFile := FCREATE( cDest )
      ELSE
         hDstFile := FOPEN( cDest, FO_WRITE )
         FSEEK( hDstFile, 0, FS_END )
      ENDIF

      IF hDstFile != -1
         DO WHILE .T.
            nSrcBytes := FREAD( hSrcFile, @cBuffer, F_BLOCK )
            IF nSrcBytes == 0
               EXIT
            ENDIF
            nDstBytes := FWRITE( hDstFile, cBuffer, nSrcBytes )
            IF nDstBytes < nSrcBytes
               EXIT
            ENDIF
            nTotBytes += nDstBytes
         ENDDO
         FCLOSE( hDstFile )
      ENDIF
      FCLOSE( hSrcFile )
   ENDIF
RETURN nTotBytes
fcopy.prg190
getinfo.prg
TypeFunctionSourceLine
FUNCTIONSAVEGETS()
FUNCTION SAVEGETS()
   LOCAL aGetList := GetList
   GetList := {}
RETURN aGetList
getinfo.prg60
FUNCTIONRESTGETS( aGetList )
FUNCTION RESTGETS( aGetList )
RETURN ( GetList := aGetList ) != NIL
getinfo.prg65
FUNCTIONCOUNTGETS()
FUNCTION COUNTGETS()
RETURN LEN( GetList )
getinfo.prg68
FUNCTIONCURRENTGET()
FUNCTION CURRENTGET()
   LOCAL oActive := GetActive()
RETURN ASCAN( GetList, {|oGet| oGet == oActive } )
getinfo.prg71
FUNCTIONGETFLDROW( nField )
FUNCTION GETFLDROW( nField )
   LOCAL oGet
   IF !ISNUMBER( nField )
      oGet := GetActive()
   ELSEIF nField >= 1 .AND. nField <= LEN( GetList )
      oGet := GetList[ nField ]
   ENDIF
RETURN IIF( oGet != NIL, oGet:Row, -1 )
getinfo.prg75
FUNCTIONGETFLDCOL( nField )
FUNCTION GETFLDCOL( nField )
   LOCAL oGet
   IF !ISNUMBER( nField )
      oGet := GetActive()
   ELSEIF nField >= 1 .AND. nField <= LEN( GetList )
      oGet := GetList[ nField ]
   ENDIF
RETURN IIF( oGet != NIL, oGet:Col, -1 )
getinfo.prg84
FUNCTIONGETFLDVAR( nField )
FUNCTION GETFLDVAR( nField )
   LOCAL oGet
   IF !ISNUMBER( nField )
      oGet := GetActive()
   ELSEIF nField >= 1 .AND. nField <= LEN( GetList )
      oGet := GetList[ nField ]
   ENDIF
RETURN IIF( oGet != NIL, oGet:Name, -1 )
getinfo.prg93
getinput.prg
TypeFunctionSourceLine
FUNCTIONGETINPUT( xVar, nRow, nCol, lSay, xPrompt )
FUNCTION GETINPUT( xVar, nRow, nCol, lSay, xPrompt )
   LOCAL nCursorRow := ROW()
   LOCAL nCursorCol := COL()
   LOCAL GetList := {}

   IF !ISNUMBER( nRow )
      nRow := nCursorRow
   ENDIF
   IF !ISNUMBER( nCol )
      nCol := nCursorCol
   ENDIF
   IF !ISLOGICAL( lSay )
      lSay := .F.
   ENDIF

   SETPOS( nRow, nCol )
   IF xPrompt != Nil
      DEVOUT( xPrompt )
      nRow := ROW()
      nCol := COL() + 1
   ENDIF

   @ nRow, nCol GET xVar
   READ

   IF lSay
      SETPOS( nRow, nCol )
      DEVOUT( xVar )
   ENDIF

   SETPOS( nCursorRow, nCursorCol )

RETURN xVar
getinput.prg58
getsecrt.prg
TypeFunctionSourceLine
FUNCTIONGETSECRET( cVar, nRow, nCol, lSay, xPrompt )
FUNCTION GETSECRET( cVar, nRow, nCol, lSay, xPrompt )
   LOCAL nCursorRow := ROW()
   LOCAL nCursorCol := COL()
   LOCAL GetList := {}
   LOCAL _cGetSecret := cVar
   LOCAL lHide := .T.

   IF !ISNUMBER( nRow )
      nRow := ROW()
   ENDIF
   IF !ISNUMBER( nCol )
      nCol := COL()
   ENDIF
   IF !ISLOGICAL( lSay )
      lSay := .F.
   ENDIF

   SETPOS( nRow, nCol )
   IF xPrompt != Nil
      DEVOUT( xPrompt )
      nRow := ROW()
      nCol := COL() + 1
   ENDIF

   SETPOS( nRow, nCol )
   AADD( GetList, _GET_( _CGETSECRET, "_CGETSECRET",,, ) )
   ATAIL( GetList ):reader := { |oGet, oGetList| _SECRET( @_cGetSecret, @lHide, ;
                                                          oGet, oGetList ) }
   ATAIL( GetList ):block  := { |xNew| _VALUE( @_cGetSecret, lHide, xNew ) }
   READ

   IF lSay
      SETPOS( nRow, nCol )
      DEVOUT( _HIDE( _cGetSecret ) )
   ENDIF

   SETPOS( nCursorRow, nCursorCol )

RETURN _cGetSecret
getsecrt.prg59
STATIC FUNCTION_HIDE( cVar )
STATIC FUNCTION _HIDE( cVar )
RETURN RANGEREPL( ASC( " " ) + 1, 255, cVar, "*" )
getsecrt.prg99
STATIC FUNCTION_VALUE( cVar, lHide, xNew )
STATIC FUNCTION _VALUE( cVar, lHide, xNew )
IF lHide
   RETURN _HIDE( cVar )
ELSEIF xNew != NIL
   cVar := PADR( xNew, LEN( cVar ) )
ENDIF
RETURN cVar
getsecrt.prg102
STATIC PROCEDURE_SECRET( _cGetSecret, lHide, oGet, oGetList )
STATIC PROCEDURE _SECRET( _cGetSecret, lHide, oGet, oGetList )
   LOCAL nKey, nLen, bKeyBlock

   IF oGetList == NIL
      oGetList := __GetListActive()
   ENDIF
   IF GetPreValidate( oGet )

      nLen := LEN( _cGetSecret )
      oGet:SetFocus()

      DO WHILE oGet:exitState == GE_NOEXIT
         IF oGet:typeOut
            oGet:exitState := GE_ENTER
         ENDIF

         DO WHILE oGet:exitState == GE_NOEXIT
            nKey := INKEY( 0 )
            IF ( bKeyBlock := SETKEY( nKey ) ) != NIL
               lHide := .F.
               EVAL( bKeyBlock, oGetList:cReadProcName, ;
                     oGetList:nReadProcLine, oGetList:ReadVar() )
               lHide := .T.
               LOOP
            ELSEIF nKey >= 32 .AND. nKey <= 255
               IF SET( _SET_INSERT )
                  _cGetSecret := STUFF( LEFT( _cGetSecret, nLen - 1), ;
                                        oGet:pos, 0, CHR( nKey ) )
               ELSE
                  _cGetSecret := STUFF( _cGetSecret, oGet:pos, 1, CHR( nKey ) )
               ENDIF
               nKey := ASC( "*" )
            ENDIF
            GetApplyKey( oGet, nKey )
         ENDDO

         IF !GetPostValidate( oGet )
            oGet:exitState := GE_NOEXIT
         ENDIF
      ENDDO
      oGet:KillFocus()
   ENDIF

RETURN
getsecrt.prg110
keysave.prg
TypeFunctionSourceLine
FUNCTIONSAVESETKEY()
FUNCTION SAVESETKEY()
RETURN HB_SETKEYSAVE()
keysave.prg52
FUNCTIONRESTSETKEY( aSavedTraps )
FUNCTION RESTSETKEY( aSavedTraps )
   HB_SETKEYSAVE( aSavedTraps )
RETURN .T.
keysave.prg55
keysec.prg
TypeFunctionSourceLine
FUNCTIONKeySec( nKey, nTime, nCounter, lMode )
FUNCTION KeySec( nKey, nTime, nCounter, lMode )
   LOCAL nSeconds

   IF s_hIdle != NIL
      HB_IDLEDEL( s_hIdle )
      s_hIdle := NIL
   ENDIF

   IF ISNUMBER( nKey )
      IF !ISNUMBER( nTime )
         nTime := 0
      ELSEIF nTime < 0
         nTime := -nTime / 18.2
      ENDIF
      IF !ISNUMBER( nCounter )
         nCounter := 1
      ENDIF
      IF !ISLOGICAL( lMode )
         lMode := .f.
      ENDIF

      nSeconds := SECONDS()
      s_hIdle := HB_IDLEADD( {|| doKeySec( nKey, nTime, lMode, ;
                                           @nCounter, @nSeconds ) } )
      RETURN .T.
   ENDIF

RETURN .F.
keysec.prg57
STATIC PROCEDUREdoKeySec( nKey, nTime, lMode, nCounter, nSeconds )
STATIC PROCEDURE doKeySec( nKey, nTime, lMode, nCounter, nSeconds )
   LOCAL nSec := SECONDS()

   IF lMode .AND. ! EMPTY( NEXTKEY() )
      nSeconds := nSec
   ELSEIF nCounter != 0 .AND. nSec - nSeconds >= nTime
      __KEYBOARD( nKey )
      IF nCounter > 0
         nCounter--
      ENDIF
      IF nCounter == 0
         HB_IDLEDEL( s_hIdle )
         s_hIdle := NIL
      ELSE
         nSeconds := nSec
      ENDIF
   ENDIF
RETURN
keysec.prg86
keytime.prg
TypeFunctionSourceLine
FUNCTIONKeyTime( nKey, cClockTime )
FUNCTION KeyTime( nKey, cClockTime )
   LOCAL nHour, nMin, nSec, nLast

   IF s_hIdle != NIL
      HB_IDLEDEL( s_hIdle )
      s_hIdle := NIL
   ENDIF

   IF ISNUMBER( nKey ) .AND. ISCHARACTER( cClockTime )
      nHour := VAL( SUBSTR( cClockTime, 1, 2 ) )
      nMin  := VAL( SUBSTR( cClockTime, 4, 2 ) )
      nSec  := VAL( SUBSTR( cClockTime, 7, 2 ) )
      nLast := -1
      s_hIdle := HB_IDLEADD( {|| doKeyTime( nKey, cClockTime, nHour, nMin, nSec, ;
                                            @nLast ) } )
      RETURN .T.
   ENDIF
RETURN .F.
keytime.prg57
STATIC PROCEDUREdoKeyTime( nKey, cClockTime, nHour, nMin, nSec, nLast )
STATIC PROCEDURE doKeyTime( nKey, cClockTime, nHour, nMin, nSec, nLast )
   LOCAL ccTime := TIME()
   LOCAL nHr := VAL( SUBSTR( ccTime, 1, 2 ) )
   LOCAL nMn := VAL( SUBSTR( ccTime, 4, 2 ) )
   LOCAL nSc := VAL( SUBSTR( ccTime, 7, 2 ) )

   IF nHour == 99
      IF nHr > nLast
         __KEYBOARD( nKey )
         nLast := nHr
         IF nHr == 23
            HB_IDLEDEL( s_hIdle )
            s_hIdle := NIL
         ENDIF
      ENDIF
   ELSEIF nMin == 99 .AND. nHr == nHour
      IF nMn > nLast
         __KEYBOARD( nKey )
         nLast := nMn
         IF nMn == 59
            HB_IDLEDEL( s_hIdle )
            s_hIdle := NIL
         ENDIF
      ENDIF
   ELSEIF nSec == 99 .AND. nHr == nHour .AND. nMn == nMin
      IF nSc > nLast
         __KEYBOARD( nKey )
         nLast := nSc
         IF nSc == 59
            HB_IDLEDEL( s_hIdle )
            s_hIdle := NIL
         ENDIF
      ENDIF
   ELSEIF ccTime > cClockTime
      __KEYBOARD( nKey )
      HB_IDLEDEL( s_hIdle )
      s_hIdle := NIL
   ENDIF
   RETURN
keytime.prg76
numconv.prg
TypeFunctionSourceLine
FUNCTIONNTOC( xNum, nBase, nLenght, cPad )
FUNCTION NTOC( xNum, nBase, nLenght, cPad )
LOCAL cNum

Default cPad to " "
Default nBase to 10

IF VALTYPE( xNum ) == "C"
   xNum := UPPER( ALLTRIM( xNum ) )
   xNum := CTON( xNum, 16 )
ENDIF
IF nBase > 36 .OR. nBase < 2
   RETURN ""
ENDIF

if xNum < 0
  xNum += 4294967296
endif
cNum := B10TOBN( xNum, @nBase )

IF ISNUMBER( nLenght )
   IF LEN(cNum) > nLenght
      cNum := REPLICATE( "*", nLenght )
   ELSEIF ISCHARACTER( cPad ) .AND. LEN( cNum ) < nLenght
      cNum := REPLICATE( cPad, nLenght - LEN( cNum ) ) + cNum
   ENDIF
ENDIF

RETURN cNum
numconv.prg85
FUNCTIONCTON( xNum, nBase, lMode )
FUNCTION CTON( xNum, nBase, lMode )
LOCAL i, nNum := 0, nPos

Default lMode TO .F.
Default nBase TO 10

IF ISCHARACTER(xNum) .and. nBase >= 2 .and. nBase <= 36

   xNum := UPPER( ALLTRIM( xNum) )

   FOR i := 1 TO LEN( xNum )
      nPos := AT( SUBSTR( xNum, i, 1 ), WORLD )
      IF nPos == 0 .or. nPos > nBase
         EXIT
      ELSE
         nNum := nNum * nBase + ( nPos - 1 )
      ENDIF
   NEXT

   IF lMode
      IF nNum > 32767
         nNum := nNum - 65536
      ENDIF
   ENDIF

ENDIF

RETURN nNum
numconv.prg141
STATIC FUNCTIONB10TOBN( nNum, nBase )
STATIC FUNCTION B10TOBN( nNum, nBase )
LOCAL nInt
IF nNum > 0
   
   nInt := INT( nNum / nBase)
   RETURN iif(nInt==0, "", B10TOBN( nInt, @nBase )) +;
          SUBSTR( WORLD, ( nNum % nBase ) + 1, 1 )

ELSEIF nNum == 0
   RETURN "0"
ENDIF
RETURN ""
numconv.prg171
FUNCTIONBITTOC( nInteger, cBitPattern, lMode )
FUNCTION BITTOC( nInteger, cBitPattern, lMode )

  LOCAL cBinary, nI, cString := ''

  Default lMode TO .F.


  cBitPattern := RIGHT( cBitPattern, 16 )
  cBinary := NTOC( nInteger, 2, 16 )

  FOR nI := 1 TO 16
     
     IF SUBSTR( cBinary, -nI, 1 ) == '1'

        cString := SUBSTR( cBitPattern, -nI, 1 ) + cString

     ELSEIF lMode
           
        cString := ' ' + cString

     ENDIF

  NEXT

RETURN RIGHT( cString, LEN( cBitPattern ) )
numconv.prg211
FUNCTIONCTOBIT( cCharString, cBitPattern )
FUNCTION CTOBIT( cCharString, cBitPattern )

  LOCAL nI, cString := ''

  cCharString := RIGHT( cCharString, 16 )
  cBitPattern := RIGHT( cBitPattern, 16 )

  FOR nI := 1 TO LEN( cBitPattern )

     cString := iif( AT(SUBSTR( cBitPattern, -nI, 1), cCharString) > 0, '1', '0') + cString

  NEXT

RETURN CTON( cString, 2 )
numconv.prg263
screen3.prg
TypeFunctionSourceLine
FUNCTIONCLEAREOL( nRow, nCol, xAttr, xChar )
FUNCTION CLEAREOL( nRow, nCol, xAttr, xChar )
   IF !ISNUMBER( nRow )
      nRow := ROW()
   ENDIF
RETURN CLEARWIN( nRow, nCol, nRow, /*MAXCOL()*/, xAttr, xChar )
screen3.prg58
FUNCTIONCLEOL( nRow, nCol )
FUNCTION CLEOL( nRow, nCol )
   IF !ISNUMBER( nRow )
      nRow := ROW()
   ENDIF
RETURN CLEARWIN( nRow, nCol, nRow, /*MAXCOL()*/, 7 /*"W/N"*/, " " )
screen3.prg64
FUNCTIONCLWIN( nRow, nCol )
FUNCTION CLWIN( nRow, nCol )
RETURN CLEARWIN( nRow, nCol, /*MAXROW()*/, /*MAXCOL()*/, 7 /*"W/N"*/, " " )
screen3.prg70
scrmark.prg
TypeFunctionSourceLine
FUNCTIONSCREENMARK( cSearch, xAttr, lUpperLower, lAll, cForward, cTrailing )
FUNCTION SCREENMARK( cSearch, xAttr, lUpperLower, lAll, cForward, cTrailing )
   LOCAL lFound := .f., nCount := 1
   LOCAL nAt, nLen, nLast, nRow, nCol, nEnd, nCols
   LOCAL cScreen

   IF !ISLOGICAL( lUpperLower )
      lUpperLower := .F.
   ENDIF
   IF !ISLOGICAL( lAll )
      lAll := .F.
   ENDIF
   IF !ISCHARACTER( cForward ) .OR. cForward == ""
      cForward := NIL
   ENDIF
   IF !ISCHARACTER( cTrailing ) .OR. cTrailing == ""
      cTrailing := NIL
   ENDIF

   nCols := MAXCOL()
   cScreen := SCREENTEXT( 0, 0, MAXROW(), nCols++ )
   nLen := LEN( cSearch )
   nLast := LEN( cScreen ) - nLen + 1

   IF ! lUpperLower
      cSearch := UPPER( cSearch )
      cScreen := UPPER( cScreen )
   ENDIF

   DO WHILE ( nAt := ATNUM( cSearch, cScreen, nCount ) ) != 0
      IF ( nAt == 1 .OR. cForward == NIL .OR. ;
           SUBSTR( cScreen, nAt, 1 ) $ cForward ) .AND. ;
         ( nAt == nLast .OR. cTrailing == NIL .OR. ;
           SUBSTR( cScreen, nAt + nLen ) $ cTrailing )
         lFound := .t.
         --nAt
         nRow := INT( nAt / nCols )
         nCol := INT( nAt % nCols )
         nEnd := nCol + LEN( cSearch ) - 1
         COLORWIN( nRow, nCol, nRow, nEnd, xAttr )
         DO WHILE nEnd >= nCols
            nEnd -= nCols
            nCol := 0
            ++nRow
            COLORWIN( nRow, nCol, nRow, nEnd, xAttr )
         ENDDO
         IF ! lAll
            EXIT
         ENDIF
      ENDIF
      nCount++
   ENDDO
RETURN lFound
scrmark.prg60
showtime.prg
TypeFunctionSourceLine
FUNCTIONSHOWTIME( nRow, nCol, lNoSec, cColor, l12, lAmPm )
FUNCTION SHOWTIME( nRow, nCol, lNoSec, cColor, l12, lAmPm )
   STATIC s_hTimer := NIL

   IF VALTYPE( nRow ) == "N" .AND. nRow >= 0 .AND. nRow <= MAXROW( .T. )
      IF s_hTimer != NIL
         HB_IDLEDEL( s_hTimer )
      ENDIF
      s_hTimer := HB_IDLEADD( {|| _HB_CTDSPTIME( nRow, nCol, lNoSec, cColor, ;
                                                 l12, lAmPm ) } )
   ELSEIF s_hTimer != NIL
      HB_IDLEDEL( s_hTimer )
      s_hTimer := NIL
   ENDIF
RETURN ""
showtime.prg54

Page url: http://www.yourdomain.com/help/index.html?hbct.htm