[commandline] add an eval option
Pass it through to the main equate eval engine and output result.
This commit is contained in:
parent
7989510b4c
commit
98e6b941ef
|
@ -1,11 +1,15 @@
|
||||||
#ifndef _EQUATE_CALC_H
|
#ifndef _EQUATE_CALC_H
|
||||||
#define _EQUATE_CALC_H
|
#define _EQUATE_CALC_H
|
||||||
|
|
||||||
|
#include <Eina.h>
|
||||||
|
|
||||||
/* Functions the gui calls */
|
/* Functions the gui calls */
|
||||||
void equate_clear(void);
|
void equate_clear(void);
|
||||||
int equate_append(char *str);
|
int equate_append(char *str);
|
||||||
double equate_eval(void);
|
double equate_eval(void);
|
||||||
const char *equate_string_get(void);
|
const char *equate_string_get(void);
|
||||||
|
Eina_Bool equate_ok(void);
|
||||||
|
|
||||||
|
|
||||||
/* Fonctions type. */
|
/* Fonctions type. */
|
||||||
typedef double (*func_t) (double);
|
typedef double (*func_t) (double);
|
||||||
|
|
17
src/calc.y
17
src/calc.y
|
@ -53,9 +53,12 @@ exp: NUM { $$ = $1; }
|
||||||
%%
|
%%
|
||||||
#include "calc_lex.c"
|
#include "calc_lex.c"
|
||||||
|
|
||||||
|
static Eina_Bool yyerror_found;
|
||||||
|
|
||||||
void
|
void
|
||||||
yyerror(const char *s)
|
yyerror(const char *s)
|
||||||
{ /* Called by yyparse on error */
|
{ /* Called by yyparse on error */
|
||||||
|
yyerror_found = EINA_TRUE;
|
||||||
printf("%s\n", s);
|
printf("%s\n", s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,6 +71,7 @@ yyresult(void)
|
||||||
void
|
void
|
||||||
equate_clear(void)
|
equate_clear(void)
|
||||||
{
|
{
|
||||||
|
yyerror_found = EINA_FALSE;
|
||||||
yy_scan_string("0");
|
yy_scan_string("0");
|
||||||
yyparse();
|
yyparse();
|
||||||
tmp[0] = '\0';
|
tmp[0] = '\0';
|
||||||
|
@ -103,7 +107,18 @@ equate_eval(void)
|
||||||
tmp[0] = '\0';
|
tmp[0] = '\0';
|
||||||
return yyresult();
|
return yyresult();
|
||||||
}
|
}
|
||||||
const char * equate_string_get(void) { return(tmp); }
|
|
||||||
|
Eina_Bool
|
||||||
|
equate_ok(void)
|
||||||
|
{
|
||||||
|
return !yyerror_found;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
equate_string_get(void)
|
||||||
|
{
|
||||||
|
return(tmp);
|
||||||
|
}
|
||||||
|
|
||||||
struct init {
|
struct init {
|
||||||
char *fname;
|
char *fname;
|
||||||
|
|
|
@ -1264,9 +1264,12 @@ yyreturn:
|
||||||
|
|
||||||
#include "calc_lex.c"
|
#include "calc_lex.c"
|
||||||
|
|
||||||
|
static Eina_Bool yyerror_found;
|
||||||
|
|
||||||
void
|
void
|
||||||
yyerror(const char *s)
|
yyerror(const char *s)
|
||||||
{ /* Called by yyparse on error */
|
{ /* Called by yyparse on error */
|
||||||
|
yyerror_found = EINA_TRUE;
|
||||||
printf("%s\n", s);
|
printf("%s\n", s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1279,6 +1282,7 @@ yyresult(void)
|
||||||
void
|
void
|
||||||
equate_clear(void)
|
equate_clear(void)
|
||||||
{
|
{
|
||||||
|
yyerror_found = EINA_FALSE;
|
||||||
yy_scan_string("0");
|
yy_scan_string("0");
|
||||||
yyparse();
|
yyparse();
|
||||||
tmp[0] = '\0';
|
tmp[0] = '\0';
|
||||||
|
@ -1314,7 +1318,18 @@ equate_eval(void)
|
||||||
tmp[0] = '\0';
|
tmp[0] = '\0';
|
||||||
return yyresult();
|
return yyresult();
|
||||||
}
|
}
|
||||||
const char * equate_string_get(void) { return(tmp); }
|
|
||||||
|
Eina_Bool
|
||||||
|
equate_ok(void)
|
||||||
|
{
|
||||||
|
return !yyerror_found;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *
|
||||||
|
equate_string_get(void)
|
||||||
|
{
|
||||||
|
return(tmp);
|
||||||
|
}
|
||||||
|
|
||||||
struct init {
|
struct init {
|
||||||
char *fname;
|
char *fname;
|
||||||
|
|
15
src/main.c
15
src/main.c
|
@ -305,6 +305,8 @@ static const Ecore_Getopt optdesc = {
|
||||||
"A calculator written with Enlightenment Foundation Libraries",
|
"A calculator written with Enlightenment Foundation Libraries",
|
||||||
EINA_TRUE,
|
EINA_TRUE,
|
||||||
{
|
{
|
||||||
|
ECORE_GETOPT_STORE_DEF_STR('e', "eval", "Evaluate expression and print result",
|
||||||
|
NULL),
|
||||||
// ECORE_GETOPT_LICENSE('L', "license"),
|
// ECORE_GETOPT_LICENSE('L', "license"),
|
||||||
ECORE_GETOPT_COPYRIGHT('C', "copyright"),
|
ECORE_GETOPT_COPYRIGHT('C', "copyright"),
|
||||||
ECORE_GETOPT_VERSION('V', "version"),
|
ECORE_GETOPT_VERSION('V', "version"),
|
||||||
|
@ -318,8 +320,10 @@ elm_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int args;
|
int args;
|
||||||
Eina_Bool quit_option = EINA_FALSE;
|
Eina_Bool quit_option = EINA_FALSE;
|
||||||
|
char *eval_option = NULL;
|
||||||
|
|
||||||
Ecore_Getopt_Value values[] = {
|
Ecore_Getopt_Value values[] = {
|
||||||
|
ECORE_GETOPT_VALUE_STR(eval_option),
|
||||||
// ECORE_GETOPT_VALUE_BOOL(quit_option),
|
// ECORE_GETOPT_VALUE_BOOL(quit_option),
|
||||||
ECORE_GETOPT_VALUE_BOOL(quit_option),
|
ECORE_GETOPT_VALUE_BOOL(quit_option),
|
||||||
ECORE_GETOPT_VALUE_BOOL(quit_option),
|
ECORE_GETOPT_VALUE_BOOL(quit_option),
|
||||||
|
@ -333,6 +337,17 @@ elm_main(int argc, char **argv)
|
||||||
EINA_LOG_CRIT("Could not parse arguments.");
|
EINA_LOG_CRIT("Could not parse arguments.");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
else if (eval_option)
|
||||||
|
{
|
||||||
|
double result;
|
||||||
|
|
||||||
|
equate_append(eval_option);
|
||||||
|
result = equate_eval();
|
||||||
|
if (equate_ok())
|
||||||
|
printf("%.10g\n", result);
|
||||||
|
|
||||||
|
return !equate_ok();
|
||||||
|
}
|
||||||
else if (quit_option)
|
else if (quit_option)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in New Issue