mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
242 lines
6.1 KiB
C
242 lines
6.1 KiB
C
/*****************************************************************
|
|
* Conversion functions header v1.2 *
|
|
* *
|
|
* 2005 Shengalts Aleksander aka Instructor (Shengalts@mail.ru) *
|
|
* *
|
|
* *
|
|
*Functions: *
|
|
* xatoi, xitoa, hex2dec, dec2hex, str2hex, hex2str *
|
|
* *
|
|
*Usage: *
|
|
*#define xatoi //insert xatoi function *
|
|
*#define xitoa //insert xitoa function *
|
|
*#include "ConvFunc.h" *
|
|
*****************************************************************/
|
|
|
|
#ifndef _CONVFUNC_
|
|
#define _CONVFUNC_
|
|
|
|
|
|
/********************************************************************
|
|
*
|
|
* xatoi
|
|
*
|
|
*Converts char to int.
|
|
*
|
|
*[in] char *str -string number
|
|
*
|
|
*Returns: integer
|
|
*
|
|
*Examples:
|
|
* xatoi("45") == 45;
|
|
* xatoi(" -0045:value") == -45;
|
|
********************************************************************/
|
|
#ifdef xatoi
|
|
#define xatoi_INCLUDED
|
|
#undef xatoi
|
|
int xatoi(TCHAR *str)
|
|
{
|
|
BOOL bMinus=FALSE;
|
|
int nNumber=0;
|
|
|
|
while (*str == TEXT(' '))
|
|
++str;
|
|
if (*str == TEXT('-'))
|
|
{
|
|
bMinus=TRUE;
|
|
++str;
|
|
}
|
|
for (; (*str != TEXT('\0')) && (*str >= TEXT('0')) && (*str <= TEXT('9')); ++str)
|
|
nNumber=(nNumber * 10) + (*str - 48);
|
|
if (bMinus == TRUE)
|
|
nNumber=0 - nNumber;
|
|
return nNumber;
|
|
}
|
|
#endif
|
|
|
|
/********************************************************************
|
|
*
|
|
* xitoa [API: wsprintf(szResult, "%d", 45)]
|
|
*
|
|
*Converts int to char.
|
|
*
|
|
*[out] char *str -string number
|
|
*[in] int number -integer
|
|
*
|
|
*Examples:
|
|
* xitoa(szResult, 45); //szResult == "45"
|
|
* xitoa(szResult, -45); //szResult == "-45"
|
|
********************************************************************/
|
|
#ifdef xitoa
|
|
#define xitoa_INCLUDED
|
|
#undef xitoa
|
|
void xitoa(char *str, int number)
|
|
{
|
|
int nCapacity=0;
|
|
int nTmp=number;
|
|
|
|
if (number == 0)
|
|
{
|
|
str[0]='0';
|
|
str[1]='\0';
|
|
return;
|
|
}
|
|
if (number < 0)
|
|
{
|
|
str[0]='-';
|
|
number=0 - number;
|
|
++nCapacity;
|
|
}
|
|
for (; (nTmp != 0); ++nCapacity)
|
|
nTmp=nTmp/10;
|
|
for (str[nCapacity--]='\0'; (number != 0); --nCapacity)
|
|
{
|
|
str[nCapacity]=(number % 10) + 48;
|
|
number=number/10;
|
|
}
|
|
}
|
|
#endif
|
|
|
|
/********************************************************************
|
|
*
|
|
* hex2dec
|
|
*
|
|
*Converts hex value to decimal.
|
|
*
|
|
*[in] char *hex -hex value
|
|
*
|
|
*Returns: integer
|
|
*
|
|
*Examples:
|
|
* hex2dec("A1F") == 2591;
|
|
********************************************************************/
|
|
#if defined hex2dec || defined hex2str
|
|
#define hex2dec_INCLUDED
|
|
#undef hex2dec
|
|
unsigned hex2dec(char *hex)
|
|
{
|
|
int a;
|
|
int b=0;
|
|
|
|
while (1)
|
|
{
|
|
a=*hex++;
|
|
if (a >= '0' && a <= '9') a-='0';
|
|
else if (a >= 'a' && a <= 'f') a-='a'-10;
|
|
else if (a >= 'A' && a <= 'F') a-='A'-10;
|
|
else return b;
|
|
|
|
if (*hex) b=(b + a) * 16;
|
|
else return (b + a);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
/********************************************************************
|
|
*
|
|
* dec2hex [API: wsprintf(szResult, "%02x", 2591)]
|
|
*
|
|
*Converts decimal to hex value.
|
|
*
|
|
*[in] DWORD dec -positive integer
|
|
*[out] char *hex -hex value (output)
|
|
*[in] BOOL lowercase -if TRUE hexadecimal value in lowercase
|
|
* if FALSE in uppercase.
|
|
*[in] DWORD width -minimum number of characters to the output
|
|
*
|
|
*Examples:
|
|
* dec2hex(2591, szResult, FALSE, 2); //szResult == "A1F"
|
|
* dec2hex(10, szResult, TRUE, 2); //szResult == "0a"
|
|
********************************************************************/
|
|
#if defined dec2hex || defined str2hex
|
|
#define dec2hex_INCLUDED
|
|
#undef dec2hex
|
|
void dec2hex(unsigned int dec, char *hex, BOOL lowercase, unsigned int width)
|
|
{
|
|
unsigned int a=dec;
|
|
unsigned int b=0;
|
|
unsigned int c=0;
|
|
char d='1';
|
|
if (a == 0) d='0';
|
|
|
|
while (a)
|
|
{
|
|
b=a % 16;
|
|
a=a / 16;
|
|
if (b < 10) hex[c++]=b + '0';
|
|
else if (lowercase == TRUE) hex[c++]=b + 'a' - 10;
|
|
else hex[c++]=b + 'A' - 10;
|
|
}
|
|
while (width > c) hex[c++]='0';
|
|
hex[c]='\0';
|
|
|
|
if (d == '1')
|
|
for (b=0, --c; b < c; d=hex[b], hex[b++]=hex[c], hex[c--]=d);
|
|
}
|
|
#endif
|
|
|
|
/********************************************************************
|
|
*
|
|
* str2hex
|
|
*
|
|
*Converts string to hex values.
|
|
*
|
|
*[in] unsigned char *str -string
|
|
*[out] char *hex -hex string
|
|
*[in] BOOL lowercase -if TRUE hexadecimal value in lowercase
|
|
* if FALSE in uppercase.
|
|
*[in] unsigned int bytes -number of characters in string
|
|
*
|
|
*Examples:
|
|
* str2hex((unsigned char *)"Some Text", szResult, TRUE, lstrlen("Some Text")); //szResult == "536f6d652054657874"
|
|
********************************************************************/
|
|
#if defined str2hex && defined dec2hex_INCLUDED
|
|
#define str2hex_INCLUDED
|
|
#undef str2hex
|
|
void str2hex(unsigned char *str, char *hex, BOOL lowercase, unsigned int bytes)
|
|
{
|
|
char a[16];
|
|
unsigned int b=0;
|
|
|
|
for (hex[0]='\0'; b < bytes; ++b)
|
|
{
|
|
//wsprintf(a, "%02x", (unsigned int)str[b]);
|
|
dec2hex((unsigned int)str[b], a, lowercase, 2);
|
|
lstrcat(hex, a);
|
|
}
|
|
}
|
|
#endif
|
|
|
|
/********************************************************************
|
|
*
|
|
* hex2str
|
|
*
|
|
*Converts hex values to string.
|
|
*
|
|
*[in] char *hex -hex string
|
|
*[out] char *str -string
|
|
*
|
|
*Examples:
|
|
* hex2str("536f6d652054657874", szResult); //szResult == "Some Text"
|
|
********************************************************************/
|
|
#if defined hex2str && defined hex2dec_INCLUDED
|
|
#define hex2str_INCLUDED
|
|
#undef hex2str
|
|
void hex2str(char *hex, char *str)
|
|
{
|
|
char a[4];
|
|
|
|
while (*hex)
|
|
{
|
|
a[0]=*hex;
|
|
a[1]=*++hex;
|
|
a[2]='\0';
|
|
|
|
if (*hex++) *str++=hex2dec(a);
|
|
else break;
|
|
}
|
|
*str='\0';
|
|
}
|
|
#endif
|
|
|
|
#endif //_CONVFUNC_
|