1*1cea1571SDavid du Colombier #include <u.h> 2*1cea1571SDavid du Colombier #include <libc.h> 3*1cea1571SDavid du Colombier 4*1cea1571SDavid du Colombier int alarmed; 5*1cea1571SDavid du Colombier 6*1cea1571SDavid du Colombier void 7*1cea1571SDavid du Colombier usage(void) 8*1cea1571SDavid du Colombier { 9*1cea1571SDavid du Colombier fprint(2, "usage: %s [-q]\n", argv0); 10*1cea1571SDavid du Colombier exits("usage"); 11*1cea1571SDavid du Colombier } 12*1cea1571SDavid du Colombier 13*1cea1571SDavid du Colombier void 14*1cea1571SDavid du Colombier ding(void*, char *s) 15*1cea1571SDavid du Colombier { 16*1cea1571SDavid du Colombier if(strstr(s, "alarm")){ 17*1cea1571SDavid du Colombier alarmed = 1; 18*1cea1571SDavid du Colombier noted(NCONT); 19*1cea1571SDavid du Colombier } else 20*1cea1571SDavid du Colombier noted(NDFLT); 21*1cea1571SDavid du Colombier } 22*1cea1571SDavid du Colombier 23*1cea1571SDavid du Colombier void 24*1cea1571SDavid du Colombier main(int argc, char **argv) 25*1cea1571SDavid du Colombier { 26*1cea1571SDavid du Colombier int fd, cfd; 27*1cea1571SDavid du Colombier char buf[1]; 28*1cea1571SDavid du Colombier int quiet = 0; 29*1cea1571SDavid du Colombier int done = 0; 30*1cea1571SDavid du Colombier 31*1cea1571SDavid du Colombier ARGBEGIN { 32*1cea1571SDavid du Colombier case 'q': 33*1cea1571SDavid du Colombier quiet = 1; 34*1cea1571SDavid du Colombier break; 35*1cea1571SDavid du Colombier } ARGEND; 36*1cea1571SDavid du Colombier 37*1cea1571SDavid du Colombier notify(ding); 38*1cea1571SDavid du Colombier 39*1cea1571SDavid du Colombier fd = open("/dev/cons", ORDWR); 40*1cea1571SDavid du Colombier if(fd < 0) 41*1cea1571SDavid du Colombier sysfatal("opening /dev/cons: %r"); 42*1cea1571SDavid du Colombier cfd = open("/dev/consctl", OWRITE); 43*1cea1571SDavid du Colombier if(cfd >= 0) 44*1cea1571SDavid du Colombier fprint(cfd, "rawon"); 45*1cea1571SDavid du Colombier 46*1cea1571SDavid du Colombier while(!done){ 47*1cea1571SDavid du Colombier if(read(fd, buf, 1) <= 0) 48*1cea1571SDavid du Colombier break; 49*1cea1571SDavid du Colombier if(buf[0] == '\n' || buf[0] == '\r') 50*1cea1571SDavid du Colombier done = 1; 51*1cea1571SDavid du Colombier if(write(1, buf, 1) < 0) 52*1cea1571SDavid du Colombier break; 53*1cea1571SDavid du Colombier if(!quiet){ 54*1cea1571SDavid du Colombier alarmed = 0; 55*1cea1571SDavid du Colombier alarm(500); 56*1cea1571SDavid du Colombier if(read(0, buf, 1) <= 0 && !alarmed) 57*1cea1571SDavid du Colombier break; 58*1cea1571SDavid du Colombier alarm(0); 59*1cea1571SDavid du Colombier if(buf[0] != '\r' && write(fd, buf, 1) < 0) 60*1cea1571SDavid du Colombier break; 61*1cea1571SDavid du Colombier } 62*1cea1571SDavid du Colombier } 63*1cea1571SDavid du Colombier exits(0); 64*1cea1571SDavid du Colombier } 65