From 69894f75254cd630e2e4fe1422044c6b7d6adb5f Mon Sep 17 00:00:00 2001 From: Wiimm Date: Wed, 3 Feb 2021 16:42:38 +0100 Subject: SZS 2.23a --- project/dclib/dclib-basics.c | 134 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 133 insertions(+), 1 deletion(-) (limited to 'project/dclib/dclib-basics.c') diff --git a/project/dclib/dclib-basics.c b/project/dclib/dclib-basics.c index 2622765..7504951 100644 --- a/project/dclib/dclib-basics.c +++ b/project/dclib/dclib-basics.c @@ -14,7 +14,7 @@ * * *************************************************************************** * * - * Copyright (c) 2012-2020 by Dirk Clemens * + * Copyright (c) 2012-2021 by Dirk Clemens * * * *************************************************************************** * * @@ -551,6 +551,38 @@ char * StringLowerS ( char * buf, size_t buf_size, ccp src ) return StringLowerE(buf,buf+buf_size,src); } +//----------------------------------------------------------------------------- + +char * MemLowerE ( char * buf, ccp buf_end, mem_t src ) +{ + // RESULT: end of copied string pointing to NULL + // 'src.ptr' may be a NULL pointer. + + if ( buf >= buf_end ) + return (char*)buf_end - 1; + + DASSERT(buf); + DASSERT(buf= buf_end ) + return (char*)buf_end - 1; + + DASSERT(buf); + DASSERT(bufname1 : "?"; } +// +/////////////////////////////////////////////////////////////////////////////// +/////////////// LOWER/AUTO/UPPER /////////////// +/////////////////////////////////////////////////////////////////////////////// + +const KeywordTab_t KeyTab_LOWER_AUTO_UPPER[] = +{ + { LOUP_LOWER, "LOWER", "LOWERCASE", 0 }, + { LOUP_LOWER, "LOCASE", "-1", 0 }, + { LOUP_AUTO, "AUTO", "0", 0 }, + { LOUP_UPPER, "UPPER", "UPPERCASE", 0 }, + { LOUP_UPPER, "UPCASE", "1", 0 }, + { 0,0,0,0 } +}; + +//----------------------------------------------------------------------------- + +int ScanKeywordLowerAutoUpper +( + // returns one of LOUP_* + + ccp arg, // argument to scan + int on_empty, // return this value on empty + uint max_num, // >0: additionally accept+return number <= max_num + ccp object // NULL (silent) or object for error messages +) +{ + if ( !arg || !*arg ) + return on_empty; + + int status; + const KeywordTab_t *key = ScanKeyword(&status,arg,KeyTab_LOWER_AUTO_UPPER); + if (key) + return key->id; + + if ( max_num > 0 ) + { + char *end; + const int num = str2l(arg,&end,10); + if ( !*end && num >= LOUP_LOWER && num <= max_num ) + return num; + } + + if (object) + PrintKeywordError(KeyTab_LOWER_AUTO_UPPER,arg,status,0,object); + + return LOUP_ERROR; +} + +//----------------------------------------------------------------------------- + +ccp GetKeywordLowerAutoUpper ( LowerUpper_t value ) +{ + const KeywordTab_t *key = GetKewordById(KeyTab_OFF_AUTO_ON,value); + return key ? key->name1 : "?"; +} + // /////////////////////////////////////////////////////////////////////////////// /////////////// scan command lists /////////////// @@ -7777,6 +7898,17 @@ void * dc_memrchr ( cvp src, int ch, size_t size ) return 0; } +/////////////////////////////////////////////////////////////////////////////// + +bool IsMemConst ( cvp mem, uint size, u8 val ) +{ + if (!size) + return true; + + const u8 *src = (u8*)mem; + return *src == val && !memcmp(src,src+1,size-1); +} + // /////////////////////////////////////////////////////////////////////////////// /////////////// END /////////////// -- cgit v1.3.1