home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Windows Gam…ming Gurus (2nd Edition)
/
Disc2.iso
/
vc98
/
crt
/
src
/
aw_com.c
< prev
next >
Wrap
C/C++ Source or Header
|
1998-06-17
|
2KB
|
106 lines
/***
*aw_com.c - W version of GetCommandLine.
*
* Copyright (c) 1994-1997, Microsoft Corporation. All rights reserved.
*
*Purpose:
* Use GetCommandLineW if available, otherwise use A version.
*
*******************************************************************************/
#include <cruntime.h>
#include <internal.h>
#include <stdlib.h>
#include <setlocal.h>
#include <awint.h>
#include <dbgint.h>
#define USE_W 1
#define USE_A 2
/***
*LPWSTR __cdecl __crtGetCommandLineW - Get wide command line.
*
*Purpose:
* Internal support function. Tries to use NLS API call
* GetCommandLineW if available and uses GetCommandLineA
* if it must. If neither are available it fails and returns 0.
*
*Entry:
* VOID
*
*Exit:
* LPWSTR - pointer to environment block
*
*Exceptions:
*
*******************************************************************************/
LPWSTR __cdecl __crtGetCommandLineW(
VOID
)
{
static int f_use = 0;
/*
* Look for unstubbed 'preferred' flavor. Otherwise use available flavor.
* Must actually call the function to ensure it's not a stub.
*/
if (0 == f_use)
{
if (NULL != GetCommandLineW())
f_use = USE_W;
else if (NULL != GetCommandLineA())
f_use = USE_A;
else
return 0;
}
/* Use "W" version */
if (USE_W == f_use)
{
return GetCommandLineW();
}
/* Use "A" version */
if (USE_A == f_use)
{
int buff_size;
wchar_t *wbuffer;
LPSTR lpenv;
/*
* Convert strings and return the requested information.
*/
lpenv = GetCommandLineA();
/* find out how big a buffer we need */
if (0 == (buff_size = MultiByteToWideChar(__lc_codepage,
MB_PRECOMPOSED, lpenv, -1, NULL, 0)))
return 0;
/* allocate enough space for chars */
if (NULL == (wbuffer = (wchar_t *)
_malloc_crt(buff_size * sizeof(wchar_t))))
return 0;
if (0 == MultiByteToWideChar(__lc_codepage,
MB_PRECOMPOSED, lpenv, -1, wbuffer, buff_size))
goto error_cleanup;
return (LPWSTR)wbuffer;
error_cleanup:
_free_crt(wbuffer);
return 0;
}
else /* f_use is neither USE_A nor USE_W */
return 0;
}