00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "korebot.h"
00012
00027 #define ARGV_SIZE 128
00028
00029
00036 char * kb_get_arg(char * cmd, unsigned arg)
00037 {
00038 char * argv[ ARGV_SIZE ];
00039 char * t, *cpy;
00040 int argc;
00041
00042 if(argc >= ARGV_SIZE)
00043 return NULL;
00044
00045 cpy = strdup(cmd);
00046
00047
00048 argc=0;
00049 for (t=strtok(cpy," \t");t!=NULL;t=strtok(NULL," \t")) {
00050 if ( argc < ARGV_SIZE ) {
00051 argv[argc] = t;
00052 argc++;
00053 }
00054 else {
00055 kb_free(cpy);
00056
00057 return NULL;
00058 }
00059 }
00060 kb_free(cpy);
00061 return argv[arg];
00062 }
00063
00064
00079 int kb_parse_command( char * line , kb_command_t * cmds, void * data)
00080 {
00081 int argc, ok, pos, rc;
00082 char * argv[ ARGV_SIZE ];
00083 char * t;
00084
00085 if ( line == NULL || cmds == NULL ) {
00086 return KB_ERROR( "kb_parse_command" ,
00087 KB_ERROR_INVAL );
00088 }
00089
00090
00091 argc=0;
00092 for (t=strtok(line," \t");t!=NULL;t=strtok(NULL," \t")) {
00093
00094 if ( argc < ARGV_SIZE ) {
00095 argv[argc] = t;
00096 argc++;
00097 }
00098 else {
00099 return KB_ERROR( "kb_parse_command" ,
00100 KB_ERROR_TOOMANYARGS );
00101 }
00102
00103 }
00104
00105
00106 if ( argc > 0 ) {
00107
00108 ok = 0;
00109 for (pos=0; cmds[pos].name != NULL; pos++) {
00110
00111 if (!strcasecmp(cmds[pos].name,argv[0])) {
00112
00113
00114 if ( cmds[pos].minParam != -1 &&
00115 argc -1 < cmds[pos].minParam ) {
00116 return kb_error( __FILE__ ,
00117 __LINE__ ,
00118 "kb_parse_command" ,
00119 KB_ERROR_CMDARGMIN ,
00120 cmds[pos].name,
00121 cmds[pos].minParam);
00122 }
00123
00124
00125 if ( cmds[pos].maxParam != -1 &&
00126 argc -1 > cmds[pos].maxParam ) {
00127 return kb_error( __FILE__ ,
00128 __LINE__ ,
00129 "kb_parse_command" ,
00130 KB_ERROR_CMDARGMAX,
00131 cmds[pos].name,
00132 cmds[pos].maxParam);
00133 }
00134
00135
00136 if (cmds[pos].parse && (rc = cmds[pos].parse( argc , argv , data)) < 0 )
00137 return rc;
00138
00139 ok=1;
00140 break;
00141 }
00142 }
00143
00144 if (ok==0) {
00145 return KB_ERROR( "kb_parse_command" ,
00146 KB_ERROR_UNKCMD ,
00147 argv[0] );
00148 }
00149 }
00150 return 0;
00151 }
00152
00153
00165 int kb_find_command( const char * cmd_name, const kb_command_t * cmd_list)
00166 {
00167 int index;
00168
00169 for (index=0; cmd_list[index].name != NULL ; index++ ) {
00170 if (!strcasecmp( cmd_name, cmd_list[index].name ))
00171 return index;
00172 }
00173
00174 KB_ERROR("kb_find_command", KB_ERROR_UNKCMD, cmd_name);
00175 return -KB_ERROR_UNKCMD;
00176 }
00177
00178
00190 int kb_find_string( const char * str , const char **list )
00191 {
00192 int index;
00193
00194 for (index=0; list[index] != NULL ; index++ ) {
00195 if (!strcasecmp( str , list[index] ))
00196 return index;
00197 }
00198 return -1;
00199 }
00200