exits("usage");
}
+/* ^D, Delete, Enter, Backspace, ^U */
void
readline(char *buf, int nbuf)
{
int i;
i = 0;
- while(i < nbuf-1)
+ while(i < nbuf-1){
if(read(0, &c, 1) != 1 || c == '\04' || c == '\177'){
i = 0;
break;
i = 0;
else
buf[i++] = c;
+ blank = time(0);
+ }
buf[i] = '\0';
}
break;
auth_freeAI(ai);
- blank = time(0);
-
border(screen, screen->r, 8, display->black, ZP);
flushimage(display, 1);
}
return;
for(;;){
- if(((ulong)time(0) - (ulong)blank) >= 5){
+ if(blank != 0 && ((ulong)time(0) - (ulong)blank) >= 5){
blank = 0;
write(fd, "blank", 5);
}
void
grabmouse(void*)
{
+ int fd, x, y;
char ibuf[256], obuf[256];
- int fd;
if((fd = open("/dev/mouse", ORDWR)) < 0)
sysfatal("can't open /dev/mouse: %r");
screen->r.min.y + Dy(screen->r)/2);
while(read(fd, ibuf, sizeof ibuf) > 0){
- if(!debug)
- fprint(fd, "%s", obuf);
- blank = time(0);
+ ibuf[12] = 0;
+ ibuf[24] = 0;
+ x = atoi(ibuf+1);
+ y = atoi(ibuf+13);
+ if(x != screen->r.min.x + Dx(screen->r)/2 ||
+ y != screen->r.min.y + Dy(screen->r)/2){
+ if(!debug)
+ fprint(fd, "%s", obuf);
+ blank = time(0);
+ }
+ }
+}
+
+void
+top(void*)
+{
+ int fd;
+
+ if((fd = open("/dev/wctl", OWRITE)) < 0)
+ return;
+
+ for(;;){
+ write(fd, "current", 7);
+ sleep(500);
}
}
void
lockscreen(void)
{
- enum { Nfld = 5, Fldlen = 12, Cursorlen = 2*4 + 2*2*16, };
+ enum { Cursorlen = 2*4 + 2*2*16 };
char *s;
- char buf[Nfld*Fldlen], *flds[Nfld], newcmd[128], cbuf[Cursorlen];
+ char newcmd[128], cbuf[Cursorlen];
int fd, dx, dy;
Image *i;
Point p;
Rectangle r;
Tm *tm;
- if((fd = open("/dev/screen", OREAD)) < 0)
- sysfatal("can't open /dev/screen: %r");
- if(read(fd, buf, Nfld*Fldlen) != Nfld*Fldlen)
- sysfatal("can't read /dev/screen: %r");
- close(fd);
- buf[sizeof buf-1] = 0;
- if(tokenize(buf, flds, Nfld) != Nfld)
- sysfatal("can't tokenize /dev/screen header");
- snprint(newcmd, sizeof newcmd, "-r %s %s %d %d",
- flds[1], flds[2], atoi(flds[3]), atoi(flds[4]));
+ display = initdisplay(nil, nil, nil);
+ if(display == nil)
+ sysfatal("can't open /dev/draw: %r");
+ r = display->image->r;
+ snprint(newcmd, sizeof newcmd, "-r %d %d %d %d",
+ r.min.x, r.min.y, r.max.x, r.max.y);
+ closedisplay(display);
newwindow(newcmd);
if((fd = open("/dev/consctl", OWRITE)) >= 0)
if(initdraw(nil, nil, "screenlock") < 0)
sysfatal("initdraw failed");
+ screen = _screen->image; /* fullscreen */
if((fd = open(pic, OREAD)) >= 0){
if((i = readimage(display, fd, 0)) != nil){
flushimage(display, 1);
/* screen is now open and covered. grab mouse and hold on tight */
+ procrfork(top, nil, 8*1024, RFFDG);
procrfork(grabmouse, nil, 8*1024, RFFDG);
procrfork(blanker, nil, 8*1024, RFFDG);