summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordscho <dscho>2001-12-09 21:40:46 +0000
committerdscho <dscho>2001-12-09 21:40:46 +0000
commitf3306e9e83cd4ddb05328230630198e7c1824383 (patch)
treeb716e06efeeb2e4b95b252404dbc605fd3457241
parent8d8429b4f818a83f1de8121d1adb393ae3724f87 (diff)
downloadlibtdevnc-f3306e9e.tar.gz
libtdevnc-f3306e9e.zip
Makefile cleanup, some special options for OSX
-rw-r--r--Makefile8
-rw-r--r--mac.c43
2 files changed, 42 insertions, 9 deletions
diff --git a/Makefile b/Makefile
index c3a9ae1..3ee328d 100644
--- a/Makefile
+++ b/Makefile
@@ -9,8 +9,8 @@ VNCSERVERLIB=-L. -lvncserver -L/usr/local/lib -lz -ljpeg
# The code for 3 Bytes/Pixel is not very efficient!
FLAG24 = -DALLOW24BPP
-OPTFLAGS=-g # -Wall
-#OPTFLAGS=-O2 -Wall
+#OPTFLAGS=-g # -Wall
+OPTFLAGS=-O2 -Wall
CFLAGS=$(OPTFLAGS) $(PTHREADDEF) $(FLAG24) $(INCLUDES)
RANLIB=ranlib
@@ -59,7 +59,9 @@ OSXvnc-server: mac.o libvncserver.a
x11vnc: x11vnc.o libvncserver.a
$(CC) -o x11vnc x11vnc.o libvncserver.a -lz -ljpeg $(XLIBS)
-# $(CC) -o x11vnc x11vnc.o libvncserver.a /usr/lib/libz.a /usr/lib/libjpeg.a $(XLIBS)
+
+x11vnc_static: x11vnc.o libvncserver.a
+ $(CC) -o x11vnc_static x11vnc.o libvncserver.a /usr/lib/libz.a /usr/lib/libjpeg.a $(XLIBS)
#$(LIBS) $(XLIBS)
storepasswd: storepasswd.o d3des.o vncauth.o
diff --git a/mac.c b/mac.c
index 0f1332b..c91bc61 100644
--- a/mac.c
+++ b/mac.c
@@ -37,6 +37,10 @@
rfbScreenInfoPtr rfbScreen;
+/* some variables to enable special behaviour */
+int startTime = -1, maxSecsToConnect = 0;
+Bool disconnectAfterFirstClient = True;
+
/* Where do I get the "official" list of Mac key codes?
Ripped these out of a Mac II emulator called Basilisk II
that I found on the net. */
@@ -283,18 +287,45 @@ ScreenInit(int argc, char**argv)
static void
refreshCallback(CGRectCount count, const CGRect *rectArray, void *ignore)
{
- int i;
+ int i;
- for (i = 0; i < count; i++)
- rfbMarkRectAsModified(rfbScreen,
- rectArray[i].origin.x,rectArray[i].origin.y,
- rectArray[i].origin.x + rectArray[i].size.width,
- rectArray[i].origin.y + rectArray[i].size.height);
+ if(startTime>0 && time()>startTime+maxSecsToConnect)
+ exit(0);
+
+ for (i = 0; i < count; i++)
+ rfbMarkRectAsModified(rfbScreen,
+ rectArray[i].origin.x,rectArray[i].origin.y,
+ rectArray[i].origin.x + rectArray[i].size.width,
+ rectArray[i].origin.y + rectArray[i].size.height);
+}
+
+void clientGone(rfbClientPtr cl)
+{
+ exit(0);
+}
+
+void newClient(rfbClientPtr cl)
+{
+ if(startTime>0 && time()>startTime+maxSecsToConnect)
+ exit(0);
+
+ if(disconnectAfterFirstClient)
+ cl->clientGoneHook = clientGone;
}
int main(int argc,char *argv[])
{
+ for(i=argc-1;i>0;i--)
+ if(i<argc-1 && strcmp(argv[i],"-wait4client")==0) {
+ maxSecsToConnect = atoi(argv[i+1])/1000;
+ startTime = time();
+ } else if(strcmp(argv[i],"-runforever")==0) {
+ disconnectAfterFirstClient = FALSE;
+ }
+
ScreenInit(argc,argv);
+ rfbScreen->newClientHook = newClient;
+
/* enter background event loop */
rfbRunEventLoop(rfbScreen,40,TRUE);