summaryrefslogtreecommitdiff
path: root/sys/src/cmd/aux/statusbar.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2013-09-16 02:10:18 +0200
committercinap_lenrek <cinap_lenrek@gmx.de>2013-09-16 02:10:18 +0200
commiteee51d7720cea1a743545c4bab94bc04f93272fe (patch)
treea30f53dd13f517eff978d2b04bb3f10786a9d32e /sys/src/cmd/aux/statusbar.c
parentc24dd620f91a2ef84b88d2536a469e5358df1b8d (diff)
aux/statusbar, aux/statusmsg: dont fork in background for window, cleanup
Diffstat (limited to 'sys/src/cmd/aux/statusbar.c')
-rw-r--r--sys/src/cmd/aux/statusbar.c136
1 files changed, 10 insertions, 126 deletions
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 <bio.h>
#include <event.h>
-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;
-
- 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);
- }
+ int cons;
- 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);
- return -1;
+ if(win != nil){
+ snprint(spec, sizeof(spec), "-r %s", win);
+ win = spec;
}
- 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);
+ if(newwindow(win) < 0){
+ fprint(2, "%s: newwindow: %r", argv0);
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;
}