Name a drive in a path
"1:/notes", or "1:" on its own for wherever that drive already was. Done in sbfsWalk, which is where every path in the system arrives - eight callers between the shell, the config reader and the filesystem - so it works for anything that takes a path rather than for whichever commands somebody remembered to change. NAMING A DRIVE GOES THERE AND STAYS THERE. Switching for the length of one command and switching back reads better and cannot work: a path resolves to a start block and a length, and those mean nothing without the drive they were read from. A load that resolved on drive 1 and then read its blocks on drive 0 would read the right blocks of the wrong disk. A name beginning with a digit is still a name. The colon is the whole of what tells them apart, and /2things is on the fixture disk to keep it that way. Two bugs, and the second is the interesting one. SUB sets carry on a BORROW, so a character below '0' leaves it set - and the test for "not a digit" branched on clear. Every prefix was ignored. Then the leading-separator test reads the first character through DP0, which sbfsPathDrive could not move because RET puts DP0 back the way it found it. It advanced SbfsPathAt and DP0 still pointed at the digit, so every prefixed path was judged relative and walked from the named drive's working directory. IT ONLY SHOWED WHEN THAT DRIVE WAS STANDING SOMEWHERE OTHER THAN ITS ROOT, because a relative walk from the root is an absolute one - so "cd 1:/2things" worked from a fresh boot and failed after "cd 1:/notes". The test does it in that order for that reason. Copying between two disks is still not one command: each path resolves on its own drive and the drive stays where the last path left it. That wants Copy to change drives between blocks. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E2JrLzFvuFX9fgi1LDRjrW
This commit is contained in:
co-authored by
Claude Opus 5
parent
5644c24113
commit
4cc6393f5b
@@ -820,10 +820,26 @@ than one disk exists. That is the whole reason this was affordable.
|
||||
The version is not among them. It is checked at mount and thrown away, because a version one
|
||||
disk's zero parent already reads as "in the root", which is where all of its files are.
|
||||
|
||||
**Paths do not name a drive yet.** `drive 1` then a path is how you reach the other disk, so
|
||||
copying between two of them is not possible in one command. A prefix like `1:/notes` is the
|
||||
obvious next thing and it touches the path walker, which is why it is not in the same change
|
||||
as the record.
|
||||
**A path may name a drive**, as a digit and a colon on the front: `1:/notes`, or `1:` on its
|
||||
own for wherever that drive already was. It is handled where every path in the system arrives,
|
||||
so it works for anything that takes one rather than for whichever commands somebody remembered.
|
||||
|
||||
**Naming a drive goes there and stays there.** Switching for the length of one command and
|
||||
switching back reads better in a listing and cannot work: what a path resolves to is a start
|
||||
block and a length, and those mean nothing without the drive they were read from. A `load`
|
||||
that resolved on drive 1 and then read its blocks on drive 0 would read the right blocks of
|
||||
the wrong disk.
|
||||
|
||||
**A name that begins with a digit is still a name**, because the colon is the whole of what
|
||||
tells the two apart. `2things` is a directory; `2:` is a drive.
|
||||
|
||||
A drive the machine cannot read makes the whole path unfindable, and says so as `no such
|
||||
file` - which it is, since there is nowhere for the rest of it to be.
|
||||
|
||||
**Copying between two disks is still not one command.** Each path resolves on its own drive
|
||||
and the drive stays where the last path left it, so a copy would read from one and write to
|
||||
the other with only one of them selected. That wants the copy itself to change drives between
|
||||
blocks, which is a change to `Copy` rather than to paths.
|
||||
|
||||
### Bank Numbers Are One Namespace:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user