From fc41a21bbbe138170e2b88d5372a5695364426dd Mon Sep 17 00:00:00 2001 From: =?utf8?q?Peter=20=C3=85strand?= Date: Tue, 22 Feb 2005 20:29:40 +0000 Subject: [PATCH] Synched ddxInitGlobals and ddxProcessArgument with modern InitOutput.c. git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@215 3789f03b-4d11-0410-bbf8-ca57d06f2519 --- xc/programs/Xserver/vnc/Xvnc/xvnc.cc | 405 ++++++++++++++------------- 1 file changed, 214 insertions(+), 191 deletions(-) diff --git a/xc/programs/Xserver/vnc/Xvnc/xvnc.cc b/xc/programs/Xserver/vnc/Xvnc/xvnc.cc index 7ad34f25..bf7d749b 100644 --- a/xc/programs/Xserver/vnc/Xvnc/xvnc.cc +++ b/xc/programs/Xserver/vnc/Xvnc/xvnc.cc @@ -193,8 +193,6 @@ vfbBitsPerPixel(int depth) } extern "C" { - void ddxInitGlobals() {} - void ddxGiveUp() { @@ -331,182 +329,207 @@ ddxUseMsg() } } -static bool displayNumFree(int num) +/* ddxInitGlobals - called by |InitGlobals| from os/util.c */ +void ddxInitGlobals(void) { - try { - network::TcpListener l(6000+num); - } catch (rdr::Exception& e) { - return false; - } - char file[256]; - sprintf(file, "/tmp/.X%d-lock", num); - if (access(file, F_OK) == 0) return false; - sprintf(file, "/tmp/.X11-unix/X%d", num); - if (access(file, F_OK) == 0) return false; - sprintf(file, "/usr/spool/sockets/X11/%d", num); - if (access(file, F_OK) == 0) return false; - return true; } -int ddxProcessArgument(int argc, char *argv[], int i) +static +bool displayNumFree(int num) { - static Bool firstTime = TRUE; - - if (firstTime) - { - vfbInitializeDefaultScreens(); - vfbInitializePixmapDepths(); - firstTime = FALSE; - rfb::initStdIOLoggers(); - rfb::LogWriter::setLogParams("*:stderr:30"); - } + try { + network::TcpListener l(6000+num); + } catch (rdr::Exception& e) { + return false; + } + char file[256]; + sprintf(file, "/tmp/.X%d-lock", num); + if (access(file, F_OK) == 0) return false; + sprintf(file, "/tmp/.X11-unix/X%d", num); + if (access(file, F_OK) == 0) return false; + sprintf(file, "/usr/spool/sockets/X11/%d", num); + if (access(file, F_OK) == 0) return false; + return true; +} - if (argv[i][0] == ':') - displaySpecified = true; +int +ddxProcessArgument(int argc, char *argv[], int i) +{ + static Bool firstTime = TRUE; - if (strcmp (argv[i], "-screen") == 0) /* -screen n WxHxD */ - { - int screenNum; - if (i + 2 >= argc) UseMsg(); - screenNum = atoi(argv[i+1]); - if (screenNum < 0 || screenNum >= MAXSCREENS) + if (firstTime) { - ErrorF("Invalid screen number %d\n", screenNum); - UseMsg(); + vfbInitializeDefaultScreens(); + vfbInitializePixmapDepths(); + firstTime = FALSE; + rfb::initStdIOLoggers(); + rfb::LogWriter::setLogParams("*:stderr:30"); } - if (3 != sscanf(argv[i+2], "%dx%dx%d", - &vfbScreens[screenNum].width, - &vfbScreens[screenNum].height, - &vfbScreens[screenNum].depth)) + + if (argv[i][0] == ':') + displaySpecified = true; + + if (strcmp (argv[i], "-screen") == 0) /* -screen n WxHxD */ { - ErrorF("Invalid screen configuration %s\n", argv[i+2]); - UseMsg(); - } + int screenNum; + if (i + 2 >= argc) UseMsg(); + screenNum = atoi(argv[i+1]); + if (screenNum < 0 || screenNum >= MAXSCREENS) + { + ErrorF("Invalid screen number %d\n", screenNum); + UseMsg(); + } + if (3 != sscanf(argv[i+2], "%dx%dx%d", + &vfbScreens[screenNum].width, + &vfbScreens[screenNum].height, + &vfbScreens[screenNum].depth)) + { + ErrorF("Invalid screen configuration %s\n", argv[i+2]); + UseMsg(); + } - if (screenNum >= vfbNumScreens) - vfbNumScreens = screenNum + 1; - lastScreen = screenNum; - return 3; - } + if (screenNum >= vfbNumScreens) + vfbNumScreens = screenNum + 1; + lastScreen = screenNum; + return 3; + } - if (strcmp (argv[i], "-pixdepths") == 0) /* -pixdepths list-of-depth */ - { - int depth, ret = 1; + if (strcmp (argv[i], "-pixdepths") == 0) /* -pixdepths list-of-depth */ + { + int depth, ret = 1; - if (++i >= argc) UseMsg(); - while ((i < argc) && (depth = atoi(argv[i++])) != 0) + if (++i >= argc) UseMsg(); + while ((i < argc) && (depth = atoi(argv[i++])) != 0) + { + if (depth < 0 || depth > 32) + { + ErrorF("Invalid pixmap depth %d\n", depth); + UseMsg(); + } + vfbPixmapDepths[depth] = TRUE; + ret++; + } + return ret; + } + + if (strcmp (argv[i], "+render") == 0) /* +render */ { - if (depth < 0 || depth > 32) - { - ErrorF("Invalid pixmap depth %d\n", depth); - UseMsg(); - } - vfbPixmapDepths[depth] = TRUE; - ret++; + Render = TRUE; + return 1; } - return ret; - } - - if (strcmp (argv[i], "+render") == 0) /* +render */ - { - Render = TRUE; - return 1; - } - if (strcmp (argv[i], "-render") == 0) /* -render */ - { - Render = FALSE; - return 1; - } - - if (strcmp (argv[i], "-blackpixel") == 0) /* -blackpixel n */ - { - Pixel pix; - if (++i >= argc) UseMsg(); - pix = atoi(argv[i]); - if (-1 == lastScreen) + if (strcmp (argv[i], "-render") == 0) /* -render */ { - int i; - for (i = 0; i < MAXSCREENS; i++) - { - vfbScreens[i].blackPixel = pix; - } + Render = FALSE; + return 1; } - else + + if (strcmp (argv[i], "-blackpixel") == 0) /* -blackpixel n */ { - vfbScreens[lastScreen].blackPixel = pix; + Pixel pix; + if (++i >= argc) UseMsg(); + pix = atoi(argv[i]); + if (-1 == lastScreen) + { + int i; + for (i = 0; i < MAXSCREENS; i++) + { + vfbScreens[i].blackPixel = pix; + } + } + else + { + vfbScreens[lastScreen].blackPixel = pix; + } + return 2; } - return 2; - } - if (strcmp (argv[i], "-whitepixel") == 0) /* -whitepixel n */ - { - Pixel pix; - if (++i >= argc) UseMsg(); - pix = atoi(argv[i]); - if (-1 == lastScreen) + if (strcmp (argv[i], "-whitepixel") == 0) /* -whitepixel n */ { - int i; - for (i = 0; i < MAXSCREENS; i++) - { - vfbScreens[i].whitePixel = pix; - } + Pixel pix; + if (++i >= argc) UseMsg(); + pix = atoi(argv[i]); + if (-1 == lastScreen) + { + int i; + for (i = 0; i < MAXSCREENS; i++) + { + vfbScreens[i].whitePixel = pix; + } + } + else + { + vfbScreens[lastScreen].whitePixel = pix; + } + return 2; } - else + + if (strcmp (argv[i], "-linebias") == 0) /* -linebias n */ { - vfbScreens[lastScreen].whitePixel = pix; + unsigned int linebias; + if (++i >= argc) UseMsg(); + linebias = atoi(argv[i]); + if (-1 == lastScreen) + { + int i; + for (i = 0; i < MAXSCREENS; i++) + { + vfbScreens[i].lineBias = linebias; + } + } + else + { + vfbScreens[lastScreen].lineBias = linebias; + } + return 2; } - return 2; - } - if (strcmp (argv[i], "-linebias") == 0) /* -linebias n */ - { - unsigned int linebias; - if (++i >= argc) UseMsg(); - linebias = atoi(argv[i]); - if (-1 == lastScreen) +#ifdef HAS_MMAP + if (strcmp (argv[i], "-fbdir") == 0) /* -fbdir directory */ { - int i; - for (i = 0; i < MAXSCREENS; i++) - { - vfbScreens[i].lineBias = linebias; - } + if (++i >= argc) UseMsg(); + pfbdir = argv[i]; + fbmemtype = MMAPPED_FILE_FB; + return 2; } - else +#endif /* HAS_MMAP */ + +#ifdef HAS_SHM + if (strcmp (argv[i], "-shmem") == 0) /* -shmem */ { - vfbScreens[lastScreen].lineBias = linebias; + fbmemtype = SHARED_MEMORY_FB; + return 1; } - return 2; - } - - if (strcmp(argv[i], "-geometry") == 0) - { - if (++i >= argc) UseMsg(); - if (sscanf(argv[i],"%dx%d",&vfbScreens[0].width, - &vfbScreens[0].height) != 2) { - ErrorF("Invalid geometry %s\n", argv[i]); - UseMsg(); +#endif + + if (strcmp(argv[i], "-geometry") == 0) + { + if (++i >= argc) UseMsg(); + if (sscanf(argv[i],"%dx%d",&vfbScreens[0].width, + &vfbScreens[0].height) != 2) { + ErrorF("Invalid geometry %s\n", argv[i]); + UseMsg(); + } + return 2; } - return 2; - } - - if (strcmp(argv[i], "-depth") == 0) - { - if (++i >= argc) UseMsg(); - vfbScreens[0].depth = atoi(argv[i]); - return 2; - } - - if (strcmp(argv[i], "-pixelformat") == 0) - { - char rgbbgr[4]; - int bits1, bits2, bits3; - if (++i >= argc) UseMsg(); - if (sscanf(argv[i], "%3s%1d%1d%1d", rgbbgr,&bits1,&bits2,&bits3) < 4) { - ErrorF("Invalid pixel format %s\n", argv[i]); - UseMsg(); + + if (strcmp(argv[i], "-depth") == 0) + { + if (++i >= argc) UseMsg(); + vfbScreens[0].depth = atoi(argv[i]); + return 2; } + if (strcmp(argv[i], "-pixelformat") == 0) + { + char rgbbgr[4]; + int bits1, bits2, bits3; + if (++i >= argc) UseMsg(); + if (sscanf(argv[i], "%3s%1d%1d%1d", rgbbgr,&bits1,&bits2,&bits3) < 4) { + ErrorF("Invalid pixel format %s\n", argv[i]); + UseMsg(); + } + #define SET_PIXEL_FORMAT(vfbScreen) \ (vfbScreen).pixelFormatDefined = TRUE; \ (vfbScreen).depth = bits1 + bits2 + bits3; \ @@ -524,55 +547,55 @@ int ddxProcessArgument(int argc, char *argv[], int i) UseMsg(); \ } - if (-1 == lastScreen) - { - int i; - for (i = 0; i < MAXSCREENS; i++) - { - SET_PIXEL_FORMAT(vfbScreens[i]); - } + if (-1 == lastScreen) + { + int i; + for (i = 0; i < MAXSCREENS; i++) + { + SET_PIXEL_FORMAT(vfbScreens[i]); + } + } + else + { + SET_PIXEL_FORMAT(vfbScreens[lastScreen]); + } + + return 2; } - else + + if (strcmp(argv[i], "-inetd") == 0) { - SET_PIXEL_FORMAT(vfbScreens[lastScreen]); + dup2(0,3); + vncInetdSock = 3; + close(2); + + if (!displaySpecified) { + int port = network::TcpSocket::getSockPort(vncInetdSock); + int displayNum = port - 5900; + if (displayNum < 0 || displayNum > 99 || !displayNumFree(displayNum)) { + for (displayNum = 1; displayNum < 100; displayNum++) + if (displayNumFree(displayNum)) break; + + if (displayNum == 100) + FatalError("Xvnc error: no free display number for -inetd"); + } + + display = displayNumStr; + sprintf(displayNumStr, "%d", displayNum); + } + + return 1; } - - return 2; - } - - if (strcmp(argv[i], "-inetd") == 0) - { - dup2(0,3); - vncInetdSock = 3; - close(2); - - if (!displaySpecified) { - int port = network::TcpSocket::getSockPort(vncInetdSock); - int displayNum = port - 5900; - if (displayNum < 0 || displayNum > 99 || !displayNumFree(displayNum)) { - for (displayNum = 1; displayNum < 100; displayNum++) - if (displayNumFree(displayNum)) break; - - if (displayNum == 100) - FatalError("Xvnc error: no free display number for -inetd"); - } - - display = displayNumStr; - sprintf(displayNumStr, "%d", displayNum); + + if (rfb::Configuration::setParam(argv[i])) + return 1; + + if (argv[i][0] == '-' && i+1 < argc) { + if (rfb::Configuration::setParam(&argv[i][1], argv[i+1])) + return 2; } - - return 1; - } - - if (rfb::Configuration::setParam(argv[i])) - return 1; - - if (argv[i][0] == '-' && i+1 < argc) { - if (rfb::Configuration::setParam(&argv[i][1], argv[i+1])) - return 2; - } - - return 0; + + return 0; } #ifdef DDXTIME /* from ServerOSDefines */ -- 2.39.5