RE: Shared device error on Hercules 4.3
"'\'Fish\' \(David B. Trout\)' [email protected] [hercules-390]" <[email protected]> Sun, 10 Nov 2019 14:20:37 -0800
| Newsgroups | gmane.comp.emulators.hercules390.general |
|---|---|
| Message-ID | <[email protected]> |
Bob Schmidt wrote:
> Thanks! I will open a github issue tomorrow.
Thank you.
In the mean time, please try the following patch:
diff -r -a -x .git -x 'msvc.AMD64.*' -x 'msvc.dllmod.*' -x 'msvc.debug.*' -x '*.suo' -x '*.ncb' -x '*.user' -x '*.htm' -x WORK -x DICTS -x FILES -x 'allTests.*' -x '*.rej' -x '*.orig' -x AutoBuildCount.h -x '*.cmp*' -x '*.comp*' -Nu hyperion-1/hstructs.h hyperion-0/hstructs.h
--- hyperion-1/hstructs.h 2019-10-07 20:21:54.153808600 -0700
+++ hyperion-0/hstructs.h 2019-11-10 13:11:30.316654700 -0800
@@ -1254,6 +1254,7 @@
U16 rmtport; /* Remote port number */
U16 rmtnum; /* Remote device number */
int rmtid; /* Remote Id */
+ int rmtver; /* Remote version level */
int rmtrel; /* Remote release level */
DBLWRD rmthdr; /* Remote header */
int rmtcomp; /* Remote compression parm */
diff -r -a -x .git -x 'msvc.AMD64.*' -x 'msvc.dllmod.*' -x 'msvc.debug.*' -x '*.suo' -x '*.ncb' -x '*.user' -x '*.htm' -x WORK -x DICTS -x FILES -x 'allTests.*' -x '*.rej' -x '*.orig' -x AutoBuildCount.h -x '*.cmp*' -x '*.comp*' -Nu hyperion-1/msgenu.h hyperion-0/msgenu.h
--- hyperion-1/msgenu.h 2019-10-10 21:09:04.111596400 -0700
+++ hyperion-0/msgenu.h 2019-11-10 14:07:36.730565100 -0800
@@ -631,7 +631,7 @@
#define HHC00718 "%1d:%04X Shared: error writing track %d"
#define HHC00719 "%1d:%04X Shared: remote error writing track %d %2.2X-%2.2X"
#define HHC00720 "%1d:%04X Shared: error in function %s: %s"
-#define HHC00721 "%1d:%04X Shared: connected to file %s"
+#define HHC00721 "%1d:%04X Shared: connected to v%d.%d server id %d file %s"
#define HHC00722 "%1d:%04X Shared: error in connect to file %s: %s"
#define HHC00723 "%1d:%04X Shared: error in send for %2.2X-%2.2X: %s"
#define HHC00724 "%1d:%04X Shared: not connected to file %s"
diff -r -a -x .git -x 'msvc.AMD64.*' -x 'msvc.dllmod.*' -x 'msvc.debug.*' -x '*.suo' -x '*.ncb' -x '*.user' -x '*.htm' -x WORK -x DICTS -x FILES -x 'allTests.*' -x '*.rej' -x '*.orig' -x AutoBuildCount.h -x '*.cmp*' -x '*.comp*' -Nu hyperion-1/shared.c hyperion-0/shared.c
--- hyperion-1/shared.c 2019-08-31 10:57:42.000000000 -0700
+++ hyperion-0/shared.c 2019-11-10 14:07:26.652947400 -0800
@@ -16,6 +16,7 @@
#include "opcode.h"
#include "devtype.h"
#include "ccwarn.h"
+#include "dasdblks.h"
DISABLE_GCC_UNUSED_SET_WARNING;
@@ -275,16 +276,27 @@
}
dev->numdevid = rc;
- /* Get the serial number */
- rc = clientRequest (dev, dev->serial, sizeof(dev->serial),
- SHRD_QUERY, SHRD_SERIAL, NULL, NULL);
- if (rc < 0)
- goto init_retry;
- else if (rc == 0 || rc > (int)sizeof(dev->serial))
+ /* Get the serial number if the server supports such a query */
+
+ if (dev->rmtver < SHARED_VERSION ||
+ (dev->rmtver == SHARED_VERSION &&
+ dev->rmtrel < SHARED_RELEASE))
{
- // "%1d:%04X Shared: error retrieving serial number"
- WRMSG( HHC00716, "S", LCSS_DEVNUM );
- return -1;
+ /* Generate a random serial number */
+ gen_dasd_serial( dev->serial );
+ }
+ else /* (server SHOULD support the SHRD_SERIAL query) */
+ {
+ rc = clientRequest (dev, dev->serial, sizeof(dev->serial),
+ SHRD_QUERY, SHRD_SERIAL, NULL, NULL);
+ if (rc < 0)
+ goto init_retry;
+ else if (rc == 0 || rc > (int)sizeof(dev->serial))
+ {
+ // "%1d:%04X Shared: error retrieving serial number"
+ WRMSG( HHC00716, "S", LCSS_DEVNUM );
+ return -1;
+ }
}
/* Indicate no active track */
@@ -553,16 +565,27 @@
}
dev->numdevchar = rc;
- /* Get the serial number */
- rc = clientRequest (dev, dev->serial, sizeof(dev->serial),
- SHRD_QUERY, SHRD_SERIAL, NULL, NULL);
- if (rc < 0)
- goto init_retry;
- else if (rc == 0 || rc > (int)sizeof(dev->serial))
+ /* Get the serial number if the server supports such a query */
+
+ if (dev->rmtver < SHARED_VERSION ||
+ (dev->rmtver == SHARED_VERSION &&
+ dev->rmtrel < SHARED_RELEASE))
{
- // "%1d:%04X Shared: error retrieving serial number"
- WRMSG( HHC00716, "S", LCSS_DEVNUM );
- return -1;
+ /* Generate a random serial number */
+ gen_dasd_serial( dev->serial );
+ }
+ else /* (server SHOULD support the SHRD_SERIAL query) */
+ {
+ rc = clientRequest (dev, dev->serial, sizeof(dev->serial),
+ SHRD_QUERY, SHRD_SERIAL, NULL, NULL);
+ if (rc < 0)
+ goto init_retry;
+ else if (rc == 0 || rc > (int)sizeof(dev->serial))
+ {
+ // "%1d:%04X Shared: error retrieving serial number"
+ WRMSG( HHC00716, "S", LCSS_DEVNUM );
+ return -1;
+ }
}
/* Indicate no active track */
@@ -1151,12 +1174,14 @@
{
dev->connected = 1; // (SHRD_CONNECT success)
dev->rmtid = fetch_hw( id ); // (must only do ONCE!!!)
- dev->rmtrel = flag & 0x0f;
+ dev->rmtver = flag >> 4; // (save server version)
+ dev->rmtrel = flag & 0x0f; // (save server release)
if (!dev->batch)
if (MLVL( VERBOSE ))
- // "%1d:%04X Shared: connected to file %s"
- WRMSG( HHC00721, "I", LCSS_DEVNUM, dev->filename );
+ // "%1d:%04X Shared: connected to v%d.%d server id %d file %s"
+ WRMSG( HHC00721, "I", LCSS_DEVNUM, dev->rmtver,
+ dev->rmtrel, dev->rmtid, dev->filename );
/*
* Negotiate compression - top 4 bits have the compression
* algorithms we support (00010000 -> libz; 00100000 ->bzip2,
@@ -1168,7 +1193,6 @@
* cckd or cfba then the server doesn't have to uncompress
* the data for us if we support the compression algorithm.
*/
-
if (dev->rmtcomp || dev->rmtcomps)
{
rc = clientRequest( dev, comp, 2, SHRD_COMPRESS,
--
"Fish" (David B. Trout)
Software Development Laboratories
http://www.softdevlabs.com
mail: [email protected]