From 248639a7aaa1c2330d9c9c20d8ae0f8c6841e77d Mon Sep 17 00:00:00 2001
From: fluxgen <fluxgen>
Date: Thu, 5 Dec 2002 00:07:39 +0000
Subject: indentation and minor fbtk updates

---
 util/fbrun/FbRun.cc | 321 +++++++++++++++++++++++-----------------------------
 util/fbrun/FbRun.hh | 112 +++++++++---------
 util/fbrun/main.cc  | 219 +++++++++++++++++------------------
 3 files changed, 299 insertions(+), 353 deletions(-)

diff --git a/util/fbrun/FbRun.cc b/util/fbrun/FbRun.cc
index 1dc5ae7..0ce297a 100644
--- a/util/fbrun/FbRun.cc
+++ b/util/fbrun/FbRun.cc
@@ -19,12 +19,13 @@
 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 // DEALINGS IN THE SOFTWARE.
 
-// $Id: FbRun.cc,v 1.8 2002/11/27 21:56:56 fluxgen Exp $
+// $Id: FbRun.cc,v 1.9 2002/12/05 00:07:39 fluxgen Exp $
 
 #include "FbRun.hh"
 
 #include "App.hh"
 #include "EventManager.hh"
+#include "Color.hh"
 
 #include <X11/Xlib.h>
 #include <X11/keysym.h>
@@ -37,248 +38,208 @@
 
 using namespace std;
 FbRun::FbRun(int x, int y, size_t width):
-m_font("fixed"),
-m_win(None),
-m_display(FbTk::App::instance()->display()),
-m_bevel(4),
-m_gc(DefaultGC(m_display, DefaultScreen(m_display))),
-m_end(false),
-m_current_history_item(0) {
-	createWindow(x, y, width + m_bevel, m_font.height());
+    m_font("fixed"),
+    m_win((int)0, x, y,  //screen num and position
+          width + m_bevel, m_font.height(),  // size
+          KeyPressMask|ExposureMask), // eventmask
+    m_display(FbTk::App::instance()->display()),
+    m_bevel(4),
+    m_gc(DefaultGC(m_display, DefaultScreen(m_display))),
+    m_end(false),
+    m_current_history_item(0) {
+    // setting nomaximize in local resize
+    resize(width, m_font.height());
+    FbTk::EventManager::instance()->registerEventHandler(*this, m_win.window());
 }
 
 FbRun::~FbRun() {
-	hide();
-	FbTk::EventManager::instance()->unregisterEventHandler(m_win);
-	XDestroyWindow(m_display, m_win);
+    hide();
+    FbTk::EventManager::instance()->unregisterEventHandler(m_win.window());
 }
 
 void FbRun::run(const std::string &command) {
-	//fork and execute program
-	if (!fork()) {
-		setsid();
-		execl("/bin/sh", "/bin/sh", "-c", command.c_str(), 0);
-		exit(0); //exit fork
-	}
-
-	hide(); // hide gui
+    //fork and execute program
+    if (!fork()) {
+        setsid();
+        execl("/bin/sh", "/bin/sh", "-c", command.c_str(), 0);
+        exit(0); //exit child
+    }
+
+    hide(); // hide gui
 	
-	// save command history to file
-	if (m_runtext.size() != 0) { // no need to save empty command
-		// open file in append mode
-		ofstream outfile(m_history_file.c_str(), ios::app);
-		if (outfile)
-			outfile<<m_runtext<<endl;
-		else 
-			cerr<<"FbRun Warning: Can't write command history to file: "<<m_history_file<<endl;
-	}
-	FbTk::App::instance()->end(); // end application
-	m_end = true; // mark end of processing
+    // save command history to file
+    if (m_runtext.size() != 0) { // no need to save empty command
+        // open file in append mode
+        ofstream outfile(m_history_file.c_str(), ios::app);
+        if (outfile)
+            outfile<<m_runtext<<endl;
+        else 
+            cerr<<"FbRun Warning: Can't write command history to file: "<<m_history_file<<endl;
+    }
+    FbTk::App::instance()->end(); // end application
+    m_end = true; // mark end of processing
 }
 
 bool FbRun::loadHistory(const char *filename) {
-	if (filename == 0)
-		return false;
-	ifstream infile(filename);
-	if (!infile) {
-		//even though we fail to load file, we should try save to it
-		m_history_file = filename;
-		return false;
-	}
-	// clear old history and load new one from file
-	m_history.clear();
-	// each line is a command
-	string line;
-	while (!infile.eof()) {
-		getline(infile, line);
-		if (line.size()) // don't add empty lines
-			m_history.push_back(line);
-	}
-	// set no current histor to display
-	m_current_history_item = m_history.size();
-	// set history file
-	m_history_file = filename;
-	return true;
+    if (filename == 0)
+        return false;
+    ifstream infile(filename);
+    if (!infile) {
+        //even though we fail to load file, we should try save to it
+        m_history_file = filename;
+        return false;
+    }
+    // clear old history and load new one from file
+    m_history.clear();
+    // each line is a command
+    string line;
+    while (!infile.eof()) {
+        getline(infile, line);
+        if (line.size()) // don't add empty lines
+            m_history.push_back(line);
+    }
+    // set no current histor to display
+    m_current_history_item = m_history.size();
+    // set history file
+    m_history_file = filename;
+    return true;
 }
 
 bool FbRun::loadFont(const string &fontname) {
-	if (!m_font.load(fontname.c_str()))
-		return false;
+    if (!m_font.load(fontname.c_str()))
+        return false;
 
-	// resize to fit new font height
-	resize(m_width, m_font.height() + m_bevel);
-	return true;
+    // resize to fit new font height
+    resize(m_win.width(), m_font.height() + m_bevel);
+    return true;
 }
 
-void FbRun::setForeground(const XColor &color) {
-	XSetForeground(m_display, m_gc, color.pixel);
-	redrawLabel();
+void FbRun::setForeground(const FbTk::Color &color) {
+    XSetForeground(m_display, m_gc, color.pixel());
+    redrawLabel();
 }
 
-void FbRun::setBackground(const XColor &color) {
-	XSetWindowBackground(m_display, m_win, color.pixel);
-	redrawLabel();
+void FbRun::setBackground(const FbTk::Color &color) {
+    m_win.setBackgroundColor(color);
+    redrawLabel();
 }
 
 
 void FbRun::setText(const string &text) {
-	m_runtext = text;
-	redrawLabel();
+    m_runtext = text;
+    redrawLabel();
 }
 
 void FbRun::setTitle(const string &title) {
-	assert(m_win);
-	XStoreName(m_display, m_win, const_cast<char *>(title.c_str()));	
+    m_win.setName(title.c_str());
 }
 
 void FbRun::move(int x, int y) {
-	XMoveWindow(m_display, m_win, x, y);
+    m_win.move(x, y);
 }
 
 void FbRun::resize(size_t width, size_t height) {
-	assert(m_win);
-	XResizeWindow(m_display, m_win, width, height);
-	m_width = width;
-	m_height = height;
-	setNoMaximize();
+    m_win.resize(width, height);	
+    setNoMaximize();
 }
 
 void FbRun::show() {
-	assert(m_win);
-	XMapWindow(m_display, m_win);
+    m_win.show();
 }
 
 void FbRun::hide() {
-	assert(m_win);
-	XUnmapWindow(m_display, m_win);
+    m_win.hide();
 }
 
 void FbRun::redrawLabel() {
-	assert(m_win);
-
-	XClearWindow(m_display, m_win);
-	drawString(m_bevel/2, m_font.ascent() + m_bevel/2,
-		m_runtext.c_str(), m_runtext.size());
+    m_win.clear();
+    drawString(m_bevel/2, m_font.ascent() + m_bevel/2,
+               m_runtext.c_str(), m_runtext.size());
 
 }
 
 void FbRun::drawString(int x, int y,
-	const char *text, size_t len) {
-	assert(m_win);
-	assert(m_gc);
-	// check right boundary
-	// and adjust text drawing
-	size_t text_width = m_font.textWidth(text, len);
-	size_t startpos = 0;
-	if (text_width > m_width) {
-		for (; startpos < len; ++startpos) {
-			if (m_font.textWidth(text+startpos, len-startpos) < m_width)
-				break;
-		}		
-	}
-
-	m_font.drawText(m_win, DefaultScreen(m_display), m_gc, text + startpos, len-startpos, x, y);
-}
-
-
-void FbRun::createWindow(int x, int y, size_t width, size_t height) {
-	m_win = XCreateSimpleWindow(m_display, // display
-		DefaultRootWindow(m_display), // parent windows
-		x, y,
-		width, height,
-		1,  // border_width
-		0,  // border
-		WhitePixel(m_display, DefaultScreen(m_display))); // background
-
-	if (m_win == None)
-		throw string("Failed to create FbRun window!");
-
-	XSelectInput(m_display, m_win, KeyPressMask|ExposureMask);
-	
-	FbTk::EventManager::instance()->registerEventHandler(*this, m_win);
-	
-	setNoMaximize();
+                       const char *text, size_t len) {
+    assert(m_gc);
 
-	m_width = width;
-	m_height = height;
+    // check right boundary and adjust text drawing
+    size_t text_width = m_font.textWidth(text, len);
+    size_t startpos = 0;
+    if (text_width > m_win.width()) {
+        for (; startpos < len; ++startpos) {
+            if (m_font.textWidth(text+startpos, len-startpos) < m_win.width())
+                break;
+        }		
+    }
 
+    m_font.drawText(m_win.window(), DefaultScreen(m_display), m_gc, text + startpos, len-startpos, x, y);
 }
 
 void FbRun::keyPressEvent(XKeyEvent &ke) {
-	KeySym ks;
-	char keychar[1];
-	XLookupString(&ke, keychar, 1, &ks, 0);
-	if (ks == XK_Escape) {
-		m_end = true;
-		hide();
-		return; // no more processing
-	} else if (ks == XK_Return) {
-		run(m_runtext);
-		m_runtext = ""; // clear text
-	} else if (ks == XK_BackSpace) {
-		if (m_runtext.size() != 0) { // we can't erase what we don't have ;)
-			m_runtext.erase(m_runtext.size()-1);
-			redrawLabel();
-		}
-	} else if (! IsModifierKey(ks) && !IsCursorKey(ks)) {
-		m_runtext+=keychar[0]; // append character
-		redrawLabel(); 
-	} else if (IsCursorKey(ks)) {
+    KeySym ks;
+    char keychar[1];
+    XLookupString(&ke, keychar, 1, &ks, 0);
+    if (ks == XK_Escape) {
+        m_end = true;
+        hide();
+        FbTk::App::instance()->end(); // end program
+        return; // no more processing
+    } else if (ks == XK_Return) {
+        run(m_runtext);
+        m_runtext = ""; // clear text
+    } else if (ks == XK_BackSpace) {
+        if (m_runtext.size() != 0) { // we can't erase what we don't have ;)
+            m_runtext.erase(m_runtext.size()-1);
+            redrawLabel();
+        }
+    } else if (! IsModifierKey(ks) && !IsCursorKey(ks)) {
+        m_runtext+=keychar[0]; // append character
+        redrawLabel(); 
+    } else if (IsCursorKey(ks)) {
 		
-		switch (ks) {
-		case XK_Up:
-			prevHistoryItem();
-		break;
-		case XK_Down:
-			nextHistoryItem();
-		break;
-		}
-		redrawLabel();
-	}
+        switch (ks) {
+        case XK_Up:
+            prevHistoryItem();
+            break;
+        case XK_Down:
+            nextHistoryItem();
+            break;
+        }
+        redrawLabel();
+    }
 }
 
 void FbRun::exposeEvent(XExposeEvent &ev) {
-	redrawLabel();
+    redrawLabel();
 }
 
-void FbRun::getSize(size_t &width, size_t &height) {
-	XWindowAttributes attr;
-	XGetWindowAttributes(m_display, m_win, &attr);
-	width = attr.width;
-	height = attr.height;
-}
 
 void FbRun::setNoMaximize() {
-
-	size_t width, height;
-
-	getSize(width, height);
-
-	// we don't need to maximize this window
-	XSizeHints sh;
-	sh.flags = PMaxSize | PMinSize;
-	sh.max_width = width;
-	sh.max_height = height;
-	sh.min_width = width;
-	sh.min_height = height;
-	XSetWMNormalHints(m_display, m_win, &sh);
+    // we don't need to maximize this window
+    XSizeHints sh;
+    sh.flags = PMaxSize | PMinSize;
+    sh.max_width = m_win.width();
+    sh.max_height = m_win.height();
+    sh.min_width = m_win.width();
+    sh.min_height = m_win.height();
+    XSetWMNormalHints(m_display, m_win.window(), &sh);
 }
 
 void FbRun::prevHistoryItem() {
 
-	if (m_current_history_item > 0 && m_history.size() > 0)
-		m_current_history_item--;
-	if (m_current_history_item < m_history.size())
-		m_runtext = m_history[m_current_history_item];
+    if (m_current_history_item > 0 && m_history.size() > 0)
+        m_current_history_item--;
+    if (m_current_history_item < m_history.size())
+        m_runtext = m_history[m_current_history_item];
 }
 
 void FbRun::nextHistoryItem() {
-	m_current_history_item++;
-	if (m_current_history_item >= m_history.size()) {
-		m_current_history_item = m_history.size();
-		m_runtext = "";
-		return;
-	} else 
-		m_runtext = m_history[m_current_history_item];
+    m_current_history_item++;
+    if (m_current_history_item >= m_history.size()) {
+        m_current_history_item = m_history.size();
+        m_runtext = "";
+        return;
+    } else 
+        m_runtext = m_history[m_current_history_item];
 
 }
diff --git a/util/fbrun/FbRun.hh b/util/fbrun/FbRun.hh
index 41e5925..a577e45 100644
--- a/util/fbrun/FbRun.hh
+++ b/util/fbrun/FbRun.hh
@@ -19,79 +19,79 @@
 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 // DEALINGS IN THE SOFTWARE.
 
-// $Id: FbRun.hh,v 1.7 2002/11/27 21:56:02 fluxgen Exp $
+// $Id: FbRun.hh,v 1.8 2002/12/05 00:07:38 fluxgen Exp $
 
 #ifndef FBRUN_HH
 #define FBRUN_HH
 
 #include "EventHandler.hh"
 #include "Font.hh"
+#include "FbWindow.hh"
 
 #include <string>
 #include <vector>
 
 /**
-	Creates and managed a run window
+   Creates and managed a run window
 */
 class FbRun: public FbTk::EventHandler {
 public:
-	FbRun(int x = 0, int y = 0, size_t width = 200);
-	~FbRun();
-	void handleEvent(XEvent * const ev);
-	void setText(const std::string &text);
-	void setTitle(const std::string &title);
-	void move(int x, int y);
-	void resize(size_t width, size_t height);
-	size_t height() const { return m_height; }
-	size_t width() const { return m_width; }
-	/// hide window
-	void hide();
-	/// show window
-	void show();
-	/// load and reconfigure for new font
-	bool loadFont(const std::string &fontname);
-	void setForeground(const XColor &color);
-	void setBackground(const XColor &color);
-	void setAntialias(bool val) { m_font.setAntialias(val); }
-	const FbTk::Font &font() const { return m_font; }
-	/// execute command and exit
-	void run(const std::string &execstring);
-	/// is this application done?
-	bool end() const { return m_end; }
-	/**
-	  loads history file.
-	  @return true on success, else false
-	*/
-	bool loadHistory(const char *filename);
-	/**
-		@name events
-	*/
-	///@{
-	void exposeEvent(XExposeEvent &ev);
-	void keyPressEvent(XKeyEvent &ev);
-	///@}
+    FbRun(int x = 0, int y = 0, size_t width = 200);
+    ~FbRun();
+    void handleEvent(XEvent * const ev);
+    void setText(const std::string &text);
+    void setTitle(const std::string &title);
+    void move(int x, int y);
+    void resize(size_t width, size_t height);
+    size_t height() const { return m_win.height(); }
+    size_t width() const { return m_win.width(); }
+    /// hide window
+    void hide();
+    /// show window
+    void show();
+    /// load and reconfigure for new font
+    bool loadFont(const std::string &fontname);
+    void setForeground(const FbTk::Color &color);
+    void setBackground(const FbTk::Color &color);
+    void setAntialias(bool val) { m_font.setAntialias(val); }
+    const FbTk::Font &font() const { return m_font; }
+    /// execute command and exit
+    void run(const std::string &execstring);
+    /// is this application done?
+    bool end() const { return m_end; }
+    /**
+       loads history file.
+       @return true on success, else false
+    */
+    bool loadHistory(const char *filename);
+    /**
+       @name events
+    */
+    ///@{
+    void exposeEvent(XExposeEvent &ev);
+    void keyPressEvent(XKeyEvent &ev);
+    ///@}
 	
 private:
-	void nextHistoryItem();
-	void prevHistoryItem();
-	void drawString(int x, int y, const char *text, size_t len);
-	void getSize(size_t &width, size_t &height);
-	void createWindow(int x, int y, size_t width, size_t height);	
-	void redrawLabel();	
-	/// set no maximizable for this window
-	void setNoMaximize();
+    void nextHistoryItem();
+    void prevHistoryItem();
+    void drawString(int x, int y, const char *text, size_t len);
+    void getSize(size_t &width, size_t &height);
+    void createWindow(int x, int y, size_t width, size_t height);	
+    void redrawLabel();	
+    /// set no maximizable for this window
+    void setNoMaximize();
 
-	FbTk::Font m_font; ///< font used to draw command text
-	Window m_win;  ///< toplevel window 
-	Display *m_display;  ///< display connection
-	std::string m_runtext; ///< command to execute
-	size_t m_width, m_height; ///< size of window
-	int m_bevel; ///< distance to window edge from font in pixels
-	GC m_gc; ///< graphic context
-	bool m_end; ///< marks when this object is done
-	std::vector<std::string> m_history; ///< history list of commands
-	size_t m_current_history_item; ///< holds current position in command history
-	std::string m_history_file; ///< holds filename for command history file
+    FbTk::Font m_font; ///< font used to draw command text
+    FbTk::FbWindow m_win;  ///< toplevel window 
+    Display *m_display;  ///< display connection
+    std::string m_runtext; ///< command to execute
+    int m_bevel; ///< distance to window edge from font in pixels
+    GC m_gc; ///< graphic context
+    bool m_end; ///< marks when this object is done
+    std::vector<std::string> m_history; ///< history list of commands
+    size_t m_current_history_item; ///< holds current position in command history
+    std::string m_history_file; ///< holds filename for command history file
 };
 
 #endif // FBRUN_HH
diff --git a/util/fbrun/main.cc b/util/fbrun/main.cc
index 9c73aa5..ff9402c 100644
--- a/util/fbrun/main.cc
+++ b/util/fbrun/main.cc
@@ -19,11 +19,12 @@
 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 // DEALINGS IN THE SOFTWARE.
 
-// $Id: main.cc,v 1.7 2002/11/27 21:54:11 fluxgen Exp $
+// $Id: main.cc,v 1.8 2002/12/05 00:07:39 fluxgen Exp $
 
 #include "FbRun.hh"
 #include "App.hh"
 #include "StringUtil.hh"
+#include "Color.hh"
 
 #include <string>
 #include <iostream>
@@ -31,134 +32,118 @@
 using namespace std;
 
 void showUsage(const char *progname) {
-	cerr<<"fbrun 1.1.2 : (c) 2002 Henrik Kinnunen"<<endl;
-	cerr<<"Usage: "<<
-		progname<<" [arguments]"<<endl<<
-		"Arguments: "<<endl<<
-		"   -font [font name]           Text font"<<endl<<
-		"   -title [title name]         Set title"<<endl<<
-		"   -text [text]                Text input"<<endl<<
-		"   -w [width]                  Window width in pixels"<<endl<<
-		"   -h [height]                 Window height in pixels"<<endl<<
-		"   -display [display string]   Display name"<<endl<<
-		"   -pos [x] [y]                Window position in pixels"<<endl<<
-		"   -fg [color name]            Foreground text color"<<endl<<
-		"   -bg [color name]            Background color"<<endl<<
-		"   -a                          Antialias"<<endl<<
-		"   -hf [history file]          History file to load (default ~/.fluxbox/history)"<<endl<<
-		"   -help                       Show this help"<<endl<<endl<<
-		"Example: fbrun -fg black -bg white -text xterm -title \"run xterm\""<<endl;
+    cerr<<"fbrun 1.1.2 : (c) 2002 Henrik Kinnunen"<<endl;
+    cerr<<"Usage: "<<
+        progname<<" [arguments]"<<endl<<
+        "Arguments: "<<endl<<
+        "   -font [font name]           Text font"<<endl<<
+        "   -title [title name]         Set title"<<endl<<
+        "   -text [text]                Text input"<<endl<<
+        "   -w [width]                  Window width in pixels"<<endl<<
+        "   -h [height]                 Window height in pixels"<<endl<<
+        "   -display [display string]   Display name"<<endl<<
+        "   -pos [x] [y]                Window position in pixels"<<endl<<
+        "   -fg [color name]            Foreground text color"<<endl<<
+        "   -bg [color name]            Background color"<<endl<<
+        "   -a                          Antialias"<<endl<<
+        "   -hf [history file]          History file to load (default ~/.fluxbox/fbrun_history)"<<endl<<
+        "   -help                       Show this help"<<endl<<endl<<
+        "Example: fbrun -fg black -bg white -text xterm -title \"run xterm\""<<endl;
 }
 
 int main(int argc, char **argv) {
-	int x = 0, y = 0; // default pos of window
-	size_t width = 200, height = 32; // default size of window
-	bool set_height = false, set_width=false; // use height/width of font by default
-	bool set_pos = false; // set position
-	bool antialias = false; // antialias text
-	string fontname; // font name
-	string title("Run program"); // default title
-	string text;         // default input text
-	string foreground("black");   // text color
-	string background("white");   // text background color
-	string display_name; // name of the display connection
-	string history_file("~/.fluxbox/fbrun_history"); // command history file
-	// parse arguments
-	for (int i=1; i<argc; i++) {
-		if (strcmp(argv[i], "-font") == 0 && i+1 < argc) {
-			fontname = argv[++i];
-		} else if (strcmp(argv[i], "-title") == 0 && i+1 < argc) {
-			title = argv[++i];
-		} else if (strcmp(argv[i], "-text") == 0 && i+1 < argc) {
-			text = argv[++i];
-		} else if (strcmp(argv[i], "-w") == 0 && i+1 < argc) {
-			width = atoi(argv[++i]);			
-			set_width = true;
-		} else if (strcmp(argv[i], "-h") == 0 && i+1 < argc) {
-			height = atoi(argv[++i]);
-			set_height = true; // mark true else the height of font will be used
-		} else if (strcmp(argv[i], "-display") == 0 && i+1 < argc) {
-			display_name = argv[++i];
-		} else if (strcmp(argv[i], "-pos") == 0 && i+2 < argc) {
-			x = atoi(argv[++i]);
-			y = atoi(argv[++i]);
-			set_pos = true;
-		} else if (strcmp(argv[i], "-fg") == 0 && i+1 < argc) {
-			foreground = argv[++i];
-		} else if (strcmp(argv[i], "-bg") == 0 && i+1 < argc) {
-			background = argv[++i];
-		} else if (strcmp(argv[i], "-a") == 0) {
-			antialias = true;
-		} else if (strcmp(argv[i], "-hf") == 0 && i+1 < argc) {
-			history_file = argv[++i];
-		} else if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "-help") == 0) {
-			showUsage(argv[0]);
-			exit(0);
-		} else {
-			cerr<<"Invalid argument: "<<argv[i]<<endl;
-			showUsage(argv[0]);
-			exit(0);
-		}
+    int x = 0, y = 0; // default pos of window
+    size_t width = 200, height = 32; // default size of window
+    bool set_height = false, set_width=false; // use height/width of font by default
+    bool set_pos = false; // set position
+    bool antialias = false; // antialias text
+    string fontname; // font name
+    string title("Run program"); // default title
+    string text;         // default input text
+    string foreground("black");   // text color
+    string background("white");   // text background color
+    string display_name; // name of the display connection
+    string history_file("~/.fluxbox/fbrun_history"); // command history file
+    // parse arguments
+    for (int i=1; i<argc; i++) {
+        if (strcmp(argv[i], "-font") == 0 && i+1 < argc) {
+            fontname = argv[++i];
+        } else if (strcmp(argv[i], "-title") == 0 && i+1 < argc) {
+            title = argv[++i];
+        } else if (strcmp(argv[i], "-text") == 0 && i+1 < argc) {
+            text = argv[++i];
+        } else if (strcmp(argv[i], "-w") == 0 && i+1 < argc) {
+            width = atoi(argv[++i]);			
+            set_width = true;
+        } else if (strcmp(argv[i], "-h") == 0 && i+1 < argc) {
+            height = atoi(argv[++i]);
+            set_height = true; // mark true else the height of font will be used
+        } else if (strcmp(argv[i], "-display") == 0 && i+1 < argc) {
+            display_name = argv[++i];
+        } else if (strcmp(argv[i], "-pos") == 0 && i+2 < argc) {
+            x = atoi(argv[++i]);
+            y = atoi(argv[++i]);
+            set_pos = true;
+        } else if (strcmp(argv[i], "-fg") == 0 && i+1 < argc) {
+            foreground = argv[++i];
+        } else if (strcmp(argv[i], "-bg") == 0 && i+1 < argc) {
+            background = argv[++i];
+        } else if (strcmp(argv[i], "-a") == 0) {
+            antialias = true;
+        } else if (strcmp(argv[i], "-hf") == 0 && i+1 < argc) {
+            history_file = argv[++i];
+        } else if (strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "-help") == 0) {
+            showUsage(argv[0]);
+            exit(0);
+        } else {
+            cerr<<"Invalid argument: "<<argv[i]<<endl;
+            showUsage(argv[0]);
+            exit(0);
+        }
 
-	}
+    }
 
-	try {
+    try {
 		
-		FbTk::App application(display_name.c_str());
-		Display *disp = application.display();
-				
-		FbRun fbrun;
+        FbTk::App application(display_name.c_str());
+        FbRun fbrun;
 
-		if (fontname.size() != 0) {
-			if (!fbrun.loadFont(fontname.c_str())) {
-				cerr<<"Failed to load font: "<<fontname<<endl;
-				cerr<<"Falling back to \"fixed\""<<endl;
-			}
-		}
+        if (fontname.size() != 0) {
+            if (!fbrun.loadFont(fontname.c_str())) {
+                cerr<<"Failed to load font: "<<fontname<<endl;
+                cerr<<"Falling back to \"fixed\""<<endl;
+            }
+        }
 
-		// get color
-		XColor xc_foreground, xc_background;
-		if (XParseColor(disp, DefaultColormap(disp, DefaultScreen(disp)),
-			foreground.c_str(),
-			&xc_foreground) == 0) {
-			cerr<<"Faild to lookup color: "<<foreground<<endl;
-		}
-
-		if (XParseColor(disp, DefaultColormap(disp, DefaultScreen(disp)),
-			background.c_str(),
-			&xc_background) == 0) {
-			cerr<<"Faild to lookup color: "<<background<<endl;
-		}
-
-		XAllocColor(disp, DefaultColormap(disp, DefaultScreen(disp)),
-			&xc_foreground);
-		XAllocColor(disp, DefaultColormap(disp, DefaultScreen(disp)),
-			&xc_background);
+        // get color
+        XColor xc_foreground, xc_background;
+        FbTk::Color fg_color(foreground.c_str(), 0);
+        FbTk::Color bg_color(background.c_str(), 0);
 		
-		fbrun.setForeground(xc_foreground);
-		fbrun.setBackground(xc_background);
+        fbrun.setForeground(fg_color);
+        fbrun.setBackground(bg_color);
 
-		if (set_height)
-			fbrun.resize(fbrun.width(), height);
-		if (set_width)
-			fbrun.resize(width, fbrun.height());
-		if (antialias)
-			fbrun.setAntialias(antialias);
-		// expand and load command history
-		string expanded_filename = StringUtil::expandFilename(history_file);
-		if (!fbrun.loadHistory(expanded_filename.c_str()))
-			cerr<<"FbRun Warning: Failed to load history file: "<<expanded_filename<<endl;
+        if (set_height)
+            fbrun.resize(fbrun.width(), height);
+        if (set_width)
+            fbrun.resize(width, fbrun.height());
+        if (antialias)
+            fbrun.setAntialias(antialias);
+        // expand and load command history
+        string expanded_filename = StringUtil::expandFilename(history_file);
+        if (!fbrun.loadHistory(expanded_filename.c_str()))
+            cerr<<"FbRun Warning: Failed to load history file: "<<expanded_filename<<endl;
 
-		fbrun.setTitle(title);
-		fbrun.setText(text);
-		fbrun.show();
+        fbrun.setTitle(title);
+        fbrun.setText(text);
+        fbrun.show();
 		
-		if (set_pos)
-			fbrun.move(x, y);
+        if (set_pos)
+            fbrun.move(x, y);
 		
-		application.eventLoop();
+        application.eventLoop();
 
-	} catch (string errstr) {
-		cerr<<"Error: "<<errstr<<endl;
-	}
+    } catch (string errstr) {
+        cerr<<"Error: "<<errstr<<endl;
+    }
 }
-- 
cgit v0.11.2