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