From f978a965248a5a082d6801ef394bdebb55c78e4f Mon Sep 17 00:00:00 2001 From: Wiimm Date: Sat, 14 Jan 2023 08:17:36 +0100 Subject: SZS v2.33a --- project/dclib/dclib-basics.c | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) (limited to 'project/dclib/dclib-basics.c') diff --git a/project/dclib/dclib-basics.c b/project/dclib/dclib-basics.c index c1eabd9..5aede90 100644 --- a/project/dclib/dclib-basics.c +++ b/project/dclib/dclib-basics.c @@ -14,7 +14,7 @@ * * *************************************************************************** * * - * Copyright (c) 2012-2022 by Dirk Clemens * + * Copyright (c) 2012-2023 by Dirk Clemens * * * *************************************************************************** * * @@ -6328,9 +6328,21 @@ const KeywordTab_t * ScanKeywordEx return key_ct; } +/////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// // new keyword list interface +void InitializeKeyListParam ( KeyListParam_t *par ) +{ + DASSERT(klist); + memset(par,0,sizeof(*par)); + par->force_case = LOUP_UPPER; + par->allow_prefix = true; + par->err_code = ERR_SYNTAX; +} + +/////////////////////////////////////////////////////////////////////////////// + s64 ScanKeywordListP ( KeyListParam_t * par, // NULL or parameters and extended result @@ -6343,10 +6355,7 @@ s64 ScanKeywordListP KeyListParam_t localpar; if (!par) { - memset(&localpar,0,sizeof(localpar)); - localpar.force_case = LOUP_UPPER; - localpar.allow_prefix = true; - localpar.err_code = ERR_SYNTAX; + InitializeKeyListParam(&localpar); par = &localpar; } @@ -6382,6 +6391,15 @@ s64 ScanKeywordListP arg++; } + if (par->func_arg) + { + const int stat = par->func_arg(par,key,arg-key,key_tab); + if ( stat < 0 && !(par->err_mode & 1) ) + break; + if (stat) + continue; + } + int prefix = 0, abbrev_count; const KeywordTab_t * cptr = ScanKeywordEx(&abbrev_count,key,arg-key,par->force_case,key_tab); if ( !cptr && par->allow_prefix && key[1] @@ -6443,13 +6461,13 @@ s64 ScanKeywordListP break; } - if (par->func) + if (par->func_key) { - const int stat = par->func(key,arg-key,par,key_tab,cptr,prefix); + const int stat = par->func_key(par,key,arg-key,key_tab,cptr,prefix); if ( stat < 0 && !(par->err_mode & 1) ) break; if (stat) - prefix = 0; + continue; } switch (prefix) -- cgit v1.3.1