diff options
| author | Wiimm <wiimm@wiimm.de> | 2022-05-13 19:22:13 +0200 |
|---|---|---|
| committer | Wiimm <wiimm@wiimm.de> | 2022-05-13 19:22:13 +0200 |
| commit | 568365f5bdd4dc71a156ca963d89ac002f405a34 (patch) | |
| tree | 730d0311536d8fd46a56b74e2c8cac028e778243 /project/dclib/dclib-cli.c | |
| parent | 9ae8841ec4720e74173e2f72fac33f0848bbf435 (diff) | |
SZS v2.27a
Diffstat (limited to 'project/dclib/dclib-cli.c')
| -rw-r--r-- | project/dclib/dclib-cli.c | 248 |
1 files changed, 3 insertions, 245 deletions
diff --git a/project/dclib/dclib-cli.c b/project/dclib/dclib-cli.c index c4a3015..c4a5664 100644 --- a/project/dclib/dclib-cli.c +++ b/project/dclib/dclib-cli.c @@ -14,16 +14,16 @@ * * *************************************************************************** * * - * Copyright (c) 2012-2021 by Dirk Clemens <wiimm@wiimm.de> * + * Copyright (c) 2012-2022 by Dirk Clemens <wiimm@wiimm.de> * * * *************************************************************************** * * - * This program is free software; you can redistribute it and/or modify * + * This library is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * - * This program is distributed in the hope that it will be useful, * + * This library 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 General Public License for more details. * @@ -41,248 +41,6 @@ // /////////////////////////////////////////////////////////////////////////////// -/////////////// arg_manager_t /////////////// -/////////////////////////////////////////////////////////////////////////////// - -void ResetArgManager ( arg_manager_t *am ) -{ - static char *null_list[] = {0}; - - if (am) - { - if (am->size) - { - uint i; - for ( i = 0; i < am->argc; i++ ) - FreeString(am->argv[i]); - if ( am->argv != null_list ) - FREE(am->argv); - } - memset(am,0,sizeof(*am)); - - am->argv = null_list; - } -} - -/////////////////////////////////////////////////////////////////////////////// - -void SetupArgManager ( arg_manager_t *am, int argc, char ** argv, bool clone ) -{ - DASSERT(am); - memset(am,0,sizeof(*am)); - if (clone) - CloneArgManager(am,argc,argv); - else - AttachArgManager(am,argc,argv); -} - -/////////////////////////////////////////////////////////////////////////////// - -void AttachArgManager ( arg_manager_t *am, int argc, char ** argv ) -{ - DASSERT(am); - ResetArgManager(am); - am->argc = argc; - am->argv = argv; -} - -/////////////////////////////////////////////////////////////////////////////// - -void CloneArgManager ( arg_manager_t *am, int argc, char ** argv ) -{ - DASSERT(am); - AttachArgManager(am,argc,argv); - PrepareEditArgManager(am,0); -} - -/////////////////////////////////////////////////////////////////////////////// - -void CopyArgManager ( arg_manager_t *dest, const arg_manager_t *src ) -{ - DASSERT(dest); - if (!src) - ResetArgManager(dest); - else if( dest != src ) - AttachArgManager(dest,src->argc,src->argv); -} - -/////////////////////////////////////////////////////////////////////////////// - -void MoveArgManager ( arg_manager_t *dest, arg_manager_t *src ) -{ - DASSERT(dest); - ResetArgManager(dest); - if (src) - { - dest->argv = src->argv; - dest->argc = src->argc; - dest->size = src->size; - memset(src,0,sizeof(*src)); - } -} - -/////////////////////////////////////////////////////////////////////////////// - -void PrepareEditArgManager ( arg_manager_t *am, int needed_space ) -{ - DASSERT(am); - - uint new_size = am->argc; - if ( needed_space > 0 ) - new_size += needed_space; - new_size = GetGoodAllocSize2(new_size+(new_size>>4)+10,sizeof(*am->argv)); - PRINT("PrepareEditArgManager(,%d) n=%d, size: %d -> %d\n", - needed_space, am->argc, am->size, new_size ); - - if (am->size) - am->argv = REALLOC(am->argv,sizeof(*am->argv)*new_size); - else - { - char **old = am->argv; - am->argv = MALLOC(sizeof(*am->argv)*new_size); - - uint i; - for ( i = 0; i < am->argc; i++ ) - am->argv[i] = old[i] ? STRDUP(old[i]) : 0; - } - am->size = new_size - 1; - DASSERT( am->argc <= am->size ); - am->argv[am->argc] = 0; -} - -/////////////////////////////////////////////////////////////////////////////// - -uint AppendArgManager ( arg_manager_t *am, ccp arg1, ccp arg2, bool move_arg ) -{ - DASSERT(am); - PRINT("AppendArgManager(,%s,%s,%d)\n",arg1,arg2,move_arg); - return InsertArgManager(am,am->argc,arg1,arg2,move_arg); -} - -/////////////////////////////////////////////////////////////////////////////// - -uint InsertArgManager - ( arg_manager_t *am, int pos, ccp arg1, ccp arg2, bool move_arg ) -{ - PRINT("InsertArgManager(,%d,%s,%s,%d)\n",pos,arg1,arg2,move_arg); - - pos = CheckIndex1(am->argc,pos); - const int n = (arg1!=0) + (arg2!=0); - if (n) - { - PrepareEditArgManager(am,n); - DASSERT( pos>0 && pos <= am->argc ); - char **dest = am->argv + pos; - if ( pos < am->argc ) - memmove( dest+n, dest, (u8*)(am->argv+am->argc) - (u8*)dest ); - if (arg1) - *dest++ = move_arg ? (char*)arg1 : STRDUP(arg1); - if (arg2) - *dest++ = move_arg ? (char*)arg2 : STRDUP(arg2); - am->argc += n; - am->argv[am->argc] = 0; - } - return pos+n; -} - -/////////////////////////////////////////////////////////////////////////////// - -uint ReplaceArgManager - ( arg_manager_t *am, int pos, ccp arg1, ccp arg2, bool move_arg ) -{ - PRINT("ReplaceArgManager(,%d,%s,%s,%d)\n",pos,arg1,arg2,move_arg); - - pos = CheckIndex1(am->argc,pos); - const int n = (arg1!=0) + (arg2!=0); - if (n) - { - PrepareEditArgManager(am,n); - DASSERT( pos>0 && pos <= am->argc ); - char **dest = am->argv + pos; - if (arg1) - { - if ( pos++ < am->argc ) - FreeString(*dest); - *dest++ = move_arg ? (char*)arg1 : STRDUP(arg1); - } - if (arg2) - { - if ( pos++ < am->argc ) - FreeString(*dest); - *dest++ = move_arg ? (char*)arg2 : STRDUP(arg2); - } - if ( pos > am->argc ) - { - am->argc = pos; - am->argv[am->argc] = 0; - } - } - return pos; -} - -/////////////////////////////////////////////////////////////////////////////// - -uint RemoveArgManager ( arg_manager_t *am, int pos, int count ) -{ - DASSERT(am); - - #if HAVE_PRINT - const int oldpos = pos; - #endif - const int n = CheckIndexC(am->argc,&pos,count); - PRINT("RemoveArgManager(,%d,%d) : remove n=%d: %d..%d\n", - oldpos, count, n, pos, pos+n ); - - DASSERT( pos >= 0 && pos <= am->argc ); - DASSERT( n >= 0 && pos+n <= am->argc ); - - if ( n > 0 ) - { - PrepareEditArgManager(am,0); - char **dest = am->argv + pos; - - uint i; - for ( i = 0; i <n; i++ ) - FreeString(dest[i]); - am->argc -= n; - memmove( dest, dest+n, (u8*)(am->argv+am->argc) - (u8*)dest ); - am->argv[am->argc] = 0; - } - return pos; -} - -/////////////////////////////////////////////////////////////////////////////// - -void DumpArgManager ( FILE *f, int indent, const arg_manager_t *am, ccp title ) -{ - if ( !f || !am ) - return; - - indent = NormalizeIndent(indent); - if (title) - fprintf(f,"%*s" "ArgManager[%s]: N=%d", - indent,"", title, am->argc ); - else - fprintf(f,"%*s" "ArgManager: N=%d", indent,"", am->argc ); - - if (am->size) - fprintf(f,"/%u\n",am->size); - else - fputc('\n',f); - - if (am->argc) - { - char buf[10]; - int fw = snprintf(buf,sizeof(buf),"%u",am->argc-1)+2; - - uint i; - for ( i = 0; i < am->argc; i++ ) - fprintf(f,"%*s%*u: |%s|\n", indent,"", fw,i, am->argv[i] ); - } -} - -// -/////////////////////////////////////////////////////////////////////////////// /////////////// global commands /////////////// /////////////////////////////////////////////////////////////////////////////// |
