mirror of https://github.com/tongzx/nt5src
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.
203 lines
4.4 KiB
203 lines
4.4 KiB
#include "precomp.h"
|
|
#pragma hdrstop
|
|
|
|
/*
|
|
** Purpose:
|
|
** Duplicates a zero terminated string into a newly allocated buffer
|
|
** just large enough to hold the source string and its zero terminator.
|
|
** Arguments:
|
|
** sz: non-NULL zero terminated string to duplicate.
|
|
** Returns:
|
|
** NULL if a new buffer to hold the duplicated string cannot be allocated.
|
|
** Pointer to a newly allocated buffer into which sz has been copied with
|
|
** its zero terminator.
|
|
**
|
|
***************************************************************************/
|
|
SZ APIENTRY SzDupl(sz)
|
|
SZ sz;
|
|
{
|
|
SZ szNew;
|
|
|
|
AssertDataSeg();
|
|
ChkArg(sz != (SZ)NULL, 1, (SZ)NULL);
|
|
|
|
if ((szNew = (SZ)SAlloc(strlen(sz) + 1)) != (SZ)NULL)
|
|
strcpy(szNew, sz);
|
|
|
|
return(szNew);
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
** Purpose:
|
|
** Compares two zero terminated strings lexicographically and with
|
|
** case-sensitivity. Comparison depends on the current language
|
|
** selected by the user.
|
|
** Arguments:
|
|
** sz1: non-NULL zero terminated string to compare.
|
|
** sz2: non-NULL zero terminated string to compare.
|
|
** Returns:
|
|
** crcError for errors.
|
|
** crcEqual if the strings are lexicographically equal.
|
|
** crcFirstHigher if sz1 is lexicographically greater than sz2.
|
|
** crcSecondHigher if sz2 is lexicographically greater than sz1.
|
|
**
|
|
***************************************************************************/
|
|
CRC APIENTRY CrcStringCompare(sz1, sz2)
|
|
SZ sz1;
|
|
SZ sz2;
|
|
{
|
|
INT iCmpReturn;
|
|
|
|
AssertDataSeg();
|
|
|
|
ChkArg(sz1 != (SZ)NULL, 1, crcError);
|
|
ChkArg(sz2 != (SZ)NULL, 2, crcError);
|
|
|
|
if ((iCmpReturn = lstrcmp((LPSTR)sz1, (LPSTR)sz2)) == 0)
|
|
return(crcEqual);
|
|
else if (iCmpReturn < 0)
|
|
return(crcSecondHigher);
|
|
else
|
|
return(crcFirstHigher);
|
|
}
|
|
|
|
|
|
/*
|
|
** Purpose:
|
|
** Compares two zero terminated strings lexicographically and without
|
|
** case-sensitivity. Comparison depends on the current language
|
|
** selected by the user.
|
|
** Arguments:
|
|
** sz1: non-NULL zero terminated string to compare.
|
|
** sz2: non-NULL zero terminated string to compare.
|
|
** Returns:
|
|
** crcError for errors.
|
|
** crcEqual if the strings are lexicographically equal.
|
|
** crcFirstHigher if sz1 is lexicographically greater than sz2.
|
|
** crcSecondHigher if sz2 is lexicographically greater than sz1.
|
|
**
|
|
***************************************************************************/
|
|
CRC APIENTRY CrcStringCompareI(sz1, sz2)
|
|
SZ sz1;
|
|
SZ sz2;
|
|
{
|
|
INT iCmpReturn;
|
|
|
|
AssertDataSeg();
|
|
|
|
ChkArg(sz1 != (SZ)NULL, 1, crcError);
|
|
ChkArg(sz2 != (SZ)NULL, 2, crcError);
|
|
|
|
if ((iCmpReturn = lstrcmpi((LPSTR)sz1, (LPSTR)sz2)) == 0)
|
|
return(crcEqual);
|
|
else if (iCmpReturn < 0)
|
|
return(crcSecondHigher);
|
|
else
|
|
return(crcFirstHigher);
|
|
}
|
|
|
|
|
|
/*
|
|
** Purpose:
|
|
** Finds the last character in a string.
|
|
** Arguments:
|
|
** sz: non-NULL zero terminated string to search for end in.
|
|
** Returns:
|
|
** NULL for an empty string.
|
|
** non-Null string pointer to the last valid character in sz.
|
|
**
|
|
***************************************************************************/
|
|
SZ APIENTRY SzLastChar(sz)
|
|
SZ sz;
|
|
{
|
|
SZ szCur = (SZ)NULL;
|
|
SZ szNext = sz;
|
|
|
|
AssertDataSeg();
|
|
|
|
ChkArg(sz != (SZ)NULL, 1, (SZ)NULL);
|
|
|
|
while (*szNext != '\0')
|
|
{
|
|
szNext = SzNextChar((szCur = szNext));
|
|
Assert(szNext != (SZ)NULL);
|
|
}
|
|
|
|
return(szCur);
|
|
}
|
|
|
|
|
|
#define MAX_BUFFER 1024
|
|
|
|
extern CHAR ReturnTextBuffer[MAX_BUFFER];
|
|
|
|
/*
|
|
ToLower - this function will convert the string to lower case.
|
|
|
|
Input: Arg[0] - string to be convertd.
|
|
Output: lower case string.
|
|
|
|
*/
|
|
|
|
BOOL
|
|
ToLower(
|
|
IN DWORD cArgs,
|
|
IN LPSTR Args[],
|
|
OUT LPSTR *TextOut
|
|
)
|
|
|
|
{
|
|
int i; // counter
|
|
CHAR *pszTmp = ReturnTextBuffer;
|
|
|
|
if ( cArgs < 1 )
|
|
{
|
|
SetErrorText(IDS_ERROR_BADARGS);
|
|
return( FALSE );
|
|
}
|
|
|
|
for (i=0;(Args[0][i]!='\0') && (i<MAX_BUFFER);i++,pszTmp++)
|
|
{
|
|
*pszTmp = (CHAR)tolower(Args[0][i]);
|
|
}
|
|
*pszTmp='\0';
|
|
|
|
*TextOut = ReturnTextBuffer;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
/*
|
|
|
|
SetupStrncmp - Similar to c strncmp runtime library
|
|
The user must passed 3 arguments to the function.
|
|
1st argument - the first string
|
|
2nd argument - the second string
|
|
3rd argument - number of characters compared
|
|
|
|
Provide the same function as strncmp
|
|
|
|
*/
|
|
|
|
BOOL
|
|
SetupStrncmp(
|
|
IN DWORD cArgs,
|
|
IN LPSTR Args[],
|
|
OUT LPSTR *TextOut
|
|
)
|
|
|
|
{
|
|
if ( cArgs != 3 )
|
|
{
|
|
SetErrorText(IDS_ERROR_BADARGS);
|
|
return( FALSE );
|
|
}
|
|
|
|
wsprintf( ReturnTextBuffer, "%d", strncmp( Args[0], Args[1], atol(Args[2])));
|
|
|
|
*TextOut = ReturnTextBuffer;
|
|
return TRUE;
|
|
}
|