mirror of
https://github.com/sheumann/VNCviewGS.git
synced 2024-06-10 11:29:29 +00:00
Compare commits
9 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
b0fc30052e | ||
|
15ae230609 | ||
|
b4c8941871 | ||
|
0d491e2402 | ||
|
ffa63e2bb4 | ||
|
4788d6ac0c | ||
|
1e7b5a13fe | ||
|
a11e065a35 | ||
|
26037d8c62 |
13
README
13
README
|
@ -56,15 +56,20 @@ Edit->Send Clipboard: Transfers the contents of the IIgs clipboard to the server
|
|||
VNC Server Interoperability
|
||||
VNCview GS should be able to connect with any VNC server that fully implements the RFB protocol as defined in RFC 6143 or earlier compatible specifications. Here is a list of some VNC servers; many others are also available.
|
||||
|
||||
Microsoft Windows, *nix (X11), and OS X: RealVNC, http://www.realvnc.com/
|
||||
OS X: Vine Server (OSXvnc), http://www.testplant.com/dlds/vine/
|
||||
*nix (X11) and OS X: x11vnc, http://www.karlrunge.com/x11vnc/
|
||||
Microsoft Windows, *nix (X11), and macOS: RealVNC, http://www.realvnc.com/
|
||||
macOS: Vine Server (OSXvnc), http://www.testplant.com/dlds/vine/
|
||||
*nix (X11) and macOS: x11vnc, http://www.karlrunge.com/x11vnc/
|
||||
|
||||
x11vnc is a good option, because it supports server-side display scaling, which is useful to fit more information on the IIgs screen.
|
||||
|
||||
VNCview GS does not work with the Screen Sharing functionality in OS X, because the Screen Sharing server does not support the pixel format that VNCview GS requires. The above servers can be used instead.
|
||||
VNCview GS does not work with the Screen Sharing functionality in macOS, because the Screen Sharing server does not support the pixel format that VNCview GS requires. The above servers can be used instead.
|
||||
|
||||
Version History
|
||||
1.0.2
|
||||
Support for typing non-ASCII characters
|
||||
Smoother transitions between 640 mode and 320 mode
|
||||
Improved UI responsiveness during raw pixel decoding
|
||||
|
||||
1.0.1
|
||||
Improved clipboard transfer routines, with support for non-ASCII characters
|
||||
Improvements to help the display "catch up" when content is changing rapidly
|
||||
|
|
16
README.md
16
README.md
|
@ -6,12 +6,13 @@ VNCview GS is a [Virtual Network Computing][0] client (viewer) for the Apple IIg
|
|||
[0]: https://en.wikipedia.org/wiki/Virtual_Network_Computing
|
||||
|
||||
__Binary downloads are on the [releases page][releases].__
|
||||
|
||||
[releases]: https://github.com/sheumann/VNCviewGS/releases
|
||||
|
||||
System Requirements
|
||||
-------------------
|
||||
* An Apple IIgs running System Software 6.0.1 or later
|
||||
* [Marinetti][1] ([latest version][2] recommended)
|
||||
* [Marinetti][1] ([version 3.0b9 or later][2] recommended for best performance)
|
||||
* Andrew Roughan's [Crypto Tool Set][3] (needed for password functionality)
|
||||
* A computer running a VNC server to which you have access
|
||||
|
||||
|
@ -64,16 +65,21 @@ VNC Server Interoperability
|
|||
---------------------------
|
||||
VNCview GS should be able to connect with any VNC server that fully implements the RFB protocol as defined in RFC 6143 or earlier compatible specifications. Here is a list of some VNC servers; many others are also available.
|
||||
|
||||
* Microsoft Windows, *nix (X11), and OS X: __RealVNC__, http://www.realvnc.com/
|
||||
* OS X: __Vine Server (OSXvnc)__, http://www.testplant.com/dlds/vine/
|
||||
* *nix (X11) and OS X: __x11vnc__, http://www.karlrunge.com/x11vnc/
|
||||
* Microsoft Windows, *nix (X11), and macOS: __RealVNC__, http://www.realvnc.com/
|
||||
* macOS: __Vine Server (OSXvnc)__, http://www.testplant.com/dlds/vine/
|
||||
* *nix (X11) and macOS: __x11vnc__, http://www.karlrunge.com/x11vnc/
|
||||
|
||||
x11vnc is a good option, because it supports server-side display scaling, which is useful to fit more information on the IIgs screen.
|
||||
|
||||
VNCview GS does not work with the Screen Sharing functionality in OS X, because the Screen Sharing server does not support the pixel format that VNCview GS requires. The above servers can be used instead.
|
||||
VNCview GS does not work with the Screen Sharing functionality in macOS, because the Screen Sharing server does not support the pixel format that VNCview GS requires. The above servers can be used instead.
|
||||
|
||||
Version History
|
||||
---------------
|
||||
##### 1.0.2
|
||||
* Support for typing non-ASCII characters
|
||||
* Smoother transitions between 640 mode and 320 mode
|
||||
* Improved UI responsiveness during raw pixel decoding
|
||||
|
||||
##### 1.0.1
|
||||
* Improved clipboard transfer routines, with support for non-ASCII characters
|
||||
* Improvements to help the display "catch up" when content is changing rapidly
|
||||
|
|
3
_config.yml
Normal file
3
_config.yml
Normal file
|
@ -0,0 +1,3 @@
|
|||
theme: jekyll-theme-dinky
|
||||
title: VNCview GS
|
||||
description: The VNC client for the Apple IIgs
|
36
keyboard.cc
36
keyboard.cc
|
@ -25,6 +25,25 @@ segment "VNCview GS";
|
|||
#include "vncdisplay.h"
|
||||
#include "keyboard.h"
|
||||
|
||||
static unsigned long macRomanToKeysym[128] = {
|
||||
/* 80 - 87 */ 0xc4, 0xc5, 0xc7, 0xc9, 0xd1, 0xd6, 0xdc, 0xe1,
|
||||
/* 88 - 8f */ 0xe0, 0xe2, 0xe4, 0xe3, 0xe5, 0xe7, 0xe9, 0xe8,
|
||||
/* 90 - 97 */ 0xea, 0xeb, 0xed, 0xec, 0xee, 0xef, 0xf1, 0xf3,
|
||||
/* 98 - 9f */ 0xf2, 0xf4, 0xf6, 0xf5, 0xfa, 0xf9, 0xfb, 0xfc,
|
||||
/* a0 - a7 */ 0x0af1, 0xb0, 0xa2, 0xa3, 0xa7, 0x01002022, 0xb6, 0xdf,
|
||||
/* a8 - af */ 0xae, 0xa9, 0x0ac9, 0xb4, 0xa8, 0x08bd, 0xc6, 0xd8,
|
||||
/* b0 - b7 */ 0x08c2, 0xb1, 0x08bc, 0x08be, 0xa5, 0xb5, 0x08ef, 0x01002211,
|
||||
/* b8 - bf */ 0x0100220F, 0x07f0, 0x08bf, 0xaa, 0xba, 0x07d9, 0xe6, 0xf8,
|
||||
/* c0 - c7 */ 0xbf, 0xa1, 0xac, 0x08d6, 0x08f6, 0x01002248, 0x01002206, 0xab,
|
||||
/* c8 - cf */ 0xbb, 0x0aae, 0xa0, 0xc0, 0xc3, 0xd5, 0x13bc, 0x13bd,
|
||||
/* d0 - d7 */ 0x0aaa, 0x0aa9, 0x0ad2, 0x0ad3, 0x0ad0, 0x0ad1, 0xf7, 0x010025CA,
|
||||
/* d8 - df */ 0xff, 0x13be, 0x01002044, 0xa4, 0x01002039, 0x0100203A, 0x0100FB01, 0x0100FB02,
|
||||
/* e0 - e7 */ 0x0af2, 0xb7, 0x0afd, 0x0afe, 0x0ad5, 0xc2, 0xca, 0xc1,
|
||||
/* e8 - ef */ 0xcb, 0xc8, 0xcd, 0xce, 0xcf, 0xcc, 0xd3, 0xd4,
|
||||
/* f0 - f7 */ 0x0100F8FF, 0xd2, 0xda, 0xdb, 0xd9, 0x02b9, 0x010002C6, 0x010002DC,
|
||||
/* f8 - ff */ 0xaf, 0x01a2, 0x01ff, 0x010002DA, 0xb8, 0x01bd, 0x01b2, 0x01b7,
|
||||
};
|
||||
|
||||
/* Send a KeyEvent message to the server
|
||||
*/
|
||||
void SendKeyEvent (BOOLEAN keyDownFlag, unsigned long key)
|
||||
|
@ -50,7 +69,7 @@ void SendKeyEvent (BOOLEAN keyDownFlag, unsigned long key)
|
|||
/* Process a key down event and send it on to the server. */
|
||||
void ProcessKeyEvent (void)
|
||||
{
|
||||
unsigned long key = myEvent.message & 0x0000007F;
|
||||
unsigned long key = myEvent.message & 0x000000FF;
|
||||
|
||||
if (viewOnlyMode)
|
||||
return;
|
||||
|
@ -82,10 +101,9 @@ void ProcessKeyEvent (void)
|
|||
}
|
||||
}
|
||||
|
||||
if (key == 0x7f)
|
||||
if (key == 0x7f) {
|
||||
key = 0xFF08; /* Delete -> BackSpace */
|
||||
|
||||
if (key < 0x20) {
|
||||
} else if (key < 0x20) {
|
||||
if (myEvent.modifiers & controlKey) {
|
||||
if (((myEvent.modifiers & shiftKey) ||
|
||||
(myEvent.modifiers & capsLock))
|
||||
|
@ -105,16 +123,10 @@ void ProcessKeyEvent (void)
|
|||
case 0x0A: key = 0xFF54; break; /* Down arrow */
|
||||
case 0x18: key = 0xFF0B; break; /* Clear / NumLock -> Clear */
|
||||
}
|
||||
} else if (key & 0x80) {
|
||||
key = macRomanToKeysym[key & 0x7f];
|
||||
}
|
||||
|
||||
/* Test if we seem to have a valid character and return if we don't.
|
||||
This should never return, unless there are bugs in this routine or
|
||||
TaskMaster gives us bogus keycodes. The test would need to be updated
|
||||
if we ever start generating valid keycodes outside of these ranges.
|
||||
*/
|
||||
if ((key & 0xFF80) != 0xFF00 && (key & 0xFF80) != 0x0000)
|
||||
return;
|
||||
|
||||
SendKeyEvent(TRUE, key);
|
||||
SendKeyEvent(FALSE, key);
|
||||
}
|
||||
|
|
11
raw.cc
11
raw.cc
|
@ -27,6 +27,8 @@ segment "VNCview GS";
|
|||
#include "readtcp.h"
|
||||
#include "raw.h"
|
||||
|
||||
#define EVENT_CHECK_INVERVAL 10 /* tick count between event checks */
|
||||
|
||||
/* Data on state of raw rectangle drawing routines */
|
||||
static unsigned int lineBytes; /* Number of bytes in a line of GS pixels */
|
||||
static unsigned long pixels;
|
||||
|
@ -68,11 +70,13 @@ void RawDraw (void) {
|
|||
unsigned int i; /* Loop indices */
|
||||
unsigned char *initialLineDataPtr;
|
||||
unsigned char *finalDestPtr;
|
||||
static EventRecord unusedEventRec;
|
||||
static EventRecord eventRec;
|
||||
unsigned long eventCheckTime;
|
||||
|
||||
/* For use with GetContentOrigin() */
|
||||
Origin contentOrigin;
|
||||
|
||||
eventCheckTime = TickCount() + EVENT_CHECK_INVERVAL;
|
||||
SetPort(vncWindow); /* Drawing in VNC window */
|
||||
|
||||
#if 0
|
||||
|
@ -182,10 +186,11 @@ void RawDraw (void) {
|
|||
* instead processing the minimum necessary periodic tasks and then
|
||||
* going straight to the next line of data.
|
||||
*/
|
||||
if (!(drawingLine & 15)) {
|
||||
if (EventAvail(0xFFFF, &unusedEventRec))
|
||||
if (TickCount() >= eventCheckTime) {
|
||||
if (EventAvail(0xFFFF, &eventRec))
|
||||
return;
|
||||
SystemTask(); /* Let periodic Desk Accesories do their things */
|
||||
eventCheckTime = eventRec.when + EVENT_CHECK_INVERVAL;
|
||||
}
|
||||
TCPIPPoll(); /* Let Marinetti keep processing data */
|
||||
} while (1);
|
||||
|
|
|
@ -124,16 +124,18 @@ static void ChangeResolution(int rez) {
|
|||
return; /* Already in right mode, so don't change things */
|
||||
}
|
||||
|
||||
/* Perform the basic procedure described in IIgs TN #4 */
|
||||
/* Perform the basic procedure described in IIgs TN #4,
|
||||
* with some adjustments to provide a smoother transition.
|
||||
*/
|
||||
CloseAllNDAs();
|
||||
QDAuxShutDown();
|
||||
SetMasterSCB(masterSCB | 0x100); /* To leave SHR screen active */
|
||||
QDShutDown();
|
||||
if (dpSpace == NULL)
|
||||
dpSpace = NewHandle(0x0300, userid(),
|
||||
attrLocked|attrFixed|attrNoCross|attrBank, 0x00000000);
|
||||
QDStartUp((Word) *dpSpace, (rez == 640) ? 0xC087 : 0xC000, 0, userid());
|
||||
QDStartUp((Word) *dpSpace, (rez == 640) ? 0xC187 : 0xC100, 0, userid());
|
||||
/* SCB 0x87 gives 640 mode with our custom gray palette */
|
||||
GrafOff();
|
||||
QDAuxStartUp();
|
||||
ClampMouse(0, (rez == 640) ? 639 : 319, 0, 199);
|
||||
HomeMouse();
|
||||
|
@ -143,7 +145,6 @@ static void ChangeResolution(int rez) {
|
|||
MenuNewRes();
|
||||
CtlNewRes();
|
||||
RefreshDesktop(NULL);
|
||||
GrafOn();
|
||||
|
||||
/* Position new connection window at default location for new mode */
|
||||
if (rez == 320) {
|
||||
|
|
|
@ -124,13 +124,14 @@ void DoConnect (void) {
|
|||
SysBeep();
|
||||
goto errorReturn;
|
||||
}
|
||||
|
||||
CloseConnectStatusWindow();
|
||||
DoClose(newConnWindow);
|
||||
|
||||
InitVNCWindow();
|
||||
|
||||
CloseConnectStatusWindow();
|
||||
InitCursor();
|
||||
|
||||
DoClose(newConnWindow);
|
||||
DisableMItem(fileNewConnection);
|
||||
|
||||
myEvent.wmTaskMask = 0x001D79FE; /* don't let TaskMaster process keys */
|
||||
|
|
|
@ -360,7 +360,7 @@ resource rMenuItem (fileQuit+noKB) { /* Quit menu item */
|
|||
|
||||
resource rAlertString (1) {
|
||||
"93:"
|
||||
"VNCview GS 1.0.1\n"
|
||||
"VNCview GS 1.0.2\n"
|
||||
"Copyright \$A9 2002\$D12016 by Stephen Heumann\n"
|
||||
"\n"
|
||||
"This program contains material from the ORCA/C Run-Time Libraries, "
|
||||
|
@ -372,7 +372,7 @@ resource rAlertString (1) {
|
|||
|
||||
resource rVersion (1) {
|
||||
{
|
||||
1,0,1, /* Version number */
|
||||
1,0,2, /* Version number */
|
||||
release, 0, /* Release version */
|
||||
},
|
||||
verUS, /* Region code */
|
||||
|
|
Loading…
Reference in New Issue
Block a user