99 lines
2.3 KiB
C
99 lines
2.3 KiB
C
|
|
||
|
/*************************************************************************
|
||
|
*
|
||
|
* DBCS.C
|
||
|
*
|
||
|
* DBCS routines, ported from DOS
|
||
|
*
|
||
|
* Copyright (c) 1995 Microsoft Corporation
|
||
|
*
|
||
|
* $Log: N:\NT\PRIVATE\NW4\NWSCRIPT\VCS\DBCS.C $
|
||
|
*
|
||
|
* Rev 1.1 22 Dec 1995 14:24:10 terryt
|
||
|
* Add Microsoft headers
|
||
|
*
|
||
|
* Rev 1.0 15 Nov 1995 18:06:44 terryt
|
||
|
* Initial revision.
|
||
|
*
|
||
|
* Rev 1.1 25 Aug 1995 16:22:26 terryt
|
||
|
* Capture support
|
||
|
*
|
||
|
* Rev 1.0 15 May 1995 19:10:24 terryt
|
||
|
* Initial revision.
|
||
|
*
|
||
|
*************************************************************************/
|
||
|
/*
|
||
|
** dbcs.c - DBCS functions for DOS apps.
|
||
|
**
|
||
|
** Written by RokaH and DavidDi.
|
||
|
*/
|
||
|
|
||
|
|
||
|
/* Headers
|
||
|
**********/
|
||
|
|
||
|
// IsDBCSLeadByte taken out of NT because there is one built in.
|
||
|
// I left the Next and Prev in because I don't know whether this
|
||
|
// algorithm is "safer" than the built in code.
|
||
|
|
||
|
#include "common.h"
|
||
|
|
||
|
/*
|
||
|
** unsigned char *NWAnsiNext(unsigned char *puch);
|
||
|
**
|
||
|
** Moves to the next character in a string.
|
||
|
**
|
||
|
** Arguments: puch - pointer to current location in string
|
||
|
**
|
||
|
** Returns: char * - Pointer to next character in string.
|
||
|
**
|
||
|
** Globals: none
|
||
|
**
|
||
|
** N.b., if puch points to a null character, NWAnsiNext() will return puch.
|
||
|
*/
|
||
|
unsigned char *NWAnsiNext(unsigned char *puch)
|
||
|
{
|
||
|
if (*puch == '\0')
|
||
|
return(puch);
|
||
|
else if (IsDBCSLeadByte(*puch))
|
||
|
puch++;
|
||
|
|
||
|
puch++;
|
||
|
|
||
|
return(puch);
|
||
|
}
|
||
|
|
||
|
|
||
|
/*
|
||
|
** unsigned char *NWAnsiPrev(unsigned char *psz, unsigned char *puch);
|
||
|
**
|
||
|
** Moves back one character in a string.
|
||
|
**
|
||
|
** Arguments: psz - pointer to start of string
|
||
|
** puch - pointer to current location in string
|
||
|
**
|
||
|
** Returns: char * - Pointer to previous character in string.
|
||
|
**
|
||
|
** Globals: none
|
||
|
**
|
||
|
** N.b., if puch <= psz, NWAnsiPrev() will return psz.
|
||
|
**
|
||
|
** This function is implemented in a very slow fashion because we do not wish
|
||
|
** to trust that the given string is necessarily DBCS "safe," i.e., contains
|
||
|
** only single-byte characters and valid DBCS characters. So we start from
|
||
|
** the beginning of the string and work our way forward.
|
||
|
*/
|
||
|
unsigned char *NWAnsiPrev(unsigned char *psz, unsigned char *puch)
|
||
|
{
|
||
|
unsigned char *puchPrevious;
|
||
|
|
||
|
do
|
||
|
{
|
||
|
puchPrevious = psz;
|
||
|
psz = NWAnsiNext(psz);
|
||
|
} while (*psz != '\0' && psz < puch);
|
||
|
|
||
|
return(puchPrevious);
|
||
|
}
|
||
|
|