From b2cef5ac1e7c3bf18df73c99b80ec7fabd7d1bc0 Mon Sep 17 00:00:00 2001 From: Micke Nordin Date: Fri, 23 Dec 2011 12:59:08 +0100 Subject: [PATCH] clean up and adding support to read from files --- Makefile | 7 ++---- args.cxx | 65 ------------------------------------------------------- args.hpp | 41 ----------------------------------- begin.cxx | 13 ++++++----- begin.hpp | 5 +++-- main.cxx | 13 ++++++----- 6 files changed, 20 insertions(+), 124 deletions(-) delete mode 100644 args.cxx delete mode 100644 args.hpp diff --git a/Makefile b/Makefile index 024fff0..92866db 100644 --- a/Makefile +++ b/Makefile @@ -3,8 +3,8 @@ CFLAGS=-c -g -Wall CCFLAGS=-g -Wall prefix=/usr/local -begin : main.o begin.o args.o - $(CC) -o begin $(CCFLAGS) main.o begin.o args.o +begin : main.o begin.o + $(CC) -o begin $(CCFLAGS) main.o begin.o main.o: main.cxx begin.o $(CC) $(CFLAGS) main.cxx @@ -12,9 +12,6 @@ main.o: main.cxx begin.o begin.o: begin.cxx begin.hpp $(CC) $(CFLAGS) begin.cxx -args.o: args.cxx args.hpp - $(CC) $(CFLAGS) args.cxx - install: begin install -m 0755 begin $(prefix)/bin diff --git a/args.cxx b/args.cxx deleted file mode 100644 index dfe2c4a..0000000 --- a/args.cxx +++ /dev/null @@ -1,65 +0,0 @@ -/* - * args.cxx - * - * Copyright 2011 Micke Nordin - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ - - -#include -#include -#include "args.hpp" -using namespace std; - -args::args(int argc, char **argv) { - iscaseinsence = false; - isregex = false; - havefile = false; - filename = ""; - int c; - - while ((c = getopt (argc, argv, "efi:")) != -1) { - switch (c) { - case 'e': - isregex = true; - break; - case 'f': - filename = optarg; - havefile = true; - break; - case 'i': - iscaseinsence = true; - break; - case '?': - if (optopt == 'f') { - cerr << "Option -" << optopt << " requires an argument.\n"; - } - else if (isprint (optopt)) { - cerr << "Unknown option `-" << optopt << ".\n"; - } - else { - cerr << "Unknown option character `\\x" << optopt << ".\n"; - } -// default: -// abort (); - } - } -} - -void args::print() { - cout << "Case inscensitive: " << iscaseinsence << " Regex: " << isregex << " Have a file: " << havefile << " filename: " << filename; -} diff --git a/args.hpp b/args.hpp deleted file mode 100644 index 0fb2a35..0000000 --- a/args.hpp +++ /dev/null @@ -1,41 +0,0 @@ -/* - * args.cxx - * - * Copyright 2011 Micke Nordin - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ -#ifndef args_h -#define args_h - -#include -#include - -using namespace std; - -class args { - public: - bool iscaseinsence; //-i - bool isregex; // -e - bool havefile; // -f - string filename; // filename - - args(int argc, char **argv); //Konstruktor - void print(); //Skriver ut objektet -}; - -#endif - diff --git a/begin.cxx b/begin.cxx index 9c96382..285693a 100644 --- a/begin.cxx +++ b/begin.cxx @@ -1,7 +1,7 @@ /* * begin.cxx * - * Copyright 2011 Micke Nordin + * Copyright 2011 Micke Nordin * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,20 +23,21 @@ #include #include #include +#include using namespace std; -void begin(string needle) +void begin(string needle, istream &in) { string input; boost::xpressive::sregex regex = boost::xpressive::sregex::compile( needle, boost::xpressive::regex_constants::icase ); - while(cin) { - getline(cin, input); + while(in) { + getline(in, input); if ( boost::xpressive::regex_search(input, regex) ) { cout << input << endl; - while(cin) { - getline(cin,input); + while(in) { + getline(in,input); cout << input << endl; } } diff --git a/begin.hpp b/begin.hpp index 8b56465..f6f4809 100644 --- a/begin.hpp +++ b/begin.hpp @@ -1,7 +1,7 @@ /* * begin.hpp * - * Copyright 2011 Micke Nordin + * Copyright 2011 Micke Nordin * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,10 +22,11 @@ #define begin_h #include #include +#include using namespace std; -void begin(string needle); +void begin(string needle, istream &in); #endif diff --git a/main.cxx b/main.cxx index c333bbe..cfbedce 100644 --- a/main.cxx +++ b/main.cxx @@ -1,7 +1,7 @@ /* * main.cxx * - * Copyright 2011 Micke Nordin + * Copyright 2011 Micke Nordin * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,15 +22,18 @@ #include #include "begin.hpp" -#include "args.hpp" using namespace std; int main(int argc, char **argv) { - args myargs(argc, argv); - if( argc == 2) { - begin(argv[1]); + if( argc == 2) { //assume the argument is a regex and to read from std in + begin(argv[1], cin); + } else if( argc == 3) { //assume the first argument is a regex and second is a filename + ifstream in(argv[2]); + begin(argv[1], in); + } else { + cout << "Usage: begin [filename] \n"; } return 0; }