From b9a8399219b6b8d86d7eca91c4e2cee735995a8a Mon Sep 17 00:00:00 2001 From: dscho Date: Wed, 14 Nov 2001 15:12:40 +0000 Subject: [PATCH] separated argument handling from main.c --- cargs.c | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 cargs.c diff --git a/cargs.c b/cargs.c new file mode 100644 index 0000000..134c356 --- /dev/null +++ b/cargs.c @@ -0,0 +1,114 @@ +/* + * This parses the command line arguments. It was seperated from main.c by + * Justin Dearing . + */ + +/* + * LibVNCServer (C) 2001 Johannes E. Schindelin + * Original OSXvnc (C) 2001 Dan McGuirk . + * Original Xvnc (C) 1999 AT&T Laboratories Cambridge. + * All Rights Reserved. + * + * see GPL (latest version) for full details + */ + +#include "rfb.h" + +void +rfbUsage(void) +{ + fprintf(stderr, "-rfbport port TCP port for RFB protocol\n"); + fprintf(stderr, "-rfbwait time max time in ms to wait for RFB client\n"); + fprintf(stderr, "-rfbauth passwd-file use authentication on RFB protocol\n" + " (use 'storepasswd' to create a password file)\n"); + fprintf(stderr, "-deferupdate time time in ms to defer updates " + "(default 40)\n"); + fprintf(stderr, "-desktop name VNC desktop name (default \"LibVNCServer\")\n"); + fprintf(stderr, "-alwaysshared always treat new clients as shared\n"); + fprintf(stderr, "-nevershared never treat new clients as shared\n"); + fprintf(stderr, "-dontdisconnect don't disconnect existing clients when a " + "new non-shared\n" + " connection comes in (refuse new connection " + "instead)\n"); + exit(1); +} + +void +rfbProcessArguments(rfbScreenInfoPtr rfbScreen,int* argc, char *argv[]) +{ + int i,i1; + + for (i = i1 = 1; i < *argc; i++) { + if (strcmp(argv[i], "-help") == 0) { + rfbUsage(); + exit(1); + } else if (strcmp(argv[i], "-rfbport") == 0) { /* -rfbport port */ + if (i + 1 >= *argc) rfbUsage(); + rfbScreen->rfbPort = atoi(argv[++i]); + } else if (strcmp(argv[i], "-rfbwait") == 0) { /* -rfbwait ms */ + if (i + 1 >= *argc) rfbUsage(); + rfbScreen->rfbMaxClientWait = atoi(argv[++i]); + } else if (strcmp(argv[i], "-rfbauth") == 0) { /* -rfbauth passwd-file */ + if (i + 1 >= *argc) rfbUsage(); + rfbScreen->rfbAuthPasswdData = argv[++i]; + } else if (strcmp(argv[i], "-deferupdate") == 0) { /* -desktop desktop-name */ + if (i + 1 >= *argc) rfbUsage(); + rfbScreen->rfbDeferUpdateTime = atoi(argv[++i]); + } else if (strcmp(argv[i], "-desktop") == 0) { /* -desktop desktop-name */ + if (i + 1 >= *argc) rfbUsage(); + rfbScreen->desktopName = argv[++i]; + } else if (strcmp(argv[i], "-alwaysshared") == 0) { + rfbScreen->rfbAlwaysShared = TRUE; + } else if (strcmp(argv[i], "-nevershared") == 0) { + rfbScreen->rfbNeverShared = TRUE; + } else if (strcmp(argv[i], "-dontdisconnect") == 0) { + rfbScreen->rfbDontDisconnect = TRUE; + } else if (strcmp(argv[i], "-width") == 0) { + rfbScreen->width = atoi(argv[++i]); + } else if (strcmp(argv[i], "-height") == 0) { + 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; + } + i1++; + i = i1-1; + } + } + *argc -= i-i1; +} + +void rfbSizeUsage() +{ + fprintf(stderr, "-width sets the width of the framebuffer\n"); + fprintf(stderr, "-height sets the height of the framebuffer\n"); + exit(1); +} + +void +rfbProcessSizeArguments(int* width,int* height,int* bpp,int* argc, char *argv[]) +{ + int i,i1; + + for (i = i1 = 1; i < *argc-1; i++) { + if (strcmp(argv[i], "-bpp") == 0) { + *bpp = atoi(argv[++i]); + } else if (strcmp(argv[i], "-width") == 0) { + *width = atoi(argv[++i]); + } else if (strcmp(argv[i], "-height") == 0) { + *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; + } + i1++; + i = i1-1; + } + } + *argc -= i-i1; +} +