main.c
changeset 137 77922a389fa8
parent 126 1489f6b97714
child 138 c1185dc7a36e
equal deleted inserted replaced
136:3a9caa6d565b 137:77922a389fa8
   164 main(int argc, char *argv[])
   164 main(int argc, char *argv[])
   165 {
   165 {
   166 	int i, n;
   166 	int i, n;
   167 	unsigned int mask;
   167 	unsigned int mask;
   168 	fd_set rd;
   168 	fd_set rd;
   169 	Bool readstdin = True;
   169 	Bool readin = True;
   170 	Window w;
   170 	Window w;
   171 	XEvent ev;
   171 	XEvent ev;
   172 	XSetWindowAttributes wa;
   172 	XSetWindowAttributes wa;
   173 
   173 
   174 	for(i = 1; (i < argc) && (argv[i][0] == '-'); i++) {
   174 	if(argc == 2 && !strncmp("-v", argv[1], 3)) {
   175 		switch (argv[i][1]) {
   175 		fputs("dwm-"VERSION", (C)opyright MMVI Anselm R. Garbe\n", stdout);
   176 		default:
   176 		exit(EXIT_SUCCESS);
   177 			eprint("usage: dwm [-v]\n");
   177 	}
   178 			break;
   178 	else if(argc != 1)
   179 		case 'v':
   179 		eprint("usage: dwm [-v]\n");
   180 			fputs("dwm-"VERSION", (C)opyright MMVI Anselm R. Garbe\n", stdout);
       
   181 			exit(EXIT_SUCCESS);
       
   182 			break;
       
   183 		}
       
   184 	}
       
   185 
   180 
   186 	dpy = XOpenDisplay(0);
   181 	dpy = XOpenDisplay(0);
   187 	if(!dpy)
   182 	if(!dpy)
   188 		eprint("dwm: cannot connect X server\n");
   183 		eprint("dwm: cannot connect X server\n");
   189 
   184 
   254 
   249 
   255 	strcpy(stext, "dwm-"VERSION);
   250 	strcpy(stext, "dwm-"VERSION);
   256 	scan();
   251 	scan();
   257 
   252 
   258 	/* main event loop, reads status text from stdin as well */
   253 	/* main event loop, reads status text from stdin as well */
   259 Mainloop:
       
   260 	while(running) {
   254 	while(running) {
   261 		FD_ZERO(&rd);
   255 		FD_ZERO(&rd);
   262 		if(readstdin)
   256 		if(readin)
   263 			FD_SET(STDIN_FILENO, &rd);
   257 			FD_SET(STDIN_FILENO, &rd);
   264 		FD_SET(ConnectionNumber(dpy), &rd);
   258 		FD_SET(ConnectionNumber(dpy), &rd);
   265 
   259 
   266 		i = select(ConnectionNumber(dpy) + 1, &rd, 0, 0, 0);
   260 		i = select(ConnectionNumber(dpy) + 1, &rd, 0, 0, 0);
   267 		if(i == -1 && errno == EINTR)
   261 		if(i == -1 && errno == EINTR)
   274 					XNextEvent(dpy, &ev);
   268 					XNextEvent(dpy, &ev);
   275 					if(handler[ev.type])
   269 					if(handler[ev.type])
   276 						(handler[ev.type])(&ev); /* call handler */
   270 						(handler[ev.type])(&ev); /* call handler */
   277 				}
   271 				}
   278 			}
   272 			}
   279 			if(readstdin && FD_ISSET(STDIN_FILENO, &rd)) {
   273 			if(readin && FD_ISSET(STDIN_FILENO, &rd)) {
   280 				i = n = 0;
   274 				readin = NULL != fgets(stext, sizeof(stext), stdin);
   281 				for(;;) {
   275 				if(readin)
   282 					if((i = getchar()) == EOF) {
   276 					stext[strlen(stext) - 1] = 0;
   283 						/* broken pipe/end of producer */
   277 				else 
   284 						readstdin = False;
   278 					strcpy(stext, "broken pipe");
   285 						strcpy(stext, "broken pipe");
       
   286 						goto Mainloop;
       
   287 					}
       
   288 					if(i == '\n' || n >= sizeof(stext) - 1)
       
   289 						break;
       
   290 					stext[n++] = i;
       
   291 				}
       
   292 				stext[n] = 0;
       
   293 				drawstatus();
   279 				drawstatus();
   294 			}
   280 			}
   295 		}
   281 		}
   296 	}
   282 	}
   297 
   283