Build command from raw input.
19 {
20 assert(res && "NULL input");
22
23 struct args arguments;
25
26 if(!valid) {
28 return;
29 }
30
31 if(arguments.argc == 0) {
34 return;
35 }
36
37 const char *name = arguments.argv[0];
38
39 if(strcmp(name, "help") == 0) {
41 } else if(strcmp(name, "list") == 0) {
43 } else if(strcmp(name, "date") == 0) {
45 } else if(strcmp(name, "time") == 0) {
47 } else if(strcmp(name, "stop") == 0) {
48 if(arguments.argc != 2 || !
is_number(arguments.argv[1])) {
51 } else {
53 res->val.proc_id = atoi(arguments.argv[1]);
54 }
55 } else if(strcmp(name, "exit") == 0) {
57 } else if(strcmp(name, "cd") == 0) {
59 if(arguments.argc != 2) {
62 } else {
63 const unsigned int len = strlen(arguments.argv[1]);
64 res->val.new_dir = malloc(len + 1);
65 memcpy(res->val.new_dir, arguments.argv[1], len);
66 res->val.new_dir[len] = '\0';
67 }
68 } else if(strcmp(name, "clear") == 0) {
70 } else if(strcmp(name, "set") == 0) {
71 if(arguments.argc < 2 || arguments.argc > 3) {
74 } else if(arguments.argc == 2) {
76 const unsigned int name_len = strlen(arguments.argv[1]);
77 res->val.env.name = malloc(name_len + 1);
78 memcpy(res->val.env.name, arguments.argv[1], name_len);
79 res->val.env.name[name_len] = '\0';
80 res->val.env.val = NULL;
81 } else if(arguments.argc == 3) {
83 const unsigned int name_len = strlen(arguments.argv[1]);
84 res->val.env.name = malloc(name_len + 1);
85 memcpy(res->val.env.name, arguments.argv[1], name_len);
86 res->val.env.name[name_len] = '\0';
87
88 const unsigned int val_len = strlen(arguments.argv[2]);
89 res->val.env.val = malloc(val_len + 1);
90 memcpy(res->val.env.val, arguments.argv[2], val_len);
91 res->val.env.val[val_len] = '\0';
92 }
93 } else if(strcmp(name, "unset") == 0) {
94 if(arguments.argc != 2) {
97 } else {
99 const unsigned int len = strlen(arguments.argv[1]);
100 res->val.env.name = malloc(len + 1);
101 memcpy(res->val.env.name, arguments.argv[1], len);
102 res->val.env.name[len] = '\0';
103 res->val.env.val = NULL;
104 }
105 } else if(strcmp(name, "env") == 0) {
106 if(arguments.argc == 1) {
108 } else if(arguments.argc == 2) {
110 const unsigned int len = strlen(arguments.argv[1]);
111 res->val.env.name = malloc(len + 1);
112 memcpy(res->val.env.name, arguments.argv[1], len);
113 res->val.env.name[len] = '\0';
114 res->val.env.val = NULL;
115 } else {
118 }
119 } else if(strcmp(name, "kill") == 0) {
120 if(arguments.argc != 2 || !
is_number(arguments.argv[1])) {
123 } else {
125 res->val.proc_id = atoi(arguments.argv[1]);
126 }
127 } else if(strcmp(name, "resume") == 0) {
128 if(arguments.argc != 2 || !
is_number(arguments.argv[1])) {
131 } else {
133 res->val.proc_id = atoi(arguments.argv[1]);
134 }
135 } else if(strcmp(name, "child") == 0) {
136 if(arguments.argc != 2 || !
is_number(arguments.argv[1])) {
139 } else {
141 res->val.proc_id = atoi(arguments.argv[1]);
142 }
143 } else if(strcmp(name, "addpath") == 0) {
144 if(arguments.argc != 2) {
147 } else {
149 const size_t len = strlen(arguments.argv[1]);
150 res->val.new_path = (os_char *)malloc((len + 1) * sizeof(os_char));
151 res->val.new_path[len] = '\0';
152 memcpy(res->val.new_path, arguments.argv[1], strlen(arguments.argv[1]) * sizeof(os_char));
153 }
154 } else if(strcmp(name, "delete") == 0) {
155 if(arguments.argc > 2 || arguments.argc < 2) {
158 } else {
160
161 const unsigned int dir_len = strlen(arguments.argv[1]);
162 res->val.filename = malloc(dir_len + 1);
163 memcpy(res->val.filename, arguments.argv[1], dir_len);
164 res->val.filename[dir_len] = '\0';
165 }
166 } else if(strcmp(name, "lsdir") == 0) {
167 if(arguments.argc != 2) {
170 } else {
172
173 const unsigned int dir_len = strlen(arguments.argv[1]);
174 res->val.dir = malloc(dir_len + 1);
175 memcpy(res->val.dir, arguments.argv[1], dir_len);
176 res->val.dir[dir_len] = '\0';
177 }
179 if(arguments.argc != 1) {
182 } else {
185 }
186 } else {
189 }
190
192}
void args_deep_copy_init(struct args *obj, const struct args *source)
Initialize the object by deep copying source
bool args_init_from_str(struct args *obj, const os_char *input)
Build args from an input string.
bool is_minibat_file(const os_char *file)
void format_usage(char *fmt,...)
Used format_xxx instead of printf and such for uniform output.
void format_error(char *fmt,...)
Used format_xxx instead of printf and such for uniform output.
Result after parsing an arbitrary string.
bool is_number(const char *c)