summaryrefslogtreecommitdiffstats
path: root/private/os2/client/dlldbcs.c
diff options
context:
space:
mode:
Diffstat (limited to 'private/os2/client/dlldbcs.c')
-rw-r--r--private/os2/client/dlldbcs.c163
1 files changed, 163 insertions, 0 deletions
diff --git a/private/os2/client/dlldbcs.c b/private/os2/client/dlldbcs.c
new file mode 100644
index 000000000..5beaf6f43
--- /dev/null
+++ b/private/os2/client/dlldbcs.c
@@ -0,0 +1,163 @@
+/*++
+
+Copyright (c) 1993 Microsoft Corporation
+
+Module Name:
+
+ dlldbcs.c
+
+Abstract:
+
+ This module contains the multibyte string functions.
+
+Author:
+
+ Akihiko Sasaki (V-AkihiS) 23-June-1993
+
+Revision History:
+
+--*/
+
+#ifdef DBCS
+
+#include "os2dll.h"
+#include "dlldbcs.h"
+#include "conrqust.h"
+#include "os2win.h"
+
+
+unsigned char * _CRTAPI1
+Od2MultiByteStrchr(
+ const unsigned char *string,
+ unsigned short c
+ )
+{
+ const unsigned char ch = (unsigned char)c;
+
+ while (*string != ch) {
+ if (Ow2NlsIsDBCSLeadByte(*string, SesGrp->DosCP)) {
+ string++;
+ }
+ if (*string == '\0')
+ return NULL;
+ string++;
+ }
+ return (unsigned char *)string;
+}
+
+unsigned char * _CRTAPI1
+Od2MultiByteStrrchr(
+ const unsigned char *string,
+ unsigned short c
+ )
+{
+ const unsigned char ch = (unsigned char)c;
+ const unsigned char *lastoccurence = NULL;
+
+ while (1) {
+ if (Ow2NlsIsDBCSLeadByte(*string, SesGrp->DosCP)) {
+ string++;
+ } else {
+ if (*string == ch)
+ lastoccurence = string;
+ }
+ if (*string == '\0')
+ return (unsigned char *)lastoccurence;
+ string++;
+ }
+}
+
+unsigned char * _CRTAPI1
+Od2MultiByteStrstr(
+ const unsigned char *string1,
+ const unsigned char *string2
+ )
+{
+ if (*string2 == '\0')
+ return (unsigned char *)string1;
+ while((string1 = Od2MultiByteStrchr(string1, *string2)) != NULL) {
+ const unsigned char *substring1 = string1;
+ const unsigned char *substring2 = string2;
+
+ while (1) {
+ if (Ow2NlsIsDBCSLeadByte(*substring1, SesGrp->DosCP)) {
+ if (Ow2NlsIsDBCSLeadByte(*substring2, SesGrp->DosCP)) {
+ if (*substring1++ == *substring2++) {
+ if (*substring2 == '\0')
+ if (*substring1 == '\0')
+ return (unsigned char *)string1;
+ else
+ return NULL;
+ else if (*substring1++ != *substring2++)
+ break;
+ } else {
+ if (*substring1 == '\0' || *substring2 == '\0')
+ return NULL;
+ substring1 +=2;
+ substring2 +=2;
+ }
+ } else {
+ if (*substring2 == '\0') {
+ return (unsigned char *)string1;
+ } else {
+ substring1++;
+ if (*substring1 == '\0')
+ return NULL;
+ substring1++;
+ substring2++;
+ }
+ }
+ } else {
+ if (Ow2NlsIsDBCSLeadByte(*substring2, SesGrp->DosCP)) {
+ if (*substring1 == '\0') {
+ return NULL;
+ } else {
+ substring2++;
+ if (*substring2 == '\0')
+ return NULL;
+ substring1++;
+ substring2++;
+ }
+
+ } else {
+ if (*substring2 == '\0')
+ return (unsigned char *)string1;
+ else if (*substring1 == '\0')
+ return NULL;
+ else if (*substring1++ != *substring2++)
+ break;
+ }
+ }
+ }
+ string1++;
+ }
+ return NULL;
+}
+
+unsigned char * _CRTAPI1
+Od2MultiByteStrpbrk(
+ const unsigned char *string1,
+ const unsigned char *string2
+ )
+{
+ const unsigned char *substring1, *substring2;
+
+ substring1 = string1;
+ while (*substring1 != '\0') {
+ substring2 = string2;
+ if (Ow2NlsIsDBCSLeadByte(*substring1, SesGrp->DosCP)) {
+ substring1++;
+ if (*substring1 == '\0')
+ return NULL;
+ } else {
+ while (*substring2 != '\0') {
+ if (*substring1 == *substring2)
+ return (unsigned char *)substring1;
+ substring2++;
+ }
+ }
+ substring1++;
+ }
+ return NULL;
+}
+#endif