blob: 5ea5964f934fb68165f38065f65225c86c3aa835 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
struct RSHEADER_TYPE;
class RscPtrPtr;
#ifndef _RSCTOOLS_HXX
#define _RSCTOOLS_HXX
#ifdef UNX
#include <stdlib.h>
#endif
#include <stdio.h>
#include <tools/string.hxx>
#include <tools/list.hxx>
/******************* T y p e s *******************************************/
// Zeichensatz
enum COMPARE { LESS = -1, EQUAL = 0, GREATER = 1 };
enum RSCBYTEORDER_TYPE { RSC_BIGENDIAN, RSC_LITTLEENDIAN, RSC_SYSTEMENDIAN };
/******************* M A K R O S *****************************************/
#define ALIGNED_SIZE( nSize ) \
(nSize + sizeof( void * ) -1) / sizeof( void * ) * sizeof( void * )
/******************* F u n c t i o n F o r w a r d s *******************/
ByteString GetTmpFileName();
sal_Bool Append( ByteString aDestFile, ByteString aSourceFile );
sal_Bool Append( FILE * fDest, ByteString aSourceFile );
ByteString InputFile ( const char * pInput, const char * pExt );
ByteString OutputFile( ByteString aInput, const char * ext );
char * ResponseFile( RscPtrPtr * ppCmd, char ** ppArgv,
sal_uInt32 nArgc );
void RscExit( sal_uInt32 nExit );
/********* A n s i - F u n c t i o n F o r w a r d s *******************/
int rsc_strnicmp( const char *string1, const char *string2, size_t count );
int rsc_stricmp( const char *string1, const char *string2 );
char* rsc_strdup( const char* );
/****************** C L A S S E S ****************************************/
DECLARE_LIST( RscStrList, ByteString * )
/*********** R s c C h a r ***********************************************/
class RscChar
{
public:
static char * MakeUTF8( char * pStr, sal_uInt16 nTextEncoding );
};
/****************** R s c P t r P t r ************************************/
class RscPtrPtr
{
sal_uInt32 nCount;
void ** pMem;
public:
RscPtrPtr();
~RscPtrPtr();
void Reset();
sal_uInt32 Append( void * );
sal_uInt32 Append( char * pStr ){
return( Append( (void *)pStr ) );
};
sal_uInt32 GetCount(){ return( nCount ); };
void * GetEntry( sal_uInt32 nEle );
void ** GetBlock(){ return( pMem ); };
};
/****************** R s c W r i t e R c **********************************/
class RscWriteRc
{
sal_uInt32 nLen;
sal_Bool bSwap;
RSCBYTEORDER_TYPE nByteOrder;
char * pMem;
char * GetPointer( sal_uInt32 nSize );
public:
RscWriteRc( RSCBYTEORDER_TYPE nOrder = RSC_SYSTEMENDIAN );
~RscWriteRc();
sal_uInt32 IncSize( sal_uInt32 nSize );// gibt die vorherige Groesse
void * GetBuffer()
{
return GetPointer( 0 );
}
sal_uInt16 GetShort( sal_uInt32 nPos )
{
sal_uInt16 nVal = 0;
char* pFrom = GetPointer(nPos);
char* pTo = (char*)&nVal;
*pTo++ = *pFrom++;
*pTo++ = *pFrom++;
return bSwap ? SWAPSHORT( nVal ) : nVal;
}
sal_uInt32 GetLong( sal_uInt32 nPos )
{
sal_uInt32 nVal = 0;
char* pFrom = GetPointer(nPos);
char* pTo = (char*)&nVal;
*pTo++ = *pFrom++;
*pTo++ = *pFrom++;
*pTo++ = *pFrom++;
*pTo++ = *pFrom++;
return bSwap ? SWAPLONG( nVal ) : nVal;
}
char * GetUTF8( sal_uInt32 nPos )
{
return GetPointer( nPos );
}
RSCBYTEORDER_TYPE GetByteOrder() const { return nByteOrder; }
sal_uInt32 Size(){ return( nLen ); };
void Put( sal_uInt64 lVal )
{
union
{
sal_uInt64 lVal64;
sal_uInt32 aVal32[2];
};
lVal64 = lVal;
if( bSwap )
{
Put( aVal32[1] );
Put( aVal32[0] );
}
else
{
Put( aVal32[0] );
Put( aVal32[1] );
}
}
void Put( sal_Int32 lVal )
{
union
{
sal_uInt32 lVal32;
sal_uInt16 aVal16[2];
};
lVal32 = lVal;
if( bSwap )
{
Put( aVal16[1] );
Put( aVal16[0] );
}
else
{
Put( aVal16[0] );
Put( aVal16[1] );
}
}
void Put( sal_uInt32 nValue )
{ Put( (sal_Int32)nValue ); }
void Put( sal_uInt16 nValue );
void Put( sal_Int16 nValue )
{ Put( (sal_uInt16)nValue ); }
void PutUTF8( char * pData );
void PutAt( sal_uInt32 nPos, sal_Int32 lVal )
{
union
{
sal_uInt32 lVal32;
sal_uInt16 aVal16[2];
};
lVal32 = lVal;
if( bSwap )
{
PutAt( nPos, aVal16[1] );
PutAt( nPos + 2, aVal16[0] );
}
else
{
PutAt( nPos, aVal16[0] );
PutAt( nPos + 2, aVal16[1] );
}
}
void PutAt( sal_uInt32 nPos, sal_uInt32 lVal )
{
PutAt( nPos, (sal_Int32)lVal);
}
void PutAt( sal_uInt32 nPos, short nVal )
{
PutAt( nPos, (sal_uInt16)nVal );
}
void PutAt( sal_uInt32 nPos, sal_uInt16 nVal )
{
if( bSwap )
nVal = SWAPSHORT( nVal );
char* pTo = GetPointer( nPos );
char* pFrom = (char*)&nVal;
*pTo++ = *pFrom++;
*pTo++ = *pFrom++;
}
};
#endif // _RSCTOOLS_HXX