Skip to content
Snippets Groups Projects
Commit 68f7b909 authored by Martine Lenders's avatar Martine Lenders
Browse files

Make shell buffer size a shell property

parent 04b9d7a1
No related branches found
No related tags found
No related merge requests found
......@@ -20,6 +20,7 @@
#ifndef __SHELL_H
#define __SHELL_H
#include <stdint.h>
typedef struct shell_command_t {
char *name;
......@@ -29,20 +30,21 @@ typedef struct shell_command_t {
typedef struct shell_t {
const shell_command_t *command_list;
uint16_t shell_buffer_size;
int (*readchar)(void);
void (*put_char)(int);
} shell_t;
#define SHELL_BUFFER_SIZE (127)
/**
* @brief Initialize a shell object
* @param shell Pointer to preallocated shell object
* @param shell_commands Pointer to shell command structure. See test_shell project for example.
* @param shell_buffer_size The size of the shell buffer.
* @param read_char Pointer to input device read function. Should return exactly one byte or block.
* @param put_char Pointer to output funtion. currently unused, shell code will use printf.
*/
void shell_init(shell_t *shell, /*@null@*/ const shell_command_t *shell_commands, int(*read_char)(void), void (*put_char)(int));
void shell_init(shell_t *shell, /*@null@*/ const shell_command_t *shell_commands,
uint16_t shell_buffer_size, int(*read_char)(void), void (*put_char)(int));
/**
* @brief Endless loop that waits for command and executes handler.
......
/**
* Shell interpreter
* Shell interpreter
*
* Copyright (C) 2009, Freie Universitaet Berlin (FUB).
* Copyright (C) 2013, INRIA.
......@@ -45,7 +45,7 @@ static void(*find_handler(const shell_command_t *command_list, char *command))(c
const shell_command_t *entry;
/* iterating over command_lists */
for (unsigned int i = 0; i < sizeof(command_lists)/sizeof(entry); i++) {
for (unsigned int i = 0; i < sizeof(command_lists) / sizeof(entry); i++) {
if ((entry = command_lists[i])) {
/* iterating over commands in command_lists entry */
while (entry->name != NULL) {
......@@ -77,7 +77,7 @@ static void print_help(const shell_command_t *command_list)
const shell_command_t *entry;
/* iterating over command_lists */
for (unsigned int i = 0; i < sizeof(command_lists)/sizeof(entry); i++) {
for (unsigned int i = 0; i < sizeof(command_lists) / sizeof(entry); i++) {
if ((entry = command_lists[i])) {
/* iterating over commands in command_lists entry */
while (entry->name != NULL) {
......@@ -90,7 +90,7 @@ static void print_help(const shell_command_t *command_list)
static void handle_input_line(shell_t *shell, char *line)
{
char line_copy[SHELL_BUFFER_SIZE];
char line_copy[shell->shell_buffer_size];
char *saveptr;
strncpy(line_copy, line, sizeof(line_copy));
char *command = strtok_r(line_copy, " ", &saveptr);
......@@ -152,7 +152,7 @@ static inline void print_prompt(shell_t *shell)
void shell_run(shell_t *shell)
{
char line_buf[SHELL_BUFFER_SIZE];
char line_buf[shell->shell_buffer_size];
print_prompt(shell);
......@@ -167,9 +167,11 @@ void shell_run(shell_t *shell)
}
}
void shell_init(shell_t *shell, const shell_command_t *shell_commands, int(*readchar)(void), void(*put_char)(int))
void shell_init(shell_t *shell, const shell_command_t *shell_commands,
uint16_t shell_buffer_size, int(*readchar)(void), void(*put_char)(int))
{
shell->command_list = shell_commands;
shell->shell_buffer_size = shell_buffer_size;
shell->readchar = readchar;
shell->put_char = put_char;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment