--- microwin/src/drivers/vncserver.c 2005-06-15 09:38:19.000000000 -0700 +++ microwinold/src/drivers/vncserver.c 2005-12-18 14:11:53.000000000 -0800 @@ -5,7 +5,7 @@ * Derived from libVNCserver example * Copyright (C) 2001 Johannes E. Schindelin */ - +#include "rfb/rfb.h" #ifdef WIN32 #define sleep Sleep #else @@ -42,7 +42,7 @@ pthread_t httpd_thread; /* httpd server process thread */ #endif -#include "rfb/rfb.h" + #include rfbScreenInfoPtr rfbScreen; /* the RFB screen structure */ @@ -68,10 +68,13 @@ static void UndrawCursor() { +/* if ( clients_connected && rfbScreen->cursorIsDrawn ) { rfbUndrawCursor(rfbScreen); } + */ + ; } static void MarkRect( int x1, int y1, int x2, int y2 ) @@ -157,8 +160,8 @@ clients_connected--; } -//static enum rfbNewClientAction newclient(rfbClientPtr cl) -static void newclient( rfbClientPtr cl ) +static enum rfbNewClientAction newclient(rfbClientPtr cl) +//static void newclient( rfbClientPtr cl ) { clients_connected++; cl->clientGoneHook = clientgone; @@ -169,7 +172,7 @@ XRES, YRES, PSDOP_COPY ); #endif MarkRect( 0, 0, rfbScreen->width, rfbScreen->height ); -// return RFB_CLIENT_ACCEPT; + return RFB_CLIENT_ACCEPT; } @@ -202,9 +205,10 @@ if (rfbScreen->httpSock >= 0) { FD_SET(rfbScreen->httpSock, &fds); } + printf("waiting...."); nfds = select( max(rfbScreen->httpSock,rfbScreen->httpListenSock) + 1, &fds, NULL, NULL, NULL ); - httpCheckFds( rfbScreen ); + rfbHttpCheckFds( rfbScreen ); } while ( nfds > 0 ); return 0; } @@ -223,15 +227,15 @@ { int newbuttons = 0; - if ( buttonMask ) - newbuttons = MWBUTTON_L; + if (buttonMask & 1) newbuttons |= MWBUTTON_L; + if (buttonMask & 4) newbuttons |= MWBUTTON_R; GsHandleMouseStatus( x, y, newbuttons ); awakeGsSelect(); } - defaultPtrAddEvent(buttonMask, x, y, cl); + rfbDefaultPtrAddEvent(buttonMask, x, y, cl); } @@ -571,79 +575,79 @@ psd->StretchBlit = stubStretchBlit; /* Don't set bits x sample & samples x pixel, we'll do it later */ - rfbScreen = rfbGetScreen(&argc,argv,psd->xres,psd->yres,-1,-1,-1); + rfbScreen = rfbGetScreen(&argc,argv,psd->xres,psd->yres, 8, 1, psd->bpp / 8); if ( rfbScreen == NULL ) { EPRINTF( "Could not allocate RFB Screen!\n" ); exit(-1); } /* NOW set bits x sample & samples x pixel */ - +printf ("pixtype = %d.\n", psd->pixtype); switch(psd->pixtype) { case MWPF_TRUECOLOR332: /* 8 bpp */ - - rfbScreen->rfbServerFormat.redMax = 7; - rfbScreen->rfbServerFormat.greenMax = 7; - rfbScreen->rfbServerFormat.blueMax = 3; - - rfbScreen->rfbServerFormat.redShift = 5; - rfbScreen->rfbServerFormat.greenShift = 2; - rfbScreen->rfbServerFormat.blueShift = 0; + rfbScreen->serverFormat.redMax = 7; + rfbScreen->serverFormat.greenMax = 7; + rfbScreen->serverFormat.blueMax = 3; + + rfbScreen->serverFormat.redShift = 5; + rfbScreen->serverFormat.greenShift = 2; + rfbScreen->serverFormat.blueShift = 0; break; - case MWPF_TRUECOLOR565: - rfbScreen->rfbServerFormat.greenMax = 63; - rfbScreen->rfbServerFormat.redShift = 11; + case MWPF_TRUECOLOR565: + rfbScreen->serverFormat.greenMax = 63; + rfbScreen->serverFormat.redShift = 11; goto skip555; case MWPF_TRUECOLOR555: /* 16 bpp */ - rfbScreen->rfbServerFormat.greenMax = 31; - rfbScreen->rfbServerFormat.redShift = 10; + rfbScreen->serverFormat.greenMax = 31; + rfbScreen->serverFormat.redShift = 10; skip555: - rfbScreen->rfbServerFormat.redMax = 31; - rfbScreen->rfbServerFormat.blueMax = 31; + rfbScreen->serverFormat.redMax = 31; + rfbScreen->serverFormat.blueMax = 31; - rfbScreen->rfbServerFormat.greenShift = 5; - rfbScreen->rfbServerFormat.blueShift = 0; - + rfbScreen->serverFormat.greenShift = 5; + rfbScreen->serverFormat.blueShift = 0; break; + case MWPF_TRUECOLOR0888: /* 24/32 bpp */ case MWPF_TRUECOLOR888: - rfbScreen->rfbServerFormat.redMax = 255; - rfbScreen->rfbServerFormat.greenMax = 255; - rfbScreen->rfbServerFormat.blueMax = 255; - - rfbScreen->rfbServerFormat.redShift = 16; - rfbScreen->rfbServerFormat.greenShift = 8; - rfbScreen->rfbServerFormat.blueShift = 0; + rfbScreen->serverFormat.redMax = 255; + rfbScreen->serverFormat.greenMax = 255; + rfbScreen->serverFormat.blueMax = 255; + + rfbScreen->serverFormat.redShift = 16; + rfbScreen->serverFormat.greenShift = 8; + rfbScreen->serverFormat.blueShift = 0; break; default: + break; } /* Set bpp. If VNC does not support nano-X bpp, it will refuse connections, but nano-X will continue to run */ - rfbScreen->rfbServerFormat.bitsPerPixel = - rfbScreen->rfbServerFormat.depth = - rfbScreen->bitsPerPixel = rfbScreen->depth = psd->bpp; - + rfbScreen->serverFormat.bitsPerPixel = + rfbScreen->bitsPerPixel = + rfbScreen->serverFormat.depth = + rfbScreen->depth = psd->bpp; rfbScreen->desktopName = "nano-X"; rfbScreen->frameBuffer = psd->addr; - rfbScreen->rfbAlwaysShared = TRUE; + rfbScreen->alwaysShared = TRUE; rfbScreen->ptrAddEvent = handle_pointer; rfbScreen->kbdAddEvent = handle_keyboard; rfbScreen->newClientHook = newclient; - rfbScreen->dontSendFramebufferUpdate = FALSE; +// rfbScreen->dontSendFramebufferUpdate = FALSE; rfbScreen->cursor = NULL; - rfbScreen->httpDir = "/var/lib/httpd/"; - rfbScreen->rfbAuthPasswdData = "/etc/vncpasswd"; + rfbScreen->httpDir = NULL; + rfbScreen->authPasswdData = NULL; - rfbScreen->paddedWidthInBytes = psd->linelen * (psd->bpp >> 3) ; +// rfbScreen->paddedWidthInBytes = psd->linelen * (psd->bpp >> 3) ; /* initialize the server */ rfbInitServer(rfbScreen); @@ -652,14 +656,16 @@ pipe(fd); vnc_thread_fd = fd[0]; pthread_mutex_init( &eventMutex, NULL ); - rfbScreen->rfbDeferUpdateTime = 25; + rfbScreen->deferUpdateTime = 25; + rfbScreen->deferPtrUpdateTime = 300; // rfbScreen->backgroundLoop = TRUE; rfbRunEventLoop( rfbScreen, 0, TRUE); - pthread_create( &httpd_thread, 0, httpd_proc, 0 ); +// pthread_create( &httpd_thread, 0, httpd_proc, 0 ); #endif return 1; } + void GdCloseVNC( void ) {