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

Reply via email to