-
Notifications
You must be signed in to change notification settings - Fork 58
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
VDFS - *ADFS #186
Comments
What I think is happening here is that nothing is closing the EXEC file. The OS would ordinarily close it after it has got an EOF indication from it but that may not be happening when the *ADFS command is being read. VDFS is not closing it when ADFS declares it is taking over the filing system vectors because, at least on the Master, filing systems are supposed to be able to keep files open while other filing systems are selected and the Master file switch takes care of tracking which channel numbers belong to which filing systems. So then, on a Model B, the OS tried to read from the VDFS EXEC file while ADFS is the current filing system and ADFS doesn't know that file channel. Do you have any thoughts on what should be the correct behaviour? |
Thanks Steve for the analysis. Very interesting. It's difficult to say what "should be the correct behaviour" - the expected behaviour was the EXEC file would execute the script in its entirety as if entering at the keyboard. Perhaps this is me being too hopeful, but the error message with the channel was very unexpected. |
Mark, where does that ADFS:filename syntax in *COPY come from? Is it NFS/Econet as I have not seen it before. I will have to test it, but I think what you are hoping for may work on a Master because the *ADFS would make ADFS the "permanant" filing system but the file switch would temporarily switch back to VDFS to continue reading the EXEC file, though the Master syntax for a temorarly filing system is -fs- rather than fs: On a BBC B, you could possibly work around switching away from the filing system that is hosting the EXEC file by programming some commands into a soft key with *KEY, inserting that into the keyboard buffer with the relevant *FX, then have the last one of these commands *EXEC a second file to continue, What makes this complicated is that the EXEC file is not read into memory when first opened or stuffed into the keyboard buffer but read one character at a time with OSBGET. So if BASIC if the current language, BASIC asks for the next line of input via OSWORD 0, that internally calls OSRDCH to get characters to assemble the line of input and OSRDCH notices there is an EXEC file open and fetches a character via OSBGET rather than trying to remove a character from the keyboard buffer. |
I did some testing by creating an EXEC file on an (emulated) ADFS hard disc with the contents:
Running this on a Master works, i.e. the output of *status and *help are both visible. Running on a BBC B causes the exec file to be abandoned when *TAPE takes effect, i.e. the *help is skipped. I'll do some digging and see what is doing that. |
Running on a BBC B with ADFS as the old filing system, hosting the EXEC file, and TAPE as the new filing system, the sequence of events is:
|
By comparison, MOS 3.20 with ADFS 1.50, *TAPE still issues FSC A=6 but the ADFS handler for that does NOT issue OSBYTE &77 so SPOOL/EXEC files are not closed. The ADFS handler for FSC A=6 also does not issue OSBYTE &77 - all it does is note it is not the current filing system any longer. Perhaps it needs conditional code to do the OSBYTE &77 if the machine is something prior to the Master. |
Checking around, the ADFS::$.0.filename syntax appears to come from RISCOS. I thought I had seen it in use on a BBC Master, so that may have been related to network operations. The implementation of that in VDFS e.g. for a *COPY would then be a feature request rather than a bug/issue. I suppose the question now becomes,
I appreciate very much the time taken for the analysis and fix you have put in place. |
Mark, On the question of what VDFS is trying to be, the idea was to provide access to files on the host in an easier way than having to copy them into/out of SSD files. As Linux and Windows both have a hierarchical filing system it made most sense to make VDFS ADFS-like, though VDFS does also have a DFS-like mode*. When working like ADFS, I want it to be close enough that software designed for ADFS will work but if it can be extended beyond ADFS in ways that don't break ADFS compatibility then I am quite happy with that. Already, returning "others" file permissions and the host file date stamp are more like NFS than ADFS and it also treats '&' (user's home directory) the same as root. On *COPY being able to copy files between filing systems, how easy that is depends very much on whether wildcards are needed. AFAIK, most filing systems provide an OSGBPB call to read the filenames in a given directory but not a call to find the list of filenames that match a wildcard so COPY may have to do that too. JGH's TreeCopy program, written in BASIC, does quite of lot of the rest of what would be required, i.e. for small files it loads as many as it can into memory with OSFILE, switches filing system, then writes them out again whereas for large files it copies chunks of the file with OSGBPB.
It leaves the current directory as-is, so it is possible to navigate to a directory with *DIR in ADFS mode, then swaps to the DFS single letter concept of directories where the letter is stored in the .inf file, not real sub-directories on the host. This is specifically for running software that has been written around this behaviour of DFS. Running:
gets back to ADFS mode where *DIR moves around the hierarchy again. |
I have created a release with Windows binaries: https://github.com/stardot/b-em/releases/tag/vdfs%23186 |
Thank you Steve for such an indepth and thorough answer. The BBC certainly exits more gracefully now instead of the channel error when the filesystem changes through an EXEC file. It looks like the Master is the way to go to set up the disc with TreeCopy to move the files instead of the BBC with the 256K turbo and an EXEC file or an Archie with an EXEC file might also handle it as a script as I'd originally thought. |
Not sure if this is a user error or a VDFS error.
If I build an exec file e.g. "TEST" containing
*ADFS
and *EXEC the file *E.TEST
There is an error
"Channel on channel xx"
Whereas typing *ADFS at the command prompt
works correctly.
The text was updated successfully, but these errors were encountered: