diff --git a/sys/src/cmd/aux/statusbar.c b/sys/src/cmd/aux/statusbar.c index ea5c16ee7..1a6af95bb 100644 --- a/sys/src/cmd/aux/statusbar.c +++ b/sys/src/cmd/aux/statusbar.c @@ -4,11 +4,7 @@ #include #include -enum {PNCTL=3}; - -static char* rdenv(char*); int newwin(char*); -Rectangle screenrect(void); int nokill; int textmode; @@ -156,7 +152,7 @@ bar(Biobuf *b) d = strtoll(f[1], 0, 0); drawbar(); } - postnote(PNCTL, child, "kill"); + postnote(PNPROC, child, "kill"); } @@ -215,143 +211,31 @@ main(int argc, char **argv) exits(0); } - -/* all code below this line should be in the library, but is stolen from colors instead */ -static char* -rdenv(char *name) -{ - char *v; - int fd, size; - - fd = open(name, OREAD); - if(fd < 0) - return 0; - size = seek(fd, 0, 2); - v = malloc(size+1); - if(v == 0){ - fprint(2, "%s: can't malloc: %r\n", argv0); - exits("no mem"); - } - seek(fd, 0, 0); - read(fd, v, size); - v[size] = 0; - close(fd); - return v; -} - int newwin(char *win) { - char *srv, *mntsrv; char spec[100]; - int srvfd, cons, pid; + int cons; - switch(rfork(RFFDG|RFPROC|RFNAMEG|RFENVG|RFNOTEG|RFNOWAIT)){ - case -1: - fprint(2, "statusbar: can't fork: %r\n"); - return -1; - case 0: - break; - default: - exits(0); + if(win != nil){ + snprint(spec, sizeof(spec), "-r %s", win); + win = spec; } - - srv = rdenv("/env/wsys"); - if(srv == 0){ - mntsrv = rdenv("/mnt/term/env/wsys"); - if(mntsrv == 0){ - fprint(2, "statusbar: can't find $wsys\n"); - return -1; - } - srv = malloc(strlen(mntsrv)+10); - sprint(srv, "/mnt/term%s", mntsrv); - free(mntsrv); - pid = 0; /* can't send notes to remote processes! */ - }else - pid = getpid(); - USED(pid); - srvfd = open(srv, ORDWR); - free(srv); - if(srvfd == -1){ - fprint(2, "statusbar: can't open %s: %r\n", srv); + if(newwindow(win) < 0){ + fprint(2, "%s: newwindow: %r", argv0); return -1; } - sprint(spec, "new -r %s", win); - if(mount(srvfd, -1, "/mnt/wsys", 0, spec) == -1){ - fprint(2, "statusbar: can't mount /mnt/wsys: %r (spec=%s)\n", spec); - return -1; - } - close(srvfd); - unmount("/mnt/acme", "/dev"); - bind("/mnt/wsys", "/dev", MBEFORE); - cons = open("/dev/cons", OREAD); - if(cons==-1){ + if((cons = open("/dev/cons", OREAD)) < 0){ NoCons: - fprint(2, "statusbar: can't open /dev/cons: %r"); + fprint(2, "%s: can't open /dev/cons: %r", argv0); return -1; } dup(cons, 0); close(cons); - cons = open("/dev/cons", OWRITE); - if(cons==-1) + if((cons = open("/dev/cons", OWRITE)) < 0) goto NoCons; dup(cons, 1); dup(cons, 2); close(cons); -// wctlfd = open("/dev/wctl", OWRITE); - return 0; -} - -Rectangle -screenrect(void) -{ - int fd; - char buf[12*5]; - - fd = open("/dev/screen", OREAD); - if(fd == -1) - fd=open("/mnt/term/dev/screen", OREAD); - if(fd == -1){ - fprint(2, "%s: can't open /dev/screen: %r\n", argv0); - exits("window read"); - } - if(read(fd, buf, sizeof buf) != sizeof buf){ - fprint(2, "%s: can't read /dev/screen: %r\n", argv0); - exits("screen read"); - } - close(fd); - return Rect(atoi(buf+12), atoi(buf+24), atoi(buf+36), atoi(buf+48)); -} - -int -postnote(int group, int pid, char *note) -{ - char file[128]; - int f, r; - - switch(group) { - case PNPROC: - sprint(file, "/proc/%d/note", pid); - break; - case PNGROUP: - sprint(file, "/proc/%d/notepg", pid); - break; - case PNCTL: - sprint(file, "/proc/%d/ctl", pid); - break; - default: - return -1; - } - - f = open(file, OWRITE); - if(f < 0) - return -1; - - r = strlen(note); - if(write(f, note, r) != r) { - close(f); - return -1; - } - close(f); return 0; } diff --git a/sys/src/cmd/aux/statusmsg.c b/sys/src/cmd/aux/statusmsg.c index 23e6b47a9..d98446d89 100644 --- a/sys/src/cmd/aux/statusmsg.c +++ b/sys/src/cmd/aux/statusmsg.c @@ -4,11 +4,7 @@ #include #include -enum {PNCTL=3}; - -static char* rdenv(char*); int newwin(char*); -Rectangle screenrect(void); int nokill; int textmode; @@ -95,7 +91,7 @@ msg(Biobuf *b) } if(textmode) write(1, "\n", 1); - postnote(PNCTL, child, "kill"); + postnote(PNPROC, child, "kill"); } @@ -157,142 +153,31 @@ main(int argc, char **argv) exits(0); } - -/* all code below this line should be in the library, but is stolen from colors instead */ -static char* -rdenv(char *name) -{ - char *v; - int fd, size; - - fd = open(name, OREAD); - if(fd < 0) - return 0; - size = seek(fd, 0, 2); - v = malloc(size+1); - if(v == 0){ - fprint(2, "%s: can't malloc: %r\n", argv0); - exits("no mem"); - } - seek(fd, 0, 0); - read(fd, v, size); - v[size] = 0; - close(fd); - return v; -} - int newwin(char *win) { - char *srv, *mntsrv; char spec[100]; - int srvfd, cons, pid; + int cons; - switch(rfork(RFFDG|RFPROC|RFNAMEG|RFENVG|RFNOTEG|RFNOWAIT)){ - case -1: - fprint(2, "%s: can't fork: %r\n", argv0); - return -1; - case 0: - break; - default: - exits(0); + if(win != nil){ + snprint(spec, sizeof(spec), "-r %s", win); + win = spec; } - - srv = rdenv("/env/wsys"); - if(srv == 0){ - mntsrv = rdenv("/mnt/term/env/wsys"); - if(mntsrv == 0){ - fprint(2, "%s: can't find $wsys\n", argv0); - return -1; - } - srv = malloc(strlen(mntsrv)+10); - sprint(srv, "/mnt/term%s", mntsrv); - free(mntsrv); - pid = 0; /* can't send notes to remote processes! */ - }else - pid = getpid(); - USED(pid); - srvfd = open(srv, ORDWR); - free(srv); - if(srvfd == -1){ - fprint(2, "%s: can't open %s: %r\n", argv0, srv); + if(newwindow(win) < 0){ + fprint(2, "%s: newwindow: %r", argv0); return -1; } - sprint(spec, "new -r %s", win); - if(mount(srvfd, -1, "/mnt/wsys", 0, spec) == -1){ - fprint(2, "%s: can't mount /mnt/wsys: %r (spec=%s)\n", argv0, spec); - return -1; - } - close(srvfd); - unmount("/mnt/acme", "/dev"); - bind("/mnt/wsys", "/dev", MBEFORE); - cons = open("/dev/cons", OREAD); - if(cons==-1){ + if((cons = open("/dev/cons", OREAD)) < 0){ NoCons: fprint(2, "%s: can't open /dev/cons: %r", argv0); return -1; } dup(cons, 0); close(cons); - cons = open("/dev/cons", OWRITE); - if(cons==-1) + if((cons = open("/dev/cons", OWRITE)) < 0) goto NoCons; dup(cons, 1); dup(cons, 2); close(cons); return 0; } - -Rectangle -screenrect(void) -{ - int fd; - char buf[12*5]; - - fd = open("/dev/screen", OREAD); - if(fd == -1) - fd=open("/mnt/term/dev/screen", OREAD); - if(fd == -1){ - fprint(2, "%s: can't open /dev/screen: %r\n", argv0); - exits("window read"); - } - if(read(fd, buf, sizeof buf) != sizeof buf){ - fprint(2, "%s: can't read /dev/screen: %r\n", argv0); - exits("screen read"); - } - close(fd); - return Rect(atoi(buf+12), atoi(buf+24), atoi(buf+36), atoi(buf+48)); -} - -int -postnote(int group, int pid, char *note) -{ - char file[128]; - int f, r; - - switch(group) { - case PNPROC: - sprint(file, "/proc/%d/note", pid); - break; - case PNGROUP: - sprint(file, "/proc/%d/notepg", pid); - break; - case PNCTL: - sprint(file, "/proc/%d/ctl", pid); - break; - default: - return -1; - } - - f = open(file, OWRITE); - if(f < 0) - return -1; - - r = strlen(note); - if(write(f, note, r) != r) { - close(f); - return -1; - } - close(f); - return 0; -}