mirror of
https://github.com/reactos/wine.git
synced 2024-11-29 06:30:37 +00:00
c7c217b31c
Sun Apr 12 12:22:23 1997 Andreas Mohr <100.30936@germany.net> * [files/drive.c] Fixed "no free space" problem with partition sizes between 1 and 2 GB (cluster_sectors may not exceed 0x40). * [windows/msgbox.c] [if1632/user.spec] [include/windows.h] Implemented MessageBoxIndirect16, corrected MSGBOXPARAMS16. * [loader/task.c] DOS environment strings may never exceed 127 chars -> truncate Unix environment strings if necessary. Sun Apr 12 02:51:44 1998 Dimitrie O. Paun <dimi@mail.cs.toronto.edu> * [files/*.c] All fprintf statements were converted to appropriate debug messages. * [tools/find_debug_channels] Updated comments at the beginning of the file. Sat Apr 11 15:27:21 1998 Alexandre Julliard <julliard@lrc.epfl.ch> * [loader/module.c] [loader/task.c] [scheduler/process.c] Moved some code around to prepare the ground for CreateProcess(). * [memory/environ.c] [loader/task.c] Moved Win32 environment strings functions to environ.c. Unified Win16 and Win32 environment management. * [scheduler/handle.c] [scheduler/k32obj.c] [scheduler/*.c] Implemented handle inheritance and DuplicateHandle(). * [scheduler/thread.c] Create a 16-bit stack for all threads. * [windows/dialog.c] Implemented DIALOGEX resource format. Fri Apr 10 20:21:51 1998 Marcus Meissner <marcus@mud.de> * [configure.in][include/acconfig.h][*/*][multimedia/*] Cleaned up the OSS detection stuff, added some more checks for headerfiles/functions. Removed a lot of OS specific #ifdefs. Lots of dependend multimedia cleanups. * [loader/pe_image.c] Enhanced comment, added missing reference count increase. * [ole/compobj.c] Replaced broken StringFromGUID2 by working one. * [misc/winsock.c] SO_LINGER uses unsigned 16 bit in Win16 and Win32, but unsigned int (32bit) for UNIX. * [memory/global.c] Allow realloc for lockcount 1 too. Fri Apr 10 15:27:34 1998 Morten Welinder <terra@diku.dk> * [graphics/x11drv/text.c] Handle control characters in trace. Ignore terminating newline. * [multimedia/init.c] (MULTIMEDIA_Init): Correct allocations. * [tools/examine-relay] Tidy up. * [windows/syscolor.c] Change highlight colour from lightblue to lightgray. This looks correct for menus. Fri Apr 10 01:49:58 1998 Douglas Ridgway <ridgway@winehq.com> * [configure.in] [Make.rules.in] Add check for c2man before using it. Fri Apr 10 02:59:21 1998 Douglas Ridgway <ridgway@winehq.com> * [DEVELOPERS-HINTS] Simple description of adding API calls. * [include/wintypes.h] [include/windows.h] Get rid of Winelib16, avoid declaring some illegal functions in Winelib, add prototypes for some enhanced metafile functions, fix GetTextExtentPoint32 declarations. * [relay32/gdi32.spec] [objects/enhmetafile.c] Cosmetic and functional improvements. * [include/wincon.h] [programs/view/*] Fixes, improved compatibility with native compilers. Thu Apr 9 15:48:49 1998 Ulrich Weigand <weigand@informatik.uni-erlangen.de> * [win32/kernel32.c] Implemented FT_Thunk / FT_Prolog / FT_Exit / FT_PrologPrime. Fixed Common32ThkLS thunk function. * [tools/build.c] [relay32/relay386.c] [if1632/relay.c] Changed relay code to allow register functions to modify stack layout. * [memory/selector.c] Implemented AllocMappedBuffer / FreeMappedBuffer. * [relay32/kernel32.spec] [if1632/kernel.spec] [win32/ordinals.c] Added names for undocumented functions. * [loader/module.c] Bugfix: LoadLibrary16 should *not* silently load 32-bit DLL. Thu Apr 9 03:54:58 1998 Jim Peterson <jspeter@birch.ee.vt.edu> * [windows/keyboard.c] Fix an erroneous test in TranslateAccelerator{16,32} for the end of the accelerator table. Thu Apr 8 20:36:28 1998 Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de> * [misc/crtdll.c] Implement getenv. * [misc/commdlg.c] Make Get[Save/Open]FileName work in most situations. * [misc/lstr.c] Use wvsprintf32A instead of vsprintf in FormatMessage32X * [misc/version] Make NT3.50 a recognised version * [graphics/x11drv/graphics.c] Change the algorithme to draw arcs * [loader/resource.c] Return an empty buffer in LoadString32A if no resource found. * [win32/code_page.c] Try harder to get the right size in MultiByteToWideChar. * [win32/process.c] Call WinExec32 for CreateProcess32A. * [windows/user.c] Install default Int0 Handler in InitApp(). Thu Apr 8 19:29:48 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de> * [misc/imagelist.c] Preliminary fix for drawing selected images. Various improvements. * [controls/progress.c][include/progress.c][include/commctrl.h] Added progress bar messages and styles for IE4.01 (dll version 4.72) compatibility. Fixed led size problem. * [controls/updown.c][include/commctrl.h] Added UDM_GETRANGE32 and UDM_SETRANGE32. * [objects/oembitmaps.c][include/windows.h][include/bitmaps/*] Added Win95 icons and fixed Win95 cursor and restore button bug. Now they should be visible. Sorry!!! * [relay32/comctl32.spec] Added most missing function names. Tue Apr 6 18:48:36 1998 Matthew Becker <mbecker@glasscity.net> * [objects/font.c] [if1632/gdi.spec] GetOutlineTextMetrics: stub * [objects/text.c] GetTextCharset should just call GetTextCharsetInfo. * [misc/mpr.c] [relay32/mpr.spec] WNetCachePassword: stub * [scheduler/thread.c] [relay32/user32.spec] AttachThreadInput: stub Updated documentation. * [objects/palette.c] Updated documentation. Tue Mar 31 17:06:30 1998 James Juran <jrj120@psu.edu> * [*/*.c] Finished fixing USER32 ordinal numbers in function documentation. Mon Mar 30 20:27:38 1998 Morten Welinder <terra@diku.dk> * [misc/debugstr.c] [include/debugstr.h] Moved _dumpstr from relay32/relay386.c. Improved control character handling. * [msdos/int21.c] Implement 215E00 -- get machine name. * [windows/winpos.c] SetWindowPos32: Make an extra sync when mapping managed windows. This makes sure the reconfigure event has been handled. See Mshearts' what's-your-name window. Mon Mar 30 01:13:50 1998 Alexander V. Lukyanov <lav@long.yar.ru> * [Makefile.in] Install includes from TOPSRCDIR.
635 lines
18 KiB
C
635 lines
18 KiB
C
/*
|
|
* String functions
|
|
*
|
|
* Copyright 1993 Yngvi Sigurjonsson
|
|
* Copyright 1996 Alexandre Julliard
|
|
*/
|
|
|
|
#include <ctype.h>
|
|
#include <string.h>
|
|
#include "windows.h"
|
|
#include "winerror.h"
|
|
#include "ldt.h"
|
|
#include "debug.h"
|
|
|
|
static const BYTE STRING_Oem2Ansi[256] =
|
|
"\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\244"
|
|
"\020\021\022\023\266\247\026\027\030\031\032\033\034\035\036\037"
|
|
"\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057"
|
|
"\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077"
|
|
"\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117"
|
|
"\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137"
|
|
"\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157"
|
|
"\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177"
|
|
"\307\374\351\342\344\340\345\347\352\353\350\357\356\354\304\305"
|
|
"\311\346\306\364\366\362\373\371\377\326\334\242\243\245\120\203"
|
|
"\341\355\363\372\361\321\252\272\277\137\254\275\274\241\253\273"
|
|
"\137\137\137\246\246\246\246\053\053\246\246\053\053\053\053\053"
|
|
"\053\055\055\053\055\053\246\246\053\053\055\055\246\055\053\055"
|
|
"\055\055\055\053\053\053\053\053\053\053\053\137\137\246\137\137"
|
|
"\137\337\137\266\137\137\265\137\137\137\137\137\137\137\137\137"
|
|
"\137\261\137\137\137\137\367\137\260\225\267\137\156\262\137\137";
|
|
|
|
static const BYTE STRING_Ansi2Oem[256] =
|
|
"\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017"
|
|
"\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037"
|
|
"\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057"
|
|
"\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077"
|
|
"\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117"
|
|
"\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137"
|
|
"\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157"
|
|
"\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177"
|
|
"\200\201\054\237\054\137\375\374\210\045\123\074\117\215\216\217"
|
|
"\220\140\047\042\042\371\055\137\230\231\163\076\157\235\236\131"
|
|
"\040\255\233\234\017\235\335\025\042\143\246\256\252\055\162\137"
|
|
"\370\361\375\063\047\346\024\372\054\061\247\257\254\253\137\250"
|
|
"\101\101\101\101\216\217\222\200\105\220\105\105\111\111\111\111"
|
|
"\104\245\117\117\117\117\231\170\117\125\125\125\232\131\137\341"
|
|
"\205\240\203\141\204\206\221\207\212\202\210\211\215\241\214\213"
|
|
"\144\244\225\242\223\157\224\366\157\227\243\226\201\171\137\230";
|
|
|
|
#define OEM_TO_ANSI(ch) (STRING_Oem2Ansi[(unsigned char)(ch)])
|
|
#define ANSI_TO_OEM(ch) (STRING_Ansi2Oem[(unsigned char)(ch)])
|
|
|
|
|
|
/***********************************************************************
|
|
* hmemcpy (KERNEL.348)
|
|
*/
|
|
void WINAPI hmemcpy( LPVOID dst, LPCVOID src, LONG count )
|
|
{
|
|
memcpy( dst, src, count );
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrcat16 (KERNEL.89)
|
|
*/
|
|
SEGPTR WINAPI lstrcat16( SEGPTR dst, LPCSTR src )
|
|
{
|
|
lstrcat32A( (LPSTR)PTR_SEG_TO_LIN(dst), src );
|
|
return dst;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrcat32A (KERNEL32.599)
|
|
*/
|
|
LPSTR WINAPI lstrcat32A( LPSTR dst, LPCSTR src )
|
|
{
|
|
TRACE(string,"Append %s to %s\n",
|
|
debugstr_a (src), debugstr_a (dst));
|
|
/* Windows does not check for NULL pointers here, so we don't either */
|
|
strcat( dst, src );
|
|
return dst;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrcat32W (KERNEL32.600)
|
|
*/
|
|
LPWSTR WINAPI lstrcat32W( LPWSTR dst, LPCWSTR src )
|
|
{
|
|
register LPWSTR p = dst;
|
|
TRACE(string,"Append L%s to L%s\n",
|
|
debugstr_w (src), debugstr_w (dst));
|
|
/* Windows does not check for NULL pointers here, so we don't either */
|
|
while (*p) p++;
|
|
while ((*p++ = *src++));
|
|
return dst;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrcatn16 (KERNEL.352)
|
|
*/
|
|
SEGPTR WINAPI lstrcatn16( SEGPTR dst, LPCSTR src, INT16 n )
|
|
{
|
|
lstrcatn32A( (LPSTR)PTR_SEG_TO_LIN(dst), src, n );
|
|
return dst;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrcatn32A (Not a Windows API)
|
|
*/
|
|
LPSTR WINAPI lstrcatn32A( LPSTR dst, LPCSTR src, INT32 n )
|
|
{
|
|
register LPSTR p = dst;
|
|
TRACE(string,"strcatn add %d chars from %s to %s\n",
|
|
n, debugstr_an (src, n), debugstr_a (dst));
|
|
while (*p) p++;
|
|
if ((n -= (INT32)(p - dst)) <= 0) return dst;
|
|
lstrcpyn32A( p, src, n );
|
|
return dst;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrcatn32W (Not a Windows API)
|
|
*/
|
|
LPWSTR WINAPI lstrcatn32W( LPWSTR dst, LPCWSTR src, INT32 n )
|
|
{
|
|
register LPWSTR p = dst;
|
|
TRACE(string,"strcatn add %d chars from L%s to L%s\n",
|
|
n, debugstr_wn (src, n), debugstr_w (dst));
|
|
while (*p) p++;
|
|
if ((n -= (INT32)(p - dst)) <= 0) return dst;
|
|
lstrcpyn32W( p, src, n );
|
|
return dst;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrcmp16 (USER.430)
|
|
*/
|
|
INT16 WINAPI lstrcmp16( LPCSTR str1, LPCSTR str2 )
|
|
{
|
|
return (INT16)lstrcmp32A( str1, str2 );
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrcmp32A (KERNEL.602)
|
|
*/
|
|
INT32 WINAPI lstrcmp32A( LPCSTR str1, LPCSTR str2 )
|
|
{
|
|
TRACE(string,"%s and %s\n",
|
|
debugstr_a (str1), debugstr_a (str2));
|
|
/* Win95 KERNEL32.DLL does it that way. Hands off! */
|
|
if (!str1 || !str2) {
|
|
SetLastError(ERROR_INVALID_PARAMETER);
|
|
return 0;
|
|
}
|
|
return (INT32)strcmp( str1, str2 );
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrcmp32W (KERNEL.603)
|
|
*/
|
|
INT32 WINAPI lstrcmp32W( LPCWSTR str1, LPCWSTR str2 )
|
|
{
|
|
TRACE(string,"L%s and L%s\n",
|
|
debugstr_w (str1), debugstr_w (str2));
|
|
if (!str1 || !str2) {
|
|
SetLastError(ERROR_INVALID_PARAMETER);
|
|
return 0;
|
|
}
|
|
while (*str1 && (*str1 == *str2)) { str1++; str2++; }
|
|
return (INT32)(*str1 - *str2);
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrcmpi16 (USER.471)
|
|
*/
|
|
INT16 WINAPI lstrcmpi16( LPCSTR str1, LPCSTR str2 )
|
|
{
|
|
return (INT16)lstrcmpi32A( str1, str2 );
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrcmpi32A (KERNEL32.605)
|
|
*/
|
|
INT32 WINAPI lstrcmpi32A( LPCSTR str1, LPCSTR str2 )
|
|
{
|
|
INT32 res;
|
|
|
|
TRACE(string,"strcmpi %s and %s\n",
|
|
debugstr_a (str1), debugstr_a (str2));
|
|
if (!str1 || !str2) {
|
|
SetLastError(ERROR_INVALID_PARAMETER);
|
|
return 0;
|
|
}
|
|
while (*str1)
|
|
{
|
|
if ((res = toupper(*str1) - toupper(*str2)) != 0) return res;
|
|
str1++;
|
|
str2++;
|
|
}
|
|
return toupper(*str1) - toupper(*str2);
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrcmpi32W (KERNEL32.606)
|
|
*/
|
|
INT32 WINAPI lstrcmpi32W( LPCWSTR str1, LPCWSTR str2 )
|
|
{
|
|
INT32 res;
|
|
|
|
#if 0
|
|
/* Too much! (From registry loading.) */
|
|
TRACE(string,"strcmpi L%s and L%s\n",
|
|
debugstr_w (str1), debugstr_w (str2));
|
|
#endif
|
|
if (!str1 || !str2) {
|
|
SetLastError(ERROR_INVALID_PARAMETER);
|
|
return 0;
|
|
}
|
|
while (*str1)
|
|
{
|
|
/* FIXME: Unicode */
|
|
if ((res = toupper(*str1) - toupper(*str2)) != 0) return res;
|
|
str1++;
|
|
str2++;
|
|
}
|
|
return toupper(*str1) - toupper(*str2);
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrcpy16 (KERNEL.88)
|
|
*/
|
|
SEGPTR WINAPI lstrcpy16( SEGPTR dst, LPCSTR src )
|
|
{
|
|
lstrcpy32A( (LPSTR)PTR_SEG_TO_LIN(dst), src );
|
|
return dst;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrcpy32A (KERNEL32.608)
|
|
*/
|
|
LPSTR WINAPI lstrcpy32A( LPSTR dst, LPCSTR src )
|
|
{
|
|
TRACE(string,"strcpy %s\n", debugstr_a (src));
|
|
/* Windows does not check for NULL pointers here, so we don't either */
|
|
strcpy( dst, src );
|
|
return dst;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrcpy32W (KERNEL32.609)
|
|
*/
|
|
LPWSTR WINAPI lstrcpy32W( LPWSTR dst, LPCWSTR src )
|
|
{
|
|
register LPWSTR p = dst;
|
|
TRACE(string,"strcpy L%s\n", debugstr_w (src));
|
|
/* Windows does not check for NULL pointers here, so we don't either */
|
|
while ((*p++ = *src++));
|
|
return dst;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrcpyn16 (KERNEL.353)
|
|
*/
|
|
SEGPTR WINAPI lstrcpyn16( SEGPTR dst, LPCSTR src, INT16 n )
|
|
{
|
|
lstrcpyn32A( (LPSTR)PTR_SEG_TO_LIN(dst), src, n );
|
|
return dst;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrcpyn32A (KERNEL32.611)
|
|
* Note: this function differs from the UNIX strncpy, it _always_ writes
|
|
* a terminating \0
|
|
*/
|
|
LPSTR WINAPI lstrcpyn32A( LPSTR dst, LPCSTR src, INT32 n )
|
|
{
|
|
LPSTR p = dst;
|
|
TRACE(string,"strcpyn %s for %d chars\n",
|
|
debugstr_an (src,n), n);
|
|
/* Windows does not check for NULL pointers here, so we don't either */
|
|
while ((n-- > 1) && *src) *p++ = *src++;
|
|
if (n >= 0) *p = 0;
|
|
return dst;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrcpyn32W (KERNEL32.612)
|
|
* Note: this function differs from the UNIX strncpy, it _always_ writes
|
|
* a terminating \0
|
|
*/
|
|
LPWSTR WINAPI lstrcpyn32W( LPWSTR dst, LPCWSTR src, INT32 n )
|
|
{
|
|
LPWSTR p = dst;
|
|
TRACE(string,"strcpyn L%s for %d chars\n",
|
|
debugstr_wn (src,n), n);
|
|
/* Windows does not check for NULL pointers here, so we don't either */
|
|
while ((n-- > 1) && *src) *p++ = *src++;
|
|
if (n >= 0) *p = 0;
|
|
return dst;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrlen16 (KERNEL.90)
|
|
*/
|
|
INT16 WINAPI lstrlen16( LPCSTR str )
|
|
{
|
|
return (INT16)lstrlen32A( str );
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrlen32A (KERNEL32.614)
|
|
*/
|
|
INT32 WINAPI lstrlen32A( LPCSTR str )
|
|
{
|
|
/* looks weird, but win3.1 KERNEL got a GeneralProtection handler
|
|
* in lstrlen() ... we check only for NULL pointer reference.
|
|
* - Marcus Meissner
|
|
*/
|
|
TRACE(string,"strlen %s\n", debugstr_a (str));
|
|
if (!str) return 0;
|
|
return (INT32)strlen(str);
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrlen32W (KERNEL32.615)
|
|
*/
|
|
INT32 WINAPI lstrlen32W( LPCWSTR str )
|
|
{
|
|
INT32 len = 0;
|
|
TRACE(string,"strlen L%s\n", debugstr_w (str));
|
|
if (!str) return 0;
|
|
while (*str++) len++;
|
|
return len;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrncmp32A (Not a Windows API)
|
|
*/
|
|
INT32 WINAPI lstrncmp32A( LPCSTR str1, LPCSTR str2, INT32 n )
|
|
{
|
|
TRACE(string,"strncmp %s and %s for %d chars\n",
|
|
debugstr_an (str1, n), debugstr_an (str2, n), n);
|
|
return (INT32)strncmp( str1, str2, n );
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrncmp32W (Not a Windows API)
|
|
*/
|
|
INT32 WINAPI lstrncmp32W( LPCWSTR str1, LPCWSTR str2, INT32 n )
|
|
{
|
|
TRACE(string,"strncmp L%s and L%s for %d chars\n",
|
|
debugstr_wn (str1, n), debugstr_wn (str2, n), n);
|
|
if (!n) return 0;
|
|
while ((--n > 0) && *str1 && (*str1 == *str2)) { str1++; str2++; }
|
|
return (INT32)(*str1 - *str2);
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrncmpi32A (Not a Windows API)
|
|
*/
|
|
INT32 WINAPI lstrncmpi32A( LPCSTR str1, LPCSTR str2, INT32 n )
|
|
{
|
|
INT32 res;
|
|
|
|
TRACE(string,"strncmpi %s and %s for %d chars\n",
|
|
debugstr_an (str1, n), debugstr_an (str2, n), n);
|
|
if (!n) return 0;
|
|
while ((--n > 0) && *str1)
|
|
if ( (res = toupper(*str1++) - toupper(*str2++)) ) return res;
|
|
|
|
return toupper(*str1) - toupper(*str2);
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrncmpi32W (Not a Windows API)
|
|
*/
|
|
INT32 WINAPI lstrncmpi32W( LPCWSTR str1, LPCWSTR str2, INT32 n )
|
|
{
|
|
INT32 res;
|
|
|
|
TRACE(string,"strncmpi L%s and L%s for %d chars\n",
|
|
debugstr_wn (str1, n), debugstr_wn (str2, n), n);
|
|
if (!n) return 0;
|
|
while ((--n > 0) && *str1)
|
|
{
|
|
/* FIXME: Unicode */
|
|
if ((res = toupper(*str1) - toupper(*str2)) != 0) return res;
|
|
str1++;
|
|
str2++;
|
|
}
|
|
return toupper(*str1) - toupper(*str2);
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrcpyAtoW (Not a Windows API)
|
|
*/
|
|
LPWSTR WINAPI lstrcpyAtoW( LPWSTR dst, LPCSTR src )
|
|
{
|
|
register LPWSTR p = dst;
|
|
while ((*p++ = (WCHAR)(unsigned char)*src++));
|
|
return dst;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrcpyWtoA (Not a Windows API)
|
|
*/
|
|
LPSTR WINAPI lstrcpyWtoA( LPSTR dst, LPCWSTR src )
|
|
{
|
|
register LPSTR p = dst;
|
|
while ((*p++ = (CHAR)*src++));
|
|
return dst;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrcpynAtoW (Not a Windows API)
|
|
* Note: this function differs from the UNIX strncpy, it _always_ writes
|
|
* a terminating \0
|
|
*/
|
|
LPWSTR WINAPI lstrcpynAtoW( LPWSTR dst, LPCSTR src, INT32 n )
|
|
{
|
|
LPWSTR p = dst;
|
|
while ((n-- > 1) && *src) *p++ = (WCHAR)(unsigned char)*src++;
|
|
if (n >= 0) *p = 0;
|
|
return dst;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* lstrcpynWtoA (Not a Windows API)
|
|
* Note: this function differs from the UNIX strncpy, it _always_ writes
|
|
* a terminating \0
|
|
*/
|
|
LPSTR WINAPI lstrcpynWtoA( LPSTR dst, LPCWSTR src, INT32 n )
|
|
{
|
|
LPSTR p = dst;
|
|
while ((n-- > 1) && *src) *p++ = (CHAR)*src++;
|
|
if (n >= 0) *p = 0;
|
|
return dst;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* Copy (GDI.250)
|
|
*/
|
|
void WINAPI Copy( LPVOID src, LPVOID dst, WORD size )
|
|
{
|
|
memcpy( dst, src, size );
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* RtlFillMemory (KERNEL32.441)
|
|
*/
|
|
VOID WINAPI RtlFillMemory( LPVOID ptr, UINT32 len, UINT32 fill )
|
|
{
|
|
memset( ptr, fill, len );
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* RtlMoveMemory (KERNEL32.442)
|
|
*/
|
|
VOID WINAPI RtlMoveMemory( LPVOID dst, LPCVOID src, UINT32 len )
|
|
{
|
|
memmove( dst, src, len );
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* RtlZeroMemory (KERNEL32.444)
|
|
*/
|
|
VOID WINAPI RtlZeroMemory( LPVOID ptr, UINT32 len )
|
|
{
|
|
memset( ptr, 0, len );
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* AnsiToOem16 (KEYBOARD.5)
|
|
*/
|
|
INT16 WINAPI AnsiToOem16( LPCSTR s, LPSTR d )
|
|
{
|
|
CharToOem32A( s, d );
|
|
return -1;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* OemToAnsi16 (KEYBOARD.6)
|
|
*/
|
|
INT16 WINAPI OemToAnsi16( LPCSTR s, LPSTR d )
|
|
{
|
|
OemToChar32A( s, d );
|
|
return -1;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* AnsiToOemBuff16 (KEYBOARD.134)
|
|
*/
|
|
void WINAPI AnsiToOemBuff16( LPCSTR s, LPSTR d, UINT16 len )
|
|
{
|
|
CharToOemBuff32A( s, d, len ? len : 65536 );
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* OemToAnsiBuff16 (KEYBOARD.135)
|
|
*/
|
|
void WINAPI OemToAnsiBuff16( LPCSTR s, LPSTR d, UINT16 len )
|
|
{
|
|
OemToCharBuff32A( s, d, len ? len : 65536 );
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* CharToOem32A (USER32.37)
|
|
*/
|
|
BOOL32 WINAPI CharToOem32A( LPCSTR s, LPSTR d )
|
|
{
|
|
LPSTR oldd = d;
|
|
if (!s || !d) return TRUE;
|
|
TRACE(string,"CharToOem %s\n", debugstr_a (s));
|
|
while ((*d++ = ANSI_TO_OEM(*s++)));
|
|
TRACE(string," to %s\n", debugstr_a (oldd));
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* CharToOemBuff32A (USER32.38)
|
|
*/
|
|
BOOL32 WINAPI CharToOemBuff32A( LPCSTR s, LPSTR d, DWORD len )
|
|
{
|
|
while (len--) *d++ = ANSI_TO_OEM(*s++);
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* CharToOemBuff32W (USER32.39)
|
|
*/
|
|
BOOL32 WINAPI CharToOemBuff32W( LPCWSTR s, LPSTR d, DWORD len )
|
|
{
|
|
while (len--) *d++ = ANSI_TO_OEM(*s++);
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* CharToOem32W (USER32.40)
|
|
*/
|
|
BOOL32 WINAPI CharToOem32W( LPCWSTR s, LPSTR d )
|
|
{
|
|
LPSTR oldd = d;
|
|
if (!s || !d) return TRUE;
|
|
TRACE(string,"CharToOem L%s\n", debugstr_w (s));
|
|
while ((*d++ = ANSI_TO_OEM(*s++)));
|
|
TRACE(string," to %s\n", debugstr_a (oldd));
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* OemToChar32A (USER32.402)
|
|
*/
|
|
BOOL32 WINAPI OemToChar32A( LPCSTR s, LPSTR d )
|
|
{
|
|
LPSTR oldd = d;
|
|
TRACE(string,"OemToChar %s\n", debugstr_a (s));
|
|
while ((*d++ = OEM_TO_ANSI(*s++)));
|
|
TRACE(string," to %s\n", debugstr_a (oldd));
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* OemToCharBuff32A (USER32.403)
|
|
*/
|
|
BOOL32 WINAPI OemToCharBuff32A( LPCSTR s, LPSTR d, DWORD len )
|
|
{
|
|
TRACE(string,"OemToCharBuff %s\n", debugstr_an (s, len));
|
|
while (len--) *d++ = OEM_TO_ANSI(*s++);
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* OemToCharBuff32W (USER32.404)
|
|
*/
|
|
BOOL32 WINAPI OemToCharBuff32W( LPCSTR s, LPWSTR d, DWORD len )
|
|
{
|
|
TRACE(string,"OemToCharBuff %s\n", debugstr_an (s, len));
|
|
while (len--) *d++ = (WCHAR)OEM_TO_ANSI(*s++);
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
/***********************************************************************
|
|
* OemToChar32W (USER32.405)
|
|
*/
|
|
BOOL32 WINAPI OemToChar32W( LPCSTR s, LPWSTR d )
|
|
{
|
|
while ((*d++ = (WCHAR)OEM_TO_ANSI(*s++)));
|
|
return TRUE;
|
|
}
|