Path

The Path: module provides pure string-based path manipulation plus filesystem queries. All methods follow the ByRef convention.


Call Effect
Path:Join(a, b, outVar) Joined path with native separator → outVar
Path:DirName(p, outVar) / Path:DirectoryName(p, outVar) Parent directory ("." if none) → outVar
Path:BaseName(p, outVar) / Path:FileName(p, outVar) Filename including extension → outVar
Path:Stem(p, outVar) Filename without extension → outVar
Path:Extension(p, outVar) Extension with dot, e.g. ".ks"outVar
Path:Exists(p, outVar) true if path exists → outVar
Path:IsFile(p, outVar) true if regular file → outVar
Path:IsDir(p, outVar) / Path:IsDirectory(p, outVar) true if directory → outVar
Path:Absolute(p, outVar) Absolute path string → outVar
Var:String result;
Path:Join("src", "main.ks", result);
Konsol:Print(result);           // src/main.ks  (or src\main.ks on Windows)

Path:Extension("readme.md", result);
Konsol:Print(result);           // .md

Path:Stem("readme.md", result);
Konsol:Print(result);           // readme

Path:DirName("src/main.ks", result);
Konsol:Print(result);           // src

Var:Boolean exists;
Path:Exists("script.ks", exists);
Konsol:Print(exists);           // true or false

Path:Absolute(".", result);
Konsol:Print(result);           // full path of current directory

Examples

// 27_os_path.ks — OS and Path modules

Var:String result;
Var:Boolean exists;
Var:Boolean isFile;
Var:Boolean isDir;
Var:String envVal;
Var:String cwd;
Var:Boolean ok;
Var:Number sz;
List:String entries;

// ── Path: pure string operations (no filesystem access) ──────────────────────
Konsol:Print("=== Path:BaseName ===");
Path:BaseName("foo/bar/baz.ks", result);
Konsol:Print(result);         // baz.ks

Konsol:Print("=== Path:DirName ===");
Path:DirName("foo/bar/baz.ks", result);
Konsol:Print(result);         // foo/bar

Konsol:Print("=== Path:Stem ===");
Path:Stem("foo/bar/baz.ks", result);
Konsol:Print(result);         // baz

Konsol:Print("=== Path:Extension ===");
Path:Extension("foo/bar/baz.ks", result);
Konsol:Print(result);         // .ks

Konsol:Print("=== Path:Join ===");
Path:Join("foo/bar", "baz.ks", result);
Konsol:Print(result);         // foo/bar/baz.ks  (separator is platform-native)

// ── Path: filesystem queries ─────────────────────────────────────────────────
Konsol:Print("=== Path:Exists / IsFile / IsDir ===");
Path:Exists("27_os_path.ks", exists);
Konsol:Print(exists);         // true
Path:IsFile("27_os_path.ks", isFile);
Konsol:Print(isFile);         // true
Path:IsDir("27_os_path.ks", isDir);
Konsol:Print(isDir);          // false

// ── OS: environment ──────────────────────────────────────────────────────────
Konsol:Print("=== OS:GetEnv / SetEnv ===");
OS:SetEnv("MINKS_TEST", "hello");
OS:GetEnv("MINKS_TEST", envVal);
Konsol:Print(envVal);         // hello

OS:GetEnv("THIS_VAR_DOES_NOT_EXIST_XYZ", envVal);
Konsol:Print(envVal);         // (empty string)

// ── OS: cwd ──────────────────────────────────────────────────────────────────
Konsol:Print("=== OS:Cwd ===");
OS:Cwd(cwd);
Konsol:Print(cwd);            // some absolute path

// ── OS: MkDir / ListDir / Remove ─────────────────────────────────────────────
Konsol:Print("=== OS:MkDir / ListDir / Remove ===");
OS:MkDir("_minks_tmp_dir", ok);
Path:IsDir("_minks_tmp_dir", isDir);
Konsol:Print(isDir);          // true

OS:ListDir(".", entries);
List:Size(entries, sz);
Konsol:Print(sz);             // >= 1

OS:Remove("_minks_tmp_dir", ok);
Path:Exists("_minks_tmp_dir", exists);
Konsol:Print(exists);         // false

// ── OS: MkDirs ───────────────────────────────────────────────────────────────
Konsol:Print("=== OS:MkDirs ===");
OS:MkDirs("_minks_a/b/c", ok);
Path:IsDir("_minks_a/b/c", isDir);
Konsol:Print(isDir);          // true
OS:Remove("_minks_a/b/c", ok);
OS:Remove("_minks_a/b", ok);
OS:Remove("_minks_a", ok);

Konsol:Print("done");