mirror of
https://github.com/MaJerle/lwshell.git
synced 2025-02-06 13:08:22 +08:00
Add more code
This commit is contained in:
parent
d741f5df37
commit
080d62c7c8
@ -5,10 +5,53 @@
|
||||
|
||||
int32_t
|
||||
addint_cmd(int32_t argc, char** argv) {
|
||||
printf("ADDINT CMD, args: %d\r\n", argc);
|
||||
for (size_t i = 0; i < argc; ++i) {
|
||||
printf("Arg %d: %s\r\n", (int)i, argv[i]);
|
||||
long long i1, i2;
|
||||
if (argc < 3) {
|
||||
return -1;
|
||||
}
|
||||
i1 = lwshell_parse_long_long(argv[1]);
|
||||
i2 = lwshell_parse_long_long(argv[2]);
|
||||
|
||||
printf("%lld\r\n", i1 + i2);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t
|
||||
subint_cmd(int32_t argc, char** argv) {
|
||||
long long i1, i2;
|
||||
if (argc < 3) {
|
||||
return -1;
|
||||
}
|
||||
i1 = lwshell_parse_long_long(argv[1]);
|
||||
i2 = lwshell_parse_long_long(argv[2]);
|
||||
|
||||
printf("%lld\r\n", i1 - i2);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t
|
||||
adddbl_cmd(int32_t argc, char** argv) {
|
||||
double i1, i2;
|
||||
if (argc < 3) {
|
||||
return -1;
|
||||
}
|
||||
i1 = lwshell_parse_double(argv[1]);
|
||||
i2 = lwshell_parse_double(argv[2]);
|
||||
|
||||
printf("%f\r\n", (i1 + i2));
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t
|
||||
subdbl_cmd(int32_t argc, char** argv) {
|
||||
double i1, i2;
|
||||
if (argc < 3) {
|
||||
return -1;
|
||||
}
|
||||
i1 = lwshell_parse_double(argv[1]);
|
||||
i2 = lwshell_parse_double(argv[2]);
|
||||
|
||||
printf("%f\r\n", (i1 - i2));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -22,7 +65,10 @@ main(int argc, char** argv) {
|
||||
printf("\r\n");
|
||||
|
||||
lwshell_init();
|
||||
lwshell_register_cmd("addint", addint_cmd, "Adds int between 2 arguments");
|
||||
lwshell_register_cmd("addint", addint_cmd, "Adds 2 integer numbers and prints them");
|
||||
lwshell_register_cmd("subint", subint_cmd, "Substitute 2 integer numbers and prints them");
|
||||
lwshell_register_cmd("adddbl", adddbl_cmd, "Adds 2 double numbers and prints them");
|
||||
lwshell_register_cmd("subdbl", subdbl_cmd, "Substitute 2 double numbers and prints them");
|
||||
|
||||
/* User input to process every character */
|
||||
printf("Start entering your text and press enter...\r\n");
|
||||
|
@ -35,6 +35,7 @@
|
||||
#define LWSHELL_HDR_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include "lwshell/lwshell_opt.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
@ -82,6 +83,34 @@ lwshellr_t lwshell_init(void);
|
||||
lwshellr_t lwshell_register_cmd(const char* cmd_name, lwshell_cmd_fn cmd_fn, const char* desc);
|
||||
lwshellr_t lwshell_input(const void* in_data, size_t len);
|
||||
|
||||
/**
|
||||
* \brief Parse input string as `integer`
|
||||
* \param[in] str: String to parse
|
||||
* \return String parsed as integer
|
||||
*/
|
||||
#define lwshell_parse_int(str) atoi(str)
|
||||
|
||||
/**
|
||||
* \brief Parse input string as `double`
|
||||
* \param[in] str: String to parse
|
||||
* \return String parsed as `double`
|
||||
*/
|
||||
#define lwshell_parse_double(str) atof(str)
|
||||
|
||||
/**
|
||||
* \brief Parse input string as `long`
|
||||
* \param[in] str: String to parse
|
||||
* \return String parsed as `long`
|
||||
*/
|
||||
#define lwshell_parse_long(str) atol(str)
|
||||
|
||||
/**
|
||||
* \brief Parse input string as `long long`
|
||||
* \param[in] str: String to parse
|
||||
* \return String parsed as `long long`
|
||||
*/
|
||||
#define lwshell_parse_long_long(str) atoll(str)
|
||||
|
||||
/**
|
||||
* \}
|
||||
*/
|
||||
|
@ -155,10 +155,23 @@ prv_parse_input(lwshell_t* lw) {
|
||||
|
||||
/* Check for command */
|
||||
if (lw->argc > 0 && cmds_cnt > 0) {
|
||||
lwshell_cmd_t* c = NULL;
|
||||
/* Process all commands */
|
||||
for (size_t i = 0; i < cmds_cnt; ++i) {
|
||||
if (strcmp(cmds[i].name, lw->argv[0]) == 0) {
|
||||
cmds[i].fn(lw->argc, lw->argv);
|
||||
if (strncmp(cmds[i].name, lw->argv[0], strlen(lw->argv[0])) == 0) {
|
||||
c = &cmds[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Valid command ready? */
|
||||
if (c != NULL) {
|
||||
if (lw->argc == 2
|
||||
&& lw->argv[1][0] == '-' && lw->argv[1][1] == 'h') {
|
||||
/* Here we can print version */
|
||||
printf("%s\r\n", c->desc);
|
||||
} else {
|
||||
c->fn(lw->argc, lw->argv);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user