Compare commits

...

9 Commits

Author SHA1 Message Date
Stephen Heumann
b0fc30052e Explicitly recommend Marinetti 3.0b9 or later for best performance. 2018-07-04 20:45:07 -05:00
Stephen Heumann
15ae230609 Update title/description for github.io site. 2017-04-20 21:46:03 -05:00
Stephen Heumann
b4c8941871 Set theme jekyll-theme-dinky 2017-04-20 21:41:37 -05:00
Stephen Heumann
0d491e2402 Fix README formatting 2017-04-20 21:41:02 -05:00
Stephen Heumann
ffa63e2bb4 Update version number 2016-09-30 17:43:29 -05:00
Stephen Heumann
4788d6ac0c Update README 2016-09-30 15:54:51 -05:00
Stephen Heumann
1e7b5a13fe Check for events during raw drawing based on time, rather than every 16 lines.
This avoids situations where the system may seem unresponsive for some time (primarily, I think, due to network processing being relatively slow).
2016-09-29 20:16:18 -05:00
Stephen Heumann
a11e065a35 Adjust the mode-switching code to provide smoother transitions.
This leaves the SHR screen active throughout the mode switch.
2016-09-28 23:22:16 -05:00
Stephen Heumann
26037d8c62 Support sending non-ASCII characters in key events.
This involves a mapping from the IIgs character set (MacRoman) to X11-style keysyms. This is possible for all of them, but not all of these are necessarily supported in every client.
2016-09-28 19:21:16 -05:00
9 changed files with 65 additions and 32 deletions

BIN
._README

Binary file not shown.

13
README
View File

@ -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

View File

@ -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
View File

@ -0,0 +1,3 @@
theme: jekyll-theme-dinky
title: VNCview GS
description: The VNC client for the Apple IIgs

View File

@ -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
View File

@ -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);

View File

@ -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) {

View File

@ -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 */

View File

@ -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 */