164064216a8433360745f69edddce19a606659163The Android Open Source Project/*******************************************************************************
264064216a8433360745f69edddce19a606659163The Android Open Source Project**+--------------------------------------------------------------------------+**
364064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                          |**
464064216a8433360745f69edddce19a606659163The Android Open Source Project**| Copyright 1998-2008 Texas Instruments, Inc. - http://www.ti.com/         |**
564064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                          |**
664064216a8433360745f69edddce19a606659163The Android Open Source Project**| Licensed under the Apache License, Version 2.0 (the "License");          |**
764064216a8433360745f69edddce19a606659163The Android Open Source Project**| you may not use this file except in compliance with the License.         |**
864064216a8433360745f69edddce19a606659163The Android Open Source Project**| You may obtain a copy of the License at                                  |**
964064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                          |**
1064064216a8433360745f69edddce19a606659163The Android Open Source Project**|     http://www.apache.org/licenses/LICENSE-2.0                           |**
1164064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                          |**
1264064216a8433360745f69edddce19a606659163The Android Open Source Project**| Unless required by applicable law or agreed to in writing, software      |**
1364064216a8433360745f69edddce19a606659163The Android Open Source Project**| distributed under the License is distributed on an "AS IS" BASIS,        |**
1464064216a8433360745f69edddce19a606659163The Android Open Source Project**| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |**
1564064216a8433360745f69edddce19a606659163The Android Open Source Project**| See the License for the specific language governing permissions and      |**
1664064216a8433360745f69edddce19a606659163The Android Open Source Project**| limitations under the License.                                           |**
1764064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                          |**
1864064216a8433360745f69edddce19a606659163The Android Open Source Project**+--------------------------------------------------------------------------+**
1964064216a8433360745f69edddce19a606659163The Android Open Source Project*******************************************************************************/
2064064216a8433360745f69edddce19a606659163The Android Open Source Project
2164064216a8433360745f69edddce19a606659163The Android Open Source Project#ifndef _WINDOWS
2264064216a8433360745f69edddce19a606659163The Android Open Source Project	#include <sys/select.h>
2364064216a8433360745f69edddce19a606659163The Android Open Source Project	#include <unistd.h>
2464064216a8433360745f69edddce19a606659163The Android Open Source Project	#include <signal.h>
2564064216a8433360745f69edddce19a606659163The Android Open Source Project
2664064216a8433360745f69edddce19a606659163The Android Open Source Project	#include "ipc.h"
2764064216a8433360745f69edddce19a606659163The Android Open Source Project	#include "g_tester.h"
2864064216a8433360745f69edddce19a606659163The Android Open Source Project	#include "wipp_ctrl.h"
2964064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* __LINUX__ */
3064064216a8433360745f69edddce19a606659163The Android Open Source Project
3164064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef _WINDOWS
3264064216a8433360745f69edddce19a606659163The Android Open Source Project#else
3364064216a8433360745f69edddce19a606659163The Android Open Source Project	#include <errno.h>
3464064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
3564064216a8433360745f69edddce19a606659163The Android Open Source Project
3664064216a8433360745f69edddce19a606659163The Android Open Source Project#include <string.h>
3764064216a8433360745f69edddce19a606659163The Android Open Source Project#include <stdlib.h>
3864064216a8433360745f69edddce19a606659163The Android Open Source Project#include <stdio.h>
3964064216a8433360745f69edddce19a606659163The Android Open Source Project#include <ctype.h>
4064064216a8433360745f69edddce19a606659163The Android Open Source Project
4164064216a8433360745f69edddce19a606659163The Android Open Source Project
4264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "ticon.h"
4364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "console.h"
4464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "cu_cmd.h"
4564064216a8433360745f69edddce19a606659163The Android Open Source Project
4664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic ConEntry_t *p_mon_root;
4764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic ConEntry_t *p_cur_dir;
4864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic char       *p_inbuf;
4964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic volatile int stop_UI_Monitor;
5064064216a8433360745f69edddce19a606659163The Android Open Source Project
5164064216a8433360745f69edddce19a606659163The Android Open Source Project#define INBUF_LENGTH          1024
5264064216a8433360745f69edddce19a606659163The Android Open Source Project/*#define PRINT_LEN_PER_PARM    40*/
5364064216a8433360745f69edddce19a606659163The Android Open Source Project#define ROOT_NAME             "/"
5464064216a8433360745f69edddce19a606659163The Android Open Source Project
5564064216a8433360745f69edddce19a606659163The Android Open Source Project/* Internal functions */
5664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void        console_allocRoot( void );
5764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void        console_displayDir( ConEntry_t *p_dir );
5864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic t_TokenType console_getWord( char *name, U16 len );
5964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic t_TokenType console_getStrParam( char *buf, ConParm_t *param );
6064064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic t_TokenType console_analizeToken( char *name );
6164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic U16         console_getNParms( ConEntry_t *p_token );
6264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic int         console_parseParms( ConEntry_t *p_token, U16 *pnParms );
6364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic ConEntry_t *console_searchToken( ConEntry_t *p_dir, char *name );
6464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void        console_dirHelp( void );
6564064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void        console_displayHelp( ConEntry_t *p_token );
6664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic int         console_chooseAlias( ConEntry_t *p_dir, ConEntry_t *p_new_token );
6764064216a8433360745f69edddce19a606659163The Android Open Source Project
6864064216a8433360745f69edddce19a606659163The Android Open Source Project
6964064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************
7064064216a8433360745f69edddce19a606659163The Android Open Source Project
7164064216a8433360745f69edddce19a606659163The Android Open Source Project   Function : consoleRunScript
7264064216a8433360745f69edddce19a606659163The Android Open Source Project
7364064216a8433360745f69edddce19a606659163The Android Open Source Project   Description: Execute command from file
7464064216a8433360745f69edddce19a606659163The Android Open Source Project
7564064216a8433360745f69edddce19a606659163The Android Open Source Project   Parameters: script_file - name of script file
7664064216a8433360745f69edddce19a606659163The Android Open Source Project
7764064216a8433360745f69edddce19a606659163The Android Open Source Project   Output:  !NULL - if 'quit' command was executed
7864064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************/
7964064216a8433360745f69edddce19a606659163The Android Open Source Projectint consoleRunScript( char *script_file )
8064064216a8433360745f69edddce19a606659163The Android Open Source Project{
8164064216a8433360745f69edddce19a606659163The Android Open Source Project    FILE *hfile = fopen(script_file, "r" );
8264064216a8433360745f69edddce19a606659163The Android Open Source Project
8364064216a8433360745f69edddce19a606659163The Android Open Source Project    if( hfile )
8464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
8564064216a8433360745f69edddce19a606659163The Android Open Source Project        char buf[INBUF_LENGTH];
8664064216a8433360745f69edddce19a606659163The Android Open Source Project        stop_UI_Monitor = FALSE;
8764064216a8433360745f69edddce19a606659163The Android Open Source Project
8864064216a8433360745f69edddce19a606659163The Android Open Source Project        while( fgets(buf, sizeof(buf), hfile ) )
8964064216a8433360745f69edddce19a606659163The Android Open Source Project        {
9064064216a8433360745f69edddce19a606659163The Android Open Source Project            console_printf_terminal("script <%s>\n", script_file);
9164064216a8433360745f69edddce19a606659163The Android Open Source Project            console_ParseString( buf );
9264064216a8433360745f69edddce19a606659163The Android Open Source Project            if( stop_UI_Monitor )
9364064216a8433360745f69edddce19a606659163The Android Open Source Project                break;
9464064216a8433360745f69edddce19a606659163The Android Open Source Project        }
9564064216a8433360745f69edddce19a606659163The Android Open Source Project
9664064216a8433360745f69edddce19a606659163The Android Open Source Project        fclose(hfile);
9764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
9864064216a8433360745f69edddce19a606659163The Android Open Source Project    else
9964064216a8433360745f69edddce19a606659163The Android Open Source Project        perror( script_file );
10064064216a8433360745f69edddce19a606659163The Android Open Source Project
10164064216a8433360745f69edddce19a606659163The Android Open Source Project    return stop_UI_Monitor;
10264064216a8433360745f69edddce19a606659163The Android Open Source Project}
10364064216a8433360745f69edddce19a606659163The Android Open Source Project
10464064216a8433360745f69edddce19a606659163The Android Open Source Project
10564064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************
10664064216a8433360745f69edddce19a606659163The Android Open Source Project
10764064216a8433360745f69edddce19a606659163The Android Open Source Project   Function : consoleAddDirExt
10864064216a8433360745f69edddce19a606659163The Android Open Source Project
10964064216a8433360745f69edddce19a606659163The Android Open Source Project   Description: Add subdirectory
11064064216a8433360745f69edddce19a606659163The Android Open Source Project
11164064216a8433360745f69edddce19a606659163The Android Open Source Project   Parameters: p_root - root directory handle (might be NULL)
11264064216a8433360745f69edddce19a606659163The Android Open Source Project               name   - directory name
11364064216a8433360745f69edddce19a606659163The Android Open Source Project
11464064216a8433360745f69edddce19a606659163The Android Open Source Project   Output:  the new created directory handle
11564064216a8433360745f69edddce19a606659163The Android Open Source Project            =NULL - failure
11664064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************/
11764064216a8433360745f69edddce19a606659163The Android Open Source Projecthandle_t consoleAddDirExt(
11864064216a8433360745f69edddce19a606659163The Android Open Source Project                       handle_t   hRoot,          /* Upper directory handle. NULL=root */
11964064216a8433360745f69edddce19a606659163The Android Open Source Project                       const char *name,          /* New directory name */
12064064216a8433360745f69edddce19a606659163The Android Open Source Project                       const char *desc )         /* Optional dir description */
12164064216a8433360745f69edddce19a606659163The Android Open Source Project{
12264064216a8433360745f69edddce19a606659163The Android Open Source Project    ConEntry_t *p_root = (ConEntry_t *)hRoot;
12364064216a8433360745f69edddce19a606659163The Android Open Source Project    ConEntry_t *p_dir;
12464064216a8433360745f69edddce19a606659163The Android Open Source Project    ConEntry_t **p_e;
12564064216a8433360745f69edddce19a606659163The Android Open Source Project
12664064216a8433360745f69edddce19a606659163The Android Open Source Project    if (!p_mon_root)
12764064216a8433360745f69edddce19a606659163The Android Open Source Project        console_allocRoot( );
12864064216a8433360745f69edddce19a606659163The Android Open Source Project
12964064216a8433360745f69edddce19a606659163The Android Open Source Project    if (!p_root)
13064064216a8433360745f69edddce19a606659163The Android Open Source Project        p_root = p_mon_root;
13164064216a8433360745f69edddce19a606659163The Android Open Source Project
13264064216a8433360745f69edddce19a606659163The Android Open Source Project    ASSERT( p_root && (p_root->sel == Dir) );
13364064216a8433360745f69edddce19a606659163The Android Open Source Project
13464064216a8433360745f69edddce19a606659163The Android Open Source Project    if ( (p_dir=(ConEntry_t *)malloc( sizeof( ConEntry_t )) ) == NULL)
13564064216a8433360745f69edddce19a606659163The Android Open Source Project        return NULL;
13664064216a8433360745f69edddce19a606659163The Android Open Source Project
13764064216a8433360745f69edddce19a606659163The Android Open Source Project    memset( p_dir, 0, sizeof( ConEntry_t ) );
13864064216a8433360745f69edddce19a606659163The Android Open Source Project    strncpy( p_dir->name, name, MAX_NAME_LEN );
13964064216a8433360745f69edddce19a606659163The Android Open Source Project    strncpy( p_dir->help, desc, MAX_HELP_LEN );
14064064216a8433360745f69edddce19a606659163The Android Open Source Project    p_dir->sel = Dir;
14164064216a8433360745f69edddce19a606659163The Android Open Source Project
14264064216a8433360745f69edddce19a606659163The Android Open Source Project    console_chooseAlias( p_root, p_dir );
14364064216a8433360745f69edddce19a606659163The Android Open Source Project
14464064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Add new directory to the root's list */
14564064216a8433360745f69edddce19a606659163The Android Open Source Project    p_dir->u.dir.upper = p_root;
14664064216a8433360745f69edddce19a606659163The Android Open Source Project    p_e = &(p_root->u.dir.first);
14764064216a8433360745f69edddce19a606659163The Android Open Source Project    while (*p_e)
14864064216a8433360745f69edddce19a606659163The Android Open Source Project        p_e = &((*p_e)->next);
14964064216a8433360745f69edddce19a606659163The Android Open Source Project    *p_e = p_dir;
15064064216a8433360745f69edddce19a606659163The Android Open Source Project
15164064216a8433360745f69edddce19a606659163The Android Open Source Project    return p_dir;
15264064216a8433360745f69edddce19a606659163The Android Open Source Project}
15364064216a8433360745f69edddce19a606659163The Android Open Source Project
15464064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************
15564064216a8433360745f69edddce19a606659163The Android Open Source Project
15664064216a8433360745f69edddce19a606659163The Android Open Source Project   Function : consoleAddToken
15764064216a8433360745f69edddce19a606659163The Android Open Source Project
15864064216a8433360745f69edddce19a606659163The Android Open Source Project   Description: Add token
15964064216a8433360745f69edddce19a606659163The Android Open Source Project
16064064216a8433360745f69edddce19a606659163The Android Open Source Project   Parameters: p_dir  - directory handle (might be NULL=root)
16164064216a8433360745f69edddce19a606659163The Android Open Source Project               name   - token name
16264064216a8433360745f69edddce19a606659163The Android Open Source Project               help   - help string
16364064216a8433360745f69edddce19a606659163The Android Open Source Project               p_func - token handler
16464064216a8433360745f69edddce19a606659163The Android Open Source Project               p_parms- array of parameter descriptions.
16564064216a8433360745f69edddce19a606659163The Android Open Source Project                        Must be terminated with {0}.
16664064216a8433360745f69edddce19a606659163The Android Open Source Project                        Each parm descriptor is a struct
16764064216a8433360745f69edddce19a606659163The Android Open Source Project                        { "myname",         - name
16864064216a8433360745f69edddce19a606659163The Android Open Source Project                          10,               - low value
16964064216a8433360745f69edddce19a606659163The Android Open Source Project                          20,               - high value
17064064216a8433360745f69edddce19a606659163The Android Open Source Project                          0 }               - default value =-1 no default
17164064216a8433360745f69edddce19a606659163The Android Open Source Project                                              or address for string parameter
17264064216a8433360745f69edddce19a606659163The Android Open Source Project
17364064216a8433360745f69edddce19a606659163The Android Open Source Project   Output:  E_OK - OK
17464064216a8433360745f69edddce19a606659163The Android Open Source Project            !=0 - error
17564064216a8433360745f69edddce19a606659163The Android Open Source Project***************************************************************/
17664064216a8433360745f69edddce19a606659163The Android Open Source ProjectconsoleErr consoleAddToken( handle_t      hDir,
17764064216a8433360745f69edddce19a606659163The Android Open Source Project                      const char    *name,
17864064216a8433360745f69edddce19a606659163The Android Open Source Project                      const char    *help,
17964064216a8433360745f69edddce19a606659163The Android Open Source Project                      FuncToken_t   p_func,
18064064216a8433360745f69edddce19a606659163The Android Open Source Project                      ConParm_t     p_parms[] )
18164064216a8433360745f69edddce19a606659163The Android Open Source Project{
18264064216a8433360745f69edddce19a606659163The Android Open Source Project   ConEntry_t *p_dir = (ConEntry_t *)hDir;
18364064216a8433360745f69edddce19a606659163The Android Open Source Project   ConEntry_t *p_token;
18464064216a8433360745f69edddce19a606659163The Android Open Source Project   ConEntry_t **p_e;
18564064216a8433360745f69edddce19a606659163The Android Open Source Project   U16       i;
18664064216a8433360745f69edddce19a606659163The Android Open Source Project
18764064216a8433360745f69edddce19a606659163The Android Open Source Project   if (!p_mon_root)
18864064216a8433360745f69edddce19a606659163The Android Open Source Project      console_allocRoot( );
18964064216a8433360745f69edddce19a606659163The Android Open Source Project
19064064216a8433360745f69edddce19a606659163The Android Open Source Project   if (!p_dir)
19164064216a8433360745f69edddce19a606659163The Android Open Source Project      p_dir = p_mon_root;
19264064216a8433360745f69edddce19a606659163The Android Open Source Project
19364064216a8433360745f69edddce19a606659163The Android Open Source Project   ASSERT( p_dir && (p_dir->sel == Dir) );
19464064216a8433360745f69edddce19a606659163The Android Open Source Project
19564064216a8433360745f69edddce19a606659163The Android Open Source Project   /* Initialize token structure */
19664064216a8433360745f69edddce19a606659163The Android Open Source Project   if ((p_token=(ConEntry_t *)calloc( 1, sizeof(ConEntry_t) )) == NULL)
19764064216a8433360745f69edddce19a606659163The Android Open Source Project   {
19864064216a8433360745f69edddce19a606659163The Android Open Source Project      fprintf(stderr, "** no memory **\n");
19964064216a8433360745f69edddce19a606659163The Android Open Source Project      return E_NOMEMORY;
20064064216a8433360745f69edddce19a606659163The Android Open Source Project   }
20164064216a8433360745f69edddce19a606659163The Android Open Source Project
20264064216a8433360745f69edddce19a606659163The Android Open Source Project
20364064216a8433360745f69edddce19a606659163The Android Open Source Project   /* Copy name */
20464064216a8433360745f69edddce19a606659163The Android Open Source Project   strncpy( p_token->name, name, MAX_NAME_LEN );
20564064216a8433360745f69edddce19a606659163The Android Open Source Project   strncpy( p_token->help, help, MAX_HELP_LEN );
20664064216a8433360745f69edddce19a606659163The Android Open Source Project   p_token->sel = Token;
20764064216a8433360745f69edddce19a606659163The Android Open Source Project   p_token->u.token.f_tokenFunc = p_func;
20864064216a8433360745f69edddce19a606659163The Android Open Source Project
20964064216a8433360745f69edddce19a606659163The Android Open Source Project   /* Convert name to lower case and choose alias */
21064064216a8433360745f69edddce19a606659163The Android Open Source Project   console_chooseAlias( p_dir, p_token );
21164064216a8433360745f69edddce19a606659163The Android Open Source Project
21264064216a8433360745f69edddce19a606659163The Android Open Source Project   /* Copy parameters */
21364064216a8433360745f69edddce19a606659163The Android Open Source Project   if ( p_parms )
21464064216a8433360745f69edddce19a606659163The Android Open Source Project   {
21564064216a8433360745f69edddce19a606659163The Android Open Source Project      for(i = 0; p_parms->name && p_parms->name[0] && ( i < MAX_NUM_OF_PARMS); i++ )
21664064216a8433360745f69edddce19a606659163The Android Open Source Project      {
21764064216a8433360745f69edddce19a606659163The Android Open Source Project         ConParm_t *p_token_parm = &p_token->u.token.parm[i];
21864064216a8433360745f69edddce19a606659163The Android Open Source Project
21964064216a8433360745f69edddce19a606659163The Android Open Source Project         /* String parameter must have an address */
22064064216a8433360745f69edddce19a606659163The Android Open Source Project         if(p_parms->flags & (CON_PARM_STRING | CON_PARM_LINE))
22164064216a8433360745f69edddce19a606659163The Android Open Source Project         {
22264064216a8433360745f69edddce19a606659163The Android Open Source Project            if ( p_parms->hi_val >= INBUF_LENGTH )
22364064216a8433360745f69edddce19a606659163The Android Open Source Project         {
22464064216a8433360745f69edddce19a606659163The Android Open Source Project                fprintf(stderr, "** buffer too big: %s/%s\n", p_dir->name, name);
22564064216a8433360745f69edddce19a606659163The Android Open Source Project            free( p_token );
22664064216a8433360745f69edddce19a606659163The Android Open Source Project                return E_NOMEMORY;
22764064216a8433360745f69edddce19a606659163The Android Open Source Project
22864064216a8433360745f69edddce19a606659163The Android Open Source Project            }
22964064216a8433360745f69edddce19a606659163The Android Open Source Project            if (p_parms->hi_val == 0 || (p_parms->flags & CON_PARM_RANGE) )
23064064216a8433360745f69edddce19a606659163The Android Open Source Project            {
23164064216a8433360745f69edddce19a606659163The Android Open Source Project            fprintf(stderr, "** Bad string param definition: %s/%s\n", p_dir->name, name );
23264064216a8433360745f69edddce19a606659163The Android Open Source Project                free( p_token );
23364064216a8433360745f69edddce19a606659163The Android Open Source Project            return E_BADPARM;
23464064216a8433360745f69edddce19a606659163The Android Open Source Project         }
23564064216a8433360745f69edddce19a606659163The Android Open Source Project
23664064216a8433360745f69edddce19a606659163The Android Open Source Project            p_parms->value = (U32) calloc(1, p_parms->hi_val+1);
23764064216a8433360745f69edddce19a606659163The Android Open Source Project            if( !p_parms->value )
23864064216a8433360745f69edddce19a606659163The Android Open Source Project            {
23964064216a8433360745f69edddce19a606659163The Android Open Source Project                fprintf(stderr, "** No memory: %s/%s (max.size=%ld)\n", p_dir->name, name, p_parms->hi_val );
24064064216a8433360745f69edddce19a606659163The Android Open Source Project                free( p_token );
24164064216a8433360745f69edddce19a606659163The Android Open Source Project                return E_NOMEMORY;
24264064216a8433360745f69edddce19a606659163The Android Open Source Project            }
24364064216a8433360745f69edddce19a606659163The Android Open Source Project        }
24464064216a8433360745f69edddce19a606659163The Android Open Source Project
24564064216a8433360745f69edddce19a606659163The Android Open Source Project         /* Copy parameter */
24664064216a8433360745f69edddce19a606659163The Android Open Source Project         *p_token_parm = *p_parms;
24764064216a8433360745f69edddce19a606659163The Android Open Source Project         if( p_token_parm->hi_val || p_token_parm->low_val )
24864064216a8433360745f69edddce19a606659163The Android Open Source Project             p_token_parm->flags |= CON_PARM_RANGE;
24964064216a8433360745f69edddce19a606659163The Android Open Source Project         p_token_parm->name = (const char *)p_token->u.token.name[i];
25064064216a8433360745f69edddce19a606659163The Android Open Source Project         strncpy( p_token->u.token.name[i], p_parms->name, MAX_NAME_LEN );
25164064216a8433360745f69edddce19a606659163The Android Open Source Project         ++p_parms;
25264064216a8433360745f69edddce19a606659163The Android Open Source Project      }
25364064216a8433360745f69edddce19a606659163The Android Open Source Project      if ((i == MAX_NUM_OF_PARMS) && p_parms->name[0])
25464064216a8433360745f69edddce19a606659163The Android Open Source Project      {
25564064216a8433360745f69edddce19a606659163The Android Open Source Project            fprintf(stderr, "** Too many params: %s/%s\n", p_dir->name, name );
25664064216a8433360745f69edddce19a606659163The Android Open Source Project         free( p_token );
25764064216a8433360745f69edddce19a606659163The Android Open Source Project         return E_TOOMANY;
25864064216a8433360745f69edddce19a606659163The Android Open Source Project      }
25964064216a8433360745f69edddce19a606659163The Android Open Source Project   }
26064064216a8433360745f69edddce19a606659163The Android Open Source Project
26164064216a8433360745f69edddce19a606659163The Android Open Source Project   /* Add token to the directory */
26264064216a8433360745f69edddce19a606659163The Android Open Source Project   p_e = &(p_dir->u.dir.first);
26364064216a8433360745f69edddce19a606659163The Android Open Source Project   while (*p_e)
26464064216a8433360745f69edddce19a606659163The Android Open Source Project      p_e = &((*p_e)->next);
26564064216a8433360745f69edddce19a606659163The Android Open Source Project   *p_e = p_token;
26664064216a8433360745f69edddce19a606659163The Android Open Source Project
26764064216a8433360745f69edddce19a606659163The Android Open Source Project   return E_OK;
26864064216a8433360745f69edddce19a606659163The Android Open Source Project}
26964064216a8433360745f69edddce19a606659163The Android Open Source Project
27064064216a8433360745f69edddce19a606659163The Android Open Source Project
27164064216a8433360745f69edddce19a606659163The Android Open Source Project/* Monitor driver */
27264064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid consoleStart( void )
27364064216a8433360745f69edddce19a606659163The Android Open Source Project{
27464064216a8433360745f69edddce19a606659163The Android Open Source Project#ifndef _WINDOWS
27564064216a8433360745f69edddce19a606659163The Android Open Source Project   fd_set read_set;
27664064216a8433360745f69edddce19a606659163The Android Open Source Project   int max_fd_index;
27764064216a8433360745f69edddce19a606659163The Android Open Source Project   int result;
27864064216a8433360745f69edddce19a606659163The Android Open Source Project   int pid;
27964064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* __LINUX__ */
28064064216a8433360745f69edddce19a606659163The Android Open Source Project
28164064216a8433360745f69edddce19a606659163The Android Open Source Project   char inbuf[INBUF_LENGTH];
28264064216a8433360745f69edddce19a606659163The Android Open Source Project
28364064216a8433360745f69edddce19a606659163The Android Open Source Project   if (!p_mon_root)
28464064216a8433360745f69edddce19a606659163The Android Open Source Project      return;
28564064216a8433360745f69edddce19a606659163The Android Open Source Project
28664064216a8433360745f69edddce19a606659163The Android Open Source Project   stop_UI_Monitor = FALSE;
28764064216a8433360745f69edddce19a606659163The Android Open Source Project   console_displayDir( p_cur_dir );
28864064216a8433360745f69edddce19a606659163The Android Open Source Project
28964064216a8433360745f69edddce19a606659163The Android Open Source Project   while(!stop_UI_Monitor)
29064064216a8433360745f69edddce19a606659163The Android Open Source Project   {
29164064216a8433360745f69edddce19a606659163The Android Open Source Project
29264064216a8433360745f69edddce19a606659163The Android Open Source Project#ifndef _WINDOWS
29364064216a8433360745f69edddce19a606659163The Android Open Source Project	   /***********************************************************************************/
29464064216a8433360745f69edddce19a606659163The Android Open Source Project       /* Wait for one of two external events: 											 */
29564064216a8433360745f69edddce19a606659163The Android Open Source Project       /* -----------------------------------											*/
29664064216a8433360745f69edddce19a606659163The Android Open Source Project       /*																			   */
29764064216a8433360745f69edddce19a606659163The Android Open Source Project       /* 1. Data received from STDIN												  */
29864064216a8433360745f69edddce19a606659163The Android Open Source Project       /* 2. Data received from one of the TCP clients							 	 */
29964064216a8433360745f69edddce19a606659163The Android Open Source Project	   /* 3. Data received from iperf process stdout (if enabled)					*/
30064064216a8433360745f69edddce19a606659163The Android Open Source Project	   /****************************************************************************/
30164064216a8433360745f69edddce19a606659163The Android Open Source Project
30264064216a8433360745f69edddce19a606659163The Android Open Source Project	   /* Prepare the read set fields */
30364064216a8433360745f69edddce19a606659163The Android Open Source Project	   FD_ZERO(&read_set);
30464064216a8433360745f69edddce19a606659163The Android Open Source Project	   FD_SET(0, &read_set);
30564064216a8433360745f69edddce19a606659163The Android Open Source Project	   FD_SET(ipc_pipe[0], &read_set);
30664064216a8433360745f69edddce19a606659163The Android Open Source Project	   FD_SET(wipp_control_general_process_out_pipe[0], &read_set);
30764064216a8433360745f69edddce19a606659163The Android Open Source Project
30864064216a8433360745f69edddce19a606659163The Android Open Source Project	   /* Determine the maximum index of the file descriptor */
30964064216a8433360745f69edddce19a606659163The Android Open Source Project	   max_fd_index = (max(wipp_control_general_process_out_pipe[0], max(0, ipc_pipe[0])) + 1);
31064064216a8433360745f69edddce19a606659163The Android Open Source Project
31164064216a8433360745f69edddce19a606659163The Android Open Source Project	   /* Wait for event - blocking */
31264064216a8433360745f69edddce19a606659163The Android Open Source Project	   result = select(max_fd_index, &read_set, NULL, NULL, NULL);
31364064216a8433360745f69edddce19a606659163The Android Open Source Project
31464064216a8433360745f69edddce19a606659163The Android Open Source Project	   if (result > 0)
31564064216a8433360745f69edddce19a606659163The Android Open Source Project	   {
31664064216a8433360745f69edddce19a606659163The Android Open Source Project		   if (FD_ISSET(0, &read_set))
31764064216a8433360745f69edddce19a606659163The Android Open Source Project		   {
31864064216a8433360745f69edddce19a606659163The Android Open Source Project			   /*****************************/
31964064216a8433360745f69edddce19a606659163The Android Open Source Project			   /* Data received from STDIN */
32064064216a8433360745f69edddce19a606659163The Android Open Source Project			   /***************************/
32164064216a8433360745f69edddce19a606659163The Android Open Source Project
32264064216a8433360745f69edddce19a606659163The Android Open Source Project                if ( fgets( inbuf, sizeof(inbuf), stdin ) <= 0 )
32364064216a8433360745f69edddce19a606659163The Android Open Source Project				 return;
32464064216a8433360745f69edddce19a606659163The Android Open Source Project
32564064216a8433360745f69edddce19a606659163The Android Open Source Project				console_ParseString( inbuf );
32664064216a8433360745f69edddce19a606659163The Android Open Source Project
32764064216a8433360745f69edddce19a606659163The Android Open Source Project		   }
32864064216a8433360745f69edddce19a606659163The Android Open Source Project
32964064216a8433360745f69edddce19a606659163The Android Open Source Project		   if (FD_ISSET(ipc_pipe[0], &read_set))
33064064216a8433360745f69edddce19a606659163The Android Open Source Project		   {
33164064216a8433360745f69edddce19a606659163The Android Open Source Project			   /**********************************/
33264064216a8433360745f69edddce19a606659163The Android Open Source Project			   /* Data received from TCP client */
33364064216a8433360745f69edddce19a606659163The Android Open Source Project			   /********************************/
33464064216a8433360745f69edddce19a606659163The Android Open Source Project
33564064216a8433360745f69edddce19a606659163The Android Open Source Project			   result = read(ipc_pipe[0], (U8 *)inbuf, (U16)sizeof(inbuf));
33664064216a8433360745f69edddce19a606659163The Android Open Source Project
33764064216a8433360745f69edddce19a606659163The Android Open Source Project			   /* Get the pid of the calling process */
33864064216a8433360745f69edddce19a606659163The Android Open Source Project			   pid = *(inbuf + 0) | (*(inbuf + 1) << 8);
33964064216a8433360745f69edddce19a606659163The Android Open Source Project
34064064216a8433360745f69edddce19a606659163The Android Open Source Project			   /* Signal the calling process (tell him that we have
34164064216a8433360745f69edddce19a606659163The Android Open Source Project			      received the command, and he can send us another one */
34264064216a8433360745f69edddce19a606659163The Android Open Source Project			   if (pid != 0xFFFF)
34364064216a8433360745f69edddce19a606659163The Android Open Source Project			   {
34464064216a8433360745f69edddce19a606659163The Android Open Source Project				   kill(pid, SIGUSR1);
34564064216a8433360745f69edddce19a606659163The Android Open Source Project			   }
34664064216a8433360745f69edddce19a606659163The Android Open Source Project
34764064216a8433360745f69edddce19a606659163The Android Open Source Project			   if (result > 0)
34864064216a8433360745f69edddce19a606659163The Android Open Source Project			   {
34964064216a8433360745f69edddce19a606659163The Android Open Source Project				   console_ParseString(inbuf + 2);
35064064216a8433360745f69edddce19a606659163The Android Open Source Project			   }
35164064216a8433360745f69edddce19a606659163The Android Open Source Project		   }
35264064216a8433360745f69edddce19a606659163The Android Open Source Project
35364064216a8433360745f69edddce19a606659163The Android Open Source Project		   if (FD_ISSET(wipp_control_general_process_out_pipe[0], &read_set))
35464064216a8433360745f69edddce19a606659163The Android Open Source Project		   {
35564064216a8433360745f69edddce19a606659163The Android Open Source Project			   /*****************************************/
35664064216a8433360745f69edddce19a606659163The Android Open Source Project			   /* Data received general process stdout */
35764064216a8433360745f69edddce19a606659163The Android Open Source Project			   /***************************************/
35864064216a8433360745f69edddce19a606659163The Android Open Source Project
35964064216a8433360745f69edddce19a606659163The Android Open Source Project			   result = read(wipp_control_general_process_out_pipe[0], (U8 *)inbuf + 3, sizeof(inbuf) - 3);
36064064216a8433360745f69edddce19a606659163The Android Open Source Project
36164064216a8433360745f69edddce19a606659163The Android Open Source Project			   if (result > 0)
36264064216a8433360745f69edddce19a606659163The Android Open Source Project			   {
36364064216a8433360745f69edddce19a606659163The Android Open Source Project				   wipp_control_send_iperf_results_to_host(WIPP_CONTROL_EVT_RUN_PROCESS_STDOUT, inbuf, result);
36464064216a8433360745f69edddce19a606659163The Android Open Source Project			   }
36564064216a8433360745f69edddce19a606659163The Android Open Source Project		   }
36664064216a8433360745f69edddce19a606659163The Android Open Source Project	   }
36764064216a8433360745f69edddce19a606659163The Android Open Source Project	   else
36864064216a8433360745f69edddce19a606659163The Android Open Source Project	   {
36964064216a8433360745f69edddce19a606659163The Android Open Source Project		   /* Error */
37064064216a8433360745f69edddce19a606659163The Android Open Source Project		   console_printf_terminal("Input selection mismatch...\n");
37164064216a8433360745f69edddce19a606659163The Android Open Source Project
37264064216a8433360745f69edddce19a606659163The Android Open Source Project		   return;
37364064216a8433360745f69edddce19a606659163The Android Open Source Project	   }
37464064216a8433360745f69edddce19a606659163The Android Open Source Project
37564064216a8433360745f69edddce19a606659163The Android Open Source Project#else  /* __LINUX__ */
37664064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* __LINUX__ */
37764064216a8433360745f69edddce19a606659163The Android Open Source Project   }
37864064216a8433360745f69edddce19a606659163The Android Open Source Project}
37964064216a8433360745f69edddce19a606659163The Android Open Source Project
38064064216a8433360745f69edddce19a606659163The Android Open Source Project
38164064216a8433360745f69edddce19a606659163The Android Open Source Project/* Parse the given input string and exit.
38264064216a8433360745f69edddce19a606659163The Android Open Source Project   All commands in the input string are executed one by one.
38364064216a8433360745f69edddce19a606659163The Android Open Source Project*/
38464064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid console_ParseString(char *input_string )
38564064216a8433360745f69edddce19a606659163The Android Open Source Project{
38664064216a8433360745f69edddce19a606659163The Android Open Source Project   ConEntry_t  *p_token;
38764064216a8433360745f69edddce19a606659163The Android Open Source Project   char        name[MAX_NAME_LEN];
38864064216a8433360745f69edddce19a606659163The Android Open Source Project   t_TokenType tType;
38964064216a8433360745f69edddce19a606659163The Android Open Source Project   U16        nParms;
39064064216a8433360745f69edddce19a606659163The Android Open Source Project
39164064216a8433360745f69edddce19a606659163The Android Open Source Project
39264064216a8433360745f69edddce19a606659163The Android Open Source Project#ifndef _WINDOWS
39364064216a8433360745f69edddce19a606659163The Android Open Source Project	/* Check if this is WIPP control command, if it is - process it */
39464064216a8433360745f69edddce19a606659163The Android Open Source Project	if (wipp_control_check_command(input_string))
39564064216a8433360745f69edddce19a606659163The Android Open Source Project	{
39664064216a8433360745f69edddce19a606659163The Android Open Source Project		return;
39764064216a8433360745f69edddce19a606659163The Android Open Source Project	}
39864064216a8433360745f69edddce19a606659163The Android Open Source Project
39964064216a8433360745f69edddce19a606659163The Android Open Source Project	/* Check if this is g_tester control command, if it is - process it */
40064064216a8433360745f69edddce19a606659163The Android Open Source Project	if (g_tester_check_command((unsigned char*) input_string))
40164064216a8433360745f69edddce19a606659163The Android Open Source Project	{
40264064216a8433360745f69edddce19a606659163The Android Open Source Project		return;
40364064216a8433360745f69edddce19a606659163The Android Open Source Project	}
40464064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* __LINUX__ */
40564064216a8433360745f69edddce19a606659163The Android Open Source Project
40664064216a8433360745f69edddce19a606659163The Android Open Source Project   if (!p_mon_root)
40764064216a8433360745f69edddce19a606659163The Android Open Source Project      return;
40864064216a8433360745f69edddce19a606659163The Android Open Source Project
40964064216a8433360745f69edddce19a606659163The Android Open Source Project   if( input_string[strlen(input_string)-1] == '\n' )
41064064216a8433360745f69edddce19a606659163The Android Open Source Project   {
41164064216a8433360745f69edddce19a606659163The Android Open Source Project      char *s = (char *) &input_string[strlen(input_string)-1];
41264064216a8433360745f69edddce19a606659163The Android Open Source Project  	  *s = 0;
41364064216a8433360745f69edddce19a606659163The Android Open Source Project   }
41464064216a8433360745f69edddce19a606659163The Android Open Source Project   p_inbuf = (char *)input_string;
41564064216a8433360745f69edddce19a606659163The Android Open Source Project   stop_UI_Monitor = FALSE;
41664064216a8433360745f69edddce19a606659163The Android Open Source Project
41764064216a8433360745f69edddce19a606659163The Android Open Source Project   /* Interpret empty string as "display directory" */
41864064216a8433360745f69edddce19a606659163The Android Open Source Project   if ( p_inbuf && !*p_inbuf )
41964064216a8433360745f69edddce19a606659163The Android Open Source Project      console_displayDir( p_cur_dir );
42064064216a8433360745f69edddce19a606659163The Android Open Source Project
42164064216a8433360745f69edddce19a606659163The Android Open Source Project   while(!stop_UI_Monitor && p_inbuf && *p_inbuf)
42264064216a8433360745f69edddce19a606659163The Android Open Source Project   {
42364064216a8433360745f69edddce19a606659163The Android Open Source Project      tType = console_getWord( name, MAX_NAME_LEN );
42464064216a8433360745f69edddce19a606659163The Android Open Source Project      switch( tType )
42564064216a8433360745f69edddce19a606659163The Android Open Source Project      {
42664064216a8433360745f69edddce19a606659163The Android Open Source Project
42764064216a8433360745f69edddce19a606659163The Android Open Source Project      case NameToken:
42864064216a8433360745f69edddce19a606659163The Android Open Source Project         p_token = console_searchToken( p_cur_dir, name );
42964064216a8433360745f69edddce19a606659163The Android Open Source Project         if (p_token == NULL)
43064064216a8433360745f69edddce19a606659163The Android Open Source Project         {
43164064216a8433360745f69edddce19a606659163The Android Open Source Project            fprintf( stderr, "**Error: '%s'**\n", name);
43264064216a8433360745f69edddce19a606659163The Android Open Source Project            p_inbuf = NULL;
43364064216a8433360745f69edddce19a606659163The Android Open Source Project         }
43464064216a8433360745f69edddce19a606659163The Android Open Source Project         else if (p_token->sel == Dir)
43564064216a8433360745f69edddce19a606659163The Android Open Source Project         {
43664064216a8433360745f69edddce19a606659163The Android Open Source Project            p_cur_dir = p_token;
43764064216a8433360745f69edddce19a606659163The Android Open Source Project            console_displayDir( p_cur_dir );
43864064216a8433360745f69edddce19a606659163The Android Open Source Project         }
43964064216a8433360745f69edddce19a606659163The Android Open Source Project         else
44064064216a8433360745f69edddce19a606659163The Android Open Source Project         {  /* Function token */
44164064216a8433360745f69edddce19a606659163The Android Open Source Project            if (!console_parseParms( p_token, &nParms ))
44264064216a8433360745f69edddce19a606659163The Android Open Source Project               console_displayHelp( p_token );
44364064216a8433360745f69edddce19a606659163The Android Open Source Project            else
44464064216a8433360745f69edddce19a606659163The Android Open Source Project               p_token->u.token.f_tokenFunc( p_token->u.token.parm, nParms );
44564064216a8433360745f69edddce19a606659163The Android Open Source Project         }
44664064216a8433360745f69edddce19a606659163The Android Open Source Project         break;
44764064216a8433360745f69edddce19a606659163The Android Open Source Project
44864064216a8433360745f69edddce19a606659163The Android Open Source Project      case UpToken: /* Go to upper directory */
44964064216a8433360745f69edddce19a606659163The Android Open Source Project         if (p_cur_dir->u.dir.upper)
45064064216a8433360745f69edddce19a606659163The Android Open Source Project            p_cur_dir = p_cur_dir->u.dir.upper;
45164064216a8433360745f69edddce19a606659163The Android Open Source Project         console_displayDir( p_cur_dir );
45264064216a8433360745f69edddce19a606659163The Android Open Source Project         break;
45364064216a8433360745f69edddce19a606659163The Android Open Source Project
45464064216a8433360745f69edddce19a606659163The Android Open Source Project      case RootToken: /* Go to the root directory */
45564064216a8433360745f69edddce19a606659163The Android Open Source Project         if (p_cur_dir->u.dir.upper)
45664064216a8433360745f69edddce19a606659163The Android Open Source Project            p_cur_dir = p_mon_root;
45764064216a8433360745f69edddce19a606659163The Android Open Source Project         console_displayDir( p_cur_dir );
45864064216a8433360745f69edddce19a606659163The Android Open Source Project         break;
45964064216a8433360745f69edddce19a606659163The Android Open Source Project
46064064216a8433360745f69edddce19a606659163The Android Open Source Project      case HelpToken: /* Display help */
46164064216a8433360745f69edddce19a606659163The Android Open Source Project         if (( console_getWord( name, MAX_NAME_LEN ) == NameToken ) &&
46264064216a8433360745f69edddce19a606659163The Android Open Source Project             ((p_token = console_searchToken( p_cur_dir, name )) != NULL ) &&
46364064216a8433360745f69edddce19a606659163The Android Open Source Project             (p_token->sel == Token) )
46464064216a8433360745f69edddce19a606659163The Android Open Source Project            console_displayHelp( p_token );
46564064216a8433360745f69edddce19a606659163The Android Open Source Project         else
46664064216a8433360745f69edddce19a606659163The Android Open Source Project            console_dirHelp( );
46764064216a8433360745f69edddce19a606659163The Android Open Source Project         break;
46864064216a8433360745f69edddce19a606659163The Android Open Source Project
46964064216a8433360745f69edddce19a606659163The Android Open Source Project      case DirHelpToken:
47064064216a8433360745f69edddce19a606659163The Android Open Source Project         console_displayDir( p_cur_dir );
47164064216a8433360745f69edddce19a606659163The Android Open Source Project			console_printf_terminal("Type ? <name> for command help, \"/\"-root, \"..\"-upper\n" );
47264064216a8433360745f69edddce19a606659163The Android Open Source Project         break;
47364064216a8433360745f69edddce19a606659163The Android Open Source Project
47464064216a8433360745f69edddce19a606659163The Android Open Source Project      case BreakToken: /* Clear buffer */
47564064216a8433360745f69edddce19a606659163The Android Open Source Project         p_inbuf = NULL;
47664064216a8433360745f69edddce19a606659163The Android Open Source Project         break;
47764064216a8433360745f69edddce19a606659163The Android Open Source Project
47864064216a8433360745f69edddce19a606659163The Android Open Source Project      case EmptyToken:
47964064216a8433360745f69edddce19a606659163The Android Open Source Project         break;
48064064216a8433360745f69edddce19a606659163The Android Open Source Project
48164064216a8433360745f69edddce19a606659163The Android Open Source Project      }
48264064216a8433360745f69edddce19a606659163The Android Open Source Project   }
48364064216a8433360745f69edddce19a606659163The Android Open Source Project}
48464064216a8433360745f69edddce19a606659163The Android Open Source Project
48564064216a8433360745f69edddce19a606659163The Android Open Source Project
48664064216a8433360745f69edddce19a606659163The Android Open Source Project/* Stop monitor driver */
48764064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid consoleStop( void )
48864064216a8433360745f69edddce19a606659163The Android Open Source Project{
48964064216a8433360745f69edddce19a606659163The Android Open Source Project   stop_UI_Monitor = TRUE;
49064064216a8433360745f69edddce19a606659163The Android Open Source Project}
49164064216a8433360745f69edddce19a606659163The Android Open Source Project
49264064216a8433360745f69edddce19a606659163The Android Open Source Project
49364064216a8433360745f69edddce19a606659163The Android Open Source Project/*********************************************************/
49464064216a8433360745f69edddce19a606659163The Android Open Source Project/* Internal functions                                    */
49564064216a8433360745f69edddce19a606659163The Android Open Source Project/*********************************************************/
49664064216a8433360745f69edddce19a606659163The Android Open Source Project
49764064216a8433360745f69edddce19a606659163The Android Open Source Project/* Allocate root directory */
49864064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid console_allocRoot( void )
49964064216a8433360745f69edddce19a606659163The Android Open Source Project{
50064064216a8433360745f69edddce19a606659163The Android Open Source Project   /* The very first call. Allocate root structure */
50164064216a8433360745f69edddce19a606659163The Android Open Source Project   if ((p_mon_root=(ConEntry_t *)calloc( 1, sizeof( ConEntry_t ) ) ) == NULL)
50264064216a8433360745f69edddce19a606659163The Android Open Source Project   {
50364064216a8433360745f69edddce19a606659163The Android Open Source Project      ASSERT( p_mon_root );
50464064216a8433360745f69edddce19a606659163The Android Open Source Project      return;
50564064216a8433360745f69edddce19a606659163The Android Open Source Project   }
50664064216a8433360745f69edddce19a606659163The Android Open Source Project   strcpy( p_mon_root->name, ROOT_NAME );
50764064216a8433360745f69edddce19a606659163The Android Open Source Project   p_mon_root->sel = Dir;
50864064216a8433360745f69edddce19a606659163The Android Open Source Project   p_cur_dir = p_mon_root;
50964064216a8433360745f69edddce19a606659163The Android Open Source Project}
51064064216a8433360745f69edddce19a606659163The Android Open Source Project
51164064216a8433360745f69edddce19a606659163The Android Open Source Project/* Display directory */
51264064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid console_displayDir( ConEntry_t *p_dir )
51364064216a8433360745f69edddce19a606659163The Android Open Source Project{
51464064216a8433360745f69edddce19a606659163The Android Open Source Project   char out_buf[512];
51564064216a8433360745f69edddce19a606659163The Android Open Source Project   ConEntry_t *p_token;
51664064216a8433360745f69edddce19a606659163The Android Open Source Project
51764064216a8433360745f69edddce19a606659163The Android Open Source Project   sprintf( out_buf, "%s%s> ", (p_dir==p_mon_root)? "" : ".../", p_dir->name );
51864064216a8433360745f69edddce19a606659163The Android Open Source Project   p_token = p_dir->u.dir.first;
51964064216a8433360745f69edddce19a606659163The Android Open Source Project   while( p_token )
52064064216a8433360745f69edddce19a606659163The Android Open Source Project   {
52164064216a8433360745f69edddce19a606659163The Android Open Source Project      if( (strlen(out_buf) + strlen(p_token->name) + 2)>= sizeof(out_buf) )
52264064216a8433360745f69edddce19a606659163The Android Open Source Project      {
52364064216a8433360745f69edddce19a606659163The Android Open Source Project          fprintf(stderr, "** console_displayDir(): buffer too small....\n");
52464064216a8433360745f69edddce19a606659163The Android Open Source Project          break;
52564064216a8433360745f69edddce19a606659163The Android Open Source Project      }
52664064216a8433360745f69edddce19a606659163The Android Open Source Project      strcat( out_buf, p_token->name );
52764064216a8433360745f69edddce19a606659163The Android Open Source Project      if ( p_token->sel == Dir )
52864064216a8433360745f69edddce19a606659163The Android Open Source Project         strcat( out_buf, "/" );
52964064216a8433360745f69edddce19a606659163The Android Open Source Project      p_token = p_token->next;
53064064216a8433360745f69edddce19a606659163The Android Open Source Project      if (p_token)
53164064216a8433360745f69edddce19a606659163The Android Open Source Project         strcat( out_buf, ", " );
53264064216a8433360745f69edddce19a606659163The Android Open Source Project   }
53364064216a8433360745f69edddce19a606659163The Android Open Source Project   console_printf_terminal("%s\n", out_buf );
53464064216a8433360745f69edddce19a606659163The Android Open Source Project}
53564064216a8433360745f69edddce19a606659163The Android Open Source Project
53664064216a8433360745f69edddce19a606659163The Android Open Source Project
53764064216a8433360745f69edddce19a606659163The Android Open Source Project/* Cut the first U16 from <p_inbuf>.
53864064216a8433360745f69edddce19a606659163The Android Open Source Project   Return the U16 in <name> and updated <p_inbuf>
53964064216a8433360745f69edddce19a606659163The Android Open Source Project*/
54064064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic t_TokenType console_getWord( char *name, U16 len )
54164064216a8433360745f69edddce19a606659163The Android Open Source Project{
54264064216a8433360745f69edddce19a606659163The Android Open Source Project   U16        i=0;
54364064216a8433360745f69edddce19a606659163The Android Open Source Project   t_TokenType tType;
54464064216a8433360745f69edddce19a606659163The Android Open Source Project
54564064216a8433360745f69edddce19a606659163The Android Open Source Project
54664064216a8433360745f69edddce19a606659163The Android Open Source Project   p_inbuf = console_ltrim(p_inbuf);
54764064216a8433360745f69edddce19a606659163The Android Open Source Project
54864064216a8433360745f69edddce19a606659163The Android Open Source Project   while( *p_inbuf && *p_inbuf!=' ' && i<len )
54964064216a8433360745f69edddce19a606659163The Android Open Source Project      name[i++] = *(p_inbuf++);
55064064216a8433360745f69edddce19a606659163The Android Open Source Project
55164064216a8433360745f69edddce19a606659163The Android Open Source Project   if (i<len)
55264064216a8433360745f69edddce19a606659163The Android Open Source Project      name[i] = 0;
55364064216a8433360745f69edddce19a606659163The Android Open Source Project
55464064216a8433360745f69edddce19a606659163The Android Open Source Project   tType   = console_analizeToken( name );
55564064216a8433360745f69edddce19a606659163The Android Open Source Project
55664064216a8433360745f69edddce19a606659163The Android Open Source Project   return tType;
55764064216a8433360745f69edddce19a606659163The Android Open Source Project}
55864064216a8433360745f69edddce19a606659163The Android Open Source Project
55964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic t_TokenType console_getStrParam( char *buf, ConParm_t *param )
56064064216a8433360745f69edddce19a606659163The Android Open Source Project{
56164064216a8433360745f69edddce19a606659163The Android Open Source Project    t_TokenType tType;
56264064216a8433360745f69edddce19a606659163The Android Open Source Project    U32         i, len = param->hi_val;
56364064216a8433360745f69edddce19a606659163The Android Open Source Project    char        *end_buf;
56464064216a8433360745f69edddce19a606659163The Android Open Source Project
56564064216a8433360745f69edddce19a606659163The Android Open Source Project    p_inbuf = console_ltrim(p_inbuf);
56664064216a8433360745f69edddce19a606659163The Android Open Source Project
56764064216a8433360745f69edddce19a606659163The Android Open Source Project    if( param->flags & CON_PARM_LINE )
56864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
56964064216a8433360745f69edddce19a606659163The Android Open Source Project        strcpy(buf, p_inbuf );
57064064216a8433360745f69edddce19a606659163The Android Open Source Project        p_inbuf += strlen(p_inbuf);
57164064216a8433360745f69edddce19a606659163The Android Open Source Project    }
57264064216a8433360745f69edddce19a606659163The Android Open Source Project    else
57364064216a8433360745f69edddce19a606659163The Android Open Source Project    {
57464064216a8433360745f69edddce19a606659163The Android Open Source Project        if( *p_inbuf == '\"' )
57564064216a8433360745f69edddce19a606659163The Android Open Source Project        {
57664064216a8433360745f69edddce19a606659163The Android Open Source Project            end_buf = strchr(p_inbuf+1, '\"' );
57764064216a8433360745f69edddce19a606659163The Android Open Source Project            if( !end_buf )
57864064216a8433360745f69edddce19a606659163The Android Open Source Project            {
57964064216a8433360745f69edddce19a606659163The Android Open Source Project                fprintf(stderr, "** invalid string param: '%s'\n", p_inbuf );
58064064216a8433360745f69edddce19a606659163The Android Open Source Project                p_inbuf += strlen(p_inbuf);
58164064216a8433360745f69edddce19a606659163The Android Open Source Project                return EmptyToken;
58264064216a8433360745f69edddce19a606659163The Android Open Source Project            }
58364064216a8433360745f69edddce19a606659163The Android Open Source Project            if( (end_buf - p_inbuf - 1) > (int)len )
58464064216a8433360745f69edddce19a606659163The Android Open Source Project            {
58564064216a8433360745f69edddce19a606659163The Android Open Source Project                fprintf(stderr, "** param is too long: '%s'\n", p_inbuf );
58664064216a8433360745f69edddce19a606659163The Android Open Source Project                p_inbuf += strlen(p_inbuf);
58764064216a8433360745f69edddce19a606659163The Android Open Source Project                return EmptyToken;
58864064216a8433360745f69edddce19a606659163The Android Open Source Project            }
58964064216a8433360745f69edddce19a606659163The Android Open Source Project            *end_buf = 0;
59064064216a8433360745f69edddce19a606659163The Android Open Source Project            strcpy( buf, p_inbuf+1 );
59164064216a8433360745f69edddce19a606659163The Android Open Source Project            p_inbuf = end_buf + 1;
59264064216a8433360745f69edddce19a606659163The Android Open Source Project        }
59364064216a8433360745f69edddce19a606659163The Android Open Source Project        else
59464064216a8433360745f69edddce19a606659163The Android Open Source Project        {
59564064216a8433360745f69edddce19a606659163The Android Open Source Project            for( i=0; *p_inbuf && *p_inbuf!=' ' && i<len; i++ )
59664064216a8433360745f69edddce19a606659163The Android Open Source Project                buf[i] = *(p_inbuf++);
59764064216a8433360745f69edddce19a606659163The Android Open Source Project
59864064216a8433360745f69edddce19a606659163The Android Open Source Project            buf[i] = 0;
59964064216a8433360745f69edddce19a606659163The Android Open Source Project            if( *p_inbuf && *p_inbuf != ' ' )
60064064216a8433360745f69edddce19a606659163The Android Open Source Project            {
60164064216a8433360745f69edddce19a606659163The Android Open Source Project                fprintf(stderr, "** param is too long: '%s'\n", p_inbuf-strlen(buf) );
60264064216a8433360745f69edddce19a606659163The Android Open Source Project                p_inbuf += strlen(p_inbuf);
60364064216a8433360745f69edddce19a606659163The Android Open Source Project                return EmptyToken;
60464064216a8433360745f69edddce19a606659163The Android Open Source Project            }
60564064216a8433360745f69edddce19a606659163The Android Open Source Project        }
60664064216a8433360745f69edddce19a606659163The Android Open Source Project    }
60764064216a8433360745f69edddce19a606659163The Android Open Source Project
60864064216a8433360745f69edddce19a606659163The Android Open Source Project    tType   = console_analizeToken( buf );
60964064216a8433360745f69edddce19a606659163The Android Open Source Project
61064064216a8433360745f69edddce19a606659163The Android Open Source Project    return tType;
61164064216a8433360745f69edddce19a606659163The Android Open Source Project}
61264064216a8433360745f69edddce19a606659163The Android Open Source Project
61364064216a8433360745f69edddce19a606659163The Android Open Source Project/* Make a preliminary analizis of <name> token.
61464064216a8433360745f69edddce19a606659163The Android Open Source Project   Returns a token type (Empty, Up, Root, Break, Name)
61564064216a8433360745f69edddce19a606659163The Android Open Source Project*/
61664064216a8433360745f69edddce19a606659163The Android Open Source Projectt_TokenType console_analizeToken( char *name )
61764064216a8433360745f69edddce19a606659163The Android Open Source Project{
61864064216a8433360745f69edddce19a606659163The Android Open Source Project   if (!name[0])
61964064216a8433360745f69edddce19a606659163The Android Open Source Project      return EmptyToken;
62064064216a8433360745f69edddce19a606659163The Android Open Source Project
62164064216a8433360745f69edddce19a606659163The Android Open Source Project   if (!strcmp( name, TOKEN_UP ) )
62264064216a8433360745f69edddce19a606659163The Android Open Source Project      return UpToken;
62364064216a8433360745f69edddce19a606659163The Android Open Source Project
62464064216a8433360745f69edddce19a606659163The Android Open Source Project   if (!strcmp( name, TOKEN_ROOT ) )
62564064216a8433360745f69edddce19a606659163The Android Open Source Project      return RootToken;
62664064216a8433360745f69edddce19a606659163The Android Open Source Project
62764064216a8433360745f69edddce19a606659163The Android Open Source Project   if (!strcmp( name, TOKEN_BREAK ) )
62864064216a8433360745f69edddce19a606659163The Android Open Source Project      return BreakToken;
62964064216a8433360745f69edddce19a606659163The Android Open Source Project
63064064216a8433360745f69edddce19a606659163The Android Open Source Project   if (!strcmp( name, TOKEN_HELP ) )
63164064216a8433360745f69edddce19a606659163The Android Open Source Project      return HelpToken;
63264064216a8433360745f69edddce19a606659163The Android Open Source Project
63364064216a8433360745f69edddce19a606659163The Android Open Source Project   if (!strcmp( name, TOKEN_DIRHELP ) )
63464064216a8433360745f69edddce19a606659163The Android Open Source Project      return DirHelpToken;
63564064216a8433360745f69edddce19a606659163The Android Open Source Project
63664064216a8433360745f69edddce19a606659163The Android Open Source Project   return NameToken;
63764064216a8433360745f69edddce19a606659163The Android Open Source Project
63864064216a8433360745f69edddce19a606659163The Android Open Source Project}
63964064216a8433360745f69edddce19a606659163The Android Open Source Project
64064064216a8433360745f69edddce19a606659163The Android Open Source Project
64164064216a8433360745f69edddce19a606659163The Android Open Source Project/* Returns number of parameters of the given token
64264064216a8433360745f69edddce19a606659163The Android Open Source Project*/
64364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic U16 console_getNParms( ConEntry_t *p_token )
64464064216a8433360745f69edddce19a606659163The Android Open Source Project{
64564064216a8433360745f69edddce19a606659163The Android Open Source Project   U16 i;
64664064216a8433360745f69edddce19a606659163The Android Open Source Project   if ( !p_token->u.token.parm )
64764064216a8433360745f69edddce19a606659163The Android Open Source Project      return 0;
64864064216a8433360745f69edddce19a606659163The Android Open Source Project   for( i=0;
64964064216a8433360745f69edddce19a606659163The Android Open Source Project        (i<MAX_NUM_OF_PARMS-1) &&
65064064216a8433360745f69edddce19a606659163The Android Open Source Project         p_token->u.token.parm[i].name &&
65164064216a8433360745f69edddce19a606659163The Android Open Source Project         p_token->u.token.parm[i].name[0];
65264064216a8433360745f69edddce19a606659163The Android Open Source Project        i++ )
65364064216a8433360745f69edddce19a606659163The Android Open Source Project      ;
65464064216a8433360745f69edddce19a606659163The Android Open Source Project   return i;
65564064216a8433360745f69edddce19a606659163The Android Open Source Project}
65664064216a8433360745f69edddce19a606659163The Android Open Source Project
65764064216a8433360745f69edddce19a606659163The Android Open Source Project/* Parse p_inbuf string based on parameter descriptions in <p_token>.
65864064216a8433360745f69edddce19a606659163The Android Open Source Project   Fill parameter values in <p_token>.
65964064216a8433360745f69edddce19a606659163The Android Open Source Project   Returns the number of parameters filled.
66064064216a8433360745f69edddce19a606659163The Android Open Source Project   To Do: add a option of one-by-one user input of missing parameters.
66164064216a8433360745f69edddce19a606659163The Android Open Source Project*/
66264064216a8433360745f69edddce19a606659163The Android Open Source Projectint console_parseParms( ConEntry_t *p_token, U16 *pnParms )
66364064216a8433360745f69edddce19a606659163The Android Open Source Project{
66464064216a8433360745f69edddce19a606659163The Android Open Source Project    U16 nTotalParms = console_getNParms( p_token );
66564064216a8433360745f69edddce19a606659163The Android Open Source Project    U16 nParms=0;
66664064216a8433360745f69edddce19a606659163The Android Open Source Project    char *end_buf = NULL, parm[INBUF_LENGTH];
66764064216a8433360745f69edddce19a606659163The Android Open Source Project    U16 i, print_params = 0;
66864064216a8433360745f69edddce19a606659163The Android Open Source Project    U32 val = 0;
66964064216a8433360745f69edddce19a606659163The Android Open Source Project    S32 sval = 0;
67064064216a8433360745f69edddce19a606659163The Android Open Source Project
67164064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Mark all parameters as don't having an explicit value */
67264064216a8433360745f69edddce19a606659163The Android Open Source Project    for( i=0; i<nTotalParms; i++ )
67364064216a8433360745f69edddce19a606659163The Android Open Source Project            p_token->u.token.parm[i].flags |= CON_PARM_NOVAL;
67464064216a8433360745f69edddce19a606659163The Android Open Source Project
67564064216a8433360745f69edddce19a606659163The Android Open Source Project    /*        -----------------              */
67664064216a8433360745f69edddce19a606659163The Android Open Source Project    p_inbuf = console_ltrim(p_inbuf);
67764064216a8433360745f69edddce19a606659163The Android Open Source Project    if( p_inbuf[0] == '!' && p_inbuf[1] == '!' )
67864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
67964064216a8433360745f69edddce19a606659163The Android Open Source Project        p_inbuf += 2; print_params = 1;
68064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
68164064216a8433360745f69edddce19a606659163The Android Open Source Project    /*        -----------------              */
68264064216a8433360745f69edddce19a606659163The Android Open Source Project
68364064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Build a format string */
68464064216a8433360745f69edddce19a606659163The Android Open Source Project    for( i=0; i<nTotalParms; i++ )
68564064216a8433360745f69edddce19a606659163The Android Open Source Project    {
68664064216a8433360745f69edddce19a606659163The Android Open Source Project        if (p_token->u.token.parm[i].flags & (CON_PARM_STRING | CON_PARM_LINE) )
68764064216a8433360745f69edddce19a606659163The Android Open Source Project        {
68864064216a8433360745f69edddce19a606659163The Android Open Source Project            /* For a string parameter value is the string address */
68964064216a8433360745f69edddce19a606659163The Android Open Source Project            /* and hi_val is the string length                   */
69064064216a8433360745f69edddce19a606659163The Android Open Source Project            if (console_getStrParam( parm, &p_token->u.token.parm[i] ) != NameToken)
69164064216a8433360745f69edddce19a606659163The Android Open Source Project                break;
69264064216a8433360745f69edddce19a606659163The Android Open Source Project            if( strlen(parm) > p_token->u.token.parm[i].hi_val ||
69364064216a8433360745f69edddce19a606659163The Android Open Source Project                (p_token->u.token.parm[i].low_val && p_token->u.token.parm[i].low_val > strlen(parm) ) )
69464064216a8433360745f69edddce19a606659163The Android Open Source Project        {
69564064216a8433360745f69edddce19a606659163The Android Open Source Project                fprintf(stderr, "param '%s' must be %ld..%ld chars\n", p_token->u.token.parm[i].name,
69664064216a8433360745f69edddce19a606659163The Android Open Source Project                        p_token->u.token.parm[i].low_val, p_token->u.token.parm[i].hi_val);
69764064216a8433360745f69edddce19a606659163The Android Open Source Project                return FALSE;
69864064216a8433360745f69edddce19a606659163The Android Open Source Project
69964064216a8433360745f69edddce19a606659163The Android Open Source Project            }
70064064216a8433360745f69edddce19a606659163The Android Open Source Project            strcpy( (char *)p_token->u.token.parm[i].value, parm );
70164064216a8433360745f69edddce19a606659163The Android Open Source Project        }
70264064216a8433360745f69edddce19a606659163The Android Open Source Project        else
70364064216a8433360745f69edddce19a606659163The Android Open Source Project        {
70464064216a8433360745f69edddce19a606659163The Android Open Source Project            if (console_getWord( parm, MAX_PARM_LEN ) != NameToken)
70564064216a8433360745f69edddce19a606659163The Android Open Source Project                break;
70664064216a8433360745f69edddce19a606659163The Android Open Source Project
70764064216a8433360745f69edddce19a606659163The Android Open Source Project            if (p_token->u.token.parm[i].flags & CON_PARM_SIGN)
70864064216a8433360745f69edddce19a606659163The Android Open Source Project                sval = strtol( parm, &end_buf, 0 );
70964064216a8433360745f69edddce19a606659163The Android Open Source Project            else
71064064216a8433360745f69edddce19a606659163The Android Open Source Project                val = strtoul( parm, &end_buf, 0 );
71164064216a8433360745f69edddce19a606659163The Android Open Source Project            if( /*errno || */end_buf <= parm )
71264064216a8433360745f69edddce19a606659163The Android Open Source Project                    break;
71364064216a8433360745f69edddce19a606659163The Android Open Source Project
71464064216a8433360745f69edddce19a606659163The Android Open Source Project/*             if (sscanf( parm, "%i", &val ) != 1)*/
71564064216a8433360745f69edddce19a606659163The Android Open Source Project/*                 break;*/
71664064216a8433360745f69edddce19a606659163The Android Open Source Project
71764064216a8433360745f69edddce19a606659163The Android Open Source Project            /* Check value */
71864064216a8433360745f69edddce19a606659163The Android Open Source Project            if (p_token->u.token.parm[i].flags & CON_PARM_RANGE)
71964064216a8433360745f69edddce19a606659163The Android Open Source Project            {
72064064216a8433360745f69edddce19a606659163The Android Open Source Project                if (p_token->u.token.parm[i].flags & CON_PARM_SIGN)
72164064216a8433360745f69edddce19a606659163The Android Open Source Project                {
72264064216a8433360745f69edddce19a606659163The Android Open Source Project                    if ((sval < (S32)p_token->u.token.parm[i].low_val) ||
72364064216a8433360745f69edddce19a606659163The Android Open Source Project                        (sval > (S32)p_token->u.token.parm[i].hi_val) )
72464064216a8433360745f69edddce19a606659163The Android Open Source Project                    {
72564064216a8433360745f69edddce19a606659163The Android Open Source Project                        fprintf( stderr, "%s: %d out of range (%d, %d)\n",
72664064216a8433360745f69edddce19a606659163The Android Open Source Project                            p_token->u.token.parm[i].name, (int)sval,
72764064216a8433360745f69edddce19a606659163The Android Open Source Project                            (int)p_token->u.token.parm[i].low_val, (int)p_token->u.token.parm[i].hi_val );
72864064216a8433360745f69edddce19a606659163The Android Open Source Project                        return FALSE;
72964064216a8433360745f69edddce19a606659163The Android Open Source Project                    }
73064064216a8433360745f69edddce19a606659163The Android Open Source Project
73164064216a8433360745f69edddce19a606659163The Android Open Source Project                }
73264064216a8433360745f69edddce19a606659163The Android Open Source Project                else
73364064216a8433360745f69edddce19a606659163The Android Open Source Project                {
73464064216a8433360745f69edddce19a606659163The Android Open Source Project                    if ((val < p_token->u.token.parm[i].low_val) ||
73564064216a8433360745f69edddce19a606659163The Android Open Source Project                        (val > p_token->u.token.parm[i].hi_val) )
73664064216a8433360745f69edddce19a606659163The Android Open Source Project                    {
73764064216a8433360745f69edddce19a606659163The Android Open Source Project                        fprintf( stderr, "%s: %ld out of range (%ld, %ld)\n",
73864064216a8433360745f69edddce19a606659163The Android Open Source Project                            p_token->u.token.parm[i].name, val,
73964064216a8433360745f69edddce19a606659163The Android Open Source Project                            p_token->u.token.parm[i].low_val, p_token->u.token.parm[i].hi_val );
74064064216a8433360745f69edddce19a606659163The Android Open Source Project                        return FALSE;
74164064216a8433360745f69edddce19a606659163The Android Open Source Project                    }
74264064216a8433360745f69edddce19a606659163The Android Open Source Project                }
74364064216a8433360745f69edddce19a606659163The Android Open Source Project            }
74464064216a8433360745f69edddce19a606659163The Android Open Source Project
74564064216a8433360745f69edddce19a606659163The Android Open Source Project            if (p_token->u.token.parm[i].flags & CON_PARM_SIGN)
74664064216a8433360745f69edddce19a606659163The Android Open Source Project                p_token->u.token.parm[i].value = sval;
74764064216a8433360745f69edddce19a606659163The Android Open Source Project            else
74864064216a8433360745f69edddce19a606659163The Android Open Source Project                p_token->u.token.parm[i].value = val;
74964064216a8433360745f69edddce19a606659163The Android Open Source Project        }
75064064216a8433360745f69edddce19a606659163The Android Open Source Project
75164064216a8433360745f69edddce19a606659163The Android Open Source Project        p_token->u.token.parm[i].flags &= ~CON_PARM_NOVAL;
75264064216a8433360745f69edddce19a606659163The Android Open Source Project        ++nParms;
75364064216a8433360745f69edddce19a606659163The Android Open Source Project    }
75464064216a8433360745f69edddce19a606659163The Android Open Source Project
75564064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Process default values */
75664064216a8433360745f69edddce19a606659163The Android Open Source Project    for( ; i<nTotalParms; i++ )
75764064216a8433360745f69edddce19a606659163The Android Open Source Project    {
75864064216a8433360745f69edddce19a606659163The Android Open Source Project        if ((p_token->u.token.parm[i].flags & CON_PARM_DEFVAL) != 0)
75964064216a8433360745f69edddce19a606659163The Android Open Source Project        {
76064064216a8433360745f69edddce19a606659163The Android Open Source Project            p_token->u.token.parm[i].flags &= ~CON_PARM_NOVAL;
76164064216a8433360745f69edddce19a606659163The Android Open Source Project            ++nParms;
76264064216a8433360745f69edddce19a606659163The Android Open Source Project        }
76364064216a8433360745f69edddce19a606659163The Android Open Source Project        else if (!(p_token->u.token.parm[i].flags & CON_PARM_OPTIONAL) )
76464064216a8433360745f69edddce19a606659163The Android Open Source Project        {
76564064216a8433360745f69edddce19a606659163The Android Open Source Project            /* Mandatory parameter missing */
76664064216a8433360745f69edddce19a606659163The Android Open Source Project            return FALSE;
76764064216a8433360745f69edddce19a606659163The Android Open Source Project        }
76864064216a8433360745f69edddce19a606659163The Android Open Source Project    }
76964064216a8433360745f69edddce19a606659163The Android Open Source Project
77064064216a8433360745f69edddce19a606659163The Android Open Source Project    if( print_params )
77164064216a8433360745f69edddce19a606659163The Android Open Source Project    {
77264064216a8433360745f69edddce19a606659163The Android Open Source Project        printf("Params: %d\n", nParms );
77364064216a8433360745f69edddce19a606659163The Android Open Source Project        for (i=0; i<nParms; i++ )
77464064216a8433360745f69edddce19a606659163The Android Open Source Project        {
77564064216a8433360745f69edddce19a606659163The Android Open Source Project            console_printf_terminal("%d: %s - flags:%d",
77664064216a8433360745f69edddce19a606659163The Android Open Source Project                i+1, p_token->u.token.parm[i].name,
77764064216a8433360745f69edddce19a606659163The Android Open Source Project                p_token->u.token.parm[i].flags);
77864064216a8433360745f69edddce19a606659163The Android Open Source Project
77964064216a8433360745f69edddce19a606659163The Android Open Source Project            if (p_token->u.token.parm[i].flags & CON_PARM_SIGN)
78064064216a8433360745f69edddce19a606659163The Android Open Source Project                console_printf_terminal("min:%d, max:%d, value:%d ",p_token->u.token.parm[i].low_val, p_token->u.token.parm[i].hi_val,
78164064216a8433360745f69edddce19a606659163The Android Open Source Project                    p_token->u.token.parm[i].value);
78264064216a8433360745f69edddce19a606659163The Android Open Source Project            else
78364064216a8433360745f69edddce19a606659163The Android Open Source Project                console_printf_terminal("min:%ld, max:%ld, value:%ld ",p_token->u.token.parm[i].low_val, p_token->u.token.parm[i].hi_val,
78464064216a8433360745f69edddce19a606659163The Android Open Source Project                    p_token->u.token.parm[i].value);
78564064216a8433360745f69edddce19a606659163The Android Open Source Project
78664064216a8433360745f69edddce19a606659163The Android Open Source Project            console_printf_terminal("(%#lx)",p_token->u.token.parm[i].value );
78764064216a8433360745f69edddce19a606659163The Android Open Source Project
78864064216a8433360745f69edddce19a606659163The Android Open Source Project            if( p_token->u.token.parm[i].flags & (CON_PARM_LINE | CON_PARM_STRING ))
78964064216a8433360745f69edddce19a606659163The Android Open Source Project            {
79064064216a8433360745f69edddce19a606659163The Android Open Source Project                printf(" - '%s'", (char *) p_token->u.token.parm[i].value );
79164064216a8433360745f69edddce19a606659163The Android Open Source Project            }
79264064216a8433360745f69edddce19a606659163The Android Open Source Project            printf("\n");
79364064216a8433360745f69edddce19a606659163The Android Open Source Project        }
79464064216a8433360745f69edddce19a606659163The Android Open Source Project
79564064216a8433360745f69edddce19a606659163The Android Open Source Project    }
79664064216a8433360745f69edddce19a606659163The Android Open Source Project    *pnParms = nParms;
79764064216a8433360745f69edddce19a606659163The Android Open Source Project
79864064216a8433360745f69edddce19a606659163The Android Open Source Project    return TRUE;
79964064216a8433360745f69edddce19a606659163The Android Open Source Project}
80064064216a8433360745f69edddce19a606659163The Android Open Source Project
80164064216a8433360745f69edddce19a606659163The Android Open Source Project/* Serach a token by name in the current directory */
80264064216a8433360745f69edddce19a606659163The Android Open Source ProjectConEntry_t *console_searchToken( ConEntry_t *p_dir, char *name )
80364064216a8433360745f69edddce19a606659163The Android Open Source Project{
80464064216a8433360745f69edddce19a606659163The Android Open Source Project   ConEntry_t *p_token;
80564064216a8433360745f69edddce19a606659163The Android Open Source Project   U16        name_len = (U16)strlen( name );
80664064216a8433360745f69edddce19a606659163The Android Open Source Project
80764064216a8433360745f69edddce19a606659163The Android Open Source Project   /* Check alias */
80864064216a8433360745f69edddce19a606659163The Android Open Source Project   p_token = p_dir->u.dir.first;
80964064216a8433360745f69edddce19a606659163The Android Open Source Project   while( p_token )
81064064216a8433360745f69edddce19a606659163The Android Open Source Project   {
81164064216a8433360745f69edddce19a606659163The Android Open Source Project      if (p_token->alias &&
81264064216a8433360745f69edddce19a606659163The Android Open Source Project          (name_len == ALIAS_LEN) &&
81364064216a8433360745f69edddce19a606659163The Android Open Source Project          !console_stricmp( p_token->alias, name, ALIAS_LEN ) )
81464064216a8433360745f69edddce19a606659163The Android Open Source Project          return p_token;
81564064216a8433360745f69edddce19a606659163The Android Open Source Project      p_token = p_token->next;
81664064216a8433360745f69edddce19a606659163The Android Open Source Project   }
81764064216a8433360745f69edddce19a606659163The Android Open Source Project
81864064216a8433360745f69edddce19a606659163The Android Open Source Project   /* Check name */
81964064216a8433360745f69edddce19a606659163The Android Open Source Project   p_token = p_dir->u.dir.first;
82064064216a8433360745f69edddce19a606659163The Android Open Source Project   while( p_token )
82164064216a8433360745f69edddce19a606659163The Android Open Source Project   {
82264064216a8433360745f69edddce19a606659163The Android Open Source Project      if (!console_stricmp( p_token->name, name, name_len ) )
82364064216a8433360745f69edddce19a606659163The Android Open Source Project         break;
82464064216a8433360745f69edddce19a606659163The Android Open Source Project      p_token = p_token->next;
82564064216a8433360745f69edddce19a606659163The Android Open Source Project   }
82664064216a8433360745f69edddce19a606659163The Android Open Source Project
82764064216a8433360745f69edddce19a606659163The Android Open Source Project   return p_token;
82864064216a8433360745f69edddce19a606659163The Android Open Source Project}
82964064216a8433360745f69edddce19a606659163The Android Open Source Project
83064064216a8433360745f69edddce19a606659163The Android Open Source Project
83164064216a8433360745f69edddce19a606659163The Android Open Source Project/* Display help for each entry in the current directory */
83264064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid  console_dirHelp( void )
83364064216a8433360745f69edddce19a606659163The Android Open Source Project{
83464064216a8433360745f69edddce19a606659163The Android Open Source Project   ConEntry_t *p_token;
83564064216a8433360745f69edddce19a606659163The Android Open Source Project   char        print_str[80];
83664064216a8433360745f69edddce19a606659163The Android Open Source Project
83764064216a8433360745f69edddce19a606659163The Android Open Source Project   p_token = p_cur_dir->u.dir.first;
83864064216a8433360745f69edddce19a606659163The Android Open Source Project
83964064216a8433360745f69edddce19a606659163The Android Open Source Project   while( p_token )
84064064216a8433360745f69edddce19a606659163The Android Open Source Project   {
84164064216a8433360745f69edddce19a606659163The Android Open Source Project      if (p_token->sel == Dir)
84264064216a8433360745f69edddce19a606659163The Android Open Source Project         sprintf( print_str, "%s: directory\n", p_token->name );
84364064216a8433360745f69edddce19a606659163The Android Open Source Project      else
84464064216a8433360745f69edddce19a606659163The Android Open Source Project         sprintf( print_str, "%s(%d parms): %s\n",
84564064216a8433360745f69edddce19a606659163The Android Open Source Project                  p_token->name, console_getNParms(p_token), p_token->help );
84664064216a8433360745f69edddce19a606659163The Android Open Source Project      console_printf_terminal( print_str );
84764064216a8433360745f69edddce19a606659163The Android Open Source Project      p_token = p_token->next;
84864064216a8433360745f69edddce19a606659163The Android Open Source Project   }
84964064216a8433360745f69edddce19a606659163The Android Open Source Project
85064064216a8433360745f69edddce19a606659163The Android Open Source Project   console_printf_terminal( "Type ? <name> for command help, \"/\"-root, \"..\"-upper\n" );
85164064216a8433360745f69edddce19a606659163The Android Open Source Project}
85264064216a8433360745f69edddce19a606659163The Android Open Source Project
85364064216a8433360745f69edddce19a606659163The Android Open Source Project
85464064216a8433360745f69edddce19a606659163The Android Open Source Project/* Display help a token */
85564064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid  console_displayHelp( ConEntry_t *p_token )
85664064216a8433360745f69edddce19a606659163The Android Open Source Project{
85764064216a8433360745f69edddce19a606659163The Android Open Source Project   char bra, ket;
85864064216a8433360745f69edddce19a606659163The Android Open Source Project   U16 nTotalParms = console_getNParms( p_token );
85964064216a8433360745f69edddce19a606659163The Android Open Source Project   U16 i;
86064064216a8433360745f69edddce19a606659163The Android Open Source Project
86164064216a8433360745f69edddce19a606659163The Android Open Source Project
86264064216a8433360745f69edddce19a606659163The Android Open Source Project   console_printf_terminal( "%s: %s ", p_token->help, p_token->name );
86364064216a8433360745f69edddce19a606659163The Android Open Source Project   for( i=0; i<nTotalParms; i++ )
86464064216a8433360745f69edddce19a606659163The Android Open Source Project   {
86564064216a8433360745f69edddce19a606659163The Android Open Source Project      if (p_token->u.token.parm[i].flags & CON_PARM_OPTIONAL)
86664064216a8433360745f69edddce19a606659163The Android Open Source Project      {
86764064216a8433360745f69edddce19a606659163The Android Open Source Project         bra = '['; ket=']';
86864064216a8433360745f69edddce19a606659163The Android Open Source Project      }
86964064216a8433360745f69edddce19a606659163The Android Open Source Project      else
87064064216a8433360745f69edddce19a606659163The Android Open Source Project      {
87164064216a8433360745f69edddce19a606659163The Android Open Source Project         bra = '<'; ket='>';
87264064216a8433360745f69edddce19a606659163The Android Open Source Project      }
87364064216a8433360745f69edddce19a606659163The Android Open Source Project      console_printf_terminal( "%c%s", bra, p_token->u.token.parm[i].name );
87464064216a8433360745f69edddce19a606659163The Android Open Source Project      if (p_token->u.token.parm[i].flags & CON_PARM_DEFVAL)
87564064216a8433360745f69edddce19a606659163The Android Open Source Project      {
87664064216a8433360745f69edddce19a606659163The Android Open Source Project          console_printf_terminal("=%lu", p_token->u.token.parm[i].value);
87764064216a8433360745f69edddce19a606659163The Android Open Source Project      }
87864064216a8433360745f69edddce19a606659163The Android Open Source Project      if (p_token->u.token.parm[i].flags & CON_PARM_RANGE)
87964064216a8433360745f69edddce19a606659163The Android Open Source Project      {
88064064216a8433360745f69edddce19a606659163The Android Open Source Project          console_printf_terminal( (p_token->u.token.parm[i].flags & CON_PARM_SIGN) ? " (%d..%d%s)" : " (%lu..%lu%s)",
88164064216a8433360745f69edddce19a606659163The Android Open Source Project                  p_token->u.token.parm[i].low_val,
88264064216a8433360745f69edddce19a606659163The Android Open Source Project                  p_token->u.token.parm[i].hi_val,
88364064216a8433360745f69edddce19a606659163The Android Open Source Project                  (p_token->u.token.parm[i].flags & (CON_PARM_STRING | CON_PARM_LINE)) ? " chars" : "" );
88464064216a8433360745f69edddce19a606659163The Android Open Source Project
88564064216a8433360745f69edddce19a606659163The Android Open Source Project      }
88664064216a8433360745f69edddce19a606659163The Android Open Source Project      console_printf_terminal( "%c \n",ket );
88764064216a8433360745f69edddce19a606659163The Android Open Source Project   }
88864064216a8433360745f69edddce19a606659163The Android Open Source Project}
88964064216a8433360745f69edddce19a606659163The Android Open Source Project
89064064216a8433360745f69edddce19a606659163The Android Open Source Project/* Choose unique alias for <name> in <p_dir> */
89164064216a8433360745f69edddce19a606659163The Android Open Source Project/* Currently only single-character aliases are supported */
89264064216a8433360745f69edddce19a606659163The Android Open Source Projectint console_chooseAlias( ConEntry_t *p_dir, ConEntry_t *p_new_token )
89364064216a8433360745f69edddce19a606659163The Android Open Source Project{
89464064216a8433360745f69edddce19a606659163The Android Open Source Project   ConEntry_t *p_token;
89564064216a8433360745f69edddce19a606659163The Android Open Source Project   int         i;
89664064216a8433360745f69edddce19a606659163The Android Open Source Project   char        c;
89764064216a8433360745f69edddce19a606659163The Android Open Source Project   char *new_alias = NULL;
89864064216a8433360745f69edddce19a606659163The Android Open Source Project
89964064216a8433360745f69edddce19a606659163The Android Open Source Project   /* find alias given from user */
90064064216a8433360745f69edddce19a606659163The Android Open Source Project   for(i=0; p_new_token->name[i]; i++ )
90164064216a8433360745f69edddce19a606659163The Android Open Source Project   {
90264064216a8433360745f69edddce19a606659163The Android Open Source Project       if( isupper(p_new_token->name[i]) )
90364064216a8433360745f69edddce19a606659163The Android Open Source Project       {
90464064216a8433360745f69edddce19a606659163The Android Open Source Project           new_alias = &p_new_token->name[i];
90564064216a8433360745f69edddce19a606659163The Android Open Source Project           break;
90664064216a8433360745f69edddce19a606659163The Android Open Source Project       }
90764064216a8433360745f69edddce19a606659163The Android Open Source Project   }
90864064216a8433360745f69edddce19a606659163The Android Open Source Project
90964064216a8433360745f69edddce19a606659163The Android Open Source Project   console_strlwr( p_new_token->name );
91064064216a8433360745f69edddce19a606659163The Android Open Source Project
91164064216a8433360745f69edddce19a606659163The Android Open Source Project   if( new_alias )
91264064216a8433360745f69edddce19a606659163The Android Open Source Project   {
91364064216a8433360745f69edddce19a606659163The Android Open Source Project      p_token = p_dir->u.dir.first;
91464064216a8433360745f69edddce19a606659163The Android Open Source Project
91564064216a8433360745f69edddce19a606659163The Android Open Source Project      while( p_token )
91664064216a8433360745f69edddce19a606659163The Android Open Source Project      {
91764064216a8433360745f69edddce19a606659163The Android Open Source Project         if (p_token->alias && (tolower( *p_token->alias ) == *new_alias) )
91864064216a8433360745f69edddce19a606659163The Android Open Source Project         {
91964064216a8433360745f69edddce19a606659163The Android Open Source Project/*            *new_alias = toupper(*new_alias);*/
92064064216a8433360745f69edddce19a606659163The Android Open Source Project            fprintf( stderr, "**Error: duplicated alias '%c' in <%s> and <%s>**\n", *new_alias,
92164064216a8433360745f69edddce19a606659163The Android Open Source Project                    p_token->name, p_new_token->name );
92264064216a8433360745f69edddce19a606659163The Android Open Source Project            return 0;
92364064216a8433360745f69edddce19a606659163The Android Open Source Project         }
92464064216a8433360745f69edddce19a606659163The Android Open Source Project         p_token = p_token->next;
92564064216a8433360745f69edddce19a606659163The Android Open Source Project      }
92664064216a8433360745f69edddce19a606659163The Android Open Source Project      *new_alias = toupper(*new_alias);
92764064216a8433360745f69edddce19a606659163The Android Open Source Project      p_new_token->alias = new_alias;
92864064216a8433360745f69edddce19a606659163The Android Open Source Project      return 1;
92964064216a8433360745f69edddce19a606659163The Android Open Source Project   }
93064064216a8433360745f69edddce19a606659163The Android Open Source Project
93164064216a8433360745f69edddce19a606659163The Android Open Source Project   i = 0;
93264064216a8433360745f69edddce19a606659163The Android Open Source Project   while( p_new_token->name[i] )
93364064216a8433360745f69edddce19a606659163The Android Open Source Project   {
93464064216a8433360745f69edddce19a606659163The Android Open Source Project      c = p_new_token->name[i];
93564064216a8433360745f69edddce19a606659163The Android Open Source Project      p_token = p_dir->u.dir.first;
93664064216a8433360745f69edddce19a606659163The Android Open Source Project
93764064216a8433360745f69edddce19a606659163The Android Open Source Project      while( p_token )
93864064216a8433360745f69edddce19a606659163The Android Open Source Project      {
93964064216a8433360745f69edddce19a606659163The Android Open Source Project         if (p_token->alias &&
94064064216a8433360745f69edddce19a606659163The Android Open Source Project             (tolower( *p_token->alias ) == c) )
94164064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
94264064216a8433360745f69edddce19a606659163The Android Open Source Project         p_token = p_token->next;
94364064216a8433360745f69edddce19a606659163The Android Open Source Project      }
94464064216a8433360745f69edddce19a606659163The Android Open Source Project      if (p_token)
94564064216a8433360745f69edddce19a606659163The Android Open Source Project         ++i;
94664064216a8433360745f69edddce19a606659163The Android Open Source Project      else
94764064216a8433360745f69edddce19a606659163The Android Open Source Project      {
94864064216a8433360745f69edddce19a606659163The Android Open Source Project         p_new_token->name[i] = toupper( c );
94964064216a8433360745f69edddce19a606659163The Android Open Source Project         p_new_token->alias   = &p_new_token->name[i];
95064064216a8433360745f69edddce19a606659163The Android Open Source Project         break;
95164064216a8433360745f69edddce19a606659163The Android Open Source Project      }
95264064216a8433360745f69edddce19a606659163The Android Open Source Project   }
95364064216a8433360745f69edddce19a606659163The Android Open Source Project   return 1;
95464064216a8433360745f69edddce19a606659163The Android Open Source Project}
95564064216a8433360745f69edddce19a606659163The Android Open Source Project
95664064216a8433360745f69edddce19a606659163The Android Open Source Project
95764064216a8433360745f69edddce19a606659163The Android Open Source Project/* Convert string s to lower case. Return pointer to s */
95864064216a8433360745f69edddce19a606659163The Android Open Source Projectchar  * console_strlwr( char *s )
95964064216a8433360745f69edddce19a606659163The Android Open Source Project{
96064064216a8433360745f69edddce19a606659163The Android Open Source Project   char  *s0=s;
96164064216a8433360745f69edddce19a606659163The Android Open Source Project
96264064216a8433360745f69edddce19a606659163The Android Open Source Project   while( *s )
96364064216a8433360745f69edddce19a606659163The Android Open Source Project   {
96464064216a8433360745f69edddce19a606659163The Android Open Source Project      *s = tolower( *s );
96564064216a8433360745f69edddce19a606659163The Android Open Source Project      ++s;
96664064216a8433360745f69edddce19a606659163The Android Open Source Project   }
96764064216a8433360745f69edddce19a606659163The Android Open Source Project
96864064216a8433360745f69edddce19a606659163The Android Open Source Project   return s0;
96964064216a8433360745f69edddce19a606659163The Android Open Source Project}
97064064216a8433360745f69edddce19a606659163The Android Open Source Project
97164064216a8433360745f69edddce19a606659163The Android Open Source Project
97264064216a8433360745f69edddce19a606659163The Android Open Source Project/* Compare strings case insensitive */
97364064216a8433360745f69edddce19a606659163The Android Open Source Projectint console_stricmp( char *s1, char *s2, U16 len )
97464064216a8433360745f69edddce19a606659163The Android Open Source Project{
97564064216a8433360745f69edddce19a606659163The Android Open Source Project   int  i;
97664064216a8433360745f69edddce19a606659163The Android Open Source Project
97764064216a8433360745f69edddce19a606659163The Android Open Source Project   for( i=0; i<len && s1[i] && s2[i]; i++ )
97864064216a8433360745f69edddce19a606659163The Android Open Source Project   {
97964064216a8433360745f69edddce19a606659163The Android Open Source Project      if (tolower( s1[i])  != tolower( s2[i] ))
98064064216a8433360745f69edddce19a606659163The Android Open Source Project         break;
98164064216a8433360745f69edddce19a606659163The Android Open Source Project   }
98264064216a8433360745f69edddce19a606659163The Android Open Source Project
98364064216a8433360745f69edddce19a606659163The Android Open Source Project   return ( (len - i) * (s1[i] - s2[i]) );
98464064216a8433360745f69edddce19a606659163The Android Open Source Project}
98564064216a8433360745f69edddce19a606659163The Android Open Source Project
98664064216a8433360745f69edddce19a606659163The Android Open Source Project/* Remove leading blanks */
98764064216a8433360745f69edddce19a606659163The Android Open Source Projectchar * console_ltrim(char *s )
98864064216a8433360745f69edddce19a606659163The Android Open Source Project{
98964064216a8433360745f69edddce19a606659163The Android Open Source Project    while( *s == ' ' || *s == '\t' ) s++;
99064064216a8433360745f69edddce19a606659163The Android Open Source Project    return s;
99164064216a8433360745f69edddce19a606659163The Android Open Source Project}
99264064216a8433360745f69edddce19a606659163The Android Open Source Project
99364064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef _WINDOWS
99464064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* _WINDOWS*/
99564064216a8433360745f69edddce19a606659163The Android Open Source Project
99664064216a8433360745f69edddce19a606659163The Android Open Source Project
997