sorting functions alphabetic - ttabbed - Simple tabbing application for X11.
       
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 0ad9b7f35c4095dbf660eea549aec2d8f184816d
 (DIR) parent 037729224a42ea5b1133c47c6f860c6c0946e34d
 (HTM) Author: Enno Boland (tox) <tox@s01.de>
       Date:   Wed, 23 Sep 2009 10:33:10 +0200
       
       sorting functions alphabetic
       Diffstat:
         tabbed.c                            |     142 ++++++++++++++++---------------
       
       1 file changed, 74 insertions(+), 68 deletions(-)
       ---
 (DIR) diff --git a/tabbed.c b/tabbed.c
       @@ -97,27 +97,29 @@ static void destroynotify(XEvent *e);
        static void die(const char *errstr, ...);
        static void drawbar();
        static void drawtext(const char *text, unsigned long col[ColLast]);
       +static void *emallocz(size_t size);
        static void enternotify(XEvent *e);
        static void expose(XEvent *e);
        static void focus(Client *c);
        static void focusin(XEvent *e);
       -static unsigned long getcolor(const char *colstr);
        static Client *getclient(Window w);
       +static unsigned long getcolor(const char *colstr);
        static Client *getfirsttab();
        static Bool gettextprop(Window w, Atom atom, char *text, unsigned int size);
       -static Bool isprotodel(Client *c);
        static void initfont(const char *fontstr);
       +static Bool isprotodel(Client *c);
        static void keypress(XEvent *e);
        static void killclient(const Arg *arg);
       -static void move(const Arg *arg);
       -static void spawn(const Arg *arg);
        static void manage(Window win);
       +static void move(const Arg *arg);
        static void propertynotify(XEvent *e);
        static void reparentnotify(XEvent *e);
        static void resize(Client *c, int w, int h);
        static void rotate(const Arg *arg);
        static void run(void);
        static void setup(void);
       +static void sigchld(int signal);
       +static void spawn(const Arg *arg);
        static int textnw(const char *text, unsigned int len);
        static void unmanage(Client *c);
        static void unmapnotify(XEvent *e);
       @@ -128,28 +130,27 @@ static int xerror(Display *dpy, XErrorEvent *ee);
        /* variables */
        static int screen;
        static void (*handler[LASTEvent]) (XEvent *) = {
       -        [ConfigureNotify] = configurenotify,
       -        [DestroyNotify] = destroynotify,
       -        [PropertyNotify] = propertynotify,
       -        [UnmapNotify] = unmapnotify,
                [ButtonPress] = buttonpress,
       -        [KeyPress] = keypress,
       -        [Expose] = expose,
                [ClientMessage] = clientmessage,
       +        [ConfigureNotify] = configurenotify,
                [CreateNotify] = createnotify,
       -        [ReparentNotify] = reparentnotify,
       +        [DestroyNotify] = destroynotify,
                [EnterNotify] = enternotify,
       +        [Expose] = expose,
                [FocusIn] = focusin,
       +        [KeyPress] = keypress,
       +        [PropertyNotify] = propertynotify,
       +        [ReparentNotify] = reparentnotify,
       +        [UnmapNotify] = unmapnotify,
        };
       +static int bh, wx, wy, ww, wh;
       +static unsigned int numlockmask = 0;
       +static Bool running = True, badwindow = False;
        static Display *dpy;
        static DC dc;
        static Atom wmatom[WMLast], netatom[NetLast], xembedatom;
        static Window root, win;
       -static Bool running = True;
       -static unsigned int numlockmask = 0;
       -static unsigned bh, wx, wy, ww, wh;
        static Client *clients = NULL, *sel = NULL;
       -static Bool badwindow = False;
        static int (*xerrorxlib)(Display *, XErrorEvent *);
        /* configuration, allows nested code to access above variables */
        #include "config.h"
       @@ -322,7 +323,8 @@ emallocz(size_t size) {
                return p;
        }
        
       -void enternotify(XEvent *e) {
       +void
       +enternotify(XEvent *e) {
                focus(sel);
        }
        
       @@ -367,16 +369,6 @@ focusin(XEvent *e) {
                focus(sel);
        }
        
       -unsigned long
       -getcolor(const char *colstr) {
       -        Colormap cmap = DefaultColormap(dpy, screen);
       -        XColor color;
       -
       -        if(!XAllocNamedColor(dpy, cmap, colstr, &color, &color))
       -                die("error, cannot allocate color '%s'\n", colstr);
       -        return color.pixel;
       -}
       -
        Client *
        getclient(Window w) {
                Client *c;
       @@ -387,6 +379,16 @@ getclient(Window w) {
                return NULL;
        }
        
       +unsigned long
       +getcolor(const char *colstr) {
       +        Colormap cmap = DefaultColormap(dpy, screen);
       +        XColor color;
       +
       +        if(!XAllocNamedColor(dpy, cmap, colstr, &color, &color))
       +                die("error, cannot allocate color '%s'\n", colstr);
       +        return color.pixel;
       +}
       +
        Client *
        getfirsttab() {
                unsigned int n, seli;
       @@ -519,36 +521,6 @@ killclient(const Arg *arg) {
        }
        
        void
       -move(const Arg *arg) {
       -        int i;
       -        Client *c;
       -
       -        for(i = 0, c = clients; c; c = c->next, i++) {
       -                if(arg->i == i)
       -                        focus(c);
       -        }
       -}
       -
       -void
       -sigchld(int signal) {
       -        while(0 < waitpid(-1, NULL, WNOHANG));
       -}
       -
       -
       -void
       -spawn(const Arg *arg) {
       -        if(fork() == 0) {
       -                if(dpy)
       -                        close(ConnectionNumber(dpy));
       -                setsid();
       -                execvp(((char **)arg->v)[0], (char **)arg->v);
       -                fprintf(stderr, "tabbed: execvp %s", ((char **)arg->v)[0]);
       -                perror(" failed");
       -                exit(0);
       -        }
       -}
       -
       -void
        manage(Window w) {
                updatenumlockmask();
                {
       @@ -596,6 +568,17 @@ manage(Window w) {
        }
        
        void
       +move(const Arg *arg) {
       +        int i;
       +        Client *c;
       +
       +        for(i = 0, c = clients; c; c = c->next, i++) {
       +                if(arg->i == i)
       +                        focus(c);
       +        }
       +}
       +
       +void
        propertynotify(XEvent *e) {
                Client *c;
                XPropertyEvent *ev = &e->xproperty;
       @@ -606,7 +589,8 @@ propertynotify(XEvent *e) {
                }
        }
        
       -void reparentnotify(XEvent *e) {
       +void
       +reparentnotify(XEvent *e) {
        }
        
        void
       @@ -663,6 +647,8 @@ run(void) {
        
        void
        setup(void) {
       +        /* clean up any zombies immediately */
       +        sigchld(0);
                /* init screen */
                screen = DefaultScreen(dpy);
                root = RootWindow(dpy, screen);
       @@ -702,6 +688,26 @@ setup(void) {
                XSetClassHint(dpy, win, &class_hint);
        }
        
       +void
       +sigchld(int unused) {
       +        if(signal(SIGCHLD, sigchld) == SIG_ERR)
       +                die("Can't install SIGCHLD handler");
       +        while(0 < waitpid(-1, NULL, WNOHANG));
       +}
       +
       +void
       +spawn(const Arg *arg) {
       +        if(fork() == 0) {
       +                if(dpy)
       +                        close(ConnectionNumber(dpy));
       +                setsid();
       +                execvp(((char **)arg->v)[0], (char **)arg->v);
       +                fprintf(stderr, "tabbed: execvp %s", ((char **)arg->v)[0]);
       +                perror(" failed");
       +                exit(0);
       +        }
       +}
       +
        int
        ttextnw(const char *text, unsigned int len) {
                XRectangle r;
       @@ -714,17 +720,6 @@ textnw(const char *text, unsigned int len) {
        }
        
        void
       -unmapnotify(XEvent *e) {
       -        Client *c;
       -        XUnmapEvent *ev = &e->xunmap;
       -
       -        if((c = getclient(ev->window)))
       -                unmanage(c);
       -        else if(ev->window == win)
       -                running = False;
       -}
       -
       -void
        unmanage(Client *c) {
                Client *pc;
        
       @@ -742,6 +737,17 @@ unmanage(Client *c) {
        }
        
        void
       +unmapnotify(XEvent *e) {
       +        Client *c;
       +        XUnmapEvent *ev = &e->xunmap;
       +
       +        if((c = getclient(ev->window)))
       +                unmanage(c);
       +        else if(ev->window == win)
       +                running = False;
       +}
       +
       +void
        updatenumlockmask(void) {
                unsigned int i, j;
                XModifierKeymap *modmap;