diff --git a/qse/include/qse/cmn/str.h b/qse/include/qse/cmn/str.h index a2fc1c12..29ff7dc7 100644 --- a/qse/include/qse/cmn/str.h +++ b/qse/include/qse/cmn/str.h @@ -1,5 +1,5 @@ /* - * $Id: str.h 410 2011-03-23 15:07:24Z hyunghwan.chung $ + * $Id: str.h 411 2011-03-24 14:20:55Z hyunghwan.chung $ * Copyright 2006-2009 Chung, Hyung-Hwan. This file is part of QSE. @@ -244,85 +244,196 @@ qse_size_t qse_wcsxncpy ( # define qse_strxncpy(buf,bsz,str,len) qse_wcsxncpy(buf,bsz,str,len) #endif +qse_size_t qse_mbsput ( + qse_mchar_t* buf, + const qse_mchar_t* str +); + +qse_size_t qse_wcsput ( + qse_wchar_t* buf, + const qse_wchar_t* str +); + /** - * The qse_strxput() function copies the string @a str into the buffer @a buf + * The qse_mbsxput() function copies the string @a str into the buffer @a buf * of the size @a bsz. Unlike qse_strxcpy(), it does not null-terminate the * buffer. */ -qse_size_t qse_strxput ( - qse_char_t* buf, - qse_size_t bsz, - const qse_char_t* str -); - -qse_size_t qse_strxnput ( - qse_char_t* buf, - qse_size_t bsz, - const qse_char_t* str, - qse_size_t len +qse_size_t qse_mbsxput ( + qse_mchar_t* buf, + qse_size_t bsz, + const qse_mchar_t* str ); /** - * The qse_strfcpy() function formats a string by position. + * The qse_wcsxput() function copies the string @a str into the buffer @a buf + * of the size @a bsz. Unlike qse_strxcpy(), it does not null-terminate the + * buffer. + */ +qse_size_t qse_wcsxput ( + qse_wchar_t* buf, + qse_size_t bsz, + const qse_wchar_t* str +); + +qse_size_t qse_mbsxnput ( + qse_mchar_t* buf, + qse_size_t bsz, + const qse_mchar_t* str, + qse_size_t len +); + +qse_size_t qse_wcsxnput ( + qse_wchar_t* buf, + qse_size_t bsz, + const qse_wchar_t* str, + qse_size_t len +); + +#ifdef QSE_CHAR_IS_MCHAR +# define qse_strput(buf,str) qse_mbsput(buf,str) +# define qse_strxput(buf,bsz,str) qse_mbsxput(buf,bsz,str) +# define qse_strxnput(buf,bsz,str,len) qse_mbsxnput(buf,bsz,str,len) +#else +# define qse_strput(buf,str) qse_wcsput(buf,str) +# define qse_strxput(buf,bsz,str) qse_wcsxput(buf,bsz,str) +# define qse_strxnput(buf,bsz,str,len) qse_wcsxnput(buf,bsz,str,len) +#endif + +/** + * The qse_mbsfcpy() function formats a string by position. * The position specifier is a number enclosed in ${ and }. * When ${ is preceeded by a backslash, it is treated literally. * See the example below: * @code * qse_char_t buf[256] - * qse_char_t* colors[] = { QSE_T("blue"), QSE_T("green"), QSE_T("red") }; - * qse_strfcpy(buf, QSE_T("RGB: ${2}, ${1}, ${0}"), colors); + * qse_char_t* colors[] = { QSE_MT("blue"), QSE_MT("green"), QSE_MT("red") }; + * qse_mbsfcpy(buf, QSE_MT("RGB: ${2}, ${1}, ${0}"), colors); * @endcode - * @sa qse_strfncpy, qse_strxfcpy, qse_strxfncpy + * @sa qse_mbsfncpy, qse_mbsxfcpy, qse_mbsxfncpy */ -qse_size_t qse_strfcpy ( - qse_char_t* buf, - const qse_char_t* fmt, - const qse_char_t* str[] +qse_size_t qse_mbsfcpy ( + qse_mchar_t* buf, + const qse_mchar_t* fmt, + const qse_mchar_t* str[] ); /** - * The qse_strfncpy() function formats a string by position. - * It differs from qse_strfcpy() in that @a str is an array of the - * #qse_cstr_t type. - * @sa qse_strfcpy, qse_strxfcpy, qse_strxfncpy + * The qse_wcsfcpy() function formats a string by position. + * The position specifier is a number enclosed in ${ and }. + * When ${ is preceeded by a backslash, it is treated literally. + * See the example below: + * @code + * qse_char_t buf[256] + * qse_char_t* colors[] = { QSE_WT("blue"), QSE_WT("green"), QSE_WT("red") }; + * qse_wcsfcpy(buf, QSE_WT("RGB: ${2}, ${1}, ${0}"), colors); + * @endcode + * @sa qse_wcsfncpy, qse_wcsxfcpy, qse_wcsxfncpy */ -qse_size_t qse_strfncpy ( - qse_char_t* buf, - const qse_char_t* fmt, - const qse_cstr_t str[] +qse_size_t qse_wcsfcpy ( + qse_wchar_t* buf, + const qse_wchar_t* fmt, + const qse_wchar_t* str[] ); /** - * The qse_strxfcpy() function formats a string by position. + * The qse_mbsfncpy() function formats a string by position. + * It differs from qse_mbsfcpy() in that @a str is an array of the + * #qse_mcstr_t type. + * @sa qse_mbsfcpy, qse_mbsxfcpy, qse_mbsxfncpy + */ +qse_size_t qse_mbsfncpy ( + qse_mchar_t* buf, + const qse_mchar_t* fmt, + const qse_mcstr_t str[] +); + +/** + * The qse_wcsfncpy() function formats a string by position. + * It differs from qse_wcsfcpy() in that @a str is an array of the + * #qse_wcstr_t type. + * @sa qse_wcsfcpy, qse_wcsxfcpy, qse_wcsxfncpy + */ +qse_size_t qse_wcsfncpy ( + qse_wchar_t* buf, + const qse_wchar_t* fmt, + const qse_wcstr_t str[] +); + +/** + * The qse_mbsxfcpy() function formats a string by position. * It differs from qse_strfcpy() in that @a buf is length-bounded of @a bsz * characters. * @code - * qse_char_t buf[256] - * qse_char_t* colors[] = { QSE_T("blue"), QSE_T("green"), QSE_T("red") }; - * qse_strxfcpy(buf, QSE_COUNTOF(buf), QSE_T("RGB: ${2}, ${1}, ${0}"), colors); + * qse_mchar_t buf[256] + * qse_mchar_t* colors[] = { QSE_MT("blue"), QSE_MT("green"), QSE_MT("red") }; + * qse_mbsxfcpy(buf, QSE_COUNTOF(buf), QSE_MT("RGB: ${2}, ${1}, ${0}"), colors); * @endcode - * @sa qse_strfcpy, qse_strfncpy, qse_strxfncpy + * @sa qse_mbsfcpy, qse_mbsfncpy, qse_mbsxfncpy */ -qse_size_t qse_strxfcpy ( - qse_char_t* buf, - qse_size_t bsz, - const qse_char_t* fmt, - const qse_char_t* str[] +qse_size_t qse_mbsxfcpy ( + qse_mchar_t* buf, + qse_size_t bsz, + const qse_mchar_t* fmt, + const qse_mchar_t* str[] ); /** - * The qse_strxfncpy() function formats a string by position. - * It differs from qse_strfcpy() in that @a buf is length-bounded of @a bsz - * characters and @a str is an array of the #qse_cstr_t type. - * @sa qse_strfcpy, qse_strfncpy, qse_strxfcpy + * The qse_wcsxfcpy() function formats a string by position. + * It differs from qse_wcsfcpy() in that @a buf is length-bounded of @a bsz + * characters. + * @code + * qse_char_t buf[256] + * qse_char_t* colors[] = { QSE_WT("blue"), QSE_WT("green"), QSE_WT("red") }; + * qse_wcsxfcpy(buf, QSE_COUNTOF(buf), QSE_WT("RGB: ${2}, ${1}, ${0}"), colors); + * @endcode + * @sa qse_wcsfcpy, qse_wcsfncpy, qse_wcsxfncpy */ -qse_size_t qse_strxfncpy ( - qse_char_t* buf, - qse_size_t bsz, - const qse_char_t* fmt, - const qse_cstr_t str[] +qse_size_t qse_wcsxfcpy ( + qse_wchar_t* buf, + qse_size_t bsz, + const qse_wchar_t* fmt, + const qse_wchar_t* str[] ); +/** + * The qse_mbsxfncpy() function formats a string by position. + * It differs from qse_strfcpy() in that @a buf is length-bounded of @a bsz + * characters and @a str is an array of the #qse_mcstr_t type. + * @sa qse_mbsfcpy, qse_mbsfncpy, qse_mbsxfcpy + */ +qse_size_t qse_mbsxfncpy ( + qse_mchar_t* buf, + qse_size_t bsz, + const qse_mchar_t* fmt, + const qse_mcstr_t str[] +); + +/** + * The qse_wcsxfncpy() function formats a string by position. + * It differs from qse_strfcpy() in that @a buf is length-bounded of @a bsz + * characters and @a str is an array of the #qse_wcstr_t type. + * @sa qse_wcsfcpy, qse_wcsfncpy, qse_wcsxfcpy + */ +qse_size_t qse_wcsxfncpy ( + qse_wchar_t* buf, + qse_size_t bsz, + const qse_wchar_t* fmt, + const qse_wcstr_t str[] +); + +#ifdef QSE_CHAR_IS_MCHAR +# define qse_strfcpy(buf,fmt,str) qse_mbsfcpy(buf,fmt,str) +# define qse_strfncpy(buf,fmt,str) qse_mbsfncpy(buf,fmt,str) +# define qse_strxfcpy(buf,bsz,fmt,str) qse_mbsxfcpy(buf,bsz,fmt,str) +# define qse_strxfncpy(buf,bsz,fmt,str) qse_mbsxfncpy(buf,bsz,fmt,str) +#else +# define qse_strfcpy(buf,fmt,str) qse_wcsfcpy(buf,fmt,str) +# define qse_strfncpy(buf,fmt,str) qse_wcsfncpy(buf,fmt,str) +# define qse_strxfcpy(buf,bsz,fmt,str) qse_wcsxfcpy(buf,bsz,fmt,str) +# define qse_strxfncpy(buf,bsz,fmt,str) qse_wcsxfncpy(buf,bsz,fmt,str) +#endif + /** * The qse_strxsubst() function expands @a fmt into a buffer @a buf of the size * @a bsz by substituting new values for ${} segments within it. The actual diff --git a/qse/include/qse/types.h b/qse/include/qse/types.h index 0f16ded9..7ca25180 100644 --- a/qse/include/qse/types.h +++ b/qse/include/qse/types.h @@ -1,5 +1,5 @@ /* - * $Id: types.h 402 2011-03-18 15:07:21Z hyunghwan.chung $ + * $Id: types.h 411 2011-03-24 14:20:55Z hyunghwan.chung $ * Copyright 2006-2009 Chung, Hyung-Hwan. This file is part of QSE. @@ -345,7 +345,7 @@ typedef int qse_mcint_t; typedef wchar_t qse_wcint_t; /* all the way down from here for C */ -#elif defined(__WCHAR_TYPE__) && defined(__WINT_TYPE__) +#elif defined(__GNUC__) && defined(__WCHAR_TYPE__) && defined(__WINT_TYPE__) typedef __WCHAR_TYPE__ qse_wchar_t; typedef __WINT_TYPE__ qse_wcint_t; #elif (QSE_SIZEOF_WCHAR_T == 2) || (QSE_SIZEOF_WCHAR_T == 0) @@ -396,12 +396,12 @@ typedef int qse_mcint_t; * The qse_cint_t typep defines a type that can hold a qse_char_t value and * #QSE_CHAR_EOF. */ -#if defined(QSE_CHAR_IS_WCHAR) - typedef qse_wchar_t qse_char_t; - typedef qse_wcint_t qse_cint_t; -#elif defined(QSE_CHAR_IS_MCHAR) +#if defined(QSE_CHAR_IS_MCHAR) typedef qse_mchar_t qse_char_t; typedef qse_mcint_t qse_cint_t; +#elif defined(QSE_CHAR_IS_WCHAR) + typedef qse_wchar_t qse_char_t; + typedef qse_wcint_t qse_cint_t; #else /* If the character type is not determined in the conf_xxx files */ @@ -431,29 +431,62 @@ typedef int qse_mcint_t; #endif /** - * The qse_xstr_t type defines a structure combining a pointer to a character + * The qse_mxstr_t type defines a structure combining a pointer to a character * string and the number of characters. It is designed to be interchangeable - * with the #qse_cstr_t type except the constness on the @a ptr field. + * with the #qse_mcstr_t type except the constness on the @a ptr field. */ -struct qse_xstr_t +struct qse_mxstr_t { - qse_char_t* ptr; /**< pointer to a character string */ - qse_size_t len; /**< the number of characters */ + qse_mchar_t* ptr; /**< pointer to a character string */ + qse_size_t len; /**< the number of characters */ }; -typedef struct qse_xstr_t qse_xstr_t; +typedef struct qse_mxstr_t qse_mxstr_t; /** - * The qse_cstr_t type defines a structure combining a pointer to + * The qse_wxstr_t type defines a structure combining a pointer to a character + * string and the number of characters. It is designed to be interchangeable + * with the #qse_wcstr_t type except the constness on the @a ptr field. + */ +struct qse_wxstr_t +{ + qse_wchar_t* ptr; /**< pointer to a character string */ + qse_size_t len; /**< the number of characters */ +}; +typedef struct qse_wxstr_t qse_wxstr_t; + +/** + * The qse_mcstr_t type defines a structure combining a pointer to * a constant character string and the number of characters. - * It is designed to be interchangeable with the #qse_xstr_t type + * It is designed to be interchangeable with the #qse_mxstr_t type * except the constness on the @a ptr field. */ -struct qse_cstr_t +struct qse_mcstr_t { - const qse_char_t* ptr; /**< pointer to a const character string */ - qse_size_t len; /**< the number of characters */ + const qse_mchar_t* ptr; /**< pointer to a const character string */ + qse_size_t len; /**< the number of characters */ }; -typedef struct qse_cstr_t qse_cstr_t; +typedef struct qse_mcstr_t qse_mcstr_t; + +/** + * The qse_wcstr_t type defines a structure combining a pointer to + * a constant character string and the number of characters. + * It is designed to be interchangeable with the #qse_wxstr_t type + * except the constness on the @a ptr field. + */ +struct qse_wcstr_t +{ + const qse_wchar_t* ptr; /**< pointer to a const character string */ + qse_size_t len; /**< the number of characters */ +}; +typedef struct qse_wcstr_t qse_wcstr_t; + +#if defined(QSE_CHAR_IS_MCHAR) + typedef qse_mxstr_t qse_xstr_t; + typedef qse_mcstr_t qse_cstr_t; +#else + typedef qse_wxstr_t qse_xstr_t; + typedef qse_wcstr_t qse_cstr_t; +#endif /** * allocate a memory chunk of the size @a n. diff --git a/qse/lib/cmn/Makefile.am b/qse/lib/cmn/Makefile.am index 1882bb29..47d37b1f 100644 --- a/qse/lib/cmn/Makefile.am +++ b/qse/lib/cmn/Makefile.am @@ -9,7 +9,8 @@ lib_LTLIBRARIES = libqsecmn.la libqsecmn_la_SOURCES = \ syscall.h mem.h \ mem.c xma.c fma.c chr.c chr_cnv.c rex.c \ - str_bas.c str_cnv.c str_cpy.c str_dyn.c str_pbrk.c str_spn.c str_utl.c \ + str_bas.c str_cnv.c str_cpy.c str_dyn.c str_fcpy.c \ + str_pbrk.c str_put.c str_spn.c str_utl.c \ lda.c oht.c htb.c rbt.c sll.c gdl.c dll.c opt.c \ tio.c tio_get.c tio_put.c \ fio.c pio.c sio.c \ diff --git a/qse/lib/cmn/Makefile.in b/qse/lib/cmn/Makefile.in index 73e8d103..b3c95b1e 100644 --- a/qse/lib/cmn/Makefile.in +++ b/qse/lib/cmn/Makefile.in @@ -73,10 +73,10 @@ am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libqsecmn_la_DEPENDENCIES = am_libqsecmn_la_OBJECTS = mem.lo xma.lo fma.lo chr.lo chr_cnv.lo \ - rex.lo str_bas.lo str_cnv.lo str_dyn.lo str_pbrk.lo str_spn.lo \ - str_utl.lo lda.lo oht.lo htb.lo rbt.lo sll.lo gdl.lo dll.lo \ - opt.lo tio.lo tio_get.lo tio_put.lo fio.lo pio.lo sio.lo \ - alg_search.lo alg_sort.lo time.lo misc.lo assert.lo main.lo \ + rex.lo str_bas.lo str_cnv.lo str_dyn.lo str_fcpy.lo str_pbrk.lo \ + str_put.lo str_spn.lo str_utl.lo lda.lo oht.lo htb.lo rbt.lo sll.lo \ + gdl.lo dll.lo opt.lo tio.lo tio_get.lo tio_put.lo fio.lo pio.lo \ + sio.lo alg_search.lo alg_sort.lo time.lo misc.lo assert.lo main.lo \ stdio.lo libqsecmn_la_OBJECTS = $(am_libqsecmn_la_OBJECTS) libqsecmn_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ @@ -265,7 +265,8 @@ lib_LTLIBRARIES = libqsecmn.la $(am__append_1) libqsecmn_la_SOURCES = \ syscall.h mem.h \ mem.c xma.c fma.c chr.c chr_cnv.c rex.c \ - str_bas.c str_cnv.c str_cpy.c str_dyn.c str_pbrk.c str_spn.c str_utl.c \ + str_bas.c str_cnv.c str_cpy.c str_dyn.c str_fcpy.c \ + str_pbrk.c str_put.c str_spn.c str_utl.c \ lda.c oht.c htb.c rbt.c sll.c gdl.c dll.c opt.c \ tio.c tio_get.c tio_put.c \ fio.c pio.c sio.c \ @@ -386,7 +387,9 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str_bas.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str_cnv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str_dyn.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str_fcpy.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str_pbrk.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str_put.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str_spn.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str_utl.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/time.Plo@am__quote@ diff --git a/qse/lib/cmn/str_bas.c b/qse/lib/cmn/str_bas.c index 25585b96..dc26ed0f 100644 --- a/qse/lib/cmn/str_bas.c +++ b/qse/lib/cmn/str_bas.c @@ -1,5 +1,5 @@ /* - * $Id: str_bas.c 410 2011-03-23 15:07:24Z hyunghwan.chung $ + * $Id: str_bas.c 411 2011-03-24 14:20:55Z hyunghwan.chung $ * Copyright 2006-2009 Chung, Hyung-Hwan. This file is part of QSE. @@ -43,264 +43,6 @@ qse_size_t qse_strbytes (const qse_char_t* str) return (p - str) * QSE_SIZEOF(qse_char_t); } -qse_size_t qse_strxput ( - qse_char_t* buf, qse_size_t bsz, const qse_char_t* str) -{ - qse_char_t* p, * p2; - - p = buf; p2 = buf + bsz; - - while (p < p2) - { - if (*str == QSE_T('\0')) break; - *p++ = *str++; - } - - return p - buf; -} - -qse_size_t qse_strxnput ( - qse_char_t* buf, qse_size_t bsz, const qse_char_t* str, qse_size_t len) -{ - qse_char_t* p, * p2; - const qse_char_t* end; - - p = buf; p2 = buf + bsz; end = str + len; - - while (p < p2) - { - if (str >= end) break; - *p++ = *str++; - } - - return p - buf; -} - -qse_size_t qse_strfcpy ( - qse_char_t* buf, const qse_char_t* fmt, const qse_char_t* str[]) -{ - qse_char_t* b = buf; - const qse_char_t* f = fmt; - - while (*f != QSE_T('\0')) - { - if (*f == QSE_T('$')) - { - if (f[1] == QSE_T('{') && - (f[2] >= QSE_T('0') && f[2] <= QSE_T('9'))) - { - const qse_char_t* tmp; - qse_size_t idx = 0; - - tmp = f; - f += 2; - - do idx = idx * 10 + (*f++ - QSE_T('0')); - while (*f >= QSE_T('0') && *f <= QSE_T('9')); - - if (*f != QSE_T('}')) - { - f = tmp; - goto normal; - } - - f++; - - tmp = str[idx]; - while (*tmp != QSE_T('\0')) *b++ = *tmp++; - continue; - } - else if (f[1] == QSE_T('$')) f++; - } - - normal: - *b++ = *f++; - } - - *b = QSE_T('\0'); - return b - buf; -} - -qse_size_t qse_strfncpy ( - qse_char_t* buf, const qse_char_t* fmt, const qse_cstr_t str[]) -{ - qse_char_t* b = buf; - const qse_char_t* f = fmt; - - while (*f != QSE_T('\0')) - { - if (*f == QSE_T('\\')) - { - // get the escaped character and treat it normally. - // if the escaper is the last character, treat it - // normally also. - if (f[1] != QSE_T('\0')) f++; - } - else if (*f == QSE_T('$')) - { - if (f[1] == QSE_T('{') && - (f[2] >= QSE_T('0') && f[2] <= QSE_T('9'))) - { - const qse_char_t* tmp, * tmpend; - qse_size_t idx = 0; - - tmp = f; - f += 2; - - do idx = idx * 10 + (*f++ - QSE_T('0')); - while (*f >= QSE_T('0') && *f <= QSE_T('9')); - - if (*f != QSE_T('}')) - { - f = tmp; - goto normal; - } - - f++; - - tmp = str[idx].ptr; - tmpend = tmp + str[idx].len; - - while (tmp < tmpend) *b++ = *tmp++; - continue; - } - else if (f[1] == QSE_T('$')) f++; - } - - normal: - *b++ = *f++; - } - - *b = QSE_T('\0'); - return b - buf; -} - -qse_size_t qse_strxfcpy ( - qse_char_t* buf, qse_size_t bsz, - const qse_char_t* fmt, const qse_char_t* str[]) -{ - qse_char_t* b = buf; - qse_char_t* end = buf + bsz - 1; - const qse_char_t* f = fmt; - - if (bsz <= 0) return 0; - - while (*f != QSE_T('\0')) - { - if (*f == QSE_T('\\')) - { - // get the escaped character and treat it normally. - // if the escaper is the last character, treat it - // normally also. - if (f[1] != QSE_T('\0')) f++; - } - else if (*f == QSE_T('$')) - { - if (f[1] == QSE_T('{') && - (f[2] >= QSE_T('0') && f[2] <= QSE_T('9'))) - { - const qse_char_t* tmp; - qse_size_t idx = 0; - - tmp = f; - f += 2; - - do idx = idx * 10 + (*f++ - QSE_T('0')); - while (*f >= QSE_T('0') && *f <= QSE_T('9')); - - if (*f != QSE_T('}')) - { - f = tmp; - goto normal; - } - - f++; - - tmp = str[idx]; - while (*tmp != QSE_T('\0')) - { - if (b >= end) goto fini; - *b++ = *tmp++; - } - continue; - } - else if (f[1] == QSE_T('$')) f++; - } - - normal: - if (b >= end) break; - *b++ = *f++; - } - -fini: - *b = QSE_T('\0'); - return b - buf; -} - -qse_size_t qse_strxfncpy ( - qse_char_t* buf, qse_size_t bsz, - const qse_char_t* fmt, const qse_cstr_t str[]) -{ - qse_char_t* b = buf; - qse_char_t* end = buf + bsz - 1; - const qse_char_t* f = fmt; - - if (bsz <= 0) return 0; - - while (*f != QSE_T('\0')) - { - if (*f == QSE_T('\\')) - { - // get the escaped character and treat it normally. - // if the escaper is the last character, treat it - // normally also. - if (f[1] != QSE_T('\0')) f++; - } - else if (*f == QSE_T('$')) - { - if (f[1] == QSE_T('{') && - (f[2] >= QSE_T('0') && f[2] <= QSE_T('9'))) - { - const qse_char_t* tmp, * tmpend; - qse_size_t idx = 0; - - tmp = f; - f += 2; - - do idx = idx * 10 + (*f++ - QSE_T('0')); - while (*f >= QSE_T('0') && *f <= QSE_T('9')); - - if (*f != QSE_T('}')) - { - f = tmp; - goto normal; - } - - f++; - - tmp = str[idx].ptr; - tmpend = tmp + str[idx].len; - - while (tmp < tmpend) - { - if (b >= end) goto fini; - *b++ = *tmp++; - } - continue; - } - else if (f[1] == QSE_T('$')) f++; - } - - normal: - if (b >= end) break; - *b++ = *f++; - } - -fini: - *b = QSE_T('\0'); - return b - buf; -} - qse_size_t qse_strxsubst ( qse_char_t* buf, qse_size_t bsz, const qse_char_t* fmt, qse_strxsubst_subst_t subst, void* ctx) diff --git a/qse/lib/cmn/str_cpy.c b/qse/lib/cmn/str_cpy.c index 81cb3adc..d9f4e523 100644 --- a/qse/lib/cmn/str_cpy.c +++ b/qse/lib/cmn/str_cpy.c @@ -1,5 +1,5 @@ /* - * $Id: str_cnv.c 402 2011-03-18 15:07:21Z hyunghwan.chung $ + * $Id$ * Copyright 2006-2009 Chung, Hyung-Hwan. This file is part of QSE. diff --git a/qse/lib/cmn/str_fcpy.c b/qse/lib/cmn/str_fcpy.c new file mode 100644 index 00000000..9c9ff2f4 --- /dev/null +++ b/qse/lib/cmn/str_fcpy.c @@ -0,0 +1,471 @@ +/* + * $Id$ + * + Copyright 2006-2009 Chung, Hyung-Hwan. + This file is part of QSE. + + QSE is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of + the License, or (at your option) any later version. + + QSE is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with QSE. If not, see . + */ + +#include + +qse_size_t qse_mbsfcpy ( + qse_mchar_t* buf, const qse_mchar_t* fmt, const qse_mchar_t* str[]) +{ + qse_mchar_t* b = buf; + const qse_mchar_t* f = fmt; + + while (*f != QSE_MT('\0')) + { + if (*f == QSE_MT('$')) + { + if (f[1] == QSE_MT('{') && + (f[2] >= QSE_MT('0') && f[2] <= QSE_MT('9'))) + { + const qse_mchar_t* tmp; + qse_size_t idx = 0; + + tmp = f; + f += 2; + + do idx = idx * 10 + (*f++ - QSE_MT('0')); + while (*f >= QSE_MT('0') && *f <= QSE_MT('9')); + + if (*f != QSE_MT('}')) + { + f = tmp; + goto normal; + } + + f++; + + tmp = str[idx]; + while (*tmp != QSE_MT('\0')) *b++ = *tmp++; + continue; + } + else if (f[1] == QSE_MT('$')) f++; + } + + normal: + *b++ = *f++; + } + + *b = QSE_MT('\0'); + return b - buf; +} + +qse_size_t qse_mbsfncpy ( + qse_mchar_t* buf, const qse_mchar_t* fmt, const qse_mcstr_t str[]) +{ + qse_mchar_t* b = buf; + const qse_mchar_t* f = fmt; + + while (*f != QSE_MT('\0')) + { + if (*f == QSE_MT('\\')) + { + // get the escaped character and treat it normally. + // if the escaper is the last character, treat it + // normally also. + if (f[1] != QSE_MT('\0')) f++; + } + else if (*f == QSE_MT('$')) + { + if (f[1] == QSE_MT('{') && + (f[2] >= QSE_MT('0') && f[2] <= QSE_MT('9'))) + { + const qse_mchar_t* tmp, * tmpend; + qse_size_t idx = 0; + + tmp = f; + f += 2; + + do idx = idx * 10 + (*f++ - QSE_MT('0')); + while (*f >= QSE_MT('0') && *f <= QSE_MT('9')); + + if (*f != QSE_MT('}')) + { + f = tmp; + goto normal; + } + + f++; + + tmp = str[idx].ptr; + tmpend = tmp + str[idx].len; + + while (tmp < tmpend) *b++ = *tmp++; + continue; + } + else if (f[1] == QSE_MT('$')) f++; + } + + normal: + *b++ = *f++; + } + + *b = QSE_MT('\0'); + return b - buf; +} + +qse_size_t qse_mbsxfcpy ( + qse_mchar_t* buf, qse_size_t bsz, + const qse_mchar_t* fmt, const qse_mchar_t* str[]) +{ + qse_mchar_t* b = buf; + qse_mchar_t* end = buf + bsz - 1; + const qse_mchar_t* f = fmt; + + if (bsz <= 0) return 0; + + while (*f != QSE_MT('\0')) + { + if (*f == QSE_MT('\\')) + { + // get the escaped character and treat it normally. + // if the escaper is the last character, treat it + // normally also. + if (f[1] != QSE_MT('\0')) f++; + } + else if (*f == QSE_MT('$')) + { + if (f[1] == QSE_MT('{') && + (f[2] >= QSE_MT('0') && f[2] <= QSE_MT('9'))) + { + const qse_mchar_t* tmp; + qse_size_t idx = 0; + + tmp = f; + f += 2; + + do idx = idx * 10 + (*f++ - QSE_MT('0')); + while (*f >= QSE_MT('0') && *f <= QSE_MT('9')); + + if (*f != QSE_MT('}')) + { + f = tmp; + goto normal; + } + + f++; + + tmp = str[idx]; + while (*tmp != QSE_MT('\0')) + { + if (b >= end) goto fini; + *b++ = *tmp++; + } + continue; + } + else if (f[1] == QSE_MT('$')) f++; + } + + normal: + if (b >= end) break; + *b++ = *f++; + } + +fini: + *b = QSE_MT('\0'); + return b - buf; +} + +qse_size_t qse_mbsxfncpy ( + qse_mchar_t* buf, qse_size_t bsz, + const qse_mchar_t* fmt, const qse_mcstr_t str[]) +{ + qse_mchar_t* b = buf; + qse_mchar_t* end = buf + bsz - 1; + const qse_mchar_t* f = fmt; + + if (bsz <= 0) return 0; + + while (*f != QSE_MT('\0')) + { + if (*f == QSE_MT('\\')) + { + // get the escaped character and treat it normally. + // if the escaper is the last character, treat it + // normally also. + if (f[1] != QSE_MT('\0')) f++; + } + else if (*f == QSE_MT('$')) + { + if (f[1] == QSE_MT('{') && + (f[2] >= QSE_MT('0') && f[2] <= QSE_MT('9'))) + { + const qse_mchar_t* tmp, * tmpend; + qse_size_t idx = 0; + + tmp = f; + f += 2; + + do idx = idx * 10 + (*f++ - QSE_MT('0')); + while (*f >= QSE_MT('0') && *f <= QSE_MT('9')); + + if (*f != QSE_MT('}')) + { + f = tmp; + goto normal; + } + + f++; + + tmp = str[idx].ptr; + tmpend = tmp + str[idx].len; + + while (tmp < tmpend) + { + if (b >= end) goto fini; + *b++ = *tmp++; + } + continue; + } + else if (f[1] == QSE_MT('$')) f++; + } + + normal: + if (b >= end) break; + *b++ = *f++; + } + +fini: + *b = QSE_MT('\0'); + return b - buf; +} + +qse_size_t qse_wcsfcpy ( + qse_wchar_t* buf, const qse_wchar_t* fmt, const qse_wchar_t* str[]) +{ + qse_wchar_t* b = buf; + const qse_wchar_t* f = fmt; + + while (*f != QSE_WT('\0')) + { + if (*f == QSE_WT('$')) + { + if (f[1] == QSE_WT('{') && + (f[2] >= QSE_WT('0') && f[2] <= QSE_WT('9'))) + { + const qse_wchar_t* tmp; + qse_size_t idx = 0; + + tmp = f; + f += 2; + + do idx = idx * 10 + (*f++ - QSE_WT('0')); + while (*f >= QSE_WT('0') && *f <= QSE_WT('9')); + + if (*f != QSE_WT('}')) + { + f = tmp; + goto normal; + } + + f++; + + tmp = str[idx]; + while (*tmp != QSE_WT('\0')) *b++ = *tmp++; + continue; + } + else if (f[1] == QSE_WT('$')) f++; + } + + normal: + *b++ = *f++; + } + + *b = QSE_WT('\0'); + return b - buf; +} + +qse_size_t qse_wcsfncpy ( + qse_wchar_t* buf, const qse_wchar_t* fmt, const qse_wcstr_t str[]) +{ + qse_wchar_t* b = buf; + const qse_wchar_t* f = fmt; + + while (*f != QSE_WT('\0')) + { + if (*f == QSE_WT('\\')) + { + // get the escaped character and treat it normally. + // if the escaper is the last character, treat it + // normally also. + if (f[1] != QSE_WT('\0')) f++; + } + else if (*f == QSE_WT('$')) + { + if (f[1] == QSE_WT('{') && + (f[2] >= QSE_WT('0') && f[2] <= QSE_WT('9'))) + { + const qse_wchar_t* tmp, * tmpend; + qse_size_t idx = 0; + + tmp = f; + f += 2; + + do idx = idx * 10 + (*f++ - QSE_WT('0')); + while (*f >= QSE_WT('0') && *f <= QSE_WT('9')); + + if (*f != QSE_WT('}')) + { + f = tmp; + goto normal; + } + + f++; + + tmp = str[idx].ptr; + tmpend = tmp + str[idx].len; + + while (tmp < tmpend) *b++ = *tmp++; + continue; + } + else if (f[1] == QSE_WT('$')) f++; + } + + normal: + *b++ = *f++; + } + + *b = QSE_WT('\0'); + return b - buf; +} + +qse_size_t qse_wcsxfcpy ( + qse_wchar_t* buf, qse_size_t bsz, + const qse_wchar_t* fmt, const qse_wchar_t* str[]) +{ + qse_wchar_t* b = buf; + qse_wchar_t* end = buf + bsz - 1; + const qse_wchar_t* f = fmt; + + if (bsz <= 0) return 0; + + while (*f != QSE_WT('\0')) + { + if (*f == QSE_WT('\\')) + { + // get the escaped character and treat it normally. + // if the escaper is the last character, treat it + // normally also. + if (f[1] != QSE_WT('\0')) f++; + } + else if (*f == QSE_WT('$')) + { + if (f[1] == QSE_WT('{') && + (f[2] >= QSE_WT('0') && f[2] <= QSE_WT('9'))) + { + const qse_wchar_t* tmp; + qse_size_t idx = 0; + + tmp = f; + f += 2; + + do idx = idx * 10 + (*f++ - QSE_WT('0')); + while (*f >= QSE_WT('0') && *f <= QSE_WT('9')); + + if (*f != QSE_WT('}')) + { + f = tmp; + goto normal; + } + + f++; + + tmp = str[idx]; + while (*tmp != QSE_WT('\0')) + { + if (b >= end) goto fini; + *b++ = *tmp++; + } + continue; + } + else if (f[1] == QSE_WT('$')) f++; + } + + normal: + if (b >= end) break; + *b++ = *f++; + } + +fini: + *b = QSE_WT('\0'); + return b - buf; +} + +qse_size_t qse_wcsxfncpy ( + qse_wchar_t* buf, qse_size_t bsz, + const qse_wchar_t* fmt, const qse_wcstr_t str[]) +{ + qse_wchar_t* b = buf; + qse_wchar_t* end = buf + bsz - 1; + const qse_wchar_t* f = fmt; + + if (bsz <= 0) return 0; + + while (*f != QSE_WT('\0')) + { + if (*f == QSE_WT('\\')) + { + // get the escaped character and treat it normally. + // if the escaper is the last character, treat it + // normally also. + if (f[1] != QSE_WT('\0')) f++; + } + else if (*f == QSE_WT('$')) + { + if (f[1] == QSE_WT('{') && + (f[2] >= QSE_WT('0') && f[2] <= QSE_WT('9'))) + { + const qse_wchar_t* tmp, * tmpend; + qse_size_t idx = 0; + + tmp = f; + f += 2; + + do idx = idx * 10 + (*f++ - QSE_WT('0')); + while (*f >= QSE_WT('0') && *f <= QSE_WT('9')); + + if (*f != QSE_WT('}')) + { + f = tmp; + goto normal; + } + + f++; + + tmp = str[idx].ptr; + tmpend = tmp + str[idx].len; + + while (tmp < tmpend) + { + if (b >= end) goto fini; + *b++ = *tmp++; + } + continue; + } + else if (f[1] == QSE_WT('$')) f++; + } + + normal: + if (b >= end) break; + *b++ = *f++; + } + +fini: + *b = QSE_WT('\0'); + return b - buf; +} diff --git a/qse/lib/cmn/str_pbrk.c b/qse/lib/cmn/str_pbrk.c index c26a5f73..028181e9 100644 --- a/qse/lib/cmn/str_pbrk.c +++ b/qse/lib/cmn/str_pbrk.c @@ -1,5 +1,5 @@ /* - * $Id: str_cnv.c 402 2011-03-18 15:07:21Z hyunghwan.chung $ + * $Id$ * Copyright 2006-2009 Chung, Hyung-Hwan. This file is part of QSE. diff --git a/qse/lib/cmn/str_put.c b/qse/lib/cmn/str_put.c new file mode 100644 index 00000000..d12674cd --- /dev/null +++ b/qse/lib/cmn/str_put.c @@ -0,0 +1,101 @@ +/* + * $Id$ + * + Copyright 2006-2009 Chung, Hyung-Hwan. + This file is part of QSE. + + QSE is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of + the License, or (at your option) any later version. + + QSE is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with QSE. If not, see . + */ + +#include + +qse_size_t qse_mbsput (qse_mchar_t* buf, const qse_mchar_t* str) +{ + qse_mchar_t* org = buf; + while (*str != QSE_MT('\0')) *buf++ = *str++; + return buf - org; +} + +qse_size_t qse_wcsput (qse_wchar_t* buf, const qse_wchar_t* str) +{ + qse_wchar_t* org = buf; + while (*str != QSE_WT('\0')) *buf++ = *str++; + return buf - org; +} + +qse_size_t qse_mbsxput ( + qse_mchar_t* buf, qse_size_t bsz, const qse_mchar_t* str) +{ + qse_mchar_t* p, * p2; + + p = buf; p2 = buf + bsz; + + while (p < p2) + { + if (*str == QSE_MT('\0')) break; + *p++ = *str++; + } + + return p - buf; +} + +qse_size_t qse_mbsxnput ( + qse_mchar_t* buf, qse_size_t bsz, const qse_mchar_t* str, qse_size_t len) +{ + qse_mchar_t* p, * p2; + const qse_mchar_t* end; + + p = buf; p2 = buf + bsz; end = str + len; + + while (p < p2) + { + if (str >= end) break; + *p++ = *str++; + } + + return p - buf; +} + +qse_size_t qse_wcsxput ( + qse_wchar_t* buf, qse_size_t bsz, const qse_wchar_t* str) +{ + qse_wchar_t* p, * p2; + + p = buf; p2 = buf + bsz; + + while (p < p2) + { + if (*str == QSE_WT('\0')) break; + *p++ = *str++; + } + + return p - buf; +} + +qse_size_t qse_wcsxnput ( + qse_wchar_t* buf, qse_size_t bsz, const qse_wchar_t* str, qse_size_t len) +{ + qse_wchar_t* p, * p2; + const qse_wchar_t* end; + + p = buf; p2 = buf + bsz; end = str + len; + + while (p < p2) + { + if (str >= end) break; + *p++ = *str++; + } + + return p - buf; +} diff --git a/qse/lib/cmn/str_spn.c b/qse/lib/cmn/str_spn.c index 47fba528..84f5cc45 100644 --- a/qse/lib/cmn/str_spn.c +++ b/qse/lib/cmn/str_spn.c @@ -1,5 +1,5 @@ /* - * $Id: str_cnv.c 402 2011-03-18 15:07:21Z hyunghwan.chung $ + * $Id$ * Copyright 2006-2009 Chung, Hyung-Hwan. This file is part of QSE. diff --git a/qse/watcom/debug/os2/lib/cmn/qsecmn.tgt b/qse/watcom/debug/os2/lib/cmn/qsecmn.tgt index 081e5c28..aac1f5ab 100755 --- a/qse/watcom/debug/os2/lib/cmn/qsecmn.tgt +++ b/qse/watcom/debug/os2/lib/cmn/qsecmn.tgt @@ -42,7 +42,7 @@ WVList 0 10 WPickList -38 +40 11 MItem 3 @@ -548,7 +548,7 @@ WVList 123 MItem 33 -..\..\..\..\..\lib\cmn\str_pbrk.c +..\..\..\..\..\lib\cmn\str_fcpy.c 124 WString 4 @@ -565,8 +565,8 @@ WVList 0 127 MItem -32 -..\..\..\..\..\lib\cmn\str_spn.c +33 +..\..\..\..\..\lib\cmn\str_pbrk.c 128 WString 4 @@ -584,7 +584,7 @@ WVList 131 MItem 32 -..\..\..\..\..\lib\cmn\str_utl.c +..\..\..\..\..\lib\cmn\str_put.c 132 WString 4 @@ -601,8 +601,8 @@ WVList 0 135 MItem -29 -..\..\..\..\..\lib\cmn\time.c +32 +..\..\..\..\..\lib\cmn\str_spn.c 136 WString 4 @@ -619,8 +619,8 @@ WVList 0 139 MItem -28 -..\..\..\..\..\lib\cmn\tio.c +32 +..\..\..\..\..\lib\cmn\str_utl.c 140 WString 4 @@ -637,8 +637,8 @@ WVList 0 143 MItem -32 -..\..\..\..\..\lib\cmn\tio_get.c +29 +..\..\..\..\..\lib\cmn\time.c 144 WString 4 @@ -655,8 +655,8 @@ WVList 0 147 MItem -32 -..\..\..\..\..\lib\cmn\tio_put.c +28 +..\..\..\..\..\lib\cmn\tio.c 148 WString 4 @@ -673,8 +673,8 @@ WVList 0 151 MItem -28 -..\..\..\..\..\lib\cmn\xma.c +32 +..\..\..\..\..\lib\cmn\tio_get.c 152 WString 4 @@ -691,44 +691,44 @@ WVList 0 155 MItem -3 -*.h +32 +..\..\..\..\..\lib\cmn\tio_put.c 156 WString -3 -NIL +4 +COBJ 157 WVList 0 158 WVList 0 --1 +11 1 1 0 159 MItem 28 -..\..\..\..\..\lib\cmn\mem.h +..\..\..\..\..\lib\cmn\xma.c 160 WString -3 -NIL +4 +COBJ 161 WVList 0 162 WVList 0 -155 +11 1 1 0 163 MItem -32 -..\..\..\..\..\lib\cmn\syscall.h +3 +*.h 164 WString 3 @@ -739,7 +739,43 @@ WVList 166 WVList 0 -155 +-1 +1 +1 +0 +167 +MItem +28 +..\..\..\..\..\lib\cmn\mem.h +168 +WString +3 +NIL +169 +WVList +0 +170 +WVList +0 +163 +1 +1 +0 +171 +MItem +32 +..\..\..\..\..\lib\cmn\syscall.h +172 +WString +3 +NIL +173 +WVList +0 +174 +WVList +0 +163 1 1 0 diff --git a/qse/watcom/qse.wpj b/qse/watcom/qse.wpj index 8aac96cf..c6406b09 100755 --- a/qse/watcom/qse.wpj +++ b/qse/watcom/qse.wpj @@ -60,14 +60,14 @@ WRect 1680 5700 4240 -1 +0 0 16 WFileName 30 release/os2/lib/cmn/qsecmn.tgt 24 -25 +27 17 VComponent 18 @@ -120,8 +120,8 @@ release/os2/lib/scm/qsescm.tgt VComponent 27 WRect -430 -320 +1340 +413 5700 4240 0 @@ -130,8 +130,8 @@ WRect WFileName 28 debug/os2/lib/cmn/qsecmn.tgt -19 -22 +21 +24 29 VComponent 30 @@ -180,4 +180,4 @@ WFileName debug/os2/cmd/scm/qsescm.tgt 0 1 -35 +26 diff --git a/qse/watcom/release/os2/lib/cmn/qsecmn.tgt b/qse/watcom/release/os2/lib/cmn/qsecmn.tgt index 2d01f0ea..98d929fc 100755 --- a/qse/watcom/release/os2/lib/cmn/qsecmn.tgt +++ b/qse/watcom/release/os2/lib/cmn/qsecmn.tgt @@ -42,7 +42,7 @@ WVList 0 10 WPickList -38 +40 11 MItem 3 @@ -612,7 +612,7 @@ WVList 139 MItem 33 -..\..\..\..\..\lib\cmn\str_pbrk.c +..\..\..\..\..\lib\cmn\str_fcpy.c 140 WString 4 @@ -629,8 +629,8 @@ WVList 0 143 MItem -32 -..\..\..\..\..\lib\cmn\str_spn.c +33 +..\..\..\..\..\lib\cmn\str_pbrk.c 144 WString 4 @@ -648,29 +648,31 @@ WVList 147 MItem 32 -..\..\..\..\..\lib\cmn\str_utl.c +..\..\..\..\..\lib\cmn\str_put.c 148 WString 4 COBJ 149 WVList -1 +0 150 -MVState +WVList +0 +11 +1 +1 +0 151 -WString -3 -WCC +MItem +32 +..\..\..\..\..\lib\cmn\str_spn.c 152 WString -25 -o?2??Include directories: -1 +4 +COBJ 153 -WString -54 -"$(%watcom)/h;$(%watcom)/h/os2;..\..\..\..\..\include" +WVList 0 154 WVList @@ -681,32 +683,30 @@ WVList 0 155 MItem -29 -..\..\..\..\..\lib\cmn\time.c +32 +..\..\..\..\..\lib\cmn\str_utl.c 156 WString 4 COBJ 157 WVList -0 +1 158 -WVList -0 -11 -1 -1 -0 +MVState 159 -MItem -28 -..\..\..\..\..\lib\cmn\tio.c +WString +3 +WCC 160 WString -4 -COBJ +25 +o?2??Include directories: +1 161 -WVList +WString +54 +"$(%watcom)/h;$(%watcom)/h/os2;..\..\..\..\..\include" 0 162 WVList @@ -717,8 +717,8 @@ WVList 0 163 MItem -32 -..\..\..\..\..\lib\cmn\tio_get.c +29 +..\..\..\..\..\lib\cmn\time.c 164 WString 4 @@ -735,8 +735,8 @@ WVList 0 167 MItem -32 -..\..\..\..\..\lib\cmn\tio_put.c +28 +..\..\..\..\..\lib\cmn\tio.c 168 WString 4 @@ -753,8 +753,8 @@ WVList 0 171 MItem -28 -..\..\..\..\..\lib\cmn\xma.c +32 +..\..\..\..\..\lib\cmn\tio_get.c 172 WString 4 @@ -771,44 +771,44 @@ WVList 0 175 MItem -3 -*.h +32 +..\..\..\..\..\lib\cmn\tio_put.c 176 WString -3 -NIL +4 +COBJ 177 WVList 0 178 WVList 0 --1 +11 1 1 0 179 MItem 28 -..\..\..\..\..\lib\cmn\mem.h +..\..\..\..\..\lib\cmn\xma.c 180 WString -3 -NIL +4 +COBJ 181 WVList 0 182 WVList 0 -175 +11 1 1 0 183 MItem -32 -..\..\..\..\..\lib\cmn\syscall.h +3 +*.h 184 WString 3 @@ -819,7 +819,43 @@ WVList 186 WVList 0 -175 +-1 +1 +1 +0 +187 +MItem +28 +..\..\..\..\..\lib\cmn\mem.h +188 +WString +3 +NIL +189 +WVList +0 +190 +WVList +0 +183 +1 +1 +0 +191 +MItem +32 +..\..\..\..\..\lib\cmn\syscall.h +192 +WString +3 +NIL +193 +WVList +0 +194 +WVList +0 +183 1 1 0