#include "vnc.h" #include "vncv.h" char* encodings = "copyrect hextile corre rre raw"; int bpp12; int shared; int verbose; Vnc* vnc; enum { Pkbd, Pmouse, Pdraw, Psnarf, Npid }; int pid[Npid]; /* * like sysfatal(2) but sends a message to the * others before dying. also serves as exits. */ void sysfatal(char *fmt, ...) { char buf[1024]; va_list arg; int i, mypid; mypid = getpid(); for(i=0; ilocking = 1; unlockdisplay(display); d = addpt(vnc->dim, Pt(2*Borderwidth, 2*Borderwidth)); if(verbose) print("screen size %P, desktop size %P\n", display->image->r.max, d); choosecolor(vnc); sendencodings(vnc); rfork(RFREND); switch(rfork(RFPROC|RFMEM)){ case -1: sysfatal("rfork: %r"); default: break; case 0: pid[Pdraw] = getpid(); readfromserver(vnc); sysfatal(nil); } switch(rfork(RFPROC|RFMEM)){ case -1: sysfatal("rfork: %r"); default: break; case 0: pid[Psnarf] = getpid(); checksnarf(vnc); sysfatal(nil); } switch(rfork(RFPROC|RFMEM)){ case -1: sysfatal("rfork: %r"); default: break; case 0: pid[Pkbd] = getpid(); readkbd(vnc); sysfatal(nil); } pid[Pmouse] = getpid(); readmouse(vnc); sysfatal(nil); }