blob: 22c399e2d06750a543c31b8b4ede22d3db9ea133 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# shitty vfs implementation
# proc and /bin arent on disk, theyre completely virtual
const TASK_STATES = { "free", "ready", "dead", "blocked" }
global vfs_owns = fn(path) do
if path == "/proc" or path:starts_with?("/proc/") return :true
return :false
end
global parse_pid = fn(text) do
if text:len() == 0 return -1
let number = 0
for index in 0..text:len() do
const code = text[index]:ascii()
if code < 48 or code > 57 return -1
number = number * 10 + (code - 48)
end
return number
end
global vfs_ls = fn(path) do
if path == "/proc" do
puts(" uptime\n meminfo\n")
for pid in 0..task_max() do
if task_state(pid) != 0 puts(" #{pid}\n")
end
end
else do puts("ls: #{path}: no such directory\n") end
end
global vfs_cat = fn(path) do
if path == "/proc/uptime" do puts("#{math.floor(uptime() / 100)}s\n") return :nil end
if path == "/proc/meminfo" do puts("#{(mem_free() shr 20)} MiB free / #{(mem_total() shr 20)} MiB total\n") return :nil end
if path:starts_with?("/proc/") do
const pid = parse_pid(path[6..])
if pid >= 0 and pid < task_max() and task_state(pid) != 0 do
puts("pid #{pid}: #{TASK_STATES[task_state(pid)]}\n")
return :nil
end
puts("cat: #{path}: no such file\n")
return :nil
end
puts("cat: #{path}: no such file\n")
end
|