+ return XTextWidth(dc.font.xfont, text, len);
+}
+
+unsigned int
+textw(const char *text) {
+ return textnw(text, strlen(text)) + dc.font.height;
+}
+
+int
+main(int argc, char *argv[]) {
+ int x = 0, y = 0, w = 0;
+ unsigned int i;
+
+ /* command line args */
+ for(i = 1; i < argc; i++)
+ if(!strcmp(argv[i], "-i"))
+ fstrstr = cistrstr;
+ else if(!strcmp(argv[i], "-fn")) {
+ if(++i < argc) font = argv[i];
+ }
+ else if(!strcmp(argv[i], "-nb")) {
+ if(++i < argc) normbg = argv[i];
+ }
+ else if(!strcmp(argv[i], "-nf")) {
+ if(++i < argc) normfg = argv[i];
+ }
+ else if(!strcmp(argv[i], "-p")) {
+ if(++i < argc) prompt = argv[i];
+ }
+ else if(!strcmp(argv[i], "-sb")) {
+ if(++i < argc) selbg = argv[i];
+ }
+ else if(!strcmp(argv[i], "-sf")) {
+ if(++i < argc) selfg = argv[i];
+ }
+ else if(!strcmp(argv[i], "-x")) {
+ if(++i < argc) x = atoi(argv[i]);
+ }
+ else if(!strcmp(argv[i], "-y")) {
+ if(++i < argc) y = atoi(argv[i]);
+ }
+ else if(!strcmp(argv[i], "-w")) {
+ if(++i < argc) w = atoi(argv[i]);
+ }
+ else if(!strcmp(argv[i], "-v"))
+ eprint("dmenu-"VERSION", © 2006-2008 dmenu engineers, see LICENSE for details\n");
+ else
+ eprint("usage: dmenu [-i] [-fn <font>] [-nb <color>] [-nf <color>]\n"
+ " [-p <prompt>] [-sb <color>] [-sf <color>]\n"
+ " [-x <x>] [-y <y>] [-w <w>] [-v]\n");
+ setlocale(LC_CTYPE, "");
+ dpy = XOpenDisplay(0);
+ if(!dpy)
+ eprint("dmenu: cannot open display\n");
+ screen = DefaultScreen(dpy);
+ root = RootWindow(dpy, screen);
+
+ if(isatty(STDIN_FILENO)) {
+ readstdin();
+ running = grabkeyboard();
+ }
+ else { /* prevent keypress loss */
+ running = grabkeyboard();
+ readstdin();
+ }
+
+ setup(x, y, w);
+ drawmenu();
+ XSync(dpy, False);
+ run();
+ cleanup();