mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
241 lines
3.5 KiB
241 lines
3.5 KiB
/*++
|
|
|
|
Copyright (c) 1995 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
runtime.c
|
|
|
|
Abstract:
|
|
|
|
Implementation of runtime library functions
|
|
|
|
Environment:
|
|
|
|
PCL-XL driver, kernel and user mode
|
|
|
|
Revision History:
|
|
|
|
11/14/95 -davidx-
|
|
Created it.
|
|
|
|
mm/dd/yy -author-
|
|
description
|
|
|
|
--*/
|
|
|
|
#include "xllib.h"
|
|
|
|
//
|
|
// Digit characters used for converting numbers to ASCII
|
|
//
|
|
|
|
const CHAR DigitString[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
|
|
|
|
|
|
|
PWSTR
|
|
CopyStr2Unicode(
|
|
PWSTR pwstr,
|
|
PSTR pstr,
|
|
INT maxlen
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Convert an ANSI string to a UNICODE string.
|
|
|
|
Arguments:
|
|
|
|
pwstr Pointer to buffer for holding Unicode string
|
|
pstr Pointer to ANSI string
|
|
maxlen Maximum number of Unicode characters to copy
|
|
If maxlen is 0 or negative, then there is no limit
|
|
|
|
Return Value:
|
|
|
|
Return a pointer to the destination string.
|
|
|
|
--*/
|
|
|
|
{
|
|
INT len = strlen(pstr) + 1;
|
|
|
|
if (maxlen <= 0)
|
|
maxlen = len;
|
|
|
|
MultiByteToUnicode(pwstr, maxlen*sizeof(WCHAR), NULL, pstr, len);
|
|
|
|
//
|
|
// Make sure the Unicode string is null-terminated
|
|
//
|
|
|
|
pwstr[maxlen-1] = NUL;
|
|
|
|
return pwstr;
|
|
}
|
|
|
|
|
|
|
|
PSTR
|
|
CopyUnicode2Str(
|
|
PSTR pstr,
|
|
PWSTR pwstr,
|
|
INT maxlen
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Convert a Unicde string to an ANSI string.
|
|
|
|
Arguments:
|
|
|
|
pstr Pointer to buffer for holding ANSI string
|
|
pwstr Pointer to Unicode string
|
|
maxlen Maximum number of ANSI characters to copy
|
|
If maxlen is 0 or negative, then there is no limit
|
|
|
|
Return Value:
|
|
|
|
Return a pointer to the destination string.
|
|
|
|
--*/
|
|
|
|
{
|
|
INT len = wcslen(pwstr) + 1;
|
|
|
|
if (maxlen <= 0)
|
|
maxlen = len;
|
|
|
|
UnicodeToMultiByte(pstr, maxlen, NULL, pwstr, len*sizeof(WCHAR));
|
|
|
|
//
|
|
// Make sure the ANSI string is null-terminated
|
|
//
|
|
|
|
pstr[maxlen-1] = NUL;
|
|
|
|
return pstr;
|
|
}
|
|
|
|
|
|
|
|
PCSTR
|
|
StripDirPrefixA(
|
|
PCSTR pFilename
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Strip the directory prefix off a filename (ANSI version)
|
|
|
|
Arguments:
|
|
|
|
pFilename Pointer to filename string
|
|
|
|
Return Value:
|
|
|
|
Pointer to the last component of a filename (without directory prefix)
|
|
|
|
--*/
|
|
|
|
{
|
|
PCSTR pstr = pFilename;
|
|
|
|
while (*pstr != NUL) {
|
|
|
|
if (*pstr++ == '\\')
|
|
pFilename = pstr;
|
|
}
|
|
|
|
return pFilename;
|
|
}
|
|
|
|
|
|
|
|
VOID
|
|
CopyStringW(
|
|
PWSTR pDest,
|
|
PWSTR pSrc,
|
|
INT destSize
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Copy Unicode string from source to destination
|
|
|
|
Arguments:
|
|
|
|
pDest - Points to the destination buffer
|
|
pSrc - Points to source string
|
|
destSize - Size of destination buffer (in characters)
|
|
|
|
Return Value:
|
|
|
|
NONE
|
|
|
|
--*/
|
|
|
|
{
|
|
PWSTR pEnd;
|
|
|
|
Assert(pDest != NULL && pSrc != NULL && destSize > 0);
|
|
|
|
pEnd = pDest + (destSize - 1);
|
|
|
|
while (pDest < pEnd && (*pDest++ = *pSrc++) != NUL)
|
|
;
|
|
|
|
while (pDest <= pEnd)
|
|
*pDest++ = NUL;
|
|
}
|
|
|
|
|
|
|
|
VOID
|
|
CopyStringA(
|
|
PSTR pDest,
|
|
PSTR pSrc,
|
|
INT destSize
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Copy Ansi string from source to destination
|
|
|
|
Arguments:
|
|
|
|
pDest - Points to the destination buffer
|
|
pSrc - Points to source string
|
|
destSize - Size of destination buffer (in characters)
|
|
|
|
Return Value:
|
|
|
|
NONE
|
|
|
|
--*/
|
|
|
|
{
|
|
PSTR pEnd;
|
|
|
|
Assert(pDest != NULL && pSrc != NULL && destSize > 0);
|
|
|
|
pEnd = pDest + (destSize - 1);
|
|
|
|
while (pDest < pEnd && (*pDest++ = *pSrc++) != NUL)
|
|
;
|
|
|
|
while (pDest <= pEnd)
|
|
*pDest++ = NUL;
|
|
}
|
|
|