On 10/25/24 08:11AM, Raymond Cole wrote:
> May someone check them out and share opinions?
> 

I like this
if [ "$butt" -eq 1 ]; then

I did my bar a similar way, except each widget is a script responsible for its 
own formatting, like:
mpc status -f '%artist% ~ %title%' | if read -r song && read -r state rest; then
        case "$state" in
                '[playing]') echo "$song ►";;
                *) echo "$song ◼";;
        esac
else
        echo "◼"
fi; mpc idle >/dev/null

And then the main bar program loops each script. Only problem is when
I fuck myself & create 900000 processes for no reason then my bar stops
working.

I did a shorter version of fifolog(conccat) without line-delimiting a
little while back - see below.

Jeremy

---

#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/select.h>

int
main(int argc, char **argv)
{
        int i, j, n, w, eof;
        fd_set rs;
        char buf[BUFSIZ];
        for (i = 1; i < argc; i++) {
                // close any "accidently" open file descriptors
                close((i+2)+(argc-1));

                if ((n = open(argv[i], O_RDONLY)) == -1) {
                        fprintf(stderr, "pselect: %s\n", strerror(errno));
                        return 1;
                }
        }

        for (eof = 0; !eof;) {
                FD_ZERO(&rs);
                for (i = 3; i < argc+2; i++) {
                        FD_SET(i+(argc-1), &rs);
                }

                if ((n = select(i+argc, &rs, NULL, NULL, NULL)) == -1) {
                        fprintf(stderr, "pselect: %s\n", strerror(errno));
                        return 1;
                }

                for (i = 3; i < argc+2; i++) {
                        if (!FD_ISSET(i+(argc-1), &rs)) {
                                continue;
                        }

                        if ((n = read(i+(argc-1), &buf[0], sizeof(buf))) == -1) 
{
                                fprintf(stderr, "failed reading from fd %d: 
%s\n", i+(argc-1), strerror(errno));
                                return 1;
                        } else if (n == 0) {
                                eof = 1;
                        }

                        for (j = 0; j < n; j += w) {
                                if ((w = write(i, &buf[j], n-j)) == -1 || w == 
0) {
                                        fprintf(stderr, "failed: %s\n", 
strerror(errno));
                                        return -1;
                                }
                        }
                }
        }
}

Reply via email to