diff options
| -rw-r--r-- | src/options.cpp | 19 | ||||
| -rw-r--r-- | src/options.h | 1 |
2 files changed, 20 insertions, 0 deletions
diff --git a/src/options.cpp b/src/options.cpp index d9d34fa..d88df3b 100644 --- a/src/options.cpp +++ b/src/options.cpp | |||
| @@ -8,6 +8,7 @@ | |||
| 8 | #include "lexer.h" | 8 | #include "lexer.h" |
| 9 | #include "parser.h" | 9 | #include "parser.h" |
| 10 | 10 | ||
| 11 | #include <bu/streamstack.h> | ||
| 11 | #include <bu/sio.h> | 12 | #include <bu/sio.h> |
| 12 | #include <stdlib.h> | 13 | #include <stdlib.h> |
| 13 | 14 | ||
| @@ -36,6 +37,8 @@ Options::Options( int argc, char *argv[] ) : | |||
| 36 | "use all remaining parameters as the equation (you may wish to quote " | 37 | "use all remaining parameters as the equation (you may wish to quote " |
| 37 | "your equation to prevent special characters from being interpreted by " | 38 | "your equation to prevent special characters from being interpreted by " |
| 38 | "your shell)."); | 39 | "your shell)."); |
| 40 | addOption( Bu::slot(this, &Options::sum), "sum", | ||
| 41 | "Read numbers from standard input and sum them, output the result."); | ||
| 39 | addOption( Bu::slot(this, &Options::version), 'v', "version", | 42 | addOption( Bu::slot(this, &Options::version), 'v', "version", |
| 40 | "Show the version string ('" CLIC_VERSION_STR "')"); | 43 | "Show the version string ('" CLIC_VERSION_STR "')"); |
| 41 | addHelpOption('h', "help", "This help"); | 44 | addHelpOption('h', "help", "This help"); |
| @@ -198,6 +201,22 @@ int Options::execute( Bu::StringArray aArgs ) | |||
| 198 | return aArgs.getSize(); | 201 | return aArgs.getSize(); |
| 199 | } | 202 | } |
| 200 | 203 | ||
| 204 | int Options::sum( Bu::StringArray aArgs ) | ||
| 205 | { | ||
| 206 | Number sum( iScale, iRadix ); | ||
| 207 | while( !Bu::sioRaw.isEos() ) | ||
| 208 | { | ||
| 209 | Bu::String s = Bu::sioRaw.readLine(); | ||
| 210 | if( s.isEmpty() ) | ||
| 211 | break; | ||
| 212 | Number n( s, iScale, iRadix ); | ||
| 213 | sum = sum + n; | ||
| 214 | } | ||
| 215 | Bu::println("%1").arg( sum ); | ||
| 216 | exit( 0 ); | ||
| 217 | return 0; | ||
| 218 | } | ||
| 219 | |||
| 201 | int Options::version( Bu::StringArray aArgs ) | 220 | int Options::version( Bu::StringArray aArgs ) |
| 202 | { | 221 | { |
| 203 | Bu::println( CLIC_VERSION_STR ); | 222 | Bu::println( CLIC_VERSION_STR ); |
diff --git a/src/options.h b/src/options.h index 9afa0ac..f3f59a6 100644 --- a/src/options.h +++ b/src/options.h | |||
| @@ -18,6 +18,7 @@ private: | |||
| 18 | int isPrime( Bu::StringArray aArgs ); | 18 | int isPrime( Bu::StringArray aArgs ); |
| 19 | int convert( Bu::StringArray aArgs ); | 19 | int convert( Bu::StringArray aArgs ); |
| 20 | int execute( Bu::StringArray aArgs ); | 20 | int execute( Bu::StringArray aArgs ); |
| 21 | int sum( Bu::StringArray aArgs ); | ||
| 21 | int version( Bu::StringArray aArgs ); | 22 | int version( Bu::StringArray aArgs ); |
| 22 | 23 | ||
| 23 | int iScale; | 24 | int iScale; |
