diff options
author | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2022-12-07 13:17:14 +0100 |
---|---|---|
committer | Jörg Frings-Fürst <debian@jff-webhosting.net> | 2022-12-07 13:17:14 +0100 |
commit | 4875a3dd9b183dcd2256e2abfc4ccf7484c233b4 (patch) | |
tree | 0abbea881ded030851014ffdd60fbf71fead8f65 /xbase64/xbexpfnc.cpp | |
parent | daf17154bf13139d9375f48525d19d6aaba08155 (diff) |
New upstream version 4.0.2upstream/4.0.2
Diffstat (limited to 'xbase64/xbexpfnc.cpp')
-rwxr-xr-x | xbase64/xbexpfnc.cpp | 1092 |
1 files changed, 0 insertions, 1092 deletions
diff --git a/xbase64/xbexpfnc.cpp b/xbase64/xbexpfnc.cpp deleted file mode 100755 index 91b6074..0000000 --- a/xbase64/xbexpfnc.cpp +++ /dev/null @@ -1,1092 +0,0 @@ -/* xbexpfnc.cpp - - Xbase64 project source code - - This file contains logic for handling Xbase expressions. - - Copyright (C) 1997,2003 Gary A Kunkel - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - - Contact: - - Email: - - xdb-devel@lists.sourceforge.net - xdb-users@lists.sourceforge.net - - - Regular Mail: - - XBase Support - 149C South Main St - Keller Texas, 76248 - USA -*/ - -#ifdef __WIN32__ -#include <xbase64/xbwincfg.h> -#else -#include <xbase64/xbconfig.h> -#endif - -#include <xbase64/xbase64.h> -#ifdef XB_EXPRESSIONS - -#include <ctype.h> -#include <math.h> -#include <stdlib.h> -#include <string.h> - -#include <xbase64/xbexp.h> -//#include <xbase64/xbexcept.h> - - -/*! \file xbexpfnc.cpp -*/ - -/*************************************************************************/ -//! Short description. -/*! - \param Func -*/ -xbShort xbExpn::ProcessFunction( char * Func ) -{ -/* 1 - pop function from stack - 2 - verify function name and get no of parms needed - 3 - verify no of parms >= remainder of stack - 4 - pop parms off stack - 5 - execute function - 6 - push result back on stack -*/ - - - char *buf = 0; - xbExpNode *p1, *p2, *p3, *WorkNode, *FuncNode; - xbShort ParmsNeeded,len; - char ptype = 0; /* process type s=string, l=logical, d=double */ - xbDouble DoubResult = 0; - xbLong IntResult = 0; - FuncNode = (xbExpNode *) Pop(); - - ParmsNeeded = GetFuncInfo( Func, 1 ); - - if( ParmsNeeded == -1 ) { - return XB_INVALID_FUNCTION; - } - else { - ParmsNeeded = 0; - if( FuncNode->Sibling1 ) ParmsNeeded++; - if( FuncNode->Sibling2 ) ParmsNeeded++; - if( FuncNode->Sibling3 ) ParmsNeeded++; - } - - if( ParmsNeeded > GetStackDepth()) - return XB_INSUFFICIENT_PARMS; - - p1 = p2 = p3 = NULL; - if( ParmsNeeded > 2 ) p3 = (xbExpNode *) Pop(); - if( ParmsNeeded > 1 ) p2 = (xbExpNode *) Pop(); - if( ParmsNeeded > 0 ) p1 = (xbExpNode *) Pop(); - memset( WorkBuf, 0x00, WorkBufMaxLen+1); - - if( strncmp( Func, "ABS", 3 ) == 0 ) { - ptype = 'd'; - DoubResult = ABS( GetDoub( p1 )); - } - else if( strncmp( Func, "ASC", 3 ) == 0 ) { - ptype = 'd'; - DoubResult = ASC( p1->StringResult ); - } - else if( strncmp( Func, "AT", 2 ) == 0 ) { - ptype = 'd'; - DoubResult = AT( p1->StringResult, p2->StringResult ); - } - else if( strncmp( Func, "CDOW", 4 ) == 0 ) { - ptype = 's'; - buf = CDOW( p1->StringResult ); - } - else if( strncmp( Func, "CHR", 3 ) == 0 ) { - ptype = 's'; - buf = CHR( GetInt( p1 )); - } - else if( strncmp( Func, "CMONTH", 6 ) == 0 ) { - ptype = 's'; - buf = CMONTH( p1->StringResult ); - } - else if( strncmp( Func, "CTOD", 4 ) == 0 ) { - ptype = 's'; - buf = CTOD( p1->StringResult ); - } - else if( strncmp( Func, "DATE", 4 ) == 0 ) { - ptype = 's'; - buf = DATE(); - } - else if( strncmp( Func, "DAY", 3 ) == 0 ) { - ptype = 'd'; - DoubResult = DAY( p1->StringResult ); - } - else if( strncmp( Func, "DESCEND", 7 ) == 0 && p1->ExpressionType == 'C' ) { - ptype = 's'; - buf = DESCEND( p1->StringResult.c_str() ); - } - else if( strncmp( Func, "DESCEND", 7 ) == 0 && p1->ExpressionType == 'N' ) { - ptype = 'd'; - DoubResult = DESCEND( GetDoub( p1 )); - } - else if( strncmp( Func, "DESCEND", 7 ) == 0 && p1->ExpressionType == 'D' ) { - xbDate d( p1->StringResult ); - ptype = 'd'; - DoubResult = DESCEND( d ); - } - else if( strncmp( Func, "DOW", 3 ) == 0 ) { - ptype = 'd'; - DoubResult = DOW( p1->StringResult ); - } - else if( strncmp( Func, "DTOC", 4 ) == 0 ) { - ptype = 's'; - buf = DTOC( p1->StringResult ); - } - else if( strncmp( Func, "DTOS", 4 ) == 0 ) { - ptype = 's'; - buf = DTOS( p1->StringResult ); - } - else if( strncmp( Func, "EXP", 3 ) == 0 ) { - ptype = 'd'; - DoubResult = EXP( GetDoub( p1 )); - } - else if( strncmp( Func, "IIF", 3 ) == 0 ){ - ptype = 's'; - buf = IIF( p1->IntResult, p2->StringResult, p3->StringResult ); - } - else if( strncmp( Func, "INT", 3 ) == 0 ) { - ptype = 'd'; - DoubResult = INT( GetDoub( p1 )); - } - else if( strncmp( Func, "ISALPHA", 7 ) == 0 ) { - ptype = 'l'; - IntResult = ISALPHA( p1->StringResult ); - } - else if( strncmp( Func, "ISLOWER", 7 ) == 0 ) { - ptype = 'l'; - IntResult = ISLOWER( p1->StringResult ); - } - else if( strncmp( Func, "ISUPPER", 7 ) == 0 ) { - ptype = 'l'; - IntResult = ISUPPER( p1->StringResult ); - } - else if( strncmp( Func, "LEN", 3 ) == 0 ) { - ptype = 'd'; - DoubResult = LEN( p1->StringResult ); - } - else if( strncmp( Func, "LEFT", 4 ) == 0 ) { - ptype = 's'; - buf = LEFT( p1->StringResult, INT( p2->DoubResult )); - } - else if( strncmp( Func, "LTRIM", 5 ) == 0 ) { - ptype = 's'; - buf = LTRIM( p1->StringResult ); - } - else if( strncmp( Func, "LOG", 3 ) == 0 ) { - ptype = 'd'; - DoubResult = LOG( GetDoub( p1 )); - } - else if( strncmp( Func, "LOWER", 5 ) == 0 ) { - ptype = 's'; - buf = LOWER( p1->StringResult ); - } - else if( strncmp( Func, "MAX", 3 ) == 0 ) { - ptype = 'd'; - DoubResult = MAX( GetDoub( p1 ), GetDoub( p2 )); - } - else if( strncmp( Func, "MIN", 3 ) == 0 ) { - ptype = 'd'; - DoubResult = MIN( GetDoub( p1 ), GetDoub( p2 )); - } - else if( strncmp( Func, "MONTH", 5 ) == 0 ) { - ptype = 'd'; - DoubResult = MONTH( p1->StringResult ); - } - - else if( strncmp( Func, "RECNO", 5 ) == 0 ) - { - ptype = 'd'; - DoubResult = RECNO( FuncNode->dbf ); - } - - else if( strncmp( Func, "REPLICATE", 9 ) == 0 ) { - ptype = 's'; - buf = REPLICATE( p1->StringResult, GetInt( p2 )); - } - else if( strncmp( Func, "RIGHT", 5 ) == 0 ) { - ptype = 's'; - buf = RIGHT( p1->StringResult, GetInt( p2 )); - } - else if( strncmp( Func, "RTRIM", 5 ) == 0 ) { - ptype = 's'; - buf = RTRIM( p1->StringResult ); - } - else if( strncmp( Func, "SPACE", 5 ) == 0 ) { - ptype = 's'; - buf = SPACE( INT( GetDoub( p1 ))); - } - else if( strncmp( Func, "SQRT", 4 ) == 0 ) { - ptype = 'd'; - DoubResult = SQRT( GetDoub( p1 )); - } - else if( strncmp( Func, "STRZERO", 7 ) == 0 && ParmsNeeded == 1 ) { - ptype = 's'; - buf = STRZERO( p1->StringResult ); - } - else if( strncmp( Func, "STRZERO", 7 ) == 0 && ParmsNeeded == 2 ) { - ptype = 's'; - buf = STRZERO( p1->StringResult, GetInt( p2 )); - } - else if( strncmp( Func, "STRZERO", 7 ) == 0 && ParmsNeeded == 3 ) { - ptype = 's'; - buf = STRZERO( p1->StringResult, GetInt( p2 ), GetInt( p3 )); - } - - else if( strncmp( Func, "STR", 3 ) == 0 && p3 ) { - ptype = 's'; - if(p1->ExpressionType == 'N') - buf = STR( p1->DoubResult, GetInt( p2 ), GetInt( p3 )); - else - buf = STR( p1->StringResult, GetInt( p2 ), GetInt( p3 )); - } - - else if( strncmp( Func, "STR", 3 ) == 0 && p2 ) { - ptype = 's'; - buf = STR( p1->StringResult, GetInt( p2 )); - } - - else if( strncmp( Func, "STR", 3 ) == 0 && p1 ) { - ptype = 's'; - buf = STR( p1->StringResult ); - } - - else if( strncmp( Func, "SUBSTR", 6 ) == 0 ) { - ptype = 's'; - buf = SUBSTR( p1->StringResult, GetInt( p2 ), GetInt( p3 )); - } - else if( strncmp( Func, "TRIM", 4 ) == 0 ) { - ptype = 's'; - buf = TRIM( p1->StringResult ); - } - else if( strncmp( Func, "UPPER", 5 ) == 0 ) { - ptype = 's'; - buf = UPPER( p1->StringResult ); - } - else if( strncmp( Func, "VAL", 3 ) == 0 ) { - ptype = 'd'; - DoubResult = VAL( p1->StringResult ); - } - else if( strncmp( Func, "YEAR", 4 ) == 0 ) { - ptype = 'd'; - DoubResult = YEAR( p1->StringResult ); - } - if( p1 && !p1->InTree ) delete p1; - if( p2 && !p2->InTree ) delete p2; - if( p3 && !p3->InTree ) delete p3; - if( !FuncNode->InTree ) delete FuncNode; - if( buf ){ - len = strlen( buf ); - WorkNode = new xbExpNode; - if( !WorkNode ) - return XB_NO_MEMORY; - WorkNode->ResultLen = len + 1; - - } else { - len = 0; - WorkNode = new xbExpNode; - if( !WorkNode ) - return XB_NO_MEMORY; - WorkNode->ResultLen = 0; - } - - switch( ptype ){ - case 's': /* string or char result */ - WorkNode->DataLen = len; - WorkNode->ExpressionType = 'C'; - WorkNode->Type = 's'; - WorkNode->StringResult = buf; - break; - case 'd': /* numeric result */ - WorkNode->DataLen = 0; - WorkNode->ExpressionType = 'N'; - WorkNode->Type = 'd'; - WorkNode->DoubResult = DoubResult; - break; - case 'l': /* logical result */ - WorkNode->DataLen = 0; - WorkNode->ExpressionType = 'L'; - WorkNode->Type = 'l'; - WorkNode->IntResult = IntResult; - break; - default: - std::cout << "\nInternal error. " << ptype; - break; - } - Push(WorkNode); - return XB_NO_ERROR; -} -/*************************************************************************/ -//! Short description. -/*! -*/ -xbString & xbExpn::GetStringResult() -{ - xbString *s = 0; - xbExpNode *e; - if( GetStackDepth() < 1 ) return *s; - e = (xbExpNode *) Pop(); - s = &e->StringResult; - Push(e); - return *s; -} -/*************************************************************************/ -//! Short description. -/*! -*/ -xbLong xbExpn::GetIntResult() -{ - xbLong l; - xbExpNode * e; - if( GetStackDepth() < 1 ) return 0L; - e = (xbExpNode *) Pop(); - l = e->IntResult; - Push(e); - return l; -} -/*************************************************************************/ -//! Short description. -/*! -*/ -xbDouble xbExpn::GetDoubleResult() -{ - xbDouble d; - xbExpNode * e; - if( GetStackDepth() < 1 ) return (xbDouble) 0; - e = (xbExpNode *) Pop(); - d = e->DoubResult; - Push(e); - return d; -} -/*************************************************************************/ -//! Short description. -/*! - \param p -*/ -xbDouble xbExpn::GetDoub( xbExpNode * p ) -{ - if( p->Type == 'd' ) - return p->DoubResult; - else if( p->Type == 'N' || p->Type == 's' ) - return( strtod( p->StringResult, NULL )); - else if( p->Type == 'D' ) - return( p->dbf->GetDoubleField( p->FieldNo )); - else - return 0; -} -/*************************************************************************/ -//! Short description. -/*! - \param p -*/ -xbLong xbExpn::GetInt( xbExpNode *p ) -{ - if( p->Type == 'l' || p->Type == 'i' ) - return p->IntResult; - else if( p->Type == 'N' || p->Type == 's' ) - return atoi( p->StringResult ); - else if( p->Type == 'D' ) - return p->dbf->GetLongField( p->FieldNo ); - else - return 0L; -} -/*************************************************************************/ -//! Short description. -/*! - \param d -*/ -xbDouble xbExpn::ABS( xbDouble d ) -{ - if( d < (xbDouble) 0 ) - return d * -1; - else - return d; -} -/*************************************************************************/ -//! Short description. -/*! - \param String -*/ -xbLong xbExpn::ASC( const char * String ) -{ - return *String; -} -/*************************************************************************/ -//! Short description. -/*! - \param s1 - \param s2 -*/ -xbLong xbExpn::AT( const char * s1, const char *s2 ) -{ - /* looks for s1 in s2 */ - xbLong cnt; - const char *p; - if( strlen( s1 ) > strlen( s2 )) return 0; - if(( p = strstr( s2, s1 )) == NULL ) - return 0; - cnt = 1; - while( s2++ != p ) cnt++; - return cnt; -} -/*************************************************************************/ -//! Short description. -/*! - \param Date8 -*/ -char * xbExpn::CDOW( const char * Date8 ) -{ - static char buf[10]; - xbDate d; - xbShort len,i; - strcpy( buf, d.FormatDate( "DDDD", Date8 )); - len = strlen( buf ); - for( i = len; i < 9; i++ ) buf[i] = 0x20; - buf[9] = 0x00; - return buf; -} -/*************************************************************************/ -//! Short description. -/*! - \param l -*/ -char * xbExpn::CHR( xbLong l ) -{ - static char buf[2]; - xbShort i; - i = (xbShort) l; - buf[0] = i; - buf[1] = 0x00; - return buf; -} -/*************************************************************************/ -//! Short description. -/*! - \param Date8 -*/ -char * xbExpn::CMONTH( const char * Date8 ) -{ - static char buf[10]; - xbShort len,i; - xbDate d; - strcpy( buf, d.FormatDate( "MMMM", Date8 )); - len = strlen( buf ); - for( i = len; i < 9; i++ ) buf[i] = 0x20; - buf[9] = 0x00; - return buf; -} -/*************************************************************************/ -//! Short description. -/*! - \param indate -*/ -char * xbExpn::CTOD( const char * indate ) -{ - xbDate d; - strcpy( WorkBuf, d.FormatCTODdate( indate )); - return WorkBuf; -} -/*************************************************************************/ -//! Short description. -/*! - \param Date8 -*/ -xbLong xbExpn::DAY( const char * Date8 ) -{ - xbDate d; - return d.DayOf( XB_FMT_MONTH, Date8 ); -} -/*************************************************************************/ -//! Short description. -/*! - \param date -*/ -xbLong xbExpn::DESCEND( const xbDate & date ) -{ - return 2415021 + date.JulianDays( "29991231" ) - date.JulianDays(); -} -/*************************************************************************/ -//! Short description. -/*! - \param num -*/ -xbDouble xbExpn::DESCEND( xbDouble d ) -{ - return d * -1; -} -/*************************************************************************/ -//! Short description. -/*! - \param str -*/ -char * xbExpn::DESCEND( const char * str ) -{ - xbShort i; - xbShort len = strlen( str ); - - for( i = 0; i < len; i++ ) - WorkBuf[i] = 255 - str[i]; - WorkBuf[i] = 0x00; - - return WorkBuf; -} -/*************************************************************************/ -//! Short description. -/*! - \param Date8 -*/ -xbLong xbExpn::DOW( const char * Date8 ) -{ - xbDate d; - return d.DayOf( XB_FMT_WEEK, Date8 ); -} -/*************************************************************************/ -//! Short description. -/*! - \param Date8 -*/ -char * xbExpn::DTOC( const char * Date8 ) -{ - xbDate d; - strcpy( WorkBuf, d.FormatDate( xbase->GetDefaultDateFormat(), Date8 )); - return WorkBuf; -} -/*************************************************************************/ -//! Short description. -/*! - \param Date8 -*/ -char * xbExpn::DTOS( const char * Date8 ) -{ - xbDate d; - strcpy( WorkBuf, d.FormatDate( "YYYYMMDD", Date8 )); - return WorkBuf; -} -/*************************************************************************/ -//! Short description. -/*! - \param d -*/ -xbDouble xbExpn::EXP( xbDouble d ) -{ - return exp( d ); -} -/*************************************************************************/ -//! Short description. -/*! - \param ifCondition - \param trueRslt - \param falseRslt -*/ -char * xbExpn::IIF( xbShort ifCondition, - const char * trueRslt, const char * falseRslt ) -{ - if( ifCondition ) - strcpy( WorkBuf, trueRslt ); - else - strcpy( WorkBuf, falseRslt ); - - return WorkBuf; -} -/*************************************************************************/ -//! Short description. -/*! - \param d -*/ -xbLong xbExpn::INT( xbDouble d ) -{ - return (xbLong) d; -} -/*************************************************************************/ -//! Short description. -/*! - \param String -*/ -xbLong xbExpn::ISALPHA( const char * String ) -{ - if( isalpha(*String) ) return 1; - else return 0; -} -/*************************************************************************/ -//! Short description. -/*! - \param String -*/ -xbLong xbExpn::ISLOWER( const char * String ) -{ - if( islower(*String) ) return 1; - else return 0; -} -/*************************************************************************/ -//! Short description. -/*! - \param String -*/ -xbLong xbExpn::ISUPPER( const char * String ) -{ - if( isupper(*String) ) return 1; - else return 0; -} -/*************************************************************************/ -//! Short description. -/*! - \param String -*/ -xbLong xbExpn::LEN( const char * String ) -{ - xbLong len; - len = strlen( String ); - len--; - while( len >= 0 && String[len] == 0x20 ) len--; - return ++len; -} -/*************************************************************************/ -//! Short description. -/*! - \param String - \param Len -*/ -char * xbExpn::LEFT( const char * String, xbShort Len ) -{ - xbShort i; - for( i = 0; i < Len && i < 100; i++ ) - WorkBuf[i] = String[i]; - WorkBuf[i] = 0x00; - return WorkBuf; -} -/*************************************************************************/ -//! Short description. -/*! - \param String -*/ -/* This method removes any leading spaces from String */ -char * xbExpn::LTRIM( const char *String) { - WorkBuf[0] = 0x00; - if (!String) - return WorkBuf; - - xbShort i; - i = 0; - while( *String && *String == 0x20 ) String++; - while( *String && i < WorkBufMaxLen ){ - WorkBuf[i++] = *String; - String++; - } - WorkBuf[i] = 0x00; - return WorkBuf; -} -/*************************************************************************/ -//! Short description. -/*! - \param d -*/ -xbDouble xbExpn::LOG( xbDouble d ) -{ - return log( d ); -} -/*************************************************************************/ -//! Short description. -/*! - \param String -*/ -char *xbExpn::LOWER( const char *String ) -{ - WorkBuf[0] = 0x00; - if (!String) - return WorkBuf; - xbShort i = 0; - while( *String && i < WorkBufMaxLen) { - WorkBuf[i++] = tolower( *String ); - String++; - } - WorkBuf[i] = 0x00; - return WorkBuf; -} -/*************************************************************************/ -//! Short description. -/*! - \param d1 - \param d2 -*/ -xbDouble xbExpn::MAX( xbDouble d1, xbDouble d2 ) -{ - if( d1 > d2 ) - return d1; - else - return d2; -} -/*************************************************************************/ -//! Short description. -/*! - \param d1 - \param d2 -*/ -xbDouble xbExpn::MIN( xbDouble d1, xbDouble d2 ) -{ - if( d1 < d2 ) - return d1; - else - return d2; -} -/*************************************************************************/ -//! Short description. -/*! - \param Date8 -*/ -xbLong xbExpn::MONTH( const char * Date8 ) -{ - xbDate d; - return d.MonthOf( Date8 ); -} -/*************************************************************************/ -//! Short description. -/*! - \param d -*/ -xbLong xbExpn::RECNO( xbDbf * d ) { - return d->GetCurRecNo(); -} -/*************************************************************************/ -//! Short description. -/*! - \param String - \param Cnt -*/ -char * xbExpn::REPLICATE( const char * String, xbShort Cnt ) -{ - xbShort len, i; - len = strlen( String ); - if(( len * Cnt ) > 100 ) return NULL; - memset( WorkBuf, 0x00, len+1 ); - for( i = 0; i < Cnt; i++ ) - strcat( WorkBuf, String ); - return WorkBuf; -} -/*************************************************************************/ -//! Short description. -/*! - \param String - \paran cnt -*/ -char * xbExpn::RIGHT( const char * String, xbShort cnt ) -{ - xbShort len; - strcpy( WorkBuf, String ); - len = strlen( String ); - if( len < cnt ) return WorkBuf; - len = LEN( String ); - if( len < cnt ) return WorkBuf; - strcpy( WorkBuf, String + len - cnt ); - return WorkBuf; -} -/*************************************************************************/ -//! Short description. -/*! - \param String -*/ -char * xbExpn::RTRIM( const char * String ) -{ - return TRIM( String ); -} -/*************************************************************************/ -//! Short description. -/*! - \param Cnt -*/ -char * xbExpn::SPACE( xbShort Cnt ) -{ - if( Cnt > 100 ) return NULL; - memset( WorkBuf, 0x20, Cnt ); - WorkBuf[Cnt] = 0x00; - return WorkBuf; -} -/*************************************************************************/ -//! Short description. -/*! - \param d -*/ -xbDouble xbExpn::SQRT( xbDouble d ) -{ - return sqrt( d ); -} -/*************************************************************************/ -//! Short description. -/*! - \param d - \param length - \param numDecimals -*/ -char * xbExpn::STR(xbDouble d, xbUShort length, xbShort numDecimals) { - // sanity check for length arg - if (length > WorkBufMaxLen) - { - // maybe should generate an error here instead ? - length = WorkBufMaxLen; - } - - // check the length required - sprintf(WorkBuf, "%.*f", numDecimals, d); - - if ((xbUShort) strlen(WorkBuf) > length) { - memset(WorkBuf, '*', length); - WorkBuf[length] = 0x00; - } else - sprintf( WorkBuf, "%*.*f", length, numDecimals, d ); - - return WorkBuf; -} -/*************************************************************************/ -//! Short description. -/*! - \param d - \param length -*/ -char * xbExpn::STR( xbDouble d, xbShort length ) -{ - return STR( d, length, 0 ); -} -/*************************************************************************/ -//! Short description. -/*! - \param d -*/ -char * xbExpn::STR( xbDouble d ) -{ - return STR( d, 10, 0 ); -} -/*************************************************************************/ -//! Short description. -/*! - \param String - \param length - \param -*/ -char * xbExpn::STR( const char * String, xbShort length, xbShort dec ) -{ - xbShort len, i; - double d; - d = strtod( String, NULL ); - return STR( d, length, dec ); -} -/*************************************************************************/ -//! Short description. -/*! - \param String - \param length -*/ -char * xbExpn::STR( const char *String, xbShort length ) -{ - return STR( String, length, 0 ); -} -/*************************************************************************/ -//! Short description. -/*! - \param String -*/ -char * xbExpn::STR( const char * String ) -{ - return STR( String, 10, 0 ); -} -/*************************************************************************/ -//! Short description. -/*! - \param d - \param length - \param -*/ -char * xbExpn::STRZERO( xbDouble d, xbShort length, xbShort ) -{ - xbShort len,i; - sprintf(WorkBuf, "%*.*g", length, length, d); -// gcvt( d, length, WorkBuf ); - len = strlen( WorkBuf ); - if( len > length ) - strcpy( WorkBuf, "**********" ); - else if( len < length ) - { - for( i = len; i < length; i++ ) - WorkBuf[i] = 0x30; - WorkBuf[i] = 0x00; - } - return WorkBuf; -} -/*************************************************************************/ -//! Short description. -/*! - \param d - \param length -*/ -char * xbExpn::STRZERO( xbDouble d, xbShort length ) -{ - return STRZERO( d, length, 0 ); -} -/*************************************************************************/ -//! Short description. -/*! - \param d -*/ -char * xbExpn::STRZERO( xbDouble d ) -{ - return STRZERO( d, 10, 0 ); -} -/*************************************************************************/ -//! Short description. -/*! - \param String - \param length - \param -*/ -char * xbExpn::STRZERO( const char * String, xbShort length, xbShort ) -{ - xbShort i, len ; - while( *String == ' ' ) String++; - len = strlen(String); - for( i = 0; i < abs( length-len); i++ ) - WorkBuf[i] = 0x30; - WorkBuf[i] = 0x00; - strcat( WorkBuf, String ); - return WorkBuf; -} -/*************************************************************************/ -//! Short description. -/*! - \param String - \param length -*/ -char * xbExpn::STRZERO( const char * String, xbShort length ) -{ - return STRZERO( String, length, 0 ); -} -/*************************************************************************/ -//! Short description. -/*! - \param String -*/ -char * xbExpn::STRZERO( const char * String ) -{ - return STRZERO( String, 10, 0 ); -} -/*************************************************************************/ -//! Short description. -/*! - \param String - \param StartPos - \param Len -*/ -char * xbExpn::SUBSTR( const char * String, xbShort StartPos, xbShort Len ) -{ - xbShort i; - if( StartPos < 1 ) return NULL; - String += (StartPos - 1); - for( i = 0; i < Len; i++ ) - WorkBuf[i] = *String++; - WorkBuf[i] = 0x00; - return WorkBuf; -} -/*************************************************************************/ -//! Short description. -/*! -*/ -char * xbExpn::DATE() -{ - xbDate d; - strcpy( WorkBuf, d.Sysdate()); - return WorkBuf; -} -/*************************************************************************/ -//! Short description. -/*! - \param String -*/ -char * xbExpn::TRIM( const char * String ) -{ - WorkBuf[0] = 0x00; - if( !String ) - return WorkBuf; - char *sp; - xbShort len; - len = strlen( String ); - if( len < WorkBufMaxLen ) { - strcpy( WorkBuf, String ); - } - else { - strncpy( WorkBuf, String, WorkBufMaxLen ); - WorkBuf[ WorkBufMaxLen ] = 0x00; - len = WorkBufMaxLen; - } - sp = WorkBuf + len - 1; - while( *sp == 0x20 && sp >= WorkBuf ) { - *sp = 0x00; - sp--; - } - return WorkBuf; -} -/*************************************************************************/ -//! Short description. -/*! - \param String -*/ -char *xbExpn::UPPER( const char *String ) -{ - WorkBuf[0] = 0x00; - if (!String) - return WorkBuf; - xbShort i; - i = 0; - while(*String && i < WorkBufMaxLen) { - WorkBuf[i++] = toupper(*String); - String++; - } - WorkBuf[i] = 0x00; - return WorkBuf; -} -/*************************************************************************/ -//! Short description. -/*! - \param String -*/ -xbLong xbExpn::VAL( const char * String ) -{ - if( String ) - return (xbLong) *String; - else - return 0; -} -/*************************************************************************/ -//! Short description. -/*! - \param Date8 -*/ -xbLong xbExpn::YEAR( const char * Date8 ){ - xbDate d; - return d.YearOf( Date8 ); -} -/*************************************************************************/ -#endif // XB_EXPRESSIONS |