} Regs;
/* functions */
-static void eprint(const char *errstr, ...);
-static void *emallocz(unsigned int size);
-static void spawn(const char *arg);
-static void drawsquare(Bool filled, Bool empty, unsigned long col[ColLast]);
-static unsigned long initcolor(const char *colstr);
-static void initfont(const char *fontstr);
-static Bool isoccupied(unsigned int t);
-static unsigned int textnw(const char *text, unsigned int len);
-static void drawtext(const char *text, unsigned long col[ColLast]);
-static void drawbar(void);
-static void initstyle(void);
-static void initbar(void);
-static unsigned int textw(const char *text);
-static void togglebar(const char *arg);
-static void updatebarpos(void);
+
+static void applyrules(Client *c);
+static void arrange(void);
+static void attach(Client *c);
static void attachstack(Client *c);
-static void detachstack(Client *c);
-static void grabbuttons(Client *c, Bool focused);
-static Bool isprotodel(Client *c);
-static void setclientstate(Client *c, long state);
-static int xerrordummy(Display *dsply, XErrorEvent *ee);
static void ban(Client *c);
-static void configure(Client *c);
-static void killclient(const char *arg);
-static void manage(Window w, XWindowAttributes *wa);
-static void resize(Client *c, int x, int y, int w, int h, Bool sizehints);
-static void unban(Client *c);
-static void unmanage(Client *c);
-static void updatesizehints(Client *c);
-static void updatetitle(Client *c);
-static Client *getclient(Window w);
-static void movemouse(Client *c);
-static void resizemouse(Client *c);
static void buttonpress(XEvent *e);
-static void configurerequest(XEvent *e);
+static void cleanup(void);
+static void compileregs(void);
+static void configure(Client *c);
static void configurenotify(XEvent *e);
+static void configurerequest(XEvent *e);
static void destroynotify(XEvent *e);
+static void detach(Client *c);
+static void detachstack(Client *c);
+static void drawbar(void);
+static void drawsquare(Bool filled, Bool empty, unsigned long col[ColLast]);
+static void drawtext(const char *text, unsigned long col[ColLast]);
+static void *emallocz(unsigned int size);
static void enternotify(XEvent *e);
+static void eprint(const char *errstr, ...);
static void expose(XEvent *e);
-static void keypress(XEvent *e);
-static void leavenotify(XEvent *e);
-static void mappingnotify(XEvent *e);
-static void maprequest(XEvent *e);
-static void propertynotify(XEvent *e);
-static void unmapnotify(XEvent *e);
-static unsigned int idxoftag(const char *tag);
static void floating(void); /* default floating layout */
-static void applyrules(Client *c);
-static void compileregs(void);
+static void focus(Client *c);
static void focusnext(const char *arg);
static void focusprev(const char *arg);
+static Client *getclient(Window w);
+static long getstate(Window w);
+static Bool gettextprop(Window w, Atom atom, char *text, unsigned int size);
+static void grabbuttons(Client *c, Bool focused);
+static unsigned int idxoftag(const char *tag);
+static void initbar(void);
+static unsigned long initcolor(const char *colstr);
+static void initfont(const char *fontstr);
static void initlayouts(void);
+static void initstyle(void);
+static Bool isarrange(void (*func)());
static Bool isfloating(void);
+static Bool isoccupied(unsigned int t);
+static Bool isprotodel(Client *c);
static Bool isvisible(Client *c);
+static void keypress(XEvent *e);
+static void killclient(const char *arg);
+static void leavenotify(XEvent *e);
+static void manage(Window w, XWindowAttributes *wa);
+static void mappingnotify(XEvent *e);
+static void maprequest(XEvent *e);
+static void movemouse(Client *c);
+static Client *nexttiled(Client *c);
+static void propertynotify(XEvent *e);
+static void quit(const char *arg);
+static void resize(Client *c, int x, int y, int w, int h, Bool sizehints);
+static void resizemouse(Client *c);
static void restack(void);
+static void scan(void);
+static void setclientstate(Client *c, long state);
static void setlayout(const char *arg);
+static void setmwfact(const char *arg);
+static void setup(void);
+static void spawn(const char *arg);
static void tag(const char *arg);
+static unsigned int textnw(const char *text, unsigned int len);
+static unsigned int textw(const char *text);
+static void tile(void);
+static void togglebar(const char *arg);
static void togglefloating(const char *arg);
static void togglemax(const char *arg);
static void toggletag(const char *arg);
static void toggleview(const char *arg);
+static void unban(Client *c);
+static void unmanage(Client *c);
+static void unmapnotify(XEvent *e);
+static void updatebarpos(void);
+static void updatesizehints(Client *c);
+static void updatetitle(Client *c);
static void view(const char *arg);
-static void cleanup(void);
-static long getstate(Window w);
-static void scan(void);
-static void setup(void);
-static int xerrorstart(Display *dsply, XErrorEvent *ee);
-static Bool gettextprop(Window w, Atom atom, char *text, unsigned int size);
-static void quit(const char *arg);
static int xerror(Display *dpy, XErrorEvent *ee);
-static void arrange(void);
-static void attach(Client *c);
-static void detach(Client *c);
-static void focus(Client *c);
-static Bool isarrange(void (*func)());
-static Client *nexttiled(Client *c);
-static void setmwfact(const char *arg);
-static void tile(void);
+static int xerrordummy(Display *dsply, XErrorEvent *ee);
+static int xerrorstart(Display *dsply, XErrorEvent *ee);
static void zoom(const char *arg);
-#include "config.h"
-
/* variables */
static char stext[256];
-static double mwfact = MWFACT;
+static double mwfact;
static int screen, sx, sy, sw, sh, wax, way, waw, wah;
static int (*xerrorxlib)(Display *, XErrorEvent *);
-static unsigned int bh;
+static unsigned int bh, bpos, ntags;
static unsigned int blw = 0;
-static unsigned int bpos = BARPOS;
static unsigned int ltidx = 0; /* default */
static unsigned int nlayouts = 0;
static unsigned int nrules = 0;
-static unsigned int ntags;
static unsigned int numlockmask = 0;
static void (*handler[LASTEvent]) (XEvent *) = {
[ButtonPress] = buttonpress,
static Window barwin, root;
static Regs *regs = NULL;
+/* configuration, allows nested code to work on above variables */
+#include "config.h"
+
static void
eprint(const char *errstr, ...) {
va_list ap;
eprint("dwm-"VERSION", © 2006-2007 A. R. Garbe, S. van Dijk, J. Salmi, P. Hruby, S. Nagy\n");
else if(argc != 1)
eprint("usage: dwm [-v]\n");
+
+ /* macros from config.h can be used at function level only */
+ mwfact = MWFACT;
+ bpos = BARPOS;
+
setlocale(LC_CTYPE, "");
if(!(dpy = XOpenDisplay(0)))
eprint("dwm: cannot open display\n");