void console_runcmd(console_t* console, char* cmdline, int* fat, unsigned int memtotal) { /* execute command */ if (0 == strcmp("mem", cmdline)) { /* check memory command */ cmd_mem(console, memtotal); } else if (0 == strcmp("clear", cmdline)) { /* clear command */ cmd_clear(console); } else if (0 == strcmp("ls", cmdline)) { /* ls(dir) command */ cmd_ls(console); } else if (0 == strncmp("cat ", cmdline, 4)) { /* cat command */ cmd_cat(console, fat, cmdline); } else if (0 != cmdline[0]) { if (0 == cmd_app(console, fat, cmdline)) { /* neither command nor null string */ console_putstr0(console, "Bad Command.\n\n"); } } }
//执行指定指令的函数 void console_runcmd(char *cmdline, CONSOLE *console, int *fat, unsigned int mem_total) { if(0 == strcmp(cmdline, "mem")) { cmd_mem(console, mem_total); } else if(0 == strcmp(cmdline, "clear")) { cmd_clear(console); } else if(0 == strcmp(cmdline, "ls")) { cmd_ls(console); } else if(0 == strncmp(cmdline, "type ", 5)) { cmd_type(console, fat, cmdline); } //不是命令但也不是空行 else if(0 != cmdline[0]) { //运行那个应用程序的任务已经在cmd_app中执行了,返回值只是告诉这里是否正常运行了而已 if(0 == cmd_app(console, fat, cmdline)) { //如果到这里了,说明这个命令对应的既不是命令,又不是应用程序,而且不是空行 console_putstring_toend(console, "Bad Command!\n\n"); } } return ; }
//执行指定指令的函数 void console_runcmd(char *cmdline, CONSOLE *console, int *fat, unsigned int mem_total) { if(0 == strcmp(cmdline, "mem")) { cmd_mem(console, mem_total); } else if(0 == strcmp(cmdline, "clear")) { cmd_clear(console); } else if(0 == strcmp(cmdline, "ls")) { cmd_ls(console); } else if(0 == strncmp(cmdline, "type ", 5)) { cmd_type(console, fat, cmdline); } else if(0 == strcmp(cmdline, "hlt")) { cmd_hlt(console, fat); } //不是命令但也不是空行 else if(0 != cmdline[0]) { displayStrings_atLayer(console->layer, 8, console->cursor_y, COL8_FFFFFF, COL8_000000, "Bad command!"); console_newline(console); console_newline(console); } return ; }
/** * Clear the program and the variables. */ void cmd_new(char *args) { program_line * line = program; while (line) { program_line * next = line->next; free(line->args); free(line); line = next; } program = 0; cmd_clear(args); }
int exec_parsed(){ // Execs a parsed command line. int error=0,i,got=-1,n; // Now execute the command. if(parse_nwords!=0){ // Search for a matching known command. for(i=0;i<max_cmds;i++){ if(strcmp(con_cmds[i].name,parse_words[0])==0){ got=i; } } if(got>=0){ // Make sure that we have the correct number of arguments for a command. if(con_cmds[got].type=='C'){ if(parse_nwords!=con_cmds[got].max+1){ got=-2; } } // If we have a variable, deal with it here. else{ // No arguments means view the variable. if(parse_nwords==1){ view_variable(got); got=1000; } // One argument means set the variable. if(parse_nwords==2){ // Find the value to set the variable to. if(con_cmds[got].type=='F'){ // It's a FIXED variable. n=ftofix(atof(parse_words[1])); } if(con_cmds[got].type=='I'){ // It's an INT. n=atoi(parse_words[1]); } if(con_cmds[got].type=='S'){ // It's a string. internal_setstring(con_cmds[got].s_mirror,parse_words[1]); } else{ // Put the value within limits. if(n<con_cmds[got].min){n=con_cmds[got].min;} if(n>con_cmds[got].max){n=con_cmds[got].max;} // Set the mirror to the value. con_cmds[got].mirror=n; } } // If we don't have one or two arguments, then its an error. if(parse_nwords>2){ got=-2; } } } // Execute an actual command, or set a given variable. switch(got){ case -1: internal_error();break; case 0: cmd_clear();break; case 1: player_crosshair=n;break; case 2: player_crosshair_color=n;break; case 3: cmd_dir();break; case 4: cmd_disconnect();break; case 5: cmd_exec();break; case 6: player_floors=n;break; case 7: player_fov_degrees=fixtof(n);break; case 8: player_fps=n;break; case 9: player_gamma=n;cmd_gamma();break; case 10: player_gfx_mode=n;cmd_gfx_mode();break; case 11: cmd_gfx_modes();break; case 12: player_heightfix=n;break; case 13: player_invert=n;break; case 14: light_con=n;break; case 15: light_depth=fixtof(n);break; case 16: cmd_loopdemo();break; case 17: cmd_map();break; case 18: cmd_mapinfo();break; case 19: player_map_rotate=n;break; case 20: player_map=n;break; case 21: player_map_size=n;break; case 22: cmd_mem();break; case 23: internal_setstring(player_pic_con,parse_words[1]); cmd_pic_con();break; case 24: cmd_playdemo();break; case 25: cmd_pwad();break; case 26: cmd_quit();break; case 27: cmd_recdemo();break; case 28: player_r_grad=n;break; case 29: player_r_gun=n;break; case 30: cmd_stop();break; case 31: cmd_syntax();break; case 32: cmd_time();break; case 33: cmd_timerefresh();break; case 34: player_trace=1;break; case 35: cmd_viewpic();break; case 36: cmd_viewtex();break; case 37: player_vsync=n;break; case 38: cmd_wads();break; case 39: player_walls=n;break; case 40: player_windowsize=n;break; } } // Return the error value. DEBUG: Do we use this? return(error); }
int main (void) { sei(); uart_init(UART_BAUD_SELECT(9600, F_CPU)); uart_puts("\r\n\r\nTHIS PROGRAM USES 57600 BAUD - PLEASE CHANGE\r\n\r\n"); _delay_ms(100); uart_init(UART_BAUD_SELECT(57600, F_CPU)); cmd_clear(); uart_puts_P("\n\n\n\n\r"); uart_puts_P("--------------------------\r\n"); uart_puts_P("System [OK]\r\n"); systimer_init(); uart_puts_P("System Timer [OK]\r\n"); /* SD Karte Initilisieren */ cmd_init(); uart_puts_P("--------------------------\r\n\r\n"); _delay_ms(100); char input[50]={0}; static char parameters[10][32]; while(1) { for (uint8_t i = 0; i<=10; *parameters[++i]=0x00); // Input uart_puts_P("> "); uart_input(input); // Process Input getparams(input, 10, 32, parameters); char *cmd = parameters[0]; // Call Functions if (strings_equal(cmd, "ls")) { uint32_t cluster = 0; if (parameters[1][0] != 0x00) cluster = str2num(parameters[1], 16); cmd_ls(cluster); } else if (strings_equal(cmd, "cat")) { if (parameters[1][0] == 0x00 || parameters[2][0] == 0x00) cmd_help("cat"); else { uint64_t cluster = str2num(parameters[1], 16); uint64_t size = str2num(parameters[2], 16); cmd_cat(cluster, size); } } else if (strings_equal(cmd, "readtest")) { if (parameters[1][0] == 0x00 || parameters[2][0] == 0x00) cmd_help("readtest"); else { uint64_t cluster = str2num(parameters[1], 16); uint64_t size = str2num(parameters[2], 16); cmd_readtest(cluster, size); } } else if (strings_equal(cmd, "write")) { if (parameters[1][0] == 0x00 || parameters[2][0] == 0x00) cmd_help("write"); else { uint64_t cluster = str2num(parameters[1], 16); uint8_t adcport = str2num(parameters[2], 10); uint64_t maxsize = str2num(parameters[3], 16); uint8_t speed = str2num(parameters[4], 10); if (parameters[3][0] == 0x00) maxsize = 512; if (parameters[4][0] == 0x00) speed = 50; cmd_write(cluster, adcport, maxsize, speed); } } else if (strings_equal(cmd, "clear")) cmd_clear(); else if (strings_equal(cmd, "time")) cmd_time(); else if (strings_equal(cmd, "init")) cmd_init(); else if (strings_equal(cmd, "help")) cmd_help(parameters[1]); else uart_puts_P("Error: Command not found\n\r"); } while (1); return (1); }