00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #include <stdio.h>
00032 #include <stdlib.h>
00033 #include <str.h>
00034 #include <io/console.h>
00035 #include <io/keycode.h>
00036 #include <io/style.h>
00037 #include <io/color.h>
00038 #include <vfs/vfs.h>
00039 #include <clipboard.h>
00040 #include <macros.h>
00041 #include <errno.h>
00042 #include <assert.h>
00043 #include <bool.h>
00044 #include <tinput.h>
00045
00046 #include "config.h"
00047 #include "util.h"
00048 #include "scli.h"
00049 #include "input.h"
00050 #include "errors.h"
00051 #include "exec.h"
00052
00053 extern volatile unsigned int cli_quit;
00054
00056 static tinput_t *tinput;
00057
00058
00059
00060
00061 int tok_input(cliuser_t *usr)
00062 {
00063 char *cmd[WORD_MAX];
00064 int n = 0, i = 0;
00065 int rc = 0;
00066 char *tmp;
00067
00068 if (NULL == usr->line)
00069 return CL_EFAIL;
00070
00071 tmp = str_dup(usr->line);
00072
00073 cmd[n] = strtok(tmp, " ");
00074 while (cmd[n] && n < WORD_MAX) {
00075 cmd[++n] = strtok(NULL, " ");
00076 }
00077
00078
00079 if (NULL == cmd[0]) {
00080 rc = CL_ENOENT;
00081 goto finit;
00082 }
00083
00084
00085 if ((i = (is_builtin(cmd[0]))) > -1) {
00086 rc = run_builtin(i, cmd, usr);
00087 goto finit;
00088
00089 } else if ((i = (is_module(cmd[0]))) > -1) {
00090 rc = run_module(i, cmd);
00091 goto finit;
00092 }
00093
00094
00095 rc = try_exec(cmd[0], cmd);
00096
00097 finit:
00098 if (NULL != usr->line) {
00099 free(usr->line);
00100 usr->line = (char *) NULL;
00101 }
00102 if (NULL != tmp)
00103 free(tmp);
00104
00105 return rc;
00106 }
00107
00108 void get_input(cliuser_t *usr)
00109 {
00110 char *str;
00111 int rc;
00112
00113 fflush(stdout);
00114 console_set_style(fphone(stdout), STYLE_EMPHASIS);
00115 printf("%s", usr->prompt);
00116 fflush(stdout);
00117 console_set_style(fphone(stdout), STYLE_NORMAL);
00118
00119 rc = tinput_read(tinput, &str);
00120 if (rc == ENOENT) {
00121
00122 cli_quit = 1;
00123 putchar('\n');
00124 return;
00125 }
00126
00127 if (rc != EOK) {
00128
00129 return;
00130 }
00131
00132
00133 if (str_cmp(str, "") == 0) {
00134 free(str);
00135 return;
00136 }
00137
00138 usr->line = str;
00139 return;
00140 }
00141
00142 int input_init(void)
00143 {
00144 tinput = tinput_new();
00145 if (tinput == NULL) {
00146 printf("Failed to initialize input.\n");
00147 return 1;
00148 }
00149
00150 return 0;
00151 }