On 3/5/21 2:26 AM, Brian K. White wrote:
On 3/4/21 7:23 PM, Peter Vollan wrote:
When using dlplus in Linux, you must make sure that all of the files
in the desklink directory are in all CAPITAL letters. If not, then
files will appear to transfer but those files will actually be mostly
null characters. So "file.do" is unacceptable, it must be FILE.DO.
Just one file that does not follow this rule could screw up all of
your downloads. It took me years of tearing my hair out and a half
dozen serial to USB convertors before I deduced this.
Just a day or so ago I changed the default behavior not to mess with the
filenames.
Originally it was converting names to uppercase by default, but I think
not doing the job fully, so it just made things worse when something
didn't work and you're trying to figure out why not.
It was screwing me up while trying to work with REXCPM.
I reversed the default behavior so now it's "what you see is what you get".
I think I just fixed that uppercase option in dlplus.
Originally there was code in there to try to be case-insensitive and
display all uppercase to the client by default, and there was a "-f"
commandline flag to disable that. But as we discovered, the uppercase
conversion wasn't actually working.
So a few weeks ago I reversed the logic to disable the case-insensitive
uppercase by default, and use a "-u" option to enable it, then actually
hid that -u from the help output since it wasn't actually working.
Now I found the original problem, but am leaving the new default
behavior and -u option to get the uppercase behavior.
So now, by default, it's case-sensitive on the host, and displays the
true filenames to the client. And the -u option makes it
case-insensitive on the host, and displays all uppercase to the client.
(which should probably go back to being default as long as it works, but
I'm not going to do that yet)
The reason it used to produce zero-byte files was that, the host would
display a fictitious all uppercase filename to the client, and when the
user asks to load a file, TS-DOS would immediately create the empty file
on the client when the user hits the F1-Load button and answers Y,
before actually getting any data from the server.
Then the server would try to open() the requested filename, which is the
uppercase version of the filename, which doesn't exists, so the server
sends back an error response to the client, and TS-DOS reports that as a
communication error and aborts the operation, but leaves behind the
empty new file it already created.
The fix in the code was easy. The work of scanning all the files and
doing the case-insensitive match and remembering both the fake and real
filenames was already in there done by John I think. Merely in the
routine that opens a file, it was using the variable that holds the
filename as it came from the client, rather than the struct element that
holds the matching real filename.
So, for bootstrapping REXCPM, or anything else where you get files with
mixed case on the host but things on the 100 expect them to all be
uppercase, you can use "dl -u" without having to rename all the files on
the host.
--
bkw