char * parse_colors(IxpMsg *m, CTuple *col) { static char Ebad[] = "bad color string"; Rune r; char c, *p; int i, j; /* '#%6x #%6x #%6x' */ p = (char*)m->pos; for(i = 0; i < 3 && p < (char*)m->end; i++) { if(*p++ != '#') return Ebad; for(j = 0; j < 6 && p < (char*)m->end; j++) if(!isxdigit(*p++)) return Ebad; chartorune(&r, p); if(i < 2) { if(r != ' ') return Ebad; p++; }else if(!isspacerune(r) && *p != '\0') return Ebad; } c = *p; *p = '\0'; loadcolor(col, (char*)m->pos); *p = c; m->pos = (uchar*)p; eatrunes(m, isspacerune, 1); return nil; }
void loadcolors(unsigned int which) { int i,j; int r,g,b; which%=11; for(i=0;i<256;i++) { switch(which) { case 0: if(i<64) loadcolor(i,0,0,0); else if(i<128) loadcolor(i,i-64,0,0); else if(i<192) loadcolor(i,63,i-128,0); else loadcolor(i,63,63,i-192); break; case 1: if(i<64) loadcolor(i,0,0,0); else if(i<128) loadcolor(i,0,0,i-64); else loadcolor(i,(i-128)>>1,(i-128)>>1,63); break; case 2: loadcolor(i,i>>2,i>>2,i>>2); break; case 3: r=rand()&0x3f; g=rand()&0x3f; b=rand()&0x3f; loadcolor(i,r*i>>8,g*i>>8,b*i>>8); break; case 4: loadcolor(i,i>>2,0,0); break; case 5: loadcolor(i,0,i>>2,0); break; case 6: loadcolor(i,0,0,i>>2); break; case 7: j=i&15; if(i&16) j=15-j; j=(i>>2)*j/16; loadcolor(i,j,j,j); break; case 8: j=0; if(i>8 && i<128) j=63; loadcolor(i,j,j,j); break; case 9: j=31-(i&31)<<1; r=i&32 ? j : 0; g=i&64 ? j : 0; b=i&128 ? j : 0; loadcolor(i,r,g,b); break; case 10: j=(i&15)<<2; if(i&16) j=63-j; r=i&32 ? j : 0; g=i&64 ? j : 0; b=i&128 ? j : 0; loadcolor(i,r,g,b); break; } } updatemap(); }
int main(int argc, char *argv[]) { IxpMsg m; char **oargv; char *wmiirc, *s; int i; quotefmtinstall(); fmtinstall('r', errfmt); fmtinstall('a', afmt); fmtinstall('C', Cfmt); extern int fmtevent(Fmt*); fmtinstall('E', fmtevent); wmiirc = "wmiirc"; oargv = argv; ARGBEGIN{ case 'a': address = EARGF(usage()); break; case 'r': wmiirc = EARGF(usage()); break; case 'v': print("%s", version); exit(0); case 'D': s = EARGF(usage()); m = ixp_message(s, strlen(s), 0); msg_debug(&m); break; default: usage(); break; }ARGEND; if(argc) usage(); setlocale(LC_CTYPE, ""); starting = true; initdisplay(); traperrors(true); selectinput(&scr.root, EnterWindowMask | SubstructureRedirectMask); if(traperrors(false)) fatal("another window manager is already running"); passwd = getpwuid(getuid()); user = estrdup(passwd->pw_name); init_environment(); fmtinstall('F', Ffmt); ixp_printfcall = printfcall; sock = ixp_announce(address); if(sock < 0) fatal("Can't create socket '%s': %r", address); closeexec(ConnectionNumber(display)); closeexec(sock); if(wmiirc[0]) spawn_command(wmiirc); init_traps(); init_cursors(); init_lock_keys(); ewmh_init(); xext_init(); srv.preselect = check_preselect; ixp_listen(&srv, sock, &p9srv, serve_9pcon, nil); ixp_listen(&srv, ConnectionNumber(display), nil, check_x_event, closedisplay); def.border = 1; def.colmode = Colstack; def.font = loadfont(FONT); def.incmode = ISqueeze; def.mod = Mod1Mask; strcpy(def.grabmod, "Mod1"); loadcolor(&def.focuscolor, FOCUSCOLORS); loadcolor(&def.normcolor, NORMCOLORS); disp.sel = pointerscreen(); init_screens(); root_init(); disp.focus = nil; setfocus(screen->barwin, RevertToParent); view_select("1"); scan_wins(); starting = false; view_update_all(); ewmh_updateviews(); event("FocusTag %s\n", selview->name); i = ixp_serverloop(&srv); if(i) fprint(2, "%s: error: %r\n", argv0); else event("Quit"); cleanup(); if(exitsignal) raise(exitsignal); if(execstr) { char *toks[32]; int n; n = unquote(strdup(execstr), toks, nelem(toks)-1); toks[n] = nil; execvp(toks[0], toks); fprint(2, "%s: failed to exec %q: %r\n", argv0, execstr); execvp(argv0, oargv); fatal("failed to exec myself"); } return i; }
int main(int argc, char *argv[]) { char *wmiirc; WMScreen *s; WinAttr wa; int i; fmtinstall('r', errfmt); fmtinstall('C', Cfmt); wmiirc = "wmiistartrc"; ARGBEGIN{ case 'v': print("%s", version); exit(0); case 'V': verbose = True; break; case 'a': address = EARGF(usage()); break; case 'r': wmiirc = EARGF(usage()); break; default: usage(); break; }ARGEND; if(argc) usage(); setlocale(LC_CTYPE, ""); starting = True; initdisplay(); xlib_errorhandler = XSetErrorHandler(errorhandler); check_other_wm = True; XSelectInput(display, scr.root.w, SubstructureRedirectMask | EnterWindowMask); XSync(display, False); check_other_wm = False; passwd = getpwuid(getuid()); user = estrdup(passwd->pw_name); init_environment(); sock = ixp_announce(address); if(sock < 0) fatal("Can't create socket '%s': %r", address); if(wmiirc) spawn_command(wmiirc); init_traps(); init_atoms(); init_cursors(); init_lock_keys(); srv.preselect = check_preselect; ixp_listen(&srv, sock, &p9srv, serve_9pcon, nil); ixp_listen(&srv, ConnectionNumber(display), nil, check_x_event, closedisplay); def.font = loadfont(FONT); def.border = 1; def.colmode = Coldefault; def.mod = Mod1Mask; strcpy(def.grabmod, "Mod1"); loadcolor(&def.focuscolor, FOCUSCOLORS); loadcolor(&def.normcolor, NORMCOLORS); num_screens = 1; screens = emallocz(num_screens * sizeof(*screens)); screen = &screens[0]; for(i = 0; i < num_screens; i++) { s = &screens[i]; init_screen(s); s->ibuf = allocimage(Dx(s->r), Dy(s->r), scr.depth); wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask | EnterWindowMask | LeaveWindowMask | FocusChangeMask; wa.cursor = cursor[CurNormal]; setwinattr(&scr.root, &wa, CWEventMask | CWCursor); initbar(s); } screen->focus = nil; setfocus(screen->barwin, RevertToParent); scan_wins(); starting = False; select_view("nil"); update_views(); write_event("FocusTag %s\n", screen->sel->name); check_x_event(nil); i = ixp_serverloop(&srv); if(i) fprint(2, "%s: error: %r\n", argv0); cleanup(); if(exitsignal) raise(exitsignal); if(execstr) execl("/bin/sh", "sh", "-c", execstr, nil); return i; }