JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
replaced Nmacros with LENGTH(x) macro
authorAnselm R. Garbe <garbeam@gmail.com>
Sun, 28 Oct 2007 11:52:16 +0000 (12:52 +0100)
committerAnselm R. Garbe <garbeam@gmail.com>
Sun, 28 Oct 2007 11:52:16 +0000 (12:52 +0100)
config.def.h
dwm.c

index 2813b3f..1dcd7f9 100644 (file)
 #define SELBGCOLOR             "#0066ff"
 #define SELFGCOLOR             "#ffffff"
 
+/* convenience */
+#define LENGTH(x) (sizeof x / sizeof x[0])
+
 /* tagging */
 const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "www" };
-#define NTAGS (sizeof tags / sizeof tags[0])
-Bool seltags[NTAGS] = {[0] = True};
-Bool prevtags[NTAGS] = {[0] = True};
+Bool seltags[LENGTH(tags)] = {[0] = True};
+Bool prevtags[LENGTH(tags)] = {[0] = True};
 Rule rules[] = {
        /* class:instance:title regex   tags regex      isfloating */
        { "Firefox",                    "www",          False },
@@ -23,7 +25,6 @@ Rule rules[] = {
        { "MPlayer",                    NULL,           True },
        { "Acroread",                   NULL,           True },
 };
-#define NRULES (sizeof rules / sizeof rules[0])
 
 /* layout(s) */
 #define MWFACT                 0.6     /* master width factor [0.1 .. 0.9] */
@@ -33,7 +34,6 @@ Layout layouts[] = {
        { "[]=",                tile }, /* first entry is default */
        { "><>",                floating },
 };
-#define NLAYOUTS (sizeof layouts / sizeof layouts[0])
 
 /* key definitions */
 #define MODKEY                 Mod1Mask
@@ -95,4 +95,3 @@ Key keys[] = { \
        { MODKEY|ControlMask|ShiftMask, XK_9,           toggletag,      tags[8] }, \
        { MODKEY|ShiftMask,             XK_q,           quit,           NULL }, \
 };
-#define NKEYS (sizeof keys / sizeof keys[0])
diff --git a/dwm.c b/dwm.c
index 5bd7221..8933e8e 100644 (file)
--- a/dwm.c
+++ b/dwm.c
@@ -245,10 +245,10 @@ applyrules(Client *c) {
        snprintf(buf, sizeof buf, "%s:%s:%s",
                        ch.res_class ? ch.res_class : "",
                        ch.res_name ? ch.res_name : "", c->name);
-       for(i = 0; i < NRULES; i++)
+       for(i = 0; i < LENGTH(rules); i++)
                if(regs[i].propregex && !regexec(regs[i].propregex, buf, 1, &tmp, 0)) {
                        c->isfloating = rules[i].isfloating;
-                       for(j = 0; regs[i].tagregex && j < NTAGS; j++) {
+                       for(j = 0; regs[i].tagregex && j < LENGTH(tags); j++) {
                                if(!regexec(regs[i].tagregex, tags[j], 1, &tmp, 0)) {
                                        matched = True;
                                        c->tags[j] = True;
@@ -307,7 +307,7 @@ buttonpress(XEvent *e) {
 
        if(barwin == ev->window) {
                x = 0;
-               for(i = 0; i < NTAGS; i++) {
+               for(i = 0; i < LENGTH(tags); i++) {
                        x += textw(tags[i]);
                        if(ev->x < x) {
                                if(ev->button == Button1) {
@@ -400,8 +400,8 @@ compileregs(void) {
 
        if(regs)
                return;
-       regs = emallocz(NRULES * sizeof(Regs));
-       for(i = 0; i < NRULES; i++) {
+       regs = emallocz(LENGTH(rules) * sizeof(Regs));
+       for(i = 0; i < LENGTH(rules); i++) {
                if(rules[i].prop) {
                        reg = emallocz(sizeof(regex_t));
                        if(regcomp(reg, rules[i].prop, REG_EXTENDED))
@@ -530,7 +530,7 @@ drawbar(void) {
        int i, x;
 
        dc.x = dc.y = 0;
-       for(i = 0; i < NTAGS; i++) {
+       for(i = 0; i < LENGTH(tags); i++) {
                dc.w = textw(tags[i]);
                if(seltags[i]) {
                        drawtext(tags[i], dc.sel);
@@ -841,8 +841,8 @@ unsigned int
 idxoftag(const char *tag) {
        unsigned int i;
 
-       for(i = 0; (i < NTAGS) && (tags[i] != tag); i++);
-       return (i < NTAGS) ? i : 0;
+       for(i = 0; (i < LENGTH(tags)) && (tags[i] != tag); i++);
+       return (i < LENGTH(tags)) ? i : 0;
 }
 
 void
@@ -916,7 +916,7 @@ Bool
 isvisible(Client *c) {
        unsigned int i;
 
-       for(i = 0; i < NTAGS; i++)
+       for(i = 0; i < LENGTH(tags); i++)
                if(c->tags[i] && seltags[i])
                        return True;
        return False;
@@ -932,7 +932,7 @@ keypress(XEvent *e) {
 
        if(!e) { /* grabkeys */
                XUngrabKey(dpy, AnyKey, AnyModifier, root);
-               for(i = 0; i < NKEYS; i++) {
+               for(i = 0; i < LENGTH(keys); i++) {
                        code = XKeysymToKeycode(dpy, keys[i].keysym);
                        XGrabKey(dpy, code, keys[i].mod, root, True,
                                        GrabModeAsync, GrabModeAsync);
@@ -947,7 +947,7 @@ keypress(XEvent *e) {
        }
        ev = &e->xkey;
        keysym = XKeycodeToKeysym(dpy, (KeyCode)ev->keycode, 0);
-       for(i = 0; i < NKEYS; i++)
+       for(i = 0; i < LENGTH(keys); i++)
                if(keysym == keys[i].keysym
                && CLEANMASK(keys[i].mod) == CLEANMASK(ev->state))
                {
@@ -1366,14 +1366,14 @@ setlayout(const char *arg) {
        unsigned int i;
 
        if(!arg) {
-               if(++layout == &layouts[NLAYOUTS])
+               if(++layout == &layouts[LENGTH(layouts)])
                        layout = &layouts[0];
        }
        else {
-               for(i = 0; i < NLAYOUTS; i++)
+               for(i = 0; i < LENGTH(layouts); i++)
                        if(!strcmp(arg, layouts[i].symbol))
                                break;
-               if(i == NLAYOUTS)
+               if(i == LENGTH(layouts))
                        return;
                layout = &layouts[i];
        }
@@ -1469,7 +1469,7 @@ setup(void) {
        /* init layouts */
        mwfact = MWFACT;
        layout = &layouts[0];
-       for(blw = i = 0; i < NLAYOUTS; i++) {
+       for(blw = i = 0; i < LENGTH(layouts); i++) {
                j = textw(layouts[i].symbol);
                if(j > blw)
                        blw = j;
@@ -1527,7 +1527,7 @@ tag(const char *arg) {
 
        if(!sel)
                return;
-       for(i = 0; i < NTAGS; i++)
+       for(i = 0; i < LENGTH(tags); i++)
                sel->tags[i] = (NULL == arg);
        sel->tags[idxoftag(arg)] = True;
        arrange();
@@ -1649,8 +1649,8 @@ toggletag(const char *arg) {
                return;
        i = idxoftag(arg);
        sel->tags[i] = !sel->tags[i];
-       for(j = 0; j < NTAGS && !sel->tags[j]; j++);
-       if(j == NTAGS)
+       for(j = 0; j < LENGTH(tags) && !sel->tags[j]; j++);
+       if(j == LENGTH(tags))
                sel->tags[i] = True; /* at least one tag must be enabled */
        arrange();
 }
@@ -1661,8 +1661,8 @@ toggleview(const char *arg) {
 
        i = idxoftag(arg);
        seltags[i] = !seltags[i];
-       for(j = 0; j < NTAGS && !seltags[j]; j++);
-       if(j == NTAGS)
+       for(j = 0; j < LENGTH(tags) && !seltags[j]; j++);
+       if(j == LENGTH(tags))
                seltags[i] = True; /* at least one tag must be viewed */
        arrange();
 }
@@ -1828,7 +1828,7 @@ view(const char *arg) {
        unsigned int i;
 
        memcpy(prevtags, seltags, sizeof seltags);
-       for(i = 0; i < NTAGS; i++)
+       for(i = 0; i < LENGTH(tags); i++)
                seltags[i] = (NULL == arg);
        seltags[idxoftag(arg)] = True;
        arrange();