summaryrefslogtreecommitdiff
path: root/support/dktools/dk3str.c
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-10-12 03:04:00 +0000
committerNorbert Preining <norbert@preining.info>2020-10-12 03:04:00 +0000
commit0ce40abb18ec02ec6fd6bcc5f21612c88daa7578 (patch)
tree416289fe1448873fd8ca33051f50ad85bffa8aaa /support/dktools/dk3str.c
parentfdb18507cd80dc17f5a5256153d34668b4f4e61c (diff)
CTAN sync 202010120303
Diffstat (limited to 'support/dktools/dk3str.c')
-rw-r--r--support/dktools/dk3str.c4674
1 files changed, 0 insertions, 4674 deletions
diff --git a/support/dktools/dk3str.c b/support/dktools/dk3str.c
deleted file mode 100644
index 5d86250ff9..0000000000
--- a/support/dktools/dk3str.c
+++ /dev/null
@@ -1,4674 +0,0 @@
-/*
-Copyright (C) 2011-2020, Dirk Krause
-SPDX-License-Identifier: BSD-3-Clause
-*/
-
-/*
- WARNING: This file was generated by the dkct program (see
- http://dktools.sourceforge.net/ for details).
- Changes you make here will be lost if dkct is run again!
- You should modify the original source and run dkct on it.
- Original source: dk3str.ctr
-*/
-
-/** @file dk3str.c The dk3str module.
-*/
-
-
-#line 1426 "dk3str.ctr"
-
-#include "dk3all.h"
-#include "dk3unused.h"
-
-
-
-
-
-#line 1433 "dk3str.ctr"
-
-
-/* ************************************************************************ */
-/* * * */
-/* * Static data * */
-/* * * */
-/* ************************************************************************ */
-
-
-#line 1438 "dk3str.ctr"
-
-
-/** The set of whitespace characters.
-*/
-static char const dk3str_c8_def_whsp[] = { " \t\r\n" };
-
-/** The current directory.
-*/
-static char const dk3str_c8_dot[] = { "." };
-
-/** The parent directory.
-*/
-static char const dk3str_c8_dot_dot[] = { ".." };
-
-/** File name separator.
-*/
-static char const dk3str_c8_fnsep[] = {
-#if DK3_ON_WINDOWS || DK3_HAVE_BACKSLASH
-"\\"
-#else
-"/"
-#endif
-};
-
-
-/** Keywords to set boolean values.
-*/
-static char const * const dk3str_c8_bool_kw[] = {
- "0",
- "n$o",
- "of$f",
- "f$alse",
- "-",
- "+",
- "1",
- "y$es",
- "on",
- "ok",
- "t$rue",
- NULL
-};
-
-/** Index of first "true" entry in \a dk3str_c8_bool_kw.
-*/
-#define INDEX_OF_FIRST_BOOLEAN_TRUE 5
-
-
-#if DK3_ON_WINDOWS || DK3_HAVE_BACKSLASH
-/** File name separator character.
-*/
-#define FNS_C8 '\\'
-/** Not the file name separator character.
-*/
-#define NO_FNS_C8 '/'
-#else
-/** File name separator character.
-*/
-#define FNS_C8 '/'
-/** Not the file name separator character.
-*/
-#define NO_FNS_C8 '\\'
-#endif
-
-
-
-/** Default white spaces set.
-*/
-static dk3_c16_t const c16_def_whsp[] = {
- 0x0020U, 0x0009U, 0x000AU, 0x000DU, 0U
-};
-
-/** The dot for the current directory.
-*/
-static dk3_c16_t const c16_dot[] = {
- 0x002EU, 0U
-};
-
-/** The dot dot for the parent directory.
-*/
-static dk3_c16_t const c16_dot_dot[] = {
- 0x002EU, 0x002EU, 0U
-};
-
-/** File name separator (slash or backslash).
-*/
-static dk3_c16_t const c16_fnsep[] = {
-#if DK3_ON_WINDOWS || DK3_HAVE_BACKSLASH
-0x005CU,
-#else
-0x002FU,
-#endif
-0U
-};
-
-#if DK3_ON_WINDOWS || DK3_HAVE_BACKSLASH
-/** File name separator for 16-bit character strings.
-*/
-#define FNS_C16 0x005CU
-/** Not the file name separator for 16-bit character strings.
-*/
-#define NO_FNS_C16 0x002FU
-#else
-/** File name separator for 16-bit character strings.
-*/
-#define FNS_C16 0x002FU
-/** Not the file name separator for 16-bit character strings.
-*/
-#define NO_FNS_C16 0x005CU
-#endif
-
-
-
-/** Default whitespaces set.
-*/
-static dk3_c32_t const c32_def_whsp[] = {
- 0x00000020UL, 0x00000009UL, 0x0000000AUL, 0x0000000DUL, 0UL
-};
-
-/** The dot is the current directory.
-*/
-static dk3_c32_t const c32_dot[] = {
- 0x0000002EUL, 0UL
-};
-
-/** The dot dot is the parent directory.
-*/
-static dk3_c32_t const c32_dot_dot[] = {
- 0x0000002EUL, 0x0000002EUL, 0UL
-};
-
-/** File name separator (slash or backslash).
-*/
-static dk3_c32_t const c32_fnsep[] = {
-#if DK3_ON_WINDOWS || DK3_HAVE_BACKSLASH
-0x0000005CUL,
-#else
-0x0000002FUL,
-#endif
-0U
-};
-
-#if DK3_ON_WINDOWS || DK3_HAVE_BACKSLASH
-/** File name separator for 32-bit character strings.
-*/
-#define FNS_C32 0x0000005CUL
-/** Not a file name separator for 32-bit character strings.
-*/
-#define NO_FNS_C32 0x0000002FUL
-#else
-/** File name separator for 32-bit character strings.
-*/
-#define FNS_C32 0x0000002FUL
-/** Not a file name separator for 32-bit character strings.
-*/
-#define NO_FNS_C32 0x0000005CUL
-#endif
-
-
-
-size_t
-dk3str_c8_len(char const *s)
-{
- register size_t back; /* Function result. */
-#if DK3_HAVE_STRLEN
- back = strlen(s);
-#else
- register char const *ptr; /* Pointer to traverse s. */
- back = 0; ptr = s;
- while(*(ptr++)) back++;
-#endif
- return back;
-}
-
-
-
-size_t
-dk3str_c16_len(dk3_c16_t const *s)
-{
- register size_t back;
-#if (DK3_HAVE_WCSLEN) && (DK3_SIZEOF_WCHAR_T == 2)
- back = wcslen(s);
-#else
-#if (DK3_HAVE__WCSLEN) && (DK3_SIZEOF_WCHAR_T == 2)
- back = _wcslen(s);
-#else
- register dk3_c16_t const *ptr; /* Traverse string. */
- back = 0; ptr = s;
- while(*(ptr++)) back++;
-#endif
-#endif
- return back;
-}
-
-
-
-size_t
-dk3str_c32_len(dk3_c32_t const *s)
-{
- register size_t back;
-#if (DK3_HAVE_WCSLEN) && (DK3_SIZEOF_WCHAR_T == 4)
- back = wcslen(s);
-#else
-#if (DK3_HAVE__WCSLEN) && (DK3_SIZEOF_WCHAR_T == 4)
- back = _wcslen(s);
-#else
- register dk3_c32_t const *ptr; /* Traverse source string. */
- back = 0; ptr = s;
- while(*(ptr++)) back++;
-#endif
-#endif
- return back;
-}
-
-
-
-size_t
-dk3str_len(dkChar const *s)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- return(dk3str_c32_len(s));
-#else
- return(dk3str_c16_len(s));
-#endif
-#else
- return(dk3str_c8_len(s));
-#endif
-}
-
-
-
-int
-dk3str_c8_cmp(char const *s1, char const *s2)
-{
- register int back; /* Function result. */
-#if DK3_HAVE_STRCMP
- back = strcmp(s1, s2);
-#else
- register char const *p1; /* Pointer to traverse s1. */
- register char const *p2; /* Pointer to traverse s2. */
- register int cc; /* Flag: Can continue. */
- back = 0; p1 = s1; p2 = s2; cc = 1;
- while((cc) && (back == 0)) {
- if(*p1 > *p2) {
- back = 1;
- } else {
- if(*p1 < *p2) {
- back = -1;
- } else {
- if((*p1) && (*p2)) {
- p1++; p2++;
- } else {
- cc = 0;
- }
- }
- }
- }
-#endif
- return back;
-}
-
-
-
-int
-dk3str_c16_cmp(dk3_c16_t const *s1, dk3_c16_t const *s2)
-{
- register int back;
-#if (DK3_HAVE_WCSCPY) && (DK3_SIZEOF_WCHAR_T == 2)
- back = wcscmp(s1, s2);
-#else
-#if (DK3_HAVE__WCSCPY) && (DK3_SIZEOF_WCHAR_T == 2)
- back = _wcscmp(s1, s2);
-#else
- register dk3_c16_t const *p1; /* Traverse left string. */
- register dk3_c16_t const *p2; /* Traverse right string. */
- register int cc; /* Flag: Can continue. */
-
- back = 0; p1 = s1; p2 = s2; cc = 1;
- while((cc) && (back == 0)) {
- if(*p1 > *p2) {
- back = 1;
- } else {
- if(*p1 < *p2) {
- back = -1;
- } else {
- if((*p1) && (*p2)) {
- p1++; p2++;
- } else {
- cc = 0;
- }
- }
- }
- }
-#endif
-#endif
- return back;
-}
-
-
-
-int
-dk3str_c32_cmp(dk3_c32_t const *s1, dk3_c32_t const *s2)
-{
- register int back;
-#if (DK3_HAVE_WCSCMP) && (DK3_SIZEOF_WCHAR_T == 4)
- back = wcscmp(s1, s2);
-#else
-#if (DK3_HAVE__WCSCMP) && (DK3_SIZEOF_WCHAR_T == 4)
- back = _wcscmp(s1, s2);
-#else
- register dk3_c32_t const *p1; /* Traverse left string. */
- register dk3_c32_t const *p2; /* Traverse right string. */
- register int cc; /* Flag: Can continue. */
-
- back = 0; p1 = s1; p2 = s2; cc = 1;
- while((cc) && (back == 0)) {
- if(*p1 > *p2) {
- back = 1;
- } else {
- if(*p1 < *p2) {
- back = -1;
- } else {
- if((*p1) && (*p2)) {
- p1++; p2++;
- } else {
- cc = 0;
- }
- }
- }
- }
-#endif
-#endif
- return back;
-}
-
-
-
-int
-dk3str_cmp(dkChar const *s1, dkChar const *s2)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- return(dk3str_c32_cmp(s1, s2));
-#else
- return(dk3str_c16_cmp(s1, s2));
-#endif
-#else
- return(dk3str_c8_cmp(s1, s2));
-#endif
-}
-
-
-
-int
-dk3str_c8_casecmp(char const *s1, char const *s2)
-{
- register int back; /* Function result. */
-#if DK3_HAVE_STRCASECMP
- back = strcasecmp(s1, s2);
-#else
-#if DK3_HAVE_STRICMP && (!DK3_ON_WINDOWS)
- back = stricmp(s1, s2);
-#else
-#if DK3_HAVE__STRICMP || DK3_ON_WINDOWS
- back = _stricmp(s1, s2);
-#else
- register char const *p1; /* Pointer to traverse s1. */
- register char const *p2; /* Pointer to traverse s2. */
- register char c1; /* Current character from s1. */
- register char c2; /* Current character from s2. */
- register int cc; /* Flag: Can continue. */
- back = 0; p1 = s1; p2 = s2; cc = 1;
- while((cc) && (back == 0)) {
- c1 = *p1; c2 = *p2;
- if((c1 >= 'A') && (c1 <= 'Z')) { c1 = 'a' + (c1 - 'A'); }
- if((c2 >= 'A') && (c2 <= 'Z')) { c2 = 'a' + (c2 - 'A'); }
- if(c1 > c2) {
- back = 1;
- } else {
- if(c1 < c2) {
- back = -1;
- } else {
- if((c1) && (c2)) {
- p1++; p2++;
- } else {
- cc = 0;
- }
- }
- }
- }
-#endif
-#endif
-#endif
- return back;
-}
-
-
-
-int
-dk3str_c16_casecmp(dk3_c16_t const *s1, dk3_c16_t const *s2)
-{
- register int back;
-#if (DK3_HAVE_WCSICMP) && (DK3_SIZEOF_WCHAR_T == 2)
- back = wcsicmp(s1, s2);
-#else
-#if (DK3_HAVE__WCSICMP) && (DK3_SIZEOF_WCHAR_T == 2)
- back = _wcsicmp(s1, s2);
-#else
- register dk3_c16_t const *p1; /* Traverse left string. */
- register dk3_c16_t const *p2; /* Traverse right string. */
- register dk3_c16_t c1; /* Left character. */
- register dk3_c16_t c2; /* Right character. */
- register int cc; /* Flag: Can continue. */
-
-
-#line 1852 "dk3str.ctr"
- back = 0; p1 = s1; p2 = s2; cc = 1;
- while((cc) && (back == 0)) {
- c1 = *p1; c2 = *p2;
- if((c1 >= 0x0041U) && (c1 <= 0x005AU)) { c1 = 0x0061U + (c1 - 0x0041U); }
- if((c2 >= 0x0041U) && (c2 <= 0x005AU)) { c2 = 0x0061U + (c2 - 0x0041U); }
- if(c1 > c2) {
- back = 1;
- } else {
- if(c1 < c2) {
- back = -1;
- } else {
- if((c1) && (c2)) {
- p1++; p2++;
- } else {
- cc = 0;
- }
- }
- }
- }
-
-#line 1871 "dk3str.ctr"
-#endif
-#endif
- return back;
-}
-
-
-
-int
-dk3str_c32_casecmp(dk3_c32_t const *s1, dk3_c32_t const *s2)
-{
- register int back;
-#if (DK3_HAVE_WCSICMP) && (DK3_SIZEOF_WCHAR_T == 4)
- back = wcsicmp(s1, s2);
-#else
-#if (DK3_HAVE__WCSICMP) && (DK3_SIZEOF_WCHAR_T == 4)
- back = _wcsicmp(s1, s2);
-#else
- register dk3_c32_t const *p1; /* Traverse left string. */
- register dk3_c32_t const *p2; /* Traverse right string. */
- register dk3_c32_t c1; /* Left character. */
- register dk3_c32_t c2; /* Right character. */
- register int cc; /* Flag: Can continue. */
-
- back = 0; p1 = s1; p2 = s2; cc = 1;
- while((cc) && (back == 0)) {
- c1 = *p1; c2 = *p2;
- if((c1 >= (dk3_c32_t)0x00000041UL) && (c1 <= (dk3_c32_t)0x0000005AUL)) {
- c1 = 0x00000061UL + (c1 - 0x00000041UL);
- }
- if((c2 >= (dk3_c32_t)0x00000041UL) && (c2 <= (dk3_c32_t)0x0000005AUL)) {
- c2 = 0x00000061UL + (c2 - 0x00000041UL);
- }
- if(c1 > c2) {
- back = 1;
- } else {
- if(c1 < c2) {
- back = -1;
- } else {
- if((c1) && (c2)) {
- p1++; p2++;
- } else {
- cc = 0;
- }
- }
- }
- }
-#endif
-#endif
- return back;
-}
-
-
-
-int
-dk3str_casecmp(dkChar const *s1, dkChar const *s2)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- return(dk3str_c32_casecmp(s1, s2));
-#else
- return(dk3str_c16_casecmp(s1, s2));
-#endif
-#else
- return(dk3str_c8_casecmp(s1, s2));
-#endif
-}
-
-
-
-int
-dk3str_fncmp(dkChar const *s1, dkChar const *s2)
-{
-#if DK3_ON_WINDOWS || DK3_HAVE_FNCASEINS
- return(dk3str_casecmp(s1, s2));
-#else
- return(dk3str_cmp(s1, s2));
-#endif
-}
-
-
-int
-dk3str_c8_ncmp(char const *s1, char const *s2, size_t n)
-{
- register int back; /* Function result. */
-#if DK3_HAVE_STRNCMP
- back = strncmp(s1, s2, n);
-#else
- register char const *p1; /* Pointer to traverse s1. */
- register char const *p2; /* Pointer to traverse s2. */
- register size_t max; /* Register copy of n. */
- register size_t used; /* Number of chars already used. */
- back = 0; p1 = s1; p2 = s2; max = n; used = 0;
- while((used < max) && (back == 0)) {
- if(*p1 > *p2) {
- back = 1;
- } else {
- if(*p1 < *p2) {
- back = -1;
- } else {
- if((*p1) && (*p2)) {
- p1++; p2++; used++;
- } else {
- used = max;
- }
- }
- }
- }
-#endif
- return back;
-}
-
-
-
-int
-dk3str_c16_ncmp(dk3_c16_t const *s1, dk3_c16_t const *s2, size_t n)
-{
- register int back;
-#if (DK3_HAVE_WCSNCMP) && (DK3_SIZEOF_WCHAR_T == 2)
- back = wcsncmp(s1, s2, n);
-#else
-#if (DK3_HAVE__WCSNCMP) && (DK3_SIZEOF_WCHAR_T == 2)
- back = _wcsncmp(s1, s2, n);
-#else
- register dk3_c16_t const *p1; /* Traverse left string. */
- register dk3_c16_t const *p2; /* Traverse right string. */
- register size_t max; /* Maximum number of characters to compare. */
- register size_t used; /* Number of characters already compared. */
-
- back = 0; p1 = s1; p2 = s2; max = n; used = 0;
- while((used < max) && (back == 0)) {
- if(*p1 > *p2) {
- back = 1;
- } else {
- if(*p1 < *p2) {
- back = -1;
- } else {
- if((*p1) && (*p2)) {
- p1++; p2++; used++;
- } else {
- used = max;
- }
- }
- }
- }
-#endif
-#endif
- return back;
-}
-
-
-
-int
-dk3str_c32_ncmp(dk3_c32_t const *s1, dk3_c32_t const *s2, size_t n)
-{
- register int back;
-#if (DK3_HAVE_WCSNCMP) && (DK3_SIZEOF_WCHAR_T == 4)
- back = wcsncmp(s1, s2, n);
-#else
-#if (DK3_HAVE__WCSNCMP) && (DK3_SIZEOF_WCHAR_T == 4)
- back = _wcsncmp(s1, s2, n);
-#else
- register dk3_c32_t const *p1; /* Traverse left string. */
- register dk3_c32_t const *p2; /* Traverse right string. */
- register size_t max; /* Maximum number of characters to compare. */
- register size_t used; /* Number of characters used. */
-
- back = 0; p1 = s1; p2 = s2; max = n; used = 0;
- while((used < max) && (back == 0)) {
- if(*p1 > *p2) {
- back = 1;
- } else {
- if(*p1 < *p2) {
- back = -1;
- } else {
- if((*p1) && (*p2)) {
- p1++; p2++; used++;
- } else {
- used = max;
- }
- }
- }
- }
-#endif
-#endif
- return back;
-}
-
-
-
-int
-dk3str_ncmp(dkChar const *s1, dkChar const *s2, size_t n)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- return(dk3str_c32_ncmp(s1, s2, n));
-#else
- return(dk3str_c16_ncmp(s1, s2, n));
-#endif
-#else
- return(dk3str_c8_ncmp(s1, s2, n));
-#endif
-}
-
-
-
-char *
-dk3str_c8_chr(char const *s, char c)
-{
- register char *back; /* Function result. */
-#if DK3_HAVE_STRCHR
-#ifdef __cplusplus
- back = (char *)strchr(s, c);
-#else
- back = strchr(s, c);
-#endif
-#else
- register char const *ptr; /* Pointer to traverse s. */
- register char chr; /* Register copy of c. */
- back = NULL; ptr = s; chr = c;
- while((*ptr) && (back == NULL)) {
- if(*ptr == chr) { back = (char *)ptr; } else { ptr++; }
- }
-#endif
- return back;
-}
-
-
-
-dk3_c16_t *
-dk3str_c16_chr(dk3_c16_t const *s, dk3_c16_t c)
-{
- register dk3_c16_t *back;
-#if (DK3_HAVE_WCSCHR) && (DK3_SIZEOF_WCHAR_T == 2)
- back = wcschr(s, c);
-#else
-#if (DK3_HAVE__WCSCHR) && (DK3_SIZEOF_WCHAR_T == 2)
- back = _wcschr(s, c);
-#else
- register dk3_c16_t const *ptr; /* Traverse source string. */
- register dk3_c16_t chr; /* Character to search for. */
- back = NULL; ptr = s; chr = c;
- while((*ptr) && (back == NULL)) {
- if(*ptr == chr) { back = (dk3_c16_t *)ptr; } else { ptr++; }
- }
-#endif
-#endif
- return back;
-}
-
-
-
-dk3_c32_t *
-dk3str_c32_chr(dk3_c32_t const *s, dk3_c32_t c)
-{
- register dk3_c32_t *back;
-#if (DK3_HAVE_WCSCHR) && (DK3_SIZEOF_WCHAR_T == 4)
-#ifdef __cplusplus
- back = (dk3_c32_t *)wcschr(s, c);
-#else
- back = wcschr(s, c);
-#endif
-#else
-#if (DK3_HAVE__WCSCHR) && (DK3_SIZEOF_WCHAR_T == 4)
- back = _wcschr(s, c);
-#else
- register dk3_c32_t const *ptr; /* Traverse source string. */
- register dk3_c32_t chr; /* Character to find. */
-
- back = NULL; ptr = s; chr = c;
- while((*ptr) && (back == NULL)) {
- if(*ptr == chr) { back = (dk3_c32_t *)ptr; } else { ptr++; }
- }
-#endif
-#endif
- return back;
-}
-
-
-
-dkChar *
-dk3str_chr(dkChar const *s, dkChar c)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- return(dk3str_c32_chr(s, c));
-#else
- return(dk3str_c16_chr(s, c));
-#endif
-#else
- return(dk3str_c8_chr(s, c));
-#endif
-}
-
-
-char *
-dk3str_c8_rchr(char const *s, char c)
-{
- register char *back; /* Function result. */
-#if DK3_HAVE_STRRCHR
-#ifdef __cplusplus
- back = (char *)strrchr(s, c);
-#else
- back = strrchr(s, c);
-#endif
-#else
- register char const *ptr; /* Pointer to traverse s. */
- register char chr; /* Register copy of c. */
- back = NULL; ptr = s; chr = c;
- while(*ptr) {
- if(*ptr == chr) { back = (char *)ptr; }
- ptr++;
- }
-#endif
- return back;
-}
-
-
-
-
-dk3_c16_t *
-dk3str_c16_rchr(dk3_c16_t const *s, dk3_c16_t c)
-{
- register dk3_c16_t *back;
-#if (DK3_HAVE_WCSRCHR) && (DK3_SIZEOF_WCHAR_T == 2)
- back = wcsrchr(s, c);
-#else
-#if (DK3_HAVE__WCSRCHR) && (DK3_SIZEOF_WCHAR_T == 2)
- back = _wcsrchr(s, c);
-#else
- register dk3_c16_t const *ptr; /* Traverse the string. */
- register dk3_c16_t chr; /* Character to search for. */
- back = NULL; ptr = s; chr = c;
- while(*ptr) {
- if(*ptr == chr) { back = (dk3_c16_t *)ptr; }
- ptr++;
- }
-#endif
-#endif
- return back;
-}
-
-
-
-dk3_c32_t *
-dk3str_c32_rchr(dk3_c32_t const *s, dk3_c32_t c)
-{
- register dk3_c32_t *back;
-#if (DK3_HAVE_WCSRCHR) && (DK3_SIZEOF_WCHAR_T == 4)
-#ifdef __cplusplus
- back = (dk3_c32_t *)wcsrchr(s, c);
-#else
- back = wcsrchr(s, c);
-#endif
-#else
-#if (DK3_HAVE__WCSRCHR) && (DK3_SIZEOF_WCHAR_T == 4)
-#ifdef __cplusplus
- back = (dk4_c32_t *)_wcsrchr(s, c);
-#else
- back = _wcsrchr(s, c);
-#endif
-#else
- register dk3_c32_t const *ptr; /* Traverse source string. */
- register dk3_c32_t chr; /* Character to search for. */
-
- back = NULL; ptr = s; chr = c;
- while(*ptr) {
- if(*ptr == chr) { back = (dk3_c32_t *)ptr; }
- ptr++;
- }
-#endif
-#endif
- return back;
-}
-
-
-
-dkChar *
-dk3str_rchr(dkChar const *s, dkChar c)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- return(dk3str_c32_rchr(s, c));
-#else
- return(dk3str_c16_rchr(s, c));
-#endif
-#else
- return(dk3str_c8_rchr(s, c));
-#endif
-}
-
-
-void
-dk3str_c8_cpy(char *d, char const *s)
-{
- register char *dp; /* Destination buffer pointer. */
- register char const *sp; /* Source buffer pointer. */
- register char x;
- dp = d; sp = s;
- while(*sp) { x = *(sp++); *(dp++) = x; }
- *dp = '\0';
-}
-
-
-
-void
-dk3str_c16_cpy(dk3_c16_t *d, dk3_c16_t const *s)
-{
- register dk3_c16_t *dp; /* Destination pointer. */
- register dk3_c16_t const *sp; /* Source pointer. */
- register dk3_c16_t x; /* Current character. */
-
- dp = d; sp = s;
- while(*sp) { x = *(sp++); *(dp++) = x; }
- *dp = 0U;
-}
-
-
-
-void
-dk3str_c32_cpy(dk3_c32_t *d, dk3_c32_t const *s)
-{
- register dk3_c32_t *dp; /* Destination pointer. */
- register dk3_c32_t const *sp; /* Source pointer. */
- register dk3_c32_t x; /* Current character. */
- dp = d; sp = s;
- while(*sp) { x = *(sp++); *(dp++) = x; }
- *dp = 0UL;
-}
-
-
-
-void
-dk3str_cpy(dkChar *d, dkChar const *s)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- dk3str_c32_cpy(d, s);
-#else
- dk3str_c16_cpy(d, s);
-#endif
-#else
- dk3str_c8_cpy(d, s);
-#endif
-}
-
-
-void
-dk3str_c8_cpy_not_overlapped(char *d, char const *s)
-{
-#if DK3_HAVE_STRCPY
- strcpy(d, s);
-#else
-#if DK3_HAVE_STRLEN
- size_t sz;
- int ec = 0;
- sz = dk3mem_add_size_t(1, strlen(s), &ec);
- if((0 != sz) && (0 == ec)) {
- dk3mem_cpy(d,s,sz);
- } else {
- dk3str_c8_cpy(d, s);
- }
-#else
- dk3str_c8_cpy(d, s);
-#endif
-#endif
-}
-
-
-
-void
-dk3str_c16_cpy_not_overlapped(dk3_c16_t *d, dk3_c16_t const *s)
-{
-#if (DK3_HAVE_WCSCPY) && (DK3_SIZEOF_WCHAR_T == 2)
- wcscpy(d, s);
-#else
-#if (DK3_HAVE__WCSCPY) && (DK3_SIZEOF_WCHAR_T == 2)
- _wcscpy(d, s);
-#else
-#if (DK3_HAVE_WCSLEN) && (DK3_SIZEOF_WCHAR_T == 2)
- size_t sz;
- int ec = 0;
- sz = dk3mem_mul_size_t(2, dk3mem_add_size_t(1, wcslen(s), &ec), &ec);
- if((0 != sz) && (0 == ec)) {
- dk3mem_cpy(d, s, sz);
- } else {
- dk3str_c16_cpy(d,s);
- }
-#else
-#if (DK3_HAVE__WCSLEN) && (DK3_SIZEOF_WCHAR_T == 2)
- size_t sz;
- int ec = 0;
- sz = dk3mem_mul_size_t(2, dk3mem_add_size_t(1, _wcslen(s), &ec), &ec);
- if((0 != sz) && (0 == ec)) {
- dk3mem_cpy(d, s, sz);
- } else {
- dk3str_c16_cpy(d,s);
- }
-#else
- dk3str_c16_cpy(d,s);
-#endif
-#endif
-#endif
-#endif
-}
-
-
-
-void
-dk3str_c32_cpy_not_overlapped(dk3_c32_t *d, dk3_c32_t const *s)
-{
-#if (DK3_HAVE_WCSCPY) && (DK3_SIZEOF_WCHAR_T == 4)
- wcscpy(d, s);
-#else
-#if (DK3_HAVE__WCSCPY) && (DK3_SIZEOF_WCHAR_T == 4)
- _wcscpy(d, s);
-#else
-#if (DK3_HAVE_WCSLEN) && (DK3_SIZEOF_WCHAR_T == 4)
- size_t sz;
- int ec = 0;
- sz = dk3mem_mul_size_t(4, dk3mem_add_size_t(1, wcslen(s), &ec), &ec);
- if((0 != sz) && (0 == ec)) {
- dk3mem_cpy(d, s, sz);
- } else {
- dk3str_c32_cpy(d,s);
- }
-#else
-#if (DK3_HAVE__WCSLEN) && (DK3_SIZEOF_WCHAR_T == 4)
- size_t sz;
- int ec = 0;
- sz = dk3mem_mul_size_t(4, dk3mem_add_size_t(1, _wcslen(s), &ec), &ec);
- if((0 != sz) && (0 == ec)) {
- dk3mem_cpy(d, s, sz);
- } else {
- dk3str_c32_cpy(d,s);
- }
-#else
- dk3str_c32_cpy(d,s);
-#endif
-#endif
-#endif
-#endif
-}
-
-
-
-void
-dk3str_cpy_not_overlapped(dkChar *d, dkChar const *s)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- dk3str_c32_cpy_not_overlapped(d, s);
-#else
- dk3str_c16_cpy_not_overlapped(d, s);
-#endif
-#else
- dk3str_c8_cpy_not_overlapped(d, s);
-#endif
-}
-
-
-void
-dk3str_c8_ncpy(char *d, char const *s, size_t n)
-{
-#if DK3_HAVE_STRNCPY
- strncpy(d,s,n);
- d[n-1] = '\0';
-#else
- register char *dp; /* Destination buffer pointer. */
- register char const *sp; /* Source buffer pointer. */
- register size_t max; /* Register copy of n. */
- register size_t used; /* Number of characters already copied. */
- register char x;
- dp = d; sp = s; max = n; used = 0;
- while((*sp) && (used < max)) { x = *(sp++); *(dp++) = x; used++; }
- if(used < max) { *dp = '\0'; }
- else { d[max - 1] = '\0'; }
-#endif
-}
-
-
-
-void
-dk3str_c16_ncpy(dk3_c16_t *d, dk3_c16_t const *s, size_t n)
-{
-#if (DK3_HAVE_WCSNCPY) && (DK3_SIZEOF_WCHAR_T == 2)
- wcsncpy(d,s,n);
- d[n-1] = 0U;
-#else
-#if (DK3_HAVE__WCSNCPY) && (DK3_SIZEOF_WCHAR_T == 2)
- _wcsncpy(d,s,n);
- d[n-1] = 0U;
-#else
- register dk3_c16_t *dp; /* Destionation pointer. */
- register dk3_c16_t const *sp; /* Source pointer. */
- register dk3_c16_t x; /* Current character. */
- register size_t max; /* Maximum number of characters to copy. */
- register size_t used; /* Characters already copied. */
-
- dp = d; sp = s; max = n; used = 0;
- while((*sp) && (used < max)) { x = *(sp++); *(dp++) = x; used++; }
- if(used < max) { *dp = 0U; }
- else { d[max - 1] = 0U; }
-#endif
-#endif
-}
-
-
-
-void
-dk3str_c32_ncpy(dk3_c32_t *d, dk3_c32_t const *s, size_t n)
-{
-#if (DK3_HAVE_WCSNCPY) && (DK3_SIZEOF_WCHAR_T == 4)
- wcsncpy(d,s,n);
- d[n-1] = 0UL;
-#else
-#if (DK3_HAVE__WCSNCPY) && (DK3_SIZEOF_WCHAR_T == 4)
- _wcsncpy(d,s,n);
- d[n-1] = 0UL;
-#else
- register dk3_c32_t *dp; /* Destination pointer. */
- register dk3_c32_t const *sp; /* Source pointer. */
- register dk3_c32_t x; /* Current character. */
- register size_t max; /* Maximum number of characters to copy. */
- register size_t used; /* Number of characters copied. */
-
- dp = d; sp = s; max = n; used = 0;
- while((*sp) && (used < max)) { x = *(sp++); *(dp++) = x; used++; }
- if(used < max) { *dp = 0UL; }
- else { d[max - 1] = 0UL; }
-#endif
-#endif
-}
-
-
-
-void
-dk3str_ncpy(dkChar *d, dkChar const *s, size_t n)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- dk3str_c32_ncpy(d, s, n);
-#else
- dk3str_c16_ncpy(d, s, n);
-#endif
-#else
- dk3str_c8_ncpy(d, s, n);
-#endif
-}
-
-
-
-void
-dk3str_c8_cat(char *d, char const *s)
-{
-#if DK3_HAVE_STRCAT
- strcat(d, s);
-#else
- register char *dp; /* Destination buffer pointer. */
- register char const *sp; /* Source buffer pointer. */
- register char x;
- dp = d; sp = s;
- while(*dp) dp++;
- while(*sp) { x = *(sp++); *(dp++) = x; }
- *dp = '\0';
-#endif
-}
-
-
-
-void
-dk3str_c16_cat(dk3_c16_t *d, dk3_c16_t const *s)
-{
-#if (DK3_HAVE_WCSCAT) && (DK3_SIZEOF_WCHAR_T == 2)
- wcscat(d, s);
-#else
-#if (DK3_HAVE__WCSCAT) && (DK3_SIZEOF_WCHAR_T == 2)
- _wcscat(d, s);
-#else
- register dk3_c16_t *dp; /* Destination pointer. */
- register dk3_c16_t const *sp; /* Source pointer. */
- register dk3_c16_t x; /* Current character. */
- dp = d; sp = s;
- while(*dp) dp++;
- while(*sp) { x = *(sp++); *(dp++) = x; }
- *dp = 0U;
-#endif
-#endif
-}
-
-
-
-void
-dk3str_c32_cat(dk3_c32_t *d, dk3_c32_t const *s)
-{
-#if (DK3_HAVE_WCSCAT) && (DK3_SIZEOF_WCHAR_T == 4)
- wcscat(d, s);
-#else
-#if (DK3_HAVE__WCSCAT) && (DK3_SIZEOF_WCHAR_T == 4)
- _wcscat(d, s);
-#else
- register dk3_c32_t *dp; /* Destination pointer. */
- register dk3_c32_t const *sp; /* Source pointer. */
- register dk3_c32_t x; /* Current character. */
-
- dp = d; sp = s;
- while(*dp) dp++;
- while(*sp) { x = *(sp++); *(dp++) = x; }
- *dp = 0UL;
-#endif
-#endif
-}
-
-
-
-void
-dk3str_cat(dkChar *d, dkChar const *s)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- dk3str_c32_cat(d, s);
-#else
- dk3str_c16_cat(d, s);
-#endif
-#else
- dk3str_c8_cat(d, s);
-#endif
-}
-
-
-
-/** Report memory allocation error.
- @param app Application structure.
- @param elsize Size of one character.
- @param nelem Number of characters required.
-*/
-static
-void
-dk3str_memory_error(dk3_app_t *app, size_t elsize, size_t nelem)
-{
-#if VERSION_BEFORE_20140716
- dkChar bu1[64];
- unsigned long prod;
- prod = (unsigned long)elsize * (unsigned long)nelem;
- dk3sf_sprintf3(bu1, dkT("%lu"), prod);
- dk3app_log_i3(app, DK3_LL_ERROR, 12, 13, bu1);
-#else
- dkChar bu1[64];
- dk3_um_t prod;
- int mec = 0;
- prod = dk3ma_um_mul_ok((dk3_um_t)elsize, (dk3_um_t)nelem, &mec);
- if (0 == mec) {
- if (dk3ma_um_to_string(bu1, DK3_SIZEOF(bu1,dkChar), (dk3_um_t)prod)) {
- dk3app_log_i3(app, DK3_LL_ERROR, 12, 13, bu1);
- }
- } else {
- /* Math overflow in size calculation */
- dk3app_log_i1(app, DK3_LL_ERROR, 15);
- }
-#endif
-}
-
-
-
-char *
-dk3str_c8_dup_app(char const *s, dk3_app_t *app)
-{
- char *back;
-#if DK3_HAVE_STRDUP && (!DK3_ON_WINDOWS)
- back = strdup(s);
- if(!(back)) {
- if(app) {
- dk3str_memory_error(app, 1, (1+strlen(s)));
- }
- }
-#else
-#if DK3_HAVE__STRDUP || DK3_ON_WINDOWS
- back = _strdup(s);
- if(!(back)) {
- if(app) {
- dk3str_memory_error(app, 1, (1+strlen(s)));
- }
- }
-#else
- size_t sz;
- sz = 1 + dk3str_c8_len(s);
- if(app) {
- back = dk3_new_app(char,sz,app);
- } else {
- back = dk3_new(char,sz);
- }
- if(back) {
- dk3str_c8_cpy_not_overlapped(back, s);
- }
-#endif
-#endif
- return back;
-}
-
-
-
-dk3_c16_t *
-dk3str_c16_dup_app(dk3_c16_t const *s, dk3_app_t *app)
-{
- dk3_c16_t *back;
-#if (DK3_HAVE_WCSDUP) && (DK3_SIZEOF_WCHAR_T == 2)
- back = wcsdup(s);
- if(!(back)) {
- if(app) {
- dk3str_memory_error(app, 2, (1 + dk3str_c16_len(s)));
- }
- }
-#else
-#if (DK3_HAVE__WCSDUP) && (DK3_SIZEOF_WCHAR_T == 2)
- back = _wcsdup(s);
- if(!(back)) {
- if(app) {
- dk3str_memory_error(app, 2, (1 + dk3str_c16_len(s)));
- }
- }
-#else
- size_t sz;
- sz = 1 + dk3str_c16_len(s);
- if(app) {
- back = dk3_new_app(dk3_c16_t,sz,app);
- } else {
- back = dk3_new(dk3_c16_t,sz);
- }
- if(back) {
- dk3str_c16_cpy_not_overlapped(back, s);
- }
-#endif
-#endif
- return back;
-}
-
-
-
-dk3_c32_t *
-dk3str_c32_dup_app(dk3_c32_t const *s, dk3_app_t *app)
-{
- dk3_c32_t *back;
-#if (DK3_HAVE_WCSDUP) && (DK3_SIZEOF_WCHAR_T == 4)
- back = wcsdup(s);
- if(!(back)) {
- if(app) {
- dk3str_memory_error(app, 4, (1 + dk3str_c32_len(s)));
- }
- }
-#else
-#if (DK3_HAVE__WCSDUP) && (DK3_SIZEOF_WCHAR_T == 4)
- back = _wcsdup(s);
- if(!(back)) {
- if(app) {
- dk3str_memory_error(app, 4, (1 + dk3str_c32_len(s)));
- }
- }
-#else
- size_t sz;
- sz = 1 + dk3str_c32_len(s);
- if(app) {
- back = dk3_new_app(dk3_c32_t,sz,app);
- } else {
- back = dk3_new(dk3_c32_t,sz);
- }
- if(back) {
- dk3str_c32_cpy(back, s);
- }
-#endif
-#endif
- return back;
-}
-
-
-
-dkChar *
-dk3str_dup_app(dkChar const *s, dk3_app_t *app)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- return(dk3str_c32_dup_app(s, app));
-#else
- return(dk3str_c16_dup_app(s, app));
-#endif
-#else
- return(dk3str_c8_dup_app(s, app));
-#endif
-}
-
-
-char
-dk3str_c8_tolower(char c)
-{
- char back; /* Function result. */
- back = c;
- if((back >= 'A') && (back <= 'Z')) {
- back = 'a' + (back - 'A');
- }
- return back;
-}
-
-
-
-dk3_c16_t
-dk3str_c16_tolower(dk3_c16_t c)
-{
- dk3_c16_t back;
- back = c;
- if((back >= 0x0041U) && (back <= 0x005AU)) {
- back = 0x0061U + (back - 0x0041U);
- }
- return back;
-}
-
-
-
-dk3_c32_t
-dk3str_c32_tolower(dk3_c32_t c)
-{
- dk3_c32_t back;
- back = c;
- if((back >= (dk3_c32_t)0x00000041UL) && (back <= (dk3_c32_t)0x0000005AUL)) {
- back = (dk3_c32_t)0x00000061UL + (back - (dk3_c32_t)0x00000041UL);
- }
- return back;
-}
-
-
-
-dkChar
-dk3str_tolower(dkChar c)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- return(dk3str_c32_tolower(c));
-#else
- return(dk3str_c16_tolower(c));
-#endif
-#else
- return(dk3str_c8_tolower(c));
-#endif
-}
-
-
-
-char
-dk3str_c8_toupper(char c)
-{
- char back; /* Function result. */
- back = c;
- if((back >= 'a') && (back <= 'z')) {
- back = 'A' + (back - 'a');
- }
- return back;
-}
-
-
-
-dk3_c16_t
-dk3str_c16_toupper(dk3_c16_t c)
-{
- dk3_c16_t back;
- back = c;
- if((back >= 0x0061U) && (back <= 0x007AU)) {
- back = 0x0041U + (back - 0x0061U);
- }
- return back;
-}
-
-
-
-dk3_c32_t
-dk3str_c32_toupper(dk3_c32_t c)
-{
- dk3_c32_t back;
- back = c;
- if((back >= (dk3_c32_t)0x00000061UL) && (back <= (dk3_c32_t)0x0000007AUL)) {
- back = (dk3_c32_t)0x00000041UL + (back - (dk3_c32_t)0x00000061UL);
- }
- return back;
-}
-
-
-
-dkChar
-dk3str_toupper(dkChar c)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- return(dk3str_c32_toupper(c));
-#else
- return(dk3str_c16_toupper(c));
-#endif
-#else
- return(dk3str_c8_toupper(c));
-#endif
-}
-
-
-
-char *
-dk3str_c8_start(char const *str, char const *whsp)
-{
- char *back = NULL; /* Function result. */
- char const *ptr; /* Pointer to traverse str. */
- char const *wh; /* Whitespaces set. */
-
-
-#line 2877 "dk3str.ctr"
- if(str) {
- wh = (whsp ? whsp : dk3str_c8_def_whsp);
- ptr = str;
- while((*ptr) && (!(back))) {
- if(dk3str_c8_chr(wh,*ptr)) {
- ptr++;
- } else {
- back = (char *)ptr;
- }
- }
- }
-
-#line 2888 "dk3str.ctr"
- return back;
-}
-
-
-
-dk3_c16_t *
-dk3str_c16_start(dk3_c16_t const *str, dk3_c16_t const *whsp)
-{
- dk3_c16_t *back = NULL;
- dk3_c16_t const *ptr; /* Pointer into string. */
- dk3_c16_t const *wh; /* Whitespaces set. */
-
- if(str) {
- wh = (whsp ? whsp : c16_def_whsp);
- ptr = str;
- while((*ptr) && (!(back))) {
- if(dk3str_c16_chr(wh, *ptr)) {
- ptr++;
- } else {
- back = (dk3_c16_t *)ptr;
- }
- }
- }
- return back;
-}
-
-
-
-dk3_c32_t *
-dk3str_c32_start(dk3_c32_t const *str, dk3_c32_t const *whsp)
-{
- dk3_c32_t *back = NULL;
- dk3_c32_t const *ptr = NULL; /* Current character. */
- dk3_c32_t const *wh = NULL; /* Whitespaces set. */
-
-
-#line 2923 "dk3str.ctr"
- if(str) {
- wh = (whsp ? whsp : c32_def_whsp);
- ptr = str;
- while((*ptr) && (!(back))) {
- if(dk3str_c32_chr(wh, *ptr)) {
- ptr++;
- } else {
- back = (dk3_c32_t *)ptr;
- }
- }
- }
-
-#line 2934 "dk3str.ctr"
- return back;
-}
-
-
-
-dkChar *
-dk3str_start(dkChar const *str, dkChar const *whsp)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- return(dk3str_c32_start(str, whsp));
-#else
- return(dk3str_c16_start(str, whsp));
-#endif
-#else
- return(dk3str_c8_start(str, whsp));
-#endif
-}
-
-
-
-char *
-dk3str_c8_next(char *str, char const *whsp)
-{
- char *back = NULL; /* Function result. */
- char *ptr = NULL; /* Pointer to traverse str. */
- char const *wh = NULL; /* Whitespaces set to use. */
- int state = 0; /* Current processing state. */
-
-
-#line 2963 "dk3str.ctr"
- if(str) {
- ptr = str;
- wh = (whsp ? whsp : dk3str_c8_def_whsp);
- state = 0;
- while((state < 2) && (*ptr)) {
- if(dk3str_c8_chr(wh, *ptr)) {
- if(state == 1) {
- state = 2;
- *(ptr++) = '\0';
- back = dk3str_c8_start(ptr, wh);
- } else {
- ptr++;
- }
- } else {
- state = 1;
- ptr++;
- }
- }
- }
-
-#line 2982 "dk3str.ctr"
- return back;
-}
-
-
-
-dk3_c16_t *
-dk3str_c16_next(dk3_c16_t *str, dk3_c16_t const *whsp)
-{
- dk3_c16_t *back = NULL;
- dk3_c16_t *ptr; /* Pointer into string. */
- dk3_c16_t const *wh; /* Whitespaces set. */
- int state; /* Current state. */
-
- if(str) {
- ptr = str;
- wh = (whsp ? whsp : c16_def_whsp);
- state = 0;
- while((state < 2) && (*ptr)) {
- if(dk3str_c16_chr(wh, *ptr)) {
- if(state == 1) {
- state = 2;
- *(ptr++) = 0U;
- back = dk3str_c16_start(ptr, wh);
- } else {
- ptr++;
- }
- } else {
- state = 1; ptr++;
- }
- }
- }
- return back;
-}
-
-
-
-dk3_c32_t *
-dk3str_c32_next(dk3_c32_t *str, dk3_c32_t const *whsp)
-{
- dk3_c32_t *back = NULL;
- dk3_c32_t *ptr = NULL; /* Pointer into string. */
- dk3_c32_t const *wh = NULL; /* Whitespaces. */
- int state = 0; /* Current processing state. */
-
-
-#line 3026 "dk3str.ctr"
- if(str) {
- ptr = str;
- wh = (whsp ? whsp : c32_def_whsp);
- state = 0;
- while((state < 2) && (*ptr)) {
- if(dk3str_c32_chr(wh, *ptr)) {
-
-#line 3032 "dk3str.ctr"
- if(state == 1) {
- state = 2;
- *(ptr++) = 0UL;
- back = dk3str_c32_start(ptr, wh);
- } else {
- ptr++;
- }
- } else {
- state = 1; ptr++;
- }
- }
- }
-
-#line 3044 "dk3str.ctr"
- return back;
-}
-
-
-
-dkChar *
-dk3str_next(dkChar *str, dkChar const *whsp)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- return(dk3str_c32_next(str, whsp));
-#else
- return(dk3str_c16_next(str, whsp));
-#endif
-#else
- return(dk3str_c8_next(str, whsp));
-#endif
-}
-
-
-
-void
-dk3str_c8_chomp(char *str, char const *whsp)
-{
- char const *wh; /* Whitespaces set to use. */
- char *ptr; /* Pointer to traverse str. */
- char *x; /* Start position of final space sequence. */
-
-
-#line 3072 "dk3str.ctr"
- if(str) {
- wh = (whsp ? whsp : dk3str_c8_def_whsp);
- x = NULL; ptr = str;
- while(*ptr) {
- if(dk3str_c8_chr(wh, *ptr)) {
- if(!(x)) { x = ptr; }
- } else {
- x = NULL;
- }
- ptr++;
- }
- if(x) { *x = '\0'; }
- }
-
-
-#line 3086 "dk3str.ctr"
-}
-
-
-
-void
-dk3str_c16_chomp(dk3_c16_t *str, dk3_c16_t const *whsp)
-{
- dk3_c16_t const *wh; /* Whitespaces set. */
- dk3_c16_t *ptr; /* Pointer into string. */
- dk3_c16_t *x; /* Test pointer for whitespaces set. */
-
- if(str) {
- wh = (whsp ? whsp : c16_def_whsp);
- x = NULL; ptr = str;
- while(*ptr) {
- if(dk3str_c16_chr(wh, *ptr)) {
- if(!(x)) x = ptr;
- } else {
- x = NULL;
- }
- ptr++;
- }
- if(x) { *x = 0U; }
- }
-}
-
-
-
-void
-dk3str_c32_chomp(dk3_c32_t *str, dk3_c32_t const *whsp)
-{
- dk3_c32_t const *wh = NULL; /* Whitespaces set. */
- dk3_c32_t *ptr = NULL; /* Pointer into string. */
- dk3_c32_t *x = NULL; /* For whitespace-set test. */
-
- if(str) {
- wh = (whsp ? whsp : c32_def_whsp);
- x = NULL; ptr = str;
- while(*ptr) {
- if(dk3str_c32_chr(wh, *ptr)) {
- if(!(x)) x = ptr;
- } else {
- x = NULL;
- }
- ptr++;
- }
- if(x) { *x = 0UL; }
- }
-}
-
-
-
-void
-dk3str_chomp(dkChar *str, dkChar const *whsp)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- dk3str_c32_chomp(str, whsp);
-#else
- dk3str_c16_chomp(str, whsp);
-#endif
-#else
- dk3str_c8_chomp(str, whsp);
-#endif
-}
-
-
-
-void
-dk3str_c8_delnl(char *str)
-{
- char *ptr;
- if(str) {
- ptr = str;
- while(*ptr) {
- if(*ptr == 0x0D) {
- if(ptr[1] == 0x0A) {
- *ptr = '\0';
- } else {
- ptr++;
- }
- } else {
- if(*ptr == 0x0A) {
- *ptr = '\0';
- } else {
- ptr++;
- }
- }
- }
- }
-}
-
-
-
-void
-dk3str_c16_delnl(dk3_c16_t *str)
-{
- dk3_c16_t *ptr;
- if(str) {
- ptr = str;
- while(*ptr) {
- if(*ptr == 0x000DU) {
- if(ptr[1] == 0x000AU) {
- *ptr = (dk3_c16_t)0U;
- } else {
- ptr++;
- }
- } else {
- if(*ptr == 0x000AU) {
- *ptr = (dk3_c16_t)0U;
- } else {
- ptr++;
- }
- }
- }
- }
-}
-
-
-
-void
-dk3str_c32_delnl(dk3_c32_t *str)
-{
- dk3_c32_t *ptr;
- if(str) {
- ptr = str;
- while(*ptr) {
- if(*ptr == 0x0000000DUL) {
- if(ptr[1] == 0x0000000AUL) {
- *ptr = (dk3_c32_t)0UL;
- } else {
- ptr++;
- }
- } else {
- if(*ptr == 0x0000000AUL) {
- *ptr = (dk3_c32_t)0UL;
- } else {
- ptr++;
- }
- }
- }
- }
-}
-
-
-
-void
-dk3str_delnl(dkChar *str)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- dk3str_c32_delnl(str);
-#else
- dk3str_c16_delnl(str);
-#endif
-#else
- dk3str_c8_delnl(str);
-#endif
-}
-
-
-
-int
-dk3str_c8_array_index(char const * const *a, char const *s, int c)
-{
- int back = -1; /* Function result. */
- int ci; /* Current array index for test. */
- char const * const *ap; /* Pointer to traverse array a. */
- if((a) && (s)) {
- ap = a; ci = 0;
- while((*ap) && (back == -1)) {
- if(c) {
- if(dk3str_c8_cmp(*ap, s) == 0) back = ci;
- } else {
- if(dk3str_c8_casecmp(*ap, s) == 0) back = ci;
- }
- if(back == -1) { ap++; ci++; }
- }
- }
- return back;
-}
-
-
-
-int
-dk3str_c16_array_index(dk3_c16_t const * const *a, dk3_c16_t const *s, int c)
-{
- int back = -1;
- int ci; /* Current index. */
- dk3_c16_t const * const *ap; /* Pointer into array. */
- if((a) && (s)) {
- ap = a; ci = 0;
- while((*ap) && (back == -1)) {
- if(c) {
- if(dk3str_c16_cmp(*ap, s) == 0) back = ci;
- } else {
- if(dk3str_c16_casecmp(*ap, s) == 0) back = ci;
- }
- if(back == -1) { ap++; ci++; }
- }
- }
- return back;
-}
-
-
-
-int
-dk3str_c32_array_index(dk3_c32_t const * const *a, dk3_c32_t const *s, int c)
-{
- int back = -1;
- int ci; /* Current index. */
- dk3_c32_t const * const *ap; /* Pointer into array. */
-
- if((a) && (s)) {
- ap = a; ci = 0;
- while((*ap) && (back == -1)) {
- if(c) {
- if(dk3str_c32_cmp(*ap, s) == 0) back = ci;
- } else {
- if(dk3str_c32_casecmp(*ap, s) == 0) back = ci;
- }
- if(back == -1) { ap++; ci++; }
- }
- }
- return back;
-}
-
-
-
-int
-dk3str_array_index(dkChar const * const *a, dkChar const *s, int c)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- return(dk3str_c32_array_index(a, s, c));
-#else
- return(dk3str_c16_array_index(a, s, c));
-#endif
-#else
- return(dk3str_c8_array_index(a, s, c));
-#endif
-}
-
-
-
-int
-dk3str_c8_is_abbr(char const *line,char const *pattern,char spec,int cs)
-{
- int back = 0; /* Function result. */
- char cl; /* Current character from line. */
- char cp; /* Current character from pattern. */
- char const *lptr = NULL; /* Pointer to traverse line. */
- char const *pptr = NULL; /* Pointer to traverse pattern. */
- int afterspec = 0; /* Flag: cs was already found in the pattern. */
- int cc = 0; /* Flag: Can continue. */
-
-
-#line 3342 "dk3str.ctr"
- if((line) && (pattern)) {
- lptr = line; pptr = pattern; afterspec = 0; cc = 1;
- while(cc) {
- if(*pptr) {
- if((!afterspec) && (*pptr == spec)) {
- afterspec = 1; pptr++;
- } else {
- if(*lptr) {
- cl = *lptr; cp = *pptr;
- if(!cs) {
- cl = dk3str_c8_toupper(cl);
- cp = dk3str_c8_toupper(cp);
- }
- if(cl == cp) {
- lptr++; pptr++;
- } else {
- cc = 0; back = 0;
- }
- } else {
- cc = 0;
- if(afterspec) back = 1;
- }
- }
- } else {
- cc = 0;
- if(!(*lptr)) {
- back = 1;
- }
- }
- }
- }
-
-
-#line 3374 "dk3str.ctr"
- return back;
-}
-
-
-
-int
-dk3str_c16_is_abbr(dk3_c16_t const *line, dk3_c16_t const *pattern, dk3_c16_t spec, int cs)
-{
- int back = 0;
- dk3_c16_t cl; /* Current character from line. */
- dk3_c16_t cp; /* Current character from pattern. */
- dk3_c16_t const *lptr; /* Input text to check. */
- dk3_c16_t const *pptr; /* Pattern. */
- int afterspec; /* Flag: Abbreviation inidicator found. */
- int cc; /* Flag: Can continue. */
-
- if((line) && (pattern)) {
- lptr = line; pptr = pattern; afterspec = 0; cc = 1;
- while(cc) {
- if(*pptr) {
- if((!afterspec) && (*pptr == spec)) {
- afterspec = 1; pptr++;
- } else {
- if(*lptr) {
- cl = *lptr; cp = *pptr;
- if(!cs) {
- cl = dk3str_c16_toupper(cl);
- cp = dk3str_c16_toupper(cp);
- }
- if(cl == cp) {
- lptr++; pptr++;
- } else {
- cc = 0; back = 0;
- }
- } else {
- cc = 0;
- if(afterspec) back = 1;
- }
- }
- } else {
- cc = 0;
- if(!(*lptr)) {
- back = 1;
- }
- }
- }
- }
- return back;
-}
-
-
-
-int
-dk3str_c32_is_abbr(dk3_c32_t const *line, dk3_c32_t const *pattern, dk3_c32_t spec, int cs)
-{
- int back = 0;
- dk3_c32_t cl = 0UL; /* Text character. */
- dk3_c32_t cp = 0UL; /* Pattern character. */
- dk3_c32_t const *lptr = NULL; /* Pointer into text. */
- dk3_c32_t const *pptr = NULL; /* Pointer into pattern. */
- int afterspec = 0; /* Flag: Abbreviation indicator was found. */
- int cc = 0; /* Flag: Can continue. */
-
- if((line) && (pattern)) {
- lptr = line; pptr = pattern; afterspec = 0; cc = 1;
- while(cc) {
- if(*pptr) {
- if((!afterspec) && (*pptr == spec)) {
- afterspec = 1; pptr++;
- } else {
- if(*lptr) {
- cl = *lptr; cp = *pptr;
- if(!cs) {
- cl = dk3str_c32_toupper(cl);
- cp = dk3str_c32_toupper(cp);
- }
- if(cl == cp) {
- lptr++; pptr++;
- } else {
- cc = 0; back = 0;
- }
- } else {
- cc = 0;
- if(afterspec) back = 1;
- }
- }
- } else {
- cc = 0;
- if(!(*lptr)) { back = 1; }
- }
- }
- }
- return back;
-}
-
-
-
-int
-dk3str_is_abbr(dkChar const *line, dkChar const *pattern, dkChar spec, int cs)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- return(dk3str_c32_is_abbr(line, pattern, spec, cs));
-#else
- return(dk3str_c16_is_abbr(line, pattern, spec, cs));
-#endif
-#else
- return(dk3str_c8_is_abbr(line, pattern, spec, cs));
-#endif
-}
-
-
-
-int
-dk3str_c8_array_abbr(char const * const *ar, char const *str, char sp, int cs)
-{
- int back = -1; /* Function result. */
- char const * const *ptr; /* Pointer to traverse array ar. */
- int i; /* Current index of ptr in ar. */
-
-
-#line 3494 "dk3str.ctr"
- if((ar) && (str)) {
- i = 0; ptr = ar;
- while((*ptr) && (back == -1)) {
-
-
-#line 3498 "dk3str.ctr"
- if(dk3str_c8_is_abbr(str, *ptr, sp, cs)) {
- back = i;
- }
- if(back == -1) {
- ptr++; i++;
- }
-
-
-#line 3505 "dk3str.ctr"
- }
- }
-
-#line 3507 "dk3str.ctr"
- return back;
-}
-
-
-
-int
-dk3str_c16_array_abbr(dk3_c16_t const * const *arr, dk3_c16_t const *str, dk3_c16_t sp, int cs)
-{
- int back = -1;
- dk3_c16_t const * const *ptr; /* Pointer into array. */
- int i; /* Current index. */
-
-
-#line 3519 "dk3str.ctr"
- if((arr) && (str)) {
-
-#line 3520 "dk3str.ctr"
- i = 0; ptr = arr;
- while((*ptr) && (back == -1)) {
-
-#line 3522 "dk3str.ctr"
- if(dk3str_c16_is_abbr(str, *ptr, sp, cs)) {
-
-#line 3523 "dk3str.ctr"
- back = i;
- } else {
-
-#line 3525 "dk3str.ctr"
- }
- if(back == -1) {
- ptr++; i++;
- }
-
-#line 3529 "dk3str.ctr"
- }
-
-#line 3530 "dk3str.ctr"
- }
-
-#line 3531 "dk3str.ctr"
- return back;
-}
-
-
-
-int
-dk3str_c32_array_abbr(dk3_c32_t const * const *arr, dk3_c32_t const *str, dk3_c32_t sp, int cs)
-{
- int back = -1;
- dk3_c32_t const * const *ptr = NULL; /* Pointer into array. */
- int i = 0; /* Current index. */
-
- if((arr) && (str)) {
- i = 0; ptr = arr;
- while((*ptr) && (back == -1)) {
- if(dk3str_c32_is_abbr(str, *ptr, sp, cs)) {
- back = i;
- }
- if(back == -1) {
- ptr++; i++;
- }
- }
- }
- return back;
-}
-
-
-
-int
-dk3str_array_abbr(dkChar const * const *ar,dkChar const *str,dkChar sp,int cs)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- return(dk3str_c32_array_abbr(ar, str, sp, cs));
-#else
- return(dk3str_c16_array_abbr(ar, str, sp, cs));
-#endif
-#else
- return(dk3str_c8_array_abbr(ar, str, sp, cs));
-#endif
-}
-
-
-
-int
-dk3str_c8_is_bool(char const *str)
-{
- int back = 0; /* Function result. */
-
-
-#line 3580 "dk3str.ctr"
- if(str) {
- if(dk3str_c8_array_abbr(dk3str_c8_bool_kw,str,'$',0) >= 0) {
- back = 1;
- }
- }
-
-#line 3585 "dk3str.ctr"
- return back;
-}
-
-
-
-int
-dk3str_c16_is_bool(dk3_c16_t const *str)
-{
- int back = 0;
- char mytest[256]; /* 8-bit version of the str text. */
- if(str) {
-#if VERSION_BEFORE_20130928
- if(dk3str_c16_to_c8_simple(mytest, sizeof(mytest), str)) {
- back = dk3str_c8_is_bool(mytest);
- }
-#else
- if(dk3str_cnv_c16_to_c8u_app(mytest, sizeof(mytest), str, NULL)) {
- back = dk3str_c8_is_bool(mytest);
- }
-#endif
- }
- return back;
-}
-
-
-
-int
-dk3str_c32_is_bool(dk3_c32_t const *str)
-{
- int back = 0;
- char mytest[256]; /* 8-bit text copy of str. */
- if(str) {
-#if VERSION_BEFORE_20130928
- if(dk3str_c32_to_c8_simple(mytest, sizeof(mytest), str)) {
- back = dk3str_c8_is_bool(mytest);
- }
-#else
- if(dk3str_cnv_c32_to_c8u_app(mytest, sizeof(mytest), str, NULL)) {
- back = dk3str_c8_is_bool(mytest);
- }
-#endif
- }
- return back;
-}
-
-
-
-int
-dk3str_is_bool(dkChar const *str)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- return(dk3str_c32_is_bool(str));
-#else
- return(dk3str_c16_is_bool(str));
-#endif
-#else
- return(dk3str_c8_is_bool(str));
-#endif
-}
-
-
-
-int
-dk3str_c8_is_on(char const *str)
-{
- int back = 0; /* Function result. */
-
-
-#line 3653 "dk3str.ctr"
- if(str) {
- if(dk3str_c8_array_abbr(dk3str_c8_bool_kw,str,'$',0) >= INDEX_OF_FIRST_BOOLEAN_TRUE) {
- back = 1;
- }
- }
-
-#line 3658 "dk3str.ctr"
- return back;
-}
-
-
-
-int
-dk3str_c16_is_on(dk3_c16_t const *str)
-{
- int back = 0;
- char mytest[256]; /* 8-bit version of the str text. */
- if(str) {
-#if VERSION_BEFORE_20130928
- if(dk3str_c16_to_c8_simple(mytest, sizeof(mytest), str)) {
- back = dk3str_c8_is_on(mytest);
- }
-#else
- if(dk3str_cnv_c16_to_c8u_app(mytest, sizeof(mytest), str, NULL)) {
- back = dk3str_c8_is_on(mytest);
- }
-#endif
- }
- return back;
-}
-
-
-
-int
-dk3str_c32_is_on(dk3_c32_t const *str)
-{
- int back = 0;
- char mytest[256]; /* 8-bit copy of str text. */
- if(str) {
-#if VERSION_BEFORE_20130928
- if(dk3str_c32_to_c8_simple(mytest, sizeof(mytest), str)) {
- back = dk3str_c8_is_on(mytest);
- }
-#else
- if(dk3str_cnv_c32_to_c8u_app(mytest, sizeof(mytest), str, NULL)) {
- back = dk3str_c8_is_on(mytest);
- }
-#endif
- }
- return back;
-}
-
-
-
-int
-dk3str_is_on(dkChar const *str)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- return(dk3str_c32_is_on(str));
-#else
- return(dk3str_c16_is_on(str));
-#endif
-#else
- return(dk3str_c8_is_on(str));
-#endif
-}
-
-
-
-size_t
-dk3str_c8_explode(char **array, size_t sz, char *str, char const *whsp)
-{
- size_t back = 0; /* Function result. */
- char const *wh = NULL; /* White spaces set to use. */
- char *current = NULL; /* Current text word to process. */
- char *next = NULL; /* Remaining text after processing the word. */
- char **ptr = NULL; /* Pointer to current array element. */
- size_t i = 0; /* Number of remaining usable array elements. */
- if((array) && (sz > 1) && (str)) {
- wh = (whsp ? whsp : dk3str_c8_def_whsp);
- ptr = array; i = sz;
- while(i--) { *(ptr++) = NULL; }
- ptr = array; i = 0;
- current = dk3str_c8_start(str, wh);
- while((current) && (i < (sz - 1))) {
- next = dk3str_c8_next(current,wh);
- *(ptr++) = current; i++; back++;
- current = next;
- }
- }
- return back;
-}
-
-
-
-size_t
-dk3str_c16_explode(dk3_c16_t **array, size_t sz, dk3_c16_t *str, dk3_c16_t const *whsp)
-{
- size_t back = 0;
- dk3_c16_t const *wh = NULL; /* Whitespaces set. */
- dk3_c16_t *current = NULL; /* Start of current word. */
- dk3_c16_t *next = NULL; /* Start of next word after current. */
- dk3_c16_t **ptr = NULL; /* Pointer into array. */
- size_t i = 0; /* Number of words found. */
-
- if((array) && (sz > 1) && (str)) {
- wh = (whsp ? whsp : c16_def_whsp);
- ptr = array; i = sz;
- while(i--) { *(ptr++) = NULL; }
- ptr = array; i = 0;
- current = dk3str_c16_start(str, wh);
- while((current) && (i < (sz - 1))) {
- next = dk3str_c16_next(current, wh);
- *(ptr++) = current; i++; back++;
- current = next;
- }
- }
- return back;
-}
-
-
-
-size_t
-dk3str_c32_explode(dk3_c32_t **array, size_t sz, dk3_c32_t *str, dk3_c32_t const *whsp)
-{
- size_t back = 0;
- dk3_c32_t const *wh = NULL; /* Whitespace set. */
- dk3_c32_t *current = NULL; /* Current word. */
- dk3_c32_t *next = NULL; /* Next word. */
- dk3_c32_t **ptr = NULL; /* Pointer into destination array. */
- size_t i = 0; /* Current index. */
- if((array) && (sz > 1) && (str)) {
- wh = (whsp ? whsp : c32_def_whsp);
- ptr = array; i = sz;
- while(i--) { *(ptr++) = NULL; }
- ptr = array; i = 0;
- current = dk3str_c32_start(str, wh);
- while((current) && (i < (sz - 1))) {
- next = dk3str_c32_next(current, wh);
- *(ptr++) = current; i++; back++;
- current = next;
- }
- }
- return back;
-}
-
-
-
-size_t
-dk3str_explode(dkChar **array, size_t sz, dkChar *str, dkChar const *whsp)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- return(dk3str_c32_explode(array, sz, str, whsp));
-#else
- return(dk3str_c16_explode(array, sz, str, whsp));
-#endif
-#else
- return(dk3str_c8_explode(array, sz, str, whsp));
-#endif
-}
-
-
-
-void
-dk3str_c8_normalize(char *l, char const *w, char s)
-{
- char *parts[256]; /* All the text words. */
- char *dp = NULL; /* Destination pointer. */
- char *sp = NULL; /* Source pointer. */
- size_t np = 0; /* Number of parts used. */
- size_t i = 0; /* Current word to process. */
- if(l) {
- np = dk3str_c8_explode(parts, 255, l, w);
- if(np > 0) {
- dp = l;
- for(i = 0; i < np; i++) {
- sp = parts[i];
- if(i) { *(dp++) = s; }
- while(*sp) { *(dp++) = *(sp++); }
- }
- *dp = '\0';
- }
- }
-}
-
-
-
-void
-dk3str_c16_normalize(dk3_c16_t *l, dk3_c16_t const *w, dk3_c16_t s)
-{
- dk3_c16_t *parts[256]; /* Pointers to the words. */
- dk3_c16_t *dp = NULL; /* Destination pointer. */
- dk3_c16_t *sp = NULL; /* Source pointer. */
- size_t np = 0; /* Number of parts. */
- size_t i = 0; /* Index of current part. */
-
- if(l) {
- np = dk3str_c16_explode(parts, 255, l, w);
- if(np > 0) {
- dp = l;
- for(i = 0; i < np; i++) {
- sp = parts[i];
- if(i) { *(dp++) = s; }
- while(*sp) { *(sp++) = *(dp++); }
- }
- *dp = 0U;
- }
- }
-}
-
-
-
-void
-dk3str_c32_normalize(dk3_c32_t *l, dk3_c32_t const *w, dk3_c32_t s)
-{
- dk3_c32_t *parts[256]; /* Words. */
- dk3_c32_t *dp = NULL; /* Destination pointer. */
- dk3_c32_t *sp = NULL; /* Source pointer. */
- size_t np = 0; /* Number of words. */
- size_t i = 0; /* Index of current word. */
- if(l) {
- np = dk3str_c32_explode(parts, 255, l, w);
- if(np > 0) {
- dp = l;
- for(i = 0; i < np; i++) {
- sp = parts[i];
- if(i) { *(dp++) = s; }
- while(*sp) { *(dp++) = *(sp++); }
- }
- *dp = 0UL;
- }
- }
-}
-
-
-
-void
-dk3str_normalize(dkChar *l, dkChar const *w, dkChar s)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- dk3str_c32_normalize(l, w, s);
-#else
- dk3str_c16_normalize(l, w, s);
-#endif
-#else
- dk3str_c8_normalize(l, w, s);
-#endif
-}
-
-
-
-void
-dk3str_c8_correct_filename(char *n)
-{
- register char *p;
- p = n;
- while(*p) { if(*p == NO_FNS_C8) { *p = FNS_C8; } p++; }
-}
-
-
-
-void
-dk3str_c16_correct_filename(dk3_c16_t *n)
-{
- register dk3_c16_t *p;
- p = n;
- while(*p) { if(*p == NO_FNS_C16) { *p = FNS_C16; } p++;}
-}
-
-
-
-void
-dk3str_c32_correct_filename(dk3_c32_t *n)
-{
- register dk3_c32_t *p; /* Pointer into text. */
- p = n;
- while(*p) { if(*p == NO_FNS_C32) { *p = FNS_C32; } p++;}
-}
-
-
-
-void
-dk3str_correct_filename(dkChar *n)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- dk3str_c32_correct_filename(n);
-#else
- dk3str_c16_correct_filename(n);
-#endif
-#else
- dk3str_c8_correct_filename(n);
-#endif
-}
-
-
-
-int
-dk3str_c8_is_abs_path(char const *n)
-{
- int back = 0;
- if(n) {
- if(*n == FNS_C8) {
- back = 1;
- } else {
-#if DK3_ON_WINDOWS
- if(((*n >= 'A') && (*n <= 'Z')) || ((*n >= 'a') && (*n <= 'z'))) {
- if(n[1] == ':') {
- if(n[2] == FNS_C8) {
- back = 1;
- }
- }
- }
-#endif
- }
- }
- return back;
-}
-
-
-
-int
-dk3str_c16_is_abs_path(dk3_c16_t const *n)
-{
- int back = 0;
- if(n) {
- if(*n == FNS_C16) {
- back = 1;
- } else {
-#if DK3_ON_WINDOWS
- if(((*n >= 0x0061U) && (*n <= 0x007AU))
- || ((*n >= 0x0041U) && (*n <= 0x005AU)))
- {
- if(n[1] == 0x003AU) {
- if(n[2] == FNS_C16) {
- back = 1;
- }
- }
- }
-#endif
- }
- }
- return back;
-}
-
-
-
-int
-dk3str_c32_is_abs_path(dk3_c32_t const *n)
-{
- int back = 0;
-
-
-#line 4006 "dk3str.ctr"
- if(n) {
- if(*n == FNS_C32) {
- back = 1;
- } else {
-#if DK3_ON_WINDOWS
- if(((*n >= 0x00000061UL) && (*n <= 0x0000007AUL))
- || ((*n >= 0x00000041UL) && (*n <= 0x0000005AUL)))
- {
- if(n[1] == 0x0000003AUL) {
- if(n[2] == FNS_C32) {
- back = 1;
- }
- }
- }
-#endif
- }
- }
-
-#line 4023 "dk3str.ctr"
- return back;
-}
-
-
-
-int
-dk3str_is_abs_path(dkChar const *n)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- return(dk3str_c32_is_abs_path(n));
-#else
- return(dk3str_c16_is_abs_path(n));
-#endif
-#else
- return(dk3str_c8_is_abs_path(n));
-#endif
-}
-
-
-
-int
-dk3str_c8_append_path_app(char *d, size_t sz, char const *n, dk3_app_t *app)
-{
- int back = 0; /* Function result. */
- char myn[DK3_MAX_PATH]; /* My editable copy of n. */
- char *p1 = NULL; /* Current name part. */
- char *p2 = NULL; /* Remaining text. */
- char *p3 = NULL; /* Used to delete one part from path. */
- size_t tsz; /* Size for tests. */
- if((d) && (sz) && (n)) {
- if(dk3str_c8_is_abs_path(n)) { /* Absolute path, copy. */
- if(dk3str_c8_len(n) < sz) {
- dk3str_c8_cpy(d,n);
- back = 1;
- } else {
- if(app) {
- /* ERROR: Name n too long! */
- dk3app_log_i1(app, DK3_LL_ERROR, 109);
- }
- }
- } else { /* Relative path, append. */
- if(dk3str_c8_len(n) < sizeof(myn)) {
- back = 1;
- dk3str_c8_cpy(myn,n);
- p1 = myn;
- while((p1) && (back)) {
- p2 = dk3str_c8_chr(p1,FNS_C8);
- if(p2) { *(p2++) = '\0'; }
- if(dk3str_c8_cmp(dk3str_c8_dot,p1)) {
- if(dk3str_c8_cmp(dk3str_c8_dot_dot,p1)) { /* Add another part. */
- tsz = dk3str_c8_len(d) + dk3str_c8_len(dk3str_c8_fnsep)
- + dk3str_c8_len(p1);
- if(tsz < sz) {
- dk3str_c8_cat(d,dk3str_c8_fnsep);
- dk3str_c8_cat(d,p1);
- } else {
- if(app) {
- /* ERROR: Result too long for destination buffer! */
- dk3app_log_i1(app, DK3_LL_ERROR, 38);
- }
- }
- } else { /* Remove last part. */
- p3 = dk3str_c8_rchr(d,FNS_C8);
- if(p3) {
- *p3 = '\0';
- } else {
- if(app) {
- /* ERROR: Too many ".." entries! */
-#if DK3_CHAR_SIZE == 1
- dk3app_log_i3(app, DK3_LL_ERROR, 110, 111, n);
-#else
- dk3app_log_i1(app, DK3_LL_ERROR, 126);
-#endif
- }
- }
- }
- }
- p1 = p2;
- }
- } else {
- if(app) {
- /* ERROR: Name n too long! */
- dk3app_log_i1(app, DK3_LL_ERROR, 109);
- }
- }
- }
- }
- return back;
-}
-
-
-
-int
-dk3str_c16_append_path_app(dk3_c16_t *d, size_t sz, dk3_c16_t const *n, dk3_app_t *app)
-{
- int back = 0;
- dk3_c16_t myn[DK3_MAX_PATH];
- dk3_c16_t *p1 = NULL; /* Path component to process. */
- dk3_c16_t *p2 = NULL; /* Remainder of path. */
- dk3_c16_t *p3 = NULL; /* Last path component to remove. */
- size_t tsz; /* Test size. */
-
- if((d) && (sz) && (n)) {
- if(dk3str_c16_is_abs_path(n)) {
- if(dk3str_c16_len(n) < sz) {
- dk3str_c16_cpy(d,n) ;
- back = 1;
- } else {
- if(app) {
- /* ERROR: Name n too long! */
- dk3app_log_i1(app, DK3_LL_ERROR, 109);
- }
- }
- } else {
- if(dk3str_c16_len(n) < DK3_SIZEOF(myn,dk3_c16_t)) {
- back = 1;
- dk3str_c16_cpy(myn,n) ;
- p1 = myn;
- while((p1) && (back)) {
- p2 = dk3str_c16_chr(p1, FNS_C16);
- if(p2) { *(p2++) = 0U; }
- if(dk3str_c16_cmp(c16_dot,p1)) {
- if(dk3str_c16_cmp(c16_dot_dot,p1)) {
- tsz = dk3str_c16_len(d) + dk3str_c16_len(c16_fnsep)
- + dk3str_c16_len(p1);
- if(tsz < sz) {
- dk3str_c16_cat(d,c16_fnsep);
- dk3str_c16_cat(d,p1);
- } else {
- if(app) {
- /* ERROR: Result too long for destination buffer! */
- dk3app_log_i1(app, DK3_LL_ERROR, 38);
- }
- }
- } else {
- p3 = dk3str_c16_rchr(d,FNS_C16);
- if(p3) {
- *p3 = 0U;
- } else {
- if(app) {
- /* ERROR: Too many ".." entries! */
-#if DK3_CHAR_SIZE == 2
- dk3app_log_i3(app, DK3_LL_ERROR, 110, 111, n);
-#else
- dk3app_log_i1(app, DK3_LL_ERROR, 126);
-#endif
- }
- }
- }
- }
- p1 = p2;
- }
- } else {
- if(app) {
- /* ERROR: Name n too long! */
- dk3app_log_i1(app, DK3_LL_ERROR, 109);
- }
- }
- }
- }
- return back;
-}
-
-
-
-int
-dk3str_c32_append_path_app(dk3_c32_t *d, size_t sz, dk3_c32_t const *n, dk3_app_t *app)
-{
- int back = 0;
- dk3_c32_t myn[DK3_MAX_PATH]; /* My editable copy of n. */
- dk3_c32_t *p1 = NULL; /* Current name part. */
- dk3_c32_t *p2 = NULL; /* Remaining text. */
- dk3_c32_t *p3 = NULL; /* Used to delete one part from path. */
- size_t tsz; /* Test size. */
-
-
-
-#line 4200 "dk3str.ctr"
- if((d) && (sz) && (n)) {
- if(dk3str_c32_is_abs_path(n)) {
-
-#line 4202 "dk3str.ctr"
- if(dk3str_c32_len(n) < sz) {
- dk3str_c32_cpy(d,n) ;
- back = 1;
- } else {
- if(app) {
- /* ERROR: Name n too long! */
- dk3app_log_i1(app, DK3_LL_ERROR, 109);
- }
- }
- } else {
-
-#line 4212 "dk3str.ctr"
- if(dk3str_c32_len(n) < DK3_SIZEOF(myn,dk3_c32_t)) {
- back = 1;
- dk3str_c32_cpy(myn,n) ;
- p1 = myn;
- while((p1) && (back)) {
- p2 = dk3str_c32_chr(p1,FNS_C32);
- if(p2) { *(p2++) = 0UL; }
- if(dk3str_c32_cmp(c32_dot,p1)) {
- if(dk3str_c32_cmp(c32_dot_dot,p1)) {
- tsz = dk3str_c32_len(d) + dk3str_c32_len(c32_fnsep)
- + dk3str_c32_len(p1);
- if(tsz < sz) {
- dk3str_c32_cat(d,c32_fnsep);
- dk3str_c32_cat(d,p1);
- } else {
- if(app) {
- /* ERROR: Result too long for destination buffer! */
- dk3app_log_i1(app, DK3_LL_ERROR, 38);
- }
- }
- } else {
- p3 = dk3str_c32_rchr(d,FNS_C32);
- if(p3) {
- *p3 = 0UL;
- } else {
- if(app) {
- /* ERROR: Too many ".." entries! */
- dk3app_log_i1(app, DK3_LL_ERROR, 110);
- }
- }
- }
- }
- p1 = p2;
- }
- } else {
- if(app) {
- /* ERROR: Name n too long! */
- dk3app_log_i1(app, DK3_LL_ERROR, 109);
- }
- }
- }
- }
- if(back) {
-
-#line 4255 "dk3str.ctr"
- }
-
-#line 4256 "dk3str.ctr"
- return back;
-}
-
-
-
-int
-dk3str_append_path_app(dkChar *d, size_t sz, dkChar const *n, dk3_app_t *app)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- return(dk3str_c32_append_path_app(d, sz, n, app));
-#else
- return(dk3str_c16_append_path_app(d, sz, n, app));
-#endif
-#else
- return(dk3str_c8_append_path_app(d, sz, n, app));
-#endif
-}
-
-
-
-char *
-dk3str_c8_get_suffix(char const *s)
-{
- char *back = NULL;
- char const *ptr;
- if(s) {
- ptr = s;
- while(*ptr) {
- if(*ptr == '.') {
- back = (char *)ptr;
- } else {
- if(*ptr == FNS_C8) {
- back = NULL;
- }
- }
- ptr++;
- }
- }
- return back;
-}
-
-
-
-dk3_c16_t *
-dk3str_c16_get_suffix(dk3_c16_t const *s)
-{
- dk3_c16_t *back = NULL;
- dk3_c16_t const *ptr;
-
- if(s) {
- ptr = s;
- while(*ptr) {
- if(*ptr == 0x002EU) {
- back = (dk3_c16_t *)ptr;
- } else {
- if(*ptr == FNS_C16) {
- back = NULL;
- }
- }
- ptr++;
- }
- }
- return back;
-}
-
-
-
-dk3_c32_t *
-dk3str_c32_get_suffix(dk3_c32_t const *s)
-{
- dk3_c32_t *back = NULL;
- dk3_c32_t const *ptr;
- if(s) {
- ptr = s;
- while(*ptr) {
- if(*ptr == 0x0000002EUL) {
- back = (dk3_c32_t *)ptr;
- } else {
- if(*ptr == FNS_C32) {
- back = NULL;
- }
- }
- ptr++;
- }
- }
- return back;
-}
-
-
-
-dkChar *
-dk3str_get_suffix(dkChar const *s)
-{
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- return(dk3str_c32_get_suffix(s));
-#else
- return(dk3str_c16_get_suffix(s));
-#endif
-#else
- return(dk3str_c8_get_suffix(s));
-#endif
-}
-
-
-
-int
-dk3str_c32_to_c8_simple_app(char *d, size_t sz, dk3_c32_t const *s, dk3_app_t *app)
-{
- int back = 0;
- dk3_c32_t const *ptr = NULL; /* Pointer into source string. */
- dk3_c32_t c = 0UL; /* Source character. */
- unsigned char uc = 0x00; /* Destination character. */
- char *dptr = NULL; /* Destination pointer. */
-
- if((d) && (sz) && (s)) {
- if(dk3str_c32_len(s) < sz) {
- back = 1; ptr = s; dptr = d;
- while(0UL != (c = *ptr)) {
- if(c < (dk3_c32_t)0x00000100UL) {
- uc = (unsigned char)c;
- *(dptr++) = (char)uc;
- } else {
- if((back == 1) && (app)) {
- /* ERROR: Illegal character(s) in source string! */
- dk3app_log_i1(app, DK3_LL_ERROR, 112);
- }
- back = 0;
- }
- ptr++;
- }
- *dptr = '\0';
- } else {
- d[0] = '\0';
- if(app) {
- /* ERROR: Source string too long! */
- dk3app_log_i1(app, DK3_LL_ERROR, 108);
- }
- }
- }
- return back;
-}
-
-
-
-
-
-
-
-/** Convert 8-bit plain text to other encodings.
- @param d Destination buffer (NULL to just count result elements).
- @param s Source string.
- @param app Application structure for diagnostics, may be NULL.
- @param enc Destination encoding (DK3_ENCODING_xxx).
- @return Number of destination elements created.
-*/
-static
-size_t
-dk3str_i_cnv_c8p(void *d, char const *s, dk3_app_t *app, int enc)
-{
- size_t back = 0;
- int error = 0; /* Flag: Error occured. */
- char const *sptr = NULL; /* Source pointer. */
- char *dp8 = NULL; /* Pointer to 8-bit destination. */
- dk3_c16_t *dp16 = NULL; /* Pointer to 16-bit destination. */
- dk3_c32_t *dp32 = NULL; /* Pointer to 32-bit destination. */
- char c = 0x00; /* Current source character to process. */
- unsigned char uc = 0x00; /* Destination byte. */
- dk3_c32_t ul = 0UL; /* Conversion result. */
- unsigned char myuc[16]; /* Conversion result buffer. */
- dk3_c16_t myc16[16]; /* Conversion result buffer. */
- size_t u8u = 0; /* UTF-8 bytes used for encoding. */
- size_t u16u = 0; /* UTF-16 characters used for encoding. */
- size_t sl = 0; /* Number of remaining characters in source. */
- size_t i = 0; /* Copy converted characters to destination. */
-
-
-#line 4433 "dk3str.ctr"
- if(s) {
- sptr = s; sl = dk3str_c8_len(s);
- if(d) {
- switch(enc) {
- case DK3_ENCODING_UTF8: { dp8 = (char *)d; } break;
- case DK3_ENCODING_UTF16: { dp16 = (dk3_c16_t *)d; } break;
- case DK3_ENCODING_UNICODE: { dp32 = (dk3_c32_t *)d; } break;
- default: {
- if(app) {
- /* ERROR: Illegal destination encoding! */
- dk3app_log_i1(app, DK3_LL_ERROR, 114);
- }
- } break;
- }
- }
- while((sl) && (0 == error)) {
- c = *(sptr++); sl--;
- uc = (unsigned char)c;
- ul = (dk3_c32_t)uc;
- ul &= 0x000000FFUL;
- switch(enc) {
- case DK3_ENCODING_UTF8: {
- u8u = dk3enc_uc2utf8(ul, myuc, 16);
- if(u8u) {
- back = dk3mem_add_size_t(back, u8u, &error);
- if(d) {
- for(i = 0; i < u8u; i++) { *(dp8++) = myuc[i]; }
- }
- } else {
- if(0 == error) {
- if(app) {
- /* ERROR: Conversion to UTF-8 failed! */
- dk3app_log_i1(app, DK3_LL_ERROR, 115);
- }
- } error = 1;
- }
- } break;
- case DK3_ENCODING_UTF16: {
- u16u = dk3enc_uc2utf16(ul, myc16, 16);
- if(u16u) {
- back = dk3mem_add_size_t(back, u16u, &error);
- if(d) {
- for(i = 0; i < u16u; i++) { *(dp16++) = myc16[i]; }
- }
- } else {
- if(0 == error) {
- if(app) {
-
-#line 4480 "dk3str.ctr"
- /* ERROR: Conversion to UTF-16 failed! */
- dk3app_log_i1(app, DK3_LL_ERROR, 116);
- }
- } error = 1;
- }
- } break;
- case DK3_ENCODING_UNICODE: {
- back = dk3mem_add_size_t(back, 1, &error);
- if(d) { *(dp32++) = ul; }
- } break;
- }
- }
- if(d) {
- switch(enc) {
- case DK3_ENCODING_UTF8: { *dp8 = '\0'; } break;
- case DK3_ENCODING_UTF16: { *dp16 = 0U; } break;
- case DK3_ENCODING_UNICODE: { *dp32 = 0UL; } break;
- }
- }
- back = dk3mem_add_size_t(back, 1, &error);
- if(error) {
- back = 0;
- if(error == DK3_ERROR_MATH_OVERFLOW) {
- if(app) {
- /* ERROR: Input string too long for conversion! */
- dk3app_log_i1(app, DK3_LL_ERROR, 108);
- }
- }
- }
- }
-
-#line 4510 "dk3str.ctr"
- return back;
-}
-
-
-
-
-size_t
-dk3str_cnvsz_c8p_to_c8u_app(char const *s, dk3_app_t *app)
-{
- size_t back = 0;
- if(s) {
- back = dk3str_i_cnv_c8p(NULL, s, app, DK3_ENCODING_UTF8);
- }
- return back;
-}
-
-
-int
-dk3str_cnv_c8p_to_c8u_app(char *d, size_t ds, char const *s, dk3_app_t *app)
-{
- int back = 0;
- size_t sz; /* Number of chars produced. */
- if((d) && (ds) && (s)) {
- sz = dk3str_i_cnv_c8p(NULL, s, app, DK3_ENCODING_UTF8);
- if(sz) {
- if(ds >= sz) {
- if(dk3str_i_cnv_c8p((void *)d, s, app, DK3_ENCODING_UTF8)) {
- back = 1;
- }
- } else {
- if(app) {
- /* ERROR: Destination buffer too small! */
- dk3app_log_i1(app, DK3_LL_ERROR, 38);
- }
- }
- }
- }
- return back;
-}
-
-
-
-char *
-dk3str_cnvnew_c8p_to_c8u_app(char const *s, dk3_app_t *app)
-{
- char *back = NULL;
- size_t sz; /* Number of characters produced. */
- if(s) {
- sz = dk3str_i_cnv_c8p(NULL, s, app, DK3_ENCODING_UTF8);
- if(sz) {
- back = dk3_new_app(char,sz,app);
- if(back) {
- if(!dk3str_i_cnv_c8p((void *)back, s, app, DK3_ENCODING_UTF8)) {
- dk3_delete(back); back = NULL;
- }
- }
- }
- }
- return back;
-}
-
-
-
-size_t
-dk3str_cnvsz_c8p_to_c16_app(char const *s, dk3_app_t *app)
-{
- size_t back = 0;
- if(s) {
- back = dk3str_i_cnv_c8p(NULL, s, app, DK3_ENCODING_UTF16);
- }
- return back;
-}
-
-
-
-int
-dk3str_cnv_c8p_to_c16_app(dk3_c16_t *d, size_t ds, char const *s, dk3_app_t *app)
-{
- int back = 0;
- size_t sz; /* Destination buffer length needed. */
- if((d) && (ds) && (s)) {
- sz = dk3str_i_cnv_c8p(NULL, s, app, DK3_ENCODING_UTF16);
- if(sz) {
- if(ds >= sz) {
- if(dk3str_i_cnv_c8p((void *)d, s, app, DK3_ENCODING_UTF16)) {
- back = 1;
- }
- } else {
- if(app) {
- /* ERROR: Destination buffer too small! */
- dk3app_log_i1(app, DK3_LL_ERROR, 38);
- }
- }
- }
- }
- return back;
-}
-
-
-
-dk3_c16_t *
-dk3str_cnvnew_c8p_to_c16_app(char const *s, dk3_app_t *app)
-{
- dk3_c16_t *back = NULL;
- size_t sz; /* Destination buffer length needed. */
- if(s) {
- sz = dk3str_i_cnv_c8p(NULL, s, app, DK3_ENCODING_UTF16);
- if(sz) {
- back = dk3_new_app(dk3_c16_t,sz,app);
- if(back) {
- if(!dk3str_i_cnv_c8p((void *)back, s, app, DK3_ENCODING_UTF16)) {
- dk3_delete(back); back = NULL;
- }
- }
- }
- }
- return back;
-}
-
-
-
-size_t
-dk3str_cnvsz_c8p_to_c32_app(char const *s, dk3_app_t *app)
-{
- size_t back = 0;
- if(s) {
- back = dk3str_i_cnv_c8p(NULL, s, app, DK3_ENCODING_UNICODE);
- }
- return back;
-}
-
-
-
-int
-dk3str_cnv_c8p_to_c32_app(dk3_c32_t *d, size_t ds, char const *s, dk3_app_t *app)
-{
- int back = 0;
- size_t sz; /* Destination buffer length needed. */
- if((d) && (ds) && (s)) {
- sz = dk3str_i_cnv_c8p(NULL, s, app, DK3_ENCODING_UNICODE);
- if(sz) {
- if(ds >= sz) {
- if(dk3str_i_cnv_c8p((void *)d, s, app, DK3_ENCODING_UNICODE)) {
- back = 1;
- }
- } else {
- if(app) {
- /* ERROR: Destination buffer too small! */
- dk3app_log_i1(app, DK3_LL_ERROR, 38);
- }
- }
- }
- }
- return back;
-}
-
-
-
-dk3_c32_t *
-dk3str_cnvnew_c8p_to_c32_app(char const *s, dk3_app_t *app)
-{
- dk3_c32_t *back = NULL;
- size_t sz; /* Destination buffer length needed. */
- if(s) {
- sz = dk3str_i_cnv_c8p(NULL, s, app, DK3_ENCODING_UNICODE);
- if(sz) {
- back = dk3_new_app(dk3_c32_t,sz,app);
- if(back) {
- if(!dk3str_i_cnv_c8p((void *)back, s, app, DK3_ENCODING_UNICODE)) {
- dk3_delete(back); back = NULL;
- }
- }
- }
- }
- return back;
-}
-
-
-
-/** Convert UTF-8 string to other encodings.
- @param d Destination pointer, may be NULL.
- @param s Source string.
- @param app Application structure for diagnostics, may be NULL.
- @param enc Destination encoding.
- @return Buffer length used (d!=NULL) or needed (d==NULL).
-*/
-static
-size_t
-dk3str_i_cnv_c8u(void *d, char const *s, dk3_app_t *app, int enc)
-{
- size_t back = 0;
- int error = 0; /* Flag: Error occued. */
- char *dp8 = NULL; /* Pointer to 8-bit destination. */
- dk3_c16_t *dp16 = NULL; /* Pointer to 16-bit destination. */
- dk3_c32_t *dp32 = NULL; /* Pointer to 32-bit destination. */
- dk3_c16_t myc16[16]; /* Conversion result buffer. */
- dk3_c32_t c32 = 0UL; /* Conversion result. */
- unsigned char uc = 0x00; /* Result character. */
- char c = 0x00; /* Current character to process. */
- unsigned char const *sptr = NULL; /* Source ponter. */
- size_t u8u = 0; /* Number of UTF-8 bytes used. */
- size_t u16u = 0; /* Number of UTF-16 chars produced. */
- size_t i = 0; /* Copy buffer to destination. */
- size_t sl = 0; /* Remaining source string length. */
-
-
-#line 4715 "dk3str.ctr"
- if(s) {
- /* Initialize variables */
- sptr = (unsigned char const *)s; sl = dk3str_c8_len(s);
- if(d) {
- switch(enc) {
- case DK3_ENCODING_PLAIN: { dp8 = (char *)d; } break;
- case DK3_ENCODING_UTF16: { dp16 = (dk3_c16_t *)d; } break;
- case DK3_ENCODING_UNICODE: { dp32 = (dk3_c32_t *)d; } break;
- default: {
- if(0 == error) {
- if(app) {
- /* ERROR: Illegal output encoding! */
- dk3app_log_i1(app, DK3_LL_ERROR, 114);
- }
- } error = 1;
- } break;
- }
- }
- /* Process input */
- while((sl) && (0 == error)) {
- u8u = 0;
- if(dk3enc_utf82uc(&c32, sptr, sl, &u8u)) {
- if(u8u) {
- switch(enc) {
- case DK3_ENCODING_PLAIN: {
- if(c32 < (dk3_c32_t)0x00000100UL) {
- back = dk3mem_add_size_t(back, 1, &error);
- if(d) {
- uc = (unsigned char)c32;
- c = (char)uc;
- *(dp8++) = c;
- }
- } else {
- if(0 == error) {
- if(app) {
- /* ERROR: Result character out of range! */
- dk3app_log_i1(app, DK3_LL_ERROR, 117);
- }
- } error = 1;
- }
- } break;
- case DK3_ENCODING_UTF16: {
- u16u = dk3enc_uc2utf16(c32, myc16, 16);
- if(u16u) {
- back = dk3mem_add_size_t(back, u16u, &error);
- if(d) {
- for(i = 0; i < u16u; i++) { *(dp16++) = myc16[i]; }
- }
- } else {
- if(0 == error) {
- if(app) {
-
-#line 4766 "dk3str.ctr"
- /* ERROR: Conversion to UTF-16 failed! */
- dk3app_log_i1(app, DK3_LL_ERROR, 116);
- }
- } error = 1;
- }
- } break;
- case DK3_ENCODING_UNICODE: {
- back = dk3mem_add_size_t(back, 1, &error);
- if(d) { *(dp32++) = c32; }
- } break;
- }
- if(sl >= u8u) {
- sl = sl - u8u;
- sptr = &(sptr[u8u]);
- } else {
- sl = 0;
- }
- } else {
- if(0 == error) {
- if(app) {
- /* ERROR: UTF-8 decode operation failed! */
- dk3app_log_i1(app, DK3_LL_ERROR, 118);
- }
- } error = 1;
- }
- } else {
- if(0 == error) {
- if(app) {
- /* ERROR: UTF-8 decode operation failed! */
- dk3app_log_i1(app, DK3_LL_ERROR, 118);
- }
- } error = 1;
- }
- }
- /* Finalize output */
- back = dk3mem_add_size_t(back, 1, &error);
- if(d) {
- switch(enc) {
- case DK3_ENCODING_PLAIN: { *dp8 = '\0'; } break;
- case DK3_ENCODING_UTF16: { *dp16 = 0U; } break;
- case DK3_ENCODING_UNICODE: { *dp32 = 0UL; } break;
- }
- }
- if(error) {
- back = 0;
- if(error == DK3_ERROR_MATH_OVERFLOW) {
- if(app) {
- /* ERROR: Input string too long for conversion! */
- dk3app_log_i1(app, DK3_LL_ERROR, 108);
- }
- }
- }
- }
-
-#line 4819 "dk3str.ctr"
- return back;
-}
-
-
-
-size_t
-dk3str_cnvsz_c8u_to_c8p_app(char const *s, dk3_app_t *app)
-{
- size_t back = 0;
- if(s) {
- back = dk3str_i_cnv_c8u(NULL, s, app, DK3_ENCODING_PLAIN);
- }
- return back;
-}
-
-
-
-int
-dk3str_cnv_c8u_to_c8p_app(char *d, size_t ds, char const *s, dk3_app_t *app)
-{
- int back = 0;
- size_t sz; /* Destination buffer length needed. */
- if((d) && (ds) && (s)) {
- sz = dk3str_i_cnv_c8u(NULL, s, app, DK3_ENCODING_PLAIN);
- if(sz) {
- if(ds >= sz) {
- if(dk3str_i_cnv_c8u((void *)d, s, app, DK3_ENCODING_PLAIN)) {
- back = 1;
- }
- } else {
- if(app) {
- /* ERROR: Destination buffer too small! */
- dk3app_log_i1(app, DK3_LL_ERROR, 38);
- }
- }
- }
- }
- return back;
-}
-
-
-char *
-dk3str_cnvnew_c8u_to_c8p_app(char const *s, dk3_app_t *app)
-{
- char *back = NULL;
- size_t sz; /* Destination buffer length needed. */
- if(s) {
- sz = dk3str_i_cnv_c8u(NULL, s, app, DK3_ENCODING_PLAIN);
- if(sz) {
- back = dk3_new_app(char,sz,app);
- if(back) {
- if(!dk3str_i_cnv_c8u((void *)back, s, app, DK3_ENCODING_PLAIN)) {
- dk3_delete(back); back = NULL;
- }
- }
- }
- }
- return back;
-}
-
-
-
-
-size_t
-dk3str_cnvsz_c8u_to_c16_app(char const *s, dk3_app_t *app)
-{
- size_t back = 0;
- if(s) {
- back = dk3str_i_cnv_c8u(NULL, s, app, DK3_ENCODING_UTF16);
- }
- return back;
-}
-
-
-
-int
-dk3str_cnv_c8u_to_c16_app(dk3_c16_t *d, size_t ds, char const *s, dk3_app_t *app)
-{
- int back = 0;
- size_t sz; /* Destination buffer length needed. */
- if((d) && (ds) && (s)) {
- sz = dk3str_i_cnv_c8u(NULL, s, app, DK3_ENCODING_UTF16);
- if(sz) {
- if(ds >= sz) {
- if(dk3str_i_cnv_c8u((void *)d, s, app, DK3_ENCODING_UTF16)) {
- back = 1;
- }
- } else {
- if(app) {
- /* ERROR: Destination buffer too small! */
- dk3app_log_i1(app, DK3_LL_ERROR, 38);
- }
- }
- }
- }
- return back;
-}
-
-
-
-dk3_c16_t *
-dk3str_cnvnew_c8u_to_c16_app(char const *s, dk3_app_t *app)
-{
- dk3_c16_t *back = NULL;
- size_t sz; /* Destination buffer length needed. */
- if(s) {
- sz = dk3str_i_cnv_c8u(NULL, s, app, DK3_ENCODING_UTF16);
- if(sz) {
- back = dk3_new_app(dk3_c16_t,sz,app);
- if(back) {
- if(!dk3str_i_cnv_c8u((void *)back, s, app, DK3_ENCODING_UTF16)) {
- dk3_delete(back); back = NULL;
- }
- }
- }
- }
- return back;
-}
-
-
-
-size_t
-dk3str_cnvsz_c8u_to_c32_app(char const *s, dk3_app_t *app)
-{
- size_t back = 0;
-
-
-#line 4945 "dk3str.ctr"
- if(s) {
- back = dk3str_i_cnv_c8u(NULL, s, app, DK3_ENCODING_UNICODE);
- }
-
-#line 4948 "dk3str.ctr"
- return back;
-}
-
-
-
-int
-dk3str_cnv_c8u_to_c32_app(dk3_c32_t *d, size_t ds, char const *s, dk3_app_t *app)
-{
- int back = 0;
- size_t sz; /* Destination buffer length needed. */
- if((d) && (ds) && (s)) {
- sz = dk3str_i_cnv_c8u(NULL, s, app, DK3_ENCODING_UNICODE);
- if(sz) {
- if(ds >= sz) {
- if(dk3str_i_cnv_c8u((void *)d, s, app, DK3_ENCODING_UNICODE)) {
- back = 1;
- }
- } else {
- if(app) {
- /* ERROR: Destination buffer too small! */
- dk3app_log_i1(app, DK3_LL_ERROR, 38);
- }
- }
- }
- }
- return back;
-}
-
-
-
-dk3_c32_t *
-dk3str_cnvnew_c8u_to_c32_app(char const *s, dk3_app_t *app)
-{
- dk3_c32_t *back = NULL;
- size_t sz; /* Destination buffer length needed. */
- if(s) {
- sz = dk3str_i_cnv_c8u(NULL, s, app, DK3_ENCODING_UNICODE);
- if(sz) {
- back = dk3_new_app(dk3_c32_t,sz,app);
- if(back) {
- if(!dk3str_i_cnv_c8u((void *)back, s, app, DK3_ENCODING_UNICODE)) {
- dk3_delete(back); back = NULL;
- }
- }
- }
- }
- return back;
-}
-
-
-
-/** Convert 16-bit character string to other encodings.
- @param d Destination pointer (NULL for size check).
- @param s Source string.
- @param app Application structure for diagnostics.
- @param enc Destination encoding.
- @return Number of destination characters needed/produced.
-*/
-static
-size_t
-dk3str_i_cnv_c16(void *d, dk3_c16_t const *s, dk3_app_t *app, int enc)
-{
- size_t back = 0;
- int error = 0; /* Flag: Error occured. */
- char *dp8 = NULL; /* Pointer to 8-bit destination. */
- dk3_c32_t *dp32 = NULL; /* Pointer to 32-bit destination. */
- dk3_c16_t const *sptr = NULL; /* Source pointer. */
- dk3_c32_t c32 = 0UL; /* Conversion result. */
- unsigned char uc = 0x00; /* Current output character. */
- char c = 0x00; /* Current output character. */
- unsigned char myuc[16]; /* Conversion result buffer. */
- size_t sl = 0; /* Remaining string length. */
- size_t u16u = 0; /* Number of U16 characters used. */
- size_t u8u = 0; /* Number of 8-bit chars produced. */
- size_t i = 0; /* Copy buffer to destination. */
- if(s) {
- /* Initialize variables */
- sptr = s; sl = dk3str_c16_len(s);
- if(d) {
- switch(enc) {
- case DK3_ENCODING_PLAIN: { dp8 = (char *)d; } break;
- case DK3_ENCODING_UTF8: { dp8 = (char *)d; } break;
- case DK3_ENCODING_UNICODE: { dp32 = (dk3_c32_t *)d; } break;
- default: {
- if(0 == error) {
- if(app) {
- /* ERROR: Illegal output encoding! */
- dk3app_log_i1(app, DK3_LL_ERROR, 114);
- }
- } error = 1;
- } break;
- }
- }
- /* Process input */
- while((sl) && (0 == error)) {
- u16u = 0;
- if(dk3enc_utf162uc(&c32, sptr, sl, &u16u)) {
- if(u16u) {
- if(sl >= u16u) {
- switch(enc) {
- case DK3_ENCODING_PLAIN: {
- if(c32 < (dk3_c32_t)0x00000100UL) {
- back = dk3mem_add_size_t(back, 1, &error);
- if(d) {
- uc = (unsigned char)c32; c = (char)uc;
- *(dp8++) = c;
- }
- } else {
- if(0 == error) {
- if(app) {
- /* ERROR: Result character out of range! */
- dk3app_log_i1(app, DK3_LL_ERROR, 117);
- }
- } error = 1;
- }
- } break;
- case DK3_ENCODING_UTF8: {
- u8u = dk3enc_uc2utf8(c32, myuc, 16);
- if(u8u) {
- back = dk3mem_add_size_t(back, u8u, &error);
- if(d) {
- for(i = 0; i < u8u; i++) { *(dp8++) = myuc[i]; }
- }
- } else {
- if(0 == error) {
- if(app) {
- /* ERROR: Conversion to UTF-8 failed! */
- dk3app_log_i1(app, DK3_LL_ERROR, 115);
- }
- } error = 1;
- }
- } break;
- case DK3_ENCODING_UNICODE: {
- back = dk3mem_add_size_t(back, 1, &error);
- if(d) { *(dp32++) = c32; }
- } break;
- }
- sl = sl - u16u;
- sptr = &(sptr[u16u]);
- } else {
- sl = 0;
- }
- } else {
- if(0 == error) {
- if(app) {
- /* ERROR: UTF-16 decode operation failed! */
- dk3app_log_i1(app, DK3_LL_ERROR, 119);
- }
- } error = 1;
- }
- } else {
- if(0 == error) {
- if(app) {
- /* ERROR: UTF-16 decode operation failed! */
- dk3app_log_i1(app, DK3_LL_ERROR, 119);
- }
- } error = 1;
- }
- }
- /* Finalize output */
- back = dk3mem_add_size_t(back, 1, &error);
- if(d) {
- switch(enc) {
- case DK3_ENCODING_PLAIN: { *dp8 = '\0'; } break;
- case DK3_ENCODING_UTF8: { *dp8 = '\0'; } break;
- case DK3_ENCODING_UNICODE: { *dp32 = 0UL; } break;
- }
- }
- if(error) {
- back = 0;
- if(error == DK3_ERROR_MATH_OVERFLOW) {
- if(app) {
- /* ERROR: Input string too long for conversion! */
- dk3app_log_i1(app, DK3_LL_ERROR, 108);
- }
- }
- }
- }
- return back;
-}
-
-
-
-size_t
-dk3str_cnvsz_c16_to_c8p_app(dk3_c16_t const *s, dk3_app_t *app)
-{
- size_t back = 0;
- if(s) {
- back = dk3str_i_cnv_c16(NULL, s, app, DK3_ENCODING_PLAIN);
- }
- return back;
-}
-
-
-
-int
-dk3str_cnv_c16_to_c8p_app(char *d, size_t ds, dk3_c16_t const *s, dk3_app_t *app)
-{
- int back = 0;
- size_t sz; /* Destination buffer size needed. */
- if((d) && (ds) && (s)) {
- sz = dk3str_i_cnv_c16(NULL, s, app, DK3_ENCODING_PLAIN);
- if(sz) {
- if(ds >= sz) {
- if(dk3str_i_cnv_c16((void *)d, s, app, DK3_ENCODING_PLAIN)) {
- back = 1;
- }
- } else {
- if(app) {
- /* ERROR: Result buffer too small! */
- dk3app_log_i1(app, DK3_LL_ERROR, 38);
- }
- }
- }
- }
- return back;
-}
-
-
-
-char *
-dk3str_cnvnew_c16_to_c8p_app(dk3_c16_t const *s, dk3_app_t *app)
-{
- char *back = NULL;
- size_t sz; /* Destination buffer size needed. */
- if(s) {
- sz = dk3str_i_cnv_c16(NULL, s, app, DK3_ENCODING_PLAIN);
- if(sz) {
- back = dk3_new_app(char,sz,app);
- if(back) {
- if(!dk3str_i_cnv_c16((void *)back, s, app, DK3_ENCODING_PLAIN)) {
- dk3_delete(back); back = NULL;
- }
- }
- }
- }
- return back;
-}
-
-
-
-size_t
-dk3str_cnvsz_c16_to_c8u_app(dk3_c16_t const *s, dk3_app_t *app)
-{
- size_t back = 0;
- if(s) {
- back = dk3str_i_cnv_c16(NULL, s, app, DK3_ENCODING_UTF8);
- }
- return back;
-}
-
-
-
-int
-dk3str_cnv_c16_to_c8u_app(char *d, size_t ds, dk3_c16_t const *s, dk3_app_t *app)
-{
- int back = 0;
- size_t sz; /* Destination buffer size needed. */
- if((d) && (ds) && (s)) {
- sz = dk3str_i_cnv_c16(NULL, s, app, DK3_ENCODING_UTF8);
- if(sz) {
- if(ds >= sz) {
- if(dk3str_i_cnv_c16((void *)d, s, app, DK3_ENCODING_UTF8)) {
- back = 1;
- }
- } else {
- if(app) {
- /* ERROR: Result buffer too small! */
- dk3app_log_i1(app, DK3_LL_ERROR, 38);
- }
- }
- }
- }
- return back;
-}
-
-
-char *
-dk3str_cnvnew_c16_to_c8u_app(dk3_c16_t const *s, dk3_app_t *app)
-{
- char *back = NULL;
- size_t sz; /* Destination buffer size needed. */
- if(s) {
- sz = dk3str_i_cnv_c16(NULL, s, app, DK3_ENCODING_UTF8);
- if(sz) {
- back = dk3_new_app(char,sz,app);
- if(back) {
- if(!dk3str_i_cnv_c16((void *)back, s, app, DK3_ENCODING_UTF8)) {
- dk3_delete(back); back = NULL;
- }
- }
- }
- }
- return back;
-}
-
-
-
-int
-dk3str_c16_to_c8_simple_app(
- char *d, size_t sz, dk3_c16_t const *s, dk3_app_t *app
-)
-{
- int back = 0;
- dk3_c16_t const *ptr; /* Source pointer. */
- dk3_c16_t c; /* Source character. */
- unsigned char uc; /* Destination character. */
- char *dptr; /* Destination pointer. */
-
- if((d) && (sz) && (s)) {
- if(dk3str_c16_len(s) < sz) {
- back = 1; ptr = s; dptr = d;
- while(0U != (c = *ptr)) {
- if(c < 0x0100U) {
- uc = (unsigned char)c;
- *(dptr++) = (char)uc;
- } else {
- if((back == 1) && (app)) {
- /* ERROR: Illegal character(s) in source string! */
- dk3app_log_i1(app, DK3_LL_ERROR, 112);
- }
- back = 0;
- }
- ptr++;
- }
- *dptr = '\0';
- } else {
- d[0] = '\0';
- if(app) {
- /* ERROR: Source string too long! */
- dk3app_log_i1(app, DK3_LL_ERROR, 108);
- }
- }
- }
- return back;
-}
-
-
-size_t
-dk3str_cnvsz_c16_to_c32_app(dk3_c16_t const *s, dk3_app_t *app)
-{
- size_t back = 0;
- if(s) {
- back = dk3str_i_cnv_c16(NULL, s, app, DK3_ENCODING_UNICODE);
- }
- return back;
-}
-
-
-
-int
-dk3str_cnv_c16_to_c32_app(dk3_c32_t *d, size_t ds, dk3_c16_t const *s, dk3_app_t *app)
-{
- int back = 0;
- size_t sz; /* Destination buffer size needed. */
- if((d) && (ds) && (s)) {
- sz = dk3str_i_cnv_c16(NULL, s, app, DK3_ENCODING_UNICODE);
- if(sz) {
- if(ds >= sz) {
- if(dk3str_i_cnv_c16((void *)d, s, app, DK3_ENCODING_UNICODE)) {
- back = 1;
- }
- } else {
- if(app) {
- /* ERROR: Result buffer too small! */
- dk3app_log_i1(app, DK3_LL_ERROR, 38);
- }
- }
- }
- }
- return back;
-}
-
-
-
-dk3_c32_t *
-dk3str_cnvnew_c16_to_c32_app(dk3_c16_t const *s, dk3_app_t *app)
-{
- dk3_c32_t *back = NULL;
- size_t sz; /* Destination buffer size needed. */
- if(s) {
- sz = dk3str_i_cnv_c16(NULL, s, app, DK3_ENCODING_UNICODE);
- if(sz) {
- back = dk3_new_app(dk3_c32_t,sz,app);
- if(back) {
- if(!dk3str_i_cnv_c16((void *)back, s, app, DK3_ENCODING_UNICODE)) {
- dk3_delete(back); back = NULL;
- }
- }
- }
- }
- return back;
-}
-
-
-
-/** Convert 32-bit character string to other encodings.
- @param d Destination buffer pointer (may be NULL for size check).
- @param s Source string.
- @param app Application structure for diagnostics.
- @param enc Output encoding.
- @return Number of destination characters produced/needed.
-*/
-static
-size_t
-dk3str_i_cnv_c32(void *d, dk3_c32_t const *s, dk3_app_t *app, int enc)
-{
- size_t back = 0;
- int error = 0; /* Flag: Error occured. */
- char *dp8 = NULL; /* Pointer to 8-bit destination. */
- dk3_c16_t *dp16 = NULL; /* Pointer to 16-bit destination. */
- dk3_c32_t const *sptr = NULL; /* Source pointer. */
- dk3_c32_t c32 = 0UL; /* Current character to process. */
- dk3_c16_t myc16[16]; /* Conversion result buffer. */
- unsigned char myuc[16]; /* Conversion result buffer. */
- unsigned char uc = 0x00; /* Output character. */
- char c = 0x00; /* Output character. */
- size_t sl = 0; /* Remaining string length. */
- size_t u8u = 0; /* Number of UTF-8 chars produced. */
- size_t u16u = 0; /* Numer of UTF-16 chars produced. */
- size_t i = 0; /* Copy buffer to destination. */
-
-
-#line 5370 "dk3str.ctr"
- if(s) {
- /* Initialize variables */
- sptr = s; sl = dk3str_c32_len(s);
- if(d) {
- switch(enc) {
- case DK3_ENCODING_PLAIN: { dp8 = (char *)d; } break;
- case DK3_ENCODING_UTF8: { dp8 = (char *)d; } break;
- case DK3_ENCODING_UTF16: { dp16 = (dk3_c16_t *)d; } break;
- default: {
- if(0 == error) {
- if(app) {
- /* ERROR: Illegal output encoding! */
- dk3app_log_i1(app, DK3_LL_ERROR, 114);
- }
- } error = 1;
- } break;
- }
- }
- /* Process input */
- while((sl) && (0 == error)) {
- c32 = *(sptr++); sl--;
- switch(enc) {
- case DK3_ENCODING_PLAIN: {
- if(c32 < (dk3_c32_t)0x00000100UL) {
- back = dk3mem_add_size_t(back, 1, &error);
- if(d) {
- uc = (unsigned char)c32; c = (char)uc;
- *(dp8++) = c;
- }
- } else {
- if(0 == error) {
- if(app) {
- /* ERROR: Output character out of range! */
- dk3app_log_i1(app, DK3_LL_ERROR, 117);
- }
- } error = 1;
- }
- } break;
- case DK3_ENCODING_UTF8: {
- u8u = dk3enc_uc2utf8(c32, myuc, 16);
- if(u8u) {
- back = dk3mem_add_size_t(back, u8u, &error);
- if(d) {
- for(i = 0; i < u8u; i++) { *(dp8++) = myuc[i]; }
- }
- } else {
- if(0 == error) {
- if(app) {
- /* ERROR: UTF-8 encoding failed! */
- dk3app_log_i1(app, DK3_LL_ERROR, 115);
- }
- } error = 1;
- }
- } break;
- case DK3_ENCODING_UTF16: {
- u16u = dk3enc_uc2utf16(c32, myc16, 16);
- if(u16u) {
- back = dk3mem_add_size_t(back, u16u, &error);
- if(d) {
- for(i = 0; i < u16u; i++) { *(dp16++) = myc16[i]; }
- }
- } else {
- if(0 == error) {
- if(app) {
-
-#line 5434 "dk3str.ctr"
- /* ERROR: Conversion to UTF-16 failed! */
- dk3app_log_i1(app, DK3_LL_ERROR, 116);
- }
- } error = 1;
- }
- } break;
- }
- }
- /* Finalize output */
- back = dk3mem_add_size_t(back, 1, &error);
- if(d) {
- switch(enc) {
- case DK3_ENCODING_PLAIN: { *dp8 = '\0'; } break;
- case DK3_ENCODING_UTF8: { *dp8 = '\0'; } break;
- case DK3_ENCODING_UTF16: { *dp16 = 0U; } break;
- }
- }
- if(error) {
- back = 0;
- if(error == DK3_ERROR_MATH_OVERFLOW) {
- if(app) {
- /* ERROR: Input string too long for conversion! */
- dk3app_log_i1(app, DK3_LL_ERROR, 108);
- }
- }
- }
- }
-
-#line 5461 "dk3str.ctr"
- return back;
-}
-
-
-
-size_t
-dk3str_cnvsz_c32_to_c8p_app(dk3_c32_t const *s, dk3_app_t *app)
-{
- size_t back = 0;
- if(s) {
- back = dk3str_i_cnv_c32(NULL, s, app, DK3_ENCODING_PLAIN);
- }
- return back;
-}
-
-
-
-int
-dk3str_cnv_c32_to_c8p_app(char *d, size_t ds, dk3_c32_t const *s, dk3_app_t *app)
-{
- int back = 0;
- size_t sz; /* Destination buffer size needed. */
- if((d) && (ds) && (s)) {
- sz = dk3str_i_cnv_c32(NULL, s, app, DK3_ENCODING_PLAIN);
- if(sz) {
- if(ds >= sz) {
- if(dk3str_i_cnv_c32((void *)d, s, app, DK3_ENCODING_PLAIN)) {
- back = 1;
- }
- } else {
- if(app) {
- /* ERROR: Destination buffer too small! */
- dk3app_log_i1(app, DK3_LL_ERROR, 38);
- }
- }
- }
- }
- return back;
-}
-
-
-
-char *
-dk3str_cnvnew_c32_to_c8p_app(dk3_c32_t const *s, dk3_app_t *app)
-{
- char *back = NULL;
- size_t sz; /* Destination buffer size needed. */
- if(s) {
- sz = dk3str_i_cnv_c32(NULL, s, app, DK3_ENCODING_PLAIN);
- if(sz) {
- back = dk3_new_app(char,sz,app);
- if(back) {
- if(!dk3str_i_cnv_c32((void *)back, s, app, DK3_ENCODING_PLAIN)) {
- dk3_delete(back); back = NULL;
- }
- }
- }
- }
- return back;
-}
-
-
-
-size_t
-dk3str_cnvsz_c32_to_c8u_app(dk3_c32_t const *s, dk3_app_t *app)
-{
- size_t back = 0;
- if(s) {
- back = dk3str_i_cnv_c32(NULL, s, app, DK3_ENCODING_UTF8);
- }
- return back;
-}
-
-
-
-int
-dk3str_cnv_c32_to_c8u_app(char *d, size_t ds, dk3_c32_t const *s, dk3_app_t *app)
-{
- int back = 0;
- size_t sz; /* Destination buffer size needed. */
- if((d) && (ds) && (s)) {
- sz = dk3str_i_cnv_c32(NULL, s, app, DK3_ENCODING_UTF8);
- if(sz) {
- if(ds >= sz) {
- if(dk3str_i_cnv_c32((void *)d, s, app, DK3_ENCODING_UTF8)) {
- back = 1;
- }
- } else {
- if(app) {
- /* ERROR: Destination buffer too small! */
- dk3app_log_i1(app, DK3_LL_ERROR, 38);
- }
- }
- }
- }
- return back;
-}
-
-
-
-char *
-dk3str_cnvnew_c32_to_c8u_app(dk3_c32_t const *s, dk3_app_t *app)
-{
- char *back = NULL;
- size_t sz; /* Destination buffer size needed. */
- if(s) {
- sz = dk3str_i_cnv_c32(NULL, s, app, DK3_ENCODING_UTF8);
- if(sz) {
- back = dk3_new_app(char,sz,app);
- if(back) {
- if(!dk3str_i_cnv_c32((void *)back, s, app, DK3_ENCODING_UTF8)) {
- dk3_delete(back); back = NULL;
- }
- }
- }
- }
- return back;
-}
-
-
-
-size_t
-dk3str_cnvsz_c32_to_c16_app(dk3_c32_t const *s, dk3_app_t *app)
-{
- size_t back = 0;
- if(s) {
- back = dk3str_i_cnv_c32(NULL, s, app, DK3_ENCODING_UTF16);
- }
- return back;
-}
-
-
-
-int
-dk3str_cnv_c32_to_c16_app(dk3_c16_t *d, size_t ds, dk3_c32_t const *s, dk3_app_t *app)
-{
- int back = 0;
- size_t sz; /* Destination buffer size needed. */
- if((d) && (ds) && (s)) {
- sz = dk3str_i_cnv_c32(NULL, s, app, DK3_ENCODING_UTF16);
- if(sz) {
- if(ds >= sz) {
- if(dk3str_i_cnv_c32((void *)d, s, app, DK3_ENCODING_UTF16)) {
- back = 1;
- }
- } else {
- if(app) {
- /* ERROR: Destination buffer too small! */
- dk3app_log_i1(app, DK3_LL_ERROR, 38);
- }
- }
- }
- }
- return back;
-}
-
-
-
-dk3_c16_t *
-dk3str_cnvnew_c32_to_c16_app(dk3_c32_t const *s, dk3_app_t *app)
-{
- dk3_c16_t *back = NULL;
- size_t sz; /* Destination buffer size needed. */
- if(s) {
- sz = dk3str_i_cnv_c32(NULL, s, app, DK3_ENCODING_UTF16);
- if(sz) {
- back = dk3_new_app(dk3_c16_t,sz,app);
- if(back) {
- if(!dk3str_i_cnv_c32((void *)back, s, app, DK3_ENCODING_UTF16)) {
- dk3_delete(back); back = NULL;
- }
- }
- }
- }
- return back;
-}
-
-
-
-int
-dk3str_cnv_c8_to_str_app(dkChar *d, size_t sz, char const *s, dk3_app_t *app)
-{
- register int back = 0;
- register size_t l; /* Number of destination chars used. */
- register char const *sptr; /* Source pointer. */
- register dkChar *dptr; /* Destination pointer. */
- register char x = 0x00; /* Current character to process. */
-
- if((d) && (sz) && (s)) {
- sptr = s; dptr = d; l = 0; back = 1;
- while((*sptr) && (l < (sz - 1))) {
- x = *(sptr++);
- *(dptr++) = (dkChar)x;
- l++;
- }
- *dptr = (dkChar)'\0';
- if(*sptr) {
- back = 0;
- if(app) {
- /* ERROR: Destination buffer too small! */
- dk3app_log_i1(app, DK3_LL_ERROR, 38);
- }
- }
- }
- return back;
-}
-
-
-
-int
-dk3str_string_to_c8_simple_app(char *db,size_t sz,dkChar const *s,dk3_app_t *ap)
-{
- int back = 0;
- register dkChar const *sptr; /* Source pointer. */
- register dkChar x; /* Current source character. */
- register char *dptr; /* Destination pointer. */
-
- if((db) && (sz) && (s)) {
- if(dk3str_len(s) < sz) {
- back = 1;
- sptr = s; dptr = db;
- while(*sptr) {
- x = *(sptr++);
- *(dptr++) = (char)x;
-#if DK3_CHAR_SIZE > 1
- if(x > (dkChar)0xFF) {
- back = 0;
- }
-#endif
- }
- *dptr = '\0';
- if(!(back)) {
- if(ap) {
- /* ERROR: Non-ISO-LATIN-1 characters found! */
- dk3app_log_i1(ap, DK3_LL_ERROR, 219);
- }
- }
- } else {
- if(ap) {
- /* ERROR: Destination buffer too short! */
- dk3app_log_i1(ap, DK3_LL_ERROR, 38);
- }
- }
- }
- return back;
-}
-
-
-
-void
-dk3str_string_tolower(dkChar *s)
-{
- dkChar *ptr; /* Pointer into string. */
- if(s) {
- ptr = s;
- while(*ptr) {
- *ptr = dk3str_tolower(*ptr);
- ptr++;
- }
- }
-}
-
-
-
-int
-dk3str_c8_to_str_simple_app(
- dkChar *dp, size_t ds, char const *sp, dk3_app_t *app
-)
-{
- int back = 0;
- char const *sptr; /* Pointer into source buffer. */
- dkChar *dptr; /* Pointer into destination buffer. */
- size_t sz; /* Required destination size. */
- if((dp) && (ds) && (sp)) {
- sz = dk3str_c8_len(sp);
- if(ds > sz) {
- back = 1; sptr = sp; dptr = dp;
- while(*sptr) { *(dptr++) = (dkChar)(*(sptr++)); }
- *dptr = dkT('\0');
- } else {
- if(app) {
- /* ERROR: Destination buffer too short! */
- dk3app_log_i1(app, DK3_LL_ERROR, 38);
- }
- }
- }
- return back;
-}
-
-
-
-int
-dk3str_to_c8p_app(
- char *dp,
- size_t sz,
- dkChar const *src,
-#if DK3_CHAR_SIZE > 1
- int DK3_ARG_UNUSED(ie),
-#else
- int ie,
-#endif
- dk3_app_t *app
-)
-{
- int back = 0;
-#if DK3_CHAR_SIZE > 1
- DK3_UNUSED_ARG(ie)
-#endif
- if((dp) && (sz) && (src)) {
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- back = dk3str_cnv_c32_to_c8p_app(dp, sz, src, app);
-#else
- back = dk3str_cnv_c16_to_c8p_app(dp, sz, src, app);
-#endif
-#else
- if(ie == DK3_ENCODING_PLAIN) {
- if(sz > dk3str_c8_len(src)) {
- dk3str_c8_cpy(dp, src);
- back = 1;
- }
- } else {
- back = dk3str_cnv_c8u_to_c8p_app(dp, sz, src, app);
- }
-#endif
- }
- return back;
-}
-
-
-
-int
-dk3str_to_c8u_app(
- char *dp,
- size_t sz,
- dkChar const *src,
-#if DK3_CHAR_SIZE > 1
- int DK3_ARG_UNUSED(ie),
-#else
- int ie,
-#endif
- dk3_app_t *app
-)
-{
- int back = 0;
-#if DK3_CHAR_SIZE > 1
- DK3_UNUSED_ARG(ie)
-#endif
- if((dp) && (sz) && (src)) {
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- back = dk3str_cnv_c32_to_c8u_app(dp, sz, src, app);
-#else
- back = dk3str_cnv_c16_to_c8u_app(dp, sz, src, app);
-#endif
-#else
- if(ie == DK3_ENCODING_PLAIN) {
- back = dk3str_cnv_c8p_to_c8u_app(dp, sz, src, app);
- } else {
- if(sz > dk3str_c8_len(src)) {
- dk3str_c8_cpy(dp, src);
- back = 1;
- }
- }
-#endif
- }
- return back;
-}
-
-
-
-int
-dk3str_str_to_c8u_app(
- char *d,
- size_t dsz,
- dkChar const *s,
-#if DK3_CHAR_SIZE > 1
- int DK3_ARG_UNUSED(se),
-#else
- int se,
-#endif
- dk3_app_t *app
-)
-{
- int back = 0;
-#if DK3_CHAR_SIZE > 1
- DK3_UNUSED_ARG(se)
-#if DK3_CHAR_SIZE > 2
- back = dk3str_cnv_c32_to_c8u_app(d, dsz, s, app);
-#else
- back = dk3str_cnv_c16_to_c8u_app(d, dsz, s, app);
-#endif
-#else
- switch(se) {
- case DK3_ENCODING_UTF8: {
- if(dk3str_c8_len(s) < dsz) {
- dk3str_c8_cpy(d, s);
- back = 1;
- } else {
- if(app) {
- /* ERROR: String too long! */
- dk3app_log_i1(app, DK3_LL_ERROR, 108);
- }
- }
- } break;
- default: {
- back = dk3str_cnv_c8p_to_c8u_app(d, dsz, s, app);
- } break;
- }
-#endif
- return back;
-}
-
-
-
-int
-dk3str_c8u_to_str_app(
- dkChar *d,
- size_t dsz,
-#if DK3_CHAR_SIZE > 1
- int DK3_ARG_UNUSED(de),
-#else
- int de,
-#endif
- char const *s,
- dk3_app_t *app
-)
-{
- int back = 0;
-
-
-#line 5891 "dk3str.ctr"
-#if DK3_CHAR_SIZE > 1
- DK3_UNUSED_ARG(de)
-#endif
- if((d) && (dsz) && (s)) {
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
-
-
-#line 5898 "dk3str.ctr"
- back = dk3str_cnv_c8u_to_c32_app(d, dsz, s, app);
-#else
-
-
-#line 5901 "dk3str.ctr"
- back = dk3str_cnv_c8u_to_c16_app(d, dsz, s, app);
-#endif
-#else
- switch(de) {
- case DK3_ENCODING_UTF8: {
-
-
-#line 5907 "dk3str.ctr"
- if(dsz > dk3str_c8_len(s)) {
- dk3str_c8_cpy(d, s);
- back = 1;
- } else {
- if(app) {
- /* ERROR: Source string too long! */
- dk3app_log_i1(app, DK3_LL_ERROR, 108);
- }
- }
- } break;
- default: {
-
-
-#line 5919 "dk3str.ctr"
- back = dk3str_cnv_c8u_to_c8p_app(d, dsz, s, app);
- } break;
- }
-#endif
- }
-
-#line 5924 "dk3str.ctr"
- return back;
-}
-
-
-
-int
-dk3str_to_c8_app(char *dp, size_t szdp, dkChar const *src, dk3_app_t *app)
-{
- int back = 0;
-
-
-#line 5934 "dk3str.ctr"
- if((dp) && (szdp) && (src)) {
-#if DK3_CHAR_SIZE > 1
-#if DK3_CHAR_SIZE > 2
- back = dk3str_cnv_c32_to_c8p_app(dp, szdp, src, app);
-#else
- back = dk3str_cnv_c16_to_c8p_app(dp, szdp, src, app);
-#endif
-#else
- if(strlen(src) < szdp) {
- strcpy(dp, src);
- back = 1;
- } else {
- /* ERROR: Destination buffer too small! */
- dk3app_log_i1(app, DK3_LL_ERROR, 38);
- }
-#endif
- }
-
-#line 5951 "dk3str.ctr"
- return back;
-}
-
-
-
-
-
-
-/* vim: set ai sw=2 : */
-