From 22405c3dddfe5cb78b792f3d6b20ba1e5bd427a9 Mon Sep 17 00:00:00 2001
From: dscho <dscho>
Date: Tue, 30 Apr 2002 14:06:50 +0000
Subject: command line handling

---
 cargs.c | 19 ++++++++++++++-----
 rfb.h   |  1 +
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/cargs.c b/cargs.c
index 6e41ae5..03696a3 100644
--- a/cargs.c
+++ b/cargs.c
@@ -35,6 +35,17 @@ rfbUsage(void)
     exit(1);
 }
 
+/* purges COUNT arguments from ARGV at POSITION and decrements ARGC.
+   POSITION points to the first non purged argument afterwards. */
+void rfbPurgeArguments(int* argc,int* position,int count,char *argv[])
+{
+  int amount=(*argc)-(*position)-count;
+  if(amount)
+    memmove(argv+(*position),argv+(*position)+count,sizeof(char*)*amount);
+  (*argc)-=count;
+  (*position)--;
+}
+
 void 
 rfbProcessArguments(rfbScreenInfoPtr rfbScreen,int* argc, char *argv[])
 {
@@ -80,12 +91,10 @@ rfbProcessArguments(rfbScreenInfoPtr rfbScreen,int* argc, char *argv[])
                rfbScreen->height = atoi(argv[++i]);
         } else {
 	    /* we just remove the processed arguments from the list */
-	    if(i != i1) {
-	        memmove(argv+i1,argv+i,sizeof(char*)*(*argc-i));
-		*argc -= i-i1;
-	    }
+	    if(i != i1)
+	        rfbPurgeArguments(argc,&i,i1-i,argv);
 	    i1++;
-	    i = i1-1;
+	    i++;
         }
     }
     *argc -= i-i1;
diff --git a/rfb.h b/rfb.h
index 1903d2a..e4e873e 100644
--- a/rfb.h
+++ b/rfb.h
@@ -760,6 +760,7 @@ extern int rfbSelectBox(rfbScreenInfoPtr rfbScreen,
 /* cargs.c */
 
 extern void rfbUsage();
+extern void rfbPurgeArguments(int* argc,int* position,int count,char *argv[]);
 extern void rfbProcessArguments(rfbScreenInfoPtr rfbScreen,int* argc, char *argv[]);
 extern void rfbProcessSizeArguments(int* width,int* height,int* bpp,int* argc, char *argv[]);
 
-- 
cgit v1.2.3

