diff options
Diffstat (limited to 'basic/source/runtime/methods.cxx')
-rw-r--r-- | basic/source/runtime/methods.cxx | 609 |
1 files changed, 321 insertions, 288 deletions
diff --git a/basic/source/runtime/methods.cxx b/basic/source/runtime/methods.cxx index 5dab1a21a084..881ee8678c0e 100644 --- a/basic/source/runtime/methods.cxx +++ b/basic/source/runtime/methods.cxx @@ -107,16 +107,17 @@ SbxVariable* getDefaultProp( SbxVariable* pRef ); // from source/classes/sbxmod.cxx uno::Reference< frame::XModel > getDocumentModel( StarBASIC* ); -static void FilterWhiteSpace( String& rStr ) +static void FilterWhiteSpace( OUString& rStr ) { - if (!rStr.Len()) + if (rStr.isEmpty()) + { return; - + } rtl::OUStringBuffer aRet; - for (xub_StrLen i = 0; i < rStr.Len(); ++i) + for (sal_Int32 i = 0; i < rStr.getLength(); ++i) { - sal_Unicode cChar = rStr.GetChar(i); + sal_Unicode cChar = rStr[i]; if ((cChar != ' ') && (cChar != '\t') && (cChar != '\n') && (cChar != '\r')) { @@ -152,7 +153,7 @@ static inline bool isFolder( FileStatus::Type aType ) // Converts possibly relative paths to absolute paths // according to the setting done by ChDir/ChDrive -String getFullPath( const String& aRelPath ) +OUString getFullPath( const OUString& aRelPath ) { OUString aFileURL; @@ -195,7 +196,7 @@ RTLFUNC(CreateObject) { (void)bWrite; - String aClass( rPar.Get( 1 )->GetString() ); + OUString aClass( rPar.Get( 1 )->GetOUString() ); SbxObjectRef p = SbxBase::CreateObject( aClass ); if( !p ) StarBASIC::Error( SbERR_CANNOT_LOAD ); @@ -217,7 +218,7 @@ RTLFUNC(Error) StarBASIC::Error( SbERR_INTERNAL_ERROR ); else { - String aErrorMsg; + OUString aErrorMsg; SbError nErr = 0L; sal_Int32 nCode = 0; if( rPar.Count() == 1 ) @@ -239,8 +240,8 @@ RTLFUNC(Error) } bool bVBA = SbiRuntime::isVBAEnabled(); - String tmpErrMsg; - if( bVBA && aErrorMsg.Len() > 0 ) + OUString tmpErrMsg; + if( bVBA && !aErrorMsg.isEmpty()) { tmpErrMsg = aErrorMsg; } @@ -341,15 +342,15 @@ RTLFUNC(Asc) else { SbxVariableRef pArg = rPar.Get( 1 ); - String aStr( pArg->GetString() ); - if ( aStr.Len() == 0 ) + OUString aStr( pArg->GetOUString() ); + if ( aStr.isEmpty()) { StarBASIC::Error( SbERR_BAD_ARGUMENT ); rPar.Get(0)->PutEmpty(); } else { - sal_Unicode aCh = aStr.GetBuffer()[0]; + sal_Unicode aCh = aStr[0]; rPar.Get(0)->PutLong( aCh ); } } @@ -418,15 +419,15 @@ RTLFUNC(CurDir) int nCurDir = 0; // Current dir // JSM if ( rPar.Count() == 2 ) { - String aDrive = rPar.Get(1)->GetString(); - if ( aDrive.Len() != 1 ) + OUString aDrive = rPar.Get(1)->GetOUString(); + if ( aDrive.getLength() != 1 ) { StarBASIC::Error( SbERR_BAD_ARGUMENT ); return; } else { - nCurDir = (int)aDrive.GetBuffer()[0]; + nCurDir = (int)aDrive[0]; if ( !isalpha( nCurDir ) ) { StarBASIC::Error( SbERR_BAD_ARGUMENT ); @@ -492,10 +493,11 @@ RTLFUNC(ChDir) { ::basic::vba::registerCurrentDirectory( getDocumentModel( pBasic ), rPar.Get(1)->GetOUString() ); } - ::basic::vba::registerCurrentDirectory( getDocumentModel( pBasic ), rPar.Get(1)->GetString() ); } else + { StarBASIC::Error( SbERR_BAD_ARGUMENT ); + } } RTLFUNC(ChDrive) @@ -505,26 +507,28 @@ RTLFUNC(ChDrive) rPar.Get(0)->PutEmpty(); if (rPar.Count() != 2) + { StarBASIC::Error( SbERR_BAD_ARGUMENT ); + } } // Implementation of StepRENAME with UCB -void implStepRenameUCB( const String& aSource, const String& aDest ) +void implStepRenameUCB( const OUString& aSource, const OUString& aDest ) { uno::Reference< ucb::XSimpleFileAccess3 > xSFI = getFileAccess(); if( xSFI.is() ) { try { - String aSourceFullPath = getFullPath( aSource ); + OUString aSourceFullPath = getFullPath( aSource ); if( !xSFI->exists( aSourceFullPath ) ) { StarBASIC::Error( SbERR_FILE_NOT_FOUND ); return; } - String aDestFullPath = getFullPath( aDest ); + OUString aDestFullPath = getFullPath( aDest ); if( xSFI->exists( aDestFullPath ) ) { StarBASIC::Error( SbERR_FILE_EXISTS ); @@ -542,7 +546,7 @@ void implStepRenameUCB( const String& aSource, const String& aDest ) } // Implementation of StepRENAME with OSL -void implStepRenameOSL( const String& aSource, const String& aDest ) +void implStepRenameOSL( const OUString& aSource, const OUString& aDest ) { FileBase::RC nRet = File::move( getFullPathUNC( aSource ), getFullPathUNC( aDest ) ); if( nRet != FileBase::E_None ) @@ -559,8 +563,8 @@ RTLFUNC(FileCopy) rPar.Get(0)->PutEmpty(); if (rPar.Count() == 3) { - String aSource = rPar.Get(1)->GetString(); - String aDest = rPar.Get(2)->GetString(); + OUString aSource = rPar.Get(1)->GetOUString(); + OUString aDest = rPar.Get(2)->GetOUString(); if( hasUno() ) { uno::Reference< ucb::XSimpleFileAccess3 > xSFI = getFileAccess(); @@ -597,14 +601,14 @@ RTLFUNC(Kill) rPar.Get(0)->PutEmpty(); if (rPar.Count() == 2) { - String aFileSpec = rPar.Get(1)->GetString(); + OUString aFileSpec = rPar.Get(1)->GetOUString(); if( hasUno() ) { uno::Reference< ucb::XSimpleFileAccess3 > xSFI = getFileAccess(); if( xSFI.is() ) { - String aFullPath = getFullPath( aFileSpec ); + OUString aFullPath = getFullPath( aFileSpec ); if( !xSFI->exists( aFullPath ) || xSFI->isFolder( aFullPath ) ) { StarBASIC::Error( SbERR_FILE_NOT_FOUND ); @@ -639,7 +643,7 @@ RTLFUNC(MkDir) rPar.Get(0)->PutEmpty(); if (rPar.Count() == 2) { - String aPath = rPar.Get(1)->GetString(); + OUString aPath = rPar.Get(1)->GetOUString(); if( hasUno() ) { @@ -670,7 +674,7 @@ RTLFUNC(MkDir) // In OSL only empty directories can be deleted // so we have to delete all files recursively -void implRemoveDirRecursive( const String& aDirPath ) +void implRemoveDirRecursive( const OUString& aDirPath ) { DirectoryItem aItem; FileBase::RC nRet = DirectoryItem::get( aDirPath, aItem ); @@ -700,12 +704,13 @@ void implRemoveDirRecursive( const String& aDirPath ) DirectoryItem aItem2; nRet = aDir.getNextItem( aItem2 ); if( nRet != FileBase::E_None ) + { break; - + } // Handle flags FileStatus aFileStatus2( osl_FileStatus_Mask_Type | osl_FileStatus_Mask_FileURL ); nRet = aItem2.getFileStatus( aFileStatus2 ); - ::rtl::OUString aPath = aFileStatus2.getFileURL(); + OUString aPath = aFileStatus2.getFileURL(); // Directory? FileStatus::Type aType2 = aFileStatus2.getFileType(); @@ -733,7 +738,7 @@ RTLFUNC(RmDir) rPar.Get(0)->PutEmpty(); if (rPar.Count() == 2) { - String aPath = rPar.Get(1)->GetString(); + OUString aPath = rPar.Get(1)->GetOUString(); if( hasUno() ) { uno::Reference< ucb::XSimpleFileAccess3 > xSFI = getFileAccess(); @@ -750,7 +755,7 @@ RTLFUNC(RmDir) bool bCompatibility = ( pInst && pInst->IsCompatibility() ); if( bCompatibility ) { - Sequence< ::rtl::OUString > aContent = xSFI->getFolderContents( aPath, true ); + Sequence< OUString > aContent = xSFI->getFolderContents( aPath, true ); sal_Int32 nCount = aContent.getLength(); if( nCount > 0 ) { @@ -815,7 +820,7 @@ RTLFUNC(FileLen) else { SbxVariableRef pArg = rPar.Get( 1 ); - String aStr( pArg->GetString() ); + OUString aStr( pArg->GetOUString() ); sal_Int32 nLen = 0; if( hasUno() ) { @@ -897,18 +902,17 @@ RTLFUNC(InStr) StarBASIC::Error( SbERR_BAD_ARGUMENT ); else { - sal_uInt16 nStartPos = 1; + sal_Int32 nStartPos = 1; + sal_Int32 nFirstStringPos = 1; - sal_uInt16 nFirstStringPos = 1; if ( nArgCount >= 3 ) { - sal_Int32 lStartPos = rPar.Get(1)->GetLong(); - if( lStartPos <= 0 || lStartPos > 0xffff ) + nStartPos = rPar.Get(1)->GetLong(); + if( nStartPos <= 0 ) { StarBASIC::Error( SbERR_BAD_ARGUMENT ); - lStartPos = 1; + nStartPos = 1; } - nStartPos = (sal_uInt16)lStartPos; nFirstStringPos++; } @@ -928,11 +932,11 @@ RTLFUNC(InStr) { bTextMode = rPar.Get(4)->GetInteger(); } - sal_uInt16 nPos; - const String& rToken = rPar.Get(nFirstStringPos+1)->GetString(); + sal_Int32 nPos; + const OUString& rToken = rPar.Get(nFirstStringPos+1)->GetOUString(); // #97545 Always find empty string - if( !rToken.Len() ) + if( rToken.isEmpty() ) { nPos = nStartPos; } @@ -940,27 +944,18 @@ RTLFUNC(InStr) { if( !bTextMode ) { - const String& rStr1 = rPar.Get(nFirstStringPos)->GetString(); - - nPos = rStr1.Search( rToken, nStartPos-1 ); - if ( nPos == STRING_NOTFOUND ) - nPos = 0; - else - nPos++; + const OUString& rStr1 = rPar.Get(nFirstStringPos)->GetOUString(); + nPos = rStr1.indexOf( rToken, nStartPos - 1 ) + 1; } else { - String aStr1 = rPar.Get(nFirstStringPos)->GetString(); - String aToken = rToken; + OUString aStr1 = rPar.Get(nFirstStringPos)->GetOUString(); + OUString aToken = rToken; - aStr1.ToUpperAscii(); - aToken.ToUpperAscii(); + aStr1 = aStr1.toAsciiUpperCase(); + aToken = aToken.toAsciiUpperCase(); - nPos = aStr1.Search( aToken, nStartPos-1 ); - if ( nPos == STRING_NOTFOUND ) - nPos = 0; - else - nPos++; + nPos = aStr1.indexOf( aToken, nStartPos-1 ) + 1; } } rPar.Get(0)->PutLong( nPos ); @@ -982,17 +977,17 @@ RTLFUNC(InStrRev) } else { - String aStr1 = rPar.Get(1)->GetString(); - String aToken = rPar.Get(2)->GetString(); + OUString aStr1 = rPar.Get(1)->GetOUString(); + OUString aToken = rPar.Get(2)->GetOUString(); - sal_Int32 lStartPos = -1; + sal_Int32 nStartPos = -1; if ( nArgCount >= 3 ) { - lStartPos = rPar.Get(3)->GetLong(); - if( (lStartPos <= 0 && lStartPos != -1) || lStartPos > 0xffff ) + nStartPos = rPar.Get(3)->GetLong(); + if( (nStartPos <= 0 && nStartPos != -1)) { StarBASIC::Error( SbERR_BAD_ARGUMENT ); - lStartPos = -1; + nStartPos = -1; } } @@ -1009,15 +1004,19 @@ RTLFUNC(InStrRev) bTextMode = 1;; } if ( nArgCount == 4 ) + { bTextMode = rPar.Get(4)->GetInteger(); + } + sal_Int32 nStrLen = aStr1.getLength(); + if( nStartPos == -1 ) + { + nStartPos = nStrLen; + } - sal_uInt16 nStrLen = aStr1.Len(); - sal_uInt16 nStartPos = lStartPos == -1 ? nStrLen : (sal_uInt16)lStartPos; - - sal_uInt16 nPos = 0; + sal_Int32 nPos = 0; if( nStartPos <= nStrLen ) { - sal_uInt16 nTokenLen = aToken.Len(); + sal_Int32 nTokenLen = aToken.getLength(); if( !nTokenLen ) { // Always find empty string @@ -1027,27 +1026,14 @@ RTLFUNC(InStrRev) { if( !bTextMode ) { - ::rtl::OUString aOUStr1 ( aStr1 ); - ::rtl::OUString aOUToken( aToken ); - sal_Int32 nRet = aOUStr1.lastIndexOf( aOUToken, nStartPos ); - if( nRet == -1 ) - nPos = 0; - else - nPos = (sal_uInt16)nRet + 1; + nPos = aStr1.lastIndexOf( aToken, nStartPos ) + 1; } else { - aStr1.ToUpperAscii(); - aToken.ToUpperAscii(); - - ::rtl::OUString aOUStr1 ( aStr1 ); - ::rtl::OUString aOUToken( aToken ); - sal_Int32 nRet = aOUStr1.lastIndexOf( aOUToken, nStartPos ); + aStr1 = aStr1.toAsciiUpperCase(); + aToken = aToken.toAsciiUpperCase(); - if( nRet == -1 ) - nPos = 0; - else - nPos = (sal_uInt16)nRet + 1; + nPos = aStr1.lastIndexOf( aToken, nStartPos ) + 1; } } } @@ -1117,7 +1103,7 @@ RTLFUNC(LCase) else { const CharClass& rCharClass = GetCharClass(); - String aStr( rPar.Get(1)->GetString() ); + OUString aStr( rPar.Get(1)->GetOUString() ); aStr = rCharClass.lowercase(aStr); rPar.Get(0)->PutString( aStr ); } @@ -1134,18 +1120,18 @@ RTLFUNC(Left) } else { - String aStr( rPar.Get(1)->GetString() ); - sal_Int32 lResultLen = rPar.Get(2)->GetLong(); - if( lResultLen > 0xffff ) + OUString aStr( rPar.Get(1)->GetOUString() ); + sal_Int32 nResultLen = rPar.Get(2)->GetLong(); + if( nResultLen < 0 ) { - lResultLen = 0xffff; + nResultLen = 0; + StarBASIC::Error( SbERR_BAD_ARGUMENT ); } - else if( lResultLen < 0 ) + else if(nResultLen > aStr.getLength()) { - lResultLen = 0; - StarBASIC::Error( SbERR_BAD_ARGUMENT ); + nResultLen = aStr.getLength(); } - aStr.Erase( (sal_uInt16)lResultLen ); + aStr = aStr.copy(0, nResultLen ); rPar.Get(0)->PutString( aStr ); } } @@ -1199,7 +1185,7 @@ RTLFUNC(Mid) (void)pBasic; (void)bWrite; - sal_uIntPtr nArgCount = rPar.Count()-1; + int nArgCount = rPar.Count()-1; if ( nArgCount < 2 ) { StarBASIC::Error( SbERR_BAD_ARGUMENT ); @@ -1211,41 +1197,46 @@ RTLFUNC(Mid) // In contrast to the original the third parameter (nLength) // can't be left out here. That's considered in bWrite already. if( nArgCount == 4 ) + { bWrite = sal_True; - - String aArgStr = rPar.Get(1)->GetString(); - sal_uInt16 nStartPos = (sal_uInt16)(rPar.Get(2)->GetLong() ); + } + OUString aArgStr = rPar.Get(1)->GetOUString(); + sal_Int32 nStartPos = rPar.Get(2)->GetLong(); if ( nStartPos == 0 ) + { StarBASIC::Error( SbERR_BAD_ARGUMENT ); + } else { nStartPos--; - sal_uInt16 nLen = 0xffff; + sal_Int32 nLen = -1; bool bWriteNoLenParam = false; if ( nArgCount == 3 || bWrite ) { sal_Int32 n = rPar.Get(3)->GetLong(); if( bWrite && n == -1 ) + { bWriteNoLenParam = true; - nLen = (sal_uInt16)n; + } + nLen = n; } - String aResultStr; if ( bWrite ) { + OUStringBuffer aResultStr; SbiInstance* pInst = GetSbData()->pInst; bool bCompatibility = ( pInst && pInst->IsCompatibility() ); if( bCompatibility ) { - sal_uInt16 nArgLen = aArgStr.Len(); + sal_Int32 nArgLen = aArgStr.getLength(); if( nStartPos + 1 > nArgLen ) { StarBASIC::Error( SbERR_BAD_ARGUMENT ); return; } - String aReplaceStr = rPar.Get(4)->GetString(); - sal_uInt16 nReplaceStrLen = aReplaceStr.Len(); - sal_uInt16 nReplaceLen; + OUString aReplaceStr = rPar.Get(4)->GetOUString(); + sal_Int32 nReplaceStrLen = aReplaceStr.getLength(); + sal_Int32 nReplaceLen; if( bWriteNoLenParam ) { nReplaceLen = nReplaceStrLen; @@ -1253,31 +1244,35 @@ RTLFUNC(Mid) else { nReplaceLen = nLen; - if( nReplaceLen > nReplaceStrLen ) + if( nReplaceLen < 0 || nReplaceLen > nReplaceStrLen ) + { nReplaceLen = nReplaceStrLen; + } } - sal_uInt16 nReplaceEndPos = nStartPos + nReplaceLen; + sal_Int32 nReplaceEndPos = nStartPos + nReplaceLen; if( nReplaceEndPos > nArgLen ) + { nReplaceLen -= (nReplaceEndPos - nArgLen); - + } aResultStr = aArgStr; - sal_uInt16 nErase = nReplaceLen; - aResultStr.Erase( nStartPos, nErase ); - aResultStr.Insert( aReplaceStr, 0, nReplaceLen, nStartPos ); + sal_Int32 nErase = nReplaceLen; + aResultStr.remove( nStartPos, nErase ); + aResultStr.insert( nStartPos, aReplaceStr.getStr(), nReplaceLen); } else { aResultStr = aArgStr; - aResultStr.Erase( nStartPos, nLen ); - aResultStr.Insert(rPar.Get(4)->GetString(),0,nLen,nStartPos); + aResultStr.remove( nStartPos, nLen ); + aResultStr.insert( nStartPos, rPar.Get(4)->GetOUString().getStr(), nLen); } - rPar.Get(1)->PutString( aResultStr ); + rPar.Get(1)->PutString( aResultStr.makeStringAndClear() ); } else { - aResultStr = aArgStr.Copy( nStartPos, nLen ); + OUString aResultStr; + aResultStr = aArgStr.copy( nStartPos, nLen ); rPar.Get(0)->PutString( aResultStr ); } } @@ -1323,9 +1318,9 @@ RTLFUNC(Replace) } else { - String aExpStr = rPar.Get(1)->GetString(); - String aFindStr = rPar.Get(2)->GetString(); - String aReplaceStr = rPar.Get(3)->GetString(); + OUString aExpStr = rPar.Get(1)->GetOUString(); + OUString aFindStr = rPar.Get(2)->GetOUString(); + OUString aReplaceStr = rPar.Get(3)->GetOUString(); sal_Int32 lStartPos = 1; if ( nArgCount >= 4 ) @@ -1334,7 +1329,7 @@ RTLFUNC(Replace) { lStartPos = rPar.Get(4)->GetLong(); } - if( lStartPos < 1 || lStartPos > 0xffff ) + if( lStartPos < 1) { StarBASIC::Error( SbERR_BAD_ARGUMENT ); lStartPos = 1; @@ -1348,7 +1343,7 @@ RTLFUNC(Replace) { lCount = rPar.Get(5)->GetLong(); } - if( lCount < -1 || lCount > 0xffff ) + if( lCount < -1) { StarBASIC::Error( SbERR_BAD_ARGUMENT ); lCount = -1; @@ -1368,28 +1363,29 @@ RTLFUNC(Replace) bTextMode = 1; } if ( nArgCount == 6 ) + { bTextMode = rPar.Get(6)->GetInteger(); - - sal_uInt16 nExpStrLen = aExpStr.Len(); - sal_uInt16 nFindStrLen = aFindStr.Len(); - sal_uInt16 nReplaceStrLen = aReplaceStr.Len(); + } + sal_Int32 nExpStrLen = aExpStr.getLength(); + sal_Int32 nFindStrLen = aFindStr.getLength(); + sal_Int32 nReplaceStrLen = aReplaceStr.getLength(); if( lStartPos <= nExpStrLen ) { - sal_uInt16 nPos = static_cast<sal_uInt16>( lStartPos - 1 ); - sal_uInt16 nCounts = 0; + sal_Int32 nPos = lStartPos - 1; + sal_Int32 nCounts = 0; while( lCount == -1 || lCount > nCounts ) { - String aSrcStr( aExpStr ); + OUString aSrcStr( aExpStr ); if( bTextMode ) { - aSrcStr.ToUpperAscii(); - aFindStr.ToUpperAscii(); + aSrcStr = aSrcStr.toAsciiUpperCase(); + aFindStr = aFindStr.toAsciiUpperCase(); } - nPos = aSrcStr.Search( aFindStr, nPos ); - if( nPos != STRING_NOTFOUND ) + nPos = aSrcStr.indexOf( aFindStr, nPos ); + if( nPos >= 0 ) { - aExpStr.Replace( nPos, nFindStrLen, aReplaceStr ); + aExpStr = aExpStr.replaceAt( nPos, nFindStrLen, aReplaceStr ); nPos = nPos - nFindStrLen + nReplaceStrLen + 1; nCounts++; } @@ -1399,7 +1395,7 @@ RTLFUNC(Replace) } } } - rPar.Get(0)->PutString( aExpStr.Copy( static_cast<sal_uInt16>(lStartPos - 1) ) ); + rPar.Get(0)->PutString( aExpStr.copy( lStartPos - 1 ) ); } } @@ -1491,7 +1487,7 @@ RTLFUNC(Space) } else { - rtl::OUStringBuffer aBuf; + OUStringBuffer aBuf; string::padToLength(aBuf, rPar.Get(1)->GetLong(), ' '); rPar.Get(0)->PutString(aBuf.makeStringAndClear()); } @@ -1508,7 +1504,7 @@ RTLFUNC(Spc) } else { - rtl::OUStringBuffer aBuf; + OUStringBuffer aBuf; string::padToLength(aBuf, rPar.Get(1)->GetLong(), ' '); rPar.Get(0)->PutString(aBuf.makeStringAndClear()); } @@ -1548,7 +1544,8 @@ RTLFUNC(Str) } else { - String aStr; + OUString aStr; + OUString aStrNew(""); SbxVariableRef pArg = rPar.Get( 1 ); pArg->Format( aStr ); @@ -1556,34 +1553,47 @@ RTLFUNC(Str) if( pArg->IsNumericRTL() ) { // replace commas by points so that it's symmetric to Val! - aStr.SearchAndReplace( ',', '.' ); + aStr = aStr.replaceFirst( ",", "." ); SbiInstance* pInst = GetSbData()->pInst; bool bCompatibility = ( pInst && pInst->IsCompatibility() ); if( bCompatibility ) { - xub_StrLen nLen = aStr.Len(); + sal_Int32 nLen = aStr.getLength(); - const sal_Unicode* pBuf = aStr.GetBuffer(); + const sal_Unicode* pBuf = aStr.getStr(); bool bNeg = ( pBuf[0] == '-' ); - sal_uInt16 iZeroSearch = 0; + sal_Int32 iZeroSearch = 0; if( bNeg ) + { + aStrNew += "-"; iZeroSearch++; - - sal_uInt16 iNext = iZeroSearch + 1; + } + else + { + if( pBuf[0] != ' ' ) + { + aStrNew += " "; + } + } + sal_Int32 iNext = iZeroSearch + 1; if( pBuf[iZeroSearch] == '0' && nLen > iNext && pBuf[iNext] == '.' ) { - aStr.Erase( iZeroSearch, 1 ); - pBuf = aStr.GetBuffer(); + iZeroSearch += 1; } - if( !bNeg ) - aStr.Insert( ' ', 0 ); + aStrNew += aStr.copy(iZeroSearch); } else - aStr.Insert( ' ', 0 ); + { + aStrNew = " " + aStr; + } } - rPar.Get(0)->PutString( aStr ); + else + { + aStrNew = aStr; + } + rPar.Get(0)->PutString( aStrNew ); } } @@ -1598,8 +1608,8 @@ RTLFUNC(StrComp) rPar.Get(0)->PutEmpty(); return; } - const String& rStr1 = rPar.Get(1)->GetString(); - const String& rStr2 = rPar.Get(2)->GetString(); + const OUString& rStr1 = rPar.Get(1)->GetOUString(); + const OUString& rStr2 = rPar.Get(2)->GetOUString(); SbiInstance* pInst = GetSbData()->pInst; sal_Int16 nTextCompare; @@ -1617,9 +1627,9 @@ RTLFUNC(StrComp) nTextCompare = rPar.Get(3)->GetInteger(); if( !bCompatibility ) + { nTextCompare = !nTextCompare; - - StringCompare aResult; + } sal_Int32 nRetValue = 0; if( nTextCompare ) { @@ -1640,13 +1650,17 @@ RTLFUNC(StrComp) } else { - aResult = rStr1.CompareTo( rStr2 ); - if ( aResult == COMPARE_LESS ) + sal_Int32 aResult; + aResult = rStr1.compareTo( rStr2 ); + if ( aResult < 0 ) + { nRetValue = -1; - else if ( aResult == COMPARE_GREATER ) + } + else if ( aResult > 0) + { nRetValue = 1; + } } - rPar.Get(0)->PutInteger( sal::static_int_cast< sal_Int16 >( nRetValue ) ); } @@ -1664,17 +1678,20 @@ RTLFUNC(String) sal_Unicode aFiller; sal_Int32 lCount = rPar.Get(1)->GetLong(); if( lCount < 0 || lCount > 0xffff ) + { StarBASIC::Error( SbERR_BAD_ARGUMENT ); - sal_uInt16 nCount = (sal_uInt16)lCount; + } if( rPar.Get(2)->GetType() == SbxINTEGER ) + { aFiller = (sal_Unicode)rPar.Get(2)->GetInteger(); + } else { - const String& rStr = rPar.Get(2)->GetString(); - aFiller = rStr.GetBuffer()[0]; + const OUString& rStr = rPar.Get(2)->GetOUString(); + aFiller = rStr[0]; } - rtl::OUStringBuffer aBuf; - string::padToLength(aBuf, nCount, aFiller); + OUStringBuffer aBuf(lCount); + string::padToLength(aBuf, lCount, aFiller); rPar.Get(0)->PutString(aBuf.makeStringAndClear()); } } @@ -1707,7 +1724,7 @@ RTLFUNC(UCase) else { const CharClass& rCharClass = GetCharClass(); - String aStr( rPar.Get(1)->GetString() ); + OUString aStr( rPar.Get(1)->GetOUString() ); aStr = rCharClass.uppercase( aStr ); rPar.Get(0)->PutString( aStr ); } @@ -1728,13 +1745,13 @@ RTLFUNC(Val) double nResult = 0.0; char* pEndPtr; - String aStr( rPar.Get(1)->GetString() ); + OUString aStr( rPar.Get(1)->GetOUString() ); FilterWhiteSpace( aStr ); - if ( aStr.GetBuffer()[0] == '&' && aStr.Len() > 1 ) + if ( aStr[0] == '&' && aStr.getLength() > 1 ) { int nRadix = 10; - char aChar = (char)aStr.GetBuffer()[1]; + char aChar = (char)aStr[1]; if ( aChar == 'h' || aChar == 'H' ) { nRadix = 16; @@ -1745,7 +1762,7 @@ RTLFUNC(Val) } if ( nRadix != 10 ) { - rtl::OString aByteStr(rtl::OUStringToOString(aStr, osl_getThreadTextEncoding())); + OString aByteStr(rtl::OUStringToOString(aStr, osl_getThreadTextEncoding())); sal_Int16 nlResult = (sal_Int16)strtol( aByteStr.getStr()+2, &pEndPtr, nRadix); nResult = (double)nlResult; } @@ -1807,7 +1824,7 @@ RTLFUNC(CDateToIso) implGetDateYear( aDate ), implGetDateMonth( aDate ), implGetDateDay( aDate ) ); - String aRetStr = rtl::OUString::createFromAscii( Buffer ); + OUString aRetStr = rtl::OUString::createFromAscii( Buffer ); rPar.Get(0)->PutString( aRetStr ); } else @@ -1824,15 +1841,15 @@ RTLFUNC(CDateFromIso) if ( rPar.Count() == 2 ) { - String aStr = rPar.Get(1)->GetString(); - sal_Int16 iMonthStart = aStr.Len() - 4; - String aYearStr = aStr.Copy( 0, iMonthStart ); - String aMonthStr = aStr.Copy( iMonthStart, 2 ); - String aDayStr = aStr.Copy( iMonthStart+2, 2 ); + OUString aStr = rPar.Get(1)->GetOUString(); + sal_Int16 iMonthStart = aStr.getLength() - 4; + OUString aYearStr = aStr.copy( 0, iMonthStart ); + OUString aMonthStr = aStr.copy( iMonthStart, 2 ); + OUString aDayStr = aStr.copy( iMonthStart+2, 2 ); double dDate; - if( implDateSerial( (sal_Int16)aYearStr.ToInt32(), - (sal_Int16)aMonthStr.ToInt32(), (sal_Int16)aDayStr.ToInt32(), dDate ) ) + if( implDateSerial( (sal_Int16)aYearStr.toInt32(), + (sal_Int16)aMonthStr.toInt32(), (sal_Int16)aDayStr.toInt32(), dDate ) ) { rPar.Get(0)->PutDate( dDate ); } @@ -1922,7 +1939,7 @@ RTLFUNC(DateValue) sal_uInt32 nIndex; double fResult; - String aStr( rPar.Get(1)->GetString() ); + OUString aStr( rPar.Get(1)->GetOUString() ); sal_Bool bSuccess = pFormatter->IsNumberFormat( aStr, nIndex, fResult ); short nType = pFormatter->GetType( nIndex ); @@ -1991,7 +2008,7 @@ RTLFUNC(TimeValue) sal_uInt32 nIndex; double fResult; - sal_Bool bSuccess = pFormatter->IsNumberFormat( rPar.Get(1)->GetString(), + sal_Bool bSuccess = pFormatter->IsNumberFormat( rPar.Get(1)->GetOUString(), nIndex, fResult ); short nType = pFormatter->GetType(nIndex); if(bSuccess && (nType==NUMBERFORMAT_TIME||nType==NUMBERFORMAT_DATETIME)) @@ -2180,13 +2197,13 @@ RTLFUNC(Time) { Time aTime( Time::SYSTEM ); SbxVariable* pMeth = rPar.Get( 0 ); - String aRes; + OUString aRes; if( pMeth->IsFixed() ) { // Time$: hh:mm:ss char buf[ 20 ]; snprintf( buf, sizeof(buf), "%02d:%02d:%02d", - aTime.GetHour(), aTime.GetMin(), aTime.GetSec() ); + aTime.GetHour(), aTime.GetMin(), aTime.GetSec() ); aRes = rtl::OUString::createFromAscii( buf ); } else @@ -2253,7 +2270,7 @@ RTLFUNC(Date) SbxVariable* pMeth = rPar.Get( 0 ); if( pMeth->IsString() ) { - String aRes; + OUString aRes; Color* pCol; SvNumberFormatter* pFormatter = NULL; @@ -2496,7 +2513,7 @@ RTLFUNC(IsMissing) } // Function looks for wildcards, removes them and always returns the pure path -String implSetupWildcard( const String& rFileParam, SbiRTLData* pRTLData ) +OUString implSetupWildcard( const OUString& rFileParam, SbiRTLData* pRTLData ) { static sal_Char cDelim1 = (sal_Char)'/'; static sal_Char cDelim2 = (sal_Char)'\\'; @@ -2505,47 +2522,54 @@ String implSetupWildcard( const String& rFileParam, SbiRTLData* pRTLData ) delete pRTLData->pWildCard; pRTLData->pWildCard = NULL; - pRTLData->sFullNameToBeChecked = String(); - - String aFileParam = rFileParam; - xub_StrLen nLastWild = aFileParam.SearchBackward( cWild1 ); - if( nLastWild == STRING_NOTFOUND ) - nLastWild = aFileParam.SearchBackward( cWild2 ); - bool bHasWildcards = ( nLastWild != STRING_NOTFOUND ); + pRTLData->sFullNameToBeChecked = OUString(); + OUString aFileParam = rFileParam; + sal_Int32 nLastWild = aFileParam.lastIndexOf( cWild1 ); + if( nLastWild < 0 ) + { + nLastWild = aFileParam.lastIndexOf( cWild2 ); + } + bool bHasWildcards = ( nLastWild >= 0 ); - xub_StrLen nLastDelim = aFileParam.SearchBackward( cDelim1 ); - if( nLastDelim == STRING_NOTFOUND ) - nLastDelim = aFileParam.SearchBackward( cDelim2 ); + sal_Int32 nLastDelim = aFileParam.lastIndexOf( cDelim1 ); + if( nLastDelim < 0 ) + { + nLastDelim = aFileParam.lastIndexOf( cDelim2 ); + } if( bHasWildcards ) { // Wildcards in path? - if( nLastDelim != STRING_NOTFOUND && nLastDelim > nLastWild ) + if( nLastDelim >= 0 && nLastDelim > nLastWild ) + { return aFileParam; + } } else { - String aPathStr = getFullPath( aFileParam ); - if( nLastDelim != aFileParam.Len() - 1 ) + OUString aPathStr = getFullPath( aFileParam ); + if( nLastDelim != aFileParam.getLength() - 1 ) + { pRTLData->sFullNameToBeChecked = aPathStr; + } return aPathStr; } - rtl::OUString aPureFileName; - if( nLastDelim == STRING_NOTFOUND ) + OUString aPureFileName; + if( nLastDelim < 0 ) { aPureFileName = aFileParam; - aFileParam = String(); + aFileParam = OUString(); } else { - aPureFileName = aFileParam.Copy( nLastDelim + 1 ); - aFileParam = aFileParam.Copy( 0, nLastDelim ); + aPureFileName = aFileParam.copy( nLastDelim + 1 ); + aFileParam = aFileParam.copy( 0, nLastDelim ); } // Try again to get a valid URL/UNC-path with only the path - String aPathStr = getFullPath( aFileParam ); + OUString aPathStr = getFullPath( aFileParam ); // Is there a pure file name left? Otherwise the path is // invalid anyway because it was not accepted by OSL before @@ -2556,7 +2580,7 @@ String implSetupWildcard( const String& rFileParam, SbiRTLData* pRTLData ) return aPathStr; } -inline sal_Bool implCheckWildcard( const String& rName, SbiRTLData* pRTLData ) +inline sal_Bool implCheckWildcard( const OUString& rName, SbiRTLData* pRTLData ) { sal_Bool bMatch = sal_True; @@ -2568,7 +2592,7 @@ inline sal_Bool implCheckWildcard( const String& rName, SbiRTLData* pRTLData ) } -bool isRootDir( String aDirURLStr ) +bool isRootDir( OUString aDirURLStr ) { INetURLObject aDirURLObj( aDirURLStr ); bool bRoot = false; @@ -2604,7 +2628,7 @@ RTLFUNC(Dir) (void)pBasic; (void)bWrite; - String aPath; + OUString aPath; sal_uInt16 nParCount = rPar.Count(); if( nParCount > 3 ) @@ -2628,21 +2652,21 @@ RTLFUNC(Dir) { if ( nParCount >= 2 ) { - String aFileParam = rPar.Get(1)->GetString(); + OUString aFileParam = rPar.Get(1)->GetOUString(); - String aFileURLStr = implSetupWildcard( aFileParam, pRTLData ); - if( pRTLData->sFullNameToBeChecked.Len() > 0 ) + OUString aFileURLStr = implSetupWildcard( aFileParam, pRTLData ); + if( !pRTLData->sFullNameToBeChecked.isEmpty()) { sal_Bool bExists = sal_False; try { bExists = xSFI->exists( aFileURLStr ); } catch(const Exception & ) {} - String aNameOnlyStr; + OUString aNameOnlyStr; if( bExists ) { INetURLObject aFileURL( aFileURLStr ); aNameOnlyStr = aFileURL.getName( INetURLObject::LAST_SEGMENT, - true, INetURLObject::DECODE_WITH_CHARSET ); + true, INetURLObject::DECODE_WITH_CHARSET ); } rPar.Get(0)->PutString( aNameOnlyStr ); return; @@ -2650,7 +2674,7 @@ RTLFUNC(Dir) try { - String aDirURLStr; + OUString aDirURLStr; sal_Bool bFolder = xSFI->isFolder( aFileURLStr ); if( bFolder ) @@ -2659,7 +2683,7 @@ RTLFUNC(Dir) } else { - String aEmptyStr; + OUString aEmptyStr; rPar.Get(0)->PutString( aEmptyStr ); } @@ -2721,7 +2745,7 @@ RTLFUNC(Dir) else if( pRTLData->nCurDirPos >= pRTLData->aDirSeq.getLength() ) { pRTLData->aDirSeq.realloc( 0 ); - aPath.Erase(); + aPath = ""; break; } else @@ -2773,9 +2797,9 @@ RTLFUNC(Dir) // TODO: OSL if ( nParCount >= 2 ) { - String aFileParam = rPar.Get(1)->GetString(); + OUString aFileParam = rPar.Get(1)->GetOUString(); - String aDirURL = implSetupWildcard( aFileParam, pRTLData ); + OUString aDirURL = implSetupWildcard( aFileParam, pRTLData ); sal_uInt16 nFlags = 0; if ( nParCount > 2 ) @@ -2795,7 +2819,7 @@ RTLFUNC(Dir) { delete pRTLData->pDir; pRTLData->pDir = NULL; - rPar.Get(0)->PutString( String() ); + rPar.Get(0)->PutString( OUString() ); return; } @@ -2842,7 +2866,7 @@ RTLFUNC(Dir) { delete pRTLData->pDir; pRTLData->pDir = NULL; - aPath.Erase(); + aPath = ""; break; } @@ -2892,12 +2916,12 @@ RTLFUNC(GetAttr) #if defined( WNT ) if( SbiRuntime::isVBAEnabled() ) { - DirEntry aEntry( rPar.Get(1)->GetString() ); + DirEntry aEntry( rPar.Get(1)->GetOUString() ); aEntry.ToAbs(); // #57064 extract the real-path for virtual URLs - rtl::OString aByteStrFullPath(rtl::OUStringToOString(aEntry.GetFull(), - osl_getThreadTextEncoding())); + OString aByteStrFullPath(rtl::OUStringToOString(aEntry.GetFull(), + osl_getThreadTextEncoding())); DWORD nRealFlags = GetFileAttributes (aByteStrFullPath.getStr()); if (nRealFlags != 0xffffffff) { @@ -2924,7 +2948,7 @@ RTLFUNC(GetAttr) { try { - String aPath = getFullPath( rPar.Get(1)->GetString() ); + OUString aPath = getFullPath( rPar.Get(1)->GetOUString() ); sal_Bool bExists = sal_False; try { bExists = xSFI->exists( aPath ); } catch(const Exception & ) {} @@ -2959,7 +2983,7 @@ RTLFUNC(GetAttr) else { DirectoryItem aItem; - DirectoryItem::get( getFullPathUNC( rPar.Get(1)->GetString() ), aItem ); + DirectoryItem::get( getFullPathUNC( rPar.Get(1)->GetOUString() ), aItem ); FileStatus aFileStatus( osl_FileStatus_Mask_Attributes | osl_FileStatus_Mask_Type ); aItem.getFileStatus( aFileStatus ); sal_uInt64 nAttributes = aFileStatus.getAttributes(); @@ -2996,7 +3020,7 @@ RTLFUNC(FileDateTime) } else { - String aPath = rPar.Get(1)->GetString(); + OUString aPath = rPar.Get(1)->GetOUString(); Time aTime( Time::EMPTY ); Date aDate( Date::EMPTY ); if( hasUno() ) @@ -3053,7 +3077,7 @@ RTLFUNC(FileDateTime) SbiInstance::PrepareNumberFormatter( pFormatter, n, n, nIndex ); } - String aRes; + OUString aRes; pFormatter->GetOutputString( fSerial, nIndex, aRes, &pCol ); rPar.Get(0)->PutString( aRes ); @@ -3281,14 +3305,14 @@ RTLFUNC(Format) } else { - String aResult; + OUString aResult; if( nArgCount == 2 ) { rPar.Get(1)->Format( aResult ); } else { - String aFmt( rPar.Get(2)->GetString() ); + OUString aFmt( rPar.Get(2)->GetOUString() ); rPar.Get(1)->Format( aResult, &aFmt ); } rPar.Get(0)->PutString( aResult ); @@ -3365,64 +3389,66 @@ RTLFUNC(Shell) { oslProcessOption nOptions = osl_Process_SEARCHPATH | osl_Process_DETACHED; - String aCmdLine = rPar.Get(1)->GetString(); + OUString aCmdLine = rPar.Get(1)->GetOUString(); // attach additional parameters - everything must be parsed anyway if( nArgCount >= 4 ) { - aCmdLine.AppendAscii( " " ); - aCmdLine += rPar.Get(3)->GetString(); + aCmdLine += " "; + aCmdLine += rPar.Get(3)->GetOUString(); } - else if( !aCmdLine.Len() ) + else if( aCmdLine.isEmpty() ) { // avaoid special treatment (empty list) - aCmdLine.AppendAscii( " " ); + aCmdLine += " "; } - sal_uInt16 nLen = aCmdLine.Len(); + sal_Int32 nLen = aCmdLine.getLength(); // #55735 if there are parameters, they have to be seperated // #72471 also seperate the single parameters std::list<String> aTokenList; - String aToken; - sal_uInt16 i = 0; + OUString aToken; + sal_Int32 i = 0; sal_Unicode c; while( i < nLen ) { for ( ;; ++i ) { - c = aCmdLine.GetBuffer()[ i ]; + c = aCmdLine[ i ]; if ( c != ' ' && c != '\t' ) + { break; + } } if( c == '\"' || c == '\'' ) { - sal_uInt16 iFoundPos = aCmdLine.Search( c, i + 1 ); + sal_Int32 iFoundPos = aCmdLine.indexOf( c, i + 1 ); - if( iFoundPos == STRING_NOTFOUND ) + if( iFoundPos < 0 ) { - aToken = aCmdLine.Copy( i, STRING_LEN ); + aToken = aCmdLine.copy( i); i = nLen; } else { - aToken = aCmdLine.Copy( i + 1, (iFoundPos - i - 1) ); + aToken = aCmdLine.copy( i + 1, (iFoundPos - i - 1) ); i = iFoundPos + 1; } } else { - sal_uInt16 iFoundSpacePos = aCmdLine.Search( ' ', i ); - sal_uInt16 iFoundTabPos = aCmdLine.Search( '\t', i ); - sal_uInt16 iFoundPos = Min( iFoundSpacePos, iFoundTabPos ); + sal_Int32 iFoundSpacePos = aCmdLine.indexOf( ' ', i ); + sal_Int32 iFoundTabPos = aCmdLine.indexOf( '\t', i ); + sal_Int32 iFoundPos = iFoundSpacePos >= 0 ? iFoundTabPos >= 0 ? Min( iFoundSpacePos, iFoundTabPos ) : iFoundSpacePos : -1; - if( iFoundPos == STRING_NOTFOUND ) + if( iFoundPos < 0 ) { - aToken = aCmdLine.Copy( i, STRING_LEN ); + aToken = aCmdLine.copy( i ); i = nLen; } else { - aToken = aCmdLine.Copy( i, (iFoundPos - i) ); + aToken = aCmdLine.copy( i, (iFoundPos - i) ); i = iFoundPos; } } @@ -3462,22 +3488,21 @@ RTLFUNC(Shell) // #72471 work parameter(s) up std::list<String>::const_iterator iter = aTokenList.begin(); - const String& rStr = *iter; - ::rtl::OUString aOUStrProg( rStr.GetBuffer(), rStr.Len() ); - ::rtl::OUString aOUStrProgUNC = getFullPathUNC( aOUStrProg ); + const OUString& rStr = *iter; + OUString aOUStrProg( rStr.getStr(), rStr.getLength() ); + OUString aOUStrProgUNC = getFullPathUNC( aOUStrProg ); ++iter; - sal_uInt16 nParamCount = sal::static_int_cast< sal_uInt16 >( - aTokenList.size() - 1 ); + sal_uInt16 nParamCount = sal::static_int_cast< sal_uInt16 >(aTokenList.size() - 1 ); rtl_uString** pParamList = NULL; if( nParamCount ) { pParamList = new rtl_uString*[nParamCount]; for(int iList = 0; iter != aTokenList.end(); ++iList, ++iter) { - const String& rParamStr = (*iter); - const ::rtl::OUString aTempStr( rParamStr.GetBuffer(), rParamStr.Len()); + const OUString& rParamStr = (*iter); + const OUString aTempStr( rParamStr.getStr(), rParamStr.getLength()); pParamList[iList] = NULL; rtl_uString_assign(&(pParamList[iList]), aTempStr.pData); } @@ -3530,7 +3555,7 @@ RTLFUNC(VarType) } // Exported function -rtl::OUString getBasicTypeName( SbxDataType eType ) +OUString getBasicTypeName( SbxDataType eType ) { static const char* pTypeNames[] = { @@ -3590,7 +3615,9 @@ String getObjectTypeName( SbxVariable* pVar ) { SbxBase* pObj = pVar->GetObject(); if( !pObj ) - sRet = String( RTL_CONSTASCII_USTRINGPARAM("Nothing") ); + { + sRet = OUString("Nothing"); + } else { SbUnoObject* pUnoObj = PTR_CAST(SbUnoObject,pVar ); @@ -3662,7 +3689,7 @@ RTLFUNC(TypeName) SbxDataType eType = rPar.Get(1)->GetType(); bool bIsArray = ( ( eType & SbxARRAY ) != 0 ); - String aRetStr; + OUString aRetStr; if ( SbiRuntime::isVBAEnabled() && eType == SbxOBJECT ) { aRetStr = getObjectTypeName( rPar.Get(1) ); @@ -3672,7 +3699,9 @@ RTLFUNC(TypeName) aRetStr = getBasicTypeName( eType ); } if( bIsArray ) - aRetStr.AppendAscii( "()" ); + { + aRetStr += "()"; + } rPar.Get(0)->PutString( aRetStr ); } } @@ -3688,8 +3717,8 @@ RTLFUNC(Len) } else { - const String& rStr = rPar.Get(1)->GetString(); - rPar.Get(0)->PutLong( (sal_Int32)rStr.Len() ); + const OUString& rStr = rPar.Get(1)->GetOUString(); + rPar.Get(0)->PutLong( rStr.getLength() ); } } @@ -3711,8 +3740,8 @@ RTLFUNC(DDEInitiate) StarBASIC::Error( SbERR_BAD_ARGUMENT ); return; } - const OUString& rApp = rPar.Get(1)->GetString(); - const OUString& rTopic = rPar.Get(2)->GetString(); + const OUString& rApp = rPar.Get(1)->GetOUString(); + const OUString& rTopic = rPar.Get(2)->GetOUString(); SbiDdeControl* pDDE = GetSbData()->pInst->GetDdeControl(); size_t nChannel; @@ -3802,7 +3831,7 @@ RTLFUNC(DDERequest) return; } size_t nChannel = rPar.Get(1)->GetInteger(); - const OUString& rItem = rPar.Get(2)->GetString(); + const OUString& rItem = rPar.Get(2)->GetOUString(); SbiDdeControl* pDDE = GetSbData()->pInst->GetDdeControl(); OUString aResult; SbError nDdeErr = pDDE->Request( nChannel, rItem, aResult ); @@ -3836,7 +3865,7 @@ RTLFUNC(DDEExecute) return; } size_t nChannel = rPar.Get(1)->GetInteger(); - const OUString& rCommand = rPar.Get(2)->GetString(); + const OUString& rCommand = rPar.Get(2)->GetOUString(); SbiDdeControl* pDDE = GetSbData()->pInst->GetDdeControl(); SbError nDdeErr = pDDE->Execute( nChannel, rCommand ); if( nDdeErr ) @@ -3865,8 +3894,8 @@ RTLFUNC(DDEPoke) return; } size_t nChannel = rPar.Get(1)->GetInteger(); - const OUString& rItem = rPar.Get(2)->GetString(); - const OUString& rData = rPar.Get(3)->GetString(); + const OUString& rItem = rPar.Get(2)->GetOUString(); + const OUString& rData = rPar.Get(3)->GetOUString(); SbiDdeControl* pDDE = GetSbData()->pInst->GetDdeControl(); SbError nDdeErr = pDDE->Poke( nChannel, rItem, rData ); if( nDdeErr ) @@ -4037,12 +4066,12 @@ RTLFUNC(StrConv) return; } - String aOldStr = rPar.Get(1)->GetString(); + OUString aOldStr = rPar.Get(1)->GetOUString(); sal_Int32 nConversion = rPar.Get(2)->GetLong(); sal_uInt16 nLanguage = LANGUAGE_SYSTEM; - sal_uInt16 nOldLen = aOldStr.Len(); + sal_Int32 nOldLen = aOldStr.getLength(); if( nOldLen == 0 ) { // null string,return @@ -4054,7 +4083,7 @@ RTLFUNC(StrConv) if ( (nConversion & 0x03) == 3 ) // vbProperCase { const CharClass& rCharClass = GetCharClass(); - aOldStr = rCharClass.titlecase( aOldStr.ToLowerAscii(), 0, nOldLen ); + aOldStr = rCharClass.titlecase( aOldStr.toAsciiLowerCase(), 0, nOldLen ); } else if ( (nConversion & 0x01) == 1 ) // vbUpperCase { @@ -4077,9 +4106,10 @@ RTLFUNC(StrConv) nType |= i18n::TransliterationModules_HIRAGANA_KATAKANA; } else if ( (nConversion & 0x20) == 32 ) // vbHiragana + { nType |= i18n::TransliterationModules_KATAKANA_HIRAGANA; - - String aNewStr( aOldStr ); + } + OUString aNewStr( aOldStr ); if( nType != 0 ) { uno::Reference< uno::XComponentContext > xContext = getProcessComponentContext(); @@ -4092,32 +4122,33 @@ RTLFUNC(StrConv) if ( (nConversion & 0x40) == 64 ) // vbUnicode { // convert the string to byte string, preserving unicode (2 bytes per character) - sal_uInt16 nSize = aNewStr.Len()*2; - const sal_Unicode* pSrc = aNewStr.GetBuffer(); + sal_Int32 nSize = aNewStr.getLength()*2; + const sal_Unicode* pSrc = aNewStr.getStr(); sal_Char* pChar = new sal_Char[nSize+1]; - for( sal_uInt16 i=0; i < nSize; i++ ) + for( sal_Int32 i=0; i < nSize; i++ ) { pChar[i] = static_cast< sal_Char >( (i%2) ? ((*pSrc) >> 8) & 0xff : (*pSrc) & 0xff ); if( i%2 ) + { pSrc++; + } } pChar[nSize] = '\0'; ::rtl::OString aOStr(pChar); delete[] pChar; // there is no concept about default codepage in unix. so it is incorrectly in unix - ::rtl::OUString aOUStr = ::rtl::OStringToOUString(aOStr, osl_getThreadTextEncoding()); - aNewStr = String(aOUStr); - rPar.Get(0)->PutString( aNewStr ); + OUString aOUStr = ::rtl::OStringToOUString(aOStr, osl_getThreadTextEncoding()); + rPar.Get(0)->PutString( aOUStr ); return; } else if ( (nConversion & 0x80) == 128 ) // vbFromUnicode { - ::rtl::OUString aOUStr(aNewStr); + OUString aOUStr(aNewStr); // there is no concept about default codepage in unix. so it is incorrectly in unix ::rtl::OString aOStr = ::rtl::OUStringToOString(aNewStr,osl_getThreadTextEncoding()); const sal_Char* pChar = aOStr.getStr(); - sal_uInt16 nArraySize = static_cast< sal_uInt16 >( aOStr.getLength() ); + sal_Int32 nArraySize = aOStr.getLength(); SbxDimArray* pArray = new SbxDimArray(SbxBYTE); bool bIncIndex = (IsBaseIndexOne() && SbiRuntime::isVBAEnabled() ); if(nArraySize) @@ -4136,7 +4167,7 @@ RTLFUNC(StrConv) pArray->unoAddDim( 0, -1 ); } - for( sal_uInt16 i=0; i< nArraySize; i++) + for( sal_Int32 i=0; i< nArraySize; i++) { SbxVariable* pNew = new SbxVariable( SbxBYTE ); pNew->PutByte(*pChar); @@ -4195,8 +4226,7 @@ RTLFUNC(Load) } else if( pObj->IsA( TYPE( SbxObject ) ) ) { - SbxVariable* pVar = ((SbxObject*)pObj)-> - Find( String( RTL_CONSTASCII_USTRINGPARAM("Load") ), SbxCLASS_METHOD ); + SbxVariable* pVar = ((SbxObject*)pObj)->Find( OUString("Load"), SbxCLASS_METHOD ); if( pVar ) { pVar->GetInteger(); @@ -4228,8 +4258,7 @@ RTLFUNC(Unload) } else if( pObj->IsA( TYPE( SbxObject ) ) ) { - SbxVariable* pVar = ((SbxObject*)pObj)-> - Find( String( RTL_CONSTASCII_USTRINGPARAM("Unload") ), SbxCLASS_METHOD ); + SbxVariable* pVar = ((SbxObject*)pObj)->Find( OUString("Unload"), SbxCLASS_METHOD ); if( pVar ) { pVar->GetInteger(); @@ -4249,7 +4278,7 @@ RTLFUNC(LoadPicture) return; } - String aFileURL = getFullPath( rPar.Get(1)->GetString() ); + OUString aFileURL = getFullPath( rPar.Get(1)->GetOUString() ); SvStream* pStream = utl::UcbStreamHelper::CreateStream( aFileURL, STREAM_READ ); if( pStream != NULL ) { @@ -4279,7 +4308,7 @@ RTLFUNC(SavePicture) SbxBase* pObj = (SbxObject*)rPar.Get(1)->GetObject(); if( pObj->IsA( TYPE( SbStdPicture ) ) ) { - SvFileStream aOStream( rPar.Get(2)->GetString(), STREAM_WRITE | STREAM_TRUNC ); + SvFileStream aOStream( rPar.Get(2)->GetOUString(), STREAM_WRITE | STREAM_TRUNC ); Graphic aGraphic = ((SbStdPicture*)pObj)->GetGraphic(); aOStream << aGraphic; } @@ -4371,10 +4400,12 @@ RTLFUNC(MsgBox) } nWinBits |= nWinDefBits; - String aMsg = rPar.Get(1)->GetString(); - String aTitle; + OUString aMsg = rPar.Get(1)->GetOUString(); + OUString aTitle; if( nArgCount >= 4 ) - aTitle = rPar.Get(3)->GetString(); + { + aTitle = rPar.Get(3)->GetOUString(); + } else { aTitle = GetpApp()->GetAppName(); @@ -4431,7 +4462,7 @@ RTLFUNC(SetAttr) rPar.Get(0)->PutEmpty(); if ( rPar.Count() == 3 ) { - String aStr = rPar.Get(1)->GetString(); + OUString aStr = rPar.Get(1)->GetOUString(); sal_Int16 nFlags = rPar.Get(2)->GetInteger(); if( hasUno() ) @@ -4490,8 +4521,10 @@ RTLFUNC(DumpAllObjects) { SbxObject* p = pBasic; while( p->GetParent() ) + { p = p->GetParent(); - SvFileStream aStrm( rPar.Get( 1 )->GetString(), + } + SvFileStream aStrm( rPar.Get( 1 )->GetOUString(), STREAM_WRITE | STREAM_TRUNC ); p->Dump( aStrm, rPar.Get( 2 )->GetBool() ); aStrm.Close(); @@ -4510,7 +4543,7 @@ RTLFUNC(FileExists) if ( rPar.Count() == 2 ) { - String aStr = rPar.Get(1)->GetString(); + OUString aStr = rPar.Get(1)->GetOUString(); sal_Bool bExists = sal_False; if( hasUno() ) @@ -4622,7 +4655,7 @@ RTLFUNC(Partition) } } aRetStr.append( aUpperValue ); - rPar.Get(0)->PutString( String(aRetStr.makeStringAndClear()) ); + rPar.Get(0)->PutString( aRetStr.makeStringAndClear()); } #endif |