xref: /plan9/acme/bin/source/mkwnew.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
1 #include <u.h>
2 #include <libc.h>
3 
4 void
main(int argc,char * argv[])5 main(int argc, char *argv[])
6 {
7 	int i, fd, pid, n;
8 	char wdir[256];
9 	int dflag;
10 
11 	dflag = 0;
12 	ARGBEGIN{
13 	case 'd':
14 		dflag = 1;
15 		break;
16 	default:
17 		fprint(2, "usage: wnew [-d] [label]\n");
18 	}ARGEND
19 
20 	pid = getpid();
21 	wdir[0] = '\0';
22 	if(!dflag)
23 		getwd(wdir, sizeof wdir);
24 	if(argc>0)
25 		for(i=0; i<argc; i++)
26 			snprint(wdir, sizeof wdir, "%s%c%s", wdir, i==0? '/' : '-', argv[i]);
27 	else
28 		snprint(wdir, sizeof wdir, "%s/-win", wdir);
29 
30 	if((fd = open("/dev/wnew", ORDWR)) < 0)
31 		sysfatal("wnew: can't open /dev/wnew: %r");
32 
33 	if(fprint(fd, "%d %s", pid, wdir+dflag) < 0)
34 		sysfatal("wnew: can't create window: %r");
35 
36 	if(seek(fd, 0, 0) != 0)
37 		sysfatal("wnew: can't seek: %r");
38 
39 	if((n=read(fd, wdir, sizeof wdir-1)) < 0)
40 		sysfatal("wnew: can't read window id: %r");
41 	wdir[n] = '\0';
42 
43 	print("%s\n", wdir);
44 	exits(nil);
45 }
46