Skip to content

Commit

Permalink
.h reconstruction
Browse files Browse the repository at this point in the history
  • Loading branch information
olikraus committed Jul 24, 2014
1 parent 89d5487 commit cadcfdc
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 14 deletions.
43 changes: 42 additions & 1 deletion src2/m2.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
#include <stdint.h>
#include <stddef.h>

#ifndef M2_PROGMEM
#define M2_PROGMEM
#endif


typedef struct m2_struct m2_t;
typedef struct m2el_struct m2el_t;
Expand All @@ -27,6 +31,32 @@ struct m2el_struct
};
typedef struct m2el_struct m2el_t;

struct m2el_opt_struct
{
m2el_t el_base;
char *opt;
};
typedef struct m2el_opt_struct m2el_opt_t;

struct m2el_list_struct
{
m2el_opt_t el_opt;
uint16_t cnt;
const m2el_t **list;
};
typedef struct m2el_list_struct m2el_list_t;

/* m2el_base.c */
/* base class function, does not call anything else */
uint16_t m2el_base(m2_t *m2, const m2el_t *el, uint8_t el_msg, void *arg);

/* m2el_opt.c */
/* option processing function, calls base class */
uint16_t m2el_opt(m2_t *m2, const m2el_t *el, uint8_t el_msg, void *arg);

/* m2el_list.c */
/* base container class function, calls m2el_opt() */
uint16_t m2el_list(m2_t *m2, const m2el_t *el, uint8_t el_msg, void *arg);

/* m2_elapi.c */
#define M2EL_MSG_GET_CHILD_CNT 0
Expand All @@ -35,7 +65,7 @@ typedef struct m2el_struct m2el_t;
struct m2el_child_ptr_struct
{
uint16_t pos;
m2el_t *el_ptr;
const m2el_t *el_ptr;
};
typedef struct m2el_child_ptr_struct m2el_child_ptr_t;

Expand All @@ -51,4 +81,15 @@ uint8_t m2el_GetOpt(m2_t *m2, const m2el_t *el, char opt);
#define M2_DFS_MSG_POST 1
uint8_t m2_DFS(m2_t *m2, m2_dfs_fn fn);

/* m2_opt.c */
/*
The following functions are calledby m2el_opt().
There should be no need to call these functions from other parts of the software.
Use
m2el_GetOpt(m2_t *m2, const m2el_t *el, char opt)
instead.
*/
uint8_t m2_opt_get_val_any_default(const char *str, char cmd, uint8_t default_value);
uint8_t m2_opt_get_val_zero_default(const char *str, char cmd);


24 changes: 12 additions & 12 deletions src2/m2_opt.c
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
mnuopt.c
m2_opt.c
A parser for the string OPTions
Expand Down Expand Up @@ -37,9 +37,9 @@ static void m2_parser_inc_str(void)
m2_parser_str++;
}

static char m2_parser_get_c(void)
static uint8_t m2_parser_get_c(void)
{
return *m2_parser_str;
return (uint8_t)*m2_parser_str;
}

static uint8_t m2_parser_is_digit(void)
Expand All @@ -65,18 +65,18 @@ static void m2_parser_skip_space(void)
}
}

static uint8_t m2_parser_get_val(void)
static uint16_t m2_parser_get_val(void)
{
register uint8_t val = 0;
register int8_t c;
register uint16_t val = 0;
register uint8_t c;
for(;;)
{
c = m2_parser_get_c();
if ( c >= '0' && c <= '9' )
{
val *= 10;
val += c;
val -= '0';
val *= (uint16_t)10;
val += (uint16_t)c;
val -= (uint16_t)'0';
}
else
break;
Expand Down Expand Up @@ -118,7 +118,7 @@ void m2_parser_set_str(const char *str)
m2_parser_str = str;
}

uint8_t m2_parser_get_cmd_val(char cmd, uint8_t not_found_val)
uint16_t m2_parser_get_cmd_val(char cmd, uint16_t not_found_val)
{
if ( m2_parser_find_cmd(cmd) != 0 )
{
Expand All @@ -132,15 +132,15 @@ uint8_t m2_parser_get_cmd_val(char cmd, uint8_t not_found_val)

/*==============================================================*/

uint8_t m2_opt_get_val_any_default(const char *str, char cmd, uint8_t default_value)
uint16_t m2_opt_get_val_any_default(const char *str, char cmd, uint16_t default_value)
{
if ( str == NULL )
return default_value;
m2_parser_set_str(str);
return m2_parser_get_cmd_val(cmd, default_value);
}

uint8_t m2_opt_get_val_zero_default(const char *str, char cmd)
uint16_t m2_opt_get_val_zero_default(const char *str, char cmd)
{
return m2_opt_get_val_any_default(str, cmd, 0);
}
Expand Down
2 changes: 1 addition & 1 deletion src2/m2el_opt.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ uint16_t m2el_opt(m2_t *m2, const m2el_t *el, uint8_t el_msg, void *arg)
{
if ( el_msg == M2EL_MSG_GET_OPT )
{
return m2_opt_get_val_zero_default(M2EL_OPT_GET_OPT(el), *(char *)arg);
return m2_opt_get_val_zero_default(((m2el_opt_t *)el)->opt, *(char *)arg);
}
return m2el_base(m2, el, el_msg, arg);
}
Expand Down

0 comments on commit cadcfdc

Please sign in to comment.