gps/GPSResources/tcpmp 0.73/common/palmos/str_palmos.c

140 lines
3.2 KiB
C
Executable File

/*****************************************************************************
*
* This program is free software ; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 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 General Public License for more details.
*
* You should have received a copy of the GNU 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
*
* $Id: str_palmos.c 432 2005-12-28 16:39:13Z picard $
*
* The Core Pocket Media Player
* Copyright (c) 2004-2005 Gabor Kovacs
*
****************************************************************************/
#include "../common.h"
#if defined(TARGET_PALMOS)
#include "pace.h"
void StringAlloc();
void StringFree();
void String_Init()
{
MemHandle Resource;
DmResID Id;
context* p = Context();
StringAlloc();
for (Id=1000;Id<1000+32;++Id)
{
Resource = DmGetResource('lang',Id);
if (Resource)
{
int Size = MemHandleSize(Resource);
void* Data = MemHandleLock(Resource);
if (Size && Data && StringAddBinary(Data,Size))
ArrayAppend(&p->StrModule,&Resource,sizeof(Resource),16);
else
{
if (Data)
MemHandleUnlock(Resource);
DmReleaseResource(Resource);
}
}
}
}
void String_Done()
{
MemHandle *i;
context* p = Context();
StringFree();
for (i=ARRAYBEGIN(p->StrModule,MemHandle);i!=ARRAYEND(p->StrModule,MemHandle);++i)
{
MemHandleUnlock(*i);
DmReleaseResource(*i);
}
ArrayClear(&p->StrModule);
}
void AsciiToTcs(tchar_t* Out,size_t OutLen,const char* In)
{
StrToTcs(Out,OutLen,In);
}
void TcsToAscii(char* Out,size_t OutLen,const tchar_t* In)
{
TcsToStr(Out,OutLen,In);
}
void UTF8ToTcs(tchar_t* Out,size_t OutLen,const char* In)
{
StrToTcs(Out,OutLen,In); //todo: fix
}
void TcsToUTF8(char* Out,size_t OutLen,const tchar_t* In)
{
TcsToStr(Out,OutLen,In); //todo: fix
}
void StrToTcsEx(tchar_t* Out,size_t OutLen,const char* In,int CodePage)
{
tcscpy_s(Out,OutLen,In);
}
void TcsToStrEx(char* Out,size_t OutLen,const tchar_t* In,int CodePage)
{
tcscpy_s(Out,OutLen,In);
}
void WcsToTcs(tchar_t* Out,size_t OutLen,const uint16_t* In)
{
if (OutLen>0)
{
for (;*In && OutLen>1;++Out,++In,--OutLen)
*Out = (tchar_t)((*In < 256) ? *In:'?');
*Out = 0;
}
}
int tcsicmp(const tchar_t* a,const tchar_t* b)
{
for (;*a && *b;++a,++b)
if (toupper(*a) != toupper(*b))
break;
if (*a == *b)
return 0;
return (toupper(*a)>toupper(*b)) ? 1:-1;
}
int tcsnicmp(const tchar_t* a,const tchar_t* b,size_t n)
{
for (;n>0 && *a && *b;++a,++b,--n)
if (toupper(*a) != toupper(*b))
break;
if (n<=0 || *a == *b)
return 0;
return (toupper(*a)>toupper(*b)) ? 1:-1;
}
int GetCodePage(const tchar_t* ContentType)
{
return Context()->CodePage;
}
#endif