A program can ask where it came from
SWI osWhereAmI hands back the path the program was loaded from, on the same terms as osArgument, and Libraries/path.asm joins a name to the place another thing is in. Between them an application can find its own assets: ask where you are, then pathBeside that and the file's name. The answer FOLLOWS THE PROGRAM AND NOT THE PERSON, which is the whole point and the reason the working directory could not serve. A program's assets are relative to the program and its arguments are relative to whoever ran it, and cwd can only be one of them - setting it to the program's own would mean "Play mytune.tune", typed by somebody in their own directory, looked in Play's. It is made absolute before the program starts, because the path the search settled on may be a bare name: a program found where somebody was standing is named by the word that was typed, and a bare name means the working directory - which a program is entitled to move out of. Worked out once, at the start, since where a program came from is a fact about its start and cannot change afterwards. Joining is a LIBRARY and not a service. A service that opened a file relative to the program would need a twin for every file operation there is - read, save, info, block, start, write, done, delete, rename - while one service handing back a path composes with all of them. ---- And the root's own path was "//" ---- Found by the first caller that asks. shellPath prepends a separator in front of whatever string it is given, so being handed the separator itself wrote two of them. Nothing saw it while the only caller was the prompt, which asks where it is only when that is not the root. It is handed an empty string now, and cosmosWhere runs a program from the root. Where.sbx exists to be run rather than read, and is on the test disk twice: at the root, where it is found by the bare word typed, and in /Apps, where it is found by a path that already says where it is. 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
d9ebc76cf5
commit
2defbb49e2
@@ -18,6 +18,7 @@ Life.sbx 1396
|
||||
Snake.sbx 2164
|
||||
Keys.sbx 664
|
||||
Say.sbx 156
|
||||
Where.sbx 827
|
||||
Break.sbx 149
|
||||
Grid.sbx 571
|
||||
Press.sbx 872
|
||||
@@ -31,7 +32,7 @@ Crash.sbx 632
|
||||
vars.script 50
|
||||
blocks.script 343
|
||||
loops.script 272
|
||||
splash.tune 189
|
||||
splash.tune 210
|
||||
tune.sbx 318
|
||||
Play.sbx 2526
|
||||
notes.txt 21
|
||||
@@ -50,7 +51,7 @@ args.script 64
|
||||
pass.script 20
|
||||
holds.script 87
|
||||
crossed.txt 560
|
||||
37 files, 1 directory
|
||||
38 files, 1 directory
|
||||
> exit
|
||||
halted
|
||||
Execution halted.
|
||||
|
||||
@@ -8,6 +8,7 @@ Life.sbx 1396
|
||||
Snake.sbx 2164
|
||||
Keys.sbx 664
|
||||
Say.sbx 156
|
||||
Where.sbx 827
|
||||
Break.sbx 149
|
||||
Grid.sbx 571
|
||||
Press.sbx 872
|
||||
@@ -21,7 +22,7 @@ Crash.sbx 632
|
||||
vars.script 50
|
||||
blocks.script 343
|
||||
loops.script 272
|
||||
splash.tune 189
|
||||
splash.tune 210
|
||||
tune.sbx 318
|
||||
Play.sbx 2526
|
||||
notes.txt 21
|
||||
@@ -39,7 +40,7 @@ aloud.script 59
|
||||
args.script 64
|
||||
pass.script 20
|
||||
holds.script 87
|
||||
36 files, 1 directory
|
||||
37 files, 1 directory
|
||||
> drive 1
|
||||
> dir
|
||||
other.txt 28
|
||||
|
||||
@@ -25,6 +25,7 @@ Life.sbx 1396
|
||||
Snake.sbx 2164
|
||||
Keys.sbx 664
|
||||
Say.sbx 156
|
||||
Where.sbx 827
|
||||
Break.sbx 149
|
||||
Grid.sbx 571
|
||||
Press.sbx 872
|
||||
@@ -38,7 +39,7 @@ Crash.sbx 632
|
||||
vars.script 50
|
||||
blocks.script 343
|
||||
loops.script 272
|
||||
splash.tune 189
|
||||
splash.tune 210
|
||||
tune.sbx 318
|
||||
Play.sbx 2526
|
||||
notes.txt 21
|
||||
@@ -56,7 +57,7 @@ aloud.script 59
|
||||
args.script 64
|
||||
pass.script 20
|
||||
holds.script 87
|
||||
36 files, 1 directory
|
||||
37 files, 1 directory
|
||||
> exit
|
||||
halted
|
||||
Execution halted.
|
||||
|
||||
@@ -15,6 +15,7 @@ Life.sbx 1396
|
||||
Snake.sbx 2164
|
||||
Keys.sbx 664
|
||||
Say.sbx 156
|
||||
Where.sbx 827
|
||||
Break.sbx 149
|
||||
Grid.sbx 571
|
||||
Press.sbx 872
|
||||
@@ -28,7 +29,7 @@ Crash.sbx 632
|
||||
vars.script 50
|
||||
blocks.script 343
|
||||
loops.script 272
|
||||
splash.tune 189
|
||||
splash.tune 210
|
||||
tune.sbx 318
|
||||
Play.sbx 2526
|
||||
notes.txt 21
|
||||
@@ -46,7 +47,7 @@ aloud.script 59
|
||||
args.script 64
|
||||
pass.script 20
|
||||
holds.script 87
|
||||
36 files, 1 directory
|
||||
37 files, 1 directory
|
||||
> exit
|
||||
halted
|
||||
Execution halted.
|
||||
|
||||
@@ -15,6 +15,7 @@ Life.sbx 1396
|
||||
Snake.sbx 2164
|
||||
Keys.sbx 664
|
||||
Say.sbx 156
|
||||
Where.sbx 827
|
||||
Break.sbx 149
|
||||
Grid.sbx 571
|
||||
Press.sbx 872
|
||||
@@ -28,7 +29,7 @@ Crash.sbx 632
|
||||
vars.script 50
|
||||
blocks.script 343
|
||||
loops.script 272
|
||||
splash.tune 189
|
||||
splash.tune 210
|
||||
tune.sbx 318
|
||||
Play.sbx 2526
|
||||
notes.txt 21
|
||||
@@ -46,7 +47,7 @@ aloud.script 59
|
||||
args.script 64
|
||||
pass.script 20
|
||||
holds.script 87
|
||||
36 files, 1 directory
|
||||
37 files, 1 directory
|
||||
> exit
|
||||
halted
|
||||
Execution halted.
|
||||
|
||||
@@ -101,6 +101,7 @@ Life.sbx 1396
|
||||
Snake.sbx 2164
|
||||
Keys.sbx 664
|
||||
Say.sbx 156
|
||||
Where.sbx 827
|
||||
Break.sbx 149
|
||||
Grid.sbx 571
|
||||
Press.sbx 872
|
||||
@@ -114,7 +115,7 @@ Crash.sbx 632
|
||||
vars.script 50
|
||||
blocks.script 343
|
||||
loops.script 272
|
||||
splash.tune 189
|
||||
splash.tune 210
|
||||
tune.sbx 318
|
||||
Play.sbx 2526
|
||||
notes.txt 21
|
||||
@@ -132,7 +133,7 @@ aloud.script 59
|
||||
args.script 64
|
||||
pass.script 20
|
||||
holds.script 87
|
||||
36 files, 1 directory
|
||||
37 files, 1 directory
|
||||
> exit
|
||||
halted
|
||||
Execution halted.
|
||||
|
||||
@@ -20,6 +20,7 @@ Life.sbx 1396
|
||||
Snake.sbx 2164
|
||||
Keys.sbx 664
|
||||
Say.sbx 156
|
||||
Where.sbx 827
|
||||
Break.sbx 149
|
||||
Grid.sbx 571
|
||||
Press.sbx 872
|
||||
@@ -33,7 +34,7 @@ Crash.sbx 632
|
||||
vars.script 50
|
||||
blocks.script 343
|
||||
loops.script 272
|
||||
splash.tune 189
|
||||
splash.tune 210
|
||||
tune.sbx 318
|
||||
Play.sbx 2526
|
||||
notes.txt 21
|
||||
@@ -51,7 +52,7 @@ aloud.script 59
|
||||
args.script 64
|
||||
pass.script 20
|
||||
holds.script 87
|
||||
36 files, 1 directory
|
||||
37 files, 1 directory
|
||||
> exit
|
||||
halted
|
||||
Execution halted.
|
||||
|
||||
@@ -8,6 +8,7 @@ Life.sbx 1396
|
||||
Snake.sbx 2164
|
||||
Keys.sbx 664
|
||||
Say.sbx 156
|
||||
Where.sbx 827
|
||||
Break.sbx 149
|
||||
Grid.sbx 571
|
||||
Press.sbx 872
|
||||
@@ -21,7 +22,7 @@ Crash.sbx 632
|
||||
vars.script 50
|
||||
blocks.script 343
|
||||
loops.script 272
|
||||
splash.tune 189
|
||||
splash.tune 210
|
||||
tune.sbx 318
|
||||
Play.sbx 2526
|
||||
notes.txt 21
|
||||
@@ -39,7 +40,7 @@ aloud.script 59
|
||||
args.script 64
|
||||
pass.script 20
|
||||
holds.script 87
|
||||
36 files, 1 directory
|
||||
37 files, 1 directory
|
||||
> load
|
||||
load what?
|
||||
> load nosuch.sbx
|
||||
|
||||
@@ -6,6 +6,7 @@ Life.sbx 1396
|
||||
Snake.sbx 2164
|
||||
Keys.sbx 664
|
||||
Say.sbx 156
|
||||
Where.sbx 827
|
||||
Break.sbx 149
|
||||
Grid.sbx 571
|
||||
Press.sbx 872
|
||||
@@ -19,7 +20,7 @@ Crash.sbx 632
|
||||
vars.script 50
|
||||
blocks.script 343
|
||||
loops.script 272
|
||||
splash.tune 189
|
||||
splash.tune 210
|
||||
tune.sbx 318
|
||||
Play.sbx 2526
|
||||
notes.txt 21
|
||||
@@ -37,7 +38,7 @@ aloud.script 59
|
||||
args.script 64
|
||||
pass.script 20
|
||||
holds.script 87
|
||||
36 files, 1 directory
|
||||
37 files, 1 directory
|
||||
> load Say.sbx
|
||||
loaded, starting at 5000
|
||||
> run the disk took its time
|
||||
|
||||
@@ -15,6 +15,7 @@ Life.sbx 1396
|
||||
Snake.sbx 2164
|
||||
Keys.sbx 664
|
||||
Say.sbx 156
|
||||
Where.sbx 827
|
||||
Break.sbx 149
|
||||
Grid.sbx 571
|
||||
Press.sbx 872
|
||||
@@ -28,7 +29,7 @@ Crash.sbx 632
|
||||
vars.script 50
|
||||
blocks.script 343
|
||||
loops.script 272
|
||||
splash.tune 189
|
||||
splash.tune 210
|
||||
tune.sbx 318
|
||||
Play.sbx 2526
|
||||
notes.txt 21
|
||||
@@ -46,7 +47,7 @@ aloud.script 59
|
||||
args.script 64
|
||||
pass.script 20
|
||||
holds.script 87
|
||||
36 files, 1 directory
|
||||
37 files, 1 directory
|
||||
> exit
|
||||
halted
|
||||
Execution halted.
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
CosmOS
|
||||
> Where
|
||||
loaded from /Where.sbx
|
||||
finished
|
||||
> Where splash.tune
|
||||
loaded from /Where.sbx
|
||||
beside it: /splash.tune
|
||||
finished
|
||||
> mkdir /work
|
||||
made
|
||||
> cd /work
|
||||
/work> Where
|
||||
loaded from /Apps/Where.sbx
|
||||
finished
|
||||
/work> Where tiles.atlas
|
||||
loaded from /Apps/Where.sbx
|
||||
beside it: /Apps/tiles.atlas
|
||||
finished
|
||||
/work> cd /
|
||||
> load /Apps/Where.sbx
|
||||
loaded, starting at 5000
|
||||
> run notes.txt
|
||||
loaded from /Apps/Where.sbx
|
||||
beside it: /Apps/notes.txt
|
||||
finished
|
||||
> exit
|
||||
halted
|
||||
Execution halted.
|
||||
[exit 0]
|
||||
Reference in New Issue
Block a user