diff --git a/copyrect.cc b/copyrect.cc index a92002b..c32a4e0 100644 --- a/copyrect.cc +++ b/copyrect.cc @@ -35,8 +35,7 @@ segment "VNCview GS"; void DoCopyRect (void) { /* For use with GetContentOrigin() */ - unsigned long contentOrigin; - Point * contentOriginPtr = (void *) &contentOrigin; + Origin contentOrigin; Rect srcRect; unsigned int *dataPtr; /* Pointer to TCP data that was read */ @@ -46,11 +45,11 @@ void DoCopyRect (void) { if (! DoReadTCP ((unsigned long) 4)) return; /* Not ready yet; wait */ - contentOrigin = GetContentOrigin(vncWindow); + contentOrigin.l = GetContentOrigin(vncWindow); dataPtr = (unsigned int *) ((char *) (*readBufferHndl)); - srcRect.h1 = SwapBytes2(dataPtr[0]) - contentOriginPtr->h; - srcRect.v1 = SwapBytes2(dataPtr[1]) - contentOriginPtr->v; + srcRect.h1 = SwapBytes2(dataPtr[0]) - contentOrigin.pt.h; + srcRect.v1 = SwapBytes2(dataPtr[1]) - contentOrigin.pt.v; srcRect.h2 = srcRect.h1 + rectWidth; srcRect.v2 = srcRect.v1 + rectHeight; @@ -67,7 +66,7 @@ void DoCopyRect (void) { * with a grafPort structure, which in turn starts with a LocInfo structure. */ PPToPort((struct LocInfo *) vncWindow, &srcRect, - rectX - contentOriginPtr->h, rectY - contentOriginPtr->v, modeCopy); + rectX - contentOrigin.pt.h, rectY - contentOrigin.pt.v, modeCopy); done: NextRect(); /* Prepare for next rect */ diff --git a/desktopsize.cc b/desktopsize.cc index b6c041d..980900b 100644 --- a/desktopsize.cc +++ b/desktopsize.cc @@ -38,8 +38,7 @@ extern pascal void SetContentOrigin2(Word, Word, Word, GrafPortPtr) inline(0x570 void DoDesktopSize (void) { #define screenTooBigError 2010 - unsigned long contentOrigin; - Point * contentOriginPtr = (void *) &contentOrigin; + Origin contentOrigin; unsigned int newX, newY; Boolean changeOrigin = FALSE; unsigned int oldWinHeight, oldWinWidth; @@ -64,15 +63,15 @@ void DoDesktopSize (void) { SizeWindow(winWidth, winHeight, vncWindow); /* Scroll if area displayed is going away */ - contentOrigin = GetContentOrigin(vncWindow); - newX = contentOriginPtr->h; - newY = contentOriginPtr->v; + contentOrigin.l = GetContentOrigin(vncWindow); + newX = contentOrigin.pt.h; + newY = contentOrigin.pt.v; - if (contentOriginPtr->h + winWidth > fbWidth) { + if (contentOrigin.pt.h + winWidth > fbWidth) { newX = fbWidth - winWidth; changeOrigin = TRUE; } - if (contentOriginPtr->v + winHeight > fbHeight) { + if (contentOrigin.pt.v + winHeight > fbHeight) { newY = fbHeight - winHeight; changeOrigin = TRUE; } diff --git a/hextile.cc b/hextile.cc index 8535c9d..5ea76ad 100644 --- a/hextile.cc +++ b/hextile.cc @@ -70,7 +70,7 @@ static void HexNextTile (void) { } -static void HexRawDraw (Point *contentOriginPtr, int rectWidth, int rectHeight) { +static void HexRawDraw (Origin contentOrigin, int rectWidth, int rectHeight) { unsigned int i, j; /* Loop indices */ unsigned int n = 0; unsigned char *dataPtr; @@ -164,8 +164,8 @@ static void HexRawDraw (Point *contentOriginPtr, int rectWidth, int rectHeight) srcRect.h2 = hexTileWidth; PPToPort(&srcLocInfo, &srcRect, - rectX + hexXTileNum * 16 - contentOriginPtr->h, - rectY + hexYTileNum * 16 - contentOriginPtr->v, modeCopy); + rectX + hexXTileNum * 16 - contentOrigin.pt.h, + rectY + hexYTileNum * 16 - contentOrigin.pt.v, modeCopy); } /* The macros below are used in HexDispatch() */ @@ -180,10 +180,10 @@ static void HexRawDraw (Point *contentOriginPtr, int rectWidth, int rectHeight) #define HexDispatch_DrawRect(color, X, Y, width, height) do { \ SetSolidPenPat((color)); \ - drawingRect.h1 = rectX + hexXTileNum * 16 + (X) - contentOriginPtr->h; \ - drawingRect.v1 = rectY + hexYTileNum * 16 + (Y) - contentOriginPtr->v; \ - drawingRect.h2 = rectX + hexXTileNum * 16 + (X) + (width) - contentOriginPtr->h; \ - drawingRect.v2 = rectY + hexYTileNum * 16 + (Y) + (height) - contentOriginPtr->v; \ + drawingRect.h1 = rectX + hexXTileNum * 16 + (X) - contentOrigin.pt.h; \ + drawingRect.v1 = rectY + hexYTileNum * 16 + (Y) - contentOrigin.pt.v; \ + drawingRect.h2 = rectX + hexXTileNum * 16 + (X) + (width) - contentOrigin.pt.h; \ + drawingRect.v2 = rectY + hexYTileNum * 16 + (Y) + (height) - contentOrigin.pt.v; \ PaintRect(&drawingRect); \ } while (0) @@ -197,15 +197,14 @@ void HexDispatch (void) { static unsigned int numSubrects; int i; /* For use with GetContentOrigin() */ - unsigned long contentOrigin; - Point * contentOriginPtr = (void *) &contentOrigin; + Origin contentOrigin; int tileBytes; unsigned int srX, srY, srWidth, srHeight; Rect drawingRect; static unsigned char pixels[128]; unsigned char *dataPtr; - contentOrigin = GetContentOrigin(vncWindow); + contentOrigin.l = GetContentOrigin(vncWindow); SetPort(vncWindow); /* If we don't have the next bit of needed data yet, return. */ @@ -237,7 +236,7 @@ void HexDispatch (void) { break; case hexWaitingForRawData: - HexRawDraw(contentOriginPtr, hexTileWidth, hexTileHeight); + HexRawDraw(contentOrigin, hexTileWidth, hexTileHeight); HexDispatch_NextTile(); break; diff --git a/mouse.cc b/mouse.cc index ccfe756..2abd22c 100644 --- a/mouse.cc +++ b/mouse.cc @@ -46,8 +46,7 @@ void DoPointerEvent (void) { } pointerEventStruct = { 5 /* message type */ }; Point mouseCoords; - unsigned long contentOrigin; - Point * contentOriginPtr = (void *) &contentOrigin; + Origin contentOrigin; RegionHndl contentRgnHndl; unsigned int oldButtonMask; GrafPortPtr winPtr; @@ -73,9 +72,9 @@ void DoPointerEvent (void) { GlobalToLocal(&mouseCoords); - contentOrigin = GetContentOrigin(vncWindow); - mouseCoords.h += contentOriginPtr->h; - mouseCoords.v += contentOriginPtr->v; + contentOrigin.l = GetContentOrigin(vncWindow); + mouseCoords.h += contentOrigin.pt.h; + mouseCoords.v += contentOrigin.pt.v; mouseCoords.h = SwapBytes2(mouseCoords.h); mouseCoords.v = SwapBytes2(mouseCoords.v); diff --git a/raw.cc b/raw.cc index 41df6d7..460302d 100644 --- a/raw.cc +++ b/raw.cc @@ -72,8 +72,7 @@ void RawDraw (void) { static EventRecord unusedEventRec; /* For use with GetContentOrigin() */ - unsigned long contentOrigin; - Point * contentOriginPtr = (void *) &contentOrigin; + Origin contentOrigin; SetPort(vncWindow); /* Drawing in VNC window */ dataPtr = (unsigned char *) *readBufferHndl; @@ -84,28 +83,28 @@ void RawDraw (void) { if (checkBounds) { Rect drawingRect; - contentOrigin = GetContentOrigin(vncWindow); - drawingRect.h1 = rectX - contentOriginPtr->h; - drawingRect.h2 = rectX - contentOriginPtr->h + rectWidth; - drawingRect.v1 = rectY - contentOriginPtr->v + drawingLine; - drawingRect.v2 = rectY - contentOriginPtr->v + rectHeight; + contentOrigin.l = GetContentOrigin(vncWindow); + drawingRect.h1 = rectX - contentOrigin.pt.h; + drawingRect.h2 = rectX - contentOrigin.pt.h + rectWidth; + drawingRect.v1 = rectY - contentOrigin.pt.v + drawingLine; + drawingRect.v2 = rectY - contentOrigin.pt.v + rectHeight; if (!RectInRgn(&drawingRect, GetVisHandle())) { StopRawDrawing(); return; } - else if (rectY + drawingLine < contentOriginPtr->v) { + else if (rectY + drawingLine < contentOrigin.pt.v) { destPtr += (unsigned long)lineBytes * - (contentOriginPtr->v - rectY - drawingLine); - drawingLine = contentOriginPtr->v - rectY; + (contentOrigin.pt.v - rectY - drawingLine); + drawingLine = contentOrigin.pt.v - rectY; if (drawingLine >= rectHeight) { /* Sanity check */ StopRawDrawing(); return; } } - else if (rectY + rectHeight - 1 > contentOriginPtr->v + winHeight) - rectHeight = contentOriginPtr->v + winHeight - rectY + 1; + else if (rectY + rectHeight - 1 > contentOrigin.pt.v + winHeight) + rectHeight = contentOrigin.pt.v + winHeight - rectY + 1; checkBounds = FALSE; } @@ -149,9 +148,9 @@ void RawDraw (void) { if (pixels > 613 && !(drawingLine & 0x03)) { /* Draw every 4th line */ srcRect.v2 = drawingLine; - contentOrigin = GetContentOrigin(vncWindow); - PPToPort(&srcLocInfo, &srcRect, rectX - contentOriginPtr->h, - rectY + srcRect.v1 - contentOriginPtr->v, modeCopy); + contentOrigin.l = GetContentOrigin(vncWindow); + PPToPort(&srcLocInfo, &srcRect, rectX - contentOrigin.pt.h, + rectY + srcRect.v1 - contentOrigin.pt.v, modeCopy); srcRect.v1 = drawingLine; } @@ -160,9 +159,9 @@ void RawDraw (void) { /* Draw final rect, if necessary */ if (drawingLine > srcRect.v1) { srcRect.v2 = drawingLine; - contentOrigin = GetContentOrigin(vncWindow); - PPToPort(&srcLocInfo, &srcRect, rectX - contentOriginPtr->h, - rectY + srcRect.v1 - contentOriginPtr->v, modeCopy); + contentOrigin.l = GetContentOrigin(vncWindow); + PPToPort(&srcLocInfo, &srcRect, rectX - contentOrigin.pt.h, + rectY + srcRect.v1 - contentOrigin.pt.v, modeCopy); } StopRawDrawing(); return; @@ -189,8 +188,7 @@ void RawDraw (void) { static void RawDrawLine (void) { unsigned int i; unsigned char *dataPtr; - unsigned long contentOrigin; - Point * contentOriginPtr = (void *) &contentOrigin; + Origin contentOrigin; if (hRez == 640) { if (rectWidth & 0x03) /* Width not an exact multiple of 4 */ @@ -262,9 +260,9 @@ static void RawDrawLine (void) { } DoneWithReadBuffer(); - contentOrigin = GetContentOrigin(vncWindow); - PPToPort(&srcLocInfo, &srcRect, rectX - contentOriginPtr->h, - rectY - contentOriginPtr->v, modeCopy); + contentOrigin.l = GetContentOrigin(vncWindow); + PPToPort(&srcLocInfo, &srcRect, rectX - contentOrigin.pt.h, + rectY - contentOrigin.pt.v, modeCopy); free(srcLocInfo.ptrToPixImage); /* Allocated as destPtr */ TCPIPPoll(); @@ -315,11 +313,10 @@ void DoRawRect (void) { * update requests for multiple screen regions due to scrolling. */ if (lineBytes * rectHeight >= DESTBUF_SIZE) { - unsigned long contentOrigin; - Point * contentOriginPtr = (void *) &contentOrigin; + Origin contentOrigin; - contentOrigin = GetContentOrigin(vncWindow); - SendFBUpdateRequest(FALSE, contentOriginPtr->h, contentOriginPtr->v, + contentOrigin.l = GetContentOrigin(vncWindow); + SendFBUpdateRequest(FALSE, contentOrigin.pt.h, contentOrigin.pt.v, winWidth, winHeight); StopRawDrawing(); return; diff --git a/vncdisplay.cc b/vncdisplay.cc index f26447b..f43858a 100644 --- a/vncdisplay.cc +++ b/vncdisplay.cc @@ -279,13 +279,12 @@ void NextRect (void) { //printf("New Rect: X = %u, Y = %u, Width = %u, Height = %u\n", rectX, rectY, rectWidth, rectHeight); } else { /* No more rectangles from last update */ - unsigned long contentOrigin; - Point * contentOriginPtr = (void *) &contentOrigin; + Origin contentOrigin; DoneWithReadBuffer(); - contentOrigin = GetContentOrigin(vncWindow); - SendFBUpdateRequest(TRUE, contentOriginPtr->h, contentOriginPtr->v, + contentOrigin.l = GetContentOrigin(vncWindow); + SendFBUpdateRequest(TRUE, contentOrigin.pt.h, contentOrigin.pt.v, winWidth, winHeight); } } diff --git a/vncdisplay.h b/vncdisplay.h index adc2916..6fc03eb 100644 --- a/vncdisplay.h +++ b/vncdisplay.h @@ -1,3 +1,8 @@ +typedef union Origin { + unsigned long l; + Point pt; +} Origin; + extern unsigned int fbHeight; extern unsigned int fbWidth;