From 6d95c8e641b1d710d62167861760d11c00a715a3 Mon Sep 17 00:00:00 2001 From: Ansgar Burchardt <Ansgar.Burchardt@tu-dresden.de> Date: Thu, 31 Aug 2017 13:58:32 +0200 Subject: [PATCH] remove most command-line handling --- ui/cmdline.cc | 345 -------------------------------------------------- ui/cmdline.h | 6 - 2 files changed, 351 deletions(-) diff --git a/ui/cmdline.cc b/ui/cmdline.cc index 3f39c2ab3..20cf061a1 100644 --- a/ui/cmdline.cc +++ b/ui/cmdline.cc @@ -28,50 +28,13 @@ /****************************************************************************/ #include <config.h> -#include <cstring> -#include <cstdio> -#include <cstdlib> -#include <cmath> -#include <ctype.h> -#include "ugtypes.h" -#include "debug.h" -#include "misc.h" #include "ugenv.h" #include "cmdline.h" #include <dev/ugdevices.h> -#include "general.h" USING_UG_NAMESPACES -/****************************************************************************/ -/* */ -/* defines in the following order */ -/* */ -/* compile time constants defining static data size (i.e. arrays) */ -/* other constants */ -/* macros */ -/* */ -/****************************************************************************/ - -#define OPTIONSEP "$" /* option character */ - -#define WHITESPACE " \t\n" /* for skipping of blanks */ -#define COMMENT_CHAR '#' /* ignore rest of line after # */ - -/****************************************************************************/ -/* */ -/* data structures used in this source file (exported data structures are */ -/* in the corresponding include file!) */ -/* */ -/****************************************************************************/ - -/****************************************************************************/ -/* */ -/* definition of exported global variables */ -/* */ -/****************************************************************************/ - /****************************************************************************/ /* */ /* definition of variables global to this source file only (static!) */ @@ -81,12 +44,6 @@ USING_UG_NAMESPACES static INT theMenuDirID; /* env type for Menu dir */ static INT theCommandVarID; /* env type for Command vars */ -/* for ExecCommand */ -static char optionBuffer[OPTIONBUFFERLEN]; /* buffer to assemble options */ -static char *options[MAXOPTIONS]; /* array of pointers to strings */ -static INT optionCount=0; /* number of options incl. cmd name */ - - /****************************************************************************/ /* */ /* forward declarations of functions used before they are defined */ @@ -130,308 +87,6 @@ COMMAND * NS_DIM_PREFIX CreateCommand (const char *name, CommandProcPtr cmdProc) return(newCommand); } -/****************************************************************************/ -/** \brief Return pointer to command structure with name name - - \param name - Name of the command. - - This function returns pointer to command structure with name 'name'. If - it does not exist a 'NULL' pointer is returned. - - \return <ul> - <li> POINTER to 'COMMAND' structure </li> - <li> NULL if not found </li> - </ul> - */ -/****************************************************************************/ - -COMMAND * NS_DIM_PREFIX GetCommand (const char *name) -{ - COMMAND *cmd; - - if (ChangeEnvDir("/Menu")==NULL) return(NULL); - cmd = (COMMAND *) SearchEnv(name,".",theCommandVarID,theMenuDirID); - return(cmd); -} - -/****************************************************************************/ -/** \brief Return pointer to first command structure of /Menu dir - - This function returns pointer to first command structure of the '/Menu' - environment directory. - - \return <ul> - <li> POINTER to 'COMMAND' structure </li> - <li> NULL if not found </li> - </ul> - */ -/****************************************************************************/ - -COMMAND * NS_DIM_PREFIX GetFirstCommand () -{ - ENVITEM *cmd; - - if ((cmd=(ENVITEM*)ChangeEnvDir("/Menu")) == NULL) return (NULL); - - for (cmd=ENVITEM_DOWN(cmd); cmd!=NULL; cmd=NEXT_ENVITEM(cmd)) - if (ENVITEM_TYPE(cmd) == theCommandVarID) - return ((COMMAND*)cmd); - return (NULL); -} - -/****************************************************************************/ -/** \brief Return pointer to command structure of /Menu dir following cmd - - \param cmd - pointer to a 'COMMAND' - - This function returns a pointer to the next command after 'cmd' in the - list of commands. - - \return <ul> - <li> POINTER to next command </li> - <li> NULL if not found </li> - </ul> - */ -/****************************************************************************/ - -COMMAND * NS_DIM_PREFIX GetNextCommand (const COMMAND *cmd) -{ - ENVITEM *nextCmd; - - for (nextCmd=NEXT_ENVITEM(cmd); nextCmd!=NULL; nextCmd=NEXT_ENVITEM(nextCmd)) - if (ENVITEM_TYPE(nextCmd) == theCommandVarID) - return ((COMMAND*)nextCmd); - return (NULL); -} -/**********************************************************************************/ -/* - Str1inStr2 - - - SYNOPSIS: - static int Str1inStr2 (const char *name1, const char *name2); - - PARAMETERS: - \param name1 - - \param name2 - - - DESCRIPTION: - This function - - RETURN VALUE - int - .n 0 if ok - .n 1 if error occured. - */ -/***************************************************************************/ -static int Str1inStr2 (const char *name1, const char *name2) -{ - do - if (*name1=='\0') - return (1); - while ((*name2!='\0') && (tolower(*(name1++)) == tolower(*(name2++)))); - - return (0); -} -/****************************************************************************/ -/** \brief Find a UG command by (part of) name - - \param cmdName - name of command - - This function searches for a command with name 'name'. The difference - to 'GetCommand' is that the name need not be complete. Only the first few - characters must be supplied that make the name unique. - - \return <ul> - <li> pointer to 'COMMAND' if found and unique </li> - <li> NULL if not found or ambiguous </li> - </ul> - */ -/********************************************************************************/ - -COMMAND * NS_DIM_PREFIX SearchUgCmd (const char *cmdName) -{ - ENVDIR *currentDir; - COMMAND *Cmd; - ENVITEM *theItem; - - if (ChangeEnvDir("/Menu")==NULL) - { - UserWrite("ERROR: could not ChangeDir to /Menu\n"); - return(NULL); - } - - currentDir = GetCurrentDir(); - - /* loop in current directory */ - Cmd = NULL; - for (theItem=currentDir->down; theItem!=NULL; theItem=theItem->v.next) - if (theItem->v.type == theCommandVarID) - { - if (strcmp(cmdName,ENVITEM_NAME(theItem))==0) - return ((COMMAND *) theItem); - else if (Str1inStr2(cmdName,ENVITEM_NAME(theItem))) - { - if (Cmd!=NULL) - { - UserWriteF(" '%s' ambiguos:\n",cmdName); - UserWriteF(" %s\n",ENVITEM_NAME(Cmd)); - UserWriteF(" %s\n",ENVITEM_NAME(theItem)); - while ((theItem = theItem->v.next)!=NULL) - if (Str1inStr2(cmdName,ENVITEM_NAME(theItem))) - UserWriteF(" %s\n",ENVITEM_NAME(theItem)); - return (NULL); - } - else - Cmd = (COMMAND *) theItem; - } - } - - return (Cmd); -} - -/****************************************************************************/ -/** \brief Change an existing command or create a new one - - \param name - name of a command - \param cmdProc - new command function - - This function changes the execution function of an existing command - or creates a new one in case it does not exist already. - - \return </ul> - <li> pointer to new or replaced command </li> - <li> NULL in case of an error </li> - </ul> - */ -/****************************************************************************/ - -COMMAND * NS_DIM_PREFIX ReplaceCommand (const char *name, CommandProcPtr cmdProc) -{ - COMMAND *theCommand; - - /* change to menu directory */ - if (ChangeEnvDir("/Menu")==NULL) - return (NULL); - - /* allocate new command only if command does not exist */ - if ((theCommand=GetCommand(name))==NULL) - if ((theCommand = (COMMAND *) MakeEnvItem(name,theCommandVarID,sizeof(COMMAND)))==NULL) - return(NULL); - - /* fill data */ - theCommand->cmdProc = cmdProc; - - return(theCommand); -} - - -/****************************************************************************/ -/** \brief Processes the command line and execute command - - \param cmdLine - character string containing a complete command line - - This function processes the command line, i.e. it constructs the 'argc' - 'argv' arrays and calls the execution function of the command. - - \return <ul> - <li> 0 if ok </li> - <li> 1 if error occured </li> - </ul> - */ -/****************************************************************************/ - -INT NS_DIM_PREFIX ExecCommand (char *cmdLine) -{ - char *s,*token,commandstr[NAMESIZE]; - int i,j,error; - COMMAND *commandItem; - #ifdef ModelP - char cmd[OPTIONBUFFERLEN],*cmdptr; - #endif - - optionCount = 0; - s = optionBuffer; - #ifdef ModelP - strncpy(cmd,cmdLine,OPTIONBUFFERLEN); - cmdptr = cmd; - #endif - token = strtok(cmdLine,OPTIONSEP); - while (token!=NULL) - { - if (optionCount>=MAXOPTIONS) - { - PrintErrorMessage('E',"ExecCommand","too many options"); - return(8410); /* too many options */ - } - - strcpy(s,token); - options[optionCount++] = s; - s = s+(strlen(token)+1); - token = strtok(NULL,OPTIONSEP); - } - - if (optionCount==0) - return (1); - - /* strip comments from arguments */ - for (i=0; i<optionCount; i++) - if ((s=strchr(options[i],COMMENT_CHAR))!=NULL) - *s = '\0'; - - /* strip trailing blanks from arguments */ - for (i=0; i<optionCount; i++) - { - s = options[i]; - if (strlen(s)>0) - for (j=strlen(s)-1; strchr(WHITESPACE,(int) s[j])!=NULL; j--) s[j] = '\0'; - } - - if (sscanf(options[0],expandfmt(CONCAT3("%",NAMELENSTR,"[a-zA-Z_0-9]")),commandstr)!=1) - return (2); - - commandItem = GetCommand(commandstr); - if (commandItem==NULL) return(1); - else - { - #ifdef ModelP - /* TODO: introduces a mask sign to hide option sign $, the $ has to be masked */ - /* context sensitve in the command interpreter */ - /* if string which is assigned in SetCommand has options need to send whole string */ - /* in options[0], this excludes the only Option $r */ - if (strcmp(commandstr,"set") == 0) - { - if (optionCount>1 && strcmp(options[1],"r")!=0) - { - optionCount = 1; - error=(*commandItem->cmdProc)(optionCount,&cmdptr); - return(error); - } - } - #endif - } - - if (strcmp("reperr",options[0])!=0) REP_ERR_RESET; - - error=(*commandItem->cmdProc)(optionCount,options); - if (error==PARAMERRORCODE) - UserWrite("ERROR: invalid parameters\n"); - if (error!=OKCODE && error!=QUITCODE) - UserWrite("ERROR in command execution\n"); -#ifdef Debug - IFDEBUG(ui,0) - if ((error==OKCODE) && REP_ERR_ENCOUNTERED && strcmp("reperr",options[0])!=0) - { - PrintErrorMessageF('E',"ExecCommand","Huh??? %s returns OKCODE but rep err encountered",ENVITEM_NAME(commandItem)); - PrintRepErrStack(printf); - fflush(stdout); - return (FATAL); - } - ENDDEBUG -#endif - - return(error); -} - INT NS_DIM_PREFIX InitCmdline () { /* install the /Menu directory */ diff --git a/ui/cmdline.h b/ui/cmdline.h index 9763cd181..5e8c2fee5 100644 --- a/ui/cmdline.h +++ b/ui/cmdline.h @@ -85,13 +85,7 @@ typedef struct { /* executable command variable INT InitCmdline (void); /* command creation and execution */ -COMMAND *GetFirstCommand (void); -COMMAND *GetNextCommand (const COMMAND *cmd); -COMMAND *SearchUgCmd (const char *cmdName); COMMAND *CreateCommand (const char *name, CommandProcPtr cmdProc); -COMMAND *GetCommand (const char *name); -COMMAND *ReplaceCommand (const char *name, CommandProcPtr cmdProc); -INT ExecCommand (char *cmdLine); END_UGDIM_NAMESPACE -- GitLab