summaryrefslogtreecommitdiffstats
path: root/mac.c
diff options
context:
space:
mode:
Diffstat (limited to 'mac.c')
-rw-r--r--mac.c43
1 files changed, 37 insertions, 6 deletions
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);