?? xvnc.cc
字號(hào):
/* Copyright (c) 1993 X Consortium Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.Permission is hereby granted, free of charge, to any person obtaininga copy of this software and associated documentation files (the"Software"), to deal in the Software without restriction, includingwithout limitation the rights to use, copy, modify, merge, publish,distribute, sublicense, and/or sell copies of the Software, and topermit persons to whom the Software is furnished to do so, subject tothe following conditions:The above copyright notice and this permission notice shall be includedin all copies or substantial portions of the Software.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESSOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OFMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OROTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OROTHER DEALINGS IN THE SOFTWARE.Except as contained in this notice, the name of the X Consortium shallnot be used in advertising or otherwise to promote the sale, use orother dealings in this Software without prior written authorizationfrom the X Consortium.*/#include <rfb/Configuration.h>#include <rfb/Logger_stdio.h>#include <rfb/LogWriter.h>#include <network/TcpSocket.h>#include "vncExtInit.h"extern "C" {#define class c_class#define public c_public#define xor c_xor#define and c_and#ifdef WIN32#include <X11/Xwinsock.h>#endif#include <stdio.h>#include "X11/X.h"#define NEED_EVENTS#include "X11/Xproto.h"#include "X11/Xos.h"#include "scrnintstr.h"#include "servermd.h"#define PSZ 8#include "cfb.h"#include "mi.h"#include "mibstore.h"#include "colormapst.h"#include "gcstruct.h"#include "input.h"#include "mipointer.h"#include <sys/types.h>#include <sys/stat.h>#include <errno.h>#ifndef WIN32#include <sys/param.h>#endif#include <X11/XWDFile.h>#include "dix.h"#include "miline.h"#include "inputstr.h"#include "keysym.h" extern int defaultColorVisualClass; extern char buildtime[];#undef class#undef public#undef xor#undef and extern Bool cfb16ScreenInit(ScreenPtr, pointer, int, int, int, int, int); extern Bool cfb32ScreenInit(ScreenPtr, pointer, int, int, int, int, int); extern Bool cfb16CreateGC(GCPtr); extern Bool cfb32CreateGC(GCPtr); extern void cfb16GetSpans(DrawablePtr, int, DDXPointPtr, int*, int, char*); extern void cfb32GetSpans(DrawablePtr, int, DDXPointPtr, int*, int, char*); extern void cfb16GetImage(DrawablePtr, int, int, int, int, unsigned int, unsigned long, char*); extern void cfb32GetImage(DrawablePtr, int, int, int, int, unsigned int, unsigned long, char*);}#define XVNCVERSION "Free Edition 4.1.2"#define XVNCCOPYRIGHT ("Copyright (C) 2002-2005 RealVNC Ltd.\n" \ "See http://www.realvnc.com for information on VNC.\n")extern char *display;extern int monitorResolution;#define VFB_DEFAULT_WIDTH 1024#define VFB_DEFAULT_HEIGHT 768#define VFB_DEFAULT_DEPTH 16#define VFB_DEFAULT_WHITEPIXEL 0xffff#define VFB_DEFAULT_BLACKPIXEL 0#define VFB_DEFAULT_LINEBIAS 0#define XWD_WINDOW_NAME_LEN 60typedef struct{ int scrnum; int width; int paddedWidth; int paddedWidthInBytes; int height; int depth; int bitsPerPixel; int sizeInBytes; int ncolors; char *pfbMemory; XWDColor *pXWDCmap; XWDFileHeader *pXWDHeader; Pixel blackPixel; Pixel whitePixel; unsigned int lineBias; Bool pixelFormatDefined; Bool rgbNotBgr; int redBits, greenBits, blueBits;} vfbScreenInfo, *vfbScreenInfoPtr;static int vfbNumScreens;static vfbScreenInfo vfbScreens[MAXSCREENS];static Bool vfbPixmapDepths[33];static char needswap = 0;static int lastScreen = -1;static bool displaySpecified = false;static bool wellKnownSocketsCreated = false;static char displayNumStr[16];#define swapcopy16(_dst, _src) \ if (needswap) { CARD16 _s = _src; cpswaps(_s, _dst); } \ else _dst = _src;#define swapcopy32(_dst, _src) \ if (needswap) { CARD32 _s = _src; cpswapl(_s, _dst); } \ else _dst = _src;static void vfbInitializePixmapDepths(){ int i; vfbPixmapDepths[1] = TRUE; /* always need bitmaps */ for (i = 2; i <= 32; i++) vfbPixmapDepths[i] = FALSE;}static void vfbInitializeDefaultScreens(){ int i; for (i = 0; i < MAXSCREENS; i++) { vfbScreens[i].scrnum = i; vfbScreens[i].width = VFB_DEFAULT_WIDTH; vfbScreens[i].height = VFB_DEFAULT_HEIGHT; vfbScreens[i].depth = VFB_DEFAULT_DEPTH; vfbScreens[i].blackPixel = VFB_DEFAULT_BLACKPIXEL; vfbScreens[i].whitePixel = VFB_DEFAULT_WHITEPIXEL; vfbScreens[i].lineBias = VFB_DEFAULT_LINEBIAS; vfbScreens[i].pixelFormatDefined = FALSE; vfbScreens[i].pfbMemory = NULL; } vfbNumScreens = 1;}static int vfbBitsPerPixel(int depth){ if (depth == 1) return 1; else if (depth <= 8) return 8; else if (depth <= 16) return 16; else return 32;}extern "C" { /* ddxInitGlobals - called by |InitGlobals| from os/util.c in XOrg */ void ddxInitGlobals(void) { } void ddxGiveUp() { int i; /* clean up the framebuffers */ for (i = 0; i < vfbNumScreens; i++) { Xfree(vfbScreens[i].pXWDHeader); } // Remove any unix domain sockets left behind. I think these should // already have been cleaned up but it doesn't hurt to try again. if (wellKnownSocketsCreated) { char sockName[64]; sprintf(sockName,"/tmp/.X11-unix/X%s",display); unlink(sockName); sprintf(sockName,"/usr/spool/sockets/X11/%s",display); unlink(sockName); } } void AbortDDX() { ddxGiveUp(); } void OsVendorInit() {} void OsVendorFatalError() {} void ddxUseMsg() { ErrorF("\nXvnc %s - built %s\n%s", XVNCVERSION, buildtime, XVNCCOPYRIGHT); ErrorF("Underlying X server release %d, %s\n\n", VENDOR_RELEASE, VENDOR_STRING); ErrorF("-screen scrn WxHxD set screen's width, height, depth\n"); ErrorF("-pixdepths list-of-int support given pixmap depths\n"); ErrorF("-linebias n adjust thin line pixelization\n"); ErrorF("-blackpixel n pixel value for black\n"); ErrorF("-whitepixel n pixel value for white\n"); ErrorF("-geometry WxH set screen 0's width, height\n"); ErrorF("-depth D set screen 0's depth\n"); ErrorF("-pixelformat fmt set pixel format (rgbNNN or bgrNNN)\n"); ErrorF("-inetd has been launched from inetd\n"); ErrorF("\nVNC parameters:\n"); fprintf(stderr,"\n" "Parameters can be turned on with -<param> or off with -<param>=0\n" "Parameters which take a value can be specified as " "-<param> <value>\n" "Other valid forms are <param>=<value> -<param>=<value> " "--<param>=<value>\n" "Parameter names are case-insensitive. The parameters are:\n\n"); rfb::Configuration::listParams(79, 14); }}static bool displayNumFree(int num){ 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 firstTime = TRUE; if (firstTime) { vfbInitializeDefaultScreens(); vfbInitializePixmapDepths(); firstTime = FALSE; rfb::initStdIOLoggers(); rfb::LogWriter::setLogParams("*:stderr:30"); } if (argv[i][0] == ':') displaySpecified = 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) { 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 (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 (depth < 0 || depth > 32) { ErrorF("Invalid pixmap depth %d\n", depth); UseMsg(); } vfbPixmapDepths[depth] = TRUE; ret++; } return ret; } if (strcmp (argv[i], "-blackpixel") == 0) /* -blackpixel n */ { 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; } if (strcmp (argv[i], "-whitepixel") == 0) /* -whitepixel n */ { 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; } if (strcmp (argv[i], "-linebias") == 0) /* -linebias n */ { 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; } 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; } 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) \
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -